diff --git a/Transfer Learning/Accident_Classifier/.dockerignore b/Transfer Learning/Accident_Classifier/.dockerignore
new file mode 100644
index 00000000..3b669254
--- /dev/null
+++ b/Transfer Learning/Accident_Classifier/.dockerignore
@@ -0,0 +1,222 @@
+# Repo-specific DockerIgnore -------------------------------------------------------------------------------------------
+.git
+.cache
+.idea
+runs
+output
+coco
+storage.googleapis.com
+
+data/samples/*
+**/results*.csv
+*.jpg
+
+# Neural Network weights -----------------------------------------------------------------------------------------------
+**/*.pt
+**/*.pth
+**/*.onnx
+**/*.engine
+**/*.mlmodel
+**/*.torchscript
+**/*.torchscript.pt
+**/*.tflite
+**/*.h5
+**/*.pb
+*_saved_model/
+*_web_model/
+*_openvino_model/
+
+# Below Copied From .gitignore -----------------------------------------------------------------------------------------
+# Below Copied From .gitignore -----------------------------------------------------------------------------------------
+
+
+# GitHub Python GitIgnore ----------------------------------------------------------------------------------------------
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+*$py.class
+
+# C extensions
+*.so
+
+# Distribution / packaging
+.Python
+env/
+build/
+develop-eggs/
+dist/
+downloads/
+eggs/
+.eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+wheels/
+*.egg-info/
+wandb/
+.installed.cfg
+*.egg
+
+# PyInstaller
+# Usually these files are written by a python script from a template
+# before PyInstaller builds the exe, so as to inject date/other infos into it.
+*.manifest
+*.spec
+
+# Installer logs
+pip-log.txt
+pip-delete-this-directory.txt
+
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.coverage
+.coverage.*
+.cache
+nosetests.xml
+coverage.xml
+*.cover
+.hypothesis/
+
+# Translations
+*.mo
+*.pot
+
+# Django stuff:
+*.log
+local_settings.py
+
+# Flask stuff:
+instance/
+.webassets-cache
+
+# Scrapy stuff:
+.scrapy
+
+# Sphinx documentation
+docs/_build/
+
+# PyBuilder
+target/
+
+# Jupyter Notebook
+.ipynb_checkpoints
+
+# pyenv
+.python-version
+
+# celery beat schedule file
+celerybeat-schedule
+
+# SageMath parsed files
+*.sage.py
+
+# dotenv
+.env
+
+# virtualenv
+.venv*
+venv*/
+ENV*/
+
+# Spyder project settings
+.spyderproject
+.spyproject
+
+# Rope project settings
+.ropeproject
+
+# mkdocs documentation
+/site
+
+# mypy
+.mypy_cache/
+
+
+# https://github.com/github/gitignore/blob/master/Global/macOS.gitignore -----------------------------------------------
+
+# General
+.DS_Store
+.AppleDouble
+.LSOverride
+
+# Icon must end with two \r
+Icon
+Icon?
+
+# Thumbnails
+._*
+
+# Files that might appear in the root of a volume
+.DocumentRevisions-V100
+.fseventsd
+.Spotlight-V100
+.TemporaryItems
+.Trashes
+.VolumeIcon.icns
+.com.apple.timemachine.donotpresent
+
+# Directories potentially created on remote AFP share
+.AppleDB
+.AppleDesktop
+Network Trash Folder
+Temporary Items
+.apdisk
+
+
+# https://github.com/github/gitignore/blob/master/Global/JetBrains.gitignore
+# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm
+# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
+
+# User-specific stuff:
+.idea/*
+.idea/**/workspace.xml
+.idea/**/tasks.xml
+.idea/dictionaries
+.html # Bokeh Plots
+.pg # TensorFlow Frozen Graphs
+.avi # videos
+
+# Sensitive or high-churn files:
+.idea/**/dataSources/
+.idea/**/dataSources.ids
+.idea/**/dataSources.local.xml
+.idea/**/sqlDataSources.xml
+.idea/**/dynamic.xml
+.idea/**/uiDesigner.xml
+
+# Gradle:
+.idea/**/gradle.xml
+.idea/**/libraries
+
+# CMake
+cmake-build-debug/
+cmake-build-release/
+
+# Mongo Explorer plugin:
+.idea/**/mongoSettings.xml
+
+## File-based project format:
+*.iws
+
+## Plugin-specific files:
+
+# IntelliJ
+out/
+
+# mpeltonen/sbt-idea plugin
+.idea_modules/
+
+# JIRA plugin
+atlassian-ide-plugin.xml
+
+# Cursive Clojure plugin
+.idea/replstate.xml
+
+# Crashlytics plugin (for Android Studio and IntelliJ)
+com_crashlytics_export_strings.xml
+crashlytics.properties
+crashlytics-build.properties
+fabric.properties
diff --git a/Transfer Learning/Accident_Classifier/CITATION.cff b/Transfer Learning/Accident_Classifier/CITATION.cff
new file mode 100644
index 00000000..c277230d
--- /dev/null
+++ b/Transfer Learning/Accident_Classifier/CITATION.cff
@@ -0,0 +1,14 @@
+cff-version: 1.2.0
+preferred-citation:
+ type: software
+ message: If you use YOLOv5, please cite it as below.
+ authors:
+ - family-names: Jocher
+ given-names: Glenn
+ orcid: "https://orcid.org/0000-0001-5950-6979"
+ title: "YOLOv5 by Ultralytics"
+ version: 7.0
+ doi: 10.5281/zenodo.3908559
+ date-released: 2020-5-29
+ license: AGPL-3.0
+ url: "https://github.com/ultralytics/yolov5"
diff --git a/Transfer Learning/Accident_Classifier/CONTRIBUTING.md b/Transfer Learning/Accident_Classifier/CONTRIBUTING.md
new file mode 100644
index 00000000..7b9c1cd6
--- /dev/null
+++ b/Transfer Learning/Accident_Classifier/CONTRIBUTING.md
@@ -0,0 +1,76 @@
+## Contributing to YOLOv5 🚀
+
+We love your input! We want to make contributing to YOLOv5 as easy and transparent as possible, whether it's:
+
+- Reporting a bug
+- Discussing the current state of the code
+- Submitting a fix
+- Proposing a new feature
+- Becoming a maintainer
+
+YOLOv5 works so well due to our combined community effort, and for every small improvement you contribute you will be helping push the frontiers of what's possible in AI 😃!
+
+## Submitting a Pull Request (PR) 🛠️
+
+Submitting a PR is easy! This example shows how to submit a PR for updating `requirements.txt` in 4 steps:
+
+### 1. Select File to Update
+
+Select `requirements.txt` to update by clicking on it in GitHub.
+
+
+
+### 2. Click 'Edit this file'
+
+The button is in the top-right corner.
+
+
+
+### 3. Make Changes
+
+Change the `matplotlib` version from `3.2.2` to `3.3`.
+
+
+
+### 4. Preview Changes and Submit PR
+
+Click on the **Preview changes** tab to verify your updates. At the bottom of the screen select 'Create a **new branch** for this commit', assign your branch a descriptive name such as `fix/matplotlib_version` and click the green **Propose changes** button. All done, your PR is now submitted to YOLOv5 for review and approval 😃!
+
+
+
+### PR recommendations
+
+To allow your work to be integrated as seamlessly as possible, we advise you to:
+
+- ✅ Verify your PR is **up-to-date** with `ultralytics/yolov5` `master` branch. If your PR is behind you can update your code by clicking the 'Update branch' button or by running `git pull` and `git merge master` locally.
+
+
+
+- ✅ Verify all YOLOv5 Continuous Integration (CI) **checks are passing**.
+
+
+
+- ✅ Reduce changes to the absolute **minimum** required for your bug fix or feature addition. _"It is not daily increase but daily decrease, hack away the unessential. The closer to the source, the less wastage there is."_ — Bruce Lee
+
+## Submitting a Bug Report 🐛
+
+If you spot a problem with YOLOv5 please submit a Bug Report!
+
+For us to start investigating a possible problem we need to be able to reproduce it ourselves first. We've created a few short guidelines below to help users provide what we need to get started.
+
+When asking a question, people will be better able to provide help if you provide **code** that they can easily understand and use to **reproduce** the problem. This is referred to by community members as creating a [minimum reproducible example](https://docs.ultralytics.com/help/minimum_reproducible_example/). Your code that reproduces the problem should be:
+
+- ✅ **Minimal** – Use as little code as possible that still produces the same problem
+- ✅ **Complete** – Provide **all** parts someone else needs to reproduce your problem in the question itself
+- ✅ **Reproducible** – Test the code you're about to provide to make sure it reproduces the problem
+
+In addition to the above requirements, for [Ultralytics](https://www.ultralytics.com/) to provide assistance your code should be:
+
+- ✅ **Current** – Verify that your code is up-to-date with the current GitHub [master](https://github.com/ultralytics/yolov5/tree/master), and if necessary `git pull` or `git clone` a new copy to ensure your problem has not already been resolved by previous commits.
+- ✅ **Unmodified** – Your problem must be reproducible without any modifications to the codebase in this repository. [Ultralytics](https://www.ultralytics.com/) does not provide support for custom code ⚠️.
+
+If you believe your problem meets all of the above criteria, please close this issue and raise a new one using the 🐛 **Bug Report** [template](https://github.com/ultralytics/yolov5/issues/new/choose) and provide a [minimum reproducible example](https://docs.ultralytics.com/help/minimum_reproducible_example/) to help us better understand and diagnose your problem.
+
+## License
+
+By contributing, you agree that your contributions will be licensed under the [AGPL-3.0 license](https://choosealicense.com/licenses/agpl-3.0/)
diff --git a/Transfer Learning/Accident_Classifier/LICENSE b/Transfer Learning/Accident_Classifier/LICENSE
new file mode 100644
index 00000000..be3f7b28
--- /dev/null
+++ b/Transfer Learning/Accident_Classifier/LICENSE
@@ -0,0 +1,661 @@
+ GNU AFFERO GENERAL PUBLIC LICENSE
+ Version 3, 19 November 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 Affero General Public License is a free, copyleft license for
+software and other kinds of works, specifically designed to ensure
+cooperation with the community in the case of network server software.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+our General Public Licenses are 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.
+
+ 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.
+
+ Developers that use our General Public Licenses protect your rights
+with two steps: (1) assert copyright on the software, and (2) offer
+you this License which gives you legal permission to copy, distribute
+and/or modify the software.
+
+ A secondary benefit of defending all users' freedom is that
+improvements made in alternate versions of the program, if they
+receive widespread use, become available for other developers to
+incorporate. Many developers of free software are heartened and
+encouraged by the resulting cooperation. However, in the case of
+software used on network servers, this result may fail to come about.
+The GNU General Public License permits making a modified version and
+letting the public access it on a server without ever releasing its
+source code to the public.
+
+ The GNU Affero General Public License is designed specifically to
+ensure that, in such cases, the modified source code becomes available
+to the community. It requires the operator of a network server to
+provide the source code of the modified version running there to the
+users of that server. Therefore, public use of a modified version, on
+a publicly accessible server, gives the public access to the source
+code of the modified version.
+
+ An older license, called the Affero General Public License and
+published by Affero, was designed to accomplish similar goals. This is
+a different license, not a version of the Affero GPL, but Affero has
+released a new version of the Affero GPL which permits relicensing under
+this license.
+
+ 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 Affero 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. Remote Network Interaction; Use with the GNU General Public License.
+
+ Notwithstanding any other provision of this License, if you modify the
+Program, your modified version must prominently offer all users
+interacting with it remotely through a computer network (if your version
+supports such interaction) an opportunity to receive the Corresponding
+Source of your version by providing access to the Corresponding Source
+from a network server at no charge, through some standard or customary
+means of facilitating copying of software. This Corresponding Source
+shall include the Corresponding Source for any work covered by version 3
+of the GNU General Public License that is incorporated pursuant to the
+following paragraph.
+
+ 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 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 work with which it is combined will remain governed by version
+3 of the GNU General Public License.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU Affero 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 Affero 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 Affero 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 Affero 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 Affero 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 Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see .
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If your software can interact with users remotely through a computer
+network, you should also make sure that it provides a way for users to
+get its source. For example, if your program is a web application, its
+interface could display a "Source" link that leads users to an archive
+of the code. There are many ways you could offer source, and different
+solutions will be better for different programs; see section 13 for the
+specific requirements.
+
+ 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 AGPL, see
+ .
diff --git a/Transfer Learning/Accident_Classifier/README.md b/Transfer Learning/Accident_Classifier/README.md
new file mode 100755
index 00000000..233ee8d6
--- /dev/null
+++ b/Transfer Learning/Accident_Classifier/README.md
@@ -0,0 +1,13 @@
+### Accident-Classifier
+
+* **[Dataset Link]**(https://drive.google.com/drive/folders/1jUj5JCuWmo7j2C5NhV0RcrNyUZwRrY3n?usp=drive_link)
+
+* **[Demonstration Video]**(https://drive.google.com/file/d/1_VUSGRf9AHrkx6ifLXd9vka9ovZjMaKg/view?usp=sharing)
+
+**Screenshots of Colab Project:**
+![Screenshot 2024-10-03 153901](https://github.com/user-attachments/assets/f990d208-0164-43fa-8907-a72f25d4727c)
+![Screenshot 2024-10-03 152749](https://github.com/user-attachments/assets/fdc88477-acb1-4e31-a13f-f165da50927f)
+![Screenshot 2024-10-03 152800](https://github.com/user-attachments/assets/d03b2b71-5424-4c3c-b2ba-59f42111cd3c)
+
+[Linke of Website Hosted at ngrok](
+https://52dc-35-237-253-65.ngrok-free.app) (hosting might expire after sometime)
diff --git a/Transfer Learning/Accident_Classifier/README.zh-CN.md b/Transfer Learning/Accident_Classifier/README.zh-CN.md
new file mode 100644
index 00000000..f1dc961e
--- /dev/null
+++ b/Transfer Learning/Accident_Classifier/README.zh-CN.md
@@ -0,0 +1,468 @@
+
+
+
+
+
+
+[中文](https://docs.ultralytics.com/zh) | [한국어](https://docs.ultralytics.com/ko) | [日本語](https://docs.ultralytics.com/ja) | [Русский](https://docs.ultralytics.com/ru) | [Deutsch](https://docs.ultralytics.com/de) | [Français](https://docs.ultralytics.com/fr) | [Español](https://docs.ultralytics.com/es) | [Português](https://docs.ultralytics.com/pt) | [Türkçe](https://docs.ultralytics.com/tr) | [Tiếng Việt](https://docs.ultralytics.com/vi) | [العربية](https://docs.ultralytics.com/ar)
+
+
+
+
+YOLOv5 🚀 是世界上最受欢迎的视觉 AI,代表
Ultralytics 对未来视觉 AI 方法的开源研究,结合在数千小时的研究和开发中积累的经验教训和最佳实践。
+
+我们希望这里的资源能帮助您充分利用 YOLOv5。请浏览 YOLOv5
文档 了解详细信息,在
GitHub 上提交问题以获得支持,并加入我们的
Discord 社区进行问题和讨论!
+
+如需申请企业许可,请在 [Ultralytics Licensing](https://www.ultralytics.com/license) 处填写表格
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## YOLOv8 🚀 新品
+
+我们很高兴宣布 Ultralytics YOLOv8 🚀 的发布,这是我们新推出的领先水平、最先进的(SOTA)模型,发布于 **[https://github.com/ultralytics/ultralytics](https://github.com/ultralytics/ultralytics)**。 YOLOv8 旨在快速、准确且易于使用,使其成为广泛的物体检测、图像分割和图像分类任务的极佳选择。
+
+请查看 [YOLOv8 文档](https://docs.ultralytics.com)了解详细信息,并开始使用:
+
+[![PyPI 版本](https://badge.fury.io/py/ultralytics.svg)](https://badge.fury.io/py/ultralytics) [![下载量](https://static.pepy.tech/badge/ultralytics)](https://pepy.tech/project/ultralytics)
+
+```commandline
+pip install ultralytics
+```
+
+
+
+
+
+
+## 文档
+
+有关训练、测试和部署的完整文档见[YOLOv5 文档](https://docs.ultralytics.com/yolov5/)。请参阅下面的快速入门示例。
+
+
+安装
+
+克隆 repo,并要求在 [**Python>=3.8.0**](https://www.python.org/) 环境中安装 [requirements.txt](https://github.com/ultralytics/yolov5/blob/master/requirements.txt) ,且要求 [**PyTorch>=1.8**](https://pytorch.org/get-started/locally/) 。
+
+```bash
+git clone https://github.com/ultralytics/yolov5 # clone
+cd yolov5
+pip install -r requirements.txt # install
+```
+
+
+
+
+推理
+
+使用 YOLOv5 [PyTorch Hub](https://docs.ultralytics.com/yolov5/tutorials/pytorch_hub_model_loading) 推理。最新 [模型](https://github.com/ultralytics/yolov5/tree/master/models) 将自动的从 YOLOv5 [release](https://github.com/ultralytics/yolov5/releases) 中下载。
+
+```python
+import torch
+
+# Model
+model = torch.hub.load("ultralytics/yolov5", "yolov5s") # or yolov5n - yolov5x6, custom
+
+# Images
+img = "https://ultralytics.com/images/zidane.jpg" # or file, Path, PIL, OpenCV, numpy, list
+
+# Inference
+results = model(img)
+
+# Results
+results.print() # or .show(), .save(), .crop(), .pandas(), etc.
+```
+
+
+
+
+使用 detect.py 推理
+
+`detect.py` 在各种来源上运行推理, [模型](https://github.com/ultralytics/yolov5/tree/master/models) 自动从 最新的YOLOv5 [release](https://github.com/ultralytics/yolov5/releases) 中下载,并将结果保存到 `runs/detect` 。
+
+```bash
+python detect.py --weights yolov5s.pt --source 0 # webcam
+ img.jpg # image
+ vid.mp4 # video
+ screen # screenshot
+ path/ # directory
+ list.txt # list of images
+ list.streams # list of streams
+ 'path/*.jpg' # glob
+ 'https://youtu.be/LNwODJXcvt4' # YouTube
+ 'rtsp://example.com/media.mp4' # RTSP, RTMP, HTTP stream
+```
+
+
+
+
+训练
+
+下面的命令重现 YOLOv5 在 [COCO](https://github.com/ultralytics/yolov5/blob/master/data/scripts/get_coco.sh) 数据集上的结果。 最新的 [模型](https://github.com/ultralytics/yolov5/tree/master/models) 和 [数据集](https://github.com/ultralytics/yolov5/tree/master/data)
+将自动的从 YOLOv5 [release](https://github.com/ultralytics/yolov5/releases) 中下载。 YOLOv5n/s/m/l/x 在 V100 GPU 的训练时间为 1/2/4/6/8 天( [多GPU](https://docs.ultralytics.com/yolov5/tutorials/multi_gpu_training) 训练速度更快)。 尽可能使用更大的 `--batch-size` ,或通过 `--batch-size -1` 实现 YOLOv5 [自动批处理](https://github.com/ultralytics/yolov5/pull/5092) 。下方显示的 batchsize 适用于 V100-16GB。
+
+```bash
+python train.py --data coco.yaml --epochs 300 --weights '' --cfg yolov5n.yaml --batch-size 128
+ yolov5s 64
+ yolov5m 40
+ yolov5l 24
+ yolov5x 16
+```
+
+
+
+
+
+
+教程
+
+- [训练自定义数据](https://docs.ultralytics.com/yolov5/tutorials/train_custom_data) 🚀 推荐
+- [获得最佳训练结果的技巧](https://docs.ultralytics.com/guides/model-training-tips/) ☘️
+- [多GPU训练](https://docs.ultralytics.com/yolov5/tutorials/multi_gpu_training)
+- [PyTorch Hub](https://docs.ultralytics.com/yolov5/tutorials/pytorch_hub_model_loading) 🌟 新
+- [TFLite,ONNX,CoreML,TensorRT导出](https://docs.ultralytics.com/yolov5/tutorials/model_export) 🚀
+- [NVIDIA Jetson平台部署](https://docs.ultralytics.com/yolov5/tutorials/running_on_jetson_nano) 🌟 新
+- [测试时增强 (TTA)](https://docs.ultralytics.com/yolov5/tutorials/test_time_augmentation)
+- [模型集成](https://docs.ultralytics.com/yolov5/tutorials/model_ensembling)
+- [模型剪枝/稀疏](https://docs.ultralytics.com/yolov5/tutorials/model_pruning_and_sparsity)
+- [超参数进化](https://docs.ultralytics.com/yolov5/tutorials/hyperparameter_evolution)
+- [冻结层的迁移学习](https://docs.ultralytics.com/yolov5/tutorials/transfer_learning_with_frozen_layers)
+- [架构概述](https://docs.ultralytics.com/yolov5/tutorials/architecture_description) 🌟 新
+- [Roboflow用于数据集、标注和主动学习](https://docs.ultralytics.com/yolov5/tutorials/roboflow_datasets_integration)
+- [ClearML日志记录](https://docs.ultralytics.com/yolov5/tutorials/clearml_logging_integration) 🌟 新
+- [使用Neural Magic的Deepsparse的YOLOv5](https://docs.ultralytics.com/yolov5/tutorials/neural_magic_pruning_quantization) 🌟 新
+- [Comet日志记录](https://docs.ultralytics.com/yolov5/tutorials/comet_logging_integration) 🌟 新
+
+
+
+## 模块集成
+
+
+
+
+
+
+
+
+
+| Roboflow | ClearML ⭐ 新 | Comet ⭐ 新 | Neural Magic ⭐ 新 |
+| :--------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------: |
+| 将您的自定义数据集进行标注并直接导出到 YOLOv5 以进行训练 [Roboflow](https://roboflow.com/?ref=ultralytics) | 自动跟踪、可视化甚至远程训练 YOLOv5 [ClearML](https://clear.ml/)(开源!) | 永远免费,[Comet](https://bit.ly/yolov5-readme-comet2)可让您保存 YOLOv5 模型、恢复训练以及交互式可视化和调试预测 | 使用 [Neural Magic DeepSparse](https://bit.ly/yolov5-neuralmagic),运行 YOLOv5 推理的速度最高可提高6倍 |
+
+## Ultralytics HUB
+
+[Ultralytics HUB](https://www.ultralytics.com/hub) 是我们的⭐**新的**用于可视化数据集、训练 YOLOv5 🚀 模型并以无缝体验部署到现实世界的无代码解决方案。现在开始 **免费** 使用他!
+
+
+
+
+## 为什么选择 YOLOv5
+
+YOLOv5 超级容易上手,简单易学。我们优先考虑现实世界的结果。
+
+
+
+ YOLOv5-P5 640 图
+
+
+
+
+ 图表笔记
+
+- **COCO AP val** 表示 mAP@0.5:0.95 指标,在 [COCO val2017](http://cocodataset.org) 数据集的 5000 张图像上测得, 图像包含 256 到 1536 各种推理大小。
+- **显卡推理速度** 为在 [COCO val2017](http://cocodataset.org) 数据集上的平均推理时间,使用 [AWS p3.2xlarge](https://aws.amazon.com/ec2/instance-types/p3/) V100实例,batchsize 为 32 。
+- **EfficientDet** 数据来自 [google/automl](https://github.com/google/automl) , batchsize 为32。
+- **复现命令** 为 `python val.py --task study --data coco.yaml --iou 0.7 --weights yolov5n6.pt yolov5s6.pt yolov5m6.pt yolov5l6.pt yolov5x6.pt`
+
+
+
+### 预训练模型
+
+| 模型 | 尺寸(像素) | mAPval 50-95 | mAPval 50 | 推理速度CPU b1 (ms) | 推理速度V100 b1 (ms) | 速度V100 b32 (ms) | 参数量(M) | FLOPs@640 (B) |
+| ---------------------------------------------------------------------------------------------- | --------------------- | -------------------- | ----------------- | --------------------------------- | ---------------------------------- | ------------------------------- | ------------------ | ---------------------- |
+| [YOLOv5n](https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5n.pt) | 640 | 28.0 | 45.7 | **45** | **6.3** | **0.6** | **1.9** | **4.5** |
+| [YOLOv5s](https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5s.pt) | 640 | 37.4 | 56.8 | 98 | 6.4 | 0.9 | 7.2 | 16.5 |
+| [YOLOv5m](https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5m.pt) | 640 | 45.4 | 64.1 | 224 | 8.2 | 1.7 | 21.2 | 49.0 |
+| [YOLOv5l](https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5l.pt) | 640 | 49.0 | 67.3 | 430 | 10.1 | 2.7 | 46.5 | 109.1 |
+| [YOLOv5x](https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5x.pt) | 640 | 50.7 | 68.9 | 766 | 12.1 | 4.8 | 86.7 | 205.7 |
+| | | | | | | | | |
+| [YOLOv5n6](https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5n6.pt) | 1280 | 36.0 | 54.4 | 153 | 8.1 | 2.1 | 3.2 | 4.6 |
+| [YOLOv5s6](https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5s6.pt) | 1280 | 44.8 | 63.7 | 385 | 8.2 | 3.6 | 12.6 | 16.8 |
+| [YOLOv5m6](https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5m6.pt) | 1280 | 51.3 | 69.3 | 887 | 11.1 | 6.8 | 35.7 | 50.0 |
+| [YOLOv5l6](https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5l6.pt) | 1280 | 53.7 | 71.3 | 1784 | 15.8 | 10.5 | 76.8 | 111.4 |
+| [YOLOv5x6](https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5x6.pt) +[TTA] | 1280 1536 | 55.0 **55.8** | 72.7 **72.7** | 3136 - | 26.2 - | 19.4 - | 140.7 - | 209.8 - |
+
+
+ 笔记
+
+- 所有模型都使用默认配置,训练 300 epochs。n和s模型使用 [hyp.scratch-low.yaml](https://github.com/ultralytics/yolov5/blob/master/data/hyps/hyp.scratch-low.yaml) ,其他模型都使用 [hyp.scratch-high.yaml](https://github.com/ultralytics/yolov5/blob/master/data/hyps/hyp.scratch-high.yaml) 。
+- \*\*mAPval \*\*在单模型单尺度上计算,数据集使用 [COCO val2017](http://cocodataset.org) 。 复现命令 `python val.py --data coco.yaml --img 640 --conf 0.001 --iou 0.65`
+- **推理速度**在 COCO val 图像总体时间上进行平均得到,测试环境使用[AWS p3.2xlarge](https://aws.amazon.com/ec2/instance-types/p3/)实例。 NMS 时间 (大约 1 ms/img) 不包括在内。 复现命令 `python val.py --data coco.yaml --img 640 --task speed --batch 1`
+- **TTA** [测试时数据增强](https://docs.ultralytics.com/yolov5/tutorials/test_time_augmentation) 包括反射和尺度变换。 复现命令 `python val.py --data coco.yaml --img 1536 --iou 0.7 --augment`
+
+
+
+## 实例分割模型 ⭐ 新
+
+我们新的 YOLOv5 [release v7.0](https://github.com/ultralytics/yolov5/releases/v7.0) 实例分割模型是世界上最快和最准确的模型,击败所有当前 [SOTA 基准](https://paperswithcode.com/sota/real-time-instance-segmentation-on-mscoco)。我们使它非常易于训练、验证和部署。更多细节请查看 [发行说明](https://github.com/ultralytics/yolov5/releases/v7.0) 或访问我们的 [YOLOv5 分割 Colab 笔记本](https://github.com/ultralytics/yolov5/blob/master/segment/tutorial.ipynb) 以快速入门。
+
+
+ 实例分割模型列表
+
+
+
+
+
+
+
+
+我们使用 A100 GPU 在 COCO 上以 640 图像大小训练了 300 epochs 得到 YOLOv5 分割模型。我们将所有模型导出到 ONNX FP32 以进行 CPU 速度测试,并导出到 TensorRT FP16 以进行 GPU 速度测试。为了便于再现,我们在 Google [Colab Pro](https://colab.research.google.com/signup) 上进行了所有速度测试。
+
+| 模型 | 尺寸(像素) | mAPbox 50-95 | mAPmask 50-95 | 训练时长300 epochs A100 GPU(小时) | 推理速度ONNX CPU (ms) | 推理速度TRT A100 (ms) | 参数量(M) | FLOPs@640 (B) |
+| ------------------------------------------------------------------------------------------ | --------------------- | -------------------- | --------------------- | ----------------------------------------------- | ----------------------------------- | ----------------------------------- | ------------------ | ---------------------- |
+| [YOLOv5n-seg](https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5n-seg.pt) | 640 | 27.6 | 23.4 | 80:17 | **62.7** | **1.2** | **2.0** | **7.1** |
+| [YOLOv5s-seg](https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5s-seg.pt) | 640 | 37.6 | 31.7 | 88:16 | 173.3 | 1.4 | 7.6 | 26.4 |
+| [YOLOv5m-seg](https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5m-seg.pt) | 640 | 45.0 | 37.1 | 108:36 | 427.0 | 2.2 | 22.0 | 70.8 |
+| [YOLOv5l-seg](https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5l-seg.pt) | 640 | 49.0 | 39.9 | 66:43 (2x) | 857.4 | 2.9 | 47.9 | 147.7 |
+| [YOLOv5x-seg](https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5x-seg.pt) | 640 | **50.7** | **41.4** | 62:56 (3x) | 1579.2 | 4.5 | 88.8 | 265.7 |
+
+- 所有模型使用 SGD 优化器训练, 都使用 `lr0=0.01` 和 `weight_decay=5e-5` 参数, 图像大小为 640 。 训练 log 可以查看 https://wandb.ai/glenn-jocher/YOLOv5_v70_official
+- **准确性**结果都在 COCO 数据集上,使用单模型单尺度测试得到。 复现命令 `python segment/val.py --data coco.yaml --weights yolov5s-seg.pt`
+- **推理速度**是使用 100 张图像推理时间进行平均得到,测试环境使用 [Colab Pro](https://colab.research.google.com/signup) 上 A100 高 RAM 实例。结果仅表示推理速度(NMS 每张图像增加约 1 毫秒)。 复现命令 `python segment/val.py --data coco.yaml --weights yolov5s-seg.pt --batch 1`
+- **模型转换**到 FP32 的 ONNX 和 FP16 的 TensorRT 脚本为 `export.py`. 运行命令 `python export.py --weights yolov5s-seg.pt --include engine --device 0 --half`
+
+
+
+
+ 分割模型使用示例
+
+### 训练
+
+YOLOv5分割训练支持自动下载 COCO128-seg 分割数据集,用户仅需在启动指令中包含 `--data coco128-seg.yaml` 参数。 若要手动下载,使用命令 `bash data/scripts/get_coco.sh --train --val --segments`, 在下载完毕后,使用命令 `python train.py --data coco.yaml` 开启训练。
+
+```bash
+# 单 GPU
+python segment/train.py --data coco128-seg.yaml --weights yolov5s-seg.pt --img 640
+
+# 多 GPU, DDP 模式
+python -m torch.distributed.run --nproc_per_node 4 --master_port 1 segment/train.py --data coco128-seg.yaml --weights yolov5s-seg.pt --img 640 --device 0,1,2,3
+```
+
+### 验证
+
+在 COCO 数据集上验证 YOLOv5s-seg mask mAP:
+
+```bash
+bash data/scripts/get_coco.sh --val --segments # 下载 COCO val segments 数据集 (780MB, 5000 images)
+python segment/val.py --weights yolov5s-seg.pt --data coco.yaml --img 640 # 验证
+```
+
+### 预测
+
+使用预训练的 YOLOv5m-seg.pt 来预测 bus.jpg:
+
+```bash
+python segment/predict.py --weights yolov5m-seg.pt --source data/images/bus.jpg
+```
+
+```python
+model = torch.hub.load(
+ "ultralytics/yolov5", "custom", "yolov5m-seg.pt"
+) # 从load from PyTorch Hub 加载模型 (WARNING: 推理暂未支持)
+```
+
+| ![zidane](https://user-images.githubusercontent.com/26833433/203113421-decef4c4-183d-4a0a-a6c2-6435b33bc5d3.jpg) | ![bus](https://user-images.githubusercontent.com/26833433/203113416-11fe0025-69f7-4874-a0a6-65d0bfe2999a.jpg) |
+| ---------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
+
+### 模型导出
+
+将 YOLOv5s-seg 模型导出到 ONNX 和 TensorRT:
+
+```bash
+python export.py --weights yolov5s-seg.pt --include onnx engine --img 640 --device 0
+```
+
+
+
+## 分类网络 ⭐ 新
+
+YOLOv5 [release v6.2](https://github.com/ultralytics/yolov5/releases) 带来对分类模型训练、验证和部署的支持!详情请查看 [发行说明](https://github.com/ultralytics/yolov5/releases/v6.2) 或访问我们的 [YOLOv5 分类 Colab 笔记本](https://github.com/ultralytics/yolov5/blob/master/classify/tutorial.ipynb) 以快速入门。
+
+
+ 分类网络模型
+
+
+
+我们使用 4xA100 实例在 ImageNet 上训练了 90 个 epochs 得到 YOLOv5-cls 分类模型,我们训练了 ResNet 和 EfficientNet 模型以及相同的默认训练设置以进行比较。我们将所有模型导出到 ONNX FP32 以进行 CPU 速度测试,并导出到 TensorRT FP16 以进行 GPU 速度测试。为了便于重现,我们在 Google 上进行了所有速度测试 [Colab Pro](https://colab.research.google.com/signup) 。
+
+| 模型 | 尺寸(像素) | acctop1 | acctop5 | 训练时长90 epochs 4xA100(小时) | 推理速度ONNX CPU (ms) | 推理速度TensorRT V100 (ms) | 参数(M) | FLOPs@640 (B) |
+| -------------------------------------------------------------------------------------------------- | --------------------- | ---------------- | ---------------- | -------------------------------------------- | ----------------------------------- | ---------------------------------------- | ---------------- | ---------------------- |
+| [YOLOv5n-cls](https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5n-cls.pt) | 224 | 64.6 | 85.4 | 7:59 | **3.3** | **0.5** | **2.5** | **0.5** |
+| [YOLOv5s-cls](https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5s-cls.pt) | 224 | 71.5 | 90.2 | 8:09 | 6.6 | 0.6 | 5.4 | 1.4 |
+| [YOLOv5m-cls](https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5m-cls.pt) | 224 | 75.9 | 92.9 | 10:06 | 15.5 | 0.9 | 12.9 | 3.9 |
+| [YOLOv5l-cls](https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5l-cls.pt) | 224 | 78.0 | 94.0 | 11:56 | 26.9 | 1.4 | 26.5 | 8.5 |
+| [YOLOv5x-cls](https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5x-cls.pt) | 224 | **79.0** | **94.4** | 15:04 | 54.3 | 1.8 | 48.1 | 15.9 |
+| | | | | | | | | |
+| [ResNet18](https://github.com/ultralytics/yolov5/releases/download/v7.0/resnet18.pt) | 224 | 70.3 | 89.5 | **6:47** | 11.2 | 0.5 | 11.7 | 3.7 |
+| [Resnetzch](https://github.com/ultralytics/yolov5/releases/download/v7.0/resnet34.pt) | 224 | 73.9 | 91.8 | 8:33 | 20.6 | 0.9 | 21.8 | 7.4 |
+| [ResNet50](https://github.com/ultralytics/yolov5/releases/download/v7.0/resnet50.pt) | 224 | 76.8 | 93.4 | 11:10 | 23.4 | 1.0 | 25.6 | 8.5 |
+| [ResNet101](https://github.com/ultralytics/yolov5/releases/download/v7.0/resnet101.pt) | 224 | 78.5 | 94.3 | 17:10 | 42.1 | 1.9 | 44.5 | 15.9 |
+| | | | | | | | | |
+| [EfficientNet_b0](https://github.com/ultralytics/yolov5/releases/download/v7.0/efficientnet_b0.pt) | 224 | 75.1 | 92.4 | 13:03 | 12.5 | 1.3 | 5.3 | 1.0 |
+| [EfficientNet_b1](https://github.com/ultralytics/yolov5/releases/download/v7.0/efficientnet_b1.pt) | 224 | 76.4 | 93.2 | 17:04 | 14.9 | 1.6 | 7.8 | 1.5 |
+| [EfficientNet_b2](https://github.com/ultralytics/yolov5/releases/download/v7.0/efficientnet_b2.pt) | 224 | 76.6 | 93.4 | 17:10 | 15.9 | 1.6 | 9.1 | 1.7 |
+| [EfficientNet_b3](https://github.com/ultralytics/yolov5/releases/download/v7.0/efficientnet_b3.pt) | 224 | 77.7 | 94.0 | 19:19 | 18.9 | 1.9 | 12.2 | 2.4 |
+
+
+ Table Notes (点击以展开)
+
+- 所有模型都使用 SGD 优化器训练 90 个 epochs,都使用 `lr0=0.001` 和 `weight_decay=5e-5` 参数, 图像大小为 224 ,且都使用默认设置。 训练 log 可以查看 https://wandb.ai/glenn-jocher/YOLOv5-Classifier-v6-2
+- **准确性**都在单模型单尺度上计算,数据集使用 [ImageNet-1k](https://www.image-net.org/index.php) 。 复现命令 `python classify/val.py --data ../datasets/imagenet --img 224`
+- **推理速度**是使用 100 个推理图像进行平均得到,测试环境使用谷歌 [Colab Pro](https://colab.research.google.com/signup) V100 高 RAM 实例。 复现命令 `python classify/val.py --data ../datasets/imagenet --img 224 --batch 1`
+- **模型导出**到 FP32 的 ONNX 和 FP16 的 TensorRT 使用 `export.py` 。 复现命令 `python export.py --weights yolov5s-cls.pt --include engine onnx --imgsz 224`
+
+
+
+
+ 分类训练示例
+
+### 训练
+
+YOLOv5 分类训练支持自动下载 MNIST、Fashion-MNIST、CIFAR10、CIFAR100、Imagenette、Imagewoof 和 ImageNet 数据集,命令中使用 `--data` 即可。 MNIST 示例 `--data mnist` 。
+
+```bash
+# 单 GPU
+python classify/train.py --model yolov5s-cls.pt --data cifar100 --epochs 5 --img 224 --batch 128
+
+# 多 GPU, DDP 模式
+python -m torch.distributed.run --nproc_per_node 4 --master_port 1 classify/train.py --model yolov5s-cls.pt --data imagenet --epochs 5 --img 224 --device 0,1,2,3
+```
+
+### 验证
+
+在 ImageNet-1k 数据集上验证 YOLOv5m-cls 的准确性:
+
+```bash
+bash data/scripts/get_imagenet.sh --val # download ImageNet val split (6.3G, 50000 images)
+python classify/val.py --weights yolov5m-cls.pt --data ../datasets/imagenet --img 224 # validate
+```
+
+### 预测
+
+使用预训练的 YOLOv5s-cls.pt 来预测 bus.jpg:
+
+```bash
+python classify/predict.py --weights yolov5s-cls.pt --source data/images/bus.jpg
+```
+
+```python
+model = torch.hub.load("ultralytics/yolov5", "custom", "yolov5s-cls.pt") # load from PyTorch Hub
+```
+
+### 模型导出
+
+将一组经过训练的 YOLOv5s-cls、ResNet 和 EfficientNet 模型导出到 ONNX 和 TensorRT:
+
+```bash
+python export.py --weights yolov5s-cls.pt resnet50.pt efficientnet_b0.pt --include onnx engine --img 224
+```
+
+
+
+## 环境
+
+使用下面我们经过验证的环境,在几秒钟内开始使用 YOLOv5 。单击下面的图标了解详细信息。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## 贡献
+
+我们喜欢您的意见或建议!我们希望尽可能简单和透明地为 YOLOv5 做出贡献。请看我们的 [投稿指南](https://docs.ultralytics.com/help/contributing/),并填写 [YOLOv5调查](https://www.ultralytics.com/survey?utm_source=github&utm_medium=social&utm_campaign=Survey) 向我们发送您的体验反馈。感谢我们所有的贡献者!
+
+
+
+
+
+
+## 许可证
+
+Ultralytics 提供两种许可证选项以适应各种使用场景:
+
+- **AGPL-3.0 许可证**:这个[OSI 批准](https://opensource.org/license)的开源许可证非常适合学生和爱好者,可以推动开放的协作和知识分享。请查看[LICENSE](https://github.com/ultralytics/yolov5/blob/master/LICENSE) 文件以了解更多细节。
+- **企业许可证**:专为商业用途设计,该许可证允许将 Ultralytics 的软件和 AI 模型无缝集成到商业产品和服务中,从而绕过 AGPL-3.0 的开源要求。如果您的场景涉及将我们的解决方案嵌入到商业产品中,请通过 [Ultralytics Licensing](https://www.ultralytics.com/license)与我们联系。
+
+## 联系方式
+
+对于 Ultralytics 的错误报告和功能请求,请访问 [GitHub Issues](https://github.com/ultralytics/yolov5/issues),并加入我们的 [Discord](https://discord.com/invite/ultralytics) 社区进行问题和讨论!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+[tta]: https://docs.ultralytics.com/yolov5/tutorials/test_time_augmentation
diff --git a/Transfer Learning/Accident_Classifier/Screenshot 2024-10-03 152749.png b/Transfer Learning/Accident_Classifier/Screenshot 2024-10-03 152749.png
new file mode 100755
index 00000000..6c62a542
Binary files /dev/null and b/Transfer Learning/Accident_Classifier/Screenshot 2024-10-03 152749.png differ
diff --git a/Transfer Learning/Accident_Classifier/Screenshot 2024-10-03 152800.png b/Transfer Learning/Accident_Classifier/Screenshot 2024-10-03 152800.png
new file mode 100755
index 00000000..128472d2
Binary files /dev/null and b/Transfer Learning/Accident_Classifier/Screenshot 2024-10-03 152800.png differ
diff --git a/Transfer Learning/Accident_Classifier/Screenshot 2024-10-03 153901.png b/Transfer Learning/Accident_Classifier/Screenshot 2024-10-03 153901.png
new file mode 100755
index 00000000..341f51bf
Binary files /dev/null and b/Transfer Learning/Accident_Classifier/Screenshot 2024-10-03 153901.png differ
diff --git a/Transfer Learning/Accident_Classifier/Yolov5.ipynb b/Transfer Learning/Accident_Classifier/Yolov5.ipynb
new file mode 100755
index 00000000..aee812b1
--- /dev/null
+++ b/Transfer Learning/Accident_Classifier/Yolov5.ipynb
@@ -0,0 +1,6204 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "GSmrQ7expi3q",
+ "outputId": "5d61809b-1772-40ec-c024-196625179bad"
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Cloning into 'yolov5'...\n",
+ "remote: Enumerating objects: 16965, done.\u001b[K\n",
+ "remote: Counting objects: 100% (160/160), done.\u001b[K\n",
+ "remote: Compressing objects: 100% (111/111), done.\u001b[K\n",
+ "remote: Total 16965 (delta 82), reused 99 (delta 49), pack-reused 16805 (from 1)\u001b[K\n",
+ "Receiving objects: 100% (16965/16965), 15.71 MiB | 29.85 MiB/s, done.\n",
+ "Resolving deltas: 100% (11615/11615), done.\n"
+ ]
+ }
+ ],
+ "source": [
+ "!git clone https://github.com/ultralytics/yolov5"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "AFWzeEpNsb_y",
+ "outputId": "f0025709-ec80-4d57-801d-8ed99a9e560d"
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "/content/drive/MyDrive/Yolov5/yolov5\n"
+ ]
+ }
+ ],
+ "source": [
+ "%cd /content/drive/MyDrive/Yolov5/yolov5"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "uvKJ9oaLvjfh",
+ "outputId": "a32dc299-175c-447e-b72f-e8eab218c672"
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Requirement already satisfied: gitpython>=3.1.30 in /usr/local/lib/python3.10/dist-packages (from -r requirements.txt (line 5)) (3.1.43)\n",
+ "Requirement already satisfied: matplotlib>=3.3 in /usr/local/lib/python3.10/dist-packages (from -r requirements.txt (line 6)) (3.7.1)\n",
+ "Requirement already satisfied: numpy>=1.23.5 in /usr/local/lib/python3.10/dist-packages (from -r requirements.txt (line 7)) (1.26.4)\n",
+ "Requirement already satisfied: opencv-python>=4.1.1 in /usr/local/lib/python3.10/dist-packages (from -r requirements.txt (line 8)) (4.10.0.84)\n",
+ "Requirement already satisfied: pillow>=10.3.0 in /usr/local/lib/python3.10/dist-packages (from -r requirements.txt (line 9)) (10.4.0)\n",
+ "Requirement already satisfied: psutil in /usr/local/lib/python3.10/dist-packages (from -r requirements.txt (line 10)) (5.9.5)\n",
+ "Requirement already satisfied: PyYAML>=5.3.1 in /usr/local/lib/python3.10/dist-packages (from -r requirements.txt (line 11)) (6.0.2)\n",
+ "Requirement already satisfied: requests>=2.32.2 in /usr/local/lib/python3.10/dist-packages (from -r requirements.txt (line 12)) (2.32.3)\n",
+ "Requirement already satisfied: scipy>=1.4.1 in /usr/local/lib/python3.10/dist-packages (from -r requirements.txt (line 13)) (1.13.1)\n",
+ "Requirement already satisfied: thop>=0.1.1 in /usr/local/lib/python3.10/dist-packages (from -r requirements.txt (line 14)) (0.1.1.post2209072238)\n",
+ "Requirement already satisfied: torch>=1.8.0 in /usr/local/lib/python3.10/dist-packages (from -r requirements.txt (line 15)) (2.4.1+cu121)\n",
+ "Requirement already satisfied: torchvision>=0.9.0 in /usr/local/lib/python3.10/dist-packages (from -r requirements.txt (line 16)) (0.19.1+cu121)\n",
+ "Requirement already satisfied: tqdm>=4.66.3 in /usr/local/lib/python3.10/dist-packages (from -r requirements.txt (line 17)) (4.66.5)\n",
+ "Requirement already satisfied: ultralytics>=8.2.34 in /usr/local/lib/python3.10/dist-packages (from -r requirements.txt (line 18)) (8.3.3)\n",
+ "Requirement already satisfied: pandas>=1.1.4 in /usr/local/lib/python3.10/dist-packages (from -r requirements.txt (line 27)) (2.2.2)\n",
+ "Requirement already satisfied: seaborn>=0.11.0 in /usr/local/lib/python3.10/dist-packages (from -r requirements.txt (line 28)) (0.13.1)\n",
+ "Requirement already satisfied: setuptools>=70.0.0 in /usr/local/lib/python3.10/dist-packages (from -r requirements.txt (line 42)) (71.0.4)\n",
+ "Requirement already satisfied: gitdb<5,>=4.0.1 in /usr/local/lib/python3.10/dist-packages (from gitpython>=3.1.30->-r requirements.txt (line 5)) (4.0.11)\n",
+ "Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=3.3->-r requirements.txt (line 6)) (1.3.0)\n",
+ "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=3.3->-r requirements.txt (line 6)) (0.12.1)\n",
+ "Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=3.3->-r requirements.txt (line 6)) (4.54.1)\n",
+ "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=3.3->-r requirements.txt (line 6)) (1.4.7)\n",
+ "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=3.3->-r requirements.txt (line 6)) (24.1)\n",
+ "Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=3.3->-r requirements.txt (line 6)) (3.1.4)\n",
+ "Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=3.3->-r requirements.txt (line 6)) (2.8.2)\n",
+ "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests>=2.32.2->-r requirements.txt (line 12)) (3.3.2)\n",
+ "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests>=2.32.2->-r requirements.txt (line 12)) (3.10)\n",
+ "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests>=2.32.2->-r requirements.txt (line 12)) (2.2.3)\n",
+ "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests>=2.32.2->-r requirements.txt (line 12)) (2024.8.30)\n",
+ "Requirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from torch>=1.8.0->-r requirements.txt (line 15)) (3.16.1)\n",
+ "Requirement already satisfied: typing-extensions>=4.8.0 in /usr/local/lib/python3.10/dist-packages (from torch>=1.8.0->-r requirements.txt (line 15)) (4.12.2)\n",
+ "Requirement already satisfied: sympy in /usr/local/lib/python3.10/dist-packages (from torch>=1.8.0->-r requirements.txt (line 15)) (1.13.3)\n",
+ "Requirement already satisfied: networkx in /usr/local/lib/python3.10/dist-packages (from torch>=1.8.0->-r requirements.txt (line 15)) (3.3)\n",
+ "Requirement already satisfied: jinja2 in /usr/local/lib/python3.10/dist-packages (from torch>=1.8.0->-r requirements.txt (line 15)) (3.1.4)\n",
+ "Requirement already satisfied: fsspec in /usr/local/lib/python3.10/dist-packages (from torch>=1.8.0->-r requirements.txt (line 15)) (2024.6.1)\n",
+ "Requirement already satisfied: py-cpuinfo in /usr/local/lib/python3.10/dist-packages (from ultralytics>=8.2.34->-r requirements.txt (line 18)) (9.0.0)\n",
+ "Requirement already satisfied: ultralytics-thop>=2.0.0 in /usr/local/lib/python3.10/dist-packages (from ultralytics>=8.2.34->-r requirements.txt (line 18)) (2.0.8)\n",
+ "Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.10/dist-packages (from pandas>=1.1.4->-r requirements.txt (line 27)) (2024.2)\n",
+ "Requirement already satisfied: tzdata>=2022.7 in /usr/local/lib/python3.10/dist-packages (from pandas>=1.1.4->-r requirements.txt (line 27)) (2024.2)\n",
+ "Requirement already satisfied: smmap<6,>=3.0.1 in /usr/local/lib/python3.10/dist-packages (from gitdb<5,>=4.0.1->gitpython>=3.1.30->-r requirements.txt (line 5)) (5.0.1)\n",
+ "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil>=2.7->matplotlib>=3.3->-r requirements.txt (line 6)) (1.16.0)\n",
+ "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2->torch>=1.8.0->-r requirements.txt (line 15)) (2.1.5)\n",
+ "Requirement already satisfied: mpmath<1.4,>=1.1.0 in /usr/local/lib/python3.10/dist-packages (from sympy->torch>=1.8.0->-r requirements.txt (line 15)) (1.3.0)\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Install required libraries\n",
+ "!pip install -r requirements.txt"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "YUueYtptvmUA",
+ "outputId": "136ae0df-940a-412f-8f4f-ddc8cb0358ab"
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Looking in indexes: https://download.pytorch.org/whl/cu117\n",
+ "Requirement already satisfied: torch in /usr/local/lib/python3.10/dist-packages (2.4.1+cu121)\n",
+ "Requirement already satisfied: torchvision in /usr/local/lib/python3.10/dist-packages (0.19.1+cu121)\n",
+ "Requirement already satisfied: torchaudio in /usr/local/lib/python3.10/dist-packages (2.4.1+cu121)\n",
+ "Requirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from torch) (3.16.1)\n",
+ "Requirement already satisfied: typing-extensions>=4.8.0 in /usr/local/lib/python3.10/dist-packages (from torch) (4.12.2)\n",
+ "Requirement already satisfied: sympy in /usr/local/lib/python3.10/dist-packages (from torch) (1.13.3)\n",
+ "Requirement already satisfied: networkx in /usr/local/lib/python3.10/dist-packages (from torch) (3.3)\n",
+ "Requirement already satisfied: jinja2 in /usr/local/lib/python3.10/dist-packages (from torch) (3.1.4)\n",
+ "Requirement already satisfied: fsspec in /usr/local/lib/python3.10/dist-packages (from torch) (2024.6.1)\n",
+ "Requirement already satisfied: numpy in /usr/local/lib/python3.10/dist-packages (from torchvision) (1.26.4)\n",
+ "Requirement already satisfied: pillow!=8.3.*,>=5.3.0 in /usr/local/lib/python3.10/dist-packages (from torchvision) (10.4.0)\n",
+ "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2->torch) (2.1.5)\n",
+ "Requirement already satisfied: mpmath<1.4,>=1.1.0 in /usr/local/lib/python3.10/dist-packages (from sympy->torch) (1.3.0)\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Install the latest PyTorch version with GPU support\n",
+ "!pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "Bu3ygcJSvq8v",
+ "outputId": "84136825-5675-45f0-c646-11dae5e59787"
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n"
+ ]
+ }
+ ],
+ "source": [
+ "# # Mount Google Drive\n",
+ "# from google.colab import drive\n",
+ "# drive.mount('/content/drive')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "iRBrVMSrv5tL"
+ },
+ "outputs": [],
+ "source": [
+ "# Copy dataset from Google Drive to yolov5 directory\n",
+ "# !cp -r \"/content/yolov5\" \"/content/drive/MyDrive/Yolov5\""
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 1000
+ },
+ "id": "0JC8WYf4wSs4",
+ "outputId": "b51bd846-66a3-4c1d-f955-16578003f9a1"
+ },
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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\n"
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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\n"
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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+ms++9nPklKKTp8+/bL1/XLgwoULBIDuv/9+IuIxxXFM//N//k9/zXe+8x0CQA888AARMTHXWtO5c+f8Nffddx/Nzs7SYDB4eQdwGbCwsED/6T/9p2tujFtbW3TzzTfTF77wBfrrf/2veyJ1rYzzgx/8IL3uda+r/e1aGSMR0T/+x/+YfvzHf3zs71cbDtpT6r7hcIiHH34YJ06c8N9prXHixAk88MADr2DPrhycPHkS586dK41xbm4Od999tx/jAw88gPn5edx1113+mhMnTkBrjQcffPBl7/NuYGNjA0CRwf7hhx9Gmqalcd5yyy04duxYaZx33HEHDhw44K9561vfis3NTXz7299+GXu/O8jzHJ/85CfR6XRw/Pjxa26M733ve/HTP/3TpfEA19ZaPvnkkzh8+DBe9apX4Z577sGpU6cAXFtj/MxnPoO77roLv/ALv4D9+/fj9a9/Pf7jf/yP/verDQftKSJ18eJF5Hle2gQAcODAAZw7d+4V6tWVBRnHTmM8d+4c9u/fX/o9iiIsLi5elfNgrcX73/9+vPnNb8btt98OgMeQJAnm5+dL11bHWTcP8tvVAt/61rcwPT2NRqOBd7/73fjUpz6F22677Zoa4yc/+Ul87Wtfw7333jvy27Uyzrvvvht/8Ad/gM997nO47777cPLkSfy1v/bXsLW1dc2MEQCefvpp3Hfffbj55pvx+c9/Hu95z3vw67/+6/jEJz4B4OrDQXuyVMcE9ha8973vxaOPPoq/+qu/eqW78pLAa17zGnz961/HxsYG/tf/+l94xzvegfvvv/+V7tYVg+9///v4jd/4DXzhC19As9l8pbvzksFP/uRP+s933nkn7r77blx//fX4H//jf6DVar2CPbuyYK3FXXfdhQ9/+MMAgNe//vV49NFH8dGPfhTveMc7XuHejcKekqSWlpZgjBnxqDl//jwOHjz4CvXqyoKMY6cxHjx4EBcuXCj9nmUZVldXr7p5eN/73of/83/+D/7sz/4M1113nf/+4MGDGA6HWF9fL11fHWfdPMhvVwskSYKbbroJb3jDG3Dvvffida97Hf79v//318wYH374YVy4cAE/8iM/giiKEEUR7r//fnzkIx9BFEU4cODANTHOKszPz+PVr341vve9710zawkAhw4dwm233Vb67tZbb/WqzasNB+0pIpUkCd7whjfgi1/8ov/OWosvfvGLOH78+CvYsysHN954Iw4ePFga4+bmJh588EE/xuPHj2N9fR0PP/ywv+ZLX/oSrLW4++67X/Y+1wER4X3vex8+9alP4Utf+hJuvPHG0u9veMMbEMdxaZyPP/44Tp06VRrnt771rdJh+MIXvoDZ2dmRQ3Y1gbUWg8HgmhnjW97yFnzrW9/C17/+df+66667cM899/jP18I4q7C9vY2nnnoKhw4dumbWEgDe/OY3j4SDPPHEE7j++usBXIU46Iq6YbwM8MlPfpIajQb9wR/8AT322GP0rne9i+bn50seNVc7bG1t0SOPPEKPPPIIAaB/9+/+HT3yyCP07LPPEhG7f87Pz9P//t//m775zW/Sz/7sz9a6f77+9a+nBx98kP7qr/6Kbr755qvKBf0973kPzc3N0Z//+Z+XXHq73a6/5t3vfjcdO3aMvvSlL9FDDz1Ex48fp+PHj/vfxaX3b/7Nv0lf//rX6XOf+xwtLy9fVS69v/Vbv0X3338/nTx5kr75zW/Sb/3Wb5FSiv70T/+UiK6NMdZB6N1HdG2M8zd/8zfpz//8z+nkyZP0//7f/6MTJ07Q0tISXbhwgYiujTEScRhBFEX0L//lv6Qnn3yS/vAP/5Da7Tb91//6X/01VxMO2nNEiojo93//9+nYsWOUJAm98Y1vpC9/+cuvdJcuC/7sz/6MAIy83vGOdxARu4D+9m//Nh04cIAajQa95S1voccff7zUxsrKCv3SL/0STU9P0+zsLP3Kr/wKbW1tvQKjqYe68QGgj3/84/6aXq9Hv/Zrv0YLCwvUbrfp537u5+js2bOldp555hn6yZ/8SWq1WrS0tES/+Zu/SWmavsyjGQ9/7+/9Pbr++uspSRJaXl6mt7zlLZ5AEV0bY6yDKpG6Fsb5i7/4i3To0CFKkoSOHDlCv/iLv1iKHboWxijwx3/8x3T77bdTo9GgW265hT72sY+Vfr+acNCkntQEJjCBCUzgqoU9ZZOawAQmMIEJ/GDBhEhNYAITmMAErlqYEKkJTGACE5jAVQsTIjWBCUxgAhO4amFCpCYwgQlMYAJXLUyI1AQmMIEJTOCqhQmRmsAEJjCBCVy1MCFSE5jABCYwgasWJkRqAhOYwAQmcNXChEhNYAITmMAErlqYEKkJTGACE5jAVQv/P7pbQb4ur4ktAAAAAElFTkSuQmCC\n"
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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hTF24Vd/9VdhjME73/nOeO1aGOc//af/tFVvyxiDV7ziFfH7a2GMCk899RT+9t/+2zh27BhGoxFe/epX43Of+1z8/orCQXSVwUc+8hEqioL+/b//9/Rnf/Zn9Ja3vIUOHz5Mp0+ffqG7dmD43d/9XfrH//gf0//4H/+DANBHP/rR1ve/+qu/SltbW/Rbv/Vb9P/+3/+jv/E3/gbdeuutNJvN4j0//MM/TK997WvpT/7kT+gP//AP6WUvexn9zM/8zPM8kv3hjW98I33oQx+iRx55hL7whS/Qj/7oj9LNN99M4/E43vPWt76VbrrpJvrUpz5Fn/vc5+gv/aW/RD/4gz8Yv6/rml71qlfR3XffTZ///Ofpd3/3d+n48eP03ve+94UYUi987GMfo//1v/4XfeUrX6FHH32UfvmXf5nyPKdHHnmEiK6NMabwmc98hl760pfSa17zGvrFX/zFeP1aGOe9995Lf+7P/Tl6+umn488zzzwTv78WxkhEdO7cObrlllvo7/ydv0MPPfQQff3rX6ff+73fo69+9avxnisJB111ROoHfuAH6O1vf3v87L2nkydP0n333fcC9uryoUukQgh04sQJ+lf/6l/Fa9vb2zQYDOg//+f/TEREX/rSlwgAffazn433fPzjHydjDD311FPPW98vBc6cOUMA6IEHHiAiHlOe5/Rf/+t/jfd8+ctfJgD04IMPEhETc2stnTp1Kt5z//3306FDh2ixWDy/A7gEOHLkCP27f/fvrrkx7u3t0W233Uaf/OQn6a/8lb8SidS1Ms57772XXvva1/Z+d62MkYjol37pl+iHfuiH9v3+SsNBV5W6ryxLPPzww7j77rvjNWst7r77bjz44IMvYM+eO3j88cdx6tSp1hi3trZwxx13xDE++OCDOHz4MG6//fZ4z9133w1rLR566KHnvc8HgZ2dHQBNBvuHH34YVVW1xvmKV7wCN998c2ucr371q3HDDTfEe974xjdid3cXf/Znf/Y89v5g4L3HRz7yEUwmE9x5553X3Bjf/va348d+7Mda4wGurbV87LHHcPLkSXzv934v3vzmN+OJJ54AcG2N8WMf+xhuv/12/NRP/RSuv/56vO51r8Nv/MZvxO+vNBx0VRGpZ599Ft771iYAgBtuuAGnTp16gXr13IKO40JjPHXqFK6//vrW91mW4ejRo1fkPIQQ8M53vhN33XUXXvWqVwHgMRRFgcOHD7fu7Y6zbx70uysFvvjFL2JjYwODwQBvfetb8dGPfhSvfOUrr6kxfuQjH8H//b//F/fdd9/Sd9fKOO+44w58+MMfxic+8Qncf//9ePzxx/GX//Jfxt7e3jUzRgD4+te/jvvvvx+33XYbfu/3fg9ve9vb8Au/8Av4zd/8TQBXHg66Kkt1rODqgre//e145JFH8Ed/9EcvdFe+K/Dyl78cX/jCF7Czs4P/9t/+G+655x488MADL3S3njP41re+hV/8xV/EJz/5SQyHwxe6O981+JEf+ZH492te8xrccccduOWWW/Bf/st/wWg0egF79txCCAG333473ve+9wEAXve61+GRRx7BBz7wAdxzzz0vcO+W4aqSpI4fPw7n3JJHzenTp3HixIkXqFfPLeg4LjTGEydO4MyZM63v67rGuXPnrrh5eMc73oHf+Z3fwe///u/je77ne+L1EydOoCxLbG9vt+7vjrNvHvS7KwWKosDLXvYyvP71r8d9992H1772tfi1X/u1a2aMDz/8MM6cOYO/8Bf+ArIsQ5ZleOCBB/D+978fWZbhhhtuuCbG2YXDhw/j+77v+/DVr371mllLALjxxhvxyle+snXt+7//+6Nq80rDQVcVkSqKAq9//evxqU99Kl4LIeBTn/oU7rzzzhewZ88d3HrrrThx4kRrjLu7u3jooYfiGO+8805sb2/j4Ycfjvd8+tOfRggBd9xxx/Pe5z4gIrzjHe/ARz/6UXz605/Grbfe2vr+9a9/PfI8b43z0UcfxRNPPNEa5xe/+MXWYfjkJz+JQ4cOLR2yKwlCCFgsFtfMGN/whjfgi1/8Ir7whS/En9tvvx1vfvOb49/Xwji7MB6P8bWvfQ033njjNbOWAHDXXXcthYN85StfwS233ALgCsRBz6kbxvMAH/nIR2gwGNCHP/xh+tKXvkQ/93M/R4cPH2551FzpsLe3R5///Ofp85//PAGgf/2v/zV9/vOfp29+85tExO6fhw8fpv/5P/8n/emf/in9zb/5N3vdP1/3utfRQw89RH/0R39Et9122xXlgv62t72Ntra26A/+4A9aLr3T6TTe89a3vpVuvvlm+vSnP02f+9zn6M4776Q777wzfq8uvX/tr/01+sIXvkCf+MQn6LrrrruiXHrf85730AMPPECPP/44/emf/im95z3vIWMM/e///b+J6NoYYx+k3n1E18Y43/3ud9Mf/MEf0OOPP05//Md/THfffTcdP36czpw5Q0TXxhiJOIwgyzL6F//iX9Bjjz1G//E//kdaW1uj//Af/kO850rCQVcdkSIi+jf/5t/QzTffTEVR0A/8wA/Qn/zJn7zQXbok+P3f/30CsPRzzz33EBG7gP7Kr/wK3XDDDTQYDOgNb3gDPfroo602zp49Sz/zMz9DGxsbdOjQIfrZn/1Z2tvbewFG0w994wNAH/rQh+I9s9mMfv7nf56OHDlCa2tr9BM/8RP09NNPt9r5xje+QT/yIz9Co9GIjh8/Tu9+97upqqrneTT7w9/9u3+XbrnlFiqKgq677jp6wxveEAkU0bUxxj7oEqlrYZw//dM/TTfeeCMVRUEveclL6Kd/+qdbsUPXwhgVfvu3f5te9apX0WAwoFe84hX0wQ9+sPX9lYSDVvWkVrCCFaxgBVcsXFU2qRWsYAUrWMGLC1ZEagUrWMEKVnDFwopIrWAFK1jBCq5YWBGpFaxgBStYwRULKyK1ghWsYAUruGJhRaRWsIIVrGAFVyysiNQKVrCCFazgioUVkVrBClawghVcsbAiUitYwQpWsIIrFlZEagUrWMEKVnDFwopIrWAFK1jBCq5Y+P+D3Sw8fsfE5wAAAABJRU5ErkJggg==\n"
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAakAAAGiCAYAAABd6zmYAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOz9ebAl2X3fiX1Ontwz7/72pfbuRlXvaAANoEkQpEiQEsUJOoYjUst4TG8a2VQ4gg7Z0j+SNREeOax/ZjSjCduyJ0IWQ7IojSQuokiRIACC2BvdQG/V3dW1vvfq7Xe/uec5/uNkXVAeaQQ5bBII1S+iol69qnfrLpnnt30XobXWPI7H8Tgex+N4HN+DYf1RP4HH8Tgex+N4HI/j3xSPk9TjeByP43E8ju/ZeJykHsfjeByP43F8z8bjJPU4HsfjeByP43s2Hiepx/E4HsfjeBzfs/E4ST2Ox/E4Hsfj+J6Nx0nqcTyOx/E4Hsf3bDxOUo/jcTyOx/E4vmfjcZJ6HI/jcTyOx/E9G4+T1ON4HI/jcTyO79n4I0tSf/tv/20uXbqE7/u8/PLLfP3rX/+jeiqP43E8jsfxOL5H448kSf3Df/gP+cVf/EX+2l/7a7z22ms8//zz/PiP/zgnJyd/FE/ncTyOx/E4Hsf3aIg/CoHZl19+mY9+9KP81//1fw2AUord3V3+4l/8i/zlv/yX/7CfzuN4HI/jcTyO79Gw/7D/w6Io+OY3v8lf+St/Zfk9y7L40R/9Ub7yla/8a38mz3PyPF/+WSnFcDhkMBgghPj/+3N+HI/jcTyOx/H/29BaM5vN2NrawrL+zUO9P/QkdXZ2Rl3XrK+v/yvfX19f59133/3X/szf+Bt/g7/+1//6H8bTexyP43E8jsfxhxh7e3vs7Oz8G//+Dz1J/X8Tf+Wv/BV+8Rd/cfnnyWTChQsX+OM/+iHanQ629Gm3e/yJn/gput0BX/7SV7l79wFlqdBaEIQxP/ipH2Rn5wIbW5v0VlZBa6qqJs0WHBw8YDIZc3JyzCKZU1U5t2/fYpHMcRyHvb19nr7xDJ/85Ct8/OMv47oudV03z0ZTljV1XaOURZqkHB4dcnT4EGlbXL16hW9/+1t88MEHDIfnbO9scn5+ymg0oiwLNrc2ODk5pigKHMemriuyPAU0gR9i2w6O41EUJUoJVA3D4Ygsy8jzGtuxybMcz3MJw4g0S81rqxVlWeB5HlppHMdmZWWFs/Nz5vMFjm3j+R6BH2BJi6oqUXVJmieAwrIslII8q6hrhYWFlA5KKcoyoywrtFZYUiClhWUJqrLE82xW11bY2d2m2+9Qlimn5yecnB7T6bQ4OD4kzyoCPyRNCmzpIIVDmVckiwIhLJTS1FWBlFCWBbZjsbm5QZYtEBaEgY+wBPPFHEtKHMdcxo7jApBlKbPpDMd1sW1JXZU8fHjMzs4WjmMzGo14/vnnubC7y87uDru7F3ji8jVuv/8eBw/2kJbFvdu3ef1brxEGAZ/54z/BZz//u8wXM+aLBcPhiN0LF3FcF6UhSVKG4zG+HxC5ITrXuF7Ig3v7HB6e02nHpFmO7zl4gYMGnnryMj/xE5/hM5/5UezA5c6t95jPp5RVietIHMfFdVu4Tsi3Xv8W33r9Dd5++12m04Red8ClS1e4/qGnee75G/yt/+q/5OjwEKUVWZrxxJNP0O/3mc1mvPfee6RphpAWju8ibRvbtnEchyzPCcKAdqfLx1/+GC9/5CP8rb/1txmdTRiPxuR5Ra/bxbFt0nROVZYIIWi1OsStkI31DX7qP/iTXLt2lTiOEZZmf3+fh3t73Lz5Dm98+y3GkylJllMphaoUldJEUQstNMenJ/z1/8Nf44d/5IfZ2d2hLDLKqkKrmuFoyOd+57O8+vWvc/fuXYajc8bjEXVV4ApNJ4qJPI9QWvRii7XVVaq6QggL2/NYWV9jdW2DjY0NLly+zIUnn+Q3fuVXOTh4SJoXJGlG3O6AkNQIVlfX+Mk/8SdZ29jk3p1b/M2/+X+i3Y6wJJRFRZYXPLi/TxDHrG9ucf/BAxbzBbPFgiIvQFtYUlIWlbm/XB/H8airijzJ2N7aRGqwm47h+eefpSZhdbPHp3/kU/y9f/B3mc1HdPsxV5+6zOn5EaPpiKqoWemvcn42pqoVyaJgOByztroBWEwmM0ajGaPxHM+1aXUiothD65rZbEGWlqxvDBBY1JVFVYG0XLK0IElyyrJiNlvgeQ6ua1PXNVJKsiynKHKC0EMIged5RFGI67p0Om1s22E6nXJ+fo7rugghSNPM3K+2Yx7PsRFCoNEN+kFT64q8KBAWSNvh5mvntFqt/8Hz/w89Sa2srCCl5Pj4+F/5/vHxMRsbG//an/E8D8/z/nvfdxwXRzo4jkMcRgxW+nTaPVqtGN9zUKqkLGuE0ERxSByHRFFI4Pu4rkNdK7zMwvMucnYeY9swHNlIKbj57ltYlkBKgeNI8jzDti0GgwFaa5SqEUJgWZI0TbBtB9v20FoQRj5a1ziO5MKFXQ4PD7h37w6u5xLHEVWVMZtNcNyAOA6ZzXyUqsjzFNd1saWkrAqSdMHKYBXXdXFdl/ksxfEcwKwRLSkoihzHtXE9F6VrhABLShCglIXrOlRVheu5dLodTs9OCQIPpRS2LYniEKUUUkJdCypVAAopJUqBVoKqqhFIpCWpFdRK4gio6wrbthCWRV3XWJaFYzvYtkOapgSZhx96+L5PEPr4gYcAaqVwXY8sM0lUaIuyrHEci7JUCAGOI4EaywKtVXPxSxxX4vkOZVkQRT55UaB1je/7aK2oqgqlKhxXIoR5HdKy8TwHKUGpCte1sW2LVjtmMOjTbsdsb21yenjAKPBpRyGHDySetIh8h92tNQadiCJf4DoC35PYVk3gSRSCsgBd51jCJY58lG0+Ite1EEKgVEmel1gCPM9mPJkym02wbYv1zTVsz+Vw7z5ZmtDttqnrim63T7s1oCwUW1tb3P7gLnEcMZ8tsKWgyFNsW3P50kVaccShVqBNMeLYNr7noeqaMAiYTGZ4vovnuGg00rypxHFElmX0Om12t7e5ceMGrVaLIi1YzBNm0wWe64JWWMJCa4VSAiFAWhZK1URhxPraGu12m3a3xWQ8ptWKacUxYeizWJjHqNIU23bQdW2ub1UipaQ/6DPo94jjGFV7lGWB1oq6LgkDn3SxIFnMWcymSKHRCqRt4VgCR0DgOfiOIHQdsFzKqkZphahrLK2whEbaFnErwncdqrJgMZsyWyRUdY0XhCAdppMJrmPT6XXpra+h6grHsfE8m9pV+L5PstKnrBSqrqiKHGkJHMsiryts20WgsdBYQiBUjUVt7kk0WbKgHbWwpaSqajqtDhUW7VbM2toKrTiiKBf4voe0JL4fYM2nWBYEfozjJNS1ec8EAiEE0rJxHRetFADCEjiOjes6JElGluVkuUZrheM4aC3wpIMlbOpaI/OaqlJoramqCtuW5nEESCmQtik+y7LEti2ktHAcie97WJYpDsuyaM40cxaAjWUJBGAJCyHNdaK1RmmFtKU5M5qz0/x//8Mrmz/0JOW6Li+99BKf/exn+emf/mnA7Jg++9nP8gu/8Av/To8VRm08L2RtbROBxbe/9W2qqubB/X2GozPa7T5Xrl7h0uUrfPjDz9Pp9KiV5vj4gG6vRxRGRHFIGDnErYCLF7fI8hQpLQ4e7vHBB7cIgoBPfvITtFpdU53Op9y/f5/dnV3a7TZaK6azKWmS4jg+nU6HKAp56aUPM5tNeOedt7ly9QrfePXrvPbaN3nw4A7XbzyFH3gcHj5kPB4yn8+RUoCAqipZXVsly1Lmszmu63FwcMDp6RmLeYbr+ti2Q13X2I65qaWU1HVFUdTLDk81F24YBlRVheO45HmG1oqPfeyjDAYD7t69y+HhIUdHxxRFjm1bRJFPGAXN4Qq1A2CBFghhYQG2Y6OUhee7JMmCIk1xHIcoDCnyjDt37lJVBWsbK1y8vIvnS7Y2t5gv5khps7LS5unrz3Hnzh3mkwVFbm6CzYsXGI0mjIZDojCgLE0lJ6VFXZcgFLEXIKVkb++Ind0dLGlRFCWgSbOUPM+pqspUdosE27ZZXVnh2rXLSCkpigLf9zk8PKTb7bJYLPjmN7/Jr/zjf4rvuDiWRBc5N996g9V+j5XVAb/2T/8p7W4bvT5gnvgEvksY+Di2he04bKxfRlBTK20SUlESRzFPXb/Kk09do64VZ2dDsjRHCAvXk9y7t8d/8V/8V/z6P/9Vrl27yttv32Q8nnDp0g4vvfQi16/fYNBXdLs9fvhHfoTV1TWiKOaf/tNfYZHMuHc/Ic0WzOYTfN/n4sWLTCYTxuMxb7zxBr7vs7W1xSuvvMJkMmH/4UO0VqytrfHm22+TlwWu53F8cs716zdYW1vj0qVL/Of/+f+Rr3/lVf7Fb/wmv/eF3yfPC4oixfc8HCdGa4FSijhu8cwzz/D+++9x/caHiOKYu3fu8JGPf5wv/u4Cz/O4cuUqd+/d5+RsiLQdup0+6WyGJSSD1QEXdnd54YUXCcOQk6NDVlb6+EEAWtNpl1y6eJHxcMzD/UO6vQjPCcnTFE9aOJbF+ckI3QlY66yysb5OGMccHh1xdHLCuzdv8o1Xv0lZVVx/5ml+5md/ljt37/DOO+8wmc0YrKwTtTtMp1OSvGAezbl58yZVWTGZjamqyhRaQYfLl6/y4osv0YrbHJ+c8uWvfZV3b77DaDRG1RqtFK5nJg22sKjLkqKs0JX5WtWKyXiKKx0s39y/KyuraDsmzaf83he+hGP7bKzvkOZz3nzjJkk+J4gCPDdkPi+Ioh7D83329g+oSkWePURKp9nrpJSlxrZNkVYUBXWtWFnp0uv16HS67D94yGKe4zoBWlcki5wsy6lKk0DMBENRFBlJolBKIwRkWYYQgn6/z9raGovFnOPjYxaLhLIsmUwSLMskLrvp0uu6pqpqqmKBsCVCmCPEsgSu55v707KWSerfFn8kEPRf/MVf5O/8nb/D3/27f5ebN2/yF/7CX2CxWPDzP//z/06PI4WHLT0sIen3ByilsCxBliUoXWHZGtcV9PsxwqqRtkJTokWJEDUK87uUICUIYbofaQnqumwyvKbb7ZqOpC6ZTieMRkOyPKGsCvIiw7KgqkvyPEcImopHoLUizVI8z8XzPFqtGKVrfN9Da92MCE2nZ0kLz3OoVdVUrIqqrlDKdCiWZeH7vuk8hEDaNkKAbUssC5SqqaoS25ZN5aJwXaf5edMRSmktv29ZgqoqqaqyGddZlGWJsAR1XVPXapnwhDAJVGsN4juVT63U8mulFGVVYdkOWpt/k2U5RV4ihKQoSsqyQkobzw2oawVYIIR5XK2b52I6RGFpNObxpbTQKMDcOEKA53s4ro0lLVOtWibBl2VB3VTBCN28L1XzfDLqusZxHIQQS0DOfD4nyzLzK03I0hRVVQS+hyMFljZVsdQ1VZ5iS41rC2wbpAW2FAS+i+9IdF2gKahVhtYZQWjRankEgY0fONi2hSUtbFuAUIzHY87OzpnPpyTJnMViQZoWZGmxfB+lYyMw15OUAqVr6rogy1LquqLdbuO6LlJKfN+nqmrK0lyPWmts2yb0fWxps7mxSRgESGFRFgVoTZ5nLJKERZoCEEUhrVYLz/OoqhLP9aiqytxzUi4/c601w+GQ8XhMkqYURWG6CGGq77quqMpqWTVLKbHtpi7Wmm6ngyMllmUhNFiY383jC7IkpS4LTLVUYwGOZSG0xhYCz3GQWCYxVDVVUVDkOVppVFVTFSV5lpEuzGdalRVVVVFX5v7QSpvRcq0oy5Isy8mLgjzLKcqyOexr6rqiLAvzOoQApdBVjWNJhFIIrbEAKcC2BJ5jm+epahwhCFyJVgqtzeGtlGI2n1PXgjDo4Dghjh1QFpClirIAlEdd2dSVRNcSVVlUJWglKQtNWSiqSlHkNapW2NJadlllUaGUbqYKGoGFtG0sy0xHzPVh/s7c0gIpJSCa75l7zUyMQEp7+bkrpZYgNq01nmcvO6VH4IdHgHHdfK01y/dZShshbMDiuwWW/5HspH72Z3+W09NT/upf/ascHR3xwgsv8Ju/+Zv/PTDFvy3iuEO7FRGGMT/5k3+SLMt47733GI2HzU4lJ265fOzlF9FCoHROEHms+31msymVSpFSEMcRRZlyfn7G2dkZk8mkuTBz0nTBpz71gxwcPOSNN77Fr/zKP6Wua37mZ35meQC2Wi1m0ylKmdHgyckJFy7scnZ2xmuvfZMnrl3lz/25P8NTTz3B737ut9nZ2WY2m1KWJY7jsb6+zuUrFwnDkM9//nMkyYLFImE8GhMGMa7r8sILLzDor3J6OuThw0OSJKGqFZ7nUlX1ctwWhiFJkuA4Dq1Wi7quCcOQdrtNv9/n/v37Tfd0xDe/+U263S5x3CIIAqbTsamAqnI57lM1zYjHwpI2INCYBFVVBUEYIKS1POS31tdpd9oURUalCsIwpK4Ud+/fRaMIoghpO9y/t8fJySmhH2DbNtPpjPrsFCkljiMZDodUVYnve7RaUdNRCRaLBXEr5DOf+TGqumT/YN8kectCKTPqs22bIPBIU5uqqpnP58xmM9I0o9WKiaII3/eZTCbMZjPKouTS7iWSyYTZfEGZLFjMZ5RZim21+fDzz3Bv7z7DsxNOzs9odzqsrfZAWCzSjMV8ytUrF0mSlLPTIXVdMp0PcQsbx1vjwu5lbNfi/HTCbJZwPszZ2d2kLAsmkwmvv/5tbFsSBCFJknGw/xDbdnHdmPX1Td558y1ef/01Tk6O8X0Pz/OZzWbkec729jZXrlzl5ORk+dlmWUaaphwdHfH1r3+dzc1Ntra2uPbEE/zMf/QfEccxn/vC53mwv0/gO7z95lvYlkWZ51iWzdb6Dp/4xCepipqvfvWrPDpyZrMZGxtbVFXF+fkZ3/jGN5jPZ/R6XR4+PKCqCgaDPvt7e9x8913u3b1Pnud0u12iuIUtXcq6pq5MEba9vY0fhnieh9VuI12HIsuQluDs5IR/8k/+O06Pjxh0Y6RjIS2LRVZga0W353Ht6SdoBT7UC+7fvUeSpZSqBmHRarVY29jk4eEh04mZfpwPhwghsB2bsixJkgWn5yNG0ykXL1xCCMHhw4ccHT/k9u17PPvshyjLiocPD7l79z5pkqOUxnNthFK0woBC2uRFgWvbTfEnCX2f+Wxmph3SbcbfBYv5nHExQSH49V//DX7uz/4Mf+yP/Qie7/Jg74Bb77/DdD5mZX3AdL7A8QraLUkn9pjNZmgtce2AUZKh6gLbVuR5SZ5reoMWnmcSzfn5GNcV+IFHXZsEEsctsrTm/GxMXUGW1VRlbVYmjoMtHRAKk6hYjvdqVROGwbI4VkqRpilS2sRxTK/XY7FYLBO66cYKtNa40kE2RUhV12BpHMfFU4qqKrFs57s65//IFCd+4Rd+gfv3zUX8ta99jZdffvnf+TEsYWMJB8f26PZ6dLsdXNcGFKCQNlQqx/YkwqpBVFiWwnEgL+aUZQKiRusKpUsWyYwknTOdTrEsc/BKKZdV5Ww24/j4mOFwuDwk0jTFdT3KqqKqSrTWpGlCmqVMpmOKwoAa+v0+Ozs7y2rSdDkVrufR6baIoqgZzZUoZbqYoqmGpZR4nke/36fT6eB5Ho7jNPNnd7mL+YNgDjM/tg24wRLYtsS2Ja7rUpYFSbJgOjXJWEqrOSQDlGq6uKbiA4FlNZ1T0/mBoQ3UzV7uUXVsOhZTzTuO08ytXbSGoijJssws7W2PJEmWnY2UEq0VSTKnKMzuqazMa1eqbvZr5nUoVTXjh57ZUTlO8x7o5XMHU42Lpkt79DktFguUMvN5z/PIsozFYkFVV/iej+O6ZFnKdDLBkTaqLPEdh06rhahrtKrxXJsiT3FdB8e2sFBURUYU+viujbQUUtYU5QxEgbRrglDiumC7oKkQFgRBgO/71HXNYp6gag1aUOQ1RVGRLFJmsxlCCCaTCXlRMJ/P8TwX2zbjT2HpBsjQwnVdfN83O7jmV13XJEkCmA6o1+2ysblJu9MxxUNZYglznZ+enrG3t8dwOGyW4x1WVldN8SNMha2aztmMdBSTyYTJZMrp6Smz6WzZkeZ5TpaZ97uqKlzHwfd9AGxpRjx1VRP6pqOTCFzbQdeKIsupq4qiKDk+PMRCU5eFGTNbAq1Mha+VIm72XrYlmTYFR5EXCCAMAgLPA23eo/l8QZZlWJaFbdvLbrOqSsqixPeD5WhrsViwWJTUtbm+iyLn7OyM+w/uM51OqMqSui6xbRtpS9OpWBaWEEjLwpYWji1Nd2UJ3GZPVJU1edG8ttMz6loQh116vTXQLllaM58V1KWkyKEqJGgHaXmUhQYtsW3PFI9KU1WKPK+Wn4nr+WgNda0BgbQkqtbkedmcFw5FUVKUJVVVo7VACIkQEqXUsuMx0wsJQlDX4Pv+sjsW4jv3luuaCdGjDsqcG5W5BzUorZskJVFaUdemcwWBJW2k/d31SN8X6L5/UxR5xeH8mL29Peq64smnrlFVBWEYkGUpSTLj2298k//sP7vNlStXcRyPweoqP/hDnyaMfB4+fEiWZayvrxMEAffu3eVrX/s65+fn/Jk//WfZ2triX/7Lf8nf/Jv/Z+bzBa1Wm6effpqDgwN+5Vd+hcVigRCCn//5n+fy5SugLd5//31+6Zd+Cc93sW2bosi5e+8uV6zLlGXOaDTkl3/5H3L58mX+2I/+CEmy4DOf+QydTot33rlJlmWcNwi8+WzGopVQ15rxeIznnjAajTk9PaUoCtrdDlpps6gUmKW5a9Pr9ZaH1nQ64ejoiPPzM8aTFSaTEXVtgBSbmxsEQbB8Hb1ej+HorOnMDNJOCI1AgrCo0WilEUIjXYdu0KeqS7SAIAqxheTs/IxaGRAEEr761a9hOxa2a1FWBWBRNwm10+kw6A1Aa8qyZHQ+JEnmRGHEU08+YZ6n67JIZhwdHdLrtVhZHRAEPl/4wudZ31jH932iKGIymSxvLssyo48wjPDcmiI3eyilFL4fEMctwiAgCiNc16AiXdfj4oWLbA5WmJ6d8R/88R/j5OgAVRfcuPEU+/sP+DOv/BxIi3/8j/8x56fHDEdjhCXZ2d01ydPSDFa6RLFHr9/i0sWLbGxtcnoywpLQ67XZWN/iJ3/yJ3nyyWuMRiNef/117t97wOnpOaen5+ztnXN2NsRxvsWtW3cZDke8++67XL58iZ//n/5PiMKIb3/7DX77d36bW+/d4pd+6e/x3HMvoGrF3v4eb7zxDqurPTzXjJSDIODo6AjXdbl58yb/1//mvyHPMp568klWBivYrs1kMuXk7Iz/+9/5e7RaPn/uzxS8/LFP8OlP/xD/4O//A+q6pNtp0263mjFeTVHkzXUn+PznP8+rr77KE09eRWvN+++/T5qktNttTk6HTKdTKqXNPtVxqGu9XNbrJokA1GVJmiTcen+Pr33tq3xw6w6dwCWOA8bjEbPJhMj36LUiOmHIfD5jdLqAwiTDlcEKSZayWCTUSnPh0mVu3LhBu9MhCkPyLGM0GlFrCGNJmmU8/fQzPPvCC7z88ifY3zvg1a9/g2+/+Tr9fsjx8RGnp4d4DVJvPp1x7co1fugHXyFLUqSULBYph4cGBFaVFUJrfNeFIMCW0uwgHQchJHVHIecJaVYSxzH/z1/6+/zeF7/Ij37mRzk9Ocf3YrQac+vWfbA0g1UbrSVCOFjCQQgbgcSyBJbl4NgOYWARRhHtTgfHlRSF4MKFbRaLKYvFgvF4geue0opbZFlNmhr0nRDgeOaMStOUWpmkazp1k9DKssB1K9bX16iqijzPCYKQra0tisIUkUdHR5TldwprA1QD3/PM/eX71KpCZabDmkymlFVhxtPquzvnv6+TVKUE0nFJi5Sz0TlrsxVsR1CRg12DLdECTodHXLi0haoK8iJAqwwLG1WXaFWidUlVS6qqYDabkGUpSpsKHmA6nTKfz4hbcbMgtBgOp2RZRhy3mEymjMcTpJRMpmMWyZyyMktEyxIURWZGUbrCdSVSQqsV0um0cF2bOA5ptdrLbkZKu0GkBQhhNZ1ItRypfWc3pKh1jaZGWKpp1xV+4OC6DogaaQuqNEfpisViCkJTq4I8r3AciSVNdQ8WtisRlkWpQEizW7KkRCNA08zwFVKaJatwbOpCoTTYjoMlBFmVkVc5CA9pWWRliS8cHNelLgvqUmG5Cq0qHOk0KCCJ0JaBolcFAoltSSxqXBtqT4IqQFVYKCxqUCXSMsNHR0rQYAmBJSQoAUrguz65KlBWjWO7RH6IZ3tIbf6N5/p4rk/gtai0JMsVKq+RtaLjB4y0AktgWwLLgk7Ywg192lGMQhu0GRWCijJfoOsCiwqhKxwJnivxHbPc9lwzLum0u6yurRFGEUVZMVhZY7EoqGpBmtVMpiVlaZCTs/mCyXRKVmTYrgFctHsxlg2e74IFk9GYWXPt5UmKROMISYnCkzaiVlhSml1LUZDlOZ7n0e10ybPcjGFqRZnlJPM5lq6wm72P69i4numCbNvA18sip67LZqdZEYYhk8kEKR3QkqpUlJVGIagVCNuhUlArQ4twXBslzN4jy1NqVYNlricDHKqZjGccH54gmvdY1DWiqrHKmiC0afsBvTiGWqGqCl2WqKom9gNsLBwhsVwX13VwfQ839PGaIkVrTa0Uli1RWqMtgZCSSisKVVJSMkvmKG3oK1WlEboicEJ0rXBtm/5gFcfzsISFbRWEvke6SLBUjRTCPNemozItRYmlNb4nqWuPrKwRlmAxn3B8YnN6emwASEUJWCzmOV7gIvBQlUTiIXCQOFRFDdrsxdC1ucZ8F9e1ybIEjWpGxR5JklLXBUmS4ToeRV5T1xqrGbtZopmSCAVa8QhNK20LaVvUysIW0qAyNSTJAtf1DOKx1uS5mSaZTkpQ1wZw8WjyYnbtDRZZm7OpKHIQUJbf/bjv+zpJ5WWB61p0ul1u3b7FaHpKEDooKrJiwWC9S6fTYTob8+zzNyjLEt+PKMsM1w1YX1thkS44H56xWCScD08BA2j4nd/5HbI0b0ZINUm6QErY2FhlPBlxfn7O888/xyc+8Ul+67d+m1/91V8zI5VejygKAE1RFEgpuHfvDv1Bl7W1NX78Jz7D5uYaqytr+L5HUZq9jVKKq1ev8lM/9VOMR1Py3OyFyrLm4OAhi3nK/fv3ybKcfr9LVVekmRmZmdGaacelNJwPIQSj0QjHsel02qRpSpIsCAKPJFkwn89xXbeBrzuGX2LbBGEI0qZ+NFZpEDiqrFFV/QdGfpokWSwhrxpNrWv8OCCUEbYlUXWJ76+iqsp0T5Xm8OERru/TCiNUrTg7PYWGa+Q4Dr3eAN91KMsc29akWUJRZHS7ppJP0wVSal588QUOHh6SZuZ1eK5DK25Rls0YpzRjRMe2EdozY9K1TZRSTKczvLxke7vL+toGcavNB3fu8bkvfQ29mPHS9Ut84bO/w2x8zmCtT3+lh+s4eK7D6mCFP/tzP8dXv/41NharLPKEs+EZQsqGR2JzejJGSpvbH7zPw4eHuF6LJ67d4MmnnmN1ZZP5POGNN75Nt9vjx37sx+n1V7n59jvcvn2Hb3/rDb797TeZTKYsFgknJycoVeO6DvNkyuj2OW+9/Qa1qtjZ2SaZFixmZuem6ppnn77B+fk5aWEW/6PRhMHagCzLKIqCS5cu8dRTTzEcDvna177Of/vf/l0cxwAbVvrd5h7xsSyL8XjMD3/602itGY1GvPfe+0wmI+IowHVdsiwzY8GVFS5evMhLL32ECxcusb9/gJQu4+kh/X4Px3FQ2jLIszRZJoqD/QMm52es9XvNDlTzzVe/ya//+q/z5S9/hXarRZFMSeYJFopW4PPxj3yY5595mtB3+Rf//J8zn87QZcrKoMfu9jb9/oD+ygqdQZ/X33qL8+mYMAz56Mc+yle+/g388YTY9bBsB4XmG69+k8///te4cGmHP/1zP0e716ZGschSWq0W/W6fbquNIyWL2YK1tXWuP/00q6trTEZj/MCn1+lQ54Xhg5UV2rYRto1oRpVpnSGExfb2Bfygzb29Qx4en5hxvKr5nd/5bYaTmelMbTMBqOoagU0UdsizGkf6ZGnFbJZgYTUTDYHvB0hpkaYps7kZ34fhenMWSHPPJDmTyZwiNxMO2zZAHNc19BCEAXWApqoN8Eg0FBOtdQNf1xRF2QB7UsbjKbNZShBI6lo1e+AAMKsAaVlUdUWdJA2fUmJrQ/uxpIXr+vR6A2D/33rOf18nKWFpU9VJSZrOmUw0ZeUiLEVVF7iuJAhd0tzCcSWtVkhVqYZ7U5vqozCwZIP0KszjCjg7OwVtKg1hWUv0ShAGyz1PGIbs7Owwn8948OB+k1QM96csC5SucSyXLM+aVtmn3+9z4cIFuh0zkptMx82HbKqR7e0d6nqfqNZ4nsd0OkcIQVWXpEm6XP4LAfP6O6iaR7+Kwvz/UkrG4zGOY3hSUkqSJCEMQ4qiWF7ERVHg+QGWJf+Vx9LoZXWrNfwBvE6D2NFkWYqUkfk3yhD2bNsg7kwZLfBclwLIswwwu4FYWFitNmWRU5ZFgzRSuA0JUFqCPDdjCRoEkOd5Bq3XvOZ2u8X9B/e/w8FoDnIzk6+paoN0lLZBVj3a61VVRVXV5HmO49iEYYi0bfIsYzIZo+czBBZnp+cIVVAVJUVW4NiO4R2FPqurA9rtGEWFFoaftJjPCAIPz4sQTYeV5xVVrWhLl3YnptOJGaz0m1GJ+Qz6/T7bOztkSWpGR2vH2Pa7WJZoUGcVWplxKFozn8+YzSYoVeN5Hilm7FKWJQCdTseMtOq6AbiYfZSqa+qqIgpD1tbWsJrPJs8XFIUg8AMcxwGtcGyJUhXTyYSN9XXKqiJLM6qyoK7qhnju/CvjVdd1WVlZIQiCBsxTIS2J1ewkhBaUWpMXuVnUOzaLJFkivizLQquS0fkZRw8POD58yBNXLqC0NugdwHNs2nHE+toKtiWQwowIbUtgCfMc+r0+vW6XldU12q0W4/kUz3GJoxjf8wiDACUEtuuQZDmLRcrR6ZBFMluCjwSCujLINNkcvrZldsm2JQmjkDAImI7HoBS2lDi2xJEWZVFS5jm2ZSGF+QyrosB2XHzPJYx82u2Ie/sV7digXM9HZ8ySEj9wzZrA9YESrW20tprdkfm6LDQCu+kKLTzX3LtZkVMWZo9tSXOWmLG3g+MoMwJtVtaWeEQpEUhp49gutaqoqgKtWO52H93nBp1pzoW6rptdsqG8BEFTxCq1hKCbo2J5aEAziXmEHgSNZUls+e/BTkrrijRPWCQjNrfWyYsF58MTXNcQxjY2V7l67Qp5vk2Wz/A8ydraKlqX7O8f0uutEEUxvh/w7rvvc+v9D5hOZ1y6dJnj42OiKOLqtat0ux2qquLq1atsbm7xla98BWlLWq2YyWQCaFZXVxBCMJ2acWEYBkRxiOs63Lx5k+Njg8wqipR7d+80QIgBg5UBdVUxXzLX4fT4hNlssYSFpmmCLS16vQ51VbGYTymaBWUYBgRBuCQnF0VOr9dFCIvj42OklFy+fInxeMybb75FHEesrAzodrsURU6WZZRljef7ywpaStlAvgEpTZ5QoC1TbZkVgsb3TeKoqmq5PJ3PZw0U2RD/FrMZdVWh65p2uwUiolQ108mU+WxO4JvZvVHFkA0J2scP2mY0aluUZc5kMsb3XYKgjZQWt27dMotuaTcADholEEVdS6OyIMQSXltVFZPJZAnqOD4+4f79BwyHY/K8wJIO/5u/+L9mq9vm9N5tRof7XLm0Q7ffpsgKPMfn/v377D/cB6H54U//EDfff48P7t5mdX2Vk/MTVlYN8TpJZqRpShhGSNtj/+CEX/7l/xc7O9/gQx96lpOTc1ZXNhkMVvA8n8lozMUrV+n1Vllf28LzQm7evElRppycnLK//4AHe/dotyPCKODk+JQgiHAdH+kY6sBsNjeI1ari+vXrJEmCUooXX3yRz//eFzg6Oeb09JR3332Xn/qpnwLg/v37fObHfoy9vT3G4zFFUeFIm1/71V/l93tfotvtcePGDW7fvkOyMF3zzs4maZo2Y19JnudcunSJfr/PvXv3GAwG7O8f8MHt28RxvOzYbcdrLicDZc6LgqPjYz744Dbr62t0Ox3efusNfvmX/xG3P3iP3e0N0vnUIPlaEWHg8/GPvsTFnW0Cz6UdRbz4/PPYKIoiIfQCvvqVr/G53/19nnnuBj/zs3+KH//xH2c8nyE8l7DdRgBXLl/myes36K+scm//gPF0xv7DQ+7cu897774LQrO7u2NAEAjW1tbY3dpitT9ga3OTJ598gnw+5+zkmNPjI1RVY2mwtCYMAnIhDFilrrAFaGmhLEEU+CxmY7KiYGtrjQ9/9CW++errvP32TWqtEJgJXlVqFBXCkmhloZVFu9Xj7HSI6wRsbm5zcnJEp9MijALquub87BTpyAZAVLF3/4Balc09oQiCiH7PIU1LZtMFdWUAIVVZNfepg1ULVF2Z/ZKummKuQim4d+8ewBLoZEBaip2dVT71qR/gwYMHTKdTwCSrLMvIs4w8TSkSUyCHUUTkOAhp4XkevX6f3mDwXZ3z39dJqqwytK4oqwzHiRvJFQ+lKxzXQlg1tgPCcimKFKUjwzFR9RLxpZSkyCtm0wVpmpE3S/Y8z4njiDA0i3mtFb7vNb+MYkWaJaSZQU8ZxQO95K4oXTd8AyPtM5/PyLIEKeDs5JRut0voBWRBYCrlLCdNjHJFXdZURYXlGsUIUSvD1HcdXEeiVWWqS13jumbEZNjx5kCXDWfCti2UMtwo25YG8NBwokyycQ2aUKslEs7wcfSykrIQCEugheFzGTa6SUjSlg3XwRxYlaqXqETPdkBbDaqnNtwW2zH8NS2oa02W5biOUdPI8gyE18ywDbfLkmIJCpG2eS8MH8hiMhlhOy4I0cy+hUHIYboqo1Bh0I8Ss/Ooq8qok8RtHMehrqsGybVge+sC25ubbHc7pCdHzCyL0PVxpUeS5TjSbZJ6gpAW7XaHqKmw2602s/mMOIqa99m8R2YMalj748mYIDzj6PiQNCnZ3vIIghBp2U0HKxuqQItut0ccxUxnVfMeWMznC7SuGl6e4b09KlXLqmyQajVpQ6x+VNFubW0tuVNKKY6Pjjg/O0PaNskiYXNrk6OjI2xpU8say5ZGfqg2XJk8z6nKkjxPG0ULZ0l0fdSJP+qoHi3QzX2ll9dRWVZY0lkiOQFokF95YbrAJEs5PT5iMhpSlzVOBEVtrvMwiujEIf12izgKkGh8x6YTR8RhwFwVWJYgz1LKoqYqzcEYhRHClszyDCzL7JBsGyktfM9j0DXk/pWVFQ4eHhp1DN/BkpLAD6iKgqoszT5Wm25eWpKqNN1SXZRUZYWNQfU5loS6JhcCS5sOC0tQoogCt+FjamqVs7ExoNNp4fs+izRDStC1QttmfWNJ29w/tWgI1AIpHQI/xvMCwrBF4HukWUpdmS5GKI3neM3raFDOSmMLiZaCUiiksECZe0QLjdBgcIgCYYhNy2mEQXSaUbyURiXiD36Gtm2g/lEULdHFWZaZjxeWPCzLMgCS75B3xRL5+93E93WSGo1OCEOPMHK5e/8DXnzxWT7y0RfY2trgn//GrzGenHP7thmbra6ucu/uXW5/cJ/NjV18r8Ub336DO3f32ds/XLKkW60WnU4H25YURU5Vlays9BFC0O606XTa/MAPvMIXvvAF3nzzDV5//XUc2wWMnI/ve3R7bYoiX46hPC+gqgqUMgvpKAhRlWYynqJqveQWjEZm1zXoD2jFbaSUrKyscH52xtHRQ1Rdcu3qZR482KMoc8qq5MKFCyRJ0mhrRSRJstRmC8NwiRbUWnP58mVWVlbY398nyzL6/T6DwYCirElTQ2pFCMqyolZmN+c1y02r0ecD0ewYamQtiRp1irIsWCzmeIGP63lmGV/lOLZD4HrYUjKdTvF8B4VFkeUEQUCr3aYsCpLFjHYcURQZeZoQhDa1ckiShNlsQhj5bG6uEYQ+WhlAyPrGJnlRcnZ23nSEJWmSkaZ5I+UiCYOAdtw2I05qXNdlMOhz/fp1hsMhR0cnJEnKf/rn/zwrrRb1dMzu9jZqNuHs9Jz5fE53ZcCzNy7z1ntvMp/M6a8MkH7Mzu5Fk4RsyyAqfZ95MsO2nSWRVukajSaOIqbTKR/c+oCnnrzB+vo6K4M1ur0+dVVzdHBIVdZsbGzTbrWxLMna6gY3nv4QxyfX+OD2uwyHJ0hpKmala+aTMQ8fntKJ+rRaMY5jxkA3b96k0+nQ6/WYzWZcu3oN3/M5OTlh/2Cf3/+9L9JqtWi32+xsvsTevftkiwTZEJzn0wnDs3MO9h6wd/8+0jIJBqU5Px/i+17DqzOd28nJCaurq7z00kuNO0GfK5cvcT4cNUAggw5N0zmdXpdFkhAEAc+/+CJRFHPn9m2G56f83/4v/w3j8xPakZGXmqYzyqzgwpPX+LE/9sM8cfUKdZ4z6HZYX1+jzhJuv3eT85MjrAA21tb5+Cc+wTPPPouuaxbzOSfDM0qtQFhUZcHp2RnzecJTT+cMVtfpdbooBM8++yzbW1scHh9y7949xsMRi+mcB7bN3Q8+wLNdut0utm2xNugyn06YTccspjOksFhbWSUOIyrfo8wzNBC4DpHrYFuaixe2iTodSgFH52PanYj/8Gf+R3zsYx/js5/7HO/dukOWmWJDKIEvfR4xhBbzhHa7TRD4WBasra8sd0uz+ZTDw4d4rsfKap9WK2T/4D43bnyI2WzGG2+8xeh8BEjz+HmN0xSXdVWTJhmLxYy6rqhVhXTkskMzkHOLLEuJ45jBYIDv+7TbbRaLxXIceOmSmdScnp4ynRpAWd1MVxzZyKnVZkysDEOdZLEgWSy+q3P++9o+vlYFmhLXtaiqlFY7YGt7jYuXtglDU/kuFgYkoLVmkSSMRiPG40mDVsm4f/8Bd+7cZTqdoZRuxBLBLBFLZKMMYDsS1zG6eb1elyAIGY/H3L17B8c1ub4oCoLAIwyDRgfLoJjq2rD1yzJHVYYvUNePFpEJaZpR10aodjgcA4b7EoYhnU4HeKT+oAlDH9+30bo2h3AUNMoLgiD0ERZmd6NrXM/BkoIsT8mLjF6/i7QlViPBZElBqxUveVfLg7WZST8Sh3zEDF+KRfKIXW7IxI5rtAbNcxRNtSqXP+e4bkO2NdW8Yd+bx3dsiZTCqGvoiqrKqaoMUE0VXlBWplL2fd/cYKhGQ8wnCIJGYNZU/UWZU1VGf/DRaNKyzEgDdNNdmaLFcdwGBq24sHuBfreH73h40iXwQ+qiIl1k1JXGdwKkdBHYONJDKovAaxGHbXwvptMeEPkxru01EF9J0TD/Va3xvIBHgqC27SItezledcOQ+Xxurj8vIAwjowRgWaytrbG6ukocGy6UUR4xn1dRZo0iQr1UJDGcoDlJkhhpqDQljiLiKML3PDzHZTwaMR6OQGl81yPwfSwEdWX0BdGaqijIkoz9B/vMZ1MW8xkCTfEHLHPAcOOSJMGyLNrtdrPrtJfTB910TI+uq7rhsSmlWF9fRzfcmv29PW69d5uyLPBdx2jvGbINoe+ztbFON24RBz6+Y5uRUbtN6LuoukJVCs91WV9bZ3d3F9/zqYuSLM3I0owyL3AdlyxJmc2m5GmGbjhzAsFKf4DbKGw84kAWRcF8vuD09Izz4ZA0TcnzjCRZoKuaPDGPW+YFulaEvk/gelgabA02AqEVUeATRz6B7xB4DnWVYTuwvj7g8pWLdLptfN9FY1Rb6tqM3B5J2tXKKKgYeLhLu90iiuKGJ2gI9iAM5cLzl9d3r9dH1ZAkJXluSNSWZdDCWhkdxDzLGzFZAzYyY3dnSQtwXZc0rZbgiCiK6HQ6xLE5N8zKISSKouVYvSgKqrpG2g6O7WJZdoOUNFyssqxRGoqy5ruJ7+tO6od/+IeIY5+8SPjYx1/gpY88T7/f5vTsiCSd0+0NkFKyv79PHLe5f2+PO7cf0IrfQdUSS7jUShD4IWVZE4amA3n77bcYjYcIAa+9lnHr1vvM5wvW1tb4xMdf4YknnuAjH/kwStVMJlN+9md/FsdxuXv3Lvfu3eWTn/wkh4cP+eCDW0wmY4bDIaPROXEcsbm9i4XF+ckpx8fHTKZTPv7xjxM3kFpLw5e++Ps8feMGn/jkJ9nf22M+nYGqcWyLyXiI5zr4vouNZGNjgxdeeIG6rjk7OyMIAr72ta8B5gIbj8dIKZcX1WQy4emnn0Ypxfvvv48lrSVTfHNzkyRNqZSmzguKsiSIYpTWRgHbAl0q8iI34AANeZ4ZFE9d0Wo94kUoqkZaqdAFuq5xbRvP87Fti7LWy6VpXhjtwc3NDcqyoN1uoauKyWTMI6HLbrdDq2VuSj/wiVsRSbLg9u1bRHGLTrfN0dFRQ1q2sSMHxzEyQVmeUZdDPvKRjzCfJc2Vo/nc5z5HluU88cST/C/+Z/9zFtMJo9mcg/ff440vf4ntlQGBH5GkCXfev0OaFzz/3IvE/ZZBVcUdtLa4dMFDS0izDD/wyasEz3f5zd/6LfYe7IOQrKztMDyfM5uNydKCr371G/zAKz/C1vY20nZRlWJ3ZxetjHRTVdUNRFiSpjmXLl0hjHyq6nk+dP1J1jfW2d/b4/TkjNDuc/zwnN/5nd/hvffeY2VlZdk9T6fTJTn30XgbwJY2WZbxwQcf8M/+2T+j1+uxsrKCMzUqAp/4xCdIkpSvfuWr3Lr1AdPphCtXrvLCiy/yjVdfZTKbLseKRVFQFAXT6ZT9fYPUGgz6dLtdbr77Pi+8+ALnwyF7ewf4vk+WZrQ7bZ577jleeeUVVvp9Pve7v81v/4vfoBX7CF2hVUVRKBazhCcubLA26DE8OWV3fZ10MefeB+9z9i9/k167jW0JLl+6TLvdxXVd3nzjDY6Pj3nmhefJJxNW1ldZ3dxAux6vfPIVXn5ZEcRmNXBwdAy2w6WLF7l46TKHJ0eMxuc8+8yzBlmY5aiyohVGPP/sczzxxBO045DFZMTzzz5Dr93m8OCA8XCELQWWgKLIWMznbG6sE0chrmdT1Dknx0e0qx5rO9v8iT/5E3zkIy/guaYQfe65p4laMXt7hxwcHnN2PkLrmoODPU5PD1lfHfChDz1pRtSqInQj0izh5OSQg4MDPM8GpXi4vw/UQM3Nt27S7Xb5+Mc+yquvvsFikRlysycpi5qyaFYIlmTQ7TOZjFkkGZYjliRsswJQRJGLUjVHR0ccHBwsu6ogCPjmN7+JbRsFj+l0yng8XoIt6qKmbAoo1/PwA5+t7W2EJSirisl48l2d89/XSWp9fRU/sDk6SrhwYYdut00Q+hyfPGwUFxw8zyfPTZU/mcyYTOaUhWQ+y+h0VgiCltGn0ixZ2WdnJ8s3uqpKxuMxo5FByg2HZ1T15SUrP0lSVldWcT2XyWTMfG5MvBaLOe1220jkzCbUqqaujFp3tkiX8/vpZEKeZXiuu+xAppMJZVniNoS6uqrxPJdWHJGlCaouCYOArNa4roPnmdmuIfkJ5vMZVVXR7XbMfqzR8ntUeZlK3Oyx0Hr5c1I+mh1bqEZbUFgW4g90PhqDsDPvr4GZPmKZO67TKFGYavkRD8Nq0JGPZFV0gywSTdUupcR1QsbjDKVqfN8lzYy6hGx2CI/2L7a0G06IMOhFz6Pn9wGWezSD5HOxLElZGk25KIrQSjSadgXD4ZBHXd/W9pYZRTRac8PhiM1eF9/zqcqK0XRKVdT4XshKfwONxlISW3qUwpCepaVwnQDbten3V/G9CMfxqGqjjCKlg++H1FVBnhc4jksQhCAtVF4ShBFlURnFcs8jiloIYdTHW60Wk4lHr9die3uHXr9Hkec4jstKexdbGGFjz/caKLdaEmVns9my4v2OIgnLr8/Ozuh0OkuNxyAI2N3dJUtzbr5zc9lRSyno9TpEccRkKenlLMc4RVGQZdlSScPzfZI0I4rjJdHasiRpssB1V+h2eqysrFI0tipnZ2dm76EsQ09UClVrOm1jFZKlCVWRk6Up09GI0dkZDhpbWLTiGMuy8ByX4Xy0PCjTNGXd9Wi12xS1EdettSaKWwwnU4qyxLcdOu02a6urTOZTM4JutcwYPM3QtSLwPHZ3d7l0+TKqzJmen+K6LnEUEYYh4+EQtMZ1HBxpIwDPdvBc12g6CpfxfGw6PlUx6HWMyr8w3MZWKySKfOI4IAx93LkZ5xraiCL0bAOecmK0rpFSYEtBXVfkWYLneqiqZpYusCR0OrG5npUiCEKKQjVJ1DLXZJkDppPS+pHFjdUAafXybHrUuT/ShayqaqnaEccxcRwvx+x/UA5JN8i+R7sto1NaLSXaEKCShPT/oyv/N8X3dZL68EeeA1Hjh5LdC9vErRjLgna7w9PPPms06GyXa09e487du5SVotXuUhYCx43Q2ibLK8aTGf1+j/k8xbIsdi9c5Pj4CNuxWF1dIQh8FvOExWLBl7/yZd55513W1zeYTmckyYJvvPoNXnrpJba2tqkrRRgYr508y4mCkDiIiX2zL8rzknFzEG3v7FLVNbfv3KXX7xL4AbP5nA/duI7jOXz5q1/CdV12L+5w8eIFNjY2+M3f/Besb2yClITtNs88c507d+4sNdtm8zFaV2htklMch413VU6n0+IHfuCTHBwccHZ2xrPPPs37779PqWq0pbjz4AOiqEPWKInbtk1d5kYc1LYoixyEWsoo1c347pHUjNKaJE0MwQ/B2voafqN8kKcZyWJOWdSAQj5ShQh8A6efz5aHqt3t8KEPPYVWFZPpiDRN0Uoz6PdoNVwpVSvKomAymhB4Aa24hbQk49HEHJpWQVXVSMuh3e5wYecyZ2dnvPfee9y7dw/f9xmPJxwdHvL+e+/zysufJK0MgTtNU+7euccLzz7L1pPbbCYXKNHMpynZoiRY6UNdcH425vD4kLgVcXCwz5WrV7hw7RKDRcrP/Id/hizPOD4557/7J79CpzPgwsUn6fc3+NBTN3jq+nWUkOhaUz9aWAtoddq88kOfYmd3l/lsihCa69dv8PDwATdvvgsobMdha3OLJ594mla8Rn+wiRv4bO5u87nf/V2SNEU6NlEYoTH+a2Uj2UUDcngkT1TkOQ/3DxCWIMszPC9gY2OTQX/AZDLlC7/3ZcLAKOi/8e1vsbuzaUSWh+dEUYjj2EymM4ajMXGrxUsvfYTDk2MODh/S63f4xqvfNIhR20YpaLe7rK6ssbm+we7OBf7ZP/nHvPXWW4zGI6RQdCKfqlR4vsuli+s8/eyH8B2H9957h/H5EYNuhyB0aHci7ty7Y/hCWLhubUjWWnN6fsZbN9/BjSI2r1wEaeDON555lloppvM5i7xgfX2d9c1Ndi5cYnN3G+nY9Ps99vf2uX3nDogC17OJYkP5yJMFx/v7fOn3vsjevQcErkc3apHEbXzbIQoD4ig0Y/S4xfbWFjsXd7j2xBWyKuNrr73K7Qd3+Z3f/i1Oz06I4h5pphiNTpjNR8QtjyuXL9DrD3j7nffN+BXNaDjia1/5Guvra6ytD/Bdl263g9y9SL/T5fDwiIOHh9RK0u23iOIQ23EoSk1ZpQgBZW1WDxpNWSrqRp9PKUWSLlDUSNvCc220pZGWNET3IKDb7aKBZLFAacMBVMrs1Gez+VL5vCwrHNtFaYWqFUrXy7/L8xzRUGT8wGdlMEALAbz5bz3nv6+T1GC1Q1XlWFLjhx6e7xkCmrDodDqk+YKqronbEckHKQiJ50eNooRxf1GN1pXWFlWlKKuaKG7RzhIsi2Yv1EYrGpmRCaPhxHB4EBRFweHhIVVZEYZtWq22qZq9kMANaIVtqGE6mlLnFXWlyIuKIIwIwpAobjMcnuN4jlE2lxatdguNYr6Y4RQurXaL9Y0NdnZ3WSQJG+4mrU6LsNWi3WmRZgums3Ej8liiqY1ESpkRhTFKGRkbx7HZ3t7i9PQEIaDf75FmCcKxqHTJfDHDdjyjWFzVZhFfV3iugyUs8rwCoY2StyVQmmXnYjuOQZlVpUE1NtVW4PtGdVopZlMjLCkByzU8EmlZ2I6xGnk0YlBa0+t1KPKENJ0zn8+wLN/oDzYHbFmUaAVVUVHmJaEfkC5SpGUOfpSgzEvc0Kfb6WNLQ2CsysoYItpG7SJZGOj2IwFdIQyvZz5P8FyfbneAEmOmSYLQkqrUIBywLeZJxnyR4rgus+nCiPFWFr7b4tLFVYQUeMED8rymP/Dp9gds7Wxz/elniFpdzALRqDMYYzgLy7FZ7fUAzenRMVm6IIpjbNshyzKm0zllWbM62KbdGhDGbTwv4tK1KzzY3yMrCvK6JHZD7Ee7uqIgL0zV2mgBLAmXWhmOl2VZaCEo8oIgjFhdW2N9fQ2lzZ62KHLOz8/Y3t3GdSxcRxpFCMemVoosz/HDiG6/jxaCvKpRwuLszJjaBUGEKipc18NxXMIgJI5bDM/PGY9G5GWFK2qUcsEy0lmtXptWt4suM9I84eDhnFZ4GdcOERLm6RxpOXjYlLowCuBVRVoVjGdTWo+UUSzzmUYtU0gVtbk+gyAgjiPa7Riv6YzKvEfWz7h79x5aGI5k4PuoqoK6YjaZcvzwmMV0TtT3DAJUSCTCAIQ8h3anTRhERK2Y/sqAC1cuUwvFG++9w2KRkFcZp8cHVGVNqQRpOkNVObYT4PsBdSM9ZglwbYcqr5jPEnzPp9dpo8oaW9is9FexLdvYwGQVQmpA4ji+UQepNNISFCXkOfi+pDICIyAk0nbAgqwwI3shG3SvMrtb0xVaBH6IFhiUpmUUKFStyVWBY7vLrq2ujO+W2UlV5lprgFjSkc1YsMD1XFzPw/X87+qc/75OUu+9d5PBSpftnU1OTo6YzSdLuPfVq1dR1Exnc0bDKa+ptzg+OaEuJEHQwZbCIO60hee5KFVS1QbdtLe3RxyHZFnCgwcPiFsxQptxxZUrV7mwe4G9vX0ODw9ZLBJee+11Luxe5MUXX+LatSeo65rBYECyWPDmG29y//49pBCsrKxy6fJVVldnrKwMiOOIXq/Pt771GsPzEcPzIUmaMJtNiSJDipzNjlhZWeGdd97mzbe+zXgyYn9/D70PizxlMp00N1vM0dEhrusSBEFTvWREYcSLL77IYGWA67j82q/9Ku+88w7j8YTBoE9eFERuRCuOef6558jSiiTJyf3CiFHmBWVhACpZukApjbRCQzJUakkcjaIIxzNSK1Uz2rNtG1uaX1VRmjFBFOHYNnVVIpturM6r5T5KCIiiCCHgzp07tFotnr5xw+x7GmuNPE85OztDIBr9sGNs2yZJUiMwaskGGhszGKxy6cJl7t69S5oalNSNGzeWunZKKb70pS/x7lvv0vEDAlXTardYnJ/x3q33OBmeIl2P8XzGrfv3CNotdi5d4IWPvERd1kjb5uoTTxGFMf3BwIxUbI9vfONVJtMpB0dHjEZjFkmJ0jZxPFiKay4WC6aTCbbtEkctwihENaKmnu+zs7OD40hcz+OFFz7Mykq/EUGVrK6tI6VDnmXMZwt6/T4vv/IKd+/e5dVXX2UyGpPnOe12m1YbZCIN0VMIyrxY2qxI2Vh2CIFl2+zt7fGr/+yfsb6+zmKx4M/83M/wrW99i/39h6yvS1599VWKoqDX6xnPJKWJopC6rvjKV77M22+/TVZkDeLLXJum0zZip0fHx/z0T/80f+Inf5L333mbz3/+C9y5cxfPcwhdH9uRVFVJWpqKe3V1QJku8H1jDKmKFLsZHx8dndBut5nlirOzKefjEZPFAif0aY165FXN2ckpG8Nz2msbSMeM08OibAz7SvYePODh4REKQbJIsB2P2XzOzZvvGhqDJThwH3D/g9s8/dSHODs65vT0nOl4gqg1RZIwm07JXYe7d+6AtJjN5/T7A5I0YTydMF3McQKHu/fuMZ6MsWyL0WiM7UY4XgTCXItljVEdjwI+/ekf4OHhCYd7B5ydniKA+WzKrVsfsL+/h9KSP/Wnfpr/1S/8AkopfuXX/jmvvf51bt16jw9un/Gf/Cf/YwI/4Dd/818uR+t5XmBLGnK/3YzjFHlmdsye09ipSHuJvA2jiMuXL+P6RhR6Pp8z6A8aXUJz/7377rvcv3+foiiJoug7orNKIR2zAgijkP5g0JB5wbGNUet3E9/XSep8eEYYOYRhwGyWgTAcjeHwnOvXn0ILY5ech4qyNEKjVWnRii2qwvAAEAYtpnSNUhV1bTOfz+j3O+S5YLFI0BriMMKWDmEQMRiscO/eA+bzBZZlMZmMGY8n5HmG6wyYL3J8z8cS0hxE0xntKCYMYsIwRmtJp93Fdmz6/QFR1GI4HDGfLwDNYr5oVMsdytJ0JrP5tFEtL6nrgjTPmWcpBwd7XLlyBcuCNDXW70FguBJgxiZh5BMEhky5t/+A8+EZw6HxxFpbW6MqS6Tt0Om0KYoRrtNcwKqmLBVlXaKpGlSeXnKQHiH2jNK7g+uZ2bVVGXUEM4phieKzhIXn+ThSkNZloxChGg+oesnFCAK/+X+Mp1cUx8Zrqzb8HIOyyo1SRG4UKx5x24qiamDaHkJYRGGI5xngQJanIBT9QZfpdIofuNR1zXB4RjJbkEQxg8Andh0WaMbTEZYt8OKYLM+YZwVJWSJsyXMvf5RGIx43jOn2B0hho2vDBzs/G3E+OmcynlJVGmmbMYvjeAjM6ywaLyvX9Ymj1lIVuiprHNvBss21XdUF/f4qVWWW157n4boBGrFUMW93OnS7HTa3tpbW8XVpdoOu55GVRaMtZ1Hb0nBymkMkrWtqpQhsA6g4ODhYWtA8+eST3Lx50+wJ05TJbEq73Tb7NaXJi3Kpin10dMx8viCIgmVyshpdvkc7jrqqiKKIbrfD7ffeZXh+RlkVRJHRxBQYLo4jZeM9ZNxmDXE4Yzis8Jdo0aq5dxWzxRzrVKClhXDtBmJdNbYlGZHSjR6noKpriiwnS1KKqgQhSbOULCvwQ+NWPB2NEJZB55VSQlFycnLMdDI2ABQNeVaQJillYTy3FvOEGtNVqq4y54O0CB8+JGpHLGYLyqIkcEJjiVNWKDIsIczoDSirChCsb6yTFwXj8zOT4DVUVdFw1BZkuSLPa9bXNvDjiKtXLvP2228YGkZq5KqiMKYsK8LQI00ytK4RPBrRmzNUayhKhedZDf/JgJp83ydoCP5hGOJ63pLaMhj0l+7AjxDBj/ZPSxUSIdBKIRpFftfziOOYNDPgnUdj5+8mvq+T1O9/8Qt0ejEXLuwyHo+Jogjbtjk5OaHT7hJ3ukjpUFdGoFVaNk7gmWq8MLYSj/Y3QeA1I6wKp+EG9ft9fN9jMV8wGk0a7km/UTVQBv5sO5RlzVtvvUWSJOzu7vLss8+yv7fP0cEhnhfwzDPPk84XhEHME9ee4t79+9y+fZeqKnniiWtcvXqtUYg4WnZ1xv4cNjY2sB2rWWr7xHFoVBlcG7uyGY/HvPvuu0vy5vHxcQO3Nuz+IAg4Pz9nPB4ThgGHh4copej3+3iex/Xr1zkfnjGZzjl6+JDTkxG+F+G6Pq600Y6N0DUIie8GzZI8R+gaP4rotGPyzIAwbCkQ0sYSPlVRMp9NSWazJmEp8jzFdSV1WbFIFkjbIsvKprJrRlC2xXgypsjmS4Xzs9MzRuNzer0ulmWxWMyZzeYoLSgbZ1HZ2GJLWaG1IEnSZvGckiwyrly5wuHhIWtrazz33HP83u/9Hp1Oh8lkwtnonD/2qQ/TDQKK8ZijOx9waXcbVZVkZc58UtDqdumsraKFRalram3IyMPhmDe++Tqe67C5uYld1BwdnnDv7gNqNL3eKtevP82P/8Sf5OKla7RafdrtLmenp8v9mGN7fPKTryw10sDCcY3La1mVzOdzbOmys3uF9fUdrIYrZTseWghG0wl3791DWhY//hM/wTPPPMOXfv/3+epXv8rR0RG9bpcwDE11qzXSlhS5MQi0tcbxPAIpjYxSc9Bcv3GDH/zUp6jLkuvXr/OlL32Jv/f3/h5pmuM4KVWlliPeLMvZ399jNJ7wsz/7s+wd7HHrg1vMZrOlLmWaZmilabVa7O/v84//0T/it37jn1PVJe123KBFK8qqpt9ts7kyQAjNm2+9Sb6YMhueEcURVl01avrGLylNU8q0xLZhkaasrK2ytb3Nxvo6Z6MR777zDifHJ2xeuMTpaGR4P0XBq6+/xuHRCQrwg5AkTc34H6jqmuOTE7rdDqiaMstwhOBo/wBVVqiswrUN+bksSurKWFMsFgsqVaO0IcFOpiNOzk54eHxE2I64v3+ftMwIopA8N9Yrnb7P5cuXeHh0wvlwil1pOt0BjufzzDMf4unrT3Hn1h0ODg7Y39/n7GxkQCzdmM/97mc5fLjPj//Ej3M2Osf3A7rdHsPhlMOHR7z00kf48//L/5S/83f+HySLnMU8o8bQX6TFUqJI1Y8sNSyU0kRRzObmJq122yT1qqJs1CgWiwWi0Up75FumlGrOrbrRLjXuAnmaMhyPl2ALx3GYz40dz+npKc7k3wN0397BAyazqDnIzlld1VhSMhnPODg4ZF1JWq2uEWdQIBpJXuNsWmJZj1g/BjGj0UsdPYNq8RrNu5Qsy2m3DfqpLA3vybEdHMdDqZLz8yGiQUelacpivmAymWJLl35/wHkFUdSmP1jl4eExs9mcPM+wbZdeb4V2a8hkPMX3PSxpiLBgZryPJE4sC/zAxWpadseRTGcT0ixtxE3dplsw1ZBG43kuw+E5gKnAsgTXdZceTN1um+nMwL2zNDV6fJZtINCWQCnjemsey1lykIy5oMT3HFRdGTULq1mzSIGyoK4KssKMmKSwjF2iVtSqpqpytI6WhGnXNTwRKR2KImdeZrTisFE1yBmPx0u1j7JsUESKZcFQFt+xwTYeQKbDms1mRg09NxwXA2lvN/JLBilYFhnrawN8y2aaLsjzlDAOSOc1sywlr2v6m2t4gU+tIU8TqCosaZHmBUcnp6yvrRphaiVYLHKGwwl+EGL1HHrdATeefp4LF6+iarMHOj8/ZzabcXh4SOBHLBaLhoBsCgzHdUHV6FqQ5iXtdod2pwNKgyWM1JRW1HVJmqacnJ0ShSEf/ejHloTt119/HQAtBE7zeadpiuv7qNrI1zzy/DFOz9/xDet2Oly4dIkyy9je3ubk5KQxCsxwXcfsJRrfoEeuttOZMdvM8ozT01PKssTz/CX6z2q8xibjMXt7D3jr7bdot6NGXqumSDKkBa7rEIQ+UsD52SlFMoeqIPA9qlyRJXlzqBrV9KquELakrGukY2D0URQxHE8Yng+NJqd02H94iCVtsqLgwZ27PDw6AWkRRDFFWaKxqGpFpYxqSuB7SKHJ0pSkKEinMxwsIj8i9gNUZRTJHdtFKyjzkrzKEdImz3NmswV5npHmOcPJiOl8jmU/0tWTFGWB1opur8dkNmc8maGFRasdorRFr9/DlZ7he2UJ5+dny9GdbTscPDxmOp1y9do1kALbdnBd4yk2mUyJopjLlzfw/aApyMWyCHnE33vkv6Y10KBvH5G14yiibOgptVZLY8Msy1C1QR8afp8ZHT86V4wYgo3rOExmsz8wdVHN9CNHWIK80Zv8t8X3dZJaGawihGIynjGbzcmyohmlwLdef4vWnYdG48z1CIMY32uhtUWelfR6HqPRmOl0bsaFcwOG8DyXvb09iqJgY2ODlZUV1lbX+YnP/AnquubBgz2Gw33Oz4e4jsfW1g6TyYQ0TRien/PmW982kOxKkac5UdjiiWtP8rGPvIwtHYbnI7QSPPXkjQZOarMyWKX9UpsLFy7w2c9+lrhlZvNBELK6tsJrr32DIPC4fOUijmtxfHyI40ha3R73HzwwLpeNfbptGxkkY9644FM/+CniOOL8/LxRRXdot43awCPQQxD4eI5DnpbIJjEVedaIfprRi+3Y9HotBv0eALP5jJOTk8as0SNZJOZQsp3GcM435nW5qaADzyeOouWuTDRyRmaH5hOGAbohSu/u7rC9sc57777Dw4cPmc9nIGA8HgMsLe+V1gbOjvyOVbb4jpfUhd2LtFptijzjc5/7PKur5vD++3//H3Dhwm7DHTOHd9yKiB0Xt8o4ard48OCeUXu3JXldM5lNOBtNcbyAtY0NnDhC2I6xGR9NqIoKzwmAU37jX/wmR4enXLl2lSwr+Pa33+L+3Qd0O+tI2+Pk+ARhwerqKru7u1y8cBkpJaPRiH5/YJKblIb4XSi63b45CGsLYVmossaSHnmWMByNUGgc1wBvpGsTtmJ+6Id/mOtPP83tW7f44he/yP0HD5ZeUI/Uqh+JkVrCagzuDET4nXfeafYyN/nTf/pP0+12WV1d5SMf+Qhf/NKXeWSGORgMyA+P6HQ6bG7FaC347Gc/y+n5aeMkS/O7bg5W8zl9/RvfwHckjmsbJX3XwvNsgsDnuetPcXF7k5Vuh/WVAelsyunhASeHe4xPj5icTwh8SbfbNTvIMsf1fOJWj5OzM1StGI3HlB/c5vD0lEVDar734ICz0ZhOp4N0XGbTGbo2MkG2sMB2sKSNwugKPuL9SDSutI21ySKhyHKqtELUUCaJETyuKtJFghYKIQ0QaH/vIdNZgpDQdoyCurZZ0kVWV1fZ2t5l99Jlbjz7HKNf/3UOj0+oCmP0OZoMGY2H2MJhNlmwsjJoXAJ6vPfeLcZjo5qeJILf+pe/zWyR4XoWFy5u8Zf+0v+Wosh5+PAQ2/YaCk4jTyaksbOhAUJIjGVPY5AopcXKyir9ft84Ijwi9UprucN1HccAkYRYqqIvFgvyPKff7y/PlvlsxmQ6xXUN+Ks/GHDp8iUjOiwtFkn2XZ3z39dJKgwilDLSHkVeN0rb0Gq1GZ6PyQtBEJZYQjaMf7l0QPV9n9FIoamxbSP9YToHI9g5HA7pdDoIIQijiIsXLzGdTrh//wGLRYpAGCtkz6fdNh94XqSMRiOOT44JvABbuAhh0en02Ny6gFbKjGWkQ7vdJQg8tFYoVxFFMY8qrLrx3ZHS3LhJkuA0vjG9XofDo30saeP57h9QsygQAuLYcCSSpEJrjCKFY7NI5iwOFgjL2GeHUdjI6RtAg7AMcdZxJHVVUgnZGJ+VSOk2vCOI48jIIqmKLE3otGOEkCQYLUEL8FwDoJiMx9SVeX51XdJutZlMxpRlgZRWk1QlrudiO8YPJwwD1tfX2NjY4MH9u8sZe7sTk6ZpI2YrGtfh2riPopvutqHoN6rL7XbHSLjMLY6OzPhGKcXDhw+5ceN6AzCpiMPQaDQ6HoUtcT2H6fkYR0oENqVW5GVGUYDGIopjM3PXGo2gLEqmas5sniAtyeHhceNCajqryWTOZDyjKCp8y6coKsLIWY5jB4MBVWV0BDudDqJZSmuz0CPwI4Mc1BaWksaXyTZVf5rljaIDCEugMGZ2GxvrrKys0I5j3nv/PU5OT1gs5iitcVyXqq4b9J/RYASW2oaj0ajhumj+1J/6U03SDw3h1zEuylIahQvHddFgCOZBxP379ynrR662VuO0bC89iZQybsFnecr6So+ybnyb6orAkWxsbrC2tko3jtja2uTsWJPMAoLAZyIEWW408WzbOA5YlkA6DnE75vhsSKUNNWE6m5IsjHFopRTztGDeUBm8IEBXhsyKlFArgzSVNrV+ZDUhydMM24IgdvE9jyrNKJWmLMqmk8iwlEHQLeYptmvh+MaJOlkkZFmJ7VpoIMtLPOk2ezaLKIoaYM8K6zvbCMvCsjD3eeBQnueGQoFBVrZaLTq0G6dul6LMcBs9xLt375PmOb1+l4sXt3nmmad58803SZKE4fmILMsNwtYwEIyrgzJjPAcLxzHnlFIlCHM2mr2na7zI8rxB4ZruWVoWYRAu1wqPDFbr2ijzB0GAVooyz3Eb52w/MCr7KyurIEy3/u+Fn5TrBlgWJElCUdQILGzbIU0KorBNVWmqUjEY9ExLikWSpIxGQ6rKIPA2Njc4OHhIt9fFdVyEEFy7dtXsAZo9j2VZ3Lx5cwmCkJZkd/cCi0XKvXt3ee65F9jY2GD/4B537tzm7PSUyxev4ruGi2PbDrrxYlpfX2djc9OY/TXWHmmyIAg9dnZ20Fpz8PA+jiuI45DVtT5FkRFGHk8+eRXbEYzGZ+w/POL8/HypRv2Iz/BIFuellz7Mpz/9aYSQRualyLlz5w7tdqvx+LGZTCa888475HlqFDeCNv2+w3yWUFVGi9BoDhpCbZIslkgux7EZDPoNYdmQhbvdHju7lxDCEG2zxOjBgUkfK4M+WtXG3gLDiZK2JKhK07Wg2N3dZWNjg729B9i2zerqajNmSpukrlGqahbIGQJD2rUsQ3p1GhdUaRkF+fF4xNnpKdevP8HFixcZDh9pz/lIaQ7R+WJOHEWoLG9U3HMGgwH9fhfbdzmfzZjOpwRem26vy9r6GpZt47geVV3z/q1bfPITrzAYrCAQfOpTn0ahyYqcSmn+d3/pf8+LL71Mt9NDWC7b2ztMZ2esrq4yGAxQtebb334Tx3GQ0m7sFYyklR8Exo1VSNCWuc6Fhao1Qkg63S79QZet7W2DDARDprYsqjqn1W7zyVdeIYpj3njjDebzxfLQ8YMAC0HQwIaLzMDUH7k17+0fcHp6uhzhfOpTnyLNM15//XWm0zkHBwdcvnSZ4XjMyckJjKfGAsV3GmM7A1x49LmkSYbjmAMt9IyQa+gGRi6sVmxdvMAP/fCnuXJhh2I25ejhPvfu3aPKEnZ3d7h2cQeqCs81C/wvfvH3aXf6BH6L2TxD2hZ5lnFyckqaZeSlsfHx/MAo5QOqrrEQtFsttBAm0ScpaZ4hXQ/H8xGWcdNNkwUK02kWzYGrXZ9a13TaHWwlyNPF0jpeWwaSbwkL3w/RIkXaFmgabqHdWOIY0VZTDJ/z1muvk6cpm5sbrG1s8LGXP8Gt23fY3z+gzDWWspt9UMra2jrPPvs8n/vcF7h9+w5pWuC4DnEcoFTJW2+9yy/90t+nrism4ynzecrp6Sm1UuYcUgbs88iKR2treT1Z0iKOQ7q97nJk7rgGXFSp2gBOioI8y43zbhSRpukSIPNIWq2ua4o8p2jATUEQ4PkGbj6ZTBCWkWX790IWKfBjEIrpJKEqVTNSsMjzkk47Qje8J9+PljLzRsNvwWw+ZWt7nbWNPvf2b9ML2uYiwqbb7VOVCmk5CC1xpMvZ2ZkR35zP8VzPQHCLivPzM7rdDq7rMpuOENoiS7Ol/l+tampVkVcltmXTbXWwbAfLblSFy4KptHB8B9dxuH79OlChdEG/36XXa7O7s0urFbK1uYXjGN6CJQTzJMFquCCWZRGG4XK3sbm1yQ9+6lO8/tq30FobczOtCXx/ySCvq5rzBl3l+wH9vodtC/KsJMsWeK6D1jWWZRQnsiVD3KiOh6GP45h5cxRFdLptNjZX0UqTpym27WBZNkWeo7Qm7rSZzmbIZIZGkWcZrudS2ZJcGCfPXrdNpx3zzvB8SRL2PJckXWBL11TdzU5QK4ElJaI5SHw/aGzTDdxWKUWaJMymE3a2tmhFEfPJFM9x8JqqEKUo8hwv8Jknc4oqI6tT1rsd+qtdhG2TozgeDfHcmCgKiaLQFBkYhefxxPDLPD/E9Xw2dy/iui737t6lUooffOUH8cIOjh+DsHFcl+nsHN8PaXc67D/YW1q8X716tfGG0riWi227gAPKosiMcaTrOVRliWU5xK02jmsRt1tUpVG0t6VNpYxmpJCCy1cvMxwNuXPnzne6JmUqakfajWutsTspqwrf8xguEobFhDzNKLKMwHPZ3d3m8qXL3Lr1AZPpjNF4zIv9PucjU61XhoCDVsKIKtcJVa2RttOI7k4J/ADpOEjLNDGOIxu3VosobnHpyjWuXL3E5OFD9vceMEvmSFUTtVZZabeJA4/Qcwz3Rtqsra0Rhm0Wd+4DijzPWKQps1mK5VjErVYzZjTOsGVZUDSdvOd66LwwbgaLDLKCsAVhA8CqKg2NQHBelLSCEFVqdJUbX7lKGXuLPMcPAoqqQEqHqq6xJASBh3Rsqlo1ztOmAEFYZFlhOstKsfdgD0sIotCIAFy9ehXRFCWLWYrvBpwen6NqiMM2ly5d5Z233+fB/QMyXaJqRei3KKuK0XDEG99+g8FgwHA44tate0RhiC2dRrapbnaPjUOcbrbyyiB8fd8nDEIAyqIwO3alGjCIWtJALMFSheKRHJll2Utlk0cis55n9shOM+ZMkgTP94zjt/7u/OO/r5OU1hbj0ZiqUji2S7djHD5PT8+hBsd2qbTi4OER3U6PLCvJioInP/QEi8WEy9d26K/22TseUBVFc+NKZrMFnhtBbaNLi35nwHByxunpCScnBj1XVmYxb9s2N2++zfbWDkWmSOY5m+ubPPPMDTY2thgNJ8StuLkxXcbDGVIKXM9Do0gXc/zIN9ImdUWR56yvrVIUCbYUqLommSdkyYIsTYwFfC3wvZDhbMErP/BJJpMJSZIipMWHP/ISvW6X9Y0NxqMRcRiyd/8+p8cn+J7H1StXGY1GnBwdMZ/POTs9pzdoE7UipC0Zno/MMrQyY9BeJyaOPYLIp9WKCIKAJDU6dK12iONIAmkWs4HvUxYLRqMpe3sPyPOKVqtDHLWJ4pCr156g3+8xPDsjWSwQ2phPep5ZlLdaEe+8/SYH+/eZz+ZLfT8j5mssyldX13FdUzTU5RgwCsvSsnEaYVjHsamqmo31NZJ5QDKZMjo7p8oK6rIiDiIe7h2wWMyZTCZkSco//Ee/TL8dQzajUClB28VrOfQGq1x7+jqbDy5QZDWO6zIan7OjKvqrA55/8UUuXXmCJz70NN1WBy0sLrguKIUlHaq8IJ3n+B7osqJSygjk2i6+72FbZqz7SGbImAY62I4D2JR5ZQ74NKcsa1ynsYuoKsB0uJUqTEJvKtk0M7YabujhRz5xJ+ZDN66TFyV1bZTM59O5kRJybVbXV6jKNoHvcXh4RFmURIHhu/yt//Jv8cmPf4wbT38IaUteeeUVzocj0uzLPNjf59btO0wmM6R0kLag1+uRpAYsYNse/VUfy3YoGjUPXRuwgZAWo+mYQb9Hu9vj4oUd/uP/+M8x6K2gCoUTxWxs7/DSxz+G71hs9XvMzs7I5zOyXNNutfnwh19ia3ubsmhsWFybRZoxnswYrNaMp3MsaTNPM2pdIx2Hsi6YTEZG5V9Z2NIhClu4TmASvGuDMnSI1VWD7nWlw+j4lMVkQZ1XRH7AxuY24SWPk8NDPnj/FmubG1R1RV4UTGaTBuAkKcqKMsvR2iZNK2y/Ym2rje14+F6ItFxOjx4aR19o1FUEO7uXieMek+GIyXjKw71DfNen1epz9PCUq5efIA47HB0d8cab32IynIKoDIS/rDg8eEitYHNj0wC3zkdMJnMEZm8LRiZNoyhLhdLGdHFjfQ2/4TkVZYkAfNel1roxsLRwGzduM42IDCimkU+KYoMiLcsSVTeWH41ItdJqOU4UtkTV/x4kKYEmXSwAC4FFp9Olrmry9ADRs5COQ12WjEYjel3jiKqUotPp4Ps2rVZMt9ui3++y9+AQ17KQQpvdQKuP1cxOW3GbyWxsFMuTjEwUtFs9ssxUTicn56wM1kEL8rzEtn1acZft7QsE/hClNLbjYAlJXlbI0kJKY+Mxny+I2y1s6ZA0h4vpUCqyLKGqBGWZkqRz8mLOaDzED1yUqkDXXNzdZQ9hmOmVYmdrm7W1NVqtFov5AssykkOLxQzHsVld7XN2dsJkMgagrgusxlEXrc3otMyh1qiqII58HEcitKIVtwh8l/EoRdc1nuMuRxhRGBuUmLCpiprZdIZlGS2zVium3Y5pxxGObZawh0cPiaKALDOyLUJogsBnPB4xmQwJg7BBnRlXZaWNtlwUhY377JAg9MmziqIwSEOr2asZvhXmJkLjuob7Ji3TvbqOzXQyZj6fN4eC4s6dD6i3N+lFriF9OhJhCaI4ZHtni6ysGA3n5GVNUeWouiSKI9Ytye7FS3R7K8bJWdoIzDxe9fss5vPGtsXwkuqqRjYcuEdIvkeOynEcL/lF0rbRykwFpDSOwnle4nshpgHUIHRzICiwrYagmVHVClua0bfjOGAZIvn6+npD0k2NOoeUOK5DqxUDqjlMNWme0W13icKIr3/9m6yu9HEcyRNPPsGFrU0jFRb6CAQnx8dotFEnaQjSRVGhldHxc3xD+SjSDNsy5pYIja7NeySFOQQ3Vld49sbTeLakrgqkYxO2QjbEBr04JHZtsvmUxbTGtQ33Zn19nX6vR5ZXuEcOuzvbnJydY1k2WVFSK02SGj+sSle0goAsL5nOp9jSQTo+ljRdtbl/jIhyWRvvtE5s9i6qrMmSFFVVOMICzD2xtblBnWfcty3acQyW4Gw4RGujqRlGMePpjHqRmN1lVVHVtVEqdxyj3SgwquoNr1ArjWi8zGzLwbNdhDajtzBsE4YhJ8fn9Pv9hrck+eCDm4ymOegaP3SoioK8KNBC0u+v0uv1WCxSxqPZEmVntBRtEI0jL2bXF4eRAZM0JFxLmt20aH4m8HyU6zRajwZMoRudT601URRhWZbRjlRmb5skCUVV4kgHjTkLZVNIfjfxfZ2kXnzuWT758kfx/ZDXXnuds9Nz8rRka2ObMAjJG2txp2H3PyKaTSYTev22kZXPM555+gbtqMvZyYRkVjIYDHBtn6qsmc6nvPnmm5ycn1AUFb3egCRJCcMWL77wEisraxweHnL79h327+9hCZvDh8d8/WuvMh5NWVlZZTDwybOMsjB+RgJjXy1tj0qZi6suMjzPYXXQJc3Hze7fePE4jqLrBezsbKPZ5PTkhIuXd8D1eOLJp1hdG3Dz5ru8/vq3+OpXv4y0JFEUs76+TqcdYzuCdjti/+A+337jdWbTKXErYG1tjWtPXDYQXstGaBvbgk4rMpIowtila13Sbod8+od+gHanxenpMXfv3uG9995nddBna+sCUdji7t37jM7GjM9GhF7Ax17+ONeuXmUyGXP33geMRydGYqfMGA7PDMm2MEkxFF7jaVMaMd12SJ6lDdy5xdragCtXLrG1tY2UkpPTY0ajCVVV4XnGI6rf7+G4xoNqPBpxcnqMKkvKMicMPaQ0TqudToeiKIy4Zzuk1W5zPjonboVcu3KBG9d+hDJZkCYLHh4ecnh6znA0YbEo8IKI3toKlicJXR/Lc9HaQtqAFhRZQp4tiKOYW+/e5MH9B/zIj/yxJfzeljYIlpyoujYeZi+99NLSmsW27T+g3AFa1abrsh2qusAWhtwqLFPoOI7ZGxRViev6xt9MK3MIaDOW6XZ7XL/xDGVeI7C5J+5yenqMVka8uNNpEXg+J6dnBkCgFNPZjK3NNd5++20WixlFXbK2vcMHH9zi9PiYQb+DZdtGokortKpJkrmRHatqsjRtri0DREBD4PuGUFznuJbFdDjkpWd/gJ/6ic/QbUf43iPuIly8tEtR9KAsUEXGxvYGa4MuZZrx4N4D3nrrTTY2NgkDY0WysbnNePIN6rqi3YopGjNIC0EYhIYELASe2yMMYspKM53NyZI5ojEzlNJAvOtKY3suaE2ZZkSBg2cHoMy479Z77zAbnmEpxeVLF9hYW8UPAwaDHo4jub13Fz9J0MICS1DpGulYCFtSVNUS4ba5sc7uhR1e/9a3WGQpnucZUWdh4bg+rY5ACIunn32GZFHgeRFPXX8K27aZTiYcHg1Y3xxw+PCAd26+xQcf3GE+XyAsi/6gx87WNrYbUBQl1ApbSMq6xLZkYzMPRWXWE67tmHvINnu1ShvUomhWCgoDkjDjQCOdFAQBKysrLBYLRqMReW683OqqRlWG/D9bLAygomN4llWDMi3y4rs657+vk9TuzgaDwYC11U1Oj08Yno2oqoooihGWxLYEsmxa4KrCcR08IcnSBbZluq66qlkZ9MmTktkkJV0YaQ9pOczKOYs0IctzhsPRUoMsz2viqMXOzgWeffZ5bt68yVtvvsPp2RDbdkiSlL29Q3w/pttdAQR5nlEWFYHvGUi3WyNljR9qLDtDC3A8m5ZtwUwhLLPvsKREygJpW6yuxEY8UlZI16O/tmF2IY7F3r27TEfnlJlxF27Fbf7f5P3Zj6Zpet6J/Z533759iy0jcqktq7q72NULLbFJSRyCFOnRaBtgCMsn0oEOBtB/IEHQiQVIMqDlQAc6sCXbOjAGkMaaRTMyRqQgstlrVVfXlpWZlUvs8e3vvj8+eL4MtqSx3fQQsNt6gURmRkRGRMb3fe/93Pd9Xb+rqQravQltXdA2BbQVy/kVZVnS7XbZm47oDwa3QXBtDaYh0IWBZRrkWY7vBpRViW1L7tyZsrc/YzBwqeuUR599jKFrzKZj+r0xz54+I40z8qzAc23unRzxzttv8OLFc549+4wiT3bZXwVJGmNZKj20aUt0HYoyxTR1dF1iOzptKzAtgSE1+oOAvb0x/X5nRxE3aNuassrwDBfPt/EDZ+d+r8nyhCQJd6fKjN5OFut5Nvv7M25urikK5euYzsZUdYbr2fRHfd75uXd5+eRzri9LVtsty5Viy6VZxXA8xfVNdEtg2DqBbdHW0JQZhmkjmpK2zND7HaJow8XZC0VMUPYYdF2xCTVN3BYpy7I4OTnZUft34pAdTVq2LW3bqK5LqH0hqEW8ZEeb19SptGlabMtVKtW63gliagQatu0xGlmcHN/j5YtzlvMFy+WcqlLgzyB4dYLWd+NSSV7mBP0BlxdntLLh6PgOWZawXq+I44j9/X3KqqLR2eVaVZRFRl2VSNnQNi2iVp4v1eGCaaoE2aaosYVAFgUHkwlvvfYAyzHRdLXT0IQqErbo0GQZeVQRaAG2PmB9dUOWpVxeXKBJwXS2p5RjwwEd3+OiabAME8e0dmmzLaamYekGogXN0ul0O8RRQtRUtEWGadpQ58hGLfVl22B1A5UbVeZ4lo5rK2JG2dZsVzdodUHP7zIZT+gGPsPxCD92uL6+JElyKinRLZtaShqkon/vBAv2DiHm+R4n9+7x9NlTWiF3GWMqI0rTdByvg6FZTKd7zG9W6LpJr+vh+R6Oa9JScny8x4thl8X8iidPvqCtFbvTdz263S5F0UDzirOpfHpCFxi6vvOG7iwCukngK0yTroPeKFUuDTRSIpF4ro1tqb2bSpRWgiVN09hsNryKj29qlS4uhCCN1WjZ0HVKoKkb5Ysr/yMoUr5rUOYRjz6d8/TJI4oio20qwnBLKzUsz97JJDXu3bvH1dUVSRKyf7BHlmbohiDIbaqiACk5PNjDdRLmN0vaWlEMbMeh3xtg2y7D4ZDpdMrLl6d89avvMRyOeP78OWVZ8t57X2PQG3B+fs7bb7+D53lkWcZ3v/tdfvVXf21HrzAxzBbHFmhaTlXnGFaOEBXCAIkgLyKKYs2rpN+yqrDMGqFB2yQEfgff09jGG26uK7ZhiOv4hJsllxcLDvZqFaBo6UThipPjGVla0LYFvZ5HmiRMxlPeePMNfvEXf5HLi0tmswFRlPLZJ5/zn/2pX6PMay4vz3j86BOWy3OKMkGS8uL5x/i+pMi3jIY+f+o//VV++7e/zUcffsDrr72FY5s0tYVGQ90UeK7Bsy8+5er6EtsEZMX52QuSLOfgYEaSRLjejLLMadqKfj9gG24QdcN40iNLDSWGsF0ePLjPe1/9Oi9envLRxx9ycXFGWeUMhl1GwxF1U1AUqeqOq4xeL2A46nF5ds58MWd/b0pRltiOSafrM18oc3KWZ2y3a1zPQtMky9WS3/ndf4tjaCzWS+bLG87Ozji5ew/H8wm6HmWZIesCLEst1puWtpbUdQVtQ55s+Z/+m2/zwQc/YrXa8NGPfkh3MGWyd4fhbJ+6VjlkURTSNA3X19ccHx8zGo12GT5qqa3rGlgKwisQaDvD5KtxZislUqgRmq4ZaOYrw6ZESIFpOCouRWjK7Ny2HBze4Rd+4RfodgJMy+CzTz/kyZMnXF+fYxoGw9GQJM6QUoUXRkmMbpi4bqD8VG3L//o3fo27J8c8+vwRz56/3J2yBchW2Rh2ya9SU+gnYydX16RHWeRYmo7vOCTbNV/7ytuc7M0w2xqSkNYR1E1OlidcXJ3R7fnYpoHe1ni2Ca2kqApaoKxKXjx/weX5JY7rcP/ufQ729wHBehsxGgywLZuyqpgvF2igUnMlaFKSJTlVmqG3kp5nk2fNbl9oKBtAkasRYF0imhbTsxWFpcjQZE20WePqOhojOp7F4WxKszdFNzQ++PRjainJyoKkrOkMOlRNSVlXRHHEaDymP+ihCdislywXC7qDIQcHh8i6oWwkum4jZUORlwwGI8AgimKyIuWL54+5vrkkirb4rsv86oZer8u7X37I6fkZVa3+XZ4VrJZbfM+n6lYkcYrvelS1ElwYpo6uCbpdl4ODPb72tfe4vDwnjELyLFcjTtum1wmQwGq1YrVeUe+Se7fb7a1VJ8/zW+GEbCVt9eoQJQijiPOzs13enBp5Z9l/BFEdpqaQOpcXpyznF5S1QEqoSkktwbCV61mzdIaDIdv1hnC7wvc8rq/XOLZBXVVKnWNbmLqDbE1ePLtACAPH0UFThHUFjR0ym00pioI7d45wHIfHj58gpeT45AjZNLuAuHvkeUEUhSwWC6oqx7KVy9t0WoSRI2UFWooQBa0sEDToCBBbymqNoRu7/J0QwygVy00UWEaLrlXINifcxsRxTFOl5PmWNI6pKhUuKCgpixjDhKYpQNb4nk1d53Q6Lnt7Y05ODsnzGNs2WK82fC5KvvTOa2RJjmxjnj7OCcMFbVtQ5DqL1UviZIymtdh2w/Gdu/x3/+2/pMwr7p2coIkGQ6sxzZamrdG0kijcst3cUNcpuvCJww1V29Lt96jqVKmsbI0o3uJ4Ftuo2flIbAyzwXU8XMej1xty7/4JZ+enLBbXxPGGsswYDPr0Bx0uLi6Q9GmlYhs6roPrWOgGJHGIFA2WpTKwTFNgWTphWCClUjK6gY1uCKI45MVpxngwICtyyionjkNsU8dyHHrdAKiRbQltCVLR3Osyp0XtQdsq49kXjzh98ZQir7m8OKOsJV7QZzTbRzcM0jQliiLyPOfFixfce/AAv9OhrRV7sG0ahKZ2LwKBpL2V2qtLogltlz/comkqeVjsgnyEEBi79k2gKT+d1Oj3h7i2Q5rEvHz5jE8/hcVizjZUCs1Bf4hu6siyuoXgappirwldda9vP3wTAVxcnO1YcA2abtLQglRcuFdy77ZR/x9TN5BaTVvVam8nG8ym5nAyYhT4UOZQFghdoFNSVgk3i0tq2acTePR8H90xqJIcwzLQDY2mqkiSgqoo8XyfIssY9ftUVU2a5GiixRuPiFMFba6qGl0IyiKnkC11VlDnKorGM3VEpcZapiZwHEuxNKsSQ0qKvMYaakohJySaUCP6qkigLrEMA9+x8Todsiy9DfZrDYOiqenbFlXVkNcVaZ7tvEWKspImMVEcMppOCYKOenR3eUxIDSkVv7Ioa9Isp0oTLi7PuZlfUFYZZeEThVs81+bo6ICb+TVVWdM2DU3VkmeFYkyaJomU2La6n9VVhWnaO66mYDQccHhwwPX1BWWhdnmaUM8+z3VBCM7PzgiTGKEpZuTLly9vE7Ity7pFIIkW5UUD/MCnrhvCOCLYdV0ShZ/6aa6f6SJVlRGaEMymPf7IH/kaH3/yhPOLBY7rYTs+Qa9PKwXXVzd859vfxjAMAs9nvYsHGA37GJrGjz54n8nkAMsMEEJjMOhR1aoNVm5+Aylrrq8vSNMYwzC5ur5kf3+PvT0lUlguV8z2xvzy5I9xcnwXy3KYTifczK9ANKRZiBAtjdZQpQmaqLFNia7VmHaLbDLyPEWIGseuKfKMrKxo6hLHanFcDV2r+O3f/h/wXI9NHPPi8pLT0zPeeP0tXnttj//yv/zztI0kz0rancS4yGKyLCLPY9I05Jf/xC9xdX3FZr0gjjf4vsPpy6dcXlwQBAZVGeI6FkdHQ7761Ycslj0812C2P+beawdcnD9G1w16vSGer/FLv/Qenjtgf3akvk62xvMEtmPy8uUjDF2jbTOSZINtGbiuBZWCZL4CxjZtTdOUxPGWyWSE73ssltfYtk5ZZlRVhzvHd4jTDU2rTMt1U2GYGnG85excMptOMUyNvFC4K9PUWCyvCcM1rmeohNPZjDgJ+fDH72NbNogW09LI8og4WzPod0H6gMX5R6cUaUxTlpiWzsXlKa7bpW5qOh2P+eU54+ketuPT5DVtUbJdbXcMuJZe4HHv5Ii2Ebi2iaErs2bb1ORVxaNHn/Hpp5+qrKeq4ps///MUWUaapvT6fbRbmXC7+/Xqzz8J5ZS73zSUVPLV28XuY3/f3GxbLk3dUBUVQtM5Ob7Lt771i7RNwY8/+iGrzZKsSGiWarzFzvRpGCZNXXN6dk6W5Xzzm1/F82wELf1eh//tX/jf8Oz5C548fcrzF6dKkl1VVFWN7Tq4rvJgbfIc33HRBOR5hufZ/MI3v8bx/j7pZs2TTz5mOP55DMOiLkuyLKSqM5abCqENMAzJ1eVLmrRkdT7n9OylyrPCpLUrNE3nox9/iGnZrLYhT54+w7RdBTS2bR6+8SafPvqMPG1uTbyB59D1PKqqJI9CZF1xsD/j7skJuqYrcn5R0GiQVgWmqfxSrqNztH9AWzYcTA94++E7FHnJh++/TysESVmq3bNtI20bo9OyCreUdcF0OuTOycmtLcS2TbZhyGw2VXLvNFV7RE1H09RB1RHazt7g0e31Kcuc3iAgy0OqqsBA4+LFBVmakmYpeZ7x5MkzmrpmMZ/vfI8qhsP3fdqmuQ0qzbJURb9Mxtw9OWE4HDAZj0l3e6ROt8NmR9RxXDXRCKOYbRyx3W556623SJJEYZB2RUoqOjXUoBsGnW4HhCDoBEq+bigAsCklP831M12kZJ2gOw7djs1bb9zn5ekZUKIbHr1+gOf7JJkyl52efsHdu3cZDLvE8YY0zW6p28+/eIbrdOgPlLJK/TAbkixXJGRNIDTJYnlDGG44unO8O8n36XS7zKZTwmhLf9BlMp7iuh6u49MfdLCfarStetE5rkVRlJRVgRANAoFltphS3byqMkeIBttRHVSaxSAlhiXxPAOh1Xz++ce89trrxEnEzfULnj//gqPDGffuHvHNr7/H8+dnpElOnlesN1uyLKKpVadWlRlvvP6APItVQOJ2jW3qbLcLrq5OGY+mlEVMdzRmbzYg2vbpdBrG4x6DUY+9wxH/9vlnOLbHZNLH1BsePLjDZHSI7/X59NMfo2klva6FYTosF+cMhwOKPKapC5pKdYStEKR5QtMU5EWqsq4snSxLODzcx/MdVqsLJpMBeV6g6TquZxPHIXVdouliR6swyPKMKM557bX7O8qBRG0AWlbrJXVd4vsu6/WKvb0ZeZ5ydXXF4eHhLpBNiQ/CcI1laniORV5KvnjxDOoax9Tp+T6b7QrZoopbUxOulwSuj60ZyKpBaxri7Yb5/IbJbErHd5iMBtQNu0RkHcPUFdsQycXFBY8ePWI+nzMYDCiKgrpRNIZOp6NeyMhdJo/6N+ySU3+iGvGThej33/cTBWp3ItdMCyFa8iTBMDT6/QH379/n9PQep2dPCaM1mzAhF5UiV8gWmlp1brpOGIWs1ls26zWWNVa2Adfhl3/5j/Pd732f+eKGqiywzAFJoniMnu7iBx7x9Q15XhC4DpquUeQZsta5f3zCuNejSBJW1w1NliJGNhqa6hDqnLSq8TyLoONwvbgm2ySkq5AojvF9D6MtqAuBZpi8ePacTq9PkuWcn14ymo4JiRSC6OCAJ0+e0NaNGtnVKpBv0OuRZxnnm3N0TTDodnj97gmylaxvrrEMjRqJYanfK9FiGRrjYR9Zthwc7HG0v8/jz59wdvqCME6xfB9DN9Bti9Y2sWyb89WKulXd8WQ6UY+gUL/iOFRGfFB7Gk1H15QaGM1AF6qDNm1HkWJMDa9jU9Wpuo80Et/yCHdWlBcvX3L68oI4KYjjhLpqKIoay9LwXJfNZqu63FaNgA1NEHg+49EYz/UYDocq9LU2GI1GxElCnmaYpsnB4QGuH5Gfljg7Sjr8Psz6VTJ0U9YIAxzbVoGkho5u6Gw2G+XPsyya/xgk6I5rYzsWCJumNXjnnbcYTfZYbxK63QHPXlxwfbNEtjXj0YA8i7m6VCciTcBiPqeuVMaQrmu7U62gReJ6Li2STRhxcXWOZ9n4gWJXLddz7HOTMNoyGAz49LOPub66pt/vMZtNyIsUyzIpyoy6LvH8Lqals92ueXn+Ass2CTwT1xEICpaLMyyzYTbtYZmCtlFqqW6gPAjdIKCuSi4vzugEPi+ePyNKY5Ik5Fvf+nmOjvbpdH0c18QwBa5n0R/0uXfvhH/92/8G27bY25syHA74+OMfo5Q5Gr/1W/8aIWCzuaGqCmxLFcJHjz8iTyK6fReJQVXH1I0OssfRwRjX8zGNlufPH6ELF0FBVUY4tuT4eIKuQ1UXFEWOaUpee+2Yu3fv8vmjZ8yvb0gb5QmK4nAXzeFiOwaDQZ/tdsViWVIUWxxHxV1nacr3vvdd2kZwfnZJ01QMhgOQ4pa4cXl5zmw2w3VV5IPv+9zcqHDHbq9DmiToumAyGXNwsE8cR4RheEtgtywdXVd4Htsy6fcHGMB0POTtN17j9373d9EA17EIN2sc22G9uEEXgk5vRFWn9HsdbMdEaBqj0UgZNoXOm2+9gTeYYVj+rR9KIBj0+/i+z1tvvYXnuiRxfJvz9MrL8vvXTxagV38HZSkWu9nQT779Jw2bQLODgNoOyAaQ9IZD3vv6N0A0fPCj7/PRxz8m3MYYpoVlGYhGY7vZUlYllqWSZ/+r/+r/xq/+6i9xcHjAN77+NcajEffv3+Ps/JyPP/4U01Syd6OslQVCNzAMHd9zaaoaz7YxfR/PsTB0jTxLcUyJbQXUZUqbGKCVjIZ9vuQ9ZLldYxiaOgzu7yNGLWf1c+bmJYcHR6TriLZpCTodojimbiVxFNM0u0BNS+UgffLJxxR5zrDfp2kaFvMb0romCVMsQ+fe3RP6vQ73Tu4wHg4Zj4ZYusY63LIMN3z2xRPuP7hPmqY8e6zUjbZhs1zMuTg/w3VdfM9judpwdnVNEsWI1kU2aioS+A6aIej1OiBgvVkpSoeQtFKwWCypGklWNMz2jul0x1iOitdpd5DXtlEio1YqLJjj+AhNUucFlqGEHaZlMBwMEJpGkqTkeYuuq9iaeke9kVKFuaqQ0ZamVWq7Tz/+GMOoKctc8Qvrii+ePiHNUizLJk8TPn/0iFaqn+2g3+fs/PyWOCF2+8921/kb+k6FKqUifQjBeDiibmrKulJBkj/F9TNdpDTDRtMsbMcnKxqOTg7xuj3Oz6+xbY9PPw9ZrC7o93u4tk6ex4Rxje+7CF2yjTa0osLrdKjbhqaRhHGK7fg4rk+S19R1wTbaYM1U3HGd12RZiLxuiZKIKA2J45jNZsM9cQ+MljIvSEtBKxuE1mBZJkIK8qTi8vSS4ahLU5g0vg6UfP74MYOBh2a0DAdd6qrEsQxsy6ZuJZbtUBQxm02E5wTMr1aswi15XvPGg4cEQZeO38PULWQjsUyLQa/HZDqjLDM8z0c3XJBwfnHKwf4Bug4ffPAhmq6ha5LRaLi737UsludsVje8t/8lsrxBaBVltaWVfUYTb0dUzlhtrhgNplhun7pOMZ2YrufiuiZxVrPelmhC0p9YBP6Up8+fs4k25HVJt9OlzHMcx8EyTAa9Ho5lkeYRYbShrnKybIBhONRNzRdffEES50RhgpQ6nuvStsrfJaVUYWyjkfLmmOatG14KSafnU9Y5UmvxAoe9vRmfffKpUj826vHRdQ1NVzd2IZTU1ndcJpM97r/2kN/99vcVL9HQqYucqsjJs5ii7NAxx9QGaB0Lv+uSJSVOp4vlR0hNZ3JwiNMdUTUaSVriOAa2aeCYJt1OwNtvvYVjO6RprkCvrUDfUavFbackQTTcHr9f/akVCCl+v9sSr8aDt68ShK4hdkVMMw2aWiI0A9fscP/1h8Rpwny54tkXL4k3BbphKU9LC0WRqV2jKfADm+//4Ad89b13eOvhW+wfHtDpBQrnM50p83yrvgY7oklZNximA7uTuyYk6HLHiVShjbZpohtQ5gl1aaKbMOh0CboBTas4gZbpEHh9TEcQBlscy6fvdLGlSduCHwQgTDZhqDpHTSUeKwai4PrmCqlJDNvE0Ryurxpk1RBHJa7j8frrI/ZnEw72Dhj2h0zGM2UnublGnuvoPONo74jtZsWL+jHb1ZZBb0CaZizWa4bDMZbjAJL59Q2VlFiWTitbirrEd20s18K1TaU+LVI2cYQTBFR1w3q7VT8rW8Gu/U4PtJa2lVSNAipXTaFUk7LFtlSQpGEZlAgMW8OoDLQWOt2u2hkVKszQcQWGbtK0krpp0TUFh9UtDSFrhCao84zNeskH3/8h09kU1/dopQqpNEwToRkUtUoVMEyTTlcRevIkwfN8DFODFvW8VdAlDF1XBwVdp6wKDCDwXTXyaxta8R/BuG+9iajqiunsgBenF2yjlCjOuLpe8ou/9McZjPvUz54Q5zHdTpdGtGBITFeFpjmui2FbKopCQEuD0GEbbagahVQyLI2WmijZAhpNqebtdV1QlQVhuKYoSu7du8e9eyc0rXoCllVBWze0smazWXFxfsFiMVdPtqqkqQVxnLHZ3uC6HqPxCM/zefrsGYamDI6+76PrOk+fPqMsKwb9IbPJPlGYInWd49Fr3L13VwF2y4IsSxmPh+qFs7zh7Pwl0CA0FTp3c3PNw4dvE4Yh6+WSXj+gbVsC36XT8cmzmBcvnpLnCZ5vYTs6+/sT0nwLlLiuznIZomkGtuVz7+4+TSPIshVNA7pREqcxltNjNPaYL1/S649JsjXzxQbbMXj3575CQ8N6tbkdDbyCrBqGYDzpY9n3KKtUgU5bFah2cXGBwCSJVThd20o6nR55rkjub731JqapPFJJkqjF8A5gq+ka48mYPM84vzgjjkMMQycIfDabDev1kr2jA1zXoa0bzs8viDZb6iDgyjD5ve98l26vz6jXYzAYMJ5MMWwb27ZBSuo8x7RNdXOWOo6jcXFxpYZuUqNpGrI4RpgerudRFBVJnJAkCaZlcefoCNNU0FfbcRFCyYTVYugnitTtJX7/T/LVWE+ovdS/fwl28z7FjHvF59M0RVcRrcbRnRO+/vVv4jo2//a3f4fNJiRLFMy33++T5wl1XZJmKUJIPvvsMw4P9/nVP/lreJ7PweEBB/v7yl/VKOiv4zikeaHEQqaBALIkQm9r3nhwj/cevsX9+/eo85jD/RH9ns2LZ19w37lPbzZANJK2qRl0u2imgaVbdDs9THROTu4ikobkZs1mvqJpJMcnd3nzrXfIioKr+Q3ed77L8xenbLchvUEf27UId2rKwPV55513eOPBa8hGkiUZjmPT8WwG/R7djs/jzx8xv7khLXLqsuDk6Ij92ZSD6Zhxt8fp6TlhqBSap2cvuXvvHkVRsFwu2N+b4LUNqzRRpmnbpMxyWhqSJKXc4YY8P2A8mdDpdHj/Rz/CdhxGo9Ht80o2DXX9KvzTUCMz3UDTWkSruiCkxNB1fN9FtipYs9vt0e/3sawbqkrZHMqyxDRsXNejKspdlE1FW+eYJjiuw3A44Ohgxjd//pu0SFbrNZ1uF03XqdtGwQaEGgUryLMCxr7Cshm6gbDV21vTwtJU7lkQBJhmH8syuXfvLvP5nPn8hsury5/qPv8zXaTirCLLM7xuycX1QtGm44TtNmYwHmH7rkKT1JWiCNQGdQ2GaSnPlOvuMoJqNNNEEy2a2bC5mVNUDabtohmCpm3IckW4FhLatiYtctqmRjbqxjCZjBlPx7St8otkaYJsW+q2YrNd8eSLz9msN9y7d0RZFjSOTtOoQLtuR8msWynYbEIELZ5tU5Y1gd/h7PwK0zCYjGYcHt3h+fNTNMtk7/iQvb09FoslcRSTpCGdbkDdlKxWEY8ePUaImk7HZrVaMZ9f8J/9qV/nO9/9DovFBcPBkDRL8QNrJ1JIuL6OMXTo9F0MXamKhJZT1jWGCWWV0jSKirG/P2Y+X5EmGwzDYjjyOLtYUNYw7fi0MsN1dbIk5+J8gW0PuXv3NaSUPHr0OW3TkGc5ge/S6wSYlsZo3KfT9cjzhB+uVqo5kBBuNuiaRZ5XxFGGlALbtGlaieepOfqrULYsywjDkLZt6XZ9tTw3DdIkYbFYsF6ueP3Ba2q5LQTrzYY333mIrmskUcx6vaLKy11jKYk2W46ODvF9H9fzmEynVE2DaSlfVpYkBP0BpmshG4HEBClp6xrHdajKEk0a6JqN7RhE8/ltMZ3MpvT7A8q6UTRx2/oJBd8fziXlrlY1LXXV7MYzQj13pWQynWAaAscyOXt5weePHpMlOXmeq0V7W9M0NXme4Tgmp6dnnJ9fMBgM1c02UDEMoKCyaGqJXjWvyAZKYZjnGaZo2Nub8vbbD5n1ehSpzd7elH7X5gfvP2UWTehM+ugtNFWF53u31HLD09CkjrNvYxeCR9FHlEWB0Ax83+f4/j0s12VvseRmseTDjx6T5xlBt0MQdLi+npOlBa7l8ODBfX7hW3+UpqqZ39wwv57j2ya9ToDnuVydnzJfLCirCt0yOdibMhr06PW6TCcjLNvk88dP2G4vSdIU3dCwbJPReMh8vUQ0klWSURU1lmUoT6aQpElKXTfYrofv+ziOx2A0pq5ruo5Lr9fHth1FD2kUoaSqSkxTx7ZMNEOArJGyUYVMSoRh4PsBmjAIwwTXdRUvzzQpq2KXJJDhexqdjrkLIC12ik9JU6vcuiAIODg44GvvfY0kT3n67AtMR0GUN+GWFoVRz/LsNi250wnI8+I2T6rdpXfLpr0tUiq81GUwUHtQ0zRppTKL/zTXz3SRsr0+fm+IZjoMxlOE6SHsGM12uZzf4HcCju+fcH11TSskhmUiDJ2iqWlKgd+1EIbJ5dk5nU4X07JBmHgdH9AoygKVBSYIw1CdFoS+i2BoaeuaplZGyzRLuLy8II5ite/YhsojYugc7O2jaWDZOkkSkWYxWeoyGPj0un2url6w3s4JfAvLdqiKnKaFLC8ZDh1My2Y23ePozjFRmBIEPQbjCeP9MbKVvHjxnCIvuHvvHkHH4+LyjM12SStz+gMfKQt6PZfXXjumrBN83+TOnRn9wQDf8wgCFTwn20aJnZuKts3ZbpdcX4f0+i6DYYc829IJLNpWoGk1FxfPqet2Fz8gCToGb7x5jGEKHFfwla+8hWUFzG8yhsMus8kJQeCzWm2p65IsjdW/RRKGW+4c72Maal945+iIJI7I85LlcoOuiV1EgEPgdXZZWzO8IMCxHXUS7gYMhn2mswlXl1fczG9omoY0S8jXGe5uyWsYOm+8+TrLhYrmruqCm5tr9ZwyLWazPXzXpR90kE3L+emZitJIU+IkQSLp9wfolq2iVV6J7ySgCdqi4uBgj44fYDkuVVngWB6GaRJFW37327/L9c0VpqmAnpdXl3R7fQzLvvVI/aRf6n/pJYSgLmvaRmJZ9i4ssaFtC0xHGaot22EwHPInfvmX6Xb6/PjHH/P5o88RmobtOLfAZEN4xFHM+fmFEqAcHeK6xm2Kct0KikplexmGgWEaapdSFTiujWVpjKcjev0uq/WSPNow6NoMelN0XSNLUoo4wRt0MYSusp6aVgkdTBOKhiRNWa1WVGVFv9vFsNUI6Yff+x7Hd+/h+R5vvPEGb77xiLPzM+qqot8f8OUvf5k4itGAosg5OztlMhrheQ7XN5ckmxXh8po7h4esl0s0KRn0ujiBz/s//hApoD/sYxg6D995m0ZKmrblxfNTvvv97zKb7tHpdZhMp8RXN5i6hqFBmZZggI6G4/j4QQ8pDPKiYrvZkuc5y+WKozsnHB3dwQuUcAahDLeapsbQKp+tYL64IQ5XxOGWLEsAWFzeUFctWVZyeTUnSVIM0yDwTdjF7shWkGUZ5Q5/5boeumhIkhDXcZhNZ5ycnNw26r7vU1QVy9WK9XrNcr1SobLhVlFTjB2ounkVOKrfPt949XLYoZMOD4/Y39/DspR3Vd/tsX6a62e6SPn+AD/wSLKUXn9Eg0HRSKSmEyeKiTfbmymDqC6wTYemaWklFGWJadrouslmG1PXkn5/iBd42K5HlpWkeYZuGHiuo6TSTYvnOMgWLNNW8QaFojEkScp8seLZs2fkWcpiPieJY3rdDq7rIHaptVmWsdmsyDID1zlgMhvw+ecRm9M5ncDhy195G2EJmqambWssyyMIenR7Q2YHd/nso4/p9gZ0el0mszFVXXP68gzLMjFNgyBQyJIoXlPVGV3Hx9AFum7hB/tAhWVrDIYdju8c0O318BxbCQ50A9PQieMtm82cs7NnnJ0+x7Hv0gkmZHlI4LvouklRlGw2G2zL2aWB2niewd7+PkkakeYp7777kPUqJQovGY36HB3tE0cVdV1Q1yVFkdHt9NB1yLIY31e0BNPQGI0GHB/f4eryhsVihWEYKsPLcAiCDqPRhNF4wv7hIbZtc319zWDQx7ZtptMJhqETxSFJHFGVBavVkv3ZnqKqOzb7+3tqcZ9npNmY86sL2ral3+1xcueY8WBINwiItiHXl1eURYnWNsRpQlGWTH0fw7KpmxZZKnCmUmwpNed4PGI8HFFWLWne0Da73LJtzmeffMpmvbmNdL+6vMIPuphwexKF33+x/y++hKb4bC04nk1d7pbWQmJrikataRr9wYDpZI8kybm4uEbXv6CqGzTdwLJt6kax61arhPl8wfX1NfsHB4CGaTp0Ol22UYpsa5pG5Q4peG5GVRX4noOtS3zfpdfvMD99RrheUBwM0Q3lpSrznCSMcDuKgKFpOm1RAhpYJlJXuVd5loOUKtPNcajrmk8ffY7tuty//4C9vT2Oj49ZLBdIoNvtMhwOubq8JNzJ/lerJYOeEk0tFtdcPH9OEW6p85IkTrBti36vR3cw4LNPn+P4PmEc0h8N+MV7d1lt1lxcXiF0jR+8/0P+2B/740wnM0aTEV9cXmObBoamkWYNmqPT1hLf9RmMRuiGSVU3JIlCb203W4Uy29tDNzxkqyOlBjTIVj1/WtFSFTmLmyuury65vjpjvV4hJESbiKpU48E0U6R3y7TANJTQQdepSqUeLTLFVfQ8F0FDlESYlsV4Mub4+GRnIajw/eC2SKVpShiGuJ5HWRYkaYomFG6rqlQmXdPUu3GkOmjqmipgpqlwS8fHxyRJrGJoNP3/9XP2J66f6SKVJjWbzTVhHOP6HnUlAQ1dN4nimNVqQRRtCHyPoNMhDGOSOFFgR4lyRTfgWD51BVlWImVKWSoYou9pFGVJluYgNVzHYdAfsFlvANB1k07HxXUcFosli2VIluXomo7t+CrO2TRYrze7FFqTw4MD0iyiKjMWywVVnTEeTfADB9vScJ2A5WrB5aUiIx8d3qWVGnGccXV5xfnFFQLIy5q0yjm/OEfTVCTGs2fP6fW6dDo+Jyd3sB2DJ08+p9ftqQC8bpfhoIuh36WpVQprmqbonqkW+Y67k6U2VGVBU1ccHR4R+AFJnCB0iRf4aEJHCA3HVvNmXTeRrZrtR+EWwzKZjidK3mpojIZ9ws2ajz/+iChU8EvbNBmPhoxGIxzXARrKPGM2PeDwaA/XUcm+11eXnJ+eUeYFR0czXDegE/Q4ObnL+cUlT58+xXFsqqrCcWwGgyGapnFzc8PBwQGyrcmzBD/wCTwV2NjtdLi8vOD5s+eEYXjr8QBub15FlhH7HZCSwWCARFJWFdso5KNPPub5i1N1g3Q9BoMx5nxJWVbUdUOaFIAgiRKiOMXvDPnKez9PXRQ0u6yquiyxd5HuP/rRjzBthwevv07X83fx3q9Ufn8IhUqqrqappULVaJqi8MuKplLFytBNdE/5BN/+0pfIsoosK/nwRx+gCRUqWVU1s/19wjCkKCrOzi549+feA8PEtGw8L2C5jmhfdYBC7ECjyhpQFBlvPHydO3cOOLyzTxmteFmn1HVBuFkz7Pcp85z1ckVR17w4f8lgNmIyGTOazpB5Tp2pGPckjri5vmY8GLJ3cARCsP3O9/jud77DJ59+StVKLi8vKMuSFrXTVHlHOVG4JY9D+l2fFy+eEUUh263qEoKgR6fT5fpmTrYJEfo1uu3wy7/8LS5uFHbIufHQTZubmznPT89YbyOyrOL0/JKsqNiGMU2rjMM9P6DTs8jahrQpydKCzSaiFRqz6Ww3ihU0bUtZ1oTbiKqK8Lwuju3vOJw+mq4hm5IsTbm+vGQ+v2K9WhEnIXVZk0YZTS1pW0Ertd0BQVcm6wZA3MYZiZ0STwUYqq9f1zVVWSJQHZTjeazWK7ZhSJZlWKal7ptwG7+h6+a/M+ZrW3lLnDA0HUPTd13ikkePPkfTNN5+5221t9zBo3+a62e6SBVZw2K5ZRttee3NIVW5VjN3oZGnOevFgiyO6Pgek/GEMi1ZVzWao1pVWUswBIZmk+clSZjT1ipQzbFckCVFU5IXJU3d0psMGPRHRGEGEjShYxo23e6Q87Nr6kbQ76txgOsF0NbKUZ7l1E3F0cE+d47v8OLFE6JwzWpVUFc5d+8e0LQBRZHgOB5JknF5OSdLU/KyxrJcpBScn19xdT3Hc12k0NkmCd///o94++03sSyb66tr8jxnMBggRENepJy/PEUe1gwHXQLfwbMtRid3MAyDKIpI4q2Ky3BMfN+hriq2QtBUDUVa8vobd7FtnTyLcD2DwOsAGk0lsQwHz1HijiRJSeMMXTM5PNpnMpwSJjGmbuE5Eo01z589YzGP8HyXwXDEaDxgOFAL1bxISdOY0WjA0dEheZZSVSXzxZzrq0uaHb2+11OPwYMH93n85Amr7fbWo6EI6V3aFs7PT/nWt76F49hcXZzT7arRXb/fp9/rcTO/4eXLFzRNw3Q6xbKs3Q1VslqtSa2EeBPSCQKOD484PX2JMHXiOObq6hqxS3sejSe8/fZXyLM5cZwQhjFRmOI4DovFgjBMme7f4c2338Xd0U1GwwGGEGiaRpTEfPLJJ8z29zm5e1fFGAhtNz75w+mkpJQYhomgIc9LXE/lHLU1lGUKolEUB91AtnD3wWsURcPl+SXvv/9DNEOjahuqumYwHPLs2QvCMGExX/BK3GHbqsOt6zP1GjT0XVRFSbMDPddNyWw25uBwpqYA4SHL6zOyLKEoMqbjMY+efEbZVKR5zueffEr3uof11Z9jPNlDVhVtrojq4Tbk4uKS+3dOODw8Ik5iwijk0ePPkUKgGSpeomkaqqZhvd4wmUwoy4o0TaiLnDCckWcx8+trojjC1Ay8Tg836NG2giSrMNOCbZjylZ97j8f/9T/j9PKK9hrWmwQpYb3eslgnIAU3izVVo5ibQipQbeB5dEcTrtZrqqQlS3O2UYrpKpWsYZg7woikKFQHt92mjEYapulhGRqWrgIwkzIjjiOWiwXr1YosTcjiZEedUVDcupY4brBLQzYADcM2geLW2qASA5Q4RwqJlK1K4N4BY/0gAE0jyRKiKKKua1zXwS89tmGIaao4eF0zdkZec2cMzinLkqZpcC0bqRuUZcn19TVlmWNZJn/0W99SRl7T+I+jSOnC5vjwLkWVMx5NcFyfrEjZhhvlNzlu6HU7KgEWFWseeD6+6zMaThj0BwjNpOv2EXWM0AS6NIg2CbLVsCybYW9MkqaYho3ndnAcn+FgTJ7l6MKgG3QYDcekSUWaFaw3CU2taMpVmWFbOoHvcXh4AMLg/Q8+YLVaUtfVbpZbc3ml0+k4uI5DHCU0jSRNc5IkQ9N0Li6v0RDs7x0ymczw/YAwinhxeopjB8xmh5RlxnK55KOPPmG7XWJZBkHH550vvYPnqaWo5ylmV7ktSdP0VjrfCXzaulGemLKkKis6nS5f+tKX0bWWqlYZN/ObNZqwGAwGOE5AFF0gWw3btqnrhrqSBN4Agc311Qo0QRhlbDc5soWO77M3vYNhGiyWS5CwXCwYDPvoOiRJzOXFOb6v8myKLONwfx/f8cnzhpOTuyqIUhiUeYG9636KoqDf77NYLNTIrt9nMBhwcXGBpoFsVO5XHMesViuQkvFopEYgVcVqrcaJWaYiSDQERZpROQ5lXlDlBdvtBt9z6fe7vPnwIbPDI9qyQUfDtSyuL65Zr9dUVcNbDx9SFiVpnHB5ecPzZ89I05ShgF6vy8OHD/nR+x+QJAmz2QxDN3jzzTfp9Xrqia1pyJ2H5A+jUP2kWtC2bIVJKlW+k2EoXxc01HWr4KPAaDDiG9/8Jh9//BGff/4ZdajC8p4/e4HnOlimzgfv/4g/82e3tA1s12uqsiLLcloJlmNj2YqbZ+g6UhhUDfQHPRzHptUEQa+DbVtcnj1jNb/g7vEhlmUx7A+xApf7d+9RtRVlkpGHEY7joWs6eVFwcX7O4mbBt7/9ezx7cYYX+NRVtSNMWAjDIskyjF08xnq14vr6Bl1XeUbzzZqyLIijjG244cGDu+yNDxj3ZiyWIZ89vcR3NZKyYhklPH55QZKX9IdTeqMeWVawXm9IsgLdUHSINC+plxuyNMV2HY4ODhC6BbpFlOVgGuDaZGnOZrvl6uoaxzARAjzXo9vt0OsPsCwf2/FVh9M05GVGXRbE0YbVcsl2u6YqCgxd3435TcUhMXVM02E4mrJYblivY8qyxjas2+eStqOI6LquCPWArkGWZrx48YKPP/lY5T8JydXNNdvtVtHNKwWDNU0Tw1RYr6rchY9KBRiuKmX+dhyHQa/PZDBE38XPdzpKlFHtEntfjRR/mutnukgZwmTYH9Htd0BXKqWsSLm4PCcvMnzXoOO5nJ6eYRsGtm4QuC6OYTIbT+h1B1Q1BG6XKm+VX6BuibcqBbYb9PG9gLZWJ1HH9jENh07Qoy5UAN1sts9gMODyakVdZ1RVTp6mNE2J0FpkUyGnY2zbQUr45JOPkW2BpikfRVEUzOcLhBjS7U7JchVulyQFYZjRSo35fEVbN3SCAffu3sV1XW7mS05Pzzk8OmQy3iOK13z62cdsNmuWyyumswnvfe1dHj58SFHmODvJ9CuU/nq9ZrFYkOc5hweHCKERbkPyNANUdtTJyRFnp8+Jopooqrm8uIFWJ/D6BIFNtE2p8hbP8xSrrJT43gAancViRacbkIQ5aVIipcB1Pb70zjtKzpolrNdbyqJC02AyHZJuEi4vL+kPOhiGQVHkTCZjDg+Pqcqa4XBCuE1J05yqrjBMJXnOMqU2ur6+pigK2rah0wm4urpEEzDod3EciygOubq6JIkTvvTOO4hW+YpWqyWjyZS2bajKElM3WS4WBJ6HZZjMb64xdJ2qLhmNBmop/+V3KdKMcLEiClM2mw2XFxd4fofXHjwgiWIuzs7J8ozl6po8U1Exvu9zcnyHjz78MbquMx6POb5zwsnde3R6PTRjl7n0B77+fTPvT75LLfg1oaHbAhqo6gZoMG0DYRq0tfJ+lUWlFGfDIV969ys8fPsdTs9e0i7BsmzOzs853N/DMEw++vhjlsslRVmzXq/J8pwkSdANEy9Qo1UhQOiK1da2kuFwsCOug+NYIODm5obl9TmirXjz4RsM+n3cTkBd19ysrqmqmiLLcRw1/iqSlPnNDRcXZ7x89gyv8zn7hweUVaWUbZ6nBCuNSpOuG8l6viHoLBiNhmi6Tprl5EXGYn5Dnqb8r/7IN3nt5C3ibc75+RVn55fszXo0oSR+eUreNnQHPY7vnXD3wT0++eRTttuYJFFGZ9NSPrfVKmS7TXjtjWOGwxH2LpzUc1xMI6AwVF5do8P1zZx+ENDtdnFctZIIuj1cp0E3XIQwqcqSIlZirG24Yr1asV6tQdZoO3qJZVqKiqFbDIcTZnsHPH32Ek27pKoKTKu97czFrRhD5ZC1O5dDURScvnzJp4Mu/UEfzdC5vr5hvV4TxZFKGzaUtaBpG7I0I4piLMve5UIJpGwxdAvHcen1ehwfH9Pr9YjjGMsyGQz6JInKcCtLZSP5qe7z/x+8Gv5/5nLcHt3emG4v4OLyJav1nPVmSZrHHB7u4zs6Hd+m1+lgmRZNVZKEIbQthtDUziDMMBA0RYnYPXiHswNMy0ZUkIYJnuXQ73fQNF05yZuWwPXQhM5qvmS1WBOtQ6hq6qrFtRzKQqAJSS00TN3EAEwNkiTBtg0MS4XrJcmWVkhW2wipaTRNxXYTcXR4B/c1jywtMS2XqIi5nq/YPzymliV1KzBMj8PDu6xWkTqtBEOaOkcMlafz8adPuXPvENuz0YQgSmK251tF0zYtju8ck2UZdd0yn6/QNYHl2JR5SpZnJEmiYiryEiFsDg7ukiQJZ+dzOkGOpvms1gl1YxP4Aa5jsl4lNG3NfL5iuU4I/P4uO6bh4OBQnQyLnNFwAtIgCAKapmGzXhIEHXzP3xUunbKsCALl31ivQj766COytKSuW87PLzi/OCPJQizH5v5rd8mrDF1TpseiyrDd3RiiKGgj0G0TN/Co25pKqiJn2w5uz+P0+XM8P6DrdrAMB9lKNITaIzUNaZbS1BXXl9f86P0f0TZqGV2XFSA4Pj6g1+vQtnD68gW267J3eMDXdIttnPHp48cU2Exnh2RZyXa7xTRNBv0Bg+EQx7Zodxk7lmXf3lCUB0WdgNumRQhdEdBbhT5SQFnlkRKvTLyaSsBVplZl7dU0HaSkyCu03ThRjXxa2rKhbSW6ZmHZBhpChWEKyS/+4h+laQp+8P3v8t3v/B6dbkArYBtHSAn/h//j/xnX99hsQhpa9g9mhGGikpc1bSeDrqnKCrE7/ChVV8sm3rJ3eEC8eg1X1zh7eY7vebSyZXqghC00Gskm4cXnzzjcL+l3+viWx2Qw5mowIE3S3eh4RppX3CyXGFmB26mYr1cUZUmrQW8QsAk3tLLGNDScwGF6sMfJg7vIpqbVNIKBT7ffI05CxtMeLRqtFBh2QLLeYFaCi5s1ed2gmTZO0CFvIatqJJK8KqjaGsPRWYUJ4uIGz/XBMFhvNlSGwBp0lJClge024vmLUxXeWRYkcUIWhzhOAE1zO1p+8uQRQrSYhsAyBHcO9vA8G2SrpgPLNXnZ4Do+h4fHHB6d8NHHn912Mbaj6BKtVOKdJE5whK0iWaocTRNYtonnucRpyvMXLwi6XfKixDBUOKPjeQhNI04T0izbHaQzmkaSZYWi8Gs6aVpyc7Nifr3k7PSC0aBPkWd4vstsNuXi4pzVakm4XbNcL3+q+/zPdJGyHQfP83B2YMZnT59ydXVGtxfw4OQIv+tjO2Ns2yYvCq4uzjh7/hJdSAwhSJKM7WqB7bjUZU5ZVXS6PQ72jijLmizPaFpJpxtwOJuRZSnb5Yq2FQSOS1WpEdlysUJoOk0jkY0k6HZoTIs8SzENgWhbfM+haUoWiwX7+zM6nS5CKB6gZmqESUqcpZRFjmwaXn/wgNcevMZ2Eyp/UFazXIXUjaAoS4qyxfO7zGYHJElMEkfYlkfRSvb37rBeL/j008e89tZreIFLkWdcXV5yfnaG57gcHR4oEUeasdlGrNcbgsCn21WFMU0T4rjLer2lKkuCjsdwOGG7TTk9vWTQL9E0m/X6hqrS8P0htm0SxyXr9YrLy2scz+Xtd/bQtZayWPPG68fMlxuyPGcwGFFVLffu3SdJEp49f8rDvdfxvIC6bhEouex0ukev1yeJMz7//HOiMMNxXNI0Jy1zKlmzF/jcOb7D2fmZOqW26gTtea5KtM0K8qJQO6t+X4XhtbWKDu+qk+x3v/N9To4t9mZ7aCheWhqnlFlOs5u3t1XNZXtJU7doQqfT6aj5fNBlf3+fO3fusF6HXFxc0x8NmezNODi+R1ZK/tX/9DsstwW/+K0uq/WG+XzO4eEhk+mEXk/hkbKipCiKXWqvemnqhgFSFaVXC29lV1HkCcWVlco3I5odeKJF6DsSBQJNAJqgqVvqSmX8KIWVUB6otkHKVo1yDEFblwqZA3zlq+/iOCZxtOG3fuu31E2nyNV4t274J/+X/ytCSEbDAXdOTtjb36Oqzllttth1rYgIpRoHCU3sMtlc6rYhzlI6/T6vvfkmdZ7yu7/9r/F9D8s1sTwL11cjr3ATcXN+g15pOPc8XFMJmEajEYZuEHQ6DMdjTs8vSbOCdBvTa2qiJKWoKvxOQNDr8PL5BXlR0Ov62J7L/p0j7t49wTJ0fvjDH9Ad9fGdgKIo2Tva4+zFJRID3XIp6i1RWlK0W7ZxzP0H93E6PfSqpmkS8qahLGuEVMrfTZQSpRd0Ox0GwxFRHFNoksAxCaTaA63W21uW4jYMSdOEIs9xnQBh6CRpwumLF3z4/o8wDLhzss/RwR6HB/uMRv0dQHaBbCHLKzqdPgcH+9y7d4/Rbpydpind3oCyLHcHE4OyKtF1DdNwlFBKSmxb+ZnyPOfZ8xfM9vfwOx10XccPAnr9vop8XwnKuqZtIc8LqqpWAZGGgW2rUMPlcklRlHiOw2DYo6lKOh2fvdmUbjdgfnPNzfUV683mp7rP/0wXKdcUNGVKHFcsrs/pBQ763oSiTPFsg7JIyPKafr9HnuUYBvR7AZblc319gS4sfN9hu93S6TgYRgfTsimLGIlGXStDo2UJ8jRWQoYsQdcskrKiqhtkUzMaDsjznKpuKIuKaLtCAromsG1zdxLW8f0u/X4fx3GJowRJzXS6R5ZFCCkwdIO0SWnLmtOX5zQ1nJycsF6HpFmO4/rczJd4rkdZNjs5vSDNSuIkR8qW1157k8vLU2zL462HX2YwGKGbgrpSaae6ZtC2SjK/Xm9YLBZEcYomNDodD8vUSdOYOIkoy12ezi6ATUod1/UBnShKWK02WJaD73VpG6glxFFKuM0QwqYoWq4vl5g74cezZ8+pG0lVtxS5ulmqJ3SuJOZCzcullNzcqBTfoii4ubnh6uqKXq+HbDVAp9MxaWIJjUYcJ/zoRx9S7f6Pm80G13VJkpSmrnEdF4AwDLFtm4dvPaSVDeaukwLQdXAcF6T6nmhVp+R7PmkqefjwIWWa0lSK8n12doamKf/JaDhmvd4wHI5wXZ9+v3/rgfKDHr4weffdn6ORJlVdM9tTNxLLstSuaji69RW1rdzxBHWFSKoqDFN1WdBi6Obt7F8Ijaos0XUD3VQeB9nWtG2lOi2p7STBJgh2lABj12GpTCrVmZlIxK1vpd2NhmxHpcQOhiPe/bmf49d+7Vf58Ic/pG0lTdNiWRbdwKFu2p30Xj2vWimxdobNoijRNB3bdqiKGt20lB/RshlMZiTzOVGasY1iNNPierHACmzcjo9hOeRpTrgJScKIx2VDlZWYKKHMZDKh2+3jBn31NVxHqXy1bEfvcLBcF8u2aYHX37y/EwnkNLLh9Pyc/YN9vKCP6/t8+NHHHEz3SYoCdI1g0CeKc5KioEVS1jWyEliuh257oMVIYYJhIzVDUWtaSS0FspVqYmIoBZznuliGhu3YdDsdlvGWvYMjJsM+eZ6SpPFuZ7qm2x1SphHbzUblOhUFFipU0DJ1xuM+vudj2zvFnaaTpAWmoRh9eZazWC5J05QgCG7jM+paHUjMHUpMjcZbfN/Dtm10XZlvLctiNp0xOzzAsi0WqyWtlNS7UbomNCzLwnVddZiS2k4haxPHEAQBQSDwXRfXcxBtw5tvvsE3vvk1DEMnjraslwtOz875ne//n/7f3ud/potU4BnQZMSLG64vnnPnzgHj4YwvvniMY6llbpanuI5OEoU0VUq3Y+M5Hh9//JheV40JXr6c0+326PV71E1LliXYtosuGqoyIc80wu2aoiyRTUXdtIRhvPNLOezt7bHZSOI4Qbd1Li8vkcBg0Mdzfcoyx/VcBoMuvV4P13VZrRbUTcnh4QHnWYLcSefTJKfKCzarkDjOef31t5gv1mRZxmi0x2oVIoYmYZiS5w2G6bLZRKyWawLf4fjkAdc3NzgO3H/tLtPpAWWVkcY5bSN2NzJJWVTM5wtevHhBUVb0el0QU3QDsjxmGy6RHJNlCaZh7SLKW8UB1EzOzi55/Pgp737lPYKgozwdUifa5qxX6Y6ZJlmtYiyrRqBzdnaOYdnomkVZbun3+sxv5oRRiEBhe2zbpmlLXrx4yXA4ACTLxYKzszO63S5l0RLHKZPxhJqWKgqJoojvffd73L13l7Io2Ww3nJzsTNxtS7fTxTItbm5uGI1GfOMb3+Tl6UvKsrgllGuagbeTfydJSlO2jIZDrKBDWea8886X2K5WXF9cstlsePnypUq9FRrTyYxOp8P9+w947cEbTKdTop0fZP/oEGEHOO6A5TqhqgVHR4dc3LlDGIa3Rkgp2x0Zw1Jd265zqqoKw7JvAaOaMKhrJQTRNJXJIzSVpszOANy2LVWlsq7UstwA2SCEWrT/JFZpV6lQ4EYFMpVtq3htpglty3Q25evf+AZ5lvGD73yHsixxbIdWSnzfp6waDN2gLMrbg4Jp27RSUu6CJk3LoiqUCtD1Amw/YGqaPFmsuJovWUcxUjO4uJ6jmQa94RDX75JGKeF6S7jdcPb8jHSbMB1O8F2X4+MTdN2glgabMMKyHWzXoWgbaikJul0s11WddZ7xc++8TZomnJ+fEUdbnjx/wd0H9xlOJ9iezyePPieMEjqdIa2uY3U6mBhElzdktaStKlpdp2vYOF4Pw0nRrAytRmVkNWrUXFctupQ4UqNplGDF83xaU8NyPAI/4Oz6kl6vx+HhITfzK27mOqvVipuba05O7lMUhTLQrlbEaYJVa4CKp9k/mBJ0Avr9Hv3BAE031EE1SmmahqIsWK9Wt0rf65uFAr0KQdM0O6FTrQDQO4biqyKl/Iiwf3TIwy9/WSlvy4LVZkNW5LdAZ9d16e74fbIVOwuHII4TgqBD4Ps4thpb+57DV959l//0T/8ZtXMtcxbXV3zy6Wf87/73/39epMLtDcNBhzLb4tnQVBHbNKfIN9RFSLi6IskTjg5G9Ds2r907ZDIc4NodPNvGMBwQBmkypW4bDL2l1/MxrSFNIxmUPtNpT506abEMwbAfkBcVw/4+shWEYczV5Ut03WQ06uC5HsiCNMsJOjajcQ/TGrNcLrm5uWK7DfF9j8FgSJrGrNcbmgYM3UZgoAlTxVKEEZpmASaDwYQ8u+TqaoFsdUzTRddt4qTkww8/Zbm4RjYlAsFnnz3FNFym0z1msyMuLq6xLB2BgRAmmjCp6pIwVEvPTtDBbRoMU6MsM5JUp2lVZMhms2AyHeJYHq4XMByNWCwWnJ9foWk6d45O0HWd1WqD63iYhocQFq7TJU1T1tstSAfbkWzDUFGfdQNNGLsb546Abjs0TYWhG0gEpqmoCKp76mOariKCmDam4bJeb7i+viGvCjQElqlOkDfXcwAEGm2jxC6aEMrkWGU7FVJLGEbEUULQ8bFtk6ZpmM0mAOSFihMps5QszXEtkyDosre3Rz/o0As6xHFCWZZstyHhNiKKEgzDYrFYIvgCwzQpqppBGNNIncF4n7ZVhtg8T/n444/pdDqMRiM0TcOynd3OqQGhOjhN0xRxYDf2k1Ki6ZqKjRGvfmmYlkrsbepCsdxEe9sxCaGpdF9UERS8OqSA0Nl5BeEVe0pooOlKOr77Yd3S1XVNYzQc4tgubSOp6wbdMHflToXXVZUaASKgaRuEpqHp2g6aK6lqSSs1iqKmTksMy8Tt9Dg8OSGJI7IsI0ssWgRfPH3OZh1imSambmAIQ4lRzi/YLNYEng+NVAmxGDQIwjhCor6WYdn0BiMc30XTdDbhhrxuGO/tc3h8h6ZWgp20rPjxp59yeXlBUpZUQqc/mfKlb3yd6+sV601Cb2+fOElZbdZEccImSri4XnBxvSTOChAGrdSpWkHdCmgFpqmjGza27VHXLeE2ojsZ4HkuvuMyHo6wLXPHmKxxXZfxaMxoNKYoFIU8z3O22y1ZlqHpNlWrE0URV9dXxEkIUhJ4ilrT7/cZDafUdQvCIElUqGa9i41/1U0hNSWeKkt0TRB4Hk3TcHBwwOuvv85muyZOEt7/wQ9YrlZkmfo8WapGp1mRkeeqA7MsS3X/DbvipYqdEMqHZ1k2sm3RNZ3tZsvl6RmzvdnuOanh2O5PdZ//mS5SSbRg2NepyhDPFVRlSBStydMVTR2zXl6QlTmG9hadTode50iNi6TF8eE+UZiz2kQYhuTZ82d4HkxGAePJjDRXMdO6brANQ85PL9E1mEx7RGHMdDpD0yxOX57x2ac/Zjabce/uAcd37lCWEZdXlzg27O2NVWzEfMGzZ8/Zbrfs7+/R7fYwTIPVco5h6mjCREoNXbepygrT8mjREZpFtzfi/HLOxeUNRSkZjGaURUueNXz3O+/TyppBz0cKjc8ePeXeyR2ODu+xv3/Aj//vHzDbm2BbjiqEwiBLY6JKwT9ff/0BWZ5SlClFkbLdFrSypGkLrm8ueOP1t9GFhWHaHN+7T1lVXF0p3ND9+/dYrTbEsZKj+r6GYdjomkFTw2q5BdTNeb1Zc3Z2uVvim9iWQ+D38P0OruPStspkahomkpo8L7m8PKcsaw72j1ScimYy6LvousGHH36EZppgaARBgBCCm5sbTNNkMplQ17Ua5clXRtRi9301KoI7y+j3+9iWS5alHB4cUde7bkUzVLHSCyxdpTofHx8jGsl2vSaKIoTQODu94OzsnM8++wzX9bm5WbBc7DpuIZjtH9JKg7rVGU/v4Ngmy2rLD9//gD/5G79Bv9slTmIM00DTDdUViV3sgaapgiHU3unVKPCVeVKptZQkWErF5GtlqYQPhoGOsYtCUP4kTZgIodG2jepamx1hXQDoCKG4TrJV9GoAWgm78Y6h63S63dsRbNtKRR4pG1QXprq+tm2pdvR5kMozJDQQOmXZItEoy4aiaNANg6A3YO/OCXVVs1mv0Nca2+VCJS23T3jv3Z9j0O9R2h6L6znROsTUDUzdpBt0KcqapGywXJc4TUjSDDQdzTAZjIcMhmM0Q6c8k2Ca7N+5w9tvvUkQeFxdXvDJJx/x7NHnbNZLHNvB8D2CyZivf2vCj3/8iEGUKU+lhPc/eJ/Hj58yX6x4+vwlUZLQAF4QgNBppKCsWmTTYOk6hvUqzRg22y3+sEe/18dzXfZmM3RD34UEKgPtZDphMOhTlhXFrkBtNhvyskDLJboh0XW4vLoiCjcUeU6/1+dXf/VP0uv36XVVfM3l1YIkrdhsox2rVJndm6bBcwPSLKVtGyzT2GWHSQ4PD3nrrbf44fs/4Oz8nJv5nKfPntEb9DFMQyk3s5SiKimLarfHUgVJaq8k6Aqc+2oMblm7MbUURFHM48+fMBmPlUDLsrFt66e6z/9MFynDktiOYDgOWK4N4iTEdmBvf4jtwHTaI8stDFGhs0N3tGo277sGbaVT1SaWPcZ1NVzPpdvro+sm3VYlemqaTmdj0exO4oZhMR52mUz3aFtJGq949+feZG+6z2w6A1mALDg8nDIcjTB1iW2bWDugrWU7O8e+CoYrq5pOt4vnBdi2xXod8vqDt6jKiqIoyPOKupaYhkuvK7h78mAnbMjRdIfVfM1sOmQwmvHg/l3CcAnCYLWKsOwlluVh6DZVVStvU5gwHIyQsuH8/JS2begPewyHAU1bIYVEN1o832Iw6DIY9slT1TU8+fwzttsNQlN+H9NU4yMpJU1b0el4mHqXtm1ZLJb0+0McW7nlLdPBMh3CJELXBbpWs16vbkcNIJCt6nQcR3mxNpsVbduSpCllUTGZ7JMmhZK+miZup4PUFDony1Ll85E1YRgBKt5atu1uh1ejafqt8bDd+YbUTd4FBFmakcQ5QqqMpqZRO5UoVMKS2WjMaDjGsT11ktx1eNPpjLJUN4GiKEEILMcliiK+ePYFg8keM9PEczymexpvv/02nSDAtm3VHb066er6rrNTxait691Ju6CuGxUfL3Q03VDJva/IDq2kbtQuyrQEQu5Ue60iDDR1C7pQkR1CU8VpR08XCk6JKjSvvFkaUrbIXSgeSOVfGgzp9vqkaU7TlMpTJcSO3Sh2oz5JK1sFI6VFN0yVLSzBMI3d89xF002E5WF6JcFgxGiWMtk7wDIMbNPCtixWNzcsrhck24i6qhn0B/R7fQQa69WaMI7V60M3yOqGMImJ0wJ0nWHQYTSesndwQFlXrOKI2f4h3eEQqevUwM1qxSZO0EyL/lgJrOabDR988jF1o3O93lCVLa4DspbKU9nrUzWCum0UaUW2VFWNYWoINHTDAhqk0KnqlrKod5OMHQ0/SWmbGs9x1Gi6KLi4OMcPPPX4uy7hJmaxWHJ2dsb5xQVlXRJFa7LcI04spKxJkwjHsfECHykgTRLiMCFNCz797DFxvMGx1V4Uod9SIQxDx9117pa5i7Np1Q6021UCoCiOSbMMXdeRO/KJaZq40kUzdJUCUdS7z6cmI2rMLHe2AyXuqapGPbWEGgOenZ3z4sVLbNskz1LW6+1Pd5//Q6oX/1+5vI6JP/TwWoPhpss2vga95o037hL0bParkarujo5ptDR1q16bUhB4gZLsapLxdEaSJvidDqbtcnV5jed79AZDBBrLxQJda9lutliWw2y2z+HhHW6ub9isrnnzzW8xGU8psopnz59jaJKHb79BbzDg7OIKw9TxAx/X8/E8j/V6DbCjC4CumXQ7fRzXxXNXfO1rP09Zljx+/IQkKahqiWU5uF6Hd999j+99//tEUYqmmazXIfv7Bxzfuc9Xv/Z1fvT+9yiLlpubJXES0+0M0DQL2aoI8STOefuth5iGxne+83t88cVTvvnzX+PwcEwjU4oiQdMkjmswGHYZjScsbhZsXp7yxbMvVLyJYTAc9pBS4LgmTaN2M8NhD8vsstmulcx8NEbXLeq6xXFUZyPjmKqsQGosFits26PfVxJqtdDXsSyb2WzGYnFDVTWEYUhVNty75+88SWscx6Xb7SF1jSxTng2Auq5vPRh5nmOZFmLXKfz+zF27dca/ktgKTWO+WBKHKd2ghyZUZxAVBVVRcHV1w6g3ZDoeMxjsogkMi1cdxIc/+jGXV5ds1hvW1ZrhaMiTL55xdjnn5N4bvPG2QXc0ohsMGPaHuIGPLgRut0NbVuqm47o4joth/n6RKcuSbJcubVk2lmmhG+ZOW96qXztqgEo6FaBpNFVF07RomlSjN6Gh61J1TLcJv7tsqleY9FeXJpCNCtsTKJiy4ziMJ2Mmkwmr5YqiKJVwSAoMQ92Eq1chdjuQQNO2mJq2Q+W0mKaF6wX4nS66aYFhYnuBOrTQMnm5j+86lIM+N7ZNtFwzv7rC0JW8edAf8OD+axR5QbgJWS5XaIZJ3UKYbNmEMVnR4AYupmUznc249+ABSZqyiCIOju8wnExBN0jzgpvlkjCOaTWN0WSGYVoslis+f3FGXkk0zSUI+lRSo84qdNtmOJ5gmS7Xizll09CUJUWeK3pD22KaOqbtIKSKzUjIQDgITdt18eqA2p8OKbKcq+sr5vM5ujHD93xMw2C1XPLs+XMeP37M8+fPcQOXzWbBYqXh+w5lmVEWGQcH+3R7Xeq6ZpWsuLq84eLimu985wdsN2uV1WZZNC27gyBomkGn08GyLHRNkMZbkrxE13X29vfJi4zVek0YhVStMnAbhoHQdQzLxG4dkjhVxW2H2zIMg6qqbhWibSsVVLhWn9cxTcIw4umTp/R6XTzXBiSLxeKnus//TBepti1J4jW2rTMY9ynqfbI8xnIMkjTEtnU6QRfL1NA0SVkXFFmDbA22qy1RlJGVDVVTIoE4CRG6sYt7sCnKDN8PEKJmNhliGUoW/cknH7BZL2ibFkNvGQ97aKKhyGKKLObLX3nI3v4UzbTYRj6OayOiFN/z2ZvNSNOYMAxVnpCp1FpxnFIUFYHf4/T0jCRJybKCwUCpApfahrpqSdIc1wuwrADQGY/n1LXk6mrOxfkVhungejbQcHU1x7RqdB0MXVDXBZ1Ob7c4LRmPJ1i2GsclaUKvpzKkTKNGaOD5NmUZU5Ulvu/TG/S4vpqT5yoqo64agsDDdVWgoqZD3ewMzXlCjxFZlhPvlIRRnCq3u6Y4gQo+WpMkKVWVU9cFrmfR7fqsVqtd5o0aJwV+l/PzcxbzDXXTMJlOcPyAtFQR2QpwqUQIlmWRZZlaBmvqtKhAlzrL5YqyrOj2Orc/+3Abqf2Y41CXLWmS7oQIKi5e1w3Ozs6o84Jhf0An6PD666/f8vU0TSUBmzsll+O4aEIQBB2E5mDbNpvNBt0MsAwXCdRFQS0E0WpJW7d4QYBpmuR5Dohdp13vYLPK11SWJbVdo2lqNNo2LULu9kiatoumhzyJSZIYIXQ8z2cnUldilh3BX7z64N0lEEi5S/PVNGh2J2Vdp2oadA1M02LQH+58XAlto+JFdF0HBLKWaLqOrglaWtq6Qgo1CnJcl9GeoqVIKUDTqcuSPM0wkNh+h/2jOzTDAVm4USDb6zmXpy+oqFUAaFlTFAW9Xp8vfenLfPLppyqbq5ZYdkO3p2OWKlojLwsV2GfbRGnC46dPKZqap198gWUZ2JbBi5en5FlK29ZKvVeWrLZbVpuYshaYdoC1TfCdDroEU2pUVU2WJaRJRLubymi7gl4WuVLp2mrPaDkOjqFjmMZPeKyFIp83BePRmPF4zHq9pCxLTs9Ocd0O8+sFbdPQ7XaZTCYkeaLUfI6ObeukWcr+/oyjoyPGozGaEAyGQzyvgx+o0NdHj79gtQopy5KirG+FE3WlDixVVVHJlrzICTylcE3TVJHs65o8LyjriqIqMaJQ0fBdB9NRAgvbtn+/k7olmovbgqXuzy1ZmqLJFsPUKYuc9WpN6btoGmy34U91n/8DF6l/82/+DX/7b/9tfvCDH3B5eck/+2f/jD/zZ/7M7fullPz1v/7X+Uf/6B+x2Wz4hV/4Bf7hP/yHvP7667cfs1qt+Ct/5a/wL/7Fv0DTNP78n//z/L2/9/cIguAP9L1kVcbN/Ir9/SmTvSm2pZFnEZ5nc3V5wWjQpdvtohkGdVmTpxlJUtBKjcvLBdt1RF5J7JsbJlNFFE+SFN0waBH4XofDO0cM+kP6vS6dwOPzR5/ze7/7O0ymMyaTGXuzfY5ODlnOlTktTkL+8z/1X9C0DdfzOeNihON1mS+3+B2Pvf0hcbzlk48/YbPdEHQ6lFXNZhtiWTaDwYDPHz8ljBK63R73nADT8hC6hSYkYZzR6Q6wLAfbdlmuloThhpvFimfPXjIc9fD9PmG05eJySdPGSjavw2jUpdPtYzkuegMHR/scHOztYjNy9g8GdHsGSdJiWSa94YCqLsmKDMd1eevtL7Fc/WvmiyVtq+Tss/0DXMfdRVL7bDYZcRYTpzGTncFxtdlwcXVNlud4novndfE9n6aRFHlNUURkecRy1aDp0B90SLKYqoGyaZBVxSTwePz4KZt1hGk43Lt3F8NymK/WrNYhhukQJ0p67rgBNzc3PHgwpa1rwu12lx1lcnl5zenpOf/Jf/InMA2bumpZr7fIVighjVRFz3d9TMtSEd1Inj59wdPHT3EdhzcevMEbb72NRJAlKY7r0R8OuZjfUAFO0MUwHUaDEZ2OxLUdovUay/DpD43d/gc26zUXFxe0reTBm29hS0maqryhPC8oqwohNDqdLmVZgRRUTosQNZrQaFqJzq5IAaZiQLHdrMnSFCE07F3XpRuvoud3aj6xE1T8xOtJIlQ3uwuaBCWAANB0C9022T84xPr4E/X9CIEwDPWpxO6zCRCGoT4Hze1Y0bJtHn7pHXqjEdI0KeqGKksp8pTAs/E6He6/8QYWknS9ouN43Fxcc3F6RRSF+K5A19TYdzQa8dobb5IUBeeXV5RphmdpBLpJWhSkRcEq2vL4xXPCsiBOEh4/fcL5zSVJHNO2zY6Yb+H5HrqmcbONiKKIKI3ZRAlJVqPrFk0FnuEy6Q052TtC1zTSNKPIC9B0dNOgQaG3yiJH1zRqQ8c3fTzXwtMNJaLQQGiCsq5Y3NxghiYH0z2VgvDZJ1RFyenzFyRRTpYW9HojZnt7lGXF48ePsPwA2zVp2pL1JuS9997jzTffvE2jnu4d4Phdpvsbzk6v+P4PP8RxVlSVJMvy23h3IXRMwwQdqqogK0qGwy5y11X3en3apiXPcqI0YbVWeDPbcZnMpvRMG8d2qKt6B6j9/XgOXVdfQ0p2/sSMNIqhqSkrNR7em+3T7/cwdJ3tJvmp7vN/4CKVJAnvvvsuf+kv/SX+3J/7c//B+//W3/pb/P2///f5x//4H3Pv3j3+2l/7a/zar/0an3zyiZqPAn/hL/wFLi8v+Vf/6l9RVRV/8S/+Rf7yX/7L/NN/+k//QN9LpxuoUL08Zbm8ocwTNNnimiaB36UsGjarDYZpUVctabpDDmUpi8WCOMmoao16k9I0La5noesaUtbYlksn8LEMS0m2cxUNEAQd3nzrLaI45fLqmvlijdftUZUNeZnjBT4ffPA+eZmTFiWa6VA07Lq1llY2LFdLWlp6gx5N0xKnCY1scZuWppWkWU6WV7RtBJpBWTe0UiPNM7K8IgwjLKtAiC1lU9IiKcqS6/mSKI4It+qFmOct602EaUp836ZpBZdnF/QHPp2ujeWaGI7OtDvDsgRlmRHHGbZrYxg6682Gpo4oa9ANlydPvkDTVebWZrtSJ6rra4bDEY7tsDo/oygEmq7T7fdoZEvZNOimjd/pUrcgNIuylCTJFtd1KcqGVlaow7hAIrAchwaJ7fmE4ZaiLMiqksneDM2wmc/X3CxX7B0cMZ3tY7s+T548uV0Qb7YRjuurxXFZ0ZTl7SjMNCyE0Dl9eUEc53SCANNwKIqGthFIqaNrFrpmo2kmaVLSNhVFXmI5BpYtmC9X/PjHH2FqatRxeHxC0B9w5+59LCcgTQv2ZzOefP6Y6GaBhiBcr3G9Hp1eX/ESvQ71bu8Yxwnvf//7agdWlmzDmKIs0XWL4XDIw4cPkZJdFpQqIFIoVZ+GUuUZmqAVGm1dk0QRZVnuxmSvVOYSUMo7JZhQ8eqvLjX8UyQIKVXxErq4VRwqU7DOaDze7TleSdclYkfE0AzQDJCayggTaLc7Dc/3efudd/CCDsK0aWRDKzRcv4Np6WiGjjBt6jxT4aVhght0MewAPa/RDBOJxmq9Zr5c4AYdTu7dZ5vlLLOMJE8V8VsIGk1QI4jyAr8syaWkRrLebvADNXLXTVPJ03UNxw+4f3yHz598zupFTlo3uP0OSZwhdA3NFNiORd1UJFFEUZT4XrBTLTaUdY5lW3iOjQSatqKsc5raREiJroGGpJE1LS26oXO0t48mYbvZ4DkuuqYxmUy4++A1kjAlzSpWK6Xgsw2TOI0VBcTUkKhR+fPnL8mSlNlkj7Yx8Dx12BqNxjS12qcK1OTCsp3bkbplqkynplXildlMCbk0XccyTPrdPlEUUzcNw8FIhcbuonKqsvoJrJISUFimsytSrwoWGLqGsEy2VUkUNWRpTttKPnj/Y3zfQ9d1ojj+qe7zf+Ai9eu//uv8+q//+v/s+6SU/N2/+3f5q3/1r/Kn//SfBuCf/JN/wmw245//83/Ob/7mb/Lpp5/yL//lv+R73/seX//61wH4B//gH/Abv/Eb/J2/83c4ODj4qb+XwWSKJkvm1+d89unH2IZOr6e6p+n0gC+ePGK9WhH4XZpW0rSCqmpZrra8eHlJXijcz3K5pSgKZvtTxpMRRVkqU+ZwiO26FGVJU9UIXWM82+Nb3/ol/tv/7r/n0ePHbLcxF1fX3Llzl8lwD9f1+ef/9X9DnMT0BgNef/glHCenqlosy76lApumxf7+AYvFktVqhW05+L56IBE6eV6pSPG63Y0DE9I0JcsyVqv1zmSsRpNCCOIk4YsvvqAscibjEZ7nIml48uQpB4dTXM8mzTI++vhTTEvyxht3bsnhr71+D88z+fiT7xMnGUFnhGXbfP7oGUUGe7NjfM/kBz/4gJOTu4DG5eUNAFGYcfeuZG9vj0ePHgM2gd9XAY1RSdtIPD/AtJxdgqdGlhUs5gsm08ktZHc46qLqlJKmer7PYDTk8uqC09NTttstX3vvG3zxxUuurhY8fvKY2d4h9+7dx3GVIXs4HPHi+UuWyzl37sxYLVdq74TamyAV8cDRND755DM8z+P4+Jgvf/nLlIXaY2lCw3U8XNdDk4IiS3dLapOJOwZU7MP/+D/8j7i2w507d+j0B9x97Q1mR3co64arlxfszWasVhseP3mGYZjcXC0w7AAv6HN9dU09qMmyjO1my8XFJd/+ve+oJNiy4nq+QEpJtzfgK195l06nQ7fbw/dVEuurqAPDMJRMvFELarUHKdhsVlRVRSfo0jYNurEb4/0/u3ZKvNsPEerUj1TFR+4eF01oHB4c0ul0gV1+llQKPm0XDaHrBhgGbbVTFtY1QsBkMuGP/fE/Qafbg51asKlrPN/HMpTK0HIDFjdzzi8uWa427M0O6Q9GJFFInhdYpsHz58/RdJ3Do2Pe+dKXuF6teX55SZpmoFc4fqDEGkVJXuSkWQ5CoJkGm03I7OiA/YMDwijC8z2klAxnU/7Yr/wyhWw4v7kmr2oGQcAmipFNTaB5GLZJ1VSEUUgchbz+2us0UrJYzInCEMswMHxfUd+bljxLKQyD1tWVj8gwMHQdU9fpBAFvvPEGq82G+WK+M8Y6vPXmW3zjj/wC68WGH/zwQ148P1Ox76ZFmuW0eY0XuFi2xYsXL1jMrzk+POCtNx7y8sUFg8GY0XDK4eGhstakGb6nUh1cx0XoKOCsbeO6LlI2yKbk/v37TKcTHMfFMQ3u3LlDVuSgCYamSZorc3QtW9I0xbR2gNq6ViNpV435pBQ7XJcCF+sI8rwgDMNduGPJd7/3IY5jKERX0fxU9/k/1J3Us2fPuLq64ld+5Vdu39br9fj5n/95vv3tb/Obv/mbfPvb36bf798WKIBf+ZVfQdM0vvOd7/Bn/+yf/Q8+b1EUFEVx+/cwVLPMNEkw9BaJjmG6dLodPNclSgrycsVyGbNZZ5hmn7JscD0PREMYzskzKEoNKVqStGa5iqgayXyhiL8nJw1poQyQbQu9TodWtmzDmDTNqBvoD8b0+hMGwwl37txjNNgjjmPKEooSqlpns45xPCjymroBZXvRKMuasozVXgFl+msa9YJ3XB/bFriOqzoAKbBtl7puub6eo+smrqfRtCqbSQC6YyMMC003SNKcLM8xDCUN3m4jDFPjYH/I8fGRardNk6A7wPdd0nyLFAI/cLBsFWWv6xaurdJRs6QhClckccHjx89Ik5TJeI+iKPD9jkKtlBV5XuIHAVlWUJWCslInKISBrps4jqd29G1Lvz/ENGygxDCsnWxVR7aQpjmSlk0YsVzOqeua2WyPzY7S3gk6xJFC86RpDmhEYXIrhNjfm+DYHrGeYegt9m5uLiUqsdRQJADLskmSlBfPXxBF8U6NpG7MZVli7mLQBQG6roIy63WFaCWBF2BZNmlW8Dv/9tv0J3sMLZOmaqgb9eLtBAGDwQCAPM+5vLwir0Fg3O6c/MBnOp3Q7XZZrlYUZUGapjslaoOmCTWS0lWoHMhdqm6LZqqbQhbH1E2BbkiE1tC2NdBiWjq6IW6TXf/dQvU/X7TUSAg1ytMEkl2R0gS0YO52dEqIoVO3jdpzCYFsVUy8runUouFVurBt23S7PYJOF920cRxlJjUt0A1biTaaEtlopFlFUbRstgmyLJEIXM+nLnOqsrp9DG8Wc8SO6jEej7lZrkjzAqkXtEJDaLoyJGua6hh1A2FZNJpOLQR50yB2zL1tnPDi/ILFZk3R1ghLJ28qHN9DkxqWaWNYOm3ToBlgGTq9TkDdNtAOKMtcecOqCkMIXM9RYhDZUpcZWaU4nvru55Hn6nDS6yqF7I8/mmOYBjc3N5yfn2ObauKkrAZKgFJVNQ0VRmXS0qAJsEyDJMsoq4okjinLhqpsqRtBnqeYhopf0dudSXsXyfGqu0VK2p3/Tu2UJHEc4ziOEvDoxs4InVM3jUJEahr6jljx6lDyiujStvlOUi+xDBNDV5zJulI74aZpMHShaCRNi7Qg/SkK1R9qkbq6ugJgNpv9O2+fzWa377u6umI6nf6734RhqNTM3cf8+9ff/Jt/k7/xN/7Gf/D27TbD8wwkJkEwoD8YYZsmUbhhtbjk+bNTiqLC82aUVYvnd9BEzXyesg1r6t14JY4rinKOuJyTlwllVZJkDY57QRynGLrBgwf3KYqSFy/PyDIlXnjrrS+h7TA17371G/S7U37rX/8WYVSCsMiyhrPTa8ZTSZ6XlJUSMQg0kjimrmv1ZDAETSOp65Zer0MQdLEsh16vT5YWNI1Uy3jN4Oz0gtdffx3LNlht5rf+B8MwcF0Dabas1hvaRpHAk7QgTmMQLeNJj7e/9GU8T2BaFqNxn07HYbm+RmwqRqM+vX4XQzfYblKCzoS2tri6XPPsixfEScb52WMOj464e/cum/Vmp1rsECc5YZgghIdlurStTpGXxEmKabh4ns1gMCLPclpT0OsNyHYyV11XC33LcpBSEIUxURLy7OVzpGzZ39/nYP+QL754pkjrfoDnJRR5SZJkZFlBHKckSYLneRwe3kHK/wd5fxZrWZbed2K/tfa8zz7jHePGHBmRQ+VUVVlTkkWJFFsUpe62GrIkC7DdarhNwnJThqwHAQJsGKAENGy/SUC33E/qB9lWa7A1mRTJIqtIFckisyqzqrJyioyM8c73nnnPa/DD2vcWS2i1ikY/uMCNCmRmZERW3HPPWd/6vu////0ty+UaKaAXx52Po2W9LjDGsLW1Ra+XobXl7Xe+jdCaKIyIwhQZQl3WIC1BFDHoDzFWsVzOqMsSiWAymhAEIcvFgq//zq/w2c99nuFw5BJXG4XwfEbjCTdv3iKKYuazJUf3nxD3HvPa65+ll1QADPoD0rTH5uYmnzx8yHqdU9c1UkqKosBYh61xgFgAp5TTWmJsgDGa+WJGXeekWUTac6T7i2mctboTRPh8v1Bd/BBdF/WDj7j4zUJcdlUCZyAeDYeXSrGLwgWdTrAzGXtS4gnhot9xlInJZMLVq9ewAqzwSHtpJ6G3YBVGG+pGMV8U7B+ecnR0Rp2vCYKQwWDIegWL2TnWKsq65umzfRoNcZKwe2WP+w8fkc8WBNbiRTFeGDqZu/QQgJGSdDDAj2Os51Nrpzys6hq9XvPe/fs83H9G3jbE/R5FU9Eb9AiETyJCwjjEFjVYQ+hJ9na2CKKI+WJO27jojdY6moP7flnUuqApmu41Ee59bjV1WXJ6esrde3exEt793nepqoonT54wHG/w/POfckXA9wjCgLppKasKRYsIJKkXU1YVWjVd8m/JyfEpR+aErc018/ka1TYdi9FDSJcr1ai2Ay43SCEdANu4eJagy1Obz11idL+fcXLmOZtM09AqN0lS3fhXKXWJRorChLZ1MS1Ftwv1U5/QCzoMm6FtHdswDD2n4A0i1Drnwgj+P/T8SKj7/ubf/Jv89b/+1y//eblcdi2puy0GQZ91vs9w4GO1YLFoOTkrWK0sqhU8fTrFIvGDCs+LyHOBlH1002C0QngGZUwnSU8RXsB0lpNUrj1GaB4/PcEaQ9sKLBFtKzk8miO9gI2NLepGYGxImm0SJ2Nm8zkGjbGaqtLUdetURFrQ748A2fl5HATS94NukW8JgqgLOnQf8rbVLtCsNc5jIl1rbQVkwwF1UQJQ1BW+9NxC3QuQfkg/G1E1K/KiZL3O2dp+nlatqJuKum0Yhxk9L8OYkmwwRGkHq1yuW1ZrxXJeMp9XtNpHiARtAlbrmv2DM4LAZ6c/Rvo+utZ4QYyUPkJ4VFXjvo4gwhhBUVR4vkdZ1mA80jRy7niEO0gkpEmPIIjwg6BTpXGpapvN5oCkrsvO/JhxenZOqyVpLyXPiy7GPiDPyy4/KyPrpWxPNnj8+DFFUyGFRxjFGIN7DY0lihLaMicIwy5jSn+fI2igLEtHY5A+SZrgIZHSJwjc1yClx8nJCVeWS4e/0ZqqKJjNZsxmc2azBVvb2/SGmyTZkDiK0C4utUtBVijtlHxtd7i4MY/rLj1PopS+fC0uKBTGun3I4eE+nmcxpCTpBGOV21dJsNZ08vLvFychLPaiuvCDXZa1tuPwGZqqIokT2ka5TsmKy+wgYyyeFXhe4Lr9zi9ljXWjcetUhJ7vkyU90jTr0F+OKtIog7CuQHleR8+IU0YbG4w2Nnj68CGq82i12tC07aUatKobTs+mtEbghREnsxlN62j0nh/g+T7KOL8WgOjMvUZZWgNF3WCEYLl2u2AvitAIgjghShI0IDtptbSiM596NJUlCCRJFHB+csJoPMKqlq3xiPVyjjAa3VT0JiPSNKQWYAsH61VFRZYmxMMByhqaxnXSRjiG3o2bNxiPR250v1pddh7gIm5apVBoVus1fuhRqpYsCSnrmsePn9BWio2NbeI45nz62ClwO8WikEGHu7KX5P4Lwr6L0BiTpClRklJVz6iqGmshjiKU1ZcjPCElgZSXWXi+71/6oi78ci7Q0O2mLiYbjh/pAzVYgSc7TmcQQP3vz5T6H7VI7e7uAnB8fMyVK1cuf/74+JhPf/rTl7/m5OTkB36fUorpdHr5+//tJ+qykP7tpywtvV7IcDhmtXqXs7Ag8gOm05pnT6fMp4VLuT3K3Z6njhmNJuQ5xPEWrVpTVoV786saz4MohCi2PH5yQhBEDIcjlNI8eLBPFEVc3btOnAxYrnIOjw9Yr3J+7Mt/jLKGWgkGo21G410ePT2mOl2wu7NNGK0RwqC0O2Bu377DeDzhyZOnLBcrzk6nbG5ukqYZbavIMocAahuN0XS8NgNIRqMJSdJD28Z5uUYDVss1pyen5LOFa72FhxdESOlz/dZtHj26T10vOTuf8fzzL/Ls4D6np485PDzk7t2bAIThiH5/wOnpjKODM2azgrqQfHz/GXVlCcMIz0vo9zc4PZlyeHDGrVs3eO21LYzRLBc5aZoRRwl5XpOvC4ajbba3Q46Pz1ksVoRRyHpVIvAZDjZoak3ai7sIa8NksknaCwgjj8FoQPzoE2azKbPZjI8++oi9K9dQas16nbO7s8dXv/a7WPERV65cYXo+58UXX6RpW87PzuilGZub2zx/9y6vv/Iyf/fv/l3aVuP7nvNXWWgbTZLEjEcBc60co9ALsb4CI7piW1EWTh2ZDVIG2Yg4DDu3vRNieJ7PRx/dZ3N7lzvPPUfTKOazBQfPDnj48BG9bMzLr36Wa7fuEvfH3P/wI6qioG1bGtUyny+oyqrbN114sHzCMOiYaBat3cikqitSmbriYw35asnHH38EQnPz1lU2NgdYqxHCR0iLMQoP/wcK1YUK7wdGgPYHOyqlNE3TkCSpi4O37v2nlEZrl0rtScd5M8aCtlgDBosQCmEtge8RBCHD4ZCNifPMWSto2hZr3aXN6pYkDkh9j6CXcvOFFzg/OgIhabQmwAX/rVZrPAl+EDKdzTifL4iSAxptmBclq9xdMqI4xkpH71DaOvO+LwmimFVbs1it8YIAhMfx6Ym7EGUDGmWYbGyhrUbMZ3hBQOT56KrBtpooCvDiEBMFaCk4ePqYpsrZ3t0l27vC8dEB56cVvV5KEgXcur5HtVixPnOhgW3TMB4N2b15k2fHR5Sl2y/7kTPDv/D889x94Xk8P+Lk1E1IpHBquShOMNZycnqG14k4puenjIZ9emnKV37jN/jUvU9x5849tra2ePjJL3f76wpsQxT3nBrXd4GEddfxRFFAL07Y3t5mc2cHPwxpmpYnT57gBT47uzuUT558H8MF+EFwOc6+ANJemHk9T3bRMm58qFuHJkvTlKpqqKumI5V4l+GLP8zzP2qRun37Nru7u3zlK1+5LErL5ZJvfOMb/JW/8lcAePPNN5nP53zzm9/kjTfeAODXf/3XMcbwxS9+8Q/1/1eWGtX61I0kTTfxvYymVZycrKlrn6b10TrE8yJUC/laI0SD27FqZrOK6XTV3ZwgSQMCIUEYtA7RRuCtFcZC2/oEYcxypWi1oiwtUqbESURdC4RMCIIeRalYLCuwIVEUYKzHYrEmjiR+IMFCkVcUZUEQREwmju81HI7o9x0XriprIMD3Q9I0cxBNpcnXBXFimE5nNKpgXc8IwwCjccth38dYizG48aF21OwwjFG6pK4bfud3f5cgUnieZGNzRF7kxLGgaS3Pnp1wfrbg/GzJeqVQTYAxAXVVs16v8X2P0WiHNB1QNyWIAK2FIyB4IUpZ8rykrhR5XtKqqdvP1S3WuK5UCEkUxGht2d7u5O/VCtsqjg6PGU/6DMcZdVN1eyq3r7qYi0spSdMe/X6fl1/+FItlgfQkSdJzXRwarbvuqG2ZTmd8+MF94jjtulB30CaJUxhp7T5caZK6gmCdJ8ka8AIPP45dty1w3LOqJo0S1zEZKIqSMAgpy9oZb6sa6XnMpjOstWS9PnF3yJRFiRWh65S6rCU/DMjXDsirlKJtm2436SjlDgjbCemwKNV2xl1FWbrwyLPzU8JQ0rZbWKtp29pZnXRL3VRuN9ON9awTmruic6Ed79h9F3JxAKVayrJkMBhexjlI4buur1Vu5GiMUxkiu1onsB2g1uJEKEJK4jghCGPqpiGMndFWG4W0zjTs+T7CF6iiRaqG4WjA7bt3+Pb0nLZp0MYQRjGBB23buK4AS6u0M5kGAUEUYoVEaYO1GqVN5x/zMMY6yXy3L3OgXZ/BYOTwU92v0coFaObrnLTXwwscv1AiQGuqfE3ke2zcuIZWmnW+5uRwn6w/YNjPMFe2icKQOPCpCqc07iURuu0RLXx6aUyvlzKZjJlMJi7WRDvzea/XcyP7NGU+d4m4F+/5xXKJ74eEUYS2LWfTGVppiqLgvBNdTadTHjx4wGpZUNf15WVH4PbFQRBeGraTNMF2tH0lnel9vVjQT6OOHmOo8gJlLj5vqQuP7P5Z1epy31gUxSWBJQiCS/CsRFKp8lL23jQuPUAIr/P+ucL3wzx/6CK1Xq/5+OOPL//54cOHvPPOO0wmjm/21/7aX+Nv/+2/zb179y4l6Ht7e5deqpdeeomf/dmf5ed+7uf4e3/v79G2Lb/wC7/AX/pLf+kPpewDWK4a9vZiykIzHG2TpT3OTk55+uQErS3rtSNBJ0lKXuScnC6Yr1qqymBtw+HhlKOjM/woJOungEerLNIDbQLW6zXLZU0cJ4RBijUBZ2dLjF0SJz2kTEhTn/k8xxMJvp9QFC3LZYkQAYHvUVct6/WSNJGMxwMGgxGz2bxT50XsXb/KlSt7SCGZLxaslmuWqwKo2djI6Pf7+H5A22rOz2dEUUG+LqnUmmVxSi/r0e+5IDUpPeq6RbUaa1xMdpz0GE82MNOaosz5b//b/ydf/NJLfOGLL/PcvXsc7D9kd3uC1ooP3v+I09MZy0WFUQGD/jZVqZjP1yxXK/r9HrdvP8fu7g51U/DBB+9hrGDYH7riWjXUumW9rpjPV1hbYkVEXSlW6xxrrYsA75Rpzz//PI8ePWQ6PSMvFpxPj7h1+xrSv0qra9K01+1m1pycnLG7c40k7hH6Pa5evcb1G3d5dnDK/Y/ukyYrnAnWRVekSY82aHny5Bnf/L23uHf3Llm/z2q14vjoyBWWyo1Jh4MBSeIOibZxQhVrHRcv9BK0UijVUtUVkogoitne2mF6NmU+n5P1Byw7gO7ulasEfsCTo8e0jWJ7Z5vJZIxqFdPpDG9dkfZ61KWLVgnCgFngX45fjDaXjL4odPsN33e7gQsChTauy1FdwvKTJ49J0pCr17e7HWWLUoKmqanrirTX7w4EN161l4RZ+IPdlNsxObl5qxRFUWKMcdBYo/GlIM/zP5BNJLGCTsHndlhuRCWRXQJs4Af0sgFpmtK2iqTnIX2JNq5AGu28w6121I1QK3cOfPYzvP/tb3N8ckxT1fSyDGGd0EH4XhdRU4Hngycd/1FK1IXpGRd94/k+rWppm5a2bimKin7fMBwN6fUyWq26Oi1YrVbMzmfMZzPAon2f0Ep6QYRuapazGTe2rvCFlz/Lo4eP+Mbv/R7HquXK3h5bkwl7u7sordGmpa0rIgS9JCLwfUarGePRiL3dXTZ3drh67RrP37vHwfGR200nCZubm/hBzOPH+xwcHLJeOc/cdDbDC1xA6CJfslgsaWuDblskcO3KHk+ePuXg4IhBf0zTmC6XzMeTIctVThTFxHGEMY50o1rFal2gjUtGPtzfJwo9pBSsOywS0l2cBoMBYr1mXRZ4nndpYrfWpQwb7XQFF4m8k8kGqm6p1lUnRHI4L60NQtjur+bfbt7/nc8fuki99dZb/NRP/dTlP1/siv7yX/7L/P2///f5G3/jb5DnOT//8z/PfD7ny1/+Mr/8y7986ZEC+Af/4B/wC7/wC/z0T//0pZn37/ydv/OH/aMwPSnYj8+Io4jTkznrpGK9yjHa0Z+FF2OsRBEggx6akLoWLFYtSZIhvR5Wrt1eI5uwsbXJYJQRJwGHR4dE8cI5862r+m427ztFnWcRQuMHHlrjlDWt+2A3betGJEJc8r2yXp+93Wvce+H5LmTOiQV2d3cZdfilXjrn1D9FsCBJMsajLcbDLZK4Txr3yXo5YTf6zPyE8aTPdDZFWp/AD9FYdOMWl0oJ8nXN2dmc+WKNUgIpfIbDMb3eCM9LWC4qlsuG0CtI4pgwGCNMC0YijEe5btja3MYTAb4UXLtxFYGhLFdONj52+xXVGoT1uXblJtOzGVUBga+pSo3hwp/ko41LBu31UrJeSr5ek69zpPCJox5lacmXLatZTS+LiYSmqGs8EzPpD1Gli8yOwpRenLBaN6A0aRQzzPpIA3EQY2JDW7eMxxNMo9G1xlqP0XCD0WBCL+lTlSW92Cn0pBQsFxrVgmksptZ4BmRj8ENBz08QQUxV50QiQJUtWZKRB+vuA+j2CKvlivVqhdWWyWiEqlqKoqaXZGS9DOmHeGGIJ9whXtUKpTTrlUNFeZ5HEPi0VYWxUNYFdV1hrdttWqswpkFKi9eJbSya1jQEBvdaC0uraoxVFKWL7R6NxlijEZ4P1mC06tR7HkJK6qYkXzlKhbWGpqk4OTnk4Nkz9vf3aWrl9nFhgsbiBQHS96mbFs933YrneV1XohA4ZqDneVitCHxB1kvBuD2UNBfjRtd5GavxrEJ4Fj8OMabEjwUbVyZMz45pVImVYLXtVHQKi8ADWqXQeBjhiq/pAiKVtg7Oi4Pkug5PgzHoLqZCSoeC93wfoxUSQeBJsjhhezRGGotoFYEVRL6P16k+p/MpdVt3yrWapiwI5Qb9JAJhqWvB+dkZUuC8Wwh6WUgvDZDSUJclw40RGkVZ5URxSC/rEcUxnhd2ggkPbRwY2fclUeCzBnwkjRL0eylZGpNEPVQrEDLAC2LCOGVdrZBBiDAKDQjfw0qBsubiOgLSdKR8Td02VHXDfL5kPnOxQFVdY6XbQ1nrpsHuwuKiWBCu45JCdp4+dyFASHpZhoks+aqkapxAzYrOxtCRKQTO0vDDPH/oIvWTP/mTXbv23/8IIfjFX/xFfvEXf/Hf+Wsmk8kf2rj73/c8+O4Rs8MSKQ0Hh0/Isgg/EHhhQBD6+LVhnTeIVpBkG9StYbnIOT0vuPvcNeJU4YUleV1x9faLvPrqizx39zajUZ/33v8eR4fHFEXJcrly6bd5znw+xxKyXJX4nofvKzwZUBQFR8eHHB3vAy1GN1gjSZIM08bcvf0yX/ziF/jTf+ZnadsGITpviR/QNi1aOTjpRx99xNNnh6S9PntXr7Czs8PG6NuMhjPiMAHhdnR7ezvs7GzwD//Rf4c0EUnYdx6kXCOES5KdLtacnp1gbUMUe+ztTdi7dpe9qzcI/CH7z5Y8uH/MaqtiZ3uHG1c/xemBIpQRjWkp8pIvff5LTKenlGXJ577wBr/5W1/lYP+Y0ajP66++SBQlLBY5PhFffvOn+b1vfJM6f8rasyzrBX4giQLXCUhrSRKfna0x1/aucf/+A44PjtBKs729w8NZwenhitgfMHxuh63+JuuzFtMWvPrK6xwd7dOYmuH2iH7Y49nJIaasGfcyaBWr1Zp+3GNrvMl8seDVT73O9b0bPHu2z3Q65blb97i6dxWw/Pqv/zrX9q4ipXTBj4uC9WJJtcxpVjnjXoZQCl8HDJKhE33IAKVa/Ba2hu62eHp6jpSS4+NjHj16xObGhJ2NTV547g6DqMfh4SnXdq+Q9ic0yiJDJ/NfzdecLs5ZzBccn5yQ5zkSt6xer5coYyiLnNOzE5yp39C0JYgE6TmwMkJQtgVGKForqNqCShUo01BUDVJCXVeMRmMXZ+KFmLalLFuCMCGIYqwxzM7PefDxR3z84EOEgMePH/Ho8UM+eP9DtLaEQcJgMGZzssVf+HN/gV5/QBC5EVMcx/T7fXq9XuepshTlEjCkaUJeFPTTmFE/xRcWVI3AURgwbvyo2wZF48btnqVpIR6GvPmTX+To+CnL8hzrecRxwGo1pS4rBM6qUS5z2jAgSlN3SatdTE5Za6LIxxMWo1oCX2Jy97msq5yiXDEcjTp0lo9WDeV6jY9kb2uLz7z4KarVkmK+olrkDNKMaZwymy/4zvfedVlJnqVpKw4O9rmyNeLqnWv0koT1asHTD79FiQFP4qcxt+5eY2Ojh9E58+U5d158jvnsnKOTfdIs4creLuONDaqqZjDMiNOQWhWs8jmDfg9rFW3bQ2iLKhRbo20m4wlxnLBar4jSMePJhDjpUZ0tkVEMtqGuFfEgQ1k3KnXGYodJ8yNXLMqm4vD4hKppOD09ZlWUrPI1rVKkaYrfxb4EfkhelBij3ajYGhrdIlpDFKeEUYL01lzZu0EcxUgv5Hff+iaNNgRdAKXDjUmMcZfmH+b5kVD3/bueVVERrSMGw17XGQmMbVHGoOq6w7wIlHa7kqZxHczLL7/C9Wu3ESLgdLZEhG6EU9UtZ2fnXahczObmDsY4xVWerzsPlJOUXuS8NE2DlJKPPvqI/qDH6ekJbatwowyLS0d1o4TDw2MefPywMz46D4MfhMRRQts2nJ1O+c533ufwyCmHjDFUZc3R0THr1dotwX3HSVOtolgXDkvShasZc5HnI7pbeUjoyS5TxlBVLXXV4suQwI8pygVx3CPPG+bzFaG/cpRtIYnCAFXXPH700O04PMHjRw+Zz2YoVePJsct96mCSTaM4PDwi8J2QxdqA4XCL+XLVjTMigiggiSOi0LHsjLZsbW5TFhW+F7K7s4dSNW1rWC8L6tJDNQZrJEVeoVpNHCekSYZqdZdSu6auKuq6YWdnh6Z1He3uzpXL783m5iZxFLNerTk8PCSJEzYmGwAuZTQIUUoz7A9JZchKO4UaMkB2Y6PBICPLHPPQDwIC33fjJM+79DwlScIgywiDAK1Ux+GzeELi+x5e6GOE1+2MBGmaUNcVg8GANEldplQH9RRAmiTs7OwQRRF5ntO2rdsfrFdIKWiahjzPUdqQhS5O5WK8EkUJaZrR7w9cZInw0E2DH/cJVecdsrCYL/jud77LJ598zGx2StO6JOT5bEFdOyOptc7ndT6d8vu///tMp9NLXuHFUt1BfY3zcynl9rrdLitJEnpZrzNUW0dXVw7T5EuJDHys0fieBNM4kQiWIArpD/tkgwzT1JRVAdK6FGIrsBiEdEnCxlpHXheua7ed6KDtkpStcUZo1WrqqnEpuspAJPCkh8TR4aVwpu8oDAmHI2gUonFGfJC0ylDRIj0PKwRhEBL4HvOFu2xMRkMEltFwRKtqWqOxQrBYzhGecHT/qqbKXdL3hXdpvV47JJY2l9zJOArxfY9GKoqioMgLR3zwPaqyYumtHFqsblitlwyGI/auXqOqW+5//IlT6eF2nw4GDAgwRqONwGCRFjY3NlyA4mjEfD5zPEbpIUK3n2079qWQLpFXaYHGuL2t5+HKnksNcKnNF8rErpu2TZc6cPH8cB3UxfMjXaTOpwsshv6oT9Ib0OoCazSN0hRFTqN8vDBxOP+24ejolKt7N/hzf+Evsrtzla999WscnU8p24aNyRZFXnD//ozt7S02Nze5fu0Go9GYOI5YLpdUVUWv12M8HvPgwcd8+OFHHB4e8uzZM375l/+1U+95PnnHX4sjN/dPkpTDwyPmszl57nKMsqxPGMaEQcDVq9dpW8W3v/0d/h//93/IKl+zs7vDnTu32dnZ4d1332W5XBInEVnWI0liyqqkPFh1UmqL0ZambanrBt8P8D0fPwyIA1itZzRNzvnZlJ2dEXHco5cOWSxnDIcT9p98wnK+IgoywBBFPqpp2d7Z5Jd+6Ze4efMa2zvbPH7yiLxYuw9ga4mjlPPzGXXV0tQNDz5+j52tq9y5cxetYTLZ4vfe+ibzxYI4iZhsTBgM+sxOF3zw/oeEQcLOzhVcZPuUV15+jaPjQ87PTjk/n1NVBVrXpL3IRZPIkCwb0esNyNcVYadgXCxW1FXDyy+/ysnpGe+++z3+9J/5D3nn29+h3+/z2muvU5YV33n7HT755BE729vcvXuXxXxOVVYMh2MEHlf2rmLrhmetpl6uHTxUgh9It+zeGCElrNZr0jQlyzIXU7/OqauKwaDP9s4Oum7cyKQqMdqQ9FLCQYb0I+qyIp8vybLUScGtZjge8PDRJ/i+h7Vu3h+GIaPxmNu3b5NlfabTGXXdUBQlUi6I44TFYsnR4SlFUbO9vUWSuFiWKEzp9TJ2d3ZJkpQkGSBlQFMqhDQEcYqQAVVe8ODjh/zjf/RPefzkIWkvpG0blGqYTt2+bXNzByklq9WKJ4+f8Xu/8w22NrbIsswdWB35fD6fO3NyL8WgkLIbLAlH+dje2iZN084zo/CMwPed2EcKAXigKzAgPJ8gjBhvbHDzzm20apgeH3G2nGGFwQ9dPITShkY3KAue0dhuLxsnPqGQCOFRViVVXXERH1FVznjreR51r0eSpm5343kdMNbtM0ejMaZpSbyQKs0ZjzYQns8qL6ioHGneQNLPCD2PDz96jBSC61f32JyMuX3veY6ODljlK2qrOZvOCKOYK3tXmZUNx0fH1G1FXdfkec50OqU/PMdYWCwWDIcDxpMJy0XOelWyWq1YLBZgBUEQcnx8xtnZjPF4hNaKxWrFCy+8yOuvv87W1jb7B4ccHB67DicMEcKBtOlo+brVqLYhiSL2rl7l7t27HQh5xnw+xfN9Qt9dwFwCtSCMIpI0QRvFMl+hraPj17Xu0gccrb8sS7TStE3rRqqiU4Dai/wy+AN/8+99fqSLlB9EaC2pak1VK1fxTYvFx/NjIj/AGB9QlFXFzs4Vbt68zXi8Qb8/oN8fsbW1g+oyYYpyRVk6BItSiuViTdrrkWUp6/UKYwy9Xs8tWGdzoshFSlyoWo6ODphOp4RBxPWrN9ne2mLQH9BUTnre7/XZ3d1jY7J56R/wfZ9er09ZVqRJhhCOhnChnJnP5+5r7T5ITdN0eVQlwmpUq2hEC6K+PDA8z31bG6VQAnwvwIYxSeKRr0vyvGIxX3N6MmMyHtBLh4CmqkoQhropqIqStgmIY+eDKcuS+XxBFLmCMZ+tOD9borWH58V4nqVtDE2tqcslIEnTIZsbW9SNQwBpDUXesC5KtBV4foS2Aq0MVaMoqhZjBV4QYa3EaFAtVKWiyGt3A9SgFcyKBau8ZDFfsl4XIDzWq4K8C2A8O51eepnydXnJyLNWkCYZW5s77vub9BiNx9y4cZMkDKmV6wwBPN/D8z2apmK1WhJFPkHovg8Xhxs4ErazScROuVeUtEq5uJC6ZDadsj2cIGjRbU0Q+hTlCq1b4iQiLwr8wHO+p677q9v2ko1Wdz/n+z5pmnYdQtuJISRaQVUp8nXNeu0yscqyRVjfXYb8PnHYQ4qAs5Mp1rjbb56XvP/eR6xWJaq1lEXLarVEeoKqai5v6WXh8Fae9IijpIsPKS+7KHAj6Is0YdW0HYrpIrHV6wqw7d6fHlK6aAuUxQqNRXWIUwnSR/ohUQpbOzsY3TAa9Ah8gW1aynXhUgPy2u3HhPt6nDLNYgTIwHOqSqBsnIcq8J2yMo5jpOcRR445Z43F93ziKCYKAq7sbHL16jWqdc7cnqFLhe1CDV0DaBFeQH88wTQVGI3wJcs852w2x2DZ3Bgymmwio5BVVTKtKoIodt4gKShrR4QJw5AkjvE8V1Bd3DyXJA3dWg72jzFdXEqRl11EhiQI/O4cDDBGkCQZW1tb7hIg3et9oRpVypFQpKRbM0g8KZGyE04cHuJ5HrPZrAPHOjm5HwQo4zojoZ1wRZnW0So6IY+1oss9u0hobmkbR1L3pI8n/Uvm5EXX9X1/3g9xzv/hysL/fz2D4QZFvmQ6W5EXM5qmAKkYDHqkvSFhlFE1mlZB06746Z/+Cf7ET/0p7ty9i2kEO1eu8Nprn0YZw/7BE54+ecajxx/Ttg29XkpVN5RFSZb1aFVNkiSMx2PG4zEvvfQit2/f4YUXXmRzc4ODgwO++tXf4J/9s3/GtWvX+LN/9s/yx//YH2c0GvHgowdMJhM2Jps0tSLp9Wgb1Y0FnSR0tVizWhbcvnWHs+kp2ipOT087o6/PaDTCGMXp2Sn379/Hk5DEEat87XYObetUYcg/EJ2gKMvayW3TIYNBzLP9Rzx7ekCxXvD2O+/wyssv8sLdm6RpyMcff0gU+hwcPmE+nbG9ucNLL73Is2cHfPObb9PLUnZ2dlkuVjx7eoawKbduPUeWDfA98GTEclFwcnxKVbmx3adefRXpBfzqr32F+WJNGIY0dYtSYJCUVctivmS5yomnM8Iooj8co+sWbECRL1mvm8446BEGCYGXcHJ6ytn5lIPjY4q8YDSZ8MEHH5HnBYvFmm996x02t7fRCp482aeqSo6OTtmYTNjc2uGzX3zTebd8ny9+6Uts7+zw7W9+iwenHzh+YBx3h5hlNpuxWi2Yzcdsb29x9do19q5eZZmvOw5aSuJJBgOX03NalGSZT1WVzuP14ftkkwlxkrLOCyxwPj3B9zySJOXo+ACEU8s1bYOxhqpsqMoGa6HIS9pWk/X6bGxska/XVGVNXTn1ap7XTM+WnJ3OOTw44/79hyyXK5I4Jo4Snr/3EvfuvESSZHzl13+TJB5Q1Yqjo2N+7StfoVEN0pOc7p8wn0+Jk6BTFBpmXfJyFCVsTLa4fn2Dw4MDTk9P3T7H8+j1eo48EEVorciVW5abjvJxAR/VWuH7QSevd0rGVjVoowBF4IPEGXSHkw18LJ/9wudBfRpTVzx7+JCmLHny8DG//3vfZHb/gRMGSNdVWSkwxsFk017IYDRC+j7W8zhdLpiMxwyGQ9LUBQwGYeC0jdrgeT7bWzvs7e7w+quv8FN//Mf5+IMP+eSDD1GNxgtCWm0o6obQCqIkZXtnB6E1i9k5q9Wao9Mzjo5P6Gc9/qP/6Ge5ubtL2VQcnBySW81oskGU9mhaxXK1Ynt7i42NDa5cucJwOKQqSxZL954ajzd44YWXOD485e1vfefSJ+pJnzwvGQ4HnY3CdwrR+ZLxeMhnP/tZtrf3GQyHl5eCqqpoW40yLWHgk4Ru7B4GHkW+5jd/82t88uA+Ozvb3UUoJoqjy3wwa51cvWoa4iR2RQq6kM+aIIhpmgZw3r/FYoEUPmXpFMxaLzrF6kXoZieeuFSY/g8/P9JFamt7j6Ye4geCRtddjHFNVStGkx4GidKKqm557fXPsLN7hTBOqMqGsmhpWoOxgqbLcyrLBmvdraxtdafq8zryg3Q3AgNlUXFwcIQQHnXdMJ3OWK2WNE3LlSt7PP/8iwyHzj1e142LfuhlKKUdXqSquuTdFqxLo3UmSZeXY43jaQlhLxVXLvlSIaVkNBrieRfMaoiiGN93H9Qw9ImiuItCL7Da0DQGYxUCzcZki/lszXI+Y70qCYOUqtJoXbC5scnJ6TN6WUTgj9jd2SCNB8znqw7VFGG0j9EO/bNaKhbzmqbsZMkm4Hy2pK41QRBd+ruCIGI4GCMIaGpLVSk326/a7rX1AJ/j43OnatIKXSmMVuRFg+9bpAicSXZeYO2MutT4XsSw78aX/UHfmZ+tyz2azRbce/5FBoORS72VLVHoXpc8L9h//NTtDH3JeuXGOYP+0Ln725Z+FLnIeVzAI8Ix8Nx/S3J8eEhduTFSWZbguQ9ekqQEYXg5WsrzNWVVUteFA3y2JUoZlKqcz6nIKeuCpinxfUkchVSNKxpCut2LahVt07r3iNKXH3iQ+H6EFCFCBs7Ai48LufSoK4MvLdZ4CBFgrcezp0f0s4a8rDk8OALr0zYNxjT4XoTnRWAFxkDWG3S0ARdqeJFvdRH78AefC54gnfRcSEkYRYi8QMClqusCkCvRgO5ysAIQLn3ACIu23W7Ik4RJhipyirZgsSrQTYOykjgbMJps0iiL9kIWqxwDtNqFPBal8wVGnudo/HVD1TSXMRSe7+MHvkvDjSP6/QGz8ymmVYyHQ54+PeTk5IzpfMF6XSJ7IY0xGARaCCqliJVCGEOtDcqClZ7bbwUh5/MV/eGIIE6J0gyL55S/Vc3GxibWWMqydD/XNABkWYY2sL9/SNZ3heBCmJIkiSNUdJ1W0zR4XkCWRZchn24n5DoaAd1eOrj0TAUy6Dp2S9M2CHySxDH6HEIpwPMkk8mENE3R1qn5Nre3XLrAaslisXCerjBACMnBwQEXnqcLMkVVOWFLUZQdhUKAlZeQYiHk5e/5YZ4f6SL1yiuvI6RlsTgnOU04nx6xXE4pqpz+YMwqr1C6ompa/uL/7C9x+9ZdwOfZ02NOT6ZMZ3OUMsxnC87OppyfTynyEm1cV+JJjyTukcQJdeMOv6ZxURmPHz8hCAKG3c1sY2ODXpbw5S9/mT/2x/44169dx1qYTec8ffoMECRRQlU7c6JqXSellBshetLdvJfLuWPGBSF1XXJ2dobWbRefYBgM+ly/ft0tVKuSqqMk2y7QLIoT/CCgLEuW6xVam66AFsSx5E/+yZ/k4wfv8fjRfaRnGA03OTk+JQwtn33jZY5PHjMa97m29wJ7O9eQIkaIECkjyrLujNEtVW559MkRpo3xPB9jDW2jePJ4nyAIuHZ9Dz8Imc/mBEHISy+9wuMnz3j69BlVVeFJj7YVSBHgewFKGR4+/IR1vqapW9rSMBpEhKEzHYdhwv7+U54+OSAMI7a3dti9usvG9rYTLmjDapWjtEbgcbB/yLVrN9jc3OL+/ftYUzAcjqjrhgcff0LghfT7GVjB/v4hn3r1FdbzFbOTU95965vEwwH5oiJII567+xy+73F8fOIOCmN47/333DhVKZccbNxcPullDAfON3Z+fs7+wT794ZCzk2Oy0ZBVFwI5nc66ZXlN2TSs127M1st6qKVBehD4fhfPgUvCbVuqqr4sCJ7nE4UJvheCkWA9pAwIgxTsinxdYbSgbQxSBCwXOV//+jdIkyFFUTGbz/F8n9UqBwxZP8FogRKWOAjo93uu821cVMlivoL+4PJAapqG4XAIcEnEllJ0ptSILMtYLlcYazsWnSNUNE2DsArfBy+QCF9ihYc1Tjghvc7A7AekgzHrVrNY5jx6ss+g18MLYnZ3rxFGA7wgoGg0j54+ZZXntNZiCkW5KijKEiMERV6wmC85O58ipCBJXAy6HwREcUx/0CfwQz54/0OUajk6PEQ1LfPzMxbTKW3Z0jaGoqxQnQCgbFr8vKRtavJVTq000gucvaLfZ//gmMFozMbWhP5wTBBFnJ6ds3W94M6d5zg8OWE+m3N25pSzYRhy9eo1ev0VH3/8CUdHxwyHYzY3t7h58yanp6c0TUNTO79cXlQu6ThJOD8/w3QG7/XaCbyMMUShG2/W9RqQ+KGzS9RVhWrBEwmD/ohelhF3I8fxeMSdO3cYDofOIA1s72xTFAUPHn7C13/762xubrJ79QpxlDCdTtHaRZY4SLYzGRtNx6D0EEKijQNpd/TirkD9EShSk41NgtBDeBYvFKRZzHI5oChXZP0Rq+KEplEM+sNLaGuRN+R5AbgFpEuIDciyPteuXmd7e4OmrbvUyYAojGiamumspqqqS65a27aXia/GGEd6Hmbs7l5hMpnQS3tI6V2O6i4Ws0Hoo6uKKA7wfZ+6bhw1wjjXv7NlCUxHLhZCMBgMAGja+vLmLoVAty21ajsVj/um+0HobuAIt9vSPsPBCKVjynJFcsHH80Ki2KcoaowGITy01qzXK7Z3Rs54PMw4Opi76G8/pDAtBh9fpsSRxJoQayIMspPVB0RhijaOjrGYL8n6ThpvjHUXAI0jYfgRQrhDOIoSPD9Eeh6r1dLFjluffppgaUnTkK2tXbCCvCg6o22E0ZZ8XVBWNaIjSZRVjeswQqqqYb1yINq6bpDSRwpFWZQopVgt17S1cvw55dJjo8g55ouiQGs3yy/LgiBwt8wgcCbvncEVlHVm4DAK0XWN6W6eojO1Nl20uLGGPF8jQ0eVblWNkAa/S4yWXQbhhWjC7RKcaq3t6A7Oi2S7cZnXMfNapHSGTT+IEPgo5UQ0xrgfVdkwmy7I8wrfj6nKmtB3B4r79S7tw6nMNK+88ip5saRtS1arBcYY7ty+QxDEPHu2z2o6JwguUDcVvu9fqrnc3iSCjirQdoq/OIoud2lcmIANgFPlCa1B2stIkLppKFYrBllGHIZ4YYIfpQg/JIx7YBsMHlXdkkUpQro9rFaGOEnRSHRVkvX7aOvIK6LrhC+2IJ6QLsZEutFur9dzE41Wk+cFx8cnmNZ1KFGSYCxUTUvdKrwgQmnDMs+pi8JR6I1FWkvZKIKmIahqVnlJ0q/Ji5Kt7R0Gw8HlJTIIA8qKyy5KCJfDFgQBk8mEZ/uH5Osc3bpfE8cxV65c4cqui794+OgZvTQhTVOKMmXQL+n3M4Kg27sl8SWL8uIcAbe/ausauo62rip27t29VGpe2GwcON5nY2Pj8r9RVlWndnY5aFp935BrtOnevy4hu61dR+fSB2z3Z3CjPtH5pH7Y50e6SL3wqZfY3OyzWBV4viGOPZCKk+NDPvzoAx49PaSqWj77mTcYDEdI6VOUS05PXNxFv9/H8wOEFOxd3eH69T12djdYr1c8efLk0mz23nvf4+133uLp0ydcZOSEoSMWTM/PicKQPIpIopTXX/s0t2/dIfADp8TC48s/8RMs5gvqqmJ7Z5uyLC4Bqo6yHnQR6MLx7fKcdScUGA1HvPDCPcIo5Oz8lGdPn/Dg4we0TUXgB9TKFUsh3ZhvslETJwlhEBGGIVuTq2RZgpCW87Mj0rTP9Wu3GGQ9LIqD/SN6sU+vN6BtNMvlkk+9fIcXXrxHHGb8zm+/w+HhOeu8YZ2XDLIew+EG/V5A01iSuO9MlMaJO3Z2r/L48UO+8513efTkMT/50z/FZLJFWVYsl2sW8yXKaOIoY2Nji92dKwyHY0ajEdevXycMA7Ksx/ZkC9O2HB7ts1ieMZkMyYuc+WzO8fEpjx89Yl2u2T88YDqdE0axG2mEUYdP8vjgvQ8YjsYsFo6fliU9qqplNp3yqU/B/Y8+pKkb9vb2uHrtGgLBzZs3mb32Gv/m13+VQFh8z/LJw09I4pjbO3W4VwABAABJREFUt27T7w84m57zmb03ODw5BmDQ77vdhzaY1imaTCc2WSwWaKWYTs8p2oogTbEYotjx/+I44Ww67y4qrrBprbtxYc2sM1deEKcHg4EDqLYt6/yUpqkJo4BBv08Q+DR1TdO494RqFctixYMHn3DzxnNcuXKd9TpHECK9EN8POD49BQlatQz8jL/1t/4WDx9+zD//F/+Uf/xP/jvSNOX/+H/4P/G5z3+e+x/e5+f/85+jn2VMNjY4OjzEGJcxVNc1nucxGA6weFRVwWK5QkqPnd1dNrd3utG2JgiCbqTo/pwI0ynuBMLzOD094+GDB9y4epVrO7tIL2A03mDv2k32dnZZzOYcHJ1xej5HWQ8/iZF+QKMUo40NNra3sVJw57m7PHnqgKme7zt6SxA4gUS3cxlvTNi9coUb12+Q9b7NWXHOs6cHCGO4ce0aO5tb9JIM02rAQxtolOZsOmU+nVJ1/rbQlwgDLEvyyk1v6vfeI3kUMd4c81M/8yd47fNvMNrdZrpccv3aNT74cO2mCr7vlJlRxCiIeOGFF/iVX/01ZrM5WTrk/fffZ3NzkzfffJPXX/s0ZVnzq7/6a5ycnNA0LaPxiK3lJs89d4fdK7uUZcXWplNg2k5QolRLGAVkvR6+gLoTQqlW86UvfQmB4aOPPuTRo6ecnBxRVSWD4ZA//xf/Auv1mkePHvHRhx/SNDWnp6ecz86x1o12264IGWMvrRFV1Vx2/Vq5rDIhu87pghv5R2HcdzadI6RHXhYEgUCZAOlpWiUYDje5fvMucTrGj3ucnM0wxqeqa1b5mtCPOu+DRnr2EpgYhwle32M8XOF3s/dru3ucXrlO5LscnLquEdJ2ox/tbtiejzA+baVZnC+79EmJ9ESHqWnQpkVpBdLHIpGeBOFxdHLGdDrl4eMnKO24e02rMUYjRUtVuOhlD+HGMGlCJZ18l9bH8xQI570y2mC0pdSVGwEayXJVEQQSz0+oa4tSEm0D6qrh+HhBgEddGMajIVeu3GI83sQKSV5VjkCtBXnplHdVqwl92UVFSKrauK/RCqyy1K3EC1KSbMBocwNlHLm5qBqkFzIabzPoj9ja3OL2nefopT36/SFBECBFhCdjrA4pK0WRr7BSMpxsEWcpRnhIP0EGPZAxZbUiSmKS5AjVKriMsvYcV864TKtWWbSRtNoivQDPDzk8PGa9LnGUeYMv3MGVZQPSfo/J7ha6LpC+RHiSqnHhbUZr1sslq8WMuiwwRjEeDtBGI6yT9ra1wZcRQRCRpj2SXowfeQRxgBUaGbpbvBCSMAmxosv08TzqtsFY6zoAoyjrEiRdl5IgAyfPNtYRI4xtULpgnU8pijGLOVT1Eq0rkBqERpmavMzJizVhFGCFoaoL6kZhUIRBxNb2Li+98gJRmtDqhrqt8XyPMPCZnp2yOJ/SS1Le+Nzn2X/2zI0Kg5BGabSxjjTe0a4bpRFeRN0aoiilVWAd5AJfBq6YWzBWYoy7WXvSdY/CA62cTLooSxTgSx/jhRg/Zl42lBqCNGNjd5fJZAPreVTWcjKfUymFUR7ZoO8oDkmIxXWVrdIEYYxFXHbaGAhkQC92I3ffD/B9SVk2nE/nBH6MagUePq2GVhniwKPtgJ+iy35qcVaFKAyRSUwtJPOyphKCarbk6fEZGydn2Dh2aQhdzlJZ1GilndCocTSH+WzZXTKjbtzasJgvODo8ZnvrmNPTU6bTKYvFEikl5+fn1I3LcrpQprYd47FVFyRy8KV0ykQE0nNUHsdfdAyIXtann/WIQh+JoZ/1CHyPKHRiimE/Yz49RxiL1U45eBnV0vnShPQxVqCNpVEWKzyUddwZg3GxL8IBiu0fBXXf7731Xa5du0oUe1TViv4wIU1DpGfYvrLHn3/+U8znS7773Xf5+m//Dq++/BppkrG/f4C1gq2NTQbDAWEYdoFyMBiMSNOYQd+ZMn3f59rVq9y9d5fFYkGe5yyXC05OjhmOBvT7Gb/7u7/jloYW9p/us5gtuPPcbfb2ruB5HsvFgsVijpROSJH2+gQdOFR6Hl/72td4++23OTs7Zz6fu7j0snI3a6/i5OSEJInwPBiPx4SBK7ZKa+qOVu2KmkFrzXw+p1Vd5LY1nJ4ckvUSXn31U0ynM/K8oipb1uuSr//WO+iqZnszIS8/zc//b/4iG9sJrSo5OTl3l4C84OjoiDgeIIVycezKLeTn8yVZvwdCsloVbr8hJLduPcfu3iZFWXN8PKWqnELqjVc+zadf/QxvvvnjDh7reXhBSJXnvPOtb2ONcxw+ffqM07MjXnzpHi+89AJGNSxXC6IwJskGHRpH8+D++3z7nXf46KOPqVu3TPaDgLKqaZVldj6nahqU0qxWOVEYMh5v8Cu/8hXXEYzHTjCR9hhNhng+nJ8ekkQeTx/eZ35+ho/g2ePHrOcr0iSlUS0fffgxVdsgjODGjVsMxhM8P+Dk5JSqaEnihN3dXVb5mq3tXba3d6lNS4Mm7aWsliuybMjGxiYnp1Oyfh9zwUKzohszVszm5yjdkmVZx0UbIaXHkhUWQ1kVrFZTlFrztCdZLE85OT2gKp38V5uWpinZ33+CUoooDlitlpRVQ1k1xElCkkb8Bz/zJ/hP/7O/zMbGkK997VdZLhdEUchgMOCrX/sagR/ysz/7Z/iv/uv/ir/6V/93fPRrv8p4NHYGVKXcONT30dairUsJEkISpz20sczmM/qDgQtE1KqD1nYjIgxaWgJrEdJ3h3ZZMZstWE1WDAdDlIFaGeaHJ86AunuFW7efc+IcCdeXS87nc/YPDtBY7r34As/dvcv5fAbSiaOqqsX3VRfq6eP7IQJHUhj0Bwz6Q5pG4UnB6ekp89mU0+NTNidbbI63urBTJ+UOCUh6vY4pCM+eHbK7s8lkPGE47NNWKw4ODykPS4LII28qztdLPvPGZ7hz7w5lXXJ+fs5yuaQoSg4PDplsbNMay9tvv00Ux0zGEzwZMJvNePZsH60NT5485Tvf+S5lWV4mJH/w4Yco3fLmm8dUVdV5lSqWyxV+4LyV1gJGU+QFcRwAIY0fcDEZmoyGXLlyhTj0yNdLpzrc2yPwfXZ2di6FG4eHh1R1TZL2CMOI1TLHCyNc/TPftyV0mKpLQc0PFCRx8b8f6vmRLlJKG/KywgsSyrrBrySeLxDSELWKRBuCbueRZQNa5dzmQkjaRlGUFdJ3hO2iKFksVqxWK4LAo20UdVWjlWI2nV5KbZ26qctiidzIUEqvCyWUzOdz5xnofC5VVXLcQSSd32pNnKQ0zYWqz0FCL25GjjbQtdHGIDtPTNil1vZ6EY3n08qWtuv+giDA/gHH94X09PtR4z7g/BKz2RopHUQ1jlJ2dzaQBvaujNjeuUKc9mmaltlszXS6pCxblLZEcZ8wSFHaOdU96aG1S25tWu34ckZ0fC6XaVWWjQOHlg1F0bB39So7Oztsbm2BFHiBI1L7vkecJIw2Rh3R3WIwhHHUeZG+HwAXhAFhEkOgsVrRSzNGww2Wy3fcgp4GK4RLD6VCeu576UmnYIqjGKOdwGRjc4utzS3G4w2Oj04p8zXr1TlVXTl5r+87vp0QWCGI4pg4SbCVU/k1VrudSudHkVJirEFKEJ4gSmIGwwHDyZjeoE9gFKVq3EHoBbRte0lAd14dB2QtqpogcK+LlLIjoVuKYk1VFd2SG6LIJwwF0rNo27LOlyhdsi6WjnMXRLSqom4KinLByZkA6RJelamRnqWq12ztuPwjIQ2HR4cOdLxa4/sB2hpOz8949Pgxjx49Ymv3ioOyStdhWiGQvofBOqJ32yJ8QRQ4xmQYhZyenbJ/cEA8nV4KLISAIPDp9RKiKMT3BSIJMV2Q5WKxZLlYIpH0sz7z6YyDw2NWCxfVnkQxQRjTVgVGCOpGd6RwR1lPe33ipEea9hHCKcz8IHQqQiHdRcBYPD8k7WUd1id2nx+jOyK+i0Zp6soJQjxJ0HnjmqbBcyFjYCyeJ7pgzcYlBggXSUF3YNeNG39NZzOy01N6WXYZVRFFEUIKtwPV7mAXOJh3FCadQk9d/hACiiLvRsApTdNiuUjfdUWHyxGc6cQTztt08e+b+iKMEdarFZPRkDiO6PV6VGUO0JF23I7K+Rz1DygJHZ5UYrvu7TLSQwhEFyXv/FOqm+5d/Hsud68/zPMjXaSqWlGUjXOg+yHKuBGgMQ1V23J+tnTFJcv4zGfeIF+VPH70BM8PKRc5RXGMPIbVesF8Pufo6IjzsxOXa2U0jx895NnTp8RxzCuvvcLW1habmwnGaHZ2dkmSiKatybI+d+7cRiv4+te/zpUrV7h56wbBWcA3v/lNPvroAzY3N7lz5zZxOqUoa8BBG9tW8Z3vfIeHDx9SFBVpmpImCb0kdctz495QWE3WSxgNRuimoaort4yUXneLDS4jCSyiw7Y42XDWywhDr+uilmRZzHjU58aNa/wv/+f/C+7evsXmJMPKNb3M8o23vsZ3vvMOs+mK87MVvXTCvXvXqQpLvq4RRAgbITCEUURV1VRVge9fRB5Yjo/PeLr/DC/wXEZWf8xf+9//p1y9eoN8nXN2dkq/3+9EECHj8YRXXnuV+WzO4cEBvazHxuYIP/C7tNDYCQZ8D4zz33hSsr29x5MnB/zWv/lthJRUVY3wfW7fvk2vlzmqR7cY396+4vZHQhAGMT/9J/4EV69eZTFb8H/+v/xf8YRhd3vE7taIybiHEC4eW7ctcZzy8iuvsjEe8+DhQ5I0RRV55yXxuhGSK6JRmNDvZdy4cYPBaMzrn/8iYb+HUS3z5ZyPP/4ErQzr1ZLz8yWrVe4Mvb5PL+uxLiqiKGJjY8zW9hb9fsZ8MWc6zQlCj8lk4pSlo4ytnQ36ox7r1Zzj0wOaxu1J0zhlNBrTtoq8lHxw/3uo1rIu5tRN4w5PaVnMZ/zE7TfZ3Jlw/8GH/Kt/+S/5lV/5Zc5PT/B9j6OjE2bTBd/99vf4J//k/8V//Gf/E5bLJZubmwjh1IimixivqorlasnW9hZbO9v0sozlYsHv/O43+O3f+V2nOO3ILUkSc+e523zujc/y2qsvs7O7TeALjG755OET3nrrHT784APKvKCpG5qqdgdl2zLsD7hx/TrXrl5ltcqRnmRnd5f+YIwXJQxHI1546RW2r1xlc3uf0XgDIZ/Q60VIT2IMIDx6vT47u3vcuXOPmzfvkPUGKOUgyLu7uxwfHVCVJXXjDNi9LHWcwbqiLAsXLCkkGEMQSPJ8zXKxBCF4+cXnGI1HBHFIrRuiJGa2mPPe++/z8cNP+OKPfRHf99ja2iKKYkbDkaNKrFxid6sUT548oSqdsEoIJ9CZbIzp9VKOjpxAJ8t6OCOzuvSquUu38ywZK7okZ43EhaHWdd1J0MH3PZ48ecLGxoRr166yu73JO/mqOw+PqduWg6ND6rpm3sWHIKUTb3k+UeSEU9LgoMwXuDffmdkvxGX2B3ZQ7q9/JCToda1RBqfy6Sfd3sXD2IAsG6CVRitDvz+ibZxsUylDFDsQYqNqmralaVQns61ZrwrqcUOWJoRhDEiXPIrAdN/sNHXxCc5FD9ev32A0mqBaF3W+vb19eUu4GJnEcdz5HNw4zi3IHQi2bR0BO+5izo0xNHWNS1HF7bz8iMDzCXzfOca7/YvFJaAaw+UowgWQeXiBW8aHnVR+b28HgaY/SOlnLtdmZ/sq/WyA5wfEaUhVTxH0kCJDCk0Se3gyAhsSBB5CGNrGoNoS0Rn2lHKF0e1ILGVdu/GjhaZqyLIBW1u7rPOcsnDFLAgDR3TwfEdZFtYJDqxxhUgIkrTHOl+Ql2s2NsZI6Wbd2gpCP0IgO8VkjB9EGAte4ELylsuCurGEYU2Uum5OtYYsyzBa09QN739wn6pSeFI67JIwzBdrkjggS51izvdD6lbj+QG9XsZgOMKCC+4TgiAKEZ6HxiJ9D+3mKp0PJyAII3fTVBYpPHw/opcNqMsWrCNTtM2UtlE0jbrcc2otUaoBHCVcqZpW1wihEVI7kLWnUbZBSIsXCIQwNHkFwtDrJ2xtb3T7HYFRguVqifAMBvdnt8LiBTBbnvHxJx+yLlecnp+4aUF32IRRQtsqgkCjjGb/4IB1xxH0fJ8wDLsdrbwkcFgh0cailHsPrNbuZl4UBU2raFoFomY+X7B/eECSxpxPp8RRQNvWHB6e0CiDNhJjPZdkYAQWHyuhag3LvObodEpZlEgpEF7AYDh0UenSJy8rTs+m5GVNGKdkXRq27Zb7vh93XYGkVZaqVlRVg9Ggsfh+iO85dqNLRm5RunV7YukoI6L7BAopCAJHIlHC2VfyIkcbl2vVdFaTsqxJ+wbR0UjcSN+x+2SnHPW719Qag/R8lGpxokjHRbyYLEgpaNuaqirxfeFeK2NoVduRVVxO2oWJ2llYXHimMYbAD8AawjCkl2VEYYjWmtBzET9ZluEHAb3MTY+apunSogNUdx5eMErtRZckxfe9UN0+X2t9SZuQXBQm+wO+qn/f8yNdpJR1ANm60Vwfu1TXpi1o2oJbt+9weHDIalmws3uFTx48oiwq6kahtDPAFkXF6fEp2jSsVitU22K0Jo5jbnz2M5RFyf6zfdLUqeUsAqVaer0eu7u7SClYrZb8zJ/8GYcsKSquXdtjMpkQJxFFUTAajRiPP835+Tmr1Yqq0Xz84CGr1Yr1Oufk5Iw8z8myDBA8e7ZP2zROKYSLYvY9SS8OGQ+HbEwmnJ+eupuRlLTGzZ+b1iFJTNeCO0J7QFHUTEZj7t27x5/6mf+AT7/+KmHkIhuUavAEZEkIKKp6gRR9rE5Jok28jSG9tMVoiTEeg/6I9bphNnN7rSTusdSrLpzQja+apu7wVK6YHB2d8bkv3OF/+uf/PA8fPqJtNDdv3mTv2hW8IEAgHSxztSSJU+IkIU5T2rZhZ3eXf/0r3+Sdd77Fpz/zOltbm/T7fcajTe48dxdhIEkzxpMttnf2yIvSqdfalqdPD6jrGoMbS9VV7Q5WIYmikI3xhH/9r3+N5+7c4c0332S1ylkspjx72nK+OyEOX6UXJfQHI6y2RFHK9Zu3uHb9Gu989ztYhFtsewnZaEilGoIwoqxKpJHsXLvOeGMDpI+uG2oKZByS9oY8//yQw/SA1XLJ+XTOd7/7PsvF6nLsq7TG8z3quqKuS4pixWq9oK4rhLTUdYHvp2AVq/WSKI7w/AytG+azc/qDjJdefpHPvP4GWhuOj0955+13eXbwDM/3vi/6sdAfZvz2736df/PbXydOYvr9IcITbGxuopUhihLWy5UzvBc5v/aVr2CMdmxILrBHkjhxyJ8wdLspZ2QuLqX8xrpQQSHcmLtVDd97/33e/+B9wtAn9H3iKCSKQrIsJQx8tJH4fkJVaarG4PsxyjS0RvLs6IR33/8IozVSuF3tj3/5y4wmY6zw+OCjB8zXBXlZsr17lTfCHicnZ6xWK4RwXql6OmU2X3J4eEzWH3JycoZShiRJ0cqQphmBL+j3M6qqIM/XNG3NuN+H1CnkWqXwhCBN3CU07ozcR0cn+IFPoxpqoxisCwaVk6MPo4DlasU6z1kul+R5folB8oOIwWDAYDCgLGu0dt9jP/AZjYdsbGxcUknW67VTS/rgC0ekKPKCg4P9Tm3pCp7Dawla5aJjgsAny1KyNCWJQ3Z3d12EfJI4Ravvc+vWLba2thC+x9HJcXderd1F2oLSdCDcGPAuhVsXibtBEHYFUnejPRey+QfHfH9Exn0Ny1VB2gtplMFrNKo7HOvGkX6DMMTrArnqUmFM3fGzPEeC7vZTAu9y1uqyr0TncwocObluiaLWGSijuEPA6O6bJC67l36/D7gbg++7oLIoCrHWuH1XmHRcNHfDqKrq0kdwkchqnfTJ3UB8ibBgOgXQhbfD60xyQjg3v5TudiMs0OW2eJ7H9vYut65f49q164yGEwaDMb4vL4uUamuE9BF4SBIEhn52hV66om3mNPUCKX2E9TAW0jQlDF0oWpJGXSS72/VYIGwDlNaUTUMQxIwnWwz6I8Bjuc6dr6utWRfrSxL8ep1zdHTC9taO82C0tRNBhK7wlVVF09RdKu2FH1Bgug9L22qiuEdZtfhBRFW31I2i1S4KAuOixJtWO5mZlRSlGx9NpwvKsqZV7vVTWpNXFWdn59SJy+RBdL4kZViv1ihlqJuWME2IksQF3Sln9lyvcvdadOZVz/cxCKRw+ztP+kg/wKUnX2TsODHBhWfG8wRCWMdX80S3b9Ao1VA3BWEk0MajbnKHuUkTmsaitKRuGya9Mb1eRpqmBEFAvi4veX8Wg7FuV0G3Q1OqpWpqLJqsnyGE16nvcHI7z4PW0VKKsiaKIoLIAykuOZNYSxj7xHFMEIROqt26Qlh1BtQL+bnWjoDStg3WGorSIAWksQvm09qQxDEW15kr7ZSAdaPxgwgQVG1NiyQIQ6Q1VLVivlwT9TJ05ejjtbYY23l5pE8QJkSJcQT7ICBOG/wgRlvJOi8d98+Yyx2zI7ND4Aedz8d1MOAI79ITiM7AqjvVmu3i011qsMQCvud3QgLnC1PGUNX1JTneEcNdXxaEAaPRiDiOaVt96ZmL4xDPk1irSZKY7e0t93sshJGbIlwc+kq5cfjFjupiEnRxzlzEt7eqJSGg1+t1dhyPKl9d+qKU1vT7GZPJhOVyyWLpduYuiVlhDAjc/llKuj1Y90ObS3bg9+XptttJycsz8od5fqSL1P7BIauiJI49Gt2QpD5eN85olWaQZUwmmyRJwgsv3uX99z5hOl0wHI45P52R9Qb0bsZ88vEH3YJP0Ov1uHfveefKVpos6/P40UNGkzFBELC5ucFkvEESJ3i+JIoiDg8PWC6XhGHIxsYG+/v7hGHA5uYmW9svAdb5WtYrGmXJsgFSSj744AOePNm/NOi2rVvYegjaunEKKKXRwP7+PsvFjK1N5ykqm5rj6Rmyu7GEolvwW7pRi8ILDD/3cz/H5z7zGTY2xpfLamPcYtXzQnSrHSTW94iSIXFvyGuvjYjjCf/wH/7Dbh+UOrOf13L95k16/T6LxYLr129hDHgyuMSrWG15/8P7vPfeewxHQ/7j/8l/QtbPuP/gE548ecbm5ibHxwHvvfc9Z0QsSp492+ett77Fzs4OV/eus7m5SRj43HnuFv3hkCRNWeU5g7piMwgYTdzXgudRlhXzpTMpaw11c+5GN7UiDKMOkGnoZyO0MdCNe87PzoijGG0cTd/N1xOqsuXsdMo35ufUxYphlvK5z3yam3du8/TZM77z3W/z9jvv8KlXX+H57ReJeymfPHnEuiw4OD5ikPV56YUXuPv8PaQn6fUz0vEY6bkxiVIGD8Xp8SknJyd4QUC/PyBf511c+8BFKHgemxsTtra3GA4HnJ+folTNbHZKns9p2powDLlx8wb3Ts/wPTg7O+J3f+cbfO7zX+D2nTuMJmOu7O4xX+Qoo1muVw6DpJ2pVXbvuzCM8AIPP/TxQ5+qaGhKjdH2Mio+iCKMte7P142otNYdU9Jd7Pb29hy7bblitXK3/Iub/IUKsNfrsVwuKasc6QmynvMLauWEBVmSsl4VSOno6WVedeZ5RVkWLvVVK7QRXLl2nc3JBqosOD8/551vfwf77e+grKaoKhqlGYwH3Lhxg1s3nqPfH7K7u0cUxWit2Jg48UFVNbz33ocsFmu0sqRJyp07d5jPzvAkBJ6gLmvCKAStndk4z0ki1z01VY0Asp4bJdedKEEbS5ykBEmA9LzOCOvEJUVZOz5kHDOdzlCqpWlb0jTlx378xzDW8tZb36KqKrLMpUZfiA7efPNLJEmKtfDs2TO+9a23OT45c5eiIHAJEF0BdEVKOQisajvWZExTN8zOV9TlgDfeeINPvfQSJ6fH/Pqv/DJVVTGdTlnnOT/zqZ/l8ze/xNvf/Ca/9mu/5jo06aGrhrquyXp9BJ1gyzjqRSNc+Ct8XyBhjcF2F+eOOfFHo0hZBEVZIv2Yum0JtFOMaWVZrFaEfoBqHbvP7241Qno0dYPnByA0baOQXkDWH6BaR3dumwZPCuI4YjgcMhyO6Pf7BEFweQvQxiK063aCICDLso5p5roNId1SVbWKMAqRwiFjPE/gB343+pDOBX9xw9K6C/N2XZzulo5S0AE/HQ4fXPcUBCGNdkh8hER6vru5+SHjfp+NLReMFkURQRBgtHa7q9ZgrTtApPTd7coGCOGh2hZBTBKPuLJ7i/XqI/J10/HmFEq7w6LqxlCeF9DibuhJ3EMISRTHjMcTrly96jxQYcDDx0/cHirwEVI4yGe3gF0uFxTFmrLImM3OEMDtmzdZr1bu58vikl7gdYw8l7XVsloXzOdLrHFkAXepF47E4Aed+EEifR/TtGhrOiZj53zvYq3p9ihOkeWTF0t00xKGEXGcslysCYTj0e3s7tJq7UzDnnfJifMDn1Y54v5itqCpW8qqYbJaE6V9rBQu5wi3m/K8kPU6pywr6rrF8wI3NtWKJIlJ0rSjgKxp2wZjNcvVoqNROLmv7zkmpGo1Sn+fvLBc5JycnJP1RjSN6lz+whE5RICQAdpYrl27ztn5GUVVdKICx5EUUroUXc/rfEbutZWydYquTjkKji83GAzwfb/bM7j3b1GUqC7Ms23dYj/L+kRRgtINCEO/n7ld8HqF6jovqzXGSqT0cZsMjzBybMooTvG0248hA1ptEMIjDGOUse6SZzXKCmqVo1rDfL7ivDclChOyvstZC8IQpcwl7NbahjhO8D03xm1b1Sn8WkfV8Fun+hXicreidOetjCOUamlV4/bGoY/fui7a8zxns5Ae0pNOwddoWifv7dSbIVEUu27bWoLQgXvdbpbLHWWerzk5OWG1WpOmDmV00bF4nkcSx3BBKTG6m7C4z4sUzigdBOHl50dI0eU9ub3ahWF8MZ8CFmsNR4cHJL2EtqNenJ6eIqTrxsPAAXqx3y82lwQK2xFEZHdeWoN3oYLtAhP/SJh54yTm7PQM1SZsTIb00hCroakV+88Osa0m8APKqkUIn6pWWCmZLVcMNka0bcN83tAfD+mlKU8++YQnT55wfHjAndu36O/tMJkM2dqaMB6PLxeb1li8zgAnrWRnaxfpC7f3qGp2d3Y5PzulLmvauCb0PbRq8YQgSEOC0Jne4iRFeiEGD219lGndBzEKUErTWI1UrnDFoY/ve5ycHpP2eni+Ty/tM9vfd/sfY7FWUNU1X/jCF/nyT/wEb775Jndu33YRH5XGGEUYBBgtwAhao9DKEvoe0jpj8Xy6oJdl3Lv3OlvbN/kv/8u/zbvv/T6L+Rk7Oxs0bYm1ml6WMl/MSeKEVmmiMGFzY4ft3WvsXbvG3Xsv8KU33ySOY371136Fr33tN/hf/ef/GYN+ynDY56WXXuDg4IC33vo9vvn7v0dd1+w3FR9/+B7PPfccb3z6JfaffMy73/4m+08eMB4kbE2G6LpBNw1WGfYfP+X+R4/4+IOPWcxXbs6/Kt3XFMRg3QfC95x8XyvjAu+Mod8bEEex64hFQFtbVCtQxsFNj86X9NOAdDBiY3uXr37l1/nUi/d46cUX+FN/5jm+8hu/QVkrUm05O5tR1pVbNnsRnzx4dImFQUj8MOX67buESQbWQ4QxWzt7LJcFDz55wvvvPyDPXVpubyBpm5qd3S0m4yFNU/Ps2TPW+YLp4oSHT97jfDpDipheb4zv91mvKwSG+WyJNTEff3TA9CRnczLh/GjB0dExbW0J/ZSj+TFh6GLnN7e3+XN/7i/yzrff4XsfvM9yuWK5qsnXOaHvIiSiOKAuS6qi6ozszWXxlFIwnc34whc+z40bNynKguPjY7RS5Os1y8XCZatpw2Aw4PrNW9y5c5eNjQ0Goz7gKNqnJyccHR5w/6P7NE2N0S0YJ1axCEeHGQ7Y3N6lPxgiPXdhWywWDtMV+oy2EnbimDTrYbCcn5/z6PFjZos5Z9MlR8dTPv+5gCjt0e+YeINhTV07TyIyYmv3GlHkMeon5HnJII0I/RijW7w4IfA8Z7WwbvzWti1JEjEZbfPJg0doXRNFHr0kBKwrdkahdYvnCdqmxghFUeXs7m1hlMaTHrdu3ma0sUkQRu6iFAZk/awTbCisERyfnnB8fApWcnIyo99P2LtylV4vZbFYMR6PGQwG7rXPc7TSXUSKjxA1vueTJD3SJKaqChdamaaMxwPSNCWKIrKsz607tzg+3kephrOTI/75P/0nvPbp1wnCmPFwxNNnByxXa7wgZDieYKzAatVdrrui5Ny6aPgByT+eh+ngsggPNyP69z8/0kUqS1OWoYtub5vmUtKtlWE6nRF32TFhWCLw0cqploIoJIwCalWjjEaGAWEUkvZSVFPhd25szxNID/zIv4zGvmi7jTUdbHZNv58ReQEekrLVpFYSBSFVVYAxqLZFty2qdbcxpRRF0VCUpZOO030jkVhpUcZihMBKie1Gc0JYellKWVX0+n2iwO8WuxFpEKCMJS9KRt0HcHtrh+FgRBC4haoxqjuo7Q90cIIu5dS4bCLfi8H4SC8i64/Z2b1BknzIar1iXZa0belel7piuV6C1yUQS0Fr3chCKdCdHHWdFywWS4wxzo8xGXXhaBdeGY8w9LtxT45RLXWZE3hwcn5OW1dYrRE4P5JWLWhDW1Wsl2vmswXz+QKQTnWodKeA9Kgbp9byA7/rBC4GDZIkdiw50yFbVKNRyjrfl7V4QYgRAmVFFxLouHhNa7DCo6obl/mknHpL4EL2rIXFYkUSn1/yytrGEUMuOjjdOnVVkqQYI1mvSsqqcf/tbk8KoHRDWeYsFguUrtC6YV0sWRcrF4tuU/e+1gJfeug2IPD7qFaSr1vioGYxzynylrYGa3w8ESEJ0VbQNiBlRF1porAH1BjdgPW6btRz45kOBSE9XH6T53ZZxlrSnqO+S0+SpqkTqxin5rrw0vSzPuPxBntXrzvFZBDRtJowdDxLIVyScC/rY5aaSrl9Slk7T1kURWT9Pn43vvX8AOkF+MGFMMZDeBIZRvhhghCCMK6I0z5xo5Cem5y0FozwsNKjajVaSJQVNAbwQpL+kCTyyAYp1Wp2OVmoy9IBlLV2++3AnTmeJ120uoQ4Cdzr47vEYIchCjHW7Yc2NzeQgQAP0iylKkviC1NxECBwEvOmaTFtS9s0nRJPo5TpVgERFktTV6wxLNIlF6rjJEncBbpT4sEFed49F1zAC1Ot66Do0qAN1riU5LTDdsVxhDWa1aJhdn5Grz9CtU5UsspLpzIUEmsM4mKP3iX/Wgvafr+bstD5xdw0y/whjLzwI16kXnzxBXZ3d/jq177Ce997lzB8lV4W8+TJQ9759tuMRhlJnJDnFaPhBp/59Bu8+OKLnTDC0LQNYRiS9TOSJObV116hnyTcee45wtBnuVqwLtbUTU1erN0YazKi109ZrXIePHjAJw8/4eaNm9y99xwYy/HJEUHod6M7y2q95Gxa0bYNURxBU1FWJ8xmKx4/esZq5dQ9Qrh92GK5wKCdUdBzhwXCMh6N2draoijdG2Q82WB79xqTyQZ7e3sgPRaLJds7O/zYj/8429u7aK2ZTqfdmBKs0URRRJrGhF0InTWGpizRSiGkI254vus8rBH8r3/u57l37x7/8l/9Y9774Nt4fkAYuQLw8NEjbty4wXg8IUmTbhxwxlu//y0++eQhZ2dTnj59wvn5GVnW5+233+bw6IBbt24wm81IkoTPfvaz9JKU3/rN3+Tg4ADTqssRxfHxMW3b0uu57yNwGZm+mK94++23+ea33uXJ06cslivyPMdap9zU1lLVzvDsm7AD+HbkZQHjycSNSoDpbM5isQKpUbqkVTmbW9sYVaINBEHMc889j5SWR4+f8OTpM/YPDtna3XXxJcbSyzLGGxOaquab3/oWQZdXtLO9y90XP8Xmzh5R5jJ+zk6OqcqCMAwZjoYslgvu3/+YvMwJI78bbdW0ukRbWC5XIFryasbJ2b4LhhSW07Mc1aZsb13FKEWeN9y+/TxWK4r1iierQ4q8YbHIOT+fgw2ZTHZABKzzkvOzJf/i//1LzJcLmqYm8COaWoOVeDJAisCVdBkQJ4LADxgM+8juht80DS+//DL9fp/VakUcx5ycnJCvCpRWJGnK3Xv3+Mxn3+BzX/gid+89zz/6R/+Yr37ta3z88UdkfecJvHJll1s3rvOzP/uzvP/e9/j2t9/h9PQUawWxH3F9Z5tPvfwKSeoSrp10WxGEbr8SB/6l+EBr041krzAcTwhCF0HRy3qXXsLz2ZzFsujsHpYoitne3WU46rOzNSZLAj5499ucHjzm8Sf3OTzcJ/B9irLkxrVrPHfrJg8+vo9WisBzhXznyg5eJ5ZartaUdeOwYkYTpxF/+s/8acLYXYz90Ofrv/11RkMYjyeX+W9eEOJZWC4WnE+nnJ2dc3BwyNHREZ7nc/XqHmnac3vY2YKjo6PL2PlXXnuVra0tptMpR0eHaKPxfe9y7yM6+nllNUHgu1yobtc3nU5p6ppk0OfuC89z/8P36Gc94ijkg/feY//wiHC5xgsc5NbQ4Y+A1arohEVuNGuNK0zGuBXGxV7sDwZk/mGfH+kiZY2mlyZsbW7geZbAlyRRSBKH3LxxzUlbw5jRCNLEZbJczNJddLcDWxrr1FNhlJFkKUEYECcRVmiMMAhP0OtimF1QmsULPMIoIO2laKMuXeJhFGKEpWoqtG4xaJq24QKoeKF2cYtnw+7uLgcHJxyfnnUplxdzW4Hw3C1ZWLfkDrqogwsFkSe9ruDiYrKrmiAIO9Wac/enaUqaOo6g0Zooqh1DLUtcVDcCTwaOPYeHNcIBIT0368/SjOFwzN7edT786HvoTqmjtO7ehJamdfSOqmpYrepuaSo5PT0jzwuUahkMMoIgIkkS4jghimLXaSAIg5AwCAn8ACskWda/9LiZbk/kEkYvYqpbqrKhrtsuUr1yCjnTUcg9Z661AmTHlDNGOTWh726NUZxQ5EWnPnNqME86CkGrDMILaKuCutEUZU0Y99BN6RJvpcX3nfqqqtvL/++6rqmamrKuCPp9tDE0qukW2RV1W4EIqOvSRa00Nednp+T5+rLrolsol2VJvg5ZLOZsbW2BdPSSuqpAejRa0rYhrbIo7WG1xRgf3+/RmgpLjbFQlIayMKjWx9rIceOsxOoAT0pWy5qmNCgDymqMsngy7IrUhaTYIKUzKvtBiBAW0d3AL/w0WOtgulrTKuf1S9OU8WSDjc0txpMNeml2SXa/8NfYDjoLzp8zHIwYDcfOSiAc3UQbp4INwtDtEj0foS1RHBNEcTddcipJId1kQliJ9NzuzVhJUStk6xiJpmoJA9HxHUFbl69VVw2z5YqmCWiUptGWVlvKqsHvu856XZTMF0ssEj+IHO8xSTiqK6xwOCjPDxCB36VwGeru82GEdXDlJKGX9vA71WBZFG5iYJ2yUHZSbd/3nNDJGmxHm3C0G3d+ObWf2y3FcUxVVZRFcZksfvFeAmcVsB2h3Pc9d/6o9pKeY53iCmmhP+gThwFxGLK5uclyvabqknbTvuPuKW1QnRJSSPeVWsQlJ/FCSXhZpOT/bwUKfsSL1HI55+WXX6aXBWjTkKYRXmDZu7rF88/fpGkMFslwkKK1YHq+5vDwhPl8ThB0IzxrmM1n+JMx/cFVbt++xY2b10mSEIOhUcrtoLooCK2dkTJOEu4+f49rN25wdnbGdD5j0Ouxs7PNOl8xm51TlDmDQYZSDaPRkMnGGOH7KO1w9xubG/yH917E92N++Vd+lQcPHjAajxCW72P2uzdaGAT0krQrTu7HxsYG2loODw85PD7BGLh2/Rq/8RtfZbFYUpYlzz33nMu66qX4niTLMq5fv8q1K1eI49hJfTtvVRAG5HlN22qEJ0gyJ2199ZVXMbbm3fff5uTkiKLMnVAiyVDacnh4jLWS1aLh5MjFT4+GI/7pP/mn9Ad9rl3bY3Nzg1u3bvETP/Hj3Lhxnaqu+N673yNfr2kaRRjGbG/vkqVd+u9qTRw7JIwr3NKlnx6eUKwbiqLm5PSU5SpnsVyBwHndjCExbjYukESR6/DWKucicdeTkrSXuWj0suTp030WqxVxEhJFAZGXUFYNs9kaz/ocHZ0TBgnrxZLlYooV0CoHrq1VizKWYrGkrJ0xu6xrdnZ30W1LWZa8++532dm7hpEeRnis1jk3b93m+O0jfvmXf4nHjx8ThCFRElM3FWVRs1zmrPOcRmt3uIuG2eKI5eqcME5oKo+6CZ1keytw1OkGtjc3qIo1uoVlveDweMbZyRxfxkiZ0jRLlssVaZoxHmQunysIaHVDaxr80CPyQyQeWlt83yOKU3zfJ4pDJpP+5cHWti2TjQ02Nzc5Pz/na7/5m26vtVgxGIx57fVP86U3f4zXPv0Zrl69hjaGLOvTHwzY3NomCp0xVQgPT/pcvXqNna1tNjY2+MY3vsHpifMDnk9nqA8+ZDgaE0UxwvNIej02NredrL7jZgopkb6HkMIFIDaKonaHthFOqg2dZSGMCAJX9JTS7B+ecHp2SJUviQLJzqTPIA1RVlA2ihRJWbd8/MkT9p8ecOPaHsNBn63tHW7dvMlssSBfr8AqkiwjqxVRHLu993LGb//277C7t9PxIT1ee+11zs/OOTs/Zz5bcHJ8TDYYEPcysuGQOI5JU2e433+2z3y24uTkDGsts9mKOA7Y3tlCAO1ZSxiGFEXBk6dPOT8/7xKRv6+uU0phlHEXZ+MKHtYwGrpYmvV67S7sWnP37l3K3Nkbbt28Sa8/4L0PPuTg6Iwo7XWXqAJtBWnSo25bjO70E93Uz3aS+AvD7oWar5sI/pBoWff8SBepKPBJ4oCN8YiiWhOGkjAU9LKE0XDspNjaMhomWCtYLr4vi6yq0hkNreuUXJ6LJIojhCfxQx9jLV7od4ZBD19rlzrZeSKSNHEhar3YKeykAElHzu4Gr9LRf8u65PjkCOGHNI0GXOELAqfIc2q94PtfnAWvi3yw8vs3EonoTMfm8iYbdHuCuq7IOxrARYLqxQ/f9/E9D086R7gbMfD9W1TnuZBSgnBdkpSCpm2wuA+2VhKsj2rpnO8eVamoa2fSVMrieT5JEpImHtPpvCMptARhRL8/pNfLiOMEY+zlISGl55KLW81kvEEUxnjS6zxoEq3t5Z+xbRVV3bBeF46HVru8JqMdORwhEdJznR5uLm6s60qt1niBTxiEnXfEkdGbpkYZcwlGVQaEBisc7XpdtAx6Ia0CpUD6AoRTmzW1dipLVTsVm1JOwed7+MKRKarOlLteL7HSd4tt3bDOV0xnU3dDxqm5ZEftAItRBtVal8Fl3N83jUHpmqaStK0gDCXaeijjgQhptUAZD208tJGUVUurLNZz3UbbglZglNsZBTJAGHuZ8hPI4DKoTnadnR8E3Xvau7wwSClJeykI5+1xAoSSVrUIKUmSlDjtYay7eQsp0a1j/iElulO0umDHuPNbQX8wYDQaMRwOOTs7w2qc5Fw7H6EVAjrUjxf4tFqhWtsR2Lu9rqHbmTm/ZNm0KGvQuPcFVqBsS2hc3DwWl4mmXbKvsQq8EI3EegF4AbU21MpSNS1Wu//mQHgoA2VdYxC0xmKUwgHDnJLY4BijZVVRN45GoVrF5sbGHyBDeC5x2Tp/kSvaHlHk2JUbGxNAMBxlnR0kIUnijnjjMuiUUi49dz7nIsnb5biZSzXmhSL0UoGnnWTcmgteoOuEsixDq5agy9oajYYuvl7ARXq4aruUYm3AysvPpxAeomMEXtBzLn5c5InZ7nz7YZ8f6SL1pS99lo3NCcZukxdr/ACi2GM4zEhij3XuojHq2sVf5HlJWZYEQcD9+x8ym03xArcLQoC2GovB850cGekOi6Zt3DdJWqwwGDQde54oCdnZ3Ua1jp4chAH98YDNnU2WyzlHRwdkSZ//5v/23/DP/8U/Y2d3j7/6V/8aL3/qdcqy5e233+att96ibVtu3LjBbD7DaI0SLb4v0UphbMN6uaIuK/wgoC4rjg4OUdbjpZdf5tVXX+X9Dz/iX/7Lf8U777zDH//Jn+SVV17j5s2bjMcjoigkinz34TWWIJD4UtI2zutirHLjkUCQ+iFh66SlddWgdMNv/dZv8kv/+v/DR/cfAapDLykGwz6PHj0gDGOuXb3OxsY2L9z7FNev3+TmjdusVmv+3t/7rzk9PSGJE1555RUmkw3AyV3v3bvHfDajlyRkvR5np6fsbu9w8+ZNtjY36fV6PPjkAfP5zI0AtWW5XLGYrzk5mfLs2T7L1cqNj6QkSXrOMOv7lHXToaIMZVV36CWJ7zk3vNIGbQx16zAyQvpIz1G8W2W7UUiAlD6Pnx0ySFN0lWOUZZQN8Lwl67wkSnPCMKJqKoqqoGpbgiRiMBrRVCXL6ZTz6Rm//9bvkQ3GBFFC0yrKquB733uXp0+fkWV9mtY4LI91Iow07eH7gqpSNLWLOmgax05crqaUuSXt7RBnltW66HYBktl8TZmvaMqCvKjJiwZjnVWjqlra1kmTi6rAWs3tWzdZLmeUdYG2bj/btDUWSxiFhHHoLBRSYjHMVyviOGQ4GNIf9OkPh6zynNPpOa3RaGPY3bvKjRu3SZKUr371N5ktlrzxxueI05ReL6M/GFJ+fJ+zoyWvvvoq9+7d48bVq6yWa25ev4HfGbxPT895+vRZR2vvMQmdCbqsHGk/iCLKqunk+/6lSdV0B2SrHeqorBzLs6idmtBae0lFqCtHzr9yZZfN7StsjJ9nmMVM+ikHTz9BBiFpNuDs/JyqaYjiGM8aHj1+xtn5FPve+3hCMhkPWC7n1FXFdL5A+CFVq2jahnXRkqS9S7am7we8/PIrbkpjLZPxBts721hjaJsaawSe7zEcDvmxH/sx/ov/7X9BURSd0Mbyta/+FovFkgcPPuGTTz5BSsl0es67776LRXJ6eupSkr2wA1D7tK3uRuficjyKlLSt4vDoyPEUswwIiSMf1dSURYEFrl69xnS+ZLZYs8rzLvLedCkd7lLoeQHOLuC6WmvocEj2j/ZOqihqwlWBOzhrdxMIQuqyRFiPptGd0sxlqFwkSiqlOiVgy6ooCKIJi1VFURbuFiucQkd27akyiojokuLw/bRJzUVcNgCd09qTsttzqY67ZfEDj9FoCFjKwhVL8CnLkvVq5fKFuq5H1Q2R53cAS9EdQK5lj6IIIx2j0PM9+lnGaDRie2eH3StXqOv6MocmjqM/4O1yb06v42tddGJaKdq6wvd8IhN3tArnihfSYLXpdjABggDwnJLMtJSFopeO2Nra5saNO2xt7bG9uclkvEm/P8T3Q7a2tnGZWx6BH+J5fkfKkB3RI2TQH9G5TxiNHC1Bdrf1rNdnNJrQ7w+7eYKkrjRanbo4787jpJTpMnJCkLL7eUelaJXjzGmt3SJbStdFd7c7B7+UDillhdthaYNBYvBY5xVZ3Mf3ou7XOU5hUZSkdYofBvhhiKdqUK6jrprK7ZB0i+dJyvL/S96fxdqWZed54DfnXP3a/WlvF31ERkb2bDIjRbEpgqZKEmAJUpVUqIIsQ3oiKAG29CDY8INtQSLkFz+peREkGCiKtqpkyKYEmkmKvchMZt9ERh9x+3va3a9+zlkPY+0dmaWGSQFVQEIrcRF5zz33nHP3XmvOOcb4/+/fEiUpFmQzdXLKCSNRi2qt0TicFZWg7ltgtlNYK3w52yoCk6BVi1IefEBTW8q6JjBGfHBdKyd2L5EZTdthcdIx0EgitJGqxmgPdBjtCAz9Bm5QWjKuglDusSAweOVpmxZnGyF+O7unqszn8z3QNAgl5ToMI66vF1xeX7FYLFmsVkxNSJKmmF59qRSMx2OiMN4zHNtWKm9jjPiU+hlu17MA21bMtMYEfWqxxTtF5z3W9TR+74RT573Mp3SIDhRBFIOWRIAojHqzdyuYpHxImkSk2YA0TxFHRoAJYjABRd2I9N16VE8Wb1upQjZ1y/RgStu5/qCjwDq8skKJN+aDjbORWdF6LYGHTdP0cvNgv450XUcSJz0lpOHo6JDNZkMUxdR1y63bN/FerCpyWpaIl+1221c3dl8t7VISrPVISoG04oIggJ7td319TVEUlNstqE4ILZ3EwG+TpF/nRNwhkfCaIJSqtO1aokieaY9g6nz/v++eSen/ODepX/tXv0o2yNHacnp6xGCYYAJomoo0TxiPD8jykQyBdchiseLevXvir3CWxXLJ3Qfv8va74NuOYZrwmR/8QXwPjVQ7mXb/4mqtCHs+Wdt2e4XTB6cEJ5BQW/PkyWOqqhCvRFfz5//8n+NHfuSzfP3r3+Ktt95C6ZDnnnkR7z3n5+eUdUOapt9hwAMxRWqMCgm0ESk6Yp48vXmTlz7yMV7+8Ic5ODzkpZc/zGc+82m+8Y1vcT1fsFgsWK83PH78hDAMSdOELE0ZDQckaYJtapbLJcV2i8YyHAwIwgCvBAUVJSHGK64fnnPjhqirvvDFb9C2tbRDbM1iMedP/Ik/yR//43+CT3/6h4nDCNs2AubUmrOzC/7SX/rLPHx4n/lCRBTWiuFSoUiTjNFgxHPPPofrIxxCI+3VxfwarTQf+chH+MQnPs6HPvQioh7SPH58wfXVks3mm1JJ9Ry6OE7FfOo/eN8624FTRErR1CIFj8OIYrslDII+Cj2nbjpMqFHGEekU22rKumG52pDHC1589kUGocLZmvniGuvg/OKS5XbFs88/LXO/QcaDJ49YLJd8+4036OqaYZ4xnk1ouoarqwsOT27w4kvPs92UGGO4dfOU62uhlRjnoW0FWdNa6rokcYZi27DaLKnbijBIGeSGJAxouojVeoV9/IQsSzFKUZdbXNegFdRtQ1VLOmoSpRzMRqRxRppkzC8vWSzmtE2JUo7xeCDR694RJRHKKOq2kUiVQOOVhw6qogbl2Ww3RHFM07Xcu3+Pd997l+V6xfPPPc/zL7yAbeE3fuM3qJoGlKbpOl7+8CsMBiOefvpZri8vKNYznnvuOU6OTwQOi+fe/fusVyu6znJ6esrdew8oioLVek10cclmu0UHAcPhSJBUnaNpPG3XiXCgEj+XDgxpljEcj5geHBClKZPZjDTJSLOMLM0YDIZSaZUVo9GIMFCksSFQlosn9xmMxgzHE9TDoBcdeDrborTh1skJV1dXIk7KE7ZFgQ5CiVuJIh48uiDPIkbjAbdun9J1ju22JEkT2rbjX/6Lf8F8tWA8HnFwcMBwMsE7i8OTJAnHJ8e0X25ZrVbMDg4kkdnI5n7r9i2+8uWvUtc19+/fZ7nacHFxIVYP1F4eDzLa2PmlvPJ4bwHZZMPAUNc1v/e7v8tkNGRbbNHKgmu5urxgvVoyHY+J4oSzszOqqsRZR5bneC8Q3+22wBonUSu9sNx75GDdb1Lyc3zvGKT/7+v7epNaLq+wrsHahvEoxbmKINRU1RalJji7oLMahZT22+1aaAlVKaDEPl/KBNJLbpqaotqyrbZ44n1OjvVyugl6AvneW+B7d35/omzairpuaOqS+XxBUW7I85ymroiTiCwdMBiOWa7PhBbeiBpM9YNorY3QAbxCe9ereHq6OL6vqjqiIGA0yHvl3kDM24GS4LbRmMVyJbk22w3bsiTqSRZai3DCWtubf9n3qlEO6xp0YPDa0doWE4Zsmw2dsgRhsO+RN3WDUTFRYDk6uM3x4W2ODm70w1nBSW03MhsbDgYkcYzRhrZu0V6jrUF3HV3REmYBJgrQvdPfWScturqlqFuiKBP4ZTIWcjOKsmh7Jz4oFYASDmHYz/FsZ3vfhvDpMMisCHoyh6Epyj2NIjAhzuyks6pPElUQxiLND8Slr40hMNF+drmpVnSuo7ENTiVY5aRl7C1VVdK1csrsvMMoBUpo4iZoWW8vsb5kOE64ml9hnUPrWCpIY2jqUk6+XgjcbdvSNp4wCtAIzFNZUeStihU6VCRRQGvrPgbXSzKvsRjAaIhCjXUVxkRECYShA90QhJBlIXEm4oAgFE+LccJl8+g9W9J2Da7TeGvRyuOsMCWLokR5JfMlE9DWDZv1ChNGlEXFZlNQVS0HswGDfEQcpoQjgZEmaQpenqHL+Zz1esVquexpDmn/taFpWiGy952Mum7EouEU2hs0UoEGobQCoyQliGJMGJOmQ+IoZzAcMxiI0jfLB0RJQxiVMl/Dg1FAR1F3dF5DEGHiBK8jIdGYkE4bXJjSKEPRKQg1unFy7yGj6Q5HbYV84XVI1ViiJJVKTmnmyyV1K1lt27Leh0S6zqIiCPsK1nknG24c4awjCAISnWFCA0aEIuAoig3OWSRC0vUzZaFVyD9LQxDIRtt9wATUfVdhtVhy9vARSRqSJRFd3Qq80dMDgi060OhASxVtgv1BXmnw9AQJ5fFIJbvjP3p6Xp/sVDKrV/JZ38v1fb1JPbz/PuvthqapWS1forNiCK2bimeeeYYHjy+5nq/I85wwjGmahjyThNMgCPYmuTTL0JFjvlrwxS99kdde+zpxkpAPhtJHT1KmoyFpkvRViajOqqri8lKk42VV8uT8CW+8/jpvv/0W52dntE1NEBps25EkMYcHB5zeus3N23e4ni94cnZBsW24ffs2V1dL6qoliwdsG2F5GQ1hFBMFitF4ShhHPH78kFc/82k+8fGP89Ef/qNstgWf//wXuJrPaZqGupHcF6UUT86eECa5DD9HQ44OD/sHNCEZxORZznazIdCWOAkIkhBHx7bc4B2EOuXR+WPeee99NsWG//NP/zQXF1c0dUcc5zz77DO8+upnOT4+5N77Z9y7/y5RCG+88Qa///u/T54lNFVF01QM8pxxPmScDeH2HZqm4fOf/z3Wm3UvVZ6Q9gPhbVHwla9+jbIo+eTHPs4Lzx6TBELZ8FqBDriezwnCgCiOaa2lLSxK1VR1Q1O3NHVDluXEWYI30l7BOSISMXZ2Fu8asixjOJ6wuLqisS1FW7EuN3gc0+GQO7fu8NytO6LCchWTUcbJ6QkfOX2F1996jXfvvc2jJ49YbudESQRKNnxJA3bEXctiveTk5JDBIKO1Jd/45pf54he/wnpTcXQ85v7Dh5w/XuC9Js+GTKbHeB9hreRYNW3DZr1hW24ZjycoHQv0l5ayrajLGusa8jQm0BBHmjAwGBORbiPKdUldF1xfN1xcnDMdj3n66af4oU9/Ams7JuMxcRJiYsV6U7Ld1lzP15SVMObQjbTPulYgRcrjrWW1WPDm66/z4P59Vss1SZpxfHzMW2+9zfx6yXA0ZrPZsl6t2ay3ZEkGSnHnzlMcTMYEWmJomqaWNOmm5rd+6zd4/713MUbz6U9/hqeffhqlFEVR8uTJYzH8WkdZliyWa5IkZZTNGI2n3L79FIPxkDjPiOKYMImJkpg4SQn72J00zQhCaa0NRsM+eHKLxzNfLCSstFzz8Mk5visJ4oQ7zz7PclMKazEwpHnC3SfnbNYbcFC1BXFQkkSaIFDErmMwkpynqrUUZ1ccHp5w8/aE2YGQxY9vnHJ+ccnZ5TX/+vc+z8mNmxgt2K3bg0GvkB2L/cIY0sGwN/Ur2tby4NEjzi7OwWiBE9eNVDpKY+K03/Q+aDEqIE5iojDn4aP7ovLLUoZZytmTJ/zCL/wTDmcznnnmKX7sR3+EGydH3Ll9m5defpGiKIjzHB1GrLYlj86uWKy2tF1LGPXYrJ0oQ/FBu88rIVKge9tC71PE9xvV97bOf19vUp3tqMoKj5W2h23ZbjeAECdWqyXL5WrvrcnzAQrNZDIRlpZWPSbIYYyg9xfzBcVG5Nh5UTIcjwkPDcV2i+26fX6O1pqqqqjrmqIouJ5fy4PWtpyfX7BYLNAKVN0f+fE9GaNjNp5QFBVt3aERSrJRiq5tSJIMheoVa8LtY+dL2JG8tQQaVmXFLrPF9RywXXm/k39qFL73D4k3S7hezvdxHqF8b7RkwPhOVIG2Vwg5a6Vs9540i0mSGKUMYWD2hPcds1BmZ9K3Pj8/ZzjMsY0IQOIoYrstpEVQluA9i+WSsiz20QMH+oDBIBdPmAlwYUSgDYEyuLYTmjQK17bYuhVFmvIiWAkCojDs50z0HDnxVWkd9KFvSFRFL8vdkehFVal67az40kRxJbLdKIokPsOFoBWu/1RtNHEUS9Wi1P57R7202hhFGBuc7+T9pPeX1Y2Q0bVBa5kZmkBjrUIHoWQ5BRFeG8I4o+kUYZyT6qDnVIraVIeG0CqaTggFLgrEN4RHK403RqrT2OJ724MxWigh3hJGIbZqUb0CVTlZQCQB1u5JBG3T9jTxFuVESYn3hEHEerWhaaRFaa10A7yXEMQdy08psM7RWfF6Ga0k2kND08+Im7ZluVzKbGXXrurnUXKgtD3bT+7rqqoJI0H5ZNmQLM/JBgOywYAkz4iSBB0YgkioM0GUSqBh2Oc1eYkOka6C7X1DFttJ+mwcxXS+IVCK4WDYR5BohEjf4nwrlY61DNKYsigxUUgYfOBdUnqHNRL1YdvavstQ9Pekx1lPVdYsFyuGwyFJIkZ6hSaJU5Q2XF5ciCk9EDVsXVbyutfN3lOFljw5pz1Bvw54FM576rYhDsJewQlJlGBti9p1iLSsN3XToLTGhGG/Hgj1pm53is2UziuUugZ6+pEO+nrou6uiXZem70/0H/1O8bn/N/7Ov+v6vt6kdrj8oqj5+te/DrgeZ6R58623MGFCkuQUmy113RDHS05OTuDGDcbjIacnx1xdn7PZLojSmPffe5/33nqT7WbFYDDg5OZNbt25w0svvEio5A2VnJwtFxcXHB0d8corr3B2dsYbb75J3TSMRgMWiwVJkqIQccWzzz8tgohegvrxj3+Ssqy5f+8Bm03Jl7/8tb4FGYmK3Si6VgaYgZHYapRhXRR8+823+ZEf/TGenJ3zxnu/yE/+1E9J0OLJCdPZjLPzc+4/uI9SiuFoxGZbSxJtFOJ7w+l2W+BszGg0JB/m/RC+o+lRR0mWEAYh602B1obT41MiteTLX/waw8GYthEp/i5jZjYTD1jb3eLi4nFv1oQ333hLkFFRyGq1JIwikjRlu97StjVvv/MuSivquqRtWz772Vd59plnefqZZ5hODnCdJQlCXNOg4gRXNaxWSy4fPEZ1jvV8QbWpMNowHg6YTGd0nWO92aCVZrlasi42BIkAQ7MkIYnjPrQyoNyK0lNrTVXXErioNUmcEBhNXW7ZrjekScr44IDpIMK7hqv5OV/+ylcYjnOeefZZHj55QNu0JElMOplQ3zpl134PwxATahxSXa37BeqHfvizvPfePX7nt7/AcDSltTHOGdJ0RJ6PODi6QRgnhFEIyjE7OcUYw3K94tGjMwITMp6MSb0hLSsCrRnkEmZp1I4t6ZmOxnjrWFxds9lsuHXrhghZwoDHZ48JjaGqK7xyrLcrttuKshS0FQg6p6hLeY+akjQSG8OOVvLw4WOKrbDgmrolieJeECOZUgp6SPCWi4szvva1r/HRj3+MV15+iXvvv8fDRw/EW1YU/Mav/yu8dUwmU+I44urqmuVSkot3JuHNWsgvQRDyiU9+itMbtxmNj0nTnCiOMFEoLWtAGalM8pFAbderDUopmkby40CCGIVU4vex9oM04pOf+CRduaKpNmw3C64uz9is51xeXRColq5tsLblqds3+PjHPszXv/YVhnlOEkVsi4Lr+QZFjwbqzaxXV9esVnOOT2bcvn2jrwgrlssln//85/mxH/txDo6OWK9WDAZDXn75Zb712mv8ws//E9I0ZTabEYXS/vyVX/4cZVkR98GcqBanXJ+CYHsGpRJlcLFFZTmqdCzmFcdHR7RNRV0VFOstd+7c4uBQknk/8cmP88Of+Qxnjx/w5ltv0dmWy+srOif2gNnxCZfzFXVrqWsRr7i9ptzxweYja59338nn83z35vQfwyZle3Mtnu1mgzaSkBnHMcvFivE0wPWy8s42BFac1l3XEoYyNDc9qZyeZFwXBYv5HGst+WDAermiripa7/bqwNVqxfX1tZywe/FEWZZ4RCGlMH1gXNhDKDO6rkVHkl0VmIBAd0RhhLNbXCdvpkfjVIeznbjh/e6komiso7OK1oKJYhbLDfN10Q9JDVmeMxqNKMqCNBWEUJamOCsPZde2tG0gJPOuw/mop22ARkmCa7fj22mUCiTGo3PsSoeuk0qssx1tK+53azvarkVrWZCruqK1HQ7YFgVxkuzVkNttyXK14jK7xjtH2TS0bQPesV4tcc4TmIBQhYwHQ3EAdA6DQnVW4MGbgnK5hqYjcB7j+wVZKYzSqEDoHMbovcu96+kewF5FZbT5rmrKWmlBaK2JTEgUGqr1GmcdSZySZhkmFIhw3XRsioLxwZg4DvqhtJxewyAgT1NQUn0aY9CBobUOWzZ0Vv6NxqRARNNCEKbEiSTPxnFOEEbESYYKI4JEghRjk6HDEEdD6wxahZgwIbCeQGlwHqM0WZyKMpU+CTUC17XEaUndtuTDgdyLKOq2xSvxTNV1yWZbUJYNTS30EdXPEHzb4rtWYmOMKCCNDgiDWOCs3mP4QPAT9jM8ECl1mmVip7AtnWvQ2u89N1VdYfv4i9V6yyBLhc2nA7xX+5mvQsv7qg113aC1RKtMJlOiPCdKUqI43lP2rZO5CDshkhKVrtYiArHe4nufkBK9NFqB0dJhyJKcDotxHbUJGGQp3nUY5fCuAdWS5YZsYJjOcoIQwkSo5dLycjgvdggRj8o94JwIKJwXBerOx7Rebyirar9xJUnSpxdEnJ2dkaYpZVETxylFUXB1db3nIhrTw1rtB/9m1SPAnBevnvN+r3LWKEIVsKkajJEW6HA0ZjSZMJlNiZKIpmvZlgXX87kc+oKQPE4ZZAMRPimP0p44Dqma9gP8OfRzqZ7oA8gL8MEG5XeO3/8YNqntds2TJ49ZrZZCALYdLR2qR+torWnrirppGORDmqbh+uqCJ4/GnBwd461lMMjpuhEKt1ektG2771WvlivefPNN0ijk5OSEO3fucOPGDZHORhEAN2/epKwqLq/mLFdrJpMpZbHFWk8cp1xeXvHUU08RhxHnF9e8+cZbWOt49933+cIXfp/Ly0tRorUyUyqKgjg0mEBgmp33nF1cstqsefWP/hjnVwu++NVv8tq33+J6seBP/ak/xTPPPUucxNRNzd179yjLkiROOJid8M7bb7PZbsiylIuLi/7GTHqxht4PXMumYzye0dmW5WLFu++8z1e/9FXOzy5pW0ue51RVxXw+ZzQc8+EPv8y22PDO229z/37Ivft3+ca3vsGD+/f39Ifr+ZzRYECeZ3zzW9/i/oMHRHGMbVuGw5zAGJq6oipLsizr29WK2XhCVzdo64lNgHKecrXm21/9Or/127/N9aMnHE2m5EPFtio5Oz+n2GzxWtM6gf/maSbij7qU1mQUyQLWt3h2bdHlciWveRLLZty2zEYj6njL8dExP/ETP8HXvvJlvvaNr/Pw4V2KcsNonBGcGeIsBC/RI8PBgMlswGCY8uTsEUVVoHozbFHVbDYrtpua8eQQ+84D1puGW7ef5ez8miCEfDBhPDlC6xDnFJW1FOuCxWLB+/ce0bQC8DWBoXM13eU1bdOy6A9McRBw62MfFYZcKOIFqWYcpyenot50jvVyyfX1FVcXFzx89ASF77GGHttJSJ7tHMZ48jxjbYVRNzs+YphnfZhijO1bcF1nSdOUk+Mb5OmAw0NDGIrIZjabcefpp5gcTAmCgKeeeQoTBHzlq1/iy1/8IpPJmLZuuH/vAWVZ8qM/+kfZrje89dabPBUnjIZjNustW1swHk+Yzg6EjVdWNHXHaDRmeuOOBDNCL1d3uF5sUq43LFZrOicmVBTEUUwchqR5wmQ8JI4Ey6W1ESl/V6Nty+hgTLUdEmjL0cGU0SDFthFJErBat7z4wm1efPE5xtOM6cEQ23Us1yvW65LJdIZWoXAkO89mWwCOODT4a0/zrddpmpK6rgjDkPl8zq987nO8/u1v88lPfpKnn366x39VPHl8xvXVNevVhu22kJDOVjxvTeNIUkMYBzIm6NvzRofEUYxRId24Q6MIdECahpw9OsPgiPoD/ac//Rl+6o//Jzz3/LMsFtd87Zvf4M3XX+P64px33nlbrC6TKTdv3eHg4IjpdMJ8uWSxXHIwO6Jq2r0pGKTdGUcho9GQx48eEcURtj+QBkb3XYb/SNp9SRITRSJkiOMY50JMYOSGUwaHzGICY5AZQY/ad93eA7JLs3RdJ4NhJUTpOBKWnO7bfN13yNGDXrochuE+6VJiPIS7lSTp/k0zWhGYUE6eYUgYxpJhpTQaqeK8c1I99bMls49gFgJF21qUVnQO0sGQbdVSVA1t23J1dSVzlUDaVnHvrwBAKeIw3P9e6Mgym/AKyrqhKDYodP8aaYwJpWh3iqbuqMuGsqjpOksUCbbH9z6Utm1YLpdogwgethvW600fz+D3MwXrhe+3LSuiOKFqG5qmkXlBFPUnSCEBOCcqKaxDWYd2olAyzuPrlm5b0W4KjPVEKGxgaLVGezkpOye9eHCS4+M/SALd+cI6K+q/nT/J9lEDMiMS+oC3Hu01yivKoqIoKlbbgm1VygYXivjCdOIPEeaaQfld51/o8Mr0XiVrqBuoG01VwXpT0VmNCVO0iUUhpUI6C1iL9wrrHV27q2qiXlkq3j3vFXXTQGdxbQdBKNWhhTCN+xGb8OUEfCrUkbZthBSuQyyapnPgHForTEBP9xC7hVagvCcOAtq2JuhpBYEJpc1kAvFuOi/fNwjEbxfHDIcSVbGDN8sstyROY+q6YLWa70/cDmlxx0lMmmai2uuTAcIw7L2JwoiT9Gz5Vde1+BoDiYDw3mMRaohTqv8larTWdiijegQY+4y1JI5JY1Ek7qqoDtdH6xiZGWtFFCiS2BCFCmN6K0iqyYchJrSEiaKYl9RdjQ5Fdae1KDX1zitlETZka2mabk8233kGi6JksViyWq3ZbkvqupWZqjK0TUdZVhRFyWZT9u17aSUGOiAyIWCx3kvnAYVy4LGE2qC9QnmpMOkc2kgWd6A1URgxGk0YjCc0tsUrmWWJgbwmcgFdK6nYYSSvmawpHuelk2VtT1pRMoeUGabreYPgjagAlaYfg7j92vsHXd/Xm9SP/uiPEAQh9+7d30vDBUTa4Zznzbde5+Gjh31VIej5MIoBz2Q0YrVc0rUNm/Ua29ZksQBbT09vcHJ6wnA0YjgaMx6PCIymbVvm8zlRFO1bjbuY5iSOuXHjJoEJODw8ZLlYUBYFKM/N0xPxOShFmo65cXqTPB8wmcwoy5Lf/M3f5uzsjLIoCaOI2cEMrQRzVNZ1L27QWK+oW8vj8/sUmzXPPvccVVWx2WzYbrfENmEwyPvo6ZbxaEQSRfvwx+ViwfX8muPjQ+I44uHjR/ytv/W3+PCHPsxnPv1pPvHJj+FRhEEs3LwgIo4Skihh027YbFY0Tct0OgEMv/ALv8Dl1SWz2YQ7d25hnXDWiqICpUjSDNfHopdFQVmWjMcTkijGo1hvC6qqoqsrTC9mSJIUpTV1XbO8uKKtalITMhtNuHpyxvXZBeVqg69bQGHx2K6TLHZ60yAfiIekBSXxBaExYqIsK5xzDIfDPVV9PJ6I8KLr6KqauigxXnH/7n3+wT/4B1xfXxLHgrwaZHJfeCxFURKGijhKWC6WvP/+O3jVYUJRpG2urqlqMEFO0xjqRmF9yXJZARrnFLPDE5K0YbHa8uDh4z6evsPhmE4PuXP7KW7cvE2UZCxXC96/+w5379+lWK+ZDoacnpwwm80YDIY8fvSY8Xgk7EcdkA9ElVoUhUTDGINXAUGYEAQpSke0XS2S8tbuEVXFtuD66po2z5hNx0RxiDFw9+59jDIMh8Lgy9KM1WZDWZY46xnkQ2aHOcYEJEnMtthSlAWX80seP35EaztGowHD4ZDTmydoZRiNNMPhgNF4QtU0bIuS4Wjcm3oD8nzIZlNgO8fjx0/YBXw+ePCQ6/mC+Lik7oQm0dRNT5QQv18cx+RxSBjPyPOUKIwItCaNEtm8tcFbR9s0NHVNuS2hs2gP68UK21aEgWE6HfPMM7dJEs9mfY2eGI4Ox6SpwbqaODHUbYnHSYBq16KsRytpi8ZJSte2GK3IhzlaQ+BD0jTu14Jpn4g753Of+xXi+Lc4Pj4mDEIOpjPaumWQDbFOQL5KCWBaDkNCgEFrtlXNtmxAG7arNeW2IouFAO+tHEiG+YA0CuVA5i1Xl1eSADwcESYBdbMljgz33nuPB/fv4tqOfDCQpPHDI26uN1xcX3N2fsZ8fk2S5mht+naxmOTbzlE3NWXZR5oY3RuCP5hH+b2g4t9/fV9vUlkuSZ+y0BTE/Q4vVIm+neMsSRz1J3Uv8FZjiMJQIB6d7QGVvqdyi0oszzLiKN7TlYP+ZCQx893ewLtTQQVBiG06GdTmOXVVi8dGeQaDoZzynCcKxQuke9e7DOlFJWS7jjAM5JTkFboLsL5CA6EJxKcTxaw3W7x1ZFm6VxpaJ7LcUTTsPS0ysPReTrjeub5N0PXx8pambbl77x6j4Yj5YiGprtb1/1Z5AHSP4TfGUFYlztFHgjsuLi+4vr7C2oY0jRmMRzLz2zveZXbRdTLL2+VwWe/lVOytKBY7S6jUnkShUHjraaqatqwxgUNNDG3d0NU1IRrXtKhQxCDKyclWS9NWNijVVwN9LtKeV9a3c0EUgLvDRhSGPc7FCeW5tr0y0nPv3n3A0VrFZDogCCNMEOC87I2u5yTKe1ChDWSR8CKdU9R1R6TAEwABbSt+N6EsiAdGB66fH1ipFJzHBHKyz/Oc6WRGkoqXx2gJ3pTWjhUhgdYyZ6pquqxDKQOh7udfQgpxTvWG0AgIQAV4L6pC5xxhIEuH0eLF8s7tK/QkirBdQ13Vkj0UhKI+Q+0jT4QiIcrMtG8LllVJ0zX7w0DdVISRZjDM+xh3+VrGhBweHsrrp6UbIfR633MoDU3b9ZVUQ5yKMKPrOjrnaJ3QRCySveaVqC9NsEvileiUNE0ItCHUhtAEKOtobSczYSeKWuU9GmjrhqaucJ1F40mikDgylAaM8cSxJgjBedmk2q6js30Sgg76ql78T1EYSfUuA6p+BRMlrqQUCGFjvV7vD795npNnA9IkQyv5d+SR+KW00gSBYI/K7Vr8a87TGkutZORBZ+maljATsYu1HhwkWUqsDW1bo4yiqcRvtkvnjZKEdJAzGA2I45jqO9ZI78UILK9rSFGsSdL8AwQSbr9GSqKwqGtB9R0YUeSi/PeqQP/+3qTefPNNbt++w82bN7l//z5h3yLLsoyrqysxVHYdN05vcPfuXaI4FubYcNCHyS1wtuX48BDvOupijVIIZuj4hHwwIIpjZrMZQSCcqzAMGA1HnJycEAaS1LtcLvG+3p/ekyRhOp2QZSnOdtR1y4MH91ksFuA1Dx484vDwkPF4Ig/vZgu9EdJZKMuapmloeqPv4dEhcRShjWEynTAcjZiORzz39NO8+eab3H/wkKaTU/3BwYzXvvVtojji9PiaOquJk4jhaMj7779HPhigFHzzG9/kf/mn/wtRGHH/7n2+9Y1v8kM/+CmMHuN9uAdfjidjUIZ8m/P47AnLxZKHDx/Stpazs8csFku2xQalFSf2VCgWRSFDaGNwXScHhJ7kXtc1RVX2zvqYrmkIteLjn/wkH/3kJ5lMJwJgbUTJt12uGKUDTm/c3MvV27bh8ZPHhJMpbRSLfNg5bN/i8gBaCSVBa7EZOFkssizDaMOD+w/Ybkrh0qFpm62IS5qapimIjGE2nZDEEWdPnnDz1g0mk5g40SwXC5arOc63DIcZk+mQzoK1Ck+EMgGHR7eYHJxS1jVKhyidsd50Ul1tC+bLOW3T4r3i9OQmg8GYO7efIooS4jghyweMR2Nu3LzJyckpdd1w//59rs4fs15ckYUBPpD8obaqeLJ5QF13WDw/8AM/xO07E+Ikpa4bLi+v+u8ls6e2aajqhrbpeqlwv9l2nRzU/JYwipkeHjGZTrh48ogHDwrC0DAeTxmOxgShpEevNhuZ+Q4GhFHAZrMmyQZ4LxEoKEWW56R5hgkMcZoQRxGBMdR1RbFZkoxSDo8PeflDH+bq8orzJ+eslhLo99Z8zma76dvnndg0sozJeETXSXz7cJCTIpJnrfTeeB6FMpeJ4kiYm1YG/M5ayrJm3TR0TUtdVnIgahps12GrCtfUBFi0b3B2y3pVsFoWbNYNRsdEsSOMUrZFxWK5oCxbUIrJdMozz77IcHjAZl2yWRc0VUOUpBwcHDIdj0jjiPV6zu3bN7h96yazgwO22y1JLD9rUUjQ5Wq1YrVc9xv4MSenN3jqqacZDAZ46zl78oRHDx9wfX1Jud1yfT2nbR3hICIIImb5mKbpyNOBmHKdxzYtgyzDdi3brbThGicH1rpuMaEnTTNeeOElnrn9FDdPbvKbv/brvP76m1zNV4wnM2YHB7zw/Is0dcvde/c5O7/E6IBBPmA6mbEpCq4u59imlUOil1BRFXh0IPJ2jfrO1Pl/7/V9vUmV24K6rIgCQ5rE/TyjNwhWJd46gv2p0/XDQy2O6qbCtjVdXTIaDoXUHYZCAzYBUZwQhpGQwZWEwHmj9gq4wER7TIn30gM2WmNbUU5psWETRQnWSu7QerMlihIuri9IsgSMobWe1skvE0Q9zRs6Z7HeEpmILE0wgZTKURiQxIEYiuMMh6ZuOsqyYbXaoHVAU3eEQURdi3rHK3GfWyvKwa7p2K42PLr/iCyI0c5TbrcSE15GPYvL03S13EgGgjAiUDGBiakroXY0TY1XwoVbFwUH1vW+EIdTnigIaPrwNbwjjmO8l5RgAkOURBTVFh1EDCYj0LBYLtgsFpjW0tqWuq1p4hjv5fXwytP4Dqc8LZ7WOerO4o0w9RxglQJtsIi7PQxCbNdXID13TxuDDkOCKEajoXO4rkMH0qsPkwAVQ01DRYdOxRyK6vBasd1UaKNIvaazBusiOhehozHOKKzKccqBjlAmpLO6z+ABtAEdQj8XcGjCUOLaB9lAIlTSIZPxjCzN0Fhsu6WtFtTbK2gKImdRQUgA+K7FNZIgq4OgT4G2hKHkF7nO0lWFBOGZgLapsb2qMjCGRikhWXcys+pSAbypOCIdjejOz6mdIokyBsMpykSiXAtDeb/xaKMIAkXT1TKn0FBUpdDlGxF7BFFCECSk2QCjFLZxRCYh1AFREJFEscyIsgTrxNtYdw0Oi3V1Ty1tUViUspJjZBTaydxFaVHTRUkk898oJIgMUlQaGtsJjcRa2rqhLku6pqWt6r0CVnKbWlzXoHqihnMK24a4JiHQYywhRgU4n+J8SFWBJSaMR4TJiGwwIx0dsKmu8Kajc5a6cYyHIba1OOMIdEhoUsIgx3UaZ5XQ3JXDqBC8wbae9WpL0zqs16ggIUqHHByeCiGnaijXW7SDlUko1zWFLwXNpAKc8thQE2qF7eSg6KIAY6DTCmcN3ihqHGUj1JA0FXVyHMXoMGcyXhEECc4plssl88U1w9khSZKTZSPSJMd15ygjJH2jNMYjv5yWzDqvxe/Y505JQrX6bkXgv+f6vt6k1oslj/VDbp6ccjidCburLKnqhouzM+qywqDYrtbkScrRwSF3bt1imA+oipKqKNBK0dSiWEM5RqMRTdPupeXWCmgxCIL97wHOzs7w3hPHsWSxwL7MtdZKj74PfgPJOiqKEmNClssloMiyBdtNQd3z1eIogd4MKENFEVCkaU4YGUkjDQMmkwlpJjJz72GxWOI9bDYbHj9+TNmn915cXBAEmslkzGQy4ZlnnuGdd97hrTff5O7du3zh85/nL/2lv8RiPqcsC77yla/w8ssv0XaHvSn5XDiHXhFGMePxeO/+Xy6XaC3GaOdliF1VVS/eiAlDQ6A0cRzhrIhXpP1T0XkBkR4eH0m09sGMT/3AD/L7v/8FfvWXf5lvf/0b3D465s/96T9NbAKqTcHhcEySZbTWstqsmR0ccN3KCbB13XdEVfcw3b6u9d72lYLtM3ZkGP+jP/bj3L59B+ccb77xFqN82AcjegaDhLLe8tabb3B+fs7B0SH5cEjjGnAOrwKidEBnW4qqYzAyXC3WgCJKh1jgweMrmqamaeVwUpQtRdGidcTB4TEvvPgik/GMw9kBWTaga+Tw4Kygti4uznj33XeoqoqiWLFeL1gtrunaVk7J0wNGpyeEgaFpW66v5yhtiJOExfwalBy0irIkCg1drxrtOlG5NW1D13ZoEzIYjsF5fGepmpooDgniiMFowEsvf5g4jtEonr59h0Ge8/bbb1OWNU8/8yynN2+yWMx7FFRFFIlS7eLqmrKq2PazSLTimeeexVohE6T9/XTr5q1963yxWOxTCqbTqbQHa/HjaSXvYRyHKBxN0zCaDvfZamEcE8UxSZoSJfHekG77DWlby/Pe1g227WhKMeK3tVRT0ub1YnuwnaCkemBxU7fUTUeSD7gxSEkHhovLR1xdr4iLgCgZ8/TsFk89/WG0SkiSIQQh14sV7779LuWq4F54nzjQRBqSJORHf+SP8K3Xv83v/v7vs9msGY1GXF6eUxRblFYMBwPm8znbzYZBPkZpw9nFnOW64COvdLz66U/z0Y9+BOU9q+tr3nnzbb792mu88+Zb3H3nXZZXcxEieUfXr2Eow3AyITcD8tGQ4WxMh6OxHV/92tcpq5LD4xmHB1PGgyHDVLLdXv7wR0Ab3nnvHf5f/+9/xsc+9UPMDk8Zjcakac7p6Q2KoqSuJTiy6V9PY3TPG5VQxjAM98Gu36toAr7PN6m2D5UrioKbN29SVdVegdc0zX6nttbu24BxH3y288js5hLg95Rz8VJ1+xdTknzVd/2+KIo9PHH3dVw/F3K9aXYn4thteLs3Zpe9Y0zYt/WavdJMKVl0vIcwlLdHKSVKqsDQdXavTNplUO2+hsipl73SUR7krgPvRwAMBgMhv/cm3LIsRTxQVZR9FlXd1HtS/G5T9ki2UBjKIBovCkH5/lGv5BFxQmAEhGuMaIwiE4HvlVM9FUI7LYtJKNVoFMZMJhPefv117t29z2uvv0G12bIpK1wUEzio2g4dRqggoLUeFYS41spJvXf0O+8AybTRWu19SkqJ0VQOETKrHA6HHB0d0TQC9h1PJv0mBbPDEdfXF3gtwgwnCgwgwLoOTExgIupiQ+cDdJixrRxJEks7Q8FyfkXTysxtXTiqylJWFgF7h2Sp0N1nB4dEYUy5LShs0cendFTllmK9ZLG4Zj6/oCy3lOUWozTT6ZQsDhjlKUYHVLpmHQSEJiCJhDdYlyXeeqqyQOcZrbPUXUtd1QKd7VmG4hnTeOvwGFTXESYpcZaQZDnDyZjp4SGB0swODxkNB7zz3rt0jXiOkjjBGEEwNY0QEDprWW+20totS64Xc+IkwXUWAlGshpGIecJefVqWssjtcod2nivrHF3XEgUGlCcMA6yDqqo46L+Wsx0K3xvfFYFG5PTOYq3QOLq2kbj0ppYWX13S1A22aaTK6NcN1zeMVe/jQolSsGpa8W+ZkCiKCKIBne0wLiALhoTRAG1iAiPKSRUEeLQEnDpP6D3leoPyjiQyNN6zqRueXF9zeXHBYdPy+MkTFos5cRRycHjIarmk3JR0PiBOMvR2w+ViSW0dTimiLCdLEuIw4ursimE6YBhlhE6TqpCubYXSYTtcUaPCAO0dXdsCkqPnrHAtL6+vmF7NUIEkAu+C1ZSHJMvQQUBrHevVis1my2DUkKYfrEHGNPtnTOJ/PiiUdqK23Vq1W3+/1+v7epMajYZoBV/64u9z+if/JHEU0rUSKrder/r0SQGNfuLjHyPNMsqy4Gtf/QrHx8doBTdOTymKLbPZVIy/3nN5ec56vSaKRPbbNM2eJPyd6CFg//Gu69hsNlxdXe3Nvbs35smTJzx8+BBjDE3T7l3uUThnvd72G5qmaVpAUjOTJEFrxXq9ZrFYMpmIwmq9XlPXjUjZ25btdsujR49Yr9d473n06BGDwUBQTddXeG95+PABN2/e5Pbt2yRJwttvv83du3c5OTkReW9f5QyHQx4+eMi9+3fZbDa88dbbbDdV3xILsI3dD8B3ldTs8IDOWjabzd4AHRhDHIc0VU0YiMS72G6pqgoQDFRoArbrLcPBkOeee57haMznfuVXqZqGn/qp/4RRmrDcbgiDgCTOeHJ5wXQ8ZjidMjmcce/BAyqnqJ2i6wf3ro+wFhOqyCjoJexRJC2gF1/8ED/wAz/AdlsAkOc5H/vYx7i8vGIwmDA7GDOdjRiMMt5+9y3miwU3bt5kOptR1yXK54RRyGCQsdlsqKoaHQglWqkCjMJrJWnPQUCSZownp5xmOUoHEl9yeEhkxJT64P4jgiBgtViyXW9EUde2FJsNbV3ifcdokPHic3c4OjpgOpmS9crLtuk4P7/GuiEHB4fEaUaa59y994Cy6mQ+WEo4pMP18OOWpu2kPW0MUZzsKyXtFRN9yMc+8TFOb93EBJpPfOxj1FVJFsccTKcslwveff993nv3XdbbgoPDI9bbDZcX58zn1/zoj6a8d/cB3379TcqqAgXFZsPh8THJpxJ+/Md/nPFkzPXlFf/P/+l/4v333+fw8JAXXniBZ555RqrtUir1x48fU2w3giTSCmtVbyb3uLajsy1tW1MVhRAj2kboF4HuN7eOuqll4+9a2lpEH8qDbTsRSCjJQBJ/lRwQlHP4tqUuNiRJSJJEWO/xSrPabLneSLLxM889RRAZlqslXkV0VrFYrrm+XnLnmWe4dedpbt16GtcJ+ePh/bucPXrIannFN15/AxOFWKWJx2Ma5RkdHpGOJ3gvBwqTZ4ReUzQtm3rFprG0BDSd54tf+grHhzOevn2To/GEJ+/dw3SOZ24/xcM33yWKLZXdUtYtgzAhTD1dqPC25eJ8yZPFJVvXsW1qTBDw+d//Qp9+EBGHAYM0YTYe86EXX5DNznYikDCG9+/e45337u/HHbLxyIEVOrbbUp73ogDnCLQmUBoN4ATb5PggtfcPur6vN6mwrywWCwGy7hRdXScDcGfbngTccXR0iLUdZbGlaSqqqiDPBwSBSL2DIMAEqm+JyIkb+K6N6TtjNHa5UsC+XbEjK0A/xO1/3wljZr/pyS/Z5HZ09Z3Sp+nRSfL1DNYKp6xpWtI0oapautb1Jspuv2nsFuHd95L2lmT/yMZWywkwCCQ7phSDq/eeNE33xPWyLKmaktVq1SuNBBKpsGA/oHy0bdtT2KWFZ4JgX8VGkaiOtGr66IwPKi2lRNVo205iIcKI4XCENgFX13MiE3BwdITrGtZVyWAwJDeayrZYrdBxRDIcUHUttVPUTksias8pQ6meoiH+HZG8qn1UQJqmTCaTfqMXD46kjip0YIj2ycwhplc6hXGECgzGx7LIBQE6StGhQ3eK1hmqBnHVG6EN1DV4DJlOSdIhSSK5U3hFGMYo76mrtm/fycFK/DFCj6/KEt9VRKEhCmSOOhnlHExHxFGE0SHr1ZYwDPGtJUmk8knznMFgwLacywzSeapaIjds79PxCKcxjBOiOJVcpSAA54nThPHsgOnRkXiX8gGj8bgPpszwCtLhABWGrDdbrBdVn+0cVS2Zbl0r9+VysSCMI+rehOydYzQYcjA7oFxvuL6+5uzsDGsts9mMo6OjvdLNOcdqtZKFTHlpt1cO7+SZUSak7fr2u3fYthUynLXQyr3Q9skGTd2Iubf3CcpsxIHzaC8onx0hYUegcLalqkvEbyfVucBXNE0Lk2REPjpEK+S910Z8Ta7DYmg6x2A8JY1SmqrhYDpjvd0yXy2JbEOLxqIxkRH7Rc9ZNM5S9gcLlCFIM3nuOkenDEXbMd8UXK9W1F1LlCYoB+vNllEUM0xSQi/ydI2sH6H2OK0pvaeta9qqpGoVG9eyaRrCJKZbtTRNJ6RzJannh5MJUW/ZyfIddSWmqhuKQiqiPM9xVtSXOhQTt7UrusbS1i3eepRX/XsjHi7vhO4hz+cffH1fb1KL+TXGBMRRyP/+v/1zPvPqq5yenvLwwX0xjFlL1zbcuHlzb64NQ3HB51lGGBghPRcFzjtGo0Fv+BUj2q4S2i1mu/+vtebg4IAsy/aV1q6t9+yzz+5zoXZ9WNvHzsex+I82mw3OebabggcPHrFabbi+nnN+dsk777zbp4eqPQOtaSQ9VtqZZ0RxxGF3gLOes7MzwjBkOBxyfHzMeDwmy7Jeht5RVQVxHJGmKWmakiQJg8GA2WwGwNHREc9/5jNUdcWv/fqv8uM//qOcXTzZLyBahXilaWuLa+U1WSwW5FnGj/7Yj3F66yaPHj3i7XdkfrLuF5aqKlktFnhvCcOAYJ+RhcibAa89k+mUe/fu86UvfZnReMJ4OEQHAVfXV/DwIVmaMxyMWF5dc3h0IuF2ShGlGVR9sjDgtYgz9rBLLw8DSjaoNE33c4+7d++SZfl+U768uGK13aACaB7WoDpMALdu3eLg8BDnPHk+wPZBcKvVmvlixfV8TlXW/deppLWoYTQe8+wzLzGbHYoS82DGvfv3mS/7jaOzKOfF37ZZ7+/V0BipGoxmNh0zzhPyLCEMNPiWs/MzHj64Ly2cTmLlGyuk7dF4wmR2QF7XeK2Ikpi0yyEwXM8XbIqqlw9H5ANBaE0mEyZjia4Yj0cczA4YjIZ0fRTDcDyi854ATedhvlzhleLZ519gvdny+1/4PFEQsFlv6TqH7Szn5xfCvTw+5urikqooCKOI0XBI3t+Xy8WSx4+f7Dehs7MzVishu7z44os899xzeO9599132Ww34IXA7vFiz1Dy8zRNRdXPmkwgc04TCBbJI5tU3bfCcRbb9vgeMQj18yeZW3nrwFtx3nlpKw4GA6qq5Ho+p2wadBjw4rMv8/xLH5JOjbOkWcrtZ18kihOc80IWWa/lsJAP2Gy2vP3G2zy5uGJd1pzcvMNHPvFxbtw44cnFOY8eP2a73XDnzh1QnuurK95++y3CJCOKIgbpgMloijFivg6CkOPDY1bLBSjP+fWSR/ceobcFL9y8zcnRhA+/8CKXd++zsh7KirqpcXVJ7Ru6UBPHAaOjKeNA82QxF4Ox7YhMzGQ6kYj6JIHO8trrb9LWFcenx8wOD7DOYYKQQT4kzweUZYV3Isn3XvftdbUfnWil6NqWzdp+EA7LBwf77+X6vt6k2h7JMplMePfdd+laIUbong7hnCVJYga5bEjWKvGdZClBYEgSmU8FfRWw64+nafod6bbSDtn5GESh5sn7E+vOK7XbpAaDQY+NCfd/f/fm7Coo+VzL9fWcpumIIlESNnW7n5mBxzuIQkEviT/EiSxdqe8Sd1RVtRd0jMdjdgR0pfiuNuUOg7TbfHc/58FsxnorM6o4ibHW7r9uGID10FZCnwh7GXkYRX3OU0KSJBitqbpOTq91zXa7FpO06yS+fkfosBbltFj5lKfO5Ps8fnJGkqZkeY4JI7xWrIsCbwxOKRprab3HKUXnwRuDVx22pwwYbVBuN5CVB8A7wNCbHj+4ZBY32le9RVVKe8g5aGrqtmA4TMmHA0wYUFWNJPv2s4u2N5xWZdVvUobAhHsaQ2giJuMDxqMpw+GIw+kx508ucK2l7Rq2zmG8kcC9ohIviVKEeUaSpLRtQ55n5IOMLEsIDFTVlrbaSqVbyoBamwhvYrZlQzIcogJDbTtUYFBhgFWgg4Cq7ajbrucSBoRRQpYPGQzHjCYzxmMR1hwcHjA7OOR6taCzHVGS0jmPCoS6XzYtSRQwGI9QRstroKCuGyGgK8NyKTLl8XCEQhBTeT4Qekqvd3fWSoXTzyeEzv9BJd80cp+t12tRIAYG2wc5WtuijUZZ6Va4ruurKGmzeiW0FOe9mFyt7TeoZj/E99Z+B0rOo/qRgO8z4sRnp/qYDE2xrTFhiFaObDjm+PQGTWdZbzZ4FTAcHcpz4x1x05INhnggSzPazuO1obYNVhniJObg9AYHp6ds6obwekHQdowmU+H6lRUqCOlacMoQJhlBnJDlI9qetKGimCjLwXZs6ppqsyVtO7zWeA9pFBObkFgFZGFIU2zRncUoSTgOTYQJtFDb0xjbtKA1oYkIwpg4yYiTmK5uWJ1fUJUFcZaRDgY4IPJCpomimNVy0284pm/f6Q/St6Eny3eoQMJMd5vYbvb4vVzf15uU3MDinD49Peb6+pI8T3nu2Wf48pe+yI3TEw4Pj3j11VfZbER9lSQJs9m0r4oi4jTFmIAszxgMMpRSXF9fcnx8RJ5ne2Orcx5jNFEU0nVu/2LLn7M3HToHxoiyrK4bUdXAHt2klCYI5GY6mB2C11xdzbl37z7bTcnHPvYx2rZluVzIRlFXxHGEtdK62Gy2+1ZhHMfUdc0bb7zB3bt3GY1Ge7jseDzucTQBaSoV3Q/90A/xyiuvcHFxwXvvvYdzomZ88623ePLk8X7wvfu66/WauppTNx22dXgrX3cwHJCkKZeXlzx88pgHDx5w9+5dmt4kKxNTRxCGYmp10iLM85y2aWnrZk+qXiwWfPlLX+Zb3/wmd27d5tXPfpaPfPjDfPVrX+Y3fv3XWKxXnB4fU9mWbVVQNg1FVXI5v6YioPOyIAVGg5Mwvg+UfTJ7cDjatuQjH/kIP/Ijf5RPfOKT3L17j/v3H7BYLLi+nrPcbNmWG8bjnCjWlFUlWWDece/BfeqqAetwre2j0mXRP5jOOD4+5eTkhtAN8ox8MODGzVtA3wKyHZPRhKurCy4vn9C1HXGQkaYp0+mhRHoYw2iYMxmP+sOTx7YVm+2aqljTtCV4x3Aw5JlnX+D46ITZwRFxPuZivqDtLE3bcX55SVPW1F1D6yxRknBy4wbj8YzDw0PywYDJeCy0iP6QYowhS1PG4zHj2YwbT90BDUoLgX80yHFdRxhFPLr/vkBT+wiJMAgI+5aptyGPHjzi9PQWn/rUp9Ba863XvkXVNNS9STfqN59Hjx5zfXmJtZbpdMrh4SEvvfQSn/rUp6jrmjfffJOmqnBeMt/0TtgUBIRRTOgVWZ7hvacotwRtS2Slna36mUfXt6XbtsX3larWfYXdH/roDbzOWkmcVtKeX63XbFZrtNFMD2Z89FMf5+LqiihJ2BYlDx4+Is0zch1QNR2t81LV9QbjJxfnoso1IbPDYw4OZrRtg7U1cRzw9rvvsV6vGA5HzGaHHBwcEQTyOp6dnZNlGdfXV1xcXbNYbgjjOduyom06ji4vxVzd22gmccJ0MGCxWPGkcZwcHXP9/n209wySlKrYooy0eq1y1M4yv75mYxQb22GCiMFgRBSEBFFE1dSslkuUdcR9B8J6z6YoieIYpSzOCpjg6OiYo6NjttuCx48fc352KTQME5AlKTgneXpRvD9wg5jt/+OYSRlNHIVExjAZDtHe49qWyfExaT9nOD055tbNG9y712KMYTKZcHJysp+dpHnOYDhkNB4RRWLOPT4+7NEyQc9zU9RVg9KKJA6FwIPc5MZI0Jm1oLSc1JyTTUuZgraXpAdh2L/BijgOcdZTp5Y0zcgyGV4GYcDB4SFlUdJZi+rlqODwXuYI1u1IEqqPAYCiKFn1EvckkaqvLEtms6kMfW1HURQ0dS3Kv55uEUURURgyX685OztHKSUtklrIFG3TirCj7XAdBErippMkJctyuq5jfj1nuVhSVTWdtfuqIIrEp5IkCXVfqURRRNu06ECqOoz4N5bVEhTcvnmLg4NDTm/e5PDhg55KAdZBYy1V29F6R4diU1aoJMf7natf9eqsHofUK7Wsc2ij2W6W/TxqyunpKe+/f5e2E6Wjx1PXFcp4olgTJ0OkU6hxDsqiYn49J1RiQmzqGucgznLSJGEyHnPz9AZBEJDnGZPZhNnsgLrpmNuVQESDkFAbbN1QlRUmC9FZJgGUcQTe9erTiPF4TFWWbJuaupHgwbaTXC5MSDoYcHhyysHhEWE6QMcp26Jkvlqi+nTYzru+otJEKmU0m3By84YEYE6nfXZRwi5OIghCdBgRJSnZYIgOJY8LZ6WFhkLpgKJqcE46Am0nOVmBEYUfWmje4BkOcg5mM6Iopm4aqWa9xzuPbcWU23UWlMxqp9Mpx8fHTCZjrq6uWa9XNF2LdR1JT1lwzhH2uWeh0qRJQte1omztg2F3s2AQwYzf0yQsysi8xSo5ROFlnoVz8jne4bC0jRwut+WWKJaE7sOjI6yi9+F51mVBnA8k9wvhalZNS1FXQh6paprGEUWxtNrznIRU4LUKirKma4VTORqNCcOYNE3Eq5TkjEcjVsuVPIedIvI1201BWTeYIGQ6GdPVNW1TMYgTCCJq69gUFbcHE6H9ay0tUCX8wVgFFLYScEHjaPuDogBhMwJt5HW2u/yxjiyJ5V7wcuiOklSieLSgqYxXEsSpDEZf0DQtURCKPsDo3lQvZHgdCFrO+90h/3tb57+vN6lnXniG6WTKc889x+07t/vU3IzBYMCzLzyLNkIYGOQ5H/3ERwlD0ytQJGsFIOhbeFEksx/nPQdHM4JQpOmNbYlMRN02hGFA50Rgsd02ezxSHEci365kswEkArxtWRVbDg4OMEnMqiqpi1qCzuqa9WrNfL2mdY44SRhOxgLoTGLGlxMePHjAer0EPGkqXL6iLHq1XMW3Xn8TTMBwOiPPUg5nB4DvQbcC4BVskuHLX/wyX/nSl1EKtusNrutIphOK1YqqrFivN/zO7/wub7/zFmVVslgs2PZg1U6IneAUbes4ONCMJ4qmsZw9uWA+XwGaNEv6dovFKCVx80aRDwYkcSS0A2vZ2g2dswJPVQiBIAj62da7jCdTri7nBCpitSq4++ARDx88YHZ8g0dX19w7OydIczoV7IPcUFqk4kbRuQ5QNK4VsgURB7MjlDK8d+8uj8+e8OjxY1brNZK7lTM+GLNcLths1pyfPZa4+7ahqRs2yy3r6xVpkjAcDEmSgOFwxLPPPMdLL32IF198ka7bcfxEFn12dkbnLGVV8d5771GVW2xVcjyaYqYizMjznNF4zGAw6LE/snC/9dbbbNZrXNf01XvKYDjuH3rD2dWKVt0lOT+naaGzsNluaTtHnGUcndzg+OYdlBZ009HJKVk+EPp3HDMcDRmPRvukgK7r8EYR5RlJItTu7bam2BbgOl5//RxvO5IkZF2IYfjg6IRbTz/D2aOHtM4RRhEaT+c6fu/3/jUXVxd85jOfIRtkzOdz0jRnmI04f3wmQaRNx1NPPU2e59y6dYsPfeglXnjxeb71rW/y9a9/na9/7at0XUOaSuvJ2Zb59RVOa1Tborzi5ZfH5GmMVg7rWqqqheoDERPwHbEQlqKqhEpvjHD1ALyjaWu22y1VUdE1DevNiuvrS7Is4YUXnuYjn/gIj88ekY9GxPmAMEn5M//XP89mU+KQ+/wb3/om9x7cZb1ZCq0lDMRmohQ3Tk+o6jVVUaL7uPvp8JCL+ozLywsuL6/7gzM0bcXBwTFRZJhOD6lKS1nUGGU4PjzCOsd6vWJ+fd2jhxxPHr3B5vgGd0YTVDxg/KEjbt96itTDZnnN6dExm3pLu10QuopIeQJvCRUESUrrNMp5QhViHJgwJBkJbKBuG0LX4a2j85qrq4WQTDwQxRTFgtfffofpcMKnPvlDfOIjHW+8/gZvvvUG9x49RIUBo9m470C1WDpMoHC0WPWdWVP/7usPtUn93M/9HP/sn/0zXn/9ddI05Y/8kT/C3/k7f4cPfehD+8+pqoq//tf/Or/wC79AXdf8sT/2x/h7f+/vSdhgf927d4+f+Zmf4dd+7dcYDAb8xb/4F/m5n/u57xqsfS/XeDzm8OiQm7du8vTTT+9l4YPBgKefvo02GtdXPaOmJY5F9NC2HbY/mbHrPfc3dtdJxeXxEkvednTW7XmAzkEY6r50d3tOXlEIgsnsEnKtGCPrpkFikRxlXVFsxZ+x3RZsNwWbzUZ+np4srowmzTKSdIs2Gm1EIZikqci7w5BtsWG12rLebAnjFHAMByNG47FkBSm+YzansNaz2Cx59PABYRiQxBGj4UiMo21H17Z9Rs0V1/NL8QIB2oQyb3Aeo2N85/bGY60N3nnKqhITrxH6vMXRth6tVe/Bkdd3NBxRNzsVpaHt2r2icNebFtm8JBzXTQtKUkGX6w2rbUHnvJDbywodBGhM36bxhCBwWd9zwXRPovYykwpCqZLXiyVXXcvl1RXWWlEsBYYgMnhcL39eEWihLzjr0H1+UhzGhFqQO4HSjIYDTo8POTo8YD5fgLN0zuKBzXaJw9PalrJa0VQlio40lgoz6medcRyRZamw1pRns6lZrdcikulasjQlCBPCKEZpRWNbXN0Qbks2ZS0HCGWE54giHY5Ispwky4njFAccHB0R9yKfKIrIhkPS0ZB0MOh9gR0Wh0kiTKTpOgkYbDsRGyxXa5ztmGkBnIZhQJwkjEZjHj960PtivLSxnWO+mHN29oTBYMDR0ZG0uZF05rqqZXaM+L2GwyGHh4dMJhMGgwHr9ZoHD+6xXq+I4gStA0kZ1rpX7LV450mTrJem677NLvfsbs64m70a04c0oug6mTvRKz2FRNPRtDVNU1PVJW0tz0Kx3ZCkAVmWMDuYMr/7PrP4EG00SZowOzgmWkggozKGuqm5urpitVlijGJ6cEBRFQRa0bY1q3VDWzZop4hMQjSOUA66Wuwq48GIzrY41zGZTtHKk4QRcRBijSXShiQI0caw7dW6YRDi8Ky3BVerFeMo4TgZECYJ2XDAKokx24A0SWltS6DF+tFqhbItBomR8Y0XSjoK07MXoygSXyYOvKQ1tL2sX1nbdzQERbZdbxjkQxmZZAPu3X/YizEkXDOMhfLvOo9Xwu/zfheQ+Adff6hd4Td+4zf42Z/9WX74h3+Yruv4r//r/5qf/umf5rXXXiPPcwD+y//yv+Rf/It/wT/9p/+U8XjMX/krf4U/82f+DL/zO78DiIT5T/7JP8np6Sn/+l//ax4/fsx/9p/9Z4RhyN/+23/7D/Pj8J/+qf+U8UjUbGma9CIBMW96r+ha1w9Ada/C6/ZDu114YVlWvQJM5lVxKsKB+XLJ3bt3effd97i6vqKrZchrjJHFrVfwKaV4+umn956j3abVtC1X82vee/99WRyLrcwyyg6jDNZ56krmPtttge1JA03T8szTz9A0DYvFgqqqyPOUxWLJ5eVlD55MOTw85JlnX5SMJCWtjbosWS0XNHVN28pwfz6fExipCsqqIkknBGFI3TQslgvSLOUb33qNr3/963KKti1BaPo47Y62bcjyEbPpEaEOZDCbprRty6NHj7C9Odb26P2264fgTigbw0HOoG+xHh0f8o1vfGNPjhfJuu43f/Hx/Kt/9Wvcv/+Az37mVUwYcn5+yaOHjzk7P+PDL3+YbVn1cdaGPBtA1bLeSDzIYDggi0JQUr1Z54jDiEjHrFYraS0ul0KbvrqirCqUUjx5kuC1Z7VaUWy3NE3LMM/Js5zD4wMOZjMmkwmjPCMMQjabNfP5nPVqwTe/+Q20BmNC1usVj588ZrlZobTChAFBaBgMEmrtCJXFdQIa7WxHUbQ0fXs1y3PSNGcyi9mWNVVZ4b1Abq2SrC+0VAadd1yv1iLeGY4Jo4Tp4THZYMh4esBwPCbJBsRJhvOeJM+J0kxaV/1cKAhDOqWom5ayLCjqiqIqaBuLbRxZkjEaDDmajZlOhriuI4401ckBi6srjo+P+fSnP83d997BttJVsK3dzxsvLi74pV/6JT7xiU/y/PMvkKX5HgatlOL0xik/dfhTjMdjjDEUxZZf+ZVf4Xd+67dYLpcMhkM5+G231LXuo3UCvHekWcbpyY29cKnrDzS7A49SEuwnXT25zyxyj7nO0tUyF7VdR12UrFcrtpsNTSNwgLatiSJDZ1uU0UxnEz45+QSToyPm6w2Pzy9Zb7Y4J348Z1vyQc6LL72INhCGhqppMFqMxlkaU6zXuLYjjTMOJlNs0+JbyyDLuHFygveeLI05OJjywvMvSGJx3VBtarBz8X4uV4LzAqajsbRojeZwNiUCgiglnQ6pcZgsQUcxZd0QKCOVrO/Ybjoa1RLpAItGO8jjhDBICU2C61qssxRlCYGm6QHG2hi8c8RpwnA0xgHL9ZrJeMx0esCjh4959/33+b/86T/DT/zUT3LzqVv89m//Ju++846g2bztfahdj5oS0PX3cv2hNqlf+qVf+q7f/+N//I85Pj7mS1/6Ej/2Yz/GcrnkH/7Df8jP//zP85M/+ZMA/KN/9I/48Ic/zO/93u/x6quv8su//Mu89tpr/Mqv/AonJyd88pOf5G/+zb/J3/gbf4P/9r/9b/dBgt/Ldef2bcbjsSiLtN57YYQK0UtLvcfaD27gnXJtZ6jdbmVu5JxjMpmAVjjnWcwXPHr0mHffe4/Hjx9hUHsFXdM0TKfTvRow7iPJ8zzfD2qLsuTy4pInT57gvOdqfs16vcHWjjiS+OuqqgUFU5Q4L4y5tu0YjeZ9VWf3RASUZ73Z0LatyIuznNnsgFnf4ttu1lxenBMnKbaTNtOuYrSd7WG1hrazZFoqxc12Cyjm8wVXV1e9ytHilfSM66bGOS/06CQhCsRAvAsL3G63+/dil8K5UxY6rXoTYCwZX/3cYff+7jJ0dlWU93IAuH//PmEY8uqrr2KCkKISz9Zms2VTiH/EhCGd7QiThMAr/FbekyAMSZIUFGRJIgqrJCWNUmzX0nVC4GiamrqqqCuZ/VV1icdT1YLKsZ3kTaVxwng04uDggBunp0xGQ4xS+yrs4uKc6+tLVsslk+mEstywXs+5nl+R5glBGxClMVEQ0OqOMJRI86aRyrnrHLYRw2sQhcRphgki4jSDntwgRPROFI3WiZhBB9SdJ3QKTEDQVzXjyYx8OCIbDAmTTKjpSkEYEvRzkQ98ejIfqLqGsmspm5rNdivUgMYTaNnsTRgxSVOMBttWREZRrtdieehnu0oLyqsqS9kYtJBW7t69y0c/+jGyLGM2nQK6R4JBEiccnxwzGo0oy5Krq0sePLjP5dUVbdsQRkK4b21N20KmJOHZtnLQzAcSB7KjwUtWUe9n7H9Joq/aE/J1f3+2bSuK2B7uvFmv5XDStmyKLVpLWKkxCq08cRhyPJsRpilNJwSHtmkJw0RIJ13HIEtQaoQ2inyQcnV1xSBPaeuS0IBrW2mpaZmfb9eliDl0wGw84erqilAZhlnOwXTGxdkTsjghTRICHYgBuWnxxpFkKWkUC6cwDEkGGYvlHBcqwmFOrcFHEd4YGiskFIwmdS1RtSV0ENAROI3vHGFgiI2kVVvjca1s4N5rnPIyk/SOrmn72blUcFVTE8QS59PYjrsPH+ADw8HpMbeqkhu3bvPo8ROaWg6DRpt+Bmr7aPn/PwgndjfcznPzpS99ibZt+amf+qn957z88ss89dRT/O7v/i6vvvoqv/u7v8vHPvax72r//bE/9sf4mZ/5Gb71rW/xqU996t/4PnUtqJ7dtVqt+o83svDvWmzf0TrabDYiFujNrvIgXHF5ecl8PqfrhQMmCGjbjtVqhTEBYRzRti2L5VIe2rZBa83tWzdFHZXnbDYbGTorxWazoa5r3nrrrb3UOwzDniXnOTo66n1Y4rXRhERhjHf9JqE1cVLSWcdoOObG6Q2GoyGb9YYoiRnbKePxSLh9UdTHOW9p7t3n8mpFluUkcczR4QGTyQGTyRTbCZfN9VgYpTR1WbDerGiqSgyIVclmveKf/2//G6+99rpslrWQrnXQZ3L5vroUlo9gjXpD8nK55MGDB7K4JgmJTqHHQDW9p0QpRbEteOftd3j04AFvvf0m19fX4q3oRR/euV4uLIbUKIpZr9b80i/9Hzx48AAPxGGIDgK++rWvs1ousc4xOzhkPDvkOEp44cUXheHXy+aLUhSVbdNwte5nDV1HnKaCcAKausL2sdreCDkjz3Nm0ynTyZTZZEoSxyRJgrOW9XrN/fffY7NeQ++Wv3XzJmma8NZbr+Oc5ejokJdffoHB8BNEScxys+LR48e8985bLK+vhHjQWbrWY6KMKE7J+hZuZx3L9RplAkwYMR2NiZNsP+PqnESgmMAwGOWkSUqap4RBQJplZPmAwXDEYDQhSjMZagcR1gvhxhpNZTuqbSW5SWW5jywJw5A4Cjm9eZM0SsApjAowPaKrqUuZKXppbw9Hkq+WJRKouIujUEqR9a+xqFoVn/vc5/jiF7/IyfEpL7/8CsPhkMFgABrOz8/5jd/4Dd5//30uLs5ZLK7xQBhFtK0YwQ0QBNK2q+qOwWjEaCTersEgJ8sygjhFovQQibv3QrTvOrq2w7qO1jZi5K+FQNFUNbZtsU2L6yxxFIufazKkrgo2qzmz6ZCDyZjZeITWimGWkKY3SNKUqpbQQhMI0f2VD7/AaruhrivA8pX1nKPpiNBMZCY0npLHGYNkRBKmvLl4mzwVi0EcxeRZThSHVGXFt197jddf/zZKwTDPqYaSsHD71m2ee+F5Do8OcR7iRPBorbecX5+TK81ToxnJaMhpNiDuHFePn5CEgQhCIsPWWehKmtrgbE1ZNjTNFht2aB3J82s7vNH4UNPiCUIhl7t+Bl+3DaosAZgvFxwdHPPiyx/i5PSUf/JP/2d+5I/8UT704kv83/7v/w8GoxFvvfE6D++/z2q1QHmZmQ9y6USdX6//wH3mP3iTcs7xX/wX/wU/8iM/wkc/+lEAnjx5QhRFUpF8x3VycsKTJ0/2n/OdG9Tuz3d/9m+7fu7nfo7/7r/77/6NjzettOB2Fc5utuS9l7lGXbPZbFgulyyXS548ecKTJ0+4uLgA6I2vA6q64fLyEoA4SYQHWMvCpo1AVPM85+DggMlkwnK53DP/lFJ7Ft6uqkrTFOscqoetlmVJ0rcjtU6IIwklDJpW6OKRRVtIspzxdCZ5VI1IQ4MQoiQRtE+SovRSZkjLFetNQ56XzCYT0jRjNp2QZwO8c3RdI4foQNoWTV2TDwYsF/PeTyYm5Pfuvs+qRypJ5pUFJ0PnruvI8xH6O7wNu+qx60QxOAiGBL0ysWrqfRtv99+6a7Fty3a7oaqFa+idbHhCxvN4Z9E6oO3JCc7B+/ck2iRJEnymMEHA2cWFVMdKAhWjJCEbSsBf17asFktZePtIgq4WvNB2U6B0752SUXrvm5Nk0p0E+2A24+bpDW7euMlwMOhVihGLxYLHDx8xv56zWMwxWjOZjsnzlCxLefPNK6xtGY1zsizmzp1bBGGAPofz88es1wvKaktX1dimxTpF4GQeoI3u2yGSXtw1HcPRuKdHjEnSDK98DwqVVuxwNGQ8HougwLfEUdxvUPL3oiSFnvjuraW1TjYr2/VpzCVlWfTCH01uAtJQhBxJnBKZAG+hqTpcz2h0XrKQnHdEYYgZDkmjkNAY2sbv5zxJkgiGqZNokPv37zPvTc8HB0fyfnpP2wjA+O7du7zxxhssF3O8cj3EWCqeIAiwTrohnRWWpjGGNE33ZAoTmH2q9D7TqOtBvY3kmLVdS9vVFGVBVZS0TUtXNzSVAKjDIBBif9eQhAHahay7liQwhBp8WwMeYx1RnHA0mVCWDUVZgzKEccR4MiRbxBTlmqapiPFM0oQ0jhlnKYFzHE6OyNIRddGitCJOE4JAxF1FUZCkMqecL+Q+S9OUwWBMEEqq93gy5vT0lBs3b0qGmdGkaUrRVrS+IVWG0XCCR5MMU0azKUmWy8aAJ8KTpzlF0RF4TWAVpq/UnZO0BO892A5nwftA+H5thw6C/XNv246KEqM1m/WG8WjK8fEJURDyO7/zr7m4uuSVj3yE01u3Oblxk3v372GiSA5Z2hEaTRSHRFH4Pe01/8Gb1M/+7M/yzW9+k9/+7d/+D/0S3/P1X/1X/xV/7a/9tf3vV6sVd+7c4Zf/j/8D5wS3s9Pc7zBEl5eXrFYrmqYhjmPW6/UeGitv/qDvhUvLJ0kShsMh09lMjJ7K79ljeZ4TKLi8vOTu3bvM53MGgwFRJCePdT/o3tEcttst26IQ3heei4sLirrCe4jCfqBtRaYqkt1dlpS47yeTiSBmlLRRVqs1VVWwWCx62bvBuZZVuZXZWz/LWi2XzGZTBvkAEBOkgGSlQorjhNF4InJcNeP09JTVes1zz75Aa1sWqznbYk3TCtF8sVwzHE5AGZRXVFW5N1xez+d7o7JAaCVIcWeMdt7toZ1C3ghYLhdorQlMtMdB7b6GtGDLfSihN5p8OBC8zmrFZDxm0rfe8izDWkc+mjBfb7h+8IBis5EFyjrauuH68mqPYmp7IoizHePJhNObN3juuefEPDzICYKQuufZbTcb7t29Kws4YqaOwoAwCLhx4wYH04kYvrOY+fUljx5tUcoyGuWEgeLy4oyr6wvOzs94cn7O1fySqthyMJ0yupkzGY4YjiagE5yHurEUTUdZt1RtjdcBTimJbvESMZFmmVgk4pA0k9iWOJGKdjjKiEJDnKQEYSx4nlZamNttyXZbUDSNxJL0wqQ4TRmNJ7LA92GeyjnqphG8kQoIdCjx4mGAVr6XC8shrPVeZp7bLT/2kz/JF7/weR7evYvCcX19je9l5Wmast3KZvj48WN+7dd+bb/ggqMoy/1zmeW5zC2cwznbG8+FKdl1DU1T9Sb7iOFwwGQyERO5kqF+ZwWoXNf1/r87g73EmQvHz1lHGseEed5TrCRip2tblo/nXF08RuNpy4KH77/PL/3v/zvf+MpXqNqOZ59/gaMbtxgfHZGmA7Ld3A/PW99aMl9ek2QRTz91h//TH/msdACMJktzHj5+zHR8iCfg+mrJZ8cTTKBRRu6x5WqJc5aq3HJ1dcXVXLo+y8ePicKY4XjEervlS1/9Ci9sN3zoQx8ijCM2Zcnjs0ds1ksGoymBMWxXBfHkkNnREUenN9hcX1OXJUZHHEyPcGFA5R1dqWjLAtX7NpSiP7SFdMrjlcEZQ2QE27YTThTrDZ1zrBdL1osl5bbENh3PP/88f+7P/Xm22y2/9du/w+c+92vkWcLRyQl5njCbjjh/8kA2fteC7b6n9f8/aJP6K3/lr/CLv/iL/OZv/ia3b9/ef/z09HQ/8P/Oaurs7IzT09P953zhC1/4rq93dna2/7N/2yUqqPjf+Pj7d+/S9sPOHU1hx5W7uLhgsVjQdR2j0UiC+LTekyLCMOwXxAZrJTJ9kI8+mPNoRVXXPSlaUazXcvNcXVEUEq+R54LWqXqF2y66o+ukfWi9xwSGxWJBUVdC/I5kYXLO0TYtdSPsNm0MXimKqiIsy75iAOeha1q2RUXTdZhQAgmV7mjqgipoURi2YYlzVjBRfdqv97AptlRVSeZTslSIBtZ2JHFEkkSgNVmSEEQBV/MBq9WC1UbEBc7LBl3VHU0llIy2VwKWZdm/JzKrEz+X/6A91feh6V+DHVdQ6Oi9QVMHvT8kRamSum5xDtrO4Z1nNJ1Qtwu2ZcFwOEYFIePZAbPJhMvLK8Ikxq1WXF9fs16tpD/fhyBKvEOPZ1Gabe8RS9OU8XDErZu3ODz+gBW33GwptwW2bTkvCtbrNQox2Q4GEneeRDmkKdZ3gOPycsV8ccVwmJOmMcZAVZZstlvefPNNzi4vsK5lkGYM8gGz6ZTj2SGz2SHeRNRtx2K1oZmvaItS3t/A4LxkijXWk2IIk5TBeEI+zMkHucBQbUsUhQzHQwKjUcbAzleGp+latnXJqtiKGlKbD9BYO+9OmhJFgcTVVyWuddRtg7cNaZyRRbIJiPvMYZTBGEe3C06sKl555RVe+8bXxVPlvcwb8N9FWanrmq61XF5e03Ztz7R0OG8Je1l8GAagdJ9AIBxOD/sNrSw7wkHWrwUJeSbYIN8fBJ0Vf1PV09R3BP9dRW+9YNFU37bO0kwyj7SkH69Xa+qqYrWYk4QBgfKs59fYuuT80SOxYyzXPP38mtOiZHpwiJ56bC0xMWcPH7Jczzk8nBI/dYenT0/JswxlNMoEtE3DaHJAaxXLTcHt41OiKBTVm3NMD2YsVgsWC03ZNiR5Rv2kZbFccXx8Sj4YcHF5ydVizmg65aVXPkyYJKzLgtVqhW9bDB7dex3DMKKNY9LhgM1yhXUyD43jkKRJyKKETVUSejG9ozzKgPYao0Ap4WHSe9Ks92jncU1L56DpOhql8J0l0CEnRydopXjhhef51rde4/2793nw4BGf+sTHyQcDNMJnLNZzbCtpx1Xflv+Drj/UJuW956/+1b/K//q//q/8+q//Os8+++x3/fkP/uAPEoYhv/qrv8qf/bN/FoA33niDe/fu8dnPfhaAz372s/ytv/W3OD8/5/j4GIDPfe5zjEYjXnnllT/Mj8O7774ngzjnCAKRBistGSa6bwvsHOCj0Yg8z8nynDhJ5CQfhgJX9TLEr+qaBw8e8vDhI0wYSA5LWYo/oxOflKj7HBcXF2w2G4wxbDYCBU3ThF1MyGq9oelk0FgUJU3X4mloW00c7+jLvSQ4y8mynDSVBy+Kon38R9jPdqbTqZju4gjrOpQPMEZUdpv1hovLc64XC5arNdui4GA6YzQeMhoKiyvQZh/hgXd9S0VxcnoDDVSNbDo3b93iqDuUKPrxlCTJ2RYVVdFQFfWe7r471TbdB0ibru3QoQEPnbX72I62bbFtJ4tLnuOs6vO1in21s2sRgnjMHH5Pn89zWZjFIyLx2vPFnKJv58RxjMtzNquVkNeN4dbNm9y8eZMbN24wHY/xwOxAEED5IKe1Ii65uNhQlhXbomS1klN9PpDYbNtZuqaRB6ooaZQnNAIk3hYbtus1tmmptlsW80vef1ek2MqErDdrsiQhyw944flneflDH2IyHBIohfeabd1StR1BGDCdTRnNjtBhjIkSRpMD8uEYkwzJBgNpjfSmUociSlOyaIRScL1YSBxFJ9WEJIRrdBARxjE3bo36OaIcWhQf+IistdS1KKyiMMRE/Ym57jCYfdBm23bYtiHQEPneTI4Iap599hnuPP0UZ48fsVktCYMQpRXWOs7Pz8VUGshQfjDI950Oj8d618fb617Q0PTvue4FNpqi2NK2jcBXjeH4+JjpdIp1js1mi3Nb6tZhrVTg+3gZLzaEHVFDaTHweueJwpAsTmjKSlq6oQCR27qmq2rqtqGxDaNhRh6nTKYTurHQG+rNlofv3+PJw8ccHZ9ycnpTKipjuHEkEABbViwvr7hsHxOnCUenp0zHY+I0YV3UtM4yGOfSibEddVUzHc0IkoDBKOfp557hqWfusFqvuby4otzWKK3pbEcQhAILdpar+TVVVdG2LdMkIzYBWEfbNJxfnJMDTz39DIHTVKMNZVvRaUvZ1gzSjHW5JQ0iSSN2DusaiWvRCo/Daol67yrhQQY9VgulCHuuqPKwnC94/bVvs5jP+eQnf4AkTjiYHbBcbnjvvfexXYPxHb6rODw8oq03VOUWsUb/wdcfapP62Z/9WX7+53+ef/7P/znD4XA/QxIEj2BV/vJf/sv8tb/215jNZoxGI/7qX/2rfPazn+XVV18F4Kd/+qd55ZVX+At/4S/wP/wP/wNPnjzhv/lv/ht+9md/9t9aLf37rsVyKbJzExA4J1yp/nRlgoAgilCtyHxTY0iyjDhJQCm86vOGgpAwiISN5yzbTbln2Hnv90GCzgm+ZZDLg1a3jtYWhEFI3UiVgW6Iq5qu7ajqlqpuMKHDI0IKay1aOVzg0YHojuIw6aMrQqIgJDRhnwasiMNQoq89RIFskIPhEGs7wjAhTUc0bcvF+YXEeF9c0TQFYZyS5CNyDGkUErhQkPlBhHci/8RLTs/BwYFIb+saY2Qu4Xwqn+sVWgfy+qqayCQU2xLJawokddiDdS3Og+sJHMpJRIY2Bo+m7STvxwQxYZTS9VVi0zaYMEC3shl51ZM6nMVooXJHJkC7D5hvbdvuhTTaBNDjbogiNs7TNBU6TkjShFu3bvLM089wOJuRZRlHR0ekeQ7e8+DRQ9bLFdv1Wtq1bUtRbLFOcE5REuGto/aWpqpRTgL3WofI+QsR44h1wFMVHcvlnKatMaE4/QfRgKMDaaue3DhlOplSlSXrXs3pmhadJMQEmDAjjDPCJGc0nvWbVEaSppK95HYgXY2JEsI4FttBKyKBsqoo6wZrPUEYkWaKPBswyodkwxSUpml3r6Mk1O6IDBLXIiibwGiwDt9ZtOpJDVica7FOfC5a7eZTlpPTE2azGWEcE0QR2mhCE1KVNWVRSuvZy8k8Cg3WdXgnG0ikhWSxy2izreB2JEYkwjpL0wgaKYgTtAlJ8xH5cELnoLViW+g6UfO2Xbe3N4gK0qDDAB0EBFrtQ/gkSialayTRV5sQbQIa67Boog5UZRmOYkZRSh4mqERmd0Hr8JuSdbsiNSGTYU4SaeLAkWUp4yzBeEvbq4dt1aCmh4xjeQ9KL5H0WaIwRp7zhpYkznAuIkk0w8GAo4MR2+2W6+sF52eXQjMPQ+I4oSwrLi+vcJ1Ftx2qbckmOVkcEXiHb2qK5YI0yZhMxqyGOQZHWELVNoyihGuryXXM1hd0rqN1FukP9KKJPuZGdeCbChNFAigG6Y4otU8aqOuKy/KMtml59unnOTo+YTQYksaJBKpuNhhlyWLD7HBMQYOyNaX+/4EE/e///b8PwE/8xE9818f/0T/6R/zn//l/DsD/+D/+j2it+bN/9s9+l5l3dxlj+MVf/EV+5md+hs9+9rPkec5f/It/kf/+v//v/zA/CiDtAOscna3RncQBhP0MKstzhqMRs55AHoahnMT73COQVoLSEqK2CzHcJcvW3yECODk52c9KtkXZq/hEhl03LWUli6aphIbddY6mbSXnSGmcdbRWeuNt7WmbXUiiQGStlTadnPoCVB+4tkM37R5iYwyj0UhCHOOE8eSINMvx3jGZHeBQXF5esFxvqe7eZ7FccjQZMRxkRFFAURZ9KS9Guq6tCcOQqhbZfJJmtK1sYjvJuFYBo6GnmXja2nF2dt4vcGJ8jVPB7FjnuLq6wPXybaNFdi48QLMnxreto6wKov49EkVftP/zHaxXqshwH3ey+3V19cGsabMtKMuKzWotxtFeoTcaDiV8r+t49PAhl0/OODw6RAE3oojBYEAcRjhrWS2XXF5dUpQ1ZVPhe3p9EIi0uClKivVWNhQjJ8tdHIztJEZlN1ccDMYo7fHKMhyNODg84OatmwxHY4qqIaobpkeH3JnM8CpgsymZL9YUVYvXESZICeMMVEA+HDEYj4mTCIeE7lWNGH0Xq02/qRhC4wmCmNEoZdqbPbUJMCYQ+okXegS9KVYp5L+BQvW2AdWrFeu2o3KONI4kB6pcY9uW0BiRYztHUWywTQ3ekiUJ6+WCVz7yCovrK37lc79MHuXEUYJRAU0tyti2qWlqR5IktF0jCCoMxoQfRN4oyRmzzvfPBjLXtR3KaKIo4dbtOwyHvT9IGdbrTV+Fmz0AOssyEfr0SJ6dkCpQSjKpug5v5f4pykKi6zuJqm+tAxVgnCfwAUED7briqmrI8pzDZz/ESy+9zOmdp2i9Y3p0QD4eEsURyijiJCbQCtc2RFrRJClxkpIEMa4Vj9AgijkcjVhdXxOGkWCTAiMbjQkE+tpXMA2OcZYyfPqOvCbeo9AEOqS58xT37t3n+uqaD/3ET3A0GzGOY6LachFntFdLuroh8tDZjrIqMNaSRzF1nDPLx3TWUdY1znuKpsJ2LQ6L9xqvQBmDthbbNLIhaWFiamMIg5AgjAnCAJ8HNG1HU9Y8uPeA6+sFaT7gmWeeJX7xJe69/z5PHt5nOb8iNqCVI0kTDvX0e1rn/9Dtvj/oSpKEv/t3/y5/9+/+3X/n5zz99NP8y3/5L/8w3/rfccmLZjvBF6FqkjghMCFZ2hPIw2DfVir7iOPOduChDTs8mqbt2G63+5mS5Do1+/71dDql67q9uXZHFN95rj6I6nD9bEp8P9Z72s5h+tTYtm3RSijd8vcdbdPtqeiiaIrQWjYp3afZ7r6XCD2K/SbVdIrxRIzFWZ7jvGzCm+2WzXVBVRaESuCrSiWUZUEcySBcK2ibjrbtqKoa7z35YMB2u0JribfIsgF4hULjM4Ozuh9CS3u1rmvSXECpOyVk159kd5aA3eayE0ms1+veI6UIg4g4ksjvJEmJo5imbUT52L9mO9m7d25vtuxamd00my1FsaUoC7I8JctGHBzM9hVL17Ws1+JPieKwF35AFIeEkbRR67qiKApJkrWdLOxKEXmhYzdNS1WVlJstKI82qt88pRq3zrMtqp4qnxPEhratCKOEyfSA2dEpcZrTWEfjPGk+4uTGLUwYU5YN4ZML5qsN3geYKCVOB9T1B3L84VBQU2pr9mKOclvQ9YeYk6Mxpm91J2lGEIqtwsO+uqjLGh24PeA4DLRUM0i8ieszwnawVfrZRl0JJkglMUnvb2vqGts0+6Tlqq45OjzkqTtP9WGCLTr5IKZGa01ZtjgvFVvb7VKvLartwygjOZztyNgiDBK+JFqDku91cHBIluVoLWnCZVlKC7N/TsNQWJFhFKL2lbnI5g1+zw7c5Zu1XQfK9WrYDt/j/HCKLMoICGiLmtp1xDomD1NuH9/g5Zc+hPWO4XSCCsS0HWbiz6NpaIsCjcOZkCBOUQ5U0wlazGjGYcxyucHECVEur5WtOsIwEAir8/jakjQOg2Y4mRD2vkprLaPhWGgvVwvaxYoX7zzF4XREFhj8uoLrDefzDa4Tn51Gg9fgLFEQEumAPMlIy4I4iIhMTdWHEgo9xKL691cDdA5HKwo/LSGRQaiJAwnxDOOMoqzoioLrqyuqsuIkCJneuEWeZayXKy7Pz6jbhsVqxTAPiaKAbDj6nlb572t2XxQljEaj/uQrPfedT2ez3bJYrtC97LgqK6reaxXHca8ok7yZqpaFcRdDURTF/sbfwVp3G8UugXd36t9tZkpJG0iqgFCUeSiB0iYJDlG6eav2X2sXKbFbzHdU9SgKcc7uN6mdQXi38IP8O+fzJTqI9hQIlCHLcpwXPJXy4r3x3jFqhwz6dqezklRaNw0Xl9coreWhLyrazhKGBuWFime97013En2x2WxYr9ZCU+g9ZpvNRnra/Ua7W2x2c7XvpHz8f8j7s19L0yy9D/u9wzft8UwxZmRk5FBdWVlV7Co22U02mw1BkkFYMHxjX9iA/z0bMAgSFjzAvpAMyRIpiT1UF7uqa8jKrBxiPtMevvGdfLHevSOyRLJLdyr1BhIRcfKciHP2/va33rXW8/weydKKXFxcZLmx/L923zEY2XkpJYXgkDwcsvrygL06FL2yKji/OOe+vcfJ+uSYx1RVJY/ffcS7777L2ckpVmlubsW1/2d//m+OycIo4S4+efIe+66nGwa6caAfBnb7LWM/4PqR6BxRi6fLTQHnvXTSJExZce/+ktPTc87Pz1ksZzTzivsPHrA+PcFUMraqZg1VXbNpe6YvvsKWNUVRYeuGi3qBsTXaVKDFM9X1I8+eP+OnP7tl37bEhHikFgtO1kIwL8uCpraQsbpKSfEJPqDyzqCwllkjC/CUFMFH3OBzMcrxFBmwao3BaHUUkPhpghTRKUEuYuTXdxoGUggYrVktlrz3+D1+/wc/4Gc//Sk3N9dUpahly7IQo+/QiT1AyUFWK5HIHyYULntwinwo886LYrE03L17j9PTM7QWJangvAJ13Ryj6202mR4KI5ABzPL9Bi8Bk8F7jDYUufDZ/JzFIBOA6BNGFzy+/4DTWYPSkd3Y0zQLpk3P00+/YGw7QgqcXpwLtNZqTk5PKE2OQjHiSyyMwdiCqLSg1VJiP41sup79MDAra/r5Itsu5HCQkMw7+Tm9xMSfOroAwzjgfUCd9tTNjAeLFatHhrOyJrU90RaoydPYktIUTOPA2Enek1UF09gz9rfsuz3dZofrRnRIWBSVLUQ8gRFElrUUdQ3aMPlA9DHv9WSqk0wg6YALI6WtacqKlBT72w3JBV4k2LYdKSYePnjAxx9/zHpZc3P1AltoTGFyWsTf/vidLlLKqCynXcmiO+QYhRBwQ2CcxiPCaLPfMwwSTFfWFbYUNNB0cJ+HcBytbTabY3aUtZbdbncMPQxBotIP/940TXKxZzWTJOMqirJCK/3mRm10HveFIw1D4pf1/6hDPZwmD/8dupEDKUApRYiR6CaZwwePDbKMLqqSGSIc8W5inAZ2rUBBV+s1Oi+2fQwkpdm1HU3doEpNP44yygoBbXTmCcruTivhbR1ypmZ2nhWS4RhHIns3GWsevm+QPeHBY3EY5c3n8+Posm3bnC2kjgeEpmkIIWR0VX8kfByIFYd/o2kaTk/WLBdLopfX0GjNnTt3ePToEffu3mFW1vzqs8/ouo4Xz5/z1ddf47zj5OSUs/MziWQpS4q+JO2gGzqGaWB0I86P6ATamrz/8DmMMoe6Gcvp2R3u3L3Hxfk5J6drTs9PefDoHcq6wuXudrZckLSicxP72x3WjswXS1arM5pmjrEVSVncFGiqku2+Zd/t+frZU25vb48CklldsV7MWZ+cMJsVTJNQvn0IMj4OUTiAKaExFIXGFlJjpkn2PS7G7CUS8rciZRKAZDUF5xj7jhg8heTQEL3DaCE5+GnCTw7vJlSSsflqueTDJ+/zs5/+hL7vIR3EPikf/pSkQ1dWSA3KEkIuIiESEUq+LQqGUdJ0T85PKariGOUBgtOW953LXZU5vo9MPlQqLYermDsk7z065d87j7IQTU7aRuOiHAJVRikVaO6sTjmfzVBEKrWXeJze0V3dcukmkkowjmhrUEZhhoGqKKiLkrosGbs9xXxOVCNDPxFQtOPEpm0ZY6TdbUlFg10smQpLVZVMbhRTe1MdAzyVNqRgc+KwJ4wT05hY3tWcqpKTmcF6RTsMBD2hfUT5hMHgJ8/YTugkh87kFfudiLzC4LARiqQolSYYIeyDxqcgoGttSUqTksdHUD6STMKHCLYEGyQ8MorwRpWay6trZlXD0HaMk+f65oYnjx+zXK9JfqTbbTAmYI0oG3+bx+90kXI+cbvZst3tAY6nMp/jMeRjie2uRWnxkjjnuLq+xZhdvnmKUk3iKcSBf9iPHBAqhwIkmPl03Fkcxn5vm1cPBaupa7S1+CgS7JDHDm/HSgDHYMQY8wk1K9amvBM7qOgO0e+HzgMlcdNVWVFXM6yxNPWMxXx57CY3t7c8/eoLhmFHiImmmQlTTmuhScwWjONAWddYbRiGlvm8JkaZ0U+Tx5qCyXmMKtDY43jmcAYaxzHv3wLWvhlPHgrr25H1p6enPHnyhNNsWG7blsvLS/p+OHqk5JFo245pcoCS71vpXNxjfl5mtG0r5smxp6krPvzgQ85yMeuHlh//2x9R2QIVYX2yxhjFe++9y8npmtvNLVfX1zx9+hXb7ZZxkuWxsgZlDdM0MPkJtMR9JCWjmqqYMZtJgT07O+fOxV0eP34iSJkYURp02RCSwUdN0ob5yTmmLLBlwbIWsoGIhDR9P/H6+oarmw37fU/fT1gjCbP1rOHb3/69HHFv0EpT2Jq6qmU0M0m6bELLLkQfc/xIkewXOkSXaAG1RhFFEGScqUKWjSc5KYcsriiMxgdI3rPb3KIOdJBRIl/6rsuGWEnGrcuSf/LHf8yrly/565/8DddX11xdXYkEfRqO3TUpj5RyOOHxvXDo0PJkYr6YS3zH/fucnp6KtcOFowG5aWYURZmnFjKJ8FlUk3JEi4tvJOgqRtw0HhWbKomMXkdyCOPE+dk5zlbcwcLoqWeapqo5X53QLOZ8+OGHnJ6eEI3HJ09ZVdQLARS7XlKpr8eJeVMztntubUn0if12T1FW7LqezX7PZt8xTA6bo19ijJyerJncSAie1XJJ2+3x3jGOkxRibbBFSVGWKCNikENMDQauNpd4FzAJ+m0LUyS0I9onFtUMfCD1PUPbM/mR0DuSdxifsElTKANWY7QlaSnWOl83PiascKdElq6g1IZSSdTH1PWEwoMy3Dk5oyxrTFlSzOcsZ3NePX1Ov5hjjeXhg4cE35GSx7nht7rP/04XqcPo7W1PxOGEfdgtWWu5ublhuVwex2xiig2s1ycslwtR/MGxY1osFsc3DHAsWHKK1sco8nEcj1DZt+nL1goluqwqfEzEkAhROq4YBKx46IwO0vmyrJimictLkZV2XZu7Mo5d3dvjvoTClhVF3VBkRBPZ+FkUBcMgvqqQFMMwoc3AMArtQGlQxlKUlqg1RVnLOCRGBufQOpF8ICVFVRvGyZP8RGkFw1IWpYwIjcF1OZMpJZarxVFODByL1NuClCdPnnD//kOcc7x8+ZKbmw0xwjSJMquqJEplHIcsbTf5MJGht2Fkkblt/dDh/ECKiXcfPeL+vXs8ePCAFCO/+tWvePXqFe12R11U/N63f4/5fM5yuWKxXGKLgs12y+XlJc+ePWOcJNG2ns2oFzNJJkmyzwtRUDtKa0xhqZqas4s7PHzwDk+efMhHH30L5zzPn79gHEds0eCjhDAqY6lmMzyJVJYsTs5YrpYYbZgmz+Cu2XUDT5+/5Prqhs1mhzGWhw8fcn9e8fi9R6zXM0iK6EV0452TguG9nOjJfh+tSUrhvZx2D2igFKOQrYtCvGNJLBApJSKCpyIlUt5NWZ0lxkXB0LUMXSf7oZQwKUge1OQZ+o6ubRnaFrNa8fe+/33+u3/9r/n88y+4urpis9tg1CE3KH5jVK1IaG2PU4MU5eM+BIqikGDNWkDKi8WCcZhompL9XgzsTbN4I283sq87KD+d9/jovyFwNsj7N3gJKCRE+ZkyGT3GyHzWUBQlqyGQxoEyJGZas14uubh3lw8evEPdVExpYIyTXC9VjS4Nu+DYbVsp3lPPuNtTGcvYjuxut9Rlwzg4dpstm81ODq1eYjdCCPR37+K9WDGG9YLtdkPfD/T7ln7fUhQFZxcX1DNJ+931LSmBNpYxOl5vr+jalhhAoZmXM9SUqJTl7tkdZrZEDb2goEJAuYhyEe1lX2e0uHl1aQRk7CKEiA4B6xNJAzYJwRxFqS11IQg5P0xEHymqmjt3zhmGkflsQb1aoZXm1ctX+K7n8eN3MIsV3lnadkM3uN/qPv87XaRClHKftJDPLRyVcPt+IOWCZcuKNkcEhBAk1C3fZMdxkjd9emNAHDIdGziODA6fDxxlrgd/0JuIEX38mpubG5EZI6N88cVpjBKzq3g5JilgeXwh2CFLXZ+xWEiooBSw8ngSPZiRo7Kocn7cjRWFKLsOyrcYI7P5gm/93u/x8vlzur7l2cuXjNPI3XvnnK7XzOYzTk/PCeOYsT4LJtczjj0+ikmyaRoUhqEbAdkVpZSYRlEGzrOKUhvDfN5k4UQ4PicHr1rXdVRVxcXFBWVZ8dVXX/PZZ59xfX3NNE3MZrO8f4oy1som28OvB2HLfr/n5uaWm+sb0IFmXpJS4Nnzp/yrf/3fyBjWeVGSOQchMQ09/+//z/8rm6ZtVoR6ErBaLbl//wfoTHrop5FNu2cKjm4QkYatLOenZzy8/5BH77zLgwcPuXfvPvPZiqKoadseN3lWqzOMNTTzGWVTU85qiqZGlQWdGxn8xIurW7589lIEH62EQZI0F3fu8eCdd0XhFhKz2Yx6VpEStK0Tc/ZBOanegFRjbmkP3dPh+jvsOLUyoARt041T7qqkK1Lkw1VKJAJRBVQMxKhox4F+v6drW+magxjfN1eX9F3L0Asg1U8jyXv8OPHjv/orvv/976NNwS9/+Sm//vWvM/VlzB6/ClscipbE6Bw8cjobvpv5nIuLCx48eCA0EFPgJp/fd57FYokxcm11XU9VJTGeRhGJyM8NJIiZNZhSkpyzJAU5hoCfpNCHYTq+XwxgfBCQq088PD/jw/ff4+zOBVMMGO/RTlOXgh+i0JhZhW1KTu+c8eDdhwxDjxukwGmfwIPbD8TRM7YD3nnJYXv5iqKqjusFOdxJttV2u0EPnhmaeTVDGTmELsqG9fKU9ckpylphMqZE1LB1HfssAEpJUdsGHRRFMiyqOUwOPQxZDDTQD3u2w47ZuGMbe/ZMTCYSSiUGZB8xEXRSFGqHB7zWTEQm75j6geSTUErQaFswDRO/3ndoYylvblGFQIr7bpDw1WGgLDUpTYQwCFTyt3j8jhepiFZG9iUH4rGWFjhk0rmogs7pu05m9pDlk/lHz0Xo7RPZYY8EfEMSfYCrHqgWwHFvBBzfLCE4MfA6R0yy0LZlId2QedNlSByGmFSLEI/d1WzWkFL1DYrGoTs5UBPQJWOyx7/ncCINeTehlGKxWLBeLoRFOPTc3EqA4nK14PzcMpvNWC6W7LcbvBuYzWpuN55xGoRsHQNlVcvYpxW/ykHA0A090zSxmp2wWAokdT5vJIU3hCz+OOyN6tzdHjpCxevXr3n27BnTNMkIMZsuD12ozgX5zp07ADx9+hSttXSI00jXtpS1payEQXh1dSXA2BiJIXL/3j2aZiaprs7zk5/8RF7vPKKtm4Y7d+/y7rvv8ujRuyyWK1zwvLq6ZHg2kRwUBxuALTg9O+H9Dz7k429/h0eP3uXunbsoXTB0Ez//+S8ZJ8disWKxWFDP50fFVzGrwULsC/rdltvtDa9fv+bm+pKu65nNFpysTzi/uMvZ6RnnZ6e4KY+QES+T8xJ/HpzHGmHVmXyIMkrnjiEdR32H36SIjOmyx8w7J91Q9gupvI+SizdKB43Q1vuuY7/b03UtVVEQvXROL1++oNvvmcaJ0lp0ihil2Pktu+0tP/zhD5E4QcXV1RX7/f4oLy/KEmuzUCgqRu84ZLodOu16NuP8/Jx79+/Ja5WkOB2EUYvFkoOitxuHPAYzWbWXjj+/pHTENxMWUhZ+vDl4xiB5WUPfyxi/sDmp12EwnC7mPLp7j/O7F1zeXqO8ww+ewpbMmxMoDWpWYpqCcr2EqsCPA/vLK9blDDV6cJG4H5m2PX42YZWFCA2G+WqFLUtevHjBbr9Da0XX7WlvbtFBjM5VWVBakX031YyLxZp7d+/RLBZMPjBOE6oqcDZxtbnl6mZDVc0obYXy4nOyyTBu99hmTplFHV1fU7QGNWpUKFCxZ1ABVyArAZuwSWHQRB+YQmQgkoLDyM0XnyamfsCjsUUkmMCu7ZjNF+h9i0uS+DyNE1NTE8eJ09MltlDE6HBh+q3u87/TRcoNfVZZZTF6VvWEEDApUReFqIWcozRG4uWjwijQ8c0pSzD+sqvRtiDEkFWBwrIClc2l8oaBnDydIjEkXPLAm9NaDBGtLEVhZOzifcYARWIWOMQk5mGfAiEFfHCEkHL4WpdHGbIUdm46xm5oU/DixSuUKbH1krqeMZvPmc0XpGhQFOLNOiyOw0S1OuFeUaJfvWS33/Ds9TXJWnZdx+nJCUSPUVDEgA+R9ekpMQamQZz+KWmST5A0ZdPwzuPHItMuS6qmJnhP23XsdntSmrJCUonfqigZp5H5bMYf/+M/ZL+75osvn3Fzc81sJrvAYRzRpuSDj76dE0o1T59+TUqJXTtQFIKzqpua8/NTHj9+h5cvX/LixVOMktet3e8x2uQI8hNiSNy9/xBS4ovPPyeZglmmhZ9mc68tCqao+Pyr5+jiEm0NLgZM0XDv4p4U+Zyce7o+5eT0gubkjCFqXm06YoS+H9HzBctVQTObY6sGpw2tm5iut7ira0Y30Q49U3AorVmfnHN6dk5RFtRVTVlUuWO0DMHJMl5pdMjClRjxKZJUwsWAi4Eiy4GDE3NsfCubR9h36SgtD26CFFDZyOtcRGd5NhngShKl3kEYtLm5od3thDrvvMi2Q2DqBgos9VyYhiqJpHsaB1BGUGXec//hPf7JP/1jnj57xuvXr7i5vhHUVn7PmdKwzISVpmmEnblaUdUyOXAuj+uMwbsgxHFjaLsu01pETeu0wbhCFH/BMQZHIKGs7FB8dLhJALMxQ2pViATn0SGgQqBS0jFUMVK5iaWCs8Iwj47h9TOuh1vOH9yn3+8JU6RSS+pFQSwVzA1pZmFlwSh0WVClGakoUL4gblpS0pTFHLsvUcmQfOLeB0+wtRBy9Hou2VVKMw0jDz/8iKvLS9w4USdQo2fyk4SRGsXt7Q27/Z6YpFPWZcUQIzZo7tanzBdLSlvIvst5TFIMVqNcwCrFWJXMZzXNfMZ8OmU9dWymliEFvA2YwmBVDhBNcLY8ZwqePjgG7+iGiYghKiUwYS0klJASy6LCBwErqORhCjRozOgJaWSgwseArQqqevlb3ed/p4tU9B5tyOOKwwFSxlQ6QZlTOfEerYTDpg4y5iwJB94w5pQmaZFc22zWTSqKFyMpgovHPCWV5DR42IPFGInqUC4BpTFafSM7xehAtPIZGdJCiAEXXO6YotCpg6OpZ1RUOC/Fqd2LkKAsG3a7HaiC2WJiPhdxgTYlxtb4qAgIesengAuKYr6EomTuPM9evRAX/qWl7TsC0JSW5azBRcmBqpqGuiq5enWFMZa6FsJEDDBbLCmbhtVqddw53d7estu3dH1LWamMtxlRRIIvmMaRRVPyycff4r/4//6X/PIXP0fpAmsNMUX6YcIWMx6/9z5P3v+QYei53e2OcNiYJBZ9sWg4OznBB0dVF7x88TUpRJqqZrfdUjdzZvMld+494OnTZ1zcuy+RLZPHo9Flw+mde7zz6BHz+YJ+GLm+ueX11Q1D8NSzJkefzDk5vcs777wjjL87FzTNDFPOmEJiGB3bTSsqJ6Up5wuqZk7Z1ChdME2BbpzY7Dv2rWCq2r5FacXFxQWnF6csljNOT06whUUhO6RhGJl8YLksiUGEQYexXUpSoFLuPFRhMBrZeTqhhxyUelqrbNTzROeJbpAiZDRWRQJCspYxd8TkRbmiQIfA/uqG28tLhq5jt92x3+2OXdiiqZjPGuazOVVZAAeslVgMrm9vWZ0sObtzytmdM+arBc18hjYFr19LaGcMkth6oNScnZ2xXC6Z5+iN3W7P7e0NSWkIshvUWfAzOfGKpTyydW4SFZqXsfngJryKFLoiIlSKwU1MbpBrKXg0YGLC+EAdEmWCIia0C5RuYoHlrCqo3Yi7eoXfa9774CHxpmWIDjVptA3ouoC5JlRAFVFGY0rLzC7AAP1IdJp+OzCfr7DaghOF4un5KRglIGXOCSnJrjokovOsX13S7Vqsj8S+p2137FvxaV63wpXUGEpbU3nFOCUKa1mtlpzOV1idTdpWXuMRT3KyByuNxlUlVdUw80sW40jT7uinkVBEyqagLAoRUxIZwiS5Y25kmCbJHIvgYmDwnqQ1LiQGN9EkLUIoN+C9rDMMFms1cXIMYWCKMFstqIq/A0XK5vHQ2xLug6rs8HgTqpc//pbB9O2vgTfGv4Ng4TBKA1FOHdSDbxPXD1+r8iD8SEfg8G+R4+jf+l5+43t9O4gOGpp6htbmuAebpk7UXtrgvGc2m+OD5GmhOkKK9KOnGybqWU89m1MUlRRra4nR0zRz3n9/yTS0dO2OzXbLcjXn888/55379zhZySJ6Nptxc3vLfrsl+sDZ+QXei0z/1ctLEukYf/Ly5csjZFcpxXq1Yn2yoK5KIIqUeRyYNTXf+ugjnj9/zq8+/RXX1zeUVc1+31LXDU++8xHf+/7v88kn38UHoUrc3Nyy3+9QQF0VlJXFTT2rxYJH777D9773XarS8tmvPuX15WuMsXjvefXqNdaWPHznEa+vrui6nrJuOL+4oCgr+nHk8uoGn2SXuFqfUDUzkhVBxGw2Zz6fcffuXS4uLpgtVsSk2O5bYhqJSq65ZrYQdFaOPGn7juvbG5xPxKRlZGIMp2dnnJ2fE5JAeOumpqpLqiqDeJ3LaCX/ZjeS2Xcx39APz+/h2jyIeIw26GRIIe/YUkSTd6BJbnbeOZwbMSqhdUGKIY+wHX3X0raSuzZ0HcN+yMXLC8U+QmEtZ6enmOylm9clZXkYfcs1772jKG02tcuYfbvbEvII++HDB5yfXbDZbI+ScJQ6UjNENq7Ztx1tm8kvmT5xKNISyyHThRgiPu9ofYz0aSSkxBA9Y3D0fsR3O7x3kkuloCyE6I7RxGkiDCNpnAguEkLCRCXPUQwEP3Gz7/mb4JmVhqADry5f0e62mLqmvnvKnatXrB7d4+z9RyzuXzD2V7Rdh4qJqrDs91v62x1hP9G+3PDxt77LV58/5fLlFUoX6KJElwXaGkxZYArhKxa2RCWILtI0FTNTYE9XnIVTpumuqE6nSVBTGMpyRlUtmHpPmGQUt5w3BDfSt3vazYZp6EUc4gJDJxOASBJ5udbHsW+KgTQFXApMDILiSgEXHT4G4XRGj0ZBSPlgbxjGiZSQrk8Zkc0jhStFOVzYpIWmUVXoJPfBYfg7oO47YIT+XQXnbZTOb/757Y8Bx5PqoUgd9lCQs6oSJKMk9tt73uqXjg9ZUmvZex0k6SjQkoX0m5/7tkz7sHs67LZmc4miQCnqWUPXDySCeK1yfLYNsNvnrJw2ENAkpRmcZ600CY02mrIq6fuRxXzGvbsXTGPPT/76R8fU3ZevX7NeLvA+UpYV2sDV1SWXV9cE7/lW9sHsdy3X19fH5+jrr7/m2dOnzLLf6fz8nLppODk54c7FObNZQ9+2XF9dcu/eHb797W/z6aef8urVK25vb1iuTtjttswXS9555x3+4A/+AY8fP+aLL79mGAb6vufy8pKqqkipYRyBhZAtzs8v+OST77C5vWFzc83nv/6cu/ceMI4Tt5sNdTPj2598wrPnz9nt9tiyZHV6yjCMuBDZti1F3TBfCMB1YQtMVVKWNfP5jPXJCaenp6xXq6NQpO97RjegjmNDTVU3FGXJZrdn2u64vd3Q946EpqwFK3UI+UvSqqCNzv6Qb15rojwLhBjo+0GKU/7/B5p7zIemlIScYK2lNBJHn6JQVJIShqKK8XiT9m5CWzGSO+eO3MZpEnP11eVrNtc33F5t6LqOk5WMOI3S1FXFfDbLBIyCupDphH7L4+KD5IlNbqTrWvqtRHC0bcdyueLs7IymnjMMEp8xOUck4bNgqO87hmFgnKbsQZTXIToBnwriKQNvtZjKIwllNIObcEoyxpzyTHhGP9L3LdMwkoKXaA5dUWiNIhv+hwH6ETU4kpfxvC0tpVKoydN3Hb++uaYpNUVpuHr1kmEYaBZzTt+5z+7mmveGjzldr1DrU9L1FftXryi0ZnF2xvj1Vwy3O/ZXO6Z2gnsfcP35V3z+6WdEU6CKgno5x5Ql1ayhXswpy1rI+7ZkMVvQNDOqytLUFcouIXj82OO8kwWFKaiaObpekNrAtN/T73ZU1hKCF3XvvmXcbTFGE0Ngf3ODUqLcLGqJi0lxgujz5MMTIoQo0SYueLx3HGCwOqtBDbCoa5Q2vO53RC+S/MYWlDagxonJJSYfsIWhqQtMVYHOVHgCw/h3YCclp0r5/W8Wnt8sTofHv+vjv9ltvT1iyZ+QMSsxo/f18WZ9OOUeoqq1jqQkJ0zZDYAxxXGRq9UbscVB2l7X9bEj2W63jKMUkIM5ualnWFsexRpd36OUxZYi1UVpMQ9nbFJEMfeB2WLOolpgS3mTd8PAbLHgW9/6NrfXr/nyq6+JCW43W758+jXaKurKklDM5nNO1if88le/YnOzpW075s2cr7/+mhACd+7cOfpXZjk2QanEfi9JuPN5g5tGbm+uM4B4xuvXl4SQKAox956dnXP/3j1OT08oy4JXr17hponz83Pu3Lng6uoS8o2571oe3L8jMStZxPLk/fe5vLpkCpGf//znVPVM5L0JXrx4yThOdH1P24kZuGy8gE2rmma5wlYV2gpcVNuKpAwuJHwe6VWTlxtBVVNHBdYToxDeN9sdbT/IDjMEtCk4OT1jtVZyEyjt0TYgScU6Z2/JPiQGh/PSKR2K1dHGkKGryUsnBKIMVVpnv1IiZEQS2mTw7pRl4nnnkzFApIBWkqK93Wyy92Zg7HuGvhOpv/doBRfnJ9h7d5g1M8pCyOVNVVHYAq20ZE8Z2cX6KHgs4VeKmEUphSkMddMci9Awjry+vMSYzdHEPo4j4fiWPIzM5X1y8MSNoxDNk1a5qAtZw+Ui57yIhfZ9S1Qq+4Yiox9xfkClQFMYUAkbIqkVE6vyARMicxexESpTUKqECYk45pt1gHkpRtlSA0ZAx2fnd4TUcb0n6ZL09RUb+ynh9Z7d5Wtev3rF0PW8rGtefPUllSmZ2pHdzY7w2WteXt5wvdvilMFrxaASXkPUGm1NvhbFEzWrGwpdYCMSHWIM1iQ0CVMUrE9OOTm7oFksKcsZ1tTUtkATBAwbHTNrsCcrBqMpjGEYB1LXE1IUozqBiUQ/DQx9x5Q5iVpZUSV7h59GudaiCG2IiZSku3fdQFlVfOfhI5YnJ9i6ZvCe569f8/Lqirsnp9iqwifNbpzoQiQZUJVlSok0/R2QoIuKLf57C9Pb7Li3R2v/oUJ2+LrDQykFSsu+K0MXpUjlWAZFPlkaaZlzPovKo470Vs8li2p17JoOheoQuHhAIG22O0bnUEDbtqzWJyhl8G0U2nrO7qmaWgQTQFFWoC2by0ui0piipGgqirLGFoboJSq9rhve/+BDXs0a/uqvfsQ7Dx+w3e6wWnF+fkpRrAVkuz7h7r17/Kv/5l/z1VdPURE++vAjLi8v0VpzenrKgwcPjvEfkqF1y36/x0+OrmuIwbPdbHCTz/TmXk6KWcm3WCyP0Qvee7p+T4zkXcWJeNDyTa3tWqqyzKgdoU68++67tO2e29stP/qrHxOS5N5MIbBrW6ZxYhwnNvuWh48eU9SJpJXAfKsaW1XYSk6vSWmSMqAtowtUITFMgbLR+AimrChUBmk6Rz9Okt0U5TmdL5YsFktBHdmCpKQLn7xInOtCvHiH7sa5EX/k2L259o5j35QETfQWC7HI2J/DAWmapnxqngg5ATl4h9Lg4yF0ErRK7Hdbnj17KtEu2w3DwYeXAnVdsVosWS9WzGoRMRT52rRZwHOglbsgilTvxWqQ8l41JKEPGGuoZ42IO6qK7XbP7W5LygxInwtvQt5Xxr5RxyYFNgeJjtOYjbvqKOg4UM4n73HeYQpLN/ZMBIp8TbhxIHqHTYmZFRVkmjyq7wldhwmJRhtKH2nQVEphkfiaSBKyRoRZXTGvSqyWm3JhLKt6TugH2utbiIrBPsWPCffils2rl1w9f85ms0EluHnxgvV8RXSRq+sbXttfEoxl1Jo2BtrguIkj++CZosenRMwotZgii3ouHZ6PlCjBLelEVZWsT9a88/g9Hjx6l9M7d4nasr5zj9VswaqqGcaBmVJUVcGCGV4pDIreKPysZvQOoqMdeobgGN3IOHa4lFCFxVoIccJHxzT28nxGhSWRnCe6SajstqBcwJOTcx49eUKzXLIde2oUtVZ00TNfrWknx+vtlhe3t0xKiO8V4P4uFKkDVeLfV2zefhz+/O/6GuAbhenth1JKilPulFBvjQdTRCeZeygt4z5ZOKnskVLiS9GaMgc3FmUpaadvEb9BTroH7I8tCtY56uTFixcS/jc6zDiyXK1ISRFCwnlFWZXElHIbrUWSut/L+CMF1qdnaKOwRjFTpbxplWJ9esKf/Ol/xM9/+tdYBf0w8POf/4IHD+4SwoRKia7tuL65EQht1/OTn/yE733ve0fixs3NzfGmeUjsPXirmmaGG0dOT89ZLpe0bceLFy/p+v4o53/06BHDMPDTn/6Uy6tb7ty5S1UL7eO99x7z+vUrvvziC9w08N3vfpfziwucczx99gznHfv9nhcvXhBi5O7dB3SDRGA0mYRtCglJvHjnXR6/9z4RiQ8py5rFckmZ4bbaWMpqdoRqlkWZX3wYRsc4uvyyalE11rVw8pQswbUpQGtG7/EBtHJHk23MY5J23x5v6N47SCKCOPp65GKEmHCjkBGIgWmcOIRZEhPRS7hf23WQJBY8JeHZhSj7JzcNjONI38rOaRpHdpsNXdfKyK4qWS/nYgkopfDVRSEEhNw9GS3sRqVy8maKhAyelcOVYLJSilirqJuSQ6KuMpp5mov1oiiF7RgSTd1Id9t1OC+KPXli9ZGxmUhYo1ClxlrZsymVxH/UyuFNCHcJGwp6NzAmT5m8mJmDI00jvh8ZQ6LwUWLfveNEK0prKD3YCMZN8mtKGBRRRUxZUE+evt1R0yAC/8RqZqitRRc1ZTnj3uKENQX1bsSMG/TzW9b7QBUKvPNcLO+glca5CVs0jCHRh4BPEzp5LIlCRap8fwgq8xWzqng9nzENIz6O6BgpFayamajy6prkJvbbDbooWF5cEG1ENwZ0wk+OzWaP3+1Jbcu03eO6npAkc6zPY7yUIoXVlBbKoKQjRwAAPk6ENBGZiEGQUUVSED1T9pZq6wkhcf3lVxQ+sDg7pXUTu1ev8P2eoipYVJaisoxhYDcYSq24e2eNrSrOtjX8+G+/z/8vrkgdfv3NIvWbRejfVczeHt1942tyoUop/x5RHB2YdiqffsW7Il9jk1AhQpJTcJm7gKquMPZA4B6z72eizzfvxXJJURbcubjgzt27pJRYLlfsdi1DPXB2dk4IURRmu4EiB6clbQBJ5VRuwowjgUTb9WijmNUlsSwwVotZdL7gH/7Df8gvfv4zvBMg74uXzwnR0zRSzPruFdc3twzdSLdv+eryC/7kT/6Ek5MTrq+vj96lA6E9xkBVFywWS2azhjYlynLOfL5gHEZevnxF13ZoIyiohw8f8vmvv+DXX37N8xev+eEP/z51M7Ber3n48B2ePLnk9csXhGngyZMnrFZLpmni1cuX3Nxcc3N7m3FWnrv37wnxwTlm8zkocdDP5gsePfmAO3fvUuUZet3MWCyW2KI8Qkrr2fLIgFNKsW+FHrDb7cRVn9mOdV1TVnX2vEmabIiizhNPjpwOQxJAsCkMSim6oTteryF6DG9GxYcq9QbFlcUFQQqSPL9B9ilKkqB3W6HVz2qLXGkq50RNtO2edr/n5uqKq+sruv2emFOR02zG+emas7NTTtYrFvO5XMNAdE4yvDKkNWaYa/SeGHOCa1KYvBgnF8hCWWxhCMFLCkDm6JVVhckjrBAi89lCjPJa03UDPoy5KxT7hjz3OUrEGGwyxODxwYs3bhAIcCBhywLrHZOXE7/CY22JJQtO+p7QO6yPFMpQp8DJbMZMW1KYMEG6AnxEI8o4rKKuCmxK9NsdJk1S1EpRYGqEURerkqYqKZVGDRNx8ExXt5gUmSnNFGE5X+LGidEmfNngu5boHI6JCU9UGquhUiI+iHnsh5GutSktBAeThhSxlaVZzpg1NUVdElViP3akYc+yvk+woCs5RKU+stndMLy+wt1s8fuW/fUN3sshdwwesohEaVGJGpUgeeGeesfgRwbfMYYek4T8opOCMIEbSP2IUxZbem6ePcf4wNT3DESGzQ3ejZTFnLpQFFaz7RSVFU/dxbphtV6znhe/1X3+d7pIwTf3SW/TxN9+HMQJv/n5/65fgeN4BQ7CiYRSJqdXRjG6yl8mBcoYtLUC4+Rw0gxoEwkpUhQV8/mcpmmwheTCHEzDb48ix3FEaxmJxCQdyenpac7NGd8yvBaEAGUpP9M0OXShhHbQNMyXK2xREpVi3+6zsdbj3Mhq3pAqS/RQGM23P/6Y18+fcf365ZFo7l1BItLvO5QyIrOuKk7Pz/n8889ZrVbHtOO7d++yWCyw1tL3PdvtDSkGrq9vuLm65Fvf+hZlWdO24qOytmC2WDKfz7m5uWG7kaj6EDcSwxEOQhJhKH78nU8Yx466lsLglWK7veXy6pKXL1/Sdj1V3bA+OeXFy1eEENjt9nz22a9pmoYPTi948PAdbFkwXyxR2rA+OWUxX8oZOSXG0XH59DnjOB2N3OYQAljIyFSEMIkIGb0TUEqjlCbmjiohiJEYooy/EAhyjFEwPUnC+MTxELM67psqz6OiNO+kQpCOKyBqqOAlVuby6kqKS5LC5KaJaRhk3zQOIjoInuViznI2ozoU2MIynzVU2VxutM5FKmGL4hjX4LLUWyt1NL5HwGRjbEqHosxxqnDYF3kv7xFbFMzmM2KSyJOYoanGGoqyoMkA5sN77vBrOHi3CJnWPzKMQ+b6HYqYFpZiU+M7R7ffE7RhVVRUWmNsgTGJGYqFKVipxElRUqIJOohIIBM7UhSTagLGOFGgWC7mRDcSCBhbM4wjL1++ZGYLUgp88eIpy6JmVc1oioLN5pa6aUha0Q8dwYlf0E0BFyOeiK4tlTYEFRk1uROOjDEyhYALAR9FmLXfZ+UnCaxmMont1DEmx9xE3jm9x/mjd3j4wQfc++gj6WySQkVFNRMBlHMTXbvHTA6CR4VAv9syRc+UEt4afGXpdGLrRjo/0RpPmrSEaA49bugpImhTUuoCEwOFBlMUWDTzoiQOAzevX7Nv90xG0U49+zAwtFdcbq8YiGzGns3QM3hPVWi2yyXbdv9b3eN/p4vUIfco25xyp8Mbjfdb+6D/kLrv+P8hv/li9gggsQdZKitfGzNShqPqymiD1SKRVeSdl/JEHTBoZvMZi+WSWTMDLaO1yUlUhigAxQw3+UgcxqP6z1rLer3m9esrJuey+k5Ak2VUlF4TYmSYZI7e2JJ61jBfLsSp7yXwEQU+TAx9BAIh1NR1wXbf8v3f/wE/8hPPXzwjJjGnhmnCTZKsWlcNk9Z4FBcXd/j0018xny9YrpY8fPCADz/8iMePH6ON4fr6iq++/IKvv/6Sq+trXr9+zQ9/+EOWq2UeN/XEJLHjy+WS3X5H2wvOpYmK3X5PXYvfpqolG+jj73wHReL6+jWz2ZxRa8ZLz9Onz3n27BnXtzecnp3zh3/4h8zmc/Zdx83thnEK3L13n4+/V/P4yRP2bUdZV1T1jPX6jHo2x/tINwwM7cSzF6+5vLyi73vquhZhyMkJp2cS8x1DYJiEUj25gPJCG9fa5Jt2IiZQUdRPPkrUQkhy07W5o0KBtbLQT+GgKhWKOXDkyBltspkyHX1BIQTp7ja33Lx+JTQMHRmHnt12w26/Y+x7FFAUhtVyydnpKYv5jJP1ilXmV0oshagGD+8VYwxVaVDAbr8X6bbWFNZKN6Q0EVncH+JbBIhqsiDCE3wixENskhT5WhuUMvT9QLvvAEVhK2Kl0TYb6mOUnKnMJBSSfsgfnxjGMSszvUi2jRaEEUL7dwp2+x3OB5YnZxJVYQ1lYWmMYl2UnGrD0hgx8RuRlTsUQSW8iviYu1wfUGXFrKloXYfBUljDOAzc7q5YNnMWszkvLl+xMBVn8yWresZ26FB1SQiJ206i0YdxwDmPKUu81VCKfD8peR5VCOgYSG7CZTPyEDyBSD+KPFt2ypZoYD/1DGHAF/DkZM7Dj57w8T/4AfPH73H99XO6y2uc88yXM3Rdio9pGqh8fs3zITSS6PxELCy+Nux1pPUTXXTs8QSr8nM+MI0jFZqiijQZciwHcyhtRVkX+DGwv72hv3yFM4pUWvrkuRw23PY79mkiGUvQms5PVEauze7vgrovJaE3HHEovPWr6MZ5qw59o8M6dlxJUmRjjCStCEmYaMpauTnkQmS1lnkvSVROuTBaYwWiiSYli9JyA8JodPJ5PJjzZLJSa9929MMgGVZlRUSDLTFY0Bo/jaikGLoBpTTzxUKAsEVJPZ9LxHlZsVxLyN1SG1CGZr5gMTrmywWgmbyjmTXZW+IFNLvfS6HVNaMDjOHs7j0++Ogjnn39BZur1yybhpPlAuUTbnS0uz3DMNHUDUlp7j98hz/4gz/g0aNHNE3Dbr/n6dOn/PKXv+Dy8hW73ZZ2t2Wz21M2DSFGnj5/mlNmE/PFHGU0N1fXoDXGaIZJ8pPOzu/QNA39MLBaLVmdrCBGbjc3jC5wu9vTdgO3mx3eS4hb9J6+H6jrGVU5wwWFj4mH77zL2cVdbm43bPZ7QgRlSqbpC3yEmOS1KcuSer7iXrPEGkNhDbNZwyx3vkrndOVJxnoxBt5u1lOSvYVcY0KLAAmWPBxmUhB5uVIQoxHRD7w5R8WDBSLkzkvEEJJllmPcU6IfOrabLa7bo5Ti9gpIwp07XS7R67XsGYqS5WLGarmkrksB5XoHCP1cyzeOVqImVCnb4RVYqwH7RoGqIHCg/XtcBi8HH/LI05CCpqgsypaMfiIScV6o/s5LuKgxBYdUaEUgJC87OicLejeKCXwa5TCQFKScxaS1plSFeP8i+G7ApYD3woE7aSrm1rIuLWYYsM6xtIaFMqysohocJ3VDqTW6KklBVI8JEX9EFfFKus/CJ+hHUlnjRxl1BxW5Sh19gJQKJgNlqbiZOrxKOJPwwx6Uoo0jPkxgYIwBH3piNKTkiN4SlT6sN1E5r0uphDJy8A7JMIVwFGMZkkTreAfWYmYFxaKhPllgZgVu2PPF86fsb26Iu5YzU7K5esW+3aJIFAiNR0WodUE39qTRMQ0DQx9pdaBLji55Bp2IRrx3sXekyeMxdGGCSVMqQxECNogH06ZI0IkxeYbgiNpiAaMNtW2ojMP7/F7TBmMSRfTEoSNN4291n/+dLlIxRVRU3+iMvqHSywyx33x8Q3LOwdgmNxNlJHDMZgOujPTyyCOJeu9NZEZ6k2GjdI5+P+QvJVl2538++IDTArg9AFeFFGHR2lJVNbHIo5ZJSM7Oe7SRiBGlDWXdsFiuaPctwQbqZoG2gu3HGOp6ztJ5ZvM5ShkK72iaJqejdrRdx9C3OVJDYr2VgpPTM0qjGdo9n/3sb5i/+0hCz6xl6Efa/R43OYy5xziO3Lt3lz/903/K48ePefnyJX/2Z3/Gz372N/z5n/85u90WbRQGGIae+XxOCIEXL15QVSVFXclurqokysFYVqs1L19d8vTpU2whApPNZsvp6Qnz+ZzoQ84kErXeft/KWDIzFVMS6buMR88I6Ybt7Yb7Dx6wXK64urpmu+8YfWC7bdnsWl5dXuN8Yr0+5eG7j/jud7/H/fsPWK0WSESrnPCDdzJKm5zsioI7FpJDwqtSb8Q30l3JuPAwNgRkBOQ9SitiJoqT5Dj15mvfGHa994xDT9u2+HHEOaE6uGmkbfe4UcQR3o2UlcSmL+YzmrpisZjT1BXLxULGzHVJ24oBW2sNIQqJ5a3HwSBsrTlyLPVbn3Pw9XkfjuZjstQ++IDPBWtW15Qp0PU9Q79jGAZBgiVJMT7+nLkbO/imXM51G4aOvuuJwYOW94fJ35PWSnBdbmIc+7yPHKhKxWo+43y+pI6JODiM9yybhvOyEdhrmGisZtnUlMZS5tA9pRFItYqCKIuBOEzcPH9FHGWMuulbUmXZJU/vehgL6qbAGs3oAt2woy5KlJe4n3bomEJPVdUkDf3kBB0UFCiDsnIYdUZLvIrRaFNgk5ZuMT/XQYExGq9VzgybCFHhjUY3Fc3pGjubc7255fXNJc+++JK4a7mxBe71NWpomakoHk+ijEqNeMXcNNG6jlY5dji2OLro8YUlGtlvB+/w3snBPQSwEa8tRYyUSmEpRP1oE8MU6aMjuEBdF+i6oDQRM1pMyAGTpaWhoAgR3Q+o8e9AkeI3itK/b8/0thji8PE3f1aQl8DKFNi8TyrKUtbRMaC1FCYZzUnyLj6Id0AbkhYjbYiiVjoEroU8X3fOyf9TiDhiscBYK5lNzhPCxOiE3ae1xjvPMA4M40BVz0Qd1/VMkyCSlJEiE0lYrambGm1LWYJmSC4qz/jJAXhas1wsaBrhhfX9QFWVRGCz3ZJ84J1336XbfY/95pbr62uqsmR1smS+XFAUJbPZgnfeeYezszN+/etf8/r1a169esWvfvUrrq6uACjLiqap0UpUa2VZoZRisxECQehH9m3LfLEUZWASErbWmtVqzXwu47VxHLi+vqaZNRil+erLLzk/PweENBKjpIc6N0lXosWf5LyYBE3T8PT5C8YQCUmxPD2jamY0syXvnd3l/sN30aakqGoJH1yf5NdEos2lOI34SRRzKe9MDst9EAuE/PktaogykPLNdBiJSUIgYxZSpBiP3qfD9fv2tRtiZOh7Ocj0LUPbyY3COxlrx5wFpRRnZ2c8fHCfMnuy6qqisIbCyPWqFXg30ifZbR3+/YPk+xtjhjzfDj4JkSDIHoUkfr0DPeLg1UuIcX2/FzyUDwGlHF0/0I492+1WuH9eAu5A0+32jONE3w0M04CP/ijBT8EdI3cOhAny+1b4mQk3TQxDj/cOpRXr5YL1+gEP757y/ruPeHh+h/2L17z69DOe/uRnxLajUCXrqsHMArVR4Ce8G4ljwliNsVp8hIWhLi3G1MSiJPUjD+/fY3KOLjou3n2Hy27LfughQaUt42aP33f4buRq1zENAwZF0JGimeG0lp9XBeqqyh67iIryfI4BJp0YU6SLgSEF+hRlT6Y1aE2fAqOHqrDYWQ2zmm30/OUvf8anm2vWf/Y/0HvP559/zvb6msoH1hjK3cCJV9zRFaeqILQddvIydRg6QpiwVlMXFVEbQtRED31MJOfAyPQoaE0IHhcnlIegHS7BpBXeKXolr9eAZ7AJj2eY9mgKktWUs4poE85PpGyZUO0gQOHw22HQf6eLVMpyalI6SjcPv5dfyROMQ1HK6KK3fj3iivIbw5YFOsreJylQUW4+VSkx7V7bHFHtxbOUW6WYIngpgCHKgjiRjsR0F/zR6zKfzynKUkjpmw1t29L2PSEIC08rGIaRtuuxZc3p2TlJadruigRUVQ0EJoeoqAqL0oKRUXl0BhpdWMokOwRlDLPFkrOTFdvtLZObmM8t3geGds+sKvjggw9prObP/od/zVeff8YH7z/h/OKMe/cfslqu2G52LFdLlsslX339pZApXl9ydX3Fze01xhrmds5yuYQUiCHQ5KDJ6+sbQGTqdTeQUpIbUZTTuVKKk9MT1us11lqur29JJFarJYUt+PzXv6aqKsEJZYFMXdfScTgn8erGEJJECVTNjM9//Wt+8elnXG+2fP+Hf8BH3/o97t1/l8dPPuDk7AJtCvFGIQKYlCLj5FBECVRsW6ahJ3jhNTZlnfegKncZKXve3njfFProI5qmCZdP10VhjgrIGAPRf1M0c/hvmia5wW+3TEOfx32SCWWtIYXAfDajsAUX5+d895NP3sRfZGCsGHunLM7xWS6e3igJf0P5CsfLmAPN4tAthQypPQR2xsRR1RpTYrPdiScLGelMznOzueXq5ortZoPRlvlsjlaG6+trxn5gzEt5H/3xOtB5DAmys4uZi6mUZB2lJF1t3+6JKTKfN6yWc779rQ/5wSe/xx//wz/ko0fv8ssf/Zh/E+HyJz+DcaKaw0ldowioMOFGj85+KGsVxmrqRUNVLqgKS1lWmKpmpgs++PADglYMOvHRH/yA22HP0+vXvHz9mkIbnn/xJdsXlww3Wy43V/TjHp0kZLBazZmco5162jShzQKfImOQkW9Ikc5HRgVTinQEBiIj0kE19Vw+ZxqISbMu5pyu16S65NqP/OTP/w0vNhvaEChrwX3ZEJkpxSop7lDy7mxFP1sxNSv0MFGMgZR5h5GAspamKTBFTQoDoU+i8PR5P6o1UStUEvvDFCfJ4gJUUJg4UfhScvNSYiQweU8MYIKIZurFDO0KdptbpqGn0ZbYj6ANv2V6/O92kbJVKWO5b5xGcwFKCbCkxFunv6wAJI9a1EGZJF8m2U/pmAMlb1YpNz7IGzPEgFWlFDdtQKwtEMUDI6fmHJKn3owivffiI0qJ+XHII59T1zVFVeWZvYhBUJq2G3jv/TPuP3iH07NzFss1XS/CCqUTPsiYJGn55iNgy4IwJXwmVvRDj9KawgoJ4O79B8zmDbc312y2O+bzGcZK13h5fY0pCu7eu0u323CzucUUhxTQxOnpWe6KBHR5dXXF9c01+7znAnm+xnGkKsSY3PcD3o1y4vaR+XzJer1iNptJJLjSlGVDUdY8ePCQupHEXqU00ziy2WwpC8udi4scEllw584FP/jBD/j666+EG+YDXdtTVA0o2R8VRUU/jChTcOfuPf7RP/rHnN+5y8Wd+8zmS+HYIUv9ojwQQQLTKOM02TtpiqrOScRyyBHl2Tf9TQe/m5i1ZVp4GAlqFNZYIZJ7+doYPS57TQ6jrkMgn89j3oPCr6lrGcEZnb1LSTqmQqgEt7c3Wakn4ycFHIKlNEn2Y+nN9EBlQYbOo8Xghc1GkiJxULam3EEd9r0HAoqPsh9RyN7P+Zi715HJefm8CHWzRJuKvm3Z7d7I72M+PJrCHvOEtNao7PWSb12e2GkcMAYI4o0aug7vRk5PT3jy5Anf//73+P73PuGDd+5z/+5F9vwYqspSWI0bB9p2y05r5gasTmgdMQlsoTEKFJE0jUwt4D3UMwiRdtfxxa+/YCByG0ZuTMQ3Bbeupw0D62bJ/W9/yKMP3ie1A48/fJ/xdsfm1RWvXrxkceecaZow8xlVP6AwJBfE6B3J4hDxnvkUiWiiyinJWtMnUYh6a8BYMeL2La7bMKXATb/HFYagFNtpRFtZSXgXGGJih+fG9ZQ9TOPIndmSk2VDYwyq68RPlySfzDuJLEkuYFzCZqpK1NkeAPnAr7LxHaKRA0+fAtqNomCMCR+jvL4+MXYJ1Xeids04ORdExFGWRgAEv819/n9aWfif18Nae2SrHeOp33rEoN7Mz3mznfrGiVILBkSMlWTPS0DbJLNq6cOk2OjsKzCWYFIOKlPy5k2CpJF4jJCLmDoib9z0ZrRhCoux9jgums1m2LKkaebH2X/XtbRdx2q95oMPPiDExOnZJT//xS9F0hsSMU1MwZO8FK3AG0k8SYgYbdcDcHKyZrlccefePZarBQCvLy9RxrBezFEEtrs9p4ua+/cf4Maev/rRX1DVFTGJu/w7H3+Hy8tLttsNl5dX3Nxcs9lsjqOksizp2pFpchglo45929Ltd+x2e7SGppmxzmy4s/Mz5vMl5+d3uXP3PvP5gs32za5pHAcuLy9Zr1bcvXcPozVlWXB2csLjx+/S9R3btmPct/TDiCnr7DlSVHUjRXhV8d6HH/FH//iPmc2XGFsSksYHuWFrUwiMVyWcmxgnx83NJkNUxfiqkoCFk/PZNCvXk9bqG/li0yTAUpWUULuNwRY6o5GEtOC9w7spj64G2rYV423fHwMADztPoxRN07CYz3P3JIv0siiYzWqM1uy2W6bSEudCrj8S0DNxgihcu2MCrlzkx27KB4+bHMG/6e6sNb8xDpfDh/eRfpqIKTFOLo9ZhUy+3/fs2xYfPNVszny+4vys4sWL59zefM04DCwWCxmJGoPlLRMzSIHM/370IqiY3EAaHHVVEWKk2+/QRnN6sua7n3zMf/a//md85+Nvc7qoUCnh245mUVNUBbqyDHHiut1QFwZdl2ilxdukFYW2GBIK4RzGfmQcHW7f4yfPOE5CYx97XruOr7stzd1z9LKmWNScNRVP3nvCndUJZTIMr67ZvnzNZz/5Of00cH7vrryuw0jXjwz9CIMj2AnnA8lr+TmTFP2gFFErtC5AG/Z9BwrKZkYyliEFbvZb2qnHq8SYEhQl3ir6MTGvKpQxjLFDpUitFFdhYmwH9rpmdnrC2WqZ1agR30X8JNT1yUmciQqgAhgkQSGlhM7FM+X4+AR4nfBKJlkuCPlkSkHiOcgmcO9hmo7qVEWiOATThoBFMTuY5v+2+/z/lKLwP7eHsfqg48sKLFl8hvwmNLbKEpoDJQK+qQDkuMBNSeI9yMqbybssJZeC5nMWDkkJJ0+L9HYcRgFmhqzSyX+neJ3im3Ei0k2N40jaCQ1bG0kjPYz5mqY5FtyE3ABevHhJVf+S07MLFqsVP/jh32NygV9/8TU3t7+SGX7QqKSIuZim7N8iJJSWU7P3ns12R98PlEXF6dkpDx4+pG332YjqcZOXzgRYr9d855Pv8OzZMyKRtttzdXXJF1/8mpcvXwqqqG0ZBllgK6VoakkTTjGik7DYNrdbprGTZa0LGJ2TYmPkg/c/kMW4KSVrKMHtraCVYgyUleyz2rbl9vYaBcznDdNqzWIx4979B1TNnH4YWCxXbHYtMUiwnTE2n+rlBlvXMxmTaotKRvA+IRCikjFVGIlebAEy+kPGubljSjHr994aix32NCmF4+FCKUhBuospHZxVkhMmOCSR93vnshhDEDNlIfEIxlqqspQClwt/U1eUZSGjxryHTDmVWpIAcpeVTbney+5BaA1C2QhR/F0pJVQUabt0Upl6HmMeCcjP/bZo4tBV+XzYGp1jGKfsiQqMzjP0A/044kMgYPFBM5SOYXAkTH4dokwpcprAoZsQqoUXmoaT9OBDfEgMATeOApdNkbqseO/dR/yTf/yPeHDvLnVpmdzE9vaKn/3bf4vf7nEmMurAJvQs5jV+ZmmDxyJmdhUiuJCnIuIXNIVGJwjDiPaJxhRMEQplsBh2N1uu+544K1C15vXzFzz/4kvWzYKZMqR2xG32XH39gnbf8urVa7kPhIiLiaA1qpJ8O0IkekcZZBQfglDGtYKgIklpCjOXr80ywKAUk1YMKHrv8Uok+MoWGBReaSgrClOgJ3nOfSBHtEeeji2qs6zKBlUYqvWapRF4rQ+e3dCy61raYWIMge3QsfeTrDy0xiPvpZjkMOxUwoVIUJAyi/PAlTxAtg/3z0NPIHEkcoD3fqLo29/qPv87XaSUNtK1ZGFAIIljOpOiK2VRSnhuOhcrLYTMrP7Lir6ocd7LbD2DM6fxEOcuI7iDmqwsK5arNVobYdQNPeMgJ+BCKbkI801YQJqRsiyP+6m2ben6njUnzBcLmqYRZEzTvIm90IpmPqNtO3756WdcXt3y4be+xT/6R3/EH/7RJ9xuAvzX/x0//ZtPZf+Vc7VkZHCoq28ujrKqcd5zfX3Dft9y794dHj16zHw+56/+6q/w3mcZrGJyEy54VusVT568yz//5/9X9u2O5WzB5dUl/+q//W8Zp5Hlcsk4joyjdARKKaqyYehlKUpe0F9dXuHdlA/1MSvYhFDx8ccfk1Dc3Gx5/uIVabfn1eurY+T4+cUZTVOz3Wx5+fIl0ziyXM7p1nuaWc0HH33ER7/3bcbJM0wTf/mjHzNODl0UAso0RgLvXGA2X7BYLJkCjFMgIUiXECbavqcfOw7xIgkRMMQoQgGjxUBqszBCKfKe5pDQ/CZVOQTZxUlRcoQ8kj0UqXEaGHMs/WEfIySLRuLTm+YI0TW5GzNGbBEpxlwwI24aqIqCppFwTZu7rBjTGzl5krNtihLzPQzD8TCmeLN/SoeuK48FD4XjQN84KA4n5+iHiX0n47u269nsdnlEGXBZ5Wc6R1ENNHVN14q6LybFmEUo4zDiplGk9Xl0moIjhcg49hRWOtiD0rVoGqqioFewXMz4we9/n//Vf/qfYI3G+Ym+7/jsi8/5z/+f/3c+fOcR1kAbJzbR82jVwLxi3LU4rQhG1I3BedQ4UhmNrUqMURRKvIree4xRWKBUmtpYXt/ueNZu2MeJ3rVvUqSVYaYLqqgopkCVNCYfCExRoKwVcGxRonWJrcTjhfOkpOR+4ycp2FlrDDC3lq7vaPvxWCTGEOl9YIhIkQqBuqzl8KVAVzWrpkFPjkaLQGE3XrHzA2xvcJPn3uqUs2bO2eqM+yen3Ds7x2jY7He8vrri6mbDfhjQt1f43Q6lE1PeCUbeGMslfBOiNZiykv2yl0NPjJ6IFFsZFWadgEoYJXvzPkz4/d+BqA6Qkd9hwXtM2s1vrrdPuYfH4XPyWirPWRNoAZ/WswZtjIBA3/p7j7uvCG3bUZXCb6uqihRF0hliIk7u2D3Vs0a8DnlRChJ7MeSxzjiOeB9IaPQ4Mo6jjHq0IfiEtSWT62m7jqurK7748iuW6zl953h9JSKKkG80UcUjsgkOBUoKj3+Lju3zInx0HuejdIT5BkOUnYBWmpg8m+2W99//kOcvX7DvWr766guW6wVNaPAuq81SYDarOeZpIZBRbbR4LbJ6L0ayXByR3RvLF19+yWKxYnKioCzKmvV6RVUVufDB1fU10QdO1ifSXZUFxhQ457m93dL2k5yIy1oArGVJjJHt7Yb1asWDdx7z7W9/R0ZuzjG5hHMh71vIo6vpuKRPh7FYvmaMMdn0KrlJRDGaink1ZEVnzB8LRB/xo2MYeuHNuSkLbOTGX9gC3ShUDSjJa6rq+shDLAor1wBKkpmPqkFyTIWov6wx+OAZBk8IosDSeceaDjeKmAcw2uCCyN6N0m+9dpIiLebe/J6ICXe4huF4zUyTdH7btqPte7EDTJOEEOosSlJKRkJJEXyU4pRHgjJ5CMeDigwX8mk7xdzZBapCGIAuK8Ga+eLYab3z8CFPnjzmdL1mv92wWq2wWkZTUSX2fUc3jehpIhiF09CrwD450tiRnGMcrABQo6LUmpBgmjyEhJe4Yqw2x25VRzns2iSQ1VoZlJaIII2iwKBCwiqD0QqLpiyMrBH0ARgrz2s/DQzOyWgPaEOii1FysIiMKMYYSdZQGIspKspkmGIUc63zRC3Pc2EFkmxsgbaiku1Hj592NMaASejgSIVkiG1jZOY95TRJ3Ix3LENkCIEyaYgKqyylqagLRVPOmNURazWlUXjEqhNROBKTTgSl8BqCEk5piEIdCS4ccVdBJYKSwpa0TJjIMIQYE/wWMvTf6SJl1EEhpnBeZu0qQaGL4wkwpYTNu6EUE6DfiJvyGxWTadFW0TQVdTPDx8hu37Lft1khpanLGu8C7W6PWRkBlJY1Gk2XEsPgjhHZ8/mMWTNnNmvY7jZUpshegUpiA3zAhYGirCEptC3EKJoC2iqi0vjoQVv2XcfTZy9AF/STIGu+fvaCoMRoqrKrXyl9vLHEKOPHpBTBi/nSGJOpD5qEpR8j1WzNfrohRiepoFbhoyNMPTvn+PYn3wVd8tlnn7Ld/Q2PHj0CFNdX1wzTIORqa1kuV4yjQ1sIyWHKmqkfRdwRIiFCVddoUxJy6uynn37Og4fvMJvPsKWlnldUszsM40DXDjz9+muub28hwuN3H1Fmr1TXtpJQer0hsQGluHP3DlYJLTrFQN/uePTgAd/75Dv8vb//Q7zzoDTeR5zzpBgy5NTjpwkX5AZplWZw+bCgwGRj7iEsMHhPCgEfHH7KJPCYMtx1Ik4iXe+Hnr7rspfH0TQ1RVlitBYvkRWYcN00lGVBUVjKqiDFyDgOaA2lVVk0cYh1iVlkEcHafNOfCB68s8ex8lGRl6cMKkFhJQk5uJw7lTgyAg8Sc+JhhxsI2e4QXJBuuR+ZpolNv6efeoZ+JCECCFtY2YOSKTBoUtC4wUFUGGUFVhp8LohvhYZ6KfoqRaxKlIWhazvc5FnMGppyzjgMaKX58P33+d73v8vF+TmbzS3zRZMZilqCG4ee3XZLozQuBnRhcFoxEOmnDq8Ne2BhK1a2pDHCXZx8oPCe0mgKo6iVlcOKNVQoCp+okmZV1JgwUaiESZpSW/HtRyiUiJMKnfmPWnY2QWkZcfrApmvZ7Tu0sTgX6BQMCiaVcFrjtWbKO1VbWXRRoJXHAt1uSzsFojIoU1CWNWXdCKrKlhhlJORwGGG5FBK61qTCEpxc00YVGO9IIbAwMMfTBM8CC9pQmpLalkwuUhUzFkuDs4ZgxWZzgGh7DaGQg6gLgcFPjMEzpkAfHGPweB/xTugZAY4IqkOmmFHCnGS8/Vvv87/TRUprhTYK5XmjuMrsPHiTtHvonA5my7cNvj6PHOCNAi+kNz6QA8pGIaMea8VXVZYVRSEn+oO03AfF3MruoCyLo9H0UDCdc6BktBhTFLxRWZKSdEDT5FgsKyIqkw4MtgjETsaYXT/Q9b10AAcpfVIc4kEOPweQxzd5nBMOnilFu2vZ3m6p65rt7ZbgJMvH+5B3chlSmxLNbCZS76bm9GzN5dUrhqmHJD9v3TRy8naO3W6bx2c+BxVmMnoeBa5PTiTBtu05OUs0zYybW+H1Oe/phh6z3bDb7YgxUlczLu7cYb5Y5JhzMsNQdhZaG8ZxkgRca9nt9uy2O6ZxpCwKvI+crNfM5zOsNkzjmHOIoiiMks6KPTnBE7PrH3UsCCTwKch4KDhS9EcmnveOaRwZx4EU38Sxh+CIed9VFCK+OCg4DwbZoiiobD60WIs2Gq3Vmzj3t1R6MXhcDMfJwNtTgRADREmOfiOL56g0PH5uTCj3Jrvq7aiPQ5HyPpKiiIC6fY+fnKjQfMRNojZ0PjAOk5A7DqOcfP0pZKfjvcPHEZJHa0jRyw7O5+cvxON1qvJ7mJzUqpKo3gpr0IWhMIZ2v0drRVOXFEZz9+KcB/fvMmsaNArvBLNz7+KC/+hP/pTd5RVPP/ucm5sN7eToncdpoKmYzeeU2gjNO3cPKSTCkJWWMVFTgAlo70hJE3Na7qKBySjUZJjy/sUkBSGSQgDEq5dszEIrRVSJQCAQ8fJkUdd1fs4OibgiGklRtpdoRfAwDg5jrUxpossTH1Fqam2wtiRFUEZ8lXfuX3Dn3h1UTFilePXsmeTH1RUacN1AGz1bN6GGDnt1xdh2dNsdC4QikQbHNAUGn/ePPjIR8/0PtLJopSmURkeFSnKdTqOMjGPmOU7B54mNKBd9Elk9aKytKEwlB+K371f/gcfvdJE6zs15I/U+KK4OY67D3P0AAz38B3KSM5DZdiIj3u32qK7HFiUm30hk9hHlBZK5i6Tj2oKUeoGNast8XuXMH1FHhSA3NOC4J/NRvDDaCBdtPl+Qkgg1nJuwtsinI/EDxZRkCZ9v5P0wUFe1JBLzZgH+9nPyNpMQ3irWzh3zoKqq4vLyUj6eb2qSh5XBodPEyckKpeDkZEUId3n+4mv27Z6qrKnrCq2VZDYN45FGHpMS1l3eSbXtnnkz5+LiglevXrHf7+l7IVForbm+vibEKF6r7YarqyuqquLDD77FH/3RP2KxWDD0PZ//6jO+/OILUkqslyuUkpTZQ5Hquparqyv6Qdh7fT9ydnbGerkkIXw7l7l7IYK2JaYQ2rvJnXZ+oSkyRoqUxHU/Zed99h+FkFE+08jQ94S8Z5mmkZQC1ohic7USqX1VVd+gOFhjjsGGYvoWkYOoUBNFYY+L50PBORx23jaixxjzaAWJ6c50Cx+ijPEyqFVkwwl4E7A45vGyy9J35zzRy3V6c3PL2A2QVB4H5rFgSgLTNZoU1eGCI7tPsxBDRlMhZBFJkp1LijndNeahUUpSxNA57VW8HFpJnphWiuAm9rstRWE5PzuhsIZHDx7y7Y++xXK9xE0ThS0wpuTjJx/x7ccf8P/4F/+S//6/+v/x9PmljNi8w2tNfbbm/MFDSjRm8tjJU/oI3cjgPdMYIHjmRpBEbhywpqCczVFFSaNL1lVFOdX0fSsHCi/U++gFB6B0QsUIBrx5Mx7zSF5ZaSvKyuJ8BOOofB6letnHBQJeJQKR6AeZPFiNHyYZKSJ7UWMlgj2FRIgeFyPvvPOQj7/zMfPZjE9/8QtevnjGFAMXq1NCWbJzE9txQrV7ur5ne3PL0xBZRFhpy9KUNKZAKUM0hlElepVwQaNiRBtLYaVtNFSUGZvlUiRNUUzvyTMGxxQmphTxZLV03rYZU9AUJZUtUSEdeYl/2+N3ukhBHtcpjqffg/P/7Ru1yv/fGAvHTivfmEIQ8cFRuiXzdJ3TOEUDkNUqIDP3KJBYo+XNndJBwZdyx5Tycl1GGXD49w1lXec9yMi+3cvcuayIKWFNKUVNmyOvTOmcW5TTSruuRynZI8leLX3jhP2bKcM5BQuTnxPvHEPfM41ygy2sldm7NsSQjkqzpAIxRQGWKpjPZ7z//hNev34txlItM/jZrBH4at9TVQucl9Ph5BzBe169es35aTjS3Q8Kx6srgbn2fS8d7CQ3zaZp3iylq4qUJLp9t9ux2WxIScgDwQeMNaxP1tR1TZuX+cEHbCkRAEdpeN9JGF72s2mlUUhEA7lIuRjx0wQkjBIkzIE6MQ0jzk+4cTiqFw9puN5NECNFYanKQhbwhc2ZWm/EEG/bIw6KUjjsSDl6kg5dN7wxgx+nAW89VN4/ap13ZmhiRoSlqHJ3nEUQwBTj0WbhD+GBkz92U94HUjjsDzMtxb+1q0ophzzmWI8Y8xsrEX1kirIbnKYpd5S56Kdw7EIVmWcoM+mjcClpnbsRiF5CAI3SpOi4f+dC3tckri9fMwwtV69e8eLZ17z3+DGXr19z++oFY99zenHB9ctL/OipKxknBa3YTQNDigyFRdmCVBSYKmIwlKtIuVwwtR1+FPRUMAX1aSH0EFPIvcJ5UlbxJh9ITogzBk1hCozSaMQ2QJ6MJKVy55GpNCEyORFoOR/wQV4nkW3Lc1GagqQ1IUR01OhkiJOnVJakhTRolcG7gC4L1usTnnzrA/7wj/6I+WLO5dVrqnnNg/fe5frFS653OyptSVZgBFMe67mUME4zuICNAY2Tw7FKhCT0i46I94rkrASFGkuhDZYRrQqUFbhynASkbbCUWiY2iUjMuDCdb8IyBpZr3aAPGpG/9fG/jCKVC8xhnHe8QWd/yCGrxlpDUVRHxl4I4Zi0GjO9OiXxgCRlqKoc9a6FQpySKApjjOx2e6Tg2WMxieGAjRF1Vcry0hD90Ue0Xq1RWjNcDWxvNwyjY7U6oZnNaBqVqclCoz74srSxRCfJpH0/kpQ+wmoPz8HbJ+23H1qpo3HTO0e73x/RONM0keoaraDQBu/lpliWBboUpM449VRlzfn5KQ8e3uH/9i/+BTsfqB5UNHXDarXMMmbHarVinAJDL/TkYRi4vbpmfNjzzsN3jiOm3W4nMRtty4sXLxjHkaKu2Oy2rNdrVqvVsevQWtO2HZeXlzx/9owE1GVFu99Tzxo+qj7i3v17XN1cs7m9xUXxob0t+99vt6xWK4qyktfQWFQKFEYJ4FZX9O2eycuIr65KUvBMY0+329G2e/q+Y8pCFxCvR0oBaw2lNcyamtlsTlXJrmk+n1PX9fFnOOyJDkWHtw4Xh04KDva9N7DZ3yxSbyOUtNZyoiZHTuTiJ9BWf8RxHeLmD13Z274uN7lMIPd4J9MEN4mPKx69VrzxESZ1pLdrrY+HsEA6HkKm4PLXRhEuBf8byQGKotAUhUUjxufkE26UxN126CmtpakK3n3yGDeNbLe3vHz+DNf3fPXrz/jVp7/k7v/uf8/Xn33G3/zlj7i5uuJP/uRPuH7xipvraxaLuXSJJHZ9jzWKwUjkTFFLasFitpDx/OToNju6fUu725OMYXlxkW+oYjPxmy1DH6XrygVVaZUzrHK3kW+6CZkmYoTjqLXE3biYCSQp4WIUdVwSL6YxBYXRYAqSNoxhIvnEFB3jMFLWFQbLFAK2qCA4ClPw6MFD/rf/2f+Gf/rP/mM++/wz/ov/8mvmiwXf/f73+ZlS/PjP/pL1fEndNMLeSwqnDS4pVHSooNBBfHUBT0oyXu7xDCTphlBoZaRAKU2RCkyyJKXRhcFUJaoQG4RFsFxRJzBCBEpGkGUEmPoxrzveXDt/2+N3u0jlm2/M0twDV+1/JKPlwFYzx8IFHN/sSmkpBDECmrKoqKpauovsuC4qQeZrNJvtlinvl2wukCnKCVwpUQnmykkIioQ9AjRN2zJlinRVVUeJuw+etutIKIo6omxBVWC4ticAAQAASURBVNdIrp7B2EKYe8MgBPWQPVxv/Ry/WaDkY2+W1BLF/caoeTR3ZnbhQWGVjEhhlYYQHLZoqOoC5xz3Hjzg9vaWYehpqirDcUuGwhKCp+96qrLiZL2WvYyxnJ+ecX4mtIqu77ClyIsVonYMb71+bduitebeXY5jqb7vMMZIwKP3IhZR6ohQ6jthxR0MTVobmlkDwHZ7SwQevfOQ0homL/uDLifWSrnQeDdCkhvmdhAc0jgM9G3LOI24ccwqySzWUTrLfwuheVQVdVMfX1ObhQ0HI/nhNTgqUd3be6Mki/Z06OhTHkW/Uaq+vUs6SMK11pTGyG4ie7ZE+CAwXJfNw0JRiRwIEweepD8UKp+Viln1OE7iYUo5kTeFmJWaCVRWuSLqLlQOAI2RkKXvViuSzt2cE6l+ysXWKDksJiP7rqQkNykFMTlrBU1dURUFmoD3gwCXpxE/TbSbW2HwOQ/BEcYB7ROzoub1sxfsbjb40eGddNRFVeMT7Pc9v/jiK5qipDaGmbWczhcsy4ZZURAnx+AG2jChkmL0kt+mraaerzg5WTK7c8HY97TbW+m6QqTfC19RoTLBQt750R6mIMLgQxlsVVEoUcElNcoUJApGzRGyUlfUximP3g8PsbBlTqTSzJo59WJOYUvJ59KK3e0Nv/zFz5nN57z3+D0++OhbbG+3vHr2kkJrvFEMfY9TnqAsdQoC1U2i0HNKoZN8LyORCfCIkdcQ3+qoFSbJfVOFBFPC+cSoEqOSPdaoEoMhJ4YrUAaVlPj6tEEnTYzfhBz/+x6/20WKN2MSueGCjPHejL+MMSTN8eZ87K6OUvWcC6SMVP2kaGYN88USlKSgaq2ZzefMZjNijOy7DpdJzZM6pAPLkzmbNXlfo/N+x6I07HY7bm9vpQPKxbNpGoqqlpNt74U43nXMlmuKeoYPibKuSEmhjRTMXdsyTU4uEP1Nx/Y3R5yHZbQS4UQU+XFVlqgkS+pZ3Rw/N8Xx+LzF6DH6UOSFpdY0NcPQ84Mf/oCf/eznfPH5r6nLisViSdPUuctIDMPAen3CJ598wmw2496duxnDo/nwww+53WzY7Lbc5JC4uq4JMVJUBVc3N3T7vTjSrRT2zWbDft9SVRWz2Yy+7yEl1icnnJ6eUpYl+7bl5uYGgLqpMdawqJd473n96hXPnr/ge9/9HqWV0di27bh89VpyuKzFliVaSec29D0vX77AO1HuBe+ON4vClpR1JTJxYzg7WTNrmlykSqqc9xVzVzFN03Gc9vaeNHgRWhx3TVrsAge2n8jJVT6J628crA7+uwPqy2nzlqJTDhnyb8qvzk344CXrSnHspA4kFpHI++PuKQRBQwXvc9TIwewes6dqFNVfDNIFKCmMBzZlWZYUVYkxefwYIbhA33d450RwU1UUtoJszQhugnSIP1Es5gvqqqTd3tJ3LcE5/CjF6vWLF5gU0CkSuo5+t8MkxdnqhM9/+Rnb2y3TMNK1HXcWd5g1M/px5IuvnvPpZ89QCgoF89KwmjecLJbcOT1l3jQoFOMocNXdvGJdnXDv4oz1+R3urk+xEcI4Mex3bG6kUH3+y095/emnogRNiPhIXinxWWkj8ONM2iiLAh8Cxmr04IjOCesxRnzMVc4H0PL6uxBIyHWjjGTWaWNZnZxQz2c08zlNXeO6jqdffsm/+q//K+6/84g//sf/hN//e7/PvJrxn//LfylGWmO47Xu8KfBxZK4MVQg4wGOYUGg8kcBEwkGWvINOMgb0efQqCXia5BElH0mKE5Epf/2gEmiDskZCMG3BxfmF7NaUmLC5+tvv8b/zReptb9RhF/V2Z/F295DSQe0narG3fSTWKgjhqFQS6oPM+g+ATp/TWK0VlI7Hc6wLKaG1qLgWC8EOOecYRwkzOyS+WiPyVpXDFQUpZCmLAmvKLOkuMLYQRlaMktsSsylZG8B/Q/zxTXYh3yjG6jf+rJWWPKDc8XknN2qVT8fOOUqb5er9nvliBirSdeIOL4qC09MTut0F3k207Q5rhJbRdgMx/5xN03Bzc0P0IZtg5Qa22+3YbDd0XUeZd06H0eNisZBxVT7hpyQkjqoqSSnlZFZFXTdcnJ9zcnKCLWwmXwx5rBZJ48T7Tz7I9PiOV69f8/lnn3J2cYflck1I5Kh1dywmMbMXD6MurcBq2S8lkuRMlTVFVVJa4eTN84EkD2eZ3Eic3uos3hrVHaPjg+Cq3n7NYpDO9RD/EYLHaE307vgaH/6+Q9E7CiuSdPFv/j6RkMcoxlrnZKT99jj48H2FEIV6Lha5o8pOyCVIunBKx7GdXOwRge5FxMSMkN6DAyWYKWvFkE6KQmEfWtwkr+mBjAEp772kaBsl0exGw7xpmDU1FunES6vRLOj2sLm95my15NHDB1RVxYO793A3HS+ev+T169dsbjcEJwzFoRvYbbb4JHvW5bKhLGXEWFclikhLxO03FEOLQov6M0ZexInl/paz3S0XV6+4WKyY6QKbIsk7kfLHhF/VNA8uUEEoKyrJXMKiMElhksakPO4bBkY/McZA7yeG6JiSZ4pOdqJKZa+aPP86enxSaFMweY/VKoOvNc18gS4sw+SYRlE4LuqK+3fu8g///j/g3sUdUWVODq0FMDC5IHaVQiYSQxTtYSL720yiNFpKVfRMIYJRxBQRq7j4u7SKeK2OvrwYI1EfmKgijtGIyhAl1BURNwbGaaD30lGHvwvjvjdju0hKGlHgqm+cPMWxb0WpFA87I3V8U6s8M1bK5pGf3OiHcZSPZzMuiLxWZ3ZfYYuMAMmFRCtm8xknpyecX5xDEv7e9fVE17fHG2xVVUSygVRIkyhlaOqGppkzuimPGWz+PqVFNkZRaI0tSobMT8vp429udrl71DI7yzKQhFVCMz6MXYKTMEafL3BdBKpCJBaTc8wbCZfz3nH37jld13F1/ZrV6oSTkxMA+n3Hrz79FBJcXNxlfbI6fk9NU1OWJc+ePeNp+Iq6rCiLkvV6zdX1NW3fEUliLFQSKzH2IxcXF4zDgBtHuq7De89isWAcBp5++RV911GWJRcXF3zynU8wVnN1fcmLF1u6rmO5XDFlWfqTJ084OTnlF7/4BZ/+4hesViu+/fF3ePTuY5arU5nBe0/X9YSUaLtOilWQWAVh5IkYoq5FvlzXDcbIeNMYTVPXoqgLklI7DlOet781ds3X4mEfJTvUjOSKOYU2icT9TUyFYkpC6na5G/vNYqeUlj3T5I9+KPL+8W2/lEjHD6PFlA9qb4qe9y4XrQyS9Y5xnIh+yrclKUzSTUZSmLLST8Z/Ie8ZQ4pUukQRsIXCaM2YFMF7xn5gGAaCC9ke4JBGUK7FFD3GSFDjyXrJajGnrkpOVjPi1FEYjVouuDGan/zk3/Lg7h3+/g9+wHzW8MFHHxIn+PG//Wv+/C9/xNX1lZBeQuLqShIGyrpivVxy//5D8eQVhmEcuLm5Ybvb8mq7kefJJbxPjDERv1SY0jCrDauq4bSZsy5rVnXNerlgtVgymzXMZzUPv/0RGuk2dO6mzOBQPpLGSPTSpbaXl3Tdjj4GOudoXc8UHFOMOMQbqQgkrcWHFsFWDbYsGIMjqoS2Gm0N6/VaGH7TyHa7xRrNxekZn3z7Y/5P/4f/I3fu3eev//onbG5vmc/mtLuW5ANFUeXDrmJwgUiUUaUWtWVRlCgNcYyMweXXX0zJSovEI2hFVFKIRE0t0GIVFSpKE6hSQmeTe0yCdfLR8/pqkmsU9c33yX/g8TtepHLgnEokQi5UYtbV+mAVink/kMnU6cCPSvlJj1gl4XTaFCgt0EQXAmgwhc6nU8c0DtJleU8MHqOVnMi0dF4UmsGPtGNPYSwRKIqKpp4TvTj5lTKE4DCmoFKGpIy0y1lmXtczmvmCqDTOBfET5Nm9SF6BeIgbOfijIIYDk1AOxCZDTpOKHKnv8c1OBJR4Xnw4ICFRUZKJnfdYg0QATD0uCIEghYAbe6rScH6x4ubmhO1uj4+TtO5aUdQWUyrQoLQmhIQLCaUDo5uY3ChGS23Y7PfHHYsxltVihX7nXcZxJPrA5avXLJcL+rZDm4KzizvMZ3NOz+8wX6x4+eoZu90tQ79nVgsIViUBhi7m0uXMZjOWixVh8rhhZHNzSwiR26sbxklgnyiZ6evSolVJU5fitLfS4ZalULWNihgVUMmjoj5Gtb8ROiDekRCOp0eUvLm9d0fRBSrKkdtmmbY/vHDIaxpUtkQ4+qFnHMbsL8p+FRRFWTKNXiTwb0nUtTHHbiUlee59BO/I7Lz4psjEmMUy6XjgSiFncxmFIpKimJdjkOvGBXfs2A5eMKXim+c+BXATUSlcP+DGnhBEum8Ki1BM38j9jREjcFMZVvM5q7qm0oo0jWglXfUwTMToKApIceTlq6/58U/+krv37jN2I5999jWfvniKKxQ9gVGBKiwFsD45papqVss1hS5p7AxbFJR2hjE1VbOm6fb04yAKU+fQk+wfS6sokwLnGGPLdhjpu57NMNG0ImZo5jVVJcnHhZFrprElcwV1aSlLi02gY2KuPSczg/UToWtxo8WPIynvt0DuBykpYiiEzmEgEQhKKOIhOcqioJnLYXXygefPvubq1SsKBR8+fo9Ga7769Jd89tO/YX91xbywOAUuJSbvxP6ghH2q8p7J6YhS+YAVYIpePFJiikMrxaQzMCAXGYWY3QtbyKGHSEiRmHPITNLkTEn5N4GE/H3Sj/8dKFKQ3uqaDjBPnXcpopSTxFyRnPuQZ+D5FGiUnAIk+bNgPl9Q1jU32y2h6znI21OSnVLbtpCgKCuGfqCuG07PTmmaGeM0sW133Gy29MPIerWmqStWJ6ecn1/QtR23NzfseomsKMuKZlaBMlzf3HB9s6EeJr7/ve9jqoZ+8qTUE3L356OY46wVCavWBq0PHVQ6jnyUvPdJ4sxFF0IROJzEp0nSbUma4OUkzKipK8usludjnHpQkTvna16+fE5IkeVshfeOtt1xcrLi0bsPCcHzq199LpEcY482mvO756zXKyQosiB66Rqc97RtSz8OR9rG5eUlfduigNOLC/70gz/h5OSEm5tbfvSXf8VPf/rXzGZzVssVTVPzne98wv37D7l79y4xJv78L/57Xjz/AqUU8/ksBxZK6uz52QXzxZIH91vef/99AK5vbplcoLi+4erqihATZVkxXy5Yn51SNQ2zujmKIYqMRFIqvVWIhJvXObEfuMlnnFEWTBgrP3eO6hCad2Df7hmnCVsI+shYnc3oFpsPKwqXAa4T4zjQDXu6VqDAQreQA1dlJb146IQ8Hg6n4SzdL94iQAQv1800eqZpPHZTx5Fglu0fOimtIkUhp2FixPsDEDcbeqMYNVMWJjWpghTl4KbBTwMjUsD2+5bt7UaM2sZSFBqlIz5MmKAobUkzr1jUNct5xWrecLqY0Xc7tpsbrIKx77i6eoX3Ix988B597/mLH/0Fv/jlzzk/u2AcPM9eXPPi5StOT0/xJPadiHPmsxl3Hzzk3YfvcH5yztdffc3kPcuTJYvTNbawuBhoh57Ndsu2b+mmnna7pd1t0ClhYyRMjqnr2HYbRi+7Gpf5ebaWg1nd1JysV5yerLlYrvlofZ+zqmS+WLGuZ1S24DQ47g09m6Hjer/lxXbD9X7P7WZD2444H/J+SmGVdC8pJmLweOUprUUZxWwx5+79u4xu4rPPP+cXP/8Zf/Zv7vPBB+/zz/6T/5QwTvzz//P/hb/4ix9RFAWLxRJf19z0WyY/ivChKKhKS2kMhUoE59mOHS46FOrId5SkLzlwRvKuLCkUYkHRaCplIOdohqQEhpBHnyplAj857kWr7LfLBeu3ePxOF6lDAZLZeiSSBAaaPUnT5JCd0sEfBTrEXMri0QiqtUTFH6CihS3QRkybJPIOqsBaMalK+uycqqyo65kYa9NBRaVIuT0OWamjUswLxAJTVCjnSUqjcnR8WdYSD2IsXS8U5oiWk3mOFlAHH5TWFEYwSCl9cycFWf76jZ3HAZMTsbbIEvPquH+Q5TXEdDB+ykMrRd93Mh4Knr7fM69mhOjohw6lElUtxuWuG/AucHJyRlkW9EPPs2dP6YcOP4Xs0ZKbu3OSRhxTFJ/VfIa1lroq6bqOk/Wak/WKx4/fJaVEVYliTl4HGbNdX19xc33NNA2y1wgRW0jgnjEFq/UJddOw3+9lx1ZVjNN0PLUrpY5mbFuWWTpeHyMyyGM18YPJGPkNC1KeNK0NRXEAzursixO598FcfvCwJTRKW4xJGG3FMHmwPITDbsgRfcA7IY2Lz0ihtYyWSVJwVF6igxjQIQNlU+Qw/fckVB7xeSceKO+lgzp4r6Sjjtlw/qZIgfAHlfKk6HBukHFjphBEgTseLQKCGwuZ+C3jxYP6sO97QnBoJfe2uiwyfNiTokS4L2cNy8WMRVOxaKSDreqSc3NKVRTcXisgonXMiQElh5HBOI103XiE+d7e3jAMA+JXFB5kjIHtdsPYj4zTSCSx228Z3EBRVygjke0hR6jEg2qyKOVGHQQjZcuKIgS8CYxJ42Mk6oQrhF/nVST4kb7d0gaPcYoru2FVXbMoaypTYKzBkdiPHbftnk3f0buJqC3lTGJEYtIoZfEhHuHNu+trqmZOUonRO8p5gykL5k3F3Qf3Sd4xTBM3txtiiDgX2Xc9Pkamrqdu5iK6MIbCyMRBEMuKiXTwYuONJimLzeM78v1Maem8khZJeVSi3pSOKuGSz6pG6aKiimgFZR4RqsMFoLO1Lt9k4vFu8x9+/E4XqQMGRh0EDPHgH8lpq0puCJCBjzl2nehJREEqGXv0IyUFPkWqusaFQNv2OBcolaFp5lhb5xFHyWol+UyLxZJpnGj7Ae+S8Ou0JSYtF3bG9yRtaRZLHAo1jKAkosLYQnh+eez0+uqa2WIlRUwrynzzjFERCfkmK7uyEN72gqmjQfINAf3NojyEmBN9ZWek0EcKxr7vGAdHoaAq5MYcXM+gHOM4iLgjgZ7N8p9F5HB+fsrXs4pnz54xDp47d+9Q1zXXV1d8/cVTFFZUkynmG4AjpIApCrSxNE0GqxpDWZV07Z7gHWdn5/zpn/4J04FiEROz2ZyU4OnT5/zsb/6GH//4x0yuA4Ls13xiGCfOL+7y7uPHaGO43WxwPnD33j2ePX/BME3UKf3/yfuzmMvSNK8X+73TGvbwTREZOVVWdVHdVHdVNxi1gS6O5CugD4IjECAhy4K+QLLUAi6AC9QyQgKJQWALcQPIvjE3iAP4cANC6BwOcEFj08Y90XRXV3XXmJWZMX3THtZa7+SL51lrf5FVRVX5yLITdikqIiO+2LG/vdd6n+E/Eazl/OKSy0eP6PsVXdczpHEhJVALzokws1qh/cL8fqoxJoK7uMYhmvCstO1Z7ySrZ6z8HWcbTBOWyXwWV+ckLu0pCnthHKNaRUUqGarFuQZjHMkI0WN2M6/KxJwjN+bX6L3c1jHK9BSnpAxRizVm8ew7Mf3yidmZRkqdyGUkZ2UHprjosUIrJr7OB5yzTOOwrAJLUgNcxalEqB3xzrPqGlZ9S9aJDGtpneHqYsvrrz3ifLumcZCmkYuzFWebDW0TeP/djsPxEh8sx8O9aKy8hPvd3d5x2I8cDjuG8cB7H4illtX3f1sy4zjw/vt7piFyfn5OLoWnzz/AOEu/Xst7ZY0c6EUmhWAdNTQ4wNuOEiOjJjinOGFSksHBGkZEk0bN3I5HuBbSxLvlq/TV0RpPZx2NdWxWa5q+J9dCrIXJWoq64G/Ozuj7NaHtaZqOUuH29pYPPnjK15+9x2uXT9gfD8QcWZ9vefT6Ey4fXXH52mNefPA+t3f3vHj5Euc8z54+5/0PnnK/kxie7dkFqRSct/SrXjDQaSKqU/mYVSZgIegmwBqLKXVZZ1dU4WFkTadKP40oKtp8SJmqFDwGb9XL0Vpwp1SGahYd+Hf1+EgXKcGKHdZ6XcnMB4geIr6hFJloapXhVZewYJ0aTDhMCKKJwjBNCeelOw76+945qrF4EzA540MD1jNOGfZHveGFhdM0EEKHdUGyiorkr1jrqKYQ2p6un9SXr8M4R9OtaYys5TCeVDQHSgxjpJtxTlZ52o7MK835MdvsmDoLJnXt6U74xMzoqhrhsND3rTB6nEXFlQkfDKZW8VEzgv+VEillolTPOB3UwTtweXXO3e2eOA0UVwmNOHVIplZWZmSEmiUKvIhrdc4Ttep0Q+Xu7pr33g/sDzthSOrnOU2RpmkxxvLu19/l7u6GmCbEP64uGWIV8E3D5dUjjHG03YqYK431XE6Rvl+xWq9pux4XAk3bgXFMObGEAoIWEsn6MbBMUifCjeB7bhYpIqzQh/ZF0lmKR1utlTQz6OxMaqiUrJNTzMRRDrpxmDgcpDEwrix+eyLInTWBhlLEcqsmmfjmTDQDgrOhhVPNdHNOpEl2OPMEVXIhqZv7nLxbS1TMSIo1sz4GEa/W+XltlmvDikWSXb6vvExqJSeVHwAl4U0lBEcXHF3Xslk1rFqPN5UcB8apyGrRGZypTINE8VglAYUQxGLKOWorn5E1nlSNTneSKVe0Keu6hmkaMKUyjAPh4Ek5MaUE1jBNI6FthBVaMmMu4IQoVVKSDCXrJOdK72NwOOTaWPxc6vw2GSiFWCv3NTHWSmMqrS0EEoNzhCLvecGQnAVnaVIiWU8ylgZDUyuhachWAwZBCoqz2GDZXl5wv9+RZsPhWqhGGtqUROy7PTvjtSevU0ple3FOfPGCWLKUkFrIFqKVplwmJauQwanpVXKenLUs36as8xSnsk79MuYvUNQUq/l2QhzU/55TiOXr/qsgTuz3R1r1sQvBLF2mMY4QGtqmp+BEaDaOOuFUDmNks1mD0dWfrvwkyjvRdyusdZyfXeB9YL8/4LsW7+Tr2rbTLk5seoZhIoSG9Wq7dNW1OiSccsR5JWaEjlVo6Ndb6UTUPqXtt+KYXIp00TnjrXTyJQtYOqfIJj2wnIPGN4uZroF517eAoYJPKT3fuSWc8HgUAsjMAms1IbNW0aK4Ngvl2lc26zVJJ4SURzASSZ9yYLPe8OabYvb58uUt7733jL7b0neSuvu1r76LxQmWMY1cnG+JcaJaQzDShTsrXnmubfj1X/siv/LL/4nj8YDB8alPfQprLbvdnuNxYBgmJjU+RXfaLogP3jAMpGHk8vKS3/jpT2Ot5fHj17h6/IRUK299/B1xX1bsMeWCcZ5hGNnf3nJ1eUHbikt4TuLUYErR6I7TdCJ+dhJdIYLvIs7quqKz1qqWxWmREiuhmGCcVNirU/+k4YcxiuVSThPjeOTu9g5MxbiqqzJZeckaUgxNZ+ZeGodlg/Bhwe/JqaISlSmY1ckixbQ4U8w6qZwTtUq0d9M6ERjnLNZg9RQ5X4r4WGbvFIdTpmEclxSAnKIcV06j4dOErZntZsPlxQVnmw3bzZpV30EZub+9Y1T7qloL3qnNkJXtR9NYQrDiRmKFHBJ8wzRGBnVjORwO7O53ktm23zMOA/v9gUmZhbsP7pcJMuXZ9FWuJWOgqHN50zR0bc/DJIVSykJeCRWollgqtqhtxAzi6D11yImRTMDijcVVeLHfq6eiTCIJ+fq261hvtqxWa7p+Rb/q+dg771Ct5DZlClNJZFO5OL/gE9/3fXzpy18m58zZ+TneGZq+Z9WvqAUeP3mDYi0f/w1H+q7n5uZGCE41y71cJdMpLWeGnCDGiK1OipFgZPozBaVIyGutGKykGwrmpHZQMxHNVOl0TYVSVSZjJEWgUDmOA7lWQhP+6yhSbdMRfCDngjGzs4LqobJcNKUKaJ+LkewVA9YkUlb7R4es1rwX3y0EfM66w881CYZiPTUYvLf6nIVJk2atC4SmW7CtuZux3suH7J3scUs9rShnggMoEGmwtuJc1kZE4ppF36f8GAumStbQzLJZHnX5Px7+5qKdguUG4gFeAjJUUuduXDfFaqeD3pwga7eK5i7VRKkRHwxN6+VHcKJ7yVHNc9fEaXY9EK87TNVfF6yFGEdgRYwjpYi7uHNigHt7d0PbtIzTUaexiVoFu0tJ2E41qS4JOH/0mPPzK4Yxcu4CJUeMU/sda8nHYdmpp1Kxypd1PhB1zTfrxZbp5PTuyaqiVMV4Mt4LS3HWtYC8llSKZlBZSjWkXEkJnegRfc0o70FORfKMqqEWSy1W8cayYC+6bBENWZbU3aw4StUU6ofEjg9rtErJxCQFsSwHblrwpFozhoKTuVQbnlkcLBEn1kokBzpxOnVB994t7ukgK/icZDKdbY8MhdY71l3Dugt03tA4aBz4WUfjgOCwBErOOt0bJTfpZKtuIcVmYjVElxiPE0OK5CJ6RGsrTWMppcE78N6SVxKHc4om0TiSPDvaKz6HWACZUklT1InayvRRCrlIqrHV+wRr8CgGXQx5vreqfGZ5xl5MXRi0GCt+h6XKr40lFwmExMr1mXLi+fPnpJI5jgMFaPueOgyknGnblkePHnF9fU0tmdX2jNdef51a4Pnz59RxJNcq+kfnlAWYiIopzr6PD4+LE1+vyjbFWIpxWFM14gjFsWXDYvTMmgXYp2J3Oo4eGkoIM7EK7DIXtP8aMKntdoO1fonFLqXinIoT5UohpcLxMBKaHh9aJIRtpGSzrHOMs4SmoTWO6CeCb6h1JMUiPlaHIy5X2rZZ1nlizploGrHN7/sVTdNJimbOtF2nH4zBuDmhUvRUy2dZ5zUdYKys11pxrK7keU5e1ntGXREwZhnD//MPs0xS3s90dQXIH15QpULJFJuxYtSm+EQlVTFahaxXizQEpRZiHOm6Df4ykFLi5rpjdy9YRNi0PHnyGrc3dxz2+wWgN0b8DIc4qd7MU3JkKok4Hjnu92y2Gx5dXvLVrwhzb7PZYoyIW40BUzJpGklUXCOfqbOO3/hDn+HJ609IOS+rKec92/MLioHjFKWDLuKQ4IwQZ7q+53jcQy0E55HsO41gqELRFnPiTC1GBcDi+lEKxEkmq9l01biZrCOuCxp1Rq1WBZaJPEWOh4MWjiTU7ZoBq6GOkxIwilLEI0Uzq3KcyDmKu3iMmDKLgsUsWQxeT1hTRYuU4lbz1xb9mXlVWHS9V5DcLCNMQHGSCKxWK3xoFgxsXr+VLN6NUfFPY8DrZxucUPc3q47L8y2bVc9q1dG3nuAM1kpHLtY+LcFbbZTUh7LMRVaYhaVqOmzKUA2H/VH0PEqWcurwv9lsFF/xBOfks8izA/zEcDwyHI8cDgfu73ccDgemnJlS1TyzA7HOUg/5uWLEbaFWKUizk4Iy8WxBiCW6GqxUZRPDbNFmVYSPkWejGlLM5HzkeBy4v78HY3j/gw/kPWk7LPD666/z8sULUowyjZ5f8Kuf/zxPnz7lt//W38b/+rf9dr78pS/x61/+CsMwsD9K6m3TG4aYuL2/Y3c80PedwCIpSYOlGxcpP6iBABpFIgVqjvChGP1JGjljluUe8zvF/DzwShSHPIVRGYKGiX5TU/2tHx/pIpWSriLKfCODs15WBc5jXIN1jikKq0ryoaSoOG8JTuKc277XolaEQKFYyIwFlCoBgjnLmmCK0rmVhe2FiH6tx1mnoYJWtCgYvTBPLBlZ8j/oInSMFsZfVWr5bBYrl4/AGebVIvUdxuV5CrCSibAUcv1Hl0mKqt9jKVRzioJYJgrFJkS0jHaYmZgmelPFZLXx9H3LfifgfsqJvttgqPR9h/eWql2rdbBarRZH8f1uh/eeYRhEdwMcDjucs0qfF6bWzKDLNdO2gaIrNuc9fbdivVkT2hYRImfxTquVXCrWO7L6pNWKMtWQuA41DS5Z3LeZozvq7FYuk6M1XjrrolNG1tTRBwUBM3/eciMXdSNPqWih0tu6WqwN8llnSQnOUXp56vyZSbKx4EWCT6WUSFHixmtOmJSxtYr+b/YFnM1sU9LvV6auotgbQC2zg4QGfoJqclQUX0+H0IzXhRDwIagwXVztDwc5jpPim3Nxn69uEUR7Vn1D2wRd46l3QRUdYJ1xVDNneZllOhQCShH6GYKbGIsC8bKaq9motZSYnFqVpJQqsSzieO/0ni2yKm88KTm6vsWYSt81jFGL1DSxPwxMWX3tikzHWadr0Cl7JhHUItNURQ7yyuLQoJvB+ZAQeyQjEShG406M3soz+1LOtoTPsjIupTAO4sBvjaEkcY64PL8QPKhUQgis1mvGaeIb773H7n5H03TkXLi+vsY4R9t1pFqpuSh7r8iEV4UqDtJIy6ZFMtfkhekSRpOrs4Fsi05SRpHzhzsH3RR90/H0gOgFqPvCd3x8pIvU7c2devaJhVFovVJ2W7UPaQCvbBlLzrKma9uOi6tzzi/OsUFsXW5vbzVQTzJzUo5aOBTT0T1sHEeolXEayKkSmorVG9h6Yd4J0WC237dY5ihptyCRtc7dma5yamWmy1dkNZSLXPxL4OLsnmGURTWLQz/0eIhhWqOCSQOvroRmbZWsPeXflIu96uFRqkxTRWMXjE4JxkCphsN+oO+S+uptubwsvHh2kGLjBi7PPV6ZkLUW3nv36+Qcubq65NHjR9ze3LLb7zgeJMW25Mz6bMs0RW5v3pNuOAgLMQQxJpWYjsL5axeU45EhZZqu42Of+Dgf+/g7nJ1fYoxjd9hrjlNLKgVfBXNMKUn203EgNA2N9wTrmQYJk3TO420gm0CucTFZdVWo3kKvLuQEAwnGvJi0FiW+GF9wyjAtFV3pTapzE0p5u2roOkecPMehcNyPjNOBUhLOGZrGiTNDVsxqGklxkFysaVyKlNWAyodrvlfIC0Vkk6VqAu4ylctxYg3CvkJWOIItCAmgaPHz1tO0Lf1qpdOjFOjjYc9+v4Nacc7KurDKqjM4x6rruLo8Z7tZsV13bLcbvDF4J0SLktWUZ6Z9aTHMuZBr1qIDxgSsDVKIloPO4ozYaWElAHIJcIxidTXGSD4e1YfQEnXabRrBcvvNiq3dyGfuHcY2GBeYYuT+fs8wjkwpMYwTu8Oew+HAcRhlepsmorqFSCM748JmmTKsJtmihVfOBIPDUUwRI2ddx5YsmA3FkHV6jVNhOMqq+8XT95mmibOzC/a7e9zZGT/0mR+kaTvu7u7oVxuapuPZs+f8q//5X3N/d8/F5SWXV4+4u7ujaRrOzi948eIFtRRNPRAZyKlI6QanVokWqQVbzWL3hJ4p2VTFk07rPvOhA2iezD58MFlnBSKZbZS+i8dHukjFKVM9EjZmZTVSjYSNpZzBqko+Raxr1Uy0lalBmVymSMZJTZWaJZ6r1iLptKr+tt7ROLEjyYoBNF7iO7zXgEMdm3NV+5v5Rda6qK4rLIyXhyu/uZuFgjO6FyfICgiWi9twsr0pOl19+DE/9/L8BQTPko5VCp4RBpfJ5CxsHaGQOrrO07eVxiVA4xpSWqaCkg3Gyq/BCTU+G5wNrFYb2rZjGgUTHMeJotODd4H1es1+vyelzHAcORyOxCmJ28TZOZ/4xCfo+p77+3u+9KUvMceuzNNfzkUbghbvA8YO2CAZXeeXF7jFUT0zxUjTdbLaOx5pqwiZaxZD0xyjCAydo3iZRuassJghZUMqp3WIQBBeJpsqOGZU44RU5EfRN99mc2JJyY5VhI+m4j14N+OnGUzEmoJ1Ge/luqsV4lTAJGoeqXmilokcR5L+KEnwO5uzFqmT5ZHkmL0COCip0LxSpL75B8t0rfmyFPWJFFGpXNc5i/4KdJIpD3DMKqu+NjT0Xct2u+H8fMvF2ZauE52bFP0iNO46n+5aOK0BbQ6MlWnIVCPu4FWK56LPQfBJMzdjWIyRlWnBYIv8uQvi4i4sYNTazC5aL4wVEoWyEXMWVwznweSMs5kuGOg8DnFz6YLgmKlkxhkrQ6Z28f2cXTVk/WequKTP8lhTRVJS1ANxnmZLLYuuzLrAnDhe8iRekt5yOOx4443XqcZwe3/Hl7/yFb721a+x3w+cnV/inFftJgSVPYyjuJag016eccw6FxidhGQcRG2z1cLoVKTkM9CVoJnL03dXbETUK+N5NScc9zs9PtJFahrl8HTO6MQiB3muspdPORFjJcbCZtuzXm8ITceUk66VBPCNk3Srkigq6ajjIHqnEFq5AXzAOCFNGGtYr9cY68EIhiAiy0ye3aK1+FTd557EoNI/nIShvEqAkN8BTiSLmU6O/j2je5jyAJia+6AKy/8DSrzQvmbeHiIeWxRljhVRhHvfsF53nK8ttg7kfCTnkXEUobN0q8g+3cjrjlPEmkgIDdtNw2uvvcY0fcBwmLi5ucEwuyA43nrrbd577xsMw4Gbmxuur69xzrHdbvmBH/gBfuqnfooYI//yX/5Lvva1r8nrL3WRA+zud2y2W87OLjDG0pcV667lrbfe4Z13RPw7DEeM9RjrWG82sp8fJlbrNQd1DEHzlXJMlCTWPjlljNUk3FSJ6vRdi8RzJNRmqp6yoebJNGnBqKViTSOmok7P21pwxtC2gSVKpog+qpSkzy/moV3X4iLEcWRKolWK48A0jUzjwDgMDMNR8Dh1MDcp68FyKjAPr6nl0tIp5aGn5RJlM9ONH1xjFdDeXuQZRenOWSJnjocDVGF/grii5GnEGOjajouLc9588w0++cnv48lrV5yfbWiCLMGmaZLvYRwYjoOIbMspCgLrsF4AeqckEoGn5mgTEekCipNJkrHTey/UQjev43Vlbyq0Gosze1zOn+OcrSU+hhLamLQxC9bjWksbGjar9dJ0FX3+YRo5DEdKLkwqqp2mif1wIE5ZSV1y/+WKBGpqA1FVU4ROXXUmijgn1k2NhKDu9ztySqxWK5om8NWvfJnf8Tt+B9YFfvbnfpb/4R//D9zf7fjsZ3+Yz/7QZ/jXV4/E1kkTD6LqDZMKrQ2cTInLq62uyBjqgq8WTkXqFaTC6Ln2ykX2nR7SANii0oXv8m99pIsUwJyCaYxgPgWU/lg1y0V8yJzzCzU4qFq66IEvKvyyHDzoh1RrxhjpbFORWHDZzTc41yjLrOBCYAZrSpG1RVWA1DgjLhSqo5Az8uGK79XDBU4g48O1zIcdrAtVI8FPf6d+0/8rsGkesHCK3rgLZRZMMjLuLyvBurCrhHblMMiqyLrTKlm+Vn0DraFWYR41TcN0lJVL2/TUKmm6tgnL4ZhzxhpD3/ecn5/rak9SbF9//XUk4r4jasd+eXmFU3eOJoiDRPCBbiURKvPzxiiYl/dBafNlyfKiCn55OBzomgaqxF6kFJcbs2hQXlL8kSriUOvU7gUoyhAsRfQyqSpQbhRArlUIKMs6pKpNlFVWXcJUcXTIaaSot53gRJmcRtJ0pNSJGAdSnEhpIsWRHEcNEZR1X8lZxaunBcspS01+b3F6fHA9LdfN3PQ8+G+W62eeWuT3BWtEsUS5yqxzi5i31or3gbZr6TSZeF7fTTEzKb0850SeZJpNOctKe9Y4VWT68aKns1VwJMHtFI+1J8wq5QK2LA2gXPQWMwPz0hEiGYQC2qPvjwuoHs1jnCfkKplavlmeb8ahljV5LarLS4qlZUwNlFoIEbwpDKZQa0N04jJf61zoq/y3svtkeprPi+U402KghaIqsSUlyWJyhv1uxziMGBvxRliUX/vaV3nzjdfp+5533nmbGEdqKaIT0y2Noci0O58MVbx3BGiQh2ySdLWt14xbTBNYel29WJbr47t/qBsI9ZuuxW/3+J6K1N/5O3+Hv/N3/g5f/vKXAfjsZz/LX/gLf4Hf83t+DwDDMPBn/+yf5R/8g3/AOI78+I//OH/7b/9tXn/99eU5vvrVr/KTP/mT/Kt/9a/YbDb8xE/8BH/1r/7Vkw7le3hYzVYxTgG9XKAkOXiNU92KAPrr7ZbVaiMi2/rQNiVqpIZY9jiZybUYZO1ABLhdbwNd17E9O6dpRAh6HEaZpIwjFtE0CZvOv1pUZhGmORWQ0zT1oSJlLLMd0vK9ziQApfrKtu3Df4+l05mf1sw3wHxBzFNZrVjdPVtXccVgixw2w3EiuwzqFzhjZT4Iy8u6E+W5FoTpRiClStf3nJ2dMR0j19e3XF16urYjxpHdbkcIYXFSDyHwxhtv8OTJE95++22+9rWv8cM//Fk+9alP4X1D1/WEkNluz/jRH/1RXnv8hG984z2+/vV3efbsOc4Z3nz7bd56+22apmEYR8YxYZ341x2PR2HWpchxL8UhDiPjMGDOzjAYxfUq61XHGBNTPhKLkfWdvm3BWoLzwtJUxptQmPNSCLOGDgYvoX9zhpAcDEVxvkyJEgUyjcMS6DiNA9N4oOSJYTiyu79jmkYgLuGESf+e/JuJ2fS4RDUIfmUqMpzu/7lAWZx7dSJ/5dqp8DAgswLWi5VOUdForaL1ijHqzuJkHwXQNA2r1YrHj664uryg6Tr2hwP7/Y44jRyOOyhZfRHtwr6bMaK2bTFWcFHnHLVkTC2cInbqUgytE4uvIUbyMIibjOYteefxISz/7ZyDlJe04dZ5jLU0OlnNDaAzVkkChuBO92+Op2ywmCJTGhlHYc8dj0fu1Sh5xsVSyhyTvF85ywow5cr19S373YGK1biVotfTqbFcJAKT6M5kwpWC5qx8xu+9/w1+4ed/lkevPWG9XvODn/40/+FnfoaXz5/z4z/+4/z+/+6/4+d//uf5pV/6JT7/+c8zTROr1YoaAuMo4Z7eWW26Zv4i8ys4YUUVjPqcwrfAmPjWjc+3ezxsJB5uh77T43uqDB/72Mf4a3/tr/EDP/AD1Fr5e3/v7/H7f//v52d/9mf57Gc/y5/+03+af/bP/hn/6B/9I87Pz/mTf/JP8gf/4B/k3/7bfwvIwf97f+/v5Y033uCnf/qnee+99/hjf+yPEULgr/yVv/K9vJTTQ7vFXKoe6kJYEF+2ACbQNuJ8jNFdtbXkIjlNZAFoZ/wj59l+XrsH48glaiRBpO1WUpSsV1siSc0tszO50bh3gSIAu+QHyZ0/HxL6+utpnbIcHO7VQ0e+/sHUtOzx66tXTl3K3/JnRtX6vLIanG8Jne10zWKtZ5pGPBVbE3NkuFH3yBmw1uNJO8OMsx5rhOqfYtSpdmbmydoyeE/WGJJaT7Hoo8bMHw4Hvv71r7PZrHn33XdZr1fiMQj0/QqD4+bmlmGYGIYJ7xuMN8v3P1OLS4Gm9Zrg62RaBmrKGMVVdvs92/XmAbGgUktDmiZiqmQcuUqqqrWW6jzGBb12HCkK6y4ry28uUvLmF4yJ4i5SZ/whCYhvDKWqVVEcmcYjadwzDgfG4aiFaCBNs6hVQhdjSpQUBcMqUdzGEY1Rng0/H9zwr05Ggtl+q8eHfR/R7raUcrpuHjxkFS7Pb9GsLQX5u66j9Y7NZkO3XuObFuu8XgOJmMSQ11kjDLMkU1NGJlNfZCKlgtcVrHgS5lde5+L8Yaw6/GvjYOaoC0hFnj/XiqvgsuYXVfl7Re+rop/v/L0a1CfTIGzdqq4Sc2aX4jDVJpzrdEJiIYHMicgpJ0JqyElExikVkoPY9zohQa5hYa4uZJci2qucM6GRcMRSMs5ZkR6kRJqkyLz/wXsSGtq2vPXmG7x8ec3l5YVsLdTKSgyFswZQZrEwkgNAsbkHWNODC8Zoft4c4zE3L680P/VDf+fhs3z4wplrXi3Llmh+Dd/Nw9QPt1Tf4+Pq6oq/8Tf+Bn/4D/9hXnvtNf7+3//7/OE//IcB+JVf+RV+6Id+iH/37/4dP/ZjP8Y//+f/nN/3+34f3/jGN5bp6u/+3b/Ln/tzf45nz57RNM1/7p9aHnd3d5yfn/Nb/5vfrcCgAKzWe7xraLqOzeacttvQtGvado0xgWnKHIcJ5z25JPq+paSJ6+unPH/+lMPhHussXdfK2q4aYsy8fHkja6V+xcXlIx49foJ1QS/IStv1cmBVR0qZEMIrwsrZERtYyA7zWrHO087Dj8FZcclWYHc+OGb2Vq2y6jP+m6+GuStDb3j7ocPm4Q0/M5NMBZsTnkSNe1ob6YKIXVMaSTlhbME3wjoDiZXf7fbUanG2IaXK7c0dxhhSgt3tgfff/4CL8ysuzs/ZbFZ88N67XFxckLMk7r548YJSCtvtlo9//ONYa7m9vcUYIz5moeHiQlzmh+PAl770ZVIqrNcbcs505xvOH19xefWYWuH5i5dsNlvOzq+ksBmLDQFjLdMUiaPgZM+ePuWdj30MquiBYpy4ODvj7n7HmMH3G2xowYqPWdu24sphHAanybiCYYpYOS1KfpkMZJILVuK4Sx453t8Rp0E605LIMXI8iDPCfn/H/v6OcTyIx2ERwXTOUZT6RdeOWpOtBW8dVIhZ5ArL2sXM19aDFa+C+N+u6Xl47SyrWGcJbUueDyhddU+x6CXqaILIPZomcHZ2xtX5GWdnZzqhSDSOsBJHQKI8rNPDqdQTtVn+hWWttth51apaKhUQW5ns5vtiZogZb5d7abm2y2kqpFa8dXRtq4xPEXfPrvHeqSOMUc1TrdSsotYomOScZl2NWELNWJfz8rpqzoyDNFxTnLjb3TNOI8MgLMOUK4fjyBQzRbc+4sQi19EwjsQk688xRfq+F+3WOOC9ZYqFzWbNxeUlbdvy/OUNP/a5z/EH/sAf4NHjJ3zwwTNubq65vr7hcDjw0z/903z1q18V9iNV3PKTGjupJIVSl/d/LlaZukgw8kPhLyzY+sOvf/BH3/Exb46Msh6tNUzTwO3tLWdnZ9/27/1/jEnlnPlH/+gfsd/v+dznPsd/+A//gRgjv/N3/s7la37wB3+Qj3/840uR+nf/7t/xIz/yI6+s/378x3+cn/zJn+SXfumX+C2/5bd8y39rHEcZU/Vxd3cHCF1YPPfEO63WyhQjLOarVv68CruqaidsrWUYk96/cmGEEKR4aV7OvI+3akzrNABRqLksa56UC02ViasWKRDC8jkp/ufkSxC2zHwYyM/yPS0fvpqSGp3mThPdq9iUIGA6MelDpp56uhhQIZ6O9QKKqiBPc5fQlZ3gXLp/R7o9YwVjy6mCle46GlldxTgRY8YawRJiLBqTLsLJEPziuj67BXgfNHRS1iibzYbj8Ugphf1+j/eyomualtVqDdiFSXY8DhKNETPWDtLQ1Kod+iRJxno4OWs5HA740NCKkE6JCnJoxmki6eps1hOlaSLFJJ15KeSMvldOMZIA1YqTSQGqocTCNE6LtVCtldwkCoFcItGALQlyZBgPxOEgRUcdt4/HA9NwJE1HchqFREGBqgC3rrrUVkMwSMPMhtHPU62lZbf7oOGRa/ibVsnftif98NdKq2vVWWK+FkOYbbjk60U7J5OyYIIaKlrKUmT1nRQ3jilrMroIWWcAH/3Xi1pLiWm2ODw4EXDJFKJsxrnIGKs463wDgJwFRjU+2rXL5GWJuZBKwgePq8JsTUUYmdbIypBaoYj4wz3A5ECZnRiM96I3ms+FghAefKBW6EPAIXFAIXhSrrJizJVckdgW7whaMI0BF8WR3TrLdrsBREPngyQ4GGNU69ZBLezu7/n617++nC0xRna7e168eLFMUfO9VrXRcT4INe9D7jfzOVRBzKqNYYb0lsvDcMLOXr2qvs019W0uM+QS/m7BrO+5SP3iL/4in/vc5xiGgc1mwz/5J/+Ez3zmM/zcz/0cTdMseMP8eP3113n//fcBeP/9918pUPOfz3/27R5/9a/+Vf7iX/yL3/T7bdvjG0fMkxwYk3QspVrWG2HapZyZ4sBm3QrhwTfEGLm9v1fzyUiKR0KwOgGp4FEnnBD8gxgHS0pZPfAcU0ykUgmN4CCzwFe8wWQ//bDQwatT08NVy7zbdc7pB/hAVPvga06FSw+vB4+H09my+9XiRDlNT0VV/CfDWag5EUzBU7BesJTZAuh4HJjikVwnoFCq2MmI+W4DOEo2DIPaFtkG7xsuLs7J6puY4kTf9zx//oybm5dsNhs+/elPk1JapqqPfexjbDYbmqZlu93q1DLx9Okz9vuDrNZS4vrlNVdXV9TjQPbSiPT9SpwuQsM4jtze7WjbltC2UlwnWX/c391zOOy5vbtlHAYRVQJpPDJNBdv2VNdiCTjr5YZVoaathhIz0zByHAZub24Fb1E2WCli72MbI7gUBZMjribicCCOB4bDnsN+RxwHiULJESjiBB88TbBU50ipQrXCsCtKxdZrgDrr3Aq1enWVPom/jXm1qZGHeeV6+naT1PLnCPZmrNwXXd/RNC0VZbEmEfFaa5bNwW634+7ujmEQ9qGzsF73rNcr+raRFOQcdWoRHZmdIx9eudaN4EMYcZhI0gx+GP+YyVLVyvNYjaOYJ6S5kFlrsVUKYBy1CT1Cykk3DSfNjgG6tmW73hCsk8O8IpEtGDBVLLX0HkvTdJqycgXrCAEuL86VZFFVdmIZYmaIiZiKTE/DwKTp2OM0iu5KyRln5xfc7+559uwpu/tb1us1kzrIb7dbaq38p//0H/n5X/gFHj9+zGd/+DczTRNf+MIX2O12i1O+c04jU7Lgqsy1W993hQ5mmzaDvJ+6l2N5Ux7++PDju61Rc4E71cDv6vE9F6lPf/rT/NzP/Ry3t7f843/8j/mJn/gJ/s2/+Tff69N8T4+f+qmf4s/8mT+z/Pfd3d1COT71YCfgcRb11SLSudkHz2B0xNXuq8zsPsRTykonBGZZO1RhOggg6/2JzKC4C9pJ2mWPITiVeNvJqsE6p0XK6L/JMk3J4SKrCbmprOaKzZ3bycNNfl9ZWxXp9j+MVXE6ZOabB9XQiPWO2t/kLD9KhmLEDYJEzgO+WowHa4u6GKSlaxeyhAF1eJ/ZPrUUvPOAhyqTZ9M0xCqmv03j6FoRZParnq7rmHS1ZZ1ltVpxOByUmloWZ4VpmkQ4GeNSUJ33ooPLBbfs8zPeC7Z3OO5FvFq90LSNZRgGhuNRWU95EchmdWForERu1JQpMWFsotqESQXUWaLWqq9pVFrvuJAaJqX3VluxBbIxmJoxeYIykYYDOY6COcWRadgThwNQZep0Bu8Nzhqck9DFnKJkQ1VxjS9FPq+qJ03V62M+dB5O3fPhL9fDCU+Q6xrmE+P0a7lm7Jxfps81/12ntOiKJZcR9P2Y/fxiTsRUxetRXRngxEgdxkHSrjFymEs2wPI65w2HXPNG0pxVN2ioy71ldTKasROj74GtKiZ+oPByTp7LWR1AU1YSgDRftRR1qtBpySCGuk6SCGrJoq/CkIz8jBV2Xi6CcxkMpszrCm0SVKdV9Yywxsmvs9h3ZQfee2UcF3xxVNPgslsOcmcNjfNs12vG4cBqtcZPE8dRNgDeiwB5fzgyjgMvX77QkFezFKj5fMnqJC8SCY2JmT9cTmtizPyT/O/VYfxbVaf5D795Yv+Wjwdf8r2ATN9zkWqahu///u8H4Ed/9Ef5mZ/5Gf7W3/pb/JE/8keYJtn5P5ymPvjgA9544w0A3njjDf79v//3rzzfBx98sPzZt3u0ukv+8GOYBjrbqaIbhjFirWOMkySOxorrPKFbYfFMCmIaZ+nalhAcpUykPJJLxTcNXd8yDgO7/Z40FYJrAEMTOtbrjQoBPd63eA9uSrRtD1hSqZpe6cEmMF46PO8w6lZuja44TFkaFVmfV2XPeSqVXHVdmNSHrlSMk5+9k/iA2bIH5u64zJfX6Ud5cLipFU7NiZwmWdOlBFnSP0uO3Lx8RnCFbd/QNg5jCrVEWYX4BtM0lJyIaWaaAbXQhpbzzaWuZiecDZw/OefmRqak/V526+vthidvPOHy8oJf/MVfZL1e8+jRI0Ib+OCDD9hsNjgcv/6VX6drV6SUORyO+v4Wmq7DGMdhmKhx5MwbmvbIYTiy3ZwxTAPXt9dcPXqN5y+fIRZDgfv7e4quBnOK3N1ec39/R4pRCqadWG3OcGSG+3v8GAnNSMjqu+cDMUeOx8OS0nx7e8vhcFCMKqpt1oS1Kt6tmaoU8/G4o+ZJPBKjHPJGLaXaVnRkwQvjbL1eQa2kaVD2H8Q0EWNhlrWkIivGmEQi4B5METP2NNPy50ZoXs1JPpliS7OLvhVShzQ6joXGbZ2EfHYrVtstBUs196RyYBontt0WSuGo7ufOGvqm0ftGnN53u3sqha7rMEYziNS01urrDI3kMDnniCmT0kNm2zfLMYw1soIXgEvX43mZnpwvi/DdGBXBc4qseYjvgjaI87RUIznega7LTZ3/vj4eeP40QbwB5X5bjJAQyUZFvDclt8n5hsZBHWXj47zDV5n4ejvLW4RxuNvtcMay2W64uLjEWst+v8ftdxyHA5LS7Oi6QM6JX/qlX1rwU2utYlEs36+B5XWiZ8N8ANX6cFUs35pRb/MT9mR02lKphdFf14owSr6FxdE3DesPvPzKrOr8zo//xTqpmaH1oz/6o4QQ+Jf/8l/yh/7QHwLg85//PF/96lf53Oc+B8DnPvc5/vJf/ss8ffqUJ0+eAPA//o//I2dnZ3zmM5/53v/tXGVkxyqbTrq2ru80NlsYPh4Un/LUOuo0I3ZDIBoqcXs2imHNa2l5G531zLqRJY0Uxbyc0w+5yiRmJNcmKHhsndXcIbkgrDFUU0Q7pR+a946Kms9WBbkriwu5uKRXvAngpMuSzGFd86gti2Pufuvi4WYXIFmDzVAiRxJKdkmRksRiqWSxhaLMrs/IzVaLmErmiteOPQQn7CA1UZ0xCDHO1HG+zliG5M6UKniEtacsq1kk+nBNA6LFyX4O58sPDtzTVCCr3MhwHFit18vfk/dADiLpmGVNMkdcYMRRvWg0hdjzZEpOovsp+lkbxzQewcg1MmWRKozjwH6/WxzbheFm8D7QGc84HIjjiCWLW0QWt/IZE7TOqaOAI/iAD4LhOV3lnrA1scJKVu22bF4+S7kW5e/XB5/7Q6HqkilmxVl9/n3psu3y57NmzTm/sC4rVf3nUA6OVWxVhO1NI7lO6lUkUTIgTDlzyjCrDwRA0mhZLYgiqLZWimFWh4nZHHfeZDh/clthWWNXTBF3dGP0GkO2CraKqaurp+9f1lpz5AlLkVrmBqPlpYq6LSaxkjLzhIo6QOiosbweimJNs9pIr/1qhMQ777XQbYNivZV52nV4L/fn3Dx4L5Np0zRaOOTty6UQcqLL4v4fk0TFYIw8ZxVMapa+LHj4A6hgeR0fGmNmXRQf+uzcg/dv/rplpSzPKu/nPHV96PHNv2WWEcp826/55sf3VKR+6qd+it/ze34PH//4x7m/v+fv//2/z7/+1/+af/Ev/gXn5+f88T/+x/kzf+bPcHV1xdnZGX/qT/0pPve5z/FjP/ZjAPzu3/27+cxnPsMf/aN/lL/+1/8677//Pn/+z/95/sSf+BPfclL6To8pRowztEEsj5qmwVjPkydvsD+M7IcB7D3NkNieWTFcLLA/7BjjpBdNIdfKOE003lIbTwgNm/WWKSTJcyqVcRix9iAq8GIwRnzpJBhRDoHVql1EvF3XLof2POXUWqlRdPxGV4Ho+G2trBLTJGmoM+AprtKGrusUX5LVGiUvzzHHSoDcgMMwsN/vOR6PmFLU/0xuqlKyihGzHORZHTIUqDe1gBGHczkPRFBpncU3gabp6FctIUjnF2PmeBgZRznAxZhSAHJ5DQNN42mtJxfJ3drt73j+4hn9qmWcBq5vXtB1PZdX5xhjGMeRRim4sq5jWYmJCLLK+zsWXjx7zjRNvPPOO1zf3HLcHyhUDrs9h710+ynVpTiZOq9xkkoNAqij+91tlnBJ24B1VCzGt+I2YiyDrh+vb645Hg68/vrrXFxcELzkHL355pt4Z/jlX/qPfOWLX+A4HjDqfF9ywjvLet3RteKl2DRyzQbvKClhDEzjwMuX1wKkUzVx19CEluCDFMlpxDlL3wcqLaWwrLhnB4z5IJonpddee43z83OeP3++MCi99+pcEbHFsmrEyf9+v5Npx2lYJ4b9/shhGGlXGwksXG8IwTOpGDoEmc4shhJHDuO4dPt9v5Y1tp2bvEzMEmlfpZOjYBimqLii6BFnF4+mCTgr6QLH4UhOwj60atZa6wmveojbWl236aZwMdx1ztGEsOBWZp48tUEzxhCTFJzF+NZYIVFouOJc8GoW6yhtE0BbBmu0CJqi04eSXBQ7a9tOkxJOjcXD70FIXIJDTimSSmGbzsUZI2dSEcr6MA7c3u5YT9LsHQ4H1WqlpVGZ3eEl4KC8UsCUZC9NoF4vRt+/efL+MIZeFNuev+Nv9/jwglC2hqff/W6J5d9TkXr69Cl/7I/9Md577z3Oz8/5Tb/pN/Ev/sW/4Hf9rt8FwN/8m38Tay1/6A/9oVfEvPPDOcc//af/lJ/8yZ/kc5/7HOv1mp/4iZ/gL/2lv/S9vIzlkXNljAmfhQ6eiyTJ+qaBw6RdvjoY57JMWzGlBU+R68OQkjp8Y0iqyjbW4a0lWI2X1z3vfIPMv845SzeVs/raCcMMo24WRRysZ1PY2dvLLOQIeX1i8ClO2LXI6kA6bv2apPHmKMtHLXvm1cU8rpuS5UeWtFcqKnZOWviEYWesUb+wOa4h4YxgATKNASWR0f17NqoFMcyZRyllAberJo4qW7BWSTuVCVEi2FOayEHWUTknXf/MK5i8rKiapiHbyjBEAcO9UezIqe5KJ6kUZb+esuBN07SAwdOkotlpYvaxq1lWrIZKjmlx4pDm0Eo3j6xFK2JWLPCHxmMrfdw7CeIzBpwzhOBYrXrOz7esu5b3z7Y8azw1C8vUe4cN7SLGxFisF7bZrLMCmQRKlebLypNT9ADxXt7vXOUKEdRlPhof/E8BhlylkcEKZlIqkmuVKxhhxXnfgLHElIXt5gMxRZwPBLWWsuruL4ajhilGXPCEKpH2wzjJGqfOJAWjJIVKzVGJZAZnZs2aASO4Yy6yRfChVWeKTMhV7xkwrsE4o96IeuhbD07wnjJPQu6EE1dEdyWFYd6VyIc8u+BbJxhRVqxlzsaSPCg5XC1SnLKBou7q1cx4scEbTUtAfeyoy6Esxc0qlqa/YWQbIvCaBaMbGMoy5YK+lfKqJDJGLgwkMdlJ2jgJr7T3trX0fcG6AgyEJtMWMMYxTpMUccUanbHKSs4LcerESNYiUsrCQIYH68IHq1Y5JjUOATUkLq8WnG81sb3iTXHamH7Hx/9indT/Lx6zTur7f/P/hlIy/bolJTEUXa3PeOvtd7i722PpcK7DWM92c0HTrki5sNvfs9vfk/LEFI+M456bm2v6vuFsu2Y4HMip0jQdq35NCK3S1AUbW23O2GzPsVZskcaooWnKq6y1is5Ju7xxkm4TM1/8qGjQYNTBIJckaaPBk5UpNneEtQpDbr/fix2KEaJDiUekYIlHmPduGfeFKDDgbF1C8mKSAEIoou/Q9NMZRI5xZLPpSWmEKl+b4oihLIU5BI9XF6hlnVPlhpUrSW46a7yuqBxQGccDh+OOtm1Yrzd479X2aNJ8pom2bTk7OyOEhtubew6HAe8l3vv65a0A0OoIn0thd9jTrDo6ze7q12usDUwpkktlOA5U0HwwmSJrES+9WvNyIgh2ZzDOaZhlAesJocc3LaHphMzQNrjgF5B/7sTX6zU//MOf5Yd+6IfY9C3/r//nz/Dv/x//dz54/z3ud7ds1yshQuTI/f0dJUs2VEqZYTgQvKcNfokpOR4lZ8ooyeb8/IzNZoMPjv1+p2JgYRQej9PJ1HQmEmkzNa9QjbE0jVy7h8MB7zyr9UpCKaP4DjZNA9bw8volV1ePCKGhYohJ4+1TEt2MDzStuMc7a7m/uwUqXdOwWvX0fYctlTSJK0NWZ5f5h/OOmY6Oleyn7WarDQvEKAm7OWd8CMScGEfJKDMG1usNbdtoTMhRMsGceknO6zidfDC64jNG1q06sVidLJbYG06r+JKqbi5aOZhfwbW0MUH1hyoRWBKwtbzMjdBMyHg44S3TEjzAZE6aNlnfSyzIbFRdUU9JXWXC7KUpWFzOlVrtot8bx0mZg9NyXYCQguID6YUI6UUHKfhy1eb55DP6rSZU8+D7eKi7fEWD+SHMb/5e7QPsSq7X+P89ndT/fzxmJ3CrzlRm6YiXPbyxJ3ypPtiZW4eponFwmpNjrRxSqQiQ6H0ghJbQNJLbowVjBmzni9gqcaMyG6JqmJwy1WDWQ8mfCSXdSGc+EySKOCLXKhhHzVGSXI1MJHEaxZQzjoCQH4gT3jlqkrTWmAxJL5yUkmh0qljx5JTEZiZHAMVi9CbUFZipmRxHjMk6FUmAHbrm8N5Jii91obGbOSvLzF19UeyiqBuzJedILlEmRwspR8EaZvqhMtdyFmKDdPWGpgk6MYmFzOwWouONygLke9jd3bNarXWtUZmGcekAcxLsqVaZTCWNVquqquC9kb9XNdbBeQnks6Yiqc8yMdqizLea8S7IVKdBkRRJuF11gU3f8dzKwWA/dEP7psGawGxmnFIi5oKx8jw5z5P17LsoU04IgaZJ6ori8b5wHDPWCINUPtfT4XLCpGRll0ulaTtgZkgKxdx5cWNxTsTw1gSsmifnIniiN+I74poWHwJt04hZ6rpgqLSNrOi6rsVVmBTbRVfXcrtqZIWyWI0TDVo10iAYI1OfdV6laJZqnKxeVe+I8+ACFotv5bq1bhlWOB348uuq07KxD5IA7GkSExeJeWoQdxirqbTGnJIG5mnMYgjGYpdcMGVFqp0SBtEmzlMeMx4mxc2YqlE+MPuOnl6t/P4MRRfVfsr95PWEswvRwen1P0vCmAvygh2eMEYAcsF7ST6e4sSMDknzmh4UlfpKgXmISeWc5ftQPdmCLZ261OXvPCxks3v6K79nDPlVf9tv+fhIF6kQGvpmxcXVOcfjQUiv1nI4HKnV0IYAVTQnFbkRHIa267HegoVSIzkPbDZrBTszO+ewWLabM7abM5zz3N3dMU0y4Uxxwg4Dc/oqyAHe2MDSNyxdCNSuUf2DsOxm2m0uiRRhiBPH4ah+bUWEpUq7/nB3sjhup0xrDG0jXaV0TqPQtaco4W7G0HeecRDBrA9OD3aYxpEpjtKxKkU+NJ7DfqJpA84b+r5ltT4Tvz4zF9VEKZImGyNyWLoWa2aPN/QQBR+svL4M4+QIzUo7VMfxeODm5poQ5PDNJWFsw9NnH9A0LW+9+TGuLjs++OApNzfXrFdbYszLQZp9EWeOxhNj5O7ulvOLC5zzpCipt9Y6nHfgLEt4o063Va2FQFdneY6e8KzWW7r1Fh86fNNRqmEcI8dp4v5uL5ZPKfH666+z3W65ubnmi1/8VYbhwKOzDffXL1j1Lc4Ybm5ecn39ghDE7X273XJxccajx5c8enRFjokv/toX+bUv/Cq3t3fknCgxUlPE2kATAtZJDMp6vWK92TCOI96L8wUzO2/p0I0asOoasFbA0ndrrh494vLigne/8Q2eP3vGfn/k8vKSrl8pfuF46+2PYaxTSj34pqVfN2LB0/e89vobrNZrzs/PaYInTqNOpHUhxRzvd9zf3nJ9/ZL73Z0SY6xmNknTMU4a+Z4KMWammDT9WIpmzJnjMDLMmFzb44NYU00x069WnF0+YjgeSdN+0fvo7cdMdJofxsopWbQpQTcIcq4rWQBFlIwlKWGtzis3hQdMqaQ5l4t5YhJ383mCnf9Vi9UJS16UyUnJTqeV4IeRm7kRngX582uVYiQrwIrB67oeIzhtxdAC6812IYY8zBerpeA4UdKHQZKAp2lcJqoYIyULcSXGuJw/r1i2Ibh3TieN5kPCznwtyvXwkDSC5uG5V3Cuw3Ayafh2j490kTLW4r2A+WOUrKBSKrv9jvX6jNOHKxOWMRq1oR+48+oeQRamTJV8Je891gi42TQdznmaZtTDV+xTTh3rySxx7p1mokRWDGTO0MkpYSknjEQ7+Zw0EnzuOpUYkabTNFDnD71k0jRBzmTdmacYJdJhHMkpYUohWIsPjlXXYpSu7FTJXyl4bzB4ip8BbUPwDop8TeMlKmA2+3SKyUgCq2hBQHN8nMEgnZW1UqRK1RukzCBukqaB+ooH3Gq1om1b9vs9M0NJcMNI0FWf0dWNFP8CcxowQaUGSQgCper6SsgAbSsuILmqkwNi1TPjB8ZwiiBQf7t5witq4ioTJ7IankYltaCsPqUZV3G02N/f4/LEdJAo+loyzlrBsZTY03YSGfPo0Wucn58xTQPr1Zp+tZLQzVrxm5YyRWoxeHVCmckFWZ0NrGpsmrZdGqL54dzJC3IuUl6pzWfn5zx7/hxjZWro+h7vvQrULV0nr8OHRuQaGkXTNh19v8b7Rtefss7dbM5kSi3q2A2kMRIaCR71vtHppS7aK3Rysk7NX50Xmr+SblAcLNeM8+qo3nWUWsWhpFaSFlAXT6zU02oJ2Q7U+ZrRKAyl1s3gf1aWr7BvJfXNebFdKsYsWGUF8QfkQUkpc3GyD4oSCzJllrnHLL+7TNM8pHa/iraUPGfIzeOWWSYQa4V4oWMY6GcoTiXm5EFohPZurEylTqcpV+Vsy+pXaq1X1x5pDqx11OIR8+0Ty2++lh4aZT9koc5MQHmtD6avudCauhSthezynz/aX3l8pItUv1rTr3vOzi8otbA/CvNntz9A9dQ+0PeBrmv1wxGauUxcCtJ7SyiGEPSDV7qzM56zszM2qo2qSAyB8571ZoMxTi89u6y8YpS9bkyqII/SJfjgyDlxHI6Mx4PGNYj+yelJGeNEreI8EMeR3f0du91O/MFmjZU1TNPEQVl7q+AZBycu7sOIsYa2bdlstqzXa7q2YbtuxB9sOHI47BmngSYEttsNZ+db+r6nlCwZQce9rDu8EdskZ5jdtiU0LVIRVpxzlqZpBFg3SJREkrWeiG6jCoHFOfo47LF+RcojJRtCaHj82iN+8Ad/kL7v+frX3+ULv/qrAEzTxFe+8mXapufNN9/iU2ef4itf/qp8DlVIJz54Vk3Pzc0tNWceXV5RS+Gw3y+kCWGvSVFsmobgBB9Dzm3FL6Sj9TM+YQ1jFGbolF4wjJLMKuQGS+g6+q5ns15zf3dLHEfGacRaePniBTUOECPGGvb7e5rgee3Jm3zsnXfE7TsEvu+Tn+D7vu8TGAO31y+JMXN+fs6LF8857HZcPbrCYMiTTMg+yPQbU2KnjtshCMHk8ePH8k3MB8K3wggKrNYbLi4ueOONN7i9vWWcIsfDkddee6LZSfcch4nQNFjvcaGRkMhq5L/bBh8ajJrG3u/2rPuey6tLrEHX0ZP6/jklvAQtUuKYMcWMc9B1K9YhiAO/rs6LNijjqE1A07JtV7z2+hM++clP8sbrbzCMAz//8z/Pu+9+g2EYmSYheRi6Zd30sOOvDwtVzrpCO4VoFtU/oUQG5wI+SGNU6hyH82AqBWnUSlmsmaxiYDJx2bmuCFarGBmo84tmR83hKWVZCz581AUnm/E0M/8bKl62c2KEEQJVXbA4lkLlbXi10ORC0Fy2WR9ZsqZK69QkJrRyNo3jKJ9/qcs6cNYDpimqVEDIUg+nqg9T3x/ipKBF3cwxSd/dOf+RLlLWSNS3fNqW4BpZPxQxepU3K+F9J5RQoy68ZIx60YmGxwJBuy9H364wVHEAcCLQdaHB+ITTjhQFTA0nl2ZTnLD40kiNEyWNOgFJgZymIykdVfmepUAtHV4hTSOubclxpOaIKfP0IzHVOSZR4NdBxnZENIoruEZ20E0XWJ/1hOBoO49vBWerNoOrGFfFFMKJct44MCbjGqhTUQaa0OJzTnpjZTAJo1RbpwaUDhQ8zhKRUkX5aqro0yoZciLmRDUZ4yXVtZiCpRLaLW3vWZ/1GFdEQ+oNZBFqFwNjGuhaS9N7WffZQCoRh8NjaJ0jDYWz7YrjNEr0Rk6i7ZpvnpKxzM4MCAGgCGvSWGF6lTkFuVok2VlXURrhnoSKRk0TPQ1pHAnVMqlg7bg7Uq0hTQM1j6y7DmstbfCsupa2aQhtJx6DOKYozccYIRcHpsXYDuMyzvdyQNmIM5UUJaQzTYlutSGlSZ4vhEXLd8o7ksN6/hmd7K0VQfmUMs43iwDd+ZaYCj60+FqJJYmxbMkUq2tyK+LzVJX2PE14b0k5cRmvsFZ0OzFKYxJzUcdxmZJMraLHU5ZZQVZOzko+mbxKi61B8B7FyaxzPH78hKvLx1xePWa/27NZn9F3N8qok+bR2GYpUIZTsZYDX5sSJwnchSpxOaWCE11UrsredU7YkU41UbP4tBrBh1XFahcrFxZsa96izF9/SgtAy1PBVCsM4iLfb+HbTBRF9JV1xtxnL8/lgEcIKJokPWO0tciOQAqToeSHOJ0ThuaMFTpku5QrXlwKZdVsZTVujcNZr+4WQTBu43B2IrlA9FKoXAkaMDvfPyqJmSGKB1jVPH1JUS/f+nv/Fo+PdJHqmpZxHHn58prdYa/6ip627WmaXvGHE+gpkdROWFQuCPbiDMYWurbgrcVYmNYSz+31QklZKeMWZF2lU4KuleIoZqsxFnIqC/UaA8VU8v1M+cy6EpHLr+RCnDLHw55xGNQPT0LG4igheF3fYiyij4kjIXia4JZE26urK7quI6juY7XqCdoFl5yYDvfc7+/Y73c0TWC9WVFr4XC45+7upRQbL+JB+RGIMTPGkXE6isNF8DTe03YrIU9YS0rCyonzBKUhcNST4WkuEpJXq9JUl7yiTEVo0M4LvbppG9quoWnFlur+bk+Mka99/WtcnF/xGz71KZ4+fcb1y1uOx4FhHGldSzCO87MznDVMw8gYo9CLU2JiUJss8e07MZQEbF4ixA0Eq2sZK0LrVASf8E1gHRoKhrEUUszc3N5DvBXx9CzS7TqM97TBsl63rPo16+0Zbdfx5lsf4/z8Et92FCy/9utf4Rd/8T8RJ9EX7e7vGI5HmibQhoYXz2/wwen6S7Qyq9Dx+pM3eePJa1xeXnJ5cc7d/T2f/9VfYYyRSfOmlpyrByumOYrmdrfjC7/+a8QpcXZxLgSFAi60XG22WG8YVIcjh6tQ/kst1ONETHC3O2Ksk5TXFPn6174uK6oqtlRN09J68cCcUqRai/GOVdvgvSOmxPF4JKaRamT9tN2ecfX4MY+uHnN5dQVG1pyPHr/GO+98nNcePcIHx4sXN8RSuXj0Gk+fPmWaJo6HPWliOQgfTpAP/5sqRWMW3z8kBsxOD2JVNK//FJ8CWbtWQy1z+J9n1j0aZlKWYlYPkE6L7pKrFD2jjFqzeDEq4epbMDOtZl4ZClWBrKprMpn0kEbZWkITvsmV/OFjXgWnWsjTpE2x/Ds+eIz30LZ6LlVYIjpmr09Z3c9T18wmzkU8HMdJp656YvXNK/cPp1hHjfKZJ677w/V3POc/0kXKB890lNXaPBLLaszI2sIEnA1YG3CuARMogDVqHaPjubOBghrLUvGuoVRJUY1xEhpurlAqqYhzQZ0/jCWULpNjVg1CgQc5MzFOEndhwFCWFYGEpE1KiJCfpzGy3axx3hBsQ9M2QCElYbut1iu6JCuUtpMgQh+M/HCGzXYlTgSNlZC3pKwmMtU4wQaMgL+pTExTJODBSncmyQRC0PDWYdV4t28CTeN1tSestNA47TBnBpEuQK2TDjAXzXWa3bNFIJqV6ppzWvKkZiahtXJgjGMkpYGcyxI30LatUudlxRnwuOAlGn44Lu4UTdMSvNcurixgLcAc+zAXqbloeQ00NMapRbM4fdhqwXpa3+CNOCPUKWFioqa6rFJMCEhssaEajw0tjTH4pmFzdsFqe4ZxgWoc7m5PKQfRAiU0SkZiL9bqluKU2JOixJl739F1a1brM7bbc9puzSqB8wFXC644snPiMPIAF3BqbRSjuDuMg2jJnFro7PdHmraVVXbjmFIlmCB8DJvUJUI8LX1oMOpxSLUY37A/DELdzpkmgHUVU6PacM2vQzAx5xxJ9XzWijGu3JuCi7RtT9N2BC9Eje32gvX6jEaJHQVD261YbbZ0uz25grGjatheLUrzIXjC6k7axldo2fVhhIliQDpxL52/M1At1WrEBaI7QydXgf2Uyj5PLqq5nPGsUkW/JdOa4tJVzp9qjDrLVGUjKmZnpUk+mXZoCTQy7ctmUBw8ZkeTk0BXX4dhCcWU4iyO+rODy7JO1HfJ6MZhli7MeVfGuAWfnDVWpSjbzwdCmF4pUCkJEWb+9WkNKGeskHC/C2ofH/EitV6tJSkzjzpFrOj6NU3TsdmeE/wGaxrEIyxQjddcHKv2LFCRMLkYZVdda6WkSpwS+92Ow2HHOMnKR1jGGpM973uL0M1LrszWL7nKFJWpTFmZe3GUTs4q0QKWHTBV1nYGGKaRx4/f4Wx7pgeoWNm0bcP5+RlPXn/CNI0chwO3dzfs93tevHzJMAx0Xcdb77zJW2++SQiBu9tbnr5nqDWxvu8pRQ7xUgsuONq+WRiDRfVj+/2eEDyPri742Mfe4ROf+ARvvvEGq1XHYX/P17/+Nb7y1S9zfX1ku13TdYHDwQmlVdeuxhhSlcKaS8J5S9s2eigZrG2IMfH02VNSSqxWa1LK4lmHYZoiXdsQJ7mwp2nkl3/5V/jUp76fT3ziE+x3B37917/MbnfPax+75OLinK//x68RQmC9OWez3bI5DoxxotRKv97QNKdIBKsT8zJJWWVnUcE4UoEpaVyHa1itt2zPL7h8/W3Orh6x7npa35CmxH534HA4Slc/jNzf33J/84LgLY7C40eX/PYf+x1cPXpEtZ6ZUxgPksw7HI+s16IvylE8FS/Oz4HKy9tr3n/vPZ5+8AGGSt93rNYXTBHi9Y79fichnI0cEqHRbCvtVmdXcCn6EwbDfn+Q1YyRA9BaITA0bcfFo0c8to6Liwv61UrZkR6v+sAQWlCBb8kioP7FX/x5Dvs9w3FPipFatQlRxplgPHIQTjFSgX610udtCEqtt8Zze3vPNBXe+fg7PHnyFt2qZ3c48uzlS47HI/v9gZgS5xdXdKs19/f3fPXLX+L+5cBJjmqWZmcmTUBVbZwu3xRnKbksB6WzDqropHDqgalYnzz0k1PigsNRqxUvxgeOEfPPxsxBivqjVlkHz1Q33FLQQFaPJxcawchEjKhLwwf4Ta0689Q6uxEs05j8+alJsViwVf8VIYvMhtuY2XaK5fs0RtaGLkjOVsoJX1kmqlJOzzVjfjmnJXJlTifOWQwMkkbhFHW3ORwOikeJMcD773/lO57zH+ki5bzHeU+JR5q2US2PVz1Js2g+zHxBGXU1X9g8c2yFerxlWcWlKRHHqKK4SIwjmaziXPF6i0XjBJZxvVCS8HmsMUp1FXymloRRLzHqzDCT6857udD77Voyj/LI+XbDZrPCGnE0xoCz0HcNm1XLfZ4YkOjpmQDgvAQl5pLINeONVwJEpRohQ+So+3iQmw1lgqlBJ6YqVVjNNo1MGE1wOCtdspiQCgAeggPjaXKgkshpXpCjQtSqxUBuhphmjdbsGqEasCgAfQhB2X1lcVlIMVOrxHTXWmmbhj0HEXQWKe5eHTlKkuTX4L3YJpVMVcFo0BWpdHEnP8G5cHmncLb1mARYwVWs7+jXK84vLji/vODy0WO22y3BeeIYaVZH1uPIYX+k3R8WdmBOo+QJhVaSZ9seGwK5GJrQkMKAPxwIoeHq8oKubYlx4rDfcX5xJTd8tVxf39G0vbK+xIYqThkLHI6TrIWqFp3KQkeeV3zyw4k4V0cEIQA5IUU4L1Rs6xDXiKAki0tKBes8oWmF9OGDfD9JGh3vA+v1lmlKhFyQ8EWwSEyOiKcFzK+1Kr5iNXepIfhm2XyklLEmY+3INImAd8ri+L4/HIgxyr0AS0S7OEhoYVJu3Yd5CPOBapSwINqngndQzKsWQYs5bFWc2BhdzwtBanF2h2W6mXV+MkXNPyPXGSc2IzrfZrVdskYYmPMTGXnjlOpuwDjB9DiJzuVZl2FOiBNVNhJmISLM0+BMDpHCZxABsK6c5HmUQDS7gMjTJnE0qSqEVqedGWezdi6Ehdnk1Lv2lPhQCtafrNecNvEVyZRL83ttDDaF7+qc/0g7Tvzv/vf/B47jwP54z/nFud5ssjrYnl1wtn1M22woBcYhMyWhUOeSSTUzjkfG6cA0HQUT0kPUAjlFpnEkRllFzRojayVqoFbpzqx2TGJ5VJUgMQlGkMVlIrQB5+3JX00vuvW65/LinNdfe42rqyusgZubaz79Gz+NM4bnz5/zq7/6eV68fE6tRb7+8pL33nuPFzcvSVQ++clPcnZ+Rtd2pCwaLBCCQooT+90dX/vqV9nvd1iLJpNqImlw9A8Afu8c6/VKOp8UyZOw9SzIRBSM5ieJ7+HZ2Vb3zKPSszNxEmwqFemiUk6ERg7Im9sbwND3K/p+xdnZGavVWrqxJCuIw+HIbrenFEOKcDwOUA2r1ZppSmw357Rty8XFFXF3xBVx4P7CF3+N88tLLh49Ynt2AcZwGAZcCIS2ZxyPwAwkL43ksuKV7LyMCy3WNTRtR9Ot2Zxdcn5+ydVrT1hfPKbfnNH3Ogk4T/ANphrG40BwgTgN3N1e8/57X+erX/4S737tq5RS+O0/9jnefPtjrLfneBsYDweo0HgrU9RCPJC8oDhNvLy+4Utf/hLPnn4g8gUDVDEHHoYBY6DpDYW07P5LzipINUuKrbOOCrRNS9N24ugQxRmk7eS/MZa27zk7P+cHfuA38uTJ6+RaF1FvqWKmOozT8vy1FPa7e+5ubri9veH65QviNDEOe4kjmSYqheAdofG0TUMu6UTk0DXhFKOQAVwgNOLhOU6RYZrIaLCiJueKpZh66jmHN9BaxX+Yp5jTj+X3lKZwElXDPGnN6dmyk8tUEofDjlITMNt1iSwF48hKxpj1aEXTB5ivpyoEnHkaE2zQKk3bLs2q1SZidnF4KPrGnFwp6lKa5spYlzVlnv0tKbIhUleMWfv1cJqsiFZpds8IzqsY3YiptJoL5JJ0bW91YkJWkQ9IKTJkyvZpdl5ZvmZe8y56KJUBGKPQjG4Tpsj/7b//v/6X7TjhnadtW3KVuIXj8ahU4Xn8lvFVB10RmybBh2KOjNPAOByYoghbhQ0mY31JUbzmlOEmH7TB4pApf9Y7zdtfGU5yyeIWkUZSmjAW2vY0lXgn0wNA23i6JgjW1Iur9DgclNNjiWmUacSw0EIPhz273T339/e4TqxsmrYVmrDeJOMooXPHw5ExJgqWVMFVS64QvMc3gnc1fU/wluCl7+u6lhwtYy0kMxLHiRwTsYxUZRnO5I7ZMLRWR8oGm6FpxUfRVPFlMwpCC5lEvhfRSRURCVuJ0nbeiKN33QMFayS+YholnVfIGmKZ03U9zjnazYZpt2MaRxGSGiPhdEbYUW0TcKEREWhJulvXi2e+LuabyEjXaUqRpBU12vTe40Jg1rSVHJniQDCNOLubLESBaCXqnEATPF3bymupMAwD4+EogHOK5JqY4qBrF089HoTCnRJUwe3iNDFOg0zoaq01MyvHcWAYjjjnqN6CLcvhXR8cdka/h2osKWYCcq0ch4li0gMXc0cuAoCnnMg1UZT4k6t4PcaYmFIm6XWf1RDXOCOYjZF4mVSTMAMrS7cu/nP29HMRZ32jrMqUhXhkzIixlXGUUNIxRlIUTLNpmkX/BSjrzMlq1Lh5sFjwpOW+1EPbzpMWLPjk/JAiZclTXF73NE0Yk6nk5ZoVXEZcamSVpno0fe9nQbBR0oQULqNTbiEb2VzMjLxijWqGpACb2XKoqt+nUBjnC/bBKxbdoLxWzauqYIyI1+1SoGZKeNHPoap2S9iMzM4580RVQHLClKpf60IQeeX94sGHa4SQ4TCn4mg54V3zChL5+tC2y2urxvDdPD7SRarrOnz1YAqr1UqYQ4NMRlPMHA+RpunJqXA4TAyT6ANqFcZMJZNLpNaEMSpwNXIxV+OwNhCKAP7eKhNGcaj9eGQcxoVEQZUV17wbtha6NlBqZhwONLXh8vKKs8sLIQA4J/qCUjjs73l3GhiPB9599+t84fO/zGEvOUWPHl2yXa/U/09Ei+dnG6x33Klj9suX14AwpWYXhLOzln275+7G8ht+w6eYpon9fs/+sGO7XfPkyWu88cbrPHnyhJwGdrtbDvsDL54+pfGOrmvogmewluuba6bxSCzTEljYtoHDYSekA+/oe6FZZ2XzoXElTSsMzOcvXnAcDghttnJ3d4cxRj3lerbbM9o2sFqtFOC11CKCw/u7Hc+ePaMUSFHWTF3b86M/8pv4lV/4Rb74xS9wefWI87OtrDVUq+PdKZ5ivV4zO3DPup3Fmb5qzIiTgnm8v+dwnHDhwM3tjvq1rwsUbYUQ4ZtA03V0Xc9ms+Vye879y1t2t/fc3FwTp5E3nzzmbLPmN/2mH8YgQY/XL19wc3PDME4c93sOhwPTKAF1cRoZ1LNv1UsSdKlwOB6ZxlHXmI6ktOLzy3NKyaQqnelsEfVhj7hZDO1sppTK4TAs69aUMjFKNpHViW6cBn7+F34Oa/+j8LyqrIkkFTYzTkntwrwE84XAcb9jGGUb4ay4hbt5+rBG6OrK6isaTtm1QaeIGaeci0tmtW7xwXIYxgUSmk1PRUdV2azWtF0n6blVSoMc1EK/fjWmxECJzPEc1vJKLIxoySr4Bkpmt7/j7vaWlAYhgjwgoFgzs+7kuVMUT8y5OM6uHyKQkLa2qj1b24jP5Iz1WW8pBo2/EYq4c1Jw8zieDHm/6VGXQuS8IzQBa07enTPmndQ5YhzHhSKecxbpyTz16ZrP6CSVqYvxrsxhZhFhz8XFz0VGV3c5Sb4cnIwN5l/Pj/l6DE276L++O9rER7xICSA0ExcySd0GSs7EKRKbUT6sNLtiJ6aUJJZCYlsoVcw+572tMeozVTO1SmeLeurNibNYgzMapWAUX0F6nVSFuSYXtsUYzzCNULLEg3tP8H5xJ07KaktxUofxSMmJcRBgvdYLnLf44pgm3T8b0XYZNVydE22bAMYEjA1gxCAVe5CiGCawwk5ruw396ozV+oLV+pxaO2otDMcB6+RAaYI7XfS6444p0tPpir0uBz5kVeoLHiMXtiSiWlMo2gjMtjkFiZqPMWKtpev6Ra/WtA3jpHYsqK4EMTo1RrQ5MSWJq/DCGuy6lq5tyDnhalCCiBwSpcrn6Z0HI7t0Y8BUtwg7a60Yb/HGnCYum6kxklKlGDXhNRbbNFKkxo5p7KkpEmrh9voFh7sdd9fXjMPAxabjYtOzXfWEJuC8MEsLluwsg5X3LZcoXoJF7aZKIuUJH6SYB28xiIeh085bVkaK6UVdLxmHM/aVArXYJCHYitjZKE6EQZwyst5KYuGT4sQYR0nGVZF6KkXup5hE/4QyLY0htw3H8aBC3ojBixWVMYs7uehaJWqjFmUuUtUHEnyeC4vTM1PcEoLXCUihppQKRe2NgoFgKo6qE8VplQe88rMxM6Y0rwQdxnjBp5epSxoXa8Sx3RpL4wVrrei1XgqFjEVW49gq6daisxCsx4Cp8rxVcSp0gsnGUXyQ0MCq2qdSJRurqimAnRl/6D6FB+SND51+WiS+VeAlGN0inTRbD4v2woJEafTzWVpPrhIPV6anydQsjfpcqMuDANd5NYiRbdO8ApVhTaQFc5Farr3v8PhIF6k0DhyOR16+eMZ7X3uXaRrJc1SEMdx1K5wNujudMUkZSzGzh1tEwg+0Y7Jy0EbNDpomWSV5q1TsThJ6n1yuKee9XMApc3l1CTXz9OlTjDEC9APrtTDXAFpXcWXi5ukLdbOOdF2LNZaua2naho+99aYII5OsOrBwv9stVM7d/iiU91RxoWO1PuduN5DGzOXVYz7+fT9IrTAOE/0KPnn+BnGacM5xeXnJzc0Nm+2as7MzHj16RNc0GAqNe8bTD+4JYUUxO6wtrNdrzs/X0u2+KFy6LZjK8bjn+dM7YhwpJRMaz6rvef2Nx3LoavTIyxfX7PcD1jRQPb3rOB4HEoVahMlWG48PnourR+zuBx49/hjr9cQv/sKv0PUbxqkS6QgbcYVIceTueM/0bOSnf+bf8Jkf+BQ/8b/63/I//U//isNhR3XggsdUNa80nq5fUQbA6qRLptqimEPF2orzcmNZ67A0TGMijeJUvjieNwGHoQFcLvhxZBxv+cbTr3DY7yX+IybW1lKPL2nNOa8/2vJ9n/w+Li6v8KERH8BplEKg8oVa5yBDFkxTVkWiK5rGicPxwN3dHdcvX3B/f8/NtUzP637FaW0Jcwd8Yq7J9e4QQolRTCGXgreoVtBh/BwNUWl8wJq8PJ83lqYN1ODmY15WaNbSBkvn16TYnFy3y4z/oAejOC5YRJrh58lJG8PWe4K18l6nkVLEUXztwNossRQFoklEJNLGm4SLlfX2nGwaxjg7fAsJyCghIVcJCaylsF6tAISBWzJ5Rn0Uo7L67q27NT/4yd+IIRKnI8dhz+64Z3/cMw5H0lQoTibXEAKbENjv94seyIZA04irSsEINlvh7u6al3c3NG0n24BNL3BFCJTS0pSGkuKCR3l1c0H1VKcie5JTlFIEt6Us63djpZleyDBe0iBm6YvYfhWWXKi5MReLax4GVzIXPF1dzpOdWVb9VZrT2bnMcMLirBZtzELRr7ahGHnd2X535ecjXaRiHIjTSBxH9vf3oslZqr/QPdODrBZ54+xJfAcIUTwjMnBDdRbrHTUNlDhQU5TdPuJ8bMk4k2mCaK9yztB6NuuWlAbaTpyVc5bETO9k5AfErZpCjiPjUeIIaDyFTE4WgmBsQhqU1zhHMsw5UiKMVUpfVX+xIl1f365ZdRthxPk5+jtgGem6jsuLJ9QS2G7FDsmZFSGs5ABzI96tgRucC1iXwchqLbQe3wS8NyreTYyj3BiimZAL3LpKIZ4Sb8tIikes0Th15H3MSQ9mPRyMTgXTJF5t/aqn1ICxHVhLtZl21crEWTJxGrB25HZ3TawD51cbQutwk3ml4ajKorTVQtFpd3aeLmWGCzBWJE7GytTgjBAabC3YDLUkXC401mGZ6I2h8Q5v5TmGeKQ1I8XLf3tr6Xwh2IwziTYYtithx+WcaZynC5VcPKW0C6ZxEkNKOB/I9DEMI8FDSSOHnefoZIUmAuoitoP1ZGhsUCmEOm4I1d6rOwiKXeqUgYjYRZcsBx1F1tszEG6tHF6ox6N4Uhq8N1gjTvHVVrwTfKKa2Y1F8ZkKMU2SVWbkPkDJBlZNU4upIowuGaNuFI2X5FqjeLIxCe+EoORqJRiDL5HqPK5WUi1QkvrdnqaBOVF3Dg2dPfYWATqzMawc4N5aVv2aWiJRPSGnGBnsiDU6WaUkrz0Y0ROizuqliJO77krn+7hUyBRyhSlHijW4OOq6E1KS6dhVrwJzt2C4D30ZH55lix6M08pScFXAWxyVheFprSQnyN9G9GL6IVVV1mmVsXp+skygIG3OCeeb16uyQnWvvM5XpjB7msasE12lOGh4qjnZKf3nHh9pdt+P/OjvxFqvHVzWXbnQGuVgr4xTlM7UGrwTMerJiVcol7JmyeJY0Qv7bd6d930veT6rlWIxLV3XLear8/O8ePGcly+fcr+7o5RK3/UYI5RhkJycUopm+ERd5dUHSncBMY/DwDAO4mYeT5Ttvu+5urri8ePHeO95//kLfvVLX+PRo8dMU+T1J2/xgz/4Q/zIj/xmhqOY4fZ9j/eB3f0B6yyPHz3i+uaGRq2dYhLj09Z7ch65vn6Xr3zlP3HcP2cc78jxSEmJD97/gPvdHWdnW6V2J6bxyGq9ohS1TqLQNI77nUyJIvSrBN9iTcs4VHa7kWGIJGRl13ZiQnp2dsnF5WsMQ+FTn/oh1utzPv/LX+Lm9p7QtRjn2B8PnJ+fkePA7c1zrp9/QGMS25Xnjdff5Lf91s/xxS98mWfPXjKNmVod3jV03Za2O1MxqMbb2wKuYL3R0D1DaOUgH4+JcYis+jPapqOkzG53z2G/w7eeq0dXfOYzP8QPfP8PsFmvSHFiOB6ZpkEKACKYff7ipeBwx4HjMPDmW28TGpnQYhY1fqkS+9I0DV3X4ZyjX/Ws+pXgCSnp3z9yPBw5HuVHjDIxjONIGiOGE8bitAkrRQhA8xQ4m/TOSa1zYUSbhVQLQxLcpu97QvAsB4NOX1UB81KESVZK1e9DpRxz9Pz8c6nyfuuTqIGTHoyia7Lza7JKdFGbMDEtFWFwLpk0JWm+kgZ8KtkgZUiu0xXeTFyQ57T6nngvDMcZI5ktpJajb16D6crLW0MwhpIjMU4M45FjHInqU1fGRJymhemGgcN+vxQO72RizbkwpiT+Dd7juhYbGqIyfGvJuqFpWK3WbNZb0Xp2PW3bCZuxirPDh53Na9U4HqtTbp0JEhpRP687Z2enKiZSM6lhHpKkHs0r0VfXdjMxTBiL9kERmovUCa/7loxKa2WSWv4hNOtNJCbTOPAP/y//p/+y2X37+91Cby5FXcKD105y1mkkSo4Su1myZLAw+1wB2nlbY5ad/2wb4pyE/LVtS99LYfJzWKAKFGej1fffHxnGAe+9mIJ6pwU0qmO0rBfhBC7KDeT1ppeJbzZzHcaTA/qskp8PIjF2tcv36Kyh6xvW6xVNCExjxDkxm/WuZWqKvs6OJrSgnfZhd2S9WTOViOQgrSnZUKtgaTFlwclSkpgAJ27cBmj7Nf2qJ6ZJV1VVVn3GU/BKWQ/40GFocLlQ6iiTURaPsYolF4TkcpyoBOKUMVvPerPlbnekbTrJELKO1WpDjp7D/l6WR1WCDV++fEkIQrro+yPHw61q5TxoATWLhkUnqJn1pZ5ozgrFOHhDspXgPK0P4IM4zDtL6y1nq5bL7ZrLbc/Z2RZqZr/zjEcvh3AxDI1nmgbu7l5yd3tkv7vj7ran7Tphyc0OJcpabNuWNAlZgpIwRWjkU5w47I8cjweGcWQaR+mGNbfK1gx1TmquZMoS3YFO3HOnLuGaWjBmkB8lJhfR4piaqTlhaoNlMdVjZj+C/LfRZi9panMtWYMAUR9Eo5NDVsxPUq+983Lt1dliTIqDsEudRjkoN65okUImu2gtk40kkzCNYEbWOMZhYipRGg0f9FuX4mhtpWmgaaQJHEYxfK5G/CMrD/pzxYiwcm0UDEmxpGIcuBbnAs5Xio1gxbi5Fk1tdmmZaIwTd/4pTQxRhPPBi97MNR4SjJMk4EqyQdHJcn675e7wzlIU31omX/3gqjL/Fpsv4yhFJzmD6j8VDytFMT892zgVKMHN9aM1+jUVxZsLpbBQ5k8T3XJhLCu/h3jg8nUzTvcQJ9TnmSUT383jI12kmi7AvBLLiZQlYM+HoMGElbZr6Ffd4qwA8mb54On7ns16xWrT0bYNgPx9J5RcjDDm2iaomPCoHlUAlWEYubu7Y7vdcDweaVrL+fm5vPlGtEU5R91dO9brnqurR1jr2O123N3dcXt7yzRNcrOGsFiIPOz2Ztrt9fW1RlC03N7d0bYNm/VawPBcGI5HDvsd1y+vORyOGON44/WPaaGUcf3999/HWknx/OIXv8hbb71J8I5VFzg7a7m93bHb32HqgLWOR49f5+z8SjKqcubFyxdcX99Qa6Hte8YpU0qiX/U0vqNfr9luxVsvxcgwZlKEVAwxVQ3Ra7DVCu23VI7DhA8Tq9UKrKfv17z51tvc3h+4vHpMv1lze3/Ha689xpAIQRJhXXGU4Y7D4cA//O//If/tf/t7aduew35QHdY5w5DZH3biaeg8KYthcKlzVy5U6mGUw6lmOBxG4pA4tB2rrqPrG87P32azadhuVkzDnq9/9UusVysscHt7zf3dHSlFvJMoC+s877z9Bp/8vo/TtB3r9RbrHWBF1Jgy4zByfy8uH4fDgcPhwPP9vRxWRl2vlQzReYutjmgKJcl7G7yhDf1iTzNfM9ZZvBOPyqZtNS5kzhZKTNPsCiDFUA7QwOXZBucd4zCSxuPp0H24bdJDZm6guiaAUrHnhOdUqjrhFw2YlByws23Per1itVqx3W5Yrzq6tsM7CzUrPickhLZtWfcdq1VgvVrRBL0/J9kuRMXtapGi6VygUplGdfw/yr0qgZnCdPvGe+9zOOyRY0DWlmVm9gHVaqE3gVo9RZfHeTayNUKEEOxGbMbW2y3bsy3t7R3jqPls3lMLhGakyZl+s2K9WePbINR+9eJzVRib1jqc8wQXmO2HUtSpDSQmRCc2Y5Hoemdp9XMVkbMKZK0QqmZR/uKcgYWcyGVO/dZpys4uOPIhSwTNq8u1hxDK/PM8Sc3X3Ie/dmmuH0xSxhh8EwgqJbDfvMX8lo+PdJFy2mJYUPp3BuexFR3dJfqiaYLs+NWyY9bTtMHTNJ7NSm6cotlHFTElLSXjtfvIyHpl1iBZa7m9veX+/p6cowKQ7dLZSPconaEIAmWt0/crjJHIDefcEjA2X2DAUqjg1JVIUJm4nw/DQMpZjTA1/Aw5DIbhqIee6GjGcWCaEm3bqr5mELD1cODu7pbtdkPjDZSWvjcagZAFDC0FF3pCs2L0oplK+ZpaAylHMA25TIAlZ4tzMmmGpiHlA2JnfkCa4URBPOAyGQmcNPp3DaVYnGsxJlDxdP1Ggu6aln61ZT+OrDdbchxYr7fiF1Ybcg5M48Tt7UtKzbRtIDSWpnG0baAUOBxH+Ux0orLGLMp3kINYEncNcYpCukiF4hIlJ/quV7ePnjZ4ak7c391S40QIjuN+x2F3xzSNgql1idV6w2q9ol+vOTs/F7cG58Vtu4gOZwgBWzOmZKbhgCkZcmQYRyUzyGrOOK/kHYgl0QaHKdK5++DIqZBMoZQ5BELwobb1BC+HUZmxh1KY8iTuJlUzfowYmQYvsok0Hol5YhGizgs7fb+KYlJUOTCNMeRawRT5bEvC1IQhY8lUc8L5Wm/ZrFouNj2bzVoKvTotxDgJmaZW+q5ju1lxvl1xdn5O3wgmmTWbrOj63FkpyFa1SNM0cTi03O88o0ao51I5TiP7W0PAqpQhScOyGKBCcaJdKtRlXY01+OAWg2TrREsnBskF31i6rmEYPblMCgE4Uir4GrBV/rxfdUI5RxxgvHO0PjCbJ83bFnHH0UmjFOpMPphZCQ/OhFN4oM7EdXZzECxK9HIz41PDQmpeCsg8Rc0rwIfysYfn0Ym7/GpVmf/9D09E82Q1N1qzOPnhRPaQqv6dHh9pTOqzP/Lf6AcqE5JY/As91FjLGCcwov9Y9CJOMmwW6yTV+Dh1W/BB7Onv7m549uw5u939Yv7qnNPVX7+MrDP1c3/YMcUBYyrbzRkXF5es1xtyzkIRN17cqy8fU0rl2bNnfOMb3+Ddd99V4aA4kYOQA6xzi4BxLlrzinAcR568+SYf+8Qn+eCDZzx79gJrHX2/Jifpbi4uHvH2W+/QNJ2YtOoKEeDZs6fc3NzQdT05Ja4uN1w9OqNpHL/2a58n14mmsVhXef3JY0rNDIcjw16c2q8eXXJ2tub5i2e8//67DMNBTGS9ZHB1XUtM8j3t90dKMUxD5vZ2z2q9oZqsiv4KxtI0Ky4uH/P227+By8snXJw/IoSeL3/5q7SrNd16xd1ux8XFFm8Lu9trfvk//QJluMaXI+Mw8bWvvcvbb7/DJz/5Kd5+62M8ffpcgWSHD+tFPZ9LJtdEyiJYnW80Z6pGE1SolmC9rnoDfdewXvd0rcN7mXipleB0VRUCrYqyjfGkKLqi5fBD9EmlSnx7ExoaXfUCJ7eIIt5mz58/J2VhdlYqzolbQ9f3igt29L3oycYpkSu6mikLcy1G0SXd3d1yf79brt25KZodqeemq9ZKEyQJeH4tDxmD8yGY0slMGMTBBAyzEWmZXeExzGm8zs8BeRI9s1qvWK9WbDcrzs62rPqetmloG5ENhOBom1bF7xIbU4tMWNaIzVYzY7mAV2KO0yTm+d6WFZRiUFhiThiMfN/TyDiMTHFiHEbxAC2ZWGGIsB8KKYshsOQmzYSg2cEBnPNM08jhcJCcr1ol2LJt8S4wTRN3d3fc73bEIvZKsoA7rV5l0rF6jnjFCw273Y5pShhryKYsWOJ8hsGJPCGpyjPjT1wtlslHn98Yi9F0hlnAvrBCzTwJnYS/p+9TG5TysKC8WrCKrjw/jElhzCuYlDABHcbJBDhNI//w//x//C8bkwLZnc4f4CsAHmj0hqFvm2VcX3CdEMTqyDmxN0J4/MFJp2xKhZqFiTeOFOaCZKg0VM18abtAzuKeMEWZYlb9SqxKFPMQ0Z3c6MByYc0A6PxjmibZN3Mamz+ssk8paRiZ4EwSAT8zADO3N/dI4mZgGA6MowD683pxtep5/vwD7u7uePToMcfjga7L9IfK4VAZxhFrCxHxAxwm6ShTdAyTuFb7sKbrL8jlhjEaxkkmx8FE0UMCpThZoRpxm0jFYGxH06wxLnM4DpSSBH9AMLC27bEuIMannqbtEYcCCZxcQibVEPU4yGojZ2kgbm5eMo5vEYLHe8PhMNJ1G+mE9YaRDA63kAD0AznRaRWf8k5/qAaulkxSG7dKxBkxyMxJqL6ddVgXsAhYXHNmOAxMMSoBQqjVTTfShkDbir9gu4gbq+CIweFsJUcF11F8xXiCrbTBse5bzrYrKnC/H2SVYu2DAiXyBW8hx5E4DrIybAS3aLx6JjpJNRqRVSA5kiiC96DrpQUDkWLrbVVfPj3sil82B6YKtiX4lMVZaNTQudTMmOSQTNNItDB5w+AtwULjxQkhBE8bNEKHQk2FWBIpiZZRCpfBmU5eS05QJauKEAi2o7GGTj08jTGkVEkVuv5sWXUPQ+B4dIyTZ2wt0+SJJTNVwxANTVMptqNUtR5KI1kdOTAixm3blt1uR4wH1qtGcN+2pe96MfWdJoKvWFM4HI/kRQZjlzgVIR7qNqhWnLFLuKGwHl51xzhdtKeJZSaLfZjY8HACmlfIVsVpM+YkZJMTDf8hriRPZ5dJ6OE88/DXH9bmLa/FmAfXkFLWYTnP6oM14X/u8ZEuUuv1asFb2rbVLkLGX2st1lu22y2f+MQngFPH+jDr5LSrz3zjG+8S4yTsviqrhLOzM/oUGaZBU3EPTFFWdU3TMNvWd13LatUzDHumOPHy+iW3t3fa0Qk4Po2Rm5t7pilxc3PD4XDAOcfZ2dlSuKrSQefk4Idjt9ULoG1b7u7u+MIXvsAUo+q5EiE0XF5eYIxEQH/5K1/SyArB44Zh4PYW7u6viSny9Nl7XFycczjckuI91nmur1+y3mzYtr1Q3WvAuQCNJzTyPPe7kdBO9KtzLi6ekLYiQhb2Webu/gZjDBcXF6xW5+QMbZM5O3Ocn19QOBJTYn/Yy01rHW3X0/drmRCwDONE2/dC/R0nmq4VtwGNDrm4uMTnI8OdkFUeP35MSolf//VfY3e/57f+1t8mGF4SXHG9XoMRJ+6UI2OcmJTNlhWfoap1lReguwke78Wl4nDYw4BMTW3DquvkPT0O3N7dLaQYbwMep+/3JPlMKdPqwRXTntEZnJmztdR4NKdlChlG8eVz6hfpDNScGIcjL58n7m9veLqk37b4VgMQFZvy3tP3DVdXF3ziE+/oGkwMWidNzwVxb9jv99q1TzROjGhZ1kbaRYOSdMqC88yRNE0IgkcpYzHFhJmNZq1OUs7hfct61S0RNzlFIcDkCXKEkvBsCW5FiiNxKjTe63sgBsc1i0XTME3E6cjBWdI0YKY9aLPaNGKD5dUhIuXEOE0SQdI0i0P3vJ14pVk0loSjmJbqVxTbUY3YcsV4ZNR7O2XR0/ngKblgiQQv02WKByaTCGHDZh24PH+DN15/jcNh4HCcGMcIGGJMDHEQLD2ptdJSJKp6bHqwhmwesPVeWVOXZSv0qtXTgzVgPf2eXHIPYYQTmWv+b0m/5sG/9aDgPPi9+dcPz6f58YoI+OGvmeM5vrd130e6SLUaheydo29bwT6UMRWagHGO9XrN1dXVst6YD2vpsESPkpWBdDgeub+/Y7PdLDEODsAapiTx7vMFPTs/eC8uzvMNadU1eJoicTqwXq9p255aYEwTw3EiTlHD2qLY3ShRoyQ17jSzqNScfjygz1oMw/FILIW27cQUM0WKMXSNp1areqxImgpJs4QoiWEYKWmAksm50vgzSqnsDyPVTEy50GNJ1WDw5OI1xsDRtI6Y98TimKLB+RVtf47PEecjMTs5DGPU76PFhjXVotqyltX2glpamvaG/RAlBweL8QETvMQZUBmPE973HMfCMUaaXlicuRioAWNb+n5D2t9wSAftmmG/3/Pe++/Sdp7QeHFvaAvtSj4nXIGpkKsTnLJCQdJKbVVDGycFKujhWFIRH0UnxaJRiQJFPPXSAtBXLF680Yy4VIzTyDhO+CDrw5Ilm2yqSWnIsmKJMUKd2ZpCnzZFaMO2FsiRXDO2JvJ01Gu8IXRVQjxLwVbFHKoh2JZN37LZbHDOs9/vub2F6O2yhmycw+oEFJug4lwpUmRp0mZLnKTrvKM15OwXeQRGMFtnwJSCmS3CEKzDGXBGthKNl883VhFz11woyZLjRI4TaMJzzvK+FD0NXfBYjQABocznOFFSZToeMGmnTvCGGMVh3Wm4YUxZbYFEKDGTp3I+6fTmbj8bS8ZhfSLUivNZEL6SqXGkpCMljhAzxRjiKI7yjQEcp3XnONFsOlahYbVuKaVy5yrBwcEachaBNGSikWjFmE5eeRhDaBy+zi6eJ2cUIYGcCGCYWRunE5D6+pk58ngpVEYxqfljm4vUh10ldIKqM8Uc7ftfNZed1312Dgud7ZXMHP2hk5X+28YI87Omovlc8HAq/M89PtJFKk5iftqGhrPtdkmX3Ww2XFxestqsGaaRp0+fcjgcuL+/Z7fbsdvtlugHqyabTSMaq/PLSwDG8RSiN9POBcMqeO/59Kc/TQiBr3zlK7x8+ZJpGiWA0AeOxyPTGDHGUeuecZwYB/G2qlkYSPv9npQSIQRc12GNw4RK13UqlrQLZgGCMcwFMo4jNgSCddzdXBMn0YiZWnn5/Dmtssm8Nbx4cS1rpkbiGdrGkZMnxkLXdex3NzTtilLhOA2SWLxecfnoNYJr2K63dG3HWgkAh8NBojy85frlC9rVlr7r8F60TPe7Hfd390zTxOPHj+n7NbUUYkr0fc/F+QXH/R37Y6Kahpc3LzlOidu7PTd3d4R+SxMcw3ig61qOQ+YwTFw8CoxphCru0dUEUobt5oKu7fjg6TcwphAayTr6D//hZzg7u+Dq8WucX225vn4htjpF6LnqcUtwAW8aXBdUfpCoJTMNA8lCcGJYayrUlBingWmUxOK2bbDWMU0nQo2znuDa5bOLKXEYjuz2O1nNNA1tKxhW27Z0GiMSlI3nvePx1RWzoW5WC6hpGpgmYd2J8awcXKHf8M7Hv49HTx5zcXG+kHJmnCCOR6ZaOez3HHZ3SPqzdN/rvqFrHOfbFdZ5NmdbLrbnpGmiTEndV6SLTjVrgyfSiClO5JTZH/bCLq1z4F3WXKxMzpMcrmSmcWKaBnLJeGNwYXYDzwyHe6Zhx8un71FLoW1UZlENrQs62RV8sLRt4OxszfZsw9nZlu3br3PWGjFIVrzZaET6bDMk0KeIn1MqxJyYpig5cTHLdJQyY63kaihJ1ozWetVbBXzb4ptGJrQ6C6UNe12jd31PLYVhHDkcjhz2t1zfveQbw8jt/R0fPH3B7jBxGCvOtjjf0nYSNOmD2GZZpzilsUxV0r8rcrgvjg5IYOXMsAQwpixFAaoKqeuHig8Y76nL+lCF1WplJs9TqVXa4jn/aca9HjL5HkIUtbLglIaZnKR0EAOzqruqRVMpYj0lTXn8rs75j3SRKqU+ECsaXXP0audzRtv3cDDc398zDAP39/ccDgcxWt3v5UmMOEPHOHF2fkbwQUD1UjTnqKjHmOx+p2nCK0EAWFaHtVZaxGJmXiV6LxdEjFE6dO+Vfnxi78n3UZaxeSZ4zNPZt7pASiniHlCEEGFUDV5L4XA86HQnN9k4zH58Fe+7RQ+WF+NPwRFKrozjSNO1tE2P9y19u8J7+e++37I9u2K1OqdSmKYB63Z0baBfrWjbQNNtwbTk7LB+xPkVTbuWgpuSTJXdilIKIfQ415KSMPumWDjsB9FpFVmH9L1YyozTtEgzUs4Y8tIdOu9p2g3pG0kotwbatuHZs2c0TYtzQpy5vpEpY0YAZpafREZYvAuCnSRLnN3vVS/nLWrxYsF6xkl8FgticpwrpFKZUhFHgurUg21mvRmOoxTY3qhnm2IJ4rQe1MHEsOp7zs7OcE5cucdxwJoizvp6c1d17Mi5YEPEWuj7htWq0/vALnHeAo6LK4T3Cl6rb6D3jTQcTjYCqy6wWbfkYCkhiRegMbJyqoVcCmPj9foOjOOIrelDq7NCCY6cMjHOTFXweOKQcLUQvHyv1omAtuTINGoseZzIbUvpOmqpjEgGmDHQtA7n1hizwjnwwbLqe/q1p2sbadTUQiTriGQUg7bOixFqjMSUdY0cGZU8EmMiFHWGSIk8RUwRYW5ogka3dDQhEKwlThLD40nUNLBey3u/21fKdGCsE+M4cNzds7u95e7mBXeHkTFanF/hfceUA00KdH1PZy3mgch6Xq+CUe2WUbsi0Tgu0SVir4FArDMhQjGiOWxOa9VsYaT/NW/wHpw9YPALZpY0rfzEGnx1dQciWM55Xl1LYZonvFcfJ9nC/Fq+W87eR7pIrVa9qrWFQg6oIj9yv9uxO+65vrlhp953IHvclTp51yogsLWSkikrvz1QlwkKIx0uyL7fGGEH/ezP/iwA4zjS971c/FHwsdVqxcX5JTFmmaqmiVpOwGKnGU77/V6wABUkz+vIWnll1/ytRG8xRurxyHa9Ief5tVk2qx4LvHj2lBgnjsdBnoeWGhz7/YDzElOeohAwplKZI9o26y2XF1e8/fYnOD+7wFsv2VqxcHs/CJPICIFhtblabvpqDNb1hKZycSl+cl3X0yioO04TTdsrdbdje/aIjOXmfs/d3R3DMXJ3d+T6+parS9G55ZSXi/ru7o5SE7aIY70xhia0TLs7nK28+eZbOG/Y7e54+fIl10+vmaaJ1XbD93/6+3n77bfIqTJNiRgLwzHK6jVmUiw6ZRVSjDS1EeuekilVQPu8uEQI5tOtVsRp4jhONCFwdt7LdZOB+mA9i8H6hvX2TIpW1vytGKn7KqLPtqXrWvquwRh49uIFq76jD55133G2XQOVKUpUy363Y4rCnrx6400+/hs+xdtvv83FxQXGmEWvMx8+py63LgbMIF/33nvf4Etf/jK3N7eMxyN923K+3tKFhuBk9WmcuHVXpYnPz19KXaIhHBIc6ULAmOaByHRmoRXB9cxJQDqL50uWNOGoK7/ZzqkNraxe21aLmqHvZRLte8WAp4GYK13byXXuJAjVKFuudQHbddr4CdHGN2ALNBsxIBYMWGzYizFQCnWYIEmYoHXie+iUgFOSTIbjOBIen/P4akPTtIzTSHcDjogpI62vBJdpGinIF0NmSo4pO01lGDgc99SXL/X1Brxv5P1WES/WqpTlVRPZE15twMr5RIVaZZop6srxkIlnncOr3gzq8jk8DP+0RorUqWH+5klq3ug8xKNKmR3blU2I5meZOWgRjDOENiwktnE4flfn/Ee6SPngabuGtmsI2uFNcaLUzHE8cnN7y+393eISPtsPiXBWPmSs2AOB7pRLUkadgMszjXYWA89F48WLFxgjrg5iIiuH2ewc0XYt3ou2ak7/NUZosqLpqItOClg+fOk8xS9tZvc9ZNyc1N2FaUqScBpOE1fbNExxYpqO3Nzc6kVU6PpApTCMB87aLSFYhiFqZzZRqqXkQhNa1utz1pszNpsLgg/sd3uO454Yhek3C4+NcVg7EdNEjYbWdsp+FCZkCAHrxdfLFYcPK2ESmYnQrlmtK9a2lGKJMbO73zMcR+qFdI1pjkFBdEXWoTdfXhhtznpiPLLdnuG9aGXEgPVGHQn2NMHx+NElGMthL2nLxzDh3cBwjEw2Yq1MqV4/e1l9CFCfVH+Tiuzeq3H40JKyEBL6lTiSlFJJUbBF+bygaeT6CppJdTweWeLXp1EMPY3IDyQWA6YxEVyktYZm1UtKs7VM00jXBJwx3O/u6PqOR1eXXF2ec3G+Zb3q5LVTsEZtu5wA/7JKDEr0ESbpfrfj+jpQcuR4uOPu+oaDc3AxUldrJj0MrRPn/1IrcZoEV1Nbp/V6Lb27tQQXCGEmSwgGNx+EtVY2K9EreudVaKrU+SyrrRQnSi7CSC2Zpmlp1IbMK4kl6M9NK7H04zhhnCEz4UslBEMw4gfYeE91geoaMWesFuzs52j0EJVsJee9HNbGQC6UYYAUl7WVoZxWV9ZAihQLvg041xGC52AKY/B0wdEFS06GrvWU2jFuM6EtDJPlMFamMcFYiKMI3zFyT/mmFVNs/YeNwhFz4vh8X82EB+ccNszFCKWQKxOvzgVKCok3r5IV5sL0gOOwYE4PNzuvyhFYVo3zWeS912nqVcq7MydMk/83eX8Wa12W3fWCv9msZu992q+JLyIyMzLttC/ptEGAhHBela7rgguXym9Y4gWBhXiyDLIwD5YlHuhNISR4wEgIIaS6ErLEYwESGASFhI2wTHHLTTrTNs6MbKL/vtPtvVczm3oYY861zonIzPC9cIsor9TJON85++xmrbnmGOM//uP/t5IIdF0vWpnW4j7kNO9HOkhdX79gGDr2+1tevCgSRJbz8wuatmFW48EYZ2KUgdKmkdmowj6yxtULfzjccTweKnVaGtpRq5tUA0qB+0p1Ns+z3JCKC+ecOewPTKobWNiC19fXEOHk5ETUk09OGMdRZHG08e69fI7CpFpP95f32TQNIWWZ7J8Dtmnw1omagPbSnIXLyzNOdieEMBPCzP72RnoAwwFyy7OXnvClL32Js7Mz2m5LvD1y2B/55V/+PF/44ut03YZPfuKTXFyc03YbWtsyTwNhmPBNVjFcJSRgsW4LWHKawTn2hwnnVKYlA4eJECYg4bstG2M5Pb/k6uaWlA3748D1iyt2/SlnZxdMc67zV++++y67kw02R5yVuabNZkOYN4QwMQwjp6dbLi8vaFvP+fk5r7/+FX7917/AFEY++9nPEgMY0zJPiZwdKagEFGJmB0aM+xTui3FSJ1mVoNFNfphmjuOVkGcwHMepykWlKPMzm82G7XZLp06zd/s75nnm8tFjtbwXU8jGLSMTFqoUl3GemBJ7VdPf7jb0W7Gx/8QnX5MNxhp833FycYpzhnGUNQeyeTXGVR+xGFOFsAsst9/f8eabX+fq6j32d7fEMGL9hnG44zZMtE0rwaFpJLsng7Ihc4xSm4VJ6e+iyzaPyKyiynfVUY+m4fzsVPQx+46uEwZe48X4MsdQe3C3tzccD3uBr9SYr8z1yIyXJG6paXj33RfsxyOhwOFGSCeNb2m6Fu8aCSrIZjorUjHNgWESNmJISRUyxIzRpkwDbBpP65wMRTce5/W5VSECYNP3bLdbmWeKkabtefLSKzx+/JTD8chxnHj3+RX9yS03+5HjmDlOhtOTkf3xwP5wkF7uzS3HceT2+poEtG0npA676N8VZfKidh5TovGe7UbcHrx3eCfzY75paXyj+11Tk6s1ojRNo6zrSs5LpLicq5Igr6uoshetKypb1cxLkCqBL4vpoa7vlCLHF4NYoljLPI0fap//SAepeRYyQgkeRTJonqc6QFiqkwX6iKRkcC7XkykXKdebIaUIJrM0CZd+UCmzy2zCUvpaXbiSccwhMM+qQq0T6NM0QZS/KYO65fkA1lnOOnvJOsdTqkBh6mXSrIrTxqjg58LIMTbjEU2/eUJgK6UexzCTGqcSKDrbYiTTmqfAsL9jjgfabstue07TbrDNlpggZ0tCXwtHTBCiwRtHyk0t78VsIYtdBkn+Fgn6mZntpqXbGHzXgd5ws+oWTvOknzNrtmuY5olN7gSKSRHfOpzxJCt6cLKfyUzObrfDGMPXvvZVrl48p9s0PHnymJQMlpYYDYYWaxqsbbDG432PQZxiY4wqsxWlB2RUZ82K5mCImaADsW3byhxZEIuInGXex7qGttuwURh6CpGMkG8a72hdxntRSzBlzeWsijmOlGA2GeaI9QE7BXzb0fQb+o3IeDlrSRaccUJWUB81Yw2mbYmz/Hs4DLVPOg6jUsiDnOthkpksvYfEO0lETUOY5b6wBmeEDl3VzZXhJf3R+72FmGKVFSt6eE3bVoO+pvMiotp2NG1TFdfDLIaGSRNCo3CX3GfFCUBguxikrxYC0s8chUWZ9B71TStak2bZB8SaXvqch2EQJuooCdwcE3GeRPE+w8Y3bLuOnXqVea1Knff0jQTfpmmIqSHmxX3BeSFX+N6T3Uj2RzaT4TQ2xLzH2ChBz43C+Gyl2px1NGCaZ+I4EfR+n+dQzQEf0rZTSszeQ6YGpNwU5XpLdtLPE682USAv+4otShAZYhWmjTq0u7zGN4L6am/cqIecVm5lvkq+LJWvnsTleQ4TUccFpmn6UPv8RzpIFaFX6jCaNPRfvHiOuTaM80xMgaaRgUPnneDkKnESUyZMgZgyxkijM8YgGy33G3vl+3U1VS7asnDyKjDGOmRayuKu6zDamxrHsf5deU5REthwPA4cDkdGVYgoKtlFMT2lhCm+OQYljmTYCNwzh1klZgLD8SDP4T1dW5xIRfBzOO65vDynaxqMkYHkdnvKqT/BNyf4Tvyqpjmz3w+ERCUaGOuYZoGOjG2IyYjCeYSYRAMvZWmMR6VYh2SZw4wxASYZDD0/P+ell57yjvbQ9vtbrq9fcLI7wzrZ2GKMDMeBx48v5RqPEw7HMY24jFaiAzfX12CSKITkxOXlBSHOTNPAG1//Kjlb+vaEptlhTaDxPd5BzpHb+YgMFifRNyMotJPULydjgq4zhCllcwbnmGMkDoM2sA2Wif3hyLvvPa/JhVQAWcYUTMblgPO29mW8F0dbHR2W/0+TmMsZrYxar0LHqpbiLNYZdWN1ZJ2HM0aqsValhAqxoShNOOfr/NLxeMRZz3a7Y/LFzE/YcXOMzFECQNRNiap2HitrtKobaO/Brvomzgv5omkbUVdvRT1ju9my6Xo22y3bTS8Cs1ZIJRnDZrPVfpG8buMbmpOGruurcZ73nqdPX2XMoeoFBt3oD0fxmru+uVOi1JG7/bscDkeddcoK8zUKnwktPUyBOE4cMLww4pwgsKmQYZy14q+lpJei4F6OonqzOxHn4K6XNbw7veTR44/RtltybphD4m7csx/uuLm55e233+Hm9pbr6xtu7u546+23maYZU5PkTDJl9kzUTUq146zD5CyjENNEVijT6qyYdw3GeTbbUy4fX2rAkUCR8mpeL8s4SFZ1+xKQ1sdDSSNJnHUvDEnFBqTFUfp5BUqlBEZ9vTV57JsdH+kgVSCAMlArN6mKbeYkGUjR3jKLarkxaHNR2DwpKzauFVQZdqyHkUK2nOBSmd2TjzFL9ZNzFsNCBKILc6jVV5mhKa60a8xXoBChoBeqb3nN9ytqSDN3mc/ShmkKktmkQIowjUMdPC7Beta+3eGwZ7vZ4JBM31rpW7SbHU13Qtvv8L4VV9x5IjujZAiPaxqpirLBek9KmXEOZLxqn0nfKCp1eQoBj1RMmRkbc3Xi3Wx7Oe9prhTveZ5obREKXlTgjWmYRrlG4zSyNUivJU8cjgMxTmBk8zw5PWE4HjgOdxz2d/TdjuNhT2wMjTc4GkKaSdEyDCJBg1FreZMwyhYkyyIxWrGJC1OmmFHNUewpcgabRAevrM+s8yBm1Q+wJJwRirezUgXLJm3VJj3pGhLhZCESSH+066T/Kv0JK8zDB3dFCRBFZX+ZGZrF7bdt6Lteq0AZYm6avur7FQp3UogwpETQe4wyw6Rf88rDrX65ksgUEVORNtqoO0DTNuy2I7vNlt0siEPft/RtK9YdxuLblnmaRWXcCMy92WzZbLb3ZhM3W0/yYNTcdJpmDsOR65sbUnrBdb5TV+HI7c2e29tbxmkSopBr6Dc9IEE1RZinyDQGXDbkmIGAdTNJlSC883TO4/3CfCtiveXce+/Znp5wcXnO+fkpl5cXnG12XF484fTknBSQ/uh85G644+r6GufEFqhtWza7nQyiT7OshZRU9VxKFO8EAu+6jsL2yykrRF2qnXI9hLlqvScbx0W+BNARCd07V0oTWYN9kVpas/qqNf0K+an6fhWFSnVejCz6qhnwyJoo1+3DDvLCRzxIFYXfcoLXlO0C/yRkpqFkPTFGtYDXJ9FFIJi9UJsXSRAQAKTI3lMvmOhnOelZqF1Bkf4vcJvM5SnMGCCHLFbLmCrTb1gakWImKMGpU8ZfTgnnHWEWWRjnvfTKQmCaj0tW7K1S3kVg0nlLk73QSo1BZq3kPc7zhLMiDTQO4jycEWaRzGAI3CQsXmFUbbY7cDJzcnd3IKY9XdvL/o0sboEbQ00Y0GazKCGAmlTjNKgNw0BMgbbzbLc9dzdS9RyPe6bxCFjGaSbOYlExHg9YI8377A1uGiFPpDiSmBUbz4R5lDm4JP45bd/z/OqKJ49ENb5rO0xehq9DlmFTg1ccSwZH0xxIs6heZ9VP8yudNYwou5eLbo0laQKxZkfBfQ+jIu+UdXhYvMLF3sLaJRga58UypJPqRLQE21pJNW1D7yVQNW1L33c0TVsr7ir1pEoMhS1ajAsBxnEQxYl54ni8I8XEtmuF3BNUNX0Wp+gYo8CDQQaRY4h41TGsn9VIRRJTqr3QqJXX4XjUDTTVe7fxnl7fW9+1dF0r50nnaZwrgdZL8PJeVN59Q9u07E52NNtOJKlcEVKFGGQo+vHFJWcnpwzTzKNHTxiOR25ub7m5veN4FLbqeDxoEpoI04Qxln57grWNoAFq3ZGhshEPU6iwmTGOCCoOMAETz/dH3ru+leDctSKD1W7Ydhv6tqPvN9jeC+lB95Pdbkc2sDs5FQhyDgzTyBQCh8OBYRgVEpw4DgeG8SjnxHnl8RV4TyDRVFEdGTC+uTvw9ltvYazh5GQnjNLNBt967dNrK0EJXmVEQhIXW9eOrb2xwuxDSVs9263OimS1BTFKqZcUmqCFQNl7P8zxkQ5SQGV/WVPEG7UG0huUwvFfn6qMWEXkTPVdyTIE54yj2AWUQy5ead5CkeuXky3U75gkA811hidjrUzby3UxOs8kgWc9L2CyemFlCahZ2WVt48i5ZCrCNiuBz5ARGxDB8G12pLTK1i04L1h0Ke9L81wgScmQQk5C23Ue3/R03QaclyxYn6drRF7f+o55jsRpIsREY5P6B+m0fBJfI1m0QkrIOYJxWNsxTaPQ+WMmG90Q9DW2fcv+OpFCIIdImI80jQx72jTSmESaRpEwUKXqmEaIg27souknigeGOMvN4HyDbTveefeay0dS9bnGk4IMmVpjcU7OrzVZqPRGPK8SSk7RNeAyGJfVhVWCTJ1xM46M0WoM6YVYswp6EfEmUNYiDd5aZiuKIimL0oaJMsXvjFqk26WJ7b3Qsb1vlPHV0fTigVWg4mLKWYOUusP2vQxkF8PDEMR40g8ttmmYxpG+6xiHgbOTE6yVzTiGmVlVM+YwMzYt47ior1hbSEiu9jlSFHLFpOiCDIU6wiS9qnmS5wyqeF4IFtvtVqWjhCbfNH4lFrtsjEVto2tbzsZz+mFTK5jyZYwQsLu2oW08fd+z3W64ubnBOSMKF3FmnITBKe9brHWs66Dx4HqRjzciZEupVpAfhxCwiJ5nUlg76vme58g4iqLMjTNK0bf0rWfb95yenbI7P6PtNzRtowkK9F2Ls5FHjx4xDAPbGDmMR5rW4/d7QVhy0LGTwJwStu2wxmEtZGMrTCqcRE24UmQeR66OR5quYx4Hzs7PMRj63AtlvJBjjMF4h22KD16u513gRYvJS49MEBXRvSx0ebCqJhNV1ScQc8JkW5XY6boPtcd/5IMUcA+Zu/fjJBv4+4fGDGJ9nrTUla9yISQwrKK8EWvodZAS6Gm5ULLItcnOUg5750iVwSUeV4sT5n2yRPlelC18rfxm1ecrGK5zjt45rGaV0puTYTzBehFsOSfmOdUqrbgDO2U/eZ1cFxWEHduTR1w8eYZrT8F2ZONkkl8tLNIURbMtSgYpbKqlASsImJHKLKkCdZbqrm5eFpyFUN2JJ7yzbDcdfdswHmf2+zuOhzucFZJCzgFnM8f9LbYRFmPKMwwDKR2lcjQGY0XctKgxFBaU0arn+uoKS4O7aGmcsELJFmcbunYjQ7pzouk62taRjKORd6+kgYizBTIWCrxOetdNVKrfTMxKRMgls13WinWSZBhbmtSl/6mVdZZACdReUpEhuru7q3i+KG4bnEM9oVrd2KUyKXAwxnB+fsbl5SNp6je+NrWNtZycnUkSkmE4Hnj8+DF915KiBIucYq2AglZJ5Z4SSv0CL1orm1OBfcrs3zRN3N7eVrRgf3fL8XjH4XAQAsc0sR8G0uFQG+ol4HYpV1gr5VRHIJxzHMaBtvGa7CxK6LVf44SYkI2THpFznPQ95tEl265hHAuTU/rIc4jM2ck9nyKWRp5br5u3XkYFoiPotRe439I2LdlLeGib4lUlFkE5J2KOjIq6TPPEi9tbnY+Sih49jykLJI8RtXfb6OzlxYWcSx1rESWSidura/K8yLWlJAQggxMauDfk7Gicl/eoVPOivOOco1H9R+uFibnb7ZYErFZRsh8V8ozAyOI6bnWeyzuBuMt9Yp04UkivMZN0/wN+Z8xJiZdBEZUFPfv6lQQMzyAS9EZ/JRtDVi8jcoFg1J3XLZTq9ZHt6nVMIUQsTceUVINOqU/SUC0DeEimbxzF02gdpAruC0KiEBFTkdYp1PQSaAoV3ViLUYjD2gJ1JsWYU92o1wG6ZLXWiudNsRXvtYLabU84Oz3F92fE7LUvIZlmSlEZemDVmdUodJkU5iGLekBG50+MwRTYEG3MZuSca5ZubaL1jm3f0TaWw+3IONwxT0fC3BKiPNZZwzyPNMbhnRWx2ZwqAw3naJytQp1yjWWNWCsbyN3dHbv+hBgCm3bL3XBHCIm+27I52zEMUV9LeiPZmaocATL46YyqRqegUjZWoA308+dqtCrMwJSxTkYLrCqDGJf13JV+UlERAeMkqBgLJGWjxsXQsEBnMYq7bdtanF3Yn06p3yVoFUv5eYqQHX3f0282yla09JuW7eaETd9jDPSbLZePH7Ppeyn8sgBdegll4zVGeg7AcThiWMYjvBfrdLIEsxIADvsDL168YBgGjscjt7fX3N1e8+LqihfPn3MYJqZZ5JbmaZYkCAkuKVsN6Hr7kQgRMhMxJjpnMFUo1db3siYcGefYtj29cyTvoW3xecfkG+Y5MM8Tkw3EBuYAw5QIJGEBZ7k24l+XiUZaCd42lc7vvPaLdRsS0d1ImGZZwzmRMSJzFWTI33hf11eRRnLeoxITlYDS+1bIB8a8L/gfj0fG/UEq8RixauRIgmwKyuTAic5g17aMOk86Hg4Uk8xGLUa6TU+XZbykSGuFVd/RWotFku+yXwm7NQgEru0SqeycKpo4rLNki8gjmYWo8WGOj3iQKsfCrlv/TLIrS4x5+dmqwQssC2vVc3rYis7158tzl0pqmtyCzar6s7OWrMwg7z3JG5KVeRyxzr7f33o4KLduRpavtSRSCKGyr0RWZ8GLjaFK7pSbtZA8mmYizLFm/aIRiGaTB0J6j0gD/oqYvVSPGWU8Oqxt8G1D121kLmQ41qAv1SaSGGAgS8kv5y+Rs7iC2ghznklJ/HksAXLAmEjfeZzNhPmoX61UUiniTeIwHAGP2wibz+dZq8WJYGAOls77miTknJinmSnMtE3D4faO66trvBVNwq5r8DYirbxZ2HQ5ktNEzBmbLVb7VkKeSWrRoY1hI6oJwrKXHiTZYJOtgrVZOL4CvepicpSZl1wrL5S8E+ZImmdmIwoOVqm8tlHvpKxwDKKDFtIkXkchkPMi+ir9G1cTmneeX/G1N96qfmtF2cR5cRBofUPjHSHMbPpOxHWdwyphQ2YKhdBQzoe1ju12UxlmZYbPKyRknVN1ElmXIYPxLf3O4buO7ekZJxePOX/0VHyXVLZsGIaanIn5o69ruVjXlHvBdz29RUR4V5+76zq1zehFHstbdtseZx1PLy8qhB9jgb+jKqc4pjlzfXck4sVeI0rmYZUEErUKds4xK2nCVp+nRdlDpKEmWZ9lvGKaSHOQvtI4LoSUlIlByApGK8WmaeV+6zu6rqPxotawsEXlvX/3d30XhMTxeOT69pbbmz3vvbji5mbP3f7AcRiIQaRq27ZlVpJH2R8NhhRFiHecJ4zqERZiRoFSC8LTarCr0GvTYq0XdmwWz7EYRuZpxLjC+szMMRCS9DONMb8z5qTKzMQSnATGK0cJQGWyuY5MZl1tuYghpntB6AOZJ1qkFcaM0xmEMrsEKBtIHiu+RE4HGw0paiW1ClLltUqQWk9xV+joQSVUB+lSkjJb8d+CAwvF3lZPHyiBWnyUnI36HEulFYvNtxm5cdfYdiYbwclz0moqgfMt291Wqc9e4UPdNI2oElD6MFnnlxBtuBBmgftMxkQJTEXdG8T7qGsdjcsMw4F5OhDmFhm2haaBdDeQfati2SPZRoxZqkeyVdVtmVmLK8WKrpGG/N3dDV3bkVOg7xomZDA4pxnyLJqIYRIZHjxeSS4g1uI5ZXIMGpQsZKeVg1RwJmsvNCWZ6coy62XIohSuRadAvrKlSQ9BKquUYt1EgjUKzxkaq2r0Zkle5nnGhkTMmRDnKkJcyT+2VPQWdxy5vt1rtbfYwhiogattxOLFItV5occ3jadrJct3jQzIGgNN0/L48SOpAnQwt3i1FUt6731ttJcNzzUNbdtj2x58S8hikRGNx/gO3F5INTFqc9VhmwbXFksSrSjnGWyDsQmj9rXyucXN2PuGRlUruqah9W3t6/VdT9939+73lCBmOAwTJ7dHxiCJR4wiM2RJ2hO1CrP7SgxZU7PL/VXo2MM4EmZxX7jd34me5vEoCudKkIirQOW8wHRyHhta59m0nZopCoohbM1A3/c8e+kl4jxze3vH2++8w9vte7Win6aZw36v83MF/tW9xxbkQeS5iFEVLqhD4LUXqlVp3/fkqJqWCu+2bV/h2KIpCTJTl4lqbpqJOTOFsQapMP8OEJhlBZjc/9nyvVGqcL1JjAQLawSmynlZYJB0YHBxHqV8ZxdYzljo6O4N19b5GZOliWyKgKa+J92gKk4N7wtE5eYrOL0xpuL5RcgWBAuOKTHHJHpcpaSuWmmlepE+h1dK8Jo0UbTXDIt7aTxM5NsD+JZsPFiPdw2tFygi5cTVi4Hnz98FqyK7RqEJKyW9lCVWMytPVXKIQRvKMykNeBs0OETmcCSGgbYx9J1jnhJhHgjTUZ7HOLwT5mBOhRQUIAW9ftrzyolxGPFOssMYEyHNTLMMsPZtR86iGTYc93zbp76d05MzYki8ePGCszPRyEuapS+waRmAhGwMzigjzwBp1opJhXuz8iO8wxi9vXLWxEQCSCLLKJ5uNpDJWtUqHiprJWVmhc2maV6g3nUFbgzGtbS2oe2WTWIND84xy1hATiuK8lLNuyxJSGKBkrMVcdwIpFmew5oZ00QMg/ZwDTeHQTNyVzfXEhiXTVt+vx5Kd36RSyo9t7lYuhsPriUjA9UhJ+YcCNnSJFOHpgOWKRmOUQSXa9ZPIo6BOU9MydCMgb5xbDdCKHHHga4b6vmsmnja+J+DED9EomkS5ZjhSAxSYUuOK58x6Z7gC9yplWTbtnSNpW+3nJ7syFnEkecYFa4LHPZ3DMPAYThyPA6M0yKAG2PkeDgw+0ZGEJKskWZFovHGkkLkvXffFf3DIHqj52enpCSOzm0jrM9hGDkOM8MwModYk52qKrEKXBTCyyopLj5kMlcnli5l7zseR/q+Fyks3+C9JC2oCWcZFE5IlWXud1K+5fERD1LlWMN9qyClFOo1bFbYJ/LvLMOJueCkZQaqcgSXp8qrIFVZx2vDL9mksqprl98XN1+gNsNZVU8lSK0hyKJgXWCIsqmsN56YsgapSEr34T5BWNSwDENymTqEa4plgfZLjGRTYY4M4ciYMwELtsE1Hdt+R95s8Snhkty0x2HANyJtY12jlWUkZSc9K20oW2t07kLeu/OOaRxI84hvoe0sIcAcZ2KYpJJqLJZImgdiFNFWkS9zmBx0mBTIIltkcxRNP712NkNOQstNCbFyn2ZimPG+IcyBeZqYxoFHlxc8ffqUeY4Mw56+32IMQvUNMyGojYPq1AnpxeDaRteKULSp8J3BW1Pjl9Wqsg5K5mLtu/j6AJgs7FNp0CtRI2dyFuZk0OoIQ02Mcs6yISoDy2njGiPKKzEIdTxHCClIkpUM4xS0f6ACpUZSspASKUe63lNlbkzCIq62xZY4R+kDCfsvcbM/UOA8o5mYZSEhmZq2oyw/mdFxSvopm+4SeCEZR7KiBzfrLIQHjAOSsi9zIuIY5qgeWkV5BXy2zCbRmEiwkRZLyJloJ3yQxzWzjKV45+tgbGutjn5ATBIg5zAyTiPHYU8Y1aRQL551y+fzTcOm79lsN5i2w7Yi0NtoBWqsDL3inCQfc2DY7xlGqa6urq4FmjseOQwjh+ORKSaaRqWajDA+TdeppUyqg/372zsyIihrjVUdSTnpAgvLAHdMB8ZR1VzcfU2+kjwUJGS975SeVFXuMYZ5lD3Ke0/O8vi26TAbo/CfJP0pC5Q4hYmEtA5sRX4+3PH/J0HqWx8Py/GlJ6XDlxrQCkvuXpAyZTxzqaRK0ChDb7K1CCyUFEZZXIAjMYJBM1hz35MFqP9l9XdFKeAhuaLIkbRto0F4CWg1My+VVLYYM2lwbjSA5AoJOeeFKEAm2UWI0rqGpt3QdWJPkEBttwfGQWzRnz8XpQNTAr+3mMZgbYNzLc42GCNwj/OWhoYwzTBNNAbaxpBjZJ5GpvFIt9vROBXlTDNxHmRI1idhMqpvTgwjOc5CpLCZxjck7HK+YxKaNgIpJO0hOZtpfaPB2dC2nidPHnF+esHjRxd459X7Sv5mnmfpac1SyQ5hEqsQI9nncBxlMDRphZwzIWbmWEgqqsyg60H+T9ZJSKmmVNaUTUICSUoCo2asqssvPcq6mYAywdA1kSFFXYFGquDGiEeRMgGlStLh8kJEyOKWmnJmTuBTxhWypuK9pt4LiVkVWrxzQiSxToRZEZhZEATRMYxJxiRiHbrTe2wOlTCwvi8f3qcZC0424jEkxjBgzCheU9onSarGQBbo1MSItRkzBTADxtxhgNZmtt1ihlj+XmBKCZqtybTOkK1njhBylhkxTWpSmHSAOdd+Tqm6rbHcuEWQt1VvK7Q/LZ51G9rNBuc8GUOjcKpF9Dy7rleySWZ/PBBCUqasJqdz4Bgih7t97dfJuZJ5QCFIWLLC/n3fc34uWpLDOHFxIR5aUxR05ng8Moyj9NWS0sKNrevtYauh7ldKiS5M4WkK3N7e0radKIlsNnTtRuWkhC3oWy+OE7OopDjnSP7DBaqPdJAqYF9d/+vvM0J3zKbO/ADaoF4CQ4EAY4wYhGUjt2i6V0u5VYFm3RKkQBvbVkFCzYpz3TykIS4bmWC0eQUjQekZxXrjlOxlGIaleWzMvezDWovxXjdHfc6UkDkwUZ6QprBV9pWnbY30x5K4lIqES0tjOqzNhFkYQkWRue0a2lYw8GJbkfIsTdB5YDzuwboK9RhvMcmqJt6ssv9O1KxNK3AZoteQlGmZkOeNYaJxJzTOyGxZmEhx0mtscYhLLllUxou9g1cNQmsgBEcYhR0WY9ZNXG6sYRj1HHg1tJNzfrLb8fjJJSenGxFNzRBDWql9TxyHI+MwMka5yaNKAx3aVvT9wmKzMs4BOwdiEKJAzMoOMwJvxZgIOWONZNSiCK29J7esAyFmmPdt3mVOxVVZLmmIlzaq0Who0OrKQDIJ76Qf03ihJsv0v0KZau6JM8Rk1B5dqkNxptWeZYakMPlc8zohCxSJIe+duNMmlR1LEINAjc45DFaVLGZk1hCF4Bd4sEgLiWOAyjQlrQxzJuJoGoPxlhQzMStLNylUyn19uZwzHulBukKj1sSg8YWy72mMuCCL7mJPxDBH0TAsun45ZVLQhDEW+aCw2tANJcE1OheXgWxEAXyz3cn9oOaXjfMi4utEFNZYsbnwXcuk1UqYJsZhEJm3uPjRFfZd23rRsnQO6xqcayAjjuX9Bms9mzmwnRMhCgFpfzhohWcxw8A0y71ZPkXVCGUJUCUpl37sQjgJIcl+0cxVpUTmMMG4TtsFFpuTQN12CYQf5vhIBymX63gsWYOPWQ0+CQM9kQNkKwNoOFQ/D8kGTF5mpayVYV4iWR6or5Slz0AJbtRekVRJWr3YWTNmR4piO+5oKjynMeleFfWwIlvfqKWcL5vTuv8lTchQ3pF8GV1m2hdzjSchdhbONovcjVFIJRnSFJiMZvBGmFO+abWvBsYEspXXcc6w3XVsT8QPq9tsqhFbpT45Ly7DxmHs0pOa5pFIIoWINxCyqImnOJBzwNrMOBywOdM3LTFMTMMdTdMqoWGmcZFpCkQSUY0QUxTbA5MyOcY6o5bijMlRqwGPd6qbiOPs4oyu67i5vuL1178MJHYnG+ZhxITMtulpddONrSdsGqY4EZQoMgeBgo7DRIyZMcxM08xxmBgGtQIZRpXjgTkamkbETWNIJJOZc1GQtnVoVZiYVjbFINblSQcxYyyyXxFiIoQRYyU7zyo3VZQgrKouGNANwROTJU4JaKTSyiXoSUJmbFRnaV+DizHqs6b8JIMYDUZllVpjGIYBssFj8EZcd01WSxMnLMdoAdNA00p/OIt2IcQKEeaMZH/WMiUhQjQYnAbrlC0xSy+WAEK3yYxTIMVR4VJTE9dCmpIGvoj+Xh/2S4AyhtZLH6lrpdcbY9RzqLNt2sdNCoWaDNj7LYOcUVbfA5TGSEA22l+0BqbDyO3dgUY3aNe2AgM6K2rw6s1ljGFf5sUyZHVieOjjVL4fvAFfEnTtCRsPqu5f/J2st6Q00XYd1jl2ux0nu52KOkvFeJxGQk7VafphklQgXJOXirf2ulNgGI/EFDgOR+6OB/quo9/IwHIG2r5Tx2f/oXtTH+kglU3ZnqUXlPP6Z+VBD4JCymplTGU5Jc3oyoVIFbgzKHVL8qGSrrKQHBaB2aU6i9rjIUVMdjKzkE3ta32jr2+ki1UzaLcopqcQRTVa37cEpkWypMiYpCzsG+e8YuHKeDMoAyiRCORk63tMGVrrFR60hCzuqta2tF2rKtyiXo6R8yQLTma3pAIQHxyDwAHTNMGc8dbgsRiCKguE2s+ZCl5uxetKMm/5LCmJ9EuKQfXi5PWyEj9iysQgChEZVPlCYCbnPdZGppDYGMNuJyZ1d3d73nnnbc7OTtjuOtFbnBOm2VYvpNY2ZNuTlUUYgzgYxwy7cWaOkXEOjNNEdxw4HkdaL2SCY5ahXo8RvUNlRM5hVshWVEHaxlU7eecdObUSoIq9RtA+2iQqCSVB6roN3opahZwDhRiJS5/KGAxWpb+0zxBlNgYNAI0y+6zNCvOJSkBpcBaWINqP8F1be5u1ishiuSFK8wtyYZWqnTEqvePIBpzxWIWkkyaZgkTIXwpEaGp/LihRKCSR17EpMs6DikLPNfBYI68uqh2FOi+L/XCcOB4O0pPyjs57ui7Sqgr8qOe4OG0n3S/gPjxolBghBAanihjlngUq9Kliwkag0/2w53B7i3dWhqQx4Iq1SFF9kVmjYRzE/Tdnclz1rWVzWHqK1sqAO0FZiJJ0ixN4R9fKDKRvZR8qg9AFMt1utwSVXbq+viZbw1GHhMdxrCSNguRYTeStWWDnQqpIKdU5OGMtvtnT9xu244a262Rur/V4I2hAzMt++s2Oj3aQ0q9SYecHv4MlQK0Vd+9TvNM9JeCoN7k8h1QlBpHMWR/GmMq6k39DHXpMmvGmTHJJYAu7DL+tKyrpc8l/U4p1pkIEK0X/btG+y5q1yes1bVOzvKUJWmync81AUxIR1mkKzFPpqZSh04wzAhH4pmd3ssU2rajBGMlse9X0s0Xw1dkKVcl5F6puzgliqe5mJKNzei7Ejt00DmPls4YwktNMY6XaEx1BV+njIQTxq7IB50Jt6I7jqPJA0kM6HEbtCxj1ExL7hJh02DgIvHiy23F6fsHu5JR+u2EKga99/U1ubm/5tS/8GmEK9L7j0dkjGqt+SL1AKd1GdOXapsM5j208NhlSmjBqZd5myaCt89jGsTnZCk0/yiYs5oOOebY0UdZQGdwukkZin7JYv/hClGDpOxZFdenVGKmSNACVXuYaFsoVXHC1yogx1d9bazDOENJMDkqfLIvUGa0InMzGzZEcF3ixFRl5+XdUYWdNDlbtC4xzxFmB9DLbkMu9I6r6xkrSUYILWcBhYc95rGvpjFSXUeHEpu3oXP++folspgUeFcmwNmWMk3smp0Q0EI0nYAkpMcyJ4zCrUr/VQXZVWdHz5JuGtutoZzH27LqOXgVqrcnSjzMJkwIwK107YfQ1/Uacs70xFFdgEOp7DIE5yDkUyFoqzbxsZlXvMyVBd0SUWJJRAftL0uhq75N5Zk6JbF2FpUs/qexD3nt2ux2+bejjhm3f694m83hJFeZFzFtIMCWYr4W218E0R5E+OyLO3M47Uo40eu/G8DuCgo6SpQrMpd8bbexBpd4alMdvEN1TDVKl81QEM1NKoHNM2ZQ6rSDLq5e1hjBLxumsSNKLx42khDFkUG8ig3gjLUwaudFE66xsICVIJUIM9bMpLimwpYRLxXpRVXHESTSVxbIowssDvTD5sriYTmNAKPgCw6WUZQ7FoRDeFuMamZ3Sisg3jQxEWlGoyNrMBV3kuoGiVdhStUZANk2TJcszrsHa0gie5RN5oRzP4Yi3ImMkuniysROEsiveQAK1Nk2L8ZKVTyr31DYNWIczAmvmOGulJ5uAa0Qod3tygm9a5mnk7u6WN958g5QjzjhOd2c8udjjrKftWrabjqYX64WL8zNOTgybjadrPNllbGNwNpFtFAEdI8On1ns6Zf+lmCvFep4dzmaaILBT4x1t49i2jr6T3oT0ZBytqpV3fbdSQsk1SO0PB273gajKFDInJfJX0yQiu9M4yfU3aLIkgNg0Tzik/5bF7AebAnFWD6kk199iMcmQjTAE8YYcpdLx3tNp5VDUTnJQaDyLDJb0BA02e62YslZ8UkULjCy9UdngHU6FcCVOKvxtPN4JCWFSdfSYkihKtM2yWcakSaXOh1nt4RmP8S1+FmPQaRzJBiIWky0By5wNxyBOCt4ZYoJRPbkkYTJ4H2nnxGZj8E3G+A6fpFKzzqq0pNEerlRoOQhM13pP320kqCPqJWT03i1wXtJh8YXdWfYrq1WckGR070sZkwXSTVmknJIOIKccRbsvG2xM4CSwrM0M1yiOOCA3cp1OTipaVMZfhmFQGDASw/t7Y+VYev6iCCMi3GgfKqvsWHOvcPhmx0c6SBULjmUuJN7/4HZhqShVYPmVlD4iRWMsJi/YavHwKY6sBd9fHyYbhcNUoVkbzWRUv046y86XqfsFDlxqwJoi6evJa+acZeYYsH7VTF6V3ialKuUvcISEUmOEHFEgv4ycoyA6MlrR6cCvFXae9y1t29O2G05Oz7Be5IiSQj0FyhNNw3ImnNxIoPNEGmjL+dbMUeiy4uSaUyTNURQS0kCYA9ZEZoya/XnmIOrXRbrHGEsMiTFP+LbRcygbbQLmlIVeHMVyoPFeehuqSB5TxDvLd3znd7Ddbjk/O+Xs8kKyfmPqY0V9G6aUee/2TgK5NqWds3R9y2bzXFVElPqt2b61Yl4oW49u1kmHeBV2a1V2JoZI7FtsChQYqVipON3c4jwxD5nJZUZ9LaFdZ4EDsxA3jHW0VmaarHHQy+2cUiLMgWneSUCLMjMjrs+TrhmB32IUh9Y5igNxMferosGoCLMiDqEy3IL2fY3Q+msfTYwbYwgMcyCHoMlOwpiEdw1968k4YvCqZiLnKCOEGHScIudSeQn5gyidp5gWUeYQgogkm+VeF1blLIGjVFTe1r6pbTpaqx5zIJp8rmHnW5puK6Z8xop00CjB/ng46hozTCHBOGGmmZggRmFaFgKEdUnREQmahUgyzYFhnGXGyZZ5Mq9VmFOlfYP1MsNYZi+LSHBBi4wz9XfRWiYduJfZB4/1Vqsv0RyV3S/JEHxKdY9cs51LkGmVhl5g0pTFdijEwDQKHDpOE+O4zG6Wuc51JVUG2CGrlmUiZctRFUVk1jN8uH3+Qz3qv9Oj6xpCTPcgMoF4wDqH84aiWJ71hpKgIzp7yxyH4uAK8xV8WbrFEkjMgzAlxnL3KZTOyiZqMRgvbVybpTQuG0NRxCivIUFrcQ8tXlaxlM1qBCeuoK7OxeQYYRoRXUIt8s3S1C3CmsY2HIeBeRpJCe3zyMxGsZZu24622+B9T7/Z4hthNiWtNGOOijwWlWd5/6lUoyVAafWTtTwU+xIdtMwJZxJpHpjNRM6TTKQnwxgDzkacbwnhSEqZ7e5E6OoY1Rob2GqPyhX7buNIRCKGkDIhiSeWdaqI7pTxaC2f+OQnaduW3XZD03hurq9wTYsJkWytfOaYmSLcHG+FIcUyd1ZgsqSbY86Z7UZkd7pWoMAiQYVREeC2FQv2rmXTd3inoq45Y6JULA8z2kVQeMQ5GOx6hm7ZTHLO9P2GvtthrWyOzjs14JPKJpamfxIttrZpef7iBTlndtstu5MdIURePH/OMI74xnFxeSmwqvqBpSxEkTlMMoB6vGMahb4cU6TxUqnf3t0y6sC2c5aQDcEEgho3phRIweI3O9pOgm4wMJNUbUGa9CkIAwwLDiubW0xSRaPQoUJ+jXXi9Bq1X6TGj0mV1mOImJzl3DSepu80ObX41ilCoqIW3ohl/HZX78uiuoCxzCEShkGQEzTpA4ydSFlmv/qup+1kTss7lAkoAT3qXOJkAtYGhXalYmtbq6w8+Wyupco1ZaTf+nBkpTgph5yZJpntLGMAZR5S9jpbZbtKglECSemxlUSprF+38iEra63A7MMwME7i3TZNE8Mw1D5egf3KLJVBts+UpXKOSVizVlUtwvx/gDPv3/gbf4Of/Mmf5Md+7Mf4O3/n7wAwDAN//s//eX7mZ36GcRz5gR/4Af7e3/t7PHv2rP7d66+/zo/8yI/wb/7Nv+Hk5IQf/uEf5qd+6qfUiOvDH0FvJOsdjgxWKgyQagargUIb/IV0UOLNeg6gHNbaCveZdRX14KEf9LdlVrM+l1Lgl8WVP/jvanUlf2+sodFNx+ibyORldqpsQO9TeC/sIlv7CGjgattO+k5eqr/Gd5ShTWOtzm6IlTQhkVTtOQExWzmvlUYvi7w0vHMJaLnM60ivzySR6idHTI4YW3p7kjFm42rvIkahEPu2gyhwwnAUSEbHYHQDj0zTDGYgGcMQZqZxxGSxfBimmbvDEZMzu92Ol58+5ZVXX+a1T35ShjO1KWzUTLHpO7YGwhQY5llchV1DdF6g1Zy12lZ1DoP26+A4J8ZwoPUTXdvSNI6slGxnLF0jEkGdd2x7mTcjy4Bs4zTwIUFtTZopzqvGhko8qImHrglnNVuOUoU6m1SVqmTgQn2X/2Ua09C6zKaR9dC3jt4bjG9wl6eEsMF5URHptxv1bdLhThQ2j+J8HWOsqvzvvvtuVTaf5kkhPrGfn0PgOEglMk4zISWcbfQzqE+Twt0JMSyc5qBzd1bXUiLMEggohCDnsUZVtoGghAUR7RXYH2dp9J53zmNUz8+QiUHHOXSuzGgiWnzlxKxRPnfpO52dnrHbiiKJd2L9YYwMqmZFTNqmCPoavM1azQvkmLzYlTjnKUh8IjOnTJojTbMweOU+VLX5MgZQmLtlz1gJ7uY8631olcGK9tL1nKQi1XR/v1gnRnUf0sRkMRk19XclsKUMG8w9qaTCBqx9UMEcpRIL4rknwIWMq2Qgx//GxIlf+IVf4O///b/P7/k9v+fez//cn/tz/LN/9s/4J//kn3B+fs6f+TN/hj/6R/8o//7f/3tANpof/MEf5OWXX+bnfu7neOONN/iTf/JP0jQNf/2v//Xf1nvIKttvrdCjjSkMtUUPLZusUvXas1IV3mRUry9b1Zgq/SJb1YOLcoBkBA/4knpz3TtsCShasWkWsZZB0g7Og6cqAUpnC5Sxs3bCDHNgGAeGYVho6U2jsa0EVZ03UahKGDYNYY5kZyXz7jd411ZRyDKTFbJRBQWFDota/BpmAGl4l7NyL3rbFYK51J0mS5acUpAN3xnQc++MJWdX57kwojiRnTSQx3EkpqSN1gayWpeEQEgykT8n6eE1ztMYIWXs97fM08T25IyXX/kY3/Xdn+GVj32cq+sXXD1/wTjLfBdkrPN0vWXYXzPNAgG6vkFMP2wdaCWlSruWnocMCsd5ErWCcZZN03qBlAy0ztN6T+MsYz/RNY1oC6pdiVU6c2E0OmerO3PXNaQ8yBC00tOrgKsXk7phGJnvDpiEZtLL0Gw1ncwiimtSgGjplXbdNo5Wvao6fyKB0oklxOWjR+xOTqSHUGZa9HMXH6lSaXzxi1+sChZLsBorXHg4Dlzf3HK333McBu1LylBx4zucl37SHMQUcZrmChnPaSbHCeKkn8uAkwAmDr+eEBOj6vaVe9BmI/uBcxVZyNbReod3jui9nBslDqWoc2L1ppVvrSYbfSuzPoXh1rpFy+7u7o67uzthzTmxw3DO0lidl0wQnaAMMjjvZf0GIWglfYx4rEGrYychi8hHVpWT9T1Xhm5r4DFZxi20N5G1J2j0vyVul8nvdeApwWfdJslKfFmSoeV71DnBeV8rp+12e8+SZRxHYggCW6sQrkCuOk+poswftij53xSk7u7u+ON//I/zD/7BP+Cv/tW/Wn9+fX3NP/yH/5B//I//MX/oD/0hAP7RP/pHfNd3fRf/4T/8B773e7+Xf/kv/yW/+qu/yr/6V/+KZ8+e8Xt/7+/lr/yVv8JP/MRP8Bf/4l+kbdsP/T7GMNfJdyFWKRSSFnaSZBVyUdZKE6DZQVYbD/2Z2LCrgkR96P2/Az646ZdNzbaN9mfq3FZ5yMMA9QGVUMyJOM3VV2c9f7HdbilwzqhuvWUBZ21WR2R4FNTG3oixX8oix5KL1pxaiGCdCJiq8nVMUXtNot+WcmEoxXuMpFzvafXtSkJBRiWATA6YHEhxIoeJSCZ5sE6azMmaOk1f2GrzPApMOIm6Q3Fbld6JSPJ4L5t1mmYMht5tKgRkUub84pLddsvLL7/M6ekZMWbafsN2njkcjrjDXqw/xpF5ltm2aZZBRFqLb1pCFB0+gYr12ibAldkXyxzHCkMlpOKShrfaWzjtjzhHjpGjkca6d7KJisOsrww0gWsn7P4ogayJWLsMVq4hmGqZECMuL5C0MdJ3NIpTGsBaz93tLYXl6lypZEzt/RiVwzHGcH5+Tr+VyqppG5quXSjXOnRcGLG7TUdKbbUjD0Ho+HOcSQm6toWcSHFmHkemLLI4XdOy3e7Y7rY434gsU8yEanthmeeJcTwyHEftD81M8yzDvRoEwySvUzZoYQ2KE4G3i9cazjONA2PW8ZIUl9lHJTJYazHOaD9I17BZs28ThiS6hmFiGBKNd1ycnwKFoq17TVAaeypaiojxqc5CeW8Uri4JqvTaxmnWfcJoJWv5gJ1GerjWCuyfEgv5+H6lBEVYQO4NGRZefl81PLVvWOavpmnG1pGQBWYW9rOiJyvSRNd19+xRQgiEaSSt2JHCRJb+FNYQQ/8Bn+z9x/+mIPWjP/qj/OAP/iDf//3ffy9I/eIv/iLzPPP93//99Wef+cxneO211/j5n/95vvd7v5ef//mf53f/7t99D/77gR/4AX7kR36EX/mVX+H3/b7f977XG8eRcVxk3W9ubgBEdVzxz/VkWEIGJvUSLXgupSOkAUTZCkaNCnUseKke8nLJhdKJwFNIhlPsPdDntDnUqmMdfKRNUZqdZcmZ9Z9W2AzjIBcqsZTxViVW2q6j7Xqsc2otrQEjLzRVQaatML6wxCmrGoAjYQjZkIL0mWwUjxnfdrimpTFKz80TWnaKUrkOIlfmXi2tdHCzBHtQLcRIzkEgPmRiP8yTzItYmcexWW4ayWSXm3meVDQ2ReacaIwXbbkQVK7HSvO92zKEg1istzJ5td/f4YzMfrz8yit87GMf4+zsTBQE2g19H2mbW5yRuaT5OEpzOETV57MyH2asDHmn4gOkOD4GkwzF8NFYRwwyu5Njxueo2bNUzCkaorMEGzgO4Izqr5lM0xQIrxBiCsQllaGgvKMGHVOtIFzpi1nofMuu7fG4upxKtu8UwpW+pIgWD8ehyiHNk1Cthfgh2e0UhNSy2+3o+15m4rqOzXbDdrel61q2m211ynVeKq9C6ClWEsf9Xe0Rt75hnmbG48DB7QmzwRtRVj89O+fi8oKmaanGf4YaEOdpZpoG7vZ33N7dcTgOHA4CHR7HUdiS04wJSSzSyatAbUX120lgTyDaeyEIyUV71MVXS7zetGdrhAVXejULXG+UhCSEpZAi2+2W7fZkRboqJqOighF0MDqTa+9LKhvVOFxCRg1q5ToWJq3VTcTUn69k0nIWiSkd5i1K5GUvqO89ixKHgEeFlCLnC/091mADMkenjydnMZU0upGpNmXWvWA9wwnrwJfIabsMIFtJrI/HAyHOOO+Zx+F9e/0HHb/tIPUzP/Mz/Kf/9J/4hV/4hff97s0336RtWy4uLu79/NmzZ7z55pv1MesAVX5ffvdBx0/91E/xl/7SX3rfz7Nm3w+rnLIAsEuFVCHAXDLjEoAy5LjABZpple/LpUy6CdfG5WoxyGsKfr7QL9eldYH/Ch5mWIU/fRemNoWdXfoUlVhhIIRMiKO+D0NG8OFcyQryWillghW4J2Kxjroptl78dbquUyhE1M5BLCdCDLXUR59XmHrLzEvJzpZZs1z0nxA2mAYaJBsVQ0jDnCLTcQAjNuKQcM6I9YeRXkyIR2IIdI0X8oMawyWijghITwBrZYA3CUS522159uwVTnZbzs/OePzokrPTU7q+xzrP3e2ew34vjEIcjWswGOIYGKeB43EgW0fTyRyLQRighTadk3hqiUPzsqFZq90/Z/G2wCgFErS1kZ10gDdZgUXDnHARrEtYm3ChZO1mhe7I89mkG0YQyDRnoXkPLnDcj9gHUHQJft43SqZwyr5TYzpgDpFhkCHMojcXYmIYjhzHmbZt1OFWmIdt29A0Xnuay+bdtm2dFTw9PeXs7IwUFtZpjImb21uOxyPbfkvfb+UzeU+YR26uroRYRLEft+x2W/rNRja8nPDOcbrbsdlsOT1VWGkWqOxwnDjMhv1xrE389Z6QUlrklEIghlAlfd7Pbsu1EqpBQO/hAk1ZY2qQEwXwI7e3t/VxMiMkigym9IgVJg4pMY/H5XWtJhGmVCVlf8p6fy4q6/c3OEEgTEkSteKSdVpgvCX2iJ2OpufVTFLMYUxWHzis9MoU7vTG0mh7giQSc2JYnuu6LJV5oaqvYcQUhUoflRBTZt+22y3WGbqu/W8zJ/WVr3yFH/uxH+Nnf/Zn6fsPV6r91zh+8id/kh//8R+v/765ueETn/iEboDLYCGwWnRGLpwGg5SRkjgujWVAAtQajvvA75eqDF0A98os/V0Zoi0bubyfIli7/pOHkF/5bqF4C7VdNkmx1kiS6YZRM2mP95tF3DRp8CsVWWFJmQzqi9P3Dc55uq6XwT3XSHMXQ4wQ54DYYahvUmUVpQqvkN9/jsrr5yyGcFLWB+1hyObrnGXS+Z05TEzTSM6RtvX0fUfjLI3vCVHk/DddK0HKCBkh5WJQp9I8WnlNerOeX7S8/MqrvPzSS1xeXtB1LaSkIwCWw0EUphenY7n5xW9H6MU5yfxP0zTErOra9cYrmeMCrZUM3GlCseg76ho0pYcFKagGmv5emucJE/W/RiAo30hQKI1mWXOppMmQS1WXcWbGhYSpa0A2omIO6IuFvAq+WufwuolN08QwSpDy3mOsbObHYYBDqkxBY7VPuoIPUxKLGJlLkiotAy89fcqrr74qfZUcsVaUFMZR1uzJ7gTrXE1awjiwv7nmcDgwz7MQDxohb5ydneG8zMK1bctms8E6X/szMUkFcTiO7CfD7d2B2zsxTRyHsVLiJ5U6mqZJ9BhTIpU01HttB4hAU2HKikq4njMdL1hD7k6hZeccx8OB9957vlSwTogSXSO2IMs1sEzasyvXx1DEqVnuMw2gXhl2a4HpUhFRroW+l6C7RhmfKes4JyEzWQM5q9AtZZuQACXrpmBIBmIQF2InbYCKL5UqzS4bVglQtWelFVXOkjwuhAlTYdfNZkvXKxNW2dTf6vhtBalf/MVf5O233+b3//7fX38WY+Tf/bt/x9/9u3+Xf/Ev/gXTNHF1dXWvmnrrrbd4+eWXAXj55Zf5j//xP9573rfeeqv+7oOOrpPM/+FRSBP31SQWlgxuoXZTobbSQchadn9wr2pdEUlMSvXf8s09wI6FYiG/XPbxTCFzsLzy6m+WCsiUOwbkZ6b8PCN6gggcSCbjSFlnniizTKY+F0jIS0YoxGmKGBvolB3nfSA6wbXniMzvhGISqO8wlRtHK6R8PwiXjXu5wUyVWhJbCoH+ZFDYaMD2IgVkLTlFnJXFP2fRwpMg1IEVFtQcIk4LtSLtJB4/4qK6O91yfn7Bp157jY997FVOdzusNTLHQ8KZFq+aePMcCLNg5If9QZlImb1aJMwxk63n9OLxQgGuFfGqKq7XdWFtSgNb15J11Wa+wDcRUcMgK1tLFUgoM3m6TuycGKL2Im2q1ZWoZdu6TpxW52L4p5JNus7CNGt1lnBWoJWmaWi0IrdG5Kua3tLpDJctm0slEZTPqEOpKwFXEbXN6mUmcPEcZlzbkjDMWXpzRqV/gnpY3R0Olb4vlGZtskeZjUtxxs0qJJzE8DCrWotVsoWxtqopGGPZHwcOwXI4iBzPqH3GonWYo1q/G8Om6zTQmkpAqNWOKbD68v7W+0zdHzI6/ycroe96njx+fH8nMILluDLvtUpgBdKVe4MoAgKFTVjfh1Z1mm5KdVMQHiMjKaK9KGK/BumH5gzZSqByqeg+lnvUELGVEVwo6uhISU6yN0lem4gawCzCNFzaJh+QpH7AMG9BuTKlz5WIUWxkiouE0KG/9fHbClJ/+A//YX7pl37p3s/+1J/6U3zmM5/hJ37iJ/jEJz5B0zT863/9r/mhH/ohAL7whS/w+uuv87nPfQ6Az33uc/y1v/bXePvtt3nppZcA+Nmf/VnOzs747Gc/+9t5OzrYqtCXss5EZ0wGFa2qhEPJ+KHWMuVEl8X6IEg9/G+lb2rQqppgGmiyZmKyg98PVrn+bOlnLThkgf4E1jNFqJVSeemsjrKWclbdryxBqsjVVDVqsx64NUQC4xyJc8SYwNAGMIHMiPcyBDnFSApLRen0RqX0ZLSSqvYfcG/BFohCVCJUc67ofRhhNhkn78f6htY0QCcbYAykNBHV+M4Y2KhjakjI0K0GP2c9OUUOR1GHN03PdnfGJz/17Xz2uz/Lk8ePSDFwc33N4WaQ4dje0rUCbU7jzDTKBjbOE1GVBPb7A7e3tzKk6Rql+d8rsO9X6HVNqFwOEkiibjDWlatZnkOVOIxsrjEbUhK/HQGK5Rwbo5qMYdJrnrS3pD0rKwwrhwWnkqpmFho2OjCZChQbsVEINHaOtDHRY+jU5t35hkZVBtq2xTtP08h2EEIQlYAUNSMuczCim5izDOsW+KZYvjdNj2s6kcxRc0KTDXPKHIeBfDzSOCeDrePIcBS2atGT6/ue5BxHI6SWkLJurJoMqCea81JhW++kkprhqIOmUd+f8+sqQBRhqvZeqXLdYi0i0KxUx2EOHI4H0IqiiCjX+1+VNFJK7LZbHl1eqsVGrKoXsVTsFf7OMnRtjSZHUVUhZO00ZTbJy5BxikE1ZjThrFBiSYR0zzKiCk+ptrSqLtqVyz2KDEMn2SuN6l4aIz3lkjqXZockpfp5U9RBBoX9ss5kPYD9yn8XL6r1mEzWXq5AgFKF/TeA+05PT/me7/meez/b7XY8fvy4/vxP/+k/zY//+I/z6NEjzs7O+LN/9s/yuc99ju/93u8F4I/8kT/CZz/7Wf7En/gT/M2/+Td58803+Qt/4S/woz/6ox9YLX2zwzqjWWgh80mVZJ3BN6IuHFNiGAQjl2pEtO6ybiwUEUq7VF2uQBK5MHoEo133pRyLmOtykVbMwFWwKqKZUOYdNEbV6l37USSZPM8K3+gCk3dQBnQNnTWk7JingqnbSm+tzC4E6owmYn1HzmL33bQtxrUkhFgh/RPZBA0wHA8qHJshRc2k9Vw8rDAffiWU4Ze0YkxEBRLEOU8WvzVlwC9KCofYZkvlYzjkkUaHIQGmKchGohDodnNCv9lw+fLLvPyJ1/jUpz7Fq5/4BK1z3N3d4ZqWbrPVG9spXJq1nyLq1MfDkXkcuLq64lZ7JiFR5z0StjB2a1+hKHrI519uzqRePNKTytpYLtReMCrTVCr+rE16wzK/J5BmFnUGrwHMeGlyGyt2FMpiS0aGOBtn8bYhO0uRkUomIQPs0o81WeR9ckjkMTAng5uCEHGaRtxu56TzWEZ14DQxSSLrFO4Jyeq5cNpjSRCywfgWXMMwiplgti1tV0RzRfsxxYBzVhKSaarJXqn01moIbdtKUKpqHpKkWOdxTUNKmaZtCSEzaYLkjCU1y7hH6fWI5JBUVUGNF41ZxJuXKn+5n60GOINRMpBeu5Q1SVQ2apL+y/qeWL8+OdexF6lYFs08V/rUWQkUSaorUWiAbKPCxaaOKxhjMKmotGvPrCTIBUzORsU1rF5H+a1zMhwt6w2p4jV5lv4WQp7AkcmEGLAJxAJeWH1oD3YNI61NK8s5dV4duVVVQs4tVYygnK8Pc/xXV5z423/7b2Ot5Yd+6IfuDfOWwznHP/2n/5Qf+ZEf4XOf+xy73Y4f/uEf5i//5b/8236tpnH3ys/SAK0ny5VhVpXcjw+HX6nsnoKllmM9O1Aq0yITUuEXxYbJMjejGrD179cbesWVKZVfrs+9BDMgK/EhZkJIIhCJCFt2/Yau32CtZZ7FUM5aoQU7r4OETr4KNJVMrplgqn0r0TGcp6SsMmG0yZCtY5pGjJUPXTarJWjKh1yC06qaSigTsAQnpFGbVZyynK6UBMIoN1aW53fGMMeADYHZyOyMQTZfm+DktMM1BtdEnr70Ep/89P/At33mM3zHpz/N2dkpV8+fc3ccSBj6zY6m8UzDkeNx5GSzpW075mZgtJZhGLm7ueHq6ob33ntP4B3r66wHrqGImxa6d85Lo71knjGK5BPIkK/zTjyJrKiaCFQaVVeN2ktAsXpTZ+PM6kZfRiB0C9EKTGK65Dxy/nyprKzHeItNi+132cQA5piZ4oQZJoy1avM94YdJ2YAG79bVYrm+i5GmPJ28ngSIqAQGi2tk+Hk/jGCd0MtPzthtesbhKNVPlqoshagJgMF6T9O2NG1HiFF6lcbgmhabsrwvtSN3Xi3LdaDUOUfbRNosA7hrBZiyToUlK/fy4XBU7bqF9bbsGbbeM4XuXxLXNUEgaaW0Jgus7XUWMkYRWjV6/aTSlYF2hY6TBrFM/ZugUG+IS0/TGemRObX18E5L9RViU8t+U66TJvBZtT6zBlOT5d5GAZucxc06a7AzTipoZbwSE9ZkZUzL+nVGxQbc4nNXWywsyJEhKfqTFcZcaPpZtVI/zPG/O0j923/7b+/9u+97fvqnf5qf/umf/oZ/88lPfpJ//s//+f/el14FEdnsUsXMl3mjAstU6kMu4qtLtrOwe5bgUhawMUYbkOYea2htCpY1CMrAb3mdNV60yAelYodAfajEjSx7SkIp46bBOmgxMvyo8zjjOGtpb6VatI7Gt3oj+8rYk/dmmNSLqIjsmjI8ikjIzLN85RhJca6QXtaZkJSKSWOxGlkC63IDSyYr2Ln0o8pmGpOwj5q2Y45ix45CW61v6LuGrmvYbnsab3nx/F2ur68Yx6nO8xRxXqkGPZt+y8c+9gm+7dOf5vGTp8whcn1zRzaWzXaH914GbcMsvaFpYppnkXUZR8Zx4nA4cne3V80xXQua1EzThFVX27rx5IT482jSgVQU3jdkU9bGqndlgHLN9b8CpVgdEqCut9KLkHmcZS1qRNe1rbMwRkYsSAt8VLdmRQbKvOA6SGUlbZTPGVFoMYNzSatOgatFK1Cr3RTrGpB178gp0zRiyeKcqIaEFAlJx0SsZ04ysHk4HhmPB+I8se08KQXRCTSqOGKlop+iAKRzhDlMBLWJb32gmYOoyrhJPp8qVcScGKfAbBpRvzcqH6aUejDQytoJIdD4BrIkbfM8V0guqso3uZABMslY7dcsiIiMAZT+r9y6FUJcXwMgGxVnjeI9FpN2o81SeXjvK5yH3ksxpXquTflfzsLwNDK2kVIg26TtBipqIU8jnzuX/nTtLMioTVHX0JyUe0LX5RfWCAnIGoz2H7PJS8/VGBrrFmdjlVNaB3RjpO8qLgwLnC3X5v7+/a2Oj7R2XzHlWpfZRQ0cUJmiQh9fExaoDdMyUFmEW9eMleV7rQjS/Ups3ccqsFtdYMvaq/+tX1BhQzJYzTxqVWXsYglhRT06xMQ4zYyjMJS8bzk9O9fBQJU7UsNBq9BUzhkXxXBwnoPMsqgqglhoiDDoOAzEeSKGmb5vqAOMOSxwX7Kk7GrwLe9/gfp0Sj2JRpcCqiQjbLOm6zAhVB0z6wyuaTg9P+fy4pxnz56w3fT8l9/4dW6urxmnkd12W6HQnBUCyoazszO+49PfyWe/67th03P94or9/obNpufk9AxvDcNwZH93R3SeMd1yPAwMw8jxOHB7KyoB1zc33F3fMk1zFZJ11hJCEOPGtJoDMa5WwCktMzney/URuCTpGhSANiWB2kIs8JsHm3EmY630BQymZta2zO04yX5TIaNog0ywfmlGpyjDqMHK7FQJpmtjumVdGqxdzbpA7amkIMZ61mRRQDew3fY474hhrp5RMYlA8T1Ixzk22y1e1SbEIiSRrKNpjuz3d7SNZzru8RYenZ2Sk/Qe55BJ6i2VtOJMOlN0PA6k/ZHWiZxUryZ9xnnVElRl7hjJWHLT03Q9m01P41vtuTkWBqZkDzmpSO5KEHeaZ4bjkXEaCbPMR5XPlwv0tz63xtL6JXlpW3m9hzD4FCfmMJHHrNbskoW6lcxV5zu8JpNrKneMqkhREQelkWfp9GKorQbQYfq6u5VkW/X7CpHKyCNLhVeIxCJPVgIbSksXFKrOSIaZbOX9m8JedP5ekFr3o5aZMQTy188EuSqhPySnfLPjIx2kpmmq+C4sC6SeLISxUzbReyrpJStgKavl5rZYIydZvVEVpouUHkN9ggI0a9ixWA2KCmUpLBPLbBZ2BY8tiypFhRmMFa8e62o1mJV9Q7K0rsP34vBqnaN1OlRpPc7IRgpGGrspFIhbbqxGBFOjzssYYzWwRJw12KbRBSsLy2apHnM29wUuV1Df2ocLNJEvsBSqwKzvYdt0bLY7XnrpZTZ9y9npCaenO87Pzzg93bHb7WgaxzQHrm9u+dpXEt53ct6VwYbi7CjkM4xTDeTOeZF/knIL7yRoH6ZbDsc98zhyGI7c7e945913OA5H8Q1yltPTU2JMOOOl6R0D2Voa3ZRkjTiFbBadM3EvVhpvDmQNOFYhu6yZuahkdJThTG9LYFrNRUkmpFpnKj5bq3LqWtEBQFE9z2VzEphGnt/WnheUjUKa314HnwFyTGLFoUO43jtIsnnjrJAWshXignHibK0Bbw3vZOOYE8Ssg+I6opqNZQqJOQwQhU12cxjJMSiEKJl2BkaliQd1p8Z5WcPWc5wjyUZcNhDmRQsuS58Rk8gm0vgEMZNCZE6ZaZDgkNOCiLSt3ANlritMM6QogcK3eJfrftI0IhYtVSS1ojQYRQKMyvuUdamJQiFjhMXryVlRcQlRZrusDi5nqELSzju8bsc5Z+ZJLFZsLqo4qmaSSsKtLD27wDGVfVqCToGOdZ8jJ5xWXCY7pTbV3VPXb6niFKS0SI9Uk3WTUXhQ+8g50zatsBaNVf8zpyK1YhufcyYX1qiRlndOmel0903393J8pINUeDAMts7sQTKMouir2+gKylsok9ZIsCneMyVzd3bl0WTAmNXcTCrsqpWSOQlipKis1wZV+d5I7lzIE7KlW2Is2LjTjcqQJvGWErjL4V2jorNNnc5v2u4eHl7eS4ixzjqllGmc2EoUe+ygG0JOWcVsW1zXElNknAaxujcl286Sra7L+bxUlNZalT6RQVMLzOr4ar3afedM1/dcXFzy2muv8crLT3nt4x/j8eNH7HY72taTEdmjaZp4/vyK5+9eywBkHDE20lpwjeiGJTLWO2GazbL5Jt8wHA64KD0T7x05wvF45Or6ihQCL66f885bb/LVr32VME2EeaRrG3a7Uw43R2JWuDjMMgjuxCXVIH0BnIEon3maUhWpNdZXKl+ueUs5XwKrGV9sxkXFXWR4ytjBchSKvazR0q/SeStrMMZXplfKiThPFDq2dZ5sbZ0+qXYPSdhmIYFVOn7W5/XeS69TZ7PsODDNE/M8oc5MMvxgRGqowHRW+0NBewvDMIotivc0KiA6jFKdN40jpsxhmLA56ZCwZOExRPbHgXEYBUZqG8ASSXLejGXKE8aEiomnJMEsRp3ByZ7khaEakMHdosw9zzMpJ7zzmggtPkYZMNngrce1AvWmbmHcSYJxv8rJwDAtFhOhKr+rJqITtYy+aYgxCorgxZ9tmmemMIusUkqqeqPOvG1L4z2NDlsf9nsxASWTV2w5kiGFmZAjMc6QhRFLYRsX/U7nFV7WoGVlDRtyZTx7Y5UktZAwCrlMkHuhsCvyKUSLCCVaZZPACvpQh52tSCT1mw270zP6bUdjHdbIuNLd7Y1C2HA83n2rLV7e54d61H+nR3G7/SDGWYWJ9EY1yE2WCoJfs4uFPmlVfbk0HaXSKn0WyUrk53Jxc0IZUEV0U6f9vSfqpHvQG6r0LZZDApRYfshrFrHRbCz4Io6pNgzaqKwMtVW5Xz57USAuFNCovaKoGLE0fEXrq6jGy80e9PESbHJdhEaklGIgzEnxa1vpuyX7LT5C3nn6Tc/FZsNut2OrTp/nF+c8fvqUpml5/OgRTy4vODs7pe/FjdY3QtYo56WQF9qm+Eclplk+k7VUI7YYAk4z3VJxxhCZzEQKSmOeAuM4cXP1gtvbG/b7w2pmRc93FtYRapNxfX3Ny69+jLZrpcIoUFuIy7nUjWttdSDrTDPbjJzfrE14Y0qbikJGEObfkuiY2pssczurdbj6krUvjfdS4cgekmtv42HChlXVkpTkHCojMceImScdGZAEx1iHb1qlTivso6/ZmMVKHLTXlcu9qL5WWTXeZGJZBrFBdCNTpNUqzeu5bNoe61pyzjSNV/1OUwk7ct6jXgeRGioIR+ObSoQodhEFSqqDpoij8/F4FAX89fvPheXLgoIYtZrQ3qA1hqSbcenrlfLWWkEksjG1wgt2ZtbgkMgVfjchVATHe0E/yjWNKWFCIKlBolR7khz4xtN2nZhNhkhQaD4lh/Md274TA0mt2kPd05CgpffsnJP0mq3VtSjiulGTbBEUTpV2n63sHynJqEoRDCgIAcaQQ1C7eFmXTt1/R3UD7seORscnrBHGsXUWbx0hNB9qn/9IB6mmETHaOp9QsNCy8BTvXVhVYmKXNeMFyTaLkGvOhrZVM0PjxfYgZWIqMF/ZKBxerS2mURhes9pJN02vzKeZmI5yQ+lwJxSn0tJctxqIGs2q1dDOCLVYLBtaGnUttdatrOiXocOHduHLVybmQjKlnp+S9ZUb9RhmhnHkOIpHkG88rlGpnCTSM+M0QVaWYdvSOS/GetNc3T5d07I7O+e1T36KT33bp3jl1Vd49PiSx0+fcHp2JnNQOeOBFGbNunogMRwHjsNBVLBT5ng8yqbYOMZpZByOK4h0gXTFnl3sHHKMYI2I88bA3d0dh8OBw+HA669/lf3+huOd+CF5a2hbuYHIYk8eU+JwOHBzOPDap75NAqjzFKv1YRrJ5AoFyZpZpu3vBQeFS5xS50tClFMkxMLAkkOuT66JUqPOtKtiXx73sOyCSlwAJMA8wPnXBKCUEsMw1P4p2ksbx1ETJLG8aNtOiRHSnyyPAxkiLtdB5qnUCqRrdT3Khq1deIwmknNMjLP0I0OEJhmaBrq2o+07mqYkYpbd7oS+7+ScDwOH/Z79fi9GezEQYoIoAbxTE0rgfXbm6/OWUlLDR1FzKGry9xjBRpQail1Gzlkgu5XvUtlvHrYWokKI5dy0VjysfNvU2ScbHMzLdXM6UFfgvSlJ9ahLXOxIvJOqZLsTBfUpMhz3DMc9KQbazvHs6SMaEsMwst/v2Q+D3BdZExcEFvVG3I5LIhXmmTlE5jAjRCyP7xze93VvMMbpXqL7R4KkZJByDoaVBl/RcXTe46+v6TedGH6qcv/JyY6+a8Ea2ubDiYl/pIPUQ/pnbWqXcl0fUyi0GapZWEICkJERfMkWXMQlpIqwkonELKSFmErmJFlWqVKMdbRdj3ONXnqZywlJYCDvSx/FYN3CaDEszViwNfBIpi5N4lwki0pfQr9SkgxoOB7vnYM6qFgo9ylhdc1Xsz6AlEjzTA7iiloywEJxdW0jWbfOlaDuvbBUis57Lh89ou97ttstJycn7E5OOL98xMXlBRcXF5xdXLI9OyPkzO3+TiwtfEMOkRDEm+itt97ixYvnXF9fcXZ2pkrnUc+1VilWM7tVEKjwyzgyTdpnQ4Y2hxAZjgeuXrzg+YsX3N7sOR6PpESteMvwpUjGJHKQTcxaxzQMqrwgloqFuCAVppzP9VorhwQn7cfJAtXnzzqTIqhK5n6QKms5pqzTa0nWpbY162usKikDmCQjCrn8WxvkD/UsbS7zMJIF2/o7U79kAFS9h2wQyrGy+go9GhAxWxTmTXIdhYq9ku8xuUo0OWs0Uzdsdqdaheg5t5YxRoY5YEepRmOMHMaZ7W5HnGcRJw6BZCy2afDGgAsVwTDK5HtIFCnfl+uy/u8HHaWf1KwIEabcG0n820oSSJZKtFQ8JfCX4CfBR+ap5imLdqAxTGFWeFjuTyHQKBlJ781y77pKZ5ckeJxGGk/t92y2W5waJl5enONzgNMT0pPHpCwq5uM8V1uQkDLHOXIYRKIqxiIOlYlR1qS36k2mVX8IgSKvXqzsy/61pucHVfRZU9BTEk+xYRyFnOIM3jqG8Ygx0LcdMfwfYHr4/+vD+7ZmkjnLiS4zDIsx4LLBr9V7Y9lkUmJKs5bmloijbUSjzRjDHKPcZLZolWUsucIB1nusNzQdGJ3mltkmi2taXNOW9rc0UFnoy3WDSFlgEtBp9jLAVyC9IjQr36eEQFg3N/d8hkqFBMUgcJaMzC5wSFlkNRsEtRIQiuhmtyPmzBQCc8yEbMjW4zuh7zaNBGPbNHzik5/i4x//OJ/+9Lfzyquvcnp6jil+OPMs0E3fcDweuL294/LyQv4+wXAceefdt/nyl7/Er/7qr/Dmm2/yP/6P38vhcIBsxTXYiQQUpsCSpYld2EPSvxkH8a/pWw9YiIkX773HW2+9xTtvv8nd9XNxFB1HkUWag5gvqj6htYY4TuJAqwnOHAJt0hmRlGqzuEB8oBp29kG5ozCP0fLVUAJGrhJIxlgZuoWlbYmoZBsgJVFje1g5PUzG6u/LeEB9ZLEPl0PkbgrCUGjHa1hbHlWerrhDo+QO7j2zWfXEFigd3dgwBjTpkeeSU9K2HbvTc0mKZu2LzlOtxmOU/+aUaJpr+o2YRDZFKcI6fOMwRny+QgykHOT+swsF/OFIyfrcwWoDfSB75JxoBFpr6fqe05MTihvtOI4cjkeCogYFGrfGMgwDd3d3NI0MLuc+0zaCgqTC1ItRYFZn8a26d+v+Ua+pJmMpxAoPa0ZJQuTBrIkY7+g3Pd5v8daw3bY8feklzlpRD+k3GxrfkQ1Ms6qp7Pcch5Gr2zvefe8F0zyz3x+0TzQr3bz4nFkZik7Sa7RWIOKcBbpMJU/Ly/qLUp4pGpDISdokU0owFKUe6ZOP40Db6PD274Qg5awVRWw9chaFhRACuZARakOQsgOw/EB/aJYsM8ZItI5MxFQ2nnoVGYHa5KZpqAwjFspqqT5ypmZ51lqd+HaSCa4GB0uDvbytpl15yBig9pSsTm/H2kcrSslrtYzqjJmz2odnclwqEJEp0pkQldExRoRAI5n9fi86cxhMI2K0/WbDdtuz3fScnZ1hjOXkZMfHP/5xzs/POX/0iG6zwTYNGLHiaLW/552n9S134YZ3336bN8aRd994h+fvvMPd/o6vf/3rfP2NrzMcD1xcXDLPAtU0TaN01WUzWSop+XfS89J4rxYYEObA/u6O5+895/rFFcf9gbu7A+NYKjSd3M9K59bgnDWAxxK4lWBi8FpJ3e95fqOsPBtDRg0VTcZkhykMsGL6Y1YLcFWZ6SqkVjiLoVldq7nO7gAUm/CHgfLhYSjyGVmjUjbal6hVx8rsc/2X9cbRPmUufZu1yrupcFkFl7U6WBr3DftRLGCE7ZXJOPWBE2Sh6bxCnpZsPFm5aKW+lEQzC3HDGUyC/WFgtqOY6q36g2UYt/xsPeS/rgbKYxoVgnXW0bYNrW/A+Wp8aDFMzhND0D6ZoBCt88LmVisVmzJpDowxiXuu9qUgV88uOd9luD+XBaCVdlkQqrLvvIgO+076b0YMG1OKTCmTDjNvv/02x9bSdz29WqlYha+HceI4SDVjLZyebBnGkaZxNI2n8Zah74V5mEXpYhzGJYFNZQ7LVDagrai7JpA6l1flozS+FsNXIXzIviUq9VGRioWA8s2Oj3SQKhvOegEK9GCxNpKjnIQyJyE3l9KUrdibF9+gEgyYA8Y4XEaFENFMXiRanGvwOiMgE/cyDOq0+glBsPecwTeihuyaRv/WKiOsMPFWlV0o5mE92Vop06Nk/SmVpnCRaTJ0bcOjx48FV1ZXzJrlVQ8XKxI6mtkWiRnjTFVLxsr33suHvb66Etp613JyccnF5WM+/snX+Pirr/Dys5d49dVXOT8/4+LigtPTEw6HY5UVurs70LQb+q5lu9vSNE4qlhixCf7Lb/0W//k//b/5wq/8Gl/99V+XG9bJtXny0lM+9rGPq+joJLNfOhezHpyWY8ngy4ybxZBT4MXz93jrzTf52le/yjvvvM3xuGeeRo6HQcRus0zYGyNN/yKeSQiElCQkOss0TTTzjLOtVm95WUss0FFRHaibi641o1WKBWwyIpnBooz2EO4rpIf12q7DLOVT12q6PET//a2ClKIMizOeVF61WalrsUYns2ycFWPWJ3LKTDUYhbBdhZnL+TGFOGIKkdkwp8T+9iADoizSQ9YarG9xzXJeM7kmfUk9mazOOkqfVVmTGO5u72CaaFQtfW28V9ZGocyX3z8MYuUx96rEQupoGtJmQ9jtagVWZsIKOnExXdSqaxiGyirEWayX3q71eo4q6nP/MNZKv9YUYQBZ25ttR9d3NL7FWY/JljCPDMPMOB45Hu949603aHOk71o2G/ECa9R3LuclaLRtw+PLCx0sNhWKOxyO3Nzccn17y82diC0Lg9bLOvEqoWYWKNuVpQN47aGW669LToaks44DxVkU84ej2p1YCsvvWx0f6SBllUSwbgwLhGExZoHV6gnMuVKppVwVplPJzoVenaszrUlLgCsN7bbta2N7HGdmVRUXwci5eh7JRVKShF1kVkqQKhllSoLfl57UPEei+i1F7YUVOSNjqMy+BOz3B5Ew0UZx+W+l2KZEcgajDLWUElOYK74OKO1VmpuuafiOszOafkOz2XJ2ccnl0ydcPn7Ck0eXPHp0LsGnbQkpcTgOxJTwTUtfNr7smcaZm+tr7m6uubu94u7mmrfe/BrvvvM2b3ztaxyHAdf1ZBK+bYFM0/cYY6WSi1HejxfG3ZoBVyspvV6FsJBC5Ob6mqura66vrjgcDpK1rYQ2SyVrc4LsSMykECTjK6rZ+lplmLIGhgLLlA1UA0rZzOoIgKw0uVbGYo3I4EglIxuRLKkHUJ7KJuXSf2QRF1096h6sZY0lWUcyjm92SCxbqr+HfZsCR9YYWWZlCkwpq0nfwf1AXRIiVj9XDhx1Vg7VDyy/VSr0etC23KcFMrQ6S+ZRjyeFKYkRY2Xg2nlD03Y6OsI9YkNRQ5c+ozx33/e1sioBqxAoivSVfXBeHn6tq69S9UnCGmpPqrBTY86kYv9urfaTkywFY2qFXRMwjV5WYb+k9/aoM1NSRcm5w4grQNs2tLah0z7gYRg5jBPW7XGuwSn06Jx4mo3HozKPlZkbk/5XKP7OWprGSy8aGcZPcZFEwmiylKl9qOKmfg9p0DVeqixrwXhPDFvxj3OW/N9CYPa/t6Ng1eXOtUaEUV3ZMKwsfmd1yDYlvGZjZdYnaqAQXS79r/Y7JIg5nJGF2PdbttstXb+h8Z7jcSTGrI6hAylGgQT1RjA4jPF419K4VpQEikWDQjfJiFJ4zhB03mSOgVQ2vFVSWy66UIcTt4c7yuZizBJky0Zb4DyrPZSYllmkoj693WzYXZ5wenrC5ZMn/A/f/VleevXjbE9OuHj8lPPLRzjrEBHVxKwU3hQTV1fXtG3Ldrvl/PwMZzz72zu+8qU3+eVf+SV+6f/zv/Jrv/JL3N1dE49HTI7YrsO2Pd3pjmkc2Jyc6KzSjhgTh71Ac2V2o8JRdj3jBpJHJxov5+NuGnj+4jmvv/4l3nrjTa6urjgej2Ttfcggo+gcNrYh58g8JhJB+5gCaWCERp0E51g25ZzvNeilwV3IFEaxev39vY0NZKAyy0cqUJlWGwtwp1BWXsC8QnYoxzquFYNAsSP/EEEq5wfBZJnRWoKOVleUjXodqArGumIL5sQ8h1pNLnBfeQ4FMI2pDrlF3susNnvv9J4xRXpIYToD1ij9WZOsUsFIopBonMOGWZM1YQ8W8o3IEonnlbWWzWYjiu/e0/U9XdfKIHNhU0pjhcZpEHOuKtK0bSdCuCufpxq4FaVZRj8S0zwyTsKKneZASCqNJCqtKhkWyXa5t/WqiKp9yuQ5ks2IGQdkgFsGg/u+k+8bT+92bDsP88j+7o672zuOw5EQI8419NstJ7sdbd+RQuD65pp5EuWXwmIscmpTCKSs6iQ51Ip10YrUeyTnaq5YPv86iZS1JOvcW4f1yl4GGSjXynWe/xs58/53dZSbLy0nJ8VUnT6B2ptZZ75A9WixFfuX6XHJEnRoMUkWnI0OwjmHUzjBOk8TM/1mQz+MTHNkRqRYykVvml78jEyHt51kUrG8L1U6L4sWyT2982Cszjosqg7lRkPZXClncsnozdJzK6rc1hjmmKr9dE6Jpm3Z7U7ExsQ5+q7j5OSERxeXnJyccXJxztNXXmJ7tmV3dia04hDVWiTiGsmsrJXnjtPEi9sb3n5TdPHG/Z7D9RVvvfEGr3/tq7z39teYZmHKub4Tu2hrBYu2jkQixJnedWy3W7n5Y2YeRb1BZG9kxmY9Z+aMIcaZECeOw555Elz+nXfe4ur6BXf7W5VhgZQjcR5xTiRpvJX/FpWPYlsflFVpjcMbTxwjNkve6p0j5FgDA4hsTJwCqMpDqRAcDqv6fHJVLBhhsunYkNQYxaKl9iVcQQrr+iC/n6lW1rSgBW7pAX3LG2Ud5ErQuQ9dyqxLsXcoKikPKj9Va681k7FYv0A9BcYuIXuBPo0oO5QMWxNHYzI5R7JIo9QeMEhv1lojYwLIiAadlxk6r8oRjcdED2oYKBT38D50oVTgcwgCW40Dcwh4r55YXpRLwNE6I6QHa/DeMhvLYA9YHYpfGI8CpZXNvhiDZhJTmIh5Fh8AU9RnDDkgcHsQfdlkhaRl7epak8V2PifyjECseVbkQAbfnbUyclDu+XHP4XBgPxyYVJfQ2JmQAzHNdFNPypbjqFqeyYD2flE2cWMsyRoiUYlCSSPo0jvLqcyMLvdjSVJKIiGyYUkTMwtqKZQ1AKZsVWbsw4Wfj3aQgroQC+ywlj3invfP+xXQjVEjOQsobCMnk+rLUuSQjLX4tpXM5PSctuuYphnbtISUmUIiHwYy0HS9uIx6cb4VRQJlzMSkHjPL+ykL3jWepmuJKTPFWKfm13NgZTHElJhTqurIlWpvpCqYVCMvkxmPM85anp1f8OlPf5pnz57x8Y9/nEePHnFxccm239D3PaZpSNZUTbQQItOwB5VZ8o2l7zp2mw0DiTdevMtvfelL/MZv/AZf/OIXef23/gvz7S15mmTzaFts03B6fkbXdzx/8YIwTVgD0zCTx4nROk5OTjg7O6Pve3LOqoS99CdMqTrTMjwb5pnj4cDN7Z4XL6748pe+xFe/+lX2N7cCvTivumPSQ+jcwn4UcYi0CghZKfq6LmwRxSzNdYdzspwW+EJYliFE3YhthUMegnRlo87W1HhSMlSJA6Zu3uUo0kofRKeukNQKLvtmRwk2D9f++x/IYstSKwX5WsOChWlpjKmMuPc/5312YqFoL88jwY6UpArKWUdGMvMsr9d4x8luS9e14gmm537SealpmjBoP1j7btVsbw09ZaGKX11dsd/vBcrKU11bdW6qEd+xzlsmbzExkNIsowtJEiVjLW3bLNJQ2muq1aETXypRbYj1fGUKNIpafUhQLjDyuq9ujKkagjFZWEH63nvccZAZRiVJtRbSdGAYjgzHI9M811EbGRm51b5bq0iOrAXp5SKBWiE7lx1NlDnFYRorPJ24XyUVU9DKIob3BSnnjJpWCjHMrnqnaVVYfKvjIx2kYohEFmr1sukjfRubK1y0np8qhyyuTFa9MWOEBhyLKGMpa5Nkd+VLoPGMNZ7d9pTpPBBjxjsZRl0o4SphpPh1DFnkXsqFzMvNX3pqGZlPmvXirwd0170EEW91hJhJq8/fdR3d7oSdb+g3G8XtW/qu4/TsjI9//GM8fvyYi0th5Lm2w3Y9pu0xzhLDLPNUOdHZTHaZaZ6I08jtzZ67uztk2PbAG2+8yZtvvMGbX/8at1fPmcdR2D9tKzevtUrDjZWN2HhP6xzddkvjHNM00282nJ7KDE3ZfNq+kQl3o1m7Qj2iQpE57Pf0t7fsh5Hnz19wff2CeTiKknsu0K1AGmJ6qGsmRql+0nJDLec3kZEgWJq+IJVjSkZl0MpGYpfs10gvIytEmYzuP6u1WjdMJCe6VwCtHvhBldPD79cstbSCRL/R8Y1++0HzQ1UFfyWU/LCKqzN4NfGK9953ebp7hJLV6yzzNFQYqChyiOFfFO66NdKbCZFoA2TVJBQYApNFY6/AmSmLg1lMqmyeUk1eQwhEMk4p4MLclBmuHEX2LGGxRGx2tLYlpyRJCJCLGPCq4nk4klDZtSVAGd1bqtArdQ0okIOBe3tXOTdFPNvo9Y3qCxZjEh3DGBiniRQjjUVdkD2u29G3qUpGLQGQlfj0kjQ432KsWJ/M88wUJkIUN++l1wqskhdrDMatRkFIoFPBAADPWUlEQVRW+9h6bGaZsVIoNCd9P1KxF2b0tzo+0kHqcJRMalbFhTL7UDd+7zDO3ltU5fflv8JWSTUbloZ0Eb5f3WDGqF2HZFU+G9q+Z3dyRr/ZstmecH11zd1+L4QOVZPImGqDHlRNOihWbhCIpcgM5ZQZJ5nXCZo9rafn15TaiGHUfthwPJIUY3709CkvP3nGqx/7GJ/4xCd4+uwJz5494/T0tFoYFJ0tQBUsbA2kYT7SeIszWaoHC/E4cnf1Dl/8zd/kP//n/8yvf/GLvHj+nDgHueGiap47T78VYkkqyUOYGYYD1sHuZIv3jtOTc1577TUeXVzyxhtvEEPg6dOnGKTXJarkTUHA60BsGRANIXJzc8McEu+8+5x333uXt996m3maKG7JxlhMSgIVuZ4QJ1E3x0k/KkxVqWN9s4FkfEl7GeuNvBjj5dKfMkuQkmp7mVVStE43JJ0fWQUDW4gFBevPpWkuAXANl5VeTy7PbEztZxUh5W92iPfZfQbgGv6+1+tbMQCN9iLKJlTe/vLvzDiO92a2akW/ug/L33m/kJyMijr7IkWmUKBT6ZysuoUxBsbxKPM8VcYqa18K7R15YsyiN6hD9iEkZdlNmuhJeuB9o4HF6H6hg7pjZBhmUkhsO489PZFhW014vRVIzLr1Z5DkJCUhH0xK1JjjDEbkhVzT4n2rUKLuPQr9xbRcuXL+CiGjEJuKCHB2QsQqQ/DzPOuAeqJvGzZeUI7+ZFNJIcXvTvrtkTCNjMOAsbYmjKW6DTFyHCb2x4FpCrRdy2a7laRZFfCLGkdaXd8auFYzXzWJyoEU0XaLVJFC4pB7uHzGb3V8pINUEV912QIBa329ITQCaABwy7zUgxJTGEglYFmsRecFZH4IkEYigotjxAU1xIyLMgvjfUfb9nS9NEljFBiOLIEnlsZ8ps7hgNKOYwZnVExTAoi4ZwrmWGBHUVxWa3eQXlh3wnmSyfambdluNzx69IinT55ycXHB+aNHbE/OcU0vNF8vmHrKWSfa1YEzad8uzByPe66PR3IY2N9cMx737G9veHF1xVe//gYv3n2Lw/6GeTyUNBusyMcUH6OUEl4H9lzj8U3D7mTHk6dP8d5zfnbJK6+8gsXwzjvvYIxhs9kwTmOVqJLkLVFo1vM04zWQ2wzTMDJOM8PxwDSOlJLXUDK/yNqYMs0Lfl4ZTcoGtdbiDBXCwaCEgPvBa1l3Jet3eC/rh2y1L1gq3dKfoJTiivHfX8Pr5zemNNHLpqUZ6eqXOcsGL2y9pff6zQ7RWVs2wHWQWd8TKQlcvGS79z8z9cpQK3+5P+4HwHW2/rCSKq8lEpmWhLgzJyPq8CFLcHRWvXFTZBwH5nnxiTKKqeYsg7M5Zt3Ao879GWGGKjznvCQbsxIqhMRRBv11vnAWOS5Xq7ysmoDSC/aNqOobJ0G1bsi65gti4pyjSQ2QtIBauf2qSHHMykLOplbr5XwtaitSpc7zLPqK+ruCtmAEIZFzaVWhpiEmyxw1sVFzwZQSOQrk5hp1PzdOFOyjJEkpZYxrkKecaJq2wrrWSiWYdS0ZyzKHalf2MA+ClKkSTAulv3jdxZhrdfmtjo90kGq7rVQtLlAUE6SMrvlptaYuxl4Pb85Eqi6hchF0vog6/yiNRdsQEwzjTOZI06jbaiezTSenZzL97hru7u6UPi7PHWKslOaluVpmYwCFAIVB2GMbjw0zZppkI7Wpil0WO4Oz3ZZPfednePTkKc+ePePVV1/lyeMnnJzssM5VMc3DcMB5J1pbBlFp1oFk6yzTJIrK0+FIGI68ePcdvv76l/nKl3+TX/vVX+HLX/pNDi/eUwqxJTsnWmbeM88TXd+z2RS3YHFqDWGi3/Y8fvyYpy+9xOn5GU9fesp3fOd3studcHpyxmaz5etf/Rpf/vKXGY5HLi4u6nQ/WkHJ+pbvk9pqk2Rq/fl773EYRo7DwGF/IMdI37YYIM6hEk1kTsUTD1qZIpVfTGqJntbVt61MsnmemMNcoa0YxdKEIm2lG7BzTvH6+1V3AZJzwXVWwaRuS6tNu8BYRtdlZcJo30R+rn9f169+fYtAJaKiD2DuBwGqVHslQFZKfc71Hcs5cveeZ03HXx8fBBPeY3+lSMyRaHQazGQCYlC6227pNhvCPDPM072xivKaFWKbI9a1lP6dVLSO1q37X5KciP7fWE36gBoI5nlmnmbiPGONVDI2GzabVhPQTZ09siumab1MxrDRahojhJ15HjkOI8M4E1PAq9eVSVH6mWklgruqztYVyhTFN6usucJc3mxkyD6nxHgcIMjsU5QNp6rIrNGYvm3YbnpAK5k4E6OSkZzFOc/upOPCe4LCib7xuhdmVdTRFohfxi/WVfT6+5ScVlkL/Oic6ljaTPyWQ+hyfKSDVNdvVFNuyYgWzDxXsdSu6wRKKsQDFkZgcWfJoDNJomKQbRGZlM3ZKglCTOyEjj2MIswYomLp2WCcQHzTLJpZOcuCyLrIWLEJxWE0iXgr8rxzCDJgrPMVm81Gm7oSwDZKctieX/DklZc5P7/g4uKc3W6D80p1NpmmceTs8FEm6Et2O01DvTFijFxfX3N3d8Nhf8t0OHD34gXP33mLN7/+NW6ur6QJ6zzZWzKyORi7qhqMAWtxTUPT9ZxaSQrOzs95/Pgxj58+YbvbcXl5ydnZqYqHbml8Q4gCUW62Wy4uLri9uVHGlaciXbq/5yz09xxl0HGeZqZxEIvrLMFrHkV5wK42T7HAXm6gMnsiXlrL3JkowjvtiQhRpNhbP+xBLPDWAlvlZOpkfoH4CiZXh1vlWTS3rHrp9blhqSAztWbR07wKBB8Oyq9HgSnXUFnN7lc/Ewp66T1kFkmkJZCtM+WHgefhGyxJ4Qc9tobeUjoqHGqyCJjO0ySVYlqpFmS0zxlqxB7HAYzqXdYKUF5zMZAsQUXORVTWbspFQk1+7pzDZHBoPwsYRxkziSnjQxTdSrdUigWFKfeCtULECmEiJoHDhXq/GGgmJVEYa7FrmNm+nygjiYvAkzJoXM5vIic1ErSy71jN0lMsCXvWvzfV9yymUvXJPmjVQThmgaBTTGS3rHOnPmqZVT/fAmmpzOtVv4cKlPuj3FcF5VrYn+t2yjc7PtJB6smTp3SdKvYaabius4c5hMroWpfSa+JCTNLQSznrUJvAATiB9yTYQZRpNrEbyIYwZ47HkaYZ8L5ls+mx1qhMkxGBx3Gs8IMp1uOadWGKxI1ufjkzDgN3+z04w+Zky+XlJS+99BIvv/wyz54945VXXuGll17i8vIS13aMqeinFZQpMQwHuf2tWF2fn56wPdkCsN/vee+9a66vb3j3nXd48803+dKXv8RXv/JbvHjvXe6ePyfpgLBQ2cA2DrvZ0rednBeolgCJ0tTNnO92PHn8hFdefpVXX32VZy+/zOPHj+m3G8kAvePy0SVg6Ltdpel777m4uOCTn/wkv/ALv8Dd7S1gas9GXlButqzkiXEYOR6OHFUZvcjUzPOMNzK02TYNYZ45HA8y5e7LfFmxQxBI1WnwatuuVtBCqgiEIBl28SCyLPJTRXvR3LvPFqivvO+cF/sOUzeN0qtaPl7920ytmu4Tgb5Bz0dhsW92GBYoc92Loqy9VW8k5aA/KwEa1lEx54Uksb6P7r2eWb2/D6imjDFLX6OcCyOJhnNWFPEPB5mfYnkugYmEVFDgsGEYyKYDNafElKBcNkl57TUkFStFfQnARuEz1xpyGInjwBQC0xSBI8buK4LgvVupfbsKLVa3Y3XAtc5gnFexWmH5WtOQZ1FnizmT7cpJfHUe5fMaGm/pdNi+QKyTeqGNcabrOjZtA1H7lOX6aoVkMRpURTd0nGcaQxXCTSmpK3EgTiMWmKaxzrElXZBWk1F5o3Juy/Vcz6/d67sWgegVxFcUdIwqa3yY4yMdpGzTkK0TlT1jSUZmC2IWhl62joRhikWvb8nmihBt1iamnGyZY6oZiClBKpPK1B2SYTorTL8QEilNtG1LUsE974sNhmDCIoIrN0ciyyDfilLeb3dYa9menHLx6DH9Sc/2ZMfJyQnnFxc8e/YSTx494uLinK5rddGJRE1RE0igG2gSIoMunjlOXL0nlNK7/R3vvP0O19fXXF294Pb2jtvn73C4fs7+xbuEceTkZCdNYjLJGsHQTaYI2wo+b+mcY3MKG7URePToEU8eP+Klp0+5eHxJv9vQbMSGobgjz/PEMIy8994L9ndH/st/+U2Oxz2nJ1ushZvrK0KYaBrJPAt8WzGVB4w8p3qGeQ6QE61q+FkjPl8iIZVFCsosN3DpU5VMzxhtCsvdKBtrzlUpPeo8iiyhIm6bVgPGLBHHlMkl7ReVD7Da7KU6L5uK/lkdFC41lKyd5fuFAl6UVZx7KBf1DY681GX1nzyArGqiUyq38nj9fKtqqn6Ge1nz6r60tp7XklEvwTDXz7uUi+JqnUUbuPZLyUJ9NlA1B0FZlNbpkLqYhGpJU5X+xUi0zJMZ5ilU+SOyjgzkEqgECckWjBOiAsljkiHGBVLNKampqZ4za8nJ6viKDOhK/9thrYwrWOc1udP3DnhvsabFWJhnGezOWSC38h6NMYq+JJw3y88xlWJeocEEJjdqKxRr0KiJiF6XhCYDclWJWT6LdRabbW2ZrCFSY9RNwhrMoold98eyDqRvVdbSg6pfIcJlzrDY2/wOgPus74hZ5IkePb7gcH3D3XHSEruh3bSEFDkejsQ54J3DYUixaOUtGK/MI0FIYJJjOIwi99P1GLJCcomut8zHCWt1ANA5xnGknQPOGsZxom072lbmqHLO9H3PMAwM45FEoutaDvtbbu/uePbyK3z8kx/j9PSMk5NTPvHaazx+6QkXj8/ouo6UEptNr/ey4OdTPOJp6FzLGAPZiryR+FoN7G/uePHec65evMeLq3f5/Oc/z9tvvcX19Quev/MuaZ7IMbA7v6DvW26v3mPeH2k3J3zuD/5Bzs4eEXLirXfeYj8eGeYD7737ghCkx3d2esqTpy/x7OVXuLi85OlLL/H4yVN22w1N4+VGt5bLx49ovadrW8I48cZXv8oXPv95fumXf5lf+ZVfZTweubw459WXn2AIvPnG6xwPV3RtxtgoRrhRtvvdyYnYk8wzKencR86keWQeRqyzbDZbmkZESo9HkVfq+57tpuP29kZmgMjgjBJh9DCif5miBB7ny3Mcub27pt+0tG3LHGaiEjDEHbZUJ3ovpoWtt2xJEtgkeJkaK/LKdhxYiApZnkMMA/XN6YZfnrlsNMZZ9VKyNSiXgHmPfmzFoPI4yDzL/aBSdx2BP41UCtaWz7JypV3BnQXKkyBADQalAijVjK0zfKneDw+PIlyas5c4ZKU3eB8QLVLDGdpW1RDK5mjqxhhVptvouSTrvBCmyiQVTb/1uTDG4Bqngb/BtS0xTuQQqjNuypmQAuBojCWHgbZtaWlxTphrbdfRtA2bvvSvrF67XI06jRNkZ5w8w/EopoHApu/Y7Xac7k6kR2QdTSfiAV3f03r5O1sCWM7Vybok3dM0cRxHDvs9wzhKL5osQT1nbT1IL89pX9p5h2tFaiqr510YZ4hRnIJjwrUiwDtOE23XqmhCpPFee4lJznLpq2WpbHNezd6RJAHV5M6Y3wGmh1mzqBDFmC8mo1PhMug2zUlvaifq38koLADoBHTKZXCy3HAiR5+z/D5m9N+aXVTnzMU2omYuJdmjNCItMRqOx4NCFKZmEhcX5zx79ownLz3j5Zdf5uLikpPTUy4vL9nuttX2Xiiiaj2eBZuf51mkfkJmf3fHlCLjNLI/HLi9ueFwt+d4e8fV8+dc3zxnf/OC8XDLcHdLmA44Y8hExsMNnTvhYtvjzs85PX9MjhHvLTFkbm5vwWZyTJyfnXE4jrz88sucnJ5yfn7Bo8ePuHz0SAdxpWrq+54QA857bu7uZDJ+GLl5ccVbX/86X/nSl3n+3nsUv6btdst2u2GaRm6urzCmNPCdbsZZr7RAiybXnF5+bhA1CWeVvl0yfPlKMWC0klq3de7BUPKT1fflFw8x9vurb6kOih6kwk3c/5vMg2HX1VO9rweh8aJAOwvcVh53H/JbToWpm/UaRsy5fO41cej952B5ogV2LMDlfTbg8j7Kczz8DAv8vCZo8OAxeXmSB+ci6cb2AVekvs9SBTpTiBcPPsuDf8eKgkhlEDVhiRTURPtD8rZ1zchAuFTOMjeXciZHQ1IFiGxU9slG2ozAwMZgzLQSr7Uo1oFvHIWgYotUlkGg4CSi2GEeyckJSclCck40C72oQrgy2pJl7GPTNoSghqZayacg84JMqkVqEjZrJzQXVRGjs4iiKWkthLgEf2cs3lhm6XfUXm4uPV0U/l1WzYIOiHq1wvElSKm+Ql787j7M8ZEOUjGoz0lM7G/3uKZhtznBOs+7773LFGalkSoEUZp2xoqpIdQGtixc6T/NUURHQ4zkaZabZgUz3cu+NFsajkeRvm/KHIb0wqZp4vZWVBD6vscprfMP/IE/wP/5f/6fubh8xGEYODk55fz8jMMwcX1zRYgzjfNCzR4HTIbtdoc7PeXF1Quu33vO8fbA1954g6987Wv8xm/9Jl/56ld55+23GW9uyTERhxHfQH92wm63o/GOTd+x3WzIKfLuG19nahy/7w9+L7/rd32Gx0+e8bP/6t9yMh5pu46vvf4l5hT41Ld/G9/+nd/GcZr5vu/7Ps7OzplDoN/saLtOMGfn8Y1ns5E5qSnM/NoXv8AXvvBrfP6Xf5Vf//yvsX/vOWEYaPuWi2fPODs741Pf9ilee+015nnmjTfe4Pb2WtQvgBJo5GTnCuVV1MHwPjXrhxvmPM/a/L7vWPtf6yhBSt+kFj/Le3hIHHi4ma7//fC9f7CSwxKkSp81r4gw66C6JiusGWQfVM2U4z65odwZHwztrdloDz9DCeBrYsa911mdtQ96/QVyv//7teoK+hzW+g9+svtPXO9XUyDBVYVokvYoFaYTcgEiPJyWxDSlRMzLWiqKC6VyLYll13f4plHlGYfzhn7Ts+03FFo4s+hgGmuIc2ScJ/Je5gt9UW5vGrrjQNhuiJstXduK/U3bCryNoe96gk91PTSd6IT6psEeDkzzJDJrJfArXJ2TeFWZnIU4hPTUDeC9oTHi01XUPNIsleCQSmCy4ETyqCSPhSVKLu4cuapVGGdVSPmDRzu+0fGRDlIpJjCCXc/TTNtt5GRgiHPCNoqZRlUbN2gDvDjrJqHAqk2HyOgZcoRsxRW34KxGLS2EkeYwUYUuo6Pve53QFthGNkVh3ogwK8zzRNN4fNvhvRcpoNMz+n7DFAJt27LZNBwHGUg1MTMeB1kU45EQAm++KRTt2/0t++sbxtsD77z7Lm++/RY3Vy847u+Yx0E25JTAIa6+KREmoXaT5Ub0TUPjHS8/e8bLz57x6PIRX/nK68Qw0XeeftPy2ic+xpe//CXSNHA43PGJT7zG6XZL4wzWeLa92tt3nRIaDuxvxFTt6vqar3z1K3zt9de5u7mRxmyMWN/glbLunOOlpy/R9T1f//rX68Ymm1BcCAcFPisbYqkudOOpCvMfkNWXxn5ptP9XX4PajwCpoPKqp7N+T+sAUgeCH1ZR3A9UD9/v+jlrlbXaHNaB6RsRFu5VMt/guB+k7leTD1/jYZB6+Dxrgsb9iuyDX/Ph5/0GT72cJx0C/paHoUJblH6flgCVbJBlPtLWTTRWYdikG7kxFpvuf+51MK6CAtMy9JqywyVbIT9j5HHDONSB8pgTJkIwljyOJF3TpIzNhmPOpDkyqWp713aCiKTMOBzFb0v3t7hS8LdWPN0sGYyYwRpFc5xVyrwiPMX9mpxpnae1CvVtehET1rGOwvSr1TFyDwqypHttzpWqj0J9a8bfByVs3+j4SAep/d0dzjWM08w8B6Frdx05yyxNZzsMlnGclgnunOtNnrWR64xQ0q33YvOsMvXYjFWR00zWeYWI9zAe5Tmd+jONU2YYDX3bcnd3VxdsCU4pRY7HA/1W5oo+8YlXeemlJ7z59ntiS+Ech+PMMAyc7HYcDom33nyTd959lxdXz/nK177Kr/3ar0ogSRETE/H2INVd29BseqwR/5vNRYfJSHboZBHv93u2m43odDnP2dkp5999wR/5/v8L/9P/6ft44803+Fv/97/JZ77ne3jy6JzPfNd38ZnPfCd/52/9Lb7861/kZLfh9/7f/q+89PiiKju/8pKwK2POvHjxgq+99QY/93P/ns9//vN8+Td+gzhOpK6j3e4wGM4eP+bxxSXtRuZFvLX8nt/zPTx+/Ij/5f/xv3A8HvXKlgy+BKhcIR1jRI7XlOarZq/rzROW5n3x2SqOxeV436ZoSl1dNtT7Wf032ljl59o4Z1VTrTbwD9rIPyigrr8vWf8H/XyRFcp1U3jItFsHuA+aZXrf+6mkjfufa23x8UHv/xsRNxaYb7nfHjzgHiT3weeABSf8Zq//IYZCrXO0Xaebaa5zRxiD0fOWclYft0AKgRhnDAaTyyyResrZZtGQ1PW1ZrgBWC+VfdM2qrQhrLlhHFjktFbVMiLA2zQNDiMGh85xmxJG2XDFUl6gOOlxtk0jLLqm1dfyNVgVG42u6zA6KznOMyX9KJ+H4hbhnLyGsTRW+m42U1XfQxKdyuM46ohN8dUS0oTIxaXqKlD870ollVjEij8U4UePj3SQSmnWXkQm5ZlhuMM3hmGcgZmcveKfCo2UG8UgFROWrBVRypnWGsCRCYorF100hQcUk3ZGWEdYVRuwlnkcwRlCMEzzRLESALkXuq6tgSvGyDAMahR4h2s8x6OI015dXZNj4O72mnffe5cXV1fsj3e898473FzfcDwOpBQwIZJDEMHILLJLvmnw1sngneCa2JxJGFzT0m+2TNPIydk5F5eXPHp0Sdt1jNPM/u7INI5Yk2kbQ99aLi9eYrvtuL3NTIc9x7tbzNMneJOZU+Bwe8XV88jxeOTtd97lK69/mXfe+DqH2xvGGEhxhtTQpCywh3XMc8B3om348Vc/hm8aDoc7rq6u8N4B4nico/oDZ5mLKvCefGngWsGtwD3I636T/1vDCll7MIYFLy9Yet20723sZgX/yho06Bt9kNqXjXp9Y66DzgcFqw/6d/nZsvEXOPQbQ4bfKhDePwESqJbztYJbV3/78L0/TBDW35fflU3zm322h68hp/IbX7t6LuRf3/Bx+uAlkJTys7yPUpLqZ84ZtRdx2tgzWrHm2qdcV00FQizBWAg62veaZ7GatzIHmbXf5uySgIgtyTKsn42FEMSRW/5AkpZCrc/Lp51DQ9v12Kxzod6DNYtNSc4afOQzemtXpBxFKvJyb1nEqsQB6DVrrCUZo6atVoIVploNoay9lMCZRDRF+WNlfYSymlW/b633+K2Oj3SQmscDIYhelwFiHHn+fOD5ixd43xBDC9EILZvMXIYzy7xEEoaKISMSQbY2PrFiQ5A/4EYFncA2wgQrskUxBI5xZp7Humh9I9nW+cUZIQTu9ntub2/5pV/6Vdp2y4ura3CWL33py3zpS1/i3fee895bbzLeXIlUi7PgDbZpsI1TvLnHGcem2YCxzDEyqH/N8XjEJKFdO+vY7ho2Tctuu+XR5QU5J77tk5/kD/7BP8D3fd//xD/9f/5TfvXzX+Crr78O1rDpWl5+6Qmf/rbX2J2c8pnf9Z0cbm/58q9/kV/6X/8T3/npb2d7suWwv+U//vzP8XP/4T/wm7/xm7zz9TfIKeE0a+u7htC2pGxovKfvOhrTcNjvmePE06dP+GN/7I9hLfy//u2/4ctf+hLbTY9zlhBmxc1jtXcvRBRvdeYFUzXpHvZfqtBnSvc2j28GTZWjbGDSLP/GVcRawQQKEWDZPB5u1B+UPX7Qhl+f6xscD3syJZn6oH7Tw2D0YXsAJWCvflKfY12VrVUp1q/xQQHrW573B+eqno8H7q2lurxX3X6jBtfqCDGwPwryUJh95bnKZxD4bKlAco5ilJqjQmjqUTUv/Z9eFVdgEZiNKTJMotQub08IPl3X0m96STKNwRWXYCe9n5zEn2ueZ/bTXnrbtXKyVYTXWVe/n8JMG0QSrnye4rIQtVr0jZcZsMI2LAPrwtDBOkdThtmd9KbkK+OMZbfZqnKLeFh1d3uGOTBNgvwU6a4UiytFEVPIqzEf6fkP01Ddtr/VfF85PtJBarNtMVix/c4ZCJqNB3a7U6xvidEQo5N+VC79JTnZJkZmpGnadp3K30tmgDFq2VCk/+OixbbacFJKHA4HyfrjTFLW2vrmLPpXhco7zzPPnz/nzbfe5PTsgnGemKaRq+trQgjsDwfCHJBibZlFcBp4RNE5YU0nwTFBxGFcS7ttaIyj73q2mw3brUhC7bYbzk/P8I3j4vFTXLsBI94u1nvRCMtZ1ClM5ni45Z233+TRxRld2zBOljTPfP2rr5MRzb2vf+0r3Lx4zvGwZ5yOEBOdBZO99L7aDu88XdPQtR1xjpycnnDx6JyPf/zjpBR5++13ePvtt4kpKdFEFbYX+XnJAq3DZg1WuuidDm4UuKUca+ZQFeT9kMSJWoXl+5XU+liCTgX3dEP94Od6CPk97A89/N1DqOzhc67/RmBG84G/X+uqAffOwfuChuH/y96fB9uSXPWh8G9l1rD3PuOdu1u0GiEGSSCBnuCTGvD3wka2AH3Y2AoTEALzEQSEZWQHEMYOhTGTDcKE45mHH0MQzxY4Asxnng3BMwID4j1GDUYG8YQIjYBa3X27+w7nnmEPVZWZ3x8rV9aq3LXPOVcSw6Vvdpw+5+5dlZWZlbl+a169Y5HUVaOh88JpUlpuY8vB6rxcs54D2zM22xHF3oEzij7mTdZGlw7xXvZbJLTBw4AJKwF9IujIwAK8t0RVL8yD2GxsWaTgXgQPB4cueFgidHFvkiTMRaRNUQprYjouMhS9BwEUsap3QAq0DSHAE9udjVpzSbfkg4AQhyiwCt2mnIGdjzkdA3sRkiHYGBfmwbZ84z3aZglynAO1opqZSB8QXSaQAnPjK07K+rTPo2AAwHQmMQLPCknquc99DogMlqsVXCCslissmwYXLuzi0z/jRbhxc4Fbt455o1kuWhiIQNZwCfTo7IDgMZnO4FzAojmBjxwEqwICq/lcn7xSDr5UuJ3P55xtInQgeBRFieC5rLwxBmVVom0bGEOoKo51+B/vfCeeuf4U/uE3fROO5nO863d/D3/8oQ/h6gMPYndnFzSboqwqFFUJT5zDy4M9i1adR7tssTx2gC1QTCpU9QSz7QkuXbyIq5cu49qVq/iEBx/ClWsXEMAAsDWdYGs2w+LkGHVdYdF0mG7vwLQupo4CLlzYhzHA7/8/78L/9v0/gL//D16PoztH+K3f+i00qzn+3f/+o3jssY9gcbKA6xyKrRkm0ykuX7uCxckc7YI5Jeo6TGZb2Nm7gK3tHdTVDIcHh3jRC1+E//mv/hW8/NEX4/96y1vxC29+Mz70oQ/AdV3M0OHYxdbFmB5DKc1RaQmlLSI4cIBgs2pSJm7hkIWjTcAeY9kAbCSaSQoR4urDKEDp6/uyDXI6lSiFoT1GS1Fi0Nbj0LakTdJHDnJJ1alilPR9GqS0A8PZ9oCo/soklFxSGwMmLTXqZ57V9Fy1ijbntjUzwipBgj0PRhFhNpul9dBBs6IGlCzq3jksFwtYM0w+XBQVAxWKlHJJS5PM0DIzWzguz962LdquSSrP5XIJ51qEwKq9qiy5kKF37CS1XGI5X2I2nXKpHWtQ1hWqirOWs42MlT2hk5x+DEJBKhg7zzF9Pqodo+qvKPqxugjE4lBSrjgZdGkLlJEhpM7DGkLXrNBGEKqnE5wsViBTgMjEuDMGaqnWK2YOa0yswcXSWgBQupJBh2ijvTFv9zRIbdcGARYUCibchouw7RYVtnf2cLIIsMfH2CqnXDW16RBDwTGdzdB2DmU9Qdc22Nre5g0FFvlTFmUQg9GqRVmxx8psNoNrWy7OF4Dj4+Poys5xTJOqRLsKXBnXeVBRwKED1yoCEDoE16DtVrh18xnsX7yI7a0ppnUF1zUIFODAFWEdsyH8A6YZ21vbcLaFoQqmrFBNJphtbWEymeDixQu4fOkSrl65jN29Hezt7SHAo7AWs+kE00kNgkdVlKyumE5x3B5i4dntnqxB0zaYHx/h9sENtO0JOjeHsQ7GBBzduYWT4ztolg1XZe1KuLaAjWWhvbXoAlCUNSpbwAKwxKljLl25gqsPPoDJ1haOjxd45pmbuHNwiHbVYjatYyZ4ALHyaYgb2RqD0hawBUX1ByU7okinw7LiIaXO0clIgT67dE44Q+LYVWzPmrqPgFh7jH/CEKSUMDVGoDU46FAGYEikx2w4+rteUkF6/iZV5iaJbbyR+i3GfS2hDqWqHLDy+X406sY1dSF/KC4dia6ldafkJL82i+HMWOIW6Qfg9yEONV3XoSx6sOhcBwpsw7GWzyJnWiIQMYEOIXCW86i6MhYwoUSAB3WEouOyPwYeHkykGVQsJGM/PDM7Hjaqt3mPmaIEGcuexMFycGwMkLUk9lACAldlaEOAtWxYYjuRBNWyXReug7dcN0riLfs0XcyUEDwoeAY7AggervNwLub9C4DtCPAdXweKGo8uppTjWnjOcT7EgJhlohBNFgCybKsLeHYkmH3w6hVQUeLoZInD4zm7d5c1rlx7EC992efg3e95L8ppjXoyhS0qNF3gYN+ixNb2DroulgFoVtjb28N8PsfBwQHquh4QuMViieOTJay1mNZc6twa4PjoCB/+8B/j/e8DmtUKVRFQlwUu7u7j5OgIt8MtLJbLmMIk1nKyBnZSYzZ7AIvVAj/2Y2/Cd3/3d+LV/58vRlEW+Jmf/mnUO7sIgXC8mCMA2NnZAlkLOI+dnV188qc8H9euPYDtrQuYzWapsu10Ok36cXbLJgAOxkSvv7pCWRTYnk2xvbWF/b1dvODTPhVvf/s78CePPw6qK9y4dRN//Md/hDu3b2K1mOOtb/0tPPHkk9janqAqLY6PDlFYg92rV7BqeV5SEmM6nWF/dx+2LEGmQOeBdtVgYU7w4HMexhd+4RfjhS96AZ588gn8r9//v+O/v+2tsJbjPPb3dnFyfITgHZcZDxzMGwJ7ZtnCxCh8igxBgAtdyiIgFYzLshzUFpO1ANa5cGk9OeR+E6HEOuEdb/n360RZS0fnsVfl49XX6sbebb1Ulnv15WqVHFzyMcs1kJInycDez2MwczWn/PtNgEh0ujUiB9VcBaqv476E0MYxYR2ouq7DfD6Hcw6z2Qxbkanb3t7G/v4+JpMJS+lEWK2WWCxiDkvn4UMErrZF27VYrDrOkB88M2IxN6hI7dYYJt5gLQyXhulwHGOWJG9gYaR+HaujO+NRlDV8IFT1FEVZoa4qVGUZU3sxpfchoGs92qZXc5uiQEWB47Siik2yUljDUl8nYTZxbIhAFeK6BnBFbwJQlRaVJSA4tO0cHoQuGDSNQbNquKhoYA8+MhaeCK0ntDEDuzA6Ur6EbAFbVvBEEax6xvusdk+DVPAB5KPBM4hLOTCbTtE0SxDiSytLGFOAoiGTxf0SAKHrLLy1qGOsU1lxsS+EkALzfACWqw5lWWB7ewv1pMakKoHgMJnUqKPbe2HYu6ZPdcOumZ1zKAu2JxUxseN8Pk9SwFNPPQ1T1Lh06RIuXLyIUFRMaL3H9s42LlzYgycA8Nje3cGFCxdx4cJF7O6wd950OsV0xtnR67oGCBwbYQgUHKyNsTpdiyBqja5DuzrBwe1bODw6BBEwmU2xWMwxny/Yc4wMTuYLtnkYzh4NY9MGKwoTObPI/Zki5lQrQLbExJQoQsDFy1ewu7WNuq6xmM/xxONP4GR+DGMNXLtCOeUaN945GASYgmKgNpfnCMSlDQwBXvg+HwZBgSIdyW9N+E9Toa3tKc3Jh/V/300bsyeN2aP0d5vulc+Gar31sY/N51xjHTyXM69w9g+WVsbA6TR7U656PG/Tqkp5jl6jMeeT8zRxhhAJW+5zzqFp2BvXW8f5IKMXHkvl4EwUhiUeYw3Kkt28dWJY6VPijUzcO302G0JVVmi7DkwW2EMOoGTrDqCYbYP/RgRzLu+DWICRkvu8ePZGkTrZqnhd2G2cPfQQA2kDV8UzomqjqLVgSdPHOnjRyhEr8DI4WsMWqBA1G4TAWiLq48u8Q5RCOckCEcHGfWJA8Oi4kJg5v2QN3OMgdXR0CLIFHAxWiwVWiwbGFqjrCkeHhzE+ysG0DYwFus6DTIApK34RsvnBWYGLgjM8XLx4Ec45juquKtjiAKtVi+l0ggceuIZ6UuHq5cs4OjyE61rcvnULN2/eQOgWEEeJEFVWLhpAxauGoJwgYlbq/+V/+QF82Zd/Gb70S78IIMLv/t67cOfOIXZ2dvDSl70UV69ewe6FfUynnBds1axAxmI224HYDyTjwmTCsVBVxVJTSQHtqsHR8SHuHNzBcrnAwe3b+JM//iP8/u/9HpqmgS1LhODw6S/6dDzxxJ9gUlmU1sCUFd77/g+grGtc2LuAxXyFnZ1dHJ8scfvgEDs7u7CGs03YouLEnDDoXMCkKnHtgQfxiZ/0fLzo01+MT/6UT8ONW7fwQ//bD+G973svjCE85zkPoW2WWM5PcHjnDuAdbMFqD+84TiV4z5HrzqIjJK8mLzV5VGyK5C4LISQXVyFKwNAbbb2JXWkYGzXk4NcJ4npfTNRzqUcAVD4TDji/ThPpMQI8JPxR7encAKTzsY1JaaPAkr5DVGf5CFDrWbo3OZPovsckv02EaczhY5MzyeCe84JwtElJ897j8PAQy+USJycnzFxGgm+tYeml4HghYyl54dXg5NWiam6aPgZT+gXYjdsYC1v0GS6oKDgWM3Cy5a5hiazrumTfdl2Hpm1jrlAOM+g6h6ryKAuutkvGwpacvDZE1ZktODtFYSwANyhxYiiArEWVCkZKoq4+DlEcRjgpM+cCnUwqFDGbPMeQliyNmQJt6xDAMVfecUmcxiGVKOLwCCVJFQ7GdiBbMFCRSXbis9o9DVLBdzDWorCsmmB7Oou3J8fH/IJM788fYqVbhJiryzAHlAyghktK1HWNtuU0+FVdRfdN5qCmswmqqkRdV2gmFepJjbquRFEU7SWSXSCm7DcASMofFBCWvG07lFWNo6MjHNy+gbbtcO2BBzCbfQDLJXN3s9kWLl++jO3dHVR1haK0WCwXMNagigloXdeBU61wgtmuI3Rdw+6q3mExn+Pg9m0c3L6N1WqJg1u38PT1J3Hzxg0AHrassLOzjemUM3Y0TYNQsFq06TzqWQkPg5PFEmyntQA8S0xk2S5oCpAp4D0wKSfY2trGhQsXcenS5ZSk98bTT+H46BDHx4eoyhJ+ewYDoLAGK+9QxvfoOi5a6LsYY0IEOAYwMbh656L+2w2kplxa0YAlXGhuDxJgETtPr+7L9lv2yahjRRxfTrDPitfKbVen2ZjkN1EPnhpUc3Dc5ACy5pihppDWK/Tf5GCxSZIaA6t8jpvaaaCWqxbTYM8hhQI9WGunGklp1HUdrDHwnePMMEXB+8YH2OiQbSh62kV7pIyJHbCGz3SBAMvSqLGx4Eisqkyxj0CUYALE3nsejn+H6FkYYniNBwf1gs8LgQATAB9t4bI3DcGQ5YrBiUlBKmfEUh+X8CAKUagJCJ1LcVyEgMJEB43opGHIAMagcxwXSGBJkIiAwPMntSbpd9JCyP6PGhAEnNfj9h4HKSb8s+kWJpMay6aFNYSjw0M89vjjqGb7KMsqiqIuvrMYbS1icYy2NgVHpAcAuxf2sVouMZlykcGmaTCZVNja4hpPdV1he3sbRAG7u7t46KEHcXR0GydHK5AJOD45ggHHRexgG21wWCxOEJYEu7sPYyxXeo1G3J2dHfzfv/bbeObGHfx/v+ZrcHh4jN///f8Htw9uo2ka7Ozs4IEHH4QPHvPFCS5evIjpdJIOSLNqcHJyguXiBB/+k6fx5JNP4Omnn8ZHPvwR3Lz+FG7fvImTwztwLSed9Agxj98ERVnAgdA0e9j9xOfiuc99Lo7vHODo+BBXrl5D6xx29i9iNpnhPX/43sj9GNiiwnLVYntnhu3tPRhjowdRhec975PwSc//JLz4xS/BAw88gA988EP4/n/z/XjXu96F3d1d7O3s4ODgFp66/iRm0ZED3qGecE7BxWoJ1y3RtSsmIiGwLc+aqEqPNWmMBaiPedFqPZFSperqWEyP2kn9nzT8PFc3yW8BPOk7cf+xN7FRyL3iJq+9+nLVn8xDO3toQq9BQQC16zoEr0qLj/SpU+TI/ZuAQ6sUwQU0UsYA3ddZAJX3N1jVEalI3yvedmNS7xjQ2UzqHHvHIYSUw3G5XKJpOG+eVMPWNqmmIcznc1gDlLZgiaooOBSCCB59yqOmadDEoqV6DiWx5FXWnF3FWIvj+QlO5ieDtRQPPFsUmFlOsQYAbddhtWqwivvLGsPOG8agKkquE2WkBI1H4aO6MWa6qEuOTdyazTCb9bFcy+WSM2BAUo1xCI44H3WdQ3AOq+Uc3WoBBI/FfA4qWrhgMF82mM22UpDwZFLBNB1M14G6gACWjrpuqDlgSS2gW63YLvaskaSCAwVOOZS4667FMqa+t9aiqGt0PnCWYLCAK8XKTLCo6wm64NF6x3nuDLuoB8PxDK13IDGIWosQ2BGByxkYGMuxO5PJBKu5ZbsPl/rkJLNFwWVByKSMFaQIiRz6rutinacD7OzsYHt7G4dHhzg+Pma1QtvCGMLh4RG2d7awXMzRRYeB1XKFk/kJlosFbt64gZtPP40b16/j4OYNHN05wNHhHSyOj5PBlLwHqjJKLgE+utOfHB+ja1q00TvHg+DJoHEBZtXGNWQ1A1wHY0oQsQRliwKmqHD58lVs7+xhb+8ius7j6OgEt2/fxsnREdqmQdc2KOsShsBqPR/VERRVeNGrClFVwVkcot2p41gP4cSCR8w3Ns7Zn2XUz7l0ifUwxnAg5AjjP2a4199pKUR/nqcmGrNBnabeGyPoiRjTsNx7DqxDO9ZmG06usjuX9KVA7bS+c1XkaX2d11ZxWjtNrUhqvbS0baOnnoSaIAQYsbl6Dxfz3IEKBpeMaRg8lwic/DqgI05tJAmxEcQ7NWa9AbPOZAjWRmknEAAnhqiYS5Q9+ZyXIbFqzhgO4GUnDQdnI61BUPYuqfYAzuZCrDUyhJTcIA6cvWqrCgU8x33WNRc4dewg5WKqOBADj7xb72RNWMrP7XRBOLi7bPc0SN05OEA9meF4vsDtwxMslg3myxV8AC5cvIxLV65gurOLsqpxsljhqWduoWlaXLhwAVcuX0FRljieH+P609dTnM1sxtLSYrFIqYtu37qJorQoSjaqXrmyj6qs0DSc9bwsSzz0nAdRlwEfeezD6FwbC7J51NMK3dKhQsFBx84BAbC24OKIBRdEa53DY489hh/78R/HV33VV+HSpUv41f/rV/E//sf/wOXLF/Hg0SEAj/e+730ABTz15BP4kw98AMvFAvP5CRbHJ3BNwz8AfLSNWltFFUYJiEdPVDK4pkHXNOgM4eTkGEcHt1BXJeoq1tUpSrTzBT7y+BMwHqhsga2tLTgXMN2ymE23Y8C0R1lZfMJzHsb/9LL/Fx75xEewNdvCH/7hH+AnfuIn8MQTT6AsS1zY3+ey9gRsTWesAvAObdciuA4L16FrVlitFjCmd4RhjQQHOkJUBghg91uf1BjAusF+TP0lv/WP1MW0JWeY7qLjitxvrcWyWbKNM7oujxFnMWprG1QI7IRTlmXKd5YSkcb7dZJcaSINipQkz01EwXvYWJpmzI6mJRMd4KyJtEhuwq3z/aKuvjuQ0ut/JiCOSHX5Wm4CrPOA2Kb7jDGsxq+qxDjIc9q2RQdAhmAoYOk826TEnkxAgE1ZE6qqSnth0JzEJ3EJecmRJ+mQQgjJ9KDnq+O4xLbp4vtmO1PAolmxOtx51FWFrdkU3rOk2Kw4kXRhDSZ1jWldY1JXXIEBhK5rUZVc4202m6GqCtZSEJ/3ypYgBNitGQwFIOYcXTYd5ssWtijQdh5N28GFgKbpsGo7NF2H1nN2H6JYWghxPtG7L5CJmdcDQBauOB/83NMg1bYrmKIEUjp9D+eA4+MjXLlyjQ2gdQ2JiC6sRSiB2WyGelLDGFa3FTFWoizL5CFnrU2uzazzjwfccIxMUcimJ1YHRDdRhMAuq16yRei6KQFd1yIYTsNE1HPfEr9z6+ZNLJdcTO3BBx/EBz74Qdy6dQtFXcEYdhZZLBd45qmn8MyT17FaLrFaLbFaLDhLhXdAVDvZqoIBl+C2UcT3nqIEGokCgMJajnRvGg5cNAAMu5NK3ANg4joxl1YWJerJFM4HWFuirqfY3tnFbGsbs9kWlqsVDg4Ocfv2AQ4P2QlE0r8471KRRsT3BhJizGUAEN1n2WwLRHEJiHyhQUz/EuNNxqSkTZKJ/psJfh9/k4hWtC+SAhz5XrwyRwGQwC7yGRgK4Iyp48akEXnOqLSn78N6X/n8zgKWfh3y7A7j962NQYFMvsa6DaS6CObStGQz1ufH2jRwDwNweS6Sg1EDow+8z2SPIIQU7yOF+zYGLJNhD9TYj3cdpxZKjEAvhcQb4lz5J9EHIs7KTiHmEWUtjbE2VgyPdlRwEG1v/zEpplD2pMRFiX2I1eclUJax5IYcscAhH2Tgo+0pRCnJkIH3fbJuCfcIceQ8aDmDWNubSaNwhuSt2z0NUrdv3UE5WYFsgdYRVq1HBwO0HrcODhCqLcybDodHxzg4PMJkuoPnPPcRPP/5n4zZ1hZu3T5Ae3SAaVVi/8JF7O7uYH9/D4YKPOeBh/DBD34QN556BteuXsUTt+9gd5dw9cpVzGacvudkvkTwwO7+BVAAVju7uHLlCq4/8SRzyhHoOknbEzw82hjLZ+Ecu4Wylolz/J0cn+CHf+hH8EVf/EX4si/7W9jf38dP///+I24dHGAynWC+mGO1XIBCB+O7qNY02NreUgcdcROWMb5Dklr2BMJEcZ+IAMOZ3BEC2q7F0XwFd8JSpA+AnUw5a4MDFidL1PUUW9Mt1LNtWFvikz7p+XjRp38GXvKSz8Tx0THe/vZ34P/+tV/H449/BLt7u9je38dqOQcFj7LgzMs6XoNzo3G1YOdbeHQwMW9aH1ET5BSAmQb5+3yc9WmNomGYudteApK0OclGgp7T3ZQgU+J1ciKrcwmKVKUJp6TLEqkrz5En89QSWE/w1j369G95poBRnv0iSX2p3+H4BzFIGTMwpubbxBxsAmlgWO5iTBoce/7g89FPR66RviODJr8TwMbCSCHuPR8CjI8l1OP1orZyzgPkYKwbwHkA16SLq5HUedZLzse43gJ8iOEEHiDD71M8BqWysY2/PRFc41Ns06ppAO9RkI8SmGUPPw+0TQfvPJplg7lZwPs2mhp4n4oruVQBlnptBKCuKtRFAZ3hPxCHnBjlVGGsgY3IzRjKKep8ABzYbGACAN/FVaDInKyHUGxq9zRIhRBiUJlH5w26ALjIVXQ+BjOSiRIOovHdoqxK5kLA+tmq4kBXS7z4hSW4tgMFQl3W6FoH1i+Dy1Q0HVarDs5xQkgEzp9W2JJTIkVFcQCSqgYhwPgAkAdXqvJccoIAUIheM4DvPI4Oj3B8fITFfI7dnV3s7O7h9sEdHB0eoo2l38l3KCuT0gYRsWNBUreAgOBgiOMk0FcmgBFwij8EAC5EzyULB86W4ahm7q+s2RPJWLbZlBOYcoJ6uo2d3T3MdvYw29pB2zrcunkLt28f4Oj4BKu2Q+c9ypLLVLPU1EU7YgDg4VwL56J3ouTLoyhFUZ+VLiRgio34M+plrbQndMvtBVodNeis74HVaKZXg/WSUx9423VdChLWz9Lj0IRee5QJkU7515Q6TkAqL2CYc/7MkBg59oMxbApaHgOHXFKT2CC+fn0d19fufG3NbkM99CXJZZNUkvWzafyntXSVfkeqvyTPRCnaB85Nx7uUx2qU43a/ZyQbfTZOk4FgdKlhCcrDewep12tST4jSjHrPJB6B7LbtAaAwgHNRQgIzedGGixAAyy7kUSiCN0AwLmodQupXqkKYzsMSh8rUMTdmgz5xN0hy7bFWpQ2ch9ALg03RkzBmi4dnptiRZ/ACeBVjxe3o7hy9nc9u9zRIuUBolw3aAHhYOBh4siiqAmVZYzbbxuUrV7C7t4/OB0ymO5hUFbx3ODlZ4MYzz2C5XOLatct48MGruHXzNt7//vfj8qUruH79KTTNChcvXsTh4WGskLvCe97zh3hyfx/wHkeHB7hz5xBlUWBraxvwK6yWCxwfn6BZLtG1LRaLRc8BewcfwLYp7+FcgCm4HkwI/OLIEqb1BL/+67+JD33oj/HVX/3V+Jqv+Rr85m/+Jn7zt34DJyfH2N+/CrgWoVuqo6I4RcjhjUF0kcimtPnxR7LDB8+lPkxhYQobPXOAnd1d1NMpXODAvbossbu7h8JW2N7ewUv/p5fipS99GaaTKW7evIWf/j9+Gu96xzvwzO3b8NZib38fzjtYB8ymE7gWcF2DxeIEXevgfYfgO06zYjgti1T1lDno4+/XCFLKCTH8NJMm5O+zCJqoWyS5p3Cx8v7IFkmVJ2t6nkSZWlrRdpBcBajBRXsDCqCJakXbkjbZjs5qa6CRSS89szNUOX606re1d+I953VTzzpLPfvxbqfNJYTQ77cIqmOpbtPeGGEGkgpMPWsA9EH2uKgSozoVyiMzMmJk2W3cWgsXHY6IVSbygFjVwce4K645ZcnEulFAMJwiicCZ1K1lJj4A6MCFUlfegbznyr7WDlR2ITDdar2DI84R6INBWU1hbQHnCc4xw90FD2cRAdbHgpEWZHwymTwrXNA7D3Q+xJgEE11DCd7H4luexc2qqlFYdgM1xmC1WKJZtfBtC3iPqihQxbxdi5M53F6Lrmlgifhz52NeL49VTChL3mO1XLHtBEBZFqiqGnU9w6SeoVk2SccNMLcTnOOMDYp7psDJHol6ouOcw52jQ5RlidVqhe3tbezt7WFnezsG6tYwKNDOXSIuTKtYKUFgLyF+Luugo04DgOikOTFlCNHFmIjr2JBFURB816EsK9TVBK1zcKGDNQVm0y1UVYULFy5gb2+PA57rCifzYzz9zNO4cfsW5vM5ti5cQFEYNKsWsHwoAoEzNLsullhx0bfJs10RPaeHwBysbvm/IyqP7o0clMaAK7Wk6mfJ0jkXM4OYQb0q/ajzShQ54U+PVCAhn49JVkCf50+AsbcNBRhzPpA6TQKReZMCCv7eJyKaj3WT2u60NdBrJgzVmP3powHCs+4ZVc2ufTYc5/rr7WFHz0neT27nG6hM0zvrnVdEJmPNdbw3DikxNsGzp583sQaerGHsU+I8wVol5x3gua5T4IAokKeozmZ7GkNE9CwMHPGEqJUiHzjDhigpI0CnNfFspXJgYS4gwAb2vBXPQx8Zp+A8P4wCa5sMIK7vgH92SFKPX7+Bqp5gurWDSc1lITwMFqsVrj95HYfHS+w+fh07u3u4ceMWZjs7mM8XuHnzJqwt0XmHsjQ4OTrE0wQ889QNLE6OcefWbTTLBcf+NCvs7Gyh6zgmpigsuqbl7AjWYGtrC9N6gul0gqPJBMeHJ9jfv4C2aXF453bixoWz4qJrgLGcoLEIQFlWHEEeg+XuHB4CBLzvfe/Dd37nd+Arv/Ir8QVf8AX4f//PfwW///vvwh//8R/hqScex43rHMjLeeu6pHZgtZ/laO+Sy3CYrEAboIiCsQyohqPZJZiwbVvAWmyVJad58R7Pe97z8eijj+IlL3kxlssVfumXfglve9vb8KH3fwCt89jb3cXOxT1WkRAwm01g0MF1Dbp2hdX8BE3TDryQknE3JKVITyB6ndDw5Y/Q5bNAY9P3opaRlohOBKlUpydy13kG80H/GvDU5zqLwsDgrDhrLVnl/Y+BhHh8bcqBll+bj1U7EQy48kQIhVj1/W0C3bPaJqZBjyWXpjb1/9FKdpuuTZ+HHFDHHo5eP4f1PSXrIudsLDBb9gMC227EiQlEsfjheuhECJ49BiH3AlQUsCAUluAdmx1MXOfOeZDzCDYgWK5m7Tv2CCQCqgKoSuIsGJSi4QAOJwYXMrSKqeC9TcaisgYhJr8FEVZNk8JT2IMxVqSKiW6N4WTdXjz7glj4zicl39Mg1cXMwKU3aDuevKjRjudLeLsAlScgU6BpWtDJnL32VitsbW/zyyws7tQFXNfi6PAOlvMFDos7aFac4byuKzgPNB0TBILHqu0AeATXoYoJTflMc/46a8q4GViXbK2B9yYV//IhwHddTCc0PHDGGI738j4lt71x4xk8/PAnYGeXJaqrV6+iXS7guw5d28F7F1NAdakfG9OyUMExUNodWmq7yLUgjguylgs/MlE2IMOZzquY5JIA7OzsxJIHFnfu3MHh4SEODg5wfHIEWxYI5FDXUyyaFs61kWB7hK4F2haha+Fdg1Rd14AdOkK0HAeA2b+hhBByKYqA08qG58RjI0BFFZ8cyACx92h8FMLM6ybSTC6dMaHnsenPckcFbXvR9ikAKQuCSFVaupL+NPg470Ho1U2bHBk29TF+T/QYyxmFj6GtSbIDiW34fgbS6xnto1U/buorV7uuX9STV70H8rHkEqL0K8wIn9UYTyT3KYlL38tCrY8ZKvh5zCxRtJMJ42RZNR/V1QSK1cPFC5BiiQ2CA8F5AsWYK3iKDlz8PM4wYZM9XVSf1lrOzxnzkLLXY8cOJ0iyKIgQg58RNSSRSQvog8PDs0CS2r94FR7AqulwtLiDrmPXbzKEajLFovF4+sZtzOdsF9ra2gLA0dyXLl2K+t0ORclcDRmLuppEYCmwXC7RtR0uXbmKw2POoHzp4gW0bYuqsJhOYjQ5Eba2trA4WeD2rQMcH8/RNBzUW5UVvONMD/AOjWsTqJFpQaZAWVYwhrkvHzimyQKoqm0URYH/8+d+Du985zvx0pd+Jj7lUz8FX/AFX4CqLNhr0Dl0ncNyucBiscB8zr+bhussLZsVexg6F1MJcVR52zZoVg3arkXbOjRtrHHTOVYXxhoxq1WD7e0dfOInPoIXveiFuHBhH4899hj+43/8j/jt3/5tIHoHPfzIw1gs5nC+xXK1QFVP4NoOzXKBk/kRmsUxqGsA70CWUFclypLLexhwVeMuZpoOPqoJMCRUYYzzOgcYaUI4qlIaEOnojkEc31GWZSrt0EROVMDjNFtK3nSyW/EWlHEQcZb6QfCj6lvukbgc+Yw1RmF0XfKxSb9ja5AAFT3XnmxdFNbW+KNVx2ng3sRDn1eN+vFqw7UYAk4+SxLPtCh1yr2aAZR3p1WASXIChr8DB/RGTq5/90bFzYXofBV4dJ76sZmYYNZ5x0yfNahsnaTiEGkDVwsOKAoOt6HA2cvnLXsGit3KWMMB/gXBg3i/B2YPOeE0OKk3OCEBKMpexPamqJJI65i8ToODA5s0iLjqby81nt3uaZCy1RRwXLyr7Vo0Tccu04UFtR3CcoXWBxwdHWEymeLkhEsyz+dzLu5VWjTtCjDsejydztDWnIa+rKpYUK9BXU9w5+gYhiyqokDXNpjUFYLvUmr+ruvQLJngd52HtSWIloljFM6cq3uym2ZS2QQhjP1G5eS2HL91/fEbsNbimWcewqe94NNQFAW2dnZAMTiuaVtMmwZbDadHms/nqRhjtVzGlPoulhroUiqXVUwPs2paFM7Bu4BV08b4CgaQsqjZw3B7B5cvXUFRcAHBxx9/HI/9yZ9g/+I+Z4Wf1Ohci9Vqgc61oC5W4qQA1zbomhWM65jrtwWsBcqCS28gmswQxJvIIASXuDNpa8Q4YF0NiM1ANaZG06rYpHIRAhSGDg4I7qMioGOquvzznDiLehBACv7VwbxJMjJMNMbAcozTz+cufRFRShWmRh6Xd7N67bzroUFyUxtLjnvevj+W6xJQRQLbSzNA1HL1oBX3iAagsbXP37kwGeItitRnb+fSTdSFKdN4dHoSkCoMgwq5gC6o/mJgLtuaAXLRJdx5eMPVEbzzADgJbPCs4AsgVNbCAyhitWcnttDQ6zh9ILaRBcPmeKKo9gv9TEjsWRwnGgBWkhj2ZaQojppzvrd7GqTqyQRkStTTbTjv0LYd2nig27bDYtXAFCUeeOBBbG9to+0aLOYLzuPnHeYnS8yXJwjBYWtrhjsHDVbLFcqyTqlRqqrChz74QQRTIATg8Y98mIsiGoK4SE/qmlOeeN7VbbdKGeltjF0AStYLU8ebPKkDo0Hce1C0UdSTCba2t1KqpMvXrmGxXOJX3vIW/PZbfxvGEHb2dnHxylVMas7LtbW9hZ3tHWxtbWFra4uT0doC2zu7mEymiVM3ktXY9PnmQjx4IRDatkNd1ajKEsEJMQVu376N3/iN38Bv/MZv4MnrT6BtV7j6wANo2wZ37hzg2BJLRlWJputwdPsElgh7WzPs7e+iqy1Cs+SMEoFdzl3HMVGu49o4LsWGcLS91uaNE601JeCpkpT8nathROUXQizDHYFJpKiqquC9R9v13pF3K01o5wegzyahgUNz5LwOve0rD3aVuXB80+lOGQK0ebyVXCMqnVY8xiBu7rzHT1P35UC46Zq1zzDmrTlkJj6adb6bMejPhSnRn1Okuj1I9TpgytZS3p2ssU58LO9AqgGnIO3QB+JKY483lbKJWM0MHzObSzXoEJJqmah3m4dzCPDJXunFaSo6XVhbwHvOiMNjjgDmOZymbT2sJUynU8yms7RvEmhzZxxrHyXAIpQcOiJfR9uWpD1znoOh2+gcJapk7/rs8ae188lbsX3Hd3zH4KAQEV7wghek75fLJb7hG74Bly5dwvb2Nl7zmtfgqaeeGvTx4Q9/GK9+9asxm81w9epVfMu3fMsg1f3dNE+WK1jaAmQ5d1xZTVCUExhbpgNkpUYKcUxRXVa8lj7AeCC0DgUMGxqdA5xD1zTwjkuZz09O4NoObdNguVzBdY5VZKsWy2WD5bLB4eERDo+P0TnHhkTXqX1EKdVJYTl9P9uM4kRC4IqgLQfflUXBh4CIs4AbdoJYLle4c+cId+4c4Zkbt/D0jVu4fuMmnrpxCzdu38HTN2/h1p1DHBwd4+DwGEfzJY7mKxwvVjheNPGnxXzVxR+H+cph6Twaj5izLxr1Y2Z1Ik6lMj85xs1nnsbR4QEWx0folksUBgi+RWkNfNfFAL8AuA4lBdSFQWkMpmWJaUwfw5KnBbH2MxVmk7ICrBoBojK7/8n/Par5G4JRTvBOtUsRH1jR5tgiBkYWpv/MilrEJuIgknLkHdN/w3FI0tSo5iWzdo7kWq0mkjZmfJc4Kah55j9j8xx7Zgghxqh1HBYAH7lhn7zJwrCjbN5n/8h96dnZWDapIDfNaTA/UmPa8BPATE+g4fV6a/XqqhibFHPOIa41CUAY9d3IcyDAHWJia+/Tb9EYwMdaaUFKaoQEPOQDCjIoyEQvvH7+5D0Hx4KTaycgJwE9Pkfeu0HS4RAlRMnlR8SOQQEMuN4Qulht17GzLXpvPfYElDydFOmR5PwzxnKaN1ugtCXKokJZVLC2SOfdEMXs7QDgEIJLmSvOanctSX36p386fuVXfqXvQAU0ftM3fRN+/ud/Hj/90z+Nvb09vP71r8ff+Tt/B7/1W7/FQ3MOr371q/HAAw/gt3/7t/Hkk0/i7/29v4eyLPE93/M9dzsUOCL4zuFksQBFZ2YilgzK2mK75he0WMzhHVd8LY3FZG8fwXsUsCDv4K1BAYPp1jbqskLnPKe7NwbL5RJEhLZpYG2Bndl2Er/ZSaND54BV5xB8h6ou0bmOc6oREFzL60QGoSwwtRald2hbj65lroIC4NsOTbdCgEE1qXF8coSmaTGZTthOZCz29i/CWou6rhCMxapzWLYnuHN0gieeejq5dGpPMmbcWVxPQYFicyE+ZMF6GAKM8yhAcKsVujjvalKzlLrirORAwHMevAoioGlW2Kor+FBgsfBYnZzAGIPt2QS7ly+jspYT0SLA7MywmJ/g4OAA7niJplnFtEYOAKeLatuG7T/kIkUxPRcfRtQiUmE0tpzA5Z+n27LvQwiwhdhwuEhlXReoJyXqqkju/OzqC1giznxthsARyWryUEQMBwD6AFkpKAiExKRotS/QOw7kcVVa4pLPnA9AGHLxAyeZTDIbI/ZMxDxAkgAZIPDeEMtMb2lQr2RkLceagJzQioG6UvUxliF+rK/8b4khPWsMSakn0hD18wA4mWxv7+n5d5G0BcSIekmKiGLC49hPCBFkeicHFxNDGiAWQ/RwnUvSjuzspG6OeTMN42EsQAgEimYBz+cjAAjxrFtEic65PtdfiFKwZftVIMLRybGak0xQ3Mtj8ukAzBcr3DaHsc6eRVGUMU9hEUGpD68R5lPsaYYM10WlvsZZF0Hz+OSEw1BCAHx5xlvjdtcgVRQFHnjggbXP79y5g3/37/4dfvInfxJ/7a/9NQDAm970JrzwhS/E2972NrziFa/AL/3SL+E973kPfuVXfgXXrl3DZ33WZ+Ff/It/gX/6T/8pvuM7viMZqM/bLIDOtewpFwPEjOXj5BFQWIu2YzVSEwCUJcpYAn4+X8AYwnQyQdfKEfSoqhJ+2aCqCnTOwzcd640pcMbzgpLIjqYBUt64wDnvmOeIojkTq97eZEEFQMGyfcN3cJIxo2s5uNcA3jk03Qpt16Gut7mSru9QljHXYFHAE6EJsdhY06Bp27jxOfrcR06Nsxd49HnCYgBf6G0xwXjYgiJIAe18iWY+hykiICLAuRbTusSFCxdQlkV0eXewtkBpDRpLCHBxDgZlwVk8utUSBkBZcoZ4isZS14lnT0ge1EPuHmtZk9fA5652i7opx7oQ4Fyf/Vyyh9joqUlk4DyraXUJjU2eXac/XH6vA6kGI10SYxNAsdZHsnOsx13pvuX73MMvXZu+C+hrHvUqt3HQWJ/HppYHPY/NU4/99PXMN0YPPKfd0QNuZDrWDPchdZuPY9O4hDkY2BmJZdB8SB5cI8p5tqMHBAZY9T5NLB1EMfu5hGWIujG3Y0JWIqZWS/ItcxBxnhydxDkEh5WrpR/+rAdaqVjcdV1Ud/f7sCgIZDgDR+6FacikdGIB8YyTR0EW3rcoigqha0EAyvJ8e+euQer9738/HnroIUwmEzz66KN44xvfiOc+97l45zvfibZt8cpXvjJd+4IXvADPfe5z8da3vhWveMUr8Na3vhUvfvGLce3atXTNq171Krzuda/DH/zBH+ClL33p6DNXq9Wg9sjh4SEAYH5yDOfZjrC3s81Rz87j5GSOZrFC6zsEAqrSwhJgiMXjpl3izsFNFNZiOq1hDXEG4VhGuu08e9wRx94WxIGoJtY98qGvI2QLg+Vyha3phB0NygL721vwnjMrBCI0XQeLgHpSwVYFfCCUhYO1nGKpaTp0voO1ZXTYWKCsK9RVjdVyCdd2kZspAB+wmM+5IFrF/7YE1IVFsIQQiqh5ELUFS1Npc3N0HQCVZqgAe+w4j2lVwexzhvTVasnBgRaoSg54NsZguVzEOB+unltWBXZ3OW9hVVYxnX+L5XIB37YwBHQtYbloYoopBjKOQeI17LoObbviccdqo2v0b41rD+dCqqTqgZIChDmOqh92rSXOqwXAliXqyQS2LGLEvkEZI/DFnuOj2/75CKtupH5khP13RDZ69EVXXiVZSdXTPqYKyStvk31I26By54QkgVEBE3rQ8D5y8USRoUH8LftHxt0XADx9vhy7Jwxdb+PwAPxgXMN1HOtbr51JoHP6EETy4ft5XtklAZEhXQdTPS4NSpoB0EBlRuLSJDWW5HEcY0TEdkXESWQD+HcRn9W/H7EjMcGvoipavD/lGqmn1nWew2Ms993F+EqZT1Fwocc6quiaVcMVwInQdh08AjrvsGxWfL01KTF303CB1aIsUdc16rqOtNCmtfSBiz/u7e/zOQNhuZif/d5wlyD18pe/HD/2Yz+GT/u0T8OTTz6J7/zO78Rf+St/Be9+97tx/fp1VFWF/f39wT3Xrl3D9evXAQDXr18fAJR8L99tam984xvxnd/5nWufu7aJyA8gcE68QAEGDggt/xuE0hRcFyXEF+8IvmsQqAChBHuDdvAOgC1iLaOOxVpDUfcLUPRsISLOvxcCClvAUoh5+yxLDYVB2wC9wA82eHLxll60B3PCxnCqJCIObm18iyJw0bQOHsEClgIscTZl3zWRyzIMnIaBynstwsejHOMkQlLIM61nIIsqQfJ8QA3bkKwJgK0B8litloCVuCshVqwWM8YkdV1RcAG0sizhWs5tSFH9KBxgUrsrkBJm1ijVWSK+WpV2DrXSxqaWZUxlBWK9u+98DODlmllcnDKgaR2XIIh2CB3g+/FqmhAScXoZ7WQhIOVjAlwhZMw0nybtxHkqwpaDGVdtZWO4EMKe8CK+8wHtzkd/xtyG88wdI7Tbdr4e537tp8TMpRFGVZ7+f9bJ2vNzkNKgBAxVlFpluzZskRyD5HLAYGETnQghBY3De06BFPzgWWM5DoksM7mlJEUWhw4pKNAh+KGqVfeTim0W7NWrEyLr58rZ9Z49ADmPZe8gwf0BrvTwgbUQPT9hUFQx1VJMk3Sedlcg9UVf9EXp75e85CV4+ctfjkceeQT/6T/9p1T58U+jveENb8A3f/M3p38fHh7i4Ycfxs2bT8LaCoYsmtWSC+/Fei0G4OKFCJyBN+aEc94BrsOkZscKsbMUxsDH1L7WIJX+IAQUBnGTxbQ9knbEcxR3YQIQWO0YQJi7BiFmKJcCid47rJoW6CQQFLGyZQ0pFWGMhS0IVSiA4OCaFQoby0EDMUEjMCkLBOIswwEMUJzWaJ2YW8POF6LGkv+sKVAUNsZmMeiEtgVcCxcCrDGoSwtbTNjbLUoSAEDEeRB3trfQuQ6rFUtWi8UCx0eHIOK4n/3dfdbPW4vCFDg6PMJiwdnV5VD7WJ7DGFK5vEJSxYj6Afp3umroaTdGWBCx2cRqqr3qVa6L9jvDRuqt7W1cvXoV2zs7mEyngDFoHb9XH0+8MQbT6RSLxQJt2w6q6eZlILwL6NO/iCQC9e+e+Fjbc/hMdGy6zjmWA60tYAyr5ITgaHd1LeGJlCe2LflepCp9Te/gEVBVE5QxU4lkxhCCVhQUf7Mz0rAulqj0hCFhUBWS7eJacM2hoYcpUzLOmiJrCQhBHjpPaMnF+5BKnPM4jFpT5UqeVGUh2VTW1sR3MdlxnwhY23dzlapUD9Z5FeUHXgoSqjmaPkBb1woTCUue671P4TIggCxL+iLtyNis5QrfbdOgLkpMp9PI4Dg416RzKNd1bS/N5a7wInUF5+GK+O697+cJZmJNAlSCMasBkxE6hwCR2vj5ZKIkBbbp1gu2dQeAGeBztI/JBX1/fx+f+qmfig984AP463/9r6NpGhwcHAykqaeeeirZsB544AG84x3vGPQh3n9jdi5pIkLmbbmYo6ocrCkQQsd2BGsTWFlB6tBxCvrABz24DmVBoBAQgkNAYMNkNOTHcxYdMRAN50P9E7uTc5bflMU4SjIS+NbHrxhwjjWwThiIxDIaPW2vmgPE6MpcFkHHE0QvHUNRXaW8yaIuK5UaABt1guPaUQZMHHwgFLZAQRalYUAmw7VvUFo0ixUscSAgGa41xX1Fu5u1KAqLsrSYTCfwnj3C+HA7DixEQFnyobIwqMsKwQdM6imktpcmnIAwlBxXMeBokQHVoA05ct0SJx6BO90dNUXyb2PYUB2I6+9UVY2t7W0Ob7BckLLnEHuVjkgy4mrMBuZiQPgAxMKNXg0/txv1715PwZgh8Ia4d4cgsO71liellT609JJz4kQsdpNnTy0mhiVcrCWmJeChZKXVbj2x6p8DINYjkutEEhxKKBLgypWvNeETYirzlEB4/SPLakzPhPXMiBpT1KxwrKJlA79IQBTgogo8X9N8LTVo6ySpEqTddVxdmgzBRoBEYA/eNDcTsy/EBU1Zz2NfnOPSJUcEHQQse0/2m+u66EnXO6YYIy7m/Hx+jBu8n1xTIblOO+ozpMsz0xyVlsO5Pmt/EYu3eh/QBgcij5QSzphIWwE0LUDERUW7FudpHxNIHR8f44Mf/CC+6qu+Ci972ctQliXe8pa34DWveQ0A4L3vfS8+/OEP49FHHwUAPProo/ju7/5uPP3007h69SoA4Jd/+Zexu7uLF73oRXf9/GY5h4tOEzam6mAOVLmHIh4oqOMkHFlgop4OWywNTYZdLvuWSGVqmmPmhwDicRMfgj4flhxEVg8mYhNVcqlUeUwVFCFsbb7ioZRiImLxQiFaiMbadF1ggGu7Dm3LXJ81rJ40cGiXHY5WK95s3mFa13BNw1yyIVR1xXkFi+g2nsbksVgscHR0B9Mpc911XcFag851qMsSDz74ED7zM16C5z38iTg8OMR73v0HuHnjNp566mkcHx9hPj9GCFy/iogT9Kb4iyBqwoSN/d95O8McIdycjeogMsMkrqx2Mdjb30E9mTI3angswpYIw6BVMgCip2WdCF3TNGsHP/gckORLKD0Y5dtLBr/+eQZuPagUifDoH2m6GrAmUGkuxqCYTPnfIWC1ahC8SBQmxVLJ85OEFPS4hANQZwIaIHvmjNQcNNAJQZX+RdWe22+koCARB68KMU4nRwAsxXkpFXIAa0GC8oIEayzKcmgjGotPS4BizMCWXRRc1Zm1Sr1aLQT2GIVnT7gApFCPtmvRtE1fRLNtkrRU1jWAMJC2xaal02WFgJh1ZqUAhddSVMQApSrCAvYixclcEh21BiVV0VYp+ziGKUTtQJD3GgEnIGZWL6L6GBSrXfvk0EXGYEIGZA26Toqpnt3uCqT+8T/+x/iSL/kSPPLII3jiiSfw7d/+7bDW4iu+4iuwt7eHr/3ar8U3f/M34+LFi9jd3cU//If/EI8++ihe8YpXAAD+xt/4G3jRi16Er/qqr8L3fd/34fr16/jWb/1WfMM3fMOopHRWC75jTR4ZhJhQlUBwogc1wqVisHlJiHroo1qICLYoYQsgxLgAph1y35BaiIuugEMIgPFmkMMqUJSarNT+4YSLwuVxxz7axKR/DwRO0Dgy455ax9Lr4j6apKc0VDmUHAhIoXdb9Y7QiaqhZZBCCGi8RxWTyfIMPAwFlAXHQfD9IW4uj9VqhaJgG44cUNMBs9kU29vb2N/bx+XLl9E1HWx0YZ3OZkmlIalhON6ilzZdlP6EfMVXtYZH59niIkXJOzbGpD5TMCkRjC1ixeYJH0ZEJkb6iGtiFHHP1Wy5rUU4eXEu6LcQ8WdBEWnKZ5cGnX0mwMV6zDFAylVUwuFzguQiEVQZKxNdJvaFZXtEz+VGTj6qp1Jm9iw9VBaEpIAqKMDgeaeRBn0fYMgyW+eZvePbJeaIhGOIoBUZEJik4h8yCMM9MFjCCIIUCQLJuCgW+FPzHFtfrfoTQq/X3ES7pgCP/M5DALR9SFd61lKSgJRWIWv7l1bdrVYNyrKIKmGz1m9Ar06U86e9VYmYUfdgmmVN2a+FCYCLa2mNehfREQScSil4A5heIgyD9wUO7wEBZKIK++x2VyD1kY98BF/xFV+Bmzdv4sqVK/j8z/98vO1tb8OVK1cAAP/m3/wbGGPwmte8BqvVCq961avwQz/0Q+l+ay3+63/9r3jd616HRx99FFtbW/jqr/5qfNd3fdfdDCO10pqUSDHAw3exVEVS9TBRFsJERJyrHiJNIUVi+xBgOgdTtADZgcIpEKKqsG9DHXUEqWD5b0TXUgHAglUL2maUJKmkyesDJxFoFKR68GGupnFNejbSoUb6jDenxc72NsykxtHRCe7cvh2lKoPZdAu7u7vJG6drO1y+eBGAR9M2aH0Hn1SKPibGZNdUwGNnZydKQMTB2deuYGd7C5cuXsL2NpeL/9CHPoT58RzbW1s4unPI9qnCxrHGQ2fERmTQV5kd28DMEfZvht+7fNbLOgxDvMYUhWRKhzIRCiKURYHJdIbd3V3s7e2DrMGqaeB8gA3CsITB47X9QBOZlMUhXsecKSXVXdyUo4g72Bd30bTdREsamrBqIBWA0mPXDhpWqkl3XbKx5VoDLSHkLshj48tBYmye+XValTmm1tTrpVWlev/r63g/sMQVoveoaFB4DePvSLTbtl0DA2m6flRZlulvIo6fY8/fXhKrqmptHkN15/pa9NWbOThXS77slUfpc4JBaNnr07sKZckqOIQocQaADKuky5gQW8AqB0dpEvMklapDYO+8whfRKaOXbruYak3OMM/borQVyoqZ07qcIBB7anfLJYxlP4LztLsCqZ/6qZ869fvJZIIf/MEfxA/+4A9uvOaRRx7Bm9/85rt57OZGlDYdSxn84nqX63jA0JdayA8bHBtYQwjwFPXLhjMO67amdcn+HQC40AlUDJhJE7oEmEi6be6FFHCJbWnsUMsYBRR98PCu6blqdY1WO4bQwcIiuIDSlOhWLdr5AuV0Bte2qIsSdVlhUtdYhAXqyYTX0Vq41Qred6BgYciCbSsO4jLMh4kPaVnW2Jpu49LeJVy+cAllWYGMxeHBAdqmQaCAorIo6+jRRx6dc1yxF2KHkvcIcIZk6t8z1oTZfuUpcME4kBJQCFGfCxNi6qdYExlEMEWU4oqC3c3rEpzgmbCKDjPi2AEww8O1vyJHHFUo1rCTC1s7AvrkrIh50WQKJoKq/Pt0MNoEAHkyU/2jvbG0lKftVAASWOtSIZrp0urAXH3YE0kMrsmzYmiimgfGjl2j5yTEUzctFco8pZkYn8j99ExbDgpFYREC9cG1UdNirQFQwJhhuir9LvQztdovZxD6+Zi19clTUelzrt9NH55h4T2BC6Jq4O3d1zmoFqkQovMGNhiAbK/qDPGMwMMWHB1sbHSIMEMtQD+O+LswnB3Gc0kYTwzw7Adi2NkicAYJ55RqMgQEWITAUp1UCl44TvbdtS26Pwub1J93k+hnLTaHIBsGCH5odMx18bKZRCQFAB8cxBkr0f8RVRMbDVXMCZAkKP1hUNw/gbMYI6ofkcT4eIUA14b5BqWm9IFLryP1LGqWeG3oD8gzzzwFa0tYY/HII8/Fhf2LqGu2PxwfHydj72w2w8HBAWzJNo7JZMpqhGbFhR4pYDqd4PLly9jZ2cH+PqvzLl68iO3tbUwnE8yPjnFwcIBbtw5QVzVC59CsVjg6PMJ8PkfbtewhlAhjXPfkYCAquF4qosA68J5ukKxGWq/0rqLkJEDFWDXMXGGLgp1rok1pOp0mBxH2xJMqunJ4I7io/SPqopyj1wSr35MsuTLQn85Bk1qb/JoxjlffN6aaku+1sV0nqdXjFNd2LSlotZceg44Vyp8l1421sfGNXb8JxHMwFCLd9wMkXZT64XnKtQIUQc0jpPACbbsbG2P+W7zthmDuU0Cs9qbU2Rn0WubSrM7kIzRCGCAt3fmoRxOVrlyvHT1gMLqn9BhykMpBV76z1rKTWVTDFkWBuq4TYyEeocEHTg8XeFx2WSgv2II9UM34O87bPQ1S+rDk3BWAmJxxqEvO79e/2bslKneo53rHNE+aY5ZLEohI/3whG38hemFE4hmlKMgmUBs86yd7cr9hY3qU/mk9UKWNZTjnX115UFVhZ7aF/d09TKdThEBYLRZwbQvfOdRbWzg+PkbpStgtC8tsUZTOQiTqE2xt7WB3dw8XL17GpUuXcfXqNWxtbYEQsJovUpb1wlpQgAoo7AYHiLlW8TSTnGNeQfrpjYE+JLBP75dIRNWoDulVdpLORtQwdV2nAEgtWTAh6EtWBLDqgyJ45lJOTmxy1ZgxAMVy3WPSRP7ZJiK/tgZnABTQc/xDd/Oe8GhPtRyU8rnoueaqxbOkw7F7db/6ez123bTESEQpn96Y9JO3fB56bQAkW/GmNRxrGqy1arTrfLpPYo4ApL2mGRIdCpCHMej3lQNUGpdaMw0WWsLOf/J3oddf1kietUZDpXKBYszENkfEKk8XvabT/MG2uelsxqFBWb+ntXsapNq2i6L7UBTuXyoHm/ZMdMYdRPZbXGBDiFmDOVHWMC1PtueNHdqNQiKDw5aIndjChI7qPkMQAQDCXGwiUYG1mgiE5MzQ98jZARCGRvrZdIKtrW3s7u5iZ2cbq9UC85MTtG2HwlrsbO/whgZhe2uLk+Qul/DeY2d3Fw899BD2LuxiZ3cbdV2lwzSZTBACcOPGDdy8eROGCCeHd1KpkK5p0a4atFFPv1wueY7xYLCNSw5zH090zr07lDw1QKEn9oh6V2ESrIkBizE6PrnxOheDKD1XJs6IQfp/GFeP6L9zApnUb7QObPJ7k3S1NuWMiAqROE26AZA8AAexPBjaq4TAaYN6/mxRyZ22BmcB7CYg0IRZu1zrNia55vee9fyNEhLCWv/yfS5taHVrDvy5jVKPNQe1sXXRwCLPH1tr/Z2cKwZIlqiqqkrvURxnpG/5fMBoj4BivlbiZINAg/kCfdB5URQcH9gFtJJeacVli3yUWEMIaNsVztPuaZByrkEIdmgwl8UF4t+UPIE0N9S/AEoBmr08BCSChKTxGzRrbLZhNh0OimKt5vQx+G0GnCgJ377WU684jATXZm7ygaPAkyQVx2+I9fHbW1uwhnB8PAfAHM/21jaqqgYRu9PWZYWmOY4SJac72dvdxbWr13Dx0gWUZRmLG/ZZD1ZLzjNoCCyZCVcVgPn8BK5ziUCXZZmM03IoJJ6jl/5ouOBRPZreV1o88dCSjxI70q9UlAJF2jIqKFITGPYoVDFsOUhF6TU9PQOWTSAjgN5zz+uFB+9GCjmt9SrsdYlC26G004M8W96ZqPxSRouRMYyphk4DHj2OTfPYRITH+lv7OVXzMP6c0c/DcL3GCHg+Rs0c6MDnPAha2whzwNK0SfblmMOG3CvvDohMsB/mbxR1be6hmAcOn/Ye9H05YHG+yP59CyjKvhGQcuTh0QDgMJsQAtqmBaTAa2Z33NTuaZCS4Dz9iXjMsftwT7TGuT4grjdDE/Uiv5h3MjzpnzSygUQ1lH0IlpC1Kmp4iUhVLMnxYcn3z9pmNVBSlACsBwUTaTKDbfBcJ6hoVpy1fGsL21szbG1tY39/H9euPYiu9fjIRz6CJ598En/tlV+Ay1euoHNcm6t1TLha1+L27YMBh9s2XeLIOCEr4IoyuaNP6poLsHkP13Gpk9VqmVK38GGSuWXGdYjzP/XMAum3ESBRY/kWkH8zhzmsdlqVJaq6ho1xRaKGNHWN0lYg4gNls3cc4qE31KcN0gRFG8KH0k0BY4o0lpzIj4HUaaqQMclN7tEqIXlHIYSkhiGi3mYQhNGx6Vr5HkCSqMYcIrQDwBgg6jXItRdyff6dfK+9DvUa6WcNfoehDiMf15hkNaZuDEHsvONrnb8DGaeAucShrVarCPYu7RGdJUITftk3Wh2opZn1oOd1BoGIT4qUkRGvxDFJSNutRJrKJcb8HQG9N2O/vwJc178f/Uy5j4i9CRHHNfEMkGVVMdUmAsL5Eorf2yCVicGDTUUABeG2e7DqL4kvxIijQu85FxRhVDi31tZF7xG9deyTUvzUmK4cSVzr+8j6XgM/idECBlH9Qas+uX5W5zmYrm1WCN5jMplia2uKS5cu4eqVyzg6PMHWbIYQAh7+hIexf2GfQcg7HB8f4/bt23ALh6ZdIQSkmDYhaEVR8iFR+feMMZxsNnBp+BYRJKoSVdlvzl7vnROf9aXMW3y7A3VfoH7tpJ8ALvZWlpzAtyxLkDGx1IrjHuoJ7yFDsRZYxj3yy1Ea2iHHnat8hJBxQk/ObyZ9nEdqupuWE3r9t1bJCEBp26AmuPKj87bJXORaXcxvnPEbV3nqtokwbpLENkmt/AFSLbKxe88aQw4aQi/y8Y1JNNoBQta4D5DtbU2SjUSeoaUnkbYEpCTm6qw1HJPsdAxUzjhJk/cnP6nqtHremDeo9iqVa6V/+U5c25nJ7FWXRVHEbCYx00bi1893Du5pkLKGYmkOaZmOCEDuCgrknCphAAgD7ll1me2XsQ1gchxBiHEKIT1qzPyqD0p6/hoAZlIbAoNwGiPPI4j7eXok5/1zbYeT4xM8cI3wSc97BM973vNx9epVNKsOhiweeeQRXLx0CZO6RrNcoXUdlsslTmLG86IoMTEGVV1hNttKnkta5+263kECYNXetJ7AO4eTkxPU8xr1ZIIiepfJnPldyDsaWaBNLUrN0O9XutJEDSZ5tZUFe1cNdorEaSWQFaKlgidj7ke9EXSciTHD0u4AlDTFgaKhD+n6uDVNRDdJUpoI5qo+6UNz1lotvhYQugFkxyRC/bnuMwccGbe20WiCmYOl/h4I7ECE4bj037nHZQ5QMgbXeXQYupVrZ5q8Py1ByTP7FG79eLQNUO6Xd5KrBfU1pwH+gDk3BEt9HKDuWxgSYOher/uX/rSKUaRALc2lcWTvajKZDPrquo6ZQ2eSsodzYwJt16XPunNW5r2nQYqMOYXrYGJDNCR8Qv+Fexeiw7dz4beNhijVuLKkUm+Aa8VkV0En2EzqnrW+Yg9RkpKUL7qfvGsyQJCgoLEOU3YIl4ICF/M5gIALFy7gEz7hObhy+Qo+8pHHURQFtre3cPny5eiKzX14UdO1LTwhSiNVKqsum1dH1if1WeSgJlWNrm2xWi57B4KYTFarkpIkRaLC0NzBBrUL0L9cIWTKmscA1QfyGqOSj1KsryNcIygWgZT17tVIIUlQSW5bI6I5991/ZhOjlDwMP86SlLR8TJrT1cCVq4O0+lJLXDkR04RxzKt2E3jpNdGfj0mAuUQ6Nsch8e41IPkYcglMA8UYqIrjhJYMcpDKwU88V4n6YFmpBC59aSATeiWMnH4/+Rhzxwq9TnotrDUoVNYNzWxIAmRhJmWs+bvSeyFXBW5yyNFgJk45KSlx5xEcQPHZBgygTcu5+zQzdVa7p0EKrksbK0QCEpTDA0IseSwvZKC+WW+aGEU6n5rPCaWhNT9/4zMLWQicWV36DaEnrIRE8OITI5G2g891X4NGAJFmzY2adxIn4CnAdQ1CACazbbimwc1nnsYTj30YoeswKQtszSr4rsXJ8QG6bgWQQdO16LxH2zmQ5dQ+hS0AD6wWK3jv0LQcZc5BhOxFWRYluqKKGxtwPqB1Hl0AVo4rDHOgYMAgmj5moOfD7eISRZUmCTHC8KXEFymZlhMQaALkeb3F08l5D+M4j5jYzqy1KGwxOKSFIpaJoPqAYPr3IVyqxLWI+ie9e8+B5T2QZa9whJvX73sT0dfAoIlLrk7S/xbQ0faREMLAVVk4ccmioInsQHUT15OIsFgsBmMeczgAhtKMPCu3bckzUpLWDGRo5J2w9gHqHAzVk8P7hu74AGeaCAHg2mgi0YQYpNp7POZu25rw65imnvD270/2heT50+9Ag5dcl0vkp/2WvUdhqKYTKUqeJ+9U9o4GIc3c6P0ia6D3I5eDBwB5nx5tu0IbTQHCMFgbA+ZN71LvA1BP6ujdR7BrRSfH270NUgjpR8owAxhuXPKJaI1xaIMDJX/Qqaaovg1EtIQ9gyYuDVowI3U9dxMDemlMnTE+Dkr1CcLgKSH0gyCiWHAwuogaQvAOi5MTHN65g73dXWxv78TUPQFt23AxRUNoO8660XqHwtZJPtGE3HUOIMkOENK8bEx6yhVtPaf8N5z/DdR78wEBxhBMzBjAh6Z3qZUlDknvSmsLyYRAEyOoewkwnDw1ES39bhRhsJYLW/os6aWWikD9v+UgSxMnCs3FinR+msQw9vdp142BWg5UOYDl9yaiodQ7ep66jIT+Pm96HNrILsR7WMbjdNfw/LuxddDrLt+zM0tI776/V/aFEG0uA8LnLObSDHJmYuVqD+hsDjIHLYkCQ8DVZ1YDuz7bGmwF9GSdc1DPVZ6bpO78nQU1Zv0utJSmQwu0RK3XXJ/vXNKhflKRfnE2DA1maR7E9vCQgvI5cUJhCk5XEQih+FMqH/8Xqo0ckp6IADoBJ18+zpmmg4DEeGfM2Zhsk3eEjYgmz9ik4siJzaaNqZtkQdeNbcdyQON1vtexe+9j3j3g6OgIH/zgBzGbzWCLCs6xaqAu2LmgKAnLZoX50Ry2abG1vRPjosTJASgKE6fMEp01BqWZJtd4qRPFCWe3EILHE8t5dGTQiS171YkxSBWIkW18dn1VXoApMSlFg2x0y48luFmNZ1AYXa00gJxjWFe1dRofOI9j4DIHmotmCZsBf6Aeiu9LZxbQgZkMwsLRx4waHoP75R0BQ7fnXBqQzwRARBJZLpdpz4i6SfqSZ2hpQKuz8r2WV+9NMS9KihAJMt9fMm+9JtqWZYxBXdfpGonbEXVUVVVpj+pxC5jmkkwvDcixC4N33P9bpAvJTmFiEtbePiPZY3wAoHLSyZrqd51LUrmkJ/92rlfnyT1VVaV5dl2X+hb1uLbzjoFI2vcKGL3nigShG0ql+Z7IgVUzELpfcfDQz8/pkaG+Vle+l7V0G1w8bzIPspxs2wNc8eBZoO7Thumcg0ToK9Xqz3M979hLEGFEAGsMfNY+CqOfrgFUzgGPXb8JTIeP8+iL6Ul/UKq+vrF6oQCo98jrug537tzBdDrDzu5erB/EhIwgpauBxXKJwjlMZ1sx+LZFCJzbixNQ9s8xxsRg5CpJV851KSt617V44iOPwUd7FKsrTAS9XlqSv9elx2xutC4hFAW7vRqrSg+AyyNoAspaRKU6oi55H5VVVP05F+ca1RaKKA242BDWbHEiWXH5GAPnovpV2T30Hsj3cC41jXHC+dr0zxwCFIBBxo8xO5rsiU1ES/qTPnVMlQZTSVCbz0WCv+V7GY/2FhyTLrUDgCaess624HctUpHcFyKXyWVGend6BhcTJXgJWA7x/Qwdono75rqDh4CUrLV+NwyqwxgpAQwtZWrmsa5rrFYrrFYreO/Ttbmko/8WsGvblpOUK/UpgGQ7FmeK/J3rPaznmbu+r9vGmDPQa6H3RwghJaZN6yHMLYBYYOLZAVLACPFWSJ5/f5Yktf6d0hqOXaDvG7km5zRO44xOU/fo+2Nv/UMVKWeb3Pp6NE0Log5VVUc99SqJ6M5xRd2ydHA+oCgrdF0LH5jT297eQlVPYqaJSHAK5kad72K6fT70ZWFhgk0cM9s3Csznczz22GOYz+ew1mAynaKuaywWCzRNC8CjntQxWW3c3GE4k8Q9KkkqqRKod4zwwUf9fL+u4gIhIDRmkGanifx9qfxnI3snJ8RmrW95d9lrO6Xp950TFvlMCJsYweV6bd/Qapt8DYVrz5+ptRJjgCF96z4FoKWWlgCS9pCTdRJQkmdrgOu6bq2YnwBhOtNYlzY5QapklYnvmXoHHcl87n1vu5Y5csJZlnq6rh2ox/QcNqlHZf75Wc2Jr3wvdh4AqWyK9CvPqapqIOnmTHQvqfVepXU9gUXvRaglQVlDLZXmgDsmEWmb2/oeNWkvb3LECRTAOWxi8UvPmSrGaPBZ7Z4GKc0pnnaN5hjGvk9/6z8oEhdCJJiZznytIwxd1vW1GfCMjeGsa8Ya35IsMAgh/0w4w7hWrk+trznsoqxhjEPnfPQI5IzHFIC6qlGK00E8GFx2XioKG7AHGxuha8XNC/d8fHyE4+NDNE0DH1yKGxFVi8SQlWWRiIVkU9P2Jj4cFOfKtrOcOdAEt5+/gylskhI5Y3p/vQaWXuIVO1//uQ8e8DQKcvLutApvTNoZO6PalqX7yfeE7ltUNvnzNFilcStjeQ5+uaSQM1J6TvlYNBjm9qexdZWx6DgsrV5iybpfh7IsB/YR6VOfZ+dahODZLEsSShAAkkB/PsTGxvXy0SQCzmgfQoDzHQKGWU90Lj29NjnojzVNtGWtcgcWWQeZv56TlqA2MdaihjUmOjSp+KdcotLPHXuPYzRnwAisCQK9dJW/F71OITqSmeiJTGRAxqLzHnbDGRpr9zRI/dm2cOo/+bPNRs4zez9FwtoEYCGpGEU9JqLf6c8j0nWVABfVPG3boSxKINqMupgBg1212Umicw2Oj5tY2sKgLGuQYW7Udw7zxRxNs8JisUg/TdNguVyiLEosl8tBQGEIEunvQNRvR5nbOhc5zO6cq/yELA04XH3gPwpOTj9fH9p8bPmB5jEoD0waV//KtXmfY5KMvmeTo8RYFvNN49WfbwKqs9ZE7Im5miifi6jtRHWn8yZqhwvNlWvpT8+pl5JZ9c2G/FRqD0RRJT14J9FrNwjj1r8jnTA6qRIz25BmBIbveFy6Ok3akj5z8JDr9e/1PTVknlhlvp4gWb/nHDhPe5/5+NeBkgZW+txulyTO9FnPSFtrAcMVAbRX5GntPkid2eKLygh/EJdo/VnYzB2cxbHk7UyCIRV5k4cjop544xBSM0Z7cHkkrzWt2kgdcaeiJmF1QgdjuGxHVZfJVtWsVmhXS5ycnODWrVu4ffs2bt26lQzj0+kUTbMaxEh55xCwXoKAAhKgDACAKMWbCUjFi+JhytRlUeWQlu1sF5hzNcrGNtb6GDkh3rE680gf+Tw37RUtCY0Ry02EdEy6GRuDvv68QJVLeNqDTXu+aXWUlrZzgqglJy3t6TEPwAF9/NqAYRmRhDTjo5/Jzxg6Z2hwHFtPvWf1s3n865JUri7U7zJ3bBGAPJ/dRlzpw0BFN8bA5ONd6ylf2xBGrutBatN7TOtIhlXvPAoOPI7aEGPOdxbvg9RZbYNkcrpUo26NX/YRWOd8bIi6O/mdDyoBlDxcH6TNL184SH342E7VwhiL2we3MZ2xHcpWJdqmRdt1IEMw2zPs7GwDCFitFrh+/TqadoXj4yPcvHkTx0eHcA3bura2tlDXNa5cuYLlcomDgwMcHR1htZjj1o0bmM/na8DIRKzr1ylOfSgp9YZzGKR1hZRsID1XXiOpiMx9bFbTnNUEHDdJIfpzft5QktokZQBYkxb0HHICORjTiOSlQUwb78dcntfmuIGr39RkXauqGqiuRKWnpRFRceXrpb/XEoYQPu2gkK8Je3wOnWx0v7kEFkIYAKesTW+j4ngikaTG1kXGqceSS07AOpEX0JS5adWlSJkikW5SKY9JVckzERisZ/7uNFCedgakj9xxo38wS616P6+FKwSAAjsKeS8FZ9mRKRA7XG2yeeXt3gapQL0hKOSfi5EobtqkChs2wvBlUsSZgBh9RJFnUPFHcudYb2kI6jf/RPtJBB0Rh6E2u1zfa9JFhSfZMTQFJoSUlDXaadbGIRU9HYgsQCY5OgRw8tOAGB0el/D4+CRllbAo4NolXPCo6wJEe5hMahhjsFotcePGMzg6PsStW7fw5JNP4vD2bcB5zGYzPPjgQ5henWB/7wKeaZ7GydEJ2rbBarnEnTsHmM9PohccV+plIiW2Cl6v3pdBA0xM1itCkxw2+VJcR3oOAeMvnrJ/8voNQYSy3xi8KyEEZ9moiKKBGkNOXj87B7mxvvJ/51yvJp7ZZEEknoYUeZ8w0m9OaDc3+T4HghACVqvVgGiJ/VGcdbT3oZbyxoj9mAQ1GEMYsoZjTICAgZZMchdrvgYoih5M9PNyaQnAmmSk55R/lq+T/i3gocuoiCp0E6Do9WJHo/47bR/Szxqbw/p71blDw2Cv9A8HiFgqCiGgc12vZve9homCWg8QM5JF1CgEwIRnBUjFnwHxRgKouA0GL3CMUxSgSuAQ+wwCKlnsEaTf0aY4rsjn56Xoc+lIpKbECfNAh6R1TaBiqSI9cqBqlE3Jwb1t1zINNx6L5RLLVYPlsgFgsFy26DoP7zzIGjRtg+A99oODMQFdu8TR8RFuH9zCjZs3uIRH8Dg+PsJTTz+Z3G2NIdSTCajzMCDcunkTB7duIwSP5XKFxXKRsqAv58domxXquoKxRSTiHBhorRAOZD/CHfdqAof+9UcsGVfn0frBZHzbLBXFVzD4ndSiGeEca/3BXgfJ04hIzgnnP7laRRvJx6SsHmQNdB5LDUj9vcN+xoBqTLITIixj1nE5uSSTe/1ptZ7OO6c/0zFJa2uGAgh+YH/KmQb9LK1ey8FS+s29NPPv9Xzyz/L10WM9jRnJ+9frNHbdppbvpbHvc8l12L/v+T2Mq32JCGxukMTWUPbweA0IhsLg8HgAnXcIcAhk4MKzoFRHAo8NLy5EnZHmmDYdPPkt3LSWbIZy0bDv/gMafJZjpww3hF5SCrGj9DsMnza4NR97IiqU/h3WHsrfc2FIVjs1TYvVqkHTtLC24IDKpuMCiFWB+eIERWkxmdWYTGt47zCfz3FwdAy6cROL5QJNs8J8foI7hweoqgpbW1soCovZbAp0Hl3b4ujoEHfu3MGd27dhigKTySSqMxq0i2OESCSqsowbXmwpkbgRxSBdOdQjoNIr+9bWKv0OlKrhfqxNgC1/Rk6k9PvSh13UhacBXU5ox4BKt7PUd3m/Ocffj/lso/ppfefqKwECDRACWjqgVzsphNB7JuYEPQefBIrwCN4M9ke+pnpMY9/3fYdh32o98vs22Yo27bN8/XOpLndwycMHzmr5czUjoN+1VrGdpm4bYwh0GwK0ze5licpL1e2o8TCGbdAwBs47uLGqESPt3gepFLwaN5So+rJDtwmgpOXc40CLmFBlKLHl3Q04TBnR2AvOrlknGJvltI0DGBkPP15xhaH3sPLewdoi2gkcfHCwtsLu7i5CcHjiiSdw48bTODi8g+PjYxwvl6hnWyDirMe2IDjPnlrHx0dYLhdYzecIHadLko09mc3QNA2Oj4/jGDhFko3Bii45TqxnFUhANcJ18vtcXyi5tufge3Bgonaetd3QzgCoTUClCVMI4xn0NYcrP3o98v7GnrHJKH4a5973tX5eztO0nUO7bYtUNJZ5QsasJZthIKwfzF8/S4859WeKNSZGg4Im+ilgPbtG9z3m5LDpvecS0CYJJpfm9DpUVZU8HmWsud3srDb2fuVHMwua+RnvW0wEYW3/5c/iPgzYYS/WsYt0iCxgJCOMIQQy8Ij1yoyBC0AXY8bOavc4SPWtd3MM2b/l+82bJ/87CPVLXW6WvrD5kv46Ov2a08ayqSk+ERiRnmQOfVoYFsc14SiKCFquiZu5w4X9C7h1+xYOj+6g6zocHh2icx1WHSdlLcsS1bTGpNrCaj7HvOswX8xxeOcAR4dH8KsGCAFVPcFkOokR74TFYgWEgLKuQJ5gI/fsfBfjt/paPgJQBAzVBZ6lwSQ9pGmvH6KeMCtvwI+x5ZJUTvxz4JD3IZeM3SOfj9l2xqStnJnR8Tf5tZvaJmnqNM55U5O55lV9tR1KUkZt4sg1cGjvvzFwkLHKWlljADIDm9Qmgq29DoH1QNT8XY6tq2YkxtbitKbTTmlAE1ds7Y6vx7QZUNKTN9I2HWcmz5DvNvWZ35erT3Uf1vZrKYyybH0j4ycgGAsEcNA3OPG0XtvT2j0OUgZ9clWAOYBe7dbHTfxpNCW9bWhJfRjtW0NJq/f4g4mOHV4lCT3j6QGAHb1oHbCEwzUxRQwfEm0X6WW7k5MT3Dm4jTtHh+xpFzOWGwLmJ8foXIenn34SznksFnN0roVzLZzrMJlUCDGbuBAciYsyxsAag0ldIViTwLNzQNt2kHNgYzojjs3UIIP0PhOXawjBsOSsD85QImFbjOZeiSjl+kurJs+Kv7m/TJUHpArLZxOOXo3Wq4BPZ0I0Ec5Ve2NqqlwtpaWPMS1CDkiaePPZGUpEZ2kf9Fy0Ok8THxlPytatJBf9/K7rBvn/dNCrrLUeV7JvWQuitRoFg7Hlkpcm/kMg5L0u3+nsGPL8nJHI11j+Hgtk1msj34u6U9vItAdk7kmY7xEG3g7k+/7GJPyxf4/v4bA2102A3I8lFlPUMYxRFRVCiDb5SAkjXSBzPqcJ4J4HKYClhVO+vRsOWrh35PAjG1i3sHbVeEnD9TYgVsozMYD1uJSeqe45B1HkjafvQQIDlk6Y8PLm7g3uXedgLbvgNg07Sty5cwAgYDKbcrl3Y3AyX+LmrZs4PLyDrm1BCCBLKEquuDupaxQTg7Zr0TQMXKlERGlj6fYKsH3mZB/dzkMgFIVNhxa+9zKibP2HxHa4PuOH06TbtTS0voCyjsPf+du4O6lMST5hHZz0mDVx1M8Zk9akiT1DE981temGWJ/1n6GL9nkAajDTMCxVn/cjICOqLf0eNfEWYq4JtMxLpyvi54BroGXAnq+ZBsVNc5NbNEDptdRJaYf3neWAM3TGEEZAB7Xn1+l5nNYvEMvCh36tclWhSJAaGDfZMkPgddDrvKnJd85JPszQn1VC78REfbo2MgbkuTLFaX3rdk+DFJ/7ftNRQmzgY7A8bGhjIJVLLWc3sXEFZe+S4okiea178n30TXNeresQPNeYYc7VxWSfDZwDlqsCndNp9wNOjo/YWaLt0DrO01aWJeq6AnNKjolb5OhAJnHmRJzqKK9hZNShFkN6UUhNpmzzxkUKQbhyZZcxDD5jHGPqPzpN+I/3driLNiRSvXSgv9fvSdtwcoI/RtTkvk3P1dKLXCt/n2V7OQuoNNctfejqzDJeqd01Rvw1SEk9KwFf/XzZKyKV8dzETdqPzi+XovSc8r7jjAD0efA0wH60Tb9DeY4GPA16ucPEmCpS9+u9R9d2MKH3/JR1kmfKWuln6P6HfSLNX9vuNj2b310cI0QbIR7TotYEguGafMZwXEmg0wFQt3sapBj2757jW+vm4zScu3pe4tqQivYhIKn97q6z8UYkm0kyRQQgUEpTZEyRks0WBatN27aDZI0OIWC+mOPGjWfQrBqYkktjT+oaRcllEpggNRB1kQ9s2xJJrShKVFWf/dmQgYtZsoGeKEn5hFRPyrCdIcZqRkKUqUyDR/BDKSRJjQNum4/PXUsG6NmQTXeOSUan9qmITq6+0d/n0pDuOwdlIeg5oEl/kmg1VyEOAWpYYv680qJWxQnYSHVW7/0gE7dID/la5BKODt7VgA0g5X1MqkN4eNcXZdTrl/edq+pyABM1rw461u9hU5Dt+roPGRDZi1pdOSxV0zMRkoQ3l2JysJC9zkxBA4teihrzgpR5aRAce8dOraVOU7Xp3fO44xqn0kjRzCDXGOJ6VxTVs2DAelYE86aNhqGFiDcvEmHKudZBH8htRfG36jAItTylEWWXUKYikv+Fdf31gFBF4E2PHwiGYdCjzomFGKfA9wSlRmQVovcetrAobQXnW8znxyzFBYflao6TW8d4+pmn0DmHVbPEYsml5pfNEtYAdSQ0Jnj4doXOc5bp4FxKbmnAEpQhVgNydnTAuw4SJEgU3cpjkcFAxPppYgN4MjGGqMpTJkdD2s2fYKwBDGc2t9E+wQ/hvkKqe8OdkFqr9B9RtBmKWpGrhorXKO+laJgPHMul1z8Kd+ldcwyX3MvXeR/QdZzc1G9gQLQEJeskz+/jmwgiVcbXnAGWSBYibQpn3tc20v0PJQmWZlnqKWEMhy5IyRVhFMbGnXvhaQZBe/rJddrlXO7XKstcDQb0wCkAmGpaUUBZqLMUDfhkWLoXJk1AWLKip3eIgJDZzbznumuaydESXg6quh6UjHUMCPT38jwtCesy87JGObOi10x/HyLNS280U/XlHov9s9l2L/1U5QTWmuEcRrRIeg/y47SNtw9cF8JHACiwbZuiJ+A5Bal7G6Scj9m6FShBcc5Efb4waaMgResHOGedc9IyKgYrj8IAAZsYJBxFYEpETPUbuTnOsu0RzHqcw9hg/MBWEw9cxpEjHk7nHayxmO5M0bgGJ6sTdOA0LCcnd3Djxg0cHBygKC0kDFmAtTSIDhSxcB/jEmRV2RMvAI5VLwUhquIi+IrahkU71lxbi8bzATFlBU9M9CkWbrTUHw1Z5sT5RoAyZQWyBQQQekKN+BxeKu8j1xl15hQPkYGBCfy3D73TRAiAiVKtDwasKzQgayFZTogI3nHuQx1IGgJ7nBFR2psIgOs8utDbXcb2z7pqqQcq2XNxuwBAfLaN11jwkpsELOIkE0KHvGkJSIizEK7eXsKEhI+P4pjR54jTxE+rl/J5ChEm4rpKuQdbHjul7Sa5dKlVedPZJF7Lc0/giAgKjoNHESg+n6U7BLGHRjtcAKwtkhODltw06I6p4/T8e2mlBxsNMDoDfF3XSQUKIAGwrCHnxOzSWmqwF0mqKIqeObMGZA1gbZJeXPBok91XxhhAUcXuA7vAL5cr+OAxmUxQVzWatsFyvmB4iWqMEDinJu+AniZZU0CySARlzwhqr7J2BLAAM0MgtOe04d/TILVJX5pLKZv0v0AkYtq4rfo+rZ2pq4+dJwD0ARy0OgQp3V9uEzi7jfeV9yvzbtsWx8dHcI5rSkn24vnJCbx37LhAnFxWQL6XQDaMQAioyCnUu1wDgtvUb3bpUS5KDIZk2BgSYgb6XpVBaj69dDFci/zVMLEdej/lKsGgPicj6dWVnUJJMqrngQqnVyvGr31Il3+sKulNbWzPamcKLTFtYnxEetmkzur7T38NnqfVXfneXdMUYD3eKZ9HrorLJar8GpaS1lWpfUzgMMO5SBe56rOJIKFphtybu41rFaxWjwqItO3QezGfH1/TDuauGYayLJVEPFSB6srIUg5H5mainTZJTyHAWAMyfNa5XEkXt3IEssjEiqpWmHvQ3dCi9MY3fsN0sI+j9M8GF/SxQ5FvPABDIjICUvgoQSonPKSy+gYK8FB6fnB9FWCdCOSH+OPd5NA5x9kjFosFjo+PU3HCbpCZHFFSkHt71dOmDdgTK7VuGkQUmIh6bXjfCCEjSXIe01NFVY6On1pLNwUMiJR+hxqQcqDSIEVR2hsb29i81/ag4hzz/XT3B/7sls8zH5smgPJvrQICxqvRbi54t/7u5D4aWTf92Zh7vPw7J+LSdGFE6WMgvUFUgUMVpo4HTB6mqYZZP3dpzjm0MZ6rKApsbXElakn4quckLd9P8lwNItqzTq9/DlAh9DkOpcy8PCO52xuTJE0BxrE6ZBoY87HJ73w9pYTKwIPx47xfQwhw3sNHidr5Z4MklXGK0vRG3XRQ0rUkJpB+s4z1mbe8H9EtCQH2wcMj4/pG3dYxuAa4G+4l7y8MPu/3mfQrHKGB9x2aJs7V+WS/65/fJ3XldjqRlWtJ9NDUfx5vT2BFhHTBRuIdQgKh3BswcZibVmXkHep7R3/GJAg9LgHHrK171/X6ej0eDSabgOWjbfm+ycckxEpntdZnRAOUbme9b/k9Bkj5Z5skuNPOrvxbSzZjzxCHm3zMQqy1p6AuWS+AkKQmx96ucq9W+51GD8b2cF6yXc9X26S0KUKkqLquQUQDKVADj4xFz0PbnfQ71ePW6tzciUTu04AqNOHjvVfFVhieFSCF9Q0wpkLIuR/dJK/U2IEZXDfyXf4sEsQDS1KBQrIT+aR/VUXwNvS9JqHloEnpwrW+xkBQr0NRMIc8iEPxPrlqkxGVlY5RWetybXwajIhYpcfcGJIlSDoKWCdkwNDbTK41cZ6ihqPoHcRjzOPChu9bS1TCpQpYAb3UYIwBxTITMokgpa41kYlj0eMW7jh/R2NE4mM97OfZJ7mEI9fpsebMW65ek+9zNRXEGD7Spz6HmrvX4xhzfR47r3o+2u1crpVnGmNgiwJF0Y9L95NLkzo+i4iiV2mZQMFFSUIkijwjQg7mIeSq5/468ZIb+15ARTJxyBzFTX8ymSQJUAB2bK20w4m8RwFhHXem96qsZe6EIWVCpNxKWZYoi4JpzBkMO48po0XDV5Ka9z6dqTVGf0O7p0FKCMyYGmHT5l876D2urHG8p7UxUNR2wBACPMWCgh+Dk7smtMPnA+u7YChJxR4gnnUSLAusA8I6MZWDFdK/T1P3aUBjbIoEkAjyX5BrM2cA/ZPUOMoZgYyNnnzRbhXHpcsC5H3pgzsmWQyISj4zPcYItMO1H9o+dN+9pDgcV+5O/PFqei6bJJqxvTrm3izj1IR9rI09L/9+bI5ngWz+mUgzejx6zY0xcJ0Dhzus5/nTak0BT00vACSwkGtF5VeW5RrY6bnn711LJuLQIGAvLvM5SAuQyB7dtG75ftbP0SprafodbnpXYzbaHEhlbOtjUns80qGeHpFcASRNEn8cAlf5BtFAqj+r3eMgRQOim3Pk+rNNhCEHKf17cN3IAcvFagq9vSVJTsJRkIxZl5M9/Rnna7m6Lww+J6Xu43LvZVJF9EXWFEBBqnzGf2vngZFxDw9B0ujF9EEU749/m159l6v7pJ9kC4kSbiIQCjCSdBpCipOSlnOOWlqQ561x8SGLS0rPMmlNRIoSoE0rvsb983LnxOFPs+XEKFdrAkhOBEIQdeXcJJVk9o288Vdstxx7xnnGKWM8a69rUM2Dm7X00HYNnFshl6Q0OGlpWoOUAJSAlNeu7cBgPZJTArDWt3yvpfUcpMaIst5z+dpskirF+xDoY8a0U4eMYSzGacxuKL/1vhkDxLObEDn+zecKyeGZj9nw3D0rQCpv45ztGfeAEsrfbdMiMxGBVFoDQyap+8TjhjfDuEH6bsc9KksDogdT1ww3ZAghubpy5okWBhbWSM0evk9LRn3H4yCVS1F8qdS6ih/oLxOAjR8WSmCE9c83tPyg6bQuYyq5QV/qwPTSm8n8Gtdj7zYxQpvmpcf68Wpj3HLO3WuJMieMuQQlfW5qfO3wfYwDWi75j2s59LU5gdZgk49R21X4s+EYxuxv8rf+Lq/HdZpEo8er37/+rAfS4VxzQMslHblWO1XkY5e5CxCJB6Bcr5nmMeZcS0v5e9cOM+J2j17rfqrKLwz/l66n0OuQdL7vu93/9zRICTqfdaj0QV2TiBTy3w1QaW6DxyKu1/Hgko/RRnHjJs+/XDWC+Hw/2Nj6hRNtUu/lk436YyU9BfhU4dYHB+eju23TsBTlPArD+c+s5Vgi732yTaU5JfTJHhkHyNcSQJFoDxGLQSt1uJ5BIQcZnZB3SDSYW+OvKK0t26xidnVlHDbGIABwUYqQ/gaEgxenf0ZMSsvVj9MipHejiXPe59iccvD42JtWUEqg7RAE9XrKZ70k0CUgz+dzeluf05kjzQBCxrLWc3ZG5VohwDJ+XQCxdwIooXXtubQgfy+XS3jvU5yWSJcpgNZaVFWVwFw8/WTsWmIZW+fhex6CcL5XdMYJ6T+EMJB29ffaliSScFVV8N5jtVoNVImb9mD+PrQtTACvqiqUZYEQYpzZGt0JSrOwDlBJAxNpnxaw+vMVJfgxZ6WRdk+DlLScAOQqwFMJhSKId0NExjiVGIkKIL7KSJhDCPCJ6K4/g9Vr/Cb7gMn8ebn9ZaSnkeFvIl7yb2MNyBKCCaDSwDuJ5Ad716UyCGMPRLQ5ybVIANPXfqeU+QHxGqAP9O3BLP5tbHI1B/o16+fOu56BMMSMFYYDGY2JZQFo8ENEcB0fGEPMmOgS9ISQ8N1aC0MFH0DW7SFVQMZQpZyrcHh/9dPJCddpElbOUfdzlVNO6jP9WzIoBADCSfPe0yoWrn4MdY+ER4RBX5JtgPei2Hp6T1EZp8xtzBlCt1zi0NKGXrf8jGqpQLtOiwTinGPnhraD8w0GGU0UcGibjfQnQcU6yasxBmV0/Sbqk+DKmPsQjeG4tUQ0xrgCDLTabVxLrPqzfI10jSm9lgKq2hFEqx9zia2X7nr3eCIaSJH9erFZoOs6UArqp2yfqP0Y8v3Yn9eMHQfYmBC9sjlpwHnaPQ9Sm1QHWseeu1sO7o/c/d2ClH5W7Dividi7t8dPepDKxpA9N2c0+400eNxH1bR6Ug6YteyYYAzBe0r5SjTnE40xa/0NCK7CHkhmDQGqgSNC3LAZwZN+cu+pxIrxFf1aRDDUxEj0/1odlFRyvWg4ONB8iGXOOoMJ9SdtlCsYrgMR27Os6fddbqjP1y3/e3M764Vr6Sp+kr3rMQlIG+8BluZ1NojTxp0/6zy/TwPqXN2o6y+JdNE0TeT2y6gRaNG0C0gGd+lPu1sLHRCw0CVD9L4pyxJbW1sgIhwcHKS9o8FSE36t7s8dGNrWD4BOr732rtNrHUIYxE9pW5x25sjBTK+RXjOZl8w3f1d6j4pkp508kov42D6IstLITuBx8Z998dhEQ0JiAM9Lw+5pkBqLkNebXx+QTQAUsH6QztNGD7BWbSC+CJHSqCcEf96NaGjMzTlEuWb991nXyN8BuU2K9L8pA0HVNHeZE/L8wNuYoy/nGHVfcr1Wn6xz2VLGRL4HlJh1KjyMjTOfy59H0/FBYyofvQ56DwhhPm3cY/3J71y9p78bA8lN6ydj0+mX9LW9U4IFqIJOkJszLfK3ZFOQ95L/dF0HH1V8er/k89N0R/97bK75OmrGaY1hDn0IgATX6ntkLPJ5YjCNSaq/sXx/uUOMBv3TaCRr8U7POCP35n+HEHp1YOwtBM8McPAI4XQPUt3ubZAKrl9ARSApiaLKCB9RI1+WniAxJ3rehSPpUzV9bywjx0CFAJ9UL+MqP30Y/jSbNj7LM+VgaINuPracWmuCkf4mUQtF13OSzIW9Sk9/l/fTP2vYxogaEcHYAsZy3jAx5vN8DPpEonFPSBwYSR8m/RijQUryXMT+CEi2qVPaJqKtAfLPqul3qqUUTVhzANfrmgeE6jbGvORqplwS0yCY28jG9oFcP5ZzUxN5YwyKskRREiRPoTRtbxGgE+lLCLW2ScmazU9OUFUVtre3B+PMtTUaLPWPjE0H18o9OoWWfg/5Wkl6orykvFb3ybpLlvnzOL1or0S5NlcTOqfe/V3Soxyg+B+AmDwCEFOFPau8+zx0JnDJAI3ox88LwemI2M16XSWSbC/yos755DB2iNXLEZlJeuwd/9Y51F6tNd7GASys7aGzXrrmwnLpI1eJrhGPEXVfDlSMRUPVJMV/hHTNul1sE4FP/WbXCajYsmaQUg9MhDmdsQAQwRjLQJQ0mAxUJgEV7xsGO+Eis/eg9pWs4abA1QHDosAiX9+xd5QTxPz7TZKIXrNN2oGcKObqKwBr9hgtGcg9wsXn6qpNLe9Dj3Hsc7leO3fk/XvvOXWWWV87uSevEpzn7BP1lnwm+eR0fNZp663TLsl49bVjEplek1zS0pKj1irkgK6fMXbdmLSoJUGx6eVApdcoQCoP9NKUMOf6HclcdCMi9u7ryTPggQAfq0WMM0Fj7Z4GKdZD60MshKY/dMwpdQNCMdgwwi3j7tR9XeyzHwyGwbwAx/EQ2LPP9Mb39Xms663Hvr+blm9ovWllc8kB1cRWf6/HNEa0c6J4Cs72/YHXZawlQpEduBygAMCkmK8yHRruf8gpyriMsWv95Yb1/plGzhRk0JQDFvVxKwNQieuUE21tBzmNIdkENGMSzKb78/nr63PpThPX3KU5n28+fk3ENZHbNB4tUeq/83ct9+UebsDQhua9j+Xjh04X8qMdC7SEIuORbBPiweecQxM95eQnr1Cr5ynu4uKIka91brPKJTBdWFGuEZCScUnfIhHmAcAyBtmL+dp3XYfVapVUnbruVy718W8H72OMlWf1HEVkEuaP71vfp2v7W51LxHpmPghzfbpKWbd7HKTGuTcmcgCgS2kj/R5ymQE9n/AxqNuiVmugEjNK7z9wQV/nqE7796YH5nRqjFvTxEA2tuZSx1RAOQEhopFRj6n8+t+IzgMgTjEkjhNENLD/DJ6RERsZyxgXT+DcX24N9Em9a/a2E1UgIByqfD+s9irXk0iNQRgYBmkuwdGvqwZ1WUMBqTEQGZO0csKm/86l27FrxwijnmsaF/WqvFzlqw35+p1oIivEVBNCTfT1T84YyX16DLIXNaGV95Dfq5+vJQ1rLZeOBxBCL/3pa7RUKOuhpbOBJOjX894NHUswGEu+f+UZY4CpVXR5dWJJxRRCSJUJtCoyVzfmzIvck38nwKPXRJhSYa40QOYVfBNt8B4+qgFjlBq0LVivb3q3xDXekndzCEqLcnYsmm73OEg5hAHlFBdgOSTA0AYU0mfpBcX75P5zrhtYtagfziqlNDYgeQ4aa6O3G0t/ObnX8Rd5vrDTx7CufsvbGDeqrx9zPBk7fCCS0n+DcQ+lCNG7A2SjRxExQGmQCrRuixhKMuMu2wMuOnDZamQScq5+0wSDjdFuwMHy4bSoKqkbZPtSHeD6PNaWMNaisCYB8VjRPu+5jLCsQw4G+vcm24C2o+jCdxx4Pay1pF3gc6kwl6b05zpGR++BpmmSNKWlbHl213XpeyGii8UiAV/OYIztFW2n0XtPCGrKoxf71yA2tj+tLQAC2rZ3SxcCLCCly0+M7SkJbkfoiwnKNVL8UMYq70LWSO8x+Z7nNgRq6UODjwBQWZZYLBYIIWAymWAymaBtWyyXy8FYZQwaJMuyxGQySWsksV0yX1k3yU4hgEhEAwcMea/GDFMmBecwXy7hWtYcWeIzYotqYO+TZLhJKDBguhc8Ou/ROQfAMo3M1uqsdk+DVN5y7nRI6Pprhj9I1TNE+jpvGxD+MeFHTGBJxO2lN900V56Pe/Oz18c6dk/el+Zy9fch9Pa03h2bn0EEjhXKujc6KJeUlEqkpJGgSmqo/H0jYJirDnKCog3PxphUQHLsWv2Z5vC1dNBzvZljA1F0P1dZDlRfmmBpztlaG10u1tVj+b9ljDn3r6/VnLAQRX2fjt0hoyXjAO/76ySgnKvt6urB67YmDX65VKX3kDxLc+T6e1Jrl89Xc+BavazntWmd9LXp3IRhWid5J9rmooFRF2XM94VXa6ptTTkjNDaefh0CjOlJa+51KGpGASbpW1y/T05OYAx77Amg5Pstl5609Ci/jTGo6zo9QzNTAv45eLPWoZf6vFKZyveiOrfWAqRqV6m+U3/WoqDIrAbiBNEm/n0GjZN2T4NUSMbxTY3Uj0TmG5DyLumdG+S687YsFQslEtyPD/rwnu69N7QFnW8slBtK0IPxYGDwScKUoOF+TQiA7T0i018ByTsyIJWnHh5WGjyQ0Gfd8NFGFwAO3jOGq98CrEYTDzpDUQ1gJAwQ4ILLKfyPBIgs/11YGWGcQxwGESHAx3/EocXpxo9AASwRkgEFjmsyBYFiMHCyHZoY7ySSEFgKziUhzSUbYxJI5e9aroP6ThM/+VxLAjrwUhNX4eZZ2jEwNsCYADKSXcSATIDxXHHYeKnaG1AUBFsIU+RgDFAUksZnmEpKSwt6zAI03vvk+jwGOBr05DOtLtS2Rw38RBSrxS4Hz5Y10kyLlhQ1AyL9lmWZVJJ5DJ3uM41d7XFgPQFrLrnmjLGchHyPyL2S5Vxy8Im0JBJk27ZYLBbY3t5OcVGaiZU1lP0gwKZtVjq7ung0ipSVgqCV+lGvgXMCsrFUh3ccAG+Z1pLxsEWAKQJADoCB8w06FwN/45kLgdXjsAbWFrAFa7k8ooMf6QrUp7e79o19/PHH8ZVf+ZW4dOkSptMpXvziF+N3fud3Bi/8277t2/Dggw9iOp3ila98Jd7//vcP+rh16xZe+9rXYnd3F/v7+/jar/1aHB8f3+1QMAShzT894Uf6O7kgD665uz7zHya2PXGUvwPGJLh1A/dpIHau1RjBNSHefQuDa/uvDJh8x5RA6F20KUbppt9RsiBrYdQP2SJyWQXIWBAspBKxMf13iKBlrI2f2dSnLJyPHpmhn0QkvnxfqiWmDgaydU82QWtgC5t+yFBMpUQxiNnAFBamiATM9mqJ9H7T3li3D2mibG1PmHN72vC9DCW+/B55jpYC5LP+PkSC4MFxQmL47vh3kIwR/OO9Y++q4BCCU9fLv9cryAJDu50GHOHo88KEek5CSAV4BYQTp67sU5rbz6UlDZxDabMvAZ/3Kc/KgTcH0fQz8t3YOdfgm69H/q616gzo1YuiRpQCh5opqOsawJCx0faefA/ltCMH6rE1z/dULwmxOpIT766wWi3RtA26run3lW/hOv7MuSY+2/dnzVpwYgAZM1LqMpNo5PlDM+5Kkrp9+zY+7/M+D3/1r/5V/MIv/AKuXLmC97///bhw4UK65vu+7/vwAz/wA/jxH/9xPO95z8M//+f/HK961avwnve8J5U5fu1rX4snn3wSv/zLv4y2bfE1X/M1+Pqv/3r85E/+5N0M565aLrL3HFkfV3Ve8VP3kf6NSGOVUV6kJ1a5jLfN6rizng/kaqp8/HJNr2JkCUrGNia1adWFXjOxr0GBnrb/yKCDjzY1bfuLX7MqwSSPR32wc4DOD6PmyHtVEZKTgrb9aOKm37nclzsKDPKikU1rssnAq8eWE0CRpnLGI3/HvXplnRDm72GMCAGi2llPUpqPMR/7GHMkWokxxwotRWhHBF3nSWw/ufSngULXThIiqVWWuaE/VzHKu9L7pescfOgScyCqJ/0+tPoyB1P9O4zslXwN8nc99l7y96WBRiSaqqpS/ajZbJbmT0SYTqdomibt1VxS1WpNGZ/ONCFjENDTEr8ep17Hvopx2xeGBIAQ00ZRVHNHCTpQB9t2cc3lHPWhHukMeA9rDaxh7UnwgGHO89z09q5A6l/9q3+Fhx9+GG9605vSZ8973vMGL+n7v//78a3f+q34W3/rbwEA/sN/+A+4du0afvZnfxZf/uVfjj/8wz/EL/7iL+K///f/js/+7M8GAPzbf/tv8cVf/MX41//6X+Ohhx66myGdq40RGU2Ic/33eVoOLgCiHUb+0f/ygQ39Z/U9Bg6nXXsahz78d4z2Bo0f0DAkjDnRB8C1nAhr1w0IZLqewQxhgwOBqqK6aR4akDQhH4KRMAfjkm3+oznMXE3Uc9MmrVOfsV7GN/Rg0yo4ad4H8ZHZ+Gz93RjRy2PZpOkYH2MkGTBLkmO2Hd2SeltJKtp+EQLg3NDtWwOIBnXpRwBozHaT26M0cZXv5W/tji3PlDFoxkJASu/LznVgLn4IunqeY2swxhRozjBndk6T6GQf6efnZ0nfo6UYmZc4Hgioam9KUa1q8BOJLFdD5uPRbvh5WQ+5V67h9R/a70jeJfE7sLJm8ZzoM2StOFIQ4PW7cDDBxmMUlfp3oTS6K5D6uZ/7ObzqVa/C3/27fxe/9mu/huc85zn4B//gH+Drvu7rAAB/9Ed/hOvXr+OVr3xlumdvbw8vf/nL8da3vhVf/uVfjre+9a3Y399PAAUAr3zlK2GMwdvf/nb87b/9t9eeu1qtsFqt0r8PDw/vZtgAhqLxAAyCVn3dnSS19ln2bzb/MIua/AhH7ltXHYl32UcxhhGQ4v7ld8hcwNc5/LXDm9Dg9DXivWt7fVu0+dii5M/5KgSzLv3ka6HHk1+T5kTo7VWn/KyBJIYqESvqQ0MwZCHJWdc4DskgkqlShtJOYNsb0RqRzt+RHlsOAAAGEp9wtxocRNXXdeuBsnmTfrQjxoC79kDX9RKSdl6QeQIY5JbTUqle6zyWSb7TNjX9fnsCOXSYkLHk71Jf4x2rNb3vg3Cl5d5juUSRSxeils/fWb6fxgBTMqsL0c5Vt1IFGEDyDtTaAVGxaYcI/d60lCYA3DRN2gtabSoqWOccFovF4DP9PM3w9GvUgzu7+LOq1op6PI7BBcA7YfSkynEFYyy8D3Bdxz8+wHi2G1tbpPPDVbXP58l8VzapD33oQ/jhH/5hfMqnfAr+23/7b3jd616Hf/SP/hF+/Md/HABw/fp1AMC1a9cG9127di19d/36dVy9enXwfVEUuHjxYromb2984xuxt7eXfh5++GEA5+egx4ivtKQrPad+dFOj9L/+g5yL2tRytdAadz/2Q9F+dO4f+U9y1VkQJOPCup597JlScyqfTyIgNOQwaYPaKCdsOREaWwMNammtTgGo/F75LC8jn75XsVQ5Jzx4z+rf46q6zXtuTAU4dp3mmjW4aclH7tfSQV6ML5em8uDR/Ef61H3k/QmgyLPHAFfPV9zAc0O9JoTybz0vkSwGHozqR/rle3vvsvzZol6Te/QaaTtPCL0X1pg6TD7XAKdVamN7WvaIjv/S13vvU6CtthtpD768b733AAzcyLWqdYxJ0gCrxwogBXNXVYW6rjmYuBRHEw7TSGPJ1Pwb/+YHI0A0AAHOdWAbqjs3SN2VJOW9x2d/9mfje77newAAL33pS/Hud78bP/IjP4Kv/uqvvpuu7qq94Q1vwDd/8zenfx8eHuLhhx8eJSJ505tmTEXHFw0lrPO2NQI2dO6TiwbXnne8Z0pSBCCsS1xjRFUT+H49uBO+ngeeb9wBgSUAZriW+XM4A3hUkxEBMJzsPwMvZAc5H9+51ytKUpvVgeMgoFV0aT6kOg39dyFo6YvXbRPTEUL0Nwzj7yEfm9yT70u9V08DSUDoak9cx+4VwqefJ39r47ao+7Q0RzRMLZSnAdKEO1dHSWxVCCE5CMh3WkrTwa3Sp5Ymc5uS9Mlj52e2bZeulz7lOh2kqsE23+/AeAB1vtdljbQkJLYfGb+MQ4OxrFtd1zDGYLFYpKrAIYRks9dOFXnqKZlHDrbje2PIDOVSu85CIWsXgoq9I0QJyqCwcZ0S0Af49DxhaAKINFPjEeDB8lfv3MNp6Ib76rR2VyD14IMP4kUvetHgsxe+8IX4z//5PwMAHnjgAQDAU089hQcffDBd89RTT+GzPuuz0jVPP/30oI+u63Dr1q10f94E2fN2HglIE4f883RYsW6b+mja2p3Uj3Oz68S6+udcIIUIBiP95E02plwzBkI5IV/7bUTlt66aG94bf0cnCYZAHcxrUj9jzzovmANc/ZjMunfV2M/YHtDjVxq9wRwFzPPxaUlD/k1E4nIx6L/va1yy0nErQohyYzkwdNl1zsFSLFQZhgA1mJd6dv5Zvt/HOG89RwG03Nkh31963HKP5viFOGnQluu0SlCvj1bNyff9nAyAvk+RUnQKpPw95O8jgQv10qx+R7l0rYn+2HvNn5eDsXYSyddPyoYMwWN9v+mUXER9pV69xloKy5kAvVd6EGdGzHsu1dGrLuOeQf+7H48ZzKfPoaZsviT9ewSI92639m7G2l2B1Od93ufhve997+Cz973vfXjkkUcAsBPFAw88gLe85S0JlA4PD/H2t78dr3vd6wAAjz76KA4ODvDOd74TL3vZywAAv/qrvwrvPV7+8pffzXBgjB0c3PUm3mynAxBzvx8bQEno0RitE+J1VsuJ/anXRu+z/P6xPscAKv/3GFCkz4WIE6vFZHPnnlxEFDkvy3FHUaJKsRGgGIu0+Vk5d5tz/oO5mSHByOfQE8Gh0XptDYyBD3L4x9eQmySi7YmoZEVIYwClpJw5l6tBRKf/kf6k5dwygEH8FBAL9znEz9Y9yvJ10c8elTZBMd5sqJLL1V36XeSgmD9b3yMEWiSHsXMrBJpomA1B/+Su2MYQvFt39c6fO2bbGpOkxoh4Pr8xSTVvuYSs91+zWvG50A4KRAOVnwDOgPjHPSHXih1MgETiqrTThVYhCrOQr6EOL7BRYloul1itlmqew/XXqlPvJU2V5wwgvJtgTKQH0SUdEh/CK3Qq467bXYHUN33TN+FzP/dz8T3f8z34si/7MrzjHe/Aj/7oj+JHf/RH04v4xm/8RvzLf/kv8Smf8inJBf2hhx7Cl37plwJgyesLv/AL8XVf93X4kR/5EbRti9e//vX48i//8rv27It+Iv0HJG7W3GxcLLFg9Nf1hne9/8Y40OHTBl1saNT/P+p+jDGp1tQIDYzXU1Jf5cPVYxveEUE4PZPW78O4g4L8WzYgiNKcvL6MgJTZHEDw6661A3CNQbkIgUX9BKQs+FMIMKGIC5iDsRA9iakVyQzpt4wxBIDI8o+SPimORzuHcJVfExd/RFIMAAUhmr3nUU9kxPgfpTfiQEVRewR4Bl8h7hlx015b6b1kxD5fR01Y9FprQ7qslfSj7ST6HY+9pxzQJPFn/rn0nY83J9BjBF0/O3cwyQFcpB/pL5cmx0Ajqa48M6xjcx2z5+TSURpv+o5VU5JwldeL93LPEHh4L0DH+4ao91TkcUTOlW9CEdMEUVQHV0WJQMxoSPaJEJCpDuWdaMaL4pkcMmLG2ARCAMHaEM9fiLFk69K5fn/idm4Mu5yXhYn5Knsmm6wFAbCOgCLuURe4lqHz8IGZNhDBE8FSASIbtSni7ISYdPt8QsFdgdTnfM7n4Gd+5mfwhje8Ad/1Xd+F5z3vefj+7/9+vPa1r03X/JN/8k9wcnKCr//6r8fBwQE+//M/H7/4i7+Y9K0A8BM/8RN4/etfjy/4gi+AMQavec1r8AM/8AN3MxQefFly1gMAovPUokwRN4iTMh2RkKUDBwJoGCc1DlTnQPyESj1IaRWQUNexnnLwULSU/x0kk8PwcbLZdR9aZgsAyGx2dJC/g8RQUT8+H4csZeENmagKiWABgvMuiYxE0m/coAlEA2DYdYNLzZt0Xc7FDtYgpCUbXDuUCgziWwaCjEECBvWcCakmVIirpOpLMSHwiUj0e6BfLylnLwGfxhi4znHJFkkZNWKTHJMy5PNcGtFEdgxsNHj1/a5LGLmUpiVfAQKtOgshZHa4oYebSDVpLRQQ5BKO3JODqrYl6edqwNGxUcaY5FSQCCj1HoLJvgKgMhUTVuXUIOmEBhJM9IbLpdehtOAVOIo35VDNFsLwb+e01NbBOQ9OixT7DwFUALPpFCFUWMwXnOlkNgVsgcmkxvHxcbJFbW1tw5hJ2n/GWBQFDYBbAJi9O/u5WmvgvY3OKrnKdL3Ol96DAOA6B08Bhgi1CjKWfRYCEDzgba9JWC6XMa6rS+OyRQFjil61Bx/pUWStR87KpkZhnUX/C98ODw+xt7eHF77wZbCWOQUSqq3kJgPiTNkuGliJ1TmsT6VU3h1YV5cM21BC23jJJmdJkQTGetLSU/z36NPWQMpw7IGWNPIhEUCmWCNKwBDcJPUPCOzoEPh3RCOA2PRJGILbWl9yDcBZ3+P9khZJuEDWe0cwMfGOdBDiYibwiwBBPQgJsPB6yxr048ptlbnOXz7LpQqtytCgoTMLCAAIERUCcZZtQktSOQDpa8cM9/K5BjBWYRkUpYUYpHuHhCjt2QJF0buxtzFJaFn2dh8ig7Is4D3gurDmAq298wCgqqrB2KfT6dp12s1dr4cAzlgwag6ORITVagUiSoHC8nxZx8lkggAP71tOD6UcJnTBQFm3+Xw+eKc6G0V8C/AqKFY7XuhK1qLilbWQPpxzWMVSH2UxAef3AuA9JnWNSV3D2uiwAKB1HsFwfr3bt2+jbduUcULWVeatAVir/Pi9Dh0gtA1P2/i0+ljWOAcsAw+iPluH3ptJAvWsUZF9KMyEtqmyXa1OtMUFD+c9irJI53q1WuLnfuzf4s6dO9jd3cWmdk/n7rNWDr6Q9WFchBA/JoTSQiSSbMDT6hL9e53DPx32w5rqqh+DEHcighvTxY5JE2dwGSERdkr3j8Eo0/oeiMZUNcKR+qiWCCJdxnVLkfhpHvwvTTTlaSEgSkx8D3v8BNherkru8yLhpPkHZip6aVTmF209xkZgY4cM5wO8P902kAPGJultTKWUq4hyu5f2ltKBtkBvsM5tJYN3o67Xqq1kbFb3t22bgjeFCLA018GHYW0iIjGQixQhEpFLwARItgdmaUPguJcclHPpJ5f25DMZ+zC7PDsAGGNimp0m9a/d0gUEZExCcDXoSZxkvjYhANWkRlX1tbD0Osr7yivwCoEfMBfQEvXQYSSfq36GfC/vKPgAQgeQlxcdUyGtUFclptMpCmPRLhYAGBD29/d5/boObddhPp+n5zBAcrAsQkAXAVHmUhQWbdsNXNnls+ViAaKYkFbtZ10A1DkXY5o82maJ4DvUdR21X8JaC0ghkVu9F7m+FPfB58HDGAfEc9U6Bx98iu/TAHpWu7dBijjdBh8yn4zzgBwgzzpgCjBWDharQoOPJFCpeHLRN7WUauGUwaR3OZSKAPADieKDMSigt0YwaVRrtH5doEjox4kzoAAq42gH9xAhQHTtnhPuBiGqlNIhiZSUpCtQBGZ+UkBI60SBemCTrMkxEj34kFSIFNdEhCcfOEmlVpMaWTditWSIICkg3U9jaBDPJZJNTRMfrZrSa5bbOfTfuTQ29ix9T35dDgCa09f3yNjyWCAyBlapq/Pv27YbphIKG8aIIbcuhDxfBw2cefZrqD40gOtzNQSYoapQj1+Iv8xFg76WXH0I6DpOvUPEpTWEq9eqPg00Ap56Tjw+nwyy+XdahShzz+chfRMRClsOQKosy6Q2dc6hLApMpzU672HgUVpCMAZdjGvk5zFLa4krssGzJBycYx2CYSnauQ4UHAw8CmNhYwJtCg4ED0OcMYK4l8i08lnsHNvIbKxObaoaXWdYVRfWvTeZftqoGYkhGsYD5ECm4LEag8JaDt7lGYM8u6IXRRmBDPB+87nU7Z4GqbKqUBQsdi8Wc3RdSLrpk5MTFBRgC4vggKIwkFQenXOotyZYNSu0XcB0OsN8Pk9eR2Puv0yi46aNyRO1EwERUqZwacxwhARK5AXHFNGTm1UjGvss+zd6kNp0DX/GHnaSL2+dgANd5+F89MAznCRVQNVEVZ0lgs3sOIlAKT0+ASrJZNzMBffhnIMLHSvoovu4GJil1pONmzutYQC870sESMJbaw0QTHRl7dVGOgASWC8ZvgnQNUdfVdUoAU4qkczGp20p+T0a5LSqJVdFybU6mDq3P4hdB2DJoCgKTOoJ79ng0TZMnEGAd7EGlWtBaHnHRHVp1zp+Lyqom8wQ1LWKb6xuEsBAtFgs0j3CHeeBqSKNzWaztHZyzuT9yPNkXvI+pD5SbosCYnYJQto/3vvolbYaZc6kz9lshslkMnDTFhvUarlE13XY2toC0KsXDw4OMJvN0tybpkn3zmYzLKLEMp1OMZ1OURYT+ODQtg2Cc5wRHOKUwZqK6XTa24B974IfQsByuRyAuKj09J6z1qZaX8AwVGc+n6f8f6KKRHT+EDVl61q4rrcjVVUFMkDX9dKoZh6EPrJKuA+O589dUlUKM0RkYaxB07SxvpxB10U9ko/14M7R7mmQIoDVviHqSL3nwFH5Ll5EFGIJA/4gOE7MqXNVaYIwTshMIpBJmUWK6MRrckEqBBlDlEXS4LTX2ro0dTZI9VLjpmtY0tgc3BpCiBo3kw47Oz4YxEx/EQj5sxD7E8FSpKwgf8f7OaO5BYwUexRw4XeRVJXxJ4gEmgokDqUPsWklpW4IgPPJmSFvuXSzcX1GvtPqPn1QNaho0Ppomt5juSSVq5n0NVoFmasjtb1w4PCK4fvmOYiUJsHgQ7WmXgfgdFWlBrIcrLX0pOe4aR3G1h0YpofK15znNGRG1s6K2kuaSdOqu3zdRJrVEmUvca0nq9VrRbFqLUIvhZjIFATI3wQbmUdmeB28c9EcGxhQxNYORO/g+AwiUJT6KMi1FHUbcQ2dg3cxRCSwdGasjWpdl7JGFEXBY7E2hk6wpORlPsLEpPWJ9CEw2BgAwRjAMH2A6T0uk/6FepMHqLeduT+NOKm/aM11HULk/IOI9xB9p4UhD2skQSUvrnM+JWfsuhZd55OhVW/AgeqPaAAI/eEaHl5PwwMPINVFgpaazglS684T69LU+tfrQJVAT9RmMkyiyPFE1RlCHLCJByQiuyrdATnc4BQnAGBsiUJilmSu8jy+AiALsgQT+GClEh2xvhcKfg5nENC2BxtVOeLSy8DvQkAglma1qkknKNV2Ev15vzT92mvJBegrjWpjMxENuG8xoJ/VcslLWm7z0CqqTSCr1S8cd9TCWu5HHCOEUBZFGZ0n+kqtOSPW5ylkda+sm/zOn6nnqwmzVqFJHjotXWl1pcxlrGl1mpxJqT5LxM4Ueh7ehyjV8LMkrY+MT8Yon+mM7KIWlL0m3m96T4jEoucnRLau60HS1l4KJnSug/fR7ibScFEAgdbWQ2xZ2vvSWota1eoaAHgQb8foIOL7EIigPBOh3rWNqrnguVJuAaAsCtQxC4hIvJ1yHJF1rio+qyGaU3wIXGk3ng3nXG+iIIp2bSARmvib60qx5x9G9vemdk+DFCc+NChtAWcL+FjQj+GD+tolkpeNNJ0PSf2lCYLmuvrfPTHfRETSZ2p8Y33pTOL6Pt1YsBhC0KgkNXLQx6Spnh3rgapfCAYmvi8kqSWBzUA92Etm/SiEQx3GqYiRVdxExOXbWCA4B52FIkQ1owFzVyHa7QyZVONJnsuebOPBlrlaLv9+jMse+6yf0zDx6yYO/aNpY3vntO83XaslI46L0c5DfJ1kSmdCIzaioYt+iJz6Jtualoy0BKKlHm1PEhDV+/w8ACV9C0iN2aLyJLIh9Pn7RD0nKktgaCfTUpnMM9m+Qi/NivpRu6znTI1WWWrwZ8mI93LXdSgSsPdr5zzbggK7ykFiswiiKovPQ3RqidoiHw24Poi5IVqGA2eICJ5j9wicjd8YQmEtCmvhPcHAwnmH4DyC8akAYRh4/XEaI9k3cvYZm+M6geA81ykbSOSiVskASmgH27l6qfA87Z4GqWldoyxYR2ooxjUElp7gHMg4LqvtXXJ9bOFgDTG4FQUMAVVZorRF5DhMMugND9PIoo5IO2vSDZR0AUDieQQx4xGG/rX+b6xJUevj2/CZgCxFgBGA0oTOIJV7TwdR/haPOt039RIrxXUULy4AidsLIaBz0UU7HjgyAUFJSOkeIKprmROzRYEy2oeSesB5eE9AcHEMDHparZQzEjIeWZtNQKPvzW1Imgjp+84LUhooN0lIOdHMn6PHNuaZJnOQV+6cj67bfR44yRnHz9CEQsY3VPWNjXUM9HXArFaH6jXUwbxj3oF5yzO+TyaTBFDavZwBjYvxie2qruv0XO1BqAFU28L0umk1pkgX8lwZj5awdBYNXbakbVd95nrLvq3eu6ihIFgStZqHdx2XaXdd0iIURvL9RQbBBzgAhmJgbpLwWXqCoQR0CJFRJ4JkfbDWooyS3Crasbzjyszee7RdB+cdyHBhUOeoP8dgRwuEqHInBtmu61LQfA9GSuORVHwAwAUqfdfCRzVm0/SVLU5r9zRIFQXFOJFY4hgBJm4EE6L7Y+QwTFEgwMAEDwpcXVKqn9dFgVUEKQqInI9w5ywLsBASRPMF5j75xYh0ZEZxTGAoVxEqzg29fScRVgxjRtb65SePP0v/DkV0mjADN3REb0d4DxtIHA/5uyxJLOIm7TGKJSxIkKeAtXouRcLOxnkjWm0Ysin9jgGlgGTv2aukIE5RZMGOGlbdS8bARfWr6PiTPKjsBNrrSn83tj7537knnyZs0k5PxbXecvuO9lrLny9cvAahHHylH762hVRB5e8FCABrCV3H3DSrTFniUK8qa9y/llTGJDwtueZ2GQ08ogrTIK8BcPBkNT/dh3aU0J8lxw71bvNx5NJe7yAxTMza74/+GaLqEiDT/YrqWIBOgoTl894JJKoTCehkSb3j55QGzkvaI4kPVFkqpFI2Qe1BBw654HfrPTvESFA9GY8ihnQEMoCxXCLH2EhjOEUROYPgoso8JkDwUeNhCCgKyx6DhqWlwGoNtvvzNgFFoYBsSPuGIiPMdmekMUQkjOvnwKFCBng22KTKqkRZFOyhYgCKgOK7FsGzJxlZITQEH3i9isilAwRnCXVdoao5BxrFtD5pu0TiLUZQQ5yXLpCH8YAGKdoAUkOuW6lZ5LcUFJRDmlRkp4OUPRdIGQRtKI43h/4mJc1E1ZE4PiCK/vEAizQl/UvZa0mGmduCtK1Iq1UFpPK10d6VWjXTS1JuQBRtBKo8/mUsc7ZekxyIxpq+N1cb6r7Oq1fXbtF6bvJvXb5BrtVj1GORea5WK8znc1TRdiHAIH1NJpPkrShEVavtxvZOPq8xiUrHMskcxK4rUpt442lbi06AmqszNXjr+eocdjl4ec9ZDDToCXDotRNgkfnkWddzyS6EMIi38t4n13YJLJZ3JvPWUjcDlUh8LCl1bZT2wXFP8B2Koho8V95vnjFk7FwPJG/nJI9Y6kdLjj3IU3pv0odW1Y45uMi1AJLjUgi9w0rfklVqY2PmlmBjggHXnY/Zu6dBqrCWHSMMUFiChYULHh08isKCvEg+4m0T4Bxg0yaPOl1Sv0k8UQCOKwi9QRBxoYF0DbMVPJ6xV5QffvWP/jOi5GQwdv1mSWr8eUOuklIAbP+8PuzZGJP03unAmlhdM3JGIc15SFj0Ztccsj74cq0mSrkjQQ4AeebmTXPkdzpcJw2I+tqzWu6ynhNzTQQ32W02tdwrbGwuY/foa8b+FoJWFEVSOQF9lgIBCg1+sr5jz5ffmqDrceeAJfdqaUnbf+QaWdOcedB9aEARsJWxi3SZrwMb7MW+FvrPsvezZi9S+1W7/EvWb10GI3eoyaXCnMnS50HoQ/AeLsSYP4prQwQh7Pl49DPz9daAKtKbSJSasdKZUfpx92mRxNVdMz0yj1a516ekw7EPEEGSEfQai/NZmEIICD7AhWFl6LPaPQ1SW1tTlIVF1xYILnpjdS3rd6Nx0QV+iWVVwQegsQ0kFUzXeSybFj5wCWpWawEISsUTjf8E9ComE8PiguhdeTynSVLyd4IX/Zk1IqYAQJJ2+nvWGysD1rnh/FkBBsYWMNYkOxGIgJDH8TAgGcuSVEiBwupAZcRFb2ygBxutchtzTPEjW1pLFdpuIJyvlpLkems4jDWvT9R7a/m1cY6B1xDUe6P52NrnRPA8qr98bDlhztchL1eh+5EmgCNxYcLp68Mva6AJb/5sTfhyINXvbAxY9DuS50lbV6Wtq/Kk6XEIkRYbp9yjvQXlWgau6Lkb95RINfJu5H5dg0pLdoP0P4hHIwy9EPW6C+BqCVvPJ2e2mDAD3nE2hsJylhAX6YzcI/dprYGsqV6fXPUs485BSktS0p+O7dJejjJX2ffL1Qp1XXMAckywK1UCAGbQpV9mgKI0d0YLIaBpWzjHTFQXmamz2j0NUtZyUS4uR27hPWBg4E0R1Xsezju0LashbLR3VIFdoDvnQCaA4GFEt2oICGxvEpCSJLRExIZCBVJnqfuAXHLI1H0RnIKSpFiuO90mZYiz1uVteC0l7zyRJEOIqkQMCQ6RXBvVmUHilU6XpIChDUAOdW4b0nYYaxRgxqY5POH8gXVQEELG74LgVRLNfP5jaqXT1Fx502POpaC879OaBo0cmHJVlVwnc9Vrq8FAiJgQWp3KSNRRZVkmopw/Zwws5XvpfwxINNjIe83tRjIvLY2MSR56/fVcpT/ZCzqLhBBfeQaU6jh3hsglfT0uaXKd9z66TQ/nK2sxZhfT18nf0n9RlEolGdC17NDVq9aH6yT3y3rmnpCahohaXK4XCUePLZfCejvc8H1I30AveYsbe1kU6JqhJyXHK/ZgWJYllsvzOUAAuYrwfO2eBqnt6RSTSY3gHMqyiFkIOMizqqpemnIxySyAVdNguVqh8x6Hdw5xeHIMU1hMJhWcA0AWznnAMYBQkpaiCjCCiuDLedR9Q/WTSC29NBUICLp8OXqQGiOSFEFjTJJaez7YW8dYm+IrfAz+k3tsYWFj3JKxBWAMvGTHSAHKfQyGnhcwrgLTagRg6Absggf58QBqrRKSfnIJYNNc9bVa166Jcj7+vN8xqSwHQW3bOU/TdX1knLmNRPeZp0TSKioBnBC42q1kOBBiWlUVDg8PAXDWgVu3bqGqKkwmE0wmk0TccuKdr2m+VmNSH4AEiFVVJcCUku3aNiSqqU2qMr3mZVkOYpC850wSbdtiNpsNktyKhkMkIInRyu078mwdEym2unQ+Q2DTQXxfOu7LOYfZbJbyCE4mk7X1kXkws1VGBwTO9CB0qYjZWArLaYUkg7oGEwFbfSaAoc1K2xit7YNv8/H0tjLx6OwBTzuF6PuKKJ0XRQHreqcRaQzsfJ6rqmb7W9uMb37VyrJCXVeScCepFc9q9zRIheAQvBgtLUzMG2UAlEV07wyESV1j1XLgrhxk6xyM7bMg8IZxkKScZNjzTPKf9jW7ho4EmjUYI1lrorlo20Ji2QbXnpfwna+xw0giMhCAo5StYUCAqFdHmphTTyQqfa38rVUPOae/SdVHRDAw7DGEISepgUxzk5rDPquNAVXOSWvir7lO/X0OYFpyyOd7VhszSmuX7FxS1M/MmybwIQSsVqtEzLWKS0ArBHYCqOt6aATPnqvnLi2XFnJpS6+hZi7kc5F8xP4h49m0z/W70kxDbu/SACdnaSBdZeulxzs2/01nbmy/5wzTGNiuv6+4nrZXZwL9HtTagpxBy8c4xjRZa1O9Or3nx+ajJTDNLOkzW0rhSdcHF+fr2fd/vjMAIAX9Sno1rUI8rd3TILVcLTnuIASUBcFTgaK0kbPjuChjLXZ2drFaNWhdh1XDC9/GBXPeoZNaJ9TAeQPnAowkSTWsA+DUSkzgQRS9CXEmSOmX3181lKTIGnhSh4VEPz5UI0B9Zog2evcNnk8WJI4I8qFDMn4SUSzkp8YZ1X5SCI8ZMA+E9ZIX8vdZ4JoAKqod+0q4Q/XLWcRjSNjPBnRNHDVRkf61xCfjyz3vNFcqREV7iJ3VtFSWz1kT5lw9lhv5czvJYrHAnTt3UtBrXdeYzWaJsMzn8zXgIOqdEmQs+u8xQErvDUNiqT3pJMfeWL85UdeSrW5azauZAQ1U+f7gPJodJMBb96HnPKYC0+9Rrpf1l1x2ej4a6Gez2aB/PTdR93EJFPbua8oS1vYAYClAbx0tScm7zxkVzcTJPRL/1GVz1vtS9rf8iBNNbqcCYq7CyFQISOm1i9RrsBfO24ShEG3AX2pJSl5cs1rFLOaebUtmAusIznVo2xKBDGzcvK1r0bYdp1IC2zK6tkXnOnQxlso5h7Zjaco7LnHgvdiNJD8WgMCpQXy0tAq5ZAPmyHi9iSmTRN2HHqSIOGv4BptUzrnIZzGMb/Cc9U1D7DrhfXScYFD2ISTnBZZsgGAcgi8QjAesgYNRIBV1yRnhQVgnHCEEBB+/8w5O4rECZ7Pw3qQD0LXDuj/BGLTNCkilJ/iaRHS8QygsvGObgyH2yHK+50STQwVR6sM5n9SpQwJn4D2/Vdf13wuRkr+1WlOIWuc4HY33AcH3MWjyWW9bMPCuG9Qj6u0Dcf0Q/xadv+/tAPp7BBbDJQVY2zRYLOaYTCqURYnCGnjXousaGOLnOtfCO4euLeEdB7m6ri/5Ya2Fi+oyY1hL0Dbtmhu3BhUmjuwd27YreGfRRFW7tRZts0LbRrWkd+A4Rn632oZljCbuQ+mLwAS47Vqslgu0zRIA0BpC8DEeqW1hPSHAQVIQOefTuQieS18AHPsTQkDXNuhadsKwhtBYk2ytbPyXv5mpY5DkuayWTOCbpkFhe4cEbftKqlvngFChd0Fv4DoCRHKJVINt5m3K+EDyTlxfEVgySThXDJ8T59u1DccPBo/V0sTP+z1UFJaLGcbz03W8f11UjfI1RXqWsXxGV60E/TIb771nx6oQ+oKrwfP7bpqeGYipzYgIzlpe866DdwYBDpJ+S1SEZ2kk7smihx/60Ifw/Oc//897GPfb/Xa/3W/328fYHnvsMXzCJ3zCxu/vSUnq4sWLAIAPf/jD2Nvb+3MezZ9eOzw8xMMPP4zHHnvs1MqV93q7P8+/PO3ZMEfg/jw/Hi2EgKOjIzz00EOnXndPgpSoX/b29v5SbxBpu7u79+f5l6g9G+b5bJgjcH+eH2s7j5BxtrvU/Xa/3W/32/12v/05tfsgdb/db/fb/Xa//YVt9yRI1XWNb//2b0+FzP6ytvvz/MvVng3zfDbMEbg/zz/Ldk96991v99v9dr/db8+Odk9KUvfb/Xa/3W/327Oj3Qep++1+u9/ut/vtL2y7D1L32/12v91v99tf2HYfpO63++1+u9/ut7+w7T5I3W/32/12v91vf2HbPQlSP/iDP4hP/MRPxGQywctf/nK84x3v+PMe0l21X//1X8eXfMmX4KGHHgIR4Wd/9mcH34cQ8G3f9m148MEHMZ1O8cpXvhLvf//7B9fcunULr33ta7G7u4v9/X187dd+LY6Pj/8MZ3F6e+Mb34jP+ZzPwc7ODq5evYov/dIvxXvf+97BNcvlEt/wDd+AS5cuYXt7G695zWvw1FNPDa758Ic/jFe/+tWYzWa4evUqvuVbvmVQA+fPu/3wD/8wXvKSl6SI/EcffRS/8Au/kL7/yzDHvH3v934viAjf+I3fmD77yzDP7/iO71jLAv+CF7wgff+XYY7SHn/8cXzlV34lLl26hOl0ihe/+MX4nd/5nfT9XygaFO6x9lM/9VOhqqrw7//9vw9/8Ad/EL7u674u7O/vh6eeeurPe2jnbm9+85vDP/tn/yz8l//yXwKA8DM/8zOD77/3e7837O3thZ/92Z8N73rXu8Lf/Jt/Mzzvec8Li8UiXfOFX/iF4TM/8zPD2972tvAbv/Eb4ZM/+ZPDV3zFV/wZz2Rze9WrXhXe9KY3hXe/+93h937v98IXf/EXh+c+97nh+Pg4XfP3//7fDw8//HB4y1veEn7nd34nvOIVrwif+7mfm77vui58xmd8RnjlK18Zfvd3fze8+c1vDpcvXw5veMMb/jymNNp+7ud+Lvz8z/98eN/73vf/b+/+Qppc4ziAf7W5pYjOUDcNXEYrM1PM4RgWXTgK6SK6CAkvVl2EpmTgRRKEV+VFEFQXRgUZFEkF0h9IE/8MDFu1HLoM01oZ4Vol6vqDmvueC/E9veo5nA4e9/qe5wOD+T4P4/d9554fm8982d/fz+PHjzMqKoper5ekOjL+6smTJ1yzZg2zs7NZWVkpHVdDzpqaGm7atInDw8PS7dOnT9K4GjKS5MjICE0mE/fv30+Xy8U3b96wubmZg4OD0hwlrUHLrknl5+ezvLxc+nl6epqpqamsra0NY1X/3twmFQqFaDQaefr0aenY6OgodTodb9y4QZLs6+sjAD59+lSa8+DBA0ZERPDDhw9LVvvvCAQCBECn00lyJlNUVBRv3bolzXn58iUBsKuri+RMM4+MjKTf75fm1NXVMS4ujhMTE0sb4DckJCTw8uXLqssYDAZpNpvZ0tLC7du3S01KLTlramqYk5Oz4JhaMpLksWPHuHXr1r8cV9oatKw+7pucnITb7YbdbpeORUZGwm63o6urK4yVLR6fzwe/3y/LGB8fD6vVKmXs6uqCXq+HxWKR5tjtdkRGRsLlci15zf/E2NgYgD//g73b7cbU1JQsZ0ZGBtLS0mQ5N2/eDIPBIM3ZuXMnxsfH8eLFiyWs/p+Znp5GQ0MDvn37BpvNprqM5eXl2LVrlywPoK7ncmBgAKmpqVi7di1KSkowNDQEQF0Z7969C4vFgr179yI5ORm5ubm4dOmSNK60NWhZNanPnz9jenpa9ksAAAaDAX6/P0xVLa7ZHH+X0e/3Izk5WTau0WiwatUqRZ6HUCiEo0ePoqCgAFlZWQBmMmi1Wuj1etncuTkXOg+zY0rR29uL2NhY6HQ6lJaWorGxEZmZmarK2NDQgOfPn6O2tnbemFpyWq1W1NfXo6mpCXV1dfD5fNi2bRuCwaBqMgIz1+Orq6uD2WxGc3MzysrKcOTIEVy9ehWA8tagZXmpDmF5KS8vh9frRWdnZ7hL+U9s2LABHo8HY2NjuH37NhwOB5xOZ7jLWjTv379HZWUlWlpasHLlynCX858pKiqS7mdnZ8NqtcJkMuHmzZuIjo4OY2WLKxQKwWKx4NSpUwCA3NxceL1eXLhwAQ6HI8zVzbes3kklJiZixYoV83bUfPz4EUajMUxVLa7ZHH+X0Wg0IhAIyMZ//vyJkZERxZ2HiooK3L9/H+3t7bKrbxqNRkxOTmJ0dFQ2f27Ohc7D7JhSaLVarFu3Dnl5eaitrUVOTg7Onj2rmoxutxuBQABbtmyBRqOBRqOB0+nEuXPnoNFoYDAYVJFzLr1ej/Xr12NwcFA1zyUApKSkIDMzU3Zs48aN0kebSluDllWT0mq1yMvLQ2trq3QsFAqhtbUVNpstjJUtnvT0dBiNRlnG8fFxuFwuKaPNZsPo6Cjcbrc0p62tDaFQCFardclrXghJVFRUoLGxEW1tbUhPT5eN5+XlISoqSpazv78fQ0NDspy9vb2yF0NLSwvi4uLmvciUJBQKYWJiQjUZCwsL0dvbC4/HI90sFgtKSkqk+2rIOdfXr1/x+vVrpKSkqOa5BICCgoJ5Xwd59eoVTCYTAAWuQYu6DWMJNDQ0UKfTsb6+nn19fTx06BD1er1sR43SBYNBdnd3s7u7mwB45swZdnd38927dyRntn/q9XreuXOHPT093L1794LbP3Nzc+lyudjZ2Umz2ayoLehlZWWMj49nR0eHbEvv9+/fpTmlpaVMS0tjW1sbnz17RpvNRpvNJo3PbundsWMHPR4Pm5qamJSUpKgtvdXV1XQ6nfT5fOzp6WF1dTUjIiL48OFDkurIuJBfd/eR6shZVVXFjo4O+nw+Pnr0iHa7nYmJiQwEAiTVkZGc+RqBRqPhyZMnOTAwwOvXrzMmJobXrl2T5ihpDVp2TYokz58/z7S0NGq1Wubn5/Px48fhLum3tLe3E8C8m8PhIDmzBfTEiRM0GAzU6XQsLCxkf3+/7DG+fPnCffv2MTY2lnFxcTxw4ACDwWAY0ixsoXwAeOXKFWnOjx8/ePjwYSYkJDAmJoZ79uzh8PCw7HHevn3LoqIiRkdHMzExkVVVVZyamlriNH/t4MGDNJlM1Gq1TEpKYmFhodSgSHVkXMjcJqWGnMXFxUxJSaFWq+Xq1atZXFws++6QGjLOunfvHrOysqjT6ZiRkcGLFy/KxpW0BonrSQmCIAiKtaz+JiUIgiD8v4gmJQiCICiWaFKCIAiCYokmJQiCICiWaFKCIAiCYokmJQiCICiWaFKCIAiCYokmJQiCICiWaFKCIAiCYokmJQiCICiWaFKCIAiCYv0BQ+OdrJJMNSgAAAAASUVORK5CYII=\n"
+ },
+ "metadata": {}
+ }
+ ],
+ "source": [
+ "# import matplotlib.pyplot as plt\n",
+ "# import glob\n",
+ "# import cv2\n",
+ "\n",
+ "# # Load and display random images from the dataset\n",
+ "# image_paths = glob.glob('/content/drive/MyDrive/Yolov5/Accident Test Set.v1i.yolov5pytorch/train/images/*.jpg')[:5]\n",
+ "\n",
+ "# for img_path in image_paths:\n",
+ "# img = cv2.imread(img_path)\n",
+ "# img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)\n",
+ "# plt.imshow(img)\n",
+ "# plt.show()\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "E2GCGwYtxRun",
+ "outputId": "cebca5c6-c044-4564-85b6-2ddcc7002d4b"
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "# Ultralytics YOLOv5 🚀, AGPL-3.0 license\n",
+ "# Hyperparameters for low-augmentation COCO training from scratch\n",
+ "# python train.py --batch 64 --cfg yolov5n6.yaml --weights '' --data coco.yaml --img 640 --epochs 300 --linear\n",
+ "# See tutorials for hyperparameter evolution https://github.com/ultralytics/yolov5#tutorials\n",
+ "\n",
+ "lr0: 0.01 # initial learning rate (SGD=1E-2, Adam=1E-3)\n",
+ "lrf: 0.01 # final OneCycleLR learning rate (lr0 * lrf)\n",
+ "momentum: 0.937 # SGD momentum/Adam beta1\n",
+ "weight_decay: 0.0005 # optimizer weight decay 5e-4\n",
+ "warmup_epochs: 3.0 # warmup epochs (fractions ok)\n",
+ "warmup_momentum: 0.8 # warmup initial momentum\n",
+ "warmup_bias_lr: 0.1 # warmup initial bias lr\n",
+ "box: 0.05 # box loss gain\n",
+ "cls: 0.5 # cls loss gain\n",
+ "cls_pw: 1.0 # cls BCELoss positive_weight\n",
+ "obj: 1.0 # obj loss gain (scale with pixels)\n",
+ "obj_pw: 1.0 # obj BCELoss positive_weight\n",
+ "iou_t: 0.20 # IoU training threshold\n",
+ "anchor_t: 4.0 # anchor-multiple threshold\n",
+ "# anchors: 3 # anchors per output layer (0 to ignore)\n",
+ "fl_gamma: 0.0 # focal loss gamma (efficientDet default gamma=1.5)\n",
+ "hsv_h: 0.015 # image HSV-Hue augmentation (fraction)\n",
+ "hsv_s: 0.7 # image HSV-Saturation augmentation (fraction)\n",
+ "hsv_v: 0.4 # image HSV-Value augmentation (fraction)\n",
+ "degrees: 0.0 # image rotation (+/- deg)\n",
+ "translate: 0.1 # image translation (+/- fraction)\n",
+ "scale: 0.5 # image scale (+/- gain)\n",
+ "shear: 0.0 # image shear (+/- deg)\n",
+ "perspective: 0.0 # image perspective (+/- fraction), range 0-0.001\n",
+ "flipud: 0.0 # image flip up-down (probability)\n",
+ "fliplr: 0.5 # image flip left-right (probability)\n",
+ "mosaic: 1.0 # image mosaic (probability)\n",
+ "mixup: 0.0 # image mixup (probability)\n",
+ "copy_paste: 0.0 # segment copy-paste (probability)\n"
+ ]
+ }
+ ],
+ "source": [
+ "# # View hyperparameters\n",
+ "# !cat data/hyps/hyp.scratch-low.yaml"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "cdzD-wmrxmzG",
+ "outputId": "167ec46b-7631-488e-beae-050e78cc2dc3"
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "\u001b[1;30;43mStreaming output truncated to the last 5000 lines.\u001b[0m\n",
+ " 47/79 4.62G 0.02157 0.009329 0.002925 32 640: 83% 62/75 [00:05<00:01, 11.55it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 47/79 4.62G 0.02155 0.009356 0.00295 40 640: 85% 64/75 [00:05<00:00, 11.93it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 47/79 4.62G 0.02152 0.009446 0.002945 43 640: 85% 64/75 [00:05<00:00, 11.93it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 47/79 4.62G 0.02151 0.009455 0.00291 26 640: 88% 66/75 [00:05<00:00, 11.30it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 47/79 4.62G 0.02156 0.009433 0.002904 31 640: 88% 66/75 [00:05<00:00, 11.30it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 47/79 4.62G 0.02155 0.009403 0.002869 28 640: 91% 68/75 [00:06<00:00, 11.19it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 47/79 4.62G 0.02152 0.009408 0.002857 43 640: 91% 68/75 [00:06<00:00, 11.19it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 47/79 4.62G 0.02152 0.0094 0.002829 31 640: 93% 70/75 [00:06<00:00, 10.70it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 47/79 4.62G 0.02159 0.009407 0.002843 30 640: 93% 70/75 [00:06<00:00, 10.70it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 47/79 4.62G 0.02171 0.0094 0.002855 34 640: 96% 72/75 [00:06<00:00, 10.94it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 47/79 4.62G 0.02167 0.00937 0.002824 22 640: 96% 72/75 [00:06<00:00, 10.94it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 47/79 4.62G 0.02165 0.00937 0.002803 35 640: 99% 74/75 [00:06<00:00, 10.57it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 47/79 4.62G 0.0216 0.009366 0.002872 37 640: 100% 75/75 [00:06<00:00, 11.10it/s]\n",
+ " Class Images Instances P R mAP50 mAP50-95: 100% 7/7 [00:01<00:00, 5.36it/s]\n",
+ " all 200 204 0.665 0.586 0.631 0.386\n",
+ "\n",
+ " Epoch GPU_mem box_loss obj_loss cls_loss Instances Size\n",
+ " 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02346 0.007852 0.0008824 31 640: 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02344 0.008277 0.001474 25 640: 3% 2/75 [00:00<00:06, 11.66it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.0235 0.009473 0.001346 38 640: 3% 2/75 [00:00<00:06, 11.66it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02431 0.008973 0.001847 24 640: 5% 4/75 [00:00<00:06, 10.79it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02275 0.009054 0.001753 30 640: 5% 4/75 [00:00<00:06, 10.79it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02169 0.008944 0.001652 32 640: 8% 6/75 [00:00<00:05, 11.79it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02178 0.009281 0.001634 31 640: 8% 6/75 [00:00<00:05, 11.79it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.0221 0.009281 0.002188 37 640: 11% 8/75 [00:00<00:06, 10.83it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02194 0.009452 0.002142 38 640: 11% 8/75 [00:00<00:06, 10.83it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02137 0.009591 0.002017 43 640: 13% 10/75 [00:00<00:05, 11.46it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02047 0.009214 0.001999 24 640: 13% 10/75 [00:00<00:05, 11.46it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02063 0.009365 0.002375 39 640: 16% 12/75 [00:01<00:05, 11.63it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02072 0.009259 0.002435 26 640: 16% 12/75 [00:01<00:05, 11.63it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02128 0.009473 0.002696 38 640: 19% 14/75 [00:01<00:05, 11.99it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.0212 0.00938 0.00269 30 640: 19% 14/75 [00:01<00:05, 11.99it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02098 0.009318 0.002587 30 640: 21% 16/75 [00:01<00:05, 11.53it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02103 0.009411 0.002494 34 640: 21% 16/75 [00:01<00:05, 11.53it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02152 0.009382 0.002824 29 640: 24% 18/75 [00:01<00:04, 11.82it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02164 0.009502 0.002712 37 640: 24% 18/75 [00:01<00:04, 11.82it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02138 0.009436 0.002693 34 640: 27% 20/75 [00:01<00:04, 11.27it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02172 0.00941 0.002642 30 640: 27% 20/75 [00:01<00:04, 11.27it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02164 0.00938 0.002587 30 640: 29% 22/75 [00:01<00:04, 11.78it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02149 0.00941 0.002515 33 640: 29% 22/75 [00:01<00:04, 11.78it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02113 0.009316 0.002444 30 640: 32% 24/75 [00:02<00:04, 11.68it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02114 0.009334 0.002376 29 640: 32% 24/75 [00:02<00:04, 11.68it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02111 0.009312 0.00245 32 640: 35% 26/75 [00:02<00:04, 11.71it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02122 0.009279 0.002584 34 640: 35% 26/75 [00:02<00:04, 11.71it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02124 0.009327 0.002534 30 640: 37% 28/75 [00:02<00:03, 11.76it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.0212 0.009325 0.002474 29 640: 37% 28/75 [00:02<00:03, 11.76it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02116 0.009302 0.002421 34 640: 40% 30/75 [00:02<00:03, 12.19it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02114 0.009282 0.002381 30 640: 40% 30/75 [00:02<00:03, 12.19it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02107 0.009305 0.002428 37 640: 43% 32/75 [00:02<00:03, 12.05it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02107 0.009323 0.002415 38 640: 43% 32/75 [00:02<00:03, 12.05it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02107 0.009328 0.002408 32 640: 45% 34/75 [00:02<00:03, 12.32it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02098 0.009318 0.002372 30 640: 45% 34/75 [00:03<00:03, 12.32it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02075 0.009261 0.002333 21 640: 48% 36/75 [00:03<00:03, 11.58it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02117 0.009289 0.002362 35 640: 48% 36/75 [00:03<00:03, 11.58it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02118 0.009329 0.002352 32 640: 51% 38/75 [00:03<00:03, 11.71it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02116 0.009428 0.002323 42 640: 51% 38/75 [00:03<00:03, 11.71it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02112 0.009404 0.002616 29 640: 53% 40/75 [00:03<00:03, 11.29it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02096 0.009356 0.002582 30 640: 53% 40/75 [00:03<00:03, 11.29it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02104 0.009377 0.002533 30 640: 56% 42/75 [00:03<00:02, 11.39it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.021 0.00933 0.002494 24 640: 56% 42/75 [00:03<00:02, 11.39it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02101 0.009318 0.002479 37 640: 59% 44/75 [00:03<00:02, 11.05it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02098 0.00927 0.002443 26 640: 59% 44/75 [00:03<00:02, 11.05it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02108 0.009199 0.002407 29 640: 61% 46/75 [00:03<00:02, 11.30it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02103 0.009222 0.002402 31 640: 61% 46/75 [00:04<00:02, 11.30it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02104 0.009274 0.00237 34 640: 64% 48/75 [00:04<00:02, 11.15it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02103 0.009251 0.002411 28 640: 64% 48/75 [00:04<00:02, 11.15it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02099 0.009282 0.002473 33 640: 67% 50/75 [00:04<00:02, 11.43it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02091 0.009237 0.002452 27 640: 67% 50/75 [00:04<00:02, 11.43it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02086 0.009294 0.002435 45 640: 69% 52/75 [00:04<00:02, 11.34it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02114 0.009257 0.002411 23 640: 69% 52/75 [00:04<00:02, 11.34it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02117 0.009261 0.002383 35 640: 72% 54/75 [00:04<00:01, 11.18it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02115 0.009257 0.002351 31 640: 72% 54/75 [00:04<00:01, 11.18it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02114 0.009252 0.00235 31 640: 75% 56/75 [00:04<00:01, 11.09it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02118 0.009301 0.002323 37 640: 75% 56/75 [00:04<00:01, 11.09it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02113 0.009332 0.002371 32 640: 77% 58/75 [00:05<00:01, 11.12it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02116 0.009397 0.002345 37 640: 77% 58/75 [00:05<00:01, 11.12it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02115 0.009419 0.002357 37 640: 80% 60/75 [00:05<00:01, 11.31it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02116 0.009436 0.002344 33 640: 80% 60/75 [00:05<00:01, 11.31it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.0211 0.009472 0.002331 38 640: 83% 62/75 [00:05<00:01, 11.74it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02107 0.00947 0.00231 30 640: 83% 62/75 [00:05<00:01, 11.74it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02109 0.009468 0.002309 27 640: 85% 64/75 [00:05<00:00, 11.49it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02101 0.009452 0.002557 31 640: 85% 64/75 [00:05<00:00, 11.49it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02093 0.009467 0.00253 34 640: 88% 66/75 [00:05<00:00, 11.95it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02106 0.009501 0.002624 34 640: 88% 66/75 [00:05<00:00, 11.95it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02097 0.009487 0.002602 29 640: 91% 68/75 [00:05<00:00, 11.34it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02094 0.00953 0.002607 42 640: 91% 68/75 [00:06<00:00, 11.34it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02089 0.009514 0.002584 26 640: 93% 70/75 [00:06<00:00, 11.21it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02092 0.009523 0.002564 35 640: 93% 70/75 [00:06<00:00, 11.21it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02086 0.009508 0.002538 23 640: 96% 72/75 [00:06<00:00, 11.16it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02081 0.00949 0.002512 29 640: 96% 72/75 [00:06<00:00, 11.16it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02079 0.00948 0.00249 31 640: 99% 74/75 [00:06<00:00, 10.95it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 48/79 4.62G 0.02075 0.009468 0.002463 31 640: 100% 75/75 [00:06<00:00, 11.41it/s]\n",
+ " Class Images Instances P R mAP50 mAP50-95: 100% 7/7 [00:01<00:00, 5.24it/s]\n",
+ " all 200 204 0.615 0.559 0.593 0.355\n",
+ "\n",
+ " Epoch GPU_mem box_loss obj_loss cls_loss Instances Size\n",
+ " 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.01941 0.008287 0.002091 22 640: 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.01738 0.008288 0.002158 30 640: 3% 2/75 [00:00<00:05, 12.18it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.01917 0.009187 0.001792 42 640: 3% 2/75 [00:00<00:05, 12.18it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02021 0.009122 0.002668 34 640: 5% 4/75 [00:00<00:06, 10.50it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02094 0.009331 0.002434 35 640: 5% 4/75 [00:00<00:06, 10.50it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.0217 0.009587 0.003297 30 640: 8% 6/75 [00:00<00:06, 10.71it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.022 0.009739 0.003967 24 640: 8% 6/75 [00:00<00:06, 10.71it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02174 0.00957 0.004519 27 640: 11% 8/75 [00:00<00:06, 10.72it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02151 0.009805 0.00413 37 640: 11% 8/75 [00:00<00:06, 10.72it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02146 0.009941 0.004145 34 640: 13% 10/75 [00:00<00:05, 11.52it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02127 0.009949 0.003928 35 640: 13% 10/75 [00:00<00:05, 11.52it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02086 0.009841 0.003662 31 640: 16% 12/75 [00:01<00:05, 11.24it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02067 0.009985 0.003508 39 640: 16% 12/75 [00:01<00:05, 11.24it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02045 0.009893 0.003436 26 640: 19% 14/75 [00:01<00:05, 11.34it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02059 0.009742 0.003324 27 640: 19% 14/75 [00:01<00:05, 11.34it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02056 0.009727 0.003201 36 640: 21% 16/75 [00:01<00:05, 10.77it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02083 0.00988 0.003121 37 640: 21% 16/75 [00:01<00:05, 10.77it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02066 0.009776 0.002988 24 640: 24% 18/75 [00:01<00:05, 11.01it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.0209 0.009784 0.002917 29 640: 24% 18/75 [00:01<00:05, 11.01it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02084 0.009704 0.002805 26 640: 27% 20/75 [00:01<00:05, 10.80it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02092 0.009742 0.002713 31 640: 27% 20/75 [00:01<00:05, 10.80it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02099 0.009632 0.002847 29 640: 29% 22/75 [00:01<00:04, 11.13it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.021 0.009553 0.002797 25 640: 29% 22/75 [00:02<00:04, 11.13it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02086 0.009523 0.002766 32 640: 32% 24/75 [00:02<00:04, 11.36it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02087 0.009569 0.002763 30 640: 32% 24/75 [00:02<00:04, 11.36it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02069 0.009515 0.002763 33 640: 35% 26/75 [00:02<00:04, 11.81it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02076 0.009572 0.002692 35 640: 35% 26/75 [00:02<00:04, 11.81it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02104 0.009497 0.002656 21 640: 37% 28/75 [00:02<00:04, 11.61it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02117 0.009464 0.002677 29 640: 37% 28/75 [00:02<00:04, 11.61it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02131 0.009503 0.002654 45 640: 40% 30/75 [00:02<00:03, 12.13it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02122 0.009494 0.002621 26 640: 40% 30/75 [00:02<00:03, 12.13it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.0213 0.009496 0.002634 28 640: 43% 32/75 [00:02<00:03, 11.45it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02151 0.009539 0.002607 41 640: 43% 32/75 [00:02<00:03, 11.45it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02154 0.009523 0.002584 30 640: 45% 34/75 [00:02<00:03, 11.82it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02163 0.00951 0.002718 31 640: 45% 34/75 [00:03<00:03, 11.82it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02155 0.009545 0.002854 36 640: 48% 36/75 [00:03<00:03, 11.38it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02151 0.009543 0.002879 33 640: 48% 36/75 [00:03<00:03, 11.38it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02147 0.009528 0.002871 40 640: 51% 38/75 [00:03<00:03, 11.78it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02139 0.009489 0.002918 30 640: 51% 38/75 [00:03<00:03, 11.78it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02135 0.00949 0.002869 35 640: 53% 40/75 [00:03<00:02, 11.77it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02123 0.009474 0.002821 28 640: 53% 40/75 [00:03<00:02, 11.77it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.0212 0.009535 0.002856 38 640: 56% 42/75 [00:03<00:02, 11.94it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02108 0.009545 0.002881 34 640: 56% 42/75 [00:03<00:02, 11.94it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02106 0.009548 0.002833 33 640: 59% 44/75 [00:03<00:02, 11.71it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02102 0.009556 0.002794 32 640: 59% 44/75 [00:03<00:02, 11.71it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02102 0.009522 0.002756 27 640: 61% 46/75 [00:04<00:02, 11.68it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02096 0.009572 0.002729 37 640: 61% 46/75 [00:04<00:02, 11.68it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02087 0.009553 0.002695 28 640: 64% 48/75 [00:04<00:02, 11.70it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.0209 0.00955 0.002678 34 640: 64% 48/75 [00:04<00:02, 11.70it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02091 0.009541 0.002637 31 640: 67% 50/75 [00:04<00:02, 11.53it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02083 0.009535 0.002603 35 640: 67% 50/75 [00:04<00:02, 11.53it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02075 0.009481 0.002567 21 640: 69% 52/75 [00:04<00:02, 11.14it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02077 0.009513 0.002594 46 640: 69% 52/75 [00:04<00:02, 11.14it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02087 0.009483 0.002606 30 640: 72% 54/75 [00:04<00:01, 10.86it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02087 0.009465 0.002572 31 640: 72% 54/75 [00:04<00:01, 10.86it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02088 0.009517 0.002547 35 640: 75% 56/75 [00:04<00:01, 10.56it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02095 0.009528 0.002554 32 640: 75% 56/75 [00:05<00:01, 10.56it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02098 0.009543 0.002533 35 640: 77% 58/75 [00:05<00:01, 11.14it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02104 0.009556 0.002547 36 640: 77% 58/75 [00:05<00:01, 11.14it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02101 0.00957 0.002519 30 640: 80% 60/75 [00:05<00:01, 11.30it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02106 0.009606 0.002523 38 640: 80% 60/75 [00:05<00:01, 11.30it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02112 0.009624 0.002555 29 640: 83% 62/75 [00:05<00:01, 11.45it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02111 0.009614 0.002533 34 640: 83% 62/75 [00:05<00:01, 11.45it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.0211 0.00965 0.00256 38 640: 85% 64/75 [00:05<00:00, 11.60it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02113 0.009683 0.002608 35 640: 85% 64/75 [00:05<00:00, 11.60it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02106 0.009683 0.002577 26 640: 88% 66/75 [00:05<00:00, 12.12it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02094 0.009662 0.002561 27 640: 88% 66/75 [00:05<00:00, 12.12it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02087 0.009649 0.002529 40 640: 91% 68/75 [00:05<00:00, 12.20it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02082 0.0097 0.002513 37 640: 91% 68/75 [00:06<00:00, 12.20it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02083 0.009724 0.00249 38 640: 93% 70/75 [00:06<00:00, 12.43it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02092 0.009703 0.002474 29 640: 93% 70/75 [00:06<00:00, 12.43it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02093 0.009724 0.00245 32 640: 96% 72/75 [00:06<00:00, 12.14it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02087 0.009724 0.002429 36 640: 96% 72/75 [00:06<00:00, 12.14it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02089 0.009717 0.002428 35 640: 99% 74/75 [00:06<00:00, 12.44it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 49/79 4.62G 0.02085 0.00972 0.002492 35 640: 100% 75/75 [00:06<00:00, 11.56it/s]\n",
+ " Class Images Instances P R mAP50 mAP50-95: 100% 7/7 [00:01<00:00, 5.42it/s]\n",
+ " all 200 204 0.61 0.568 0.575 0.357\n",
+ "\n",
+ " Epoch GPU_mem box_loss obj_loss cls_loss Instances Size\n",
+ " 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01846 0.01098 0.0005309 36 640: 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.0183 0.01005 0.001844 29 640: 3% 2/75 [00:00<00:06, 11.58it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01805 0.009115 0.00211 29 640: 3% 2/75 [00:00<00:06, 11.58it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.0176 0.008618 0.001797 33 640: 5% 4/75 [00:00<00:05, 12.02it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01744 0.008763 0.001826 29 640: 5% 4/75 [00:00<00:05, 12.02it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01623 0.008715 0.001984 34 640: 8% 6/75 [00:00<00:05, 12.13it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01697 0.008646 0.002142 24 640: 8% 6/75 [00:00<00:05, 12.13it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01757 0.009047 0.001945 33 640: 11% 8/75 [00:00<00:05, 11.94it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01839 0.009254 0.002261 38 640: 11% 8/75 [00:00<00:05, 11.94it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01854 0.009246 0.002129 33 640: 13% 10/75 [00:00<00:05, 11.79it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01918 0.009361 0.002185 33 640: 13% 10/75 [00:00<00:05, 11.79it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01957 0.009462 0.002442 33 640: 16% 12/75 [00:00<00:05, 12.21it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01975 0.009496 0.002318 37 640: 16% 12/75 [00:01<00:05, 12.21it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01971 0.009773 0.002199 40 640: 19% 14/75 [00:01<00:05, 11.71it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01949 0.009662 0.00216 33 640: 19% 14/75 [00:01<00:05, 11.71it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01926 0.00952 0.002121 31 640: 21% 16/75 [00:01<00:04, 12.03it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01893 0.009376 0.002027 24 640: 21% 16/75 [00:01<00:04, 12.03it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01908 0.009411 0.001969 38 640: 24% 18/75 [00:01<00:04, 11.51it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01918 0.009439 0.001889 33 640: 24% 18/75 [00:01<00:04, 11.51it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01931 0.009498 0.001931 36 640: 27% 20/75 [00:01<00:04, 11.98it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01927 0.009498 0.00186 30 640: 27% 20/75 [00:01<00:04, 11.98it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01926 0.009428 0.001878 31 640: 29% 22/75 [00:01<00:04, 11.84it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.0192 0.009358 0.001897 25 640: 29% 22/75 [00:01<00:04, 11.84it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01918 0.009315 0.001844 33 640: 32% 24/75 [00:02<00:04, 11.82it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01954 0.009316 0.001918 34 640: 32% 24/75 [00:02<00:04, 11.82it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01974 0.009234 0.002119 29 640: 35% 26/75 [00:02<00:04, 11.54it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01977 0.009274 0.002137 32 640: 35% 26/75 [00:02<00:04, 11.54it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.0198 0.009286 0.002552 32 640: 37% 28/75 [00:02<00:03, 11.99it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01997 0.009334 0.002589 32 640: 37% 28/75 [00:02<00:03, 11.99it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01977 0.009331 0.00254 25 640: 40% 30/75 [00:02<00:03, 11.39it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01975 0.00923 0.002526 26 640: 40% 30/75 [00:02<00:03, 11.39it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01972 0.009249 0.002478 39 640: 43% 32/75 [00:02<00:03, 11.62it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01971 0.009245 0.002432 26 640: 43% 32/75 [00:02<00:03, 11.62it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01944 0.009136 0.002386 21 640: 45% 34/75 [00:02<00:03, 11.66it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01943 0.009218 0.002342 35 640: 45% 34/75 [00:02<00:03, 11.66it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.0195 0.009201 0.002301 31 640: 48% 36/75 [00:03<00:03, 11.51it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01937 0.009113 0.002257 19 640: 48% 36/75 [00:03<00:03, 11.51it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01934 0.009101 0.002245 29 640: 51% 38/75 [00:03<00:03, 11.40it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01935 0.009125 0.002216 30 640: 51% 38/75 [00:03<00:03, 11.40it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01932 0.009112 0.002175 34 640: 53% 40/75 [00:03<00:02, 11.67it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01923 0.009082 0.002187 35 640: 53% 40/75 [00:03<00:02, 11.67it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01924 0.009091 0.002151 27 640: 56% 42/75 [00:03<00:02, 11.71it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01919 0.00908 0.00214 32 640: 56% 42/75 [00:03<00:02, 11.71it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01932 0.009149 0.002194 35 640: 59% 44/75 [00:03<00:02, 11.58it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01929 0.009117 0.002169 30 640: 59% 44/75 [00:03<00:02, 11.58it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01927 0.009165 0.002136 39 640: 61% 46/75 [00:03<00:02, 11.34it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01926 0.009173 0.002108 31 640: 61% 46/75 [00:04<00:02, 11.34it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01929 0.00916 0.002079 32 640: 64% 48/75 [00:04<00:02, 11.57it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01933 0.00916 0.002087 31 640: 64% 48/75 [00:04<00:02, 11.57it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01931 0.009147 0.002121 30 640: 67% 50/75 [00:04<00:02, 10.98it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01933 0.009188 0.002152 43 640: 67% 50/75 [00:04<00:02, 10.98it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01934 0.009208 0.002139 36 640: 69% 52/75 [00:04<00:01, 11.55it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01935 0.009211 0.002132 32 640: 69% 52/75 [00:04<00:01, 11.55it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01929 0.009188 0.002181 28 640: 72% 54/75 [00:04<00:01, 11.43it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01927 0.009155 0.002152 29 640: 72% 54/75 [00:04<00:01, 11.43it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01928 0.009145 0.002131 29 640: 75% 56/75 [00:04<00:01, 11.92it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01949 0.009114 0.00211 24 640: 75% 56/75 [00:04<00:01, 11.92it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01955 0.009125 0.002091 32 640: 77% 58/75 [00:04<00:01, 11.60it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.0196 0.009122 0.002068 29 640: 77% 58/75 [00:05<00:01, 11.60it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01962 0.009143 0.002112 30 640: 80% 60/75 [00:05<00:01, 11.31it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01969 0.009178 0.00213 36 640: 80% 60/75 [00:05<00:01, 11.31it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01962 0.00916 0.002144 32 640: 83% 62/75 [00:05<00:01, 11.48it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01964 0.009174 0.002125 36 640: 83% 62/75 [00:05<00:01, 11.48it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01958 0.009197 0.002105 41 640: 85% 64/75 [00:05<00:00, 11.86it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01956 0.009187 0.002125 29 640: 85% 64/75 [00:05<00:00, 11.86it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01957 0.009165 0.002132 29 640: 88% 66/75 [00:05<00:00, 11.29it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01952 0.009155 0.002104 31 640: 88% 66/75 [00:05<00:00, 11.29it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01953 0.009173 0.002092 39 640: 91% 68/75 [00:05<00:00, 11.58it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01956 0.009172 0.002109 36 640: 91% 68/75 [00:05<00:00, 11.58it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01958 0.009154 0.002148 31 640: 93% 70/75 [00:06<00:00, 11.14it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01955 0.0091 0.002124 23 640: 93% 70/75 [00:06<00:00, 11.14it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01957 0.009073 0.002105 23 640: 96% 72/75 [00:06<00:00, 11.66it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01949 0.0091 0.002106 29 640: 96% 72/75 [00:06<00:00, 11.66it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01947 0.009097 0.002083 30 640: 99% 74/75 [00:06<00:00, 11.89it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 50/79 4.62G 0.01946 0.009097 0.002061 37 640: 100% 75/75 [00:06<00:00, 11.64it/s]\n",
+ " Class Images Instances P R mAP50 mAP50-95: 100% 7/7 [00:01<00:00, 5.50it/s]\n",
+ " all 200 204 0.61 0.57 0.59 0.366\n",
+ "\n",
+ " Epoch GPU_mem box_loss obj_loss cls_loss Instances Size\n",
+ " 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02517 0.01029 0.00214 35 640: 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02529 0.01041 0.002452 41 640: 3% 2/75 [00:00<00:06, 10.69it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02298 0.009674 0.001821 29 640: 3% 2/75 [00:00<00:06, 10.69it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.0218 0.009681 0.001482 36 640: 5% 4/75 [00:00<00:06, 11.34it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02099 0.009814 0.001502 37 640: 5% 4/75 [00:00<00:06, 11.34it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02048 0.009698 0.00215 35 640: 8% 6/75 [00:00<00:06, 10.79it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02133 0.009633 0.001926 25 640: 8% 6/75 [00:00<00:06, 10.79it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02081 0.009363 0.001766 31 640: 11% 8/75 [00:00<00:06, 11.02it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.0207 0.009392 0.001875 34 640: 11% 8/75 [00:00<00:06, 11.02it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02023 0.009445 0.001737 35 640: 13% 10/75 [00:00<00:05, 11.14it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02005 0.009329 0.001696 33 640: 13% 10/75 [00:00<00:05, 11.14it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.01975 0.008967 0.00167 22 640: 16% 12/75 [00:01<00:05, 11.35it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.01947 0.008971 0.001582 35 640: 16% 12/75 [00:01<00:05, 11.35it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.01973 0.008984 0.001558 29 640: 19% 14/75 [00:01<00:05, 11.19it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02066 0.008973 0.001529 30 640: 19% 14/75 [00:01<00:05, 11.19it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.0205 0.008877 0.001558 30 640: 21% 16/75 [00:01<00:05, 11.18it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02053 0.008932 0.001716 33 640: 21% 16/75 [00:01<00:05, 11.18it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02034 0.008903 0.001634 30 640: 24% 18/75 [00:01<00:05, 10.80it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.01999 0.008981 0.001576 33 640: 24% 18/75 [00:01<00:05, 10.80it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.0203 0.008971 0.001745 28 640: 27% 20/75 [00:01<00:04, 11.13it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02043 0.008847 0.001766 23 640: 27% 20/75 [00:01<00:04, 11.13it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.0203 0.008871 0.001728 37 640: 29% 22/75 [00:01<00:04, 11.26it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02065 0.008908 0.001746 29 640: 29% 22/75 [00:02<00:04, 11.26it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02066 0.009059 0.002458 38 640: 32% 24/75 [00:02<00:04, 11.70it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02061 0.009013 0.002418 30 640: 32% 24/75 [00:02<00:04, 11.70it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02084 0.009064 0.003304 32 640: 35% 26/75 [00:02<00:04, 11.40it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02046 0.008908 0.003223 17 640: 35% 26/75 [00:02<00:04, 11.40it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02059 0.00903 0.003248 38 640: 37% 28/75 [00:02<00:03, 11.87it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02051 0.009067 0.003158 35 640: 37% 28/75 [00:02<00:03, 11.87it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02057 0.009127 0.003071 36 640: 40% 30/75 [00:02<00:03, 11.92it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.0206 0.009234 0.003011 38 640: 40% 30/75 [00:02<00:03, 11.92it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02064 0.009233 0.002975 30 640: 43% 32/75 [00:02<00:03, 12.38it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02068 0.009254 0.002899 32 640: 43% 32/75 [00:02<00:03, 12.38it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.0206 0.009175 0.002833 32 640: 45% 34/75 [00:02<00:03, 12.08it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02045 0.009093 0.002764 29 640: 45% 34/75 [00:03<00:03, 12.08it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02028 0.009056 0.002726 32 640: 48% 36/75 [00:03<00:03, 12.38it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02031 0.009026 0.00266 32 640: 48% 36/75 [00:03<00:03, 12.38it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02034 0.009058 0.002697 38 640: 51% 38/75 [00:03<00:03, 12.23it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02041 0.009038 0.002683 27 640: 51% 38/75 [00:03<00:03, 12.23it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02036 0.009053 0.002626 37 640: 53% 40/75 [00:03<00:02, 12.19it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02031 0.009033 0.002572 28 640: 53% 40/75 [00:03<00:02, 12.19it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02023 0.009058 0.002573 32 640: 56% 42/75 [00:03<00:02, 11.37it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02011 0.009048 0.00253 32 640: 56% 42/75 [00:03<00:02, 11.37it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02027 0.009044 0.002486 29 640: 59% 44/75 [00:03<00:02, 11.29it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02026 0.009154 0.002466 49 640: 59% 44/75 [00:03<00:02, 11.29it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02025 0.009187 0.002468 30 640: 61% 46/75 [00:04<00:02, 10.64it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02035 0.009178 0.002437 33 640: 61% 46/75 [00:04<00:02, 10.64it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02036 0.009172 0.002395 37 640: 64% 48/75 [00:04<00:02, 10.72it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02043 0.009179 0.002382 32 640: 64% 48/75 [00:04<00:02, 10.72it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02037 0.009139 0.002348 27 640: 67% 50/75 [00:04<00:02, 10.59it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02034 0.009166 0.002321 26 640: 67% 50/75 [00:04<00:02, 10.59it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02024 0.009124 0.002318 31 640: 69% 52/75 [00:04<00:02, 10.96it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02023 0.00911 0.002288 32 640: 69% 52/75 [00:04<00:02, 10.96it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02014 0.009055 0.002268 30 640: 72% 54/75 [00:04<00:01, 10.98it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02013 0.009051 0.002235 33 640: 72% 54/75 [00:04<00:01, 10.98it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02011 0.009107 0.002205 38 640: 75% 56/75 [00:04<00:01, 11.09it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02016 0.009091 0.002173 33 640: 75% 56/75 [00:05<00:01, 11.09it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02016 0.009103 0.002153 34 640: 77% 58/75 [00:05<00:01, 11.33it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02015 0.009101 0.002168 35 640: 77% 58/75 [00:05<00:01, 11.33it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02016 0.009098 0.002143 38 640: 80% 60/75 [00:05<00:01, 11.82it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02014 0.009125 0.002125 27 640: 80% 60/75 [00:05<00:01, 11.82it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02008 0.009127 0.002098 36 640: 83% 62/75 [00:05<00:01, 11.62it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02009 0.009151 0.002077 33 640: 83% 62/75 [00:05<00:01, 11.62it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02003 0.009135 0.002055 32 640: 85% 64/75 [00:05<00:00, 12.05it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02001 0.009109 0.002041 27 640: 85% 64/75 [00:05<00:00, 12.05it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.01993 0.009096 0.002243 32 640: 88% 66/75 [00:05<00:00, 11.86it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.01988 0.009077 0.002223 23 640: 88% 66/75 [00:05<00:00, 11.86it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02009 0.009066 0.002205 32 640: 91% 68/75 [00:05<00:00, 12.16it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02001 0.009046 0.00218 26 640: 91% 68/75 [00:06<00:00, 12.16it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02001 0.00904 0.002156 38 640: 93% 70/75 [00:06<00:00, 11.88it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02 0.009034 0.002133 33 640: 93% 70/75 [00:06<00:00, 11.88it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02005 0.009074 0.002135 38 640: 96% 72/75 [00:06<00:00, 12.20it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02008 0.009071 0.002114 27 640: 96% 72/75 [00:06<00:00, 12.20it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02006 0.009052 0.002093 31 640: 99% 74/75 [00:06<00:00, 11.75it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 51/79 4.62G 0.02005 0.009027 0.002075 31 640: 100% 75/75 [00:06<00:00, 11.52it/s]\n",
+ " Class Images Instances P R mAP50 mAP50-95: 100% 7/7 [00:01<00:00, 5.38it/s]\n",
+ " all 200 204 0.587 0.566 0.607 0.377\n",
+ "\n",
+ " Epoch GPU_mem box_loss obj_loss cls_loss Instances Size\n",
+ " 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02742 0.01059 0.003918 27 640: 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02242 0.01002 0.003243 31 640: 3% 2/75 [00:00<00:05, 13.61it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02083 0.0102 0.002452 37 640: 3% 2/75 [00:00<00:05, 13.61it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02147 0.009842 0.001994 34 640: 5% 4/75 [00:00<00:05, 12.07it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.0228 0.009833 0.002416 37 640: 5% 4/75 [00:00<00:05, 12.07it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02287 0.0101 0.002139 29 640: 8% 6/75 [00:00<00:05, 12.63it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02156 0.009527 0.002063 29 640: 8% 6/75 [00:00<00:05, 12.63it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02138 0.009429 0.001892 35 640: 11% 8/75 [00:00<00:05, 12.13it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02091 0.009061 0.002465 19 640: 11% 8/75 [00:00<00:05, 12.13it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02108 0.008802 0.002387 29 640: 13% 10/75 [00:00<00:05, 12.51it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02121 0.008927 0.002469 32 640: 13% 10/75 [00:00<00:05, 12.51it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02063 0.008857 0.002342 33 640: 16% 12/75 [00:00<00:05, 12.27it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02049 0.008885 0.002205 32 640: 16% 12/75 [00:01<00:05, 12.27it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02093 0.00898 0.002136 37 640: 19% 14/75 [00:01<00:05, 11.96it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02052 0.008816 0.002115 26 640: 19% 14/75 [00:01<00:05, 11.96it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02163 0.008653 0.002308 24 640: 21% 16/75 [00:01<00:04, 11.96it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02154 0.008531 0.00221 25 640: 21% 16/75 [00:01<00:04, 11.96it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02117 0.008411 0.002118 29 640: 24% 18/75 [00:01<00:04, 12.17it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02108 0.008478 0.002044 33 640: 24% 18/75 [00:01<00:04, 12.17it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02097 0.008501 0.002032 30 640: 27% 20/75 [00:01<00:04, 11.60it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02073 0.008523 0.002026 36 640: 27% 20/75 [00:01<00:04, 11.60it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02102 0.008472 0.001994 27 640: 29% 22/75 [00:01<00:04, 11.50it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.021 0.008508 0.001954 31 640: 29% 22/75 [00:01<00:04, 11.50it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02089 0.008441 0.001994 26 640: 32% 24/75 [00:02<00:04, 11.43it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02091 0.008562 0.001998 42 640: 32% 24/75 [00:02<00:04, 11.43it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02092 0.00853 0.001975 28 640: 35% 26/75 [00:02<00:04, 11.90it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02089 0.008459 0.001915 25 640: 35% 26/75 [00:02<00:04, 11.90it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02083 0.00846 0.001958 28 640: 37% 28/75 [00:02<00:03, 11.87it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02089 0.008441 0.001927 26 640: 37% 28/75 [00:02<00:03, 11.87it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02077 0.008467 0.001885 31 640: 40% 30/75 [00:02<00:03, 12.07it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02089 0.008401 0.001837 24 640: 40% 30/75 [00:02<00:03, 12.07it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02104 0.008413 0.00189 36 640: 43% 32/75 [00:02<00:03, 11.03it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02099 0.008485 0.001861 37 640: 43% 32/75 [00:02<00:03, 11.03it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02086 0.008369 0.001828 19 640: 45% 34/75 [00:02<00:03, 11.63it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02108 0.008287 0.001822 24 640: 45% 34/75 [00:02<00:03, 11.63it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02097 0.008272 0.001789 28 640: 48% 36/75 [00:03<00:03, 11.72it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02096 0.008261 0.001817 28 640: 48% 36/75 [00:03<00:03, 11.72it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02086 0.008285 0.001826 31 640: 51% 38/75 [00:03<00:03, 12.19it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02071 0.008291 0.00179 34 640: 51% 38/75 [00:03<00:03, 12.19it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02068 0.008291 0.001763 30 640: 53% 40/75 [00:03<00:02, 11.99it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02077 0.00836 0.00178 35 640: 53% 40/75 [00:03<00:02, 11.99it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02074 0.008374 0.001749 36 640: 56% 42/75 [00:03<00:03, 10.59it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02068 0.008407 0.001733 31 640: 56% 42/75 [00:03<00:03, 10.59it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02068 0.008468 0.00174 37 640: 59% 44/75 [00:03<00:02, 10.78it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02093 0.008502 0.00182 39 640: 59% 44/75 [00:03<00:02, 10.78it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02091 0.008502 0.001828 34 640: 61% 46/75 [00:03<00:02, 11.11it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02087 0.008526 0.001822 39 640: 61% 46/75 [00:04<00:02, 11.11it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02073 0.008515 0.001805 30 640: 64% 48/75 [00:04<00:02, 11.41it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02068 0.008544 0.001777 37 640: 64% 48/75 [00:04<00:02, 11.41it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02071 0.008605 0.001759 38 640: 67% 50/75 [00:04<00:02, 11.88it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02067 0.008688 0.001758 40 640: 67% 50/75 [00:04<00:02, 11.88it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02072 0.008726 0.001797 36 640: 69% 52/75 [00:04<00:01, 11.67it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02079 0.008756 0.001776 27 640: 69% 52/75 [00:04<00:01, 11.67it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02082 0.008726 0.001807 28 640: 72% 54/75 [00:04<00:01, 11.97it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.0209 0.008719 0.001791 32 640: 72% 54/75 [00:04<00:01, 11.97it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02082 0.008696 0.001763 30 640: 75% 56/75 [00:04<00:01, 11.55it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02067 0.008669 0.001767 26 640: 75% 56/75 [00:04<00:01, 11.55it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.0207 0.008744 0.001748 45 640: 77% 58/75 [00:04<00:01, 11.89it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02073 0.008802 0.001726 39 640: 77% 58/75 [00:05<00:01, 11.89it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02074 0.008816 0.001709 31 640: 80% 60/75 [00:05<00:01, 11.69it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02071 0.008804 0.001687 30 640: 80% 60/75 [00:05<00:01, 11.69it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02073 0.008784 0.001691 23 640: 83% 62/75 [00:05<00:01, 11.88it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02064 0.008796 0.001673 43 640: 83% 62/75 [00:05<00:01, 11.88it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02061 0.008784 0.001666 30 640: 85% 64/75 [00:05<00:00, 11.80it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.0206 0.00879 0.001678 36 640: 85% 64/75 [00:05<00:00, 11.80it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02056 0.008793 0.001685 34 640: 88% 66/75 [00:05<00:00, 11.78it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02059 0.008819 0.001684 40 640: 88% 66/75 [00:05<00:00, 11.78it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02062 0.008864 0.001667 40 640: 91% 68/75 [00:05<00:00, 11.38it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.0206 0.008865 0.001672 33 640: 91% 68/75 [00:05<00:00, 11.38it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02048 0.00883 0.001654 24 640: 93% 70/75 [00:05<00:00, 11.78it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02051 0.008881 0.001639 33 640: 93% 70/75 [00:06<00:00, 11.78it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02055 0.008915 0.001636 43 640: 96% 72/75 [00:06<00:00, 11.35it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02053 0.008888 0.001692 27 640: 96% 72/75 [00:06<00:00, 11.35it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02049 0.00888 0.001695 30 640: 99% 74/75 [00:06<00:00, 11.54it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 52/79 4.62G 0.02042 0.008877 0.001681 30 640: 100% 75/75 [00:06<00:00, 11.68it/s]\n",
+ " Class Images Instances P R mAP50 mAP50-95: 100% 7/7 [00:01<00:00, 5.34it/s]\n",
+ " all 200 204 0.604 0.581 0.59 0.371\n",
+ "\n",
+ " Epoch GPU_mem box_loss obj_loss cls_loss Instances Size\n",
+ " 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01635 0.008485 0.001127 34 640: 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01713 0.007749 0.001401 25 640: 3% 2/75 [00:00<00:05, 12.56it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01693 0.007998 0.001343 35 640: 3% 2/75 [00:00<00:05, 12.56it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01704 0.008166 0.0014 30 640: 5% 4/75 [00:00<00:06, 10.24it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01734 0.008453 0.001516 32 640: 5% 4/75 [00:00<00:06, 10.24it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01719 0.008542 0.001339 28 640: 8% 6/75 [00:00<00:06, 11.28it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01671 0.008294 0.001444 28 640: 8% 6/75 [00:00<00:06, 11.28it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01679 0.008345 0.001348 29 640: 11% 8/75 [00:00<00:06, 11.06it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01706 0.008437 0.00126 34 640: 11% 8/75 [00:00<00:06, 11.06it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01718 0.008293 0.001249 23 640: 13% 10/75 [00:00<00:05, 11.41it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01798 0.008206 0.001204 30 640: 13% 10/75 [00:00<00:05, 11.41it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01806 0.008418 0.001341 39 640: 16% 12/75 [00:01<00:05, 11.55it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01835 0.008386 0.001354 30 640: 16% 12/75 [00:01<00:05, 11.55it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01839 0.008358 0.001302 22 640: 19% 14/75 [00:01<00:05, 11.83it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01834 0.008442 0.001241 32 640: 19% 14/75 [00:01<00:05, 11.83it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01846 0.008627 0.001257 39 640: 21% 16/75 [00:01<00:05, 11.20it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.0185 0.008603 0.001206 36 640: 21% 16/75 [00:01<00:05, 11.20it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01845 0.008591 0.001162 30 640: 24% 18/75 [00:01<00:04, 11.56it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01837 0.008507 0.001113 29 640: 24% 18/75 [00:01<00:04, 11.56it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01849 0.008531 0.00112 32 640: 27% 20/75 [00:01<00:04, 11.44it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01855 0.008619 0.001093 36 640: 27% 20/75 [00:01<00:04, 11.44it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.0185 0.008551 0.001113 25 640: 29% 22/75 [00:01<00:04, 11.67it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01872 0.008514 0.00136 28 640: 29% 22/75 [00:02<00:04, 11.67it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01901 0.008622 0.001334 40 640: 32% 24/75 [00:02<00:04, 11.53it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01903 0.008811 0.001312 44 640: 32% 24/75 [00:02<00:04, 11.53it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01867 0.008707 0.001318 28 640: 35% 26/75 [00:02<00:04, 11.83it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01913 0.008695 0.001297 24 640: 35% 26/75 [00:02<00:04, 11.83it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01896 0.008671 0.001282 36 640: 37% 28/75 [00:02<00:04, 11.20it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01902 0.008691 0.001289 34 640: 37% 28/75 [00:02<00:04, 11.20it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.019 0.008697 0.001334 30 640: 40% 30/75 [00:02<00:04, 11.07it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01901 0.008756 0.001312 38 640: 40% 30/75 [00:02<00:04, 11.07it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01908 0.008765 0.001303 28 640: 43% 32/75 [00:02<00:03, 11.13it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01917 0.008843 0.001396 37 640: 43% 32/75 [00:02<00:03, 11.13it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01939 0.008892 0.001457 36 640: 45% 34/75 [00:03<00:03, 11.04it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01944 0.008931 0.001435 35 640: 45% 34/75 [00:03<00:03, 11.04it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01938 0.008957 0.001417 34 640: 48% 36/75 [00:03<00:03, 10.94it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01938 0.008966 0.001395 33 640: 48% 36/75 [00:03<00:03, 10.94it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01956 0.008955 0.001673 32 640: 51% 38/75 [00:03<00:03, 11.47it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.0194 0.008903 0.001635 32 640: 51% 38/75 [00:03<00:03, 11.47it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01948 0.008881 0.001716 29 640: 53% 40/75 [00:03<00:03, 11.18it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01951 0.008908 0.001779 30 640: 53% 40/75 [00:03<00:03, 11.18it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01935 0.008931 0.001746 29 640: 56% 42/75 [00:03<00:02, 11.73it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01935 0.008902 0.001719 31 640: 56% 42/75 [00:03<00:02, 11.73it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01928 0.008876 0.001691 34 640: 59% 44/75 [00:03<00:02, 11.54it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01937 0.008871 0.001721 32 640: 59% 44/75 [00:03<00:02, 11.54it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01932 0.008891 0.0017 30 640: 61% 46/75 [00:04<00:02, 11.95it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01932 0.008859 0.001669 30 640: 61% 46/75 [00:04<00:02, 11.95it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01933 0.00888 0.001724 31 640: 64% 48/75 [00:04<00:02, 11.69it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01938 0.008878 0.0017 30 640: 64% 48/75 [00:04<00:02, 11.69it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01939 0.008878 0.001678 35 640: 67% 50/75 [00:04<00:02, 11.61it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01932 0.008852 0.001656 30 640: 67% 50/75 [00:04<00:02, 11.61it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01952 0.008832 0.00171 34 640: 69% 52/75 [00:04<00:02, 11.44it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01946 0.008793 0.001684 31 640: 69% 52/75 [00:04<00:02, 11.44it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01946 0.008805 0.001663 36 640: 72% 54/75 [00:04<00:01, 11.17it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01962 0.008874 0.001749 38 640: 72% 54/75 [00:04<00:01, 11.17it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01965 0.008864 0.00173 33 640: 75% 56/75 [00:04<00:01, 11.17it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01963 0.00883 0.001711 22 640: 75% 56/75 [00:05<00:01, 11.17it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01977 0.008844 0.001692 33 640: 77% 58/75 [00:05<00:01, 11.39it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01977 0.008861 0.001701 34 640: 77% 58/75 [00:05<00:01, 11.39it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01984 0.008896 0.001691 31 640: 80% 60/75 [00:05<00:01, 11.25it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.0198 0.008899 0.001696 35 640: 80% 60/75 [00:05<00:01, 11.25it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01989 0.008927 0.00169 31 640: 83% 62/75 [00:05<00:01, 11.79it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01986 0.008949 0.001698 26 640: 83% 62/75 [00:05<00:01, 11.79it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01994 0.008945 0.001739 32 640: 85% 64/75 [00:05<00:00, 11.44it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01996 0.008949 0.001722 37 640: 85% 64/75 [00:05<00:00, 11.44it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.02 0.008991 0.001712 32 640: 88% 66/75 [00:05<00:00, 11.74it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01997 0.008968 0.00172 24 640: 88% 66/75 [00:05<00:00, 11.74it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01995 0.009018 0.001707 38 640: 91% 68/75 [00:05<00:00, 10.70it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01986 0.008972 0.001701 25 640: 91% 68/75 [00:06<00:00, 10.70it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01992 0.008981 0.001686 31 640: 93% 70/75 [00:06<00:00, 11.03it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01995 0.008993 0.001673 37 640: 93% 70/75 [00:06<00:00, 11.03it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01995 0.009 0.001657 35 640: 96% 72/75 [00:06<00:00, 11.07it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01997 0.008992 0.001647 32 640: 96% 72/75 [00:06<00:00, 11.07it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.02 0.009007 0.001661 36 640: 99% 74/75 [00:06<00:00, 10.97it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 53/79 4.62G 0.01993 0.008977 0.001642 29 640: 100% 75/75 [00:06<00:00, 11.33it/s]\n",
+ " Class Images Instances P R mAP50 mAP50-95: 100% 7/7 [00:01<00:00, 5.39it/s]\n",
+ " all 200 204 0.572 0.546 0.58 0.354\n",
+ "\n",
+ " Epoch GPU_mem box_loss obj_loss cls_loss Instances Size\n",
+ " 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01589 0.007335 0.001021 28 640: 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.02098 0.009644 0.00103 43 640: 3% 2/75 [00:00<00:06, 12.07it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.02284 0.00976 0.001336 29 640: 3% 2/75 [00:00<00:06, 12.07it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.02083 0.009567 0.001484 36 640: 5% 4/75 [00:00<00:05, 12.58it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.0202 0.009246 0.001261 28 640: 5% 4/75 [00:00<00:05, 12.58it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.0207 0.009025 0.001113 29 640: 8% 6/75 [00:00<00:05, 12.15it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.02006 0.009002 0.001166 33 640: 8% 6/75 [00:00<00:05, 12.15it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01944 0.009099 0.001407 45 640: 11% 8/75 [00:00<00:05, 12.31it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01944 0.008931 0.001286 32 640: 11% 8/75 [00:00<00:05, 12.31it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01957 0.009011 0.001223 32 640: 13% 10/75 [00:00<00:05, 12.00it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01965 0.008941 0.001183 26 640: 13% 10/75 [00:00<00:05, 12.00it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01968 0.009171 0.001193 40 640: 16% 12/75 [00:00<00:05, 12.39it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01956 0.00924 0.001217 33 640: 16% 12/75 [00:01<00:05, 12.39it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01947 0.00917 0.001156 26 640: 19% 14/75 [00:01<00:05, 11.83it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01902 0.009039 0.001125 25 640: 19% 14/75 [00:01<00:05, 11.83it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.0192 0.009005 0.001179 32 640: 21% 16/75 [00:01<00:04, 12.07it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01958 0.009029 0.001129 33 640: 21% 16/75 [00:01<00:04, 12.07it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01932 0.008854 0.001302 26 640: 24% 18/75 [00:01<00:04, 12.03it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01926 0.008792 0.001356 32 640: 24% 18/75 [00:01<00:04, 12.03it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01921 0.008814 0.001357 30 640: 27% 20/75 [00:01<00:04, 12.12it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.0195 0.008786 0.001351 31 640: 27% 20/75 [00:01<00:04, 12.12it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01953 0.008948 0.001383 38 640: 29% 22/75 [00:01<00:04, 11.95it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01937 0.008985 0.001482 36 640: 29% 22/75 [00:01<00:04, 11.95it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01934 0.009016 0.001596 33 640: 32% 24/75 [00:01<00:04, 11.98it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01924 0.009052 0.001547 40 640: 32% 24/75 [00:02<00:04, 11.98it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01913 0.00909 0.00153 34 640: 35% 26/75 [00:02<00:04, 11.55it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01934 0.00904 0.001493 28 640: 35% 26/75 [00:02<00:04, 11.55it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01932 0.009036 0.001463 29 640: 37% 28/75 [00:02<00:03, 11.89it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01922 0.008965 0.001446 25 640: 37% 28/75 [00:02<00:03, 11.89it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01919 0.008944 0.001447 33 640: 40% 30/75 [00:02<00:03, 11.58it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01919 0.00901 0.001475 41 640: 40% 30/75 [00:02<00:03, 11.58it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01917 0.00904 0.001441 35 640: 43% 32/75 [00:02<00:03, 11.80it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01913 0.009059 0.001496 36 640: 43% 32/75 [00:02<00:03, 11.80it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01916 0.009036 0.001479 30 640: 45% 34/75 [00:02<00:03, 11.85it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01911 0.008964 0.001462 29 640: 45% 34/75 [00:02<00:03, 11.85it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01927 0.008998 0.001461 40 640: 48% 36/75 [00:02<00:03, 12.22it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01924 0.008979 0.00148 32 640: 48% 36/75 [00:03<00:03, 12.22it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01924 0.009004 0.001487 29 640: 51% 38/75 [00:03<00:03, 12.12it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01928 0.008942 0.00147 26 640: 51% 38/75 [00:03<00:03, 12.12it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01935 0.00892 0.001478 32 640: 53% 40/75 [00:03<00:02, 12.28it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01955 0.008939 0.001542 36 640: 53% 40/75 [00:03<00:02, 12.28it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.0195 0.008895 0.00152 28 640: 56% 42/75 [00:03<00:02, 11.83it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01942 0.008872 0.001533 31 640: 56% 42/75 [00:03<00:02, 11.83it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01937 0.00888 0.001517 43 640: 59% 44/75 [00:03<00:02, 11.65it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01933 0.008886 0.001493 35 640: 59% 44/75 [00:03<00:02, 11.65it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01929 0.008904 0.001533 34 640: 61% 46/75 [00:03<00:02, 11.41it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01927 0.00887 0.001516 30 640: 61% 46/75 [00:03<00:02, 11.41it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01927 0.008909 0.001516 38 640: 64% 48/75 [00:04<00:02, 11.71it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01924 0.008881 0.001492 33 640: 64% 48/75 [00:04<00:02, 11.71it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01932 0.008895 0.001493 35 640: 67% 50/75 [00:04<00:02, 11.79it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.0193 0.008885 0.001497 27 640: 67% 50/75 [00:04<00:02, 11.79it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01939 0.008898 0.001485 31 640: 69% 52/75 [00:04<00:01, 11.89it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01943 0.008864 0.001467 27 640: 69% 52/75 [00:04<00:01, 11.89it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01958 0.008845 0.001469 27 640: 72% 54/75 [00:04<00:01, 11.60it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01954 0.008816 0.001447 25 640: 72% 54/75 [00:04<00:01, 11.60it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01946 0.008805 0.001427 31 640: 75% 56/75 [00:04<00:01, 11.90it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01942 0.0088 0.001456 28 640: 75% 56/75 [00:04<00:01, 11.90it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01937 0.008787 0.001447 27 640: 77% 58/75 [00:04<00:01, 11.19it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01932 0.008808 0.001432 34 640: 77% 58/75 [00:04<00:01, 11.19it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01927 0.008782 0.001432 29 640: 80% 60/75 [00:05<00:01, 11.59it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01922 0.008753 0.001443 33 640: 80% 60/75 [00:05<00:01, 11.59it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01923 0.008738 0.00143 29 640: 83% 62/75 [00:05<00:01, 11.31it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01917 0.008707 0.001431 30 640: 83% 62/75 [00:05<00:01, 11.31it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01918 0.008727 0.001428 38 640: 85% 64/75 [00:05<00:00, 11.76it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01917 0.008701 0.001416 23 640: 85% 64/75 [00:05<00:00, 11.76it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01926 0.008691 0.001404 29 640: 88% 66/75 [00:05<00:00, 11.72it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01929 0.008685 0.001461 32 640: 88% 66/75 [00:05<00:00, 11.72it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01929 0.008694 0.001485 29 640: 91% 68/75 [00:05<00:00, 11.98it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01922 0.008714 0.001483 35 640: 91% 68/75 [00:05<00:00, 11.98it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01921 0.008705 0.001489 29 640: 93% 70/75 [00:05<00:00, 11.62it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01917 0.008718 0.001477 33 640: 93% 70/75 [00:05<00:00, 11.62it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01913 0.008703 0.001505 33 640: 96% 72/75 [00:06<00:00, 12.03it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01914 0.008741 0.001505 41 640: 96% 72/75 [00:06<00:00, 12.03it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01913 0.008736 0.001514 35 640: 99% 74/75 [00:06<00:00, 11.68it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 54/79 4.62G 0.01906 0.008738 0.001513 27 640: 100% 75/75 [00:06<00:00, 11.86it/s]\n",
+ " Class Images Instances P R mAP50 mAP50-95: 100% 7/7 [00:01<00:00, 5.28it/s]\n",
+ " all 200 204 0.554 0.661 0.607 0.373\n",
+ "\n",
+ " Epoch GPU_mem box_loss obj_loss cls_loss Instances Size\n",
+ " 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.02497 0.009325 0.0008156 37 640: 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.02181 0.009278 0.0005629 40 640: 3% 2/75 [00:00<00:06, 12.04it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.02103 0.009512 0.0005283 37 640: 3% 2/75 [00:00<00:06, 12.04it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.02096 0.009157 0.0004912 32 640: 5% 4/75 [00:00<00:05, 12.58it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.0205 0.009422 0.0006352 39 640: 5% 4/75 [00:00<00:05, 12.58it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01973 0.00902 0.0006092 30 640: 8% 6/75 [00:00<00:05, 11.96it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01945 0.008936 0.0006054 28 640: 8% 6/75 [00:00<00:05, 11.96it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01906 0.008882 0.0005654 31 640: 11% 8/75 [00:00<00:05, 11.47it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01885 0.00881 0.0005838 27 640: 11% 8/75 [00:00<00:05, 11.47it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01905 0.008901 0.0007092 35 640: 13% 10/75 [00:00<00:05, 11.44it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01876 0.008942 0.0007353 36 640: 13% 10/75 [00:00<00:05, 11.44it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01841 0.008722 0.000732 28 640: 16% 12/75 [00:01<00:05, 11.66it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01838 0.008576 0.0007173 31 640: 16% 12/75 [00:01<00:05, 11.66it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01849 0.00869 0.0007856 29 640: 19% 14/75 [00:01<00:05, 11.23it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01856 0.008594 0.0009575 23 640: 19% 14/75 [00:01<00:05, 11.23it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.0185 0.00861 0.001371 31 640: 21% 16/75 [00:01<00:05, 11.52it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01889 0.008636 0.001321 36 640: 21% 16/75 [00:01<00:05, 11.52it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01869 0.008464 0.001292 28 640: 24% 18/75 [00:01<00:05, 11.30it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01873 0.008537 0.001274 33 640: 24% 18/75 [00:01<00:05, 11.30it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01873 0.008511 0.001227 34 640: 27% 20/75 [00:01<00:04, 11.21it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01876 0.008481 0.001184 27 640: 27% 20/75 [00:01<00:04, 11.21it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01887 0.00858 0.001286 41 640: 29% 22/75 [00:01<00:04, 10.78it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.019 0.00865 0.001362 29 640: 29% 22/75 [00:02<00:04, 10.78it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01903 0.008659 0.001328 34 640: 32% 24/75 [00:02<00:04, 11.46it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01942 0.00862 0.001325 29 640: 32% 24/75 [00:02<00:04, 11.46it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01941 0.008615 0.001373 27 640: 35% 26/75 [00:02<00:04, 11.33it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01924 0.00858 0.001365 33 640: 35% 26/75 [00:02<00:04, 11.33it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01907 0.00861 0.00135 32 640: 37% 28/75 [00:02<00:04, 11.06it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01898 0.008558 0.001316 28 640: 37% 28/75 [00:02<00:04, 11.06it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01885 0.008548 0.00131 34 640: 40% 30/75 [00:02<00:04, 11.03it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01871 0.008553 0.001383 32 640: 40% 30/75 [00:02<00:04, 11.03it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01869 0.008501 0.001436 26 640: 43% 32/75 [00:02<00:03, 11.41it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01881 0.008468 0.001403 28 640: 43% 32/75 [00:02<00:03, 11.41it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01871 0.00852 0.001414 43 640: 45% 34/75 [00:02<00:03, 11.26it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01858 0.008474 0.001387 23 640: 45% 34/75 [00:03<00:03, 11.26it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01868 0.008467 0.001442 32 640: 48% 36/75 [00:03<00:03, 11.23it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01874 0.008421 0.001417 29 640: 48% 36/75 [00:03<00:03, 11.23it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.0187 0.008397 0.001552 32 640: 51% 38/75 [00:03<00:03, 11.19it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01873 0.008389 0.001614 31 640: 51% 38/75 [00:03<00:03, 11.19it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01874 0.00844 0.001646 38 640: 53% 40/75 [00:03<00:03, 10.95it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01869 0.008453 0.00163 32 640: 53% 40/75 [00:03<00:03, 10.95it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01877 0.008431 0.001662 30 640: 56% 42/75 [00:03<00:03, 10.91it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01873 0.008408 0.001683 30 640: 56% 42/75 [00:03<00:03, 10.91it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01881 0.008445 0.00172 29 640: 59% 44/75 [00:03<00:02, 10.95it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01876 0.008434 0.001738 32 640: 59% 44/75 [00:04<00:02, 10.95it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01881 0.008424 0.001711 36 640: 61% 46/75 [00:04<00:02, 10.91it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.0187 0.008422 0.001724 27 640: 61% 46/75 [00:04<00:02, 10.91it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01865 0.008433 0.001721 34 640: 64% 48/75 [00:04<00:02, 11.20it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01849 0.008483 0.001706 37 640: 64% 48/75 [00:04<00:02, 11.20it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.0187 0.008499 0.001713 34 640: 67% 50/75 [00:04<00:02, 10.65it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01862 0.008477 0.001693 26 640: 67% 50/75 [00:04<00:02, 10.65it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01858 0.008492 0.001685 33 640: 69% 52/75 [00:04<00:02, 10.71it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01852 0.008455 0.001659 31 640: 69% 52/75 [00:04<00:02, 10.71it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01845 0.00844 0.00164 32 640: 72% 54/75 [00:04<00:02, 10.15it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01865 0.008431 0.001637 31 640: 72% 54/75 [00:04<00:02, 10.15it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01869 0.008444 0.001618 29 640: 75% 56/75 [00:05<00:01, 10.88it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01869 0.008421 0.001612 30 640: 75% 56/75 [00:05<00:01, 10.88it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01884 0.008446 0.001696 31 640: 77% 58/75 [00:05<00:01, 10.40it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01887 0.008483 0.001697 36 640: 77% 58/75 [00:05<00:01, 10.40it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01882 0.008469 0.001712 26 640: 80% 60/75 [00:05<00:01, 10.65it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.0188 0.008462 0.001694 34 640: 80% 60/75 [00:05<00:01, 10.65it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01879 0.008477 0.001673 33 640: 83% 62/75 [00:05<00:01, 10.74it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01878 0.00851 0.001655 36 640: 83% 62/75 [00:05<00:01, 10.74it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01878 0.008536 0.001665 35 640: 85% 64/75 [00:05<00:00, 11.02it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01872 0.008528 0.001762 31 640: 85% 64/75 [00:05<00:00, 11.02it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01873 0.00852 0.001775 32 640: 88% 66/75 [00:05<00:00, 10.91it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.0187 0.008499 0.001758 31 640: 88% 66/75 [00:06<00:00, 10.91it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.0187 0.008497 0.001741 33 640: 91% 68/75 [00:06<00:00, 10.86it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01863 0.0085 0.001722 33 640: 91% 68/75 [00:06<00:00, 10.86it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01856 0.008489 0.001707 31 640: 93% 70/75 [00:06<00:00, 10.50it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01862 0.00848 0.001698 32 640: 93% 70/75 [00:06<00:00, 10.50it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01867 0.008512 0.001769 33 640: 96% 72/75 [00:06<00:00, 10.53it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01869 0.008514 0.001754 25 640: 96% 72/75 [00:06<00:00, 10.53it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01868 0.008547 0.001746 33 640: 99% 74/75 [00:06<00:00, 10.09it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 55/79 4.62G 0.01858 0.008504 0.001732 26 640: 100% 75/75 [00:06<00:00, 10.96it/s]\n",
+ " Class Images Instances P R mAP50 mAP50-95: 100% 7/7 [00:01<00:00, 5.34it/s]\n",
+ " all 200 204 0.547 0.614 0.577 0.356\n",
+ "\n",
+ " Epoch GPU_mem box_loss obj_loss cls_loss Instances Size\n",
+ " 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01933 0.009603 0.0002906 34 640: 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01797 0.00933 0.000469 35 640: 3% 2/75 [00:00<00:05, 13.52it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01801 0.009414 0.0009686 33 640: 3% 2/75 [00:00<00:05, 13.52it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01986 0.009748 0.0008514 33 640: 5% 4/75 [00:00<00:06, 11.73it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01891 0.009705 0.0008171 32 640: 5% 4/75 [00:00<00:06, 11.73it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01864 0.009756 0.000751 31 640: 8% 6/75 [00:00<00:05, 11.94it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.0184 0.00956 0.0007757 30 640: 8% 6/75 [00:00<00:05, 11.94it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01817 0.009524 0.0008407 35 640: 11% 8/75 [00:00<00:05, 11.51it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01817 0.009195 0.001027 26 640: 11% 8/75 [00:00<00:05, 11.51it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01794 0.008984 0.0009497 23 640: 13% 10/75 [00:00<00:05, 11.79it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01774 0.009046 0.0008831 31 640: 13% 10/75 [00:00<00:05, 11.79it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01772 0.008863 0.0008502 24 640: 16% 12/75 [00:01<00:05, 11.46it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01711 0.008793 0.0008671 31 640: 16% 12/75 [00:01<00:05, 11.46it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01736 0.008892 0.000846 33 640: 19% 14/75 [00:01<00:05, 11.72it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01753 0.008852 0.0008319 32 640: 19% 14/75 [00:01<00:05, 11.72it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01761 0.008934 0.0008403 36 640: 21% 16/75 [00:01<00:05, 11.62it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01762 0.008872 0.0008256 29 640: 21% 16/75 [00:01<00:05, 11.62it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01745 0.008859 0.0008695 36 640: 24% 18/75 [00:01<00:04, 11.80it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01765 0.008826 0.0008776 35 640: 24% 18/75 [00:01<00:04, 11.80it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01757 0.008873 0.0008684 37 640: 27% 20/75 [00:01<00:04, 11.83it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01768 0.008832 0.0008609 28 640: 27% 20/75 [00:01<00:04, 11.83it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01749 0.008826 0.0008592 26 640: 29% 22/75 [00:01<00:04, 12.37it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01755 0.008831 0.0008364 31 640: 29% 22/75 [00:01<00:04, 12.37it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01759 0.008884 0.001447 35 640: 32% 24/75 [00:02<00:04, 11.73it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01768 0.008791 0.001422 24 640: 32% 24/75 [00:02<00:04, 11.73it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01759 0.008811 0.001411 36 640: 35% 26/75 [00:02<00:04, 12.13it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01764 0.008883 0.001488 35 640: 35% 26/75 [00:02<00:04, 12.13it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01779 0.008916 0.001447 31 640: 37% 28/75 [00:02<00:03, 12.00it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01765 0.008887 0.001507 33 640: 37% 28/75 [00:02<00:03, 12.00it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.0177 0.008835 0.001495 28 640: 40% 30/75 [00:02<00:03, 12.34it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01793 0.008837 0.001532 33 640: 40% 30/75 [00:02<00:03, 12.34it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01805 0.008851 0.001535 31 640: 43% 32/75 [00:02<00:03, 12.08it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01813 0.008839 0.001524 28 640: 43% 32/75 [00:02<00:03, 12.08it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01856 0.008874 0.001504 26 640: 45% 34/75 [00:02<00:03, 11.87it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01861 0.00885 0.001496 31 640: 45% 34/75 [00:02<00:03, 11.87it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01879 0.008909 0.001471 36 640: 48% 36/75 [00:03<00:03, 11.40it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01867 0.008857 0.001437 30 640: 48% 36/75 [00:03<00:03, 11.40it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01873 0.008825 0.001414 34 640: 51% 38/75 [00:03<00:03, 11.87it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01879 0.008851 0.00142 33 640: 51% 38/75 [00:03<00:03, 11.87it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01872 0.008857 0.001413 35 640: 53% 40/75 [00:03<00:03, 11.61it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01859 0.008816 0.001404 28 640: 53% 40/75 [00:03<00:03, 11.61it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01855 0.008818 0.001383 33 640: 56% 42/75 [00:03<00:02, 11.93it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01863 0.008865 0.001413 35 640: 56% 42/75 [00:03<00:02, 11.93it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.0186 0.008901 0.001391 36 640: 59% 44/75 [00:03<00:02, 11.93it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01866 0.008922 0.001419 39 640: 59% 44/75 [00:03<00:02, 11.93it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01869 0.008907 0.001417 26 640: 61% 46/75 [00:03<00:02, 12.07it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01866 0.008871 0.001419 26 640: 61% 46/75 [00:03<00:02, 12.07it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01868 0.008915 0.001643 40 640: 64% 48/75 [00:04<00:02, 11.73it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01864 0.008925 0.00162 33 640: 64% 48/75 [00:04<00:02, 11.73it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01859 0.008862 0.001597 26 640: 67% 50/75 [00:04<00:02, 12.15it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.0186 0.008893 0.001571 34 640: 67% 50/75 [00:04<00:02, 12.15it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01851 0.008843 0.001546 26 640: 69% 52/75 [00:04<00:01, 12.04it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01857 0.008862 0.001528 31 640: 69% 52/75 [00:04<00:01, 12.04it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01851 0.008841 0.001549 33 640: 72% 54/75 [00:04<00:01, 12.39it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01859 0.008875 0.001537 37 640: 72% 54/75 [00:04<00:01, 12.39it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01854 0.008863 0.00153 36 640: 75% 56/75 [00:04<00:01, 12.23it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01862 0.008884 0.001514 34 640: 75% 56/75 [00:04<00:01, 12.23it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01895 0.008858 0.001506 25 640: 77% 58/75 [00:04<00:01, 12.52it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01894 0.008866 0.001502 28 640: 77% 58/75 [00:04<00:01, 12.52it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01898 0.008838 0.001527 27 640: 80% 60/75 [00:05<00:01, 11.54it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01893 0.008802 0.00151 22 640: 80% 60/75 [00:05<00:01, 11.54it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01878 0.008795 0.001492 31 640: 83% 62/75 [00:05<00:01, 11.53it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.0188 0.00876 0.001473 28 640: 83% 62/75 [00:05<00:01, 11.53it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01878 0.008745 0.001456 31 640: 85% 64/75 [00:05<00:00, 11.48it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01875 0.008764 0.001442 38 640: 85% 64/75 [00:05<00:00, 11.48it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01893 0.008804 0.001445 34 640: 88% 66/75 [00:05<00:00, 11.95it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01894 0.008804 0.001451 34 640: 88% 66/75 [00:05<00:00, 11.95it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01895 0.008772 0.001457 32 640: 91% 68/75 [00:05<00:00, 11.89it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01899 0.008745 0.001449 23 640: 91% 68/75 [00:05<00:00, 11.89it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01898 0.008732 0.001445 30 640: 93% 70/75 [00:05<00:00, 12.31it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01896 0.008718 0.001428 33 640: 93% 70/75 [00:05<00:00, 12.31it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.019 0.008705 0.001465 30 640: 96% 72/75 [00:06<00:00, 12.11it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01901 0.008718 0.001455 38 640: 96% 72/75 [00:06<00:00, 12.11it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01898 0.008712 0.001444 29 640: 99% 74/75 [00:06<00:00, 12.29it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 56/79 4.62G 0.01899 0.008693 0.001434 32 640: 100% 75/75 [00:06<00:00, 11.93it/s]\n",
+ " Class Images Instances P R mAP50 mAP50-95: 100% 7/7 [00:01<00:00, 5.53it/s]\n",
+ " all 200 204 0.571 0.567 0.568 0.345\n",
+ "\n",
+ " Epoch GPU_mem box_loss obj_loss cls_loss Instances Size\n",
+ " 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.02001 0.00931 0.0002503 38 640: 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.02214 0.01048 0.0009391 39 640: 3% 2/75 [00:00<00:05, 13.75it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.02296 0.01177 0.0019 39 640: 3% 2/75 [00:00<00:05, 13.75it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.02256 0.01095 0.002568 29 640: 5% 4/75 [00:00<00:05, 12.09it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.02148 0.0106 0.002154 38 640: 5% 4/75 [00:00<00:05, 12.09it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.02136 0.01028 0.002949 27 640: 8% 6/75 [00:00<00:05, 12.67it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.02102 0.0105 0.002611 43 640: 8% 6/75 [00:00<00:05, 12.67it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.02037 0.01055 0.002409 41 640: 11% 8/75 [00:00<00:05, 11.39it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.02005 0.01058 0.002223 32 640: 11% 8/75 [00:00<00:05, 11.39it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01979 0.01028 0.002064 33 640: 13% 10/75 [00:00<00:05, 12.02it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01953 0.01005 0.001974 33 640: 13% 10/75 [00:00<00:05, 12.02it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01955 0.009987 0.002323 32 640: 16% 12/75 [00:01<00:05, 11.75it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01934 0.009971 0.002494 39 640: 16% 12/75 [00:01<00:05, 11.75it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01912 0.009937 0.002348 35 640: 19% 14/75 [00:01<00:05, 12.12it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01933 0.009751 0.002208 28 640: 19% 14/75 [00:01<00:05, 12.12it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01925 0.009856 0.002173 40 640: 21% 16/75 [00:01<00:04, 12.01it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01913 0.009748 0.002078 30 640: 21% 16/75 [00:01<00:04, 12.01it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01932 0.009646 0.002022 34 640: 24% 18/75 [00:01<00:04, 11.58it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01937 0.009735 0.002099 38 640: 24% 18/75 [00:01<00:04, 11.58it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01914 0.009609 0.00207 26 640: 27% 20/75 [00:01<00:04, 11.23it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01906 0.0095 0.001983 31 640: 27% 20/75 [00:01<00:04, 11.23it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01901 0.009529 0.001906 31 640: 29% 22/75 [00:01<00:04, 11.75it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01892 0.009606 0.002231 36 640: 29% 22/75 [00:01<00:04, 11.75it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.0194 0.009564 0.002381 31 640: 32% 24/75 [00:02<00:04, 11.71it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01953 0.009605 0.002308 33 640: 32% 24/75 [00:02<00:04, 11.71it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01963 0.009575 0.002238 33 640: 35% 26/75 [00:02<00:04, 12.24it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01956 0.009555 0.00223 36 640: 35% 26/75 [00:02<00:04, 12.24it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01993 0.009532 0.002203 33 640: 37% 28/75 [00:02<00:03, 12.07it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01982 0.009563 0.002158 41 640: 37% 28/75 [00:02<00:03, 12.07it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01987 0.009533 0.002219 32 640: 40% 30/75 [00:02<00:03, 12.17it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01992 0.009491 0.002165 24 640: 40% 30/75 [00:02<00:03, 12.17it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01976 0.009442 0.002121 33 640: 43% 32/75 [00:02<00:03, 11.84it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.02027 0.009429 0.002069 34 640: 43% 32/75 [00:02<00:03, 11.84it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.0203 0.009439 0.002025 35 640: 45% 34/75 [00:02<00:03, 12.16it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.02032 0.009416 0.002013 26 640: 45% 34/75 [00:02<00:03, 12.16it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.02035 0.009411 0.002089 39 640: 48% 36/75 [00:03<00:03, 11.98it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.02023 0.009334 0.002092 26 640: 48% 36/75 [00:03<00:03, 11.98it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.02016 0.009378 0.002047 42 640: 51% 38/75 [00:03<00:03, 12.27it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.0201 0.009307 0.002 31 640: 51% 38/75 [00:03<00:03, 12.27it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.02 0.009265 0.001969 30 640: 53% 40/75 [00:03<00:03, 11.61it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01997 0.009251 0.002071 32 640: 53% 40/75 [00:03<00:03, 11.61it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01999 0.009249 0.002029 36 640: 56% 42/75 [00:03<00:02, 11.92it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.02008 0.009255 0.002051 35 640: 56% 42/75 [00:03<00:02, 11.92it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01997 0.009281 0.002013 44 640: 59% 44/75 [00:03<00:02, 11.48it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01994 0.009263 0.001975 37 640: 59% 44/75 [00:03<00:02, 11.48it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.0199 0.00928 0.001949 33 640: 61% 46/75 [00:03<00:02, 11.35it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01986 0.009298 0.001943 33 640: 61% 46/75 [00:03<00:02, 11.35it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01972 0.009247 0.001955 35 640: 64% 48/75 [00:04<00:02, 10.91it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01962 0.009247 0.001944 36 640: 64% 48/75 [00:04<00:02, 10.91it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01963 0.00923 0.001917 25 640: 67% 50/75 [00:04<00:02, 11.49it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01964 0.009182 0.001929 31 640: 67% 50/75 [00:04<00:02, 11.49it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01958 0.009178 0.001904 40 640: 69% 52/75 [00:04<00:02, 10.91it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.0195 0.009198 0.001882 34 640: 69% 52/75 [00:04<00:02, 10.91it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.0195 0.009184 0.001878 35 640: 72% 54/75 [00:04<00:01, 11.02it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01939 0.009136 0.001866 29 640: 72% 54/75 [00:04<00:01, 11.02it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01938 0.009173 0.001852 43 640: 75% 56/75 [00:04<00:01, 10.71it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01933 0.009169 0.00189 37 640: 75% 56/75 [00:04<00:01, 10.71it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01928 0.009168 0.001865 32 640: 77% 58/75 [00:05<00:01, 10.81it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01923 0.009161 0.001855 37 640: 77% 58/75 [00:05<00:01, 10.81it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01923 0.009172 0.001835 36 640: 80% 60/75 [00:05<00:01, 10.96it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01924 0.009136 0.001825 29 640: 80% 60/75 [00:05<00:01, 10.96it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.0193 0.009131 0.001832 32 640: 83% 62/75 [00:05<00:01, 11.35it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01949 0.009119 0.001821 29 640: 83% 62/75 [00:05<00:01, 11.35it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01955 0.009142 0.002085 26 640: 85% 64/75 [00:05<00:00, 11.00it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.0196 0.009106 0.002082 26 640: 85% 64/75 [00:05<00:00, 11.00it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01961 0.009101 0.002055 36 640: 88% 66/75 [00:05<00:00, 11.35it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01957 0.0091 0.002029 37 640: 88% 66/75 [00:05<00:00, 11.35it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01958 0.009077 0.002006 28 640: 91% 68/75 [00:05<00:00, 10.99it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01956 0.009053 0.002015 32 640: 91% 68/75 [00:05<00:00, 10.99it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01949 0.009023 0.001998 28 640: 93% 70/75 [00:06<00:00, 10.83it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01955 0.009021 0.002018 36 640: 93% 70/75 [00:06<00:00, 10.83it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01954 0.009002 0.002 31 640: 96% 72/75 [00:06<00:00, 10.54it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01952 0.009017 0.002035 33 640: 96% 72/75 [00:06<00:00, 10.54it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01948 0.008977 0.002013 29 640: 99% 74/75 [00:06<00:00, 10.23it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 57/79 4.62G 0.01946 0.008983 0.001995 39 640: 100% 75/75 [00:06<00:00, 11.38it/s]\n",
+ " Class Images Instances P R mAP50 mAP50-95: 100% 7/7 [00:01<00:00, 5.38it/s]\n",
+ " all 200 204 0.576 0.608 0.587 0.36\n",
+ "\n",
+ " Epoch GPU_mem box_loss obj_loss cls_loss Instances Size\n",
+ " 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.03304 0.01182 0.002846 33 640: 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.02085 0.008843 0.001529 26 640: 3% 2/75 [00:00<00:06, 11.79it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.02194 0.008054 0.00126 21 640: 3% 2/75 [00:00<00:06, 11.79it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.02076 0.007936 0.001032 27 640: 5% 4/75 [00:00<00:05, 11.84it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.0211 0.00823 0.001267 37 640: 5% 4/75 [00:00<00:05, 11.84it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.02046 0.008157 0.001179 30 640: 8% 6/75 [00:00<00:06, 11.42it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.02082 0.008221 0.001608 30 640: 8% 6/75 [00:00<00:06, 11.42it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.02114 0.008218 0.001472 27 640: 11% 8/75 [00:00<00:05, 11.38it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.02098 0.008562 0.001473 40 640: 11% 8/75 [00:00<00:05, 11.38it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.02045 0.00861 0.001349 38 640: 13% 10/75 [00:00<00:05, 11.55it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.02187 0.008581 0.001327 27 640: 13% 10/75 [00:00<00:05, 11.55it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.0216 0.008827 0.001428 44 640: 16% 12/75 [00:01<00:05, 12.11it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.02156 0.008803 0.001385 34 640: 16% 12/75 [00:01<00:05, 12.11it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.02103 0.008748 0.001301 35 640: 19% 14/75 [00:01<00:05, 11.67it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.0208 0.008698 0.001236 31 640: 19% 14/75 [00:01<00:05, 11.67it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.0211 0.008664 0.001258 33 640: 21% 16/75 [00:01<00:04, 12.05it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.0208 0.008737 0.001204 39 640: 21% 16/75 [00:01<00:04, 12.05it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.02132 0.008871 0.001313 32 640: 24% 18/75 [00:01<00:04, 11.87it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.02106 0.008926 0.001349 40 640: 24% 18/75 [00:01<00:04, 11.87it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.02086 0.008899 0.001339 30 640: 27% 20/75 [00:01<00:04, 11.92it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.02085 0.008933 0.001386 35 640: 27% 20/75 [00:01<00:04, 11.92it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.02088 0.009031 0.001381 37 640: 29% 22/75 [00:01<00:04, 11.33it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.02079 0.009037 0.001337 36 640: 29% 22/75 [00:01<00:04, 11.33it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.02067 0.008952 0.001324 34 640: 32% 24/75 [00:02<00:04, 11.88it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.0206 0.00894 0.001353 33 640: 32% 24/75 [00:02<00:04, 11.88it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.02049 0.008951 0.001322 31 640: 35% 26/75 [00:02<00:04, 11.54it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.02054 0.008974 0.001343 32 640: 35% 26/75 [00:02<00:04, 11.54it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.02049 0.00901 0.001789 34 640: 37% 28/75 [00:02<00:03, 11.98it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.02031 0.008857 0.001773 22 640: 37% 28/75 [00:02<00:03, 11.98it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.02022 0.008888 0.001728 33 640: 40% 30/75 [00:02<00:03, 11.97it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.02028 0.008884 0.0017 27 640: 40% 30/75 [00:02<00:03, 11.97it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.02026 0.00893 0.001678 35 640: 43% 32/75 [00:02<00:03, 12.13it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.02049 0.008911 0.001725 28 640: 43% 32/75 [00:02<00:03, 12.13it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.02025 0.008836 0.001682 28 640: 45% 34/75 [00:02<00:03, 11.64it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.02031 0.008893 0.001654 33 640: 45% 34/75 [00:02<00:03, 11.64it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.02015 0.008868 0.001626 31 640: 48% 36/75 [00:03<00:03, 11.64it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.02022 0.008913 0.001593 36 640: 48% 36/75 [00:03<00:03, 11.64it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.02031 0.008909 0.001726 32 640: 51% 38/75 [00:03<00:03, 11.55it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.02022 0.008884 0.001824 29 640: 51% 38/75 [00:03<00:03, 11.55it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.02015 0.008912 0.001814 29 640: 53% 40/75 [00:03<00:02, 11.69it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.02023 0.008963 0.001814 43 640: 53% 40/75 [00:03<00:02, 11.69it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.02004 0.008927 0.001805 35 640: 56% 42/75 [00:03<00:02, 11.54it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.01987 0.008889 0.001776 28 640: 56% 42/75 [00:03<00:02, 11.54it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.01993 0.008888 0.001809 26 640: 59% 44/75 [00:03<00:02, 11.74it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.01986 0.008899 0.001789 34 640: 59% 44/75 [00:03<00:02, 11.74it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.01977 0.008866 0.001797 34 640: 61% 46/75 [00:03<00:02, 11.54it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.01965 0.008825 0.001765 32 640: 61% 46/75 [00:04<00:02, 11.54it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.01957 0.008747 0.001735 24 640: 64% 48/75 [00:04<00:02, 11.85it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.01961 0.008762 0.001717 40 640: 64% 48/75 [00:04<00:02, 11.85it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.01945 0.008734 0.001719 23 640: 67% 50/75 [00:04<00:02, 11.71it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.0194 0.008709 0.001702 33 640: 67% 50/75 [00:04<00:02, 11.71it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.01929 0.00869 0.001678 37 640: 69% 52/75 [00:04<00:01, 12.10it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.01927 0.008718 0.001658 39 640: 69% 52/75 [00:04<00:01, 12.10it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.01916 0.008731 0.001655 38 640: 72% 54/75 [00:04<00:01, 11.56it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.01912 0.008711 0.001633 30 640: 72% 54/75 [00:04<00:01, 11.56it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.01907 0.008747 0.00163 36 640: 75% 56/75 [00:04<00:01, 11.38it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.01887 0.008685 0.001605 28 640: 75% 56/75 [00:04<00:01, 11.38it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.01887 0.008666 0.001585 31 640: 77% 58/75 [00:04<00:01, 11.49it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.01888 0.008667 0.001575 33 640: 77% 58/75 [00:05<00:01, 11.49it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.01892 0.008679 0.001571 33 640: 80% 60/75 [00:05<00:01, 11.55it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.01887 0.008705 0.001563 37 640: 80% 60/75 [00:05<00:01, 11.55it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.01881 0.008701 0.001545 33 640: 83% 62/75 [00:05<00:01, 11.39it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.0188 0.008705 0.001536 34 640: 83% 62/75 [00:05<00:01, 11.39it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.01879 0.008729 0.001536 36 640: 85% 64/75 [00:05<00:00, 11.37it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.01877 0.008752 0.001519 29 640: 85% 64/75 [00:05<00:00, 11.37it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.01879 0.008777 0.001502 36 640: 88% 66/75 [00:05<00:00, 11.18it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.01876 0.008777 0.001519 34 640: 88% 66/75 [00:05<00:00, 11.18it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.01872 0.008804 0.001514 40 640: 91% 68/75 [00:05<00:00, 10.93it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.01881 0.008773 0.001524 31 640: 91% 68/75 [00:05<00:00, 10.93it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.01881 0.008769 0.001522 34 640: 93% 70/75 [00:06<00:00, 11.03it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.01894 0.008799 0.001552 38 640: 93% 70/75 [00:06<00:00, 11.03it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.01893 0.008817 0.001547 30 640: 96% 72/75 [00:06<00:00, 11.10it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.01893 0.008819 0.001546 30 640: 96% 72/75 [00:06<00:00, 11.10it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.01894 0.008825 0.001537 39 640: 99% 74/75 [00:06<00:00, 10.77it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 58/79 4.62G 0.01894 0.008862 0.001527 32 640: 100% 75/75 [00:06<00:00, 11.54it/s]\n",
+ " Class Images Instances P R mAP50 mAP50-95: 100% 7/7 [00:01<00:00, 5.16it/s]\n",
+ " all 200 204 0.638 0.581 0.598 0.373\n",
+ "\n",
+ " Epoch GPU_mem box_loss obj_loss cls_loss Instances Size\n",
+ " 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.02053 0.007088 0.0007503 28 640: 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01959 0.006948 0.005384 25 640: 3% 2/75 [00:00<00:06, 11.24it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01951 0.006701 0.003769 23 640: 3% 2/75 [00:00<00:06, 11.24it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01911 0.007447 0.002913 36 640: 5% 4/75 [00:00<00:05, 11.87it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01879 0.007124 0.002392 23 640: 5% 4/75 [00:00<00:05, 11.87it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01909 0.007431 0.002049 36 640: 8% 6/75 [00:00<00:05, 11.54it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.0188 0.007819 0.001827 38 640: 8% 6/75 [00:00<00:05, 11.54it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01919 0.00793 0.001746 34 640: 11% 8/75 [00:00<00:05, 11.70it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01984 0.008181 0.001728 27 640: 11% 8/75 [00:00<00:05, 11.70it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01973 0.008373 0.001639 40 640: 13% 10/75 [00:00<00:05, 11.67it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01964 0.008558 0.001739 34 640: 13% 10/75 [00:00<00:05, 11.67it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01934 0.008654 0.001736 30 640: 16% 12/75 [00:01<00:05, 11.93it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01917 0.008584 0.001637 31 640: 16% 12/75 [00:01<00:05, 11.93it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01883 0.008638 0.001548 37 640: 19% 14/75 [00:01<00:05, 11.83it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01857 0.008575 0.001464 32 640: 19% 14/75 [00:01<00:05, 11.83it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01839 0.008675 0.001422 40 640: 21% 16/75 [00:01<00:05, 11.75it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.0181 0.008513 0.00138 24 640: 21% 16/75 [00:01<00:05, 11.75it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01823 0.008587 0.001384 37 640: 24% 18/75 [00:01<00:04, 11.77it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.0181 0.008614 0.001447 36 640: 24% 18/75 [00:01<00:04, 11.77it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01838 0.008759 0.001524 38 640: 27% 20/75 [00:01<00:04, 12.05it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01828 0.008891 0.001465 47 640: 27% 20/75 [00:01<00:04, 12.05it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01834 0.008978 0.001501 33 640: 29% 22/75 [00:01<00:04, 11.74it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01824 0.008949 0.001452 36 640: 29% 22/75 [00:01<00:04, 11.74it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01829 0.00895 0.001425 32 640: 32% 24/75 [00:02<00:04, 11.99it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.0182 0.008879 0.00141 29 640: 32% 24/75 [00:02<00:04, 11.99it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.0183 0.008933 0.001385 33 640: 35% 26/75 [00:02<00:04, 11.84it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01821 0.008966 0.001345 39 640: 35% 26/75 [00:02<00:04, 11.84it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01811 0.008981 0.001372 37 640: 37% 28/75 [00:02<00:03, 12.23it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01786 0.009012 0.001363 34 640: 37% 28/75 [00:02<00:03, 12.23it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01805 0.009021 0.001361 37 640: 40% 30/75 [00:02<00:03, 11.91it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01822 0.009017 0.001344 32 640: 40% 30/75 [00:02<00:03, 11.91it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01821 0.008997 0.001317 33 640: 43% 32/75 [00:02<00:03, 12.02it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01832 0.008972 0.001356 30 640: 43% 32/75 [00:02<00:03, 12.02it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01842 0.00895 0.001405 31 640: 45% 34/75 [00:02<00:03, 11.73it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01828 0.008895 0.001841 21 640: 45% 34/75 [00:02<00:03, 11.73it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01821 0.008928 0.001825 37 640: 48% 36/75 [00:03<00:03, 12.33it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01827 0.008891 0.001787 35 640: 48% 36/75 [00:03<00:03, 12.33it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01818 0.00886 0.001752 35 640: 51% 38/75 [00:03<00:03, 11.67it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01815 0.008805 0.001725 28 640: 51% 38/75 [00:03<00:03, 11.67it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01814 0.008814 0.001693 35 640: 53% 40/75 [00:03<00:03, 11.34it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01817 0.008818 0.001667 39 640: 53% 40/75 [00:03<00:03, 11.34it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01822 0.008828 0.001645 33 640: 56% 42/75 [00:03<00:02, 11.36it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01824 0.008779 0.001641 22 640: 56% 42/75 [00:03<00:02, 11.36it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01823 0.008812 0.001615 35 640: 59% 44/75 [00:03<00:02, 11.87it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01823 0.008836 0.001589 35 640: 59% 44/75 [00:03<00:02, 11.87it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01814 0.008813 0.001591 33 640: 61% 46/75 [00:03<00:02, 11.85it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01813 0.008833 0.001566 45 640: 61% 46/75 [00:03<00:02, 11.85it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01812 0.008826 0.001548 36 640: 64% 48/75 [00:04<00:02, 11.49it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01818 0.008848 0.001542 31 640: 64% 48/75 [00:04<00:02, 11.49it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01834 0.008891 0.001523 39 640: 67% 50/75 [00:04<00:02, 11.11it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01825 0.008879 0.001498 32 640: 67% 50/75 [00:04<00:02, 11.11it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01823 0.00887 0.001504 30 640: 69% 52/75 [00:04<00:02, 11.40it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01829 0.008888 0.00148 35 640: 69% 52/75 [00:04<00:02, 11.40it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01819 0.008866 0.001459 36 640: 72% 54/75 [00:04<00:01, 11.35it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01816 0.008873 0.001459 36 640: 72% 54/75 [00:04<00:01, 11.35it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01824 0.008851 0.001446 29 640: 75% 56/75 [00:04<00:01, 11.06it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01826 0.008877 0.001438 36 640: 75% 56/75 [00:04<00:01, 11.06it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01824 0.008894 0.001425 38 640: 77% 58/75 [00:05<00:01, 10.41it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.0183 0.00884 0.00141 24 640: 77% 58/75 [00:05<00:01, 10.41it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01837 0.008832 0.001398 26 640: 80% 60/75 [00:05<00:01, 10.80it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01838 0.00884 0.001388 35 640: 80% 60/75 [00:05<00:01, 10.80it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01834 0.008807 0.00138 33 640: 83% 62/75 [00:05<00:01, 10.97it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01838 0.008784 0.001363 31 640: 83% 62/75 [00:05<00:01, 10.97it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01835 0.008725 0.001353 24 640: 85% 64/75 [00:05<00:00, 11.55it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01834 0.008728 0.001363 36 640: 85% 64/75 [00:05<00:00, 11.55it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01838 0.008718 0.001386 30 640: 88% 66/75 [00:05<00:00, 11.47it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01839 0.008725 0.001375 28 640: 88% 66/75 [00:05<00:00, 11.47it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01836 0.008714 0.001358 33 640: 91% 68/75 [00:05<00:00, 11.51it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01832 0.008684 0.001347 27 640: 91% 68/75 [00:05<00:00, 11.51it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01829 0.008646 0.001332 24 640: 93% 70/75 [00:06<00:00, 10.94it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01833 0.008602 0.001317 26 640: 93% 70/75 [00:06<00:00, 10.94it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01836 0.008594 0.001319 32 640: 96% 72/75 [00:06<00:00, 10.94it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01834 0.008584 0.001319 34 640: 96% 72/75 [00:06<00:00, 10.94it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01835 0.008586 0.001331 32 640: 99% 74/75 [00:06<00:00, 10.29it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 59/79 4.62G 0.01836 0.008592 0.00134 37 640: 100% 75/75 [00:06<00:00, 11.43it/s]\n",
+ " Class Images Instances P R mAP50 mAP50-95: 100% 7/7 [00:01<00:00, 5.11it/s]\n",
+ " all 200 204 0.575 0.607 0.58 0.365\n",
+ "\n",
+ " Epoch GPU_mem box_loss obj_loss cls_loss Instances Size\n",
+ " 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01943 0.007471 0.0006817 29 640: 1% 1/75 [00:00<00:07, 9.95it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01649 0.00802 0.0004918 30 640: 1% 1/75 [00:00<00:07, 9.95it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01683 0.007232 0.0004223 20 640: 4% 3/75 [00:00<00:07, 10.10it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01803 0.008105 0.001632 36 640: 4% 3/75 [00:00<00:07, 10.10it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01784 0.008009 0.001815 31 640: 7% 5/75 [00:00<00:06, 11.06it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01873 0.008123 0.002734 28 640: 7% 5/75 [00:00<00:06, 11.06it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01802 0.00796 0.002663 29 640: 9% 7/75 [00:00<00:06, 10.67it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.018 0.008181 0.002622 38 640: 9% 7/75 [00:00<00:06, 10.67it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01794 0.008131 0.002624 29 640: 12% 9/75 [00:00<00:05, 11.02it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01825 0.008187 0.002449 34 640: 12% 9/75 [00:00<00:05, 11.02it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01817 0.007961 0.002393 28 640: 15% 11/75 [00:01<00:05, 10.96it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01785 0.00798 0.002219 29 640: 15% 11/75 [00:01<00:05, 10.96it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01835 0.00796 0.002233 33 640: 17% 13/75 [00:01<00:05, 10.74it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01842 0.007932 0.002097 37 640: 17% 13/75 [00:01<00:05, 10.74it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.0184 0.007947 0.002032 35 640: 20% 15/75 [00:01<00:05, 10.99it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01848 0.007972 0.00224 30 640: 20% 15/75 [00:01<00:05, 10.99it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01861 0.007909 0.00218 29 640: 23% 17/75 [00:01<00:05, 11.47it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01847 0.007912 0.00211 30 640: 23% 17/75 [00:01<00:05, 11.47it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01838 0.007886 0.002063 28 640: 25% 19/75 [00:01<00:04, 11.51it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01833 0.007811 0.00223 27 640: 25% 19/75 [00:01<00:04, 11.51it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01823 0.007977 0.002146 44 640: 28% 21/75 [00:01<00:04, 12.01it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01829 0.008007 0.002111 41 640: 28% 21/75 [00:01<00:04, 12.01it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01834 0.008067 0.002072 36 640: 31% 23/75 [00:02<00:04, 11.92it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01836 0.007985 0.002035 22 640: 31% 23/75 [00:02<00:04, 11.92it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01845 0.007964 0.002055 33 640: 33% 25/75 [00:02<00:04, 12.27it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01842 0.00785 0.001996 24 640: 33% 25/75 [00:02<00:04, 12.27it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01843 0.007848 0.001932 32 640: 36% 27/75 [00:02<00:04, 11.85it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01828 0.007862 0.001934 30 640: 36% 27/75 [00:02<00:04, 11.85it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01837 0.007838 0.001893 30 640: 39% 29/75 [00:02<00:03, 12.20it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01833 0.007827 0.001839 28 640: 39% 29/75 [00:02<00:03, 12.20it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01846 0.007838 0.001799 33 640: 41% 31/75 [00:02<00:03, 12.04it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01847 0.007915 0.001852 41 640: 41% 31/75 [00:02<00:03, 12.04it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01831 0.007903 0.001825 31 640: 44% 33/75 [00:02<00:03, 11.91it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01835 0.007907 0.001856 26 640: 44% 33/75 [00:02<00:03, 11.91it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01829 0.007885 0.001826 28 640: 47% 35/75 [00:03<00:03, 11.85it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01836 0.007881 0.001795 30 640: 47% 35/75 [00:03<00:03, 11.85it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01837 0.007878 0.001754 31 640: 49% 37/75 [00:03<00:03, 12.20it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.0182 0.007837 0.001729 19 640: 49% 37/75 [00:03<00:03, 12.20it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01827 0.007906 0.001705 40 640: 52% 39/75 [00:03<00:02, 12.15it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01823 0.007977 0.001673 38 640: 52% 39/75 [00:03<00:02, 12.15it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01826 0.007995 0.001647 29 640: 55% 41/75 [00:03<00:02, 12.36it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01823 0.008006 0.00166 34 640: 55% 41/75 [00:03<00:02, 12.36it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01813 0.007996 0.001659 28 640: 57% 43/75 [00:03<00:02, 11.97it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01815 0.008027 0.00167 32 640: 57% 43/75 [00:03<00:02, 11.97it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.0181 0.008053 0.001641 33 640: 60% 45/75 [00:03<00:02, 12.31it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01798 0.008017 0.00164 33 640: 60% 45/75 [00:03<00:02, 12.31it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.0179 0.008013 0.002255 28 640: 63% 47/75 [00:04<00:02, 11.99it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.0178 0.008008 0.002222 34 640: 63% 47/75 [00:04<00:02, 11.99it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.0178 0.008043 0.002191 35 640: 65% 49/75 [00:04<00:02, 12.21it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01778 0.008077 0.002196 35 640: 65% 49/75 [00:04<00:02, 12.21it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01771 0.008015 0.002159 30 640: 68% 51/75 [00:04<00:02, 11.82it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.0178 0.008019 0.002155 34 640: 68% 51/75 [00:04<00:02, 11.82it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01773 0.008029 0.002125 32 640: 71% 53/75 [00:04<00:01, 12.20it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01767 0.008042 0.00214 26 640: 71% 53/75 [00:04<00:01, 12.20it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01766 0.008041 0.002105 30 640: 73% 55/75 [00:04<00:01, 11.64it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01765 0.008032 0.002074 27 640: 73% 55/75 [00:04<00:01, 11.64it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01769 0.008048 0.002047 31 640: 76% 57/75 [00:04<00:01, 11.71it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01775 0.008061 0.002016 30 640: 76% 57/75 [00:04<00:01, 11.71it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.0177 0.008031 0.002001 31 640: 79% 59/75 [00:05<00:01, 11.18it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01759 0.008005 0.001981 23 640: 79% 59/75 [00:05<00:01, 11.18it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01761 0.008002 0.001973 26 640: 81% 61/75 [00:05<00:01, 11.45it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01757 0.008003 0.001945 30 640: 81% 61/75 [00:05<00:01, 11.45it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01762 0.008012 0.001927 33 640: 84% 63/75 [00:05<00:01, 11.53it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01758 0.008016 0.001913 31 640: 84% 63/75 [00:05<00:01, 11.53it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01755 0.007996 0.001901 28 640: 87% 65/75 [00:05<00:00, 11.96it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01753 0.007987 0.001875 29 640: 87% 65/75 [00:05<00:00, 11.96it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01745 0.007975 0.001862 30 640: 89% 67/75 [00:05<00:00, 11.97it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01737 0.007967 0.001838 31 640: 89% 67/75 [00:05<00:00, 11.97it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01737 0.007992 0.001864 38 640: 92% 69/75 [00:05<00:00, 12.29it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01742 0.008001 0.001844 32 640: 92% 69/75 [00:05<00:00, 12.29it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.0175 0.008011 0.001828 26 640: 95% 71/75 [00:06<00:00, 12.14it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01749 0.008014 0.001812 35 640: 95% 71/75 [00:06<00:00, 12.14it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01745 0.008014 0.001796 36 640: 97% 73/75 [00:06<00:00, 12.47it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01739 0.007985 0.001775 26 640: 97% 73/75 [00:06<00:00, 12.47it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 60/79 4.62G 0.01741 0.007978 0.001758 25 640: 100% 75/75 [00:06<00:00, 11.72it/s]\n",
+ " Class Images Instances P R mAP50 mAP50-95: 100% 7/7 [00:01<00:00, 5.35it/s]\n",
+ " all 200 204 0.569 0.602 0.595 0.373\n",
+ "\n",
+ " Epoch GPU_mem box_loss obj_loss cls_loss Instances Size\n",
+ " 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01215 0.005657 0.0003978 34 640: 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01568 0.006421 0.000673 30 640: 3% 2/75 [00:00<00:05, 12.21it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01542 0.007427 0.0007341 35 640: 3% 2/75 [00:00<00:05, 12.21it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01697 0.007563 0.0008521 28 640: 5% 4/75 [00:00<00:05, 11.87it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01649 0.007533 0.0007514 28 640: 5% 4/75 [00:00<00:05, 11.87it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01539 0.007465 0.0009914 25 640: 8% 6/75 [00:00<00:05, 12.40it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01593 0.007693 0.0009995 33 640: 8% 6/75 [00:00<00:05, 12.40it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01574 0.007475 0.001014 29 640: 11% 8/75 [00:00<00:05, 11.59it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01528 0.007413 0.001043 27 640: 11% 8/75 [00:00<00:05, 11.59it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01572 0.007821 0.0009869 36 640: 13% 10/75 [00:00<00:05, 12.11it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01622 0.007829 0.001317 28 640: 13% 10/75 [00:00<00:05, 12.11it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01673 0.007878 0.001436 32 640: 16% 12/75 [00:01<00:05, 11.73it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01649 0.007796 0.001351 26 640: 16% 12/75 [00:01<00:05, 11.73it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01643 0.007827 0.001308 33 640: 19% 14/75 [00:01<00:05, 11.89it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01622 0.007821 0.001264 34 640: 19% 14/75 [00:01<00:05, 11.89it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.0163 0.008088 0.00125 44 640: 21% 16/75 [00:01<00:05, 11.54it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01624 0.008059 0.001227 34 640: 21% 16/75 [00:01<00:05, 11.54it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01622 0.008138 0.00119 41 640: 24% 18/75 [00:01<00:04, 12.02it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01639 0.008229 0.001162 41 640: 24% 18/75 [00:01<00:04, 12.02it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01657 0.008403 0.001139 32 640: 27% 20/75 [00:01<00:04, 11.76it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01728 0.008419 0.001153 37 640: 27% 20/75 [00:01<00:04, 11.76it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01698 0.008325 0.00118 21 640: 29% 22/75 [00:01<00:04, 11.71it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01707 0.00831 0.001146 39 640: 29% 22/75 [00:01<00:04, 11.71it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01708 0.008268 0.001109 30 640: 32% 24/75 [00:02<00:04, 11.52it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01708 0.008284 0.001098 41 640: 32% 24/75 [00:02<00:04, 11.52it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01704 0.00836 0.00113 38 640: 35% 26/75 [00:02<00:04, 11.93it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01706 0.008428 0.001232 34 640: 35% 26/75 [00:02<00:04, 11.93it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01699 0.008379 0.001194 24 640: 37% 28/75 [00:02<00:04, 11.70it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01688 0.008337 0.001169 30 640: 37% 28/75 [00:02<00:04, 11.70it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01694 0.00837 0.001167 32 640: 40% 30/75 [00:02<00:03, 11.56it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01717 0.008419 0.001265 38 640: 40% 30/75 [00:02<00:03, 11.56it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01704 0.008382 0.001232 29 640: 43% 32/75 [00:02<00:03, 11.61it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01715 0.008466 0.001246 33 640: 43% 32/75 [00:02<00:03, 11.61it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01734 0.008477 0.001224 40 640: 45% 34/75 [00:02<00:03, 11.82it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01727 0.008495 0.001362 38 640: 45% 34/75 [00:02<00:03, 11.82it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01715 0.008411 0.001339 26 640: 48% 36/75 [00:03<00:03, 11.56it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01731 0.008428 0.001413 29 640: 48% 36/75 [00:03<00:03, 11.56it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01734 0.008443 0.00139 34 640: 51% 38/75 [00:03<00:03, 12.00it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.0172 0.008443 0.001415 34 640: 51% 38/75 [00:03<00:03, 12.00it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01723 0.008411 0.00142 29 640: 53% 40/75 [00:03<00:03, 11.57it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01716 0.008408 0.001394 37 640: 53% 40/75 [00:03<00:03, 11.57it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01717 0.008372 0.001391 28 640: 56% 42/75 [00:03<00:02, 11.84it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01724 0.008425 0.001372 35 640: 56% 42/75 [00:03<00:02, 11.84it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01724 0.008362 0.00137 23 640: 59% 44/75 [00:03<00:02, 11.61it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01729 0.008346 0.001376 26 640: 59% 44/75 [00:03<00:02, 11.61it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01726 0.008385 0.00141 37 640: 61% 46/75 [00:03<00:02, 11.71it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01721 0.008343 0.001411 31 640: 61% 46/75 [00:04<00:02, 11.71it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01734 0.008338 0.0014 36 640: 64% 48/75 [00:04<00:02, 11.34it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01728 0.008357 0.001389 35 640: 64% 48/75 [00:04<00:02, 11.34it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01727 0.008389 0.001486 32 640: 67% 50/75 [00:04<00:02, 11.33it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01726 0.008412 0.001467 37 640: 67% 50/75 [00:04<00:02, 11.33it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01743 0.008432 0.001472 31 640: 69% 52/75 [00:04<00:02, 11.17it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01738 0.008418 0.001461 32 640: 69% 52/75 [00:04<00:02, 11.17it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01738 0.008435 0.001458 37 640: 72% 54/75 [00:04<00:01, 11.67it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01756 0.008467 0.001589 41 640: 72% 54/75 [00:04<00:01, 11.67it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01753 0.008441 0.001566 29 640: 75% 56/75 [00:04<00:01, 11.14it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01755 0.008412 0.001543 23 640: 75% 56/75 [00:04<00:01, 11.14it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01751 0.008421 0.001525 35 640: 77% 58/75 [00:04<00:01, 11.49it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01757 0.008435 0.001553 37 640: 77% 58/75 [00:05<00:01, 11.49it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01758 0.008423 0.001532 30 640: 80% 60/75 [00:05<00:01, 11.57it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01759 0.008433 0.001526 38 640: 80% 60/75 [00:05<00:01, 11.57it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01755 0.00843 0.001506 26 640: 83% 62/75 [00:05<00:01, 11.74it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01752 0.008473 0.001513 40 640: 83% 62/75 [00:05<00:01, 11.74it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01764 0.008496 0.001498 34 640: 85% 64/75 [00:05<00:00, 11.21it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01762 0.008495 0.001604 32 640: 85% 64/75 [00:05<00:00, 11.21it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01768 0.008497 0.001708 32 640: 88% 66/75 [00:05<00:00, 11.48it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01766 0.00848 0.001687 31 640: 88% 66/75 [00:05<00:00, 11.48it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01776 0.008466 0.00168 21 640: 91% 68/75 [00:05<00:00, 10.78it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.0178 0.008495 0.001665 31 640: 91% 68/75 [00:05<00:00, 10.78it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01777 0.008509 0.001649 41 640: 93% 70/75 [00:06<00:00, 10.90it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01775 0.008512 0.001637 35 640: 93% 70/75 [00:06<00:00, 10.90it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01774 0.008549 0.001622 32 640: 96% 72/75 [00:06<00:00, 10.80it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01768 0.008555 0.001602 37 640: 96% 72/75 [00:06<00:00, 10.80it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01766 0.008557 0.001609 33 640: 99% 74/75 [00:06<00:00, 10.68it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 61/79 4.62G 0.01761 0.008543 0.001591 31 640: 100% 75/75 [00:06<00:00, 11.47it/s]\n",
+ " Class Images Instances P R mAP50 mAP50-95: 100% 7/7 [00:01<00:00, 5.12it/s]\n",
+ " all 200 204 0.564 0.557 0.583 0.378\n",
+ "\n",
+ " Epoch GPU_mem box_loss obj_loss cls_loss Instances Size\n",
+ " 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.02018 0.006639 0.0003331 27 640: 1% 1/75 [00:00<00:07, 9.32it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01865 0.008787 0.0005516 36 640: 1% 1/75 [00:00<00:07, 9.32it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01767 0.008288 0.000646 30 640: 4% 3/75 [00:00<00:06, 11.32it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01728 0.008241 0.000555 35 640: 4% 3/75 [00:00<00:06, 11.32it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01737 0.008235 0.0004987 35 640: 7% 5/75 [00:00<00:06, 10.61it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01596 0.007736 0.0006398 22 640: 7% 5/75 [00:00<00:06, 10.61it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01635 0.00787 0.0005813 32 640: 9% 7/75 [00:00<00:05, 11.55it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01661 0.008146 0.0006854 39 640: 9% 7/75 [00:00<00:05, 11.55it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01591 0.007948 0.000937 24 640: 12% 9/75 [00:00<00:06, 10.56it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01616 0.008227 0.0009411 38 640: 12% 9/75 [00:00<00:06, 10.56it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01602 0.008057 0.0008843 32 640: 15% 11/75 [00:01<00:05, 10.78it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01594 0.008241 0.0011 38 640: 15% 11/75 [00:01<00:05, 10.78it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01592 0.008205 0.001037 29 640: 17% 13/75 [00:01<00:05, 10.62it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01571 0.008106 0.0009876 31 640: 17% 13/75 [00:01<00:05, 10.62it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01613 0.008091 0.001098 33 640: 20% 15/75 [00:01<00:05, 10.97it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01723 0.008037 0.001214 29 640: 20% 15/75 [00:01<00:05, 10.97it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01702 0.007981 0.001158 32 640: 23% 17/75 [00:01<00:05, 10.66it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01726 0.007945 0.001123 29 640: 23% 17/75 [00:01<00:05, 10.66it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01715 0.007991 0.001093 37 640: 25% 19/75 [00:01<00:05, 11.00it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01741 0.008126 0.001178 32 640: 25% 19/75 [00:01<00:05, 11.00it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01731 0.008151 0.001152 34 640: 28% 21/75 [00:01<00:04, 10.84it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01729 0.008177 0.001222 35 640: 28% 21/75 [00:02<00:04, 10.84it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01716 0.008137 0.001179 31 640: 31% 23/75 [00:02<00:04, 11.19it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01715 0.008129 0.001168 28 640: 31% 23/75 [00:02<00:04, 11.19it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01713 0.008149 0.001152 32 640: 33% 25/75 [00:02<00:04, 11.30it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01725 0.008106 0.00113 30 640: 33% 25/75 [00:02<00:04, 11.30it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01714 0.008045 0.001104 25 640: 36% 27/75 [00:02<00:04, 11.91it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01718 0.007991 0.001078 30 640: 36% 27/75 [00:02<00:04, 11.91it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01708 0.007924 0.001076 31 640: 39% 29/75 [00:02<00:03, 11.91it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01706 0.00794 0.001163 33 640: 39% 29/75 [00:02<00:03, 11.91it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01711 0.007931 0.001136 26 640: 41% 31/75 [00:02<00:03, 11.90it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01713 0.007963 0.001112 35 640: 41% 31/75 [00:02<00:03, 11.90it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.0171 0.007983 0.001145 35 640: 44% 33/75 [00:02<00:03, 11.52it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01705 0.007986 0.001124 31 640: 44% 33/75 [00:03<00:03, 11.52it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01705 0.008009 0.001109 31 640: 47% 35/75 [00:03<00:03, 11.95it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.0171 0.008033 0.001104 34 640: 47% 35/75 [00:03<00:03, 11.95it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01707 0.008037 0.001095 32 640: 49% 37/75 [00:03<00:03, 11.79it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.017 0.00804 0.001071 33 640: 49% 37/75 [00:03<00:03, 11.79it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01706 0.008037 0.001053 29 640: 52% 39/75 [00:03<00:02, 12.09it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01696 0.007992 0.001096 31 640: 52% 39/75 [00:03<00:02, 12.09it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.017 0.008018 0.001078 33 640: 55% 41/75 [00:03<00:02, 11.72it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01696 0.007971 0.001059 30 640: 55% 41/75 [00:03<00:02, 11.72it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01698 0.007983 0.001082 35 640: 57% 43/75 [00:03<00:02, 12.13it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01704 0.008022 0.001065 32 640: 57% 43/75 [00:03<00:02, 12.13it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01706 0.008019 0.001046 29 640: 60% 45/75 [00:03<00:02, 11.73it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01698 0.008002 0.001032 37 640: 60% 45/75 [00:04<00:02, 11.73it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01691 0.008023 0.001024 36 640: 63% 47/75 [00:04<00:02, 12.01it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01695 0.00804 0.001015 36 640: 63% 47/75 [00:04<00:02, 12.01it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01691 0.008025 0.001497 24 640: 65% 49/75 [00:04<00:02, 11.67it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01697 0.008019 0.001473 30 640: 65% 49/75 [00:04<00:02, 11.67it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01688 0.007964 0.001462 21 640: 68% 51/75 [00:04<00:02, 11.84it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01698 0.007976 0.001454 32 640: 68% 51/75 [00:04<00:02, 11.84it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.017 0.007972 0.001441 36 640: 71% 53/75 [00:04<00:01, 11.53it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01706 0.007964 0.001427 30 640: 71% 53/75 [00:04<00:01, 11.53it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01702 0.007991 0.001407 41 640: 73% 55/75 [00:04<00:01, 11.89it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01708 0.008029 0.001393 34 640: 73% 55/75 [00:04<00:01, 11.89it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01713 0.007996 0.001381 29 640: 76% 57/75 [00:04<00:01, 11.33it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01719 0.00802 0.001365 31 640: 76% 57/75 [00:05<00:01, 11.33it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01712 0.007976 0.001389 22 640: 79% 59/75 [00:05<00:01, 11.36it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01714 0.007973 0.001383 25 640: 79% 59/75 [00:05<00:01, 11.36it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01711 0.008016 0.001369 43 640: 81% 61/75 [00:05<00:01, 11.28it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01712 0.008017 0.001358 32 640: 81% 61/75 [00:05<00:01, 11.28it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01708 0.008019 0.001351 30 640: 84% 63/75 [00:05<00:01, 11.23it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01704 0.007988 0.001337 27 640: 84% 63/75 [00:05<00:01, 11.23it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01707 0.008032 0.00134 40 640: 87% 65/75 [00:05<00:00, 11.34it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01699 0.008078 0.001326 46 640: 87% 65/75 [00:05<00:00, 11.34it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01701 0.008061 0.001318 26 640: 89% 67/75 [00:05<00:00, 11.86it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01696 0.008045 0.001304 34 640: 89% 67/75 [00:05<00:00, 11.86it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01691 0.008015 0.001288 27 640: 92% 69/75 [00:06<00:00, 11.71it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01691 0.008023 0.001277 31 640: 92% 69/75 [00:06<00:00, 11.71it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01695 0.008072 0.001322 32 640: 95% 71/75 [00:06<00:00, 11.83it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01696 0.008061 0.001316 27 640: 95% 71/75 [00:06<00:00, 11.83it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01691 0.008045 0.001353 30 640: 97% 73/75 [00:06<00:00, 11.12it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01691 0.008038 0.001345 29 640: 97% 73/75 [00:06<00:00, 11.12it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 62/79 4.62G 0.01695 0.008064 0.001354 38 640: 100% 75/75 [00:06<00:00, 11.45it/s]\n",
+ " Class Images Instances P R mAP50 mAP50-95: 100% 7/7 [00:01<00:00, 5.30it/s]\n",
+ " all 200 204 0.602 0.6 0.628 0.404\n",
+ "\n",
+ " Epoch GPU_mem box_loss obj_loss cls_loss Instances Size\n",
+ " 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01763 0.0101 0.001265 39 640: 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01705 0.007762 0.0008019 25 640: 3% 2/75 [00:00<00:06, 10.58it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01781 0.007855 0.0007436 34 640: 3% 2/75 [00:00<00:06, 10.58it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.0176 0.007745 0.0007014 33 640: 5% 4/75 [00:00<00:06, 10.91it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01722 0.007658 0.0008641 33 640: 5% 4/75 [00:00<00:06, 10.91it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01835 0.008201 0.0009121 36 640: 8% 6/75 [00:00<00:06, 10.76it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01835 0.008743 0.001366 28 640: 8% 6/75 [00:00<00:06, 10.76it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01868 0.008698 0.001243 35 640: 11% 8/75 [00:00<00:05, 11.58it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01812 0.008747 0.00117 37 640: 11% 8/75 [00:00<00:05, 11.58it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01789 0.008573 0.001075 24 640: 13% 10/75 [00:00<00:05, 11.57it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01917 0.008311 0.001032 27 640: 13% 10/75 [00:00<00:05, 11.57it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01889 0.008175 0.00105 29 640: 16% 12/75 [00:01<00:05, 11.78it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01886 0.008213 0.001039 33 640: 16% 12/75 [00:01<00:05, 11.78it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.0188 0.00804 0.001006 27 640: 19% 14/75 [00:01<00:05, 11.26it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.0186 0.008088 0.0009549 37 640: 19% 14/75 [00:01<00:05, 11.26it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01846 0.008219 0.001034 36 640: 21% 16/75 [00:01<00:05, 11.72it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01876 0.008198 0.001007 34 640: 21% 16/75 [00:01<00:05, 11.72it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01868 0.008213 0.001001 33 640: 24% 18/75 [00:01<00:04, 11.44it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01839 0.008134 0.0009678 27 640: 24% 18/75 [00:01<00:04, 11.44it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01835 0.008094 0.000948 31 640: 27% 20/75 [00:01<00:04, 11.90it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01821 0.008167 0.0009235 37 640: 27% 20/75 [00:01<00:04, 11.90it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01813 0.008253 0.0009015 40 640: 29% 22/75 [00:01<00:04, 11.54it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01834 0.008407 0.0008917 39 640: 29% 22/75 [00:01<00:04, 11.54it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01803 0.008346 0.0008721 32 640: 32% 24/75 [00:02<00:04, 12.12it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.0182 0.008322 0.001236 27 640: 32% 24/75 [00:02<00:04, 12.12it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01818 0.008364 0.001218 36 640: 35% 26/75 [00:02<00:04, 11.66it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01815 0.008316 0.001238 29 640: 35% 26/75 [00:02<00:04, 11.66it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01793 0.00822 0.001205 26 640: 37% 28/75 [00:02<00:03, 12.16it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01805 0.008205 0.00122 27 640: 37% 28/75 [00:02<00:03, 12.16it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01813 0.008211 0.001217 32 640: 40% 30/75 [00:02<00:03, 12.07it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01807 0.008248 0.001198 32 640: 40% 30/75 [00:02<00:03, 12.07it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01818 0.008316 0.00121 35 640: 43% 32/75 [00:02<00:03, 12.46it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01799 0.008351 0.001192 30 640: 43% 32/75 [00:02<00:03, 12.46it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01788 0.00832 0.001205 34 640: 45% 34/75 [00:02<00:03, 12.31it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01816 0.008286 0.00151 30 640: 45% 34/75 [00:02<00:03, 12.31it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01813 0.008323 0.001491 37 640: 48% 36/75 [00:03<00:03, 12.58it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01797 0.008311 0.001472 34 640: 48% 36/75 [00:03<00:03, 12.58it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01801 0.008296 0.001442 36 640: 51% 38/75 [00:03<00:03, 12.24it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01793 0.008225 0.00144 30 640: 51% 38/75 [00:03<00:03, 12.24it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01784 0.008226 0.001416 30 640: 53% 40/75 [00:03<00:02, 12.49it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.0179 0.008262 0.001391 35 640: 53% 40/75 [00:03<00:02, 12.49it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01783 0.008314 0.001365 40 640: 56% 42/75 [00:03<00:02, 12.25it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01782 0.00829 0.001349 28 640: 56% 42/75 [00:03<00:02, 12.25it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01779 0.008275 0.001325 26 640: 59% 44/75 [00:03<00:02, 12.62it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01774 0.008267 0.001333 36 640: 59% 44/75 [00:03<00:02, 12.62it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01769 0.008283 0.001316 40 640: 61% 46/75 [00:03<00:02, 12.23it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01772 0.00829 0.001311 34 640: 61% 46/75 [00:03<00:02, 12.23it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01768 0.008264 0.001313 31 640: 64% 48/75 [00:04<00:02, 12.49it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01757 0.008263 0.001304 36 640: 64% 48/75 [00:04<00:02, 12.49it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01751 0.008208 0.001316 24 640: 67% 50/75 [00:04<00:02, 12.32it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01733 0.0082 0.001298 29 640: 67% 50/75 [00:04<00:02, 12.32it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.0173 0.008174 0.0013 29 640: 69% 52/75 [00:04<00:01, 12.73it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01741 0.008265 0.001295 39 640: 69% 52/75 [00:04<00:01, 12.73it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01739 0.008266 0.001286 32 640: 72% 54/75 [00:04<00:01, 12.44it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01732 0.008263 0.001271 31 640: 72% 54/75 [00:04<00:01, 12.44it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01736 0.008262 0.001255 29 640: 75% 56/75 [00:04<00:01, 12.69it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01729 0.00828 0.00124 42 640: 75% 56/75 [00:04<00:01, 12.69it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01729 0.008285 0.001225 35 640: 77% 58/75 [00:04<00:01, 12.46it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01729 0.00828 0.001213 35 640: 77% 58/75 [00:04<00:01, 12.46it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01736 0.008293 0.001204 32 640: 80% 60/75 [00:04<00:01, 12.79it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01733 0.008297 0.001236 33 640: 80% 60/75 [00:05<00:01, 12.79it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01732 0.008306 0.001223 31 640: 83% 62/75 [00:05<00:01, 12.45it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01729 0.008291 0.001211 29 640: 83% 62/75 [00:05<00:01, 12.45it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.0173 0.00827 0.001199 30 640: 85% 64/75 [00:05<00:00, 11.91it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01727 0.008264 0.001187 32 640: 85% 64/75 [00:05<00:00, 11.91it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01727 0.008269 0.001235 33 640: 88% 66/75 [00:05<00:00, 11.18it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01725 0.008258 0.001221 25 640: 88% 66/75 [00:05<00:00, 11.18it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01725 0.008253 0.001233 32 640: 91% 68/75 [00:05<00:00, 11.60it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01735 0.008253 0.00122 34 640: 91% 68/75 [00:05<00:00, 11.60it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01736 0.008293 0.001246 39 640: 93% 70/75 [00:05<00:00, 11.61it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01735 0.008309 0.001238 36 640: 93% 70/75 [00:05<00:00, 11.61it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01738 0.00834 0.001228 33 640: 96% 72/75 [00:06<00:00, 11.70it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01738 0.008363 0.001219 35 640: 96% 72/75 [00:06<00:00, 11.70it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01736 0.008337 0.001208 28 640: 99% 74/75 [00:06<00:00, 11.54it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 63/79 4.62G 0.01731 0.008328 0.001203 32 640: 100% 75/75 [00:06<00:00, 11.94it/s]\n",
+ " Class Images Instances P R mAP50 mAP50-95: 100% 7/7 [00:01<00:00, 5.24it/s]\n",
+ " all 200 204 0.657 0.564 0.632 0.407\n",
+ "\n",
+ " Epoch GPU_mem box_loss obj_loss cls_loss Instances Size\n",
+ " 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.02094 0.00677 0.002136 29 640: 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01952 0.00806 0.00134 36 640: 3% 2/75 [00:00<00:05, 12.42it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01861 0.007922 0.0009751 30 640: 3% 2/75 [00:00<00:05, 12.42it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01756 0.007544 0.000768 36 640: 5% 4/75 [00:00<00:06, 11.52it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01863 0.007871 0.0009458 29 640: 5% 4/75 [00:00<00:06, 11.52it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01827 0.007822 0.000861 33 640: 8% 6/75 [00:00<00:05, 11.83it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01765 0.008034 0.001065 40 640: 8% 6/75 [00:00<00:05, 11.83it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01699 0.007823 0.0009683 28 640: 11% 8/75 [00:00<00:05, 11.20it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.0167 0.007612 0.0009041 25 640: 11% 8/75 [00:00<00:05, 11.20it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01633 0.007758 0.0008479 36 640: 13% 10/75 [00:00<00:05, 11.32it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01638 0.007776 0.0008225 35 640: 13% 10/75 [00:00<00:05, 11.32it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01618 0.00796 0.000777 33 640: 16% 12/75 [00:01<00:05, 11.44it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01581 0.007827 0.0008496 34 640: 16% 12/75 [00:01<00:05, 11.44it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01571 0.007821 0.000901 34 640: 19% 14/75 [00:01<00:05, 11.67it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01584 0.007717 0.0008624 26 640: 19% 14/75 [00:01<00:05, 11.67it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01595 0.0077 0.0009028 32 640: 21% 16/75 [00:01<00:05, 11.15it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01589 0.007638 0.0008615 25 640: 21% 16/75 [00:01<00:05, 11.15it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01596 0.007628 0.0009166 30 640: 24% 18/75 [00:01<00:05, 11.40it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01561 0.007569 0.00101 28 640: 24% 18/75 [00:01<00:05, 11.40it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01574 0.007707 0.0009991 36 640: 27% 20/75 [00:01<00:04, 11.04it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.0157 0.007757 0.0009644 37 640: 27% 20/75 [00:01<00:04, 11.04it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01572 0.007744 0.0009294 39 640: 29% 22/75 [00:01<00:04, 11.48it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01559 0.007781 0.0009137 34 640: 29% 22/75 [00:02<00:04, 11.48it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01551 0.007775 0.0008825 40 640: 32% 24/75 [00:02<00:04, 11.05it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.0155 0.007743 0.0008549 33 640: 32% 24/75 [00:02<00:04, 11.05it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01545 0.007742 0.0008279 35 640: 35% 26/75 [00:02<00:04, 11.54it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01536 0.007725 0.0008106 30 640: 35% 26/75 [00:02<00:04, 11.54it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01546 0.007827 0.001128 30 640: 37% 28/75 [00:02<00:04, 11.32it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01571 0.007854 0.001103 34 640: 37% 28/75 [00:02<00:04, 11.32it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01589 0.007975 0.001293 42 640: 40% 30/75 [00:02<00:03, 11.52it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01579 0.007922 0.001299 29 640: 40% 30/75 [00:02<00:03, 11.52it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01589 0.007939 0.001411 36 640: 43% 32/75 [00:02<00:03, 11.44it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01591 0.007937 0.002195 31 640: 43% 32/75 [00:02<00:03, 11.44it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.0159 0.007877 0.002145 28 640: 45% 34/75 [00:02<00:03, 11.94it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01584 0.007846 0.002134 22 640: 45% 34/75 [00:03<00:03, 11.94it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01582 0.00778 0.00208 27 640: 48% 36/75 [00:03<00:03, 11.94it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01586 0.007801 0.002194 37 640: 48% 36/75 [00:03<00:03, 11.94it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01565 0.007742 0.002139 22 640: 51% 38/75 [00:03<00:02, 12.46it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01574 0.007758 0.002119 35 640: 51% 38/75 [00:03<00:02, 12.46it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01578 0.007716 0.002074 23 640: 53% 40/75 [00:03<00:02, 12.17it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01578 0.007699 0.002032 34 640: 53% 40/75 [00:03<00:02, 12.17it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01577 0.007745 0.001997 35 640: 56% 42/75 [00:03<00:02, 12.26it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01585 0.007831 0.001979 34 640: 56% 42/75 [00:03<00:02, 12.26it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01582 0.007828 0.001941 36 640: 59% 44/75 [00:03<00:02, 11.83it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01579 0.007819 0.001939 34 640: 59% 44/75 [00:03<00:02, 11.83it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01581 0.007791 0.001963 28 640: 61% 46/75 [00:03<00:02, 11.88it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01594 0.007795 0.001934 32 640: 61% 46/75 [00:04<00:02, 11.88it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01586 0.007745 0.001897 25 640: 64% 48/75 [00:04<00:02, 11.65it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01587 0.007764 0.001874 33 640: 64% 48/75 [00:04<00:02, 11.65it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.016 0.007745 0.001914 28 640: 67% 50/75 [00:04<00:02, 12.05it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01626 0.007735 0.001919 30 640: 67% 50/75 [00:04<00:02, 12.05it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01636 0.007717 0.001889 22 640: 69% 52/75 [00:04<00:01, 11.91it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01632 0.007702 0.00186 29 640: 69% 52/75 [00:04<00:01, 11.91it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01634 0.007733 0.00183 39 640: 72% 54/75 [00:04<00:01, 12.22it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01637 0.007734 0.001802 34 640: 72% 54/75 [00:04<00:01, 12.22it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01632 0.007728 0.001775 34 640: 75% 56/75 [00:04<00:01, 12.17it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01636 0.007767 0.001758 34 640: 75% 56/75 [00:04<00:01, 12.17it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01633 0.007762 0.001792 34 640: 77% 58/75 [00:04<00:01, 12.42it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01637 0.0078 0.001779 42 640: 77% 58/75 [00:05<00:01, 12.42it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01635 0.007791 0.001757 34 640: 80% 60/75 [00:05<00:01, 12.26it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01631 0.007821 0.001744 29 640: 80% 60/75 [00:05<00:01, 12.26it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01638 0.007784 0.001719 29 640: 83% 62/75 [00:05<00:01, 12.60it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.0164 0.007849 0.001734 43 640: 83% 62/75 [00:05<00:01, 12.60it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01633 0.007826 0.00171 25 640: 85% 64/75 [00:05<00:00, 12.34it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01627 0.007858 0.001696 36 640: 85% 64/75 [00:05<00:00, 12.34it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01627 0.007869 0.001707 35 640: 88% 66/75 [00:05<00:00, 12.74it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01643 0.007903 0.001734 36 640: 88% 66/75 [00:05<00:00, 12.74it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01645 0.007896 0.001737 27 640: 91% 68/75 [00:05<00:00, 12.46it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01641 0.007899 0.001727 34 640: 91% 68/75 [00:05<00:00, 12.46it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01644 0.007893 0.001713 26 640: 93% 70/75 [00:05<00:00, 12.18it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01637 0.007884 0.001696 30 640: 93% 70/75 [00:06<00:00, 12.18it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01632 0.007876 0.001674 33 640: 96% 72/75 [00:06<00:00, 11.96it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01625 0.007867 0.001656 26 640: 96% 72/75 [00:06<00:00, 11.96it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.0163 0.007875 0.001651 36 640: 99% 74/75 [00:06<00:00, 12.28it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 64/79 4.62G 0.01627 0.007861 0.001672 37 640: 100% 75/75 [00:06<00:00, 11.81it/s]\n",
+ " Class Images Instances P R mAP50 mAP50-95: 100% 7/7 [00:01<00:00, 5.31it/s]\n",
+ " all 200 204 0.653 0.604 0.597 0.386\n",
+ "\n",
+ " Epoch GPU_mem box_loss obj_loss cls_loss Instances Size\n",
+ " 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.02155 0.00963 0.003527 37 640: 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01708 0.007991 0.001898 28 640: 3% 2/75 [00:00<00:05, 12.42it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01736 0.008578 0.001525 36 640: 3% 2/75 [00:00<00:05, 12.42it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.018 0.009108 0.002123 40 640: 5% 4/75 [00:00<00:05, 11.94it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01818 0.008857 0.002017 24 640: 5% 4/75 [00:00<00:05, 11.94it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01811 0.008962 0.002067 34 640: 8% 6/75 [00:00<00:05, 12.57it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.0181 0.008906 0.001843 35 640: 8% 6/75 [00:00<00:05, 12.57it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01787 0.008793 0.001641 28 640: 11% 8/75 [00:00<00:05, 12.02it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.018 0.008875 0.001501 37 640: 11% 8/75 [00:00<00:05, 12.02it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01797 0.008713 0.001686 29 640: 13% 10/75 [00:00<00:05, 11.37it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01794 0.008883 0.001581 34 640: 13% 10/75 [00:00<00:05, 11.37it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01777 0.008743 0.001643 31 640: 16% 12/75 [00:01<00:05, 11.54it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01736 0.008577 0.00159 28 640: 16% 12/75 [00:01<00:05, 11.54it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01769 0.00843 0.001532 30 640: 19% 14/75 [00:01<00:05, 11.88it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01764 0.008533 0.001549 34 640: 19% 14/75 [00:01<00:05, 11.88it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01747 0.008479 0.001464 37 640: 21% 16/75 [00:01<00:04, 11.83it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01773 0.008407 0.00139 28 640: 21% 16/75 [00:01<00:04, 11.83it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01788 0.008405 0.001352 36 640: 24% 18/75 [00:01<00:04, 12.10it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01773 0.008393 0.001316 32 640: 24% 18/75 [00:01<00:04, 12.10it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01758 0.008323 0.00131 23 640: 27% 20/75 [00:01<00:04, 11.87it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01733 0.008218 0.001256 26 640: 27% 20/75 [00:01<00:04, 11.87it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01729 0.008166 0.001227 34 640: 29% 22/75 [00:01<00:04, 12.23it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01719 0.008107 0.001198 31 640: 29% 22/75 [00:01<00:04, 12.23it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01715 0.008103 0.001169 36 640: 32% 24/75 [00:02<00:04, 12.03it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01708 0.008027 0.001132 28 640: 32% 24/75 [00:02<00:04, 12.03it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01702 0.008053 0.001111 37 640: 35% 26/75 [00:02<00:03, 12.44it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01708 0.007999 0.001079 25 640: 35% 26/75 [00:02<00:03, 12.44it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01704 0.008027 0.001087 38 640: 37% 28/75 [00:02<00:03, 11.96it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01697 0.008037 0.001061 36 640: 37% 28/75 [00:02<00:03, 11.96it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01704 0.008072 0.001033 38 640: 40% 30/75 [00:02<00:03, 11.90it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01714 0.008039 0.001007 28 640: 40% 30/75 [00:02<00:03, 11.90it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01698 0.008043 0.0009809 38 640: 43% 32/75 [00:02<00:03, 11.47it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01691 0.008063 0.0009638 32 640: 43% 32/75 [00:02<00:03, 11.47it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01684 0.007992 0.0009498 29 640: 45% 34/75 [00:02<00:03, 11.89it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01674 0.007952 0.0009387 29 640: 45% 34/75 [00:02<00:03, 11.89it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01679 0.008008 0.0009273 36 640: 48% 36/75 [00:03<00:03, 11.73it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01671 0.008039 0.0009169 39 640: 48% 36/75 [00:03<00:03, 11.73it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01681 0.008103 0.0009383 33 640: 51% 38/75 [00:03<00:03, 12.12it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01681 0.008061 0.0009233 30 640: 51% 38/75 [00:03<00:03, 12.12it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01678 0.00804 0.0009045 35 640: 53% 40/75 [00:03<00:02, 11.82it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01675 0.008059 0.0009709 34 640: 53% 40/75 [00:03<00:02, 11.82it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01675 0.008078 0.0009603 32 640: 56% 42/75 [00:03<00:02, 12.03it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01674 0.008134 0.001018 40 640: 56% 42/75 [00:03<00:02, 12.03it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01668 0.008126 0.001012 32 640: 59% 44/75 [00:03<00:02, 11.84it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01671 0.00811 0.001045 29 640: 59% 44/75 [00:03<00:02, 11.84it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01668 0.008082 0.001056 30 640: 61% 46/75 [00:03<00:02, 12.04it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01667 0.008091 0.001038 40 640: 61% 46/75 [00:03<00:02, 12.04it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01663 0.008102 0.001048 31 640: 64% 48/75 [00:04<00:02, 11.99it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01648 0.008086 0.001036 30 640: 64% 48/75 [00:04<00:02, 11.99it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01643 0.008106 0.001021 38 640: 67% 50/75 [00:04<00:02, 12.42it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01647 0.008118 0.001062 36 640: 67% 50/75 [00:04<00:02, 12.42it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01637 0.008117 0.001045 30 640: 69% 52/75 [00:04<00:01, 12.15it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01665 0.008069 0.001034 25 640: 69% 52/75 [00:04<00:01, 12.15it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01661 0.008069 0.00105 33 640: 72% 54/75 [00:04<00:01, 12.13it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01662 0.008036 0.001044 29 640: 72% 54/75 [00:04<00:01, 12.13it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01669 0.008044 0.001048 36 640: 75% 56/75 [00:04<00:01, 11.90it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01666 0.008012 0.001074 28 640: 75% 56/75 [00:04<00:01, 11.90it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01666 0.008023 0.001062 33 640: 77% 58/75 [00:04<00:01, 12.24it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01659 0.008021 0.001048 34 640: 77% 58/75 [00:04<00:01, 12.24it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01652 0.008018 0.001032 38 640: 80% 60/75 [00:05<00:01, 11.69it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01647 0.00805 0.00102 41 640: 80% 60/75 [00:05<00:01, 11.69it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01651 0.008051 0.001015 29 640: 83% 62/75 [00:05<00:01, 11.92it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01658 0.008062 0.00103 27 640: 83% 62/75 [00:05<00:01, 11.92it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01664 0.008063 0.001044 33 640: 85% 64/75 [00:05<00:00, 11.60it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01658 0.00806 0.001034 29 640: 85% 64/75 [00:05<00:00, 11.60it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01654 0.008028 0.001025 24 640: 88% 66/75 [00:05<00:00, 11.92it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01652 0.008016 0.001012 29 640: 88% 66/75 [00:05<00:00, 11.92it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01662 0.008011 0.001003 28 640: 91% 68/75 [00:05<00:00, 11.27it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.0166 0.008014 0.0009955 37 640: 91% 68/75 [00:05<00:00, 11.27it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01661 0.008023 0.0009855 31 640: 93% 70/75 [00:05<00:00, 11.74it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01666 0.008027 0.0009777 34 640: 93% 70/75 [00:05<00:00, 11.74it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01678 0.008034 0.0009766 35 640: 96% 72/75 [00:06<00:00, 11.10it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01676 0.008028 0.0009664 35 640: 96% 72/75 [00:06<00:00, 11.10it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01675 0.008029 0.0009698 38 640: 99% 74/75 [00:06<00:00, 11.29it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 65/79 4.62G 0.01676 0.008059 0.001025 39 640: 100% 75/75 [00:06<00:00, 11.85it/s]\n",
+ " Class Images Instances P R mAP50 mAP50-95: 100% 7/7 [00:01<00:00, 5.07it/s]\n",
+ " all 200 204 0.587 0.599 0.6 0.396\n",
+ "\n",
+ " Epoch GPU_mem box_loss obj_loss cls_loss Instances Size\n",
+ " 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01338 0.006022 0.0008983 26 640: 1% 1/75 [00:00<00:08, 9.14it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01263 0.006351 0.0006072 35 640: 1% 1/75 [00:00<00:08, 9.14it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01397 0.007551 0.0005677 42 640: 4% 3/75 [00:00<00:06, 11.24it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01515 0.007354 0.0006977 30 640: 4% 3/75 [00:00<00:06, 11.24it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01496 0.007352 0.0006264 31 640: 7% 5/75 [00:00<00:06, 11.39it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01563 0.008098 0.0007048 38 640: 7% 5/75 [00:00<00:06, 11.39it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01595 0.008758 0.001051 45 640: 9% 7/75 [00:00<00:05, 11.74it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.0158 0.008502 0.001028 27 640: 9% 7/75 [00:00<00:05, 11.74it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01567 0.008356 0.0009356 32 640: 12% 9/75 [00:00<00:06, 10.94it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01596 0.008107 0.0008641 33 640: 12% 9/75 [00:00<00:06, 10.94it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01743 0.00802 0.0008256 25 640: 15% 11/75 [00:00<00:05, 11.30it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01732 0.007983 0.0009097 32 640: 15% 11/75 [00:01<00:05, 11.30it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01848 0.007963 0.000907 27 640: 17% 13/75 [00:01<00:05, 10.62it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.0178 0.007779 0.0008494 24 640: 17% 13/75 [00:01<00:05, 10.62it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01804 0.007909 0.000841 33 640: 20% 15/75 [00:01<00:05, 10.79it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01804 0.007878 0.0008588 31 640: 20% 15/75 [00:01<00:05, 10.79it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01811 0.007994 0.0008432 36 640: 23% 17/75 [00:01<00:05, 10.45it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01812 0.008037 0.0008559 35 640: 23% 17/75 [00:01<00:05, 10.45it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.018 0.008053 0.000858 33 640: 25% 19/75 [00:01<00:05, 10.79it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01788 0.008023 0.001535 31 640: 25% 19/75 [00:01<00:05, 10.79it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01786 0.008068 0.0015 40 640: 28% 21/75 [00:01<00:05, 10.68it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01785 0.008085 0.001509 39 640: 28% 21/75 [00:02<00:05, 10.68it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01815 0.00804 0.001596 30 640: 31% 23/75 [00:02<00:04, 11.10it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01815 0.008091 0.001763 38 640: 31% 23/75 [00:02<00:04, 11.10it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01793 0.007999 0.001713 29 640: 33% 25/75 [00:02<00:04, 10.78it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01783 0.007951 0.001654 30 640: 33% 25/75 [00:02<00:04, 10.78it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01782 0.007928 0.001903 28 640: 36% 27/75 [00:02<00:04, 11.15it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01769 0.007957 0.001844 32 640: 36% 27/75 [00:02<00:04, 11.15it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01814 0.00795 0.001838 29 640: 39% 29/75 [00:02<00:04, 11.23it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01813 0.00803 0.001803 41 640: 39% 29/75 [00:02<00:04, 11.23it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01802 0.008032 0.001761 28 640: 41% 31/75 [00:02<00:03, 11.75it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01796 0.007939 0.001722 24 640: 41% 31/75 [00:02<00:03, 11.75it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01786 0.007912 0.001718 36 640: 44% 33/75 [00:02<00:03, 11.48it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01775 0.007831 0.001698 27 640: 44% 33/75 [00:03<00:03, 11.48it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01798 0.007828 0.001691 23 640: 47% 35/75 [00:03<00:03, 11.28it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01801 0.007793 0.001656 29 640: 47% 35/75 [00:03<00:03, 11.28it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01798 0.007819 0.001628 31 640: 49% 37/75 [00:03<00:03, 11.01it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01789 0.007765 0.001589 23 640: 49% 37/75 [00:03<00:03, 11.01it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01765 0.00775 0.001566 32 640: 52% 39/75 [00:03<00:03, 11.37it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01756 0.007716 0.001533 26 640: 52% 39/75 [00:03<00:03, 11.37it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01746 0.00769 0.0015 26 640: 55% 41/75 [00:03<00:03, 10.99it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01739 0.007682 0.001472 28 640: 55% 41/75 [00:03<00:03, 10.99it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01744 0.007656 0.001459 27 640: 57% 43/75 [00:03<00:02, 11.47it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.0174 0.007633 0.001431 26 640: 57% 43/75 [00:03<00:02, 11.47it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01732 0.007619 0.001408 26 640: 60% 45/75 [00:04<00:02, 11.31it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01736 0.007602 0.0014 27 640: 60% 45/75 [00:04<00:02, 11.31it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01729 0.007572 0.00139 23 640: 63% 47/75 [00:04<00:02, 11.74it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01723 0.007574 0.001382 34 640: 63% 47/75 [00:04<00:02, 11.74it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01721 0.007578 0.001392 33 640: 65% 49/75 [00:04<00:02, 11.63it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01726 0.007633 0.001402 33 640: 65% 49/75 [00:04<00:02, 11.63it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01719 0.007648 0.001379 38 640: 68% 51/75 [00:04<00:02, 11.83it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01715 0.007649 0.001375 33 640: 68% 51/75 [00:04<00:02, 11.83it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01716 0.007665 0.00136 34 640: 71% 53/75 [00:04<00:01, 11.63it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01721 0.007679 0.001354 34 640: 71% 53/75 [00:04<00:01, 11.63it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01712 0.007688 0.001332 36 640: 73% 55/75 [00:04<00:01, 11.97it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01699 0.007627 0.001312 23 640: 73% 55/75 [00:04<00:01, 11.97it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01693 0.007635 0.001294 39 640: 76% 57/75 [00:05<00:01, 11.66it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01692 0.007627 0.001275 34 640: 76% 57/75 [00:05<00:01, 11.66it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01687 0.007655 0.001264 38 640: 79% 59/75 [00:05<00:01, 12.14it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01697 0.007661 0.001254 32 640: 79% 59/75 [00:05<00:01, 12.14it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01702 0.007643 0.00125 29 640: 81% 61/75 [00:05<00:01, 12.00it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01699 0.007693 0.001237 37 640: 81% 61/75 [00:05<00:01, 12.00it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01699 0.007684 0.001221 36 640: 84% 63/75 [00:05<00:00, 12.25it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01696 0.007728 0.001208 41 640: 84% 63/75 [00:05<00:00, 12.25it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01694 0.007779 0.001194 44 640: 87% 65/75 [00:05<00:00, 11.85it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01696 0.00777 0.001192 29 640: 87% 65/75 [00:05<00:00, 11.85it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01692 0.007749 0.001185 27 640: 89% 67/75 [00:05<00:00, 12.28it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01688 0.007753 0.00117 34 640: 89% 67/75 [00:05<00:00, 12.28it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01682 0.007733 0.001161 30 640: 92% 69/75 [00:06<00:00, 11.91it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01685 0.007784 0.00115 40 640: 92% 69/75 [00:06<00:00, 11.91it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01695 0.007854 0.001144 34 640: 95% 71/75 [00:06<00:00, 11.63it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01685 0.007828 0.001142 33 640: 95% 71/75 [00:06<00:00, 11.63it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01684 0.007908 0.00113 45 640: 97% 73/75 [00:06<00:00, 11.69it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.0168 0.007897 0.001144 31 640: 97% 73/75 [00:06<00:00, 11.69it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 66/79 4.62G 0.01684 0.007903 0.001137 35 640: 100% 75/75 [00:06<00:00, 11.43it/s]\n",
+ " Class Images Instances P R mAP50 mAP50-95: 100% 7/7 [00:01<00:00, 5.31it/s]\n",
+ " all 200 204 0.636 0.583 0.604 0.382\n",
+ "\n",
+ " Epoch GPU_mem box_loss obj_loss cls_loss Instances Size\n",
+ " 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01643 0.008876 0.0001598 32 640: 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01549 0.008049 0.0006102 30 640: 3% 2/75 [00:00<00:06, 11.94it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01747 0.007375 0.0004928 28 640: 3% 2/75 [00:00<00:06, 11.94it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01751 0.007835 0.0006464 42 640: 5% 4/75 [00:00<00:05, 12.27it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01821 0.008321 0.0009175 33 640: 5% 4/75 [00:00<00:05, 12.27it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01856 0.008749 0.0008424 39 640: 8% 6/75 [00:00<00:05, 12.03it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.0181 0.008583 0.00116 31 640: 8% 6/75 [00:00<00:05, 12.03it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01839 0.008561 0.002208 32 640: 11% 8/75 [00:00<00:05, 11.82it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01808 0.008687 0.001997 40 640: 11% 8/75 [00:00<00:05, 11.82it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01935 0.008724 0.002258 33 640: 13% 10/75 [00:00<00:05, 11.38it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01898 0.008566 0.002078 28 640: 13% 10/75 [00:00<00:05, 11.38it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.0196 0.00836 0.001987 24 640: 16% 12/75 [00:01<00:05, 12.00it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01908 0.008318 0.001887 33 640: 16% 12/75 [00:01<00:05, 12.00it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.019 0.008324 0.001831 32 640: 19% 14/75 [00:01<00:05, 11.95it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01872 0.008231 0.001717 29 640: 19% 14/75 [00:01<00:05, 11.95it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01893 0.008321 0.001642 37 640: 21% 16/75 [00:01<00:04, 12.27it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01866 0.008428 0.001722 43 640: 21% 16/75 [00:01<00:04, 12.27it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01859 0.008334 0.001708 28 640: 24% 18/75 [00:01<00:04, 12.14it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01842 0.008389 0.001639 29 640: 24% 18/75 [00:01<00:04, 12.14it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01836 0.008349 0.00157 37 640: 27% 20/75 [00:01<00:04, 12.21it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.0184 0.008319 0.001742 33 640: 27% 20/75 [00:01<00:04, 12.21it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01848 0.008303 0.001747 25 640: 29% 22/75 [00:01<00:04, 12.07it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01863 0.008247 0.001978 31 640: 29% 22/75 [00:01<00:04, 12.07it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01837 0.008198 0.002075 35 640: 32% 24/75 [00:02<00:04, 10.80it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.0185 0.008277 0.002077 32 640: 32% 24/75 [00:02<00:04, 10.80it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01838 0.00821 0.002057 25 640: 35% 26/75 [00:02<00:04, 10.69it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.0183 0.008158 0.002037 27 640: 35% 26/75 [00:02<00:04, 10.69it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01811 0.0081 0.001986 32 640: 37% 28/75 [00:02<00:04, 11.19it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01799 0.008043 0.001924 31 640: 37% 28/75 [00:02<00:04, 11.19it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01794 0.007983 0.001867 30 640: 40% 30/75 [00:02<00:04, 11.20it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01796 0.008029 0.001841 37 640: 40% 30/75 [00:02<00:04, 11.20it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01788 0.007966 0.001811 30 640: 43% 32/75 [00:02<00:03, 11.38it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01786 0.008014 0.001775 43 640: 43% 32/75 [00:02<00:03, 11.38it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01773 0.008027 0.001729 39 640: 45% 34/75 [00:02<00:03, 10.86it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01761 0.008005 0.001738 39 640: 45% 34/75 [00:03<00:03, 10.86it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01745 0.008027 0.001702 29 640: 48% 36/75 [00:03<00:03, 11.45it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01751 0.007986 0.001663 28 640: 48% 36/75 [00:03<00:03, 11.45it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01762 0.007958 0.001643 30 640: 51% 38/75 [00:03<00:03, 11.56it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01749 0.007981 0.001605 42 640: 51% 38/75 [00:03<00:03, 11.56it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01737 0.007995 0.001569 37 640: 53% 40/75 [00:03<00:02, 11.91it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01731 0.008076 0.001543 42 640: 53% 40/75 [00:03<00:02, 11.91it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01727 0.008085 0.001511 36 640: 56% 42/75 [00:03<00:02, 11.77it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01724 0.008075 0.00148 34 640: 56% 42/75 [00:03<00:02, 11.77it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01721 0.008042 0.001454 29 640: 59% 44/75 [00:03<00:02, 12.14it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01716 0.008058 0.001427 36 640: 59% 44/75 [00:03<00:02, 12.14it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01719 0.008094 0.001421 36 640: 61% 46/75 [00:03<00:02, 12.06it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01718 0.008176 0.001426 41 640: 61% 46/75 [00:04<00:02, 12.06it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01714 0.008162 0.001638 27 640: 64% 48/75 [00:04<00:02, 12.28it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.0171 0.008145 0.001614 38 640: 64% 48/75 [00:04<00:02, 12.28it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01706 0.008121 0.001591 31 640: 67% 50/75 [00:04<00:02, 12.20it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01712 0.008147 0.001568 34 640: 67% 50/75 [00:04<00:02, 12.20it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01712 0.008163 0.001985 32 640: 69% 52/75 [00:04<00:01, 12.39it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.0172 0.008144 0.001966 28 640: 69% 52/75 [00:04<00:01, 12.39it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01718 0.008135 0.001946 26 640: 72% 54/75 [00:04<00:01, 12.15it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.0171 0.008116 0.00192 36 640: 72% 54/75 [00:04<00:01, 12.15it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01704 0.008121 0.001905 27 640: 75% 56/75 [00:04<00:01, 12.47it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.017 0.008111 0.001876 32 640: 75% 56/75 [00:04<00:01, 12.47it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01702 0.008071 0.001848 29 640: 77% 58/75 [00:04<00:01, 11.97it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01694 0.008051 0.001819 32 640: 77% 58/75 [00:04<00:01, 11.97it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01704 0.008007 0.001793 26 640: 80% 60/75 [00:05<00:01, 12.28it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01697 0.008031 0.001778 33 640: 80% 60/75 [00:05<00:01, 12.28it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01694 0.008045 0.001755 39 640: 83% 62/75 [00:05<00:01, 11.91it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01695 0.008037 0.001979 34 640: 83% 62/75 [00:05<00:01, 11.91it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.0169 0.008006 0.001951 25 640: 85% 64/75 [00:05<00:00, 11.52it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01686 0.00801 0.001934 35 640: 85% 64/75 [00:05<00:00, 11.52it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01687 0.007983 0.00191 30 640: 88% 66/75 [00:05<00:00, 11.52it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01687 0.008003 0.001896 34 640: 88% 66/75 [00:05<00:00, 11.52it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01689 0.007972 0.001873 27 640: 91% 68/75 [00:05<00:00, 11.69it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01693 0.007994 0.001868 34 640: 91% 68/75 [00:05<00:00, 11.69it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.0169 0.007997 0.001847 30 640: 93% 70/75 [00:05<00:00, 11.56it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01689 0.007991 0.001824 33 640: 93% 70/75 [00:06<00:00, 11.56it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01685 0.007999 0.001826 34 640: 96% 72/75 [00:06<00:00, 11.59it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01682 0.007993 0.001804 34 640: 96% 72/75 [00:06<00:00, 11.59it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01687 0.007996 0.001783 34 640: 99% 74/75 [00:06<00:00, 11.26it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 67/79 4.62G 0.01689 0.007973 0.002107 28 640: 100% 75/75 [00:06<00:00, 11.72it/s]\n",
+ " Class Images Instances P R mAP50 mAP50-95: 100% 7/7 [00:01<00:00, 5.18it/s]\n",
+ " all 200 204 0.649 0.537 0.613 0.396\n",
+ "\n",
+ " Epoch GPU_mem box_loss obj_loss cls_loss Instances Size\n",
+ " 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.0177 0.01056 0.001571 42 640: 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01568 0.009056 0.0009856 32 640: 3% 2/75 [00:00<00:05, 12.37it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01471 0.008538 0.0007068 32 640: 3% 2/75 [00:00<00:05, 12.37it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01436 0.008182 0.0007976 34 640: 5% 4/75 [00:00<00:06, 10.94it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01446 0.008064 0.0006741 35 640: 5% 4/75 [00:00<00:06, 10.94it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01422 0.007884 0.0005874 33 640: 8% 6/75 [00:00<00:05, 11.84it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01411 0.007601 0.0006099 26 640: 8% 6/75 [00:00<00:05, 11.84it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01436 0.007685 0.0006818 30 640: 11% 8/75 [00:00<00:05, 11.33it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01428 0.00785 0.0006433 36 640: 11% 8/75 [00:00<00:05, 11.33it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01363 0.007728 0.0006586 28 640: 13% 10/75 [00:00<00:05, 12.04it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01376 0.007868 0.0006691 37 640: 13% 10/75 [00:00<00:05, 12.04it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01382 0.008008 0.0006496 33 640: 16% 12/75 [00:01<00:05, 11.17it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01425 0.008057 0.0006551 32 640: 16% 12/75 [00:01<00:05, 11.17it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01408 0.008011 0.0006337 32 640: 19% 14/75 [00:01<00:05, 11.50it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01435 0.007911 0.0006243 31 640: 19% 14/75 [00:01<00:05, 11.50it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01428 0.00786 0.000598 35 640: 21% 16/75 [00:01<00:05, 10.96it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01427 0.007829 0.0006247 35 640: 21% 16/75 [00:01<00:05, 10.96it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01406 0.00777 0.0005968 35 640: 24% 18/75 [00:01<00:04, 11.72it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.0142 0.007716 0.0005775 28 640: 24% 18/75 [00:01<00:04, 11.72it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01436 0.007707 0.0005893 31 640: 27% 20/75 [00:01<00:04, 11.68it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01461 0.00792 0.0007131 37 640: 27% 20/75 [00:01<00:04, 11.68it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.0147 0.007916 0.0006972 34 640: 29% 22/75 [00:01<00:04, 11.97it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01458 0.007842 0.000678 31 640: 29% 22/75 [00:02<00:04, 11.97it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01475 0.007863 0.0007336 34 640: 32% 24/75 [00:02<00:04, 11.38it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01476 0.00782 0.0007155 31 640: 32% 24/75 [00:02<00:04, 11.38it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01483 0.007947 0.0007028 42 640: 35% 26/75 [00:02<00:04, 11.58it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01478 0.007952 0.0007438 31 640: 35% 26/75 [00:02<00:04, 11.58it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01481 0.007928 0.0007279 28 640: 37% 28/75 [00:02<00:04, 11.08it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01482 0.007934 0.000713 31 640: 37% 28/75 [00:02<00:04, 11.08it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01485 0.007937 0.0007369 34 640: 40% 30/75 [00:02<00:04, 11.05it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.0153 0.007925 0.0007206 28 640: 40% 30/75 [00:02<00:04, 11.05it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.0154 0.007942 0.0009731 35 640: 43% 32/75 [00:02<00:03, 10.86it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01532 0.007918 0.0009484 34 640: 43% 32/75 [00:02<00:03, 10.86it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01527 0.007921 0.0009252 31 640: 45% 34/75 [00:02<00:03, 11.22it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01536 0.00793 0.0009103 36 640: 45% 34/75 [00:03<00:03, 11.22it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01534 0.007895 0.0009048 29 640: 48% 36/75 [00:03<00:03, 11.10it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01551 0.007868 0.0009155 31 640: 48% 36/75 [00:03<00:03, 11.10it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01548 0.007842 0.0009198 28 640: 51% 38/75 [00:03<00:03, 11.07it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01561 0.007819 0.000916 31 640: 51% 38/75 [00:03<00:03, 11.07it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01562 0.007868 0.0009176 33 640: 53% 40/75 [00:03<00:03, 10.86it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01585 0.007858 0.0009168 27 640: 53% 40/75 [00:03<00:03, 10.86it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01585 0.007884 0.0009137 37 640: 56% 42/75 [00:03<00:03, 10.96it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01587 0.007863 0.0008971 29 640: 56% 42/75 [00:03<00:03, 10.96it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01608 0.007886 0.0009022 31 640: 59% 44/75 [00:03<00:02, 10.98it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01614 0.007974 0.0009031 36 640: 59% 44/75 [00:03<00:02, 10.98it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01611 0.007915 0.0008876 24 640: 61% 46/75 [00:04<00:02, 11.28it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01603 0.00791 0.0008761 34 640: 61% 46/75 [00:04<00:02, 11.28it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01612 0.007928 0.0008901 36 640: 64% 48/75 [00:04<00:02, 11.27it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.0162 0.007937 0.0008916 32 640: 64% 48/75 [00:04<00:02, 11.27it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01623 0.007945 0.0008832 32 640: 67% 50/75 [00:04<00:02, 11.48it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01619 0.007955 0.0008694 37 640: 67% 50/75 [00:04<00:02, 11.48it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01618 0.008011 0.0008668 37 640: 69% 52/75 [00:04<00:02, 10.94it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.0162 0.008018 0.0008546 36 640: 69% 52/75 [00:04<00:02, 10.94it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01613 0.007962 0.0008516 28 640: 72% 54/75 [00:04<00:01, 10.92it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01616 0.007956 0.000843 29 640: 72% 54/75 [00:04<00:01, 10.92it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01616 0.007942 0.0008317 29 640: 75% 56/75 [00:04<00:01, 10.82it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01617 0.00793 0.0008245 31 640: 75% 56/75 [00:05<00:01, 10.82it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01615 0.007956 0.0008154 37 640: 77% 58/75 [00:05<00:01, 11.13it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01608 0.007935 0.0008131 32 640: 77% 58/75 [00:05<00:01, 11.13it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01609 0.007946 0.0008061 37 640: 80% 60/75 [00:05<00:01, 11.21it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01612 0.007987 0.0009014 37 640: 80% 60/75 [00:05<00:01, 11.21it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01626 0.00804 0.00111 48 640: 83% 62/75 [00:05<00:01, 11.66it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01626 0.008036 0.001099 31 640: 83% 62/75 [00:05<00:01, 11.66it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01621 0.008009 0.001144 31 640: 85% 64/75 [00:05<00:00, 11.27it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01613 0.007976 0.001173 28 640: 85% 64/75 [00:05<00:00, 11.27it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.0161 0.007957 0.001158 30 640: 88% 66/75 [00:05<00:00, 11.40it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01609 0.00793 0.001151 24 640: 88% 66/75 [00:05<00:00, 11.40it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01606 0.007894 0.001188 24 640: 91% 68/75 [00:06<00:00, 10.87it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01602 0.007867 0.001173 24 640: 91% 68/75 [00:06<00:00, 10.87it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01601 0.007858 0.001161 26 640: 93% 70/75 [00:06<00:00, 11.39it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01597 0.007858 0.001149 31 640: 93% 70/75 [00:06<00:00, 11.39it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01606 0.007896 0.001146 35 640: 96% 72/75 [00:06<00:00, 11.58it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01605 0.007909 0.001169 33 640: 96% 72/75 [00:06<00:00, 11.58it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.016 0.007904 0.001158 30 640: 99% 74/75 [00:06<00:00, 11.36it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 68/79 4.62G 0.01595 0.007897 0.001146 31 640: 100% 75/75 [00:06<00:00, 11.24it/s]\n",
+ " Class Images Instances P R mAP50 mAP50-95: 100% 7/7 [00:01<00:00, 5.40it/s]\n",
+ " all 200 204 0.669 0.526 0.601 0.383\n",
+ "\n",
+ " Epoch GPU_mem box_loss obj_loss cls_loss Instances Size\n",
+ " 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01853 0.00776 0.00188 30 640: 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01485 0.007058 0.001085 29 640: 3% 2/75 [00:00<00:05, 13.76it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01593 0.007311 0.0008807 28 640: 3% 2/75 [00:00<00:05, 13.76it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01652 0.007288 0.0007196 32 640: 5% 4/75 [00:00<00:05, 11.84it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01623 0.006904 0.0006383 23 640: 5% 4/75 [00:00<00:05, 11.84it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01665 0.0067 0.0005561 31 640: 8% 6/75 [00:00<00:05, 12.01it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01679 0.006818 0.00111 27 640: 8% 6/75 [00:00<00:05, 12.01it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01714 0.006965 0.001003 28 640: 11% 8/75 [00:00<00:05, 11.65it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01743 0.007051 0.001052 26 640: 11% 8/75 [00:00<00:05, 11.65it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01706 0.007146 0.0009926 38 640: 13% 10/75 [00:00<00:05, 12.18it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01659 0.0072 0.0009149 36 640: 13% 10/75 [00:00<00:05, 12.18it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01678 0.007295 0.0008621 31 640: 16% 12/75 [00:00<00:05, 12.03it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01668 0.007347 0.0008325 33 640: 16% 12/75 [00:01<00:05, 12.03it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01711 0.007315 0.0008371 30 640: 19% 14/75 [00:01<00:04, 12.44it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01675 0.007431 0.0009116 34 640: 19% 14/75 [00:01<00:04, 12.44it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01683 0.007386 0.0009959 33 640: 21% 16/75 [00:01<00:04, 12.11it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01666 0.007442 0.001056 30 640: 21% 16/75 [00:01<00:04, 12.11it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01682 0.007471 0.001423 32 640: 24% 18/75 [00:01<00:04, 12.26it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01667 0.007419 0.001357 26 640: 24% 18/75 [00:01<00:04, 12.26it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01659 0.007575 0.001299 41 640: 27% 20/75 [00:01<00:04, 11.53it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01652 0.007682 0.00127 40 640: 27% 20/75 [00:01<00:04, 11.53it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01633 0.007678 0.001233 36 640: 29% 22/75 [00:01<00:04, 11.83it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01651 0.007682 0.001241 31 640: 29% 22/75 [00:01<00:04, 11.83it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01648 0.007651 0.001203 30 640: 32% 24/75 [00:02<00:04, 11.39it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.0167 0.007763 0.001247 36 640: 32% 24/75 [00:02<00:04, 11.39it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01685 0.007752 0.001209 31 640: 35% 26/75 [00:02<00:04, 11.82it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01692 0.007765 0.001176 35 640: 35% 26/75 [00:02<00:04, 11.82it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.0168 0.007704 0.001139 27 640: 37% 28/75 [00:02<00:04, 11.59it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01685 0.007755 0.001139 31 640: 37% 28/75 [00:02<00:04, 11.59it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.0168 0.007717 0.001115 28 640: 40% 30/75 [00:02<00:03, 11.59it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01681 0.007831 0.0011 38 640: 40% 30/75 [00:02<00:03, 11.59it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01675 0.007846 0.001143 31 640: 43% 32/75 [00:02<00:03, 11.16it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01675 0.007847 0.001115 35 640: 43% 32/75 [00:02<00:03, 11.16it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01664 0.007878 0.001094 38 640: 45% 34/75 [00:02<00:03, 11.66it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.0167 0.00788 0.00107 24 640: 45% 34/75 [00:02<00:03, 11.66it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01688 0.007906 0.001064 40 640: 48% 36/75 [00:03<00:03, 11.60it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01671 0.0079 0.00104 37 640: 48% 36/75 [00:03<00:03, 11.60it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01669 0.007873 0.001107 31 640: 51% 38/75 [00:03<00:03, 11.67it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01649 0.007853 0.001116 29 640: 51% 38/75 [00:03<00:03, 11.67it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01652 0.007917 0.001171 36 640: 53% 40/75 [00:03<00:02, 11.72it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01635 0.007853 0.001148 24 640: 53% 40/75 [00:03<00:02, 11.72it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01635 0.007849 0.001151 30 640: 56% 42/75 [00:03<00:02, 12.01it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01624 0.007822 0.001129 29 640: 56% 42/75 [00:03<00:02, 12.01it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01625 0.007887 0.001114 37 640: 59% 44/75 [00:03<00:02, 11.83it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01623 0.00791 0.001113 29 640: 59% 44/75 [00:03<00:02, 11.83it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01617 0.007925 0.001101 36 640: 61% 46/75 [00:03<00:02, 11.91it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01612 0.007913 0.001105 31 640: 61% 46/75 [00:03<00:02, 11.91it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01606 0.007913 0.001089 38 640: 64% 48/75 [00:04<00:02, 11.65it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01601 0.007828 0.00107 21 640: 64% 48/75 [00:04<00:02, 11.65it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01597 0.007863 0.001055 36 640: 67% 50/75 [00:04<00:02, 12.13it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01612 0.007861 0.001508 32 640: 67% 50/75 [00:04<00:02, 12.13it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01613 0.007819 0.0015 19 640: 69% 52/75 [00:04<00:01, 11.93it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01636 0.007773 0.001522 24 640: 69% 52/75 [00:04<00:01, 11.93it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01637 0.007808 0.001502 35 640: 72% 54/75 [00:04<00:01, 11.87it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.0165 0.007816 0.001556 34 640: 72% 54/75 [00:04<00:01, 11.87it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01651 0.00782 0.001531 30 640: 75% 56/75 [00:04<00:01, 11.30it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01646 0.007821 0.001511 32 640: 75% 56/75 [00:04<00:01, 11.30it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01649 0.00787 0.001521 39 640: 77% 58/75 [00:04<00:01, 11.78it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01641 0.007862 0.001499 35 640: 77% 58/75 [00:04<00:01, 11.78it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01639 0.007846 0.001495 29 640: 80% 60/75 [00:05<00:01, 11.83it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01633 0.00783 0.001547 26 640: 80% 60/75 [00:05<00:01, 11.83it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.0163 0.007855 0.001528 34 640: 83% 62/75 [00:05<00:01, 12.04it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01625 0.007852 0.001507 33 640: 83% 62/75 [00:05<00:01, 12.04it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01628 0.007853 0.001492 30 640: 85% 64/75 [00:05<00:00, 11.79it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01621 0.007844 0.001521 32 640: 85% 64/75 [00:05<00:00, 11.79it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01619 0.007877 0.00151 42 640: 88% 66/75 [00:05<00:00, 12.26it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01616 0.00791 0.001496 48 640: 88% 66/75 [00:05<00:00, 12.26it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01614 0.007877 0.001479 30 640: 91% 68/75 [00:05<00:00, 12.07it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01608 0.007846 0.001468 27 640: 91% 68/75 [00:05<00:00, 12.07it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01611 0.007869 0.001482 36 640: 93% 70/75 [00:05<00:00, 12.42it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01617 0.007891 0.001484 31 640: 93% 70/75 [00:05<00:00, 12.42it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01619 0.007909 0.00151 37 640: 96% 72/75 [00:06<00:00, 11.81it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01619 0.007895 0.00154 30 640: 96% 72/75 [00:06<00:00, 11.81it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01632 0.007882 0.001524 28 640: 99% 74/75 [00:06<00:00, 11.63it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 69/79 4.62G 0.01636 0.007888 0.001508 34 640: 100% 75/75 [00:06<00:00, 11.85it/s]\n",
+ " Class Images Instances P R mAP50 mAP50-95: 100% 7/7 [00:01<00:00, 5.34it/s]\n",
+ " all 200 204 0.616 0.552 0.584 0.382\n",
+ "\n",
+ " Epoch GPU_mem box_loss obj_loss cls_loss Instances Size\n",
+ " 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01642 0.007555 0.0006932 27 640: 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01522 0.007694 0.0004944 32 640: 3% 2/75 [00:00<00:06, 11.48it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01575 0.007149 0.001067 27 640: 3% 2/75 [00:00<00:06, 11.48it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01647 0.00729 0.0008972 26 640: 5% 4/75 [00:00<00:05, 11.91it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01603 0.007739 0.0007552 41 640: 5% 4/75 [00:00<00:05, 11.91it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01844 0.007951 0.0007007 34 640: 8% 6/75 [00:00<00:06, 10.83it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01755 0.00775 0.0006244 30 640: 8% 6/75 [00:00<00:06, 10.83it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01711 0.007659 0.0008908 34 640: 11% 8/75 [00:00<00:05, 11.31it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01702 0.007664 0.0009127 30 640: 11% 8/75 [00:00<00:05, 11.31it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01711 0.007954 0.001 42 640: 13% 10/75 [00:00<00:05, 11.30it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01709 0.007962 0.0009468 32 640: 13% 10/75 [00:00<00:05, 11.30it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01675 0.007982 0.0008928 42 640: 16% 12/75 [00:01<00:05, 11.91it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01666 0.007917 0.0008744 31 640: 16% 12/75 [00:01<00:05, 11.91it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01639 0.007868 0.001057 35 640: 19% 14/75 [00:01<00:05, 11.96it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01607 0.007781 0.001018 27 640: 19% 14/75 [00:01<00:05, 11.96it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01629 0.007678 0.001024 32 640: 21% 16/75 [00:01<00:05, 11.74it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01659 0.007732 0.0009897 35 640: 21% 16/75 [00:01<00:05, 11.74it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.0174 0.007753 0.00154 32 640: 24% 18/75 [00:01<00:04, 11.67it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01734 0.007777 0.001472 33 640: 24% 18/75 [00:01<00:04, 11.67it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.0173 0.00778 0.001412 33 640: 27% 20/75 [00:01<00:04, 12.00it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01714 0.007815 0.001413 30 640: 27% 20/75 [00:01<00:04, 12.00it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01739 0.007776 0.001412 28 640: 29% 22/75 [00:01<00:04, 11.87it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01723 0.007648 0.001368 29 640: 29% 22/75 [00:01<00:04, 11.87it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01715 0.007621 0.001329 27 640: 32% 24/75 [00:02<00:04, 11.75it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01721 0.007637 0.001285 30 640: 32% 24/75 [00:02<00:04, 11.75it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.0171 0.007549 0.001261 33 640: 35% 26/75 [00:02<00:04, 11.47it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01696 0.007584 0.001228 33 640: 35% 26/75 [00:02<00:04, 11.47it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01677 0.007501 0.001189 33 640: 37% 28/75 [00:02<00:04, 11.21it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.0167 0.007498 0.00116 29 640: 37% 28/75 [00:02<00:04, 11.21it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01669 0.007517 0.001167 38 640: 40% 30/75 [00:02<00:04, 10.66it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01661 0.007496 0.00115 28 640: 40% 30/75 [00:02<00:04, 10.66it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01653 0.007479 0.001132 33 640: 43% 32/75 [00:02<00:03, 10.94it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01645 0.007506 0.00113 41 640: 43% 32/75 [00:02<00:03, 10.94it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01648 0.007558 0.001113 33 640: 45% 34/75 [00:03<00:03, 10.67it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01644 0.007567 0.001093 31 640: 45% 34/75 [00:03<00:03, 10.67it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01633 0.007622 0.001075 36 640: 48% 36/75 [00:03<00:03, 10.65it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01626 0.007672 0.001059 36 640: 48% 36/75 [00:03<00:03, 10.65it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01622 0.00767 0.001038 34 640: 51% 38/75 [00:03<00:03, 10.96it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01613 0.007641 0.001081 33 640: 51% 38/75 [00:03<00:03, 10.96it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01622 0.007652 0.001101 33 640: 53% 40/75 [00:03<00:03, 11.45it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01624 0.007712 0.001101 32 640: 53% 40/75 [00:03<00:03, 11.45it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01618 0.007711 0.001079 31 640: 56% 42/75 [00:03<00:02, 11.25it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01613 0.007716 0.00111 33 640: 56% 42/75 [00:03<00:02, 11.25it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01622 0.007724 0.001373 33 640: 59% 44/75 [00:03<00:02, 11.13it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01623 0.007725 0.001383 27 640: 59% 44/75 [00:03<00:02, 11.13it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01619 0.007736 0.001371 39 640: 61% 46/75 [00:04<00:02, 11.09it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01627 0.007735 0.001349 29 640: 61% 46/75 [00:04<00:02, 11.09it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01627 0.007726 0.001334 29 640: 64% 48/75 [00:04<00:02, 11.65it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01623 0.007689 0.001313 27 640: 64% 48/75 [00:04<00:02, 11.65it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01646 0.007669 0.001375 27 640: 67% 50/75 [00:04<00:02, 11.36it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01645 0.007638 0.001353 28 640: 67% 50/75 [00:04<00:02, 11.36it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01638 0.007645 0.001331 38 640: 69% 52/75 [00:04<00:01, 11.57it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.0167 0.007653 0.001312 34 640: 69% 52/75 [00:04<00:01, 11.57it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01664 0.007658 0.001293 30 640: 72% 54/75 [00:04<00:01, 11.61it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01658 0.007636 0.001271 31 640: 72% 54/75 [00:04<00:01, 11.61it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01651 0.007619 0.001253 28 640: 75% 56/75 [00:04<00:01, 11.92it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.0165 0.007618 0.001246 30 640: 75% 56/75 [00:05<00:01, 11.92it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01641 0.007624 0.001227 40 640: 77% 58/75 [00:05<00:01, 11.47it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01649 0.007578 0.001213 27 640: 77% 58/75 [00:05<00:01, 11.47it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01647 0.007587 0.001203 38 640: 80% 60/75 [00:05<00:01, 11.84it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01646 0.007582 0.001195 28 640: 80% 60/75 [00:05<00:01, 11.84it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01646 0.007597 0.001181 37 640: 83% 62/75 [00:05<00:01, 11.63it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.0164 0.007577 0.001181 30 640: 83% 62/75 [00:05<00:01, 11.63it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01637 0.007566 0.001167 29 640: 85% 64/75 [00:05<00:00, 11.72it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01639 0.007568 0.001211 32 640: 85% 64/75 [00:05<00:00, 11.72it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01642 0.007575 0.001198 34 640: 88% 66/75 [00:05<00:00, 11.71it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01642 0.007595 0.001188 35 640: 88% 66/75 [00:05<00:00, 11.71it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01645 0.007561 0.00118 26 640: 91% 68/75 [00:05<00:00, 11.82it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01641 0.007558 0.001165 31 640: 91% 68/75 [00:06<00:00, 11.82it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01639 0.007578 0.001188 35 640: 93% 70/75 [00:06<00:00, 11.54it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01637 0.007569 0.001182 32 640: 93% 70/75 [00:06<00:00, 11.54it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01634 0.007577 0.001169 36 640: 96% 72/75 [00:06<00:00, 11.97it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.0163 0.007571 0.001155 29 640: 96% 72/75 [00:06<00:00, 11.97it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.01629 0.007598 0.001143 39 640: 99% 74/75 [00:06<00:00, 11.88it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 70/79 4.62G 0.0163 0.007609 0.001135 34 640: 100% 75/75 [00:06<00:00, 11.51it/s]\n",
+ " Class Images Instances P R mAP50 mAP50-95: 100% 7/7 [00:01<00:00, 5.48it/s]\n",
+ " all 200 204 0.659 0.57 0.611 0.398\n",
+ "\n",
+ " Epoch GPU_mem box_loss obj_loss cls_loss Instances Size\n",
+ " 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01813 0.008 0.0005129 29 640: 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01764 0.007233 0.0003702 27 640: 3% 2/75 [00:00<00:06, 12.12it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01626 0.007815 0.001534 39 640: 3% 2/75 [00:00<00:06, 12.12it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01626 0.008238 0.001216 36 640: 5% 4/75 [00:00<00:05, 12.67it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01542 0.008026 0.001006 33 640: 5% 4/75 [00:00<00:05, 12.67it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01522 0.007903 0.0008887 33 640: 8% 6/75 [00:00<00:05, 11.68it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01559 0.007899 0.0009101 35 640: 8% 6/75 [00:00<00:05, 11.68it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01535 0.007856 0.0008121 36 640: 11% 8/75 [00:00<00:05, 12.08it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01511 0.007723 0.0007502 32 640: 11% 8/75 [00:00<00:05, 12.08it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01519 0.007489 0.0007044 27 640: 13% 10/75 [00:00<00:05, 11.88it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01551 0.007513 0.0006922 31 640: 13% 10/75 [00:00<00:05, 11.88it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01577 0.007624 0.001161 37 640: 16% 12/75 [00:00<00:05, 12.13it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.0157 0.007855 0.001153 35 640: 16% 12/75 [00:01<00:05, 12.13it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01606 0.007976 0.001116 40 640: 19% 14/75 [00:01<00:05, 12.10it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.0161 0.00812 0.001141 32 640: 19% 14/75 [00:01<00:05, 12.10it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.016 0.008282 0.001184 39 640: 21% 16/75 [00:01<00:04, 12.26it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01632 0.008327 0.001136 32 640: 21% 16/75 [00:01<00:04, 12.26it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01652 0.008232 0.00113 33 640: 24% 18/75 [00:01<00:04, 12.18it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01651 0.008121 0.001096 26 640: 24% 18/75 [00:01<00:04, 12.18it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01642 0.008026 0.001057 28 640: 27% 20/75 [00:01<00:04, 12.35it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01646 0.008091 0.00103 35 640: 27% 20/75 [00:01<00:04, 12.35it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01652 0.007971 0.001002 27 640: 29% 22/75 [00:01<00:04, 12.00it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01665 0.008089 0.001189 37 640: 29% 22/75 [00:01<00:04, 12.00it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01666 0.008193 0.001517 34 640: 32% 24/75 [00:01<00:04, 11.99it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01647 0.008109 0.001473 30 640: 32% 24/75 [00:02<00:04, 11.99it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01641 0.008073 0.001517 27 640: 35% 26/75 [00:02<00:04, 11.60it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01613 0.007998 0.001466 28 640: 35% 26/75 [00:02<00:04, 11.60it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.0162 0.007924 0.001432 26 640: 37% 28/75 [00:02<00:03, 11.92it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01612 0.0079 0.001545 36 640: 37% 28/75 [00:02<00:03, 11.92it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01616 0.00788 0.001525 32 640: 40% 30/75 [00:02<00:03, 11.78it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01607 0.007859 0.001483 33 640: 40% 30/75 [00:02<00:03, 11.78it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01609 0.00794 0.001491 43 640: 43% 32/75 [00:02<00:03, 12.19it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01596 0.007951 0.001454 38 640: 43% 32/75 [00:02<00:03, 12.19it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01588 0.007976 0.001434 39 640: 45% 34/75 [00:02<00:03, 12.12it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01581 0.007996 0.001407 34 640: 45% 34/75 [00:02<00:03, 12.12it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01575 0.007962 0.001392 32 640: 48% 36/75 [00:02<00:03, 12.51it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01594 0.008001 0.001366 38 640: 48% 36/75 [00:03<00:03, 12.51it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01594 0.007957 0.001357 27 640: 51% 38/75 [00:03<00:03, 12.08it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01603 0.007954 0.001349 28 640: 51% 38/75 [00:03<00:03, 12.08it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01594 0.007947 0.001331 34 640: 53% 40/75 [00:03<00:02, 12.25it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.0159 0.007968 0.001338 34 640: 53% 40/75 [00:03<00:02, 12.25it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01582 0.007947 0.001378 29 640: 56% 42/75 [00:03<00:02, 11.74it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01579 0.007975 0.001352 42 640: 56% 42/75 [00:03<00:02, 11.74it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01576 0.007994 0.001325 35 640: 59% 44/75 [00:03<00:02, 12.13it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.0158 0.008032 0.001408 36 640: 59% 44/75 [00:03<00:02, 12.13it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.0159 0.008005 0.001453 30 640: 61% 46/75 [00:03<00:02, 11.88it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01619 0.008036 0.001447 31 640: 61% 46/75 [00:03<00:02, 11.88it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.0163 0.008 0.001424 25 640: 64% 48/75 [00:03<00:02, 12.31it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01625 0.008027 0.001478 32 640: 64% 48/75 [00:04<00:02, 12.31it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01618 0.007999 0.001454 36 640: 67% 50/75 [00:04<00:02, 11.94it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.0163 0.007991 0.001446 32 640: 67% 50/75 [00:04<00:02, 11.94it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01624 0.007961 0.001422 31 640: 69% 52/75 [00:04<00:01, 12.29it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01619 0.00794 0.001398 33 640: 69% 52/75 [00:04<00:01, 12.29it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01613 0.007967 0.001376 37 640: 72% 54/75 [00:04<00:01, 11.94it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.0162 0.007931 0.001358 27 640: 72% 54/75 [00:04<00:01, 11.94it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01624 0.007931 0.001365 28 640: 75% 56/75 [00:04<00:01, 12.23it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01609 0.007907 0.001393 30 640: 75% 56/75 [00:04<00:01, 12.23it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01604 0.007867 0.001372 29 640: 77% 58/75 [00:04<00:01, 12.09it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.016 0.007874 0.001424 34 640: 77% 58/75 [00:04<00:01, 12.09it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01611 0.007894 0.00141 32 640: 80% 60/75 [00:04<00:01, 12.32it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01619 0.007928 0.001407 34 640: 80% 60/75 [00:05<00:01, 12.32it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01617 0.007905 0.001393 30 640: 83% 62/75 [00:05<00:01, 11.95it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01626 0.007901 0.001383 27 640: 83% 62/75 [00:05<00:01, 11.95it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01621 0.007871 0.001373 28 640: 85% 64/75 [00:05<00:00, 12.34it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01613 0.007874 0.001363 37 640: 85% 64/75 [00:05<00:00, 12.34it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01607 0.007844 0.001347 27 640: 88% 66/75 [00:05<00:00, 11.86it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01606 0.007846 0.001374 32 640: 88% 66/75 [00:05<00:00, 11.86it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01612 0.007838 0.001373 32 640: 91% 68/75 [00:05<00:00, 11.96it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01611 0.007827 0.001359 32 640: 91% 68/75 [00:05<00:00, 11.96it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01606 0.007822 0.001348 31 640: 93% 70/75 [00:05<00:00, 11.64it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01608 0.007811 0.001332 34 640: 93% 70/75 [00:05<00:00, 11.64it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01599 0.007788 0.00134 30 640: 96% 72/75 [00:05<00:00, 11.94it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01597 0.007773 0.001327 34 640: 96% 72/75 [00:06<00:00, 11.94it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01596 0.007771 0.001322 28 640: 99% 74/75 [00:06<00:00, 11.02it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 71/79 4.62G 0.01597 0.007794 0.001346 36 640: 100% 75/75 [00:06<00:00, 11.97it/s]\n",
+ " Class Images Instances P R mAP50 mAP50-95: 100% 7/7 [00:01<00:00, 5.45it/s]\n",
+ " all 200 204 0.618 0.583 0.599 0.396\n",
+ "\n",
+ " Epoch GPU_mem box_loss obj_loss cls_loss Instances Size\n",
+ " 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01379 0.006843 0.0003582 26 640: 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01513 0.007587 0.0007164 28 640: 3% 2/75 [00:00<00:05, 13.13it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.0148 0.008154 0.0007301 44 640: 3% 2/75 [00:00<00:05, 13.13it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01422 0.00751 0.0007507 29 640: 5% 4/75 [00:00<00:06, 10.93it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01432 0.007842 0.001621 34 640: 5% 4/75 [00:00<00:06, 10.93it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01414 0.007749 0.001385 38 640: 8% 6/75 [00:00<00:05, 11.68it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01463 0.008091 0.001243 32 640: 8% 6/75 [00:00<00:05, 11.68it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01514 0.008218 0.00113 35 640: 11% 8/75 [00:00<00:06, 10.77it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01502 0.007997 0.001024 27 640: 11% 8/75 [00:00<00:06, 10.77it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01512 0.008 0.001041 29 640: 13% 10/75 [00:00<00:05, 10.91it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01489 0.008003 0.00102 37 640: 13% 10/75 [00:01<00:05, 10.91it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01508 0.008015 0.001036 39 640: 16% 12/75 [00:01<00:06, 10.26it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01573 0.008171 0.001191 39 640: 16% 12/75 [00:01<00:06, 10.26it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01573 0.00828 0.001172 38 640: 19% 14/75 [00:01<00:05, 10.35it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01614 0.008178 0.001126 32 640: 19% 14/75 [00:01<00:05, 10.35it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01637 0.008092 0.001105 33 640: 21% 16/75 [00:01<00:05, 10.25it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01674 0.008063 0.001109 34 640: 21% 16/75 [00:01<00:05, 10.25it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01663 0.008008 0.001176 32 640: 24% 18/75 [00:01<00:05, 11.00it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01666 0.008028 0.00114 32 640: 24% 18/75 [00:01<00:05, 11.00it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01649 0.00794 0.001091 26 640: 27% 20/75 [00:01<00:04, 11.02it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.0164 0.007841 0.001164 32 640: 27% 20/75 [00:01<00:04, 11.02it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01628 0.007782 0.00112 31 640: 29% 22/75 [00:02<00:04, 11.41it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.0163 0.007796 0.001101 35 640: 29% 22/75 [00:02<00:04, 11.41it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01636 0.007796 0.001091 32 640: 32% 24/75 [00:02<00:04, 11.60it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01649 0.007814 0.001138 40 640: 32% 24/75 [00:02<00:04, 11.60it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01658 0.00783 0.001113 27 640: 35% 26/75 [00:02<00:04, 12.07it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01649 0.007874 0.0011 35 640: 35% 26/75 [00:02<00:04, 12.07it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01622 0.007816 0.001066 32 640: 37% 28/75 [00:02<00:03, 11.86it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01619 0.007799 0.001035 37 640: 37% 28/75 [00:02<00:03, 11.86it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01628 0.007728 0.001011 28 640: 40% 30/75 [00:02<00:03, 11.83it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01652 0.007699 0.001129 31 640: 40% 30/75 [00:02<00:03, 11.83it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01638 0.007657 0.001102 33 640: 43% 32/75 [00:02<00:03, 11.57it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01644 0.00769 0.001143 31 640: 43% 32/75 [00:02<00:03, 11.57it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01651 0.007661 0.001116 27 640: 45% 34/75 [00:03<00:03, 11.45it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01637 0.007588 0.001182 26 640: 45% 34/75 [00:03<00:03, 11.45it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01649 0.007695 0.001164 42 640: 48% 36/75 [00:03<00:03, 10.92it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01649 0.007698 0.001461 34 640: 48% 36/75 [00:03<00:03, 10.92it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01657 0.00768 0.001553 28 640: 51% 38/75 [00:03<00:03, 11.41it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01649 0.007715 0.001525 43 640: 51% 38/75 [00:03<00:03, 11.41it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01648 0.007724 0.001495 36 640: 53% 40/75 [00:03<00:03, 10.95it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01652 0.007795 0.001472 36 640: 53% 40/75 [00:03<00:03, 10.95it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01649 0.007773 0.001448 30 640: 56% 42/75 [00:03<00:02, 11.48it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01657 0.007751 0.001446 29 640: 56% 42/75 [00:03<00:02, 11.48it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01653 0.007716 0.00142 27 640: 59% 44/75 [00:03<00:02, 11.65it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01657 0.007731 0.001394 34 640: 59% 44/75 [00:03<00:02, 11.65it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01648 0.007716 0.001368 33 640: 61% 46/75 [00:04<00:02, 11.83it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01647 0.007684 0.001346 30 640: 61% 46/75 [00:04<00:02, 11.83it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01645 0.00765 0.001323 37 640: 64% 48/75 [00:04<00:02, 11.84it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.0163 0.007645 0.001333 26 640: 64% 48/75 [00:04<00:02, 11.84it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01622 0.007613 0.001309 29 640: 67% 50/75 [00:04<00:02, 12.29it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01636 0.007577 0.001288 36 640: 67% 50/75 [00:04<00:02, 12.29it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.0163 0.007557 0.001267 29 640: 69% 52/75 [00:04<00:01, 12.04it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.0162 0.00751 0.001252 24 640: 69% 52/75 [00:04<00:01, 12.04it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01615 0.007511 0.001232 33 640: 72% 54/75 [00:04<00:01, 12.33it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01612 0.007522 0.001282 37 640: 72% 54/75 [00:04<00:01, 12.33it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01609 0.00755 0.001264 35 640: 75% 56/75 [00:04<00:01, 12.16it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01605 0.007555 0.001257 41 640: 75% 56/75 [00:04<00:01, 12.16it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01603 0.007551 0.001242 37 640: 77% 58/75 [00:05<00:01, 12.49it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01593 0.007521 0.001223 30 640: 77% 58/75 [00:05<00:01, 12.49it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.0159 0.007549 0.001216 39 640: 80% 60/75 [00:05<00:01, 12.24it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01589 0.007591 0.0012 33 640: 80% 60/75 [00:05<00:01, 12.24it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01582 0.007563 0.001185 33 640: 83% 62/75 [00:05<00:01, 12.23it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01596 0.007547 0.001173 29 640: 83% 62/75 [00:05<00:01, 12.23it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01596 0.007536 0.001205 31 640: 85% 64/75 [00:05<00:00, 12.02it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01597 0.007548 0.001195 39 640: 85% 64/75 [00:05<00:00, 12.02it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01598 0.007576 0.001198 36 640: 88% 66/75 [00:05<00:00, 12.32it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01599 0.007581 0.001194 36 640: 88% 66/75 [00:05<00:00, 12.32it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01599 0.007596 0.001185 35 640: 91% 68/75 [00:05<00:00, 11.60it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01598 0.007567 0.001172 27 640: 91% 68/75 [00:05<00:00, 11.60it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01601 0.007559 0.001172 29 640: 93% 70/75 [00:06<00:00, 11.32it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01596 0.007575 0.001164 33 640: 93% 70/75 [00:06<00:00, 11.32it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01596 0.007597 0.001152 34 640: 96% 72/75 [00:06<00:00, 11.27it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01598 0.007577 0.001198 29 640: 96% 72/75 [00:06<00:00, 11.27it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.016 0.007584 0.001224 28 640: 99% 74/75 [00:06<00:00, 11.44it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 72/79 4.62G 0.01595 0.007605 0.001322 45 640: 100% 75/75 [00:06<00:00, 11.50it/s]\n",
+ " Class Images Instances P R mAP50 mAP50-95: 100% 7/7 [00:01<00:00, 5.21it/s]\n",
+ " all 200 204 0.625 0.533 0.58 0.384\n",
+ "\n",
+ " Epoch GPU_mem box_loss obj_loss cls_loss Instances Size\n",
+ " 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01442 0.006837 0.001261 31 640: 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01243 0.00663 0.0006985 32 640: 3% 2/75 [00:00<00:05, 12.58it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01501 0.007278 0.0005208 36 640: 3% 2/75 [00:00<00:05, 12.58it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01534 0.00707 0.000614 34 640: 5% 4/75 [00:00<00:06, 11.42it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01481 0.007109 0.0005454 30 640: 5% 4/75 [00:00<00:06, 11.42it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01462 0.007198 0.0004968 31 640: 8% 6/75 [00:00<00:05, 12.29it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01474 0.007317 0.0004759 37 640: 8% 6/75 [00:00<00:05, 12.29it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01527 0.007627 0.000635 36 640: 11% 8/75 [00:00<00:05, 12.16it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01666 0.007449 0.0007393 27 640: 11% 8/75 [00:00<00:05, 12.16it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01623 0.007192 0.0006917 22 640: 13% 10/75 [00:00<00:05, 11.98it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01621 0.007016 0.0009593 29 640: 13% 10/75 [00:00<00:05, 11.98it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01608 0.007202 0.0009503 34 640: 16% 12/75 [00:01<00:05, 11.40it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01606 0.007109 0.0008865 30 640: 16% 12/75 [00:01<00:05, 11.40it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01633 0.007313 0.0009025 38 640: 19% 14/75 [00:01<00:05, 11.67it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01603 0.007364 0.0008798 31 640: 19% 14/75 [00:01<00:05, 11.67it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01616 0.007363 0.0008526 28 640: 21% 16/75 [00:01<00:05, 11.72it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01628 0.007361 0.0008197 27 640: 21% 16/75 [00:01<00:05, 11.72it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01632 0.007409 0.0007943 33 640: 24% 18/75 [00:01<00:04, 12.06it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01644 0.007514 0.0007719 46 640: 24% 18/75 [00:01<00:04, 12.06it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01647 0.007504 0.0007937 35 640: 27% 20/75 [00:01<00:04, 11.88it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.0163 0.007638 0.0007888 43 640: 27% 20/75 [00:01<00:04, 11.88it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01611 0.007672 0.0007978 36 640: 29% 22/75 [00:01<00:04, 12.28it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01603 0.007612 0.0007703 33 640: 29% 22/75 [00:01<00:04, 12.28it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.0161 0.007778 0.0008257 42 640: 32% 24/75 [00:02<00:04, 11.48it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01599 0.007866 0.0008038 35 640: 32% 24/75 [00:02<00:04, 11.48it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01595 0.007878 0.0007973 31 640: 35% 26/75 [00:02<00:04, 11.90it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.0162 0.007873 0.000837 27 640: 35% 26/75 [00:02<00:04, 11.90it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01612 0.007775 0.0008151 26 640: 37% 28/75 [00:02<00:03, 11.88it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01615 0.007777 0.0008005 31 640: 37% 28/75 [00:02<00:03, 11.88it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01613 0.007765 0.0007837 33 640: 40% 30/75 [00:02<00:03, 11.89it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01603 0.007738 0.0007757 35 640: 40% 30/75 [00:02<00:03, 11.89it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01597 0.007799 0.0007616 36 640: 43% 32/75 [00:02<00:03, 11.73it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01592 0.007844 0.0007481 41 640: 43% 32/75 [00:02<00:03, 11.73it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01588 0.007877 0.0007827 30 640: 45% 34/75 [00:02<00:03, 12.05it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01585 0.007883 0.0008327 33 640: 45% 34/75 [00:02<00:03, 12.05it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01591 0.007943 0.000849 42 640: 48% 36/75 [00:03<00:03, 12.06it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01595 0.007975 0.0008481 40 640: 48% 36/75 [00:03<00:03, 12.06it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01584 0.007957 0.0008334 38 640: 51% 38/75 [00:03<00:03, 12.21it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01575 0.007908 0.0008731 29 640: 51% 38/75 [00:03<00:03, 12.21it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01562 0.007897 0.0008565 38 640: 53% 40/75 [00:03<00:02, 12.10it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01562 0.007891 0.000866 36 640: 53% 40/75 [00:03<00:02, 12.10it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01554 0.007825 0.0008568 23 640: 56% 42/75 [00:03<00:02, 12.26it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01571 0.007855 0.0008465 35 640: 56% 42/75 [00:03<00:02, 12.26it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01572 0.007853 0.0008813 37 640: 59% 44/75 [00:03<00:02, 11.45it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01559 0.007797 0.0008703 28 640: 59% 44/75 [00:03<00:02, 11.45it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01552 0.007737 0.0008588 28 640: 61% 46/75 [00:03<00:02, 11.45it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01543 0.007703 0.0008433 34 640: 61% 46/75 [00:03<00:02, 11.45it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01536 0.007696 0.0008299 33 640: 64% 48/75 [00:04<00:02, 11.19it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.0153 0.007682 0.0008152 32 640: 64% 48/75 [00:04<00:02, 11.19it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01524 0.007672 0.0008024 26 640: 67% 50/75 [00:04<00:02, 11.53it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01521 0.007654 0.000789 32 640: 67% 50/75 [00:04<00:02, 11.53it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01515 0.007685 0.0007809 35 640: 69% 52/75 [00:04<00:02, 11.08it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01517 0.007678 0.0007753 30 640: 69% 52/75 [00:04<00:02, 11.08it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01521 0.007687 0.0007875 34 640: 72% 54/75 [00:04<00:01, 11.26it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.0152 0.007664 0.000777 36 640: 72% 54/75 [00:04<00:01, 11.26it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01513 0.007638 0.0007655 24 640: 75% 56/75 [00:04<00:01, 11.49it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01505 0.007638 0.0007542 40 640: 75% 56/75 [00:04<00:01, 11.49it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01499 0.007606 0.0007444 28 640: 77% 58/75 [00:04<00:01, 11.96it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.0152 0.007602 0.0007463 30 640: 77% 58/75 [00:04<00:01, 11.96it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01509 0.007575 0.0007359 23 640: 80% 60/75 [00:05<00:01, 11.87it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01504 0.007566 0.0007258 29 640: 80% 60/75 [00:05<00:01, 11.87it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01501 0.007573 0.0007281 27 640: 83% 62/75 [00:05<00:01, 12.26it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01502 0.007567 0.0007206 29 640: 83% 62/75 [00:05<00:01, 12.26it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01498 0.007532 0.0007146 25 640: 85% 64/75 [00:05<00:00, 12.16it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01497 0.007569 0.0007155 43 640: 85% 64/75 [00:05<00:00, 12.16it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01501 0.00757 0.0007149 30 640: 88% 66/75 [00:05<00:00, 12.53it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.015 0.007563 0.0007077 34 640: 88% 66/75 [00:05<00:00, 12.53it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01496 0.007576 0.0006995 39 640: 91% 68/75 [00:05<00:00, 12.26it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01499 0.007564 0.0006928 32 640: 91% 68/75 [00:05<00:00, 12.26it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01494 0.007566 0.0006842 31 640: 93% 70/75 [00:05<00:00, 12.35it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01496 0.007558 0.0006774 29 640: 93% 70/75 [00:05<00:00, 12.35it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01494 0.007545 0.0007072 34 640: 96% 72/75 [00:06<00:00, 11.77it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01493 0.007562 0.0007004 29 640: 96% 72/75 [00:06<00:00, 11.77it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01494 0.007558 0.0007103 29 640: 99% 74/75 [00:06<00:00, 11.88it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 73/79 4.62G 0.01488 0.007567 0.000706 35 640: 100% 75/75 [00:06<00:00, 11.86it/s]\n",
+ " Class Images Instances P R mAP50 mAP50-95: 100% 7/7 [00:01<00:00, 5.11it/s]\n",
+ " all 200 204 0.609 0.547 0.585 0.384\n",
+ "\n",
+ " Epoch GPU_mem box_loss obj_loss cls_loss Instances Size\n",
+ " 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01747 0.005606 0.0006342 24 640: 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.02082 0.007184 0.001094 32 640: 3% 2/75 [00:00<00:06, 11.92it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01969 0.008289 0.0008185 45 640: 3% 2/75 [00:00<00:06, 11.92it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01825 0.007686 0.0006484 28 640: 5% 4/75 [00:00<00:06, 11.75it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01689 0.007196 0.0005426 26 640: 5% 4/75 [00:00<00:06, 11.75it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01627 0.007063 0.0005038 35 640: 8% 6/75 [00:00<00:05, 11.59it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01663 0.007577 0.0005688 36 640: 8% 6/75 [00:00<00:05, 11.59it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.0161 0.007267 0.0005255 23 640: 11% 8/75 [00:00<00:05, 11.89it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01627 0.00738 0.0004958 38 640: 11% 8/75 [00:00<00:05, 11.89it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01641 0.007322 0.0005612 27 640: 13% 10/75 [00:00<00:05, 11.81it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01596 0.007229 0.0009038 35 640: 13% 10/75 [00:00<00:05, 11.81it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01563 0.007232 0.000842 32 640: 16% 12/75 [00:01<00:05, 12.05it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01545 0.007236 0.0007997 32 640: 16% 12/75 [00:01<00:05, 12.05it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01511 0.007183 0.000779 33 640: 19% 14/75 [00:01<00:05, 11.78it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01491 0.007218 0.0007597 32 640: 19% 14/75 [00:01<00:05, 11.78it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01511 0.007208 0.0009845 28 640: 21% 16/75 [00:01<00:05, 11.68it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01493 0.007152 0.0009354 29 640: 21% 16/75 [00:01<00:05, 11.68it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01495 0.007242 0.0009037 40 640: 24% 18/75 [00:01<00:04, 11.58it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01487 0.007249 0.0009024 29 640: 24% 18/75 [00:01<00:04, 11.58it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01476 0.007277 0.0008649 37 640: 27% 20/75 [00:01<00:04, 11.85it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.0147 0.007344 0.0008365 34 640: 27% 20/75 [00:01<00:04, 11.85it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01494 0.007293 0.000825 31 640: 29% 22/75 [00:01<00:04, 11.60it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01503 0.007366 0.001236 32 640: 29% 22/75 [00:01<00:04, 11.60it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01503 0.007338 0.001196 28 640: 32% 24/75 [00:02<00:04, 11.66it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01506 0.00736 0.001156 32 640: 32% 24/75 [00:02<00:04, 11.66it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01496 0.007313 0.001151 30 640: 35% 26/75 [00:02<00:04, 11.42it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01487 0.0073 0.001116 35 640: 35% 26/75 [00:02<00:04, 11.42it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01469 0.00719 0.001086 24 640: 37% 28/75 [00:02<00:03, 11.78it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01449 0.007163 0.001053 26 640: 37% 28/75 [00:02<00:03, 11.78it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01445 0.007207 0.001035 30 640: 40% 30/75 [00:02<00:03, 11.72it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01453 0.007293 0.001033 34 640: 40% 30/75 [00:02<00:03, 11.72it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01446 0.007325 0.001057 34 640: 43% 32/75 [00:02<00:03, 11.73it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01463 0.007277 0.001046 26 640: 43% 32/75 [00:02<00:03, 11.73it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01464 0.007271 0.001019 36 640: 45% 34/75 [00:02<00:03, 11.63it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01464 0.007269 0.001094 38 640: 45% 34/75 [00:02<00:03, 11.63it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01473 0.00727 0.001069 36 640: 48% 36/75 [00:03<00:03, 11.94it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01479 0.007355 0.001057 36 640: 48% 36/75 [00:03<00:03, 11.94it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01501 0.007324 0.001065 30 640: 51% 38/75 [00:03<00:03, 11.77it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01506 0.00737 0.001066 32 640: 51% 38/75 [00:03<00:03, 11.77it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01511 0.00739 0.001049 30 640: 53% 40/75 [00:03<00:02, 11.99it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01519 0.007367 0.00103 34 640: 53% 40/75 [00:03<00:02, 11.99it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01502 0.007335 0.001019 27 640: 56% 42/75 [00:03<00:02, 11.16it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01502 0.007348 0.001001 33 640: 56% 42/75 [00:03<00:02, 11.16it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01513 0.007415 0.001133 35 640: 59% 44/75 [00:03<00:02, 10.96it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01514 0.007355 0.001123 23 640: 59% 44/75 [00:03<00:02, 10.96it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01504 0.007289 0.0011 24 640: 61% 46/75 [00:03<00:02, 11.13it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01511 0.007327 0.001094 33 640: 61% 46/75 [00:04<00:02, 11.13it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01517 0.007298 0.001075 28 640: 64% 48/75 [00:04<00:02, 11.39it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01512 0.007253 0.001058 26 640: 64% 48/75 [00:04<00:02, 11.39it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01506 0.007248 0.001069 32 640: 67% 50/75 [00:04<00:02, 11.11it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01509 0.007228 0.001091 26 640: 67% 50/75 [00:04<00:02, 11.11it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01513 0.007239 0.001085 35 640: 69% 52/75 [00:04<00:01, 11.53it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01511 0.007203 0.001072 24 640: 69% 52/75 [00:04<00:01, 11.53it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01516 0.0073 0.00106 40 640: 72% 54/75 [00:04<00:01, 11.19it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01519 0.007295 0.001044 29 640: 72% 54/75 [00:04<00:01, 11.19it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01521 0.007312 0.001039 40 640: 75% 56/75 [00:04<00:01, 11.20it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01519 0.007331 0.001024 37 640: 75% 56/75 [00:04<00:01, 11.20it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01518 0.007341 0.001009 32 640: 77% 58/75 [00:05<00:01, 11.23it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01521 0.007343 0.001035 32 640: 77% 58/75 [00:05<00:01, 11.23it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01518 0.007352 0.00102 28 640: 80% 60/75 [00:05<00:01, 11.61it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01512 0.00737 0.001005 36 640: 80% 60/75 [00:05<00:01, 11.61it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01522 0.007373 0.001027 34 640: 83% 62/75 [00:05<00:01, 10.97it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01521 0.007403 0.001239 32 640: 83% 62/75 [00:05<00:01, 10.97it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01524 0.007408 0.001222 36 640: 85% 64/75 [00:05<00:00, 11.04it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01523 0.007419 0.001208 46 640: 85% 64/75 [00:05<00:00, 11.04it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01525 0.00742 0.001194 27 640: 88% 66/75 [00:05<00:00, 10.39it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01516 0.007389 0.001177 27 640: 88% 66/75 [00:05<00:00, 10.39it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01521 0.007408 0.00117 28 640: 91% 68/75 [00:05<00:00, 10.40it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01518 0.007399 0.001176 30 640: 91% 68/75 [00:06<00:00, 10.40it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01523 0.007419 0.001182 35 640: 93% 70/75 [00:06<00:00, 10.32it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01514 0.007376 0.001166 19 640: 93% 70/75 [00:06<00:00, 10.32it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01515 0.007378 0.001157 27 640: 96% 72/75 [00:06<00:00, 9.72it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01513 0.007383 0.001163 29 640: 96% 72/75 [00:06<00:00, 9.72it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01513 0.007381 0.001151 27 640: 99% 74/75 [00:06<00:00, 9.77it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 74/79 4.62G 0.01505 0.007382 0.001137 30 640: 100% 75/75 [00:06<00:00, 11.22it/s]\n",
+ " Class Images Instances P R mAP50 mAP50-95: 100% 7/7 [00:01<00:00, 5.30it/s]\n",
+ " all 200 204 0.647 0.544 0.601 0.389\n",
+ "\n",
+ " Epoch GPU_mem box_loss obj_loss cls_loss Instances Size\n",
+ " 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01328 0.01015 0.0007941 35 640: 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01421 0.009767 0.00148 34 640: 3% 2/75 [00:00<00:06, 11.44it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01482 0.00904 0.001074 36 640: 3% 2/75 [00:00<00:06, 11.44it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01403 0.008954 0.0008857 32 640: 5% 4/75 [00:00<00:05, 12.01it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.0144 0.008725 0.0008884 34 640: 5% 4/75 [00:00<00:05, 12.01it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01425 0.008361 0.0008356 28 640: 8% 6/75 [00:00<00:05, 11.53it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01422 0.008147 0.0007383 30 640: 8% 6/75 [00:00<00:05, 11.53it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01374 0.007932 0.000774 31 640: 11% 8/75 [00:00<00:05, 11.80it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01377 0.008007 0.0007736 31 640: 11% 8/75 [00:00<00:05, 11.80it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01397 0.007848 0.0007958 24 640: 13% 10/75 [00:00<00:05, 11.72it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01392 0.00789 0.0007614 31 640: 13% 10/75 [00:00<00:05, 11.72it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01409 0.007921 0.0007317 37 640: 16% 12/75 [00:00<00:05, 12.34it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01387 0.007876 0.0006901 31 640: 16% 12/75 [00:01<00:05, 12.34it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01385 0.007942 0.000702 39 640: 19% 14/75 [00:01<00:05, 11.64it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01398 0.008006 0.0006693 28 640: 19% 14/75 [00:01<00:05, 11.64it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01496 0.007919 0.0008849 26 640: 21% 16/75 [00:01<00:05, 11.75it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01465 0.007852 0.0008887 32 640: 21% 16/75 [00:01<00:05, 11.75it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.0144 0.007816 0.0008562 37 640: 24% 18/75 [00:01<00:05, 11.34it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01419 0.007731 0.0008268 25 640: 24% 18/75 [00:01<00:05, 11.34it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.0145 0.007709 0.0011 34 640: 27% 20/75 [00:01<00:04, 11.93it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01457 0.007928 0.001077 35 640: 27% 20/75 [00:01<00:04, 11.93it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01445 0.007898 0.001218 35 640: 29% 22/75 [00:01<00:04, 11.91it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01438 0.007806 0.001199 26 640: 29% 22/75 [00:01<00:04, 11.91it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.0143 0.007803 0.001157 37 640: 32% 24/75 [00:02<00:04, 12.10it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01442 0.00782 0.00112 34 640: 32% 24/75 [00:02<00:04, 12.10it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01456 0.007773 0.001241 31 640: 35% 26/75 [00:02<00:04, 12.07it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01459 0.007719 0.001215 27 640: 35% 26/75 [00:02<00:04, 12.07it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01453 0.007737 0.001195 36 640: 37% 28/75 [00:02<00:03, 12.16it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01464 0.007786 0.001232 29 640: 37% 28/75 [00:02<00:03, 12.16it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01459 0.007767 0.001196 36 640: 40% 30/75 [00:02<00:03, 11.64it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01464 0.007785 0.00119 28 640: 40% 30/75 [00:02<00:03, 11.64it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.0146 0.007726 0.001157 34 640: 43% 32/75 [00:02<00:03, 11.20it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01458 0.007749 0.001235 38 640: 43% 32/75 [00:02<00:03, 11.20it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01472 0.007671 0.001202 25 640: 45% 34/75 [00:02<00:03, 11.29it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01461 0.007606 0.001172 32 640: 45% 34/75 [00:02<00:03, 11.29it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01479 0.007649 0.001184 36 640: 48% 36/75 [00:03<00:03, 11.81it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01477 0.007654 0.001171 36 640: 48% 36/75 [00:03<00:03, 11.81it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01476 0.007622 0.001144 33 640: 51% 38/75 [00:03<00:03, 11.48it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01476 0.007622 0.001121 33 640: 51% 38/75 [00:03<00:03, 11.48it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01472 0.007605 0.001097 29 640: 53% 40/75 [00:03<00:02, 12.04it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01469 0.007609 0.001253 32 640: 53% 40/75 [00:03<00:02, 12.04it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01463 0.007615 0.00123 30 640: 56% 42/75 [00:03<00:02, 11.79it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01458 0.007617 0.001219 28 640: 56% 42/75 [00:03<00:02, 11.79it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01452 0.007648 0.001256 36 640: 59% 44/75 [00:03<00:02, 11.87it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01455 0.007633 0.001238 33 640: 59% 44/75 [00:03<00:02, 11.87it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01453 0.007582 0.00122 25 640: 61% 46/75 [00:03<00:02, 11.72it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01458 0.007572 0.001211 29 640: 61% 46/75 [00:03<00:02, 11.72it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01465 0.007596 0.001192 34 640: 64% 48/75 [00:04<00:02, 11.58it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01459 0.007617 0.001184 31 640: 64% 48/75 [00:04<00:02, 11.58it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01484 0.007594 0.001381 25 640: 67% 50/75 [00:04<00:02, 11.13it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01492 0.007599 0.001367 27 640: 67% 50/75 [00:04<00:02, 11.13it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01485 0.007548 0.001342 28 640: 69% 52/75 [00:04<00:02, 11.29it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01481 0.007568 0.001319 40 640: 69% 52/75 [00:04<00:02, 11.29it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01478 0.007549 0.001299 27 640: 72% 54/75 [00:04<00:01, 11.33it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01475 0.007564 0.001288 27 640: 72% 54/75 [00:04<00:01, 11.33it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01473 0.007526 0.001267 26 640: 75% 56/75 [00:04<00:01, 11.33it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.0146 0.007489 0.00127 25 640: 75% 56/75 [00:04<00:01, 11.33it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01456 0.00751 0.001254 31 640: 77% 58/75 [00:04<00:01, 11.49it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01461 0.007517 0.001242 33 640: 77% 58/75 [00:05<00:01, 11.49it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01468 0.007499 0.001579 30 640: 80% 60/75 [00:05<00:01, 11.70it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01463 0.007477 0.00156 33 640: 80% 60/75 [00:05<00:01, 11.70it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01463 0.007495 0.001537 36 640: 83% 62/75 [00:05<00:01, 11.68it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01458 0.007469 0.001515 30 640: 83% 62/75 [00:05<00:01, 11.68it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01459 0.00743 0.001507 23 640: 85% 64/75 [00:05<00:00, 12.12it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01463 0.007469 0.001491 35 640: 85% 64/75 [00:05<00:00, 12.12it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01461 0.007464 0.001529 32 640: 88% 66/75 [00:05<00:00, 11.85it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01458 0.007445 0.001508 29 640: 88% 66/75 [00:05<00:00, 11.85it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01464 0.007488 0.001498 37 640: 91% 68/75 [00:05<00:00, 11.87it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01474 0.00749 0.00148 32 640: 91% 68/75 [00:05<00:00, 11.87it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01472 0.007525 0.001464 39 640: 93% 70/75 [00:05<00:00, 11.61it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01477 0.007511 0.001448 34 640: 93% 70/75 [00:06<00:00, 11.61it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01484 0.007561 0.001434 42 640: 96% 72/75 [00:06<00:00, 11.80it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01482 0.00754 0.001419 26 640: 96% 72/75 [00:06<00:00, 11.80it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01478 0.007539 0.001409 34 640: 99% 74/75 [00:06<00:00, 11.17it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 75/79 4.62G 0.01486 0.00754 0.00145 24 640: 100% 75/75 [00:06<00:00, 11.67it/s]\n",
+ " Class Images Instances P R mAP50 mAP50-95: 100% 7/7 [00:01<00:00, 5.49it/s]\n",
+ " all 200 204 0.574 0.538 0.57 0.37\n",
+ "\n",
+ " Epoch GPU_mem box_loss obj_loss cls_loss Instances Size\n",
+ " 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01803 0.009376 0.003646 38 640: 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01543 0.009017 0.002039 40 640: 3% 2/75 [00:00<00:05, 13.58it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.0145 0.007985 0.001409 28 640: 3% 2/75 [00:00<00:05, 13.58it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01539 0.008083 0.001187 29 640: 5% 4/75 [00:00<00:05, 12.45it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01505 0.007631 0.0009866 31 640: 5% 4/75 [00:00<00:05, 12.45it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01504 0.007602 0.0008449 35 640: 8% 6/75 [00:00<00:05, 12.50it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.0148 0.007655 0.0008292 36 640: 8% 6/75 [00:00<00:05, 12.50it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01458 0.007658 0.0008556 33 640: 11% 8/75 [00:00<00:05, 11.75it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01444 0.0075 0.0007911 29 640: 11% 8/75 [00:00<00:05, 11.75it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01477 0.007706 0.0007295 35 640: 13% 10/75 [00:00<00:05, 11.97it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01486 0.007627 0.0007196 34 640: 13% 10/75 [00:00<00:05, 11.97it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.0146 0.007679 0.0007618 36 640: 16% 12/75 [00:01<00:05, 11.16it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01514 0.007655 0.001435 25 640: 16% 12/75 [00:01<00:05, 11.16it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01494 0.007813 0.001352 42 640: 19% 14/75 [00:01<00:05, 10.97it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01781 0.007891 0.001319 34 640: 19% 14/75 [00:01<00:05, 10.97it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01739 0.007895 0.001246 31 640: 21% 16/75 [00:01<00:05, 10.54it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01721 0.007855 0.001184 37 640: 21% 16/75 [00:01<00:05, 10.54it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01694 0.007761 0.001128 32 640: 24% 18/75 [00:01<00:05, 11.28it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01711 0.007795 0.001083 34 640: 24% 18/75 [00:01<00:05, 11.28it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01704 0.007859 0.001044 39 640: 27% 20/75 [00:01<00:04, 11.47it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01701 0.007983 0.001037 39 640: 27% 20/75 [00:01<00:04, 11.47it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01698 0.007992 0.001096 34 640: 29% 22/75 [00:01<00:04, 11.63it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01699 0.007858 0.001097 20 640: 29% 22/75 [00:01<00:04, 11.63it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01689 0.0078 0.001077 33 640: 32% 24/75 [00:02<00:04, 11.51it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.0166 0.007745 0.001085 28 640: 32% 24/75 [00:02<00:04, 11.51it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01649 0.007722 0.001171 30 640: 35% 26/75 [00:02<00:04, 11.69it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01633 0.007742 0.001145 38 640: 35% 26/75 [00:02<00:04, 11.69it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01626 0.007831 0.001136 30 640: 37% 28/75 [00:02<00:04, 11.25it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01613 0.007785 0.001102 30 640: 37% 28/75 [00:02<00:04, 11.25it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01597 0.007756 0.001083 37 640: 40% 30/75 [00:02<00:03, 11.76it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01602 0.007708 0.00111 29 640: 40% 30/75 [00:02<00:03, 11.76it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01602 0.007708 0.001198 36 640: 43% 32/75 [00:02<00:03, 11.60it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01597 0.00778 0.001273 36 640: 43% 32/75 [00:02<00:03, 11.60it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01597 0.007773 0.001255 32 640: 45% 34/75 [00:02<00:03, 11.99it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01623 0.007757 0.002222 30 640: 45% 34/75 [00:03<00:03, 11.99it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01611 0.007744 0.002164 32 640: 48% 36/75 [00:03<00:03, 11.88it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01603 0.007723 0.002109 33 640: 48% 36/75 [00:03<00:03, 11.88it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01592 0.007746 0.002057 31 640: 51% 38/75 [00:03<00:03, 12.02it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01589 0.007677 0.00221 21 640: 51% 38/75 [00:03<00:03, 12.02it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01576 0.007624 0.002158 25 640: 53% 40/75 [00:03<00:02, 11.72it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01575 0.007588 0.00211 30 640: 53% 40/75 [00:03<00:02, 11.72it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.0157 0.007565 0.002089 30 640: 56% 42/75 [00:03<00:02, 11.56it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01565 0.00754 0.002047 31 640: 56% 42/75 [00:03<00:02, 11.56it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01561 0.007512 0.002016 28 640: 59% 44/75 [00:03<00:02, 11.56it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01555 0.007527 0.001982 37 640: 59% 44/75 [00:03<00:02, 11.56it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01548 0.00751 0.001942 33 640: 61% 46/75 [00:03<00:02, 11.83it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.0155 0.007525 0.001907 33 640: 61% 46/75 [00:04<00:02, 11.83it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01552 0.00748 0.001955 28 640: 64% 48/75 [00:04<00:02, 11.14it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01552 0.007492 0.00192 38 640: 64% 48/75 [00:04<00:02, 11.14it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01543 0.007469 0.00189 28 640: 67% 50/75 [00:04<00:02, 11.04it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01538 0.007433 0.001878 30 640: 67% 50/75 [00:04<00:02, 11.04it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01536 0.007444 0.001885 32 640: 69% 52/75 [00:04<00:02, 11.08it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01538 0.00742 0.001852 26 640: 69% 52/75 [00:04<00:02, 11.08it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01541 0.007409 0.001899 32 640: 72% 54/75 [00:04<00:01, 11.45it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01543 0.00741 0.001876 28 640: 72% 54/75 [00:04<00:01, 11.45it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01541 0.00744 0.001846 41 640: 75% 56/75 [00:04<00:01, 10.67it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01544 0.007442 0.001818 34 640: 75% 56/75 [00:04<00:01, 10.67it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01545 0.007434 0.00179 29 640: 77% 58/75 [00:05<00:01, 10.87it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01543 0.007424 0.001762 27 640: 77% 58/75 [00:05<00:01, 10.87it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01533 0.007418 0.001757 34 640: 80% 60/75 [00:05<00:01, 11.03it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01525 0.007378 0.001738 23 640: 80% 60/75 [00:05<00:01, 11.03it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01522 0.007344 0.001714 26 640: 83% 62/75 [00:05<00:01, 11.65it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01521 0.007371 0.001688 40 640: 83% 62/75 [00:05<00:01, 11.65it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01518 0.007334 0.001664 25 640: 85% 64/75 [00:05<00:00, 11.54it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01512 0.007288 0.00164 24 640: 85% 64/75 [00:05<00:00, 11.54it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01508 0.007268 0.001662 31 640: 88% 66/75 [00:05<00:00, 11.68it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.0151 0.007267 0.00164 33 640: 88% 66/75 [00:05<00:00, 11.68it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01504 0.00725 0.001618 32 640: 91% 68/75 [00:05<00:00, 11.47it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01503 0.007241 0.001601 30 640: 91% 68/75 [00:05<00:00, 11.47it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01499 0.007245 0.00161 38 640: 93% 70/75 [00:06<00:00, 11.54it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.015 0.007227 0.001605 33 640: 93% 70/75 [00:06<00:00, 11.54it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01501 0.007229 0.001589 29 640: 96% 72/75 [00:06<00:00, 11.52it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01503 0.007217 0.001571 33 640: 96% 72/75 [00:06<00:00, 11.52it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01504 0.007207 0.001554 29 640: 99% 74/75 [00:06<00:00, 11.07it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 76/79 4.62G 0.01505 0.007261 0.001536 41 640: 100% 75/75 [00:06<00:00, 11.43it/s]\n",
+ " Class Images Instances P R mAP50 mAP50-95: 100% 7/7 [00:01<00:00, 5.06it/s]\n",
+ " all 200 204 0.589 0.518 0.567 0.366\n",
+ "\n",
+ " Epoch GPU_mem box_loss obj_loss cls_loss Instances Size\n",
+ " 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.02521 0.006347 0.001748 23 640: 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01943 0.006735 0.002165 39 640: 3% 2/75 [00:00<00:05, 12.65it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.017 0.006913 0.001552 28 640: 3% 2/75 [00:00<00:05, 12.65it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01611 0.007215 0.001228 40 640: 5% 4/75 [00:00<00:06, 11.00it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01606 0.007531 0.001128 34 640: 5% 4/75 [00:00<00:06, 11.00it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01633 0.00761 0.001468 38 640: 8% 6/75 [00:00<00:05, 11.95it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01612 0.007843 0.001292 37 640: 8% 6/75 [00:00<00:05, 11.95it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.0159 0.007661 0.001146 33 640: 11% 8/75 [00:00<00:05, 11.36it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01574 0.007667 0.002716 37 640: 11% 8/75 [00:00<00:05, 11.36it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01559 0.007729 0.002466 38 640: 13% 10/75 [00:00<00:05, 11.75it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01549 0.007892 0.002306 42 640: 13% 10/75 [00:00<00:05, 11.75it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01599 0.007839 0.002139 35 640: 16% 12/75 [00:01<00:05, 11.38it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01581 0.007717 0.001998 26 640: 16% 12/75 [00:01<00:05, 11.38it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01611 0.007596 0.002345 24 640: 19% 14/75 [00:01<00:05, 11.94it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01619 0.00776 0.002227 35 640: 19% 14/75 [00:01<00:05, 11.94it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01619 0.007688 0.002127 32 640: 21% 16/75 [00:01<00:05, 11.60it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01602 0.007615 0.002027 31 640: 21% 16/75 [00:01<00:05, 11.60it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01566 0.007605 0.001929 35 640: 24% 18/75 [00:01<00:04, 11.97it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01565 0.007654 0.001906 32 640: 24% 18/75 [00:01<00:04, 11.97it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01561 0.007572 0.001822 32 640: 27% 20/75 [00:01<00:04, 11.85it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01572 0.007601 0.001817 31 640: 27% 20/75 [00:01<00:04, 11.85it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01586 0.007606 0.001869 34 640: 29% 22/75 [00:01<00:04, 12.10it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01575 0.007538 0.001794 34 640: 29% 22/75 [00:01<00:04, 12.10it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01575 0.007612 0.001849 30 640: 32% 24/75 [00:02<00:04, 11.71it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01558 0.007518 0.001779 35 640: 32% 24/75 [00:02<00:04, 11.71it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01557 0.007514 0.002047 31 640: 35% 26/75 [00:02<00:04, 11.53it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01539 0.007515 0.001987 33 640: 35% 26/75 [00:02<00:04, 11.53it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.0155 0.007606 0.001934 40 640: 37% 28/75 [00:02<00:04, 11.30it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01546 0.007594 0.001886 35 640: 37% 28/75 [00:02<00:04, 11.30it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01528 0.007495 0.001826 25 640: 40% 30/75 [00:02<00:03, 11.79it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01533 0.007579 0.001801 36 640: 40% 30/75 [00:02<00:03, 11.79it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01535 0.007541 0.001763 24 640: 43% 32/75 [00:02<00:03, 11.76it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01534 0.007493 0.001742 29 640: 43% 32/75 [00:02<00:03, 11.76it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01524 0.007546 0.001713 30 640: 45% 34/75 [00:02<00:03, 12.17it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01516 0.007497 0.001668 31 640: 45% 34/75 [00:02<00:03, 12.17it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01513 0.007491 0.001642 37 640: 48% 36/75 [00:03<00:03, 11.84it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01508 0.007489 0.001626 29 640: 48% 36/75 [00:03<00:03, 11.84it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01503 0.007461 0.001586 33 640: 51% 38/75 [00:03<00:03, 12.14it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01525 0.007527 0.001554 35 640: 51% 38/75 [00:03<00:03, 12.14it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01519 0.007478 0.001541 26 640: 53% 40/75 [00:03<00:02, 12.11it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01528 0.007522 0.001547 35 640: 53% 40/75 [00:03<00:02, 12.11it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01525 0.007582 0.001528 35 640: 56% 42/75 [00:03<00:02, 12.48it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01528 0.007633 0.001504 35 640: 56% 42/75 [00:03<00:02, 12.48it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01522 0.007596 0.001517 31 640: 59% 44/75 [00:03<00:02, 12.30it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01521 0.007606 0.001514 33 640: 59% 44/75 [00:03<00:02, 12.30it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01514 0.007598 0.001493 32 640: 61% 46/75 [00:03<00:02, 12.57it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01509 0.007625 0.001465 31 640: 61% 46/75 [00:03<00:02, 12.57it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01502 0.007642 0.001437 41 640: 64% 48/75 [00:04<00:02, 11.97it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01503 0.007685 0.001418 35 640: 64% 48/75 [00:04<00:02, 11.97it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01498 0.007692 0.001395 35 640: 67% 50/75 [00:04<00:02, 12.09it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01482 0.007661 0.001372 28 640: 67% 50/75 [00:04<00:02, 12.09it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01479 0.007749 0.001354 39 640: 69% 52/75 [00:04<00:01, 12.14it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01471 0.007727 0.001335 31 640: 69% 52/75 [00:04<00:01, 12.14it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01467 0.007737 0.001313 37 640: 72% 54/75 [00:04<00:01, 12.49it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01466 0.007738 0.001308 32 640: 72% 54/75 [00:04<00:01, 12.49it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.0147 0.007707 0.00153 26 640: 75% 56/75 [00:04<00:01, 12.21it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01469 0.007714 0.001513 33 640: 75% 56/75 [00:04<00:01, 12.21it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01471 0.007662 0.001495 31 640: 77% 58/75 [00:04<00:01, 12.49it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01485 0.007704 0.001474 40 640: 77% 58/75 [00:04<00:01, 12.49it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01489 0.007706 0.001465 32 640: 80% 60/75 [00:05<00:01, 12.16it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01484 0.007691 0.001446 28 640: 80% 60/75 [00:05<00:01, 12.16it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01484 0.007697 0.001428 33 640: 83% 62/75 [00:05<00:01, 12.20it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01483 0.007644 0.001407 26 640: 83% 62/75 [00:05<00:01, 12.20it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01484 0.007634 0.001389 27 640: 85% 64/75 [00:05<00:00, 11.82it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01484 0.007641 0.001373 27 640: 85% 64/75 [00:05<00:00, 11.82it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.0148 0.007642 0.001354 33 640: 88% 66/75 [00:05<00:00, 12.09it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01488 0.007645 0.00134 31 640: 88% 66/75 [00:05<00:00, 12.09it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01489 0.007636 0.001323 32 640: 91% 68/75 [00:05<00:00, 11.99it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01491 0.007603 0.001314 24 640: 91% 68/75 [00:05<00:00, 11.99it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01493 0.007591 0.001298 32 640: 93% 70/75 [00:05<00:00, 12.00it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01486 0.007579 0.001284 36 640: 93% 70/75 [00:05<00:00, 12.00it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01491 0.007588 0.001274 32 640: 96% 72/75 [00:06<00:00, 11.61it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01488 0.007596 0.001259 33 640: 96% 72/75 [00:06<00:00, 11.61it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01483 0.00758 0.001244 36 640: 99% 74/75 [00:06<00:00, 11.55it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 77/79 4.62G 0.01485 0.007585 0.00123 36 640: 100% 75/75 [00:06<00:00, 11.94it/s]\n",
+ " Class Images Instances P R mAP50 mAP50-95: 100% 7/7 [00:01<00:00, 5.48it/s]\n",
+ " all 200 204 0.594 0.53 0.578 0.372\n",
+ "\n",
+ " Epoch GPU_mem box_loss obj_loss cls_loss Instances Size\n",
+ " 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01805 0.008639 0.0002869 36 640: 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01634 0.009038 0.0002635 42 640: 3% 2/75 [00:00<00:05, 12.29it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01543 0.00855 0.000398 34 640: 3% 2/75 [00:00<00:05, 12.29it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01546 0.008189 0.0006881 32 640: 5% 4/75 [00:00<00:05, 12.90it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01505 0.008105 0.0007849 42 640: 5% 4/75 [00:00<00:05, 12.90it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01502 0.008398 0.002249 34 640: 8% 6/75 [00:00<00:05, 12.41it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01504 0.008301 0.001978 33 640: 8% 6/75 [00:00<00:05, 12.41it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01453 0.007944 0.001745 23 640: 11% 8/75 [00:00<00:05, 12.80it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01483 0.008082 0.001598 37 640: 11% 8/75 [00:00<00:05, 12.80it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01488 0.008057 0.001468 30 640: 13% 10/75 [00:00<00:05, 12.19it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01459 0.007896 0.001354 34 640: 13% 10/75 [00:00<00:05, 12.19it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01432 0.007711 0.001256 23 640: 16% 12/75 [00:00<00:05, 12.50it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01438 0.007541 0.003144 27 640: 16% 12/75 [00:01<00:05, 12.50it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01416 0.007482 0.002949 27 640: 19% 14/75 [00:01<00:04, 12.36it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01401 0.00739 0.002766 32 640: 19% 14/75 [00:01<00:04, 12.36it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01384 0.0074 0.002671 36 640: 21% 16/75 [00:01<00:04, 12.57it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01381 0.007416 0.00253 42 640: 21% 16/75 [00:01<00:04, 12.57it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01378 0.00746 0.002398 41 640: 24% 18/75 [00:01<00:04, 12.13it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01354 0.00741 0.002367 28 640: 24% 18/75 [00:01<00:04, 12.13it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01407 0.007372 0.002282 29 640: 27% 20/75 [00:01<00:04, 12.58it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01412 0.007487 0.002183 38 640: 27% 20/75 [00:01<00:04, 12.58it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01423 0.007399 0.002118 25 640: 29% 22/75 [00:01<00:04, 12.23it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01427 0.007381 0.002042 34 640: 29% 22/75 [00:01<00:04, 12.23it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01426 0.007403 0.001969 30 640: 32% 24/75 [00:01<00:04, 12.33it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01441 0.007437 0.001921 34 640: 32% 24/75 [00:02<00:04, 12.33it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01464 0.007436 0.001856 30 640: 35% 26/75 [00:02<00:04, 11.16it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01438 0.007457 0.001797 36 640: 35% 26/75 [00:02<00:04, 11.16it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.0143 0.007447 0.001776 25 640: 37% 28/75 [00:02<00:04, 11.74it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01423 0.007406 0.001722 29 640: 37% 28/75 [00:02<00:04, 11.74it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01445 0.007501 0.001696 32 640: 40% 30/75 [00:02<00:03, 11.80it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01443 0.007474 0.001651 34 640: 40% 30/75 [00:02<00:03, 11.80it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01451 0.00756 0.001608 33 640: 43% 32/75 [00:02<00:03, 11.65it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01451 0.007577 0.001567 41 640: 43% 32/75 [00:02<00:03, 11.65it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01447 0.007585 0.001525 34 640: 45% 34/75 [00:02<00:03, 10.93it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.0144 0.007536 0.001487 24 640: 45% 34/75 [00:02<00:03, 10.93it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01443 0.007554 0.00145 27 640: 48% 36/75 [00:03<00:03, 11.11it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01436 0.007532 0.001415 35 640: 48% 36/75 [00:03<00:03, 11.11it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01438 0.007569 0.001386 40 640: 51% 38/75 [00:03<00:03, 10.93it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01435 0.007537 0.001359 32 640: 51% 38/75 [00:03<00:03, 10.93it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01428 0.007526 0.001329 36 640: 53% 40/75 [00:03<00:03, 11.52it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01422 0.007481 0.001306 28 640: 53% 40/75 [00:03<00:03, 11.52it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01426 0.007482 0.001286 34 640: 56% 42/75 [00:03<00:02, 11.05it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01419 0.007423 0.001259 21 640: 56% 42/75 [00:03<00:02, 11.05it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01423 0.007504 0.00124 45 640: 59% 44/75 [00:03<00:02, 11.41it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01424 0.007499 0.001216 31 640: 59% 44/75 [00:03<00:02, 11.41it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01427 0.00749 0.001195 35 640: 61% 46/75 [00:03<00:02, 11.25it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01427 0.00749 0.001174 31 640: 61% 46/75 [00:03<00:02, 11.25it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01423 0.007438 0.001152 24 640: 64% 48/75 [00:04<00:02, 11.72it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01419 0.007444 0.001132 27 640: 64% 48/75 [00:04<00:02, 11.72it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01415 0.007425 0.001113 33 640: 67% 50/75 [00:04<00:02, 11.33it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01415 0.007432 0.001104 35 640: 67% 50/75 [00:04<00:02, 11.33it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.0142 0.007423 0.001091 30 640: 69% 52/75 [00:04<00:02, 11.43it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01427 0.007458 0.001088 34 640: 69% 52/75 [00:04<00:02, 11.43it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01427 0.007444 0.001075 31 640: 72% 54/75 [00:04<00:01, 11.20it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01429 0.007454 0.001096 35 640: 72% 54/75 [00:04<00:01, 11.20it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01433 0.00744 0.001082 26 640: 75% 56/75 [00:04<00:01, 11.15it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01436 0.007408 0.001065 25 640: 75% 56/75 [00:04<00:01, 11.15it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01447 0.00739 0.001054 23 640: 77% 58/75 [00:04<00:01, 10.86it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01456 0.007374 0.001043 26 640: 77% 58/75 [00:05<00:01, 10.86it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01462 0.007396 0.001083 33 640: 80% 60/75 [00:05<00:01, 11.10it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01463 0.007437 0.00107 42 640: 80% 60/75 [00:05<00:01, 11.10it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01455 0.007408 0.001129 31 640: 83% 62/75 [00:05<00:01, 10.84it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01451 0.007404 0.001117 32 640: 83% 62/75 [00:05<00:01, 10.84it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01449 0.007412 0.001102 34 640: 85% 64/75 [00:05<00:00, 11.18it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01446 0.007421 0.001095 31 640: 85% 64/75 [00:05<00:00, 11.18it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01443 0.007416 0.001082 28 640: 88% 66/75 [00:05<00:00, 10.81it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01444 0.007412 0.001069 27 640: 88% 66/75 [00:05<00:00, 10.81it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01442 0.00739 0.001057 22 640: 91% 68/75 [00:05<00:00, 10.94it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01441 0.007391 0.001045 38 640: 91% 68/75 [00:06<00:00, 10.94it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01443 0.007378 0.001032 32 640: 93% 70/75 [00:06<00:00, 10.93it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01443 0.007409 0.001022 33 640: 93% 70/75 [00:06<00:00, 10.93it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01444 0.007406 0.00101 31 640: 96% 72/75 [00:06<00:00, 11.54it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01446 0.007429 0.001001 42 640: 96% 72/75 [00:06<00:00, 11.54it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01439 0.007428 0.0009893 36 640: 99% 74/75 [00:06<00:00, 11.58it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 78/79 4.62G 0.01442 0.007432 0.000981 39 640: 100% 75/75 [00:06<00:00, 11.56it/s]\n",
+ " Class Images Instances P R mAP50 mAP50-95: 100% 7/7 [00:01<00:00, 5.14it/s]\n",
+ " all 200 204 0.597 0.518 0.574 0.372\n",
+ "\n",
+ " Epoch GPU_mem box_loss obj_loss cls_loss Instances Size\n",
+ " 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01255 0.00604 0.0008364 33 640: 0% 0/75 [00:00, ?it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01546 0.007396 0.0008537 33 640: 3% 2/75 [00:00<00:06, 11.06it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01462 0.007283 0.0006171 32 640: 3% 2/75 [00:00<00:06, 11.06it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01376 0.007291 0.001962 36 640: 5% 4/75 [00:00<00:06, 11.43it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01368 0.007007 0.001599 31 640: 5% 4/75 [00:00<00:06, 11.43it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.014 0.007563 0.001431 32 640: 8% 6/75 [00:00<00:06, 10.93it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.0133 0.007201 0.001244 27 640: 8% 6/75 [00:00<00:06, 10.93it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01348 0.007258 0.001121 27 640: 11% 8/75 [00:00<00:05, 11.51it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01392 0.007449 0.001362 31 640: 11% 8/75 [00:00<00:05, 11.51it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01364 0.007466 0.001246 40 640: 13% 10/75 [00:00<00:05, 11.60it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01374 0.007442 0.0012 33 640: 13% 10/75 [00:00<00:05, 11.60it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.0135 0.00726 0.001202 29 640: 16% 12/75 [00:01<00:05, 11.79it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01333 0.007188 0.001198 34 640: 16% 12/75 [00:01<00:05, 11.79it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.0131 0.007065 0.001132 28 640: 19% 14/75 [00:01<00:05, 11.75it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01302 0.007054 0.001069 34 640: 19% 14/75 [00:01<00:05, 11.75it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01304 0.006997 0.001221 33 640: 21% 16/75 [00:01<00:04, 12.10it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01283 0.006912 0.001159 26 640: 21% 16/75 [00:01<00:04, 12.10it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01282 0.006846 0.001108 26 640: 24% 18/75 [00:01<00:04, 12.04it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.0125 0.006737 0.001054 25 640: 24% 18/75 [00:01<00:04, 12.04it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01265 0.006823 0.001008 36 640: 27% 20/75 [00:01<00:04, 12.40it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.0127 0.006772 0.0009673 28 640: 27% 20/75 [00:01<00:04, 12.40it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01268 0.006689 0.0009895 22 640: 29% 22/75 [00:01<00:04, 12.08it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01285 0.006718 0.0009838 30 640: 29% 22/75 [00:01<00:04, 12.08it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01277 0.006738 0.001033 25 640: 32% 24/75 [00:02<00:04, 12.17it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01278 0.006776 0.001048 31 640: 32% 24/75 [00:02<00:04, 12.17it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01293 0.006798 0.001043 27 640: 35% 26/75 [00:02<00:04, 11.64it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01271 0.006753 0.001041 32 640: 35% 26/75 [00:02<00:04, 11.64it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01268 0.006704 0.00101 27 640: 37% 28/75 [00:02<00:03, 12.20it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01259 0.006662 0.0009996 29 640: 37% 28/75 [00:02<00:03, 12.20it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01261 0.006648 0.0009707 29 640: 40% 30/75 [00:02<00:03, 11.71it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01285 0.006614 0.000947 27 640: 40% 30/75 [00:02<00:03, 11.71it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01294 0.006618 0.0009576 30 640: 43% 32/75 [00:02<00:03, 11.83it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01298 0.006586 0.000938 31 640: 43% 32/75 [00:02<00:03, 11.83it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01308 0.006579 0.0009222 27 640: 45% 34/75 [00:02<00:03, 11.82it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01336 0.006631 0.001203 31 640: 45% 34/75 [00:02<00:03, 11.82it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01339 0.006633 0.00118 30 640: 48% 36/75 [00:03<00:03, 12.25it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01349 0.006642 0.001171 30 640: 48% 36/75 [00:03<00:03, 12.25it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01345 0.006712 0.001169 41 640: 51% 38/75 [00:03<00:03, 11.96it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01345 0.006705 0.001147 35 640: 51% 38/75 [00:03<00:03, 11.96it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01348 0.006798 0.001145 37 640: 53% 40/75 [00:03<00:02, 11.77it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01349 0.006846 0.001122 37 640: 53% 40/75 [00:03<00:02, 11.77it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01357 0.006917 0.001108 38 640: 56% 42/75 [00:03<00:02, 11.75it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.0136 0.006931 0.001096 32 640: 56% 42/75 [00:03<00:02, 11.75it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01362 0.006925 0.001078 33 640: 59% 44/75 [00:03<00:02, 11.96it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01355 0.006884 0.001056 30 640: 59% 44/75 [00:03<00:02, 11.96it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01359 0.006929 0.00104 44 640: 61% 46/75 [00:03<00:02, 11.88it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01353 0.006897 0.001029 30 640: 61% 46/75 [00:03<00:02, 11.88it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01348 0.006851 0.001011 27 640: 64% 48/75 [00:04<00:02, 11.93it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01344 0.006856 0.0009929 31 640: 64% 48/75 [00:04<00:02, 11.93it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01347 0.00685 0.000992 27 640: 67% 50/75 [00:04<00:02, 11.56it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01359 0.006866 0.001074 34 640: 67% 50/75 [00:04<00:02, 11.56it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01371 0.006861 0.001058 31 640: 69% 52/75 [00:04<00:01, 11.97it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01373 0.006844 0.001106 30 640: 69% 52/75 [00:04<00:01, 11.97it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01371 0.006866 0.001102 31 640: 72% 54/75 [00:04<00:01, 11.85it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01363 0.006866 0.001084 33 640: 72% 54/75 [00:04<00:01, 11.85it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01361 0.006897 0.001174 34 640: 75% 56/75 [00:04<00:01, 12.24it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01364 0.006906 0.001156 31 640: 75% 56/75 [00:04<00:01, 12.24it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01363 0.006914 0.001158 33 640: 77% 58/75 [00:04<00:01, 12.08it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01366 0.006936 0.001159 29 640: 77% 58/75 [00:04<00:01, 12.08it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01361 0.006919 0.001142 27 640: 80% 60/75 [00:05<00:01, 12.43it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01359 0.006914 0.001127 34 640: 80% 60/75 [00:05<00:01, 12.43it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01362 0.006907 0.001113 23 640: 83% 62/75 [00:05<00:01, 12.27it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01361 0.006919 0.001133 37 640: 83% 62/75 [00:05<00:01, 12.27it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01364 0.00695 0.001185 37 640: 85% 64/75 [00:05<00:00, 12.37it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01369 0.006953 0.001169 34 640: 85% 64/75 [00:05<00:00, 12.37it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01367 0.006952 0.001176 35 640: 88% 66/75 [00:05<00:00, 12.22it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.0136 0.00695 0.00116 40 640: 88% 66/75 [00:05<00:00, 12.22it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01356 0.006944 0.001157 31 640: 91% 68/75 [00:05<00:00, 12.37it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01356 0.006961 0.001148 32 640: 91% 68/75 [00:05<00:00, 12.37it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01351 0.006968 0.001134 37 640: 93% 70/75 [00:05<00:00, 12.15it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01351 0.006972 0.00112 31 640: 93% 70/75 [00:05<00:00, 12.15it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01354 0.006974 0.001124 26 640: 96% 72/75 [00:06<00:00, 12.50it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.0135 0.006994 0.001113 38 640: 96% 72/75 [00:06<00:00, 12.50it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.01355 0.007035 0.001102 37 640: 99% 74/75 [00:06<00:00, 12.22it/s]/content/drive/MyDrive/Yolov5/yolov5/train.py:412: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.\n",
+ " with torch.cuda.amp.autocast(amp):\n",
+ " 79/79 4.62G 0.0136 0.007011 0.001106 21 640: 100% 75/75 [00:06<00:00, 11.98it/s]\n",
+ " Class Images Instances P R mAP50 mAP50-95: 100% 7/7 [00:01<00:00, 5.44it/s]\n",
+ " all 200 204 0.587 0.526 0.586 0.381\n",
+ "\n",
+ "80 epochs completed in 0.186 hours.\n",
+ "Optimizer stripped from runs/train/exp3/weights/last.pt, 14.4MB\n",
+ "Optimizer stripped from runs/train/exp3/weights/best.pt, 14.4MB\n",
+ "\n",
+ "Validating runs/train/exp3/weights/best.pt...\n",
+ "Fusing layers... \n",
+ "Model summary: 157 layers, 7015519 parameters, 0 gradients, 15.8 GFLOPs\n",
+ " Class Images Instances P R mAP50 mAP50-95: 100% 7/7 [00:02<00:00, 3.29it/s]\n",
+ " all 200 204 0.655 0.56 0.632 0.408\n",
+ " moderate 200 67 0.621 0.391 0.492 0.281\n",
+ " severe 200 137 0.689 0.73 0.772 0.535\n",
+ "Results saved to \u001b[1mruns/train/exp3\u001b[0m\n"
+ ]
+ }
+ ],
+ "source": [
+ "# # Run the training\n",
+ "# !python train.py --img 640 --batch 16 --epochs 80 --data \"/content/drive/MyDrive/Yolov5/Accident Test Set.v1i.yolov5pytorch/data.yaml\" --weights '/content/drive/MyDrive/Yolov5/yolov5s.pt' --cache"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 857,
+ "resources": {
+ "https://localhost:6006/?tensorboardColab=true": {
+ "data": "PCFkb2N0eXBlIGh0bWw+PG1ldGEgbmFtZT0idGItcmVsYXRpdmUtcm9vdCIgY29udGVudD0iLi8iPjwhZG9jdHlwZSBodG1sPjwhLS0KQGxpY2Vuc2UKQ29weXJpZ2h0IDIwMTkgVGhlIFRlbnNvckZsb3cgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQpkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZApsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0+PGh0bWw+PGhlYWQ+PG1ldGEgY2hhcnNldD0idXRmLTgiPgo8dGl0bGU+VGVuc29yQm9hcmQ8L3RpdGxlPgo8bGluayByZWw9InNob3J0Y3V0IGljb24iIGhyZWY9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBTVFBQUFERUNBWUFBQURBcG81ckFBQUFCSE5DU1ZRSUNBZ0lmQWhraUFBQUFBbHdTRmx6QUFCYWJnQUFXbTRCeFdzak9BQUFBQmwwUlZoMFUyOW1kSGRoY21VQWQzZDNMbWx1YTNOallYQmxMbTl5WjV2dVBCb0FBQmwwU1VSQlZIaWM3WjE1ZUZUVjNjYy92NXNGQ1ZSeHFWdHB0VlcyVmx4ZjYxcXRpcTBMOUdsOU5YVUJGRXBGUlRJaGhCQURDVGRBTUFFa0NZc0s3cUI5K2tENzJxZkJXaXZxVzdWYTY3NGlyZTlyYXhYMWJaVldaVEhML040LzVnNEdTR0R1ekwxejc1MDVuMzg0ek13NTU4dk0vWEsyM3prSERJR2ppemhQRjNGZTBEb01JRUVMeUdkMFBvT3dhQUF1Y1Y1YWgwVzVWUEI2a0xyeUdXT0lBRkNiL3ZTakVxZ0crdXp3S3dnZHdDMTBVQ2ZWL0RzWWhmbUxNVVFXVVJ1TEVrWUQ4eEVPMnY3R2pvWndQc3hIV014aElFdWxsSzVzNnN4bmpDR3loQzdnSkpSVzRDU2daeFAwbkg0Smk1aVU4N2pmR2czR0VMNmpUUXdFNWdHamtXN2ZkK3FHU0xLV0lzcGtNbS83SU5QZ1lBemhFMnBUUWgrcXNLZ0MrZ0x1VGJCcmVpdXdtSFlhWkRxZmVpcllBQmhEZUk0cVFpTVhBd3NRRHZQQUJEMmxOeUxVczRuYnhTYWV1V3BERW1NSUQ5RWJPUUZvUlRodCs0ditHQ0w1NTdOQXVjUjRLaTNCaGwwd2h2QUFiZUFRTEd4Z0FtRDVhb0x1NmNTZml2QUxsRXFKOFk1TDZZYWRNSWJJQUxVcHBvaHJFV1lqN0wzOWpld2FJcG5lakxLUXZXbVVjV3hMNlI5ZzJBVmppRFRSdVl6Q29nWDRCcEE5RTNSUDkveiszNEdaVXNiS1hxUWJkb014aEV1MGdhTVJtbEhPOXZBQi82T1RPdGtEUXlUU3lpTW81UkxqdFo3K0hZYWVzWUlXRUJYVVpqK2RTeXZ3UE1yWkhoVzdFV0VpbjNFYVV6a1ZvUlQ0bXljbEMrZGc4Ykl1WmFYZXdvR2VsSmtIbUJaaUQ2aE5JVVdNUjJrQUR2Q29WZGlLc0pqNHJ1c0p1cHdTUHFNS3FFS2M5WXZleWttOXprMUFFd2ZTTEtXMFkrZ1ZZNGpkb1BXY2cwVUx3bEhiWDh6Y0VHc1J5bVRhN2xlY3RZbUJGRGtyM095d3hwMk9JWkxwRFFoVDVUb2UyRjNkK1l3eFJBL29IQVpCdDdCc2IxcUZGeW1nWENyZHhTVHBJczRFV2hDTzNhWE05TFdzbzRDWVhNTWJiclRrQThZUTNWQ2IvZ2lWeUU1aDJaa1o0aU9FT1J5ZWZ0U3EybGdNWURUS2ZPQWdqM1Ixb054Q0lYVXkwWVNaSnpHR3dIbmdMT2VCNnlrc083MEhML0hBaVhmN0duUVovV252d2JEcGF3U2NNUFA5VEpnNUdFT2dzMU1JeTNiL3NLMGpUa3hxL09tU2FDdURVQnFRN1R2dHZPald2WWhRTHRma2Q1aDUzaHBDYlJkaDJhay9WQnRRS3FTRzMzZ3F0aGUwbFhPQUZ1QW9EOWRFMWxKQW1mdzBQOFBNODg0UWFsTUN6clJtcW1IWmUzNlFOaUUwOFRuTlltZDNXbE50Q3RtWDhZZ3pMZHk3UmpmcFJKaDVFUTN5ay93S004OGJReWdJZFZ5TXhRTFVaVmgyNys5M290eUpNRk5xK0lmWG10MmdpOWlQUW1ZQjF5RVVibjhqTTNPOGgxTERSRmFKb0o0S0RpbDVZUWl0NVFRa2c3RHNubDk3Rkl0eXFlWlZUOFZtaUM1aEtFb3o0aHhyNDAxWDZsbVVtRnpEMHg1S0RTVTViUWl0NFJDS3NORU13N0ozZk8wdGxCcVp5UnFQNVhxS0xtWVVRZ3ZpQkI5Q3B1WlE0RjQ2cUpKSmZPQ3AyQkNSazRaUW0ySTZQUXpMVHZ5WkNLL2VoeHVsak04OWx1d0xhbFBNL3M3M0FIdDcxRnBzUmxoSVlXNkdtZWVjSVhTRzUySFpjWVQ3RUtiSkRENzBWbTEyME9VY1FnYzI0clNVNE1YMzhoWkNqVXdJZDB2cGxwd3hoTjdBVUFwb0JzN3pjQXJ5R1pTWTFQR01oMUlEUTI5MnRyZ3FwM24ySFZrOFNwd3A4bE5lOFZCcVlFVGVFR3F6SHgzTVFyZ09uTm1Wekgvc2Q0RVoxT2JlN0lvcXdpM09JUWh3R09ERjk5V0pPTE50NDRPZGJjdVV5QnBDYlFycFlEeDRHcGE5QlZqQWwyaVNDclo2S0RkMDZISks2S1FLU1NITVBOVzB4U2JpTkxGM2RNUE1JMmtJclhGV2FMMEx5MWJnRnhRd1RXWjZ0RUVuSXVqaUZNTE0zYVlUWWVZVk1pNDdLL1plRWlsRDZFd0dFZmM4TFBzNUxNcWxqajk0cHpSNjZNMmM2VXhHN0JwbTdqYjl4V3ZyS0tSTXhyTGVPNlgrRWdsRHFPMUVlU3JWQ0gyMnY1R1pJVFlDOVdBTyswcWlOaFlITzRjeGR3OHpoMHpXYlJKUnZ4M1JDRE1QdFNIVXhtSXJvN0djSHdpOGFCWGFnVnNwWWFZNURySm5kQm45c2FqRWNzTE1JUk5ESkVtRW1mY05kNWg1YUEyaE4zUUx5L1p1R25VdFFreHMvdGREcVRtTDNzb2d4T21pWm02SVpQb0ZsSElaeHhOZWF2V0swQmxDcXhpSTFXMlFCMTYwQ2kraGxNc2NmdStwMkR4QlZ6RENpWTlLVEdKa1pvaGtlaTF4SnNzNC91cWwxa3dKalNIVXBvUXR6alFnOVBXb1ZVaHMzMXpQVWxrVDNtWTZDcWhOSVY5eFRoOFJKOHdjTWpFRUpLYTVsOUNYdVZMS1o5NHFUby9BRGFFZ1RPTml4RmtvY3YrbDlwUk9YRXZWVHAwMGhYOGdGeVgwZHZaRG1RVk1BZ295TkVReS9SNUNEYU9EWHdnTjFCQTZsUk93ZWduTFR0OFE2eERLWlk2NXVOQlA5RGFHQVl1UWJyZW5adjdiL1FtTG1JemVmcEpoMWduRUVGcnVoR1h2N3JSczkxL3FCdUpNbFhubXpLRnNvcmN6Q3B4Z1NtOWFkMFdjTVBOeDJROHp6Nm9obk83Uk5KUmFoUDQ5cW5EL3BYNE0xRlBFeldMVDZhMWlReXJvWGV4Rm5BcmdCcUMvUitPL1Q3Q1lReEdMc3hrR2t2VVdRaXM0emprTjc0d2VWYVJ1aUVSWWRoR1ZZdk4vZm1nMXVFT1hjd2lGUG9XWlg1R2RNUFBBeGhCYXlTaUVWdURycmcyaFBJb3dSZWJsUnNoeHJxRjNjd0pkenRqUXV6V2tSMUhLWmJTL1czYURIVlRiRkxPWmF4SG1BRi9hUVZIUFg4eGJXTlJJUTI1dFNzbEZWQkh1OWlITUhPNmtpSmxTNmsrWWVlRFRyZ0JheGFIQUxHQUMwbU5UbTlpMldFeWoyTG0zYlRHWDBlV1VVSnppYWVhcHB6ZWgxSE1veStRc2I4ZU5vVEJFRXEzaVA1eHUxS21Pc3NURzlpNnFaRUh1Ym16UEIvUTJCbExNUE5URE1ITjRFNHNLdVpRSHZkSVpLa09BTXhNMW5URUlGMk5oeXp4ZUNGcVR3VHYwTHI3cmhKa2ZzLzNGek0xeFAzRXE1WXJNWTlSQ1p3aEQ3cU0yRm9jN1llYVNRWmo1anVrT0xHNmhnMW9aelNmcGFqT0dNQVNHcnFZL1c3dWRaZzZadHhiQyt5ZzJGbmVrRTJadURHRUlITDJQUVhTbEVXYSt1elE4ajBXNWxQS2tHeTNHRUliUW9QZHdQc0lpaEtGQXBvYUF4S1gyRStUSDNKbXFCdGUza0dvNUU3U2NIN3JOWnpEc0NibVNCOW5LMGNCRTRKOWVGQWtjNmlhRCsydDVsU05SN3RjWTYvUjZ4OGtHZzBmSVJEcGtEQ3Zvd3hCZ01XUjNIMHM2aGloeVV1ZFF3Q3NhbzFXdjZ4YW9aekI0Z0pUeXNZd21ScHpod0crelZhOTdRMWpiRFFGUUJKUlJ4SHFOTWRZelZRYURnNHhsdll6bWZJUWZnUDk3NFROcElib3pFTGhIeTNqWWRLTU1maUNYMDBZUnc0QnlTSCtkWVUrNE53UTlHaUtCTUlJQ1h0WXBOS3JOWHVuTE1oaDJSVXBwbHl0b1JSZ0cvcHlsNWEwaEVoU2pUT2Rmdks0eFJxWWp5bURZSFhJWkc4R2Z2ZGQrR0NMSk54RGFkQXB0V3NuWDA2akhZTWc2WG8waGRzZEl1bmhkSzdCTk44b1FkaktkWlVxVnZpaXorSVRYdEpJTDA4aHZNR1NGYkxRUTNUbUNPR3UxZ2pZdDUvQU15akVZZk1IUE1jVHVHRWtCYjJpbDZVWVp3a1ZRaG9Ca04rcFRYdFZwWE9CUm1RWkRSZ1JwaUNSSG9qeWdVMm5UYXRPTk1nUkx0c2NRdlNPTXBKUFh0UXBiSjNlN0ZNVmd5Q0x1RFNFK0dTSkJDY29zK3ZDYVR1dDJacWpCa0NYQzBHWGFGZUZJNEVHdG9rMm5PbWY2R0F4WklKeUcrSUxFYkpUcFJobXlSTmdOQVZBQ3pLS0VWM1U2Mzg5eTNZWThJd3FHU0RJSStLMVcwNmJUK1ZwQUdndzVUcFFNa1VBWmliQmVxN0hWcGpoUUxZYWNJM3FHU0pEb1JtM2pWYTNtZTBHTE1lUU9VVFZFa3NFSUQra050T2tNdmhxMEdFUDBpYm9oa293a3pucXRNZDBvUTJia2lpRUErZ0d6YU9jVnJlSGNvTVVZb29rclEyamk0S2RDbjdSNHhSRGdkenJEZEtNTTduSFhRbHdkZWpOMFp5U3dYbWVhYmxSZUUzZDNHSUhiTGxOWXUwdTkwUTlsRmwyOHJETVpFYlFZUTFiWmpGTFBOaGE1eWVUT0VQdEd6aEFKbEtIQTczUW1LN1dHZzRLV1kvQVZCVmJSd1NDNURGdkd1YnVDelowaE9pTnFpQVFDaktHQURUcVRtTnFSNnY0WlVrSDVFeGFueWFXTWxURzhuMDRSN2d6UkZXbERKTmtIb1lVdW50TmFUZ3Rhak1FVDNrVzRra3M1V1VwNU9wT0MzQm5DcjgxQndYQU13aE5hWjdwUmtVWFpBdFJUd0dDNWxKVWltUjllNXM0UThad3lCQ1M3VVlXOHFYWEU5QklLZ2haa1NCRmhGVVVNbHN1d3BaU3QzaFhyQXIyZW9SU3czbFdwMFVxL2hEQkpiSjdDa0plNGF5R0tjcTZGMkpsamdTZlZacVhhSEJpMEdFUDJ5ZWN4Uk0rbzA0MkNEVnBQVEZlYmJsUStZUXpST3dOUVdsalBzenFiVTRJV1k4Z091YjVTN1FYSG9meEI2MW1wOC9oeTBHSU0vbUphaU5SSWRLTTYyYUJ6VERjcWwzRm5DTW43SUxsOVVWcll3SjkwTGljSExjYmdQYWJMbEE3SzhTaFA2UnpUamNvMVRKY3BmUkxkcUM3VGpjb2xUQXVST2ZzaXRQQVhudEhabkJTMEdFTm11RE5FZXJjSDVRZktDVmc4cFhOWnFUWUhCQzNIa0I2bWhmQVdDMkVNUld6UUJtSnFwN1ZuUFZSb013T0MxcEFKdXBxRDNYemU3USsyNXowRXJxS2pjcGI5Z0JhS2VWSWJPU1pvTWVtZ1N6aFVsN0tjWXVZRXJTVWRkQlZEOUdjOFFBZFQzZVJ6TzZoMk4rMXF6SEVLU2xuUUl0eWdOc1c2aEJnV2J5SmNUWG9uc3dTRzNzZStlaCtOV0x3QzdtK21jcmRyVENsSyt5SGZNZDltNERHZ2pTNmVvSWpIMEJ6ZGt4Q25QV2dKcWFMTEdJWFNDdEc3VjF4dExJNWdOTEFBMGcvTWRMdU5NcE14eE5zb0R3TnIyWWVIeFA3aVFkRktLb0Q3TWlnN3ZBZ2RRVXZZRTdxTVk0blRnbkptMEZyU1FlL2pMT0swSUJ5ZGFWbnVER0ZSNUdKUFVoZUovUVZyRWRya0pwN3Y3WU95a0o5cEpaZEREdDVoTGVGdElYUXArd04xeEprRTBWdEgwWlY4RFl1NUtHTzg2cDY3N3pMdG5zMkkweFVxNU5leWdBOWNLTG1lTHI1TDRnUyszRUhEMTBMb2NvcG81enJpMUNQc0U3UWV0K2hLK2lGTUE2YWo3T1hsV05XTEx0UGJDQThqdTNhRjNDQ04vRldyYUVDWmwzZ2huVkpDU01nTW9Zc1p3ZWUwQU44S1dvdGJWQkh1WlF4S0U3aWJUazJWZEF6eFJWY29UcHNzN3IwcjVKb1NGckNaVWhJNzEzSURLeHlHMEtVTXBvdEZLQmRHOFQ4YnZZc1RXVVVyK0xzM3haMGh1cmliSXVaTE14LzdJVVpzT3JXUzZ4Q2VwUHQwWDIvN29LTkJvR01JYldZQVFqVmRUSUhvUlN2clBYd0Z1QkVZVFJaK2ZWZUdrS1c4NlplUTdYVXM1R21keG5MZ1dyL3J5Z29CZFpuVXhtSkE1dE9RUWFHcjZjdFd5b0Fad0pleVZXODRGMTIyVVkzdzNoNC9GNFhXSW9CWkpyMkpzOWlIRjRCN2lLSVo3bUlVVzNnRHBaRXNtZ0ZDYWdoWndpZEFoYnRNL21qSm1DeTJFSG9UWDlWbVZtTHhLRVF2WkVUdjVIaTlpOGNSZmcwY0hvU0cwSjV2S2syczFtbU1SaGpsUHJNUGd0SWxDNGJRQmZURFlockNkR0F2dit2ekdyMkgvZW1pRGdsK1BTUzBoZ0RBNG5xVXM0RCthWmNSdkRsODZ6S3BJaXppWW9TRkVMMnJpblU1UlJSekhWM2hXUThKWlpjcGlUVHhEa0s5ZHdWNlZsTHErRFR0cWdzNWtVVThDYXdtaW1hNGt4RVU4UkpLQzRURERKQmxRNmhOb2JwOUxQdlNBcnpvdVpqc21HTVR5cXRlRnFoTkhLb0xXWTd3UitCVUw4dk9Cbm9IUS9SMkhuRGkycjRadEo2ZDhkMFFPcGsrT29VUldrRXJuL0F1VTdqS1RYNng2VVM1bXNTQ29ELzRZUTdsQXl6T2tocmU4S3pJaFZ4RUFYK0c2SVZsQStqdGpBZGVROXlIWldjTFg3NVVuVUpmbmNJb25jSktDdmtRZUJnb0F3NUNhTllxQnJvcFQrYnpISEN6SDFwM3JjeVRVdDZtZ085SU5TOTdVdG9YSEVPMFk3MkdFZkp4cTJmaXRKd0JLT2NpakVMNUVkQy9sNGRySDdxNEJWek9IaWt6RUg0RTdzeVVFZW1aNHpVSytiNU1aNlBIYWd4WklLTVdRaWV4djhZWXF6SGFVRDRrTWNBYnc1NW5oVVpxQlQ5MlU1Zk01MU1rOUx2UEhxZUEwNDBab290clEraGtCbW9aVjJ1TU5ncDVuOFJxNkVqY3hza0lTN1hTM1NxcU5ISS95cTljMWVNVmUyNHQxbExDZVZMTnY3T2d4dUFUN2k1dUwrY2lMTjVCV0U3Q0JKbnNvRHVBT00ydWN5bVRJT0NIYm1kektQZnlaUzZTQ3U5dXNqRUVnOXNydGZyaDVaeU1jTGxPNVlldXNzeG5JOG9zenpSa2lzVVN1cmhTSm9ZanpOdVFHY0ZQM1FrM2F6WDd1c3JUbHlYQUgvMFJsRElLMU1zTXlzUW1IckFXZzBjRWJ3ZzRoRTZhM0dRUW16Z1dFeUd3LzVXN1VLNlJXdXlBNmpmNFJCZ01BVEJCcC9FOU54bGtIcThBUzN6U3N6dmFFUzZUT2xZRVVMZkJaOEppQ0NIT2NyVmRCdkgxb1JaNDJ4OUpQYklaWVpUTVpFMFc2elJra2JBWUFvVEQyY3hjVjFsc3RqZ2h3OW5nWXl4R1NDMi95MUo5aGdBSWp5RVNUTmJwbk80bWc4empRZUFYUHVsSjhnN0NxVEl6OElHOHdXZkNaZ2lMT0xlcjdYS1RTeWVUZ1gvNUk0bjFGSEM2MUxMQnAvSU5JU0pzaGdBWXdtWnEzV1J3RGtTYjZZT1c1eWppVEpuSjM5TXRRQnM0eWt0QkJuOEpveUVBcXJTYUUxemxLT1lXNENrUE5UekdYcHd0TmZ3ajNRTDBScVlqVkhxb3llQXpZVFZFSVhIdTBLdFREdzBSbXpnRlhJTTNheE8vQWk2UTZYeWFiZ0hhd0d6bjFBaERoQWlySVFDT1lRQlZiakxJSEY1RjBvaVAycEc3Z1V2RVpsczZtVlVSYmFBRmNkZnRNNFNETUJzQ29GYW51enlEZEFzMjhEOXAxU1kwaWMwNHNlbE1KN3V1cG9CNTNBN0UwcXJmRURoaE4wUWY0QTY5SlBXalNhU1pyVTVFYk9vSWlsSXBOdFZ1QlNiUjFSVHdaKzRDeHFkYmhpRjR3bTRJVUU3aTYweDJrMFhtOFJEQ3oxUDhlQmN3UVdaemszdHhDZFNtbUQrekJtRk11bVVZd2tINERRRWdOR2cxUjdyS0U2Y2MyTFNIVDMxT1lyeHdaN3JTMUthRVF0cUFINlZiaGlFOFJNTVFVSUp5bTVzamJHUWVIOEp1dTBEL3dtS0V6T2IrZEVYcEF2bzVabkFWbUdnSUwxRXhCTUIzcWVhbnJuSTBjQnZ3WkEvdkpJNklzWHQ4THlYVVpnRGJXQWVjblc0Wmh2QVJKVU9Bc2tCbjhOVlVQeTZKVFR3VFNIU05raVNPaUxGNUtXMFpOZ2RTd0g4REo2ZGJoaUdjUk1zUXNEZGQzT29tZzh4bEE3RFErZXZyeFBtTzJMeVZyZ0MxT1pnQ0hpR0NwMnNiOWt6VURBRndnVlp6aGFzY2hjeEZ1WnNDVHBlR0ZPNmQ2QVdkeTJGWVBBRW1QaWxYQ2ZVcGFydWhWV3RZNXd5Yzk0aXo2and1a3dyVlpqQngxa0hxWFRaRDlJaGlDd0d3UDhyaWJGV21jeGlHeFdNWU0rUThVVFVFS0tWNkF4ZjVYbzNOOGNSNUhEalU3N29Nd1JOZFF5UllwamI3K1ZXNHp1WkVoSWVCQS95cXd4QXVvbTZJZzltV2ZzakY3dERabklueUNQaG5PRVA0aUxvaFFMaEtxem5QeXlLMW52T0o4eUJadmdIVEVEelJOd1NBc0Z5cnZIbDQxZVlIS1BjRGZiMG96eEF0Y3NNUThEVUt1VEhUUXJTT3k0QmZrZ2c3TitRaHVXSUlnR3QxQm1la20xbHRya2E0bCtpdXpSZzhJSmNNWWFIY3BsUGNkM1cwamtuQXJlVFc5MkZJZzF4N0FBWlQ0dTRBWXExak9zSlNOQVEzV2hzQ0o5Y01BY3BVcmVYRWxENDZpM293SjJQa01HK2cvTkpOQm5lRzZPSnhKUFJubXhZUTV3NjFlNy9pUzBGMEZxMG9kZGtVWnNnYW00QnFDamxPUnJzN2Z0VFZBRktXOFRmZyt6cUZFY1JwQVpjblltU1A0YlJ6QTFDLzh4dHFZOUhKQ3BTZkJLREw0Qzl4NEQ2S21DcWw2UjB3bDFhWFNacFp4MWFPUXlrbjZQdmVla09vMFZxR2QzOUpMNkdBVHU1RWpCbHlEdUZSTEk2VEt4aWJyaGtnZ3pHRXJLQkRGdE5LSjBjQWkwbWNYaEVtaW9semo5cUpWbEJ0aWhuS2FvUXJneFptOEpTM0VFcmxDczZSeTNrbDA4SXlIbFRMTWo2U1ZtSUl3NEdITWkzUFk0NmpnM0tkVEI4NldRUCtSOGNhc3NabW9KNU9oc3NWM2wxZzQ5a2lsTFN3SGpoUFkxeUNNQjg0M0t1eU0wS1l6VDVjQkp3U3RCU0RKeWh3TDUxVXlUZys4THB3ejZkZHBaVTFER0FJUWpud2lkZmxwMEZmakJseWhXZFJUcE94alBYRERPRFRPb1RZdEVzenJSUXhERmdCNXRwYVEwYThoM0lsWXpoSnJ1UnBQeXZ5ZFdGTzVyTlJtcGtJbkFUOHdjKzZERG5KVnFDSnZneVZxMWdwZ3ZwZFlWWUMyYVNaNXhTK1F3VVhBd3VBdzdKUnJ5SFNyRVdaTEZmeDEyeFdtclhRRFFHVlJhemhNNzZKVUUvQy9RYkR6cnlBY29aY3hTZ1psMTB6UUFDeFRMS0NMYklRbXdJR0E2dkEvMmJRRUFrK0FzcnB4N2RsSEU4RUpTS3c0RDZaejd0eUUyT0JVeEJ6M1cwZTB3RXNwcDBqWkJ5dFVocnNBbS9nMGE2eWtHZm94Mm5PQ25KS0I0OFpjb1oxd0xFeW5waE1ERWNJVU9DR2dNU0ZpYktBbFNoSE9PT0x6L2VZeVJCbE5tQnhvWXpuWEJuUEcwR0w2VTRvREpGRUZySlo1bU5Ud0ZHSWQ4dnhodER3TWNway9zNVJNbzdmQkMybUowSzVmMWdhZVFzbzFXck9kc0xNaCs4cGp5SDh5SVRNRDRMd20xQzFFRHNqalR4S0NjY2pUSVQwUTNvTmhsUUp0U0VBeEtaVEdsbUJNQVNsQ1dnUFdwTWhkd205SVpKSUk1dGtQdFhFT1JyQzJmODBSSi9JR0NLSnpHZUROSEloY0M2RWE0YkNFSDBpWjRnazBzZzZQdUpZSjh3OEZIUFlodWdUV1VPQXM0MTFIcTNBRWM0RkttSGJ4bXFJR0pFMlJCSzVrWS9rUm1MRU9SRjRQR2c5aHVpU0U0WklJbzI4S1BNNEUvZ0I4SGJRZWd6Ukk2Y01rVVFhYUdNTDMwS3BCajROV284aE91U2tJUUNrbWEweWp5WUtHWXFhYmF5RzFNaFpReVFSbTQzU3dFU1VreENlQ2xwUHhQZ3Y0dHN2dmM4TGN0NFFTYVNCNTVqTjZRaWx3RHRCNndrNWJ3TG55eVQrVXlibjExZ3Nid3dCempiVzJheWhnR0Vrem4zZEZyU21rUEV4U2puL1pMaE00cmRCaXdtQ3ZESkVFckhaSXJPeHNSZ0VyQ0lMcHptRW5FNWdCVVVNa2NtMGlrMW4wSUtDSWk4TmtVUnMzcFhaaktXTHM0Q1hndFlUQ01vanhEbE9Kak5SSnZMUG9PVUVUVjRiSW9uTTRmY0lKK1RaTnRhL0lKUktHU01reG10Qml3a0x4aEFPWWhNWG01WEFrWkRUMjFnL1E2a0hoc3Rrc3l0eFo0d2hka0pzUGhNYm13S0dRMDQ5TUhGZ0ZjcVJFc09Xc3B3MWZFYUVjZ3RwR0pCYS9nS1VhajNuQU0xRWV4dnJNeWd4S2VlWm9JV0VIZE5DN0FHWnhTTW94ME1rdDdHK0MxeEpqRk9NR1ZMREdDSUZ4S1pUNmxoQm5LRWtia3NLKzdUa0ZxQ2VPSU9sUER1SEJPY0t4aEF1RUp1UHBZNFlCUXhIZVRCb1BUMmd3QnE2K0taTXdaWUtjMzZ1Vzh3WUlnMmtoamVCQzNRT0kwaTBHTU1DbGdUQzgwQk1wcGhyQnpMQnRCQVpJTFdzNDhzY0UvQnRyTzhqVE9UZmZOdVlJWE9NSVRKRUp0SWh0YlJpY1FTUzFXMnM3Y0JpaWhncVUxZ2h0Z2x2OXdKakNJK1FHajZTR21MQXQ4SDM0OXpYWWpGTXBoS1RzbERjNDVjem1ER0V4OGdNWGdETzBMbU13cUxWNCtMZlJEaGJwdktZeCtVYURQNmpOaVhheUJsQjZ6Q2t6djhEUWQ3UXJNYkxSMUFBQUFBQVNVVk9SSzVDWUlJPSI+CjxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbiIgaHJlZj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFNUUFBQURFQ0FZQUFBREFwbzVyQUFBQUJITkNTVlFJQ0FnSWZBaGtpQUFBQUFsd1NGbHpBQUJhYmdBQVdtNEJ4V3NqT0FBQUFCbDBSVmgwVTI5bWRIZGhjbVVBZDNkM0xtbHVhM05qWVhCbExtOXlaNXZ1UEJvQUFCbDBTVVJCVkhpYzdaMTVlRlRWM2NjL3Y1c0ZDVlJ4cVZ0cHRWVzJWbHhmNjFxdGlxMEw5R2w5TlhVQkZFcEZSVEloaEJBRENUZEFNQUVrQ1lzSzdxQjkra0Q3MnFmQldpdnFXN1ZhNjc0aXJlOXJheFgxYlpWV1pUSEwvTjQvNWc0R1NHRHV6TDF6NzUwNW4zODR6TXc1NTh2TS9YSzIzemtIRElHaml6aFBGM0ZlMERvTUlFRUx5R2QwUG9Pd2FBQXVjVjVhaDBXNVZQQjZrTHJ5R1dPSUFGQ2IvdlNqRXFnRyt1endLd2dkd0MxMFVDZlYvRHNZaGZtTE1VUVdVUnVMRWtZRDh4RU8ydjdHam9ad1BzeEhXTXhoSUV1bGxLNXM2c3huakNHeWhDN2dKSlJXNENTZ1p4UDBuSDRKaTVpVTg3amZHZzNHRUw2alRRd0U1Z0dqa1c3ZmQrcUdTTEtXSXNwa01tLzdJTlBnWUF6aEUycFRRaCtxc0tnQytnTHVUYkJyZWl1d21IWWFaRHFmZWlyWUFCaERlSTRxUWlNWEF3c1FEdlBBQkQybE55TFVzNG5ieFNhZXVXcERFbU1JRDlFYk9RRm9SVGh0KzR2K0dDTDU1N05BdWNSNEtpM0JobDB3aHZBQWJlQVFMR3hnQW1ENWFvTHU2Y1NmaXZBTGxFcUo4WTVMNllhZE1JYklBTFVwcG9ockVXWWo3TDM5amV3YUlwbmVqTEtRdldtVWNXeEw2UjlnMkFWamlEVFJ1WXpDb2dYNEJwQTlFM1JQOS96KzM0R1pVc2JLWHFRYmRvTXhoRXUwZ2FNUm1sSE85dkFCLzZPVE90a0RReVRTeWlNbzVSTGp0WjcrSFlhZXNZSVdFQlhVWmorZFN5dndQTXJaSGhXN0VXRWluM0VhVXprVm9SVDRteWNsQytkZzhiSXVaYVhld29HZWxKa0htQlppRDZoTklVV01SMmtBRHZDb1ZkaUtzSmo0cnVzSnVwd1NQcU1LcUVLYzlZdmV5a205emsxQUV3ZlNMS1cwWStnVlk0amRvUFdjZzBVTHdsSGJYOHpjRUdzUnltVGE3bGVjdFltQkZEa3IzT3l3eHAyT0laTHBEUWhUNVRvZTJGM2QrWXd4UkEvb0hBWkJ0N0JzYjFxRkZ5bWdYQ3JkeFNUcElzNEVXaENPM2FYTTlMV3NvNENZWE1NYmJyVGtBOFlRM1ZDYi9naVZ5RTVoMlprWjRpT0VPUnllZnRTcTJsZ01ZRFRLZk9BZ2ozUjFvTnhDSVhVeTBZU1pKekdHd0huZ0xPZUI2eWtzTzcwSEwvSEFpWGY3R25RWi9XbnZ3YkRwYXdTY01QUDlUSmc1R0VPZ3MxTUl5M2Ivc0swalRreHEvT21TYUN1RFVCcVE3VHZ0dk9qV3ZZaFFMdGZrZDVoNTNocENiUmRoMmFrL1ZCdFFLcVNHMzNncXRoZTBsWE9BRnVBb0Q5ZEUxbEpBbWZ3MFA4UE04ODRRYWxNQ3pyUm1xbUhaZTM2UU5pRTA4VG5OWW1kM1dsTnRDdG1YOFlnekxkeTdSamZwUkpoNUVRM3lrL3dLTTg4YlF5Z0lkVnlNeFFMVVpWaDI3Kzkzb3R5Sk1GTnErSWZYbXQyZ2k5aVBRbVlCMXlFVWJuOGpNM084aDFMRFJGYUpvSjRLRGlsNVlRaXQ1UVFrZzdEc25sOTdGSXR5cWVaVlQ4Vm1pQzVoS0VvejRoeHI0MDFYNmxtVW1GekQweDVLRFNVNWJRaXQ0UkNLc05FTXc3SjNmTzB0bEJxWnlScVA1WHFLTG1ZVVFndmlCQjlDcHVaUTRGNDZxSkpKZk9DcDJCQ1JrNFpRbTJJNlBRekxUdnlaQ0svZWh4dWxqTTg5bHV3TGFsUE0vczczQUh0NzFGcHNSbGhJWVc2R21lZWNJWFNHNTJIWmNZVDdFS2JKREQ3MFZtMTIwT1VjUWdjMjRyU1U0TVgzOGhaQ2pVd0lkMHZwbHB3eGhON0FVQXBvQnM3emNBcnlHWlNZMVBHTWgxSURRMjkydHJncXAzbjJIVms4U3B3cDhsTmU4VkJxWUVUZUVHcXpIeDNNUXJnT25ObVZ6SC9zZDRFWjFPYmU3SW9xd2kzT0lRaHdHT0RGOTlXSk9MTnQ0NE9kYmN1VXlCcENiUXJwWUR4NEdwYTlCVmpBbDJpU0NyWjZLRGQwNkhKSzZLUUtTU0hNUE5XMHhTYmlOTEYzZE1QTUkya0lyWEZXYUwwTHkxYmdGeFF3VFdaNnRFRW5JdWppRk1MTTNhWVRZZVlWTWk0N0svWmVFaWxENkV3R0VmYzhMUHM1TE1xbGpqOTRwelI2Nk0yYzZVeEc3QnBtN2piOXhXdnJLS1JNeHJMZU82WCtFZ2xEcU8xRWVTclZDSDIydjVHWklUWUM5V0FPKzBxaU5oWUhPNGN4ZHc4emgweldiUkpSdngzUkNETVB0U0hVeG1Jcm83R2NId2k4YUJYYWdWc3BZYVk1RHJKbmRCbjlzYWpFY3NMTUlSTkRKRW1FbWZjTmQ1aDVhQTJoTjNRTHkvWnVHblV0UWt4cy90ZERxVG1MM3NvZ3hPbWlabTZJWlBvRmxISVp4eE5lYXZXSzBCbENxeGlJMVcyUUIxNjBDaStobE1zY2Z1K3AyRHhCVnpEQ2lZOUtUR0prWm9oa2VpMXhKc3M0L3VxbDFrd0pqU0hVcG9RdHpqUWc5UFdvVlVoczMxelBVbGtUM21ZNkNxaE5JVjl4VGg4Uko4d2NNakVFSkthNWw5Q1h1VkxLWjk0cVRvL0FEYUVnVE9OaXhGa29jditsOXBST1hFdlZUcDAwaFg4Z0Z5WDBkdlpEbVFWTUFnb3lORVF5L1I1Q0RhT0RYd2dOMUJBNmxST3dlZ25MVHQ4UTZ4REtaWTY1dU5CUDlEYUdBWXVRYnJlblp2N2IvUW1MbUl6ZWZwSmgxZ25FRUZydWhHWHY3clJzOTEvcUJ1Sk1sWG5tektGc29yY3pDcHhnU205YWQwV2NNUE54MlE4eno2b2huTzdSTkpSYWhQNDlxbkQvcFg0TTFGUEV6V0xUNmExaVF5cm9YZXhGbkFyZ0JxQy9SK08vVDdDWVF4R0xzeGtHa3ZVV1FpczR6amtONzR3ZVZhUnVpRVJZZGhHVll2Ti9mbWcxdUVPWGN3aUZQb1daWDVHZE1QUEF4aEJheVNpRVZ1RHJyZzJoUElvd1JlYmxSc2h4cnFGM2N3SmR6dGpRdXpXa1IxSEtaYlMvVzNhREhWVGJGTE9aYXhIbUFGL2FRVkhQWDh4YldOUklRMjV0U3NsRlZCSHU5aUhNSE82a2lKbFM2aytZZWVEVHJnQmF4YUhBTEdBQzBtTlRtOWkyV0V5ajJMbTNiVEdYMGVXVVVKemlhZWFwcHplaDFITW95K1FzYjhlTm9UQkVFcTNpUDV4dTFLbU9zc1RHOWk2cVpFSHVibXpQQi9RMkJsTE1QTlRETUhONEU0c0t1WlFIdmRJWktrT0FNeE0xblRFSUYyTmh5enhlQ0ZxVHdUdjBMcjdyaEprZnMvM0Z6TTF4UDNFcTVZck1ZOVJDWndoRDdxTTJGb2M3WWVhU1FaajVqdWtPTEc2aGcxb1p6U2ZwYWpPR01BU0dycVkvVzd1ZFpnNlp0eGJDK3lnMkZuZWtFMlp1REdFSUhMMlBRWFNsRVdhK3V6UThqMFc1bFBLa0d5M0dFSWJRb1Bkd1BzSWloS0ZBcG9hQXhLWDJFK1RIM0ptcUJ0ZTNrR281RTdTY0g3ck5aekRzQ2JtU0I5bkswY0JFNEo5ZUZBa2M2aWFEKzJ0NWxTTlI3dGNZNi9SNng4a0dnMGZJUkRwa0RDdm93eEJnTVdSM0gwczZoaWh5VXVkUXdDc2FvMVd2Nnhhb1p6QjRnSlR5c1l3bVJwemh3Ryt6VmE5N1ExamJEUUZRQkpSUnhIcU5NZFl6VlFhRGc0eGx2WXptZklRZmdQOTc0VE5wSWJvekVMaEh5M2pZZEtNTWZpQ1gwMFlSdzRCeVNIK2RZVSs0TndROUdpS0JNSUlDWHRZcE5Lck5YdW5MTWhoMlJVcHBseXRvUlJnRy9weWw1YTBoRWhTalRPZGZ2SzR4UnFZanltRFlIWElaRzhHZnZkZCtHQ0xKTnhEYWRBcHRXc25YMDZqSFlNZzZYbzBoZHNkSXVuaGRLN0JOTjhvUWRqS2RaVXFWdmlpeitJVFh0SklMMDhodk1HU0ZiTFFRM1RtQ09HdTFnall0NS9BTXlqRVlmTUhQTWNUdUdFa0JiMmlsNlVZWndrVlFob0JrTitwVFh0VnBYT0JSbVFaRFJnUnBpQ1JIb2p5Z1UyblRhdE9OTWdSTHRzY1F2U09NcEpQWHRRcGJKM2U3Rk1WZ3lDTHVEU0UrR1NKQkNjb3MrdkNhVHV0MlpxakJrQ1hDMEdYYUZlRkk0RUd0b2sybk9tZjZHQXhaSUp5RytJTEViSlRwUmhteVJOZ05BVkFDektLRVYzVTYzODl5M1lZOEl3cUdTRElJK0sxVzA2YlQrVnBBR2d3NVRwUU1rVUFaaWJCZXE3SFZwamhRTFlhY0kzcUdTSkRvUm0zalZhM21lMEdMTWVRT1VUVkVrc0VJRCtrTnRPa012aHEwR0VQMGlib2hrb3drem5xdE1kMG9RMmJraWlFQStnR3phT2NWcmVIY29NVVlvb2tyUTJqaTRLZENuN1I0eFJEZ2R6ckRkS01NN25IWFFsd2Rlak4wWnlTd1htZWFibFJlRTNkM0dJSGJMbE5ZdTB1OTBROWxGbDI4ckRNWkViUVlRMWJaakZMUE5oYTV5ZVRPRVB0R3poQUpsS0hBNzNRbUs3V0dnNEtXWS9BVkJWYlJ3U0M1REZ2R3VidUN6WjBoT2lOcWlBUUNqS0dBRFRxVG1OcVI2djRaVWtINUV4YW55YVdNbFRHOG4wNFI3Z3pSRldsREpOa0hvWVV1bnROYVRndGFqTUVUM2tXNGtrczVXVXA1T3BPQzNCbkNyODFCd1hBTXdoTmFaN3BSa1VYWkF0UlR3R0M1bEpVaW1SOWU1czRROFp3eUJDUzdVWVc4cVhYRTlCSUtnaFprU0JGaEZVVU1sc3V3cFpTdDNoWHJBcjJlb1JTdzNsV3AwVXEvaERCSmJKN0NrSmU0YXlHS2NxNkYySmxqZ1NmVlpxWGFIQmkwR0VQMnllY3hSTStvMDQyQ0RWcFBURmViYmxRK1lRelJPd05RV2xqUHN6cWJVNElXWThnT3ViNVM3UVhIb2Z4QjYxbXA4L2h5MEdJTS9tSmFpTlJJZEtNNjJhQnpURGNxbDNGbkNNbjdJTGw5VVZyWXdKOTBMaWNITGNiZ1BhYkxsQTdLOFNoUDZSelRqY28xVEpjcGZSTGRxQzdUamNvbFRBdVJPZnNpdFBBWG50SFpuQlMwR0VObXVETkVlcmNINVFmS0NWZzhwWE5acVRZSEJDM0hrQjZtaGZBV0MyRU1SV3pRQm1KcXA3Vm5QVlJvTXdPQzFwQUp1cHFEM1h6ZTdRKzI1ejBFcnFLamNwYjlnQmFLZVZJYk9TWm9NZW1nU3poVWw3S2NZdVlFclNVZGRCVkQ5R2M4UUFkVDNlUnpPNmgyTisxcXpIRUtTbG5RSXR5Z05zVzZoQmdXYnlKY1RYb25zd1NHM3NlK2VoK05XTHdDN20rbWNyZHJUQ2xLK3lIZk1kOW00REdnalM2ZW9JakgwQnpka3hDblBXZ0pxYUxMR0lYU0N0RzdWMXh0TEk1Z05MQUEwZy9NZEx1Tk1wTXh4TnNvRHdOcjJZZUh4UDdpUWRGS0tvRDdNaWc3dkFnZFFVdllFN3FNWTRuVGduSm0wRnJTUWUvakxPSzBJQnlkYVZudURHRlI1R0pQVWhlSi9RVnJFZHJrSnA3djdZT3lrSjlwSlpkRER0NWhMZUZ0SVhRcCt3TjF4SmtFMFZ0SDBaVjhEWXU1S0dPODZwNjc3ekx0bnMySTB4VXE1TmV5Z0E5Y0tMbWVMcjVMNGdTKzNFSEQxMExvY29wbzV6cmkxQ1BzRTdRZXQraEsraUZNQTZhajdPWGxXTldMTHRQYkNBOGp1M2FGM0NDTi9GV3JhRUNabDNnaG5WSkNTTWdNb1lzWndlZTBBTjhLV290YlZCSHVaUXhLRTdpYlRrMlZkQXp4UlZjb1Rwc3M3cjByNUpvU0ZyQ1pVaEk3MTNJREt4eUcwS1VNcG90RktCZEc4VDhidllzVFdVVXIrTHMzeFowaHVyaWJJdVpMTXgvN0lVWnNPcldTNnhDZXBQdDBYMi83b0tOQm9HTUliV1lBUWpWZFRJSG9SU3ZyUFh3RnVCRVlUUlorZlZlR2tLVzg2WmVRN1hVczVHbWR4bkxnV3Ivcnlnb0JkWm5VeG1KQTV0T1FRYUdyNmN0V3lvQVp3SmV5Vlc4NEYxMjJVWTN3M2g0L0Y0WFdJb0JaSnIySnM5aUhGNEI3aUtJWjdtSVVXM2dEcFpFc21nRkNhZ2had2lkQWhidE0vbWpKbUN5MkVIb1RYOVZtVm1MeEtFUXZaRVR2NUhpOWk4Y1JmZzBjSG9TRzBKNXZLazJzMW1tTVJoamxQck1QZ3RJbEM0YlFCZlREWWhyQ2RHQXZ2K3Z6R3IySC9lbWlEZ2wrUFNTMGhnREE0bnFVczREK2FaY1J2RGw4NnpLcElpemlZb1NGRUwycmluVTVSUlJ6SFYzaFdROEpaWmNwaVRUeERrSzlkd1Y2VmxMcStEVHRxZ3M1a1VVOENhd21pbWE0a3hFVThSSktDNFREREpCbFE2aE5vYnA5TFB2U0Fyem91WmpzbUdNVHlxdGVGcWhOSEtvTFdZN3dSK0JVTDh2T0Jub0hRL1IySG5EaTJyNFp0SjZkOGQwUU9waytPb1VSV2tFcm4vQXVVN2pLVFg2eDZVUzVtc1NDb0QvNFlRN2xBeXpPa2hyZThLekloVnhFQVgrRzZJVmxBK2p0akFkZVE5eUhaV2NMWDc1VW5VSmZuY0lvbmNKS0N2a1FlQmdvQXc1Q2FOWXFCcm9wVCtiekhIQ3pIMXAzcmN5VFV0Nm1nTzlJTlM5N1V0b1hIRU8wWTcyR0VmSnhxMmZpdEp3QktPY2lqRUw1RWRDL2w0ZHJIN3E0QlZ6T0hpa3pFSDRFN3N5VUVlbVo0elVLK2I1TVo2UEhhZ3haSUtNV1FpZXh2OFlZcXpIYVVENGtNY0FidzU1bmhVWnFCVDkyVTVmTTUxTWs5THZQSHFlQTA0MFpvb3RyUStoa0Jtb1pWMnVNTmdwNW44UnE2RWpjeHNrSVM3WFMzU3FxTkhJL3lxOWMxZU1WZTI0dDFsTENlVkxOdjdPZ3h1QVQ3aTV1TCtjaUxONUJXRTdDQkpuc29EdUFPTTJ1Y3ltVElPQ0hibWR6S1BmeVpTNlNDdTl1c2pFRWc5c3J0ZnJoNVp5TWNMbE81WWV1c3N4bkk4b3N6elJraXNVU3VyaFNKb1lqek51UUdjRlAzUWszYXpYN3VzclRseVhBSC8wUmxESUsxTXNNeXNRbUhyQVdnMGNFYndnNGhFNmEzR1FRbXpnV0V5R3cvNVc3VUs2Uld1eUE2amY0UkJnTUFUQkJwL0U5Tnhsa0hxOEFTM3pTc3p2YUVTNlRPbFlFVUxmQlo4SmlDQ0hPY3JWZEJ2SDFvUlo0Mng5SlBiSVpZWlRNWkUwVzZ6UmtrYkFZQW9URDJjeGNWMWxzdGpnaHc5bmdZeXhHU0MyL3kxSjloZ0FJanlFU1ROYnBuTzRtZzh6alFlQVhQdWxKOGc3Q3FUSXo4SUc4d1dmQ1pnaUxPTGVyN1hLVFN5ZVRnWC81STRuMUZIQzYxTExCcC9JTklTSnNoZ0FZd21acTNXUndEa1NiNllPVzV5amlUSm5KMzlNdFFCczR5a3RCQm44Sm95RUFxclNhRTF6bEtPWVc0Q2tQTlR6R1hwd3ROZndqM1FMMFJxWWpWSHFveWVBellUVkVJWEh1MEt0VER3MFJtemdGWElNM2F4Ty9BaTZRNlh5YWJnSGF3R3puMUFoRGhBaXJJUUNPWVFCVmJqTElIRjVGMG9pUDJwRzdnVXZFWmxzNm1WVVJiYUFGY2RmdE00U0RNQnNDb0ZhbnV6eURkQXMyOEQ5cDFTWTBpYzA0c2VsTUo3dXVwb0I1M0E3RTBxcmZFRGhoTjBRZjRBNjlKUFdqU2FTWnJVNUViT29JaWxJcE50VnVCU2JSMVJUd1orNEN4cWRiaGlGNHdtNElVRTdpNjB4MmswWG04UkRDejFQOGVCY3dRV1p6azN0eENkU21tRCt6Qm1GTXVtVVl3a0g0RFFFZ05HZzFSN3JLRTZjYzJMU0hUMzFPWXJ4d1o3clMxS2FFUXRxQUg2VmJoaUU4Uk1NUVVJSnltNXNqYkdRZUg4SnV1MEQvd21LRXpPYitkRVhwQXZvNVpuQVZtR2dJTDFFeEJNQjNxZWFucm5JMGNCdndaQS92Skk2SXNYdDhMeVhVWmdEYldBZWNuVzRaaHZBUkpVT0Fza0JuOE5WVVB5NkpUVHdUU0hTTmtpU09pTEY1S1cwWk5nZFN3SDhESjZkYmhpR2NSTXNRc0RkZDNPb21nOHhsQTdEUStldnJ4UG1PMkx5VnJnQzFPWmdDSGlHQ3Ayc2I5a3pVREFGd2dWWnpoYXNjaGN4RnVac0NUcGVHRk82ZDZBV2R5MkZZUEFFbVBpbFhDZlVwYXJ1aFZXdFk1d3ljOTRpejZqd3Vrd3JWWmpCeDFrSHFYVFpEOUloaUN3R3dQOHJpYkZXbWN4aUd4V01ZTStROFVUVUVLS1Y2QXhmNVhvM044Y1I1SERqVTc3b013Uk5kUXlSWXBqYjcrVlc0enVaRWhJZUJBL3lxd3hBdW9tNklnOW1XZnNqRjd0RFpuSW55Q1Bobk9FUDRpTG9oUUxoS3F6blB5eUsxbnZPSjh5Qlp2Z0hURUR6Uk53U0FzRnlydkhsNDFlWUhLUGNEZmIwb3p4QXRjc01ROERVS3VUSFRRclNPeTRCZmtnZzdOK1FodVdJSWdHdDFCbWVrbTFsdHJrYTRsK2l1elJnOElKY01ZYUhjcGxQY2QzVzBqa25BcmVUVzkyRklnMXg3QUFaVDR1NEFZcTFqT3NKU05BUTNXaHNDSjljTUFjcFVyZVhFbEQ0Nmkzb3dKMlBrTUcrZy9OSk5CbmVHNk9KeEpQUm5teFlRNXc2MWU3L2lTMEYwRnEwb2Rka1Vac2dhbTRCcUNqbE9ScnM3ZnRUVkFGS1c4VGZnK3pxRkVjUnBBWmNuWW1TUDRiUnpBMUMvOHh0cVk5SEpDcFNmQktETDRDOXg0RDZLbUNxbDZSMHdsMWFYU1pwWngxYU9ReWtuNlB2ZWVrT28wVnFHZDM5Skw2R0FUdTVFakJseUR1RlJMSTZUS3hpYnJoa2dnekdFcktCREZ0TktKMGNBaTBtY1hoRW1pb2x6ajlxSlZsQnRpaG5LYW9Rcmd4Wm04SlMzRUVybENzNlJ5M2tsMDhJeUhsVExNajZTVm1JSXc0R0hNaTNQWTQ2amczS2RUQjg2V1FQK1I4Y2Fzc1ptb0o1T2hzc1YzbDFnNDlraWxMU3dIamhQWTF5Q01CODQzS3V5TTBLWXpUNWNCSndTdEJTREp5aHdMNTFVeVRnKzhMcHd6NmRkcFpVMURHQUlRam53aWRmbHAwRmZqQmx5aFdkUlRwT3hqUFhERE9EVE9vVFl0RXN6clJReERGZ0I1dHBhUTBhOGgzSWxZemhKcnVScFB5dnlkV0ZPNXJOUm1wa0luQVQ4d2MrNkREbkpWcUNKdmd5VnExZ3BndnBkWVZZQzJhU1o1eFMrUXdVWEF3dUF3N0pScnlIU3JFV1pMRmZ4MTJ4V21yWFFEUUdWUmF6aE03NkpVRS9DL1FiRHpyeUFjb1pjeFNnWmwxMHpRQUN4VExLQ0xiSVFtd0lHQTZ2QS8yYlFFQWsrQXNycHg3ZGxIRThFSlNLdzRENlp6N3R5RTJPQlV4QnozVzBlMHdFc3BwMGpaQnl0VWhyc0FtL2cwYTZ5a0dmb3gybk9DbkpLQjQ4WmNvWjF3TEV5bnBoTURFY0lVT0NHZ01TRmliS0FsU2hIT09PTHovZVl5UkJsTm1CeG9Zem5YQm5QRzBHTDZVNG9ESkZFRnJKWjVtTlR3RkdJZDh2eGh0RHdNY3BrL3M1Uk1vN2ZCQzJtSjBLNWYxZ2FlUXNvMVdyT2RzTE1oKzhwanlIOHlJVE1ENEx3bTFDMUVEc2pqVHhLQ2NjalRJVDBRM29OaGxRSnRTRUF4S1pUR2xtQk1BU2xDV2dQV3BNaGR3bTlJWkpJSTV0a1B0WEVPUnJDMmY4MFJKL0lHQ0tKekdlRE5ISWhjQzZFYTRiQ0VIMGlaNGdrMHNnNlB1SllKOHc4RkhQWWh1Z1RXVU9BczQxMUhxM0FFYzRGS21IYnhtcUlHSkUyUkJLNWtZL2tSbUxFT1JGNFBHZzlodWlTRTRaSUlvMjhLUE00RS9nQjhIYlFlZ3pSSTZjTWtVUWFhR01MMzBLcEJqNE5XbzhoT3VTa0lRQ2ttYTB5anlZS0dZcWFiYXlHMU1oWlF5UVJtNDNTd0VTVWt4Q2VDbHBQeFBndjR0c3Z2YzhMY3Q0UVNhU0I1NWpONlFpbHdEdEI2d2s1YndMbnl5VCtVeWJuMTFnc2J3d0J6amJXMmF5aGdHRWt6bjNkRnJTbWtQRXhTam4vWkxoTTRyZEJpd21DdkRKRUVySFpJck94c1JnRXJDSUxwem1FbkU1Z0JVVU1rY20waWsxbjBJS0NJaThOa1VSczNwWFpqS1dMczRDWGd0WVRDTW9qeERsT0pqTlJKdkxQb09VRVRWNGJJb25NNGZjSUorVFpOdGEvSUpSS0dTTWt4bXRCaXdrTHhoQU9ZaE1YbTVYQWtaRFQyMWcvUTZrSGhzdGtzeXR4WjR3aGRrSnNQaE1ibXdLR1EwNDlNSEZnRmNxUkVzT1dzcHcxZkVhRWNndHBHSkJhL2dLVWFqM25BTTFFZXh2ck15Z3hLZWVab0lXRUhkTkM3QUdaeFNNb3gwTWt0N0crQzF4SmpGT01HVkxER0NJRnhLWlQ2bGhCbktFa2Jrc0srN1RrRnFDZU9JT2xQRHVIQk9jS3hoQXVFSnVQcFk0WUJReEhlVEJvUFQyZ3dCcTYrS1pNd1pZS2MzNnVXOHdZSWcya2hqZUJDM1FPSTBpMEdNTUNsZ1RDODBCTXBwaHJCekxCdEJBWklMV3M0OHNjRS9CdHJPOGpUT1RmZk51WUlYT01JVEpFSnRJaHRiUmljUVNTMVcyczdjQmlpaGdxVTFnaHRnbHY5d0pqQ0krUUdqNlNHbUxBdDhIMzQ5elhZakZNcGhLVHNsRGM0NWN6bURHRXg4Z01YZ0RPMExtTXdxTFY0K0xmUkRoYnB2S1l4K1VhRFA2ak5pWGF5QmxCNnpDa3p2OERRZDdRck1iTFIxQUFBQUFBU1VWT1JLNUNZSUk9Ij4KCjxzdHlsZT4KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90bycpLCBsb2NhbCgnUm9ib3RvLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by91WUVDTUtvSGNPOXgxd2RtYnlISW0zLV9rZjZCeVlPNkNMWWRCNEhRRS1ZLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8nKSwgbG9jYWwoJ1JvYm90by1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vc1RkYUE2ajBQc2I5MjBWanYtbXJ6SC1fa2Y2QnlZTzZDTFlkQjRIUUUtWS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL19WWUZ4LXM4MjRrWHFfVWwyQkhxWUgtX2tmNkJ5WU82Q0xZZEI0SFFFLVkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL3RuajRTQjZETmJkYVFuc004Q0ZxQlgtX2tmNkJ5WU82Q0xZZEI0SFFFLVkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL29NTWdmWk1RdGhPcnlRbzluMjJkY3V2dkRpbjFwSzhhS3RlTHBlWjVjMEEud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL0tzX2NWeGlDaXdVV1ZzRldGQTNCam4tX2tmNkJ5WU82Q0xZZEI0SFFFLVkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8nKSwgbG9jYWwoJ1JvYm90by1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vTko0dnhsZ1d3V2JFc3YxOGRBaHFubi1fa2Y2QnlZTzZDTFlkQjRIUUUtWS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9pc1otd2JDWE5LQWJuam82X1R3SFRvWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by83N0ZYRmpSYkd6TjRhQ3JTRmhsaDNvWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9qU04yQ0dWRGJjVnlDbmZKZmpTZGZJWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkJyksIGxvY2FsKCdSb2JvdG8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL1VYNmk0SnhRRG0zZlZUYzFDUHV3cW9YMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQnKSwgbG9jYWwoJ1JvYm90by1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vZC02SVlwbE9Gb2NDYWNLenh3WFNPSkJ3MXhVMXJLcHRKal8wamFuczkyMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by85N3VhaHhpcVpSb25jQmFDRUkzYVc0WDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMUUwMC0xRUZGLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQ0YsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQnKSwgbG9jYWwoJ1JvYm90by1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vUHdaYy1ZYklMNDE0d0I5ckIxSUFQWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1Cb2xkSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdDZOZDRjZlBSaFpQNDRRNVFBamNDMTRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tQm9sZEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL3Q2TmQ0Y2ZQUmhaUDQ0UTVRQWpjQ19acmFSMlRnOHcybHptN2tMTkwwLXcud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0N3dF9SbTY5MUxUZWJLZlkyWmtLU21JLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0MxQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0M0Z3A5UThnYllyaHFHbFJhdl9JWGZrLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMjAwMC0yMDZGLCBVKzIwNzQsIFUrMjBBQywgVSsyMjEyLCBVKzIyMTU7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0M2RThrTTR4V1IxXzFiWVVSUm9qUkdjLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMUUwMC0xRUZGLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQ0YsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tQm9sZEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL3Q2TmQ0Y2ZQUmhaUDQ0UTVRQWpjQzlEaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09wWFVxVG8wVWdRUWhHal9TRmRMV0JrQXo0clluNDdaeTJydmlnV1FmNncud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9XeHJYSmEwQzNLZHRDN2xNYWZHNGRSa0F6NHJZbjQ3WnkycnZpZ1dRZjZ3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vY0RLaFJhWG5RVE9WYmFveHdkT3I5eGtBejRyWW40N1p5MnJ2aWdXUWY2dy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vMWhaZjAyUE9BTmgzMmsyVmtnRW9VQmtBejRyWW40N1p5MnJ2aWdXUWY2dy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdlBjeW5TTDBxSHFfNmRYN2xLVkJ5WFloamJTcHZjNDdlZTZ4Ul84MEhudy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdlN6dWxmS1NLMExMampmZWF4Y1JFaGtBejRyWW40N1p5MnJ2aWdXUWY2dy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9LMjNjeFdWVHJJRkQ2REpzRVZpMDdSa0F6NHJZbjQ3WnkycnZpZ1dRZjZ3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCcpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0JyksIHVybCgvZm9udC1yb2JvdG8vRmw0eTBRZE94eXlUSEVHTVhYOGtjWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0JyksIGxvY2FsKCdSb2JvdG8tTGlnaHQnKSwgdXJsKC9mb250LXJvYm90by8wZUM2ZmwwNmx1WEVZV3BCU0p2WENJWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvL0kzUzF3c2dTZzlZQ3VyVjZQVWtUT1lYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0JyksIGxvY2FsKCdSb2JvdG8tTGlnaHQnKSwgdXJsKC9mb250LXJvYm90by8tTDE0SmswNm02cFVIQi01bVhRUW5ZWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCcpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0JyksIHVybCgvZm9udC1yb2JvdG8vSGdvMTNrLXRmU3BuMHFpMVNGZFVmWkJ3MXhVMXJLcHRKal8wamFuczkyMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvL1BydTMzcWpTaHBaU21HM3o2Vll3bllYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvL05ZRFdCZEQ0Z0lxMjZHNVhZYkhzRklYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0MTRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0X1pyYVIyVGc4dzJsem03a0xOTDAtdy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0d3RfUm02OTFMVGViS2ZZMlprS1NtSS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTGlnaHRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by83bThsN1RsRk8tUzNWa2hIdVIwYXQxQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1MaWdodEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvLzdtOGw3VGxGTy1TM1ZraEh1UjBhdDRncDlROGdiWXJocUdsUmF2X0lYZmsud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0NkU4a000eFdSMV8xYllVUlJvalJHYy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1MaWdodEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvLzdtOGw3VGxGTy1TM1ZraEh1UjBhdDlEaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bScpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bScpLCB1cmwoL2ZvbnQtcm9ib3RvL29IaTMwa3dRV3ZwQ1dxQWh6SGNDU0lYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0nKSwgbG9jYWwoJ1JvYm90by1NZWRpdW0nKSwgdXJsKC9mb250LXJvYm90by9aTHFLZWVsWWJBVEc2MEVwWkJTRHk0WDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vbXg5VWNrNnVCNjNWSUtGWW5FTVhyWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vckd2SGRKbnIybDc1cWIwWU5EOU55SVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vUnhaSmRuemVvM1I1elNleGdlOFVVWkJ3MXhVMXJLcHRKal8wamFuczkyMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vb09lRndaTmxyVGVmekxZbWxWVjFVSVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0nKSwgbG9jYWwoJ1JvYm90by1NZWRpdW0nKSwgdXJsKC9mb250LXJvYm90by9tYm1ocHJNSDY5Wmk2ZUVQQllWRmhZWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vT0xmZkdCVGFGMFhGT1cxZ251SEYwVjRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bSBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1NZWRpdW1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9PTGZmR0JUYUYwWEZPVzFnbnVIRjBmWnJhUjJUZzh3Mmx6bTdrTE5MMC13LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMFF0X1JtNjkxTFRlYktmWTJaa0tTbUkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bSBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1NZWRpdW1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9PTGZmR0JUYUYwWEZPVzFnbnVIRjBWQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vT0xmZkdCVGFGMFhGT1cxZ251SEYwWWdwOVE4Z2JZcmhxR2xSYXZfSVhmay53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMGFFOGtNNHhXUjFfMWJZVVJSb2pSR2Mud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMGREaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZMTRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZX1pyYVIyVGc4dzJsem03a0xOTDAtdy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZd3RfUm02OTFMVGViS2ZZMlprS1NtSS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vJyksIGxvY2FsKCdSb2JvdG9Nb25vLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by9oTXFQTkxzdV9keXdNYTRDX0RFcFkxQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8nKSwgbG9jYWwoJ1JvYm90b01vbm8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL2hNcVBOTHN1X2R5d01hNENfREVwWTRncDlROGdiWXJocUdsUmF2X0lYZmsud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZNkU4a000eFdSMV8xYllVUlJvalJHYy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8nKSwgbG9jYWwoJ1JvYm90b01vbm8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL2hNcVBOTHN1X2R5d01hNENfREVwWTlEaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubyBCb2xkJyksIGxvY2FsKCdSb2JvdG9Nb25vLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9ONGR1VmM5QzU4dXdQaVk4XzU5RnoxeC1NMUkxdzVPTWlxblZGOHhCTGhVLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vIEJvbGQnKSwgbG9jYWwoJ1JvYm90b01vbm8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL040ZHVWYzlDNTh1d1BpWThfNTlGendYYUFYdXA1bVpsZks2eFJMcmhzY28ud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6d242V3F4by14d3hpbERYUFU4Y2hWVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vIEJvbGQnKSwgbG9jYWwoJ1JvYm90b01vbm8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL040ZHVWYzlDNTh1d1BpWThfNTlGejFUN2FKTEs2bktwbjM2SU13VGNNTWMud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubyBCb2xkJyksIGxvY2FsKCdSb2JvdG9Nb25vLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9ONGR1VmM5QzU4dXdQaVk4XzU5RnpfNzlfWnVVeENpZ00yRGVzcFRuRmF3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMjAwMC0yMDZGLCBVKzIwNzQsIFUrMjBBQywgVSsyMjEyLCBVKzIyMTU7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6NGdkOU9FUFVDTjNBZFlXMGU4dGF0NC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6OGJJUVNZWm5XTGFXQzlRTkNwVEtfVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9Cjwvc3R5bGU+CgoKCjxzdHlsZT4ubWF0LXJpcHBsZXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGU6bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWR7b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50e3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlM2QoMCwgMCwgMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXJpcHBsZS1lbGVtZW50e2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbntib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lO2xlZnQ6MH1bZGlyPXJ0bF0gLmNkay12aXN1YWxseS1oaWRkZW57bGVmdDphdXRvO3JpZ2h0OjB9LmNkay1vdmVybGF5LWNvbnRhaW5lciwuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJ7cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVye3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJ7ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3B7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ3tvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ3tvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9we2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcHt0cmFuc2l0aW9uOnZpc2liaWxpdHkgMW1zIGxpbmVhcixvcGFjaXR5IDFtcyBsaW5lYXI7dmlzaWJpbGl0eTpoaWRkZW47b3BhY2l0eToxfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5ne29wYWNpdHk6MDt2aXNpYmlsaXR5OnZpc2libGV9LmNkay1vdmVybGF5LWJhY2tkcm9wLW5vb3AtYW5pbWF0aW9ue3RyYW5zaXRpb246bm9uZX0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveHtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2Nre3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXple3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmd7cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveHtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHsvKiEqL31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHsvKiEqL30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9Lm1hdC1mb2N1cy1pbmRpY2F0b3J7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9pbnRlci1ldmVudHM6bm9uZTtkaXNwbGF5OnZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItZGlzcGxheSwgbm9uZSk7Ym9yZGVyOnZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXdpZHRoLCAzcHgpIHZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXN0eWxlLCBzb2xpZCkgdmFyKC0tbWF0LWZvY3VzLWluZGljYXRvci1ib3JkZXItY29sb3IsIHRyYW5zcGFyZW50KTtib3JkZXItcmFkaXVzOnZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXJhZGl1cywgNHB4KX0ubWF0LWZvY3VzLWluZGljYXRvcjpmb2N1czo6YmVmb3Jle2NvbnRlbnQ6IiJ9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZXstLW1hdC1mb2N1cy1pbmRpY2F0b3ItZGlzcGxheTogYmxvY2t9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9ye3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb2ludGVyLWV2ZW50czpub25lO2Rpc3BsYXk6dmFyKC0tbWF0LW1kYy1mb2N1cy1pbmRpY2F0b3ItZGlzcGxheSwgbm9uZSk7Ym9yZGVyOnZhcigtLW1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yLWJvcmRlci13aWR0aCwgM3B4KSB2YXIoLS1tYXQtbWRjLWZvY3VzLWluZGljYXRvci1ib3JkZXItc3R5bGUsIHNvbGlkKSB2YXIoLS1tYXQtbWRjLWZvY3VzLWluZGljYXRvci1ib3JkZXItY29sb3IsIHRyYW5zcGFyZW50KTtib3JkZXItcmFkaXVzOnZhcigtLW1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yLWJvcmRlci1yYWRpdXMsIDRweCl9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yOmZvY3VzOjpiZWZvcmV7Y29udGVudDoiIn0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZley0tbWF0LW1kYy1mb2N1cy1pbmRpY2F0b3ItZGlzcGxheTogYmxvY2t9Lm1hdC1oMSwubWF0LWhlYWRsaW5lLC5tYXQtdHlwb2dyYXBoeSAubWF0LWgxLC5tYXQtdHlwb2dyYXBoeSAubWF0LWhlYWRsaW5lLC5tYXQtdHlwb2dyYXBoeSBoMXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MzJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyLC5tYXQtdGl0bGUsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDIsLm1hdC10eXBvZ3JhcGh5IC5tYXQtdGl0bGUsLm1hdC10eXBvZ3JhcGh5IGgye2ZvbnQtc2l6ZToyMHB4O2ZvbnQtd2VpZ2h0OjUwMDtsaW5lLWhlaWdodDozMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDMsLm1hdC1zdWJoZWFkaW5nLTIsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDMsLm1hdC10eXBvZ3JhcGh5IC5tYXQtc3ViaGVhZGluZy0yLC5tYXQtdHlwb2dyYXBoeSBoM3tmb250LXNpemU6MTZweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MjhweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0LC5tYXQtc3ViaGVhZGluZy0xLC5tYXQtdHlwb2dyYXBoeSAubWF0LWg0LC5tYXQtdHlwb2dyYXBoeSAubWF0LXN1YmhlYWRpbmctMSwubWF0LXR5cG9ncmFwaHkgaDR7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjI0cHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNSwubWF0LXR5cG9ncmFwaHkgLm1hdC1oNSwubWF0LXR5cG9ncmFwaHkgaDV7Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDYsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDYsLm1hdC10eXBvZ3JhcGh5IGg2e2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nLC5tYXQtYm9keS0yLC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHktc3Ryb25nLC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHktMntmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDA7bGluZS1oZWlnaHQ6MjRweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keSwubWF0LWJvZHktMSwubWF0LXR5cG9ncmFwaHkgLm1hdC1ib2R5LC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHktMSwubWF0LXR5cG9ncmFwaHl7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjIwcHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHkgcCwubWF0LWJvZHktMSBwLC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHkgcCwubWF0LXR5cG9ncmFwaHkgLm1hdC1ib2R5LTEgcCwubWF0LXR5cG9ncmFwaHkgcHttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbCwubWF0LWNhcHRpb24sLm1hdC10eXBvZ3JhcGh5IC5tYXQtc21hbGwsLm1hdC10eXBvZ3JhcGh5IC5tYXQtY2FwdGlvbntmb250LXNpemU6MTJweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MjBweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00LC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktNHtmb250LXNpemU6MTEycHg7Zm9udC13ZWlnaHQ6MzAwO2xpbmUtaGVpZ2h0OjExMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktMywubWF0LXR5cG9ncmFwaHkgLm1hdC1kaXNwbGF5LTN7Zm9udC1zaXplOjU2cHg7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjU2cHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yLC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktMntmb250LXNpemU6NDVweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6NDhweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xLC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktMXtmb250LXNpemU6MzRweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6NDBweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJhZGdlLWNvbnRlbnR7Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsIC5tYXQtYmFkZ2UtY29udGVudHtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2UgLm1hdC1iYWRnZS1jb250ZW50e2ZvbnQtc2l6ZToyNHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcntmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MjBweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uLXRvZ2dsZXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5e2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbCwubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b257Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyIHRoe2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50e2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoyMHB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyLC5tYXQtZ3JpZC10aWxlLWZvb3Rlcntmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXIgLm1hdC1saW5lLC5tYXQtZ3JpZC10aWxlLWZvb3RlciAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlciAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1ncmlkLXRpbGUtZm9vdGVyIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LXN0ZXBwZXItdmVydGljYWwsLm1hdC1zdGVwcGVyLWhvcml6b250YWx7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbHtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcntmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9ye2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZHtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyLC5tYXQtdG9vbGJhciBoMSwubWF0LXRvb2xiYXIgaDIsLm1hdC10b29sYmFyIGgzLC5tYXQtdG9vbGJhciBoNCwubWF0LXRvb2xiYXIgaDUsLm1hdC10b29sYmFyIGg2e2ZvbnQtc2l6ZToyMHB4O2ZvbnQtd2VpZ2h0OjUwMDtsaW5lLWhlaWdodDozMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10cmVle2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZSwubWF0LW5lc3RlZC10cmVlLW5vZGV7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtb3B0aW9ue2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVse2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMDtsaW5lLWhlaWdodDoyNHB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b24sLm1hdC1yYWlzZWQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24sLm1hdC1zdHJva2VkLWJ1dHRvbiwubWF0LWZsYXQtYnV0dG9uLC5tYXQtZmFiLC5tYXQtbWluaS1mYWJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWRjLWJ1dHRvbnstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGU7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDtmb250LWZhbWlseTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1idXR0b24tZm9udC1mYW1pbHksIHZhcigtLW1kYy10eXBvZ3JhcGh5LWZvbnQtZmFtaWx5LCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWYpKTtmb250LXNpemU6dmFyKC0tbWRjLXR5cG9ncmFwaHktYnV0dG9uLWZvbnQtc2l6ZSwgMTRweCk7bGluZS1oZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktYnV0dG9uLWxpbmUtaGVpZ2h0LCAxNHB4KTtmb250LXdlaWdodDp2YXIoLS1tZGMtdHlwb2dyYXBoeS1idXR0b24tZm9udC13ZWlnaHQsIDUwMCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tbWRjLXR5cG9ncmFwaHktYnV0dG9uLWxldHRlci1zcGFjaW5nLCBub3JtYWwpO3RleHQtZGVjb3JhdGlvbjp2YXIoLS1tZGMtdHlwb2dyYXBoeS1idXR0b24tdGV4dC1kZWNvcmF0aW9uLCBub25lKTt0ZXh0LXRyYW5zZm9ybTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1idXR0b24tdGV4dC10cmFuc2Zvcm0sIG5vbmUpfS5tYXQtY2FyZHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxle2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyIC5tYXQtY2FyZC10aXRsZXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGUsLm1hdC1jYXJkLWNvbnRlbnR7Zm9udC1zaXplOjE0cHh9Lm1hdC10b29sdGlwe2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0e2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnR7bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1mb3JtLWZpZWxke2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVye3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbntmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24sLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9ue2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb257aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgcmdiYSgwLDAsMCwwKX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJ7dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcntmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtd3JhcHBlcntwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF0rLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sOi13ZWJraXQtYXV0b2ZpbGwrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF0rLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF0rLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LXNlbGVjdHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcntoZWlnaHQ6MS4xMjVlbX0ubWF0LWNoZWNrYm94e2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dCAubWF0LWNoZWNrYm94LWxhYmVse2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1kaWFsb2ctdGl0bGV7Zm9udC1zaXplOjIwcHg7Zm9udC13ZWlnaHQ6NTAwO2xpbmUtaGVpZ2h0OjMycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWNoaXB7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcCAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbiwubWF0LWNoaXAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbntmb250LXNpemU6MThweH0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50e2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1ncm91cHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWwsLm1hdC10YWItbGlua3tmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtcmFkaW8tYnV0dG9ue2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1tZW51LWl0ZW17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWxpc3QtaXRlbXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LWl0ZW17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LW9wdGlvbntmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2UgLm1hdC1zdWJoZWFkZXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LWl0ZW17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbntmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1zdWJoZWFkZXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXBhZ2luYXRvciwubWF0LXBhZ2luYXRvci1wYWdlLXNpemUgLm1hdC1zZWxlY3QtdHJpZ2dlcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1zaW1wbGUtc25hY2tiYXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbntsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFibGV7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGx7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbCwubWF0LWZvb3Rlci1jZWxse2ZvbnQtc2l6ZToxNHB4fS5tYXQtYmFkZ2UtY29udGVudHtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCBzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGwgLm1hdC1iYWRnZS1jb250ZW50e2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZSAubWF0LWJhZGdlLWNvbnRlbnR7Zm9udC1zaXplOjI0cHh9Lm1hdC1oMSwubWF0LWhlYWRsaW5lLTUsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDEsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaGVhZGxpbmUtNSwubWF0LXR5cG9ncmFwaHkgaDF7Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjMycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMiwubWF0LWhlYWRsaW5lLTYsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDIsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaGVhZGxpbmUtNiwubWF0LXR5cG9ncmFwaHkgaDJ7Zm9udC1zaXplOjIwcHg7Zm9udC13ZWlnaHQ6NTAwO2xpbmUtaGVpZ2h0OjMycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi4wMTI1ZW07bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDMsLm1hdC1zdWJ0aXRsZS0xLC5tYXQtdHlwb2dyYXBoeSAubWF0LWgzLC5tYXQtdHlwb2dyYXBoeSAubWF0LXN1YnRpdGxlLTEsLm1hdC10eXBvZ3JhcGh5IGgze2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoyOHB4O2ZvbnQtZmFtaWx5OlJvYm90bywgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzouMDA5Mzc1ZW07bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDQsLm1hdC1ib2R5LTEsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDQsLm1hdC10eXBvZ3JhcGh5IC5tYXQtYm9keS0xLC5tYXQtdHlwb2dyYXBoeSBoNHtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MjRweDtmb250LWZhbWlseTpSb2JvdG8sIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LjAzMTI1ZW07bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDUsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDUsLm1hdC10eXBvZ3JhcGh5IGg1e2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2LC5tYXQtdHlwb2dyYXBoeSAubWF0LWg2LC5tYXQtdHlwb2dyYXBoeSBoNntmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZywubWF0LXN1YnRpdGxlLTIsLm1hdC10eXBvZ3JhcGh5IC5tYXQtYm9keS1zdHJvbmcsLm1hdC10eXBvZ3JhcGh5IC5tYXQtc3VidGl0bGUtMntmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDA7bGluZS1oZWlnaHQ6MjJweDtmb250LWZhbWlseTpSb2JvdG8sIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LjAwNzE0Mjg1NzFlbX0ubWF0LWJvZHksLm1hdC1ib2R5LTIsLm1hdC10eXBvZ3JhcGh5IC5tYXQtYm9keSwubWF0LXR5cG9ncmFwaHkgLm1hdC1ib2R5LTIsLm1hdC10eXBvZ3JhcGh5e2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoyMHB4O2ZvbnQtZmFtaWx5OlJvYm90bywgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzouMDE3ODU3MTQyOWVtfS5tYXQtYm9keSBwLC5tYXQtYm9keS0yIHAsLm1hdC10eXBvZ3JhcGh5IC5tYXQtYm9keSBwLC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHktMiBwLC5tYXQtdHlwb2dyYXBoeSBwe21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsLC5tYXQtY2FwdGlvbiwubWF0LXR5cG9ncmFwaHkgLm1hdC1zbWFsbCwubWF0LXR5cG9ncmFwaHkgLm1hdC1jYXB0aW9ue2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoyMHB4O2ZvbnQtZmFtaWx5OlJvYm90bywgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzouMDMzMzMzMzMzM2VtfS5tYXQtaGVhZGxpbmUtMSwubWF0LXR5cG9ncmFwaHkgLm1hdC1oZWFkbGluZS0xe2ZvbnQtc2l6ZTo5NnB4O2ZvbnQtd2VpZ2h0OjMwMDtsaW5lLWhlaWdodDo5NnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMTU2MjVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1oZWFkbGluZS0yLC5tYXQtdHlwb2dyYXBoeSAubWF0LWhlYWRsaW5lLTJ7Zm9udC1zaXplOjYwcHg7Zm9udC13ZWlnaHQ6MzAwO2xpbmUtaGVpZ2h0OjYwcHg7Zm9udC1mYW1pbHk6Um9ib3RvLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0uMDA4MzMzMzMzM2VtO21hcmdpbjowIDAgNjRweH0ubWF0LWhlYWRsaW5lLTMsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaGVhZGxpbmUtM3tmb250LXNpemU6NDhweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6NTBweDtmb250LWZhbWlseTpSb2JvdG8sIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWhlYWRsaW5lLTQsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaGVhZGxpbmUtNHtmb250LXNpemU6MzRweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6NDBweDtmb250LWZhbWlseTpSb2JvdG8sIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LjAwNzM1Mjk0MTJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVye2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoyMHB4O2ZvbnQtZmFtaWx5OlJvYm90bywgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzouMDE3ODU3MTQyOWVtfS5tYXQtYnV0dG9uLXRvZ2dsZXtmb250LWZhbWlseTpSb2JvdG8sIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhcntmb250LWZhbWlseTpSb2JvdG8sIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5e2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbCwubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b257Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyIHRoe2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50e2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoyMHB4O2ZvbnQtZmFtaWx5OlJvYm90bywgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzouMDE3ODU3MTQyOWVtfS5tYXQtZ3JpZC10aWxlLWhlYWRlciwubWF0LWdyaWQtdGlsZS1mb290ZXJ7Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyIC5tYXQtbGluZSwubWF0LWdyaWQtdGlsZS1mb290ZXIgLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXIgLm1hdC1saW5lOm50aC1jaGlsZChuKzIpLC5tYXQtZ3JpZC10aWxlLWZvb3RlciAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsLC5tYXQtc3RlcHBlci1ob3Jpem9udGFse2ZvbnQtZmFtaWx5OlJvYm90bywgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWx7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3J7Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcntmb250LXNpemU6MTZweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWR7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtdG9vbGJhciwubWF0LXRvb2xiYXIgaDEsLm1hdC10b29sYmFyIGgyLC5tYXQtdG9vbGJhciBoMywubWF0LXRvb2xiYXIgaDQsLm1hdC10b29sYmFyIGg1LC5tYXQtdG9vbGJhciBoNntmb250LXNpemU6MjBweDtmb250LXdlaWdodDo1MDA7bGluZS1oZWlnaHQ6MzJweDtmb250LWZhbWlseTpSb2JvdG8sIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LjAxMjVlbTttYXJnaW46MH0ubWF0LXRyZWV7Zm9udC1mYW1pbHk6Um9ib3RvLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlLC5tYXQtbmVzdGVkLXRyZWUtbm9kZXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1tZGMtb3B0aW9uey1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZTstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkO2ZvbnQtZmFtaWx5OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWZvbnQtZmFtaWx5LCB2YXIoLS1tZGMtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgUm9ib3RvLCBzYW5zLXNlcmlmKSk7Zm9udC1zaXplOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWZvbnQtc2l6ZSwgMTZweCk7bGluZS1oZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTEtbGluZS1oZWlnaHQsIDI0cHgpO2ZvbnQtd2VpZ2h0OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWZvbnQtd2VpZ2h0LCA0MDApO2xldHRlci1zcGFjaW5nOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWxldHRlci1zcGFjaW5nLCAwLjAzMTI1ZW0pfS5tYXQtbWRjLWNhcmQtdGl0bGV7LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6Z3JheXNjYWxlOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7Zm9udC1mYW1pbHk6dmFyKC0tbWRjLXR5cG9ncmFwaHktaGVhZGxpbmU2LWZvbnQtZmFtaWx5LCB2YXIoLS1tZGMtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgUm9ib3RvLCBzYW5zLXNlcmlmKSk7Zm9udC1zaXplOnZhcigtLW1kYy10eXBvZ3JhcGh5LWhlYWRsaW5lNi1mb250LXNpemUsIDIwcHgpO2xpbmUtaGVpZ2h0OnZhcigtLW1kYy10eXBvZ3JhcGh5LWhlYWRsaW5lNi1saW5lLWhlaWdodCwgMzJweCk7Zm9udC13ZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktaGVhZGxpbmU2LWZvbnQtd2VpZ2h0LCA1MDApO2xldHRlci1zcGFjaW5nOnZhcigtLW1kYy10eXBvZ3JhcGh5LWhlYWRsaW5lNi1sZXR0ZXItc3BhY2luZywgMC4wMTI1ZW0pO3RleHQtZGVjb3JhdGlvbjp2YXIoLS1tZGMtdHlwb2dyYXBoeS1oZWFkbGluZTYtdGV4dC1kZWNvcmF0aW9uLCBpbmhlcml0KTt0ZXh0LXRyYW5zZm9ybTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1oZWFkbGluZTYtdGV4dC10cmFuc2Zvcm0sIG5vbmUpfS5tYXQtbWRjLWNhcmQtc3VidGl0bGV7LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6Z3JheXNjYWxlOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7Zm9udC1mYW1pbHk6dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUyLWZvbnQtZmFtaWx5LCB2YXIoLS1tZGMtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgUm9ib3RvLCBzYW5zLXNlcmlmKSk7Zm9udC1zaXplOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMi1mb250LXNpemUsIDE0cHgpO2xpbmUtaGVpZ2h0OnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMi1saW5lLWhlaWdodCwgMjJweCk7Zm9udC13ZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUyLWZvbnQtd2VpZ2h0LCA1MDApO2xldHRlci1zcGFjaW5nOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMi1sZXR0ZXItc3BhY2luZywgMC4wMDcxNDI4NTcxZW0pO3RleHQtZGVjb3JhdGlvbjp2YXIoLS1tZGMtdHlwb2dyYXBoeS1zdWJ0aXRsZTItdGV4dC1kZWNvcmF0aW9uLCBpbmhlcml0KTt0ZXh0LXRyYW5zZm9ybTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1zdWJ0aXRsZTItdGV4dC10cmFuc2Zvcm0sIG5vbmUpfS5tYXQtbWRjLXRvb2x0aXB7LS1tZGMtcGxhaW4tdG9vbHRpcC1zdXBwb3J0aW5nLXRleHQtZm9udDpSb2JvdG8sIHNhbnMtc2VyaWY7LS1tZGMtcGxhaW4tdG9vbHRpcC1zdXBwb3J0aW5nLXRleHQtc2l6ZToxMnB4Oy0tbWRjLXBsYWluLXRvb2x0aXAtc3VwcG9ydGluZy10ZXh0LXdlaWdodDo0MDA7LS1tZGMtcGxhaW4tdG9vbHRpcC1zdXBwb3J0aW5nLXRleHQtdHJhY2tpbmc6MC4wMzMzMzMzMzMzZW19Lm1kYy10ZXh0LWZpZWxkX19pbnB1dHstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGU7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDtmb250LWZhbWlseTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1zdWJ0aXRsZTEtZm9udC1mYW1pbHksIHZhcigtLW1kYy10eXBvZ3JhcGh5LWZvbnQtZmFtaWx5LCBSb2JvdG8sIHNhbnMtc2VyaWYpKTtmb250LXNpemU6dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUxLWZvbnQtc2l6ZSwgMTZweCk7Zm9udC13ZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUxLWZvbnQtd2VpZ2h0LCA0MDApO2xldHRlci1zcGFjaW5nOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS1sZXR0ZXItc3BhY2luZywgMC4wMDkzNzVlbSk7dGV4dC1kZWNvcmF0aW9uOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS10ZXh0LWRlY29yYXRpb24sIGluaGVyaXQpO3RleHQtdHJhbnNmb3JtOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS10ZXh0LXRyYW5zZm9ybSwgbm9uZSl9Lm1kYy10ZXh0LWZpZWxkX19hZmZpeHstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGU7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDtmb250LWZhbWlseTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1zdWJ0aXRsZTEtZm9udC1mYW1pbHksIHZhcigtLW1kYy10eXBvZ3JhcGh5LWZvbnQtZmFtaWx5LCBSb2JvdG8sIHNhbnMtc2VyaWYpKTtmb250LXNpemU6dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUxLWZvbnQtc2l6ZSwgMTZweCk7Zm9udC13ZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUxLWZvbnQtd2VpZ2h0LCA0MDApO2xldHRlci1zcGFjaW5nOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS1sZXR0ZXItc3BhY2luZywgMC4wMDkzNzVlbSk7dGV4dC1kZWNvcmF0aW9uOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS10ZXh0LWRlY29yYXRpb24sIGluaGVyaXQpO3RleHQtdHJhbnNmb3JtOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS10ZXh0LXRyYW5zZm9ybSwgbm9uZSl9Lm1kYy10ZXh0LWZpZWxkLS10ZXh0YXJlYSAubWRjLXRleHQtZmllbGRfX2lucHV0e2xpbmUtaGVpZ2h0OjEuNXJlbX0ubWRjLWZsb2F0aW5nLWxhYmVsey1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZTstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkO2ZvbnQtZmFtaWx5OnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS1mb250LWZhbWlseSwgdmFyKC0tbWRjLXR5cG9ncmFwaHktZm9udC1mYW1pbHksIFJvYm90bywgc2Fucy1zZXJpZikpO2ZvbnQtc2l6ZTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1zdWJ0aXRsZTEtZm9udC1zaXplLCAxNnB4KTtmb250LXdlaWdodDp2YXIoLS1tZGMtdHlwb2dyYXBoeS1zdWJ0aXRsZTEtZm9udC13ZWlnaHQsIDQwMCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUxLWxldHRlci1zcGFjaW5nLCAwLjAwOTM3NWVtKTt0ZXh0LWRlY29yYXRpb246dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUxLXRleHQtZGVjb3JhdGlvbiwgaW5oZXJpdCk7dGV4dC10cmFuc2Zvcm06dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUxLXRleHQtdHJhbnNmb3JtLCBub25lKX0ubWF0LW1kYy1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyLC5tYXQtbWRjLWZvcm0tZmllbGQtYm90dG9tLWFsaWduOjpiZWZvcmV7LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6Z3JheXNjYWxlOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7Zm9udC1mYW1pbHk6dmFyKC0tbWRjLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LWZhbWlseSwgdmFyKC0tbWRjLXR5cG9ncmFwaHktZm9udC1mYW1pbHksIFJvYm90bywgc2Fucy1zZXJpZikpO2ZvbnQtc2l6ZTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSwgMTJweCk7bGluZS1oZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCwgMjBweCk7Zm9udC13ZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCwgNDAwKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1tZGMtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nLCAwLjAzMzMzMzMzMzNlbSk7dGV4dC1kZWNvcmF0aW9uOnZhcigtLW1kYy10eXBvZ3JhcGh5LWNhcHRpb24tdGV4dC1kZWNvcmF0aW9uLCBpbmhlcml0KTt0ZXh0LXRyYW5zZm9ybTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1jYXB0aW9uLXRleHQtdHJhbnNmb3JtLCBub25lKX0ubWF0LW1kYy1mb3JtLWZpZWxkLC5tYXQtbWRjLWZsb2F0aW5nLWxhYmVsey1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZTstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkO2ZvbnQtZmFtaWx5OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWZvbnQtZmFtaWx5LCB2YXIoLS1tZGMtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgUm9ib3RvLCBzYW5zLXNlcmlmKSk7Zm9udC1zaXplOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWZvbnQtc2l6ZSwgMTZweCk7bGluZS1oZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTEtbGluZS1oZWlnaHQsIDI0cHgpO2ZvbnQtd2VpZ2h0OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWZvbnQtd2VpZ2h0LCA0MDApO2xldHRlci1zcGFjaW5nOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWxldHRlci1zcGFjaW5nLCAwLjAzMTI1ZW0pO3RleHQtZGVjb3JhdGlvbjp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5MS10ZXh0LWRlY29yYXRpb24sIGluaGVyaXQpO3RleHQtdHJhbnNmb3JtOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLXRleHQtdHJhbnNmb3JtLCBub25lKX0ubWF0LW1kYy1mb3JtLWZpZWxkIC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1mbG9hdGluZy1sYWJlbC0tZmxvYXQtYWJvdmV7Zm9udC1zaXplOmNhbGMoMTZweCAqIHZhcigtLW1hdC1tZGMtZm9ybS1maWVsZC1mbG9hdGluZy1sYWJlbC1zY2FsZSwgMC43NSkpfS5tYXQtbWRjLWZvcm0tZmllbGQgLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLW5vdGNoZWQtb3V0bGluZS0tdXBncmFkZWQgLm1kYy1mbG9hdGluZy1sYWJlbC0tZmxvYXQtYWJvdmV7Zm9udC1zaXplOjE2cHh9Lm1hdC1tZGMtc2VsZWN0LXBhbmVsey1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZTstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkO2ZvbnQtZmFtaWx5OnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS1mb250LWZhbWlseSwgdmFyKC0tbWRjLXR5cG9ncmFwaHktZm9udC1mYW1pbHksIFJvYm90bywgc2Fucy1zZXJpZikpO2ZvbnQtc2l6ZTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1zdWJ0aXRsZTEtZm9udC1zaXplLCAxNnB4KTtsaW5lLWhlaWdodDp2YXIoLS1tZGMtdHlwb2dyYXBoeS1zdWJ0aXRsZTEtbGluZS1oZWlnaHQsIDI4cHgpO2ZvbnQtd2VpZ2h0OnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS1mb250LXdlaWdodCwgNDAwKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1tZGMtdHlwb2dyYXBoeS1zdWJ0aXRsZTEtbGV0dGVyLXNwYWNpbmcsIDAuMDA5Mzc1ZW0pO3RleHQtZGVjb3JhdGlvbjp2YXIoLS1tZGMtdHlwb2dyYXBoeS1zdWJ0aXRsZTEtdGV4dC1kZWNvcmF0aW9uLCBpbmhlcml0KTt0ZXh0LXRyYW5zZm9ybTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1zdWJ0aXRsZTEtdGV4dC10cmFuc2Zvcm0sIG5vbmUpO2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1tZGMtc2VsZWN0ey1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZTstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkO2ZvbnQtZmFtaWx5OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWZvbnQtZmFtaWx5LCB2YXIoLS1tZGMtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgUm9ib3RvLCBzYW5zLXNlcmlmKSk7Zm9udC1zaXplOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWZvbnQtc2l6ZSwgMTZweCk7bGluZS1oZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTEtbGluZS1oZWlnaHQsIDI0cHgpO2ZvbnQtd2VpZ2h0OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWZvbnQtd2VpZ2h0LCA0MDApO2xldHRlci1zcGFjaW5nOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWxldHRlci1zcGFjaW5nLCAwLjAzMTI1ZW0pO3RleHQtZGVjb3JhdGlvbjp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5MS10ZXh0LWRlY29yYXRpb24sIGluaGVyaXQpO3RleHQtdHJhbnNmb3JtOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLXRleHQtdHJhbnNmb3JtLCBub25lKX0ubWF0LW1kYy1hdXRvY29tcGxldGUtcGFuZWx7LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6Z3JheXNjYWxlOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7Zm9udC1mYW1pbHk6dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUxLWZvbnQtZmFtaWx5LCB2YXIoLS1tZGMtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgUm9ib3RvLCBzYW5zLXNlcmlmKSk7Zm9udC1zaXplOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS1mb250LXNpemUsIDE2cHgpO2xpbmUtaGVpZ2h0OnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS1saW5lLWhlaWdodCwgMjhweCk7Zm9udC13ZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUxLWZvbnQtd2VpZ2h0LCA0MDApO2xldHRlci1zcGFjaW5nOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS1sZXR0ZXItc3BhY2luZywgMC4wMDkzNzVlbSk7dGV4dC1kZWNvcmF0aW9uOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS10ZXh0LWRlY29yYXRpb24sIGluaGVyaXQpO3RleHQtdHJhbnNmb3JtOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS10ZXh0LXRyYW5zZm9ybSwgbm9uZSk7bGluZS1oZWlnaHQ6MjRweH0ubWF0LW1kYy1kaWFsb2ctY29udGFpbmVyey0tbWRjLWRpYWxvZy1zdWJoZWFkLWZvbnQ6Um9ib3RvLCBzYW5zLXNlcmlmOy0tbWRjLWRpYWxvZy1zdWJoZWFkLWxpbmUtaGVpZ2h0OjMycHg7LS1tZGMtZGlhbG9nLXN1YmhlYWQtc2l6ZToyMHB4Oy0tbWRjLWRpYWxvZy1zdWJoZWFkLXdlaWdodDo1MDA7LS1tZGMtZGlhbG9nLXN1YmhlYWQtdHJhY2tpbmc6MC4wMTI1ZW07LS1tZGMtZGlhbG9nLXN1cHBvcnRpbmctdGV4dC1mb250OlJvYm90bywgc2Fucy1zZXJpZjstLW1kYy1kaWFsb2ctc3VwcG9ydGluZy10ZXh0LWxpbmUtaGVpZ2h0OjI0cHg7LS1tZGMtZGlhbG9nLXN1cHBvcnRpbmctdGV4dC1zaXplOjE2cHg7LS1tZGMtZGlhbG9nLXN1cHBvcnRpbmctdGV4dC13ZWlnaHQ6NDAwOy0tbWRjLWRpYWxvZy1zdXBwb3J0aW5nLXRleHQtdHJhY2tpbmc6MC4wMzEyNWVtfS5tYXQtbWRjLXN0YW5kYXJkLWNoaXB7LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6Z3JheXNjYWxlOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7Zm9udC1mYW1pbHk6dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTItZm9udC1mYW1pbHksIHZhcigtLW1kYy10eXBvZ3JhcGh5LWZvbnQtZmFtaWx5LCBSb2JvdG8sIHNhbnMtc2VyaWYpKTtmb250LXNpemU6dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTItZm9udC1zaXplLCAxNHB4KTtsaW5lLWhlaWdodDp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi1saW5lLWhlaWdodCwgMjBweCk7Zm9udC13ZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTItZm9udC13ZWlnaHQsIDQwMCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTItbGV0dGVyLXNwYWNpbmcsIDAuMDE3ODU3MTQyOWVtKTt0ZXh0LWRlY29yYXRpb246dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTItdGV4dC1kZWNvcmF0aW9uLCBpbmhlcml0KTt0ZXh0LXRyYW5zZm9ybTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi10ZXh0LXRyYW5zZm9ybSwgbm9uZSl9Lm1kYy1mb3JtLWZpZWxkey1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZTstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkO2ZvbnQtZmFtaWx5OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkyLWZvbnQtZmFtaWx5LCB2YXIoLS1tZGMtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgUm9ib3RvLCBzYW5zLXNlcmlmKSk7Zm9udC1zaXplOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkyLWZvbnQtc2l6ZSwgMTRweCk7bGluZS1oZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTItbGluZS1oZWlnaHQsIDIwcHgpO2ZvbnQtd2VpZ2h0OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkyLWZvbnQtd2VpZ2h0LCA0MDApO2xldHRlci1zcGFjaW5nOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkyLWxldHRlci1zcGFjaW5nLCAwLjAxNzg1NzE0MjllbSk7dGV4dC1kZWNvcmF0aW9uOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkyLXRleHQtZGVjb3JhdGlvbiwgaW5oZXJpdCk7dGV4dC10cmFuc2Zvcm06dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTItdGV4dC10cmFuc2Zvcm0sIG5vbmUpfS5tZGMtZm9ybS1maWVsZHstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGU7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDtmb250LWZhbWlseTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi1mb250LWZhbWlseSwgdmFyKC0tbWRjLXR5cG9ncmFwaHktZm9udC1mYW1pbHksIFJvYm90bywgc2Fucy1zZXJpZikpO2ZvbnQtc2l6ZTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi1mb250LXNpemUsIDE0cHgpO2xpbmUtaGVpZ2h0OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkyLWxpbmUtaGVpZ2h0LCAyMHB4KTtmb250LXdlaWdodDp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi1mb250LXdlaWdodCwgNDAwKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi1sZXR0ZXItc3BhY2luZywgMC4wMTc4NTcxNDI5ZW0pO3RleHQtZGVjb3JhdGlvbjp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi10ZXh0LWRlY29yYXRpb24sIGluaGVyaXQpO3RleHQtdHJhbnNmb3JtOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkyLXRleHQtdHJhbnNmb3JtLCBub25lKX0ubWF0LW1kYy1zbGlkZXJ7LS1tZGMtc2xpZGVyLWxhYmVsLWxhYmVsLXRleHQtZm9udDpSb2JvdG8sIHNhbnMtc2VyaWY7LS1tZGMtc2xpZGVyLWxhYmVsLWxhYmVsLXRleHQtc2l6ZToxNHB4Oy0tbWRjLXNsaWRlci1sYWJlbC1sYWJlbC10ZXh0LWxpbmUtaGVpZ2h0OjIycHg7LS1tZGMtc2xpZGVyLWxhYmVsLWxhYmVsLXRleHQtdHJhY2tpbmc6MC4wMDcxNDI4NTcxZW07LS1tZGMtc2xpZGVyLWxhYmVsLWxhYmVsLXRleHQtd2VpZ2h0OjUwMH0ubWF0LW1kYy1tZW51LWNvbnRlbnR7LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6Z3JheXNjYWxlOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7Zm9udC1mYW1pbHk6dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUxLWZvbnQtZmFtaWx5LCB2YXIoLS1tZGMtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgUm9ib3RvLCBzYW5zLXNlcmlmKSk7Zm9udC1zaXplOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS1mb250LXNpemUsIDE2cHgpO2xpbmUtaGVpZ2h0OnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS1saW5lLWhlaWdodCwgMjhweCk7Zm9udC13ZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUxLWZvbnQtd2VpZ2h0LCA0MDApO2xldHRlci1zcGFjaW5nOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS1sZXR0ZXItc3BhY2luZywgMC4wMDkzNzVlbSk7dGV4dC1kZWNvcmF0aW9uOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS10ZXh0LWRlY29yYXRpb24sIGluaGVyaXQpO3RleHQtdHJhbnNmb3JtOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS10ZXh0LXRyYW5zZm9ybSwgbm9uZSk7bGluZS1oZWlnaHQ6MjRweH0ubWF0LW1kYy1tZW51LWNvbnRlbnQsLm1hdC1tZGMtbWVudS1jb250ZW50IC5tYXQtbWRjLW1lbnUtaXRlbSAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0ey1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZTstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkO2ZvbnQtZmFtaWx5OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWZvbnQtZmFtaWx5LCB2YXIoLS1tZGMtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgUm9ib3RvLCBzYW5zLXNlcmlmKSk7Zm9udC1zaXplOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWZvbnQtc2l6ZSwgMTZweCk7bGluZS1oZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTEtbGluZS1oZWlnaHQsIDI0cHgpO2ZvbnQtd2VpZ2h0OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWZvbnQtd2VpZ2h0LCA0MDApO2xldHRlci1zcGFjaW5nOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWxldHRlci1zcGFjaW5nLCAwLjAzMTI1ZW0pO3RleHQtZGVjb3JhdGlvbjp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5MS10ZXh0LWRlY29yYXRpb24sIGluaGVyaXQpO3RleHQtdHJhbnNmb3JtOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLXRleHQtdHJhbnNmb3JtLCBub25lKX0ubWF0LW1kYy1saXN0LWJhc2V7LS1tZGMtbGlzdC1saXN0LWl0ZW0tbGFiZWwtdGV4dC1mb250OlJvYm90bywgc2Fucy1zZXJpZjstLW1kYy1saXN0LWxpc3QtaXRlbS1sYWJlbC10ZXh0LWxpbmUtaGVpZ2h0OjI0cHg7LS1tZGMtbGlzdC1saXN0LWl0ZW0tbGFiZWwtdGV4dC1zaXplOjE2cHg7LS1tZGMtbGlzdC1saXN0LWl0ZW0tbGFiZWwtdGV4dC10cmFja2luZzowLjAzMTI1ZW07LS1tZGMtbGlzdC1saXN0LWl0ZW0tbGFiZWwtdGV4dC13ZWlnaHQ6NDAwOy0tbWRjLWxpc3QtbGlzdC1pdGVtLXN1cHBvcnRpbmctdGV4dC1mb250OlJvYm90bywgc2Fucy1zZXJpZjstLW1kYy1saXN0LWxpc3QtaXRlbS1zdXBwb3J0aW5nLXRleHQtbGluZS1oZWlnaHQ6MjBweDstLW1kYy1saXN0LWxpc3QtaXRlbS1zdXBwb3J0aW5nLXRleHQtc2l6ZToxNHB4Oy0tbWRjLWxpc3QtbGlzdC1pdGVtLXN1cHBvcnRpbmctdGV4dC10cmFja2luZzowLjAxNzg1NzE0MjllbTstLW1kYy1saXN0LWxpc3QtaXRlbS1zdXBwb3J0aW5nLXRleHQtd2VpZ2h0OjQwMDstLW1kYy1saXN0LWxpc3QtaXRlbS10cmFpbGluZy1zdXBwb3J0aW5nLXRleHQtZm9udDpSb2JvdG8sIHNhbnMtc2VyaWY7LS1tZGMtbGlzdC1saXN0LWl0ZW0tdHJhaWxpbmctc3VwcG9ydGluZy10ZXh0LWxpbmUtaGVpZ2h0OjIwcHg7LS1tZGMtbGlzdC1saXN0LWl0ZW0tdHJhaWxpbmctc3VwcG9ydGluZy10ZXh0LXNpemU6MTJweDstLW1kYy1saXN0LWxpc3QtaXRlbS10cmFpbGluZy1zdXBwb3J0aW5nLXRleHQtdHJhY2tpbmc6MC4wMzMzMzMzMzMzZW07LS1tZGMtbGlzdC1saXN0LWl0ZW0tdHJhaWxpbmctc3VwcG9ydGluZy10ZXh0LXdlaWdodDo0MDB9Lm1kYy1saXN0LWdyb3VwX19zdWJoZWFkZXJ7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjI4cHg7Zm9udC1mYW1pbHk6Um9ib3RvLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi4wMDkzNzVlbX0ubWF0LW1kYy1wYWdpbmF0b3J7LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6Z3JheXNjYWxlOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7Zm9udC1mYW1pbHk6dmFyKC0tbWRjLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LWZhbWlseSwgdmFyKC0tbWRjLXR5cG9ncmFwaHktZm9udC1mYW1pbHksIFJvYm90bywgc2Fucy1zZXJpZikpO2ZvbnQtc2l6ZTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSwgMTJweCk7bGluZS1oZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCwgMjBweCk7Zm9udC13ZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCwgNDAwKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1tZGMtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nLCAwLjAzMzMzMzMzMzNlbSk7dGV4dC1kZWNvcmF0aW9uOnZhcigtLW1kYy10eXBvZ3JhcGh5LWNhcHRpb24tdGV4dC1kZWNvcmF0aW9uLCBpbmhlcml0KTt0ZXh0LXRyYW5zZm9ybTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1jYXB0aW9uLXRleHQtdHJhbnNmb3JtLCBub25lKX0ubWF0LW1kYy1wYWdpbmF0b3IgLm1hdC1tZGMtc2VsZWN0LXZhbHVle2ZvbnQtc2l6ZToxMnB4fS5tZGMtdGFiey1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZTstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkO2ZvbnQtZmFtaWx5OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJ1dHRvbi1mb250LWZhbWlseSwgdmFyKC0tbWRjLXR5cG9ncmFwaHktZm9udC1mYW1pbHksIFJvYm90bywgc2Fucy1zZXJpZikpO2ZvbnQtc2l6ZTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1idXR0b24tZm9udC1zaXplLCAxNHB4KTtsaW5lLWhlaWdodDp2YXIoLS1tZGMtdHlwb2dyYXBoeS1idXR0b24tbGluZS1oZWlnaHQsIDM2cHgpO2ZvbnQtd2VpZ2h0OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJ1dHRvbi1mb250LXdlaWdodCwgNTAwKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1tZGMtdHlwb2dyYXBoeS1idXR0b24tbGV0dGVyLXNwYWNpbmcsIDAuMDg5Mjg1NzE0M2VtKTt0ZXh0LWRlY29yYXRpb246dmFyKC0tbWRjLXR5cG9ncmFwaHktYnV0dG9uLXRleHQtZGVjb3JhdGlvbiwgbm9uZSk7dGV4dC10cmFuc2Zvcm06dmFyKC0tbWRjLXR5cG9ncmFwaHktYnV0dG9uLXRleHQtdHJhbnNmb3JtLCBub25lKX1AbWVkaWEgYWxsIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6IG5vbmUpey5tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveF9fZm9jdXMtcmluZ3tkaXNwbGF5Om5vbmV9fS5tZGMtZm9ybS1maWVsZHstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGU7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDtmb250LWZhbWlseTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi1mb250LWZhbWlseSwgdmFyKC0tbWRjLXR5cG9ncmFwaHktZm9udC1mYW1pbHksIFJvYm90bywgc2Fucy1zZXJpZikpO2ZvbnQtc2l6ZTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi1mb250LXNpemUsIDE0cHgpO2xpbmUtaGVpZ2h0OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkyLWxpbmUtaGVpZ2h0LCAyMHB4KTtmb250LXdlaWdodDp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi1mb250LXdlaWdodCwgNDAwKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi1sZXR0ZXItc3BhY2luZywgMC4wMTc4NTcxNDI5ZW0pO3RleHQtZGVjb3JhdGlvbjp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi10ZXh0LWRlY29yYXRpb24sIGluaGVyaXQpO3RleHQtdHJhbnNmb3JtOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkyLXRleHQtdHJhbnNmb3JtLCBub25lKX0ubWRjLWJ1dHRvbnstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGU7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDtmb250LWZhbWlseTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1idXR0b24tZm9udC1mYW1pbHksIHZhcigtLW1kYy10eXBvZ3JhcGh5LWZvbnQtZmFtaWx5LCBSb2JvdG8sIHNhbnMtc2VyaWYpKTtmb250LXNpemU6dmFyKC0tbWRjLXR5cG9ncmFwaHktYnV0dG9uLWZvbnQtc2l6ZSwgMTRweCk7bGluZS1oZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktYnV0dG9uLWxpbmUtaGVpZ2h0LCAzNnB4KTtmb250LXdlaWdodDp2YXIoLS1tZGMtdHlwb2dyYXBoeS1idXR0b24tZm9udC13ZWlnaHQsIDUwMCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tbWRjLXR5cG9ncmFwaHktYnV0dG9uLWxldHRlci1zcGFjaW5nLCAwLjA4OTI4NTcxNDNlbSk7dGV4dC1kZWNvcmF0aW9uOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJ1dHRvbi10ZXh0LWRlY29yYXRpb24sIG5vbmUpO3RleHQtdHJhbnNmb3JtOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJ1dHRvbi10ZXh0LXRyYW5zZm9ybSwgbm9uZSl9Lm1kYy1mYWItLWV4dGVuZGVkey1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZTstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkO2ZvbnQtZmFtaWx5OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJ1dHRvbi1mb250LWZhbWlseSwgdmFyKC0tbWRjLXR5cG9ncmFwaHktZm9udC1mYW1pbHksIFJvYm90bywgc2Fucy1zZXJpZikpO2ZvbnQtc2l6ZTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1idXR0b24tZm9udC1zaXplLCAxNHB4KTtsaW5lLWhlaWdodDp2YXIoLS1tZGMtdHlwb2dyYXBoeS1idXR0b24tbGluZS1oZWlnaHQsIDM2cHgpO2ZvbnQtd2VpZ2h0OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJ1dHRvbi1mb250LXdlaWdodCwgNTAwKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1tZGMtdHlwb2dyYXBoeS1idXR0b24tbGV0dGVyLXNwYWNpbmcsIDAuMDg5Mjg1NzE0M2VtKTt0ZXh0LWRlY29yYXRpb246dmFyKC0tbWRjLXR5cG9ncmFwaHktYnV0dG9uLXRleHQtZGVjb3JhdGlvbiwgbm9uZSk7dGV4dC10cmFuc2Zvcm06dmFyKC0tbWRjLXR5cG9ncmFwaHktYnV0dG9uLXRleHQtdHJhbnNmb3JtLCBub25lKX0ubWF0LW1kYy1zbmFjay1iYXItY29udGFpbmVyey0tbWRjLXNuYWNrYmFyLXN1cHBvcnRpbmctdGV4dC1mb250OlJvYm90bywgc2Fucy1zZXJpZjstLW1kYy1zbmFja2Jhci1zdXBwb3J0aW5nLXRleHQtbGluZS1oZWlnaHQ6MjBweDstLW1kYy1zbmFja2Jhci1zdXBwb3J0aW5nLXRleHQtc2l6ZToxNHB4Oy0tbWRjLXNuYWNrYmFyLXN1cHBvcnRpbmctdGV4dC13ZWlnaHQ6NDAwfS5tZGMtZGF0YS10YWJsZV9fY29udGVudHstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGU7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDtmb250LWZhbWlseTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi1mb250LWZhbWlseSwgdmFyKC0tbWRjLXR5cG9ncmFwaHktZm9udC1mYW1pbHksIFJvYm90bywgc2Fucy1zZXJpZikpO2ZvbnQtc2l6ZTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi1mb250LXNpemUsIDE0cHgpO2xpbmUtaGVpZ2h0OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkyLWxpbmUtaGVpZ2h0LCAyMHB4KTtmb250LXdlaWdodDp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi1mb250LXdlaWdodCwgNDAwKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi1sZXR0ZXItc3BhY2luZywgMC4wMTc4NTcxNDI5ZW0pO3RleHQtZGVjb3JhdGlvbjp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi10ZXh0LWRlY29yYXRpb24sIGluaGVyaXQpO3RleHQtdHJhbnNmb3JtOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkyLXRleHQtdHJhbnNmb3JtLCBub25lKX0ubWRjLWRhdGEtdGFibGVfX2NlbGx7LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6Z3JheXNjYWxlOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7Zm9udC1mYW1pbHk6dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTItZm9udC1mYW1pbHksIHZhcigtLW1kYy10eXBvZ3JhcGh5LWZvbnQtZmFtaWx5LCBSb2JvdG8sIHNhbnMtc2VyaWYpKTtmb250LXNpemU6dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTItZm9udC1zaXplLCAxNHB4KTtsaW5lLWhlaWdodDp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi1saW5lLWhlaWdodCwgMjBweCk7Zm9udC13ZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTItZm9udC13ZWlnaHQsIDQwMCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTItbGV0dGVyLXNwYWNpbmcsIDAuMDE3ODU3MTQyOWVtKTt0ZXh0LWRlY29yYXRpb246dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTItdGV4dC1kZWNvcmF0aW9uLCBpbmhlcml0KTt0ZXh0LXRyYW5zZm9ybTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi10ZXh0LXRyYW5zZm9ybSwgbm9uZSl9Lm1kYy1kYXRhLXRhYmxlX19oZWFkZXItY2VsbHstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGU7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDtmb250LWZhbWlseTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1zdWJ0aXRsZTItZm9udC1mYW1pbHksIHZhcigtLW1kYy10eXBvZ3JhcGh5LWZvbnQtZmFtaWx5LCBSb2JvdG8sIHNhbnMtc2VyaWYpKTtmb250LXNpemU6dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUyLWZvbnQtc2l6ZSwgMTRweCk7bGluZS1oZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUyLWxpbmUtaGVpZ2h0LCAyMnB4KTtmb250LXdlaWdodDp2YXIoLS1tZGMtdHlwb2dyYXBoeS1zdWJ0aXRsZTItZm9udC13ZWlnaHQsIDUwMCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUyLWxldHRlci1zcGFjaW5nLCAwLjAwNzE0Mjg1NzFlbSk7dGV4dC1kZWNvcmF0aW9uOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMi10ZXh0LWRlY29yYXRpb24sIGluaGVyaXQpO3RleHQtdHJhbnNmb3JtOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMi10ZXh0LXRyYW5zZm9ybSwgbm9uZSl9Lm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEpfS5tYXQtbWRjLW9wdGlvbntjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1wcmltYXJ5LW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC44NykpfS5tYXQtbWRjLW9wdGlvbjpob3Zlcjpub3QoLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkKSwubWF0LW1kYy1vcHRpb246Zm9jdXM6bm90KC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCksLm1hdC1tZGMtb3B0aW9uLm1hdC1tZGMtb3B0aW9uLWFjdGl2ZSwubWF0LW1kYy1vcHRpb24ubWRjLWxpc3QtaXRlbS0tc2VsZWN0ZWQ6bm90KC5tYXQtbWRjLW9wdGlvbi1tdWx0aXBsZSk6bm90KC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1wcmltYXJ5IC5tYXQtbWRjLW9wdGlvbi5tZGMtbGlzdC1pdGVtLS1zZWxlY3RlZDpub3QoLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkKSAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1wcmltYXJ5LCAjZjU3YzAwKX0ubWF0LWFjY2VudCAubWF0LW1kYy1vcHRpb24ubWRjLWxpc3QtaXRlbS0tc2VsZWN0ZWQ6bm90KC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCkgLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjZmY5ODAwKX0ubWF0LXdhcm4gLm1hdC1tZGMtb3B0aW9uLm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkOm5vdCgubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQpIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1vcHRncm91cC1sYWJlbHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1wcmltYXJ5LW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC44NykpfS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGx7Y29sb3I6IzYxNjE2MX0ubWF0LXBzZXVkby1jaGVja2JveC1mdWxsLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWR7Y29sb3I6I2IwYjBiMH0ubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVyLC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXJ7Y29sb3I6I2Y1N2MwMH0ubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwsLm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxse2JhY2tncm91bmQ6I2Y1N2MwMH0ubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGw6OmFmdGVyLC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXJ7Y29sb3I6I2ZmZn0ubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXIsLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVye2NvbG9yOiNmZjk4MDB9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwsLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGx7YmFja2dyb3VuZDojZmY5ODAwfS5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlciwubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXJ7Y29sb3I6I2ZmZn0ubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXIsLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVye2NvbG9yOiNmZjk4MDB9Lm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwsLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGx7YmFja2dyb3VuZDojZmY5ODAwfS5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlciwubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXJ7Y29sb3I6I2ZmZn0ubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVyLC5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXJ7Y29sb3I6I2Y0NDMzNn0ubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwsLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxse2JhY2tncm91bmQ6I2Y0NDMzNn0ubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGw6OmFmdGVyLC5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXJ7Y29sb3I6I2ZmZn0ubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlciwubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlcntjb2xvcjojYjBiMGIwfS5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwsLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWQubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbHtiYWNrZ3JvdW5kOiNiMGIwYjB9Lm1hdC1hcHAtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWVsZXZhdGlvbi16MCwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MHtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MSwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MXtib3gtc2hhZG93OjBweCAycHggMXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAzcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejIsLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejJ7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXozLC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoze2JveC1zaGFkb3c6MHB4IDNweCAzcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAzcHggNHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDhweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16NCwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16NHtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXo1LC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXo1e2JveC1zaGFkb3c6MHB4IDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA1cHggOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDE0cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejYsLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejZ7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDZweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDE4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejcsLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejd7Ym94LXNoYWRvdzowcHggNHB4IDVweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDdweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMnB4IDE2cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejgsLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejh7Ym94LXNoYWRvdzowcHggNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejksLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejl7Ym94LXNoYWRvdzowcHggNXB4IDZweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDlweCAxMnB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggM3B4IDE2cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejEwLC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxMHtib3gtc2hhZG93OjBweCA2cHggNnB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTBweCAxNHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNHB4IDE4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejExLC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxMXtib3gtc2hhZG93OjBweCA2cHggN3B4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTFweCAxNXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNHB4IDIwcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejEyLC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxMntib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTJweCAxN3B4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNXB4IDIycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejEzLC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxM3tib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTNweCAxOXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNXB4IDI0cHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejE0LC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxNHtib3gtc2hhZG93OjBweCA3cHggOXB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTRweCAyMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNXB4IDI2cHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejE1LC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxNXtib3gtc2hhZG93OjBweCA4cHggOXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTVweCAyMnB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNnB4IDI4cHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejE2LC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxNntib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE2cHggMjRweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxNywubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MTd7Ym94LXNoYWRvdzowcHggOHB4IDExcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxN3B4IDI2cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA2cHggMzJweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTgsLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejE4e2JveC1zaGFkb3c6MHB4IDlweCAxMXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMThweCAyOHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggN3B4IDM0cHggNnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejE5LC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxOXtib3gtc2hhZG93OjBweCA5cHggMTJweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE5cHggMjlweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDdweCAzNnB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoyMCwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MjB7Ym94LXNoYWRvdzowcHggMTBweCAxM3B4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMjBweCAzMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggOHB4IDM4cHggN3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejIxLC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoyMXtib3gtc2hhZG93OjBweCAxMHB4IDEzcHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAyMXB4IDMzcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA4cHggNDBweCA3cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MjIsLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejIye2JveC1zaGFkb3c6MHB4IDEwcHggMTRweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDIycHggMzVweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDhweCA0MnB4IDdweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoyMywubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MjN7Ym94LXNoYWRvdzowcHggMTFweCAxNHB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMjNweCAzNnB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggOXB4IDQ0cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejI0LC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoyNHtib3gtc2hhZG93OjBweCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAyNHB4IDM4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA5cHggNDZweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LXRoZW1lLWxvYWRlZC1tYXJrZXJ7ZGlzcGxheTpub25lfS5tYXQtbWRjLWNhcmR7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDFweCAxcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWRjLWVsZXZhdGVkLWNhcmQtY29udGFpbmVyLWNvbG9yOiNmZmZ9Lm1hdC1tZGMtY2FyZC1vdXRsaW5lZHtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTstLW1kYy1vdXRsaW5lZC1jYXJkLW91dGxpbmUtY29sb3I6I2UwZTBlMH0ubWF0LW1kYy1jYXJkLXN1YnRpdGxle2NvbG9yOiM2MTYxNjF9Lm1hdC1tZGMtcHJvZ3Jlc3MtYmFyey0tbWRjLWxpbmVhci1wcm9ncmVzcy1hY3RpdmUtaW5kaWNhdG9yLWNvbG9yOiNmNTdjMDB9Lm1hdC1tZGMtcHJvZ3Jlc3MtYmFyIC5tZGMtbGluZWFyLXByb2dyZXNzX19idWZmZXItZG90c3tiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB2ZXJzaW9uPScxLjEnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgeG1sbnM6eGxpbms9J2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnIHg9JzBweCcgeT0nMHB4JyBlbmFibGUtYmFja2dyb3VuZD0nbmV3IDAgMCA1IDInIHhtbDpzcGFjZT0ncHJlc2VydmUnIHZpZXdCb3g9JzAgMCA1IDInIHByZXNlcnZlQXNwZWN0UmF0aW89J25vbmUgc2xpY2UnJTNFJTNDY2lyY2xlIGN4PScxJyBjeT0nMScgcj0nMScgZmlsbD0ncmdiYSgyNDUsIDEyNCwgMCwgMC4yNSknLyUzRSUzQy9zdmclM0UiKX0ubWF0LW1kYy1wcm9ncmVzcy1iYXIgLm1kYy1saW5lYXItcHJvZ3Jlc3NfX2J1ZmZlci1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NSwgMTI0LCAwLCAwLjI1KX0ubWF0LW1kYy1wcm9ncmVzcy1iYXIubWF0LWFjY2VudHstLW1kYy1saW5lYXItcHJvZ3Jlc3MtYWN0aXZlLWluZGljYXRvci1jb2xvcjojZmY5ODAwfS5tYXQtbWRjLXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tZGMtbGluZWFyLXByb2dyZXNzX19idWZmZXItZG90c3tiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB2ZXJzaW9uPScxLjEnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgeG1sbnM6eGxpbms9J2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnIHg9JzBweCcgeT0nMHB4JyBlbmFibGUtYmFja2dyb3VuZD0nbmV3IDAgMCA1IDInIHhtbDpzcGFjZT0ncHJlc2VydmUnIHZpZXdCb3g9JzAgMCA1IDInIHByZXNlcnZlQXNwZWN0UmF0aW89J25vbmUgc2xpY2UnJTNFJTNDY2lyY2xlIGN4PScxJyBjeT0nMScgcj0nMScgZmlsbD0ncmdiYSgyNTUsIDE1MiwgMCwgMC4yNSknLyUzRSUzQy9zdmclM0UiKX0ubWF0LW1kYy1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWRjLWxpbmVhci1wcm9ncmVzc19fYnVmZmVyLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LCAxNTIsIDAsIDAuMjUpfS5tYXQtbWRjLXByb2dyZXNzLWJhci5tYXQtd2FybnstLW1kYy1saW5lYXItcHJvZ3Jlc3MtYWN0aXZlLWluZGljYXRvci1jb2xvcjojZjQ0MzM2fS5tYXQtbWRjLXByb2dyZXNzLWJhci5tYXQtd2FybiAubWRjLWxpbmVhci1wcm9ncmVzc19fYnVmZmVyLWRvdHN7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgdmVyc2lvbj0nMS4xJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyB4PScwcHgnIHk9JzBweCcgZW5hYmxlLWJhY2tncm91bmQ9J25ldyAwIDAgNSAyJyB4bWw6c3BhY2U9J3ByZXNlcnZlJyB2aWV3Qm94PScwIDAgNSAyJyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSdub25lIHNsaWNlJyUzRSUzQ2NpcmNsZSBjeD0nMScgY3k9JzEnIHI9JzEnIGZpbGw9J3JnYmEoMjQ0LCA2NywgNTQsIDAuMjUpJy8lM0UlM0Mvc3ZnJTNFIil9Lm1hdC1tZGMtcHJvZ3Jlc3MtYmFyLm1hdC13YXJuIC5tZGMtbGluZWFyLXByb2dyZXNzX19idWZmZXItYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsIDY3LCA1NCwgMC4yNSl9Lm1hdC1tZGMtdG9vbHRpcHstLW1kYy1wbGFpbi10b29sdGlwLWNvbnRhaW5lci1jb2xvcjojNjE2MTYxOy0tbWRjLXBsYWluLXRvb2x0aXAtc3VwcG9ydGluZy10ZXh0LWNvbG9yOndoaXRlfS5tZGMtdGV4dC1maWVsZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1mbG9hdGluZy1sYWJlbHtjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNil9Lm1kYy10ZXh0LWZpZWxkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLXRleHQtZmllbGRfX2lucHV0e2NvbG9yOnJnYmEoMCwgMCwgMCwgMC44Nyl9QG1lZGlhIGFsbHsubWRjLXRleHQtZmllbGQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtdGV4dC1maWVsZF9faW5wdXQ6OnBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMCwgMCwgMCwgMC42KX19QG1lZGlhIGFsbHsubWRjLXRleHQtZmllbGQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtdGV4dC1maWVsZF9faW5wdXQ6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMCwgMCwgMCwgMC42KX19Lm1kYy10ZXh0LWZpZWxkIC5tZGMtdGV4dC1maWVsZF9faW5wdXR7Y2FyZXQtY29sb3I6dmFyKC0tbWRjLXRoZW1lLXByaW1hcnksICNmNTdjMDApfS5tZGMtdGV4dC1maWVsZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5lIC5tZGMtdGV4dC1maWVsZC1oZWxwZXItdGV4dHtjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNil9Lm1kYy10ZXh0LWZpZWxkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLXRleHQtZmllbGQtY2hhcmFjdGVyLWNvdW50ZXIsLm1kYy10ZXh0LWZpZWxkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSsubWRjLXRleHQtZmllbGQtaGVscGVyLWxpbmUgLm1kYy10ZXh0LWZpZWxkLWNoYXJhY3Rlci1jb3VudGVye2NvbG9yOnJnYmEoMCwgMCwgMCwgMC42KX0ubWRjLXRleHQtZmllbGQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtdGV4dC1maWVsZF9faWNvbi0tbGVhZGluZ3tjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpfS5tZGMtdGV4dC1maWVsZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy10ZXh0LWZpZWxkX19pY29uLS10cmFpbGluZ3tjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpfS5tZGMtdGV4dC1maWVsZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy10ZXh0LWZpZWxkX19hZmZpeC0tcHJlZml4e2NvbG9yOnJnYmEoMCwgMCwgMCwgMC42KX0ubWRjLXRleHQtZmllbGQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtdGV4dC1maWVsZF9fYWZmaXgtLXN1ZmZpeHtjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNil9Lm1kYy10ZXh0LWZpZWxkLS1maWxsZWQgLm1kYy10ZXh0LWZpZWxkX19yaXBwbGU6OmJlZm9yZSwubWRjLXRleHQtZmllbGQtLWZpbGxlZCAubWRjLXRleHQtZmllbGRfX3JpcHBsZTo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtcmlwcGxlLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuODcpKX0ubWRjLXRleHQtZmllbGQtLWZpbGxlZDpob3ZlciAubWRjLXRleHQtZmllbGRfX3JpcHBsZTo6YmVmb3JlLC5tZGMtdGV4dC1maWVsZC0tZmlsbGVkLm1kYy1yaXBwbGUtc3VyZmFjZS0taG92ZXIgLm1kYy10ZXh0LWZpZWxkX19yaXBwbGU6OmJlZm9yZXtvcGFjaXR5OnZhcigtLW1kYy1yaXBwbGUtaG92ZXItb3BhY2l0eSwgMC4wNCl9Lm1kYy10ZXh0LWZpZWxkLS1maWxsZWQubWRjLXJpcHBsZS11cGdyYWRlZC0tYmFja2dyb3VuZC1mb2N1c2VkIC5tZGMtdGV4dC1maWVsZF9fcmlwcGxlOjpiZWZvcmUsLm1kYy10ZXh0LWZpZWxkLS1maWxsZWQ6bm90KC5tZGMtcmlwcGxlLXVwZ3JhZGVkKTpmb2N1cyAubWRjLXRleHQtZmllbGRfX3JpcHBsZTo6YmVmb3Jle29wYWNpdHk6dmFyKC0tbWRjLXJpcHBsZS1mb2N1cy1vcGFjaXR5LCAwLjEyKX0ubWRjLXRleHQtZmllbGQtLWZpbGxlZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjp3aGl0ZXNtb2tlfS5tZGMtdGV4dC1maWVsZC0tZmlsbGVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLWxpbmUtcmlwcGxlOjpiZWZvcmV7Ym9yZGVyLWJvdHRvbS1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNDIpfS5tZGMtdGV4dC1maWVsZC0tZmlsbGVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpob3ZlciAubWRjLWxpbmUtcmlwcGxlOjpiZWZvcmV7Ym9yZGVyLWJvdHRvbS1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuODcpfS5tZGMtdGV4dC1maWVsZC0tZmlsbGVkIC5tZGMtbGluZS1yaXBwbGU6OmFmdGVye2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tbWRjLXRoZW1lLXByaW1hcnksICNmNTdjMDApfS5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCwubWRjLXRleHQtZmllbGQtLW91dGxpbmVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCl9Lm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCk6bm90KC5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCk6aG92ZXIgLm1kYy1ub3RjaGVkLW91dGxpbmUgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCk6bm90KC5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCk6aG92ZXIgLm1kYy1ub3RjaGVkLW91dGxpbmUgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOm5vdCgubWRjLXRleHQtZmllbGQtLWZvY3VzZWQpOmhvdmVyIC5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6cmdiYSgwLCAwLCAwLCAwLjg3KX0ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZywubWRjLXRleHQtZmllbGQtLW91dGxpbmVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtcHJpbWFyeSwgI2Y1N2MwMCl9Lm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLXRleHQtZmllbGRfX3JpcHBsZTo6YmVmb3JlLC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy10ZXh0LWZpZWxkX19yaXBwbGU6OmFmdGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLXJpcHBsZS1jb2xvciwgdHJhbnNwYXJlbnQpfS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1mbG9hdGluZy1sYWJlbHtjb2xvcjpyZ2JhKDI0NSwgMTI0LCAwLCAwLjg3KX0ubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOmhvdmVyIC5tZGMtbGluZS1yaXBwbGU6OmJlZm9yZXtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLWxpbmUtcmlwcGxlOjphZnRlcntib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLWZsb2F0aW5nLWxhYmVse2NvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0taW52YWxpZCsubWRjLXRleHQtZmllbGQtaGVscGVyLWxpbmUgLm1kYy10ZXh0LWZpZWxkLWhlbHBlci10ZXh0LS12YWxpZGF0aW9uLW1zZ3tjb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tZGMtdGV4dC1maWVsZC0taW52YWxpZCAubWRjLXRleHQtZmllbGRfX2lucHV0e2NhcmV0LWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLXRleHQtZmllbGRfX2ljb24tLXRyYWlsaW5ne2NvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLWxpbmUtcmlwcGxlOjpiZWZvcmV7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpub3QoLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkKTpob3ZlciAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZywubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOm5vdCgubWRjLXRleHQtZmllbGQtLWZvY3VzZWQpOmhvdmVyIC5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCwubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOm5vdCgubWRjLXRleHQtZmllbGQtLWZvY3VzZWQpOmhvdmVyIC5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dHtjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpfUBtZWRpYSBhbGx7Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLXRleHQtZmllbGRfX2lucHV0OjpwbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpfX1AbWVkaWEgYWxsey5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KX19Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLWZsb2F0aW5nLWxhYmVse2NvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCl9Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCsubWRjLXRleHQtZmllbGQtaGVscGVyLWxpbmUgLm1kYy10ZXh0LWZpZWxkLWhlbHBlci10ZXh0e2NvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCl9Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLXRleHQtZmllbGQtY2hhcmFjdGVyLWNvdW50ZXIsLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCsubWRjLXRleHQtZmllbGQtaGVscGVyLWxpbmUgLm1kYy10ZXh0LWZpZWxkLWNoYXJhY3Rlci1jb3VudGVye2NvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCl9Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLXRleHQtZmllbGRfX2ljb24tLWxlYWRpbmd7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjMpfS5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19pY29uLS10cmFpbGluZ3tjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMyl9Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLXRleHQtZmllbGRfX2FmZml4LS1wcmVmaXh7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KX0ubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtdGV4dC1maWVsZF9fYWZmaXgtLXN1ZmZpeHtjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpfS5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy1saW5lLXJpcHBsZTo6YmVmb3Jle2JvcmRlci1ib3R0b20tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjA2KX0ubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMDYpfUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXsubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtdGV4dC1maWVsZF9faW5wdXQ6OnBsYWNlaG9sZGVye2NvbG9yOkdyYXlUZXh0fX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKSwoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSl7Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLXRleHQtZmllbGRfX2lucHV0Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjpHcmF5VGV4dH19QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSksKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpey5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy1mbG9hdGluZy1sYWJlbHtjb2xvcjpHcmF5VGV4dH19QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSksKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpey5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5lIC5tZGMtdGV4dC1maWVsZC1oZWxwZXItdGV4dHtjb2xvcjpHcmF5VGV4dH19QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSksKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpey5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkLWNoYXJhY3Rlci1jb3VudGVyLC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5lIC5tZGMtdGV4dC1maWVsZC1jaGFyYWN0ZXItY291bnRlcntjb2xvcjpHcmF5VGV4dH19QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSksKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpey5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19pY29uLS1sZWFkaW5ne2NvbG9yOkdyYXlUZXh0fX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKSwoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSl7Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLXRleHQtZmllbGRfX2ljb24tLXRyYWlsaW5ne2NvbG9yOkdyYXlUZXh0fX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKSwoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSl7Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLXRleHQtZmllbGRfX2FmZml4LS1wcmVmaXh7Y29sb3I6R3JheVRleHR9fUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXsubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtdGV4dC1maWVsZF9fYWZmaXgtLXN1ZmZpeHtjb2xvcjpHcmF5VGV4dH19QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSksKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpey5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy1saW5lLXJpcHBsZTo6YmVmb3Jle2JvcmRlci1ib3R0b20tY29sb3I6R3JheVRleHR9fUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXsubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjpHcmF5VGV4dH19Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZC5tZGMtdGV4dC1maWVsZC0tZmlsbGVke2JhY2tncm91bmQtY29sb3I6I2ZhZmFmYX0ubWF0LW1kYy1mb3JtLWZpZWxkLWVycm9ye2NvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtZm9ybS1maWVsZC1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtbWRjLWZvcm0tZmllbGQ6aG92ZXIgLm1hdC1tZGMtZm9ybS1maWVsZC1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjA0fS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1tZGMtZm9ybS1maWVsZC1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjEyfS5tYXQtbWRjLWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdCAubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1tZGMtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkLm1hdC1wcmltYXJ5IC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOnJnYmEoMjQ1LDEyNCwwLC44Nyl9Lm1hdC1tZGMtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkLm1hdC1hY2NlbnQgLm1hdC1tZGMtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6cmdiYSgyNTUsMTUyLDAsLjg3KX0ubWF0LW1kYy1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvY3VzZWQubWF0LXdhcm4gLm1hdC1tZGMtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6cmdiYSgyNDQsNjcsNTQsLjg3KX0ubWF0LW1kYy1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1tZGMtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGRfX2lucHV0e2NhcmV0LWNvbG9yOnZhcigtLW1kYy10aGVtZS1zZWNvbmRhcnksICNmZjk4MDApfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1saW5lLXJpcHBsZTo6YWZ0ZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjZmY5ODAwKX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLWZsb2F0aW5nLWxhYmVse2NvbG9yOnJnYmEoMjU1LCAxNTIsIDAsIDAuODcpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOmhvdmVyIC5tZGMtbGluZS1yaXBwbGU6OmJlZm9yZXtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1saW5lLXJpcHBsZTo6YWZ0ZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtZmxvYXRpbmctbGFiZWx7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0taW52YWxpZCsubWRjLXRleHQtZmllbGQtaGVscGVyLWxpbmUgLm1kYy10ZXh0LWZpZWxkLWhlbHBlci10ZXh0LS12YWxpZGF0aW9uLW1zZ3tjb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dHtjYXJldC1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtdGV4dC1maWVsZF9faWNvbi0tdHJhaWxpbmd7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLWxpbmUtcmlwcGxlOjpiZWZvcmV7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCwubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCk6bm90KC5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCk6aG92ZXIgLm1kYy1ub3RjaGVkLW91dGxpbmUgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCk6bm90KC5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCk6aG92ZXIgLm1kYy1ub3RjaGVkLW91dGxpbmUgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOm5vdCgubWRjLXRleHQtZmllbGQtLWZvY3VzZWQpOmhvdmVyIC5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZywubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLW91dGxpbmVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZywubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLW91dGxpbmVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy10aGVtZS1zZWNvbmRhcnksICNmZjk4MDApfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkX19pbnB1dHtjYXJldC1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm46bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbGluZS1yaXBwbGU6OmFmdGVye2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1mbG9hdGluZy1sYWJlbHtjb2xvcjpyZ2JhKDI0NCwgNjcsIDU0LCAwLjg3KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCk6aG92ZXIgLm1kYy1saW5lLXJpcHBsZTo6YmVmb3Jle2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1saW5lLXJpcHBsZTo6YWZ0ZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLWZsb2F0aW5nLWxhYmVse2NvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkKy5tZGMtdGV4dC1maWVsZC1oZWxwZXItbGluZSAubWRjLXRleHQtZmllbGQtaGVscGVyLXRleHQtLXZhbGlkYXRpb24tbXNne2NvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dHtjYXJldC1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLXRleHQtZmllbGRfX2ljb24tLXRyYWlsaW5ne2NvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbGluZS1yaXBwbGU6OmJlZm9yZXtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCk6bm90KC5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCk6aG92ZXIgLm1kYy1ub3RjaGVkLW91dGxpbmUgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOm5vdCgubWRjLXRleHQtZmllbGQtLWZvY3VzZWQpOmhvdmVyIC5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCwubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCk6bm90KC5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCk6aG92ZXIgLm1kYy1ub3RjaGVkLW91dGxpbmUgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZywubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLW91dGxpbmVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZywubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCwubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1tZGMtZm9ybS1maWVsZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2h7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkIHJnYmEoMCwwLDAsMCl9W2Rpcj1ydGxdIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LW1kYy1mb3JtLWZpZWxkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaHtib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDoxcHggc29saWQgcmdiYSgwLDAsMCwwKX0ubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4e21pbi1oZWlnaHQ6NTZweH0ubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXIgLm1hdC1tZGMtZm9ybS1maWVsZC1mbGV4IC5tYXQtbWRjLWZsb2F0aW5nLWxhYmVse3RvcDoyOHB4fS5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlci5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1ub3RjaGVkLW91dGxpbmUtLXVwZ3JhZGVkIC5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3Zley0tbWF0LW1kYy1mb3JtLWZpZWxkLWxhYmVsLXRyYW5zZm9ybTogdHJhbnNsYXRlWSggLTM0Ljc1cHgpIHNjYWxlKHZhcigtLW1hdC1tZGMtZm9ybS1maWVsZC1mbG9hdGluZy1sYWJlbC1zY2FsZSwgMC43NSkpO3RyYW5zZm9ybTp2YXIoLS1tYXQtbWRjLWZvcm0tZmllbGQtbGFiZWwtdHJhbnNmb3JtKX0ubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXIubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXh7cGFkZGluZy10b3A6MTZweDtwYWRkaW5nLWJvdHRvbToxNnB4fS5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlcjpub3QoLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCkgLm1hdC1tZGMtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nLXRvcDoyNHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWRjLXRleHQtZmllbGQtLW5vLWxhYmVsOm5vdCgubWRjLXRleHQtZmllbGQtLW91dGxpbmVkKTpub3QoLm1kYy10ZXh0LWZpZWxkLS10ZXh0YXJlYSkgLm1hdC1tZGMtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nLXRvcDoxNnB4O3BhZGRpbmctYm90dG9tOjE2cHh9Lm1kYy1tZW51LXN1cmZhY2V7Ym94LXNoYWRvdzowcHggNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtc3VyZmFjZSwgI2ZmZik7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtcHJpbWFyeS1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuODcpKX0ubWRjLWxpc3QtaXRlbV9fc2Vjb25kYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtc2Vjb25kYXJ5LW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC41NCkpfS5tZGMtbGlzdC1pdGVtX19vdmVybGluZS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LWhpbnQtb24tYmFja2dyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjM4KSl9Lm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydCwubWRjLWxpc3QtaXRlbS0td2l0aC10cmFpbGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19lbmR7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LC5tZGMtbGlzdC1pdGVtLS13aXRoLXRyYWlsaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX2VuZHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1pY29uLW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC4zOCkpfS5tZGMtbGlzdC1pdGVtX19lbmR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtaGludC1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuMzgpKX0ubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fY29udGVudCwubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX2VuZHtvcGFjaXR5OjAuMzh9Lm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fc2Vjb25kYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fb3ZlcmxpbmUtdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgIzAwMCl9Lm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgIzAwMCl9Lm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHJhaWxpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fZW5ke2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQubWRjLWxpc3QtaXRlbS0td2l0aC10cmFpbGluZy1tZXRhIC5tZGMtbGlzdC1pdGVtX19lbmR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tZGMtbGlzdC1pdGVtLS1zZWxlY3RlZCAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0LC5tZGMtbGlzdC1pdGVtLS1hY3RpdmF0ZWQgLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtcHJpbWFyeSwgI2Y1N2MwMCl9Lm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydCwubWRjLWxpc3QtaXRlbS0tYWN0aXZhdGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtcHJpbWFyeSwgI2Y1N2MwMCl9Lm1kYy1kZXByZWNhdGVkLWxpc3QtZ3JvdXBfX3N1YmhlYWRlcntjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1wcmltYXJ5LW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC44NykpfS5tZGMtbGlzdC1kaXZpZGVyOjphZnRlcntib3JkZXItYm90dG9tLWNvbG9yOndoaXRlfS5tZGMtbGlzdC1kaXZpZGVye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LW1kYy1zZWxlY3QtdmFsdWV7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtbWRjLXNlbGVjdC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsMCwwLC42KX0ubWF0LW1kYy1zZWxlY3QtZGlzYWJsZWQgLm1hdC1tZGMtc2VsZWN0LXZhbHVle2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LW1kYy1zZWxlY3QtYXJyb3d7Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LXByaW1hcnkgLm1hdC1tZGMtc2VsZWN0LWFycm93e2NvbG9yOnJnYmEoMjQ1LDEyNCwwLC44Nyl9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtYWNjZW50IC5tYXQtbWRjLXNlbGVjdC1hcnJvd3tjb2xvcjpyZ2JhKDI1NSwxNTIsMCwuODcpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LXdhcm4gLm1hdC1tZGMtc2VsZWN0LWFycm93e2NvbG9yOnJnYmEoMjQ0LDY3LDU0LC44Nyl9Lm1hdC1tZGMtZm9ybS1maWVsZCAubWF0LW1kYy1zZWxlY3QubWF0LW1kYy1zZWxlY3QtaW52YWxpZCAubWF0LW1kYy1zZWxlY3QtYXJyb3d7Y29sb3I6cmdiYSgyNDQsNjcsNTQsLjg3KX0ubWF0LW1kYy1mb3JtLWZpZWxkIC5tYXQtbWRjLXNlbGVjdC5tYXQtbWRjLXNlbGVjdC1kaXNhYmxlZCAubWF0LW1kYy1zZWxlY3QtYXJyb3d7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tZGMtbWVudS1zdXJmYWNle2JveC1zaGFkb3c6MHB4IDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLXRoZW1lLXN1cmZhY2UsICNmZmYpO2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LXByaW1hcnktb24tYmFja2dyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjg3KSl9Lm1kYy1saXN0LWl0ZW1fX3NlY29uZGFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LXNlY29uZGFyeS1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuNTQpKX0ubWRjLWxpc3QtaXRlbV9fb3ZlcmxpbmUtdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1oaW50LW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC4zOCkpfS5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHJhaWxpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fZW5ke2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydCwubWRjLWxpc3QtaXRlbS0td2l0aC10cmFpbGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19lbmR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtaWNvbi1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuMzgpKX0ubWRjLWxpc3QtaXRlbV9fZW5ke2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LWhpbnQtb24tYmFja2dyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjM4KSl9Lm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19zdGFydCwubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX2NvbnRlbnQsLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19lbmR7b3BhY2l0eTowLjM4fS5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX3NlY29uZGFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX292ZXJsaW5lLXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZC5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZC5tZGMtbGlzdC1pdGVtLS13aXRoLXRyYWlsaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX2VuZHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgIzAwMCl9Lm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHJhaWxpbmctbWV0YSAubWRjLWxpc3QtaXRlbV9fZW5ke2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbS0tc2VsZWN0ZWQgLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dCwubWRjLWxpc3QtaXRlbS0tYWN0aXZhdGVkIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXByaW1hcnksICNmNTdjMDApfS5tZGMtbGlzdC1pdGVtLS1zZWxlY3RlZC5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1kYy1saXN0LWl0ZW0tLWFjdGl2YXRlZC5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXByaW1hcnksICNmNTdjMDApfS5tZGMtZGVwcmVjYXRlZC1saXN0LWdyb3VwX19zdWJoZWFkZXJ7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtcHJpbWFyeS1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuODcpKX0ubWRjLWxpc3QtZGl2aWRlcjo6YWZ0ZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp3aGl0ZX0ubWRjLWxpc3QtZGl2aWRlcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1tZGMtZGlhbG9nLWNvbnRhaW5lcnstLW1kYy1kaWFsb2ctY29udGFpbmVyLWNvbG9yOndoaXRlOy0tbWRjLWRpYWxvZy13aXRoLWRpdmlkZXItZGl2aWRlci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWRjLWRpYWxvZy1zdWJoZWFkLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC44Nyk7LS1tZGMtZGlhbG9nLXN1cHBvcnRpbmctdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNil9Lm1hdC1tZGMtc3RhbmRhcmQtY2hpcHstLW1kYy1jaGlwLWVsZXZhdGVkLWNvbnRhaW5lci1jb2xvcjojZTBlMGUwOy0tbWRjLWNoaXAtZWxldmF0ZWQtZGlzYWJsZWQtY29udGFpbmVyLWNvbG9yOiNlMGUwZTA7LS1tZGMtY2hpcC1sYWJlbC10ZXh0LWNvbG9yOiMyMTIxMjE7LS1tZGMtY2hpcC1kaXNhYmxlZC1sYWJlbC10ZXh0LWNvbG9yOiMyMTIxMjE7LS1tZGMtY2hpcC13aXRoLWljb24taWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLWNoaXAtd2l0aC1pY29uLWRpc2FibGVkLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1jaGlwLXdpdGgtdHJhaWxpbmctaWNvbi1kaXNhYmxlZC10cmFpbGluZy1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtY2hpcC13aXRoLXRyYWlsaW5nLWljb24tdHJhaWxpbmctaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLWNoaXAtd2l0aC1pY29uLXNlbGVjdGVkLWljb24tY29sb3I6IzIxMjEyMX0ubWF0LW1kYy1zdGFuZGFyZC1jaGlwLm1hdC1wcmltYXJ5Lm1hdC1tZGMtY2hpcC1zZWxlY3RlZCwubWF0LW1kYy1zdGFuZGFyZC1jaGlwLm1hdC1wcmltYXJ5Lm1hdC1tZGMtY2hpcC1oaWdobGlnaHRlZHstLW1kYy1jaGlwLWVsZXZhdGVkLWNvbnRhaW5lci1jb2xvcjojZjU3YzAwOy0tbWRjLWNoaXAtZWxldmF0ZWQtZGlzYWJsZWQtY29udGFpbmVyLWNvbG9yOiNmNTdjMDA7LS1tZGMtY2hpcC1sYWJlbC10ZXh0LWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtaWNvbi1pY29uLWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC1pY29uLWRpc2FibGVkLWljb24tY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLXRyYWlsaW5nLWljb24tZGlzYWJsZWQtdHJhaWxpbmctaWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtdHJhaWxpbmctaWNvbi10cmFpbGluZy1pY29uLWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC1pY29uLXNlbGVjdGVkLWljb24tY29sb3I6d2hpdGV9Lm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tYXQtYWNjZW50Lm1hdC1tZGMtY2hpcC1zZWxlY3RlZCwubWF0LW1kYy1zdGFuZGFyZC1jaGlwLm1hdC1hY2NlbnQubWF0LW1kYy1jaGlwLWhpZ2hsaWdodGVkey0tbWRjLWNoaXAtZWxldmF0ZWQtY29udGFpbmVyLWNvbG9yOiNmZjk4MDA7LS1tZGMtY2hpcC1lbGV2YXRlZC1kaXNhYmxlZC1jb250YWluZXItY29sb3I6I2ZmOTgwMDstLW1kYy1jaGlwLWxhYmVsLXRleHQtY29sb3I6d2hpdGU7LS1tZGMtY2hpcC1kaXNhYmxlZC1sYWJlbC10ZXh0LWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC1pY29uLWljb24tY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLWljb24tZGlzYWJsZWQtaWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtdHJhaWxpbmctaWNvbi1kaXNhYmxlZC10cmFpbGluZy1pY29uLWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC10cmFpbGluZy1pY29uLXRyYWlsaW5nLWljb24tY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLWljb24tc2VsZWN0ZWQtaWNvbi1jb2xvcjp3aGl0ZX0ubWF0LW1kYy1zdGFuZGFyZC1jaGlwLm1hdC13YXJuLm1hdC1tZGMtY2hpcC1zZWxlY3RlZCwubWF0LW1kYy1zdGFuZGFyZC1jaGlwLm1hdC13YXJuLm1hdC1tZGMtY2hpcC1oaWdobGlnaHRlZHstLW1kYy1jaGlwLWVsZXZhdGVkLWNvbnRhaW5lci1jb2xvcjojZjQ0MzM2Oy0tbWRjLWNoaXAtZWxldmF0ZWQtZGlzYWJsZWQtY29udGFpbmVyLWNvbG9yOiNmNDQzMzY7LS1tZGMtY2hpcC1sYWJlbC10ZXh0LWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtaWNvbi1pY29uLWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC1pY29uLWRpc2FibGVkLWljb24tY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLXRyYWlsaW5nLWljb24tZGlzYWJsZWQtdHJhaWxpbmctaWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtdHJhaWxpbmctaWNvbi10cmFpbGluZy1pY29uLWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC1pY29uLXNlbGVjdGVkLWljb24tY29sb3I6d2hpdGV9Lm1hdC1tZGMtY2hpcC1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQ6IzAwMH0ubWF0LW1kYy1jaGlwe2hlaWdodDozMnB4fS5tYXQtbWRjLXNsaWRlLXRvZ2dsZXstLW1kYy1zd2l0Y2gtZGlzYWJsZWQtc2VsZWN0ZWQtaGFuZGxlLWNvbG9yOiM0MjQyNDI7LS1tZGMtc3dpdGNoLWRpc2FibGVkLXVuc2VsZWN0ZWQtaGFuZGxlLWNvbG9yOiM0MjQyNDI7LS1tZGMtc3dpdGNoLWRpc2FibGVkLXNlbGVjdGVkLXRyYWNrLWNvbG9yOiM0MjQyNDI7LS1tZGMtc3dpdGNoLWRpc2FibGVkLXVuc2VsZWN0ZWQtdHJhY2stY29sb3I6IzQyNDI0MjstLW1kYy1zd2l0Y2gtdW5zZWxlY3RlZC1mb2N1cy1zdGF0ZS1sYXllci1jb2xvcjojNDI0MjQyOy0tbWRjLXN3aXRjaC11bnNlbGVjdGVkLXByZXNzZWQtc3RhdGUtbGF5ZXItY29sb3I6IzQyNDI0MjstLW1kYy1zd2l0Y2gtdW5zZWxlY3RlZC1ob3Zlci1zdGF0ZS1sYXllci1jb2xvcjojNDI0MjQyOy0tbWRjLXN3aXRjaC11bnNlbGVjdGVkLWZvY3VzLXRyYWNrLWNvbG9yOiNlMGUwZTA7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtaG92ZXItdHJhY2stY29sb3I6I2UwZTBlMDstLW1kYy1zd2l0Y2gtdW5zZWxlY3RlZC1wcmVzc2VkLXRyYWNrLWNvbG9yOiNlMGUwZTA7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtdHJhY2stY29sb3I6I2UwZTBlMDstLW1kYy1zd2l0Y2gtdW5zZWxlY3RlZC1mb2N1cy1oYW5kbGUtY29sb3I6IzIxMjEyMTstLW1kYy1zd2l0Y2gtdW5zZWxlY3RlZC1ob3Zlci1oYW5kbGUtY29sb3I6IzIxMjEyMTstLW1kYy1zd2l0Y2gtdW5zZWxlY3RlZC1wcmVzc2VkLWhhbmRsZS1jb2xvcjojMjEyMTIxOy0tbWRjLXN3aXRjaC1oYW5kbGUtc3VyZmFjZS1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtc3VyZmFjZSwgI2ZmZik7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtaGFuZGxlLWNvbG9yOiM2MTYxNjE7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWljb24tY29sb3I6I2ZmZjstLW1kYy1zd2l0Y2gtZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjojZmZmOy0tbWRjLXN3aXRjaC1kaXNhYmxlZC11bnNlbGVjdGVkLWljb24tY29sb3I6I2ZmZjstLW1kYy1zd2l0Y2gtdW5zZWxlY3RlZC1pY29uLWNvbG9yOiNmZmZ9Lm1hdC1tZGMtc2xpZGUtdG9nZ2xlIC5tZGMtZm9ybS1maWVsZHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1wcmltYXJ5LW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC44NykpfS5tYXQtbWRjLXNsaWRlLXRvZ2dsZSAubWRjLXN3aXRjaC0tZGlzYWJsZWQrbGFiZWx7Y29sb3I6Izc1NzU3NX0ubWF0LW1kYy1zbGlkZS10b2dnbGUubWF0LXByaW1hcnl7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWZvY3VzLXN0YXRlLWxheWVyLWNvbG9yOiNmYjhjMDA7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWhhbmRsZS1jb2xvcjojZmI4YzAwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1ob3Zlci1zdGF0ZS1sYXllci1jb2xvcjojZmI4YzAwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1wcmVzc2VkLXN0YXRlLWxheWVyLWNvbG9yOiNmYjhjMDA7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWZvY3VzLWhhbmRsZS1jb2xvcjojZTY1MTAwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1ob3Zlci1oYW5kbGUtY29sb3I6I2U2NTEwMDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtcHJlc3NlZC1oYW5kbGUtY29sb3I6I2U2NTEwMDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtZm9jdXMtdHJhY2stY29sb3I6I2ZmYjc0ZDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtaG92ZXItdHJhY2stY29sb3I6I2ZmYjc0ZDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtcHJlc3NlZC10cmFjay1jb2xvcjojZmZiNzRkOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC10cmFjay1jb2xvcjojZmZiNzRkfS5tYXQtbWRjLXNsaWRlLXRvZ2dsZS5tYXQtYWNjZW50ey0tbWRjLXN3aXRjaC1zZWxlY3RlZC1mb2N1cy1zdGF0ZS1sYXllci1jb2xvcjojZmI4YzAwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1oYW5kbGUtY29sb3I6I2ZiOGMwMDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtaG92ZXItc3RhdGUtbGF5ZXItY29sb3I6I2ZiOGMwMDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtcHJlc3NlZC1zdGF0ZS1sYXllci1jb2xvcjojZmI4YzAwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1mb2N1cy1oYW5kbGUtY29sb3I6I2U2NTEwMDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtaG92ZXItaGFuZGxlLWNvbG9yOiNlNjUxMDA7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLXByZXNzZWQtaGFuZGxlLWNvbG9yOiNlNjUxMDA7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWZvY3VzLXRyYWNrLWNvbG9yOiNmZmI3NGQ7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWhvdmVyLXRyYWNrLWNvbG9yOiNmZmI3NGQ7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLXByZXNzZWQtdHJhY2stY29sb3I6I2ZmYjc0ZDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtdHJhY2stY29sb3I6I2ZmYjc0ZH0ubWF0LW1kYy1zbGlkZS10b2dnbGUubWF0LXdhcm57LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWZvY3VzLXN0YXRlLWxheWVyLWNvbG9yOiNlNTM5MzU7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWhhbmRsZS1jb2xvcjojZTUzOTM1Oy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1ob3Zlci1zdGF0ZS1sYXllci1jb2xvcjojZTUzOTM1Oy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1wcmVzc2VkLXN0YXRlLWxheWVyLWNvbG9yOiNlNTM5MzU7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWZvY3VzLWhhbmRsZS1jb2xvcjojYjcxYzFjOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1ob3Zlci1oYW5kbGUtY29sb3I6I2I3MWMxYzstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtcHJlc3NlZC1oYW5kbGUtY29sb3I6I2I3MWMxYzstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtZm9jdXMtdHJhY2stY29sb3I6I2U1NzM3MzstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtaG92ZXItdHJhY2stY29sb3I6I2U1NzM3MzstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtcHJlc3NlZC10cmFjay1jb2xvcjojZTU3MzczOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC10cmFjay1jb2xvcjojZTU3MzczfS5tYXQtbWRjLXNsaWRlLXRvZ2dsZXstLW1kYy1zd2l0Y2gtc3RhdGUtbGF5ZXItc2l6ZTo0OHB4fS5tYXQtbWRjLXJhZGlvLWJ1dHRvbiAubWRjLWZvcm0tZmllbGR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtcHJpbWFyeS1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuODcpKX0ubWF0LW1kYy1yYWRpby1idXR0b24ubWF0LXByaW1hcnl7LS1tZGMtcmFkaW8tZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjojMDAwOy0tbWRjLXJhZGlvLWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjojMDAwOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZjU3YzAwOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2Y1N2MwMDstLW1kYy1yYWRpby1zZWxlY3RlZC1pY29uLWNvbG9yOiNmNTdjMDA7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNmNTdjMDA7LS1tYXQtbWRjLXJhZGlvLXJpcHBsZS1jb2xvcjogIzAwMDstLW1hdC1tZGMtcmFkaW8tY2hlY2tlZC1yaXBwbGUtY29sb3I6ICNmNTdjMDB9Lm1hdC1tZGMtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5IC5tZGMtcmFkaW8tLWRpc2FibGVkK2xhYmVse2NvbG9yOiM3NTc1NzV9Lm1hdC1tZGMtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnR7LS1tZGMtcmFkaW8tZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjojMDAwOy0tbWRjLXJhZGlvLWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjojMDAwOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZmY5ODAwOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2ZmOTgwMDstLW1kYy1yYWRpby1zZWxlY3RlZC1pY29uLWNvbG9yOiNmZjk4MDA7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNmZjk4MDA7LS1tYXQtbWRjLXJhZGlvLXJpcHBsZS1jb2xvcjogIzAwMDstLW1hdC1tZGMtcmFkaW8tY2hlY2tlZC1yaXBwbGUtY29sb3I6ICNmZjk4MDB9Lm1hdC1tZGMtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQgLm1kYy1yYWRpby0tZGlzYWJsZWQrbGFiZWx7Y29sb3I6Izc1NzU3NX0ubWF0LW1kYy1yYWRpby1idXR0b24ubWF0LXdhcm57LS1tZGMtcmFkaW8tZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjojMDAwOy0tbWRjLXJhZGlvLWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjojMDAwOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLXJhZGlvLXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1yYWRpby1zZWxlY3RlZC1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNmNDQzMzY7LS1tYXQtbWRjLXJhZGlvLXJpcHBsZS1jb2xvcjogIzAwMDstLW1hdC1tZGMtcmFkaW8tY2hlY2tlZC1yaXBwbGUtY29sb3I6ICNmNDQzMzZ9Lm1hdC1tZGMtcmFkaW8tYnV0dG9uLm1hdC13YXJuIC5tZGMtcmFkaW8tLWRpc2FibGVkK2xhYmVse2NvbG9yOiM3NTc1NzV9Lm1hdC1tZGMtcmFkaW8tYnV0dG9uIC5tZGMtcmFkaW97cGFkZGluZzpjYWxjKCg0MHB4IC0gMjBweCkgLyAyKX0ubWF0LW1kYy1yYWRpby1idXR0b24gLm1kYy1yYWRpbyAubWRjLXJhZGlvX19iYWNrZ3JvdW5kOjpiZWZvcmV7dG9wOmNhbGMoLTEgKiAoNDBweCAtIDIwcHgpIC8gMik7bGVmdDpjYWxjKC0xICogKDQwcHggLSAyMHB4KSAvIDIpO3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHh9Lm1hdC1tZGMtcmFkaW8tYnV0dG9uIC5tZGMtcmFkaW8gLm1kYy1yYWRpb19fbmF0aXZlLWNvbnRyb2x7dG9wOmNhbGMoKDQwcHggLSA0MHB4KSAvIDIpO3JpZ2h0OmNhbGMoKDQwcHggLSA0MHB4KSAvIDIpO2xlZnQ6Y2FsYygoNDBweCAtIDQwcHgpIC8gMik7d2lkdGg6NDBweDtoZWlnaHQ6NDBweH0ubWF0LW1kYy1zbGlkZXJ7LS1tZGMtc2xpZGVyLWxhYmVsLWNvbnRhaW5lci1jb2xvcjpibGFjazstLW1kYy1zbGlkZXItbGFiZWwtbGFiZWwtdGV4dC1jb2xvcjp3aGl0ZTstLW1kYy1zbGlkZXItZGlzYWJsZWQtaGFuZGxlLWNvbG9yOiMwMDA7LS1tZGMtc2xpZGVyLWRpc2FibGVkLWFjdGl2ZS10cmFjay1jb2xvcjojMDAwOy0tbWRjLXNsaWRlci1kaXNhYmxlZC1pbmFjdGl2ZS10cmFjay1jb2xvcjojMDAwOy0tbWRjLXNsaWRlci13aXRoLXRpY2stbWFya3MtZGlzYWJsZWQtY29udGFpbmVyLWNvbG9yOiMwMDA7LS1tYXQtbWRjLXNsaWRlci12YWx1ZS1pbmRpY2F0b3Itb3BhY2l0eTogMC42fS5tYXQtbWRjLXNsaWRlci5tYXQtcHJpbWFyeXstLW1kYy1zbGlkZXItaGFuZGxlLWNvbG9yOiNmNTdjMDA7LS1tZGMtc2xpZGVyLWZvY3VzLWhhbmRsZS1jb2xvcjojZjU3YzAwOy0tbWRjLXNsaWRlci1ob3Zlci1oYW5kbGUtY29sb3I6I2Y1N2MwMDstLW1kYy1zbGlkZXItYWN0aXZlLXRyYWNrLWNvbG9yOiNmNTdjMDA7LS1tZGMtc2xpZGVyLWluYWN0aXZlLXRyYWNrLWNvbG9yOiNmNTdjMDA7LS1tZGMtc2xpZGVyLXdpdGgtdGljay1tYXJrcy1hY3RpdmUtY29udGFpbmVyLWNvbG9yOiMwMDA7LS1tZGMtc2xpZGVyLXdpdGgtdGljay1tYXJrcy1pbmFjdGl2ZS1jb250YWluZXItY29sb3I6I2Y1N2MwMDstLW1hdC1tZGMtc2xpZGVyLXJpcHBsZS1jb2xvcjogI2Y1N2MwMDstLW1hdC1tZGMtc2xpZGVyLWhvdmVyLXJpcHBsZS1jb2xvcjogcmdiYSgyNDUsIDEyNCwgMCwgMC4wNSk7LS1tYXQtbWRjLXNsaWRlci1mb2N1cy1yaXBwbGUtY29sb3I6IHJnYmEoMjQ1LCAxMjQsIDAsIDAuMil9Lm1hdC1tZGMtc2xpZGVyLm1hdC1hY2NlbnR7LS1tZGMtc2xpZGVyLWhhbmRsZS1jb2xvcjojZmY5ODAwOy0tbWRjLXNsaWRlci1mb2N1cy1oYW5kbGUtY29sb3I6I2ZmOTgwMDstLW1kYy1zbGlkZXItaG92ZXItaGFuZGxlLWNvbG9yOiNmZjk4MDA7LS1tZGMtc2xpZGVyLWFjdGl2ZS10cmFjay1jb2xvcjojZmY5ODAwOy0tbWRjLXNsaWRlci1pbmFjdGl2ZS10cmFjay1jb2xvcjojZmY5ODAwOy0tbWRjLXNsaWRlci13aXRoLXRpY2stbWFya3MtYWN0aXZlLWNvbnRhaW5lci1jb2xvcjojMDAwOy0tbWRjLXNsaWRlci13aXRoLXRpY2stbWFya3MtaW5hY3RpdmUtY29udGFpbmVyLWNvbG9yOiNmZjk4MDA7LS1tYXQtbWRjLXNsaWRlci1yaXBwbGUtY29sb3I6ICNmZjk4MDA7LS1tYXQtbWRjLXNsaWRlci1ob3Zlci1yaXBwbGUtY29sb3I6IHJnYmEoMjU1LCAxNTIsIDAsIDAuMDUpOy0tbWF0LW1kYy1zbGlkZXItZm9jdXMtcmlwcGxlLWNvbG9yOiByZ2JhKDI1NSwgMTUyLCAwLCAwLjIpfS5tYXQtbWRjLXNsaWRlci5tYXQtd2FybnstLW1kYy1zbGlkZXItaGFuZGxlLWNvbG9yOiNmNDQzMzY7LS1tZGMtc2xpZGVyLWZvY3VzLWhhbmRsZS1jb2xvcjojZjQ0MzM2Oy0tbWRjLXNsaWRlci1ob3Zlci1oYW5kbGUtY29sb3I6I2Y0NDMzNjstLW1kYy1zbGlkZXItYWN0aXZlLXRyYWNrLWNvbG9yOiNmNDQzMzY7LS1tZGMtc2xpZGVyLWluYWN0aXZlLXRyYWNrLWNvbG9yOiNmNDQzMzY7LS1tZGMtc2xpZGVyLXdpdGgtdGljay1tYXJrcy1hY3RpdmUtY29udGFpbmVyLWNvbG9yOiNmZmY7LS1tZGMtc2xpZGVyLXdpdGgtdGljay1tYXJrcy1pbmFjdGl2ZS1jb250YWluZXItY29sb3I6I2Y0NDMzNjstLW1hdC1tZGMtc2xpZGVyLXJpcHBsZS1jb2xvcjogI2Y0NDMzNjstLW1hdC1tZGMtc2xpZGVyLWhvdmVyLXJpcHBsZS1jb2xvcjogcmdiYSgyNDQsIDY3LCA1NCwgMC4wNSk7LS1tYXQtbWRjLXNsaWRlci1mb2N1cy1yaXBwbGUtY29sb3I6IHJnYmEoMjQ0LCA2NywgNTQsIDAuMil9Lm1kYy1tZW51LXN1cmZhY2V7Ym94LXNoYWRvdzowcHggNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtc3VyZmFjZSwgI2ZmZik7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtcHJpbWFyeS1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuODcpKX0ubWRjLWxpc3QtaXRlbV9fc2Vjb25kYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtc2Vjb25kYXJ5LW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC41NCkpfS5tZGMtbGlzdC1pdGVtX19vdmVybGluZS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LWhpbnQtb24tYmFja2dyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjM4KSl9Lm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydCwubWRjLWxpc3QtaXRlbS0td2l0aC10cmFpbGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19lbmR7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LC5tZGMtbGlzdC1pdGVtLS13aXRoLXRyYWlsaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX2VuZHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1pY29uLW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC4zOCkpfS5tZGMtbGlzdC1pdGVtX19lbmR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtaGludC1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuMzgpKX0ubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fY29udGVudCwubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX2VuZHtvcGFjaXR5OjAuMzh9Lm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fc2Vjb25kYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fb3ZlcmxpbmUtdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgIzAwMCl9Lm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgIzAwMCl9Lm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHJhaWxpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fZW5ke2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQubWRjLWxpc3QtaXRlbS0td2l0aC10cmFpbGluZy1tZXRhIC5tZGMtbGlzdC1pdGVtX19lbmR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tZGMtbGlzdC1pdGVtLS1zZWxlY3RlZCAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0LC5tZGMtbGlzdC1pdGVtLS1hY3RpdmF0ZWQgLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtcHJpbWFyeSwgI2Y1N2MwMCl9Lm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydCwubWRjLWxpc3QtaXRlbS0tYWN0aXZhdGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtcHJpbWFyeSwgI2Y1N2MwMCl9Lm1kYy1kZXByZWNhdGVkLWxpc3QtZ3JvdXBfX3N1YmhlYWRlcntjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1wcmltYXJ5LW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC44NykpfS5tZGMtbGlzdC1kaXZpZGVyOjphZnRlcntib3JkZXItYm90dG9tLWNvbG9yOndoaXRlfS5tZGMtbGlzdC1kaXZpZGVye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LW1kYy1tZW51LWl0ZW1bZGlzYWJsZWRdLC5tYXQtbWRjLW1lbnUtaXRlbVtkaXNhYmxlZF0gLm1hdC1tZGMtbWVudS1zdWJtZW51LWljb24sLm1hdC1tZGMtbWVudS1pdGVtW2Rpc2FibGVkXSAubWF0LWljb24tbm8tY29sb3J7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtZGlzYWJsZWQtb24tYmFja2dyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjM4KSl9Lm1hdC1tZGMtbWVudS1pdGVtIC5tYXQtaWNvbi1uby1jb2xvciwubWF0LW1kYy1tZW51LXN1Ym1lbnUtaWNvbntjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1wcmltYXJ5LW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC44NykpfS5tYXQtbWRjLW1lbnUtaXRlbTpob3Zlcjpub3QoW2Rpc2FibGVkXSksLm1hdC1tZGMtbWVudS1pdGVtLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KFtkaXNhYmxlZF0pLC5tYXQtbWRjLW1lbnUtaXRlbS5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoW2Rpc2FibGVkXSksLm1hdC1tZGMtbWVudS1pdGVtLWhpZ2hsaWdodGVkOm5vdChbZGlzYWJsZWRdKXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA0KX0ubWF0LW1kYy1saXN0LWJhc2V7LS1tZGMtbGlzdC1saXN0LWl0ZW0tbGFiZWwtdGV4dC1jb2xvcjojMjEyMTIxOy0tbWRjLWxpc3QtbGlzdC1pdGVtLXN1cHBvcnRpbmctdGV4dC1jb2xvcjojNjE2MTYxOy0tbWRjLWxpc3QtbGlzdC1pdGVtLWxlYWRpbmctaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWxpc3QtbGlzdC1pdGVtLXRyYWlsaW5nLXN1cHBvcnRpbmctdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWxpc3QtbGlzdC1pdGVtLXRyYWlsaW5nLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1saXN0LWxpc3QtaXRlbS1zZWxlY3RlZC10cmFpbGluZy1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtbGlzdC1saXN0LWl0ZW0tZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjpibGFjazstLW1kYy1saXN0LWxpc3QtaXRlbS1kaXNhYmxlZC1sZWFkaW5nLWljb24tY29sb3I6YmxhY2s7LS1tZGMtbGlzdC1saXN0LWl0ZW0tZGlzYWJsZWQtdHJhaWxpbmctaWNvbi1jb2xvcjpibGFjazstLW1kYy1saXN0LWxpc3QtaXRlbS1ob3Zlci1sYWJlbC10ZXh0LWNvbG9yOiMyMTIxMjE7LS1tZGMtbGlzdC1saXN0LWl0ZW0taG92ZXItbGVhZGluZy1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtbGlzdC1saXN0LWl0ZW0taG92ZXItdHJhaWxpbmctaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWxpc3QtbGlzdC1pdGVtLWZvY3VzLWxhYmVsLXRleHQtY29sb3I6IzIxMjEyMTstLW1kYy1saXN0LWxpc3QtaXRlbS1ob3Zlci1zdGF0ZS1sYXllci1jb2xvcjpibGFjazstLW1kYy1saXN0LWxpc3QtaXRlbS1ob3Zlci1zdGF0ZS1sYXllci1vcGFjaXR5OjAuMDQ7LS1tZGMtbGlzdC1saXN0LWl0ZW0tZm9jdXMtc3RhdGUtbGF5ZXItY29sb3I6YmxhY2s7LS1tZGMtbGlzdC1saXN0LWl0ZW0tZm9jdXMtc3RhdGUtbGF5ZXItb3BhY2l0eTowLjEyfS5tYXQtbWRjLWxpc3Qtb3B0aW9uIC5tZGMtbGlzdC1pdGVtX19zdGFydCwubWF0LW1kYy1saXN0LW9wdGlvbiAubWRjLWxpc3QtaXRlbV9fZW5key0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWNoZWNrbWFyay1jb2xvcjojMDAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2Y1N2MwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNmNTdjMDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaWNvbi1jb2xvcjojZjU3YzAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjojZjU3YzAwOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1jaGVja2JveC1kaXNhYmxlZC11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpfS5tYXQtbWRjLWxpc3Qtb3B0aW9uIC5tZGMtbGlzdC1pdGVtX19zdGFydCwubWF0LW1kYy1saXN0LW9wdGlvbiAubWRjLWxpc3QtaXRlbV9fZW5key0tbWRjLXJhZGlvLWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6IzAwMDstLW1kYy1yYWRpby1kaXNhYmxlZC11bnNlbGVjdGVkLWljb24tY29sb3I6IzAwMDstLW1kYy1yYWRpby11bnNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1yYWRpby11bnNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1yYWRpby11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1yYWRpby11bnNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2Y1N2MwMDstLW1kYy1yYWRpby1zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNmNTdjMDA7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtaWNvbi1jb2xvcjojZjU3YzAwOy0tbWRjLXJhZGlvLXNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjojZjU3YzAwOy0tbWF0LW1kYy1yYWRpby1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLXJhZGlvLWNoZWNrZWQtcmlwcGxlLWNvbG9yOiAjZjU3YzAwfS5tYXQtbWRjLWxpc3Qtb3B0aW9uIC5tZGMtbGlzdC1pdGVtX19zdGFydCAubWRjLXJhZGlvLS1kaXNhYmxlZCtsYWJlbCwubWF0LW1kYy1saXN0LW9wdGlvbiAubWRjLWxpc3QtaXRlbV9fZW5kIC5tZGMtcmFkaW8tLWRpc2FibGVkK2xhYmVse2NvbG9yOiM3NTc1NzV9Lm1hdC1tZGMtbGlzdC1vcHRpb24ubWF0LWFjY2VudCAubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1hdC1tZGMtbGlzdC1vcHRpb24ubWF0LWFjY2VudCAubWRjLWxpc3QtaXRlbV9fZW5key0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWNoZWNrbWFyay1jb2xvcjojMDAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2ZmOTgwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNmZjk4MDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaWNvbi1jb2xvcjojZmY5ODAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjojZmY5ODAwOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1jaGVja2JveC1kaXNhYmxlZC11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpfS5tYXQtbWRjLWxpc3Qtb3B0aW9uLm1hdC1hY2NlbnQgLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LC5tYXQtbWRjLWxpc3Qtb3B0aW9uLm1hdC1hY2NlbnQgLm1kYy1saXN0LWl0ZW1fX2VuZHstLW1kYy1yYWRpby1kaXNhYmxlZC1zZWxlY3RlZC1pY29uLWNvbG9yOiMwMDA7LS1tZGMtcmFkaW8tZGlzYWJsZWQtdW5zZWxlY3RlZC1pY29uLWNvbG9yOiMwMDA7LS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1yYWRpby1zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiNmZjk4MDA7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojZmY5ODAwOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWljb24tY29sb3I6I2ZmOTgwMDstLW1kYy1yYWRpby1zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6I2ZmOTgwMDstLW1hdC1tZGMtcmFkaW8tcmlwcGxlLWNvbG9yOiAjMDAwOy0tbWF0LW1kYy1yYWRpby1jaGVja2VkLXJpcHBsZS1jb2xvcjogI2ZmOTgwMH0ubWF0LW1kYy1saXN0LW9wdGlvbi5tYXQtYWNjZW50IC5tZGMtbGlzdC1pdGVtX19zdGFydCAubWRjLXJhZGlvLS1kaXNhYmxlZCtsYWJlbCwubWF0LW1kYy1saXN0LW9wdGlvbi5tYXQtYWNjZW50IC5tZGMtbGlzdC1pdGVtX19lbmQgLm1kYy1yYWRpby0tZGlzYWJsZWQrbGFiZWx7Y29sb3I6Izc1NzU3NX0ubWF0LW1kYy1saXN0LW9wdGlvbi5tYXQtd2FybiAubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1hdC1tZGMtbGlzdC1vcHRpb24ubWF0LXdhcm4gLm1kYy1saXN0LWl0ZW1fX2VuZHstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1jaGVja21hcmstY29sb3I6I2ZmZjstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1jaGVja2JveC1kaXNhYmxlZC1zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtY2hlY2tib3gtZGlzYWJsZWQtdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KX0ubWF0LW1kYy1saXN0LW9wdGlvbi5tYXQtd2FybiAubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1hdC1tZGMtbGlzdC1vcHRpb24ubWF0LXdhcm4gLm1kYy1saXN0LWl0ZW1fX2VuZHstLW1kYy1yYWRpby1kaXNhYmxlZC1zZWxlY3RlZC1pY29uLWNvbG9yOiMwMDA7LS1tZGMtcmFkaW8tZGlzYWJsZWQtdW5zZWxlY3RlZC1pY29uLWNvbG9yOiMwMDA7LS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1yYWRpby1zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLXJhZGlvLXNlbGVjdGVkLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1yYWRpby1zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6I2Y0NDMzNjstLW1hdC1tZGMtcmFkaW8tcmlwcGxlLWNvbG9yOiAjMDAwOy0tbWF0LW1kYy1yYWRpby1jaGVja2VkLXJpcHBsZS1jb2xvcjogI2Y0NDMzNn0ubWF0LW1kYy1saXN0LW9wdGlvbi5tYXQtd2FybiAubWRjLWxpc3QtaXRlbV9fc3RhcnQgLm1kYy1yYWRpby0tZGlzYWJsZWQrbGFiZWwsLm1hdC1tZGMtbGlzdC1vcHRpb24ubWF0LXdhcm4gLm1kYy1saXN0LWl0ZW1fX2VuZCAubWRjLXJhZGlvLS1kaXNhYmxlZCtsYWJlbHtjb2xvcjojNzU3NTc1fS5tYXQtbWRjLWxpc3QtYmFzZS5tYXQtbWRjLWxpc3QtYmFzZSAubWRjLWxpc3QtaXRlbS0tc2VsZWN0ZWQgLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dCwubWF0LW1kYy1saXN0LWJhc2UubWF0LW1kYy1saXN0LWJhc2UgLm1kYy1saXN0LWl0ZW0tLWFjdGl2YXRlZCAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0e2NvbG9yOiNmNTdjMDB9Lm1hdC1tZGMtbGlzdC1iYXNlLm1hdC1tZGMtbGlzdC1iYXNlIC5tZGMtbGlzdC1pdGVtLS1zZWxlY3RlZC5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1hdC1tZGMtbGlzdC1iYXNlLm1hdC1tZGMtbGlzdC1iYXNlIC5tZGMtbGlzdC1pdGVtLS1hY3RpdmF0ZWQubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0e2NvbG9yOiNmNTdjMDB9Lm1hdC1tZGMtbGlzdC1iYXNlIC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1hdC1tZGMtbGlzdC1iYXNlIC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fY29udGVudCwubWF0LW1kYy1saXN0LWJhc2UgLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19lbmR7b3BhY2l0eToxfS5tYXQtbWRjLWxpc3QtYmFzZXstLW1kYy1saXN0LWxpc3QtaXRlbS1vbmUtbGluZS1jb250YWluZXItaGVpZ2h0OjQ4cHg7LS1tZGMtbGlzdC1saXN0LWl0ZW0tdHdvLWxpbmUtY29udGFpbmVyLWhlaWdodDo2NHB4Oy0tbWRjLWxpc3QtbGlzdC1pdGVtLXRocmVlLWxpbmUtY29udGFpbmVyLWhlaWdodDo4OHB4fS5tYXQtbWRjLWxpc3QtaXRlbS5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctYXZhdGFyLm1kYy1saXN0LWl0ZW0tLXdpdGgtb25lLWxpbmUsLm1hdC1tZGMtbGlzdC1pdGVtLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1jaGVja2JveC5tZGMtbGlzdC1pdGVtLS13aXRoLW9uZS1saW5lLC5tYXQtbWRjLWxpc3QtaXRlbS5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbi5tZGMtbGlzdC1pdGVtLS13aXRoLW9uZS1saW5le2hlaWdodDo1NnB4fS5tYXQtbWRjLWxpc3QtaXRlbS5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctYXZhdGFyLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHdvLWxpbmVzLC5tYXQtbWRjLWxpc3QtaXRlbS5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctY2hlY2tib3gubWRjLWxpc3QtaXRlbS0td2l0aC10d28tbGluZXMsLm1hdC1tZGMtbGlzdC1pdGVtLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHdvLWxpbmVze2hlaWdodDo3MnB4fS5tYXQtbWRjLXBhZ2luYXRvcntiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtbWRjLXBhZ2luYXRvci1pY29ue2ZpbGw6cmdiYSgwLDAsMCwuNTQpfS5tYXQtbWRjLXBhZ2luYXRvci1kZWNyZW1lbnQsLm1hdC1tZGMtcGFnaW5hdG9yLWluY3JlbWVudHtib3JkZXItdG9wOjJweCBzb2xpZCByZ2JhKDAsMCwwLC41NCk7Ym9yZGVyLXJpZ2h0OjJweCBzb2xpZCByZ2JhKDAsMCwwLC41NCl9Lm1hdC1tZGMtcGFnaW5hdG9yLWZpcnN0LC5tYXQtbWRjLXBhZ2luYXRvci1sYXN0e2JvcmRlci10b3A6MnB4IHNvbGlkIHJnYmEoMCwwLDAsLjU0KX0ubWF0LW1kYy1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1tZGMtcGFnaW5hdG9yLWRlY3JlbWVudCwubWF0LW1kYy1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1tZGMtcGFnaW5hdG9yLWluY3JlbWVudCwubWF0LW1kYy1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1tZGMtcGFnaW5hdG9yLWZpcnN0LC5tYXQtbWRjLWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LW1kYy1wYWdpbmF0b3ItbGFzdHtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtbWRjLWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LW1kYy1wYWdpbmF0b3ItaWNvbntmaWxsOnJnYmEoMCwwLDAsLjEyKX0ubWF0LW1kYy1wYWdpbmF0b3IgLm1hdC1tZGMtZm9ybS1maWVsZC1pbmZpeHttaW4taGVpZ2h0OjQwcHh9Lm1hdC1tZGMtcGFnaW5hdG9yIC5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlciAubWF0LW1kYy1mb3JtLWZpZWxkLWZsZXggLm1hdC1tZGMtZmxvYXRpbmctbGFiZWx7dG9wOjIwcHh9Lm1hdC1tZGMtcGFnaW5hdG9yIC5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlci5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1ub3RjaGVkLW91dGxpbmUtLXVwZ3JhZGVkIC5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3Zley0tbWF0LW1kYy1mb3JtLWZpZWxkLWxhYmVsLXRyYW5zZm9ybTogdHJhbnNsYXRlWSggLTI2Ljc1cHgpIHNjYWxlKHZhcigtLW1hdC1tZGMtZm9ybS1maWVsZC1mbG9hdGluZy1sYWJlbC1zY2FsZSwgMC43NSkpO3RyYW5zZm9ybTp2YXIoLS1tYXQtbWRjLWZvcm0tZmllbGQtbGFiZWwtdHJhbnNmb3JtKX0ubWF0LW1kYy1wYWdpbmF0b3IgLm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVyLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1tZGMtcGFnaW5hdG9yIC5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlcjpub3QoLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCkgLm1hdC1tZGMtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbWRjLXBhZ2luYXRvciAubWRjLXRleHQtZmllbGQtLW5vLWxhYmVsOm5vdCgubWRjLXRleHQtZmllbGQtLW91dGxpbmVkKTpub3QoLm1kYy10ZXh0LWZpZWxkLS10ZXh0YXJlYSkgLm1hdC1tZGMtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbWRjLXBhZ2luYXRvciAubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXI6bm90KC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQpIC5tYXQtbWRjLWZsb2F0aW5nLWxhYmVse2Rpc3BsYXk6bm9uZX0ubWF0LW1kYy1wYWdpbmF0b3ItY29udGFpbmVye21pbi1oZWlnaHQ6NTZweH0ubWF0LW1kYy10YWIsLm1hdC1tZGMtdGFiLWxpbmt7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApfS5tYXQtbWRjLXRhYiAubWRjLXRhYl9fdGV4dC1sYWJlbCwubWF0LW1kYy10YWItbGluayAubWRjLXRhYl9fdGV4dC1sYWJlbHtjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNil9Lm1hdC1tZGMtdGFiLm1hdC1tZGMtdGFiLWRpc2FibGVkIC5tZGMtdGFiX19yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy10YWIubWF0LW1kYy10YWItZGlzYWJsZWQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1kYy10YWItbGluay5tYXQtbWRjLXRhYi1kaXNhYmxlZCAubWRjLXRhYl9fcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtdGFiLWxpbmsubWF0LW1kYy10YWItZGlzYWJsZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LW1kYy10YWI6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkubWRjLXRhYi0tYWN0aXZlIC5tZGMtdGFiX190ZXh0LWxhYmVsLC5tYXQtbWRjLXRhYi1saW5rOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpLm1kYy10YWItLWFjdGl2ZSAubWRjLXRhYl9fdGV4dC1sYWJlbHtjb2xvcjojZjU3YzAwfS5tYXQtbWRjLXRhYjpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKSAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLXVuZGVybGluZSwubWF0LW1kYy10YWItbGluazpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKSAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLXVuZGVybGluZXtib3JkZXItY29sb3I6dmFyKC0tbWRjLXRhYi1pbmRpY2F0b3ItYWN0aXZlLWluZGljYXRvci1jb2xvciwgI2Y1N2MwMCl9Lm1kYy10YWJfX3JpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLXRhYiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWRjLXRhYi1saW5rIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYjpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKS5tZGMtdGFiLS1hY3RpdmUgLm1kYy10YWJfX3RleHQtbGFiZWwsLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC1tZGMtdGFiLWxpbms6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkubWRjLXRhYi0tYWN0aXZlIC5tZGMtdGFiX190ZXh0LWxhYmVsLC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC1tZGMtdGFiOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpLm1kYy10YWItLWFjdGl2ZSAubWRjLXRhYl9fdGV4dC1sYWJlbCwubWF0LW1kYy10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYi1saW5rOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpLm1kYy10YWItLWFjdGl2ZSAubWRjLXRhYl9fdGV4dC1sYWJlbHtjb2xvcjojZmY5ODAwfS5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYjpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKSAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLXVuZGVybGluZSwubWF0LW1kYy10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LW1kYy10YWItbGluazpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKSAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLXVuZGVybGluZSwubWF0LW1kYy10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYjpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKSAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLXVuZGVybGluZSwubWF0LW1kYy10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYi1saW5rOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpIC5tZGMtdGFiLWluZGljYXRvcl9fY29udGVudC0tdW5kZXJsaW5le2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtdGFiLWluZGljYXRvci1hY3RpdmUtaW5kaWNhdG9yLWNvbG9yLCAjZmY5ODAwKX0ubWF0LW1kYy10YWItZ3JvdXAubWF0LWFjY2VudCAubWRjLXRhYl9fcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC1tZGMtdGFiIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC1tZGMtdGFiLWxpbmsgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1kYy10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tZGMtdGFiX19yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LW1kYy10YWItbGluayAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH0ubWF0LW1kYy10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC1tZGMtdGFiOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpLm1kYy10YWItLWFjdGl2ZSAubWRjLXRhYl9fdGV4dC1sYWJlbCwubWF0LW1kYy10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC1tZGMtdGFiLWxpbms6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkubWRjLXRhYi0tYWN0aXZlIC5tZGMtdGFiX190ZXh0LWxhYmVsLC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtbWRjLXRhYjpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKS5tZGMtdGFiLS1hY3RpdmUgLm1kYy10YWJfX3RleHQtbGFiZWwsLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC1tZGMtdGFiLWxpbms6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkubWRjLXRhYi0tYWN0aXZlIC5tZGMtdGFiX190ZXh0LWxhYmVse2NvbG9yOiNmNDQzMzZ9Lm1hdC1tZGMtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtbWRjLXRhYjpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKSAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLXVuZGVybGluZSwubWF0LW1kYy10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC1tZGMtdGFiLWxpbms6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkgLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50LS11bmRlcmxpbmUsLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC1tZGMtdGFiOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpIC5tZGMtdGFiLWluZGljYXRvcl9fY29udGVudC0tdW5kZXJsaW5lLC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtbWRjLXRhYi1saW5rOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpIC5tZGMtdGFiLWluZGljYXRvcl9fY29udGVudC0tdW5kZXJsaW5le2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtdGFiLWluZGljYXRvci1hY3RpdmUtaW5kaWNhdG9yLWNvbG9yLCAjZjQ0MzM2KX0ubWF0LW1kYy10YWItZ3JvdXAubWF0LXdhcm4gLm1kYy10YWJfX3JpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtd2FybiAubWF0LW1kYy10YWIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1kYy10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtbWRjLXRhYi1saW5rIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1kYy10YWJfX3JpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtbWRjLXRhYiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtbWRjLXRhYi1saW5rIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5LC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnl7LS1tYXQtbWRjLXRhYi1oZWFkZXItd2l0aC1iYWNrZ3JvdW5kLWJhY2tncm91bmQtY29sb3I6ICNmNTdjMDA7LS1tYXQtbWRjLXRhYi1oZWFkZXItd2l0aC1iYWNrZ3JvdW5kLWZvcmVncm91bmQtY29sb3I6ICMwMDB9Lm1hdC1tZGMtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCwubWF0LW1kYy10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnR7LS1tYXQtbWRjLXRhYi1oZWFkZXItd2l0aC1iYWNrZ3JvdW5kLWJhY2tncm91bmQtY29sb3I6ICNmZjk4MDA7LS1tYXQtbWRjLXRhYi1oZWFkZXItd2l0aC1iYWNrZ3JvdW5kLWZvcmVncm91bmQtY29sb3I6ICMwMDB9Lm1hdC1tZGMtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4sLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybnstLW1hdC1tZGMtdGFiLWhlYWRlci13aXRoLWJhY2tncm91bmQtYmFja2dyb3VuZC1jb2xvcjogI2Y0NDMzNjstLW1hdC1tZGMtdGFiLWhlYWRlci13aXRoLWJhY2tncm91bmQtZm9yZWdyb3VuZC1jb2xvcjogI2ZmZn0ubWF0LW1kYy10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tYXQtbWRjLXRhYi1oZWFkZXIgLm1kYy10YWJ7aGVpZ2h0OjQ4cHh9Lm1hdC1tZGMtY2hlY2tib3ggLm1kYy1mb3JtLWZpZWxke2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LXByaW1hcnktb24tYmFja2dyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjg3KSl9Lm1hdC1tZGMtY2hlY2tib3ggLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEpfS5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3hfX3JpcHBsZXtiYWNrZ3JvdW5kOiMwMDB9Lm1hdC1tZGMtY2hlY2tib3gubWF0LXByaW1hcnl7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtY2hlY2ttYXJrLWNvbG9yOiMwMDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZjU3YzAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2Y1N2MwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1pY29uLWNvbG9yOiNmNTdjMDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNmNTdjMDA7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtY2hlY2tib3gtZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCl9Lm1hdC1tZGMtY2hlY2tib3gubWF0LXByaW1hcnkgLm1kYy1jaGVja2JveC0tc2VsZWN0ZWR+Lm1hdC1tZGMtY2hlY2tib3gtcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NSwxMjQsMCwuMSl9Lm1hdC1tZGMtY2hlY2tib3gubWF0LXByaW1hcnkgLm1kYy1jaGVja2JveC0tc2VsZWN0ZWR+Lm1kYy1jaGVja2JveF9fcmlwcGxle2JhY2tncm91bmQ6I2Y1N2MwMH0ubWF0LW1kYy1jaGVja2JveC5tYXQtYWNjZW50ey0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWNoZWNrbWFyay1jb2xvcjojMDAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2ZmOTgwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNmZjk4MDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaWNvbi1jb2xvcjojZmY5ODAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjojZmY5ODAwOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1jaGVja2JveC1kaXNhYmxlZC11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpfS5tYXQtbWRjLWNoZWNrYm94Lm1hdC1hY2NlbnQgLm1kYy1jaGVja2JveC0tc2VsZWN0ZWR+Lm1hdC1tZGMtY2hlY2tib3gtcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuMSl9Lm1hdC1tZGMtY2hlY2tib3gubWF0LWFjY2VudCAubWRjLWNoZWNrYm94LS1zZWxlY3RlZH4ubWRjLWNoZWNrYm94X19yaXBwbGV7YmFja2dyb3VuZDojZmY5ODAwfS5tYXQtbWRjLWNoZWNrYm94Lm1hdC13YXJuey0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWNoZWNrbWFyay1jb2xvcjojZmZmOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1jaGVja2JveC1kaXNhYmxlZC11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpfS5tYXQtbWRjLWNoZWNrYm94Lm1hdC13YXJuIC5tZGMtY2hlY2tib3gtLXNlbGVjdGVkfi5tYXQtbWRjLWNoZWNrYm94LXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsNjcsNTQsLjEpfS5tYXQtbWRjLWNoZWNrYm94Lm1hdC13YXJuIC5tZGMtY2hlY2tib3gtLXNlbGVjdGVkfi5tZGMtY2hlY2tib3hfX3JpcHBsZXtiYWNrZ3JvdW5kOiNmNDQzMzZ9Lm1hdC1tZGMtY2hlY2tib3gtZGlzYWJsZWQgbGFiZWx7Y29sb3I6Izc1NzU3NX0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94e3BhZGRpbmc6Y2FsYygodmFyKC0tbWRjLWNoZWNrYm94LXJpcHBsZS1zaXplLCA0MHB4KSAtIDE4cHgpIC8gMik7bWFyZ2luOmNhbGMoKHZhcigtLW1kYy1jaGVja2JveC10b3VjaC10YXJnZXQtc2l6ZSwgNDBweCkgLSA0MHB4KSAvIDIpfS5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveF9fYmFja2dyb3VuZHt0b3A6Y2FsYygodmFyKC0tbWRjLWNoZWNrYm94LXJpcHBsZS1zaXplLCA0MHB4KSAtIDE4cHgpIC8gMik7bGVmdDpjYWxjKCh2YXIoLS1tZGMtY2hlY2tib3gtcmlwcGxlLXNpemUsIDQwcHgpIC0gMThweCkgLyAyKX0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9se3RvcDpjYWxjKCg0MHB4IC0gdmFyKC0tbWRjLWNoZWNrYm94LXRvdWNoLXRhcmdldC1zaXplLCA0MHB4KSkgLyAyKTtyaWdodDpjYWxjKCg0MHB4IC0gdmFyKC0tbWRjLWNoZWNrYm94LXRvdWNoLXRhcmdldC1zaXplLCA0MHB4KSkgLyAyKTtsZWZ0OmNhbGMoKDQwcHggLSB2YXIoLS1tZGMtY2hlY2tib3gtdG91Y2gtdGFyZ2V0LXNpemUsIDQwcHgpKSAvIDIpO3dpZHRoOnZhcigtLW1kYy1jaGVja2JveC10b3VjaC10YXJnZXQtc2l6ZSwgNDBweCk7aGVpZ2h0OnZhcigtLW1kYy1jaGVja2JveC10b3VjaC10YXJnZXQtc2l6ZSwgNDBweCl9Lm1hdC1tZGMtYnV0dG9uLm1hdC11bnRoZW1lZHstLW1kYy10ZXh0LWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiMwMDB9Lm1hdC1tZGMtYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWRjLXRleHQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2Y1N2MwMH0ubWF0LW1kYy1idXR0b24ubWF0LWFjY2VudHstLW1kYy10ZXh0LWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmZjk4MDB9Lm1hdC1tZGMtYnV0dG9uLm1hdC13YXJuey0tbWRjLXRleHQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2Y0NDMzNn0ubWF0LW1kYy1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXXstLW1kYy10ZXh0LWJ1dHRvbi1kaXNhYmxlZC1sYWJlbC10ZXh0LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtdGV4dC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpfS5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC11bnRoZW1lZHstLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZmZmOy0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfS5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWRjLWZpbGxlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiNmNTdjMDA7LS1tZGMtZmlsbGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiMwMDB9Lm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24ubWF0LWFjY2VudHstLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZmY5ODAwOy0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfS5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC13YXJuey0tbWRjLWZpbGxlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiNmNDQzMzY7LS1tZGMtZmlsbGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmZmZ9Lm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXXstLW1kYy1maWxsZWQtYnV0dG9uLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWRjLWZpbGxlZC1idXR0b24tZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWZpbGxlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMik7LS1tZGMtZmlsbGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCl9Lm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5tYXQtdW50aGVtZWR7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1jb250YWluZXItY29sb3I6I2ZmZjstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6IzAwMH0ubWF0LW1kYy1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiNmNTdjMDA7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiMwMDB9Lm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiNmZjk4MDA7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiMwMDB9Lm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5tYXQtd2FybnstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZjQ0MzM2Oy0tbWRjLXByb3RlY3RlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZmZmfS5tYXQtbWRjLXJhaXNlZC1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXXstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWRjLXByb3RlY3RlZC1idXR0b24tZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMik7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1jb250YWluZXItZWxldmF0aW9uOjB9Lm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uey0tbWRjLW91dGxpbmVkLWJ1dHRvbi1vdXRsaW5lLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC11bnRoZW1lZHstLW1kYy1vdXRsaW5lZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfS5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbi5tYXQtcHJpbWFyeXstLW1kYy1vdXRsaW5lZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZjU3YzAwfS5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWRjLW91dGxpbmVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmZjk4MDB9Lm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC13YXJuey0tbWRjLW91dGxpbmVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmNDQzMzZ9Lm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17LS1tZGMtb3V0bGluZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1vdXRsaW5lZC1idXR0b24tZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLW91dGxpbmVkLWJ1dHRvbi1vdXRsaW5lLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMik7LS1tZGMtb3V0bGluZWQtYnV0dG9uLWRpc2FibGVkLW91dGxpbmUtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LW1kYy1idXR0b24sLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKX0ubWF0LW1kYy1idXR0b246aG92ZXIgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjA0fS5tYXQtbWRjLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMTJ9Lm1hdC1tZGMtYnV0dG9uOmFjdGl2ZSAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy1vdXRsaW5lZC1idXR0b246YWN0aXZlIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjEyfS5tYXQtbWRjLWJ1dHRvbi5tYXQtcHJpbWFyeSwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LXByaW1hcnl7LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2Y1N2MwMDstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyNDUsIDEyNCwgMCwgMC4xKX0ubWF0LW1kYy1idXR0b24ubWF0LWFjY2VudCwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LWFjY2VudHstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjZmY5ODAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDI1NSwgMTUyLCAwLCAwLjEpfS5tYXQtbWRjLWJ1dHRvbi5tYXQtd2FybiwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LXdhcm57LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2Y0NDMzNjstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyNDQsIDY3LCA1NCwgMC4xKX0ubWF0LW1kYy1yYWlzZWQtYnV0dG9uLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKX0ubWF0LW1kYy1yYWlzZWQtYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjA0fS5tYXQtbWRjLXJhaXNlZC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy1yYWlzZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMTJ9Lm1hdC1tZGMtcmFpc2VkLWJ1dHRvbjphY3RpdmUgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b246YWN0aXZlIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjEyfS5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnksLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24ubWF0LXByaW1hcnl7LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogIzAwMDstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEpfS5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCwubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKX0ubWF0LW1kYy1yYWlzZWQtYnV0dG9uLm1hdC13YXJuLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC13YXJuey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmZmY7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKX0ubWF0LW1kYy1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSwubWF0LW1kYy1yYWlzZWQtYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UsLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZXtoZWlnaHQ6MzZweH0ubWF0LW1kYy1pY29uLWJ1dHRvbnstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjMDAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSl9Lm1hdC1tZGMtaWNvbi1idXR0b246aG92ZXIgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMDR9Lm1hdC1tZGMtaWNvbi1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy1pY29uLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZXtvcGFjaXR5Oi4xMn0ubWF0LW1kYy1pY29uLWJ1dHRvbjphY3RpdmUgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMTJ9Lm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LXByaW1hcnl7LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2Y1N2MwMDstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyNDUsIDEyNCwgMCwgMC4xKX0ubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmZjk4MDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjU1LCAxNTIsIDAsIDAuMSl9Lm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LXdhcm57LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2Y0NDMzNjstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyNDQsIDY3LCA1NCwgMC4xKX0ubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtcHJpbWFyeXstLW1kYy1pY29uLWJ1dHRvbi1pY29uLWNvbG9yOiNmNTdjMDB9Lm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LWFjY2VudHstLW1kYy1pY29uLWJ1dHRvbi1pY29uLWNvbG9yOiNmZjk4MDB9Lm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LXdhcm57LS1tZGMtaWNvbi1idXR0b24taWNvbi1jb2xvcjojZjQ0MzM2fS5tYXQtbWRjLWljb24tYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17LS1tZGMtaWNvbi1idXR0b24taWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWljb24tYnV0dG9uLWRpc2FibGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KX0ubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNle3dpZHRoOjQ4cHg7aGVpZ2h0OjQ4cHg7cGFkZGluZzoxMnB4fS5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UgLm1kYy1pY29uLWJ1dHRvbl9fZm9jdXMtcmluZ3ttYXgtaGVpZ2h0OjQ4cHg7bWF4LXdpZHRoOjQ4cHh9Lm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZS5tZGMtaWNvbi1idXR0b24tLXJlZHVjZWQtc2l6ZSAubWRjLWljb24tYnV0dG9uX19yaXBwbGV7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDttYXJnaW4tdG9wOjRweDttYXJnaW4tYm90dG9tOjRweDttYXJnaW4tcmlnaHQ6NHB4O21hcmdpbi1sZWZ0OjRweH0ubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlLm1kYy1pY29uLWJ1dHRvbi0tcmVkdWNlZC1zaXplIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmd7bWF4LWhlaWdodDo0MHB4O21heC13aWR0aDo0MHB4fS5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UgLm1kYy1pY29uLWJ1dHRvbl9fdG91Y2h7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtoZWlnaHQ6NDhweDtsZWZ0OjUwJTt3aWR0aDo0OHB4O3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwgLTUwJSl9Lm1hdC1tZGMtZmFiLC5tYXQtbWRjLW1pbmktZmFiey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKX0ubWF0LW1kYy1mYWI6aG92ZXIgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtbWluaS1mYWI6aG92ZXIgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMDR9Lm1hdC1tZGMtZmFiLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtZmFiLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLW1pbmktZmFiLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtbWluaS1mYWIuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMTJ9Lm1hdC1tZGMtZmFiOmFjdGl2ZSAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy1taW5pLWZhYjphY3RpdmUgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMTJ9Lm1hdC1tZGMtZmFiLm1hdC1wcmltYXJ5LC5tYXQtbWRjLW1pbmktZmFiLm1hdC1wcmltYXJ5ey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKX0ubWF0LW1kYy1mYWIubWF0LWFjY2VudCwubWF0LW1kYy1taW5pLWZhYi5tYXQtYWNjZW50ey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKX0ubWF0LW1kYy1mYWIubWF0LXdhcm4sLm1hdC1tZGMtbWluaS1mYWIubWF0LXdhcm57LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2ZmZjstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpfS5tYXQtbWRjLWZhYi5tYXQtdW50aGVtZWQsLm1hdC1tZGMtbWluaS1mYWIubWF0LXVudGhlbWVkey0tbWRjLWZhYi1jb250YWluZXItY29sb3I6I2ZmZjstLW1kYy1mYWItaWNvbi1jb2xvcjojMDAwOy0tbWF0LW1kYy1mYWItY29sb3I6ICMwMDB9Lm1hdC1tZGMtZmFiLm1hdC1wcmltYXJ5LC5tYXQtbWRjLW1pbmktZmFiLm1hdC1wcmltYXJ5ey0tbWRjLWZhYi1jb250YWluZXItY29sb3I6I2Y1N2MwMDstLW1kYy1mYWItaWNvbi1jb2xvcjojMDAwOy0tbWF0LW1kYy1mYWItY29sb3I6ICMwMDB9Lm1hdC1tZGMtZmFiLm1hdC1hY2NlbnQsLm1hdC1tZGMtbWluaS1mYWIubWF0LWFjY2VudHstLW1kYy1mYWItY29udGFpbmVyLWNvbG9yOiNmZjk4MDA7LS1tZGMtZmFiLWljb24tY29sb3I6IzAwMDstLW1hdC1tZGMtZmFiLWNvbG9yOiAjMDAwfS5tYXQtbWRjLWZhYi5tYXQtd2FybiwubWF0LW1kYy1taW5pLWZhYi5tYXQtd2FybnstLW1kYy1mYWItY29udGFpbmVyLWNvbG9yOiNmNDQzMzY7LS1tZGMtZmFiLWljb24tY29sb3I6I2ZmZjstLW1hdC1tZGMtZmFiLWNvbG9yOiAjZmZmfS5tYXQtbWRjLWZhYltkaXNhYmxlZF1bZGlzYWJsZWRdLC5tYXQtbWRjLW1pbmktZmFiW2Rpc2FibGVkXVtkaXNhYmxlZF17LS1tZGMtZmFiLWNvbnRhaW5lci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWRjLWZhYi1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tYXQtbWRjLWZhYi1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjM4KX0ubWF0LW1kYy1zbmFjay1iYXItY29udGFpbmVyey0tbWF0LW1kYy1zbmFjay1iYXItYnV0dG9uLWNvbG9yOiAjZmY5ODAwOy0tbWRjLXNuYWNrYmFyLWNvbnRhaW5lci1jb2xvcjojMzMzMzMzOy0tbWRjLXNuYWNrYmFyLXN1cHBvcnRpbmctdGV4dC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODcpfS5tZGMtZGF0YS10YWJsZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy10aGVtZS1zdXJmYWNlLCAjZmZmKTtib3JkZXItY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEyKX0ubWRjLWRhdGEtdGFibGVfX3Jvd3tiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXR9Lm1kYy1kYXRhLXRhYmxlX19oZWFkZXItY2VsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy10aGVtZS1zdXJmYWNlLCAjZmZmKX0ubWRjLWRhdGEtdGFibGVfX3Jvdy0tc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NSwgMTI0LCAwLCAwLjA0KX0ubWRjLWRhdGEtdGFibGVfX3BhZ2luYXRpb24tcm93cy1wZXItcGFnZS1zZWxlY3QtLW91dGxpbmVkOm5vdCgubWRjLXNlbGVjdC0tZGlzYWJsZWQpIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLC5tZGMtZGF0YS10YWJsZV9fcGFnaW5hdGlvbi1yb3dzLXBlci1wYWdlLXNlbGVjdC0tb3V0bGluZWQ6bm90KC5tZGMtc2VsZWN0LS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLC5tZGMtZGF0YS10YWJsZV9fcGFnaW5hdGlvbi1yb3dzLXBlci1wYWdlLXNlbGVjdC0tb3V0bGluZWQ6bm90KC5tZGMtc2VsZWN0LS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpfS5tZGMtZGF0YS10YWJsZV9fY2VsbCwubWRjLWRhdGEtdGFibGVfX2hlYWRlci1jZWxse2JvcmRlci1ib3R0b20tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEyKX0ubWRjLWRhdGEtdGFibGVfX3BhZ2luYXRpb257Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpfS5tZGMtZGF0YS10YWJsZV9fcm93Om5vdCgubWRjLWRhdGEtdGFibGVfX3Jvdy0tc2VsZWN0ZWQpOmhvdmVye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjA0KX0ubWRjLWRhdGEtdGFibGVfX2hlYWRlci1jZWxse2NvbG9yOnJnYmEoMCwgMCwgMCwgMC44Nyl9Lm1kYy1kYXRhLXRhYmxlX19wYWdpbmF0aW9uLXRvdGFsLC5tZGMtZGF0YS10YWJsZV9fcGFnaW5hdGlvbi1yb3dzLXBlci1wYWdlLWxhYmVsLC5tZGMtZGF0YS10YWJsZV9fY2VsbHtjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuODcpfS5tYXQtbWRjLXRhYmxle2JhY2tncm91bmQ6I2ZmZn0ubWF0LW1kYy10YWJsZSAubWRjLWRhdGEtdGFibGVfX3Jvd3toZWlnaHQ6NTJweH0ubWF0LW1kYy10YWJsZSAubWRjLWRhdGEtdGFibGVfX3BhZ2luYXRpb257bWluLWhlaWdodDo1MnB4fS5tYXQtbWRjLXRhYmxlIC5tZGMtZGF0YS10YWJsZV9faGVhZGVyLXJvd3toZWlnaHQ6NTZweH0ubWF0LW1kYy1wcm9ncmVzcy1zcGlubmVyey0tbWRjLWNpcmN1bGFyLXByb2dyZXNzLWFjdGl2ZS1pbmRpY2F0b3ItY29sb3I6I2Y1N2MwMH0ubWF0LW1kYy1wcm9ncmVzcy1zcGlubmVyLm1hdC1hY2NlbnR7LS1tZGMtY2lyY3VsYXItcHJvZ3Jlc3MtYWN0aXZlLWluZGljYXRvci1jb2xvcjojZmY5ODAwfS5tYXQtbWRjLXByb2dyZXNzLXNwaW5uZXIubWF0LXdhcm57LS1tZGMtY2lyY3VsYXItcHJvZ3Jlc3MtYWN0aXZlLWluZGljYXRvci1jb2xvcjojZjQ0MzM2fS5tYXQtYmFkZ2V7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1iYWRnZS5tYXQtYmFkZ2V7b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LWJhZGdlLWhpZGRlbiAubWF0LWJhZGdlLWNvbnRlbnR7ZGlzcGxheTpub25lfS5tYXQtYmFkZ2UtY29udGVudHtwb3NpdGlvbjphYnNvbHV0ZTt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztib3JkZXItcmFkaXVzOjUwJTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAyMDBtcyBlYXNlLWluLW91dDt0cmFuc2Zvcm06c2NhbGUoMC42KTtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7cG9pbnRlci1ldmVudHM6bm9uZX0ubmctYW5pbWF0ZS1kaXNhYmxlZCAubWF0LWJhZGdlLWNvbnRlbnQsLm1hdC1iYWRnZS1jb250ZW50Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle3RyYW5zaXRpb246bm9uZX0ubWF0LWJhZGdlLWNvbnRlbnQubWF0LWJhZGdlLWFjdGl2ZXt0cmFuc2Zvcm06bm9uZX0ubWF0LWJhZGdlLXNtYWxsIC5tYXQtYmFkZ2UtY29udGVudHt3aWR0aDoxNnB4O2hlaWdodDoxNnB4O2xpbmUtaGVpZ2h0OjE2cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYWJvdmUgLm1hdC1iYWRnZS1jb250ZW50e3RvcDotOHB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWJlbG93IC5tYXQtYmFkZ2UtY29udGVudHtib3R0b206LThweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTE2cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0xNnB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMTZweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMTZweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LThweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LThweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6LThweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotOHB4fS5tYXQtYmFkZ2UtbWVkaXVtIC5tYXQtYmFkZ2UtY29udGVudHt3aWR0aDoyMnB4O2hlaWdodDoyMnB4O2xpbmUtaGVpZ2h0OjIycHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWFib3ZlIC5tYXQtYmFkZ2UtY29udGVudHt0b3A6LTExcHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWJlbG93IC5tYXQtYmFkZ2UtY29udGVudHtib3R0b206LTExcHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMjJweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0yMnB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6LTIycHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0yMnB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTExcHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotMTFweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0xMXB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMTFweH0ubWF0LWJhZGdlLWxhcmdlIC5tYXQtYmFkZ2UtY29udGVudHt3aWR0aDoyOHB4O2hlaWdodDoyOHB4O2xpbmUtaGVpZ2h0OjI4cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYWJvdmUgLm1hdC1iYWRnZS1jb250ZW50e3RvcDotMTRweH0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1iZWxvdyAubWF0LWJhZGdlLWNvbnRlbnR7Ym90dG9tOi0xNHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMjhweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LTI4cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0yOHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0yOHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMTRweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LTE0cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0xNHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0xNHB4fS5tYXQtYmFkZ2UtY29udGVudHtjb2xvcjojZmZmO2JhY2tncm91bmQ6I2Y1N2MwMH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYmFkZ2UtY29udGVudHtvdXRsaW5lOnNvbGlkIDFweDtib3JkZXItcmFkaXVzOjB9Lm1hdC1iYWRnZS1hY2NlbnQgLm1hdC1iYWRnZS1jb250ZW50e2JhY2tncm91bmQ6I2ZmOTgwMDtjb2xvcjojZmZmfS5tYXQtYmFkZ2Utd2FybiAubWF0LWJhZGdlLWNvbnRlbnR7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiNmNDQzMzZ9Lm1hdC1iYWRnZS1kaXNhYmxlZCAubWF0LWJhZGdlLWNvbnRlbnR7YmFja2dyb3VuZDojYmRiZGJkO2NvbG9yOiM3NTc1NzV9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVye2JveC1zaGFkb3c6MHB4IDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNnB4IDMwcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZDojZmZmO2NvbG9yOiMyMTIxMjF9Lm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6bm9uZX0ubWF0LWJ1dHRvbi10b2dnbGV7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtYnV0dG9uLXRvZ2dsZSAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZHtjb2xvcjojMjEyMTIxO2JhY2tncm91bmQ6I2ZmZn0ubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9Lm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpzb2xpZCAxcHggI2UwZTBlMH1bZGlyPXJ0bF0gLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDpzb2xpZCAxcHggI2UwZTBlMH0ubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtYnV0dG9uLXRvZ2dsZS12ZXJ0aWNhbCAubWF0LWJ1dHRvbi10b2dnbGUrLm1hdC1idXR0b24tdG9nZ2xle2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXJpZ2h0Om5vbmU7Ym9yZGVyLXRvcDpzb2xpZCAxcHggI2UwZTBlMH0ubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTA7Y29sb3I6IzYxNjE2MX0ubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJke2NvbG9yOiMyMTIxMjF9Lm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVke2NvbG9yOnJnYmEoMCwwLDAsLjI2KTtiYWNrZ3JvdW5kLWNvbG9yOiNlZWV9Lm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmR7YmFja2dyb3VuZDojZmZmfS5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZC5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2Vke2JhY2tncm91bmQtY29sb3I6I2JkYmRiZH0ubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJke2JvcmRlcjpzb2xpZCAxcHggI2UwZTBlMH0ubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUtbGFiZWwtY29udGVudHtsaW5lLWhlaWdodDo0OHB4fS5tYXQtY2FsZW5kYXItYXJyb3d7ZmlsbDpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZSwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LWNhbGVuZGFyLW5leHQtYnV0dG9uLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtY2FsZW5kYXItcHJldmlvdXMtYnV0dG9ue2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlci1kaXZpZGVyOjphZnRlcntiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlciwubWF0LWNhbGVuZGFyLWJvZHktbGFiZWx7Y29sb3I6IzYxNjE2MX0ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50LC5tYXQtZGF0ZS1yYW5nZS1pbnB1dC1zZXBhcmF0b3J7Y29sb3I6IzIxMjEyMTtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtjb2xvcjojNzU3NTc1fS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWRhdGUtcmFuZ2UtaW5wdXQtc2VwYXJhdG9ye2NvbG9yOiM3NTc1NzV9Lm1hdC1jYWxlbmRhci1ib2R5LWluLXByZXZpZXd7Y29sb3I6cmdiYSgwLDAsMCwuMjQpfS5tYXQtY2FsZW5kYXItYm9keS10b2RheTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjE4KX0ubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ1LDEyNCwwLC4yKX0ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ5LDE3MSwwLC4yKX0ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZSxbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI0NSwgMTI0LCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfS5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZSxbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgyNDUsIDEyNCwgMCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX0ubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjphZnRlcntiYWNrZ3JvdW5kOiNhOGRhYjV9Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkLC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kOiM0NmEzNWV9Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMDtjb2xvcjojZmZmfS5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NSwxMjQsMCwuNCl9Lm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9LmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKSwuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NSwxMjQsMCwuMyl9QG1lZGlhKGhvdmVyOiBob3Zlcil7Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGw6bm90KC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCk6aG92ZXI+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ1LDEyNCwwLC4zKX19Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnR7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNTUsMTUyLDAsLjIpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ5LDE3MSwwLC4yKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3JlLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyNTUsIDE1MiwgMCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBsZWZ0LCByZ2JhKDI1NSwgMTUyLCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjphZnRlcntiYWNrZ3JvdW5kOiNhOGRhYjV9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZDojNDZhMzVlfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMDtjb2xvcjojZmZmfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDE1MiwwLC40KX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS10b2RheS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCAjZmZmfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDE1MiwwLC4zKX1AbWVkaWEoaG92ZXI6IGhvdmVyKXsubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jZWxsOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQpOmhvdmVyPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuMyl9fS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDQsNjcsNTQsLjIpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDksMTcxLDAsLjIpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3JlLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjQ0LCA2NywgNTQsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3JlLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBsZWZ0LCByZ2JhKDI0NCwgNjcsIDU0LCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2UubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmFmdGVye2JhY2tncm91bmQ6I2E4ZGFiNX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQ6IzQ2YTM1ZX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2O2NvbG9yOiNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC40KX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZn0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4zKX1AbWVkaWEoaG92ZXI6IGhvdmVyKXsubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsNjcsNTQsLjMpfX0ubWF0LWRhdGVwaWNrZXItY29udGVudC10b3VjaHtib3gtc2hhZG93OjBweCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAyNHB4IDM4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA5cHggNDZweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZXtjb2xvcjojZjU3YzAwfS5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZlLm1hdC1hY2NlbnR7Y29sb3I6I2ZmOTgwMH0ubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZS5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fS5tYXQtZGF0ZS1yYW5nZS1pbnB1dC1pbm5lcltkaXNhYmxlZF17Y29sb3I6Izc1NzU3NX0ubWF0LWNhbGVuZGFyLWNvbnRyb2xzIC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2V7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtwYWRkaW5nOjhweH0ubWF0LWNhbGVuZGFyLWNvbnRyb2xzIC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UgLm1kYy1pY29uLWJ1dHRvbl9fZm9jdXMtcmluZ3ttYXgtaGVpZ2h0OjQwcHg7bWF4LXdpZHRoOjQwcHh9Lm1hdC1jYWxlbmRhci1jb250cm9scyAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlLm1kYy1pY29uLWJ1dHRvbi0tcmVkdWNlZC1zaXplIC5tZGMtaWNvbi1idXR0b25fX3JpcHBsZXt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O21hcmdpbi10b3A6MHB4O21hcmdpbi1ib3R0b206MHB4O21hcmdpbi1yaWdodDowcHg7bWFyZ2luLWxlZnQ6MHB4fS5tYXQtY2FsZW5kYXItY29udHJvbHMgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZS5tZGMtaWNvbi1idXR0b24tLXJlZHVjZWQtc2l6ZSAubWRjLWljb24tYnV0dG9uX19mb2N1cy1yaW5ne21heC1oZWlnaHQ6NDBweDttYXgtd2lkdGg6NDBweH0ubWF0LWNhbGVuZGFyLWNvbnRyb2xzIC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UgLm1kYy1pY29uLWJ1dHRvbl9fdG91Y2h7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtoZWlnaHQ6NDBweDtsZWZ0OjUwJTt3aWR0aDo0MHB4O3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwgLTUwJSl9Lm1hdC1jYWxlbmRhci1jb250cm9scyAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlIC5tYXQtbWRjLWJ1dHRvbi10b3VjaC10YXJnZXR7ZGlzcGxheTpub25lfS5tYXQtZGl2aWRlcntib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWRpdmlkZXItdmVydGljYWx7Ym9yZGVyLXJpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWV4cGFuc2lvbi1wYW5lbHtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1hY3Rpb24tcm93e2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZXhwYW5zaW9uLXBhbmVsIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pLC5tYXQtZXhwYW5zaW9uLXBhbmVsIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSksLm1hdC1leHBhbnNpb24tcGFuZWw6bm90KC5tYXQtZXhwYW5kZWQpIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpob3Zlcjpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pe2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfUBtZWRpYShob3Zlcjogbm9uZSl7Lm1hdC1leHBhbnNpb24tcGFuZWw6bm90KC5tYXQtZXhwYW5kZWQpOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOmhvdmVye2JhY2tncm91bmQ6I2ZmZn19Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxle2NvbG9yOiMyMTIxMjF9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uLC5tYXQtZXhwYW5zaW9uLWluZGljYXRvcjo6YWZ0ZXJ7Y29sb3I6IzYxNjE2MX0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXXtjb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxlLC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclthcmlhLWRpc2FibGVkPXRydWVdIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbntjb2xvcjppbmhlcml0fS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcntoZWlnaHQ6NDhweH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIubWF0LWV4cGFuZGVke2hlaWdodDo2NHB4fS5tYXQtaWNvbi5tYXQtcHJpbWFyeXtjb2xvcjojZjU3YzAwfS5tYXQtaWNvbi5tYXQtYWNjZW50e2NvbG9yOiNmZjk4MDB9Lm1hdC1pY29uLm1hdC13YXJue2NvbG9yOiNmNDQzMzZ9Lm1hdC1kcmF3ZXItY29udGFpbmVye2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtZHJhd2Vye2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtZHJhd2VyLm1hdC1kcmF3ZXItcHVzaHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Lm1hdC1kcmF3ZXI6bm90KC5tYXQtZHJhd2VyLXNpZGUpe2JveC1zaGFkb3c6MHB4IDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNnB4IDMwcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1kcmF3ZXItc2lkZXtib3JkZXItcmlnaHQ6c29saWQgMXB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWRyYXdlci1zaWRlLm1hdC1kcmF3ZXItZW5ke2JvcmRlci1sZWZ0OnNvbGlkIDFweCByZ2JhKDAsMCwwLC4xMik7Ym9yZGVyLXJpZ2h0Om5vbmV9W2Rpcj1ydGxdIC5tYXQtZHJhd2VyLXNpZGV7Ym9yZGVyLWxlZnQ6c29saWQgMXB4IHJnYmEoMCwwLDAsLjEyKTtib3JkZXItcmlnaHQ6bm9uZX1bZGlyPXJ0bF0gLm1hdC1kcmF3ZXItc2lkZS5tYXQtZHJhd2VyLWVuZHtib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDpzb2xpZCAxcHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZHJhd2VyLWJhY2tkcm9wLm1hdC1kcmF3ZXItc2hvd257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC42KX0ubWF0LXN0ZXAtaGVhZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkLC5tYXQtc3RlcC1oZWFkZXIuY2RrLXByb2dyYW0tZm9jdXNlZCwubWF0LXN0ZXAtaGVhZGVyOmhvdmVyOm5vdChbYXJpYS1kaXNhYmxlZF0pLC5tYXQtc3RlcC1oZWFkZXI6aG92ZXJbYXJpYS1kaXNhYmxlZD1mYWxzZV17YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1zdGVwLWhlYWRlcjpob3ZlclthcmlhLWRpc2FibGVkPXRydWVde2N1cnNvcjpkZWZhdWx0fUBtZWRpYShob3Zlcjogbm9uZSl7Lm1hdC1zdGVwLWhlYWRlcjpob3ZlcntiYWNrZ3JvdW5kOm5vbmV9fS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLW9wdGlvbmFse2NvbG9yOiM2MTYxNjF9Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbntiYWNrZ3JvdW5kLWNvbG9yOiM2MTYxNjE7Y29sb3I6I2ZmZn0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29uLXNlbGVjdGVkLC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc3RhdGUtZG9uZSwubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29uLXN0YXRlLWVkaXR7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwO2NvbG9yOiNmZmZ9Lm1hdC1zdGVwLWhlYWRlci5tYXQtYWNjZW50IC5tYXQtc3RlcC1pY29ue2NvbG9yOiNmZmZ9Lm1hdC1zdGVwLWhlYWRlci5tYXQtYWNjZW50IC5tYXQtc3RlcC1pY29uLXNlbGVjdGVkLC5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1kb25lLC5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0e2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMDtjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIubWF0LXdhcm4gLm1hdC1zdGVwLWljb257Y29sb3I6I2ZmZn0ubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29uLXNlbGVjdGVkLC5tYXQtc3RlcC1oZWFkZXIubWF0LXdhcm4gLm1hdC1zdGVwLWljb24tc3RhdGUtZG9uZSwubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29uLXN0YXRlLWVkaXR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2O2NvbG9yOiNmZmZ9Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lcnJvcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCk7Y29sb3I6I2Y0NDMzNn0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1sYWJlbC5tYXQtc3RlcC1sYWJlbC1hY3RpdmV7Y29sb3I6IzIxMjEyMX0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1sYWJlbC5tYXQtc3RlcC1sYWJlbC1lcnJvcntjb2xvcjojZjQ0MzM2fS5tYXQtc3RlcHBlci1ob3Jpem9udGFsLC5tYXQtc3RlcHBlci12ZXJ0aWNhbHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsLWxpbmU6OmJlZm9yZXtib3JkZXItbGVmdC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjpiZWZvcmUsLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjphZnRlciwubWF0LXN0ZXBwZXItaG9yaXpvbnRhbC1saW5le2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcntoZWlnaHQ6NzJweH0ubWF0LXN0ZXBwZXItbGFiZWwtcG9zaXRpb24tYm90dG9tIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlciwubWF0LXZlcnRpY2FsLXN0ZXBwZXItaGVhZGVye3BhZGRpbmc6MjRweCAyNHB4fS5tYXQtc3RlcHBlci12ZXJ0aWNhbC1saW5lOjpiZWZvcmV7dG9wOi0xNnB4O2JvdHRvbTotMTZweH0ubWF0LXN0ZXBwZXItbGFiZWwtcG9zaXRpb24tYm90dG9tIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YWZ0ZXIsLm1hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWJvdHRvbSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmJlZm9yZXt0b3A6MzZweH0ubWF0LXN0ZXBwZXItbGFiZWwtcG9zaXRpb24tYm90dG9tIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsLWxpbmV7dG9wOjM2cHh9Lm1hdC1zb3J0LWhlYWRlci1hcnJvd3tjb2xvcjojNjE2MTYxfS5tYXQtdG9vbGJhcntiYWNrZ3JvdW5kOiNmNTdjMDA7Y29sb3I6IzIxMjEyMX0ubWF0LXRvb2xiYXIubWF0LXByaW1hcnl7YmFja2dyb3VuZDojZjU3YzAwO2NvbG9yOiNmZmZ9Lm1hdC10b29sYmFyLm1hdC1hY2NlbnR7YmFja2dyb3VuZDojZmY5ODAwO2NvbG9yOiNmZmZ9Lm1hdC10b29sYmFyLm1hdC13YXJue2JhY2tncm91bmQ6I2Y0NDMzNjtjb2xvcjojZmZmfS5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lLC5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQtcmlwcGxlLC5tYXQtdG9vbGJhciAubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcn0ubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtdG9vbGJhciAubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtdG9vbGJhciAubWF0LXNlbGVjdC12YWx1ZSwubWF0LXRvb2xiYXIgLm1hdC1zZWxlY3QtYXJyb3csLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjppbmhlcml0fS5tYXQtdG9vbGJhciAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6Y3VycmVudENvbG9yfS5tYXQtdG9vbGJhci1tdWx0aXBsZS1yb3dze21pbi1oZWlnaHQ6NjRweH0ubWF0LXRvb2xiYXItcm93LC5tYXQtdG9vbGJhci1zaW5nbGUtcm93e2hlaWdodDo2NHB4fUBtZWRpYShtYXgtd2lkdGg6IDU5OXB4KXsubWF0LXRvb2xiYXItbXVsdGlwbGUtcm93c3ttaW4taGVpZ2h0OjU2cHh9Lm1hdC10b29sYmFyLXJvdywubWF0LXRvb2xiYXItc2luZ2xlLXJvd3toZWlnaHQ6NTZweH19Lm1hdC10cmVle2JhY2tncm91bmQ6I2ZmZn0ubWF0LXRyZWUtbm9kZSwubWF0LW5lc3RlZC10cmVlLW5vZGV7Y29sb3I6IzIxMjEyMX0ubWF0LXRyZWUtbm9kZXttaW4taGVpZ2h0OjQ4cHh9Lm1hdC1idXR0b24sLm1hdC1pY29uLWJ1dHRvbiwubWF0LXN0cm9rZWQtYnV0dG9ue2NvbG9yOmluaGVyaXQ7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDApfS5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnksLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeXtjb2xvcjojZjU3YzAwfS5tYXQtYnV0dG9uLm1hdC1hY2NlbnQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudHtjb2xvcjojZmY5ODAwfS5tYXQtYnV0dG9uLm1hdC13YXJuLC5tYXQtaWNvbi1idXR0b24ubWF0LXdhcm4sLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fS5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWljb24tYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWljb24tYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0ubWF0LWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtYnV0dG9uLm1hdC13YXJuIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5tYXQtd2FybiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm4gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtaWNvbi1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXN0cm9rZWQtYnV0dG9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7b3BhY2l0eTouMTtiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcn0ubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQ6IzAwMH0ubWF0LXN0cm9rZWQtYnV0dG9uOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCl7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWZsYXQtYnV0dG9uLC5tYXQtcmFpc2VkLWJ1dHRvbiwubWF0LWZhYiwubWF0LW1pbmktZmFie2NvbG9yOiMyMTIxMjE7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnksLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtZmFiLm1hdC1wcmltYXJ5LC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnl7Y29sb3I6I2ZmZn0ubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQsLm1hdC1mYWIubWF0LWFjY2VudCwubWF0LW1pbmktZmFiLm1hdC1hY2NlbnR7Y29sb3I6I2ZmZn0ubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2FybiwubWF0LWZhYi5tYXQtd2FybiwubWF0LW1pbmktZmFiLm1hdC13YXJue2NvbG9yOiNmZmZ9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZsYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZhYi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtbWluaS1mYWIubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtbWluaS1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LW1pbmktZmFiLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeSwubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnksLm1hdC1mYWIubWF0LXByaW1hcnksLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtZmFiLm1hdC1hY2NlbnQsLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50e2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH0ubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2FybiwubWF0LWZhYi5tYXQtd2FybiwubWF0LW1pbmktZmFiLm1hdC13YXJue2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmxhdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZhYi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmFiLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZhYi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmFiLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1taW5pLWZhYi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtbWluaS1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWZhYi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1mYWIubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWluaS1mYWIubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtZmFiLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1taW5pLWZhYi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Lm1hdC1zdHJva2VkLWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSwubWF0LWZsYXQtYnV0dG9uOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtcmFpc2VkLWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1yYWlzZWQtYnV0dG9uOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZmFiOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLC5tYXQtbWluaS1mYWI6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDZweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDE4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1mYWI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKTphY3RpdmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksLm1hdC1taW5pLWZhYjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTJweCAxN3B4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNXB4IDIycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSwubWF0LW1pbmktZmFiLm1hdC1idXR0b24tZGlzYWJsZWQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtYnV0dG9uLm1hdC11bnRoZW1lZHstLW1kYy10ZXh0LWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiMwMDB9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWRjLXRleHQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2Y1N2MwMH0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b24ubWF0LWFjY2VudHstLW1kYy10ZXh0LWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmZjk4MDB9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtYnV0dG9uLm1hdC13YXJuey0tbWRjLXRleHQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2Y0NDMzNn0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXXstLW1kYy10ZXh0LWJ1dHRvbi1kaXNhYmxlZC1sYWJlbC10ZXh0LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtdGV4dC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC11bnRoZW1lZHstLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZmZmOy0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWRjLWZpbGxlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiNmNTdjMDA7LS1tZGMtZmlsbGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiMwMDB9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24ubWF0LWFjY2VudHstLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZmY5ODAwOy0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC13YXJuey0tbWRjLWZpbGxlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiNmNDQzMzY7LS1tZGMtZmlsbGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXXstLW1kYy1maWxsZWQtYnV0dG9uLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWRjLWZpbGxlZC1idXR0b24tZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWZpbGxlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMik7LS1tZGMtZmlsbGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5tYXQtdW50aGVtZWR7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1jb250YWluZXItY29sb3I6I2ZmZjstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6IzAwMH0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiNmNTdjMDA7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiMwMDB9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiNmZjk4MDA7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiMwMDB9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5tYXQtd2FybnstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZjQ0MzM2Oy0tbWRjLXByb3RlY3RlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZmZmfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXJhaXNlZC1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXXstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWRjLXByb3RlY3RlZC1idXR0b24tZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMik7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1jb250YWluZXItZWxldmF0aW9uOjB9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uey0tbWRjLW91dGxpbmVkLWJ1dHRvbi1vdXRsaW5lLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC11bnRoZW1lZHstLW1kYy1vdXRsaW5lZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbi5tYXQtcHJpbWFyeXstLW1kYy1vdXRsaW5lZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZjU3YzAwfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWRjLW91dGxpbmVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmZjk4MDB9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC13YXJuey0tbWRjLW91dGxpbmVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmNDQzMzZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17LS1tZGMtb3V0bGluZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1vdXRsaW5lZC1idXR0b24tZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLW91dGxpbmVkLWJ1dHRvbi1vdXRsaW5lLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMik7LS1tZGMtb3V0bGluZWQtYnV0dG9uLWRpc2FibGVkLW91dGxpbmUtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b24sLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKX0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b246aG92ZXIgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjA0fS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMTJ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtYnV0dG9uOmFjdGl2ZSAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b246YWN0aXZlIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjEyfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWJ1dHRvbi5tYXQtcHJpbWFyeSwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LXByaW1hcnl7LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2Y1N2MwMDstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyNDUsIDEyNCwgMCwgMC4xKX0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b24ubWF0LWFjY2VudCwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LWFjY2VudHstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjZmY5ODAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDI1NSwgMTUyLCAwLCAwLjEpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWJ1dHRvbi5tYXQtd2FybiwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LXdhcm57LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2Y0NDMzNjstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyNDQsIDY3LCA1NCwgMC4xKX0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1yYWlzZWQtYnV0dG9uLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKX0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1yYWlzZWQtYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjA0fS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXJhaXNlZC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1yYWlzZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMTJ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbjphY3RpdmUgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b246YWN0aXZlIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjEyfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnksLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24ubWF0LXByaW1hcnl7LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogIzAwMDstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKX0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1yYWlzZWQtYnV0dG9uLm1hdC13YXJuLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC13YXJuey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmZmY7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKX0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbnstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjMDAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b246aG92ZXIgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMDR9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZXtvcGFjaXR5Oi4xMn0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbjphY3RpdmUgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMTJ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LXByaW1hcnl7LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2Y1N2MwMDstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyNDUsIDEyNCwgMCwgMC4xKX0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmZjk4MDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjU1LCAxNTIsIDAsIDAuMSl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LXdhcm57LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2Y0NDMzNjstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyNDQsIDY3LCA1NCwgMC4xKX0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtcHJpbWFyeXstLW1kYy1pY29uLWJ1dHRvbi1pY29uLWNvbG9yOiNmNTdjMDB9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LWFjY2VudHstLW1kYy1pY29uLWJ1dHRvbi1pY29uLWNvbG9yOiNmZjk4MDB9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LXdhcm57LS1tZGMtaWNvbi1idXR0b24taWNvbi1jb2xvcjojZjQ0MzM2fS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWljb24tYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17LS1tZGMtaWNvbi1idXR0b24taWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWljb24tYnV0dG9uLWRpc2FibGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KX0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1yYWlzZWQtYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZXtoZWlnaHQ6MzZweH0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNle3dpZHRoOjQ4cHg7aGVpZ2h0OjQ4cHg7cGFkZGluZzoxMnB4fS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UgLm1kYy1pY29uLWJ1dHRvbl9fZm9jdXMtcmluZ3ttYXgtaGVpZ2h0OjQ4cHg7bWF4LXdpZHRoOjQ4cHh9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZS5tZGMtaWNvbi1idXR0b24tLXJlZHVjZWQtc2l6ZSAubWRjLWljb24tYnV0dG9uX19yaXBwbGV7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDttYXJnaW4tdG9wOjRweDttYXJnaW4tYm90dG9tOjRweDttYXJnaW4tcmlnaHQ6NHB4O21hcmdpbi1sZWZ0OjRweH0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlLm1kYy1pY29uLWJ1dHRvbi0tcmVkdWNlZC1zaXplIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmd7bWF4LWhlaWdodDo0MHB4O21heC13aWR0aDo0MHB4fS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UgLm1kYy1pY29uLWJ1dHRvbl9fdG91Y2h7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtoZWlnaHQ6NDhweDtsZWZ0OjUwJTt3aWR0aDo0OHB4O3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwgLTUwJSl9Lm1hdC1vcHRpb257Y29sb3I6IzIxMjEyMX0ubWF0LW9wdGlvbjpob3Zlcjpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpLC5tYXQtb3B0aW9uOmZvY3VzOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1tdWx0aXBsZSk6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA0KX0ubWF0LW9wdGlvbi5tYXQtYWN0aXZle2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpO2NvbG9yOiMyMTIxMjF9Lm1hdC1vcHRpb24ubWF0LW9wdGlvbi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1wcmltYXJ5IC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNmNTdjMDB9Lm1hdC1hY2NlbnQgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7Y29sb3I6I2ZmOTgwMH0ubWF0LXdhcm4gLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7Y29sb3I6I2Y0NDMzNn0ubWF0LW9wdGdyb3VwLWxhYmVse2NvbG9yOiM2MTYxNjF9Lm1hdC1vcHRncm91cC1kaXNhYmxlZCAubWF0LW9wdGdyb3VwLWxhYmVse2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMSl9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbHtjb2xvcjojNjE2MTYxfS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZHtjb2xvcjojYjBiMGIwfS5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXIsLm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlcntjb2xvcjojZjU3YzAwfS5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbCwubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGx7YmFja2dyb3VuZDojZjU3YzAwfS5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXIsLm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlcntjb2xvcjojZmZmfS5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlciwubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXJ7Y29sb3I6I2ZmOTgwMH0ubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbCwubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbHtiYWNrZ3JvdW5kOiNmZjk4MDB9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGw6OmFmdGVyLC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlcntjb2xvcjojZmZmfS5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlciwubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXJ7Y29sb3I6I2ZmOTgwMH0ubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbCwubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbHtiYWNrZ3JvdW5kOiNmZjk4MDB9Lm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGw6OmFmdGVyLC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlcntjb2xvcjojZmZmfS5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXIsLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlcntjb2xvcjojZjQ0MzM2fS5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbCwubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGx7YmFja2dyb3VuZDojZjQ0MzM2fS5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXIsLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlcntjb2xvcjojZmZmfS5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVyLC5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVye2NvbG9yOiNiMGIwYjB9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWQubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbCwubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxse2JhY2tncm91bmQ6I2IwYjBiMH0ubWF0LWFwcC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtZWxldmF0aW9uLXowe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxe2JveC1zaGFkb3c6MHB4IDJweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxcHggMXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16Mntib3gtc2hhZG93OjBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejN7Ym94LXNoYWRvdzowcHggM3B4IDNweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDNweCA0cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXo0e2JveC1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejV7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDVweCA4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggMTRweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16Nntib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNnB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggMThweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16N3tib3gtc2hhZG93OjBweCA0cHggNXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggN3B4IDEwcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAycHggMTZweCAxcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16OHtib3gtc2hhZG93OjBweCA1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggOHB4IDEwcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAzcHggMTRweCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16OXtib3gtc2hhZG93OjBweCA1cHggNnB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggOXB4IDEycHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAzcHggMTZweCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTB7Ym94LXNoYWRvdzowcHggNnB4IDZweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDEwcHggMTRweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDRweCAxOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxMXtib3gtc2hhZG93OjBweCA2cHggN3B4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTFweCAxNXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNHB4IDIwcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejEye2JveC1zaGFkb3c6MHB4IDdweCA4cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxMnB4IDE3cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA1cHggMjJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTN7Ym94LXNoYWRvdzowcHggN3B4IDhweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDEzcHggMTlweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDVweCAyNHB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxNHtib3gtc2hhZG93OjBweCA3cHggOXB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTRweCAyMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNXB4IDI2cHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejE1e2JveC1zaGFkb3c6MHB4IDhweCA5cHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxNXB4IDIycHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA2cHggMjhweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTZ7Ym94LXNoYWRvdzowcHggOHB4IDEwcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTd7Ym94LXNoYWRvdzowcHggOHB4IDExcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxN3B4IDI2cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA2cHggMzJweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTh7Ym94LXNoYWRvdzowcHggOXB4IDExcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxOHB4IDI4cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA3cHggMzRweCA2cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTl7Ym94LXNoYWRvdzowcHggOXB4IDEycHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxOXB4IDI5cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA3cHggMzZweCA2cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MjB7Ym94LXNoYWRvdzowcHggMTBweCAxM3B4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMjBweCAzMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggOHB4IDM4cHggN3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejIxe2JveC1zaGFkb3c6MHB4IDEwcHggMTNweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDIxcHggMzNweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDhweCA0MHB4IDdweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoyMntib3gtc2hhZG93OjBweCAxMHB4IDE0cHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAyMnB4IDM1cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA4cHggNDJweCA3cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MjN7Ym94LXNoYWRvdzowcHggMTFweCAxNHB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMjNweCAzNnB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggOXB4IDQ0cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejI0e2JveC1zaGFkb3c6MHB4IDExcHggMTVweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtdGhlbWUtbG9hZGVkLW1hcmtlcntkaXNwbGF5Om5vbmV9Lm1hdC1jYXJke2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtY2FyZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggMXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAzcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1jYXJkLm1hdC1jYXJkLWZsYXQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1jYXJkLXN1YnRpdGxle2NvbG9yOiM2MTYxNjF9Lm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiNmZGRlYmZ9Lm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6I2ZkZGViZn0ubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6I2ZmZTViZn0ubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmU1YmZ9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiNmY2QwY2R9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6I2ZjZDBjZH0ubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1wcm9ncmVzcy1zcGlubmVyIGNpcmNsZSwubWF0LXNwaW5uZXIgY2lyY2xle3N0cm9rZTojZjU3YzAwfS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtYWNjZW50IGNpcmNsZSwubWF0LXNwaW5uZXIubWF0LWFjY2VudCBjaXJjbGV7c3Ryb2tlOiNmZjk4MDB9Lm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC13YXJuIGNpcmNsZSwubWF0LXNwaW5uZXIubWF0LXdhcm4gY2lyY2xle3N0cm9rZTojZjQ0MzM2fS5tYXQtdG9vbHRpcHtiYWNrZ3JvdW5kOnJnYmEoOTcsOTcsOTcsLjkpfS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6IzYxNjE2MX0ubWF0LWlucHV0LWVsZW1lbnQ6ZGlzYWJsZWQsLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojNzU3NTc1fS5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojZjU3YzAwfS5tYXQtaW5wdXQtZWxlbWVudDo6cGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSg5Nyw5Nyw5NywuNDIpfS5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDk3LDk3LDk3LC40Mil9Lm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoOTcsOTcsOTcsLjQyKX0ubWF0LWlucHV0LWVsZW1lbnQ6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoOTcsOTcsOTcsLjQyKX0ubWF0LWZvcm0tZmllbGQubWF0LWFjY2VudCAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6I2ZmOTgwMH0ubWF0LWZvcm0tZmllbGQubWF0LXdhcm4gLm1hdC1pbnB1dC1lbGVtZW50LC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtcHJlZml4LC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtc3VmZml4e2NvbG9yOiM3NTc1NzV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOnJnYmEoOTcsOTcsOTcsLjYpfS5tYXQtaGludHtjb2xvcjpyZ2JhKDk3LDk3LDk3LC42KX0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiNmNTdjMDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtYWNjZW50e2NvbG9yOiNmZjk4MDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fS5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2Vye2NvbG9yOiNmZjk4MDB9Lm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LXdhcm57YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkOm5vdCgubWF0LWZvcm0tZmllbGQtaW52YWxpZCkgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZjU3YzAwfS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkOm5vdCgubWF0LWZvcm0tZmllbGQtaW52YWxpZCkubWF0LWFjY2VudCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOiNmZjk4MDB9Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvY3VzZWQ6bm90KC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkKS5tYXQtd2FybiAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLm1hdC1hY2NlbnQsLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIC5tYXQtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXJ7Y29sb3I6I2Y0NDMzNn0ubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1lcnJvcntjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6IzYxNjE2MX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1oaW50e2NvbG9yOiM2MTYxNjF9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMCwgMCwgMCwgMC40MikgMCUsIHJnYmEoMCwgMCwgMCwgMC40MikgMzMlLCB0cmFuc3BhcmVudCAwJSk7YmFja2dyb3VuZC1zaXplOjRweCAxMDAlO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgwLCAwLCAwLCAwLjQyKSAwJSwgcmdiYSgwLCAwLCAwLCAwLjQyKSAzMyUsIHRyYW5zcGFyZW50IDAlKTtiYWNrZ3JvdW5kLXNpemU6NHB4IDEwMCU7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtZmxleHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjA0KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1mbGV4e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDIpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZTo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiM3NTc1NzV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lOjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7Y29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6I2Y1N2MwMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkLm1hdC1hY2NlbnQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6I2ZmOTgwMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkLm1hdC13YXJuIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1pbnZhbGlkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6I2Y0NDMzNn0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjojNzU3NTc1fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7Y29sb3I6cmdiYSgwLDAsMCwuMDYpfS5tYXQtc2VsZWN0LXZhbHVle2NvbG9yOiMyMTIxMjF9Lm1hdC1zZWxlY3QtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSg5Nyw5Nyw5NywuNDIpfS5tYXQtc2VsZWN0LWRpc2FibGVkIC5tYXQtc2VsZWN0LXZhbHVle2NvbG9yOiM3NTc1NzV9Lm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6IzYxNjE2MX0ubWF0LXNlbGVjdC1wYW5lbHtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1zZWxlY3QtcGFuZWw6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LXNlbGVjdC1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LXByaW1hcnkgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6I2Y1N2MwMH0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LWFjY2VudCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZmY5ODAwfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtd2FybiAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZCAubWF0LXNlbGVjdC5tYXQtc2VsZWN0LWludmFsaWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6I2Y0NDMzNn0ubWF0LWZvcm0tZmllbGQgLm1hdC1zZWxlY3QubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojNzU3NTc1fS5tYXQtY2hlY2tib3gtZnJhbWV7Ym9yZGVyLWNvbG9yOiM2MTYxNjF9Lm1hdC1jaGVja2JveC1jaGVja21hcmt7ZmlsbDojZmZmfS5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGh7c3Ryb2tlOiNmZmYgIWltcG9ydGFudH0ubWF0LWNoZWNrYm94LW1peGVkbWFya3tiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Lm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wcmltYXJ5IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCwubWF0LWNoZWNrYm94LWNoZWNrZWQubWF0LXByaW1hcnkgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0ubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LWFjY2VudCAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsLm1hdC1jaGVja2JveC1jaGVja2VkLm1hdC1hY2NlbnQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH0ubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXdhcm4gLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLC5tYXQtY2hlY2tib3gtY2hlY2tlZC5tYXQtd2FybiAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWNoZWNrZWQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLC5tYXQtY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2IwYjBiMH0ubWF0LWNoZWNrYm94LWRpc2FibGVkOm5vdCgubWF0LWNoZWNrYm94LWNoZWNrZWQpIC5tYXQtY2hlY2tib3gtZnJhbWV7Ym9yZGVyLWNvbG9yOiNiMGIwYjB9Lm1hdC1jaGVja2JveC1kaXNhYmxlZCAubWF0LWNoZWNrYm94LWxhYmVse2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LWNoZWNrYm94IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojMDAwfS5tYXQtY2hlY2tib3gtY2hlY2tlZDpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWNoZWNrYm94OmFjdGl2ZTpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kOiNmNTdjMDB9Lm1hdC1jaGVja2JveC1jaGVja2VkOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1jaGVja2JveDphY3RpdmU6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kOiNmZjk4MDB9Lm1hdC1jaGVja2JveC1jaGVja2VkOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtY2hlY2tib3g6YWN0aXZlOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQ6I2Y0NDMzNn0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbHtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1hY3RpdmUpOm5vdCg6aG92ZXIpe2JhY2tncm91bmQ6I2ZmZn0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtYWN0aXZlKTpub3QoOmhvdmVyKTpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiMyMTIxMjF9Lm1hdC1kaWFsb2ctY29udGFpbmVye2JveC1zaGFkb3c6MHB4IDExcHggMTVweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcHtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTA7Y29sb3I6IzIxMjEyMX0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojMjEyMTIxO29wYWNpdHk6LjR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwOm5vdCgubWF0LWNoaXAtZGlzYWJsZWQpOmFjdGl2ZXtib3gtc2hhZG93OjBweCAzcHggM3B4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggM3B4IDRweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCA4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwOm5vdCgubWF0LWNoaXAtZGlzYWJsZWQpIC5tYXQtY2hpcC1yZW1vdmU6aG92ZXJ7b3BhY2l0eTouNTR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLWRpc2FibGVke29wYWNpdHk6LjR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwOjphZnRlcntiYWNrZ3JvdW5kOiMwMDB9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMDtjb2xvcjojZmZmfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtcHJpbWFyeSAubWF0LWNoaXAtcmVtb3Zle2NvbG9yOiNmZmY7b3BhY2l0eTouNH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtd2FybntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzY7Y29sb3I6I2ZmZn0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXdhcm4gLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDA7Y29sb3I6I2ZmZn0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LWFjY2VudCAubWF0LWNoaXAtcmVtb3Zle2NvbG9yOiNmZmY7b3BhY2l0eTouNH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Lm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDE1MiwwLC41NCl9Lm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnkubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ1LDEyNCwwLC41NCl9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnkubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4ubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC41NCl9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4ubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1zbGlkZS10b2dnbGU6bm90KC5tYXQtY2hlY2tlZCkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9Lm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDFweCAxcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQtY29sb3I6I2ZhZmFmYX0ubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOiM2MTYxNjF9Lm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOiNmNTdjMDB9Lm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yYWRpby1pbm5lci1jaXJjbGUsLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSksLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeTphY3RpdmUgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6I2ZmOTgwMH0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmFkaW8taW5uZXItY2lyY2xlLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSksLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQ6YWN0aXZlIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojZjQ0MzM2fS5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuIC5tYXQtcmFkaW8taW5uZXItY2lyY2xlLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuIC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnQ6bm90KC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUpLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUsLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm46YWN0aXZlIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1pbm5lci1jaXJjbGV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8tbGFiZWwtY29udGVudHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1yYWRpby1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9Lm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjI2KX0ubWF0LXNsaWRlci5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10cmFjay1maWxsLC5tYXQtc2xpZGVyLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0ubWF0LXNsaWRlci5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2NvbG9yOiNmZmZ9Lm1hdC1zbGlkZXIubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ1LDEyNCwwLC4yKX0ubWF0LXNsaWRlci5tYXQtYWNjZW50IC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsLm1hdC1zbGlkZXIubWF0LWFjY2VudCAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlci5tYXQtYWNjZW50IC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH0ubWF0LXNsaWRlci5tYXQtYWNjZW50IC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Y29sb3I6I2ZmZn0ubWF0LXNsaWRlci5tYXQtYWNjZW50IC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuMil9Lm1hdC1zbGlkZXIubWF0LXdhcm4gLm1hdC1zbGlkZXItdHJhY2stZmlsbCwubWF0LXNsaWRlci5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlci5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1zbGlkZXIubWF0LXdhcm4gLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHtjb2xvcjojZmZmfS5tYXQtc2xpZGVyLm1hdC13YXJuIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuMil9Lm1hdC1zbGlkZXI6aG92ZXIgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCwubWF0LXNsaWRlci5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtc2xpZGVyLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCwubWF0LXNsaWRlci5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsLm1hdC1zbGlkZXIubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjI2KX0ubWF0LXNsaWRlci5tYXQtc2xpZGVyLWRpc2FibGVkOmhvdmVyIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWUgLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWUubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZy5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4yNik7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApfS5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKTpob3ZlciAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZykuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWJ7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyk6aG92ZXIubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZykuY2RrLWZvY3VzZWQubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtc2xpZGVyLWhhcy10aWNrcyAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuNyl9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10aWNrc3tiYWNrZ3JvdW5kLWltYWdlOnJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMCwgMCwgMCwgMC43KSwgcmdiYSgwLCAwLCAwLCAwLjcpIDJweCwgdHJhbnNwYXJlbnQgMCwgdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW1vei1yZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KDAuMDAwMWRlZywgcmdiYSgwLCAwLCAwLCAwLjcpLCByZ2JhKDAsIDAsIDAsIDAuNykgMnB4LCB0cmFuc3BhcmVudCAwLCB0cmFuc3BhcmVudCl9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGlja3N7YmFja2dyb3VuZC1pbWFnZTpyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgcmdiYSgwLCAwLCAwLCAwLjcpLCByZ2JhKDAsIDAsIDAsIDAuNykgMnB4LCB0cmFuc3BhcmVudCAwLCB0cmFuc3BhcmVudCl9Lm1hdC1tZW51LXBhbmVse2JhY2tncm91bmQ6I2ZmZn0ubWF0LW1lbnUtcGFuZWw6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LW1lbnUtaXRlbXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMCk7Y29sb3I6IzIxMjEyMX0ubWF0LW1lbnUtaXRlbVtkaXNhYmxlZF0sLm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRdIC5tYXQtbWVudS1zdWJtZW51LWljb24sLm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRdIC5tYXQtaWNvbi1uby1jb2xvcntjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1tZW51LWl0ZW0gLm1hdC1pY29uLW5vLWNvbG9yLC5tYXQtbWVudS1zdWJtZW51LWljb257Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtbWVudS1pdGVtOmhvdmVyOm5vdChbZGlzYWJsZWRdKSwubWF0LW1lbnUtaXRlbS5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdChbZGlzYWJsZWRdKSwubWF0LW1lbnUtaXRlbS5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoW2Rpc2FibGVkXSksLm1hdC1tZW51LWl0ZW0taGlnaGxpZ2h0ZWQ6bm90KFtkaXNhYmxlZF0pe2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1pdGVte2NvbG9yOiMyMTIxMjF9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LW9wdGlvbntjb2xvcjojMjEyMTIxfS5tYXQtbGlzdC1iYXNlIC5tYXQtc3ViaGVhZGVye2NvbG9yOiM2MTYxNjF9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LWl0ZW0tZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjojZWVlO2NvbG9yOiM3NTc1NzV9Lm1hdC1saXN0LW9wdGlvbjpob3ZlciwubWF0LWxpc3Qtb3B0aW9uOmZvY3VzLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW06aG92ZXIsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbTpmb2N1cywubWF0LWFjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtOmhvdmVyLC5tYXQtYWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW06Zm9jdXN7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1saXN0LXNpbmdsZS1zZWxlY3RlZC1vcHRpb24sLm1hdC1saXN0LXNpbmdsZS1zZWxlY3RlZC1vcHRpb246aG92ZXIsLm1hdC1saXN0LXNpbmdsZS1zZWxlY3RlZC1vcHRpb246Zm9jdXN7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1wYWdpbmF0b3J7YmFja2dyb3VuZDojZmZmfS5tYXQtcGFnaW5hdG9yLC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSAubWF0LXNlbGVjdC10cmlnZ2Vye2NvbG9yOiM2MTYxNjF9Lm1hdC1wYWdpbmF0b3ItZGVjcmVtZW50LC5tYXQtcGFnaW5hdG9yLWluY3JlbWVudHtib3JkZXItdG9wOjJweCBzb2xpZCByZ2JhKDAsMCwwLC41NCk7Ym9yZGVyLXJpZ2h0OjJweCBzb2xpZCByZ2JhKDAsMCwwLC41NCl9Lm1hdC1wYWdpbmF0b3ItZmlyc3QsLm1hdC1wYWdpbmF0b3ItbGFzdHtib3JkZXItdG9wOjJweCBzb2xpZCByZ2JhKDAsMCwwLC41NCl9Lm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItZGVjcmVtZW50LC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWluY3JlbWVudCwubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1maXJzdCwubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1sYXN0e2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1wYWdpbmF0b3ItY29udGFpbmVye21pbi1oZWlnaHQ6NTZweH0ubWF0LXRhYi1uYXYtYmFyLC5tYXQtdGFiLWhlYWRlcntib3JkZXItYm90dG9tOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xMil9Lm1hdC10YWItZ3JvdXAtaW52ZXJ0ZWQtaGVhZGVyIC5tYXQtdGFiLW5hdi1iYXIsLm1hdC10YWItZ3JvdXAtaW52ZXJ0ZWQtaGVhZGVyIC5tYXQtdGFiLWhlYWRlcntib3JkZXItdG9wOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xMik7Ym9yZGVyLWJvdHRvbTpub25lfS5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLWxpbmt7Y29sb3I6IzIxMjEyMX0ubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjojNzU3NTc1fS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiMyMTIxMjF9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6Izc1NzU3NX0ubWF0LXRhYi1ncm91cFtjbGFzcyo9bWF0LWJhY2tncm91bmQtXT4ubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItbmF2LWJhcltjbGFzcyo9bWF0LWJhY2tncm91bmQtXXtib3JkZXItYm90dG9tOm5vbmU7Ym9yZGVyLXRvcDpub25lfS5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQsLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQsLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQsLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2Vke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTY3LDM4LC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xKX0ubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LWluay1iYXIsLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5Lm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtaW5rLWJhciwubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeS5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5Lm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5Lm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZCwubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQsLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMjQsMTc4LC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMSl9Lm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LWluay1iYXIsLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC10YWItZ3JvdXAubWF0LWFjY2VudC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtaW5rLWJhciwubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXIsLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQsLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQsLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDIwNSwyMTAsLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEpfS5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC10YWItZ3JvdXAubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDE2NywzOCwuMyl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb257YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluaywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5re2NvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle2JvcmRlci1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6I2ZmZjtvcGFjaXR5Oi40fS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmO29wYWNpdHk6LjEyfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMjQsMTc4LC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb257YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmssLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmt7Y29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmV7Ym9yZGVyLWNvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiNmZmY7b3BhY2l0eTouNH0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2ZmZjtvcGFjaXR5Oi4xMn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMDUsMjEwLC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMSl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmt7Y29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjQpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmV7Ym9yZGVyLWNvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojZmZmO29wYWNpdHk6LjR9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7b3BhY2l0eTouMTJ9Lm1hdC1zbmFjay1iYXItY29udGFpbmVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpO2JhY2tncm91bmQ6IzMyMzIzMjtib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNnB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggMThweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb257Y29sb3I6I2ZmOTgwMH0ubWF0LXRhYmxle2JhY2tncm91bmQ6I2ZmZn0ubWF0LXRhYmxlIHRoZWFkLC5tYXQtdGFibGUgdGJvZHksLm1hdC10YWJsZSB0Zm9vdCxtYXQtaGVhZGVyLXJvdyxtYXQtcm93LG1hdC1mb290ZXItcm93LFttYXQtaGVhZGVyLXJvd10sW21hdC1yb3ddLFttYXQtZm9vdGVyLXJvd10sLm1hdC10YWJsZS1zdGlja3l7YmFja2dyb3VuZDppbmhlcml0fW1hdC1yb3csbWF0LWhlYWRlci1yb3csbWF0LWZvb3Rlci1yb3csdGgubWF0LWhlYWRlci1jZWxsLHRkLm1hdC1jZWxsLHRkLm1hdC1mb290ZXItY2VsbHtib3JkZXItYm90dG9tLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWhlYWRlci1jZWxse2NvbG9yOiM2MTYxNjF9Lm1hdC1jZWxsLC5tYXQtZm9vdGVyLWNlbGx7Y29sb3I6IzIxMjEyMX0ubWF0LWJhZGdlLWNvbnRlbnR7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiNmNTdjMDB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJhZGdlLWNvbnRlbnR7b3V0bGluZTpzb2xpZCAxcHg7Ym9yZGVyLXJhZGl1czowfS5tYXQtYmFkZ2UtYWNjZW50IC5tYXQtYmFkZ2UtY29udGVudHtiYWNrZ3JvdW5kOiNmZjk4MDA7Y29sb3I6I2ZmZn0ubWF0LWJhZGdlLXdhcm4gLm1hdC1iYWRnZS1jb250ZW50e2NvbG9yOiNmZmY7YmFja2dyb3VuZDojZjQ0MzM2fS5tYXQtYmFkZ2UtZGlzYWJsZWQgLm1hdC1iYWRnZS1jb250ZW50e2JhY2tncm91bmQ6I2JkYmRiZDtjb2xvcjojNzU3NTc1fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcntib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE2cHggMjRweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSwubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93Om5vbmV9Lm1hdC1idXR0b24tdG9nZ2xle2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LWJ1dHRvbi10b2dnbGUgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmR7Y29sb3I6IzIxMjEyMTtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjojMDAwfS5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZSsubWF0LWJ1dHRvbi10b2dnbGV7Ym9yZGVyLWxlZnQ6c29saWQgMXB4ICNlMGUwZTB9W2Rpcj1ydGxdIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZSsubWF0LWJ1dHRvbi10b2dnbGV7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6c29saWQgMXB4ICNlMGUwZTB9Lm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWJ1dHRvbi10b2dnbGUtdmVydGljYWwgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDpub25lO2JvcmRlci10b3A6c29saWQgMXB4ICNlMGUwZTB9Lm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWR7YmFja2dyb3VuZC1jb2xvcjojZTBlMGUwO2NvbG9yOiM2MTYxNjF9Lm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWQubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZHtjb2xvcjojMjEyMTIxfS5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZHtjb2xvcjpyZ2JhKDAsMCwwLC4yNik7YmFja2dyb3VuZC1jb2xvcjojZWVlfS5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJke2JhY2tncm91bmQ6I2ZmZn0ubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOiNiZGJkYmR9Lm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCwubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZHtib3JkZXI6c29saWQgMXB4ICNlMGUwZTB9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnR7bGluZS1oZWlnaHQ6NDhweH0ubWF0LWNhbGVuZGFyLWFycm93e2ZpbGw6cmdiYSgwLDAsMCwuNTQpfS5tYXQtZGF0ZXBpY2tlci10b2dnbGUsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1jYWxlbmRhci1uZXh0LWJ1dHRvbiwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LWNhbGVuZGFyLXByZXZpb3VzLWJ1dHRvbntjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXItZGl2aWRlcjo6YWZ0ZXJ7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXIsLm1hdC1jYWxlbmRhci1ib2R5LWxhYmVse2NvbG9yOiM2MTYxNjF9Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudCwubWF0LWRhdGUtcmFuZ2UtaW5wdXQtc2VwYXJhdG9ye2NvbG9yOiMyMTIxMjE7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMCl9Lm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Y29sb3I6Izc1NzU3NX0ubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1kYXRlLXJhbmdlLWlucHV0LXNlcGFyYXRvcntjb2xvcjojNzU3NTc1fS5tYXQtY2FsZW5kYXItYm9keS1pbi1wcmV2aWV3e2NvbG9yOnJnYmEoMCwwLDAsLjI0KX0ubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4xOCl9Lm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0NSwxMjQsMCwuMil9Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0OSwxNzEsMCwuMil9Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmUsW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyNDUsIDEyNCwgMCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX0ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmUsW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGxlZnQsIHJnYmEoMjQ1LCAxMjQsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Lm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCwubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZS5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YWZ0ZXJ7YmFja2dyb3VuZDojYThkYWI1fS5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCwubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZDojNDZhMzVlfS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDA7Y29sb3I6I2ZmZn0ubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDUsMTI0LDAsLjQpfS5tYXQtY2FsZW5kYXItYm9keS10b2RheS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCAjZmZmfS5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCksLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDUsMTI0LDAsLjMpfUBtZWRpYShob3ZlcjogaG92ZXIpey5tYXQtY2FsZW5kYXItYm9keS1jZWxsOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQpOmhvdmVyPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NSwxMjQsMCwuMyl9fS5tYXQtZGF0ZXBpY2tlci1jb250ZW50e2JveC1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOiMyMTIxMjF9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDE1MiwwLC4yKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0OSwxNzEsMCwuMil9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjU1LCAxNTIsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmUsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgyNTUsIDE1MiwgMCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZS5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YWZ0ZXJ7YmFja2dyb3VuZDojYThkYWI1fS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQ6IzQ2YTM1ZX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDA7Y29sb3I6I2ZmZn0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuNCl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZn0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCksLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuMyl9QG1lZGlhKGhvdmVyOiBob3Zlcil7Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTUyLDAsLjMpfX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ0LDY3LDU0LC4yKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ5LDE3MSwwLC4yKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI0NCwgNjcsIDU0LCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgyNDQsIDY3LCA1NCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjphZnRlcntiYWNrZ3JvdW5kOiNhOGRhYjV9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kOiM0NmEzNWV9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNjtjb2xvcjojZmZmfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuNCl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuMyl9QG1lZGlhKGhvdmVyOiBob3Zlcil7Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNlbGw6bm90KC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCk6aG92ZXI+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4zKX19Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQtdG91Y2h7Ym94LXNoYWRvdzowcHggMTFweCAxNXB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMjRweCAzOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggOXB4IDQ2cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmV7Y29sb3I6I2Y1N2MwMH0ubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZS5tYXQtYWNjZW50e2NvbG9yOiNmZjk4MDB9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmUubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn0ubWF0LWRhdGUtcmFuZ2UtaW5wdXQtaW5uZXJbZGlzYWJsZWRde2NvbG9yOiM3NTc1NzV9Lm1hdC1jYWxlbmRhci1jb250cm9scyAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNle3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7cGFkZGluZzo4cHh9Lm1hdC1jYWxlbmRhci1jb250cm9scyAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmd7bWF4LWhlaWdodDo0MHB4O21heC13aWR0aDo0MHB4fS5tYXQtY2FsZW5kYXItY29udHJvbHMgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZS5tZGMtaWNvbi1idXR0b24tLXJlZHVjZWQtc2l6ZSAubWRjLWljb24tYnV0dG9uX19yaXBwbGV7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDttYXJnaW4tdG9wOjBweDttYXJnaW4tYm90dG9tOjBweDttYXJnaW4tcmlnaHQ6MHB4O21hcmdpbi1sZWZ0OjBweH0ubWF0LWNhbGVuZGFyLWNvbnRyb2xzIC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UubWRjLWljb24tYnV0dG9uLS1yZWR1Y2VkLXNpemUgLm1kYy1pY29uLWJ1dHRvbl9fZm9jdXMtcmluZ3ttYXgtaGVpZ2h0OjQwcHg7bWF4LXdpZHRoOjQwcHh9Lm1hdC1jYWxlbmRhci1jb250cm9scyAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlIC5tZGMtaWNvbi1idXR0b25fX3RvdWNoe3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7aGVpZ2h0OjQwcHg7bGVmdDo1MCU7d2lkdGg6NDBweDt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC01MCUpfS5tYXQtY2FsZW5kYXItY29udHJvbHMgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSAubWF0LW1kYy1idXR0b24tdG91Y2gtdGFyZ2V0e2Rpc3BsYXk6bm9uZX0ubWF0LWRpdmlkZXJ7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1kaXZpZGVyLXZlcnRpY2Fse2JvcmRlci1yaWdodC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1leHBhbnNpb24tcGFuZWx7YmFja2dyb3VuZDojZmZmO2NvbG9yOiMyMTIxMjF9Lm1hdC1leHBhbnNpb24tcGFuZWw6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtYWN0aW9uLXJvd3tib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWV4cGFuc2lvbi1wYW5lbCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSwubWF0LWV4cGFuc2lvbi1wYW5lbCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pLC5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdCgubWF0LWV4cGFuZGVkKSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6aG92ZXI6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA0KX1AbWVkaWEoaG92ZXI6IG5vbmUpey5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdCgubWF0LWV4cGFuZGVkKTpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpob3ZlcntiYWNrZ3JvdW5kOiNmZmZ9fS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZXtjb2xvcjojMjEyMTIxfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbiwubWF0LWV4cGFuc2lvbi1pbmRpY2F0b3I6OmFmdGVye2NvbG9yOiM2MTYxNjF9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV17Y29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclthcmlhLWRpc2FibGVkPXRydWVdIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZSwubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb257Y29sb3I6aW5oZXJpdH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJ7aGVpZ2h0OjQ4cHh9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLm1hdC1leHBhbmRlZHtoZWlnaHQ6NjRweH0ubWF0LWljb24ubWF0LXByaW1hcnl7Y29sb3I6I2Y1N2MwMH0ubWF0LWljb24ubWF0LWFjY2VudHtjb2xvcjojZmY5ODAwfS5tYXQtaWNvbi5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fS5tYXQtZHJhd2VyLWNvbnRhaW5lcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWRyYXdlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWRyYXdlci5tYXQtZHJhd2VyLXB1c2h7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtZHJhd2VyOm5vdCgubWF0LWRyYXdlci1zaWRlKXtib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE2cHggMjRweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZHJhd2VyLXNpZGV7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1kcmF3ZXItc2lkZS5tYXQtZHJhd2VyLWVuZHtib3JkZXItbGVmdDpzb2xpZCAxcHggcmdiYSgwLDAsMCwuMTIpO2JvcmRlci1yaWdodDpub25lfVtkaXI9cnRsXSAubWF0LWRyYXdlci1zaWRle2JvcmRlci1sZWZ0OnNvbGlkIDFweCByZ2JhKDAsMCwwLC4xMik7Ym9yZGVyLXJpZ2h0Om5vbmV9W2Rpcj1ydGxdIC5tYXQtZHJhd2VyLXNpZGUubWF0LWRyYXdlci1lbmR7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6c29saWQgMXB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWRyYXdlci1iYWNrZHJvcC5tYXQtZHJhd2VyLXNob3due2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNil9Lm1hdC1zdGVwLWhlYWRlci5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LXN0ZXAtaGVhZGVyLmNkay1wcm9ncmFtLWZvY3VzZWQsLm1hdC1zdGVwLWhlYWRlcjpob3Zlcjpub3QoW2FyaWEtZGlzYWJsZWRdKSwubWF0LXN0ZXAtaGVhZGVyOmhvdmVyW2FyaWEtZGlzYWJsZWQ9ZmFsc2Vde2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDQpfS5tYXQtc3RlcC1oZWFkZXI6aG92ZXJbYXJpYS1kaXNhYmxlZD10cnVlXXtjdXJzb3I6ZGVmYXVsdH1AbWVkaWEoaG92ZXI6IG5vbmUpey5tYXQtc3RlcC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZDpub25lfX0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1sYWJlbCwubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1vcHRpb25hbHtjb2xvcjojNjE2MTYxfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb257YmFja2dyb3VuZC1jb2xvcjojNjE2MTYxO2NvbG9yOiNmZmZ9Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCwubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0e2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMDtjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbntjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCwubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc3RhdGUtZG9uZSwubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDA7Y29sb3I6I2ZmZn0ubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29ue2NvbG9yOiNmZmZ9Lm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCwubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0e2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNjtjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc3RhdGUtZXJyb3J7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApO2NvbG9yOiNmNDQzMzZ9Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtbGFiZWwubWF0LXN0ZXAtbGFiZWwtYWN0aXZle2NvbG9yOiMyMTIxMjF9Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtbGFiZWwubWF0LXN0ZXAtbGFiZWwtZXJyb3J7Y29sb3I6I2Y0NDMzNn0ubWF0LXN0ZXBwZXItaG9yaXpvbnRhbCwubWF0LXN0ZXBwZXItdmVydGljYWx7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtc3RlcHBlci12ZXJ0aWNhbC1saW5lOjpiZWZvcmV7Ym9yZGVyLWxlZnQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YmVmb3JlLC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YWZ0ZXIsLm1hdC1zdGVwcGVyLWhvcml6b250YWwtbGluZXtib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXJ7aGVpZ2h0OjcycHh9Lm1hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWJvdHRvbSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXIsLm1hdC12ZXJ0aWNhbC1zdGVwcGVyLWhlYWRlcntwYWRkaW5nOjI0cHggMjRweH0ubWF0LXN0ZXBwZXItdmVydGljYWwtbGluZTo6YmVmb3Jle3RvcDotMTZweDtib3R0b206LTE2cHh9Lm1hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWJvdHRvbSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmFmdGVyLC5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjpiZWZvcmV7dG9wOjM2cHh9Lm1hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWJvdHRvbSAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbC1saW5le3RvcDozNnB4fS5tYXQtc29ydC1oZWFkZXItYXJyb3d7Y29sb3I6IzYxNjE2MX0ubWF0LXRvb2xiYXJ7YmFja2dyb3VuZDojZjU3YzAwO2NvbG9yOiMyMTIxMjF9Lm1hdC10b29sYmFyLm1hdC1wcmltYXJ5e2JhY2tncm91bmQ6I2Y1N2MwMDtjb2xvcjojZmZmfS5tYXQtdG9vbGJhci5tYXQtYWNjZW50e2JhY2tncm91bmQ6I2ZmOTgwMDtjb2xvcjojZmZmfS5tYXQtdG9vbGJhci5tYXQtd2FybntiYWNrZ3JvdW5kOiNmNDQzMzY7Y29sb3I6I2ZmZn0ubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSwubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSwubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9Lm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LXRvb2xiYXIgLm1hdC1zZWxlY3QtdmFsdWUsLm1hdC10b29sYmFyIC5tYXQtc2VsZWN0LWFycm93LC5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6aW5oZXJpdH0ubWF0LXRvb2xiYXIgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOmN1cnJlbnRDb2xvcn0ubWF0LXRvb2xiYXItbXVsdGlwbGUtcm93c3ttaW4taGVpZ2h0OjY0cHh9Lm1hdC10b29sYmFyLXJvdywubWF0LXRvb2xiYXItc2luZ2xlLXJvd3toZWlnaHQ6NjRweH1AbWVkaWEobWF4LXdpZHRoOiA1OTlweCl7Lm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3N7bWluLWhlaWdodDo1NnB4fS5tYXQtdG9vbGJhci1yb3csLm1hdC10b29sYmFyLXNpbmdsZS1yb3d7aGVpZ2h0OjU2cHh9fS5tYXQtdHJlZXtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC10cmVlLW5vZGUsLm1hdC1uZXN0ZWQtdHJlZS1ub2Rle2NvbG9yOiMyMTIxMjF9Lm1hdC10cmVlLW5vZGV7bWluLWhlaWdodDo0OHB4fS5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xKX0ubWF0LW1kYy1vcHRpb257Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtcHJpbWFyeS1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuODcpKX0ubWF0LW1kYy1vcHRpb246aG92ZXI6bm90KC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCksLm1hdC1tZGMtb3B0aW9uOmZvY3VzOm5vdCgubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQpLC5tYXQtbWRjLW9wdGlvbi5tYXQtbWRjLW9wdGlvbi1hY3RpdmUsLm1hdC1tZGMtb3B0aW9uLm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkOm5vdCgubWF0LW1kYy1vcHRpb24tbXVsdGlwbGUpOm5vdCgubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQpe2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfS5tYXQtcHJpbWFyeSAubWF0LW1kYy1vcHRpb24ubWRjLWxpc3QtaXRlbS0tc2VsZWN0ZWQ6bm90KC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCkgLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtcHJpbWFyeSwgI2Y1N2MwMCl9Lm1hdC1hY2NlbnQgLm1hdC1tZGMtb3B0aW9uLm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkOm5vdCgubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQpIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXNlY29uZGFyeSwgI2ZmOTgwMCl9Lm1hdC13YXJuIC5tYXQtbWRjLW9wdGlvbi5tZGMtbGlzdC1pdGVtLS1zZWxlY3RlZDpub3QoLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkKSAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtb3B0Z3JvdXAtbGFiZWx7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtcHJpbWFyeS1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuODcpKX0ubWF0LXBzZXVkby1jaGVja2JveC1mdWxse2NvbG9yOiM2MTYxNjF9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbC5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVke2NvbG9yOiNiMGIwYjB9Lm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlciwubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVye2NvbG9yOiNmNTdjMDB9Lm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1mdWxsLC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbHtiYWNrZ3JvdW5kOiNmNTdjMDB9Lm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlciwubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGw6OmFmdGVye2NvbG9yOiNmZmZ9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVyLC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlcntjb2xvcjojZmY5ODAwfS5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1mdWxsLC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxse2JhY2tncm91bmQ6I2ZmOTgwMH0ubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXIsLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGw6OmFmdGVye2NvbG9yOiNmZmZ9Lm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVyLC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlcntjb2xvcjojZmY5ODAwfS5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1mdWxsLC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxse2JhY2tncm91bmQ6I2ZmOTgwMH0ubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXIsLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGw6OmFmdGVye2NvbG9yOiNmZmZ9Lm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlciwubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVye2NvbG9yOiNmNDQzMzZ9Lm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1mdWxsLC5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbHtiYWNrZ3JvdW5kOiNmNDQzMzZ9Lm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlciwubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGw6OmFmdGVye2NvbG9yOiNmZmZ9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWQubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXIsLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWQubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXJ7Y29sb3I6I2IwYjBiMH0ubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1mdWxsLC5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGx7YmFja2dyb3VuZDojYjBiMGIwfS5tYXQtYXBwLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOiMyMTIxMjF9Lm1hdC1lbGV2YXRpb24tejAsLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejB7Ym94LXNoYWRvdzowcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejEsLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejF7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDFweCAxcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoyLC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoye2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MywubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16M3tib3gtc2hhZG93OjBweCAzcHggM3B4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggM3B4IDRweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCA4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejQsLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejR7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16NSwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16NXtib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNXB4IDhweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAxNHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXo2LC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXo2e2JveC1zaGFkb3c6MHB4IDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA2cHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAxOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXo3LC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXo3e2JveC1zaGFkb3c6MHB4IDRweCA1cHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA3cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDJweCAxNnB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXo4LC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXo4e2JveC1zaGFkb3c6MHB4IDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXo5LC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXo5e2JveC1zaGFkb3c6MHB4IDVweCA2cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA5cHggMTJweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDNweCAxNnB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxMCwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MTB7Ym94LXNoYWRvdzowcHggNnB4IDZweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDEwcHggMTRweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDRweCAxOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxMSwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MTF7Ym94LXNoYWRvdzowcHggNnB4IDdweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDExcHggMTVweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDRweCAyMHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxMiwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MTJ7Ym94LXNoYWRvdzowcHggN3B4IDhweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDEycHggMTdweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDVweCAyMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxMywubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MTN7Ym94LXNoYWRvdzowcHggN3B4IDhweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDEzcHggMTlweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDVweCAyNHB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxNCwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MTR7Ym94LXNoYWRvdzowcHggN3B4IDlweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE0cHggMjFweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDVweCAyNnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxNSwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MTV7Ym94LXNoYWRvdzowcHggOHB4IDlweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE1cHggMjJweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDZweCAyOHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxNiwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MTZ7Ym94LXNoYWRvdzowcHggOHB4IDEwcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTcsLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejE3e2JveC1zaGFkb3c6MHB4IDhweCAxMXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTdweCAyNnB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNnB4IDMycHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejE4LC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxOHtib3gtc2hhZG93OjBweCA5cHggMTFweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE4cHggMjhweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDdweCAzNHB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxOSwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MTl7Ym94LXNoYWRvdzowcHggOXB4IDEycHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxOXB4IDI5cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA3cHggMzZweCA2cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MjAsLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejIwe2JveC1zaGFkb3c6MHB4IDEwcHggMTNweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDIwcHggMzFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDhweCAzOHB4IDdweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoyMSwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MjF7Ym94LXNoYWRvdzowcHggMTBweCAxM3B4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMjFweCAzM3B4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggOHB4IDQwcHggN3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejIyLC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoyMntib3gtc2hhZG93OjBweCAxMHB4IDE0cHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAyMnB4IDM1cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA4cHggNDJweCA3cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MjMsLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejIze2JveC1zaGFkb3c6MHB4IDExcHggMTRweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDIzcHggMzZweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDlweCA0NHB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoyNCwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MjR7Ym94LXNoYWRvdzowcHggMTFweCAxNXB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMjRweCAzOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggOXB4IDQ2cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC10aGVtZS1sb2FkZWQtbWFya2Vye2Rpc3BsYXk6bm9uZX0ubWF0LW1kYy1jYXJke2JveC1zaGFkb3c6MHB4IDJweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxcHggMXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTstLW1kYy1lbGV2YXRlZC1jYXJkLWNvbnRhaW5lci1jb2xvcjojZmZmfS5tYXQtbWRjLWNhcmQtb3V0bGluZWR7Ym94LXNoYWRvdzowcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMik7LS1tZGMtb3V0bGluZWQtY2FyZC1vdXRsaW5lLWNvbG9yOiNlMGUwZTB9Lm1hdC1tZGMtY2FyZC1zdWJ0aXRsZXtjb2xvcjojNjE2MTYxfS5tYXQtbWRjLXByb2dyZXNzLWJhcnstLW1kYy1saW5lYXItcHJvZ3Jlc3MtYWN0aXZlLWluZGljYXRvci1jb2xvcjojZjU3YzAwfS5tYXQtbWRjLXByb2dyZXNzLWJhciAubWRjLWxpbmVhci1wcm9ncmVzc19fYnVmZmVyLWRvdHN7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgdmVyc2lvbj0nMS4xJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyB4PScwcHgnIHk9JzBweCcgZW5hYmxlLWJhY2tncm91bmQ9J25ldyAwIDAgNSAyJyB4bWw6c3BhY2U9J3ByZXNlcnZlJyB2aWV3Qm94PScwIDAgNSAyJyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSdub25lIHNsaWNlJyUzRSUzQ2NpcmNsZSBjeD0nMScgY3k9JzEnIHI9JzEnIGZpbGw9J3JnYmEoMjQ1LCAxMjQsIDAsIDAuMjUpJy8lM0UlM0Mvc3ZnJTNFIil9Lm1hdC1tZGMtcHJvZ3Jlc3MtYmFyIC5tZGMtbGluZWFyLXByb2dyZXNzX19idWZmZXItYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDUsIDEyNCwgMCwgMC4yNSl9Lm1hdC1tZGMtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnR7LS1tZGMtbGluZWFyLXByb2dyZXNzLWFjdGl2ZS1pbmRpY2F0b3ItY29sb3I6I2ZmOTgwMH0ubWF0LW1kYy1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWRjLWxpbmVhci1wcm9ncmVzc19fYnVmZmVyLWRvdHN7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgdmVyc2lvbj0nMS4xJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyB4PScwcHgnIHk9JzBweCcgZW5hYmxlLWJhY2tncm91bmQ9J25ldyAwIDAgNSAyJyB4bWw6c3BhY2U9J3ByZXNlcnZlJyB2aWV3Qm94PScwIDAgNSAyJyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSdub25lIHNsaWNlJyUzRSUzQ2NpcmNsZSBjeD0nMScgY3k9JzEnIHI9JzEnIGZpbGw9J3JnYmEoMjU1LCAxNTIsIDAsIDAuMjUpJy8lM0UlM0Mvc3ZnJTNFIil9Lm1hdC1tZGMtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnQgLm1kYy1saW5lYXItcHJvZ3Jlc3NfX2J1ZmZlci1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwgMTUyLCAwLCAwLjI1KX0ubWF0LW1kYy1wcm9ncmVzcy1iYXIubWF0LXdhcm57LS1tZGMtbGluZWFyLXByb2dyZXNzLWFjdGl2ZS1pbmRpY2F0b3ItY29sb3I6I2Y0NDMzNn0ubWF0LW1kYy1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1kYy1saW5lYXItcHJvZ3Jlc3NfX2J1ZmZlci1kb3Rze2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHZlcnNpb249JzEuMScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB4bWxuczp4bGluaz0naHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycgeD0nMHB4JyB5PScwcHgnIGVuYWJsZS1iYWNrZ3JvdW5kPSduZXcgMCAwIDUgMicgeG1sOnNwYWNlPSdwcmVzZXJ2ZScgdmlld0JveD0nMCAwIDUgMicgcHJlc2VydmVBc3BlY3RSYXRpbz0nbm9uZSBzbGljZSclM0UlM0NjaXJjbGUgY3g9JzEnIGN5PScxJyByPScxJyBmaWxsPSdyZ2JhKDI0NCwgNjcsIDU0LCAwLjI1KScvJTNFJTNDL3N2ZyUzRSIpfS5tYXQtbWRjLXByb2dyZXNzLWJhci5tYXQtd2FybiAubWRjLWxpbmVhci1wcm9ncmVzc19fYnVmZmVyLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LCA2NywgNTQsIDAuMjUpfS5tYXQtbWRjLXRvb2x0aXB7LS1tZGMtcGxhaW4tdG9vbHRpcC1jb250YWluZXItY29sb3I6IzYxNjE2MTstLW1kYy1wbGFpbi10b29sdGlwLXN1cHBvcnRpbmctdGV4dC1jb2xvcjp3aGl0ZX0ubWRjLXRleHQtZmllbGQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtZmxvYXRpbmctbGFiZWx7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjYpfS5tZGMtdGV4dC1maWVsZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy10ZXh0LWZpZWxkX19pbnB1dHtjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuODcpfUBtZWRpYSBhbGx7Lm1kYy10ZXh0LWZpZWxkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLXRleHQtZmllbGRfX2lucHV0OjpwbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNil9fUBtZWRpYSBhbGx7Lm1kYy10ZXh0LWZpZWxkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLXRleHQtZmllbGRfX2lucHV0Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNil9fS5tZGMtdGV4dC1maWVsZCAubWRjLXRleHQtZmllbGRfX2lucHV0e2NhcmV0LWNvbG9yOnZhcigtLW1kYy10aGVtZS1wcmltYXJ5LCAjZjU3YzAwKX0ubWRjLXRleHQtZmllbGQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpKy5tZGMtdGV4dC1maWVsZC1oZWxwZXItbGluZSAubWRjLXRleHQtZmllbGQtaGVscGVyLXRleHR7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjYpfS5tZGMtdGV4dC1maWVsZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy10ZXh0LWZpZWxkLWNoYXJhY3Rlci1jb3VudGVyLC5tZGMtdGV4dC1maWVsZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5lIC5tZGMtdGV4dC1maWVsZC1jaGFyYWN0ZXItY291bnRlcntjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNil9Lm1kYy10ZXh0LWZpZWxkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLXRleHQtZmllbGRfX2ljb24tLWxlYWRpbmd7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KX0ubWRjLXRleHQtZmllbGQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtdGV4dC1maWVsZF9faWNvbi0tdHJhaWxpbmd7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KX0ubWRjLXRleHQtZmllbGQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtdGV4dC1maWVsZF9fYWZmaXgtLXByZWZpeHtjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNil9Lm1kYy10ZXh0LWZpZWxkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLXRleHQtZmllbGRfX2FmZml4LS1zdWZmaXh7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjYpfS5tZGMtdGV4dC1maWVsZC0tZmlsbGVkIC5tZGMtdGV4dC1maWVsZF9fcmlwcGxlOjpiZWZvcmUsLm1kYy10ZXh0LWZpZWxkLS1maWxsZWQgLm1kYy10ZXh0LWZpZWxkX19yaXBwbGU6OmFmdGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLXJpcHBsZS1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjg3KSl9Lm1kYy10ZXh0LWZpZWxkLS1maWxsZWQ6aG92ZXIgLm1kYy10ZXh0LWZpZWxkX19yaXBwbGU6OmJlZm9yZSwubWRjLXRleHQtZmllbGQtLWZpbGxlZC5tZGMtcmlwcGxlLXN1cmZhY2UtLWhvdmVyIC5tZGMtdGV4dC1maWVsZF9fcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTp2YXIoLS1tZGMtcmlwcGxlLWhvdmVyLW9wYWNpdHksIDAuMDQpfS5tZGMtdGV4dC1maWVsZC0tZmlsbGVkLm1kYy1yaXBwbGUtdXBncmFkZWQtLWJhY2tncm91bmQtZm9jdXNlZCAubWRjLXRleHQtZmllbGRfX3JpcHBsZTo6YmVmb3JlLC5tZGMtdGV4dC1maWVsZC0tZmlsbGVkOm5vdCgubWRjLXJpcHBsZS11cGdyYWRlZCk6Zm9jdXMgLm1kYy10ZXh0LWZpZWxkX19yaXBwbGU6OmJlZm9yZXtvcGFjaXR5OnZhcigtLW1kYy1yaXBwbGUtZm9jdXMtb3BhY2l0eSwgMC4xMil9Lm1kYy10ZXh0LWZpZWxkLS1maWxsZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6d2hpdGVzbW9rZX0ubWRjLXRleHQtZmllbGQtLWZpbGxlZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1saW5lLXJpcHBsZTo6YmVmb3Jle2JvcmRlci1ib3R0b20tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjQyKX0ubWRjLXRleHQtZmllbGQtLWZpbGxlZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCk6aG92ZXIgLm1kYy1saW5lLXJpcHBsZTo6YmVmb3Jle2JvcmRlci1ib3R0b20tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjg3KX0ubWRjLXRleHQtZmllbGQtLWZpbGxlZCAubWRjLWxpbmUtcmlwcGxlOjphZnRlcntib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLW1kYy10aGVtZS1wcmltYXJ5LCAjZjU3YzAwKX0ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZywubWRjLXRleHQtZmllbGQtLW91dGxpbmVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpfS5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOm5vdCgubWRjLXRleHQtZmllbGQtLWZvY3VzZWQpOmhvdmVyIC5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOm5vdCgubWRjLXRleHQtZmllbGQtLWZvY3VzZWQpOmhvdmVyIC5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCwubWRjLXRleHQtZmllbGQtLW91dGxpbmVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpub3QoLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkKTpob3ZlciAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC44Nyl9Lm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6dmFyKC0tbWRjLXRoZW1lLXByaW1hcnksICNmNTdjMDApfS5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy10ZXh0LWZpZWxkX19yaXBwbGU6OmJlZm9yZSwubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtdGV4dC1maWVsZF9fcmlwcGxlOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy1yaXBwbGUtY29sb3IsIHRyYW5zcGFyZW50KX0ubWRjLXRleHQtZmllbGQtLWZvY3VzZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtZmxvYXRpbmctbGFiZWx7Y29sb3I6cmdiYSgyNDUsIDEyNCwgMCwgMC44Nyl9Lm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpob3ZlciAubWRjLWxpbmUtcmlwcGxlOjpiZWZvcmV7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1saW5lLXJpcHBsZTo6YWZ0ZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1mbG9hdGluZy1sYWJlbHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWludmFsaWQrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5lIC5tZGMtdGV4dC1maWVsZC1oZWxwZXItdGV4dC0tdmFsaWRhdGlvbi1tc2d7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWRjLXRleHQtZmllbGQtLWludmFsaWQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dHtjYXJldC1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy10ZXh0LWZpZWxkX19pY29uLS10cmFpbGluZ3tjb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1saW5lLXJpcHBsZTo6YmVmb3Jle2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCk6bm90KC5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCk6aG92ZXIgLm1kYy1ub3RjaGVkLW91dGxpbmUgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpub3QoLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkKTpob3ZlciAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpub3QoLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkKTpob3ZlciAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZywubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCwubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtdGV4dC1maWVsZF9faW5wdXR7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KX1AbWVkaWEgYWxsey5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dDo6cGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KX19QG1lZGlhIGFsbHsubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtdGV4dC1maWVsZF9faW5wdXQ6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCl9fS5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy1mbG9hdGluZy1sYWJlbHtjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpfS5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5lIC5tZGMtdGV4dC1maWVsZC1oZWxwZXItdGV4dHtjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpfS5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkLWNoYXJhY3Rlci1jb3VudGVyLC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5lIC5tZGMtdGV4dC1maWVsZC1jaGFyYWN0ZXItY291bnRlcntjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpfS5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19pY29uLS1sZWFkaW5ne2NvbG9yOnJnYmEoMCwgMCwgMCwgMC4zKX0ubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtdGV4dC1maWVsZF9faWNvbi0tdHJhaWxpbmd7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjMpfS5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19hZmZpeC0tcHJlZml4e2NvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCl9Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLXRleHQtZmllbGRfX2FmZml4LS1zdWZmaXh7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KX0ubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtbGluZS1yaXBwbGU6OmJlZm9yZXtib3JkZXItYm90dG9tLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4wNil9Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZywubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCwubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6cmdiYSgwLCAwLCAwLCAwLjA2KX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKSwoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSl7Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLXRleHQtZmllbGRfX2lucHV0OjpwbGFjZWhvbGRlcntjb2xvcjpHcmF5VGV4dH19QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSksKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpey5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6R3JheVRleHR9fUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXsubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtZmxvYXRpbmctbGFiZWx7Y29sb3I6R3JheVRleHR9fUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXsubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKy5tZGMtdGV4dC1maWVsZC1oZWxwZXItbGluZSAubWRjLXRleHQtZmllbGQtaGVscGVyLXRleHR7Y29sb3I6R3JheVRleHR9fUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXsubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtdGV4dC1maWVsZC1jaGFyYWN0ZXItY291bnRlciwubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKy5tZGMtdGV4dC1maWVsZC1oZWxwZXItbGluZSAubWRjLXRleHQtZmllbGQtY2hhcmFjdGVyLWNvdW50ZXJ7Y29sb3I6R3JheVRleHR9fUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXsubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtdGV4dC1maWVsZF9faWNvbi0tbGVhZGluZ3tjb2xvcjpHcmF5VGV4dH19QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSksKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpey5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19pY29uLS10cmFpbGluZ3tjb2xvcjpHcmF5VGV4dH19QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSksKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpey5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19hZmZpeC0tcHJlZml4e2NvbG9yOkdyYXlUZXh0fX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKSwoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSl7Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLXRleHQtZmllbGRfX2FmZml4LS1zdWZmaXh7Y29sb3I6R3JheVRleHR9fUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXsubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtbGluZS1yaXBwbGU6OmJlZm9yZXtib3JkZXItYm90dG9tLWNvbG9yOkdyYXlUZXh0fX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKSwoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSl7Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZywubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCwubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6R3JheVRleHR9fS5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQubWRjLXRleHQtZmllbGQtLWZpbGxlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmF9Lm1hdC1tZGMtZm9ybS1maWVsZC1lcnJvcntjb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQtZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LW1kYy1mb3JtLWZpZWxkOmhvdmVyIC5tYXQtbWRjLWZvcm0tZmllbGQtZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4wNH0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtbWRjLWZvcm0tZmllbGQtZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4xMn0ubWF0LW1kYy1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QgLm1hdC1tZGMtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtbWRjLWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9jdXNlZC5tYXQtcHJpbWFyeSAubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjpyZ2JhKDI0NSwxMjQsMCwuODcpfS5tYXQtbWRjLWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9jdXNlZC5tYXQtYWNjZW50IC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOnJnYmEoMjU1LDE1MiwwLC44Nyl9Lm1hdC1tZGMtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkLm1hdC13YXJuIC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOnJnYmEoMjQ0LDY3LDU0LC44Nyl9Lm1hdC1tZGMtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dHtjYXJldC1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjZmY5ODAwKX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbGluZS1yaXBwbGU6OmFmdGVye2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tbWRjLXRoZW1lLXNlY29uZGFyeSwgI2ZmOTgwMCl9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1mbG9hdGluZy1sYWJlbHtjb2xvcjpyZ2JhKDI1NSwgMTUyLCAwLCAwLjg3KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpob3ZlciAubWRjLWxpbmUtcmlwcGxlOjpiZWZvcmV7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbGluZS1yaXBwbGU6OmFmdGVye2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLWZsb2F0aW5nLWxhYmVse2NvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWludmFsaWQrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5lIC5tZGMtdGV4dC1maWVsZC1oZWxwZXItdGV4dC0tdmFsaWRhdGlvbi1tc2d7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkIC5tZGMtdGV4dC1maWVsZF9faW5wdXR7Y2FyZXQtY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLXRleHQtZmllbGRfX2ljb24tLXRyYWlsaW5ne2NvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1saW5lLXJpcHBsZTo6YmVmb3Jle2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZywubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOm5vdCgubWRjLXRleHQtZmllbGQtLWZvY3VzZWQpOmhvdmVyIC5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOm5vdCgubWRjLXRleHQtZmllbGQtLWZvY3VzZWQpOmhvdmVyIC5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCwubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpub3QoLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkKTpob3ZlciAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCwubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjZmY5ODAwKX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZF9faW5wdXR7Y2FyZXQtY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLWxpbmUtcmlwcGxlOjphZnRlcntib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWZvY3VzZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtZmxvYXRpbmctbGFiZWx7Y29sb3I6cmdiYSgyNDQsIDY3LCA1NCwgMC44Nyl9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOmhvdmVyIC5tZGMtbGluZS1yaXBwbGU6OmJlZm9yZXtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbGluZS1yaXBwbGU6OmFmdGVye2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1mbG9hdGluZy1sYWJlbHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0taW52YWxpZCsubWRjLXRleHQtZmllbGQtaGVscGVyLWxpbmUgLm1kYy10ZXh0LWZpZWxkLWhlbHBlci10ZXh0LS12YWxpZGF0aW9uLW1zZ3tjb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkIC5tZGMtdGV4dC1maWVsZF9faW5wdXR7Y2FyZXQtY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy10ZXh0LWZpZWxkX19pY29uLS10cmFpbGluZ3tjb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLWxpbmUtcmlwcGxlOjpiZWZvcmV7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZywubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOm5vdCgubWRjLXRleHQtZmllbGQtLWZvY3VzZWQpOmhvdmVyIC5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpub3QoLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkKTpob3ZlciAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOm5vdCgubWRjLXRleHQtZmllbGQtLWZvY3VzZWQpOmhvdmVyIC5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCwubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLW91dGxpbmVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLW91dGxpbmVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtbWRjLWZvcm0tZmllbGQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoe2JvcmRlci1sZWZ0OjFweCBzb2xpZCByZ2JhKDAsMCwwLDApfVtkaXI9cnRsXSAubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1tZGMtZm9ybS1maWVsZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2h7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6MXB4IHNvbGlkIHJnYmEoMCwwLDAsMCl9Lm1hdC1tZGMtZm9ybS1maWVsZC1pbmZpeHttaW4taGVpZ2h0OjU2cHh9Lm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVyIC5tYXQtbWRjLWZvcm0tZmllbGQtZmxleCAubWF0LW1kYy1mbG9hdGluZy1sYWJlbHt0b3A6MjhweH0ubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXIubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lLS11cGdyYWRlZCAubWRjLWZsb2F0aW5nLWxhYmVsLS1mbG9hdC1hYm92ZXstLW1hdC1tZGMtZm9ybS1maWVsZC1sYWJlbC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoIC0zNC43NXB4KSBzY2FsZSh2YXIoLS1tYXQtbWRjLWZvcm0tZmllbGQtZmxvYXRpbmctbGFiZWwtc2NhbGUsIDAuNzUpKTt0cmFuc2Zvcm06dmFyKC0tbWF0LW1kYy1mb3JtLWZpZWxkLWxhYmVsLXRyYW5zZm9ybSl9Lm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVyLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmctdG9wOjE2cHg7cGFkZGluZy1ib3R0b206MTZweH0ubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXI6bm90KC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQpIC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXh7cGFkZGluZy10b3A6MjRweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1kYy10ZXh0LWZpZWxkLS1uby1sYWJlbDpub3QoLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCk6bm90KC5tZGMtdGV4dC1maWVsZC0tdGV4dGFyZWEpIC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXh7cGFkZGluZy10b3A6MTZweDtwYWRkaW5nLWJvdHRvbToxNnB4fS5tZGMtbWVudS1zdXJmYWNle2JveC1zaGFkb3c6MHB4IDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLXRoZW1lLXN1cmZhY2UsICNmZmYpO2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LXByaW1hcnktb24tYmFja2dyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjg3KSl9Lm1kYy1saXN0LWl0ZW1fX3NlY29uZGFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LXNlY29uZGFyeS1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuNTQpKX0ubWRjLWxpc3QtaXRlbV9fb3ZlcmxpbmUtdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1oaW50LW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC4zOCkpfS5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHJhaWxpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fZW5ke2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydCwubWRjLWxpc3QtaXRlbS0td2l0aC10cmFpbGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19lbmR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtaWNvbi1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuMzgpKX0ubWRjLWxpc3QtaXRlbV9fZW5ke2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LWhpbnQtb24tYmFja2dyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjM4KSl9Lm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19zdGFydCwubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX2NvbnRlbnQsLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19lbmR7b3BhY2l0eTowLjM4fS5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX3NlY29uZGFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX292ZXJsaW5lLXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZC5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZC5tZGMtbGlzdC1pdGVtLS13aXRoLXRyYWlsaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX2VuZHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgIzAwMCl9Lm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHJhaWxpbmctbWV0YSAubWRjLWxpc3QtaXRlbV9fZW5ke2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbS0tc2VsZWN0ZWQgLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dCwubWRjLWxpc3QtaXRlbS0tYWN0aXZhdGVkIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXByaW1hcnksICNmNTdjMDApfS5tZGMtbGlzdC1pdGVtLS1zZWxlY3RlZC5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1kYy1saXN0LWl0ZW0tLWFjdGl2YXRlZC5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXByaW1hcnksICNmNTdjMDApfS5tZGMtZGVwcmVjYXRlZC1saXN0LWdyb3VwX19zdWJoZWFkZXJ7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtcHJpbWFyeS1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuODcpKX0ubWRjLWxpc3QtZGl2aWRlcjo6YWZ0ZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp3aGl0ZX0ubWRjLWxpc3QtZGl2aWRlcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1tZGMtc2VsZWN0LXZhbHVle2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LW1kYy1zZWxlY3QtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgwLDAsMCwuNil9Lm1hdC1tZGMtc2VsZWN0LWRpc2FibGVkIC5tYXQtbWRjLXNlbGVjdC12YWx1ZXtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1tZGMtc2VsZWN0LWFycm93e2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkLm1hdC1wcmltYXJ5IC5tYXQtbWRjLXNlbGVjdC1hcnJvd3tjb2xvcjpyZ2JhKDI0NSwxMjQsMCwuODcpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LWFjY2VudCAubWF0LW1kYy1zZWxlY3QtYXJyb3d7Y29sb3I6cmdiYSgyNTUsMTUyLDAsLjg3KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkLm1hdC13YXJuIC5tYXQtbWRjLXNlbGVjdC1hcnJvd3tjb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuODcpfS5tYXQtbWRjLWZvcm0tZmllbGQgLm1hdC1tZGMtc2VsZWN0Lm1hdC1tZGMtc2VsZWN0LWludmFsaWQgLm1hdC1tZGMtc2VsZWN0LWFycm93e2NvbG9yOnJnYmEoMjQ0LDY3LDU0LC44Nyl9Lm1hdC1tZGMtZm9ybS1maWVsZCAubWF0LW1kYy1zZWxlY3QubWF0LW1kYy1zZWxlY3QtZGlzYWJsZWQgLm1hdC1tZGMtc2VsZWN0LWFycm93e2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWRjLW1lbnUtc3VyZmFjZXtib3gtc2hhZG93OjBweCA1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggOHB4IDEwcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAzcHggMTRweCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy10aGVtZS1zdXJmYWNlLCAjZmZmKTtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgIzAwMCl9Lm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1wcmltYXJ5LW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC44NykpfS5tZGMtbGlzdC1pdGVtX19zZWNvbmRhcnktdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1zZWNvbmRhcnktb24tYmFja2dyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjU0KSl9Lm1kYy1saXN0LWl0ZW1fX292ZXJsaW5lLXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtaGludC1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuMzgpKX0ubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LC5tZGMtbGlzdC1pdGVtLS13aXRoLXRyYWlsaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX2VuZHtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHJhaWxpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fZW5ke2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LWljb24tb24tYmFja2dyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjM4KSl9Lm1kYy1saXN0LWl0ZW1fX2VuZHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1oaW50LW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC4zOCkpfS5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19jb250ZW50LC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fZW5ke29wYWNpdHk6MC4zOH0ubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgIzAwMCl9Lm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19zZWNvbmRhcnktdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgIzAwMCl9Lm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19vdmVybGluZS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQubWRjLWxpc3QtaXRlbS0td2l0aC10cmFpbGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19lbmR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZC5tZGMtbGlzdC1pdGVtLS13aXRoLXRyYWlsaW5nLW1ldGEgLm1kYy1saXN0LWl0ZW1fX2VuZHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgIzAwMCl9Lm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHQsLm1kYy1saXN0LWl0ZW0tLWFjdGl2YXRlZCAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1wcmltYXJ5LCAjZjU3YzAwKX0ubWRjLWxpc3QtaXRlbS0tc2VsZWN0ZWQubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LC5tZGMtbGlzdC1pdGVtLS1hY3RpdmF0ZWQubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1wcmltYXJ5LCAjZjU3YzAwKX0ubWRjLWRlcHJlY2F0ZWQtbGlzdC1ncm91cF9fc3ViaGVhZGVye2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LXByaW1hcnktb24tYmFja2dyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjg3KSl9Lm1kYy1saXN0LWRpdmlkZXI6OmFmdGVye2JvcmRlci1ib3R0b20tY29sb3I6d2hpdGV9Lm1kYy1saXN0LWRpdmlkZXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtbWRjLWRpYWxvZy1jb250YWluZXJ7LS1tZGMtZGlhbG9nLWNvbnRhaW5lci1jb2xvcjp3aGl0ZTstLW1kYy1kaWFsb2ctd2l0aC1kaXZpZGVyLWRpdmlkZXItY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEyKTstLW1kYy1kaWFsb2ctc3ViaGVhZC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuODcpOy0tbWRjLWRpYWxvZy1zdXBwb3J0aW5nLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjYpfS5tYXQtbWRjLXN0YW5kYXJkLWNoaXB7LS1tZGMtY2hpcC1lbGV2YXRlZC1jb250YWluZXItY29sb3I6I2UwZTBlMDstLW1kYy1jaGlwLWVsZXZhdGVkLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvcjojZTBlMGUwOy0tbWRjLWNoaXAtbGFiZWwtdGV4dC1jb2xvcjojMjEyMTIxOy0tbWRjLWNoaXAtZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjojMjEyMTIxOy0tbWRjLWNoaXAtd2l0aC1pY29uLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1jaGlwLXdpdGgtaWNvbi1kaXNhYmxlZC1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtY2hpcC13aXRoLXRyYWlsaW5nLWljb24tZGlzYWJsZWQtdHJhaWxpbmctaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLWNoaXAtd2l0aC10cmFpbGluZy1pY29uLXRyYWlsaW5nLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1jaGlwLXdpdGgtaWNvbi1zZWxlY3RlZC1pY29uLWNvbG9yOiMyMTIxMjF9Lm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tYXQtcHJpbWFyeS5tYXQtbWRjLWNoaXAtc2VsZWN0ZWQsLm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tYXQtcHJpbWFyeS5tYXQtbWRjLWNoaXAtaGlnaGxpZ2h0ZWR7LS1tZGMtY2hpcC1lbGV2YXRlZC1jb250YWluZXItY29sb3I6I2Y1N2MwMDstLW1kYy1jaGlwLWVsZXZhdGVkLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvcjojZjU3YzAwOy0tbWRjLWNoaXAtbGFiZWwtdGV4dC1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLWljb24taWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtaWNvbi1kaXNhYmxlZC1pY29uLWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC10cmFpbGluZy1pY29uLWRpc2FibGVkLXRyYWlsaW5nLWljb24tY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLXRyYWlsaW5nLWljb24tdHJhaWxpbmctaWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtaWNvbi1zZWxlY3RlZC1pY29uLWNvbG9yOndoaXRlfS5tYXQtbWRjLXN0YW5kYXJkLWNoaXAubWF0LWFjY2VudC5tYXQtbWRjLWNoaXAtc2VsZWN0ZWQsLm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tYXQtYWNjZW50Lm1hdC1tZGMtY2hpcC1oaWdobGlnaHRlZHstLW1kYy1jaGlwLWVsZXZhdGVkLWNvbnRhaW5lci1jb2xvcjojZmY5ODAwOy0tbWRjLWNoaXAtZWxldmF0ZWQtZGlzYWJsZWQtY29udGFpbmVyLWNvbG9yOiNmZjk4MDA7LS1tZGMtY2hpcC1sYWJlbC10ZXh0LWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtaWNvbi1pY29uLWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC1pY29uLWRpc2FibGVkLWljb24tY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLXRyYWlsaW5nLWljb24tZGlzYWJsZWQtdHJhaWxpbmctaWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtdHJhaWxpbmctaWNvbi10cmFpbGluZy1pY29uLWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC1pY29uLXNlbGVjdGVkLWljb24tY29sb3I6d2hpdGV9Lm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tYXQtd2Fybi5tYXQtbWRjLWNoaXAtc2VsZWN0ZWQsLm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tYXQtd2Fybi5tYXQtbWRjLWNoaXAtaGlnaGxpZ2h0ZWR7LS1tZGMtY2hpcC1lbGV2YXRlZC1jb250YWluZXItY29sb3I6I2Y0NDMzNjstLW1kYy1jaGlwLWVsZXZhdGVkLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvcjojZjQ0MzM2Oy0tbWRjLWNoaXAtbGFiZWwtdGV4dC1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLWljb24taWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtaWNvbi1kaXNhYmxlZC1pY29uLWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC10cmFpbGluZy1pY29uLWRpc2FibGVkLXRyYWlsaW5nLWljb24tY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLXRyYWlsaW5nLWljb24tdHJhaWxpbmctaWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtaWNvbi1zZWxlY3RlZC1pY29uLWNvbG9yOndoaXRlfS5tYXQtbWRjLWNoaXAtZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kOiMwMDB9Lm1hdC1tZGMtY2hpcHtoZWlnaHQ6MzJweH0ubWF0LW1kYy1zbGlkZS10b2dnbGV7LS1tZGMtc3dpdGNoLWRpc2FibGVkLXNlbGVjdGVkLWhhbmRsZS1jb2xvcjojNDI0MjQyOy0tbWRjLXN3aXRjaC1kaXNhYmxlZC11bnNlbGVjdGVkLWhhbmRsZS1jb2xvcjojNDI0MjQyOy0tbWRjLXN3aXRjaC1kaXNhYmxlZC1zZWxlY3RlZC10cmFjay1jb2xvcjojNDI0MjQyOy0tbWRjLXN3aXRjaC1kaXNhYmxlZC11bnNlbGVjdGVkLXRyYWNrLWNvbG9yOiM0MjQyNDI7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtZm9jdXMtc3RhdGUtbGF5ZXItY29sb3I6IzQyNDI0MjstLW1kYy1zd2l0Y2gtdW5zZWxlY3RlZC1wcmVzc2VkLXN0YXRlLWxheWVyLWNvbG9yOiM0MjQyNDI7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtaG92ZXItc3RhdGUtbGF5ZXItY29sb3I6IzQyNDI0MjstLW1kYy1zd2l0Y2gtdW5zZWxlY3RlZC1mb2N1cy10cmFjay1jb2xvcjojZTBlMGUwOy0tbWRjLXN3aXRjaC11bnNlbGVjdGVkLWhvdmVyLXRyYWNrLWNvbG9yOiNlMGUwZTA7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtcHJlc3NlZC10cmFjay1jb2xvcjojZTBlMGUwOy0tbWRjLXN3aXRjaC11bnNlbGVjdGVkLXRyYWNrLWNvbG9yOiNlMGUwZTA7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtZm9jdXMtaGFuZGxlLWNvbG9yOiMyMTIxMjE7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtaG92ZXItaGFuZGxlLWNvbG9yOiMyMTIxMjE7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtcHJlc3NlZC1oYW5kbGUtY29sb3I6IzIxMjEyMTstLW1kYy1zd2l0Y2gtaGFuZGxlLXN1cmZhY2UtY29sb3I6dmFyKC0tbWRjLXRoZW1lLXN1cmZhY2UsICNmZmYpOy0tbWRjLXN3aXRjaC11bnNlbGVjdGVkLWhhbmRsZS1jb2xvcjojNjE2MTYxOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1pY29uLWNvbG9yOiNmZmY7LS1tZGMtc3dpdGNoLWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6I2ZmZjstLW1kYy1zd2l0Y2gtZGlzYWJsZWQtdW5zZWxlY3RlZC1pY29uLWNvbG9yOiNmZmY7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjojZmZmfS5tYXQtbWRjLXNsaWRlLXRvZ2dsZSAubWRjLWZvcm0tZmllbGR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtcHJpbWFyeS1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuODcpKX0ubWF0LW1kYy1zbGlkZS10b2dnbGUgLm1kYy1zd2l0Y2gtLWRpc2FibGVkK2xhYmVse2NvbG9yOiM3NTc1NzV9Lm1hdC1tZGMtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5ey0tbWRjLXN3aXRjaC1zZWxlY3RlZC1mb2N1cy1zdGF0ZS1sYXllci1jb2xvcjojZmI4YzAwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1oYW5kbGUtY29sb3I6I2ZiOGMwMDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtaG92ZXItc3RhdGUtbGF5ZXItY29sb3I6I2ZiOGMwMDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtcHJlc3NlZC1zdGF0ZS1sYXllci1jb2xvcjojZmI4YzAwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1mb2N1cy1oYW5kbGUtY29sb3I6I2U2NTEwMDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtaG92ZXItaGFuZGxlLWNvbG9yOiNlNjUxMDA7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLXByZXNzZWQtaGFuZGxlLWNvbG9yOiNlNjUxMDA7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWZvY3VzLXRyYWNrLWNvbG9yOiNmZmI3NGQ7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWhvdmVyLXRyYWNrLWNvbG9yOiNmZmI3NGQ7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLXByZXNzZWQtdHJhY2stY29sb3I6I2ZmYjc0ZDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtdHJhY2stY29sb3I6I2ZmYjc0ZH0ubWF0LW1kYy1zbGlkZS10b2dnbGUubWF0LWFjY2VudHstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtZm9jdXMtc3RhdGUtbGF5ZXItY29sb3I6I2ZiOGMwMDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtaGFuZGxlLWNvbG9yOiNmYjhjMDA7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWhvdmVyLXN0YXRlLWxheWVyLWNvbG9yOiNmYjhjMDA7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLXByZXNzZWQtc3RhdGUtbGF5ZXItY29sb3I6I2ZiOGMwMDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtZm9jdXMtaGFuZGxlLWNvbG9yOiNlNjUxMDA7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWhvdmVyLWhhbmRsZS1jb2xvcjojZTY1MTAwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1wcmVzc2VkLWhhbmRsZS1jb2xvcjojZTY1MTAwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1mb2N1cy10cmFjay1jb2xvcjojZmZiNzRkOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1ob3Zlci10cmFjay1jb2xvcjojZmZiNzRkOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1wcmVzc2VkLXRyYWNrLWNvbG9yOiNmZmI3NGQ7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLXRyYWNrLWNvbG9yOiNmZmI3NGR9Lm1hdC1tZGMtc2xpZGUtdG9nZ2xlLm1hdC13YXJuey0tbWRjLXN3aXRjaC1zZWxlY3RlZC1mb2N1cy1zdGF0ZS1sYXllci1jb2xvcjojZTUzOTM1Oy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1oYW5kbGUtY29sb3I6I2U1MzkzNTstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtaG92ZXItc3RhdGUtbGF5ZXItY29sb3I6I2U1MzkzNTstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtcHJlc3NlZC1zdGF0ZS1sYXllci1jb2xvcjojZTUzOTM1Oy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1mb2N1cy1oYW5kbGUtY29sb3I6I2I3MWMxYzstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtaG92ZXItaGFuZGxlLWNvbG9yOiNiNzFjMWM7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLXByZXNzZWQtaGFuZGxlLWNvbG9yOiNiNzFjMWM7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWZvY3VzLXRyYWNrLWNvbG9yOiNlNTczNzM7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWhvdmVyLXRyYWNrLWNvbG9yOiNlNTczNzM7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLXByZXNzZWQtdHJhY2stY29sb3I6I2U1NzM3MzstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtdHJhY2stY29sb3I6I2U1NzM3M30ubWF0LW1kYy1zbGlkZS10b2dnbGV7LS1tZGMtc3dpdGNoLXN0YXRlLWxheWVyLXNpemU6NDhweH0ubWF0LW1kYy1yYWRpby1idXR0b24gLm1kYy1mb3JtLWZpZWxke2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LXByaW1hcnktb24tYmFja2dyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjg3KSl9Lm1hdC1tZGMtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWRjLXJhZGlvLWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6IzAwMDstLW1kYy1yYWRpby1kaXNhYmxlZC11bnNlbGVjdGVkLWljb24tY29sb3I6IzAwMDstLW1kYy1yYWRpby11bnNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1yYWRpby11bnNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1yYWRpby11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1yYWRpby11bnNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2Y1N2MwMDstLW1kYy1yYWRpby1zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNmNTdjMDA7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtaWNvbi1jb2xvcjojZjU3YzAwOy0tbWRjLXJhZGlvLXNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjojZjU3YzAwOy0tbWF0LW1kYy1yYWRpby1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLXJhZGlvLWNoZWNrZWQtcmlwcGxlLWNvbG9yOiAjZjU3YzAwfS5tYXQtbWRjLXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWRjLXJhZGlvLS1kaXNhYmxlZCtsYWJlbHtjb2xvcjojNzU3NTc1fS5tYXQtbWRjLXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWRjLXJhZGlvLWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6IzAwMDstLW1kYy1yYWRpby1kaXNhYmxlZC11bnNlbGVjdGVkLWljb24tY29sb3I6IzAwMDstLW1kYy1yYWRpby11bnNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1yYWRpby11bnNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1yYWRpby11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1yYWRpby11bnNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2ZmOTgwMDstLW1kYy1yYWRpby1zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNmZjk4MDA7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtaWNvbi1jb2xvcjojZmY5ODAwOy0tbWRjLXJhZGlvLXNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjojZmY5ODAwOy0tbWF0LW1kYy1yYWRpby1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLXJhZGlvLWNoZWNrZWQtcmlwcGxlLWNvbG9yOiAjZmY5ODAwfS5tYXQtbWRjLXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50IC5tZGMtcmFkaW8tLWRpc2FibGVkK2xhYmVse2NvbG9yOiM3NTc1NzV9Lm1hdC1tZGMtcmFkaW8tYnV0dG9uLm1hdC13YXJuey0tbWRjLXJhZGlvLWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6IzAwMDstLW1kYy1yYWRpby1kaXNhYmxlZC11bnNlbGVjdGVkLWljb24tY29sb3I6IzAwMDstLW1kYy1yYWRpby11bnNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1yYWRpby11bnNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1yYWRpby11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1yYWRpby11bnNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1yYWRpby1zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLXJhZGlvLXNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWF0LW1kYy1yYWRpby1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLXJhZGlvLWNoZWNrZWQtcmlwcGxlLWNvbG9yOiAjZjQ0MzM2fS5tYXQtbWRjLXJhZGlvLWJ1dHRvbi5tYXQtd2FybiAubWRjLXJhZGlvLS1kaXNhYmxlZCtsYWJlbHtjb2xvcjojNzU3NTc1fS5tYXQtbWRjLXJhZGlvLWJ1dHRvbiAubWRjLXJhZGlve3BhZGRpbmc6Y2FsYygoNDBweCAtIDIwcHgpIC8gMil9Lm1hdC1tZGMtcmFkaW8tYnV0dG9uIC5tZGMtcmFkaW8gLm1kYy1yYWRpb19fYmFja2dyb3VuZDo6YmVmb3Jle3RvcDpjYWxjKC0xICogKDQwcHggLSAyMHB4KSAvIDIpO2xlZnQ6Y2FsYygtMSAqICg0MHB4IC0gMjBweCkgLyAyKTt3aWR0aDo0MHB4O2hlaWdodDo0MHB4fS5tYXQtbWRjLXJhZGlvLWJ1dHRvbiAubWRjLXJhZGlvIC5tZGMtcmFkaW9fX25hdGl2ZS1jb250cm9se3RvcDpjYWxjKCg0MHB4IC0gNDBweCkgLyAyKTtyaWdodDpjYWxjKCg0MHB4IC0gNDBweCkgLyAyKTtsZWZ0OmNhbGMoKDQwcHggLSA0MHB4KSAvIDIpO3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHh9Lm1hdC1tZGMtc2xpZGVyey0tbWRjLXNsaWRlci1sYWJlbC1jb250YWluZXItY29sb3I6YmxhY2s7LS1tZGMtc2xpZGVyLWxhYmVsLWxhYmVsLXRleHQtY29sb3I6d2hpdGU7LS1tZGMtc2xpZGVyLWRpc2FibGVkLWhhbmRsZS1jb2xvcjojMDAwOy0tbWRjLXNsaWRlci1kaXNhYmxlZC1hY3RpdmUtdHJhY2stY29sb3I6IzAwMDstLW1kYy1zbGlkZXItZGlzYWJsZWQtaW5hY3RpdmUtdHJhY2stY29sb3I6IzAwMDstLW1kYy1zbGlkZXItd2l0aC10aWNrLW1hcmtzLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvcjojMDAwOy0tbWF0LW1kYy1zbGlkZXItdmFsdWUtaW5kaWNhdG9yLW9wYWNpdHk6IDAuNn0ubWF0LW1kYy1zbGlkZXIubWF0LXByaW1hcnl7LS1tZGMtc2xpZGVyLWhhbmRsZS1jb2xvcjojZjU3YzAwOy0tbWRjLXNsaWRlci1mb2N1cy1oYW5kbGUtY29sb3I6I2Y1N2MwMDstLW1kYy1zbGlkZXItaG92ZXItaGFuZGxlLWNvbG9yOiNmNTdjMDA7LS1tZGMtc2xpZGVyLWFjdGl2ZS10cmFjay1jb2xvcjojZjU3YzAwOy0tbWRjLXNsaWRlci1pbmFjdGl2ZS10cmFjay1jb2xvcjojZjU3YzAwOy0tbWRjLXNsaWRlci13aXRoLXRpY2stbWFya3MtYWN0aXZlLWNvbnRhaW5lci1jb2xvcjojMDAwOy0tbWRjLXNsaWRlci13aXRoLXRpY2stbWFya3MtaW5hY3RpdmUtY29udGFpbmVyLWNvbG9yOiNmNTdjMDA7LS1tYXQtbWRjLXNsaWRlci1yaXBwbGUtY29sb3I6ICNmNTdjMDA7LS1tYXQtbWRjLXNsaWRlci1ob3Zlci1yaXBwbGUtY29sb3I6IHJnYmEoMjQ1LCAxMjQsIDAsIDAuMDUpOy0tbWF0LW1kYy1zbGlkZXItZm9jdXMtcmlwcGxlLWNvbG9yOiByZ2JhKDI0NSwgMTI0LCAwLCAwLjIpfS5tYXQtbWRjLXNsaWRlci5tYXQtYWNjZW50ey0tbWRjLXNsaWRlci1oYW5kbGUtY29sb3I6I2ZmOTgwMDstLW1kYy1zbGlkZXItZm9jdXMtaGFuZGxlLWNvbG9yOiNmZjk4MDA7LS1tZGMtc2xpZGVyLWhvdmVyLWhhbmRsZS1jb2xvcjojZmY5ODAwOy0tbWRjLXNsaWRlci1hY3RpdmUtdHJhY2stY29sb3I6I2ZmOTgwMDstLW1kYy1zbGlkZXItaW5hY3RpdmUtdHJhY2stY29sb3I6I2ZmOTgwMDstLW1kYy1zbGlkZXItd2l0aC10aWNrLW1hcmtzLWFjdGl2ZS1jb250YWluZXItY29sb3I6IzAwMDstLW1kYy1zbGlkZXItd2l0aC10aWNrLW1hcmtzLWluYWN0aXZlLWNvbnRhaW5lci1jb2xvcjojZmY5ODAwOy0tbWF0LW1kYy1zbGlkZXItcmlwcGxlLWNvbG9yOiAjZmY5ODAwOy0tbWF0LW1kYy1zbGlkZXItaG92ZXItcmlwcGxlLWNvbG9yOiByZ2JhKDI1NSwgMTUyLCAwLCAwLjA1KTstLW1hdC1tZGMtc2xpZGVyLWZvY3VzLXJpcHBsZS1jb2xvcjogcmdiYSgyNTUsIDE1MiwgMCwgMC4yKX0ubWF0LW1kYy1zbGlkZXIubWF0LXdhcm57LS1tZGMtc2xpZGVyLWhhbmRsZS1jb2xvcjojZjQ0MzM2Oy0tbWRjLXNsaWRlci1mb2N1cy1oYW5kbGUtY29sb3I6I2Y0NDMzNjstLW1kYy1zbGlkZXItaG92ZXItaGFuZGxlLWNvbG9yOiNmNDQzMzY7LS1tZGMtc2xpZGVyLWFjdGl2ZS10cmFjay1jb2xvcjojZjQ0MzM2Oy0tbWRjLXNsaWRlci1pbmFjdGl2ZS10cmFjay1jb2xvcjojZjQ0MzM2Oy0tbWRjLXNsaWRlci13aXRoLXRpY2stbWFya3MtYWN0aXZlLWNvbnRhaW5lci1jb2xvcjojZmZmOy0tbWRjLXNsaWRlci13aXRoLXRpY2stbWFya3MtaW5hY3RpdmUtY29udGFpbmVyLWNvbG9yOiNmNDQzMzY7LS1tYXQtbWRjLXNsaWRlci1yaXBwbGUtY29sb3I6ICNmNDQzMzY7LS1tYXQtbWRjLXNsaWRlci1ob3Zlci1yaXBwbGUtY29sb3I6IHJnYmEoMjQ0LCA2NywgNTQsIDAuMDUpOy0tbWF0LW1kYy1zbGlkZXItZm9jdXMtcmlwcGxlLWNvbG9yOiByZ2JhKDI0NCwgNjcsIDU0LCAwLjIpfS5tZGMtbWVudS1zdXJmYWNle2JveC1zaGFkb3c6MHB4IDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLXRoZW1lLXN1cmZhY2UsICNmZmYpO2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LXByaW1hcnktb24tYmFja2dyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjg3KSl9Lm1kYy1saXN0LWl0ZW1fX3NlY29uZGFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LXNlY29uZGFyeS1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuNTQpKX0ubWRjLWxpc3QtaXRlbV9fb3ZlcmxpbmUtdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1oaW50LW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC4zOCkpfS5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHJhaWxpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fZW5ke2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydCwubWRjLWxpc3QtaXRlbS0td2l0aC10cmFpbGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19lbmR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtaWNvbi1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuMzgpKX0ubWRjLWxpc3QtaXRlbV9fZW5ke2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LWhpbnQtb24tYmFja2dyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjM4KSl9Lm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19zdGFydCwubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX2NvbnRlbnQsLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19lbmR7b3BhY2l0eTowLjM4fS5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX3NlY29uZGFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX292ZXJsaW5lLXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZC5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZC5tZGMtbGlzdC1pdGVtLS13aXRoLXRyYWlsaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX2VuZHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgIzAwMCl9Lm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHJhaWxpbmctbWV0YSAubWRjLWxpc3QtaXRlbV9fZW5ke2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbS0tc2VsZWN0ZWQgLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dCwubWRjLWxpc3QtaXRlbS0tYWN0aXZhdGVkIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXByaW1hcnksICNmNTdjMDApfS5tZGMtbGlzdC1pdGVtLS1zZWxlY3RlZC5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1kYy1saXN0LWl0ZW0tLWFjdGl2YXRlZC5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXByaW1hcnksICNmNTdjMDApfS5tZGMtZGVwcmVjYXRlZC1saXN0LWdyb3VwX19zdWJoZWFkZXJ7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtcHJpbWFyeS1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuODcpKX0ubWRjLWxpc3QtZGl2aWRlcjo6YWZ0ZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp3aGl0ZX0ubWRjLWxpc3QtZGl2aWRlcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1tZGMtbWVudS1pdGVtW2Rpc2FibGVkXSwubWF0LW1kYy1tZW51LWl0ZW1bZGlzYWJsZWRdIC5tYXQtbWRjLW1lbnUtc3VibWVudS1pY29uLC5tYXQtbWRjLW1lbnUtaXRlbVtkaXNhYmxlZF0gLm1hdC1pY29uLW5vLWNvbG9ye2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LWRpc2FibGVkLW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC4zOCkpfS5tYXQtbWRjLW1lbnUtaXRlbSAubWF0LWljb24tbm8tY29sb3IsLm1hdC1tZGMtbWVudS1zdWJtZW51LWljb257Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtcHJpbWFyeS1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuODcpKX0ubWF0LW1kYy1tZW51LWl0ZW06aG92ZXI6bm90KFtkaXNhYmxlZF0pLC5tYXQtbWRjLW1lbnUtaXRlbS5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdChbZGlzYWJsZWRdKSwubWF0LW1kYy1tZW51LWl0ZW0uY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KFtkaXNhYmxlZF0pLC5tYXQtbWRjLW1lbnUtaXRlbS1oaWdobGlnaHRlZDpub3QoW2Rpc2FibGVkXSl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1tZGMtbGlzdC1iYXNley0tbWRjLWxpc3QtbGlzdC1pdGVtLWxhYmVsLXRleHQtY29sb3I6IzIxMjEyMTstLW1kYy1saXN0LWxpc3QtaXRlbS1zdXBwb3J0aW5nLXRleHQtY29sb3I6IzYxNjE2MTstLW1kYy1saXN0LWxpc3QtaXRlbS1sZWFkaW5nLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1saXN0LWxpc3QtaXRlbS10cmFpbGluZy1zdXBwb3J0aW5nLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1saXN0LWxpc3QtaXRlbS10cmFpbGluZy1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtbGlzdC1saXN0LWl0ZW0tc2VsZWN0ZWQtdHJhaWxpbmctaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWxpc3QtbGlzdC1pdGVtLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6YmxhY2s7LS1tZGMtbGlzdC1saXN0LWl0ZW0tZGlzYWJsZWQtbGVhZGluZy1pY29uLWNvbG9yOmJsYWNrOy0tbWRjLWxpc3QtbGlzdC1pdGVtLWRpc2FibGVkLXRyYWlsaW5nLWljb24tY29sb3I6YmxhY2s7LS1tZGMtbGlzdC1saXN0LWl0ZW0taG92ZXItbGFiZWwtdGV4dC1jb2xvcjojMjEyMTIxOy0tbWRjLWxpc3QtbGlzdC1pdGVtLWhvdmVyLWxlYWRpbmctaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWxpc3QtbGlzdC1pdGVtLWhvdmVyLXRyYWlsaW5nLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1saXN0LWxpc3QtaXRlbS1mb2N1cy1sYWJlbC10ZXh0LWNvbG9yOiMyMTIxMjE7LS1tZGMtbGlzdC1saXN0LWl0ZW0taG92ZXItc3RhdGUtbGF5ZXItY29sb3I6YmxhY2s7LS1tZGMtbGlzdC1saXN0LWl0ZW0taG92ZXItc3RhdGUtbGF5ZXItb3BhY2l0eTowLjA0Oy0tbWRjLWxpc3QtbGlzdC1pdGVtLWZvY3VzLXN0YXRlLWxheWVyLWNvbG9yOmJsYWNrOy0tbWRjLWxpc3QtbGlzdC1pdGVtLWZvY3VzLXN0YXRlLWxheWVyLW9wYWNpdHk6MC4xMn0ubWF0LW1kYy1saXN0LW9wdGlvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1hdC1tZGMtbGlzdC1vcHRpb24gLm1kYy1saXN0LWl0ZW1fX2VuZHstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1jaGVja21hcmstY29sb3I6IzAwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiNmNTdjMDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojZjU3YzAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWljb24tY29sb3I6I2Y1N2MwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6I2Y1N2MwMDstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1jaGVja2JveC1kaXNhYmxlZC1zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtY2hlY2tib3gtZGlzYWJsZWQtdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KX0ubWF0LW1kYy1saXN0LW9wdGlvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1hdC1tZGMtbGlzdC1vcHRpb24gLm1kYy1saXN0LWl0ZW1fX2VuZHstLW1kYy1yYWRpby1kaXNhYmxlZC1zZWxlY3RlZC1pY29uLWNvbG9yOiMwMDA7LS1tZGMtcmFkaW8tZGlzYWJsZWQtdW5zZWxlY3RlZC1pY29uLWNvbG9yOiMwMDA7LS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1yYWRpby1zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiNmNTdjMDA7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojZjU3YzAwOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWljb24tY29sb3I6I2Y1N2MwMDstLW1kYy1yYWRpby1zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6I2Y1N2MwMDstLW1hdC1tZGMtcmFkaW8tcmlwcGxlLWNvbG9yOiAjMDAwOy0tbWF0LW1kYy1yYWRpby1jaGVja2VkLXJpcHBsZS1jb2xvcjogI2Y1N2MwMH0ubWF0LW1kYy1saXN0LW9wdGlvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnQgLm1kYy1yYWRpby0tZGlzYWJsZWQrbGFiZWwsLm1hdC1tZGMtbGlzdC1vcHRpb24gLm1kYy1saXN0LWl0ZW1fX2VuZCAubWRjLXJhZGlvLS1kaXNhYmxlZCtsYWJlbHtjb2xvcjojNzU3NTc1fS5tYXQtbWRjLWxpc3Qtb3B0aW9uLm1hdC1hY2NlbnQgLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LC5tYXQtbWRjLWxpc3Qtb3B0aW9uLm1hdC1hY2NlbnQgLm1kYy1saXN0LWl0ZW1fX2VuZHstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1jaGVja21hcmstY29sb3I6IzAwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiNmZjk4MDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojZmY5ODAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWljb24tY29sb3I6I2ZmOTgwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6I2ZmOTgwMDstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1jaGVja2JveC1kaXNhYmxlZC1zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtY2hlY2tib3gtZGlzYWJsZWQtdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KX0ubWF0LW1kYy1saXN0LW9wdGlvbi5tYXQtYWNjZW50IC5tZGMtbGlzdC1pdGVtX19zdGFydCwubWF0LW1kYy1saXN0LW9wdGlvbi5tYXQtYWNjZW50IC5tZGMtbGlzdC1pdGVtX19lbmR7LS1tZGMtcmFkaW8tZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjojMDAwOy0tbWRjLXJhZGlvLWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjojMDAwOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZmY5ODAwOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2ZmOTgwMDstLW1kYy1yYWRpby1zZWxlY3RlZC1pY29uLWNvbG9yOiNmZjk4MDA7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNmZjk4MDA7LS1tYXQtbWRjLXJhZGlvLXJpcHBsZS1jb2xvcjogIzAwMDstLW1hdC1tZGMtcmFkaW8tY2hlY2tlZC1yaXBwbGUtY29sb3I6ICNmZjk4MDB9Lm1hdC1tZGMtbGlzdC1vcHRpb24ubWF0LWFjY2VudCAubWRjLWxpc3QtaXRlbV9fc3RhcnQgLm1kYy1yYWRpby0tZGlzYWJsZWQrbGFiZWwsLm1hdC1tZGMtbGlzdC1vcHRpb24ubWF0LWFjY2VudCAubWRjLWxpc3QtaXRlbV9fZW5kIC5tZGMtcmFkaW8tLWRpc2FibGVkK2xhYmVse2NvbG9yOiM3NTc1NzV9Lm1hdC1tZGMtbGlzdC1vcHRpb24ubWF0LXdhcm4gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LC5tYXQtbWRjLWxpc3Qtb3B0aW9uLm1hdC13YXJuIC5tZGMtbGlzdC1pdGVtX19lbmR7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtY2hlY2ttYXJrLWNvbG9yOiNmZmY7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtY2hlY2tib3gtZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCl9Lm1hdC1tZGMtbGlzdC1vcHRpb24ubWF0LXdhcm4gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LC5tYXQtbWRjLWxpc3Qtb3B0aW9uLm1hdC13YXJuIC5tZGMtbGlzdC1pdGVtX19lbmR7LS1tZGMtcmFkaW8tZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjojMDAwOy0tbWRjLXJhZGlvLWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjojMDAwOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLXJhZGlvLXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1yYWRpby1zZWxlY3RlZC1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNmNDQzMzY7LS1tYXQtbWRjLXJhZGlvLXJpcHBsZS1jb2xvcjogIzAwMDstLW1hdC1tZGMtcmFkaW8tY2hlY2tlZC1yaXBwbGUtY29sb3I6ICNmNDQzMzZ9Lm1hdC1tZGMtbGlzdC1vcHRpb24ubWF0LXdhcm4gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0IC5tZGMtcmFkaW8tLWRpc2FibGVkK2xhYmVsLC5tYXQtbWRjLWxpc3Qtb3B0aW9uLm1hdC13YXJuIC5tZGMtbGlzdC1pdGVtX19lbmQgLm1kYy1yYWRpby0tZGlzYWJsZWQrbGFiZWx7Y29sb3I6Izc1NzU3NX0ubWF0LW1kYy1saXN0LWJhc2UubWF0LW1kYy1saXN0LWJhc2UgLm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHQsLm1hdC1tZGMtbGlzdC1iYXNlLm1hdC1tZGMtbGlzdC1iYXNlIC5tZGMtbGlzdC1pdGVtLS1hY3RpdmF0ZWQgLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dHtjb2xvcjojZjU3YzAwfS5tYXQtbWRjLWxpc3QtYmFzZS5tYXQtbWRjLWxpc3QtYmFzZSAubWRjLWxpc3QtaXRlbS0tc2VsZWN0ZWQubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LC5tYXQtbWRjLWxpc3QtYmFzZS5tYXQtbWRjLWxpc3QtYmFzZSAubWRjLWxpc3QtaXRlbS0tYWN0aXZhdGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydHtjb2xvcjojZjU3YzAwfS5tYXQtbWRjLWxpc3QtYmFzZSAubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LC5tYXQtbWRjLWxpc3QtYmFzZSAubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX2NvbnRlbnQsLm1hdC1tZGMtbGlzdC1iYXNlIC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fZW5ke29wYWNpdHk6MX0ubWF0LW1kYy1saXN0LWJhc2V7LS1tZGMtbGlzdC1saXN0LWl0ZW0tb25lLWxpbmUtY29udGFpbmVyLWhlaWdodDo0OHB4Oy0tbWRjLWxpc3QtbGlzdC1pdGVtLXR3by1saW5lLWNvbnRhaW5lci1oZWlnaHQ6NjRweDstLW1kYy1saXN0LWxpc3QtaXRlbS10aHJlZS1saW5lLWNvbnRhaW5lci1oZWlnaHQ6ODhweH0ubWF0LW1kYy1saXN0LWl0ZW0ubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWF2YXRhci5tZGMtbGlzdC1pdGVtLS13aXRoLW9uZS1saW5lLC5tYXQtbWRjLWxpc3QtaXRlbS5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctY2hlY2tib3gubWRjLWxpc3QtaXRlbS0td2l0aC1vbmUtbGluZSwubWF0LW1kYy1saXN0LWl0ZW0ubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24ubWRjLWxpc3QtaXRlbS0td2l0aC1vbmUtbGluZXtoZWlnaHQ6NTZweH0ubWF0LW1kYy1saXN0LWl0ZW0ubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWF2YXRhci5tZGMtbGlzdC1pdGVtLS13aXRoLXR3by1saW5lcywubWF0LW1kYy1saXN0LWl0ZW0ubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWNoZWNrYm94Lm1kYy1saXN0LWl0ZW0tLXdpdGgtdHdvLWxpbmVzLC5tYXQtbWRjLWxpc3QtaXRlbS5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbi5tZGMtbGlzdC1pdGVtLS13aXRoLXR3by1saW5lc3toZWlnaHQ6NzJweH0ubWF0LW1kYy1wYWdpbmF0b3J7YmFja2dyb3VuZDojZmZmO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LW1kYy1wYWdpbmF0b3ItaWNvbntmaWxsOnJnYmEoMCwwLDAsLjU0KX0ubWF0LW1kYy1wYWdpbmF0b3ItZGVjcmVtZW50LC5tYXQtbWRjLXBhZ2luYXRvci1pbmNyZW1lbnR7Ym9yZGVyLXRvcDoycHggc29saWQgcmdiYSgwLDAsMCwuNTQpO2JvcmRlci1yaWdodDoycHggc29saWQgcmdiYSgwLDAsMCwuNTQpfS5tYXQtbWRjLXBhZ2luYXRvci1maXJzdCwubWF0LW1kYy1wYWdpbmF0b3ItbGFzdHtib3JkZXItdG9wOjJweCBzb2xpZCByZ2JhKDAsMCwwLC41NCl9Lm1hdC1tZGMtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtbWRjLXBhZ2luYXRvci1kZWNyZW1lbnQsLm1hdC1tZGMtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtbWRjLXBhZ2luYXRvci1pbmNyZW1lbnQsLm1hdC1tZGMtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtbWRjLXBhZ2luYXRvci1maXJzdCwubWF0LW1kYy1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1tZGMtcGFnaW5hdG9yLWxhc3R7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LW1kYy1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1tZGMtcGFnaW5hdG9yLWljb257ZmlsbDpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1tZGMtcGFnaW5hdG9yIC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXh7bWluLWhlaWdodDo0MHB4fS5tYXQtbWRjLXBhZ2luYXRvciAubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXIgLm1hdC1tZGMtZm9ybS1maWVsZC1mbGV4IC5tYXQtbWRjLWZsb2F0aW5nLWxhYmVse3RvcDoyMHB4fS5tYXQtbWRjLXBhZ2luYXRvciAubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXIubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lLS11cGdyYWRlZCAubWRjLWZsb2F0aW5nLWxhYmVsLS1mbG9hdC1hYm92ZXstLW1hdC1tZGMtZm9ybS1maWVsZC1sYWJlbC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoIC0yNi43NXB4KSBzY2FsZSh2YXIoLS1tYXQtbWRjLWZvcm0tZmllbGQtZmxvYXRpbmctbGFiZWwtc2NhbGUsIDAuNzUpKTt0cmFuc2Zvcm06dmFyKC0tbWF0LW1kYy1mb3JtLWZpZWxkLWxhYmVsLXRyYW5zZm9ybSl9Lm1hdC1tZGMtcGFnaW5hdG9yIC5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlci5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1hdC1tZGMtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbWRjLXBhZ2luYXRvciAubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXI6bm90KC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQpIC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXh7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LW1kYy1wYWdpbmF0b3IgLm1kYy10ZXh0LWZpZWxkLS1uby1sYWJlbDpub3QoLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCk6bm90KC5tZGMtdGV4dC1maWVsZC0tdGV4dGFyZWEpIC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXh7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LW1kYy1wYWdpbmF0b3IgLm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVyOm5vdCgubWRjLXRleHQtZmllbGQtLW91dGxpbmVkKSAubWF0LW1kYy1mbG9hdGluZy1sYWJlbHtkaXNwbGF5Om5vbmV9Lm1hdC1tZGMtcGFnaW5hdG9yLWNvbnRhaW5lcnttaW4taGVpZ2h0OjU2cHh9Lm1hdC1tZGMtdGFiLC5tYXQtbWRjLXRhYi1saW5re2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LW1kYy10YWIgLm1kYy10YWJfX3RleHQtbGFiZWwsLm1hdC1tZGMtdGFiLWxpbmsgLm1kYy10YWJfX3RleHQtbGFiZWx7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjYpfS5tYXQtbWRjLXRhYi5tYXQtbWRjLXRhYi1kaXNhYmxlZCAubWRjLXRhYl9fcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtdGFiLm1hdC1tZGMtdGFiLWRpc2FibGVkIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1tZGMtdGFiLWxpbmsubWF0LW1kYy10YWItZGlzYWJsZWQgLm1kYy10YWJfX3JpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLXRhYi1saW5rLm1hdC1tZGMtdGFiLWRpc2FibGVkIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1tZGMtdGFiOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpLm1kYy10YWItLWFjdGl2ZSAubWRjLXRhYl9fdGV4dC1sYWJlbCwubWF0LW1kYy10YWItbGluazpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKS5tZGMtdGFiLS1hY3RpdmUgLm1kYy10YWJfX3RleHQtbGFiZWx7Y29sb3I6I2Y1N2MwMH0ubWF0LW1kYy10YWI6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkgLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50LS11bmRlcmxpbmUsLm1hdC1tZGMtdGFiLWxpbms6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkgLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50LS11bmRlcmxpbmV7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy10YWItaW5kaWNhdG9yLWFjdGl2ZS1pbmRpY2F0b3ItY29sb3IsICNmNTdjMDApfS5tZGMtdGFiX19yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy10YWIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1kYy10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1kYy10YWItbGluayAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0ubWF0LW1kYy10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LW1kYy10YWI6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkubWRjLXRhYi0tYWN0aXZlIC5tZGMtdGFiX190ZXh0LWxhYmVsLC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYi1saW5rOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpLm1kYy10YWItLWFjdGl2ZSAubWRjLXRhYl9fdGV4dC1sYWJlbCwubWF0LW1kYy10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYjpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKS5tZGMtdGFiLS1hY3RpdmUgLm1kYy10YWJfX3RleHQtbGFiZWwsLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LW1kYy10YWItbGluazpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKS5tZGMtdGFiLS1hY3RpdmUgLm1kYy10YWJfX3RleHQtbGFiZWx7Y29sb3I6I2ZmOTgwMH0ubWF0LW1kYy10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LW1kYy10YWI6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkgLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50LS11bmRlcmxpbmUsLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC1tZGMtdGFiLWxpbms6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkgLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50LS11bmRlcmxpbmUsLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LW1kYy10YWI6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkgLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50LS11bmRlcmxpbmUsLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LW1kYy10YWItbGluazpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKSAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLXVuZGVybGluZXtib3JkZXItY29sb3I6dmFyKC0tbWRjLXRhYi1pbmRpY2F0b3ItYWN0aXZlLWluZGljYXRvci1jb2xvciwgI2ZmOTgwMCl9Lm1hdC1tZGMtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1kYy10YWJfX3JpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYi1saW5rIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWRjLXRhYl9fcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LW1kYy10YWIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1kYy10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC1tZGMtdGFiLWxpbmsgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1tZGMtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtbWRjLXRhYjpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKS5tZGMtdGFiLS1hY3RpdmUgLm1kYy10YWJfX3RleHQtbGFiZWwsLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtbWRjLXRhYi1saW5rOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpLm1kYy10YWItLWFjdGl2ZSAubWRjLXRhYl9fdGV4dC1sYWJlbCwubWF0LW1kYy10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LW1kYy10YWI6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkubWRjLXRhYi0tYWN0aXZlIC5tZGMtdGFiX190ZXh0LWxhYmVsLC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtbWRjLXRhYi1saW5rOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpLm1kYy10YWItLWFjdGl2ZSAubWRjLXRhYl9fdGV4dC1sYWJlbHtjb2xvcjojZjQ0MzM2fS5tYXQtbWRjLXRhYi1ncm91cC5tYXQtd2FybiAubWF0LW1kYy10YWI6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkgLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50LS11bmRlcmxpbmUsLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtbWRjLXRhYi1saW5rOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpIC5tZGMtdGFiLWluZGljYXRvcl9fY29udGVudC0tdW5kZXJsaW5lLC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtbWRjLXRhYjpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKSAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLXVuZGVybGluZSwubWF0LW1kYy10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LW1kYy10YWItbGluazpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKSAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLXVuZGVybGluZXtib3JkZXItY29sb3I6dmFyKC0tbWRjLXRhYi1pbmRpY2F0b3ItYWN0aXZlLWluZGljYXRvci1jb2xvciwgI2Y0NDMzNil9Lm1hdC1tZGMtdGFiLWdyb3VwLm1hdC13YXJuIC5tZGMtdGFiX19yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC1tZGMtdGFiIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtd2FybiAubWF0LW1kYy10YWItbGluayAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tZGMtdGFiX19yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LW1kYy10YWIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1kYy10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LW1kYy10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1kYy10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LW1kYy10YWItbGluayAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LW1kYy10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSwubWF0LW1kYy10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5ey0tbWF0LW1kYy10YWItaGVhZGVyLXdpdGgtYmFja2dyb3VuZC1iYWNrZ3JvdW5kLWNvbG9yOiAjZjU3YzAwOy0tbWF0LW1kYy10YWItaGVhZGVyLXdpdGgtYmFja2dyb3VuZC1mb3JlZ3JvdW5kLWNvbG9yOiAjMDAwfS5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQsLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50ey0tbWF0LW1kYy10YWItaGVhZGVyLXdpdGgtYmFja2dyb3VuZC1iYWNrZ3JvdW5kLWNvbG9yOiAjZmY5ODAwOy0tbWF0LW1kYy10YWItaGVhZGVyLXdpdGgtYmFja2dyb3VuZC1mb3JlZ3JvdW5kLWNvbG9yOiAjMDAwfS5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuLC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm57LS1tYXQtbWRjLXRhYi1oZWFkZXItd2l0aC1iYWNrZ3JvdW5kLWJhY2tncm91bmQtY29sb3I6ICNmNDQzMzY7LS1tYXQtbWRjLXRhYi1oZWFkZXItd2l0aC1iYWNrZ3JvdW5kLWZvcmVncm91bmQtY29sb3I6ICNmZmZ9Lm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWF0LW1kYy10YWItaGVhZGVyIC5tZGMtdGFie2hlaWdodDo0OHB4fS5tYXQtbWRjLWNoZWNrYm94IC5tZGMtZm9ybS1maWVsZHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1wcmltYXJ5LW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC44NykpfS5tYXQtbWRjLWNoZWNrYm94IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xKX0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94X19yaXBwbGV7YmFja2dyb3VuZDojMDAwfS5tYXQtbWRjLWNoZWNrYm94Lm1hdC1wcmltYXJ5ey0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWNoZWNrbWFyay1jb2xvcjojMDAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2Y1N2MwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNmNTdjMDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaWNvbi1jb2xvcjojZjU3YzAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjojZjU3YzAwOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1jaGVja2JveC1kaXNhYmxlZC11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpfS5tYXQtbWRjLWNoZWNrYm94Lm1hdC1wcmltYXJ5IC5tZGMtY2hlY2tib3gtLXNlbGVjdGVkfi5tYXQtbWRjLWNoZWNrYm94LXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDUsMTI0LDAsLjEpfS5tYXQtbWRjLWNoZWNrYm94Lm1hdC1wcmltYXJ5IC5tZGMtY2hlY2tib3gtLXNlbGVjdGVkfi5tZGMtY2hlY2tib3hfX3JpcHBsZXtiYWNrZ3JvdW5kOiNmNTdjMDB9Lm1hdC1tZGMtY2hlY2tib3gubWF0LWFjY2VudHstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1jaGVja21hcmstY29sb3I6IzAwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiNmZjk4MDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojZmY5ODAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWljb24tY29sb3I6I2ZmOTgwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6I2ZmOTgwMDstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1jaGVja2JveC1kaXNhYmxlZC1zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtY2hlY2tib3gtZGlzYWJsZWQtdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KX0ubWF0LW1kYy1jaGVja2JveC5tYXQtYWNjZW50IC5tZGMtY2hlY2tib3gtLXNlbGVjdGVkfi5tYXQtbWRjLWNoZWNrYm94LXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTUyLDAsLjEpfS5tYXQtbWRjLWNoZWNrYm94Lm1hdC1hY2NlbnQgLm1kYy1jaGVja2JveC0tc2VsZWN0ZWR+Lm1kYy1jaGVja2JveF9fcmlwcGxle2JhY2tncm91bmQ6I2ZmOTgwMH0ubWF0LW1kYy1jaGVja2JveC5tYXQtd2FybnstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1jaGVja21hcmstY29sb3I6I2ZmZjstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1jaGVja2JveC1kaXNhYmxlZC1zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtY2hlY2tib3gtZGlzYWJsZWQtdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KX0ubWF0LW1kYy1jaGVja2JveC5tYXQtd2FybiAubWRjLWNoZWNrYm94LS1zZWxlY3RlZH4ubWF0LW1kYy1jaGVja2JveC1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4xKX0ubWF0LW1kYy1jaGVja2JveC5tYXQtd2FybiAubWRjLWNoZWNrYm94LS1zZWxlY3RlZH4ubWRjLWNoZWNrYm94X19yaXBwbGV7YmFja2dyb3VuZDojZjQ0MzM2fS5tYXQtbWRjLWNoZWNrYm94LWRpc2FibGVkIGxhYmVse2NvbG9yOiM3NTc1NzV9Lm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveHtwYWRkaW5nOmNhbGMoKHZhcigtLW1kYy1jaGVja2JveC1yaXBwbGUtc2l6ZSwgNDBweCkgLSAxOHB4KSAvIDIpO21hcmdpbjpjYWxjKCh2YXIoLS1tZGMtY2hlY2tib3gtdG91Y2gtdGFyZ2V0LXNpemUsIDQwcHgpIC0gNDBweCkgLyAyKX0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3hfX2JhY2tncm91bmR7dG9wOmNhbGMoKHZhcigtLW1kYy1jaGVja2JveC1yaXBwbGUtc2l6ZSwgNDBweCkgLSAxOHB4KSAvIDIpO2xlZnQ6Y2FsYygodmFyKC0tbWRjLWNoZWNrYm94LXJpcHBsZS1zaXplLCA0MHB4KSAtIDE4cHgpIC8gMil9Lm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbHt0b3A6Y2FsYygoNDBweCAtIHZhcigtLW1kYy1jaGVja2JveC10b3VjaC10YXJnZXQtc2l6ZSwgNDBweCkpIC8gMik7cmlnaHQ6Y2FsYygoNDBweCAtIHZhcigtLW1kYy1jaGVja2JveC10b3VjaC10YXJnZXQtc2l6ZSwgNDBweCkpIC8gMik7bGVmdDpjYWxjKCg0MHB4IC0gdmFyKC0tbWRjLWNoZWNrYm94LXRvdWNoLXRhcmdldC1zaXplLCA0MHB4KSkgLyAyKTt3aWR0aDp2YXIoLS1tZGMtY2hlY2tib3gtdG91Y2gtdGFyZ2V0LXNpemUsIDQwcHgpO2hlaWdodDp2YXIoLS1tZGMtY2hlY2tib3gtdG91Y2gtdGFyZ2V0LXNpemUsIDQwcHgpfS5tYXQtbWRjLWJ1dHRvbi5tYXQtdW50aGVtZWR7LS1tZGMtdGV4dC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfS5tYXQtbWRjLWJ1dHRvbi5tYXQtcHJpbWFyeXstLW1kYy10ZXh0LWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmNTdjMDB9Lm1hdC1tZGMtYnV0dG9uLm1hdC1hY2NlbnR7LS1tZGMtdGV4dC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZmY5ODAwfS5tYXQtbWRjLWJ1dHRvbi5tYXQtd2FybnstLW1kYy10ZXh0LWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmNDQzMzZ9Lm1hdC1tZGMtYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17LS1tZGMtdGV4dC1idXR0b24tZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLXRleHQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KX0ubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbi5tYXQtdW50aGVtZWR7LS1tZGMtZmlsbGVkLWJ1dHRvbi1jb250YWluZXItY29sb3I6I2ZmZjstLW1kYy1maWxsZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6IzAwMH0ubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbi5tYXQtcHJpbWFyeXstLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZjU3YzAwOy0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfS5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC1hY2NlbnR7LS1tZGMtZmlsbGVkLWJ1dHRvbi1jb250YWluZXItY29sb3I6I2ZmOTgwMDstLW1kYy1maWxsZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6IzAwMH0ubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbi5tYXQtd2FybnstLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZjQ0MzM2Oy0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZmZmfS5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17LS1tZGMtZmlsbGVkLWJ1dHRvbi1kaXNhYmxlZC1jb250YWluZXItY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEyKTstLW1kYy1maWxsZWQtYnV0dG9uLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpfS5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LXVudGhlbWVkey0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiNmZmY7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiMwMDB9Lm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeXstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZjU3YzAwOy0tbWRjLXByb3RlY3RlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfS5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LWFjY2VudHstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZmY5ODAwOy0tbWRjLXByb3RlY3RlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfS5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LXdhcm57LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1jb250YWluZXItY29sb3I6I2Y0NDMzNjstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2ZmZn0ubWF0LW1kYy1yYWlzZWQtYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1kaXNhYmxlZC1jb250YWluZXItY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEyKTstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWRjLXByb3RlY3RlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWVsZXZhdGlvbjowfS5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbnstLW1kYy1vdXRsaW5lZC1idXR0b24tb3V0bGluZS1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbi5tYXQtdW50aGVtZWR7LS1tZGMtb3V0bGluZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6IzAwMH0ubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LXByaW1hcnl7LS1tZGMtb3V0bGluZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2Y1N2MwMH0ubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LWFjY2VudHstLW1kYy1vdXRsaW5lZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZmY5ODAwfS5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbi5tYXQtd2FybnstLW1kYy1vdXRsaW5lZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZjQ0MzM2fS5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbltkaXNhYmxlZF1bZGlzYWJsZWRdey0tbWRjLW91dGxpbmVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtb3V0bGluZWQtYnV0dG9uLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1vdXRsaW5lZC1idXR0b24tb3V0bGluZS1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWRjLW91dGxpbmVkLWJ1dHRvbi1kaXNhYmxlZC1vdXRsaW5lLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1tZGMtYnV0dG9uLC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbnstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjMDAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSl9Lm1hdC1tZGMtYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbjpob3ZlciAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZXtvcGFjaXR5Oi4wNH0ubWF0LW1kYy1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjEyfS5tYXQtbWRjLWJ1dHRvbjphY3RpdmUgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uOmFjdGl2ZSAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZXtvcGFjaXR5Oi4xMn0ubWF0LW1kYy1idXR0b24ubWF0LXByaW1hcnksLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmNTdjMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjQ1LCAxMjQsIDAsIDAuMSl9Lm1hdC1tZGMtYnV0dG9uLm1hdC1hY2NlbnQsLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC1hY2NlbnR7LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2ZmOTgwMDstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyNTUsIDE1MiwgMCwgMC4xKX0ubWF0LW1kYy1idXR0b24ubWF0LXdhcm4sLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC13YXJuey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmNDQzMzY7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjQ0LCA2NywgNTQsIDAuMSl9Lm1hdC1tZGMtcmFpc2VkLWJ1dHRvbiwubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbnstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjMDAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSl9Lm1hdC1tZGMtcmFpc2VkLWJ1dHRvbjpob3ZlciAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbjpob3ZlciAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZXtvcGFjaXR5Oi4wNH0ubWF0LW1kYy1yYWlzZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjEyfS5tYXQtbWRjLXJhaXNlZC1idXR0b246YWN0aXZlIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uOmFjdGl2ZSAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZXtvcGFjaXR5Oi4xMn0ubWF0LW1kYy1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKX0ubWF0LW1kYy1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQsLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24ubWF0LWFjY2VudHstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjMDAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSl9Lm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5tYXQtd2FybiwubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbi5tYXQtd2FybnstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjZmZmOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSl9Lm1hdC1tZGMtYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UsLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UsLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2V7aGVpZ2h0OjM2cHh9Lm1hdC1tZGMtaWNvbi1idXR0b257LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogIzAwMDstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEpfS5tYXQtbWRjLWljb24tYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjA0fS5tYXQtbWRjLWljb24tYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtaWNvbi1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMTJ9Lm1hdC1tZGMtaWNvbi1idXR0b246YWN0aXZlIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjEyfS5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmNTdjMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjQ1LCAxMjQsIDAsIDAuMSl9Lm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LWFjY2VudHstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjZmY5ODAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDI1NSwgMTUyLCAwLCAwLjEpfS5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC13YXJuey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmNDQzMzY7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjQ0LCA2NywgNTQsIDAuMSl9Lm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LXByaW1hcnl7LS1tZGMtaWNvbi1idXR0b24taWNvbi1jb2xvcjojZjU3YzAwfS5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1hY2NlbnR7LS1tZGMtaWNvbi1idXR0b24taWNvbi1jb2xvcjojZmY5ODAwfS5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC13YXJuey0tbWRjLWljb24tYnV0dG9uLWljb24tY29sb3I6I2Y0NDMzNn0ubWF0LW1kYy1pY29uLWJ1dHRvbltkaXNhYmxlZF1bZGlzYWJsZWRdey0tbWRjLWljb24tYnV0dG9uLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1pY29uLWJ1dHRvbi1kaXNhYmxlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCl9Lm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZXt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O3BhZGRpbmc6MTJweH0ubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmd7bWF4LWhlaWdodDo0OHB4O21heC13aWR0aDo0OHB4fS5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UubWRjLWljb24tYnV0dG9uLS1yZWR1Y2VkLXNpemUgLm1kYy1pY29uLWJ1dHRvbl9fcmlwcGxle3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7bWFyZ2luLXRvcDo0cHg7bWFyZ2luLWJvdHRvbTo0cHg7bWFyZ2luLXJpZ2h0OjRweDttYXJnaW4tbGVmdDo0cHh9Lm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZS5tZGMtaWNvbi1idXR0b24tLXJlZHVjZWQtc2l6ZSAubWRjLWljb24tYnV0dG9uX19mb2N1cy1yaW5ne21heC1oZWlnaHQ6NDBweDttYXgtd2lkdGg6NDBweH0ubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlIC5tZGMtaWNvbi1idXR0b25fX3RvdWNoe3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7aGVpZ2h0OjQ4cHg7bGVmdDo1MCU7d2lkdGg6NDhweDt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC01MCUpfS5tYXQtbWRjLWZhYiwubWF0LW1kYy1taW5pLWZhYnstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjMDAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSl9Lm1hdC1tZGMtZmFiOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLW1pbmktZmFiOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjA0fS5tYXQtbWRjLWZhYi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLWZhYi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy1taW5pLWZhYi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLW1pbmktZmFiLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjEyfS5tYXQtbWRjLWZhYjphY3RpdmUgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtbWluaS1mYWI6YWN0aXZlIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjEyfS5tYXQtbWRjLWZhYi5tYXQtcHJpbWFyeSwubWF0LW1kYy1taW5pLWZhYi5tYXQtcHJpbWFyeXstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjMDAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSl9Lm1hdC1tZGMtZmFiLm1hdC1hY2NlbnQsLm1hdC1tZGMtbWluaS1mYWIubWF0LWFjY2VudHstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjMDAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSl9Lm1hdC1tZGMtZmFiLm1hdC13YXJuLC5tYXQtbWRjLW1pbmktZmFiLm1hdC13YXJuey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmZmY7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKX0ubWF0LW1kYy1mYWIubWF0LXVudGhlbWVkLC5tYXQtbWRjLW1pbmktZmFiLm1hdC11bnRoZW1lZHstLW1kYy1mYWItY29udGFpbmVyLWNvbG9yOiNmZmY7LS1tZGMtZmFiLWljb24tY29sb3I6IzAwMDstLW1hdC1tZGMtZmFiLWNvbG9yOiAjMDAwfS5tYXQtbWRjLWZhYi5tYXQtcHJpbWFyeSwubWF0LW1kYy1taW5pLWZhYi5tYXQtcHJpbWFyeXstLW1kYy1mYWItY29udGFpbmVyLWNvbG9yOiNmNTdjMDA7LS1tZGMtZmFiLWljb24tY29sb3I6IzAwMDstLW1hdC1tZGMtZmFiLWNvbG9yOiAjMDAwfS5tYXQtbWRjLWZhYi5tYXQtYWNjZW50LC5tYXQtbWRjLW1pbmktZmFiLm1hdC1hY2NlbnR7LS1tZGMtZmFiLWNvbnRhaW5lci1jb2xvcjojZmY5ODAwOy0tbWRjLWZhYi1pY29uLWNvbG9yOiMwMDA7LS1tYXQtbWRjLWZhYi1jb2xvcjogIzAwMH0ubWF0LW1kYy1mYWIubWF0LXdhcm4sLm1hdC1tZGMtbWluaS1mYWIubWF0LXdhcm57LS1tZGMtZmFiLWNvbnRhaW5lci1jb2xvcjojZjQ0MzM2Oy0tbWRjLWZhYi1pY29uLWNvbG9yOiNmZmY7LS1tYXQtbWRjLWZhYi1jb2xvcjogI2ZmZn0ubWF0LW1kYy1mYWJbZGlzYWJsZWRdW2Rpc2FibGVkXSwubWF0LW1kYy1taW5pLWZhYltkaXNhYmxlZF1bZGlzYWJsZWRdey0tbWRjLWZhYi1jb250YWluZXItY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEyKTstLW1kYy1mYWItaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWF0LW1kYy1mYWItY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4zOCl9Lm1hdC1tZGMtc25hY2stYmFyLWNvbnRhaW5lcnstLW1hdC1tZGMtc25hY2stYmFyLWJ1dHRvbi1jb2xvcjogI2ZmOTgwMDstLW1kYy1zbmFja2Jhci1jb250YWluZXItY29sb3I6IzMzMzMzMzstLW1kYy1zbmFja2Jhci1zdXBwb3J0aW5nLXRleHQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjg3KX0ubWRjLWRhdGEtdGFibGV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtc3VyZmFjZSwgI2ZmZik7Ym9yZGVyLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMil9Lm1kYy1kYXRhLXRhYmxlX19yb3d7YmFja2dyb3VuZC1jb2xvcjppbmhlcml0fS5tZGMtZGF0YS10YWJsZV9faGVhZGVyLWNlbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtc3VyZmFjZSwgI2ZmZil9Lm1kYy1kYXRhLXRhYmxlX19yb3ctLXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDUsIDEyNCwgMCwgMC4wNCl9Lm1kYy1kYXRhLXRhYmxlX19wYWdpbmF0aW9uLXJvd3MtcGVyLXBhZ2Utc2VsZWN0LS1vdXRsaW5lZDpub3QoLm1kYy1zZWxlY3QtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZywubWRjLWRhdGEtdGFibGVfX3BhZ2luYXRpb24tcm93cy1wZXItcGFnZS1zZWxlY3QtLW91dGxpbmVkOm5vdCgubWRjLXNlbGVjdC0tZGlzYWJsZWQpIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCwubWRjLWRhdGEtdGFibGVfX3BhZ2luYXRpb24tcm93cy1wZXItcGFnZS1zZWxlY3QtLW91dGxpbmVkOm5vdCgubWRjLXNlbGVjdC0tZGlzYWJsZWQpIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEyKX0ubWRjLWRhdGEtdGFibGVfX2NlbGwsLm1kYy1kYXRhLXRhYmxlX19oZWFkZXItY2VsbHtib3JkZXItYm90dG9tLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMil9Lm1kYy1kYXRhLXRhYmxlX19wYWdpbmF0aW9ue2JvcmRlci10b3AtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEyKX0ubWRjLWRhdGEtdGFibGVfX3Jvdzpub3QoLm1kYy1kYXRhLXRhYmxlX19yb3ctLXNlbGVjdGVkKTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4wNCl9Lm1kYy1kYXRhLXRhYmxlX19oZWFkZXItY2VsbHtjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuODcpfS5tZGMtZGF0YS10YWJsZV9fcGFnaW5hdGlvbi10b3RhbCwubWRjLWRhdGEtdGFibGVfX3BhZ2luYXRpb24tcm93cy1wZXItcGFnZS1sYWJlbCwubWRjLWRhdGEtdGFibGVfX2NlbGx7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjg3KX0ubWF0LW1kYy10YWJsZXtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1tZGMtdGFibGUgLm1kYy1kYXRhLXRhYmxlX19yb3d7aGVpZ2h0OjUycHh9Lm1hdC1tZGMtdGFibGUgLm1kYy1kYXRhLXRhYmxlX19wYWdpbmF0aW9ue21pbi1oZWlnaHQ6NTJweH0ubWF0LW1kYy10YWJsZSAubWRjLWRhdGEtdGFibGVfX2hlYWRlci1yb3d7aGVpZ2h0OjU2cHh9Lm1hdC1tZGMtcHJvZ3Jlc3Mtc3Bpbm5lcnstLW1kYy1jaXJjdWxhci1wcm9ncmVzcy1hY3RpdmUtaW5kaWNhdG9yLWNvbG9yOiNmNTdjMDB9Lm1hdC1tZGMtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtYWNjZW50ey0tbWRjLWNpcmN1bGFyLXByb2dyZXNzLWFjdGl2ZS1pbmRpY2F0b3ItY29sb3I6I2ZmOTgwMH0ubWF0LW1kYy1wcm9ncmVzcy1zcGlubmVyLm1hdC13YXJuey0tbWRjLWNpcmN1bGFyLXByb2dyZXNzLWFjdGl2ZS1pbmRpY2F0b3ItY29sb3I6I2Y0NDMzNn0ubWF0LWJhZGdlLWNvbnRlbnR7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiNmNTdjMDB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJhZGdlLWNvbnRlbnR7b3V0bGluZTpzb2xpZCAxcHg7Ym9yZGVyLXJhZGl1czowfS5tYXQtYmFkZ2UtYWNjZW50IC5tYXQtYmFkZ2UtY29udGVudHtiYWNrZ3JvdW5kOiNmZjk4MDA7Y29sb3I6I2ZmZn0ubWF0LWJhZGdlLXdhcm4gLm1hdC1iYWRnZS1jb250ZW50e2NvbG9yOiNmZmY7YmFja2dyb3VuZDojZjQ0MzM2fS5tYXQtYmFkZ2UtZGlzYWJsZWQgLm1hdC1iYWRnZS1jb250ZW50e2JhY2tncm91bmQ6I2JkYmRiZDtjb2xvcjojNzU3NTc1fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcntib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE2cHggMjRweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSwubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93Om5vbmV9Lm1hdC1idXR0b24tdG9nZ2xle2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LWJ1dHRvbi10b2dnbGUgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmR7Y29sb3I6IzIxMjEyMTtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjojMDAwfS5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZSsubWF0LWJ1dHRvbi10b2dnbGV7Ym9yZGVyLWxlZnQ6c29saWQgMXB4ICNlMGUwZTB9W2Rpcj1ydGxdIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZSsubWF0LWJ1dHRvbi10b2dnbGV7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6c29saWQgMXB4ICNlMGUwZTB9Lm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWJ1dHRvbi10b2dnbGUtdmVydGljYWwgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDpub25lO2JvcmRlci10b3A6c29saWQgMXB4ICNlMGUwZTB9Lm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWR7YmFja2dyb3VuZC1jb2xvcjojZTBlMGUwO2NvbG9yOiM2MTYxNjF9Lm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWQubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZHtjb2xvcjojMjEyMTIxfS5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZHtjb2xvcjpyZ2JhKDAsMCwwLC4yNik7YmFja2dyb3VuZC1jb2xvcjojZWVlfS5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJke2JhY2tncm91bmQ6I2ZmZn0ubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOiNiZGJkYmR9Lm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCwubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZHtib3JkZXI6c29saWQgMXB4ICNlMGUwZTB9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnR7bGluZS1oZWlnaHQ6NDhweH0ubWF0LWNhbGVuZGFyLWFycm93e2ZpbGw6cmdiYSgwLDAsMCwuNTQpfS5tYXQtZGF0ZXBpY2tlci10b2dnbGUsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1jYWxlbmRhci1uZXh0LWJ1dHRvbiwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LWNhbGVuZGFyLXByZXZpb3VzLWJ1dHRvbntjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXItZGl2aWRlcjo6YWZ0ZXJ7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXIsLm1hdC1jYWxlbmRhci1ib2R5LWxhYmVse2NvbG9yOiM2MTYxNjF9Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudCwubWF0LWRhdGUtcmFuZ2UtaW5wdXQtc2VwYXJhdG9ye2NvbG9yOiMyMTIxMjE7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMCl9Lm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Y29sb3I6Izc1NzU3NX0ubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1kYXRlLXJhbmdlLWlucHV0LXNlcGFyYXRvcntjb2xvcjojNzU3NTc1fS5tYXQtY2FsZW5kYXItYm9keS1pbi1wcmV2aWV3e2NvbG9yOnJnYmEoMCwwLDAsLjI0KX0ubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4xOCl9Lm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0NSwxMjQsMCwuMil9Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0OSwxNzEsMCwuMil9Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmUsW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyNDUsIDEyNCwgMCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX0ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmUsW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGxlZnQsIHJnYmEoMjQ1LCAxMjQsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Lm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCwubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZS5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YWZ0ZXJ7YmFja2dyb3VuZDojYThkYWI1fS5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCwubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZDojNDZhMzVlfS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDA7Y29sb3I6I2ZmZn0ubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDUsMTI0LDAsLjQpfS5tYXQtY2FsZW5kYXItYm9keS10b2RheS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCAjZmZmfS5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCksLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDUsMTI0LDAsLjMpfUBtZWRpYShob3ZlcjogaG92ZXIpey5tYXQtY2FsZW5kYXItYm9keS1jZWxsOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQpOmhvdmVyPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NSwxMjQsMCwuMyl9fS5tYXQtZGF0ZXBpY2tlci1jb250ZW50e2JveC1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOiMyMTIxMjF9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDE1MiwwLC4yKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0OSwxNzEsMCwuMil9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjU1LCAxNTIsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmUsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgyNTUsIDE1MiwgMCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZS5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YWZ0ZXJ7YmFja2dyb3VuZDojYThkYWI1fS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQ6IzQ2YTM1ZX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDA7Y29sb3I6I2ZmZn0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuNCl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZn0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCksLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuMyl9QG1lZGlhKGhvdmVyOiBob3Zlcil7Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTUyLDAsLjMpfX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ0LDY3LDU0LC4yKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ5LDE3MSwwLC4yKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI0NCwgNjcsIDU0LCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgyNDQsIDY3LCA1NCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjphZnRlcntiYWNrZ3JvdW5kOiNhOGRhYjV9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kOiM0NmEzNWV9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNjtjb2xvcjojZmZmfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuNCl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuMyl9QG1lZGlhKGhvdmVyOiBob3Zlcil7Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNlbGw6bm90KC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCk6aG92ZXI+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4zKX19Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQtdG91Y2h7Ym94LXNoYWRvdzowcHggMTFweCAxNXB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMjRweCAzOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggOXB4IDQ2cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmV7Y29sb3I6I2Y1N2MwMH0ubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZS5tYXQtYWNjZW50e2NvbG9yOiNmZjk4MDB9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmUubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn0ubWF0LWRhdGUtcmFuZ2UtaW5wdXQtaW5uZXJbZGlzYWJsZWRde2NvbG9yOiM3NTc1NzV9Lm1hdC1jYWxlbmRhci1jb250cm9scyAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNle3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7cGFkZGluZzo4cHh9Lm1hdC1jYWxlbmRhci1jb250cm9scyAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmd7bWF4LWhlaWdodDo0MHB4O21heC13aWR0aDo0MHB4fS5tYXQtY2FsZW5kYXItY29udHJvbHMgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZS5tZGMtaWNvbi1idXR0b24tLXJlZHVjZWQtc2l6ZSAubWRjLWljb24tYnV0dG9uX19yaXBwbGV7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDttYXJnaW4tdG9wOjBweDttYXJnaW4tYm90dG9tOjBweDttYXJnaW4tcmlnaHQ6MHB4O21hcmdpbi1sZWZ0OjBweH0ubWF0LWNhbGVuZGFyLWNvbnRyb2xzIC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UubWRjLWljb24tYnV0dG9uLS1yZWR1Y2VkLXNpemUgLm1kYy1pY29uLWJ1dHRvbl9fZm9jdXMtcmluZ3ttYXgtaGVpZ2h0OjQwcHg7bWF4LXdpZHRoOjQwcHh9Lm1hdC1jYWxlbmRhci1jb250cm9scyAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlIC5tZGMtaWNvbi1idXR0b25fX3RvdWNoe3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7aGVpZ2h0OjQwcHg7bGVmdDo1MCU7d2lkdGg6NDBweDt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC01MCUpfS5tYXQtY2FsZW5kYXItY29udHJvbHMgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSAubWF0LW1kYy1idXR0b24tdG91Y2gtdGFyZ2V0e2Rpc3BsYXk6bm9uZX0ubWF0LWRpdmlkZXJ7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1kaXZpZGVyLXZlcnRpY2Fse2JvcmRlci1yaWdodC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1leHBhbnNpb24tcGFuZWx7YmFja2dyb3VuZDojZmZmO2NvbG9yOiMyMTIxMjF9Lm1hdC1leHBhbnNpb24tcGFuZWw6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtYWN0aW9uLXJvd3tib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWV4cGFuc2lvbi1wYW5lbCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSwubWF0LWV4cGFuc2lvbi1wYW5lbCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pLC5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdCgubWF0LWV4cGFuZGVkKSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6aG92ZXI6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA0KX1AbWVkaWEoaG92ZXI6IG5vbmUpey5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdCgubWF0LWV4cGFuZGVkKTpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpob3ZlcntiYWNrZ3JvdW5kOiNmZmZ9fS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZXtjb2xvcjojMjEyMTIxfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbiwubWF0LWV4cGFuc2lvbi1pbmRpY2F0b3I6OmFmdGVye2NvbG9yOiM2MTYxNjF9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV17Y29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclthcmlhLWRpc2FibGVkPXRydWVdIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZSwubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb257Y29sb3I6aW5oZXJpdH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJ7aGVpZ2h0OjQ4cHh9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLm1hdC1leHBhbmRlZHtoZWlnaHQ6NjRweH0ubWF0LWljb24ubWF0LXByaW1hcnl7Y29sb3I6I2Y1N2MwMH0ubWF0LWljb24ubWF0LWFjY2VudHtjb2xvcjojZmY5ODAwfS5tYXQtaWNvbi5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fS5tYXQtZHJhd2VyLWNvbnRhaW5lcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWRyYXdlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWRyYXdlci5tYXQtZHJhd2VyLXB1c2h7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtZHJhd2VyOm5vdCgubWF0LWRyYXdlci1zaWRlKXtib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE2cHggMjRweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZHJhd2VyLXNpZGV7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1kcmF3ZXItc2lkZS5tYXQtZHJhd2VyLWVuZHtib3JkZXItbGVmdDpzb2xpZCAxcHggcmdiYSgwLDAsMCwuMTIpO2JvcmRlci1yaWdodDpub25lfVtkaXI9cnRsXSAubWF0LWRyYXdlci1zaWRle2JvcmRlci1sZWZ0OnNvbGlkIDFweCByZ2JhKDAsMCwwLC4xMik7Ym9yZGVyLXJpZ2h0Om5vbmV9W2Rpcj1ydGxdIC5tYXQtZHJhd2VyLXNpZGUubWF0LWRyYXdlci1lbmR7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6c29saWQgMXB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWRyYXdlci1iYWNrZHJvcC5tYXQtZHJhd2VyLXNob3due2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNil9Lm1hdC1zdGVwLWhlYWRlci5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LXN0ZXAtaGVhZGVyLmNkay1wcm9ncmFtLWZvY3VzZWQsLm1hdC1zdGVwLWhlYWRlcjpob3Zlcjpub3QoW2FyaWEtZGlzYWJsZWRdKSwubWF0LXN0ZXAtaGVhZGVyOmhvdmVyW2FyaWEtZGlzYWJsZWQ9ZmFsc2Vde2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDQpfS5tYXQtc3RlcC1oZWFkZXI6aG92ZXJbYXJpYS1kaXNhYmxlZD10cnVlXXtjdXJzb3I6ZGVmYXVsdH1AbWVkaWEoaG92ZXI6IG5vbmUpey5tYXQtc3RlcC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZDpub25lfX0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1sYWJlbCwubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1vcHRpb25hbHtjb2xvcjojNjE2MTYxfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb257YmFja2dyb3VuZC1jb2xvcjojNjE2MTYxO2NvbG9yOiNmZmZ9Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCwubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0e2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMDtjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbntjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCwubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc3RhdGUtZG9uZSwubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDA7Y29sb3I6I2ZmZn0ubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29ue2NvbG9yOiNmZmZ9Lm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCwubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0e2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNjtjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc3RhdGUtZXJyb3J7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApO2NvbG9yOiNmNDQzMzZ9Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtbGFiZWwubWF0LXN0ZXAtbGFiZWwtYWN0aXZle2NvbG9yOiMyMTIxMjF9Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtbGFiZWwubWF0LXN0ZXAtbGFiZWwtZXJyb3J7Y29sb3I6I2Y0NDMzNn0ubWF0LXN0ZXBwZXItaG9yaXpvbnRhbCwubWF0LXN0ZXBwZXItdmVydGljYWx7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtc3RlcHBlci12ZXJ0aWNhbC1saW5lOjpiZWZvcmV7Ym9yZGVyLWxlZnQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YmVmb3JlLC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YWZ0ZXIsLm1hdC1zdGVwcGVyLWhvcml6b250YWwtbGluZXtib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXJ7aGVpZ2h0OjcycHh9Lm1hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWJvdHRvbSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXIsLm1hdC12ZXJ0aWNhbC1zdGVwcGVyLWhlYWRlcntwYWRkaW5nOjI0cHggMjRweH0ubWF0LXN0ZXBwZXItdmVydGljYWwtbGluZTo6YmVmb3Jle3RvcDotMTZweDtib3R0b206LTE2cHh9Lm1hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWJvdHRvbSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmFmdGVyLC5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjpiZWZvcmV7dG9wOjM2cHh9Lm1hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWJvdHRvbSAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbC1saW5le3RvcDozNnB4fS5tYXQtc29ydC1oZWFkZXItYXJyb3d7Y29sb3I6IzYxNjE2MX0ubWF0LXRvb2xiYXJ7YmFja2dyb3VuZDojZjU3YzAwO2NvbG9yOiMyMTIxMjF9Lm1hdC10b29sYmFyLm1hdC1wcmltYXJ5e2JhY2tncm91bmQ6I2Y1N2MwMDtjb2xvcjojZmZmfS5tYXQtdG9vbGJhci5tYXQtYWNjZW50e2JhY2tncm91bmQ6I2ZmOTgwMDtjb2xvcjojZmZmfS5tYXQtdG9vbGJhci5tYXQtd2FybntiYWNrZ3JvdW5kOiNmNDQzMzY7Y29sb3I6I2ZmZn0ubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSwubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSwubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9Lm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LXRvb2xiYXIgLm1hdC1zZWxlY3QtdmFsdWUsLm1hdC10b29sYmFyIC5tYXQtc2VsZWN0LWFycm93LC5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6aW5oZXJpdH0ubWF0LXRvb2xiYXIgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOmN1cnJlbnRDb2xvcn0ubWF0LXRvb2xiYXItbXVsdGlwbGUtcm93c3ttaW4taGVpZ2h0OjY0cHh9Lm1hdC10b29sYmFyLXJvdywubWF0LXRvb2xiYXItc2luZ2xlLXJvd3toZWlnaHQ6NjRweH1AbWVkaWEobWF4LXdpZHRoOiA1OTlweCl7Lm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3N7bWluLWhlaWdodDo1NnB4fS5tYXQtdG9vbGJhci1yb3csLm1hdC10b29sYmFyLXNpbmdsZS1yb3d7aGVpZ2h0OjU2cHh9fS5tYXQtdHJlZXtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC10cmVlLW5vZGUsLm1hdC1uZXN0ZWQtdHJlZS1ub2Rle2NvbG9yOiMyMTIxMjF9Lm1hdC10cmVlLW5vZGV7bWluLWhlaWdodDo0OHB4fWJvZHl7b3ZlcmZsb3c6aGlkZGVufS5jZGstb3ZlcmxheS1jb250YWluZXJ7Y29udGFpbjpzdHJpY3R9LmNkay1vdmVybGF5LWNvbnRhaW5lciAubWF0LW1kYy1kaWFsb2ctc3VyZmFjZXtwYWRkaW5nOjE2cHh9YTpub3QoLm1kYy1idXR0b24sLm1kYy1pY29uLWJ1dHRvbil7Y29sb3I6IzE5NzZkMn1hOm5vdCgubWRjLWJ1dHRvbiwubWRjLWljb24tYnV0dG9uKTp2aXNpdGVke2NvbG9yOiM3YjFmYTJ9Ym9keSBtYXQtc2xpZGVyLGJvZHkuZGFyay1tb2RlIG1hdC1zbGlkZXJ7LS1tZGMtc2xpZGVyLWhhbmRsZS13aWR0aDogMTJweDstLW1kYy1zbGlkZXItaGFuZGxlLWhlaWdodDogMTJweDstLW1kYy1zbGlkZXItYWN0aXZlLXRyYWNrLWhlaWdodDogMnB4Oy0tbWRjLXNsaWRlci1pbmFjdGl2ZS10cmFjay1oZWlnaHQ6IDJweH1ib2R5IGEsYm9keSBidXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSxib2R5LmRhcmstbW9kZSBhLGJvZHkuZGFyay1tb2RlIGJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNley0tdGItaWNvbi13aWR0aDogMjRweDstLXRiLWljb24taGVpZ2h0OiAyNHB4Oy0tdGItaWNvbi1idXR0b24td2lkdGg6IDQwcHg7LS10Yi1pY29uLWJ1dHRvbi1oZWlnaHQ6IDQwcHg7LS1tZGMtdGV4dC1idXR0b24tbGFiZWwtdGV4dC10cmFja2luZzogbm9ybWFsOy0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC10cmFja2luZzogbm9ybWFsOy0tbWRjLW91dGxpbmVkLWJ1dHRvbi1sYWJlbC10ZXh0LXRyYWNraW5nOiBub3JtYWw7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1sYWJlbC10ZXh0LXRyYWNraW5nOiBub3JtYWx9Ym9keSBhW21hdC1pY29uLWJ1dHRvbl0ubWF0LW1kYy1pY29uLWJ1dHRvbixib2R5IGJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlW21hdC1pY29uLWJ1dHRvbl0ubWF0LW1kYy1pY29uLWJ1dHRvbixib2R5LmRhcmstbW9kZSBhW21hdC1pY29uLWJ1dHRvbl0ubWF0LW1kYy1pY29uLWJ1dHRvbixib2R5LmRhcmstbW9kZSBidXR0b24ubWF0LW1kYy1idXR0b24tYmFzZVttYXQtaWNvbi1idXR0b25dLm1hdC1tZGMtaWNvbi1idXR0b257d2lkdGg6dmFyKC0tdGItaWNvbi1idXR0b24td2lkdGgpO2hlaWdodDp2YXIoLS10Yi1pY29uLWJ1dHRvbi1oZWlnaHQpO2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXJ9Ym9keSBhW21hdC1pY29uLWJ1dHRvbl0ubWF0LW1kYy1pY29uLWJ1dHRvbiAubWF0LW1kYy1idXR0b24tdG91Y2gtdGFyZ2V0LGJvZHkgYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2VbbWF0LWljb24tYnV0dG9uXS5tYXQtbWRjLWljb24tYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi10b3VjaC10YXJnZXQsYm9keS5kYXJrLW1vZGUgYVttYXQtaWNvbi1idXR0b25dLm1hdC1tZGMtaWNvbi1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXRvdWNoLXRhcmdldCxib2R5LmRhcmstbW9kZSBidXR0b24ubWF0LW1kYy1idXR0b24tYmFzZVttYXQtaWNvbi1idXR0b25dLm1hdC1tZGMtaWNvbi1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXRvdWNoLXRhcmdldHtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfWJvZHkgYSBtYXQtaWNvbi5tYXQtaWNvbixib2R5IGJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlIG1hdC1pY29uLm1hdC1pY29uLGJvZHkuZGFyay1tb2RlIGEgbWF0LWljb24ubWF0LWljb24sYm9keS5kYXJrLW1vZGUgYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UgbWF0LWljb24ubWF0LWljb257ZmxleC1zaHJpbms6MH1ib2R5IGEgbWF0LWljb24ubWF0LWljb24sYm9keSBhIHN2Zyxib2R5IGJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlIG1hdC1pY29uLm1hdC1pY29uLGJvZHkgYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2Ugc3ZnLGJvZHkuZGFyay1tb2RlIGEgbWF0LWljb24ubWF0LWljb24sYm9keS5kYXJrLW1vZGUgYSBzdmcsYm9keS5kYXJrLW1vZGUgYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UgbWF0LWljb24ubWF0LWljb24sYm9keS5kYXJrLW1vZGUgYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2Ugc3Zne3dpZHRoOnZhcigtLXRiLWljb24tc2l6ZSwgdmFyKC0tdGItaWNvbi13aWR0aCkpO2hlaWdodDp2YXIoLS10Yi1pY29uLXNpemUsIHZhcigtLXRiLWljb24taGVpZ2h0KSk7bGluZS1oZWlnaHQ6dmFyKC0tdGItaWNvbi1zaXplLCB2YXIoLS10Yi1pY29uLWhlaWdodCkpfWJvZHkuZGFyay1tb2Rle2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH1ib2R5LmRhcmstbW9kZSBhOm5vdCgubWRjLWJ1dHRvbiwubWRjLWljb24tYnV0dG9uKXtjb2xvcjojNDJhNWY1fWJvZHkuZGFyay1tb2RlIGE6bm90KC5tZGMtYnV0dG9uLC5tZGMtaWNvbi1idXR0b24pOnZpc2l0ZWR7Y29sb3I6I2JhNjhjOH1ib2R5LmRhcmstbW9kZSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtb3B0aW9ue2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LXByaW1hcnktb24tYmFja2dyb3VuZCwgd2hpdGUpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLW9wdGlvbjpob3Zlcjpub3QoLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1vcHRpb246Zm9jdXM6bm90KC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtb3B0aW9uLm1hdC1tZGMtb3B0aW9uLWFjdGl2ZSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1vcHRpb24ubWRjLWxpc3QtaXRlbS0tc2VsZWN0ZWQ6bm90KC5tYXQtbWRjLW9wdGlvbi1tdWx0aXBsZSk6bm90KC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCl7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wOCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcmltYXJ5IC5tYXQtbWRjLW9wdGlvbi5tZGMtbGlzdC1pdGVtLS1zZWxlY3RlZDpub3QoLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkKSAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1wcmltYXJ5LCAjZWY2YzAwKX1ib2R5LmRhcmstbW9kZSAubWF0LWFjY2VudCAubWF0LW1kYy1vcHRpb24ubWRjLWxpc3QtaXRlbS0tc2VsZWN0ZWQ6bm90KC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCkgLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjZWY2YzAwKX1ib2R5LmRhcmstbW9kZSAubWF0LXdhcm4gLm1hdC1tZGMtb3B0aW9uLm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkOm5vdCgubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQpIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1vcHRncm91cC1sYWJlbHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1wcmltYXJ5LW9uLWJhY2tncm91bmQsIHdoaXRlKX1ib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1mdWxse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZHtjb2xvcjojNjg2ODY4fWJvZHkuZGFyay1tb2RlIC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlcntjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbCxib2R5LmRhcmstbW9kZSAubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGx7YmFja2dyb3VuZDojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlcntjb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlcixib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXJ7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbCxib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbHtiYWNrZ3JvdW5kOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGw6OmFmdGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlcntjb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlIC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlcixib2R5LmRhcmstbW9kZSAubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXJ7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbCxib2R5LmRhcmstbW9kZSAubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbHtiYWNrZ3JvdW5kOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGw6OmFmdGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlcntjb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlIC5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlcntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbCxib2R5LmRhcmstbW9kZSAubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGx7YmFja2dyb3VuZDojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlcntjb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVye2NvbG9yOiM2ODY4Njh9Ym9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWQubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbCxib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxse2JhY2tncm91bmQ6IzY4Njg2OH1ib2R5LmRhcmstbW9kZSAubWF0LWFwcC1iYWNrZ3JvdW5kLGJvZHkuZGFyay1tb2RlLm1hdC1hcHAtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MHtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MXtib3gtc2hhZG93OjBweCAycHggMXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAzcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejIsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejJ7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXozLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoze2JveC1zaGFkb3c6MHB4IDNweCAzcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAzcHggNHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDhweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16NCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16NHtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXo1LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXo1e2JveC1zaGFkb3c6MHB4IDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA1cHggOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDE0cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejYsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejZ7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDZweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDE4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejcsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejd7Ym94LXNoYWRvdzowcHggNHB4IDVweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDdweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMnB4IDE2cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejgsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejh7Ym94LXNoYWRvdzowcHggNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejksYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejl7Ym94LXNoYWRvdzowcHggNXB4IDZweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDlweCAxMnB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggM3B4IDE2cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejEwLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxMHtib3gtc2hhZG93OjBweCA2cHggNnB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTBweCAxNHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNHB4IDE4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejExLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxMXtib3gtc2hhZG93OjBweCA2cHggN3B4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTFweCAxNXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNHB4IDIwcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejEyLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxMntib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTJweCAxN3B4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNXB4IDIycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejEzLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxM3tib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTNweCAxOXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNXB4IDI0cHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejE0LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxNHtib3gtc2hhZG93OjBweCA3cHggOXB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTRweCAyMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNXB4IDI2cHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejE1LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxNXtib3gtc2hhZG93OjBweCA4cHggOXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTVweCAyMnB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNnB4IDI4cHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejE2LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxNntib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE2cHggMjRweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxNyxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MTd7Ym94LXNoYWRvdzowcHggOHB4IDExcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxN3B4IDI2cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA2cHggMzJweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MTgsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejE4e2JveC1zaGFkb3c6MHB4IDlweCAxMXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMThweCAyOHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggN3B4IDM0cHggNnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejE5LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxOXtib3gtc2hhZG93OjBweCA5cHggMTJweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE5cHggMjlweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDdweCAzNnB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoyMCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MjB7Ym94LXNoYWRvdzowcHggMTBweCAxM3B4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMjBweCAzMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggOHB4IDM4cHggN3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejIxLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoyMXtib3gtc2hhZG93OjBweCAxMHB4IDEzcHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAyMXB4IDMzcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA4cHggNDBweCA3cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MjIsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejIye2JveC1zaGFkb3c6MHB4IDEwcHggMTRweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDIycHggMzVweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDhweCA0MnB4IDdweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoyMyxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MjN7Ym94LXNoYWRvdzowcHggMTFweCAxNHB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMjNweCAzNnB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggOXB4IDQ0cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejI0LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoyNHtib3gtc2hhZG93OjBweCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAyNHB4IDM4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA5cHggNDZweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LXRoZW1lLWxvYWRlZC1tYXJrZXJ7ZGlzcGxheTpub25lfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWNhcmR7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDFweCAxcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWRjLWVsZXZhdGVkLWNhcmQtY29udGFpbmVyLWNvbG9yOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtY2FyZC1vdXRsaW5lZHtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTstLW1kYy1vdXRsaW5lZC1jYXJkLW91dGxpbmUtY29sb3I6IzU5NTk1OX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1jYXJkLXN1YnRpdGxle2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXByb2dyZXNzLWJhcnstLW1kYy1saW5lYXItcHJvZ3Jlc3MtYWN0aXZlLWluZGljYXRvci1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXByb2dyZXNzLWJhciAubWRjLWxpbmVhci1wcm9ncmVzc19fYnVmZmVyLWRvdHN7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgdmVyc2lvbj0nMS4xJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyB4PScwcHgnIHk9JzBweCcgZW5hYmxlLWJhY2tncm91bmQ9J25ldyAwIDAgNSAyJyB4bWw6c3BhY2U9J3ByZXNlcnZlJyB2aWV3Qm94PScwIDAgNSAyJyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSdub25lIHNsaWNlJyUzRSUzQ2NpcmNsZSBjeD0nMScgY3k9JzEnIHI9JzEnIGZpbGw9J3JnYmEoMjM5LCAxMDgsIDAsIDAuMjUpJy8lM0UlM0Mvc3ZnJTNFIil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcHJvZ3Jlc3MtYmFyIC5tZGMtbGluZWFyLXByb2dyZXNzX19idWZmZXItYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksIDEwOCwgMCwgMC4yNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnR7LS1tZGMtbGluZWFyLXByb2dyZXNzLWFjdGl2ZS1pbmRpY2F0b3ItY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWRjLWxpbmVhci1wcm9ncmVzc19fYnVmZmVyLWRvdHN7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgdmVyc2lvbj0nMS4xJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyB4PScwcHgnIHk9JzBweCcgZW5hYmxlLWJhY2tncm91bmQ9J25ldyAwIDAgNSAyJyB4bWw6c3BhY2U9J3ByZXNlcnZlJyB2aWV3Qm94PScwIDAgNSAyJyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSdub25lIHNsaWNlJyUzRSUzQ2NpcmNsZSBjeD0nMScgY3k9JzEnIHI9JzEnIGZpbGw9J3JnYmEoMjM5LCAxMDgsIDAsIDAuMjUpJy8lM0UlM0Mvc3ZnJTNFIil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnQgLm1kYy1saW5lYXItcHJvZ3Jlc3NfX2J1ZmZlci1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzOSwgMTA4LCAwLCAwLjI1KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1wcm9ncmVzcy1iYXIubWF0LXdhcm57LS1tZGMtbGluZWFyLXByb2dyZXNzLWFjdGl2ZS1pbmRpY2F0b3ItY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1kYy1saW5lYXItcHJvZ3Jlc3NfX2J1ZmZlci1kb3Rze2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHZlcnNpb249JzEuMScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB4bWxuczp4bGluaz0naHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycgeD0nMHB4JyB5PScwcHgnIGVuYWJsZS1iYWNrZ3JvdW5kPSduZXcgMCAwIDUgMicgeG1sOnNwYWNlPSdwcmVzZXJ2ZScgdmlld0JveD0nMCAwIDUgMicgcHJlc2VydmVBc3BlY3RSYXRpbz0nbm9uZSBzbGljZSclM0UlM0NjaXJjbGUgY3g9JzEnIGN5PScxJyByPScxJyBmaWxsPSdyZ2JhKDI0NCwgNjcsIDU0LCAwLjI1KScvJTNFJTNDL3N2ZyUzRSIpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXByb2dyZXNzLWJhci5tYXQtd2FybiAubWRjLWxpbmVhci1wcm9ncmVzc19fYnVmZmVyLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LCA2NywgNTQsIDAuMjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRvb2x0aXB7LS1tZGMtcGxhaW4tdG9vbHRpcC1jb250YWluZXItY29sb3I6IzYxNjE2MTstLW1kYy1wbGFpbi10b29sdGlwLXN1cHBvcnRpbmctdGV4dC1jb2xvcjp3aGl0ZX1ib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtZmxvYXRpbmctbGFiZWx7Y29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy10ZXh0LWZpZWxkX19pbnB1dHtjb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODcpfUBtZWRpYSBhbGx7Ym9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLXRleHQtZmllbGRfX2lucHV0OjpwbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNil9fUBtZWRpYSBhbGx7Ym9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLXRleHQtZmllbGRfX2lucHV0Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNil9fWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZCAubWRjLXRleHQtZmllbGRfX2lucHV0e2NhcmV0LWNvbG9yOnZhcigtLW1kYy10aGVtZS1wcmltYXJ5LCAjZWY2YzAwKX1ib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpKy5tZGMtdGV4dC1maWVsZC1oZWxwZXItbGluZSAubWRjLXRleHQtZmllbGQtaGVscGVyLXRleHR7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjYpfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy10ZXh0LWZpZWxkLWNoYXJhY3Rlci1jb3VudGVyLGJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5lIC5tZGMtdGV4dC1maWVsZC1jaGFyYWN0ZXItY291bnRlcntjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNil9Ym9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLXRleHQtZmllbGRfX2ljb24tLWxlYWRpbmd7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KX1ib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtdGV4dC1maWVsZF9faWNvbi0tdHJhaWxpbmd7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KX1ib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtdGV4dC1maWVsZF9fYWZmaXgtLXByZWZpeHtjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNil9Ym9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLXRleHQtZmllbGRfX2FmZml4LS1zdWZmaXh7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjYpfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tZmlsbGVkIC5tZGMtdGV4dC1maWVsZF9fcmlwcGxlOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkLS1maWxsZWQgLm1kYy10ZXh0LWZpZWxkX19yaXBwbGU6OmFmdGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLXJpcHBsZS1jb2xvciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjg3KSl9Ym9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkLS1maWxsZWQ6aG92ZXIgLm1kYy10ZXh0LWZpZWxkX19yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWZpbGxlZC5tZGMtcmlwcGxlLXN1cmZhY2UtLWhvdmVyIC5tZGMtdGV4dC1maWVsZF9fcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTp2YXIoLS1tZGMtcmlwcGxlLWhvdmVyLW9wYWNpdHksIDAuMDgpfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tZmlsbGVkLm1kYy1yaXBwbGUtdXBncmFkZWQtLWJhY2tncm91bmQtZm9jdXNlZCAubWRjLXRleHQtZmllbGRfX3JpcHBsZTo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tZmlsbGVkOm5vdCgubWRjLXJpcHBsZS11cGdyYWRlZCk6Zm9jdXMgLm1kYy10ZXh0LWZpZWxkX19yaXBwbGU6OmJlZm9yZXtvcGFjaXR5OnZhcigtLW1kYy1yaXBwbGUtZm9jdXMtb3BhY2l0eSwgMC4yNCl9Ym9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkLS1maWxsZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6IzRhNGE0YX1ib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWZpbGxlZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1saW5lLXJpcHBsZTo6YmVmb3Jle2JvcmRlci1ib3R0b20tY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQyKX1ib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWZpbGxlZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCk6aG92ZXIgLm1kYy1saW5lLXJpcHBsZTo6YmVmb3Jle2JvcmRlci1ib3R0b20tY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjg3KX1ib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWZpbGxlZCAubWRjLWxpbmUtcmlwcGxlOjphZnRlcntib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLW1kYy10aGVtZS1wcmltYXJ5LCAjZWY2YzAwKX1ib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLW91dGxpbmVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZyxib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLW91dGxpbmVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsYm9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzgpfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOm5vdCgubWRjLXRleHQtZmllbGQtLWZvY3VzZWQpOmhvdmVyIC5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLGJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOm5vdCgubWRjLXRleHQtZmllbGQtLWZvY3VzZWQpOmhvdmVyIC5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCxib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLW91dGxpbmVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpub3QoLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkKTpob3ZlciAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC44Nyl9Ym9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsYm9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLGJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6dmFyKC0tbWRjLXRoZW1lLXByaW1hcnksICNlZjZjMDApfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy10ZXh0LWZpZWxkX19yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtdGV4dC1maWVsZF9fcmlwcGxlOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy1yaXBwbGUtY29sb3IsIHRyYW5zcGFyZW50KX1ib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWZvY3VzZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtZmxvYXRpbmctbGFiZWx7Y29sb3I6cmdiYSgyMzksIDEwOCwgMCwgMC44Nyl9Ym9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpob3ZlciAubWRjLWxpbmUtcmlwcGxlOjpiZWZvcmV7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1saW5lLXJpcHBsZTo6YWZ0ZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1mbG9hdGluZy1sYWJlbHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWludmFsaWQrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5lIC5tZGMtdGV4dC1maWVsZC1oZWxwZXItdGV4dC0tdmFsaWRhdGlvbi1tc2d7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX1ib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWludmFsaWQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dHtjYXJldC1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy10ZXh0LWZpZWxkX19pY29uLS10cmFpbGluZ3tjb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1saW5lLXJpcHBsZTo6YmVmb3Jle2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX1ib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLGJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLGJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCk6bm90KC5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCk6aG92ZXIgLm1kYy1ub3RjaGVkLW91dGxpbmUgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsYm9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpub3QoLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkKTpob3ZlciAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsYm9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpub3QoLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkKTpob3ZlciAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Ym9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZyxib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCxib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX1ib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtdGV4dC1maWVsZF9faW5wdXR7Y29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjM4KX1AbWVkaWEgYWxse2JvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dDo6cGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjM4KX19QG1lZGlhIGFsbHtib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtdGV4dC1maWVsZF9faW5wdXQ6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zOCl9fWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy1mbG9hdGluZy1sYWJlbHtjb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzgpfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5lIC5tZGMtdGV4dC1maWVsZC1oZWxwZXItdGV4dHtjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkLWNoYXJhY3Rlci1jb3VudGVyLGJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5lIC5tZGMtdGV4dC1maWVsZC1jaGFyYWN0ZXItY291bnRlcntjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19pY29uLS1sZWFkaW5ne2NvbG9yOnJnYmEoMCwgMCwgMCwgMC4zKX1ib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtdGV4dC1maWVsZF9faWNvbi0tdHJhaWxpbmd7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjMpfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19hZmZpeC0tcHJlZml4e2NvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCl9Ym9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLXRleHQtZmllbGRfX2FmZml4LS1zdWZmaXh7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KX1ib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtbGluZS1yaXBwbGU6OmJlZm9yZXtib3JkZXItYm90dG9tLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNil9Ym9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZyxib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCxib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKSwoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSl7Ym9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLXRleHQtZmllbGRfX2lucHV0OjpwbGFjZWhvbGRlcntjb2xvcjpHcmF5VGV4dH19QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSksKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpe2JvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6R3JheVRleHR9fUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXtib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtZmxvYXRpbmctbGFiZWx7Y29sb3I6R3JheVRleHR9fUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXtib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKy5tZGMtdGV4dC1maWVsZC1oZWxwZXItbGluZSAubWRjLXRleHQtZmllbGQtaGVscGVyLXRleHR7Y29sb3I6R3JheVRleHR9fUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXtib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtdGV4dC1maWVsZC1jaGFyYWN0ZXItY291bnRlcixib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKy5tZGMtdGV4dC1maWVsZC1oZWxwZXItbGluZSAubWRjLXRleHQtZmllbGQtY2hhcmFjdGVyLWNvdW50ZXJ7Y29sb3I6R3JheVRleHR9fUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXtib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtdGV4dC1maWVsZF9faWNvbi0tbGVhZGluZ3tjb2xvcjpHcmF5VGV4dH19QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSksKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpe2JvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19pY29uLS10cmFpbGluZ3tjb2xvcjpHcmF5VGV4dH19QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSksKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpe2JvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19hZmZpeC0tcHJlZml4e2NvbG9yOkdyYXlUZXh0fX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKSwoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSl7Ym9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLXRleHQtZmllbGRfX2FmZml4LS1zdWZmaXh7Y29sb3I6R3JheVRleHR9fUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXtib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtbGluZS1yaXBwbGU6OmJlZm9yZXtib3JkZXItYm90dG9tLWNvbG9yOkdyYXlUZXh0fX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKSwoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSl7Ym9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZyxib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCxib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6R3JheVRleHR9fWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQubWRjLXRleHQtZmllbGQtLWZpbGxlZHtiYWNrZ3JvdW5kLWNvbG9yOiM0NjQ2NDZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC1lcnJvcntjb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQtZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjg3KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkOmhvdmVyIC5tYXQtbWRjLWZvcm0tZmllbGQtZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4wOH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtbWRjLWZvcm0tZmllbGQtZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4yNH1ib2R5LmRhcmstbW9kZSBzZWxlY3QubWF0LW1kYy1mb3JtLWZpZWxkLWlucHV0LWNvbnRyb2w6bm90KC5tYXQtbWRjLW5hdGl2ZS1zZWxlY3QtaW5saW5lKSBvcHRpb257Y29sb3I6cmdiYSgwLDAsMCwuODcpfWJvZHkuZGFyay1tb2RlIHNlbGVjdC5tYXQtbWRjLWZvcm0tZmllbGQtaW5wdXQtY29udHJvbDpub3QoLm1hdC1tZGMtbmF0aXZlLXNlbGVjdC1pbmxpbmUpIG9wdGlvbjpkaXNhYmxlZHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjU0KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvY3VzZWQubWF0LXByaW1hcnkgLm1hdC1tZGMtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6cmdiYSgyMzksMTA4LDAsLjg3KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvY3VzZWQubWF0LWFjY2VudCAubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjpyZ2JhKDIzOSwxMDgsMCwuODcpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9jdXNlZC5tYXQtd2FybiAubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuODcpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zOCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZF9faW5wdXR7Y2FyZXQtY29sb3I6dmFyKC0tbWRjLXRoZW1lLXNlY29uZGFyeSwgI2VmNmMwMCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50Om5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLWxpbmUtcmlwcGxlOjphZnRlcntib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLW1kYy10aGVtZS1zZWNvbmRhcnksICNlZjZjMDApfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWZvY3VzZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtZmxvYXRpbmctbGFiZWx7Y29sb3I6cmdiYSgyMzksIDEwOCwgMCwgMC44Nyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCk6aG92ZXIgLm1kYy1saW5lLXJpcHBsZTo6YmVmb3Jle2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLWxpbmUtcmlwcGxlOjphZnRlcntib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1mbG9hdGluZy1sYWJlbHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkKy5tZGMtdGV4dC1maWVsZC1oZWxwZXItbGluZSAubWRjLXRleHQtZmllbGQtaGVscGVyLXRleHQtLXZhbGlkYXRpb24tbXNne2NvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZCAubWRjLXRleHQtZmllbGRfX2lucHV0e2NhcmV0LWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy10ZXh0LWZpZWxkX19pY29uLS10cmFpbGluZ3tjb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbGluZS1yaXBwbGU6OmJlZm9yZXtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpub3QoLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkKTpob3ZlciAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZyxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpub3QoLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkKTpob3ZlciAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCk6bm90KC5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCk6aG92ZXIgLm1kYy1ub3RjaGVkLW91dGxpbmUgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLW91dGxpbmVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6dmFyKC0tbWRjLXRoZW1lLXNlY29uZGFyeSwgI2VmNmMwMCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGRfX2lucHV0e2NhcmV0LWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2Fybjpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1saW5lLXJpcHBsZTo6YWZ0ZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLWZsb2F0aW5nLWxhYmVse2NvbG9yOnJnYmEoMjQ0LCA2NywgNTQsIDAuODcpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpob3ZlciAubWRjLWxpbmUtcmlwcGxlOjpiZWZvcmV7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLWxpbmUtcmlwcGxlOjphZnRlcntib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtZmxvYXRpbmctbGFiZWx7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWludmFsaWQrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5lIC5tZGMtdGV4dC1maWVsZC1oZWxwZXItdGV4dC0tdmFsaWRhdGlvbi1tc2d7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZCAubWRjLXRleHQtZmllbGRfX2lucHV0e2NhcmV0LWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtdGV4dC1maWVsZF9faWNvbi0tdHJhaWxpbmd7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1saW5lLXJpcHBsZTo6YmVmb3Jle2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpub3QoLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkKTpob3ZlciAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZyxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCk6bm90KC5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCk6aG92ZXIgLm1kYy1ub3RjaGVkLW91dGxpbmUgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpub3QoLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkKTpob3ZlciAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LW1kYy1mb3JtLWZpZWxkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaHtib3JkZXItbGVmdDoxcHggc29saWQgcmdiYSgwLDAsMCwwKX1ib2R5LmRhcmstbW9kZSBbZGlyPXJ0bF0gLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtbWRjLWZvcm0tZmllbGQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoe2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCByZ2JhKDAsMCwwLDApfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXh7bWluLWhlaWdodDo1NnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlciAubWF0LW1kYy1mb3JtLWZpZWxkLWZsZXggLm1hdC1tZGMtZmxvYXRpbmctbGFiZWx7dG9wOjI4cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVyLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLW5vdGNoZWQtb3V0bGluZS0tdXBncmFkZWQgLm1kYy1mbG9hdGluZy1sYWJlbC0tZmxvYXQtYWJvdmV7LS1tYXQtbWRjLWZvcm0tZmllbGQtbGFiZWwtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKCAtMzQuNzVweCkgc2NhbGUodmFyKC0tbWF0LW1kYy1mb3JtLWZpZWxkLWZsb2F0aW5nLWxhYmVsLXNjYWxlLCAwLjc1KSk7dHJhbnNmb3JtOnZhcigtLW1hdC1tZGMtZm9ybS1maWVsZC1sYWJlbC10cmFuc2Zvcm0pfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlci5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1hdC1tZGMtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nLXRvcDoxNnB4O3BhZGRpbmctYm90dG9tOjE2cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVyOm5vdCgubWRjLXRleHQtZmllbGQtLW91dGxpbmVkKSAubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmctdG9wOjI0cHg7cGFkZGluZy1ib3R0b206OHB4fWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tbm8tbGFiZWw6bm90KC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQpOm5vdCgubWRjLXRleHQtZmllbGQtLXRleHRhcmVhKSAubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmctdG9wOjE2cHg7cGFkZGluZy1ib3R0b206MTZweH1ib2R5LmRhcmstbW9kZSAubWRjLW1lbnUtc3VyZmFjZXtib3gtc2hhZG93OjBweCA1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggOHB4IDEwcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAzcHggMTRweCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy10aGVtZS1zdXJmYWNlLCAjNDI0MjQyKTtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgI2ZmZil9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1wcmltYXJ5LW9uLWJhY2tncm91bmQsIHdoaXRlKX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbV9fc2Vjb25kYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtc2Vjb25kYXJ5LW9uLWJhY2tncm91bmQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSl9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW1fX292ZXJsaW5lLXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtaGludC1vbi1iYWNrZ3JvdW5kLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSkpfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnQsYm9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHJhaWxpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fZW5ke2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydCxib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbS0td2l0aC10cmFpbGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19lbmR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtaWNvbi1vbi1iYWNrZ3JvdW5kLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSkpfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtX19lbmR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtaGludC1vbi1iYWNrZ3JvdW5kLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSkpfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fc3RhcnQsYm9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19jb250ZW50LGJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fZW5ke29wYWNpdHk6MC4zOH1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgI2ZmZil9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19zZWNvbmRhcnktdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgI2ZmZil9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19vdmVybGluZS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjZmZmKX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjZmZmKX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQubWRjLWxpc3QtaXRlbS0td2l0aC10cmFpbGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19lbmR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICNmZmYpfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZC5tZGMtbGlzdC1pdGVtLS13aXRoLXRyYWlsaW5nLW1ldGEgLm1kYy1saXN0LWl0ZW1fX2VuZHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgI2ZmZil9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHQsYm9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLWFjdGl2YXRlZCAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1wcmltYXJ5LCAjZWY2YzAwKX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbS0tc2VsZWN0ZWQubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LGJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS1hY3RpdmF0ZWQubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1wcmltYXJ5LCAjZWY2YzAwKX1ib2R5LmRhcmstbW9kZSAubWRjLWRlcHJlY2F0ZWQtbGlzdC1ncm91cF9fc3ViaGVhZGVye2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LXByaW1hcnktb24tYmFja2dyb3VuZCwgd2hpdGUpfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1kaXZpZGVyOjphZnRlcntib3JkZXItYm90dG9tLWNvbG9yOndoaXRlfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1kaXZpZGVye2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXNlbGVjdC12YWx1ZXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC44Nyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtc2VsZWN0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjYpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXNlbGVjdC1kaXNhYmxlZCAubWF0LW1kYy1zZWxlY3QtdmFsdWV7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMzgpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXNlbGVjdC1hcnJvd3tjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41NCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtcHJpbWFyeSAubWF0LW1kYy1zZWxlY3QtYXJyb3d7Y29sb3I6cmdiYSgyMzksMTA4LDAsLjg3KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkLm1hdC1hY2NlbnQgLm1hdC1tZGMtc2VsZWN0LWFycm93e2NvbG9yOnJnYmEoMjM5LDEwOCwwLC44Nyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtd2FybiAubWF0LW1kYy1zZWxlY3QtYXJyb3d7Y29sb3I6cmdiYSgyNDQsNjcsNTQsLjg3KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkIC5tYXQtbWRjLXNlbGVjdC5tYXQtbWRjLXNlbGVjdC1pbnZhbGlkIC5tYXQtbWRjLXNlbGVjdC1hcnJvd3tjb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuODcpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQgLm1hdC1tZGMtc2VsZWN0Lm1hdC1tZGMtc2VsZWN0LWRpc2FibGVkIC5tYXQtbWRjLXNlbGVjdC1hcnJvd3tjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zOCl9Ym9keS5kYXJrLW1vZGUgLm1kYy1tZW51LXN1cmZhY2V7Ym94LXNoYWRvdzowcHggNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtc3VyZmFjZSwgIzQyNDI0Mik7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICNmZmYpfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtcHJpbWFyeS1vbi1iYWNrZ3JvdW5kLCB3aGl0ZSl9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW1fX3NlY29uZGFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LXNlY29uZGFyeS1vbi1iYWNrZ3JvdW5kLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNykpfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtX19vdmVybGluZS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LWhpbnQtb24tYmFja2dyb3VuZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpKX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LGJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS13aXRoLXRyYWlsaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX2VuZHtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnQsYm9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHJhaWxpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fZW5ke2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LWljb24tb24tYmFja2dyb3VuZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpKX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbV9fZW5ke2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LWhpbnQtb24tYmFja2dyb3VuZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpKX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LGJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fY29udGVudCxib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX2VuZHtvcGFjaXR5OjAuMzh9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICNmZmYpfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fc2Vjb25kYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICNmZmYpfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fb3ZlcmxpbmUtdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgI2ZmZil9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgI2ZmZil9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHJhaWxpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fZW5ke2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjZmZmKX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQubWRjLWxpc3QtaXRlbS0td2l0aC10cmFpbGluZy1tZXRhIC5tZGMtbGlzdC1pdGVtX19lbmR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICNmZmYpfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS1zZWxlY3RlZCAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0LGJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS1hY3RpdmF0ZWQgLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtcHJpbWFyeSwgI2VmNmMwMCl9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydCxib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbS0tYWN0aXZhdGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtcHJpbWFyeSwgI2VmNmMwMCl9Ym9keS5kYXJrLW1vZGUgLm1kYy1kZXByZWNhdGVkLWxpc3QtZ3JvdXBfX3N1YmhlYWRlcntjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1wcmltYXJ5LW9uLWJhY2tncm91bmQsIHdoaXRlKX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtZGl2aWRlcjo6YWZ0ZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp3aGl0ZX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtZGl2aWRlcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1kaWFsb2ctY29udGFpbmVyey0tbWRjLWRpYWxvZy1jb250YWluZXItY29sb3I6IzQyNDI0MjstLW1kYy1kaWFsb2ctd2l0aC1kaXZpZGVyLWRpdmlkZXItY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTstLW1kYy1kaWFsb2ctc3ViaGVhZC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODcpOy0tbWRjLWRpYWxvZy1zdXBwb3J0aW5nLXRleHQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXN0YW5kYXJkLWNoaXB7LS1tZGMtY2hpcC1lbGV2YXRlZC1jb250YWluZXItY29sb3I6IzU5NTk1OTstLW1kYy1jaGlwLWVsZXZhdGVkLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvcjojNTk1OTU5Oy0tbWRjLWNoaXAtbGFiZWwtdGV4dC1jb2xvcjojZmFmYWZhOy0tbWRjLWNoaXAtZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjojZmFmYWZhOy0tbWRjLWNoaXAtd2l0aC1pY29uLWljb24tY29sb3I6I2ZhZmFmYTstLW1kYy1jaGlwLXdpdGgtaWNvbi1kaXNhYmxlZC1pY29uLWNvbG9yOiNmYWZhZmE7LS1tZGMtY2hpcC13aXRoLXRyYWlsaW5nLWljb24tZGlzYWJsZWQtdHJhaWxpbmctaWNvbi1jb2xvcjojZmFmYWZhOy0tbWRjLWNoaXAtd2l0aC10cmFpbGluZy1pY29uLXRyYWlsaW5nLWljb24tY29sb3I6I2ZhZmFmYTstLW1kYy1jaGlwLXdpdGgtaWNvbi1zZWxlY3RlZC1pY29uLWNvbG9yOiNmYWZhZmF9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tYXQtcHJpbWFyeS5tYXQtbWRjLWNoaXAtc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tYXQtcHJpbWFyeS5tYXQtbWRjLWNoaXAtaGlnaGxpZ2h0ZWR7LS1tZGMtY2hpcC1lbGV2YXRlZC1jb250YWluZXItY29sb3I6I2VmNmMwMDstLW1kYy1jaGlwLWVsZXZhdGVkLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvcjojZWY2YzAwOy0tbWRjLWNoaXAtbGFiZWwtdGV4dC1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLWljb24taWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtaWNvbi1kaXNhYmxlZC1pY29uLWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC10cmFpbGluZy1pY29uLWRpc2FibGVkLXRyYWlsaW5nLWljb24tY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLXRyYWlsaW5nLWljb24tdHJhaWxpbmctaWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtaWNvbi1zZWxlY3RlZC1pY29uLWNvbG9yOndoaXRlfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXN0YW5kYXJkLWNoaXAubWF0LWFjY2VudC5tYXQtbWRjLWNoaXAtc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tYXQtYWNjZW50Lm1hdC1tZGMtY2hpcC1oaWdobGlnaHRlZHstLW1kYy1jaGlwLWVsZXZhdGVkLWNvbnRhaW5lci1jb2xvcjojZWY2YzAwOy0tbWRjLWNoaXAtZWxldmF0ZWQtZGlzYWJsZWQtY29udGFpbmVyLWNvbG9yOiNlZjZjMDA7LS1tZGMtY2hpcC1sYWJlbC10ZXh0LWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtaWNvbi1pY29uLWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC1pY29uLWRpc2FibGVkLWljb24tY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLXRyYWlsaW5nLWljb24tZGlzYWJsZWQtdHJhaWxpbmctaWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtdHJhaWxpbmctaWNvbi10cmFpbGluZy1pY29uLWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC1pY29uLXNlbGVjdGVkLWljb24tY29sb3I6d2hpdGV9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tYXQtd2Fybi5tYXQtbWRjLWNoaXAtc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tYXQtd2Fybi5tYXQtbWRjLWNoaXAtaGlnaGxpZ2h0ZWR7LS1tZGMtY2hpcC1lbGV2YXRlZC1jb250YWluZXItY29sb3I6I2Y0NDMzNjstLW1kYy1jaGlwLWVsZXZhdGVkLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvcjojZjQ0MzM2Oy0tbWRjLWNoaXAtbGFiZWwtdGV4dC1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLWljb24taWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtaWNvbi1kaXNhYmxlZC1pY29uLWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC10cmFpbGluZy1pY29uLWRpc2FibGVkLXRyYWlsaW5nLWljb24tY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLXRyYWlsaW5nLWljb24tdHJhaWxpbmctaWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtaWNvbi1zZWxlY3RlZC1pY29uLWNvbG9yOndoaXRlfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWNoaXAtZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtY2hpcHtoZWlnaHQ6MzJweH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1zbGlkZS10b2dnbGV7LS1tZGMtc3dpdGNoLWRpc2FibGVkLXNlbGVjdGVkLWhhbmRsZS1jb2xvcjojMDAwOy0tbWRjLXN3aXRjaC1kaXNhYmxlZC11bnNlbGVjdGVkLWhhbmRsZS1jb2xvcjojMDAwOy0tbWRjLXN3aXRjaC1kaXNhYmxlZC1zZWxlY3RlZC10cmFjay1jb2xvcjojZjVmNWY1Oy0tbWRjLXN3aXRjaC1kaXNhYmxlZC11bnNlbGVjdGVkLXRyYWNrLWNvbG9yOiNmNWY1ZjU7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtZm9jdXMtc3RhdGUtbGF5ZXItY29sb3I6I2Y1ZjVmNTstLW1kYy1zd2l0Y2gtdW5zZWxlY3RlZC1wcmVzc2VkLXN0YXRlLWxheWVyLWNvbG9yOiNmNWY1ZjU7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtaG92ZXItc3RhdGUtbGF5ZXItY29sb3I6I2Y1ZjVmNTstLW1kYy1zd2l0Y2gtdW5zZWxlY3RlZC1mb2N1cy10cmFjay1jb2xvcjojNjE2MTYxOy0tbWRjLXN3aXRjaC11bnNlbGVjdGVkLWhvdmVyLXRyYWNrLWNvbG9yOiM2MTYxNjE7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtcHJlc3NlZC10cmFjay1jb2xvcjojNjE2MTYxOy0tbWRjLXN3aXRjaC11bnNlbGVjdGVkLXRyYWNrLWNvbG9yOiM2MTYxNjE7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtZm9jdXMtaGFuZGxlLWNvbG9yOiNmYWZhZmE7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtaG92ZXItaGFuZGxlLWNvbG9yOiNmYWZhZmE7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtcHJlc3NlZC1oYW5kbGUtY29sb3I6I2ZhZmFmYTstLW1kYy1zd2l0Y2gtaGFuZGxlLXN1cmZhY2UtY29sb3I6dmFyKC0tbWRjLXRoZW1lLXN1cmZhY2UsICNmZmYpOy0tbWRjLXN3aXRjaC11bnNlbGVjdGVkLWhhbmRsZS1jb2xvcjojOWU5ZTllOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtc3dpdGNoLWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1zd2l0Y2gtZGlzYWJsZWQtdW5zZWxlY3RlZC1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjojMjEyMTIxfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXNsaWRlLXRvZ2dsZSAubWRjLWZvcm0tZmllbGR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtcHJpbWFyeS1vbi1iYWNrZ3JvdW5kLCB3aGl0ZSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtc2xpZGUtdG9nZ2xlIC5tZGMtc3dpdGNoLS1kaXNhYmxlZCtsYWJlbHtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXNsaWRlLXRvZ2dsZS5tYXQtcHJpbWFyeXstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtZm9jdXMtc3RhdGUtbGF5ZXItY29sb3I6I2ZmYjc0ZDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtaGFuZGxlLWNvbG9yOiNmZmI3NGQ7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWhvdmVyLXN0YXRlLWxheWVyLWNvbG9yOiNmZmI3NGQ7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLXByZXNzZWQtc3RhdGUtbGF5ZXItY29sb3I6I2ZmYjc0ZDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtZm9jdXMtaGFuZGxlLWNvbG9yOiNmZmNjODA7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWhvdmVyLWhhbmRsZS1jb2xvcjojZmZjYzgwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1wcmVzc2VkLWhhbmRsZS1jb2xvcjojZmZjYzgwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1mb2N1cy10cmFjay1jb2xvcjojZmI4YzAwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1ob3Zlci10cmFjay1jb2xvcjojZmI4YzAwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1wcmVzc2VkLXRyYWNrLWNvbG9yOiNmYjhjMDA7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLXRyYWNrLWNvbG9yOiNmYjhjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtc2xpZGUtdG9nZ2xlLm1hdC1hY2NlbnR7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWZvY3VzLXN0YXRlLWxheWVyLWNvbG9yOiNmZmI3NGQ7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWhhbmRsZS1jb2xvcjojZmZiNzRkOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1ob3Zlci1zdGF0ZS1sYXllci1jb2xvcjojZmZiNzRkOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1wcmVzc2VkLXN0YXRlLWxheWVyLWNvbG9yOiNmZmI3NGQ7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWZvY3VzLWhhbmRsZS1jb2xvcjojZmZjYzgwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1ob3Zlci1oYW5kbGUtY29sb3I6I2ZmY2M4MDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtcHJlc3NlZC1oYW5kbGUtY29sb3I6I2ZmY2M4MDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtZm9jdXMtdHJhY2stY29sb3I6I2ZiOGMwMDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtaG92ZXItdHJhY2stY29sb3I6I2ZiOGMwMDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtcHJlc3NlZC10cmFjay1jb2xvcjojZmI4YzAwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC10cmFjay1jb2xvcjojZmI4YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXNsaWRlLXRvZ2dsZS5tYXQtd2FybnstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtZm9jdXMtc3RhdGUtbGF5ZXItY29sb3I6I2U1NzM3MzstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtaGFuZGxlLWNvbG9yOiNlNTczNzM7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWhvdmVyLXN0YXRlLWxheWVyLWNvbG9yOiNlNTczNzM7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLXByZXNzZWQtc3RhdGUtbGF5ZXItY29sb3I6I2U1NzM3MzstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtZm9jdXMtaGFuZGxlLWNvbG9yOiNlZjlhOWE7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWhvdmVyLWhhbmRsZS1jb2xvcjojZWY5YTlhOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1wcmVzc2VkLWhhbmRsZS1jb2xvcjojZWY5YTlhOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1mb2N1cy10cmFjay1jb2xvcjojZTUzOTM1Oy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1ob3Zlci10cmFjay1jb2xvcjojZTUzOTM1Oy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1wcmVzc2VkLXRyYWNrLWNvbG9yOiNlNTM5MzU7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLXRyYWNrLWNvbG9yOiNlNTM5MzV9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtc2xpZGUtdG9nZ2xley0tbWRjLXN3aXRjaC1zdGF0ZS1sYXllci1zaXplOjQ4cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcmFkaW8tYnV0dG9uIC5tZGMtZm9ybS1maWVsZHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1wcmltYXJ5LW9uLWJhY2tncm91bmQsIHdoaXRlKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1yYWRpby1idXR0b24ubWF0LXByaW1hcnl7LS1tZGMtcmFkaW8tZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjojZmZmOy0tbWRjLXJhZGlvLWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjojZmZmOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZWVlZWVlOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojZWVlZWVlOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTQpOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41NCk7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZWY2YzAwOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2VmNmMwMDstLW1kYy1yYWRpby1zZWxlY3RlZC1pY29uLWNvbG9yOiNlZjZjMDA7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNlZjZjMDA7LS1tYXQtbWRjLXJhZGlvLXJpcHBsZS1jb2xvcjogI2ZmZjstLW1hdC1tZGMtcmFkaW8tY2hlY2tlZC1yaXBwbGUtY29sb3I6ICNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5IC5tZGMtcmFkaW8tLWRpc2FibGVkK2xhYmVse2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnR7LS1tZGMtcmFkaW8tZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjojZmZmOy0tbWRjLXJhZGlvLWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjojZmZmOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZWVlZWVlOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojZWVlZWVlOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTQpOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41NCk7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZWY2YzAwOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2VmNmMwMDstLW1kYy1yYWRpby1zZWxlY3RlZC1pY29uLWNvbG9yOiNlZjZjMDA7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNlZjZjMDA7LS1tYXQtbWRjLXJhZGlvLXJpcHBsZS1jb2xvcjogI2ZmZjstLW1hdC1tZGMtcmFkaW8tY2hlY2tlZC1yaXBwbGUtY29sb3I6ICNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQgLm1kYy1yYWRpby0tZGlzYWJsZWQrbGFiZWx7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1yYWRpby1idXR0b24ubWF0LXdhcm57LS1tZGMtcmFkaW8tZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjojZmZmOy0tbWRjLXJhZGlvLWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjojZmZmOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZWVlZWVlOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojZWVlZWVlOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTQpOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41NCk7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLXJhZGlvLXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1yYWRpby1zZWxlY3RlZC1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNmNDQzMzY7LS1tYXQtbWRjLXJhZGlvLXJpcHBsZS1jb2xvcjogI2ZmZjstLW1hdC1tZGMtcmFkaW8tY2hlY2tlZC1yaXBwbGUtY29sb3I6ICNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcmFkaW8tYnV0dG9uLm1hdC13YXJuIC5tZGMtcmFkaW8tLWRpc2FibGVkK2xhYmVse2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcmFkaW8tYnV0dG9uIC5tZGMtcmFkaW97cGFkZGluZzpjYWxjKCg0MHB4IC0gMjBweCkgLyAyKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1yYWRpby1idXR0b24gLm1kYy1yYWRpbyAubWRjLXJhZGlvX19iYWNrZ3JvdW5kOjpiZWZvcmV7dG9wOmNhbGMoLTEgKiAoNDBweCAtIDIwcHgpIC8gMik7bGVmdDpjYWxjKC0xICogKDQwcHggLSAyMHB4KSAvIDIpO3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcmFkaW8tYnV0dG9uIC5tZGMtcmFkaW8gLm1kYy1yYWRpb19fbmF0aXZlLWNvbnRyb2x7dG9wOmNhbGMoKDQwcHggLSA0MHB4KSAvIDIpO3JpZ2h0OmNhbGMoKDQwcHggLSA0MHB4KSAvIDIpO2xlZnQ6Y2FsYygoNDBweCAtIDQwcHgpIC8gMik7d2lkdGg6NDBweDtoZWlnaHQ6NDBweH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1zbGlkZXJ7LS1tZGMtc2xpZGVyLWxhYmVsLWNvbnRhaW5lci1jb2xvcjp3aGl0ZTstLW1kYy1zbGlkZXItbGFiZWwtbGFiZWwtdGV4dC1jb2xvcjpibGFjazstLW1kYy1zbGlkZXItZGlzYWJsZWQtaGFuZGxlLWNvbG9yOiNmZmY7LS1tZGMtc2xpZGVyLWRpc2FibGVkLWFjdGl2ZS10cmFjay1jb2xvcjojZmZmOy0tbWRjLXNsaWRlci1kaXNhYmxlZC1pbmFjdGl2ZS10cmFjay1jb2xvcjojZmZmOy0tbWRjLXNsaWRlci13aXRoLXRpY2stbWFya3MtZGlzYWJsZWQtY29udGFpbmVyLWNvbG9yOiNmZmY7LS1tYXQtbWRjLXNsaWRlci12YWx1ZS1pbmRpY2F0b3Itb3BhY2l0eTogMC45fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXNsaWRlci5tYXQtcHJpbWFyeXstLW1kYy1zbGlkZXItaGFuZGxlLWNvbG9yOiNlZjZjMDA7LS1tZGMtc2xpZGVyLWZvY3VzLWhhbmRsZS1jb2xvcjojZWY2YzAwOy0tbWRjLXNsaWRlci1ob3Zlci1oYW5kbGUtY29sb3I6I2VmNmMwMDstLW1kYy1zbGlkZXItYWN0aXZlLXRyYWNrLWNvbG9yOiNlZjZjMDA7LS1tZGMtc2xpZGVyLWluYWN0aXZlLXRyYWNrLWNvbG9yOiNlZjZjMDA7LS1tZGMtc2xpZGVyLXdpdGgtdGljay1tYXJrcy1hY3RpdmUtY29udGFpbmVyLWNvbG9yOiMwMDA7LS1tZGMtc2xpZGVyLXdpdGgtdGljay1tYXJrcy1pbmFjdGl2ZS1jb250YWluZXItY29sb3I6I2VmNmMwMDstLW1hdC1tZGMtc2xpZGVyLXJpcHBsZS1jb2xvcjogI2VmNmMwMDstLW1hdC1tZGMtc2xpZGVyLWhvdmVyLXJpcHBsZS1jb2xvcjogcmdiYSgyMzksIDEwOCwgMCwgMC4wNSk7LS1tYXQtbWRjLXNsaWRlci1mb2N1cy1yaXBwbGUtY29sb3I6IHJnYmEoMjM5LCAxMDgsIDAsIDAuMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtc2xpZGVyLm1hdC1hY2NlbnR7LS1tZGMtc2xpZGVyLWhhbmRsZS1jb2xvcjojZWY2YzAwOy0tbWRjLXNsaWRlci1mb2N1cy1oYW5kbGUtY29sb3I6I2VmNmMwMDstLW1kYy1zbGlkZXItaG92ZXItaGFuZGxlLWNvbG9yOiNlZjZjMDA7LS1tZGMtc2xpZGVyLWFjdGl2ZS10cmFjay1jb2xvcjojZWY2YzAwOy0tbWRjLXNsaWRlci1pbmFjdGl2ZS10cmFjay1jb2xvcjojZWY2YzAwOy0tbWRjLXNsaWRlci13aXRoLXRpY2stbWFya3MtYWN0aXZlLWNvbnRhaW5lci1jb2xvcjojMDAwOy0tbWRjLXNsaWRlci13aXRoLXRpY2stbWFya3MtaW5hY3RpdmUtY29udGFpbmVyLWNvbG9yOiNlZjZjMDA7LS1tYXQtbWRjLXNsaWRlci1yaXBwbGUtY29sb3I6ICNlZjZjMDA7LS1tYXQtbWRjLXNsaWRlci1ob3Zlci1yaXBwbGUtY29sb3I6IHJnYmEoMjM5LCAxMDgsIDAsIDAuMDUpOy0tbWF0LW1kYy1zbGlkZXItZm9jdXMtcmlwcGxlLWNvbG9yOiByZ2JhKDIzOSwgMTA4LCAwLCAwLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXNsaWRlci5tYXQtd2FybnstLW1kYy1zbGlkZXItaGFuZGxlLWNvbG9yOiNmNDQzMzY7LS1tZGMtc2xpZGVyLWZvY3VzLWhhbmRsZS1jb2xvcjojZjQ0MzM2Oy0tbWRjLXNsaWRlci1ob3Zlci1oYW5kbGUtY29sb3I6I2Y0NDMzNjstLW1kYy1zbGlkZXItYWN0aXZlLXRyYWNrLWNvbG9yOiNmNDQzMzY7LS1tZGMtc2xpZGVyLWluYWN0aXZlLXRyYWNrLWNvbG9yOiNmNDQzMzY7LS1tZGMtc2xpZGVyLXdpdGgtdGljay1tYXJrcy1hY3RpdmUtY29udGFpbmVyLWNvbG9yOiNmZmY7LS1tZGMtc2xpZGVyLXdpdGgtdGljay1tYXJrcy1pbmFjdGl2ZS1jb250YWluZXItY29sb3I6I2Y0NDMzNjstLW1hdC1tZGMtc2xpZGVyLXJpcHBsZS1jb2xvcjogI2Y0NDMzNjstLW1hdC1tZGMtc2xpZGVyLWhvdmVyLXJpcHBsZS1jb2xvcjogcmdiYSgyNDQsIDY3LCA1NCwgMC4wNSk7LS1tYXQtbWRjLXNsaWRlci1mb2N1cy1yaXBwbGUtY29sb3I6IHJnYmEoMjQ0LCA2NywgNTQsIDAuMil9Ym9keS5kYXJrLW1vZGUgLm1kYy1tZW51LXN1cmZhY2V7Ym94LXNoYWRvdzowcHggNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtc3VyZmFjZSwgIzQyNDI0Mik7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICNmZmYpfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtcHJpbWFyeS1vbi1iYWNrZ3JvdW5kLCB3aGl0ZSl9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW1fX3NlY29uZGFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LXNlY29uZGFyeS1vbi1iYWNrZ3JvdW5kLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNykpfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtX19vdmVybGluZS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LWhpbnQtb24tYmFja2dyb3VuZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpKX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LGJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS13aXRoLXRyYWlsaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX2VuZHtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnQsYm9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHJhaWxpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fZW5ke2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LWljb24tb24tYmFja2dyb3VuZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpKX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbV9fZW5ke2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LWhpbnQtb24tYmFja2dyb3VuZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpKX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LGJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fY29udGVudCxib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX2VuZHtvcGFjaXR5OjAuMzh9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICNmZmYpfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fc2Vjb25kYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICNmZmYpfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fb3ZlcmxpbmUtdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgI2ZmZil9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgI2ZmZil9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHJhaWxpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fZW5ke2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjZmZmKX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQubWRjLWxpc3QtaXRlbS0td2l0aC10cmFpbGluZy1tZXRhIC5tZGMtbGlzdC1pdGVtX19lbmR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICNmZmYpfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS1zZWxlY3RlZCAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0LGJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS1hY3RpdmF0ZWQgLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtcHJpbWFyeSwgI2VmNmMwMCl9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydCxib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbS0tYWN0aXZhdGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtcHJpbWFyeSwgI2VmNmMwMCl9Ym9keS5kYXJrLW1vZGUgLm1kYy1kZXByZWNhdGVkLWxpc3QtZ3JvdXBfX3N1YmhlYWRlcntjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1wcmltYXJ5LW9uLWJhY2tncm91bmQsIHdoaXRlKX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtZGl2aWRlcjo6YWZ0ZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp3aGl0ZX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtZGl2aWRlcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1tZW51LWl0ZW1bZGlzYWJsZWRdLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLW1lbnUtaXRlbVtkaXNhYmxlZF0gLm1hdC1tZGMtbWVudS1zdWJtZW51LWljb24sYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbWVudS1pdGVtW2Rpc2FibGVkXSAubWF0LWljb24tbm8tY29sb3J7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtZGlzYWJsZWQtb24tYmFja2dyb3VuZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1tZW51LWl0ZW0gLm1hdC1pY29uLW5vLWNvbG9yLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLW1lbnUtc3VibWVudS1pY29ue2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LXByaW1hcnktb24tYmFja2dyb3VuZCwgd2hpdGUpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLW1lbnUtaXRlbTpob3Zlcjpub3QoW2Rpc2FibGVkXSksYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbWVudS1pdGVtLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KFtkaXNhYmxlZF0pLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLW1lbnUtaXRlbS5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoW2Rpc2FibGVkXSksYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbWVudS1pdGVtLWhpZ2hsaWdodGVkOm5vdChbZGlzYWJsZWRdKXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjA4KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1saXN0LWJhc2V7LS1tZGMtbGlzdC1saXN0LWl0ZW0tbGFiZWwtdGV4dC1jb2xvcjp3aGl0ZTstLW1kYy1saXN0LWxpc3QtaXRlbS1zdXBwb3J0aW5nLXRleHQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOy0tbWRjLWxpc3QtbGlzdC1pdGVtLWxlYWRpbmctaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7LS1tZGMtbGlzdC1saXN0LWl0ZW0tdHJhaWxpbmctc3VwcG9ydGluZy10ZXh0LWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTstLW1kYy1saXN0LWxpc3QtaXRlbS10cmFpbGluZy1pY29uLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTstLW1kYy1saXN0LWxpc3QtaXRlbS1zZWxlY3RlZC10cmFpbGluZy1pY29uLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTstLW1kYy1saXN0LWxpc3QtaXRlbS1kaXNhYmxlZC1sYWJlbC10ZXh0LWNvbG9yOndoaXRlOy0tbWRjLWxpc3QtbGlzdC1pdGVtLWRpc2FibGVkLWxlYWRpbmctaWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1saXN0LWxpc3QtaXRlbS1kaXNhYmxlZC10cmFpbGluZy1pY29uLWNvbG9yOndoaXRlOy0tbWRjLWxpc3QtbGlzdC1pdGVtLWhvdmVyLWxhYmVsLXRleHQtY29sb3I6d2hpdGU7LS1tZGMtbGlzdC1saXN0LWl0ZW0taG92ZXItbGVhZGluZy1pY29uLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTstLW1kYy1saXN0LWxpc3QtaXRlbS1ob3Zlci10cmFpbGluZy1pY29uLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTstLW1kYy1saXN0LWxpc3QtaXRlbS1mb2N1cy1sYWJlbC10ZXh0LWNvbG9yOndoaXRlOy0tbWRjLWxpc3QtbGlzdC1pdGVtLWhvdmVyLXN0YXRlLWxheWVyLWNvbG9yOndoaXRlOy0tbWRjLWxpc3QtbGlzdC1pdGVtLWhvdmVyLXN0YXRlLWxheWVyLW9wYWNpdHk6MC4wODstLW1kYy1saXN0LWxpc3QtaXRlbS1mb2N1cy1zdGF0ZS1sYXllci1jb2xvcjp3aGl0ZTstLW1kYy1saXN0LWxpc3QtaXRlbS1mb2N1cy1zdGF0ZS1sYXllci1vcGFjaXR5OjAuMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbGlzdC1vcHRpb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWxpc3Qtb3B0aW9uIC5tZGMtbGlzdC1pdGVtX19lbmR7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtY2hlY2ttYXJrLWNvbG9yOiMwMDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZWY2YzAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2VmNmMwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1pY29uLWNvbG9yOiNlZjZjMDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNlZjZjMDA7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiNlZWVlZWU7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNlZWVlZWU7LS1tZGMtY2hlY2tib3gtZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzgpOy0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzgpOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTQpOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41NCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbGlzdC1vcHRpb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWxpc3Qtb3B0aW9uIC5tZGMtbGlzdC1pdGVtX19lbmR7LS1tZGMtcmFkaW8tZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjojZmZmOy0tbWRjLXJhZGlvLWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjojZmZmOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZWVlZWVlOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojZWVlZWVlOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTQpOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41NCk7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZWY2YzAwOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2VmNmMwMDstLW1kYy1yYWRpby1zZWxlY3RlZC1pY29uLWNvbG9yOiNlZjZjMDA7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNlZjZjMDA7LS1tYXQtbWRjLXJhZGlvLXJpcHBsZS1jb2xvcjogI2ZmZjstLW1hdC1tZGMtcmFkaW8tY2hlY2tlZC1yaXBwbGUtY29sb3I6ICNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbGlzdC1vcHRpb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0IC5tZGMtcmFkaW8tLWRpc2FibGVkK2xhYmVsLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWxpc3Qtb3B0aW9uIC5tZGMtbGlzdC1pdGVtX19lbmQgLm1kYy1yYWRpby0tZGlzYWJsZWQrbGFiZWx7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1saXN0LW9wdGlvbi5tYXQtYWNjZW50IC5tZGMtbGlzdC1pdGVtX19zdGFydCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1saXN0LW9wdGlvbi5tYXQtYWNjZW50IC5tZGMtbGlzdC1pdGVtX19lbmR7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtY2hlY2ttYXJrLWNvbG9yOiMwMDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZWY2YzAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2VmNmMwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1pY29uLWNvbG9yOiNlZjZjMDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNlZjZjMDA7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiNlZWVlZWU7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNlZWVlZWU7LS1tZGMtY2hlY2tib3gtZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzgpOy0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzgpOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTQpOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41NCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbGlzdC1vcHRpb24ubWF0LWFjY2VudCAubWRjLWxpc3QtaXRlbV9fc3RhcnQsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbGlzdC1vcHRpb24ubWF0LWFjY2VudCAubWRjLWxpc3QtaXRlbV9fZW5key0tbWRjLXJhZGlvLWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6I2ZmZjstLW1kYy1yYWRpby1kaXNhYmxlZC11bnNlbGVjdGVkLWljb24tY29sb3I6I2ZmZjstLW1kYy1yYWRpby11bnNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2VlZWVlZTstLW1kYy1yYWRpby11bnNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2VlZWVlZTstLW1kYy1yYWRpby11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjU0KTstLW1kYy1yYWRpby11bnNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTQpOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2VmNmMwMDstLW1kYy1yYWRpby1zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNlZjZjMDA7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtaWNvbi1jb2xvcjojZWY2YzAwOy0tbWRjLXJhZGlvLXNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjojZWY2YzAwOy0tbWF0LW1kYy1yYWRpby1yaXBwbGUtY29sb3I6ICNmZmY7LS1tYXQtbWRjLXJhZGlvLWNoZWNrZWQtcmlwcGxlLWNvbG9yOiAjZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWxpc3Qtb3B0aW9uLm1hdC1hY2NlbnQgLm1kYy1saXN0LWl0ZW1fX3N0YXJ0IC5tZGMtcmFkaW8tLWRpc2FibGVkK2xhYmVsLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWxpc3Qtb3B0aW9uLm1hdC1hY2NlbnQgLm1kYy1saXN0LWl0ZW1fX2VuZCAubWRjLXJhZGlvLS1kaXNhYmxlZCtsYWJlbHtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWxpc3Qtb3B0aW9uLm1hdC13YXJuIC5tZGMtbGlzdC1pdGVtX19zdGFydCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1saXN0LW9wdGlvbi5tYXQtd2FybiAubWRjLWxpc3QtaXRlbV9fZW5key0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWNoZWNrbWFyay1jb2xvcjojZmZmOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZWVlZWVlOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojZWVlZWVlOy0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjM4KTstLW1kYy1jaGVja2JveC1kaXNhYmxlZC11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjM4KTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjU0KTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTQpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWxpc3Qtb3B0aW9uLm1hdC13YXJuIC5tZGMtbGlzdC1pdGVtX19zdGFydCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1saXN0LW9wdGlvbi5tYXQtd2FybiAubWRjLWxpc3QtaXRlbV9fZW5key0tbWRjLXJhZGlvLWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6I2ZmZjstLW1kYy1yYWRpby1kaXNhYmxlZC11bnNlbGVjdGVkLWljb24tY29sb3I6I2ZmZjstLW1kYy1yYWRpby11bnNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2VlZWVlZTstLW1kYy1yYWRpby11bnNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2VlZWVlZTstLW1kYy1yYWRpby11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjU0KTstLW1kYy1yYWRpby11bnNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTQpOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1yYWRpby1zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLXJhZGlvLXNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWF0LW1kYy1yYWRpby1yaXBwbGUtY29sb3I6ICNmZmY7LS1tYXQtbWRjLXJhZGlvLWNoZWNrZWQtcmlwcGxlLWNvbG9yOiAjZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWxpc3Qtb3B0aW9uLm1hdC13YXJuIC5tZGMtbGlzdC1pdGVtX19zdGFydCAubWRjLXJhZGlvLS1kaXNhYmxlZCtsYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1saXN0LW9wdGlvbi5tYXQtd2FybiAubWRjLWxpc3QtaXRlbV9fZW5kIC5tZGMtcmFkaW8tLWRpc2FibGVkK2xhYmVse2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbGlzdC1iYXNlLm1hdC1tZGMtbGlzdC1iYXNlIC5tZGMtbGlzdC1pdGVtLS1zZWxlY3RlZCAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWxpc3QtYmFzZS5tYXQtbWRjLWxpc3QtYmFzZSAubWRjLWxpc3QtaXRlbS0tYWN0aXZhdGVkIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1saXN0LWJhc2UubWF0LW1kYy1saXN0LWJhc2UgLm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1saXN0LWJhc2UubWF0LW1kYy1saXN0LWJhc2UgLm1kYy1saXN0LWl0ZW0tLWFjdGl2YXRlZC5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnR7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1saXN0LWJhc2UgLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19zdGFydCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1saXN0LWJhc2UgLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19jb250ZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWxpc3QtYmFzZSAubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX2VuZHtvcGFjaXR5OjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbGlzdC1iYXNley0tbWRjLWxpc3QtbGlzdC1pdGVtLW9uZS1saW5lLWNvbnRhaW5lci1oZWlnaHQ6NDhweDstLW1kYy1saXN0LWxpc3QtaXRlbS10d28tbGluZS1jb250YWluZXItaGVpZ2h0OjY0cHg7LS1tZGMtbGlzdC1saXN0LWl0ZW0tdGhyZWUtbGluZS1jb250YWluZXItaGVpZ2h0Ojg4cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbGlzdC1pdGVtLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1hdmF0YXIubWRjLWxpc3QtaXRlbS0td2l0aC1vbmUtbGluZSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1saXN0LWl0ZW0ubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWNoZWNrYm94Lm1kYy1saXN0LWl0ZW0tLXdpdGgtb25lLWxpbmUsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbGlzdC1pdGVtLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uLm1kYy1saXN0LWl0ZW0tLXdpdGgtb25lLWxpbmV7aGVpZ2h0OjU2cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbGlzdC1pdGVtLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1hdmF0YXIubWRjLWxpc3QtaXRlbS0td2l0aC10d28tbGluZXMsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbGlzdC1pdGVtLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1jaGVja2JveC5tZGMtbGlzdC1pdGVtLS13aXRoLXR3by1saW5lcyxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1saXN0LWl0ZW0ubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24ubWRjLWxpc3QtaXRlbS0td2l0aC10d28tbGluZXN7aGVpZ2h0OjcycHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcGFnaW5hdG9ye2JhY2tncm91bmQ6IzQyNDI0Mjtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC44Nyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcGFnaW5hdG9yLWljb257ZmlsbDpyZ2JhKDI1NSwyNTUsMjU1LC41NCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcGFnaW5hdG9yLWRlY3JlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1wYWdpbmF0b3ItaW5jcmVtZW50e2JvcmRlci10b3A6MnB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjU0KTtib3JkZXItcmlnaHQ6MnB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjU0KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1wYWdpbmF0b3ItZmlyc3QsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcGFnaW5hdG9yLWxhc3R7Ym9yZGVyLXRvcDoycHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuNTQpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LW1kYy1wYWdpbmF0b3ItZGVjcmVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LW1kYy1wYWdpbmF0b3ItaW5jcmVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LW1kYy1wYWdpbmF0b3ItZmlyc3QsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtbWRjLXBhZ2luYXRvci1sYXN0e2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtbWRjLXBhZ2luYXRvci1pY29ue2ZpbGw6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXBhZ2luYXRvciAubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4e21pbi1oZWlnaHQ6NDBweH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1wYWdpbmF0b3IgLm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVyIC5tYXQtbWRjLWZvcm0tZmllbGQtZmxleCAubWF0LW1kYy1mbG9hdGluZy1sYWJlbHt0b3A6MjBweH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1wYWdpbmF0b3IgLm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVyLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLW5vdGNoZWQtb3V0bGluZS0tdXBncmFkZWQgLm1kYy1mbG9hdGluZy1sYWJlbC0tZmxvYXQtYWJvdmV7LS1tYXQtbWRjLWZvcm0tZmllbGQtbGFiZWwtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKCAtMjYuNzVweCkgc2NhbGUodmFyKC0tbWF0LW1kYy1mb3JtLWZpZWxkLWZsb2F0aW5nLWxhYmVsLXNjYWxlLCAwLjc1KSk7dHJhbnNmb3JtOnZhcigtLW1hdC1tZGMtZm9ybS1maWVsZC1sYWJlbC10cmFuc2Zvcm0pfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXBhZ2luYXRvciAubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXIubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXh7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1wYWdpbmF0b3IgLm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVyOm5vdCgubWRjLXRleHQtZmllbGQtLW91dGxpbmVkKSAubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcGFnaW5hdG9yIC5tZGMtdGV4dC1maWVsZC0tbm8tbGFiZWw6bm90KC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQpOm5vdCgubWRjLXRleHQtZmllbGQtLXRleHRhcmVhKSAubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcGFnaW5hdG9yIC5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlcjpub3QoLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCkgLm1hdC1tZGMtZmxvYXRpbmctbGFiZWx7ZGlzcGxheTpub25lfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXBhZ2luYXRvci1jb250YWluZXJ7bWluLWhlaWdodDo1NnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYixib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItbGlua3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiIC5tZGMtdGFiX190ZXh0LWxhYmVsLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi1saW5rIC5tZGMtdGFiX190ZXh0LWxhYmVse2NvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWIubWF0LW1kYy10YWItZGlzYWJsZWQgLm1kYy10YWJfX3JpcHBsZTo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi5tYXQtbWRjLXRhYi1kaXNhYmxlZCAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi1saW5rLm1hdC1tZGMtdGFiLWRpc2FibGVkIC5tZGMtdGFiX19yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItbGluay5tYXQtbWRjLXRhYi1kaXNhYmxlZCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpLm1kYy10YWItLWFjdGl2ZSAubWRjLXRhYl9fdGV4dC1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItbGluazpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKS5tZGMtdGFiLS1hY3RpdmUgLm1kYy10YWJfX3RleHQtbGFiZWx7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWI6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkgLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50LS11bmRlcmxpbmUsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiLWxpbms6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkgLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50LS11bmRlcmxpbmV7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy10YWItaW5kaWNhdG9yLWFjdGl2ZS1pbmRpY2F0b3ItY29sb3IsICNlZjZjMDApfWJvZHkuZGFyay1tb2RlIC5tZGMtdGFiX19yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItbGluayAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LW1kYy10YWI6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkubWRjLXRhYi0tYWN0aXZlIC5tZGMtdGFiX190ZXh0LWxhYmVsLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYi1saW5rOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpLm1kYy10YWItLWFjdGl2ZSAubWRjLXRhYl9fdGV4dC1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYjpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKS5tZGMtdGFiLS1hY3RpdmUgLm1kYy10YWJfX3RleHQtbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LW1kYy10YWItbGluazpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKS5tZGMtdGFiLS1hY3RpdmUgLm1kYy10YWJfX3RleHQtbGFiZWx7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LW1kYy10YWI6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkgLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50LS11bmRlcmxpbmUsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC1tZGMtdGFiLWxpbms6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkgLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50LS11bmRlcmxpbmUsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LW1kYy10YWI6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkgLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50LS11bmRlcmxpbmUsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LW1kYy10YWItbGluazpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKSAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLXVuZGVybGluZXtib3JkZXItY29sb3I6dmFyKC0tbWRjLXRhYi1pbmRpY2F0b3ItYWN0aXZlLWluZGljYXRvci1jb2xvciwgI2VmNmMwMCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1kYy10YWJfX3JpcHBsZTo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYi1saW5rIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWRjLXRhYl9fcmlwcGxlOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LW1kYy10YWIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC1tZGMtdGFiLWxpbmsgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtbWRjLXRhYjpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKS5tZGMtdGFiLS1hY3RpdmUgLm1kYy10YWJfX3RleHQtbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtbWRjLXRhYi1saW5rOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpLm1kYy10YWItLWFjdGl2ZSAubWRjLXRhYl9fdGV4dC1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LW1kYy10YWI6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkubWRjLXRhYi0tYWN0aXZlIC5tZGMtdGFiX190ZXh0LWxhYmVsLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtbWRjLXRhYi1saW5rOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpLm1kYy10YWItLWFjdGl2ZSAubWRjLXRhYl9fdGV4dC1sYWJlbHtjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtd2FybiAubWF0LW1kYy10YWI6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkgLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50LS11bmRlcmxpbmUsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtbWRjLXRhYi1saW5rOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpIC5tZGMtdGFiLWluZGljYXRvcl9fY29udGVudC0tdW5kZXJsaW5lLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtbWRjLXRhYjpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKSAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLXVuZGVybGluZSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LW1kYy10YWItbGluazpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKSAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLXVuZGVybGluZXtib3JkZXItY29sb3I6dmFyKC0tbWRjLXRhYi1pbmRpY2F0b3ItYWN0aXZlLWluZGljYXRvci1jb2xvciwgI2Y0NDMzNil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC13YXJuIC5tZGMtdGFiX19yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC1tZGMtdGFiIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtd2FybiAubWF0LW1kYy10YWItbGluayAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tZGMtdGFiX19yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LW1kYy10YWIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LW1kYy10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LW1kYy10YWItbGluayAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5ey0tbWF0LW1kYy10YWItaGVhZGVyLXdpdGgtYmFja2dyb3VuZC1iYWNrZ3JvdW5kLWNvbG9yOiAjZWY2YzAwOy0tbWF0LW1kYy10YWItaGVhZGVyLXdpdGgtYmFja2dyb3VuZC1mb3JlZ3JvdW5kLWNvbG9yOiAjMDAwfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50ey0tbWF0LW1kYy10YWItaGVhZGVyLXdpdGgtYmFja2dyb3VuZC1iYWNrZ3JvdW5kLWNvbG9yOiAjZWY2YzAwOy0tbWF0LW1kYy10YWItaGVhZGVyLXdpdGgtYmFja2dyb3VuZC1mb3JlZ3JvdW5kLWNvbG9yOiAjMDAwfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm57LS1tYXQtbWRjLXRhYi1oZWFkZXItd2l0aC1iYWNrZ3JvdW5kLWJhY2tncm91bmQtY29sb3I6ICNmNDQzMzY7LS1tYXQtbWRjLXRhYi1oZWFkZXItd2l0aC1iYWNrZ3JvdW5kLWZvcmVncm91bmQtY29sb3I6ICNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjZmZmKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItaGVhZGVyIC5tZGMtdGFie2hlaWdodDo0OHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtZm9ybS1maWVsZHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1wcmltYXJ5LW9uLWJhY2tncm91bmQsIHdoaXRlKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1jaGVja2JveCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveF9fcmlwcGxle2JhY2tncm91bmQ6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1jaGVja2JveC5tYXQtcHJpbWFyeXstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1jaGVja21hcmstY29sb3I6IzAwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiNlZjZjMDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojZWY2YzAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWljb24tY29sb3I6I2VmNmMwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6I2VmNmMwMDstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2VlZWVlZTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2VlZWVlZTstLW1kYy1jaGVja2JveC1kaXNhYmxlZC1zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zOCk7LS1tZGMtY2hlY2tib3gtZGlzYWJsZWQtdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zOCk7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41NCk7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjU0KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1jaGVja2JveC5tYXQtcHJpbWFyeSAubWRjLWNoZWNrYm94LS1zZWxlY3RlZH4ubWF0LW1kYy1jaGVja2JveC1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1jaGVja2JveC5tYXQtcHJpbWFyeSAubWRjLWNoZWNrYm94LS1zZWxlY3RlZH4ubWRjLWNoZWNrYm94X19yaXBwbGV7YmFja2dyb3VuZDojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWNoZWNrYm94Lm1hdC1hY2NlbnR7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtY2hlY2ttYXJrLWNvbG9yOiMwMDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZWY2YzAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2VmNmMwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1pY29uLWNvbG9yOiNlZjZjMDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNlZjZjMDA7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiNlZWVlZWU7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNlZWVlZWU7LS1tZGMtY2hlY2tib3gtZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzgpOy0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzgpOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTQpOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41NCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtY2hlY2tib3gubWF0LWFjY2VudCAubWRjLWNoZWNrYm94LS1zZWxlY3RlZH4ubWF0LW1kYy1jaGVja2JveC1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1jaGVja2JveC5tYXQtYWNjZW50IC5tZGMtY2hlY2tib3gtLXNlbGVjdGVkfi5tZGMtY2hlY2tib3hfX3JpcHBsZXtiYWNrZ3JvdW5kOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtY2hlY2tib3gubWF0LXdhcm57LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtY2hlY2ttYXJrLWNvbG9yOiNmZmY7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiNlZWVlZWU7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNlZWVlZWU7LS1tZGMtY2hlY2tib3gtZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzgpOy0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzgpOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTQpOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41NCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtY2hlY2tib3gubWF0LXdhcm4gLm1kYy1jaGVja2JveC0tc2VsZWN0ZWR+Lm1hdC1tZGMtY2hlY2tib3gtcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtY2hlY2tib3gubWF0LXdhcm4gLm1kYy1jaGVja2JveC0tc2VsZWN0ZWR+Lm1kYy1jaGVja2JveF9fcmlwcGxle2JhY2tncm91bmQ6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1jaGVja2JveC1kaXNhYmxlZCBsYWJlbHtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3h7cGFkZGluZzpjYWxjKCh2YXIoLS1tZGMtY2hlY2tib3gtcmlwcGxlLXNpemUsIDQwcHgpIC0gMThweCkgLyAyKTttYXJnaW46Y2FsYygodmFyKC0tbWRjLWNoZWNrYm94LXRvdWNoLXRhcmdldC1zaXplLCA0MHB4KSAtIDQwcHgpIC8gMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5ke3RvcDpjYWxjKCh2YXIoLS1tZGMtY2hlY2tib3gtcmlwcGxlLXNpemUsIDQwcHgpIC0gMThweCkgLyAyKTtsZWZ0OmNhbGMoKHZhcigtLW1kYy1jaGVja2JveC1yaXBwbGUtc2l6ZSwgNDBweCkgLSAxOHB4KSAvIDIpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2x7dG9wOmNhbGMoKDQwcHggLSB2YXIoLS1tZGMtY2hlY2tib3gtdG91Y2gtdGFyZ2V0LXNpemUsIDQwcHgpKSAvIDIpO3JpZ2h0OmNhbGMoKDQwcHggLSB2YXIoLS1tZGMtY2hlY2tib3gtdG91Y2gtdGFyZ2V0LXNpemUsIDQwcHgpKSAvIDIpO2xlZnQ6Y2FsYygoNDBweCAtIHZhcigtLW1kYy1jaGVja2JveC10b3VjaC10YXJnZXQtc2l6ZSwgNDBweCkpIC8gMik7d2lkdGg6dmFyKC0tbWRjLWNoZWNrYm94LXRvdWNoLXRhcmdldC1zaXplLCA0MHB4KTtoZWlnaHQ6dmFyKC0tbWRjLWNoZWNrYm94LXRvdWNoLXRhcmdldC1zaXplLCA0MHB4KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1idXR0b24ubWF0LXVudGhlbWVkey0tbWRjLXRleHQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1idXR0b24ubWF0LXByaW1hcnl7LS1tZGMtdGV4dC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWRjLXRleHQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1idXR0b24ubWF0LXdhcm57LS1tZGMtdGV4dC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWJ1dHRvbltkaXNhYmxlZF1bZGlzYWJsZWRdey0tbWRjLXRleHQtYnV0dG9uLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOy0tbWRjLXRleHQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC11bnRoZW1lZHstLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojNDI0MjQyOy0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWRjLWZpbGxlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiNlZjZjMDA7LS1tZGMtZmlsbGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiMwMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24ubWF0LWFjY2VudHstLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZWY2YzAwOy0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC13YXJuey0tbWRjLWZpbGxlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiNmNDQzMzY7LS1tZGMtZmlsbGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXXstLW1kYy1maWxsZWQtYnV0dG9uLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpOy0tbWRjLWZpbGxlZC1idXR0b24tZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7LS1tZGMtZmlsbGVkLWJ1dHRvbi1jb250YWluZXItY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTstLW1kYy1maWxsZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LXVudGhlbWVkey0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiM0MjQyNDI7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeXstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZWY2YzAwOy0tbWRjLXByb3RlY3RlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LWFjY2VudHstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZWY2YzAwOy0tbWRjLXByb3RlY3RlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LXdhcm57LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1jb250YWluZXItY29sb3I6I2Y0NDMzNjstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1yYWlzZWQtYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1kaXNhYmxlZC1jb250YWluZXItY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOy0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMik7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1lbGV2YXRpb246MH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1vdXRsaW5lZC1idXR0b257LS1tZGMtb3V0bGluZWQtYnV0dG9uLW91dGxpbmUtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LXVudGhlbWVkey0tbWRjLW91dGxpbmVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWRjLW91dGxpbmVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC1hY2NlbnR7LS1tZGMtb3V0bGluZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LXdhcm57LS1tZGMtb3V0bGluZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1vdXRsaW5lZC1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXXstLW1kYy1vdXRsaW5lZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7LS1tZGMtb3V0bGluZWQtYnV0dG9uLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOy0tbWRjLW91dGxpbmVkLWJ1dHRvbi1vdXRsaW5lLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMik7LS1tZGMtb3V0bGluZWQtYnV0dG9uLWRpc2FibGVkLW91dGxpbmUtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1idXR0b24sYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmZmY7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1idXR0b246aG92ZXIgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjA4fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtYnV0dG9uOmFjdGl2ZSAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1vdXRsaW5lZC1idXR0b246YWN0aXZlIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjI0fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWJ1dHRvbi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LXByaW1hcnl7LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2VmNmMwMDstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyMzksIDEwOCwgMCwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1idXR0b24ubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LWFjY2VudHstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjZWY2YzAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDIzOSwgMTA4LCAwLCAwLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWJ1dHRvbi5tYXQtd2Fybixib2R5LmRhcmstbW9kZSAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LXdhcm57LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2Y0NDMzNjstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyNDQsIDY3LCA1NCwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1yYWlzZWQtYnV0dG9uLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmZmY7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1yYWlzZWQtYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjA4fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXJhaXNlZC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1yYWlzZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbjphY3RpdmUgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b246YWN0aXZlIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjI0fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnksYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24ubWF0LXByaW1hcnl7LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogIzAwMDstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1yYWlzZWQtYnV0dG9uLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC13YXJuey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmZmY7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1yYWlzZWQtYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZXtoZWlnaHQ6MzZweH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1pY29uLWJ1dHRvbnstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjZmZmOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtaWNvbi1idXR0b246aG92ZXIgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMDh9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtaWNvbi1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1pY29uLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZXtvcGFjaXR5Oi4yNH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1pY29uLWJ1dHRvbjphY3RpdmUgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LXByaW1hcnl7LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2VmNmMwMDstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyMzksIDEwOCwgMCwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNlZjZjMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjM5LCAxMDgsIDAsIDAuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LXdhcm57LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2Y0NDMzNjstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyNDQsIDY3LCA1NCwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtcHJpbWFyeXstLW1kYy1pY29uLWJ1dHRvbi1pY29uLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LWFjY2VudHstLW1kYy1pY29uLWJ1dHRvbi1pY29uLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LXdhcm57LS1tZGMtaWNvbi1idXR0b24taWNvbi1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWljb24tYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17LS1tZGMtaWNvbi1idXR0b24taWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7LS1tZGMtaWNvbi1idXR0b24tZGlzYWJsZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZXt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O3BhZGRpbmc6MTJweH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmd7bWF4LWhlaWdodDo0OHB4O21heC13aWR0aDo0OHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UubWRjLWljb24tYnV0dG9uLS1yZWR1Y2VkLXNpemUgLm1kYy1pY29uLWJ1dHRvbl9fcmlwcGxle3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7bWFyZ2luLXRvcDo0cHg7bWFyZ2luLWJvdHRvbTo0cHg7bWFyZ2luLXJpZ2h0OjRweDttYXJnaW4tbGVmdDo0cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZS5tZGMtaWNvbi1idXR0b24tLXJlZHVjZWQtc2l6ZSAubWRjLWljb24tYnV0dG9uX19mb2N1cy1yaW5ne21heC1oZWlnaHQ6NDBweDttYXgtd2lkdGg6NDBweH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlIC5tZGMtaWNvbi1idXR0b25fX3RvdWNoe3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7aGVpZ2h0OjQ4cHg7bGVmdDo1MCU7d2lkdGg6NDhweDt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC01MCUpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZhYixib2R5LmRhcmstbW9kZSAubWF0LW1kYy1taW5pLWZhYnstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjZmZmOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZmFiOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLW1pbmktZmFiOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjA4fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZhYi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZhYi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1taW5pLWZhYi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLW1pbmktZmFiLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjI0fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZhYjphY3RpdmUgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbWluaS1mYWI6YWN0aXZlIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjI0fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZhYi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1taW5pLWZhYi5tYXQtcHJpbWFyeXstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjMDAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZmFiLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbWluaS1mYWIubWF0LWFjY2VudHstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjMDAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZmFiLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLW1pbmktZmFiLm1hdC13YXJuey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmZmY7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mYWIubWF0LXVudGhlbWVkLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLW1pbmktZmFiLm1hdC11bnRoZW1lZHstLW1kYy1mYWItY29udGFpbmVyLWNvbG9yOiM0MjQyNDI7LS1tZGMtZmFiLWljb24tY29sb3I6I2ZmZjstLW1hdC1tZGMtZmFiLWNvbG9yOiAjZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZhYi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1taW5pLWZhYi5tYXQtcHJpbWFyeXstLW1kYy1mYWItY29udGFpbmVyLWNvbG9yOiNlZjZjMDA7LS1tZGMtZmFiLWljb24tY29sb3I6IzAwMDstLW1hdC1tZGMtZmFiLWNvbG9yOiAjMDAwfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZhYi5tYXQtYWNjZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLW1pbmktZmFiLm1hdC1hY2NlbnR7LS1tZGMtZmFiLWNvbnRhaW5lci1jb2xvcjojZWY2YzAwOy0tbWRjLWZhYi1pY29uLWNvbG9yOiMwMDA7LS1tYXQtbWRjLWZhYi1jb2xvcjogIzAwMH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mYWIubWF0LXdhcm4sYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbWluaS1mYWIubWF0LXdhcm57LS1tZGMtZmFiLWNvbnRhaW5lci1jb2xvcjojZjQ0MzM2Oy0tbWRjLWZhYi1pY29uLWNvbG9yOiNmZmY7LS1tYXQtbWRjLWZhYi1jb2xvcjogI2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mYWJbZGlzYWJsZWRdW2Rpc2FibGVkXSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1taW5pLWZhYltkaXNhYmxlZF1bZGlzYWJsZWRdey0tbWRjLWZhYi1jb250YWluZXItY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTstLW1kYy1mYWItaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7LS1tYXQtbWRjLWZhYi1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXNuYWNrLWJhci1jb250YWluZXJ7LS1tYXQtbWRjLXNuYWNrLWJhci1idXR0b24tY29sb3I6IHJnYmEoMCwgMCwgMCwgMC44Nyk7LS1tZGMtc25hY2tiYXItY29udGFpbmVyLWNvbG9yOiNkOWQ5ZDk7LS1tZGMtc25hY2tiYXItc3VwcG9ydGluZy10ZXh0LWNvbG9yOnJnYmEoNjYsIDY2LCA2NiwgMC44Nyl9Ym9keS5kYXJrLW1vZGUgLm1kYy1kYXRhLXRhYmxle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLXRoZW1lLXN1cmZhY2UsICM0MjQyNDIpO2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tZGMtZGF0YS10YWJsZV9fcm93e2JhY2tncm91bmQtY29sb3I6aW5oZXJpdH1ib2R5LmRhcmstbW9kZSAubWRjLWRhdGEtdGFibGVfX2hlYWRlci1jZWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLXRoZW1lLXN1cmZhY2UsICM0MjQyNDIpfWJvZHkuZGFyay1tb2RlIC5tZGMtZGF0YS10YWJsZV9fcm93LS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LCAxMDgsIDAsIDAuMDQpfWJvZHkuZGFyay1tb2RlIC5tZGMtZGF0YS10YWJsZV9fcGFnaW5hdGlvbi1yb3dzLXBlci1wYWdlLXNlbGVjdC0tb3V0bGluZWQ6bm90KC5tZGMtc2VsZWN0LS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsYm9keS5kYXJrLW1vZGUgLm1kYy1kYXRhLXRhYmxlX19wYWdpbmF0aW9uLXJvd3MtcGVyLXBhZ2Utc2VsZWN0LS1vdXRsaW5lZDpub3QoLm1kYy1zZWxlY3QtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsYm9keS5kYXJrLW1vZGUgLm1kYy1kYXRhLXRhYmxlX19wYWdpbmF0aW9uLXJvd3MtcGVyLXBhZ2Utc2VsZWN0LS1vdXRsaW5lZDpub3QoLm1kYy1zZWxlY3QtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1kYy1kYXRhLXRhYmxlX19jZWxsLGJvZHkuZGFyay1tb2RlIC5tZGMtZGF0YS10YWJsZV9faGVhZGVyLWNlbGx7Ym9yZGVyLWJvdHRvbS1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tZGMtZGF0YS10YWJsZV9fcGFnaW5hdGlvbntib3JkZXItdG9wLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1kYy1kYXRhLXRhYmxlX19yb3c6bm90KC5tZGMtZGF0YS10YWJsZV9fcm93LS1zZWxlY3RlZCk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDQpfWJvZHkuZGFyay1tb2RlIC5tZGMtZGF0YS10YWJsZV9faGVhZGVyLWNlbGx7Y29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjg3KX1ib2R5LmRhcmstbW9kZSAubWRjLWRhdGEtdGFibGVfX3BhZ2luYXRpb24tdG90YWwsYm9keS5kYXJrLW1vZGUgLm1kYy1kYXRhLXRhYmxlX19wYWdpbmF0aW9uLXJvd3MtcGVyLXBhZ2UtbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1kYy1kYXRhLXRhYmxlX19jZWxse2NvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC44Nyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFibGV7YmFja2dyb3VuZDojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYmxlIC5tZGMtZGF0YS10YWJsZV9fcm93e2hlaWdodDo1MnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYmxlIC5tZGMtZGF0YS10YWJsZV9fcGFnaW5hdGlvbnttaW4taGVpZ2h0OjUycHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFibGUgLm1kYy1kYXRhLXRhYmxlX19oZWFkZXItcm93e2hlaWdodDo1NnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXByb2dyZXNzLXNwaW5uZXJ7LS1tZGMtY2lyY3VsYXItcHJvZ3Jlc3MtYWN0aXZlLWluZGljYXRvci1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXByb2dyZXNzLXNwaW5uZXIubWF0LWFjY2VudHstLW1kYy1jaXJjdWxhci1wcm9ncmVzcy1hY3RpdmUtaW5kaWNhdG9yLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtd2FybnstLW1kYy1jaXJjdWxhci1wcm9ncmVzcy1hY3RpdmUtaW5kaWNhdG9yLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1jb250ZW50e2NvbG9yOiNmZmY7YmFja2dyb3VuZDojZWY2YzAwfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgYm9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1jb250ZW50e291dGxpbmU6c29saWQgMXB4O2JvcmRlci1yYWRpdXM6MH1ib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLWFjY2VudCAubWF0LWJhZGdlLWNvbnRlbnR7YmFja2dyb3VuZDojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS13YXJuIC5tYXQtYmFkZ2UtY29udGVudHtjb2xvcjojZmZmO2JhY2tncm91bmQ6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLWRpc2FibGVkIC5tYXQtYmFkZ2UtY29udGVudHtiYWNrZ3JvdW5kOiM2ZTZlNmU7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJ7Ym94LXNoYWRvdzowcHggOHB4IDEwcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kOiM0MjQyNDI7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSxib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksYm9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzpub25lfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmR7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZSsubWF0LWJ1dHRvbi10b2dnbGV7Ym9yZGVyLWxlZnQ6c29saWQgMXB4ICM1OTU5NTl9Ym9keS5kYXJrLW1vZGUgW2Rpcj1ydGxdIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZSsubWF0LWJ1dHRvbi10b2dnbGV7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6c29saWQgMXB4ICM1OTU5NTl9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWJ1dHRvbi10b2dnbGUtdmVydGljYWwgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDpub25lO2JvcmRlci10b3A6c29saWQgMXB4ICM1OTU5NTl9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWR7YmFja2dyb3VuZC1jb2xvcjojMjEyMTIxO2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2VkLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmR7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyk7YmFja2dyb3VuZC1jb2xvcjojMDAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJke2JhY2tncm91bmQ6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCxib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZHtib3JkZXI6c29saWQgMXB4ICM1OTU5NTl9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnR7bGluZS1oZWlnaHQ6NDhweH1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWFycm93e2ZpbGw6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItdG9nZ2xlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtY2FsZW5kYXItbmV4dC1idXR0b24sYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1jYWxlbmRhci1wcmV2aW91cy1idXR0b257Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlci1kaXZpZGVyOjphZnRlcntiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktbGFiZWx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGUtcmFuZ2UtaW5wdXQtc2VwYXJhdG9ye2NvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1kYXRlLXJhbmdlLWlucHV0LXNlcGFyYXRvcntjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1pbi1wcmV2aWV3e2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjI0KX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyMzksMTA4LDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCxib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDksMTcxLDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjM5LCAxMDgsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBsZWZ0LCByZ2JhKDIzOSwgMTA4LCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsYm9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2UubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmFmdGVye2JhY2tncm91bmQ6I2E4ZGFiNX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQ6IzQ2YTM1ZX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC40KX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZn1ib2R5LmRhcmstbW9kZSAuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLGJvZHkuZGFyay1tb2RlIC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC4zKX1AbWVkaWEoaG92ZXI6IGhvdmVyKXtib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksMTA4LDAsLjMpfX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudHtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQtY29sb3I6IzQyNDI0Mjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDIzOSwxMDgsMCwuMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDksMTcxLDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDIzOSwgMTA4LCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGxlZnQsIHJnYmEoMjM5LCAxMDgsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2UubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmFmdGVye2JhY2tncm91bmQ6I2E4ZGFiNX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kOiM0NmEzNWV9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksMTA4LDAsLjQpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksMTA4LDAsLjMpfUBtZWRpYShob3ZlcjogaG92ZXIpe2JvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNlbGw6bm90KC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCk6aG92ZXI+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC4zKX19Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0NCw2Nyw1NCwuMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0OSwxNzEsMCwuMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyNDQsIDY3LCA1NCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGxlZnQsIHJnYmEoMjQ0LCA2NywgNTQsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZS5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YWZ0ZXJ7YmFja2dyb3VuZDojYThkYWI1fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZDojNDZhMzVlfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzY7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsNjcsNTQsLjQpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS10b2RheS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCAjZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCksYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsNjcsNTQsLjMpfUBtZWRpYShob3ZlcjogaG92ZXIpe2JvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jZWxsOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQpOmhvdmVyPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuMyl9fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50LXRvdWNoe2JveC1zaGFkb3c6MHB4IDExcHggMTVweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZle2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmUubWF0LWFjY2VudHtjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZlLm1hdC13YXJue2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlLXJhbmdlLWlucHV0LWlubmVyW2Rpc2FibGVkXXtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItY29udHJvbHMgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZXt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O3BhZGRpbmc6OHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItY29udHJvbHMgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSAubWRjLWljb24tYnV0dG9uX19mb2N1cy1yaW5ne21heC1oZWlnaHQ6NDBweDttYXgtd2lkdGg6NDBweH1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWNvbnRyb2xzIC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UubWRjLWljb24tYnV0dG9uLS1yZWR1Y2VkLXNpemUgLm1kYy1pY29uLWJ1dHRvbl9fcmlwcGxle3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7bWFyZ2luLXRvcDowcHg7bWFyZ2luLWJvdHRvbTowcHg7bWFyZ2luLXJpZ2h0OjBweDttYXJnaW4tbGVmdDowcHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1jb250cm9scyAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlLm1kYy1pY29uLWJ1dHRvbi0tcmVkdWNlZC1zaXplIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmd7bWF4LWhlaWdodDo0MHB4O21heC13aWR0aDo0MHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItY29udHJvbHMgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSAubWRjLWljb24tYnV0dG9uX190b3VjaHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2hlaWdodDo0MHB4O2xlZnQ6NTAlO3dpZHRoOjQwcHg7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWNvbnRyb2xzIC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UgLm1hdC1tZGMtYnV0dG9uLXRvdWNoLXRhcmdldHtkaXNwbGF5Om5vbmV9Ym9keS5kYXJrLW1vZGUgLm1hdC1kaXZpZGVye2JvcmRlci10b3AtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGl2aWRlci12ZXJ0aWNhbHtib3JkZXItcmlnaHQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVse2JhY2tncm91bmQ6IzQyNDI0Mjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWFjdGlvbi1yb3d7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSksYm9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSxib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOmhvdmVyOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSl7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNCl9QG1lZGlhKGhvdmVyOiBub25lKXtib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCk6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZDojNDI0MjQyfX1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGV7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24sYm9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24taW5kaWNhdG9yOjphZnRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGUsYm9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9ue2NvbG9yOmluaGVyaXR9Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVye2hlaWdodDo0OHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5tYXQtZXhwYW5kZWR7aGVpZ2h0OjY0cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1pY29uLm1hdC1wcmltYXJ5e2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1pY29uLm1hdC1hY2NlbnR7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWljb24ubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWRyYXdlci1jb250YWluZXJ7YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kcmF3ZXJ7YmFja2dyb3VuZC1jb2xvcjojNDI0MjQyO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kcmF3ZXIubWF0LWRyYXdlci1wdXNoe2JhY2tncm91bmQtY29sb3I6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LWRyYXdlcjpub3QoLm1hdC1kcmF3ZXItc2lkZSl7Ym94LXNoYWRvdzowcHggOHB4IDEwcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWRyYXdlci1zaWRle2JvcmRlci1yaWdodDpzb2xpZCAxcHggcmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZHJhd2VyLXNpZGUubWF0LWRyYXdlci1lbmR7Ym9yZGVyLWxlZnQ6c29saWQgMXB4IHJnYmEoMjU1LDI1NSwyNTUsLjEyKTtib3JkZXItcmlnaHQ6bm9uZX1ib2R5LmRhcmstbW9kZSBbZGlyPXJ0bF0gLm1hdC1kcmF3ZXItc2lkZXtib3JkZXItbGVmdDpzb2xpZCAxcHggcmdiYSgyNTUsMjU1LDI1NSwuMTIpO2JvcmRlci1yaWdodDpub25lfWJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWRyYXdlci1zaWRlLm1hdC1kcmF3ZXItZW5ke2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCByZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kcmF3ZXItYmFja2Ryb3AubWF0LWRyYXdlci1zaG93bntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTg5LDE4OSwxODksLjYpfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIuY2RrLWtleWJvYXJkLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5jZGstcHJvZ3JhbS1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXI6aG92ZXI6bm90KFthcmlhLWRpc2FibGVkXSksYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlcjpob3ZlclthcmlhLWRpc2FibGVkPWZhbHNlXXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjA0KX1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyOmhvdmVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV17Y3Vyc29yOmRlZmF1bHR9QG1lZGlhKGhvdmVyOiBub25lKXtib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyOmhvdmVye2JhY2tncm91bmQ6bm9uZX19Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtb3B0aW9uYWx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0e2JhY2tncm91bmQtY29sb3I6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbntjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc3RhdGUtZG9uZSxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29ue2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0e2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc3RhdGUtZXJyb3J7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApO2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtbGFiZWwubWF0LXN0ZXAtbGFiZWwtYWN0aXZle2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtbGFiZWwubWF0LXN0ZXAtbGFiZWwtZXJyb3J7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbCxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXBwZXItdmVydGljYWx7YmFja2dyb3VuZC1jb2xvcjojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcHBlci12ZXJ0aWNhbC1saW5lOjpiZWZvcmV7Ym9yZGVyLWxlZnQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YWZ0ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLWhvcml6b250YWwtbGluZXtib3JkZXItdG9wLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXJ7aGVpZ2h0OjcycHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWJvdHRvbSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC12ZXJ0aWNhbC1zdGVwcGVyLWhlYWRlcntwYWRkaW5nOjI0cHggMjRweH1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXBwZXItdmVydGljYWwtbGluZTo6YmVmb3Jle3RvcDotMTZweDtib3R0b206LTE2cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWJvdHRvbSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmFmdGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjpiZWZvcmV7dG9wOjM2cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWJvdHRvbSAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbC1saW5le3RvcDozNnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtc29ydC1oZWFkZXItYXJyb3d7Y29sb3I6I2M2YzZjNn1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXJ7YmFja2dyb3VuZDojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLm1hdC1wcmltYXJ5e2JhY2tncm91bmQ6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhci5tYXQtYWNjZW50e2JhY2tncm91bmQ6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhci5tYXQtd2FybntiYWNrZ3JvdW5kOiNmNDQzMzY7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1zZWxlY3QtdmFsdWUsYm9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtc2VsZWN0LWFycm93LGJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6aW5oZXJpdH1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOmN1cnJlbnRDb2xvcn1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXItbXVsdGlwbGUtcm93c3ttaW4taGVpZ2h0OjY0cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLXJvdyxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXItc2luZ2xlLXJvd3toZWlnaHQ6NjRweH1AbWVkaWEobWF4LXdpZHRoOiA1OTlweCl7Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3N7bWluLWhlaWdodDo1NnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhci1yb3csYm9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLXNpbmdsZS1yb3d7aGVpZ2h0OjU2cHh9fWJvZHkuZGFyay1tb2RlIC5tYXQtdHJlZXtiYWNrZ3JvdW5kOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC10cmVlLW5vZGUsYm9keS5kYXJrLW1vZGUgLm1hdC1uZXN0ZWQtdHJlZS1ub2Rle2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10cmVlLW5vZGV7bWluLWhlaWdodDo0OHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24sYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbntjb2xvcjppbmhlcml0O2JhY2tncm91bmQ6cmdiYSgwLDAsMCwwKX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnl7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtYWNjZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnR7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtd2Fybixib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC13YXJuIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtd2FybiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm4gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7b3BhY2l0eTouMTtiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQ6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCl7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbixib2R5LmRhcmstbW9kZSAubWF0LWZhYixib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFie2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnksYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnl7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1hY2NlbnR7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2Fybixib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtd2Fybixib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC13YXJue2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4sYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXdhcm57YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLGJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b246bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b246bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKTphY3RpdmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1mYWI6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNnB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggMThweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWZhYjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDdweCA4cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxMnB4IDE3cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA1cHggMjJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b24ubWF0LXVudGhlbWVkey0tbWRjLXRleHQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b24ubWF0LXByaW1hcnl7LS1tZGMtdGV4dC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWRjLXRleHQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b24ubWF0LXdhcm57LS1tZGMtdGV4dC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWJ1dHRvbltkaXNhYmxlZF1bZGlzYWJsZWRdey0tbWRjLXRleHQtYnV0dG9uLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOy0tbWRjLXRleHQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC11bnRoZW1lZHstLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojNDI0MjQyOy0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWRjLWZpbGxlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiNlZjZjMDA7LS1tZGMtZmlsbGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiMwMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24ubWF0LWFjY2VudHstLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZWY2YzAwOy0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC13YXJuey0tbWRjLWZpbGxlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiNmNDQzMzY7LS1tZGMtZmlsbGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXXstLW1kYy1maWxsZWQtYnV0dG9uLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpOy0tbWRjLWZpbGxlZC1idXR0b24tZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7LS1tZGMtZmlsbGVkLWJ1dHRvbi1jb250YWluZXItY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTstLW1kYy1maWxsZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LXVudGhlbWVkey0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiM0MjQyNDI7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeXstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZWY2YzAwOy0tbWRjLXByb3RlY3RlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LWFjY2VudHstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZWY2YzAwOy0tbWRjLXByb3RlY3RlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LXdhcm57LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1jb250YWluZXItY29sb3I6I2Y0NDMzNjstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1yYWlzZWQtYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1kaXNhYmxlZC1jb250YWluZXItY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOy0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMik7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1lbGV2YXRpb246MH1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b257LS1tZGMtb3V0bGluZWQtYnV0dG9uLW91dGxpbmUtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LXVudGhlbWVkey0tbWRjLW91dGxpbmVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWRjLW91dGxpbmVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC1hY2NlbnR7LS1tZGMtb3V0bGluZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LXdhcm57LS1tZGMtb3V0bGluZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXXstLW1kYy1vdXRsaW5lZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7LS1tZGMtb3V0bGluZWQtYnV0dG9uLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOy0tbWRjLW91dGxpbmVkLWJ1dHRvbi1vdXRsaW5lLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMik7LS1tZGMtb3V0bGluZWQtYnV0dG9uLWRpc2FibGVkLW91dGxpbmUtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b24sYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmZmY7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b246aG92ZXIgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjA4fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtYnV0dG9uOmFjdGl2ZSAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b246YWN0aXZlIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjI0fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWJ1dHRvbi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LXByaW1hcnl7LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2VmNmMwMDstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyMzksIDEwOCwgMCwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b24ubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LWFjY2VudHstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjZWY2YzAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDIzOSwgMTA4LCAwLCAwLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWJ1dHRvbi5tYXQtd2Fybixib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LXdhcm57LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2Y0NDMzNjstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyNDQsIDY3LCA1NCwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1yYWlzZWQtYnV0dG9uLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmZmY7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1yYWlzZWQtYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjA4fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXJhaXNlZC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1yYWlzZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbjphY3RpdmUgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b246YWN0aXZlIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjI0fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnksYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24ubWF0LXByaW1hcnl7LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogIzAwMDstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1yYWlzZWQtYnV0dG9uLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC13YXJuey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmZmY7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbnstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjZmZmOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b246aG92ZXIgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMDh9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZXtvcGFjaXR5Oi4yNH1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbjphY3RpdmUgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LXByaW1hcnl7LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2VmNmMwMDstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyMzksIDEwOCwgMCwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNlZjZjMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjM5LCAxMDgsIDAsIDAuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LXdhcm57LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2Y0NDMzNjstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyNDQsIDY3LCA1NCwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtcHJpbWFyeXstLW1kYy1pY29uLWJ1dHRvbi1pY29uLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LWFjY2VudHstLW1kYy1pY29uLWJ1dHRvbi1pY29uLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LXdhcm57LS1tZGMtaWNvbi1idXR0b24taWNvbi1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWljb24tYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17LS1tZGMtaWNvbi1idXR0b24taWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7LS1tZGMtaWNvbi1idXR0b24tZGlzYWJsZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2V7aGVpZ2h0OjM2cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZXt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O3BhZGRpbmc6MTJweH1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmd7bWF4LWhlaWdodDo0OHB4O21heC13aWR0aDo0OHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UubWRjLWljb24tYnV0dG9uLS1yZWR1Y2VkLXNpemUgLm1kYy1pY29uLWJ1dHRvbl9fcmlwcGxle3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7bWFyZ2luLXRvcDo0cHg7bWFyZ2luLWJvdHRvbTo0cHg7bWFyZ2luLXJpZ2h0OjRweDttYXJnaW4tbGVmdDo0cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZS5tZGMtaWNvbi1idXR0b24tLXJlZHVjZWQtc2l6ZSAubWRjLWljb24tYnV0dG9uX19mb2N1cy1yaW5ne21heC1oZWlnaHQ6NDBweDttYXgtd2lkdGg6NDBweH1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlIC5tZGMtaWNvbi1idXR0b25fX3RvdWNoe3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7aGVpZ2h0OjQ4cHg7bGVmdDo1MCU7d2lkdGg6NDhweDt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC01MCUpfWJvZHkuZGFyay1tb2RlIC5tYXQtb3B0aW9ue2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1vcHRpb246aG92ZXI6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LW9wdGlvbjpmb2N1czpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMDQpfWJvZHkuZGFyay1tb2RlIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1vcHRpb24ubWF0LWFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjA0KTtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtb3B0aW9uLm1hdC1vcHRpb24tZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcmltYXJ5IC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1hY2NlbnQgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXdhcm4gLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LW9wdGdyb3VwLWxhYmVse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtb3B0Z3JvdXAtZGlzYWJsZWQgLm1hdC1vcHRncm91cC1sYWJlbHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1mdWxsLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWR7Y29sb3I6IzY4Njg2OH1ib2R5LmRhcmstbW9kZSAubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXJ7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwsYm9keS5kYXJrLW1vZGUgLm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxse2JhY2tncm91bmQ6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGw6OmFmdGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXJ7Y29sb3I6IzMwMzAzMH1ib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVye2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwsYm9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGx7YmFja2dyb3VuZDojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlcixib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXJ7Y29sb3I6IzMwMzAzMH1ib2R5LmRhcmstbW9kZSAubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVye2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwsYm9keS5kYXJrLW1vZGUgLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGx7YmFja2dyb3VuZDojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlcixib2R5LmRhcmstbW9kZSAubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXJ7Y29sb3I6IzMwMzAzMH1ib2R5LmRhcmstbW9kZSAubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXJ7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwsYm9keS5kYXJrLW1vZGUgLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxse2JhY2tncm91bmQ6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGw6OmFmdGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXJ7Y29sb3I6IzMwMzAzMH1ib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlcixib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlcntjb2xvcjojNjg2ODY4fWJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwsYm9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWQubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbHtiYWNrZ3JvdW5kOiM2ODY4Njh9Ym9keS5kYXJrLW1vZGUgLm1hdC1hcHAtYmFja2dyb3VuZCxib2R5LmRhcmstbW9kZS5tYXQtYXBwLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejB7Ym94LXNoYWRvdzowcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejF7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDFweCAxcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoye2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16M3tib3gtc2hhZG93OjBweCAzcHggM3B4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggM3B4IDRweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCA4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejR7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16NXtib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNXB4IDhweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAxNHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXo2e2JveC1zaGFkb3c6MHB4IDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA2cHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAxOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXo3e2JveC1zaGFkb3c6MHB4IDRweCA1cHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA3cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDJweCAxNnB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXo4e2JveC1zaGFkb3c6MHB4IDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXo5e2JveC1zaGFkb3c6MHB4IDVweCA2cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA5cHggMTJweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDNweCAxNnB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxMHtib3gtc2hhZG93OjBweCA2cHggNnB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTBweCAxNHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNHB4IDE4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejExe2JveC1zaGFkb3c6MHB4IDZweCA3cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxMXB4IDE1cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA0cHggMjBweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MTJ7Ym94LXNoYWRvdzowcHggN3B4IDhweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDEycHggMTdweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDVweCAyMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxM3tib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTNweCAxOXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNXB4IDI0cHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejE0e2JveC1zaGFkb3c6MHB4IDdweCA5cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxNHB4IDIxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA1cHggMjZweCA0cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MTV7Ym94LXNoYWRvdzowcHggOHB4IDlweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE1cHggMjJweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDZweCAyOHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxNntib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE2cHggMjRweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxN3tib3gtc2hhZG93OjBweCA4cHggMTFweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE3cHggMjZweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDZweCAzMnB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxOHtib3gtc2hhZG93OjBweCA5cHggMTFweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE4cHggMjhweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDdweCAzNHB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxOXtib3gtc2hhZG93OjBweCA5cHggMTJweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE5cHggMjlweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDdweCAzNnB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoyMHtib3gtc2hhZG93OjBweCAxMHB4IDEzcHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAyMHB4IDMxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA4cHggMzhweCA3cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MjF7Ym94LXNoYWRvdzowcHggMTBweCAxM3B4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMjFweCAzM3B4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggOHB4IDQwcHggN3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejIye2JveC1zaGFkb3c6MHB4IDEwcHggMTRweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDIycHggMzVweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDhweCA0MnB4IDdweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoyM3tib3gtc2hhZG93OjBweCAxMXB4IDE0cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAyM3B4IDM2cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA5cHggNDRweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MjR7Ym94LXNoYWRvdzowcHggMTFweCAxNXB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMjRweCAzOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggOXB4IDQ2cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC10aGVtZS1sb2FkZWQtbWFya2Vye2Rpc3BsYXk6bm9uZX1ib2R5LmRhcmstbW9kZSAubWF0LWNhcmR7YmFja2dyb3VuZDojNDI0MjQyO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYXJkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDJweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxcHggMXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhcmQubWF0LWNhcmQtZmxhdDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhcmQtc3VidGl0bGV7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiM2MDNmMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6IzYwM2YyNH1ib2R5LmRhcmstbW9kZSAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6IzYwM2YyNH1ib2R5LmRhcmstbW9kZSAubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2MDNmMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiM2MTM1MzJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6IzYxMzUzMn1ib2R5LmRhcmstbW9kZSAubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1zcGlubmVyIGNpcmNsZSxib2R5LmRhcmstbW9kZSAubWF0LXNwaW5uZXIgY2lyY2xle3N0cm9rZTojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtYWNjZW50IGNpcmNsZSxib2R5LmRhcmstbW9kZSAubWF0LXNwaW5uZXIubWF0LWFjY2VudCBjaXJjbGV7c3Ryb2tlOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC13YXJuIGNpcmNsZSxib2R5LmRhcmstbW9kZSAubWF0LXNwaW5uZXIubWF0LXdhcm4gY2lyY2xle3N0cm9rZTojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbHRpcHtiYWNrZ3JvdW5kOnJnYmEoOTcsOTcsOTcsLjkpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50OmRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWlucHV0LWVsZW1lbnQ6OnBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWlucHV0LWVsZW1lbnQ6bm90KC5tYXQtbmF0aXZlLXNlbGVjdC1pbmxpbmUpIG9wdGlvbntjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50Om5vdCgubWF0LW5hdGl2ZS1zZWxlY3QtaW5saW5lKSBvcHRpb246ZGlzYWJsZWR7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtd2FybiAubWF0LWlucHV0LWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1wcmVmaXgsYm9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1zdWZmaXh7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1oaW50e2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLm1hdC1hY2NlbnR7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLm1hdC13YXJue2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXJ7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LXdhcm57YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkOm5vdCgubWF0LWZvcm0tZmllbGQtaW52YWxpZCkgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkOm5vdCgubWF0LWZvcm0tZmllbGQtaW52YWxpZCkubWF0LWFjY2VudCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvY3VzZWQ6bm90KC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkKS5tYXQtd2FybiAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIC5tYXQtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXJ7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLGJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1lcnJvcntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtaGludHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNykgMCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSAzMyUsIHRyYW5zcGFyZW50IDAlKTtiYWNrZ3JvdW5kLXNpemU6NHB4IDEwMCU7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXh9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSAwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpIDMzJSwgdHJhbnNwYXJlbnQgMCUpO2JhY2tncm91bmQtc2l6ZTo0cHggMTAwJTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1mbGV4e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtZmxleHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjA1KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmU6OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lOjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkLm1hdC1hY2NlbnQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkLm1hdC13YXJuIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1pbnZhbGlkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTUpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2VsZWN0LXZhbHVle2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zZWxlY3QtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zZWxlY3QtZGlzYWJsZWQgLm1hdC1zZWxlY3QtdmFsdWV7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LXNlbGVjdC1wYW5lbHtiYWNrZ3JvdW5kOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zZWxlY3QtcGFuZWw6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LXNlbGVjdC1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LXByaW1hcnkgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LWFjY2VudCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtd2FybiAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZCAubWF0LXNlbGVjdC5tYXQtc2VsZWN0LWludmFsaWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQgLm1hdC1zZWxlY3QubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtZnJhbWV7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJre2ZpbGw6IzMwMzAzMH1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoe3N0cm9rZTojMzAzMDMwICFpbXBvcnRhbnR9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHJpbWFyeSAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsYm9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1jaGVja2VkLm1hdC1wcmltYXJ5IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1hY2NlbnQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLGJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtY2hlY2tlZC5tYXQtYWNjZW50IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC13YXJuIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCxib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWNoZWNrZWQubWF0LXdhcm4gLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1jaGVja2VkIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCxib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiM2ODY4Njh9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1kaXNhYmxlZDpub3QoLm1hdC1jaGVja2JveC1jaGVja2VkKSAubWF0LWNoZWNrYm94LWZyYW1le2JvcmRlci1jb2xvcjojNjg2ODY4fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtZGlzYWJsZWQgLm1hdC1jaGVja2JveC1sYWJlbHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtY2hlY2tlZDpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94OmFjdGl2ZTpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1jaGVja2VkOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveDphY3RpdmU6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1jaGVja2VkOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3g6YWN0aXZlOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQ6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWF1dG9jb21wbGV0ZS1wYW5lbHtiYWNrZ3JvdW5kOiM0MjQyNDI7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWF1dG9jb21wbGV0ZS1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1hY3RpdmUpOm5vdCg6aG92ZXIpe2JhY2tncm91bmQ6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LWF1dG9jb21wbGV0ZS1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtYWN0aXZlKTpub3QoOmhvdmVyKTpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kaWFsb2ctY29udGFpbmVye2JveC1zaGFkb3c6MHB4IDExcHggMTVweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQ6IzQyNDI0Mjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcHtiYWNrZ3JvdW5kLWNvbG9yOiM2MTYxNjE7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwOm5vdCgubWF0LWNoaXAtZGlzYWJsZWQpOmFjdGl2ZXtib3gtc2hhZG93OjBweCAzcHggM3B4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggM3B4IDRweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCA4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwOm5vdCgubWF0LWNoaXAtZGlzYWJsZWQpIC5tYXQtY2hpcC1yZW1vdmU6aG92ZXJ7b3BhY2l0eTouNTR9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLWRpc2FibGVke29wYWNpdHk6LjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwOjphZnRlcntiYWNrZ3JvdW5kOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtcHJpbWFyeSAubWF0LWNoaXAtcmVtb3Zle2NvbG9yOiNmZmY7b3BhY2l0eTouNH1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtd2FybntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzY7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXdhcm4gLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LWFjY2VudCAubWF0LWNoaXAtcmVtb3Zle2NvbG9yOiNmZmY7b3BhY2l0eTouNH1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC41NCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnkubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC41NCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnkubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4ubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC41NCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4ubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGU6bm90KC5tYXQtY2hlY2tlZCkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDFweCAxcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQtY29sb3I6I2JkYmRiZH1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yYWRpby1pbm5lci1jaXJjbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSksYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSxib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeTphY3RpdmUgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmFkaW8taW5uZXItY2lyY2xlLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSksYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQ6YWN0aXZlIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuIC5tYXQtcmFkaW8taW5uZXItY2lyY2xlLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuIC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnQ6bm90KC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUpLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm46YWN0aXZlIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZSxib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLWlubmVyLWNpcmNsZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLWxhYmVsLWNvbnRlbnR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdGh1bWIsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksMTA4LDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdHJhY2stZmlsbCxib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtYWNjZW50IC5tYXQtc2xpZGVyLXRodW1iLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtd2FybiAubWF0LXNsaWRlci10cmFjay1maWxsLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC13YXJuIC5tYXQtc2xpZGVyLXRodW1iLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC13YXJuIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXdhcm4gLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlcjpob3ZlciAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10cmFjay1maWxsLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLWRpc2FibGVkOmhvdmVyIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZSAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyAubWF0LXNsaWRlci10aHVtYixib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZy5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYixib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZykgLm1hdC1zbGlkZXItdGh1bWJ7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyk6aG92ZXIgLm1hdC1zbGlkZXItdGh1bWIsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyk6aG92ZXIubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYixib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZykuY2RrLWZvY3VzZWQubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYntib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXItaGFzLXRpY2tzIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVye2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRpY2tze2JhY2tncm91bmQtaW1hZ2U6cmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNykgMnB4LCB0cmFuc3BhcmVudCAwLCB0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTotbW96LXJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoMC4wMDAxZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyksIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSAycHgsIHRyYW5zcGFyZW50IDAsIHRyYW5zcGFyZW50KX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aWNrc3tiYWNrZ3JvdW5kLWltYWdlOnJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyksIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSAycHgsIHRyYW5zcGFyZW50IDAsIHRyYW5zcGFyZW50KX1ib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtcGFuZWx7YmFja2dyb3VuZDojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1pdGVte2JhY2tncm91bmQ6cmdiYSgwLDAsMCwwKTtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXSxib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbVtkaXNhYmxlZF0gLm1hdC1tZW51LXN1Ym1lbnUtaWNvbixib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbVtkaXNhYmxlZF0gLm1hdC1pY29uLW5vLWNvbG9ye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1pdGVtIC5tYXQtaWNvbi1uby1jb2xvcixib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtc3VibWVudS1pY29ue2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZW51LWl0ZW06aG92ZXI6bm90KFtkaXNhYmxlZF0pLGJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1pdGVtLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KFtkaXNhYmxlZF0pLGJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1pdGVtLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdChbZGlzYWJsZWRdKSxib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbS1oaWdobGlnaHRlZDpub3QoW2Rpc2FibGVkXSl7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LWl0ZW17Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWxpc3QtYmFzZSAubWF0LWxpc3Qtb3B0aW9ue2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1saXN0LWJhc2UgLm1hdC1zdWJoZWFkZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LWl0ZW0tZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMik7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWxpc3Qtb3B0aW9uOmhvdmVyLGJvZHkuZGFyay1tb2RlIC5tYXQtbGlzdC1vcHRpb246Zm9jdXMsYm9keS5kYXJrLW1vZGUgLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbTpob3Zlcixib2R5LmRhcmstbW9kZSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtOmZvY3VzLGJvZHkuZGFyay1tb2RlIC5tYXQtYWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW06aG92ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1hY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbTpmb2N1c3tiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjA0KX1ib2R5LmRhcmstbW9kZSAubWF0LWxpc3Qtc2luZ2xlLXNlbGVjdGVkLW9wdGlvbixib2R5LmRhcmstbW9kZSAubWF0LWxpc3Qtc2luZ2xlLXNlbGVjdGVkLW9wdGlvbjpob3Zlcixib2R5LmRhcmstbW9kZSAubWF0LWxpc3Qtc2luZ2xlLXNlbGVjdGVkLW9wdGlvbjpmb2N1c3tiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LXBhZ2luYXRvcntiYWNrZ3JvdW5kOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1wYWdpbmF0b3IsYm9keS5kYXJrLW1vZGUgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplIC5tYXQtc2VsZWN0LXRyaWdnZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1wYWdpbmF0b3ItZGVjcmVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtcGFnaW5hdG9yLWluY3JlbWVudHtib3JkZXItdG9wOjJweCBzb2xpZCAjZmZmO2JvcmRlci1yaWdodDoycHggc29saWQgI2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXBhZ2luYXRvci1maXJzdCxib2R5LmRhcmstbW9kZSAubWF0LXBhZ2luYXRvci1sYXN0e2JvcmRlci10b3A6MnB4IHNvbGlkICNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItZGVjcmVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWluY3JlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1maXJzdCxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1sYXN0e2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LXBhZ2luYXRvci1jb250YWluZXJ7bWluLWhlaWdodDo1NnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItaGVhZGVye2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXIgLm1hdC10YWItbmF2LWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXIgLm1hdC10YWItaGVhZGVye2JvcmRlci10b3A6MXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjEyKTtib3JkZXItYm90dG9tOm5vbmV9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbGlua3tjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwW2NsYXNzKj1tYXQtYmFja2dyb3VuZC1dPi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyW2NsYXNzKj1tYXQtYmFja2dyb3VuZC1de2JvcmRlci1ib3R0b206bm9uZTtib3JkZXItdG9wOm5vbmV9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1MSwxNDAsMCwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeS5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeS5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeS5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2Vke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTEsMTQwLDAsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2Vke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjA1LDIxMCwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtd2Fybi5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtd2Fybi5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtd2Fybi5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2Vke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTEsMTQwLDAsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9ue2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmssYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGlua3tjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtib3JkZXItY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiNmZmY7b3BhY2l0eTouNH1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2ZmZjtvcGFjaXR5Oi4xMn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2Vke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTEsMTQwLDAsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluayxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGlua3tjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtib3JkZXItY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6I2ZmZjtvcGFjaXR5Oi40fWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmO29wYWNpdHk6LjEyfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDIwNSwyMTAsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9ue2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmssYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGlua3tjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtib3JkZXItY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiNmZmY7b3BhY2l0eTouNH1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2ZmZjtvcGFjaXR5Oi4xMn1ib2R5LmRhcmstbW9kZSAubWF0LXNuYWNrLWJhci1jb250YWluZXJ7Y29sb3I6cmdiYSgwLDAsMCwuODcpO2JhY2tncm91bmQ6I2ZhZmFmYTtib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNnB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggMThweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb257Y29sb3I6aW5oZXJpdH1ib2R5LmRhcmstbW9kZSAubWF0LXRhYmxle2JhY2tncm91bmQ6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYmxlIHRoZWFkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFibGUgdGJvZHksYm9keS5kYXJrLW1vZGUgLm1hdC10YWJsZSB0Zm9vdCxib2R5LmRhcmstbW9kZSBtYXQtaGVhZGVyLXJvdyxib2R5LmRhcmstbW9kZSBtYXQtcm93LGJvZHkuZGFyay1tb2RlIG1hdC1mb290ZXItcm93LGJvZHkuZGFyay1tb2RlIFttYXQtaGVhZGVyLXJvd10sYm9keS5kYXJrLW1vZGUgW21hdC1yb3ddLGJvZHkuZGFyay1tb2RlIFttYXQtZm9vdGVyLXJvd10sYm9keS5kYXJrLW1vZGUgLm1hdC10YWJsZS1zdGlja3l7YmFja2dyb3VuZDppbmhlcml0fWJvZHkuZGFyay1tb2RlIG1hdC1yb3csYm9keS5kYXJrLW1vZGUgbWF0LWhlYWRlci1yb3csYm9keS5kYXJrLW1vZGUgbWF0LWZvb3Rlci1yb3csYm9keS5kYXJrLW1vZGUgdGgubWF0LWhlYWRlci1jZWxsLGJvZHkuZGFyay1tb2RlIHRkLm1hdC1jZWxsLGJvZHkuZGFyay1tb2RlIHRkLm1hdC1mb290ZXItY2VsbHtib3JkZXItYm90dG9tLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWhlYWRlci1jZWxse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2VsbCxib2R5LmRhcmstbW9kZSAubWF0LWZvb3Rlci1jZWxse2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1jb250ZW50e2NvbG9yOiNmZmY7YmFja2dyb3VuZDojZWY2YzAwfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgYm9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1jb250ZW50e291dGxpbmU6c29saWQgMXB4O2JvcmRlci1yYWRpdXM6MH1ib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLWFjY2VudCAubWF0LWJhZGdlLWNvbnRlbnR7YmFja2dyb3VuZDojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS13YXJuIC5tYXQtYmFkZ2UtY29udGVudHtjb2xvcjojZmZmO2JhY2tncm91bmQ6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLWRpc2FibGVkIC5tYXQtYmFkZ2UtY29udGVudHtiYWNrZ3JvdW5kOiM2ZTZlNmU7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJ7Ym94LXNoYWRvdzowcHggOHB4IDEwcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kOiM0MjQyNDI7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSxib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksYm9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzpub25lfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmR7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZSsubWF0LWJ1dHRvbi10b2dnbGV7Ym9yZGVyLWxlZnQ6c29saWQgMXB4ICM1OTU5NTl9Ym9keS5kYXJrLW1vZGUgW2Rpcj1ydGxdIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZSsubWF0LWJ1dHRvbi10b2dnbGV7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6c29saWQgMXB4ICM1OTU5NTl9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWJ1dHRvbi10b2dnbGUtdmVydGljYWwgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDpub25lO2JvcmRlci10b3A6c29saWQgMXB4ICM1OTU5NTl9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWR7YmFja2dyb3VuZC1jb2xvcjojMjEyMTIxO2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2VkLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmR7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyk7YmFja2dyb3VuZC1jb2xvcjojMDAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJke2JhY2tncm91bmQ6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCxib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZHtib3JkZXI6c29saWQgMXB4ICM1OTU5NTl9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnR7bGluZS1oZWlnaHQ6NDhweH1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWFycm93e2ZpbGw6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItdG9nZ2xlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtY2FsZW5kYXItbmV4dC1idXR0b24sYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1jYWxlbmRhci1wcmV2aW91cy1idXR0b257Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlci1kaXZpZGVyOjphZnRlcntiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktbGFiZWx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGUtcmFuZ2UtaW5wdXQtc2VwYXJhdG9ye2NvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1kYXRlLXJhbmdlLWlucHV0LXNlcGFyYXRvcntjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1pbi1wcmV2aWV3e2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjI0KX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyMzksMTA4LDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCxib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDksMTcxLDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjM5LCAxMDgsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBsZWZ0LCByZ2JhKDIzOSwgMTA4LCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsYm9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2UubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmFmdGVye2JhY2tncm91bmQ6I2E4ZGFiNX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQ6IzQ2YTM1ZX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC40KX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZn1ib2R5LmRhcmstbW9kZSAuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLGJvZHkuZGFyay1tb2RlIC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC4zKX1AbWVkaWEoaG92ZXI6IGhvdmVyKXtib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksMTA4LDAsLjMpfX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudHtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQtY29sb3I6IzQyNDI0Mjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDIzOSwxMDgsMCwuMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDksMTcxLDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDIzOSwgMTA4LCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGxlZnQsIHJnYmEoMjM5LCAxMDgsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2UubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmFmdGVye2JhY2tncm91bmQ6I2E4ZGFiNX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kOiM0NmEzNWV9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksMTA4LDAsLjQpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksMTA4LDAsLjMpfUBtZWRpYShob3ZlcjogaG92ZXIpe2JvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNlbGw6bm90KC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCk6aG92ZXI+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC4zKX19Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0NCw2Nyw1NCwuMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0OSwxNzEsMCwuMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyNDQsIDY3LCA1NCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGxlZnQsIHJnYmEoMjQ0LCA2NywgNTQsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZS5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YWZ0ZXJ7YmFja2dyb3VuZDojYThkYWI1fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZDojNDZhMzVlfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzY7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsNjcsNTQsLjQpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS10b2RheS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCAjZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCksYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsNjcsNTQsLjMpfUBtZWRpYShob3ZlcjogaG92ZXIpe2JvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jZWxsOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQpOmhvdmVyPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuMyl9fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50LXRvdWNoe2JveC1zaGFkb3c6MHB4IDExcHggMTVweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZle2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmUubWF0LWFjY2VudHtjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZlLm1hdC13YXJue2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlLXJhbmdlLWlucHV0LWlubmVyW2Rpc2FibGVkXXtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItY29udHJvbHMgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZXt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O3BhZGRpbmc6OHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItY29udHJvbHMgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSAubWRjLWljb24tYnV0dG9uX19mb2N1cy1yaW5ne21heC1oZWlnaHQ6NDBweDttYXgtd2lkdGg6NDBweH1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWNvbnRyb2xzIC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UubWRjLWljb24tYnV0dG9uLS1yZWR1Y2VkLXNpemUgLm1kYy1pY29uLWJ1dHRvbl9fcmlwcGxle3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7bWFyZ2luLXRvcDowcHg7bWFyZ2luLWJvdHRvbTowcHg7bWFyZ2luLXJpZ2h0OjBweDttYXJnaW4tbGVmdDowcHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1jb250cm9scyAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlLm1kYy1pY29uLWJ1dHRvbi0tcmVkdWNlZC1zaXplIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmd7bWF4LWhlaWdodDo0MHB4O21heC13aWR0aDo0MHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItY29udHJvbHMgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSAubWRjLWljb24tYnV0dG9uX190b3VjaHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2hlaWdodDo0MHB4O2xlZnQ6NTAlO3dpZHRoOjQwcHg7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWNvbnRyb2xzIC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UgLm1hdC1tZGMtYnV0dG9uLXRvdWNoLXRhcmdldHtkaXNwbGF5Om5vbmV9Ym9keS5kYXJrLW1vZGUgLm1hdC1kaXZpZGVye2JvcmRlci10b3AtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGl2aWRlci12ZXJ0aWNhbHtib3JkZXItcmlnaHQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVse2JhY2tncm91bmQ6IzQyNDI0Mjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWFjdGlvbi1yb3d7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSksYm9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSxib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOmhvdmVyOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSl7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNCl9QG1lZGlhKGhvdmVyOiBub25lKXtib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCk6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZDojNDI0MjQyfX1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGV7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24sYm9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24taW5kaWNhdG9yOjphZnRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGUsYm9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9ue2NvbG9yOmluaGVyaXR9Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVye2hlaWdodDo0OHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5tYXQtZXhwYW5kZWR7aGVpZ2h0OjY0cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1pY29uLm1hdC1wcmltYXJ5e2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1pY29uLm1hdC1hY2NlbnR7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWljb24ubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWRyYXdlci1jb250YWluZXJ7YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kcmF3ZXJ7YmFja2dyb3VuZC1jb2xvcjojNDI0MjQyO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kcmF3ZXIubWF0LWRyYXdlci1wdXNoe2JhY2tncm91bmQtY29sb3I6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LWRyYXdlcjpub3QoLm1hdC1kcmF3ZXItc2lkZSl7Ym94LXNoYWRvdzowcHggOHB4IDEwcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWRyYXdlci1zaWRle2JvcmRlci1yaWdodDpzb2xpZCAxcHggcmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZHJhd2VyLXNpZGUubWF0LWRyYXdlci1lbmR7Ym9yZGVyLWxlZnQ6c29saWQgMXB4IHJnYmEoMjU1LDI1NSwyNTUsLjEyKTtib3JkZXItcmlnaHQ6bm9uZX1ib2R5LmRhcmstbW9kZSBbZGlyPXJ0bF0gLm1hdC1kcmF3ZXItc2lkZXtib3JkZXItbGVmdDpzb2xpZCAxcHggcmdiYSgyNTUsMjU1LDI1NSwuMTIpO2JvcmRlci1yaWdodDpub25lfWJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWRyYXdlci1zaWRlLm1hdC1kcmF3ZXItZW5ke2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCByZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kcmF3ZXItYmFja2Ryb3AubWF0LWRyYXdlci1zaG93bntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTg5LDE4OSwxODksLjYpfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIuY2RrLWtleWJvYXJkLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5jZGstcHJvZ3JhbS1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXI6aG92ZXI6bm90KFthcmlhLWRpc2FibGVkXSksYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlcjpob3ZlclthcmlhLWRpc2FibGVkPWZhbHNlXXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjA0KX1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyOmhvdmVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV17Y3Vyc29yOmRlZmF1bHR9QG1lZGlhKGhvdmVyOiBub25lKXtib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyOmhvdmVye2JhY2tncm91bmQ6bm9uZX19Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtb3B0aW9uYWx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0e2JhY2tncm91bmQtY29sb3I6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbntjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc3RhdGUtZG9uZSxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29ue2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0e2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc3RhdGUtZXJyb3J7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApO2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtbGFiZWwubWF0LXN0ZXAtbGFiZWwtYWN0aXZle2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtbGFiZWwubWF0LXN0ZXAtbGFiZWwtZXJyb3J7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbCxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXBwZXItdmVydGljYWx7YmFja2dyb3VuZC1jb2xvcjojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcHBlci12ZXJ0aWNhbC1saW5lOjpiZWZvcmV7Ym9yZGVyLWxlZnQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YWZ0ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLWhvcml6b250YWwtbGluZXtib3JkZXItdG9wLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXJ7aGVpZ2h0OjcycHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWJvdHRvbSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC12ZXJ0aWNhbC1zdGVwcGVyLWhlYWRlcntwYWRkaW5nOjI0cHggMjRweH1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXBwZXItdmVydGljYWwtbGluZTo6YmVmb3Jle3RvcDotMTZweDtib3R0b206LTE2cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWJvdHRvbSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmFmdGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjpiZWZvcmV7dG9wOjM2cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWJvdHRvbSAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbC1saW5le3RvcDozNnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtc29ydC1oZWFkZXItYXJyb3d7Y29sb3I6I2M2YzZjNn1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXJ7YmFja2dyb3VuZDojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLm1hdC1wcmltYXJ5e2JhY2tncm91bmQ6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhci5tYXQtYWNjZW50e2JhY2tncm91bmQ6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhci5tYXQtd2FybntiYWNrZ3JvdW5kOiNmNDQzMzY7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1zZWxlY3QtdmFsdWUsYm9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtc2VsZWN0LWFycm93LGJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6aW5oZXJpdH1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOmN1cnJlbnRDb2xvcn1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXItbXVsdGlwbGUtcm93c3ttaW4taGVpZ2h0OjY0cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLXJvdyxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXItc2luZ2xlLXJvd3toZWlnaHQ6NjRweH1AbWVkaWEobWF4LXdpZHRoOiA1OTlweCl7Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3N7bWluLWhlaWdodDo1NnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhci1yb3csYm9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLXNpbmdsZS1yb3d7aGVpZ2h0OjU2cHh9fWJvZHkuZGFyay1tb2RlIC5tYXQtdHJlZXtiYWNrZ3JvdW5kOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC10cmVlLW5vZGUsYm9keS5kYXJrLW1vZGUgLm1hdC1uZXN0ZWQtdHJlZS1ub2Rle2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10cmVlLW5vZGV7bWluLWhlaWdodDo0OHB4fQo8L3N0eWxlPgoKPHN0eWxlPgogIGh0bWwsCiAgYm9keSB7CiAgICBtYXJnaW46IDA7CiAgICBwYWRkaW5nOiAwOwogICAgaGVpZ2h0OiAxMDAlOwogICAgZm9udC1mYW1pbHk6IFJvYm90bywgc2Fucy1zZXJpZjsKICAgIGNvbG9yOiB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpOwoKICAgIC8qIExlZ2FjeSBtZWNoYW5pc20gdG8gYXZvaWQgaXNzdWVzIHdpdGggc3VicGl4ZWwgYW50aS1hbGlhc2luZyBvbiBtYWNPUy4KICAgICAqCiAgICAgKiBJbiB0aGUgcGFzdCBbMV0sIG1hY09TIHN1YnBpeGVsIEFBIGNhdXNlZCBleGNlc3NpdmUgYm9sZGluZyBmb3IgbGlnaHQtb24tZGFyayB0ZXh0OyB0aGlzIHJ1bGUKICAgICAqIGF2b2lkcyB0aGF0IGJ5IHJlcXVlc3Rpbmcgbm9uLXN1YnBpeGVsIEFBIGFsd2F5cywgcmF0aGVyIHRoYW4gdGhlIGRlZmF1bHQgYmVoYXZpb3IsIHdoaWNoIGlzCiAgICAgKiB0byB1c2Ugc3VicGl4ZWwgQUEgd2hlbiBhdmFpbGFibGUuIFRoZSBvcmlnaW5hbCBpc3N1ZSB3YXMgImZpeGVkIiBieSByZW1vdmluZyBzdWJwaXhlbCBBQSBpbgogICAgICogbWFjT1MgMTQgKE1vamF2ZSksIGJ1dCBmb3IgbGVnYWN5IHJlYXNvbnMgdGhleSBwcmVzZXJ2ZWQgdGhlIGJvbGRpbmcgZWZmZWN0IGFzIGFuIG9wdGlvbi4KICAgICAqIENocm9tZSB0aGVuIGluIHR1cm4gdXBkYXRlZCBpdHMgZm9udCByZW5kZXJpbmcgdG8gYXBwbHkgdGhhdCBib2xkaW5nIGVmZmVjdCBbMl0sIHdoaWNoIG1lYW5zCiAgICAgKiB0aGF0IGV2ZW4gdGhvdWdoIHRoZSBgLXdlYmtpdC1mb250LXNtb290aGluZ2AgZG9jcyBbM10gc3VnZ2VzdCB0aGF0IHNldHRpbmcgYGFudGlhbGlhc2VkYAogICAgICogd291bGQgaGF2ZSBubyBlZmZlY3QgZm9yIHJlY2VudCB2ZXJzaW9ucyBvZiBtYWNPUywgaXQgc3RpbGwgaXMgbmVlZGVkIHRvIGF2b2lkIHRoZSBib2xkaW5nLgogICAgICoKICAgICAqIFsxXTogaHR0cDovL3d3dy5saWdodGVycmEuY29tL2FydGljbGVzL21hY29zeHRleHRhYWJ1Zy8KICAgICAqIFsyXTogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9ODU4ODYxCiAgICAgKiBbM106IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9mb250LXNtb290aAogICAgICoKICAgICAqLwoKICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwogIH0KICBub3NjcmlwdCB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIG1hcmdpbjogMCBhdXRvOwogICAgbWF4LXdpZHRoOiA2MDBweDsKICAgIHBhZGRpbmc6IDEwcHg7CiAgfQo8L3N0eWxlPgoKPC9oZWFkPjxib2R5Pjxub3NjcmlwdD4KICAgIDxoMT5UZW5zb3JCb2FyZCByZXF1aXJlcyBKYXZhU2NyaXB0PC9oMT4KICAgIDxwPlBsZWFzZSBlbmFibGUgSmF2YVNjcmlwdCBhbmQgcmVsb2FkIHRoaXMgcGFnZS48L3A+CiAgPC9ub3NjcmlwdD48dGItd2ViYXBwPjwvdGItd2ViYXBwPjxzY3JpcHQgc3JjPSJpbmRleC5qcz9fZmlsZV9oYXNoPWM4MDVhZGU3Ij48L3NjcmlwdD48L2JvZHk+PC9odG1sPg==",
+ "headers": [
+ [
+ "content-length",
+ "533863"
+ ],
+ [
+ "content-type",
+ "text/html; charset=utf-8"
+ ]
+ ],
+ "ok": true,
+ "status": 200,
+ "status_text": ""
+ },
+ "https://localhost:6006/data/environment": {
+ "data": "eyJ2ZXJzaW9uIjogIjIuMTcuMCIsICJkYXRhX2xvY2F0aW9uIjogInJ1bnMvdHJhaW4iLCAid2luZG93X3RpdGxlIjogIiIsICJleHBlcmltZW50X25hbWUiOiAiIiwgImV4cGVyaW1lbnRfZGVzY3JpcHRpb24iOiAiIiwgImNyZWF0aW9uX3RpbWUiOiAwLjAsICJkZWJ1ZyI6IHsiZGF0YV9wcm92aWRlciI6ICJHcnBjRGF0YVByb3ZpZGVyKGFkZHI9J2xvY2FsaG9zdDo0MTM3OScpIiwgImZsYWdzIjogeyJsb2dkaXIiOiAicnVucy90cmFpbiIsICJsb2dkaXJfc3BlYyI6ICIiLCAiaG9zdCI6IG51bGwsICJiaW5kX2FsbCI6IGZhbHNlLCAicG9ydCI6IG51bGwsICJyZXVzZV9wb3J0IjogZmFsc2UsICJsb2FkX2Zhc3QiOiAiYXV0byIsICJleHRyYV9kYXRhX3NlcnZlcl9mbGFncyI6ICIiLCAiZ3JwY19jcmVkc190eXBlIjogImxvY2FsIiwgImdycGNfZGF0YV9wcm92aWRlciI6ICIiLCAicHVyZ2Vfb3JwaGFuZWRfZGF0YSI6IHRydWUsICJkYiI6ICIiLCAiZGJfaW1wb3J0IjogZmFsc2UsICJpbnNwZWN0IjogZmFsc2UsICJ2ZXJzaW9uX3RiIjogZmFsc2UsICJ0YWciOiAiIiwgImV2ZW50X2ZpbGUiOiAiIiwgInBhdGhfcHJlZml4IjogIiIsICJ3aW5kb3dfdGl0bGUiOiAiIiwgIm1heF9yZWxvYWRfdGhyZWFkcyI6IDEsICJyZWxvYWRfaW50ZXJ2YWwiOiA1LjAsICJyZWxvYWRfdGFzayI6ICJhdXRvIiwgInJlbG9hZF9tdWx0aWZpbGUiOiBudWxsLCAicmVsb2FkX211bHRpZmlsZV9pbmFjdGl2ZV9zZWNzIjogODY0MDAsICJnZW5lcmljX2RhdGEiOiAiYXV0byIsICJzYW1wbGVzX3Blcl9wbHVnaW4iOiB7fSwgImRldGVjdF9maWxlX3JlcGxhY2VtZW50IjogbnVsbCwgIl9fdGVuc29yYm9hcmRfc3ViY29tbWFuZCI6ICJzZXJ2ZSJ9fX0=",
+ "headers": [
+ [
+ "content-length",
+ "447"
+ ],
+ [
+ "content-type",
+ "application/json"
+ ]
+ ],
+ "ok": true,
+ "status": 200,
+ "status_text": ""
+ },
+ "https://localhost:6006/data/plugins_listing": {
+ "data": "eyJ0aW1lc2VyaWVzIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IHRydWUsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJUaW1lIFNlcmllcyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJOR19DT01QT05FTlQifX0sICJzY2FsYXJzIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IHRydWUsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJzY2FsYXJzIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi1zY2FsYXItZGFzaGJvYXJkIn19LCAiY3VzdG9tX3NjYWxhcnMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJDdXN0b20gU2NhbGFycyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtY3VzdG9tLXNjYWxhci1kYXNoYm9hcmQifX0sICJpbWFnZXMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogdHJ1ZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogImltYWdlcyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtaW1hZ2UtZGFzaGJvYXJkIn19LCAiYXVkaW8iOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJhdWRpbyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtYXVkaW8tZGFzaGJvYXJkIn19LCAiZGVidWdnZXItdjIiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJEZWJ1Z2dlciBWMiIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJOR19DT01QT05FTlQifX0sICJncmFwaHMiOiB7ImRpc2FibGVfcmVsb2FkIjogdHJ1ZSwgImVuYWJsZWQiOiB0cnVlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiZ3JhcGhzIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi1ncmFwaC1kYXNoYm9hcmQifX0sICJkaXN0cmlidXRpb25zIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiZGlzdHJpYnV0aW9ucyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtZGlzdHJpYnV0aW9uLWRhc2hib2FyZCJ9fSwgImhpc3RvZ3JhbXMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJoaXN0b2dyYW1zIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi1oaXN0b2dyYW0tZGFzaGJvYXJkIn19LCAidGV4dCI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogInRleHQiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLXRleHQtZGFzaGJvYXJkIn19LCAicHJfY3VydmVzIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiUFIgQ3VydmVzIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi1wci1jdXJ2ZS1kYXNoYm9hcmQifX0sICJwcm9maWxlX3JlZGlyZWN0IjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiUHJvZmlsZSIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtcHJvZmlsZS1yZWRpcmVjdC1kYXNoYm9hcmQifX0sICJocGFyYW1zIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiaHBhcmFtcyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtaHBhcmFtcy1kYXNoYm9hcmQifX0sICJtZXNoIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAibWVzaCIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAibWVzaC1kYXNoYm9hcmQifX0sICJ3aXRfcmVkaXJlY3QiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJXaGF0LUlmIFRvb2wiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLXdpdC1yZWRpcmVjdC1kYXNoYm9hcmQifX0sICJwcm9qZWN0b3IiOiB7ImRpc2FibGVfcmVsb2FkIjogdHJ1ZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogInByb2plY3RvciIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJJRlJBTUUiLCAibW9kdWxlX3BhdGgiOiAiL2RhdGEvcGx1Z2luL3Byb2plY3Rvci9pbmRleC5qcyJ9fX0=",
+ "headers": [
+ [
+ "content-length",
+ "496"
+ ],
+ [
+ "content-type",
+ "application/json"
+ ]
+ ],
+ "ok": true,
+ "status": 200,
+ "status_text": ""
+ },
+ "https://localhost:6006/data/runs": {
+ "data": "WyJleHAiLCAiZXhwMiIsICJleHAzIl0=",
+ "headers": [
+ [
+ "content-length",
+ "35"
+ ],
+ [
+ "content-type",
+ "application/json"
+ ]
+ ],
+ "ok": true,
+ "status": 200,
+ "status_text": ""
+ },
+ "https://localhost:6006/experiment/defaultExperimentId/data/plugin/hparams/experiment?request=%7B%22experimentName%22:%22defaultExperimentId%22,%22hparamsLimit%22:1000,%22includeMetrics%22:false%7D": {
+ "data": "ewogICJuYW1lIjogIiIsCiAgImRlc2NyaXB0aW9uIjogIiIsCiAgInVzZXIiOiAiIiwKICAidGltZUNyZWF0ZWRTZWNzIjogMC4wLAogICJocGFyYW1JbmZvcyI6IFtdLAogICJtZXRyaWNJbmZvcyI6IFtdCn0=",
+ "headers": [
+ [
+ "content-length",
+ "103"
+ ],
+ [
+ "content-type",
+ "application/json"
+ ]
+ ],
+ "ok": true,
+ "status": 200,
+ "status_text": ""
+ },
+ "https://localhost:6006/experiment/defaultExperimentId/data/plugin/hparams/session_groups?request=%7B%22experimentName%22:%22defaultExperimentId%22,%22allowedStatuses%22:%5B%22STATUS_FAILURE%22,%22STATUS_RUNNING%22,%22STATUS_SUCCESS%22,%22STATUS_UNKNOWN%22%5D,%22colParams%22:%5B%5D,%22startIndex%22:0,%22sliceSize%22:1000000,%22includeMetrics%22:false%7D": {
+ "data": "ewogICJzZXNzaW9uR3JvdXBzIjogW10sCiAgInRvdGFsU2l6ZSI6IDAKfQ==",
+ "headers": [
+ [
+ "content-length",
+ "59"
+ ],
+ [
+ "content-type",
+ "application/json"
+ ]
+ ],
+ "ok": true,
+ "status": 200,
+ "status_text": ""
+ },
+ "https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/tags": {
+ "data": "eyJzY2FsYXJzIjogeyJydW5UYWdJbmZvIjogeyJleHAzIjogWyJtZXRyaWNzL21BUF8wLjUiLCAibWV0cmljcy9tQVBfMC41OjAuOTUiLCAibWV0cmljcy9wcmVjaXNpb24iLCAibWV0cmljcy9yZWNhbGwiLCAidHJhaW4vYm94X2xvc3MiLCAidHJhaW4vY2xzX2xvc3MiLCAidHJhaW4vb2JqX2xvc3MiLCAidmFsL2JveF9sb3NzIiwgInZhbC9jbHNfbG9zcyIsICJ2YWwvb2JqX2xvc3MiLCAieC9scjAiLCAieC9scjEiLCAieC9scjIiXX0sICJ0YWdEZXNjcmlwdGlvbnMiOiB7fX0sICJoaXN0b2dyYW1zIjogeyJydW5UYWdJbmZvIjoge30sICJ0YWdEZXNjcmlwdGlvbnMiOiB7fX0sICJpbWFnZXMiOiB7InRhZ0Rlc2NyaXB0aW9ucyI6IHt9LCAidGFnUnVuU2FtcGxlZEluZm8iOiB7InJlc3VsdHMiOiB7ImV4cDMiOiB7Im1heFNhbXBsZXNQZXJTdGVwIjogMX19LCAiUF9jdXJ2ZSI6IHsiZXhwMyI6IHsibWF4U2FtcGxlc1BlclN0ZXAiOiAxfX0sICJGMV9jdXJ2ZSI6IHsiZXhwMyI6IHsibWF4U2FtcGxlc1BlclN0ZXAiOiAxfX0sICJjb25mdXNpb25fbWF0cml4IjogeyJleHAzIjogeyJtYXhTYW1wbGVzUGVyU3RlcCI6IDF9fSwgIlJfY3VydmUiOiB7ImV4cDMiOiB7Im1heFNhbXBsZXNQZXJTdGVwIjogMX19LCAiUFJfY3VydmUiOiB7ImV4cDMiOiB7Im1heFNhbXBsZXNQZXJTdGVwIjogMX19fX19",
+ "headers": [
+ [
+ "content-length",
+ "260"
+ ],
+ [
+ "content-type",
+ "application/json"
+ ]
+ ],
+ "ok": true,
+ "status": 200,
+ "status_text": ""
+ },
+ "https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/timeSeries?requests=%5B%7B%22plugin%22:%22images%22,%22tag%22:%22F1_curve%22,%22sample%22:0,%22run%22:%22exp3%22%7D%5D": {
+ "data": "W3sicGx1Z2luIjogImltYWdlcyIsICJ0YWciOiAiRjFfY3VydmUiLCAicnVuIjogImV4cDMiLCAic2FtcGxlIjogMCwgInJ1blRvU2VyaWVzIjogeyJleHAzIjogW3sic3RlcCI6IDc5LCAid2FsbFRpbWUiOiAxNzI3OTU4OTc4Ljc1Mjk4NjQsICJpbWFnZUlkIjogIld5SmtaV1poZFd4MFJYaHdaWEpwYldWdWRFbGtJaXdpWlhod015SXNJa1l4WDJOMWNuWmxJaXczT1N3eVhRIn1dfX1d",
+ "headers": [
+ [
+ "content-length",
+ "197"
+ ],
+ [
+ "content-type",
+ "application/json"
+ ]
+ ],
+ "ok": true,
+ "status": 200,
+ "status_text": ""
+ },
+ "https://localhost:6006/experiment/defaultExperimentId/data/runs": {
+ "data": "WyJleHAiLCAiZXhwMiIsICJleHAzIl0=",
+ "headers": [
+ [
+ "content-length",
+ "35"
+ ],
+ [
+ "content-type",
+ "application/json"
+ ]
+ ],
+ "ok": true,
+ "status": 200,
+ "status_text": ""
+ },
+ "https://localhost:6006/font-roboto/RxZJdnzeo3R5zSexge8UUZBw1xU1rKptJj_0jans920.woff2": {
+ "data": "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",
+ "headers": [
+ [
+ "content-length",
+ "10811"
+ ],
+ [
+ "content-type",
+ "font/woff2"
+ ]
+ ],
+ "ok": true,
+ "status": 200,
+ "status_text": ""
+ },
+ "https://localhost:6006/font-roboto/d-6IYplOFocCacKzxwXSOJBw1xU1rKptJj_0jans920.woff2": {
+ "data": "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",
+ "headers": [
+ [
+ "content-length",
+ "10787"
+ ],
+ [
+ "content-type",
+ "font/woff2"
+ ]
+ ],
+ "ok": true,
+ "status": 200,
+ "status_text": ""
+ },
+ "https://localhost:6006/font-roboto/vPcynSL0qHq_6dX7lKVByXYhjbSpvc47ee6xR_80Hnw.woff2": {
+ "data": "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",
+ "headers": [
+ [
+ "content-length",
+ "12375"
+ ],
+ [
+ "content-type",
+ "font/woff2"
+ ]
+ ],
+ "ok": true,
+ "status": 200,
+ "status_text": ""
+ },
+ "https://localhost:6006/icon_bundle.svg": {
+ "data": "PD94bWwgdmVyc2lvbj0iMS4wIiA/Pjxzdmc+PGRlZnM+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iYWRkXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTkgMTNoLTZ2NmgtMnYtNkg1di0yaDZWNWgydjZoNnYyeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImFycm93X2JhY2tfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0yMCAxMUg3LjgzbDUuNTktNS41OUwxMiA0bC04IDggOCA4IDEuNDEtMS40MUw3LjgzIDEzSDIwdi0yeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImFycm93X2Rvd253YXJkXzI0cHgiPjxwYXRoIGZpbGw9IiMwMTAxMDEiIGQ9Ik0yMCAxMmwtMS40MS0xLjQxTDEzIDE2LjE3VjRoLTJ2MTIuMTdsLTUuNTgtNS41OUw0IDEybDggOCA4LTh6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iYXJyb3dfZm9yd2FyZF8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTEyIDRsLTEuNDEgMS40MUwxNi4xNyAxMUg0djJoMTIuMTdsLTUuNTggNS41OUwxMiAyMGw4LTh6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iYXJyb3dfdXB3YXJkXzI0cHgiPjxwYXRoIGQ9Ik00IDEybDEuNDEgMS40MUwxMSA3LjgzVjIwaDJWNy44M2w1LjU4IDUuNTlMMjAgMTJsLTgtOC04IDh6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iYnJpZ2h0bmVzc182XzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMjAgMTUuMzFMMjMuMzEgMTIgMjAgOC42OVY0aC00LjY5TDEyIC42OSA4LjY5IDRINHY0LjY5TC42OSAxMiA0IDE1LjMxVjIwaDQuNjlMMTIgMjMuMzEgMTUuMzEgMjBIMjB2LTQuNjl6TTEyIDE4VjZjMy4zMSAwIDYgMi42OSA2IDZzLTIuNjkgNi02IDZ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iYnVnX3JlcG9ydF8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJjYW5jZWxfMjRweCI+PHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTUgMTMuNTlMMTUuNTkgMTcgMTIgMTMuNDEgOC40MSAxNyA3IDE1LjU5IDEwLjU5IDEyIDcgOC40MSA4LjQxIDcgMTIgMTAuNTkgMTUuNTkgNyAxNyA4LjQxIDEzLjQxIDEyIDE3IDE1LjU5eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImNoYW5nZV9oaXN0b3J5XzI0cHgiPjxwYXRoIGQ9Ik0xMiA3Ljc3TDE4LjM5IDE4SDUuNjFMMTIgNy43N00xMiA0TDIgMjBoMjBMMTIgNHoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJjaGV2cm9uX2xlZnRfMjRweCI+PHBhdGggZD0iTTE1LjQxIDcuNDFMMTQgNmwtNiA2IDYgNiAxLjQxLTEuNDFMMTAuODMgMTJ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iY2hldnJvbl9yaWdodF8yNHB4Ij48cGF0aCBkPSJNMTAgNkw4LjU5IDcuNDEgMTMuMTcgMTJsLTQuNTggNC41OUwxMCAxOGw2LTZ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iY2xlYXJfMjRweCI+PHBhdGggZD0iTTE5IDYuNDFMMTcuNTkgNSAxMiAxMC41OSA2LjQxIDUgNSA2LjQxIDEwLjU5IDEyIDUgMTcuNTkgNi40MSAxOSAxMiAxMy40MSAxNy41OSAxOSAxOSAxNy41OSAxMy40MSAxMnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJjbG9zZV8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTE5IDYuNDFMMTcuNTkgNSAxMiAxMC41OSA2LjQxIDUgNSA2LjQxIDEwLjU5IDEyIDUgMTcuNTkgNi40MSAxOSAxMiAxMy40MSAxNy41OSAxOSAxOSAxNy41OSAxMy40MSAxMnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJjb250ZW50X2NvcHlfMjRweCI+PHBhdGggZD0iTTE2IDFINGMtMS4xIDAtMiAuOS0yIDJ2MTRoMlYzaDEyVjF6bTMgNEg4Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDExYzEuMSAwIDItLjkgMi0yVjdjMC0xLjEtLjktMi0yLTJ6bTAgMTZIOFY3aDExdjE0eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNCAyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJkYXJrX21vZGVfMjRweCI+PHJlY3QgZmlsbD0ibm9uZSIgaGVpZ2h0PSIyNCIgd2lkdGg9IjI0Ii8+PHBhdGggZD0iTTEyLDNjLTQuOTcsMC05LDQuMDMtOSw5czQuMDMsOSw5LDlzOS00LjAzLDktOWMwLTAuNDYtMC4wNC0wLjkyLTAuMS0xLjM2Yy0wLjk4LDEuMzctMi41OCwyLjI2LTQuNCwyLjI2IGMtMi45OCwwLTUuNC0yLjQyLTUuNC01LjRjMC0xLjgxLDAuODktMy40MiwyLjI2LTQuNEMxMi45MiwzLjA0LDEyLjQ2LDMsMTIsM0wxMiwzeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImRvbmVfMjRweCI+PHBhdGggZD0iTTkgMTYuMkw0LjggMTJsLTEuNCAxLjRMOSAxOSAyMSA3bC0xLjQtMS40TDkgMTYuMnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJkcmFnX2luZGljYXRvcl8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDBWMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTEgMThjMCAxLjEtLjkgMi0yIDJzLTItLjktMi0yIC45LTIgMi0yIDIgLjkgMiAyem0tMi04Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptMC02Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptNiA0YzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMi0yIC45LTIgMiAuOSAyIDIgMnptMCAyYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptMCA2Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJlZGl0XzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMyAxNy4yNVYyMWgzLjc1TDE3LjgxIDkuOTRsLTMuNzUtMy43NUwzIDE3LjI1ek0yMC43MSA3LjA0Yy4zOS0uMzkuMzktMS4wMiAwLTEuNDFsLTIuMzQtMi4zNGMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBsLTEuODMgMS44MyAzLjc1IDMuNzUgMS44My0xLjgzeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImVycm9yXzI0cHgiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0xIDE1aC0ydi0yaDJ2MnptMC00aC0yVjdoMnY2eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImV4cGFuZF9sZXNzXzI0cHgiPjxwYXRoIGQ9Ik0xMiA4bC02IDYgMS40MSAxLjQxTDEyIDEwLjgzbDQuNTkgNC41OEwxOCAxNHoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJleHBhbmRfbW9yZV8yNHB4Ij48cGF0aCBkPSJNMTYuNTkgOC41OUwxMiAxMy4xNyA3LjQxIDguNTkgNiAxMGw2IDYgNi02eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNCAyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJmaWx0ZXJfYWx0XzI0cHgiPjxnPjxwYXRoIGQ9Ik0wLDBoMjQgTTI0LDI0SDAiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNNC4yNSw1LjYxQzYuMjcsOC4yLDEwLDEzLDEwLDEzdjZjMCwwLjU1LDAuNDUsMSwxLDFoMmMwLjU1LDAsMS0wLjQ1LDEtMXYtNmMwLDAsMy43Mi00LjgsNS43NC03LjM5IEMyMC4yNSw0Ljk1LDE5Ljc4LDQsMTguOTUsNEg1LjA0QzQuMjEsNCwzLjc0LDQuOTUsNC4yNSw1LjYxeiIvPjxwYXRoIGQ9Ik0wLDBoMjR2MjRIMFYweiIgZmlsbD0ibm9uZSIvPjwvZz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJmaWx0ZXJfbGlzdF8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImZsYWdfMjRweCI+PHBhdGggZD0iTTE0LjQgNkwxNCA0SDV2MTdoMnYtN2g1LjZsLjQgMmg3VjZ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iZnVsbHNjcmVlbl8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTcgMTRINXY1aDV2LTJIN3YtM3ptLTItNGgyVjdoM1Y1SDV2NXptMTIgN2gtM3YyaDV2LTVoLTJ2M3pNMTQgNXYyaDN2M2gyVjVoLTV6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iZnVsbHNjcmVlbl9leGl0XzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNNSAxNmgzdjNoMnYtNUg1djJ6bTMtOEg1djJoNVY1SDh2M3ptNiAxMWgydi0zaDN2LTJoLTV2NXptMi0xMVY1aC0ydjVoNVY4aC0zeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImdldF9hcHBfMjRweCI+PHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJncm91cF93b3JrXzI0cHgiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyek04IDE3LjVjLTEuMzggMC0yLjUtMS4xMi0yLjUtMi41czEuMTItMi41IDIuNS0yLjUgMi41IDEuMTIgMi41IDIuNS0xLjEyIDIuNS0yLjUgMi41ek05LjUgOGMwLTEuMzggMS4xMi0yLjUgMi41LTIuNXMyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjVTOS41IDkuMzggOS41IDh6bTYuNSA5LjVjLTEuMzggMC0yLjUtMS4xMi0yLjUtMi41czEuMTItMi41IDIuNS0yLjUgMi41IDEuMTIgMi41IDIuNS0xLjEyIDIuNS0yLjUgMi41eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImhlbHBfb3V0bGluZV8yNHB4Ij48cGF0aCBkPSJNMTEgMThoMnYtMmgtMnYyem0xLTE2QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHptMC0xNGMtMi4yMSAwLTQgMS43OS00IDRoMmMwLTEuMS45LTIgMi0yczIgLjkgMiAyYzAgMi0zIDEuNzUtMyA1aDJjMC0yLjI1IDMtMi41IDMtNSAwLTIuMjEtMS43OS00LTQtNHoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJpbWFnZV9zZWFyY2hfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMFYweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xOCAxM3Y3SDRWNmg1LjAyYy4wNS0uNzEuMjItMS4zOC40OC0ySDRjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJ2LTVsLTItMnptLTEuNSA1aC0xMWwyLjc1LTMuNTMgMS45NiAyLjM2IDIuNzUtMy41NHptMi44LTkuMTFjLjQ0LS43LjctMS41MS43LTIuMzlDMjAgNC4wMSAxNy45OSAyIDE1LjUgMlMxMSA0LjAxIDExIDYuNXMyLjAxIDQuNSA0LjQ5IDQuNWMuODggMCAxLjctLjI2IDIuMzktLjdMMjEgMTMuNDIgMjIuNDIgMTIgMTkuMyA4Ljg5ek0xNS41IDlDMTQuMTIgOSAxMyA3Ljg4IDEzIDYuNVMxNC4xMiA0IDE1LjUgNCAxOCA1LjEyIDE4IDYuNSAxNi44OCA5IDE1LjUgOXoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJpbmZvX291dGxpbmVfMjRweCI+PHBhdGggZD0iTTExIDE3aDJ2LTZoLTJ2NnptMS0xNUM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6TTExIDloMlY3aC0ydjJ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImtlZXBfMjRweCI+PGc+PHJlY3QgZmlsbD0ibm9uZSIgaGVpZ2h0PSIyNCIgd2lkdGg9IjI0Ii8+PC9nPjxnPjxwYXRoIGQ9Ik0xNiw5VjRsMSwwYzAuNTUsMCwxLTAuNDUsMS0xdjBjMC0wLjU1LTAuNDUtMS0xLTFIN0M2LjQ1LDIsNiwyLjQ1LDYsM3YwIGMwLDAuNTUsMC40NSwxLDEsMWwxLDB2NWMwLDEuNjYtMS4zNCwzLTMsM2gwdjJoNS45N3Y3bDEsMWwxLTF2LTdIMTl2LTJoMEMxNy4zNCwxMiwxNiwxMC42NiwxNiw5eiIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9nPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNCAyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJrZWVwX291dGxpbmVfMjRweCI+PGc+PHJlY3QgZmlsbD0ibm9uZSIgaGVpZ2h0PSIyNCIgd2lkdGg9IjI0Ii8+PC9nPjxnPjxwYXRoIGQ9Ik0xNCw0djVjMCwxLjEyLDAuMzcsMi4xNiwxLDNIOWMwLjY1LTAuODYsMS0xLjksMS0zVjRIMTQgTTE3LDJIN0M2LjQ1LDIsNiwyLjQ1LDYsM2MwLDAuNTUsMC40NSwxLDEsMWMwLDAsMCwwLDAsMGwxLDB2NSBjMCwxLjY2LTEuMzQsMy0zLDN2Mmg1Ljk3djdsMSwxbDEtMXYtN0gxOXYtMmMwLDAsMCwwLDAsMGMtMS42NiwwLTMtMS4zNC0zLTNWNGwxLDBjMCwwLDAsMCwwLDBjMC41NSwwLDEtMC40NSwxLTEgQzE4LDIuNDUsMTcuNTUsMiwxNywyTDE3LDJ6Ii8+PC9nPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNCAyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJsaWdodF9tb2RlXzI0cHgiPjxyZWN0IGZpbGw9Im5vbmUiIGhlaWdodD0iMjQiIHdpZHRoPSIyNCIvPjxwYXRoIGQ9Ik0xMiw3Yy0yLjc2LDAtNSwyLjI0LTUsNXMyLjI0LDUsNSw1czUtMi4yNCw1LTVTMTQuNzYsNywxMiw3TDEyLDd6IE0yLDEzbDIsMGMwLjU1LDAsMS0wLjQ1LDEtMXMtMC40NS0xLTEtMWwtMiwwIGMtMC41NSwwLTEsMC40NS0xLDFTMS40NSwxMywyLDEzeiBNMjAsMTNsMiwwYzAuNTUsMCwxLTAuNDUsMS0xcy0wLjQ1LTEtMS0xbC0yLDBjLTAuNTUsMC0xLDAuNDUtMSwxUzE5LjQ1LDEzLDIwLDEzeiBNMTEsMnYyIGMwLDAuNTUsMC40NSwxLDEsMXMxLTAuNDUsMS0xVjJjMC0wLjU1LTAuNDUtMS0xLTFTMTEsMS40NSwxMSwyeiBNMTEsMjB2MmMwLDAuNTUsMC40NSwxLDEsMXMxLTAuNDUsMS0xdi0yYzAtMC41NS0wLjQ1LTEtMS0xIEMxMS40NSwxOSwxMSwxOS40NSwxMSwyMHogTTUuOTksNC41OGMtMC4zOS0wLjM5LTEuMDMtMC4zOS0xLjQxLDBjLTAuMzksMC4zOS0wLjM5LDEuMDMsMCwxLjQxbDEuMDYsMS4wNiBjMC4zOSwwLjM5LDEuMDMsMC4zOSwxLjQxLDBzMC4zOS0xLjAzLDAtMS40MUw1Ljk5LDQuNTh6IE0xOC4zNiwxNi45NWMtMC4zOS0wLjM5LTEuMDMtMC4zOS0xLjQxLDBjLTAuMzksMC4zOS0wLjM5LDEuMDMsMCwxLjQxIGwxLjA2LDEuMDZjMC4zOSwwLjM5LDEuMDMsMC4zOSwxLjQxLDBjMC4zOS0wLjM5LDAuMzktMS4wMywwLTEuNDFMMTguMzYsMTYuOTV6IE0xOS40Miw1Ljk5YzAuMzktMC4zOSwwLjM5LTEuMDMsMC0xLjQxIGMtMC4zOS0wLjM5LTEuMDMtMC4zOS0xLjQxLDBsLTEuMDYsMS4wNmMtMC4zOSwwLjM5LTAuMzksMS4wMywwLDEuNDFzMS4wMywwLjM5LDEuNDEsMEwxOS40Miw1Ljk5eiBNNy4wNSwxOC4zNiBjMC4zOS0wLjM5LDAuMzktMS4wMywwLTEuNDFjLTAuMzktMC4zOS0xLjAzLTAuMzktMS40MSwwbC0xLjA2LDEuMDZjLTAuMzksMC4zOS0wLjM5LDEuMDMsMCwxLjQxczEuMDMsMC4zOSwxLjQxLDBMNy4wNSwxOC4zNnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMjQgMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0ibGluZV93ZWlnaHRfMjRweCI+PGc+PHJlY3QgZmlsbD0ibm9uZSIgaGVpZ2h0PSIyNCIgd2lkdGg9IjI0IiB4PSIwIi8+PC9nPjxnPjxnPjxnPjxwYXRoIGQ9Ik0zLDE3aDE4di0ySDNWMTd6IE0zLDIwaDE4di0xSDNWMjB6IE0zLDEzaDE4di0zSDNWMTN6IE0zLDR2NGgxOFY0SDN6Ii8+PC9nPjwvZz48L2c+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0ibW9yZV92ZXJ0XzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTIgOGMxLjEgMCAyLS45IDItMnMtLjktMi0yLTItMiAuOS0yIDIgLjkgMiAyIDJ6bTAgMmMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTAgNmMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0ibm90aWZpY2F0aW9uc19ub25lXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTIgMjJjMS4xIDAgMi0uOSAyLTJoLTRjMCAxLjEuOSAyIDIgMnptNi02di01YzAtMy4wNy0xLjYzLTUuNjQtNC41LTYuMzJWNGMwLS44My0uNjctMS41LTEuNS0xLjVzLTEuNS42Ny0xLjUgMS41di42OEM3LjY0IDUuMzYgNiA3LjkyIDYgMTF2NWwtMiAydjFoMTZ2LTFsLTItMnptLTIgMUg4di02YzAtMi40OCAxLjUxLTQuNSA0LTQuNXM0IDIuMDIgNCA0LjV2NnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJvcGVuX2luX25ld18yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTE5IDE5SDVWNWg3VjNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0ydi03aC0ydjd6TTE0IDN2MmgzLjU5bC05LjgzIDkuODMgMS40MSAxLjQxTDE5IDYuNDFWMTBoMlYzaC03eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9InBhbGV0dGVfMjRweCI+PHBhdGggZD0iTTEyIDNjLTQuOTcgMC05IDQuMDMtOSA5czQuMDMgOSA5IDljLjgzIDAgMS41LS42NyAxLjUtMS41IDAtLjM5LS4xNS0uNzQtLjM5LTEuMDEtLjIzLS4yNi0uMzgtLjYxLS4zOC0uOTkgMC0uODMuNjctMS41IDEuNS0xLjVIMTZjMi43NiAwIDUtMi4yNCA1LTUgMC00LjQyLTQuMDMtOC05LTh6bS01LjUgOWMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzUuNjcgOSA2LjUgOSA4IDkuNjcgOCAxMC41IDcuMzMgMTIgNi41IDEyem0zLTRDOC42NyA4IDggNy4zMyA4IDYuNVM4LjY3IDUgOS41IDVzMS41LjY3IDEuNSAxLjVTMTAuMzMgOCA5LjUgOHptNSAwYy0uODMgMC0xLjUtLjY3LTEuNS0xLjVTMTMuNjcgNSAxNC41IDVzMS41LjY3IDEuNSAxLjVTMTUuMzMgOCAxNC41IDh6bTMgNGMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzE2LjY3IDkgMTcuNSA5czEuNS42NyAxLjUgMS41LS42NyAxLjUtMS41IDEuNXoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJyZWZyZXNoXzI0cHgiPjxwYXRoIGQ9Ik0xNy42NSA2LjM1QzE2LjIgNC45IDE0LjIxIDQgMTIgNGMtNC40MiAwLTcuOTkgMy41OC03Ljk5IDhzMy41NyA4IDcuOTkgOGMzLjczIDAgNi44NC0yLjU1IDcuNzMtNmgtMi4wOGMtLjgyIDIuMzMtMy4wNCA0LTUuNjUgNC0zLjMxIDAtNi0yLjY5LTYtNnMyLjY5LTYgNi02YzEuNjYgMCAzLjE0LjY5IDQuMjIgMS43OEwxMyAxMWg3VjRsLTIuMzUgMi4zNXoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJzZWFyY2hfMjRweCI+PHBhdGggZD0iTTE1LjUgMTRoLS43OWwtLjI4LS4yN0MxNS40MSAxMi41OSAxNiAxMS4xMSAxNiA5LjUgMTYgNS45MSAxMy4wOSAzIDkuNSAzUzMgNS45MSAzIDkuNSA1LjkxIDE2IDkuNSAxNmMxLjYxIDAgMy4wOS0uNTkgNC4yMy0xLjU3bC4yNy4yOHYuNzlsNSA0Ljk5TDIwLjQ5IDE5bC00Ljk5LTV6bS02IDBDNy4wMSAxNCA1IDExLjk5IDUgOS41UzcuMDEgNSA5LjUgNSAxNCA3LjAxIDE0IDkuNSAxMS45OSAxNCA5LjUgMTR6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0ic2V0dGluZ3NfMjRweCI+PHBhdGggZD0iTTE5LjQzIDEyLjk4Yy4wNC0uMzIuMDctLjY0LjA3LS45OHMtLjAzLS42Ni0uMDctLjk4bDIuMTEtMS42NWMuMTktLjE1LjI0LS40Mi4xMi0uNjRsLTItMy40NmMtLjEyLS4yMi0uMzktLjMtLjYxLS4yMmwtMi40OSAxYy0uNTItLjQtMS4wOC0uNzMtMS42OS0uOThsLS4zOC0yLjY1QzE0LjQ2IDIuMTggMTQuMjUgMiAxNCAyaC00Yy0uMjUgMC0uNDYuMTgtLjQ5LjQybC0uMzggMi42NWMtLjYxLjI1LTEuMTcuNTktMS42OS45OGwtMi40OS0xYy0uMjMtLjA5LS40OSAwLS42MS4yMmwtMiAzLjQ2Yy0uMTMuMjItLjA3LjQ5LjEyLjY0bDIuMTEgMS42NWMtLjA0LjMyLS4wNy42NS0uMDcuOThzLjAzLjY2LjA3Ljk4bC0yLjExIDEuNjVjLS4xOS4xNS0uMjQuNDItLjEyLjY0bDIgMy40NmMuMTIuMjIuMzkuMy42MS4yMmwyLjQ5LTFjLjUyLjQgMS4wOC43MyAxLjY5Ljk4bC4zOCAyLjY1Yy4wMy4yNC4yNC40Mi40OS40Mmg0Yy4yNSAwIC40Ni0uMTguNDktLjQybC4zOC0yLjY1Yy42MS0uMjUgMS4xNy0uNTkgMS42OS0uOThsMi40OSAxYy4yMy4wOS40OSAwIC42MS0uMjJsMi0zLjQ2Yy4xMi0uMjIuMDctLjQ5LS4xMi0uNjRsLTIuMTEtMS42NXpNMTIgMTUuNWMtMS45MyAwLTMuNS0xLjU3LTMuNS0zLjVzMS41Ny0zLjUgMy41LTMuNSAzLjUgMS41NyAzLjUgMy41LTEuNTcgMy41LTMuNSAzLjV6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0ic2V0dGluZ3NfYmFja3VwX3Jlc3RvcmVfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xNCAxMmMwLTEuMS0uOS0yLTItMnMtMiAuOS0yIDIgLjkgMiAyIDIgMi0uOSAyLTJ6bS0yLTljLTQuOTcgMC05IDQuMDMtOSA5SDBsNCA0IDQtNEg1YzAtMy44NyAzLjEzLTcgNy03czcgMy4xMyA3IDctMy4xMyA3LTcgN2MtMS41MSAwLTIuOTEtLjQ5LTQuMDYtMS4zbC0xLjQyIDEuNDRDOC4wNCAyMC4zIDkuOTQgMjEgMTIgMjFjNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0ic2V0dGluZ3Nfb3ZlcnNjYW5fMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xMi4wMSA1LjVMMTAgOGg0bC0xLjk5LTIuNXpNMTggMTB2NGwyLjUtMS45OUwxOCAxMHpNNiAxMGwtMi41IDIuMDFMNiAxNHYtNHptOCA2aC00bDIuMDEgMi41TDE0IDE2em03LTEzSDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNi4wMUgzVjQuOTloMTh2MTQuMDJ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0idmlzaWJpbGl0eV9vZmZfMjRweCI+PHBhdGggZD0iTTEyIDdjMi43NiAwIDUgMi4yNCA1IDUgMCAuNjUtLjEzIDEuMjYtLjM2IDEuODNsMi45MiAyLjkyYzEuNTEtMS4yNiAyLjctMi44OSAzLjQzLTQuNzUtMS43My00LjM5LTYtNy41LTExLTcuNS0xLjQgMC0yLjc0LjI1LTMuOTguN2wyLjE2IDIuMTZDMTAuNzQgNy4xMyAxMS4zNSA3IDEyIDd6TTIgNC4yN2wyLjI4IDIuMjguNDYuNDZDMy4wOCA4LjMgMS43OCAxMC4wMiAxIDEyYzEuNzMgNC4zOSA2IDcuNSAxMSA3LjUgMS41NSAwIDMuMDMtLjMgNC4zOC0uODRsLjQyLjQyTDE5LjczIDIyIDIxIDIwLjczIDMuMjcgMyAyIDQuMjd6TTcuNTMgOS44bDEuNTUgMS41NWMtLjA1LjIxLS4wOC40My0uMDguNjUgMCAxLjY2IDEuMzQgMyAzIDMgLjIyIDAgLjQ0LS4wMy42NS0uMDhsMS41NSAxLjU1Yy0uNjcuMzMtMS40MS41My0yLjIuNTMtMi43NiAwLTUtMi4yNC01LTUgMC0uNzkuMi0xLjUzLjUzLTIuMnptNC4zMS0uNzhsMy4xNSAzLjE1LjAyLS4xNmMwLTEuNjYtMS4zNC0zLTMtM2wtLjE3LjAxeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9Indhcm5pbmdfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xIDIxaDIyTDEyIDIgMSAyMXptMTItM2gtMnYtMmgydjJ6bTAtNGgtMnYtNGgydjR6Ii8+PC9zdmc+PC9kZWZzPjwvc3ZnPgo=",
+ "headers": [
+ [
+ "content-length",
+ "4392"
+ ],
+ [
+ "content-type",
+ "image/svg+xml; charset=utf-8"
+ ]
+ ],
+ "ok": true,
+ "status": 200,
+ "status_text": ""
+ },
+ "https://localhost:6006/index.js?_file_hash=c805ade7": {
+ "data": "dmFyIENMT1NVUkVfTk9fREVQUyA9IHRydWU7CndpbmRvdy5wb2x5bWVyU2tpcExvYWRpbmdGb250Um9ib3RvID0gdHJ1ZTsKLy8gQ29weXJpZ2h0IDIwMTQgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8KLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLy8gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAovLwovLyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLy8KLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQovLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAovLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLy8gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgohZnVuY3Rpb24oKXt2YXIgYT17fSxiPXt9LGM9e307IWZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhKXtpZigibnVtYmVyIj09dHlwZW9mIGEpcmV0dXJuIGE7dmFyIGI9e307Zm9yKHZhciBjIGluIGEpYltjXT1hW2NdO3JldHVybiBifWZ1bmN0aW9uIGQoKXt0aGlzLl9kZWxheT0wLHRoaXMuX2VuZERlbGF5PTAsdGhpcy5fZmlsbD0ibm9uZSIsdGhpcy5faXRlcmF0aW9uU3RhcnQ9MCx0aGlzLl9pdGVyYXRpb25zPTEsdGhpcy5fZHVyYXRpb249MCx0aGlzLl9wbGF5YmFja1JhdGU9MSx0aGlzLl9kaXJlY3Rpb249Im5vcm1hbCIsdGhpcy5fZWFzaW5nPSJsaW5lYXIiLHRoaXMuX2Vhc2luZ0Z1bmN0aW9uPXh9ZnVuY3Rpb24gZSgpe3JldHVybiBhLmlzRGVwcmVjYXRlZCgiSW52YWxpZCB0aW1pbmcgaW5wdXRzIiwiMjAxNi0wMy0wMiIsIlR5cGVFcnJvciBleGNlcHRpb25zIHdpbGwgYmUgdGhyb3duIGluc3RlYWQuIiwhMCl9ZnVuY3Rpb24gZihiLGMsZSl7dmFyIGY9bmV3IGQ7cmV0dXJuIGMmJihmLmZpbGw9ImJvdGgiLGYuZHVyYXRpb249ImF1dG8iKSwibnVtYmVyIiE9dHlwZW9mIGJ8fGlzTmFOKGIpP3ZvaWQgMCE9PWImJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGIpLmZvckVhY2goZnVuY3Rpb24oYyl7aWYoImF1dG8iIT1iW2NdKXtpZigoIm51bWJlciI9PXR5cGVvZiBmW2NdfHwiZHVyYXRpb24iPT1jKSYmKCJudW1iZXIiIT10eXBlb2YgYltjXXx8aXNOYU4oYltjXSkpKXJldHVybjtpZigiZmlsbCI9PWMmJi0xPT12LmluZGV4T2YoYltjXSkpcmV0dXJuO2lmKCJkaXJlY3Rpb24iPT1jJiYtMT09dy5pbmRleE9mKGJbY10pKXJldHVybjtpZigicGxheWJhY2tSYXRlIj09YyYmMSE9PWJbY10mJmEuaXNEZXByZWNhdGVkKCJBbmltYXRpb25FZmZlY3RUaW1pbmcucGxheWJhY2tSYXRlIiwiMjAxNC0xMS0yOCIsIlVzZSBBbmltYXRpb24ucGxheWJhY2tSYXRlIGluc3RlYWQuIikpcmV0dXJuO2ZbY109YltjXX19KTpmLmR1cmF0aW9uPWIsZn1mdW5jdGlvbiBnKGEpe3JldHVybiJudW1iZXIiPT10eXBlb2YgYSYmKGE9aXNOYU4oYSk/e2R1cmF0aW9uOjB9OntkdXJhdGlvbjphfSksYX1mdW5jdGlvbiBoKGIsYyl7cmV0dXJuIGI9YS5udW1lcmljVGltaW5nVG9PYmplY3QoYiksZihiLGMpfWZ1bmN0aW9uIGkoYSxiLGMsZCl7cmV0dXJuIGE8MHx8YT4xfHxjPDB8fGM+MT94OmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGYoYSxiLGMpe3JldHVybiAzKmEqKDEtYykqKDEtYykqYyszKmIqKDEtYykqYypjK2MqYypjfWlmKGU8PTApe3ZhciBnPTA7cmV0dXJuIGE+MD9nPWIvYTohYiYmYz4wJiYoZz1kL2MpLGcqZX1pZihlPj0xKXt2YXIgaD0wO3JldHVybiBjPDE/aD0oZC0xKS8oYy0xKToxPT1jJiZhPDEmJihoPShiLTEpLyhhLTEpKSwxK2gqKGUtMSl9Zm9yKHZhciBpPTAsaj0xO2k8ajspe3ZhciBrPShpK2opLzIsbD1mKGEsYyxrKTtpZihNYXRoLmFicyhlLWwpPDFlLTUpcmV0dXJuIGYoYixkLGspO2w8ZT9pPWs6aj1rfXJldHVybiBmKGIsZCxrKX19ZnVuY3Rpb24gaihhLGIpe3JldHVybiBmdW5jdGlvbihjKXtpZihjPj0xKXJldHVybiAxO3ZhciBkPTEvYTtyZXR1cm4oYys9YipkKS1jJWR9fWZ1bmN0aW9uIGsoYSl7Q3x8KEM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUpLEMuYW5pbWF0aW9uVGltaW5nRnVuY3Rpb249IiIsQy5hbmltYXRpb25UaW1pbmdGdW5jdGlvbj1hO3ZhciBiPUMuYW5pbWF0aW9uVGltaW5nRnVuY3Rpb247aWYoIiI9PWImJmUoKSl0aHJvdyBuZXcgVHlwZUVycm9yKGErIiBpcyBub3QgYSB2YWxpZCB2YWx1ZSBmb3IgZWFzaW5nIik7cmV0dXJuIGJ9ZnVuY3Rpb24gbChhKXtpZigibGluZWFyIj09YSlyZXR1cm4geDt2YXIgYj1FLmV4ZWMoYSk7aWYoYilyZXR1cm4gaS5hcHBseSh0aGlzLGIuc2xpY2UoMSkubWFwKE51bWJlcikpO3ZhciBjPUYuZXhlYyhhKTtpZihjKXJldHVybiBqKE51bWJlcihjWzFdKSxBKTt2YXIgZD1HLmV4ZWMoYSk7cmV0dXJuIGQ/aihOdW1iZXIoZFsxXSkse3N0YXJ0OnksbWlkZGxlOnosZW5kOkF9W2RbMl1dKTpCW2FdfHx4fWZ1bmN0aW9uIG0oYSl7cmV0dXJuIE1hdGguYWJzKG4oYSkvYS5wbGF5YmFja1JhdGUpfWZ1bmN0aW9uIG4oYSl7cmV0dXJuIDA9PT1hLmR1cmF0aW9ufHwwPT09YS5pdGVyYXRpb25zPzA6YS5kdXJhdGlvbiphLml0ZXJhdGlvbnN9ZnVuY3Rpb24gbyhhLGIsYyl7aWYobnVsbD09YilyZXR1cm4gSDt2YXIgZD1jLmRlbGF5K2ErYy5lbmREZWxheTtyZXR1cm4gYjxNYXRoLm1pbihjLmRlbGF5LGQpP0k6Yj49TWF0aC5taW4oYy5kZWxheSthLGQpP0o6S31mdW5jdGlvbiBwKGEsYixjLGQsZSl7c3dpdGNoKGQpe2Nhc2UgSTpyZXR1cm4iYmFja3dhcmRzIj09Ynx8ImJvdGgiPT1iPzA6bnVsbDtjYXNlIEs6cmV0dXJuIGMtZTtjYXNlIEo6cmV0dXJuImZvcndhcmRzIj09Ynx8ImJvdGgiPT1iP2E6bnVsbDtjYXNlIEg6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIHEoYSxiLGMsZCxlKXt2YXIgZj1lO3JldHVybiAwPT09YT9iIT09SSYmKGYrPWMpOmYrPWQvYSxmfWZ1bmN0aW9uIHIoYSxiLGMsZCxlLGYpe3ZhciBnPWE9PT0xLzA/YiUxOmElMTtyZXR1cm4gMCE9PWd8fGMhPT1KfHwwPT09ZHx8MD09PWUmJjAhPT1mfHwoZz0xKSxnfWZ1bmN0aW9uIHMoYSxiLGMsZCl7cmV0dXJuIGE9PT1KJiZiPT09MS8wPzEvMDoxPT09Yz9NYXRoLmZsb29yKGQpLTE6TWF0aC5mbG9vcihkKX1mdW5jdGlvbiB0KGEsYixjKXt2YXIgZD1hO2lmKCJub3JtYWwiIT09YSYmInJldmVyc2UiIT09YSl7dmFyIGU9YjsiYWx0ZXJuYXRlLXJldmVyc2UiPT09YSYmKGUrPTEpLGQ9Im5vcm1hbCIsZSE9PTEvMCYmZSUyIT0wJiYoZD0icmV2ZXJzZSIpfXJldHVybiJub3JtYWwiPT09ZD9jOjEtY31mdW5jdGlvbiB1KGEsYixjKXt2YXIgZD1vKGEsYixjKSxlPXAoYSxjLmZpbGwsYixkLGMuZGVsYXkpO2lmKG51bGw9PT1lKXJldHVybiBudWxsO3ZhciBmPXEoYy5kdXJhdGlvbixkLGMuaXRlcmF0aW9ucyxlLGMuaXRlcmF0aW9uU3RhcnQpLGc9cihmLGMuaXRlcmF0aW9uU3RhcnQsZCxjLml0ZXJhdGlvbnMsZSxjLmR1cmF0aW9uKSxoPXMoZCxjLml0ZXJhdGlvbnMsZyxmKSxpPXQoYy5kaXJlY3Rpb24saCxnKTtyZXR1cm4gYy5fZWFzaW5nRnVuY3Rpb24oaSl9dmFyIHY9ImJhY2t3YXJkc3xmb3J3YXJkc3xib3RofG5vbmUiLnNwbGl0KCJ8Iiksdz0icmV2ZXJzZXxhbHRlcm5hdGV8YWx0ZXJuYXRlLXJldmVyc2UiLnNwbGl0KCJ8IikseD1mdW5jdGlvbihhKXtyZXR1cm4gYX07ZC5wcm90b3R5cGU9e19zZXRNZW1iZXI6ZnVuY3Rpb24oYixjKXt0aGlzWyJfIitiXT1jLHRoaXMuX2VmZmVjdCYmKHRoaXMuX2VmZmVjdC5fdGltaW5nSW5wdXRbYl09Yyx0aGlzLl9lZmZlY3QuX3RpbWluZz1hLm5vcm1hbGl6ZVRpbWluZ0lucHV0KHRoaXMuX2VmZmVjdC5fdGltaW5nSW5wdXQpLHRoaXMuX2VmZmVjdC5hY3RpdmVEdXJhdGlvbj1hLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uKHRoaXMuX2VmZmVjdC5fdGltaW5nKSx0aGlzLl9lZmZlY3QuX2FuaW1hdGlvbiYmdGhpcy5fZWZmZWN0Ll9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCkpfSxnZXQgcGxheWJhY2tSYXRlKCl7cmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZX0sc2V0IGRlbGF5KGEpe3RoaXMuX3NldE1lbWJlcigiZGVsYXkiLGEpfSxnZXQgZGVsYXkoKXtyZXR1cm4gdGhpcy5fZGVsYXl9LHNldCBlbmREZWxheShhKXt0aGlzLl9zZXRNZW1iZXIoImVuZERlbGF5IixhKX0sZ2V0IGVuZERlbGF5KCl7cmV0dXJuIHRoaXMuX2VuZERlbGF5fSxzZXQgZmlsbChhKXt0aGlzLl9zZXRNZW1iZXIoImZpbGwiLGEpfSxnZXQgZmlsbCgpe3JldHVybiB0aGlzLl9maWxsfSxzZXQgaXRlcmF0aW9uU3RhcnQoYSl7aWYoKGlzTmFOKGEpfHxhPDApJiZlKCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiaXRlcmF0aW9uU3RhcnQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIsIHJlY2VpdmVkOiAiK2EpO3RoaXMuX3NldE1lbWJlcigiaXRlcmF0aW9uU3RhcnQiLGEpfSxnZXQgaXRlcmF0aW9uU3RhcnQoKXtyZXR1cm4gdGhpcy5faXRlcmF0aW9uU3RhcnR9LHNldCBkdXJhdGlvbihhKXtpZigiYXV0byIhPWEmJihpc05hTihhKXx8YTwwKSYmZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoImR1cmF0aW9uIG11c3QgYmUgbm9uLW5lZ2F0aXZlIG9yIGF1dG8sIHJlY2VpdmVkOiAiK2EpO3RoaXMuX3NldE1lbWJlcigiZHVyYXRpb24iLGEpfSxnZXQgZHVyYXRpb24oKXtyZXR1cm4gdGhpcy5fZHVyYXRpb259LHNldCBkaXJlY3Rpb24oYSl7dGhpcy5fc2V0TWVtYmVyKCJkaXJlY3Rpb24iLGEpfSxnZXQgZGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuX2RpcmVjdGlvbn0sc2V0IGVhc2luZyhhKXt0aGlzLl9lYXNpbmdGdW5jdGlvbj1sKGsoYSkpLHRoaXMuX3NldE1lbWJlcigiZWFzaW5nIixhKX0sZ2V0IGVhc2luZygpe3JldHVybiB0aGlzLl9lYXNpbmd9LHNldCBpdGVyYXRpb25zKGEpe2lmKChpc05hTihhKXx8YTwwKSYmZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoIml0ZXJhdGlvbnMgbXVzdCBiZSBub24tbmVnYXRpdmUsIHJlY2VpdmVkOiAiK2EpO3RoaXMuX3NldE1lbWJlcigiaXRlcmF0aW9ucyIsYSl9LGdldCBpdGVyYXRpb25zKCl7cmV0dXJuIHRoaXMuX2l0ZXJhdGlvbnN9fTt2YXIgeT0xLHo9LjUsQT0wLEI9e2Vhc2U6aSguMjUsLjEsLjI1LDEpLCJlYXNlLWluIjppKC40MiwwLDEsMSksImVhc2Utb3V0IjppKDAsMCwuNTgsMSksImVhc2UtaW4tb3V0IjppKC40MiwwLC41OCwxKSwic3RlcC1zdGFydCI6aigxLHkpLCJzdGVwLW1pZGRsZSI6aigxLHopLCJzdGVwLWVuZCI6aigxLEEpfSxDPW51bGwsRD0iXFxzKigtP1xcZCtcXC4/XFxkKnwtP1xcLlxcZCspXFxzKiIsRT1uZXcgUmVnRXhwKCJjdWJpYy1iZXppZXJcXCgiK0QrIiwiK0QrIiwiK0QrIiwiK0QrIlxcKSIpLEY9L3N0ZXBzXChccyooXGQrKVxzKlwpLyxHPS9zdGVwc1woXHMqKFxkKylccyosXHMqKHN0YXJ0fG1pZGRsZXxlbmQpXHMqXCkvLEg9MCxJPTEsSj0yLEs9MzthLmNsb25lVGltaW5nSW5wdXQ9YyxhLm1ha2VUaW1pbmc9ZixhLm51bWVyaWNUaW1pbmdUb09iamVjdD1nLGEubm9ybWFsaXplVGltaW5nSW5wdXQ9aCxhLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uPW0sYS5jYWxjdWxhdGVJdGVyYXRpb25Qcm9ncmVzcz11LGEuY2FsY3VsYXRlUGhhc2U9byxhLm5vcm1hbGl6ZUVhc2luZz1rLGEucGFyc2VFYXNpbmdGdW5jdGlvbj1sfShhKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiKXtyZXR1cm4gYSBpbiBrP2tbYV1bYl18fGI6Yn1mdW5jdGlvbiBkKGEpe3JldHVybiJkaXNwbGF5Ij09PWF8fDA9PT1hLmxhc3RJbmRleE9mKCJhbmltYXRpb24iLDApfHwwPT09YS5sYXN0SW5kZXhPZigidHJhbnNpdGlvbiIsMCl9ZnVuY3Rpb24gZShhLGIsZSl7aWYoIWQoYSkpe3ZhciBmPWhbYV07aWYoZil7aS5zdHlsZVthXT1iO2Zvcih2YXIgZyBpbiBmKXt2YXIgaj1mW2ddLGs9aS5zdHlsZVtqXTtlW2pdPWMoaixrKX19ZWxzZSBlW2FdPWMoYSxiKX19ZnVuY3Rpb24gZihhKXt2YXIgYj1bXTtmb3IodmFyIGMgaW4gYSlpZighKGMgaW5bImVhc2luZyIsIm9mZnNldCIsImNvbXBvc2l0ZSJdKSl7dmFyIGQ9YVtjXTtBcnJheS5pc0FycmF5KGQpfHwoZD1bZF0pO2Zvcih2YXIgZSxmPWQubGVuZ3RoLGc9MDtnPGY7ZysrKWU9e30sZS5vZmZzZXQ9Im9mZnNldCJpbiBhP2Eub2Zmc2V0OjE9PWY/MTpnLyhmLTEpLCJlYXNpbmciaW4gYSYmKGUuZWFzaW5nPWEuZWFzaW5nKSwiY29tcG9zaXRlImluIGEmJihlLmNvbXBvc2l0ZT1hLmNvbXBvc2l0ZSksZVtjXT1kW2ddLGIucHVzaChlKX1yZXR1cm4gYi5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEub2Zmc2V0LWIub2Zmc2V0fSksYn1mdW5jdGlvbiBnKGIpe2Z1bmN0aW9uIGMoKXt2YXIgYT1kLmxlbmd0aDtudWxsPT1kW2EtMV0ub2Zmc2V0JiYoZFthLTFdLm9mZnNldD0xKSxhPjEmJm51bGw9PWRbMF0ub2Zmc2V0JiYoZFswXS5vZmZzZXQ9MCk7Zm9yKHZhciBiPTAsYz1kWzBdLm9mZnNldCxlPTE7ZTxhO2UrKyl7dmFyIGY9ZFtlXS5vZmZzZXQ7aWYobnVsbCE9Zil7Zm9yKHZhciBnPTE7ZzxlLWI7ZysrKWRbYitnXS5vZmZzZXQ9YysoZi1jKSpnLyhlLWIpO2I9ZSxjPWZ9fX1pZihudWxsPT1iKXJldHVybltdO3dpbmRvdy5TeW1ib2wmJlN5bWJvbC5pdGVyYXRvciYmQXJyYXkucHJvdG90eXBlLmZyb20mJmJbU3ltYm9sLml0ZXJhdG9yXSYmKGI9QXJyYXkuZnJvbShiKSksQXJyYXkuaXNBcnJheShiKXx8KGI9ZihiKSk7Zm9yKHZhciBkPWIubWFwKGZ1bmN0aW9uKGIpe3ZhciBjPXt9O2Zvcih2YXIgZCBpbiBiKXt2YXIgZj1iW2RdO2lmKCJvZmZzZXQiPT1kKXtpZihudWxsIT1mKXtpZihmPU51bWJlcihmKSwhaXNGaW5pdGUoZikpdGhyb3cgbmV3IFR5cGVFcnJvcigiS2V5ZnJhbWUgb2Zmc2V0cyBtdXN0IGJlIG51bWJlcnMuIik7aWYoZjwwfHxmPjEpdGhyb3cgbmV3IFR5cGVFcnJvcigiS2V5ZnJhbWUgb2Zmc2V0cyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMS4iKX19ZWxzZSBpZigiY29tcG9zaXRlIj09ZCl7aWYoImFkZCI9PWZ8fCJhY2N1bXVsYXRlIj09Zil0aHJvd3t0eXBlOkRPTUV4Y2VwdGlvbi5OT1RfU1VQUE9SVEVEX0VSUixuYW1lOiJOb3RTdXBwb3J0ZWRFcnJvciIsbWVzc2FnZToiYWRkIGNvbXBvc2l0aW5nIGlzIG5vdCBzdXBwb3J0ZWQifTtpZigicmVwbGFjZSIhPWYpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBjb21wb3NpdGUgbW9kZSAiK2YrIi4iKX1lbHNlIGY9ImVhc2luZyI9PWQ/YS5ub3JtYWxpemVFYXNpbmcoZik6IiIrZjtlKGQsZixjKX1yZXR1cm4gdm9pZCAwPT1jLm9mZnNldCYmKGMub2Zmc2V0PW51bGwpLHZvaWQgMD09Yy5lYXNpbmcmJihjLmVhc2luZz0ibGluZWFyIiksY30pLGc9ITAsaD0tMS8wLGk9MDtpPGQubGVuZ3RoO2krKyl7dmFyIGo9ZFtpXS5vZmZzZXQ7aWYobnVsbCE9ail7aWYoajxoKXRocm93IG5ldyBUeXBlRXJyb3IoIktleWZyYW1lcyBhcmUgbm90IGxvb3NlbHkgc29ydGVkIGJ5IG9mZnNldC4gU29ydCBvciBzcGVjaWZ5IG9mZnNldHMuIik7aD1qfWVsc2UgZz0hMX1yZXR1cm4gZD1kLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYS5vZmZzZXQ+PTAmJmEub2Zmc2V0PD0xfSksZ3x8YygpLGR9dmFyIGg9e2JhY2tncm91bmQ6WyJiYWNrZ3JvdW5kSW1hZ2UiLCJiYWNrZ3JvdW5kUG9zaXRpb24iLCJiYWNrZ3JvdW5kU2l6ZSIsImJhY2tncm91bmRSZXBlYXQiLCJiYWNrZ3JvdW5kQXR0YWNobWVudCIsImJhY2tncm91bmRPcmlnaW4iLCJiYWNrZ3JvdW5kQ2xpcCIsImJhY2tncm91bmRDb2xvciJdLGJvcmRlcjpbImJvcmRlclRvcENvbG9yIiwiYm9yZGVyVG9wU3R5bGUiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlclJpZ2h0Q29sb3IiLCJib3JkZXJSaWdodFN0eWxlIiwiYm9yZGVyUmlnaHRXaWR0aCIsImJvcmRlckJvdHRvbUNvbG9yIiwiYm9yZGVyQm90dG9tU3R5bGUiLCJib3JkZXJCb3R0b21XaWR0aCIsImJvcmRlckxlZnRDb2xvciIsImJvcmRlckxlZnRTdHlsZSIsImJvcmRlckxlZnRXaWR0aCJdLGJvcmRlckJvdHRvbTpbImJvcmRlckJvdHRvbVdpZHRoIiwiYm9yZGVyQm90dG9tU3R5bGUiLCJib3JkZXJCb3R0b21Db2xvciJdLGJvcmRlckNvbG9yOlsiYm9yZGVyVG9wQ29sb3IiLCJib3JkZXJSaWdodENvbG9yIiwiYm9yZGVyQm90dG9tQ29sb3IiLCJib3JkZXJMZWZ0Q29sb3IiXSxib3JkZXJMZWZ0OlsiYm9yZGVyTGVmdFdpZHRoIiwiYm9yZGVyTGVmdFN0eWxlIiwiYm9yZGVyTGVmdENvbG9yIl0sYm9yZGVyUmFkaXVzOlsiYm9yZGVyVG9wTGVmdFJhZGl1cyIsImJvcmRlclRvcFJpZ2h0UmFkaXVzIiwiYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMiLCJib3JkZXJCb3R0b21MZWZ0UmFkaXVzIl0sYm9yZGVyUmlnaHQ6WyJib3JkZXJSaWdodFdpZHRoIiwiYm9yZGVyUmlnaHRTdHlsZSIsImJvcmRlclJpZ2h0Q29sb3IiXSxib3JkZXJUb3A6WyJib3JkZXJUb3BXaWR0aCIsImJvcmRlclRvcFN0eWxlIiwiYm9yZGVyVG9wQ29sb3IiXSxib3JkZXJXaWR0aDpbImJvcmRlclRvcFdpZHRoIiwiYm9yZGVyUmlnaHRXaWR0aCIsImJvcmRlckJvdHRvbVdpZHRoIiwiYm9yZGVyTGVmdFdpZHRoIl0sZmxleDpbImZsZXhHcm93IiwiZmxleFNocmluayIsImZsZXhCYXNpcyJdLGZvbnQ6WyJmb250RmFtaWx5IiwiZm9udFNpemUiLCJmb250U3R5bGUiLCJmb250VmFyaWFudCIsImZvbnRXZWlnaHQiLCJsaW5lSGVpZ2h0Il0sbWFyZ2luOlsibWFyZ2luVG9wIiwibWFyZ2luUmlnaHQiLCJtYXJnaW5Cb3R0b20iLCJtYXJnaW5MZWZ0Il0sb3V0bGluZTpbIm91dGxpbmVDb2xvciIsIm91dGxpbmVTdHlsZSIsIm91dGxpbmVXaWR0aCJdLHBhZGRpbmc6WyJwYWRkaW5nVG9wIiwicGFkZGluZ1JpZ2h0IiwicGFkZGluZ0JvdHRvbSIsInBhZGRpbmdMZWZ0Il19LGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiZGl2Iiksaj17dGhpbjoiMXB4IixtZWRpdW06IjNweCIsdGhpY2s6IjVweCJ9LGs9e2JvcmRlckJvdHRvbVdpZHRoOmosYm9yZGVyTGVmdFdpZHRoOmosYm9yZGVyUmlnaHRXaWR0aDpqLGJvcmRlclRvcFdpZHRoOmosZm9udFNpemU6eyJ4eC1zbWFsbCI6IjYwJSIsIngtc21hbGwiOiI3NSUiLHNtYWxsOiI4OSUiLG1lZGl1bToiMTAwJSIsbGFyZ2U6IjEyMCUiLCJ4LWxhcmdlIjoiMTUwJSIsInh4LWxhcmdlIjoiMjAwJSJ9LGZvbnRXZWlnaHQ6e25vcm1hbDoiNDAwIixib2xkOiI3MDAifSxvdXRsaW5lV2lkdGg6aix0ZXh0U2hhZG93Ontub25lOiIwcHggMHB4IDBweCB0cmFuc3BhcmVudCJ9LGJveFNoYWRvdzp7bm9uZToiMHB4IDBweCAwcHggMHB4IHRyYW5zcGFyZW50In19O2EuY29udmVydFRvQXJyYXlGb3JtPWYsYS5ub3JtYWxpemVLZXlmcmFtZXM9Z30oYSksZnVuY3Rpb24oYSl7dmFyIGI9e307YS5pc0RlcHJlY2F0ZWQ9ZnVuY3Rpb24oYSxjLGQsZSl7dmFyIGY9ZT8iYXJlIjoiaXMiLGc9bmV3IERhdGUsaD1uZXcgRGF0ZShjKTtyZXR1cm4gaC5zZXRNb250aChoLmdldE1vbnRoKCkrMyksIShnPGgmJihhIGluIGJ8fGNvbnNvbGUud2FybigiV2ViIEFuaW1hdGlvbnM6ICIrYSsiICIrZisiIGRlcHJlY2F0ZWQgYW5kIHdpbGwgc3RvcCB3b3JraW5nIG9uICIraC50b0RhdGVTdHJpbmcoKSsiLiAiK2QpLGJbYV09ITAsMSkpfSxhLmRlcHJlY2F0ZWQ9ZnVuY3Rpb24oYixjLGQsZSl7dmFyIGY9ZT8iYXJlIjoiaXMiO2lmKGEuaXNEZXByZWNhdGVkKGIsYyxkLGUpKXRocm93IG5ldyBFcnJvcihiKyIgIitmKyIgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gIitkKX19KGEpLGZ1bmN0aW9uKCl7aWYoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFuaW1hdGUpe3ZhciBjPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hbmltYXRlKFtdLDApLGQ9ITA7aWYoYyYmKGQ9ITEsInBsYXl8Y3VycmVudFRpbWV8cGF1c2V8cmV2ZXJzZXxwbGF5YmFja1JhdGV8Y2FuY2VsfGZpbmlzaHxzdGFydFRpbWV8cGxheVN0YXRlIi5zcGxpdCgifCIpLmZvckVhY2goZnVuY3Rpb24oYSl7dm9pZCAwPT09Y1thXSYmKGQ9ITApfSkpLCFkKXJldHVybn0hZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7Zm9yKHZhciBiPXt9LGM9MDtjPGEubGVuZ3RoO2MrKylmb3IodmFyIGQgaW4gYVtjXSlpZigib2Zmc2V0IiE9ZCYmImVhc2luZyIhPWQmJiJjb21wb3NpdGUiIT1kKXt2YXIgZT17b2Zmc2V0OmFbY10ub2Zmc2V0LGVhc2luZzphW2NdLmVhc2luZyx2YWx1ZTphW2NdW2RdfTtiW2RdPWJbZF18fFtdLGJbZF0ucHVzaChlKX1mb3IodmFyIGYgaW4gYil7dmFyIGc9YltmXTtpZigwIT1nWzBdLm9mZnNldHx8MSE9Z1tnLmxlbmd0aC0xXS5vZmZzZXQpdGhyb3d7dHlwZTpET01FeGNlcHRpb24uTk9UX1NVUFBPUlRFRF9FUlIsbmFtZToiTm90U3VwcG9ydGVkRXJyb3IiLG1lc3NhZ2U6IlBhcnRpYWwga2V5ZnJhbWVzIGFyZSBub3Qgc3VwcG9ydGVkIn19cmV0dXJuIGJ9ZnVuY3Rpb24gZShjKXt2YXIgZD1bXTtmb3IodmFyIGUgaW4gYylmb3IodmFyIGY9Y1tlXSxnPTA7ZzxmLmxlbmd0aC0xO2crKyl7dmFyIGg9ZyxpPWcrMSxqPWZbaF0ub2Zmc2V0LGs9ZltpXS5vZmZzZXQsbD1qLG09azswPT1nJiYobD0tMS8wLDA9PWsmJihpPWgpKSxnPT1mLmxlbmd0aC0yJiYobT0xLzAsMT09aiYmKGg9aSkpLGQucHVzaCh7YXBwbHlGcm9tOmwsYXBwbHlUbzptLHN0YXJ0T2Zmc2V0OmZbaF0ub2Zmc2V0LGVuZE9mZnNldDpmW2ldLm9mZnNldCxlYXNpbmdGdW5jdGlvbjphLnBhcnNlRWFzaW5nRnVuY3Rpb24oZltoXS5lYXNpbmcpLHByb3BlcnR5OmUsaW50ZXJwb2xhdGlvbjpiLnByb3BlcnR5SW50ZXJwb2xhdGlvbihlLGZbaF0udmFsdWUsZltpXS52YWx1ZSl9KX1yZXR1cm4gZC5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuc3RhcnRPZmZzZXQtYi5zdGFydE9mZnNldH0pLGR9Yi5jb252ZXJ0RWZmZWN0SW5wdXQ9ZnVuY3Rpb24oYyl7dmFyIGY9YS5ub3JtYWxpemVLZXlmcmFtZXMoYyksZz1kKGYpLGg9ZShnKTtyZXR1cm4gZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jKWguZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBjPj1hLmFwcGx5RnJvbSYmYzxhLmFwcGx5VG99KS5mb3JFYWNoKGZ1bmN0aW9uKGQpe3ZhciBlPWMtZC5zdGFydE9mZnNldCxmPWQuZW5kT2Zmc2V0LWQuc3RhcnRPZmZzZXQsZz0wPT1mPzA6ZC5lYXNpbmdGdW5jdGlvbihlL2YpO2IuYXBwbHkoYSxkLnByb3BlcnR5LGQuaW50ZXJwb2xhdGlvbihnKSl9KTtlbHNlIGZvcih2YXIgZCBpbiBnKSJvZmZzZXQiIT1kJiYiZWFzaW5nIiE9ZCYmImNvbXBvc2l0ZSIhPWQmJmIuY2xlYXIoYSxkKX19fShhLGIpLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe3JldHVybiBhLnJlcGxhY2UoLy0oLikvZyxmdW5jdGlvbihhLGIpe3JldHVybiBiLnRvVXBwZXJDYXNlKCl9KX1mdW5jdGlvbiBlKGEsYixjKXtoW2NdPWhbY118fFtdLGhbY10ucHVzaChbYSxiXSl9ZnVuY3Rpb24gZihhLGIsYyl7Zm9yKHZhciBmPTA7ZjxjLmxlbmd0aDtmKyspe2UoYSxiLGQoY1tmXSkpfX1mdW5jdGlvbiBnKGMsZSxmKXt2YXIgZz1jOy8tLy50ZXN0KGMpJiYhYS5pc0RlcHJlY2F0ZWQoIkh5cGhlbmF0ZWQgcHJvcGVydHkgbmFtZXMiLCIyMDE2LTAzLTIyIiwiVXNlIGNhbWVsQ2FzZSBpbnN0ZWFkLiIsITApJiYoZz1kKGMpKSwiaW5pdGlhbCIhPWUmJiJpbml0aWFsIiE9Znx8KCJpbml0aWFsIj09ZSYmKGU9aVtnXSksImluaXRpYWwiPT1mJiYoZj1pW2ddKSk7Zm9yKHZhciBqPWU9PWY/W106aFtnXSxrPTA7aiYmazxqLmxlbmd0aDtrKyspe3ZhciBsPWpba11bMF0oZSksbT1qW2tdWzBdKGYpO2lmKHZvaWQgMCE9PWwmJnZvaWQgMCE9PW0pe3ZhciBuPWpba11bMV0obCxtKTtpZihuKXt2YXIgbz1iLkludGVycG9sYXRpb24uYXBwbHkobnVsbCxuKTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIDA9PWE/ZToxPT1hP2Y6byhhKX19fX1yZXR1cm4gYi5JbnRlcnBvbGF0aW9uKCExLCEwLGZ1bmN0aW9uKGEpe3JldHVybiBhP2Y6ZX0pfXZhciBoPXt9O2IuYWRkUHJvcGVydGllc0hhbmRsZXI9Zjt2YXIgaT17YmFja2dyb3VuZENvbG9yOiJ0cmFuc3BhcmVudCIsYmFja2dyb3VuZFBvc2l0aW9uOiIwJSAwJSIsYm9yZGVyQm90dG9tQ29sb3I6ImN1cnJlbnRDb2xvciIsYm9yZGVyQm90dG9tTGVmdFJhZGl1czoiMHB4Iixib3JkZXJCb3R0b21SaWdodFJhZGl1czoiMHB4Iixib3JkZXJCb3R0b21XaWR0aDoiM3B4Iixib3JkZXJMZWZ0Q29sb3I6ImN1cnJlbnRDb2xvciIsYm9yZGVyTGVmdFdpZHRoOiIzcHgiLGJvcmRlclJpZ2h0Q29sb3I6ImN1cnJlbnRDb2xvciIsYm9yZGVyUmlnaHRXaWR0aDoiM3B4Iixib3JkZXJTcGFjaW5nOiIycHgiLGJvcmRlclRvcENvbG9yOiJjdXJyZW50Q29sb3IiLGJvcmRlclRvcExlZnRSYWRpdXM6IjBweCIsYm9yZGVyVG9wUmlnaHRSYWRpdXM6IjBweCIsYm9yZGVyVG9wV2lkdGg6IjNweCIsYm90dG9tOiJhdXRvIixjbGlwOiJyZWN0KDBweCwgMHB4LCAwcHgsIDBweCkiLGNvbG9yOiJibGFjayIsZm9udFNpemU6IjEwMCUiLGZvbnRXZWlnaHQ6IjQwMCIsaGVpZ2h0OiJhdXRvIixsZWZ0OiJhdXRvIixsZXR0ZXJTcGFjaW5nOiJub3JtYWwiLGxpbmVIZWlnaHQ6IjEyMCUiLG1hcmdpbkJvdHRvbToiMHB4IixtYXJnaW5MZWZ0OiIwcHgiLG1hcmdpblJpZ2h0OiIwcHgiLG1hcmdpblRvcDoiMHB4IixtYXhIZWlnaHQ6Im5vbmUiLG1heFdpZHRoOiJub25lIixtaW5IZWlnaHQ6IjBweCIsbWluV2lkdGg6IjBweCIsb3BhY2l0eToiMS4wIixvdXRsaW5lQ29sb3I6ImludmVydCIsb3V0bGluZU9mZnNldDoiMHB4IixvdXRsaW5lV2lkdGg6IjNweCIscGFkZGluZ0JvdHRvbToiMHB4IixwYWRkaW5nTGVmdDoiMHB4IixwYWRkaW5nUmlnaHQ6IjBweCIscGFkZGluZ1RvcDoiMHB4IixyaWdodDoiYXV0byIsc3Ryb2tlRGFzaGFycmF5OiJub25lIixzdHJva2VEYXNob2Zmc2V0OiIwcHgiLHRleHRJbmRlbnQ6IjBweCIsdGV4dFNoYWRvdzoiMHB4IDBweCAwcHggdHJhbnNwYXJlbnQiLHRvcDoiYXV0byIsdHJhbnNmb3JtOiIiLHZlcnRpY2FsQWxpZ246IjBweCIsdmlzaWJpbGl0eToidmlzaWJsZSIsd2lkdGg6ImF1dG8iLHdvcmRTcGFjaW5nOiJub3JtYWwiLHpJbmRleDoiYXV0byJ9O2IucHJvcGVydHlJbnRlcnBvbGF0aW9uPWd9KGEsYiksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYil7dmFyIGM9YS5jYWxjdWxhdGVBY3RpdmVEdXJhdGlvbihiKSxkPWZ1bmN0aW9uKGQpe3JldHVybiBhLmNhbGN1bGF0ZUl0ZXJhdGlvblByb2dyZXNzKGMsZCxiKX07cmV0dXJuIGQuX3RvdGFsRHVyYXRpb249Yi5kZWxheStjK2IuZW5kRGVsYXksZH1iLktleWZyYW1lRWZmZWN0PWZ1bmN0aW9uKGMsZSxmLGcpe3ZhciBoLGk9ZChhLm5vcm1hbGl6ZVRpbWluZ0lucHV0KGYpKSxqPWIuY29udmVydEVmZmVjdElucHV0KGUpLGs9ZnVuY3Rpb24oKXtqKGMsaCl9O3JldHVybiBrLl91cGRhdGU9ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPT0oaD1pKGEpKX0say5fY2xlYXI9ZnVuY3Rpb24oKXtqKGMsbnVsbCl9LGsuX2hhc1NhbWVUYXJnZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGM9PT1hfSxrLl90YXJnZXQ9YyxrLl90b3RhbER1cmF0aW9uPWkuX3RvdGFsRHVyYXRpb24say5faWQ9ZyxrfX0oYSxiKSxmdW5jdGlvbihhLGIpe2EuYXBwbHk9ZnVuY3Rpb24oYixjLGQpe2Iuc3R5bGVbYS5wcm9wZXJ0eU5hbWUoYyldPWR9LGEuY2xlYXI9ZnVuY3Rpb24oYixjKXtiLnN0eWxlW2EucHJvcGVydHlOYW1lKGMpXT0iIn19KGIpLGZ1bmN0aW9uKGEpe3dpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGIsYyl7dmFyIGQ9IiI7cmV0dXJuIGMmJmMuaWQmJihkPWMuaWQpLGEudGltZWxpbmUuX3BsYXkoYS5LZXlmcmFtZUVmZmVjdCh0aGlzLGIsYyxkKSl9fShiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiLGQpe2lmKCJudW1iZXIiPT10eXBlb2YgYSYmIm51bWJlciI9PXR5cGVvZiBiKXJldHVybiBhKigxLWQpK2IqZDtpZigiYm9vbGVhbiI9PXR5cGVvZiBhJiYiYm9vbGVhbiI9PXR5cGVvZiBiKXJldHVybiBkPC41P2E6YjtpZihhLmxlbmd0aD09Yi5sZW5ndGgpe2Zvcih2YXIgZT1bXSxmPTA7ZjxhLmxlbmd0aDtmKyspZS5wdXNoKGMoYVtmXSxiW2ZdLGQpKTtyZXR1cm4gZX10aHJvdyJNaXNtYXRjaGVkIGludGVycG9sYXRpb24gYXJndW1lbnRzICIrYSsiOiIrYn1hLkludGVycG9sYXRpb249ZnVuY3Rpb24oYSxiLGQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZChjKGEsYixlKSl9fX0oYiksZnVuY3Rpb24oYSxiLGMpe2Euc2VxdWVuY2VOdW1iZXI9MDt2YXIgZD1mdW5jdGlvbihhLGIsYyl7dGhpcy50YXJnZXQ9YSx0aGlzLmN1cnJlbnRUaW1lPWIsdGhpcy50aW1lbGluZVRpbWU9Yyx0aGlzLnR5cGU9ImZpbmlzaCIsdGhpcy5idWJibGVzPSExLHRoaXMuY2FuY2VsYWJsZT0hMSx0aGlzLmN1cnJlbnRUYXJnZXQ9YSx0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITEsdGhpcy5ldmVudFBoYXNlPUV2ZW50LkFUX1RBUkdFVCx0aGlzLnRpbWVTdGFtcD1EYXRlLm5vdygpfTtiLkFuaW1hdGlvbj1mdW5jdGlvbihiKXt0aGlzLmlkPSIiLGImJmIuX2lkJiYodGhpcy5pZD1iLl9pZCksdGhpcy5fc2VxdWVuY2VOdW1iZXI9YS5zZXF1ZW5jZU51bWJlcisrLHRoaXMuX2N1cnJlbnRUaW1lPTAsdGhpcy5fc3RhcnRUaW1lPW51bGwsdGhpcy5fcGF1c2VkPSExLHRoaXMuX3BsYXliYWNrUmF0ZT0xLHRoaXMuX2luVGltZWxpbmU9ITAsdGhpcy5fZmluaXNoZWRGbGFnPSEwLHRoaXMub25maW5pc2g9bnVsbCx0aGlzLl9maW5pc2hIYW5kbGVycz1bXSx0aGlzLl9lZmZlY3Q9Yix0aGlzLl9pbkVmZmVjdD10aGlzLl9lZmZlY3QuX3VwZGF0ZSgwKSx0aGlzLl9pZGxlPSEwLHRoaXMuX2N1cnJlbnRUaW1lUGVuZGluZz0hMX0sYi5BbmltYXRpb24ucHJvdG90eXBlPXtfZW5zdXJlQWxpdmU6ZnVuY3Rpb24oKXt0aGlzLnBsYXliYWNrUmF0ZTwwJiYwPT09dGhpcy5jdXJyZW50VGltZT90aGlzLl9pbkVmZmVjdD10aGlzLl9lZmZlY3QuX3VwZGF0ZSgtMSk6dGhpcy5faW5FZmZlY3Q9dGhpcy5fZWZmZWN0Ll91cGRhdGUodGhpcy5jdXJyZW50VGltZSksdGhpcy5faW5UaW1lbGluZXx8IXRoaXMuX2luRWZmZWN0JiZ0aGlzLl9maW5pc2hlZEZsYWd8fCh0aGlzLl9pblRpbWVsaW5lPSEwLGIudGltZWxpbmUuX2FuaW1hdGlvbnMucHVzaCh0aGlzKSl9LF90aWNrQ3VycmVudFRpbWU6ZnVuY3Rpb24oYSxiKXthIT10aGlzLl9jdXJyZW50VGltZSYmKHRoaXMuX2N1cnJlbnRUaW1lPWEsdGhpcy5faXNGaW5pc2hlZCYmIWImJih0aGlzLl9jdXJyZW50VGltZT10aGlzLl9wbGF5YmFja1JhdGU+MD90aGlzLl90b3RhbER1cmF0aW9uOjApLHRoaXMuX2Vuc3VyZUFsaXZlKCkpfSxnZXQgY3VycmVudFRpbWUoKXtyZXR1cm4gdGhpcy5faWRsZXx8dGhpcy5fY3VycmVudFRpbWVQZW5kaW5nP251bGw6dGhpcy5fY3VycmVudFRpbWV9LHNldCBjdXJyZW50VGltZShhKXthPSthLGlzTmFOKGEpfHwoYi5yZXN0YXJ0KCksdGhpcy5fcGF1c2VkfHxudWxsPT10aGlzLl9zdGFydFRpbWV8fCh0aGlzLl9zdGFydFRpbWU9dGhpcy5fdGltZWxpbmUuY3VycmVudFRpbWUtYS90aGlzLl9wbGF5YmFja1JhdGUpLHRoaXMuX2N1cnJlbnRUaW1lUGVuZGluZz0hMSx0aGlzLl9jdXJyZW50VGltZSE9YSYmKHRoaXMuX2lkbGUmJih0aGlzLl9pZGxlPSExLHRoaXMuX3BhdXNlZD0hMCksdGhpcy5fdGlja0N1cnJlbnRUaW1lKGEsITApLGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uKHRoaXMpKSl9LGdldCBzdGFydFRpbWUoKXtyZXR1cm4gdGhpcy5fc3RhcnRUaW1lfSxzZXQgc3RhcnRUaW1lKGEpe2E9K2EsaXNOYU4oYSl8fHRoaXMuX3BhdXNlZHx8dGhpcy5faWRsZXx8KHRoaXMuX3N0YXJ0VGltZT1hLHRoaXMuX3RpY2tDdXJyZW50VGltZSgodGhpcy5fdGltZWxpbmUuY3VycmVudFRpbWUtdGhpcy5fc3RhcnRUaW1lKSp0aGlzLnBsYXliYWNrUmF0ZSksYi5hcHBseURpcnRpZWRBbmltYXRpb24odGhpcykpfSxnZXQgcGxheWJhY2tSYXRlKCl7cmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZX0sc2V0IHBsYXliYWNrUmF0ZShhKXtpZihhIT10aGlzLl9wbGF5YmFja1JhdGUpe3ZhciBjPXRoaXMuY3VycmVudFRpbWU7dGhpcy5fcGxheWJhY2tSYXRlPWEsdGhpcy5fc3RhcnRUaW1lPW51bGwsInBhdXNlZCIhPXRoaXMucGxheVN0YXRlJiYiaWRsZSIhPXRoaXMucGxheVN0YXRlJiYodGhpcy5fZmluaXNoZWRGbGFnPSExLHRoaXMuX2lkbGU9ITEsdGhpcy5fZW5zdXJlQWxpdmUoKSxiLmFwcGx5RGlydGllZEFuaW1hdGlvbih0aGlzKSksbnVsbCE9YyYmKHRoaXMuY3VycmVudFRpbWU9Yyl9fSxnZXQgX2lzRmluaXNoZWQoKXtyZXR1cm4hdGhpcy5faWRsZSYmKHRoaXMuX3BsYXliYWNrUmF0ZT4wJiZ0aGlzLl9jdXJyZW50VGltZT49dGhpcy5fdG90YWxEdXJhdGlvbnx8dGhpcy5fcGxheWJhY2tSYXRlPDAmJnRoaXMuX2N1cnJlbnRUaW1lPD0wKX0sZ2V0IF90b3RhbER1cmF0aW9uKCl7cmV0dXJuIHRoaXMuX2VmZmVjdC5fdG90YWxEdXJhdGlvbn0sZ2V0IHBsYXlTdGF0ZSgpe3JldHVybiB0aGlzLl9pZGxlPyJpZGxlIjpudWxsPT10aGlzLl9zdGFydFRpbWUmJiF0aGlzLl9wYXVzZWQmJjAhPXRoaXMucGxheWJhY2tSYXRlfHx0aGlzLl9jdXJyZW50VGltZVBlbmRpbmc/InBlbmRpbmciOnRoaXMuX3BhdXNlZD8icGF1c2VkIjp0aGlzLl9pc0ZpbmlzaGVkPyJmaW5pc2hlZCI6InJ1bm5pbmcifSxfcmV3aW5kOmZ1bmN0aW9uKCl7aWYodGhpcy5fcGxheWJhY2tSYXRlPj0wKXRoaXMuX2N1cnJlbnRUaW1lPTA7ZWxzZXtpZighKHRoaXMuX3RvdGFsRHVyYXRpb248MS8wKSl0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCJVbmFibGUgdG8gcmV3aW5kIG5lZ2F0aXZlIHBsYXliYWNrIHJhdGUgYW5pbWF0aW9uIHdpdGggaW5maW5pdGUgZHVyYXRpb24iLCJJbnZhbGlkU3RhdGVFcnJvciIpO3RoaXMuX2N1cnJlbnRUaW1lPXRoaXMuX3RvdGFsRHVyYXRpb259fSxwbGF5OmZ1bmN0aW9uKCl7dGhpcy5fcGF1c2VkPSExLCh0aGlzLl9pc0ZpbmlzaGVkfHx0aGlzLl9pZGxlKSYmKHRoaXMuX3Jld2luZCgpLHRoaXMuX3N0YXJ0VGltZT1udWxsKSx0aGlzLl9maW5pc2hlZEZsYWc9ITEsdGhpcy5faWRsZT0hMSx0aGlzLl9lbnN1cmVBbGl2ZSgpLGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uKHRoaXMpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuX2lzRmluaXNoZWR8fHRoaXMuX3BhdXNlZHx8dGhpcy5faWRsZT90aGlzLl9pZGxlJiYodGhpcy5fcmV3aW5kKCksdGhpcy5faWRsZT0hMSk6dGhpcy5fY3VycmVudFRpbWVQZW5kaW5nPSEwLHRoaXMuX3N0YXJ0VGltZT1udWxsLHRoaXMuX3BhdXNlZD0hMH0sZmluaXNoOmZ1bmN0aW9uKCl7dGhpcy5faWRsZXx8KHRoaXMuY3VycmVudFRpbWU9dGhpcy5fcGxheWJhY2tSYXRlPjA/dGhpcy5fdG90YWxEdXJhdGlvbjowLHRoaXMuX3N0YXJ0VGltZT10aGlzLl90b3RhbER1cmF0aW9uLXRoaXMuY3VycmVudFRpbWUsdGhpcy5fY3VycmVudFRpbWVQZW5kaW5nPSExLGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uKHRoaXMpKX0sY2FuY2VsOmZ1bmN0aW9uKCl7dGhpcy5faW5FZmZlY3QmJih0aGlzLl9pbkVmZmVjdD0hMSx0aGlzLl9pZGxlPSEwLHRoaXMuX3BhdXNlZD0hMSx0aGlzLl9maW5pc2hlZEZsYWc9ITAsdGhpcy5fY3VycmVudFRpbWU9MCx0aGlzLl9zdGFydFRpbWU9bnVsbCx0aGlzLl9lZmZlY3QuX3VwZGF0ZShudWxsKSxiLmFwcGx5RGlydGllZEFuaW1hdGlvbih0aGlzKSl9LHJldmVyc2U6ZnVuY3Rpb24oKXt0aGlzLnBsYXliYWNrUmF0ZSo9LTEsdGhpcy5wbGF5KCl9LGFkZEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXsiZnVuY3Rpb24iPT10eXBlb2YgYiYmImZpbmlzaCI9PWEmJnRoaXMuX2ZpbmlzaEhhbmRsZXJzLnB1c2goYil9LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXtpZigiZmluaXNoIj09YSl7dmFyIGM9dGhpcy5fZmluaXNoSGFuZGxlcnMuaW5kZXhPZihiKTtjPj0wJiZ0aGlzLl9maW5pc2hIYW5kbGVycy5zcGxpY2UoYywxKX19LF9maXJlRXZlbnRzOmZ1bmN0aW9uKGEpe2lmKHRoaXMuX2lzRmluaXNoZWQpe2lmKCF0aGlzLl9maW5pc2hlZEZsYWcpe3ZhciBiPW5ldyBkKHRoaXMsdGhpcy5fY3VycmVudFRpbWUsYSksYz10aGlzLl9maW5pc2hIYW5kbGVycy5jb25jYXQodGhpcy5vbmZpbmlzaD9bdGhpcy5vbmZpbmlzaF06W10pO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtjLmZvckVhY2goZnVuY3Rpb24oYSl7YS5jYWxsKGIudGFyZ2V0LGIpfSl9LDApLHRoaXMuX2ZpbmlzaGVkRmxhZz0hMH19ZWxzZSB0aGlzLl9maW5pc2hlZEZsYWc9ITF9LF90aWNrOmZ1bmN0aW9uKGEsYil7dGhpcy5faWRsZXx8dGhpcy5fcGF1c2VkfHwobnVsbD09dGhpcy5fc3RhcnRUaW1lP2ImJih0aGlzLnN0YXJ0VGltZT1hLXRoaXMuX2N1cnJlbnRUaW1lL3RoaXMucGxheWJhY2tSYXRlKTp0aGlzLl9pc0ZpbmlzaGVkfHx0aGlzLl90aWNrQ3VycmVudFRpbWUoKGEtdGhpcy5fc3RhcnRUaW1lKSp0aGlzLnBsYXliYWNrUmF0ZSkpLGImJih0aGlzLl9jdXJyZW50VGltZVBlbmRpbmc9ITEsdGhpcy5fZmlyZUV2ZW50cyhhKSl9LGdldCBfbmVlZHNUaWNrKCl7cmV0dXJuIHRoaXMucGxheVN0YXRlIGlue3BlbmRpbmc6MSxydW5uaW5nOjF9fHwhdGhpcy5fZmluaXNoZWRGbGFnfSxfdGFyZ2V0QW5pbWF0aW9uczpmdW5jdGlvbigpe3ZhciBhPXRoaXMuX2VmZmVjdC5fdGFyZ2V0O3JldHVybiBhLl9hY3RpdmVBbmltYXRpb25zfHwoYS5fYWN0aXZlQW5pbWF0aW9ucz1bXSksYS5fYWN0aXZlQW5pbWF0aW9uc30sX21hcmtUYXJnZXQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl90YXJnZXRBbmltYXRpb25zKCk7LTE9PT1hLmluZGV4T2YodGhpcykmJmEucHVzaCh0aGlzKX0sX3VubWFya1RhcmdldDpmdW5jdGlvbigpe3ZhciBhPXRoaXMuX3RhcmdldEFuaW1hdGlvbnMoKSxiPWEuaW5kZXhPZih0aGlzKTstMSE9PWImJmEuc3BsaWNlKGIsMSl9fX0oYSxiKSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChhKXt2YXIgYj1qO2o9W10sYTxxLmN1cnJlbnRUaW1lJiYoYT1xLmN1cnJlbnRUaW1lKSxxLl9hbmltYXRpb25zLnNvcnQoZSkscS5fYW5pbWF0aW9ucz1oKGEsITAscS5fYW5pbWF0aW9ucylbMF0sYi5mb3JFYWNoKGZ1bmN0aW9uKGIpe2JbMV0oYSl9KSxnKCksbD12b2lkIDB9ZnVuY3Rpb24gZShhLGIpe3JldHVybiBhLl9zZXF1ZW5jZU51bWJlci1iLl9zZXF1ZW5jZU51bWJlcn1mdW5jdGlvbiBmKCl7dGhpcy5fYW5pbWF0aW9ucz1bXSx0aGlzLmN1cnJlbnRUaW1lPXdpbmRvdy5wZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlLm5vdygpOjB9ZnVuY3Rpb24gZygpe28uZm9yRWFjaChmdW5jdGlvbihhKXthKCl9KSxvLmxlbmd0aD0wfWZ1bmN0aW9uIGgoYSxjLGQpe3A9ITAsbj0hMSxiLnRpbWVsaW5lLmN1cnJlbnRUaW1lPWEsbT0hMTt2YXIgZT1bXSxmPVtdLGc9W10saD1bXTtyZXR1cm4gZC5mb3JFYWNoKGZ1bmN0aW9uKGIpe2IuX3RpY2soYSxjKSxiLl9pbkVmZmVjdD8oZi5wdXNoKGIuX2VmZmVjdCksYi5fbWFya1RhcmdldCgpKTooZS5wdXNoKGIuX2VmZmVjdCksYi5fdW5tYXJrVGFyZ2V0KCkpLGIuX25lZWRzVGljayYmKG09ITApO3ZhciBkPWIuX2luRWZmZWN0fHxiLl9uZWVkc1RpY2s7Yi5faW5UaW1lbGluZT1kLGQ/Zy5wdXNoKGIpOmgucHVzaChiKX0pLG8ucHVzaC5hcHBseShvLGUpLG8ucHVzaC5hcHBseShvLGYpLG0mJnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe30pLHA9ITEsW2csaF19dmFyIGk9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSxqPVtdLGs9MDt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lPWZ1bmN0aW9uKGEpe3ZhciBiPWsrKztyZXR1cm4gMD09ai5sZW5ndGgmJmkoZCksai5wdXNoKFtiLGFdKSxifSx3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24oYSl7ai5mb3JFYWNoKGZ1bmN0aW9uKGIpe2JbMF09PWEmJihiWzFdPWZ1bmN0aW9uKCl7fSl9KX0sZi5wcm90b3R5cGU9e19wbGF5OmZ1bmN0aW9uKGMpe2MuX3RpbWluZz1hLm5vcm1hbGl6ZVRpbWluZ0lucHV0KGMudGltaW5nKTt2YXIgZD1uZXcgYi5BbmltYXRpb24oYyk7cmV0dXJuIGQuX2lkbGU9ITEsZC5fdGltZWxpbmU9dGhpcyx0aGlzLl9hbmltYXRpb25zLnB1c2goZCksYi5yZXN0YXJ0KCksYi5hcHBseURpcnRpZWRBbmltYXRpb24oZCksZH19O3ZhciBsPXZvaWQgMCxtPSExLG49ITE7Yi5yZXN0YXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG18fChtPSEwLHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe30pLG49ITApLG59LGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uPWZ1bmN0aW9uKGEpe2lmKCFwKXthLl9tYXJrVGFyZ2V0KCk7dmFyIGM9YS5fdGFyZ2V0QW5pbWF0aW9ucygpO2Muc29ydChlKSxoKGIudGltZWxpbmUuY3VycmVudFRpbWUsITEsYy5zbGljZSgpKVsxXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPXEuX2FuaW1hdGlvbnMuaW5kZXhPZihhKTstMSE9PWImJnEuX2FuaW1hdGlvbnMuc3BsaWNlKGIsMSl9KSxnKCl9fTt2YXIgbz1bXSxwPSExLHE9bmV3IGY7Yi50aW1lbGluZT1xfShhLGIpLGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoYSxiKXt2YXIgYz1hLmV4ZWMoYik7aWYoYylyZXR1cm4gYz1hLmlnbm9yZUNhc2U/Y1swXS50b0xvd2VyQ2FzZSgpOmNbMF0sW2MsYi5zdWJzdHIoYy5sZW5ndGgpXX1mdW5jdGlvbiBjKGEsYil7Yj1iLnJlcGxhY2UoL15ccyovLCIiKTt2YXIgYz1hKGIpO2lmKGMpcmV0dXJuW2NbMF0sY1sxXS5yZXBsYWNlKC9eXHMqLywiIildfWZ1bmN0aW9uIGQoYSxkLGUpe2E9Yy5iaW5kKG51bGwsYSk7Zm9yKHZhciBmPVtdOzspe3ZhciBnPWEoZSk7aWYoIWcpcmV0dXJuW2YsZV07aWYoZi5wdXNoKGdbMF0pLGU9Z1sxXSwhKGc9YihkLGUpKXx8IiI9PWdbMV0pcmV0dXJuW2YsZV07ZT1nWzFdfX1mdW5jdGlvbiBlKGEsYil7Zm9yKHZhciBjPTAsZD0wO2Q8Yi5sZW5ndGgmJighL1xzfCwvLnRlc3QoYltkXSl8fDAhPWMpO2QrKylpZigiKCI9PWJbZF0pYysrO2Vsc2UgaWYoIikiPT1iW2RdJiYoYy0tLDA9PWMmJmQrKyxjPD0wKSlicmVhazt2YXIgZT1hKGIuc3Vic3RyKDAsZCkpO3JldHVybiB2b2lkIDA9PWU/dm9pZCAwOltlLGIuc3Vic3RyKGQpXX1mdW5jdGlvbiBmKGEsYil7Zm9yKHZhciBjPWEsZD1iO2MmJmQ7KWM+ZD9jJT1kOmQlPWM7cmV0dXJuIGM9YSpiLyhjK2QpfWZ1bmN0aW9uIGcoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPWEoYik7cmV0dXJuIGMmJihjWzBdPXZvaWQgMCksY319ZnVuY3Rpb24gaChhLGIpe3JldHVybiBmdW5jdGlvbihjKXtyZXR1cm4gYShjKXx8W2IsY119fWZ1bmN0aW9uIGkoYixjKXtmb3IodmFyIGQ9W10sZT0wO2U8Yi5sZW5ndGg7ZSsrKXt2YXIgZj1hLmNvbnN1bWVUcmltbWVkKGJbZV0sYyk7aWYoIWZ8fCIiPT1mWzBdKXJldHVybjt2b2lkIDAhPT1mWzBdJiZkLnB1c2goZlswXSksYz1mWzFdfWlmKCIiPT1jKXJldHVybiBkfWZ1bmN0aW9uIGooYSxiLGMsZCxlKXtmb3IodmFyIGc9W10saD1bXSxpPVtdLGo9ZihkLmxlbmd0aCxlLmxlbmd0aCksaz0wO2s8ajtrKyspe3ZhciBsPWIoZFtrJWQubGVuZ3RoXSxlW2slZS5sZW5ndGhdKTtpZighbClyZXR1cm47Zy5wdXNoKGxbMF0pLGgucHVzaChsWzFdKSxpLnB1c2gobFsyXSl9cmV0dXJuW2csaCxmdW5jdGlvbihiKXt2YXIgZD1iLm1hcChmdW5jdGlvbihhLGIpe3JldHVybiBpW2JdKGEpfSkuam9pbihjKTtyZXR1cm4gYT9hKGQpOmR9XX1mdW5jdGlvbiBrKGEsYixjKXtmb3IodmFyIGQ9W10sZT1bXSxmPVtdLGc9MCxoPTA7aDxjLmxlbmd0aDtoKyspaWYoImZ1bmN0aW9uIj09dHlwZW9mIGNbaF0pe3ZhciBpPWNbaF0oYVtnXSxiW2crK10pO2QucHVzaChpWzBdKSxlLnB1c2goaVsxXSksZi5wdXNoKGlbMl0pfWVsc2UhZnVuY3Rpb24oYSl7ZC5wdXNoKCExKSxlLnB1c2goITEpLGYucHVzaChmdW5jdGlvbigpe3JldHVybiBjW2FdfSl9KGgpO3JldHVybltkLGUsZnVuY3Rpb24oYSl7Zm9yKHZhciBiPSIiLGM9MDtjPGEubGVuZ3RoO2MrKyliKz1mW2NdKGFbY10pO3JldHVybiBifV19YS5jb25zdW1lVG9rZW49YixhLmNvbnN1bWVUcmltbWVkPWMsYS5jb25zdW1lUmVwZWF0ZWQ9ZCxhLmNvbnN1bWVQYXJlbnRoZXNpc2VkPWUsYS5pZ25vcmU9ZyxhLm9wdGlvbmFsPWgsYS5jb25zdW1lTGlzdD1pLGEubWVyZ2VOZXN0ZWRSZXBlYXRlZD1qLmJpbmQobnVsbCxudWxsKSxhLm1lcmdlV3JhcHBlZE5lc3RlZFJlcGVhdGVkPWosYS5tZXJnZUxpc3Q9a30oYiksZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihiKXtmdW5jdGlvbiBjKGIpe3ZhciBjPWEuY29uc3VtZVRva2VuKC9eaW5zZXQvaSxiKTtyZXR1cm4gYz8oZC5pbnNldD0hMCxjKTooYz1hLmNvbnN1bWVMZW5ndGhPclBlcmNlbnQoYikpPyhkLmxlbmd0aHMucHVzaChjWzBdKSxjKTooYz1hLmNvbnN1bWVDb2xvcihiKSxjPyhkLmNvbG9yPWNbMF0sYyk6dm9pZCAwKX12YXIgZD17aW5zZXQ6ITEsbGVuZ3RoczpbXSxjb2xvcjpudWxsfSxlPWEuY29uc3VtZVJlcGVhdGVkKGMsL14vLGIpO2lmKGUmJmVbMF0ubGVuZ3RoKXJldHVybltkLGVbMV1dfWZ1bmN0aW9uIGMoYyl7dmFyIGQ9YS5jb25zdW1lUmVwZWF0ZWQoYiwvXiwvLGMpO2lmKGQmJiIiPT1kWzFdKXJldHVybiBkWzBdfWZ1bmN0aW9uIGQoYixjKXtmb3IoO2IubGVuZ3Rocy5sZW5ndGg8TWF0aC5tYXgoYi5sZW5ndGhzLmxlbmd0aCxjLmxlbmd0aHMubGVuZ3RoKTspYi5sZW5ndGhzLnB1c2goe3B4OjB9KTtmb3IoO2MubGVuZ3Rocy5sZW5ndGg8TWF0aC5tYXgoYi5sZW5ndGhzLmxlbmd0aCxjLmxlbmd0aHMubGVuZ3RoKTspYy5sZW5ndGhzLnB1c2goe3B4OjB9KTtpZihiLmluc2V0PT1jLmluc2V0JiYhIWIuY29sb3I9PSEhYy5jb2xvcil7Zm9yKHZhciBkLGU9W10sZj1bW10sMF0sZz1bW10sMF0saD0wO2g8Yi5sZW5ndGhzLmxlbmd0aDtoKyspe3ZhciBpPWEubWVyZ2VEaW1lbnNpb25zKGIubGVuZ3Roc1toXSxjLmxlbmd0aHNbaF0sMj09aCk7ZlswXS5wdXNoKGlbMF0pLGdbMF0ucHVzaChpWzFdKSxlLnB1c2goaVsyXSl9aWYoYi5jb2xvciYmYy5jb2xvcil7dmFyIGo9YS5tZXJnZUNvbG9ycyhiLmNvbG9yLGMuY29sb3IpO2ZbMV09alswXSxnWzFdPWpbMV0sZD1qWzJdfXJldHVybltmLGcsZnVuY3Rpb24oYSl7Zm9yKHZhciBjPWIuaW5zZXQ/Imluc2V0ICI6IiAiLGY9MDtmPGUubGVuZ3RoO2YrKyljKz1lW2ZdKGFbMF1bZl0pKyIgIjtyZXR1cm4gZCYmKGMrPWQoYVsxXSkpLGN9XX19ZnVuY3Rpb24gZShiLGMsZCxlKXtmdW5jdGlvbiBmKGEpe3JldHVybntpbnNldDphLGNvbG9yOlswLDAsMCwwXSxsZW5ndGhzOlt7cHg6MH0se3B4OjB9LHtweDowfSx7cHg6MH1dfX1mb3IodmFyIGc9W10saD1bXSxpPTA7aTxkLmxlbmd0aHx8aTxlLmxlbmd0aDtpKyspe3ZhciBqPWRbaV18fGYoZVtpXS5pbnNldCksaz1lW2ldfHxmKGRbaV0uaW5zZXQpO2cucHVzaChqKSxoLnB1c2goayl9cmV0dXJuIGEubWVyZ2VOZXN0ZWRSZXBlYXRlZChiLGMsZyxoKX12YXIgZj1lLmJpbmQobnVsbCxkLCIsICIpO2EuYWRkUHJvcGVydGllc0hhbmRsZXIoYyxmLFsiYm94LXNoYWRvdyIsInRleHQtc2hhZG93Il0pfShiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSl7cmV0dXJuIGEudG9GaXhlZCgzKS5yZXBsYWNlKC8wKyQvLCIiKS5yZXBsYWNlKC9cLiQvLCIiKX1mdW5jdGlvbiBkKGEsYixjKXtyZXR1cm4gTWF0aC5taW4oYixNYXRoLm1heChhLGMpKX1mdW5jdGlvbiBlKGEpe2lmKC9eXHMqWy0rXT8oXGQqXC4pP1xkK1xzKiQvLnRlc3QoYSkpcmV0dXJuIE51bWJlcihhKX1mdW5jdGlvbiBmKGEsYil7cmV0dXJuW2EsYixjXX1mdW5jdGlvbiBnKGEsYil7aWYoMCE9YSlyZXR1cm4gaSgwLDEvMCkoYSxiKX1mdW5jdGlvbiBoKGEsYil7cmV0dXJuW2EsYixmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5yb3VuZChkKDEsMS8wLGEpKX1dfWZ1bmN0aW9uIGkoYSxiKXtyZXR1cm4gZnVuY3Rpb24oZSxmKXtyZXR1cm5bZSxmLGZ1bmN0aW9uKGUpe3JldHVybiBjKGQoYSxiLGUpKX1dfX1mdW5jdGlvbiBqKGEpe3ZhciBiPWEudHJpbSgpLnNwbGl0KC9ccypbXHMsXVxzKi8pO2lmKDAhPT1iLmxlbmd0aCl7Zm9yKHZhciBjPVtdLGQ9MDtkPGIubGVuZ3RoO2QrKyl7dmFyIGY9ZShiW2RdKTtpZih2b2lkIDA9PT1mKXJldHVybjtjLnB1c2goZil9cmV0dXJuIGN9fWZ1bmN0aW9uIGsoYSxiKXtpZihhLmxlbmd0aD09Yi5sZW5ndGgpcmV0dXJuW2EsYixmdW5jdGlvbihhKXtyZXR1cm4gYS5tYXAoYykuam9pbigiICIpfV19ZnVuY3Rpb24gbChhLGIpe3JldHVyblthLGIsTWF0aC5yb3VuZF19YS5jbGFtcD1kLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoaixrLFsic3Ryb2tlLWRhc2hhcnJheSJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsaSgwLDEvMCksWyJib3JkZXItaW1hZ2Utd2lkdGgiLCJsaW5lLWhlaWdodCJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsaSgwLDEpLFsib3BhY2l0eSIsInNoYXBlLWltYWdlLXRocmVzaG9sZCJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsZyxbImZsZXgtZ3JvdyIsImZsZXgtc2hyaW5rIl0pLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoZSxoLFsib3JwaGFucyIsIndpZG93cyJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsbCxbInotaW5kZXgiXSksYS5wYXJzZU51bWJlcj1lLGEucGFyc2VOdW1iZXJMaXN0PWosYS5tZXJnZU51bWJlcnM9ZixhLm51bWJlclRvU3RyaW5nPWN9KGIpLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhLGIpe2lmKCJ2aXNpYmxlIj09YXx8InZpc2libGUiPT1iKXJldHVyblswLDEsZnVuY3Rpb24oYyl7cmV0dXJuIGM8PTA/YTpjPj0xP2I6InZpc2libGUifV19YS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihTdHJpbmcsYyxbInZpc2liaWxpdHkiXSl9KGIpLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhKXthPWEudHJpbSgpLGYuZmlsbFN0eWxlPSIjMDAwIixmLmZpbGxTdHlsZT1hO3ZhciBiPWYuZmlsbFN0eWxlO2lmKGYuZmlsbFN0eWxlPSIjZmZmIixmLmZpbGxTdHlsZT1hLGI9PWYuZmlsbFN0eWxlKXtmLmZpbGxSZWN0KDAsMCwxLDEpO3ZhciBjPWYuZ2V0SW1hZ2VEYXRhKDAsMCwxLDEpLmRhdGE7Zi5jbGVhclJlY3QoMCwwLDEsMSk7dmFyIGQ9Y1szXS8yNTU7cmV0dXJuW2NbMF0qZCxjWzFdKmQsY1syXSpkLGRdfX1mdW5jdGlvbiBkKGIsYyl7cmV0dXJuW2IsYyxmdW5jdGlvbihiKXtmdW5jdGlvbiBjKGEpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDI1NSxhKSl9aWYoYlszXSlmb3IodmFyIGQ9MDtkPDM7ZCsrKWJbZF09TWF0aC5yb3VuZChjKGJbZF0vYlszXSkpO3JldHVybiBiWzNdPWEubnVtYmVyVG9TdHJpbmcoYS5jbGFtcCgwLDEsYlszXSkpLCJyZ2JhKCIrYi5qb2luKCIsIikrIikifV19dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiY2FudmFzIik7ZS53aWR0aD1lLmhlaWdodD0xO3ZhciBmPWUuZ2V0Q29udGV4dCgiMmQiKTthLmFkZFByb3BlcnRpZXNIYW5kbGVyKGMsZCxbImJhY2tncm91bmQtY29sb3IiLCJib3JkZXItYm90dG9tLWNvbG9yIiwiYm9yZGVyLWxlZnQtY29sb3IiLCJib3JkZXItcmlnaHQtY29sb3IiLCJib3JkZXItdG9wLWNvbG9yIiwiY29sb3IiLCJmaWxsIiwiZmxvb2QtY29sb3IiLCJsaWdodGluZy1jb2xvciIsIm91dGxpbmUtY29sb3IiLCJzdG9wLWNvbG9yIiwic3Ryb2tlIiwidGV4dC1kZWNvcmF0aW9uLWNvbG9yIl0pLGEuY29uc3VtZUNvbG9yPWEuY29uc3VtZVBhcmVudGhlc2lzZWQuYmluZChudWxsLGMpLGEubWVyZ2VDb2xvcnM9ZH0oYiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEpe2Z1bmN0aW9uIGIoKXt2YXIgYj1oLmV4ZWMoYSk7Zz1iP2JbMF06dm9pZCAwfWZ1bmN0aW9uIGMoKXt2YXIgYT1OdW1iZXIoZyk7cmV0dXJuIGIoKSxhfWZ1bmN0aW9uIGQoKXtpZigiKCIhPT1nKXJldHVybiBjKCk7YigpO3ZhciBhPWYoKTtyZXR1cm4iKSIhPT1nP05hTjooYigpLGEpfWZ1bmN0aW9uIGUoKXtmb3IodmFyIGE9ZCgpOyIqIj09PWd8fCIvIj09PWc7KXt2YXIgYz1nO2IoKTt2YXIgZT1kKCk7IioiPT09Yz9hKj1lOmEvPWV9cmV0dXJuIGF9ZnVuY3Rpb24gZigpe2Zvcih2YXIgYT1lKCk7IisiPT09Z3x8Ii0iPT09Zzspe3ZhciBjPWc7YigpO3ZhciBkPWUoKTsiKyI9PT1jP2ErPWQ6YS09ZH1yZXR1cm4gYX12YXIgZyxoPS8oW1wrXC1cd1wuXSt8W1woXClcKlwvXSkvZztyZXR1cm4gYigpLGYoKX1mdW5jdGlvbiBkKGEsYil7aWYoIjAiPT0oYj1iLnRyaW0oKS50b0xvd2VyQ2FzZSgpKSYmInB4Ii5zZWFyY2goYSk+PTApcmV0dXJue3B4OjB9O2lmKC9eW14oXSokfF5jYWxjLy50ZXN0KGIpKXtiPWIucmVwbGFjZSgvY2FsY1woL2csIigiKTt2YXIgZD17fTtiPWIucmVwbGFjZShhLGZ1bmN0aW9uKGEpe3JldHVybiBkW2FdPW51bGwsIlUiK2F9KTtmb3IodmFyIGU9IlUoIithLnNvdXJjZSsiKSIsZj1iLnJlcGxhY2UoL1stK10/KFxkKlwuKT9cZCsoW0VlXVstK10/XGQrKT8vZywiTiIpLnJlcGxhY2UobmV3IFJlZ0V4cCgiTiIrZSwiZyIpLCJEIikucmVwbGFjZSgvXHNbKy1dXHMvZywiTyIpLnJlcGxhY2UoL1xzL2csIiIpLGc9Wy9OXCooRCkvZywvKE58RClbKlwvXU4vZywvKE58RClPXDEvZywvXCgoTnxEKVwpL2ddLGg9MDtoPGcubGVuZ3RoOylnW2hdLnRlc3QoZik/KGY9Zi5yZXBsYWNlKGdbaF0sIiQxIiksaD0wKTpoKys7aWYoIkQiPT1mKXtmb3IodmFyIGkgaW4gZCl7dmFyIGo9YyhiLnJlcGxhY2UobmV3IFJlZ0V4cCgiVSIraSwiZyIpLCIiKS5yZXBsYWNlKG5ldyBSZWdFeHAoZSwiZyIpLCIqMCIpKTtpZighaXNGaW5pdGUoaikpcmV0dXJuO2RbaV09an1yZXR1cm4gZH19fWZ1bmN0aW9uIGUoYSxiKXtyZXR1cm4gZihhLGIsITApfWZ1bmN0aW9uIGYoYixjLGQpe3ZhciBlLGY9W107Zm9yKGUgaW4gYilmLnB1c2goZSk7Zm9yKGUgaW4gYylmLmluZGV4T2YoZSk8MCYmZi5wdXNoKGUpO3JldHVybiBiPWYubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBiW2FdfHwwfSksYz1mLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gY1thXXx8MH0pLFtiLGMsZnVuY3Rpb24oYil7dmFyIGM9Yi5tYXAoZnVuY3Rpb24oYyxlKXtyZXR1cm4gMT09Yi5sZW5ndGgmJmQmJihjPU1hdGgubWF4KGMsMCkpLGEubnVtYmVyVG9TdHJpbmcoYykrZltlXX0pLmpvaW4oIiArICIpO3JldHVybiBiLmxlbmd0aD4xPyJjYWxjKCIrYysiKSI6Y31dfXZhciBnPSJweHxlbXxleHxjaHxyZW18dnd8dmh8dm1pbnx2bWF4fGNtfG1tfGlufHB0fHBjIixoPWQuYmluZChudWxsLG5ldyBSZWdFeHAoZywiZyIpKSxpPWQuYmluZChudWxsLG5ldyBSZWdFeHAoZysifCUiLCJnIikpLGo9ZC5iaW5kKG51bGwsL2RlZ3xyYWR8Z3JhZHx0dXJuL2cpO2EucGFyc2VMZW5ndGg9aCxhLnBhcnNlTGVuZ3RoT3JQZXJjZW50PWksYS5jb25zdW1lTGVuZ3RoT3JQZXJjZW50PWEuY29uc3VtZVBhcmVudGhlc2lzZWQuYmluZChudWxsLGkpLGEucGFyc2VBbmdsZT1qLGEubWVyZ2VEaW1lbnNpb25zPWY7dmFyIGs9YS5jb25zdW1lUGFyZW50aGVzaXNlZC5iaW5kKG51bGwsaCksbD1hLmNvbnN1bWVSZXBlYXRlZC5iaW5kKHZvaWQgMCxrLC9eLyksbT1hLmNvbnN1bWVSZXBlYXRlZC5iaW5kKHZvaWQgMCxsLC9eLC8pO2EuY29uc3VtZVNpemVQYWlyTGlzdD1tO3ZhciBuPWZ1bmN0aW9uKGEpe3ZhciBiPW0oYSk7aWYoYiYmIiI9PWJbMV0pcmV0dXJuIGJbMF19LG89YS5tZXJnZU5lc3RlZFJlcGVhdGVkLmJpbmQodm9pZCAwLGUsIiAiKSxwPWEubWVyZ2VOZXN0ZWRSZXBlYXRlZC5iaW5kKHZvaWQgMCxvLCIsIik7YS5tZXJnZU5vbk5lZ2F0aXZlU2l6ZVBhaXI9byxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKG4scCxbImJhY2tncm91bmQtc2l6ZSJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGksZSxbImJvcmRlci1ib3R0b20td2lkdGgiLCJib3JkZXItaW1hZ2Utd2lkdGgiLCJib3JkZXItbGVmdC13aWR0aCIsImJvcmRlci1yaWdodC13aWR0aCIsImJvcmRlci10b3Atd2lkdGgiLCJmbGV4LWJhc2lzIiwiZm9udC1zaXplIiwiaGVpZ2h0IiwibGluZS1oZWlnaHQiLCJtYXgtaGVpZ2h0IiwibWF4LXdpZHRoIiwib3V0bGluZS13aWR0aCIsIndpZHRoIl0pLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoaSxmLFsiYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cyIsImJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIiwiYm9yZGVyLXRvcC1sZWZ0LXJhZGl1cyIsImJvcmRlci10b3AtcmlnaHQtcmFkaXVzIiwiYm90dG9tIiwibGVmdCIsImxldHRlci1zcGFjaW5nIiwibWFyZ2luLWJvdHRvbSIsIm1hcmdpbi1sZWZ0IiwibWFyZ2luLXJpZ2h0IiwibWFyZ2luLXRvcCIsIm1pbi1oZWlnaHQiLCJtaW4td2lkdGgiLCJvdXRsaW5lLW9mZnNldCIsInBhZGRpbmctYm90dG9tIiwicGFkZGluZy1sZWZ0IiwicGFkZGluZy1yaWdodCIsInBhZGRpbmctdG9wIiwicGVyc3BlY3RpdmUiLCJyaWdodCIsInNoYXBlLW1hcmdpbiIsInN0cm9rZS1kYXNob2Zmc2V0IiwidGV4dC1pbmRlbnQiLCJ0b3AiLCJ2ZXJ0aWNhbC1hbGlnbiIsIndvcmQtc3BhY2luZyJdKX0oYiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGIpe3JldHVybiBhLmNvbnN1bWVMZW5ndGhPclBlcmNlbnQoYil8fGEuY29uc3VtZVRva2VuKC9eYXV0by8sYil9ZnVuY3Rpb24gZChiKXt2YXIgZD1hLmNvbnN1bWVMaXN0KFthLmlnbm9yZShhLmNvbnN1bWVUb2tlbi5iaW5kKG51bGwsL15yZWN0LykpLGEuaWdub3JlKGEuY29uc3VtZVRva2VuLmJpbmQobnVsbCwvXlwoLykpLGEuY29uc3VtZVJlcGVhdGVkLmJpbmQobnVsbCxjLC9eLC8pLGEuaWdub3JlKGEuY29uc3VtZVRva2VuLmJpbmQobnVsbCwvXlwpLykpXSxiKTtpZihkJiY0PT1kWzBdLmxlbmd0aClyZXR1cm4gZFswXX1mdW5jdGlvbiBlKGIsYyl7cmV0dXJuImF1dG8iPT1ifHwiYXV0byI9PWM/WyEwLCExLGZ1bmN0aW9uKGQpe3ZhciBlPWQ/YjpjO2lmKCJhdXRvIj09ZSlyZXR1cm4iYXV0byI7dmFyIGY9YS5tZXJnZURpbWVuc2lvbnMoZSxlKTtyZXR1cm4gZlsyXShmWzBdKX1dOmEubWVyZ2VEaW1lbnNpb25zKGIsYyl9ZnVuY3Rpb24gZihhKXtyZXR1cm4icmVjdCgiK2ErIikifXZhciBnPWEubWVyZ2VXcmFwcGVkTmVzdGVkUmVwZWF0ZWQuYmluZChudWxsLGYsZSwiLCAiKTthLnBhcnNlQm94PWQsYS5tZXJnZUJveGVzPWcsYS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihkLGcsWyJjbGlwIl0pfShiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPTA7cmV0dXJuIGEubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhPT09az9iW2MrK106YX0pfX1mdW5jdGlvbiBkKGEpe3JldHVybiBhfWZ1bmN0aW9uIGUoYil7aWYoIm5vbmUiPT0oYj1iLnRvTG93ZXJDYXNlKCkudHJpbSgpKSlyZXR1cm5bXTtmb3IodmFyIGMsZD0vXHMqKFx3KylcKChbXildKilcKS9nLGU9W10sZj0wO2M9ZC5leGVjKGIpOyl7aWYoYy5pbmRleCE9ZilyZXR1cm47Zj1jLmluZGV4K2NbMF0ubGVuZ3RoO3ZhciBnPWNbMV0saD1uW2ddO2lmKCFoKXJldHVybjt2YXIgaT1jWzJdLnNwbGl0KCIsIiksaj1oWzBdO2lmKGoubGVuZ3RoPGkubGVuZ3RoKXJldHVybjtmb3IodmFyIGs9W10sbz0wO288ai5sZW5ndGg7bysrKXt2YXIgcCxxPWlbb10scj1qW29dO2lmKHZvaWQgMD09PShwPXE/e0E6ZnVuY3Rpb24oYil7cmV0dXJuIjAiPT1iLnRyaW0oKT9tOmEucGFyc2VBbmdsZShiKX0sTjphLnBhcnNlTnVtYmVyLFQ6YS5wYXJzZUxlbmd0aE9yUGVyY2VudCxMOmEucGFyc2VMZW5ndGh9W3IudG9VcHBlckNhc2UoKV0ocSk6e2E6bSxuOmtbMF0sdDpsfVtyXSkpcmV0dXJuO2sucHVzaChwKX1pZihlLnB1c2goe3Q6ZyxkOmt9KSxkLmxhc3RJbmRleD09Yi5sZW5ndGgpcmV0dXJuIGV9fWZ1bmN0aW9uIGYoYSl7cmV0dXJuIGEudG9GaXhlZCg2KS5yZXBsYWNlKCIuMDAwMDAwIiwiIil9ZnVuY3Rpb24gZyhiLGMpe2lmKGIuZGVjb21wb3NpdGlvblBhaXIhPT1jKXtiLmRlY29tcG9zaXRpb25QYWlyPWM7dmFyIGQ9YS5tYWtlTWF0cml4RGVjb21wb3NpdGlvbihiKX1pZihjLmRlY29tcG9zaXRpb25QYWlyIT09Yil7Yy5kZWNvbXBvc2l0aW9uUGFpcj1iO3ZhciBlPWEubWFrZU1hdHJpeERlY29tcG9zaXRpb24oYyl9cmV0dXJuIG51bGw9PWRbMF18fG51bGw9PWVbMF0/W1shMV0sWyEwXSxmdW5jdGlvbihhKXtyZXR1cm4gYT9jWzBdLmQ6YlswXS5kfV06KGRbMF0ucHVzaCgwKSxlWzBdLnB1c2goMSksW2QsZSxmdW5jdGlvbihiKXt2YXIgYz1hLnF1YXQoZFswXVszXSxlWzBdWzNdLGJbNV0pO3JldHVybiBhLmNvbXBvc2VNYXRyaXgoYlswXSxiWzFdLGJbMl0sYyxiWzRdKS5tYXAoZikuam9pbigiLCIpfV0pfWZ1bmN0aW9uIGgoYSl7cmV0dXJuIGEucmVwbGFjZSgvW3h5XS8sIiIpfWZ1bmN0aW9uIGkoYSl7cmV0dXJuIGEucmVwbGFjZSgvKHh8eXx6fDNkKT8kLywiM2QiKX1mdW5jdGlvbiBqKGIsYyl7dmFyIGQ9YS5tYWtlTWF0cml4RGVjb21wb3NpdGlvbiYmITAsZT0hMTtpZighYi5sZW5ndGh8fCFjLmxlbmd0aCl7Yi5sZW5ndGh8fChlPSEwLGI9YyxjPVtdKTtmb3IodmFyIGY9MDtmPGIubGVuZ3RoO2YrKyl7dmFyIGo9YltmXS50LGs9YltmXS5kLGw9InNjYWxlIj09ai5zdWJzdHIoMCw1KT8xOjA7Yy5wdXNoKHt0OmosZDprLm1hcChmdW5jdGlvbihhKXtpZigibnVtYmVyIj09dHlwZW9mIGEpcmV0dXJuIGw7dmFyIGI9e307Zm9yKHZhciBjIGluIGEpYltjXT1sO3JldHVybiBifSl9KX19dmFyIG09ZnVuY3Rpb24oYSxiKXtyZXR1cm4icGVyc3BlY3RpdmUiPT1hJiYicGVyc3BlY3RpdmUiPT1ifHwoIm1hdHJpeCI9PWF8fCJtYXRyaXgzZCI9PWEpJiYoIm1hdHJpeCI9PWJ8fCJtYXRyaXgzZCI9PWIpfSxvPVtdLHA9W10scT1bXTtpZihiLmxlbmd0aCE9Yy5sZW5ndGgpe2lmKCFkKXJldHVybjt2YXIgcj1nKGIsYyk7bz1bclswXV0scD1bclsxXV0scT1bWyJtYXRyaXgiLFtyWzJdXV1dfWVsc2UgZm9yKHZhciBmPTA7ZjxiLmxlbmd0aDtmKyspe3ZhciBqLHM9YltmXS50LHQ9Y1tmXS50LHU9YltmXS5kLHY9Y1tmXS5kLHc9bltzXSx4PW5bdF07aWYobShzLHQpKXtpZighZClyZXR1cm47dmFyIHI9ZyhbYltmXV0sW2NbZl1dKTtvLnB1c2goclswXSkscC5wdXNoKHJbMV0pLHEucHVzaChbIm1hdHJpeCIsW3JbMl1dXSl9ZWxzZXtpZihzPT10KWo9cztlbHNlIGlmKHdbMl0mJnhbMl0mJmgocyk9PWgodCkpaj1oKHMpLHU9d1syXSh1KSx2PXhbMl0odik7ZWxzZXtpZighd1sxXXx8IXhbMV18fGkocykhPWkodCkpe2lmKCFkKXJldHVybjt2YXIgcj1nKGIsYyk7bz1bclswXV0scD1bclsxXV0scT1bWyJtYXRyaXgiLFtyWzJdXV1dO2JyZWFrfWo9aShzKSx1PXdbMV0odSksdj14WzFdKHYpfWZvcih2YXIgeT1bXSx6PVtdLEE9W10sQj0wO0I8dS5sZW5ndGg7QisrKXt2YXIgQz0ibnVtYmVyIj09dHlwZW9mIHVbQl0/YS5tZXJnZU51bWJlcnM6YS5tZXJnZURpbWVuc2lvbnMscj1DKHVbQl0sdltCXSk7eVtCXT1yWzBdLHpbQl09clsxXSxBLnB1c2goclsyXSl9by5wdXNoKHkpLHAucHVzaCh6KSxxLnB1c2goW2osQV0pfX1pZihlKXt2YXIgRD1vO289cCxwPUR9cmV0dXJuW28scCxmdW5jdGlvbihhKXtyZXR1cm4gYS5tYXAoZnVuY3Rpb24oYSxiKXt2YXIgYz1hLm1hcChmdW5jdGlvbihhLGMpe3JldHVybiBxW2JdWzFdW2NdKGEpfSkuam9pbigiLCIpO3JldHVybiJtYXRyaXgiPT1xW2JdWzBdJiYxNj09Yy5zcGxpdCgiLCIpLmxlbmd0aCYmKHFbYl1bMF09Im1hdHJpeDNkIikscVtiXVswXSsiKCIrYysiKSJ9KS5qb2luKCIgIil9XX12YXIgaz1udWxsLGw9e3B4OjB9LG09e2RlZzowfSxuPXttYXRyaXg6WyJOTk5OTk4iLFtrLGssMCwwLGssaywwLDAsMCwwLDEsMCxrLGssMCwxXSxkXSxtYXRyaXgzZDpbIk5OTk5OTk5OTk5OTk5OTk4iLGRdLHJvdGF0ZTpbIkEiXSxyb3RhdGV4OlsiQSJdLHJvdGF0ZXk6WyJBIl0scm90YXRlejpbIkEiXSxyb3RhdGUzZDpbIk5OTkEiXSxwZXJzcGVjdGl2ZTpbIkwiXSxzY2FsZTpbIk5uIixjKFtrLGssMV0pLGRdLHNjYWxleDpbIk4iLGMoW2ssMSwxXSksYyhbaywxXSldLHNjYWxleTpbIk4iLGMoWzEsaywxXSksYyhbMSxrXSldLHNjYWxlejpbIk4iLGMoWzEsMSxrXSldLHNjYWxlM2Q6WyJOTk4iLGRdLHNrZXc6WyJBYSIsbnVsbCxkXSxza2V3eDpbIkEiLG51bGwsYyhbayxtXSldLHNrZXd5OlsiQSIsbnVsbCxjKFttLGtdKV0sdHJhbnNsYXRlOlsiVHQiLGMoW2ssayxsXSksZF0sdHJhbnNsYXRleDpbIlQiLGMoW2ssbCxsXSksYyhbayxsXSldLHRyYW5zbGF0ZXk6WyJUIixjKFtsLGssbF0pLGMoW2wsa10pXSx0cmFuc2xhdGV6OlsiTCIsYyhbbCxsLGtdKV0sdHJhbnNsYXRlM2Q6WyJUVEwiLGRdfTthLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsaixbInRyYW5zZm9ybSJdKSxhLnRyYW5zZm9ybVRvU3ZnTWF0cml4PWZ1bmN0aW9uKGIpe3ZhciBjPWEudHJhbnNmb3JtTGlzdFRvTWF0cml4KGUoYikpO3JldHVybiJtYXRyaXgoIitmKGNbMF0pKyIgIitmKGNbMV0pKyIgIitmKGNbNF0pKyIgIitmKGNbNV0pKyIgIitmKGNbMTJdKSsiICIrZihjWzEzXSkrIikifX0oYiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYil7Yi5jb25jYXQoW2FdKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2IgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlJiYoZFthXT1iKSxlW2JdPWF9KX12YXIgZD17fSxlPXt9O2MoInRyYW5zZm9ybSIsWyJ3ZWJraXRUcmFuc2Zvcm0iLCJtc1RyYW5zZm9ybSJdKSxjKCJ0cmFuc2Zvcm1PcmlnaW4iLFsid2Via2l0VHJhbnNmb3JtT3JpZ2luIl0pLGMoInBlcnNwZWN0aXZlIixbIndlYmtpdFBlcnNwZWN0aXZlIl0pLGMoInBlcnNwZWN0aXZlT3JpZ2luIixbIndlYmtpdFBlcnNwZWN0aXZlT3JpZ2luIl0pLGEucHJvcGVydHlOYW1lPWZ1bmN0aW9uKGEpe3JldHVybiBkW2FdfHxhfSxhLnVucHJlZml4ZWRQcm9wZXJ0eU5hbWU9ZnVuY3Rpb24oYSl7cmV0dXJuIGVbYV18fGF9fShiKX0oKSxmdW5jdGlvbigpe2lmKHZvaWQgMD09PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLmFuaW1hdGUoW10pLm9uY2FuY2VsKXt2YXIgYTtpZih3aW5kb3cucGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdyl2YXIgYT1mdW5jdGlvbigpe3JldHVybiBwZXJmb3JtYW5jZS5ub3coKX07ZWxzZSB2YXIgYT1mdW5jdGlvbigpe3JldHVybiBEYXRlLm5vdygpfTt2YXIgYj1mdW5jdGlvbihhLGIsYyl7dGhpcy50YXJnZXQ9YSx0aGlzLmN1cnJlbnRUaW1lPWIsdGhpcy50aW1lbGluZVRpbWU9Yyx0aGlzLnR5cGU9ImNhbmNlbCIsdGhpcy5idWJibGVzPSExLHRoaXMuY2FuY2VsYWJsZT0hMSx0aGlzLmN1cnJlbnRUYXJnZXQ9YSx0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITEsdGhpcy5ldmVudFBoYXNlPUV2ZW50LkFUX1RBUkdFVCx0aGlzLnRpbWVTdGFtcD1EYXRlLm5vdygpfSxjPXdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlO3dpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGQsZSl7dmFyIGY9Yy5jYWxsKHRoaXMsZCxlKTtmLl9jYW5jZWxIYW5kbGVycz1bXSxmLm9uY2FuY2VsPW51bGw7dmFyIGc9Zi5jYW5jZWw7Zi5jYW5jZWw9ZnVuY3Rpb24oKXtnLmNhbGwodGhpcyk7dmFyIGM9bmV3IGIodGhpcyxudWxsLGEoKSksZD10aGlzLl9jYW5jZWxIYW5kbGVycy5jb25jYXQodGhpcy5vbmNhbmNlbD9bdGhpcy5vbmNhbmNlbF06W10pO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtkLmZvckVhY2goZnVuY3Rpb24oYSl7YS5jYWxsKGMudGFyZ2V0LGMpfSl9LDApfTt2YXIgaD1mLmFkZEV2ZW50TGlzdGVuZXI7Zi5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKGEsYil7ImZ1bmN0aW9uIj09dHlwZW9mIGImJiJjYW5jZWwiPT1hP3RoaXMuX2NhbmNlbEhhbmRsZXJzLnB1c2goYik6aC5jYWxsKHRoaXMsYSxiKX07dmFyIGk9Zi5yZW1vdmVFdmVudExpc3RlbmVyO3JldHVybiBmLnJlbW92ZUV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oYSxiKXtpZigiY2FuY2VsIj09YSl7dmFyIGM9dGhpcy5fY2FuY2VsSGFuZGxlcnMuaW5kZXhPZihiKTtjPj0wJiZ0aGlzLl9jYW5jZWxIYW5kbGVycy5zcGxpY2UoYywxKX1lbHNlIGkuY2FsbCh0aGlzLGEsYil9LGZ9fX0oKSxmdW5jdGlvbihhKXt2YXIgYj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYz1udWxsLGQ9ITE7dHJ5e3ZhciBlPWdldENvbXB1dGVkU3R5bGUoYikuZ2V0UHJvcGVydHlWYWx1ZSgib3BhY2l0eSIpLGY9IjAiPT1lPyIxIjoiMCI7Yz1iLmFuaW1hdGUoe29wYWNpdHk6W2YsZl19LHtkdXJhdGlvbjoxfSksYy5jdXJyZW50VGltZT0wLGQ9Z2V0Q29tcHV0ZWRTdHlsZShiKS5nZXRQcm9wZXJ0eVZhbHVlKCJvcGFjaXR5Iik9PWZ9Y2F0Y2goYSl7fWZpbmFsbHl7YyYmYy5jYW5jZWwoKX1pZighZCl7dmFyIGc9d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmFuaW1hdGU7d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24oYixjKXtyZXR1cm4gd2luZG93LlN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yJiZBcnJheS5wcm90b3R5cGUuZnJvbSYmYltTeW1ib2wuaXRlcmF0b3JdJiYoYj1BcnJheS5mcm9tKGIpKSxBcnJheS5pc0FycmF5KGIpfHxudWxsPT09Ynx8KGI9YS5jb252ZXJ0VG9BcnJheUZvcm0oYikpLGcuY2FsbCh0aGlzLGIsYyl9fX0oYSksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7dmFyIGM9Yi50aW1lbGluZTtjLmN1cnJlbnRUaW1lPWEsYy5fZGlzY2FyZEFuaW1hdGlvbnMoKSwwPT1jLl9hbmltYXRpb25zLmxlbmd0aD9mPSExOnJlcXVlc3RBbmltYXRpb25GcmFtZShkKX12YXIgZT13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lO3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24oYSl7cmV0dXJuIGUoZnVuY3Rpb24oYyl7Yi50aW1lbGluZS5fdXBkYXRlQW5pbWF0aW9uc1Byb21pc2VzKCksYShjKSxiLnRpbWVsaW5lLl91cGRhdGVBbmltYXRpb25zUHJvbWlzZXMoKX0pfSxiLkFuaW1hdGlvblRpbWVsaW5lPWZ1bmN0aW9uKCl7dGhpcy5fYW5pbWF0aW9ucz1bXSx0aGlzLmN1cnJlbnRUaW1lPXZvaWQgMH0sYi5BbmltYXRpb25UaW1lbGluZS5wcm90b3R5cGU9e2dldEFuaW1hdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlzY2FyZEFuaW1hdGlvbnMoKSx0aGlzLl9hbmltYXRpb25zLnNsaWNlKCl9LF91cGRhdGVBbmltYXRpb25zUHJvbWlzZXM6ZnVuY3Rpb24oKXtiLmFuaW1hdGlvbnNXaXRoUHJvbWlzZXM9Yi5hbmltYXRpb25zV2l0aFByb21pc2VzLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYS5fdXBkYXRlUHJvbWlzZXMoKX0pfSxfZGlzY2FyZEFuaW1hdGlvbnM6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVBbmltYXRpb25zUHJvbWlzZXMoKSx0aGlzLl9hbmltYXRpb25zPXRoaXMuX2FuaW1hdGlvbnMuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiJmaW5pc2hlZCIhPWEucGxheVN0YXRlJiYiaWRsZSIhPWEucGxheVN0YXRlfSl9LF9wbGF5OmZ1bmN0aW9uKGEpe3ZhciBjPW5ldyBiLkFuaW1hdGlvbihhLHRoaXMpO3JldHVybiB0aGlzLl9hbmltYXRpb25zLnB1c2goYyksYi5yZXN0YXJ0V2ViQW5pbWF0aW9uc05leHRUaWNrKCksYy5fdXBkYXRlUHJvbWlzZXMoKSxjLl9hbmltYXRpb24ucGxheSgpLGMuX3VwZGF0ZVByb21pc2VzKCksY30scGxheTpmdW5jdGlvbihhKXtyZXR1cm4gYSYmYS5yZW1vdmUoKSx0aGlzLl9wbGF5KGEpfX07dmFyIGY9ITE7Yi5yZXN0YXJ0V2ViQW5pbWF0aW9uc05leHRUaWNrPWZ1bmN0aW9uKCl7Znx8KGY9ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKGQpKX07dmFyIGc9bmV3IGIuQW5pbWF0aW9uVGltZWxpbmU7Yi50aW1lbGluZT1nO3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LmRvY3VtZW50LCJ0aW1lbGluZSIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZ319KX1jYXRjaChhKXt9dHJ5e3dpbmRvdy5kb2N1bWVudC50aW1lbGluZT1nfWNhdGNoKGEpe319KDAsYyksZnVuY3Rpb24oYSxiLGMpe2IuYW5pbWF0aW9uc1dpdGhQcm9taXNlcz1bXSxiLkFuaW1hdGlvbj1mdW5jdGlvbihiLGMpe2lmKHRoaXMuaWQ9IiIsYiYmYi5faWQmJih0aGlzLmlkPWIuX2lkKSx0aGlzLmVmZmVjdD1iLGImJihiLl9hbmltYXRpb249dGhpcyksIWMpdGhyb3cgbmV3IEVycm9yKCJBbmltYXRpb24gd2l0aCBudWxsIHRpbWVsaW5lIGlzIG5vdCBzdXBwb3J0ZWQiKTt0aGlzLl90aW1lbGluZT1jLHRoaXMuX3NlcXVlbmNlTnVtYmVyPWEuc2VxdWVuY2VOdW1iZXIrKyx0aGlzLl9ob2xkVGltZT0wLHRoaXMuX3BhdXNlZD0hMSx0aGlzLl9pc0dyb3VwPSExLHRoaXMuX2FuaW1hdGlvbj1udWxsLHRoaXMuX2NoaWxkQW5pbWF0aW9ucz1bXSx0aGlzLl9jYWxsYmFjaz1udWxsLHRoaXMuX29sZFBsYXlTdGF0ZT0iaWRsZSIsdGhpcy5fcmVidWlsZFVuZGVybHlpbmdBbmltYXRpb24oKSx0aGlzLl9hbmltYXRpb24uY2FuY2VsKCksdGhpcy5fdXBkYXRlUHJvbWlzZXMoKX0sYi5BbmltYXRpb24ucHJvdG90eXBlPXtfdXBkYXRlUHJvbWlzZXM6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9vbGRQbGF5U3RhdGUsYj10aGlzLnBsYXlTdGF0ZTtyZXR1cm4gdGhpcy5fcmVhZHlQcm9taXNlJiZiIT09YSYmKCJpZGxlIj09Yj8odGhpcy5fcmVqZWN0UmVhZHlQcm9taXNlKCksdGhpcy5fcmVhZHlQcm9taXNlPXZvaWQgMCk6InBlbmRpbmciPT1hP3RoaXMuX3Jlc29sdmVSZWFkeVByb21pc2UoKToicGVuZGluZyI9PWImJih0aGlzLl9yZWFkeVByb21pc2U9dm9pZCAwKSksdGhpcy5fZmluaXNoZWRQcm9taXNlJiZiIT09YSYmKCJpZGxlIj09Yj8odGhpcy5fcmVqZWN0RmluaXNoZWRQcm9taXNlKCksdGhpcy5fZmluaXNoZWRQcm9taXNlPXZvaWQgMCk6ImZpbmlzaGVkIj09Yj90aGlzLl9yZXNvbHZlRmluaXNoZWRQcm9taXNlKCk6ImZpbmlzaGVkIj09YSYmKHRoaXMuX2ZpbmlzaGVkUHJvbWlzZT12b2lkIDApKSx0aGlzLl9vbGRQbGF5U3RhdGU9dGhpcy5wbGF5U3RhdGUsdGhpcy5fcmVhZHlQcm9taXNlfHx0aGlzLl9maW5pc2hlZFByb21pc2V9LF9yZWJ1aWxkVW5kZXJseWluZ0FuaW1hdGlvbjpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCk7dmFyIGEsYyxkLGUsZj0hIXRoaXMuX2FuaW1hdGlvbjtmJiYoYT10aGlzLnBsYXliYWNrUmF0ZSxjPXRoaXMuX3BhdXNlZCxkPXRoaXMuc3RhcnRUaW1lLGU9dGhpcy5jdXJyZW50VGltZSx0aGlzLl9hbmltYXRpb24uY2FuY2VsKCksdGhpcy5fYW5pbWF0aW9uLl93cmFwcGVyPW51bGwsdGhpcy5fYW5pbWF0aW9uPW51bGwpLCghdGhpcy5lZmZlY3R8fHRoaXMuZWZmZWN0IGluc3RhbmNlb2Ygd2luZG93LktleWZyYW1lRWZmZWN0KSYmKHRoaXMuX2FuaW1hdGlvbj1iLm5ld1VuZGVybHlpbmdBbmltYXRpb25Gb3JLZXlmcmFtZUVmZmVjdCh0aGlzLmVmZmVjdCksYi5iaW5kQW5pbWF0aW9uRm9yS2V5ZnJhbWVFZmZlY3QodGhpcykpLCh0aGlzLmVmZmVjdCBpbnN0YW5jZW9mIHdpbmRvdy5TZXF1ZW5jZUVmZmVjdHx8dGhpcy5lZmZlY3QgaW5zdGFuY2VvZiB3aW5kb3cuR3JvdXBFZmZlY3QpJiYodGhpcy5fYW5pbWF0aW9uPWIubmV3VW5kZXJseWluZ0FuaW1hdGlvbkZvckdyb3VwKHRoaXMuZWZmZWN0KSxiLmJpbmRBbmltYXRpb25Gb3JHcm91cCh0aGlzKSksdGhpcy5lZmZlY3QmJnRoaXMuZWZmZWN0Ll9vbnNhbXBsZSYmYi5iaW5kQW5pbWF0aW9uRm9yQ3VzdG9tRWZmZWN0KHRoaXMpLGYmJigxIT1hJiYodGhpcy5wbGF5YmFja1JhdGU9YSksbnVsbCE9PWQ/dGhpcy5zdGFydFRpbWU9ZDpudWxsIT09ZT90aGlzLmN1cnJlbnRUaW1lPWU6bnVsbCE9PXRoaXMuX2hvbGRUaW1lJiYodGhpcy5jdXJyZW50VGltZT10aGlzLl9ob2xkVGltZSksYyYmdGhpcy5wYXVzZSgpKSx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxfdXBkYXRlQ2hpbGRyZW46ZnVuY3Rpb24oKXtpZih0aGlzLmVmZmVjdCYmImlkbGUiIT10aGlzLnBsYXlTdGF0ZSl7dmFyIGE9dGhpcy5lZmZlY3QuX3RpbWluZy5kZWxheTt0aGlzLl9jaGlsZEFuaW1hdGlvbnMuZm9yRWFjaChmdW5jdGlvbihjKXt0aGlzLl9hcnJhbmdlQ2hpbGRyZW4oYyxhKSx0aGlzLmVmZmVjdCBpbnN0YW5jZW9mIHdpbmRvdy5TZXF1ZW5jZUVmZmVjdCYmKGErPWIuZ3JvdXBDaGlsZER1cmF0aW9uKGMuZWZmZWN0KSl9LmJpbmQodGhpcykpfX0sX3NldEV4dGVybmFsQW5pbWF0aW9uOmZ1bmN0aW9uKGEpe2lmKHRoaXMuZWZmZWN0JiZ0aGlzLl9pc0dyb3VwKWZvcih2YXIgYj0wO2I8dGhpcy5lZmZlY3QuY2hpbGRyZW4ubGVuZ3RoO2IrKyl0aGlzLmVmZmVjdC5jaGlsZHJlbltiXS5fYW5pbWF0aW9uPWEsdGhpcy5fY2hpbGRBbmltYXRpb25zW2JdLl9zZXRFeHRlcm5hbEFuaW1hdGlvbihhKX0sX2NvbnN0cnVjdENoaWxkQW5pbWF0aW9uczpmdW5jdGlvbigpe2lmKHRoaXMuZWZmZWN0JiZ0aGlzLl9pc0dyb3VwKXt2YXIgYT10aGlzLmVmZmVjdC5fdGltaW5nLmRlbGF5O3RoaXMuX3JlbW92ZUNoaWxkQW5pbWF0aW9ucygpLHRoaXMuZWZmZWN0LmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oYyl7dmFyIGQ9Yi50aW1lbGluZS5fcGxheShjKTt0aGlzLl9jaGlsZEFuaW1hdGlvbnMucHVzaChkKSxkLnBsYXliYWNrUmF0ZT10aGlzLnBsYXliYWNrUmF0ZSx0aGlzLl9wYXVzZWQmJmQucGF1c2UoKSxjLl9hbmltYXRpb249dGhpcy5lZmZlY3QuX2FuaW1hdGlvbix0aGlzLl9hcnJhbmdlQ2hpbGRyZW4oZCxhKSx0aGlzLmVmZmVjdCBpbnN0YW5jZW9mIHdpbmRvdy5TZXF1ZW5jZUVmZmVjdCYmKGErPWIuZ3JvdXBDaGlsZER1cmF0aW9uKGMpKX0uYmluZCh0aGlzKSl9fSxfYXJyYW5nZUNoaWxkcmVuOmZ1bmN0aW9uKGEsYil7bnVsbD09PXRoaXMuc3RhcnRUaW1lP2EuY3VycmVudFRpbWU9dGhpcy5jdXJyZW50VGltZS1iL3RoaXMucGxheWJhY2tSYXRlOmEuc3RhcnRUaW1lIT09dGhpcy5zdGFydFRpbWUrYi90aGlzLnBsYXliYWNrUmF0ZSYmKGEuc3RhcnRUaW1lPXRoaXMuc3RhcnRUaW1lK2IvdGhpcy5wbGF5YmFja1JhdGUpfSxnZXQgdGltZWxpbmUoKXtyZXR1cm4gdGhpcy5fdGltZWxpbmV9LGdldCBwbGF5U3RhdGUoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uP3RoaXMuX2FuaW1hdGlvbi5wbGF5U3RhdGU6ImlkbGUifSxnZXQgZmluaXNoZWQoKXtyZXR1cm4gd2luZG93LlByb21pc2U/KHRoaXMuX2ZpbmlzaGVkUHJvbWlzZXx8KC0xPT1iLmFuaW1hdGlvbnNXaXRoUHJvbWlzZXMuaW5kZXhPZih0aGlzKSYmYi5hbmltYXRpb25zV2l0aFByb21pc2VzLnB1c2godGhpcyksdGhpcy5fZmluaXNoZWRQcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGEsYil7dGhpcy5fcmVzb2x2ZUZpbmlzaGVkUHJvbWlzZT1mdW5jdGlvbigpe2EodGhpcyl9LHRoaXMuX3JlamVjdEZpbmlzaGVkUHJvbWlzZT1mdW5jdGlvbigpe2Ioe3R5cGU6RE9NRXhjZXB0aW9uLkFCT1JUX0VSUixuYW1lOiJBYm9ydEVycm9yIn0pfX0uYmluZCh0aGlzKSksImZpbmlzaGVkIj09dGhpcy5wbGF5U3RhdGUmJnRoaXMuX3Jlc29sdmVGaW5pc2hlZFByb21pc2UoKSksdGhpcy5fZmluaXNoZWRQcm9taXNlKTooY29uc29sZS53YXJuKCJBbmltYXRpb24gUHJvbWlzZXMgcmVxdWlyZSBKYXZhU2NyaXB0IFByb21pc2UgY29uc3RydWN0b3IiKSxudWxsKX0sZ2V0IHJlYWR5KCl7cmV0dXJuIHdpbmRvdy5Qcm9taXNlPyh0aGlzLl9yZWFkeVByb21pc2V8fCgtMT09Yi5hbmltYXRpb25zV2l0aFByb21pc2VzLmluZGV4T2YodGhpcykmJmIuYW5pbWF0aW9uc1dpdGhQcm9taXNlcy5wdXNoKHRoaXMpLHRoaXMuX3JlYWR5UHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihhLGIpe3RoaXMuX3Jlc29sdmVSZWFkeVByb21pc2U9ZnVuY3Rpb24oKXthKHRoaXMpfSx0aGlzLl9yZWplY3RSZWFkeVByb21pc2U9ZnVuY3Rpb24oKXtiKHt0eXBlOkRPTUV4Y2VwdGlvbi5BQk9SVF9FUlIsbmFtZToiQWJvcnRFcnJvciJ9KX19LmJpbmQodGhpcykpLCJwZW5kaW5nIiE9PXRoaXMucGxheVN0YXRlJiZ0aGlzLl9yZXNvbHZlUmVhZHlQcm9taXNlKCkpLHRoaXMuX3JlYWR5UHJvbWlzZSk6KGNvbnNvbGUud2FybigiQW5pbWF0aW9uIFByb21pc2VzIHJlcXVpcmUgSmF2YVNjcmlwdCBQcm9taXNlIGNvbnN0cnVjdG9yIiksbnVsbCl9LGdldCBvbmZpbmlzaCgpe3JldHVybiB0aGlzLl9hbmltYXRpb24ub25maW5pc2h9LHNldCBvbmZpbmlzaChhKXt0aGlzLl9hbmltYXRpb24ub25maW5pc2g9ImZ1bmN0aW9uIj09dHlwZW9mIGE/ZnVuY3Rpb24oYil7Yi50YXJnZXQ9dGhpcyxhLmNhbGwodGhpcyxiKX0uYmluZCh0aGlzKTphfSxnZXQgb25jYW5jZWwoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uLm9uY2FuY2VsfSxzZXQgb25jYW5jZWwoYSl7dGhpcy5fYW5pbWF0aW9uLm9uY2FuY2VsPSJmdW5jdGlvbiI9PXR5cGVvZiBhP2Z1bmN0aW9uKGIpe2IudGFyZ2V0PXRoaXMsYS5jYWxsKHRoaXMsYil9LmJpbmQodGhpcyk6YX0sZ2V0IGN1cnJlbnRUaW1lKCl7dGhpcy5fdXBkYXRlUHJvbWlzZXMoKTt2YXIgYT10aGlzLl9hbmltYXRpb24uY3VycmVudFRpbWU7cmV0dXJuIHRoaXMuX3VwZGF0ZVByb21pc2VzKCksYX0sc2V0IGN1cnJlbnRUaW1lKGEpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCksdGhpcy5fYW5pbWF0aW9uLmN1cnJlbnRUaW1lPWlzRmluaXRlKGEpP2E6TWF0aC5zaWduKGEpKk51bWJlci5NQVhfVkFMVUUsdGhpcy5fcmVnaXN0ZXIoKSx0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oYixjKXtiLmN1cnJlbnRUaW1lPWEtY30pLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LGdldCBzdGFydFRpbWUoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uLnN0YXJ0VGltZX0sc2V0IHN0YXJ0VGltZShhKXt0aGlzLl91cGRhdGVQcm9taXNlcygpLHRoaXMuX2FuaW1hdGlvbi5zdGFydFRpbWU9aXNGaW5pdGUoYSk/YTpNYXRoLnNpZ24oYSkqTnVtYmVyLk1BWF9WQUxVRSx0aGlzLl9yZWdpc3RlcigpLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihiLGMpe2Iuc3RhcnRUaW1lPWErY30pLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LGdldCBwbGF5YmFja1JhdGUoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uLnBsYXliYWNrUmF0ZX0sc2V0IHBsYXliYWNrUmF0ZShhKXt0aGlzLl91cGRhdGVQcm9taXNlcygpO3ZhciBiPXRoaXMuY3VycmVudFRpbWU7dGhpcy5fYW5pbWF0aW9uLnBsYXliYWNrUmF0ZT1hLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihiKXtiLnBsYXliYWNrUmF0ZT1hfSksbnVsbCE9PWImJih0aGlzLmN1cnJlbnRUaW1lPWIpLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LHBsYXk6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVQcm9taXNlcygpLHRoaXMuX3BhdXNlZD0hMSx0aGlzLl9hbmltYXRpb24ucGxheSgpLC0xPT10aGlzLl90aW1lbGluZS5fYW5pbWF0aW9ucy5pbmRleE9mKHRoaXMpJiZ0aGlzLl90aW1lbGluZS5fYW5pbWF0aW9ucy5wdXNoKHRoaXMpLHRoaXMuX3JlZ2lzdGVyKCksYi5hd2FpdFN0YXJ0VGltZSh0aGlzKSx0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oYSl7dmFyIGI9YS5jdXJyZW50VGltZTthLnBsYXkoKSxhLmN1cnJlbnRUaW1lPWJ9KSx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCksdGhpcy5jdXJyZW50VGltZSYmKHRoaXMuX2hvbGRUaW1lPXRoaXMuY3VycmVudFRpbWUpLHRoaXMuX2FuaW1hdGlvbi5wYXVzZSgpLHRoaXMuX3JlZ2lzdGVyKCksdGhpcy5fZm9yRWFjaENoaWxkKGZ1bmN0aW9uKGEpe2EucGF1c2UoKX0pLHRoaXMuX3BhdXNlZD0hMCx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxmaW5pc2g6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVQcm9taXNlcygpLHRoaXMuX2FuaW1hdGlvbi5maW5pc2goKSx0aGlzLl9yZWdpc3RlcigpLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LGNhbmNlbDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCksdGhpcy5fYW5pbWF0aW9uLmNhbmNlbCgpLHRoaXMuX3JlZ2lzdGVyKCksdGhpcy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCksdGhpcy5fdXBkYXRlUHJvbWlzZXMoKX0scmV2ZXJzZTpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCk7dmFyIGE9dGhpcy5jdXJyZW50VGltZTt0aGlzLl9hbmltYXRpb24ucmV2ZXJzZSgpLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihhKXthLnJldmVyc2UoKX0pLG51bGwhPT1hJiYodGhpcy5jdXJyZW50VGltZT1hKSx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxhZGRFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGEsYil7dmFyIGM9YjsiZnVuY3Rpb24iPT10eXBlb2YgYiYmKGM9ZnVuY3Rpb24oYSl7YS50YXJnZXQ9dGhpcyxiLmNhbGwodGhpcyxhKX0uYmluZCh0aGlzKSxiLl93cmFwcGVyPWMpLHRoaXMuX2FuaW1hdGlvbi5hZGRFdmVudExpc3RlbmVyKGEsYyl9LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXt0aGlzLl9hbmltYXRpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGImJmIuX3dyYXBwZXJ8fGIpfSxfcmVtb3ZlQ2hpbGRBbmltYXRpb25zOmZ1bmN0aW9uKCl7Zm9yKDt0aGlzLl9jaGlsZEFuaW1hdGlvbnMubGVuZ3RoOyl0aGlzLl9jaGlsZEFuaW1hdGlvbnMucG9wKCkuY2FuY2VsKCl9LF9mb3JFYWNoQ2hpbGQ6ZnVuY3Rpb24oYil7dmFyIGM9MDtpZih0aGlzLmVmZmVjdC5jaGlsZHJlbiYmdGhpcy5fY2hpbGRBbmltYXRpb25zLmxlbmd0aDx0aGlzLmVmZmVjdC5jaGlsZHJlbi5sZW5ndGgmJnRoaXMuX2NvbnN0cnVjdENoaWxkQW5pbWF0aW9ucygpLHRoaXMuX2NoaWxkQW5pbWF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2IuY2FsbCh0aGlzLGEsYyksdGhpcy5lZmZlY3QgaW5zdGFuY2VvZiB3aW5kb3cuU2VxdWVuY2VFZmZlY3QmJihjKz1hLmVmZmVjdC5hY3RpdmVEdXJhdGlvbil9LmJpbmQodGhpcykpLCJwZW5kaW5nIiE9dGhpcy5wbGF5U3RhdGUpe3ZhciBkPXRoaXMuZWZmZWN0Ll90aW1pbmcsZT10aGlzLmN1cnJlbnRUaW1lO251bGwhPT1lJiYoZT1hLmNhbGN1bGF0ZUl0ZXJhdGlvblByb2dyZXNzKGEuY2FsY3VsYXRlQWN0aXZlRHVyYXRpb24oZCksZSxkKSksKG51bGw9PWV8fGlzTmFOKGUpKSYmdGhpcy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCl9fX0sd2luZG93LkFuaW1hdGlvbj1iLkFuaW1hdGlvbn0oYSxjKSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChiKXt0aGlzLl9mcmFtZXM9YS5ub3JtYWxpemVLZXlmcmFtZXMoYil9ZnVuY3Rpb24gZSgpe2Zvcih2YXIgYT0hMTtpLmxlbmd0aDspaS5zaGlmdCgpLl91cGRhdGVDaGlsZHJlbigpLGE9ITA7cmV0dXJuIGF9dmFyIGY9ZnVuY3Rpb24oYSl7aWYoYS5fYW5pbWF0aW9uPXZvaWQgMCxhIGluc3RhbmNlb2Ygd2luZG93LlNlcXVlbmNlRWZmZWN0fHxhIGluc3RhbmNlb2Ygd2luZG93Lkdyb3VwRWZmZWN0KWZvcih2YXIgYj0wO2I8YS5jaGlsZHJlbi5sZW5ndGg7YisrKWYoYS5jaGlsZHJlbltiXSl9O2IucmVtb3ZlTXVsdGk9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIGQ9YVtjXTtkLl9wYXJlbnQ/KC0xPT1iLmluZGV4T2YoZC5fcGFyZW50KSYmYi5wdXNoKGQuX3BhcmVudCksZC5fcGFyZW50LmNoaWxkcmVuLnNwbGljZShkLl9wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZihkKSwxKSxkLl9wYXJlbnQ9bnVsbCxmKGQpKTpkLl9hbmltYXRpb24mJmQuX2FuaW1hdGlvbi5lZmZlY3Q9PWQmJihkLl9hbmltYXRpb24uY2FuY2VsKCksZC5fYW5pbWF0aW9uLmVmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QobnVsbCxbXSksZC5fYW5pbWF0aW9uLl9jYWxsYmFjayYmKGQuX2FuaW1hdGlvbi5fY2FsbGJhY2suX2FuaW1hdGlvbj1udWxsKSxkLl9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCksZihkKSl9Zm9yKGM9MDtjPGIubGVuZ3RoO2MrKyliW2NdLl9yZWJ1aWxkKCl9LGIuS2V5ZnJhbWVFZmZlY3Q9ZnVuY3Rpb24oYixjLGUsZil7cmV0dXJuIHRoaXMudGFyZ2V0PWIsdGhpcy5fcGFyZW50PW51bGwsZT1hLm51bWVyaWNUaW1pbmdUb09iamVjdChlKSx0aGlzLl90aW1pbmdJbnB1dD1hLmNsb25lVGltaW5nSW5wdXQoZSksdGhpcy5fdGltaW5nPWEubm9ybWFsaXplVGltaW5nSW5wdXQoZSksdGhpcy50aW1pbmc9YS5tYWtlVGltaW5nKGUsITEsdGhpcyksdGhpcy50aW1pbmcuX2VmZmVjdD10aGlzLCJmdW5jdGlvbiI9PXR5cGVvZiBjPyhhLmRlcHJlY2F0ZWQoIkN1c3RvbSBLZXlmcmFtZUVmZmVjdCIsIjIwMTUtMDYtMjIiLCJVc2UgS2V5ZnJhbWVFZmZlY3Qub25zYW1wbGUgaW5zdGVhZC4iKSx0aGlzLl9ub3JtYWxpemVkS2V5ZnJhbWVzPWMpOnRoaXMuX25vcm1hbGl6ZWRLZXlmcmFtZXM9bmV3IGQoYyksdGhpcy5fa2V5ZnJhbWVzPWMsdGhpcy5hY3RpdmVEdXJhdGlvbj1hLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uKHRoaXMuX3RpbWluZyksdGhpcy5faWQ9Zix0aGlzfSxiLktleWZyYW1lRWZmZWN0LnByb3RvdHlwZT17Z2V0RnJhbWVzOmZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuX25vcm1hbGl6ZWRLZXlmcmFtZXM/dGhpcy5fbm9ybWFsaXplZEtleWZyYW1lczp0aGlzLl9ub3JtYWxpemVkS2V5ZnJhbWVzLl9mcmFtZXN9LHNldCBvbnNhbXBsZShhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5nZXRGcmFtZXMoKSl0aHJvdyBuZXcgRXJyb3IoIlNldHRpbmcgb25zYW1wbGUgb24gY3VzdG9tIGVmZmVjdCBLZXlmcmFtZUVmZmVjdCBpcyBub3Qgc3VwcG9ydGVkLiIpO3RoaXMuX29uc2FtcGxlPWEsdGhpcy5fYW5pbWF0aW9uJiZ0aGlzLl9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCl9LGdldCBwYXJlbnQoKXtyZXR1cm4gdGhpcy5fcGFyZW50fSxjbG9uZTpmdW5jdGlvbigpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLmdldEZyYW1lcygpKXRocm93IG5ldyBFcnJvcigiQ2xvbmluZyBjdXN0b20gZWZmZWN0cyBpcyBub3Qgc3VwcG9ydGVkLiIpO3ZhciBiPW5ldyBLZXlmcmFtZUVmZmVjdCh0aGlzLnRhcmdldCxbXSxhLmNsb25lVGltaW5nSW5wdXQodGhpcy5fdGltaW5nSW5wdXQpLHRoaXMuX2lkKTtyZXR1cm4gYi5fbm9ybWFsaXplZEtleWZyYW1lcz10aGlzLl9ub3JtYWxpemVkS2V5ZnJhbWVzLGIuX2tleWZyYW1lcz10aGlzLl9rZXlmcmFtZXMsYn0scmVtb3ZlOmZ1bmN0aW9uKCl7Yi5yZW1vdmVNdWx0aShbdGhpc10pfX07dmFyIGc9RWxlbWVudC5wcm90b3R5cGUuYW5pbWF0ZTtFbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGEsYyl7dmFyIGQ9IiI7cmV0dXJuIGMmJmMuaWQmJihkPWMuaWQpLGIudGltZWxpbmUuX3BsYXkobmV3IGIuS2V5ZnJhbWVFZmZlY3QodGhpcyxhLGMsZCkpfTt2YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJkaXYiKTtiLm5ld1VuZGVybHlpbmdBbmltYXRpb25Gb3JLZXlmcmFtZUVmZmVjdD1mdW5jdGlvbihhKXtpZihhKXt2YXIgYj1hLnRhcmdldHx8aCxjPWEuX2tleWZyYW1lczsiZnVuY3Rpb24iPT10eXBlb2YgYyYmKGM9W10pO3ZhciBkPWEuX3RpbWluZ0lucHV0O2QuaWQ9YS5faWR9ZWxzZSB2YXIgYj1oLGM9W10sZD0wO3JldHVybiBnLmFwcGx5KGIsW2MsZF0pfSxiLmJpbmRBbmltYXRpb25Gb3JLZXlmcmFtZUVmZmVjdD1mdW5jdGlvbihhKXthLmVmZmVjdCYmImZ1bmN0aW9uIj09dHlwZW9mIGEuZWZmZWN0Ll9ub3JtYWxpemVkS2V5ZnJhbWVzJiZiLmJpbmRBbmltYXRpb25Gb3JDdXN0b21FZmZlY3QoYSl9O3ZhciBpPVtdO2IuYXdhaXRTdGFydFRpbWU9ZnVuY3Rpb24oYSl7bnVsbD09PWEuc3RhcnRUaW1lJiZhLl9pc0dyb3VwJiYoMD09aS5sZW5ndGgmJnJlcXVlc3RBbmltYXRpb25GcmFtZShlKSxpLnB1c2goYSkpfTt2YXIgaj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZTtPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCJnZXRDb21wdXRlZFN0eWxlIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6ZnVuY3Rpb24oKXtiLnRpbWVsaW5lLl91cGRhdGVBbmltYXRpb25zUHJvbWlzZXMoKTt2YXIgYT1qLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZSgpJiYoYT1qLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksYi50aW1lbGluZS5fdXBkYXRlQW5pbWF0aW9uc1Byb21pc2VzKCksYX19KSx3aW5kb3cuS2V5ZnJhbWVFZmZlY3Q9Yi5LZXlmcmFtZUVmZmVjdCx3aW5kb3cuRWxlbWVudC5wcm90b3R5cGUuZ2V0QW5pbWF0aW9ucz1mdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC50aW1lbGluZS5nZXRBbmltYXRpb25zKCkuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBudWxsIT09YS5lZmZlY3QmJmEuZWZmZWN0LnRhcmdldD09dGhpc30uYmluZCh0aGlzKSl9fShhLGMpLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe2EuX3JlZ2lzdGVyZWR8fChhLl9yZWdpc3RlcmVkPSEwLGcucHVzaChhKSxofHwoaD0hMCxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSkpKX1mdW5jdGlvbiBlKGEpe3ZhciBiPWc7Zz1bXSxiLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5fc2VxdWVuY2VOdW1iZXItYi5fc2VxdWVuY2VOdW1iZXJ9KSxiPWIuZmlsdGVyKGZ1bmN0aW9uKGEpe2EoKTt2YXIgYj1hLl9hbmltYXRpb24/YS5fYW5pbWF0aW9uLnBsYXlTdGF0ZToiaWRsZSI7cmV0dXJuInJ1bm5pbmciIT1iJiYicGVuZGluZyIhPWImJihhLl9yZWdpc3RlcmVkPSExKSxhLl9yZWdpc3RlcmVkfSksZy5wdXNoLmFwcGx5KGcsYiksZy5sZW5ndGg/KGg9ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpKTpoPSExfXZhciBmPShkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJkaXYiKSwwKTtiLmJpbmRBbmltYXRpb25Gb3JDdXN0b21FZmZlY3Q9ZnVuY3Rpb24oYil7dmFyIGMsZT1iLmVmZmVjdC50YXJnZXQsZz0iZnVuY3Rpb24iPT10eXBlb2YgYi5lZmZlY3QuZ2V0RnJhbWVzKCk7Yz1nP2IuZWZmZWN0LmdldEZyYW1lcygpOmIuZWZmZWN0Ll9vbnNhbXBsZTt2YXIgaD1iLmVmZmVjdC50aW1pbmcsaT1udWxsO2g9YS5ub3JtYWxpemVUaW1pbmdJbnB1dChoKTt2YXIgaj1mdW5jdGlvbigpe3ZhciBkPWouX2FuaW1hdGlvbj9qLl9hbmltYXRpb24uY3VycmVudFRpbWU6bnVsbDtudWxsIT09ZCYmKGQ9YS5jYWxjdWxhdGVJdGVyYXRpb25Qcm9ncmVzcyhhLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uKGgpLGQsaCksaXNOYU4oZCkmJihkPW51bGwpKSxkIT09aSYmKGc/YyhkLGUsYi5lZmZlY3QpOmMoZCxiLmVmZmVjdCxiLmVmZmVjdC5fYW5pbWF0aW9uKSksaT1kfTtqLl9hbmltYXRpb249YixqLl9yZWdpc3RlcmVkPSExLGouX3NlcXVlbmNlTnVtYmVyPWYrKyxiLl9jYWxsYmFjaz1qLGQoail9O3ZhciBnPVtdLGg9ITE7Yi5BbmltYXRpb24ucHJvdG90eXBlLl9yZWdpc3Rlcj1mdW5jdGlvbigpe3RoaXMuX2NhbGxiYWNrJiZkKHRoaXMuX2NhbGxiYWNrKX19KGEsYyksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7cmV0dXJuIGEuX3RpbWluZy5kZWxheSthLmFjdGl2ZUR1cmF0aW9uK2EuX3RpbWluZy5lbmREZWxheX1mdW5jdGlvbiBlKGIsYyxkKXt0aGlzLl9pZD1kLHRoaXMuX3BhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49Ynx8W10sdGhpcy5fcmVwYXJlbnQodGhpcy5jaGlsZHJlbiksYz1hLm51bWVyaWNUaW1pbmdUb09iamVjdChjKSx0aGlzLl90aW1pbmdJbnB1dD1hLmNsb25lVGltaW5nSW5wdXQoYyksdGhpcy5fdGltaW5nPWEubm9ybWFsaXplVGltaW5nSW5wdXQoYywhMCksdGhpcy50aW1pbmc9YS5tYWtlVGltaW5nKGMsITAsdGhpcyksdGhpcy50aW1pbmcuX2VmZmVjdD10aGlzLCJhdXRvIj09PXRoaXMuX3RpbWluZy5kdXJhdGlvbiYmKHRoaXMuX3RpbWluZy5kdXJhdGlvbj10aGlzLmFjdGl2ZUR1cmF0aW9uKX13aW5kb3cuU2VxdWVuY2VFZmZlY3Q9ZnVuY3Rpb24oKXtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sd2luZG93Lkdyb3VwRWZmZWN0PWZ1bmN0aW9uKCl7ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGUucHJvdG90eXBlPXtfaXNBbmNlc3RvcjpmdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcztudWxsIT09Yjspe2lmKGI9PWEpcmV0dXJuITA7Yj1iLl9wYXJlbnR9cmV0dXJuITF9LF9yZWJ1aWxkOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXM7YTspImF1dG8iPT09YS50aW1pbmcuZHVyYXRpb24mJihhLl90aW1pbmcuZHVyYXRpb249YS5hY3RpdmVEdXJhdGlvbiksYT1hLl9wYXJlbnQ7dGhpcy5fYW5pbWF0aW9uJiZ0aGlzLl9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCl9LF9yZXBhcmVudDpmdW5jdGlvbihhKXtiLnJlbW92ZU11bHRpKGEpO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWFbY10uX3BhcmVudD10aGlzfSxfcHV0Q2hpbGQ6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9Yj8iQ2Fubm90IGFwcGVuZCBhbiBhbmNlc3RvciBvciBzZWxmIjoiQ2Fubm90IHByZXBlbmQgYW4gYW5jZXN0b3Igb3Igc2VsZiIsZD0wO2Q8YS5sZW5ndGg7ZCsrKWlmKHRoaXMuX2lzQW5jZXN0b3IoYVtkXSkpdGhyb3d7dHlwZTpET01FeGNlcHRpb24uSElFUkFSQ0hZX1JFUVVFU1RfRVJSLG5hbWU6IkhpZXJhcmNoeVJlcXVlc3RFcnJvciIsbWVzc2FnZTpjfTtmb3IodmFyIGQ9MDtkPGEubGVuZ3RoO2QrKyliP3RoaXMuY2hpbGRyZW4ucHVzaChhW2RdKTp0aGlzLmNoaWxkcmVuLnVuc2hpZnQoYVtkXSk7dGhpcy5fcmVwYXJlbnQoYSksdGhpcy5fcmVidWlsZCgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXt0aGlzLl9wdXRDaGlsZChhcmd1bWVudHMsITApfSxwcmVwZW5kOmZ1bmN0aW9uKCl7dGhpcy5fcHV0Q2hpbGQoYXJndW1lbnRzLCExKX0sZ2V0IHBhcmVudCgpe3JldHVybiB0aGlzLl9wYXJlbnR9LGdldCBmaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMuY2hpbGRyZW4ubGVuZ3RoP3RoaXMuY2hpbGRyZW5bMF06bnVsbH0sZ2V0IGxhc3RDaGlsZCgpe3JldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aD90aGlzLmNoaWxkcmVuW3RoaXMuY2hpbGRyZW4ubGVuZ3RoLTFdOm51bGx9LGNsb25lOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPWEuY2xvbmVUaW1pbmdJbnB1dCh0aGlzLl90aW1pbmdJbnB1dCksYz1bXSxkPTA7ZDx0aGlzLmNoaWxkcmVuLmxlbmd0aDtkKyspYy5wdXNoKHRoaXMuY2hpbGRyZW5bZF0uY2xvbmUoKSk7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBHcm91cEVmZmVjdD9uZXcgR3JvdXBFZmZlY3QoYyxiKTpuZXcgU2VxdWVuY2VFZmZlY3QoYyxiKX0scmVtb3ZlOmZ1bmN0aW9uKCl7Yi5yZW1vdmVNdWx0aShbdGhpc10pfX0sd2luZG93LlNlcXVlbmNlRWZmZWN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNlcXVlbmNlRWZmZWN0LnByb3RvdHlwZSwiYWN0aXZlRHVyYXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgYT0wO3JldHVybiB0aGlzLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oYil7YSs9ZChiKX0pLE1hdGgubWF4KGEsMCl9fSksd2luZG93Lkdyb3VwRWZmZWN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93Lkdyb3VwRWZmZWN0LnByb3RvdHlwZSwiYWN0aXZlRHVyYXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgYT0wO3JldHVybiB0aGlzLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oYil7YT1NYXRoLm1heChhLGQoYikpfSksYX19KSxiLm5ld1VuZGVybHlpbmdBbmltYXRpb25Gb3JHcm91cD1mdW5jdGlvbihjKXt2YXIgZCxlPW51bGwsZj1mdW5jdGlvbihiKXt2YXIgYz1kLl93cmFwcGVyO2lmKGMmJiJwZW5kaW5nIiE9Yy5wbGF5U3RhdGUmJmMuZWZmZWN0KXJldHVybiBudWxsPT1iP3ZvaWQgYy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCk6MD09YiYmYy5wbGF5YmFja1JhdGU8MCYmKGV8fChlPWEubm9ybWFsaXplVGltaW5nSW5wdXQoYy5lZmZlY3QudGltaW5nKSksYj1hLmNhbGN1bGF0ZUl0ZXJhdGlvblByb2dyZXNzKGEuY2FsY3VsYXRlQWN0aXZlRHVyYXRpb24oZSksLTEsZSksaXNOYU4oYil8fG51bGw9PWIpPyhjLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oYSl7YS5jdXJyZW50VGltZT0tMX0pLHZvaWQgYy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCkpOnZvaWQgMH0sZz1uZXcgS2V5ZnJhbWVFZmZlY3QobnVsbCxbXSxjLl90aW1pbmcsYy5faWQpO3JldHVybiBnLm9uc2FtcGxlPWYsZD1iLnRpbWVsaW5lLl9wbGF5KGcpfSxiLmJpbmRBbmltYXRpb25Gb3JHcm91cD1mdW5jdGlvbihhKXthLl9hbmltYXRpb24uX3dyYXBwZXI9YSxhLl9pc0dyb3VwPSEwLGIuYXdhaXRTdGFydFRpbWUoYSksYS5fY29uc3RydWN0Q2hpbGRBbmltYXRpb25zKCksYS5fc2V0RXh0ZXJuYWxBbmltYXRpb24oYSl9LGIuZ3JvdXBDaGlsZER1cmF0aW9uPWR9KGEsYyl9KCk7KCgpPT57dmFyIHZ2ZT1PYmplY3QuY3JlYXRlO3ZhciBCTT1PYmplY3QuZGVmaW5lUHJvcGVydHkseHZlPU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzLGJ2ZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLHd2ZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyxTdmU9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMsaGR0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsTXZlPU9iamVjdC5nZXRQcm90b3R5cGVPZixwZHQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxFdmU9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTt2YXIgVEk9TWF0aC5wb3csZmR0PShlLHQscik9PnQgaW4gZT9CTShlLHQse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnJ9KTplW3RdPXIsaWE9KGUsdCk9Pntmb3IodmFyIHIgaW4gdHx8KHQ9e30pKXBkdC5jYWxsKHQscikmJmZkdChlLHIsdFtyXSk7aWYoaGR0KWZvcih2YXIgciBvZiBoZHQodCkpRXZlLmNhbGwodCxyKSYmZmR0KGUscix0W3JdKTtyZXR1cm4gZX0seWg9KGUsdCk9Pnh2ZShlLHd2ZSh0KSk7dmFyIEV4PShlPT50eXBlb2YgcmVxdWlyZSE9InVuZGVmaW5lZCI/cmVxdWlyZTp0eXBlb2YgUHJveHkhPSJ1bmRlZmluZWQiP25ldyBQcm94eShlLHtnZXQ6KHQscik9Pih0eXBlb2YgcmVxdWlyZSE9InVuZGVmaW5lZCI/cmVxdWlyZTp0KVtyXX0pOmUpKGZ1bmN0aW9uKGUpe2lmKHR5cGVvZiByZXF1aXJlIT0idW5kZWZpbmVkIilyZXR1cm4gcmVxdWlyZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhyb3cgbmV3IEVycm9yKCdEeW5hbWljIHJlcXVpcmUgb2YgIicrZSsnIiBpcyBub3Qgc3VwcG9ydGVkJyl9KTt2YXIgTT0oZSx0KT0+KCk9PihlJiYodD1lKGU9MCkpLHQpO3ZhciBIPShlLHQpPT4oKT0+KHR8fGUoKHQ9e2V4cG9ydHM6e319KS5leHBvcnRzLHQpLHQuZXhwb3J0cyksWnM9KGUsdCk9Pntmb3IodmFyIHIgaW4gdClCTShlLHIse2dldDp0W3JdLGVudW1lcmFibGU6ITB9KX0sZGR0PShlLHQscixuKT0+e2lmKHQmJnR5cGVvZiB0PT0ib2JqZWN0Inx8dHlwZW9mIHQ9PSJmdW5jdGlvbiIpZm9yKGxldCBpIG9mIFN2ZSh0KSkhcGR0LmNhbGwoZSxpKSYmaSE9PXImJkJNKGUsaSx7Z2V0OigpPT50W2ldLGVudW1lcmFibGU6IShuPWJ2ZSh0LGkpKXx8bi5lbnVtZXJhYmxlfSk7cmV0dXJuIGV9O3ZhciBFZT0oZSx0LHIpPT4ocj1lIT1udWxsP3Z2ZShNdmUoZSkpOnt9LGRkdCh0fHwhZXx8IWUuX19lc01vZHVsZT9CTShyLCJkZWZhdWx0Iix7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwfSk6cixlKSksVXQ9ZT0+ZGR0KEJNKHt9LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlKTt2YXIgUmk9KGUsdCxyKT0+bmV3IFByb21pc2UoKG4saSk9Pnt2YXIgbz1sPT57dHJ5e3Moci5uZXh0KGwpKX1jYXRjaChjKXtpKGMpfX0sYT1sPT57dHJ5e3Moci50aHJvdyhsKSl9Y2F0Y2goYyl7aShjKX19LHM9bD0+bC5kb25lP24obC52YWx1ZSk6UHJvbWlzZS5yZXNvbHZlKGwudmFsdWUpLnRoZW4obyxhKTtzKChyPXIuYXBwbHkoZSx0KSkubmV4dCgpKX0pO3ZhciBIZHQ9SCgocF9yLFBJKT0+e3ZhciBtZHQsZ2R0LF9kdCx5ZHQsdmR0LHhkdCxiZHQsd2R0LFNkdCxNZHQsRWR0LFRkdCxDZHQsQ0ksaEcsQWR0LFBkdCxJZHQsVHgsTGR0LGtkdCxSZHQsTmR0LERkdCxPZHQsemR0LEZkdCxCZHQsQUk7KGZ1bmN0aW9uKGUpe3ZhciB0PXR5cGVvZiBnbG9iYWw9PSJvYmplY3QiP2dsb2JhbDp0eXBlb2Ygc2VsZj09Im9iamVjdCI/c2VsZjp0eXBlb2YgdGhpcz09Im9iamVjdCI/dGhpczp7fTt0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kP2RlZmluZSgidHNsaWIiLFsiZXhwb3J0cyJdLGZ1bmN0aW9uKG4pe2Uocih0LHIobikpKX0pOnR5cGVvZiBQST09Im9iamVjdCImJnR5cGVvZiBQSS5leHBvcnRzPT0ib2JqZWN0Ij9lKHIodCxyKFBJLmV4cG9ydHMpKSk6ZShyKHQpKTtmdW5jdGlvbiByKG4saSl7cmV0dXJuIG4hPT10JiYodHlwZW9mIE9iamVjdC5jcmVhdGU9PSJmdW5jdGlvbiI/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pOm4uX19lc01vZHVsZT0hMCksZnVuY3Rpb24obyxhKXtyZXR1cm4gbltvXT1pP2kobyxhKTphfX19KShmdW5jdGlvbihlKXt2YXIgdD1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24obixpKXtuLl9fcHJvdG9fXz1pfXx8ZnVuY3Rpb24obixpKXtmb3IodmFyIG8gaW4gaSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSxvKSYmKG5bb109aVtvXSl9O21kdD1mdW5jdGlvbihuLGkpe2lmKHR5cGVvZiBpIT0iZnVuY3Rpb24iJiZpIT09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKGkpKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO3QobixpKTtmdW5jdGlvbiBvKCl7dGhpcy5jb25zdHJ1Y3Rvcj1ufW4ucHJvdG90eXBlPWk9PT1udWxsP09iamVjdC5jcmVhdGUoaSk6KG8ucHJvdG90eXBlPWkucHJvdG90eXBlLG5ldyBvKX0sZ2R0PU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKG4pe2Zvcih2YXIgaSxvPTEsYT1hcmd1bWVudHMubGVuZ3RoO288YTtvKyspe2k9YXJndW1lbnRzW29dO2Zvcih2YXIgcyBpbiBpKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLHMpJiYobltzXT1pW3NdKX1yZXR1cm4gbn0sX2R0PWZ1bmN0aW9uKG4saSl7dmFyIG89e307Zm9yKHZhciBhIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sYSkmJmkuaW5kZXhPZihhKTwwJiYob1thXT1uW2FdKTtpZihuIT1udWxsJiZ0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz09ImZ1bmN0aW9uIilmb3IodmFyIHM9MCxhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMobik7czxhLmxlbmd0aDtzKyspaS5pbmRleE9mKGFbc10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChuLGFbc10pJiYob1thW3NdXT1uW2Fbc11dKTtyZXR1cm4gb30seWR0PWZ1bmN0aW9uKG4saSxvLGEpe3ZhciBzPWFyZ3VtZW50cy5sZW5ndGgsbD1zPDM/aTphPT09bnVsbD9hPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaSxvKTphLGM7aWYodHlwZW9mIFJlZmxlY3Q9PSJvYmplY3QiJiZ0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZT09ImZ1bmN0aW9uIilsPVJlZmxlY3QuZGVjb3JhdGUobixpLG8sYSk7ZWxzZSBmb3IodmFyIHU9bi5sZW5ndGgtMTt1Pj0wO3UtLSkoYz1uW3VdKSYmKGw9KHM8Mz9jKGwpOnM+Mz9jKGksbyxsKTpjKGksbykpfHxsKTtyZXR1cm4gcz4zJiZsJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxvLGwpLGx9LHZkdD1mdW5jdGlvbihuLGkpe3JldHVybiBmdW5jdGlvbihvLGEpe2kobyxhLG4pfX0seGR0PWZ1bmN0aW9uKG4saSxvLGEscyxsKXtmdW5jdGlvbiBjKFMpe2lmKFMhPT12b2lkIDAmJnR5cGVvZiBTIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIFN9Zm9yKHZhciB1PWEua2luZCxoPXU9PT0iZ2V0dGVyIj8iZ2V0Ijp1PT09InNldHRlciI/InNldCI6InZhbHVlIixmPSFpJiZuP2Euc3RhdGljP246bi5wcm90b3R5cGU6bnVsbCxwPWl8fChmP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZixhLm5hbWUpOnt9KSxkLGc9ITEsXz1vLmxlbmd0aC0xO18+PTA7Xy0tKXt2YXIgeT17fTtmb3IodmFyIHggaW4gYSl5W3hdPXg9PT0iYWNjZXNzIj97fTphW3hdO2Zvcih2YXIgeCBpbiBhLmFjY2Vzcyl5LmFjY2Vzc1t4XT1hLmFjY2Vzc1t4XTt5LmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKFMpe2lmKGcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7bC5wdXNoKGMoU3x8bnVsbCkpfTt2YXIgYj0oMCxvW19dKSh1PT09ImFjY2Vzc29yIj97Z2V0OnAuZ2V0LHNldDpwLnNldH06cFtoXSx5KTtpZih1PT09ImFjY2Vzc29yIil7aWYoYj09PXZvaWQgMCljb250aW51ZTtpZihiPT09bnVsbHx8dHlwZW9mIGIhPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhkPWMoYi5nZXQpKSYmKHAuZ2V0PWQpLChkPWMoYi5zZXQpKSYmKHAuc2V0PWQpLChkPWMoYi5pbml0KSkmJnMucHVzaChkKX1lbHNlKGQ9YyhiKSkmJih1PT09ImZpZWxkIj9zLnB1c2goZCk6cFtoXT1kKX1mJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZixhLm5hbWUscCksZz0hMH0sYmR0PWZ1bmN0aW9uKG4saSxvKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aD4yLHM9MDtzPGkubGVuZ3RoO3MrKylvPWE/aVtzXS5jYWxsKG4sbyk6aVtzXS5jYWxsKG4pO3JldHVybiBhP286dm9pZCAwfSx3ZHQ9ZnVuY3Rpb24obil7cmV0dXJuIHR5cGVvZiBuPT0ic3ltYm9sIj9uOiIiLmNvbmNhdChuKX0sU2R0PWZ1bmN0aW9uKG4saSxvKXtyZXR1cm4gdHlwZW9mIGk9PSJzeW1ib2wiJiYoaT1pLmRlc2NyaXB0aW9uPyJbIi5jb25jYXQoaS5kZXNjcmlwdGlvbiwiXSIpOiIiKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobiwibmFtZSIse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTpvPyIiLmNvbmNhdChvLCIgIixpKTppfSl9LE1kdD1mdW5jdGlvbihuLGkpe2lmKHR5cGVvZiBSZWZsZWN0PT0ib2JqZWN0IiYmdHlwZW9mIFJlZmxlY3QubWV0YWRhdGE9PSJmdW5jdGlvbiIpcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobixpKX0sRWR0PWZ1bmN0aW9uKG4saSxvLGEpe2Z1bmN0aW9uIHMobCl7cmV0dXJuIGwgaW5zdGFuY2VvZiBvP2w6bmV3IG8oZnVuY3Rpb24oYyl7YyhsKX0pfXJldHVybiBuZXcob3x8KG89UHJvbWlzZSkpKGZ1bmN0aW9uKGwsYyl7ZnVuY3Rpb24gdShwKXt0cnl7ZihhLm5leHQocCkpfWNhdGNoKGQpe2MoZCl9fWZ1bmN0aW9uIGgocCl7dHJ5e2YoYS50aHJvdyhwKSl9Y2F0Y2goZCl7YyhkKX19ZnVuY3Rpb24gZihwKXtwLmRvbmU/bChwLnZhbHVlKTpzKHAudmFsdWUpLnRoZW4odSxoKX1mKChhPWEuYXBwbHkobixpfHxbXSkpLm5leHQoKSl9KX0sVGR0PWZ1bmN0aW9uKG4saSl7dmFyIG89e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKGxbMF0mMSl0aHJvdyBsWzFdO3JldHVybiBsWzFdfSx0cnlzOltdLG9wczpbXX0sYSxzLGwsYztyZXR1cm4gYz17bmV4dDp1KDApLHRocm93OnUoMSkscmV0dXJuOnUoMil9LHR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJihjW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGM7ZnVuY3Rpb24gdShmKXtyZXR1cm4gZnVuY3Rpb24ocCl7cmV0dXJuIGgoW2YscF0pfX1mdW5jdGlvbiBoKGYpe2lmKGEpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7YyYmKGM9MCxmWzBdJiYobz0wKSksbzspdHJ5e2lmKGE9MSxzJiYobD1mWzBdJjI/cy5yZXR1cm46ZlswXT9zLnRocm93fHwoKGw9cy5yZXR1cm4pJiZsLmNhbGwocyksMCk6cy5uZXh0KSYmIShsPWwuY2FsbChzLGZbMV0pKS5kb25lKXJldHVybiBsO3N3aXRjaChzPTAsbCYmKGY9W2ZbMF0mMixsLnZhbHVlXSksZlswXSl7Y2FzZSAwOmNhc2UgMTpsPWY7YnJlYWs7Y2FzZSA0OnJldHVybiBvLmxhYmVsKysse3ZhbHVlOmZbMV0sZG9uZTohMX07Y2FzZSA1Om8ubGFiZWwrKyxzPWZbMV0sZj1bMF07Y29udGludWU7Y2FzZSA3OmY9by5vcHMucG9wKCksby50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYobD1vLnRyeXMsIShsPWwubGVuZ3RoPjAmJmxbbC5sZW5ndGgtMV0pJiYoZlswXT09PTZ8fGZbMF09PT0yKSl7bz0wO2NvbnRpbnVlfWlmKGZbMF09PT0zJiYoIWx8fGZbMV0+bFswXSYmZlsxXTxsWzNdKSl7by5sYWJlbD1mWzFdO2JyZWFrfWlmKGZbMF09PT02JiZvLmxhYmVsPGxbMV0pe28ubGFiZWw9bFsxXSxsPWY7YnJlYWt9aWYobCYmby5sYWJlbDxsWzJdKXtvLmxhYmVsPWxbMl0sby5vcHMucHVzaChmKTticmVha31sWzJdJiZvLm9wcy5wb3AoKSxvLnRyeXMucG9wKCk7Y29udGludWV9Zj1pLmNhbGwobixvKX1jYXRjaChwKXtmPVs2LHBdLHM9MH1maW5hbGx5e2E9bD0wfWlmKGZbMF0mNSl0aHJvdyBmWzFdO3JldHVybnt2YWx1ZTpmWzBdP2ZbMV06dm9pZCAwLGRvbmU6ITB9fX0sQ2R0PWZ1bmN0aW9uKG4saSl7Zm9yKHZhciBvIGluIG4pbyE9PSJkZWZhdWx0IiYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLG8pJiZBSShpLG4sbyl9LEFJPU9iamVjdC5jcmVhdGU/ZnVuY3Rpb24obixpLG8sYSl7YT09PXZvaWQgMCYmKGE9byk7dmFyIHM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpLG8pOyghc3x8KCJnZXQiaW4gcz8haS5fX2VzTW9kdWxlOnMud3JpdGFibGV8fHMuY29uZmlndXJhYmxlKSkmJihzPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpW29dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGEscyl9OmZ1bmN0aW9uKG4saSxvLGEpe2E9PT12b2lkIDAmJihhPW8pLG5bYV09aVtvXX0sQ0k9ZnVuY3Rpb24obil7dmFyIGk9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLml0ZXJhdG9yLG89aSYmbltpXSxhPTA7aWYobylyZXR1cm4gby5jYWxsKG4pO2lmKG4mJnR5cGVvZiBuLmxlbmd0aD09Im51bWJlciIpcmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gbiYmYT49bi5sZW5ndGgmJihuPXZvaWQgMCkse3ZhbHVlOm4mJm5bYSsrXSxkb25lOiFufX19O3Rocm93IG5ldyBUeXBlRXJyb3IoaT8iT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS4iOiJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIil9LGhHPWZ1bmN0aW9uKG4saSl7dmFyIG89dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmbltTeW1ib2wuaXRlcmF0b3JdO2lmKCFvKXJldHVybiBuO3ZhciBhPW8uY2FsbChuKSxzLGw9W10sYzt0cnl7Zm9yKDsoaT09PXZvaWQgMHx8aS0tID4wKSYmIShzPWEubmV4dCgpKS5kb25lOylsLnB1c2gocy52YWx1ZSl9Y2F0Y2godSl7Yz17ZXJyb3I6dX19ZmluYWxseXt0cnl7cyYmIXMuZG9uZSYmKG89YS5yZXR1cm4pJiZvLmNhbGwoYSl9ZmluYWxseXtpZihjKXRocm93IGMuZXJyb3J9fXJldHVybiBsfSxBZHQ9ZnVuY3Rpb24oKXtmb3IodmFyIG49W10saT0wO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspbj1uLmNvbmNhdChoRyhhcmd1bWVudHNbaV0pKTtyZXR1cm4gbn0sUGR0PWZ1bmN0aW9uKCl7Zm9yKHZhciBuPTAsaT0wLG89YXJndW1lbnRzLmxlbmd0aDtpPG87aSsrKW4rPWFyZ3VtZW50c1tpXS5sZW5ndGg7Zm9yKHZhciBhPUFycmF5KG4pLHM9MCxpPTA7aTxvO2krKylmb3IodmFyIGw9YXJndW1lbnRzW2ldLGM9MCx1PWwubGVuZ3RoO2M8dTtjKysscysrKWFbc109bFtjXTtyZXR1cm4gYX0sSWR0PWZ1bmN0aW9uKG4saSxvKXtpZihvfHxhcmd1bWVudHMubGVuZ3RoPT09Milmb3IodmFyIGE9MCxzPWkubGVuZ3RoLGw7YTxzO2ErKykobHx8IShhIGluIGkpKSYmKGx8fChsPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGksMCxhKSksbFthXT1pW2FdKTtyZXR1cm4gbi5jb25jYXQobHx8QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoaSkpfSxUeD1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFR4Pyh0aGlzLnY9bix0aGlzKTpuZXcgVHgobil9LExkdD1mdW5jdGlvbihuLGksbyl7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpO3ZhciBhPW8uYXBwbHkobixpfHxbXSkscyxsPVtdO3JldHVybiBzPXt9LGMoIm5leHQiKSxjKCJ0aHJvdyIpLGMoInJldHVybiIpLHNbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LHM7ZnVuY3Rpb24gYyhnKXthW2ddJiYoc1tnXT1mdW5jdGlvbihfKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oeSx4KXtsLnB1c2goW2csXyx5LHhdKT4xfHx1KGcsXyl9KX0pfWZ1bmN0aW9uIHUoZyxfKXt0cnl7aChhW2ddKF8pKX1jYXRjaCh5KXtkKGxbMF1bM10seSl9fWZ1bmN0aW9uIGgoZyl7Zy52YWx1ZSBpbnN0YW5jZW9mIFR4P1Byb21pc2UucmVzb2x2ZShnLnZhbHVlLnYpLnRoZW4oZixwKTpkKGxbMF1bMl0sZyl9ZnVuY3Rpb24gZihnKXt1KCJuZXh0IixnKX1mdW5jdGlvbiBwKGcpe3UoInRocm93IixnKX1mdW5jdGlvbiBkKGcsXyl7ZyhfKSxsLnNoaWZ0KCksbC5sZW5ndGgmJnUobFswXVswXSxsWzBdWzFdKX19LGtkdD1mdW5jdGlvbihuKXt2YXIgaSxvO3JldHVybiBpPXt9LGEoIm5leHQiKSxhKCJ0aHJvdyIsZnVuY3Rpb24ocyl7dGhyb3cgc30pLGEoInJldHVybiIpLGlbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxpO2Z1bmN0aW9uIGEocyxsKXtpW3NdPW5bc10/ZnVuY3Rpb24oYyl7cmV0dXJuKG89IW8pP3t2YWx1ZTpUeChuW3NdKGMpKSxkb25lOiExfTpsP2woYyk6Y306bH19LFJkdD1mdW5jdGlvbihuKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIik7dmFyIGk9bltTeW1ib2wuYXN5bmNJdGVyYXRvcl0sbztyZXR1cm4gaT9pLmNhbGwobik6KG49dHlwZW9mIENJPT0iZnVuY3Rpb24iP0NJKG4pOm5bU3ltYm9sLml0ZXJhdG9yXSgpLG89e30sYSgibmV4dCIpLGEoInRocm93IiksYSgicmV0dXJuIiksb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sbyk7ZnVuY3Rpb24gYShsKXtvW2xdPW5bbF0mJmZ1bmN0aW9uKGMpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih1LGgpe2M9bltsXShjKSxzKHUsaCxjLmRvbmUsYy52YWx1ZSl9KX19ZnVuY3Rpb24gcyhsLGMsdSxoKXtQcm9taXNlLnJlc29sdmUoaCkudGhlbihmdW5jdGlvbihmKXtsKHt2YWx1ZTpmLGRvbmU6dX0pfSxjKX19LE5kdD1mdW5jdGlvbihuLGkpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sInJhdyIse3ZhbHVlOml9KTpuLnJhdz1pLG59O3ZhciByPU9iamVjdC5jcmVhdGU/ZnVuY3Rpb24obixpKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6aX0pfTpmdW5jdGlvbihuLGkpe24uZGVmYXVsdD1pfTtEZHQ9ZnVuY3Rpb24obil7aWYobiYmbi5fX2VzTW9kdWxlKXJldHVybiBuO3ZhciBpPXt9O2lmKG4hPW51bGwpZm9yKHZhciBvIGluIG4pbyE9PSJkZWZhdWx0IiYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sbykmJkFJKGksbixvKTtyZXR1cm4gcihpLG4pLGl9LE9kdD1mdW5jdGlvbihuKXtyZXR1cm4gbiYmbi5fX2VzTW9kdWxlP246e2RlZmF1bHQ6bn19LHpkdD1mdW5jdGlvbihuLGksbyxhKXtpZihvPT09ImEiJiYhYSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXIiKTtpZih0eXBlb2YgaT09ImZ1bmN0aW9uIj9uIT09aXx8IWE6IWkuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdCIpO3JldHVybiBvPT09Im0iP2E6bz09PSJhIj9hLmNhbGwobik6YT9hLnZhbHVlOmkuZ2V0KG4pfSxGZHQ9ZnVuY3Rpb24obixpLG8sYSxzKXtpZihhPT09Im0iKXRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZSIpO2lmKGE9PT0iYSImJiFzKXRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlciIpO2lmKHR5cGVvZiBpPT0iZnVuY3Rpb24iP24hPT1pfHwhczohaS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXQiKTtyZXR1cm4gYT09PSJhIj9zLmNhbGwobixvKTpzP3MudmFsdWU9bzppLnNldChuLG8pLG99LEJkdD1mdW5jdGlvbihuLGkpe2lmKGk9PT1udWxsfHx0eXBlb2YgaSE9Im9iamVjdCImJnR5cGVvZiBpIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0Iik7cmV0dXJuIHR5cGVvZiBuPT0iZnVuY3Rpb24iP2k9PT1uOm4uaGFzKGkpfSxlKCJfX2V4dGVuZHMiLG1kdCksZSgiX19hc3NpZ24iLGdkdCksZSgiX19yZXN0IixfZHQpLGUoIl9fZGVjb3JhdGUiLHlkdCksZSgiX19wYXJhbSIsdmR0KSxlKCJfX2VzRGVjb3JhdGUiLHhkdCksZSgiX19ydW5Jbml0aWFsaXplcnMiLGJkdCksZSgiX19wcm9wS2V5Iix3ZHQpLGUoIl9fc2V0RnVuY3Rpb25OYW1lIixTZHQpLGUoIl9fbWV0YWRhdGEiLE1kdCksZSgiX19hd2FpdGVyIixFZHQpLGUoIl9fZ2VuZXJhdG9yIixUZHQpLGUoIl9fZXhwb3J0U3RhciIsQ2R0KSxlKCJfX2NyZWF0ZUJpbmRpbmciLEFJKSxlKCJfX3ZhbHVlcyIsQ0kpLGUoIl9fcmVhZCIsaEcpLGUoIl9fc3ByZWFkIixBZHQpLGUoIl9fc3ByZWFkQXJyYXlzIixQZHQpLGUoIl9fc3ByZWFkQXJyYXkiLElkdCksZSgiX19hd2FpdCIsVHgpLGUoIl9fYXN5bmNHZW5lcmF0b3IiLExkdCksZSgiX19hc3luY0RlbGVnYXRvciIsa2R0KSxlKCJfX2FzeW5jVmFsdWVzIixSZHQpLGUoIl9fbWFrZVRlbXBsYXRlT2JqZWN0IixOZHQpLGUoIl9faW1wb3J0U3RhciIsRGR0KSxlKCJfX2ltcG9ydERlZmF1bHQiLE9kdCksZSgiX19jbGFzc1ByaXZhdGVGaWVsZEdldCIsemR0KSxlKCJfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0IixGZHQpLGUoIl9fY2xhc3NQcml2YXRlRmllbGRJbiIsQmR0KX0pfSk7dmFyIE9lPUgoKFJ4LCRNKT0+eyhmdW5jdGlvbigpe3ZhciBlLHQ9IjQuMTcuMjEiLHI9MjAwLG49IlVuc3VwcG9ydGVkIGNvcmUtanMgdXNlLiBUcnkgaHR0cHM6Ly9ucG1zLmlvL3NlYXJjaD9xPXBvbnlmaWxsLiIsaT0iRXhwZWN0ZWQgYSBmdW5jdGlvbiIsbz0iSW52YWxpZCBgdmFyaWFibGVgIG9wdGlvbiBwYXNzZWQgaW50byBgXy50ZW1wbGF0ZWAiLGE9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iLHM9NTAwLGw9Il9fbG9kYXNoX3BsYWNlaG9sZGVyX18iLGM9MSx1PTIsaD00LGY9MSxwPTIsZD0xLGc9MixfPTQseT04LHg9MTYsYj0zMixTPTY0LEM9MTI4LFA9MjU2LGs9NTEyLE89MzAsRD0iLi4uIixCPTgwMCxJPTE2LEw9MSxSPTIsRj0zLHo9MS8wLFU9OTAwNzE5OTI1NDc0MDk5MSxXPTE3OTc2OTMxMzQ4NjIzMTU3ZTI5MixaPTAvMCxydD00Mjk0OTY3Mjk1LG90PXJ0LTEsc3Q9cnQ+Pj4xLFN0PVtbImFyeSIsQ10sWyJiaW5kIixkXSxbImJpbmRLZXkiLGddLFsiY3VycnkiLHldLFsiY3VycnlSaWdodCIseF0sWyJmbGlwIixrXSxbInBhcnRpYWwiLGJdLFsicGFydGlhbFJpZ2h0IixTXSxbInJlYXJnIixQXV0sYnQ9IltvYmplY3QgQXJndW1lbnRzXSIsTXQ9IltvYmplY3QgQXJyYXldIixsdD0iW29iamVjdCBBc3luY0Z1bmN0aW9uXSIsS3Q9IltvYmplY3QgQm9vbGVhbl0iLF90PSJbb2JqZWN0IERhdGVdIixjdD0iW29iamVjdCBET01FeGNlcHRpb25dIixYPSJbb2JqZWN0IEVycm9yXSIsZXQ9IltvYmplY3QgRnVuY3Rpb25dIixkdD0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLHE9IltvYmplY3QgTWFwXSIscHQ9IltvYmplY3QgTnVtYmVyXSIsaHQ9IltvYmplY3QgTnVsbF0iLHd0PSJbb2JqZWN0IE9iamVjdF0iLGt0PSJbb2JqZWN0IFByb21pc2VdIixpZT0iW29iamVjdCBQcm94eV0iLGVlPSJbb2JqZWN0IFJlZ0V4cF0iLExlPSJbb2JqZWN0IFNldF0iLGFyPSJbb2JqZWN0IFN0cmluZ10iLGZyPSJbb2JqZWN0IFN5bWJvbF0iLHR0PSJbb2JqZWN0IFVuZGVmaW5lZF0iLCQ9IltvYmplY3QgV2Vha01hcF0iLEl0PSJbb2JqZWN0IFdlYWtTZXRdIiwkdD0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLGhlPSJbb2JqZWN0IERhdGFWaWV3XSIsVHQ9IltvYmplY3QgRmxvYXQzMkFycmF5XSIsYmU9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIsbnQ9IltvYmplY3QgSW50OEFycmF5XSIsQ3Q9IltvYmplY3QgSW50MTZBcnJheV0iLFd0PSJbb2JqZWN0IEludDMyQXJyYXldIixmZT0iW29iamVjdCBVaW50OEFycmF5XSIsYXQ9IltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIixzZT0iW29iamVjdCBVaW50MTZBcnJheV0iLFF0PSJbb2JqZWN0IFVpbnQzMkFycmF5XSIsQ2U9L1xiX19wIFwrPSAnJzsvZyxQdD0vXGIoX19wIFwrPSkgJycgXCsvZyxOdD0vKF9fZVwoLio/XCl8XGJfX3RcKSkgXCtcbicnOy9nLHplPS8mKD86YW1wfGx0fGd0fHF1b3R8IzM5KTsvZyx5bj0vWyY8PiInXS9nLFdpPVJlZ0V4cCh6ZS5zb3VyY2UpLEFyPVJlZ0V4cCh5bi5zb3VyY2UpLElhPS88JS0oW1xzXFNdKz8pJT4vZyxobz0vPCUoW1xzXFNdKz8pJT4vZyxMYT0vPCU9KFtcc1xTXSs/KSU+L2csY3g9L1wufFxbKD86W15bXF1dKnwoWyInXSkoPzooPyFcMSlbXlxcXXxcXC4pKj9cMSlcXS8sdW09L15cdyokLyxRMD0vW14uW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/KXwoWyInXSkoKD86KD8hXDIpW15cXF18XFwuKSo/KVwyKVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwkKSkvZyxjbj0vW1xcXiQuKis/KClbXF17fXxdL2csdXg9UmVnRXhwKGNuLnNvdXJjZSksbnA9L15ccysvLEs9L1xzLyxndD0vXHsoPzpcblwvXCogXFt3cmFwcGVkIHdpdGggLitcXSBcKlwvKT9cbj8vLEV0PS9ce1xuXC9cKiBcW3dyYXBwZWQgd2l0aCAoLispXF0gXCovLHh0PS8sPyAmIC8sRnQ9L1teXHgwMC1ceDJmXHgzYS1ceDQwXHg1Yi1ceDYwXHg3Yi1ceDdmXSsvZyxWZT0vWygpPSx7fVxbXF1cL1xzXS8sVWU9L1xcKFxcKT8vZyx0cj0vXCRceyhbXlxcfV0qKD86XFwuW15cXH1dKikqKVx9L2csS2U9L1x3KiQvLFhyPS9eWy0rXTB4WzAtOWEtZl0rJC9pLF9yPS9eMGJbMDFdKyQvaSxQcj0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyxYbj0vXjBvWzAtN10rJC9pLGlwPS9eKD86MHxbMS05XVxkKikkLyxobT0vW1x4YzAtXHhkNlx4ZDgtXHhmNlx4ZjgtXHhmZlx1MDEwMC1cdTAxN2ZdL2csbXI9LygkXikvLEJsPS9bJ1xuXHJcdTIwMjhcdTIwMjlcXF0vZywkbj0iXFx1ZDgwMC1cXHVkZmZmIixIbD0iXFx1MDMwMC1cXHUwMzZmIixoeD0iXFx1ZmUyMC1cXHVmZTJmIixWbD0iXFx1MjBkMC1cXHUyMGZmIixVbD1IbCtoeCtWbCxZaT0iXFx1MjcwMC1cXHUyN2JmIixmbT0iYS16XFx4ZGYtXFx4ZjZcXHhmOC1cXHhmZiIsR3M9IlxceGFjXFx4YjFcXHhkN1xceGY3IixncGU9IlxceDAwLVxceDJmXFx4M2EtXFx4NDBcXHg1Yi1cXHg2MFxceDdiLVxceGJmIixfcGU9IlxcdTIwMDAtXFx1MjA2ZiIseXBlPSIgXFx0XFx4MGJcXGZcXHhhMFxcdWZlZmZcXG5cXHJcXHUyMDI4XFx1MjAyOVxcdTE2ODBcXHUxODBlXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMGFcXHUyMDJmXFx1MjA1ZlxcdTMwMDAiLHFodD0iQS1aXFx4YzAtXFx4ZDZcXHhkOC1cXHhkZSIsR2h0PSJcXHVmZTBlXFx1ZmUwZiIsV2h0PUdzK2dwZStfcGUreXBlLGVxPSJbJ1x1MjAxOV0iLHZwZT0iWyIrJG4rIl0iLFlodD0iWyIrV2h0KyJdIixINj0iWyIrVWwrIl0iLGpodD0iXFxkKyIseHBlPSJbIitZaSsiXSIsWGh0PSJbIitmbSsiXSIsJGh0PSJbXiIrJG4rV2h0K2podCtZaStmbStxaHQrIl0iLHJxPSJcXHVkODNjW1xcdWRmZmItXFx1ZGZmZl0iLGJwZT0iKD86IitINisifCIrcnErIikiLEtodD0iW14iKyRuKyJdIixucT0iKD86XFx1ZDgzY1tcXHVkZGU2LVxcdWRkZmZdKXsyfSIsaXE9IltcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl0iLGZ4PSJbIitxaHQrIl0iLFpodD0iXFx1MjAwZCIsSmh0PSIoPzoiK1hodCsifCIrJGh0KyIpIix3cGU9Iig/OiIrZngrInwiKyRodCsiKSIsUWh0PSIoPzoiK2VxKyIoPzpkfGxsfG18cmV8c3x0fHZlKSk/Iix0ZnQ9Iig/OiIrZXErIig/OkR8TEx8TXxSRXxTfFR8VkUpKT8iLGVmdD1icGUrIj8iLHJmdD0iWyIrR2h0KyJdPyIsU3BlPSIoPzoiK1podCsiKD86IitbS2h0LG5xLGlxXS5qb2luKCJ8IikrIikiK3JmdCtlZnQrIikqIixNcGU9IlxcZCooPzoxc3R8Mm5kfDNyZHwoPyFbMTIzXSlcXGR0aCkoPz1cXGJ8W0EtWl9dKSIsRXBlPSJcXGQqKD86MVNUfDJORHwzUkR8KD8hWzEyM10pXFxkVEgpKD89XFxifFthLXpfXSkiLG5mdD1yZnQrZWZ0K1NwZSxUcGU9Iig/OiIrW3hwZSxucSxpcV0uam9pbigifCIpKyIpIituZnQsQ3BlPSIoPzoiK1tLaHQrSDYrIj8iLEg2LG5xLGlxLHZwZV0uam9pbigifCIpKyIpIixBcGU9UmVnRXhwKGVxLCJnIiksUHBlPVJlZ0V4cChINiwiZyIpLG9xPVJlZ0V4cChycSsiKD89IitycSsiKXwiK0NwZStuZnQsImciKSxJcGU9UmVnRXhwKFtmeCsiPyIrWGh0KyIrIitRaHQrIig/PSIrW1lodCxmeCwiJCJdLmpvaW4oInwiKSsiKSIsd3BlKyIrIit0ZnQrIig/PSIrW1lodCxmeCtKaHQsIiQiXS5qb2luKCJ8IikrIikiLGZ4KyI/IitKaHQrIisiK1FodCxmeCsiKyIrdGZ0LEVwZSxNcGUsamh0LFRwZV0uam9pbigifCIpLCJnIiksTHBlPVJlZ0V4cCgiWyIrWmh0KyRuK1VsK0dodCsiXSIpLGtwZT0vW2Etel1bQS1aXXxbQS1aXXsyfVthLXpdfFswLTldW2EtekEtWl18W2EtekEtWl1bMC05XXxbXmEtekEtWjAtOSBdLyxScGU9WyJBcnJheSIsIkJ1ZmZlciIsIkRhdGFWaWV3IiwiRGF0ZSIsIkVycm9yIiwiRmxvYXQzMkFycmF5IiwiRmxvYXQ2NEFycmF5IiwiRnVuY3Rpb24iLCJJbnQ4QXJyYXkiLCJJbnQxNkFycmF5IiwiSW50MzJBcnJheSIsIk1hcCIsIk1hdGgiLCJPYmplY3QiLCJQcm9taXNlIiwiUmVnRXhwIiwiU2V0IiwiU3RyaW5nIiwiU3ltYm9sIiwiVHlwZUVycm9yIiwiVWludDhBcnJheSIsIlVpbnQ4Q2xhbXBlZEFycmF5IiwiVWludDE2QXJyYXkiLCJVaW50MzJBcnJheSIsIldlYWtNYXAiLCJfIiwiY2xlYXJUaW1lb3V0IiwiaXNGaW5pdGUiLCJwYXJzZUludCIsInNldFRpbWVvdXQiXSxOcGU9LTEsUm49e307Um5bVHRdPVJuW2JlXT1SbltudF09Um5bQ3RdPVJuW1d0XT1SbltmZV09Um5bYXRdPVJuW3NlXT1SbltRdF09ITAsUm5bYnRdPVJuW010XT1SblskdF09Um5bS3RdPVJuW2hlXT1SbltfdF09Um5bWF09Um5bZXRdPVJuW3FdPVJuW3B0XT1Sblt3dF09Um5bZWVdPVJuW0xlXT1Sblthcl09Um5bJF09ITE7dmFyIFRuPXt9O1RuW2J0XT1UbltNdF09VG5bJHRdPVRuW2hlXT1UbltLdF09VG5bX3RdPVRuW1R0XT1UbltiZV09VG5bbnRdPVRuW0N0XT1UbltXdF09VG5bcV09VG5bcHRdPVRuW3d0XT1UbltlZV09VG5bTGVdPVRuW2FyXT1Ubltmcl09VG5bZmVdPVRuW2F0XT1UbltzZV09VG5bUXRdPSEwLFRuW1hdPVRuW2V0XT1UblskXT0hMTt2YXIgRHBlPXtcdTAwQzA6IkEiLFx1MDBDMToiQSIsXHUwMEMyOiJBIixcdTAwQzM6IkEiLFx1MDBDNDoiQSIsXHUwMEM1OiJBIixcdTAwRTA6ImEiLFx1MDBFMToiYSIsXHUwMEUyOiJhIixcdTAwRTM6ImEiLFx1MDBFNDoiYSIsXHUwMEU1OiJhIixcdTAwQzc6IkMiLFx1MDBFNzoiYyIsXHUwMEQwOiJEIixcdTAwRjA6ImQiLFx1MDBDODoiRSIsXHUwMEM5OiJFIixcdTAwQ0E6IkUiLFx1MDBDQjoiRSIsXHUwMEU4OiJlIixcdTAwRTk6ImUiLFx1MDBFQToiZSIsXHUwMEVCOiJlIixcdTAwQ0M6IkkiLFx1MDBDRDoiSSIsXHUwMENFOiJJIixcdTAwQ0Y6IkkiLFx1MDBFQzoiaSIsXHUwMEVEOiJpIixcdTAwRUU6ImkiLFx1MDBFRjoiaSIsXHUwMEQxOiJOIixcdTAwRjE6Im4iLFx1MDBEMjoiTyIsXHUwMEQzOiJPIixcdTAwRDQ6Ik8iLFx1MDBENToiTyIsXHUwMEQ2OiJPIixcdTAwRDg6Ik8iLFx1MDBGMjoibyIsXHUwMEYzOiJvIixcdTAwRjQ6Im8iLFx1MDBGNToibyIsXHUwMEY2OiJvIixcdTAwRjg6Im8iLFx1MDBEOToiVSIsXHUwMERBOiJVIixcdTAwREI6IlUiLFx1MDBEQzoiVSIsXHUwMEY5OiJ1IixcdTAwRkE6InUiLFx1MDBGQjoidSIsXHUwMEZDOiJ1IixcdTAwREQ6IlkiLFx1MDBGRDoieSIsXHUwMEZGOiJ5IixcdTAwQzY6IkFlIixcdTAwRTY6ImFlIixcdTAwREU6IlRoIixcdTAwRkU6InRoIixcdTAwREY6InNzIixcdTAxMDA6IkEiLFx1MDEwMjoiQSIsXHUwMTA0OiJBIixcdTAxMDE6ImEiLFx1MDEwMzoiYSIsXHUwMTA1OiJhIixcdTAxMDY6IkMiLFx1MDEwODoiQyIsXHUwMTBBOiJDIixcdTAxMEM6IkMiLFx1MDEwNzoiYyIsXHUwMTA5OiJjIixcdTAxMEI6ImMiLFx1MDEwRDoiYyIsXHUwMTBFOiJEIixcdTAxMTA6IkQiLFx1MDEwRjoiZCIsXHUwMTExOiJkIixcdTAxMTI6IkUiLFx1MDExNDoiRSIsXHUwMTE2OiJFIixcdTAxMTg6IkUiLFx1MDExQToiRSIsXHUwMTEzOiJlIixcdTAxMTU6ImUiLFx1MDExNzoiZSIsXHUwMTE5OiJlIixcdTAxMUI6ImUiLFx1MDExQzoiRyIsXHUwMTFFOiJHIixcdTAxMjA6IkciLFx1MDEyMjoiRyIsXHUwMTFEOiJnIixcdTAxMUY6ImciLFx1MDEyMToiZyIsXHUwMTIzOiJnIixcdTAxMjQ6IkgiLFx1MDEyNjoiSCIsXHUwMTI1OiJoIixcdTAxMjc6ImgiLFx1MDEyODoiSSIsXHUwMTJBOiJJIixcdTAxMkM6IkkiLFx1MDEyRToiSSIsXHUwMTMwOiJJIixcdTAxMjk6ImkiLFx1MDEyQjoiaSIsXHUwMTJEOiJpIixcdTAxMkY6ImkiLFx1MDEzMToiaSIsXHUwMTM0OiJKIixcdTAxMzU6ImoiLFx1MDEzNjoiSyIsXHUwMTM3OiJrIixcdTAxMzg6ImsiLFx1MDEzOToiTCIsXHUwMTNCOiJMIixcdTAxM0Q6IkwiLFx1MDEzRjoiTCIsXHUwMTQxOiJMIixcdTAxM0E6ImwiLFx1MDEzQzoibCIsXHUwMTNFOiJsIixcdTAxNDA6ImwiLFx1MDE0MjoibCIsXHUwMTQzOiJOIixcdTAxNDU6Ik4iLFx1MDE0NzoiTiIsXHUwMTRBOiJOIixcdTAxNDQ6Im4iLFx1MDE0NjoibiIsXHUwMTQ4OiJuIixcdTAxNEI6Im4iLFx1MDE0QzoiTyIsXHUwMTRFOiJPIixcdTAxNTA6Ik8iLFx1MDE0RDoibyIsXHUwMTRGOiJvIixcdTAxNTE6Im8iLFx1MDE1NDoiUiIsXHUwMTU2OiJSIixcdTAxNTg6IlIiLFx1MDE1NToiciIsXHUwMTU3OiJyIixcdTAxNTk6InIiLFx1MDE1QToiUyIsXHUwMTVDOiJTIixcdTAxNUU6IlMiLFx1MDE2MDoiUyIsXHUwMTVCOiJzIixcdTAxNUQ6InMiLFx1MDE1RjoicyIsXHUwMTYxOiJzIixcdTAxNjI6IlQiLFx1MDE2NDoiVCIsXHUwMTY2OiJUIixcdTAxNjM6InQiLFx1MDE2NToidCIsXHUwMTY3OiJ0IixcdTAxNjg6IlUiLFx1MDE2QToiVSIsXHUwMTZDOiJVIixcdTAxNkU6IlUiLFx1MDE3MDoiVSIsXHUwMTcyOiJVIixcdTAxNjk6InUiLFx1MDE2QjoidSIsXHUwMTZEOiJ1IixcdTAxNkY6InUiLFx1MDE3MToidSIsXHUwMTczOiJ1IixcdTAxNzQ6IlciLFx1MDE3NToidyIsXHUwMTc2OiJZIixcdTAxNzc6InkiLFx1MDE3ODoiWSIsXHUwMTc5OiJaIixcdTAxN0I6IloiLFx1MDE3RDoiWiIsXHUwMTdBOiJ6IixcdTAxN0M6InoiLFx1MDE3RToieiIsXHUwMTMyOiJJSiIsXHUwMTMzOiJpaiIsXHUwMTUyOiJPZSIsXHUwMTUzOiJvZSIsXHUwMTQ5OiInbiIsXHUwMTdGOiJzIn0sT3BlPXsiJiI6IiZhbXA7IiwiPCI6IiZsdDsiLCI+IjoiJmd0OyIsJyInOiImcXVvdDsiLCInIjoiJiMzOTsifSx6cGU9eyImYW1wOyI6IiYiLCImbHQ7IjoiPCIsIiZndDsiOiI+IiwiJnF1b3Q7IjonIicsIiYjMzk7IjoiJyJ9LEZwZT17IlxcIjoiXFwiLCInIjoiJyIsIlxuIjoibiIsIlxyIjoiciIsIlx1MjAyOCI6InUyMDI4IiwiXHUyMDI5IjoidTIwMjkifSxCcGU9cGFyc2VGbG9hdCxIcGU9cGFyc2VJbnQsaWZ0PXR5cGVvZiBnbG9iYWw9PSJvYmplY3QiJiZnbG9iYWwmJmdsb2JhbC5PYmplY3Q9PT1PYmplY3QmJmdsb2JhbCxWcGU9dHlwZW9mIHNlbGY9PSJvYmplY3QiJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixmbz1pZnR8fFZwZXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxhcT10eXBlb2YgUng9PSJvYmplY3QiJiZSeCYmIVJ4Lm5vZGVUeXBlJiZSeCx0Xz1hcSYmdHlwZW9mICRNPT0ib2JqZWN0IiYmJE0mJiEkTS5ub2RlVHlwZSYmJE0sb2Z0PXRfJiZ0Xy5leHBvcnRzPT09YXEsc3E9b2Z0JiZpZnQucHJvY2VzcyxxbD1mdW5jdGlvbigpe3RyeXt2YXIgdXQ9dF8mJnRfLnJlcXVpcmUmJnRfLnJlcXVpcmUoInV0aWwiKS50eXBlcztyZXR1cm4gdXR8fHNxJiZzcS5iaW5kaW5nJiZzcS5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2goQXQpe319KCksYWZ0PXFsJiZxbC5pc0FycmF5QnVmZmVyLHNmdD1xbCYmcWwuaXNEYXRlLGxmdD1xbCYmcWwuaXNNYXAsY2Z0PXFsJiZxbC5pc1JlZ0V4cCx1ZnQ9cWwmJnFsLmlzU2V0LGhmdD1xbCYmcWwuaXNUeXBlZEFycmF5O2Z1bmN0aW9uIFdzKHV0LEF0LHZ0KXtzd2l0Y2godnQubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIHV0LmNhbGwoQXQpO2Nhc2UgMTpyZXR1cm4gdXQuY2FsbChBdCx2dFswXSk7Y2FzZSAyOnJldHVybiB1dC5jYWxsKEF0LHZ0WzBdLHZ0WzFdKTtjYXNlIDM6cmV0dXJuIHV0LmNhbGwoQXQsdnRbMF0sdnRbMV0sdnRbMl0pfXJldHVybiB1dC5hcHBseShBdCx2dCl9ZnVuY3Rpb24gVXBlKHV0LEF0LHZ0LGdlKXtmb3IodmFyIFdlPS0xLCRyPXV0PT1udWxsPzA6dXQubGVuZ3RoOysrV2U8JHI7KXt2YXIgamk9dXRbV2VdO0F0KGdlLGppLHZ0KGppKSx1dCl9cmV0dXJuIGdlfWZ1bmN0aW9uIEdsKHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPXV0PT1udWxsPzA6dXQubGVuZ3RoOysrdnQ8Z2UmJkF0KHV0W3Z0XSx2dCx1dCkhPT0hMTspO3JldHVybiB1dH1mdW5jdGlvbiBxcGUodXQsQXQpe2Zvcih2YXIgdnQ9dXQ9PW51bGw/MDp1dC5sZW5ndGg7dnQtLSYmQXQodXRbdnRdLHZ0LHV0KSE9PSExOyk7cmV0dXJuIHV0fWZ1bmN0aW9uIGZmdCh1dCxBdCl7Zm9yKHZhciB2dD0tMSxnZT11dD09bnVsbD8wOnV0Lmxlbmd0aDsrK3Z0PGdlOylpZighQXQodXRbdnRdLHZ0LHV0KSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBwbSh1dCxBdCl7Zm9yKHZhciB2dD0tMSxnZT11dD09bnVsbD8wOnV0Lmxlbmd0aCxXZT0wLCRyPVtdOysrdnQ8Z2U7KXt2YXIgamk9dXRbdnRdO0F0KGppLHZ0LHV0KSYmKCRyW1dlKytdPWppKX1yZXR1cm4gJHJ9ZnVuY3Rpb24gVjYodXQsQXQpe3ZhciB2dD11dD09bnVsbD8wOnV0Lmxlbmd0aDtyZXR1cm4hIXZ0JiZweCh1dCxBdCwwKT4tMX1mdW5jdGlvbiBscSh1dCxBdCx2dCl7Zm9yKHZhciBnZT0tMSxXZT11dD09bnVsbD8wOnV0Lmxlbmd0aDsrK2dlPFdlOylpZih2dChBdCx1dFtnZV0pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEtuKHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPXV0PT1udWxsPzA6dXQubGVuZ3RoLFdlPUFycmF5KGdlKTsrK3Z0PGdlOylXZVt2dF09QXQodXRbdnRdLHZ0LHV0KTtyZXR1cm4gV2V9ZnVuY3Rpb24gZG0odXQsQXQpe2Zvcih2YXIgdnQ9LTEsZ2U9QXQubGVuZ3RoLFdlPXV0Lmxlbmd0aDsrK3Z0PGdlOyl1dFtXZSt2dF09QXRbdnRdO3JldHVybiB1dH1mdW5jdGlvbiBjcSh1dCxBdCx2dCxnZSl7dmFyIFdlPS0xLCRyPXV0PT1udWxsPzA6dXQubGVuZ3RoO2ZvcihnZSYmJHImJih2dD11dFsrK1dlXSk7KytXZTwkcjspdnQ9QXQodnQsdXRbV2VdLFdlLHV0KTtyZXR1cm4gdnR9ZnVuY3Rpb24gR3BlKHV0LEF0LHZ0LGdlKXt2YXIgV2U9dXQ9PW51bGw/MDp1dC5sZW5ndGg7Zm9yKGdlJiZXZSYmKHZ0PXV0Wy0tV2VdKTtXZS0tOyl2dD1BdCh2dCx1dFtXZV0sV2UsdXQpO3JldHVybiB2dH1mdW5jdGlvbiB1cSh1dCxBdCl7Zm9yKHZhciB2dD0tMSxnZT11dD09bnVsbD8wOnV0Lmxlbmd0aDsrK3Z0PGdlOylpZihBdCh1dFt2dF0sdnQsdXQpKXJldHVybiEwO3JldHVybiExfXZhciBXcGU9aHEoImxlbmd0aCIpO2Z1bmN0aW9uIFlwZSh1dCl7cmV0dXJuIHV0LnNwbGl0KCIiKX1mdW5jdGlvbiBqcGUodXQpe3JldHVybiB1dC5tYXRjaChGdCl8fFtdfWZ1bmN0aW9uIHBmdCh1dCxBdCx2dCl7dmFyIGdlO3JldHVybiB2dCh1dCxmdW5jdGlvbihXZSwkcixqaSl7aWYoQXQoV2UsJHIsamkpKXJldHVybiBnZT0kciwhMX0pLGdlfWZ1bmN0aW9uIFU2KHV0LEF0LHZ0LGdlKXtmb3IodmFyIFdlPXV0Lmxlbmd0aCwkcj12dCsoZ2U/MTotMSk7Z2U/JHItLTorKyRyPFdlOylpZihBdCh1dFskcl0sJHIsdXQpKXJldHVybiAkcjtyZXR1cm4tMX1mdW5jdGlvbiBweCh1dCxBdCx2dCl7cmV0dXJuIEF0PT09QXQ/b2RlKHV0LEF0LHZ0KTpVNih1dCxkZnQsdnQpfWZ1bmN0aW9uIFhwZSh1dCxBdCx2dCxnZSl7Zm9yKHZhciBXZT12dC0xLCRyPXV0Lmxlbmd0aDsrK1dlPCRyOylpZihnZSh1dFtXZV0sQXQpKXJldHVybiBXZTtyZXR1cm4tMX1mdW5jdGlvbiBkZnQodXQpe3JldHVybiB1dCE9PXV0fWZ1bmN0aW9uIG1mdCh1dCxBdCl7dmFyIHZ0PXV0PT1udWxsPzA6dXQubGVuZ3RoO3JldHVybiB2dD9wcSh1dCxBdCkvdnQ6Wn1mdW5jdGlvbiBocSh1dCl7cmV0dXJuIGZ1bmN0aW9uKEF0KXtyZXR1cm4gQXQ9PW51bGw/ZTpBdFt1dF19fWZ1bmN0aW9uIGZxKHV0KXtyZXR1cm4gZnVuY3Rpb24oQXQpe3JldHVybiB1dD09bnVsbD9lOnV0W0F0XX19ZnVuY3Rpb24gZ2Z0KHV0LEF0LHZ0LGdlLFdlKXtyZXR1cm4gV2UodXQsZnVuY3Rpb24oJHIsamksdm4pe3Z0PWdlPyhnZT0hMSwkcik6QXQodnQsJHIsamksdm4pfSksdnR9ZnVuY3Rpb24gJHBlKHV0LEF0KXt2YXIgdnQ9dXQubGVuZ3RoO2Zvcih1dC5zb3J0KEF0KTt2dC0tOyl1dFt2dF09dXRbdnRdLnZhbHVlO3JldHVybiB1dH1mdW5jdGlvbiBwcSh1dCxBdCl7Zm9yKHZhciB2dCxnZT0tMSxXZT11dC5sZW5ndGg7KytnZTxXZTspe3ZhciAkcj1BdCh1dFtnZV0pOyRyIT09ZSYmKHZ0PXZ0PT09ZT8kcjp2dCskcil9cmV0dXJuIHZ0fWZ1bmN0aW9uIGRxKHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPUFycmF5KHV0KTsrK3Z0PHV0OylnZVt2dF09QXQodnQpO3JldHVybiBnZX1mdW5jdGlvbiBLcGUodXQsQXQpe3JldHVybiBLbihBdCxmdW5jdGlvbih2dCl7cmV0dXJuW3Z0LHV0W3Z0XV19KX1mdW5jdGlvbiBfZnQodXQpe3JldHVybiB1dCYmdXQuc2xpY2UoMCxiZnQodXQpKzEpLnJlcGxhY2UobnAsIiIpfWZ1bmN0aW9uIFlzKHV0KXtyZXR1cm4gZnVuY3Rpb24oQXQpe3JldHVybiB1dChBdCl9fWZ1bmN0aW9uIG1xKHV0LEF0KXtyZXR1cm4gS24oQXQsZnVuY3Rpb24odnQpe3JldHVybiB1dFt2dF19KX1mdW5jdGlvbiBNTSh1dCxBdCl7cmV0dXJuIHV0LmhhcyhBdCl9ZnVuY3Rpb24geWZ0KHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPXV0Lmxlbmd0aDsrK3Z0PGdlJiZweChBdCx1dFt2dF0sMCk+LTE7KTtyZXR1cm4gdnR9ZnVuY3Rpb24gdmZ0KHV0LEF0KXtmb3IodmFyIHZ0PXV0Lmxlbmd0aDt2dC0tJiZweChBdCx1dFt2dF0sMCk+LTE7KTtyZXR1cm4gdnR9ZnVuY3Rpb24gWnBlKHV0LEF0KXtmb3IodmFyIHZ0PXV0Lmxlbmd0aCxnZT0wO3Z0LS07KXV0W3Z0XT09PUF0JiYrK2dlO3JldHVybiBnZX12YXIgSnBlPWZxKERwZSksUXBlPWZxKE9wZSk7ZnVuY3Rpb24gdGRlKHV0KXtyZXR1cm4iXFwiK0ZwZVt1dF19ZnVuY3Rpb24gZWRlKHV0LEF0KXtyZXR1cm4gdXQ9PW51bGw/ZTp1dFtBdF19ZnVuY3Rpb24gZHgodXQpe3JldHVybiBMcGUudGVzdCh1dCl9ZnVuY3Rpb24gcmRlKHV0KXtyZXR1cm4ga3BlLnRlc3QodXQpfWZ1bmN0aW9uIG5kZSh1dCl7Zm9yKHZhciBBdCx2dD1bXTshKEF0PXV0Lm5leHQoKSkuZG9uZTspdnQucHVzaChBdC52YWx1ZSk7cmV0dXJuIHZ0fWZ1bmN0aW9uIGdxKHV0KXt2YXIgQXQ9LTEsdnQ9QXJyYXkodXQuc2l6ZSk7cmV0dXJuIHV0LmZvckVhY2goZnVuY3Rpb24oZ2UsV2Upe3Z0WysrQXRdPVtXZSxnZV19KSx2dH1mdW5jdGlvbiB4ZnQodXQsQXQpe3JldHVybiBmdW5jdGlvbih2dCl7cmV0dXJuIHV0KEF0KHZ0KSl9fWZ1bmN0aW9uIG1tKHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPXV0Lmxlbmd0aCxXZT0wLCRyPVtdOysrdnQ8Z2U7KXt2YXIgamk9dXRbdnRdOyhqaT09PUF0fHxqaT09PWwpJiYodXRbdnRdPWwsJHJbV2UrK109dnQpfXJldHVybiAkcn1mdW5jdGlvbiBxNih1dCl7dmFyIEF0PS0xLHZ0PUFycmF5KHV0LnNpemUpO3JldHVybiB1dC5mb3JFYWNoKGZ1bmN0aW9uKGdlKXt2dFsrK0F0XT1nZX0pLHZ0fWZ1bmN0aW9uIGlkZSh1dCl7dmFyIEF0PS0xLHZ0PUFycmF5KHV0LnNpemUpO3JldHVybiB1dC5mb3JFYWNoKGZ1bmN0aW9uKGdlKXt2dFsrK0F0XT1bZ2UsZ2VdfSksdnR9ZnVuY3Rpb24gb2RlKHV0LEF0LHZ0KXtmb3IodmFyIGdlPXZ0LTEsV2U9dXQubGVuZ3RoOysrZ2U8V2U7KWlmKHV0W2dlXT09PUF0KXJldHVybiBnZTtyZXR1cm4tMX1mdW5jdGlvbiBhZGUodXQsQXQsdnQpe2Zvcih2YXIgZ2U9dnQrMTtnZS0tOylpZih1dFtnZV09PT1BdClyZXR1cm4gZ2U7cmV0dXJuIGdlfWZ1bmN0aW9uIG14KHV0KXtyZXR1cm4gZHgodXQpP2xkZSh1dCk6V3BlKHV0KX1mdW5jdGlvbiB0dSh1dCl7cmV0dXJuIGR4KHV0KT9jZGUodXQpOllwZSh1dCl9ZnVuY3Rpb24gYmZ0KHV0KXtmb3IodmFyIEF0PXV0Lmxlbmd0aDtBdC0tJiZLLnRlc3QodXQuY2hhckF0KEF0KSk7KTtyZXR1cm4gQXR9dmFyIHNkZT1mcSh6cGUpO2Z1bmN0aW9uIGxkZSh1dCl7Zm9yKHZhciBBdD1vcS5sYXN0SW5kZXg9MDtvcS50ZXN0KHV0KTspKytBdDtyZXR1cm4gQXR9ZnVuY3Rpb24gY2RlKHV0KXtyZXR1cm4gdXQubWF0Y2gob3EpfHxbXX1mdW5jdGlvbiB1ZGUodXQpe3JldHVybiB1dC5tYXRjaChJcGUpfHxbXX12YXIgaGRlPWZ1bmN0aW9uIHV0KEF0KXtBdD1BdD09bnVsbD9mbzpnbS5kZWZhdWx0cyhmby5PYmplY3QoKSxBdCxnbS5waWNrKGZvLFJwZSkpO3ZhciB2dD1BdC5BcnJheSxnZT1BdC5EYXRlLFdlPUF0LkVycm9yLCRyPUF0LkZ1bmN0aW9uLGppPUF0Lk1hdGgsdm49QXQuT2JqZWN0LF9xPUF0LlJlZ0V4cCxmZGU9QXQuU3RyaW5nLFdsPUF0LlR5cGVFcnJvcixHNj12dC5wcm90b3R5cGUscGRlPSRyLnByb3RvdHlwZSxneD12bi5wcm90b3R5cGUsVzY9QXRbIl9fY29yZS1qc19zaGFyZWRfXyJdLFk2PXBkZS50b1N0cmluZyx1bj1neC5oYXNPd25Qcm9wZXJ0eSxkZGU9MCx3ZnQ9ZnVuY3Rpb24oKXt2YXIgbT0vW14uXSskLy5leGVjKFc2JiZXNi5rZXlzJiZXNi5rZXlzLklFX1BST1RPfHwiIik7cmV0dXJuIG0/IlN5bWJvbChzcmMpXzEuIittOiIifSgpLGo2PWd4LnRvU3RyaW5nLG1kZT1ZNi5jYWxsKHZuKSxnZGU9Zm8uXyxfZGU9X3EoIl4iK1k2LmNhbGwodW4pLnJlcGxhY2UoY24sIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIiksWDY9b2Z0P0F0LkJ1ZmZlcjplLF9tPUF0LlN5bWJvbCwkNj1BdC5VaW50OEFycmF5LFNmdD1YNj9YNi5hbGxvY1Vuc2FmZTplLEs2PXhmdCh2bi5nZXRQcm90b3R5cGVPZix2biksTWZ0PXZuLmNyZWF0ZSxFZnQ9Z3gucHJvcGVydHlJc0VudW1lcmFibGUsWjY9RzYuc3BsaWNlLFRmdD1fbT9fbS5pc0NvbmNhdFNwcmVhZGFibGU6ZSxFTT1fbT9fbS5pdGVyYXRvcjplLGVfPV9tP19tLnRvU3RyaW5nVGFnOmUsSjY9ZnVuY3Rpb24oKXt0cnl7dmFyIG09YV8odm4sImRlZmluZVByb3BlcnR5Iik7cmV0dXJuIG0oe30sIiIse30pLG19Y2F0Y2godil7fX0oKSx5ZGU9QXQuY2xlYXJUaW1lb3V0IT09Zm8uY2xlYXJUaW1lb3V0JiZBdC5jbGVhclRpbWVvdXQsdmRlPWdlJiZnZS5ub3chPT1mby5EYXRlLm5vdyYmZ2Uubm93LHhkZT1BdC5zZXRUaW1lb3V0IT09Zm8uc2V0VGltZW91dCYmQXQuc2V0VGltZW91dCxRNj1qaS5jZWlsLHRJPWppLmZsb29yLHlxPXZuLmdldE93blByb3BlcnR5U3ltYm9scyxiZGU9WDY/WDYuaXNCdWZmZXI6ZSxDZnQ9QXQuaXNGaW5pdGUsd2RlPUc2LmpvaW4sU2RlPXhmdCh2bi5rZXlzLHZuKSxYaT1qaS5tYXgscmE9amkubWluLE1kZT1nZS5ub3csRWRlPUF0LnBhcnNlSW50LEFmdD1qaS5yYW5kb20sVGRlPUc2LnJldmVyc2UsdnE9YV8oQXQsIkRhdGFWaWV3IiksVE09YV8oQXQsIk1hcCIpLHhxPWFfKEF0LCJQcm9taXNlIiksX3g9YV8oQXQsIlNldCIpLENNPWFfKEF0LCJXZWFrTWFwIiksQU09YV8odm4sImNyZWF0ZSIpLGVJPUNNJiZuZXcgQ00seXg9e30sQ2RlPXNfKHZxKSxBZGU9c18oVE0pLFBkZT1zXyh4cSksSWRlPXNfKF94KSxMZGU9c18oQ00pLHJJPV9tP19tLnByb3RvdHlwZTplLFBNPXJJP3JJLnZhbHVlT2Y6ZSxQZnQ9ckk/ckkudG9TdHJpbmc6ZTtmdW5jdGlvbiBHKG0pe2lmKHNpKG0pJiYhJGUobSkmJiEobSBpbnN0YW5jZW9mIGdyKSl7aWYobSBpbnN0YW5jZW9mIFlsKXJldHVybiBtO2lmKHVuLmNhbGwobSwiX193cmFwcGVkX18iKSlyZXR1cm4gSXB0KG0pfXJldHVybiBuZXcgWWwobSl9dmFyIHZ4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbSgpe31yZXR1cm4gZnVuY3Rpb24odil7aWYoIWVpKHYpKXJldHVybnt9O2lmKE1mdClyZXR1cm4gTWZ0KHYpO20ucHJvdG90eXBlPXY7dmFyIFQ9bmV3IG07cmV0dXJuIG0ucHJvdG90eXBlPWUsVH19KCk7ZnVuY3Rpb24gbkkoKXt9ZnVuY3Rpb24gWWwobSx2KXt0aGlzLl9fd3JhcHBlZF9fPW0sdGhpcy5fX2FjdGlvbnNfXz1bXSx0aGlzLl9fY2hhaW5fXz0hIXYsdGhpcy5fX2luZGV4X189MCx0aGlzLl9fdmFsdWVzX189ZX1HLnRlbXBsYXRlU2V0dGluZ3M9e2VzY2FwZTpJYSxldmFsdWF0ZTpobyxpbnRlcnBvbGF0ZTpMYSx2YXJpYWJsZToiIixpbXBvcnRzOntfOkd9fSxHLnByb3RvdHlwZT1uSS5wcm90b3R5cGUsRy5wcm90b3R5cGUuY29uc3RydWN0b3I9RyxZbC5wcm90b3R5cGU9dngobkkucHJvdG90eXBlKSxZbC5wcm90b3R5cGUuY29uc3RydWN0b3I9WWw7ZnVuY3Rpb24gZ3IobSl7dGhpcy5fX3dyYXBwZWRfXz1tLHRoaXMuX19hY3Rpb25zX189W10sdGhpcy5fX2Rpcl9fPTEsdGhpcy5fX2ZpbHRlcmVkX189ITEsdGhpcy5fX2l0ZXJhdGVlc19fPVtdLHRoaXMuX190YWtlQ291bnRfXz1ydCx0aGlzLl9fdmlld3NfXz1bXX1mdW5jdGlvbiBrZGUoKXt2YXIgbT1uZXcgZ3IodGhpcy5fX3dyYXBwZWRfXyk7cmV0dXJuIG0uX19hY3Rpb25zX189ZHModGhpcy5fX2FjdGlvbnNfXyksbS5fX2Rpcl9fPXRoaXMuX19kaXJfXyxtLl9fZmlsdGVyZWRfXz10aGlzLl9fZmlsdGVyZWRfXyxtLl9faXRlcmF0ZWVzX189ZHModGhpcy5fX2l0ZXJhdGVlc19fKSxtLl9fdGFrZUNvdW50X189dGhpcy5fX3Rha2VDb3VudF9fLG0uX192aWV3c19fPWRzKHRoaXMuX192aWV3c19fKSxtfWZ1bmN0aW9uIFJkZSgpe2lmKHRoaXMuX19maWx0ZXJlZF9fKXt2YXIgbT1uZXcgZ3IodGhpcyk7bS5fX2Rpcl9fPS0xLG0uX19maWx0ZXJlZF9fPSEwfWVsc2UgbT10aGlzLmNsb25lKCksbS5fX2Rpcl9fKj0tMTtyZXR1cm4gbX1mdW5jdGlvbiBOZGUoKXt2YXIgbT10aGlzLl9fd3JhcHBlZF9fLnZhbHVlKCksdj10aGlzLl9fZGlyX18sVD0kZShtKSxOPXY8MCxWPVQ/bS5sZW5ndGg6MCxZPVltZSgwLFYsdGhpcy5fX3ZpZXdzX18pLEo9WS5zdGFydCxpdD1ZLmVuZCxmdD1pdC1KLER0PU4/aXQ6Si0xLE90PXRoaXMuX19pdGVyYXRlZXNfXyxWdD1PdC5sZW5ndGgsb2U9MCxUZT1yYShmdCx0aGlzLl9fdGFrZUNvdW50X18pO2lmKCFUfHwhTiYmVj09ZnQmJlRlPT1mdClyZXR1cm4gUWZ0KG0sdGhpcy5fX2FjdGlvbnNfXyk7dmFyIE5lPVtdO3Q6Zm9yKDtmdC0tJiZvZTxUZTspe0R0Kz12O2Zvcih2YXIgZXI9LTEsRGU9bVtEdF07KytlcjxWdDspe3ZhciBwcj1PdFtlcl0seXI9cHIuaXRlcmF0ZWUsJHM9cHIudHlwZSxOYT15cihEZSk7aWYoJHM9PVIpRGU9TmE7ZWxzZSBpZighTmEpe2lmKCRzPT1MKWNvbnRpbnVlIHQ7YnJlYWsgdH19TmVbb2UrK109RGV9cmV0dXJuIE5lfWdyLnByb3RvdHlwZT12eChuSS5wcm90b3R5cGUpLGdyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1ncjtmdW5jdGlvbiByXyhtKXt2YXIgdj0tMSxUPW09PW51bGw/MDptLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdjxUOyl7dmFyIE49bVt2XTt0aGlzLnNldChOWzBdLE5bMV0pfX1mdW5jdGlvbiBEZGUoKXt0aGlzLl9fZGF0YV9fPUFNP0FNKG51bGwpOnt9LHRoaXMuc2l6ZT0wfWZ1bmN0aW9uIE9kZShtKXt2YXIgdj10aGlzLmhhcyhtKSYmZGVsZXRlIHRoaXMuX19kYXRhX19bbV07cmV0dXJuIHRoaXMuc2l6ZS09dj8xOjAsdn1mdW5jdGlvbiB6ZGUobSl7dmFyIHY9dGhpcy5fX2RhdGFfXztpZihBTSl7dmFyIFQ9dlttXTtyZXR1cm4gVD09PWE/ZTpUfXJldHVybiB1bi5jYWxsKHYsbSk/dlttXTplfWZ1bmN0aW9uIEZkZShtKXt2YXIgdj10aGlzLl9fZGF0YV9fO3JldHVybiBBTT92W21dIT09ZTp1bi5jYWxsKHYsbSl9ZnVuY3Rpb24gQmRlKG0sdil7dmFyIFQ9dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyhtKT8wOjEsVFttXT1BTSYmdj09PWU/YTp2LHRoaXN9cl8ucHJvdG90eXBlLmNsZWFyPURkZSxyXy5wcm90b3R5cGUuZGVsZXRlPU9kZSxyXy5wcm90b3R5cGUuZ2V0PXpkZSxyXy5wcm90b3R5cGUuaGFzPUZkZSxyXy5wcm90b3R5cGUuc2V0PUJkZTtmdW5jdGlvbiBvcChtKXt2YXIgdj0tMSxUPW09PW51bGw/MDptLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdjxUOyl7dmFyIE49bVt2XTt0aGlzLnNldChOWzBdLE5bMV0pfX1mdW5jdGlvbiBIZGUoKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6ZT0wfWZ1bmN0aW9uIFZkZShtKXt2YXIgdj10aGlzLl9fZGF0YV9fLFQ9aUkodixtKTtpZihUPDApcmV0dXJuITE7dmFyIE49di5sZW5ndGgtMTtyZXR1cm4gVD09Tj92LnBvcCgpOlo2LmNhbGwodixULDEpLC0tdGhpcy5zaXplLCEwfWZ1bmN0aW9uIFVkZShtKXt2YXIgdj10aGlzLl9fZGF0YV9fLFQ9aUkodixtKTtyZXR1cm4gVDwwP2U6dltUXVsxXX1mdW5jdGlvbiBxZGUobSl7cmV0dXJuIGlJKHRoaXMuX19kYXRhX18sbSk+LTF9ZnVuY3Rpb24gR2RlKG0sdil7dmFyIFQ9dGhpcy5fX2RhdGFfXyxOPWlJKFQsbSk7cmV0dXJuIE48MD8oKyt0aGlzLnNpemUsVC5wdXNoKFttLHZdKSk6VFtOXVsxXT12LHRoaXN9b3AucHJvdG90eXBlLmNsZWFyPUhkZSxvcC5wcm90b3R5cGUuZGVsZXRlPVZkZSxvcC5wcm90b3R5cGUuZ2V0PVVkZSxvcC5wcm90b3R5cGUuaGFzPXFkZSxvcC5wcm90b3R5cGUuc2V0PUdkZTtmdW5jdGlvbiBhcChtKXt2YXIgdj0tMSxUPW09PW51bGw/MDptLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdjxUOyl7dmFyIE49bVt2XTt0aGlzLnNldChOWzBdLE5bMV0pfX1mdW5jdGlvbiBXZGUoKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyByXyxtYXA6bmV3KFRNfHxvcCksc3RyaW5nOm5ldyByX319ZnVuY3Rpb24gWWRlKG0pe3ZhciB2PWdJKHRoaXMsbSkuZGVsZXRlKG0pO3JldHVybiB0aGlzLnNpemUtPXY/MTowLHZ9ZnVuY3Rpb24gamRlKG0pe3JldHVybiBnSSh0aGlzLG0pLmdldChtKX1mdW5jdGlvbiBYZGUobSl7cmV0dXJuIGdJKHRoaXMsbSkuaGFzKG0pfWZ1bmN0aW9uICRkZShtLHYpe3ZhciBUPWdJKHRoaXMsbSksTj1ULnNpemU7cmV0dXJuIFQuc2V0KG0sdiksdGhpcy5zaXplKz1ULnNpemU9PU4/MDoxLHRoaXN9YXAucHJvdG90eXBlLmNsZWFyPVdkZSxhcC5wcm90b3R5cGUuZGVsZXRlPVlkZSxhcC5wcm90b3R5cGUuZ2V0PWpkZSxhcC5wcm90b3R5cGUuaGFzPVhkZSxhcC5wcm90b3R5cGUuc2V0PSRkZTtmdW5jdGlvbiBuXyhtKXt2YXIgdj0tMSxUPW09PW51bGw/MDptLmxlbmd0aDtmb3IodGhpcy5fX2RhdGFfXz1uZXcgYXA7Kyt2PFQ7KXRoaXMuYWRkKG1bdl0pfWZ1bmN0aW9uIEtkZShtKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5zZXQobSxhKSx0aGlzfWZ1bmN0aW9uIFpkZShtKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMobSl9bl8ucHJvdG90eXBlLmFkZD1uXy5wcm90b3R5cGUucHVzaD1LZGUsbl8ucHJvdG90eXBlLmhhcz1aZGU7ZnVuY3Rpb24gZXUobSl7dmFyIHY9dGhpcy5fX2RhdGFfXz1uZXcgb3AobSk7dGhpcy5zaXplPXYuc2l6ZX1mdW5jdGlvbiBKZGUoKXt0aGlzLl9fZGF0YV9fPW5ldyBvcCx0aGlzLnNpemU9MH1mdW5jdGlvbiBRZGUobSl7dmFyIHY9dGhpcy5fX2RhdGFfXyxUPXYuZGVsZXRlKG0pO3JldHVybiB0aGlzLnNpemU9di5zaXplLFR9ZnVuY3Rpb24gdG1lKG0pe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldChtKX1mdW5jdGlvbiBlbWUobSl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKG0pfWZ1bmN0aW9uIHJtZShtLHYpe3ZhciBUPXRoaXMuX19kYXRhX187aWYoVCBpbnN0YW5jZW9mIG9wKXt2YXIgTj1ULl9fZGF0YV9fO2lmKCFUTXx8Ti5sZW5ndGg8ci0xKXJldHVybiBOLnB1c2goW20sdl0pLHRoaXMuc2l6ZT0rK1Quc2l6ZSx0aGlzO1Q9dGhpcy5fX2RhdGFfXz1uZXcgYXAoTil9cmV0dXJuIFQuc2V0KG0sdiksdGhpcy5zaXplPVQuc2l6ZSx0aGlzfWV1LnByb3RvdHlwZS5jbGVhcj1KZGUsZXUucHJvdG90eXBlLmRlbGV0ZT1RZGUsZXUucHJvdG90eXBlLmdldD10bWUsZXUucHJvdG90eXBlLmhhcz1lbWUsZXUucHJvdG90eXBlLnNldD1ybWU7ZnVuY3Rpb24gSWZ0KG0sdil7dmFyIFQ9JGUobSksTj0hVCYmbF8obSksVj0hVCYmIU4mJndtKG0pLFk9IVQmJiFOJiYhViYmU3gobSksSj1UfHxOfHxWfHxZLGl0PUo/ZHEobS5sZW5ndGgsZmRlKTpbXSxmdD1pdC5sZW5ndGg7Zm9yKHZhciBEdCBpbiBtKSh2fHx1bi5jYWxsKG0sRHQpKSYmIShKJiYoRHQ9PSJsZW5ndGgifHxWJiYoRHQ9PSJvZmZzZXQifHxEdD09InBhcmVudCIpfHxZJiYoRHQ9PSJidWZmZXIifHxEdD09ImJ5dGVMZW5ndGgifHxEdD09ImJ5dGVPZmZzZXQiKXx8dXAoRHQsZnQpKSkmJml0LnB1c2goRHQpO3JldHVybiBpdH1mdW5jdGlvbiBMZnQobSl7dmFyIHY9bS5sZW5ndGg7cmV0dXJuIHY/bVtMcSgwLHYtMSldOmV9ZnVuY3Rpb24gbm1lKG0sdil7cmV0dXJuIF9JKGRzKG0pLGlfKHYsMCxtLmxlbmd0aCkpfWZ1bmN0aW9uIGltZShtKXtyZXR1cm4gX0koZHMobSkpfWZ1bmN0aW9uIGJxKG0sdixUKXsoVCE9PWUmJiFydShtW3ZdLFQpfHxUPT09ZSYmISh2IGluIG0pKSYmc3AobSx2LFQpfWZ1bmN0aW9uIElNKG0sdixUKXt2YXIgTj1tW3ZdOyghKHVuLmNhbGwobSx2KSYmcnUoTixUKSl8fFQ9PT1lJiYhKHYgaW4gbSkpJiZzcChtLHYsVCl9ZnVuY3Rpb24gaUkobSx2KXtmb3IodmFyIFQ9bS5sZW5ndGg7VC0tOylpZihydShtW1RdWzBdLHYpKXJldHVybiBUO3JldHVybi0xfWZ1bmN0aW9uIG9tZShtLHYsVCxOKXtyZXR1cm4geW0obSxmdW5jdGlvbihWLFksSil7dihOLFYsVChWKSxKKX0pLE59ZnVuY3Rpb24ga2Z0KG0sdil7cmV0dXJuIG0mJmdoKHYscG8odiksbSl9ZnVuY3Rpb24gYW1lKG0sdil7cmV0dXJuIG0mJmdoKHYsZ3ModiksbSl9ZnVuY3Rpb24gc3AobSx2LFQpe3Y9PSJfX3Byb3RvX18iJiZKNj9KNihtLHYse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOlQsd3JpdGFibGU6ITB9KTptW3ZdPVR9ZnVuY3Rpb24gd3EobSx2KXtmb3IodmFyIFQ9LTEsTj12Lmxlbmd0aCxWPXZ0KE4pLFk9bT09bnVsbDsrK1Q8TjspVltUXT1ZP2U6ckcobSx2W1RdKTtyZXR1cm4gVn1mdW5jdGlvbiBpXyhtLHYsVCl7cmV0dXJuIG09PT1tJiYoVCE9PWUmJihtPW08PVQ/bTpUKSx2IT09ZSYmKG09bT49dj9tOnYpKSxtfWZ1bmN0aW9uIGpsKG0sdixULE4sVixZKXt2YXIgSixpdD12JmMsZnQ9diZ1LER0PXYmaDtpZihUJiYoSj1WP1QobSxOLFYsWSk6VChtKSksSiE9PWUpcmV0dXJuIEo7aWYoIWVpKG0pKXJldHVybiBtO3ZhciBPdD0kZShtKTtpZihPdCl7aWYoSj1YbWUobSksIWl0KXJldHVybiBkcyhtLEopfWVsc2V7dmFyIFZ0PW5hKG0pLG9lPVZ0PT1ldHx8VnQ9PWR0O2lmKHdtKG0pKXJldHVybiBycHQobSxpdCk7aWYoVnQ9PXd0fHxWdD09YnR8fG9lJiYhVil7aWYoSj1mdHx8b2U/e306YnB0KG0pLCFpdClyZXR1cm4gZnQ/em1lKG0sYW1lKEosbSkpOk9tZShtLGtmdChKLG0pKX1lbHNle2lmKCFUbltWdF0pcmV0dXJuIFY/bTp7fTtKPSRtZShtLFZ0LGl0KX19WXx8KFk9bmV3IGV1KTt2YXIgVGU9WS5nZXQobSk7aWYoVGUpcmV0dXJuIFRlO1kuc2V0KG0sSiksS3B0KG0pP20uZm9yRWFjaChmdW5jdGlvbihEZSl7Si5hZGQoamwoRGUsdixULERlLG0sWSkpfSk6WHB0KG0pJiZtLmZvckVhY2goZnVuY3Rpb24oRGUscHIpe0ouc2V0KHByLGpsKERlLHYsVCxwcixtLFkpKX0pO3ZhciBOZT1EdD9mdD9VcTpWcTpmdD9nczpwbyxlcj1PdD9lOk5lKG0pO3JldHVybiBHbChlcnx8bSxmdW5jdGlvbihEZSxwcil7ZXImJihwcj1EZSxEZT1tW3ByXSksSU0oSixwcixqbChEZSx2LFQscHIsbSxZKSl9KSxKfWZ1bmN0aW9uIHNtZShtKXt2YXIgdj1wbyhtKTtyZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIFJmdChULG0sdil9fWZ1bmN0aW9uIFJmdChtLHYsVCl7dmFyIE49VC5sZW5ndGg7aWYobT09bnVsbClyZXR1cm4hTjtmb3IobT12bihtKTtOLS07KXt2YXIgVj1UW05dLFk9dltWXSxKPW1bVl07aWYoSj09PWUmJiEoViBpbiBtKXx8IVkoSikpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gTmZ0KG0sdixUKXtpZih0eXBlb2YgbSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgV2woaSk7cmV0dXJuIHpNKGZ1bmN0aW9uKCl7bS5hcHBseShlLFQpfSx2KX1mdW5jdGlvbiBMTShtLHYsVCxOKXt2YXIgVj0tMSxZPVY2LEo9ITAsaXQ9bS5sZW5ndGgsZnQ9W10sRHQ9di5sZW5ndGg7aWYoIWl0KXJldHVybiBmdDtUJiYodj1Lbih2LFlzKFQpKSksTj8oWT1scSxKPSExKTp2Lmxlbmd0aD49ciYmKFk9TU0sSj0hMSx2PW5ldyBuXyh2KSk7dDpmb3IoOysrVjxpdDspe3ZhciBPdD1tW1ZdLFZ0PVQ9PW51bGw/T3Q6VChPdCk7aWYoT3Q9Tnx8T3QhPT0wP090OjAsSiYmVnQ9PT1WdCl7Zm9yKHZhciBvZT1EdDtvZS0tOylpZih2W29lXT09PVZ0KWNvbnRpbnVlIHQ7ZnQucHVzaChPdCl9ZWxzZSBZKHYsVnQsTil8fGZ0LnB1c2goT3QpfXJldHVybiBmdH12YXIgeW09c3B0KG1oKSxEZnQ9c3B0KE1xLCEwKTtmdW5jdGlvbiBsbWUobSx2KXt2YXIgVD0hMDtyZXR1cm4geW0obSxmdW5jdGlvbihOLFYsWSl7cmV0dXJuIFQ9ISF2KE4sVixZKSxUfSksVH1mdW5jdGlvbiBvSShtLHYsVCl7Zm9yKHZhciBOPS0xLFY9bS5sZW5ndGg7KytOPFY7KXt2YXIgWT1tW05dLEo9dihZKTtpZihKIT1udWxsJiYoaXQ9PT1lP0o9PT1KJiYhWHMoSik6VChKLGl0KSkpdmFyIGl0PUosZnQ9WX1yZXR1cm4gZnR9ZnVuY3Rpb24gY21lKG0sdixULE4pe3ZhciBWPW0ubGVuZ3RoO2ZvcihUPVFlKFQpLFQ8MCYmKFQ9LVQ+Vj8wOlYrVCksTj1OPT09ZXx8Tj5WP1Y6UWUoTiksTjwwJiYoTis9ViksTj1UPk4/MDpKcHQoTik7VDxOOyltW1QrK109djtyZXR1cm4gbX1mdW5jdGlvbiBPZnQobSx2KXt2YXIgVD1bXTtyZXR1cm4geW0obSxmdW5jdGlvbihOLFYsWSl7dihOLFYsWSkmJlQucHVzaChOKX0pLFR9ZnVuY3Rpb24gUm8obSx2LFQsTixWKXt2YXIgWT0tMSxKPW0ubGVuZ3RoO2ZvcihUfHwoVD1abWUpLFZ8fChWPVtdKTsrK1k8Sjspe3ZhciBpdD1tW1ldO3Y+MCYmVChpdCk/dj4xP1JvKGl0LHYtMSxULE4sVik6ZG0oVixpdCk6Tnx8KFZbVi5sZW5ndGhdPWl0KX1yZXR1cm4gVn12YXIgU3E9bHB0KCksemZ0PWxwdCghMCk7ZnVuY3Rpb24gbWgobSx2KXtyZXR1cm4gbSYmU3EobSx2LHBvKX1mdW5jdGlvbiBNcShtLHYpe3JldHVybiBtJiZ6ZnQobSx2LHBvKX1mdW5jdGlvbiBhSShtLHYpe3JldHVybiBwbSh2LGZ1bmN0aW9uKFQpe3JldHVybiBocChtW1RdKX0pfWZ1bmN0aW9uIG9fKG0sdil7dj14bSh2LG0pO2Zvcih2YXIgVD0wLE49di5sZW5ndGg7bSE9bnVsbCYmVDxOOyltPW1bX2godltUKytdKV07cmV0dXJuIFQmJlQ9PU4/bTplfWZ1bmN0aW9uIEZmdChtLHYsVCl7dmFyIE49dihtKTtyZXR1cm4gJGUobSk/TjpkbShOLFQobSkpfWZ1bmN0aW9uIGthKG0pe3JldHVybiBtPT1udWxsP209PT1lP3R0Omh0OmVfJiZlXyBpbiB2bihtKT9XbWUobSk6aWdlKG0pfWZ1bmN0aW9uIEVxKG0sdil7cmV0dXJuIG0+dn1mdW5jdGlvbiB1bWUobSx2KXtyZXR1cm4gbSE9bnVsbCYmdW4uY2FsbChtLHYpfWZ1bmN0aW9uIGhtZShtLHYpe3JldHVybiBtIT1udWxsJiZ2IGluIHZuKG0pfWZ1bmN0aW9uIGZtZShtLHYsVCl7cmV0dXJuIG0+PXJhKHYsVCkmJm08WGkodixUKX1mdW5jdGlvbiBUcShtLHYsVCl7Zm9yKHZhciBOPVQ/bHE6VjYsVj1tWzBdLmxlbmd0aCxZPW0ubGVuZ3RoLEo9WSxpdD12dChZKSxmdD0xLzAsRHQ9W107Si0tOyl7dmFyIE90PW1bSl07SiYmdiYmKE90PUtuKE90LFlzKHYpKSksZnQ9cmEoT3QubGVuZ3RoLGZ0KSxpdFtKXT0hVCYmKHZ8fFY+PTEyMCYmT3QubGVuZ3RoPj0xMjApP25ldyBuXyhKJiZPdCk6ZX1PdD1tWzBdO3ZhciBWdD0tMSxvZT1pdFswXTt0OmZvcig7KytWdDxWJiZEdC5sZW5ndGg8ZnQ7KXt2YXIgVGU9T3RbVnRdLE5lPXY/dihUZSk6VGU7aWYoVGU9VHx8VGUhPT0wP1RlOjAsIShvZT9NTShvZSxOZSk6TihEdCxOZSxUKSkpe2ZvcihKPVk7LS1KOyl7dmFyIGVyPWl0W0pdO2lmKCEoZXI/TU0oZXIsTmUpOk4obVtKXSxOZSxUKSkpY29udGludWUgdH1vZSYmb2UucHVzaChOZSksRHQucHVzaChUZSl9fXJldHVybiBEdH1mdW5jdGlvbiBwbWUobSx2LFQsTil7cmV0dXJuIG1oKG0sZnVuY3Rpb24oVixZLEope3YoTixUKFYpLFksSil9KSxOfWZ1bmN0aW9uIGtNKG0sdixUKXt2PXhtKHYsbSksbT1FcHQobSx2KTt2YXIgTj1tPT1udWxsP206bVtfaCgkbCh2KSldO3JldHVybiBOPT1udWxsP2U6V3MoTixtLFQpfWZ1bmN0aW9uIEJmdChtKXtyZXR1cm4gc2kobSkmJmthKG0pPT1idH1mdW5jdGlvbiBkbWUobSl7cmV0dXJuIHNpKG0pJiZrYShtKT09JHR9ZnVuY3Rpb24gbW1lKG0pe3JldHVybiBzaShtKSYma2EobSk9PV90fWZ1bmN0aW9uIFJNKG0sdixULE4sVil7cmV0dXJuIG09PT12PyEwOm09PW51bGx8fHY9PW51bGx8fCFzaShtKSYmIXNpKHYpP20hPT1tJiZ2IT09djpnbWUobSx2LFQsTixSTSxWKX1mdW5jdGlvbiBnbWUobSx2LFQsTixWLFkpe3ZhciBKPSRlKG0pLGl0PSRlKHYpLGZ0PUo/TXQ6bmEobSksRHQ9aXQ/TXQ6bmEodik7ZnQ9ZnQ9PWJ0P3d0OmZ0LER0PUR0PT1idD93dDpEdDt2YXIgT3Q9ZnQ9PXd0LFZ0PUR0PT13dCxvZT1mdD09RHQ7aWYob2UmJndtKG0pKXtpZighd20odikpcmV0dXJuITE7Sj0hMCxPdD0hMX1pZihvZSYmIU90KXJldHVybiBZfHwoWT1uZXcgZXUpLEp8fFN4KG0pP3lwdChtLHYsVCxOLFYsWSk6cW1lKG0sdixmdCxULE4sVixZKTtpZighKFQmZikpe3ZhciBUZT1PdCYmdW4uY2FsbChtLCJfX3dyYXBwZWRfXyIpLE5lPVZ0JiZ1bi5jYWxsKHYsIl9fd3JhcHBlZF9fIik7aWYoVGV8fE5lKXt2YXIgZXI9VGU/bS52YWx1ZSgpOm0sRGU9TmU/di52YWx1ZSgpOnY7cmV0dXJuIFl8fChZPW5ldyBldSksVihlcixEZSxULE4sWSl9fXJldHVybiBvZT8oWXx8KFk9bmV3IGV1KSxHbWUobSx2LFQsTixWLFkpKTohMX1mdW5jdGlvbiBfbWUobSl7cmV0dXJuIHNpKG0pJiZuYShtKT09cX1mdW5jdGlvbiBDcShtLHYsVCxOKXt2YXIgVj1ULmxlbmd0aCxZPVYsSj0hTjtpZihtPT1udWxsKXJldHVybiFZO2ZvcihtPXZuKG0pO1YtLTspe3ZhciBpdD1UW1ZdO2lmKEomJml0WzJdP2l0WzFdIT09bVtpdFswXV06IShpdFswXWluIG0pKXJldHVybiExfWZvcig7KytWPFk7KXtpdD1UW1ZdO3ZhciBmdD1pdFswXSxEdD1tW2Z0XSxPdD1pdFsxXTtpZihKJiZpdFsyXSl7aWYoRHQ9PT1lJiYhKGZ0IGluIG0pKXJldHVybiExfWVsc2V7dmFyIFZ0PW5ldyBldTtpZihOKXZhciBvZT1OKER0LE90LGZ0LG0sdixWdCk7aWYoIShvZT09PWU/Uk0oT3QsRHQsZnxwLE4sVnQpOm9lKSlyZXR1cm4hMX19cmV0dXJuITB9ZnVuY3Rpb24gSGZ0KG0pe2lmKCFlaShtKXx8UW1lKG0pKXJldHVybiExO3ZhciB2PWhwKG0pP19kZTpQcjtyZXR1cm4gdi50ZXN0KHNfKG0pKX1mdW5jdGlvbiB5bWUobSl7cmV0dXJuIHNpKG0pJiZrYShtKT09ZWV9ZnVuY3Rpb24gdm1lKG0pe3JldHVybiBzaShtKSYmbmEobSk9PUxlfWZ1bmN0aW9uIHhtZShtKXtyZXR1cm4gc2kobSkmJlNJKG0ubGVuZ3RoKSYmISFSbltrYShtKV19ZnVuY3Rpb24gVmZ0KG0pe3JldHVybiB0eXBlb2YgbT09ImZ1bmN0aW9uIj9tOm09PW51bGw/X3M6dHlwZW9mIG09PSJvYmplY3QiPyRlKG0pP0dmdChtWzBdLG1bMV0pOnFmdChtKTpjZHQobSl9ZnVuY3Rpb24gQXEobSl7aWYoIU9NKG0pKXJldHVybiBTZGUobSk7dmFyIHY9W107Zm9yKHZhciBUIGluIHZuKG0pKXVuLmNhbGwobSxUKSYmVCE9ImNvbnN0cnVjdG9yIiYmdi5wdXNoKFQpO3JldHVybiB2fWZ1bmN0aW9uIGJtZShtKXtpZighZWkobSkpcmV0dXJuIG5nZShtKTt2YXIgdj1PTShtKSxUPVtdO2Zvcih2YXIgTiBpbiBtKU49PSJjb25zdHJ1Y3RvciImJih2fHwhdW4uY2FsbChtLE4pKXx8VC5wdXNoKE4pO3JldHVybiBUfWZ1bmN0aW9uIFBxKG0sdil7cmV0dXJuIG08dn1mdW5jdGlvbiBVZnQobSx2KXt2YXIgVD0tMSxOPW1zKG0pP3Z0KG0ubGVuZ3RoKTpbXTtyZXR1cm4geW0obSxmdW5jdGlvbihWLFksSil7TlsrK1RdPXYoVixZLEopfSksTn1mdW5jdGlvbiBxZnQobSl7dmFyIHY9R3EobSk7cmV0dXJuIHYubGVuZ3RoPT0xJiZ2WzBdWzJdP1NwdCh2WzBdWzBdLHZbMF1bMV0pOmZ1bmN0aW9uKFQpe3JldHVybiBUPT09bXx8Q3EoVCxtLHYpfX1mdW5jdGlvbiBHZnQobSx2KXtyZXR1cm4gWXEobSkmJndwdCh2KT9TcHQoX2gobSksdik6ZnVuY3Rpb24oVCl7dmFyIE49ckcoVCxtKTtyZXR1cm4gTj09PWUmJk49PT12P25HKFQsbSk6Uk0odixOLGZ8cCl9fWZ1bmN0aW9uIHNJKG0sdixULE4sVil7bSE9PXYmJlNxKHYsZnVuY3Rpb24oWSxKKXtpZihWfHwoVj1uZXcgZXUpLGVpKFkpKXdtZShtLHYsSixULHNJLE4sVik7ZWxzZXt2YXIgaXQ9Tj9OKFhxKG0sSiksWSxKKyIiLG0sdixWKTplO2l0PT09ZSYmKGl0PVkpLGJxKG0sSixpdCl9fSxncyl9ZnVuY3Rpb24gd21lKG0sdixULE4sVixZLEope3ZhciBpdD1YcShtLFQpLGZ0PVhxKHYsVCksRHQ9Si5nZXQoZnQpO2lmKER0KXticShtLFQsRHQpO3JldHVybn12YXIgT3Q9WT9ZKGl0LGZ0LFQrIiIsbSx2LEopOmUsVnQ9T3Q9PT1lO2lmKFZ0KXt2YXIgb2U9JGUoZnQpLFRlPSFvZSYmd20oZnQpLE5lPSFvZSYmIVRlJiZTeChmdCk7T3Q9ZnQsb2V8fFRlfHxOZT8kZShpdCk/T3Q9aXQ6eGkoaXQpP090PWRzKGl0KTpUZT8oVnQ9ITEsT3Q9cnB0KGZ0LCEwKSk6TmU/KFZ0PSExLE90PW5wdChmdCwhMCkpOk90PVtdOkZNKGZ0KXx8bF8oZnQpPyhPdD1pdCxsXyhpdCk/T3Q9UXB0KGl0KTooIWVpKGl0KXx8aHAoaXQpKSYmKE90PWJwdChmdCkpKTpWdD0hMX1WdCYmKEouc2V0KGZ0LE90KSxWKE90LGZ0LE4sWSxKKSxKLmRlbGV0ZShmdCkpLGJxKG0sVCxPdCl9ZnVuY3Rpb24gV2Z0KG0sdil7dmFyIFQ9bS5sZW5ndGg7aWYoISFUKXJldHVybiB2Kz12PDA/VDowLHVwKHYsVCk/bVt2XTplfWZ1bmN0aW9uIFlmdChtLHYsVCl7di5sZW5ndGg/dj1Lbih2LGZ1bmN0aW9uKFkpe3JldHVybiAkZShZKT9mdW5jdGlvbihKKXtyZXR1cm4gb18oSixZLmxlbmd0aD09PTE/WVswXTpZKX06WX0pOnY9W19zXTt2YXIgTj0tMTt2PUtuKHYsWXMoa2UoKSkpO3ZhciBWPVVmdChtLGZ1bmN0aW9uKFksSixpdCl7dmFyIGZ0PUtuKHYsZnVuY3Rpb24oRHQpe3JldHVybiBEdChZKX0pO3JldHVybntjcml0ZXJpYTpmdCxpbmRleDorK04sdmFsdWU6WX19KTtyZXR1cm4gJHBlKFYsZnVuY3Rpb24oWSxKKXtyZXR1cm4gRG1lKFksSixUKX0pfWZ1bmN0aW9uIFNtZShtLHYpe3JldHVybiBqZnQobSx2LGZ1bmN0aW9uKFQsTil7cmV0dXJuIG5HKG0sTil9KX1mdW5jdGlvbiBqZnQobSx2LFQpe2Zvcih2YXIgTj0tMSxWPXYubGVuZ3RoLFk9e307KytOPFY7KXt2YXIgSj12W05dLGl0PW9fKG0sSik7VChpdCxKKSYmTk0oWSx4bShKLG0pLGl0KX1yZXR1cm4gWX1mdW5jdGlvbiBNbWUobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3JldHVybiBvXyh2LG0pfX1mdW5jdGlvbiBJcShtLHYsVCxOKXt2YXIgVj1OP1hwZTpweCxZPS0xLEo9di5sZW5ndGgsaXQ9bTtmb3IobT09PXYmJih2PWRzKHYpKSxUJiYoaXQ9S24obSxZcyhUKSkpOysrWTxKOylmb3IodmFyIGZ0PTAsRHQ9dltZXSxPdD1UP1QoRHQpOkR0OyhmdD1WKGl0LE90LGZ0LE4pKT4tMTspaXQhPT1tJiZaNi5jYWxsKGl0LGZ0LDEpLFo2LmNhbGwobSxmdCwxKTtyZXR1cm4gbX1mdW5jdGlvbiBYZnQobSx2KXtmb3IodmFyIFQ9bT92Lmxlbmd0aDowLE49VC0xO1QtLTspe3ZhciBWPXZbVF07aWYoVD09Tnx8ViE9PVkpe3ZhciBZPVY7dXAoVik/WjYuY2FsbChtLFYsMSk6TnEobSxWKX19cmV0dXJuIG19ZnVuY3Rpb24gTHEobSx2KXtyZXR1cm4gbSt0SShBZnQoKSoodi1tKzEpKX1mdW5jdGlvbiBFbWUobSx2LFQsTil7Zm9yKHZhciBWPS0xLFk9WGkoUTYoKHYtbSkvKFR8fDEpKSwwKSxKPXZ0KFkpO1ktLTspSltOP1k6KytWXT1tLG0rPVQ7cmV0dXJuIEp9ZnVuY3Rpb24ga3EobSx2KXt2YXIgVD0iIjtpZighbXx8djwxfHx2PlUpcmV0dXJuIFQ7ZG8gdiUyJiYoVCs9bSksdj10SSh2LzIpLHYmJihtKz1tKTt3aGlsZSh2KTtyZXR1cm4gVH1mdW5jdGlvbiBucihtLHYpe3JldHVybiAkcShNcHQobSx2LF9zKSxtKyIiKX1mdW5jdGlvbiBUbWUobSl7cmV0dXJuIExmdChNeChtKSl9ZnVuY3Rpb24gQ21lKG0sdil7dmFyIFQ9TXgobSk7cmV0dXJuIF9JKFQsaV8odiwwLFQubGVuZ3RoKSl9ZnVuY3Rpb24gTk0obSx2LFQsTil7aWYoIWVpKG0pKXJldHVybiBtO3Y9eG0odixtKTtmb3IodmFyIFY9LTEsWT12Lmxlbmd0aCxKPVktMSxpdD1tO2l0IT1udWxsJiYrK1Y8WTspe3ZhciBmdD1faCh2W1ZdKSxEdD1UO2lmKGZ0PT09Il9fcHJvdG9fXyJ8fGZ0PT09ImNvbnN0cnVjdG9yInx8ZnQ9PT0icHJvdG90eXBlIilyZXR1cm4gbTtpZihWIT1KKXt2YXIgT3Q9aXRbZnRdO0R0PU4/TihPdCxmdCxpdCk6ZSxEdD09PWUmJihEdD1laShPdCk/T3Q6dXAodltWKzFdKT9bXTp7fSl9SU0oaXQsZnQsRHQpLGl0PWl0W2Z0XX1yZXR1cm4gbX12YXIgJGZ0PWVJP2Z1bmN0aW9uKG0sdil7cmV0dXJuIGVJLnNldChtLHYpLG19Ol9zLEFtZT1KNj9mdW5jdGlvbihtLHYpe3JldHVybiBKNihtLCJ0b1N0cmluZyIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOm9HKHYpLHdyaXRhYmxlOiEwfSl9Ol9zO2Z1bmN0aW9uIFBtZShtKXtyZXR1cm4gX0koTXgobSkpfWZ1bmN0aW9uIFhsKG0sdixUKXt2YXIgTj0tMSxWPW0ubGVuZ3RoO3Y8MCYmKHY9LXY+Vj8wOlYrdiksVD1UPlY/VjpULFQ8MCYmKFQrPVYpLFY9dj5UPzA6VC12Pj4+MCx2Pj4+PTA7Zm9yKHZhciBZPXZ0KFYpOysrTjxWOylZW05dPW1bTit2XTtyZXR1cm4gWX1mdW5jdGlvbiBJbWUobSx2KXt2YXIgVDtyZXR1cm4geW0obSxmdW5jdGlvbihOLFYsWSl7cmV0dXJuIFQ9dihOLFYsWSksIVR9KSwhIVR9ZnVuY3Rpb24gbEkobSx2LFQpe3ZhciBOPTAsVj1tPT1udWxsP046bS5sZW5ndGg7aWYodHlwZW9mIHY9PSJudW1iZXIiJiZ2PT09diYmVjw9c3Qpe2Zvcig7TjxWOyl7dmFyIFk9TitWPj4+MSxKPW1bWV07SiE9PW51bGwmJiFYcyhKKSYmKFQ/Sjw9djpKPHYpP049WSsxOlY9WX1yZXR1cm4gVn1yZXR1cm4gUnEobSx2LF9zLFQpfWZ1bmN0aW9uIFJxKG0sdixULE4pe3ZhciBWPTAsWT1tPT1udWxsPzA6bS5sZW5ndGg7aWYoWT09PTApcmV0dXJuIDA7dj1UKHYpO2Zvcih2YXIgSj12IT09dixpdD12PT09bnVsbCxmdD1Ycyh2KSxEdD12PT09ZTtWPFk7KXt2YXIgT3Q9dEkoKFYrWSkvMiksVnQ9VChtW090XSksb2U9VnQhPT1lLFRlPVZ0PT09bnVsbCxOZT1WdD09PVZ0LGVyPVhzKFZ0KTtpZihKKXZhciBEZT1OfHxOZTtlbHNlIER0P0RlPU5lJiYoTnx8b2UpOml0P0RlPU5lJiZvZSYmKE58fCFUZSk6ZnQ/RGU9TmUmJm9lJiYhVGUmJihOfHwhZXIpOlRlfHxlcj9EZT0hMTpEZT1OP1Z0PD12OlZ0PHY7RGU/Vj1PdCsxOlk9T3R9cmV0dXJuIHJhKFksb3QpfWZ1bmN0aW9uIEtmdChtLHYpe2Zvcih2YXIgVD0tMSxOPW0ubGVuZ3RoLFY9MCxZPVtdOysrVDxOOyl7dmFyIEo9bVtUXSxpdD12P3YoSik6SjtpZighVHx8IXJ1KGl0LGZ0KSl7dmFyIGZ0PWl0O1lbVisrXT1KPT09MD8wOkp9fXJldHVybiBZfWZ1bmN0aW9uIFpmdChtKXtyZXR1cm4gdHlwZW9mIG09PSJudW1iZXIiP206WHMobSk/WjorbX1mdW5jdGlvbiBqcyhtKXtpZih0eXBlb2YgbT09InN0cmluZyIpcmV0dXJuIG07aWYoJGUobSkpcmV0dXJuIEtuKG0sanMpKyIiO2lmKFhzKG0pKXJldHVybiBQZnQ/UGZ0LmNhbGwobSk6IiI7dmFyIHY9bSsiIjtyZXR1cm4gdj09IjAiJiYxL209PS16PyItMCI6dn1mdW5jdGlvbiB2bShtLHYsVCl7dmFyIE49LTEsVj1WNixZPW0ubGVuZ3RoLEo9ITAsaXQ9W10sZnQ9aXQ7aWYoVClKPSExLFY9bHE7ZWxzZSBpZihZPj1yKXt2YXIgRHQ9dj9udWxsOlZtZShtKTtpZihEdClyZXR1cm4gcTYoRHQpO0o9ITEsVj1NTSxmdD1uZXcgbl99ZWxzZSBmdD12P1tdOml0O3Q6Zm9yKDsrK048WTspe3ZhciBPdD1tW05dLFZ0PXY/dihPdCk6T3Q7aWYoT3Q9VHx8T3QhPT0wP090OjAsSiYmVnQ9PT1WdCl7Zm9yKHZhciBvZT1mdC5sZW5ndGg7b2UtLTspaWYoZnRbb2VdPT09VnQpY29udGludWUgdDt2JiZmdC5wdXNoKFZ0KSxpdC5wdXNoKE90KX1lbHNlIFYoZnQsVnQsVCl8fChmdCE9PWl0JiZmdC5wdXNoKFZ0KSxpdC5wdXNoKE90KSl9cmV0dXJuIGl0fWZ1bmN0aW9uIE5xKG0sdil7cmV0dXJuIHY9eG0odixtKSxtPUVwdChtLHYpLG09PW51bGx8fGRlbGV0ZSBtW19oKCRsKHYpKV19ZnVuY3Rpb24gSmZ0KG0sdixULE4pe3JldHVybiBOTShtLHYsVChvXyhtLHYpKSxOKX1mdW5jdGlvbiBjSShtLHYsVCxOKXtmb3IodmFyIFY9bS5sZW5ndGgsWT1OP1Y6LTE7KE4/WS0tOisrWTxWKSYmdihtW1ldLFksbSk7KTtyZXR1cm4gVD9YbChtLE4/MDpZLE4/WSsxOlYpOlhsKG0sTj9ZKzE6MCxOP1Y6WSl9ZnVuY3Rpb24gUWZ0KG0sdil7dmFyIFQ9bTtyZXR1cm4gVCBpbnN0YW5jZW9mIGdyJiYoVD1ULnZhbHVlKCkpLGNxKHYsZnVuY3Rpb24oTixWKXtyZXR1cm4gVi5mdW5jLmFwcGx5KFYudGhpc0FyZyxkbShbTl0sVi5hcmdzKSl9LFQpfWZ1bmN0aW9uIERxKG0sdixUKXt2YXIgTj1tLmxlbmd0aDtpZihOPDIpcmV0dXJuIE4/dm0obVswXSk6W107Zm9yKHZhciBWPS0xLFk9dnQoTik7KytWPE47KWZvcih2YXIgSj1tW1ZdLGl0PS0xOysraXQ8TjspaXQhPVYmJihZW1ZdPUxNKFlbVl18fEosbVtpdF0sdixUKSk7cmV0dXJuIHZtKFJvKFksMSksdixUKX1mdW5jdGlvbiB0cHQobSx2LFQpe2Zvcih2YXIgTj0tMSxWPW0ubGVuZ3RoLFk9di5sZW5ndGgsSj17fTsrK048Vjspe3ZhciBpdD1OPFk/dltOXTplO1QoSixtW05dLGl0KX1yZXR1cm4gSn1mdW5jdGlvbiBPcShtKXtyZXR1cm4geGkobSk/bTpbXX1mdW5jdGlvbiB6cShtKXtyZXR1cm4gdHlwZW9mIG09PSJmdW5jdGlvbiI/bTpfc31mdW5jdGlvbiB4bShtLHYpe3JldHVybiAkZShtKT9tOllxKG0sdik/W21dOlBwdChvbihtKSl9dmFyIExtZT1ucjtmdW5jdGlvbiBibShtLHYsVCl7dmFyIE49bS5sZW5ndGg7cmV0dXJuIFQ9VD09PWU/TjpULCF2JiZUPj1OP206WGwobSx2LFQpfXZhciBlcHQ9eWRlfHxmdW5jdGlvbihtKXtyZXR1cm4gZm8uY2xlYXJUaW1lb3V0KG0pfTtmdW5jdGlvbiBycHQobSx2KXtpZih2KXJldHVybiBtLnNsaWNlKCk7dmFyIFQ9bS5sZW5ndGgsTj1TZnQ/U2Z0KFQpOm5ldyBtLmNvbnN0cnVjdG9yKFQpO3JldHVybiBtLmNvcHkoTiksTn1mdW5jdGlvbiBGcShtKXt2YXIgdj1uZXcgbS5jb25zdHJ1Y3RvcihtLmJ5dGVMZW5ndGgpO3JldHVybiBuZXcgJDYodikuc2V0KG5ldyAkNihtKSksdn1mdW5jdGlvbiBrbWUobSx2KXt2YXIgVD12P0ZxKG0uYnVmZmVyKTptLmJ1ZmZlcjtyZXR1cm4gbmV3IG0uY29uc3RydWN0b3IoVCxtLmJ5dGVPZmZzZXQsbS5ieXRlTGVuZ3RoKX1mdW5jdGlvbiBSbWUobSl7dmFyIHY9bmV3IG0uY29uc3RydWN0b3IobS5zb3VyY2UsS2UuZXhlYyhtKSk7cmV0dXJuIHYubGFzdEluZGV4PW0ubGFzdEluZGV4LHZ9ZnVuY3Rpb24gTm1lKG0pe3JldHVybiBQTT92bihQTS5jYWxsKG0pKTp7fX1mdW5jdGlvbiBucHQobSx2KXt2YXIgVD12P0ZxKG0uYnVmZmVyKTptLmJ1ZmZlcjtyZXR1cm4gbmV3IG0uY29uc3RydWN0b3IoVCxtLmJ5dGVPZmZzZXQsbS5sZW5ndGgpfWZ1bmN0aW9uIGlwdChtLHYpe2lmKG0hPT12KXt2YXIgVD1tIT09ZSxOPW09PT1udWxsLFY9bT09PW0sWT1YcyhtKSxKPXYhPT1lLGl0PXY9PT1udWxsLGZ0PXY9PT12LER0PVhzKHYpO2lmKCFpdCYmIUR0JiYhWSYmbT52fHxZJiZKJiZmdCYmIWl0JiYhRHR8fE4mJkomJmZ0fHwhVCYmZnR8fCFWKXJldHVybiAxO2lmKCFOJiYhWSYmIUR0JiZtPHZ8fER0JiZUJiZWJiYhTiYmIVl8fGl0JiZUJiZWfHwhSiYmVnx8IWZ0KXJldHVybi0xfXJldHVybiAwfWZ1bmN0aW9uIERtZShtLHYsVCl7Zm9yKHZhciBOPS0xLFY9bS5jcml0ZXJpYSxZPXYuY3JpdGVyaWEsSj1WLmxlbmd0aCxpdD1ULmxlbmd0aDsrK048Sjspe3ZhciBmdD1pcHQoVltOXSxZW05dKTtpZihmdCl7aWYoTj49aXQpcmV0dXJuIGZ0O3ZhciBEdD1UW05dO3JldHVybiBmdCooRHQ9PSJkZXNjIj8tMToxKX19cmV0dXJuIG0uaW5kZXgtdi5pbmRleH1mdW5jdGlvbiBvcHQobSx2LFQsTil7Zm9yKHZhciBWPS0xLFk9bS5sZW5ndGgsSj1ULmxlbmd0aCxpdD0tMSxmdD12Lmxlbmd0aCxEdD1YaShZLUosMCksT3Q9dnQoZnQrRHQpLFZ0PSFOOysraXQ8ZnQ7KU90W2l0XT12W2l0XTtmb3IoOysrVjxKOykoVnR8fFY8WSkmJihPdFtUW1ZdXT1tW1ZdKTtmb3IoO0R0LS07KU90W2l0KytdPW1bVisrXTtyZXR1cm4gT3R9ZnVuY3Rpb24gYXB0KG0sdixULE4pe2Zvcih2YXIgVj0tMSxZPW0ubGVuZ3RoLEo9LTEsaXQ9VC5sZW5ndGgsZnQ9LTEsRHQ9di5sZW5ndGgsT3Q9WGkoWS1pdCwwKSxWdD12dChPdCtEdCksb2U9IU47KytWPE90OylWdFtWXT1tW1ZdO2Zvcih2YXIgVGU9VjsrK2Z0PER0OylWdFtUZStmdF09dltmdF07Zm9yKDsrK0o8aXQ7KShvZXx8VjxZKSYmKFZ0W1RlK1RbSl1dPW1bVisrXSk7cmV0dXJuIFZ0fWZ1bmN0aW9uIGRzKG0sdil7dmFyIFQ9LTEsTj1tLmxlbmd0aDtmb3Iodnx8KHY9dnQoTikpOysrVDxOOyl2W1RdPW1bVF07cmV0dXJuIHZ9ZnVuY3Rpb24gZ2gobSx2LFQsTil7dmFyIFY9IVQ7VHx8KFQ9e30pO2Zvcih2YXIgWT0tMSxKPXYubGVuZ3RoOysrWTxKOyl7dmFyIGl0PXZbWV0sZnQ9Tj9OKFRbaXRdLG1baXRdLGl0LFQsbSk6ZTtmdD09PWUmJihmdD1tW2l0XSksVj9zcChULGl0LGZ0KTpJTShULGl0LGZ0KX1yZXR1cm4gVH1mdW5jdGlvbiBPbWUobSx2KXtyZXR1cm4gZ2gobSxXcShtKSx2KX1mdW5jdGlvbiB6bWUobSx2KXtyZXR1cm4gZ2gobSx2cHQobSksdil9ZnVuY3Rpb24gdUkobSx2KXtyZXR1cm4gZnVuY3Rpb24oVCxOKXt2YXIgVj0kZShUKT9VcGU6b21lLFk9dj92KCk6e307cmV0dXJuIFYoVCxtLGtlKE4sMiksWSl9fWZ1bmN0aW9uIHh4KG0pe3JldHVybiBucihmdW5jdGlvbih2LFQpe3ZhciBOPS0xLFY9VC5sZW5ndGgsWT1WPjE/VFtWLTFdOmUsSj1WPjI/VFsyXTplO2ZvcihZPW0ubGVuZ3RoPjMmJnR5cGVvZiBZPT0iZnVuY3Rpb24iPyhWLS0sWSk6ZSxKJiZSYShUWzBdLFRbMV0sSikmJihZPVY8Mz9lOlksVj0xKSx2PXZuKHYpOysrTjxWOyl7dmFyIGl0PVRbTl07aXQmJm0odixpdCxOLFkpfXJldHVybiB2fSl9ZnVuY3Rpb24gc3B0KG0sdil7cmV0dXJuIGZ1bmN0aW9uKFQsTil7aWYoVD09bnVsbClyZXR1cm4gVDtpZighbXMoVCkpcmV0dXJuIG0oVCxOKTtmb3IodmFyIFY9VC5sZW5ndGgsWT12P1Y6LTEsSj12bihUKTsodj9ZLS06KytZPFYpJiZOKEpbWV0sWSxKKSE9PSExOyk7cmV0dXJuIFR9fWZ1bmN0aW9uIGxwdChtKXtyZXR1cm4gZnVuY3Rpb24odixULE4pe2Zvcih2YXIgVj0tMSxZPXZuKHYpLEo9Tih2KSxpdD1KLmxlbmd0aDtpdC0tOyl7dmFyIGZ0PUpbbT9pdDorK1ZdO2lmKFQoWVtmdF0sZnQsWSk9PT0hMSlicmVha31yZXR1cm4gdn19ZnVuY3Rpb24gRm1lKG0sdixUKXt2YXIgTj12JmQsVj1ETShtKTtmdW5jdGlvbiBZKCl7dmFyIEo9dGhpcyYmdGhpcyE9PWZvJiZ0aGlzIGluc3RhbmNlb2YgWT9WOm07cmV0dXJuIEouYXBwbHkoTj9UOnRoaXMsYXJndW1lbnRzKX1yZXR1cm4gWX1mdW5jdGlvbiBjcHQobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3Y9b24odik7dmFyIFQ9ZHgodik/dHUodik6ZSxOPVQ/VFswXTp2LmNoYXJBdCgwKSxWPVQ/Ym0oVCwxKS5qb2luKCIiKTp2LnNsaWNlKDEpO3JldHVybiBOW21dKCkrVn19ZnVuY3Rpb24gYngobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3JldHVybiBjcShzZHQoYWR0KHYpLnJlcGxhY2UoQXBlLCIiKSksbSwiIil9fWZ1bmN0aW9uIERNKG0pe3JldHVybiBmdW5jdGlvbigpe3ZhciB2PWFyZ3VtZW50cztzd2l0Y2godi5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IG07Y2FzZSAxOnJldHVybiBuZXcgbSh2WzBdKTtjYXNlIDI6cmV0dXJuIG5ldyBtKHZbMF0sdlsxXSk7Y2FzZSAzOnJldHVybiBuZXcgbSh2WzBdLHZbMV0sdlsyXSk7Y2FzZSA0OnJldHVybiBuZXcgbSh2WzBdLHZbMV0sdlsyXSx2WzNdKTtjYXNlIDU6cmV0dXJuIG5ldyBtKHZbMF0sdlsxXSx2WzJdLHZbM10sdls0XSk7Y2FzZSA2OnJldHVybiBuZXcgbSh2WzBdLHZbMV0sdlsyXSx2WzNdLHZbNF0sdls1XSk7Y2FzZSA3OnJldHVybiBuZXcgbSh2WzBdLHZbMV0sdlsyXSx2WzNdLHZbNF0sdls1XSx2WzZdKX12YXIgVD12eChtLnByb3RvdHlwZSksTj1tLmFwcGx5KFQsdik7cmV0dXJuIGVpKE4pP046VH19ZnVuY3Rpb24gQm1lKG0sdixUKXt2YXIgTj1ETShtKTtmdW5jdGlvbiBWKCl7Zm9yKHZhciBZPWFyZ3VtZW50cy5sZW5ndGgsSj12dChZKSxpdD1ZLGZ0PXd4KFYpO2l0LS07KUpbaXRdPWFyZ3VtZW50c1tpdF07dmFyIER0PVk8MyYmSlswXSE9PWZ0JiZKW1ktMV0hPT1mdD9bXTptbShKLGZ0KTtpZihZLT1EdC5sZW5ndGgsWTxUKXJldHVybiBkcHQobSx2LGhJLFYucGxhY2Vob2xkZXIsZSxKLER0LGUsZSxULVkpO3ZhciBPdD10aGlzJiZ0aGlzIT09Zm8mJnRoaXMgaW5zdGFuY2VvZiBWP046bTtyZXR1cm4gV3MoT3QsdGhpcyxKKX1yZXR1cm4gVn1mdW5jdGlvbiB1cHQobSl7cmV0dXJuIGZ1bmN0aW9uKHYsVCxOKXt2YXIgVj12bih2KTtpZighbXModikpe3ZhciBZPWtlKFQsMyk7dj1wbyh2KSxUPWZ1bmN0aW9uKGl0KXtyZXR1cm4gWShWW2l0XSxpdCxWKX19dmFyIEo9bSh2LFQsTik7cmV0dXJuIEo+LTE/VltZP3ZbSl06Sl06ZX19ZnVuY3Rpb24gaHB0KG0pe3JldHVybiBjcChmdW5jdGlvbih2KXt2YXIgVD12Lmxlbmd0aCxOPVQsVj1ZbC5wcm90b3R5cGUudGhydTtmb3IobSYmdi5yZXZlcnNlKCk7Ti0tOyl7dmFyIFk9dltOXTtpZih0eXBlb2YgWSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgV2woaSk7aWYoViYmIUomJm1JKFkpPT0id3JhcHBlciIpdmFyIEo9bmV3IFlsKFtdLCEwKX1mb3IoTj1KP046VDsrK048VDspe1k9dltOXTt2YXIgaXQ9bUkoWSksZnQ9aXQ9PSJ3cmFwcGVyIj9xcShZKTplO2Z0JiZqcShmdFswXSkmJmZ0WzFdPT0oQ3x5fGJ8UCkmJiFmdFs0XS5sZW5ndGgmJmZ0WzldPT0xP0o9SlttSShmdFswXSldLmFwcGx5KEosZnRbM10pOko9WS5sZW5ndGg9PTEmJmpxKFkpP0pbaXRdKCk6Si50aHJ1KFkpfXJldHVybiBmdW5jdGlvbigpe3ZhciBEdD1hcmd1bWVudHMsT3Q9RHRbMF07aWYoSiYmRHQubGVuZ3RoPT0xJiYkZShPdCkpcmV0dXJuIEoucGxhbnQoT3QpLnZhbHVlKCk7Zm9yKHZhciBWdD0wLG9lPVQ/dltWdF0uYXBwbHkodGhpcyxEdCk6T3Q7KytWdDxUOylvZT12W1Z0XS5jYWxsKHRoaXMsb2UpO3JldHVybiBvZX19KX1mdW5jdGlvbiBoSShtLHYsVCxOLFYsWSxKLGl0LGZ0LER0KXt2YXIgT3Q9diZDLFZ0PXYmZCxvZT12JmcsVGU9diYoeXx4KSxOZT12JmssZXI9b2U/ZTpETShtKTtmdW5jdGlvbiBEZSgpe2Zvcih2YXIgcHI9YXJndW1lbnRzLmxlbmd0aCx5cj12dChwciksJHM9cHI7JHMtLTspeXJbJHNdPWFyZ3VtZW50c1skc107aWYoVGUpdmFyIE5hPXd4KERlKSxLcz1acGUoeXIsTmEpO2lmKE4mJih5cj1vcHQoeXIsTixWLFRlKSksWSYmKHlyPWFwdCh5cixZLEosVGUpKSxwci09S3MsVGUmJnByPER0KXt2YXIgYmk9bW0oeXIsTmEpO3JldHVybiBkcHQobSx2LGhJLERlLnBsYWNlaG9sZGVyLFQseXIsYmksaXQsZnQsRHQtcHIpfXZhciBudT1WdD9UOnRoaXMscHA9b2U/bnVbbV06bTtyZXR1cm4gcHI9eXIubGVuZ3RoLGl0P3lyPW9nZSh5cixpdCk6TmUmJnByPjEmJnlyLnJldmVyc2UoKSxPdCYmZnQ8cHImJih5ci5sZW5ndGg9ZnQpLHRoaXMmJnRoaXMhPT1mbyYmdGhpcyBpbnN0YW5jZW9mIERlJiYocHA9ZXJ8fERNKHBwKSkscHAuYXBwbHkobnUseXIpfXJldHVybiBEZX1mdW5jdGlvbiBmcHQobSx2KXtyZXR1cm4gZnVuY3Rpb24oVCxOKXtyZXR1cm4gcG1lKFQsbSx2KE4pLHt9KX19ZnVuY3Rpb24gZkkobSx2KXtyZXR1cm4gZnVuY3Rpb24oVCxOKXt2YXIgVjtpZihUPT09ZSYmTj09PWUpcmV0dXJuIHY7aWYoVCE9PWUmJihWPVQpLE4hPT1lKXtpZihWPT09ZSlyZXR1cm4gTjt0eXBlb2YgVD09InN0cmluZyJ8fHR5cGVvZiBOPT0ic3RyaW5nIj8oVD1qcyhUKSxOPWpzKE4pKTooVD1aZnQoVCksTj1aZnQoTikpLFY9bShULE4pfXJldHVybiBWfX1mdW5jdGlvbiBCcShtKXtyZXR1cm4gY3AoZnVuY3Rpb24odil7cmV0dXJuIHY9S24odixZcyhrZSgpKSksbnIoZnVuY3Rpb24oVCl7dmFyIE49dGhpcztyZXR1cm4gbSh2LGZ1bmN0aW9uKFYpe3JldHVybiBXcyhWLE4sVCl9KX0pfSl9ZnVuY3Rpb24gcEkobSx2KXt2PXY9PT1lPyIgIjpqcyh2KTt2YXIgVD12Lmxlbmd0aDtpZihUPDIpcmV0dXJuIFQ/a3EodixtKTp2O3ZhciBOPWtxKHYsUTYobS9teCh2KSkpO3JldHVybiBkeCh2KT9ibSh0dShOKSwwLG0pLmpvaW4oIiIpOk4uc2xpY2UoMCxtKX1mdW5jdGlvbiBIbWUobSx2LFQsTil7dmFyIFY9diZkLFk9RE0obSk7ZnVuY3Rpb24gSigpe2Zvcih2YXIgaXQ9LTEsZnQ9YXJndW1lbnRzLmxlbmd0aCxEdD0tMSxPdD1OLmxlbmd0aCxWdD12dChPdCtmdCksb2U9dGhpcyYmdGhpcyE9PWZvJiZ0aGlzIGluc3RhbmNlb2YgSj9ZOm07KytEdDxPdDspVnRbRHRdPU5bRHRdO2Zvcig7ZnQtLTspVnRbRHQrK109YXJndW1lbnRzWysraXRdO3JldHVybiBXcyhvZSxWP1Q6dGhpcyxWdCl9cmV0dXJuIEp9ZnVuY3Rpb24gcHB0KG0pe3JldHVybiBmdW5jdGlvbih2LFQsTil7cmV0dXJuIE4mJnR5cGVvZiBOIT0ibnVtYmVyIiYmUmEodixULE4pJiYoVD1OPWUpLHY9ZnAodiksVD09PWU/KFQ9dix2PTApOlQ9ZnAoVCksTj1OPT09ZT92PFQ/MTotMTpmcChOKSxFbWUodixULE4sbSl9fWZ1bmN0aW9uIGRJKG0pe3JldHVybiBmdW5jdGlvbih2LFQpe3JldHVybiB0eXBlb2Ygdj09InN0cmluZyImJnR5cGVvZiBUPT0ic3RyaW5nInx8KHY9S2wodiksVD1LbChUKSksbSh2LFQpfX1mdW5jdGlvbiBkcHQobSx2LFQsTixWLFksSixpdCxmdCxEdCl7dmFyIE90PXYmeSxWdD1PdD9KOmUsb2U9T3Q/ZTpKLFRlPU90P1k6ZSxOZT1PdD9lOlk7dnw9T3Q/YjpTLHYmPX4oT3Q/UzpiKSx2Jl98fCh2Jj1+KGR8ZykpO3ZhciBlcj1bbSx2LFYsVGUsVnQsTmUsb2UsaXQsZnQsRHRdLERlPVQuYXBwbHkoZSxlcik7cmV0dXJuIGpxKG0pJiZUcHQoRGUsZXIpLERlLnBsYWNlaG9sZGVyPU4sQ3B0KERlLG0sdil9ZnVuY3Rpb24gSHEobSl7dmFyIHY9amlbbV07cmV0dXJuIGZ1bmN0aW9uKFQsTil7aWYoVD1LbChUKSxOPU49PW51bGw/MDpyYShRZShOKSwyOTIpLE4mJkNmdChUKSl7dmFyIFY9KG9uKFQpKyJlIikuc3BsaXQoImUiKSxZPXYoVlswXSsiZSIrKCtWWzFdK04pKTtyZXR1cm4gVj0ob24oWSkrImUiKS5zcGxpdCgiZSIpLCsoVlswXSsiZSIrKCtWWzFdLU4pKX1yZXR1cm4gdihUKX19dmFyIFZtZT1feCYmMS9xNihuZXcgX3goWywtMF0pKVsxXT09ej9mdW5jdGlvbihtKXtyZXR1cm4gbmV3IF94KG0pfTpsRztmdW5jdGlvbiBtcHQobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3ZhciBUPW5hKHYpO3JldHVybiBUPT1xP2dxKHYpOlQ9PUxlP2lkZSh2KTpLcGUodixtKHYpKX19ZnVuY3Rpb24gbHAobSx2LFQsTixWLFksSixpdCl7dmFyIGZ0PXYmZztpZighZnQmJnR5cGVvZiBtIT0iZnVuY3Rpb24iKXRocm93IG5ldyBXbChpKTt2YXIgRHQ9Tj9OLmxlbmd0aDowO2lmKER0fHwodiY9fihifFMpLE49Vj1lKSxKPUo9PT1lP0o6WGkoUWUoSiksMCksaXQ9aXQ9PT1lP2l0OlFlKGl0KSxEdC09Vj9WLmxlbmd0aDowLHYmUyl7dmFyIE90PU4sVnQ9VjtOPVY9ZX12YXIgb2U9ZnQ/ZTpxcShtKSxUZT1bbSx2LFQsTixWLE90LFZ0LFksSixpdF07aWYob2UmJnJnZShUZSxvZSksbT1UZVswXSx2PVRlWzFdLFQ9VGVbMl0sTj1UZVszXSxWPVRlWzRdLGl0PVRlWzldPVRlWzldPT09ZT9mdD8wOm0ubGVuZ3RoOlhpKFRlWzldLUR0LDApLCFpdCYmdiYoeXx4KSYmKHYmPX4oeXx4KSksIXZ8fHY9PWQpdmFyIE5lPUZtZShtLHYsVCk7ZWxzZSB2PT15fHx2PT14P05lPUJtZShtLHYsaXQpOih2PT1ifHx2PT0oZHxiKSkmJiFWLmxlbmd0aD9OZT1IbWUobSx2LFQsTik6TmU9aEkuYXBwbHkoZSxUZSk7dmFyIGVyPW9lPyRmdDpUcHQ7cmV0dXJuIENwdChlcihOZSxUZSksbSx2KX1mdW5jdGlvbiBncHQobSx2LFQsTil7cmV0dXJuIG09PT1lfHxydShtLGd4W1RdKSYmIXVuLmNhbGwoTixUKT92Om19ZnVuY3Rpb24gX3B0KG0sdixULE4sVixZKXtyZXR1cm4gZWkobSkmJmVpKHYpJiYoWS5zZXQodixtKSxzSShtLHYsZSxfcHQsWSksWS5kZWxldGUodikpLG19ZnVuY3Rpb24gVW1lKG0pe3JldHVybiBGTShtKT9lOm19ZnVuY3Rpb24geXB0KG0sdixULE4sVixZKXt2YXIgSj1UJmYsaXQ9bS5sZW5ndGgsZnQ9di5sZW5ndGg7aWYoaXQhPWZ0JiYhKEomJmZ0Pml0KSlyZXR1cm4hMTt2YXIgRHQ9WS5nZXQobSksT3Q9WS5nZXQodik7aWYoRHQmJk90KXJldHVybiBEdD09diYmT3Q9PW07dmFyIFZ0PS0xLG9lPSEwLFRlPVQmcD9uZXcgbl86ZTtmb3IoWS5zZXQobSx2KSxZLnNldCh2LG0pOysrVnQ8aXQ7KXt2YXIgTmU9bVtWdF0sZXI9dltWdF07aWYoTil2YXIgRGU9Sj9OKGVyLE5lLFZ0LHYsbSxZKTpOKE5lLGVyLFZ0LG0sdixZKTtpZihEZSE9PWUpe2lmKERlKWNvbnRpbnVlO29lPSExO2JyZWFrfWlmKFRlKXtpZighdXEodixmdW5jdGlvbihwcix5cil7aWYoIU1NKFRlLHlyKSYmKE5lPT09cHJ8fFYoTmUscHIsVCxOLFkpKSlyZXR1cm4gVGUucHVzaCh5cil9KSl7b2U9ITE7YnJlYWt9fWVsc2UgaWYoIShOZT09PWVyfHxWKE5lLGVyLFQsTixZKSkpe29lPSExO2JyZWFrfX1yZXR1cm4gWS5kZWxldGUobSksWS5kZWxldGUodiksb2V9ZnVuY3Rpb24gcW1lKG0sdixULE4sVixZLEope3N3aXRjaChUKXtjYXNlIGhlOmlmKG0uYnl0ZUxlbmd0aCE9di5ieXRlTGVuZ3RofHxtLmJ5dGVPZmZzZXQhPXYuYnl0ZU9mZnNldClyZXR1cm4hMTttPW0uYnVmZmVyLHY9di5idWZmZXI7Y2FzZSAkdDpyZXR1cm4hKG0uYnl0ZUxlbmd0aCE9di5ieXRlTGVuZ3RofHwhWShuZXcgJDYobSksbmV3ICQ2KHYpKSk7Y2FzZSBLdDpjYXNlIF90OmNhc2UgcHQ6cmV0dXJuIHJ1KCttLCt2KTtjYXNlIFg6cmV0dXJuIG0ubmFtZT09di5uYW1lJiZtLm1lc3NhZ2U9PXYubWVzc2FnZTtjYXNlIGVlOmNhc2UgYXI6cmV0dXJuIG09PXYrIiI7Y2FzZSBxOnZhciBpdD1ncTtjYXNlIExlOnZhciBmdD1OJmY7aWYoaXR8fChpdD1xNiksbS5zaXplIT12LnNpemUmJiFmdClyZXR1cm4hMTt2YXIgRHQ9Si5nZXQobSk7aWYoRHQpcmV0dXJuIER0PT12O058PXAsSi5zZXQobSx2KTt2YXIgT3Q9eXB0KGl0KG0pLGl0KHYpLE4sVixZLEopO3JldHVybiBKLmRlbGV0ZShtKSxPdDtjYXNlIGZyOmlmKFBNKXJldHVybiBQTS5jYWxsKG0pPT1QTS5jYWxsKHYpfXJldHVybiExfWZ1bmN0aW9uIEdtZShtLHYsVCxOLFYsWSl7dmFyIEo9VCZmLGl0PVZxKG0pLGZ0PWl0Lmxlbmd0aCxEdD1WcSh2KSxPdD1EdC5sZW5ndGg7aWYoZnQhPU90JiYhSilyZXR1cm4hMTtmb3IodmFyIFZ0PWZ0O1Z0LS07KXt2YXIgb2U9aXRbVnRdO2lmKCEoSj9vZSBpbiB2OnVuLmNhbGwodixvZSkpKXJldHVybiExfXZhciBUZT1ZLmdldChtKSxOZT1ZLmdldCh2KTtpZihUZSYmTmUpcmV0dXJuIFRlPT12JiZOZT09bTt2YXIgZXI9ITA7WS5zZXQobSx2KSxZLnNldCh2LG0pO2Zvcih2YXIgRGU9SjsrK1Z0PGZ0Oyl7b2U9aXRbVnRdO3ZhciBwcj1tW29lXSx5cj12W29lXTtpZihOKXZhciAkcz1KP04oeXIscHIsb2UsdixtLFkpOk4ocHIseXIsb2UsbSx2LFkpO2lmKCEoJHM9PT1lP3ByPT09eXJ8fFYocHIseXIsVCxOLFkpOiRzKSl7ZXI9ITE7YnJlYWt9RGV8fChEZT1vZT09ImNvbnN0cnVjdG9yIil9aWYoZXImJiFEZSl7dmFyIE5hPW0uY29uc3RydWN0b3IsS3M9di5jb25zdHJ1Y3RvcjtOYSE9S3MmJiJjb25zdHJ1Y3RvciJpbiBtJiYiY29uc3RydWN0b3IiaW4gdiYmISh0eXBlb2YgTmE9PSJmdW5jdGlvbiImJk5hIGluc3RhbmNlb2YgTmEmJnR5cGVvZiBLcz09ImZ1bmN0aW9uIiYmS3MgaW5zdGFuY2VvZiBLcykmJihlcj0hMSl9cmV0dXJuIFkuZGVsZXRlKG0pLFkuZGVsZXRlKHYpLGVyfWZ1bmN0aW9uIGNwKG0pe3JldHVybiAkcShNcHQobSxlLFJwdCksbSsiIil9ZnVuY3Rpb24gVnEobSl7cmV0dXJuIEZmdChtLHBvLFdxKX1mdW5jdGlvbiBVcShtKXtyZXR1cm4gRmZ0KG0sZ3MsdnB0KX12YXIgcXE9ZUk/ZnVuY3Rpb24obSl7cmV0dXJuIGVJLmdldChtKX06bEc7ZnVuY3Rpb24gbUkobSl7Zm9yKHZhciB2PW0ubmFtZSsiIixUPXl4W3ZdLE49dW4uY2FsbCh5eCx2KT9ULmxlbmd0aDowO04tLTspe3ZhciBWPVRbTl0sWT1WLmZ1bmM7aWYoWT09bnVsbHx8WT09bSlyZXR1cm4gVi5uYW1lfXJldHVybiB2fWZ1bmN0aW9uIHd4KG0pe3ZhciB2PXVuLmNhbGwoRywicGxhY2Vob2xkZXIiKT9HOm07cmV0dXJuIHYucGxhY2Vob2xkZXJ9ZnVuY3Rpb24ga2UoKXt2YXIgbT1HLml0ZXJhdGVlfHxhRztyZXR1cm4gbT1tPT09YUc/VmZ0Om0sYXJndW1lbnRzLmxlbmd0aD9tKGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0pOm19ZnVuY3Rpb24gZ0kobSx2KXt2YXIgVD1tLl9fZGF0YV9fO3JldHVybiBKbWUodik/VFt0eXBlb2Ygdj09InN0cmluZyI/InN0cmluZyI6Imhhc2giXTpULm1hcH1mdW5jdGlvbiBHcShtKXtmb3IodmFyIHY9cG8obSksVD12Lmxlbmd0aDtULS07KXt2YXIgTj12W1RdLFY9bVtOXTt2W1RdPVtOLFYsd3B0KFYpXX1yZXR1cm4gdn1mdW5jdGlvbiBhXyhtLHYpe3ZhciBUPWVkZShtLHYpO3JldHVybiBIZnQoVCk/VDplfWZ1bmN0aW9uIFdtZShtKXt2YXIgdj11bi5jYWxsKG0sZV8pLFQ9bVtlX107dHJ5e21bZV9dPWU7dmFyIE49ITB9Y2F0Y2goWSl7fXZhciBWPWo2LmNhbGwobSk7cmV0dXJuIE4mJih2P21bZV9dPVQ6ZGVsZXRlIG1bZV9dKSxWfXZhciBXcT15cT9mdW5jdGlvbihtKXtyZXR1cm4gbT09bnVsbD9bXToobT12bihtKSxwbSh5cShtKSxmdW5jdGlvbih2KXtyZXR1cm4gRWZ0LmNhbGwobSx2KX0pKX06Y0csdnB0PXlxP2Z1bmN0aW9uKG0pe2Zvcih2YXIgdj1bXTttOylkbSh2LFdxKG0pKSxtPUs2KG0pO3JldHVybiB2fTpjRyxuYT1rYTsodnEmJm5hKG5ldyB2cShuZXcgQXJyYXlCdWZmZXIoMSkpKSE9aGV8fFRNJiZuYShuZXcgVE0pIT1xfHx4cSYmbmEoeHEucmVzb2x2ZSgpKSE9a3R8fF94JiZuYShuZXcgX3gpIT1MZXx8Q00mJm5hKG5ldyBDTSkhPSQpJiYobmE9ZnVuY3Rpb24obSl7dmFyIHY9a2EobSksVD12PT13dD9tLmNvbnN0cnVjdG9yOmUsTj1UP3NfKFQpOiIiO2lmKE4pc3dpdGNoKE4pe2Nhc2UgQ2RlOnJldHVybiBoZTtjYXNlIEFkZTpyZXR1cm4gcTtjYXNlIFBkZTpyZXR1cm4ga3Q7Y2FzZSBJZGU6cmV0dXJuIExlO2Nhc2UgTGRlOnJldHVybiAkfXJldHVybiB2fSk7ZnVuY3Rpb24gWW1lKG0sdixUKXtmb3IodmFyIE49LTEsVj1ULmxlbmd0aDsrK048Vjspe3ZhciBZPVRbTl0sSj1ZLnNpemU7c3dpdGNoKFkudHlwZSl7Y2FzZSJkcm9wIjptKz1KO2JyZWFrO2Nhc2UiZHJvcFJpZ2h0Ijp2LT1KO2JyZWFrO2Nhc2UidGFrZSI6dj1yYSh2LG0rSik7YnJlYWs7Y2FzZSJ0YWtlUmlnaHQiOm09WGkobSx2LUopO2JyZWFrfX1yZXR1cm57c3RhcnQ6bSxlbmQ6dn19ZnVuY3Rpb24gam1lKG0pe3ZhciB2PW0ubWF0Y2goRXQpO3JldHVybiB2P3ZbMV0uc3BsaXQoeHQpOltdfWZ1bmN0aW9uIHhwdChtLHYsVCl7dj14bSh2LG0pO2Zvcih2YXIgTj0tMSxWPXYubGVuZ3RoLFk9ITE7KytOPFY7KXt2YXIgSj1faCh2W05dKTtpZighKFk9bSE9bnVsbCYmVChtLEopKSlicmVhazttPW1bSl19cmV0dXJuIFl8fCsrTiE9Vj9ZOihWPW09PW51bGw/MDptLmxlbmd0aCwhIVYmJlNJKFYpJiZ1cChKLFYpJiYoJGUobSl8fGxfKG0pKSl9ZnVuY3Rpb24gWG1lKG0pe3ZhciB2PW0ubGVuZ3RoLFQ9bmV3IG0uY29uc3RydWN0b3Iodik7cmV0dXJuIHYmJnR5cGVvZiBtWzBdPT0ic3RyaW5nIiYmdW4uY2FsbChtLCJpbmRleCIpJiYoVC5pbmRleD1tLmluZGV4LFQuaW5wdXQ9bS5pbnB1dCksVH1mdW5jdGlvbiBicHQobSl7cmV0dXJuIHR5cGVvZiBtLmNvbnN0cnVjdG9yPT0iZnVuY3Rpb24iJiYhT00obSk/dngoSzYobSkpOnt9fWZ1bmN0aW9uICRtZShtLHYsVCl7dmFyIE49bS5jb25zdHJ1Y3Rvcjtzd2l0Y2godil7Y2FzZSAkdDpyZXR1cm4gRnEobSk7Y2FzZSBLdDpjYXNlIF90OnJldHVybiBuZXcgTigrbSk7Y2FzZSBoZTpyZXR1cm4ga21lKG0sVCk7Y2FzZSBUdDpjYXNlIGJlOmNhc2UgbnQ6Y2FzZSBDdDpjYXNlIFd0OmNhc2UgZmU6Y2FzZSBhdDpjYXNlIHNlOmNhc2UgUXQ6cmV0dXJuIG5wdChtLFQpO2Nhc2UgcTpyZXR1cm4gbmV3IE47Y2FzZSBwdDpjYXNlIGFyOnJldHVybiBuZXcgTihtKTtjYXNlIGVlOnJldHVybiBSbWUobSk7Y2FzZSBMZTpyZXR1cm4gbmV3IE47Y2FzZSBmcjpyZXR1cm4gTm1lKG0pfX1mdW5jdGlvbiBLbWUobSx2KXt2YXIgVD12Lmxlbmd0aDtpZighVClyZXR1cm4gbTt2YXIgTj1ULTE7cmV0dXJuIHZbTl09KFQ+MT8iJiAiOiIiKSt2W05dLHY9di5qb2luKFQ+Mj8iLCAiOiIgIiksbS5yZXBsYWNlKGd0LGB7Ci8qIFt3cmFwcGVkIHdpdGggYCt2K2BdICovCmApfWZ1bmN0aW9uIFptZShtKXtyZXR1cm4gJGUobSl8fGxfKG0pfHwhIShUZnQmJm0mJm1bVGZ0XSl9ZnVuY3Rpb24gdXAobSx2KXt2YXIgVD10eXBlb2YgbTtyZXR1cm4gdj12PT1udWxsP1U6diwhIXYmJihUPT0ibnVtYmVyInx8VCE9InN5bWJvbCImJmlwLnRlc3QobSkpJiZtPi0xJiZtJTE9PTAmJm08dn1mdW5jdGlvbiBSYShtLHYsVCl7aWYoIWVpKFQpKXJldHVybiExO3ZhciBOPXR5cGVvZiB2O3JldHVybihOPT0ibnVtYmVyIj9tcyhUKSYmdXAodixULmxlbmd0aCk6Tj09InN0cmluZyImJnYgaW4gVCk/cnUoVFt2XSxtKTohMX1mdW5jdGlvbiBZcShtLHYpe2lmKCRlKG0pKXJldHVybiExO3ZhciBUPXR5cGVvZiBtO3JldHVybiBUPT0ibnVtYmVyInx8VD09InN5bWJvbCJ8fFQ9PSJib29sZWFuInx8bT09bnVsbHx8WHMobSk/ITA6dW0udGVzdChtKXx8IWN4LnRlc3QobSl8fHYhPW51bGwmJm0gaW4gdm4odil9ZnVuY3Rpb24gSm1lKG0pe3ZhciB2PXR5cGVvZiBtO3JldHVybiB2PT0ic3RyaW5nInx8dj09Im51bWJlciJ8fHY9PSJzeW1ib2wifHx2PT0iYm9vbGVhbiI/bSE9PSJfX3Byb3RvX18iOm09PT1udWxsfWZ1bmN0aW9uIGpxKG0pe3ZhciB2PW1JKG0pLFQ9R1t2XTtpZih0eXBlb2YgVCE9ImZ1bmN0aW9uInx8ISh2IGluIGdyLnByb3RvdHlwZSkpcmV0dXJuITE7aWYobT09PVQpcmV0dXJuITA7dmFyIE49cXEoVCk7cmV0dXJuISFOJiZtPT09TlswXX1mdW5jdGlvbiBRbWUobSl7cmV0dXJuISF3ZnQmJndmdCBpbiBtfXZhciB0Z2U9VzY/aHA6dUc7ZnVuY3Rpb24gT00obSl7dmFyIHY9bSYmbS5jb25zdHJ1Y3RvcixUPXR5cGVvZiB2PT0iZnVuY3Rpb24iJiZ2LnByb3RvdHlwZXx8Z3g7cmV0dXJuIG09PT1UfWZ1bmN0aW9uIHdwdChtKXtyZXR1cm4gbT09PW0mJiFlaShtKX1mdW5jdGlvbiBTcHQobSx2KXtyZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIFQ9PW51bGw/ITE6VFttXT09PXYmJih2IT09ZXx8bSBpbiB2bihUKSl9fWZ1bmN0aW9uIGVnZShtKXt2YXIgdj1iSShtLGZ1bmN0aW9uKE4pe3JldHVybiBULnNpemU9PT1zJiZULmNsZWFyKCksTn0pLFQ9di5jYWNoZTtyZXR1cm4gdn1mdW5jdGlvbiByZ2UobSx2KXt2YXIgVD1tWzFdLE49dlsxXSxWPVR8TixZPVY8KGR8Z3xDKSxKPU49PUMmJlQ9PXl8fE49PUMmJlQ9PVAmJm1bN10ubGVuZ3RoPD12WzhdfHxOPT0oQ3xQKSYmdls3XS5sZW5ndGg8PXZbOF0mJlQ9PXk7aWYoIShZfHxKKSlyZXR1cm4gbTtOJmQmJihtWzJdPXZbMl0sVnw9VCZkPzA6Xyk7dmFyIGl0PXZbM107aWYoaXQpe3ZhciBmdD1tWzNdO21bM109ZnQ/b3B0KGZ0LGl0LHZbNF0pOml0LG1bNF09ZnQ/bW0obVszXSxsKTp2WzRdfXJldHVybiBpdD12WzVdLGl0JiYoZnQ9bVs1XSxtWzVdPWZ0P2FwdChmdCxpdCx2WzZdKTppdCxtWzZdPWZ0P21tKG1bNV0sbCk6dls2XSksaXQ9dls3XSxpdCYmKG1bN109aXQpLE4mQyYmKG1bOF09bVs4XT09bnVsbD92WzhdOnJhKG1bOF0sdls4XSkpLG1bOV09PW51bGwmJihtWzldPXZbOV0pLG1bMF09dlswXSxtWzFdPVYsbX1mdW5jdGlvbiBuZ2UobSl7dmFyIHY9W107aWYobSE9bnVsbClmb3IodmFyIFQgaW4gdm4obSkpdi5wdXNoKFQpO3JldHVybiB2fWZ1bmN0aW9uIGlnZShtKXtyZXR1cm4gajYuY2FsbChtKX1mdW5jdGlvbiBNcHQobSx2LFQpe3JldHVybiB2PVhpKHY9PT1lP20ubGVuZ3RoLTE6diwwKSxmdW5jdGlvbigpe2Zvcih2YXIgTj1hcmd1bWVudHMsVj0tMSxZPVhpKE4ubGVuZ3RoLXYsMCksSj12dChZKTsrK1Y8WTspSltWXT1OW3YrVl07Vj0tMTtmb3IodmFyIGl0PXZ0KHYrMSk7KytWPHY7KWl0W1ZdPU5bVl07cmV0dXJuIGl0W3ZdPVQoSiksV3MobSx0aGlzLGl0KX19ZnVuY3Rpb24gRXB0KG0sdil7cmV0dXJuIHYubGVuZ3RoPDI/bTpvXyhtLFhsKHYsMCwtMSkpfWZ1bmN0aW9uIG9nZShtLHYpe2Zvcih2YXIgVD1tLmxlbmd0aCxOPXJhKHYubGVuZ3RoLFQpLFY9ZHMobSk7Ti0tOyl7dmFyIFk9dltOXTttW05dPXVwKFksVCk/VltZXTplfXJldHVybiBtfWZ1bmN0aW9uIFhxKG0sdil7aWYoISh2PT09ImNvbnN0cnVjdG9yIiYmdHlwZW9mIG1bdl09PSJmdW5jdGlvbiIpJiZ2IT0iX19wcm90b19fIilyZXR1cm4gbVt2XX12YXIgVHB0PUFwdCgkZnQpLHpNPXhkZXx8ZnVuY3Rpb24obSx2KXtyZXR1cm4gZm8uc2V0VGltZW91dChtLHYpfSwkcT1BcHQoQW1lKTtmdW5jdGlvbiBDcHQobSx2LFQpe3ZhciBOPXYrIiI7cmV0dXJuICRxKG0sS21lKE4sYWdlKGptZShOKSxUKSkpfWZ1bmN0aW9uIEFwdChtKXt2YXIgdj0wLFQ9MDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgTj1NZGUoKSxWPUktKE4tVCk7aWYoVD1OLFY+MCl7aWYoKyt2Pj1CKXJldHVybiBhcmd1bWVudHNbMF19ZWxzZSB2PTA7cmV0dXJuIG0uYXBwbHkoZSxhcmd1bWVudHMpfX1mdW5jdGlvbiBfSShtLHYpe3ZhciBUPS0xLE49bS5sZW5ndGgsVj1OLTE7Zm9yKHY9dj09PWU/Tjp2OysrVDx2Oyl7dmFyIFk9THEoVCxWKSxKPW1bWV07bVtZXT1tW1RdLG1bVF09Sn1yZXR1cm4gbS5sZW5ndGg9dixtfXZhciBQcHQ9ZWdlKGZ1bmN0aW9uKG0pe3ZhciB2PVtdO3JldHVybiBtLmNoYXJDb2RlQXQoMCk9PT00NiYmdi5wdXNoKCIiKSxtLnJlcGxhY2UoUTAsZnVuY3Rpb24oVCxOLFYsWSl7di5wdXNoKFY/WS5yZXBsYWNlKFVlLCIkMSIpOk58fFQpfSksdn0pO2Z1bmN0aW9uIF9oKG0pe2lmKHR5cGVvZiBtPT0ic3RyaW5nInx8WHMobSkpcmV0dXJuIG07dmFyIHY9bSsiIjtyZXR1cm4gdj09IjAiJiYxL209PS16PyItMCI6dn1mdW5jdGlvbiBzXyhtKXtpZihtIT1udWxsKXt0cnl7cmV0dXJuIFk2LmNhbGwobSl9Y2F0Y2godil7fXRyeXtyZXR1cm4gbSsiIn1jYXRjaCh2KXt9fXJldHVybiIifWZ1bmN0aW9uIGFnZShtLHYpe3JldHVybiBHbChTdCxmdW5jdGlvbihUKXt2YXIgTj0iXy4iK1RbMF07diZUWzFdJiYhVjYobSxOKSYmbS5wdXNoKE4pfSksbS5zb3J0KCl9ZnVuY3Rpb24gSXB0KG0pe2lmKG0gaW5zdGFuY2VvZiBncilyZXR1cm4gbS5jbG9uZSgpO3ZhciB2PW5ldyBZbChtLl9fd3JhcHBlZF9fLG0uX19jaGFpbl9fKTtyZXR1cm4gdi5fX2FjdGlvbnNfXz1kcyhtLl9fYWN0aW9uc19fKSx2Ll9faW5kZXhfXz1tLl9faW5kZXhfXyx2Ll9fdmFsdWVzX189bS5fX3ZhbHVlc19fLHZ9ZnVuY3Rpb24gc2dlKG0sdixUKXsoVD9SYShtLHYsVCk6dj09PWUpP3Y9MTp2PVhpKFFlKHYpLDApO3ZhciBOPW09PW51bGw/MDptLmxlbmd0aDtpZighTnx8djwxKXJldHVybltdO2Zvcih2YXIgVj0wLFk9MCxKPXZ0KFE2KE4vdikpO1Y8TjspSltZKytdPVhsKG0sVixWKz12KTtyZXR1cm4gSn1mdW5jdGlvbiBsZ2UobSl7Zm9yKHZhciB2PS0xLFQ9bT09bnVsbD8wOm0ubGVuZ3RoLE49MCxWPVtdOysrdjxUOyl7dmFyIFk9bVt2XTtZJiYoVltOKytdPVkpfXJldHVybiBWfWZ1bmN0aW9uIGNnZSgpe3ZhciBtPWFyZ3VtZW50cy5sZW5ndGg7aWYoIW0pcmV0dXJuW107Zm9yKHZhciB2PXZ0KG0tMSksVD1hcmd1bWVudHNbMF0sTj1tO04tLTspdltOLTFdPWFyZ3VtZW50c1tOXTtyZXR1cm4gZG0oJGUoVCk/ZHMoVCk6W1RdLFJvKHYsMSkpfXZhciB1Z2U9bnIoZnVuY3Rpb24obSx2KXtyZXR1cm4geGkobSk/TE0obSxSbyh2LDEseGksITApKTpbXX0pLGhnZT1ucihmdW5jdGlvbihtLHYpe3ZhciBUPSRsKHYpO3JldHVybiB4aShUKSYmKFQ9ZSkseGkobSk/TE0obSxSbyh2LDEseGksITApLGtlKFQsMikpOltdfSksZmdlPW5yKGZ1bmN0aW9uKG0sdil7dmFyIFQ9JGwodik7cmV0dXJuIHhpKFQpJiYoVD1lKSx4aShtKT9MTShtLFJvKHYsMSx4aSwhMCksZSxUKTpbXX0pO2Z1bmN0aW9uIHBnZShtLHYsVCl7dmFyIE49bT09bnVsbD8wOm0ubGVuZ3RoO3JldHVybiBOPyh2PVR8fHY9PT1lPzE6UWUodiksWGwobSx2PDA/MDp2LE4pKTpbXX1mdW5jdGlvbiBkZ2UobSx2LFQpe3ZhciBOPW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gTj8odj1UfHx2PT09ZT8xOlFlKHYpLHY9Ti12LFhsKG0sMCx2PDA/MDp2KSk6W119ZnVuY3Rpb24gbWdlKG0sdil7cmV0dXJuIG0mJm0ubGVuZ3RoP2NJKG0sa2UodiwzKSwhMCwhMCk6W119ZnVuY3Rpb24gZ2dlKG0sdil7cmV0dXJuIG0mJm0ubGVuZ3RoP2NJKG0sa2UodiwzKSwhMCk6W119ZnVuY3Rpb24gX2dlKG0sdixULE4pe3ZhciBWPW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gVj8oVCYmdHlwZW9mIFQhPSJudW1iZXIiJiZSYShtLHYsVCkmJihUPTAsTj1WKSxjbWUobSx2LFQsTikpOltdfWZ1bmN0aW9uIExwdChtLHYsVCl7dmFyIE49bT09bnVsbD8wOm0ubGVuZ3RoO2lmKCFOKXJldHVybi0xO3ZhciBWPVQ9PW51bGw/MDpRZShUKTtyZXR1cm4gVjwwJiYoVj1YaShOK1YsMCkpLFU2KG0sa2UodiwzKSxWKX1mdW5jdGlvbiBrcHQobSx2LFQpe3ZhciBOPW09PW51bGw/MDptLmxlbmd0aDtpZighTilyZXR1cm4tMTt2YXIgVj1OLTE7cmV0dXJuIFQhPT1lJiYoVj1RZShUKSxWPVQ8MD9YaShOK1YsMCk6cmEoVixOLTEpKSxVNihtLGtlKHYsMyksViwhMCl9ZnVuY3Rpb24gUnB0KG0pe3ZhciB2PW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gdj9SbyhtLDEpOltdfWZ1bmN0aW9uIHlnZShtKXt2YXIgdj1tPT1udWxsPzA6bS5sZW5ndGg7cmV0dXJuIHY/Um8obSx6KTpbXX1mdW5jdGlvbiB2Z2UobSx2KXt2YXIgVD1tPT1udWxsPzA6bS5sZW5ndGg7cmV0dXJuIFQ/KHY9dj09PWU/MTpRZSh2KSxSbyhtLHYpKTpbXX1mdW5jdGlvbiB4Z2UobSl7Zm9yKHZhciB2PS0xLFQ9bT09bnVsbD8wOm0ubGVuZ3RoLE49e307Kyt2PFQ7KXt2YXIgVj1tW3ZdO05bVlswXV09VlsxXX1yZXR1cm4gTn1mdW5jdGlvbiBOcHQobSl7cmV0dXJuIG0mJm0ubGVuZ3RoP21bMF06ZX1mdW5jdGlvbiBiZ2UobSx2LFQpe3ZhciBOPW09PW51bGw/MDptLmxlbmd0aDtpZighTilyZXR1cm4tMTt2YXIgVj1UPT1udWxsPzA6UWUoVCk7cmV0dXJuIFY8MCYmKFY9WGkoTitWLDApKSxweChtLHYsVil9ZnVuY3Rpb24gd2dlKG0pe3ZhciB2PW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gdj9YbChtLDAsLTEpOltdfXZhciBTZ2U9bnIoZnVuY3Rpb24obSl7dmFyIHY9S24obSxPcSk7cmV0dXJuIHYubGVuZ3RoJiZ2WzBdPT09bVswXT9UcSh2KTpbXX0pLE1nZT1ucihmdW5jdGlvbihtKXt2YXIgdj0kbChtKSxUPUtuKG0sT3EpO3JldHVybiB2PT09JGwoVCk/dj1lOlQucG9wKCksVC5sZW5ndGgmJlRbMF09PT1tWzBdP1RxKFQsa2UodiwyKSk6W119KSxFZ2U9bnIoZnVuY3Rpb24obSl7dmFyIHY9JGwobSksVD1LbihtLE9xKTtyZXR1cm4gdj10eXBlb2Ygdj09ImZ1bmN0aW9uIj92OmUsdiYmVC5wb3AoKSxULmxlbmd0aCYmVFswXT09PW1bMF0/VHEoVCxlLHYpOltdfSk7ZnVuY3Rpb24gVGdlKG0sdil7cmV0dXJuIG09PW51bGw/IiI6d2RlLmNhbGwobSx2KX1mdW5jdGlvbiAkbChtKXt2YXIgdj1tPT1udWxsPzA6bS5sZW5ndGg7cmV0dXJuIHY/bVt2LTFdOmV9ZnVuY3Rpb24gQ2dlKG0sdixUKXt2YXIgTj1tPT1udWxsPzA6bS5sZW5ndGg7aWYoIU4pcmV0dXJuLTE7dmFyIFY9TjtyZXR1cm4gVCE9PWUmJihWPVFlKFQpLFY9VjwwP1hpKE4rViwwKTpyYShWLE4tMSkpLHY9PT12P2FkZShtLHYsVik6VTYobSxkZnQsViwhMCl9ZnVuY3Rpb24gQWdlKG0sdil7cmV0dXJuIG0mJm0ubGVuZ3RoP1dmdChtLFFlKHYpKTplfXZhciBQZ2U9bnIoRHB0KTtmdW5jdGlvbiBEcHQobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGgmJnYmJnYubGVuZ3RoP0lxKG0sdik6bX1mdW5jdGlvbiBJZ2UobSx2LFQpe3JldHVybiBtJiZtLmxlbmd0aCYmdiYmdi5sZW5ndGg/SXEobSx2LGtlKFQsMikpOm19ZnVuY3Rpb24gTGdlKG0sdixUKXtyZXR1cm4gbSYmbS5sZW5ndGgmJnYmJnYubGVuZ3RoP0lxKG0sdixlLFQpOm19dmFyIGtnZT1jcChmdW5jdGlvbihtLHYpe3ZhciBUPW09PW51bGw/MDptLmxlbmd0aCxOPXdxKG0sdik7cmV0dXJuIFhmdChtLEtuKHYsZnVuY3Rpb24oVil7cmV0dXJuIHVwKFYsVCk/K1Y6Vn0pLnNvcnQoaXB0KSksTn0pO2Z1bmN0aW9uIFJnZShtLHYpe3ZhciBUPVtdO2lmKCEobSYmbS5sZW5ndGgpKXJldHVybiBUO3ZhciBOPS0xLFY9W10sWT1tLmxlbmd0aDtmb3Iodj1rZSh2LDMpOysrTjxZOyl7dmFyIEo9bVtOXTt2KEosTixtKSYmKFQucHVzaChKKSxWLnB1c2goTikpfXJldHVybiBYZnQobSxWKSxUfWZ1bmN0aW9uIEtxKG0pe3JldHVybiBtPT1udWxsP206VGRlLmNhbGwobSl9ZnVuY3Rpb24gTmdlKG0sdixUKXt2YXIgTj1tPT1udWxsPzA6bS5sZW5ndGg7cmV0dXJuIE4/KFQmJnR5cGVvZiBUIT0ibnVtYmVyIiYmUmEobSx2LFQpPyh2PTAsVD1OKToodj12PT1udWxsPzA6UWUodiksVD1UPT09ZT9OOlFlKFQpKSxYbChtLHYsVCkpOltdfWZ1bmN0aW9uIERnZShtLHYpe3JldHVybiBsSShtLHYpfWZ1bmN0aW9uIE9nZShtLHYsVCl7cmV0dXJuIFJxKG0sdixrZShULDIpKX1mdW5jdGlvbiB6Z2UobSx2KXt2YXIgVD1tPT1udWxsPzA6bS5sZW5ndGg7aWYoVCl7dmFyIE49bEkobSx2KTtpZihOPFQmJnJ1KG1bTl0sdikpcmV0dXJuIE59cmV0dXJuLTF9ZnVuY3Rpb24gRmdlKG0sdil7cmV0dXJuIGxJKG0sdiwhMCl9ZnVuY3Rpb24gQmdlKG0sdixUKXtyZXR1cm4gUnEobSx2LGtlKFQsMiksITApfWZ1bmN0aW9uIEhnZShtLHYpe3ZhciBUPW09PW51bGw/MDptLmxlbmd0aDtpZihUKXt2YXIgTj1sSShtLHYsITApLTE7aWYocnUobVtOXSx2KSlyZXR1cm4gTn1yZXR1cm4tMX1mdW5jdGlvbiBWZ2UobSl7cmV0dXJuIG0mJm0ubGVuZ3RoP0tmdChtKTpbXX1mdW5jdGlvbiBVZ2UobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGg/S2Z0KG0sa2UodiwyKSk6W119ZnVuY3Rpb24gcWdlKG0pe3ZhciB2PW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gdj9YbChtLDEsdik6W119ZnVuY3Rpb24gR2dlKG0sdixUKXtyZXR1cm4gbSYmbS5sZW5ndGg/KHY9VHx8dj09PWU/MTpRZSh2KSxYbChtLDAsdjwwPzA6dikpOltdfWZ1bmN0aW9uIFdnZShtLHYsVCl7dmFyIE49bT09bnVsbD8wOm0ubGVuZ3RoO3JldHVybiBOPyh2PVR8fHY9PT1lPzE6UWUodiksdj1OLXYsWGwobSx2PDA/MDp2LE4pKTpbXX1mdW5jdGlvbiBZZ2UobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGg/Y0kobSxrZSh2LDMpLCExLCEwKTpbXX1mdW5jdGlvbiBqZ2UobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGg/Y0kobSxrZSh2LDMpKTpbXX12YXIgWGdlPW5yKGZ1bmN0aW9uKG0pe3JldHVybiB2bShSbyhtLDEseGksITApKX0pLCRnZT1ucihmdW5jdGlvbihtKXt2YXIgdj0kbChtKTtyZXR1cm4geGkodikmJih2PWUpLHZtKFJvKG0sMSx4aSwhMCksa2UodiwyKSl9KSxLZ2U9bnIoZnVuY3Rpb24obSl7dmFyIHY9JGwobSk7cmV0dXJuIHY9dHlwZW9mIHY9PSJmdW5jdGlvbiI/djplLHZtKFJvKG0sMSx4aSwhMCksZSx2KX0pO2Z1bmN0aW9uIFpnZShtKXtyZXR1cm4gbSYmbS5sZW5ndGg/dm0obSk6W119ZnVuY3Rpb24gSmdlKG0sdil7cmV0dXJuIG0mJm0ubGVuZ3RoP3ZtKG0sa2UodiwyKSk6W119ZnVuY3Rpb24gUWdlKG0sdil7cmV0dXJuIHY9dHlwZW9mIHY9PSJmdW5jdGlvbiI/djplLG0mJm0ubGVuZ3RoP3ZtKG0sZSx2KTpbXX1mdW5jdGlvbiBacShtKXtpZighKG0mJm0ubGVuZ3RoKSlyZXR1cm5bXTt2YXIgdj0wO3JldHVybiBtPXBtKG0sZnVuY3Rpb24oVCl7aWYoeGkoVCkpcmV0dXJuIHY9WGkoVC5sZW5ndGgsdiksITB9KSxkcSh2LGZ1bmN0aW9uKFQpe3JldHVybiBLbihtLGhxKFQpKX0pfWZ1bmN0aW9uIE9wdChtLHYpe2lmKCEobSYmbS5sZW5ndGgpKXJldHVybltdO3ZhciBUPVpxKG0pO3JldHVybiB2PT1udWxsP1Q6S24oVCxmdW5jdGlvbihOKXtyZXR1cm4gV3ModixlLE4pfSl9dmFyIHQwZT1ucihmdW5jdGlvbihtLHYpe3JldHVybiB4aShtKT9MTShtLHYpOltdfSksZTBlPW5yKGZ1bmN0aW9uKG0pe3JldHVybiBEcShwbShtLHhpKSl9KSxyMGU9bnIoZnVuY3Rpb24obSl7dmFyIHY9JGwobSk7cmV0dXJuIHhpKHYpJiYodj1lKSxEcShwbShtLHhpKSxrZSh2LDIpKX0pLG4wZT1ucihmdW5jdGlvbihtKXt2YXIgdj0kbChtKTtyZXR1cm4gdj10eXBlb2Ygdj09ImZ1bmN0aW9uIj92OmUsRHEocG0obSx4aSksZSx2KX0pLGkwZT1ucihacSk7ZnVuY3Rpb24gbzBlKG0sdil7cmV0dXJuIHRwdChtfHxbXSx2fHxbXSxJTSl9ZnVuY3Rpb24gYTBlKG0sdil7cmV0dXJuIHRwdChtfHxbXSx2fHxbXSxOTSl9dmFyIHMwZT1ucihmdW5jdGlvbihtKXt2YXIgdj1tLmxlbmd0aCxUPXY+MT9tW3YtMV06ZTtyZXR1cm4gVD10eXBlb2YgVD09ImZ1bmN0aW9uIj8obS5wb3AoKSxUKTplLE9wdChtLFQpfSk7ZnVuY3Rpb24genB0KG0pe3ZhciB2PUcobSk7cmV0dXJuIHYuX19jaGFpbl9fPSEwLHZ9ZnVuY3Rpb24gbDBlKG0sdil7cmV0dXJuIHYobSksbX1mdW5jdGlvbiB5SShtLHYpe3JldHVybiB2KG0pfXZhciBjMGU9Y3AoZnVuY3Rpb24obSl7dmFyIHY9bS5sZW5ndGgsVD12P21bMF06MCxOPXRoaXMuX193cmFwcGVkX18sVj1mdW5jdGlvbihZKXtyZXR1cm4gd3EoWSxtKX07cmV0dXJuIHY+MXx8dGhpcy5fX2FjdGlvbnNfXy5sZW5ndGh8fCEoTiBpbnN0YW5jZW9mIGdyKXx8IXVwKFQpP3RoaXMudGhydShWKTooTj1OLnNsaWNlKFQsK1QrKHY/MTowKSksTi5fX2FjdGlvbnNfXy5wdXNoKHtmdW5jOnlJLGFyZ3M6W1ZdLHRoaXNBcmc6ZX0pLG5ldyBZbChOLHRoaXMuX19jaGFpbl9fKS50aHJ1KGZ1bmN0aW9uKFkpe3JldHVybiB2JiYhWS5sZW5ndGgmJlkucHVzaChlKSxZfSkpfSk7ZnVuY3Rpb24gdTBlKCl7cmV0dXJuIHpwdCh0aGlzKX1mdW5jdGlvbiBoMGUoKXtyZXR1cm4gbmV3IFlsKHRoaXMudmFsdWUoKSx0aGlzLl9fY2hhaW5fXyl9ZnVuY3Rpb24gZjBlKCl7dGhpcy5fX3ZhbHVlc19fPT09ZSYmKHRoaXMuX192YWx1ZXNfXz1acHQodGhpcy52YWx1ZSgpKSk7dmFyIG09dGhpcy5fX2luZGV4X18+PXRoaXMuX192YWx1ZXNfXy5sZW5ndGgsdj1tP2U6dGhpcy5fX3ZhbHVlc19fW3RoaXMuX19pbmRleF9fKytdO3JldHVybntkb25lOm0sdmFsdWU6dn19ZnVuY3Rpb24gcDBlKCl7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gZDBlKG0pe2Zvcih2YXIgdixUPXRoaXM7VCBpbnN0YW5jZW9mIG5JOyl7dmFyIE49SXB0KFQpO04uX19pbmRleF9fPTAsTi5fX3ZhbHVlc19fPWUsdj9WLl9fd3JhcHBlZF9fPU46dj1OO3ZhciBWPU47VD1ULl9fd3JhcHBlZF9ffXJldHVybiBWLl9fd3JhcHBlZF9fPW0sdn1mdW5jdGlvbiBtMGUoKXt2YXIgbT10aGlzLl9fd3JhcHBlZF9fO2lmKG0gaW5zdGFuY2VvZiBncil7dmFyIHY9bTtyZXR1cm4gdGhpcy5fX2FjdGlvbnNfXy5sZW5ndGgmJih2PW5ldyBncih0aGlzKSksdj12LnJldmVyc2UoKSx2Ll9fYWN0aW9uc19fLnB1c2goe2Z1bmM6eUksYXJnczpbS3FdLHRoaXNBcmc6ZX0pLG5ldyBZbCh2LHRoaXMuX19jaGFpbl9fKX1yZXR1cm4gdGhpcy50aHJ1KEtxKX1mdW5jdGlvbiBnMGUoKXtyZXR1cm4gUWZ0KHRoaXMuX193cmFwcGVkX18sdGhpcy5fX2FjdGlvbnNfXyl9dmFyIF8wZT11SShmdW5jdGlvbihtLHYsVCl7dW4uY2FsbChtLFQpPysrbVtUXTpzcChtLFQsMSl9KTtmdW5jdGlvbiB5MGUobSx2LFQpe3ZhciBOPSRlKG0pP2ZmdDpsbWU7cmV0dXJuIFQmJlJhKG0sdixUKSYmKHY9ZSksTihtLGtlKHYsMykpfWZ1bmN0aW9uIHYwZShtLHYpe3ZhciBUPSRlKG0pP3BtOk9mdDtyZXR1cm4gVChtLGtlKHYsMykpfXZhciB4MGU9dXB0KExwdCksYjBlPXVwdChrcHQpO2Z1bmN0aW9uIHcwZShtLHYpe3JldHVybiBSbyh2SShtLHYpLDEpfWZ1bmN0aW9uIFMwZShtLHYpe3JldHVybiBSbyh2SShtLHYpLHopfWZ1bmN0aW9uIE0wZShtLHYsVCl7cmV0dXJuIFQ9VD09PWU/MTpRZShUKSxSbyh2SShtLHYpLFQpfWZ1bmN0aW9uIEZwdChtLHYpe3ZhciBUPSRlKG0pP0dsOnltO3JldHVybiBUKG0sa2UodiwzKSl9ZnVuY3Rpb24gQnB0KG0sdil7dmFyIFQ9JGUobSk/cXBlOkRmdDtyZXR1cm4gVChtLGtlKHYsMykpfXZhciBFMGU9dUkoZnVuY3Rpb24obSx2LFQpe3VuLmNhbGwobSxUKT9tW1RdLnB1c2godik6c3AobSxULFt2XSl9KTtmdW5jdGlvbiBUMGUobSx2LFQsTil7bT1tcyhtKT9tOk14KG0pLFQ9VCYmIU4/UWUoVCk6MDt2YXIgVj1tLmxlbmd0aDtyZXR1cm4gVDwwJiYoVD1YaShWK1QsMCkpLE1JKG0pP1Q8PVYmJm0uaW5kZXhPZih2LFQpPi0xOiEhViYmcHgobSx2LFQpPi0xfXZhciBDMGU9bnIoZnVuY3Rpb24obSx2LFQpe3ZhciBOPS0xLFY9dHlwZW9mIHY9PSJmdW5jdGlvbiIsWT1tcyhtKT92dChtLmxlbmd0aCk6W107cmV0dXJuIHltKG0sZnVuY3Rpb24oSil7WVsrK05dPVY/V3ModixKLFQpOmtNKEosdixUKX0pLFl9KSxBMGU9dUkoZnVuY3Rpb24obSx2LFQpe3NwKG0sVCx2KX0pO2Z1bmN0aW9uIHZJKG0sdil7dmFyIFQ9JGUobSk/S246VWZ0O3JldHVybiBUKG0sa2UodiwzKSl9ZnVuY3Rpb24gUDBlKG0sdixULE4pe3JldHVybiBtPT1udWxsP1tdOigkZSh2KXx8KHY9dj09bnVsbD9bXTpbdl0pLFQ9Tj9lOlQsJGUoVCl8fChUPVQ9PW51bGw/W106W1RdKSxZZnQobSx2LFQpKX12YXIgSTBlPXVJKGZ1bmN0aW9uKG0sdixUKXttW1Q/MDoxXS5wdXNoKHYpfSxmdW5jdGlvbigpe3JldHVybltbXSxbXV19KTtmdW5jdGlvbiBMMGUobSx2LFQpe3ZhciBOPSRlKG0pP2NxOmdmdCxWPWFyZ3VtZW50cy5sZW5ndGg8MztyZXR1cm4gTihtLGtlKHYsNCksVCxWLHltKX1mdW5jdGlvbiBrMGUobSx2LFQpe3ZhciBOPSRlKG0pP0dwZTpnZnQsVj1hcmd1bWVudHMubGVuZ3RoPDM7cmV0dXJuIE4obSxrZSh2LDQpLFQsVixEZnQpfWZ1bmN0aW9uIFIwZShtLHYpe3ZhciBUPSRlKG0pP3BtOk9mdDtyZXR1cm4gVChtLHdJKGtlKHYsMykpKX1mdW5jdGlvbiBOMGUobSl7dmFyIHY9JGUobSk/TGZ0OlRtZTtyZXR1cm4gdihtKX1mdW5jdGlvbiBEMGUobSx2LFQpeyhUP1JhKG0sdixUKTp2PT09ZSk/dj0xOnY9UWUodik7dmFyIE49JGUobSk/bm1lOkNtZTtyZXR1cm4gTihtLHYpfWZ1bmN0aW9uIE8wZShtKXt2YXIgdj0kZShtKT9pbWU6UG1lO3JldHVybiB2KG0pfWZ1bmN0aW9uIHowZShtKXtpZihtPT1udWxsKXJldHVybiAwO2lmKG1zKG0pKXJldHVybiBNSShtKT9teChtKTptLmxlbmd0aDt2YXIgdj1uYShtKTtyZXR1cm4gdj09cXx8dj09TGU/bS5zaXplOkFxKG0pLmxlbmd0aH1mdW5jdGlvbiBGMGUobSx2LFQpe3ZhciBOPSRlKG0pP3VxOkltZTtyZXR1cm4gVCYmUmEobSx2LFQpJiYodj1lKSxOKG0sa2UodiwzKSl9dmFyIEIwZT1ucihmdW5jdGlvbihtLHYpe2lmKG09PW51bGwpcmV0dXJuW107dmFyIFQ9di5sZW5ndGg7cmV0dXJuIFQ+MSYmUmEobSx2WzBdLHZbMV0pP3Y9W106VD4yJiZSYSh2WzBdLHZbMV0sdlsyXSkmJih2PVt2WzBdXSksWWZ0KG0sUm8odiwxKSxbXSl9KSx4ST12ZGV8fGZ1bmN0aW9uKCl7cmV0dXJuIGZvLkRhdGUubm93KCl9O2Z1bmN0aW9uIEgwZShtLHYpe2lmKHR5cGVvZiB2IT0iZnVuY3Rpb24iKXRocm93IG5ldyBXbChpKTtyZXR1cm4gbT1RZShtKSxmdW5jdGlvbigpe2lmKC0tbTwxKXJldHVybiB2LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gSHB0KG0sdixUKXtyZXR1cm4gdj1UP2U6dix2PW0mJnY9PW51bGw/bS5sZW5ndGg6dixscChtLEMsZSxlLGUsZSx2KX1mdW5jdGlvbiBWcHQobSx2KXt2YXIgVDtpZih0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgV2woaSk7cmV0dXJuIG09UWUobSksZnVuY3Rpb24oKXtyZXR1cm4tLW0+MCYmKFQ9di5hcHBseSh0aGlzLGFyZ3VtZW50cykpLG08PTEmJih2PWUpLFR9fXZhciBKcT1ucihmdW5jdGlvbihtLHYsVCl7dmFyIE49ZDtpZihULmxlbmd0aCl7dmFyIFY9bW0oVCx3eChKcSkpO058PWJ9cmV0dXJuIGxwKG0sTix2LFQsVil9KSxVcHQ9bnIoZnVuY3Rpb24obSx2LFQpe3ZhciBOPWR8ZztpZihULmxlbmd0aCl7dmFyIFY9bW0oVCx3eChVcHQpKTtOfD1ifXJldHVybiBscCh2LE4sbSxULFYpfSk7ZnVuY3Rpb24gcXB0KG0sdixUKXt2PVQ/ZTp2O3ZhciBOPWxwKG0seSxlLGUsZSxlLGUsdik7cmV0dXJuIE4ucGxhY2Vob2xkZXI9cXB0LnBsYWNlaG9sZGVyLE59ZnVuY3Rpb24gR3B0KG0sdixUKXt2PVQ/ZTp2O3ZhciBOPWxwKG0seCxlLGUsZSxlLGUsdik7cmV0dXJuIE4ucGxhY2Vob2xkZXI9R3B0LnBsYWNlaG9sZGVyLE59ZnVuY3Rpb24gV3B0KG0sdixUKXt2YXIgTixWLFksSixpdCxmdCxEdD0wLE90PSExLFZ0PSExLG9lPSEwO2lmKHR5cGVvZiBtIT0iZnVuY3Rpb24iKXRocm93IG5ldyBXbChpKTt2PUtsKHYpfHwwLGVpKFQpJiYoT3Q9ISFULmxlYWRpbmcsVnQ9Im1heFdhaXQiaW4gVCxZPVZ0P1hpKEtsKFQubWF4V2FpdCl8fDAsdik6WSxvZT0idHJhaWxpbmciaW4gVD8hIVQudHJhaWxpbmc6b2UpO2Z1bmN0aW9uIFRlKGJpKXt2YXIgbnU9TixwcD1WO3JldHVybiBOPVY9ZSxEdD1iaSxKPW0uYXBwbHkocHAsbnUpLEp9ZnVuY3Rpb24gTmUoYmkpe3JldHVybiBEdD1iaSxpdD16TShwcix2KSxPdD9UZShiaSk6Sn1mdW5jdGlvbiBlcihiaSl7dmFyIG51PWJpLWZ0LHBwPWJpLUR0LHVkdD12LW51O3JldHVybiBWdD9yYSh1ZHQsWS1wcCk6dWR0fWZ1bmN0aW9uIERlKGJpKXt2YXIgbnU9YmktZnQscHA9YmktRHQ7cmV0dXJuIGZ0PT09ZXx8bnU+PXZ8fG51PDB8fFZ0JiZwcD49WX1mdW5jdGlvbiBwcigpe3ZhciBiaT14SSgpO2lmKERlKGJpKSlyZXR1cm4geXIoYmkpO2l0PXpNKHByLGVyKGJpKSl9ZnVuY3Rpb24geXIoYmkpe3JldHVybiBpdD1lLG9lJiZOP1RlKGJpKTooTj1WPWUsSil9ZnVuY3Rpb24gJHMoKXtpdCE9PWUmJmVwdChpdCksRHQ9MCxOPWZ0PVY9aXQ9ZX1mdW5jdGlvbiBOYSgpe3JldHVybiBpdD09PWU/Sjp5cih4SSgpKX1mdW5jdGlvbiBLcygpe3ZhciBiaT14SSgpLG51PURlKGJpKTtpZihOPWFyZ3VtZW50cyxWPXRoaXMsZnQ9YmksbnUpe2lmKGl0PT09ZSlyZXR1cm4gTmUoZnQpO2lmKFZ0KXJldHVybiBlcHQoaXQpLGl0PXpNKHByLHYpLFRlKGZ0KX1yZXR1cm4gaXQ9PT1lJiYoaXQ9ek0ocHIsdikpLEp9cmV0dXJuIEtzLmNhbmNlbD0kcyxLcy5mbHVzaD1OYSxLc312YXIgVjBlPW5yKGZ1bmN0aW9uKG0sdil7cmV0dXJuIE5mdChtLDEsdil9KSxVMGU9bnIoZnVuY3Rpb24obSx2LFQpe3JldHVybiBOZnQobSxLbCh2KXx8MCxUKX0pO2Z1bmN0aW9uIHEwZShtKXtyZXR1cm4gbHAobSxrKX1mdW5jdGlvbiBiSShtLHYpe2lmKHR5cGVvZiBtIT0iZnVuY3Rpb24ifHx2IT1udWxsJiZ0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgV2woaSk7dmFyIFQ9ZnVuY3Rpb24oKXt2YXIgTj1hcmd1bWVudHMsVj12P3YuYXBwbHkodGhpcyxOKTpOWzBdLFk9VC5jYWNoZTtpZihZLmhhcyhWKSlyZXR1cm4gWS5nZXQoVik7dmFyIEo9bS5hcHBseSh0aGlzLE4pO3JldHVybiBULmNhY2hlPVkuc2V0KFYsSil8fFksSn07cmV0dXJuIFQuY2FjaGU9bmV3KGJJLkNhY2hlfHxhcCksVH1iSS5DYWNoZT1hcDtmdW5jdGlvbiB3SShtKXtpZih0eXBlb2YgbSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgV2woaSk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHY9YXJndW1lbnRzO3N3aXRjaCh2Lmxlbmd0aCl7Y2FzZSAwOnJldHVybiFtLmNhbGwodGhpcyk7Y2FzZSAxOnJldHVybiFtLmNhbGwodGhpcyx2WzBdKTtjYXNlIDI6cmV0dXJuIW0uY2FsbCh0aGlzLHZbMF0sdlsxXSk7Y2FzZSAzOnJldHVybiFtLmNhbGwodGhpcyx2WzBdLHZbMV0sdlsyXSl9cmV0dXJuIW0uYXBwbHkodGhpcyx2KX19ZnVuY3Rpb24gRzBlKG0pe3JldHVybiBWcHQoMixtKX12YXIgVzBlPUxtZShmdW5jdGlvbihtLHYpe3Y9di5sZW5ndGg9PTEmJiRlKHZbMF0pP0tuKHZbMF0sWXMoa2UoKSkpOktuKFJvKHYsMSksWXMoa2UoKSkpO3ZhciBUPXYubGVuZ3RoO3JldHVybiBucihmdW5jdGlvbihOKXtmb3IodmFyIFY9LTEsWT1yYShOLmxlbmd0aCxUKTsrK1Y8WTspTltWXT12W1ZdLmNhbGwodGhpcyxOW1ZdKTtyZXR1cm4gV3MobSx0aGlzLE4pfSl9KSxRcT1ucihmdW5jdGlvbihtLHYpe3ZhciBUPW1tKHYsd3goUXEpKTtyZXR1cm4gbHAobSxiLGUsdixUKX0pLFlwdD1ucihmdW5jdGlvbihtLHYpe3ZhciBUPW1tKHYsd3goWXB0KSk7cmV0dXJuIGxwKG0sUyxlLHYsVCl9KSxZMGU9Y3AoZnVuY3Rpb24obSx2KXtyZXR1cm4gbHAobSxQLGUsZSxlLHYpfSk7ZnVuY3Rpb24gajBlKG0sdil7aWYodHlwZW9mIG0hPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFdsKGkpO3JldHVybiB2PXY9PT1lP3Y6UWUodiksbnIobSx2KX1mdW5jdGlvbiBYMGUobSx2KXtpZih0eXBlb2YgbSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgV2woaSk7cmV0dXJuIHY9dj09bnVsbD8wOlhpKFFlKHYpLDApLG5yKGZ1bmN0aW9uKFQpe3ZhciBOPVRbdl0sVj1ibShULDAsdik7cmV0dXJuIE4mJmRtKFYsTiksV3MobSx0aGlzLFYpfSl9ZnVuY3Rpb24gJDBlKG0sdixUKXt2YXIgTj0hMCxWPSEwO2lmKHR5cGVvZiBtIT0iZnVuY3Rpb24iKXRocm93IG5ldyBXbChpKTtyZXR1cm4gZWkoVCkmJihOPSJsZWFkaW5nImluIFQ/ISFULmxlYWRpbmc6TixWPSJ0cmFpbGluZyJpbiBUPyEhVC50cmFpbGluZzpWKSxXcHQobSx2LHtsZWFkaW5nOk4sbWF4V2FpdDp2LHRyYWlsaW5nOlZ9KX1mdW5jdGlvbiBLMGUobSl7cmV0dXJuIEhwdChtLDEpfWZ1bmN0aW9uIFowZShtLHYpe3JldHVybiBRcSh6cSh2KSxtKX1mdW5jdGlvbiBKMGUoKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm5bXTt2YXIgbT1hcmd1bWVudHNbMF07cmV0dXJuICRlKG0pP206W21dfWZ1bmN0aW9uIFEwZShtKXtyZXR1cm4gamwobSxoKX1mdW5jdGlvbiB0X2UobSx2KXtyZXR1cm4gdj10eXBlb2Ygdj09ImZ1bmN0aW9uIj92OmUsamwobSxoLHYpfWZ1bmN0aW9uIGVfZShtKXtyZXR1cm4gamwobSxjfGgpfWZ1bmN0aW9uIHJfZShtLHYpe3JldHVybiB2PXR5cGVvZiB2PT0iZnVuY3Rpb24iP3Y6ZSxqbChtLGN8aCx2KX1mdW5jdGlvbiBuX2UobSx2KXtyZXR1cm4gdj09bnVsbHx8UmZ0KG0sdixwbyh2KSl9ZnVuY3Rpb24gcnUobSx2KXtyZXR1cm4gbT09PXZ8fG0hPT1tJiZ2IT09dn12YXIgaV9lPWRJKEVxKSxvX2U9ZEkoZnVuY3Rpb24obSx2KXtyZXR1cm4gbT49dn0pLGxfPUJmdChmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP0JmdDpmdW5jdGlvbihtKXtyZXR1cm4gc2kobSkmJnVuLmNhbGwobSwiY2FsbGVlIikmJiFFZnQuY2FsbChtLCJjYWxsZWUiKX0sJGU9dnQuaXNBcnJheSxhX2U9YWZ0P1lzKGFmdCk6ZG1lO2Z1bmN0aW9uIG1zKG0pe3JldHVybiBtIT1udWxsJiZTSShtLmxlbmd0aCkmJiFocChtKX1mdW5jdGlvbiB4aShtKXtyZXR1cm4gc2kobSkmJm1zKG0pfWZ1bmN0aW9uIHNfZShtKXtyZXR1cm4gbT09PSEwfHxtPT09ITF8fHNpKG0pJiZrYShtKT09S3R9dmFyIHdtPWJkZXx8dUcsbF9lPXNmdD9ZcyhzZnQpOm1tZTtmdW5jdGlvbiBjX2UobSl7cmV0dXJuIHNpKG0pJiZtLm5vZGVUeXBlPT09MSYmIUZNKG0pfWZ1bmN0aW9uIHVfZShtKXtpZihtPT1udWxsKXJldHVybiEwO2lmKG1zKG0pJiYoJGUobSl8fHR5cGVvZiBtPT0ic3RyaW5nInx8dHlwZW9mIG0uc3BsaWNlPT0iZnVuY3Rpb24ifHx3bShtKXx8U3gobSl8fGxfKG0pKSlyZXR1cm4hbS5sZW5ndGg7dmFyIHY9bmEobSk7aWYodj09cXx8dj09TGUpcmV0dXJuIW0uc2l6ZTtpZihPTShtKSlyZXR1cm4hQXEobSkubGVuZ3RoO2Zvcih2YXIgVCBpbiBtKWlmKHVuLmNhbGwobSxUKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBoX2UobSx2KXtyZXR1cm4gUk0obSx2KX1mdW5jdGlvbiBmX2UobSx2LFQpe1Q9dHlwZW9mIFQ9PSJmdW5jdGlvbiI/VDplO3ZhciBOPVQ/VChtLHYpOmU7cmV0dXJuIE49PT1lP1JNKG0sdixlLFQpOiEhTn1mdW5jdGlvbiB0RyhtKXtpZighc2kobSkpcmV0dXJuITE7dmFyIHY9a2EobSk7cmV0dXJuIHY9PVh8fHY9PWN0fHx0eXBlb2YgbS5tZXNzYWdlPT0ic3RyaW5nIiYmdHlwZW9mIG0ubmFtZT09InN0cmluZyImJiFGTShtKX1mdW5jdGlvbiBwX2UobSl7cmV0dXJuIHR5cGVvZiBtPT0ibnVtYmVyIiYmQ2Z0KG0pfWZ1bmN0aW9uIGhwKG0pe2lmKCFlaShtKSlyZXR1cm4hMTt2YXIgdj1rYShtKTtyZXR1cm4gdj09ZXR8fHY9PWR0fHx2PT1sdHx8dj09aWV9ZnVuY3Rpb24ganB0KG0pe3JldHVybiB0eXBlb2YgbT09Im51bWJlciImJm09PVFlKG0pfWZ1bmN0aW9uIFNJKG0pe3JldHVybiB0eXBlb2YgbT09Im51bWJlciImJm0+LTEmJm0lMT09MCYmbTw9VX1mdW5jdGlvbiBlaShtKXt2YXIgdj10eXBlb2YgbTtyZXR1cm4gbSE9bnVsbCYmKHY9PSJvYmplY3QifHx2PT0iZnVuY3Rpb24iKX1mdW5jdGlvbiBzaShtKXtyZXR1cm4gbSE9bnVsbCYmdHlwZW9mIG09PSJvYmplY3QifXZhciBYcHQ9bGZ0P1lzKGxmdCk6X21lO2Z1bmN0aW9uIGRfZShtLHYpe3JldHVybiBtPT09dnx8Q3EobSx2LEdxKHYpKX1mdW5jdGlvbiBtX2UobSx2LFQpe3JldHVybiBUPXR5cGVvZiBUPT0iZnVuY3Rpb24iP1Q6ZSxDcShtLHYsR3EodiksVCl9ZnVuY3Rpb24gZ19lKG0pe3JldHVybiAkcHQobSkmJm0hPSttfWZ1bmN0aW9uIF9fZShtKXtpZih0Z2UobSkpdGhyb3cgbmV3IFdlKG4pO3JldHVybiBIZnQobSl9ZnVuY3Rpb24geV9lKG0pe3JldHVybiBtPT09bnVsbH1mdW5jdGlvbiB2X2UobSl7cmV0dXJuIG09PW51bGx9ZnVuY3Rpb24gJHB0KG0pe3JldHVybiB0eXBlb2YgbT09Im51bWJlciJ8fHNpKG0pJiZrYShtKT09cHR9ZnVuY3Rpb24gRk0obSl7aWYoIXNpKG0pfHxrYShtKSE9d3QpcmV0dXJuITE7dmFyIHY9SzYobSk7aWYodj09PW51bGwpcmV0dXJuITA7dmFyIFQ9dW4uY2FsbCh2LCJjb25zdHJ1Y3RvciIpJiZ2LmNvbnN0cnVjdG9yO3JldHVybiB0eXBlb2YgVD09ImZ1bmN0aW9uIiYmVCBpbnN0YW5jZW9mIFQmJlk2LmNhbGwoVCk9PW1kZX12YXIgZUc9Y2Z0P1lzKGNmdCk6eW1lO2Z1bmN0aW9uIHhfZShtKXtyZXR1cm4ganB0KG0pJiZtPj0tVSYmbTw9VX12YXIgS3B0PXVmdD9Zcyh1ZnQpOnZtZTtmdW5jdGlvbiBNSShtKXtyZXR1cm4gdHlwZW9mIG09PSJzdHJpbmcifHwhJGUobSkmJnNpKG0pJiZrYShtKT09YXJ9ZnVuY3Rpb24gWHMobSl7cmV0dXJuIHR5cGVvZiBtPT0ic3ltYm9sInx8c2kobSkmJmthKG0pPT1mcn12YXIgU3g9aGZ0P1lzKGhmdCk6eG1lO2Z1bmN0aW9uIGJfZShtKXtyZXR1cm4gbT09PWV9ZnVuY3Rpb24gd19lKG0pe3JldHVybiBzaShtKSYmbmEobSk9PSR9ZnVuY3Rpb24gU19lKG0pe3JldHVybiBzaShtKSYma2EobSk9PUl0fXZhciBNX2U9ZEkoUHEpLEVfZT1kSShmdW5jdGlvbihtLHYpe3JldHVybiBtPD12fSk7ZnVuY3Rpb24gWnB0KG0pe2lmKCFtKXJldHVybltdO2lmKG1zKG0pKXJldHVybiBNSShtKT90dShtKTpkcyhtKTtpZihFTSYmbVtFTV0pcmV0dXJuIG5kZShtW0VNXSgpKTt2YXIgdj1uYShtKSxUPXY9PXE/Z3E6dj09TGU/cTY6TXg7cmV0dXJuIFQobSl9ZnVuY3Rpb24gZnAobSl7aWYoIW0pcmV0dXJuIG09PT0wP206MDtpZihtPUtsKG0pLG09PT16fHxtPT09LXope3ZhciB2PW08MD8tMToxO3JldHVybiB2Kld9cmV0dXJuIG09PT1tP206MH1mdW5jdGlvbiBRZShtKXt2YXIgdj1mcChtKSxUPXYlMTtyZXR1cm4gdj09PXY/VD92LVQ6djowfWZ1bmN0aW9uIEpwdChtKXtyZXR1cm4gbT9pXyhRZShtKSwwLHJ0KTowfWZ1bmN0aW9uIEtsKG0pe2lmKHR5cGVvZiBtPT0ibnVtYmVyIilyZXR1cm4gbTtpZihYcyhtKSlyZXR1cm4gWjtpZihlaShtKSl7dmFyIHY9dHlwZW9mIG0udmFsdWVPZj09ImZ1bmN0aW9uIj9tLnZhbHVlT2YoKTptO209ZWkodik/disiIjp2fWlmKHR5cGVvZiBtIT0ic3RyaW5nIilyZXR1cm4gbT09PTA/bTorbTttPV9mdChtKTt2YXIgVD1fci50ZXN0KG0pO3JldHVybiBUfHxYbi50ZXN0KG0pP0hwZShtLnNsaWNlKDIpLFQ/Mjo4KTpYci50ZXN0KG0pP1o6K219ZnVuY3Rpb24gUXB0KG0pe3JldHVybiBnaChtLGdzKG0pKX1mdW5jdGlvbiBUX2UobSl7cmV0dXJuIG0/aV8oUWUobSksLVUsVSk6bT09PTA/bTowfWZ1bmN0aW9uIG9uKG0pe3JldHVybiBtPT1udWxsPyIiOmpzKG0pfXZhciBDX2U9eHgoZnVuY3Rpb24obSx2KXtpZihPTSh2KXx8bXModikpe2doKHYscG8odiksbSk7cmV0dXJufWZvcih2YXIgVCBpbiB2KXVuLmNhbGwodixUKSYmSU0obSxULHZbVF0pfSksdGR0PXh4KGZ1bmN0aW9uKG0sdil7Z2godixncyh2KSxtKX0pLEVJPXh4KGZ1bmN0aW9uKG0sdixULE4pe2doKHYsZ3ModiksbSxOKX0pLEFfZT14eChmdW5jdGlvbihtLHYsVCxOKXtnaCh2LHBvKHYpLG0sTil9KSxQX2U9Y3Aod3EpO2Z1bmN0aW9uIElfZShtLHYpe3ZhciBUPXZ4KG0pO3JldHVybiB2PT1udWxsP1Q6a2Z0KFQsdil9dmFyIExfZT1ucihmdW5jdGlvbihtLHYpe209dm4obSk7dmFyIFQ9LTEsTj12Lmxlbmd0aCxWPU4+Mj92WzJdOmU7Zm9yKFYmJlJhKHZbMF0sdlsxXSxWKSYmKE49MSk7KytUPE47KWZvcih2YXIgWT12W1RdLEo9Z3MoWSksaXQ9LTEsZnQ9Si5sZW5ndGg7KytpdDxmdDspe3ZhciBEdD1KW2l0XSxPdD1tW0R0XTsoT3Q9PT1lfHxydShPdCxneFtEdF0pJiYhdW4uY2FsbChtLER0KSkmJihtW0R0XT1ZW0R0XSl9cmV0dXJuIG19KSxrX2U9bnIoZnVuY3Rpb24obSl7cmV0dXJuIG0ucHVzaChlLF9wdCksV3MoZWR0LGUsbSl9KTtmdW5jdGlvbiBSX2UobSx2KXtyZXR1cm4gcGZ0KG0sa2UodiwzKSxtaCl9ZnVuY3Rpb24gTl9lKG0sdil7cmV0dXJuIHBmdChtLGtlKHYsMyksTXEpfWZ1bmN0aW9uIERfZShtLHYpe3JldHVybiBtPT1udWxsP206U3EobSxrZSh2LDMpLGdzKX1mdW5jdGlvbiBPX2UobSx2KXtyZXR1cm4gbT09bnVsbD9tOnpmdChtLGtlKHYsMyksZ3MpfWZ1bmN0aW9uIHpfZShtLHYpe3JldHVybiBtJiZtaChtLGtlKHYsMykpfWZ1bmN0aW9uIEZfZShtLHYpe3JldHVybiBtJiZNcShtLGtlKHYsMykpfWZ1bmN0aW9uIEJfZShtKXtyZXR1cm4gbT09bnVsbD9bXTphSShtLHBvKG0pKX1mdW5jdGlvbiBIX2UobSl7cmV0dXJuIG09PW51bGw/W106YUkobSxncyhtKSl9ZnVuY3Rpb24gckcobSx2LFQpe3ZhciBOPW09PW51bGw/ZTpvXyhtLHYpO3JldHVybiBOPT09ZT9UOk59ZnVuY3Rpb24gVl9lKG0sdil7cmV0dXJuIG0hPW51bGwmJnhwdChtLHYsdW1lKX1mdW5jdGlvbiBuRyhtLHYpe3JldHVybiBtIT1udWxsJiZ4cHQobSx2LGhtZSl9dmFyIFVfZT1mcHQoZnVuY3Rpb24obSx2LFQpe3YhPW51bGwmJnR5cGVvZiB2LnRvU3RyaW5nIT0iZnVuY3Rpb24iJiYodj1qNi5jYWxsKHYpKSxtW3ZdPVR9LG9HKF9zKSkscV9lPWZwdChmdW5jdGlvbihtLHYsVCl7diE9bnVsbCYmdHlwZW9mIHYudG9TdHJpbmchPSJmdW5jdGlvbiImJih2PWo2LmNhbGwodikpLHVuLmNhbGwobSx2KT9tW3ZdLnB1c2goVCk6bVt2XT1bVF19LGtlKSxHX2U9bnIoa00pO2Z1bmN0aW9uIHBvKG0pe3JldHVybiBtcyhtKT9JZnQobSk6QXEobSl9ZnVuY3Rpb24gZ3MobSl7cmV0dXJuIG1zKG0pP0lmdChtLCEwKTpibWUobSl9ZnVuY3Rpb24gV19lKG0sdil7dmFyIFQ9e307cmV0dXJuIHY9a2UodiwzKSxtaChtLGZ1bmN0aW9uKE4sVixZKXtzcChULHYoTixWLFkpLE4pfSksVH1mdW5jdGlvbiBZX2UobSx2KXt2YXIgVD17fTtyZXR1cm4gdj1rZSh2LDMpLG1oKG0sZnVuY3Rpb24oTixWLFkpe3NwKFQsVix2KE4sVixZKSl9KSxUfXZhciBqX2U9eHgoZnVuY3Rpb24obSx2LFQpe3NJKG0sdixUKX0pLGVkdD14eChmdW5jdGlvbihtLHYsVCxOKXtzSShtLHYsVCxOKX0pLFhfZT1jcChmdW5jdGlvbihtLHYpe3ZhciBUPXt9O2lmKG09PW51bGwpcmV0dXJuIFQ7dmFyIE49ITE7dj1Lbih2LGZ1bmN0aW9uKFkpe3JldHVybiBZPXhtKFksbSksTnx8KE49WS5sZW5ndGg+MSksWX0pLGdoKG0sVXEobSksVCksTiYmKFQ9amwoVCxjfHV8aCxVbWUpKTtmb3IodmFyIFY9di5sZW5ndGg7Vi0tOylOcShULHZbVl0pO3JldHVybiBUfSk7ZnVuY3Rpb24gJF9lKG0sdil7cmV0dXJuIHJkdChtLHdJKGtlKHYpKSl9dmFyIEtfZT1jcChmdW5jdGlvbihtLHYpe3JldHVybiBtPT1udWxsP3t9OlNtZShtLHYpfSk7ZnVuY3Rpb24gcmR0KG0sdil7aWYobT09bnVsbClyZXR1cm57fTt2YXIgVD1LbihVcShtKSxmdW5jdGlvbihOKXtyZXR1cm5bTl19KTtyZXR1cm4gdj1rZSh2KSxqZnQobSxULGZ1bmN0aW9uKE4sVil7cmV0dXJuIHYoTixWWzBdKX0pfWZ1bmN0aW9uIFpfZShtLHYsVCl7dj14bSh2LG0pO3ZhciBOPS0xLFY9di5sZW5ndGg7Zm9yKFZ8fChWPTEsbT1lKTsrK048Vjspe3ZhciBZPW09PW51bGw/ZTptW19oKHZbTl0pXTtZPT09ZSYmKE49VixZPVQpLG09aHAoWSk/WS5jYWxsKG0pOll9cmV0dXJuIG19ZnVuY3Rpb24gSl9lKG0sdixUKXtyZXR1cm4gbT09bnVsbD9tOk5NKG0sdixUKX1mdW5jdGlvbiBRX2UobSx2LFQsTil7cmV0dXJuIE49dHlwZW9mIE49PSJmdW5jdGlvbiI/TjplLG09PW51bGw/bTpOTShtLHYsVCxOKX12YXIgbmR0PW1wdChwbyksaWR0PW1wdChncyk7ZnVuY3Rpb24gdHllKG0sdixUKXt2YXIgTj0kZShtKSxWPU58fHdtKG0pfHxTeChtKTtpZih2PWtlKHYsNCksVD09bnVsbCl7dmFyIFk9bSYmbS5jb25zdHJ1Y3RvcjtWP1Q9Tj9uZXcgWTpbXTplaShtKT9UPWhwKFkpP3Z4KEs2KG0pKTp7fTpUPXt9fXJldHVybihWP0dsOm1oKShtLGZ1bmN0aW9uKEosaXQsZnQpe3JldHVybiB2KFQsSixpdCxmdCl9KSxUfWZ1bmN0aW9uIGV5ZShtLHYpe3JldHVybiBtPT1udWxsPyEwOk5xKG0sdil9ZnVuY3Rpb24gcnllKG0sdixUKXtyZXR1cm4gbT09bnVsbD9tOkpmdChtLHYsenEoVCkpfWZ1bmN0aW9uIG55ZShtLHYsVCxOKXtyZXR1cm4gTj10eXBlb2YgTj09ImZ1bmN0aW9uIj9OOmUsbT09bnVsbD9tOkpmdChtLHYsenEoVCksTil9ZnVuY3Rpb24gTXgobSl7cmV0dXJuIG09PW51bGw/W106bXEobSxwbyhtKSl9ZnVuY3Rpb24gaXllKG0pe3JldHVybiBtPT1udWxsP1tdOm1xKG0sZ3MobSkpfWZ1bmN0aW9uIG95ZShtLHYsVCl7cmV0dXJuIFQ9PT1lJiYoVD12LHY9ZSksVCE9PWUmJihUPUtsKFQpLFQ9VD09PVQ/VDowKSx2IT09ZSYmKHY9S2wodiksdj12PT09dj92OjApLGlfKEtsKG0pLHYsVCl9ZnVuY3Rpb24gYXllKG0sdixUKXtyZXR1cm4gdj1mcCh2KSxUPT09ZT8oVD12LHY9MCk6VD1mcChUKSxtPUtsKG0pLGZtZShtLHYsVCl9ZnVuY3Rpb24gc3llKG0sdixUKXtpZihUJiZ0eXBlb2YgVCE9ImJvb2xlYW4iJiZSYShtLHYsVCkmJih2PVQ9ZSksVD09PWUmJih0eXBlb2Ygdj09ImJvb2xlYW4iPyhUPXYsdj1lKTp0eXBlb2YgbT09ImJvb2xlYW4iJiYoVD1tLG09ZSkpLG09PT1lJiZ2PT09ZT8obT0wLHY9MSk6KG09ZnAobSksdj09PWU/KHY9bSxtPTApOnY9ZnAodikpLG0+dil7dmFyIE49bTttPXYsdj1OfWlmKFR8fG0lMXx8diUxKXt2YXIgVj1BZnQoKTtyZXR1cm4gcmEobStWKih2LW0rQnBlKCIxZS0iKygoVisiIikubGVuZ3RoLTEpKSksdil9cmV0dXJuIExxKG0sdil9dmFyIGx5ZT1ieChmdW5jdGlvbihtLHYsVCl7cmV0dXJuIHY9di50b0xvd2VyQ2FzZSgpLG0rKFQ/b2R0KHYpOnYpfSk7ZnVuY3Rpb24gb2R0KG0pe3JldHVybiBpRyhvbihtKS50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiBhZHQobSl7cmV0dXJuIG09b24obSksbSYmbS5yZXBsYWNlKGhtLEpwZSkucmVwbGFjZShQcGUsIiIpfWZ1bmN0aW9uIGN5ZShtLHYsVCl7bT1vbihtKSx2PWpzKHYpO3ZhciBOPW0ubGVuZ3RoO1Q9VD09PWU/TjppXyhRZShUKSwwLE4pO3ZhciBWPVQ7cmV0dXJuIFQtPXYubGVuZ3RoLFQ+PTAmJm0uc2xpY2UoVCxWKT09dn1mdW5jdGlvbiB1eWUobSl7cmV0dXJuIG09b24obSksbSYmQXIudGVzdChtKT9tLnJlcGxhY2UoeW4sUXBlKTptfWZ1bmN0aW9uIGh5ZShtKXtyZXR1cm4gbT1vbihtKSxtJiZ1eC50ZXN0KG0pP20ucmVwbGFjZShjbiwiXFwkJiIpOm19dmFyIGZ5ZT1ieChmdW5jdGlvbihtLHYsVCl7cmV0dXJuIG0rKFQ/Ii0iOiIiKSt2LnRvTG93ZXJDYXNlKCl9KSxweWU9YngoZnVuY3Rpb24obSx2LFQpe3JldHVybiBtKyhUPyIgIjoiIikrdi50b0xvd2VyQ2FzZSgpfSksZHllPWNwdCgidG9Mb3dlckNhc2UiKTtmdW5jdGlvbiBteWUobSx2LFQpe209b24obSksdj1RZSh2KTt2YXIgTj12P214KG0pOjA7aWYoIXZ8fE4+PXYpcmV0dXJuIG07dmFyIFY9KHYtTikvMjtyZXR1cm4gcEkodEkoViksVCkrbStwSShRNihWKSxUKX1mdW5jdGlvbiBneWUobSx2LFQpe209b24obSksdj1RZSh2KTt2YXIgTj12P214KG0pOjA7cmV0dXJuIHYmJk48dj9tK3BJKHYtTixUKTptfWZ1bmN0aW9uIF95ZShtLHYsVCl7bT1vbihtKSx2PVFlKHYpO3ZhciBOPXY/bXgobSk6MDtyZXR1cm4gdiYmTjx2P3BJKHYtTixUKSttOm19ZnVuY3Rpb24geXllKG0sdixUKXtyZXR1cm4gVHx8dj09bnVsbD92PTA6diYmKHY9K3YpLEVkZShvbihtKS5yZXBsYWNlKG5wLCIiKSx2fHwwKX1mdW5jdGlvbiB2eWUobSx2LFQpe3JldHVybihUP1JhKG0sdixUKTp2PT09ZSk/dj0xOnY9UWUodiksa3Eob24obSksdil9ZnVuY3Rpb24geHllKCl7dmFyIG09YXJndW1lbnRzLHY9b24obVswXSk7cmV0dXJuIG0ubGVuZ3RoPDM/djp2LnJlcGxhY2UobVsxXSxtWzJdKX12YXIgYnllPWJ4KGZ1bmN0aW9uKG0sdixUKXtyZXR1cm4gbSsoVD8iXyI6IiIpK3YudG9Mb3dlckNhc2UoKX0pO2Z1bmN0aW9uIHd5ZShtLHYsVCl7cmV0dXJuIFQmJnR5cGVvZiBUIT0ibnVtYmVyIiYmUmEobSx2LFQpJiYodj1UPWUpLFQ9VD09PWU/cnQ6VD4+PjAsVD8obT1vbihtKSxtJiYodHlwZW9mIHY9PSJzdHJpbmcifHx2IT1udWxsJiYhZUcodikpJiYodj1qcyh2KSwhdiYmZHgobSkpP2JtKHR1KG0pLDAsVCk6bS5zcGxpdCh2LFQpKTpbXX12YXIgU3llPWJ4KGZ1bmN0aW9uKG0sdixUKXtyZXR1cm4gbSsoVD8iICI6IiIpK2lHKHYpfSk7ZnVuY3Rpb24gTXllKG0sdixUKXtyZXR1cm4gbT1vbihtKSxUPVQ9PW51bGw/MDppXyhRZShUKSwwLG0ubGVuZ3RoKSx2PWpzKHYpLG0uc2xpY2UoVCxUK3YubGVuZ3RoKT09dn1mdW5jdGlvbiBFeWUobSx2LFQpe3ZhciBOPUcudGVtcGxhdGVTZXR0aW5ncztUJiZSYShtLHYsVCkmJih2PWUpLG09b24obSksdj1FSSh7fSx2LE4sZ3B0KTt2YXIgVj1FSSh7fSx2LmltcG9ydHMsTi5pbXBvcnRzLGdwdCksWT1wbyhWKSxKPW1xKFYsWSksaXQsZnQsRHQ9MCxPdD12LmludGVycG9sYXRlfHxtcixWdD0iX19wICs9ICciLG9lPV9xKCh2LmVzY2FwZXx8bXIpLnNvdXJjZSsifCIrT3Quc291cmNlKyJ8IisoT3Q9PT1MYT90cjptcikuc291cmNlKyJ8Iisodi5ldmFsdWF0ZXx8bXIpLnNvdXJjZSsifCQiLCJnIiksVGU9Ii8vIyBzb3VyY2VVUkw9IisodW4uY2FsbCh2LCJzb3VyY2VVUkwiKT8odi5zb3VyY2VVUkwrIiIpLnJlcGxhY2UoL1xzL2csIiAiKToibG9kYXNoLnRlbXBsYXRlU291cmNlc1siKyArK05wZSsiXSIpK2AKYDttLnJlcGxhY2Uob2UsZnVuY3Rpb24oRGUscHIseXIsJHMsTmEsS3Mpe3JldHVybiB5cnx8KHlyPSRzKSxWdCs9bS5zbGljZShEdCxLcykucmVwbGFjZShCbCx0ZGUpLHByJiYoaXQ9ITAsVnQrPWAnICsKX19lKGArcHIrYCkgKwonYCksTmEmJihmdD0hMCxWdCs9YCc7CmArTmErYDsKX19wICs9ICdgKSx5ciYmKFZ0Kz1gJyArCigoX190ID0gKGAreXIrYCkpID09IG51bGwgPyAnJyA6IF9fdCkgKwonYCksRHQ9S3MrRGUubGVuZ3RoLERlfSksVnQrPWAnOwpgO3ZhciBOZT11bi5jYWxsKHYsInZhcmlhYmxlIikmJnYudmFyaWFibGU7aWYoIU5lKVZ0PWB3aXRoIChvYmopIHsKYCtWdCtgCn0KYDtlbHNlIGlmKFZlLnRlc3QoTmUpKXRocm93IG5ldyBXZShvKTtWdD0oZnQ/VnQucmVwbGFjZShDZSwiIik6VnQpLnJlcGxhY2UoUHQsIiQxIikucmVwbGFjZShOdCwiJDE7IiksVnQ9ImZ1bmN0aW9uKCIrKE5lfHwib2JqIikrYCkgewpgKyhOZT8iIjpgb2JqIHx8IChvYmogPSB7fSk7CmApKyJ2YXIgX190LCBfX3AgPSAnJyIrKGl0PyIsIF9fZSA9IF8uZXNjYXBlIjoiIikrKGZ0P2AsIF9faiA9IEFycmF5LnByb3RvdHlwZS5qb2luOwpmdW5jdGlvbiBwcmludCgpIHsgX19wICs9IF9fai5jYWxsKGFyZ3VtZW50cywgJycpIH0KYDpgOwpgKStWdCtgcmV0dXJuIF9fcAp9YDt2YXIgZXI9bGR0KGZ1bmN0aW9uKCl7cmV0dXJuICRyKFksVGUrInJldHVybiAiK1Z0KS5hcHBseShlLEopfSk7aWYoZXIuc291cmNlPVZ0LHRHKGVyKSl0aHJvdyBlcjtyZXR1cm4gZXJ9ZnVuY3Rpb24gVHllKG0pe3JldHVybiBvbihtKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIEN5ZShtKXtyZXR1cm4gb24obSkudG9VcHBlckNhc2UoKX1mdW5jdGlvbiBBeWUobSx2LFQpe2lmKG09b24obSksbSYmKFR8fHY9PT1lKSlyZXR1cm4gX2Z0KG0pO2lmKCFtfHwhKHY9anModikpKXJldHVybiBtO3ZhciBOPXR1KG0pLFY9dHUodiksWT15ZnQoTixWKSxKPXZmdChOLFYpKzE7cmV0dXJuIGJtKE4sWSxKKS5qb2luKCIiKX1mdW5jdGlvbiBQeWUobSx2LFQpe2lmKG09b24obSksbSYmKFR8fHY9PT1lKSlyZXR1cm4gbS5zbGljZSgwLGJmdChtKSsxKTtpZighbXx8ISh2PWpzKHYpKSlyZXR1cm4gbTt2YXIgTj10dShtKSxWPXZmdChOLHR1KHYpKSsxO3JldHVybiBibShOLDAsVikuam9pbigiIil9ZnVuY3Rpb24gSXllKG0sdixUKXtpZihtPW9uKG0pLG0mJihUfHx2PT09ZSkpcmV0dXJuIG0ucmVwbGFjZShucCwiIik7aWYoIW18fCEodj1qcyh2KSkpcmV0dXJuIG07dmFyIE49dHUobSksVj15ZnQoTix0dSh2KSk7cmV0dXJuIGJtKE4sVikuam9pbigiIil9ZnVuY3Rpb24gTHllKG0sdil7dmFyIFQ9TyxOPUQ7aWYoZWkodikpe3ZhciBWPSJzZXBhcmF0b3IiaW4gdj92LnNlcGFyYXRvcjpWO1Q9Imxlbmd0aCJpbiB2P1FlKHYubGVuZ3RoKTpULE49Im9taXNzaW9uImluIHY/anModi5vbWlzc2lvbik6Tn1tPW9uKG0pO3ZhciBZPW0ubGVuZ3RoO2lmKGR4KG0pKXt2YXIgSj10dShtKTtZPUoubGVuZ3RofWlmKFQ+PVkpcmV0dXJuIG07dmFyIGl0PVQtbXgoTik7aWYoaXQ8MSlyZXR1cm4gTjt2YXIgZnQ9Sj9ibShKLDAsaXQpLmpvaW4oIiIpOm0uc2xpY2UoMCxpdCk7aWYoVj09PWUpcmV0dXJuIGZ0K047aWYoSiYmKGl0Kz1mdC5sZW5ndGgtaXQpLGVHKFYpKXtpZihtLnNsaWNlKGl0KS5zZWFyY2goVikpe3ZhciBEdCxPdD1mdDtmb3IoVi5nbG9iYWx8fChWPV9xKFYuc291cmNlLG9uKEtlLmV4ZWMoVikpKyJnIikpLFYubGFzdEluZGV4PTA7RHQ9Vi5leGVjKE90KTspdmFyIFZ0PUR0LmluZGV4O2Z0PWZ0LnNsaWNlKDAsVnQ9PT1lP2l0OlZ0KX19ZWxzZSBpZihtLmluZGV4T2YoanMoViksaXQpIT1pdCl7dmFyIG9lPWZ0Lmxhc3RJbmRleE9mKFYpO29lPi0xJiYoZnQ9ZnQuc2xpY2UoMCxvZSkpfXJldHVybiBmdCtOfWZ1bmN0aW9uIGt5ZShtKXtyZXR1cm4gbT1vbihtKSxtJiZXaS50ZXN0KG0pP20ucmVwbGFjZSh6ZSxzZGUpOm19dmFyIFJ5ZT1ieChmdW5jdGlvbihtLHYsVCl7cmV0dXJuIG0rKFQ/IiAiOiIiKSt2LnRvVXBwZXJDYXNlKCl9KSxpRz1jcHQoInRvVXBwZXJDYXNlIik7ZnVuY3Rpb24gc2R0KG0sdixUKXtyZXR1cm4gbT1vbihtKSx2PVQ/ZTp2LHY9PT1lP3JkZShtKT91ZGUobSk6anBlKG0pOm0ubWF0Y2godil8fFtdfXZhciBsZHQ9bnIoZnVuY3Rpb24obSx2KXt0cnl7cmV0dXJuIFdzKG0sZSx2KX1jYXRjaChUKXtyZXR1cm4gdEcoVCk/VDpuZXcgV2UoVCl9fSksTnllPWNwKGZ1bmN0aW9uKG0sdil7cmV0dXJuIEdsKHYsZnVuY3Rpb24oVCl7VD1faChUKSxzcChtLFQsSnEobVtUXSxtKSl9KSxtfSk7ZnVuY3Rpb24gRHllKG0pe3ZhciB2PW09PW51bGw/MDptLmxlbmd0aCxUPWtlKCk7cmV0dXJuIG09dj9LbihtLGZ1bmN0aW9uKE4pe2lmKHR5cGVvZiBOWzFdIT0iZnVuY3Rpb24iKXRocm93IG5ldyBXbChpKTtyZXR1cm5bVChOWzBdKSxOWzFdXX0pOltdLG5yKGZ1bmN0aW9uKE4pe2Zvcih2YXIgVj0tMTsrK1Y8djspe3ZhciBZPW1bVl07aWYoV3MoWVswXSx0aGlzLE4pKXJldHVybiBXcyhZWzFdLHRoaXMsTil9fSl9ZnVuY3Rpb24gT3llKG0pe3JldHVybiBzbWUoamwobSxjKSl9ZnVuY3Rpb24gb0cobSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG19fWZ1bmN0aW9uIHp5ZShtLHYpe3JldHVybiBtPT1udWxsfHxtIT09bT92Om19dmFyIEZ5ZT1ocHQoKSxCeWU9aHB0KCEwKTtmdW5jdGlvbiBfcyhtKXtyZXR1cm4gbX1mdW5jdGlvbiBhRyhtKXtyZXR1cm4gVmZ0KHR5cGVvZiBtPT0iZnVuY3Rpb24iP206amwobSxjKSl9ZnVuY3Rpb24gSHllKG0pe3JldHVybiBxZnQoamwobSxjKSl9ZnVuY3Rpb24gVnllKG0sdil7cmV0dXJuIEdmdChtLGpsKHYsYykpfXZhciBVeWU9bnIoZnVuY3Rpb24obSx2KXtyZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIGtNKFQsbSx2KX19KSxxeWU9bnIoZnVuY3Rpb24obSx2KXtyZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIGtNKG0sVCx2KX19KTtmdW5jdGlvbiBzRyhtLHYsVCl7dmFyIE49cG8odiksVj1hSSh2LE4pO1Q9PW51bGwmJiEoZWkodikmJihWLmxlbmd0aHx8IU4ubGVuZ3RoKSkmJihUPXYsdj1tLG09dGhpcyxWPWFJKHYscG8odikpKTt2YXIgWT0hKGVpKFQpJiYiY2hhaW4iaW4gVCl8fCEhVC5jaGFpbixKPWhwKG0pO3JldHVybiBHbChWLGZ1bmN0aW9uKGl0KXt2YXIgZnQ9dltpdF07bVtpdF09ZnQsSiYmKG0ucHJvdG90eXBlW2l0XT1mdW5jdGlvbigpe3ZhciBEdD10aGlzLl9fY2hhaW5fXztpZihZfHxEdCl7dmFyIE90PW0odGhpcy5fX3dyYXBwZWRfXyksVnQ9T3QuX19hY3Rpb25zX189ZHModGhpcy5fX2FjdGlvbnNfXyk7cmV0dXJuIFZ0LnB1c2goe2Z1bmM6ZnQsYXJnczphcmd1bWVudHMsdGhpc0FyZzptfSksT3QuX19jaGFpbl9fPUR0LE90fXJldHVybiBmdC5hcHBseShtLGRtKFt0aGlzLnZhbHVlKCldLGFyZ3VtZW50cykpfSl9KSxtfWZ1bmN0aW9uIEd5ZSgpe3JldHVybiBmby5fPT09dGhpcyYmKGZvLl89Z2RlKSx0aGlzfWZ1bmN0aW9uIGxHKCl7fWZ1bmN0aW9uIFd5ZShtKXtyZXR1cm4gbT1RZShtKSxucihmdW5jdGlvbih2KXtyZXR1cm4gV2Z0KHYsbSl9KX12YXIgWXllPUJxKEtuKSxqeWU9QnEoZmZ0KSxYeWU9QnEodXEpO2Z1bmN0aW9uIGNkdChtKXtyZXR1cm4gWXEobSk/aHEoX2gobSkpOk1tZShtKX1mdW5jdGlvbiAkeWUobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3JldHVybiBtPT1udWxsP2U6b18obSx2KX19dmFyIEt5ZT1wcHQoKSxaeWU9cHB0KCEwKTtmdW5jdGlvbiBjRygpe3JldHVybltdfWZ1bmN0aW9uIHVHKCl7cmV0dXJuITF9ZnVuY3Rpb24gSnllKCl7cmV0dXJue319ZnVuY3Rpb24gUXllKCl7cmV0dXJuIiJ9ZnVuY3Rpb24gdHZlKCl7cmV0dXJuITB9ZnVuY3Rpb24gZXZlKG0sdil7aWYobT1RZShtKSxtPDF8fG0+VSlyZXR1cm5bXTt2YXIgVD1ydCxOPXJhKG0scnQpO3Y9a2UodiksbS09cnQ7Zm9yKHZhciBWPWRxKE4sdik7KytUPG07KXYoVCk7cmV0dXJuIFZ9ZnVuY3Rpb24gcnZlKG0pe3JldHVybiAkZShtKT9LbihtLF9oKTpYcyhtKT9bbV06ZHMoUHB0KG9uKG0pKSl9ZnVuY3Rpb24gbnZlKG0pe3ZhciB2PSsrZGRlO3JldHVybiBvbihtKSt2fXZhciBpdmU9ZkkoZnVuY3Rpb24obSx2KXtyZXR1cm4gbSt2fSwwKSxvdmU9SHEoImNlaWwiKSxhdmU9ZkkoZnVuY3Rpb24obSx2KXtyZXR1cm4gbS92fSwxKSxzdmU9SHEoImZsb29yIik7ZnVuY3Rpb24gbHZlKG0pe3JldHVybiBtJiZtLmxlbmd0aD9vSShtLF9zLEVxKTplfWZ1bmN0aW9uIGN2ZShtLHYpe3JldHVybiBtJiZtLmxlbmd0aD9vSShtLGtlKHYsMiksRXEpOmV9ZnVuY3Rpb24gdXZlKG0pe3JldHVybiBtZnQobSxfcyl9ZnVuY3Rpb24gaHZlKG0sdil7cmV0dXJuIG1mdChtLGtlKHYsMikpfWZ1bmN0aW9uIGZ2ZShtKXtyZXR1cm4gbSYmbS5sZW5ndGg/b0kobSxfcyxQcSk6ZX1mdW5jdGlvbiBwdmUobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGg/b0kobSxrZSh2LDIpLFBxKTplfXZhciBkdmU9ZkkoZnVuY3Rpb24obSx2KXtyZXR1cm4gbSp2fSwxKSxtdmU9SHEoInJvdW5kIiksZ3ZlPWZJKGZ1bmN0aW9uKG0sdil7cmV0dXJuIG0tdn0sMCk7ZnVuY3Rpb24gX3ZlKG0pe3JldHVybiBtJiZtLmxlbmd0aD9wcShtLF9zKTowfWZ1bmN0aW9uIHl2ZShtLHYpe3JldHVybiBtJiZtLmxlbmd0aD9wcShtLGtlKHYsMikpOjB9cmV0dXJuIEcuYWZ0ZXI9SDBlLEcuYXJ5PUhwdCxHLmFzc2lnbj1DX2UsRy5hc3NpZ25Jbj10ZHQsRy5hc3NpZ25JbldpdGg9RUksRy5hc3NpZ25XaXRoPUFfZSxHLmF0PVBfZSxHLmJlZm9yZT1WcHQsRy5iaW5kPUpxLEcuYmluZEFsbD1OeWUsRy5iaW5kS2V5PVVwdCxHLmNhc3RBcnJheT1KMGUsRy5jaGFpbj16cHQsRy5jaHVuaz1zZ2UsRy5jb21wYWN0PWxnZSxHLmNvbmNhdD1jZ2UsRy5jb25kPUR5ZSxHLmNvbmZvcm1zPU95ZSxHLmNvbnN0YW50PW9HLEcuY291bnRCeT1fMGUsRy5jcmVhdGU9SV9lLEcuY3Vycnk9cXB0LEcuY3VycnlSaWdodD1HcHQsRy5kZWJvdW5jZT1XcHQsRy5kZWZhdWx0cz1MX2UsRy5kZWZhdWx0c0RlZXA9a19lLEcuZGVmZXI9VjBlLEcuZGVsYXk9VTBlLEcuZGlmZmVyZW5jZT11Z2UsRy5kaWZmZXJlbmNlQnk9aGdlLEcuZGlmZmVyZW5jZVdpdGg9ZmdlLEcuZHJvcD1wZ2UsRy5kcm9wUmlnaHQ9ZGdlLEcuZHJvcFJpZ2h0V2hpbGU9bWdlLEcuZHJvcFdoaWxlPWdnZSxHLmZpbGw9X2dlLEcuZmlsdGVyPXYwZSxHLmZsYXRNYXA9dzBlLEcuZmxhdE1hcERlZXA9UzBlLEcuZmxhdE1hcERlcHRoPU0wZSxHLmZsYXR0ZW49UnB0LEcuZmxhdHRlbkRlZXA9eWdlLEcuZmxhdHRlbkRlcHRoPXZnZSxHLmZsaXA9cTBlLEcuZmxvdz1GeWUsRy5mbG93UmlnaHQ9QnllLEcuZnJvbVBhaXJzPXhnZSxHLmZ1bmN0aW9ucz1CX2UsRy5mdW5jdGlvbnNJbj1IX2UsRy5ncm91cEJ5PUUwZSxHLmluaXRpYWw9d2dlLEcuaW50ZXJzZWN0aW9uPVNnZSxHLmludGVyc2VjdGlvbkJ5PU1nZSxHLmludGVyc2VjdGlvbldpdGg9RWdlLEcuaW52ZXJ0PVVfZSxHLmludmVydEJ5PXFfZSxHLmludm9rZU1hcD1DMGUsRy5pdGVyYXRlZT1hRyxHLmtleUJ5PUEwZSxHLmtleXM9cG8sRy5rZXlzSW49Z3MsRy5tYXA9dkksRy5tYXBLZXlzPVdfZSxHLm1hcFZhbHVlcz1ZX2UsRy5tYXRjaGVzPUh5ZSxHLm1hdGNoZXNQcm9wZXJ0eT1WeWUsRy5tZW1vaXplPWJJLEcubWVyZ2U9al9lLEcubWVyZ2VXaXRoPWVkdCxHLm1ldGhvZD1VeWUsRy5tZXRob2RPZj1xeWUsRy5taXhpbj1zRyxHLm5lZ2F0ZT13SSxHLm50aEFyZz1XeWUsRy5vbWl0PVhfZSxHLm9taXRCeT0kX2UsRy5vbmNlPUcwZSxHLm9yZGVyQnk9UDBlLEcub3Zlcj1ZeWUsRy5vdmVyQXJncz1XMGUsRy5vdmVyRXZlcnk9anllLEcub3ZlclNvbWU9WHllLEcucGFydGlhbD1RcSxHLnBhcnRpYWxSaWdodD1ZcHQsRy5wYXJ0aXRpb249STBlLEcucGljaz1LX2UsRy5waWNrQnk9cmR0LEcucHJvcGVydHk9Y2R0LEcucHJvcGVydHlPZj0keWUsRy5wdWxsPVBnZSxHLnB1bGxBbGw9RHB0LEcucHVsbEFsbEJ5PUlnZSxHLnB1bGxBbGxXaXRoPUxnZSxHLnB1bGxBdD1rZ2UsRy5yYW5nZT1LeWUsRy5yYW5nZVJpZ2h0PVp5ZSxHLnJlYXJnPVkwZSxHLnJlamVjdD1SMGUsRy5yZW1vdmU9UmdlLEcucmVzdD1qMGUsRy5yZXZlcnNlPUtxLEcuc2FtcGxlU2l6ZT1EMGUsRy5zZXQ9Sl9lLEcuc2V0V2l0aD1RX2UsRy5zaHVmZmxlPU8wZSxHLnNsaWNlPU5nZSxHLnNvcnRCeT1CMGUsRy5zb3J0ZWRVbmlxPVZnZSxHLnNvcnRlZFVuaXFCeT1VZ2UsRy5zcGxpdD13eWUsRy5zcHJlYWQ9WDBlLEcudGFpbD1xZ2UsRy50YWtlPUdnZSxHLnRha2VSaWdodD1XZ2UsRy50YWtlUmlnaHRXaGlsZT1ZZ2UsRy50YWtlV2hpbGU9amdlLEcudGFwPWwwZSxHLnRocm90dGxlPSQwZSxHLnRocnU9eUksRy50b0FycmF5PVpwdCxHLnRvUGFpcnM9bmR0LEcudG9QYWlyc0luPWlkdCxHLnRvUGF0aD1ydmUsRy50b1BsYWluT2JqZWN0PVFwdCxHLnRyYW5zZm9ybT10eWUsRy51bmFyeT1LMGUsRy51bmlvbj1YZ2UsRy51bmlvbkJ5PSRnZSxHLnVuaW9uV2l0aD1LZ2UsRy51bmlxPVpnZSxHLnVuaXFCeT1KZ2UsRy51bmlxV2l0aD1RZ2UsRy51bnNldD1leWUsRy51bnppcD1acSxHLnVuemlwV2l0aD1PcHQsRy51cGRhdGU9cnllLEcudXBkYXRlV2l0aD1ueWUsRy52YWx1ZXM9TXgsRy52YWx1ZXNJbj1peWUsRy53aXRob3V0PXQwZSxHLndvcmRzPXNkdCxHLndyYXA9WjBlLEcueG9yPWUwZSxHLnhvckJ5PXIwZSxHLnhvcldpdGg9bjBlLEcuemlwPWkwZSxHLnppcE9iamVjdD1vMGUsRy56aXBPYmplY3REZWVwPWEwZSxHLnppcFdpdGg9czBlLEcuZW50cmllcz1uZHQsRy5lbnRyaWVzSW49aWR0LEcuZXh0ZW5kPXRkdCxHLmV4dGVuZFdpdGg9RUksc0coRyxHKSxHLmFkZD1pdmUsRy5hdHRlbXB0PWxkdCxHLmNhbWVsQ2FzZT1seWUsRy5jYXBpdGFsaXplPW9kdCxHLmNlaWw9b3ZlLEcuY2xhbXA9b3llLEcuY2xvbmU9UTBlLEcuY2xvbmVEZWVwPWVfZSxHLmNsb25lRGVlcFdpdGg9cl9lLEcuY2xvbmVXaXRoPXRfZSxHLmNvbmZvcm1zVG89bl9lLEcuZGVidXJyPWFkdCxHLmRlZmF1bHRUbz16eWUsRy5kaXZpZGU9YXZlLEcuZW5kc1dpdGg9Y3llLEcuZXE9cnUsRy5lc2NhcGU9dXllLEcuZXNjYXBlUmVnRXhwPWh5ZSxHLmV2ZXJ5PXkwZSxHLmZpbmQ9eDBlLEcuZmluZEluZGV4PUxwdCxHLmZpbmRLZXk9Ul9lLEcuZmluZExhc3Q9YjBlLEcuZmluZExhc3RJbmRleD1rcHQsRy5maW5kTGFzdEtleT1OX2UsRy5mbG9vcj1zdmUsRy5mb3JFYWNoPUZwdCxHLmZvckVhY2hSaWdodD1CcHQsRy5mb3JJbj1EX2UsRy5mb3JJblJpZ2h0PU9fZSxHLmZvck93bj16X2UsRy5mb3JPd25SaWdodD1GX2UsRy5nZXQ9ckcsRy5ndD1pX2UsRy5ndGU9b19lLEcuaGFzPVZfZSxHLmhhc0luPW5HLEcuaGVhZD1OcHQsRy5pZGVudGl0eT1fcyxHLmluY2x1ZGVzPVQwZSxHLmluZGV4T2Y9YmdlLEcuaW5SYW5nZT1heWUsRy5pbnZva2U9R19lLEcuaXNBcmd1bWVudHM9bF8sRy5pc0FycmF5PSRlLEcuaXNBcnJheUJ1ZmZlcj1hX2UsRy5pc0FycmF5TGlrZT1tcyxHLmlzQXJyYXlMaWtlT2JqZWN0PXhpLEcuaXNCb29sZWFuPXNfZSxHLmlzQnVmZmVyPXdtLEcuaXNEYXRlPWxfZSxHLmlzRWxlbWVudD1jX2UsRy5pc0VtcHR5PXVfZSxHLmlzRXF1YWw9aF9lLEcuaXNFcXVhbFdpdGg9Zl9lLEcuaXNFcnJvcj10RyxHLmlzRmluaXRlPXBfZSxHLmlzRnVuY3Rpb249aHAsRy5pc0ludGVnZXI9anB0LEcuaXNMZW5ndGg9U0ksRy5pc01hcD1YcHQsRy5pc01hdGNoPWRfZSxHLmlzTWF0Y2hXaXRoPW1fZSxHLmlzTmFOPWdfZSxHLmlzTmF0aXZlPV9fZSxHLmlzTmlsPXZfZSxHLmlzTnVsbD15X2UsRy5pc051bWJlcj0kcHQsRy5pc09iamVjdD1laSxHLmlzT2JqZWN0TGlrZT1zaSxHLmlzUGxhaW5PYmplY3Q9Rk0sRy5pc1JlZ0V4cD1lRyxHLmlzU2FmZUludGVnZXI9eF9lLEcuaXNTZXQ9S3B0LEcuaXNTdHJpbmc9TUksRy5pc1N5bWJvbD1YcyxHLmlzVHlwZWRBcnJheT1TeCxHLmlzVW5kZWZpbmVkPWJfZSxHLmlzV2Vha01hcD13X2UsRy5pc1dlYWtTZXQ9U19lLEcuam9pbj1UZ2UsRy5rZWJhYkNhc2U9ZnllLEcubGFzdD0kbCxHLmxhc3RJbmRleE9mPUNnZSxHLmxvd2VyQ2FzZT1weWUsRy5sb3dlckZpcnN0PWR5ZSxHLmx0PU1fZSxHLmx0ZT1FX2UsRy5tYXg9bHZlLEcubWF4Qnk9Y3ZlLEcubWVhbj11dmUsRy5tZWFuQnk9aHZlLEcubWluPWZ2ZSxHLm1pbkJ5PXB2ZSxHLnN0dWJBcnJheT1jRyxHLnN0dWJGYWxzZT11RyxHLnN0dWJPYmplY3Q9SnllLEcuc3R1YlN0cmluZz1ReWUsRy5zdHViVHJ1ZT10dmUsRy5tdWx0aXBseT1kdmUsRy5udGg9QWdlLEcubm9Db25mbGljdD1HeWUsRy5ub29wPWxHLEcubm93PXhJLEcucGFkPW15ZSxHLnBhZEVuZD1neWUsRy5wYWRTdGFydD1feWUsRy5wYXJzZUludD15eWUsRy5yYW5kb209c3llLEcucmVkdWNlPUwwZSxHLnJlZHVjZVJpZ2h0PWswZSxHLnJlcGVhdD12eWUsRy5yZXBsYWNlPXh5ZSxHLnJlc3VsdD1aX2UsRy5yb3VuZD1tdmUsRy5ydW5JbkNvbnRleHQ9dXQsRy5zYW1wbGU9TjBlLEcuc2l6ZT16MGUsRy5zbmFrZUNhc2U9YnllLEcuc29tZT1GMGUsRy5zb3J0ZWRJbmRleD1EZ2UsRy5zb3J0ZWRJbmRleEJ5PU9nZSxHLnNvcnRlZEluZGV4T2Y9emdlLEcuc29ydGVkTGFzdEluZGV4PUZnZSxHLnNvcnRlZExhc3RJbmRleEJ5PUJnZSxHLnNvcnRlZExhc3RJbmRleE9mPUhnZSxHLnN0YXJ0Q2FzZT1TeWUsRy5zdGFydHNXaXRoPU15ZSxHLnN1YnRyYWN0PWd2ZSxHLnN1bT1fdmUsRy5zdW1CeT15dmUsRy50ZW1wbGF0ZT1FeWUsRy50aW1lcz1ldmUsRy50b0Zpbml0ZT1mcCxHLnRvSW50ZWdlcj1RZSxHLnRvTGVuZ3RoPUpwdCxHLnRvTG93ZXI9VHllLEcudG9OdW1iZXI9S2wsRy50b1NhZmVJbnRlZ2VyPVRfZSxHLnRvU3RyaW5nPW9uLEcudG9VcHBlcj1DeWUsRy50cmltPUF5ZSxHLnRyaW1FbmQ9UHllLEcudHJpbVN0YXJ0PUl5ZSxHLnRydW5jYXRlPUx5ZSxHLnVuZXNjYXBlPWt5ZSxHLnVuaXF1ZUlkPW52ZSxHLnVwcGVyQ2FzZT1SeWUsRy51cHBlckZpcnN0PWlHLEcuZWFjaD1GcHQsRy5lYWNoUmlnaHQ9QnB0LEcuZmlyc3Q9TnB0LHNHKEcsZnVuY3Rpb24oKXt2YXIgbT17fTtyZXR1cm4gbWgoRyxmdW5jdGlvbih2LFQpe3VuLmNhbGwoRy5wcm90b3R5cGUsVCl8fChtW1RdPXYpfSksbX0oKSx7Y2hhaW46ITF9KSxHLlZFUlNJT049dCxHbChbImJpbmQiLCJiaW5kS2V5IiwiY3VycnkiLCJjdXJyeVJpZ2h0IiwicGFydGlhbCIsInBhcnRpYWxSaWdodCJdLGZ1bmN0aW9uKG0pe0dbbV0ucGxhY2Vob2xkZXI9R30pLEdsKFsiZHJvcCIsInRha2UiXSxmdW5jdGlvbihtLHYpe2dyLnByb3RvdHlwZVttXT1mdW5jdGlvbihUKXtUPVQ9PT1lPzE6WGkoUWUoVCksMCk7dmFyIE49dGhpcy5fX2ZpbHRlcmVkX18mJiF2P25ldyBncih0aGlzKTp0aGlzLmNsb25lKCk7cmV0dXJuIE4uX19maWx0ZXJlZF9fP04uX190YWtlQ291bnRfXz1yYShULE4uX190YWtlQ291bnRfXyk6Ti5fX3ZpZXdzX18ucHVzaCh7c2l6ZTpyYShULHJ0KSx0eXBlOm0rKE4uX19kaXJfXzwwPyJSaWdodCI6IiIpfSksTn0sZ3IucHJvdG90eXBlW20rIlJpZ2h0Il09ZnVuY3Rpb24oVCl7cmV0dXJuIHRoaXMucmV2ZXJzZSgpW21dKFQpLnJldmVyc2UoKX19KSxHbChbImZpbHRlciIsIm1hcCIsInRha2VXaGlsZSJdLGZ1bmN0aW9uKG0sdil7dmFyIFQ9disxLE49VD09THx8VD09Rjtnci5wcm90b3R5cGVbbV09ZnVuY3Rpb24oVil7dmFyIFk9dGhpcy5jbG9uZSgpO3JldHVybiBZLl9faXRlcmF0ZWVzX18ucHVzaCh7aXRlcmF0ZWU6a2UoViwzKSx0eXBlOlR9KSxZLl9fZmlsdGVyZWRfXz1ZLl9fZmlsdGVyZWRfX3x8TixZfX0pLEdsKFsiaGVhZCIsImxhc3QiXSxmdW5jdGlvbihtLHYpe3ZhciBUPSJ0YWtlIisodj8iUmlnaHQiOiIiKTtnci5wcm90b3R5cGVbbV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tUXSgxKS52YWx1ZSgpWzBdfX0pLEdsKFsiaW5pdGlhbCIsInRhaWwiXSxmdW5jdGlvbihtLHYpe3ZhciBUPSJkcm9wIisodj8iIjoiUmlnaHQiKTtnci5wcm90b3R5cGVbbV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2ZpbHRlcmVkX18/bmV3IGdyKHRoaXMpOnRoaXNbVF0oMSl9fSksZ3IucHJvdG90eXBlLmNvbXBhY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWx0ZXIoX3MpfSxnci5wcm90b3R5cGUuZmluZD1mdW5jdGlvbihtKXtyZXR1cm4gdGhpcy5maWx0ZXIobSkuaGVhZCgpfSxnci5wcm90b3R5cGUuZmluZExhc3Q9ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMucmV2ZXJzZSgpLmZpbmQobSl9LGdyLnByb3RvdHlwZS5pbnZva2VNYXA9bnIoZnVuY3Rpb24obSx2KXtyZXR1cm4gdHlwZW9mIG09PSJmdW5jdGlvbiI/bmV3IGdyKHRoaXMpOnRoaXMubWFwKGZ1bmN0aW9uKFQpe3JldHVybiBrTShULG0sdil9KX0pLGdyLnByb3RvdHlwZS5yZWplY3Q9ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMuZmlsdGVyKHdJKGtlKG0pKSl9LGdyLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihtLHYpe209UWUobSk7dmFyIFQ9dGhpcztyZXR1cm4gVC5fX2ZpbHRlcmVkX18mJihtPjB8fHY8MCk/bmV3IGdyKFQpOihtPDA/VD1ULnRha2VSaWdodCgtbSk6bSYmKFQ9VC5kcm9wKG0pKSx2IT09ZSYmKHY9UWUodiksVD12PDA/VC5kcm9wUmlnaHQoLXYpOlQudGFrZSh2LW0pKSxUKX0sZ3IucHJvdG90eXBlLnRha2VSaWdodFdoaWxlPWZ1bmN0aW9uKG0pe3JldHVybiB0aGlzLnJldmVyc2UoKS50YWtlV2hpbGUobSkucmV2ZXJzZSgpfSxnci5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRha2UocnQpfSxtaChnci5wcm90b3R5cGUsZnVuY3Rpb24obSx2KXt2YXIgVD0vXig/OmZpbHRlcnxmaW5kfG1hcHxyZWplY3QpfFdoaWxlJC8udGVzdCh2KSxOPS9eKD86aGVhZHxsYXN0KSQvLnRlc3QodiksVj1HW04/InRha2UiKyh2PT0ibGFzdCI/IlJpZ2h0IjoiIik6dl0sWT1OfHwvXmZpbmQvLnRlc3Qodik7IVZ8fChHLnByb3RvdHlwZVt2XT1mdW5jdGlvbigpe3ZhciBKPXRoaXMuX193cmFwcGVkX18saXQ9Tj9bMV06YXJndW1lbnRzLGZ0PUogaW5zdGFuY2VvZiBncixEdD1pdFswXSxPdD1mdHx8JGUoSiksVnQ9ZnVuY3Rpb24ocHIpe3ZhciB5cj1WLmFwcGx5KEcsZG0oW3ByXSxpdCkpO3JldHVybiBOJiZvZT95clswXTp5cn07T3QmJlQmJnR5cGVvZiBEdD09ImZ1bmN0aW9uIiYmRHQubGVuZ3RoIT0xJiYoZnQ9T3Q9ITEpO3ZhciBvZT10aGlzLl9fY2hhaW5fXyxUZT0hIXRoaXMuX19hY3Rpb25zX18ubGVuZ3RoLE5lPVkmJiFvZSxlcj1mdCYmIVRlO2lmKCFZJiZPdCl7Sj1lcj9KOm5ldyBncih0aGlzKTt2YXIgRGU9bS5hcHBseShKLGl0KTtyZXR1cm4gRGUuX19hY3Rpb25zX18ucHVzaCh7ZnVuYzp5SSxhcmdzOltWdF0sdGhpc0FyZzplfSksbmV3IFlsKERlLG9lKX1yZXR1cm4gTmUmJmVyP20uYXBwbHkodGhpcyxpdCk6KERlPXRoaXMudGhydShWdCksTmU/Tj9EZS52YWx1ZSgpWzBdOkRlLnZhbHVlKCk6RGUpfSl9KSxHbChbInBvcCIsInB1c2giLCJzaGlmdCIsInNvcnQiLCJzcGxpY2UiLCJ1bnNoaWZ0Il0sZnVuY3Rpb24obSl7dmFyIHY9RzZbbV0sVD0vXig/OnB1c2h8c29ydHx1bnNoaWZ0KSQvLnRlc3QobSk/InRhcCI6InRocnUiLE49L14oPzpwb3B8c2hpZnQpJC8udGVzdChtKTtHLnByb3RvdHlwZVttXT1mdW5jdGlvbigpe3ZhciBWPWFyZ3VtZW50cztpZihOJiYhdGhpcy5fX2NoYWluX18pe3ZhciBZPXRoaXMudmFsdWUoKTtyZXR1cm4gdi5hcHBseSgkZShZKT9ZOltdLFYpfXJldHVybiB0aGlzW1RdKGZ1bmN0aW9uKEope3JldHVybiB2LmFwcGx5KCRlKEopP0o6W10sVil9KX19KSxtaChnci5wcm90b3R5cGUsZnVuY3Rpb24obSx2KXt2YXIgVD1HW3ZdO2lmKFQpe3ZhciBOPVQubmFtZSsiIjt1bi5jYWxsKHl4LE4pfHwoeXhbTl09W10pLHl4W05dLnB1c2goe25hbWU6dixmdW5jOlR9KX19KSx5eFtoSShlLGcpLm5hbWVdPVt7bmFtZToid3JhcHBlciIsZnVuYzplfV0sZ3IucHJvdG90eXBlLmNsb25lPWtkZSxnci5wcm90b3R5cGUucmV2ZXJzZT1SZGUsZ3IucHJvdG90eXBlLnZhbHVlPU5kZSxHLnByb3RvdHlwZS5hdD1jMGUsRy5wcm90b3R5cGUuY2hhaW49dTBlLEcucHJvdG90eXBlLmNvbW1pdD1oMGUsRy5wcm90b3R5cGUubmV4dD1mMGUsRy5wcm90b3R5cGUucGxhbnQ9ZDBlLEcucHJvdG90eXBlLnJldmVyc2U9bTBlLEcucHJvdG90eXBlLnRvSlNPTj1HLnByb3RvdHlwZS52YWx1ZU9mPUcucHJvdG90eXBlLnZhbHVlPWcwZSxHLnByb3RvdHlwZS5maXJzdD1HLnByb3RvdHlwZS5oZWFkLEVNJiYoRy5wcm90b3R5cGVbRU1dPXAwZSksR30sZ209aGRlKCk7dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmdHlwZW9mIGRlZmluZS5hbWQ9PSJvYmplY3QiJiZkZWZpbmUuYW1kPyhmby5fPWdtLGRlZmluZShmdW5jdGlvbigpe3JldHVybiBnbX0pKTp0Xz8oKHRfLmV4cG9ydHM9Z20pLl89Z20sYXEuXz1nbSk6Zm8uXz1nbX0pLmNhbGwoUngpfSk7ZnVuY3Rpb24gX190KCl7Zm9yKHZhciBlPTAsdD1hcmd1bWVudHMubGVuZ3RoLHI9e30sbjtlPHQ7KytlKXtpZighKG49YXJndW1lbnRzW2VdKyIiKXx8biBpbiByfHwvW1xzLl0vLnRlc3QobikpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IEo5KHIpfWZ1bmN0aW9uIEo5KGUpe3RoaXMuXz1lfWZ1bmN0aW9uIGcyZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIF8yZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIGdfdChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09bTJlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgbTJlLHhzLHlfdD1NKCgpPT57bTJlPXt2YWx1ZTpmdW5jdGlvbigpe319O0o5LnByb3RvdHlwZT1fX3QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpKOSxvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuXyxuPWcyZShlKyIiLHIpLGksbz0tMSxhPW4ubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK288YTspaWYoKGk9KGU9bltvXSkudHlwZSkmJihpPV8yZShyW2ldLGUubmFtZSkpKXJldHVybiBpO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK288YTspaWYoaT0oZT1uW29dKS50eXBlKXJbaV09Z190KHJbaV0sZS5uYW1lLHQpO2Vsc2UgaWYodD09bnVsbClmb3IoaSBpbiByKXJbaV09Z190KHJbaV0sZS5uYW1lLG51bGwpO3JldHVybiB0aGlzfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGU9e30sdD10aGlzLl87Zm9yKHZhciByIGluIHQpZVtyXT10W3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBKOShlKX0sY2FsbDpmdW5jdGlvbihlLHQpe2lmKChpPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHI9bmV3IEFycmF5KGkpLG49MCxpLG87bjxpOysrbilyW25dPWFyZ3VtZW50c1tuKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKG89dGhpcy5fW2VdLG49MCxpPW8ubGVuZ3RoO248aTsrK24pb1tuXS52YWx1ZS5hcHBseSh0LHIpfSxhcHBseTpmdW5jdGlvbihlLHQscil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3IodmFyIG49dGhpcy5fW2VdLGk9MCxvPW4ubGVuZ3RoO2k8bzsrK2kpbltpXS52YWx1ZS5hcHBseSh0LHIpfX07eHM9X190fSk7dmFyIFJtPU0oKCk9Pnt5X3QoKX0pO2Z1bmN0aW9uIF9ZKGUpe3JldHVybitlfXZhciBDdnQ9TSgoKT0+e30pO2Z1bmN0aW9uIHlZKGUpe3JldHVybiBlKmV9ZnVuY3Rpb24gdlkoZSl7cmV0dXJuIGUqKDItZSl9ZnVuY3Rpb24gSUwoZSl7cmV0dXJuKChlKj0yKTw9MT9lKmU6LS1lKigyLWUpKzEpLzJ9dmFyIEF2dD1NKCgpPT57fSk7ZnVuY3Rpb24geFkoZSl7cmV0dXJuIGUqZSplfWZ1bmN0aW9uIGJZKGUpe3JldHVybi0tZSplKmUrMX1mdW5jdGlvbiBicyhlKXtyZXR1cm4oKGUqPTIpPD0xP2UqZSplOihlLT0yKSplKmUrMikvMn12YXIgUHZ0PU0oKCk9Pnt9KTt2YXIgd1ksU1ksTVksTEwsSXZ0PU0oKCk9Pnt3WT0zLFNZPWZ1bmN0aW9uIGUodCl7dD0rdDtmdW5jdGlvbiByKG4pe3JldHVybiBNYXRoLnBvdyhuLHQpfXJldHVybiByLmV4cG9uZW50PWUscn0od1kpLE1ZPWZ1bmN0aW9uIGUodCl7dD0rdDtmdW5jdGlvbiByKG4pe3JldHVybiAxLU1hdGgucG93KDEtbix0KX1yZXR1cm4gci5leHBvbmVudD1lLHJ9KHdZKSxMTD1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4oKG4qPTIpPD0xP01hdGgucG93KG4sdCk6Mi1NYXRoLnBvdygyLW4sdCkpLzJ9cmV0dXJuIHIuZXhwb25lbnQ9ZSxyfSh3WSl9KTtmdW5jdGlvbiBFWShlKXtyZXR1cm4rZT09MT8xOjEtTWF0aC5jb3MoZSprdnQpfWZ1bmN0aW9uIFRZKGUpe3JldHVybiBNYXRoLnNpbihlKmt2dCl9ZnVuY3Rpb24ga0woZSl7cmV0dXJuKDEtTWF0aC5jb3MoTHZ0KmUpKS8yfXZhciBMdnQsa3Z0LFJ2dD1NKCgpPT57THZ0PU1hdGguUEksa3Z0PUx2dC8yfSk7ZnVuY3Rpb24gT2goZSl7cmV0dXJuKE1hdGgucG93KDIsLTEwKmUpLS4wMDA5NzY1NjI1KSoxLjAwMDk3NzUxNzEwNjU0OTR9dmFyIENZPU0oKCk9Pnt9KTtmdW5jdGlvbiBBWShlKXtyZXR1cm4gT2goMS0rZSl9ZnVuY3Rpb24gUFkoZSl7cmV0dXJuIDEtT2goZSl9ZnVuY3Rpb24gUkwoZSl7cmV0dXJuKChlKj0yKTw9MT9PaCgxLWUpOjItT2goZS0xKSkvMn12YXIgTnZ0PU0oKCk9PntDWSgpfSk7ZnVuY3Rpb24gSVkoZSl7cmV0dXJuIDEtTWF0aC5zcXJ0KDEtZSplKX1mdW5jdGlvbiBMWShlKXtyZXR1cm4gTWF0aC5zcXJ0KDEtIC0tZSplKX1mdW5jdGlvbiBOTChlKXtyZXR1cm4oKGUqPTIpPD0xPzEtTWF0aC5zcXJ0KDEtZSplKTpNYXRoLnNxcnQoMS0oZS09MikqZSkrMSkvMn12YXIgRHZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBSWShlKXtyZXR1cm4gMS1JXygxLWUpfWZ1bmN0aW9uIElfKGUpe3JldHVybihlPStlKTxrWT9ETCplKmU6ZTx1U2U/REwqKGUtPWNTZSkqZStoU2U6ZTxwU2U/REwqKGUtPWZTZSkqZStkU2U6REwqKGUtPW1TZSkqZStnU2V9ZnVuY3Rpb24gTlkoZSl7cmV0dXJuKChlKj0yKTw9MT8xLUlfKDEtZSk6SV8oZS0xKSsxKS8yfXZhciBrWSxjU2UsdVNlLGhTZSxmU2UscFNlLGRTZSxtU2UsZ1NlLERMLE92dD1NKCgpPT57a1k9LjM2MzYzNjM2MzYzNjM2MzY1LGNTZT02LzExLHVTZT04LzExLGhTZT0zLzQsZlNlPTkvMTEscFNlPTEwLzExLGRTZT0xNS8xNixtU2U9MjEvMjIsZ1NlPTYzLzY0LERMPTEva1kva1l9KTt2YXIgRFksT1kselksT0wsenZ0PU0oKCk9PntEWT0xLjcwMTU4LE9ZPWZ1bmN0aW9uIGUodCl7dD0rdDtmdW5jdGlvbiByKG4pe3JldHVybihuPStuKSpuKih0KihuLTEpK24pfXJldHVybiByLm92ZXJzaG9vdD1lLHJ9KERZKSx6WT1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4tLW4qbiooKG4rMSkqdCtuKSsxfXJldHVybiByLm92ZXJzaG9vdD1lLHJ9KERZKSxPTD1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4oKG4qPTIpPDE/bipuKigodCsxKSpuLXQpOihuLT0yKSpuKigodCsxKSpuK3QpKzIpLzJ9cmV0dXJuIHIub3ZlcnNob290PWUscn0oRFkpfSk7dmFyIFNiLEZZLEJZLEhZLHpMLFZZLEZ2dD1NKCgpPT57Q1koKTtTYj0yKk1hdGguUEksRlk9MSxCWT0uMyxIWT1mdW5jdGlvbiBlKHQscil7dmFyIG49TWF0aC5hc2luKDEvKHQ9TWF0aC5tYXgoMSx0KSkpKihyLz1TYik7ZnVuY3Rpb24gaShvKXtyZXR1cm4gdCpPaCgtIC0tbykqTWF0aC5zaW4oKG4tbykvcil9cmV0dXJuIGkuYW1wbGl0dWRlPWZ1bmN0aW9uKG8pe3JldHVybiBlKG8scipTYil9LGkucGVyaW9kPWZ1bmN0aW9uKG8pe3JldHVybiBlKHQsbyl9LGl9KEZZLEJZKSx6TD1mdW5jdGlvbiBlKHQscil7dmFyIG49TWF0aC5hc2luKDEvKHQ9TWF0aC5tYXgoMSx0KSkpKihyLz1TYik7ZnVuY3Rpb24gaShvKXtyZXR1cm4gMS10Kk9oKG89K28pKk1hdGguc2luKChvK24pL3IpfXJldHVybiBpLmFtcGxpdHVkZT1mdW5jdGlvbihvKXtyZXR1cm4gZShvLHIqU2IpfSxpLnBlcmlvZD1mdW5jdGlvbihvKXtyZXR1cm4gZSh0LG8pfSxpfShGWSxCWSksVlk9ZnVuY3Rpb24gZSh0LHIpe3ZhciBuPU1hdGguYXNpbigxLyh0PU1hdGgubWF4KDEsdCkpKSooci89U2IpO2Z1bmN0aW9uIGkobyl7cmV0dXJuKChvPW8qMi0xKTwwP3QqT2goLW8pKk1hdGguc2luKChuLW8pL3IpOjItdCpPaChvKSpNYXRoLnNpbigobitvKS9yKSkvMn1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obyl7cmV0dXJuIGUobyxyKlNiKX0saS5wZXJpb2Q9ZnVuY3Rpb24obyl7cmV0dXJuIGUodCxvKX0saX0oRlksQlkpfSk7dmFyIEJ2dD17fTtacyhCdnQse2Vhc2VCYWNrOigpPT5PTCxlYXNlQmFja0luOigpPT5PWSxlYXNlQmFja0luT3V0OigpPT5PTCxlYXNlQmFja091dDooKT0+elksZWFzZUJvdW5jZTooKT0+SV8sZWFzZUJvdW5jZUluOigpPT5SWSxlYXNlQm91bmNlSW5PdXQ6KCk9Pk5ZLGVhc2VCb3VuY2VPdXQ6KCk9PklfLGVhc2VDaXJjbGU6KCk9Pk5MLGVhc2VDaXJjbGVJbjooKT0+SVksZWFzZUNpcmNsZUluT3V0OigpPT5OTCxlYXNlQ2lyY2xlT3V0OigpPT5MWSxlYXNlQ3ViaWM6KCk9PmJzLGVhc2VDdWJpY0luOigpPT54WSxlYXNlQ3ViaWNJbk91dDooKT0+YnMsZWFzZUN1YmljT3V0OigpPT5iWSxlYXNlRWxhc3RpYzooKT0+ekwsZWFzZUVsYXN0aWNJbjooKT0+SFksZWFzZUVsYXN0aWNJbk91dDooKT0+VlksZWFzZUVsYXN0aWNPdXQ6KCk9PnpMLGVhc2VFeHA6KCk9PlJMLGVhc2VFeHBJbjooKT0+QVksZWFzZUV4cEluT3V0OigpPT5STCxlYXNlRXhwT3V0OigpPT5QWSxlYXNlTGluZWFyOigpPT5fWSxlYXNlUG9seTooKT0+TEwsZWFzZVBvbHlJbjooKT0+U1ksZWFzZVBvbHlJbk91dDooKT0+TEwsZWFzZVBvbHlPdXQ6KCk9Pk1ZLGVhc2VRdWFkOigpPT5JTCxlYXNlUXVhZEluOigpPT55WSxlYXNlUXVhZEluT3V0OigpPT5JTCxlYXNlUXVhZE91dDooKT0+dlksZWFzZVNpbjooKT0+a0wsZWFzZVNpbkluOigpPT5FWSxlYXNlU2luSW5PdXQ6KCk9PmtMLGVhc2VTaW5PdXQ6KCk9PlRZfSk7dmFyIExfPU0oKCk9PntDdnQoKTtBdnQoKTtQdnQoKTtJdnQoKTtSdnQoKTtOdnQoKTtEdnQoKTtPdnQoKTt6dnQoKTtGdnQoKX0pO2Z1bmN0aW9uIFlMKCl7fWZ1bmN0aW9uIFF2dChlLHQpe3ZhciByPW5ldyBZTDtpZihlIGluc3RhbmNlb2YgWUwpZS5lYWNoKGZ1bmN0aW9uKHMsbCl7ci5zZXQobCxzKX0pO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShlKSl7dmFyIG49LTEsaT1lLmxlbmd0aCxvO2lmKHQ9PW51bGwpZm9yKDsrK248aTspci5zZXQobixlW25dKTtlbHNlIGZvcig7KytuPGk7KXIuc2V0KHQobz1lW25dLG4sZSksbyl9ZWxzZSBpZihlKWZvcih2YXIgYSBpbiBlKXIuc2V0KGEsZVthXSk7cmV0dXJuIHJ9dmFyIHJsLEppLGpMPU0oKCk9PntybD0iJCI7WUwucHJvdG90eXBlPVF2dC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOllMLGhhczpmdW5jdGlvbihlKXtyZXR1cm4gcmwrZSBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXNbcmwrZV19LHNldDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzW3JsK2VdPXQsdGhpc30scmVtb3ZlOmZ1bmN0aW9uKGUpe3ZhciB0PXJsK2U7cmV0dXJuIHQgaW4gdGhpcyYmZGVsZXRlIHRoaXNbdF19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMpZVswXT09PXJsJiZkZWxldGUgdGhpc1tlXX0sa2V5czpmdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1ybCYmZS5wdXNoKHQuc2xpY2UoMSkpO3JldHVybiBlfSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgZT1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09cmwmJmUucHVzaCh0aGlzW3RdKTtyZXR1cm4gZX0sZW50cmllczpmdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1ybCYmZS5wdXNoKHtrZXk6dC5zbGljZSgxKSx2YWx1ZTp0aGlzW3RdfSk7cmV0dXJuIGV9LHNpemU6ZnVuY3Rpb24oKXt2YXIgZT0wO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1ybCYmKytlO3JldHVybiBlfSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzKWlmKGVbMF09PT1ybClyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09cmwmJmUodGhpc1t0XSx0LnNsaWNlKDEpLHRoaXMpfX07Smk9UXZ0fSk7ZnVuY3Rpb24gcjF0KCl7dmFyIGU9W10sdD1bXSxyLG4saTtmdW5jdGlvbiBvKHMsbCxjLHUpe2lmKGw+PWUubGVuZ3RoKXJldHVybiByIT1udWxsJiZzLnNvcnQociksbiE9bnVsbD9uKHMpOnM7Zm9yKHZhciBoPS0xLGY9cy5sZW5ndGgscD1lW2wrK10sZCxnLF89SmkoKSx5LHg9YygpOysraDxmOykoeT1fLmdldChkPXAoZz1zW2hdKSsiIikpP3kucHVzaChnKTpfLnNldChkLFtnXSk7cmV0dXJuIF8uZWFjaChmdW5jdGlvbihiLFMpe3UoeCxTLG8oYixsLGMsdSkpfSkseH1mdW5jdGlvbiBhKHMsbCl7aWYoKytsPmUubGVuZ3RoKXJldHVybiBzO3ZhciBjLHU9dFtsLTFdO3JldHVybiBuIT1udWxsJiZsPj1lLmxlbmd0aD9jPXMuZW50cmllcygpOihjPVtdLHMuZWFjaChmdW5jdGlvbihoLGYpe2MucHVzaCh7a2V5OmYsdmFsdWVzOmEoaCxsKX0pfSkpLHUhPW51bGw/Yy5zb3J0KGZ1bmN0aW9uKGgsZil7cmV0dXJuIHUoaC5rZXksZi5rZXkpfSk6Y31yZXR1cm4gaT17b2JqZWN0OmZ1bmN0aW9uKHMpe3JldHVybiBvKHMsMCxOU2UsRFNlKX0sbWFwOmZ1bmN0aW9uKHMpe3JldHVybiBvKHMsMCx0MXQsZTF0KX0sZW50cmllczpmdW5jdGlvbihzKXtyZXR1cm4gYShvKHMsMCx0MXQsZTF0KSwwKX0sa2V5OmZ1bmN0aW9uKHMpe3JldHVybiBlLnB1c2gocyksaX0sc29ydEtleXM6ZnVuY3Rpb24ocyl7cmV0dXJuIHRbZS5sZW5ndGgtMV09cyxpfSxzb3J0VmFsdWVzOmZ1bmN0aW9uKHMpe3JldHVybiByPXMsaX0scm9sbHVwOmZ1bmN0aW9uKHMpe3JldHVybiBuPXMsaX19fWZ1bmN0aW9uIE5TZSgpe3JldHVybnt9fWZ1bmN0aW9uIERTZShlLHQscil7ZVt0XT1yfWZ1bmN0aW9uIHQxdCgpe3JldHVybiBKaSgpfWZ1bmN0aW9uIGUxdChlLHQscil7ZS5zZXQodCxyKX12YXIgbjF0PU0oKCk9PntqTCgpfSk7ZnVuY3Rpb24gWEwoKXt9ZnVuY3Rpb24gaTF0KGUsdCl7dmFyIHI9bmV3IFhMO2lmKGUgaW5zdGFuY2VvZiBYTCllLmVhY2goZnVuY3Rpb24obyl7ci5hZGQobyl9KTtlbHNlIGlmKGUpe3ZhciBuPS0xLGk9ZS5sZW5ndGg7aWYodD09bnVsbClmb3IoOysrbjxpOylyLmFkZChlW25dKTtlbHNlIGZvcig7KytuPGk7KXIuYWRkKHQoZVtuXSxuLGUpKX1yZXR1cm4gcn12YXIgUl8sbzF0LGExdD1NKCgpPT57akwoKTtSXz1KaS5wcm90b3R5cGU7WEwucHJvdG90eXBlPWkxdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlhMLGhhczpSXy5oYXMsYWRkOmZ1bmN0aW9uKGUpe3JldHVybiBlKz0iIix0aGlzW3JsK2VdPWUsdGhpc30scmVtb3ZlOlJfLnJlbW92ZSxjbGVhcjpSXy5jbGVhcix2YWx1ZXM6Ul8ua2V5cyxzaXplOlJfLnNpemUsZW1wdHk6Ul8uZW1wdHksZWFjaDpSXy5lYWNofTtvMXQ9aTF0fSk7ZnVuY3Rpb24gJEwoZSl7dmFyIHQ9W107Zm9yKHZhciByIGluIGUpdC5wdXNoKHIpO3JldHVybiB0fXZhciBzMXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGwxdChlKXt2YXIgdD1bXTtmb3IodmFyIHIgaW4gZSl0LnB1c2goZVtyXSk7cmV0dXJuIHR9dmFyIGMxdD1NKCgpPT57fSk7ZnVuY3Rpb24gdTF0KGUpe3ZhciB0PVtdO2Zvcih2YXIgciBpbiBlKXQucHVzaCh7a2V5OnIsdmFsdWU6ZVtyXX0pO3JldHVybiB0fXZhciBoMXQ9TSgoKT0+e30pO3ZhciBUYj1NKCgpPT57bjF0KCk7YTF0KCk7akwoKTtzMXQoKTtjMXQoKTtoMXQoKX0pO2Z1bmN0aW9uIHYxdChlKXtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJkIiwicmV0dXJuIHsiK2UubWFwKGZ1bmN0aW9uKHQscil7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpKyI6IGRbIityKyddIHx8ICIiJ30pLmpvaW4oIiwiKSsifSIpfWZ1bmN0aW9uIEdTZShlLHQpe3ZhciByPXYxdChlKTtyZXR1cm4gZnVuY3Rpb24obixpKXtyZXR1cm4gdChyKG4pLGksZSl9fWZ1bmN0aW9uIHkxdChlKXt2YXIgdD1PYmplY3QuY3JlYXRlKG51bGwpLHI9W107cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihuKXtmb3IodmFyIGkgaW4gbilpIGluIHR8fHIucHVzaCh0W2ldPWkpfSkscn1mdW5jdGlvbiBTcyhlLHQpe3ZhciByPWUrIiIsbj1yLmxlbmd0aDtyZXR1cm4gbjx0P25ldyBBcnJheSh0LW4rMSkuam9pbigwKStyOnJ9ZnVuY3Rpb24gV1NlKGUpe3JldHVybiBlPDA/Ii0iK1NzKC1lLDYpOmU+OTk5OT8iKyIrU3MoZSw2KTpTcyhlLDQpfWZ1bmN0aW9uIFlTZShlKXt2YXIgdD1lLmdldFVUQ0hvdXJzKCkscj1lLmdldFVUQ01pbnV0ZXMoKSxuPWUuZ2V0VVRDU2Vjb25kcygpLGk9ZS5nZXRVVENNaWxsaXNlY29uZHMoKTtyZXR1cm4gaXNOYU4oZSk/IkludmFsaWQgRGF0ZSI6V1NlKGUuZ2V0VVRDRnVsbFllYXIoKSw0KSsiLSIrU3MoZS5nZXRVVENNb250aCgpKzEsMikrIi0iK1NzKGUuZ2V0VVRDRGF0ZSgpLDIpKyhpPyJUIitTcyh0LDIpKyI6IitTcyhyLDIpKyI6IitTcyhuLDIpKyIuIitTcyhpLDMpKyJaIjpuPyJUIitTcyh0LDIpKyI6IitTcyhyLDIpKyI6IitTcyhuLDIpKyJaIjpyfHx0PyJUIitTcyh0LDIpKyI6IitTcyhyLDIpKyJaIjoiIil9ZnVuY3Rpb24gWW0oZSl7dmFyIHQ9bmV3IFJlZ0V4cCgnWyInK2UrYApccl1gKSxyPWUuY2hhckNvZGVBdCgwKTtmdW5jdGlvbiBuKGgsZil7dmFyIHAsZCxnPWkoaCxmdW5jdGlvbihfLHkpe2lmKHApcmV0dXJuIHAoXyx5LTEpO2Q9XyxwPWY/R1NlKF8sZik6djF0KF8pfSk7cmV0dXJuIGcuY29sdW1ucz1kfHxbXSxnfWZ1bmN0aW9uIGkoaCxmKXt2YXIgcD1bXSxkPWgubGVuZ3RoLGc9MCxfPTAseSx4PWQ8PTAsYj0hMTtoLmNoYXJDb2RlQXQoZC0xKT09PVVFJiYtLWQsaC5jaGFyQ29kZUF0KGQtMSk9PT1uaiYmLS1kO2Z1bmN0aW9uIFMoKXtpZih4KXJldHVybiBlajtpZihiKXJldHVybiBiPSExLF8xdDt2YXIgUCxrPWcsTztpZihoLmNoYXJDb2RlQXQoayk9PT1yail7Zm9yKDtnKys8ZCYmaC5jaGFyQ29kZUF0KGcpIT09cmp8fGguY2hhckNvZGVBdCgrK2cpPT09cmo7KTtyZXR1cm4oUD1nKT49ZD94PSEwOihPPWguY2hhckNvZGVBdChnKyspKT09PVVFP2I9ITA6Tz09PW5qJiYoYj0hMCxoLmNoYXJDb2RlQXQoZyk9PT1VRSYmKytnKSxoLnNsaWNlKGsrMSxQLTEpLnJlcGxhY2UoLyIiL2csJyInKX1mb3IoO2c8ZDspe2lmKChPPWguY2hhckNvZGVBdChQPWcrKykpPT09VUUpYj0hMDtlbHNlIGlmKE89PT1uailiPSEwLGguY2hhckNvZGVBdChnKT09PVVFJiYrK2c7ZWxzZSBpZihPIT09ciljb250aW51ZTtyZXR1cm4gaC5zbGljZShrLFApfXJldHVybiB4PSEwLGguc2xpY2UoayxkKX1mb3IoOyh5PVMoKSkhPT1lajspe2Zvcih2YXIgQz1bXTt5IT09XzF0JiZ5IT09ZWo7KUMucHVzaCh5KSx5PVMoKTtmJiYoQz1mKEMsXysrKSk9PW51bGx8fHAucHVzaChDKX1yZXR1cm4gcH1mdW5jdGlvbiBvKGgsZil7cmV0dXJuIGgubWFwKGZ1bmN0aW9uKHApe3JldHVybiBmLm1hcChmdW5jdGlvbihkKXtyZXR1cm4gdShwW2RdKX0pLmpvaW4oZSl9KX1mdW5jdGlvbiBhKGgsZil7cmV0dXJuIGY9PW51bGwmJihmPXkxdChoKSksW2YubWFwKHUpLmpvaW4oZSldLmNvbmNhdChvKGgsZikpLmpvaW4oYApgKX1mdW5jdGlvbiBzKGgsZil7cmV0dXJuIGY9PW51bGwmJihmPXkxdChoKSksbyhoLGYpLmpvaW4oYApgKX1mdW5jdGlvbiBsKGgpe3JldHVybiBoLm1hcChjKS5qb2luKGAKYCl9ZnVuY3Rpb24gYyhoKXtyZXR1cm4gaC5tYXAodSkuam9pbihlKX1mdW5jdGlvbiB1KGgpe3JldHVybiBoPT1udWxsPyIiOmggaW5zdGFuY2VvZiBEYXRlP1lTZShoKTp0LnRlc3QoaCs9IiIpPyciJytoLnJlcGxhY2UoLyIvZywnIiInKSsnIic6aH1yZXR1cm57cGFyc2U6bixwYXJzZVJvd3M6aSxmb3JtYXQ6YSxmb3JtYXRCb2R5OnMsZm9ybWF0Um93czpsLGZvcm1hdFJvdzpjLGZvcm1hdFZhbHVlOnV9fXZhciBfMXQsZWoscmosVUUsbmosdGs9TSgoKT0+e18xdD17fSxlaj17fSxyaj0zNCxVRT0xMCxuaj0xM30pO3ZhciBOXyxDYix4MXQsYjF0LHcxdCxTMXQsTTF0LEUxdCxUMXQ9TSgoKT0+e3RrKCk7Tl89WW0oIiwiKSxDYj1OXy5wYXJzZSx4MXQ9Tl8ucGFyc2VSb3dzLGIxdD1OXy5mb3JtYXQsdzF0PU5fLmZvcm1hdEJvZHksUzF0PU5fLmZvcm1hdFJvd3MsTTF0PU5fLmZvcm1hdFJvdyxFMXQ9Tl8uZm9ybWF0VmFsdWV9KTt2YXIgRF8sQWIsQzF0LEExdCxQMXQsSTF0LEwxdCxrMXQsUjF0PU0oKCk9Pnt0aygpO0RfPVltKCIJIiksQWI9RF8ucGFyc2UsQzF0PURfLnBhcnNlUm93cyxBMXQ9RF8uZm9ybWF0LFAxdD1EXy5mb3JtYXRCb2R5LEkxdD1EXy5mb3JtYXRSb3dzLEwxdD1EXy5mb3JtYXRSb3csazF0PURfLmZvcm1hdFZhbHVlfSk7ZnVuY3Rpb24gaWooZSl7Zm9yKHZhciB0IGluIGUpe3ZhciByPWVbdF0udHJpbSgpLG4saTtpZighcilyPW51bGw7ZWxzZSBpZihyPT09InRydWUiKXI9ITA7ZWxzZSBpZihyPT09ImZhbHNlIilyPSExO2Vsc2UgaWYocj09PSJOYU4iKXI9TmFOO2Vsc2UgaWYoIWlzTmFOKG49K3IpKXI9bjtlbHNlIGlmKGk9ci5tYXRjaCgvXihbLStdXGR7Mn0pP1xkezR9KC1cZHsyfSgtXGR7Mn0pPyk/KFRcZHsyfTpcZHsyfSg6XGR7Mn0oXC5cZHszfSk/KT8oWnxbLStdXGR7Mn06XGR7Mn0pPyk/JC8pKWpTZSYmISFpWzRdJiYhaVs3XSYmKHI9ci5yZXBsYWNlKC8tL2csIi8iKS5yZXBsYWNlKC9ULywiICIpKSxyPW5ldyBEYXRlKHIpO2Vsc2UgY29udGludWU7ZVt0XT1yfXJldHVybiBlfXZhciBqU2UsTjF0PU0oKCk9PntqU2U9bmV3IERhdGUoIjIwMTktMDEtMDFUMDA6MDAiKS5nZXRIb3VycygpfHxuZXcgRGF0ZSgiMjAxOS0wNy0wMVQwMDowMCIpLmdldEhvdXJzKCl9KTt2YXIgcUU9TSgoKT0+e3RrKCk7VDF0KCk7UjF0KCk7TjF0KCl9KTt2YXIgcGU9e307WnMocGUse19fYXNzaWduOigpPT55NWUsX19hc3luY0RlbGVnYXRvcjooKT0+QTVlLF9fYXN5bmNHZW5lcmF0b3I6KCk9PkM1ZSxfX2FzeW5jVmFsdWVzOigpPT5QNWUsX19hd2FpdDooKT0+VTUsX19hd2FpdGVyOigpPT5TNWUsX19kZWNvcmF0ZTooKT0+eDVlLF9fZXhwb3J0U3RhcjooKT0+RTVlLF9fZXh0ZW5kczooKT0+XzVlLF9fZ2VuZXJhdG9yOigpPT5NNWUsX19tYWtlVGVtcGxhdGVPYmplY3Q6KCk9Pkk1ZSxfX21ldGFkYXRhOigpPT53NWUsX19wYXJhbTooKT0+YjVlLF9fcmVhZDooKT0+bk10LF9fcmVzdDooKT0+djVlLF9fc3ByZWFkOigpPT5UNWUsX192YWx1ZXM6KCk9PnkkfSk7ZnVuY3Rpb24gXzVlKGUsdCl7ZzVlKGUsdCk7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9ZX1lLnByb3RvdHlwZT10PT09bnVsbD9PYmplY3QuY3JlYXRlKHQpOihyLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgcil9ZnVuY3Rpb24gdjVlKGUsdCl7dmFyIHI9e307Zm9yKHZhciBuIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJnQuaW5kZXhPZihuKTwwJiYocltuXT1lW25dKTtpZihlIT1udWxsJiZ0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz09ImZ1bmN0aW9uIilmb3IodmFyIGk9MCxuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7aTxuLmxlbmd0aDtpKyspdC5pbmRleE9mKG5baV0pPDAmJihyW25baV1dPWVbbltpXV0pO3JldHVybiByfWZ1bmN0aW9uIHg1ZShlLHQscixuKXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoLG89aTwzP3Q6bj09PW51bGw/bj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQscik6bixhO2lmKHR5cGVvZiBSZWZsZWN0PT0ib2JqZWN0IiYmdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGU9PSJmdW5jdGlvbiIpbz1SZWZsZWN0LmRlY29yYXRlKGUsdCxyLG4pO2Vsc2UgZm9yKHZhciBzPWUubGVuZ3RoLTE7cz49MDtzLS0pKGE9ZVtzXSkmJihvPShpPDM/YShvKTppPjM/YSh0LHIsbyk6YSh0LHIpKXx8byk7cmV0dXJuIGk+MyYmbyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQscixvKSxvfWZ1bmN0aW9uIGI1ZShlLHQpe3JldHVybiBmdW5jdGlvbihyLG4pe3QocixuLGUpfX1mdW5jdGlvbiB3NWUoZSx0KXtpZih0eXBlb2YgUmVmbGVjdD09Im9iamVjdCImJnR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhPT0iZnVuY3Rpb24iKXJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGUsdCl9ZnVuY3Rpb24gUzVlKGUsdCxyLG4pe3JldHVybiBuZXcocnx8KHI9UHJvbWlzZSkpKGZ1bmN0aW9uKGksbyl7ZnVuY3Rpb24gYShjKXt0cnl7bChuLm5leHQoYykpfWNhdGNoKHUpe28odSl9fWZ1bmN0aW9uIHMoYyl7dHJ5e2wobi50aHJvdyhjKSl9Y2F0Y2godSl7byh1KX19ZnVuY3Rpb24gbChjKXtjLmRvbmU/aShjLnZhbHVlKTpuZXcgcihmdW5jdGlvbih1KXt1KGMudmFsdWUpfSkudGhlbihhLHMpfWwoKG49bi5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pfWZ1bmN0aW9uIE01ZShlLHQpe3ZhciByPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZihvWzBdJjEpdGhyb3cgb1sxXTtyZXR1cm4gb1sxXX0sdHJ5czpbXSxvcHM6W119LG4saSxvLGE7cmV0dXJuIGE9e25leHQ6cygwKSx0aHJvdzpzKDEpLHJldHVybjpzKDIpfSx0eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiYoYVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxhO2Z1bmN0aW9uIHMoYyl7cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiBsKFtjLHVdKX19ZnVuY3Rpb24gbChjKXtpZihuKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3I7KXRyeXtpZihuPTEsaSYmKG89aVtjWzBdJjI/InJldHVybiI6Y1swXT8idGhyb3ciOiJuZXh0Il0pJiYhKG89by5jYWxsKGksY1sxXSkpLmRvbmUpcmV0dXJuIG87c3dpdGNoKGk9MCxvJiYoYz1bMCxvLnZhbHVlXSksY1swXSl7Y2FzZSAwOmNhc2UgMTpvPWM7YnJlYWs7Y2FzZSA0OnJldHVybiByLmxhYmVsKysse3ZhbHVlOmNbMV0sZG9uZTohMX07Y2FzZSA1OnIubGFiZWwrKyxpPWNbMV0sYz1bMF07Y29udGludWU7Y2FzZSA3OmM9ci5vcHMucG9wKCksci50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYobz1yLnRyeXMsIShvPW8ubGVuZ3RoPjAmJm9bby5sZW5ndGgtMV0pJiYoY1swXT09PTZ8fGNbMF09PT0yKSl7cj0wO2NvbnRpbnVlfWlmKGNbMF09PT0zJiYoIW98fGNbMV0+b1swXSYmY1sxXTxvWzNdKSl7ci5sYWJlbD1jWzFdO2JyZWFrfWlmKGNbMF09PT02JiZyLmxhYmVsPG9bMV0pe3IubGFiZWw9b1sxXSxvPWM7YnJlYWt9aWYobyYmci5sYWJlbDxvWzJdKXtyLmxhYmVsPW9bMl0sci5vcHMucHVzaChjKTticmVha31vWzJdJiZyLm9wcy5wb3AoKSxyLnRyeXMucG9wKCk7Y29udGludWV9Yz10LmNhbGwoZSxyKX1jYXRjaCh1KXtjPVs2LHVdLGk9MH1maW5hbGx5e249bz0wfWlmKGNbMF0mNSl0aHJvdyBjWzFdO3JldHVybnt2YWx1ZTpjWzBdP2NbMV06dm9pZCAwLGRvbmU6ITB9fX1mdW5jdGlvbiBFNWUoZSx0KXtmb3IodmFyIHIgaW4gZSl0Lmhhc093blByb3BlcnR5KHIpfHwodFtyXT1lW3JdKX1mdW5jdGlvbiB5JChlKXt2YXIgdD10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZlW1N5bWJvbC5pdGVyYXRvcl0scj0wO3JldHVybiB0P3QuY2FsbChlKTp7bmV4dDpmdW5jdGlvbigpe3JldHVybiBlJiZyPj1lLmxlbmd0aCYmKGU9dm9pZCAwKSx7dmFsdWU6ZSYmZVtyKytdLGRvbmU6IWV9fX19ZnVuY3Rpb24gbk10KGUsdCl7dmFyIHI9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmZVtTeW1ib2wuaXRlcmF0b3JdO2lmKCFyKXJldHVybiBlO3ZhciBuPXIuY2FsbChlKSxpLG89W10sYTt0cnl7Zm9yKDsodD09PXZvaWQgMHx8dC0tID4wKSYmIShpPW4ubmV4dCgpKS5kb25lOylvLnB1c2goaS52YWx1ZSl9Y2F0Y2gocyl7YT17ZXJyb3I6c319ZmluYWxseXt0cnl7aSYmIWkuZG9uZSYmKHI9bi5yZXR1cm4pJiZyLmNhbGwobil9ZmluYWxseXtpZihhKXRocm93IGEuZXJyb3J9fXJldHVybiBvfWZ1bmN0aW9uIFQ1ZSgpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllPWUuY29uY2F0KG5NdChhcmd1bWVudHNbdF0pKTtyZXR1cm4gZX1mdW5jdGlvbiBVNShlKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFU1Pyh0aGlzLnY9ZSx0aGlzKTpuZXcgVTUoZSl9ZnVuY3Rpb24gQzVlKGUsdCxyKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIik7dmFyIG49ci5hcHBseShlLHR8fFtdKSxpLG89W107cmV0dXJuIGk9e30sYSgibmV4dCIpLGEoInRocm93IiksYSgicmV0dXJuIiksaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30saTtmdW5jdGlvbiBhKGYpe25bZl0mJihpW2ZdPWZ1bmN0aW9uKHApe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihkLGcpe28ucHVzaChbZixwLGQsZ10pPjF8fHMoZixwKX0pfSl9ZnVuY3Rpb24gcyhmLHApe3RyeXtsKG5bZl0ocCkpfWNhdGNoKGQpe2gob1swXVszXSxkKX19ZnVuY3Rpb24gbChmKXtmLnZhbHVlIGluc3RhbmNlb2YgVTU/UHJvbWlzZS5yZXNvbHZlKGYudmFsdWUudikudGhlbihjLHUpOmgob1swXVsyXSxmKX1mdW5jdGlvbiBjKGYpe3MoIm5leHQiLGYpfWZ1bmN0aW9uIHUoZil7cygidGhyb3ciLGYpfWZ1bmN0aW9uIGgoZixwKXtmKHApLG8uc2hpZnQoKSxvLmxlbmd0aCYmcyhvWzBdWzBdLG9bMF1bMV0pfX1mdW5jdGlvbiBBNWUoZSl7dmFyIHQscjtyZXR1cm4gdD17fSxuKCJuZXh0IiksbigidGhyb3ciLGZ1bmN0aW9uKGkpe3Rocm93IGl9KSxuKCJyZXR1cm4iKSx0W1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sdDtmdW5jdGlvbiBuKGksbyl7ZVtpXSYmKHRbaV09ZnVuY3Rpb24oYSl7cmV0dXJuKHI9IXIpP3t2YWx1ZTpVNShlW2ldKGEpKSxkb25lOmk9PT0icmV0dXJuIn06bz9vKGEpOmF9KX19ZnVuY3Rpb24gUDVlKGUpe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTt2YXIgdD1lW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTtyZXR1cm4gdD90LmNhbGwoZSk6dHlwZW9mIHkkPT0iZnVuY3Rpb24iP3kkKGUpOmVbU3ltYm9sLml0ZXJhdG9yXSgpfWZ1bmN0aW9uIEk1ZShlLHQpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInJhdyIse3ZhbHVlOnR9KTplLnJhdz10LGV9dmFyIGc1ZSx5NWUsZGU9TSgoKT0+e2c1ZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIgaW4gdCl0Lmhhc093blByb3BlcnR5KHIpJiYoZVtyXT10W3JdKX07eTVlPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKHQpe2Zvcih2YXIgcixuPTEsaT1hcmd1bWVudHMubGVuZ3RoO248aTtuKyspe3I9YXJndW1lbnRzW25dO2Zvcih2YXIgbyBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG8pJiYodFtvXT1yW29dKX1yZXR1cm4gdH19KTt2YXIgaU10LG9NdD1NKCgpPT57aU10PSI0LjEzLjAifSk7ZnVuY3Rpb24gX2MoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIGR5PU0oKCk9Pnt9KTtmdW5jdGlvbiBhUihlKXtyZXR1cm4gZS5sZW5ndGg9PT0xJiYoZT1MNWUoZSkpLHtsZWZ0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik8MD9uPW8rMTppPW99cmV0dXJuIG59LHJpZ2h0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik+MD9pPW86bj1vKzF9cmV0dXJuIG59fX1mdW5jdGlvbiBMNWUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIF9jKGUodCkscil9fXZhciB2JD1NKCgpPT57ZHkoKX0pO3ZhciBhTXQseCQsc010LHNSLGIkPU0oKCk9PntkeSgpO3YkKCk7YU10PWFSKF9jKSx4JD1hTXQucmlnaHQsc010PWFNdC5sZWZ0LHNSPXgkfSk7ZnVuY3Rpb24gbE10KGUsdCl7dD09bnVsbCYmKHQ9dyQpO2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgtMSxpPWVbMF0sbz1uZXcgQXJyYXkobjwwPzA6bik7cjxuOylvW3JdPXQoaSxpPWVbKytyXSk7cmV0dXJuIG99ZnVuY3Rpb24gdyQoZSx0KXtyZXR1cm5bZSx0XX12YXIgUyQ9TSgoKT0+e30pO2Z1bmN0aW9uIGNNdChlLHQscil7dmFyIG49ZS5sZW5ndGgsaT10Lmxlbmd0aCxvPW5ldyBBcnJheShuKmkpLGEscyxsLGM7Zm9yKHI9PW51bGwmJihyPXckKSxhPWw9MDthPG47KythKWZvcihjPWVbYV0scz0wO3M8aTsrK3MsKytsKW9bbF09cihjLHRbc10pO3JldHVybiBvfXZhciB1TXQ9TSgoKT0+e1MkKCl9KTtmdW5jdGlvbiBoTXQoZSx0KXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59dmFyIGZNdD1NKCgpPT57fSk7ZnVuY3Rpb24gc2woZSl7cmV0dXJuIGU9PT1udWxsP05hTjorZX12YXIgbDI9TSgoKT0+e30pO2Z1bmN0aW9uIGxSKGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0wLGk9LTEsbz0wLGEscyxsPTA7aWYodD09bnVsbClmb3IoOysraTxyOylpc05hTihhPXNsKGVbaV0pKXx8KHM9YS1vLG8rPXMvKytuLGwrPXMqKGEtbykpO2Vsc2UgZm9yKDsrK2k8cjspaXNOYU4oYT1zbCh0KGVbaV0saSxlKSkpfHwocz1hLW8sbys9cy8rK24sbCs9cyooYS1vKSk7aWYobj4xKXJldHVybiBsLyhuLTEpfXZhciBNJD1NKCgpPT57bDIoKX0pO2Z1bmN0aW9uIGNSKGUsdCl7dmFyIHI9bFIoZSx0KTtyZXR1cm4gciYmTWF0aC5zcXJ0KHIpfXZhciBFJD1NKCgpPT57TSQoKX0pO2Z1bmN0aW9uIHVSKGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG8sYTtpZih0PT1udWxsKXtmb3IoOysrbjxyOylpZigoaT1lW25dKSE9bnVsbCYmaT49aSlmb3Iobz1hPWk7KytuPHI7KShpPWVbbl0pIT1udWxsJiYobz5pJiYobz1pKSxhPGkmJihhPWkpKX1lbHNlIGZvcig7KytuPHI7KWlmKChpPXQoZVtuXSxuLGUpKSE9bnVsbCYmaT49aSlmb3Iobz1hPWk7KytuPHI7KShpPXQoZVtuXSxuLGUpKSE9bnVsbCYmKG8+aSYmKG89aSksYTxpJiYoYT1pKSk7cmV0dXJuW28sYV19dmFyIFQkPU0oKCk9Pnt9KTt2YXIgcE10LGRNdCxtTXQsQyQ9TSgoKT0+e3BNdD1BcnJheS5wcm90b3R5cGUsZE10PXBNdC5zbGljZSxtTXQ9cE10Lm1hcH0pO2Z1bmN0aW9uIHE1KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgZ010PU0oKCk9Pnt9KTtmdW5jdGlvbiBfTXQoZSl7cmV0dXJuIGV9dmFyIHlNdD1NKCgpPT57fSk7ZnVuY3Rpb24gaFIoZSx0LHIpe2U9K2UsdD0rdCxyPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KHQ9ZSxlPTAsMSk6aTwzPzE6K3I7Zm9yKHZhciBuPS0xLGk9TWF0aC5tYXgoMCxNYXRoLmNlaWwoKHQtZSkvcikpfDAsbz1uZXcgQXJyYXkoaSk7KytuPGk7KW9bbl09ZStuKnI7cmV0dXJuIG99dmFyIEEkPU0oKCk9Pnt9KTtmdW5jdGlvbiB2TXQoZSx0LHIpe3ZhciBuLGk9LTEsbyxhLHM7aWYodD0rdCxlPStlLHI9K3IsZT09PXQmJnI+MClyZXR1cm5bZV07aWYoKG49dDxlKSYmKG89ZSxlPXQsdD1vKSwocz1rJChlLHQscikpPT09MHx8IWlzRmluaXRlKHMpKXJldHVybltdO2lmKHM+MClmb3IoZT1NYXRoLmNlaWwoZS9zKSx0PU1hdGguZmxvb3IodC9zKSxhPW5ldyBBcnJheShvPU1hdGguY2VpbCh0LWUrMSkpOysraTxvOylhW2ldPShlK2kpKnM7ZWxzZSBmb3IoZT1NYXRoLmZsb29yKGUqcyksdD1NYXRoLmNlaWwodCpzKSxhPW5ldyBBcnJheShvPU1hdGguY2VpbChlLXQrMSkpOysraTxvOylhW2ldPShlLWkpL3M7cmV0dXJuIG4mJmEucmV2ZXJzZSgpLGF9ZnVuY3Rpb24gayQoZSx0LHIpe3ZhciBuPSh0LWUpL01hdGgubWF4KDAsciksaT1NYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCksbz1uL01hdGgucG93KDEwLGkpO3JldHVybiBpPj0wPyhvPj1QJD8xMDpvPj1JJD81Om8+PUwkPzI6MSkqTWF0aC5wb3coMTAsaSk6LU1hdGgucG93KDEwLC1pKS8obz49UCQ/MTA6bz49SSQ/NTpvPj1MJD8yOjEpfWZ1bmN0aW9uIGZSKGUsdCxyKXt2YXIgbj1NYXRoLmFicyh0LWUpL01hdGgubWF4KDAsciksaT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCkpLG89bi9pO3JldHVybiBvPj1QJD9pKj0xMDpvPj1JJD9pKj01Om8+PUwkJiYoaSo9MiksdDxlPy1pOml9dmFyIFAkLEkkLEwkLFIkPU0oKCk9PntQJD1NYXRoLnNxcnQoNTApLEkkPU1hdGguc3FydCgxMCksTCQ9TWF0aC5zcXJ0KDIpfSk7ZnVuY3Rpb24gcFIoZSl7cmV0dXJuIE1hdGguY2VpbChNYXRoLmxvZyhlLmxlbmd0aCkvTWF0aC5MTjIpKzF9dmFyIE4kPU0oKCk9Pnt9KTtmdW5jdGlvbiB4TXQoKXt2YXIgZT1fTXQsdD11UixyPXBSO2Z1bmN0aW9uIG4oaSl7dmFyIG8sYT1pLmxlbmd0aCxzLGw9bmV3IEFycmF5KGEpO2ZvcihvPTA7bzxhOysrbylsW29dPWUoaVtvXSxvLGkpO3ZhciBjPXQobCksdT1jWzBdLGg9Y1sxXSxmPXIobCx1LGgpO0FycmF5LmlzQXJyYXkoZil8fChmPWZSKHUsaCxmKSxmPWhSKE1hdGguY2VpbCh1L2YpKmYsTWF0aC5mbG9vcihoL2YpKmYsZikpO2Zvcih2YXIgcD1mLmxlbmd0aDtmWzBdPD11OylmLnNoaWZ0KCksLS1wO2Zvcig7ZltwLTFdPmg7KWYucG9wKCksLS1wO3ZhciBkPW5ldyBBcnJheShwKzEpLGc7Zm9yKG89MDtvPD1wOysrbylnPWRbb109W10sZy54MD1vPjA/ZltvLTFdOnUsZy54MT1vPHA/ZltvXTpoO2ZvcihvPTA7bzxhOysrbylzPWxbb10sdTw9cyYmczw9aCYmZFtzUihmLHMsMCxwKV0ucHVzaChpW29dKTtyZXR1cm4gZH1yZXR1cm4gbi52YWx1ZT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOnE1KGkpLG4pOmV9LG4uZG9tYWluPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6cTUoW2lbMF0saVsxXV0pLG4pOnR9LG4udGhyZXNob2xkcz1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOkFycmF5LmlzQXJyYXkoaSk/cTUoZE10LmNhbGwoaSkpOnE1KGkpLG4pOnJ9LG59dmFyIGJNdD1NKCgpPT57QyQoKTtiJCgpO2dNdCgpO1QkKCk7eU10KCk7QSQoKTtSJCgpO04kKCl9KTtmdW5jdGlvbiBteShlLHQscil7aWYocj09bnVsbCYmKHI9c2wpLCEhKG49ZS5sZW5ndGgpKXtpZigodD0rdCk8PTB8fG48MilyZXR1cm4rcihlWzBdLDAsZSk7aWYodD49MSlyZXR1cm4rcihlW24tMV0sbi0xLGUpO3ZhciBuLGk9KG4tMSkqdCxvPU1hdGguZmxvb3IoaSksYT0rcihlW29dLG8sZSkscz0rcihlW28rMV0sbysxLGUpO3JldHVybiBhKyhzLWEpKihpLW8pfX12YXIgZFI9TSgoKT0+e2wyKCl9KTtmdW5jdGlvbiB3TXQoZSx0LHIpe3JldHVybiBlPW1NdC5jYWxsKGUsc2wpLnNvcnQoX2MpLE1hdGguY2VpbCgoci10KS8oMioobXkoZSwuNzUpLW15KGUsLjI1KSkqTWF0aC5wb3coZS5sZW5ndGgsLTEvMykpKX12YXIgU010PU0oKCk9PntDJCgpO2R5KCk7bDIoKTtkUigpfSk7ZnVuY3Rpb24gTU10KGUsdCxyKXtyZXR1cm4gTWF0aC5jZWlsKChyLXQpLygzLjUqY1IoZSkqTWF0aC5wb3coZS5sZW5ndGgsLTEvMykpKX12YXIgRU10PU0oKCk9PntFJCgpfSk7ZnVuY3Rpb24gVE10KGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG87aWYodD09bnVsbCl7Zm9yKDsrK248cjspaWYoKGk9ZVtuXSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9ZVtuXSkhPW51bGwmJmk+byYmKG89aSl9ZWxzZSBmb3IoOysrbjxyOylpZigoaT10KGVbbl0sbixlKSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9dChlW25dLG4sZSkpIT1udWxsJiZpPm8mJihvPWkpO3JldHVybiBvfXZhciBDTXQ9TSgoKT0+e30pO2Z1bmN0aW9uIEFNdChlLHQpe3ZhciByPWUubGVuZ3RoLG49cixpPS0xLG8sYT0wO2lmKHQ9PW51bGwpZm9yKDsrK2k8cjspaXNOYU4obz1zbChlW2ldKSk/LS1uOmErPW87ZWxzZSBmb3IoOysraTxyOylpc05hTihvPXNsKHQoZVtpXSxpLGUpKSk/LS1uOmErPW87aWYobilyZXR1cm4gYS9ufXZhciBQTXQ9TSgoKT0+e2wyKCl9KTtmdW5jdGlvbiBJTXQoZSx0KXt2YXIgcj1lLmxlbmd0aCxuPS0xLGksbz1bXTtpZih0PT1udWxsKWZvcig7KytuPHI7KWlzTmFOKGk9c2woZVtuXSkpfHxvLnB1c2goaSk7ZWxzZSBmb3IoOysrbjxyOylpc05hTihpPXNsKHQoZVtuXSxuLGUpKSl8fG8ucHVzaChpKTtyZXR1cm4gbXkoby5zb3J0KF9jKSwuNSl9dmFyIExNdD1NKCgpPT57ZHkoKTtsMigpO2RSKCl9KTtmdW5jdGlvbiBrTXQoZSl7Zm9yKHZhciB0PWUubGVuZ3RoLHIsbj0tMSxpPTAsbyxhOysrbjx0OylpKz1lW25dLmxlbmd0aDtmb3Iobz1uZXcgQXJyYXkoaSk7LS10Pj0wOylmb3IoYT1lW3RdLHI9YS5sZW5ndGg7LS1yPj0wOylvWy0taV09YVtyXTtyZXR1cm4gb312YXIgUk10PU0oKCk9Pnt9KTtmdW5jdGlvbiBtUihlLHQpe3ZhciByPWUubGVuZ3RoLG49LTEsaSxvO2lmKHQ9PW51bGwpe2Zvcig7KytuPHI7KWlmKChpPWVbbl0pIT1udWxsJiZpPj1pKWZvcihvPWk7KytuPHI7KShpPWVbbl0pIT1udWxsJiZvPmkmJihvPWkpfWVsc2UgZm9yKDsrK248cjspaWYoKGk9dChlW25dLG4sZSkpIT1udWxsJiZpPj1pKWZvcihvPWk7KytuPHI7KShpPXQoZVtuXSxuLGUpKSE9bnVsbCYmbz5pJiYobz1pKTtyZXR1cm4gb312YXIgRCQ9TSgoKT0+e30pO2Z1bmN0aW9uIE5NdChlLHQpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKTtyLS07KW5bcl09ZVt0W3JdXTtyZXR1cm4gbn12YXIgRE10PU0oKCk9Pnt9KTtmdW5jdGlvbiBPTXQoZSx0KXtpZighIShyPWUubGVuZ3RoKSl7dmFyIHIsbj0wLGk9MCxvLGE9ZVtpXTtmb3IodD09bnVsbCYmKHQ9X2MpOysrbjxyOykodChvPWVbbl0sYSk8MHx8dChhLGEpIT09MCkmJihhPW8saT1uKTtpZih0KGEsYSk9PT0wKXJldHVybiBpfX12YXIgek10PU0oKCk9PntkeSgpfSk7ZnVuY3Rpb24gRk10KGUsdCxyKXtmb3IodmFyIG49KHI9PW51bGw/ZS5sZW5ndGg6ciktKHQ9dD09bnVsbD8wOit0KSxpLG87bjspbz1NYXRoLnJhbmRvbSgpKm4tLXwwLGk9ZVtuK3RdLGVbbit0XT1lW28rdF0sZVtvK3RdPWk7cmV0dXJuIGV9dmFyIEJNdD1NKCgpPT57fSk7ZnVuY3Rpb24gSE10KGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG89MDtpZih0PT1udWxsKWZvcig7KytuPHI7KShpPStlW25dKSYmKG8rPWkpO2Vsc2UgZm9yKDsrK248cjspKGk9K3QoZVtuXSxuLGUpKSYmKG8rPWkpO3JldHVybiBvfXZhciBWTXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGdSKGUpe2lmKCEobz1lLmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciB0PS0xLHI9bVIoZSxrNWUpLG49bmV3IEFycmF5KHIpOysrdDxyOylmb3IodmFyIGk9LTEsbyxhPW5bdF09bmV3IEFycmF5KG8pOysraTxvOylhW2ldPWVbaV1bdF07cmV0dXJuIG59ZnVuY3Rpb24gazVlKGUpe3JldHVybiBlLmxlbmd0aH12YXIgTyQ9TSgoKT0+e0QkKCl9KTtmdW5jdGlvbiBVTXQoKXtyZXR1cm4gZ1IoYXJndW1lbnRzKX12YXIgcU10PU0oKCk9PntPJCgpfSk7dmFyIEdNdD1NKCgpPT57YiQoKTtkeSgpO3YkKCk7dU10KCk7Zk10KCk7RSQoKTtUJCgpO2JNdCgpO1NNdCgpO0VNdCgpO04kKCk7Q010KCk7UE10KCk7TE10KCk7Uk10KCk7RCQoKTtTJCgpO0RNdCgpO2RSKCk7QSQoKTt6TXQoKTtCTXQoKTtWTXQoKTtSJCgpO08kKCk7TSQoKTtxTXQoKX0pO3ZhciBfUixXTXQ9TSgoKT0+e19SPUFycmF5LnByb3RvdHlwZS5zbGljZX0pO2Z1bmN0aW9uIFlNdChlKXtyZXR1cm4gZX12YXIgak10PU0oKCk9Pnt9KTtmdW5jdGlvbiBSNWUoZSl7cmV0dXJuInRyYW5zbGF0ZSgiKyhlKy41KSsiLDApIn1mdW5jdGlvbiBONWUoZSl7cmV0dXJuInRyYW5zbGF0ZSgwLCIrKGUrLjUpKyIpIn1mdW5jdGlvbiBENWUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybitlKHQpfX1mdW5jdGlvbiBPNWUoZSl7dmFyIHQ9TWF0aC5tYXgoMCxlLmJhbmR3aWR0aCgpLTEpLzI7cmV0dXJuIGUucm91bmQoKSYmKHQ9TWF0aC5yb3VuZCh0KSksZnVuY3Rpb24ocil7cmV0dXJuK2UocikrdH19ZnVuY3Rpb24gejVlKCl7cmV0dXJuIXRoaXMuX19heGlzfWZ1bmN0aW9uIHhSKGUsdCl7dmFyIHI9W10sbj1udWxsLGk9bnVsbCxvPTYsYT02LHM9MyxsPWU9PT15Unx8ZT09PUc1Py0xOjEsYz1lPT09RzV8fGU9PT12Uj8ieCI6InkiLHU9ZT09PXlSfHxlPT09eiQ/UjVlOk41ZTtmdW5jdGlvbiBoKGYpe3ZhciBwPW49PW51bGw/dC50aWNrcz90LnRpY2tzLmFwcGx5KHQscik6dC5kb21haW4oKTpuLGQ9aT09bnVsbD90LnRpY2tGb3JtYXQ/dC50aWNrRm9ybWF0LmFwcGx5KHQscik6WU10OmksZz1NYXRoLm1heChvLDApK3MsXz10LnJhbmdlKCkseT0rX1swXSsuNSx4PStfW18ubGVuZ3RoLTFdKy41LGI9KHQuYmFuZHdpZHRoP081ZTpENWUpKHQuY29weSgpKSxTPWYuc2VsZWN0aW9uP2Yuc2VsZWN0aW9uKCk6ZixDPVMuc2VsZWN0QWxsKCIuZG9tYWluIikuZGF0YShbbnVsbF0pLFA9Uy5zZWxlY3RBbGwoIi50aWNrIikuZGF0YShwLHQpLm9yZGVyKCksaz1QLmV4aXQoKSxPPVAuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRpY2siKSxEPVAuc2VsZWN0KCJsaW5lIiksQj1QLnNlbGVjdCgidGV4dCIpO0M9Qy5tZXJnZShDLmVudGVyKCkuaW5zZXJ0KCJwYXRoIiwiLnRpY2siKS5hdHRyKCJjbGFzcyIsImRvbWFpbiIpLmF0dHIoInN0cm9rZSIsIiMwMDAiKSksUD1QLm1lcmdlKE8pLEQ9RC5tZXJnZShPLmFwcGVuZCgibGluZSIpLmF0dHIoInN0cm9rZSIsIiMwMDAiKS5hdHRyKGMrIjIiLGwqbykpLEI9Qi5tZXJnZShPLmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLCIjMDAwIikuYXR0cihjLGwqZykuYXR0cigiZHkiLGU9PT15Uj8iMGVtIjplPT09eiQ/IjAuNzFlbSI6IjAuMzJlbSIpKSxmIT09UyYmKEM9Qy50cmFuc2l0aW9uKGYpLFA9UC50cmFuc2l0aW9uKGYpLEQ9RC50cmFuc2l0aW9uKGYpLEI9Qi50cmFuc2l0aW9uKGYpLGs9ay50cmFuc2l0aW9uKGYpLmF0dHIoIm9wYWNpdHkiLFhNdCkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihJKXtyZXR1cm4gaXNGaW5pdGUoST1iKEkpKT91KEkpOnRoaXMuZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKX0pLE8uYXR0cigib3BhY2l0eSIsWE10KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKEkpe3ZhciBMPXRoaXMucGFyZW50Tm9kZS5fX2F4aXM7cmV0dXJuIHUoTCYmaXNGaW5pdGUoTD1MKEkpKT9MOmIoSSkpfSkpLGsucmVtb3ZlKCksQy5hdHRyKCJkIixlPT09RzV8fGU9PXZSPyJNIitsKmErIiwiK3krIkgwLjVWIit4KyJIIitsKmE6Ik0iK3krIiwiK2wqYSsiVjAuNUgiK3grIlYiK2wqYSksUC5hdHRyKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKEkpe3JldHVybiB1KGIoSSkpfSksRC5hdHRyKGMrIjIiLGwqbyksQi5hdHRyKGMsbCpnKS50ZXh0KGQpLFMuZmlsdGVyKHo1ZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsZT09PXZSPyJzdGFydCI6ZT09PUc1PyJlbmQiOiJtaWRkbGUiKSxTLmVhY2goZnVuY3Rpb24oKXt0aGlzLl9fYXhpcz1ifSl9cmV0dXJuIGguc2NhbGU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZixoKTp0fSxoLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHI9X1IuY2FsbChhcmd1bWVudHMpLGh9LGgudGlja0FyZ3VtZW50cz1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1mPT1udWxsP1tdOl9SLmNhbGwoZiksaCk6ci5zbGljZSgpfSxoLnRpY2tWYWx1ZXM9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49Zj09bnVsbD9udWxsOl9SLmNhbGwoZiksaCk6biYmbi5zbGljZSgpfSxoLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ZixoKTppfSxoLnRpY2tTaXplPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWE9K2YsaCk6b30saC50aWNrU2l6ZUlubmVyPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPStmLGgpOm99LGgudGlja1NpemVPdXRlcj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rZixoKTphfSxoLnRpY2tQYWRkaW5nPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPStmLGgpOnN9LGh9ZnVuY3Rpb24gJE10KGUpe3JldHVybiB4Uih5UixlKX1mdW5jdGlvbiBLTXQoZSl7cmV0dXJuIHhSKHZSLGUpfWZ1bmN0aW9uIFpNdChlKXtyZXR1cm4geFIoeiQsZSl9ZnVuY3Rpb24gSk10KGUpe3JldHVybiB4UihHNSxlKX12YXIgeVIsdlIseiQsRzUsWE10LFFNdD1NKCgpPT57V010KCk7ak10KCk7eVI9MSx2Uj0yLHokPTMsRzU9NCxYTXQ9MWUtNn0pO3ZhciB0RXQ9TSgoKT0+e1FNdCgpfSk7ZnVuY3Rpb24gckV0KCl7Zm9yKHZhciBlPTAsdD1hcmd1bWVudHMubGVuZ3RoLHI9e30sbjtlPHQ7KytlKXtpZighKG49YXJndW1lbnRzW2VdKyIiKXx8biBpbiByfHwvW1xzLl0vLnRlc3QobikpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IGJSKHIpfWZ1bmN0aW9uIGJSKGUpe3RoaXMuXz1lfWZ1bmN0aW9uIEI1ZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIEg1ZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIGVFdChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09RjVlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgRjVlLFc1LG5FdD1NKCgpPT57RjVlPXt2YWx1ZTpmdW5jdGlvbigpe319O2JSLnByb3RvdHlwZT1yRXQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpiUixvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuXyxuPUI1ZShlKyIiLHIpLGksbz0tMSxhPW4ubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK288YTspaWYoKGk9KGU9bltvXSkudHlwZSkmJihpPUg1ZShyW2ldLGUubmFtZSkpKXJldHVybiBpO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK288YTspaWYoaT0oZT1uW29dKS50eXBlKXJbaV09ZUV0KHJbaV0sZS5uYW1lLHQpO2Vsc2UgaWYodD09bnVsbClmb3IoaSBpbiByKXJbaV09ZUV0KHJbaV0sZS5uYW1lLG51bGwpO3JldHVybiB0aGlzfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGU9e30sdD10aGlzLl87Zm9yKHZhciByIGluIHQpZVtyXT10W3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBiUihlKX0sY2FsbDpmdW5jdGlvbihlLHQpe2lmKChpPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHI9bmV3IEFycmF5KGkpLG49MCxpLG87bjxpOysrbilyW25dPWFyZ3VtZW50c1tuKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKG89dGhpcy5fW2VdLG49MCxpPW8ubGVuZ3RoO248aTsrK24pb1tuXS52YWx1ZS5hcHBseSh0LHIpfSxhcHBseTpmdW5jdGlvbihlLHQscil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3IodmFyIG49dGhpcy5fW2VdLGk9MCxvPW4ubGVuZ3RoO2k8bzsrK2kpbltpXS52YWx1ZS5hcHBseSh0LHIpfX07VzU9ckV0fSk7dmFyIEYkPU0oKCk9PntuRXQoKX0pO3ZhciB3UixCJCxIJD1NKCgpPT57d1I9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLEIkPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDp3Uix4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9fSk7ZnVuY3Rpb24gVXAoZSl7dmFyIHQ9ZSs9IiIscj10LmluZGV4T2YoIjoiKTtyZXR1cm4gcj49MCYmKHQ9ZS5zbGljZSgwLHIpKSE9PSJ4bWxucyImJihlPWUuc2xpY2UocisxKSksQiQuaGFzT3duUHJvcGVydHkodCk/e3NwYWNlOkIkW3RdLGxvY2FsOmV9OmV9dmFyIFNSPU0oKCk9PntIJCgpfSk7ZnVuY3Rpb24gVjVlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMub3duZXJEb2N1bWVudCxyPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiByPT09d1ImJnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PXdSP3QuY3JlYXRlRWxlbWVudChlKTp0LmNyZWF0ZUVsZW1lbnROUyhyLGUpfX1mdW5jdGlvbiBVNWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZS5zcGFjZSxlLmxvY2FsKX19ZnVuY3Rpb24gTVIoZSl7dmFyIHQ9VXAoZSk7cmV0dXJuKHQubG9jYWw/VTVlOlY1ZSkodCl9dmFyIFYkPU0oKCk9PntTUigpO0gkKCl9KTtmdW5jdGlvbiBxNWUoKXt9ZnVuY3Rpb24gZ3koZSl7cmV0dXJuIGU9PW51bGw/cTVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihlKX19dmFyIEVSPU0oKCk9Pnt9KTtmdW5jdGlvbiBpRXQoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPWd5KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09bmV3IEFycmF5KGEpLGwsYyx1PTA7dTxhOysrdSkobD1vW3VdKSYmKGM9ZS5jYWxsKGwsbC5fX2RhdGFfXyx1LG8pKSYmKCJfX2RhdGFfXyJpbiBsJiYoYy5fX2RhdGFfXz1sLl9fZGF0YV9fKSxzW3VdPWMpO3JldHVybiBuZXcgZmkobix0aGlzLl9wYXJlbnRzKX12YXIgb0V0PU0oKCk9Pnt3dSgpO0VSKCl9KTtmdW5jdGlvbiBHNWUoKXtyZXR1cm5bXX1mdW5jdGlvbiBZNShlKXtyZXR1cm4gZT09bnVsbD9HNWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGUpfX12YXIgVSQ9TSgoKT0+e30pO2Z1bmN0aW9uIGFFdChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9WTUoZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPVtdLGk9W10sbz0wO288cjsrK28pZm9yKHZhciBhPXRbb10scz1hLmxlbmd0aCxsLGM9MDtjPHM7KytjKShsPWFbY10pJiYobi5wdXNoKGUuY2FsbChsLGwuX19kYXRhX18sYyxhKSksaS5wdXNoKGwpKTtyZXR1cm4gbmV3IGZpKG4saSl9dmFyIHNFdD1NKCgpPT57d3UoKTtVJCgpfSk7ZnVuY3Rpb24gajUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyhlKX19dmFyIHEkPU0oKCk9Pnt9KTtmdW5jdGlvbiBsRXQoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPWo1KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBmaShuLHRoaXMuX3BhcmVudHMpfXZhciBjRXQ9TSgoKT0+e3d1KCk7cSQoKX0pO2Z1bmN0aW9uIFRSKGUpe3JldHVybiBuZXcgQXJyYXkoZS5sZW5ndGgpfXZhciBHJD1NKCgpPT57fSk7ZnVuY3Rpb24gdUV0KCl7cmV0dXJuIG5ldyBmaSh0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcChUUiksdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gWDUoZSx0KXt0aGlzLm93bmVyRG9jdW1lbnQ9ZS5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPWUubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9fZGF0YV9fPXR9dmFyIFckPU0oKCk9PntHJCgpO3d1KCk7WDUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpYNSxhcHBlbmRDaGlsZDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShlLHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShlLHQpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvcihlKX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZSl9fX0pO2Z1bmN0aW9uIGhFdChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIGZFdD1NKCgpPT57fSk7ZnVuY3Rpb24gVzVlKGUsdCxyLG4saSxvKXtmb3IodmFyIGE9MCxzLGw9dC5sZW5ndGgsYz1vLmxlbmd0aDthPGM7KythKShzPXRbYV0pPyhzLl9fZGF0YV9fPW9bYV0sblthXT1zKTpyW2FdPW5ldyBYNShlLG9bYV0pO2Zvcig7YTxsOysrYSkocz10W2FdKSYmKGlbYV09cyl9ZnVuY3Rpb24gWTVlKGUsdCxyLG4saSxvLGEpe3ZhciBzLGwsYz17fSx1PXQubGVuZ3RoLGg9by5sZW5ndGgsZj1uZXcgQXJyYXkodSkscDtmb3Iocz0wO3M8dTsrK3MpKGw9dFtzXSkmJihmW3NdPXA9cEV0K2EuY2FsbChsLGwuX19kYXRhX18scyx0KSxwIGluIGM/aVtzXT1sOmNbcF09bCk7Zm9yKHM9MDtzPGg7KytzKXA9cEV0K2EuY2FsbChlLG9bc10scyxvKSwobD1jW3BdKT8obltzXT1sLGwuX19kYXRhX189b1tzXSxjW3BdPW51bGwpOnJbc109bmV3IFg1KGUsb1tzXSk7Zm9yKHM9MDtzPHU7KytzKShsPXRbc10pJiZjW2Zbc11dPT09bCYmKGlbc109bCl9ZnVuY3Rpb24gZEV0KGUsdCl7aWYoIWUpcmV0dXJuIHA9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxjPS0xLHRoaXMuZWFjaChmdW5jdGlvbihQKXtwWysrY109UH0pLHA7dmFyIHI9dD9ZNWU6VzVlLG49dGhpcy5fcGFyZW50cyxpPXRoaXMuX2dyb3Vwczt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9aEV0KGUpKTtmb3IodmFyIG89aS5sZW5ndGgsYT1uZXcgQXJyYXkobykscz1uZXcgQXJyYXkobyksbD1uZXcgQXJyYXkobyksYz0wO2M8bzsrK2Mpe3ZhciB1PW5bY10saD1pW2NdLGY9aC5sZW5ndGgscD1lLmNhbGwodSx1JiZ1Ll9fZGF0YV9fLGMsbiksZD1wLmxlbmd0aCxnPXNbY109bmV3IEFycmF5KGQpLF89YVtjXT1uZXcgQXJyYXkoZCkseT1sW2NdPW5ldyBBcnJheShmKTtyKHUsaCxnLF8seSxwLHQpO2Zvcih2YXIgeD0wLGI9MCxTLEM7eDxkOysreClpZihTPWdbeF0pe2Zvcih4Pj1iJiYoYj14KzEpOyEoQz1fW2JdKSYmKytiPGQ7KTtTLl9uZXh0PUN8fG51bGx9fXJldHVybiBhPW5ldyBmaShhLG4pLGEuX2VudGVyPXMsYS5fZXhpdD1sLGF9dmFyIHBFdCxtRXQ9TSgoKT0+e3d1KCk7VyQoKTtmRXQoKTtwRXQ9IiQifSk7ZnVuY3Rpb24gZ0V0KCl7cmV0dXJuIG5ldyBmaSh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKFRSKSx0aGlzLl9wYXJlbnRzKX12YXIgX0V0PU0oKCk9PntHJCgpO3d1KCl9KTtmdW5jdGlvbiB5RXQoZSx0LHIpe3ZhciBuPXRoaXMuZW50ZXIoKSxpPXRoaXMsbz10aGlzLmV4aXQoKTtyZXR1cm4gbj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lKG4pOm4uYXBwZW5kKGUrIiIpLHQhPW51bGwmJihpPXQoaSkpLHI9PW51bGw/by5yZW1vdmUoKTpyKG8pLG4mJmk/bi5tZXJnZShpKS5vcmRlcigpOml9dmFyIHZFdD1NKCgpPT57fSk7ZnVuY3Rpb24geEV0KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj1lLl9ncm91cHMsbj10Lmxlbmd0aCxpPXIubGVuZ3RoLG89TWF0aC5taW4obixpKSxhPW5ldyBBcnJheShuKSxzPTA7czxvOysrcylmb3IodmFyIGw9dFtzXSxjPXJbc10sdT1sLmxlbmd0aCxoPWFbc109bmV3IEFycmF5KHUpLGYscD0wO3A8dTsrK3ApKGY9bFtwXXx8Y1twXSkmJihoW3BdPWYpO2Zvcig7czxuOysrcylhW3NdPXRbc107cmV0dXJuIG5ldyBmaShhLHRoaXMuX3BhcmVudHMpfXZhciBiRXQ9TSgoKT0+e3d1KCl9KTtmdW5jdGlvbiB3RXQoKXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHQ9LTEscj1lLmxlbmd0aDsrK3Q8cjspZm9yKHZhciBuPWVbdF0saT1uLmxlbmd0aC0xLG89bltpXSxhOy0taT49MDspKGE9bltpXSkmJihvJiZhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG8pXjQmJm8ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSxvKSxvPWEpO3JldHVybiB0aGlzfXZhciBTRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIE1FdChlKXtlfHwoZT1qNWUpO2Z1bmN0aW9uIHQoaCxmKXtyZXR1cm4gaCYmZj9lKGguX19kYXRhX18sZi5fX2RhdGFfXyk6IWgtIWZ9Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxuPXIubGVuZ3RoLGk9bmV3IEFycmF5KG4pLG89MDtvPG47KytvKXtmb3IodmFyIGE9cltvXSxzPWEubGVuZ3RoLGw9aVtvXT1uZXcgQXJyYXkocyksYyx1PTA7dTxzOysrdSkoYz1hW3VdKSYmKGxbdV09Yyk7bC5zb3J0KHQpfXJldHVybiBuZXcgZmkoaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfWZ1bmN0aW9uIGo1ZShlLHQpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn12YXIgRUV0PU0oKCk9Pnt3dSgpfSk7ZnVuY3Rpb24gVEV0KCl7dmFyIGU9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxlLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfXZhciBDRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIEFFdCgpe3ZhciBlPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdD0tMTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZVsrK3RdPXRoaXN9KSxlfXZhciBQRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIElFdCgpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsdD0wLHI9ZS5sZW5ndGg7dDxyOysrdClmb3IodmFyIG49ZVt0XSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKXt2YXIgYT1uW2ldO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9dmFyIExFdD1NKCgpPT57fSk7ZnVuY3Rpb24ga0V0KCl7dmFyIGU9MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytlfSksZX12YXIgUkV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBORXQoKXtyZXR1cm4hdGhpcy5ub2RlKCl9dmFyIERFdD1NKCgpPT57fSk7ZnVuY3Rpb24gT0V0KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxvPTAsYT1pLmxlbmd0aCxzO288YTsrK28pKHM9aVtvXSkmJmUuY2FsbChzLHMuX19kYXRhX18sbyxpKTtyZXR1cm4gdGhpc312YXIgekV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBYNWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSl9fWZ1bmN0aW9uICQ1ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIEs1ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKGUsdCl9fWZ1bmN0aW9uIFo1ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQpfX1mdW5jdGlvbiBKNWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpOnRoaXMuc2V0QXR0cmlidXRlKGUscil9fWZ1bmN0aW9uIFE1ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHIpfX1mdW5jdGlvbiBGRXQoZSx0KXt2YXIgcj1VcChlKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBuPXRoaXMubm9kZSgpO3JldHVybiByLmxvY2FsP24uZ2V0QXR0cmlidXRlTlMoci5zcGFjZSxyLmxvY2FsKTpuLmdldEF0dHJpYnV0ZShyKX1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP3IubG9jYWw/JDVlOlg1ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9yLmxvY2FsP1E1ZTpKNWU6ci5sb2NhbD9aNWU6SzVlKShyLHQpKX12YXIgQkV0PU0oKCk9PntTUigpfSk7ZnVuY3Rpb24gQ1IoZSl7cmV0dXJuIGUub3duZXJEb2N1bWVudCYmZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHxlLmRvY3VtZW50JiZlfHxlLmRlZmF1bHRWaWV3fXZhciBZJD1NKCgpPT57fSk7ZnVuY3Rpb24gdFRlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIGVUZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLHQscil9fWZ1bmN0aW9uIHJUZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bj09bnVsbD90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSxuLHIpfX1mdW5jdGlvbiBIRXQoZSx0LHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP3RUZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9yVGU6ZVRlKShlLHQscj09bnVsbD8iIjpyKSk6c2codGhpcy5ub2RlKCksZSl9ZnVuY3Rpb24gc2coZSx0KXtyZXR1cm4gZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxDUihlKS5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX12YXIgaiQ9TSgoKT0+e1kkKCl9KTtmdW5jdGlvbiBuVGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbZV19fWZ1bmN0aW9uIGlUZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbZV09dH19ZnVuY3Rpb24gb1RlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD9kZWxldGUgdGhpc1tlXTp0aGlzW2VdPXJ9fWZ1bmN0aW9uIFZFdChlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP25UZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9vVGU6aVRlKShlLHQpKTp0aGlzLm5vZGUoKVtlXX12YXIgVUV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBxRXQoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIFgkKGUpe3JldHVybiBlLmNsYXNzTGlzdHx8bmV3IEdFdChlKX1mdW5jdGlvbiBHRXQoZSl7dGhpcy5fbm9kZT1lLHRoaXMuX25hbWVzPXFFdChlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfWZ1bmN0aW9uIFdFdChlLHQpe2Zvcih2YXIgcj1YJChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIuYWRkKHRbbl0pfWZ1bmN0aW9uIFlFdChlLHQpe2Zvcih2YXIgcj1YJChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIucmVtb3ZlKHRbbl0pfWZ1bmN0aW9uIGFUZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtXRXQodGhpcyxlKX19ZnVuY3Rpb24gc1RlKGUpe3JldHVybiBmdW5jdGlvbigpe1lFdCh0aGlzLGUpfX1mdW5jdGlvbiBsVGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXsodC5hcHBseSh0aGlzLGFyZ3VtZW50cyk/V0V0OllFdCkodGhpcyxlKX19ZnVuY3Rpb24gakV0KGUsdCl7dmFyIHI9cUV0KGUrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPVgkKHRoaXMubm9kZSgpKSxpPS0xLG89ci5sZW5ndGg7KytpPG87KWlmKCFuLmNvbnRhaW5zKHJbaV0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP2xUZTp0P2FUZTpzVGUpKHIsdCkpfXZhciBYRXQ9TSgoKT0+e0dFdC5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q8MCYmKHRoaXMuX25hbWVzLnB1c2goZSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2YoZSk7dD49MCYmKHRoaXMuX25hbWVzLnNwbGljZSh0LDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKGUpPj0wfX19KTtmdW5jdGlvbiBjVGUoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIHVUZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWV9fWZ1bmN0aW9uIGhUZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gJEV0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsP2NUZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/aFRlOnVUZSkoZSkpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fXZhciBLRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGZUZSgpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIHBUZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD1lfX1mdW5jdGlvbiBkVGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiBaRXQoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGU9PW51bGw/ZlRlOih0eXBlb2YgZT09ImZ1bmN0aW9uIj9kVGU6cFRlKShlKSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfXZhciBKRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIG1UZSgpe3RoaXMubmV4dFNpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKX1mdW5jdGlvbiBRRXQoKXtyZXR1cm4gdGhpcy5lYWNoKG1UZSl9dmFyIHQ1dD1NKCgpPT57fSk7ZnVuY3Rpb24gZ1RlKCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gZTV0KCl7cmV0dXJuIHRoaXMuZWFjaChnVGUpfXZhciByNXQ9TSgoKT0+e30pO2Z1bmN0aW9uIG41dChlKXt2YXIgdD10eXBlb2YgZT09ImZ1bmN0aW9uIj9lOk1SKGUpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pfXZhciBpNXQ9TSgoKT0+e1YkKCl9KTtmdW5jdGlvbiBfVGUoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBvNXQoZSx0KXt2YXIgcj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lOk1SKGUpLG49dD09bnVsbD9fVGU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpneSh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoci5hcHBseSh0aGlzLGFyZ3VtZW50cyksbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9dmFyIGE1dD1NKCgpPT57ViQoKTtFUigpfSk7ZnVuY3Rpb24geVRlKCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlO2UmJmUucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gczV0KCl7cmV0dXJuIHRoaXMuZWFjaCh5VGUpfXZhciBsNXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHZUZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCExKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24geFRlKCl7dmFyIGU9dGhpcy5jbG9uZU5vZGUoITApLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2libGluZyk6ZX1mdW5jdGlvbiBjNXQoZSl7cmV0dXJuIHRoaXMuc2VsZWN0KGU/eFRlOnZUZSl9dmFyIHU1dD1NKCgpPT57fSk7ZnVuY3Rpb24gaDV0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixlKTp0aGlzLm5vZGUoKS5fX2RhdGFfX312YXIgZjV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBiVGUoZSx0LHIpe3JldHVybiBlPW01dChlLHQsciksZnVuY3Rpb24obil7dmFyIGk9bi5yZWxhdGVkVGFyZ2V0OyghaXx8aSE9PXRoaXMmJiEoaS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSY4KSkmJmUuY2FsbCh0aGlzLG4pfX1mdW5jdGlvbiBtNXQoZSx0LHIpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT13cjt3cj1uO3RyeXtlLmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLHQscil9ZmluYWxseXt3cj1pfX19ZnVuY3Rpb24gd1RlKGUpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24odCl7dmFyIHI9IiIsbj10LmluZGV4T2YoIi4iKTtyZXR1cm4gbj49MCYmKHI9dC5zbGljZShuKzEpLHQ9dC5zbGljZSgwLG4pKSx7dHlwZTp0LG5hbWU6cn19KX1mdW5jdGlvbiBTVGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX29uO2lmKCEhdCl7Zm9yKHZhciByPTAsbj0tMSxpPXQubGVuZ3RoLG87cjxpOysrcilvPXRbcl0sKCFlLnR5cGV8fG8udHlwZT09PWUudHlwZSkmJm8ubmFtZT09PWUubmFtZT90aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLG8ubGlzdGVuZXIsby5jYXB0dXJlKTp0Wysrbl09bzsrK24/dC5sZW5ndGg9bjpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gTVRlKGUsdCxyKXt2YXIgbj1kNXQuaGFzT3duUHJvcGVydHkoZS50eXBlKT9iVGU6bTV0O3JldHVybiBmdW5jdGlvbihpLG8sYSl7dmFyIHM9dGhpcy5fX29uLGwsYz1uKHQsbyxhKTtpZihzKXtmb3IodmFyIHU9MCxoPXMubGVuZ3RoO3U8aDsrK3UpaWYoKGw9c1t1XSkudHlwZT09PWUudHlwZSYmbC5uYW1lPT09ZS5uYW1lKXt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXIsbC5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXI9YyxsLmNhcHR1cmU9ciksbC52YWx1ZT10O3JldHVybn19dGhpcy5hZGRFdmVudExpc3RlbmVyKGUudHlwZSxjLHIpLGw9e3R5cGU6ZS50eXBlLG5hbWU6ZS5uYW1lLHZhbHVlOnQsbGlzdGVuZXI6YyxjYXB0dXJlOnJ9LHM/cy5wdXNoKGwpOnRoaXMuX19vbj1bbF19fWZ1bmN0aW9uIGc1dChlLHQscil7dmFyIG49d1RlKGUrIiIpLGksbz1uLmxlbmd0aCxhO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIHM9dGhpcy5ub2RlKCkuX19vbjtpZihzKXtmb3IodmFyIGw9MCxjPXMubGVuZ3RoLHU7bDxjOysrbClmb3IoaT0wLHU9c1tsXTtpPG87KytpKWlmKChhPW5baV0pLnR5cGU9PT11LnR5cGUmJmEubmFtZT09PXUubmFtZSlyZXR1cm4gdS52YWx1ZX1yZXR1cm59Zm9yKHM9dD9NVGU6U1RlLHI9PW51bGwmJihyPSExKSxpPTA7aTxvOysraSl0aGlzLmVhY2gocyhuW2ldLHQscikpO3JldHVybiB0aGlzfWZ1bmN0aW9uICQkKGUsdCxyLG4pe3ZhciBpPXdyO2Uuc291cmNlRXZlbnQ9d3Isd3I9ZTt0cnl7cmV0dXJuIHQuYXBwbHkocixuKX1maW5hbGx5e3dyPWl9fXZhciBkNXQsd3IscDV0LEFSPU0oKCk9PntkNXQ9e30sd3I9bnVsbDt0eXBlb2YgZG9jdW1lbnQhPSJ1bmRlZmluZWQiJiYocDV0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwib25tb3VzZWVudGVyImluIHA1dHx8KGQ1dD17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KSl9KTtmdW5jdGlvbiBfNXQoZSx0LHIpe3ZhciBuPUNSKGUpLGk9bi5DdXN0b21FdmVudDt0eXBlb2YgaT09ImZ1bmN0aW9uIj9pPW5ldyBpKHQscik6KGk9bi5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxyPyhpLmluaXRFdmVudCh0LHIuYnViYmxlcyxyLmNhbmNlbGFibGUpLGkuZGV0YWlsPXIuZGV0YWlsKTppLmluaXRFdmVudCh0LCExLCExKSksZS5kaXNwYXRjaEV2ZW50KGkpfWZ1bmN0aW9uIEVUZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBfNXQodGhpcyxlLHQpfX1mdW5jdGlvbiBUVGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gXzV0KHRoaXMsZSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fWZ1bmN0aW9uIHk1dChlLHQpe3JldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP1RUZTpFVGUpKGUsdCkpfXZhciB2NXQ9TSgoKT0+e1kkKCl9KTtmdW5jdGlvbiBmaShlLHQpe3RoaXMuX2dyb3Vwcz1lLHRoaXMuX3BhcmVudHM9dH1mdW5jdGlvbiB4NXQoKXtyZXR1cm4gbmV3IGZpKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sSyQpfXZhciBLJCxxcCx3dT1NKCgpPT57b0V0KCk7c0V0KCk7Y0V0KCk7bUV0KCk7VyQoKTtfRXQoKTt2RXQoKTtiRXQoKTtTRXQoKTtFRXQoKTtDRXQoKTtQRXQoKTtMRXQoKTtSRXQoKTtERXQoKTt6RXQoKTtCRXQoKTtqJCgpO1VFdCgpO1hFdCgpO0tFdCgpO0pFdCgpO3Q1dCgpO3I1dCgpO2k1dCgpO2E1dCgpO2w1dCgpO3U1dCgpO2Y1dCgpO0FSKCk7djV0KCk7SyQ9W251bGxdO2ZpLnByb3RvdHlwZT14NXQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpmaSxzZWxlY3Q6aUV0LHNlbGVjdEFsbDphRXQsZmlsdGVyOmxFdCxkYXRhOmRFdCxlbnRlcjp1RXQsZXhpdDpnRXQsam9pbjp5RXQsbWVyZ2U6eEV0LG9yZGVyOndFdCxzb3J0Ok1FdCxjYWxsOlRFdCxub2RlczpBRXQsbm9kZTpJRXQsc2l6ZTprRXQsZW1wdHk6TkV0LGVhY2g6T0V0LGF0dHI6RkV0LHN0eWxlOkhFdCxwcm9wZXJ0eTpWRXQsY2xhc3NlZDpqRXQsdGV4dDokRXQsaHRtbDpaRXQscmFpc2U6UUV0LGxvd2VyOmU1dCxhcHBlbmQ6bjV0LGluc2VydDpvNXQscmVtb3ZlOnM1dCxjbG9uZTpjNXQsZGF0dW06aDV0LG9uOmc1dCxkaXNwYXRjaDp5NXR9O3FwPXg1dH0pO2Z1bmN0aW9uIEdwKGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/bmV3IGZpKFtbZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlKV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgZmkoW1tlXV0sSyQpfXZhciBiNXQ9TSgoKT0+e3d1KCl9KTtmdW5jdGlvbiB3NXQoKXtmb3IodmFyIGU9d3IsdDt0PWUuc291cmNlRXZlbnQ7KWU9dDtyZXR1cm4gZX12YXIgUzV0PU0oKCk9PntBUigpfSk7ZnVuY3Rpb24gTTV0KGUsdCl7dmFyIHI9ZS5vd25lclNWR0VsZW1lbnR8fGU7aWYoci5jcmVhdGVTVkdQb2ludCl7dmFyIG49ci5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBuLng9dC5jbGllbnRYLG4ueT10LmNsaWVudFksbj1uLm1hdHJpeFRyYW5zZm9ybShlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSksW24ueCxuLnldfXZhciBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW3QuY2xpZW50WC1pLmxlZnQtZS5jbGllbnRMZWZ0LHQuY2xpZW50WS1pLnRvcC1lLmNsaWVudFRvcF19dmFyIEU1dD1NKCgpPT57fSk7ZnVuY3Rpb24gUFIoZSl7dmFyIHQ9dzV0KCk7cmV0dXJuIHQuY2hhbmdlZFRvdWNoZXMmJih0PXQuY2hhbmdlZFRvdWNoZXNbMF0pLE01dChlLHQpfXZhciBUNXQ9TSgoKT0+e1M1dCgpO0U1dCgpfSk7dmFyIFRzPU0oKCk9PntxJCgpO1Q1dCgpO1NSKCk7YjV0KCk7d3UoKTtFUigpO1UkKCk7aiQoKTtBUigpfSk7ZnVuY3Rpb24gSVIoKXt3ci5wcmV2ZW50RGVmYXVsdCgpLHdyLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciBDNXQ9TSgoKT0+e1RzKCl9KTtmdW5jdGlvbiBaJChlKXt2YXIgdD1lLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxyPUdwKGUpLm9uKCJkcmFnc3RhcnQuZHJhZyIsSVIsITApOyJvbnNlbGVjdHN0YXJ0ImluIHQ/ci5vbigic2VsZWN0c3RhcnQuZHJhZyIsSVIsITApOih0Ll9fbm9zZWxlY3Q9dC5zdHlsZS5Nb3pVc2VyU2VsZWN0LHQuc3R5bGUuTW96VXNlclNlbGVjdD0ibm9uZSIpfWZ1bmN0aW9uIEokKGUsdCl7dmFyIHI9ZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsbj1HcChlKS5vbigiZHJhZ3N0YXJ0LmRyYWciLG51bGwpO3QmJihuLm9uKCJjbGljay5kcmFnIixJUiwhMCksc2V0VGltZW91dChmdW5jdGlvbigpe24ub24oImNsaWNrLmRyYWciLG51bGwpfSwwKSksIm9uc2VsZWN0c3RhcnQiaW4gcj9uLm9uKCJzZWxlY3RzdGFydC5kcmFnIixudWxsKTooci5zdHlsZS5Nb3pVc2VyU2VsZWN0PXIuX19ub3NlbGVjdCxkZWxldGUgci5fX25vc2VsZWN0KX12YXIgQTV0PU0oKCk9PntUcygpO0M1dCgpfSk7dmFyIFA1dD1NKCgpPT57QTV0KCl9KTtmdW5jdGlvbiBMUihlLHQscil7ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gUSQoZSx0KXt2YXIgcj1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9dmFyIEk1dD1NKCgpPT57fSk7ZnVuY3Rpb24gWjUoKXt9ZnVuY3Rpb24gazV0KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gTlRlKCl7cmV0dXJuIEY1dCh0aGlzKS5mb3JtYXRIc2woKX1mdW5jdGlvbiBSNXQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiBTdShlKXt2YXIgdCxyO3JldHVybiBlPShlKyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwodD1DVGUuZXhlYyhlKSk/KHI9dFsxXS5sZW5ndGgsdD1wYXJzZUludCh0WzFdLDE2KSxyPT09Nj9ONXQodCk6cj09PTM/bmV3IGxsKHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwodCYxNSk8PDR8dCYxNSwxKTpyPT09OD9rUih0Pj4yNCYyNTUsdD4+MTYmMjU1LHQ+PjgmMjU1LCh0JjI1NSkvMjU1KTpyPT09ND9rUih0Pj4xMiYxNXx0Pj44JjI0MCx0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKCh0JjE1KTw8NHx0JjE1KS8yNTUpOm51bGwpOih0PUFUZS5leGVjKGUpKT9uZXcgbGwodFsxXSx0WzJdLHRbM10sMSk6KHQ9UFRlLmV4ZWMoZSkpP25ldyBsbCh0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCwxKToodD1JVGUuZXhlYyhlKSk/a1IodFsxXSx0WzJdLHRbM10sdFs0XSk6KHQ9TFRlLmV4ZWMoZSkpP2tSKHRbMV0qMjU1LzEwMCx0WzJdKjI1NS8xMDAsdFszXSoyNTUvMTAwLHRbNF0pOih0PWtUZS5leGVjKGUpKT96NXQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCwxKToodD1SVGUuZXhlYyhlKSk/ejV0KHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsdFs0XSk6TDV0Lmhhc093blByb3BlcnR5KGUpP041dChMNXRbZV0pOmU9PT0idHJhbnNwYXJlbnQiP25ldyBsbChOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIE41dChlKXtyZXR1cm4gbmV3IGxsKGU+PjE2JjI1NSxlPj44JjI1NSxlJjI1NSwxKX1mdW5jdGlvbiBrUihlLHQscixuKXtyZXR1cm4gbjw9MCYmKGU9dD1yPU5hTiksbmV3IGxsKGUsdCxyLG4pfWZ1bmN0aW9uIERUZShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIFo1fHwoZT1TdShlKSksZT8oZT1lLnJnYigpLG5ldyBsbChlLnIsZS5nLGUuYixlLm9wYWNpdHkpKTpuZXcgbGx9ZnVuY3Rpb24gdTIoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP0RUZShlKTpuZXcgbGwoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIGxsKGUsdCxyLG4pe3RoaXMucj0rZSx0aGlzLmc9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBENXQoKXtyZXR1cm4iIyIrdEsodGhpcy5yKSt0Syh0aGlzLmcpK3RLKHRoaXMuYil9ZnVuY3Rpb24gTzV0KCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoZT09PTE/IikiOiIsICIrZSsiKSIpfWZ1bmN0aW9uIHRLKGUpe3JldHVybiBlPU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoZSl8fDApKSwoZTwxNj8iMCI6IiIpK2UudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIHo1dChlLHQscixuKXtyZXR1cm4gbjw9MD9lPXQ9cj1OYU46cjw9MHx8cj49MT9lPXQ9TmFOOnQ8PTAmJihlPU5hTiksbmV3IFpoKGUsdCxyLG4pfWZ1bmN0aW9uIEY1dChlKXtpZihlIGluc3RhbmNlb2YgWmgpcmV0dXJuIG5ldyBaaChlLmgsZS5zLGUubCxlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiBaNXx8KGU9U3UoZSkpLCFlKXJldHVybiBuZXcgWmg7aWYoZSBpbnN0YW5jZW9mIFpoKXJldHVybiBlO2U9ZS5yZ2IoKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT1NYXRoLm1pbih0LHIsbiksbz1NYXRoLm1heCh0LHIsbiksYT1OYU4scz1vLWksbD0obytpKS8yO3JldHVybiBzPyh0PT09bz9hPShyLW4pL3MrKHI8bikqNjpyPT09bz9hPShuLXQpL3MrMjphPSh0LXIpL3MrNCxzLz1sPC41P28raToyLW8taSxhKj02MCk6cz1sPjAmJmw8MT8wOmEsbmV3IFpoKGEscyxsLGUub3BhY2l0eSl9ZnVuY3Rpb24gQjV0KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9GNXQoZSk6bmV3IFpoKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBaaChlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gZUsoZSx0LHIpe3JldHVybihlPDYwP3QrKHItdCkqZS82MDplPDE4MD9yOmU8MjQwP3QrKHItdCkqKDI0MC1lKS82MDp0KSoyNTV9dmFyICQ1LFJSLGMyLEs1LEpoLENUZSxBVGUsUFRlLElUZSxMVGUsa1RlLFJUZSxMNXQsSDV0PU0oKCk9PntJNXQoKTskNT0uNyxSUj0xLyQ1LGMyPSJcXHMqKFsrLV0/XFxkKylcXHMqIixLNT0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixKaD0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsQ1RlPS9eIyhbMC05YS1mXXszLDh9KSQvLEFUZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbYzIsYzIsYzJdKyJcXCkkIiksUFRlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tKaCxKaCxKaF0rIlxcKSQiKSxJVGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tjMixjMixjMixLNV0rIlxcKSQiKSxMVGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tKaCxKaCxKaCxLNV0rIlxcKSQiKSxrVGU9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW0s1LEpoLEpoXSsiXFwpJCIpLFJUZT1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW0s1LEpoLEpoLEs1XSsiXFwpJCIpLEw1dD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtMUihaNSxTdSx7Y29weTpmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLGUpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDprNXQsZm9ybWF0SGV4Oms1dCxmb3JtYXRIc2w6TlRlLGZvcm1hdFJnYjpSNXQsdG9TdHJpbmc6UjV0fSk7TFIobGwsdTIsUSQoWjUse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/UlI6TWF0aC5wb3coUlIsZSksbmV3IGxsKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsPyQ1Ok1hdGgucG93KCQ1LGUpLG5ldyBsbCh0aGlzLnIqZSx0aGlzLmcqZSx0aGlzLmIqZSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OkQ1dCxmb3JtYXRIZXg6RDV0LGZvcm1hdFJnYjpPNXQsdG9TdHJpbmc6TzV0fSkpO0xSKFpoLEI1dCxRJChaNSx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9SUjpNYXRoLnBvdyhSUixlKSxuZXcgWmgodGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD8kNTpNYXRoLnBvdygkNSxlKSxuZXcgWmgodGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmglMzYwKyh0aGlzLmg8MCkqMzYwLHQ9aXNOYU4oZSl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMscj10aGlzLmwsbj1yKyhyPC41P3I6MS1yKSp0LGk9MipyLW47cmV0dXJuIG5ldyBsbChlSyhlPj0yNDA/ZS0yNDA6ZSsxMjAsaSxuKSxlSyhlLGksbiksZUsoZTwxMjA/ZSsyNDA6ZS0xMjAsaSxuKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/ImhzbCgiOiJoc2xhKCIpKyh0aGlzLmh8fDApKyIsICIrKHRoaXMuc3x8MCkqMTAwKyIlLCAiKyh0aGlzLmx8fDApKjEwMCsiJSIrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX19KSl9KTt2YXIgTlI9TSgoKT0+e0g1dCgpfSk7ZnVuY3Rpb24gcksoZSx0LHIsbixpKXt2YXIgbz1lKmUsYT1vKmU7cmV0dXJuKCgxLTMqZSszKm8tYSkqdCsoNC02Km8rMyphKSpyKygxKzMqZSszKm8tMyphKSpuK2EqaSkvNn1mdW5jdGlvbiBWNXQoZSl7dmFyIHQ9ZS5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49cjw9MD9yPTA6cj49MT8ocj0xLHQtMSk6TWF0aC5mbG9vcihyKnQpLGk9ZVtuXSxvPWVbbisxXSxhPW4+MD9lW24tMV06MippLW8scz1uPHQtMT9lW24rMl06MipvLWk7cmV0dXJuIHJLKChyLW4vdCkqdCxhLGksbyxzKX19dmFyIG5LPU0oKCk9Pnt9KTtmdW5jdGlvbiBVNXQoZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPU1hdGguZmxvb3IoKChyJT0xKTwwPysrcjpyKSp0KSxpPWVbKG4rdC0xKSV0XSxvPWVbbiV0XSxhPWVbKG4rMSkldF0scz1lWyhuKzIpJXRdO3JldHVybiBySygoci1uL3QpKnQsaSxvLGEscyl9fXZhciBxNXQ9TSgoKT0+e25LKCl9KTtmdW5jdGlvbiBKNShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIGlLPU0oKCk9Pnt9KTtmdW5jdGlvbiBPVGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGUrcip0fX1mdW5jdGlvbiB6VGUoZSx0LHIpe3JldHVybiBlPU1hdGgucG93KGUsciksdD1NYXRoLnBvdyh0LHIpLWUscj0xL3IsZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucG93KGUrbip0LHIpfX1mdW5jdGlvbiBHNXQoZSl7cmV0dXJuKGU9K2UpPT0xP0RSOmZ1bmN0aW9uKHQscil7cmV0dXJuIHItdD96VGUodCxyLGUpOko1KGlzTmFOKHQpP3I6dCl9fWZ1bmN0aW9uIERSKGUsdCl7dmFyIHI9dC1lO3JldHVybiByP09UZShlLHIpOko1KGlzTmFOKGUpP3Q6ZSl9dmFyIFc1dD1NKCgpPT57aUsoKX0pO2Z1bmN0aW9uIFk1dChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkociksYSxzO2ZvcihhPTA7YTxyOysrYSlzPXUyKHRbYV0pLG5bYV09cy5yfHwwLGlbYV09cy5nfHwwLG9bYV09cy5ifHwwO3JldHVybiBuPWUobiksaT1lKGkpLG89ZShvKSxzLm9wYWNpdHk9MSxmdW5jdGlvbihsKXtyZXR1cm4gcy5yPW4obCkscy5nPWkobCkscy5iPW8obCkscysiIn19fXZhciBfeSxGVGUsQlRlLG9LPU0oKCk9PntOUigpO25LKCk7cTV0KCk7VzV0KCk7X3k9ZnVuY3Rpb24gZSh0KXt2YXIgcj1HNXQodCk7ZnVuY3Rpb24gbihpLG8pe3ZhciBhPXIoKGk9dTIoaSkpLnIsKG89dTIobykpLnIpLHM9cihpLmcsby5nKSxsPXIoaS5iLG8uYiksYz1EUihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkucj1hKHUpLGkuZz1zKHUpLGkuYj1sKHUpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPWUsbn0oMSk7RlRlPVk1dChWNXQpLEJUZT1ZNXQoVTV0KX0pO2Z1bmN0aW9uIGo1dChlLHQpe3R8fCh0PVtdKTt2YXIgcj1lP01hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKTowLG49dC5zbGljZSgpLGk7cmV0dXJuIGZ1bmN0aW9uKG8pe2ZvcihpPTA7aTxyOysraSluW2ldPWVbaV0qKDEtbykrdFtpXSpvO3JldHVybiBufX1mdW5jdGlvbiBYNXQoZSl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhlKSYmIShlIGluc3RhbmNlb2YgRGF0YVZpZXcpfXZhciAkNXQ9TSgoKT0+e30pO2Z1bmN0aW9uIEs1dChlLHQpe3ZhciByPXQ/dC5sZW5ndGg6MCxuPWU/TWF0aC5taW4ocixlLmxlbmd0aCk6MCxpPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShyKSxhO2ZvcihhPTA7YTxuOysrYSlpW2FdPXl5KGVbYV0sdFthXSk7Zm9yKDthPHI7KythKW9bYV09dFthXTtyZXR1cm4gZnVuY3Rpb24ocyl7Zm9yKGE9MDthPG47KythKW9bYV09aVthXShzKTtyZXR1cm4gb319dmFyIFo1dD1NKCgpPT57T1IoKX0pO2Z1bmN0aW9uIEo1dChlLHQpe3ZhciByPW5ldyBEYXRlO3JldHVybiBlPStlLHQ9K3QsZnVuY3Rpb24obil7cmV0dXJuIHIuc2V0VGltZShlKigxLW4pK3Qqbikscn19dmFyIFE1dD1NKCgpPT57fSk7ZnVuY3Rpb24gcWEoZSx0KXtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKHIpe3JldHVybiBlKigxLXIpK3Qqcn19dmFyIFE1PU0oKCk9Pnt9KTtmdW5jdGlvbiB0VHQoZSx0KXt2YXIgcj17fSxuPXt9LGk7KGU9PT1udWxsfHx0eXBlb2YgZSE9Im9iamVjdCIpJiYoZT17fSksKHQ9PT1udWxsfHx0eXBlb2YgdCE9Im9iamVjdCIpJiYodD17fSk7Zm9yKGkgaW4gdClpIGluIGU/cltpXT15eShlW2ldLHRbaV0pOm5baV09dFtpXTtyZXR1cm4gZnVuY3Rpb24obyl7Zm9yKGkgaW4gciluW2ldPXJbaV0obyk7cmV0dXJuIG59fXZhciBlVHQ9TSgoKT0+e09SKCl9KTtmdW5jdGlvbiBIVGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIFZUZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodCkrIiJ9fWZ1bmN0aW9uIHRUKGUsdCl7dmFyIHI9c0subGFzdEluZGV4PWFLLmxhc3RJbmRleD0wLG4saSxvLGE9LTEscz1bXSxsPVtdO2ZvcihlPWUrIiIsdD10KyIiOyhuPXNLLmV4ZWMoZSkpJiYoaT1hSy5leGVjKHQpKTspKG89aS5pbmRleCk+ciYmKG89dC5zbGljZShyLG8pLHNbYV0/c1thXSs9bzpzWysrYV09byksKG49blswXSk9PT0oaT1pWzBdKT9zW2FdP3NbYV0rPWk6c1srK2FdPWk6KHNbKythXT1udWxsLGwucHVzaCh7aTphLHg6cWEobixpKX0pKSxyPWFLLmxhc3RJbmRleDtyZXR1cm4gcjx0Lmxlbmd0aCYmKG89dC5zbGljZShyKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLHMubGVuZ3RoPDI/bFswXT9WVGUobFswXS54KTpIVGUodCk6KHQ9bC5sZW5ndGgsZnVuY3Rpb24oYyl7Zm9yKHZhciB1PTAsaDt1PHQ7Kyt1KXNbKGg9bFt1XSkuaV09aC54KGMpO3JldHVybiBzLmpvaW4oIiIpfSl9dmFyIHNLLGFLLGxLPU0oKCk9PntRNSgpO3NLPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxhSz1uZXcgUmVnRXhwKHNLLnNvdXJjZSwiZyIpfSk7ZnVuY3Rpb24geXkoZSx0KXt2YXIgcj10eXBlb2YgdCxuO3JldHVybiB0PT1udWxsfHxyPT09ImJvb2xlYW4iP0o1KHQpOihyPT09Im51bWJlciI/cWE6cj09PSJzdHJpbmciPyhuPVN1KHQpKT8odD1uLF95KTp0VDp0IGluc3RhbmNlb2YgU3U/X3k6dCBpbnN0YW5jZW9mIERhdGU/SjV0Olg1dCh0KT9qNXQ6QXJyYXkuaXNBcnJheSh0KT9LNXQ6dHlwZW9mIHQudmFsdWVPZiE9ImZ1bmN0aW9uIiYmdHlwZW9mIHQudG9TdHJpbmchPSJmdW5jdGlvbiJ8fGlzTmFOKHQpP3RUdDpxYSkoZSx0KX12YXIgT1I9TSgoKT0+e05SKCk7b0soKTtaNXQoKTtRNXQoKTtRNSgpO2VUdCgpO2xLKCk7aUsoKTskNXQoKX0pO2Z1bmN0aW9uIGNLKGUsdCxyLG4saSxvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KGUqZSt0KnQpKSYmKGUvPWEsdC89YSksKGw9ZSpyK3QqbikmJihyLT1lKmwsbi09dCpsKSwocz1NYXRoLnNxcnQocipyK24qbikpJiYoci89cyxuLz1zLGwvPXMpLGUqbjx0KnImJihlPS1lLHQ9LXQsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMih0LGUpKnJUdCxza2V3WDpNYXRoLmF0YW4obCkqclR0LHNjYWxlWDphLHNjYWxlWTpzfX12YXIgclR0LHpSLG5UdD1NKCgpPT57clR0PTE4MC9NYXRoLlBJLHpSPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9fSk7ZnVuY3Rpb24gb1R0KGUpe3JldHVybiBlPT09Im5vbmUiP3pSOihlVHx8KGVUPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLHVLPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxpVHQ9ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLGVULnN0eWxlLnRyYW5zZm9ybT1lLGU9aVR0LmdldENvbXB1dGVkU3R5bGUodUsuYXBwZW5kQ2hpbGQoZVQpLG51bGwpLmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpLHVLLnJlbW92ZUNoaWxkKGVUKSxlPWUuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSxjSygrZVswXSwrZVsxXSwrZVsyXSwrZVszXSwrZVs0XSwrZVs1XSkpfWZ1bmN0aW9uIGFUdChlKXtyZXR1cm4gZT09bnVsbD96UjooRlJ8fChGUj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxGUi5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsZSksKGU9RlIudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KGU9ZS5tYXRyaXgsY0soZS5hLGUuYixlLmMsZS5kLGUuZSxlLmYpKTp6Uil9dmFyIGVULHVLLGlUdCxGUixzVHQ9TSgoKT0+e25UdCgpfSk7ZnVuY3Rpb24gbFR0KGUsdCxyLG4pe2Z1bmN0aW9uIGkoYyl7cmV0dXJuIGMubGVuZ3RoP2MucG9wKCkrIiAiOiIifWZ1bmN0aW9uIG8oYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLHQsbnVsbCxyKTtkLnB1c2goe2k6Zy00LHg6cWEoYyxoKX0se2k6Zy0yLHg6cWEodSxmKX0pfWVsc2UoaHx8ZikmJnAucHVzaCgidHJhbnNsYXRlKCIraCt0K2Yrcil9ZnVuY3Rpb24gYShjLHUsaCxmKXtjIT09dT8oYy11PjE4MD91Kz0zNjA6dS1jPjE4MCYmKGMrPTM2MCksZi5wdXNoKHtpOmgucHVzaChpKGgpKyJyb3RhdGUoIixudWxsLG4pLTIseDpxYShjLHUpfSkpOnUmJmgucHVzaChpKGgpKyJyb3RhdGUoIit1K24pfWZ1bmN0aW9uIHMoYyx1LGgsZil7YyE9PXU/Zi5wdXNoKHtpOmgucHVzaChpKGgpKyJza2V3WCgiLG51bGwsbiktMix4OnFhKGMsdSl9KTp1JiZoLnB1c2goaShoKSsic2tld1goIit1K24pfWZ1bmN0aW9uIGwoYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKGkocCkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO2QucHVzaCh7aTpnLTQseDpxYShjLGgpfSx7aTpnLTIseDpxYSh1LGYpfSl9ZWxzZShoIT09MXx8ZiE9PTEpJiZwLnB1c2goaShwKSsic2NhbGUoIitoKyIsIitmKyIpIil9cmV0dXJuIGZ1bmN0aW9uKGMsdSl7dmFyIGg9W10sZj1bXTtyZXR1cm4gYz1lKGMpLHU9ZSh1KSxvKGMudHJhbnNsYXRlWCxjLnRyYW5zbGF0ZVksdS50cmFuc2xhdGVYLHUudHJhbnNsYXRlWSxoLGYpLGEoYy5yb3RhdGUsdS5yb3RhdGUsaCxmKSxzKGMuc2tld1gsdS5za2V3WCxoLGYpLGwoYy5zY2FsZVgsYy5zY2FsZVksdS5zY2FsZVgsdS5zY2FsZVksaCxmKSxjPXU9bnVsbCxmdW5jdGlvbihwKXtmb3IodmFyIGQ9LTEsZz1mLmxlbmd0aCxfOysrZDxnOyloWyhfPWZbZF0pLmldPV8ueChwKTtyZXR1cm4gaC5qb2luKCIiKX19fXZhciBoSyxmSyxjVHQ9TSgoKT0+e1E1KCk7c1R0KCk7aEs9bFR0KG9UdCwicHgsICIsInB4KSIsImRlZykiKSxmSz1sVHQoYVR0LCIsICIsIikiLCIpIil9KTt2YXIgclQ9TSgoKT0+e09SKCk7UTUoKTtsSygpO2NUdCgpO29LKCl9KTtmdW5jdGlvbiBmMigpe3JldHVybiB2eXx8KGZUdChVVGUpLHZ5PWFULm5vdygpK1ZSKX1mdW5jdGlvbiBVVGUoKXt2eT0wfWZ1bmN0aW9uIHNUKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBVUihlLHQscil7dmFyIG49bmV3IHNUO3JldHVybiBuLnJlc3RhcnQoZSx0LHIpLG59ZnVuY3Rpb24gcFR0KCl7ZjIoKSwrK2gyO2Zvcih2YXIgZT1CUix0O2U7KSh0PXZ5LWUuX3RpbWUpPj0wJiZlLl9jYWxsLmNhbGwobnVsbCx0KSxlPWUuX25leHQ7LS1oMn1mdW5jdGlvbiB1VHQoKXt2eT0oSFI9YVQubm93KCkpK1ZSLGgyPWlUPTA7dHJ5e3BUdCgpfWZpbmFsbHl7aDI9MCxHVGUoKSx2eT0wfX1mdW5jdGlvbiBxVGUoKXt2YXIgZT1hVC5ub3coKSx0PWUtSFI7dD5oVHQmJihWUi09dCxIUj1lKX1mdW5jdGlvbiBHVGUoKXtmb3IodmFyIGUsdD1CUixyLG49MS8wO3Q7KXQuX2NhbGw/KG4+dC5fdGltZSYmKG49dC5fdGltZSksZT10LHQ9dC5fbmV4dCk6KHI9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1lP2UuX25leHQ9cjpCUj1yKTtvVD1lLHBLKG4pfWZ1bmN0aW9uIHBLKGUpe2lmKCFoMil7aVQmJihpVD1jbGVhclRpbWVvdXQoaVQpKTt2YXIgdD1lLXZ5O3Q+MjQ/KGU8MS8wJiYoaVQ9c2V0VGltZW91dCh1VHQsZS1hVC5ub3coKS1WUikpLG5UJiYoblQ9Y2xlYXJJbnRlcnZhbChuVCkpKTooblR8fChIUj1hVC5ub3coKSxuVD1zZXRJbnRlcnZhbChxVGUsaFR0KSksaDI9MSxmVHQodVR0KSl9fXZhciBoMixpVCxuVCxoVHQsQlIsb1QsSFIsdnksVlIsYVQsZlR0LGRLPU0oKCk9PntoMj0wLGlUPTAsblQ9MCxoVHQ9MWUzLEhSPTAsdnk9MCxWUj0wLGFUPXR5cGVvZiBwZXJmb3JtYW5jZT09Im9iamVjdCImJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLGZUdD10eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbihlKXtzZXRUaW1lb3V0KGUsMTcpfTtzVC5wcm90b3R5cGU9VVIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpzVCxyZXN0YXJ0OmZ1bmN0aW9uKGUsdCxyKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO3I9KHI9PW51bGw/ZjIoKTorcikrKHQ9PW51bGw/MDordCksIXRoaXMuX25leHQmJm9UIT09dGhpcyYmKG9UP29ULl9uZXh0PXRoaXM6QlI9dGhpcyxvVD10aGlzKSx0aGlzLl9jYWxsPWUsdGhpcy5fdGltZT1yLHBLKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLHBLKCkpfX19KTtmdW5jdGlvbiBxUihlLHQscil7dmFyIG49bmV3IHNUO3JldHVybiB0PXQ9PW51bGw/MDordCxuLnJlc3RhcnQoZnVuY3Rpb24oaSl7bi5zdG9wKCksZShpK3QpfSx0LHIpLG59dmFyIGRUdD1NKCgpPT57ZEsoKX0pO3ZhciBtSz1NKCgpPT57ZEsoKTtkVHQoKX0pO2Z1bmN0aW9uIGxnKGUsdCxyLG4saSxvKXt2YXIgYT1lLl9fdHJhbnNpdGlvbjtpZighYSllLl9fdHJhbnNpdGlvbj17fTtlbHNlIGlmKHIgaW4gYSlyZXR1cm47alRlKGUscix7bmFtZTp0LGluZGV4Om4sZ3JvdXA6aSxvbjpXVGUsdHdlZW46WVRlLHRpbWU6by50aW1lLGRlbGF5Om8uZGVsYXksZHVyYXRpb246by5kdXJhdGlvbixlYXNlOm8uZWFzZSx0aW1lcjpudWxsLHN0YXRlOmdUdH0pfWZ1bmN0aW9uIGNUKGUsdCl7dmFyIHI9UWkoZSx0KTtpZihyLnN0YXRlPmdUdCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiByfWZ1bmN0aW9uIEdhKGUsdCl7dmFyIHI9UWkoZSx0KTtpZihyLnN0YXRlPkdSKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiByfWZ1bmN0aW9uIFFpKGUsdCl7dmFyIHI9ZS5fX3RyYW5zaXRpb247aWYoIXJ8fCEocj1yW3RdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIHJ9ZnVuY3Rpb24galRlKGUsdCxyKXt2YXIgbj1lLl9fdHJhbnNpdGlvbixpO25bdF09cixyLnRpbWVyPVVSKG8sMCxyLnRpbWUpO2Z1bmN0aW9uIG8oYyl7ci5zdGF0ZT1nSyxyLnRpbWVyLnJlc3RhcnQoYSxyLmRlbGF5LHIudGltZSksci5kZWxheTw9YyYmYShjLXIuZGVsYXkpfWZ1bmN0aW9uIGEoYyl7dmFyIHUsaCxmLHA7aWYoci5zdGF0ZSE9PWdLKXJldHVybiBsKCk7Zm9yKHUgaW4gbilpZihwPW5bdV0scC5uYW1lPT09ci5uYW1lKXtpZihwLnN0YXRlPT09R1IpcmV0dXJuIHFSKGEpO3Auc3RhdGU9PT1tVHQ/KHAuc3RhdGU9bFQscC50aW1lci5zdG9wKCkscC5vbi5jYWxsKCJpbnRlcnJ1cHQiLGUsZS5fX2RhdGFfXyxwLmluZGV4LHAuZ3JvdXApLGRlbGV0ZSBuW3VdKTordTx0JiYocC5zdGF0ZT1sVCxwLnRpbWVyLnN0b3AoKSxwLm9uLmNhbGwoImNhbmNlbCIsZSxlLl9fZGF0YV9fLHAuaW5kZXgscC5ncm91cCksZGVsZXRlIG5bdV0pfWlmKHFSKGZ1bmN0aW9uKCl7ci5zdGF0ZT09PUdSJiYoci5zdGF0ZT1tVHQsci50aW1lci5yZXN0YXJ0KHMsci5kZWxheSxyLnRpbWUpLHMoYykpfSksci5zdGF0ZT1XUixyLm9uLmNhbGwoInN0YXJ0IixlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxyLnN0YXRlPT09V1Ipe2ZvcihyLnN0YXRlPUdSLGk9bmV3IEFycmF5KGY9ci50d2Vlbi5sZW5ndGgpLHU9MCxoPS0xO3U8ZjsrK3UpKHA9ci50d2Vlblt1XS52YWx1ZS5jYWxsKGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApKSYmKGlbKytoXT1wKTtpLmxlbmd0aD1oKzF9fWZ1bmN0aW9uIHMoYyl7Zm9yKHZhciB1PWM8ci5kdXJhdGlvbj9yLmVhc2UuY2FsbChudWxsLGMvci5kdXJhdGlvbik6KHIudGltZXIucmVzdGFydChsKSxyLnN0YXRlPVlSLDEpLGg9LTEsZj1pLmxlbmd0aDsrK2g8ZjspaVtoXS5jYWxsKGUsdSk7ci5zdGF0ZT09PVlSJiYoci5vbi5jYWxsKCJlbmQiLGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApLGwoKSl9ZnVuY3Rpb24gbCgpe3Iuc3RhdGU9bFQsci50aW1lci5zdG9wKCksZGVsZXRlIG5bdF07Zm9yKHZhciBjIGluIG4pcmV0dXJuO2RlbGV0ZSBlLl9fdHJhbnNpdGlvbn19dmFyIFdUZSxZVGUsZ1R0LGdLLFdSLEdSLG1UdCxZUixsVCxDcz1NKCgpPT57RiQoKTttSygpO1dUZT1XNSgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxZVGU9W10sZ1R0PTAsZ0s9MSxXUj0yLEdSPTMsbVR0PTQsWVI9NSxsVD02fSk7ZnVuY3Rpb24gcDIoZSx0KXt2YXIgcj1lLl9fdHJhbnNpdGlvbixuLGksbz0hMCxhO2lmKCEhcil7dD10PT1udWxsP251bGw6dCsiIjtmb3IoYSBpbiByKXtpZigobj1yW2FdKS5uYW1lIT09dCl7bz0hMTtjb250aW51ZX1pPW4uc3RhdGU+V1ImJm4uc3RhdGU8WVIsbi5zdGF0ZT1sVCxuLnRpbWVyLnN0b3AoKSxuLm9uLmNhbGwoaT8iaW50ZXJydXB0IjoiY2FuY2VsIixlLGUuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxkZWxldGUgclthXX1vJiZkZWxldGUgZS5fX3RyYW5zaXRpb259fXZhciBfSz1NKCgpPT57Q3MoKX0pO2Z1bmN0aW9uIF9UdChlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7cDIodGhpcyxlKX0pfXZhciB5VHQ9TSgoKT0+e19LKCl9KTtmdW5jdGlvbiBYVGUoZSx0KXt2YXIgcixuO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPUdhKHRoaXMsZSksbz1pLnR3ZWVuO2lmKG8hPT1yKXtuPXI9bztmb3IodmFyIGE9MCxzPW4ubGVuZ3RoO2E8czsrK2EpaWYoblthXS5uYW1lPT09dCl7bj1uLnNsaWNlKCksbi5zcGxpY2UoYSwxKTticmVha319aS50d2Vlbj1ufX1mdW5jdGlvbiAkVGUoZSx0LHIpe3ZhciBuLGk7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPUdhKHRoaXMsZSksYT1vLnR3ZWVuO2lmKGEhPT1uKXtpPShuPWEpLnNsaWNlKCk7Zm9yKHZhciBzPXtuYW1lOnQsdmFsdWU6cn0sbD0wLGM9aS5sZW5ndGg7bDxjOysrbClpZihpW2xdLm5hbWU9PT10KXtpW2xdPXM7YnJlYWt9bD09PWMmJmkucHVzaChzKX1vLnR3ZWVuPWl9fWZ1bmN0aW9uIHZUdChlLHQpe3ZhciByPXRoaXMuX2lkO2lmKGUrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPVFpKHRoaXMubm9kZSgpLHIpLnR3ZWVuLGk9MCxvPW4ubGVuZ3RoLGE7aTxvOysraSlpZigoYT1uW2ldKS5uYW1lPT09ZSlyZXR1cm4gYS52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP1hUZTokVGUpKHIsZSx0KSl9ZnVuY3Rpb24gZDIoZSx0LHIpe3ZhciBuPWUuX2lkO3JldHVybiBlLmVhY2goZnVuY3Rpb24oKXt2YXIgaT1HYSh0aGlzLG4pOyhpLnZhbHVlfHwoaS52YWx1ZT17fSkpW3RdPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24oaSl7cmV0dXJuIFFpKGksbikudmFsdWVbdF19fXZhciB1VD1NKCgpPT57Q3MoKX0pO2Z1bmN0aW9uIGpSKGUsdCl7dmFyIHI7cmV0dXJuKHR5cGVvZiB0PT0ibnVtYmVyIj9xYTp0IGluc3RhbmNlb2YgU3U/X3k6KHI9U3UodCkpPyh0PXIsX3kpOnRUKShlLHQpfXZhciB5Sz1NKCgpPT57TlIoKTtyVCgpfSk7ZnVuY3Rpb24gS1RlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBaVGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBKVGUoZSx0LHIpe3ZhciBuLGk9cisiIixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlKGUpO3JldHVybiBhPT09aT9udWxsOmE9PT1uP286bz10KG49YSxyKX19ZnVuY3Rpb24gUVRlKGUsdCxyKXt2YXIgbixpPXIrIiIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk7cmV0dXJuIGE9PT1pP251bGw6YT09PW4/bzpvPXQobj1hLHIpfX1mdW5jdGlvbiB0Q2UoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKGUpOihhPXRoaXMuZ2V0QXR0cmlidXRlKGUpLGw9cysiIixhPT09bD9udWxsOmE9PT1uJiZsPT09aT9vOihpPWwsbz10KG49YSxzKSkpfX1mdW5jdGlvbiBlQ2UoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTooYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCksbD1zKyIiLGE9PT1sP251bGw6YT09PW4mJmw9PT1pP286KGk9bCxvPXQobj1hLHMpKSl9fWZ1bmN0aW9uIHhUdChlLHQpe3ZhciByPVVwKGUpLG49cj09PSJ0cmFuc2Zvcm0iP2ZLOmpSO3JldHVybiB0aGlzLmF0dHJUd2VlbihlLHR5cGVvZiB0PT0iZnVuY3Rpb24iPyhyLmxvY2FsP2VDZTp0Q2UpKHIsbixkMih0aGlzLCJhdHRyLiIrZSx0KSk6dD09bnVsbD8oci5sb2NhbD9aVGU6S1RlKShyKTooci5sb2NhbD9RVGU6SlRlKShyLG4sdCkpfXZhciBiVHQ9TSgoKT0+e3JUKCk7VHMoKTt1VCgpO3lLKCl9KTtmdW5jdGlvbiByQ2UoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7dGhpcy5zZXRBdHRyaWJ1dGUoZSx0LmNhbGwodGhpcyxyKSl9fWZ1bmN0aW9uIG5DZShlLHQpe3JldHVybiBmdW5jdGlvbihyKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCx0LmNhbGwodGhpcyxyKSl9fWZ1bmN0aW9uIGlDZShlLHQpe3ZhciByLG47ZnVuY3Rpb24gaSgpe3ZhciBvPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBvIT09biYmKHI9KG49bykmJm5DZShlLG8pKSxyfXJldHVybiBpLl92YWx1ZT10LGl9ZnVuY3Rpb24gb0NlKGUsdCl7dmFyIHIsbjtmdW5jdGlvbiBpKCl7dmFyIG89dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG8hPT1uJiYocj0obj1vKSYmckNlKGUsbykpLHJ9cmV0dXJuIGkuX3ZhbHVlPXQsaX1mdW5jdGlvbiB3VHQoZSx0KXt2YXIgcj0iYXR0ci4iK2U7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihyPXRoaXMudHdlZW4ocikpJiZyLl92YWx1ZTtpZih0PT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKHIsbnVsbCk7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3ZhciBuPVVwKGUpO3JldHVybiB0aGlzLnR3ZWVuKHIsKG4ubG9jYWw/aUNlOm9DZSkobix0KSl9dmFyIFNUdD1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIGFDZShlLHQpe3JldHVybiBmdW5jdGlvbigpe2NUKHRoaXMsZSkuZGVsYXk9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBzQ2UoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe2NUKHRoaXMsZSkuZGVsYXk9dH19ZnVuY3Rpb24gTVR0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/YUNlOnNDZSkodCxlKSk6UWkodGhpcy5ub2RlKCksdCkuZGVsYXl9dmFyIEVUdD1NKCgpPT57Q3MoKX0pO2Z1bmN0aW9uIGxDZShlLHQpe3JldHVybiBmdW5jdGlvbigpe0dhKHRoaXMsZSkuZHVyYXRpb249K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBjQ2UoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe0dhKHRoaXMsZSkuZHVyYXRpb249dH19ZnVuY3Rpb24gVFR0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/bENlOmNDZSkodCxlKSk6UWkodGhpcy5ub2RlKCksdCkuZHVyYXRpb259dmFyIENUdD1NKCgpPT57Q3MoKX0pO2Z1bmN0aW9uIHVDZShlLHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtHYSh0aGlzLGUpLmVhc2U9dH19ZnVuY3Rpb24gQVR0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCh1Q2UodCxlKSk6UWkodGhpcy5ub2RlKCksdCkuZWFzZX12YXIgUFR0PU0oKCk9PntDcygpfSk7ZnVuY3Rpb24gSVR0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1qNShlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPVtdLGwsYz0wO2M8YTsrK2MpKGw9b1tjXSkmJmUuY2FsbChsLGwuX19kYXRhX18sYyxvKSYmcy5wdXNoKGwpO3JldHVybiBuZXcgaGEobix0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfXZhciBMVHQ9TSgoKT0+e1RzKCk7V3AoKX0pO2Z1bmN0aW9uIGtUdChlKXtpZihlLl9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgaGEoYSx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfXZhciBSVHQ9TSgoKT0+e1dwKCl9KTtmdW5jdGlvbiBoQ2UoZSl7cmV0dXJuKGUrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbih0KXt2YXIgcj10LmluZGV4T2YoIi4iKTtyZXR1cm4gcj49MCYmKHQ9dC5zbGljZSgwLHIpKSwhdHx8dD09PSJzdGFydCJ9KX1mdW5jdGlvbiBmQ2UoZSx0LHIpe3ZhciBuLGksbz1oQ2UodCk/Y1Q6R2E7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9byh0aGlzLGUpLHM9YS5vbjtzIT09biYmKGk9KG49cykuY29weSgpKS5vbih0LHIpLGEub249aX19ZnVuY3Rpb24gTlR0KGUsdCl7dmFyIHI9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9RaSh0aGlzLm5vZGUoKSxyKS5vbi5vbihlKTp0aGlzLmVhY2goZkNlKHIsZSx0KSl9dmFyIERUdD1NKCgpPT57Q3MoKX0pO2Z1bmN0aW9uIHBDZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciByIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCtyIT09ZSlyZXR1cm47dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX19ZnVuY3Rpb24gT1R0KCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLHBDZSh0aGlzLl9pZCkpfXZhciB6VHQ9TSgoKT0+e30pO2Z1bmN0aW9uIEZUdChlKXt2YXIgdD10aGlzLl9uYW1lLHI9dGhpcy5faWQ7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPWd5KGUpKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsbz1uZXcgQXJyYXkoaSksYT0wO2E8aTsrK2EpZm9yKHZhciBzPW5bYV0sbD1zLmxlbmd0aCxjPW9bYV09bmV3IEFycmF5KGwpLHUsaCxmPTA7ZjxsOysrZikodT1zW2ZdKSYmKGg9ZS5jYWxsKHUsdS5fX2RhdGFfXyxmLHMpKSYmKCJfX2RhdGFfXyJpbiB1JiYoaC5fX2RhdGFfXz11Ll9fZGF0YV9fKSxjW2ZdPWgsbGcoY1tmXSx0LHIsZixjLFFpKHUscikpKTtyZXR1cm4gbmV3IGhhKG8sdGhpcy5fcGFyZW50cyx0LHIpfXZhciBCVHQ9TSgoKT0+e1RzKCk7V3AoKTtDcygpfSk7ZnVuY3Rpb24gSFR0KGUpe3ZhciB0PXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9WTUoZSkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPVtdLGE9W10scz0wO3M8aTsrK3MpZm9yKHZhciBsPW5bc10sYz1sLmxlbmd0aCx1LGg9MDtoPGM7KytoKWlmKHU9bFtoXSl7Zm9yKHZhciBmPWUuY2FsbCh1LHUuX19kYXRhX18saCxsKSxwLGQ9UWkodSxyKSxnPTAsXz1mLmxlbmd0aDtnPF87KytnKShwPWZbZ10pJiZsZyhwLHQscixnLGYsZCk7by5wdXNoKGYpLGEucHVzaCh1KX1yZXR1cm4gbmV3IGhhKG8sYSx0LHIpfXZhciBWVHQ9TSgoKT0+e1RzKCk7V3AoKTtDcygpfSk7ZnVuY3Rpb24gVVR0KCl7cmV0dXJuIG5ldyBkQ2UodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfXZhciBkQ2UscVR0PU0oKCk9PntUcygpO2RDZT1xcC5wcm90b3R5cGUuY29uc3RydWN0b3J9KTtmdW5jdGlvbiBtQ2UoZSx0KXt2YXIgcixuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89c2codGhpcyxlKSxhPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLHNnKHRoaXMsZSkpO3JldHVybiBvPT09YT9udWxsOm89PT1yJiZhPT09bj9pOmk9dChyPW8sbj1hKX19ZnVuY3Rpb24gR1R0KGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIGdDZShlLHQscil7dmFyIG4saT1yKyIiLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9c2codGhpcyxlKTtyZXR1cm4gYT09PWk/bnVsbDphPT09bj9vOm89dChuPWEscil9fWZ1bmN0aW9uIF9DZShlLHQscil7dmFyIG4saSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXNnKHRoaXMsZSkscz1yKHRoaXMpLGw9cysiIjtyZXR1cm4gcz09bnVsbCYmKGw9cz0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKSxzZyh0aGlzLGUpKSksYT09PWw/bnVsbDphPT09biYmbD09PWk/bzooaT1sLG89dChuPWEscykpfX1mdW5jdGlvbiB5Q2UoZSx0KXt2YXIgcixuLGksbz0ic3R5bGUuIit0LGE9ImVuZC4iK28scztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD1HYSh0aGlzLGUpLGM9bC5vbix1PWwudmFsdWVbb109PW51bGw/c3x8KHM9R1R0KHQpKTp2b2lkIDA7KGMhPT1yfHxpIT09dSkmJihuPShyPWMpLmNvcHkoKSkub24oYSxpPXUpLGwub249bn19ZnVuY3Rpb24gV1R0KGUsdCxyKXt2YXIgbj0oZSs9IiIpPT0idHJhbnNmb3JtIj9oSzpqUjtyZXR1cm4gdD09bnVsbD90aGlzLnN0eWxlVHdlZW4oZSxtQ2UoZSxuKSkub24oImVuZC5zdHlsZS4iK2UsR1R0KGUpKTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90aGlzLnN0eWxlVHdlZW4oZSxfQ2UoZSxuLGQyKHRoaXMsInN0eWxlLiIrZSx0KSkpLmVhY2goeUNlKHRoaXMuX2lkLGUpKTp0aGlzLnN0eWxlVHdlZW4oZSxnQ2UoZSxuLHQpLHIpLm9uKCJlbmQuc3R5bGUuIitlLG51bGwpfXZhciBZVHQ9TSgoKT0+e3JUKCk7VHMoKTtDcygpO3VUKCk7eUsoKX0pO2Z1bmN0aW9uIHZDZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKG4pe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSx0LmNhbGwodGhpcyxuKSxyKX19ZnVuY3Rpb24geENlKGUsdCxyKXt2YXIgbixpO2Z1bmN0aW9uIG8oKXt2YXIgYT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gYSE9PWkmJihuPShpPWEpJiZ2Q2UoZSxhLHIpKSxufXJldHVybiBvLl92YWx1ZT10LG99ZnVuY3Rpb24galR0KGUsdCxyKXt2YXIgbj0ic3R5bGUuIisoZSs9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4obj10aGlzLnR3ZWVuKG4pKSYmbi5fdmFsdWU7aWYodD09bnVsbClyZXR1cm4gdGhpcy50d2VlbihuLG51bGwpO2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihuLHhDZShlLHQscj09bnVsbD8iIjpyKSl9dmFyIFhUdD1NKCgpPT57fSk7ZnVuY3Rpb24gYkNlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9ZX19ZnVuY3Rpb24gd0NlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUodGhpcyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uICRUdChlKXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsdHlwZW9mIGU9PSJmdW5jdGlvbiI/d0NlKGQyKHRoaXMsInRleHQiLGUpKTpiQ2UoZT09bnVsbD8iIjplKyIiKSl9dmFyIEtUdD1NKCgpPT57dVQoKX0pO2Z1bmN0aW9uIFNDZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7dGhpcy50ZXh0Q29udGVudD1lLmNhbGwodGhpcyx0KX19ZnVuY3Rpb24gTUNlKGUpe3ZhciB0LHI7ZnVuY3Rpb24gbigpe3ZhciBpPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBpIT09ciYmKHQ9KHI9aSkmJlNDZShpKSksdH1yZXR1cm4gbi5fdmFsdWU9ZSxufWZ1bmN0aW9uIFpUdChlKXt2YXIgdD0idGV4dCI7aWYoYXJndW1lbnRzLmxlbmd0aDwxKXJldHVybih0PXRoaXMudHdlZW4odCkpJiZ0Ll92YWx1ZTtpZihlPT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKHQsbnVsbCk7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKHQsTUNlKGUpKX12YXIgSlR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBRVHQoKXtmb3IodmFyIGU9dGhpcy5fbmFtZSx0PXRoaXMuX2lkLHI9WFIoKSxuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgYT1uW29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYylpZihsPWFbY10pe3ZhciB1PVFpKGwsdCk7bGcobCxlLHIsYyxhLHt0aW1lOnUudGltZSt1LmRlbGF5K3UuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjp1LmR1cmF0aW9uLGVhc2U6dS5lYXNlfSl9cmV0dXJuIG5ldyBoYShuLHRoaXMuX3BhcmVudHMsZSxyKX12YXIgdEN0PU0oKCk9PntXcCgpO0NzKCl9KTtmdW5jdGlvbiBlQ3QoKXt2YXIgZSx0LHI9dGhpcyxuPXIuX2lkLGk9ci5zaXplKCk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG8sYSl7dmFyIHM9e3ZhbHVlOmF9LGw9e3ZhbHVlOmZ1bmN0aW9uKCl7LS1pPT09MCYmbygpfX07ci5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9R2EodGhpcyxuKSx1PWMub247dSE9PWUmJih0PShlPXUpLmNvcHkoKSx0Ll8uY2FuY2VsLnB1c2gocyksdC5fLmludGVycnVwdC5wdXNoKHMpLHQuXy5lbmQucHVzaChsKSksYy5vbj10fSl9KX12YXIgckN0PU0oKCk9PntDcygpfSk7ZnVuY3Rpb24gaGEoZSx0LHIsbil7dGhpcy5fZ3JvdXBzPWUsdGhpcy5fcGFyZW50cz10LHRoaXMuX25hbWU9cix0aGlzLl9pZD1ufWZ1bmN0aW9uIHZLKGUpe3JldHVybiBxcCgpLnRyYW5zaXRpb24oZSl9ZnVuY3Rpb24gWFIoKXtyZXR1cm4rK0VDZX12YXIgRUNlLG0yLFdwPU0oKCk9PntUcygpO2JUdCgpO1NUdCgpO0VUdCgpO0NUdCgpO1BUdCgpO0xUdCgpO1JUdCgpO0RUdCgpO3pUdCgpO0JUdCgpO1ZUdCgpO3FUdCgpO1lUdCgpO1hUdCgpO0tUdCgpO0pUdCgpO3RDdCgpO3VUKCk7ckN0KCk7RUNlPTA7bTI9cXAucHJvdG90eXBlO2hhLnByb3RvdHlwZT12Sy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmhhLHNlbGVjdDpGVHQsc2VsZWN0QWxsOkhUdCxmaWx0ZXI6SVR0LG1lcmdlOmtUdCxzZWxlY3Rpb246VVR0LHRyYW5zaXRpb246UVR0LGNhbGw6bTIuY2FsbCxub2RlczptMi5ub2Rlcyxub2RlOm0yLm5vZGUsc2l6ZTptMi5zaXplLGVtcHR5Om0yLmVtcHR5LGVhY2g6bTIuZWFjaCxvbjpOVHQsYXR0cjp4VHQsYXR0clR3ZWVuOndUdCxzdHlsZTpXVHQsc3R5bGVUd2VlbjpqVHQsdGV4dDokVHQsdGV4dFR3ZWVuOlpUdCxyZW1vdmU6T1R0LHR3ZWVuOnZUdCxkZWxheTpNVHQsZHVyYXRpb246VFR0LGVhc2U6QVR0LGVuZDplQ3R9fSk7ZnVuY3Rpb24gVENlKGUsdCl7Zm9yKHZhciByOyEocj1lLl9fdHJhbnNpdGlvbil8fCEocj1yW3RdKTspaWYoIShlPWUucGFyZW50Tm9kZSkpcmV0dXJuIHhLLnRpbWU9ZjIoKSx4SztyZXR1cm4gcn1mdW5jdGlvbiBuQ3QoZSl7dmFyIHQscjtlIGluc3RhbmNlb2YgaGE/KHQ9ZS5faWQsZT1lLl9uYW1lKToodD1YUigpLChyPXhLKS50aW1lPWYyKCksZT1lPT1udWxsP251bGw6ZSsiIik7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgYT1uW29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYykobD1hW2NdKSYmbGcobCxlLHQsYyxhLHJ8fFRDZShsLHQpKTtyZXR1cm4gbmV3IGhhKG4sdGhpcy5fcGFyZW50cyxlLHQpfXZhciB4SyxpQ3Q9TSgoKT0+e1dwKCk7Q3MoKTtMXygpO21LKCk7eEs9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOmJzfX0pO3ZhciBvQ3Q9TSgoKT0+e1RzKCk7eVR0KCk7aUN0KCk7cXAucHJvdG90eXBlLmludGVycnVwdD1fVHQ7cXAucHJvdG90eXBlLnRyYW5zaXRpb249bkN0fSk7dmFyIGFDdD1NKCgpPT57V3AoKTtDcygpfSk7dmFyIHNDdD1NKCgpPT57b0N0KCk7V3AoKTthQ3QoKTtfSygpfSk7ZnVuY3Rpb24gYksoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBsQ3Q9TSgoKT0+e30pO2Z1bmN0aW9uIGNDdChlLHQscil7dGhpcy50YXJnZXQ9ZSx0aGlzLnR5cGU9dCx0aGlzLnNlbGVjdGlvbj1yfXZhciB1Q3Q9TSgoKT0+e30pO2Z1bmN0aW9uIHdLKCl7d3Iuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gaFQoKXt3ci5wcmV2ZW50RGVmYXVsdCgpLHdyLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciBoQ3Q9TSgoKT0+e1RzKCl9KTtmdW5jdGlvbiBmVChlKXtyZXR1cm57dHlwZTplfX1mdW5jdGlvbiBJQ2UoKXtyZXR1cm4hd3IuYnV0dG9ufWZ1bmN0aW9uIExDZSgpe3ZhciBlPXRoaXMub3duZXJTVkdFbGVtZW50fHx0aGlzO3JldHVybltbMCwwXSxbZS53aWR0aC5iYXNlVmFsLnZhbHVlLGUuaGVpZ2h0LmJhc2VWYWwudmFsdWVdXX1mdW5jdGlvbiBNSyhlKXtmb3IoOyFlLl9fYnJ1c2g7KWlmKCEoZT1lLnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gZS5fX2JydXNofWZ1bmN0aW9uIEVLKGUpe3JldHVybiBlWzBdWzBdPT09ZVsxXVswXXx8ZVswXVsxXT09PWVbMV1bMV19ZnVuY3Rpb24gbUN0KGUpe3ZhciB0PWUuX19icnVzaDtyZXR1cm4gdD90LmRpbS5vdXRwdXQodC5zZWxlY3Rpb24pOm51bGx9ZnVuY3Rpb24gZ0N0KCl7cmV0dXJuIFRLKCRSKX1mdW5jdGlvbiBfQ3QoKXtyZXR1cm4gVEsoS1IpfWZ1bmN0aW9uIHlDdCgpe3JldHVybiBUSyhDQ2UpfWZ1bmN0aW9uIFRLKGUpe3ZhciB0PUxDZSxyPUlDZSxuPVc1KGEsInN0YXJ0IiwiYnJ1c2giLCJlbmQiKSxpPTYsbztmdW5jdGlvbiBhKGYpe3ZhciBwPWYucHJvcGVydHkoIl9fYnJ1c2giLGgpLnNlbGVjdEFsbCgiLm92ZXJsYXkiKS5kYXRhKFtmVCgib3ZlcmxheSIpXSk7cC5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwib3ZlcmxheSIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuYXR0cigiY3Vyc29yIixZcC5vdmVybGF5KS5tZXJnZShwKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGc9TUsodGhpcykuZXh0ZW50O0dwKHRoaXMpLmF0dHIoIngiLGdbMF1bMF0pLmF0dHIoInkiLGdbMF1bMV0pLmF0dHIoIndpZHRoIixnWzFdWzBdLWdbMF1bMF0pLmF0dHIoImhlaWdodCIsZ1sxXVsxXS1nWzBdWzFdKX0pLGYuc2VsZWN0QWxsKCIuc2VsZWN0aW9uIikuZGF0YShbZlQoInNlbGVjdGlvbiIpXSkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsInNlbGVjdGlvbiIpLmF0dHIoImN1cnNvciIsWXAuc2VsZWN0aW9uKS5hdHRyKCJmaWxsIiwiIzc3NyIpLmF0dHIoImZpbGwtb3BhY2l0eSIsLjMpLmF0dHIoInN0cm9rZSIsIiNmZmYiKS5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIik7dmFyIGQ9Zi5zZWxlY3RBbGwoIi5oYW5kbGUiKS5kYXRhKGUuaGFuZGxlcyxmdW5jdGlvbihnKXtyZXR1cm4gZy50eXBlfSk7ZC5leGl0KCkucmVtb3ZlKCksZC5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIixmdW5jdGlvbihnKXtyZXR1cm4iaGFuZGxlIGhhbmRsZS0tIitnLnR5cGV9KS5hdHRyKCJjdXJzb3IiLGZ1bmN0aW9uKGcpe3JldHVybiBZcFtnLnR5cGVdfSksZi5lYWNoKHMpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpLm9uKCJtb3VzZWRvd24uYnJ1c2ggdG91Y2hzdGFydC5icnVzaCIsdSl9YS5tb3ZlPWZ1bmN0aW9uKGYscCl7Zi5zZWxlY3Rpb24/Zi5vbigic3RhcnQuYnJ1c2giLGZ1bmN0aW9uKCl7bCh0aGlzLGFyZ3VtZW50cykuYmVmb3Jlc3RhcnQoKS5zdGFydCgpfSkub24oImludGVycnVwdC5icnVzaCBlbmQuYnJ1c2giLGZ1bmN0aW9uKCl7bCh0aGlzLGFyZ3VtZW50cykuZW5kKCl9KS50d2VlbigiYnJ1c2giLGZ1bmN0aW9uKCl7dmFyIGQ9dGhpcyxnPWQuX19icnVzaCxfPWwoZCxhcmd1bWVudHMpLHk9Zy5zZWxlY3Rpb24seD1lLmlucHV0KHR5cGVvZiBwPT0iZnVuY3Rpb24iP3AuYXBwbHkodGhpcyxhcmd1bWVudHMpOnAsZy5leHRlbnQpLGI9eXkoeSx4KTtmdW5jdGlvbiBTKEMpe2cuc2VsZWN0aW9uPUM9PT0xJiZFSyh4KT9udWxsOmIoQykscy5jYWxsKGQpLF8uYnJ1c2goKX1yZXR1cm4geSYmeD9TOlMoMSl9KTpmLmVhY2goZnVuY3Rpb24oKXt2YXIgZD10aGlzLGc9YXJndW1lbnRzLF89ZC5fX2JydXNoLHk9ZS5pbnB1dCh0eXBlb2YgcD09ImZ1bmN0aW9uIj9wLmFwcGx5KGQsZyk6cCxfLmV4dGVudCkseD1sKGQsZykuYmVmb3Jlc3RhcnQoKTtwMihkKSxfLnNlbGVjdGlvbj15PT1udWxsfHxFSyh5KT9udWxsOnkscy5jYWxsKGQpLHguc3RhcnQoKS5icnVzaCgpLmVuZCgpfSl9O2Z1bmN0aW9uIHMoKXt2YXIgZj1HcCh0aGlzKSxwPU1LKHRoaXMpLnNlbGVjdGlvbjtwPyhmLnNlbGVjdEFsbCgiLnNlbGVjdGlvbiIpLnN0eWxlKCJkaXNwbGF5IixudWxsKS5hdHRyKCJ4IixwWzBdWzBdKS5hdHRyKCJ5IixwWzBdWzFdKS5hdHRyKCJ3aWR0aCIscFsxXVswXS1wWzBdWzBdKS5hdHRyKCJoZWlnaHQiLHBbMV1bMV0tcFswXVsxXSksZi5zZWxlY3RBbGwoIi5oYW5kbGUiKS5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cigieCIsZnVuY3Rpb24oZCl7cmV0dXJuIGQudHlwZVtkLnR5cGUubGVuZ3RoLTFdPT09ImUiP3BbMV1bMF0taS8yOnBbMF1bMF0taS8yfSkuYXR0cigieSIsZnVuY3Rpb24oZCl7cmV0dXJuIGQudHlwZVswXT09PSJzIj9wWzFdWzFdLWkvMjpwWzBdWzFdLWkvMn0pLmF0dHIoIndpZHRoIixmdW5jdGlvbihkKXtyZXR1cm4gZC50eXBlPT09Im4ifHxkLnR5cGU9PT0icyI/cFsxXVswXS1wWzBdWzBdK2k6aX0pLmF0dHIoImhlaWdodCIsZnVuY3Rpb24oZCl7cmV0dXJuIGQudHlwZT09PSJlInx8ZC50eXBlPT09InciP3BbMV1bMV0tcFswXVsxXStpOml9KSk6Zi5zZWxlY3RBbGwoIi5zZWxlY3Rpb24sLmhhbmRsZSIpLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpLmF0dHIoIngiLG51bGwpLmF0dHIoInkiLG51bGwpLmF0dHIoIndpZHRoIixudWxsKS5hdHRyKCJoZWlnaHQiLG51bGwpfWZ1bmN0aW9uIGwoZixwKXtyZXR1cm4gZi5fX2JydXNoLmVtaXR0ZXJ8fG5ldyBjKGYscCl9ZnVuY3Rpb24gYyhmLHApe3RoaXMudGhhdD1mLHRoaXMuYXJncz1wLHRoaXMuc3RhdGU9Zi5fX2JydXNoLHRoaXMuYWN0aXZlPTB9Yy5wcm90b3R5cGU9e2JlZm9yZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuKyt0aGlzLmFjdGl2ZT09PTEmJih0aGlzLnN0YXRlLmVtaXR0ZXI9dGhpcyx0aGlzLnN0YXJ0aW5nPSEwKSx0aGlzfSxzdGFydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0aW5nJiYodGhpcy5zdGFydGluZz0hMSx0aGlzLmVtaXQoInN0YXJ0IikpLHRoaXN9LGJydXNoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1pdCgiYnJ1c2giKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4tLXRoaXMuYWN0aXZlPT09MCYmKGRlbGV0ZSB0aGlzLnN0YXRlLmVtaXR0ZXIsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihmKXskJChuZXcgY0N0KGEsZixlLm91dHB1dCh0aGlzLnN0YXRlLnNlbGVjdGlvbikpLG4uYXBwbHksbixbZix0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fTtmdW5jdGlvbiB1KCl7aWYod3IudG91Y2hlcyl7aWYod3IuY2hhbmdlZFRvdWNoZXMubGVuZ3RoPHdyLnRvdWNoZXMubGVuZ3RoKXJldHVybiBoVCgpfWVsc2UgaWYobylyZXR1cm47aWYoIXIuYXBwbHkodGhpcyxhcmd1bWVudHMpKXJldHVybjt2YXIgZj10aGlzLHA9d3IudGFyZ2V0Ll9fZGF0YV9fLnR5cGUsZD0od3IubWV0YUtleT9wPSJvdmVybGF5IjpwKT09PSJzZWxlY3Rpb24iP2ZDdDp3ci5hbHRLZXk/XzI6ZzIsZz1lPT09S1I/bnVsbDpBQ2VbcF0sXz1lPT09JFI/bnVsbDpQQ2VbcF0seT1NSyhmKSx4PXkuZXh0ZW50LGI9eS5zZWxlY3Rpb24sUz14WzBdWzBdLEMsUCxrPXhbMF1bMV0sTyxELEI9eFsxXVswXSxJLEwsUj14WzFdWzFdLEYseixVLFcsWixydD1nJiZfJiZ3ci5zaGlmdEtleSxvdCxzdCxTdD1QUihmKSxidD1TdCxNdD1sKGYsYXJndW1lbnRzKS5iZWZvcmVzdGFydCgpO3A9PT0ib3ZlcmxheSI/eS5zZWxlY3Rpb249Yj1bW0M9ZT09PUtSP1M6U3RbMF0sTz1lPT09JFI/azpTdFsxXV0sW0k9ZT09PUtSP0I6QyxGPWU9PT0kUj9SOk9dXTooQz1iWzBdWzBdLE89YlswXVsxXSxJPWJbMV1bMF0sRj1iWzFdWzFdKSxQPUMsRD1PLEw9SSx6PUY7dmFyIGx0PUdwKGYpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLEt0PWx0LnNlbGVjdEFsbCgiLm92ZXJsYXkiKS5hdHRyKCJjdXJzb3IiLFlwW3BdKTtpZih3ci50b3VjaGVzKWx0Lm9uKCJ0b3VjaG1vdmUuYnJ1c2giLGN0LCEwKS5vbigidG91Y2hlbmQuYnJ1c2ggdG91Y2hjYW5jZWwuYnJ1c2giLGV0LCEwKTtlbHNle3ZhciBfdD1HcCh3ci52aWV3KS5vbigia2V5ZG93bi5icnVzaCIsZHQsITApLm9uKCJrZXl1cC5icnVzaCIscSwhMCkub24oIm1vdXNlbW92ZS5icnVzaCIsY3QsITApLm9uKCJtb3VzZXVwLmJydXNoIixldCwhMCk7WiQod3Iudmlldyl9d0soKSxwMihmKSxzLmNhbGwoZiksTXQuc3RhcnQoKTtmdW5jdGlvbiBjdCgpe3ZhciBwdD1QUihmKTtydCYmIW90JiYhc3QmJihNYXRoLmFicyhwdFswXS1idFswXSk+TWF0aC5hYnMocHRbMV0tYnRbMV0pP3N0PSEwOm90PSEwKSxidD1wdCxaPSEwLGhUKCksWCgpfWZ1bmN0aW9uIFgoKXt2YXIgcHQ7c3dpdGNoKFU9YnRbMF0tU3RbMF0sVz1idFsxXS1TdFsxXSxkKXtjYXNlIFNLOmNhc2UgZkN0OntnJiYoVT1NYXRoLm1heChTLUMsTWF0aC5taW4oQi1JLFUpKSxQPUMrVSxMPUkrVSksXyYmKFc9TWF0aC5tYXgoay1PLE1hdGgubWluKFItRixXKSksRD1PK1csej1GK1cpO2JyZWFrfWNhc2UgZzI6e2c8MD8oVT1NYXRoLm1heChTLUMsTWF0aC5taW4oQi1DLFUpKSxQPUMrVSxMPUkpOmc+MCYmKFU9TWF0aC5tYXgoUy1JLE1hdGgubWluKEItSSxVKSksUD1DLEw9SStVKSxfPDA/KFc9TWF0aC5tYXgoay1PLE1hdGgubWluKFItTyxXKSksRD1PK1csej1GKTpfPjAmJihXPU1hdGgubWF4KGstRixNYXRoLm1pbihSLUYsVykpLEQ9Tyx6PUYrVyk7YnJlYWt9Y2FzZSBfMjp7ZyYmKFA9TWF0aC5tYXgoUyxNYXRoLm1pbihCLEMtVSpnKSksTD1NYXRoLm1heChTLE1hdGgubWluKEIsSStVKmcpKSksXyYmKEQ9TWF0aC5tYXgoayxNYXRoLm1pbihSLE8tVypfKSksej1NYXRoLm1heChrLE1hdGgubWluKFIsRitXKl8pKSk7YnJlYWt9fUw8UCYmKGcqPS0xLHB0PUMsQz1JLEk9cHQscHQ9UCxQPUwsTD1wdCxwIGluIHBDdCYmS3QuYXR0cigiY3Vyc29yIixZcFtwPXBDdFtwXV0pKSx6PEQmJihfKj0tMSxwdD1PLE89RixGPXB0LHB0PUQsRD16LHo9cHQscCBpbiBkQ3QmJkt0LmF0dHIoImN1cnNvciIsWXBbcD1kQ3RbcF1dKSkseS5zZWxlY3Rpb24mJihiPXkuc2VsZWN0aW9uKSxvdCYmKFA9YlswXVswXSxMPWJbMV1bMF0pLHN0JiYoRD1iWzBdWzFdLHo9YlsxXVsxXSksKGJbMF1bMF0hPT1QfHxiWzBdWzFdIT09RHx8YlsxXVswXSE9PUx8fGJbMV1bMV0hPT16KSYmKHkuc2VsZWN0aW9uPVtbUCxEXSxbTCx6XV0scy5jYWxsKGYpLE10LmJydXNoKCkpfWZ1bmN0aW9uIGV0KCl7aWYod0soKSx3ci50b3VjaGVzKXtpZih3ci50b3VjaGVzLmxlbmd0aClyZXR1cm47byYmY2xlYXJUaW1lb3V0KG8pLG89c2V0VGltZW91dChmdW5jdGlvbigpe289bnVsbH0sNTAwKSxsdC5vbigidG91Y2htb3ZlLmJydXNoIHRvdWNoZW5kLmJydXNoIHRvdWNoY2FuY2VsLmJydXNoIixudWxsKX1lbHNlIEokKHdyLnZpZXcsWiksX3Qub24oImtleWRvd24uYnJ1c2gga2V5dXAuYnJ1c2ggbW91c2Vtb3ZlLmJydXNoIG1vdXNldXAuYnJ1c2giLG51bGwpO2x0LmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIiksS3QuYXR0cigiY3Vyc29yIixZcC5vdmVybGF5KSx5LnNlbGVjdGlvbiYmKGI9eS5zZWxlY3Rpb24pLEVLKGIpJiYoeS5zZWxlY3Rpb249bnVsbCxzLmNhbGwoZikpLE10LmVuZCgpfWZ1bmN0aW9uIGR0KCl7c3dpdGNoKHdyLmtleUNvZGUpe2Nhc2UgMTY6e3J0PWcmJl87YnJlYWt9Y2FzZSAxODp7ZD09PWcyJiYoZyYmKEk9TC1VKmcsQz1QK1UqZyksXyYmKEY9ei1XKl8sTz1EK1cqXyksZD1fMixYKCkpO2JyZWFrfWNhc2UgMzI6eyhkPT09ZzJ8fGQ9PT1fMikmJihnPDA/ST1MLVU6Zz4wJiYoQz1QLVUpLF88MD9GPXotVzpfPjAmJihPPUQtVyksZD1TSyxLdC5hdHRyKCJjdXJzb3IiLFlwLnNlbGVjdGlvbiksWCgpKTticmVha31kZWZhdWx0OnJldHVybn1oVCgpfWZ1bmN0aW9uIHEoKXtzd2l0Y2god3Iua2V5Q29kZSl7Y2FzZSAxNjp7cnQmJihvdD1zdD1ydD0hMSxYKCkpO2JyZWFrfWNhc2UgMTg6e2Q9PT1fMiYmKGc8MD9JPUw6Zz4wJiYoQz1QKSxfPDA/Rj16Ol8+MCYmKE89RCksZD1nMixYKCkpO2JyZWFrfWNhc2UgMzI6e2Q9PT1TSyYmKHdyLmFsdEtleT8oZyYmKEk9TC1VKmcsQz1QK1UqZyksXyYmKEY9ei1XKl8sTz1EK1cqXyksZD1fMik6KGc8MD9JPUw6Zz4wJiYoQz1QKSxfPDA/Rj16Ol8+MCYmKE89RCksZD1nMiksS3QuYXR0cigiY3Vyc29yIixZcFtwXSksWCgpKTticmVha31kZWZhdWx0OnJldHVybn1oVCgpfX1mdW5jdGlvbiBoKCl7dmFyIGY9dGhpcy5fX2JydXNofHx7c2VsZWN0aW9uOm51bGx9O3JldHVybiBmLmV4dGVudD10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxmLmRpbT1lLGZ9cmV0dXJuIGEuZXh0ZW50PWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBmPT0iZnVuY3Rpb24iP2Y6YksoW1srZlswXVswXSwrZlswXVsxXV0sWytmWzFdWzBdLCtmWzFdWzFdXV0pLGEpOnR9LGEuZmlsdGVyPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBmPT0iZnVuY3Rpb24iP2Y6YksoISFmKSxhKTpyfSxhLmhhbmRsZVNpemU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K2YsYSk6aX0sYS5vbj1mdW5jdGlvbigpe3ZhciBmPW4ub24uYXBwbHkobixhcmd1bWVudHMpO3JldHVybiBmPT09bj9hOmZ9LGF9dmFyIGZDdCxTSyxnMixfMiwkUixLUixDQ2UsWXAscEN0LGRDdCxBQ2UsUENlLHZDdD1NKCgpPT57RiQoKTtQNXQoKTtyVCgpO1RzKCk7c0N0KCk7bEN0KCk7dUN0KCk7aEN0KCk7ZkN0PXtuYW1lOiJkcmFnIn0sU0s9e25hbWU6InNwYWNlIn0sZzI9e25hbWU6ImhhbmRsZSJ9LF8yPXtuYW1lOiJjZW50ZXIifSwkUj17bmFtZToieCIsaGFuZGxlczpbImUiLCJ3Il0ubWFwKGZUKSxpbnB1dDpmdW5jdGlvbihlLHQpe3JldHVybiBlJiZbW2VbMF0sdFswXVsxXV0sW2VbMV0sdFsxXVsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJltlWzBdWzBdLGVbMV1bMF1dfX0sS1I9e25hbWU6InkiLGhhbmRsZXM6WyJuIiwicyJdLm1hcChmVCksaW5wdXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmW1t0WzBdWzBdLGVbMF1dLFt0WzFdWzBdLGVbMV1dXX0sb3V0cHV0OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZbZVswXVsxXSxlWzFdWzFdXX19LENDZT17bmFtZToieHkiLGhhbmRsZXM6WyJuIiwiZSIsInMiLCJ3IiwibnciLCJuZSIsInNlIiwic3ciXS5tYXAoZlQpLGlucHV0OmZ1bmN0aW9uKGUpe3JldHVybiBlfSxvdXRwdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9fSxZcD17b3ZlcmxheToiY3Jvc3NoYWlyIixzZWxlY3Rpb246Im1vdmUiLG46Im5zLXJlc2l6ZSIsZToiZXctcmVzaXplIixzOiJucy1yZXNpemUiLHc6ImV3LXJlc2l6ZSIsbnc6Im53c2UtcmVzaXplIixuZToibmVzdy1yZXNpemUiLHNlOiJud3NlLXJlc2l6ZSIsc3c6Im5lc3ctcmVzaXplIn0scEN0PXtlOiJ3Iix3OiJlIixudzoibmUiLG5lOiJudyIsc2U6InN3Iixzdzoic2UifSxkQ3Q9e246InMiLHM6Im4iLG53OiJzdyIsbmU6InNlIixzZToibmUiLHN3OiJudyJ9LEFDZT17b3ZlcmxheToxLHNlbGVjdGlvbjoxLG46bnVsbCxlOjEsczpudWxsLHc6LTEsbnc6LTEsbmU6MSxzZToxLHN3Oi0xfSxQQ2U9e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOi0xLGU6bnVsbCxzOjEsdzpudWxsLG53Oi0xLG5lOi0xLHNlOjEsc3c6MX19KTt2YXIgeEN0PU0oKCk9Pnt2Q3QoKX0pO2Z1bmN0aW9uIGNnKGUsdCl7cmV0dXJuIGU8dD8tMTplPnQ/MTplPj10PzA6TmFOfXZhciB4eT1NKCgpPT57fSk7ZnVuY3Rpb24gQ0soZSl7cmV0dXJuIGUubGVuZ3RoPT09MSYmKGU9a0NlKGUpKSx7bGVmdDpmdW5jdGlvbih0LHIsbixpKXtmb3Iobj09bnVsbCYmKG49MCksaT09bnVsbCYmKGk9dC5sZW5ndGgpO248aTspe3ZhciBvPW4raT4+PjE7ZSh0W29dLHIpPDA/bj1vKzE6aT1vfXJldHVybiBufSxyaWdodDpmdW5jdGlvbih0LHIsbixpKXtmb3Iobj09bnVsbCYmKG49MCksaT09bnVsbCYmKGk9dC5sZW5ndGgpO248aTspe3ZhciBvPW4raT4+PjE7ZSh0W29dLHIpPjA/aT1vOm49bysxfXJldHVybiBufX19ZnVuY3Rpb24ga0NlKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBjZyhlKHQpLHIpfX12YXIgQUs9TSgoKT0+e3h5KCl9KTt2YXIgYkN0LFJDZSxOQ2UsUEs9TSgoKT0+e3h5KCk7QUsoKTtiQ3Q9Q0soY2cpLFJDZT1iQ3QucmlnaHQsTkNlPWJDdC5sZWZ0fSk7dmFyIElLPU0oKCk9Pnt9KTt2YXIgd0N0PU0oKCk9PntJSygpfSk7dmFyIFNDdD1NKCgpPT57fSk7dmFyIHkyPU0oKCk9Pnt9KTt2YXIgTEs9TSgoKT0+e3kyKCl9KTt2YXIga0s9TSgoKT0+e0xLKCl9KTt2YXIgUks9TSgoKT0+e30pO3ZhciBNQ3QsT0NlLHpDZSxOSz1NKCgpPT57TUN0PUFycmF5LnByb3RvdHlwZSxPQ2U9TUN0LnNsaWNlLHpDZT1NQ3QubWFwfSk7dmFyIEVDdD1NKCgpPT57fSk7dmFyIFRDdD1NKCgpPT57fSk7ZnVuY3Rpb24gcFQoZSx0LHIpe2U9K2UsdD0rdCxyPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KHQ9ZSxlPTAsMSk6aTwzPzE6K3I7Zm9yKHZhciBuPS0xLGk9TWF0aC5tYXgoMCxNYXRoLmNlaWwoKHQtZSkvcikpfDAsbz1uZXcgQXJyYXkoaSk7KytuPGk7KW9bbl09ZStuKnI7cmV0dXJuIG99dmFyIERLPU0oKCk9Pnt9KTt2YXIgU2xuLE1sbixFbG4sT0s9TSgoKT0+e1Nsbj1NYXRoLnNxcnQoNTApLE1sbj1NYXRoLnNxcnQoMTApLEVsbj1NYXRoLnNxcnQoMil9KTt2YXIgeks9TSgoKT0+e30pO3ZhciBDQ3Q9TSgoKT0+e05LKCk7UEsoKTtFQ3QoKTtSSygpO1RDdCgpO0RLKCk7T0soKTt6SygpfSk7dmFyIEpSPU0oKCk9Pnt5MigpfSk7dmFyIFBDdD1NKCgpPT57TksoKTt4eSgpO3kyKCk7SlIoKX0pO3ZhciBJQ3Q9TSgoKT0+e2tLKCl9KTt2YXIgTEN0PU0oKCk9Pnt9KTt2YXIga0N0PU0oKCk9Pnt5MigpfSk7dmFyIFJDdD1NKCgpPT57eHkoKTt5MigpO0pSKCl9KTt2YXIgTkN0PU0oKCk9Pnt9KTt2YXIgRks9TSgoKT0+e30pO3ZhciBEQ3Q9TSgoKT0+e30pO3ZhciBPQ3Q9TSgoKT0+e3h5KCl9KTt2YXIgekN0PU0oKCk9Pnt9KTt2YXIgRkN0PU0oKCk9Pnt9KTt2YXIgQks9TSgoKT0+e0ZLKCl9KTt2YXIgQkN0PU0oKCk9PntCSygpfSk7dmFyIEhDdD1NKCgpPT57UEsoKTt4eSgpO0FLKCk7d0N0KCk7U0N0KCk7a0soKTtSSygpO0NDdCgpO1BDdCgpO0lDdCgpO3pLKCk7TEN0KCk7a0N0KCk7UkN0KCk7TkN0KCk7RksoKTtJSygpO0RDdCgpO0pSKCk7REsoKTtPQ3QoKTt6Q3QoKTtGQ3QoKTtPSygpO0JLKCk7TEsoKTtCQ3QoKX0pO3ZhciBISyxWSyxWQ3QsZFQsVUsscUssR0s9TSgoKT0+e0hLPU1hdGguY29zLFZLPU1hdGguc2luLFZDdD1NYXRoLlBJLGRUPVZDdC8yLFVLPVZDdCoyLHFLPU1hdGgubWF4fSk7ZnVuY3Rpb24gV0NlKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBlKHQuc291cmNlLnZhbHVlK3QudGFyZ2V0LnZhbHVlLHIuc291cmNlLnZhbHVlK3IudGFyZ2V0LnZhbHVlKX19ZnVuY3Rpb24gVUN0KCl7dmFyIGU9MCx0PW51bGwscj1udWxsLG49bnVsbDtmdW5jdGlvbiBpKG8pe3ZhciBhPW8ubGVuZ3RoLHM9W10sbD1wVChhKSxjPVtdLHU9W10saD11Lmdyb3Vwcz1uZXcgQXJyYXkoYSksZj1uZXcgQXJyYXkoYSphKSxwLGQsZyxfLHkseDtmb3IocD0wLHk9LTE7Kyt5PGE7KXtmb3IoZD0wLHg9LTE7Kyt4PGE7KWQrPW9beV1beF07cy5wdXNoKGQpLGMucHVzaChwVChhKSkscCs9ZH1mb3IodCYmbC5zb3J0KGZ1bmN0aW9uKEIsSSl7cmV0dXJuIHQoc1tCXSxzW0ldKX0pLHImJmMuZm9yRWFjaChmdW5jdGlvbihCLEkpe0Iuc29ydChmdW5jdGlvbihMLFIpe3JldHVybiByKG9bSV1bTF0sb1tJXVtSXSl9KX0pLHA9cUsoMCxVSy1lKmEpL3AsXz1wP2U6VUsvYSxkPTAseT0tMTsrK3k8YTspe2ZvcihnPWQseD0tMTsrK3g8YTspe3ZhciBiPWxbeV0sUz1jW2JdW3hdLEM9b1tiXVtTXSxQPWQsaz1kKz1DKnA7ZltTKmErYl09e2luZGV4OmIsc3ViaW5kZXg6UyxzdGFydEFuZ2xlOlAsZW5kQW5nbGU6ayx2YWx1ZTpDfX1oW2JdPXtpbmRleDpiLHN0YXJ0QW5nbGU6ZyxlbmRBbmdsZTpkLHZhbHVlOnNbYl19LGQrPV99Zm9yKHk9LTE7Kyt5PGE7KWZvcih4PXktMTsrK3g8YTspe3ZhciBPPWZbeCphK3ldLEQ9Zlt5KmEreF07KE8udmFsdWV8fEQudmFsdWUpJiZ1LnB1c2goTy52YWx1ZTxELnZhbHVlP3tzb3VyY2U6RCx0YXJnZXQ6T306e3NvdXJjZTpPLHRhcmdldDpEfSl9cmV0dXJuIG4/dS5zb3J0KG4pOnV9cmV0dXJuIGkucGFkQW5nbGU9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9cUsoMCxvKSxpKTplfSxpLnNvcnRHcm91cHM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9byxpKTp0fSxpLnNvcnRTdWJncm91cHM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9byxpKTpyfSxpLnNvcnRDaG9yZHM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89PW51bGw/bj1udWxsOihuPVdDZShvKSkuXz1vLGkpOm4mJm4uX30saX12YXIgcUN0PU0oKCk9PntIQ3QoKTtHSygpfSk7dmFyIEdDdCxXQ3Q9TSgoKT0+e0dDdD1BcnJheS5wcm90b3R5cGUuc2xpY2V9KTtmdW5jdGlvbiBRUihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIFlDdD1NKCgpPT57fSk7ZnVuY3Rpb24gaksoKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIn1mdW5jdGlvbiBqQ3QoKXtyZXR1cm4gbmV3IGpLfXZhciBXSyxZSyxieSxZQ2UsWEssWEN0PU0oKCk9PntXSz1NYXRoLlBJLFlLPTIqV0ssYnk9MWUtNixZQ2U9WUstYnk7aksucHJvdG90eXBlPWpDdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmpLLG1vdmVUbzpmdW5jdGlvbihlLHQpe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rZSkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rdCl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuX3gxIT09bnVsbCYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuXys9IloiKX0sbGluZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fKz0iTCIrKHRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kxPSt0KX0scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbihlLHQscixuKXt0aGlzLl8rPSJRIisgK2UrIiwiKyArdCsiLCIrKHRoaXMuX3gxPStyKSsiLCIrKHRoaXMuX3kxPStuKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbihlLHQscixuLGksbyl7dGhpcy5fKz0iQyIrICtlKyIsIisgK3QrIiwiKyArcisiLCIrICtuKyIsIisodGhpcy5feDE9K2kpKyIsIisodGhpcy5feTE9K28pfSxhcmNUbzpmdW5jdGlvbihlLHQscixuLGkpe2U9K2UsdD0rdCxyPStyLG49K24saT0raTt2YXIgbz10aGlzLl94MSxhPXRoaXMuX3kxLHM9ci1lLGw9bi10LGM9by1lLHU9YS10LGg9YypjK3UqdTtpZihpPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIraSk7aWYodGhpcy5feDE9PT1udWxsKXRoaXMuXys9Ik0iKyh0aGlzLl94MT1lKSsiLCIrKHRoaXMuX3kxPXQpO2Vsc2UgaWYoaD5ieSlpZighKE1hdGguYWJzKHUqcy1sKmMpPmJ5KXx8IWkpdGhpcy5fKz0iTCIrKHRoaXMuX3gxPWUpKyIsIisodGhpcy5feTE9dCk7ZWxzZXt2YXIgZj1yLW8scD1uLWEsZD1zKnMrbCpsLGc9ZipmK3AqcCxfPU1hdGguc3FydChkKSx5PU1hdGguc3FydChoKSx4PWkqTWF0aC50YW4oKFdLLU1hdGguYWNvcygoZCtoLWcpLygyKl8qeSkpKS8yKSxiPXgveSxTPXgvXztNYXRoLmFicyhiLTEpPmJ5JiYodGhpcy5fKz0iTCIrKGUrYipjKSsiLCIrKHQrYip1KSksdGhpcy5fKz0iQSIraSsiLCIraSsiLDAsMCwiKyArKHUqZj5jKnApKyIsIisodGhpcy5feDE9ZStTKnMpKyIsIisodGhpcy5feTE9dCtTKmwpfX0sYXJjOmZ1bmN0aW9uKGUsdCxyLG4saSxvKXtlPStlLHQ9K3Qscj0rcixvPSEhbzt2YXIgYT1yKk1hdGguY29zKG4pLHM9cipNYXRoLnNpbihuKSxsPWUrYSxjPXQrcyx1PTFebyxoPW8/bi1pOmktbjtpZihyPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrcik7dGhpcy5feDE9PT1udWxsP3RoaXMuXys9Ik0iK2wrIiwiK2M6KE1hdGguYWJzKHRoaXMuX3gxLWwpPmJ5fHxNYXRoLmFicyh0aGlzLl95MS1jKT5ieSkmJih0aGlzLl8rPSJMIitsKyIsIitjKSxyJiYoaDwwJiYoaD1oJVlLK1lLKSxoPllDZT90aGlzLl8rPSJBIityKyIsIityKyIsMCwxLCIrdSsiLCIrKGUtYSkrIiwiKyh0LXMpKyJBIityKyIsIityKyIsMCwxLCIrdSsiLCIrKHRoaXMuX3gxPWwpKyIsIisodGhpcy5feTE9Yyk6aD5ieSYmKHRoaXMuXys9IkEiK3IrIiwiK3IrIiwwLCIrICsoaD49V0spKyIsIit1KyIsIisodGhpcy5feDE9ZStyKk1hdGguY29zKGkpKSsiLCIrKHRoaXMuX3kxPXQrcipNYXRoLnNpbihpKSkpKX0scmVjdDpmdW5jdGlvbihlLHQscixuKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2UpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K3QpKyJoIisgK3IrInYiKyArbisiaCIrLXIrIloifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTtYSz1qQ3R9KTt2YXIgJEN0PU0oKCk9PntYQ3QoKX0pO2Z1bmN0aW9uIGpDZShlKXtyZXR1cm4gZS5zb3VyY2V9ZnVuY3Rpb24gWENlKGUpe3JldHVybiBlLnRhcmdldH1mdW5jdGlvbiAkQ2UoZSl7cmV0dXJuIGUucmFkaXVzfWZ1bmN0aW9uIEtDZShlKXtyZXR1cm4gZS5zdGFydEFuZ2xlfWZ1bmN0aW9uIFpDZShlKXtyZXR1cm4gZS5lbmRBbmdsZX1mdW5jdGlvbiBLQ3QoKXt2YXIgZT1qQ2UsdD1YQ2Uscj0kQ2Usbj1LQ2UsaT1aQ2Usbz1udWxsO2Z1bmN0aW9uIGEoKXt2YXIgcyxsPUdDdC5jYWxsKGFyZ3VtZW50cyksYz1lLmFwcGx5KHRoaXMsbCksdT10LmFwcGx5KHRoaXMsbCksaD0rci5hcHBseSh0aGlzLChsWzBdPWMsbCkpLGY9bi5hcHBseSh0aGlzLGwpLWRULHA9aS5hcHBseSh0aGlzLGwpLWRULGQ9aCpISyhmKSxnPWgqVksoZiksXz0rci5hcHBseSh0aGlzLChsWzBdPXUsbCkpLHk9bi5hcHBseSh0aGlzLGwpLWRULHg9aS5hcHBseSh0aGlzLGwpLWRUO2lmKG98fChvPXM9WEsoKSksby5tb3ZlVG8oZCxnKSxvLmFyYygwLDAsaCxmLHApLChmIT09eXx8cCE9PXgpJiYoby5xdWFkcmF0aWNDdXJ2ZVRvKDAsMCxfKkhLKHkpLF8qVksoeSkpLG8uYXJjKDAsMCxfLHkseCkpLG8ucXVhZHJhdGljQ3VydmVUbygwLDAsZCxnKSxvLmNsb3NlUGF0aCgpLHMpcmV0dXJuIG89bnVsbCxzKyIifHxudWxsfXJldHVybiBhLnJhZGl1cz1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOlFSKCtzKSxhKTpyfSxhLnN0YXJ0QW5nbGU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpRUigrcyksYSk6bn0sYS5lbmRBbmdsZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOlFSKCtzKSxhKTppfSxhLnNvdXJjZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1zLGEpOmV9LGEudGFyZ2V0PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXMsYSk6dH0sYS5jb250ZXh0PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXM9PW51bGw/bnVsbDpzLGEpOm99LGF9dmFyIFpDdD1NKCgpPT57V0N0KCk7WUN0KCk7R0soKTskQ3QoKX0pO3ZhciBKQ3Q9TSgoKT0+e3FDdCgpO1pDdCgpfSk7ZnVuY3Rpb24gdE4oKXt9ZnVuY3Rpb24gUUN0KGUsdCl7dmFyIHI9bmV3IHROO2lmKGUgaW5zdGFuY2VvZiB0TillLmVhY2goZnVuY3Rpb24ocyxsKXtyLnNldChsLHMpfSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgbj0tMSxpPWUubGVuZ3RoLG87aWYodD09bnVsbClmb3IoOysrbjxpOylyLnNldChuLGVbbl0pO2Vsc2UgZm9yKDsrK248aTspci5zZXQodChvPWVbbl0sbixlKSxvKX1lbHNlIGlmKGUpZm9yKHZhciBhIGluIGUpci5zZXQoYSxlW2FdKTtyZXR1cm4gcn12YXIgY2wsd3ksZU49TSgoKT0+e2NsPSIkIjt0Ti5wcm90b3R5cGU9UUN0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dE4saGFzOmZ1bmN0aW9uKGUpe3JldHVybiBjbCtlIGluIHRoaXN9LGdldDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpc1tjbCtlXX0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXNbY2wrZV09dCx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dmFyIHQ9Y2wrZTtyZXR1cm4gdCBpbiB0aGlzJiZkZWxldGUgdGhpc1t0XX0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09Y2wmJmRlbGV0ZSB0aGlzW2VdfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWNsJiZlLnB1c2godC5zbGljZSgxKSk7cmV0dXJuIGV9LHZhbHVlczpmdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1jbCYmZS5wdXNoKHRoaXNbdF0pO3JldHVybiBlfSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWNsJiZlLnB1c2goe2tleTp0LnNsaWNlKDEpLHZhbHVlOnRoaXNbdF19KTtyZXR1cm4gZX0sc2l6ZTpmdW5jdGlvbigpe3ZhciBlPTA7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWNsJiYrK2U7cmV0dXJuIGV9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMpaWYoZVswXT09PWNsKXJldHVybiExO3JldHVybiEwfSxlYWNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1jbCYmZSh0aGlzW3RdLHQuc2xpY2UoMSksdGhpcyl9fTt3eT1RQ3R9KTtmdW5jdGlvbiByQXQoKXt2YXIgZT1bXSx0PVtdLHIsbixpO2Z1bmN0aW9uIG8ocyxsLGMsdSl7aWYobD49ZS5sZW5ndGgpcmV0dXJuIHIhPW51bGwmJnMuc29ydChyKSxuIT1udWxsP24ocyk6cztmb3IodmFyIGg9LTEsZj1zLmxlbmd0aCxwPWVbbCsrXSxkLGcsXz13eSgpLHkseD1jKCk7KytoPGY7KSh5PV8uZ2V0KGQ9cChnPXNbaF0pKyIiKSk/eS5wdXNoKGcpOl8uc2V0KGQsW2ddKTtyZXR1cm4gXy5lYWNoKGZ1bmN0aW9uKGIsUyl7dSh4LFMsbyhiLGwsYyx1KSl9KSx4fWZ1bmN0aW9uIGEocyxsKXtpZigrK2w+ZS5sZW5ndGgpcmV0dXJuIHM7dmFyIGMsdT10W2wtMV07cmV0dXJuIG4hPW51bGwmJmw+PWUubGVuZ3RoP2M9cy5lbnRyaWVzKCk6KGM9W10scy5lYWNoKGZ1bmN0aW9uKGgsZil7Yy5wdXNoKHtrZXk6Zix2YWx1ZXM6YShoLGwpfSl9KSksdSE9bnVsbD9jLnNvcnQoZnVuY3Rpb24oaCxmKXtyZXR1cm4gdShoLmtleSxmLmtleSl9KTpjfXJldHVybiBpPXtvYmplY3Q6ZnVuY3Rpb24ocyl7cmV0dXJuIG8ocywwLEpDZSxRQ2UpfSxtYXA6ZnVuY3Rpb24ocyl7cmV0dXJuIG8ocywwLHRBdCxlQXQpfSxlbnRyaWVzOmZ1bmN0aW9uKHMpe3JldHVybiBhKG8ocywwLHRBdCxlQXQpLDApfSxrZXk6ZnVuY3Rpb24ocyl7cmV0dXJuIGUucHVzaChzKSxpfSxzb3J0S2V5czpmdW5jdGlvbihzKXtyZXR1cm4gdFtlLmxlbmd0aC0xXT1zLGl9LHNvcnRWYWx1ZXM6ZnVuY3Rpb24ocyl7cmV0dXJuIHI9cyxpfSxyb2xsdXA6ZnVuY3Rpb24ocyl7cmV0dXJuIG49cyxpfX19ZnVuY3Rpb24gSkNlKCl7cmV0dXJue319ZnVuY3Rpb24gUUNlKGUsdCxyKXtlW3RdPXJ9ZnVuY3Rpb24gdEF0KCl7cmV0dXJuIHd5KCl9ZnVuY3Rpb24gZUF0KGUsdCxyKXtlLnNldCh0LHIpfXZhciBuQXQ9TSgoKT0+e2VOKCl9KTtmdW5jdGlvbiByTigpe31mdW5jdGlvbiBpQXQoZSx0KXt2YXIgcj1uZXcgck47aWYoZSBpbnN0YW5jZW9mIHJOKWUuZWFjaChmdW5jdGlvbihvKXtyLmFkZChvKX0pO2Vsc2UgaWYoZSl7dmFyIG49LTEsaT1lLmxlbmd0aDtpZih0PT1udWxsKWZvcig7KytuPGk7KXIuYWRkKGVbbl0pO2Vsc2UgZm9yKDsrK248aTspci5hZGQodChlW25dLG4sZSkpfXJldHVybiByfXZhciBTeSxvQXQsYUF0PU0oKCk9PntlTigpO1N5PXd5LnByb3RvdHlwZTtyTi5wcm90b3R5cGU9aUF0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6ck4saGFzOlN5LmhhcyxhZGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrPSIiLHRoaXNbY2wrZV09ZSx0aGlzfSxyZW1vdmU6U3kucmVtb3ZlLGNsZWFyOlN5LmNsZWFyLHZhbHVlczpTeS5rZXlzLHNpemU6U3kuc2l6ZSxlbXB0eTpTeS5lbXB0eSxlYWNoOlN5LmVhY2h9O29BdD1pQXR9KTtmdW5jdGlvbiBzQXQoZSl7dmFyIHQ9W107Zm9yKHZhciByIGluIGUpdC5wdXNoKHIpO3JldHVybiB0fXZhciBsQXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGNBdChlKXt2YXIgdD1bXTtmb3IodmFyIHIgaW4gZSl0LnB1c2goZVtyXSk7cmV0dXJuIHR9dmFyIHVBdD1NKCgpPT57fSk7ZnVuY3Rpb24gaEF0KGUpe3ZhciB0PVtdO2Zvcih2YXIgciBpbiBlKXQucHVzaCh7a2V5OnIsdmFsdWU6ZVtyXX0pO3JldHVybiB0fXZhciBmQXQ9TSgoKT0+e30pO3ZhciBwQXQ9TSgoKT0+e25BdCgpO2FBdCgpO2VOKCk7bEF0KCk7dUF0KCk7ZkF0KCl9KTtmdW5jdGlvbiBqcChlLHQscil7ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gdWcoZSx0KXt2YXIgcj1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9dmFyIG5OPU0oKCk9Pnt9KTtmdW5jdGlvbiBlZigpe31mdW5jdGlvbiB4MihlKXt2YXIgdDtyZXR1cm4gZT0oZSsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKHQ9dEFlLmV4ZWMoZSkpPyh0PXBhcnNlSW50KHRbMV0sMTYpLG5ldyB0byh0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKHQmMTUpPDw0fHQmMTUsMSkpOih0PWVBZS5leGVjKGUpKT9tQXQocGFyc2VJbnQodFsxXSwxNikpOih0PXJBZS5leGVjKGUpKT9uZXcgdG8odFsxXSx0WzJdLHRbM10sMSk6KHQ9bkFlLmV4ZWMoZSkpP25ldyB0byh0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCwxKToodD1pQWUuZXhlYyhlKSk/Z0F0KHRbMV0sdFsyXSx0WzNdLHRbNF0pOih0PW9BZS5leGVjKGUpKT9nQXQodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsdFs0XSk6KHQ9YUFlLmV4ZWMoZSkpP19BdCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLDEpOih0PXNBZS5leGVjKGUpKT9fQXQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCx0WzRdKTpkQXQuaGFzT3duUHJvcGVydHkoZSk/bUF0KGRBdFtlXSk6ZT09PSJ0cmFuc3BhcmVudCI/bmV3IHRvKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gbUF0KGUpe3JldHVybiBuZXcgdG8oZT4+MTYmMjU1LGU+PjgmMjU1LGUmMjU1LDEpfWZ1bmN0aW9uIGdBdChlLHQscixuKXtyZXR1cm4gbjw9MCYmKGU9dD1yPU5hTiksbmV3IHRvKGUsdCxyLG4pfWZ1bmN0aW9uIGdUKGUpe3JldHVybiBlIGluc3RhbmNlb2YgZWZ8fChlPXgyKGUpKSxlPyhlPWUucmdiKCksbmV3IHRvKGUucixlLmcsZS5iLGUub3BhY2l0eSkpOm5ldyB0b31mdW5jdGlvbiBLSyhlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/Z1QoZSk6bmV3IHRvKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiB0byhlLHQscixuKXt0aGlzLnI9K2UsdGhpcy5nPSt0LHRoaXMuYj0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gX0F0KGUsdCxyLG4pe3JldHVybiBuPD0wP2U9dD1yPU5hTjpyPD0wfHxyPj0xP2U9dD1OYU46dDw9MCYmKGU9TmFOKSxuZXcgUWgoZSx0LHIsbil9ZnVuY3Rpb24gbEFlKGUpe2lmKGUgaW5zdGFuY2VvZiBRaClyZXR1cm4gbmV3IFFoKGUuaCxlLnMsZS5sLGUub3BhY2l0eSk7aWYoZSBpbnN0YW5jZW9mIGVmfHwoZT14MihlKSksIWUpcmV0dXJuIG5ldyBRaDtpZihlIGluc3RhbmNlb2YgUWgpcmV0dXJuIGU7ZT1lLnJnYigpO3ZhciB0PWUuci8yNTUscj1lLmcvMjU1LG49ZS5iLzI1NSxpPU1hdGgubWluKHQscixuKSxvPU1hdGgubWF4KHQscixuKSxhPU5hTixzPW8taSxsPShvK2kpLzI7cmV0dXJuIHM/KHQ9PT1vP2E9KHItbikvcysocjxuKSo2OnI9PT1vP2E9KG4tdCkvcysyOmE9KHQtcikvcys0LHMvPWw8LjU/bytpOjItby1pLGEqPTYwKTpzPWw+MCYmbDwxPzA6YSxuZXcgUWgoYSxzLGwsZS5vcGFjaXR5KX1mdW5jdGlvbiBaSyhlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/bEFlKGUpOm5ldyBRaChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gUWgoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMucz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uICRLKGUsdCxyKXtyZXR1cm4oZTw2MD90KyhyLXQpKmUvNjA6ZTwxODA/cjplPDI0MD90KyhyLXQpKigyNDAtZSkvNjA6dCkqMjU1fXZhciBoZyxNeSx2MixtVCx0Zix0QWUsZUFlLHJBZSxuQWUsaUFlLG9BZSxhQWUsc0FlLGRBdCxpTj1NKCgpPT57bk4oKTtoZz0uNyxNeT0xL2hnLHYyPSJcXHMqKFsrLV0/XFxkKylcXHMqIixtVD0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIix0Zj0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsdEFlPS9eIyhbMC05YS1mXXszfSkkLyxlQWU9L14jKFswLTlhLWZdezZ9KSQvLHJBZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbdjIsdjIsdjJdKyJcXCkkIiksbkFlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1t0Zix0Zix0Zl0rIlxcKSQiKSxpQWU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1t2Mix2Mix2MixtVF0rIlxcKSQiKSxvQWU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1t0Zix0Zix0ZixtVF0rIlxcKSQiKSxhQWU9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW21ULHRmLHRmXSsiXFwpJCIpLHNBZT1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW21ULHRmLHRmLG1UXSsiXFwpJCIpLGRBdD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtqcChlZix4Mix7ZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpKyIifX0pO2pwKHRvLEtLLHVnKGVmLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP015Ok1hdGgucG93KE15LGUpLG5ldyB0byh0aGlzLnIqZSx0aGlzLmcqZSx0aGlzLmIqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9oZzpNYXRoLnBvdyhoZyxlKSxuZXcgdG8odGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIDA8PXRoaXMuciYmdGhpcy5yPD0yNTUmJjA8PXRoaXMuZyYmdGhpcy5nPD0yNTUmJjA8PXRoaXMuYiYmdGhpcy5iPD0yNTUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSx0b1N0cmluZzpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX19KSk7anAoUWgsWkssdWcoZWYse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/TXk6TWF0aC5wb3coTXksZSksbmV3IFFoKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/aGc6TWF0aC5wb3coaGcsZSksbmV3IFFoKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5oJTM2MCsodGhpcy5oPDApKjM2MCx0PWlzTmFOKGUpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLHI9dGhpcy5sLG49cisocjwuNT9yOjEtcikqdCxpPTIqci1uO3JldHVybiBuZXcgdG8oJEsoZT49MjQwP2UtMjQwOmUrMTIwLGksbiksJEsoZSxpLG4pLCRLKGU8MTIwP2UrMjQwOmUtMTIwLGksbiksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9fSkpfSk7dmFyIG9OLGFOLEpLPU0oKCk9PntvTj1NYXRoLlBJLzE4MCxhTj0xODAvTWF0aC5QSX0pO2Z1bmN0aW9uIG5aKGUpe2lmKGUgaW5zdGFuY2VvZiBYcClyZXR1cm4gbmV3IFhwKGUubCxlLmEsZS5iLGUub3BhY2l0eSk7aWYoZSBpbnN0YW5jZW9mIGZnKXt2YXIgdD1lLmgqb047cmV0dXJuIG5ldyBYcChlLmwsTWF0aC5jb3ModCkqZS5jLE1hdGguc2luKHQpKmUuYyxlLm9wYWNpdHkpfWUgaW5zdGFuY2VvZiB0b3x8KGU9Z1QoZSkpO3ZhciByPXJaKGUuciksbj1yWihlLmcpLGk9clooZS5iKSxvPVFLKCguNDEyNDU2NCpyKy4zNTc1NzYxKm4rLjE4MDQzNzUqaSkveUF0KSxhPVFLKCguMjEyNjcyOSpyKy43MTUxNTIyKm4rLjA3MjE3NSppKS92QXQpLHM9UUsoKC4wMTkzMzM5KnIrLjExOTE5MipuKy45NTAzMDQxKmkpL3hBdCk7cmV0dXJuIG5ldyBYcCgxMTYqYS0xNiw1MDAqKG8tYSksMjAwKihhLXMpLGUub3BhY2l0eSl9ZnVuY3Rpb24gbE4oZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP25aKGUpOm5ldyBYcChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gWHAoZSx0LHIsbil7dGhpcy5sPStlLHRoaXMuYT0rdCx0aGlzLmI9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIFFLKGUpe3JldHVybiBlPmNBZT9NYXRoLnBvdyhlLDEvMyk6ZS93QXQrYkF0fWZ1bmN0aW9uIHRaKGUpe3JldHVybiBlPmIyP2UqZSplOndBdCooZS1iQXQpfWZ1bmN0aW9uIGVaKGUpe3JldHVybiAyNTUqKGU8PS4wMDMxMzA4PzEyLjkyKmU6MS4wNTUqTWF0aC5wb3coZSwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gclooZSl7cmV0dXJuKGUvPTI1NSk8PS4wNDA0NT9lLzEyLjkyOk1hdGgucG93KChlKy4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gdUFlKGUpe2lmKGUgaW5zdGFuY2VvZiBmZylyZXR1cm4gbmV3IGZnKGUuaCxlLmMsZS5sLGUub3BhY2l0eSk7ZSBpbnN0YW5jZW9mIFhwfHwoZT1uWihlKSk7dmFyIHQ9TWF0aC5hdGFuMihlLmIsZS5hKSphTjtyZXR1cm4gbmV3IGZnKHQ8MD90KzM2MDp0LE1hdGguc3FydChlLmEqZS5hK2UuYiplLmIpLGUubCxlLm9wYWNpdHkpfWZ1bmN0aW9uIGlaKGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT91QWUoZSk6bmV3IGZnKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBmZyhlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5jPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259dmFyIHNOLHlBdCx2QXQseEF0LGJBdCxiMix3QXQsY0FlLFNBdD1NKCgpPT57bk4oKTtpTigpO0pLKCk7c049MTgseUF0PS45NTA0Nyx2QXQ9MSx4QXQ9MS4wODg4MyxiQXQ9NC8yOSxiMj02LzI5LHdBdD0zKmIyKmIyLGNBZT1iMipiMipiMjtqcChYcCxsTix1ZyhlZix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBYcCh0aGlzLmwrc04qKGU9PW51bGw/MTplKSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFhwKHRoaXMubC1zTiooZT09bnVsbD8xOmUpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9KHRoaXMubCsxNikvMTE2LHQ9aXNOYU4odGhpcy5hKT9lOmUrdGhpcy5hLzUwMCxyPWlzTmFOKHRoaXMuYik/ZTplLXRoaXMuYi8yMDA7cmV0dXJuIGU9dkF0KnRaKGUpLHQ9eUF0KnRaKHQpLHI9eEF0KnRaKHIpLG5ldyB0byhlWigzLjI0MDQ1NDIqdC0xLjUzNzEzODUqZS0uNDk4NTMxNCpyKSxlWigtLjk2OTI2Nip0KzEuODc2MDEwOCplKy4wNDE1NTYqciksZVooLjA1NTY0MzQqdC0uMjA0MDI1OSplKzEuMDU3MjI1MipyKSx0aGlzLm9wYWNpdHkpfX0pKTtqcChmZyxpWix1ZyhlZix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBmZyh0aGlzLmgsdGhpcy5jLHRoaXMubCtzTiooZT09bnVsbD8xOmUpLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGZnKHRoaXMuaCx0aGlzLmMsdGhpcy5sLXNOKihlPT1udWxsPzE6ZSksdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIG5aKHRoaXMpLnJnYigpfX0pKX0pO2Z1bmN0aW9uIGhBZShlKXtpZihlIGluc3RhbmNlb2YgRXkpcmV0dXJuIG5ldyBFeShlLmgsZS5zLGUubCxlLm9wYWNpdHkpO2UgaW5zdGFuY2VvZiB0b3x8KGU9Z1QoZSkpO3ZhciB0PWUuci8yNTUscj1lLmcvMjU1LG49ZS5iLzI1NSxpPShUQXQqbitNQXQqdC1FQXQqcikvKFRBdCtNQXQtRUF0KSxvPW4taSxhPShfVCooci1pKS1hWipvKS9jTixzPU1hdGguc3FydChhKmErbypvKS8oX1QqaSooMS1pKSksbD1zP01hdGguYXRhbjIoYSxvKSphTi0xMjA6TmFOO3JldHVybiBuZXcgRXkobDwwP2wrMzYwOmwscyxpLGUub3BhY2l0eSl9ZnVuY3Rpb24gdU4oZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP2hBZShlKTpuZXcgRXkoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIEV5KGUsdCxyLG4pe3RoaXMuaD0rZSx0aGlzLnM9K3QsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn12YXIgQ0F0LG9aLGFaLGNOLF9ULE1BdCxFQXQsVEF0LEFBdD1NKCgpPT57bk4oKTtpTigpO0pLKCk7Q0F0PS0uMTQ4NjEsb1o9MS43ODI3NyxhWj0tLjI5MjI3LGNOPS0uOTA2NDksX1Q9MS45NzI5NCxNQXQ9X1QqY04sRUF0PV9UKm9aLFRBdD1vWiphWi1jTipDQXQ7anAoRXksdU4sdWcoZWYse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/TXk6TWF0aC5wb3coTXksZSksbmV3IEV5KHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/aGc6TWF0aC5wb3coaGcsZSksbmV3IEV5KHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9aXNOYU4odGhpcy5oKT8wOih0aGlzLmgrMTIwKSpvTix0PSt0aGlzLmwscj1pc05hTih0aGlzLnMpPzA6dGhpcy5zKnQqKDEtdCksbj1NYXRoLmNvcyhlKSxpPU1hdGguc2luKGUpO3JldHVybiBuZXcgdG8oMjU1Kih0K3IqKENBdCpuK29aKmkpKSwyNTUqKHQrciooYVoqbitjTippKSksMjU1Kih0K3IqKF9UKm4pKSx0aGlzLm9wYWNpdHkpfX0pKX0pO3ZhciBQQXQ9TSgoKT0+e2lOKCk7U0F0KCk7QUF0KCl9KTtmdW5jdGlvbiBMQXQoKXtmb3IodmFyIGU9MCx0PWFyZ3VtZW50cy5sZW5ndGgscj17fSxuO2U8dDsrK2Upe2lmKCEobj1hcmd1bWVudHNbZV0rIiIpfHxuIGluIHIpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IGhOKHIpfWZ1bmN0aW9uIGhOKGUpe3RoaXMuXz1lfWZ1bmN0aW9uIHBBZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIGRBZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIElBdChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09ZkFlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgZkFlLGtBdCxSQXQ9TSgoKT0+e2ZBZT17dmFsdWU6ZnVuY3Rpb24oKXt9fTtoTi5wcm90b3R5cGU9TEF0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6aE4sb246ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl8sbj1wQWUoZSsiIixyKSxpLG89LTEsYT1uLmxlbmd0aDtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcig7KytvPGE7KWlmKChpPShlPW5bb10pLnR5cGUpJiYoaT1kQWUocltpXSxlLm5hbWUpKSlyZXR1cm4gaTtyZXR1cm59aWYodCE9bnVsbCYmdHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK3QpO2Zvcig7KytvPGE7KWlmKGk9KGU9bltvXSkudHlwZSlyW2ldPUlBdChyW2ldLGUubmFtZSx0KTtlbHNlIGlmKHQ9PW51bGwpZm9yKGkgaW4gcilyW2ldPUlBdChyW2ldLGUubmFtZSxudWxsKTtyZXR1cm4gdGhpc30sY29weTpmdW5jdGlvbigpe3ZhciBlPXt9LHQ9dGhpcy5fO2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXS5zbGljZSgpO3JldHVybiBuZXcgaE4oZSl9LGNhbGw6ZnVuY3Rpb24oZSx0KXtpZigoaT1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciByPW5ldyBBcnJheShpKSxuPTAsaSxvO248aTsrK24pcltuXT1hcmd1bWVudHNbbisyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO2ZvcihvPXRoaXMuX1tlXSxuPTAsaT1vLmxlbmd0aDtuPGk7KytuKW9bbl0udmFsdWUuYXBwbHkodCxyKX0sYXBwbHk6ZnVuY3Rpb24oZSx0LHIpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKHZhciBuPXRoaXMuX1tlXSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKW5baV0udmFsdWUuYXBwbHkodCxyKX19O2tBdD1MQXR9KTt2YXIgTkF0PU0oKCk9PntSQXQoKX0pO2Z1bmN0aW9uIE9BdCgpe2Zvcih2YXIgZT0wLHQ9YXJndW1lbnRzLmxlbmd0aCxyPXt9LG47ZTx0OysrZSl7aWYoIShuPWFyZ3VtZW50c1tlXSsiIil8fG4gaW4gcnx8L1tccy5dLy50ZXN0KG4pKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK24pO3Jbbl09W119cmV0dXJuIG5ldyBmTihyKX1mdW5jdGlvbiBmTihlKXt0aGlzLl89ZX1mdW5jdGlvbiBnQWUoZSx0KXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHIpe3ZhciBuPSIiLGk9ci5pbmRleE9mKCIuIik7aWYoaT49MCYmKG49ci5zbGljZShpKzEpLHI9ci5zbGljZSgwLGkpKSxyJiYhdC5oYXNPd25Qcm9wZXJ0eShyKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIityKTtyZXR1cm57dHlwZTpyLG5hbWU6bn19KX1mdW5jdGlvbiBfQWUoZSx0KXtmb3IodmFyIHI9MCxuPWUubGVuZ3RoLGk7cjxuOysrcilpZigoaT1lW3JdKS5uYW1lPT09dClyZXR1cm4gaS52YWx1ZX1mdW5jdGlvbiBEQXQoZSx0LHIpe2Zvcih2YXIgbj0wLGk9ZS5sZW5ndGg7bjxpOysrbilpZihlW25dLm5hbWU9PT10KXtlW25dPW1BZSxlPWUuc2xpY2UoMCxuKS5jb25jYXQoZS5zbGljZShuKzEpKTticmVha31yZXR1cm4gciE9bnVsbCYmZS5wdXNoKHtuYW1lOnQsdmFsdWU6cn0pLGV9dmFyIG1BZSxzWix6QXQ9TSgoKT0+e21BZT17dmFsdWU6ZnVuY3Rpb24oKXt9fTtmTi5wcm90b3R5cGU9T0F0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6Zk4sb246ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl8sbj1nQWUoZSsiIixyKSxpLG89LTEsYT1uLmxlbmd0aDtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcig7KytvPGE7KWlmKChpPShlPW5bb10pLnR5cGUpJiYoaT1fQWUocltpXSxlLm5hbWUpKSlyZXR1cm4gaTtyZXR1cm59aWYodCE9bnVsbCYmdHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK3QpO2Zvcig7KytvPGE7KWlmKGk9KGU9bltvXSkudHlwZSlyW2ldPURBdChyW2ldLGUubmFtZSx0KTtlbHNlIGlmKHQ9PW51bGwpZm9yKGkgaW4gcilyW2ldPURBdChyW2ldLGUubmFtZSxudWxsKTtyZXR1cm4gdGhpc30sY29weTpmdW5jdGlvbigpe3ZhciBlPXt9LHQ9dGhpcy5fO2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXS5zbGljZSgpO3JldHVybiBuZXcgZk4oZSl9LGNhbGw6ZnVuY3Rpb24oZSx0KXtpZigoaT1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciByPW5ldyBBcnJheShpKSxuPTAsaSxvO248aTsrK24pcltuXT1hcmd1bWVudHNbbisyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO2ZvcihvPXRoaXMuX1tlXSxuPTAsaT1vLmxlbmd0aDtuPGk7KytuKW9bbl0udmFsdWUuYXBwbHkodCxyKX0sYXBwbHk6ZnVuY3Rpb24oZSx0LHIpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKHZhciBuPXRoaXMuX1tlXSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKW5baV0udmFsdWUuYXBwbHkodCxyKX19O3NaPU9BdH0pO3ZhciBGQXQ9TSgoKT0+e3pBdCgpfSk7dmFyIHBOLGxaLGNaPU0oKCk9PntwTj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsbFo9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOnBOLHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn19KTtmdW5jdGlvbiBkTihlKXt2YXIgdD1lKz0iIixyPXQuaW5kZXhPZigiOiIpO3JldHVybiByPj0wJiYodD1lLnNsaWNlKDAscikpIT09InhtbG5zIiYmKGU9ZS5zbGljZShyKzEpKSxsWi5oYXNPd25Qcm9wZXJ0eSh0KT97c3BhY2U6bFpbdF0sbG9jYWw6ZX06ZX12YXIgdVo9TSgoKT0+e2NaKCl9KTtmdW5jdGlvbiB5QWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vd25lckRvY3VtZW50LHI9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIHI9PT1wTiYmdC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09cE4/dC5jcmVhdGVFbGVtZW50KGUpOnQuY3JlYXRlRWxlbWVudE5TKHIsZSl9fWZ1bmN0aW9uIHZBZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBtTihlKXt2YXIgdD1kTihlKTtyZXR1cm4odC5sb2NhbD92QWU6eUFlKSh0KX12YXIgaFo9TSgoKT0+e3VaKCk7Y1ooKX0pO2Z1bmN0aW9uIHhBZSgpe31mdW5jdGlvbiBnTihlKXtyZXR1cm4gZT09bnVsbD94QWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKGUpfX12YXIgZlo9TSgoKT0+e30pO2Z1bmN0aW9uIEJBdChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9Z04oZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSlmb3IodmFyIG89dFtpXSxhPW8ubGVuZ3RoLHM9bltpXT1uZXcgQXJyYXkoYSksbCxjLHU9MDt1PGE7Kyt1KShsPW9bdV0pJiYoYz1lLmNhbGwobCxsLl9fZGF0YV9fLHUsbykpJiYoIl9fZGF0YV9fImluIGwmJihjLl9fZGF0YV9fPWwuX19kYXRhX18pLHNbdV09Yyk7cmV0dXJuIG5ldyBwaShuLHRoaXMuX3BhcmVudHMpfXZhciBIQXQ9TSgoKT0+e3JmKCk7ZlooKX0pO2Z1bmN0aW9uIGJBZSgpe3JldHVybltdfWZ1bmN0aW9uIFZBdChlKXtyZXR1cm4gZT09bnVsbD9iQWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGUpfX12YXIgVUF0PU0oKCk9Pnt9KTtmdW5jdGlvbiBxQXQoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPVZBdChlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49W10saT1bXSxvPTA7bzxyOysrbylmb3IodmFyIGE9dFtvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpKGw9YVtjXSkmJihuLnB1c2goZS5jYWxsKGwsbC5fX2RhdGFfXyxjLGEpKSxpLnB1c2gobCkpO3JldHVybiBuZXcgcGkobixpKX12YXIgR0F0PU0oKCk9PntyZigpO1VBdCgpfSk7ZnVuY3Rpb24gV0F0KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXMoZSl9fXZhciBZQXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGpBdChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9V0F0KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBwaShuLHRoaXMuX3BhcmVudHMpfXZhciBYQXQ9TSgoKT0+e3JmKCk7WUF0KCl9KTtmdW5jdGlvbiBfTihlKXtyZXR1cm4gbmV3IEFycmF5KGUubGVuZ3RoKX12YXIgcFo9TSgoKT0+e30pO2Z1bmN0aW9uICRBdCgpe3JldHVybiBuZXcgcGkodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoX04pLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIHlUKGUsdCl7dGhpcy5vd25lckRvY3VtZW50PWUub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1lLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PWUsdGhpcy5fX2RhdGFfXz10fXZhciBkWj1NKCgpPT57cFooKTtyZigpO3lULnByb3RvdHlwZT17Y29uc3RydWN0b3I6eVQsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0KX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IoZSl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKGUpfX19KTtmdW5jdGlvbiBLQXQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBaQXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHdBZShlLHQscixuLGksbyl7Zm9yKHZhciBhPTAscyxsPXQubGVuZ3RoLGM9by5sZW5ndGg7YTxjOysrYSkocz10W2FdKT8ocy5fX2RhdGFfXz1vW2FdLG5bYV09cyk6clthXT1uZXcgeVQoZSxvW2FdKTtmb3IoO2E8bDsrK2EpKHM9dFthXSkmJihpW2FdPXMpfWZ1bmN0aW9uIFNBZShlLHQscixuLGksbyxhKXt2YXIgcyxsLGM9e30sdT10Lmxlbmd0aCxoPW8ubGVuZ3RoLGY9bmV3IEFycmF5KHUpLHA7Zm9yKHM9MDtzPHU7KytzKShsPXRbc10pJiYoZltzXT1wPUpBdCthLmNhbGwobCxsLl9fZGF0YV9fLHMsdCkscCBpbiBjP2lbc109bDpjW3BdPWwpO2ZvcihzPTA7czxoOysrcylwPUpBdCthLmNhbGwoZSxvW3NdLHMsbyksKGw9Y1twXSk/KG5bc109bCxsLl9fZGF0YV9fPW9bc10sY1twXT1udWxsKTpyW3NdPW5ldyB5VChlLG9bc10pO2ZvcihzPTA7czx1OysrcykobD10W3NdKSYmY1tmW3NdXT09PWwmJihpW3NdPWwpfWZ1bmN0aW9uIFFBdChlLHQpe2lmKCFlKXJldHVybiBwPW5ldyBBcnJheSh0aGlzLnNpemUoKSksYz0tMSx0aGlzLmVhY2goZnVuY3Rpb24oUCl7cFsrK2NdPVB9KSxwO3ZhciByPXQ/U0FlOndBZSxuPXRoaXMuX3BhcmVudHMsaT10aGlzLl9ncm91cHM7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPUtBdChlKSk7Zm9yKHZhciBvPWkubGVuZ3RoLGE9bmV3IEFycmF5KG8pLHM9bmV3IEFycmF5KG8pLGw9bmV3IEFycmF5KG8pLGM9MDtjPG87KytjKXt2YXIgdT1uW2NdLGg9aVtjXSxmPWgubGVuZ3RoLHA9ZS5jYWxsKHUsdSYmdS5fX2RhdGFfXyxjLG4pLGQ9cC5sZW5ndGgsZz1zW2NdPW5ldyBBcnJheShkKSxfPWFbY109bmV3IEFycmF5KGQpLHk9bFtjXT1uZXcgQXJyYXkoZik7cih1LGgsZyxfLHkscCx0KTtmb3IodmFyIHg9MCxiPTAsUyxDO3g8ZDsrK3gpaWYoUz1nW3hdKXtmb3IoeD49YiYmKGI9eCsxKTshKEM9X1tiXSkmJisrYjxkOyk7Uy5fbmV4dD1DfHxudWxsfX1yZXR1cm4gYT1uZXcgcGkoYSxuKSxhLl9lbnRlcj1zLGEuX2V4aXQ9bCxhfXZhciBKQXQsdDR0PU0oKCk9PntyZigpO2RaKCk7WkF0KCk7SkF0PSIkIn0pO2Z1bmN0aW9uIGU0dCgpe3JldHVybiBuZXcgcGkodGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChfTiksdGhpcy5fcGFyZW50cyl9dmFyIHI0dD1NKCgpPT57cFooKTtyZigpfSk7ZnVuY3Rpb24gbjR0KGUsdCxyKXt2YXIgbj10aGlzLmVudGVyKCksaT10aGlzLG89dGhpcy5leGl0KCk7cmV0dXJuIG49dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZShuKTpuLmFwcGVuZChlKyIiKSx0IT1udWxsJiYoaT10KGkpKSxyPT1udWxsP28ucmVtb3ZlKCk6cihvKSxuJiZpP24ubWVyZ2UoaSkub3JkZXIoKTppfXZhciBpNHQ9TSgoKT0+e30pO2Z1bmN0aW9uIG80dChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgcGkoYSx0aGlzLl9wYXJlbnRzKX12YXIgYTR0PU0oKCk9PntyZigpfSk7ZnVuY3Rpb24gczR0KCl7Zm9yKHZhciBlPXRoaXMuX2dyb3Vwcyx0PS0xLHI9ZS5sZW5ndGg7Kyt0PHI7KWZvcih2YXIgbj1lW3RdLGk9bi5sZW5ndGgtMSxvPW5baV0sYTstLWk+PTA7KShhPW5baV0pJiYobyYmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihvKV40JiZvLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsbyksbz1hKTtyZXR1cm4gdGhpc312YXIgbDR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBjNHQoZSl7ZXx8KGU9TUFlKTtmdW5jdGlvbiB0KGgsZil7cmV0dXJuIGgmJmY/ZShoLl9fZGF0YV9fLGYuX19kYXRhX18pOiFoLSFmfWZvcih2YXIgcj10aGlzLl9ncm91cHMsbj1yLmxlbmd0aCxpPW5ldyBBcnJheShuKSxvPTA7bzxuOysrbyl7Zm9yKHZhciBhPXJbb10scz1hLmxlbmd0aCxsPWlbb109bmV3IEFycmF5KHMpLGMsdT0wO3U8czsrK3UpKGM9YVt1XSkmJihsW3VdPWMpO2wuc29ydCh0KX1yZXR1cm4gbmV3IHBpKGksdGhpcy5fcGFyZW50cykub3JkZXIoKX1mdW5jdGlvbiBNQWUoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIHU0dD1NKCgpPT57cmYoKX0pO2Z1bmN0aW9uIGg0dCgpe3ZhciBlPWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsZS5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc312YXIgZjR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBwNHQoKXt2YXIgZT1uZXcgQXJyYXkodGhpcy5zaXplKCkpLHQ9LTE7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2VbKyt0XT10aGlzfSksZX12YXIgZDR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBtNHQoKXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHQ9MCxyPWUubGVuZ3RoO3Q8cjsrK3QpZm9yKHZhciBuPWVbdF0saT0wLG89bi5sZW5ndGg7aTxvOysraSl7dmFyIGE9bltpXTtpZihhKXJldHVybiBhfXJldHVybiBudWxsfXZhciBnNHQ9TSgoKT0+e30pO2Z1bmN0aW9uIF80dCgpe3ZhciBlPTA7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpeysrZX0pLGV9dmFyIHk0dD1NKCgpPT57fSk7ZnVuY3Rpb24gdjR0KCl7cmV0dXJuIXRoaXMubm9kZSgpfXZhciB4NHQ9TSgoKT0+e30pO2Z1bmN0aW9uIGI0dChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPXRbcl0sbz0wLGE9aS5sZW5ndGgscztvPGE7KytvKShzPWlbb10pJiZlLmNhbGwocyxzLl9fZGF0YV9fLG8saSk7cmV0dXJuIHRoaXN9dmFyIHc0dD1NKCgpPT57fSk7ZnVuY3Rpb24gRUFlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBUQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBDQWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShlLHQpfX1mdW5jdGlvbiBBQWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCx0KX19ZnVuY3Rpb24gUEFlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD90aGlzLnJlbW92ZUF0dHJpYnV0ZShlKTp0aGlzLnNldEF0dHJpYnV0ZShlLHIpfX1mdW5jdGlvbiBJQWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCxyKX19ZnVuY3Rpb24gUzR0KGUsdCl7dmFyIHI9ZE4oZSk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgbj10aGlzLm5vZGUoKTtyZXR1cm4gci5sb2NhbD9uLmdldEF0dHJpYnV0ZU5TKHIuc3BhY2Usci5sb2NhbCk6bi5nZXRBdHRyaWJ1dGUocil9cmV0dXJuIHRoaXMuZWFjaCgodD09bnVsbD9yLmxvY2FsP1RBZTpFQWU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/ci5sb2NhbD9JQWU6UEFlOnIubG9jYWw/QUFlOkNBZSkocix0KSl9dmFyIE00dD1NKCgpPT57dVooKX0pO2Z1bmN0aW9uIHlOKGUpe3JldHVybiBlLm93bmVyRG9jdW1lbnQmJmUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8ZS5kb2N1bWVudCYmZXx8ZS5kZWZhdWx0Vmlld312YXIgbVo9TSgoKT0+e30pO2Z1bmN0aW9uIExBZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpfX1mdW5jdGlvbiBrQWUoZSx0LHIpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSx0LHIpfX1mdW5jdGlvbiBSQWUoZSx0LHIpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO249PW51bGw/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUsbixyKX19ZnVuY3Rpb24gRTR0KGUsdCxyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD9MQWU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/UkFlOmtBZSkoZSx0LHI9PW51bGw/IiI6cikpOk5BZSh0aGlzLm5vZGUoKSxlKX1mdW5jdGlvbiBOQWUoZSx0KXtyZXR1cm4gZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHQpfHx5TihlKS5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX12YXIgVDR0PU0oKCk9PnttWigpfSk7ZnVuY3Rpb24gREFlKGUpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW2VdfX1mdW5jdGlvbiBPQWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW2VdPXR9fWZ1bmN0aW9uIHpBZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/ZGVsZXRlIHRoaXNbZV06dGhpc1tlXT1yfX1mdW5jdGlvbiBDNHQoZSx0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD9EQWU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/ekFlOk9BZSkoZSx0KSk6dGhpcy5ub2RlKClbZV19dmFyIEE0dD1NKCgpPT57fSk7ZnVuY3Rpb24gUDR0KGUpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBnWihlKXtyZXR1cm4gZS5jbGFzc0xpc3R8fG5ldyBJNHQoZSl9ZnVuY3Rpb24gSTR0KGUpe3RoaXMuX25vZGU9ZSx0aGlzLl9uYW1lcz1QNHQoZS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiBMNHQoZSx0KXtmb3IodmFyIHI9Z1ooZSksbj0tMSxpPXQubGVuZ3RoOysrbjxpOylyLmFkZCh0W25dKX1mdW5jdGlvbiBrNHQoZSx0KXtmb3IodmFyIHI9Z1ooZSksbj0tMSxpPXQubGVuZ3RoOysrbjxpOylyLnJlbW92ZSh0W25dKX1mdW5jdGlvbiBGQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7TDR0KHRoaXMsZSl9fWZ1bmN0aW9uIEJBZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtrNHQodGhpcyxlKX19ZnVuY3Rpb24gSEFlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7KHQuYXBwbHkodGhpcyxhcmd1bWVudHMpP0w0dDprNHQpKHRoaXMsZSl9fWZ1bmN0aW9uIFI0dChlLHQpe3ZhciByPVA0dChlKyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgbj1nWih0aGlzLm5vZGUoKSksaT0tMSxvPXIubGVuZ3RoOysraTxvOylpZighbi5jb250YWlucyhyW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9IQWU6dD9GQWU6QkFlKShyLHQpKX12YXIgTjR0PU0oKCk9PntJNHQucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihlKTt0PDAmJih0aGlzLl9uYW1lcy5wdXNoKGUpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UodCwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihlKT49MH19fSk7ZnVuY3Rpb24gVkFlKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBVQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1lfX1mdW5jdGlvbiBxQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIEQ0dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD9WQWU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP3FBZTpVQWUpKGUpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH12YXIgTzR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBHQWUoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBXQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9ZX19ZnVuY3Rpb24gWUFlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gejR0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsP0dBZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/WUFlOldBZSkoZSkpOnRoaXMubm9kZSgpLmlubmVySFRNTH12YXIgRjR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBqQWUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gQjR0KCl7cmV0dXJuIHRoaXMuZWFjaChqQWUpfXZhciBINHQ9TSgoKT0+e30pO2Z1bmN0aW9uIFhBZSgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIFY0dCgpe3JldHVybiB0aGlzLmVhY2goWEFlKX12YXIgVTR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBxNHQoZSl7dmFyIHQ9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTptTihlKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX12YXIgRzR0PU0oKCk9PntoWigpfSk7ZnVuY3Rpb24gJEFlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gVzR0KGUsdCl7dmFyIHI9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTptTihlKSxuPXQ9PW51bGw/JEFlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6Z04odCk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKHIuYXBwbHkodGhpcyxhcmd1bWVudHMpLG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfXZhciBZNHQ9TSgoKT0+e2haKCk7ZlooKX0pO2Z1bmN0aW9uIEtBZSgpe3ZhciBlPXRoaXMucGFyZW50Tm9kZTtlJiZlLnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIGo0dCgpe3JldHVybiB0aGlzLmVhY2goS0FlKX12YXIgWDR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBaQWUoKXt2YXIgZT10aGlzLmNsb25lTm9kZSghMSksdD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIHQ/dC5pbnNlcnRCZWZvcmUoZSx0aGlzLm5leHRTaWJsaW5nKTplfWZ1bmN0aW9uIEpBZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCEwKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24gJDR0KGUpe3JldHVybiB0aGlzLnNlbGVjdChlP0pBZTpaQWUpfXZhciBLNHQ9TSgoKT0+e30pO2Z1bmN0aW9uIFo0dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsZSk6dGhpcy5ub2RlKCkuX19kYXRhX199dmFyIEo0dD1NKCgpPT57fSk7ZnVuY3Rpb24gUUFlKGUsdCxyKXtyZXR1cm4gZT1lUHQoZSx0LHIpLGZ1bmN0aW9uKG4pe3ZhciBpPW4ucmVsYXRlZFRhcmdldDsoIWl8fGkhPT10aGlzJiYhKGkuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykmOCkpJiZlLmNhbGwodGhpcyxuKX19ZnVuY3Rpb24gZVB0KGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9c247c249bjt0cnl7ZS5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyx0LHIpfWZpbmFsbHl7c249aX19fWZ1bmN0aW9uIHQ0ZShlKXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciByPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihyPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOnJ9fSl9ZnVuY3Rpb24gZTRlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMuX19vbjtpZighIXQpe2Zvcih2YXIgcj0wLG49LTEsaT10Lmxlbmd0aCxvO3I8aTsrK3Ipbz10W3JdLCghZS50eXBlfHxvLnR5cGU9PT1lLnR5cGUpJiZvLm5hbWU9PT1lLm5hbWU/dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG8udHlwZSxvLmxpc3RlbmVyLG8uY2FwdHVyZSk6dFsrK25dPW87KytuP3QubGVuZ3RoPW46ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIHI0ZShlLHQscil7dmFyIG49dFB0Lmhhc093blByb3BlcnR5KGUudHlwZSk/UUFlOmVQdDtyZXR1cm4gZnVuY3Rpb24oaSxvLGEpe3ZhciBzPXRoaXMuX19vbixsLGM9bih0LG8sYSk7aWYocyl7Zm9yKHZhciB1PTAsaD1zLmxlbmd0aDt1PGg7Kyt1KWlmKChsPXNbdV0pLnR5cGU9PT1lLnR5cGUmJmwubmFtZT09PWUubmFtZSl7dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyLGwuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyPWMsbC5jYXB0dXJlPXIpLGwudmFsdWU9dDtyZXR1cm59fXRoaXMuYWRkRXZlbnRMaXN0ZW5lcihlLnR5cGUsYyxyKSxsPXt0eXBlOmUudHlwZSxuYW1lOmUubmFtZSx2YWx1ZTp0LGxpc3RlbmVyOmMsY2FwdHVyZTpyfSxzP3MucHVzaChsKTp0aGlzLl9fb249W2xdfX1mdW5jdGlvbiByUHQoZSx0LHIpe3ZhciBuPXQ0ZShlKyIiKSxpLG89bi5sZW5ndGgsYTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBzPXRoaXMubm9kZSgpLl9fb247aWYocyl7Zm9yKHZhciBsPTAsYz1zLmxlbmd0aCx1O2w8YzsrK2wpZm9yKGk9MCx1PXNbbF07aTxvOysraSlpZigoYT1uW2ldKS50eXBlPT09dS50eXBlJiZhLm5hbWU9PT11Lm5hbWUpcmV0dXJuIHUudmFsdWV9cmV0dXJufWZvcihzPXQ/cjRlOmU0ZSxyPT1udWxsJiYocj0hMSksaT0wO2k8bzsrK2kpdGhpcy5lYWNoKHMobltpXSx0LHIpKTtyZXR1cm4gdGhpc31mdW5jdGlvbiB2TihlLHQscixuKXt2YXIgaT1zbjtlLnNvdXJjZUV2ZW50PXNuLHNuPWU7dHJ5e3JldHVybiB0LmFwcGx5KHIsbil9ZmluYWxseXtzbj1pfX12YXIgdFB0LHNuLFE0dCx4Tj1NKCgpPT57dFB0PXt9LHNuPW51bGw7dHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmKFE0dD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIm9ubW91c2VlbnRlciJpbiBRNHR8fCh0UHQ9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpfSk7ZnVuY3Rpb24gblB0KGUsdCxyKXt2YXIgbj15TihlKSxpPW4uQ3VzdG9tRXZlbnQ7dHlwZW9mIGk9PSJmdW5jdGlvbiI/aT1uZXcgaSh0LHIpOihpPW4uZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iikscj8oaS5pbml0RXZlbnQodCxyLmJ1YmJsZXMsci5jYW5jZWxhYmxlKSxpLmRldGFpbD1yLmRldGFpbCk6aS5pbml0RXZlbnQodCwhMSwhMSkpLGUuZGlzcGF0Y2hFdmVudChpKX1mdW5jdGlvbiBuNGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gblB0KHRoaXMsZSx0KX19ZnVuY3Rpb24gaTRlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5QdCh0aGlzLGUsdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBpUHQoZSx0KXtyZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9pNGU6bjRlKShlLHQpKX12YXIgb1B0PU0oKCk9PnttWigpfSk7ZnVuY3Rpb24gcGkoZSx0KXt0aGlzLl9ncm91cHM9ZSx0aGlzLl9wYXJlbnRzPXR9ZnVuY3Rpb24gbzRlKCl7cmV0dXJuIG5ldyBwaShbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLF9aKX12YXIgX1oscmY9TSgoKT0+e0hBdCgpO0dBdCgpO1hBdCgpO3Q0dCgpO2RaKCk7cjR0KCk7aTR0KCk7YTR0KCk7bDR0KCk7dTR0KCk7ZjR0KCk7ZDR0KCk7ZzR0KCk7eTR0KCk7eDR0KCk7dzR0KCk7TTR0KCk7VDR0KCk7QTR0KCk7TjR0KCk7TzR0KCk7RjR0KCk7SDR0KCk7VTR0KCk7RzR0KCk7WTR0KCk7WDR0KCk7SzR0KCk7SjR0KCk7eE4oKTtvUHQoKTtfWj1bbnVsbF07cGkucHJvdG90eXBlPW80ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnBpLHNlbGVjdDpCQXQsc2VsZWN0QWxsOnFBdCxmaWx0ZXI6akF0LGRhdGE6UUF0LGVudGVyOiRBdCxleGl0OmU0dCxqb2luOm40dCxtZXJnZTpvNHQsb3JkZXI6czR0LHNvcnQ6YzR0LGNhbGw6aDR0LG5vZGVzOnA0dCxub2RlOm00dCxzaXplOl80dCxlbXB0eTp2NHQsZWFjaDpiNHQsYXR0cjpTNHQsc3R5bGU6RTR0LHByb3BlcnR5OkM0dCxjbGFzc2VkOlI0dCx0ZXh0OkQ0dCxodG1sOno0dCxyYWlzZTpCNHQsbG93ZXI6VjR0LGFwcGVuZDpxNHQsaW5zZXJ0Olc0dCxyZW1vdmU6ajR0LGNsb25lOiQ0dCxkYXR1bTpaNHQsb246clB0LGRpc3BhdGNoOmlQdH19KTtmdW5jdGlvbiBUeShlKXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciP25ldyBwaShbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IHBpKFtbZV1dLF9aKX12YXIgYVB0PU0oKCk9PntyZigpfSk7ZnVuY3Rpb24gYk4oKXtmb3IodmFyIGU9c24sdDt0PWUuc291cmNlRXZlbnQ7KWU9dDtyZXR1cm4gZX12YXIgeVo9TSgoKT0+e3hOKCl9KTtmdW5jdGlvbiB3TihlLHQpe3ZhciByPWUub3duZXJTVkdFbGVtZW50fHxlO2lmKHIuY3JlYXRlU1ZHUG9pbnQpe3ZhciBuPXIuY3JlYXRlU1ZHUG9pbnQoKTtyZXR1cm4gbi54PXQuY2xpZW50WCxuLnk9dC5jbGllbnRZLG49bi5tYXRyaXhUcmFuc2Zvcm0oZS5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpLFtuLngsbi55XX12YXIgaT1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVyblt0LmNsaWVudFgtaS5sZWZ0LWUuY2xpZW50TGVmdCx0LmNsaWVudFktaS50b3AtZS5jbGllbnRUb3BdfXZhciB2Wj1NKCgpPT57fSk7ZnVuY3Rpb24geFooZSl7dmFyIHQ9Yk4oKTtyZXR1cm4gdC5jaGFuZ2VkVG91Y2hlcyYmKHQ9dC5jaGFuZ2VkVG91Y2hlc1swXSksd04oZSx0KX12YXIgc1B0PU0oKCk9Pnt5WigpO3ZaKCl9KTtmdW5jdGlvbiBiWihlLHQscil7YXJndW1lbnRzLmxlbmd0aDwzJiYocj10LHQ9Yk4oKS5jaGFuZ2VkVG91Y2hlcyk7Zm9yKHZhciBuPTAsaT10P3QubGVuZ3RoOjAsbztuPGk7KytuKWlmKChvPXRbbl0pLmlkZW50aWZpZXI9PT1yKXJldHVybiB3TihlLG8pO3JldHVybiBudWxsfXZhciBsUHQ9TSgoKT0+e3laKCk7dlooKX0pO3ZhciBTTj1NKCgpPT57c1B0KCk7YVB0KCk7bFB0KCk7eE4oKX0pO2Z1bmN0aW9uIE1OKCl7c24uc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gcGcoKXtzbi5wcmV2ZW50RGVmYXVsdCgpLHNuLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciB3Wj1NKCgpPT57U04oKX0pO2Z1bmN0aW9uIEVOKGUpe3ZhciB0PWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHI9VHkoZSkub24oImRyYWdzdGFydC5kcmFnIixwZywhMCk7Im9uc2VsZWN0c3RhcnQiaW4gdD9yLm9uKCJzZWxlY3RzdGFydC5kcmFnIixwZywhMCk6KHQuX19ub3NlbGVjdD10LnN0eWxlLk1velVzZXJTZWxlY3QsdC5zdHlsZS5Nb3pVc2VyU2VsZWN0PSJub25lIil9ZnVuY3Rpb24gVE4oZSx0KXt2YXIgcj1lLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxuPVR5KGUpLm9uKCJkcmFnc3RhcnQuZHJhZyIsbnVsbCk7dCYmKG4ub24oImNsaWNrLmRyYWciLHBnLCEwKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bi5vbigiY2xpY2suZHJhZyIsbnVsbCl9LDApKSwib25zZWxlY3RzdGFydCJpbiByP24ub24oInNlbGVjdHN0YXJ0LmRyYWciLG51bGwpOihyLnN0eWxlLk1velVzZXJTZWxlY3Q9ci5fX25vc2VsZWN0LGRlbGV0ZSByLl9fbm9zZWxlY3QpfXZhciBTWj1NKCgpPT57U04oKTt3WigpfSk7ZnVuY3Rpb24gdlQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBjUHQ9TSgoKT0+e30pO2Z1bmN0aW9uIHhUKGUsdCxyLG4saSxvLGEscyxsLGMpe3RoaXMudGFyZ2V0PWUsdGhpcy50eXBlPXQsdGhpcy5zdWJqZWN0PXIsdGhpcy5pZGVudGlmaWVyPW4sdGhpcy5hY3RpdmU9aSx0aGlzLng9byx0aGlzLnk9YSx0aGlzLmR4PXMsdGhpcy5keT1sLHRoaXMuXz1jfXZhciB1UHQ9TSgoKT0+e3hULnByb3RvdHlwZS5vbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuXy5vbi5hcHBseSh0aGlzLl8sYXJndW1lbnRzKTtyZXR1cm4gZT09PXRoaXMuXz90aGlzOmV9fSk7ZnVuY3Rpb24gYTRlKCl7cmV0dXJuIXNuLmJ1dHRvbn1mdW5jdGlvbiBzNGUoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlfWZ1bmN0aW9uIGw0ZShlKXtyZXR1cm4gZT09bnVsbD97eDpzbi54LHk6c24ueX06ZX1mdW5jdGlvbiBjNGUoKXtyZXR1cm4ib250b3VjaHN0YXJ0ImluIHRoaXN9ZnVuY3Rpb24gaFB0KCl7dmFyIGU9YTRlLHQ9czRlLHI9bDRlLG49YzRlLGk9e30sbz1zWigic3RhcnQiLCJkcmFnIiwiZW5kIiksYT0wLHMsbCxjLHUsaD0wO2Z1bmN0aW9uIGYoUyl7Uy5vbigibW91c2Vkb3duLmRyYWciLHApLmZpbHRlcihuKS5vbigidG91Y2hzdGFydC5kcmFnIixfKS5vbigidG91Y2htb3ZlLmRyYWciLHkpLm9uKCJ0b3VjaGVuZC5kcmFnIHRvdWNoY2FuY2VsLmRyYWciLHgpLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiBwKCl7aWYoISh1fHwhZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpKXt2YXIgUz1iKCJtb3VzZSIsdC5hcHBseSh0aGlzLGFyZ3VtZW50cykseFosdGhpcyxhcmd1bWVudHMpOyFTfHwoVHkoc24udmlldykub24oIm1vdXNlbW92ZS5kcmFnIixkLCEwKS5vbigibW91c2V1cC5kcmFnIixnLCEwKSxFTihzbi52aWV3KSxNTigpLGM9ITEscz1zbi5jbGllbnRYLGw9c24uY2xpZW50WSxTKCJzdGFydCIpKX19ZnVuY3Rpb24gZCgpe2lmKHBnKCksIWMpe3ZhciBTPXNuLmNsaWVudFgtcyxDPXNuLmNsaWVudFktbDtjPVMqUytDKkM+aH1pLm1vdXNlKCJkcmFnIil9ZnVuY3Rpb24gZygpe1R5KHNuLnZpZXcpLm9uKCJtb3VzZW1vdmUuZHJhZyBtb3VzZXVwLmRyYWciLG51bGwpLFROKHNuLnZpZXcsYykscGcoKSxpLm1vdXNlKCJlbmQiKX1mdW5jdGlvbiBfKCl7aWYoISFlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIFM9c24uY2hhbmdlZFRvdWNoZXMsQz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxQPVMubGVuZ3RoLGssTztmb3Ioaz0wO2s8UDsrK2spKE89YihTW2tdLmlkZW50aWZpZXIsQyxiWix0aGlzLGFyZ3VtZW50cykpJiYoTU4oKSxPKCJzdGFydCIpKX19ZnVuY3Rpb24geSgpe3ZhciBTPXNuLmNoYW5nZWRUb3VjaGVzLEM9Uy5sZW5ndGgsUCxrO2ZvcihQPTA7UDxDOysrUCkoaz1pW1NbUF0uaWRlbnRpZmllcl0pJiYocGcoKSxrKCJkcmFnIikpfWZ1bmN0aW9uIHgoKXt2YXIgUz1zbi5jaGFuZ2VkVG91Y2hlcyxDPVMubGVuZ3RoLFAsaztmb3IodSYmY2xlYXJUaW1lb3V0KHUpLHU9c2V0VGltZW91dChmdW5jdGlvbigpe3U9bnVsbH0sNTAwKSxQPTA7UDxDOysrUCkoaz1pW1NbUF0uaWRlbnRpZmllcl0pJiYoTU4oKSxrKCJlbmQiKSl9ZnVuY3Rpb24gYihTLEMsUCxrLE8pe3ZhciBEPVAoQyxTKSxCLEksTCxSPW8uY29weSgpO2lmKCEhdk4obmV3IHhUKGYsImJlZm9yZXN0YXJ0IixCLFMsYSxEWzBdLERbMV0sMCwwLFIpLGZ1bmN0aW9uKCl7cmV0dXJuKHNuLnN1YmplY3Q9Qj1yLmFwcGx5KGssTykpPT1udWxsPyExOihJPUIueC1EWzBdfHwwLEw9Qi55LURbMV18fDAsITApfSkpcmV0dXJuIGZ1bmN0aW9uIEYoeil7dmFyIFU9RCxXO3N3aXRjaCh6KXtjYXNlInN0YXJ0IjppW1NdPUYsVz1hKys7YnJlYWs7Y2FzZSJlbmQiOmRlbGV0ZSBpW1NdLC0tYTtjYXNlImRyYWciOkQ9UChDLFMpLFc9YTticmVha312TihuZXcgeFQoZix6LEIsUyxXLERbMF0rSSxEWzFdK0wsRFswXS1VWzBdLERbMV0tVVsxXSxSKSxSLmFwcGx5LFIsW3osayxPXSl9fXJldHVybiBmLmZpbHRlcj1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgUz09ImZ1bmN0aW9uIj9TOnZUKCEhUyksZik6ZX0sZi5jb250YWluZXI9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIFM9PSJmdW5jdGlvbiI/Uzp2VChTKSxmKTp0fSxmLnN1YmplY3Q9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIFM9PSJmdW5jdGlvbiI/Uzp2VChTKSxmKTpyfSxmLnRvdWNoYWJsZT1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2YgUz09ImZ1bmN0aW9uIj9TOnZUKCEhUyksZik6bn0sZi5vbj1mdW5jdGlvbigpe3ZhciBTPW8ub24uYXBwbHkobyxhcmd1bWVudHMpO3JldHVybiBTPT09bz9mOlN9LGYuY2xpY2tEaXN0YW5jZT1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0oUz0rUykqUyxmKTpNYXRoLnNxcnQoaCl9LGZ9dmFyIGZQdD1NKCgpPT57RkF0KCk7U04oKTtTWigpO3daKCk7Y1B0KCk7dVB0KCl9KTt2YXIgcFB0PU0oKCk9PntmUHQoKTtTWigpfSk7ZnVuY3Rpb24gbVB0KGUpe3JldHVybiBuZXcgRnVuY3Rpb24oImQiLCJyZXR1cm4geyIrZS5tYXAoZnVuY3Rpb24odCxyKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCkrIjogZFsiK3IrIl0ifSkuam9pbigiLCIpKyJ9Iil9ZnVuY3Rpb24gdTRlKGUsdCl7dmFyIHI9bVB0KGUpO3JldHVybiBmdW5jdGlvbihuLGkpe3JldHVybiB0KHIobiksaSxlKX19ZnVuY3Rpb24gaDRlKGUpe3ZhciB0PU9iamVjdC5jcmVhdGUobnVsbCkscj1bXTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2Zvcih2YXIgaSBpbiBuKWkgaW4gdHx8ci5wdXNoKHRbaV09aSl9KSxyfWZ1bmN0aW9uIHcyKGUpe3ZhciB0PW5ldyBSZWdFeHAoJ1siJytlK2AKXHJdYCkscj1lLmNoYXJDb2RlQXQoMCk7ZnVuY3Rpb24gbihjLHUpe3ZhciBoLGYscD1pKGMsZnVuY3Rpb24oZCxnKXtpZihoKXJldHVybiBoKGQsZy0xKTtmPWQsaD11P3U0ZShkLHUpOm1QdChkKX0pO3JldHVybiBwLmNvbHVtbnM9Znx8W10scH1mdW5jdGlvbiBpKGMsdSl7dmFyIGg9W10sZj1jLmxlbmd0aCxwPTAsZD0wLGcsXz1mPD0wLHk9ITE7Yy5jaGFyQ29kZUF0KGYtMSk9PT1iVCYmLS1mLGMuY2hhckNvZGVBdChmLTEpPT09VFomJi0tZjtmdW5jdGlvbiB4KCl7aWYoXylyZXR1cm4gTVo7aWYoeSlyZXR1cm4geT0hMSxkUHQ7dmFyIFMsQz1wLFA7aWYoYy5jaGFyQ29kZUF0KEMpPT09RVope2Zvcig7cCsrPGYmJmMuY2hhckNvZGVBdChwKSE9PUVafHxjLmNoYXJDb2RlQXQoKytwKT09PUVaOyk7cmV0dXJuKFM9cCk+PWY/Xz0hMDooUD1jLmNoYXJDb2RlQXQocCsrKSk9PT1iVD95PSEwOlA9PT1UWiYmKHk9ITAsYy5jaGFyQ29kZUF0KHApPT09YlQmJisrcCksYy5zbGljZShDKzEsUy0xKS5yZXBsYWNlKC8iIi9nLCciJyl9Zm9yKDtwPGY7KXtpZigoUD1jLmNoYXJDb2RlQXQoUz1wKyspKT09PWJUKXk9ITA7ZWxzZSBpZihQPT09VFopeT0hMCxjLmNoYXJDb2RlQXQocCk9PT1iVCYmKytwO2Vsc2UgaWYoUCE9PXIpY29udGludWU7cmV0dXJuIGMuc2xpY2UoQyxTKX1yZXR1cm4gXz0hMCxjLnNsaWNlKEMsZil9Zm9yKDsoZz14KCkpIT09TVo7KXtmb3IodmFyIGI9W107ZyE9PWRQdCYmZyE9PU1aOyliLnB1c2goZyksZz14KCk7dSYmKGI9dShiLGQrKykpPT1udWxsfHxoLnB1c2goYil9cmV0dXJuIGh9ZnVuY3Rpb24gbyhjLHUpe3JldHVybiB1PT1udWxsJiYodT1oNGUoYykpLFt1Lm1hcChsKS5qb2luKGUpXS5jb25jYXQoYy5tYXAoZnVuY3Rpb24oaCl7cmV0dXJuIHUubWFwKGZ1bmN0aW9uKGYpe3JldHVybiBsKGhbZl0pfSkuam9pbihlKX0pKS5qb2luKGAKYCl9ZnVuY3Rpb24gYShjKXtyZXR1cm4gYy5tYXAocykuam9pbihgCmApfWZ1bmN0aW9uIHMoYyl7cmV0dXJuIGMubWFwKGwpLmpvaW4oZSl9ZnVuY3Rpb24gbChjKXtyZXR1cm4gYz09bnVsbD8iIjp0LnRlc3QoYys9IiIpPyciJytjLnJlcGxhY2UoLyIvZywnIiInKSsnIic6Y31yZXR1cm57cGFyc2U6bixwYXJzZVJvd3M6aSxmb3JtYXQ6byxmb3JtYXRSb3dzOmF9fXZhciBkUHQsTVosRVosYlQsVFosQ049TSgoKT0+e2RQdD17fSxNWj17fSxFWj0zNCxiVD0xMCxUWj0xM30pO3ZhciBBTixnUHQsX1B0LHlQdCx2UHQseFB0PU0oKCk9PntDTigpO0FOPXcyKCIsIiksZ1B0PUFOLnBhcnNlLF9QdD1BTi5wYXJzZVJvd3MseVB0PUFOLmZvcm1hdCx2UHQ9QU4uZm9ybWF0Um93c30pO3ZhciBQTixiUHQsd1B0LFNQdCxNUHQsRVB0PU0oKCk9PntDTigpO1BOPXcyKCIJIiksYlB0PVBOLnBhcnNlLHdQdD1QTi5wYXJzZVJvd3MsU1B0PVBOLmZvcm1hdCxNUHQ9UE4uZm9ybWF0Um93c30pO3ZhciBUUHQ9TSgoKT0+e0NOKCk7eFB0KCk7RVB0KCl9KTtmdW5jdGlvbiBDUHQoZSl7cmV0dXJuK2V9dmFyIEFQdD1NKCgpPT57fSk7ZnVuY3Rpb24gUFB0KGUpe3JldHVybiBlKmV9ZnVuY3Rpb24gSVB0KGUpe3JldHVybiBlKigyLWUpfWZ1bmN0aW9uIENaKGUpe3JldHVybigoZSo9Mik8PTE/ZSplOi0tZSooMi1lKSsxKS8yfXZhciBMUHQ9TSgoKT0+e30pO2Z1bmN0aW9uIGtQdChlKXtyZXR1cm4gZSplKmV9ZnVuY3Rpb24gUlB0KGUpe3JldHVybi0tZSplKmUrMX1mdW5jdGlvbiBBWihlKXtyZXR1cm4oKGUqPTIpPD0xP2UqZSplOihlLT0yKSplKmUrMikvMn12YXIgTlB0PU0oKCk9Pnt9KTt2YXIgUFosRFB0LE9QdCxJWix6UHQ9TSgoKT0+e1BaPTMsRFB0PWZ1bmN0aW9uIGUodCl7dD0rdDtmdW5jdGlvbiByKG4pe3JldHVybiBNYXRoLnBvdyhuLHQpfXJldHVybiByLmV4cG9uZW50PWUscn0oUFopLE9QdD1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4gMS1NYXRoLnBvdygxLW4sdCl9cmV0dXJuIHIuZXhwb25lbnQ9ZSxyfShQWiksSVo9ZnVuY3Rpb24gZSh0KXt0PSt0O2Z1bmN0aW9uIHIobil7cmV0dXJuKChuKj0yKTw9MT9NYXRoLnBvdyhuLHQpOjItTWF0aC5wb3coMi1uLHQpKS8yfXJldHVybiByLmV4cG9uZW50PWUscn0oUFopfSk7ZnVuY3Rpb24gSFB0KGUpe3JldHVybiAxLU1hdGguY29zKGUqQlB0KX1mdW5jdGlvbiBWUHQoZSl7cmV0dXJuIE1hdGguc2luKGUqQlB0KX1mdW5jdGlvbiBMWihlKXtyZXR1cm4oMS1NYXRoLmNvcyhGUHQqZSkpLzJ9dmFyIEZQdCxCUHQsVVB0PU0oKCk9PntGUHQ9TWF0aC5QSSxCUHQ9RlB0LzJ9KTtmdW5jdGlvbiBxUHQoZSl7cmV0dXJuIE1hdGgucG93KDIsMTAqZS0xMCl9ZnVuY3Rpb24gR1B0KGUpe3JldHVybiAxLU1hdGgucG93KDIsLTEwKmUpfWZ1bmN0aW9uIGtaKGUpe3JldHVybigoZSo9Mik8PTE/TWF0aC5wb3coMiwxMCplLTEwKToyLU1hdGgucG93KDIsMTAtMTAqZSkpLzJ9dmFyIFdQdD1NKCgpPT57fSk7ZnVuY3Rpb24gWVB0KGUpe3JldHVybiAxLU1hdGguc3FydCgxLWUqZSl9ZnVuY3Rpb24galB0KGUpe3JldHVybiBNYXRoLnNxcnQoMS0gLS1lKmUpfWZ1bmN0aW9uIFJaKGUpe3JldHVybigoZSo9Mik8PTE/MS1NYXRoLnNxcnQoMS1lKmUpOk1hdGguc3FydCgxLShlLT0yKSplKSsxKS8yfXZhciBYUHQ9TSgoKT0+e30pO2Z1bmN0aW9uICRQdChlKXtyZXR1cm4gMS1TMigxLWUpfWZ1bmN0aW9uIFMyKGUpe3JldHVybihlPStlKTxOWj9JTiplKmU6ZTxwNGU/SU4qKGUtPWY0ZSkqZStkNGU6ZTxnNGU/SU4qKGUtPW00ZSkqZStfNGU6SU4qKGUtPXk0ZSkqZSt2NGV9ZnVuY3Rpb24gS1B0KGUpe3JldHVybigoZSo9Mik8PTE/MS1TMigxLWUpOlMyKGUtMSkrMSkvMn12YXIgTlosZjRlLHA0ZSxkNGUsbTRlLGc0ZSxfNGUseTRlLHY0ZSxJTixaUHQ9TSgoKT0+e05aPS4zNjM2MzYzNjM2MzYzNjM2NSxmNGU9Ni8xMSxwNGU9OC8xMSxkNGU9My80LG00ZT05LzExLGc0ZT0xMC8xMSxfNGU9MTUvMTYseTRlPTIxLzIyLHY0ZT02My82NCxJTj0xL05aL05afSk7dmFyIERaLEpQdCxRUHQsT1osdDZ0PU0oKCk9PntEWj0xLjcwMTU4LEpQdD1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4gbipuKigodCsxKSpuLXQpfXJldHVybiByLm92ZXJzaG9vdD1lLHJ9KERaKSxRUHQ9ZnVuY3Rpb24gZSh0KXt0PSt0O2Z1bmN0aW9uIHIobil7cmV0dXJuLS1uKm4qKCh0KzEpKm4rdCkrMX1yZXR1cm4gci5vdmVyc2hvb3Q9ZSxyfShEWiksT1o9ZnVuY3Rpb24gZSh0KXt0PSt0O2Z1bmN0aW9uIHIobil7cmV0dXJuKChuKj0yKTwxP24qbiooKHQrMSkqbi10KToobi09MikqbiooKHQrMSkqbit0KSsyKS8yfXJldHVybiByLm92ZXJzaG9vdD1lLHJ9KERaKX0pO3ZhciBNMix6WixGWixlNnQsQloscjZ0LG42dD1NKCgpPT57TTI9MipNYXRoLlBJLHpaPTEsRlo9LjMsZTZ0PWZ1bmN0aW9uIGUodCxyKXt2YXIgbj1NYXRoLmFzaW4oMS8odD1NYXRoLm1heCgxLHQpKSkqKHIvPU0yKTtmdW5jdGlvbiBpKG8pe3JldHVybiB0Kk1hdGgucG93KDIsMTAqLS1vKSpNYXRoLnNpbigobi1vKS9yKX1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obyl7cmV0dXJuIGUobyxyKk0yKX0saS5wZXJpb2Q9ZnVuY3Rpb24obyl7cmV0dXJuIGUodCxvKX0saX0oelosRlopLEJaPWZ1bmN0aW9uIGUodCxyKXt2YXIgbj1NYXRoLmFzaW4oMS8odD1NYXRoLm1heCgxLHQpKSkqKHIvPU0yKTtmdW5jdGlvbiBpKG8pe3JldHVybiAxLXQqTWF0aC5wb3coMiwtMTAqKG89K28pKSpNYXRoLnNpbigobytuKS9yKX1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obyl7cmV0dXJuIGUobyxyKk0yKX0saS5wZXJpb2Q9ZnVuY3Rpb24obyl7cmV0dXJuIGUodCxvKX0saX0oelosRlopLHI2dD1mdW5jdGlvbiBlKHQscil7dmFyIG49TWF0aC5hc2luKDEvKHQ9TWF0aC5tYXgoMSx0KSkpKihyLz1NMik7ZnVuY3Rpb24gaShvKXtyZXR1cm4oKG89byoyLTEpPDA/dCpNYXRoLnBvdygyLDEwKm8pKk1hdGguc2luKChuLW8pL3IpOjItdCpNYXRoLnBvdygyLC0xMCpvKSpNYXRoLnNpbigobitvKS9yKSkvMn1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obyl7cmV0dXJuIGUobyxyKk0yKX0saS5wZXJpb2Q9ZnVuY3Rpb24obyl7cmV0dXJuIGUodCxvKX0saX0oelosRlopfSk7dmFyIGk2dD1NKCgpPT57QVB0KCk7TFB0KCk7TlB0KCk7elB0KCk7VVB0KCk7V1B0KCk7WFB0KCk7WlB0KCk7dDZ0KCk7bjZ0KCl9KTtmdW5jdGlvbiBvNnQoZSx0KXt2YXIgcjtlPT1udWxsJiYoZT0wKSx0PT1udWxsJiYodD0wKTtmdW5jdGlvbiBuKCl7dmFyIGksbz1yLmxlbmd0aCxhLHM9MCxsPTA7Zm9yKGk9MDtpPG87KytpKWE9cltpXSxzKz1hLngsbCs9YS55O2ZvcihzPXMvby1lLGw9bC9vLXQsaT0wO2k8bzsrK2kpYT1yW2ldLGEueC09cyxhLnktPWx9cmV0dXJuIG4uaW5pdGlhbGl6ZT1mdW5jdGlvbihpKXtyPWl9LG4ueD1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0raSxuKTplfSxuLnk9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2ksbik6dH0sbn12YXIgYTZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBGbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIEN5PU0oKCk9Pnt9KTtmdW5jdGlvbiBNdSgpe3JldHVybihNYXRoLnJhbmRvbSgpLS41KSoxZS02fXZhciBMTj1NKCgpPT57fSk7ZnVuY3Rpb24gczZ0KGUpe3ZhciB0PSt0aGlzLl94LmNhbGwobnVsbCxlKSxyPSt0aGlzLl95LmNhbGwobnVsbCxlKTtyZXR1cm4gbDZ0KHRoaXMuY292ZXIodCxyKSx0LHIsZSl9ZnVuY3Rpb24gbDZ0KGUsdCxyLG4pe2lmKGlzTmFOKHQpfHxpc05hTihyKSlyZXR1cm4gZTt2YXIgaSxvPWUuX3Jvb3QsYT17ZGF0YTpufSxzPWUuX3gwLGw9ZS5feTAsYz1lLl94MSx1PWUuX3kxLGgsZixwLGQsZyxfLHkseDtpZighbylyZXR1cm4gZS5fcm9vdD1hLGU7Zm9yKDtvLmxlbmd0aDspaWYoKGc9dD49KGg9KHMrYykvMikpP3M9aDpjPWgsKF89cj49KGY9KGwrdSkvMikpP2w9Zjp1PWYsaT1vLCEobz1vW3k9Xzw8MXxnXSkpcmV0dXJuIGlbeV09YSxlO2lmKHA9K2UuX3guY2FsbChudWxsLG8uZGF0YSksZD0rZS5feS5jYWxsKG51bGwsby5kYXRhKSx0PT09cCYmcj09PWQpcmV0dXJuIGEubmV4dD1vLGk/aVt5XT1hOmUuX3Jvb3Q9YSxlO2RvIGk9aT9pW3ldPW5ldyBBcnJheSg0KTplLl9yb290PW5ldyBBcnJheSg0KSwoZz10Pj0oaD0ocytjKS8yKSk/cz1oOmM9aCwoXz1yPj0oZj0obCt1KS8yKSk/bD1mOnU9Zjt3aGlsZSgoeT1fPDwxfGcpPT09KHg9KGQ+PWYpPDwxfHA+PWgpKTtyZXR1cm4gaVt4XT1vLGlbeV09YSxlfWZ1bmN0aW9uIGM2dChlKXt2YXIgdCxyLG49ZS5sZW5ndGgsaSxvLGE9bmV3IEFycmF5KG4pLHM9bmV3IEFycmF5KG4pLGw9MS8wLGM9MS8wLHU9LTEvMCxoPS0xLzA7Zm9yKHI9MDtyPG47KytyKWlzTmFOKGk9K3RoaXMuX3guY2FsbChudWxsLHQ9ZVtyXSkpfHxpc05hTihvPSt0aGlzLl95LmNhbGwobnVsbCx0KSl8fChhW3JdPWksc1tyXT1vLGk8bCYmKGw9aSksaT51JiYodT1pKSxvPGMmJihjPW8pLG8+aCYmKGg9bykpO2lmKGw+dXx8Yz5oKXJldHVybiB0aGlzO2Zvcih0aGlzLmNvdmVyKGwsYykuY292ZXIodSxoKSxyPTA7cjxuOysrcilsNnQodGhpcyxhW3JdLHNbcl0sZVtyXSk7cmV0dXJuIHRoaXN9dmFyIHU2dD1NKCgpPT57fSk7ZnVuY3Rpb24gaDZ0KGUsdCl7aWYoaXNOYU4oZT0rZSl8fGlzTmFOKHQ9K3QpKXJldHVybiB0aGlzO3ZhciByPXRoaXMuX3gwLG49dGhpcy5feTAsaT10aGlzLl94MSxvPXRoaXMuX3kxO2lmKGlzTmFOKHIpKWk9KHI9TWF0aC5mbG9vcihlKSkrMSxvPShuPU1hdGguZmxvb3IodCkpKzE7ZWxzZXtmb3IodmFyIGE9aS1yLHM9dGhpcy5fcm9vdCxsLGM7cj5lfHxlPj1pfHxuPnR8fHQ+PW87KXN3aXRjaChjPSh0PG4pPDwxfGU8cixsPW5ldyBBcnJheSg0KSxsW2NdPXMscz1sLGEqPTIsYyl7Y2FzZSAwOmk9cithLG89bithO2JyZWFrO2Nhc2UgMTpyPWktYSxvPW4rYTticmVhaztjYXNlIDI6aT1yK2Esbj1vLWE7YnJlYWs7Y2FzZSAzOnI9aS1hLG49by1hO2JyZWFrfXRoaXMuX3Jvb3QmJnRoaXMuX3Jvb3QubGVuZ3RoJiYodGhpcy5fcm9vdD1zKX1yZXR1cm4gdGhpcy5feDA9cix0aGlzLl95MD1uLHRoaXMuX3gxPWksdGhpcy5feTE9byx0aGlzfXZhciBmNnQ9TSgoKT0+e30pO2Z1bmN0aW9uIHA2dCgpe3ZhciBlPVtdO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKHQpe2lmKCF0Lmxlbmd0aClkbyBlLnB1c2godC5kYXRhKTt3aGlsZSh0PXQubmV4dCl9KSxlfXZhciBkNnQ9TSgoKT0+e30pO2Z1bmN0aW9uIG02dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmNvdmVyKCtlWzBdWzBdLCtlWzBdWzFdKS5jb3ZlcigrZVsxXVswXSwrZVsxXVsxXSk6aXNOYU4odGhpcy5feDApP3ZvaWQgMDpbW3RoaXMuX3gwLHRoaXMuX3kwXSxbdGhpcy5feDEsdGhpcy5feTFdXX12YXIgZzZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBTbyhlLHQscixuLGkpe3RoaXMubm9kZT1lLHRoaXMueDA9dCx0aGlzLnkwPXIsdGhpcy54MT1uLHRoaXMueTE9aX12YXIga049TSgoKT0+e30pO2Z1bmN0aW9uIF82dChlLHQscil7dmFyIG4saT10aGlzLl94MCxvPXRoaXMuX3kwLGEscyxsLGMsdT10aGlzLl94MSxoPXRoaXMuX3kxLGY9W10scD10aGlzLl9yb290LGQsZztmb3IocCYmZi5wdXNoKG5ldyBTbyhwLGksbyx1LGgpKSxyPT1udWxsP3I9MS8wOihpPWUtcixvPXQtcix1PWUrcixoPXQrcixyKj1yKTtkPWYucG9wKCk7KWlmKCEoIShwPWQubm9kZSl8fChhPWQueDApPnV8fChzPWQueTApPmh8fChsPWQueDEpPGl8fChjPWQueTEpPG8pKWlmKHAubGVuZ3RoKXt2YXIgXz0oYStsKS8yLHk9KHMrYykvMjtmLnB1c2gobmV3IFNvKHBbM10sXyx5LGwsYyksbmV3IFNvKHBbMl0sYSx5LF8sYyksbmV3IFNvKHBbMV0sXyxzLGwseSksbmV3IFNvKHBbMF0sYSxzLF8seSkpLChnPSh0Pj15KTw8MXxlPj1fKSYmKGQ9ZltmLmxlbmd0aC0xXSxmW2YubGVuZ3RoLTFdPWZbZi5sZW5ndGgtMS1nXSxmW2YubGVuZ3RoLTEtZ109ZCl9ZWxzZXt2YXIgeD1lLSt0aGlzLl94LmNhbGwobnVsbCxwLmRhdGEpLGI9dC0rdGhpcy5feS5jYWxsKG51bGwscC5kYXRhKSxTPXgqeCtiKmI7aWYoUzxyKXt2YXIgQz1NYXRoLnNxcnQocj1TKTtpPWUtQyxvPXQtQyx1PWUrQyxoPXQrQyxuPXAuZGF0YX19cmV0dXJuIG59dmFyIHk2dD1NKCgpPT57a04oKX0pO2Z1bmN0aW9uIHY2dChlKXtpZihpc05hTih1PSt0aGlzLl94LmNhbGwobnVsbCxlKSl8fGlzTmFOKGg9K3RoaXMuX3kuY2FsbChudWxsLGUpKSlyZXR1cm4gdGhpczt2YXIgdCxyPXRoaXMuX3Jvb3QsbixpLG8sYT10aGlzLl94MCxzPXRoaXMuX3kwLGw9dGhpcy5feDEsYz10aGlzLl95MSx1LGgsZixwLGQsZyxfLHk7aWYoIXIpcmV0dXJuIHRoaXM7aWYoci5sZW5ndGgpZm9yKDs7KXtpZigoZD11Pj0oZj0oYStsKS8yKSk/YT1mOmw9ZiwoZz1oPj0ocD0ocytjKS8yKSk/cz1wOmM9cCx0PXIsIShyPXJbXz1nPDwxfGRdKSlyZXR1cm4gdGhpcztpZighci5sZW5ndGgpYnJlYWs7KHRbXysxJjNdfHx0W18rMiYzXXx8dFtfKzMmM10pJiYobj10LHk9Xyl9Zm9yKDtyLmRhdGEhPT1lOylpZihpPXIsIShyPXIubmV4dCkpcmV0dXJuIHRoaXM7cmV0dXJuKG89ci5uZXh0KSYmZGVsZXRlIHIubmV4dCxpPyhvP2kubmV4dD1vOmRlbGV0ZSBpLm5leHQsdGhpcyk6dD8obz90W19dPW86ZGVsZXRlIHRbX10sKHI9dFswXXx8dFsxXXx8dFsyXXx8dFszXSkmJnI9PT0odFszXXx8dFsyXXx8dFsxXXx8dFswXSkmJiFyLmxlbmd0aCYmKG4/blt5XT1yOnRoaXMuX3Jvb3Q9ciksdGhpcyk6KHRoaXMuX3Jvb3Q9byx0aGlzKX1mdW5jdGlvbiB4NnQoZSl7Zm9yKHZhciB0PTAscj1lLmxlbmd0aDt0PHI7Kyt0KXRoaXMucmVtb3ZlKGVbdF0pO3JldHVybiB0aGlzfXZhciBiNnQ9TSgoKT0+e30pO2Z1bmN0aW9uIHc2dCgpe3JldHVybiB0aGlzLl9yb290fXZhciBTNnQ9TSgoKT0+e30pO2Z1bmN0aW9uIE02dCgpe3ZhciBlPTA7cmV0dXJuIHRoaXMudmlzaXQoZnVuY3Rpb24odCl7aWYoIXQubGVuZ3RoKWRvKytlO3doaWxlKHQ9dC5uZXh0KX0pLGV9dmFyIEU2dD1NKCgpPT57fSk7ZnVuY3Rpb24gVDZ0KGUpe3ZhciB0PVtdLHIsbj10aGlzLl9yb290LGksbyxhLHMsbDtmb3IobiYmdC5wdXNoKG5ldyBTbyhuLHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7cj10LnBvcCgpOylpZighZShuPXIubm9kZSxvPXIueDAsYT1yLnkwLHM9ci54MSxsPXIueTEpJiZuLmxlbmd0aCl7dmFyIGM9KG8rcykvMix1PShhK2wpLzI7KGk9blszXSkmJnQucHVzaChuZXcgU28oaSxjLHUscyxsKSksKGk9blsyXSkmJnQucHVzaChuZXcgU28oaSxvLHUsYyxsKSksKGk9blsxXSkmJnQucHVzaChuZXcgU28oaSxjLGEscyx1KSksKGk9blswXSkmJnQucHVzaChuZXcgU28oaSxvLGEsYyx1KSl9cmV0dXJuIHRoaXN9dmFyIEM2dD1NKCgpPT57a04oKX0pO2Z1bmN0aW9uIEE2dChlKXt2YXIgdD1bXSxyPVtdLG47Zm9yKHRoaXMuX3Jvb3QmJnQucHVzaChuZXcgU28odGhpcy5fcm9vdCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO249dC5wb3AoKTspe3ZhciBpPW4ubm9kZTtpZihpLmxlbmd0aCl7dmFyIG8sYT1uLngwLHM9bi55MCxsPW4ueDEsYz1uLnkxLHU9KGErbCkvMixoPShzK2MpLzI7KG89aVswXSkmJnQucHVzaChuZXcgU28obyxhLHMsdSxoKSksKG89aVsxXSkmJnQucHVzaChuZXcgU28obyx1LHMsbCxoKSksKG89aVsyXSkmJnQucHVzaChuZXcgU28obyxhLGgsdSxjKSksKG89aVszXSkmJnQucHVzaChuZXcgU28obyx1LGgsbCxjKSl9ci5wdXNoKG4pfWZvcig7bj1yLnBvcCgpOyllKG4ubm9kZSxuLngwLG4ueTAsbi54MSxuLnkxKTtyZXR1cm4gdGhpc312YXIgUDZ0PU0oKCk9PntrTigpfSk7ZnVuY3Rpb24gSTZ0KGUpe3JldHVybiBlWzBdfWZ1bmN0aW9uIEw2dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feD1lLHRoaXMpOnRoaXMuX3h9dmFyIGs2dD1NKCgpPT57fSk7ZnVuY3Rpb24gUjZ0KGUpe3JldHVybiBlWzFdfWZ1bmN0aW9uIE42dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feT1lLHRoaXMpOnRoaXMuX3l9dmFyIEQ2dD1NKCgpPT57fSk7ZnVuY3Rpb24gQXkoZSx0LHIpe3ZhciBuPW5ldyBIWih0PT1udWxsP0k2dDp0LHI9PW51bGw/UjZ0OnIsTmFOLE5hTixOYU4sTmFOKTtyZXR1cm4gZT09bnVsbD9uOm4uYWRkQWxsKGUpfWZ1bmN0aW9uIEhaKGUsdCxyLG4saSxvKXt0aGlzLl94PWUsdGhpcy5feT10LHRoaXMuX3gwPXIsdGhpcy5feTA9bix0aGlzLl94MT1pLHRoaXMuX3kxPW8sdGhpcy5fcm9vdD12b2lkIDB9ZnVuY3Rpb24gTzZ0KGUpe2Zvcih2YXIgdD17ZGF0YTplLmRhdGF9LHI9dDtlPWUubmV4dDspcj1yLm5leHQ9e2RhdGE6ZS5kYXRhfTtyZXR1cm4gdH12YXIgV2EsejZ0PU0oKCk9Pnt1NnQoKTtmNnQoKTtkNnQoKTtnNnQoKTt5NnQoKTtiNnQoKTtTNnQoKTtFNnQoKTtDNnQoKTtQNnQoKTtrNnQoKTtENnQoKTtXYT1BeS5wcm90b3R5cGU9SFoucHJvdG90eXBlO1dhLmNvcHk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgSFoodGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSx0PXRoaXMuX3Jvb3QscixuO2lmKCF0KXJldHVybiBlO2lmKCF0Lmxlbmd0aClyZXR1cm4gZS5fcm9vdD1PNnQodCksZTtmb3Iocj1be3NvdXJjZTp0LHRhcmdldDplLl9yb290PW5ldyBBcnJheSg0KX1dO3Q9ci5wb3AoKTspZm9yKHZhciBpPTA7aTw0OysraSkobj10LnNvdXJjZVtpXSkmJihuLmxlbmd0aD9yLnB1c2goe3NvdXJjZTpuLHRhcmdldDp0LnRhcmdldFtpXT1uZXcgQXJyYXkoNCl9KTp0LnRhcmdldFtpXT1PNnQobikpO3JldHVybiBlfTtXYS5hZGQ9czZ0O1dhLmFkZEFsbD1jNnQ7V2EuY292ZXI9aDZ0O1dhLmRhdGE9cDZ0O1dhLmV4dGVudD1tNnQ7V2EuZmluZD1fNnQ7V2EucmVtb3ZlPXY2dDtXYS5yZW1vdmVBbGw9eDZ0O1dhLnJvb3Q9dzZ0O1dhLnNpemU9TTZ0O1dhLnZpc2l0PVQ2dDtXYS52aXNpdEFmdGVyPUE2dDtXYS54PUw2dDtXYS55PU42dH0pO3ZhciBWWj1NKCgpPT57ejZ0KCl9KTtmdW5jdGlvbiB4NGUoZSl7cmV0dXJuIGUueCtlLnZ4fWZ1bmN0aW9uIGI0ZShlKXtyZXR1cm4gZS55K2Uudnl9ZnVuY3Rpb24gRjZ0KGUpe3ZhciB0LHIsbj0xLGk9MTt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9Rm4oZT09bnVsbD8xOitlKSk7ZnVuY3Rpb24gbygpe2Zvcih2YXIgbCxjPXQubGVuZ3RoLHUsaCxmLHAsZCxnLF89MDtfPGk7KytfKWZvcih1PUF5KHQseDRlLGI0ZSkudmlzaXRBZnRlcihhKSxsPTA7bDxjOysrbCloPXRbbF0sZD1yW2guaW5kZXhdLGc9ZCpkLGY9aC54K2gudngscD1oLnkraC52eSx1LnZpc2l0KHkpO2Z1bmN0aW9uIHkoeCxiLFMsQyxQKXt2YXIgaz14LmRhdGEsTz14LnIsRD1kK087aWYoayl7aWYoay5pbmRleD5oLmluZGV4KXt2YXIgQj1mLWsueC1rLnZ4LEk9cC1rLnktay52eSxMPUIqQitJKkk7TDxEKkQmJihCPT09MCYmKEI9TXUoKSxMKz1CKkIpLEk9PT0wJiYoST1NdSgpLEwrPUkqSSksTD0oRC0oTD1NYXRoLnNxcnQoTCkpKS9MKm4saC52eCs9KEIqPUwpKihEPShPKj1PKS8oZytPKSksaC52eSs9KEkqPUwpKkQsay52eC09QiooRD0xLUQpLGsudnktPUkqRCl9cmV0dXJufXJldHVybiBiPmYrRHx8QzxmLUR8fFM+cCtEfHxQPHAtRH19ZnVuY3Rpb24gYShsKXtpZihsLmRhdGEpcmV0dXJuIGwucj1yW2wuZGF0YS5pbmRleF07Zm9yKHZhciBjPWwucj0wO2M8NDsrK2MpbFtjXSYmbFtjXS5yPmwuciYmKGwucj1sW2NdLnIpfWZ1bmN0aW9uIHMoKXtpZighIXQpe3ZhciBsLGM9dC5sZW5ndGgsdTtmb3Iocj1uZXcgQXJyYXkoYyksbD0wO2w8YzsrK2wpdT10W2xdLHJbdS5pbmRleF09K2UodSxsLHQpfX1yZXR1cm4gby5pbml0aWFsaXplPWZ1bmN0aW9uKGwpe3Q9bCxzKCl9LG8uaXRlcmF0aW9ucz1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rbCxvKTppfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStsLG8pOm59LG8ucmFkaXVzPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBsPT0iZnVuY3Rpb24iP2w6Rm4oK2wpLHMoKSxvKTplfSxvfXZhciBCNnQ9TSgoKT0+e0N5KCk7TE4oKTtWWigpfSk7ZnVuY3Rpb24gUk4oKXt9ZnVuY3Rpb24gSDZ0KGUsdCl7dmFyIHI9bmV3IFJOO2lmKGUgaW5zdGFuY2VvZiBSTillLmVhY2goZnVuY3Rpb24ocyxsKXtyLnNldChsLHMpfSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgbj0tMSxpPWUubGVuZ3RoLG87aWYodD09bnVsbClmb3IoOysrbjxpOylyLnNldChuLGVbbl0pO2Vsc2UgZm9yKDsrK248aTspci5zZXQodChvPWVbbl0sbixlKSxvKX1lbHNlIGlmKGUpZm9yKHZhciBhIGluIGUpci5zZXQoYSxlW2FdKTtyZXR1cm4gcn12YXIgdWwsZGcsTk49TSgoKT0+e3VsPSIkIjtSTi5wcm90b3R5cGU9SDZ0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6Uk4saGFzOmZ1bmN0aW9uKGUpe3JldHVybiB1bCtlIGluIHRoaXN9LGdldDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpc1t1bCtlXX0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXNbdWwrZV09dCx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dmFyIHQ9dWwrZTtyZXR1cm4gdCBpbiB0aGlzJiZkZWxldGUgdGhpc1t0XX0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09dWwmJmRlbGV0ZSB0aGlzW2VdfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PXVsJiZlLnB1c2godC5zbGljZSgxKSk7cmV0dXJuIGV9LHZhbHVlczpmdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT11bCYmZS5wdXNoKHRoaXNbdF0pO3JldHVybiBlfSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PXVsJiZlLnB1c2goe2tleTp0LnNsaWNlKDEpLHZhbHVlOnRoaXNbdF19KTtyZXR1cm4gZX0sc2l6ZTpmdW5jdGlvbigpe3ZhciBlPTA7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PXVsJiYrK2U7cmV0dXJuIGV9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMpaWYoZVswXT09PXVsKXJldHVybiExO3JldHVybiEwfSxlYWNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT11bCYmZSh0aGlzW3RdLHQuc2xpY2UoMSksdGhpcyl9fTtkZz1INnR9KTt2YXIgVjZ0PU0oKCk9PntOTigpfSk7ZnVuY3Rpb24gRE4oKXt9ZnVuY3Rpb24gdzRlKGUsdCl7dmFyIHI9bmV3IEROO2lmKGUgaW5zdGFuY2VvZiBETillLmVhY2goZnVuY3Rpb24obyl7ci5hZGQobyl9KTtlbHNlIGlmKGUpe3ZhciBuPS0xLGk9ZS5sZW5ndGg7aWYodD09bnVsbClmb3IoOysrbjxpOylyLmFkZChlW25dKTtlbHNlIGZvcig7KytuPGk7KXIuYWRkKHQoZVtuXSxuLGUpKX1yZXR1cm4gcn12YXIgUHksVTZ0PU0oKCk9PntOTigpO1B5PWRnLnByb3RvdHlwZTtETi5wcm90b3R5cGU9dzRlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RE4saGFzOlB5LmhhcyxhZGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrPSIiLHRoaXNbdWwrZV09ZSx0aGlzfSxyZW1vdmU6UHkucmVtb3ZlLGNsZWFyOlB5LmNsZWFyLHZhbHVlczpQeS5rZXlzLHNpemU6UHkuc2l6ZSxlbXB0eTpQeS5lbXB0eSxlYWNoOlB5LmVhY2h9fSk7dmFyIHE2dD1NKCgpPT57fSk7dmFyIEc2dD1NKCgpPT57fSk7dmFyIFc2dD1NKCgpPT57fSk7dmFyIFVaPU0oKCk9PntWNnQoKTtVNnQoKTtOTigpO3E2dCgpO0c2dCgpO1c2dCgpfSk7ZnVuY3Rpb24gUzRlKGUpe3JldHVybiBlLmluZGV4fWZ1bmN0aW9uIFk2dChlLHQpe3ZhciByPWUuZ2V0KHQpO2lmKCFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIit0KTtyZXR1cm4gcn1mdW5jdGlvbiBqNnQoZSl7dmFyIHQ9UzRlLHI9dSxuLGk9Rm4oMzApLG8sYSxzLGwsYz0xO2U9PW51bGwmJihlPVtdKTtmdW5jdGlvbiB1KGcpe3JldHVybiAxL01hdGgubWluKHNbZy5zb3VyY2UuaW5kZXhdLHNbZy50YXJnZXQuaW5kZXhdKX1mdW5jdGlvbiBoKGcpe2Zvcih2YXIgXz0wLHk9ZS5sZW5ndGg7XzxjOysrXylmb3IodmFyIHg9MCxiLFMsQyxQLGssTyxEO3g8eTsrK3gpYj1lW3hdLFM9Yi5zb3VyY2UsQz1iLnRhcmdldCxQPUMueCtDLnZ4LVMueC1TLnZ4fHxNdSgpLGs9Qy55K0MudnktUy55LVMudnl8fE11KCksTz1NYXRoLnNxcnQoUCpQK2sqayksTz0oTy1vW3hdKS9PKmcqblt4XSxQKj1PLGsqPU8sQy52eC09UCooRD1sW3hdKSxDLnZ5LT1rKkQsUy52eCs9UCooRD0xLUQpLFMudnkrPWsqRH1mdW5jdGlvbiBmKCl7aWYoISFhKXt2YXIgZyxfPWEubGVuZ3RoLHk9ZS5sZW5ndGgseD1kZyhhLHQpLGI7Zm9yKGc9MCxzPW5ldyBBcnJheShfKTtnPHk7KytnKWI9ZVtnXSxiLmluZGV4PWcsdHlwZW9mIGIuc291cmNlIT0ib2JqZWN0IiYmKGIuc291cmNlPVk2dCh4LGIuc291cmNlKSksdHlwZW9mIGIudGFyZ2V0IT0ib2JqZWN0IiYmKGIudGFyZ2V0PVk2dCh4LGIudGFyZ2V0KSksc1tiLnNvdXJjZS5pbmRleF09KHNbYi5zb3VyY2UuaW5kZXhdfHwwKSsxLHNbYi50YXJnZXQuaW5kZXhdPShzW2IudGFyZ2V0LmluZGV4XXx8MCkrMTtmb3IoZz0wLGw9bmV3IEFycmF5KHkpO2c8eTsrK2cpYj1lW2ddLGxbZ109c1tiLnNvdXJjZS5pbmRleF0vKHNbYi5zb3VyY2UuaW5kZXhdK3NbYi50YXJnZXQuaW5kZXhdKTtuPW5ldyBBcnJheSh5KSxwKCksbz1uZXcgQXJyYXkoeSksZCgpfX1mdW5jdGlvbiBwKCl7aWYoISFhKWZvcih2YXIgZz0wLF89ZS5sZW5ndGg7ZzxfOysrZyluW2ddPStyKGVbZ10sZyxlKX1mdW5jdGlvbiBkKCl7aWYoISFhKWZvcih2YXIgZz0wLF89ZS5sZW5ndGg7ZzxfOysrZylvW2ddPStpKGVbZ10sZyxlKX1yZXR1cm4gaC5pbml0aWFsaXplPWZ1bmN0aW9uKGcpe2E9ZyxmKCl9LGgubGlua3M9ZnVuY3Rpb24oZyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ZyxmKCksaCk6ZX0saC5pZD1mdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1nLGgpOnR9LGguaXRlcmF0aW9ucz1mdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rZyxoKTpjfSxoLnN0cmVuZ3RoPWZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBnPT0iZnVuY3Rpb24iP2c6Rm4oK2cpLHAoKSxoKTpyfSxoLmRpc3RhbmNlPWZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBnPT0iZnVuY3Rpb24iP2c6Rm4oK2cpLGQoKSxoKTppfSxofXZhciBYNnQ9TSgoKT0+e0N5KCk7TE4oKTtVWigpfSk7ZnVuY3Rpb24gSzZ0KCl7Zm9yKHZhciBlPTAsdD1hcmd1bWVudHMubGVuZ3RoLHI9e30sbjtlPHQ7KytlKXtpZighKG49YXJndW1lbnRzW2VdKyIiKXx8biBpbiByfHwvW1xzLl0vLnRlc3QobikpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IE9OKHIpfWZ1bmN0aW9uIE9OKGUpe3RoaXMuXz1lfWZ1bmN0aW9uIEU0ZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIFQ0ZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uICQ2dChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09TTRlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgTTRlLHFaLFo2dD1NKCgpPT57TTRlPXt2YWx1ZTpmdW5jdGlvbigpe319O09OLnByb3RvdHlwZT1LNnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpPTixvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuXyxuPUU0ZShlKyIiLHIpLGksbz0tMSxhPW4ubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK288YTspaWYoKGk9KGU9bltvXSkudHlwZSkmJihpPVQ0ZShyW2ldLGUubmFtZSkpKXJldHVybiBpO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK288YTspaWYoaT0oZT1uW29dKS50eXBlKXJbaV09JDZ0KHJbaV0sZS5uYW1lLHQpO2Vsc2UgaWYodD09bnVsbClmb3IoaSBpbiByKXJbaV09JDZ0KHJbaV0sZS5uYW1lLG51bGwpO3JldHVybiB0aGlzfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGU9e30sdD10aGlzLl87Zm9yKHZhciByIGluIHQpZVtyXT10W3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBPTihlKX0sY2FsbDpmdW5jdGlvbihlLHQpe2lmKChpPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHI9bmV3IEFycmF5KGkpLG49MCxpLG87bjxpOysrbilyW25dPWFyZ3VtZW50c1tuKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKG89dGhpcy5fW2VdLG49MCxpPW8ubGVuZ3RoO248aTsrK24pb1tuXS52YWx1ZS5hcHBseSh0LHIpfSxhcHBseTpmdW5jdGlvbihlLHQscil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3IodmFyIG49dGhpcy5fW2VdLGk9MCxvPW4ubGVuZ3RoO2k8bzsrK2kpbltpXS52YWx1ZS5hcHBseSh0LHIpfX07cVo9SzZ0fSk7dmFyIEo2dD1NKCgpPT57WjZ0KCl9KTtmdW5jdGlvbiBZWigpe3JldHVybiBJeXx8KGVJdChDNGUpLEl5PUVULm5vdygpK0JOKX1mdW5jdGlvbiBDNGUoKXtJeT0wfWZ1bmN0aW9uIEdaKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBITihlLHQscil7dmFyIG49bmV3IEdaO3JldHVybiBuLnJlc3RhcnQoZSx0LHIpLG59ZnVuY3Rpb24gckl0KCl7WVooKSwrK0UyO2Zvcih2YXIgZT16Tix0O2U7KSh0PUl5LWUuX3RpbWUpPj0wJiZlLl9jYWxsLmNhbGwobnVsbCx0KSxlPWUuX25leHQ7LS1FMn1mdW5jdGlvbiBRNnQoKXtJeT0oRk49RVQubm93KCkpK0JOLEUyPVNUPTA7dHJ5e3JJdCgpfWZpbmFsbHl7RTI9MCxQNGUoKSxJeT0wfX1mdW5jdGlvbiBBNGUoKXt2YXIgZT1FVC5ub3coKSx0PWUtRk47dD50SXQmJihCTi09dCxGTj1lKX1mdW5jdGlvbiBQNGUoKXtmb3IodmFyIGUsdD16TixyLG49MS8wO3Q7KXQuX2NhbGw/KG4+dC5fdGltZSYmKG49dC5fdGltZSksZT10LHQ9dC5fbmV4dCk6KHI9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1lP2UuX25leHQ9cjp6Tj1yKTtNVD1lLFdaKG4pfWZ1bmN0aW9uIFdaKGUpe2lmKCFFMil7U1QmJihTVD1jbGVhclRpbWVvdXQoU1QpKTt2YXIgdD1lLUl5O3Q+MjQ/KGU8MS8wJiYoU1Q9c2V0VGltZW91dChRNnQsZS1FVC5ub3coKS1CTikpLHdUJiYod1Q9Y2xlYXJJbnRlcnZhbCh3VCkpKTood1R8fChGTj1FVC5ub3coKSx3VD1zZXRJbnRlcnZhbChBNGUsdEl0KSksRTI9MSxlSXQoUTZ0KSl9fXZhciBFMixTVCx3VCx0SXQsek4sTVQsRk4sSXksQk4sRVQsZUl0LG5JdD1NKCgpPT57RTI9MCxTVD0wLHdUPTAsdEl0PTFlMyxGTj0wLEl5PTAsQk49MCxFVD10eXBlb2YgcGVyZm9ybWFuY2U9PSJvYmplY3QiJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxlSXQ9dHlwZW9mIHdpbmRvdz09Im9iamVjdCImJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24oZSl7c2V0VGltZW91dChlLDE3KX07R1oucHJvdG90eXBlPUhOLnByb3RvdHlwZT17Y29uc3RydWN0b3I6R1oscmVzdGFydDpmdW5jdGlvbihlLHQscil7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtyPShyPT1udWxsP1laKCk6K3IpKyh0PT1udWxsPzA6K3QpLCF0aGlzLl9uZXh0JiZNVCE9PXRoaXMmJihNVD9NVC5fbmV4dD10aGlzOnpOPXRoaXMsTVQ9dGhpcyksdGhpcy5fY2FsbD1lLHRoaXMuX3RpbWU9cixXWigpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxXWigpKX19fSk7dmFyIGlJdD1NKCgpPT57bkl0KCl9KTtmdW5jdGlvbiBvSXQoZSl7cmV0dXJuIGUueH1mdW5jdGlvbiBhSXQoZSl7cmV0dXJuIGUueX1mdW5jdGlvbiBzSXQoZSl7dmFyIHQscj0xLG49LjAwMSxpPTEtTWF0aC5wb3cobiwxLzMwMCksbz0wLGE9LjYscz1kZygpLGw9SE4odSksYz1xWigidGljayIsImVuZCIpO2U9PW51bGwmJihlPVtdKTtmdW5jdGlvbiB1KCl7aCgpLGMuY2FsbCgidGljayIsdCkscjxuJiYobC5zdG9wKCksYy5jYWxsKCJlbmQiLHQpKX1mdW5jdGlvbiBoKCl7dmFyIGQsZz1lLmxlbmd0aCxfO2ZvcihyKz0oby1yKSppLHMuZWFjaChmdW5jdGlvbih5KXt5KHIpfSksZD0wO2Q8ZzsrK2QpXz1lW2RdLF8uZng9PW51bGw/Xy54Kz1fLnZ4Kj1hOihfLng9Xy5meCxfLnZ4PTApLF8uZnk9PW51bGw/Xy55Kz1fLnZ5Kj1hOihfLnk9Xy5meSxfLnZ5PTApfWZ1bmN0aW9uIGYoKXtmb3IodmFyIGQ9MCxnPWUubGVuZ3RoLF87ZDxnOysrZCl7aWYoXz1lW2RdLF8uaW5kZXg9ZCxpc05hTihfLngpfHxpc05hTihfLnkpKXt2YXIgeT1JNGUqTWF0aC5zcXJ0KGQpLHg9ZCpMNGU7Xy54PXkqTWF0aC5jb3MoeCksXy55PXkqTWF0aC5zaW4oeCl9KGlzTmFOKF8udngpfHxpc05hTihfLnZ5KSkmJihfLnZ4PV8udnk9MCl9fWZ1bmN0aW9uIHAoZCl7cmV0dXJuIGQuaW5pdGlhbGl6ZSYmZC5pbml0aWFsaXplKGUpLGR9cmV0dXJuIGYoKSx0PXt0aWNrOmgscmVzdGFydDpmdW5jdGlvbigpe3JldHVybiBsLnJlc3RhcnQodSksdH0sc3RvcDpmdW5jdGlvbigpe3JldHVybiBsLnN0b3AoKSx0fSxub2RlczpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1kLGYoKSxzLmVhY2gocCksdCk6ZX0sYWxwaGE6ZnVuY3Rpb24oZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K2QsdCk6cn0sYWxwaGFNaW46ZnVuY3Rpb24oZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K2QsdCk6bn0sYWxwaGFEZWNheTpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rZCx0KToraX0sYWxwaGFUYXJnZXQ6ZnVuY3Rpb24oZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K2QsdCk6b30sdmVsb2NpdHlEZWNheTpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0xLWQsdCk6MS1hfSxmb3JjZTpmdW5jdGlvbihkLGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KGc9PW51bGw/cy5yZW1vdmUoZCk6cy5zZXQoZCxwKGcpKSx0KTpzLmdldChkKX0sZmluZDpmdW5jdGlvbihkLGcsXyl7dmFyIHk9MCx4PWUubGVuZ3RoLGIsUyxDLFAsaztmb3IoXz09bnVsbD9fPTEvMDpfKj1fLHk9MDt5PHg7Kyt5KVA9ZVt5XSxiPWQtUC54LFM9Zy1QLnksQz1iKmIrUypTLEM8XyYmKGs9UCxfPUMpO3JldHVybiBrfSxvbjpmdW5jdGlvbihkLGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KGMub24oZCxnKSx0KTpjLm9uKGQpfX19dmFyIEk0ZSxMNGUsalo9TSgoKT0+e0o2dCgpO1VaKCk7aUl0KCk7STRlPTEwLEw0ZT1NYXRoLlBJKigzLU1hdGguc3FydCg1KSl9KTtmdW5jdGlvbiBsSXQoKXt2YXIgZSx0LHIsbj1GbigtMzApLGksbz0xLGE9MS8wLHM9LjgxO2Z1bmN0aW9uIGwoZil7dmFyIHAsZD1lLmxlbmd0aCxnPUF5KGUsb0l0LGFJdCkudmlzaXRBZnRlcih1KTtmb3Iocj1mLHA9MDtwPGQ7KytwKXQ9ZVtwXSxnLnZpc2l0KGgpfWZ1bmN0aW9uIGMoKXtpZighIWUpe3ZhciBmLHA9ZS5sZW5ndGgsZDtmb3IoaT1uZXcgQXJyYXkocCksZj0wO2Y8cDsrK2YpZD1lW2ZdLGlbZC5pbmRleF09K24oZCxmLGUpfX1mdW5jdGlvbiB1KGYpe3ZhciBwPTAsZCxnLF89MCx5LHgsYjtpZihmLmxlbmd0aCl7Zm9yKHk9eD1iPTA7Yjw0OysrYikoZD1mW2JdKSYmKGc9TWF0aC5hYnMoZC52YWx1ZSkpJiYocCs9ZC52YWx1ZSxfKz1nLHkrPWcqZC54LHgrPWcqZC55KTtmLng9eS9fLGYueT14L199ZWxzZXtkPWYsZC54PWQuZGF0YS54LGQueT1kLmRhdGEueTtkbyBwKz1pW2QuZGF0YS5pbmRleF07d2hpbGUoZD1kLm5leHQpfWYudmFsdWU9cH1mdW5jdGlvbiBoKGYscCxkLGcpe2lmKCFmLnZhbHVlKXJldHVybiEwO3ZhciBfPWYueC10LngseT1mLnktdC55LHg9Zy1wLGI9XypfK3kqeTtpZih4KngvczxiKXJldHVybiBiPGEmJihfPT09MCYmKF89TXUoKSxiKz1fKl8pLHk9PT0wJiYoeT1NdSgpLGIrPXkqeSksYjxvJiYoYj1NYXRoLnNxcnQobypiKSksdC52eCs9XypmLnZhbHVlKnIvYix0LnZ5Kz15KmYudmFsdWUqci9iKSwhMDtpZihmLmxlbmd0aHx8Yj49YSlyZXR1cm47KGYuZGF0YSE9PXR8fGYubmV4dCkmJihfPT09MCYmKF89TXUoKSxiKz1fKl8pLHk9PT0wJiYoeT1NdSgpLGIrPXkqeSksYjxvJiYoYj1NYXRoLnNxcnQobypiKSkpO2RvIGYuZGF0YSE9PXQmJih4PWlbZi5kYXRhLmluZGV4XSpyL2IsdC52eCs9Xyp4LHQudnkrPXkqeCk7d2hpbGUoZj1mLm5leHQpfXJldHVybiBsLmluaXRpYWxpemU9ZnVuY3Rpb24oZil7ZT1mLGMoKX0sbC5zdHJlbmd0aD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOkZuKCtmKSxjKCksbCk6bn0sbC5kaXN0YW5jZU1pbj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1mKmYsbCk6TWF0aC5zcXJ0KG8pfSxsLmRpc3RhbmNlTWF4PWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPWYqZixsKTpNYXRoLnNxcnQoYSl9LGwudGhldGE9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ZipmLGwpOk1hdGguc3FydChzKX0sbH12YXIgY0l0PU0oKCk9PntDeSgpO0xOKCk7VlooKTtqWigpfSk7ZnVuY3Rpb24gdUl0KGUsdCxyKXt2YXIgbixpPUZuKC4xKSxvLGE7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPUZuKCtlKSksdD09bnVsbCYmKHQ9MCkscj09bnVsbCYmKHI9MCk7ZnVuY3Rpb24gcyhjKXtmb3IodmFyIHU9MCxoPW4ubGVuZ3RoO3U8aDsrK3Upe3ZhciBmPW5bdV0scD1mLngtdHx8MWUtNixkPWYueS1yfHwxZS02LGc9TWF0aC5zcXJ0KHAqcCtkKmQpLF89KGFbdV0tZykqb1t1XSpjL2c7Zi52eCs9cCpfLGYudnkrPWQqX319ZnVuY3Rpb24gbCgpe2lmKCEhbil7dmFyIGMsdT1uLmxlbmd0aDtmb3Iobz1uZXcgQXJyYXkodSksYT1uZXcgQXJyYXkodSksYz0wO2M8dTsrK2MpYVtjXT0rZShuW2NdLGMsbiksb1tjXT1pc05hTihhW2NdKT8wOitpKG5bY10sYyxuKX19cmV0dXJuIHMuaW5pdGlhbGl6ZT1mdW5jdGlvbihjKXtuPWMsbCgpfSxzLnN0cmVuZ3RoPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6Rm4oK2MpLGwoKSxzKTppfSxzLnJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOkZuKCtjKSxsKCkscyk6ZX0scy54PWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStjLHMpOnR9LHMueT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rYyxzKTpyfSxzfXZhciBoSXQ9TSgoKT0+e0N5KCl9KTtmdW5jdGlvbiBmSXQoZSl7dmFyIHQ9Rm4oLjEpLHIsbixpO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1GbihlPT1udWxsPzA6K2UpKTtmdW5jdGlvbiBvKHMpe2Zvcih2YXIgbD0wLGM9ci5sZW5ndGgsdTtsPGM7KytsKXU9cltsXSx1LnZ4Kz0oaVtsXS11LngpKm5bbF0qc31mdW5jdGlvbiBhKCl7aWYoISFyKXt2YXIgcyxsPXIubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShsKSxpPW5ldyBBcnJheShsKSxzPTA7czxsOysrcyluW3NdPWlzTmFOKGlbc109K2UocltzXSxzLHIpKT8wOit0KHJbc10scyxyKX19cmV0dXJuIG8uaW5pdGlhbGl6ZT1mdW5jdGlvbihzKXtyPXMsYSgpfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6Rm4oK3MpLGEoKSxvKTp0fSxvLng9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpGbigrcyksYSgpLG8pOmV9LG99dmFyIHBJdD1NKCgpPT57Q3koKX0pO2Z1bmN0aW9uIGRJdChlKXt2YXIgdD1GbiguMSkscixuLGk7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPUZuKGU9PW51bGw/MDorZSkpO2Z1bmN0aW9uIG8ocyl7Zm9yKHZhciBsPTAsYz1yLmxlbmd0aCx1O2w8YzsrK2wpdT1yW2xdLHUudnkrPShpW2xdLXUueSkqbltsXSpzfWZ1bmN0aW9uIGEoKXtpZighIXIpe3ZhciBzLGw9ci5sZW5ndGg7Zm9yKG49bmV3IEFycmF5KGwpLGk9bmV3IEFycmF5KGwpLHM9MDtzPGw7KytzKW5bc109aXNOYU4oaVtzXT0rZShyW3NdLHMscikpPzA6K3QocltzXSxzLHIpfX1yZXR1cm4gby5pbml0aWFsaXplPWZ1bmN0aW9uKHMpe3I9cyxhKCl9LG8uc3RyZW5ndGg9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpGbigrcyksYSgpLG8pOnR9LG8ueT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkZuKCtzKSxhKCksbyk6ZX0sb312YXIgbUl0PU0oKCk9PntDeSgpfSk7dmFyIGdJdD1NKCgpPT57YTZ0KCk7QjZ0KCk7WDZ0KCk7Y0l0KCk7aEl0KCk7alooKTtwSXQoKTttSXQoKX0pO2Z1bmN0aW9uIEx5KGUsdCl7aWYoKHI9KGU9dD9lLnRvRXhwb25lbnRpYWwodC0xKTplLnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciByLG49ZS5zbGljZSgwLHIpO3JldHVybltuLmxlbmd0aD4xP25bMF0rbi5zbGljZSgyKTpuLCtlLnNsaWNlKHIrMSldfXZhciBWTj1NKCgpPT57fSk7ZnVuY3Rpb24gbmYoZSl7cmV0dXJuIGU9THkoTWF0aC5hYnMoZSkpLGU/ZVsxXTpOYU59dmFyIFRUPU0oKCk9PntWTigpfSk7ZnVuY3Rpb24gX0l0KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPXIubGVuZ3RoLG89W10sYT0wLHM9ZVswXSxsPTA7aT4wJiZzPjAmJihsK3MrMT5uJiYocz1NYXRoLm1heCgxLG4tbCkpLG8ucHVzaChyLnN1YnN0cmluZyhpLT1zLGkrcykpLCEoKGwrPXMrMSk+bikpOylzPWVbYT0oYSsxKSVlLmxlbmd0aF07cmV0dXJuIG8ucmV2ZXJzZSgpLmpvaW4odCl9fXZhciB5SXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHZJdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbihyKXtyZXR1cm4gZVsrcl19KX19dmFyIHhJdD1NKCgpPT57fSk7ZnVuY3Rpb24gYkl0KGUsdCl7ZT1lLnRvUHJlY2lzaW9uKHQpO3Q6Zm9yKHZhciByPWUubGVuZ3RoLG49MSxpPS0xLG87bjxyOysrbilzd2l0Y2goZVtuXSl7Y2FzZSIuIjppPW89bjticmVhaztjYXNlIjAiOmk9PT0wJiYoaT1uKSxvPW47YnJlYWs7Y2FzZSJlIjpicmVhayB0O2RlZmF1bHQ6aT4wJiYoaT0wKTticmVha31yZXR1cm4gaT4wP2Uuc2xpY2UoMCxpKStlLnNsaWNlKG8rMSk6ZX12YXIgd0l0PU0oKCk9Pnt9KTtmdW5jdGlvbiBTSXQoZSx0KXt2YXIgcj1MeShlLHQpO2lmKCFyKXJldHVybiBlKyIiO3ZhciBuPXJbMF0saT1yWzFdLG89aS0oWFo9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKGkvMykpKSozKSsxLGE9bi5sZW5ndGg7cmV0dXJuIG89PT1hP246bz5hP24rbmV3IEFycmF5KG8tYSsxKS5qb2luKCIwIik6bz4wP24uc2xpY2UoMCxvKSsiLiIrbi5zbGljZShvKToiMC4iK25ldyBBcnJheSgxLW8pLmpvaW4oIjAiKStMeShlLE1hdGgubWF4KDAsdCtvLTEpKVswXX12YXIgWFosJFo9TSgoKT0+e1ZOKCl9KTtmdW5jdGlvbiBLWihlLHQpe3ZhciByPUx5KGUsdCk7aWYoIXIpcmV0dXJuIGUrIiI7dmFyIG49clswXSxpPXJbMV07cmV0dXJuIGk8MD8iMC4iK25ldyBBcnJheSgtaSkuam9pbigiMCIpK246bi5sZW5ndGg+aSsxP24uc2xpY2UoMCxpKzEpKyIuIituLnNsaWNlKGkrMSk6bituZXcgQXJyYXkoaS1uLmxlbmd0aCsyKS5qb2luKCIwIil9dmFyIE1JdD1NKCgpPT57Vk4oKX0pO3ZhciBVTixaWj1NKCgpPT57d0l0KCk7JFooKTtNSXQoKTtVTj17IiI6Ykl0LCIlIjpmdW5jdGlvbihlLHQpe3JldHVybihlKjEwMCkudG9GaXhlZCh0KX0sYjpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygyKX0sYzpmdW5jdGlvbihlKXtyZXR1cm4gZSsiIn0sZDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygxMCl9LGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS50b0V4cG9uZW50aWFsKHQpfSxmOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudG9GaXhlZCh0KX0sZzpmdW5jdGlvbihlLHQpe3JldHVybiBlLnRvUHJlY2lzaW9uKHQpfSxvOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDgpfSxwOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEtaKGUqMTAwLHQpfSxyOktaLHM6U0l0LFg6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQoZSkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9LHg6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQoZSkudG9TdHJpbmcoMTYpfX19KTtmdW5jdGlvbiBreShlKXtyZXR1cm4gbmV3IEpaKGUpfWZ1bmN0aW9uIEpaKGUpe2lmKCEodD1rNGUuZXhlYyhlKSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIitlKTt2YXIgdCxyPXRbMV18fCIgIixuPXRbMl18fCI+IixpPXRbM118fCItIixvPXRbNF18fCIiLGE9ISF0WzVdLHM9dFs2XSYmK3RbNl0sbD0hIXRbN10sYz10WzhdJiYrdFs4XS5zbGljZSgxKSx1PXRbOV18fCIiO3U9PT0ibiI/KGw9ITAsdT0iZyIpOlVOW3VdfHwodT0iIiksKGF8fHI9PT0iMCImJm49PT0iPSIpJiYoYT0hMCxyPSIwIixuPSI9IiksdGhpcy5maWxsPXIsdGhpcy5hbGlnbj1uLHRoaXMuc2lnbj1pLHRoaXMuc3ltYm9sPW8sdGhpcy56ZXJvPWEsdGhpcy53aWR0aD1zLHRoaXMuY29tbWE9bCx0aGlzLnByZWNpc2lvbj1jLHRoaXMudHlwZT11fXZhciBrNGUsUVo9TSgoKT0+e1paKCk7azRlPS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLVwoIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KFthLXolXSk/JC9pO2t5LnByb3RvdHlwZT1KWi5wcm90b3R5cGU7SloucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKHRoaXMud2lkdGg9PW51bGw/IiI6TWF0aC5tYXgoMSx0aGlzLndpZHRofDApKSsodGhpcy5jb21tYT8iLCI6IiIpKyh0aGlzLnByZWNpc2lvbj09bnVsbD8iIjoiLiIrTWF0aC5tYXgoMCx0aGlzLnByZWNpc2lvbnwwKSkrdGhpcy50eXBlfX0pO2Z1bmN0aW9uIHRKKGUpe3JldHVybiBlfXZhciBFSXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHFOKGUpe3ZhciB0PWUuZ3JvdXBpbmcmJmUudGhvdXNhbmRzP19JdChlLmdyb3VwaW5nLGUudGhvdXNhbmRzKTp0SixyPWUuY3VycmVuY3ksbj1lLmRlY2ltYWwsaT1lLm51bWVyYWxzP3ZJdChlLm51bWVyYWxzKTp0SixvPWUucGVyY2VudHx8IiUiO2Z1bmN0aW9uIGEobCl7bD1reShsKTt2YXIgYz1sLmZpbGwsdT1sLmFsaWduLGg9bC5zaWduLGY9bC5zeW1ib2wscD1sLnplcm8sZD1sLndpZHRoLGc9bC5jb21tYSxfPWwucHJlY2lzaW9uLHk9bC50eXBlLHg9Zj09PSIkIj9yWzBdOmY9PT0iIyImJi9bYm94WF0vLnRlc3QoeSk/IjAiK3kudG9Mb3dlckNhc2UoKToiIixiPWY9PT0iJCI/clsxXTovWyVwXS8udGVzdCh5KT9vOiIiLFM9VU5beV0sQz0heXx8L1tkZWZncHJzJV0vLnRlc3QoeSk7Xz1fPT1udWxsP3k/NjoxMjovW2dwcnNdLy50ZXN0KHkpP01hdGgubWF4KDEsTWF0aC5taW4oMjEsXykpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsXykpO2Z1bmN0aW9uIFAoayl7dmFyIE89eCxEPWIsQixJLEw7aWYoeT09PSJjIilEPVMoaykrRCxrPSIiO2Vsc2V7az0razt2YXIgUj1rPDA7aWYoaz1TKE1hdGguYWJzKGspLF8pLFImJitrPT0wJiYoUj0hMSksTz0oUj9oPT09IigiP2g6Ii0iOmg9PT0iLSJ8fGg9PT0iKCI/IiI6aCkrTyxEPSh5PT09InMiP1RJdFs4K1haLzNdOiIiKStEKyhSJiZoPT09IigiPyIpIjoiIiksQyl7Zm9yKEI9LTEsST1rLmxlbmd0aDsrK0I8STspaWYoTD1rLmNoYXJDb2RlQXQoQiksNDg+THx8TD41Nyl7RD0oTD09PTQ2P24ray5zbGljZShCKzEpOmsuc2xpY2UoQikpK0Qsaz1rLnNsaWNlKDAsQik7YnJlYWt9fX1nJiYhcCYmKGs9dChrLDEvMCkpO3ZhciBGPU8ubGVuZ3RoK2subGVuZ3RoK0QubGVuZ3RoLHo9RjxkP25ldyBBcnJheShkLUYrMSkuam9pbihjKToiIjtzd2l0Y2goZyYmcCYmKGs9dCh6K2ssei5sZW5ndGg/ZC1ELmxlbmd0aDoxLzApLHo9IiIpLHUpe2Nhc2UiPCI6az1PK2srRCt6O2JyZWFrO2Nhc2UiPSI6az1PK3oraytEO2JyZWFrO2Nhc2UiXiI6az16LnNsaWNlKDAsRj16Lmxlbmd0aD4+MSkrTytrK0Qrei5zbGljZShGKTticmVhaztkZWZhdWx0Oms9eitPK2srRDticmVha31yZXR1cm4gaShrKX1yZXR1cm4gUC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBsKyIifSxQfWZ1bmN0aW9uIHMobCxjKXt2YXIgdT1hKChsPWt5KGwpLGwudHlwZT0iZiIsbCkpLGg9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKG5mKGMpLzMpKSkqMyxmPU1hdGgucG93KDEwLC1oKSxwPVRJdFs4K2gvM107cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybiB1KGYqZCkrcH19cmV0dXJue2Zvcm1hdDphLGZvcm1hdFByZWZpeDpzfX12YXIgVEl0LGVKPU0oKCk9PntUVCgpO3lJdCgpO3hJdCgpO1FaKCk7WlooKTskWigpO0VJdCgpO1RJdD1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4QjUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXX0pO2Z1bmN0aW9uIFdOKGUpe3JldHVybiBHTj1xTihlKSxySj1HTi5mb3JtYXQsbko9R04uZm9ybWF0UHJlZml4LEdOfXZhciBHTixySixuSixDSXQ9TSgoKT0+e2VKKCk7V04oe2RlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdfSl9KTtmdW5jdGlvbiBBSXQoZSl7cmV0dXJuIE1hdGgubWF4KDAsLW5mKE1hdGguYWJzKGUpKSl9dmFyIFBJdD1NKCgpPT57VFQoKX0pO2Z1bmN0aW9uIElJdChlLHQpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihuZih0KS8zKSkpKjMtbmYoTWF0aC5hYnMoZSkpKX12YXIgTEl0PU0oKCk9PntUVCgpfSk7ZnVuY3Rpb24ga0l0KGUsdCl7cmV0dXJuIGU9TWF0aC5hYnMoZSksdD1NYXRoLmFicyh0KS1lLE1hdGgubWF4KDAsbmYodCktbmYoZSkpKzF9dmFyIFJJdD1NKCgpPT57VFQoKX0pO3ZhciBOSXQ9TSgoKT0+e0NJdCgpO2VKKCk7UVooKTtQSXQoKTtMSXQoKTtSSXQoKX0pO2Z1bmN0aW9uIEFzKCl7cmV0dXJuIG5ldyBqTn1mdW5jdGlvbiBqTigpe3RoaXMucmVzZXQoKX1mdW5jdGlvbiBESXQoZSx0LHIpe3ZhciBuPWUucz10K3IsaT1uLXQsbz1uLWk7ZS50PXQtbysoci1pKX12YXIgWU4sUnk9TSgoKT0+e2pOLnByb3RvdHlwZT17Y29uc3RydWN0b3I6ak4scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLnM9dGhpcy50PTB9LGFkZDpmdW5jdGlvbihlKXtESXQoWU4sZSx0aGlzLnQpLERJdCh0aGlzLFlOLnMsdGhpcy5zKSx0aGlzLnM/dGhpcy50Kz1ZTi50OnRoaXMucz1ZTi50fSx2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc319O1lOPW5ldyBqTn0pO2Z1bmN0aW9uIEtOKGUpe3JldHVybiBlPjE/MDplPC0xP3JyOk1hdGguYWNvcyhlKX1mdW5jdGlvbiBKbihlKXtyZXR1cm4gZT4xP0JuOmU8LTE/LUJuOk1hdGguYXNpbihlKX1mdW5jdGlvbiBvSihlKXtyZXR1cm4oZT1KdChlLzIpKSplfXZhciBjZSxpSixycixCbixUMixCaSxVcix3ZSxZZSx5YyxTbixhZSxDVCxYTixOeSwkTixKdCxtZyxScixDMixscj1NKCgpPT57Y2U9MWUtNixpSj0xZS0xMixycj1NYXRoLlBJLEJuPXJyLzIsVDI9cnIvNCxCaT1ycioyLFVyPTE4MC9ycix3ZT1yci8xODAsWWU9TWF0aC5hYnMseWM9TWF0aC5hdGFuLFNuPU1hdGguYXRhbjIsYWU9TWF0aC5jb3MsQ1Q9TWF0aC5jZWlsLFhOPU1hdGguZXhwLE55PU1hdGgubG9nLCROPU1hdGgucG93LEp0PU1hdGguc2luLG1nPU1hdGguc2lnbnx8ZnVuY3Rpb24oZSl7cmV0dXJuIGU+MD8xOmU8MD8tMTowfSxScj1NYXRoLnNxcnQsQzI9TWF0aC50YW59KTtmdW5jdGlvbiBxcigpe312YXIgJHA9TSgoKT0+e30pO2Z1bmN0aW9uIFpOKGUsdCl7ZSYmekl0Lmhhc093blByb3BlcnR5KGUudHlwZSkmJnpJdFtlLnR5cGVdKGUsdCl9ZnVuY3Rpb24gYUooZSx0LHIpe3ZhciBuPS0xLGk9ZS5sZW5ndGgtcixvO2Zvcih0LmxpbmVTdGFydCgpOysrbjxpOylvPWVbbl0sdC5wb2ludChvWzBdLG9bMV0sb1syXSk7dC5saW5lRW5kKCl9ZnVuY3Rpb24gRkl0KGUsdCl7dmFyIHI9LTEsbj1lLmxlbmd0aDtmb3IodC5wb2x5Z29uU3RhcnQoKTsrK3I8bjspYUooZVtyXSx0LDEpO3QucG9seWdvbkVuZCgpfWZ1bmN0aW9uIE1vKGUsdCl7ZSYmT0l0Lmhhc093blByb3BlcnR5KGUudHlwZSk/T0l0W2UudHlwZV0oZSx0KTpaTihlLHQpfXZhciBPSXQsekl0LGdnPU0oKCk9PntPSXQ9e0ZlYXR1cmU6ZnVuY3Rpb24oZSx0KXtaTihlLmdlb21ldHJ5LHQpfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmZlYXR1cmVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspWk4ocltuXS5nZW9tZXRyeSx0KX19LHpJdD17U3BoZXJlOmZ1bmN0aW9uKGUsdCl7dC5zcGhlcmUoKX0sUG9pbnQ6ZnVuY3Rpb24oZSx0KXtlPWUuY29vcmRpbmF0ZXMsdC5wb2ludChlWzBdLGVbMV0sZVsyXSl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWU9cltuXSx0LnBvaW50KGVbMF0sZVsxXSxlWzJdKX0sTGluZVN0cmluZzpmdW5jdGlvbihlLHQpe2FKKGUuY29vcmRpbmF0ZXMsdCwwKX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylhSihyW25dLHQsMCl9LFBvbHlnb246ZnVuY3Rpb24oZSx0KXtGSXQoZS5jb29yZGluYXRlcyx0KX0sTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylGSXQocltuXSx0KX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuZ2VvbWV0cmllcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KVpOKHJbbl0sdCl9fX0pO2Z1bmN0aW9uIFI0ZSgpe0V1LnBvaW50PUQ0ZX1mdW5jdGlvbiBONGUoKXtWSXQoQkl0LEhJdCl9ZnVuY3Rpb24gRDRlKGUsdCl7RXUucG9pbnQ9Vkl0LEJJdD1lLEhJdD10LGUqPXdlLHQqPXdlLHNKPWUsbEo9YWUodD10LzIrVDIpLGNKPUp0KHQpfWZ1bmN0aW9uIFZJdChlLHQpe2UqPXdlLHQqPXdlLHQ9dC8yK1QyO3ZhciByPWUtc0osbj1yPj0wPzE6LTEsaT1uKnIsbz1hZSh0KSxhPUp0KHQpLHM9Y0oqYSxsPWxKKm8rcyphZShpKSxjPXMqbipKdChpKTtBVC5hZGQoU24oYyxsKSksc0o9ZSxsSj1vLGNKPWF9ZnVuY3Rpb24gVUl0KGUpe3JldHVybiBKTi5yZXNldCgpLE1vKGUsRXUpLEpOKjJ9dmFyIEFULEpOLEJJdCxISXQsc0osbEosY0osRXUsdUo9TSgoKT0+e1J5KCk7bHIoKTskcCgpO2dnKCk7QVQ9QXMoKSxKTj1BcygpLEV1PXtwb2ludDpxcixsaW5lU3RhcnQ6cXIsbGluZUVuZDpxcixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtBVC5yZXNldCgpLEV1LmxpbmVTdGFydD1SNGUsRXUubGluZUVuZD1ONGV9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt2YXIgZT0rQVQ7Sk4uYWRkKGU8MD9CaStlOmUpLHRoaXMubGluZVN0YXJ0PXRoaXMubGluZUVuZD10aGlzLnBvaW50PXFyfSxzcGhlcmU6ZnVuY3Rpb24oKXtKTi5hZGQoQmkpfX19KTtmdW5jdGlvbiBEeShlKXtyZXR1cm5bU24oZVsxXSxlWzBdKSxKbihlWzJdKV19ZnVuY3Rpb24gdmMoZSl7dmFyIHQ9ZVswXSxyPWVbMV0sbj1hZShyKTtyZXR1cm5bbiphZSh0KSxuKkp0KHQpLEp0KHIpXX1mdW5jdGlvbiBQVChlLHQpe3JldHVybiBlWzBdKnRbMF0rZVsxXSp0WzFdK2VbMl0qdFsyXX1mdW5jdGlvbiBLcChlLHQpe3JldHVybltlWzFdKnRbMl0tZVsyXSp0WzFdLGVbMl0qdFswXS1lWzBdKnRbMl0sZVswXSp0WzFdLWVbMV0qdFswXV19ZnVuY3Rpb24gUU4oZSx0KXtlWzBdKz10WzBdLGVbMV0rPXRbMV0sZVsyXSs9dFsyXX1mdW5jdGlvbiBJVChlLHQpe3JldHVybltlWzBdKnQsZVsxXSp0LGVbMl0qdF19ZnVuY3Rpb24gT3koZSl7dmFyIHQ9UnIoZVswXSplWzBdK2VbMV0qZVsxXStlWzJdKmVbMl0pO2VbMF0vPXQsZVsxXS89dCxlWzJdLz10fXZhciBBMj1NKCgpPT57bHIoKX0pO2Z1bmN0aW9uIGhKKGUsdCl7X2cucHVzaChKcD1bZGk9ZSxFaT1lXSksdDxmbCYmKGZsPXQpLHQ+eGMmJih4Yz10KX1mdW5jdGlvbiBYSXQoZSx0KXt2YXIgcj12YyhbZSp3ZSx0KndlXSk7aWYoUDIpe3ZhciBuPUtwKFAyLHIpLGk9W25bMV0sLW5bMF0sMF0sbz1LcChpLG4pO095KG8pLG89RHkobyk7dmFyIGE9ZS16eSxzPWE+MD8xOi0xLGw9b1swXSpVcipzLGMsdT1ZZShhKT4xODA7dV4ocyp6eTxsJiZsPHMqZSk/KGM9b1sxXSpVcixjPnhjJiYoeGM9YykpOihsPShsKzM2MCklMzYwLTE4MCx1XihzKnp5PGwmJmw8cyplKT8oYz0tb1sxXSpVcixjPGZsJiYoZmw9YykpOih0PGZsJiYoZmw9dCksdD54YyYmKHhjPXQpKSksdT9lPHp5P2hsKGRpLGUpPmhsKGRpLEVpKSYmKEVpPWUpOmhsKGUsRWkpPmhsKGRpLEVpKSYmKGRpPWUpOkVpPj1kaT8oZTxkaSYmKGRpPWUpLGU+RWkmJihFaT1lKSk6ZT56eT9obChkaSxlKT5obChkaSxFaSkmJihFaT1lKTpobChlLEVpKT5obChkaSxFaSkmJihkaT1lKX1lbHNlIF9nLnB1c2goSnA9W2RpPWUsRWk9ZV0pO3Q8ZmwmJihmbD10KSx0PnhjJiYoeGM9dCksUDI9cix6eT1lfWZ1bmN0aW9uIHFJdCgpe1pwLnBvaW50PVhJdH1mdW5jdGlvbiBHSXQoKXtKcFswXT1kaSxKcFsxXT1FaSxacC5wb2ludD1oSixQMj1udWxsfWZ1bmN0aW9uICRJdChlLHQpe2lmKFAyKXt2YXIgcj1lLXp5O0xULmFkZChZZShyKT4xODA/cisocj4wPzM2MDotMzYwKTpyKX1lbHNlIFlJdD1lLGpJdD10O0V1LnBvaW50KGUsdCksWEl0KGUsdCl9ZnVuY3Rpb24gTzRlKCl7RXUubGluZVN0YXJ0KCl9ZnVuY3Rpb24gejRlKCl7JEl0KFlJdCxqSXQpLEV1LmxpbmVFbmQoKSxZZShMVCk+Y2UmJihkaT0tKEVpPTE4MCkpLEpwWzBdPWRpLEpwWzFdPUVpLFAyPW51bGx9ZnVuY3Rpb24gaGwoZSx0KXtyZXR1cm4odC09ZSk8MD90KzM2MDp0fWZ1bmN0aW9uIEY0ZShlLHQpe3JldHVybiBlWzBdLXRbMF19ZnVuY3Rpb24gV0l0KGUsdCl7cmV0dXJuIGVbMF08PWVbMV0/ZVswXTw9dCYmdDw9ZVsxXTp0PGVbMF18fGVbMV08dH1mdW5jdGlvbiBLSXQoZSl7dmFyIHQscixuLGksbyxhLHM7aWYoeGM9RWk9LShkaT1mbD0xLzApLF9nPVtdLE1vKGUsWnApLHI9X2cubGVuZ3RoKXtmb3IoX2cuc29ydChGNGUpLHQ9MSxuPV9nWzBdLG89W25dO3Q8cjsrK3QpaT1fZ1t0XSxXSXQobixpWzBdKXx8V0l0KG4saVsxXSk/KGhsKG5bMF0saVsxXSk+aGwoblswXSxuWzFdKSYmKG5bMV09aVsxXSksaGwoaVswXSxuWzFdKT5obChuWzBdLG5bMV0pJiYoblswXT1pWzBdKSk6by5wdXNoKG49aSk7Zm9yKGE9LTEvMCxyPW8ubGVuZ3RoLTEsdD0wLG49b1tyXTt0PD1yO249aSwrK3QpaT1vW3RdLChzPWhsKG5bMV0saVswXSkpPmEmJihhPXMsZGk9aVswXSxFaT1uWzFdKX1yZXR1cm4gX2c9SnA9bnVsbCxkaT09PTEvMHx8Zmw9PT0xLzA/W1tOYU4sTmFOXSxbTmFOLE5hTl1dOltbZGksZmxdLFtFaSx4Y11dfXZhciBkaSxmbCxFaSx4Yyx6eSxZSXQsakl0LFAyLExULF9nLEpwLFpwLFpJdD1NKCgpPT57UnkoKTt1SigpO0EyKCk7bHIoKTtnZygpO0xUPUFzKCksWnA9e3BvaW50OmhKLGxpbmVTdGFydDpxSXQsbGluZUVuZDpHSXQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7WnAucG9pbnQ9JEl0LFpwLmxpbmVTdGFydD1PNGUsWnAubGluZUVuZD16NGUsTFQucmVzZXQoKSxFdS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe0V1LnBvbHlnb25FbmQoKSxacC5wb2ludD1oSixacC5saW5lU3RhcnQ9cUl0LFpwLmxpbmVFbmQ9R0l0LEFUPDA/KGRpPS0oRWk9MTgwKSxmbD0tKHhjPTkwKSk6TFQ+Y2U/eGM9OTA6TFQ8LWNlJiYoZmw9LTkwKSxKcFswXT1kaSxKcFsxXT1FaX19fSk7ZnVuY3Rpb24gbUooZSx0KXtlKj13ZSx0Kj13ZTt2YXIgcj1hZSh0KTtSVChyKmFlKGUpLHIqSnQoZSksSnQodCkpfWZ1bmN0aW9uIFJUKGUsdCxyKXsrK2tULGVEKz0oZS1lRCkva1QsckQrPSh0LXJEKS9rVCxuRCs9KHItbkQpL2tUfWZ1bmN0aW9uIEpJdCgpe1R1LnBvaW50PUI0ZX1mdW5jdGlvbiBCNGUoZSx0KXtlKj13ZSx0Kj13ZTt2YXIgcj1hZSh0KTtZYT1yKmFlKGUpLGphPXIqSnQoZSksWGE9SnQodCksVHUucG9pbnQ9SDRlLFJUKFlhLGphLFhhKX1mdW5jdGlvbiBINGUoZSx0KXtlKj13ZSx0Kj13ZTt2YXIgcj1hZSh0KSxuPXIqYWUoZSksaT1yKkp0KGUpLG89SnQodCksYT1TbihScigoYT1qYSpvLVhhKmkpKmErKGE9WGEqbi1ZYSpvKSphKyhhPVlhKmktamEqbikqYSksWWEqbitqYSppK1hhKm8pO3REKz1hLGlEKz1hKihZYSsoWWE9bikpLG9EKz1hKihqYSsoamE9aSkpLGFEKz1hKihYYSsoWGE9bykpLFJUKFlhLGphLFhhKX1mdW5jdGlvbiBRSXQoKXtUdS5wb2ludD1tSn1mdW5jdGlvbiBWNGUoKXtUdS5wb2ludD1xNGV9ZnVuY3Rpb24gVTRlKCl7cjl0KHQ5dCxlOXQpLFR1LnBvaW50PW1KfWZ1bmN0aW9uIHE0ZShlLHQpe3Q5dD1lLGU5dD10LGUqPXdlLHQqPXdlLFR1LnBvaW50PXI5dDt2YXIgcj1hZSh0KTtZYT1yKmFlKGUpLGphPXIqSnQoZSksWGE9SnQodCksUlQoWWEsamEsWGEpfWZ1bmN0aW9uIHI5dChlLHQpe2UqPXdlLHQqPXdlO3ZhciByPWFlKHQpLG49ciphZShlKSxpPXIqSnQoZSksbz1KdCh0KSxhPWphKm8tWGEqaSxzPVhhKm4tWWEqbyxsPVlhKmktamEqbixjPVJyKGEqYStzKnMrbCpsKSx1PUpuKGMpLGg9YyYmLXUvYztmSis9aCphLHBKKz1oKnMsZEorPWgqbCx0RCs9dSxpRCs9dSooWWErKFlhPW4pKSxvRCs9dSooamErKGphPWkpKSxhRCs9dSooWGErKFhhPW8pKSxSVChZYSxqYSxYYSl9ZnVuY3Rpb24gbjl0KGUpe2tUPXREPWVEPXJEPW5EPWlEPW9EPWFEPWZKPXBKPWRKPTAsTW8oZSxUdSk7dmFyIHQ9Zkoscj1wSixuPWRKLGk9dCp0K3IqcituKm47cmV0dXJuIGk8aUomJih0PWlELHI9b0Qsbj1hRCx0RDxjZSYmKHQ9ZUQscj1yRCxuPW5EKSxpPXQqdCtyKnIrbipuLGk8aUopP1tOYU4sTmFOXTpbU24ocix0KSpVcixKbihuL1JyKGkpKSpVcl19dmFyIGtULHRELGVELHJELG5ELGlELG9ELGFELGZKLHBKLGRKLHQ5dCxlOXQsWWEsamEsWGEsVHUsaTl0PU0oKCk9PntscigpOyRwKCk7Z2coKTtUdT17c3BoZXJlOnFyLHBvaW50Om1KLGxpbmVTdGFydDpKSXQsbGluZUVuZDpRSXQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7VHUubGluZVN0YXJ0PVY0ZSxUdS5saW5lRW5kPVU0ZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe1R1LmxpbmVTdGFydD1KSXQsVHUubGluZUVuZD1RSXR9fX0pO2Z1bmN0aW9uIEZ5KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgbzl0PU0oKCk9Pnt9KTtmdW5jdGlvbiBzRChlLHQpe2Z1bmN0aW9uIHIobixpKXtyZXR1cm4gbj1lKG4saSksdChuWzBdLG5bMV0pfXJldHVybiBlLmludmVydCYmdC5pbnZlcnQmJihyLmludmVydD1mdW5jdGlvbihuLGkpe3JldHVybiBuPXQuaW52ZXJ0KG4saSksbiYmZS5pbnZlcnQoblswXSxuWzFdKX0pLHJ9dmFyIGdKPU0oKCk9Pnt9KTtmdW5jdGlvbiBfSihlLHQpe3JldHVybltlPnJyP2UtQmk6ZTwtcnI/ZStCaTplLHRdfWZ1bmN0aW9uIE5UKGUsdCxyKXtyZXR1cm4oZSU9QmkpP3R8fHI/c0Qoczl0KGUpLGw5dCh0LHIpKTpzOXQoZSk6dHx8cj9sOXQodCxyKTpfSn1mdW5jdGlvbiBhOXQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIHQrPWUsW3Q+cnI/dC1CaTp0PC1ycj90K0JpOnQscl19fWZ1bmN0aW9uIHM5dChlKXt2YXIgdD1hOXQoZSk7cmV0dXJuIHQuaW52ZXJ0PWE5dCgtZSksdH1mdW5jdGlvbiBsOXQoZSx0KXt2YXIgcj1hZShlKSxuPUp0KGUpLGk9YWUodCksbz1KdCh0KTtmdW5jdGlvbiBhKHMsbCl7dmFyIGM9YWUobCksdT1hZShzKSpjLGg9SnQocykqYyxmPUp0KGwpLHA9ZipyK3UqbjtyZXR1cm5bU24oaCppLXAqbyx1KnItZipuKSxKbihwKmkraCpvKV19cmV0dXJuIGEuaW52ZXJ0PWZ1bmN0aW9uKHMsbCl7dmFyIGM9YWUobCksdT1hZShzKSpjLGg9SnQocykqYyxmPUp0KGwpLHA9ZippLWgqbztyZXR1cm5bU24oaCppK2Yqbyx1KnIrcCpuKSxKbihwKnItdSpuKV19LGF9ZnVuY3Rpb24gbEQoZSl7ZT1OVChlWzBdKndlLGVbMV0qd2UsZS5sZW5ndGg+Mj9lWzJdKndlOjApO2Z1bmN0aW9uIHQocil7cmV0dXJuIHI9ZShyWzBdKndlLHJbMV0qd2UpLHJbMF0qPVVyLHJbMV0qPVVyLHJ9cmV0dXJuIHQuaW52ZXJ0PWZ1bmN0aW9uKHIpe3JldHVybiByPWUuaW52ZXJ0KHJbMF0qd2UsclsxXSp3ZSksclswXSo9VXIsclsxXSo9VXIscn0sdH12YXIgRFQ9TSgoKT0+e2dKKCk7bHIoKTtfSi5pbnZlcnQ9X0p9KTtmdW5jdGlvbiB5SihlLHQscixuLGksbyl7aWYoISFyKXt2YXIgYT1hZSh0KSxzPUp0KHQpLGw9bipyO2k9PW51bGw/KGk9dCtuKkJpLG89dC1sLzIpOihpPWM5dChhLGkpLG89Yzl0KGEsbyksKG4+MD9pPG86aT5vKSYmKGkrPW4qQmkpKTtmb3IodmFyIGMsdT1pO24+MD91Pm86dTxvO3UtPWwpYz1EeShbYSwtcyphZSh1KSwtcypKdCh1KV0pLGUucG9pbnQoY1swXSxjWzFdKX19ZnVuY3Rpb24gYzl0KGUsdCl7dD12Yyh0KSx0WzBdLT1lLE95KHQpO3ZhciByPUtOKC10WzFdKTtyZXR1cm4oKC10WzJdPDA/LXI6cikrQmktY2UpJUJpfWZ1bmN0aW9uIHU5dCgpe3ZhciBlPUZ5KFswLDBdKSx0PUZ5KDkwKSxyPUZ5KDYpLG4saSxvPXtwb2ludDphfTtmdW5jdGlvbiBhKGwsYyl7bi5wdXNoKGw9aShsLGMpKSxsWzBdKj1VcixsWzFdKj1Vcn1mdW5jdGlvbiBzKCl7dmFyIGw9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksYz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSp3ZSx1PXIuYXBwbHkodGhpcyxhcmd1bWVudHMpKndlO3JldHVybiBuPVtdLGk9TlQoLWxbMF0qd2UsLWxbMV0qd2UsMCkuaW52ZXJ0LHlKKG8sYyx1LDEpLGw9e3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltuXX0sbj1pPW51bGwsbH1yZXR1cm4gcy5jZW50ZXI9ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIGw9PSJmdW5jdGlvbiI/bDpGeShbK2xbMF0sK2xbMV1dKSxzKTplfSxzLnJhZGl1cz1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgbD09ImZ1bmN0aW9uIj9sOkZ5KCtsKSxzKTp0fSxzLnByZWNpc2lvbj1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgbD09ImZ1bmN0aW9uIj9sOkZ5KCtsKSxzKTpyfSxzfXZhciB2Sj1NKCgpPT57QTIoKTtvOXQoKTtscigpO0RUKCl9KTtmdW5jdGlvbiBjRCgpe3ZhciBlPVtdLHQ7cmV0dXJue3BvaW50OmZ1bmN0aW9uKHIsbil7dC5wdXNoKFtyLG5dKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZS5wdXNoKHQ9W10pfSxsaW5lRW5kOnFyLHJlam9pbjpmdW5jdGlvbigpe2UubGVuZ3RoPjEmJmUucHVzaChlLnBvcCgpLmNvbmNhdChlLnNoaWZ0KCkpKX0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHI9ZTtyZXR1cm4gZT1bXSx0PW51bGwscn19fXZhciB4Sj1NKCgpPT57JHAoKX0pO2Z1bmN0aW9uIEkyKGUsdCl7cmV0dXJuIFllKGVbMF0tdFswXSk8Y2UmJlllKGVbMV0tdFsxXSk8Y2V9dmFyIGJKPU0oKCk9PntscigpfSk7ZnVuY3Rpb24gdUQoZSx0LHIsbil7dGhpcy54PWUsdGhpcy56PXQsdGhpcy5vPXIsdGhpcy5lPW4sdGhpcy52PSExLHRoaXMubj10aGlzLnA9bnVsbH1mdW5jdGlvbiBoRChlLHQscixuLGkpe3ZhciBvPVtdLGE9W10scyxsO2lmKGUuZm9yRWFjaChmdW5jdGlvbihkKXtpZighKChnPWQubGVuZ3RoLTEpPD0wKSl7dmFyIGcsXz1kWzBdLHk9ZFtnXSx4O2lmKEkyKF8seSkpe2ZvcihpLmxpbmVTdGFydCgpLHM9MDtzPGc7KytzKWkucG9pbnQoKF89ZFtzXSlbMF0sX1sxXSk7aS5saW5lRW5kKCk7cmV0dXJufW8ucHVzaCh4PW5ldyB1RChfLGQsbnVsbCwhMCkpLGEucHVzaCh4Lm89bmV3IHVEKF8sbnVsbCx4LCExKSksby5wdXNoKHg9bmV3IHVEKHksZCxudWxsLCExKSksYS5wdXNoKHgubz1uZXcgdUQoeSxudWxsLHgsITApKX19KSwhIW8ubGVuZ3RoKXtmb3IoYS5zb3J0KHQpLGg5dChvKSxoOXQoYSkscz0wLGw9YS5sZW5ndGg7czxsOysrcylhW3NdLmU9cj0hcjtmb3IodmFyIGM9b1swXSx1LGg7Oyl7Zm9yKHZhciBmPWMscD0hMDtmLnY7KWlmKChmPWYubik9PT1jKXJldHVybjt1PWYueixpLmxpbmVTdGFydCgpO2Rve2lmKGYudj1mLm8udj0hMCxmLmUpe2lmKHApZm9yKHM9MCxsPXUubGVuZ3RoO3M8bDsrK3MpaS5wb2ludCgoaD11W3NdKVswXSxoWzFdKTtlbHNlIG4oZi54LGYubi54LDEsaSk7Zj1mLm59ZWxzZXtpZihwKWZvcih1PWYucC56LHM9dS5sZW5ndGgtMTtzPj0wOy0tcylpLnBvaW50KChoPXVbc10pWzBdLGhbMV0pO2Vsc2UgbihmLngsZi5wLngsLTEsaSk7Zj1mLnB9Zj1mLm8sdT1mLnoscD0hcH13aGlsZSghZi52KTtpLmxpbmVFbmQoKX19fWZ1bmN0aW9uIGg5dChlKXtpZighISh0PWUubGVuZ3RoKSl7Zm9yKHZhciB0LHI9MCxuPWVbMF0saTsrK3I8dDspbi5uPWk9ZVtyXSxpLnA9bixuPWk7bi5uPWk9ZVswXSxpLnA9bn19dmFyIHdKPU0oKCk9PntiSigpfSk7ZnVuY3Rpb24gZkQoZSx0KXt2YXIgcj10WzBdLG49dFsxXSxpPVtKdChyKSwtYWUociksMF0sbz0wLGE9MDtTSi5yZXNldCgpO2Zvcih2YXIgcz0wLGw9ZS5sZW5ndGg7czxsOysrcylpZighISh1PShjPWVbc10pLmxlbmd0aCkpZm9yKHZhciBjLHUsaD1jW3UtMV0sZj1oWzBdLHA9aFsxXS8yK1QyLGQ9SnQocCksZz1hZShwKSxfPTA7Xzx1OysrXyxmPXgsZD1TLGc9QyxoPXkpe3ZhciB5PWNbX10seD15WzBdLGI9eVsxXS8yK1QyLFM9SnQoYiksQz1hZShiKSxQPXgtZixrPVA+PTA/MTotMSxPPWsqUCxEPU8+cnIsQj1kKlM7aWYoU0ouYWRkKFNuKEIqaypKdChPKSxnKkMrQiphZShPKSkpLG8rPUQ/UCtrKkJpOlAsRF5mPj1yXng+PXIpe3ZhciBJPUtwKHZjKGgpLHZjKHkpKTtPeShJKTt2YXIgTD1LcChpLEkpO095KEwpO3ZhciBSPShEXlA+PTA/LTE6MSkqSm4oTFsyXSk7KG4+Unx8bj09PVImJihJWzBdfHxJWzFdKSkmJihhKz1EXlA+PTA/MTotMSl9fXJldHVybihvPC1jZXx8bzxjZSYmU0o8LWNlKV5hJjF9dmFyIFNKLE1KPU0oKCk9PntSeSgpO0EyKCk7bHIoKTtTSj1BcygpfSk7ZnVuY3Rpb24geWcoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIEJ5PU0oKCk9Pnt9KTtmdW5jdGlvbiBFSihlKXtyZXR1cm4gZS5sZW5ndGg9PT0xJiYoZT1HNGUoZSkpLHtsZWZ0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik8MD9uPW8rMTppPW99cmV0dXJuIG59LHJpZ2h0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik+MD9pPW86bj1vKzF9cmV0dXJuIG59fX1mdW5jdGlvbiBHNGUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIHlnKGUodCkscil9fXZhciBUSj1NKCgpPT57QnkoKX0pO3ZhciBmOXQsVzRlLFk0ZSxDSj1NKCgpPT57QnkoKTtUSigpO2Y5dD1FSih5ZyksVzRlPWY5dC5yaWdodCxZNGU9Zjl0LmxlZnR9KTt2YXIgQUo9TSgoKT0+e30pO3ZhciBwOXQ9TSgoKT0+e0FKKCl9KTt2YXIgZDl0PU0oKCk9Pnt9KTt2YXIgTDI9TSgoKT0+e30pO3ZhciBQSj1NKCgpPT57TDIoKX0pO3ZhciBJSj1NKCgpPT57UEooKX0pO3ZhciBMSj1NKCgpPT57fSk7dmFyIG05dCxYNGUsJDRlLGtKPU0oKCk9PnttOXQ9QXJyYXkucHJvdG90eXBlLFg0ZT1tOXQuc2xpY2UsJDRlPW05dC5tYXB9KTt2YXIgZzl0PU0oKCk9Pnt9KTt2YXIgXzl0PU0oKCk9Pnt9KTtmdW5jdGlvbiBRcChlLHQscil7ZT0rZSx0PSt0LHI9KGk9YXJndW1lbnRzLmxlbmd0aCk8Mj8odD1lLGU9MCwxKTppPDM/MTorcjtmb3IodmFyIG49LTEsaT1NYXRoLm1heCgwLE1hdGguY2VpbCgodC1lKS9yKSl8MCxvPW5ldyBBcnJheShpKTsrK248aTspb1tuXT1lK24qcjtyZXR1cm4gb312YXIgUko9TSgoKT0+e30pO3ZhciBrMG4sUjBuLE4wbixOSj1NKCgpPT57azBuPU1hdGguc3FydCg1MCksUjBuPU1hdGguc3FydCgxMCksTjBuPU1hdGguc3FydCgyKX0pO3ZhciBESj1NKCgpPT57fSk7dmFyIHk5dD1NKCgpPT57a0ooKTtDSigpO2c5dCgpO0xKKCk7Xzl0KCk7UkooKTtOSigpO0RKKCl9KTt2YXIgZEQ9TSgoKT0+e0wyKCl9KTt2YXIgeDl0PU0oKCk9PntrSigpO0J5KCk7TDIoKTtkRCgpfSk7dmFyIGI5dD1NKCgpPT57SUooKX0pO3ZhciB3OXQ9TSgoKT0+e30pO3ZhciBTOXQ9TSgoKT0+e0wyKCl9KTt2YXIgTTl0PU0oKCk9PntCeSgpO0wyKCk7ZEQoKX0pO2Z1bmN0aW9uIE9UKGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyLG49LTEsaT0wLG8sYTsrK248dDspaSs9ZVtuXS5sZW5ndGg7Zm9yKG89bmV3IEFycmF5KGkpOy0tdD49MDspZm9yKGE9ZVt0XSxyPWEubGVuZ3RoOy0tcj49MDspb1stLWldPWFbcl07cmV0dXJuIG99dmFyIEU5dD1NKCgpPT57fSk7dmFyIE9KPU0oKCk9Pnt9KTt2YXIgVDl0PU0oKCk9Pnt9KTt2YXIgQzl0PU0oKCk9PntCeSgpfSk7dmFyIEE5dD1NKCgpPT57fSk7dmFyIFA5dD1NKCgpPT57fSk7dmFyIHpKPU0oKCk9PntPSigpfSk7dmFyIEk5dD1NKCgpPT57ekooKX0pO3ZhciBtRD1NKCgpPT57Q0ooKTtCeSgpO1RKKCk7cDl0KCk7ZDl0KCk7SUooKTtMSigpO3k5dCgpO3g5dCgpO2I5dCgpO0RKKCk7dzl0KCk7Uzl0KCk7TTl0KCk7RTl0KCk7T0ooKTtBSigpO1Q5dCgpO2REKCk7UkooKTtDOXQoKTtBOXQoKTtQOXQoKTtOSigpO3pKKCk7UEooKTtJOXQoKX0pO2Z1bmN0aW9uIGdEKGUsdCxyLG4pe3JldHVybiBmdW5jdGlvbihpKXt2YXIgbz10KGkpLGE9Y0QoKSxzPXQoYSksbD0hMSxjLHUsaCxmPXtwb2ludDpwLGxpbmVTdGFydDpnLGxpbmVFbmQ6Xyxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtmLnBvaW50PXksZi5saW5lU3RhcnQ9eCxmLmxpbmVFbmQ9Yix1PVtdLGM9W119LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtmLnBvaW50PXAsZi5saW5lU3RhcnQ9ZyxmLmxpbmVFbmQ9Xyx1PU9UKHUpO3ZhciBTPWZEKGMsbik7dS5sZW5ndGg/KGx8fChpLnBvbHlnb25TdGFydCgpLGw9ITApLGhEKHUsaVBlLFMscixpKSk6UyYmKGx8fChpLnBvbHlnb25TdGFydCgpLGw9ITApLGkubGluZVN0YXJ0KCkscihudWxsLG51bGwsMSxpKSxpLmxpbmVFbmQoKSksbCYmKGkucG9seWdvbkVuZCgpLGw9ITEpLHU9Yz1udWxsfSxzcGhlcmU6ZnVuY3Rpb24oKXtpLnBvbHlnb25TdGFydCgpLGkubGluZVN0YXJ0KCkscihudWxsLG51bGwsMSxpKSxpLmxpbmVFbmQoKSxpLnBvbHlnb25FbmQoKX19O2Z1bmN0aW9uIHAoUyxDKXtlKFMsQykmJmkucG9pbnQoUyxDKX1mdW5jdGlvbiBkKFMsQyl7by5wb2ludChTLEMpfWZ1bmN0aW9uIGcoKXtmLnBvaW50PWQsby5saW5lU3RhcnQoKX1mdW5jdGlvbiBfKCl7Zi5wb2ludD1wLG8ubGluZUVuZCgpfWZ1bmN0aW9uIHkoUyxDKXtoLnB1c2goW1MsQ10pLHMucG9pbnQoUyxDKX1mdW5jdGlvbiB4KCl7cy5saW5lU3RhcnQoKSxoPVtdfWZ1bmN0aW9uIGIoKXt5KGhbMF1bMF0saFswXVsxXSkscy5saW5lRW5kKCk7dmFyIFM9cy5jbGVhbigpLEM9YS5yZXN1bHQoKSxQLGs9Qy5sZW5ndGgsTyxELEI7aWYoaC5wb3AoKSxjLnB1c2goaCksaD1udWxsLCEhayl7aWYoUyYxKXtpZihEPUNbMF0sKE89RC5sZW5ndGgtMSk+MCl7Zm9yKGx8fChpLnBvbHlnb25TdGFydCgpLGw9ITApLGkubGluZVN0YXJ0KCksUD0wO1A8TzsrK1ApaS5wb2ludCgoQj1EW1BdKVswXSxCWzFdKTtpLmxpbmVFbmQoKX1yZXR1cm59az4xJiZTJjImJkMucHVzaChDLnBvcCgpLmNvbmNhdChDLnNoaWZ0KCkpKSx1LnB1c2goQy5maWx0ZXIoblBlKSl9fXJldHVybiBmfX1mdW5jdGlvbiBuUGUoZSl7cmV0dXJuIGUubGVuZ3RoPjF9ZnVuY3Rpb24gaVBlKGUsdCl7cmV0dXJuKChlPWUueClbMF08MD9lWzFdLUJuLWNlOkJuLWVbMV0pLSgodD10LngpWzBdPDA/dFsxXS1Cbi1jZTpCbi10WzFdKX12YXIgRko9TSgoKT0+e3hKKCk7d0ooKTtscigpO01KKCk7bUQoKX0pO2Z1bmN0aW9uIG9QZShlKXt2YXIgdD1OYU4scj1OYU4sbj1OYU4saTtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZS5saW5lU3RhcnQoKSxpPTF9LHBvaW50OmZ1bmN0aW9uKG8sYSl7dmFyIHM9bz4wP3JyOi1ycixsPVllKG8tdCk7WWUobC1ycik8Y2U/KGUucG9pbnQodCxyPShyK2EpLzI+MD9CbjotQm4pLGUucG9pbnQobixyKSxlLmxpbmVFbmQoKSxlLmxpbmVTdGFydCgpLGUucG9pbnQocyxyKSxlLnBvaW50KG8sciksaT0wKTpuIT09cyYmbD49cnImJihZZSh0LW4pPGNlJiYodC09bipjZSksWWUoby1zKTxjZSYmKG8tPXMqY2UpLHI9YVBlKHQscixvLGEpLGUucG9pbnQobixyKSxlLmxpbmVFbmQoKSxlLmxpbmVTdGFydCgpLGUucG9pbnQocyxyKSxpPTApLGUucG9pbnQodD1vLHI9YSksbj1zfSxsaW5lRW5kOmZ1bmN0aW9uKCl7ZS5saW5lRW5kKCksdD1yPU5hTn0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gMi1pfX19ZnVuY3Rpb24gYVBlKGUsdCxyLG4pe3ZhciBpLG8sYT1KdChlLXIpO3JldHVybiBZZShhKT5jZT95YygoSnQodCkqKG89YWUobikpKkp0KHIpLUp0KG4pKihpPWFlKHQpKSpKdChlKSkvKGkqbyphKSk6KHQrbikvMn1mdW5jdGlvbiBzUGUoZSx0LHIsbil7dmFyIGk7aWYoZT09bnVsbClpPXIqQm4sbi5wb2ludCgtcnIsaSksbi5wb2ludCgwLGkpLG4ucG9pbnQocnIsaSksbi5wb2ludChyciwwKSxuLnBvaW50KHJyLC1pKSxuLnBvaW50KDAsLWkpLG4ucG9pbnQoLXJyLC1pKSxuLnBvaW50KC1yciwwKSxuLnBvaW50KC1ycixpKTtlbHNlIGlmKFllKGVbMF0tdFswXSk+Y2Upe3ZhciBvPWVbMF08dFswXT9ycjotcnI7aT1yKm8vMixuLnBvaW50KC1vLGkpLG4ucG9pbnQoMCxpKSxuLnBvaW50KG8saSl9ZWxzZSBuLnBvaW50KHRbMF0sdFsxXSl9dmFyIHpULEJKPU0oKCk9PntGSigpO2xyKCk7elQ9Z0QoZnVuY3Rpb24oKXtyZXR1cm4hMH0sb1BlLHNQZSxbLXJyLC1Cbl0pfSk7ZnVuY3Rpb24gX0QoZSl7dmFyIHQ9YWUoZSkscj02KndlLG49dD4wLGk9WWUodCk+Y2U7ZnVuY3Rpb24gbyh1LGgsZixwKXt5SihwLGUscixmLHUsaCl9ZnVuY3Rpb24gYSh1LGgpe3JldHVybiBhZSh1KSphZShoKT50fWZ1bmN0aW9uIHModSl7dmFyIGgsZixwLGQsZztyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZD1wPSExLGc9MX0scG9pbnQ6ZnVuY3Rpb24oXyx5KXt2YXIgeD1bXyx5XSxiLFM9YShfLHkpLEM9bj9TPzA6YyhfLHkpOlM/YyhfKyhfPDA/cnI6LXJyKSx5KTowO2lmKCFoJiYoZD1wPVMpJiZ1LmxpbmVTdGFydCgpLFMhPT1wJiYoYj1sKGgseCksKCFifHxJMihoLGIpfHxJMih4LGIpKSYmKHhbMF0rPWNlLHhbMV0rPWNlLFM9YSh4WzBdLHhbMV0pKSksUyE9PXApZz0wLFM/KHUubGluZVN0YXJ0KCksYj1sKHgsaCksdS5wb2ludChiWzBdLGJbMV0pKTooYj1sKGgseCksdS5wb2ludChiWzBdLGJbMV0pLHUubGluZUVuZCgpKSxoPWI7ZWxzZSBpZihpJiZoJiZuXlMpe3ZhciBQOyEoQyZmKSYmKFA9bCh4LGgsITApKSYmKGc9MCxuPyh1LmxpbmVTdGFydCgpLHUucG9pbnQoUFswXVswXSxQWzBdWzFdKSx1LnBvaW50KFBbMV1bMF0sUFsxXVsxXSksdS5saW5lRW5kKCkpOih1LnBvaW50KFBbMV1bMF0sUFsxXVsxXSksdS5saW5lRW5kKCksdS5saW5lU3RhcnQoKSx1LnBvaW50KFBbMF1bMF0sUFswXVsxXSkpKX1TJiYoIWh8fCFJMihoLHgpKSYmdS5wb2ludCh4WzBdLHhbMV0pLGg9eCxwPVMsZj1DfSxsaW5lRW5kOmZ1bmN0aW9uKCl7cCYmdS5saW5lRW5kKCksaD1udWxsfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiBnfChkJiZwKTw8MX19fWZ1bmN0aW9uIGwodSxoLGYpe3ZhciBwPXZjKHUpLGQ9dmMoaCksZz1bMSwwLDBdLF89S3AocCxkKSx5PVBUKF8sXykseD1fWzBdLGI9eS14Kng7aWYoIWIpcmV0dXJuIWYmJnU7dmFyIFM9dCp5L2IsQz0tdCp4L2IsUD1LcChnLF8pLGs9SVQoZyxTKSxPPUlUKF8sQyk7UU4oayxPKTt2YXIgRD1QLEI9UFQoayxEKSxJPVBUKEQsRCksTD1CKkItSSooUFQoayxrKS0xKTtpZighKEw8MCkpe3ZhciBSPVJyKEwpLEY9SVQoRCwoLUItUikvSSk7aWYoUU4oRixrKSxGPUR5KEYpLCFmKXJldHVybiBGO3ZhciB6PXVbMF0sVT1oWzBdLFc9dVsxXSxaPWhbMV0scnQ7VTx6JiYocnQ9eix6PVUsVT1ydCk7dmFyIG90PVUteixzdD1ZZShvdC1ycik8Y2UsU3Q9c3R8fG90PGNlO2lmKCFzdCYmWjxXJiYocnQ9VyxXPVosWj1ydCksU3Q/c3Q/VytaPjBeRlsxXTwoWWUoRlswXS16KTxjZT9XOlopOlc8PUZbMV0mJkZbMV08PVo6b3Q+cnJeKHo8PUZbMF0mJkZbMF08PVUpKXt2YXIgYnQ9SVQoRCwoLUIrUikvSSk7cmV0dXJuIFFOKGJ0LGspLFtGLER5KGJ0KV19fX1mdW5jdGlvbiBjKHUsaCl7dmFyIGY9bj9lOnJyLWUscD0wO3JldHVybiB1PC1mP3B8PTE6dT5mJiYocHw9MiksaDwtZj9wfD00Omg+ZiYmKHB8PTgpLHB9cmV0dXJuIGdEKGEscyxvLG4/WzAsLWVdOlstcnIsZS1ycl0pfXZhciBISj1NKCgpPT57QTIoKTt2SigpO2xyKCk7YkooKTtGSigpfSk7ZnVuY3Rpb24gTDl0KGUsdCxyLG4saSxvKXt2YXIgYT1lWzBdLHM9ZVsxXSxsPXRbMF0sYz10WzFdLHU9MCxoPTEsZj1sLWEscD1jLXMsZDtpZihkPXItYSwhKCFmJiZkPjApKXtpZihkLz1mLGY8MCl7aWYoZDx1KXJldHVybjtkPGgmJihoPWQpfWVsc2UgaWYoZj4wKXtpZihkPmgpcmV0dXJuO2Q+dSYmKHU9ZCl9aWYoZD1pLWEsISghZiYmZDwwKSl7aWYoZC89ZixmPDApe2lmKGQ+aClyZXR1cm47ZD51JiYodT1kKX1lbHNlIGlmKGY+MCl7aWYoZDx1KXJldHVybjtkPGgmJihoPWQpfWlmKGQ9bi1zLCEoIXAmJmQ+MCkpe2lmKGQvPXAscDwwKXtpZihkPHUpcmV0dXJuO2Q8aCYmKGg9ZCl9ZWxzZSBpZihwPjApe2lmKGQ+aClyZXR1cm47ZD51JiYodT1kKX1pZihkPW8tcywhKCFwJiZkPDApKXtpZihkLz1wLHA8MCl7aWYoZD5oKXJldHVybjtkPnUmJih1PWQpfWVsc2UgaWYocD4wKXtpZihkPHUpcmV0dXJuO2Q8aCYmKGg9ZCl9cmV0dXJuIHU+MCYmKGVbMF09YSt1KmYsZVsxXT1zK3UqcCksaDwxJiYodFswXT1hK2gqZix0WzFdPXMraCpwKSwhMH19fX19dmFyIGs5dD1NKCgpPT57fSk7ZnVuY3Rpb24gdGQoZSx0LHIsbil7ZnVuY3Rpb24gaShjLHUpe3JldHVybiBlPD1jJiZjPD1yJiZ0PD11JiZ1PD1ufWZ1bmN0aW9uIG8oYyx1LGgsZil7dmFyIHA9MCxkPTA7aWYoYz09bnVsbHx8KHA9YShjLGgpKSE9PShkPWEodSxoKSl8fGwoYyx1KTwwXmg+MClkbyBmLnBvaW50KHA9PT0wfHxwPT09Mz9lOnIscD4xP246dCk7d2hpbGUoKHA9KHAraCs0KSU0KSE9PWQpO2Vsc2UgZi5wb2ludCh1WzBdLHVbMV0pfWZ1bmN0aW9uIGEoYyx1KXtyZXR1cm4gWWUoY1swXS1lKTxjZT91PjA/MDozOlllKGNbMF0tcik8Y2U/dT4wPzI6MTpZZShjWzFdLXQpPGNlP3U+MD8xOjA6dT4wPzM6Mn1mdW5jdGlvbiBzKGMsdSl7cmV0dXJuIGwoYy54LHUueCl9ZnVuY3Rpb24gbChjLHUpe3ZhciBoPWEoYywxKSxmPWEodSwxKTtyZXR1cm4gaCE9PWY/aC1mOmg9PT0wP3VbMV0tY1sxXTpoPT09MT9jWzBdLXVbMF06aD09PTI/Y1sxXS11WzFdOnVbMF0tY1swXX1yZXR1cm4gZnVuY3Rpb24oYyl7dmFyIHU9YyxoPWNEKCksZixwLGQsZyxfLHkseCxiLFMsQyxQLGs9e3BvaW50Ok8sbGluZVN0YXJ0OkwsbGluZUVuZDpSLHBvbHlnb25TdGFydDpCLHBvbHlnb25FbmQ6SX07ZnVuY3Rpb24gTyh6LFUpe2koeixVKSYmdS5wb2ludCh6LFUpfWZ1bmN0aW9uIEQoKXtmb3IodmFyIHo9MCxVPTAsVz1wLmxlbmd0aDtVPFc7KytVKWZvcih2YXIgWj1wW1VdLHJ0PTEsb3Q9Wi5sZW5ndGgsc3Q9WlswXSxTdCxidCxNdD1zdFswXSxsdD1zdFsxXTtydDxvdDsrK3J0KVN0PU10LGJ0PWx0LHN0PVpbcnRdLE10PXN0WzBdLGx0PXN0WzFdLGJ0PD1uP2x0Pm4mJihNdC1TdCkqKG4tYnQpPihsdC1idCkqKGUtU3QpJiYrK3o6bHQ8PW4mJihNdC1TdCkqKG4tYnQpPChsdC1idCkqKGUtU3QpJiYtLXo7cmV0dXJuIHp9ZnVuY3Rpb24gQigpe3U9aCxmPVtdLHA9W10sUD0hMH1mdW5jdGlvbiBJKCl7dmFyIHo9RCgpLFU9UCYmeixXPShmPU9UKGYpKS5sZW5ndGg7KFV8fFcpJiYoYy5wb2x5Z29uU3RhcnQoKSxVJiYoYy5saW5lU3RhcnQoKSxvKG51bGwsbnVsbCwxLGMpLGMubGluZUVuZCgpKSxXJiZoRChmLHMseixvLGMpLGMucG9seWdvbkVuZCgpKSx1PWMsZj1wPWQ9bnVsbH1mdW5jdGlvbiBMKCl7ay5wb2ludD1GLHAmJnAucHVzaChkPVtdKSxDPSEwLFM9ITEseD1iPU5hTn1mdW5jdGlvbiBSKCl7ZiYmKEYoZyxfKSx5JiZTJiZoLnJlam9pbigpLGYucHVzaChoLnJlc3VsdCgpKSksay5wb2ludD1PLFMmJnUubGluZUVuZCgpfWZ1bmN0aW9uIEYoeixVKXt2YXIgVz1pKHosVSk7aWYocCYmZC5wdXNoKFt6LFVdKSxDKWc9eixfPVUseT1XLEM9ITEsVyYmKHUubGluZVN0YXJ0KCksdS5wb2ludCh6LFUpKTtlbHNlIGlmKFcmJlMpdS5wb2ludCh6LFUpO2Vsc2V7dmFyIFo9W3g9TWF0aC5tYXgoeUQsTWF0aC5taW4oRlQseCkpLGI9TWF0aC5tYXgoeUQsTWF0aC5taW4oRlQsYikpXSxydD1bej1NYXRoLm1heCh5RCxNYXRoLm1pbihGVCx6KSksVT1NYXRoLm1heCh5RCxNYXRoLm1pbihGVCxVKSldO0w5dChaLHJ0LGUsdCxyLG4pPyhTfHwodS5saW5lU3RhcnQoKSx1LnBvaW50KFpbMF0sWlsxXSkpLHUucG9pbnQocnRbMF0scnRbMV0pLFd8fHUubGluZUVuZCgpLFA9ITEpOlcmJih1LmxpbmVTdGFydCgpLHUucG9pbnQoeixVKSxQPSExKX14PXosYj1VLFM9V31yZXR1cm4ga319dmFyIEZULHlELEJUPU0oKCk9PntscigpO3hKKCk7azl0KCk7d0ooKTttRCgpO0ZUPTFlOSx5RD0tRlR9KTtmdW5jdGlvbiBSOXQoKXt2YXIgZT0wLHQ9MCxyPTk2MCxuPTUwMCxpLG8sYTtyZXR1cm4gYT17c3RyZWFtOmZ1bmN0aW9uKHMpe3JldHVybiBpJiZvPT09cz9pOmk9dGQoZSx0LHIsbikobz1zKX0sZXh0ZW50OmZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPStzWzBdWzBdLHQ9K3NbMF1bMV0scj0rc1sxXVswXSxuPStzWzFdWzFdLGk9bz1udWxsLGEpOltbZSx0XSxbcixuXV19fX12YXIgTjl0PU0oKCk9PntCVCgpfSk7ZnVuY3Rpb24gbFBlKCl7azIucG9pbnQ9dVBlLGsyLmxpbmVFbmQ9Y1BlfWZ1bmN0aW9uIGNQZSgpe2syLnBvaW50PWsyLmxpbmVFbmQ9cXJ9ZnVuY3Rpb24gdVBlKGUsdCl7ZSo9d2UsdCo9d2UsVUo9ZSx2RD1KdCh0KSx4RD1hZSh0KSxrMi5wb2ludD1oUGV9ZnVuY3Rpb24gaFBlKGUsdCl7ZSo9d2UsdCo9d2U7dmFyIHI9SnQodCksbj1hZSh0KSxpPVllKGUtVUopLG89YWUoaSksYT1KdChpKSxzPW4qYSxsPXhEKnItdkQqbipvLGM9dkQqcit4RCpuKm87VkouYWRkKFNuKFJyKHMqcytsKmwpLGMpKSxVSj1lLHZEPXIseEQ9bn1mdW5jdGlvbiBiRChlKXtyZXR1cm4gVkoucmVzZXQoKSxNbyhlLGsyKSwrVkp9dmFyIFZKLFVKLHZELHhELGsyLHFKPU0oKCk9PntSeSgpO2xyKCk7JHAoKTtnZygpO1ZKPUFzKCksazI9e3NwaGVyZTpxcixwb2ludDpxcixsaW5lU3RhcnQ6bFBlLGxpbmVFbmQ6cXIscG9seWdvblN0YXJ0OnFyLHBvbHlnb25FbmQ6cXJ9fSk7ZnVuY3Rpb24gSHkoZSx0KXtyZXR1cm4gR0pbMF09ZSxHSlsxXT10LGJEKGZQZSl9dmFyIEdKLGZQZSxXSj1NKCgpPT57cUooKTtHSj1bbnVsbCxudWxsXSxmUGU9e3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOkdKfX0pO2Z1bmN0aW9uIHdEKGUsdCl7cmV0dXJuIGUmJk85dC5oYXNPd25Qcm9wZXJ0eShlLnR5cGUpP085dFtlLnR5cGVdKGUsdCk6ITF9ZnVuY3Rpb24gejl0KGUsdCl7cmV0dXJuIEh5KGUsdCk9PT0wfWZ1bmN0aW9uIEY5dChlLHQpe3ZhciByPUh5KGVbMF0sZVsxXSksbj1IeShlWzBdLHQpLGk9SHkodCxlWzFdKTtyZXR1cm4gbitpPD1yK2NlfWZ1bmN0aW9uIEI5dChlLHQpe3JldHVybiEhZkQoZS5tYXAocFBlKSxIOXQodCkpfWZ1bmN0aW9uIHBQZShlKXtyZXR1cm4gZT1lLm1hcChIOXQpLGUucG9wKCksZX1mdW5jdGlvbiBIOXQoZSl7cmV0dXJuW2VbMF0qd2UsZVsxXSp3ZV19ZnVuY3Rpb24gVjl0KGUsdCl7cmV0dXJuKGUmJkQ5dC5oYXNPd25Qcm9wZXJ0eShlLnR5cGUpP0Q5dFtlLnR5cGVdOndEKShlLHQpfXZhciBEOXQsTzl0LFU5dD1NKCgpPT57TUooKTtXSigpO2xyKCk7RDl0PXtGZWF0dXJlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHdEKGUuZ2VvbWV0cnksdCl9LEZlYXR1cmVDb2xsZWN0aW9uOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuZmVhdHVyZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylpZih3RChyW25dLmdlb21ldHJ5LHQpKXJldHVybiEwO3JldHVybiExfX0sTzl0PXtTcGhlcmU6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sUG9pbnQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gejl0KGUuY29vcmRpbmF0ZXMsdCl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKHo5dChyW25dLHQpKXJldHVybiEwO3JldHVybiExfSxMaW5lU3RyaW5nOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEY5dChlLmNvb3JkaW5hdGVzLHQpfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKEY5dChyW25dLHQpKXJldHVybiEwO3JldHVybiExfSxQb2x5Z29uOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEI5dChlLmNvb3JkaW5hdGVzLHQpfSxNdWx0aVBvbHlnb246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKEI5dChyW25dLHQpKXJldHVybiEwO3JldHVybiExfSxHZW9tZXRyeUNvbGxlY3Rpb246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5nZW9tZXRyaWVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaWYod0QocltuXSx0KSlyZXR1cm4hMDtyZXR1cm4hMX19fSk7ZnVuY3Rpb24gcTl0KGUsdCxyKXt2YXIgbj1RcChlLHQtY2UscikuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24obyl7cmV0dXJuW2ksb119KX19ZnVuY3Rpb24gRzl0KGUsdCxyKXt2YXIgbj1RcChlLHQtY2UscikuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24obyl7cmV0dXJuW28saV19KX19ZnVuY3Rpb24gU0QoKXt2YXIgZSx0LHIsbixpLG8sYSxzLGw9MTAsYz1sLHU9OTAsaD0zNjAsZixwLGQsZyxfPTIuNTtmdW5jdGlvbiB5KCl7cmV0dXJue3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6eCgpfX1mdW5jdGlvbiB4KCl7cmV0dXJuIFFwKENUKG4vdSkqdSxyLHUpLm1hcChkKS5jb25jYXQoUXAoQ1Qocy9oKSpoLGEsaCkubWFwKGcpKS5jb25jYXQoUXAoQ1QodC9sKSpsLGUsbCkuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBZZShiJXUpPmNlfSkubWFwKGYpKS5jb25jYXQoUXAoQ1Qoby9jKSpjLGksYykuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBZZShiJWgpPmNlfSkubWFwKHApKX1yZXR1cm4geS5saW5lcz1mdW5jdGlvbigpe3JldHVybiB4KCkubWFwKGZ1bmN0aW9uKGIpe3JldHVybnt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpifX0pfSx5Lm91dGxpbmU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W2QobikuY29uY2F0KGcoYSkuc2xpY2UoMSksZChyKS5yZXZlcnNlKCkuc2xpY2UoMSksZyhzKS5yZXZlcnNlKCkuc2xpY2UoMSkpXX19LHkuZXh0ZW50PWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3kuZXh0ZW50TWFqb3IoYikuZXh0ZW50TWlub3IoYik6eS5leHRlbnRNaW5vcigpfSx5LmV4dGVudE1ham9yPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStiWzBdWzBdLHI9K2JbMV1bMF0scz0rYlswXVsxXSxhPStiWzFdWzFdLG4+ciYmKGI9bixuPXIscj1iKSxzPmEmJihiPXMscz1hLGE9YikseS5wcmVjaXNpb24oXykpOltbbixzXSxbcixhXV19LHkuZXh0ZW50TWlub3I9ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2JbMF1bMF0sZT0rYlsxXVswXSxvPStiWzBdWzFdLGk9K2JbMV1bMV0sdD5lJiYoYj10LHQ9ZSxlPWIpLG8+aSYmKGI9byxvPWksaT1iKSx5LnByZWNpc2lvbihfKSk6W1t0LG9dLFtlLGldXX0seS5zdGVwPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3kuc3RlcE1ham9yKGIpLnN0ZXBNaW5vcihiKTp5LnN0ZXBNaW5vcigpfSx5LnN0ZXBNYWpvcj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rYlswXSxoPStiWzFdLHkpOlt1LGhdfSx5LnN0ZXBNaW5vcj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0rYlswXSxjPStiWzFdLHkpOltsLGNdfSx5LnByZWNpc2lvbj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz0rYixmPXE5dChvLGksOTApLHA9Rzl0KHQsZSxfKSxkPXE5dChzLGEsOTApLGc9Rzl0KG4scixfKSx5KTpffSx5LmV4dGVudE1ham9yKFtbLTE4MCwtOTArY2VdLFsxODAsOTAtY2VdXSkuZXh0ZW50TWlub3IoW1stMTgwLC04MC1jZV0sWzE4MCw4MCtjZV1dKX1mdW5jdGlvbiBXOXQoKXtyZXR1cm4gU0QoKSgpfXZhciBZOXQ9TSgoKT0+e21EKCk7bHIoKX0pO2Z1bmN0aW9uIGo5dChlLHQpe3ZhciByPWVbMF0qd2Usbj1lWzFdKndlLGk9dFswXSp3ZSxvPXRbMV0qd2UsYT1hZShuKSxzPUp0KG4pLGw9YWUobyksYz1KdChvKSx1PWEqYWUociksaD1hKkp0KHIpLGY9bCphZShpKSxwPWwqSnQoaSksZD0yKkpuKFJyKG9KKG8tbikrYSpsKm9KKGktcikpKSxnPUp0KGQpLF89ZD9mdW5jdGlvbih5KXt2YXIgeD1KdCh5Kj1kKS9nLGI9SnQoZC15KS9nLFM9Yip1K3gqZixDPWIqaCt4KnAsUD1iKnMreCpjO3JldHVybltTbihDLFMpKlVyLFNuKFAsUnIoUypTK0MqQykpKlVyXX06ZnVuY3Rpb24oKXtyZXR1cm5bcipVcixuKlVyXX07cmV0dXJuIF8uZGlzdGFuY2U9ZCxffXZhciBYOXQ9TSgoKT0+e2xyKCl9KTtmdW5jdGlvbiBvZihlKXtyZXR1cm4gZX12YXIgTUQ9TSgoKT0+e30pO2Z1bmN0aW9uIGRQZSgpe3ZnLnBvaW50PW1QZX1mdW5jdGlvbiBtUGUoZSx0KXt2Zy5wb2ludD1aOXQsJDl0PVhKPWUsSzl0PSRKPXR9ZnVuY3Rpb24gWjl0KGUsdCl7akouYWRkKCRKKmUtWEoqdCksWEo9ZSwkSj10fWZ1bmN0aW9uIGdQZSgpe1o5dCgkOXQsSzl0KX12YXIgWUosakosJDl0LEs5dCxYSiwkSix2ZyxLSixKOXQ9TSgoKT0+e1J5KCk7bHIoKTskcCgpO1lKPUFzKCksako9QXMoKSx2Zz17cG9pbnQ6cXIsbGluZVN0YXJ0OnFyLGxpbmVFbmQ6cXIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dmcubGluZVN0YXJ0PWRQZSx2Zy5saW5lRW5kPWdQZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3ZnLmxpbmVTdGFydD12Zy5saW5lRW5kPXZnLnBvaW50PXFyLFlKLmFkZChZZShqSikpLGpKLnJlc2V0KCl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPVlKLzI7cmV0dXJuIFlKLnJlc2V0KCksZX19O0tKPXZnfSk7ZnVuY3Rpb24geVBlKGUsdCl7ZTxSMiYmKFIyPWUpLGU+SFQmJihIVD1lKSx0PEVEJiYoRUQ9dCksdD5URCYmKFREPXQpfXZhciBSMixFRCxIVCxURCxfUGUsTjIsWko9TSgoKT0+eyRwKCk7UjI9MS8wLEVEPVIyLEhUPS1SMixURD1IVCxfUGU9e3BvaW50OnlQZSxsaW5lU3RhcnQ6cXIsbGluZUVuZDpxcixwb2x5Z29uU3RhcnQ6cXIscG9seWdvbkVuZDpxcixyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgZT1bW1IyLEVEXSxbSFQsVERdXTtyZXR1cm4gSFQ9VEQ9LShFRD1SMj0xLzApLGV9fTtOMj1fUGV9KTtmdW5jdGlvbiBWeShlLHQpe0pKKz1lLFFKKz10LCsrVlR9ZnVuY3Rpb24gUTl0KCl7Q3UucG9pbnQ9dlBlfWZ1bmN0aW9uIHZQZShlLHQpe0N1LnBvaW50PXhQZSxWeShhZj1lLHNmPXQpfWZ1bmN0aW9uIHhQZShlLHQpe3ZhciByPWUtYWYsbj10LXNmLGk9UnIocipyK24qbik7Q0QrPWkqKGFmK2UpLzIsQUQrPWkqKHNmK3QpLzIsRDIrPWksVnkoYWY9ZSxzZj10KX1mdW5jdGlvbiB0THQoKXtDdS5wb2ludD1WeX1mdW5jdGlvbiBiUGUoKXtDdS5wb2ludD1TUGV9ZnVuY3Rpb24gd1BlKCl7bkx0KGVMdCxyTHQpfWZ1bmN0aW9uIFNQZShlLHQpe0N1LnBvaW50PW5MdCxWeShlTHQ9YWY9ZSxyTHQ9c2Y9dCl9ZnVuY3Rpb24gbkx0KGUsdCl7dmFyIHI9ZS1hZixuPXQtc2YsaT1ScihyKnIrbipuKTtDRCs9aSooYWYrZSkvMixBRCs9aSooc2YrdCkvMixEMis9aSxpPXNmKmUtYWYqdCx0USs9aSooYWYrZSksZVErPWkqKHNmK3QpLFVUKz1pKjMsVnkoYWY9ZSxzZj10KX12YXIgSkosUUosVlQsQ0QsQUQsRDIsdFEsZVEsVVQsZUx0LHJMdCxhZixzZixDdSxyUSxpTHQ9TSgoKT0+e2xyKCk7Sko9MCxRSj0wLFZUPTAsQ0Q9MCxBRD0wLEQyPTAsdFE9MCxlUT0wLFVUPTAsQ3U9e3BvaW50OlZ5LGxpbmVTdGFydDpROXQsbGluZUVuZDp0THQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Q3UubGluZVN0YXJ0PWJQZSxDdS5saW5lRW5kPXdQZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe0N1LnBvaW50PVZ5LEN1LmxpbmVTdGFydD1ROXQsQ3UubGluZUVuZD10THR9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPVVUP1t0US9VVCxlUS9VVF06RDI/W0NEL0QyLEFEL0QyXTpWVD9bSkovVlQsUUovVlRdOltOYU4sTmFOXTtyZXR1cm4gSko9UUo9VlQ9Q0Q9QUQ9RDI9dFE9ZVE9VVQ9MCxlfX07clE9Q3V9KTtmdW5jdGlvbiBQRChlKXt0aGlzLl9jb250ZXh0PWV9dmFyIG9MdD1NKCgpPT57bHIoKTskcCgpO1BELnByb3RvdHlwZT17X3JhZGl1czo0LjUscG9pbnRSYWRpdXM6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3JhZGl1cz1lLHRoaXN9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT09PTAmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fcG9pbnQ9TmFOfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpLHRoaXMuX3BvaW50PTE7YnJlYWt9Y2FzZSAxOnt0aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpO2JyZWFrfWRlZmF1bHQ6e3RoaXMuX2NvbnRleHQubW92ZVRvKGUrdGhpcy5fcmFkaXVzLHQpLHRoaXMuX2NvbnRleHQuYXJjKGUsdCx0aGlzLl9yYWRpdXMsMCxCaSk7YnJlYWt9fX0scmVzdWx0OnFyfX0pO2Z1bmN0aW9uIE1QZShlLHQpe0lELnBvaW50PWxMdCxhTHQ9cVQ9ZSxzTHQ9R1Q9dH1mdW5jdGlvbiBsTHQoZSx0KXtxVC09ZSxHVC09dCxpUS5hZGQoUnIocVQqcVQrR1QqR1QpKSxxVD1lLEdUPXR9dmFyIGlRLG5RLGFMdCxzTHQscVQsR1QsSUQsb1EsY0x0PU0oKCk9PntSeSgpO2xyKCk7JHAoKTtpUT1BcygpLElEPXtwb2ludDpxcixsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtJRC5wb2ludD1NUGV9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtuUSYmbEx0KGFMdCxzTHQpLElELnBvaW50PXFyfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtuUT0hMH0scG9seWdvbkVuZDpmdW5jdGlvbigpe25RPW51bGx9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPStpUTtyZXR1cm4gaVEucmVzZXQoKSxlfX07b1E9SUR9KTtmdW5jdGlvbiBMRCgpe3RoaXMuX3N0cmluZz1bXX1mdW5jdGlvbiB1THQoZSl7cmV0dXJuIm0wLCIrZSsiYSIrZSsiLCIrZSsiIDAgMSwxIDAsIistMiplKyJhIitlKyIsIitlKyIgMCAxLDEgMCwiKzIqZSsieiJ9dmFyIGhMdD1NKCgpPT57TEQucHJvdG90eXBlPXtfcmFkaXVzOjQuNSxfY2lyY2xlOnVMdCg0LjUpLHBvaW50UmFkaXVzOmZ1bmN0aW9uKGUpe3JldHVybihlPStlKSE9PXRoaXMuX3JhZGl1cyYmKHRoaXMuX3JhZGl1cz1lLHRoaXMuX2NpcmNsZT1udWxsKSx0aGlzfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9PT0wJiZ0aGlzLl9zdHJpbmcucHVzaCgiWiIpLHRoaXMuX3BvaW50PU5hTn0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp7dGhpcy5fc3RyaW5nLnB1c2goIk0iLGUsIiwiLHQpLHRoaXMuX3BvaW50PTE7YnJlYWt9Y2FzZSAxOnt0aGlzLl9zdHJpbmcucHVzaCgiTCIsZSwiLCIsdCk7YnJlYWt9ZGVmYXVsdDp7dGhpcy5fY2lyY2xlPT1udWxsJiYodGhpcy5fY2lyY2xlPXVMdCh0aGlzLl9yYWRpdXMpKSx0aGlzLl9zdHJpbmcucHVzaCgiTSIsZSwiLCIsdCx0aGlzLl9jaXJjbGUpO2JyZWFrfX19LHJlc3VsdDpmdW5jdGlvbigpe2lmKHRoaXMuX3N0cmluZy5sZW5ndGgpe3ZhciBlPXRoaXMuX3N0cmluZy5qb2luKCIiKTtyZXR1cm4gdGhpcy5fc3RyaW5nPVtdLGV9ZWxzZSByZXR1cm4gbnVsbH19fSk7ZnVuY3Rpb24gZkx0KGUsdCl7dmFyIHI9NC41LG4saTtmdW5jdGlvbiBvKGEpe3JldHVybiBhJiYodHlwZW9mIHI9PSJmdW5jdGlvbiImJmkucG9pbnRSYWRpdXMoK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxNbyhhLG4oaSkpKSxpLnJlc3VsdCgpfXJldHVybiBvLmFyZWE9ZnVuY3Rpb24oYSl7cmV0dXJuIE1vKGEsbihLSikpLEtKLnJlc3VsdCgpfSxvLm1lYXN1cmU9ZnVuY3Rpb24oYSl7cmV0dXJuIE1vKGEsbihvUSkpLG9RLnJlc3VsdCgpfSxvLmJvdW5kcz1mdW5jdGlvbihhKXtyZXR1cm4gTW8oYSxuKE4yKSksTjIucmVzdWx0KCl9LG8uY2VudHJvaWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIE1vKGEsbihyUSkpLHJRLnJlc3VsdCgpfSxvLnByb2plY3Rpb249ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49YT09bnVsbD8oZT1udWxsLG9mKTooZT1hKS5zdHJlYW0sbyk6ZX0sby5jb250ZXh0PWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWE9PW51bGw/KHQ9bnVsbCxuZXcgTEQpOm5ldyBQRCh0PWEpLHR5cGVvZiByIT0iZnVuY3Rpb24iJiZpLnBvaW50UmFkaXVzKHIpLG8pOnR9LG8ucG9pbnRSYWRpdXM9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIGE9PSJmdW5jdGlvbiI/YTooaS5wb2ludFJhZGl1cygrYSksK2EpLG8pOnJ9LG8ucHJvamVjdGlvbihlKS5jb250ZXh0KHQpfXZhciBwTHQ9TSgoKT0+e01EKCk7Z2coKTtKOXQoKTtaSigpO2lMdCgpO29MdCgpO2NMdCgpO2hMdCgpfSk7ZnVuY3Rpb24gZEx0KGUpe3JldHVybntzdHJlYW06eGcoZSl9fWZ1bmN0aW9uIHhnKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj1uZXcgYVE7Zm9yKHZhciBuIGluIGUpcltuXT1lW25dO3JldHVybiByLnN0cmVhbT10LHJ9fWZ1bmN0aW9uIGFRKCl7fXZhciBXVD1NKCgpPT57YVEucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjphUSxwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuc3RyZWFtLnBvaW50KGUsdCl9LHNwaGVyZTpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uRW5kKCl9fX0pO2Z1bmN0aW9uIHNRKGUsdCxyKXt2YXIgbj1lLmNsaXBFeHRlbnQmJmUuY2xpcEV4dGVudCgpO3JldHVybiBlLnNjYWxlKDE1MCkudHJhbnNsYXRlKFswLDBdKSxuIT1udWxsJiZlLmNsaXBFeHRlbnQobnVsbCksTW8ocixlLnN0cmVhbShOMikpLHQoTjIucmVzdWx0KCkpLG4hPW51bGwmJmUuY2xpcEV4dGVudChuKSxlfWZ1bmN0aW9uIFV5KGUsdCxyKXtyZXR1cm4gc1EoZSxmdW5jdGlvbihuKXt2YXIgaT10WzFdWzBdLXRbMF1bMF0sbz10WzFdWzFdLXRbMF1bMV0sYT1NYXRoLm1pbihpLyhuWzFdWzBdLW5bMF1bMF0pLG8vKG5bMV1bMV0tblswXVsxXSkpLHM9K3RbMF1bMF0rKGktYSooblsxXVswXStuWzBdWzBdKSkvMixsPSt0WzBdWzFdKyhvLWEqKG5bMV1bMV0rblswXVsxXSkpLzI7ZS5zY2FsZSgxNTAqYSkudHJhbnNsYXRlKFtzLGxdKX0scil9ZnVuY3Rpb24gTzIoZSx0LHIpe3JldHVybiBVeShlLFtbMCwwXSx0XSxyKX1mdW5jdGlvbiB6MihlLHQscil7cmV0dXJuIHNRKGUsZnVuY3Rpb24obil7dmFyIGk9K3Qsbz1pLyhuWzFdWzBdLW5bMF1bMF0pLGE9KGktbyooblsxXVswXStuWzBdWzBdKSkvMixzPS1vKm5bMF1bMV07ZS5zY2FsZSgxNTAqbykudHJhbnNsYXRlKFthLHNdKX0scil9ZnVuY3Rpb24gRjIoZSx0LHIpe3JldHVybiBzUShlLGZ1bmN0aW9uKG4pe3ZhciBpPSt0LG89aS8oblsxXVsxXS1uWzBdWzFdKSxhPS1vKm5bMF1bMF0scz0oaS1vKihuWzFdWzFdK25bMF1bMV0pKS8yO2Uuc2NhbGUoMTUwKm8pLnRyYW5zbGF0ZShbYSxzXSl9LHIpfXZhciBrRD1NKCgpPT57Z2coKTtaSigpfSk7ZnVuY3Rpb24gbFEoZSx0KXtyZXR1cm4rdD9DUGUoZSx0KTpUUGUoZSl9ZnVuY3Rpb24gVFBlKGUpe3JldHVybiB4Zyh7cG9pbnQ6ZnVuY3Rpb24odCxyKXt0PWUodCxyKSx0aGlzLnN0cmVhbS5wb2ludCh0WzBdLHRbMV0pfX0pfWZ1bmN0aW9uIENQZShlLHQpe2Z1bmN0aW9uIHIobixpLG8sYSxzLGwsYyx1LGgsZixwLGQsZyxfKXt2YXIgeT1jLW4seD11LWksYj15KnkreCp4O2lmKGI+NCp0JiZnLS0pe3ZhciBTPWErZixDPXMrcCxQPWwrZCxrPVJyKFMqUytDKkMrUCpQKSxPPUpuKFAvPWspLEQ9WWUoWWUoUCktMSk8Y2V8fFllKG8taCk8Y2U/KG8raCkvMjpTbihDLFMpLEI9ZShELE8pLEk9QlswXSxMPUJbMV0sUj1JLW4sRj1MLWksej14KlIteSpGOyh6KnovYj50fHxZZSgoeSpSK3gqRikvYi0uNSk+LjN8fGEqZitzKnArbCpkPEVQZSkmJihyKG4saSxvLGEscyxsLEksTCxELFMvPWssQy89ayxQLGcsXyksXy5wb2ludChJLEwpLHIoSSxMLEQsUyxDLFAsYyx1LGgsZixwLGQsZyxfKSl9fXJldHVybiBmdW5jdGlvbihuKXt2YXIgaSxvLGEscyxsLGMsdSxoLGYscCxkLGcsXz17cG9pbnQ6eSxsaW5lU3RhcnQ6eCxsaW5lRW5kOlMscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7bi5wb2x5Z29uU3RhcnQoKSxfLmxpbmVTdGFydD1DfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7bi5wb2x5Z29uRW5kKCksXy5saW5lU3RhcnQ9eH19O2Z1bmN0aW9uIHkoTyxEKXtPPWUoTyxEKSxuLnBvaW50KE9bMF0sT1sxXSl9ZnVuY3Rpb24geCgpe2g9TmFOLF8ucG9pbnQ9YixuLmxpbmVTdGFydCgpfWZ1bmN0aW9uIGIoTyxEKXt2YXIgQj12YyhbTyxEXSksST1lKE8sRCk7cihoLGYsdSxwLGQsZyxoPUlbMF0sZj1JWzFdLHU9TyxwPUJbMF0sZD1CWzFdLGc9QlsyXSxtTHQsbiksbi5wb2ludChoLGYpfWZ1bmN0aW9uIFMoKXtfLnBvaW50PXksbi5saW5lRW5kKCl9ZnVuY3Rpb24gQygpe3goKSxfLnBvaW50PVAsXy5saW5lRW5kPWt9ZnVuY3Rpb24gUChPLEQpe2IoaT1PLEQpLG89aCxhPWYscz1wLGw9ZCxjPWcsXy5wb2ludD1ifWZ1bmN0aW9uIGsoKXtyKGgsZix1LHAsZCxnLG8sYSxpLHMsbCxjLG1MdCxuKSxfLmxpbmVFbmQ9UyxTKCl9cmV0dXJuIF99fXZhciBtTHQsRVBlLGdMdD1NKCgpPT57QTIoKTtscigpO1dUKCk7bUx0PTE2LEVQZT1hZSgzMCp3ZSl9KTtmdW5jdGlvbiBQUGUoZSl7cmV0dXJuIHhnKHtwb2ludDpmdW5jdGlvbih0LHIpe3ZhciBuPWUodCxyKTtyZXR1cm4gdGhpcy5zdHJlYW0ucG9pbnQoblswXSxuWzFdKX19KX1mdW5jdGlvbiBlbyhlKXtyZXR1cm4gWVQoZnVuY3Rpb24oKXtyZXR1cm4gZX0pKCl9ZnVuY3Rpb24gWVQoZSl7dmFyIHQscj0xNTAsbj00ODAsaT0yNTAsbyxhLHM9MCxsPTAsYz0wLHU9MCxoPTAsZixwLGQ9bnVsbCxnPXpULF89bnVsbCx5LHgsYixTPW9mLEM9LjUsUD1sUShJLEMpLGssTztmdW5jdGlvbiBEKEYpe3JldHVybiBGPXAoRlswXSp3ZSxGWzFdKndlKSxbRlswXSpyK28sYS1GWzFdKnJdfWZ1bmN0aW9uIEIoRil7cmV0dXJuIEY9cC5pbnZlcnQoKEZbMF0tbykvciwoYS1GWzFdKS9yKSxGJiZbRlswXSpVcixGWzFdKlVyXX1mdW5jdGlvbiBJKEYseil7cmV0dXJuIEY9dChGLHopLFtGWzBdKnIrbyxhLUZbMV0qcl19RC5zdHJlYW09ZnVuY3Rpb24oRil7cmV0dXJuIGsmJk89PT1GP2s6az1BUGUoUFBlKGYpKGcoUChTKE89RikpKSkpfSxELnByZWNsaXA9ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9RixkPXZvaWQgMCxSKCkpOmd9LEQucG9zdGNsaXA9ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFM9RixfPXk9eD1iPW51bGwsUigpKTpTfSxELmNsaXBBbmdsZT1mdW5jdGlvbihGKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0rRj9fRChkPUYqd2UpOihkPW51bGwselQpLFIoKSk6ZCpVcn0sRC5jbGlwRXh0ZW50PWZ1bmN0aW9uKEYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhTPUY9PW51bGw/KF89eT14PWI9bnVsbCxvZik6dGQoXz0rRlswXVswXSx5PStGWzBdWzFdLHg9K0ZbMV1bMF0sYj0rRlsxXVsxXSksUigpKTpfPT1udWxsP251bGw6W1tfLHldLFt4LGJdXX0sRC5zY2FsZT1mdW5jdGlvbihGKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rRixMKCkpOnJ9LEQudHJhbnNsYXRlPWZ1bmN0aW9uKEYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStGWzBdLGk9K0ZbMV0sTCgpKTpbbixpXX0sRC5jZW50ZXI9ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9RlswXSUzNjAqd2UsbD1GWzFdJTM2MCp3ZSxMKCkpOltzKlVyLGwqVXJdfSxELnJvdGF0ZT1mdW5jdGlvbihGKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1GWzBdJTM2MCp3ZSx1PUZbMV0lMzYwKndlLGg9Ri5sZW5ndGg+Mj9GWzJdJTM2MCp3ZTowLEwoKSk6W2MqVXIsdSpVcixoKlVyXX0sRC5wcmVjaXNpb249ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFA9bFEoSSxDPUYqRiksUigpKTpScihDKX0sRC5maXRFeHRlbnQ9ZnVuY3Rpb24oRix6KXtyZXR1cm4gVXkoRCxGLHopfSxELmZpdFNpemU9ZnVuY3Rpb24oRix6KXtyZXR1cm4gTzIoRCxGLHopfSxELmZpdFdpZHRoPWZ1bmN0aW9uKEYseil7cmV0dXJuIHoyKEQsRix6KX0sRC5maXRIZWlnaHQ9ZnVuY3Rpb24oRix6KXtyZXR1cm4gRjIoRCxGLHopfTtmdW5jdGlvbiBMKCl7cD1zRChmPU5UKGMsdSxoKSx0KTt2YXIgRj10KHMsbCk7cmV0dXJuIG89bi1GWzBdKnIsYT1pK0ZbMV0qcixSKCl9ZnVuY3Rpb24gUigpe3JldHVybiBrPU89bnVsbCxEfXJldHVybiBmdW5jdGlvbigpe3JldHVybiB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpLEQuaW52ZXJ0PXQuaW52ZXJ0JiZCLEwoKX19dmFyIEFQZSxBdT1NKCgpPT57QkooKTtISigpO0JUKCk7Z0ooKTtNRCgpO2xyKCk7RFQoKTtXVCgpO2tEKCk7Z0x0KCk7QVBlPXhnKHtwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuc3RyZWFtLnBvaW50KGUqd2UsdCp3ZSl9fSl9KTtmdW5jdGlvbiBCMihlKXt2YXIgdD0wLHI9cnIvMyxuPVlUKGUpLGk9bih0LHIpO3JldHVybiBpLnBhcmFsbGVscz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKHQ9b1swXSp3ZSxyPW9bMV0qd2UpOlt0KlVyLHIqVXJdfSxpfXZhciBSRD1NKCgpPT57bHIoKTtBdSgpfSk7ZnVuY3Rpb24gX0x0KGUpe3ZhciB0PWFlKGUpO2Z1bmN0aW9uIHIobixpKXtyZXR1cm5bbip0LEp0KGkpL3RdfXJldHVybiByLmludmVydD1mdW5jdGlvbihuLGkpe3JldHVybltuL3QsSm4oaSp0KV19LHJ9dmFyIHlMdD1NKCgpPT57bHIoKX0pO2Z1bmN0aW9uIGNRKGUsdCl7dmFyIHI9SnQoZSksbj0ocitKdCh0KSkvMjtpZihZZShuKTxjZSlyZXR1cm4gX0x0KGUpO3ZhciBpPTErciooMipuLXIpLG89UnIoaSkvbjtmdW5jdGlvbiBhKHMsbCl7dmFyIGM9UnIoaS0yKm4qSnQobCkpL247cmV0dXJuW2MqSnQocyo9biksby1jKmFlKHMpXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24ocyxsKXt2YXIgYz1vLWw7cmV0dXJuW1NuKHMsWWUoYykpL24qbWcoYyksSm4oKGktKHMqcytjKmMpKm4qbikvKDIqbikpXX0sYX1mdW5jdGlvbiBxeSgpe3JldHVybiBCMihjUSkuc2NhbGUoMTU1LjQyNCkuY2VudGVyKFswLDMzLjY0NDJdKX12YXIgTkQ9TSgoKT0+e2xyKCk7UkQoKTt5THQoKX0pO2Z1bmN0aW9uIEREKCl7cmV0dXJuIHF5KCkucGFyYWxsZWxzKFsyOS41LDQ1LjVdKS5zY2FsZSgxMDcwKS50cmFuc2xhdGUoWzQ4MCwyNTBdKS5yb3RhdGUoWzk2LDBdKS5jZW50ZXIoWy0uNiwzOC43XSl9dmFyIHVRPU0oKCk9PntORCgpfSk7ZnVuY3Rpb24gSVBlKGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybntwb2ludDpmdW5jdGlvbihyLG4pe2Zvcih2YXIgaT0tMTsrK2k8dDspZVtpXS5wb2ludChyLG4pfSxzcGhlcmU6ZnVuY3Rpb24oKXtmb3IodmFyIHI9LTE7KytyPHQ7KWVbcl0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5wb2x5Z29uRW5kKCl9fX1mdW5jdGlvbiB2THQoKXt2YXIgZSx0LHI9REQoKSxuLGk9cXkoKS5yb3RhdGUoWzE1NCwwXSkuY2VudGVyKFstMiw1OC41XSkucGFyYWxsZWxzKFs1NSw2NV0pLG8sYT1xeSgpLnJvdGF0ZShbMTU3LDBdKS5jZW50ZXIoWy0zLDE5LjldKS5wYXJhbGxlbHMoWzgsMThdKSxzLGwsYz17cG9pbnQ6ZnVuY3Rpb24oZixwKXtsPVtmLHBdfX07ZnVuY3Rpb24gdShmKXt2YXIgcD1mWzBdLGQ9ZlsxXTtyZXR1cm4gbD1udWxsLG4ucG9pbnQocCxkKSxsfHwoby5wb2ludChwLGQpLGwpfHwocy5wb2ludChwLGQpLGwpfXUuaW52ZXJ0PWZ1bmN0aW9uKGYpe3ZhciBwPXIuc2NhbGUoKSxkPXIudHJhbnNsYXRlKCksZz0oZlswXS1kWzBdKS9wLF89KGZbMV0tZFsxXSkvcDtyZXR1cm4oXz49LjEyJiZfPC4yMzQmJmc+PS0uNDI1JiZnPC0uMjE0P2k6Xz49LjE2NiYmXzwuMjM0JiZnPj0tLjIxNCYmZzwtLjExNT9hOnIpLmludmVydChmKX0sdS5zdHJlYW09ZnVuY3Rpb24oZil7cmV0dXJuIGUmJnQ9PT1mP2U6ZT1JUGUoW3Iuc3RyZWFtKHQ9ZiksaS5zdHJlYW0oZiksYS5zdHJlYW0oZildKX0sdS5wcmVjaXNpb249ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHIucHJlY2lzaW9uKGYpLGkucHJlY2lzaW9uKGYpLGEucHJlY2lzaW9uKGYpLGgoKSk6ci5wcmVjaXNpb24oKX0sdS5zY2FsZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oci5zY2FsZShmKSxpLnNjYWxlKGYqLjM1KSxhLnNjYWxlKGYpLHUudHJhbnNsYXRlKHIudHJhbnNsYXRlKCkpKTpyLnNjYWxlKCl9LHUudHJhbnNsYXRlPWZ1bmN0aW9uKGYpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiByLnRyYW5zbGF0ZSgpO3ZhciBwPXIuc2NhbGUoKSxkPStmWzBdLGc9K2ZbMV07cmV0dXJuIG49ci50cmFuc2xhdGUoZikuY2xpcEV4dGVudChbW2QtLjQ1NSpwLGctLjIzOCpwXSxbZCsuNDU1KnAsZysuMjM4KnBdXSkuc3RyZWFtKGMpLG89aS50cmFuc2xhdGUoW2QtLjMwNypwLGcrLjIwMSpwXSkuY2xpcEV4dGVudChbW2QtLjQyNSpwK2NlLGcrLjEyKnArY2VdLFtkLS4yMTQqcC1jZSxnKy4yMzQqcC1jZV1dKS5zdHJlYW0oYykscz1hLnRyYW5zbGF0ZShbZC0uMjA1KnAsZysuMjEyKnBdKS5jbGlwRXh0ZW50KFtbZC0uMjE0KnArY2UsZysuMTY2KnArY2VdLFtkLS4xMTUqcC1jZSxnKy4yMzQqcC1jZV1dKS5zdHJlYW0oYyksaCgpfSx1LmZpdEV4dGVudD1mdW5jdGlvbihmLHApe3JldHVybiBVeSh1LGYscCl9LHUuZml0U2l6ZT1mdW5jdGlvbihmLHApe3JldHVybiBPMih1LGYscCl9LHUuZml0V2lkdGg9ZnVuY3Rpb24oZixwKXtyZXR1cm4gejIodSxmLHApfSx1LmZpdEhlaWdodD1mdW5jdGlvbihmLHApe3JldHVybiBGMih1LGYscCl9O2Z1bmN0aW9uIGgoKXtyZXR1cm4gZT10PW51bGwsdX1yZXR1cm4gdS5zY2FsZSgxMDcwKX12YXIgeEx0PU0oKCk9PntscigpO3VRKCk7TkQoKTtrRCgpfSk7ZnVuY3Rpb24gT0QoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7dmFyIG49YWUodCksaT1hZShyKSxvPWUobippKTtyZXR1cm5bbyppKkp0KHQpLG8qSnQocildfX1mdW5jdGlvbiBsZihlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1Scih0KnQrcipyKSxpPWUobiksbz1KdChpKSxhPWFlKGkpO3JldHVybltTbih0Km8sbiphKSxKbihuJiZyKm8vbildfX12YXIgSDI9TSgoKT0+e2xyKCl9KTtmdW5jdGlvbiBiTHQoKXtyZXR1cm4gZW8oekQpLnNjYWxlKDEyNC43NSkuY2xpcEFuZ2xlKDE4MC0uMDAxKX12YXIgekQsd0x0PU0oKCk9PntscigpO0gyKCk7QXUoKTt6RD1PRChmdW5jdGlvbihlKXtyZXR1cm4gUnIoMi8oMStlKSl9KTt6RC5pbnZlcnQ9bGYoZnVuY3Rpb24oZSl7cmV0dXJuIDIqSm4oZS8yKX0pfSk7ZnVuY3Rpb24gU0x0KCl7cmV0dXJuIGVvKEZEKS5zY2FsZSg3OS40MTg4KS5jbGlwQW5nbGUoMTgwLS4wMDEpfXZhciBGRCxNTHQ9TSgoKT0+e2xyKCk7SDIoKTtBdSgpO0ZEPU9EKGZ1bmN0aW9uKGUpe3JldHVybihlPUtOKGUpKSYmZS9KdChlKX0pO0ZELmludmVydD1sZihmdW5jdGlvbihlKXtyZXR1cm4gZX0pfSk7ZnVuY3Rpb24gR3koZSx0KXtyZXR1cm5bZSxOeShDMigoQm4rdCkvMikpXX1mdW5jdGlvbiBFTHQoKXtyZXR1cm4gaFEoR3kpLnNjYWxlKDk2MS9CaSl9ZnVuY3Rpb24gaFEoZSl7dmFyIHQ9ZW8oZSkscj10LmNlbnRlcixuPXQuc2NhbGUsaT10LnRyYW5zbGF0ZSxvPXQuY2xpcEV4dGVudCxhPW51bGwscyxsLGM7dC5zY2FsZT1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obihoKSx1KCkpOm4oKX0sdC50cmFuc2xhdGU9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGkoaCksdSgpKTppKCl9LHQuY2VudGVyPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyKGgpLHUoKSk6cigpfSx0LmNsaXBFeHRlbnQ9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9PW51bGw/YT1zPWw9Yz1udWxsOihhPStoWzBdWzBdLHM9K2hbMF1bMV0sbD0raFsxXVswXSxjPStoWzFdWzFdKSx1KCkpOmE9PW51bGw/bnVsbDpbW2Esc10sW2wsY11dfTtmdW5jdGlvbiB1KCl7dmFyIGg9cnIqbigpLGY9dChsRCh0LnJvdGF0ZSgpKS5pbnZlcnQoWzAsMF0pKTtyZXR1cm4gbyhhPT1udWxsP1tbZlswXS1oLGZbMV0taF0sW2ZbMF0raCxmWzFdK2hdXTplPT09R3k/W1tNYXRoLm1heChmWzBdLWgsYSksc10sW01hdGgubWluKGZbMF0raCxsKSxjXV06W1thLE1hdGgubWF4KGZbMV0taCxzKV0sW2wsTWF0aC5taW4oZlsxXStoLGMpXV0pfXJldHVybiB1KCl9dmFyIEJEPU0oKCk9PntscigpO0RUKCk7QXUoKTtHeS5pbnZlcnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm5bZSwyKnljKFhOKHQpKS1Cbl19fSk7ZnVuY3Rpb24gSEQoZSl7cmV0dXJuIEMyKChCbitlKS8yKX1mdW5jdGlvbiBmUShlLHQpe3ZhciByPWFlKGUpLG49ZT09PXQ/SnQoZSk6Tnkoci9hZSh0KSkvTnkoSEQodCkvSEQoZSkpLGk9ciokTihIRChlKSxuKS9uO2lmKCFuKXJldHVybiBHeTtmdW5jdGlvbiBvKGEscyl7aT4wP3M8LUJuK2NlJiYocz0tQm4rY2UpOnM+Qm4tY2UmJihzPUJuLWNlKTt2YXIgbD1pLyROKEhEKHMpLG4pO3JldHVybltsKkp0KG4qYSksaS1sKmFlKG4qYSldfXJldHVybiBvLmludmVydD1mdW5jdGlvbihhLHMpe3ZhciBsPWktcyxjPW1nKG4pKlJyKGEqYStsKmwpO3JldHVybltTbihhLFllKGwpKS9uKm1nKGwpLDIqeWMoJE4oaS9jLDEvbikpLUJuXX0sb31mdW5jdGlvbiBUTHQoKXtyZXR1cm4gQjIoZlEpLnNjYWxlKDEwOS41KS5wYXJhbGxlbHMoWzMwLDMwXSl9dmFyIENMdD1NKCgpPT57bHIoKTtSRCgpO0JEKCl9KTtmdW5jdGlvbiBXeShlLHQpe3JldHVybltlLHRdfWZ1bmN0aW9uIEFMdCgpe3JldHVybiBlbyhXeSkuc2NhbGUoMTUyLjYzKX12YXIgcFE9TSgoKT0+e0F1KCk7V3kuaW52ZXJ0PVd5fSk7ZnVuY3Rpb24gZFEoZSx0KXt2YXIgcj1hZShlKSxuPWU9PT10P0p0KGUpOihyLWFlKHQpKS8odC1lKSxpPXIvbitlO2lmKFllKG4pPGNlKXJldHVybiBXeTtmdW5jdGlvbiBvKGEscyl7dmFyIGw9aS1zLGM9biphO3JldHVybltsKkp0KGMpLGktbCphZShjKV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKGEscyl7dmFyIGw9aS1zO3JldHVybltTbihhLFllKGwpKS9uKm1nKGwpLGktbWcobikqUnIoYSphK2wqbCldfSxvfWZ1bmN0aW9uIFBMdCgpe3JldHVybiBCMihkUSkuc2NhbGUoMTMxLjE1NCkuY2VudGVyKFswLDEzLjkzODldKX12YXIgSUx0PU0oKCk9PntscigpO1JEKCk7cFEoKX0pO2Z1bmN0aW9uIFZEKGUsdCl7dmFyIHI9YWUodCksbj1hZShlKSpyO3JldHVybltyKkp0KGUpL24sSnQodCkvbl19ZnVuY3Rpb24gTEx0KCl7cmV0dXJuIGVvKFZEKS5zY2FsZSgxNDQuMDQ5KS5jbGlwQW5nbGUoNjApfXZhciBrTHQ9TSgoKT0+e2xyKCk7SDIoKTtBdSgpO1ZELmludmVydD1sZih5Yyl9KTtmdW5jdGlvbiBVRChlLHQscixuKXtyZXR1cm4gZT09PTEmJnQ9PT0xJiZyPT09MCYmbj09PTA/b2Y6eGcoe3BvaW50OmZ1bmN0aW9uKGksbyl7dGhpcy5zdHJlYW0ucG9pbnQoaSplK3Isbyp0K24pfX0pfWZ1bmN0aW9uIFJMdCgpe3ZhciBlPTEsdD0wLHI9MCxuPTEsaT0xLG89b2YsYT1udWxsLHMsbCxjLHU9b2YsaCxmLHA7ZnVuY3Rpb24gZCgpe3JldHVybiBoPWY9bnVsbCxwfXJldHVybiBwPXtzdHJlYW06ZnVuY3Rpb24oZyl7cmV0dXJuIGgmJmY9PT1nP2g6aD1vKHUoZj1nKSl9LHBvc3RjbGlwOmZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PWcsYT1zPWw9Yz1udWxsLGQoKSk6dX0sY2xpcEV4dGVudDpmdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1nPT1udWxsPyhhPXM9bD1jPW51bGwsb2YpOnRkKGE9K2dbMF1bMF0scz0rZ1swXVsxXSxsPStnWzFdWzBdLGM9K2dbMV1bMV0pLGQoKSk6YT09bnVsbD9udWxsOltbYSxzXSxbbCxjXV19LHNjYWxlOmZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVVEKChlPStnKSpuLGUqaSx0LHIpLGQoKSk6ZX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVVEKGUqbixlKmksdD0rZ1swXSxyPStnWzFdKSxkKCkpOlt0LHJdfSxyZWZsZWN0WDpmdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1VRChlKihuPWc/LTE6MSksZSppLHQsciksZCgpKTpuPDB9LHJlZmxlY3RZOmZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVVEKGUqbixlKihpPWc/LTE6MSksdCxyKSxkKCkpOmk8MH0sZml0RXh0ZW50OmZ1bmN0aW9uKGcsXyl7cmV0dXJuIFV5KHAsZyxfKX0sZml0U2l6ZTpmdW5jdGlvbihnLF8pe3JldHVybiBPMihwLGcsXyl9LGZpdFdpZHRoOmZ1bmN0aW9uKGcsXyl7cmV0dXJuIHoyKHAsZyxfKX0sZml0SGVpZ2h0OmZ1bmN0aW9uKGcsXyl7cmV0dXJuIEYyKHAsZyxfKX19fXZhciBOTHQ9TSgoKT0+e0JUKCk7TUQoKTtXVCgpO2tEKCl9KTtmdW5jdGlvbiBxRChlLHQpe3ZhciByPXQqdCxuPXIqcjtyZXR1cm5bZSooLjg3MDctLjEzMTk3OSpyK24qKC0uMDEzNzkxK24qKC4wMDM5NzEqci0uMDAxNTI5Km4pKSksdCooMS4wMDcyMjYrciooLjAxNTA4NStuKigtLjA0NDQ3NSsuMDI4ODc0KnItLjAwNTkxNipuKSkpXX1mdW5jdGlvbiBETHQoKXtyZXR1cm4gZW8ocUQpLnNjYWxlKDE3NS4yOTUpfXZhciBPTHQ9TSgoKT0+e0F1KCk7bHIoKTtxRC5pbnZlcnQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj10LG49MjUsaTtkb3t2YXIgbz1yKnIsYT1vKm87ci09aT0ociooMS4wMDcyMjYrbyooLjAxNTA4NSthKigtLjA0NDQ3NSsuMDI4ODc0Km8tLjAwNTkxNiphKSkpLXQpLygxLjAwNzIyNitvKiguMDE1MDg1KjMrYSooLS4wNDQ0NzUqNysuMDI4ODc0Kjkqby0uMDA1OTE2KjExKmEpKSl9d2hpbGUoWWUoaSk+Y2UmJi0tbj4wKTtyZXR1cm5bZS8oLjg3MDcrKG89cipyKSooLS4xMzE5NzkrbyooLS4wMTM3OTErbypvKm8qKC4wMDM5NzEtLjAwMTUyOSpvKSkpKSxyXX19KTtmdW5jdGlvbiBHRChlLHQpe3JldHVyblthZSh0KSpKdChlKSxKdCh0KV19ZnVuY3Rpb24gekx0KCl7cmV0dXJuIGVvKEdEKS5zY2FsZSgyNDkuNSkuY2xpcEFuZ2xlKDkwK2NlKX12YXIgRkx0PU0oKCk9PntscigpO0gyKCk7QXUoKTtHRC5pbnZlcnQ9bGYoSm4pfSk7ZnVuY3Rpb24gV0QoZSx0KXt2YXIgcj1hZSh0KSxuPTErYWUoZSkqcjtyZXR1cm5bcipKdChlKS9uLEp0KHQpL25dfWZ1bmN0aW9uIEJMdCgpe3JldHVybiBlbyhXRCkuc2NhbGUoMjUwKS5jbGlwQW5nbGUoMTQyKX12YXIgSEx0PU0oKCk9PntscigpO0gyKCk7QXUoKTtXRC5pbnZlcnQ9bGYoZnVuY3Rpb24oZSl7cmV0dXJuIDIqeWMoZSl9KX0pO2Z1bmN0aW9uIFlEKGUsdCl7cmV0dXJuW055KEMyKChCbit0KS8yKSksLWVdfWZ1bmN0aW9uIFZMdCgpe3ZhciBlPWhRKFlEKSx0PWUuY2VudGVyLHI9ZS5yb3RhdGU7cmV0dXJuIGUuY2VudGVyPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QoWy1uWzFdLG5bMF1dKToobj10KCksW25bMV0sLW5bMF1dKX0sZS5yb3RhdGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cihbblswXSxuWzFdLG4ubGVuZ3RoPjI/blsyXSs5MDo5MF0pOihuPXIoKSxbblswXSxuWzFdLG5bMl0tOTBdKX0scihbMCwwLDkwXSkuc2NhbGUoMTU5LjE1NSl9dmFyIFVMdD1NKCgpPT57bHIoKTtCRCgpO1lELmludmVydD1mdW5jdGlvbihlLHQpe3JldHVyblstdCwyKnljKFhOKGUpKS1Cbl19fSk7dmFyIHFMdD1NKCgpPT57dUooKTtaSXQoKTtpOXQoKTt2SigpO0JKKCk7SEooKTtOOXQoKTtCVCgpO1U5dCgpO1dKKCk7WTl0KCk7WDl0KCk7cUooKTtwTHQoKTt1USgpO3hMdCgpO3dMdCgpO01MdCgpO0NMdCgpO05EKCk7SUx0KCk7cFEoKTtrTHQoKTtOTHQoKTtBdSgpO0JEKCk7T0x0KCk7Rkx0KCk7SEx0KCk7VUx0KCk7RFQoKTtnZygpO1dUKCl9KTtmdW5jdGlvbiBMUGUoZSx0KXtyZXR1cm4gZS5wYXJlbnQ9PT10LnBhcmVudD8xOjJ9ZnVuY3Rpb24ga1BlKGUpe3JldHVybiBlLnJlZHVjZShSUGUsMCkvZS5sZW5ndGh9ZnVuY3Rpb24gUlBlKGUsdCl7cmV0dXJuIGUrdC54fWZ1bmN0aW9uIE5QZShlKXtyZXR1cm4gMStlLnJlZHVjZShEUGUsMCl9ZnVuY3Rpb24gRFBlKGUsdCl7cmV0dXJuIE1hdGgubWF4KGUsdC55KX1mdW5jdGlvbiBPUGUoZSl7Zm9yKHZhciB0O3Q9ZS5jaGlsZHJlbjspZT10WzBdO3JldHVybiBlfWZ1bmN0aW9uIHpQZShlKXtmb3IodmFyIHQ7dD1lLmNoaWxkcmVuOyllPXRbdC5sZW5ndGgtMV07cmV0dXJuIGV9ZnVuY3Rpb24gR0x0KCl7dmFyIGU9TFBlLHQ9MSxyPTEsbj0hMTtmdW5jdGlvbiBpKG8pe3ZhciBhLHM9MDtvLmVhY2hBZnRlcihmdW5jdGlvbihmKXt2YXIgcD1mLmNoaWxkcmVuO3A/KGYueD1rUGUocCksZi55PU5QZShwKSk6KGYueD1hP3MrPWUoZixhKTowLGYueT0wLGE9Zil9KTt2YXIgbD1PUGUobyksYz16UGUobyksdT1sLngtZShsLGMpLzIsaD1jLngrZShjLGwpLzI7cmV0dXJuIG8uZWFjaEFmdGVyKG4/ZnVuY3Rpb24oZil7Zi54PShmLngtby54KSp0LGYueT0oby55LWYueSkqcn06ZnVuY3Rpb24oZil7Zi54PShmLngtdSkvKGgtdSkqdCxmLnk9KDEtKG8ueT9mLnkvby55OjEpKSpyfSl9cmV0dXJuIGkuc2VwYXJhdGlvbj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1vLGkpOmV9LGkuc2l6ZT1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMSx0PStvWzBdLHI9K29bMV0saSk6bj9udWxsOlt0LHJdfSxpLm5vZGVTaXplPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEwLHQ9K29bMF0scj0rb1sxXSxpKTpuP1t0LHJdOm51bGx9LGl9dmFyIFdMdD1NKCgpPT57fSk7ZnVuY3Rpb24gRlBlKGUpe3ZhciB0PTAscj1lLmNoaWxkcmVuLG49ciYmci5sZW5ndGg7aWYoIW4pdD0xO2Vsc2UgZm9yKDstLW4+PTA7KXQrPXJbbl0udmFsdWU7ZS52YWx1ZT10fWZ1bmN0aW9uIFlMdCgpe3JldHVybiB0aGlzLmVhY2hBZnRlcihGUGUpfXZhciBqTHQ9TSgoKT0+e30pO2Z1bmN0aW9uIFhMdChlKXt2YXIgdD10aGlzLHIsbj1bdF0saSxvLGE7ZG8gZm9yKHI9bi5yZXZlcnNlKCksbj1bXTt0PXIucG9wKCk7KWlmKGUodCksaT10LmNoaWxkcmVuLGkpZm9yKG89MCxhPWkubGVuZ3RoO288YTsrK28pbi5wdXNoKGlbb10pO3doaWxlKG4ubGVuZ3RoKTtyZXR1cm4gdGhpc312YXIgJEx0PU0oKCk9Pnt9KTtmdW5jdGlvbiBLTHQoZSl7Zm9yKHZhciB0PXRoaXMscj1bdF0sbixpO3Q9ci5wb3AoKTspaWYoZSh0KSxuPXQuY2hpbGRyZW4sbilmb3IoaT1uLmxlbmd0aC0xO2k+PTA7LS1pKXIucHVzaChuW2ldKTtyZXR1cm4gdGhpc312YXIgWkx0PU0oKCk9Pnt9KTtmdW5jdGlvbiBKTHQoZSl7Zm9yKHZhciB0PXRoaXMscj1bdF0sbj1bXSxpLG8sYTt0PXIucG9wKCk7KWlmKG4ucHVzaCh0KSxpPXQuY2hpbGRyZW4saSlmb3Iobz0wLGE9aS5sZW5ndGg7bzxhOysrbylyLnB1c2goaVtvXSk7Zm9yKDt0PW4ucG9wKCk7KWUodCk7cmV0dXJuIHRoaXN9dmFyIFFMdD1NKCgpPT57fSk7ZnVuY3Rpb24gdGt0KGUpe3JldHVybiB0aGlzLmVhY2hBZnRlcihmdW5jdGlvbih0KXtmb3IodmFyIHI9K2UodC5kYXRhKXx8MCxuPXQuY2hpbGRyZW4saT1uJiZuLmxlbmd0aDstLWk+PTA7KXIrPW5baV0udmFsdWU7dC52YWx1ZT1yfSl9dmFyIGVrdD1NKCgpPT57fSk7ZnVuY3Rpb24gcmt0KGUpe3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24odCl7dC5jaGlsZHJlbiYmdC5jaGlsZHJlbi5zb3J0KGUpfSl9dmFyIG5rdD1NKCgpPT57fSk7ZnVuY3Rpb24gaWt0KGUpe2Zvcih2YXIgdD10aGlzLHI9QlBlKHQsZSksbj1bdF07dCE9PXI7KXQ9dC5wYXJlbnQsbi5wdXNoKHQpO2Zvcih2YXIgaT1uLmxlbmd0aDtlIT09cjspbi5zcGxpY2UoaSwwLGUpLGU9ZS5wYXJlbnQ7cmV0dXJuIG59ZnVuY3Rpb24gQlBlKGUsdCl7aWYoZT09PXQpcmV0dXJuIGU7dmFyIHI9ZS5hbmNlc3RvcnMoKSxuPXQuYW5jZXN0b3JzKCksaT1udWxsO2ZvcihlPXIucG9wKCksdD1uLnBvcCgpO2U9PT10OylpPWUsZT1yLnBvcCgpLHQ9bi5wb3AoKTtyZXR1cm4gaX12YXIgb2t0PU0oKCk9Pnt9KTtmdW5jdGlvbiBha3QoKXtmb3IodmFyIGU9dGhpcyx0PVtlXTtlPWUucGFyZW50Oyl0LnB1c2goZSk7cmV0dXJuIHR9dmFyIHNrdD1NKCgpPT57fSk7ZnVuY3Rpb24gbGt0KCl7dmFyIGU9W107cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0KXtlLnB1c2godCl9KSxlfXZhciBja3Q9TSgoKT0+e30pO2Z1bmN0aW9uIHVrdCgpe3ZhciBlPVtdO3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24odCl7dC5jaGlsZHJlbnx8ZS5wdXNoKHQpfSksZX12YXIgaGt0PU0oKCk9Pnt9KTtmdW5jdGlvbiBma3QoKXt2YXIgZT10aGlzLHQ9W107cmV0dXJuIGUuZWFjaChmdW5jdGlvbihyKXtyIT09ZSYmdC5wdXNoKHtzb3VyY2U6ci5wYXJlbnQsdGFyZ2V0OnJ9KX0pLHR9dmFyIHBrdD1NKCgpPT57fSk7ZnVuY3Rpb24galQoZSx0KXt2YXIgcj1uZXcgYmcoZSksbj0rZS52YWx1ZSYmKHIudmFsdWU9ZS52YWx1ZSksaSxvPVtyXSxhLHMsbCxjO2Zvcih0PT1udWxsJiYodD1WUGUpO2k9by5wb3AoKTspaWYobiYmKGkudmFsdWU9K2kuZGF0YS52YWx1ZSksKHM9dChpLmRhdGEpKSYmKGM9cy5sZW5ndGgpKWZvcihpLmNoaWxkcmVuPW5ldyBBcnJheShjKSxsPWMtMTtsPj0wOy0tbClvLnB1c2goYT1pLmNoaWxkcmVuW2xdPW5ldyBiZyhzW2xdKSksYS5wYXJlbnQ9aSxhLmRlcHRoPWkuZGVwdGgrMTtyZXR1cm4gci5lYWNoQmVmb3JlKG1RKX1mdW5jdGlvbiBIUGUoKXtyZXR1cm4galQodGhpcykuZWFjaEJlZm9yZShVUGUpfWZ1bmN0aW9uIFZQZShlKXtyZXR1cm4gZS5jaGlsZHJlbn1mdW5jdGlvbiBVUGUoZSl7ZS5kYXRhPWUuZGF0YS5kYXRhfWZ1bmN0aW9uIG1RKGUpe3ZhciB0PTA7ZG8gZS5oZWlnaHQ9dDt3aGlsZSgoZT1lLnBhcmVudCkmJmUuaGVpZ2h0PCsrdCl9ZnVuY3Rpb24gYmcoZSl7dGhpcy5kYXRhPWUsdGhpcy5kZXB0aD10aGlzLmhlaWdodD0wLHRoaXMucGFyZW50PW51bGx9dmFyIGpEPU0oKCk9PntqTHQoKTskTHQoKTtaTHQoKTtRTHQoKTtla3QoKTtua3QoKTtva3QoKTtza3QoKTtja3QoKTtoa3QoKTtwa3QoKTtiZy5wcm90b3R5cGU9alQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpiZyxjb3VudDpZTHQsZWFjaDpYTHQsZWFjaEFmdGVyOkpMdCxlYWNoQmVmb3JlOktMdCxzdW06dGt0LHNvcnQ6cmt0LHBhdGg6aWt0LGFuY2VzdG9yczpha3QsZGVzY2VuZGFudHM6bGt0LGxlYXZlczp1a3QsbGlua3M6Zmt0LGNvcHk6SFBlfX0pO2Z1bmN0aW9uIG1rdChlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscixuO3Q7KW49TWF0aC5yYW5kb20oKSp0LS18MCxyPWVbdF0sZVt0XT1lW25dLGVbbl09cjtyZXR1cm4gZX12YXIgZGt0LGdrdD1NKCgpPT57ZGt0PUFycmF5LnByb3RvdHlwZS5zbGljZX0pO2Z1bmN0aW9uICREKGUpe2Zvcih2YXIgdD0wLHI9KGU9bWt0KGRrdC5jYWxsKGUpKSkubGVuZ3RoLG49W10saSxvO3Q8cjspaT1lW3RdLG8mJl9rdChvLGkpPysrdDoobz1HUGUobj1xUGUobixpKSksdD0wKTtyZXR1cm4gb31mdW5jdGlvbiBxUGUoZSx0KXt2YXIgcixuO2lmKGdRKHQsZSkpcmV0dXJuW3RdO2ZvcihyPTA7cjxlLmxlbmd0aDsrK3IpaWYoWEQodCxlW3JdKSYmZ1EoWFQoZVtyXSx0KSxlKSlyZXR1cm5bZVtyXSx0XTtmb3Iocj0wO3I8ZS5sZW5ndGgtMTsrK3IpZm9yKG49cisxO248ZS5sZW5ndGg7KytuKWlmKFhEKFhUKGVbcl0sZVtuXSksdCkmJlhEKFhUKGVbcl0sdCksZVtuXSkmJlhEKFhUKGVbbl0sdCksZVtyXSkmJmdRKHlrdChlW3JdLGVbbl0sdCksZSkpcmV0dXJuW2Vbcl0sZVtuXSx0XTt0aHJvdyBuZXcgRXJyb3J9ZnVuY3Rpb24gWEQoZSx0KXt2YXIgcj1lLnItdC5yLG49dC54LWUueCxpPXQueS1lLnk7cmV0dXJuIHI8MHx8cipyPG4qbitpKml9ZnVuY3Rpb24gX2t0KGUsdCl7dmFyIHI9ZS5yLXQucisxZS02LG49dC54LWUueCxpPXQueS1lLnk7cmV0dXJuIHI+MCYmcipyPm4qbitpKml9ZnVuY3Rpb24gZ1EoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcilpZighX2t0KGUsdFtyXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gR1BlKGUpe3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAxOnJldHVybiBXUGUoZVswXSk7Y2FzZSAyOnJldHVybiBYVChlWzBdLGVbMV0pO2Nhc2UgMzpyZXR1cm4geWt0KGVbMF0sZVsxXSxlWzJdKX19ZnVuY3Rpb24gV1BlKGUpe3JldHVybnt4OmUueCx5OmUueSxyOmUucn19ZnVuY3Rpb24gWFQoZSx0KXt2YXIgcj1lLngsbj1lLnksaT1lLnIsbz10LngsYT10Lnkscz10LnIsbD1vLXIsYz1hLW4sdT1zLWksaD1NYXRoLnNxcnQobCpsK2MqYyk7cmV0dXJue3g6KHIrbytsL2gqdSkvMix5OihuK2ErYy9oKnUpLzIscjooaCtpK3MpLzJ9fWZ1bmN0aW9uIHlrdChlLHQscil7dmFyIG49ZS54LGk9ZS55LG89ZS5yLGE9dC54LHM9dC55LGw9dC5yLGM9ci54LHU9ci55LGg9ci5yLGY9bi1hLHA9bi1jLGQ9aS1zLGc9aS11LF89bC1vLHk9aC1vLHg9bipuK2kqaS1vKm8sYj14LWEqYS1zKnMrbCpsLFM9eC1jKmMtdSp1K2gqaCxDPXAqZC1mKmcsUD0oZCpTLWcqYikvKEMqMiktbixrPShnKl8tZCp5KS9DLE89KHAqYi1mKlMpLyhDKjIpLWksRD0oZip5LXAqXykvQyxCPWsqaytEKkQtMSxJPTIqKG8rUCprK08qRCksTD1QKlArTypPLW8qbyxSPS0oQj8oSStNYXRoLnNxcnQoSSpJLTQqQipMKSkvKDIqQik6TC9JKTtyZXR1cm57eDpuK1AraypSLHk6aStPK0QqUixyOlJ9fXZhciBfUT1NKCgpPT57Z2t0KCl9KTtmdW5jdGlvbiB2a3QoZSx0LHIpe3ZhciBuPWUueCxpPWUueSxvPXQucityLnIsYT1lLnIrci5yLHM9dC54LW4sbD10LnktaSxjPXMqcytsKmw7aWYoYyl7dmFyIHU9LjUrKChhKj1hKS0obyo9bykpLygyKmMpLGg9TWF0aC5zcXJ0KE1hdGgubWF4KDAsMipvKihhK2MpLShhLT1jKSphLW8qbykpLygyKmMpO3IueD1uK3UqcytoKmwsci55PWkrdSpsLWgqc31lbHNlIHIueD1uK2Esci55PWl9ZnVuY3Rpb24geGt0KGUsdCl7dmFyIHI9dC54LWUueCxuPXQueS1lLnksaT1lLnIrdC5yO3JldHVybiBpKmktMWUtNj5yKnIrbipufWZ1bmN0aW9uIGJrdChlKXt2YXIgdD1lLl8scj1lLm5leHQuXyxuPXQucityLnIsaT0odC54KnIucityLngqdC5yKS9uLG89KHQueSpyLnIrci55KnQucikvbjtyZXR1cm4gaSppK28qb31mdW5jdGlvbiBLRChlKXt0aGlzLl89ZSx0aGlzLm5leHQ9bnVsbCx0aGlzLnByZXZpb3VzPW51bGx9ZnVuY3Rpb24geVEoZSl7aWYoIShpPWUubGVuZ3RoKSlyZXR1cm4gMDt2YXIgdCxyLG4saSxvLGEscyxsLGMsdSxoO2lmKHQ9ZVswXSx0Lng9MCx0Lnk9MCwhKGk+MSkpcmV0dXJuIHQucjtpZihyPWVbMV0sdC54PS1yLnIsci54PXQucixyLnk9MCwhKGk+MikpcmV0dXJuIHQucityLnI7dmt0KHIsdCxuPWVbMl0pLHQ9bmV3IEtEKHQpLHI9bmV3IEtEKHIpLG49bmV3IEtEKG4pLHQubmV4dD1uLnByZXZpb3VzPXIsci5uZXh0PXQucHJldmlvdXM9bixuLm5leHQ9ci5wcmV2aW91cz10O3Q6Zm9yKHM9MztzPGk7KytzKXt2a3QodC5fLHIuXyxuPWVbc10pLG49bmV3IEtEKG4pLGw9ci5uZXh0LGM9dC5wcmV2aW91cyx1PXIuXy5yLGg9dC5fLnI7ZG8gaWYodTw9aCl7aWYoeGt0KGwuXyxuLl8pKXtyPWwsdC5uZXh0PXIsci5wcmV2aW91cz10LC0tcztjb250aW51ZSB0fXUrPWwuXy5yLGw9bC5uZXh0fWVsc2V7aWYoeGt0KGMuXyxuLl8pKXt0PWMsdC5uZXh0PXIsci5wcmV2aW91cz10LC0tcztjb250aW51ZSB0fWgrPWMuXy5yLGM9Yy5wcmV2aW91c313aGlsZShsIT09Yy5uZXh0KTtmb3Iobi5wcmV2aW91cz10LG4ubmV4dD1yLHQubmV4dD1yLnByZXZpb3VzPXI9bixvPWJrdCh0KTsobj1uLm5leHQpIT09cjspKGE9Ymt0KG4pKTxvJiYodD1uLG89YSk7cj10Lm5leHR9Zm9yKHQ9W3IuX10sbj1yOyhuPW4ubmV4dCkhPT1yOyl0LnB1c2gobi5fKTtmb3Iobj0kRCh0KSxzPTA7czxpOysrcyl0PWVbc10sdC54LT1uLngsdC55LT1uLnk7cmV0dXJuIG4ucn1mdW5jdGlvbiB3a3QoZSl7cmV0dXJuIHlRKGUpLGV9dmFyIHZRPU0oKCk9PntfUSgpfSk7ZnVuY3Rpb24gU2t0KGUpe3JldHVybiBlPT1udWxsP251bGw6VjIoZSl9ZnVuY3Rpb24gVjIoZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBlfXZhciBaRD1NKCgpPT57fSk7ZnVuY3Rpb24gZWQoKXtyZXR1cm4gMH1mdW5jdGlvbiB3ZyhlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIHhRPU0oKCk9Pnt9KTtmdW5jdGlvbiBZUGUoZSl7cmV0dXJuIE1hdGguc3FydChlLnZhbHVlKX1mdW5jdGlvbiBUa3QoKXt2YXIgZT1udWxsLHQ9MSxyPTEsbj1lZDtmdW5jdGlvbiBpKG8pe3JldHVybiBvLng9dC8yLG8ueT1yLzIsZT9vLmVhY2hCZWZvcmUoTWt0KGUpKS5lYWNoQWZ0ZXIoYlEobiwuNSkpLmVhY2hCZWZvcmUoRWt0KDEpKTpvLmVhY2hCZWZvcmUoTWt0KFlQZSkpLmVhY2hBZnRlcihiUShlZCwxKSkuZWFjaEFmdGVyKGJRKG4sby5yL01hdGgubWluKHQscikpKS5lYWNoQmVmb3JlKEVrdChNYXRoLm1pbih0LHIpLygyKm8ucikpKSxvfXJldHVybiBpLnJhZGl1cz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1Ta3QobyksaSk6ZX0saS5zaXplPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStvWzBdLHI9K29bMV0saSk6W3Qscl19LGkucGFkZGluZz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2Ygbz09ImZ1bmN0aW9uIj9vOndnKCtvKSxpKTpufSxpfWZ1bmN0aW9uIE1rdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dC5jaGlsZHJlbnx8KHQucj1NYXRoLm1heCgwLCtlKHQpfHwwKSl9fWZ1bmN0aW9uIGJRKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe2lmKG49ci5jaGlsZHJlbil7dmFyIG4saSxvPW4ubGVuZ3RoLGE9ZShyKSp0fHwwLHM7aWYoYSlmb3IoaT0wO2k8bzsrK2kpbltpXS5yKz1hO2lmKHM9eVEobiksYSlmb3IoaT0wO2k8bzsrK2kpbltpXS5yLT1hO3Iucj1zK2F9fX1mdW5jdGlvbiBFa3QoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPXQucGFyZW50O3Qucio9ZSxyJiYodC54PXIueCtlKnQueCx0Lnk9ci55K2UqdC55KX19dmFyIENrdD1NKCgpPT57dlEoKTtaRCgpO3hRKCl9KTtmdW5jdGlvbiBKRChlKXtlLngwPU1hdGgucm91bmQoZS54MCksZS55MD1NYXRoLnJvdW5kKGUueTApLGUueDE9TWF0aC5yb3VuZChlLngxKSxlLnkxPU1hdGgucm91bmQoZS55MSl9dmFyIHdRPU0oKCk9Pnt9KTtmdW5jdGlvbiBjZihlLHQscixuLGkpe2Zvcih2YXIgbz1lLmNoaWxkcmVuLGEscz0tMSxsPW8ubGVuZ3RoLGM9ZS52YWx1ZSYmKG4tdCkvZS52YWx1ZTsrK3M8bDspYT1vW3NdLGEueTA9cixhLnkxPWksYS54MD10LGEueDE9dCs9YS52YWx1ZSpjfXZhciBVMj1NKCgpPT57fSk7ZnVuY3Rpb24gQWt0KCl7dmFyIGU9MSx0PTEscj0wLG49ITE7ZnVuY3Rpb24gaShhKXt2YXIgcz1hLmhlaWdodCsxO3JldHVybiBhLngwPWEueTA9cixhLngxPWUsYS55MT10L3MsYS5lYWNoQmVmb3JlKG8odCxzKSksbiYmYS5lYWNoQmVmb3JlKEpEKSxhfWZ1bmN0aW9uIG8oYSxzKXtyZXR1cm4gZnVuY3Rpb24obCl7bC5jaGlsZHJlbiYmY2YobCxsLngwLGEqKGwuZGVwdGgrMSkvcyxsLngxLGEqKGwuZGVwdGgrMikvcyk7dmFyIGM9bC54MCx1PWwueTAsaD1sLngxLXIsZj1sLnkxLXI7aDxjJiYoYz1oPShjK2gpLzIpLGY8dSYmKHU9Zj0odStmKS8yKSxsLngwPWMsbC55MD11LGwueDE9aCxsLnkxPWZ9fXJldHVybiBpLnJvdW5kPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEhYSxpKTpufSxpLnNpemU9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K2FbMF0sdD0rYVsxXSxpKTpbZSx0XX0saS5wYWRkaW5nPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSthLGkpOnJ9LGl9dmFyIFBrdD1NKCgpPT57d1EoKTtVMigpfSk7ZnVuY3Rpb24gWFBlKGUpe3JldHVybiBlLmlkfWZ1bmN0aW9uICRQZShlKXtyZXR1cm4gZS5wYXJlbnRJZH1mdW5jdGlvbiBra3QoKXt2YXIgZT1YUGUsdD0kUGU7ZnVuY3Rpb24gcihuKXt2YXIgaSxvLGE9bi5sZW5ndGgscyxsLGMsdT1uZXcgQXJyYXkoYSksaCxmLHA9e307Zm9yKG89MDtvPGE7KytvKWk9bltvXSxjPXVbb109bmV3IGJnKGkpLChoPWUoaSxvLG4pKSE9bnVsbCYmKGgrPSIiKSYmKGY9SWt0KyhjLmlkPWgpLHBbZl09ZiBpbiBwP0xrdDpjKTtmb3Iobz0wO288YTsrK28paWYoYz11W29dLGg9dChuW29dLG8sbiksaD09bnVsbHx8IShoKz0iIikpe2lmKHMpdGhyb3cgbmV3IEVycm9yKCJtdWx0aXBsZSByb290cyIpO3M9Y31lbHNle2lmKGw9cFtJa3QraF0sIWwpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK2gpO2lmKGw9PT1Ma3QpdGhyb3cgbmV3IEVycm9yKCJhbWJpZ3VvdXM6ICIraCk7bC5jaGlsZHJlbj9sLmNoaWxkcmVuLnB1c2goYyk6bC5jaGlsZHJlbj1bY10sYy5wYXJlbnQ9bH1pZighcyl0aHJvdyBuZXcgRXJyb3IoIm5vIHJvb3QiKTtpZihzLnBhcmVudD1qUGUscy5lYWNoQmVmb3JlKGZ1bmN0aW9uKGQpe2QuZGVwdGg9ZC5wYXJlbnQuZGVwdGgrMSwtLWF9KS5lYWNoQmVmb3JlKG1RKSxzLnBhcmVudD1udWxsLGE+MCl0aHJvdyBuZXcgRXJyb3IoImN5Y2xlIik7cmV0dXJuIHN9cmV0dXJuIHIuaWQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9VjIobikscik6ZX0sci5wYXJlbnRJZD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1WMihuKSxyKTp0fSxyfXZhciBJa3QsalBlLExrdCxSa3Q9TSgoKT0+e1pEKCk7akQoKTtJa3Q9IiQiLGpQZT17ZGVwdGg6LTF9LExrdD17fX0pO2Z1bmN0aW9uIEtQZShlLHQpe3JldHVybiBlLnBhcmVudD09PXQucGFyZW50PzE6Mn1mdW5jdGlvbiBTUShlKXt2YXIgdD1lLmNoaWxkcmVuO3JldHVybiB0P3RbMF06ZS50fWZ1bmN0aW9uIE1RKGUpe3ZhciB0PWUuY2hpbGRyZW47cmV0dXJuIHQ/dFt0Lmxlbmd0aC0xXTplLnR9ZnVuY3Rpb24gWlBlKGUsdCxyKXt2YXIgbj1yLyh0LmktZS5pKTt0LmMtPW4sdC5zKz1yLGUuYys9bix0LnorPXIsdC5tKz1yfWZ1bmN0aW9uIEpQZShlKXtmb3IodmFyIHQ9MCxyPTAsbj1lLmNoaWxkcmVuLGk9bi5sZW5ndGgsbzstLWk+PTA7KW89bltpXSxvLnorPXQsby5tKz10LHQrPW8ucysocis9by5jKX1mdW5jdGlvbiBRUGUoZSx0LHIpe3JldHVybiBlLmEucGFyZW50PT09dC5wYXJlbnQ/ZS5hOnJ9ZnVuY3Rpb24gUUQoZSx0KXt0aGlzLl89ZSx0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49bnVsbCx0aGlzLkE9bnVsbCx0aGlzLmE9dGhpcyx0aGlzLno9MCx0aGlzLm09MCx0aGlzLmM9MCx0aGlzLnM9MCx0aGlzLnQ9bnVsbCx0aGlzLmk9dH1mdW5jdGlvbiB0NmUoZSl7Zm9yKHZhciB0PW5ldyBRRChlLDApLHIsbj1bdF0saSxvLGEscztyPW4ucG9wKCk7KWlmKG89ci5fLmNoaWxkcmVuKWZvcihyLmNoaWxkcmVuPW5ldyBBcnJheShzPW8ubGVuZ3RoKSxhPXMtMTthPj0wOy0tYSluLnB1c2goaT1yLmNoaWxkcmVuW2FdPW5ldyBRRChvW2FdLGEpKSxpLnBhcmVudD1yO3JldHVybih0LnBhcmVudD1uZXcgUUQobnVsbCwwKSkuY2hpbGRyZW49W3RdLHR9ZnVuY3Rpb24gTmt0KCl7dmFyIGU9S1BlLHQ9MSxyPTEsbj1udWxsO2Z1bmN0aW9uIGkoYyl7dmFyIHU9dDZlKGMpO2lmKHUuZWFjaEFmdGVyKG8pLHUucGFyZW50Lm09LXUueix1LmVhY2hCZWZvcmUoYSksbiljLmVhY2hCZWZvcmUobCk7ZWxzZXt2YXIgaD1jLGY9YyxwPWM7Yy5lYWNoQmVmb3JlKGZ1bmN0aW9uKHgpe3gueDxoLngmJihoPXgpLHgueD5mLngmJihmPXgpLHguZGVwdGg+cC5kZXB0aCYmKHA9eCl9KTt2YXIgZD1oPT09Zj8xOmUoaCxmKS8yLGc9ZC1oLngsXz10LyhmLngrZCtnKSx5PXIvKHAuZGVwdGh8fDEpO2MuZWFjaEJlZm9yZShmdW5jdGlvbih4KXt4Lng9KHgueCtnKSpfLHgueT14LmRlcHRoKnl9KX1yZXR1cm4gY31mdW5jdGlvbiBvKGMpe3ZhciB1PWMuY2hpbGRyZW4saD1jLnBhcmVudC5jaGlsZHJlbixmPWMuaT9oW2MuaS0xXTpudWxsO2lmKHUpe0pQZShjKTt2YXIgcD0odVswXS56K3VbdS5sZW5ndGgtMV0ueikvMjtmPyhjLno9Zi56K2UoYy5fLGYuXyksYy5tPWMuei1wKTpjLno9cH1lbHNlIGYmJihjLno9Zi56K2UoYy5fLGYuXykpO2MucGFyZW50LkE9cyhjLGYsYy5wYXJlbnQuQXx8aFswXSl9ZnVuY3Rpb24gYShjKXtjLl8ueD1jLnorYy5wYXJlbnQubSxjLm0rPWMucGFyZW50Lm19ZnVuY3Rpb24gcyhjLHUsaCl7aWYodSl7Zm9yKHZhciBmPWMscD1jLGQ9dSxnPWYucGFyZW50LmNoaWxkcmVuWzBdLF89Zi5tLHk9cC5tLHg9ZC5tLGI9Zy5tLFM7ZD1NUShkKSxmPVNRKGYpLGQmJmY7KWc9U1EoZykscD1NUShwKSxwLmE9YyxTPWQueit4LWYuei1fK2UoZC5fLGYuXyksUz4wJiYoWlBlKFFQZShkLGMsaCksYyxTKSxfKz1TLHkrPVMpLHgrPWQubSxfKz1mLm0sYis9Zy5tLHkrPXAubTtkJiYhTVEocCkmJihwLnQ9ZCxwLm0rPXgteSksZiYmIVNRKGcpJiYoZy50PWYsZy5tKz1fLWIsaD1jKX1yZXR1cm4gaH1mdW5jdGlvbiBsKGMpe2MueCo9dCxjLnk9Yy5kZXB0aCpyfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9YyxpKTplfSxpLnNpemU9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ITEsdD0rY1swXSxyPStjWzFdLGkpOm4/bnVsbDpbdCxyXX0saS5ub2RlU2l6ZT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMCx0PStjWzBdLHI9K2NbMV0saSk6bj9bdCxyXTpudWxsfSxpfXZhciBEa3Q9TSgoKT0+e2pEKCk7UUQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYmcucHJvdG90eXBlKX0pO2Z1bmN0aW9uIFNnKGUsdCxyLG4saSl7Zm9yKHZhciBvPWUuY2hpbGRyZW4sYSxzPS0xLGw9by5sZW5ndGgsYz1lLnZhbHVlJiYoaS1yKS9lLnZhbHVlOysrczxsOylhPW9bc10sYS54MD10LGEueDE9bixhLnkwPXIsYS55MT1yKz1hLnZhbHVlKmN9dmFyICRUPU0oKCk9Pnt9KTtmdW5jdGlvbiBUUShlLHQscixuLGksbyl7Zm9yKHZhciBhPVtdLHM9dC5jaGlsZHJlbixsLGMsdT0wLGg9MCxmPXMubGVuZ3RoLHAsZCxnPXQudmFsdWUsXyx5LHgsYixTLEMsUDt1PGY7KXtwPWktcixkPW8tbjtkbyBfPXNbaCsrXS52YWx1ZTt3aGlsZSghXyYmaDxmKTtmb3IoeT14PV8sQz1NYXRoLm1heChkL3AscC9kKS8oZyplKSxQPV8qXypDLFM9TWF0aC5tYXgoeC9QLFAveSk7aDxmOysraCl7aWYoXys9Yz1zW2hdLnZhbHVlLGM8eSYmKHk9YyksYz54JiYoeD1jKSxQPV8qXypDLGI9TWF0aC5tYXgoeC9QLFAveSksYj5TKXtfLT1jO2JyZWFrfVM9Yn1hLnB1c2gobD17dmFsdWU6XyxkaWNlOnA8ZCxjaGlsZHJlbjpzLnNsaWNlKHUsaCl9KSxsLmRpY2U/Y2YobCxyLG4saSxnP24rPWQqXy9nOm8pOlNnKGwscixuLGc/cis9cCpfL2c6aSxvKSxnLT1fLHU9aH1yZXR1cm4gYX12YXIgRVEsdE8sZU89TSgoKT0+e1UyKCk7JFQoKTtFUT0oMStNYXRoLnNxcnQoNSkpLzI7dE89ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSxvLGEscyl7VFEodCxuLGksbyxhLHMpfXJldHVybiByLnJhdGlvPWZ1bmN0aW9uKG4pe3JldHVybiBlKChuPStuKT4xP246MSl9LHJ9KEVRKX0pO2Z1bmN0aW9uIE9rdCgpe3ZhciBlPXRPLHQ9ITEscj0xLG49MSxpPVswXSxvPWVkLGE9ZWQscz1lZCxsPWVkLGM9ZWQ7ZnVuY3Rpb24gdShmKXtyZXR1cm4gZi54MD1mLnkwPTAsZi54MT1yLGYueTE9bixmLmVhY2hCZWZvcmUoaCksaT1bMF0sdCYmZi5lYWNoQmVmb3JlKEpEKSxmfWZ1bmN0aW9uIGgoZil7dmFyIHA9aVtmLmRlcHRoXSxkPWYueDArcCxnPWYueTArcCxfPWYueDEtcCx5PWYueTEtcDtfPGQmJihkPV89KGQrXykvMikseTxnJiYoZz15PShnK3kpLzIpLGYueDA9ZCxmLnkwPWcsZi54MT1fLGYueTE9eSxmLmNoaWxkcmVuJiYocD1pW2YuZGVwdGgrMV09byhmKS8yLGQrPWMoZiktcCxnKz1hKGYpLXAsXy09cyhmKS1wLHktPWwoZiktcCxfPGQmJihkPV89KGQrXykvMikseTxnJiYoZz15PShnK3kpLzIpLGUoZixkLGcsXyx5KSl9cmV0dXJuIHUucm91bmQ9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ISFmLHUpOnR9LHUuc2l6ZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rZlswXSxuPStmWzFdLHUpOltyLG5dfSx1LnRpbGU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9VjIoZiksdSk6ZX0sdS5wYWRkaW5nPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3UucGFkZGluZ0lubmVyKGYpLnBhZGRpbmdPdXRlcihmKTp1LnBhZGRpbmdJbm5lcigpfSx1LnBhZGRpbmdJbm5lcj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOndnKCtmKSx1KTpvfSx1LnBhZGRpbmdPdXRlcj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD91LnBhZGRpbmdUb3AoZikucGFkZGluZ1JpZ2h0KGYpLnBhZGRpbmdCb3R0b20oZikucGFkZGluZ0xlZnQoZik6dS5wYWRkaW5nVG9wKCl9LHUucGFkZGluZ1RvcD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOndnKCtmKSx1KTphfSx1LnBhZGRpbmdSaWdodD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOndnKCtmKSx1KTpzfSx1LnBhZGRpbmdCb3R0b209ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dHlwZW9mIGY9PSJmdW5jdGlvbiI/Zjp3ZygrZiksdSk6bH0sdS5wYWRkaW5nTGVmdD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOndnKCtmKSx1KTpjfSx1fXZhciB6a3Q9TSgoKT0+e3dRKCk7ZU8oKTtaRCgpO3hRKCl9KTtmdW5jdGlvbiBGa3QoZSx0LHIsbixpKXt2YXIgbz1lLmNoaWxkcmVuLGEscz1vLmxlbmd0aCxsLGM9bmV3IEFycmF5KHMrMSk7Zm9yKGNbMF09bD1hPTA7YTxzOysrYSljW2ErMV09bCs9b1thXS52YWx1ZTt1KDAscyxlLnZhbHVlLHQscixuLGkpO2Z1bmN0aW9uIHUoaCxmLHAsZCxnLF8seSl7aWYoaD49Zi0xKXt2YXIgeD1vW2hdO3gueDA9ZCx4LnkwPWcseC54MT1fLHgueTE9eTtyZXR1cm59Zm9yKHZhciBiPWNbaF0sUz1wLzIrYixDPWgrMSxQPWYtMTtDPFA7KXt2YXIgaz1DK1A+Pj4xO2Nba108Uz9DPWsrMTpQPWt9Uy1jW0MtMV08Y1tDXS1TJiZoKzE8QyYmLS1DO3ZhciBPPWNbQ10tYixEPXAtTztpZihfLWQ+eS1nKXt2YXIgQj0oZCpEK18qTykvcDt1KGgsQyxPLGQsZyxCLHkpLHUoQyxmLEQsQixnLF8seSl9ZWxzZXt2YXIgST0oZypEK3kqTykvcDt1KGgsQyxPLGQsZyxfLEkpLHUoQyxmLEQsZCxJLF8seSl9fX12YXIgQmt0PU0oKCk9Pnt9KTtmdW5jdGlvbiBIa3QoZSx0LHIsbixpKXsoZS5kZXB0aCYxP1NnOmNmKShlLHQscixuLGkpfXZhciBWa3Q9TSgoKT0+e1UyKCk7JFQoKX0pO3ZhciBVa3QscWt0PU0oKCk9PntVMigpOyRUKCk7ZU8oKTtVa3Q9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSxvLGEscyl7aWYoKGw9bi5fc3F1YXJpZnkpJiZsLnJhdGlvPT09dClmb3IodmFyIGwsYyx1LGgsZj0tMSxwLGQ9bC5sZW5ndGgsZz1uLnZhbHVlOysrZjxkOyl7Zm9yKGM9bFtmXSx1PWMuY2hpbGRyZW4saD1jLnZhbHVlPTAscD11Lmxlbmd0aDtoPHA7KytoKWMudmFsdWUrPXVbaF0udmFsdWU7Yy5kaWNlP2NmKGMsaSxvLGEsbys9KHMtbykqYy52YWx1ZS9nKTpTZyhjLGksbyxpKz0oYS1pKSpjLnZhbHVlL2cscyksZy09Yy52YWx1ZX1lbHNlIG4uX3NxdWFyaWZ5PWw9VFEodCxuLGksbyxhLHMpLGwucmF0aW89dH1yZXR1cm4gci5yYXRpbz1mdW5jdGlvbihuKXtyZXR1cm4gZSgobj0rbik+MT9uOjEpfSxyfShFUSl9KTt2YXIgR2t0PU0oKCk9PntXTHQoKTtqRCgpO0NrdCgpO3ZRKCk7X1EoKTtQa3QoKTtSa3QoKTtEa3QoKTt6a3QoKTtCa3QoKTtVMigpOyRUKCk7Vmt0KCk7ZU8oKTtxa3QoKX0pO2Z1bmN0aW9uIHJkKGUsdCxyKXtlLnByb3RvdHlwZT10LnByb3RvdHlwZT1yLHIuY29uc3RydWN0b3I9ZX1mdW5jdGlvbiBNZyhlLHQpe3ZhciByPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUpO2Zvcih2YXIgbiBpbiB0KXJbbl09dFtuXTtyZXR1cm4gcn12YXIgck89TSgoKT0+e30pO2Z1bmN0aW9uIGZmKCl7fWZ1bmN0aW9uIFlrdCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIGw2ZSgpe3JldHVybiBKa3QodGhpcykuZm9ybWF0SHNsKCl9ZnVuY3Rpb24gamt0KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gVGcoZSl7dmFyIHQscjtyZXR1cm4gZT0oZSsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKHQ9ZTZlLmV4ZWMoZSkpPyhyPXRbMV0ubGVuZ3RoLHQ9cGFyc2VJbnQodFsxXSwxNikscj09PTY/WGt0KHQpOnI9PT0zP25ldyBybyh0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKHQmMTUpPDw0fHQmMTUsMSk6cj09PTg/bk8odD4+MjQmMjU1LHQ+PjE2JjI1NSx0Pj44JjI1NSwodCYyNTUpLzI1NSk6cj09PTQ/bk8odD4+MTImMTV8dD4+OCYyNDAsdD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fHQmMjQwLCgodCYxNSk8PDR8dCYxNSkvMjU1KTpudWxsKToodD1yNmUuZXhlYyhlKSk/bmV3IHJvKHRbMV0sdFsyXSx0WzNdLDEpOih0PW42ZS5leGVjKGUpKT9uZXcgcm8odFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsMSk6KHQ9aTZlLmV4ZWMoZSkpP25PKHRbMV0sdFsyXSx0WzNdLHRbNF0pOih0PW82ZS5leGVjKGUpKT9uTyh0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCx0WzRdKToodD1hNmUuZXhlYyhlKSk/Wmt0KHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsMSk6KHQ9czZlLmV4ZWMoZSkpP1prdCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLHRbNF0pOldrdC5oYXNPd25Qcm9wZXJ0eShlKT9Ya3QoV2t0W2VdKTplPT09InRyYW5zcGFyZW50Ij9uZXcgcm8oTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBYa3QoZSl7cmV0dXJuIG5ldyBybyhlPj4xNiYyNTUsZT4+OCYyNTUsZSYyNTUsMSl9ZnVuY3Rpb24gbk8oZSx0LHIsbil7cmV0dXJuIG48PTAmJihlPXQ9cj1OYU4pLG5ldyBybyhlLHQscixuKX1mdW5jdGlvbiBaVChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGZmfHwoZT1UZyhlKSksZT8oZT1lLnJnYigpLG5ldyBybyhlLnIsZS5nLGUuYixlLm9wYWNpdHkpKTpuZXcgcm99ZnVuY3Rpb24gRzIoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP1pUKGUpOm5ldyBybyhlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gcm8oZSx0LHIsbil7dGhpcy5yPStlLHRoaXMuZz0rdCx0aGlzLmI9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uICRrdCgpe3JldHVybiIjIitDUSh0aGlzLnIpK0NRKHRoaXMuZykrQ1EodGhpcy5iKX1mdW5jdGlvbiBLa3QoKXt2YXIgZT10aGlzLm9wYWNpdHk7cmV0dXJuIGU9aXNOYU4oZSk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLChlPT09MT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKyhlPT09MT8iKSI6IiwgIitlKyIpIil9ZnVuY3Rpb24gQ1EoZSl7cmV0dXJuIGU9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZChlKXx8MCkpLChlPDE2PyIwIjoiIikrZS50b1N0cmluZygxNil9ZnVuY3Rpb24gWmt0KGUsdCxyLG4pe3JldHVybiBuPD0wP2U9dD1yPU5hTjpyPD0wfHxyPj0xP2U9dD1OYU46dDw9MCYmKGU9TmFOKSxuZXcgdWYoZSx0LHIsbil9ZnVuY3Rpb24gSmt0KGUpe2lmKGUgaW5zdGFuY2VvZiB1ZilyZXR1cm4gbmV3IHVmKGUuaCxlLnMsZS5sLGUub3BhY2l0eSk7aWYoZSBpbnN0YW5jZW9mIGZmfHwoZT1UZyhlKSksIWUpcmV0dXJuIG5ldyB1ZjtpZihlIGluc3RhbmNlb2YgdWYpcmV0dXJuIGU7ZT1lLnJnYigpO3ZhciB0PWUuci8yNTUscj1lLmcvMjU1LG49ZS5iLzI1NSxpPU1hdGgubWluKHQscixuKSxvPU1hdGgubWF4KHQscixuKSxhPU5hTixzPW8taSxsPShvK2kpLzI7cmV0dXJuIHM/KHQ9PT1vP2E9KHItbikvcysocjxuKSo2OnI9PT1vP2E9KG4tdCkvcysyOmE9KHQtcikvcys0LHMvPWw8LjU/bytpOjItby1pLGEqPTYwKTpzPWw+MCYmbDwxPzA6YSxuZXcgdWYoYSxzLGwsZS5vcGFjaXR5KX1mdW5jdGlvbiBKVChlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/Smt0KGUpOm5ldyB1ZihlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gdWYoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMucz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIEFRKGUsdCxyKXtyZXR1cm4oZTw2MD90KyhyLXQpKmUvNjA6ZTwxODA/cjplPDI0MD90KyhyLXQpKigyNDAtZSkvNjA6dCkqMjU1fXZhciBFZyxZeSxxMixLVCxoZixlNmUscjZlLG42ZSxpNmUsbzZlLGE2ZSxzNmUsV2t0LGlPPU0oKCk9PntyTygpO0VnPS43LFl5PTEvRWcscTI9IlxccyooWystXT9cXGQrKVxccyoiLEtUPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLGhmPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixlNmU9L14jKFswLTlhLWZdezMsOH0pJC8scjZlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1txMixxMixxMl0rIlxcKSQiKSxuNmU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW2hmLGhmLGhmXSsiXFwpJCIpLGk2ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW3EyLHEyLHEyLEtUXSsiXFwpJCIpLG82ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW2hmLGhmLGhmLEtUXSsiXFwpJCIpLGE2ZT1uZXcgUmVnRXhwKCJeaHNsXFwoIitbS1QsaGYsaGZdKyJcXCkkIiksczZlPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbS1QsaGYsaGYsS1RdKyJcXCkkIiksV2t0PXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O3JkKGZmLFRnLHtjb3B5OmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsZSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OllrdCxmb3JtYXRIZXg6WWt0LGZvcm1hdEhzbDpsNmUsZm9ybWF0UmdiOmprdCx0b1N0cmluZzpqa3R9KTtyZChybyxHMixNZyhmZix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9ZeTpNYXRoLnBvdyhZeSxlKSxuZXcgcm8odGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/RWc6TWF0aC5wb3coRWcsZSksbmV3IHJvKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6JGt0LGZvcm1hdEhleDoka3QsZm9ybWF0UmdiOktrdCx0b1N0cmluZzpLa3R9KSk7cmQodWYsSlQsTWcoZmYse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/WXk6TWF0aC5wb3coWXksZSksbmV3IHVmKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/RWc6TWF0aC5wb3coRWcsZSksbmV3IHVmKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5oJTM2MCsodGhpcy5oPDApKjM2MCx0PWlzTmFOKGUpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLHI9dGhpcy5sLG49cisocjwuNT9yOjEtcikqdCxpPTIqci1uO3JldHVybiBuZXcgcm8oQVEoZT49MjQwP2UtMjQwOmUrMTIwLGksbiksQVEoZSxpLG4pLEFRKGU8MTIwP2UrMjQwOmUtMTIwLGksbiksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJoc2woIjoiaHNsYSgiKSsodGhpcy5ofHwwKSsiLCAiKyh0aGlzLnN8fDApKjEwMCsiJSwgIisodGhpcy5sfHwwKSoxMDArIiUiKyhlPT09MT8iKSI6IiwgIitlKyIpIil9fSkpfSk7dmFyIG9PLGFPLFBRPU0oKCk9PntvTz1NYXRoLlBJLzE4MCxhTz0xODAvTWF0aC5QSX0pO2Z1bmN0aW9uIGk4dChlKXtpZihlIGluc3RhbmNlb2YgcGYpcmV0dXJuIG5ldyBwZihlLmwsZS5hLGUuYixlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiBuZClyZXR1cm4gbzh0KGUpO2UgaW5zdGFuY2VvZiByb3x8KGU9WlQoZSkpO3ZhciB0PVJRKGUucikscj1SUShlLmcpLG49UlEoZS5iKSxpPUlRKCguMjIyNTA0NSp0Ky43MTY4Nzg2KnIrLjA2MDYxNjkqbikvdDh0KSxvLGE7cmV0dXJuIHQ9PT1yJiZyPT09bj9vPWE9aToobz1JUSgoLjQzNjA3NDcqdCsuMzg1MDY0OSpyKy4xNDMwODA0Km4pL1FrdCksYT1JUSgoLjAxMzkzMjIqdCsuMDk3MTA0NSpyKy43MTQxNzMzKm4pL2U4dCkpLG5ldyBwZigxMTYqaS0xNiw1MDAqKG8taSksMjAwKihpLWEpLGUub3BhY2l0eSl9ZnVuY3Rpb24gWTIoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP2k4dChlKTpuZXcgcGYoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIHBmKGUsdCxyLG4pe3RoaXMubD0rZSx0aGlzLmE9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBJUShlKXtyZXR1cm4gZT5jNmU/TWF0aC5wb3coZSwxLzMpOmUvbjh0K3I4dH1mdW5jdGlvbiBMUShlKXtyZXR1cm4gZT5XMj9lKmUqZTpuOHQqKGUtcjh0KX1mdW5jdGlvbiBrUShlKXtyZXR1cm4gMjU1KihlPD0uMDAzMTMwOD8xMi45MiplOjEuMDU1Kk1hdGgucG93KGUsMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIFJRKGUpe3JldHVybihlLz0yNTUpPD0uMDQwNDU/ZS8xMi45MjpNYXRoLnBvdygoZSsuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIHU2ZShlKXtpZihlIGluc3RhbmNlb2YgbmQpcmV0dXJuIG5ldyBuZChlLmgsZS5jLGUubCxlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiBwZnx8KGU9aTh0KGUpKSxlLmE9PT0wJiZlLmI9PT0wKXJldHVybiBuZXcgbmQoTmFOLDA8ZS5sJiZlLmw8MTAwPzA6TmFOLGUubCxlLm9wYWNpdHkpO3ZhciB0PU1hdGguYXRhbjIoZS5iLGUuYSkqYU87cmV0dXJuIG5ldyBuZCh0PDA/dCszNjA6dCxNYXRoLnNxcnQoZS5hKmUuYStlLmIqZS5iKSxlLmwsZS5vcGFjaXR5KX1mdW5jdGlvbiBRVChlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/dTZlKGUpOm5ldyBuZChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gbmQoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMuYz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIG84dChlKXtpZihpc05hTihlLmgpKXJldHVybiBuZXcgcGYoZS5sLDAsMCxlLm9wYWNpdHkpO3ZhciB0PWUuaCpvTztyZXR1cm4gbmV3IHBmKGUubCxNYXRoLmNvcyh0KSplLmMsTWF0aC5zaW4odCkqZS5jLGUub3BhY2l0eSl9dmFyIHNPLFFrdCx0OHQsZTh0LHI4dCxXMixuOHQsYzZlLGE4dD1NKCgpPT57ck8oKTtpTygpO1BRKCk7c089MTgsUWt0PS45NjQyMix0OHQ9MSxlOHQ9LjgyNTIxLHI4dD00LzI5LFcyPTYvMjksbjh0PTMqVzIqVzIsYzZlPVcyKlcyKlcyO3JkKHBmLFkyLE1nKGZmLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHBmKHRoaXMubCtzTyooZT09bnVsbD8xOmUpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcGYodGhpcy5sLXNPKihlPT1udWxsPzE6ZSksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgZT0odGhpcy5sKzE2KS8xMTYsdD1pc05hTih0aGlzLmEpP2U6ZSt0aGlzLmEvNTAwLHI9aXNOYU4odGhpcy5iKT9lOmUtdGhpcy5iLzIwMDtyZXR1cm4gdD1Ra3QqTFEodCksZT10OHQqTFEoZSkscj1lOHQqTFEociksbmV3IHJvKGtRKDMuMTMzODU2MSp0LTEuNjE2ODY2NyplLS40OTA2MTQ2KnIpLGtRKC0uOTc4NzY4NCp0KzEuOTE2MTQxNSplKy4wMzM0NTQqciksa1EoLjA3MTk0NTMqdC0uMjI4OTkxNCplKzEuNDA1MjQyNypyKSx0aGlzLm9wYWNpdHkpfX0pKTtyZChuZCxRVCxNZyhmZix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBuZCh0aGlzLmgsdGhpcy5jLHRoaXMubCtzTyooZT09bnVsbD8xOmUpLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IG5kKHRoaXMuaCx0aGlzLmMsdGhpcy5sLXNPKihlPT1udWxsPzE6ZSksdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIG84dCh0aGlzKS5yZ2IoKX19KSl9KTtmdW5jdGlvbiBoNmUoZSl7aWYoZSBpbnN0YW5jZW9mIGp5KXJldHVybiBuZXcgankoZS5oLGUucyxlLmwsZS5vcGFjaXR5KTtlIGluc3RhbmNlb2Ygcm98fChlPVpUKGUpKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT0oYzh0Km4rczh0KnQtbDh0KnIpLyhjOHQrczh0LWw4dCksbz1uLWksYT0odEMqKHItaSktRFEqbykvbE8scz1NYXRoLnNxcnQoYSphK28qbykvKHRDKmkqKDEtaSkpLGw9cz9NYXRoLmF0YW4yKGEsbykqYU8tMTIwOk5hTjtyZXR1cm4gbmV3IGp5KGw8MD9sKzM2MDpsLHMsaSxlLm9wYWNpdHkpfWZ1bmN0aW9uIGoyKGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9oNmUoZSk6bmV3IGp5KGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBqeShlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259dmFyIHU4dCxOUSxEUSxsTyx0QyxzOHQsbDh0LGM4dCxoOHQ9TSgoKT0+e3JPKCk7aU8oKTtQUSgpO3U4dD0tLjE0ODYxLE5RPTEuNzgyNzcsRFE9LS4yOTIyNyxsTz0tLjkwNjQ5LHRDPTEuOTcyOTQsczh0PXRDKmxPLGw4dD10QypOUSxjOHQ9TlEqRFEtbE8qdTh0O3JkKGp5LGoyLE1nKGZmLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP1l5Ok1hdGgucG93KFl5LGUpLG5ldyBqeSh0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP0VnOk1hdGgucG93KEVnLGUpLG5ldyBqeSh0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBlPWlzTmFOKHRoaXMuaCk/MDoodGhpcy5oKzEyMCkqb08sdD0rdGhpcy5sLHI9aXNOYU4odGhpcy5zKT8wOnRoaXMucyp0KigxLXQpLG49TWF0aC5jb3MoZSksaT1NYXRoLnNpbihlKTtyZXR1cm4gbmV3IHJvKDI1NSoodCtyKih1OHQqbitOUSppKSksMjU1Kih0K3IqKERRKm4rbE8qaSkpLDI1NSoodCtyKih0QypuKSksdGhpcy5vcGFjaXR5KX19KSl9KTt2YXIgWHk9TSgoKT0+e2lPKCk7YTh0KCk7aDh0KCl9KTtmdW5jdGlvbiBPUShlLHQscixuLGkpe3ZhciBvPWUqZSxhPW8qZTtyZXR1cm4oKDEtMyplKzMqby1hKSp0Kyg0LTYqbyszKmEpKnIrKDErMyplKzMqby0zKmEpKm4rYSppKS82fWZ1bmN0aW9uIGNPKGUpe3ZhciB0PWUubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXI8PTA/cj0wOnI+PTE/KHI9MSx0LTEpOk1hdGguZmxvb3Iocip0KSxpPWVbbl0sbz1lW24rMV0sYT1uPjA/ZVtuLTFdOjIqaS1vLHM9bjx0LTE/ZVtuKzJdOjIqby1pO3JldHVybiBPUSgoci1uL3QpKnQsYSxpLG8scyl9fXZhciB1Tz1NKCgpPT57fSk7ZnVuY3Rpb24gaE8oZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPU1hdGguZmxvb3IoKChyJT0xKTwwPysrcjpyKSp0KSxpPWVbKG4rdC0xKSV0XSxvPWVbbiV0XSxhPWVbKG4rMSkldF0scz1lWyhuKzIpJXRdO3JldHVybiBPUSgoci1uL3QpKnQsaSxvLGEscyl9fXZhciB6UT1NKCgpPT57dU8oKX0pO2Z1bmN0aW9uIFgyKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgRlE9TSgoKT0+e30pO2Z1bmN0aW9uIGY4dChlLHQpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gZStyKnR9fWZ1bmN0aW9uIGY2ZShlLHQscil7cmV0dXJuIGU9TWF0aC5wb3coZSxyKSx0PU1hdGgucG93KHQsciktZSxyPTEvcixmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5wb3coZStuKnQscil9fWZ1bmN0aW9uICQyKGUsdCl7dmFyIHI9dC1lO3JldHVybiByP2Y4dChlLHI+MTgwfHxyPC0xODA/ci0zNjAqTWF0aC5yb3VuZChyLzM2MCk6cik6WDIoaXNOYU4oZSk/dDplKX1mdW5jdGlvbiBwOHQoZSl7cmV0dXJuKGU9K2UpPT0xP1FuOmZ1bmN0aW9uKHQscil7cmV0dXJuIHItdD9mNmUodCxyLGUpOlgyKGlzTmFOKHQpP3I6dCl9fWZ1bmN0aW9uIFFuKGUsdCl7dmFyIHI9dC1lO3JldHVybiByP2Y4dChlLHIpOlgyKGlzTmFOKGUpP3Q6ZSl9dmFyIEsyPU0oKCk9PntGUSgpfSk7ZnVuY3Rpb24gZDh0KGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKSxhLHM7Zm9yKGE9MDthPHI7KythKXM9RzIodFthXSksblthXT1zLnJ8fDAsaVthXT1zLmd8fDAsb1thXT1zLmJ8fDA7cmV0dXJuIG49ZShuKSxpPWUoaSksbz1lKG8pLHMub3BhY2l0eT0xLGZ1bmN0aW9uKGwpe3JldHVybiBzLnI9bihsKSxzLmc9aShsKSxzLmI9byhsKSxzKyIifX19dmFyIGVDLG04dCxnOHQsQlE9TSgoKT0+e1h5KCk7dU8oKTt6USgpO0syKCk7ZUM9ZnVuY3Rpb24gZSh0KXt2YXIgcj1wOHQodCk7ZnVuY3Rpb24gbihpLG8pe3ZhciBhPXIoKGk9RzIoaSkpLnIsKG89RzIobykpLnIpLHM9cihpLmcsby5nKSxsPXIoaS5iLG8uYiksYz1RbihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkucj1hKHUpLGkuZz1zKHUpLGkuYj1sKHUpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPWUsbn0oMSk7bTh0PWQ4dChjTyksZzh0PWQ4dChoTyl9KTtmdW5jdGlvbiBmTyhlLHQpe3ZhciByPXQ/dC5sZW5ndGg6MCxuPWU/TWF0aC5taW4ocixlLmxlbmd0aCk6MCxpPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShyKSxhO2ZvcihhPTA7YTxuOysrYSlpW2FdPVoyKGVbYV0sdFthXSk7Zm9yKDthPHI7KythKW9bYV09dFthXTtyZXR1cm4gZnVuY3Rpb24ocyl7Zm9yKGE9MDthPG47KythKW9bYV09aVthXShzKTtyZXR1cm4gb319dmFyIEhRPU0oKCk9PntwTygpfSk7ZnVuY3Rpb24gZE8oZSx0KXt2YXIgcj1uZXcgRGF0ZTtyZXR1cm4gZT0rZSx0LT1lLGZ1bmN0aW9uKG4pe3JldHVybiByLnNldFRpbWUoZSt0Km4pLHJ9fXZhciBWUT1NKCgpPT57fSk7ZnVuY3Rpb24gUHMoZSx0KXtyZXR1cm4gZT0rZSx0LT1lLGZ1bmN0aW9uKHIpe3JldHVybiBlK3Qqcn19dmFyIHJDPU0oKCk9Pnt9KTtmdW5jdGlvbiBtTyhlLHQpe3ZhciByPXt9LG49e30saTsoZT09PW51bGx8fHR5cGVvZiBlIT0ib2JqZWN0IikmJihlPXt9KSwodD09PW51bGx8fHR5cGVvZiB0IT0ib2JqZWN0IikmJih0PXt9KTtmb3IoaSBpbiB0KWkgaW4gZT9yW2ldPVoyKGVbaV0sdFtpXSk6bltpXT10W2ldO3JldHVybiBmdW5jdGlvbihvKXtmb3IoaSBpbiByKW5baV09cltpXShvKTtyZXR1cm4gbn19dmFyIFVRPU0oKCk9PntwTygpfSk7ZnVuY3Rpb24gcDZlKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBkNmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpKyIifX1mdW5jdGlvbiBnTyhlLHQpe3ZhciByPUdRLmxhc3RJbmRleD1xUS5sYXN0SW5kZXg9MCxuLGksbyxhPS0xLHM9W10sbD1bXTtmb3IoZT1lKyIiLHQ9dCsiIjsobj1HUS5leGVjKGUpKSYmKGk9cVEuZXhlYyh0KSk7KShvPWkuaW5kZXgpPnImJihvPXQuc2xpY2UocixvKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLChuPW5bMF0pPT09KGk9aVswXSk/c1thXT9zW2FdKz1pOnNbKythXT1pOihzWysrYV09bnVsbCxsLnB1c2goe2k6YSx4OlBzKG4saSl9KSkscj1xUS5sYXN0SW5kZXg7cmV0dXJuIHI8dC5sZW5ndGgmJihvPXQuc2xpY2Uociksc1thXT9zW2FdKz1vOnNbKythXT1vKSxzLmxlbmd0aDwyP2xbMF0/ZDZlKGxbMF0ueCk6cDZlKHQpOih0PWwubGVuZ3RoLGZ1bmN0aW9uKGMpe2Zvcih2YXIgdT0wLGg7dTx0OysrdSlzWyhoPWxbdV0pLmldPWgueChjKTtyZXR1cm4gcy5qb2luKCIiKX0pfXZhciBHUSxxUSxXUT1NKCgpPT57ckMoKTtHUT0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2cscVE9bmV3IFJlZ0V4cChHUS5zb3VyY2UsImciKX0pO2Z1bmN0aW9uIFoyKGUsdCl7dmFyIHI9dHlwZW9mIHQsbjtyZXR1cm4gdD09bnVsbHx8cj09PSJib29sZWFuIj9YMih0KToocj09PSJudW1iZXIiP1BzOnI9PT0ic3RyaW5nIj8obj1UZyh0KSk/KHQ9bixlQyk6Z086dCBpbnN0YW5jZW9mIFRnP2VDOnQgaW5zdGFuY2VvZiBEYXRlP2RPOkFycmF5LmlzQXJyYXkodCk/Zk86dHlwZW9mIHQudmFsdWVPZiE9ImZ1bmN0aW9uIiYmdHlwZW9mIHQudG9TdHJpbmchPSJmdW5jdGlvbiJ8fGlzTmFOKHQpP21POlBzKShlLHQpfXZhciBwTz1NKCgpPT57WHkoKTtCUSgpO0hRKCk7VlEoKTtyQygpO1VRKCk7V1EoKTtGUSgpfSk7ZnVuY3Rpb24gXzh0KGUsdCl7cmV0dXJuIGU9K2UsdC09ZSxmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5yb3VuZChlK3Qqcil9fXZhciB5OHQ9TSgoKT0+e30pO2Z1bmN0aW9uIFlRKGUsdCxyLG4saSxvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KGUqZSt0KnQpKSYmKGUvPWEsdC89YSksKGw9ZSpyK3QqbikmJihyLT1lKmwsbi09dCpsKSwocz1NYXRoLnNxcnQocipyK24qbikpJiYoci89cyxuLz1zLGwvPXMpLGUqbjx0KnImJihlPS1lLHQ9LXQsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMih0LGUpKnY4dCxza2V3WDpNYXRoLmF0YW4obCkqdjh0LHNjYWxlWDphLHNjYWxlWTpzfX12YXIgdjh0LF9PLHg4dD1NKCgpPT57djh0PTE4MC9NYXRoLlBJLF9PPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9fSk7ZnVuY3Rpb24gdzh0KGUpe3JldHVybiBlPT09Im5vbmUiP19POihuQ3x8KG5DPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLGpRPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxiOHQ9ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLG5DLnN0eWxlLnRyYW5zZm9ybT1lLGU9Yjh0LmdldENvbXB1dGVkU3R5bGUoalEuYXBwZW5kQ2hpbGQobkMpLG51bGwpLmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpLGpRLnJlbW92ZUNoaWxkKG5DKSxlPWUuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSxZUSgrZVswXSwrZVsxXSwrZVsyXSwrZVszXSwrZVs0XSwrZVs1XSkpfWZ1bmN0aW9uIFM4dChlKXtyZXR1cm4gZT09bnVsbD9fTzooeU98fCh5Tz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSx5Ty5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsZSksKGU9eU8udHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KGU9ZS5tYXRyaXgsWVEoZS5hLGUuYixlLmMsZS5kLGUuZSxlLmYpKTpfTyl9dmFyIG5DLGpRLGI4dCx5TyxNOHQ9TSgoKT0+e3g4dCgpfSk7ZnVuY3Rpb24gRTh0KGUsdCxyLG4pe2Z1bmN0aW9uIGkoYyl7cmV0dXJuIGMubGVuZ3RoP2MucG9wKCkrIiAiOiIifWZ1bmN0aW9uIG8oYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLHQsbnVsbCxyKTtkLnB1c2goe2k6Zy00LHg6UHMoYyxoKX0se2k6Zy0yLHg6UHModSxmKX0pfWVsc2UoaHx8ZikmJnAucHVzaCgidHJhbnNsYXRlKCIraCt0K2Yrcil9ZnVuY3Rpb24gYShjLHUsaCxmKXtjIT09dT8oYy11PjE4MD91Kz0zNjA6dS1jPjE4MCYmKGMrPTM2MCksZi5wdXNoKHtpOmgucHVzaChpKGgpKyJyb3RhdGUoIixudWxsLG4pLTIseDpQcyhjLHUpfSkpOnUmJmgucHVzaChpKGgpKyJyb3RhdGUoIit1K24pfWZ1bmN0aW9uIHMoYyx1LGgsZil7YyE9PXU/Zi5wdXNoKHtpOmgucHVzaChpKGgpKyJza2V3WCgiLG51bGwsbiktMix4OlBzKGMsdSl9KTp1JiZoLnB1c2goaShoKSsic2tld1goIit1K24pfWZ1bmN0aW9uIGwoYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKGkocCkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO2QucHVzaCh7aTpnLTQseDpQcyhjLGgpfSx7aTpnLTIseDpQcyh1LGYpfSl9ZWxzZShoIT09MXx8ZiE9PTEpJiZwLnB1c2goaShwKSsic2NhbGUoIitoKyIsIitmKyIpIil9cmV0dXJuIGZ1bmN0aW9uKGMsdSl7dmFyIGg9W10sZj1bXTtyZXR1cm4gYz1lKGMpLHU9ZSh1KSxvKGMudHJhbnNsYXRlWCxjLnRyYW5zbGF0ZVksdS50cmFuc2xhdGVYLHUudHJhbnNsYXRlWSxoLGYpLGEoYy5yb3RhdGUsdS5yb3RhdGUsaCxmKSxzKGMuc2tld1gsdS5za2V3WCxoLGYpLGwoYy5zY2FsZVgsYy5zY2FsZVksdS5zY2FsZVgsdS5zY2FsZVksaCxmKSxjPXU9bnVsbCxmdW5jdGlvbihwKXtmb3IodmFyIGQ9LTEsZz1mLmxlbmd0aCxfOysrZDxnOyloWyhfPWZbZF0pLmldPV8ueChwKTtyZXR1cm4gaC5qb2luKCIiKX19fXZhciBUOHQsQzh0LEE4dD1NKCgpPT57ckMoKTtNOHQoKTtUOHQ9RTh0KHc4dCwicHgsICIsInB4KSIsImRlZykiKSxDOHQ9RTh0KFM4dCwiLCAiLCIpIiwiKSIpfSk7ZnVuY3Rpb24gSTh0KGUpe3JldHVybigoZT1NYXRoLmV4cChlKSkrMS9lKS8yfWZ1bmN0aW9uIGc2ZShlKXtyZXR1cm4oKGU9TWF0aC5leHAoZSkpLTEvZSkvMn1mdW5jdGlvbiBfNmUoZSl7cmV0dXJuKChlPU1hdGguZXhwKDIqZSkpLTEpLyhlKzEpfWZ1bmN0aW9uIEw4dChlLHQpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxvPXRbMF0sYT10WzFdLHM9dFsyXSxsPW8tcixjPWEtbix1PWwqbCtjKmMsaCxmO2lmKHU8bTZlKWY9TWF0aC5sb2cocy9pKS9pQyxoPWZ1bmN0aW9uKHgpe3JldHVybltyK3gqbCxuK3gqYyxpKk1hdGguZXhwKGlDKngqZildfTtlbHNle3ZhciBwPU1hdGguc3FydCh1KSxkPShzKnMtaSppK1A4dCp1KS8oMippKlhRKnApLGc9KHMqcy1pKmktUDh0KnUpLygyKnMqWFEqcCksXz1NYXRoLmxvZyhNYXRoLnNxcnQoZCpkKzEpLWQpLHk9TWF0aC5sb2coTWF0aC5zcXJ0KGcqZysxKS1nKTtmPSh5LV8pL2lDLGg9ZnVuY3Rpb24oeCl7dmFyIGI9eCpmLFM9STh0KF8pLEM9aS8oWFEqcCkqKFMqXzZlKGlDKmIrXyktZzZlKF8pKTtyZXR1cm5bcitDKmwsbitDKmMsaSpTL0k4dChpQypiK18pXX19cmV0dXJuIGguZHVyYXRpb249ZioxZTMsaH12YXIgaUMsWFEsUDh0LG02ZSxrOHQ9TSgoKT0+e2lDPU1hdGguU1FSVDIsWFE9MixQOHQ9NCxtNmU9MWUtMTJ9KTtmdW5jdGlvbiBSOHQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7dmFyIG49ZSgodD1KVCh0KSkuaCwocj1KVChyKSkuaCksaT1Rbih0LnMsci5zKSxvPVFuKHQubCxyLmwpLGE9UW4odC5vcGFjaXR5LHIub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiB0Lmg9bihzKSx0LnM9aShzKSx0Lmw9byhzKSx0Lm9wYWNpdHk9YShzKSx0KyIifX19dmFyIE44dCxEOHQsTzh0PU0oKCk9PntYeSgpO0syKCk7Tjh0PVI4dCgkMiksRDh0PVI4dChRbil9KTtmdW5jdGlvbiAkUShlLHQpe3ZhciByPVFuKChlPVkyKGUpKS5sLCh0PVkyKHQpKS5sKSxuPVFuKGUuYSx0LmEpLGk9UW4oZS5iLHQuYiksbz1RbihlLm9wYWNpdHksdC5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIGUubD1yKGEpLGUuYT1uKGEpLGUuYj1pKGEpLGUub3BhY2l0eT1vKGEpLGUrIiJ9fXZhciB6OHQ9TSgoKT0+e1h5KCk7SzIoKX0pO2Z1bmN0aW9uIEY4dChlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1lKCh0PVFUKHQpKS5oLChyPVFUKHIpKS5oKSxpPVFuKHQuYyxyLmMpLG89UW4odC5sLHIubCksYT1Rbih0Lm9wYWNpdHksci5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIHQuaD1uKHMpLHQuYz1pKHMpLHQubD1vKHMpLHQub3BhY2l0eT1hKHMpLHQrIiJ9fX12YXIgQjh0LEg4dCxWOHQ9TSgoKT0+e1h5KCk7SzIoKTtCOHQ9Rjh0KCQyKSxIOHQ9Rjh0KFFuKX0pO2Z1bmN0aW9uIFU4dChlKXtyZXR1cm4gZnVuY3Rpb24gdChyKXtyPStyO2Z1bmN0aW9uIG4oaSxvKXt2YXIgYT1lKChpPWoyKGkpKS5oLChvPWoyKG8pKS5oKSxzPVFuKGkucyxvLnMpLGw9UW4oaS5sLG8ubCksYz1RbihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkuaD1hKHUpLGkucz1zKHUpLGkubD1sKE1hdGgucG93KHUscikpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPXQsbn0oMSl9dmFyIHE4dCxHOHQsVzh0PU0oKCk9PntYeSgpO0syKCk7cTh0PVU4dCgkMiksRzh0PVU4dChRbil9KTtmdW5jdGlvbiBZOHQoZSx0KXtmb3IodmFyIHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09ZShuLyh0LTEpKTtyZXR1cm4gcn12YXIgajh0PU0oKCk9Pnt9KTt2YXIgWDh0PU0oKCk9PntwTygpO0hRKCk7dU8oKTt6USgpO1ZRKCk7ckMoKTtVUSgpO3k4dCgpO1dRKCk7QTh0KCk7azh0KCk7QlEoKTtPOHQoKTt6OHQoKTtWOHQoKTtXOHQoKTtqOHQoKX0pO2Z1bmN0aW9uIEpRKCl7dGhpcy5feDA9dGhpcy5feTA9dGhpcy5feDE9dGhpcy5feTE9bnVsbCx0aGlzLl89IiJ9ZnVuY3Rpb24gJDh0KCl7cmV0dXJuIG5ldyBKUX12YXIgS1EsWlEsJHkseTZlLEs4dCxaOHQ9TSgoKT0+e0tRPU1hdGguUEksWlE9MipLUSwkeT0xZS02LHk2ZT1aUS0keTtKUS5wcm90b3R5cGU9JDh0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6SlEsbW92ZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPSt0KX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5feDEhPT1udWxsJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSxsaW5lVG86ZnVuY3Rpb24oZSx0KXt0aGlzLl8rPSJMIisodGhpcy5feDE9K2UpKyIsIisodGhpcy5feTE9K3QpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKGUsdCxyLG4pe3RoaXMuXys9IlEiKyArZSsiLCIrICt0KyIsIisodGhpcy5feDE9K3IpKyIsIisodGhpcy5feTE9K24pfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKGUsdCxyLG4saSxvKXt0aGlzLl8rPSJDIisgK2UrIiwiKyArdCsiLCIrICtyKyIsIisgK24rIiwiKyh0aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MT0rbyl9LGFyY1RvOmZ1bmN0aW9uKGUsdCxyLG4saSl7ZT0rZSx0PSt0LHI9K3Isbj0rbixpPStpO3ZhciBvPXRoaXMuX3gxLGE9dGhpcy5feTEscz1yLWUsbD1uLXQsYz1vLWUsdT1hLXQsaD1jKmMrdSp1O2lmKGk8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIitpKTtpZih0aGlzLl94MT09PW51bGwpdGhpcy5fKz0iTSIrKHRoaXMuX3gxPWUpKyIsIisodGhpcy5feTE9dCk7ZWxzZSBpZihoPiR5KWlmKCEoTWF0aC5hYnModSpzLWwqYyk+JHkpfHwhaSl0aGlzLl8rPSJMIisodGhpcy5feDE9ZSkrIiwiKyh0aGlzLl95MT10KTtlbHNle3ZhciBmPXItbyxwPW4tYSxkPXMqcytsKmwsZz1mKmYrcCpwLF89TWF0aC5zcXJ0KGQpLHk9TWF0aC5zcXJ0KGgpLHg9aSpNYXRoLnRhbigoS1EtTWF0aC5hY29zKChkK2gtZykvKDIqXyp5KSkpLzIpLGI9eC95LFM9eC9fO01hdGguYWJzKGItMSk+JHkmJih0aGlzLl8rPSJMIisoZStiKmMpKyIsIisodCtiKnUpKSx0aGlzLl8rPSJBIitpKyIsIitpKyIsMCwwLCIrICsodSpmPmMqcCkrIiwiKyh0aGlzLl94MT1lK1MqcykrIiwiKyh0aGlzLl95MT10K1MqbCl9fSxhcmM6ZnVuY3Rpb24oZSx0LHIsbixpLG8pe2U9K2UsdD0rdCxyPStyO3ZhciBhPXIqTWF0aC5jb3Mobikscz1yKk1hdGguc2luKG4pLGw9ZSthLGM9dCtzLHU9MV5vLGg9bz9uLWk6aS1uO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIityKTt0aGlzLl94MT09PW51bGw/dGhpcy5fKz0iTSIrbCsiLCIrYzooTWF0aC5hYnModGhpcy5feDEtbCk+JHl8fE1hdGguYWJzKHRoaXMuX3kxLWMpPiR5KSYmKHRoaXMuXys9IkwiK2wrIiwiK2MpLHImJihoPDAmJihoPWglWlErWlEpLGg+eTZlP3RoaXMuXys9IkEiK3IrIiwiK3IrIiwwLDEsIit1KyIsIisoZS1hKSsiLCIrKHQtcykrIkEiK3IrIiwiK3IrIiwwLDEsIit1KyIsIisodGhpcy5feDE9bCkrIiwiKyh0aGlzLl95MT1jKTpoPiR5JiYodGhpcy5fKz0iQSIrcisiLCIrcisiLDAsIisgKyhoPj1LUSkrIiwiK3UrIiwiKyh0aGlzLl94MT1lK3IqTWF0aC5jb3MoaSkpKyIsIisodGhpcy5feTE9dCtyKk1hdGguc2luKGkpKSkpfSxyZWN0OmZ1bmN0aW9uKGUsdCxyLG4pe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rZSkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rdCkrImgiKyArcisidiIrICtuKyJoIistcisiWiJ9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX319O0s4dD0kOHR9KTt2YXIgSjh0PU0oKCk9PntaOHQoKX0pO2Z1bmN0aW9uIFE4dChlKXtmb3IodmFyIHQ9LTEscj1lLmxlbmd0aCxuLGk9ZVtyLTFdLG89MDsrK3Q8cjspbj1pLGk9ZVt0XSxvKz1uWzFdKmlbMF0tblswXSppWzFdO3JldHVybiBvLzJ9dmFyIHRSdD1NKCgpPT57fSk7ZnVuY3Rpb24gZVJ0KGUpe2Zvcih2YXIgdD0tMSxyPWUubGVuZ3RoLG49MCxpPTAsbyxhPWVbci0xXSxzLGw9MDsrK3Q8cjspbz1hLGE9ZVt0XSxsKz1zPW9bMF0qYVsxXS1hWzBdKm9bMV0sbis9KG9bMF0rYVswXSkqcyxpKz0ob1sxXSthWzFdKSpzO3JldHVybiBsKj0zLFtuL2wsaS9sXX12YXIgclJ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBuUnQoZSx0LHIpe3JldHVybih0WzBdLWVbMF0pKihyWzFdLWVbMV0pLSh0WzFdLWVbMV0pKihyWzBdLWVbMF0pfXZhciBpUnQ9TSgoKT0+e30pO2Z1bmN0aW9uIHY2ZShlLHQpe3JldHVybiBlWzBdLXRbMF18fGVbMV0tdFsxXX1mdW5jdGlvbiBvUnQoZSl7Zm9yKHZhciB0PWUubGVuZ3RoLHI9WzAsMV0sbj0yLGk9MjtpPHQ7KytpKXtmb3IoO24+MSYmblJ0KGVbcltuLTJdXSxlW3Jbbi0xXV0sZVtpXSk8PTA7KS0tbjtyW24rK109aX1yZXR1cm4gci5zbGljZSgwLG4pfWZ1bmN0aW9uIGFSdChlKXtpZigocj1lLmxlbmd0aCk8MylyZXR1cm4gbnVsbDt2YXIgdCxyLG49bmV3IEFycmF5KHIpLGk9bmV3IEFycmF5KHIpO2Zvcih0PTA7dDxyOysrdCluW3RdPVsrZVt0XVswXSwrZVt0XVsxXSx0XTtmb3Iobi5zb3J0KHY2ZSksdD0wO3Q8cjsrK3QpaVt0XT1bblt0XVswXSwtblt0XVsxXV07dmFyIG89b1J0KG4pLGE9b1J0KGkpLHM9YVswXT09PW9bMF0sbD1hW2EubGVuZ3RoLTFdPT09b1tvLmxlbmd0aC0xXSxjPVtdO2Zvcih0PW8ubGVuZ3RoLTE7dD49MDstLXQpYy5wdXNoKGVbbltvW3RdXVsyXV0pO2Zvcih0PStzO3Q8YS5sZW5ndGgtbDsrK3QpYy5wdXNoKGVbblthW3RdXVsyXV0pO3JldHVybiBjfXZhciBzUnQ9TSgoKT0+e2lSdCgpfSk7ZnVuY3Rpb24gbFJ0KGUsdCl7Zm9yKHZhciByPWUubGVuZ3RoLG49ZVtyLTFdLGk9dFswXSxvPXRbMV0sYT1uWzBdLHM9blsxXSxsLGMsdT0hMSxoPTA7aDxyOysraCluPWVbaF0sbD1uWzBdLGM9blsxXSxjPm8hPXM+byYmaTwoYS1sKSooby1jKS8ocy1jKStsJiYodT0hdSksYT1sLHM9YztyZXR1cm4gdX12YXIgY1J0PU0oKCk9Pnt9KTtmdW5jdGlvbiB1UnQoZSl7Zm9yKHZhciB0PS0xLHI9ZS5sZW5ndGgsbj1lW3ItMV0saSxvLGE9blswXSxzPW5bMV0sbD0wOysrdDxyOylpPWEsbz1zLG49ZVt0XSxhPW5bMF0scz1uWzFdLGktPWEsby09cyxsKz1NYXRoLnNxcnQoaSppK28qbyk7cmV0dXJuIGx9dmFyIGhSdD1NKCgpPT57fSk7dmFyIGZSdD1NKCgpPT57dFJ0KCk7clJ0KCk7c1J0KCk7Y1J0KCk7aFJ0KCl9KTtmdW5jdGlvbiBwUnQoZSl7dmFyIHQ9K3RoaXMuX3guY2FsbChudWxsLGUpLHI9K3RoaXMuX3kuY2FsbChudWxsLGUpO3JldHVybiBkUnQodGhpcy5jb3Zlcih0LHIpLHQscixlKX1mdW5jdGlvbiBkUnQoZSx0LHIsbil7aWYoaXNOYU4odCl8fGlzTmFOKHIpKXJldHVybiBlO3ZhciBpLG89ZS5fcm9vdCxhPXtkYXRhOm59LHM9ZS5feDAsbD1lLl95MCxjPWUuX3gxLHU9ZS5feTEsaCxmLHAsZCxnLF8seSx4O2lmKCFvKXJldHVybiBlLl9yb290PWEsZTtmb3IoO28ubGVuZ3RoOylpZigoZz10Pj0oaD0ocytjKS8yKSk/cz1oOmM9aCwoXz1yPj0oZj0obCt1KS8yKSk/bD1mOnU9ZixpPW8sIShvPW9beT1fPDwxfGddKSlyZXR1cm4gaVt5XT1hLGU7aWYocD0rZS5feC5jYWxsKG51bGwsby5kYXRhKSxkPStlLl95LmNhbGwobnVsbCxvLmRhdGEpLHQ9PT1wJiZyPT09ZClyZXR1cm4gYS5uZXh0PW8saT9pW3ldPWE6ZS5fcm9vdD1hLGU7ZG8gaT1pP2lbeV09bmV3IEFycmF5KDQpOmUuX3Jvb3Q9bmV3IEFycmF5KDQpLChnPXQ+PShoPShzK2MpLzIpKT9zPWg6Yz1oLChfPXI+PShmPShsK3UpLzIpKT9sPWY6dT1mO3doaWxlKCh5PV88PDF8Zyk9PT0oeD0oZD49Zik8PDF8cD49aCkpO3JldHVybiBpW3hdPW8saVt5XT1hLGV9ZnVuY3Rpb24gbVJ0KGUpe3ZhciB0LHIsbj1lLmxlbmd0aCxpLG8sYT1uZXcgQXJyYXkobikscz1uZXcgQXJyYXkobiksbD0xLzAsYz0xLzAsdT0tMS8wLGg9LTEvMDtmb3Iocj0wO3I8bjsrK3IpaXNOYU4oaT0rdGhpcy5feC5jYWxsKG51bGwsdD1lW3JdKSl8fGlzTmFOKG89K3RoaXMuX3kuY2FsbChudWxsLHQpKXx8KGFbcl09aSxzW3JdPW8saTxsJiYobD1pKSxpPnUmJih1PWkpLG88YyYmKGM9byksbz5oJiYoaD1vKSk7Zm9yKHU8bCYmKGw9dGhpcy5feDAsdT10aGlzLl94MSksaDxjJiYoYz10aGlzLl95MCxoPXRoaXMuX3kxKSx0aGlzLmNvdmVyKGwsYykuY292ZXIodSxoKSxyPTA7cjxuOysrcilkUnQodGhpcyxhW3JdLHNbcl0sZVtyXSk7cmV0dXJuIHRoaXN9dmFyIGdSdD1NKCgpPT57fSk7ZnVuY3Rpb24gX1J0KGUsdCl7aWYoaXNOYU4oZT0rZSl8fGlzTmFOKHQ9K3QpKXJldHVybiB0aGlzO3ZhciByPXRoaXMuX3gwLG49dGhpcy5feTAsaT10aGlzLl94MSxvPXRoaXMuX3kxO2lmKGlzTmFOKHIpKWk9KHI9TWF0aC5mbG9vcihlKSkrMSxvPShuPU1hdGguZmxvb3IodCkpKzE7ZWxzZSBpZihyPmV8fGU+aXx8bj50fHx0Pm8pe3ZhciBhPWktcixzPXRoaXMuX3Jvb3QsbCxjO3N3aXRjaChjPSh0PChuK28pLzIpPDwxfGU8KHIraSkvMil7Y2FzZSAwOntkbyBsPW5ldyBBcnJheSg0KSxsW2NdPXMscz1sO3doaWxlKGEqPTIsaT1yK2Esbz1uK2EsZT5pfHx0Pm8pO2JyZWFrfWNhc2UgMTp7ZG8gbD1uZXcgQXJyYXkoNCksbFtjXT1zLHM9bDt3aGlsZShhKj0yLHI9aS1hLG89bithLHI+ZXx8dD5vKTticmVha31jYXNlIDI6e2RvIGw9bmV3IEFycmF5KDQpLGxbY109cyxzPWw7d2hpbGUoYSo9MixpPXIrYSxuPW8tYSxlPml8fG4+dCk7YnJlYWt9Y2FzZSAzOntkbyBsPW5ldyBBcnJheSg0KSxsW2NdPXMscz1sO3doaWxlKGEqPTIscj1pLWEsbj1vLWEscj5lfHxuPnQpO2JyZWFrfX10aGlzLl9yb290JiZ0aGlzLl9yb290Lmxlbmd0aCYmKHRoaXMuX3Jvb3Q9cyl9ZWxzZSByZXR1cm4gdGhpcztyZXR1cm4gdGhpcy5feDA9cix0aGlzLl95MD1uLHRoaXMuX3gxPWksdGhpcy5feTE9byx0aGlzfXZhciB5UnQ9TSgoKT0+e30pO2Z1bmN0aW9uIHZSdCgpe3ZhciBlPVtdO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKHQpe2lmKCF0Lmxlbmd0aClkbyBlLnB1c2godC5kYXRhKTt3aGlsZSh0PXQubmV4dCl9KSxlfXZhciB4UnQ9TSgoKT0+e30pO2Z1bmN0aW9uIGJSdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmNvdmVyKCtlWzBdWzBdLCtlWzBdWzFdKS5jb3ZlcigrZVsxXVswXSwrZVsxXVsxXSk6aXNOYU4odGhpcy5feDApP3ZvaWQgMDpbW3RoaXMuX3gwLHRoaXMuX3kwXSxbdGhpcy5feDEsdGhpcy5feTFdXX12YXIgd1J0PU0oKCk9Pnt9KTtmdW5jdGlvbiBFbyhlLHQscixuLGkpe3RoaXMubm9kZT1lLHRoaXMueDA9dCx0aGlzLnkwPXIsdGhpcy54MT1uLHRoaXMueTE9aX12YXIgdk89TSgoKT0+e30pO2Z1bmN0aW9uIFNSdChlLHQscil7dmFyIG4saT10aGlzLl94MCxvPXRoaXMuX3kwLGEscyxsLGMsdT10aGlzLl94MSxoPXRoaXMuX3kxLGY9W10scD10aGlzLl9yb290LGQsZztmb3IocCYmZi5wdXNoKG5ldyBFbyhwLGksbyx1LGgpKSxyPT1udWxsP3I9MS8wOihpPWUtcixvPXQtcix1PWUrcixoPXQrcixyKj1yKTtkPWYucG9wKCk7KWlmKCEoIShwPWQubm9kZSl8fChhPWQueDApPnV8fChzPWQueTApPmh8fChsPWQueDEpPGl8fChjPWQueTEpPG8pKWlmKHAubGVuZ3RoKXt2YXIgXz0oYStsKS8yLHk9KHMrYykvMjtmLnB1c2gobmV3IEVvKHBbM10sXyx5LGwsYyksbmV3IEVvKHBbMl0sYSx5LF8sYyksbmV3IEVvKHBbMV0sXyxzLGwseSksbmV3IEVvKHBbMF0sYSxzLF8seSkpLChnPSh0Pj15KTw8MXxlPj1fKSYmKGQ9ZltmLmxlbmd0aC0xXSxmW2YubGVuZ3RoLTFdPWZbZi5sZW5ndGgtMS1nXSxmW2YubGVuZ3RoLTEtZ109ZCl9ZWxzZXt2YXIgeD1lLSt0aGlzLl94LmNhbGwobnVsbCxwLmRhdGEpLGI9dC0rdGhpcy5feS5jYWxsKG51bGwscC5kYXRhKSxTPXgqeCtiKmI7aWYoUzxyKXt2YXIgQz1NYXRoLnNxcnQocj1TKTtpPWUtQyxvPXQtQyx1PWUrQyxoPXQrQyxuPXAuZGF0YX19cmV0dXJuIG59dmFyIE1SdD1NKCgpPT57dk8oKX0pO2Z1bmN0aW9uIEVSdChlKXtpZihpc05hTih1PSt0aGlzLl94LmNhbGwobnVsbCxlKSl8fGlzTmFOKGg9K3RoaXMuX3kuY2FsbChudWxsLGUpKSlyZXR1cm4gdGhpczt2YXIgdCxyPXRoaXMuX3Jvb3QsbixpLG8sYT10aGlzLl94MCxzPXRoaXMuX3kwLGw9dGhpcy5feDEsYz10aGlzLl95MSx1LGgsZixwLGQsZyxfLHk7aWYoIXIpcmV0dXJuIHRoaXM7aWYoci5sZW5ndGgpZm9yKDs7KXtpZigoZD11Pj0oZj0oYStsKS8yKSk/YT1mOmw9ZiwoZz1oPj0ocD0ocytjKS8yKSk/cz1wOmM9cCx0PXIsIShyPXJbXz1nPDwxfGRdKSlyZXR1cm4gdGhpcztpZighci5sZW5ndGgpYnJlYWs7KHRbXysxJjNdfHx0W18rMiYzXXx8dFtfKzMmM10pJiYobj10LHk9Xyl9Zm9yKDtyLmRhdGEhPT1lOylpZihpPXIsIShyPXIubmV4dCkpcmV0dXJuIHRoaXM7cmV0dXJuKG89ci5uZXh0KSYmZGVsZXRlIHIubmV4dCxpPyhvP2kubmV4dD1vOmRlbGV0ZSBpLm5leHQsdGhpcyk6dD8obz90W19dPW86ZGVsZXRlIHRbX10sKHI9dFswXXx8dFsxXXx8dFsyXXx8dFszXSkmJnI9PT0odFszXXx8dFsyXXx8dFsxXXx8dFswXSkmJiFyLmxlbmd0aCYmKG4/blt5XT1yOnRoaXMuX3Jvb3Q9ciksdGhpcyk6KHRoaXMuX3Jvb3Q9byx0aGlzKX1mdW5jdGlvbiBUUnQoZSl7Zm9yKHZhciB0PTAscj1lLmxlbmd0aDt0PHI7Kyt0KXRoaXMucmVtb3ZlKGVbdF0pO3JldHVybiB0aGlzfXZhciBDUnQ9TSgoKT0+e30pO2Z1bmN0aW9uIEFSdCgpe3JldHVybiB0aGlzLl9yb290fXZhciBQUnQ9TSgoKT0+e30pO2Z1bmN0aW9uIElSdCgpe3ZhciBlPTA7cmV0dXJuIHRoaXMudmlzaXQoZnVuY3Rpb24odCl7aWYoIXQubGVuZ3RoKWRvKytlO3doaWxlKHQ9dC5uZXh0KX0pLGV9dmFyIExSdD1NKCgpPT57fSk7ZnVuY3Rpb24ga1J0KGUpe3ZhciB0PVtdLHIsbj10aGlzLl9yb290LGksbyxhLHMsbDtmb3IobiYmdC5wdXNoKG5ldyBFbyhuLHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7cj10LnBvcCgpOylpZighZShuPXIubm9kZSxvPXIueDAsYT1yLnkwLHM9ci54MSxsPXIueTEpJiZuLmxlbmd0aCl7dmFyIGM9KG8rcykvMix1PShhK2wpLzI7KGk9blszXSkmJnQucHVzaChuZXcgRW8oaSxjLHUscyxsKSksKGk9blsyXSkmJnQucHVzaChuZXcgRW8oaSxvLHUsYyxsKSksKGk9blsxXSkmJnQucHVzaChuZXcgRW8oaSxjLGEscyx1KSksKGk9blswXSkmJnQucHVzaChuZXcgRW8oaSxvLGEsYyx1KSl9cmV0dXJuIHRoaXN9dmFyIFJSdD1NKCgpPT57dk8oKX0pO2Z1bmN0aW9uIE5SdChlKXt2YXIgdD1bXSxyPVtdLG47Zm9yKHRoaXMuX3Jvb3QmJnQucHVzaChuZXcgRW8odGhpcy5fcm9vdCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO249dC5wb3AoKTspe3ZhciBpPW4ubm9kZTtpZihpLmxlbmd0aCl7dmFyIG8sYT1uLngwLHM9bi55MCxsPW4ueDEsYz1uLnkxLHU9KGErbCkvMixoPShzK2MpLzI7KG89aVswXSkmJnQucHVzaChuZXcgRW8obyxhLHMsdSxoKSksKG89aVsxXSkmJnQucHVzaChuZXcgRW8obyx1LHMsbCxoKSksKG89aVsyXSkmJnQucHVzaChuZXcgRW8obyxhLGgsdSxjKSksKG89aVszXSkmJnQucHVzaChuZXcgRW8obyx1LGgsbCxjKSl9ci5wdXNoKG4pfWZvcig7bj1yLnBvcCgpOyllKG4ubm9kZSxuLngwLG4ueTAsbi54MSxuLnkxKTtyZXR1cm4gdGhpc312YXIgRFJ0PU0oKCk9Pnt2TygpfSk7ZnVuY3Rpb24gT1J0KGUpe3JldHVybiBlWzBdfWZ1bmN0aW9uIHpSdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feD1lLHRoaXMpOnRoaXMuX3h9dmFyIEZSdD1NKCgpPT57fSk7ZnVuY3Rpb24gQlJ0KGUpe3JldHVybiBlWzFdfWZ1bmN0aW9uIEhSdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feT1lLHRoaXMpOnRoaXMuX3l9dmFyIFZSdD1NKCgpPT57fSk7ZnVuY3Rpb24geE8oZSx0LHIpe3ZhciBuPW5ldyBRUSh0PT1udWxsP09SdDp0LHI9PW51bGw/QlJ0OnIsTmFOLE5hTixOYU4sTmFOKTtyZXR1cm4gZT09bnVsbD9uOm4uYWRkQWxsKGUpfWZ1bmN0aW9uIFFRKGUsdCxyLG4saSxvKXt0aGlzLl94PWUsdGhpcy5feT10LHRoaXMuX3gwPXIsdGhpcy5feTA9bix0aGlzLl94MT1pLHRoaXMuX3kxPW8sdGhpcy5fcm9vdD12b2lkIDB9ZnVuY3Rpb24gVVJ0KGUpe2Zvcih2YXIgdD17ZGF0YTplLmRhdGF9LHI9dDtlPWUubmV4dDspcj1yLm5leHQ9e2RhdGE6ZS5kYXRhfTtyZXR1cm4gdH12YXIgJGEscVJ0PU0oKCk9PntnUnQoKTt5UnQoKTt4UnQoKTt3UnQoKTtNUnQoKTtDUnQoKTtQUnQoKTtMUnQoKTtSUnQoKTtEUnQoKTtGUnQoKTtWUnQoKTskYT14Ty5wcm90b3R5cGU9UVEucHJvdG90eXBlOyRhLmNvcHk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgUVEodGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSx0PXRoaXMuX3Jvb3QscixuO2lmKCF0KXJldHVybiBlO2lmKCF0Lmxlbmd0aClyZXR1cm4gZS5fcm9vdD1VUnQodCksZTtmb3Iocj1be3NvdXJjZTp0LHRhcmdldDplLl9yb290PW5ldyBBcnJheSg0KX1dO3Q9ci5wb3AoKTspZm9yKHZhciBpPTA7aTw0OysraSkobj10LnNvdXJjZVtpXSkmJihuLmxlbmd0aD9yLnB1c2goe3NvdXJjZTpuLHRhcmdldDp0LnRhcmdldFtpXT1uZXcgQXJyYXkoNCl9KTp0LnRhcmdldFtpXT1VUnQobikpO3JldHVybiBlfTskYS5hZGQ9cFJ0OyRhLmFkZEFsbD1tUnQ7JGEuY292ZXI9X1J0OyRhLmRhdGE9dlJ0OyRhLmV4dGVudD1iUnQ7JGEuZmluZD1TUnQ7JGEucmVtb3ZlPUVSdDskYS5yZW1vdmVBbGw9VFJ0OyRhLnJvb3Q9QVJ0OyRhLnNpemU9SVJ0OyRhLnZpc2l0PWtSdDskYS52aXNpdEFmdGVyPU5SdDskYS54PXpSdDskYS55PUhSdH0pO3ZhciBHUnQ9TSgoKT0+e3FSdCgpfSk7dmFyIFdSdCxZUnQ9TSgoKT0+e1dSdD1bXS5zbGljZX0pO2Z1bmN0aW9uIHR0dChlKXt0aGlzLl9zaXplPWUsdGhpcy5fY2FsbD10aGlzLl9lcnJvcj1udWxsLHRoaXMuX3Rhc2tzPVtdLHRoaXMuX2RhdGE9W10sdGhpcy5fd2FpdGluZz10aGlzLl9hY3RpdmU9dGhpcy5fZW5kZWQ9dGhpcy5fc3RhcnQ9MH1mdW5jdGlvbiBqUnQoZSl7aWYoIWUuX3N0YXJ0KXRyeXtiNmUoZSl9Y2F0Y2godCl7aWYoZS5fdGFza3NbZS5fZW5kZWQrZS5fYWN0aXZlLTFdKWV0dChlLHQpO2Vsc2UgaWYoIWUuX2RhdGEpdGhyb3cgdH19ZnVuY3Rpb24gYjZlKGUpe2Zvcig7ZS5fc3RhcnQ9ZS5fd2FpdGluZyYmZS5fYWN0aXZlPGUuX3NpemU7KXt2YXIgdD1lLl9lbmRlZCtlLl9hY3RpdmUscj1lLl90YXNrc1t0XSxuPXIubGVuZ3RoLTEsaT1yW25dO3Jbbl09dzZlKGUsdCksLS1lLl93YWl0aW5nLCsrZS5fYWN0aXZlLHI9aS5hcHBseShudWxsLHIpLGUuX3Rhc2tzW3RdJiYoZS5fdGFza3NbdF09cnx8eDZlKX19ZnVuY3Rpb24gdzZlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7IWUuX3Rhc2tzW3RdfHwoLS1lLl9hY3RpdmUsKytlLl9lbmRlZCxlLl90YXNrc1t0XT1udWxsLGUuX2Vycm9yPT1udWxsJiYociE9bnVsbD9ldHQoZSxyKTooZS5fZGF0YVt0XT1uLGUuX3dhaXRpbmc/alJ0KGUpOmJPKGUpKSkpfX1mdW5jdGlvbiBldHQoZSx0KXt2YXIgcj1lLl90YXNrcy5sZW5ndGgsbjtmb3IoZS5fZXJyb3I9dCxlLl9kYXRhPXZvaWQgMCxlLl93YWl0aW5nPU5hTjstLXI+PTA7KWlmKChuPWUuX3Rhc2tzW3JdKSYmKGUuX3Rhc2tzW3JdPW51bGwsbi5hYm9ydCkpdHJ5e24uYWJvcnQoKX1jYXRjaChpKXt9ZS5fYWN0aXZlPU5hTixiTyhlKX1mdW5jdGlvbiBiTyhlKXtpZighZS5fYWN0aXZlJiZlLl9jYWxsKXt2YXIgdD1lLl9kYXRhO2UuX2RhdGE9dm9pZCAwLGUuX2NhbGwoZS5fZXJyb3IsdCl9fWZ1bmN0aW9uIHdPKGUpe2lmKGU9PW51bGwpZT0xLzA7ZWxzZSBpZighKChlPStlKT49MSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNvbmN1cnJlbmN5Iik7cmV0dXJuIG5ldyB0dHQoZSl9dmFyIHg2ZSxYUnQ9TSgoKT0+e1lSdCgpO3g2ZT17fTt0dHQucHJvdG90eXBlPXdPLnByb3RvdHlwZT17Y29uc3RydWN0b3I6dHR0LGRlZmVyOmZ1bmN0aW9uKGUpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjayIpO2lmKHRoaXMuX2NhbGwpdGhyb3cgbmV3IEVycm9yKCJkZWZlciBhZnRlciBhd2FpdCIpO2lmKHRoaXMuX2Vycm9yIT1udWxsKXJldHVybiB0aGlzO3ZhciB0PVdSdC5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gdC5wdXNoKGUpLCsrdGhpcy5fd2FpdGluZyx0aGlzLl90YXNrcy5wdXNoKHQpLGpSdCh0aGlzKSx0aGlzfSxhYm9ydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lcnJvcj09bnVsbCYmZXR0KHRoaXMsbmV3IEVycm9yKCJhYm9ydCIpKSx0aGlzfSxhd2FpdDpmdW5jdGlvbihlKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2siKTtpZih0aGlzLl9jYWxsKXRocm93IG5ldyBFcnJvcigibXVsdGlwbGUgYXdhaXQiKTtyZXR1cm4gdGhpcy5fY2FsbD1mdW5jdGlvbih0LHIpe2UuYXBwbHkobnVsbCxbdF0uY29uY2F0KHIpKX0sYk8odGhpcyksdGhpc30sYXdhaXRBbGw6ZnVuY3Rpb24oZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrIik7aWYodGhpcy5fY2FsbCl0aHJvdyBuZXcgRXJyb3IoIm11bHRpcGxlIGF3YWl0Iik7cmV0dXJuIHRoaXMuX2NhbGw9ZSxiTyh0aGlzKSx0aGlzfX19KTt2YXIgJFJ0PU0oKCk9PntYUnQoKX0pO2Z1bmN0aW9uIGJjKCl7cmV0dXJuIE1hdGgucmFuZG9tKCl9dmFyIEt5PU0oKCk9Pnt9KTt2YXIgS1J0LFpSdD1NKCgpPT57S3koKTtLUnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSl7cmV0dXJuIG49bj09bnVsbD8wOituLGk9aT09bnVsbD8xOitpLGFyZ3VtZW50cy5sZW5ndGg9PT0xPyhpPW4sbj0wKTppLT1uLGZ1bmN0aW9uKCl7cmV0dXJuIHQoKSppK259fXJldHVybiByLnNvdXJjZT1lLHJ9KGJjKX0pO3ZhciBTTyxydHQ9TSgoKT0+e0t5KCk7U089ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSl7dmFyIG8sYTtyZXR1cm4gbj1uPT1udWxsPzA6K24saT1pPT1udWxsPzE6K2ksZnVuY3Rpb24oKXt2YXIgcztpZihvIT1udWxsKXM9byxvPW51bGw7ZWxzZSBkbyBvPXQoKSoyLTEscz10KCkqMi0xLGE9bypvK3Mqczt3aGlsZSghYXx8YT4xKTtyZXR1cm4gbitpKnMqTWF0aC5zcXJ0KC0yKk1hdGgubG9nKGEpL2EpfX1yZXR1cm4gci5zb3VyY2U9ZSxyfShiYyl9KTt2YXIgSlJ0LFFSdD1NKCgpPT57S3koKTtydHQoKTtKUnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKCl7dmFyIG49U08uc291cmNlKHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAobigpKX19cmV0dXJuIHIuc291cmNlPWUscn0oYmMpfSk7dmFyIE1PLG50dD1NKCgpPT57S3koKTtNTz1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBpPTAsbz0wO288bjsrK28paSs9dCgpO3JldHVybiBpfX1yZXR1cm4gci5zb3VyY2U9ZSxyfShiYyl9KTt2YXIgdE50LGVOdD1NKCgpPT57S3koKTtudHQoKTt0TnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3ZhciBpPU1PLnNvdXJjZSh0KShuKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaSgpL259fXJldHVybiByLnNvdXJjZT1lLHJ9KGJjKX0pO3ZhciByTnQsbk50PU0oKCk9PntLeSgpO3JOdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuLU1hdGgubG9nKDEtdCgpKS9ufX1yZXR1cm4gci5zb3VyY2U9ZSxyfShiYyl9KTt2YXIgaU50PU0oKCk9PntaUnQoKTtydHQoKTtRUnQoKTtlTnQoKTtudHQoKTtuTnQoKX0pO2Z1bmN0aW9uIEoyKGUsdCl7dmFyIHIsbj14cygiYmVmb3Jlc2VuZCIsInByb2dyZXNzIiwibG9hZCIsImVycm9yIiksaSxvPUppKCksYT1uZXcgWE1MSHR0cFJlcXVlc3Qscz1udWxsLGw9bnVsbCxjLHUsaD0wO3R5cGVvZiBYRG9tYWluUmVxdWVzdCE9InVuZGVmaW5lZCImJiEoIndpdGhDcmVkZW50aWFscyJpbiBhKSYmL14oaHR0cChzKT86KT9cL1wvLy50ZXN0KGUpJiYoYT1uZXcgWERvbWFpblJlcXVlc3QpLCJvbmxvYWQiaW4gYT9hLm9ubG9hZD1hLm9uZXJyb3I9YS5vbnRpbWVvdXQ9ZjphLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbihwKXthLnJlYWR5U3RhdGU+MyYmZihwKX07ZnVuY3Rpb24gZihwKXt2YXIgZD1hLnN0YXR1cyxnO2lmKCFkJiZNNmUoYSl8fGQ+PTIwMCYmZDwzMDB8fGQ9PT0zMDQpe2lmKGMpdHJ5e2c9Yy5jYWxsKHIsYSl9Y2F0Y2goXyl7bi5jYWxsKCJlcnJvciIscixfKTtyZXR1cm59ZWxzZSBnPWE7bi5jYWxsKCJsb2FkIixyLGcpfWVsc2Ugbi5jYWxsKCJlcnJvciIscixwKX1pZihhLm9ucHJvZ3Jlc3M9ZnVuY3Rpb24ocCl7bi5jYWxsKCJwcm9ncmVzcyIscixwKX0scj17aGVhZGVyOmZ1bmN0aW9uKHAsZCl7cmV0dXJuIHA9KHArIiIpLnRvTG93ZXJDYXNlKCksYXJndW1lbnRzLmxlbmd0aDwyP28uZ2V0KHApOihkPT1udWxsP28ucmVtb3ZlKHApOm8uc2V0KHAsZCsiIikscil9LG1pbWVUeXBlOmZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXA9PW51bGw/bnVsbDpwKyIiLHIpOml9LHJlc3BvbnNlVHlwZTpmdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1wLHIpOnV9LHRpbWVvdXQ6ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9K3Ascik6aH0sdXNlcjpmdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwxP3M6KHM9cD09bnVsbD9udWxsOnArIiIscil9LHBhc3N3b3JkOmZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDE/bDoobD1wPT1udWxsP251bGw6cCsiIixyKX0scmVzcG9uc2U6ZnVuY3Rpb24ocCl7cmV0dXJuIGM9cCxyfSxnZXQ6ZnVuY3Rpb24ocCxkKXtyZXR1cm4gci5zZW5kKCJHRVQiLHAsZCl9LHBvc3Q6ZnVuY3Rpb24ocCxkKXtyZXR1cm4gci5zZW5kKCJQT1NUIixwLGQpfSxzZW5kOmZ1bmN0aW9uKHAsZCxnKXtyZXR1cm4gYS5vcGVuKHAsZSwhMCxzLGwpLGkhPW51bGwmJiFvLmhhcygiYWNjZXB0IikmJm8uc2V0KCJhY2NlcHQiLGkrIiwqLyoiKSxhLnNldFJlcXVlc3RIZWFkZXImJm8uZWFjaChmdW5jdGlvbihfLHkpe2Euc2V0UmVxdWVzdEhlYWRlcih5LF8pfSksaSE9bnVsbCYmYS5vdmVycmlkZU1pbWVUeXBlJiZhLm92ZXJyaWRlTWltZVR5cGUoaSksdSE9bnVsbCYmKGEucmVzcG9uc2VUeXBlPXUpLGg+MCYmKGEudGltZW91dD1oKSxnPT1udWxsJiZ0eXBlb2YgZD09ImZ1bmN0aW9uIiYmKGc9ZCxkPW51bGwpLGchPW51bGwmJmcubGVuZ3RoPT09MSYmKGc9UzZlKGcpKSxnIT1udWxsJiZyLm9uKCJlcnJvciIsZykub24oImxvYWQiLGZ1bmN0aW9uKF8pe2cobnVsbCxfKX0pLG4uY2FsbCgiYmVmb3Jlc2VuZCIscixhKSxhLnNlbmQoZD09bnVsbD9udWxsOmQpLHJ9LGFib3J0OmZ1bmN0aW9uKCl7cmV0dXJuIGEuYWJvcnQoKSxyfSxvbjpmdW5jdGlvbigpe3ZhciBwPW4ub24uYXBwbHkobixhcmd1bWVudHMpO3JldHVybiBwPT09bj9yOnB9fSx0IT1udWxsKXtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7cmV0dXJuIHIuZ2V0KHQpfXJldHVybiByfWZ1bmN0aW9uIFM2ZShlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXtlKHQ9PW51bGw/cjpudWxsKX19ZnVuY3Rpb24gTTZlKGUpe3ZhciB0PWUucmVzcG9uc2VUeXBlO3JldHVybiB0JiZ0IT09InRleHQiP2UucmVzcG9uc2U6ZS5yZXNwb25zZVRleHR9dmFyIEVPPU0oKCk9PntUYigpO1JtKCl9KTtmdW5jdGlvbiBDZyhlLHQpe3JldHVybiBmdW5jdGlvbihyLG4pe3ZhciBpPUoyKHIpLm1pbWVUeXBlKGUpLnJlc3BvbnNlKHQpO2lmKG4hPW51bGwpe2lmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIituKTtyZXR1cm4gaS5nZXQobil9cmV0dXJuIGl9fXZhciBvQz1NKCgpPT57RU8oKX0pO3ZhciBvTnQsYU50PU0oKCk9PntvQygpO29OdD1DZygidGV4dC9odG1sIixmdW5jdGlvbihlKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoZS5yZXNwb25zZVRleHQpfSl9KTt2YXIgc050LGxOdD1NKCgpPT57b0MoKTtzTnQ9Q2coImFwcGxpY2F0aW9uL2pzb24iLGZ1bmN0aW9uKGUpe3JldHVybiBKU09OLnBhcnNlKGUucmVzcG9uc2VUZXh0KX0pfSk7dmFyIGNOdCx1TnQ9TSgoKT0+e29DKCk7Y050PUNnKCJ0ZXh0L3BsYWluIixmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXNwb25zZVRleHR9KX0pO3ZhciBoTnQsZk50PU0oKCk9PntvQygpO2hOdD1DZygiYXBwbGljYXRpb24veG1sIixmdW5jdGlvbihlKXt2YXIgdD1lLnJlc3BvbnNlWE1MO2lmKCF0KXRocm93IG5ldyBFcnJvcigicGFyc2UgZXJyb3IiKTtyZXR1cm4gdH0pfSk7ZnVuY3Rpb24gVE8oZSx0KXtyZXR1cm4gZnVuY3Rpb24ocixuLGkpe2FyZ3VtZW50cy5sZW5ndGg8MyYmKGk9bixuPW51bGwpO3ZhciBvPUoyKHIpLm1pbWVUeXBlKGUpO3JldHVybiBvLnJvdz1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9vLnJlc3BvbnNlKEU2ZSh0LG49YSkpOm59LG8ucm93KG4pLGk/by5nZXQoaSk6b319ZnVuY3Rpb24gRTZlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBlKHIucmVzcG9uc2VUZXh0LHQpfX12YXIgaXR0PU0oKCk9PntFTygpfSk7dmFyIHBOdCxkTnQ9TSgoKT0+e3FFKCk7aXR0KCk7cE50PVRPKCJ0ZXh0L2NzdiIsQ2IpfSk7dmFyIG1OdCxnTnQ9TSgoKT0+e3FFKCk7aXR0KCk7bU50PVRPKCJ0ZXh0L3RhYi1zZXBhcmF0ZWQtdmFsdWVzIixBYil9KTt2YXIgX050PU0oKCk9PntFTygpO2FOdCgpO2xOdCgpO3VOdCgpO2ZOdCgpO2ROdCgpO2dOdCgpfSk7ZnVuY3Rpb24gZGYoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIFp5PU0oKCk9Pnt9KTtmdW5jdGlvbiBhQyhlKXtyZXR1cm4gZS5sZW5ndGg9PT0xJiYoZT1UNmUoZSkpLHtsZWZ0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik8MD9uPW8rMTppPW99cmV0dXJuIG59LHJpZ2h0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik+MD9pPW86bj1vKzF9cmV0dXJuIG59fX1mdW5jdGlvbiBUNmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIGRmKGUodCkscil9fXZhciBvdHQ9TSgoKT0+e1p5KCl9KTt2YXIgeU50LHZOdCxDNmUsbWYsYXR0PU0oKCk9PntaeSgpO290dCgpO3lOdD1hQyhkZiksdk50PXlOdC5yaWdodCxDNmU9eU50LmxlZnQsbWY9dk50fSk7dmFyIHN0dD1NKCgpPT57fSk7dmFyIHhOdD1NKCgpPT57c3R0KCl9KTt2YXIgYk50PU0oKCk9Pnt9KTtmdW5jdGlvbiBRMihlKXtyZXR1cm4gZT09PW51bGw/TmFOOitlfXZhciB0dz1NKCgpPT57fSk7dmFyIGx0dD1NKCgpPT57dHcoKX0pO3ZhciBjdHQ9TSgoKT0+e2x0dCgpfSk7dmFyIHV0dD1NKCgpPT57fSk7dmFyIHdOdCxQNmUsSTZlLGh0dD1NKCgpPT57d050PUFycmF5LnByb3RvdHlwZSxQNmU9d050LnNsaWNlLEk2ZT13TnQubWFwfSk7dmFyIFNOdD1NKCgpPT57fSk7dmFyIE1OdD1NKCgpPT57fSk7ZnVuY3Rpb24gQ08oZSx0LHIpe2U9K2UsdD0rdCxyPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KHQ9ZSxlPTAsMSk6aTwzPzE6K3I7Zm9yKHZhciBuPS0xLGk9TWF0aC5tYXgoMCxNYXRoLmNlaWwoKHQtZSkvcikpfDAsbz1uZXcgQXJyYXkoaSk7KytuPGk7KW9bbl09ZStuKnI7cmV0dXJuIG99dmFyIGZ0dD1NKCgpPT57fSk7ZnVuY3Rpb24gc0MoZSx0LHIpe3ZhciBuLGk9LTEsbyxhLHM7aWYodD0rdCxlPStlLHI9K3IsZT09PXQmJnI+MClyZXR1cm5bZV07aWYoKG49dDxlKSYmKG89ZSxlPXQsdD1vKSwocz1ldyhlLHQscikpPT09MHx8IWlzRmluaXRlKHMpKXJldHVybltdO2lmKHM+MClmb3IoZT1NYXRoLmNlaWwoZS9zKSx0PU1hdGguZmxvb3IodC9zKSxhPW5ldyBBcnJheShvPU1hdGguY2VpbCh0LWUrMSkpOysraTxvOylhW2ldPShlK2kpKnM7ZWxzZSBmb3IoZT1NYXRoLmZsb29yKGUqcyksdD1NYXRoLmNlaWwodCpzKSxhPW5ldyBBcnJheShvPU1hdGguY2VpbChlLXQrMSkpOysraTxvOylhW2ldPShlLWkpL3M7cmV0dXJuIG4mJmEucmV2ZXJzZSgpLGF9ZnVuY3Rpb24gZXcoZSx0LHIpe3ZhciBuPSh0LWUpL01hdGgubWF4KDAsciksaT1NYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCksbz1uL01hdGgucG93KDEwLGkpO3JldHVybiBpPj0wPyhvPj1wdHQ/MTA6bz49ZHR0PzU6bz49bXR0PzI6MSkqTWF0aC5wb3coMTAsaSk6LU1hdGgucG93KDEwLC1pKS8obz49cHR0PzEwOm8+PWR0dD81Om8+PW10dD8yOjEpfWZ1bmN0aW9uIEp5KGUsdCxyKXt2YXIgbj1NYXRoLmFicyh0LWUpL01hdGgubWF4KDAsciksaT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCkpLG89bi9pO3JldHVybiBvPj1wdHQ/aSo9MTA6bz49ZHR0P2kqPTU6bz49bXR0JiYoaSo9MiksdDxlPy1pOml9dmFyIHB0dCxkdHQsbXR0LGd0dD1NKCgpPT57cHR0PU1hdGguc3FydCg1MCksZHR0PU1hdGguc3FydCgxMCksbXR0PU1hdGguc3FydCgyKX0pO3ZhciBfdHQ9TSgoKT0+e30pO3ZhciBFTnQ9TSgoKT0+e2h0dCgpO2F0dCgpO1NOdCgpO3V0dCgpO01OdCgpO2Z0dCgpO2d0dCgpO190dCgpfSk7ZnVuY3Rpb24gbEMoZSx0LHIpe2lmKHI9PW51bGwmJihyPVEyKSwhIShuPWUubGVuZ3RoKSl7aWYoKHQ9K3QpPD0wfHxuPDIpcmV0dXJuK3IoZVswXSwwLGUpO2lmKHQ+PTEpcmV0dXJuK3IoZVtuLTFdLG4tMSxlKTt2YXIgbixpPShuLTEpKnQsbz1NYXRoLmZsb29yKGkpLGE9K3IoZVtvXSxvLGUpLHM9K3IoZVtvKzFdLG8rMSxlKTtyZXR1cm4gYSsocy1hKSooaS1vKX19dmFyIEFPPU0oKCk9Pnt0dygpfSk7dmFyIFROdD1NKCgpPT57aHR0KCk7WnkoKTt0dygpO0FPKCl9KTt2YXIgQ050PU0oKCk9PntjdHQoKX0pO3ZhciBBTnQ9TSgoKT0+e30pO3ZhciBQTnQ9TSgoKT0+e3R3KCl9KTt2YXIgSU50PU0oKCk9PntaeSgpO3R3KCk7QU8oKX0pO3ZhciBMTnQ9TSgoKT0+e30pO3ZhciB5dHQ9TSgoKT0+e30pO3ZhciBrTnQ9TSgoKT0+e30pO3ZhciBSTnQ9TSgoKT0+e1p5KCl9KTt2YXIgTk50PU0oKCk9Pnt9KTt2YXIgRE50PU0oKCk9Pnt9KTt2YXIgdnR0PU0oKCk9Pnt5dHQoKX0pO3ZhciBPTnQ9TSgoKT0+e3Z0dCgpfSk7dmFyIGdmPU0oKCk9PnthdHQoKTtaeSgpO290dCgpO3hOdCgpO2JOdCgpO2N0dCgpO3V0dCgpO0VOdCgpO1ROdCgpO0NOdCgpO190dCgpO0FOdCgpO1BOdCgpO0lOdCgpO0xOdCgpO3l0dCgpO3N0dCgpO2tOdCgpO0FPKCk7ZnR0KCk7Uk50KCk7Tk50KCk7RE50KCk7Z3R0KCk7dnR0KCk7bHR0KCk7T050KCl9KTtmdW5jdGlvbiBQTygpe31mdW5jdGlvbiB6TnQoZSx0KXt2YXIgcj1uZXcgUE87aWYoZSBpbnN0YW5jZW9mIFBPKWUuZWFjaChmdW5jdGlvbihzLGwpe3Iuc2V0KGwscyl9KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoZSkpe3ZhciBuPS0xLGk9ZS5sZW5ndGgsbztpZih0PT1udWxsKWZvcig7KytuPGk7KXIuc2V0KG4sZVtuXSk7ZWxzZSBmb3IoOysrbjxpOylyLnNldCh0KG89ZVtuXSxuLGUpLG8pfWVsc2UgaWYoZSlmb3IodmFyIGEgaW4gZSlyLnNldChhLGVbYV0pO3JldHVybiByfXZhciBwbCxReSxJTz1NKCgpPT57cGw9IiQiO1BPLnByb3RvdHlwZT16TnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpQTyxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuIHBsK2UgaW4gdGhpc30sZ2V0OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzW3BsK2VdfSxzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpc1twbCtlXT10LHRoaXN9LHJlbW92ZTpmdW5jdGlvbihlKXt2YXIgdD1wbCtlO3JldHVybiB0IGluIHRoaXMmJmRlbGV0ZSB0aGlzW3RdfSxjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzKWVbMF09PT1wbCYmZGVsZXRlIHRoaXNbZV19LGtleXM6ZnVuY3Rpb24oKXt2YXIgZT1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09cGwmJmUucHVzaCh0LnNsaWNlKDEpKTtyZXR1cm4gZX0sdmFsdWVzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PXBsJiZlLnB1c2godGhpc1t0XSk7cmV0dXJuIGV9LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgZT1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09cGwmJmUucHVzaCh7a2V5OnQuc2xpY2UoMSksdmFsdWU6dGhpc1t0XX0pO3JldHVybiBlfSxzaXplOmZ1bmN0aW9uKCl7dmFyIGU9MDtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09cGwmJisrZTtyZXR1cm4gZX0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcylpZihlWzBdPT09cGwpcmV0dXJuITE7cmV0dXJuITB9LGVhY2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PXBsJiZlKHRoaXNbdF0sdC5zbGljZSgxKSx0aGlzKX19O1F5PXpOdH0pO3ZhciBGTnQ9TSgoKT0+e0lPKCl9KTtmdW5jdGlvbiBMTygpe31mdW5jdGlvbiBPNmUoZSx0KXt2YXIgcj1uZXcgTE87aWYoZSBpbnN0YW5jZW9mIExPKWUuZWFjaChmdW5jdGlvbihvKXtyLmFkZChvKX0pO2Vsc2UgaWYoZSl7dmFyIG49LTEsaT1lLmxlbmd0aDtpZih0PT1udWxsKWZvcig7KytuPGk7KXIuYWRkKGVbbl0pO2Vsc2UgZm9yKDsrK248aTspci5hZGQodChlW25dLG4sZSkpfXJldHVybiByfXZhciB0dixCTnQ9TSgoKT0+e0lPKCk7dHY9UXkucHJvdG90eXBlO0xPLnByb3RvdHlwZT1PNmUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpMTyxoYXM6dHYuaGFzLGFkZDpmdW5jdGlvbihlKXtyZXR1cm4gZSs9IiIsdGhpc1twbCtlXT1lLHRoaXN9LHJlbW92ZTp0di5yZW1vdmUsY2xlYXI6dHYuY2xlYXIsdmFsdWVzOnR2LmtleXMsc2l6ZTp0di5zaXplLGVtcHR5OnR2LmVtcHR5LGVhY2g6dHYuZWFjaH19KTt2YXIgSE50PU0oKCk9Pnt9KTt2YXIgVk50PU0oKCk9Pnt9KTt2YXIgVU50PU0oKCk9Pnt9KTt2YXIgcU50PU0oKCk9PntGTnQoKTtCTnQoKTtJTygpO0hOdCgpO1ZOdCgpO1VOdCgpfSk7dmFyIEdOdCxydyxkbCxBZz1NKCgpPT57R050PUFycmF5LnByb3RvdHlwZSxydz1HTnQubWFwLGRsPUdOdC5zbGljZX0pO2Z1bmN0aW9uIG53KGUpe3ZhciB0PVF5KCkscj1bXSxuPWtPO2U9ZT09bnVsbD9bXTpkbC5jYWxsKGUpO2Z1bmN0aW9uIGkobyl7dmFyIGE9bysiIixzPXQuZ2V0KGEpO2lmKCFzKXtpZihuIT09a08pcmV0dXJuIG47dC5zZXQoYSxzPXIucHVzaChvKSl9cmV0dXJuIGVbKHMtMSklZS5sZW5ndGhdfXJldHVybiBpLmRvbWFpbj1mdW5jdGlvbihvKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gci5zbGljZSgpO3I9W10sdD1ReSgpO2Zvcih2YXIgYT0tMSxzPW8ubGVuZ3RoLGwsYzsrK2E8czspdC5oYXMoYz0obD1vW2FdKSsiIil8fHQuc2V0KGMsci5wdXNoKGwpKTtyZXR1cm4gaX0saS5yYW5nZT1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1kbC5jYWxsKG8pLGkpOmUuc2xpY2UoKX0saS51bmtub3duPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW8saSk6bn0saS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIG53KCkuZG9tYWluKHIpLnJhbmdlKGUpLnVua25vd24obil9LGl9dmFyIGtPLHh0dD1NKCgpPT57cU50KCk7QWcoKTtrTz17bmFtZToiaW1wbGljaXQifX0pO2Z1bmN0aW9uIGNDKCl7dmFyIGU9bncoKS51bmtub3duKHZvaWQgMCksdD1lLmRvbWFpbixyPWUucmFuZ2Usbj1bMCwxXSxpLG8sYT0hMSxzPTAsbD0wLGM9LjU7ZGVsZXRlIGUudW5rbm93bjtmdW5jdGlvbiB1KCl7dmFyIGg9dCgpLmxlbmd0aCxmPW5bMV08blswXSxwPW5bZi0wXSxkPW5bMS1mXTtpPShkLXApL01hdGgubWF4KDEsaC1zK2wqMiksYSYmKGk9TWF0aC5mbG9vcihpKSkscCs9KGQtcC1pKihoLXMpKSpjLG89aSooMS1zKSxhJiYocD1NYXRoLnJvdW5kKHApLG89TWF0aC5yb3VuZChvKSk7dmFyIGc9Q08oaCkubWFwKGZ1bmN0aW9uKF8pe3JldHVybiBwK2kqX30pO3JldHVybiByKGY/Zy5yZXZlcnNlKCk6Zyl9cmV0dXJuIGUuZG9tYWluPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0KGgpLHUoKSk6dCgpfSxlLnJhbmdlPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPVsraFswXSwraFsxXV0sdSgpKTpuLnNsaWNlKCl9LGUucmFuZ2VSb3VuZD1mdW5jdGlvbihoKXtyZXR1cm4gbj1bK2hbMF0sK2hbMV1dLGE9ITAsdSgpfSxlLmJhbmR3aWR0aD1mdW5jdGlvbigpe3JldHVybiBvfSxlLnN0ZXA9ZnVuY3Rpb24oKXtyZXR1cm4gaX0sZS5yb3VuZD1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0hIWgsdSgpKTphfSxlLnBhZGRpbmc9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9bD1NYXRoLm1heCgwLE1hdGgubWluKDEsaCkpLHUoKSk6c30sZS5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9TWF0aC5tYXgoMCxNYXRoLm1pbigxLGgpKSx1KCkpOnN9LGUucGFkZGluZ091dGVyPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPU1hdGgubWF4KDAsTWF0aC5taW4oMSxoKSksdSgpKTpsfSxlLmFsaWduPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPU1hdGgubWF4KDAsTWF0aC5taW4oMSxoKSksdSgpKTpjfSxlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gY0MoKS5kb21haW4odCgpKS5yYW5nZShuKS5yb3VuZChhKS5wYWRkaW5nSW5uZXIocykucGFkZGluZ091dGVyKGwpLmFsaWduKGMpfSx1KCl9ZnVuY3Rpb24gV050KGUpe3ZhciB0PWUuY29weTtyZXR1cm4gZS5wYWRkaW5nPWUucGFkZGluZ091dGVyLGRlbGV0ZSBlLnBhZGRpbmdJbm5lcixkZWxldGUgZS5wYWRkaW5nT3V0ZXIsZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFdOdCh0KCkpfSxlfWZ1bmN0aW9uIFlOdCgpe3JldHVybiBXTnQoY0MoKS5wYWRkaW5nSW5uZXIoMSkpfXZhciBqTnQ9TSgoKT0+e2dmKCk7eHR0KCl9KTtmdW5jdGlvbiBpdyhlLHQscil7ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gdUMoZSx0KXt2YXIgcj1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9dmFyIGJ0dD1NKCgpPT57fSk7ZnVuY3Rpb24gcnYoKXt9ZnVuY3Rpb24gJE50KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gRzZlKCl7cmV0dXJuIGVEdCh0aGlzKS5mb3JtYXRIc2woKX1mdW5jdGlvbiBLTnQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiBJZyhlKXt2YXIgdCxyO3JldHVybiBlPShlKyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwodD16NmUuZXhlYyhlKSk/KHI9dFsxXS5sZW5ndGgsdD1wYXJzZUludCh0WzFdLDE2KSxyPT09Nj9aTnQodCk6cj09PTM/bmV3IGZhKHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwodCYxNSk8PDR8dCYxNSwxKTpyPT09OD9STyh0Pj4yNCYyNTUsdD4+MTYmMjU1LHQ+PjgmMjU1LCh0JjI1NSkvMjU1KTpyPT09ND9STyh0Pj4xMiYxNXx0Pj44JjI0MCx0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKCh0JjE1KTw8NHx0JjE1KS8yNTUpOm51bGwpOih0PUY2ZS5leGVjKGUpKT9uZXcgZmEodFsxXSx0WzJdLHRbM10sMSk6KHQ9QjZlLmV4ZWMoZSkpP25ldyBmYSh0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCwxKToodD1INmUuZXhlYyhlKSk/Uk8odFsxXSx0WzJdLHRbM10sdFs0XSk6KHQ9VjZlLmV4ZWMoZSkpP1JPKHRbMV0qMjU1LzEwMCx0WzJdKjI1NS8xMDAsdFszXSoyNTUvMTAwLHRbNF0pOih0PVU2ZS5leGVjKGUpKT90RHQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCwxKToodD1xNmUuZXhlYyhlKSk/dER0KHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsdFs0XSk6WE50Lmhhc093blByb3BlcnR5KGUpP1pOdChYTnRbZV0pOmU9PT0idHJhbnNwYXJlbnQiP25ldyBmYShOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIFpOdChlKXtyZXR1cm4gbmV3IGZhKGU+PjE2JjI1NSxlPj44JjI1NSxlJjI1NSwxKX1mdW5jdGlvbiBSTyhlLHQscixuKXtyZXR1cm4gbjw9MCYmKGU9dD1yPU5hTiksbmV3IGZhKGUsdCxyLG4pfWZ1bmN0aW9uIE10dChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHJ2fHwoZT1JZyhlKSksZT8oZT1lLnJnYigpLG5ldyBmYShlLnIsZS5nLGUuYixlLm9wYWNpdHkpKTpuZXcgZmF9ZnVuY3Rpb24gYXcoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP010dChlKTpuZXcgZmEoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIGZhKGUsdCxyLG4pe3RoaXMucj0rZSx0aGlzLmc9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBKTnQoKXtyZXR1cm4iIyIrd3R0KHRoaXMucikrd3R0KHRoaXMuZykrd3R0KHRoaXMuYil9ZnVuY3Rpb24gUU50KCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoZT09PTE/IikiOiIsICIrZSsiKSIpfWZ1bmN0aW9uIHd0dChlKXtyZXR1cm4gZT1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKGUpfHwwKSksKGU8MTY/IjAiOiIiKStlLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiB0RHQoZSx0LHIsbil7cmV0dXJuIG48PTA/ZT10PXI9TmFOOnI8PTB8fHI+PTE/ZT10PU5hTjp0PD0wJiYoZT1OYU4pLG5ldyBfZihlLHQscixuKX1mdW5jdGlvbiBlRHQoZSl7aWYoZSBpbnN0YW5jZW9mIF9mKXJldHVybiBuZXcgX2YoZS5oLGUucyxlLmwsZS5vcGFjaXR5KTtpZihlIGluc3RhbmNlb2YgcnZ8fChlPUlnKGUpKSwhZSlyZXR1cm4gbmV3IF9mO2lmKGUgaW5zdGFuY2VvZiBfZilyZXR1cm4gZTtlPWUucmdiKCk7dmFyIHQ9ZS5yLzI1NSxyPWUuZy8yNTUsbj1lLmIvMjU1LGk9TWF0aC5taW4odCxyLG4pLG89TWF0aC5tYXgodCxyLG4pLGE9TmFOLHM9by1pLGw9KG8raSkvMjtyZXR1cm4gcz8odD09PW8/YT0oci1uKS9zKyhyPG4pKjY6cj09PW8/YT0obi10KS9zKzI6YT0odC1yKS9zKzQscy89bDwuNT9vK2k6Mi1vLWksYSo9NjApOnM9bD4wJiZsPDE/MDphLG5ldyBfZihhLHMsbCxlLm9wYWNpdHkpfWZ1bmN0aW9uIHJEdChlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/ZUR0KGUpOm5ldyBfZihlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gX2YoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMucz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIFN0dChlLHQscil7cmV0dXJuKGU8NjA/dCsoci10KSplLzYwOmU8MTgwP3I6ZTwyNDA/dCsoci10KSooMjQwLWUpLzYwOnQpKjI1NX12YXIgUGcsZXYsb3csaEMseWYsejZlLEY2ZSxCNmUsSDZlLFY2ZSxVNmUscTZlLFhOdCxFdHQ9TSgoKT0+e2J0dCgpO1BnPS43LGV2PTEvUGcsb3c9IlxccyooWystXT9cXGQrKVxccyoiLGhDPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLHlmPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIix6NmU9L14jKFswLTlhLWZdezMsOH0pJC8sRjZlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tvdyxvdyxvd10rIlxcKSQiKSxCNmU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW3lmLHlmLHlmXSsiXFwpJCIpLEg2ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW293LG93LG93LGhDXSsiXFwpJCIpLFY2ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW3lmLHlmLHlmLGhDXSsiXFwpJCIpLFU2ZT1uZXcgUmVnRXhwKCJeaHNsXFwoIitbaEMseWYseWZdKyJcXCkkIikscTZlPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbaEMseWYseWYsaENdKyJcXCkkIiksWE50PXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2l3KHJ2LElnLHtjb3B5OmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsZSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OiROdCxmb3JtYXRIZXg6JE50LGZvcm1hdEhzbDpHNmUsZm9ybWF0UmdiOktOdCx0b1N0cmluZzpLTnR9KTtpdyhmYSxhdyx1Qyhydix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9ldjpNYXRoLnBvdyhldixlKSxuZXcgZmEodGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/UGc6TWF0aC5wb3coUGcsZSksbmV3IGZhKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6Sk50LGZvcm1hdEhleDpKTnQsZm9ybWF0UmdiOlFOdCx0b1N0cmluZzpRTnR9KSk7aXcoX2YsckR0LHVDKHJ2LHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP2V2Ok1hdGgucG93KGV2LGUpLG5ldyBfZih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP1BnOk1hdGgucG93KFBnLGUpLG5ldyBfZih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuaCUzNjArKHRoaXMuaDwwKSozNjAsdD1pc05hTihlKXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxyPXRoaXMubCxuPXIrKHI8LjU/cjoxLXIpKnQsaT0yKnItbjtyZXR1cm4gbmV3IGZhKFN0dChlPj0yNDA/ZS0yNDA6ZSsxMjAsaSxuKSxTdHQoZSxpLG4pLFN0dChlPDEyMD9lKzI0MDplLTEyMCxpLG4pLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wYWNpdHk7cmV0dXJuIGU9aXNOYU4oZSk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLChlPT09MT8iaHNsKCI6ImhzbGEoIikrKHRoaXMuaHx8MCkrIiwgIisodGhpcy5zfHwwKSoxMDArIiUsICIrKHRoaXMubHx8MCkqMTAwKyIlIisoZT09PTE/IikiOiIsICIrZSsiKSIpfX0pKX0pO3ZhciBuRHQsaUR0LG9EdD1NKCgpPT57bkR0PU1hdGguUEkvMTgwLGlEdD0xODAvTWF0aC5QSX0pO2Z1bmN0aW9uIFc2ZShlKXtpZihlIGluc3RhbmNlb2YgbnYpcmV0dXJuIG5ldyBudihlLmgsZS5zLGUubCxlLm9wYWNpdHkpO2UgaW5zdGFuY2VvZiBmYXx8KGU9TXR0KGUpKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT0obER0Km4rYUR0KnQtc0R0KnIpLyhsRHQrYUR0LXNEdCksbz1uLWksYT0oZkMqKHItaSktQ3R0Km8pL05PLHM9TWF0aC5zcXJ0KGEqYStvKm8pLyhmQyppKigxLWkpKSxsPXM/TWF0aC5hdGFuMihhLG8pKmlEdC0xMjA6TmFOO3JldHVybiBuZXcgbnYobDwwP2wrMzYwOmwscyxpLGUub3BhY2l0eSl9ZnVuY3Rpb24gS2EoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP1c2ZShlKTpuZXcgbnYoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIG52KGUsdCxyLG4pe3RoaXMuaD0rZSx0aGlzLnM9K3QsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn12YXIgY0R0LFR0dCxDdHQsTk8sZkMsYUR0LHNEdCxsRHQsdUR0PU0oKCk9PntidHQoKTtFdHQoKTtvRHQoKTtjRHQ9LS4xNDg2MSxUdHQ9MS43ODI3NyxDdHQ9LS4yOTIyNyxOTz0tLjkwNjQ5LGZDPTEuOTcyOTQsYUR0PWZDKk5PLHNEdD1mQypUdHQsbER0PVR0dCpDdHQtTk8qY0R0O2l3KG52LEthLHVDKHJ2LHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP2V2Ok1hdGgucG93KGV2LGUpLG5ldyBudih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP1BnOk1hdGgucG93KFBnLGUpLG5ldyBudih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBlPWlzTmFOKHRoaXMuaCk/MDoodGhpcy5oKzEyMCkqbkR0LHQ9K3RoaXMubCxyPWlzTmFOKHRoaXMucyk/MDp0aGlzLnMqdCooMS10KSxuPU1hdGguY29zKGUpLGk9TWF0aC5zaW4oZSk7cmV0dXJuIG5ldyBmYSgyNTUqKHQrciooY0R0Km4rVHR0KmkpKSwyNTUqKHQrciooQ3R0Km4rTk8qaSkpLDI1NSoodCtyKihmQypuKSksdGhpcy5vcGFjaXR5KX19KSl9KTt2YXIgc3c9TSgoKT0+e0V0dCgpO3VEdCgpfSk7ZnVuY3Rpb24gQXR0KGUsdCxyLG4saSl7dmFyIG89ZSplLGE9byplO3JldHVybigoMS0zKmUrMypvLWEpKnQrKDQtNipvKzMqYSkqcisoMSszKmUrMypvLTMqYSkqbithKmkpLzZ9ZnVuY3Rpb24gaER0KGUpe3ZhciB0PWUubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXI8PTA/cj0wOnI+PTE/KHI9MSx0LTEpOk1hdGguZmxvb3Iocip0KSxpPWVbbl0sbz1lW24rMV0sYT1uPjA/ZVtuLTFdOjIqaS1vLHM9bjx0LTE/ZVtuKzJdOjIqby1pO3JldHVybiBBdHQoKHItbi90KSp0LGEsaSxvLHMpfX12YXIgUHR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBmRHQoZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPU1hdGguZmxvb3IoKChyJT0xKTwwPysrcjpyKSp0KSxpPWVbKG4rdC0xKSV0XSxvPWVbbiV0XSxhPWVbKG4rMSkldF0scz1lWyhuKzIpJXRdO3JldHVybiBBdHQoKHItbi90KSp0LGksbyxhLHMpfX12YXIgcER0PU0oKCk9PntQdHQoKX0pO2Z1bmN0aW9uIGx3KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgSXR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBkRHQoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGUrcip0fX1mdW5jdGlvbiBZNmUoZSx0LHIpe3JldHVybiBlPU1hdGgucG93KGUsciksdD1NYXRoLnBvdyh0LHIpLWUscj0xL3IsZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucG93KGUrbip0LHIpfX1mdW5jdGlvbiBtRHQoZSx0KXt2YXIgcj10LWU7cmV0dXJuIHI/ZER0KGUscj4xODB8fHI8LTE4MD9yLTM2MCpNYXRoLnJvdW5kKHIvMzYwKTpyKTpsdyhpc05hTihlKT90OmUpfWZ1bmN0aW9uIGdEdChlKXtyZXR1cm4oZT0rZSk9PTE/aWQ6ZnVuY3Rpb24odCxyKXtyZXR1cm4gci10P1k2ZSh0LHIsZSk6bHcoaXNOYU4odCk/cjp0KX19ZnVuY3Rpb24gaWQoZSx0KXt2YXIgcj10LWU7cmV0dXJuIHI/ZER0KGUscik6bHcoaXNOYU4oZSk/dDplKX12YXIgTHR0PU0oKCk9PntJdHQoKX0pO2Z1bmN0aW9uIF9EdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkociksYSxzO2ZvcihhPTA7YTxyOysrYSlzPWF3KHRbYV0pLG5bYV09cy5yfHwwLGlbYV09cy5nfHwwLG9bYV09cy5ifHwwO3JldHVybiBuPWUobiksaT1lKGkpLG89ZShvKSxzLm9wYWNpdHk9MSxmdW5jdGlvbihsKXtyZXR1cm4gcy5yPW4obCkscy5nPWkobCkscy5iPW8obCkscysiIn19fXZhciBrdHQsXzVuLHk1bix5RHQ9TSgoKT0+e3N3KCk7UHR0KCk7cER0KCk7THR0KCk7a3R0PWZ1bmN0aW9uIGUodCl7dmFyIHI9Z0R0KHQpO2Z1bmN0aW9uIG4oaSxvKXt2YXIgYT1yKChpPWF3KGkpKS5yLChvPWF3KG8pKS5yKSxzPXIoaS5nLG8uZyksbD1yKGkuYixvLmIpLGM9aWQoaS5vcGFjaXR5LG8ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiBpLnI9YSh1KSxpLmc9cyh1KSxpLmI9bCh1KSxpLm9wYWNpdHk9Yyh1KSxpKyIifX1yZXR1cm4gbi5nYW1tYT1lLG59KDEpO181bj1fRHQoaER0KSx5NW49X0R0KGZEdCl9KTtmdW5jdGlvbiB2RHQoZSx0KXt0fHwodD1bXSk7dmFyIHI9ZT9NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCk6MCxuPXQuc2xpY2UoKSxpO3JldHVybiBmdW5jdGlvbihvKXtmb3IoaT0wO2k8cjsrK2kpbltpXT1lW2ldKigxLW8pK3RbaV0qbztyZXR1cm4gbn19ZnVuY3Rpb24geER0KGUpe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcoZSkmJiEoZSBpbnN0YW5jZW9mIERhdGFWaWV3KX12YXIgYkR0PU0oKCk9Pnt9KTtmdW5jdGlvbiB3RHQoZSx0KXt2YXIgcj10P3QubGVuZ3RoOjAsbj1lP01hdGgubWluKHIsZS5sZW5ndGgpOjAsaT1uZXcgQXJyYXkobiksbz1uZXcgQXJyYXkociksYTtmb3IoYT0wO2E8bjsrK2EpaVthXT1pdihlW2FdLHRbYV0pO2Zvcig7YTxyOysrYSlvW2FdPXRbYV07cmV0dXJuIGZ1bmN0aW9uKHMpe2ZvcihhPTA7YTxuOysrYSlvW2FdPWlbYV0ocyk7cmV0dXJuIG99fXZhciBTRHQ9TSgoKT0+e0RPKCl9KTtmdW5jdGlvbiBNRHQoZSx0KXt2YXIgcj1uZXcgRGF0ZTtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKG4pe3JldHVybiByLnNldFRpbWUoZSooMS1uKSt0Km4pLHJ9fXZhciBFRHQ9TSgoKT0+e30pO2Z1bmN0aW9uIHZmKGUsdCl7cmV0dXJuIGU9K2UsdD0rdCxmdW5jdGlvbihyKXtyZXR1cm4gZSooMS1yKSt0KnJ9fXZhciBPTz1NKCgpPT57fSk7ZnVuY3Rpb24gVER0KGUsdCl7dmFyIHI9e30sbj17fSxpOyhlPT09bnVsbHx8dHlwZW9mIGUhPSJvYmplY3QiKSYmKGU9e30pLCh0PT09bnVsbHx8dHlwZW9mIHQhPSJvYmplY3QiKSYmKHQ9e30pO2ZvcihpIGluIHQpaSBpbiBlP3JbaV09aXYoZVtpXSx0W2ldKTpuW2ldPXRbaV07cmV0dXJuIGZ1bmN0aW9uKG8pe2ZvcihpIGluIHIpbltpXT1yW2ldKG8pO3JldHVybiBufX12YXIgQ0R0PU0oKCk9PntETygpfSk7ZnVuY3Rpb24gajZlKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBYNmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpKyIifX1mdW5jdGlvbiBBRHQoZSx0KXt2YXIgcj1OdHQubGFzdEluZGV4PVJ0dC5sYXN0SW5kZXg9MCxuLGksbyxhPS0xLHM9W10sbD1bXTtmb3IoZT1lKyIiLHQ9dCsiIjsobj1OdHQuZXhlYyhlKSkmJihpPVJ0dC5leGVjKHQpKTspKG89aS5pbmRleCk+ciYmKG89dC5zbGljZShyLG8pLHNbYV0/c1thXSs9bzpzWysrYV09byksKG49blswXSk9PT0oaT1pWzBdKT9zW2FdP3NbYV0rPWk6c1srK2FdPWk6KHNbKythXT1udWxsLGwucHVzaCh7aTphLHg6dmYobixpKX0pKSxyPVJ0dC5sYXN0SW5kZXg7cmV0dXJuIHI8dC5sZW5ndGgmJihvPXQuc2xpY2Uociksc1thXT9zW2FdKz1vOnNbKythXT1vKSxzLmxlbmd0aDwyP2xbMF0/WDZlKGxbMF0ueCk6ajZlKHQpOih0PWwubGVuZ3RoLGZ1bmN0aW9uKGMpe2Zvcih2YXIgdT0wLGg7dTx0OysrdSlzWyhoPWxbdV0pLmldPWgueChjKTtyZXR1cm4gcy5qb2luKCIiKX0pfXZhciBOdHQsUnR0LFBEdD1NKCgpPT57T08oKTtOdHQ9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLFJ0dD1uZXcgUmVnRXhwKE50dC5zb3VyY2UsImciKX0pO2Z1bmN0aW9uIGl2KGUsdCl7dmFyIHI9dHlwZW9mIHQsbjtyZXR1cm4gdD09bnVsbHx8cj09PSJib29sZWFuIj9sdyh0KToocj09PSJudW1iZXIiP3ZmOnI9PT0ic3RyaW5nIj8obj1JZyh0KSk/KHQ9bixrdHQpOkFEdDp0IGluc3RhbmNlb2YgSWc/a3R0OnQgaW5zdGFuY2VvZiBEYXRlP01EdDp4RHQodCk/dkR0OkFycmF5LmlzQXJyYXkodCk/d0R0OnR5cGVvZiB0LnZhbHVlT2YhPSJmdW5jdGlvbiImJnR5cGVvZiB0LnRvU3RyaW5nIT0iZnVuY3Rpb24ifHxpc05hTih0KT9URHQ6dmYpKGUsdCl9dmFyIERPPU0oKCk9PntzdygpO3lEdCgpO1NEdCgpO0VEdCgpO09PKCk7Q0R0KCk7UER0KCk7SXR0KCk7YkR0KCl9KTtmdW5jdGlvbiBEdHQoZSx0KXtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLnJvdW5kKGUqKDEtcikrdCpyKX19dmFyIElEdD1NKCgpPT57fSk7ZnVuY3Rpb24gTER0KGUpe3JldHVybiBmdW5jdGlvbiB0KHIpe3I9K3I7ZnVuY3Rpb24gbihpLG8pe3ZhciBhPWUoKGk9S2EoaSkpLmgsKG89S2EobykpLmgpLHM9aWQoaS5zLG8ucyksbD1pZChpLmwsby5sKSxjPWlkKGkub3BhY2l0eSxvLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gaS5oPWEodSksaS5zPXModSksaS5sPWwoTWF0aC5wb3codSxyKSksaS5vcGFjaXR5PWModSksaSsiIn19cmV0dXJuIG4uZ2FtbWE9dCxufSgxKX12YXIgJDZlLGN3LGtEdD1NKCgpPT57c3coKTtMdHQoKTskNmU9TER0KG1EdCksY3c9TER0KGlkKX0pO3ZhciB1dz1NKCgpPT57RE8oKTtPTygpO0lEdCgpO2tEdCgpfSk7ZnVuY3Rpb24gaHcoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciB6Tz1NKCgpPT57fSk7ZnVuY3Rpb24gRk8oZSl7cmV0dXJuK2V9dmFyIE90dD1NKCgpPT57fSk7ZnVuY3Rpb24gcEMoZSx0KXtyZXR1cm4odC09ZT0rZSk/ZnVuY3Rpb24ocil7cmV0dXJuKHItZSkvdH06aHcodCl9ZnVuY3Rpb24gSzZlKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3ZhciBuPWUodD0rdCxyPStyKTtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIGk8PXQ/MDppPj1yPzE6bihpKX19fWZ1bmN0aW9uIFo2ZShlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1lKHQ9K3Qscj0rcik7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBpPD0wP3Q6aT49MT9yOm4oaSl9fX1mdW5jdGlvbiBKNmUoZSx0LHIsbil7dmFyIGk9ZVswXSxvPWVbMV0sYT10WzBdLHM9dFsxXTtyZXR1cm4gbzxpPyhpPXIobyxpKSxhPW4ocyxhKSk6KGk9cihpLG8pLGE9bihhLHMpKSxmdW5jdGlvbihsKXtyZXR1cm4gYShpKGwpKX19ZnVuY3Rpb24gUTZlKGUsdCxyLG4pe3ZhciBpPU1hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoKS0xLG89bmV3IEFycmF5KGkpLGE9bmV3IEFycmF5KGkpLHM9LTE7Zm9yKGVbaV08ZVswXSYmKGU9ZS5zbGljZSgpLnJldmVyc2UoKSx0PXQuc2xpY2UoKS5yZXZlcnNlKCkpOysrczxpOylvW3NdPXIoZVtzXSxlW3MrMV0pLGFbc109bih0W3NdLHRbcysxXSk7cmV0dXJuIGZ1bmN0aW9uKGwpe3ZhciBjPW1mKGUsbCwxLGkpLTE7cmV0dXJuIGFbY10ob1tjXShsKSl9fWZ1bmN0aW9uIExnKGUsdCl7cmV0dXJuIHQuZG9tYWluKGUuZG9tYWluKCkpLnJhbmdlKGUucmFuZ2UoKSkuaW50ZXJwb2xhdGUoZS5pbnRlcnBvbGF0ZSgpKS5jbGFtcChlLmNsYW1wKCkpfWZ1bmN0aW9uIG9kKGUsdCl7dmFyIHI9UkR0LG49UkR0LGk9aXYsbz0hMSxhLHMsbDtmdW5jdGlvbiBjKCl7cmV0dXJuIGE9TWF0aC5taW4oci5sZW5ndGgsbi5sZW5ndGgpPjI/UTZlOko2ZSxzPWw9bnVsbCx1fWZ1bmN0aW9uIHUoaCl7cmV0dXJuKHN8fChzPWEocixuLG8/SzZlKGUpOmUsaSkpKSgraCl9cmV0dXJuIHUuaW52ZXJ0PWZ1bmN0aW9uKGgpe3JldHVybihsfHwobD1hKG4scixwQyxvP1o2ZSh0KTp0KSkpKCtoKX0sdS5kb21haW49ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9cncuY2FsbChoLEZPKSxjKCkpOnIuc2xpY2UoKX0sdS5yYW5nZT1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1kbC5jYWxsKGgpLGMoKSk6bi5zbGljZSgpfSx1LnJhbmdlUm91bmQ9ZnVuY3Rpb24oaCl7cmV0dXJuIG49ZGwuY2FsbChoKSxpPUR0dCxjKCl9LHUuY2xhbXA9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ISFoLGMoKSk6b30sdS5pbnRlcnBvbGF0ZT1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1oLGMoKSk6aX0sYygpfXZhciBSRHQsZEM9TSgoKT0+e2dmKCk7dXcoKTtBZygpO3pPKCk7T3R0KCk7UkR0PVswLDFdfSk7ZnVuY3Rpb24gTkR0KGUpe3JldHVybiBNYXRoLmFicyhlPU1hdGgucm91bmQoZSkpPj0xZTIxP2UudG9Mb2NhbGVTdHJpbmcoImVuIikucmVwbGFjZSgvLC9nLCIiKTplLnRvU3RyaW5nKDEwKX1mdW5jdGlvbiBvdihlLHQpe2lmKChyPShlPXQ/ZS50b0V4cG9uZW50aWFsKHQtMSk6ZS50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoImUiKSk8MClyZXR1cm4gbnVsbDt2YXIgcixuPWUuc2xpY2UoMCxyKTtyZXR1cm5bbi5sZW5ndGg+MT9uWzBdK24uc2xpY2UoMik6biwrZS5zbGljZShyKzEpXX12YXIgbUM9TSgoKT0+e30pO2Z1bmN0aW9uIHhmKGUpe3JldHVybiBlPW92KE1hdGguYWJzKGUpKSxlP2VbMV06TmFOfXZhciBnQz1NKCgpPT57bUMoKX0pO2Z1bmN0aW9uIEREdChlLHQpe3JldHVybiBmdW5jdGlvbihyLG4pe2Zvcih2YXIgaT1yLmxlbmd0aCxvPVtdLGE9MCxzPWVbMF0sbD0wO2k+MCYmcz4wJiYobCtzKzE+biYmKHM9TWF0aC5tYXgoMSxuLWwpKSxvLnB1c2goci5zdWJzdHJpbmcoaS09cyxpK3MpKSwhKChsKz1zKzEpPm4pKTspcz1lW2E9KGErMSklZS5sZW5ndGhdO3JldHVybiBvLnJldmVyc2UoKS5qb2luKHQpfX12YXIgT0R0PU0oKCk9Pnt9KTtmdW5jdGlvbiB6RHQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoL1swLTldL2csZnVuY3Rpb24ocil7cmV0dXJuIGVbK3JdfSl9fXZhciBGRHQ9TSgoKT0+e30pO2Z1bmN0aW9uIGtnKGUpe2lmKCEodD10SWUuZXhlYyhlKSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIitlKTt2YXIgdDtyZXR1cm4gbmV3IEJPKHtmaWxsOnRbMV0sYWxpZ246dFsyXSxzaWduOnRbM10sc3ltYm9sOnRbNF0semVybzp0WzVdLHdpZHRoOnRbNl0sY29tbWE6dFs3XSxwcmVjaXNpb246dFs4XSYmdFs4XS5zbGljZSgxKSx0cmltOnRbOV0sdHlwZTp0WzEwXX0pfWZ1bmN0aW9uIEJPKGUpe3RoaXMuZmlsbD1lLmZpbGw9PT12b2lkIDA/IiAiOmUuZmlsbCsiIix0aGlzLmFsaWduPWUuYWxpZ249PT12b2lkIDA/Ij4iOmUuYWxpZ24rIiIsdGhpcy5zaWduPWUuc2lnbj09PXZvaWQgMD8iLSI6ZS5zaWduKyIiLHRoaXMuc3ltYm9sPWUuc3ltYm9sPT09dm9pZCAwPyIiOmUuc3ltYm9sKyIiLHRoaXMuemVybz0hIWUuemVybyx0aGlzLndpZHRoPWUud2lkdGg9PT12b2lkIDA/dm9pZCAwOitlLndpZHRoLHRoaXMuY29tbWE9ISFlLmNvbW1hLHRoaXMucHJlY2lzaW9uPWUucHJlY2lzaW9uPT09dm9pZCAwP3ZvaWQgMDorZS5wcmVjaXNpb24sdGhpcy50cmltPSEhZS50cmltLHRoaXMudHlwZT1lLnR5cGU9PT12b2lkIDA/IiI6ZS50eXBlKyIifXZhciB0SWUsenR0PU0oKCk9Pnt0SWU9L14oPzooLik/KFs8Pj1eXSkpPyhbK1wtKCBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC5cZCspPyh+KT8oW2EteiVdKT8kL2k7a2cucHJvdG90eXBlPUJPLnByb3RvdHlwZTtCTy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsodGhpcy53aWR0aD09PXZvaWQgMD8iIjpNYXRoLm1heCgxLHRoaXMud2lkdGh8MCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKHRoaXMucHJlY2lzaW9uPT09dm9pZCAwPyIiOiIuIitNYXRoLm1heCgwLHRoaXMucHJlY2lzaW9ufDApKSsodGhpcy50cmltPyJ+IjoiIikrdGhpcy50eXBlfX0pO2Z1bmN0aW9uIEJEdChlKXt0OmZvcih2YXIgdD1lLmxlbmd0aCxyPTEsbj0tMSxpO3I8dDsrK3Ipc3dpdGNoKGVbcl0pe2Nhc2UiLiI6bj1pPXI7YnJlYWs7Y2FzZSIwIjpuPT09MCYmKG49ciksaT1yO2JyZWFrO2RlZmF1bHQ6aWYoIStlW3JdKWJyZWFrIHQ7bj4wJiYobj0wKTticmVha31yZXR1cm4gbj4wP2Uuc2xpY2UoMCxuKStlLnNsaWNlKGkrMSk6ZX12YXIgSER0PU0oKCk9Pnt9KTtmdW5jdGlvbiBWRHQoZSx0KXt2YXIgcj1vdihlLHQpO2lmKCFyKXJldHVybiBlKyIiO3ZhciBuPXJbMF0saT1yWzFdLG89aS0oRnR0PU1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihpLzMpKSkqMykrMSxhPW4ubGVuZ3RoO3JldHVybiBvPT09YT9uOm8+YT9uK25ldyBBcnJheShvLWErMSkuam9pbigiMCIpOm8+MD9uLnNsaWNlKDAsbykrIi4iK24uc2xpY2Uobyk6IjAuIituZXcgQXJyYXkoMS1vKS5qb2luKCIwIikrb3YoZSxNYXRoLm1heCgwLHQrby0xKSlbMF19dmFyIEZ0dCxCdHQ9TSgoKT0+e21DKCl9KTtmdW5jdGlvbiBIdHQoZSx0KXt2YXIgcj1vdihlLHQpO2lmKCFyKXJldHVybiBlKyIiO3ZhciBuPXJbMF0saT1yWzFdO3JldHVybiBpPDA/IjAuIituZXcgQXJyYXkoLWkpLmpvaW4oIjAiKStuOm4ubGVuZ3RoPmkrMT9uLnNsaWNlKDAsaSsxKSsiLiIrbi5zbGljZShpKzEpOm4rbmV3IEFycmF5KGktbi5sZW5ndGgrMikuam9pbigiMCIpfXZhciBVRHQ9TSgoKT0+e21DKCl9KTt2YXIgVnR0LHFEdD1NKCgpPT57bUMoKTtCdHQoKTtVRHQoKTtWdHQ9eyIlIjpmdW5jdGlvbihlLHQpe3JldHVybihlKjEwMCkudG9GaXhlZCh0KX0sYjpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygyKX0sYzpmdW5jdGlvbihlKXtyZXR1cm4gZSsiIn0sZDpORHQsZTpmdW5jdGlvbihlLHQpe3JldHVybiBlLnRvRXhwb25lbnRpYWwodCl9LGY6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS50b0ZpeGVkKHQpfSxnOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudG9QcmVjaXNpb24odCl9LG86ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQoZSkudG9TdHJpbmcoOCl9LHA6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gSHR0KGUqMTAwLHQpfSxyOkh0dCxzOlZEdCxYOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSx4OmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDE2KX19fSk7ZnVuY3Rpb24gVXR0KGUpe3JldHVybiBlfXZhciBHRHQ9TSgoKT0+e30pO2Z1bmN0aW9uIGpEdChlKXt2YXIgdD1lLmdyb3VwaW5nPT09dm9pZCAwfHxlLnRob3VzYW5kcz09PXZvaWQgMD9VdHQ6RER0KFdEdC5jYWxsKGUuZ3JvdXBpbmcsTnVtYmVyKSxlLnRob3VzYW5kcysiIikscj1lLmN1cnJlbmN5PT09dm9pZCAwPyIiOmUuY3VycmVuY3lbMF0rIiIsbj1lLmN1cnJlbmN5PT09dm9pZCAwPyIiOmUuY3VycmVuY3lbMV0rIiIsaT1lLmRlY2ltYWw9PT12b2lkIDA/Ii4iOmUuZGVjaW1hbCsiIixvPWUubnVtZXJhbHM9PT12b2lkIDA/VXR0OnpEdChXRHQuY2FsbChlLm51bWVyYWxzLFN0cmluZykpLGE9ZS5wZXJjZW50PT09dm9pZCAwPyIlIjplLnBlcmNlbnQrIiIscz1lLm1pbnVzPT09dm9pZCAwPyItIjplLm1pbnVzKyIiLGw9ZS5uYW49PT12b2lkIDA/Ik5hTiI6ZS5uYW4rIiI7ZnVuY3Rpb24gYyhoKXtoPWtnKGgpO3ZhciBmPWguZmlsbCxwPWguYWxpZ24sZD1oLnNpZ24sZz1oLnN5bWJvbCxfPWguemVybyx5PWgud2lkdGgseD1oLmNvbW1hLGI9aC5wcmVjaXNpb24sUz1oLnRyaW0sQz1oLnR5cGU7Qz09PSJuIj8oeD0hMCxDPSJnIik6VnR0W0NdfHwoYj09PXZvaWQgMCYmKGI9MTIpLFM9ITAsQz0iZyIpLChffHxmPT09IjAiJiZwPT09Ij0iKSYmKF89ITAsZj0iMCIscD0iPSIpO3ZhciBQPWc9PT0iJCI/cjpnPT09IiMiJiYvW2JveFhdLy50ZXN0KEMpPyIwIitDLnRvTG93ZXJDYXNlKCk6IiIsaz1nPT09IiQiP246L1slcF0vLnRlc3QoQyk/YToiIixPPVZ0dFtDXSxEPS9bZGVmZ3BycyVdLy50ZXN0KEMpO2I9Yj09PXZvaWQgMD82Oi9bZ3Byc10vLnRlc3QoQyk/TWF0aC5tYXgoMSxNYXRoLm1pbigyMSxiKSk6TWF0aC5tYXgoMCxNYXRoLm1pbigyMCxiKSk7ZnVuY3Rpb24gQihJKXt2YXIgTD1QLFI9ayxGLHosVTtpZihDPT09ImMiKVI9TyhJKStSLEk9IiI7ZWxzZXtJPStJO3ZhciBXPUk8MHx8MS9JPDA7aWYoST1pc05hTihJKT9sOk8oTWF0aC5hYnMoSSksYiksUyYmKEk9QkR0KEkpKSxXJiYrST09MCYmZCE9PSIrIiYmKFc9ITEpLEw9KFc/ZD09PSIoIj9kOnM6ZD09PSItInx8ZD09PSIoIj8iIjpkKStMLFI9KEM9PT0icyI/WUR0WzgrRnR0LzNdOiIiKStSKyhXJiZkPT09IigiPyIpIjoiIiksRCl7Zm9yKEY9LTEsej1JLmxlbmd0aDsrK0Y8ejspaWYoVT1JLmNoYXJDb2RlQXQoRiksNDg+VXx8VT41Nyl7Uj0oVT09PTQ2P2krSS5zbGljZShGKzEpOkkuc2xpY2UoRikpK1IsST1JLnNsaWNlKDAsRik7YnJlYWt9fX14JiYhXyYmKEk9dChJLDEvMCkpO3ZhciBaPUwubGVuZ3RoK0kubGVuZ3RoK1IubGVuZ3RoLHJ0PVo8eT9uZXcgQXJyYXkoeS1aKzEpLmpvaW4oZik6IiI7c3dpdGNoKHgmJl8mJihJPXQocnQrSSxydC5sZW5ndGg/eS1SLmxlbmd0aDoxLzApLHJ0PSIiKSxwKXtjYXNlIjwiOkk9TCtJK1IrcnQ7YnJlYWs7Y2FzZSI9IjpJPUwrcnQrSStSO2JyZWFrO2Nhc2UiXiI6ST1ydC5zbGljZSgwLFo9cnQubGVuZ3RoPj4xKStMK0krUitydC5zbGljZShaKTticmVhaztkZWZhdWx0Okk9cnQrTCtJK1I7YnJlYWt9cmV0dXJuIG8oSSl9cmV0dXJuIEIudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gaCsiIn0sQn1mdW5jdGlvbiB1KGgsZil7dmFyIHA9YygoaD1rZyhoKSxoLnR5cGU9ImYiLGgpKSxkPU1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcih4ZihmKS8zKSkpKjMsZz1NYXRoLnBvdygxMCwtZCksXz1ZRHRbOCtkLzNdO3JldHVybiBmdW5jdGlvbih5KXtyZXR1cm4gcChnKnkpK199fXJldHVybntmb3JtYXQ6Yyxmb3JtYXRQcmVmaXg6dX19dmFyIFdEdCxZRHQsWER0PU0oKCk9PntnQygpO09EdCgpO0ZEdCgpO3p0dCgpO0hEdCgpO3FEdCgpO0J0dCgpO0dEdCgpO1dEdD1BcnJheS5wcm90b3R5cGUubWFwLFlEdD1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4QjUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXX0pO2Z1bmN0aW9uIHF0dChlKXtyZXR1cm4gSE89akR0KGUpLGZ3PUhPLmZvcm1hdCxWTz1ITy5mb3JtYXRQcmVmaXgsSE99dmFyIEhPLGZ3LFZPLCREdD1NKCgpPT57WER0KCk7cXR0KHtkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXSxtaW51czoiLSJ9KX0pO2Z1bmN0aW9uIEd0dChlKXtyZXR1cm4gTWF0aC5tYXgoMCwteGYoTWF0aC5hYnMoZSkpKX12YXIgS0R0PU0oKCk9PntnQygpfSk7ZnVuY3Rpb24gV3R0KGUsdCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHhmKHQpLzMpKSkqMy14ZihNYXRoLmFicyhlKSkpfXZhciBaRHQ9TSgoKT0+e2dDKCl9KTtmdW5jdGlvbiBZdHQoZSx0KXtyZXR1cm4gZT1NYXRoLmFicyhlKSx0PU1hdGguYWJzKHQpLWUsTWF0aC5tYXgoMCx4Zih0KS14ZihlKSkrMX12YXIgSkR0PU0oKCk9PntnQygpfSk7dmFyIGp0dD1NKCgpPT57JER0KCk7enR0KCk7S0R0KCk7WkR0KCk7SkR0KCl9KTtmdW5jdGlvbiBRRHQoZSx0LHIpe3ZhciBuPWVbMF0saT1lW2UubGVuZ3RoLTFdLG89SnkobixpLHQ9PW51bGw/MTA6dCksYTtzd2l0Y2gocj1rZyhyPT1udWxsPyIsZiI6ciksci50eXBlKXtjYXNlInMiOnt2YXIgcz1NYXRoLm1heChNYXRoLmFicyhuKSxNYXRoLmFicyhpKSk7cmV0dXJuIHIucHJlY2lzaW9uPT1udWxsJiYhaXNOYU4oYT1XdHQobyxzKSkmJihyLnByZWNpc2lvbj1hKSxWTyhyLHMpfWNhc2UiIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJwIjpjYXNlInIiOntyLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKGE9WXR0KG8sTWF0aC5tYXgoTWF0aC5hYnMobiksTWF0aC5hYnMoaSkpKSkmJihyLnByZWNpc2lvbj1hLShyLnR5cGU9PT0iZSIpKTticmVha31jYXNlImYiOmNhc2UiJSI6e3IucHJlY2lzaW9uPT1udWxsJiYhaXNOYU4oYT1HdHQobykpJiYoci5wcmVjaXNpb249YS0oci50eXBlPT09IiUiKSoyKTticmVha319cmV0dXJuIGZ3KHIpfXZhciB0T3Q9TSgoKT0+e2dmKCk7anR0KCl9KTtmdW5jdGlvbiBhZChlKXt2YXIgdD1lLmRvbWFpbjtyZXR1cm4gZS50aWNrcz1mdW5jdGlvbihyKXt2YXIgbj10KCk7cmV0dXJuIHNDKG5bMF0sbltuLmxlbmd0aC0xXSxyPT1udWxsPzEwOnIpfSxlLnRpY2tGb3JtYXQ9ZnVuY3Rpb24ocixuKXtyZXR1cm4gUUR0KHQoKSxyLG4pfSxlLm5pY2U9ZnVuY3Rpb24ocil7cj09bnVsbCYmKHI9MTApO3ZhciBuPXQoKSxpPTAsbz1uLmxlbmd0aC0xLGE9bltpXSxzPW5bb10sbDtyZXR1cm4gczxhJiYobD1hLGE9cyxzPWwsbD1pLGk9byxvPWwpLGw9ZXcoYSxzLHIpLGw+MD8oYT1NYXRoLmZsb29yKGEvbCkqbCxzPU1hdGguY2VpbChzL2wpKmwsbD1ldyhhLHMscikpOmw8MCYmKGE9TWF0aC5jZWlsKGEqbCkvbCxzPU1hdGguZmxvb3IocypsKS9sLGw9ZXcoYSxzLHIpKSxsPjA/KG5baV09TWF0aC5mbG9vcihhL2wpKmwsbltvXT1NYXRoLmNlaWwocy9sKSpsLHQobikpOmw8MCYmKG5baV09TWF0aC5jZWlsKGEqbCkvbCxuW29dPU1hdGguZmxvb3IocypsKS9sLHQobikpLGV9LGV9ZnVuY3Rpb24gVU8oKXt2YXIgZT1vZChwQyx2Zik7cmV0dXJuIGUuY29weT1mdW5jdGlvbigpe3JldHVybiBMZyhlLFVPKCkpfSxhZChlKX12YXIgcHc9TSgoKT0+e2dmKCk7dXcoKTtkQygpO3RPdCgpfSk7ZnVuY3Rpb24gcU8oKXt2YXIgZT1bMCwxXTtmdW5jdGlvbiB0KHIpe3JldHVybityfXJldHVybiB0LmludmVydD10LHQuZG9tYWluPXQucmFuZ2U9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9cncuY2FsbChyLEZPKSx0KTplLnNsaWNlKCl9LHQuY29weT1mdW5jdGlvbigpe3JldHVybiBxTygpLmRvbWFpbihlKX0sYWQodCl9dmFyIGVPdD1NKCgpPT57QWcoKTtwdygpO090dCgpfSk7ZnVuY3Rpb24gR08oZSx0KXtlPWUuc2xpY2UoKTt2YXIgcj0wLG49ZS5sZW5ndGgtMSxpPWVbcl0sbz1lW25dLGE7cmV0dXJuIG88aSYmKGE9cixyPW4sbj1hLGE9aSxpPW8sbz1hKSxlW3JdPXQuZmxvb3IoaSksZVtuXT10LmNlaWwobyksZX12YXIgWHR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBlSWUoZSx0KXtyZXR1cm4odD1NYXRoLmxvZyh0L2UpKT9mdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5sb2coci9lKS90fTpodyh0KX1mdW5jdGlvbiBySWUoZSx0KXtyZXR1cm4gZTwwP2Z1bmN0aW9uKHIpe3JldHVybi1NYXRoLnBvdygtdCxyKSpNYXRoLnBvdygtZSwxLXIpfTpmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5wb3codCxyKSpNYXRoLnBvdyhlLDEtcil9fWZ1bmN0aW9uIG5JZShlKXtyZXR1cm4gaXNGaW5pdGUoZSk/KygiMWUiK2UpOmU8MD8wOmV9ZnVuY3Rpb24gck90KGUpe3JldHVybiBlPT09MTA/bkllOmU9PT1NYXRoLkU/TWF0aC5leHA6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucG93KGUsdCl9fWZ1bmN0aW9uIG5PdChlKXtyZXR1cm4gZT09PU1hdGguRT9NYXRoLmxvZzplPT09MTAmJk1hdGgubG9nMTB8fGU9PT0yJiZNYXRoLmxvZzJ8fChlPU1hdGgubG9nKGUpLGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KS9lfSl9ZnVuY3Rpb24gaU90KGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4tZSgtdCl9fWZ1bmN0aW9uIFdPKCl7dmFyIGU9b2QoZUllLHJJZSkuZG9tYWluKFsxLDEwXSksdD1lLmRvbWFpbixyPTEwLG49bk90KDEwKSxpPXJPdCgxMCk7ZnVuY3Rpb24gbygpe3JldHVybiBuPW5PdChyKSxpPXJPdChyKSx0KClbMF08MCYmKG49aU90KG4pLGk9aU90KGkpKSxlfXJldHVybiBlLmJhc2U9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K2EsbygpKTpyfSxlLmRvbWFpbj1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odChhKSxvKCkpOnQoKX0sZS50aWNrcz1mdW5jdGlvbihhKXt2YXIgcz10KCksbD1zWzBdLGM9c1tzLmxlbmd0aC0xXSx1Oyh1PWM8bCkmJihoPWwsbD1jLGM9aCk7dmFyIGg9bihsKSxmPW4oYykscCxkLGcsXz1hPT1udWxsPzEwOithLHk9W107aWYoIShyJTEpJiZmLWg8Xyl7aWYoaD1NYXRoLnJvdW5kKGgpLTEsZj1NYXRoLnJvdW5kKGYpKzEsbD4wKXtmb3IoO2g8ZjsrK2gpZm9yKGQ9MSxwPWkoaCk7ZDxyOysrZClpZihnPXAqZCwhKGc8bCkpe2lmKGc+YylicmVhazt5LnB1c2goZyl9fWVsc2UgZm9yKDtoPGY7KytoKWZvcihkPXItMSxwPWkoaCk7ZD49MTstLWQpaWYoZz1wKmQsIShnPGwpKXtpZihnPmMpYnJlYWs7eS5wdXNoKGcpfX1lbHNlIHk9c0MoaCxmLE1hdGgubWluKGYtaCxfKSkubWFwKGkpO3JldHVybiB1P3kucmV2ZXJzZSgpOnl9LGUudGlja0Zvcm1hdD1mdW5jdGlvbihhLHMpe2lmKHM9PW51bGwmJihzPXI9PT0xMD8iLjBlIjoiLCIpLHR5cGVvZiBzIT0iZnVuY3Rpb24iJiYocz1mdyhzKSksYT09PTEvMClyZXR1cm4gczthPT1udWxsJiYoYT0xMCk7dmFyIGw9TWF0aC5tYXgoMSxyKmEvZS50aWNrcygpLmxlbmd0aCk7cmV0dXJuIGZ1bmN0aW9uKGMpe3ZhciB1PWMvaShNYXRoLnJvdW5kKG4oYykpKTtyZXR1cm4gdSpyPHItLjUmJih1Kj1yKSx1PD1sP3MoYyk6IiJ9fSxlLm5pY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdChHTyh0KCkse2Zsb29yOmZ1bmN0aW9uKGEpe3JldHVybiBpKE1hdGguZmxvb3IobihhKSkpfSxjZWlsOmZ1bmN0aW9uKGEpe3JldHVybiBpKE1hdGguY2VpbChuKGEpKSl9fSkpfSxlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gTGcoZSxXTygpLmJhc2UocikpfSxlfXZhciBvT3Q9TSgoKT0+e2dmKCk7anR0KCk7ek8oKTtYdHQoKTtkQygpfSk7ZnVuY3Rpb24gZHcoZSx0KXtyZXR1cm4gZTwwPy1NYXRoLnBvdygtZSx0KTpNYXRoLnBvdyhlLHQpfWZ1bmN0aW9uIF9DKCl7dmFyIGU9MSx0PW9kKG4saSkscj10LmRvbWFpbjtmdW5jdGlvbiBuKG8sYSl7cmV0dXJuKGE9ZHcoYSxlKS0obz1kdyhvLGUpKSk/ZnVuY3Rpb24ocyl7cmV0dXJuKGR3KHMsZSktbykvYX06aHcoYSl9ZnVuY3Rpb24gaShvLGEpe3JldHVybiBhPWR3KGEsZSktKG89ZHcobyxlKSksZnVuY3Rpb24ocyl7cmV0dXJuIGR3KG8rYSpzLDEvZSl9fXJldHVybiB0LmV4cG9uZW50PWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPStvLHIocigpKSk6ZX0sdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIExnKHQsX0MoKS5leHBvbmVudChlKSl9LGFkKHQpfWZ1bmN0aW9uIGFPdCgpe3JldHVybiBfQygpLmV4cG9uZW50KC41KX12YXIgc090PU0oKCk9Pnt6TygpO3B3KCk7ZEMoKX0pO2Z1bmN0aW9uIFlPKCl7dmFyIGU9W10sdD1bXSxyPVtdO2Z1bmN0aW9uIG4oKXt2YXIgbz0wLGE9TWF0aC5tYXgoMSx0Lmxlbmd0aCk7Zm9yKHI9bmV3IEFycmF5KGEtMSk7KytvPGE7KXJbby0xXT1sQyhlLG8vYSk7cmV0dXJuIGl9ZnVuY3Rpb24gaShvKXtpZighaXNOYU4obz0rbykpcmV0dXJuIHRbbWYocixvKV19cmV0dXJuIGkuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKG8pe3ZhciBhPXQuaW5kZXhPZihvKTtyZXR1cm4gYTwwP1tOYU4sTmFOXTpbYT4wP3JbYS0xXTplWzBdLGE8ci5sZW5ndGg/clthXTplW2UubGVuZ3RoLTFdXX0saS5kb21haW49ZnVuY3Rpb24obyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGUuc2xpY2UoKTtlPVtdO2Zvcih2YXIgYT0wLHM9by5sZW5ndGgsbDthPHM7KythKWw9b1thXSxsIT1udWxsJiYhaXNOYU4obD0rbCkmJmUucHVzaChsKTtyZXR1cm4gZS5zb3J0KGRmKSxuKCl9LGkucmFuZ2U9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZGwuY2FsbChvKSxuKCkpOnQuc2xpY2UoKX0saS5xdWFudGlsZXM9ZnVuY3Rpb24oKXtyZXR1cm4gci5zbGljZSgpfSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gWU8oKS5kb21haW4oZSkucmFuZ2UodCl9LGl9dmFyIGxPdD1NKCgpPT57Z2YoKTtBZygpfSk7ZnVuY3Rpb24gak8oKXt2YXIgZT0wLHQ9MSxyPTEsbj1bLjVdLGk9WzAsMV07ZnVuY3Rpb24gbyhzKXtpZihzPD1zKXJldHVybiBpW21mKG4scywwLHIpXX1mdW5jdGlvbiBhKCl7dmFyIHM9LTE7Zm9yKG49bmV3IEFycmF5KHIpOysrczxyOyluW3NdPSgocysxKSp0LShzLXIpKmUpLyhyKzEpO3JldHVybiBvfXJldHVybiBvLmRvbWFpbj1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rc1swXSx0PStzWzFdLGEoKSk6W2UsdF19LG8ucmFuZ2U9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9KGk9ZGwuY2FsbChzKSkubGVuZ3RoLTEsYSgpKTppLnNsaWNlKCl9LG8uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHMpe3ZhciBsPWkuaW5kZXhPZihzKTtyZXR1cm4gbDwwP1tOYU4sTmFOXTpsPDE/W2UsblswXV06bD49cj9bbltyLTFdLHRdOltuW2wtMV0sbltsXV19LG8uY29weT1mdW5jdGlvbigpe3JldHVybiBqTygpLmRvbWFpbihbZSx0XSkucmFuZ2UoaSl9LGFkKG8pfXZhciBjT3Q9TSgoKT0+e2dmKCk7QWcoKTtwdygpfSk7ZnVuY3Rpb24gWE8oKXt2YXIgZT1bLjVdLHQ9WzAsMV0scj0xO2Z1bmN0aW9uIG4oaSl7aWYoaTw9aSlyZXR1cm4gdFttZihlLGksMCxyKV19cmV0dXJuIG4uZG9tYWluPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWRsLmNhbGwoaSkscj1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aC0xKSxuKTplLnNsaWNlKCl9LG4ucmFuZ2U9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZGwuY2FsbChpKSxyPU1hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoLTEpLG4pOnQuc2xpY2UoKX0sbi5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24oaSl7dmFyIG89dC5pbmRleE9mKGkpO3JldHVybltlW28tMV0sZVtvXV19LG4uY29weT1mdW5jdGlvbigpe3JldHVybiBYTygpLmRvbWFpbihlKS5yYW5nZSh0KX0sbn12YXIgdU90PU0oKCk9PntnZigpO0FnKCl9KTtmdW5jdGlvbiBOcihlLHQscixuKXtmdW5jdGlvbiBpKG8pe3JldHVybiBlKG89YXJndW1lbnRzLmxlbmd0aD09PTA/bmV3IERhdGU6bmV3IERhdGUoK28pKSxvfXJldHVybiBpLmZsb29yPWZ1bmN0aW9uKG8pe3JldHVybiBlKG89bmV3IERhdGUoK28pKSxvfSxpLmNlaWw9ZnVuY3Rpb24obyl7cmV0dXJuIGUobz1uZXcgRGF0ZShvLTEpKSx0KG8sMSksZShvKSxvfSxpLnJvdW5kPWZ1bmN0aW9uKG8pe3ZhciBhPWkobykscz1pLmNlaWwobyk7cmV0dXJuIG8tYTxzLW8/YTpzfSxpLm9mZnNldD1mdW5jdGlvbihvLGEpe3JldHVybiB0KG89bmV3IERhdGUoK28pLGE9PW51bGw/MTpNYXRoLmZsb29yKGEpKSxvfSxpLnJhbmdlPWZ1bmN0aW9uKG8sYSxzKXt2YXIgbD1bXSxjO2lmKG89aS5jZWlsKG8pLHM9cz09bnVsbD8xOk1hdGguZmxvb3IocyksIShvPGEpfHwhKHM+MCkpcmV0dXJuIGw7ZG8gbC5wdXNoKGM9bmV3IERhdGUoK28pKSx0KG8scyksZShvKTt3aGlsZShjPG8mJm88YSk7cmV0dXJuIGx9LGkuZmlsdGVyPWZ1bmN0aW9uKG8pe3JldHVybiBOcihmdW5jdGlvbihhKXtpZihhPj1hKWZvcig7ZShhKSwhbyhhKTspYS5zZXRUaW1lKGEtMSl9LGZ1bmN0aW9uKGEscyl7aWYoYT49YSlpZihzPDApZm9yKDsrK3M8PTA7KWZvcig7dChhLC0xKSwhbyhhKTspO2Vsc2UgZm9yKDstLXM+PTA7KWZvcig7dChhLDEpLCFvKGEpOyk7fSl9LHImJihpLmNvdW50PWZ1bmN0aW9uKG8sYSl7cmV0dXJuICR0dC5zZXRUaW1lKCtvKSxLdHQuc2V0VGltZSgrYSksZSgkdHQpLGUoS3R0KSxNYXRoLmZsb29yKHIoJHR0LEt0dCkpfSxpLmV2ZXJ5PWZ1bmN0aW9uKG8pe3JldHVybiBvPU1hdGguZmxvb3IobyksIWlzRmluaXRlKG8pfHwhKG8+MCk/bnVsbDpvPjE/aS5maWx0ZXIobj9mdW5jdGlvbihhKXtyZXR1cm4gbihhKSVvPT09MH06ZnVuY3Rpb24oYSl7cmV0dXJuIGkuY291bnQoMCxhKSVvPT09MH0pOml9KSxpfXZhciAkdHQsS3R0LFphPU0oKCk9PnskdHQ9bmV3IERhdGUsS3R0PW5ldyBEYXRlfSk7dmFyICRPLG13LGhPdCxmT3Q9TSgoKT0+e1phKCk7JE89TnIoZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LWV9KTskTy5ldmVyeT1mdW5jdGlvbihlKXtyZXR1cm4gZT1NYXRoLmZsb29yKGUpLCFpc0Zpbml0ZShlKXx8IShlPjApP251bGw6ZT4xP05yKGZ1bmN0aW9uKHQpe3Quc2V0VGltZShNYXRoLmZsb29yKHQvZSkqZSl9LGZ1bmN0aW9uKHQscil7dC5zZXRUaW1lKCt0K3IqZSl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdCkvZX0pOiRPfTttdz0kTyxoT3Q9JE8ucmFuZ2V9KTt2YXIgYXYsd2MsZ3csS08sWk8sYmY9TSgoKT0+e2F2PTFlMyx3Yz02ZTQsZ3c9MzZlNSxLTz04NjRlNSxaTz02MDQ4ZTV9KTt2YXIgcE90LF93LGRPdCxtT3Q9TSgoKT0+e1phKCk7YmYoKTtwT3Q9TnIoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKGUtZS5nZXRNaWxsaXNlY29uZHMoKSl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QqYXYpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL2F2fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENTZWNvbmRzKCl9KSxfdz1wT3QsZE90PXBPdC5yYW5nZX0pO3ZhciBnT3QsWnR0LGlJZSxfT3Q9TSgoKT0+e1phKCk7YmYoKTtnT3Q9TnIoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKGUtZS5nZXRNaWxsaXNlY29uZHMoKS1lLmdldFNlY29uZHMoKSphdil9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3Qqd2MpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL3djfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRNaW51dGVzKCl9KSxadHQ9Z090LGlJZT1nT3QucmFuZ2V9KTt2YXIgeU90LEp0dCxvSWUsdk90PU0oKCk9PntaYSgpO2JmKCk7eU90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0VGltZShlLWUuZ2V0TWlsbGlzZWNvbmRzKCktZS5nZXRTZWNvbmRzKCkqYXYtZS5nZXRNaW51dGVzKCkqd2MpfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0Kmd3KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9nd30sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0SG91cnMoKX0pLEp0dD15T3Qsb0llPXlPdC5yYW5nZX0pO3ZhciB4T3QseXcsYUllLGJPdD1NKCgpPT57WmEoKTtiZigpO3hPdD1OcihmdW5jdGlvbihlKXtlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0RGF0ZShlLmdldERhdGUoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lLSh0LmdldFRpbWV6b25lT2Zmc2V0KCktZS5nZXRUaW1lem9uZU9mZnNldCgpKSp3YykvS099LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldERhdGUoKS0xfSkseXc9eE90LGFJZT14T3QucmFuZ2V9KTtmdW5jdGlvbiBzdihlKXtyZXR1cm4gTnIoZnVuY3Rpb24odCl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpLSh0LmdldERheSgpKzctZSklNyksdC5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxyKXt0LnNldERhdGUodC5nZXREYXRlKCkrcio3KX0sZnVuY3Rpb24odCxyKXtyZXR1cm4oci10LShyLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSp3YykvWk99KX12YXIgbHYsdncsd090LFNPdCxSZyxNT3QsRU90LFRPdCxzSWUsbEllLGNJZSx1SWUsaEllLGZJZSxDT3Q9TSgoKT0+e1phKCk7YmYoKTtsdj1zdigwKSx2dz1zdigxKSx3T3Q9c3YoMiksU090PXN2KDMpLFJnPXN2KDQpLE1PdD1zdig1KSxFT3Q9c3YoNiksVE90PWx2LnJhbmdlLHNJZT12dy5yYW5nZSxsSWU9d090LnJhbmdlLGNJZT1TT3QucmFuZ2UsdUllPVJnLnJhbmdlLGhJZT1NT3QucmFuZ2UsZkllPUVPdC5yYW5nZX0pO3ZhciBBT3QsUXR0LHBJZSxQT3Q9TSgoKT0+e1phKCk7QU90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0RGF0ZSgxKSxlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0TW9udGgoZS5nZXRNb250aCgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldE1vbnRoKCktZS5nZXRNb250aCgpKyh0LmdldEZ1bGxZZWFyKCktZS5nZXRGdWxsWWVhcigpKSoxMn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0TW9udGgoKX0pLFF0dD1BT3QscEllPUFPdC5yYW5nZX0pO3ZhciB0ZXQsc2QsZEllLElPdD1NKCgpPT57WmEoKTt0ZXQ9TnIoZnVuY3Rpb24oZSl7ZS5zZXRNb250aCgwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRGdWxsWWVhcihlLmdldEZ1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKS1lLmdldEZ1bGxZZWFyKCl9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEZ1bGxZZWFyKCl9KTt0ZXQuZXZlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIWlzRmluaXRlKGU9TWF0aC5mbG9vcihlKSl8fCEoZT4wKT9udWxsOk5yKGZ1bmN0aW9uKHQpe3Quc2V0RnVsbFllYXIoTWF0aC5mbG9vcih0LmdldEZ1bGxZZWFyKCkvZSkqZSksdC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrciplKX0pfTtzZD10ZXQsZEllPXRldC5yYW5nZX0pO3ZhciBMT3QsZWV0LG1JZSxrT3Q9TSgoKT0+e1phKCk7YmYoKTtMT3Q9TnIoZnVuY3Rpb24oZSl7ZS5zZXRVVENTZWNvbmRzKDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3Qqd2MpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL3djfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENNaW51dGVzKCl9KSxlZXQ9TE90LG1JZT1MT3QucmFuZ2V9KTt2YXIgUk90LHJldCxnSWUsTk90PU0oKCk9PntaYSgpO2JmKCk7Uk90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDTWludXRlcygwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QqZ3cpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL2d3fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENIb3VycygpfSkscmV0PVJPdCxnSWU9Uk90LnJhbmdlfSk7dmFyIERPdCx4dyxfSWUsT090PU0oKCk9PntaYSgpO2JmKCk7RE90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRVVENEYXRlKGUuZ2V0VVRDRGF0ZSgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL0tPfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENEYXRlKCktMX0pLHh3PURPdCxfSWU9RE90LnJhbmdlfSk7ZnVuY3Rpb24gY3YoZSl7cmV0dXJuIE5yKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKS0odC5nZXRVVENEYXkoKSs3LWUpJTcpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK3IqNyl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdCkvWk99KX12YXIgdXYsYncsek90LEZPdCxOZyxCT3QsSE90LFZPdCx5SWUsdkllLHhJZSxiSWUsd0llLFNJZSxVT3Q9TSgoKT0+e1phKCk7YmYoKTt1dj1jdigwKSxidz1jdigxKSx6T3Q9Y3YoMiksRk90PWN2KDMpLE5nPWN2KDQpLEJPdD1jdig1KSxIT3Q9Y3YoNiksVk90PXV2LnJhbmdlLHlJZT1idy5yYW5nZSx2SWU9ek90LnJhbmdlLHhJZT1GT3QucmFuZ2UsYkllPU5nLnJhbmdlLHdJZT1CT3QucmFuZ2UsU0llPUhPdC5yYW5nZX0pO3ZhciBxT3QsbmV0LE1JZSxHT3Q9TSgoKT0+e1phKCk7cU90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRGF0ZSgxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VVRDTW9udGgoZS5nZXRVVENNb250aCgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldFVUQ01vbnRoKCktZS5nZXRVVENNb250aCgpKyh0LmdldFVUQ0Z1bGxZZWFyKCktZS5nZXRVVENGdWxsWWVhcigpKSoxMn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDTW9udGgoKX0pLG5ldD1xT3QsTUllPXFPdC5yYW5nZX0pO3ZhciBpZXQsbGQsRUllLFdPdD1NKCgpPT57WmEoKTtpZXQ9TnIoZnVuY3Rpb24oZSl7ZS5zZXRVVENNb250aCgwLDEpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRVVENGdWxsWWVhcihlLmdldFVUQ0Z1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZ2V0VVRDRnVsbFllYXIoKS1lLmdldFVUQ0Z1bGxZZWFyKCl9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0Z1bGxZZWFyKCl9KTtpZXQuZXZlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIWlzRmluaXRlKGU9TWF0aC5mbG9vcihlKSl8fCEoZT4wKT9udWxsOk5yKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcih0LmdldFVUQ0Z1bGxZZWFyKCkvZSkqZSksdC5zZXRVVENNb250aCgwLDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRVVENGdWxsWWVhcih0LmdldFVUQ0Z1bGxZZWFyKCkrciplKX0pfTtsZD1pZXQsRUllPWlldC5yYW5nZX0pO3ZhciBKTz1NKCgpPT57Zk90KCk7bU90KCk7X090KCk7dk90KCk7Yk90KCk7Q090KCk7UE90KCk7SU90KCk7a090KCk7Tk90KCk7T090KCk7VU90KCk7R090KCk7V090KCl9KTtmdW5jdGlvbiBvZXQoZSl7aWYoMDw9ZS55JiZlLnk8MTAwKXt2YXIgdD1uZXcgRGF0ZSgtMSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCk7cmV0dXJuIHQuc2V0RnVsbFllYXIoZS55KSx0fXJldHVybiBuZXcgRGF0ZShlLnksZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpfWZ1bmN0aW9uIGFldChlKXtpZigwPD1lLnkmJmUueTwxMDApe3ZhciB0PW5ldyBEYXRlKERhdGUuVVRDKC0xLGUubSxlLmQsZS5ILGUuTSxlLlMsZS5MKSk7cmV0dXJuIHQuc2V0VVRDRnVsbFllYXIoZS55KSx0fXJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyhlLnksZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpKX1mdW5jdGlvbiB5QyhlLHQscil7cmV0dXJue3k6ZSxtOnQsZDpyLEg6MCxNOjAsUzowLEw6MH19ZnVuY3Rpb24gc2V0KGUpe3ZhciB0PWUuZGF0ZVRpbWUscj1lLmRhdGUsbj1lLnRpbWUsaT1lLnBlcmlvZHMsbz1lLmRheXMsYT1lLnNob3J0RGF5cyxzPWUubW9udGhzLGw9ZS5zaG9ydE1vbnRocyxjPXZDKGkpLHU9eEMoaSksaD12QyhvKSxmPXhDKG8pLHA9dkMoYSksZD14QyhhKSxnPXZDKHMpLF89eEMocykseT12QyhsKSx4PXhDKGwpLGI9e2E6VyxBOlosYjpydCxCOm90LGM6bnVsbCxkOlpPdCxlOlpPdCxmOlhJZSxnOmk5ZSxHOmE5ZSxIOldJZSxJOllJZSxqOmpJZSxMOnI3dCxtOiRJZSxNOktJZSxwOnN0LHE6U3QsUTp0N3QsczplN3QsUzpaSWUsdTpKSWUsVTpRSWUsVjp0OWUsdzplOWUsVzpyOWUseDpudWxsLFg6bnVsbCx5Om45ZSxZOm85ZSxaOnM5ZSwiJSI6UU90fSxTPXthOmJ0LEE6TXQsYjpsdCxCOkt0LGM6bnVsbCxkOkpPdCxlOkpPdCxmOmg5ZSxnOmI5ZSxHOlM5ZSxIOmw5ZSxJOmM5ZSxqOnU5ZSxMOmk3dCxtOmY5ZSxNOnA5ZSxwOl90LHE6Y3QsUTp0N3QsczplN3QsUzpkOWUsdTptOWUsVTpnOWUsVjpfOWUsdzp5OWUsVzp2OWUseDpudWxsLFg6bnVsbCx5Ong5ZSxZOnc5ZSxaOk05ZSwiJSI6UU90fSxDPXthOkIsQTpJLGI6TCxCOlIsYzpGLGQ6JE90LGU6JE90LGY6VkllLGc6WE90LEc6ak90LEg6S090LEk6S090LGo6ekllLEw6SEllLG06T0llLE06RkllLHA6RCxxOkRJZSxROnFJZSxzOkdJZSxTOkJJZSx1OklJZSxVOkxJZSxWOmtJZSx3OlBJZSxXOlJJZSx4OnosWDpVLHk6WE90LFk6ak90LFo6TkllLCIlIjpVSWV9O2IueD1QKHIsYiksYi5YPVAobixiKSxiLmM9UCh0LGIpLFMueD1QKHIsUyksUy5YPVAobixTKSxTLmM9UCh0LFMpO2Z1bmN0aW9uIFAoWCxldCl7cmV0dXJuIGZ1bmN0aW9uKGR0KXt2YXIgcT1bXSxwdD0tMSxodD0wLHd0PVgubGVuZ3RoLGt0LGllLGVlO2ZvcihkdCBpbnN0YW5jZW9mIERhdGV8fChkdD1uZXcgRGF0ZSgrZHQpKTsrK3B0PHd0OylYLmNoYXJDb2RlQXQocHQpPT09MzcmJihxLnB1c2goWC5zbGljZShodCxwdCkpLChpZT1ZT3Rba3Q9WC5jaGFyQXQoKytwdCldKSE9bnVsbD9rdD1YLmNoYXJBdCgrK3B0KTppZT1rdD09PSJlIj8iICI6IjAiLChlZT1ldFtrdF0pJiYoa3Q9ZWUoZHQsaWUpKSxxLnB1c2goa3QpLGh0PXB0KzEpO3JldHVybiBxLnB1c2goWC5zbGljZShodCxwdCkpLHEuam9pbigiIil9fWZ1bmN0aW9uIGsoWCxldCl7cmV0dXJuIGZ1bmN0aW9uKGR0KXt2YXIgcT15QygxOTAwLHZvaWQgMCwxKSxwdD1PKHEsWCxkdCs9IiIsMCksaHQsd3Q7aWYocHQhPWR0Lmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBxKXJldHVybiBuZXcgRGF0ZShxLlEpO2lmKCJzImluIHEpcmV0dXJuIG5ldyBEYXRlKHEucyoxZTMrKCJMImluIHE/cS5MOjApKTtpZihldCYmISgiWiJpbiBxKSYmKHEuWj0wKSwicCJpbiBxJiYocS5IPXEuSCUxMitxLnAqMTIpLHEubT09PXZvaWQgMCYmKHEubT0icSJpbiBxP3EucTowKSwiViJpbiBxKXtpZihxLlY8MXx8cS5WPjUzKXJldHVybiBudWxsOyJ3ImluIHF8fChxLnc9MSksIloiaW4gcT8oaHQ9YWV0KHlDKHEueSwwLDEpKSx3dD1odC5nZXRVVENEYXkoKSxodD13dD40fHx3dD09PTA/YncuY2VpbChodCk6YncoaHQpLGh0PXh3Lm9mZnNldChodCwocS5WLTEpKjcpLHEueT1odC5nZXRVVENGdWxsWWVhcigpLHEubT1odC5nZXRVVENNb250aCgpLHEuZD1odC5nZXRVVENEYXRlKCkrKHEudys2KSU3KTooaHQ9b2V0KHlDKHEueSwwLDEpKSx3dD1odC5nZXREYXkoKSxodD13dD40fHx3dD09PTA/dncuY2VpbChodCk6dncoaHQpLGh0PXl3Lm9mZnNldChodCwocS5WLTEpKjcpLHEueT1odC5nZXRGdWxsWWVhcigpLHEubT1odC5nZXRNb250aCgpLHEuZD1odC5nZXREYXRlKCkrKHEudys2KSU3KX1lbHNlKCJXImluIHF8fCJVImluIHEpJiYoInciaW4gcXx8KHEudz0idSJpbiBxP3EudSU3OiJXImluIHE/MTowKSx3dD0iWiJpbiBxP2FldCh5QyhxLnksMCwxKSkuZ2V0VVRDRGF5KCk6b2V0KHlDKHEueSwwLDEpKS5nZXREYXkoKSxxLm09MCxxLmQ9IlciaW4gcT8ocS53KzYpJTcrcS5XKjctKHd0KzUpJTc6cS53K3EuVSo3LSh3dCs2KSU3KTtyZXR1cm4iWiJpbiBxPyhxLkgrPXEuWi8xMDB8MCxxLk0rPXEuWiUxMDAsYWV0KHEpKTpvZXQocSl9fWZ1bmN0aW9uIE8oWCxldCxkdCxxKXtmb3IodmFyIHB0PTAsaHQ9ZXQubGVuZ3RoLHd0PWR0Lmxlbmd0aCxrdCxpZTtwdDxodDspe2lmKHE+PXd0KXJldHVybi0xO2lmKGt0PWV0LmNoYXJDb2RlQXQocHQrKyksa3Q9PT0zNyl7aWYoa3Q9ZXQuY2hhckF0KHB0KyspLGllPUNba3QgaW4gWU90P2V0LmNoYXJBdChwdCsrKTprdF0sIWllfHwocT1pZShYLGR0LHEpKTwwKXJldHVybi0xfWVsc2UgaWYoa3QhPWR0LmNoYXJDb2RlQXQocSsrKSlyZXR1cm4tMX1yZXR1cm4gcX1mdW5jdGlvbiBEKFgsZXQsZHQpe3ZhciBxPWMuZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLnA9dVtxWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBCKFgsZXQsZHQpe3ZhciBxPXAuZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLnc9ZFtxWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBJKFgsZXQsZHQpe3ZhciBxPWguZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLnc9ZltxWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBMKFgsZXQsZHQpe3ZhciBxPXkuZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLm09eFtxWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBSKFgsZXQsZHQpe3ZhciBxPWcuZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLm09X1txWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBGKFgsZXQsZHQpe3JldHVybiBPKFgsdCxldCxkdCl9ZnVuY3Rpb24geihYLGV0LGR0KXtyZXR1cm4gTyhYLHIsZXQsZHQpfWZ1bmN0aW9uIFUoWCxldCxkdCl7cmV0dXJuIE8oWCxuLGV0LGR0KX1mdW5jdGlvbiBXKFgpe3JldHVybiBhW1guZ2V0RGF5KCldfWZ1bmN0aW9uIFooWCl7cmV0dXJuIG9bWC5nZXREYXkoKV19ZnVuY3Rpb24gcnQoWCl7cmV0dXJuIGxbWC5nZXRNb250aCgpXX1mdW5jdGlvbiBvdChYKXtyZXR1cm4gc1tYLmdldE1vbnRoKCldfWZ1bmN0aW9uIHN0KFgpe3JldHVybiBpWysoWC5nZXRIb3VycygpPj0xMildfWZ1bmN0aW9uIFN0KFgpe3JldHVybiAxK35+KFguZ2V0TW9udGgoKS8zKX1mdW5jdGlvbiBidChYKXtyZXR1cm4gYVtYLmdldFVUQ0RheSgpXX1mdW5jdGlvbiBNdChYKXtyZXR1cm4gb1tYLmdldFVUQ0RheSgpXX1mdW5jdGlvbiBsdChYKXtyZXR1cm4gbFtYLmdldFVUQ01vbnRoKCldfWZ1bmN0aW9uIEt0KFgpe3JldHVybiBzW1guZ2V0VVRDTW9udGgoKV19ZnVuY3Rpb24gX3QoWCl7cmV0dXJuIGlbKyhYLmdldFVUQ0hvdXJzKCk+PTEyKV19ZnVuY3Rpb24gY3QoWCl7cmV0dXJuIDErfn4oWC5nZXRVVENNb250aCgpLzMpfXJldHVybntmb3JtYXQ6ZnVuY3Rpb24oWCl7dmFyIGV0PVAoWCs9IiIsYik7cmV0dXJuIGV0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFh9LGV0fSxwYXJzZTpmdW5jdGlvbihYKXt2YXIgZXQ9ayhYKz0iIiwhMSk7cmV0dXJuIGV0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFh9LGV0fSx1dGNGb3JtYXQ6ZnVuY3Rpb24oWCl7dmFyIGV0PVAoWCs9IiIsUyk7cmV0dXJuIGV0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFh9LGV0fSx1dGNQYXJzZTpmdW5jdGlvbihYKXt2YXIgZXQ9ayhYKz0iIiwhMCk7cmV0dXJuIGV0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFh9LGV0fX19ZnVuY3Rpb24gR3IoZSx0LHIpe3ZhciBuPWU8MD8iLSI6IiIsaT0obj8tZTplKSsiIixvPWkubGVuZ3RoO3JldHVybiBuKyhvPHI/bmV3IEFycmF5KHItbysxKS5qb2luKHQpK2k6aSl9ZnVuY3Rpb24gQUllKGUpe3JldHVybiBlLnJlcGxhY2UoQ0llLCJcXCQmIil9ZnVuY3Rpb24gdkMoZSl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK2UubWFwKEFJZSkuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIHhDKGUpe2Zvcih2YXIgdD17fSxyPS0xLG49ZS5sZW5ndGg7KytyPG47KXRbZVtyXS50b0xvd2VyQ2FzZSgpXT1yO3JldHVybiB0fWZ1bmN0aW9uIFBJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUudz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBJSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMSkpO3JldHVybiBuPyhlLnU9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTEllKGUsdCxyKXt2YXIgbj1Uby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5VPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGtJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuVj0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBSSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlc9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gak90KGUsdCxyKXt2YXIgbj1Uby5leGVjKHQuc2xpY2UocixyKzQpKTtyZXR1cm4gbj8oZS55PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFhPdChlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUueT0rblswXSsoK25bMF0+Njg/MTkwMDoyZTMpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE5JZShlLHQscil7dmFyIG49L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWModC5zbGljZShyLHIrNikpO3JldHVybiBuPyhlLlo9blsxXT8wOi0oblsyXSsoblszXXx8IjAwIikpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIERJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUucT1uWzBdKjMtMyxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBPSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLm09blswXS0xLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uICRPdChlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuZD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB6SWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMykpO3JldHVybiBuPyhlLm09MCxlLmQ9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gS090KGUsdCxyKXt2YXIgbj1Uby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5IPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEZJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuTT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBCSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlM9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSEllKGUsdCxyKXt2YXIgbj1Uby5leGVjKHQuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8oZS5MPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFZJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscis2KSk7cmV0dXJuIG4/KGUuTD1NYXRoLmZsb29yKG5bMF0vMWUzKSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBVSWUoZSx0LHIpe3ZhciBuPVRJZS5leGVjKHQuc2xpY2UocixyKzEpKTtyZXR1cm4gbj9yK25bMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIHFJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIpKTtyZXR1cm4gbj8oZS5RPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEdJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIpKTtyZXR1cm4gbj8oZS5zPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFpPdChlLHQpe3JldHVybiBHcihlLmdldERhdGUoKSx0LDIpfWZ1bmN0aW9uIFdJZShlLHQpe3JldHVybiBHcihlLmdldEhvdXJzKCksdCwyKX1mdW5jdGlvbiBZSWUoZSx0KXtyZXR1cm4gR3IoZS5nZXRIb3VycygpJTEyfHwxMix0LDIpfWZ1bmN0aW9uIGpJZShlLHQpe3JldHVybiBHcigxK3l3LmNvdW50KHNkKGUpLGUpLHQsMyl9ZnVuY3Rpb24gcjd0KGUsdCl7cmV0dXJuIEdyKGUuZ2V0TWlsbGlzZWNvbmRzKCksdCwzKX1mdW5jdGlvbiBYSWUoZSx0KXtyZXR1cm4gcjd0KGUsdCkrIjAwMCJ9ZnVuY3Rpb24gJEllKGUsdCl7cmV0dXJuIEdyKGUuZ2V0TW9udGgoKSsxLHQsMil9ZnVuY3Rpb24gS0llKGUsdCl7cmV0dXJuIEdyKGUuZ2V0TWludXRlcygpLHQsMil9ZnVuY3Rpb24gWkllKGUsdCl7cmV0dXJuIEdyKGUuZ2V0U2Vjb25kcygpLHQsMil9ZnVuY3Rpb24gSkllKGUpe3ZhciB0PWUuZ2V0RGF5KCk7cmV0dXJuIHQ9PT0wPzc6dH1mdW5jdGlvbiBRSWUoZSx0KXtyZXR1cm4gR3IobHYuY291bnQoc2QoZSktMSxlKSx0LDIpfWZ1bmN0aW9uIG43dChlKXt2YXIgdD1lLmdldERheSgpO3JldHVybiB0Pj00fHx0PT09MD9SZyhlKTpSZy5jZWlsKGUpfWZ1bmN0aW9uIHQ5ZShlLHQpe3JldHVybiBlPW43dChlKSxHcihSZy5jb3VudChzZChlKSxlKSsoc2QoZSkuZ2V0RGF5KCk9PT00KSx0LDIpfWZ1bmN0aW9uIGU5ZShlKXtyZXR1cm4gZS5nZXREYXkoKX1mdW5jdGlvbiByOWUoZSx0KXtyZXR1cm4gR3IodncuY291bnQoc2QoZSktMSxlKSx0LDIpfWZ1bmN0aW9uIG45ZShlLHQpe3JldHVybiBHcihlLmdldEZ1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gaTllKGUsdCl7cmV0dXJuIGU9bjd0KGUpLEdyKGUuZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBvOWUoZSx0KXtyZXR1cm4gR3IoZS5nZXRGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIGE5ZShlLHQpe3ZhciByPWUuZ2V0RGF5KCk7cmV0dXJuIGU9cj49NHx8cj09PTA/UmcoZSk6UmcuY2VpbChlKSxHcihlLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gczllKGUpe3ZhciB0PWUuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4odD4wPyItIjoodCo9LTEsIisiKSkrR3IodC82MHwwLCIwIiwyKStHcih0JTYwLCIwIiwyKX1mdW5jdGlvbiBKT3QoZSx0KXtyZXR1cm4gR3IoZS5nZXRVVENEYXRlKCksdCwyKX1mdW5jdGlvbiBsOWUoZSx0KXtyZXR1cm4gR3IoZS5nZXRVVENIb3VycygpLHQsMil9ZnVuY3Rpb24gYzllKGUsdCl7cmV0dXJuIEdyKGUuZ2V0VVRDSG91cnMoKSUxMnx8MTIsdCwyKX1mdW5jdGlvbiB1OWUoZSx0KXtyZXR1cm4gR3IoMSt4dy5jb3VudChsZChlKSxlKSx0LDMpfWZ1bmN0aW9uIGk3dChlLHQpe3JldHVybiBHcihlLmdldFVUQ01pbGxpc2Vjb25kcygpLHQsMyl9ZnVuY3Rpb24gaDllKGUsdCl7cmV0dXJuIGk3dChlLHQpKyIwMDAifWZ1bmN0aW9uIGY5ZShlLHQpe3JldHVybiBHcihlLmdldFVUQ01vbnRoKCkrMSx0LDIpfWZ1bmN0aW9uIHA5ZShlLHQpe3JldHVybiBHcihlLmdldFVUQ01pbnV0ZXMoKSx0LDIpfWZ1bmN0aW9uIGQ5ZShlLHQpe3JldHVybiBHcihlLmdldFVUQ1NlY29uZHMoKSx0LDIpfWZ1bmN0aW9uIG05ZShlKXt2YXIgdD1lLmdldFVUQ0RheSgpO3JldHVybiB0PT09MD83OnR9ZnVuY3Rpb24gZzllKGUsdCl7cmV0dXJuIEdyKHV2LmNvdW50KGxkKGUpLTEsZSksdCwyKX1mdW5jdGlvbiBvN3QoZSl7dmFyIHQ9ZS5nZXRVVENEYXkoKTtyZXR1cm4gdD49NHx8dD09PTA/TmcoZSk6TmcuY2VpbChlKX1mdW5jdGlvbiBfOWUoZSx0KXtyZXR1cm4gZT1vN3QoZSksR3IoTmcuY291bnQobGQoZSksZSkrKGxkKGUpLmdldFVUQ0RheSgpPT09NCksdCwyKX1mdW5jdGlvbiB5OWUoZSl7cmV0dXJuIGUuZ2V0VVRDRGF5KCl9ZnVuY3Rpb24gdjllKGUsdCl7cmV0dXJuIEdyKGJ3LmNvdW50KGxkKGUpLTEsZSksdCwyKX1mdW5jdGlvbiB4OWUoZSx0KXtyZXR1cm4gR3IoZS5nZXRVVENGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIGI5ZShlLHQpe3JldHVybiBlPW83dChlKSxHcihlLmdldFVUQ0Z1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gdzllKGUsdCl7cmV0dXJuIEdyKGUuZ2V0VVRDRnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiBTOWUoZSx0KXt2YXIgcj1lLmdldFVUQ0RheSgpO3JldHVybiBlPXI+PTR8fHI9PT0wP05nKGUpOk5nLmNlaWwoZSksR3IoZS5nZXRVVENGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIE05ZSgpe3JldHVybiIrMDAwMCJ9ZnVuY3Rpb24gUU90KCl7cmV0dXJuIiUifWZ1bmN0aW9uIHQ3dChlKXtyZXR1cm4rZX1mdW5jdGlvbiBlN3QoZSl7cmV0dXJuIE1hdGguZmxvb3IoK2UvMWUzKX12YXIgWU90LFRvLFRJZSxDSWUsYTd0PU0oKCk9PntKTygpO1lPdD17Ii0iOiIiLF86IiAiLDA6IjAifSxUbz0vXlxzKlxkKy8sVEllPS9eJS8sQ0llPS9bXFxeJCorP3xbXF0oKS57fV0vZ30pO2Z1bmN0aW9uIGNldChlKXtyZXR1cm4gd3c9c2V0KGUpLFFPPXd3LmZvcm1hdCxzN3Q9d3cucGFyc2UsdDc9d3cudXRjRm9ybWF0LGw3dD13dy51dGNQYXJzZSx3d312YXIgd3csUU8sczd0LHQ3LGw3dCxjN3Q9TSgoKT0+e2E3dCgpO2NldCh7ZGF0ZVRpbWU6IiV4LCAlWCIsZGF0ZToiJS1tLyUtZC8lWSIsdGltZToiJS1JOiVNOiVTICVwIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pfSk7dmFyIHVldD1NKCgpPT57Yzd0KCl9KTtmdW5jdGlvbiBUOWUoZSl7cmV0dXJuIG5ldyBEYXRlKGUpfWZ1bmN0aW9uIEM5ZShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIERhdGU/K2U6K25ldyBEYXRlKCtlKX1mdW5jdGlvbiBlNyhlLHQscixuLGksbyxhLHMsbCl7dmFyIGM9b2QocEMsdmYpLHU9Yy5pbnZlcnQsaD1jLmRvbWFpbixmPWwoIi4lTCIpLHA9bCgiOiVTIiksZD1sKCIlSTolTSIpLGc9bCgiJUkgJXAiKSxfPWwoIiVhICVkIikseT1sKCIlYiAlZCIpLHg9bCgiJUIiKSxiPWwoIiVZIiksUz1bW2EsMSxiQ10sW2EsNSw1KmJDXSxbYSwxNSwxNSpiQ10sW2EsMzAsMzAqYkNdLFtvLDEsd0NdLFtvLDUsNSp3Q10sW28sMTUsMTUqd0NdLFtvLDMwLDMwKndDXSxbaSwxLFNDXSxbaSwzLDMqU0NdLFtpLDYsNipTQ10sW2ksMTIsMTIqU0NdLFtuLDEsTUNdLFtuLDIsMipNQ10sW3IsMSxFOWVdLFt0LDEsdTd0XSxbdCwzLDMqdTd0XSxbZSwxLGhldF1dO2Z1bmN0aW9uIEMoayl7cmV0dXJuKGEoayk8az9mOm8oayk8az9wOmkoayk8az9kOm4oayk8az9nOnQoayk8az9yKGspPGs/Xzp5OmUoayk8az94OmIpKGspfWZ1bmN0aW9uIFAoayxPLEQsQil7aWYoaz09bnVsbCYmKGs9MTApLHR5cGVvZiBrPT0ibnVtYmVyIil7dmFyIEk9TWF0aC5hYnMoRC1PKS9rLEw9YUMoZnVuY3Rpb24oUil7cmV0dXJuIFJbMl19KS5yaWdodChTLEkpO0w9PT1TLmxlbmd0aD8oQj1KeShPL2hldCxEL2hldCxrKSxrPWUpOkw/KEw9U1tJL1NbTC0xXVsyXTxTW0xdWzJdL0k/TC0xOkxdLEI9TFsxXSxrPUxbMF0pOihCPU1hdGgubWF4KEp5KE8sRCxrKSwxKSxrPXMpfXJldHVybiBCPT1udWxsP2s6ay5ldmVyeShCKX1yZXR1cm4gYy5pbnZlcnQ9ZnVuY3Rpb24oayl7cmV0dXJuIG5ldyBEYXRlKHUoaykpfSxjLmRvbWFpbj1mdW5jdGlvbihrKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9oKHJ3LmNhbGwoayxDOWUpKTpoKCkubWFwKFQ5ZSl9LGMudGlja3M9ZnVuY3Rpb24oayxPKXt2YXIgRD1oKCksQj1EWzBdLEk9RFtELmxlbmd0aC0xXSxMPUk8QixSO3JldHVybiBMJiYoUj1CLEI9SSxJPVIpLFI9UChrLEIsSSxPKSxSPVI/Ui5yYW5nZShCLEkrMSk6W10sTD9SLnJldmVyc2UoKTpSfSxjLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oayxPKXtyZXR1cm4gTz09bnVsbD9DOmwoTyl9LGMubmljZT1mdW5jdGlvbihrLE8pe3ZhciBEPWgoKTtyZXR1cm4oaz1QKGssRFswXSxEW0QubGVuZ3RoLTFdLE8pKT9oKEdPKEQsaykpOmN9LGMuY29weT1mdW5jdGlvbigpe3JldHVybiBMZyhjLGU3KGUsdCxyLG4saSxvLGEscyxsKSl9LGN9ZnVuY3Rpb24gaDd0KCl7cmV0dXJuIGU3KHNkLFF0dCxsdix5dyxKdHQsWnR0LF93LG13LFFPKS5kb21haW4oW25ldyBEYXRlKDJlMywwLDEpLG5ldyBEYXRlKDJlMywwLDIpXSl9dmFyIGJDLHdDLFNDLE1DLEU5ZSx1N3QsaGV0LGZldD1NKCgpPT57Z2YoKTt1dygpO0pPKCk7dWV0KCk7QWcoKTtkQygpO1h0dCgpO2JDPTFlMyx3Qz1iQyo2MCxTQz13Qyo2MCxNQz1TQyoyNCxFOWU9TUMqNyx1N3Q9TUMqMzAsaGV0PU1DKjM2NX0pO2Z1bmN0aW9uIGY3dCgpe3JldHVybiBlNyhsZCxuZXQsdXYseHcscmV0LGVldCxfdyxtdyx0NykuZG9tYWluKFtEYXRlLlVUQygyZTMsMCwxKSxEYXRlLlVUQygyZTMsMCwyKV0pfXZhciBwN3Q9TSgoKT0+e2ZldCgpO3VldCgpO0pPKCl9KTtmdW5jdGlvbiBtbChlKXtyZXR1cm4gZS5tYXRjaCgvLns2fS9nKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIiMiK3R9KX12YXIgU3c9TSgoKT0+e30pO3ZhciBkN3QsbTd0PU0oKCk9PntTdygpO2Q3dD1tbCgiMWY3N2I0ZmY3ZjBlMmNhMDJjZDYyNzI4OTQ2N2JkOGM1NjRiZTM3N2MyN2Y3ZjdmYmNiZDIyMTdiZWNmIil9KTt2YXIgZzd0LF83dD1NKCgpPT57U3coKTtnN3Q9bWwoIjM5M2I3OTUyNTRhMzZiNmVjZjljOWVkZTYzNzkzOThjYTI1MmI1Y2Y2YmNlZGI5YzhjNmQzMWJkOWUzOWU3YmE1MmU3Y2I5NDg0M2MzOWFkNDk0YWQ2NjE2YmU3OTY5YzdiNDE3M2E1NTE5NGNlNmRiZGRlOWVkNiIpfSk7dmFyIHk3dCx2N3Q9TSgoKT0+e1N3KCk7eTd0PW1sKCIzMTgyYmQ2YmFlZDY5ZWNhZTFjNmRiZWZlNjU1MGRmZDhkM2NmZGFlNmJmZGQwYTIzMWEzNTQ3NGM0NzZhMWQ5OWJjN2U5YzA3NTZiYjE5ZTlhYzhiY2JkZGNkYWRhZWI2MzYzNjM5Njk2OTZiZGJkYmRkOWQ5ZDkiKX0pO3ZhciB4N3QsYjd0PU0oKCk9PntTdygpO3g3dD1tbCgiMWY3N2I0YWVjN2U4ZmY3ZjBlZmZiYjc4MmNhMDJjOThkZjhhZDYyNzI4ZmY5ODk2OTQ2N2JkYzViMGQ1OGM1NjRiYzQ5Yzk0ZTM3N2MyZjdiNmQyN2Y3ZjdmYzdjN2M3YmNiZDIyZGJkYjhkMTdiZWNmOWVkYWU1Iil9KTt2YXIgdzd0LFM3dD1NKCgpPT57c3coKTt1dygpO3c3dD1jdyhLYSgzMDAsLjUsMCksS2EoLTI0MCwuNSwxKSl9KTtmdW5jdGlvbiBUN3QoZSl7KGU8MHx8ZT4xKSYmKGUtPU1hdGguZmxvb3IoZSkpO3ZhciB0PU1hdGguYWJzKGUtLjUpO3JldHVybiByNy5oPTM2MCplLTEwMCxyNy5zPTEuNS0xLjUqdCxyNy5sPS44LS45KnQscjcrIiJ9dmFyIE03dCxFN3QscjcsQzd0PU0oKCk9PntzdygpO3V3KCk7TTd0PWN3KEthKC0xMDAsLjc1LC4zNSksS2EoODAsMS41LC44KSksRTd0PWN3KEthKDI2MCwuNzUsLjM1KSxLYSg4MCwxLjUsLjgpKSxyNz1LYSgpfSk7ZnVuY3Rpb24gbjcoZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBlW01hdGgubWF4KDAsTWF0aC5taW4odC0xLE1hdGguZmxvb3Iocip0KSkpXX19dmFyIEE3dCxQN3QsSTd0LEw3dCxrN3Q9TSgoKT0+e1N3KCk7QTd0PW43KG1sKCI0NDAxNTQ0NDAyNTY0NTA0NTc0NTA1NTk0NjA3NWE0NjA4NWM0NjBhNWQ0NjBiNWU0NzBkNjA0NzBlNjE0NzEwNjM0NzExNjQ0NzEzNjU0ODE0Njc0ODE2Njg0ODE3Njk0ODE4NmE0ODFhNmM0ODFiNmQ0ODFjNmU0ODFkNmY0ODFmNzA0ODIwNzE0ODIxNzM0ODIzNzQ0ODI0NzU0ODI1NzY0ODI2Nzc0ODI4Nzg0ODI5Nzk0NzJhN2E0NzJjN2E0NzJkN2I0NzJlN2M0NzJmN2Q0NjMwN2U0NjMyN2U0NjMzN2Y0NjM0ODA0NTM1ODE0NTM3ODE0NTM4ODI0NDM5ODM0NDNhODM0NDNiODQ0MzNkODQ0MzNlODU0MjNmODU0MjQwODY0MjQxODY0MTQyODc0MTQ0ODc0MDQ1ODg0MDQ2ODgzZjQ3ODgzZjQ4ODkzZTQ5ODkzZTRhODkzZTRjOGEzZDRkOGEzZDRlOGEzYzRmOGEzYzUwOGIzYjUxOGIzYjUyOGIzYTUzOGIzYTU0OGMzOTU1OGMzOTU2OGMzODU4OGMzODU5OGMzNzVhOGMzNzViOGQzNjVjOGQzNjVkOGQzNTVlOGQzNTVmOGQzNDYwOGQzNDYxOGQzMzYyOGQzMzYzOGQzMjY0OGUzMjY1OGUzMTY2OGUzMTY3OGUzMTY4OGUzMDY5OGUzMDZhOGUyZjZiOGUyZjZjOGUyZTZkOGUyZTZlOGUyZTZmOGUyZDcwOGUyZDcxOGUyYzcxOGUyYzcyOGUyYzczOGUyYjc0OGUyYjc1OGUyYTc2OGUyYTc3OGUyYTc4OGUyOTc5OGUyOTdhOGUyOTdiOGUyODdjOGUyODdkOGUyNzdlOGUyNzdmOGUyNzgwOGUyNjgxOGUyNjgyOGUyNjgyOGUyNTgzOGUyNTg0OGUyNTg1OGUyNDg2OGUyNDg3OGUyMzg4OGUyMzg5OGUyMzhhOGQyMjhiOGQyMjhjOGQyMjhkOGQyMThlOGQyMThmOGQyMTkwOGQyMTkxOGMyMDkyOGMyMDkyOGMyMDkzOGMxZjk0OGMxZjk1OGIxZjk2OGIxZjk3OGIxZjk4OGIxZjk5OGExZjlhOGExZTliOGExZTljODkxZTlkODkxZjllODkxZjlmODgxZmEwODgxZmExODgxZmExODcxZmEyODcyMGEzODYyMGE0ODYyMWE1ODUyMWE2ODUyMmE3ODUyMmE4ODQyM2E5ODMyNGFhODMyNWFiODIyNWFjODIyNmFkODEyN2FkODEyOGFlODAyOWFmN2YyYWIwN2YyY2IxN2UyZGIyN2QyZWIzN2MyZmI0N2MzMWI1N2IzMmI2N2EzNGI2NzkzNWI3NzkzN2I4NzgzOGI5NzczYWJhNzYzYmJiNzUzZGJjNzQzZmJjNzM0MGJkNzI0MmJlNzE0NGJmNzA0NmMwNmY0OGMxNmU0YWMxNmQ0Y2MyNmM0ZWMzNmI1MGM0NmE1MmM1Njk1NGM1Njg1NmM2Njc1OGM3NjU1YWM4NjQ1Y2M4NjM1ZWM5NjI2MGNhNjA2M2NiNWY2NWNiNWU2N2NjNWM2OWNkNWI2Y2NkNWE2ZWNlNTg3MGNmNTc3M2QwNTY3NWQwNTQ3N2QxNTM3YWQxNTE3Y2QyNTA3ZmQzNGU4MWQzNGQ4NGQ0NGI4NmQ1NDk4OWQ1NDg4YmQ2NDY4ZWQ2NDU5MGQ3NDM5M2Q3NDE5NWQ4NDA5OGQ4M2U5YmQ5M2M5ZGQ5M2JhMGRhMzlhMmRhMzdhNWRiMzZhOGRiMzRhYWRjMzJhZGRjMzBiMGRkMmZiMmRkMmRiNWRlMmJiOGRlMjliYWRlMjhiZGRmMjZjMGRmMjVjMmRmMjNjNWUwMjFjOGUwMjBjYWUxMWZjZGUxMWRkMGUxMWNkMmUyMWJkNWUyMWFkOGUyMTlkYWUzMTlkZGUzMThkZmUzMThlMmU0MThlNWU0MTllN2U0MTllYWU1MWFlY2U1MWJlZmU1MWNmMWU1MWRmNGU2MWVmNmU2MjBmOGU2MjFmYmU3MjNmZGU3MjUiKSksUDd0PW43KG1sKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMDkwMjAyMGIwMjAyMGQwMzAzMGYwMzAzMTIwNDA0MTQwNTA0MTYwNjA1MTgwNjA1MWEwNzA2MWMwODA3MWUwOTA3MjAwYTA4MjIwYjA5MjQwYzA5MjYwZDBhMjkwZTBiMmIxMDBiMmQxMTBjMmYxMjBkMzExMzBkMzQxNDBlMzYxNTBlMzgxNjBmM2IxODBmM2QxOTEwM2YxYTEwNDIxYzEwNDQxZDExNDcxZTExNDkyMDExNGIyMTExNGUyMjExNTAyNDEyNTMyNTEyNTUyNzEyNTgyOTExNWEyYTExNWMyYzExNWYyZDExNjEyZjExNjMzMTExNjUzMzEwNjczNDEwNjkzNjEwNmIzODEwNmMzOTBmNmUzYjBmNzAzZDBmNzEzZjBmNzI0MDBmNzQ0MjBmNzU0NDBmNzY0NTEwNzc0NzEwNzg0OTEwNzg0YTEwNzk0YzExN2E0ZTExN2I0ZjEyN2I1MTEyN2M1MjEzN2M1NDEzN2Q1NjE0N2Q1NzE1N2U1OTE1N2U1YTE2N2U1YzE2N2Y1ZDE3N2Y1ZjE4N2Y2MDE4ODA2MjE5ODA2NDFhODA2NTFhODA2NzFiODA2ODFjODE2YTFjODE2YjFkODE2ZDFkODE2ZTFlODE3MDFmODE3MjFmODE3MzIwODE3NTIxODE3NjIxODE3ODIyODE3OTIyODI3YjIzODI3YzIzODI3ZTI0ODI4MDI1ODI4MTI1ODE4MzI2ODE4NDI2ODE4NjI3ODE4ODI3ODE4OTI4ODE4YjI5ODE4YzI5ODE4ZTJhODE5MDJhODE5MTJiODE5MzJiODA5NDJjODA5NjJjODA5ODJkODA5OTJkODA5YjJlN2Y5YzJlN2Y5ZTJmN2ZhMDJmN2ZhMTMwN2VhMzMwN2VhNTMxN2VhNjMxN2RhODMyN2RhYTMzN2RhYjMzN2NhZDM0N2NhZTM0N2JiMDM1N2JiMjM1N2JiMzM2N2FiNTM2N2FiNzM3NzliODM3NzliYTM4NzhiYzM5NzhiZDM5NzdiZjNhNzdjMDNhNzZjMjNiNzVjNDNjNzVjNTNjNzRjNzNkNzNjODNlNzNjYTNlNzJjYzNmNzFjZDQwNzFjZjQwNzBkMDQxNmZkMjQyNmZkMzQzNmVkNTQ0NmRkNjQ1NmNkODQ1NmNkOTQ2NmJkYjQ3NmFkYzQ4NjlkZTQ5NjhkZjRhNjhlMDRjNjdlMjRkNjZlMzRlNjVlNDRmNjRlNTUwNjRlNzUyNjNlODUzNjJlOTU0NjJlYTU2NjFlYjU3NjBlYzU4NjBlZDVhNWZlZTViNWVlZjVkNWVmMDVmNWVmMTYwNWRmMjYyNWRmMjY0NWNmMzY1NWNmNDY3NWNmNDY5NWNmNTZiNWNmNjZjNWNmNjZlNWNmNzcwNWNmNzcyNWNmODc0NWNmODc2NWNmOTc4NWRmOTc5NWRmOTdiNWRmYTdkNWVmYTdmNWVmYTgxNWZmYjgzNWZmYjg1NjBmYjg3NjFmYzg5NjFmYzhhNjJmYzhjNjNmYzhlNjRmYzkwNjVmZDkyNjZmZDk0NjdmZDk2NjhmZDk4NjlmZDlhNmFmZDliNmJmZTlkNmNmZTlmNmRmZWExNmVmZWEzNmZmZWE1NzFmZWE3NzJmZWE5NzNmZWFhNzRmZWFjNzZmZWFlNzdmZWIwNzhmZWIyN2FmZWI0N2JmZWI2N2NmZWI3N2VmZWI5N2ZmZWJiODFmZWJkODJmZWJmODRmZWMxODVmZWMyODdmZWM0ODhmZWM2OGFmZWM4OGNmZWNhOGRmZWNjOGZmZWNkOTBmZWNmOTJmZWQxOTRmZWQzOTVmZWQ1OTdmZWQ3OTlmZWQ4OWFmZGRhOWNmZGRjOWVmZGRlYTBmZGUwYTFmZGUyYTNmZGUzYTVmZGU1YTdmZGU3YTlmZGU5YWFmZGViYWNmY2VjYWVmY2VlYjBmY2YwYjJmY2YyYjRmY2Y0YjZmY2Y2YjhmY2Y3YjlmY2Y5YmJmY2ZiYmRmY2ZkYmYiKSksSTd0PW43KG1sKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMGEwMjAyMGMwMjAyMGUwMzAyMTAwNDAzMTIwNDAzMTQwNTA0MTcwNjA0MTkwNzA1MWIwODA1MWQwOTA2MWYwYTA3MjIwYjA3MjQwYzA4MjYwZDA4MjkwZTA5MmIxMDA5MmQxMTBhMzAxMjBhMzIxNDBiMzQxNTBiMzcxNjBiMzkxODBjM2MxOTBjM2UxYjBjNDExYzBjNDMxZTBjNDUxZjBjNDgyMTBjNGEyMzBjNGMyNDBjNGYyNjBjNTEyODBiNTMyOTBiNTUyYjBiNTcyZDBiNTkyZjBhNWIzMTBhNWMzMjBhNWUzNDBhNWYzNjA5NjEzODA5NjIzOTA5NjMzYjA5NjQzZDA5NjUzZTA5NjY0MDBhNjc0MjBhNjg0NDBhNjg0NTBhNjk0NzBiNmE0OTBiNmE0YTBjNmI0YzBjNmI0ZDBkNmM0ZjBkNmM1MTBlNmM1MjBlNmQ1NDBmNmQ1NTBmNmQ1NzEwNmU1OTEwNmU1YTExNmU1YzEyNmU1ZDEyNmU1ZjEzNmU2MTEzNmU2MjE0NmU2NDE1NmU2NTE1NmU2NzE2NmU2OTE2NmU2YTE3NmU2YzE4NmU2ZDE4NmU2ZjE5NmU3MTE5NmU3MjFhNmU3NDFhNmU3NTFiNmU3NzFjNmQ3ODFjNmQ3YTFkNmQ3YzFkNmQ3ZDFlNmQ3ZjFlNmM4MDFmNmM4MjIwNmM4NDIwNmI4NTIxNmI4NzIxNmI4ODIyNmE4YTIyNmE4YzIzNjk4ZDIzNjk4ZjI0Njk5MDI1Njg5MjI1Njg5MzI2Njc5NTI2Njc5NzI3NjY5ODI3NjY5YTI4NjU5YjI5NjQ5ZDI5NjQ5ZjJhNjNhMDJhNjNhMjJiNjJhMzJjNjFhNTJjNjBhNjJkNjBhODJlNWZhOTJlNWVhYjJmNWVhZDMwNWRhZTMwNWNiMDMxNWJiMTMyNWFiMzMyNWFiNDMzNTliNjM0NThiNzM1NTdiOTM1NTZiYTM2NTViYzM3NTRiZDM4NTNiZjM5NTJjMDNhNTFjMTNhNTBjMzNiNGZjNDNjNGVjNjNkNGRjNzNlNGNjODNmNGJjYTQwNGFjYjQxNDljYzQyNDhjZTQzNDdjZjQ0NDZkMDQ1NDVkMjQ2NDRkMzQ3NDNkNDQ4NDJkNTRhNDFkNzRiM2ZkODRjM2VkOTRkM2RkYTRlM2NkYjUwM2JkZDUxM2FkZTUyMzhkZjUzMzdlMDU1MzZlMTU2MzVlMjU3MzRlMzU5MzNlNDVhMzFlNTVjMzBlNjVkMmZlNzVlMmVlODYwMmRlOTYxMmJlYTYzMmFlYjY0MjllYjY2MjhlYzY3MjZlZDY5MjVlZTZhMjRlZjZjMjNlZjZlMjFmMDZmMjBmMTcxMWZmMTczMWRmMjc0MWNmMzc2MWJmMzc4MTlmNDc5MThmNTdiMTdmNTdkMTVmNjdlMTRmNjgwMTNmNzgyMTJmNzg0MTBmODg1MGZmODg3MGVmODg5MGNmOThiMGJmOThjMGFmOThlMDlmYTkwMDhmYTkyMDdmYTk0MDdmYjk2MDZmYjk3MDZmYjk5MDZmYjliMDZmYjlkMDdmYzlmMDdmY2ExMDhmY2EzMDlmY2E1MGFmY2E2MGNmY2E4MGRmY2FhMGZmY2FjMTFmY2FlMTJmY2IwMTRmY2IyMTZmY2I0MThmYmI2MWFmYmI4MWRmYmJhMWZmYmJjMjFmYmJlMjNmYWMwMjZmYWMyMjhmYWM0MmFmYWM2MmRmOWM3MmZmOWM5MzJmOWNiMzVmOGNkMzdmOGNmM2FmN2QxM2RmN2QzNDBmNmQ1NDNmNmQ3NDZmNWQ5NDlmNWRiNGNmNGRkNGZmNGRmNTNmNGUxNTZmM2UzNWFmM2U1NWRmMmU2NjFmMmU4NjVmMmVhNjlmMWVjNmRmMWVkNzFmMWVmNzVmMWYxNzlmMmYyN2RmMmY0ODJmM2Y1ODZmM2Y2OGFmNGY4OGVmNWY5OTJmNmZhOTZmOGZiOWFmOWZjOWRmYWZkYTFmY2ZmYTQiKSksTDd0PW43KG1sKCIwZDA4ODcxMDA3ODgxMzA3ODkxNjA3OGExOTA2OGMxYjA2OGQxZDA2OGUyMDA2OGYyMjA2OTAyNDA2OTEyNjA1OTEyODA1OTIyYTA1OTMyYzA1OTQyZTA1OTUyZjA1OTYzMTA1OTczMzA1OTczNTA0OTgzNzA0OTkzODA0OWEzYTA0OWEzYzA0OWIzZTA0OWMzZjA0OWM0MTA0OWQ0MzAzOWU0NDAzOWU0NjAzOWY0ODAzOWY0OTAzYTA0YjAzYTE0YzAyYTE0ZTAyYTI1MDAyYTI1MTAyYTM1MzAyYTM1NTAyYTQ1NjAxYTQ1ODAxYTQ1OTAxYTU1YjAxYTU1YzAxYTY1ZTAxYTY2MDAxYTY2MTAwYTc2MzAwYTc2NDAwYTc2NjAwYTc2NzAwYTg2OTAwYTg2YTAwYTg2YzAwYTg2ZTAwYTg2ZjAwYTg3MTAwYTg3MjAxYTg3NDAxYTg3NTAxYTg3NzAxYTg3ODAxYTg3YTAyYTg3YjAyYTg3ZDAzYTg3ZTAzYTg4MDA0YTg4MTA0YTc4MzA1YTc4NDA1YTc4NjA2YTY4NzA3YTY4ODA4YTY4YTA5YTU4YjBhYTU4ZDBiYTU4ZTBjYTQ4ZjBkYTQ5MTBlYTM5MjBmYTM5NDEwYTI5NTExYTE5NjEzYTE5ODE0YTA5OTE1OWY5YTE2OWY5YzE3OWU5ZDE4OWQ5ZTE5OWRhMDFhOWNhMTFiOWJhMjFkOWFhMzFlOWFhNTFmOTlhNjIwOThhNzIxOTdhODIyOTZhYTIzOTVhYjI0OTRhYzI2OTRhZDI3OTNhZTI4OTJiMDI5OTFiMTJhOTBiMjJiOGZiMzJjOGViNDJlOGRiNTJmOGNiNjMwOGJiNzMxOGFiODMyODliYTMzODhiYjM0ODhiYzM1ODdiZDM3ODZiZTM4ODViZjM5ODRjMDNhODNjMTNiODJjMjNjODFjMzNkODBjNDNlN2ZjNTQwN2VjNjQxN2RjNzQyN2NjODQzN2JjOTQ0N2FjYTQ1N2FjYjQ2NzljYzQ3NzhjYzQ5NzdjZDRhNzZjZTRiNzVjZjRjNzRkMDRkNzNkMTRlNzJkMjRmNzFkMzUxNzFkNDUyNzBkNTUzNmZkNTU0NmVkNjU1NmRkNzU2NmNkODU3NmJkOTU4NmFkYTVhNmFkYTViNjlkYjVjNjhkYzVkNjdkZDVlNjZkZTVmNjVkZTYxNjRkZjYyNjNlMDYzNjNlMTY0NjJlMjY1NjFlMjY2NjBlMzY4NWZlNDY5NWVlNTZhNWRlNTZiNWRlNjZjNWNlNzZlNWJlNzZmNWFlODcwNTllOTcxNThlOTcyNTdlYTc0NTdlYjc1NTZlYjc2NTVlYzc3NTRlZDc5NTNlZDdhNTJlZTdiNTFlZjdjNTFlZjdlNTBmMDdmNGZmMDgwNGVmMTgxNGRmMTgzNGNmMjg0NGJmMzg1NGJmMzg3NGFmNDg4NDlmNDg5NDhmNThiNDdmNThjNDZmNjhkNDVmNjhmNDRmNzkwNDRmNzkxNDNmNzkzNDJmODk0NDFmODk1NDBmOTk3M2ZmOTk4M2VmOTlhM2VmYTliM2RmYTljM2NmYTllM2JmYjlmM2FmYmExMzlmYmEyMzhmY2EzMzhmY2E1MzdmY2E2MzZmY2E4MzVmY2E5MzRmZGFiMzNmZGFjMzNmZGFlMzJmZGFmMzFmZGIxMzBmZGIyMmZmZGI0MmZmZGI1MmVmZWI3MmRmZWI4MmNmZWJhMmNmZWJiMmJmZWJkMmFmZWJlMmFmZWMwMjlmZGMyMjlmZGMzMjhmZGM1MjdmZGM2MjdmZGM4MjdmZGNhMjZmZGNiMjZmY2NkMjVmY2NlMjVmY2QwMjVmY2QyMjVmYmQzMjRmYmQ1MjRmYmQ3MjRmYWQ4MjRmYWRhMjRmOWRjMjRmOWRkMjVmOGRmMjVmOGUxMjVmN2UyMjVmN2U0MjVmNmU2MjZmNmU4MjZmNWU5MjZmNWViMjdmNGVkMjdmM2VlMjdmM2YwMjdmMmYyMjdmMWY0MjZmMWY1MjVmMGY3MjRmMGY5MjEiKSl9KTtmdW5jdGlvbiBpNyhlKXt2YXIgdD0wLHI9MSxuPSExO2Z1bmN0aW9uIGkobyl7dmFyIGE9KG8tdCkvKHItdCk7cmV0dXJuIGUobj9NYXRoLm1heCgwLE1hdGgubWluKDEsYSkpOmEpfXJldHVybiBpLmRvbWFpbj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rb1swXSxyPStvWzFdLGkpOlt0LHJdfSxpLmNsYW1wPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEhbyxpKTpufSxpLmludGVycG9sYXRvcj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1vLGkpOmV9LGkuY29weT1mdW5jdGlvbigpe3JldHVybiBpNyhlKS5kb21haW4oW3Qscl0pLmNsYW1wKG4pfSxhZChpKX12YXIgUjd0PU0oKCk9PntwdygpfSk7dmFyIE43dD1NKCgpPT57ak50KCk7ZU90KCk7cHcoKTtvT3QoKTt4dHQoKTtzT3QoKTtsT3QoKTtjT3QoKTt1T3QoKTtmZXQoKTtwN3QoKTttN3QoKTtfN3QoKTt2N3QoKTtiN3QoKTtTN3QoKTtDN3QoKTtrN3QoKTtSN3QoKX0pO3ZhciBvNyxFQyxhNz1NKCgpPT57bzc9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLEVDPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpvNyx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9fSk7ZnVuY3Rpb24gTXcoZSl7dmFyIHQ9ZSs9IiIscj10LmluZGV4T2YoIjoiKTtyZXR1cm4gcj49MCYmKHQ9ZS5zbGljZSgwLHIpKSE9PSJ4bWxucyImJihlPWUuc2xpY2UocisxKSksRUMuaGFzT3duUHJvcGVydHkodCk/e3NwYWNlOkVDW3RdLGxvY2FsOmV9OmV9dmFyIHM3PU0oKCk9PnthNygpfSk7ZnVuY3Rpb24gQTllKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMub3duZXJEb2N1bWVudCxyPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiByPT09bzcmJnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PW83P3QuY3JlYXRlRWxlbWVudChlKTp0LmNyZWF0ZUVsZW1lbnROUyhyLGUpfX1mdW5jdGlvbiBQOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZS5zcGFjZSxlLmxvY2FsKX19ZnVuY3Rpb24gRGcoZSl7dmFyIHQ9TXcoZSk7cmV0dXJuKHQubG9jYWw/UDllOkE5ZSkodCl9dmFyIFRDPU0oKCk9PntzNygpO2E3KCl9KTtmdW5jdGlvbiBJOWUoKXt9ZnVuY3Rpb24gRXcoZSl7cmV0dXJuIGU9PW51bGw/STllOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihlKX19dmFyIGw3PU0oKCk9Pnt9KTtmdW5jdGlvbiBEN3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPUV3KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09bmV3IEFycmF5KGEpLGwsYyx1PTA7dTxhOysrdSkobD1vW3VdKSYmKGM9ZS5jYWxsKGwsbC5fX2RhdGFfXyx1LG8pKSYmKCJfX2RhdGFfXyJpbiBsJiYoYy5fX2RhdGFfXz1sLl9fZGF0YV9fKSxzW3VdPWMpO3JldHVybiBuZXcgSG4obix0aGlzLl9wYXJlbnRzKX12YXIgTzd0PU0oKCk9PntTYygpO2w3KCl9KTtmdW5jdGlvbiBMOWUoKXtyZXR1cm5bXX1mdW5jdGlvbiBjNyhlKXtyZXR1cm4gZT09bnVsbD9MOWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGUpfX12YXIgcGV0PU0oKCk9Pnt9KTtmdW5jdGlvbiB6N3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPWM3KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1bXSxpPVtdLG89MDtvPHI7KytvKWZvcih2YXIgYT10W29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYykobD1hW2NdKSYmKG4ucHVzaChlLmNhbGwobCxsLl9fZGF0YV9fLGMsYSkpLGkucHVzaChsKSk7cmV0dXJuIG5ldyBIbihuLGkpfXZhciBGN3Q9TSgoKT0+e1NjKCk7cGV0KCl9KTt2YXIgSDd0LFR3LEI3dCx1NyxkZXQ9TSgoKT0+e0g3dD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKGUpfX07dHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmKFR3PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxUdy5tYXRjaGVzfHwoQjd0PVR3LndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8VHcubXNNYXRjaGVzU2VsZWN0b3J8fFR3Lm1vek1hdGNoZXNTZWxlY3Rvcnx8VHcub01hdGNoZXNTZWxlY3RvcixIN3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEI3dC5jYWxsKHRoaXMsZSl9fSkpO3U3PUg3dH0pO2Z1bmN0aW9uIFY3dChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9dTcoZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSlmb3IodmFyIG89dFtpXSxhPW8ubGVuZ3RoLHM9bltpXT1bXSxsLGM9MDtjPGE7KytjKShsPW9bY10pJiZlLmNhbGwobCxsLl9fZGF0YV9fLGMsbykmJnMucHVzaChsKTtyZXR1cm4gbmV3IEhuKG4sdGhpcy5fcGFyZW50cyl9dmFyIFU3dD1NKCgpPT57U2MoKTtkZXQoKX0pO2Z1bmN0aW9uIGg3KGUpe3JldHVybiBuZXcgQXJyYXkoZS5sZW5ndGgpfXZhciBtZXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHE3dCgpe3JldHVybiBuZXcgSG4odGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoaDcpLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIENDKGUsdCl7dGhpcy5vd25lckRvY3VtZW50PWUub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1lLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PWUsdGhpcy5fX2RhdGFfXz10fXZhciBnZXQ9TSgoKT0+e21ldCgpO1NjKCk7Q0MucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpDQyxhcHBlbmRDaGlsZDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShlLHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShlLHQpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvcihlKX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZSl9fX0pO2Z1bmN0aW9uIEc3dChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIFc3dD1NKCgpPT57fSk7ZnVuY3Rpb24gazllKGUsdCxyLG4saSxvKXtmb3IodmFyIGE9MCxzLGw9dC5sZW5ndGgsYz1vLmxlbmd0aDthPGM7KythKShzPXRbYV0pPyhzLl9fZGF0YV9fPW9bYV0sblthXT1zKTpyW2FdPW5ldyBDQyhlLG9bYV0pO2Zvcig7YTxsOysrYSkocz10W2FdKSYmKGlbYV09cyl9ZnVuY3Rpb24gUjllKGUsdCxyLG4saSxvLGEpe3ZhciBzLGwsYz17fSx1PXQubGVuZ3RoLGg9by5sZW5ndGgsZj1uZXcgQXJyYXkodSkscDtmb3Iocz0wO3M8dTsrK3MpKGw9dFtzXSkmJihmW3NdPXA9WTd0K2EuY2FsbChsLGwuX19kYXRhX18scyx0KSxwIGluIGM/aVtzXT1sOmNbcF09bCk7Zm9yKHM9MDtzPGg7KytzKXA9WTd0K2EuY2FsbChlLG9bc10scyxvKSwobD1jW3BdKT8obltzXT1sLGwuX19kYXRhX189b1tzXSxjW3BdPW51bGwpOnJbc109bmV3IENDKGUsb1tzXSk7Zm9yKHM9MDtzPHU7KytzKShsPXRbc10pJiZjW2Zbc11dPT09bCYmKGlbc109bCl9ZnVuY3Rpb24gajd0KGUsdCl7aWYoIWUpcmV0dXJuIHA9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxjPS0xLHRoaXMuZWFjaChmdW5jdGlvbihQKXtwWysrY109UH0pLHA7dmFyIHI9dD9SOWU6azllLG49dGhpcy5fcGFyZW50cyxpPXRoaXMuX2dyb3Vwczt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9Rzd0KGUpKTtmb3IodmFyIG89aS5sZW5ndGgsYT1uZXcgQXJyYXkobykscz1uZXcgQXJyYXkobyksbD1uZXcgQXJyYXkobyksYz0wO2M8bzsrK2Mpe3ZhciB1PW5bY10saD1pW2NdLGY9aC5sZW5ndGgscD1lLmNhbGwodSx1JiZ1Ll9fZGF0YV9fLGMsbiksZD1wLmxlbmd0aCxnPXNbY109bmV3IEFycmF5KGQpLF89YVtjXT1uZXcgQXJyYXkoZCkseT1sW2NdPW5ldyBBcnJheShmKTtyKHUsaCxnLF8seSxwLHQpO2Zvcih2YXIgeD0wLGI9MCxTLEM7eDxkOysreClpZihTPWdbeF0pe2Zvcih4Pj1iJiYoYj14KzEpOyEoQz1fW2JdKSYmKytiPGQ7KTtTLl9uZXh0PUN8fG51bGx9fXJldHVybiBhPW5ldyBIbihhLG4pLGEuX2VudGVyPXMsYS5fZXhpdD1sLGF9dmFyIFk3dCxYN3Q9TSgoKT0+e1NjKCk7Z2V0KCk7Vzd0KCk7WTd0PSIkIn0pO2Z1bmN0aW9uICQ3dCgpe3JldHVybiBuZXcgSG4odGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChoNyksdGhpcy5fcGFyZW50cyl9dmFyIEs3dD1NKCgpPT57bWV0KCk7U2MoKX0pO2Z1bmN0aW9uIFo3dChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgSG4oYSx0aGlzLl9wYXJlbnRzKX12YXIgSjd0PU0oKCk9PntTYygpfSk7ZnVuY3Rpb24gUTd0KCl7Zm9yKHZhciBlPXRoaXMuX2dyb3Vwcyx0PS0xLHI9ZS5sZW5ndGg7Kyt0PHI7KWZvcih2YXIgbj1lW3RdLGk9bi5sZW5ndGgtMSxvPW5baV0sYTstLWk+PTA7KShhPW5baV0pJiYobyYmbyE9PWEubmV4dFNpYmxpbmcmJm8ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSxvKSxvPWEpO3JldHVybiB0aGlzfXZhciB0enQ9TSgoKT0+e30pO2Z1bmN0aW9uIGV6dChlKXtlfHwoZT1OOWUpO2Z1bmN0aW9uIHQoaCxmKXtyZXR1cm4gaCYmZj9lKGguX19kYXRhX18sZi5fX2RhdGFfXyk6IWgtIWZ9Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxuPXIubGVuZ3RoLGk9bmV3IEFycmF5KG4pLG89MDtvPG47KytvKXtmb3IodmFyIGE9cltvXSxzPWEubGVuZ3RoLGw9aVtvXT1uZXcgQXJyYXkocyksYyx1PTA7dTxzOysrdSkoYz1hW3VdKSYmKGxbdV09Yyk7bC5zb3J0KHQpfXJldHVybiBuZXcgSG4oaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfWZ1bmN0aW9uIE45ZShlLHQpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn12YXIgcnp0PU0oKCk9PntTYygpfSk7ZnVuY3Rpb24gbnp0KCl7dmFyIGU9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxlLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfXZhciBpenQ9TSgoKT0+e30pO2Z1bmN0aW9uIG96dCgpe3ZhciBlPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdD0tMTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZVsrK3RdPXRoaXN9KSxlfXZhciBhenQ9TSgoKT0+e30pO2Z1bmN0aW9uIHN6dCgpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsdD0wLHI9ZS5sZW5ndGg7dDxyOysrdClmb3IodmFyIG49ZVt0XSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKXt2YXIgYT1uW2ldO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9dmFyIGx6dD1NKCgpPT57fSk7ZnVuY3Rpb24gY3p0KCl7dmFyIGU9MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytlfSksZX12YXIgdXp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBoenQoKXtyZXR1cm4hdGhpcy5ub2RlKCl9dmFyIGZ6dD1NKCgpPT57fSk7ZnVuY3Rpb24gcHp0KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxvPTAsYT1pLmxlbmd0aCxzO288YTsrK28pKHM9aVtvXSkmJmUuY2FsbChzLHMuX19kYXRhX18sbyxpKTtyZXR1cm4gdGhpc312YXIgZHp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBEOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSl9fWZ1bmN0aW9uIE85ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIHo5ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKGUsdCl9fWZ1bmN0aW9uIEY5ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQpfX1mdW5jdGlvbiBCOWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpOnRoaXMuc2V0QXR0cmlidXRlKGUscil9fWZ1bmN0aW9uIEg5ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHIpfX1mdW5jdGlvbiBtenQoZSx0KXt2YXIgcj1NdyhlKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBuPXRoaXMubm9kZSgpO3JldHVybiByLmxvY2FsP24uZ2V0QXR0cmlidXRlTlMoci5zcGFjZSxyLmxvY2FsKTpuLmdldEF0dHJpYnV0ZShyKX1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP3IubG9jYWw/TzllOkQ5ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9yLmxvY2FsP0g5ZTpCOWU6ci5sb2NhbD9GOWU6ejllKShyLHQpKX12YXIgZ3p0PU0oKCk9PntzNygpfSk7ZnVuY3Rpb24gQ3coZSl7cmV0dXJuIGUub3duZXJEb2N1bWVudCYmZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHxlLmRvY3VtZW50JiZlfHxlLmRlZmF1bHRWaWV3fXZhciBmNz1NKCgpPT57fSk7ZnVuY3Rpb24gVjllKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIFU5ZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLHQscil9fWZ1bmN0aW9uIHE5ZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bj09bnVsbD90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSxuLHIpfX1mdW5jdGlvbiBfenQoZSx0LHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP1Y5ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9xOWU6VTllKShlLHQscj09bnVsbD8iIjpyKSk6X2V0KHRoaXMubm9kZSgpLGUpfWZ1bmN0aW9uIF9ldChlLHQpe3JldHVybiBlLnN0eWxlLmdldFByb3BlcnR5VmFsdWUodCl8fEN3KGUpLmdldENvbXB1dGVkU3R5bGUoZSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHQpfXZhciB5ZXQ9TSgoKT0+e2Y3KCl9KTtmdW5jdGlvbiBHOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbZV19fWZ1bmN0aW9uIFc5ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbZV09dH19ZnVuY3Rpb24gWTllKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD9kZWxldGUgdGhpc1tlXTp0aGlzW2VdPXJ9fWZ1bmN0aW9uIHl6dChlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP0c5ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9ZOWU6VzllKShlLHQpKTp0aGlzLm5vZGUoKVtlXX12YXIgdnp0PU0oKCk9Pnt9KTtmdW5jdGlvbiB4enQoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIHZldChlKXtyZXR1cm4gZS5jbGFzc0xpc3R8fG5ldyBienQoZSl9ZnVuY3Rpb24gYnp0KGUpe3RoaXMuX25vZGU9ZSx0aGlzLl9uYW1lcz14enQoZS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiB3enQoZSx0KXtmb3IodmFyIHI9dmV0KGUpLG49LTEsaT10Lmxlbmd0aDsrK248aTspci5hZGQodFtuXSl9ZnVuY3Rpb24gU3p0KGUsdCl7Zm9yKHZhciByPXZldChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIucmVtb3ZlKHRbbl0pfWZ1bmN0aW9uIGo5ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt3enQodGhpcyxlKX19ZnVuY3Rpb24gWDllKGUpe3JldHVybiBmdW5jdGlvbigpe1N6dCh0aGlzLGUpfX1mdW5jdGlvbiAkOWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXsodC5hcHBseSh0aGlzLGFyZ3VtZW50cyk/d3p0OlN6dCkodGhpcyxlKX19ZnVuY3Rpb24gTXp0KGUsdCl7dmFyIHI9eHp0KGUrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPXZldCh0aGlzLm5vZGUoKSksaT0tMSxvPXIubGVuZ3RoOysraTxvOylpZighbi5jb250YWlucyhyW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj8kOWU6dD9qOWU6WDllKShyLHQpKX12YXIgRXp0PU0oKCk9PntienQucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihlKTt0PDAmJih0aGlzLl9uYW1lcy5wdXNoKGUpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UodCwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihlKT49MH19fSk7ZnVuY3Rpb24gSzllKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBaOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1lfX1mdW5jdGlvbiBKOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIFR6dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD9LOWU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP0o5ZTpaOWUpKGUpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH12YXIgQ3p0PU0oKCk9Pnt9KTtmdW5jdGlvbiBROWUoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiB0TGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9ZX19ZnVuY3Rpb24gZUxlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gQXp0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsP1E5ZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/ZUxlOnRMZSkoZSkpOnRoaXMubm9kZSgpLmlubmVySFRNTH12YXIgUHp0PU0oKCk9Pnt9KTtmdW5jdGlvbiByTGUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gSXp0KCl7cmV0dXJuIHRoaXMuZWFjaChyTGUpfXZhciBMenQ9TSgoKT0+e30pO2Z1bmN0aW9uIG5MZSgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIGt6dCgpe3JldHVybiB0aGlzLmVhY2gobkxlKX12YXIgUnp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBOenQoZSl7dmFyIHQ9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpEZyhlKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX12YXIgRHp0PU0oKCk9PntUQygpfSk7ZnVuY3Rpb24gaUxlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gT3p0KGUsdCl7dmFyIHI9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpEZyhlKSxuPXQ9PW51bGw/aUxlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6RXcodCk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKHIuYXBwbHkodGhpcyxhcmd1bWVudHMpLG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfXZhciB6enQ9TSgoKT0+e1RDKCk7bDcoKX0pO2Z1bmN0aW9uIG9MZSgpe3ZhciBlPXRoaXMucGFyZW50Tm9kZTtlJiZlLnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIEZ6dCgpe3JldHVybiB0aGlzLmVhY2gob0xlKX12YXIgQnp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBhTGUoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLmNsb25lTm9kZSghMSksdGhpcy5uZXh0U2libGluZyl9ZnVuY3Rpb24gc0xlKCl7cmV0dXJuIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5jbG9uZU5vZGUoITApLHRoaXMubmV4dFNpYmxpbmcpfWZ1bmN0aW9uIEh6dChlKXtyZXR1cm4gdGhpcy5zZWxlY3QoZT9zTGU6YUxlKX12YXIgVnp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBVenQoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLGUpOnRoaXMubm9kZSgpLl9fZGF0YV9ffXZhciBxenQ9TSgoKT0+e30pO2Z1bmN0aW9uIGxMZShlLHQscil7cmV0dXJuIGU9WXp0KGUsdCxyKSxmdW5jdGlvbihuKXt2YXIgaT1uLnJlbGF0ZWRUYXJnZXQ7KCFpfHxpIT09dGhpcyYmIShpLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRoaXMpJjgpKSYmZS5jYWxsKHRoaXMsbil9fWZ1bmN0aW9uIFl6dChlLHQscil7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpPVB1O1B1PW47dHJ5e2UuY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sdCxyKX1maW5hbGx5e1B1PWl9fX1mdW5jdGlvbiBjTGUoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbih0KXt2YXIgcj0iIixuPXQuaW5kZXhPZigiLiIpO3JldHVybiBuPj0wJiYocj10LnNsaWNlKG4rMSksdD10LnNsaWNlKDAsbikpLHt0eXBlOnQsbmFtZTpyfX0pfWZ1bmN0aW9uIHVMZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9fb247aWYoISF0KXtmb3IodmFyIHI9MCxuPS0xLGk9dC5sZW5ndGgsbztyPGk7KytyKW89dFtyXSwoIWUudHlwZXx8by50eXBlPT09ZS50eXBlKSYmby5uYW1lPT09ZS5uYW1lP3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihvLnR5cGUsby5saXN0ZW5lcixvLmNhcHR1cmUpOnRbKytuXT1vOysrbj90Lmxlbmd0aD1uOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiBoTGUoZSx0LHIpe3ZhciBuPVd6dC5oYXNPd25Qcm9wZXJ0eShlLnR5cGUpP2xMZTpZenQ7cmV0dXJuIGZ1bmN0aW9uKGksbyxhKXt2YXIgcz10aGlzLl9fb24sbCxjPW4odCxvLGEpO2lmKHMpe2Zvcih2YXIgdT0wLGg9cy5sZW5ndGg7dTxoOysrdSlpZigobD1zW3VdKS50eXBlPT09ZS50eXBlJiZsLm5hbWU9PT1lLm5hbWUpe3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcixsLmNhcHR1cmUpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcj1jLGwuY2FwdHVyZT1yKSxsLnZhbHVlPXQ7cmV0dXJufX10aGlzLmFkZEV2ZW50TGlzdGVuZXIoZS50eXBlLGMsciksbD17dHlwZTplLnR5cGUsbmFtZTplLm5hbWUsdmFsdWU6dCxsaXN0ZW5lcjpjLGNhcHR1cmU6cn0scz9zLnB1c2gobCk6dGhpcy5fX29uPVtsXX19ZnVuY3Rpb24ganp0KGUsdCxyKXt2YXIgbj1jTGUoZSsiIiksaSxvPW4ubGVuZ3RoLGE7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgcz10aGlzLm5vZGUoKS5fX29uO2lmKHMpe2Zvcih2YXIgbD0wLGM9cy5sZW5ndGgsdTtsPGM7KytsKWZvcihpPTAsdT1zW2xdO2k8bzsrK2kpaWYoKGE9bltpXSkudHlwZT09PXUudHlwZSYmYS5uYW1lPT09dS5uYW1lKXJldHVybiB1LnZhbHVlfXJldHVybn1mb3Iocz10P2hMZTp1TGUscj09bnVsbCYmKHI9ITEpLGk9MDtpPG87KytpKXRoaXMuZWFjaChzKG5baV0sdCxyKSk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gWHp0KGUsdCxyLG4pe3ZhciBpPVB1O2Uuc291cmNlRXZlbnQ9UHUsUHU9ZTt0cnl7cmV0dXJuIHQuYXBwbHkocixuKX1maW5hbGx5e1B1PWl9fXZhciBXenQsUHUsR3p0LHA3PU0oKCk9PntXenQ9e30sUHU9bnVsbDt0eXBlb2YgZG9jdW1lbnQhPSJ1bmRlZmluZWQiJiYoR3p0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwib25tb3VzZWVudGVyImluIEd6dHx8KFd6dD17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KSl9KTtmdW5jdGlvbiAkenQoZSx0LHIpe3ZhciBuPUN3KGUpLGk9bi5DdXN0b21FdmVudDt0eXBlb2YgaT09ImZ1bmN0aW9uIj9pPW5ldyBpKHQscik6KGk9bi5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxyPyhpLmluaXRFdmVudCh0LHIuYnViYmxlcyxyLmNhbmNlbGFibGUpLGkuZGV0YWlsPXIuZGV0YWlsKTppLmluaXRFdmVudCh0LCExLCExKSksZS5kaXNwYXRjaEV2ZW50KGkpfWZ1bmN0aW9uIGZMZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiAkenQodGhpcyxlLHQpfX1mdW5jdGlvbiBwTGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gJHp0KHRoaXMsZSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fWZ1bmN0aW9uIEt6dChlLHQpe3JldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP3BMZTpmTGUpKGUsdCkpfXZhciBaenQ9TSgoKT0+e2Y3KCl9KTtmdW5jdGlvbiBIbihlLHQpe3RoaXMuX2dyb3Vwcz1lLHRoaXMuX3BhcmVudHM9dH1mdW5jdGlvbiBKenQoKXtyZXR1cm4gbmV3IEhuKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sQUMpfXZhciBBQyxRenQsU2M9TSgoKT0+e083dCgpO0Y3dCgpO1U3dCgpO1g3dCgpO2dldCgpO0s3dCgpO0o3dCgpO3R6dCgpO3J6dCgpO2l6dCgpO2F6dCgpO2x6dCgpO3V6dCgpO2Z6dCgpO2R6dCgpO2d6dCgpO3lldCgpO3Z6dCgpO0V6dCgpO0N6dCgpO1B6dCgpO0x6dCgpO1J6dCgpO0R6dCgpO3p6dCgpO0J6dCgpO1Z6dCgpO3F6dCgpO3A3KCk7Wnp0KCk7QUM9W251bGxdO0huLnByb3RvdHlwZT1KenQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpIbixzZWxlY3Q6RDd0LHNlbGVjdEFsbDp6N3QsZmlsdGVyOlY3dCxkYXRhOmo3dCxlbnRlcjpxN3QsZXhpdDokN3QsbWVyZ2U6Wjd0LG9yZGVyOlE3dCxzb3J0OmV6dCxjYWxsOm56dCxub2RlczpvenQsbm9kZTpzenQsc2l6ZTpjenQsZW1wdHk6aHp0LGVhY2g6cHp0LGF0dHI6bXp0LHN0eWxlOl96dCxwcm9wZXJ0eTp5enQsY2xhc3NlZDpNenQsdGV4dDpUenQsaHRtbDpBenQscmFpc2U6SXp0LGxvd2VyOmt6dCxhcHBlbmQ6Tnp0LGluc2VydDpPenQscmVtb3ZlOkZ6dCxjbG9uZTpIenQsZGF0dW06VXp0LG9uOmp6dCxkaXNwYXRjaDpLenR9O1F6dD1KenR9KTtmdW5jdGlvbiBkNyhlKXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciP25ldyBIbihbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IEhuKFtbZV1dLEFDKX12YXIgeGV0PU0oKCk9PntTYygpfSk7ZnVuY3Rpb24gdEZ0KGUpe3JldHVybiBkNyhEZyhlKS5jYWxsKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkpfXZhciBlRnQ9TSgoKT0+e1RDKCk7eGV0KCl9KTtmdW5jdGlvbiBtNygpe3JldHVybiBuZXcgYmV0fWZ1bmN0aW9uIGJldCgpe3RoaXMuXz0iQCIrKCsrZExlKS50b1N0cmluZygzNil9dmFyIGRMZSxyRnQ9TSgoKT0+e2RMZT0wO2JldC5wcm90b3R5cGU9bTcucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpiZXQsZ2V0OmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLl87ISh0IGluIGUpOylpZighKGU9ZS5wYXJlbnROb2RlKSlyZXR1cm47cmV0dXJuIGVbdF19LHNldDpmdW5jdGlvbihlLHQpe3JldHVybiBlW3RoaXMuX109dH0scmVtb3ZlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl8gaW4gZSYmZGVsZXRlIGVbdGhpcy5fXX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX19KTtmdW5jdGlvbiBBdygpe2Zvcih2YXIgZT1QdSx0O3Q9ZS5zb3VyY2VFdmVudDspZT10O3JldHVybiBlfXZhciBnNz1NKCgpPT57cDcoKX0pO2Z1bmN0aW9uIE9nKGUsdCl7dmFyIHI9ZS5vd25lclNWR0VsZW1lbnR8fGU7aWYoci5jcmVhdGVTVkdQb2ludCl7dmFyIG49ci5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBuLng9dC5jbGllbnRYLG4ueT10LmNsaWVudFksbj1uLm1hdHJpeFRyYW5zZm9ybShlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSksW24ueCxuLnldfXZhciBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW3QuY2xpZW50WC1pLmxlZnQtZS5jbGllbnRMZWZ0LHQuY2xpZW50WS1pLnRvcC1lLmNsaWVudFRvcF19dmFyIFBDPU0oKCk9Pnt9KTtmdW5jdGlvbiBuRnQoZSl7dmFyIHQ9QXcoKTtyZXR1cm4gdC5jaGFuZ2VkVG91Y2hlcyYmKHQ9dC5jaGFuZ2VkVG91Y2hlc1swXSksT2coZSx0KX12YXIgaUZ0PU0oKCk9PntnNygpO1BDKCl9KTtmdW5jdGlvbiBvRnQoZSl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIj9uZXcgSG4oW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZSldLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgSG4oW2U9PW51bGw/W106ZV0sQUMpfXZhciBhRnQ9TSgoKT0+e1NjKCl9KTtmdW5jdGlvbiBzRnQoZSx0LHIpe2FyZ3VtZW50cy5sZW5ndGg8MyYmKHI9dCx0PUF3KCkuY2hhbmdlZFRvdWNoZXMpO2Zvcih2YXIgbj0wLGk9dD90Lmxlbmd0aDowLG87bjxpOysrbilpZigobz10W25dKS5pZGVudGlmaWVyPT09cilyZXR1cm4gT2coZSxvKTtyZXR1cm4gbnVsbH12YXIgbEZ0PU0oKCk9PntnNygpO1BDKCl9KTtmdW5jdGlvbiBjRnQoZSx0KXt0PT1udWxsJiYodD1BdygpLnRvdWNoZXMpO2Zvcih2YXIgcj0wLG49dD90Lmxlbmd0aDowLGk9bmV3IEFycmF5KG4pO3I8bjsrK3IpaVtyXT1PZyhlLHRbcl0pO3JldHVybiBpfXZhciB1RnQ9TSgoKT0+e2c3KCk7UEMoKX0pO3ZhciBoRnQ9TSgoKT0+e2VGdCgpO1RDKCk7ckZ0KCk7ZGV0KCk7aUZ0KCk7czcoKTthNygpO1BDKCk7eGV0KCk7YUZ0KCk7U2MoKTtsNygpO3BldCgpO3lldCgpO2xGdCgpO3VGdCgpO2Y3KCk7cDcoKX0pO2Z1bmN0aW9uIEVldCgpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIifWZ1bmN0aW9uIGZGdCgpe3JldHVybiBuZXcgRWV0fXZhciB3ZXQsTWV0LGh2LG1MZSxJdSxwRnQ9TSgoKT0+e3dldD1NYXRoLlBJLE1ldD0yKndldCxodj0xZS02LG1MZT1NZXQtaHY7RWV0LnByb3RvdHlwZT1mRnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpFZXQsbW92ZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPSt0KX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5feDEhPT1udWxsJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSxsaW5lVG86ZnVuY3Rpb24oZSx0KXt0aGlzLl8rPSJMIisodGhpcy5feDE9K2UpKyIsIisodGhpcy5feTE9K3QpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKGUsdCxyLG4pe3RoaXMuXys9IlEiKyArZSsiLCIrICt0KyIsIisodGhpcy5feDE9K3IpKyIsIisodGhpcy5feTE9K24pfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKGUsdCxyLG4saSxvKXt0aGlzLl8rPSJDIisgK2UrIiwiKyArdCsiLCIrICtyKyIsIisgK24rIiwiKyh0aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MT0rbyl9LGFyY1RvOmZ1bmN0aW9uKGUsdCxyLG4saSl7ZT0rZSx0PSt0LHI9K3Isbj0rbixpPStpO3ZhciBvPXRoaXMuX3gxLGE9dGhpcy5feTEscz1yLWUsbD1uLXQsYz1vLWUsdT1hLXQsaD1jKmMrdSp1O2lmKGk8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIitpKTtpZih0aGlzLl94MT09PW51bGwpdGhpcy5fKz0iTSIrKHRoaXMuX3gxPWUpKyIsIisodGhpcy5feTE9dCk7ZWxzZSBpZihoPmh2KWlmKCEoTWF0aC5hYnModSpzLWwqYyk+aHYpfHwhaSl0aGlzLl8rPSJMIisodGhpcy5feDE9ZSkrIiwiKyh0aGlzLl95MT10KTtlbHNle3ZhciBmPXItbyxwPW4tYSxkPXMqcytsKmwsZz1mKmYrcCpwLF89TWF0aC5zcXJ0KGQpLHk9TWF0aC5zcXJ0KGgpLHg9aSpNYXRoLnRhbigod2V0LU1hdGguYWNvcygoZCtoLWcpLygyKl8qeSkpKS8yKSxiPXgveSxTPXgvXztNYXRoLmFicyhiLTEpPmh2JiYodGhpcy5fKz0iTCIrKGUrYipjKSsiLCIrKHQrYip1KSksdGhpcy5fKz0iQSIraSsiLCIraSsiLDAsMCwiKyArKHUqZj5jKnApKyIsIisodGhpcy5feDE9ZStTKnMpKyIsIisodGhpcy5feTE9dCtTKmwpfX0sYXJjOmZ1bmN0aW9uKGUsdCxyLG4saSxvKXtlPStlLHQ9K3Qscj0rcixvPSEhbzt2YXIgYT1yKk1hdGguY29zKG4pLHM9cipNYXRoLnNpbihuKSxsPWUrYSxjPXQrcyx1PTFebyxoPW8/bi1pOmktbjtpZihyPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrcik7dGhpcy5feDE9PT1udWxsP3RoaXMuXys9Ik0iK2wrIiwiK2M6KE1hdGguYWJzKHRoaXMuX3gxLWwpPmh2fHxNYXRoLmFicyh0aGlzLl95MS1jKT5odikmJih0aGlzLl8rPSJMIitsKyIsIitjKSxyJiYoaDwwJiYoaD1oJU1ldCtNZXQpLGg+bUxlP3RoaXMuXys9IkEiK3IrIiwiK3IrIiwwLDEsIit1KyIsIisoZS1hKSsiLCIrKHQtcykrIkEiK3IrIiwiK3IrIiwwLDEsIit1KyIsIisodGhpcy5feDE9bCkrIiwiKyh0aGlzLl95MT1jKTpoPmh2JiYodGhpcy5fKz0iQSIrcisiLCIrcisiLDAsIisgKyhoPj13ZXQpKyIsIit1KyIsIisodGhpcy5feDE9ZStyKk1hdGguY29zKGkpKSsiLCIrKHRoaXMuX3kxPXQrcipNYXRoLnNpbihpKSkpKX0scmVjdDpmdW5jdGlvbihlLHQscixuKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2UpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K3QpKyJoIisgK3IrInYiKyArbisiaCIrLXIrIloifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTtJdT1mRnR9KTt2YXIgUHc9TSgoKT0+e3BGdCgpfSk7ZnVuY3Rpb24gR2UoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciB6Zz1NKCgpPT57fSk7ZnVuY3Rpb24gbUZ0KGUpe3JldHVybiBlPjE/MDplPC0xP2t1Ok1hdGguYWNvcyhlKX1mdW5jdGlvbiBDZXQoZSl7cmV0dXJuIGU+PTE/SUM6ZTw9LTE/LUlDOk1hdGguYXNpbihlKX12YXIgVGV0LEhvLEZnLGRGdCxfNyxMdSxmdixDbyxrdSxJQyxNYyxJdz1NKCgpPT57VGV0PU1hdGguYWJzLEhvPU1hdGguYXRhbjIsRmc9TWF0aC5jb3MsZEZ0PU1hdGgubWF4LF83PU1hdGgubWluLEx1PU1hdGguc2luLGZ2PU1hdGguc3FydCxDbz0xZS0xMixrdT1NYXRoLlBJLElDPWt1LzIsTWM9MiprdX0pO2Z1bmN0aW9uIGdMZShlKXtyZXR1cm4gZS5pbm5lclJhZGl1c31mdW5jdGlvbiBfTGUoZSl7cmV0dXJuIGUub3V0ZXJSYWRpdXN9ZnVuY3Rpb24geUxlKGUpe3JldHVybiBlLnN0YXJ0QW5nbGV9ZnVuY3Rpb24gdkxlKGUpe3JldHVybiBlLmVuZEFuZ2xlfWZ1bmN0aW9uIHhMZShlKXtyZXR1cm4gZSYmZS5wYWRBbmdsZX1mdW5jdGlvbiBiTGUoZSx0LHIsbixpLG8sYSxzKXt2YXIgbD1yLWUsYz1uLXQsdT1hLWksaD1zLW8sZj0odSoodC1vKS1oKihlLWkpKS8oaCpsLXUqYyk7cmV0dXJuW2UrZipsLHQrZipjXX1mdW5jdGlvbiB5NyhlLHQscixuLGksbyxhKXt2YXIgcz1lLXIsbD10LW4sYz0oYT9vOi1vKS9mdihzKnMrbCpsKSx1PWMqbCxoPS1jKnMsZj1lK3UscD10K2gsZD1yK3UsZz1uK2gsXz0oZitkKS8yLHk9KHArZykvMix4PWQtZixiPWctcCxTPXgqeCtiKmIsQz1pLW8sUD1mKmctZCpwLGs9KGI8MD8tMToxKSpmdihkRnQoMCxDKkMqUy1QKlApKSxPPShQKmIteCprKS9TLEQ9KC1QKngtYiprKS9TLEI9KFAqYit4KmspL1MsST0oLVAqeCtiKmspL1MsTD1PLV8sUj1ELXksRj1CLV8sej1JLXk7cmV0dXJuIEwqTCtSKlI+RipGK3oqeiYmKE89QixEPUkpLHtjeDpPLGN5OkQseDAxOi11LHkwMTotaCx4MTE6TyooaS9DLTEpLHkxMTpEKihpL0MtMSl9fWZ1bmN0aW9uIGdGdCgpe3ZhciBlPWdMZSx0PV9MZSxyPUdlKDApLG49bnVsbCxpPXlMZSxvPXZMZSxhPXhMZSxzPW51bGw7ZnVuY3Rpb24gbCgpe3ZhciBjLHUsaD0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksZj0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cykscD1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1JQyxkPW8uYXBwbHkodGhpcyxhcmd1bWVudHMpLUlDLGc9VGV0KGQtcCksXz1kPnA7aWYoc3x8KHM9Yz1JdSgpKSxmPGgmJih1PWYsZj1oLGg9dSksIShmPkNvKSlzLm1vdmVUbygwLDApO2Vsc2UgaWYoZz5NYy1DbylzLm1vdmVUbyhmKkZnKHApLGYqTHUocCkpLHMuYXJjKDAsMCxmLHAsZCwhXyksaD5DbyYmKHMubW92ZVRvKGgqRmcoZCksaCpMdShkKSkscy5hcmMoMCwwLGgsZCxwLF8pKTtlbHNle3ZhciB5PXAseD1kLGI9cCxTPWQsQz1nLFA9ZyxrPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpLzIsTz1rPkNvJiYobj8rbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZnYoaCpoK2YqZikpLEQ9XzcoVGV0KGYtaCkvMiwrci5hcHBseSh0aGlzLGFyZ3VtZW50cykpLEI9RCxJPUQsTCxSO2lmKE8+Q28pe3ZhciBGPUNldChPL2gqTHUoaykpLHo9Q2V0KE8vZipMdShrKSk7KEMtPUYqMik+Q28/KEYqPV8/MTotMSxiKz1GLFMtPUYpOihDPTAsYj1TPShwK2QpLzIpLChQLT16KjIpPkNvPyh6Kj1fPzE6LTEseSs9eix4LT16KTooUD0wLHk9eD0ocCtkKS8yKX12YXIgVT1mKkZnKHkpLFc9ZipMdSh5KSxaPWgqRmcoUykscnQ9aCpMdShTKTtpZihEPkNvKXt2YXIgb3Q9ZipGZyh4KSxzdD1mKkx1KHgpLFN0PWgqRmcoYiksYnQ9aCpMdShiKTtpZihnPGt1KXt2YXIgTXQ9Qz5Dbz9iTGUoVSxXLFN0LGJ0LG90LHN0LFoscnQpOltaLHJ0XSxsdD1VLU10WzBdLEt0PVctTXRbMV0sX3Q9b3QtTXRbMF0sY3Q9c3QtTXRbMV0sWD0xL0x1KG1GdCgobHQqX3QrS3QqY3QpLyhmdihsdCpsdCtLdCpLdCkqZnYoX3QqX3QrY3QqY3QpKSkvMiksZXQ9ZnYoTXRbMF0qTXRbMF0rTXRbMV0qTXRbMV0pO0I9XzcoRCwoaC1ldCkvKFgtMSkpLEk9XzcoRCwoZi1ldCkvKFgrMSkpfX1QPkNvP0k+Q28/KEw9eTcoU3QsYnQsVSxXLGYsSSxfKSxSPXk3KG90LHN0LFoscnQsZixJLF8pLHMubW92ZVRvKEwuY3grTC54MDEsTC5jeStMLnkwMSksSTxEP3MuYXJjKEwuY3gsTC5jeSxJLEhvKEwueTAxLEwueDAxKSxIbyhSLnkwMSxSLngwMSksIV8pOihzLmFyYyhMLmN4LEwuY3ksSSxIbyhMLnkwMSxMLngwMSksSG8oTC55MTEsTC54MTEpLCFfKSxzLmFyYygwLDAsZixIbyhMLmN5K0wueTExLEwuY3grTC54MTEpLEhvKFIuY3krUi55MTEsUi5jeCtSLngxMSksIV8pLHMuYXJjKFIuY3gsUi5jeSxJLEhvKFIueTExLFIueDExKSxIbyhSLnkwMSxSLngwMSksIV8pKSk6KHMubW92ZVRvKFUsVykscy5hcmMoMCwwLGYseSx4LCFfKSk6cy5tb3ZlVG8oVSxXKSwhKGg+Q28pfHwhKEM+Q28pP3MubGluZVRvKFoscnQpOkI+Q28/KEw9eTcoWixydCxvdCxzdCxoLC1CLF8pLFI9eTcoVSxXLFN0LGJ0LGgsLUIsXykscy5saW5lVG8oTC5jeCtMLngwMSxMLmN5K0wueTAxKSxCPEQ/cy5hcmMoTC5jeCxMLmN5LEIsSG8oTC55MDEsTC54MDEpLEhvKFIueTAxLFIueDAxKSwhXyk6KHMuYXJjKEwuY3gsTC5jeSxCLEhvKEwueTAxLEwueDAxKSxIbyhMLnkxMSxMLngxMSksIV8pLHMuYXJjKDAsMCxoLEhvKEwuY3krTC55MTEsTC5jeCtMLngxMSksSG8oUi5jeStSLnkxMSxSLmN4K1IueDExKSxfKSxzLmFyYyhSLmN4LFIuY3ksQixIbyhSLnkxMSxSLngxMSksSG8oUi55MDEsUi54MDEpLCFfKSkpOnMuYXJjKDAsMCxoLFMsYixfKX1pZihzLmNsb3NlUGF0aCgpLGMpcmV0dXJuIHM9bnVsbCxjKyIifHxudWxsfXJldHVybiBsLmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIGM9KCtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLHU9KCtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK28uYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLWt1LzI7cmV0dXJuW0ZnKHUpKmMsTHUodSkqY119LGwuaW5uZXJSYWRpdXM9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpHZSgrYyksbCk6ZX0sbC5vdXRlclJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOkdlKCtjKSxsKTp0fSxsLmNvcm5lclJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOkdlKCtjKSxsKTpyfSxsLnBhZFJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1jPT1udWxsP251bGw6dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpHZSgrYyksbCk6bn0sbC5zdGFydEFuZ2xlPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6R2UoK2MpLGwpOml9LGwuZW5kQW5nbGU9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpHZSgrYyksbCk6b30sbC5wYWRBbmdsZT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOkdlKCtjKSxsKTphfSxsLmNvbnRleHQ9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9Yz09bnVsbD9udWxsOmMsbCk6c30sbH12YXIgX0Z0PU0oKCk9PntQdygpO3pnKCk7SXcoKX0pO2Z1bmN0aW9uIHlGdChlKXt0aGlzLl9jb250ZXh0PWV9ZnVuY3Rpb24gQmcoZSl7cmV0dXJuIG5ldyB5RnQoZSl9dmFyIExDPU0oKCk9Pnt5RnQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZT0rZSx0PSt0LHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OnRoaXMuX2NvbnRleHQubGluZVRvKGUsdCk7YnJlYWt9fX19KTtmdW5jdGlvbiBMdyhlKXtyZXR1cm4gZVswXX1mdW5jdGlvbiBrdyhlKXtyZXR1cm4gZVsxXX12YXIgdjc9TSgoKT0+e30pO2Z1bmN0aW9uIFJ3KCl7dmFyIGU9THcsdD1rdyxyPUdlKCEwKSxuPW51bGwsaT1CZyxvPW51bGw7ZnVuY3Rpb24gYShzKXt2YXIgbCxjPXMubGVuZ3RoLHUsaD0hMSxmO2ZvcihuPT1udWxsJiYobz1pKGY9SXUoKSkpLGw9MDtsPD1jOysrbCkhKGw8YyYmcih1PXNbbF0sbCxzKSk9PT1oJiYoKGg9IWgpP28ubGluZVN0YXJ0KCk6by5saW5lRW5kKCkpLGgmJm8ucG9pbnQoK2UodSxsLHMpLCt0KHUsbCxzKSk7aWYoZilyZXR1cm4gbz1udWxsLGYrIiJ8fG51bGx9cmV0dXJuIGEueD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkdlKCtzKSxhKTplfSxhLnk9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpHZSgrcyksYSk6dH0sYS5kZWZpbmVkPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6R2UoISFzKSxhKTpyfSxhLmN1cnZlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXMsbiE9bnVsbCYmKG89aShuKSksYSk6aX0sYS5jb250ZXh0PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPT1udWxsP249bz1udWxsOm89aShuPXMpLGEpOm59LGF9dmFyIHg3PU0oKCk9PntQdygpO3pnKCk7TEMoKTt2NygpfSk7ZnVuY3Rpb24gYjcoKXt2YXIgZT1Mdyx0PW51bGwscj1HZSgwKSxuPWt3LGk9R2UoITApLG89bnVsbCxhPUJnLHM9bnVsbDtmdW5jdGlvbiBsKHUpe3ZhciBoLGYscCxkPXUubGVuZ3RoLGcsXz0hMSx5LHg9bmV3IEFycmF5KGQpLGI9bmV3IEFycmF5KGQpO2ZvcihvPT1udWxsJiYocz1hKHk9SXUoKSkpLGg9MDtoPD1kOysraCl7aWYoIShoPGQmJmkoZz11W2hdLGgsdSkpPT09XylpZihfPSFfKWY9aCxzLmFyZWFTdGFydCgpLHMubGluZVN0YXJ0KCk7ZWxzZXtmb3Iocy5saW5lRW5kKCkscy5saW5lU3RhcnQoKSxwPWgtMTtwPj1mOy0tcClzLnBvaW50KHhbcF0sYltwXSk7cy5saW5lRW5kKCkscy5hcmVhRW5kKCl9XyYmKHhbaF09K2UoZyxoLHUpLGJbaF09K3IoZyxoLHUpLHMucG9pbnQodD8rdChnLGgsdSk6eFtoXSxuPytuKGcsaCx1KTpiW2hdKSl9aWYoeSlyZXR1cm4gcz1udWxsLHkrIiJ8fG51bGx9ZnVuY3Rpb24gYygpe3JldHVybiBSdygpLmRlZmluZWQoaSkuY3VydmUoYSkuY29udGV4dChvKX1yZXR1cm4gbC54PWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6R2UoK3UpLHQ9bnVsbCxsKTplfSxsLngwPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6R2UoK3UpLGwpOmV9LGwueDE9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dT09bnVsbD9udWxsOnR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6R2UoK3UpLGwpOnR9LGwueT1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgdT09ImZ1bmN0aW9uIj91OkdlKCt1KSxuPW51bGwsbCk6cn0sbC55MD1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgdT09ImZ1bmN0aW9uIj91OkdlKCt1KSxsKTpyfSxsLnkxPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXU9PW51bGw/bnVsbDp0eXBlb2YgdT09ImZ1bmN0aW9uIj91OkdlKCt1KSxsKTpufSxsLmxpbmVYMD1sLmxpbmVZMD1mdW5jdGlvbigpe3JldHVybiBjKCkueChlKS55KHIpfSxsLmxpbmVZMT1mdW5jdGlvbigpe3JldHVybiBjKCkueChlKS55KG4pfSxsLmxpbmVYMT1mdW5jdGlvbigpe3JldHVybiBjKCkueCh0KS55KHIpfSxsLmRlZmluZWQ9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpHZSghIXUpLGwpOml9LGwuY3VydmU9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dSxvIT1udWxsJiYocz1hKG8pKSxsKTphfSxsLmNvbnRleHQ9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9PW51bGw/bz1zPW51bGw6cz1hKG89dSksbCk6b30sbH12YXIgQWV0PU0oKCk9PntQdygpO3pnKCk7TEMoKTt4NygpO3Y3KCl9KTtmdW5jdGlvbiB2RnQoZSx0KXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59dmFyIHhGdD1NKCgpPT57fSk7ZnVuY3Rpb24gYkZ0KGUpe3JldHVybiBlfXZhciB3RnQ9TSgoKT0+e30pO2Z1bmN0aW9uIFNGdCgpe3ZhciBlPWJGdCx0PXZGdCxyPW51bGwsbj1HZSgwKSxpPUdlKE1jKSxvPUdlKDApO2Z1bmN0aW9uIGEocyl7dmFyIGwsYz1zLmxlbmd0aCx1LGgsZj0wLHA9bmV3IEFycmF5KGMpLGQ9bmV3IEFycmF5KGMpLGc9K24uYXBwbHkodGhpcyxhcmd1bWVudHMpLF89TWF0aC5taW4oTWMsTWF0aC5tYXgoLU1jLGkuYXBwbHkodGhpcyxhcmd1bWVudHMpLWcpKSx5LHg9TWF0aC5taW4oTWF0aC5hYnMoXykvYyxvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksYj14KihfPDA/LTE6MSksUztmb3IobD0wO2w8YzsrK2wpKFM9ZFtwW2xdPWxdPStlKHNbbF0sbCxzKSk+MCYmKGYrPVMpO2Zvcih0IT1udWxsP3Auc29ydChmdW5jdGlvbihDLFApe3JldHVybiB0KGRbQ10sZFtQXSl9KTpyIT1udWxsJiZwLnNvcnQoZnVuY3Rpb24oQyxQKXtyZXR1cm4gcihzW0NdLHNbUF0pfSksbD0wLGg9Zj8oXy1jKmIpL2Y6MDtsPGM7KytsLGc9eSl1PXBbbF0sUz1kW3VdLHk9ZysoUz4wP1MqaDowKStiLGRbdV09e2RhdGE6c1t1XSxpbmRleDpsLHZhbHVlOlMsc3RhcnRBbmdsZTpnLGVuZEFuZ2xlOnkscGFkQW5nbGU6eH07cmV0dXJuIGR9cmV0dXJuIGEudmFsdWU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpHZSgrcyksYSk6ZX0sYS5zb3J0VmFsdWVzPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXMscj1udWxsLGEpOnR9LGEuc29ydD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1zLHQ9bnVsbCxhKTpyfSxhLnN0YXJ0QW5nbGU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpHZSgrcyksYSk6bn0sYS5lbmRBbmdsZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkdlKCtzKSxhKTppfSxhLnBhZEFuZ2xlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6R2UoK3MpLGEpOm99LGF9dmFyIE1GdD1NKCgpPT57emcoKTt4RnQoKTt3RnQoKTtJdygpfSk7ZnVuY3Rpb24gRUZ0KGUpe3RoaXMuX2N1cnZlPWV9ZnVuY3Rpb24gTncoZSl7ZnVuY3Rpb24gdChyKXtyZXR1cm4gbmV3IEVGdChlKHIpKX1yZXR1cm4gdC5fY3VydmU9ZSx0fXZhciB3NyxQZXQ9TSgoKT0+e0xDKCk7dzc9TncoQmcpO0VGdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmFyZWFTdGFydCgpfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYUVuZCgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXt0aGlzLl9jdXJ2ZS5wb2ludCh0Kk1hdGguc2luKGUpLHQqLU1hdGguY29zKGUpKX19fSk7ZnVuY3Rpb24gRHcoZSl7dmFyIHQ9ZS5jdXJ2ZTtyZXR1cm4gZS5hbmdsZT1lLngsZGVsZXRlIGUueCxlLnJhZGl1cz1lLnksZGVsZXRlIGUueSxlLmN1cnZlPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QoTncocikpOnQoKS5fY3VydmV9LGV9ZnVuY3Rpb24gSWV0KCl7cmV0dXJuIER3KFJ3KCkuY3VydmUodzcpKX12YXIgTGV0PU0oKCk9PntQZXQoKTt4NygpfSk7ZnVuY3Rpb24ga2V0KCl7dmFyIGU9YjcoKS5jdXJ2ZSh3NyksdD1lLmN1cnZlLHI9ZS5saW5lWDAsbj1lLmxpbmVYMSxpPWUubGluZVkwLG89ZS5saW5lWTE7cmV0dXJuIGUuYW5nbGU9ZS54LGRlbGV0ZSBlLngsZS5zdGFydEFuZ2xlPWUueDAsZGVsZXRlIGUueDAsZS5lbmRBbmdsZT1lLngxLGRlbGV0ZSBlLngxLGUucmFkaXVzPWUueSxkZWxldGUgZS55LGUuaW5uZXJSYWRpdXM9ZS55MCxkZWxldGUgZS55MCxlLm91dGVyUmFkaXVzPWUueTEsZGVsZXRlIGUueTEsZS5saW5lU3RhcnRBbmdsZT1mdW5jdGlvbigpe3JldHVybiBEdyhyKCkpfSxkZWxldGUgZS5saW5lWDAsZS5saW5lRW5kQW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gRHcobigpKX0sZGVsZXRlIGUubGluZVgxLGUubGluZUlubmVyUmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIER3KGkoKSl9LGRlbGV0ZSBlLmxpbmVZMCxlLmxpbmVPdXRlclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBEdyhvKCkpfSxkZWxldGUgZS5saW5lWTEsZS5jdXJ2ZT1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90KE53KGEpKTp0KCkuX2N1cnZlfSxlfXZhciBURnQ9TSgoKT0+e1BldCgpO0FldCgpO0xldCgpfSk7ZnVuY3Rpb24gcHYoZSx0KXtyZXR1cm5bKHQ9K3QpKk1hdGguY29zKGUtPU1hdGguUEkvMiksdCpNYXRoLnNpbihlKV19dmFyIFJldD1NKCgpPT57fSk7dmFyIGtDLE5ldD1NKCgpPT57a0M9QXJyYXkucHJvdG90eXBlLnNsaWNlfSk7ZnVuY3Rpb24gd0xlKGUpe3JldHVybiBlLnNvdXJjZX1mdW5jdGlvbiBTTGUoZSl7cmV0dXJuIGUudGFyZ2V0fWZ1bmN0aW9uIERldChlKXt2YXIgdD13TGUscj1TTGUsbj1MdyxpPWt3LG89bnVsbDtmdW5jdGlvbiBhKCl7dmFyIHMsbD1rQy5jYWxsKGFyZ3VtZW50cyksYz10LmFwcGx5KHRoaXMsbCksdT1yLmFwcGx5KHRoaXMsbCk7aWYob3x8KG89cz1JdSgpKSxlKG8sK24uYXBwbHkodGhpcywobFswXT1jLGwpKSwraS5hcHBseSh0aGlzLGwpLCtuLmFwcGx5KHRoaXMsKGxbMF09dSxsKSksK2kuYXBwbHkodGhpcyxsKSkscylyZXR1cm4gbz1udWxsLHMrIiJ8fG51bGx9cmV0dXJuIGEuc291cmNlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXMsYSk6dH0sYS50YXJnZXQ9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9cyxhKTpyfSxhLng9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpHZSgrcyksYSk6bn0sYS55PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6R2UoK3MpLGEpOml9LGEuY29udGV4dD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1zPT1udWxsP251bGw6cyxhKTpvfSxhfWZ1bmN0aW9uIE1MZShlLHQscixuLGkpe2UubW92ZVRvKHQsciksZS5iZXppZXJDdXJ2ZVRvKHQ9KHQrbikvMixyLHQsaSxuLGkpfWZ1bmN0aW9uIEVMZShlLHQscixuLGkpe2UubW92ZVRvKHQsciksZS5iZXppZXJDdXJ2ZVRvKHQscj0ocitpKS8yLG4scixuLGkpfWZ1bmN0aW9uIFRMZShlLHQscixuLGkpe3ZhciBvPXB2KHQsciksYT1wdih0LHI9KHIraSkvMikscz1wdihuLHIpLGw9cHYobixpKTtlLm1vdmVUbyhvWzBdLG9bMV0pLGUuYmV6aWVyQ3VydmVUbyhhWzBdLGFbMV0sc1swXSxzWzFdLGxbMF0sbFsxXSl9ZnVuY3Rpb24gQ0Z0KCl7cmV0dXJuIERldChNTGUpfWZ1bmN0aW9uIEFGdCgpe3JldHVybiBEZXQoRUxlKX1mdW5jdGlvbiBQRnQoKXt2YXIgZT1EZXQoVExlKTtyZXR1cm4gZS5hbmdsZT1lLngsZGVsZXRlIGUueCxlLnJhZGl1cz1lLnksZGVsZXRlIGUueSxlfXZhciBJRnQ9TSgoKT0+e1B3KCk7TmV0KCk7emcoKTt2NygpO1JldCgpfSk7dmFyIFJDLE9ldD1NKCgpPT57SXcoKTtSQz17ZHJhdzpmdW5jdGlvbihlLHQpe3ZhciByPU1hdGguc3FydCh0L2t1KTtlLm1vdmVUbyhyLDApLGUuYXJjKDAsMCxyLDAsTWMpfX19KTt2YXIgUzcsemV0PU0oKCk9PntTNz17ZHJhdzpmdW5jdGlvbihlLHQpe3ZhciByPU1hdGguc3FydCh0LzUpLzI7ZS5tb3ZlVG8oLTMqciwtciksZS5saW5lVG8oLXIsLXIpLGUubGluZVRvKC1yLC0zKnIpLGUubGluZVRvKHIsLTMqciksZS5saW5lVG8ociwtciksZS5saW5lVG8oMypyLC1yKSxlLmxpbmVUbygzKnIsciksZS5saW5lVG8ocixyKSxlLmxpbmVUbyhyLDMqciksZS5saW5lVG8oLXIsMypyKSxlLmxpbmVUbygtcixyKSxlLmxpbmVUbygtMypyLHIpLGUuY2xvc2VQYXRoKCl9fX0pO3ZhciBMRnQsQ0xlLE03LEZldD1NKCgpPT57TEZ0PU1hdGguc3FydCguMzMzMzMzMzMzMzMzMzMzMyksQ0xlPUxGdCoyLE03PXtkcmF3OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWF0aC5zcXJ0KHQvQ0xlKSxuPXIqTEZ0O2UubW92ZVRvKDAsLXIpLGUubGluZVRvKG4sMCksZS5saW5lVG8oMCxyKSxlLmxpbmVUbygtbiwwKSxlLmNsb3NlUGF0aCgpfX19KTt2YXIgQUxlLGtGdCxQTGUsSUxlLEU3LEJldD1NKCgpPT57SXcoKTtBTGU9Ljg5MDgxMzA5MTUyOTI4NTIsa0Z0PU1hdGguc2luKGt1LzEwKS9NYXRoLnNpbig3Kmt1LzEwKSxQTGU9TWF0aC5zaW4oTWMvMTApKmtGdCxJTGU9LU1hdGguY29zKE1jLzEwKSprRnQsRTc9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLnNxcnQodCpBTGUpLG49UExlKnIsaT1JTGUqcjtlLm1vdmVUbygwLC1yKSxlLmxpbmVUbyhuLGkpO2Zvcih2YXIgbz0xO288NTsrK28pe3ZhciBhPU1jKm8vNSxzPU1hdGguY29zKGEpLGw9TWF0aC5zaW4oYSk7ZS5saW5lVG8obCpyLC1zKnIpLGUubGluZVRvKHMqbi1sKmksbCpuK3MqaSl9ZS5jbG9zZVBhdGgoKX19fSk7dmFyIFQ3LEhldD1NKCgpPT57VDc9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLnNxcnQodCksbj0tci8yO2UucmVjdChuLG4scixyKX19fSk7dmFyIFZldCxDNyxVZXQ9TSgoKT0+e1ZldD1NYXRoLnNxcnQoMyksQzc9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj0tTWF0aC5zcXJ0KHQvKFZldCozKSk7ZS5tb3ZlVG8oMCxyKjIpLGUubGluZVRvKC1WZXQqciwtciksZS5saW5lVG8oVmV0KnIsLXIpLGUuY2xvc2VQYXRoKCl9fX0pO3ZhciBFYyxUYyxxZXQsTExlLEE3LEdldD1NKCgpPT57RWM9LS41LFRjPU1hdGguc3FydCgzKS8yLHFldD0xL01hdGguc3FydCgxMiksTExlPShxZXQvMisxKSozLEE3PXtkcmF3OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWF0aC5zcXJ0KHQvTExlKSxuPXIvMixpPXIqcWV0LG89bixhPXIqcWV0K3Iscz0tbyxsPWE7ZS5tb3ZlVG8obixpKSxlLmxpbmVUbyhvLGEpLGUubGluZVRvKHMsbCksZS5saW5lVG8oRWMqbi1UYyppLFRjKm4rRWMqaSksZS5saW5lVG8oRWMqby1UYyphLFRjKm8rRWMqYSksZS5saW5lVG8oRWMqcy1UYypsLFRjKnMrRWMqbCksZS5saW5lVG8oRWMqbitUYyppLEVjKmktVGMqbiksZS5saW5lVG8oRWMqbytUYyphLEVjKmEtVGMqbyksZS5saW5lVG8oRWMqcytUYypsLEVjKmwtVGMqcyksZS5jbG9zZVBhdGgoKX19fSk7ZnVuY3Rpb24gTkZ0KCl7dmFyIGU9R2UoUkMpLHQ9R2UoNjQpLHI9bnVsbDtmdW5jdGlvbiBuKCl7dmFyIGk7aWYocnx8KHI9aT1JdSgpKSxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKS5kcmF3KHIsK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxpKXJldHVybiByPW51bGwsaSsiInx8bnVsbH1yZXR1cm4gbi50eXBlPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6R2UoaSksbik6ZX0sbi5zaXplPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6R2UoK2kpLG4pOnR9LG4uY29udGV4dD1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1pPT1udWxsP251bGw6aSxuKTpyfSxufXZhciBSRnQsREZ0PU0oKCk9PntQdygpO09ldCgpO3pldCgpO0ZldCgpO0JldCgpO0hldCgpO1VldCgpO0dldCgpO3pnKCk7UkZ0PVtSQyxTNyxNNyxUNyxFNyxDNyxBN119KTtmdW5jdGlvbiBDYygpe312YXIgTkM9TSgoKT0+e30pO2Z1bmN0aW9uIE93KGUsdCxyKXtlLl9jb250ZXh0LmJlemllckN1cnZlVG8oKDIqZS5feDArZS5feDEpLzMsKDIqZS5feTArZS5feTEpLzMsKGUuX3gwKzIqZS5feDEpLzMsKGUuX3kwKzIqZS5feTEpLzMsKGUuX3gwKzQqZS5feDErdCkvNiwoZS5feTArNCplLl95MStyKS82KX1mdW5jdGlvbiBEQyhlKXt0aGlzLl9jb250ZXh0PWV9ZnVuY3Rpb24gT0Z0KGUpe3JldHVybiBuZXcgREMoZSl9dmFyIE9DPU0oKCk9PntEQy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAzOk93KHRoaXMsdGhpcy5feDEsdGhpcy5feTEpO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2NvbnRleHQubGluZVRvKCg1KnRoaXMuX3gwK3RoaXMuX3gxKS82LCg1KnRoaXMuX3kwK3RoaXMuX3kxKS82KTtkZWZhdWx0Ok93KHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXR9fX0pO2Z1bmN0aW9uIHpGdChlKXt0aGlzLl9jb250ZXh0PWV9ZnVuY3Rpb24gRkZ0KGUpe3JldHVybiBuZXcgekZ0KGUpfXZhciBCRnQ9TSgoKT0+e05DKCk7T0MoKTt6RnQucHJvdG90eXBlPXthcmVhU3RhcnQ6Q2MsYXJlYUVuZDpDYyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDI6e3RoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MisyKnRoaXMuX3gzKS8zLCh0aGlzLl95MisyKnRoaXMuX3kzKS8zKSx0aGlzLl9jb250ZXh0LmxpbmVUbygodGhpcy5feDMrMip0aGlzLl94MikvMywodGhpcy5feTMrMip0aGlzLl95MikvMyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDM6e3RoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpLHRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpO2JyZWFrfX19LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDI9ZSx0aGlzLl95Mj10O2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gzPWUsdGhpcy5feTM9dDticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94ND1lLHRoaXMuX3k0PXQsdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gwKzQqdGhpcy5feDErZSkvNiwodGhpcy5feTArNCp0aGlzLl95MSt0KS82KTticmVhaztkZWZhdWx0Ok93KHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXR9fX0pO2Z1bmN0aW9uIEhGdChlKXt0aGlzLl9jb250ZXh0PWV9ZnVuY3Rpb24gVkZ0KGUpe3JldHVybiBuZXcgSEZ0KGUpfXZhciBVRnQ9TSgoKT0+e09DKCk7SEZ0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTMpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO3ZhciByPSh0aGlzLl94MCs0KnRoaXMuX3gxK2UpLzYsbj0odGhpcy5feTArNCp0aGlzLl95MSt0KS82O3RoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8ocixuKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhyLG4pO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6T3codGhpcyxlLHQpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dH19fSk7ZnVuY3Rpb24gcUZ0KGUsdCl7dGhpcy5fYmFzaXM9bmV3IERDKGUpLHRoaXMuX2JldGE9dH12YXIgR0Z0LFdGdD1NKCgpPT57T0MoKTtxRnQucHJvdG90eXBlPXtsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W10sdGhpcy5fYmFzaXMubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl94LHQ9dGhpcy5feSxyPWUubGVuZ3RoLTE7aWYocj4wKWZvcih2YXIgbj1lWzBdLGk9dFswXSxvPWVbcl0tbixhPXRbcl0taSxzPS0xLGw7KytzPD1yOylsPXMvcix0aGlzLl9iYXNpcy5wb2ludCh0aGlzLl9iZXRhKmVbc10rKDEtdGhpcy5fYmV0YSkqKG4rbCpvKSx0aGlzLl9iZXRhKnRbc10rKDEtdGhpcy5fYmV0YSkqKGkrbCphKSk7dGhpcy5feD10aGlzLl95PW51bGwsdGhpcy5fYmFzaXMubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuX3gucHVzaCgrZSksdGhpcy5feS5wdXNoKCt0KX19O0dGdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIHQ9PT0xP25ldyBEQyhuKTpuZXcgcUZ0KG4sdCl9cmV0dXJuIHIuYmV0YT1mdW5jdGlvbihuKXtyZXR1cm4gZSgrbil9LHJ9KC44NSl9KTtmdW5jdGlvbiB6dyhlLHQscil7ZS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGUuX3gxK2UuX2sqKGUuX3gyLWUuX3gwKSxlLl95MStlLl9rKihlLl95Mi1lLl95MCksZS5feDIrZS5fayooZS5feDEtdCksZS5feTIrZS5fayooZS5feTEtciksZS5feDIsZS5feTIpfWZ1bmN0aW9uIFA3KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2s9KDEtdCkvNn12YXIgWUZ0LHpDPU0oKCk9PntQNy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6encodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gxPWUsdGhpcy5feTE9dDticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0Onp3KHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fTtZRnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiBuZXcgUDcobix0KX1yZXR1cm4gci50ZW5zaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oMCl9KTtmdW5jdGlvbiBJNyhlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl9rPSgxLXQpLzZ9dmFyIGpGdCxXZXQ9TSgoKT0+e05DKCk7ekMoKTtJNy5wcm90b3R5cGU9e2FyZWFTdGFydDpDYyxhcmVhRW5kOkNjLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPWUsdGhpcy5feTM9dDticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND1lLHRoaXMuX3k0PXQpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PWUsdGhpcy5feTU9dDticmVhaztkZWZhdWx0Onp3KHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fTtqRnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiBuZXcgSTcobix0KX1yZXR1cm4gci50ZW5zaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oMCl9KTtmdW5jdGlvbiBMNyhlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl9rPSgxLXQpLzZ9dmFyIFhGdCxZZXQ9TSgoKT0+e3pDKCk7TDcucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MykmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6encodGhpcyxlLHQpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9dH19O1hGdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIG5ldyBMNyhuLHQpfXJldHVybiByLnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIGUoK24pfSxyfSgwKX0pO2Z1bmN0aW9uIEZDKGUsdCxyKXt2YXIgbj1lLl94MSxpPWUuX3kxLG89ZS5feDIsYT1lLl95MjtpZihlLl9sMDFfYT5Dbyl7dmFyIHM9MiplLl9sMDFfMmErMyplLl9sMDFfYSplLl9sMTJfYStlLl9sMTJfMmEsbD0zKmUuX2wwMV9hKihlLl9sMDFfYStlLl9sMTJfYSk7bj0obipzLWUuX3gwKmUuX2wxMl8yYStlLl94MiplLl9sMDFfMmEpL2wsaT0oaSpzLWUuX3kwKmUuX2wxMl8yYStlLl95MiplLl9sMDFfMmEpL2x9aWYoZS5fbDIzX2E+Q28pe3ZhciBjPTIqZS5fbDIzXzJhKzMqZS5fbDIzX2EqZS5fbDEyX2ErZS5fbDEyXzJhLHU9MyplLl9sMjNfYSooZS5fbDIzX2ErZS5fbDEyX2EpO289KG8qYytlLl94MSplLl9sMjNfMmEtdCplLl9sMTJfMmEpL3UsYT0oYSpjK2UuX3kxKmUuX2wyM18yYS1yKmUuX2wxMl8yYSkvdX1lLl9jb250ZXh0LmJlemllckN1cnZlVG8obixpLG8sYSxlLl94MixlLl95Mil9ZnVuY3Rpb24gJEZ0KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2FscGhhPXR9dmFyIEtGdCxrNz1NKCgpPT57SXcoKTt6QygpOyRGdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe2lmKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItZSxuPXRoaXMuX3kyLXQ7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OkZDKHRoaXMsZSx0KTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj10fX07S0Z0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gdD9uZXcgJEZ0KG4sdCk6bmV3IFA3KG4sMCl9cmV0dXJuIHIuYWxwaGE9ZnVuY3Rpb24obil7cmV0dXJuIGUoK24pfSxyfSguNSl9KTtmdW5jdGlvbiBaRnQoZSx0KXt0aGlzLl9jb250ZXh0PWUsdGhpcy5fYWxwaGE9dH12YXIgSkZ0LFFGdD1NKCgpPT57V2V0KCk7TkMoKTtrNygpO1pGdC5wcm90b3R5cGU9e2FyZWFTdGFydDpDYyxhcmVhRW5kOkNjLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSxwb2ludDpmdW5jdGlvbihlLHQpe2lmKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItZSxuPXRoaXMuX3kyLXQ7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz1lLHRoaXMuX3kzPXQ7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9ZSx0aGlzLl95ND10KTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT1lLHRoaXMuX3k1PXQ7YnJlYWs7ZGVmYXVsdDpGQyh0aGlzLGUsdCk7YnJlYWt9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9dH19O0pGdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIHQ/bmV3IFpGdChuLHQpOm5ldyBJNyhuLDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oLjUpfSk7ZnVuY3Rpb24gdEJ0KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2FscGhhPXR9dmFyIGVCdCxyQnQ9TSgoKT0+e1lldCgpO2s3KCk7dEJ0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTMpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe2lmKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItZSxuPXRoaXMuX3kyLXQ7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpGQyh0aGlzLGUsdCk7YnJlYWt9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9dH19O2VCdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIHQ/bmV3IHRCdChuLHQpOm5ldyBMNyhuLDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oLjUpfSk7ZnVuY3Rpb24gbkJ0KGUpe3RoaXMuX2NvbnRleHQ9ZX1mdW5jdGlvbiBpQnQoZSl7cmV0dXJuIG5ldyBuQnQoZSl9dmFyIG9CdD1NKCgpPT57TkMoKTtuQnQucHJvdG90eXBlPXthcmVhU3RhcnQ6Q2MsYXJlYUVuZDpDYyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LHBvaW50OmZ1bmN0aW9uKGUsdCl7ZT0rZSx0PSt0LHRoaXMuX3BvaW50P3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6KHRoaXMuX3BvaW50PTEsdGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KSl9fX0pO2Z1bmN0aW9uIGFCdChlKXtyZXR1cm4gZTwwPy0xOjF9ZnVuY3Rpb24gc0J0KGUsdCxyKXt2YXIgbj1lLl94MS1lLl94MCxpPXQtZS5feDEsbz0oZS5feTEtZS5feTApLyhufHxpPDAmJi0wKSxhPShyLWUuX3kxKS8oaXx8bjwwJiYtMCkscz0obyppK2EqbikvKG4raSk7cmV0dXJuKGFCdChvKSthQnQoYSkpKk1hdGgubWluKE1hdGguYWJzKG8pLE1hdGguYWJzKGEpLC41Kk1hdGguYWJzKHMpKXx8MH1mdW5jdGlvbiBsQnQoZSx0KXt2YXIgcj1lLl94MS1lLl94MDtyZXR1cm4gcj8oMyooZS5feTEtZS5feTApL3ItdCkvMjp0fWZ1bmN0aW9uIGpldChlLHQscil7dmFyIG49ZS5feDAsaT1lLl95MCxvPWUuX3gxLGE9ZS5feTEscz0oby1uKS8zO2UuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhuK3MsaStzKnQsby1zLGEtcypyLG8sYSl9ZnVuY3Rpb24gUjcoZSl7dGhpcy5fY29udGV4dD1lfWZ1bmN0aW9uIGNCdChlKXt0aGlzLl9jb250ZXh0PW5ldyB1QnQoZSl9ZnVuY3Rpb24gdUJ0KGUpe3RoaXMuX2NvbnRleHQ9ZX1mdW5jdGlvbiBoQnQoZSl7cmV0dXJuIG5ldyBSNyhlKX1mdW5jdGlvbiBmQnQoZSl7cmV0dXJuIG5ldyBjQnQoZSl9dmFyIHBCdD1NKCgpPT57UjcucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5fdDA9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWs7Y2FzZSAzOmpldCh0aGlzLHRoaXMuX3QwLGxCdCh0aGlzLHRoaXMuX3QwKSk7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3ZhciByPU5hTjtpZihlPStlLHQ9K3QsIShlPT09dGhpcy5feDEmJnQ9PT10aGlzLl95MSkpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOnRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsamV0KHRoaXMsbEJ0KHRoaXMscj1zQnQodGhpcyxlLHQpKSxyKTticmVhaztkZWZhdWx0OmpldCh0aGlzLHRoaXMuX3QwLHI9c0J0KHRoaXMsZSx0KSk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10LHRoaXMuX3QwPXJ9fX07KGNCdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShSNy5wcm90b3R5cGUpKS5wb2ludD1mdW5jdGlvbihlLHQpe1I3LnByb3RvdHlwZS5wb2ludC5jYWxsKHRoaXMsdCxlKX07dUJ0LnByb3RvdHlwZT17bW92ZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0sbGluZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fY29udGV4dC5saW5lVG8odCxlKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbihlLHQscixuLGksbyl7dGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHQsZSxuLHIsbyxpKX19fSk7ZnVuY3Rpb24gbUJ0KGUpe3RoaXMuX2NvbnRleHQ9ZX1mdW5jdGlvbiBkQnQoZSl7dmFyIHQscj1lLmxlbmd0aC0xLG4saT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkociksYT1uZXcgQXJyYXkocik7Zm9yKGlbMF09MCxvWzBdPTIsYVswXT1lWzBdKzIqZVsxXSx0PTE7dDxyLTE7Kyt0KWlbdF09MSxvW3RdPTQsYVt0XT00KmVbdF0rMiplW3QrMV07Zm9yKGlbci0xXT0yLG9bci0xXT03LGFbci0xXT04KmVbci0xXStlW3JdLHQ9MTt0PHI7Kyt0KW49aVt0XS9vW3QtMV0sb1t0XS09bixhW3RdLT1uKmFbdC0xXTtmb3IoaVtyLTFdPWFbci0xXS9vW3ItMV0sdD1yLTI7dD49MDstLXQpaVt0XT0oYVt0XS1pW3QrMV0pL29bdF07Zm9yKG9bci0xXT0oZVtyXStpW3ItMV0pLzIsdD0wO3Q8ci0xOysrdClvW3RdPTIqZVt0KzFdLWlbdCsxXTtyZXR1cm5baSxvXX1mdW5jdGlvbiBnQnQoZSl7cmV0dXJuIG5ldyBtQnQoZSl9dmFyIF9CdD1NKCgpPT57bUJ0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3gsdD10aGlzLl95LHI9ZS5sZW5ndGg7aWYocilpZih0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGVbMF0sdFswXSk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZVswXSx0WzBdKSxyPT09Mil0aGlzLl9jb250ZXh0LmxpbmVUbyhlWzFdLHRbMV0pO2Vsc2UgZm9yKHZhciBuPWRCdChlKSxpPWRCdCh0KSxvPTAsYT0xO2E8cjsrK28sKythKXRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhuWzBdW29dLGlbMF1bb10sblsxXVtvXSxpWzFdW29dLGVbYV0sdFthXSk7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZyPT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUsdGhpcy5feD10aGlzLl95PW51bGx9LHBvaW50OmZ1bmN0aW9uKGUsdCl7dGhpcy5feC5wdXNoKCtlKSx0aGlzLl95LnB1c2goK3QpfX19KTtmdW5jdGlvbiBONyhlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl90PXR9ZnVuY3Rpb24geUJ0KGUpe3JldHVybiBuZXcgTjcoZSwuNSl9ZnVuY3Rpb24gdkJ0KGUpe3JldHVybiBuZXcgTjcoZSwwKX1mdW5jdGlvbiB4QnQoZSl7cmV0dXJuIG5ldyBONyhlLDEpfXZhciBiQnQ9TSgoKT0+e043LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9dGhpcy5feT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA8dGhpcy5fdCYmdGhpcy5fdDwxJiZ0aGlzLl9wb2ludD09PTImJnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsdGhpcy5feSksKHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU+PTAmJih0aGlzLl90PTEtdGhpcy5fdCx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSl9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOnRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp7aWYodGhpcy5fdDw9MCl0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LHQpLHRoaXMuX2NvbnRleHQubGluZVRvKGUsdCk7ZWxzZXt2YXIgcj10aGlzLl94KigxLXRoaXMuX3QpK2UqdGhpcy5fdDt0aGlzLl9jb250ZXh0LmxpbmVUbyhyLHRoaXMuX3kpLHRoaXMuX2NvbnRleHQubGluZVRvKHIsdCl9YnJlYWt9fXRoaXMuX3g9ZSx0aGlzLl95PXR9fX0pO2Z1bmN0aW9uIFJ1KGUsdCl7aWYoKGE9ZS5sZW5ndGgpPjEpZm9yKHZhciByPTEsbixpLG89ZVt0WzBdXSxhLHM9by5sZW5ndGg7cjxhOysrcilmb3IoaT1vLG89ZVt0W3JdXSxuPTA7bjxzOysrbilvW25dWzFdKz1vW25dWzBdPWlzTmFOKGlbbl1bMV0pP2lbbl1bMF06aVtuXVsxXX12YXIgRnc9TSgoKT0+e30pO2Z1bmN0aW9uIE51KGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyPW5ldyBBcnJheSh0KTstLXQ+PTA7KXJbdF09dDtyZXR1cm4gcn12YXIgQnc9TSgoKT0+e30pO2Z1bmN0aW9uIGtMZShlLHQpe3JldHVybiBlW3RdfWZ1bmN0aW9uIHdCdCgpe3ZhciBlPUdlKFtdKSx0PU51LHI9UnUsbj1rTGU7ZnVuY3Rpb24gaShvKXt2YXIgYT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxzLGw9by5sZW5ndGgsYz1hLmxlbmd0aCx1PW5ldyBBcnJheShjKSxoO2ZvcihzPTA7czxjOysrcyl7Zm9yKHZhciBmPWFbc10scD11W3NdPW5ldyBBcnJheShsKSxkPTAsZztkPGw7KytkKXBbZF09Zz1bMCwrbihvW2RdLGYsZCxvKV0sZy5kYXRhPW9bZF07cC5rZXk9Zn1mb3Iocz0wLGg9dCh1KTtzPGM7KytzKXVbaFtzXV0uaW5kZXg9cztyZXR1cm4gcih1LGgpLHV9cmV0dXJuIGkua2V5cz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2Ygbz09ImZ1bmN0aW9uIj9vOkdlKGtDLmNhbGwobykpLGkpOmV9LGkudmFsdWU9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIG89PSJmdW5jdGlvbiI/bzpHZSgrbyksaSk6bn0saS5vcmRlcj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1vPT1udWxsP051OnR5cGVvZiBvPT0iZnVuY3Rpb24iP286R2Uoa0MuY2FsbChvKSksaSk6dH0saS5vZmZzZXQ9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bz09bnVsbD9SdTpvLGkpOnJ9LGl9dmFyIFNCdD1NKCgpPT57TmV0KCk7emcoKTtGdygpO0J3KCl9KTtmdW5jdGlvbiBNQnQoZSx0KXtpZigobj1lLmxlbmd0aCk+MCl7Zm9yKHZhciByLG4saT0wLG89ZVswXS5sZW5ndGgsYTtpPG87KytpKXtmb3IoYT1yPTA7cjxuOysrcilhKz1lW3JdW2ldWzFdfHwwO2lmKGEpZm9yKHI9MDtyPG47KytyKWVbcl1baV1bMV0vPWF9UnUoZSx0KX19dmFyIEVCdD1NKCgpPT57RncoKX0pO2Z1bmN0aW9uIFRCdChlLHQpe2lmKChsPWUubGVuZ3RoKT4xKWZvcih2YXIgcixuPTAsaSxvLGEscyxsLGM9ZVt0WzBdXS5sZW5ndGg7bjxjOysrbilmb3IoYT1zPTAscj0wO3I8bDsrK3IpKG89KGk9ZVt0W3JdXVtuXSlbMV0taVswXSk+PTA/KGlbMF09YSxpWzFdPWErPW8pOm88MD8oaVsxXT1zLGlbMF09cys9byk6aVswXT1hfXZhciBDQnQ9TSgoKT0+e30pO2Z1bmN0aW9uIEFCdChlLHQpe2lmKChpPWUubGVuZ3RoKT4wKXtmb3IodmFyIHI9MCxuPWVbdFswXV0saSxvPW4ubGVuZ3RoO3I8bzsrK3Ipe2Zvcih2YXIgYT0wLHM9MDthPGk7KythKXMrPWVbYV1bcl1bMV18fDA7bltyXVsxXSs9bltyXVswXT0tcy8yfVJ1KGUsdCl9fXZhciBQQnQ9TSgoKT0+e0Z3KCl9KTtmdW5jdGlvbiBJQnQoZSx0KXtpZighKCEoKGE9ZS5sZW5ndGgpPjApfHwhKChvPShpPWVbdFswXV0pLmxlbmd0aCk+MCkpKXtmb3IodmFyIHI9MCxuPTEsaSxvLGE7bjxvOysrbil7Zm9yKHZhciBzPTAsbD0wLGM9MDtzPGE7KytzKXtmb3IodmFyIHU9ZVt0W3NdXSxoPXVbbl1bMV18fDAsZj11W24tMV1bMV18fDAscD0oaC1mKS8yLGQ9MDtkPHM7KytkKXt2YXIgZz1lW3RbZF1dLF89Z1tuXVsxXXx8MCx5PWdbbi0xXVsxXXx8MDtwKz1fLXl9bCs9aCxjKz1wKmh9aVtuLTFdWzFdKz1pW24tMV1bMF09cixsJiYoci09Yy9sKX1pW24tMV1bMV0rPWlbbi0xXVswXT1yLFJ1KGUsdCl9fXZhciBMQnQ9TSgoKT0+e0Z3KCl9KTtmdW5jdGlvbiBENyhlKXt2YXIgdD1lLm1hcChYZXQpO3JldHVybiBOdShlKS5zb3J0KGZ1bmN0aW9uKHIsbil7cmV0dXJuIHRbcl0tdFtuXX0pfWZ1bmN0aW9uIFhldChlKXtmb3IodmFyIHQ9MCxyPS0xLG49ZS5sZW5ndGgsaTsrK3I8bjspKGk9K2Vbcl1bMV0pJiYodCs9aSk7cmV0dXJuIHR9dmFyIE83PU0oKCk9PntCdygpfSk7ZnVuY3Rpb24ga0J0KGUpe3JldHVybiBENyhlKS5yZXZlcnNlKCl9dmFyIFJCdD1NKCgpPT57TzcoKX0pO2Z1bmN0aW9uIE5CdChlKXt2YXIgdD1lLmxlbmd0aCxyLG4saT1lLm1hcChYZXQpLG89TnUoZSkuc29ydChmdW5jdGlvbih1LGgpe3JldHVybiBpW2hdLWlbdV19KSxhPTAscz0wLGw9W10sYz1bXTtmb3Iocj0wO3I8dDsrK3Ipbj1vW3JdLGE8cz8oYSs9aVtuXSxsLnB1c2gobikpOihzKz1pW25dLGMucHVzaChuKSk7cmV0dXJuIGMucmV2ZXJzZSgpLmNvbmNhdChsKX12YXIgREJ0PU0oKCk9PntCdygpO083KCl9KTtmdW5jdGlvbiBPQnQoZSl7cmV0dXJuIE51KGUpLnJldmVyc2UoKX12YXIgekJ0PU0oKCk9PntCdygpfSk7dmFyIEZCdD1NKCgpPT57X0Z0KCk7QWV0KCk7eDcoKTtNRnQoKTtURnQoKTtMZXQoKTtSZXQoKTtJRnQoKTtERnQoKTtPZXQoKTt6ZXQoKTtGZXQoKTtIZXQoKTtCZXQoKTtVZXQoKTtHZXQoKTtCRnQoKTtVRnQoKTtPQygpO1dGdCgpO1dldCgpO1lldCgpO3pDKCk7UUZ0KCk7ckJ0KCk7azcoKTtvQnQoKTtMQygpO3BCdCgpO19CdCgpO2JCdCgpO1NCdCgpO0VCdCgpO0NCdCgpO0Z3KCk7UEJ0KCk7TEJ0KCk7TzcoKTtSQnQoKTtEQnQoKTtCdygpO3pCdCgpfSk7ZnVuY3Rpb24gU3IoZSx0LHIsbil7ZnVuY3Rpb24gaShvKXtyZXR1cm4gZShvPW5ldyBEYXRlKCtvKSksb31yZXR1cm4gaS5mbG9vcj1pLGkuY2VpbD1mdW5jdGlvbihvKXtyZXR1cm4gZShvPW5ldyBEYXRlKG8tMSkpLHQobywxKSxlKG8pLG99LGkucm91bmQ9ZnVuY3Rpb24obyl7dmFyIGE9aShvKSxzPWkuY2VpbChvKTtyZXR1cm4gby1hPHMtbz9hOnN9LGkub2Zmc2V0PWZ1bmN0aW9uKG8sYSl7cmV0dXJuIHQobz1uZXcgRGF0ZSgrbyksYT09bnVsbD8xOk1hdGguZmxvb3IoYSkpLG99LGkucmFuZ2U9ZnVuY3Rpb24obyxhLHMpe3ZhciBsPVtdLGM7aWYobz1pLmNlaWwobykscz1zPT1udWxsPzE6TWF0aC5mbG9vcihzKSwhKG88YSl8fCEocz4wKSlyZXR1cm4gbDtkbyBsLnB1c2goYz1uZXcgRGF0ZSgrbykpLHQobyxzKSxlKG8pO3doaWxlKGM8byYmbzxhKTtyZXR1cm4gbH0saS5maWx0ZXI9ZnVuY3Rpb24obyl7cmV0dXJuIFNyKGZ1bmN0aW9uKGEpe2lmKGE+PWEpZm9yKDtlKGEpLCFvKGEpOylhLnNldFRpbWUoYS0xKX0sZnVuY3Rpb24oYSxzKXtpZihhPj1hKWlmKHM8MClmb3IoOysrczw9MDspZm9yKDt0KGEsLTEpLCFvKGEpOyk7ZWxzZSBmb3IoOy0tcz49MDspZm9yKDt0KGEsMSksIW8oYSk7KTt9KX0sciYmKGkuY291bnQ9ZnVuY3Rpb24obyxhKXtyZXR1cm4gJGV0LnNldFRpbWUoK28pLEtldC5zZXRUaW1lKCthKSxlKCRldCksZShLZXQpLE1hdGguZmxvb3IocigkZXQsS2V0KSl9LGkuZXZlcnk9ZnVuY3Rpb24obyl7cmV0dXJuIG89TWF0aC5mbG9vcihvKSwhaXNGaW5pdGUobyl8fCEobz4wKT9udWxsOm8+MT9pLmZpbHRlcihuP2Z1bmN0aW9uKGEpe3JldHVybiBuKGEpJW89PT0wfTpmdW5jdGlvbihhKXtyZXR1cm4gaS5jb3VudCgwLGEpJW89PT0wfSk6aX0pLGl9dmFyICRldCxLZXQscGE9TSgoKT0+eyRldD1uZXcgRGF0ZSxLZXQ9bmV3IERhdGV9KTt2YXIgejcsWmV0LEpldCxCQnQ9TSgoKT0+e3BhKCk7ejc9U3IoZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LWV9KTt6Ny5ldmVyeT1mdW5jdGlvbihlKXtyZXR1cm4gZT1NYXRoLmZsb29yKGUpLCFpc0Zpbml0ZShlKXx8IShlPjApP251bGw6ZT4xP1NyKGZ1bmN0aW9uKHQpe3Quc2V0VGltZShNYXRoLmZsb29yKHQvZSkqZSl9LGZ1bmN0aW9uKHQscil7dC5zZXRUaW1lKCt0K3IqZSl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdCkvZX0pOno3fTtaZXQ9ejcsSmV0PXo3LnJhbmdlfSk7dmFyIEJDLElzLHdmLEY3LEI3LFNmPU0oKCk9PntCQz0xZTMsSXM9NmU0LHdmPTM2ZTUsRjc9ODY0ZTUsQjc9NjA0OGU1fSk7dmFyIEhCdCxRZXQsdHJ0LFZCdD1NKCgpPT57cGEoKTtTZigpO0hCdD1TcihmdW5jdGlvbihlKXtlLnNldFRpbWUoTWF0aC5mbG9vcihlL0JDKSpCQyl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QqQkMpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL0JDfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENTZWNvbmRzKCl9KSxRZXQ9SEJ0LHRydD1IQnQucmFuZ2V9KTt2YXIgVUJ0LHFCdCxHQnQsV0J0PU0oKCk9PntwYSgpO1NmKCk7VUJ0PVNyKGZ1bmN0aW9uKGUpe2Uuc2V0VGltZShNYXRoLmZsb29yKGUvSXMpKklzKX0sZnVuY3Rpb24oZSx0KXtlLnNldFRpbWUoK2UrdCpJcyl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvSXN9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldE1pbnV0ZXMoKX0pLHFCdD1VQnQsR0J0PVVCdC5yYW5nZX0pO3ZhciBZQnQsakJ0LFhCdCwkQnQ9TSgoKT0+e3BhKCk7U2YoKTtZQnQ9U3IoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXRUaW1lem9uZU9mZnNldCgpKklzJXdmO3Q8MCYmKHQrPXdmKSxlLnNldFRpbWUoTWF0aC5mbG9vcigoK2UtdCkvd2YpKndmK3QpfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KndmKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS93Zn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0SG91cnMoKX0pLGpCdD1ZQnQsWEJ0PVlCdC5yYW5nZX0pO3ZhciBLQnQsWkJ0LEpCdCxRQnQ9TSgoKT0+e3BhKCk7U2YoKTtLQnQ9U3IoZnVuY3Rpb24oZSl7ZS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldERhdGUoZS5nZXREYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZS0odC5nZXRUaW1lem9uZU9mZnNldCgpLWUuZ2V0VGltZXpvbmVPZmZzZXQoKSkqSXMpL0Y3fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXREYXRlKCktMX0pLFpCdD1LQnQsSkJ0PUtCdC5yYW5nZX0pO2Z1bmN0aW9uIGR2KGUpe3JldHVybiBTcihmdW5jdGlvbih0KXt0LnNldERhdGUodC5nZXREYXRlKCktKHQuZ2V0RGF5KCkrNy1lKSU3KSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0RGF0ZSh0LmdldERhdGUoKStyKjcpfSxmdW5jdGlvbih0LHIpe3JldHVybihyLXQtKHIuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKklzKS9CN30pfXZhciBINyxlcnQscnJ0LG5ydCxpcnQsb3J0LGFydCxzcnQsdEh0LGVIdCxySHQsbkh0LGlIdCxvSHQsYUh0PU0oKCk9PntwYSgpO1NmKCk7SDc9ZHYoMCksZXJ0PWR2KDEpLHJydD1kdigyKSxucnQ9ZHYoMyksaXJ0PWR2KDQpLG9ydD1kdig1KSxhcnQ9ZHYoNiksc3J0PUg3LnJhbmdlLHRIdD1lcnQucmFuZ2UsZUh0PXJydC5yYW5nZSxySHQ9bnJ0LnJhbmdlLG5IdD1pcnQucmFuZ2UsaUh0PW9ydC5yYW5nZSxvSHQ9YXJ0LnJhbmdlfSk7dmFyIHNIdCxsSHQsY0h0LHVIdD1NKCgpPT57cGEoKTtzSHQ9U3IoZnVuY3Rpb24oZSl7ZS5zZXREYXRlKDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRNb250aChlLmdldE1vbnRoKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZ2V0TW9udGgoKS1lLmdldE1vbnRoKCkrKHQuZ2V0RnVsbFllYXIoKS1lLmdldEZ1bGxZZWFyKCkpKjEyfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRNb250aCgpfSksbEh0PXNIdCxjSHQ9c0h0LnJhbmdlfSk7dmFyIGxydCxoSHQsZkh0LHBIdD1NKCgpPT57cGEoKTtscnQ9U3IoZnVuY3Rpb24oZSl7ZS5zZXRNb250aCgwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRGdWxsWWVhcihlLmdldEZ1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKS1lLmdldEZ1bGxZZWFyKCl9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEZ1bGxZZWFyKCl9KTtscnQuZXZlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIWlzRmluaXRlKGU9TWF0aC5mbG9vcihlKSl8fCEoZT4wKT9udWxsOlNyKGZ1bmN0aW9uKHQpe3Quc2V0RnVsbFllYXIoTWF0aC5mbG9vcih0LmdldEZ1bGxZZWFyKCkvZSkqZSksdC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrciplKX0pfTtoSHQ9bHJ0LGZIdD1scnQucmFuZ2V9KTt2YXIgZEh0LG1IdCxnSHQsX0h0PU0oKCk9PntwYSgpO1NmKCk7ZEh0PVNyKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDU2Vjb25kcygwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KklzKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9Jc30sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDTWludXRlcygpfSksbUh0PWRIdCxnSHQ9ZEh0LnJhbmdlfSk7dmFyIHlIdCx2SHQseEh0LGJIdD1NKCgpPT57cGEoKTtTZigpO3lIdD1TcihmdW5jdGlvbihlKXtlLnNldFVUQ01pbnV0ZXMoMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KndmKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS93Zn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDSG91cnMoKX0pLHZIdD15SHQseEh0PXlIdC5yYW5nZX0pO3ZhciB3SHQsU0h0LE1IdCxFSHQ9TSgoKT0+e3BhKCk7U2YoKTt3SHQ9U3IoZnVuY3Rpb24oZSl7ZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvRjd9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0RhdGUoKS0xfSksU0h0PXdIdCxNSHQ9d0h0LnJhbmdlfSk7ZnVuY3Rpb24gbXYoZSl7cmV0dXJuIFNyKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKS0odC5nZXRVVENEYXkoKSs3LWUpJTcpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK3IqNyl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdCkvQjd9KX12YXIgVjcsY3J0LHVydCxocnQsZnJ0LHBydCxkcnQsbXJ0LFRIdCxDSHQsQUh0LFBIdCxJSHQsTEh0LGtIdD1NKCgpPT57cGEoKTtTZigpO1Y3PW12KDApLGNydD1tdigxKSx1cnQ9bXYoMiksaHJ0PW12KDMpLGZydD1tdig0KSxwcnQ9bXYoNSksZHJ0PW12KDYpLG1ydD1WNy5yYW5nZSxUSHQ9Y3J0LnJhbmdlLENIdD11cnQucmFuZ2UsQUh0PWhydC5yYW5nZSxQSHQ9ZnJ0LnJhbmdlLElIdD1wcnQucmFuZ2UsTEh0PWRydC5yYW5nZX0pO3ZhciBSSHQsTkh0LERIdCxPSHQ9TSgoKT0+e3BhKCk7Ukh0PVNyKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRGF0ZSgxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VVRDTW9udGgoZS5nZXRVVENNb250aCgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldFVUQ01vbnRoKCktZS5nZXRVVENNb250aCgpKyh0LmdldFVUQ0Z1bGxZZWFyKCktZS5nZXRVVENGdWxsWWVhcigpKSoxMn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDTW9udGgoKX0pLE5IdD1SSHQsREh0PVJIdC5yYW5nZX0pO3ZhciBncnQsekh0LEZIdCxCSHQ9TSgoKT0+e3BhKCk7Z3J0PVNyKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDTW9udGgoMCwxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VVRDRnVsbFllYXIoZS5nZXRVVENGdWxsWWVhcigpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldFVUQ0Z1bGxZZWFyKCktZS5nZXRVVENGdWxsWWVhcigpfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENGdWxsWWVhcigpfSk7Z3J0LmV2ZXJ5PWZ1bmN0aW9uKGUpe3JldHVybiFpc0Zpbml0ZShlPU1hdGguZmxvb3IoZSkpfHwhKGU+MCk/bnVsbDpTcihmdW5jdGlvbih0KXt0LnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IodC5nZXRVVENGdWxsWWVhcigpL2UpKmUpLHQuc2V0VVRDTW9udGgoMCwxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0VVRDRnVsbFllYXIodC5nZXRVVENGdWxsWWVhcigpK3IqZSl9KX07ekh0PWdydCxGSHQ9Z3J0LnJhbmdlfSk7dmFyIEhIdD1NKCgpPT57cGEoKTtCQnQoKTtWQnQoKTtXQnQoKTskQnQoKTtRQnQoKTthSHQoKTt1SHQoKTtwSHQoKTtfSHQoKTtiSHQoKTtFSHQoKTtrSHQoKTtPSHQoKTtCSHQoKX0pO2Z1bmN0aW9uIGRhKGUsdCxyLG4pe2Z1bmN0aW9uIGkobyl7cmV0dXJuIGUobz1hcmd1bWVudHMubGVuZ3RoPT09MD9uZXcgRGF0ZTpuZXcgRGF0ZSgrbykpLG99cmV0dXJuIGkuZmxvb3I9ZnVuY3Rpb24obyl7cmV0dXJuIGUobz1uZXcgRGF0ZSgrbykpLG99LGkuY2VpbD1mdW5jdGlvbihvKXtyZXR1cm4gZShvPW5ldyBEYXRlKG8tMSkpLHQobywxKSxlKG8pLG99LGkucm91bmQ9ZnVuY3Rpb24obyl7dmFyIGE9aShvKSxzPWkuY2VpbChvKTtyZXR1cm4gby1hPHMtbz9hOnN9LGkub2Zmc2V0PWZ1bmN0aW9uKG8sYSl7cmV0dXJuIHQobz1uZXcgRGF0ZSgrbyksYT09bnVsbD8xOk1hdGguZmxvb3IoYSkpLG99LGkucmFuZ2U9ZnVuY3Rpb24obyxhLHMpe3ZhciBsPVtdLGM7aWYobz1pLmNlaWwobykscz1zPT1udWxsPzE6TWF0aC5mbG9vcihzKSwhKG88YSl8fCEocz4wKSlyZXR1cm4gbDtkbyBsLnB1c2goYz1uZXcgRGF0ZSgrbykpLHQobyxzKSxlKG8pO3doaWxlKGM8byYmbzxhKTtyZXR1cm4gbH0saS5maWx0ZXI9ZnVuY3Rpb24obyl7cmV0dXJuIGRhKGZ1bmN0aW9uKGEpe2lmKGE+PWEpZm9yKDtlKGEpLCFvKGEpOylhLnNldFRpbWUoYS0xKX0sZnVuY3Rpb24oYSxzKXtpZihhPj1hKWlmKHM8MClmb3IoOysrczw9MDspZm9yKDt0KGEsLTEpLCFvKGEpOyk7ZWxzZSBmb3IoOy0tcz49MDspZm9yKDt0KGEsMSksIW8oYSk7KTt9KX0sciYmKGkuY291bnQ9ZnVuY3Rpb24obyxhKXtyZXR1cm4gX3J0LnNldFRpbWUoK28pLHlydC5zZXRUaW1lKCthKSxlKF9ydCksZSh5cnQpLE1hdGguZmxvb3IocihfcnQseXJ0KSl9LGkuZXZlcnk9ZnVuY3Rpb24obyl7cmV0dXJuIG89TWF0aC5mbG9vcihvKSwhaXNGaW5pdGUobyl8fCEobz4wKT9udWxsOm8+MT9pLmZpbHRlcihuP2Z1bmN0aW9uKGEpe3JldHVybiBuKGEpJW89PT0wfTpmdW5jdGlvbihhKXtyZXR1cm4gaS5jb3VudCgwLGEpJW89PT0wfSk6aX0pLGl9dmFyIF9ydCx5cnQsZ3Y9TSgoKT0+e19ydD1uZXcgRGF0ZSx5cnQ9bmV3IERhdGV9KTt2YXIgVTcscTcsRzcsSEM9TSgoKT0+e1U3PTZlNCxxNz04NjRlNSxHNz02MDQ4ZTV9KTt2YXIgVkh0LFc3LFJMZSxVSHQ9TSgoKT0+e2d2KCk7SEMoKTtWSHQ9ZGEoZnVuY3Rpb24oZSl7ZS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldERhdGUoZS5nZXREYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZS0odC5nZXRUaW1lem9uZU9mZnNldCgpLWUuZ2V0VGltZXpvbmVPZmZzZXQoKSkqVTcpL3E3fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXREYXRlKCktMX0pLFc3PVZIdCxSTGU9Vkh0LnJhbmdlfSk7ZnVuY3Rpb24gX3YoZSl7cmV0dXJuIGRhKGZ1bmN0aW9uKHQpe3Quc2V0RGF0ZSh0LmdldERhdGUoKS0odC5nZXREYXkoKSs3LWUpJTcpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpK3IqNyl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdC0oci5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkqVTcpL0c3fSl9dmFyIFZDLEh3LHFIdCxHSHQsVncsV0h0LFlIdCxqSHQsTkxlLERMZSxPTGUsekxlLEZMZSxCTGUsWEh0PU0oKCk9PntndigpO0hDKCk7VkM9X3YoMCksSHc9X3YoMSkscUh0PV92KDIpLEdIdD1fdigzKSxWdz1fdig0KSxXSHQ9X3YoNSksWUh0PV92KDYpLGpIdD1WQy5yYW5nZSxOTGU9SHcucmFuZ2UsRExlPXFIdC5yYW5nZSxPTGU9R0h0LnJhbmdlLHpMZT1Wdy5yYW5nZSxGTGU9V0h0LnJhbmdlLEJMZT1ZSHQucmFuZ2V9KTt2YXIgdnJ0LHl2LEhMZSwkSHQ9TSgoKT0+e2d2KCk7dnJ0PWRhKGZ1bmN0aW9uKGUpe2Uuc2V0TW9udGgoMCwxKSxlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0RnVsbFllYXIoZS5nZXRGdWxsWWVhcigpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldEZ1bGxZZWFyKCktZS5nZXRGdWxsWWVhcigpfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRGdWxsWWVhcigpfSk7dnJ0LmV2ZXJ5PWZ1bmN0aW9uKGUpe3JldHVybiFpc0Zpbml0ZShlPU1hdGguZmxvb3IoZSkpfHwhKGU+MCk/bnVsbDpkYShmdW5jdGlvbih0KXt0LnNldEZ1bGxZZWFyKE1hdGguZmxvb3IodC5nZXRGdWxsWWVhcigpL2UpKmUpLHQuc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpK3IqZSl9KX07eXY9dnJ0LEhMZT12cnQucmFuZ2V9KTt2YXIgS0h0LFk3LFZMZSxaSHQ9TSgoKT0+e2d2KCk7SEMoKTtLSHQ9ZGEoZnVuY3Rpb24oZSl7ZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvcTd9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0RhdGUoKS0xfSksWTc9S0h0LFZMZT1LSHQucmFuZ2V9KTtmdW5jdGlvbiB2dihlKXtyZXR1cm4gZGEoZnVuY3Rpb24odCl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpLSh0LmdldFVUQ0RheSgpKzctZSklNyksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxyKXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrcio3KX0sZnVuY3Rpb24odCxyKXtyZXR1cm4oci10KS9HN30pfXZhciBVQyxVdyxKSHQsUUh0LHF3LHRWdCxlVnQsclZ0LFVMZSxxTGUsR0xlLFdMZSxZTGUsakxlLG5WdD1NKCgpPT57Z3YoKTtIQygpO1VDPXZ2KDApLFV3PXZ2KDEpLEpIdD12digyKSxRSHQ9dnYoMykscXc9dnYoNCksdFZ0PXZ2KDUpLGVWdD12dig2KSxyVnQ9VUMucmFuZ2UsVUxlPVV3LnJhbmdlLHFMZT1KSHQucmFuZ2UsR0xlPVFIdC5yYW5nZSxXTGU9cXcucmFuZ2UsWUxlPXRWdC5yYW5nZSxqTGU9ZVZ0LnJhbmdlfSk7dmFyIHhydCx4dixYTGUsaVZ0PU0oKCk9PntndigpO3hydD1kYShmdW5jdGlvbihlKXtlLnNldFVUQ01vbnRoKDAsMSksZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ0Z1bGxZZWFyKGUuZ2V0VVRDRnVsbFllYXIoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5nZXRVVENGdWxsWWVhcigpLWUuZ2V0VVRDRnVsbFllYXIoKX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDRnVsbFllYXIoKX0pO3hydC5ldmVyeT1mdW5jdGlvbihlKXtyZXR1cm4haXNGaW5pdGUoZT1NYXRoLmZsb29yKGUpKXx8IShlPjApP251bGw6ZGEoZnVuY3Rpb24odCl7dC5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKHQuZ2V0VVRDRnVsbFllYXIoKS9lKSplKSx0LnNldFVUQ01vbnRoKDAsMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxyKXt0LnNldFVUQ0Z1bGxZZWFyKHQuZ2V0VVRDRnVsbFllYXIoKStyKmUpfSl9O3h2PXhydCxYTGU9eHJ0LnJhbmdlfSk7dmFyIG9WdD1NKCgpPT57VUh0KCk7WEh0KCk7JEh0KCk7Wkh0KCk7blZ0KCk7aVZ0KCl9KTtmdW5jdGlvbiAkTGUoZSl7aWYoMDw9ZS55JiZlLnk8MTAwKXt2YXIgdD1uZXcgRGF0ZSgtMSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCk7cmV0dXJuIHQuc2V0RnVsbFllYXIoZS55KSx0fXJldHVybiBuZXcgRGF0ZShlLnksZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpfWZ1bmN0aW9uIGo3KGUpe2lmKDA8PWUueSYmZS55PDEwMCl7dmFyIHQ9bmV3IERhdGUoRGF0ZS5VVEMoLTEsZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpKTtyZXR1cm4gdC5zZXRVVENGdWxsWWVhcihlLnkpLHR9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKGUueSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCkpfWZ1bmN0aW9uIHFDKGUpe3JldHVybnt5OmUsbTowLGQ6MSxIOjAsTTowLFM6MCxMOjB9fWZ1bmN0aW9uIFlDKGUpe3ZhciB0PWUuZGF0ZVRpbWUscj1lLmRhdGUsbj1lLnRpbWUsaT1lLnBlcmlvZHMsbz1lLmRheXMsYT1lLnNob3J0RGF5cyxzPWUubW9udGhzLGw9ZS5zaG9ydE1vbnRocyxjPUdDKGkpLHU9V0MoaSksaD1HQyhvKSxmPVdDKG8pLHA9R0MoYSksZD1XQyhhKSxnPUdDKHMpLF89V0MocykseT1HQyhsKSx4PVdDKGwpLGI9e2E6VyxBOlosYjpydCxCOm90LGM6bnVsbCxkOmNWdCxlOmNWdCxmOnZrZSxIOmdrZSxJOl9rZSxqOnlrZSxMOmRWdCxtOnhrZSxNOmJrZSxwOnN0LFE6ZlZ0LHM6cFZ0LFM6d2tlLHU6U2tlLFU6TWtlLFY6RWtlLHc6VGtlLFc6Q2tlLHg6bnVsbCxYOm51bGwseTpBa2UsWTpQa2UsWjpJa2UsIiUiOmhWdH0sUz17YTpTdCxBOmJ0LGI6TXQsQjpsdCxjOm51bGwsZDp1VnQsZTp1VnQsZjpOa2UsSDpMa2UsSTpra2UsajpSa2UsTDptVnQsbTpEa2UsTTpPa2UscDpLdCxROmZWdCxzOnBWdCxTOnprZSx1OkZrZSxVOkJrZSxWOkhrZSx3OlZrZSxXOlVrZSx4Om51bGwsWDpudWxsLHk6cWtlLFk6R2tlLFo6V2tlLCIlIjpoVnR9LEM9e2E6QixBOkksYjpMLEI6UixjOkYsZDpzVnQsZTpzVnQsZjpma2UsSDpsVnQsSTpsVnQsajpsa2UsTDpoa2UsbTpza2UsTTpja2UscDpELFE6ZGtlLHM6bWtlLFM6dWtlLHU6dGtlLFU6ZWtlLFY6cmtlLHc6UUxlLFc6bmtlLHg6eixYOlUseTpva2UsWTppa2UsWjpha2UsIiUiOnBrZX07Yi54PVAocixiKSxiLlg9UChuLGIpLGIuYz1QKHQsYiksUy54PVAocixTKSxTLlg9UChuLFMpLFMuYz1QKHQsUyk7ZnVuY3Rpb24gUChfdCxjdCl7cmV0dXJuIGZ1bmN0aW9uKFgpe3ZhciBldD1bXSxkdD0tMSxxPTAscHQ9X3QubGVuZ3RoLGh0LHd0LGt0O2ZvcihYIGluc3RhbmNlb2YgRGF0ZXx8KFg9bmV3IERhdGUoK1gpKTsrK2R0PHB0OylfdC5jaGFyQ29kZUF0KGR0KT09PTM3JiYoZXQucHVzaChfdC5zbGljZShxLGR0KSksKHd0PWFWdFtodD1fdC5jaGFyQXQoKytkdCldKSE9bnVsbD9odD1fdC5jaGFyQXQoKytkdCk6d3Q9aHQ9PT0iZSI/IiAiOiIwIiwoa3Q9Y3RbaHRdKSYmKGh0PWt0KFgsd3QpKSxldC5wdXNoKGh0KSxxPWR0KzEpO3JldHVybiBldC5wdXNoKF90LnNsaWNlKHEsZHQpKSxldC5qb2luKCIiKX19ZnVuY3Rpb24gayhfdCxjdCl7cmV0dXJuIGZ1bmN0aW9uKFgpe3ZhciBldD1xQygxOTAwKSxkdD1PKGV0LF90LFgrPSIiLDApLHEscHQ7aWYoZHQhPVgubGVuZ3RoKXJldHVybiBudWxsO2lmKCJRImluIGV0KXJldHVybiBuZXcgRGF0ZShldC5RKTtpZigicCJpbiBldCYmKGV0Lkg9ZXQuSCUxMitldC5wKjEyKSwiViJpbiBldCl7aWYoZXQuVjwxfHxldC5WPjUzKXJldHVybiBudWxsOyJ3ImluIGV0fHwoZXQudz0xKSwiWiJpbiBldD8ocT1qNyhxQyhldC55KSkscHQ9cS5nZXRVVENEYXkoKSxxPXB0PjR8fHB0PT09MD9Vdy5jZWlsKHEpOlV3KHEpLHE9WTcub2Zmc2V0KHEsKGV0LlYtMSkqNyksZXQueT1xLmdldFVUQ0Z1bGxZZWFyKCksZXQubT1xLmdldFVUQ01vbnRoKCksZXQuZD1xLmdldFVUQ0RhdGUoKSsoZXQudys2KSU3KToocT1jdChxQyhldC55KSkscHQ9cS5nZXREYXkoKSxxPXB0PjR8fHB0PT09MD9Idy5jZWlsKHEpOkh3KHEpLHE9Vzcub2Zmc2V0KHEsKGV0LlYtMSkqNyksZXQueT1xLmdldEZ1bGxZZWFyKCksZXQubT1xLmdldE1vbnRoKCksZXQuZD1xLmdldERhdGUoKSsoZXQudys2KSU3KX1lbHNlKCJXImluIGV0fHwiVSJpbiBldCkmJigidyJpbiBldHx8KGV0Lnc9InUiaW4gZXQ/ZXQudSU3OiJXImluIGV0PzE6MCkscHQ9IloiaW4gZXQ/ajcocUMoZXQueSkpLmdldFVUQ0RheSgpOmN0KHFDKGV0LnkpKS5nZXREYXkoKSxldC5tPTAsZXQuZD0iVyJpbiBldD8oZXQudys2KSU3K2V0LlcqNy0ocHQrNSklNzpldC53K2V0LlUqNy0ocHQrNiklNyk7cmV0dXJuIloiaW4gZXQ/KGV0LkgrPWV0LlovMTAwfDAsZXQuTSs9ZXQuWiUxMDAsajcoZXQpKTpjdChldCl9fWZ1bmN0aW9uIE8oX3QsY3QsWCxldCl7Zm9yKHZhciBkdD0wLHE9Y3QubGVuZ3RoLHB0PVgubGVuZ3RoLGh0LHd0O2R0PHE7KXtpZihldD49cHQpcmV0dXJuLTE7aWYoaHQ9Y3QuY2hhckNvZGVBdChkdCsrKSxodD09PTM3KXtpZihodD1jdC5jaGFyQXQoZHQrKyksd3Q9Q1todCBpbiBhVnQ/Y3QuY2hhckF0KGR0KyspOmh0XSwhd3R8fChldD13dChfdCxYLGV0KSk8MClyZXR1cm4tMX1lbHNlIGlmKGh0IT1YLmNoYXJDb2RlQXQoZXQrKykpcmV0dXJuLTF9cmV0dXJuIGV0fWZ1bmN0aW9uIEQoX3QsY3QsWCl7dmFyIGV0PWMuZXhlYyhjdC5zbGljZShYKSk7cmV0dXJuIGV0PyhfdC5wPXVbZXRbMF0udG9Mb3dlckNhc2UoKV0sWCtldFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEIoX3QsY3QsWCl7dmFyIGV0PXAuZXhlYyhjdC5zbGljZShYKSk7cmV0dXJuIGV0PyhfdC53PWRbZXRbMF0udG9Mb3dlckNhc2UoKV0sWCtldFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEkoX3QsY3QsWCl7dmFyIGV0PWguZXhlYyhjdC5zbGljZShYKSk7cmV0dXJuIGV0PyhfdC53PWZbZXRbMF0udG9Mb3dlckNhc2UoKV0sWCtldFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEwoX3QsY3QsWCl7dmFyIGV0PXkuZXhlYyhjdC5zbGljZShYKSk7cmV0dXJuIGV0PyhfdC5tPXhbZXRbMF0udG9Mb3dlckNhc2UoKV0sWCtldFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFIoX3QsY3QsWCl7dmFyIGV0PWcuZXhlYyhjdC5zbGljZShYKSk7cmV0dXJuIGV0PyhfdC5tPV9bZXRbMF0udG9Mb3dlckNhc2UoKV0sWCtldFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEYoX3QsY3QsWCl7cmV0dXJuIE8oX3QsdCxjdCxYKX1mdW5jdGlvbiB6KF90LGN0LFgpe3JldHVybiBPKF90LHIsY3QsWCl9ZnVuY3Rpb24gVShfdCxjdCxYKXtyZXR1cm4gTyhfdCxuLGN0LFgpfWZ1bmN0aW9uIFcoX3Qpe3JldHVybiBhW190LmdldERheSgpXX1mdW5jdGlvbiBaKF90KXtyZXR1cm4gb1tfdC5nZXREYXkoKV19ZnVuY3Rpb24gcnQoX3Qpe3JldHVybiBsW190LmdldE1vbnRoKCldfWZ1bmN0aW9uIG90KF90KXtyZXR1cm4gc1tfdC5nZXRNb250aCgpXX1mdW5jdGlvbiBzdChfdCl7cmV0dXJuIGlbKyhfdC5nZXRIb3VycygpPj0xMildfWZ1bmN0aW9uIFN0KF90KXtyZXR1cm4gYVtfdC5nZXRVVENEYXkoKV19ZnVuY3Rpb24gYnQoX3Qpe3JldHVybiBvW190LmdldFVUQ0RheSgpXX1mdW5jdGlvbiBNdChfdCl7cmV0dXJuIGxbX3QuZ2V0VVRDTW9udGgoKV19ZnVuY3Rpb24gbHQoX3Qpe3JldHVybiBzW190LmdldFVUQ01vbnRoKCldfWZ1bmN0aW9uIEt0KF90KXtyZXR1cm4gaVsrKF90LmdldFVUQ0hvdXJzKCk+PTEyKV19cmV0dXJue2Zvcm1hdDpmdW5jdGlvbihfdCl7dmFyIGN0PVAoX3QrPSIiLGIpO3JldHVybiBjdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBfdH0sY3R9LHBhcnNlOmZ1bmN0aW9uKF90KXt2YXIgY3Q9ayhfdCs9IiIsJExlKTtyZXR1cm4gY3QudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gX3R9LGN0fSx1dGNGb3JtYXQ6ZnVuY3Rpb24oX3Qpe3ZhciBjdD1QKF90Kz0iIixTKTtyZXR1cm4gY3QudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gX3R9LGN0fSx1dGNQYXJzZTpmdW5jdGlvbihfdCl7dmFyIGN0PWsoX3QsajcpO3JldHVybiBjdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBfdH0sY3R9fX1mdW5jdGlvbiBnbihlLHQscil7dmFyIG49ZTwwPyItIjoiIixpPShuPy1lOmUpKyIiLG89aS5sZW5ndGg7cmV0dXJuIG4rKG88cj9uZXcgQXJyYXkoci1vKzEpLmpvaW4odCkraTppKX1mdW5jdGlvbiBKTGUoZSl7cmV0dXJuIGUucmVwbGFjZShaTGUsIlxcJCYiKX1mdW5jdGlvbiBHQyhlKXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIrZS5tYXAoSkxlKS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gV0MoZSl7Zm9yKHZhciB0PXt9LHI9LTEsbj1lLmxlbmd0aDsrK3I8bjspdFtlW3JdLnRvTG93ZXJDYXNlKCldPXI7cmV0dXJuIHR9ZnVuY3Rpb24gUUxlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzEpKTtyZXR1cm4gbj8oZS53PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHRrZShlLHQscil7dmFyIG49Vm8uZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUudT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBla2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlU9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcmtlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5WPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG5rZShlLHQscil7dmFyIG49Vm8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuVz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBpa2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrNCkpO3JldHVybiBuPyhlLnk9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gb2tlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS55PStuWzBdKygrblswXT42OD8xOTAwOjJlMykscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gYWtlKGUsdCxyKXt2YXIgbj0vXihaKXwoWystXVxkXGQpKD86Oj8oXGRcZCkpPy8uZXhlYyh0LnNsaWNlKHIscis2KSk7cmV0dXJuIG4/KGUuWj1uWzFdPzA6LShuWzJdKyhuWzNdfHwiMDAiKSkscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gc2tlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5tPW5bMF0tMSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBzVnQoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLmQ9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbGtlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8oZS5tPTAsZS5kPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGxWdChlLHQscil7dmFyIG49Vm8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuSD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBja2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLk09K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdWtlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5TPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGhrZShlLHQscil7dmFyIG49Vm8uZXhlYyh0LnNsaWNlKHIsciszKSk7cmV0dXJuIG4/KGUuTD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBma2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrNikpO3JldHVybiBuPyhlLkw9TWF0aC5mbG9vcihuWzBdLzFlMykscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcGtlKGUsdCxyKXt2YXIgbj1LTGUuZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/cituWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBka2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyKSk7cmV0dXJuIG4/KGUuUT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBta2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyKSk7cmV0dXJuIG4/KGUuUT0rblswXSoxZTMscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gY1Z0KGUsdCl7cmV0dXJuIGduKGUuZ2V0RGF0ZSgpLHQsMil9ZnVuY3Rpb24gZ2tlKGUsdCl7cmV0dXJuIGduKGUuZ2V0SG91cnMoKSx0LDIpfWZ1bmN0aW9uIF9rZShlLHQpe3JldHVybiBnbihlLmdldEhvdXJzKCklMTJ8fDEyLHQsMil9ZnVuY3Rpb24geWtlKGUsdCl7cmV0dXJuIGduKDErVzcuY291bnQoeXYoZSksZSksdCwzKX1mdW5jdGlvbiBkVnQoZSx0KXtyZXR1cm4gZ24oZS5nZXRNaWxsaXNlY29uZHMoKSx0LDMpfWZ1bmN0aW9uIHZrZShlLHQpe3JldHVybiBkVnQoZSx0KSsiMDAwIn1mdW5jdGlvbiB4a2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRNb250aCgpKzEsdCwyKX1mdW5jdGlvbiBia2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRNaW51dGVzKCksdCwyKX1mdW5jdGlvbiB3a2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRTZWNvbmRzKCksdCwyKX1mdW5jdGlvbiBTa2UoZSl7dmFyIHQ9ZS5nZXREYXkoKTtyZXR1cm4gdD09PTA/Nzp0fWZ1bmN0aW9uIE1rZShlLHQpe3JldHVybiBnbihWQy5jb3VudCh5dihlKSxlKSx0LDIpfWZ1bmN0aW9uIEVrZShlLHQpe3ZhciByPWUuZ2V0RGF5KCk7cmV0dXJuIGU9cj49NHx8cj09PTA/VncoZSk6VncuY2VpbChlKSxnbihWdy5jb3VudCh5dihlKSxlKSsoeXYoZSkuZ2V0RGF5KCk9PT00KSx0LDIpfWZ1bmN0aW9uIFRrZShlKXtyZXR1cm4gZS5nZXREYXkoKX1mdW5jdGlvbiBDa2UoZSx0KXtyZXR1cm4gZ24oSHcuY291bnQoeXYoZSksZSksdCwyKX1mdW5jdGlvbiBBa2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIFBrZShlLHQpe3JldHVybiBnbihlLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gSWtlKGUpe3ZhciB0PWUuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4odD4wPyItIjoodCo9LTEsIisiKSkrZ24odC82MHwwLCIwIiwyKStnbih0JTYwLCIwIiwyKX1mdW5jdGlvbiB1VnQoZSx0KXtyZXR1cm4gZ24oZS5nZXRVVENEYXRlKCksdCwyKX1mdW5jdGlvbiBMa2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRVVENIb3VycygpLHQsMil9ZnVuY3Rpb24ga2tlKGUsdCl7cmV0dXJuIGduKGUuZ2V0VVRDSG91cnMoKSUxMnx8MTIsdCwyKX1mdW5jdGlvbiBSa2UoZSx0KXtyZXR1cm4gZ24oMStZNy5jb3VudCh4dihlKSxlKSx0LDMpfWZ1bmN0aW9uIG1WdChlLHQpe3JldHVybiBnbihlLmdldFVUQ01pbGxpc2Vjb25kcygpLHQsMyl9ZnVuY3Rpb24gTmtlKGUsdCl7cmV0dXJuIG1WdChlLHQpKyIwMDAifWZ1bmN0aW9uIERrZShlLHQpe3JldHVybiBnbihlLmdldFVUQ01vbnRoKCkrMSx0LDIpfWZ1bmN0aW9uIE9rZShlLHQpe3JldHVybiBnbihlLmdldFVUQ01pbnV0ZXMoKSx0LDIpfWZ1bmN0aW9uIHprZShlLHQpe3JldHVybiBnbihlLmdldFVUQ1NlY29uZHMoKSx0LDIpfWZ1bmN0aW9uIEZrZShlKXt2YXIgdD1lLmdldFVUQ0RheSgpO3JldHVybiB0PT09MD83OnR9ZnVuY3Rpb24gQmtlKGUsdCl7cmV0dXJuIGduKFVDLmNvdW50KHh2KGUpLGUpLHQsMil9ZnVuY3Rpb24gSGtlKGUsdCl7dmFyIHI9ZS5nZXRVVENEYXkoKTtyZXR1cm4gZT1yPj00fHxyPT09MD9xdyhlKTpxdy5jZWlsKGUpLGduKHF3LmNvdW50KHh2KGUpLGUpKyh4dihlKS5nZXRVVENEYXkoKT09PTQpLHQsMil9ZnVuY3Rpb24gVmtlKGUpe3JldHVybiBlLmdldFVUQ0RheSgpfWZ1bmN0aW9uIFVrZShlLHQpe3JldHVybiBnbihVdy5jb3VudCh4dihlKSxlKSx0LDIpfWZ1bmN0aW9uIHFrZShlLHQpe3JldHVybiBnbihlLmdldFVUQ0Z1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gR2tlKGUsdCl7cmV0dXJuIGduKGUuZ2V0VVRDRnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiBXa2UoKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIGhWdCgpe3JldHVybiIlIn1mdW5jdGlvbiBmVnQoZSl7cmV0dXJuK2V9ZnVuY3Rpb24gcFZ0KGUpe3JldHVybiBNYXRoLmZsb29yKCtlLzFlMyl9dmFyIGFWdCxWbyxLTGUsWkxlLGJydD1NKCgpPT57b1Z0KCk7YVZ0PXsiLSI6IiIsXzoiICIsMDoiMCJ9LFZvPS9eXHMqXGQrLyxLTGU9L14lLyxaTGU9L1tcXF4kKis/fFtcXSgpLnt9XS9nfSk7ZnVuY3Rpb24gWDcoZSl7cmV0dXJuIEd3PVlDKGUpLHdydD1Hdy5mb3JtYXQsU3J0PUd3LnBhcnNlLGpDPUd3LnV0Y0Zvcm1hdCxYQz1Hdy51dGNQYXJzZSxHd312YXIgR3csd3J0LFNydCxqQyxYQywkNz1NKCgpPT57YnJ0KCk7WDcoe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KX0pO2Z1bmN0aW9uIFlrZShlKXtyZXR1cm4gZS50b0lTT1N0cmluZygpfXZhciBNcnQsamtlLGdWdCxFcnQ9TSgoKT0+eyQ3KCk7TXJ0PSIlWS0lbS0lZFQlSDolTTolUy4lTFoiO2prZT1EYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZz9Za2U6akMoTXJ0KSxnVnQ9amtlfSk7ZnVuY3Rpb24gWGtlKGUpe3ZhciB0PW5ldyBEYXRlKGUpO3JldHVybiBpc05hTih0KT9udWxsOnR9dmFyICRrZSxfVnQseVZ0PU0oKCk9PntFcnQoKTskNygpOyRrZT0rbmV3IERhdGUoIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWiIpP1hrZTpYQyhNcnQpLF9WdD0ka2V9KTt2YXIgdlZ0PU0oKCk9PnskNygpO2JydCgpO0VydCgpO3lWdCgpfSk7ZnVuY3Rpb24gWXcoKXtyZXR1cm4gYnZ8fCh3VnQoS2tlKSxidj1KQy5ub3coKStKNyl9ZnVuY3Rpb24gS2tlKCl7YnY9MH1mdW5jdGlvbiB3digpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9ZnVuY3Rpb24gQ3J0KGUsdCxyKXt2YXIgbj1uZXcgd3Y7cmV0dXJuIG4ucmVzdGFydChlLHQsciksbn1mdW5jdGlvbiBBcnQoKXtZdygpLCsrV3c7Zm9yKHZhciBlPUs3LHQ7ZTspKHQ9YnYtZS5fdGltZSk+PTAmJmUuX2NhbGwuY2FsbChudWxsLHQpLGU9ZS5fbmV4dDstLVd3fWZ1bmN0aW9uIHhWdCgpe2J2PShaNz1KQy5ub3coKSkrSjcsV3c9S0M9MDt0cnl7QXJ0KCl9ZmluYWxseXtXdz0wLEprZSgpLGJ2PTB9fWZ1bmN0aW9uIFprZSgpe3ZhciBlPUpDLm5vdygpLHQ9ZS1aNzt0PmJWdCYmKEo3LT10LFo3PWUpfWZ1bmN0aW9uIEprZSgpe2Zvcih2YXIgZSx0PUs3LHIsbj0xLzA7dDspdC5fY2FsbD8obj50Ll90aW1lJiYobj10Ll90aW1lKSxlPXQsdD10Ll9uZXh0KToocj10Ll9uZXh0LHQuX25leHQ9bnVsbCx0PWU/ZS5fbmV4dD1yOks3PXIpO1pDPWUsVHJ0KG4pfWZ1bmN0aW9uIFRydChlKXtpZighV3cpe0tDJiYoS0M9Y2xlYXJUaW1lb3V0KEtDKSk7dmFyIHQ9ZS1idjt0PjI0PyhlPDEvMCYmKEtDPXNldFRpbWVvdXQoeFZ0LGUtSkMubm93KCktSjcpKSwkQyYmKCRDPWNsZWFySW50ZXJ2YWwoJEMpKSk6KCRDfHwoWjc9SkMubm93KCksJEM9c2V0SW50ZXJ2YWwoWmtlLGJWdCkpLFd3PTEsd1Z0KHhWdCkpfX12YXIgV3csS0MsJEMsYlZ0LEs3LFpDLFo3LGJ2LEo3LEpDLHdWdCxRNz1NKCgpPT57V3c9MCxLQz0wLCRDPTAsYlZ0PTFlMyxaNz0wLGJ2PTAsSjc9MCxKQz10eXBlb2YgcGVyZm9ybWFuY2U9PSJvYmplY3QiJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSx3VnQ9dHlwZW9mIHdpbmRvdz09Im9iamVjdCImJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24oZSl7c2V0VGltZW91dChlLDE3KX07d3YucHJvdG90eXBlPUNydC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnd2LHJlc3RhcnQ6ZnVuY3Rpb24oZSx0LHIpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7cj0ocj09bnVsbD9ZdygpOityKSsodD09bnVsbD8wOit0KSwhdGhpcy5fbmV4dCYmWkMhPT10aGlzJiYoWkM/WkMuX25leHQ9dGhpczpLNz10aGlzLFpDPXRoaXMpLHRoaXMuX2NhbGw9ZSx0aGlzLl90aW1lPXIsVHJ0KCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLFRydCgpKX19fSk7ZnVuY3Rpb24gU1Z0KGUsdCxyKXt2YXIgbj1uZXcgd3Y7cmV0dXJuIHQ9dD09bnVsbD8wOit0LG4ucmVzdGFydChmdW5jdGlvbihpKXtuLnN0b3AoKSxlKGkrdCl9LHQsciksbn12YXIgTVZ0PU0oKCk9PntRNygpfSk7ZnVuY3Rpb24gRVZ0KGUsdCxyKXt2YXIgbj1uZXcgd3YsaT10O3JldHVybiB0PT1udWxsPyhuLnJlc3RhcnQoZSx0LHIpLG4pOih0PSt0LHI9cj09bnVsbD9ZdygpOityLG4ucmVzdGFydChmdW5jdGlvbiBvKGEpe2ErPWksbi5yZXN0YXJ0KG8saSs9dCxyKSxlKGEpfSx0LHIpLG4pfXZhciBUVnQ9TSgoKT0+e1E3KCl9KTt2YXIgQ1Z0PU0oKCk9PntRNygpO01WdCgpO1RWdCgpfSk7dmFyIHR6LFBydCxJcnQ9TSgoKT0+e3R6PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixQcnQ9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOnR6LHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn19KTtmdW5jdGlvbiBjZChlKXt2YXIgdD1lKz0iIixyPXQuaW5kZXhPZigiOiIpO3JldHVybiByPj0wJiYodD1lLnNsaWNlKDAscikpIT09InhtbG5zIiYmKGU9ZS5zbGljZShyKzEpKSxQcnQuaGFzT3duUHJvcGVydHkodCk/e3NwYWNlOlBydFt0XSxsb2NhbDplfTplfXZhciBlej1NKCgpPT57SXJ0KCl9KTtmdW5jdGlvbiBRa2UoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vd25lckRvY3VtZW50LHI9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIHI9PT10eiYmdC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09dHo/dC5jcmVhdGVFbGVtZW50KGUpOnQuY3JlYXRlRWxlbWVudE5TKHIsZSl9fWZ1bmN0aW9uIHQ4ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiByeihlKXt2YXIgdD1jZChlKTtyZXR1cm4odC5sb2NhbD90OGU6UWtlKSh0KX12YXIgTHJ0PU0oKCk9PntleigpO0lydCgpfSk7ZnVuY3Rpb24gZThlKCl7fWZ1bmN0aW9uIFN2KGUpe3JldHVybiBlPT1udWxsP2U4ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IoZSl9fXZhciBuej1NKCgpPT57fSk7ZnVuY3Rpb24gQVZ0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1TdihlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPW5ldyBBcnJheShhKSxsLGMsdT0wO3U8YTsrK3UpKGw9b1t1XSkmJihjPWUuY2FsbChsLGwuX19kYXRhX18sdSxvKSkmJigiX19kYXRhX18iaW4gbCYmKGMuX19kYXRhX189bC5fX2RhdGFfXyksc1t1XT1jKTtyZXR1cm4gbmV3IG5vKG4sdGhpcy5fcGFyZW50cyl9dmFyIFBWdD1NKCgpPT57TWYoKTtueigpfSk7ZnVuY3Rpb24gcjhlKCl7cmV0dXJuW119ZnVuY3Rpb24gUUMoZSl7cmV0dXJuIGU9PW51bGw/cjhlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChlKX19dmFyIGtydD1NKCgpPT57fSk7ZnVuY3Rpb24gSVZ0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1RQyhlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49W10saT1bXSxvPTA7bzxyOysrbylmb3IodmFyIGE9dFtvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpKGw9YVtjXSkmJihuLnB1c2goZS5jYWxsKGwsbC5fX2RhdGFfXyxjLGEpKSxpLnB1c2gobCkpO3JldHVybiBuZXcgbm8obixpKX12YXIgTFZ0PU0oKCk9PntNZigpO2tydCgpfSk7ZnVuY3Rpb24gdEEoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyhlKX19dmFyIFJydD1NKCgpPT57fSk7ZnVuY3Rpb24ga1Z0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT10QShlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPVtdLGwsYz0wO2M8YTsrK2MpKGw9b1tjXSkmJmUuY2FsbChsLGwuX19kYXRhX18sYyxvKSYmcy5wdXNoKGwpO3JldHVybiBuZXcgbm8obix0aGlzLl9wYXJlbnRzKX12YXIgUlZ0PU0oKCk9PntNZigpO1JydCgpfSk7ZnVuY3Rpb24gaXooZSl7cmV0dXJuIG5ldyBBcnJheShlLmxlbmd0aCl9dmFyIE5ydD1NKCgpPT57fSk7ZnVuY3Rpb24gTlZ0KCl7cmV0dXJuIG5ldyBubyh0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcChpeiksdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gZUEoZSx0KXt0aGlzLm93bmVyRG9jdW1lbnQ9ZS5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPWUubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9fZGF0YV9fPXR9dmFyIERydD1NKCgpPT57TnJ0KCk7TWYoKTtlQS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmVBLGFwcGVuZENoaWxkOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGUsdGhpcy5fbmV4dCl9LGluc2VydEJlZm9yZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGUsdCl9LHF1ZXJ5U2VsZWN0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKGUpfSxxdWVyeVNlbGVjdG9yQWxsOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbChlKX19fSk7ZnVuY3Rpb24gRFZ0KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgT1Z0PU0oKCk9Pnt9KTtmdW5jdGlvbiBuOGUoZSx0LHIsbixpLG8pe2Zvcih2YXIgYT0wLHMsbD10Lmxlbmd0aCxjPW8ubGVuZ3RoO2E8YzsrK2EpKHM9dFthXSk/KHMuX19kYXRhX189b1thXSxuW2FdPXMpOnJbYV09bmV3IGVBKGUsb1thXSk7Zm9yKDthPGw7KythKShzPXRbYV0pJiYoaVthXT1zKX1mdW5jdGlvbiBpOGUoZSx0LHIsbixpLG8sYSl7dmFyIHMsbCxjPXt9LHU9dC5sZW5ndGgsaD1vLmxlbmd0aCxmPW5ldyBBcnJheSh1KSxwO2ZvcihzPTA7czx1OysrcykobD10W3NdKSYmKGZbc109cD16VnQrYS5jYWxsKGwsbC5fX2RhdGFfXyxzLHQpLHAgaW4gYz9pW3NdPWw6Y1twXT1sKTtmb3Iocz0wO3M8aDsrK3MpcD16VnQrYS5jYWxsKGUsb1tzXSxzLG8pLChsPWNbcF0pPyhuW3NdPWwsbC5fX2RhdGFfXz1vW3NdLGNbcF09bnVsbCk6cltzXT1uZXcgZUEoZSxvW3NdKTtmb3Iocz0wO3M8dTsrK3MpKGw9dFtzXSkmJmNbZltzXV09PT1sJiYoaVtzXT1sKX1mdW5jdGlvbiBGVnQoZSx0KXtpZighZSlyZXR1cm4gcD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLGM9LTEsdGhpcy5lYWNoKGZ1bmN0aW9uKFApe3BbKytjXT1QfSkscDt2YXIgcj10P2k4ZTpuOGUsbj10aGlzLl9wYXJlbnRzLGk9dGhpcy5fZ3JvdXBzO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1EVnQoZSkpO2Zvcih2YXIgbz1pLmxlbmd0aCxhPW5ldyBBcnJheShvKSxzPW5ldyBBcnJheShvKSxsPW5ldyBBcnJheShvKSxjPTA7YzxvOysrYyl7dmFyIHU9bltjXSxoPWlbY10sZj1oLmxlbmd0aCxwPWUuY2FsbCh1LHUmJnUuX19kYXRhX18sYyxuKSxkPXAubGVuZ3RoLGc9c1tjXT1uZXcgQXJyYXkoZCksXz1hW2NdPW5ldyBBcnJheShkKSx5PWxbY109bmV3IEFycmF5KGYpO3IodSxoLGcsXyx5LHAsdCk7Zm9yKHZhciB4PTAsYj0wLFMsQzt4PGQ7Kyt4KWlmKFM9Z1t4XSl7Zm9yKHg+PWImJihiPXgrMSk7IShDPV9bYl0pJiYrK2I8ZDspO1MuX25leHQ9Q3x8bnVsbH19cmV0dXJuIGE9bmV3IG5vKGEsbiksYS5fZW50ZXI9cyxhLl9leGl0PWwsYX12YXIgelZ0LEJWdD1NKCgpPT57TWYoKTtEcnQoKTtPVnQoKTt6VnQ9IiQifSk7ZnVuY3Rpb24gSFZ0KCl7cmV0dXJuIG5ldyBubyh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKGl6KSx0aGlzLl9wYXJlbnRzKX12YXIgVlZ0PU0oKCk9PntOcnQoKTtNZigpfSk7ZnVuY3Rpb24gVVZ0KGUsdCxyKXt2YXIgbj10aGlzLmVudGVyKCksaT10aGlzLG89dGhpcy5leGl0KCk7cmV0dXJuIG49dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZShuKTpuLmFwcGVuZChlKyIiKSx0IT1udWxsJiYoaT10KGkpKSxyPT1udWxsP28ucmVtb3ZlKCk6cihvKSxuJiZpP24ubWVyZ2UoaSkub3JkZXIoKTppfXZhciBxVnQ9TSgoKT0+e30pO2Z1bmN0aW9uIEdWdChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgbm8oYSx0aGlzLl9wYXJlbnRzKX12YXIgV1Z0PU0oKCk9PntNZigpfSk7ZnVuY3Rpb24gWVZ0KCl7Zm9yKHZhciBlPXRoaXMuX2dyb3Vwcyx0PS0xLHI9ZS5sZW5ndGg7Kyt0PHI7KWZvcih2YXIgbj1lW3RdLGk9bi5sZW5ndGgtMSxvPW5baV0sYTstLWk+PTA7KShhPW5baV0pJiYobyYmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihvKV40JiZvLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsbyksbz1hKTtyZXR1cm4gdGhpc312YXIgalZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBYVnQoZSl7ZXx8KGU9bzhlKTtmdW5jdGlvbiB0KGgsZil7cmV0dXJuIGgmJmY/ZShoLl9fZGF0YV9fLGYuX19kYXRhX18pOiFoLSFmfWZvcih2YXIgcj10aGlzLl9ncm91cHMsbj1yLmxlbmd0aCxpPW5ldyBBcnJheShuKSxvPTA7bzxuOysrbyl7Zm9yKHZhciBhPXJbb10scz1hLmxlbmd0aCxsPWlbb109bmV3IEFycmF5KHMpLGMsdT0wO3U8czsrK3UpKGM9YVt1XSkmJihsW3VdPWMpO2wuc29ydCh0KX1yZXR1cm4gbmV3IG5vKGksdGhpcy5fcGFyZW50cykub3JkZXIoKX1mdW5jdGlvbiBvOGUoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyICRWdD1NKCgpPT57TWYoKX0pO2Z1bmN0aW9uIEtWdCgpe3ZhciBlPWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsZS5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc312YXIgWlZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBKVnQoKXt2YXIgZT1uZXcgQXJyYXkodGhpcy5zaXplKCkpLHQ9LTE7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2VbKyt0XT10aGlzfSksZX12YXIgUVZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiB0VXQoKXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHQ9MCxyPWUubGVuZ3RoO3Q8cjsrK3QpZm9yKHZhciBuPWVbdF0saT0wLG89bi5sZW5ndGg7aTxvOysraSl7dmFyIGE9bltpXTtpZihhKXJldHVybiBhfXJldHVybiBudWxsfXZhciBlVXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHJVdCgpe3ZhciBlPTA7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpeysrZX0pLGV9dmFyIG5VdD1NKCgpPT57fSk7ZnVuY3Rpb24gaVV0KCl7cmV0dXJuIXRoaXMubm9kZSgpfXZhciBvVXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGFVdChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPXRbcl0sbz0wLGE9aS5sZW5ndGgscztvPGE7KytvKShzPWlbb10pJiZlLmNhbGwocyxzLl9fZGF0YV9fLG8saSk7cmV0dXJuIHRoaXN9dmFyIHNVdD1NKCgpPT57fSk7ZnVuY3Rpb24gYThlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBzOGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBsOGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShlLHQpfX1mdW5jdGlvbiBjOGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCx0KX19ZnVuY3Rpb24gdThlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD90aGlzLnJlbW92ZUF0dHJpYnV0ZShlKTp0aGlzLnNldEF0dHJpYnV0ZShlLHIpfX1mdW5jdGlvbiBoOGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCxyKX19ZnVuY3Rpb24gbFV0KGUsdCl7dmFyIHI9Y2QoZSk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgbj10aGlzLm5vZGUoKTtyZXR1cm4gci5sb2NhbD9uLmdldEF0dHJpYnV0ZU5TKHIuc3BhY2Usci5sb2NhbCk6bi5nZXRBdHRyaWJ1dGUocil9cmV0dXJuIHRoaXMuZWFjaCgodD09bnVsbD9yLmxvY2FsP3M4ZTphOGU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/ci5sb2NhbD9oOGU6dThlOnIubG9jYWw/YzhlOmw4ZSkocix0KSl9dmFyIGNVdD1NKCgpPT57ZXooKX0pO2Z1bmN0aW9uIG96KGUpe3JldHVybiBlLm93bmVyRG9jdW1lbnQmJmUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8ZS5kb2N1bWVudCYmZXx8ZS5kZWZhdWx0Vmlld312YXIgT3J0PU0oKCk9Pnt9KTtmdW5jdGlvbiBmOGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKX19ZnVuY3Rpb24gcDhlKGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUsdCxyKX19ZnVuY3Rpb24gZDhlKGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtuPT1udWxsP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLG4scil9fWZ1bmN0aW9uIHVVdChlLHQscil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKHQ9PW51bGw/ZjhlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP2Q4ZTpwOGUpKGUsdCxyPT1udWxsPyIiOnIpKTpIZyh0aGlzLm5vZGUoKSxlKX1mdW5jdGlvbiBIZyhlLHQpe3JldHVybiBlLnN0eWxlLmdldFByb3BlcnR5VmFsdWUodCl8fG96KGUpLmdldENvbXB1dGVkU3R5bGUoZSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHQpfXZhciB6cnQ9TSgoKT0+e09ydCgpfSk7ZnVuY3Rpb24gbThlKGUpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW2VdfX1mdW5jdGlvbiBnOGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW2VdPXR9fWZ1bmN0aW9uIF84ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/ZGVsZXRlIHRoaXNbZV06dGhpc1tlXT1yfX1mdW5jdGlvbiBoVXQoZSx0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD9tOGU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/XzhlOmc4ZSkoZSx0KSk6dGhpcy5ub2RlKClbZV19dmFyIGZVdD1NKCgpPT57fSk7ZnVuY3Rpb24gcFV0KGUpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBGcnQoZSl7cmV0dXJuIGUuY2xhc3NMaXN0fHxuZXcgZFV0KGUpfWZ1bmN0aW9uIGRVdChlKXt0aGlzLl9ub2RlPWUsdGhpcy5fbmFtZXM9cFV0KGUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gbVV0KGUsdCl7Zm9yKHZhciByPUZydChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIuYWRkKHRbbl0pfWZ1bmN0aW9uIGdVdChlLHQpe2Zvcih2YXIgcj1GcnQoZSksbj0tMSxpPXQubGVuZ3RoOysrbjxpOylyLnJlbW92ZSh0W25dKX1mdW5jdGlvbiB5OGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7bVV0KHRoaXMsZSl9fWZ1bmN0aW9uIHY4ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtnVXQodGhpcyxlKX19ZnVuY3Rpb24geDhlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7KHQuYXBwbHkodGhpcyxhcmd1bWVudHMpP21VdDpnVXQpKHRoaXMsZSl9fWZ1bmN0aW9uIF9VdChlLHQpe3ZhciByPXBVdChlKyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgbj1GcnQodGhpcy5ub2RlKCkpLGk9LTEsbz1yLmxlbmd0aDsrK2k8bzspaWYoIW4uY29udGFpbnMocltpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHQ9PSJmdW5jdGlvbiI/eDhlOnQ/eThlOnY4ZSkocix0KSl9dmFyIHlVdD1NKCgpPT57ZFV0LnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2YoZSk7dDwwJiYodGhpcy5fbmFtZXMucHVzaChlKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihlKTt0Pj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKHQsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YoZSk+PTB9fX0pO2Z1bmN0aW9uIGI4ZSgpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24gdzhlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9ZX19ZnVuY3Rpb24gUzhlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiB2VXQoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGU9PW51bGw/YjhlOih0eXBlb2YgZT09ImZ1bmN0aW9uIj9TOGU6dzhlKShlKSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9dmFyIHhVdD1NKCgpPT57fSk7ZnVuY3Rpb24gTThlKCl7dGhpcy5pbm5lckhUTUw9IiJ9ZnVuY3Rpb24gRThlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPWV9fWZ1bmN0aW9uIFQ4ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIGJVdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD9NOGU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP1Q4ZTpFOGUpKGUpKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9dmFyIHdVdD1NKCgpPT57fSk7ZnVuY3Rpb24gQzhlKCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIFNVdCgpe3JldHVybiB0aGlzLmVhY2goQzhlKX12YXIgTVV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBBOGUoKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX1mdW5jdGlvbiBFVXQoKXtyZXR1cm4gdGhpcy5lYWNoKEE4ZSl9dmFyIFRVdD1NKCgpPT57fSk7ZnVuY3Rpb24gQ1V0KGUpe3ZhciB0PXR5cGVvZiBlPT0iZnVuY3Rpb24iP2U6cnooZSk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQodC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9dmFyIEFVdD1NKCgpPT57THJ0KCl9KTtmdW5jdGlvbiBQOGUoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBQVXQoZSx0KXt2YXIgcj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lOnJ6KGUpLG49dD09bnVsbD9QOGU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpTdih0KTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoci5hcHBseSh0aGlzLGFyZ3VtZW50cyksbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9dmFyIElVdD1NKCgpPT57THJ0KCk7bnooKX0pO2Z1bmN0aW9uIEk4ZSgpe3ZhciBlPXRoaXMucGFyZW50Tm9kZTtlJiZlLnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIExVdCgpe3JldHVybiB0aGlzLmVhY2goSThlKX12YXIga1V0PU0oKCk9Pnt9KTtmdW5jdGlvbiBMOGUoKXt2YXIgZT10aGlzLmNsb25lTm9kZSghMSksdD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIHQ/dC5pbnNlcnRCZWZvcmUoZSx0aGlzLm5leHRTaWJsaW5nKTplfWZ1bmN0aW9uIGs4ZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCEwKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24gUlV0KGUpe3JldHVybiB0aGlzLnNlbGVjdChlP2s4ZTpMOGUpfXZhciBOVXQ9TSgoKT0+e30pO2Z1bmN0aW9uIERVdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsZSk6dGhpcy5ub2RlKCkuX19kYXRhX199dmFyIE9VdD1NKCgpPT57fSk7ZnVuY3Rpb24gUjhlKGUsdCxyKXtyZXR1cm4gZT1CVXQoZSx0LHIpLGZ1bmN0aW9uKG4pe3ZhciBpPW4ucmVsYXRlZFRhcmdldDsoIWl8fGkhPT10aGlzJiYhKGkuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykmOCkpJiZlLmNhbGwodGhpcyxuKX19ZnVuY3Rpb24gQlV0KGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9QnJ0O0JydD1uO3RyeXtlLmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLHQscil9ZmluYWxseXtCcnQ9aX19fWZ1bmN0aW9uIE44ZShlKXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciByPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihyPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOnJ9fSl9ZnVuY3Rpb24gRDhlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMuX19vbjtpZighIXQpe2Zvcih2YXIgcj0wLG49LTEsaT10Lmxlbmd0aCxvO3I8aTsrK3Ipbz10W3JdLCghZS50eXBlfHxvLnR5cGU9PT1lLnR5cGUpJiZvLm5hbWU9PT1lLm5hbWU/dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG8udHlwZSxvLmxpc3RlbmVyLG8uY2FwdHVyZSk6dFsrK25dPW87KytuP3QubGVuZ3RoPW46ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIE84ZShlLHQscil7dmFyIG49RlV0Lmhhc093blByb3BlcnR5KGUudHlwZSk/UjhlOkJVdDtyZXR1cm4gZnVuY3Rpb24oaSxvLGEpe3ZhciBzPXRoaXMuX19vbixsLGM9bih0LG8sYSk7aWYocyl7Zm9yKHZhciB1PTAsaD1zLmxlbmd0aDt1PGg7Kyt1KWlmKChsPXNbdV0pLnR5cGU9PT1lLnR5cGUmJmwubmFtZT09PWUubmFtZSl7dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyLGwuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyPWMsbC5jYXB0dXJlPXIpLGwudmFsdWU9dDtyZXR1cm59fXRoaXMuYWRkRXZlbnRMaXN0ZW5lcihlLnR5cGUsYyxyKSxsPXt0eXBlOmUudHlwZSxuYW1lOmUubmFtZSx2YWx1ZTp0LGxpc3RlbmVyOmMsY2FwdHVyZTpyfSxzP3MucHVzaChsKTp0aGlzLl9fb249W2xdfX1mdW5jdGlvbiBIVXQoZSx0LHIpe3ZhciBuPU44ZShlKyIiKSxpLG89bi5sZW5ndGgsYTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBzPXRoaXMubm9kZSgpLl9fb247aWYocyl7Zm9yKHZhciBsPTAsYz1zLmxlbmd0aCx1O2w8YzsrK2wpZm9yKGk9MCx1PXNbbF07aTxvOysraSlpZigoYT1uW2ldKS50eXBlPT09dS50eXBlJiZhLm5hbWU9PT11Lm5hbWUpcmV0dXJuIHUudmFsdWV9cmV0dXJufWZvcihzPXQ/TzhlOkQ4ZSxyPT1udWxsJiYocj0hMSksaT0wO2k8bzsrK2kpdGhpcy5lYWNoKHMobltpXSx0LHIpKTtyZXR1cm4gdGhpc312YXIgRlV0LEJydCx6VXQsVlV0PU0oKCk9PntGVXQ9e30sQnJ0PW51bGw7dHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmKHpVdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIm9ubW91c2VlbnRlciJpbiB6VXR8fChGVXQ9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpfSk7ZnVuY3Rpb24gVVV0KGUsdCxyKXt2YXIgbj1veihlKSxpPW4uQ3VzdG9tRXZlbnQ7dHlwZW9mIGk9PSJmdW5jdGlvbiI/aT1uZXcgaSh0LHIpOihpPW4uZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iikscj8oaS5pbml0RXZlbnQodCxyLmJ1YmJsZXMsci5jYW5jZWxhYmxlKSxpLmRldGFpbD1yLmRldGFpbCk6aS5pbml0RXZlbnQodCwhMSwhMSkpLGUuZGlzcGF0Y2hFdmVudChpKX1mdW5jdGlvbiB6OGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gVVV0KHRoaXMsZSx0KX19ZnVuY3Rpb24gRjhlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFVVdCh0aGlzLGUsdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBxVXQoZSx0KXtyZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9GOGU6ejhlKShlLHQpKX12YXIgR1V0PU0oKCk9PntPcnQoKX0pO2Z1bmN0aW9uIG5vKGUsdCl7dGhpcy5fZ3JvdXBzPWUsdGhpcy5fcGFyZW50cz10fWZ1bmN0aW9uIFdVdCgpe3JldHVybiBuZXcgbm8oW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSxCOGUpfXZhciBCOGUsdWQsTWY9TSgoKT0+e1BWdCgpO0xWdCgpO1JWdCgpO0JWdCgpO0RydCgpO1ZWdCgpO3FWdCgpO1dWdCgpO2pWdCgpOyRWdCgpO1pWdCgpO1FWdCgpO2VVdCgpO25VdCgpO29VdCgpO3NVdCgpO2NVdCgpO3pydCgpO2ZVdCgpO3lVdCgpO3hVdCgpO3dVdCgpO01VdCgpO1RVdCgpO0FVdCgpO0lVdCgpO2tVdCgpO05VdCgpO09VdCgpO1ZVdCgpO0dVdCgpO0I4ZT1bbnVsbF07bm8ucHJvdG90eXBlPVdVdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm5vLHNlbGVjdDpBVnQsc2VsZWN0QWxsOklWdCxmaWx0ZXI6a1Z0LGRhdGE6RlZ0LGVudGVyOk5WdCxleGl0OkhWdCxqb2luOlVWdCxtZXJnZTpHVnQsb3JkZXI6WVZ0LHNvcnQ6WFZ0LGNhbGw6S1Z0LG5vZGVzOkpWdCxub2RlOnRVdCxzaXplOnJVdCxlbXB0eTppVXQsZWFjaDphVXQsYXR0cjpsVXQsc3R5bGU6dVV0LHByb3BlcnR5OmhVdCxjbGFzc2VkOl9VdCx0ZXh0OnZVdCxodG1sOmJVdCxyYWlzZTpTVXQsbG93ZXI6RVV0LGFwcGVuZDpDVXQsaW5zZXJ0OlBVdCxyZW1vdmU6TFV0LGNsb25lOlJVdCxkYXR1bTpEVXQsb246SFV0LGRpc3BhdGNoOnFVdH07dWQ9V1V0fSk7dmFyIEVmPU0oKCk9PntScnQoKTtleigpO01mKCk7bnooKTtrcnQoKTt6cnQoKX0pO2Z1bmN0aW9uIGpVdCgpe2Zvcih2YXIgZT0wLHQ9YXJndW1lbnRzLmxlbmd0aCxyPXt9LG47ZTx0OysrZSl7aWYoIShuPWFyZ3VtZW50c1tlXSsiIil8fG4gaW4gcnx8L1tccy5dLy50ZXN0KG4pKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK24pO3Jbbl09W119cmV0dXJuIG5ldyBheihyKX1mdW5jdGlvbiBheihlKXt0aGlzLl89ZX1mdW5jdGlvbiBWOGUoZSx0KXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHIpe3ZhciBuPSIiLGk9ci5pbmRleE9mKCIuIik7aWYoaT49MCYmKG49ci5zbGljZShpKzEpLHI9ci5zbGljZSgwLGkpKSxyJiYhdC5oYXNPd25Qcm9wZXJ0eShyKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIityKTtyZXR1cm57dHlwZTpyLG5hbWU6bn19KX1mdW5jdGlvbiBVOGUoZSx0KXtmb3IodmFyIHI9MCxuPWUubGVuZ3RoLGk7cjxuOysrcilpZigoaT1lW3JdKS5uYW1lPT09dClyZXR1cm4gaS52YWx1ZX1mdW5jdGlvbiBZVXQoZSx0LHIpe2Zvcih2YXIgbj0wLGk9ZS5sZW5ndGg7bjxpOysrbilpZihlW25dLm5hbWU9PT10KXtlW25dPUg4ZSxlPWUuc2xpY2UoMCxuKS5jb25jYXQoZS5zbGljZShuKzEpKTticmVha31yZXR1cm4gciE9bnVsbCYmZS5wdXNoKHtuYW1lOnQsdmFsdWU6cn0pLGV9dmFyIEg4ZSxIcnQsWFV0PU0oKCk9PntIOGU9e3ZhbHVlOmZ1bmN0aW9uKCl7fX07YXoucHJvdG90eXBlPWpVdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmF6LG9uOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fLG49VjhlKGUrIiIsciksaSxvPS0xLGE9bi5sZW5ndGg7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IoOysrbzxhOylpZigoaT0oZT1uW29dKS50eXBlKSYmKGk9VThlKHJbaV0sZS5uYW1lKSkpcmV0dXJuIGk7cmV0dXJufWlmKHQhPW51bGwmJnR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIit0KTtmb3IoOysrbzxhOylpZihpPShlPW5bb10pLnR5cGUpcltpXT1ZVXQocltpXSxlLm5hbWUsdCk7ZWxzZSBpZih0PT1udWxsKWZvcihpIGluIHIpcltpXT1ZVXQocltpXSxlLm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9LGNvcHk6ZnVuY3Rpb24oKXt2YXIgZT17fSx0PXRoaXMuXztmb3IodmFyIHIgaW4gdCllW3JdPXRbcl0uc2xpY2UoKTtyZXR1cm4gbmV3IGF6KGUpfSxjYWxsOmZ1bmN0aW9uKGUsdCl7aWYoKGk9YXJndW1lbnRzLmxlbmd0aC0yKT4wKWZvcih2YXIgcj1uZXcgQXJyYXkoaSksbj0wLGksbztuPGk7KytuKXJbbl09YXJndW1lbnRzW24rMl07aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3Iobz10aGlzLl9bZV0sbj0wLGk9by5sZW5ndGg7bjxpOysrbilvW25dLnZhbHVlLmFwcGx5KHQscil9LGFwcGx5OmZ1bmN0aW9uKGUsdCxyKXtpZighdGhpcy5fLmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO2Zvcih2YXIgbj10aGlzLl9bZV0saT0wLG89bi5sZW5ndGg7aTxvOysraSluW2ldLnZhbHVlLmFwcGx5KHQscil9fTtIcnQ9alV0fSk7dmFyICRVdD1NKCgpPT57WFV0KCl9KTtmdW5jdGlvbiBYdygpe3JldHVybiBNdnx8KEpVdChxOGUpLE12PW9BLm5vdygpK2N6KX1mdW5jdGlvbiBxOGUoKXtNdj0wfWZ1bmN0aW9uIGFBKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiB1eihlLHQscil7dmFyIG49bmV3IGFBO3JldHVybiBuLnJlc3RhcnQoZSx0LHIpLG59ZnVuY3Rpb24gUVV0KCl7WHcoKSwrK2p3O2Zvcih2YXIgZT1zeix0O2U7KSh0PU12LWUuX3RpbWUpPj0wJiZlLl9jYWxsLmNhbGwobnVsbCx0KSxlPWUuX25leHQ7LS1qd31mdW5jdGlvbiBLVXQoKXtNdj0obHo9b0Eubm93KCkpK2N6LGp3PW5BPTA7dHJ5e1FVdCgpfWZpbmFsbHl7anc9MCxXOGUoKSxNdj0wfX1mdW5jdGlvbiBHOGUoKXt2YXIgZT1vQS5ub3coKSx0PWUtbHo7dD5aVXQmJihjei09dCxsej1lKX1mdW5jdGlvbiBXOGUoKXtmb3IodmFyIGUsdD1zeixyLG49MS8wO3Q7KXQuX2NhbGw/KG4+dC5fdGltZSYmKG49dC5fdGltZSksZT10LHQ9dC5fbmV4dCk6KHI9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1lP2UuX25leHQ9cjpzej1yKTtpQT1lLFZydChuKX1mdW5jdGlvbiBWcnQoZSl7aWYoIWp3KXtuQSYmKG5BPWNsZWFyVGltZW91dChuQSkpO3ZhciB0PWUtTXY7dD4yND8oZTwxLzAmJihuQT1zZXRUaW1lb3V0KEtVdCxlLW9BLm5vdygpLWN6KSksckEmJihyQT1jbGVhckludGVydmFsKHJBKSkpOihyQXx8KGx6PW9BLm5vdygpLHJBPXNldEludGVydmFsKEc4ZSxaVXQpKSxqdz0xLEpVdChLVXQpKX19dmFyIGp3LG5BLHJBLFpVdCxzeixpQSxseixNdixjeixvQSxKVXQsVXJ0PU0oKCk9Pntqdz0wLG5BPTAsckE9MCxaVXQ9MWUzLGx6PTAsTXY9MCxjej0wLG9BPXR5cGVvZiBwZXJmb3JtYW5jZT09Im9iamVjdCImJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLEpVdD10eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbihlKXtzZXRUaW1lb3V0KGUsMTcpfTthQS5wcm90b3R5cGU9dXoucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjphQSxyZXN0YXJ0OmZ1bmN0aW9uKGUsdCxyKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO3I9KHI9PW51bGw/WHcoKTorcikrKHQ9PW51bGw/MDordCksIXRoaXMuX25leHQmJmlBIT09dGhpcyYmKGlBP2lBLl9uZXh0PXRoaXM6c3o9dGhpcyxpQT10aGlzKSx0aGlzLl9jYWxsPWUsdGhpcy5fdGltZT1yLFZydCgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxWcnQoKSl9fX0pO2Z1bmN0aW9uIGh6KGUsdCxyKXt2YXIgbj1uZXcgYUE7cmV0dXJuIHQ9dD09bnVsbD8wOit0LG4ucmVzdGFydChmdW5jdGlvbihpKXtuLnN0b3AoKSxlKGkrdCl9LHQsciksbn12YXIgdHF0PU0oKCk9PntVcnQoKX0pO3ZhciBxcnQ9TSgoKT0+e1VydCgpO3RxdCgpfSk7ZnVuY3Rpb24gVmcoZSx0LHIsbixpLG8pe3ZhciBhPWUuX190cmFuc2l0aW9uO2lmKCFhKWUuX190cmFuc2l0aW9uPXt9O2Vsc2UgaWYociBpbiBhKXJldHVybjtYOGUoZSxyLHtuYW1lOnQsaW5kZXg6bixncm91cDppLG9uOlk4ZSx0d2VlbjpqOGUsdGltZTpvLnRpbWUsZGVsYXk6by5kZWxheSxkdXJhdGlvbjpvLmR1cmF0aW9uLGVhc2U6by5lYXNlLHRpbWVyOm51bGwsc3RhdGU6cnF0fSl9ZnVuY3Rpb24gY0EoZSx0KXt2YXIgcj1pbyhlLHQpO2lmKHIuc3RhdGU+cnF0KXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgc2NoZWR1bGVkIik7cmV0dXJuIHJ9ZnVuY3Rpb24gRHUoZSx0KXt2YXIgcj1pbyhlLHQpO2lmKHIuc3RhdGU+bEEpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzdGFydGVkIik7cmV0dXJuIHJ9ZnVuY3Rpb24gaW8oZSx0KXt2YXIgcj1lLl9fdHJhbnNpdGlvbjtpZighcnx8IShyPXJbdF0pKXRocm93IG5ldyBFcnJvcigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gcn1mdW5jdGlvbiBYOGUoZSx0LHIpe3ZhciBuPWUuX190cmFuc2l0aW9uLGk7blt0XT1yLHIudGltZXI9dXoobywwLHIudGltZSk7ZnVuY3Rpb24gbyhjKXtyLnN0YXRlPWZ6LHIudGltZXIucmVzdGFydChhLHIuZGVsYXksci50aW1lKSxyLmRlbGF5PD1jJiZhKGMtci5kZWxheSl9ZnVuY3Rpb24gYShjKXt2YXIgdSxoLGYscDtpZihyLnN0YXRlIT09ZnopcmV0dXJuIGwoKTtmb3IodSBpbiBuKWlmKHA9blt1XSxwLm5hbWU9PT1yLm5hbWUpe2lmKHAuc3RhdGU9PT1HcnQpcmV0dXJuIGh6KGEpO3Auc3RhdGU9PT1lcXQ/KHAuc3RhdGU9c0EscC50aW1lci5zdG9wKCkscC5vbi5jYWxsKCJpbnRlcnJ1cHQiLGUsZS5fX2RhdGFfXyxwLmluZGV4LHAuZ3JvdXApLGRlbGV0ZSBuW3VdKTordTx0JiYocC5zdGF0ZT1zQSxwLnRpbWVyLnN0b3AoKSxkZWxldGUgblt1XSl9aWYoaHooZnVuY3Rpb24oKXtyLnN0YXRlPT09R3J0JiYoci5zdGF0ZT1lcXQsci50aW1lci5yZXN0YXJ0KHMsci5kZWxheSxyLnRpbWUpLHMoYykpfSksci5zdGF0ZT1sQSxyLm9uLmNhbGwoInN0YXJ0IixlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxyLnN0YXRlPT09bEEpe2ZvcihyLnN0YXRlPUdydCxpPW5ldyBBcnJheShmPXIudHdlZW4ubGVuZ3RoKSx1PTAsaD0tMTt1PGY7Kyt1KShwPXIudHdlZW5bdV0udmFsdWUuY2FsbChlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSkmJihpWysraF09cCk7aS5sZW5ndGg9aCsxfX1mdW5jdGlvbiBzKGMpe2Zvcih2YXIgdT1jPHIuZHVyYXRpb24/ci5lYXNlLmNhbGwobnVsbCxjL3IuZHVyYXRpb24pOihyLnRpbWVyLnJlc3RhcnQobCksci5zdGF0ZT1weiwxKSxoPS0xLGY9aS5sZW5ndGg7KytoPGY7KWlbaF0uY2FsbChudWxsLHUpO3Iuc3RhdGU9PT1weiYmKHIub24uY2FsbCgiZW5kIixlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxsKCkpfWZ1bmN0aW9uIGwoKXtyLnN0YXRlPXNBLHIudGltZXIuc3RvcCgpLGRlbGV0ZSBuW3RdO2Zvcih2YXIgYyBpbiBuKXJldHVybjtkZWxldGUgZS5fX3RyYW5zaXRpb259fXZhciBZOGUsajhlLHJxdCxmeixsQSxHcnQsZXF0LHB6LHNBLEFjPU0oKCk9PnskVXQoKTtxcnQoKTtZOGU9SHJ0KCJzdGFydCIsImVuZCIsImludGVycnVwdCIpLGo4ZT1bXSxycXQ9MCxmej0xLGxBPTIsR3J0PTMsZXF0PTQscHo9NSxzQT02fSk7ZnVuY3Rpb24gZHooZSx0KXt2YXIgcj1lLl9fdHJhbnNpdGlvbixuLGksbz0hMCxhO2lmKCEhcil7dD10PT1udWxsP251bGw6dCsiIjtmb3IoYSBpbiByKXtpZigobj1yW2FdKS5uYW1lIT09dCl7bz0hMTtjb250aW51ZX1pPW4uc3RhdGU+bEEmJm4uc3RhdGU8cHosbi5zdGF0ZT1zQSxuLnRpbWVyLnN0b3AoKSxpJiZuLm9uLmNhbGwoImludGVycnVwdCIsZSxlLl9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCksZGVsZXRlIHJbYV19byYmZGVsZXRlIGUuX190cmFuc2l0aW9ufX12YXIgV3J0PU0oKCk9PntBYygpfSk7ZnVuY3Rpb24gbnF0KGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtkeih0aGlzLGUpfSl9dmFyIGlxdD1NKCgpPT57V3J0KCl9KTtmdW5jdGlvbiBteihlLHQscil7ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gWXJ0KGUsdCl7dmFyIHI9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSk7Zm9yKHZhciBuIGluIHQpcltuXT10W25dO3JldHVybiByfXZhciBvcXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGZBKCl7fWZ1bmN0aW9uIHNxdCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIHJSZSgpe3JldHVybiBwcXQodGhpcykuZm9ybWF0SHNsKCl9ZnVuY3Rpb24gbHF0KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gVWcoZSl7dmFyIHQscjtyZXR1cm4gZT0oZSsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKHQ9JDhlLmV4ZWMoZSkpPyhyPXRbMV0ubGVuZ3RoLHQ9cGFyc2VJbnQodFsxXSwxNikscj09PTY/Y3F0KHQpOnI9PT0zP25ldyBnbCh0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKHQmMTUpPDw0fHQmMTUsMSk6cj09PTg/Z3oodD4+MjQmMjU1LHQ+PjE2JjI1NSx0Pj44JjI1NSwodCYyNTUpLzI1NSk6cj09PTQ/Z3oodD4+MTImMTV8dD4+OCYyNDAsdD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fHQmMjQwLCgodCYxNSk8PDR8dCYxNSkvMjU1KTpudWxsKToodD1LOGUuZXhlYyhlKSk/bmV3IGdsKHRbMV0sdFsyXSx0WzNdLDEpOih0PVo4ZS5leGVjKGUpKT9uZXcgZ2wodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsMSk6KHQ9SjhlLmV4ZWMoZSkpP2d6KHRbMV0sdFsyXSx0WzNdLHRbNF0pOih0PVE4ZS5leGVjKGUpKT9neih0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCx0WzRdKToodD10UmUuZXhlYyhlKSk/ZnF0KHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsMSk6KHQ9ZVJlLmV4ZWMoZSkpP2ZxdCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLHRbNF0pOmFxdC5oYXNPd25Qcm9wZXJ0eShlKT9jcXQoYXF0W2VdKTplPT09InRyYW5zcGFyZW50Ij9uZXcgZ2woTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBjcXQoZSl7cmV0dXJuIG5ldyBnbChlPj4xNiYyNTUsZT4+OCYyNTUsZSYyNTUsMSl9ZnVuY3Rpb24gZ3ooZSx0LHIsbil7cmV0dXJuIG48PTAmJihlPXQ9cj1OYU4pLG5ldyBnbChlLHQscixuKX1mdW5jdGlvbiBuUmUoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBmQXx8KGU9VWcoZSkpLGU/KGU9ZS5yZ2IoKSxuZXcgZ2woZS5yLGUuZyxlLmIsZS5vcGFjaXR5KSk6bmV3IGdsfWZ1bmN0aW9uIEt3KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9uUmUoZSk6bmV3IGdsKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBnbChlLHQscixuKXt0aGlzLnI9K2UsdGhpcy5nPSt0LHRoaXMuYj0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gdXF0KCl7cmV0dXJuIiMiK2pydCh0aGlzLnIpK2pydCh0aGlzLmcpK2pydCh0aGlzLmIpfWZ1bmN0aW9uIGhxdCgpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX1mdW5jdGlvbiBqcnQoZSl7cmV0dXJuIGU9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZChlKXx8MCkpLChlPDE2PyIwIjoiIikrZS50b1N0cmluZygxNil9ZnVuY3Rpb24gZnF0KGUsdCxyLG4pe3JldHVybiBuPD0wP2U9dD1yPU5hTjpyPD0wfHxyPj0xP2U9dD1OYU46dDw9MCYmKGU9TmFOKSxuZXcgVGYoZSx0LHIsbil9ZnVuY3Rpb24gcHF0KGUpe2lmKGUgaW5zdGFuY2VvZiBUZilyZXR1cm4gbmV3IFRmKGUuaCxlLnMsZS5sLGUub3BhY2l0eSk7aWYoZSBpbnN0YW5jZW9mIGZBfHwoZT1VZyhlKSksIWUpcmV0dXJuIG5ldyBUZjtpZihlIGluc3RhbmNlb2YgVGYpcmV0dXJuIGU7ZT1lLnJnYigpO3ZhciB0PWUuci8yNTUscj1lLmcvMjU1LG49ZS5iLzI1NSxpPU1hdGgubWluKHQscixuKSxvPU1hdGgubWF4KHQscixuKSxhPU5hTixzPW8taSxsPShvK2kpLzI7cmV0dXJuIHM/KHQ9PT1vP2E9KHItbikvcysocjxuKSo2OnI9PT1vP2E9KG4tdCkvcysyOmE9KHQtcikvcys0LHMvPWw8LjU/bytpOjItby1pLGEqPTYwKTpzPWw+MCYmbDwxPzA6YSxuZXcgVGYoYSxzLGwsZS5vcGFjaXR5KX1mdW5jdGlvbiBkcXQoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP3BxdChlKTpuZXcgVGYoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIFRmKGUsdCxyLG4pe3RoaXMuaD0rZSx0aGlzLnM9K3QsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBYcnQoZSx0LHIpe3JldHVybihlPDYwP3QrKHItdCkqZS82MDplPDE4MD9yOmU8MjQwP3QrKHItdCkqKDI0MC1lKS82MDp0KSoyNTV9dmFyIHVBLF96LCR3LGhBLENmLCQ4ZSxLOGUsWjhlLEo4ZSxROGUsdFJlLGVSZSxhcXQsbXF0PU0oKCk9PntvcXQoKTt1QT0uNyxfej0xL3VBLCR3PSJcXHMqKFsrLV0/XFxkKylcXHMqIixoQT0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixDZj0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsJDhlPS9eIyhbMC05YS1mXXszLDh9KSQvLEs4ZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbJHcsJHcsJHddKyJcXCkkIiksWjhlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tDZixDZixDZl0rIlxcKSQiKSxKOGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1skdywkdywkdyxoQV0rIlxcKSQiKSxROGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tDZixDZixDZixoQV0rIlxcKSQiKSx0UmU9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW2hBLENmLENmXSsiXFwpJCIpLGVSZT1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW2hBLENmLENmLGhBXSsiXFwpJCIpLGFxdD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtteihmQSxVZyx7Y29weTpmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLGUpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDpzcXQsZm9ybWF0SGV4OnNxdCxmb3JtYXRIc2w6clJlLGZvcm1hdFJnYjpscXQsdG9TdHJpbmc6bHF0fSk7bXooZ2wsS3csWXJ0KGZBLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP196Ok1hdGgucG93KF96LGUpLG5ldyBnbCh0aGlzLnIqZSx0aGlzLmcqZSx0aGlzLmIqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD91QTpNYXRoLnBvdyh1QSxlKSxuZXcgZ2wodGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuLS41PD10aGlzLnImJnRoaXMucjwyNTUuNSYmLS41PD10aGlzLmcmJnRoaXMuZzwyNTUuNSYmLS41PD10aGlzLmImJnRoaXMuYjwyNTUuNSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGhleDp1cXQsZm9ybWF0SGV4OnVxdCxmb3JtYXRSZ2I6aHF0LHRvU3RyaW5nOmhxdH0pKTtteihUZixkcXQsWXJ0KGZBLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP196Ok1hdGgucG93KF96LGUpLG5ldyBUZih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP3VBOk1hdGgucG93KHVBLGUpLG5ldyBUZih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuaCUzNjArKHRoaXMuaDwwKSozNjAsdD1pc05hTihlKXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxyPXRoaXMubCxuPXIrKHI8LjU/cjoxLXIpKnQsaT0yKnItbjtyZXR1cm4gbmV3IGdsKFhydChlPj0yNDA/ZS0yNDA6ZSsxMjAsaSxuKSxYcnQoZSxpLG4pLFhydChlPDEyMD9lKzI0MDplLTEyMCxpLG4pLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wYWNpdHk7cmV0dXJuIGU9aXNOYU4oZSk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLChlPT09MT8iaHNsKCI6ImhzbGEoIikrKHRoaXMuaHx8MCkrIiwgIisodGhpcy5zfHwwKSoxMDArIiUsICIrKHRoaXMubHx8MCkqMTAwKyIlIisoZT09PTE/IikiOiIsICIrZSsiKSIpfX0pKX0pO3ZhciAkcnQ9TSgoKT0+e21xdCgpfSk7ZnVuY3Rpb24gS3J0KGUsdCxyLG4saSl7dmFyIG89ZSplLGE9byplO3JldHVybigoMS0zKmUrMypvLWEpKnQrKDQtNipvKzMqYSkqcisoMSszKmUrMypvLTMqYSkqbithKmkpLzZ9ZnVuY3Rpb24gZ3F0KGUpe3ZhciB0PWUubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXI8PTA/cj0wOnI+PTE/KHI9MSx0LTEpOk1hdGguZmxvb3Iocip0KSxpPWVbbl0sbz1lW24rMV0sYT1uPjA/ZVtuLTFdOjIqaS1vLHM9bjx0LTE/ZVtuKzJdOjIqby1pO3JldHVybiBLcnQoKHItbi90KSp0LGEsaSxvLHMpfX12YXIgWnJ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBfcXQoZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPU1hdGguZmxvb3IoKChyJT0xKTwwPysrcjpyKSp0KSxpPWVbKG4rdC0xKSV0XSxvPWVbbiV0XSxhPWVbKG4rMSkldF0scz1lWyhuKzIpJXRdO3JldHVybiBLcnQoKHItbi90KSp0LGksbyxhLHMpfX12YXIgeXF0PU0oKCk9PntacnQoKX0pO2Z1bmN0aW9uIEpydChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIHZxdD1NKCgpPT57fSk7ZnVuY3Rpb24gaVJlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBlK3IqdH19ZnVuY3Rpb24gb1JlKGUsdCxyKXtyZXR1cm4gZT1NYXRoLnBvdyhlLHIpLHQ9TWF0aC5wb3codCxyKS1lLHI9MS9yLGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnBvdyhlK24qdCxyKX19ZnVuY3Rpb24geHF0KGUpe3JldHVybihlPStlKT09MT95ejpmdW5jdGlvbih0LHIpe3JldHVybiByLXQ/b1JlKHQscixlKTpKcnQoaXNOYU4odCk/cjp0KX19ZnVuY3Rpb24geXooZSx0KXt2YXIgcj10LWU7cmV0dXJuIHI/aVJlKGUscik6SnJ0KGlzTmFOKGUpP3Q6ZSl9dmFyIGJxdD1NKCgpPT57dnF0KCl9KTtmdW5jdGlvbiB3cXQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9bmV3IEFycmF5KHIpLG89bmV3IEFycmF5KHIpLGEscztmb3IoYT0wO2E8cjsrK2Epcz1Ldyh0W2FdKSxuW2FdPXMucnx8MCxpW2FdPXMuZ3x8MCxvW2FdPXMuYnx8MDtyZXR1cm4gbj1lKG4pLGk9ZShpKSxvPWUobykscy5vcGFjaXR5PTEsZnVuY3Rpb24obCl7cmV0dXJuIHMucj1uKGwpLHMuZz1pKGwpLHMuYj1vKGwpLHMrIiJ9fX12YXIgdnosYVJlLHNSZSxTcXQ9TSgoKT0+eyRydCgpO1pydCgpO3lxdCgpO2JxdCgpO3Z6PWZ1bmN0aW9uIGUodCl7dmFyIHI9eHF0KHQpO2Z1bmN0aW9uIG4oaSxvKXt2YXIgYT1yKChpPUt3KGkpKS5yLChvPUt3KG8pKS5yKSxzPXIoaS5nLG8uZyksbD1yKGkuYixvLmIpLGM9eXooaS5vcGFjaXR5LG8ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiBpLnI9YSh1KSxpLmc9cyh1KSxpLmI9bCh1KSxpLm9wYWNpdHk9Yyh1KSxpKyIifX1yZXR1cm4gbi5nYW1tYT1lLG59KDEpO2FSZT13cXQoZ3F0KSxzUmU9d3F0KF9xdCl9KTtmdW5jdGlvbiBQYyhlLHQpe3JldHVybiBlPStlLHQ9K3QsZnVuY3Rpb24ocil7cmV0dXJuIGUqKDEtcikrdCpyfX12YXIgeHo9TSgoKT0+e30pO2Z1bmN0aW9uIGxSZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19ZnVuY3Rpb24gY1JlKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZSh0KSsiIn19ZnVuY3Rpb24gZW50KGUsdCl7dmFyIHI9dG50Lmxhc3RJbmRleD1RcnQubGFzdEluZGV4PTAsbixpLG8sYT0tMSxzPVtdLGw9W107Zm9yKGU9ZSsiIix0PXQrIiI7KG49dG50LmV4ZWMoZSkpJiYoaT1RcnQuZXhlYyh0KSk7KShvPWkuaW5kZXgpPnImJihvPXQuc2xpY2UocixvKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLChuPW5bMF0pPT09KGk9aVswXSk/c1thXT9zW2FdKz1pOnNbKythXT1pOihzWysrYV09bnVsbCxsLnB1c2goe2k6YSx4OlBjKG4saSl9KSkscj1RcnQubGFzdEluZGV4O3JldHVybiByPHQubGVuZ3RoJiYobz10LnNsaWNlKHIpLHNbYV0/c1thXSs9bzpzWysrYV09bykscy5sZW5ndGg8Mj9sWzBdP2NSZShsWzBdLngpOmxSZSh0KToodD1sLmxlbmd0aCxmdW5jdGlvbihjKXtmb3IodmFyIHU9MCxoO3U8dDsrK3Upc1soaD1sW3VdKS5pXT1oLngoYyk7cmV0dXJuIHMuam9pbigiIil9KX12YXIgdG50LFFydCxNcXQ9TSgoKT0+e3h6KCk7dG50PS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxRcnQ9bmV3IFJlZ0V4cCh0bnQuc291cmNlLCJnIil9KTtmdW5jdGlvbiBybnQoZSx0LHIsbixpLG8pe3ZhciBhLHMsbDtyZXR1cm4oYT1NYXRoLnNxcnQoZSplK3QqdCkpJiYoZS89YSx0Lz1hKSwobD1lKnIrdCpuKSYmKHItPWUqbCxuLT10KmwpLChzPU1hdGguc3FydChyKnIrbipuKSkmJihyLz1zLG4vPXMsbC89cyksZSpuPHQqciYmKGU9LWUsdD0tdCxsPS1sLGE9LWEpLHt0cmFuc2xhdGVYOmksdHJhbnNsYXRlWTpvLHJvdGF0ZTpNYXRoLmF0YW4yKHQsZSkqRXF0LHNrZXdYOk1hdGguYXRhbihsKSpFcXQsc2NhbGVYOmEsc2NhbGVZOnN9fXZhciBFcXQsYnosVHF0PU0oKCk9PntFcXQ9MTgwL01hdGguUEksYno9e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjAscm90YXRlOjAsc2tld1g6MCxzY2FsZVg6MSxzY2FsZVk6MX19KTtmdW5jdGlvbiBBcXQoZSl7cmV0dXJuIGU9PT0ibm9uZSI/Yno6KHBBfHwocEE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIiksbm50PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxDcXQ9ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLHBBLnN0eWxlLnRyYW5zZm9ybT1lLGU9Q3F0LmdldENvbXB1dGVkU3R5bGUobm50LmFwcGVuZENoaWxkKHBBKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxubnQucmVtb3ZlQ2hpbGQocEEpLGU9ZS5zbGljZSg3LC0xKS5zcGxpdCgiLCIpLHJudCgrZVswXSwrZVsxXSwrZVsyXSwrZVszXSwrZVs0XSwrZVs1XSkpfWZ1bmN0aW9uIFBxdChlKXtyZXR1cm4gZT09bnVsbD9iejood3p8fCh3ej1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSx3ei5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsZSksKGU9d3oudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KGU9ZS5tYXRyaXgscm50KGUuYSxlLmIsZS5jLGUuZCxlLmUsZS5mKSk6YnopfXZhciBwQSxubnQsQ3F0LHd6LElxdD1NKCgpPT57VHF0KCl9KTtmdW5jdGlvbiBMcXQoZSx0LHIsbil7ZnVuY3Rpb24gaShjKXtyZXR1cm4gYy5sZW5ndGg/Yy5wb3AoKSsiICI6IiJ9ZnVuY3Rpb24gbyhjLHUsaCxmLHAsZCl7aWYoYyE9PWh8fHUhPT1mKXt2YXIgZz1wLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsdCxudWxsLHIpO2QucHVzaCh7aTpnLTQseDpQYyhjLGgpfSx7aTpnLTIseDpQYyh1LGYpfSl9ZWxzZShofHxmKSYmcC5wdXNoKCJ0cmFuc2xhdGUoIitoK3QrZityKX1mdW5jdGlvbiBhKGMsdSxoLGYpe2MhPT11PyhjLXU+MTgwP3UrPTM2MDp1LWM+MTgwJiYoYys9MzYwKSxmLnB1c2goe2k6aC5wdXNoKGkoaCkrInJvdGF0ZSgiLG51bGwsbiktMix4OlBjKGMsdSl9KSk6dSYmaC5wdXNoKGkoaCkrInJvdGF0ZSgiK3Urbil9ZnVuY3Rpb24gcyhjLHUsaCxmKXtjIT09dT9mLnB1c2goe2k6aC5wdXNoKGkoaCkrInNrZXdYKCIsbnVsbCxuKS0yLHg6UGMoYyx1KX0pOnUmJmgucHVzaChpKGgpKyJza2V3WCgiK3Urbil9ZnVuY3Rpb24gbChjLHUsaCxmLHAsZCl7aWYoYyE9PWh8fHUhPT1mKXt2YXIgZz1wLnB1c2goaShwKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7ZC5wdXNoKHtpOmctNCx4OlBjKGMsaCl9LHtpOmctMix4OlBjKHUsZil9KX1lbHNlKGghPT0xfHxmIT09MSkmJnAucHVzaChpKHApKyJzY2FsZSgiK2grIiwiK2YrIikiKX1yZXR1cm4gZnVuY3Rpb24oYyx1KXt2YXIgaD1bXSxmPVtdO3JldHVybiBjPWUoYyksdT1lKHUpLG8oYy50cmFuc2xhdGVYLGMudHJhbnNsYXRlWSx1LnRyYW5zbGF0ZVgsdS50cmFuc2xhdGVZLGgsZiksYShjLnJvdGF0ZSx1LnJvdGF0ZSxoLGYpLHMoYy5za2V3WCx1LnNrZXdYLGgsZiksbChjLnNjYWxlWCxjLnNjYWxlWSx1LnNjYWxlWCx1LnNjYWxlWSxoLGYpLGM9dT1udWxsLGZ1bmN0aW9uKHApe2Zvcih2YXIgZD0tMSxnPWYubGVuZ3RoLF87KytkPGc7KWhbKF89ZltkXSkuaV09Xy54KHApO3JldHVybiBoLmpvaW4oIiIpfX19dmFyIGludCxvbnQsa3F0PU0oKCk9Pnt4eigpO0lxdCgpO2ludD1McXQoQXF0LCJweCwgIiwicHgpIiwiZGVnKSIpLG9udD1McXQoUHF0LCIsICIsIikiLCIpIil9KTt2YXIgU3o9TSgoKT0+e3h6KCk7TXF0KCk7a3F0KCk7U3F0KCl9KTtmdW5jdGlvbiB1UmUoZSx0KXt2YXIgcixuO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPUR1KHRoaXMsZSksbz1pLnR3ZWVuO2lmKG8hPT1yKXtuPXI9bztmb3IodmFyIGE9MCxzPW4ubGVuZ3RoO2E8czsrK2EpaWYoblthXS5uYW1lPT09dCl7bj1uLnNsaWNlKCksbi5zcGxpY2UoYSwxKTticmVha319aS50d2Vlbj1ufX1mdW5jdGlvbiBoUmUoZSx0LHIpe3ZhciBuLGk7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPUR1KHRoaXMsZSksYT1vLnR3ZWVuO2lmKGEhPT1uKXtpPShuPWEpLnNsaWNlKCk7Zm9yKHZhciBzPXtuYW1lOnQsdmFsdWU6cn0sbD0wLGM9aS5sZW5ndGg7bDxjOysrbClpZihpW2xdLm5hbWU9PT10KXtpW2xdPXM7YnJlYWt9bD09PWMmJmkucHVzaChzKX1vLnR3ZWVuPWl9fWZ1bmN0aW9uIFJxdChlLHQpe3ZhciByPXRoaXMuX2lkO2lmKGUrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPWlvKHRoaXMubm9kZSgpLHIpLnR3ZWVuLGk9MCxvPW4ubGVuZ3RoLGE7aTxvOysraSlpZigoYT1uW2ldKS5uYW1lPT09ZSlyZXR1cm4gYS52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP3VSZTpoUmUpKHIsZSx0KSl9ZnVuY3Rpb24gWncoZSx0LHIpe3ZhciBuPWUuX2lkO3JldHVybiBlLmVhY2goZnVuY3Rpb24oKXt2YXIgaT1EdSh0aGlzLG4pOyhpLnZhbHVlfHwoaS52YWx1ZT17fSkpW3RdPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24oaSl7cmV0dXJuIGlvKGksbikudmFsdWVbdF19fXZhciBkQT1NKCgpPT57QWMoKX0pO2Z1bmN0aW9uIE16KGUsdCl7dmFyIHI7cmV0dXJuKHR5cGVvZiB0PT0ibnVtYmVyIj9QYzp0IGluc3RhbmNlb2YgVWc/dno6KHI9VWcodCkpPyh0PXIsdnopOmVudCkoZSx0KX12YXIgYW50PU0oKCk9PnskcnQoKTtTeigpfSk7ZnVuY3Rpb24gZlJlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBwUmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBkUmUoZSx0LHIpe3ZhciBuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89dGhpcy5nZXRBdHRyaWJ1dGUoZSk7cmV0dXJuIG89PT1yP251bGw6bz09PW4/aTppPXQobj1vLHIpfX1mdW5jdGlvbiBtUmUoZSx0LHIpe3ZhciBuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89dGhpcy5nZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpO3JldHVybiBvPT09cj9udWxsOm89PT1uP2k6aT10KG49byxyKX19ZnVuY3Rpb24gZ1JlKGUsdCxyKXt2YXIgbixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGEscz1yKHRoaXMpO3JldHVybiBzPT1udWxsP3ZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSk6KGE9dGhpcy5nZXRBdHRyaWJ1dGUoZSksYT09PXM/bnVsbDphPT09biYmcz09PWk/bzpvPXQobj1hLGk9cykpfX1mdW5jdGlvbiBfUmUoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyk7cmV0dXJuIHM9PW51bGw/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk6KGE9dGhpcy5nZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpLGE9PT1zP251bGw6YT09PW4mJnM9PT1pP286bz10KG49YSxpPXMpKX19ZnVuY3Rpb24gTnF0KGUsdCl7dmFyIHI9Y2QoZSksbj1yPT09InRyYW5zZm9ybSI/b250Ok16O3JldHVybiB0aGlzLmF0dHJUd2VlbihlLHR5cGVvZiB0PT0iZnVuY3Rpb24iPyhyLmxvY2FsP19SZTpnUmUpKHIsbixadyh0aGlzLCJhdHRyLiIrZSx0KSk6dD09bnVsbD8oci5sb2NhbD9wUmU6ZlJlKShyKTooci5sb2NhbD9tUmU6ZFJlKShyLG4sdCsiIikpfXZhciBEcXQ9TSgoKT0+e1N6KCk7RWYoKTtkQSgpO2FudCgpfSk7ZnVuY3Rpb24geVJlKGUsdCl7ZnVuY3Rpb24gcigpe3ZhciBuPXRoaXMsaT10LmFwcGx5KG4sYXJndW1lbnRzKTtyZXR1cm4gaSYmZnVuY3Rpb24obyl7bi5zZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwsaShvKSl9fXJldHVybiByLl92YWx1ZT10LHJ9ZnVuY3Rpb24gdlJlKGUsdCl7ZnVuY3Rpb24gcigpe3ZhciBuPXRoaXMsaT10LmFwcGx5KG4sYXJndW1lbnRzKTtyZXR1cm4gaSYmZnVuY3Rpb24obyl7bi5zZXRBdHRyaWJ1dGUoZSxpKG8pKX19cmV0dXJuIHIuX3ZhbHVlPXQscn1mdW5jdGlvbiBPcXQoZSx0KXt2YXIgcj0iYXR0ci4iK2U7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihyPXRoaXMudHdlZW4ocikpJiZyLl92YWx1ZTtpZih0PT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKHIsbnVsbCk7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3ZhciBuPWNkKGUpO3JldHVybiB0aGlzLnR3ZWVuKHIsKG4ubG9jYWw/eVJlOnZSZSkobix0KSl9dmFyIHpxdD1NKCgpPT57RWYoKX0pO2Z1bmN0aW9uIHhSZShlLHQpe3JldHVybiBmdW5jdGlvbigpe2NBKHRoaXMsZSkuZGVsYXk9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBiUmUoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe2NBKHRoaXMsZSkuZGVsYXk9dH19ZnVuY3Rpb24gRnF0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/eFJlOmJSZSkodCxlKSk6aW8odGhpcy5ub2RlKCksdCkuZGVsYXl9dmFyIEJxdD1NKCgpPT57QWMoKX0pO2Z1bmN0aW9uIHdSZShlLHQpe3JldHVybiBmdW5jdGlvbigpe0R1KHRoaXMsZSkuZHVyYXRpb249K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBTUmUoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe0R1KHRoaXMsZSkuZHVyYXRpb249dH19ZnVuY3Rpb24gSHF0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/d1JlOlNSZSkodCxlKSk6aW8odGhpcy5ub2RlKCksdCkuZHVyYXRpb259dmFyIFZxdD1NKCgpPT57QWMoKX0pO2Z1bmN0aW9uIE1SZShlLHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtEdSh0aGlzLGUpLmVhc2U9dH19ZnVuY3Rpb24gVXF0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChNUmUodCxlKSk6aW8odGhpcy5ub2RlKCksdCkuZWFzZX12YXIgcXF0PU0oKCk9PntBYygpfSk7ZnVuY3Rpb24gR3F0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT10QShlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPVtdLGwsYz0wO2M8YTsrK2MpKGw9b1tjXSkmJmUuY2FsbChsLGwuX19kYXRhX18sYyxvKSYmcy5wdXNoKGwpO3JldHVybiBuZXcgVW8obix0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfXZhciBXcXQ9TSgoKT0+e0VmKCk7aGQoKX0pO2Z1bmN0aW9uIFlxdChlKXtpZihlLl9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgVW8oYSx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfXZhciBqcXQ9TSgoKT0+e2hkKCl9KTtmdW5jdGlvbiBFUmUoZSl7cmV0dXJuKGUrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbih0KXt2YXIgcj10LmluZGV4T2YoIi4iKTtyZXR1cm4gcj49MCYmKHQ9dC5zbGljZSgwLHIpKSwhdHx8dD09PSJzdGFydCJ9KX1mdW5jdGlvbiBUUmUoZSx0LHIpe3ZhciBuLGksbz1FUmUodCk/Y0E6RHU7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9byh0aGlzLGUpLHM9YS5vbjtzIT09biYmKGk9KG49cykuY29weSgpKS5vbih0LHIpLGEub249aX19ZnVuY3Rpb24gWHF0KGUsdCl7dmFyIHI9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9pbyh0aGlzLm5vZGUoKSxyKS5vbi5vbihlKTp0aGlzLmVhY2goVFJlKHIsZSx0KSl9dmFyICRxdD1NKCgpPT57QWMoKX0pO2Z1bmN0aW9uIENSZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciByIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCtyIT09ZSlyZXR1cm47dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX19ZnVuY3Rpb24gS3F0KCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLENSZSh0aGlzLl9pZCkpfXZhciBacXQ9TSgoKT0+e30pO2Z1bmN0aW9uIEpxdChlKXt2YXIgdD10aGlzLl9uYW1lLHI9dGhpcy5faWQ7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPVN2KGUpKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsbz1uZXcgQXJyYXkoaSksYT0wO2E8aTsrK2EpZm9yKHZhciBzPW5bYV0sbD1zLmxlbmd0aCxjPW9bYV09bmV3IEFycmF5KGwpLHUsaCxmPTA7ZjxsOysrZikodT1zW2ZdKSYmKGg9ZS5jYWxsKHUsdS5fX2RhdGFfXyxmLHMpKSYmKCJfX2RhdGFfXyJpbiB1JiYoaC5fX2RhdGFfXz11Ll9fZGF0YV9fKSxjW2ZdPWgsVmcoY1tmXSx0LHIsZixjLGlvKHUscikpKTtyZXR1cm4gbmV3IFVvKG8sdGhpcy5fcGFyZW50cyx0LHIpfXZhciBRcXQ9TSgoKT0+e0VmKCk7aGQoKTtBYygpfSk7ZnVuY3Rpb24gdEd0KGUpe3ZhciB0PXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9UUMoZSkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPVtdLGE9W10scz0wO3M8aTsrK3MpZm9yKHZhciBsPW5bc10sYz1sLmxlbmd0aCx1LGg9MDtoPGM7KytoKWlmKHU9bFtoXSl7Zm9yKHZhciBmPWUuY2FsbCh1LHUuX19kYXRhX18saCxsKSxwLGQ9aW8odSxyKSxnPTAsXz1mLmxlbmd0aDtnPF87KytnKShwPWZbZ10pJiZWZyhwLHQscixnLGYsZCk7by5wdXNoKGYpLGEucHVzaCh1KX1yZXR1cm4gbmV3IFVvKG8sYSx0LHIpfXZhciBlR3Q9TSgoKT0+e0VmKCk7aGQoKTtBYygpfSk7ZnVuY3Rpb24gckd0KCl7cmV0dXJuIG5ldyBBUmUodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfXZhciBBUmUsbkd0PU0oKCk9PntFZigpO0FSZT11ZC5wcm90b3R5cGUuY29uc3RydWN0b3J9KTtmdW5jdGlvbiBQUmUoZSx0KXt2YXIgcixuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89SGcodGhpcyxlKSxhPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLEhnKHRoaXMsZSkpO3JldHVybiBvPT09YT9udWxsOm89PT1yJiZhPT09bj9pOmk9dChyPW8sbj1hKX19ZnVuY3Rpb24gSVJlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIExSZShlLHQscil7dmFyIG4saTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1IZyh0aGlzLGUpO3JldHVybiBvPT09cj9udWxsOm89PT1uP2k6aT10KG49byxyKX19ZnVuY3Rpb24ga1JlKGUsdCxyKXt2YXIgbixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9SGcodGhpcyxlKSxzPXIodGhpcyk7cmV0dXJuIHM9PW51bGwmJihzPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLEhnKHRoaXMsZSkpKSxhPT09cz9udWxsOmE9PT1uJiZzPT09aT9vOm89dChuPWEsaT1zKX19ZnVuY3Rpb24gaUd0KGUsdCxyKXt2YXIgbj0oZSs9IiIpPT0idHJhbnNmb3JtIj9pbnQ6TXo7cmV0dXJuIHQ9PW51bGw/dGhpcy5zdHlsZVR3ZWVuKGUsUFJlKGUsbikpLm9uKCJlbmQuc3R5bGUuIitlLElSZShlKSk6dGhpcy5zdHlsZVR3ZWVuKGUsdHlwZW9mIHQ9PSJmdW5jdGlvbiI/a1JlKGUsbixadyh0aGlzLCJzdHlsZS4iK2UsdCkpOkxSZShlLG4sdCsiIikscil9dmFyIG9HdD1NKCgpPT57U3ooKTtFZigpO2RBKCk7YW50KCl9KTtmdW5jdGlvbiBSUmUoZSx0LHIpe2Z1bmN0aW9uIG4oKXt2YXIgaT10aGlzLG89dC5hcHBseShpLGFyZ3VtZW50cyk7cmV0dXJuIG8mJmZ1bmN0aW9uKGEpe2kuc3R5bGUuc2V0UHJvcGVydHkoZSxvKGEpLHIpfX1yZXR1cm4gbi5fdmFsdWU9dCxufWZ1bmN0aW9uIGFHdChlLHQscil7dmFyIG49InN0eWxlLiIrKGUrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKG49dGhpcy50d2VlbihuKSkmJm4uX3ZhbHVlO2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4obixudWxsKTtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4obixSUmUoZSx0LHI9PW51bGw/IiI6cikpfXZhciBzR3Q9TSgoKT0+e30pO2Z1bmN0aW9uIE5SZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWV9fWZ1bmN0aW9uIERSZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiBsR3QoZSl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLHR5cGVvZiBlPT0iZnVuY3Rpb24iP0RSZShadyh0aGlzLCJ0ZXh0IixlKSk6TlJlKGU9PW51bGw/IiI6ZSsiIikpfXZhciBjR3Q9TSgoKT0+e2RBKCl9KTtmdW5jdGlvbiB1R3QoKXtmb3IodmFyIGU9dGhpcy5fbmFtZSx0PXRoaXMuX2lkLHI9RXooKSxuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgYT1uW29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYylpZihsPWFbY10pe3ZhciB1PWlvKGwsdCk7VmcobCxlLHIsYyxhLHt0aW1lOnUudGltZSt1LmRlbGF5K3UuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjp1LmR1cmF0aW9uLGVhc2U6dS5lYXNlfSl9cmV0dXJuIG5ldyBVbyhuLHRoaXMuX3BhcmVudHMsZSxyKX12YXIgaEd0PU0oKCk9PntoZCgpO0FjKCl9KTtmdW5jdGlvbiBVbyhlLHQscixuKXt0aGlzLl9ncm91cHM9ZSx0aGlzLl9wYXJlbnRzPXQsdGhpcy5fbmFtZT1yLHRoaXMuX2lkPW59ZnVuY3Rpb24gVHooZSl7cmV0dXJuIHVkKCkudHJhbnNpdGlvbihlKX1mdW5jdGlvbiBFeigpe3JldHVybisrT1JlfXZhciBPUmUsSncsaGQ9TSgoKT0+e0VmKCk7RHF0KCk7enF0KCk7QnF0KCk7VnF0KCk7cXF0KCk7V3F0KCk7anF0KCk7JHF0KCk7WnF0KCk7UXF0KCk7ZUd0KCk7bkd0KCk7b0d0KCk7c0d0KCk7Y0d0KCk7aEd0KCk7ZEEoKTtPUmU9MDtKdz11ZC5wcm90b3R5cGU7VW8ucHJvdG90eXBlPVR6LnByb3RvdHlwZT17Y29uc3RydWN0b3I6VW8sc2VsZWN0OkpxdCxzZWxlY3RBbGw6dEd0LGZpbHRlcjpHcXQsbWVyZ2U6WXF0LHNlbGVjdGlvbjpyR3QsdHJhbnNpdGlvbjp1R3QsY2FsbDpKdy5jYWxsLG5vZGVzOkp3Lm5vZGVzLG5vZGU6Sncubm9kZSxzaXplOkp3LnNpemUsZW1wdHk6SncuZW1wdHksZWFjaDpKdy5lYWNoLG9uOlhxdCxhdHRyOk5xdCxhdHRyVHdlZW46T3F0LHN0eWxlOmlHdCxzdHlsZVR3ZWVuOmFHdCx0ZXh0OmxHdCxyZW1vdmU6S3F0LHR3ZWVuOlJxdCxkZWxheTpGcXQsZHVyYXRpb246SHF0LGVhc2U6VXF0fX0pO2Z1bmN0aW9uIHpSZShlLHQpe2Zvcih2YXIgcjshKHI9ZS5fX3RyYW5zaXRpb24pfHwhKHI9clt0XSk7KWlmKCEoZT1lLnBhcmVudE5vZGUpKXJldHVybiBzbnQudGltZT1YdygpLHNudDtyZXR1cm4gcn1mdW5jdGlvbiBmR3QoZSl7dmFyIHQscjtlIGluc3RhbmNlb2YgVW8/KHQ9ZS5faWQsZT1lLl9uYW1lKToodD1FeigpLChyPXNudCkudGltZT1YdygpLGU9ZT09bnVsbD9udWxsOmUrIiIpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPTA7bzxpOysrbylmb3IodmFyIGE9bltvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpKGw9YVtjXSkmJlZnKGwsZSx0LGMsYSxyfHx6UmUobCx0KSk7cmV0dXJuIG5ldyBVbyhuLHRoaXMuX3BhcmVudHMsZSx0KX12YXIgc250LHBHdD1NKCgpPT57aGQoKTtBYygpO0xfKCk7cXJ0KCk7c250PXt0aW1lOm51bGwsZGVsYXk6MCxkdXJhdGlvbjoyNTAsZWFzZTpic319KTt2YXIgZEd0PU0oKCk9PntFZigpO2lxdCgpO3BHdCgpO3VkLnByb3RvdHlwZS5pbnRlcnJ1cHQ9bnF0O3VkLnByb3RvdHlwZS50cmFuc2l0aW9uPWZHdH0pO2Z1bmN0aW9uIG1HdChlLHQpe3ZhciByPWUuX190cmFuc2l0aW9uLG4saTtpZihyKXt0PXQ9PW51bGw/bnVsbDp0KyIiO2ZvcihpIGluIHIpaWYoKG49cltpXSkuc3RhdGU+ZnomJm4ubmFtZT09PXQpcmV0dXJuIG5ldyBVbyhbW2VdXSxGUmUsdCwraSl9cmV0dXJuIG51bGx9dmFyIEZSZSxnR3Q9TSgoKT0+e2hkKCk7QWMoKTtGUmU9W251bGxdfSk7dmFyIF9HdD1NKCgpPT57ZEd0KCk7aGQoKTtnR3QoKTtXcnQoKX0pO2Z1bmN0aW9uIGxudChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIHlHdD1NKCgpPT57fSk7ZnVuY3Rpb24gdkd0KGUpe3JldHVybiBlWzBdfWZ1bmN0aW9uIHhHdChlKXtyZXR1cm4gZVsxXX12YXIgYkd0PU0oKCk9Pnt9KTtmdW5jdGlvbiBjbnQoKXt0aGlzLl89bnVsbH1mdW5jdGlvbiBRdyhlKXtlLlU9ZS5DPWUuTD1lLlI9ZS5QPWUuTj1udWxsfWZ1bmN0aW9uIG1BKGUsdCl7dmFyIHI9dCxuPXQuUixpPXIuVTtpP2kuTD09PXI/aS5MPW46aS5SPW46ZS5fPW4sbi5VPWksci5VPW4sci5SPW4uTCxyLlImJihyLlIuVT1yKSxuLkw9cn1mdW5jdGlvbiBnQShlLHQpe3ZhciByPXQsbj10LkwsaT1yLlU7aT9pLkw9PT1yP2kuTD1uOmkuUj1uOmUuXz1uLG4uVT1pLHIuVT1uLHIuTD1uLlIsci5MJiYoci5MLlU9ciksbi5SPXJ9ZnVuY3Rpb24gd0d0KGUpe2Zvcig7ZS5MOyllPWUuTDtyZXR1cm4gZX12YXIgdW50LEN6PU0oKCk9PntjbnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpjbnQsaW5zZXJ0OmZ1bmN0aW9uKGUsdCl7dmFyIHIsbixpO2lmKGUpe2lmKHQuUD1lLHQuTj1lLk4sZS5OJiYoZS5OLlA9dCksZS5OPXQsZS5SKXtmb3IoZT1lLlI7ZS5MOyllPWUuTDtlLkw9dH1lbHNlIGUuUj10O3I9ZX1lbHNlIHRoaXMuXz8oZT13R3QodGhpcy5fKSx0LlA9bnVsbCx0Lk49ZSxlLlA9ZS5MPXQscj1lKToodC5QPXQuTj1udWxsLHRoaXMuXz10LHI9bnVsbCk7Zm9yKHQuTD10LlI9bnVsbCx0LlU9cix0LkM9ITAsZT10O3ImJnIuQzspbj1yLlUscj09PW4uTD8oaT1uLlIsaSYmaS5DPyhyLkM9aS5DPSExLG4uQz0hMCxlPW4pOihlPT09ci5SJiYobUEodGhpcyxyKSxlPXIscj1lLlUpLHIuQz0hMSxuLkM9ITAsZ0EodGhpcyxuKSkpOihpPW4uTCxpJiZpLkM/KHIuQz1pLkM9ITEsbi5DPSEwLGU9bik6KGU9PT1yLkwmJihnQSh0aGlzLHIpLGU9cixyPWUuVSksci5DPSExLG4uQz0hMCxtQSh0aGlzLG4pKSkscj1lLlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbihlKXtlLk4mJihlLk4uUD1lLlApLGUuUCYmKGUuUC5OPWUuTiksZS5OPWUuUD1udWxsO3ZhciB0PWUuVSxyLG49ZS5MLGk9ZS5SLG8sYTtpZihuP2k/bz13R3QoaSk6bz1uOm89aSx0P3QuTD09PWU/dC5MPW86dC5SPW86dGhpcy5fPW8sbiYmaT8oYT1vLkMsby5DPWUuQyxvLkw9bixuLlU9byxvIT09aT8odD1vLlUsby5VPWUuVSxlPW8uUix0Lkw9ZSxvLlI9aSxpLlU9byk6KG8uVT10LHQ9byxlPW8uUikpOihhPWUuQyxlPW8pLGUmJihlLlU9dCksIWEpe2lmKGUmJmUuQyl7ZS5DPSExO3JldHVybn1kb3tpZihlPT09dGhpcy5fKWJyZWFrO2lmKGU9PT10Lkwpe2lmKHI9dC5SLHIuQyYmKHIuQz0hMSx0LkM9ITAsbUEodGhpcyx0KSxyPXQuUiksci5MJiZyLkwuQ3x8ci5SJiZyLlIuQyl7KCFyLlJ8fCFyLlIuQykmJihyLkwuQz0hMSxyLkM9ITAsZ0EodGhpcyxyKSxyPXQuUiksci5DPXQuQyx0LkM9ci5SLkM9ITEsbUEodGhpcyx0KSxlPXRoaXMuXzticmVha319ZWxzZSBpZihyPXQuTCxyLkMmJihyLkM9ITEsdC5DPSEwLGdBKHRoaXMsdCkscj10LkwpLHIuTCYmci5MLkN8fHIuUiYmci5SLkMpeyghci5MfHwhci5MLkMpJiYoci5SLkM9ITEsci5DPSEwLG1BKHRoaXMscikscj10LkwpLHIuQz10LkMsdC5DPXIuTC5DPSExLGdBKHRoaXMsdCksZT10aGlzLl87YnJlYWt9ci5DPSEwLGU9dCx0PXQuVX13aGlsZSghZS5DKTtlJiYoZS5DPSExKX19fTt1bnQ9Y250fSk7ZnVuY3Rpb24gdFMoZSx0LHIsbil7dmFyIGk9W251bGwsbnVsbF0sbz1Bby5wdXNoKGkpLTE7cmV0dXJuIGkubGVmdD1lLGkucmlnaHQ9dCxyJiZfQShpLGUsdCxyKSxuJiZfQShpLHQsZSxuKSxKYVtlLmluZGV4XS5oYWxmZWRnZXMucHVzaChvKSxKYVt0LmluZGV4XS5oYWxmZWRnZXMucHVzaChvKSxpfWZ1bmN0aW9uIGVTKGUsdCxyKXt2YXIgbj1bdCxyXTtyZXR1cm4gbi5sZWZ0PWUsbn1mdW5jdGlvbiBfQShlLHQscixuKXshZVswXSYmIWVbMV0/KGVbMF09bixlLmxlZnQ9dCxlLnJpZ2h0PXIpOmUubGVmdD09PXI/ZVsxXT1uOmVbMF09bn1mdW5jdGlvbiBCUmUoZSx0LHIsbixpKXt2YXIgbz1lWzBdLGE9ZVsxXSxzPW9bMF0sbD1vWzFdLGM9YVswXSx1PWFbMV0saD0wLGY9MSxwPWMtcyxkPXUtbCxnO2lmKGc9dC1zLCEoIXAmJmc+MCkpe2lmKGcvPXAscDwwKXtpZihnPGgpcmV0dXJuO2c8ZiYmKGY9Zyl9ZWxzZSBpZihwPjApe2lmKGc+ZilyZXR1cm47Zz5oJiYoaD1nKX1pZihnPW4tcywhKCFwJiZnPDApKXtpZihnLz1wLHA8MCl7aWYoZz5mKXJldHVybjtnPmgmJihoPWcpfWVsc2UgaWYocD4wKXtpZihnPGgpcmV0dXJuO2c8ZiYmKGY9Zyl9aWYoZz1yLWwsISghZCYmZz4wKSl7aWYoZy89ZCxkPDApe2lmKGc8aClyZXR1cm47ZzxmJiYoZj1nKX1lbHNlIGlmKGQ+MCl7aWYoZz5mKXJldHVybjtnPmgmJihoPWcpfWlmKGc9aS1sLCEoIWQmJmc8MCkpe2lmKGcvPWQsZDwwKXtpZihnPmYpcmV0dXJuO2c+aCYmKGg9Zyl9ZWxzZSBpZihkPjApe2lmKGc8aClyZXR1cm47ZzxmJiYoZj1nKX1yZXR1cm4hKGg+MCkmJiEoZjwxKXx8KGg+MCYmKGVbMF09W3MraCpwLGwraCpkXSksZjwxJiYoZVsxXT1bcytmKnAsbCtmKmRdKSksITB9fX19fWZ1bmN0aW9uIEhSZShlLHQscixuLGkpe3ZhciBvPWVbMV07aWYobylyZXR1cm4hMDt2YXIgYT1lWzBdLHM9ZS5sZWZ0LGw9ZS5yaWdodCxjPXNbMF0sdT1zWzFdLGg9bFswXSxmPWxbMV0scD0oYytoKS8yLGQ9KHUrZikvMixnLF87aWYoZj09PXUpe2lmKHA8dHx8cD49bilyZXR1cm47aWYoYz5oKXtpZighYSlhPVtwLHJdO2Vsc2UgaWYoYVsxXT49aSlyZXR1cm47bz1bcCxpXX1lbHNle2lmKCFhKWE9W3AsaV07ZWxzZSBpZihhWzFdPHIpcmV0dXJuO289W3Ascl19fWVsc2UgaWYoZz0oYy1oKS8oZi11KSxfPWQtZypwLGc8LTF8fGc+MSlpZihjPmgpe2lmKCFhKWE9WyhyLV8pL2cscl07ZWxzZSBpZihhWzFdPj1pKXJldHVybjtvPVsoaS1fKS9nLGldfWVsc2V7aWYoIWEpYT1bKGktXykvZyxpXTtlbHNlIGlmKGFbMV08cilyZXR1cm47bz1bKHItXykvZyxyXX1lbHNlIGlmKHU8Zil7aWYoIWEpYT1bdCxnKnQrX107ZWxzZSBpZihhWzBdPj1uKXJldHVybjtvPVtuLGcqbitfXX1lbHNle2lmKCFhKWE9W24sZypuK19dO2Vsc2UgaWYoYVswXTx0KXJldHVybjtvPVt0LGcqdCtfXX1yZXR1cm4gZVswXT1hLGVbMV09bywhMH1mdW5jdGlvbiBTR3QoZSx0LHIsbil7Zm9yKHZhciBpPUFvLmxlbmd0aCxvO2ktLTspKCFIUmUobz1Bb1tpXSxlLHQscixuKXx8IUJSZShvLGUsdCxyLG4pfHwhKE1hdGguYWJzKG9bMF1bMF0tb1sxXVswXSk+V3J8fE1hdGguYWJzKG9bMF1bMV0tb1sxXVsxXSk+V3IpKSYmZGVsZXRlIEFvW2ldfXZhciBBej1NKCgpPT57clMoKX0pO2Z1bmN0aW9uIE1HdChlKXtyZXR1cm4gSmFbZS5pbmRleF09e3NpdGU6ZSxoYWxmZWRnZXM6W119fWZ1bmN0aW9uIFZSZShlLHQpe3ZhciByPWUuc2l0ZSxuPXQubGVmdCxpPXQucmlnaHQ7cmV0dXJuIHI9PT1pJiYoaT1uLG49ciksaT9NYXRoLmF0YW4yKGlbMV0tblsxXSxpWzBdLW5bMF0pOihyPT09bj8obj10WzFdLGk9dFswXSk6KG49dFswXSxpPXRbMV0pLE1hdGguYXRhbjIoblswXS1pWzBdLGlbMV0tblsxXSkpfWZ1bmN0aW9uIGhudChlLHQpe3JldHVybiB0WysodC5sZWZ0IT09ZS5zaXRlKV19ZnVuY3Rpb24gVVJlKGUsdCl7cmV0dXJuIHRbKyh0LmxlZnQ9PT1lLnNpdGUpXX1mdW5jdGlvbiBFR3QoKXtmb3IodmFyIGU9MCx0PUphLmxlbmd0aCxyLG4saSxvO2U8dDsrK2UpaWYoKHI9SmFbZV0pJiYobz0obj1yLmhhbGZlZGdlcykubGVuZ3RoKSl7dmFyIGE9bmV3IEFycmF5KG8pLHM9bmV3IEFycmF5KG8pO2ZvcihpPTA7aTxvOysraSlhW2ldPWksc1tpXT1WUmUocixBb1tuW2ldXSk7Zm9yKGEuc29ydChmdW5jdGlvbihsLGMpe3JldHVybiBzW2NdLXNbbF19KSxpPTA7aTxvOysraSlzW2ldPW5bYVtpXV07Zm9yKGk9MDtpPG87KytpKW5baV09c1tpXX19ZnVuY3Rpb24gVEd0KGUsdCxyLG4pe3ZhciBpPUphLmxlbmd0aCxvLGEscyxsLGMsdSxoLGYscCxkLGcsXyx5PSEwO2ZvcihvPTA7bzxpOysrbylpZihhPUphW29dKXtmb3Iocz1hLnNpdGUsYz1hLmhhbGZlZGdlcyxsPWMubGVuZ3RoO2wtLTspQW9bY1tsXV18fGMuc3BsaWNlKGwsMSk7Zm9yKGw9MCx1PWMubGVuZ3RoO2w8dTspZD1VUmUoYSxBb1tjW2xdXSksZz1kWzBdLF89ZFsxXSxoPWhudChhLEFvW2NbKytsJXVdXSksZj1oWzBdLHA9aFsxXSwoTWF0aC5hYnMoZy1mKT5Xcnx8TWF0aC5hYnMoXy1wKT5XcikmJihjLnNwbGljZShsLDAsQW8ucHVzaChlUyhzLGQsTWF0aC5hYnMoZy1lKTxXciYmbi1fPldyP1tlLE1hdGguYWJzKGYtZSk8V3I/cDpuXTpNYXRoLmFicyhfLW4pPFdyJiZyLWc+V3I/W01hdGguYWJzKHAtbik8V3I/ZjpyLG5dOk1hdGguYWJzKGctcik8V3ImJl8tdD5Xcj9bcixNYXRoLmFicyhmLXIpPFdyP3A6dF06TWF0aC5hYnMoXy10KTxXciYmZy1lPldyP1tNYXRoLmFicyhwLXQpPFdyP2Y6ZSx0XTpudWxsKSktMSksKyt1KTt1JiYoeT0hMSl9aWYoeSl7dmFyIHgsYixTLEM9MS8wO2ZvcihvPTAseT1udWxsO288aTsrK28pKGE9SmFbb10pJiYocz1hLnNpdGUseD1zWzBdLWUsYj1zWzFdLXQsUz14KngrYipiLFM8QyYmKEM9Uyx5PWEpKTtpZih5KXt2YXIgUD1bZSx0XSxrPVtlLG5dLE89W3Isbl0sRD1bcix0XTt5LmhhbGZlZGdlcy5wdXNoKEFvLnB1c2goZVMocz15LnNpdGUsUCxrKSktMSxBby5wdXNoKGVTKHMsayxPKSktMSxBby5wdXNoKGVTKHMsTyxEKSktMSxBby5wdXNoKGVTKHMsRCxQKSktMSl9fWZvcihvPTA7bzxpOysrbykoYT1KYVtvXSkmJihhLmhhbGZlZGdlcy5sZW5ndGh8fGRlbGV0ZSBKYVtvXSl9dmFyIGZudD1NKCgpPT57QXooKTtyUygpfSk7ZnVuY3Rpb24gcVJlKCl7UXcodGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIEV2KGUpe3ZhciB0PWUuUCxyPWUuTjtpZighKCF0fHwhcikpe3ZhciBuPXQuc2l0ZSxpPWUuc2l0ZSxvPXIuc2l0ZTtpZihuIT09byl7dmFyIGE9aVswXSxzPWlbMV0sbD1uWzBdLWEsYz1uWzFdLXMsdT1vWzBdLWEsaD1vWzFdLXMsZj0yKihsKmgtYyp1KTtpZighKGY+PS1BR3QpKXt2YXIgcD1sKmwrYypjLGQ9dSp1K2gqaCxnPShoKnAtYypkKS9mLF89KGwqZC11KnApL2YseT1DR3QucG9wKCl8fG5ldyBxUmU7eS5hcmM9ZSx5LnNpdGU9aSx5Lng9ZythLHkueT0oeS5jeT1fK3MpK01hdGguc3FydChnKmcrXypfKSxlLmNpcmNsZT15O2Zvcih2YXIgeD1udWxsLGI9blMuXztiOylpZih5Lnk8Yi55fHx5Lnk9PT1iLnkmJnkueDw9Yi54KWlmKGIuTCliPWIuTDtlbHNle3g9Yi5QO2JyZWFrfWVsc2UgaWYoYi5SKWI9Yi5SO2Vsc2V7eD1iO2JyZWFrfW5TLmluc2VydCh4LHkpLHh8fChQej15KX19fX1mdW5jdGlvbiBUdihlKXt2YXIgdD1lLmNpcmNsZTt0JiYodC5QfHwoUHo9dC5OKSxuUy5yZW1vdmUodCksQ0d0LnB1c2godCksUXcodCksZS5jaXJjbGU9bnVsbCl9dmFyIENHdCxQeixwbnQ9TSgoKT0+e0N6KCk7clMoKTtDR3Q9W119KTtmdW5jdGlvbiBHUmUoKXtRdyh0aGlzKSx0aGlzLmVkZ2U9dGhpcy5zaXRlPXRoaXMuY2lyY2xlPW51bGx9ZnVuY3Rpb24gUEd0KGUpe3ZhciB0PUlHdC5wb3AoKXx8bmV3IEdSZTtyZXR1cm4gdC5zaXRlPWUsdH1mdW5jdGlvbiBkbnQoZSl7VHYoZSksQ3YucmVtb3ZlKGUpLElHdC5wdXNoKGUpLFF3KGUpfWZ1bmN0aW9uIExHdChlKXt2YXIgdD1lLmNpcmNsZSxyPXQueCxuPXQuY3ksaT1bcixuXSxvPWUuUCxhPWUuTixzPVtlXTtkbnQoZSk7Zm9yKHZhciBsPW87bC5jaXJjbGUmJk1hdGguYWJzKHItbC5jaXJjbGUueCk8V3ImJk1hdGguYWJzKG4tbC5jaXJjbGUuY3kpPFdyOylvPWwuUCxzLnVuc2hpZnQobCksZG50KGwpLGw9bztzLnVuc2hpZnQobCksVHYobCk7Zm9yKHZhciBjPWE7Yy5jaXJjbGUmJk1hdGguYWJzKHItYy5jaXJjbGUueCk8V3ImJk1hdGguYWJzKG4tYy5jaXJjbGUuY3kpPFdyOylhPWMuTixzLnB1c2goYyksZG50KGMpLGM9YTtzLnB1c2goYyksVHYoYyk7dmFyIHU9cy5sZW5ndGgsaDtmb3IoaD0xO2g8dTsrK2gpYz1zW2hdLGw9c1toLTFdLF9BKGMuZWRnZSxsLnNpdGUsYy5zaXRlLGkpO2w9c1swXSxjPXNbdS0xXSxjLmVkZ2U9dFMobC5zaXRlLGMuc2l0ZSxudWxsLGkpLEV2KGwpLEV2KGMpfWZ1bmN0aW9uIGtHdChlKXtmb3IodmFyIHQ9ZVswXSxyPWVbMV0sbixpLG8sYSxzPUN2Ll87czspaWYobz1SR3QocyxyKS10LG8+V3Ipcz1zLkw7ZWxzZSBpZihhPXQtV1JlKHMsciksYT5Xcil7aWYoIXMuUil7bj1zO2JyZWFrfXM9cy5SfWVsc2V7bz4tV3I/KG49cy5QLGk9cyk6YT4tV3I/KG49cyxpPXMuTik6bj1pPXM7YnJlYWt9TUd0KGUpO3ZhciBsPVBHdChlKTtpZihDdi5pbnNlcnQobixsKSwhKCFuJiYhaSkpe2lmKG49PT1pKXtUdihuKSxpPVBHdChuLnNpdGUpLEN2Lmluc2VydChsLGkpLGwuZWRnZT1pLmVkZ2U9dFMobi5zaXRlLGwuc2l0ZSksRXYobiksRXYoaSk7cmV0dXJufWlmKCFpKXtsLmVkZ2U9dFMobi5zaXRlLGwuc2l0ZSk7cmV0dXJufVR2KG4pLFR2KGkpO3ZhciBjPW4uc2l0ZSx1PWNbMF0saD1jWzFdLGY9ZVswXS11LHA9ZVsxXS1oLGQ9aS5zaXRlLGc9ZFswXS11LF89ZFsxXS1oLHk9MiooZipfLXAqZykseD1mKmYrcCpwLGI9ZypnK18qXyxTPVsoXyp4LXAqYikveSt1LChmKmItZyp4KS95K2hdO19BKGkuZWRnZSxjLGQsUyksbC5lZGdlPXRTKGMsZSxudWxsLFMpLGkuZWRnZT10UyhlLGQsbnVsbCxTKSxFdihuKSxFdihpKX19ZnVuY3Rpb24gUkd0KGUsdCl7dmFyIHI9ZS5zaXRlLG49clswXSxpPXJbMV0sbz1pLXQ7aWYoIW8pcmV0dXJuIG47dmFyIGE9ZS5QO2lmKCFhKXJldHVybi0xLzA7cj1hLnNpdGU7dmFyIHM9clswXSxsPXJbMV0sYz1sLXQ7aWYoIWMpcmV0dXJuIHM7dmFyIHU9cy1uLGg9MS9vLTEvYyxmPXUvYztyZXR1cm4gaD8oLWYrTWF0aC5zcXJ0KGYqZi0yKmgqKHUqdS8oLTIqYyktbCtjLzIraS1vLzIpKSkvaCtuOihuK3MpLzJ9ZnVuY3Rpb24gV1JlKGUsdCl7dmFyIHI9ZS5OO2lmKHIpcmV0dXJuIFJHdChyLHQpO3ZhciBuPWUuc2l0ZTtyZXR1cm4gblsxXT09PXQ/blswXToxLzB9dmFyIElHdCxOR3Q9TSgoKT0+e0N6KCk7Zm50KCk7cG50KCk7QXooKTtyUygpO0lHdD1bXX0pO2Z1bmN0aW9uIFlSZShlLHQscil7cmV0dXJuKGVbMF0tclswXSkqKHRbMV0tZVsxXSktKGVbMF0tdFswXSkqKHJbMV0tZVsxXSl9ZnVuY3Rpb24galJlKGUsdCl7cmV0dXJuIHRbMV0tZVsxXXx8dFswXS1lWzBdfWZ1bmN0aW9uIHlBKGUsdCl7dmFyIHI9ZS5zb3J0KGpSZSkucG9wKCksbixpLG87Zm9yKEFvPVtdLEphPW5ldyBBcnJheShlLmxlbmd0aCksQ3Y9bmV3IHVudCxuUz1uZXcgdW50OzspaWYobz1QeixyJiYoIW98fHJbMV08by55fHxyWzFdPT09by55JiZyWzBdPG8ueCkpKHJbMF0hPT1ufHxyWzFdIT09aSkmJihrR3Qociksbj1yWzBdLGk9clsxXSkscj1lLnBvcCgpO2Vsc2UgaWYobylMR3Qoby5hcmMpO2Vsc2UgYnJlYWs7aWYoRUd0KCksdCl7dmFyIGE9K3RbMF1bMF0scz0rdFswXVsxXSxsPSt0WzFdWzBdLGM9K3RbMV1bMV07U0d0KGEscyxsLGMpLFRHdChhLHMsbCxjKX10aGlzLmVkZ2VzPUFvLHRoaXMuY2VsbHM9SmEsQ3Y9blM9QW89SmE9bnVsbH12YXIgV3IsQUd0LEN2LEphLG5TLEFvLHJTPU0oKCk9PntOR3QoKTtmbnQoKTtwbnQoKTtBeigpO0N6KCk7V3I9MWUtNixBR3Q9MWUtMTI7eUEucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp5QSxwb2x5Z29uczpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMubWFwKGZ1bmN0aW9uKHQpe3ZhciByPXQuaGFsZmVkZ2VzLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gaG50KHQsZVtuXSl9KTtyZXR1cm4gci5kYXRhPXQuc2l0ZS5kYXRhLHJ9KX0sdHJpYW5nbGVzOmZ1bmN0aW9uKCl7dmFyIGU9W10sdD10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLmZvckVhY2goZnVuY3Rpb24ocixuKXtpZighIShzPShvPXIuaGFsZmVkZ2VzKS5sZW5ndGgpKWZvcih2YXIgaT1yLnNpdGUsbyxhPS0xLHMsbCxjPXRbb1tzLTFdXSx1PWMubGVmdD09PWk/Yy5yaWdodDpjLmxlZnQ7KythPHM7KWw9dSxjPXRbb1thXV0sdT1jLmxlZnQ9PT1pP2MucmlnaHQ6Yy5sZWZ0LGwmJnUmJm48bC5pbmRleCYmbjx1LmluZGV4JiZZUmUoaSxsLHUpPDAmJmUucHVzaChbaS5kYXRhLGwuZGF0YSx1LmRhdGFdKX0pLGV9LGxpbmtzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJpZ2h0fSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybntzb3VyY2U6ZS5sZWZ0LmRhdGEsdGFyZ2V0OmUucmlnaHQuZGF0YX19KX0sZmluZDpmdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPXRoaXMsaSxvPW4uX2ZvdW5kfHwwLGE9bi5jZWxscy5sZW5ndGgsczshKHM9bi5jZWxsc1tvXSk7KWlmKCsrbz49YSlyZXR1cm4gbnVsbDt2YXIgbD1lLXMuc2l0ZVswXSxjPXQtcy5zaXRlWzFdLHU9bCpsK2MqYztkbyBzPW4uY2VsbHNbaT1vXSxvPW51bGwscy5oYWxmZWRnZXMuZm9yRWFjaChmdW5jdGlvbihoKXt2YXIgZj1uLmVkZ2VzW2hdLHA9Zi5sZWZ0O2lmKCEoKHA9PT1zLnNpdGV8fCFwKSYmIShwPWYucmlnaHQpKSl7dmFyIGQ9ZS1wWzBdLGc9dC1wWzFdLF89ZCpkK2cqZztfPHUmJih1PV8sbz1wLmluZGV4KX19KTt3aGlsZShvIT09bnVsbCk7cmV0dXJuIG4uX2ZvdW5kPWkscj09bnVsbHx8dTw9cipyP3Muc2l0ZTpudWxsfX19KTtmdW5jdGlvbiBER3QoKXt2YXIgZT12R3QsdD14R3Qscj1udWxsO2Z1bmN0aW9uIG4oaSl7cmV0dXJuIG5ldyB5QShpLm1hcChmdW5jdGlvbihvLGEpe3ZhciBzPVtNYXRoLnJvdW5kKGUobyxhLGkpL1dyKSpXcixNYXRoLnJvdW5kKHQobyxhLGkpL1dyKSpXcl07cmV0dXJuIHMuaW5kZXg9YSxzLmRhdGE9byxzfSkscil9cmV0dXJuIG4ucG9seWdvbnM9ZnVuY3Rpb24oaSl7cmV0dXJuIG4oaSkucG9seWdvbnMoKX0sbi5saW5rcz1mdW5jdGlvbihpKXtyZXR1cm4gbihpKS5saW5rcygpfSxuLnRyaWFuZ2xlcz1mdW5jdGlvbihpKXtyZXR1cm4gbihpKS50cmlhbmdsZXMoKX0sbi54PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6bG50KCtpKSxuKTplfSxuLnk9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIGk9PSJmdW5jdGlvbiI/aTpsbnQoK2kpLG4pOnR9LG4uZXh0ZW50PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWk9PW51bGw/bnVsbDpbWytpWzBdWzBdLCtpWzBdWzFdXSxbK2lbMV1bMF0sK2lbMV1bMV1dXSxuKTpyJiZbW3JbMF1bMF0sclswXVsxXV0sW3JbMV1bMF0sclsxXVsxXV1dfSxuLnNpemU9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9aT09bnVsbD9udWxsOltbMCwwXSxbK2lbMF0sK2lbMV1dXSxuKTpyJiZbclsxXVswXS1yWzBdWzBdLHJbMV1bMV0tclswXVsxXV19LG59dmFyIE9HdD1NKCgpPT57eUd0KCk7Ykd0KCk7clMoKX0pO3ZhciB6R3Q9TSgoKT0+e09HdCgpfSk7ZnVuY3Rpb24gQkd0KCl7Zm9yKHZhciBlPTAsdD1hcmd1bWVudHMubGVuZ3RoLHI9e30sbjtlPHQ7KytlKXtpZighKG49YXJndW1lbnRzW2VdKyIiKXx8biBpbiByfHwvW1xzLl0vLnRlc3QobikpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IEl6KHIpfWZ1bmN0aW9uIEl6KGUpe3RoaXMuXz1lfWZ1bmN0aW9uICRSZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIEtSZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIEZHdChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09WFJlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgWFJlLHZBLEhHdD1NKCgpPT57WFJlPXt2YWx1ZTpmdW5jdGlvbigpe319O0l6LnByb3RvdHlwZT1CR3QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpJeixvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuXyxuPSRSZShlKyIiLHIpLGksbz0tMSxhPW4ubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK288YTspaWYoKGk9KGU9bltvXSkudHlwZSkmJihpPUtSZShyW2ldLGUubmFtZSkpKXJldHVybiBpO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK288YTspaWYoaT0oZT1uW29dKS50eXBlKXJbaV09Rkd0KHJbaV0sZS5uYW1lLHQpO2Vsc2UgaWYodD09bnVsbClmb3IoaSBpbiByKXJbaV09Rkd0KHJbaV0sZS5uYW1lLG51bGwpO3JldHVybiB0aGlzfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGU9e30sdD10aGlzLl87Zm9yKHZhciByIGluIHQpZVtyXT10W3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBJeihlKX0sY2FsbDpmdW5jdGlvbihlLHQpe2lmKChpPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHI9bmV3IEFycmF5KGkpLG49MCxpLG87bjxpOysrbilyW25dPWFyZ3VtZW50c1tuKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKG89dGhpcy5fW2VdLG49MCxpPW8ubGVuZ3RoO248aTsrK24pb1tuXS52YWx1ZS5hcHBseSh0LHIpfSxhcHBseTpmdW5jdGlvbihlLHQscil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3IodmFyIG49dGhpcy5fW2VdLGk9MCxvPW4ubGVuZ3RoO2k8bzsrK2kpbltpXS52YWx1ZS5hcHBseSh0LHIpfX07dkE9Qkd0fSk7dmFyIG1udD1NKCgpPT57SEd0KCl9KTt2YXIgTHosZ250LF9udD1NKCgpPT57THo9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLGdudD17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6THoseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifX0pO2Z1bmN0aW9uIGZkKGUpe3ZhciB0PWUrPSIiLHI9dC5pbmRleE9mKCI6Iik7cmV0dXJuIHI+PTAmJih0PWUuc2xpY2UoMCxyKSkhPT0ieG1sbnMiJiYoZT1lLnNsaWNlKHIrMSkpLGdudC5oYXNPd25Qcm9wZXJ0eSh0KT97c3BhY2U6Z250W3RdLGxvY2FsOmV9OmV9dmFyIGt6PU0oKCk9PntfbnQoKX0pO2Z1bmN0aW9uIFpSZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLm93bmVyRG9jdW1lbnQscj10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gcj09PUx6JiZ0LmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1Mej90LmNyZWF0ZUVsZW1lbnQoZSk6dC5jcmVhdGVFbGVtZW50TlMocixlKX19ZnVuY3Rpb24gSlJlKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIFJ6KGUpe3ZhciB0PWZkKGUpO3JldHVybih0LmxvY2FsP0pSZTpaUmUpKHQpfXZhciB5bnQ9TSgoKT0+e2t6KCk7X250KCl9KTtmdW5jdGlvbiBRUmUoKXt9ZnVuY3Rpb24gQXYoZSl7cmV0dXJuIGU9PW51bGw/UVJlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihlKX19dmFyIE56PU0oKCk9Pnt9KTtmdW5jdGlvbiBWR3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPUF2KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09bmV3IEFycmF5KGEpLGwsYyx1PTA7dTxhOysrdSkobD1vW3VdKSYmKGM9ZS5jYWxsKGwsbC5fX2RhdGFfXyx1LG8pKSYmKCJfX2RhdGFfXyJpbiBsJiYoYy5fX2RhdGFfXz1sLl9fZGF0YV9fKSxzW3VdPWMpO3JldHVybiBuZXcgbWkobix0aGlzLl9wYXJlbnRzKX12YXIgVUd0PU0oKCk9PntPdSgpO056KCl9KTtmdW5jdGlvbiB0TmUoKXtyZXR1cm5bXX1mdW5jdGlvbiB4QShlKXtyZXR1cm4gZT09bnVsbD90TmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGUpfX12YXIgdm50PU0oKCk9Pnt9KTtmdW5jdGlvbiBxR3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPXhBKGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1bXSxpPVtdLG89MDtvPHI7KytvKWZvcih2YXIgYT10W29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYykobD1hW2NdKSYmKG4ucHVzaChlLmNhbGwobCxsLl9fZGF0YV9fLGMsYSkpLGkucHVzaChsKSk7cmV0dXJuIG5ldyBtaShuLGkpfXZhciBHR3Q9TSgoKT0+e091KCk7dm50KCl9KTtmdW5jdGlvbiBiQShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKGUpfX12YXIgeG50PU0oKCk9Pnt9KTtmdW5jdGlvbiBXR3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPWJBKGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBtaShuLHRoaXMuX3BhcmVudHMpfXZhciBZR3Q9TSgoKT0+e091KCk7eG50KCl9KTtmdW5jdGlvbiBEeihlKXtyZXR1cm4gbmV3IEFycmF5KGUubGVuZ3RoKX12YXIgYm50PU0oKCk9Pnt9KTtmdW5jdGlvbiBqR3QoKXtyZXR1cm4gbmV3IG1pKHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKER6KSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiB3QShlLHQpe3RoaXMub3duZXJEb2N1bWVudD1lLm93bmVyRG9jdW1lbnQsdGhpcy5uYW1lc3BhY2VVUkk9ZS5uYW1lc3BhY2VVUkksdGhpcy5fbmV4dD1udWxsLHRoaXMuX3BhcmVudD1lLHRoaXMuX19kYXRhX189dH12YXIgd250PU0oKCk9PntibnQoKTtPdSgpO3dBLnByb3RvdHlwZT17Y29uc3RydWN0b3I6d0EsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0KX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IoZSl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKGUpfX19KTtmdW5jdGlvbiBYR3QoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciAkR3Q9TSgoKT0+e30pO2Z1bmN0aW9uIGVOZShlLHQscixuLGksbyl7Zm9yKHZhciBhPTAscyxsPXQubGVuZ3RoLGM9by5sZW5ndGg7YTxjOysrYSkocz10W2FdKT8ocy5fX2RhdGFfXz1vW2FdLG5bYV09cyk6clthXT1uZXcgd0EoZSxvW2FdKTtmb3IoO2E8bDsrK2EpKHM9dFthXSkmJihpW2FdPXMpfWZ1bmN0aW9uIHJOZShlLHQscixuLGksbyxhKXt2YXIgcyxsLGM9e30sdT10Lmxlbmd0aCxoPW8ubGVuZ3RoLGY9bmV3IEFycmF5KHUpLHA7Zm9yKHM9MDtzPHU7KytzKShsPXRbc10pJiYoZltzXT1wPUtHdCthLmNhbGwobCxsLl9fZGF0YV9fLHMsdCkscCBpbiBjP2lbc109bDpjW3BdPWwpO2ZvcihzPTA7czxoOysrcylwPUtHdCthLmNhbGwoZSxvW3NdLHMsbyksKGw9Y1twXSk/KG5bc109bCxsLl9fZGF0YV9fPW9bc10sY1twXT1udWxsKTpyW3NdPW5ldyB3QShlLG9bc10pO2ZvcihzPTA7czx1OysrcykobD10W3NdKSYmY1tmW3NdXT09PWwmJihpW3NdPWwpfWZ1bmN0aW9uIFpHdChlLHQpe2lmKCFlKXJldHVybiBwPW5ldyBBcnJheSh0aGlzLnNpemUoKSksYz0tMSx0aGlzLmVhY2goZnVuY3Rpb24oUCl7cFsrK2NdPVB9KSxwO3ZhciByPXQ/ck5lOmVOZSxuPXRoaXMuX3BhcmVudHMsaT10aGlzLl9ncm91cHM7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPVhHdChlKSk7Zm9yKHZhciBvPWkubGVuZ3RoLGE9bmV3IEFycmF5KG8pLHM9bmV3IEFycmF5KG8pLGw9bmV3IEFycmF5KG8pLGM9MDtjPG87KytjKXt2YXIgdT1uW2NdLGg9aVtjXSxmPWgubGVuZ3RoLHA9ZS5jYWxsKHUsdSYmdS5fX2RhdGFfXyxjLG4pLGQ9cC5sZW5ndGgsZz1zW2NdPW5ldyBBcnJheShkKSxfPWFbY109bmV3IEFycmF5KGQpLHk9bFtjXT1uZXcgQXJyYXkoZik7cih1LGgsZyxfLHkscCx0KTtmb3IodmFyIHg9MCxiPTAsUyxDO3g8ZDsrK3gpaWYoUz1nW3hdKXtmb3IoeD49YiYmKGI9eCsxKTshKEM9X1tiXSkmJisrYjxkOyk7Uy5fbmV4dD1DfHxudWxsfX1yZXR1cm4gYT1uZXcgbWkoYSxuKSxhLl9lbnRlcj1zLGEuX2V4aXQ9bCxhfXZhciBLR3QsSkd0PU0oKCk9PntPdSgpO3dudCgpOyRHdCgpO0tHdD0iJCJ9KTtmdW5jdGlvbiBRR3QoKXtyZXR1cm4gbmV3IG1pKHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAoRHopLHRoaXMuX3BhcmVudHMpfXZhciB0V3Q9TSgoKT0+e2JudCgpO091KCl9KTtmdW5jdGlvbiBlV3QoZSx0LHIpe3ZhciBuPXRoaXMuZW50ZXIoKSxpPXRoaXMsbz10aGlzLmV4aXQoKTtyZXR1cm4gbj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lKG4pOm4uYXBwZW5kKGUrIiIpLHQhPW51bGwmJihpPXQoaSkpLHI9PW51bGw/by5yZW1vdmUoKTpyKG8pLG4mJmk/bi5tZXJnZShpKS5vcmRlcigpOml9dmFyIHJXdD1NKCgpPT57fSk7ZnVuY3Rpb24gbld0KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj1lLl9ncm91cHMsbj10Lmxlbmd0aCxpPXIubGVuZ3RoLG89TWF0aC5taW4obixpKSxhPW5ldyBBcnJheShuKSxzPTA7czxvOysrcylmb3IodmFyIGw9dFtzXSxjPXJbc10sdT1sLmxlbmd0aCxoPWFbc109bmV3IEFycmF5KHUpLGYscD0wO3A8dTsrK3ApKGY9bFtwXXx8Y1twXSkmJihoW3BdPWYpO2Zvcig7czxuOysrcylhW3NdPXRbc107cmV0dXJuIG5ldyBtaShhLHRoaXMuX3BhcmVudHMpfXZhciBpV3Q9TSgoKT0+e091KCl9KTtmdW5jdGlvbiBvV3QoKXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHQ9LTEscj1lLmxlbmd0aDsrK3Q8cjspZm9yKHZhciBuPWVbdF0saT1uLmxlbmd0aC0xLG89bltpXSxhOy0taT49MDspKGE9bltpXSkmJihvJiZhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG8pXjQmJm8ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSxvKSxvPWEpO3JldHVybiB0aGlzfXZhciBhV3Q9TSgoKT0+e30pO2Z1bmN0aW9uIHNXdChlKXtlfHwoZT1uTmUpO2Z1bmN0aW9uIHQoaCxmKXtyZXR1cm4gaCYmZj9lKGguX19kYXRhX18sZi5fX2RhdGFfXyk6IWgtIWZ9Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxuPXIubGVuZ3RoLGk9bmV3IEFycmF5KG4pLG89MDtvPG47KytvKXtmb3IodmFyIGE9cltvXSxzPWEubGVuZ3RoLGw9aVtvXT1uZXcgQXJyYXkocyksYyx1PTA7dTxzOysrdSkoYz1hW3VdKSYmKGxbdV09Yyk7bC5zb3J0KHQpfXJldHVybiBuZXcgbWkoaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfWZ1bmN0aW9uIG5OZShlLHQpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn12YXIgbFd0PU0oKCk9PntPdSgpfSk7ZnVuY3Rpb24gY1d0KCl7dmFyIGU9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxlLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfXZhciB1V3Q9TSgoKT0+e30pO2Z1bmN0aW9uIGhXdCgpe3ZhciBlPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdD0tMTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZVsrK3RdPXRoaXN9KSxlfXZhciBmV3Q9TSgoKT0+e30pO2Z1bmN0aW9uIHBXdCgpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsdD0wLHI9ZS5sZW5ndGg7dDxyOysrdClmb3IodmFyIG49ZVt0XSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKXt2YXIgYT1uW2ldO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9dmFyIGRXdD1NKCgpPT57fSk7ZnVuY3Rpb24gbVd0KCl7dmFyIGU9MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytlfSksZX12YXIgZ1d0PU0oKCk9Pnt9KTtmdW5jdGlvbiBfV3QoKXtyZXR1cm4hdGhpcy5ub2RlKCl9dmFyIHlXdD1NKCgpPT57fSk7ZnVuY3Rpb24gdld0KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxvPTAsYT1pLmxlbmd0aCxzO288YTsrK28pKHM9aVtvXSkmJmUuY2FsbChzLHMuX19kYXRhX18sbyxpKTtyZXR1cm4gdGhpc312YXIgeFd0PU0oKCk9Pnt9KTtmdW5jdGlvbiBpTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSl9fWZ1bmN0aW9uIG9OZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIGFOZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKGUsdCl9fWZ1bmN0aW9uIHNOZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQpfX1mdW5jdGlvbiBsTmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpOnRoaXMuc2V0QXR0cmlidXRlKGUscil9fWZ1bmN0aW9uIGNOZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHIpfX1mdW5jdGlvbiBiV3QoZSx0KXt2YXIgcj1mZChlKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBuPXRoaXMubm9kZSgpO3JldHVybiByLmxvY2FsP24uZ2V0QXR0cmlidXRlTlMoci5zcGFjZSxyLmxvY2FsKTpuLmdldEF0dHJpYnV0ZShyKX1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP3IubG9jYWw/b05lOmlOZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9yLmxvY2FsP2NOZTpsTmU6ci5sb2NhbD9zTmU6YU5lKShyLHQpKX12YXIgd1d0PU0oKCk9PntreigpfSk7ZnVuY3Rpb24gT3ooZSl7cmV0dXJuIGUub3duZXJEb2N1bWVudCYmZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHxlLmRvY3VtZW50JiZlfHxlLmRlZmF1bHRWaWV3fXZhciBTbnQ9TSgoKT0+e30pO2Z1bmN0aW9uIHVOZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpfX1mdW5jdGlvbiBoTmUoZSx0LHIpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSx0LHIpfX1mdW5jdGlvbiBmTmUoZSx0LHIpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO249PW51bGw/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUsbixyKX19ZnVuY3Rpb24gU1d0KGUsdCxyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD91TmU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/Zk5lOmhOZSkoZSx0LHI9PW51bGw/IiI6cikpOnFnKHRoaXMubm9kZSgpLGUpfWZ1bmN0aW9uIHFnKGUsdCl7cmV0dXJuIGUuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSh0KXx8T3ooZSkuZ2V0Q29tcHV0ZWRTdHlsZShlLG51bGwpLmdldFByb3BlcnR5VmFsdWUodCl9dmFyIE1udD1NKCgpPT57U250KCl9KTtmdW5jdGlvbiBwTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbZV19fWZ1bmN0aW9uIGROZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbZV09dH19ZnVuY3Rpb24gbU5lKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD9kZWxldGUgdGhpc1tlXTp0aGlzW2VdPXJ9fWZ1bmN0aW9uIE1XdChlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP3BOZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9tTmU6ZE5lKShlLHQpKTp0aGlzLm5vZGUoKVtlXX12YXIgRVd0PU0oKCk9Pnt9KTtmdW5jdGlvbiBUV3QoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIEVudChlKXtyZXR1cm4gZS5jbGFzc0xpc3R8fG5ldyBDV3QoZSl9ZnVuY3Rpb24gQ1d0KGUpe3RoaXMuX25vZGU9ZSx0aGlzLl9uYW1lcz1UV3QoZS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiBBV3QoZSx0KXtmb3IodmFyIHI9RW50KGUpLG49LTEsaT10Lmxlbmd0aDsrK248aTspci5hZGQodFtuXSl9ZnVuY3Rpb24gUFd0KGUsdCl7Zm9yKHZhciByPUVudChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIucmVtb3ZlKHRbbl0pfWZ1bmN0aW9uIGdOZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtBV3QodGhpcyxlKX19ZnVuY3Rpb24gX05lKGUpe3JldHVybiBmdW5jdGlvbigpe1BXdCh0aGlzLGUpfX1mdW5jdGlvbiB5TmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXsodC5hcHBseSh0aGlzLGFyZ3VtZW50cyk/QVd0OlBXdCkodGhpcyxlKX19ZnVuY3Rpb24gSVd0KGUsdCl7dmFyIHI9VFd0KGUrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPUVudCh0aGlzLm5vZGUoKSksaT0tMSxvPXIubGVuZ3RoOysraTxvOylpZighbi5jb250YWlucyhyW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj95TmU6dD9nTmU6X05lKShyLHQpKX12YXIgTFd0PU0oKCk9PntDV3QucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihlKTt0PDAmJih0aGlzLl9uYW1lcy5wdXNoKGUpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UodCwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihlKT49MH19fSk7ZnVuY3Rpb24gdk5lKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiB4TmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1lfX1mdW5jdGlvbiBiTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIGtXdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD92TmU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP2JOZTp4TmUpKGUpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH12YXIgUld0PU0oKCk9Pnt9KTtmdW5jdGlvbiB3TmUoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBTTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9ZX19ZnVuY3Rpb24gTU5lKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gTld0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsP3dOZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/TU5lOlNOZSkoZSkpOnRoaXMubm9kZSgpLmlubmVySFRNTH12YXIgRFd0PU0oKCk9Pnt9KTtmdW5jdGlvbiBFTmUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gT1d0KCl7cmV0dXJuIHRoaXMuZWFjaChFTmUpfXZhciB6V3Q9TSgoKT0+e30pO2Z1bmN0aW9uIFROZSgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIEZXdCgpe3JldHVybiB0aGlzLmVhY2goVE5lKX12YXIgQld0PU0oKCk9Pnt9KTtmdW5jdGlvbiBIV3QoZSl7dmFyIHQ9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpSeihlKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX12YXIgVld0PU0oKCk9Pnt5bnQoKX0pO2Z1bmN0aW9uIENOZSgpe3JldHVybiBudWxsfWZ1bmN0aW9uIFVXdChlLHQpe3ZhciByPXR5cGVvZiBlPT0iZnVuY3Rpb24iP2U6UnooZSksbj10PT1udWxsP0NOZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90OkF2KHQpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxuLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX12YXIgcVd0PU0oKCk9Pnt5bnQoKTtOeigpfSk7ZnVuY3Rpb24gQU5lKCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlO2UmJmUucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gR1d0KCl7cmV0dXJuIHRoaXMuZWFjaChBTmUpfXZhciBXV3Q9TSgoKT0+e30pO2Z1bmN0aW9uIFBOZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCExKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24gSU5lKCl7dmFyIGU9dGhpcy5jbG9uZU5vZGUoITApLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2libGluZyk6ZX1mdW5jdGlvbiBZV3QoZSl7cmV0dXJuIHRoaXMuc2VsZWN0KGU/SU5lOlBOZSl9dmFyIGpXdD1NKCgpPT57fSk7ZnVuY3Rpb24gWFd0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixlKTp0aGlzLm5vZGUoKS5fX2RhdGFfX312YXIgJFd0PU0oKCk9Pnt9KTtmdW5jdGlvbiBMTmUoZSx0LHIpe3JldHVybiBlPUpXdChlLHQsciksZnVuY3Rpb24obil7dmFyIGk9bi5yZWxhdGVkVGFyZ2V0OyghaXx8aSE9PXRoaXMmJiEoaS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSY4KSkmJmUuY2FsbCh0aGlzLG4pfX1mdW5jdGlvbiBKV3QoZSx0LHIpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT1ZcjtZcj1uO3RyeXtlLmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLHQscil9ZmluYWxseXtZcj1pfX19ZnVuY3Rpb24ga05lKGUpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24odCl7dmFyIHI9IiIsbj10LmluZGV4T2YoIi4iKTtyZXR1cm4gbj49MCYmKHI9dC5zbGljZShuKzEpLHQ9dC5zbGljZSgwLG4pKSx7dHlwZTp0LG5hbWU6cn19KX1mdW5jdGlvbiBSTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX29uO2lmKCEhdCl7Zm9yKHZhciByPTAsbj0tMSxpPXQubGVuZ3RoLG87cjxpOysrcilvPXRbcl0sKCFlLnR5cGV8fG8udHlwZT09PWUudHlwZSkmJm8ubmFtZT09PWUubmFtZT90aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLG8ubGlzdGVuZXIsby5jYXB0dXJlKTp0Wysrbl09bzsrK24/dC5sZW5ndGg9bjpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gTk5lKGUsdCxyKXt2YXIgbj1aV3QuaGFzT3duUHJvcGVydHkoZS50eXBlKT9MTmU6Sld0O3JldHVybiBmdW5jdGlvbihpLG8sYSl7dmFyIHM9dGhpcy5fX29uLGwsYz1uKHQsbyxhKTtpZihzKXtmb3IodmFyIHU9MCxoPXMubGVuZ3RoO3U8aDsrK3UpaWYoKGw9c1t1XSkudHlwZT09PWUudHlwZSYmbC5uYW1lPT09ZS5uYW1lKXt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXIsbC5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXI9YyxsLmNhcHR1cmU9ciksbC52YWx1ZT10O3JldHVybn19dGhpcy5hZGRFdmVudExpc3RlbmVyKGUudHlwZSxjLHIpLGw9e3R5cGU6ZS50eXBlLG5hbWU6ZS5uYW1lLHZhbHVlOnQsbGlzdGVuZXI6YyxjYXB0dXJlOnJ9LHM/cy5wdXNoKGwpOnRoaXMuX19vbj1bbF19fWZ1bmN0aW9uIFFXdChlLHQscil7dmFyIG49a05lKGUrIiIpLGksbz1uLmxlbmd0aCxhO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIHM9dGhpcy5ub2RlKCkuX19vbjtpZihzKXtmb3IodmFyIGw9MCxjPXMubGVuZ3RoLHU7bDxjOysrbClmb3IoaT0wLHU9c1tsXTtpPG87KytpKWlmKChhPW5baV0pLnR5cGU9PT11LnR5cGUmJmEubmFtZT09PXUubmFtZSlyZXR1cm4gdS52YWx1ZX1yZXR1cm59Zm9yKHM9dD9OTmU6Uk5lLHI9PW51bGwmJihyPSExKSxpPTA7aTxvOysraSl0aGlzLmVhY2gocyhuW2ldLHQscikpO3JldHVybiB0aGlzfWZ1bmN0aW9uIFRudChlLHQscixuKXt2YXIgaT1ZcjtlLnNvdXJjZUV2ZW50PVlyLFlyPWU7dHJ5e3JldHVybiB0LmFwcGx5KHIsbil9ZmluYWxseXtZcj1pfX12YXIgWld0LFlyLEtXdCx6ej1NKCgpPT57Wld0PXt9LFlyPW51bGw7dHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmKEtXdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIm9ubW91c2VlbnRlciJpbiBLV3R8fChaV3Q9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpfSk7ZnVuY3Rpb24gdFl0KGUsdCxyKXt2YXIgbj1PeihlKSxpPW4uQ3VzdG9tRXZlbnQ7dHlwZW9mIGk9PSJmdW5jdGlvbiI/aT1uZXcgaSh0LHIpOihpPW4uZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iikscj8oaS5pbml0RXZlbnQodCxyLmJ1YmJsZXMsci5jYW5jZWxhYmxlKSxpLmRldGFpbD1yLmRldGFpbCk6aS5pbml0RXZlbnQodCwhMSwhMSkpLGUuZGlzcGF0Y2hFdmVudChpKX1mdW5jdGlvbiBETmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdFl0KHRoaXMsZSx0KX19ZnVuY3Rpb24gT05lKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRZdCh0aGlzLGUsdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBlWXQoZSx0KXtyZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9PTmU6RE5lKShlLHQpKX12YXIgcll0PU0oKCk9PntTbnQoKX0pO2Z1bmN0aW9uIG1pKGUsdCl7dGhpcy5fZ3JvdXBzPWUsdGhpcy5fcGFyZW50cz10fWZ1bmN0aW9uIG5ZdCgpe3JldHVybiBuZXcgbWkoW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSxDbnQpfXZhciBDbnQscGQsT3U9TSgoKT0+e1VHdCgpO0dHdCgpO1lHdCgpO0pHdCgpO3dudCgpO3RXdCgpO3JXdCgpO2lXdCgpO2FXdCgpO2xXdCgpO3VXdCgpO2ZXdCgpO2RXdCgpO2dXdCgpO3lXdCgpO3hXdCgpO3dXdCgpO01udCgpO0VXdCgpO0xXdCgpO1JXdCgpO0RXdCgpO3pXdCgpO0JXdCgpO1ZXdCgpO3FXdCgpO1dXdCgpO2pXdCgpOyRXdCgpO3p6KCk7cll0KCk7Q250PVtudWxsXTttaS5wcm90b3R5cGU9bll0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6bWksc2VsZWN0OlZHdCxzZWxlY3RBbGw6cUd0LGZpbHRlcjpXR3QsZGF0YTpaR3QsZW50ZXI6akd0LGV4aXQ6UUd0LGpvaW46ZVd0LG1lcmdlOm5XdCxvcmRlcjpvV3Qsc29ydDpzV3QsY2FsbDpjV3Qsbm9kZXM6aFd0LG5vZGU6cFd0LHNpemU6bVd0LGVtcHR5Ol9XdCxlYWNoOnZXdCxhdHRyOmJXdCxzdHlsZTpTV3QscHJvcGVydHk6TVd0LGNsYXNzZWQ6SVd0LHRleHQ6a1d0LGh0bWw6Tld0LHJhaXNlOk9XdCxsb3dlcjpGV3QsYXBwZW5kOkhXdCxpbnNlcnQ6VVd0LHJlbW92ZTpHV3QsY2xvbmU6WVd0LGRhdHVtOlhXdCxvbjpRV3QsZGlzcGF0Y2g6ZVl0fTtwZD1uWXR9KTtmdW5jdGlvbiBkZChlKXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciP25ldyBtaShbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IG1pKFtbZV1dLENudCl9dmFyIGlZdD1NKCgpPT57T3UoKX0pO2Z1bmN0aW9uIEZ6KCl7Zm9yKHZhciBlPVlyLHQ7dD1lLnNvdXJjZUV2ZW50OyllPXQ7cmV0dXJuIGV9dmFyIEFudD1NKCgpPT57enooKX0pO2Z1bmN0aW9uIEJ6KGUsdCl7dmFyIHI9ZS5vd25lclNWR0VsZW1lbnR8fGU7aWYoci5jcmVhdGVTVkdQb2ludCl7dmFyIG49ci5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBuLng9dC5jbGllbnRYLG4ueT10LmNsaWVudFksbj1uLm1hdHJpeFRyYW5zZm9ybShlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSksW24ueCxuLnldfXZhciBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW3QuY2xpZW50WC1pLmxlZnQtZS5jbGllbnRMZWZ0LHQuY2xpZW50WS1pLnRvcC1lLmNsaWVudFRvcF19dmFyIFBudD1NKCgpPT57fSk7ZnVuY3Rpb24gaVMoZSl7dmFyIHQ9RnooKTtyZXR1cm4gdC5jaGFuZ2VkVG91Y2hlcyYmKHQ9dC5jaGFuZ2VkVG91Y2hlc1swXSksQnooZSx0KX12YXIgb1l0PU0oKCk9PntBbnQoKTtQbnQoKX0pO2Z1bmN0aW9uIEh6KGUsdCxyKXthcmd1bWVudHMubGVuZ3RoPDMmJihyPXQsdD1GeigpLmNoYW5nZWRUb3VjaGVzKTtmb3IodmFyIG49MCxpPXQ/dC5sZW5ndGg6MCxvO248aTsrK24paWYoKG89dFtuXSkuaWRlbnRpZmllcj09PXIpcmV0dXJuIEJ6KGUsbyk7cmV0dXJuIG51bGx9dmFyIGFZdD1NKCgpPT57QW50KCk7UG50KCl9KTt2YXIgTHM9TSgoKT0+e3hudCgpO29ZdCgpO2t6KCk7aVl0KCk7T3UoKTtOeigpO3ZudCgpO01udCgpO2FZdCgpO3p6KCl9KTtmdW5jdGlvbiBWeigpe1lyLnByZXZlbnREZWZhdWx0KCksWXIuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9dmFyIHNZdD1NKCgpPT57THMoKX0pO2Z1bmN0aW9uIEludChlKXt2YXIgdD1lLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxyPWRkKGUpLm9uKCJkcmFnc3RhcnQuZHJhZyIsVnosITApOyJvbnNlbGVjdHN0YXJ0ImluIHQ/ci5vbigic2VsZWN0c3RhcnQuZHJhZyIsVnosITApOih0Ll9fbm9zZWxlY3Q9dC5zdHlsZS5Nb3pVc2VyU2VsZWN0LHQuc3R5bGUuTW96VXNlclNlbGVjdD0ibm9uZSIpfWZ1bmN0aW9uIExudChlLHQpe3ZhciByPWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LG49ZGQoZSkub24oImRyYWdzdGFydC5kcmFnIixudWxsKTt0JiYobi5vbigiY2xpY2suZHJhZyIsVnosITApLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtuLm9uKCJjbGljay5kcmFnIixudWxsKX0sMCkpLCJvbnNlbGVjdHN0YXJ0ImluIHI/bi5vbigic2VsZWN0c3RhcnQuZHJhZyIsbnVsbCk6KHIuc3R5bGUuTW96VXNlclNlbGVjdD1yLl9fbm9zZWxlY3QsZGVsZXRlIHIuX19ub3NlbGVjdCl9dmFyIGxZdD1NKCgpPT57THMoKTtzWXQoKX0pO3ZhciBjWXQ9TSgoKT0+e2xZdCgpfSk7ZnVuY3Rpb24gVXooZSx0LHIpe2UucHJvdG90eXBlPXQucHJvdG90eXBlPXIsci5jb25zdHJ1Y3Rvcj1lfWZ1bmN0aW9uIGtudChlLHQpe3ZhciByPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUpO2Zvcih2YXIgbiBpbiB0KXJbbl09dFtuXTtyZXR1cm4gcn12YXIgdVl0PU0oKCk9Pnt9KTtmdW5jdGlvbiBFQSgpe31mdW5jdGlvbiBmWXQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBHTmUoKXtyZXR1cm4geVl0KHRoaXMpLmZvcm1hdEhzbCgpfWZ1bmN0aW9uIHBZdCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIEdnKGUpe3ZhciB0LHI7cmV0dXJuIGU9KGUrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLCh0PXpOZS5leGVjKGUpKT8ocj10WzFdLmxlbmd0aCx0PXBhcnNlSW50KHRbMV0sMTYpLHI9PT02P2RZdCh0KTpyPT09Mz9uZXcgX2wodD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fHQmMjQwLCh0JjE1KTw8NHx0JjE1LDEpOnI9PT04P3F6KHQ+PjI0JjI1NSx0Pj4xNiYyNTUsdD4+OCYyNTUsKHQmMjU1KS8yNTUpOnI9PT00P3F6KHQ+PjEyJjE1fHQ+PjgmMjQwLHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwoKHQmMTUpPDw0fHQmMTUpLzI1NSk6bnVsbCk6KHQ9Rk5lLmV4ZWMoZSkpP25ldyBfbCh0WzFdLHRbMl0sdFszXSwxKToodD1CTmUuZXhlYyhlKSk/bmV3IF9sKHRbMV0qMjU1LzEwMCx0WzJdKjI1NS8xMDAsdFszXSoyNTUvMTAwLDEpOih0PUhOZS5leGVjKGUpKT9xeih0WzFdLHRbMl0sdFszXSx0WzRdKToodD1WTmUuZXhlYyhlKSk/cXoodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsdFs0XSk6KHQ9VU5lLmV4ZWMoZSkpP19ZdCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLDEpOih0PXFOZS5leGVjKGUpKT9fWXQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCx0WzRdKTpoWXQuaGFzT3duUHJvcGVydHkoZSk/ZFl0KGhZdFtlXSk6ZT09PSJ0cmFuc3BhcmVudCI/bmV3IF9sKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gZFl0KGUpe3JldHVybiBuZXcgX2woZT4+MTYmMjU1LGU+PjgmMjU1LGUmMjU1LDEpfWZ1bmN0aW9uIHF6KGUsdCxyLG4pe3JldHVybiBuPD0wJiYoZT10PXI9TmFOKSxuZXcgX2woZSx0LHIsbil9ZnVuY3Rpb24gV05lKGUpe3JldHVybiBlIGluc3RhbmNlb2YgRUF8fChlPUdnKGUpKSxlPyhlPWUucmdiKCksbmV3IF9sKGUucixlLmcsZS5iLGUub3BhY2l0eSkpOm5ldyBfbH1mdW5jdGlvbiBhUyhlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/V05lKGUpOm5ldyBfbChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gX2woZSx0LHIsbil7dGhpcy5yPStlLHRoaXMuZz0rdCx0aGlzLmI9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIG1ZdCgpe3JldHVybiIjIitSbnQodGhpcy5yKStSbnQodGhpcy5nKStSbnQodGhpcy5iKX1mdW5jdGlvbiBnWXQoKXt2YXIgZT10aGlzLm9wYWNpdHk7cmV0dXJuIGU9aXNOYU4oZSk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLChlPT09MT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKyhlPT09MT8iKSI6IiwgIitlKyIpIil9ZnVuY3Rpb24gUm50KGUpe3JldHVybiBlPU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoZSl8fDApKSwoZTwxNj8iMCI6IiIpK2UudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIF9ZdChlLHQscixuKXtyZXR1cm4gbjw9MD9lPXQ9cj1OYU46cjw9MHx8cj49MT9lPXQ9TmFOOnQ8PTAmJihlPU5hTiksbmV3IEFmKGUsdCxyLG4pfWZ1bmN0aW9uIHlZdChlKXtpZihlIGluc3RhbmNlb2YgQWYpcmV0dXJuIG5ldyBBZihlLmgsZS5zLGUubCxlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiBFQXx8KGU9R2coZSkpLCFlKXJldHVybiBuZXcgQWY7aWYoZSBpbnN0YW5jZW9mIEFmKXJldHVybiBlO2U9ZS5yZ2IoKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT1NYXRoLm1pbih0LHIsbiksbz1NYXRoLm1heCh0LHIsbiksYT1OYU4scz1vLWksbD0obytpKS8yO3JldHVybiBzPyh0PT09bz9hPShyLW4pL3MrKHI8bikqNjpyPT09bz9hPShuLXQpL3MrMjphPSh0LXIpL3MrNCxzLz1sPC41P28raToyLW8taSxhKj02MCk6cz1sPjAmJmw8MT8wOmEsbmV3IEFmKGEscyxsLGUub3BhY2l0eSl9ZnVuY3Rpb24gdll0KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT95WXQoZSk6bmV3IEFmKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBBZihlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gTm50KGUsdCxyKXtyZXR1cm4oZTw2MD90KyhyLXQpKmUvNjA6ZTwxODA/cjplPDI0MD90KyhyLXQpKigyNDAtZSkvNjA6dCkqMjU1fXZhciBTQSxHeixvUyxNQSxQZix6TmUsRk5lLEJOZSxITmUsVk5lLFVOZSxxTmUsaFl0LHhZdD1NKCgpPT57dVl0KCk7U0E9LjcsR3o9MS9TQSxvUz0iXFxzKihbKy1dP1xcZCspXFxzKiIsTUE9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsUGY9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLHpOZT0vXiMoWzAtOWEtZl17Myw4fSkkLyxGTmU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW29TLG9TLG9TXSsiXFwpJCIpLEJOZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbUGYsUGYsUGZdKyJcXCkkIiksSE5lPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbb1Msb1Msb1MsTUFdKyJcXCkkIiksVk5lPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbUGYsUGYsUGYsTUFdKyJcXCkkIiksVU5lPW5ldyBSZWdFeHAoIl5oc2xcXCgiK1tNQSxQZixQZl0rIlxcKSQiKSxxTmU9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1tNQSxQZixQZixNQV0rIlxcKSQiKSxoWXQ9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07VXooRUEsR2cse2NvcHk6ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsdGhpcyxlKX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6Zll0LGZvcm1hdEhleDpmWXQsZm9ybWF0SHNsOkdOZSxmb3JtYXRSZ2I6cFl0LHRvU3RyaW5nOnBZdH0pO1V6KF9sLGFTLGtudChFQSx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9HejpNYXRoLnBvdyhHeixlKSxuZXcgX2wodGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/U0E6TWF0aC5wb3coU0EsZSksbmV3IF9sKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6bVl0LGZvcm1hdEhleDptWXQsZm9ybWF0UmdiOmdZdCx0b1N0cmluZzpnWXR9KSk7VXooQWYsdll0LGtudChFQSx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9HejpNYXRoLnBvdyhHeixlKSxuZXcgQWYodGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9TQTpNYXRoLnBvdyhTQSxlKSxuZXcgQWYodGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmglMzYwKyh0aGlzLmg8MCkqMzYwLHQ9aXNOYU4oZSl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMscj10aGlzLmwsbj1yKyhyPC41P3I6MS1yKSp0LGk9MipyLW47cmV0dXJuIG5ldyBfbChObnQoZT49MjQwP2UtMjQwOmUrMTIwLGksbiksTm50KGUsaSxuKSxObnQoZTwxMjA/ZSsyNDA6ZS0xMjAsaSxuKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/ImhzbCgiOiJoc2xhKCIpKyh0aGlzLmh8fDApKyIsICIrKHRoaXMuc3x8MCkqMTAwKyIlLCAiKyh0aGlzLmx8fDApKjEwMCsiJSIrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX19KSl9KTt2YXIgRG50PU0oKCk9Pnt4WXQoKX0pO2Z1bmN0aW9uIE9udChlLHQscixuLGkpe3ZhciBvPWUqZSxhPW8qZTtyZXR1cm4oKDEtMyplKzMqby1hKSp0Kyg0LTYqbyszKmEpKnIrKDErMyplKzMqby0zKmEpKm4rYSppKS82fWZ1bmN0aW9uIGJZdChlKXt2YXIgdD1lLmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1yPD0wP3I9MDpyPj0xPyhyPTEsdC0xKTpNYXRoLmZsb29yKHIqdCksaT1lW25dLG89ZVtuKzFdLGE9bj4wP2Vbbi0xXToyKmktbyxzPW48dC0xP2VbbisyXToyKm8taTtyZXR1cm4gT250KChyLW4vdCkqdCxhLGksbyxzKX19dmFyIHpudD1NKCgpPT57fSk7ZnVuY3Rpb24gd1l0KGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1NYXRoLmZsb29yKCgociU9MSk8MD8rK3I6cikqdCksaT1lWyhuK3QtMSkldF0sbz1lW24ldF0sYT1lWyhuKzEpJXRdLHM9ZVsobisyKSV0XTtyZXR1cm4gT250KChyLW4vdCkqdCxpLG8sYSxzKX19dmFyIFNZdD1NKCgpPT57em50KCl9KTtmdW5jdGlvbiBGbnQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBNWXQ9TSgoKT0+e30pO2Z1bmN0aW9uIFlOZShlLHQpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gZStyKnR9fWZ1bmN0aW9uIGpOZShlLHQscil7cmV0dXJuIGU9TWF0aC5wb3coZSxyKSx0PU1hdGgucG93KHQsciktZSxyPTEvcixmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5wb3coZStuKnQscil9fWZ1bmN0aW9uIEVZdChlKXtyZXR1cm4oZT0rZSk9PTE/V3o6ZnVuY3Rpb24odCxyKXtyZXR1cm4gci10P2pOZSh0LHIsZSk6Rm50KGlzTmFOKHQpP3I6dCl9fWZ1bmN0aW9uIFd6KGUsdCl7dmFyIHI9dC1lO3JldHVybiByP1lOZShlLHIpOkZudChpc05hTihlKT90OmUpfXZhciBUWXQ9TSgoKT0+e01ZdCgpfSk7ZnVuY3Rpb24gQ1l0KGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKSxhLHM7Zm9yKGE9MDthPHI7KythKXM9YVModFthXSksblthXT1zLnJ8fDAsaVthXT1zLmd8fDAsb1thXT1zLmJ8fDA7cmV0dXJuIG49ZShuKSxpPWUoaSksbz1lKG8pLHMub3BhY2l0eT0xLGZ1bmN0aW9uKGwpe3JldHVybiBzLnI9bihsKSxzLmc9aShsKSxzLmI9byhsKSxzKyIifX19dmFyIFl6LFhOZSwkTmUsQVl0PU0oKCk9PntEbnQoKTt6bnQoKTtTWXQoKTtUWXQoKTtZej1mdW5jdGlvbiBlKHQpe3ZhciByPUVZdCh0KTtmdW5jdGlvbiBuKGksbyl7dmFyIGE9cigoaT1hUyhpKSkuciwobz1hUyhvKSkucikscz1yKGkuZyxvLmcpLGw9cihpLmIsby5iKSxjPVd6KGkub3BhY2l0eSxvLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gaS5yPWEodSksaS5nPXModSksaS5iPWwodSksaS5vcGFjaXR5PWModSksaSsiIn19cmV0dXJuIG4uZ2FtbWE9ZSxufSgxKTtYTmU9Q1l0KGJZdCksJE5lPUNZdCh3WXQpfSk7ZnVuY3Rpb24gSWMoZSx0KXtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKHIpe3JldHVybiBlKigxLXIpK3Qqcn19dmFyIGp6PU0oKCk9Pnt9KTtmdW5jdGlvbiBLTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIFpOZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodCkrIiJ9fWZ1bmN0aW9uIFZudChlLHQpe3ZhciByPUhudC5sYXN0SW5kZXg9Qm50Lmxhc3RJbmRleD0wLG4saSxvLGE9LTEscz1bXSxsPVtdO2ZvcihlPWUrIiIsdD10KyIiOyhuPUhudC5leGVjKGUpKSYmKGk9Qm50LmV4ZWModCkpOykobz1pLmluZGV4KT5yJiYobz10LnNsaWNlKHIsbyksc1thXT9zW2FdKz1vOnNbKythXT1vKSwobj1uWzBdKT09PShpPWlbMF0pP3NbYV0/c1thXSs9aTpzWysrYV09aTooc1srK2FdPW51bGwsbC5wdXNoKHtpOmEseDpJYyhuLGkpfSkpLHI9Qm50Lmxhc3RJbmRleDtyZXR1cm4gcjx0Lmxlbmd0aCYmKG89dC5zbGljZShyKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLHMubGVuZ3RoPDI/bFswXT9aTmUobFswXS54KTpLTmUodCk6KHQ9bC5sZW5ndGgsZnVuY3Rpb24oYyl7Zm9yKHZhciB1PTAsaDt1PHQ7Kyt1KXNbKGg9bFt1XSkuaV09aC54KGMpO3JldHVybiBzLmpvaW4oIiIpfSl9dmFyIEhudCxCbnQsUFl0PU0oKCk9PntqeigpO0hudD0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csQm50PW5ldyBSZWdFeHAoSG50LnNvdXJjZSwiZyIpfSk7ZnVuY3Rpb24gVW50KGUsdCxyLG4saSxvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KGUqZSt0KnQpKSYmKGUvPWEsdC89YSksKGw9ZSpyK3QqbikmJihyLT1lKmwsbi09dCpsKSwocz1NYXRoLnNxcnQocipyK24qbikpJiYoci89cyxuLz1zLGwvPXMpLGUqbjx0KnImJihlPS1lLHQ9LXQsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMih0LGUpKklZdCxza2V3WDpNYXRoLmF0YW4obCkqSVl0LHNjYWxlWDphLHNjYWxlWTpzfX12YXIgSVl0LFh6LExZdD1NKCgpPT57SVl0PTE4MC9NYXRoLlBJLFh6PXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9fSk7ZnVuY3Rpb24gUll0KGUpe3JldHVybiBlPT09Im5vbmUiP1h6OihUQXx8KFRBPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLHFudD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsa1l0PWRvY3VtZW50LmRlZmF1bHRWaWV3KSxUQS5zdHlsZS50cmFuc2Zvcm09ZSxlPWtZdC5nZXRDb21wdXRlZFN0eWxlKHFudC5hcHBlbmRDaGlsZChUQSksbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIikscW50LnJlbW92ZUNoaWxkKFRBKSxlPWUuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSxVbnQoK2VbMF0sK2VbMV0sK2VbMl0sK2VbM10sK2VbNF0sK2VbNV0pKX1mdW5jdGlvbiBOWXQoZSl7cmV0dXJuIGU9PW51bGw/WHo6KCR6fHwoJHo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksJHouc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLGUpLChlPSR6LnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpPyhlPWUubWF0cml4LFVudChlLmEsZS5iLGUuYyxlLmQsZS5lLGUuZikpOlh6KX12YXIgVEEscW50LGtZdCwkeixEWXQ9TSgoKT0+e0xZdCgpfSk7ZnVuY3Rpb24gT1l0KGUsdCxyLG4pe2Z1bmN0aW9uIGkoYyl7cmV0dXJuIGMubGVuZ3RoP2MucG9wKCkrIiAiOiIifWZ1bmN0aW9uIG8oYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLHQsbnVsbCxyKTtkLnB1c2goe2k6Zy00LHg6SWMoYyxoKX0se2k6Zy0yLHg6SWModSxmKX0pfWVsc2UoaHx8ZikmJnAucHVzaCgidHJhbnNsYXRlKCIraCt0K2Yrcil9ZnVuY3Rpb24gYShjLHUsaCxmKXtjIT09dT8oYy11PjE4MD91Kz0zNjA6dS1jPjE4MCYmKGMrPTM2MCksZi5wdXNoKHtpOmgucHVzaChpKGgpKyJyb3RhdGUoIixudWxsLG4pLTIseDpJYyhjLHUpfSkpOnUmJmgucHVzaChpKGgpKyJyb3RhdGUoIit1K24pfWZ1bmN0aW9uIHMoYyx1LGgsZil7YyE9PXU/Zi5wdXNoKHtpOmgucHVzaChpKGgpKyJza2V3WCgiLG51bGwsbiktMix4OkljKGMsdSl9KTp1JiZoLnB1c2goaShoKSsic2tld1goIit1K24pfWZ1bmN0aW9uIGwoYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKGkocCkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO2QucHVzaCh7aTpnLTQseDpJYyhjLGgpfSx7aTpnLTIseDpJYyh1LGYpfSl9ZWxzZShoIT09MXx8ZiE9PTEpJiZwLnB1c2goaShwKSsic2NhbGUoIitoKyIsIitmKyIpIil9cmV0dXJuIGZ1bmN0aW9uKGMsdSl7dmFyIGg9W10sZj1bXTtyZXR1cm4gYz1lKGMpLHU9ZSh1KSxvKGMudHJhbnNsYXRlWCxjLnRyYW5zbGF0ZVksdS50cmFuc2xhdGVYLHUudHJhbnNsYXRlWSxoLGYpLGEoYy5yb3RhdGUsdS5yb3RhdGUsaCxmKSxzKGMuc2tld1gsdS5za2V3WCxoLGYpLGwoYy5zY2FsZVgsYy5zY2FsZVksdS5zY2FsZVgsdS5zY2FsZVksaCxmKSxjPXU9bnVsbCxmdW5jdGlvbihwKXtmb3IodmFyIGQ9LTEsZz1mLmxlbmd0aCxfOysrZDxnOyloWyhfPWZbZF0pLmldPV8ueChwKTtyZXR1cm4gaC5qb2luKCIiKX19fXZhciBHbnQsV250LHpZdD1NKCgpPT57anooKTtEWXQoKTtHbnQ9T1l0KFJZdCwicHgsICIsInB4KSIsImRlZykiKSxXbnQ9T1l0KE5ZdCwiLCAiLCIpIiwiKSIpfSk7ZnVuY3Rpb24gQll0KGUpe3JldHVybigoZT1NYXRoLmV4cChlKSkrMS9lKS8yfWZ1bmN0aW9uIFFOZShlKXtyZXR1cm4oKGU9TWF0aC5leHAoZSkpLTEvZSkvMn1mdW5jdGlvbiB0RGUoZSl7cmV0dXJuKChlPU1hdGguZXhwKDIqZSkpLTEpLyhlKzEpfWZ1bmN0aW9uIGpudChlLHQpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxvPXRbMF0sYT10WzFdLHM9dFsyXSxsPW8tcixjPWEtbix1PWwqbCtjKmMsaCxmO2lmKHU8Sk5lKWY9TWF0aC5sb2cocy9pKS9DQSxoPWZ1bmN0aW9uKHgpe3JldHVybltyK3gqbCxuK3gqYyxpKk1hdGguZXhwKENBKngqZildfTtlbHNle3ZhciBwPU1hdGguc3FydCh1KSxkPShzKnMtaSppK0ZZdCp1KS8oMippKlludCpwKSxnPShzKnMtaSppLUZZdCp1KS8oMipzKlludCpwKSxfPU1hdGgubG9nKE1hdGguc3FydChkKmQrMSktZCkseT1NYXRoLmxvZyhNYXRoLnNxcnQoZypnKzEpLWcpO2Y9KHktXykvQ0EsaD1mdW5jdGlvbih4KXt2YXIgYj14KmYsUz1CWXQoXyksQz1pLyhZbnQqcCkqKFMqdERlKENBKmIrXyktUU5lKF8pKTtyZXR1cm5bcitDKmwsbitDKmMsaSpTL0JZdChDQSpiK18pXX19cmV0dXJuIGguZHVyYXRpb249ZioxZTMsaH12YXIgQ0EsWW50LEZZdCxKTmUsSFl0PU0oKCk9PntDQT1NYXRoLlNRUlQyLFludD0yLEZZdD00LEpOZT0xZS0xMn0pO3ZhciBBQT1NKCgpPT57anooKTtQWXQoKTt6WXQoKTtIWXQoKTtBWXQoKX0pO2Z1bmN0aW9uIGxTKCl7cmV0dXJuIFB2fHwocVl0KGVEZSksUHY9a0Eubm93KCkrSnopfWZ1bmN0aW9uIGVEZSgpe1B2PTB9ZnVuY3Rpb24gUkEoKXt0aGlzLl9jYWxsPXRoaXMuX3RpbWU9dGhpcy5fbmV4dD1udWxsfWZ1bmN0aW9uIFF6KGUsdCxyKXt2YXIgbj1uZXcgUkE7cmV0dXJuIG4ucmVzdGFydChlLHQsciksbn1mdW5jdGlvbiBHWXQoKXtsUygpLCsrc1M7Zm9yKHZhciBlPUt6LHQ7ZTspKHQ9UHYtZS5fdGltZSk+PTAmJmUuX2NhbGwuY2FsbChudWxsLHQpLGU9ZS5fbmV4dDstLXNTfWZ1bmN0aW9uIFZZdCgpe1B2PShaej1rQS5ub3coKSkrSnosc1M9SUE9MDt0cnl7R1l0KCl9ZmluYWxseXtzUz0wLG5EZSgpLFB2PTB9fWZ1bmN0aW9uIHJEZSgpe3ZhciBlPWtBLm5vdygpLHQ9ZS1aejt0PlVZdCYmKEp6LT10LFp6PWUpfWZ1bmN0aW9uIG5EZSgpe2Zvcih2YXIgZSx0PUt6LHIsbj0xLzA7dDspdC5fY2FsbD8obj50Ll90aW1lJiYobj10Ll90aW1lKSxlPXQsdD10Ll9uZXh0KToocj10Ll9uZXh0LHQuX25leHQ9bnVsbCx0PWU/ZS5fbmV4dD1yOkt6PXIpO0xBPWUsWG50KG4pfWZ1bmN0aW9uIFhudChlKXtpZighc1Mpe0lBJiYoSUE9Y2xlYXJUaW1lb3V0KElBKSk7dmFyIHQ9ZS1Qdjt0PjI0PyhlPDEvMCYmKElBPXNldFRpbWVvdXQoVll0LGUta0Eubm93KCktSnopKSxQQSYmKFBBPWNsZWFySW50ZXJ2YWwoUEEpKSk6KFBBfHwoWno9a0Eubm93KCksUEE9c2V0SW50ZXJ2YWwockRlLFVZdCkpLHNTPTEscVl0KFZZdCkpfX12YXIgc1MsSUEsUEEsVVl0LEt6LExBLFp6LFB2LEp6LGtBLHFZdCwkbnQ9TSgoKT0+e3NTPTAsSUE9MCxQQT0wLFVZdD0xZTMsWno9MCxQdj0wLEp6PTAsa0E9dHlwZW9mIHBlcmZvcm1hbmNlPT0ib2JqZWN0IiYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlOkRhdGUscVl0PXR5cGVvZiB3aW5kb3c9PSJvYmplY3QiJiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOmZ1bmN0aW9uKGUpe3NldFRpbWVvdXQoZSwxNyl9O1JBLnByb3RvdHlwZT1Rei5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlJBLHJlc3RhcnQ6ZnVuY3Rpb24oZSx0LHIpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7cj0ocj09bnVsbD9sUygpOityKSsodD09bnVsbD8wOit0KSwhdGhpcy5fbmV4dCYmTEEhPT10aGlzJiYoTEE/TEEuX25leHQ9dGhpczpLej10aGlzLExBPXRoaXMpLHRoaXMuX2NhbGw9ZSx0aGlzLl90aW1lPXIsWG50KCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLFhudCgpKX19fSk7ZnVuY3Rpb24gdEYoZSx0LHIpe3ZhciBuPW5ldyBSQTtyZXR1cm4gdD10PT1udWxsPzA6K3Qsbi5yZXN0YXJ0KGZ1bmN0aW9uKGkpe24uc3RvcCgpLGUoaSt0KX0sdCxyKSxufXZhciBXWXQ9TSgoKT0+eyRudCgpfSk7dmFyIEtudD1NKCgpPT57JG50KCk7V1l0KCl9KTtmdW5jdGlvbiBXZyhlLHQscixuLGksbyl7dmFyIGE9ZS5fX3RyYW5zaXRpb247aWYoIWEpZS5fX3RyYW5zaXRpb249e307ZWxzZSBpZihyIGluIGEpcmV0dXJuO2FEZShlLHIse25hbWU6dCxpbmRleDpuLGdyb3VwOmksb246aURlLHR3ZWVuOm9EZSx0aW1lOm8udGltZSxkZWxheTpvLmRlbGF5LGR1cmF0aW9uOm8uZHVyYXRpb24sZWFzZTpvLmVhc2UsdGltZXI6bnVsbCxzdGF0ZTpqWXR9KX1mdW5jdGlvbiBEQShlLHQpe3ZhciByPW9vKGUsdCk7aWYoci5zdGF0ZT5qWXQpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gcn1mdW5jdGlvbiBRYShlLHQpe3ZhciByPW9vKGUsdCk7aWYoci5zdGF0ZT5lRil0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHJ1bm5pbmciKTtyZXR1cm4gcn1mdW5jdGlvbiBvbyhlLHQpe3ZhciByPWUuX190cmFuc2l0aW9uO2lmKCFyfHwhKHI9clt0XSkpdGhyb3cgbmV3IEVycm9yKCJ0cmFuc2l0aW9uIG5vdCBmb3VuZCIpO3JldHVybiByfWZ1bmN0aW9uIGFEZShlLHQscil7dmFyIG49ZS5fX3RyYW5zaXRpb24saTtuW3RdPXIsci50aW1lcj1ReihvLDAsci50aW1lKTtmdW5jdGlvbiBvKGMpe3Iuc3RhdGU9Wm50LHIudGltZXIucmVzdGFydChhLHIuZGVsYXksci50aW1lKSxyLmRlbGF5PD1jJiZhKGMtci5kZWxheSl9ZnVuY3Rpb24gYShjKXt2YXIgdSxoLGYscDtpZihyLnN0YXRlIT09Wm50KXJldHVybiBsKCk7Zm9yKHUgaW4gbilpZihwPW5bdV0scC5uYW1lPT09ci5uYW1lKXtpZihwLnN0YXRlPT09ZUYpcmV0dXJuIHRGKGEpO3Auc3RhdGU9PT1ZWXQ/KHAuc3RhdGU9TkEscC50aW1lci5zdG9wKCkscC5vbi5jYWxsKCJpbnRlcnJ1cHQiLGUsZS5fX2RhdGFfXyxwLmluZGV4LHAuZ3JvdXApLGRlbGV0ZSBuW3VdKTordTx0JiYocC5zdGF0ZT1OQSxwLnRpbWVyLnN0b3AoKSxwLm9uLmNhbGwoImNhbmNlbCIsZSxlLl9fZGF0YV9fLHAuaW5kZXgscC5ncm91cCksZGVsZXRlIG5bdV0pfWlmKHRGKGZ1bmN0aW9uKCl7ci5zdGF0ZT09PWVGJiYoci5zdGF0ZT1ZWXQsci50aW1lci5yZXN0YXJ0KHMsci5kZWxheSxyLnRpbWUpLHMoYykpfSksci5zdGF0ZT1yRixyLm9uLmNhbGwoInN0YXJ0IixlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxyLnN0YXRlPT09ckYpe2ZvcihyLnN0YXRlPWVGLGk9bmV3IEFycmF5KGY9ci50d2Vlbi5sZW5ndGgpLHU9MCxoPS0xO3U8ZjsrK3UpKHA9ci50d2Vlblt1XS52YWx1ZS5jYWxsKGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApKSYmKGlbKytoXT1wKTtpLmxlbmd0aD1oKzF9fWZ1bmN0aW9uIHMoYyl7Zm9yKHZhciB1PWM8ci5kdXJhdGlvbj9yLmVhc2UuY2FsbChudWxsLGMvci5kdXJhdGlvbik6KHIudGltZXIucmVzdGFydChsKSxyLnN0YXRlPW5GLDEpLGg9LTEsZj1pLmxlbmd0aDsrK2g8ZjspaVtoXS5jYWxsKGUsdSk7ci5zdGF0ZT09PW5GJiYoci5vbi5jYWxsKCJlbmQiLGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApLGwoKSl9ZnVuY3Rpb24gbCgpe3Iuc3RhdGU9TkEsci50aW1lci5zdG9wKCksZGVsZXRlIG5bdF07Zm9yKHZhciBjIGluIG4pcmV0dXJuO2RlbGV0ZSBlLl9fdHJhbnNpdGlvbn19dmFyIGlEZSxvRGUsall0LFpudCxyRixlRixZWXQsbkYsTkEsa3M9TSgoKT0+e21udCgpO0tudCgpO2lEZT12QSgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxvRGU9W10sall0PTAsWm50PTEsckY9MixlRj0zLFlZdD00LG5GPTUsTkE9Nn0pO2Z1bmN0aW9uIEl2KGUsdCl7dmFyIHI9ZS5fX3RyYW5zaXRpb24sbixpLG89ITAsYTtpZighIXIpe3Q9dD09bnVsbD9udWxsOnQrIiI7Zm9yKGEgaW4gcil7aWYoKG49clthXSkubmFtZSE9PXQpe289ITE7Y29udGludWV9aT1uLnN0YXRlPnJGJiZuLnN0YXRlPG5GLG4uc3RhdGU9TkEsbi50aW1lci5zdG9wKCksbi5vbi5jYWxsKGk/ImludGVycnVwdCI6ImNhbmNlbCIsZSxlLl9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCksZGVsZXRlIHJbYV19byYmZGVsZXRlIGUuX190cmFuc2l0aW9ufX12YXIgSm50PU0oKCk9PntrcygpfSk7ZnVuY3Rpb24gWFl0KGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtJdih0aGlzLGUpfSl9dmFyICRZdD1NKCgpPT57Sm50KCl9KTtmdW5jdGlvbiBzRGUoZSx0KXt2YXIgcixuO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPVFhKHRoaXMsZSksbz1pLnR3ZWVuO2lmKG8hPT1yKXtuPXI9bztmb3IodmFyIGE9MCxzPW4ubGVuZ3RoO2E8czsrK2EpaWYoblthXS5uYW1lPT09dCl7bj1uLnNsaWNlKCksbi5zcGxpY2UoYSwxKTticmVha319aS50d2Vlbj1ufX1mdW5jdGlvbiBsRGUoZSx0LHIpe3ZhciBuLGk7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPVFhKHRoaXMsZSksYT1vLnR3ZWVuO2lmKGEhPT1uKXtpPShuPWEpLnNsaWNlKCk7Zm9yKHZhciBzPXtuYW1lOnQsdmFsdWU6cn0sbD0wLGM9aS5sZW5ndGg7bDxjOysrbClpZihpW2xdLm5hbWU9PT10KXtpW2xdPXM7YnJlYWt9bD09PWMmJmkucHVzaChzKX1vLnR3ZWVuPWl9fWZ1bmN0aW9uIEtZdChlLHQpe3ZhciByPXRoaXMuX2lkO2lmKGUrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPW9vKHRoaXMubm9kZSgpLHIpLnR3ZWVuLGk9MCxvPW4ubGVuZ3RoLGE7aTxvOysraSlpZigoYT1uW2ldKS5uYW1lPT09ZSlyZXR1cm4gYS52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP3NEZTpsRGUpKHIsZSx0KSl9ZnVuY3Rpb24gY1MoZSx0LHIpe3ZhciBuPWUuX2lkO3JldHVybiBlLmVhY2goZnVuY3Rpb24oKXt2YXIgaT1RYSh0aGlzLG4pOyhpLnZhbHVlfHwoaS52YWx1ZT17fSkpW3RdPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24oaSl7cmV0dXJuIG9vKGksbikudmFsdWVbdF19fXZhciBPQT1NKCgpPT57a3MoKX0pO2Z1bmN0aW9uIGlGKGUsdCl7dmFyIHI7cmV0dXJuKHR5cGVvZiB0PT0ibnVtYmVyIj9JYzp0IGluc3RhbmNlb2YgR2c/WXo6KHI9R2codCkpPyh0PXIsWXopOlZudCkoZSx0KX12YXIgUW50PU0oKCk9PntEbnQoKTtBQSgpfSk7ZnVuY3Rpb24gY0RlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiB1RGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBoRGUoZSx0LHIpe3ZhciBuLGk9cisiIixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlKGUpO3JldHVybiBhPT09aT9udWxsOmE9PT1uP286bz10KG49YSxyKX19ZnVuY3Rpb24gZkRlKGUsdCxyKXt2YXIgbixpPXIrIiIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk7cmV0dXJuIGE9PT1pP251bGw6YT09PW4/bzpvPXQobj1hLHIpfX1mdW5jdGlvbiBwRGUoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKGUpOihhPXRoaXMuZ2V0QXR0cmlidXRlKGUpLGw9cysiIixhPT09bD9udWxsOmE9PT1uJiZsPT09aT9vOihpPWwsbz10KG49YSxzKSkpfX1mdW5jdGlvbiBkRGUoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTooYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCksbD1zKyIiLGE9PT1sP251bGw6YT09PW4mJmw9PT1pP286KGk9bCxvPXQobj1hLHMpKSl9fWZ1bmN0aW9uIFpZdChlLHQpe3ZhciByPWZkKGUpLG49cj09PSJ0cmFuc2Zvcm0iP1dudDppRjtyZXR1cm4gdGhpcy5hdHRyVHdlZW4oZSx0eXBlb2YgdD09ImZ1bmN0aW9uIj8oci5sb2NhbD9kRGU6cERlKShyLG4sY1ModGhpcywiYXR0ci4iK2UsdCkpOnQ9PW51bGw/KHIubG9jYWw/dURlOmNEZSkocik6KHIubG9jYWw/ZkRlOmhEZSkocixuLHQpKX12YXIgSll0PU0oKCk9PntBQSgpO0xzKCk7T0EoKTtRbnQoKX0pO2Z1bmN0aW9uIG1EZShlLHQpe3JldHVybiBmdW5jdGlvbihyKXt0aGlzLnNldEF0dHJpYnV0ZShlLHQuY2FsbCh0aGlzLHIpKX19ZnVuY3Rpb24gZ0RlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQuY2FsbCh0aGlzLHIpKX19ZnVuY3Rpb24gX0RlKGUsdCl7dmFyIHIsbjtmdW5jdGlvbiBpKCl7dmFyIG89dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG8hPT1uJiYocj0obj1vKSYmZ0RlKGUsbykpLHJ9cmV0dXJuIGkuX3ZhbHVlPXQsaX1mdW5jdGlvbiB5RGUoZSx0KXt2YXIgcixuO2Z1bmN0aW9uIGkoKXt2YXIgbz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbyE9PW4mJihyPShuPW8pJiZtRGUoZSxvKSkscn1yZXR1cm4gaS5fdmFsdWU9dCxpfWZ1bmN0aW9uIFFZdChlLHQpe3ZhciByPSJhdHRyLiIrZTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKHI9dGhpcy50d2VlbihyKSkmJnIuX3ZhbHVlO2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4ocixudWxsKTtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7dmFyIG49ZmQoZSk7cmV0dXJuIHRoaXMudHdlZW4ociwobi5sb2NhbD9fRGU6eURlKShuLHQpKX12YXIgdGp0PU0oKCk9PntMcygpfSk7ZnVuY3Rpb24gdkRlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7REEodGhpcyxlKS5kZWxheT0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIHhEZShlLHQpe3JldHVybiB0PSt0LGZ1bmN0aW9uKCl7REEodGhpcyxlKS5kZWxheT10fX1mdW5jdGlvbiBlanQoZSl7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCh0eXBlb2YgZT09ImZ1bmN0aW9uIj92RGU6eERlKSh0LGUpKTpvbyh0aGlzLm5vZGUoKSx0KS5kZWxheX12YXIgcmp0PU0oKCk9PntrcygpfSk7ZnVuY3Rpb24gYkRlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7UWEodGhpcyxlKS5kdXJhdGlvbj0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIHdEZShlLHQpe3JldHVybiB0PSt0LGZ1bmN0aW9uKCl7UWEodGhpcyxlKS5kdXJhdGlvbj10fX1mdW5jdGlvbiBuanQoZSl7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCh0eXBlb2YgZT09ImZ1bmN0aW9uIj9iRGU6d0RlKSh0LGUpKTpvbyh0aGlzLm5vZGUoKSx0KS5kdXJhdGlvbn12YXIgaWp0PU0oKCk9PntrcygpfSk7ZnVuY3Rpb24gU0RlKGUsdCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe1FhKHRoaXMsZSkuZWFzZT10fX1mdW5jdGlvbiBvanQoZSl7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKFNEZSh0LGUpKTpvbyh0aGlzLm5vZGUoKSx0KS5lYXNlfXZhciBhanQ9TSgoKT0+e2tzKCl9KTtmdW5jdGlvbiBzanQoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPWJBKGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBtYShuLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9dmFyIGxqdD1NKCgpPT57THMoKTttZCgpfSk7ZnVuY3Rpb24gY2p0KGUpe2lmKGUuX2lkIT09dGhpcy5faWQpdGhyb3cgbmV3IEVycm9yO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj1lLl9ncm91cHMsbj10Lmxlbmd0aCxpPXIubGVuZ3RoLG89TWF0aC5taW4obixpKSxhPW5ldyBBcnJheShuKSxzPTA7czxvOysrcylmb3IodmFyIGw9dFtzXSxjPXJbc10sdT1sLmxlbmd0aCxoPWFbc109bmV3IEFycmF5KHUpLGYscD0wO3A8dTsrK3ApKGY9bFtwXXx8Y1twXSkmJihoW3BdPWYpO2Zvcig7czxuOysrcylhW3NdPXRbc107cmV0dXJuIG5ldyBtYShhLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9dmFyIHVqdD1NKCgpPT57bWQoKX0pO2Z1bmN0aW9uIE1EZShlKXtyZXR1cm4oZSsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLmV2ZXJ5KGZ1bmN0aW9uKHQpe3ZhciByPXQuaW5kZXhPZigiLiIpO3JldHVybiByPj0wJiYodD10LnNsaWNlKDAscikpLCF0fHx0PT09InN0YXJ0In0pfWZ1bmN0aW9uIEVEZShlLHQscil7dmFyIG4saSxvPU1EZSh0KT9EQTpRYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1vKHRoaXMsZSkscz1hLm9uO3MhPT1uJiYoaT0obj1zKS5jb3B5KCkpLm9uKHQsciksYS5vbj1pfX1mdW5jdGlvbiBoanQoZSx0KXt2YXIgcj10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP29vKHRoaXMubm9kZSgpLHIpLm9uLm9uKGUpOnRoaXMuZWFjaChFRGUocixlLHQpKX12YXIgZmp0PU0oKCk9PntrcygpfSk7ZnVuY3Rpb24gVERlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTtmb3IodmFyIHIgaW4gdGhpcy5fX3RyYW5zaXRpb24paWYoK3IhPT1lKXJldHVybjt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfX1mdW5jdGlvbiBwanQoKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsVERlKHRoaXMuX2lkKSl9dmFyIGRqdD1NKCgpPT57fSk7ZnVuY3Rpb24gbWp0KGUpe3ZhciB0PXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9QXYoZSkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPW5ldyBBcnJheShpKSxhPTA7YTxpOysrYSlmb3IodmFyIHM9blthXSxsPXMubGVuZ3RoLGM9b1thXT1uZXcgQXJyYXkobCksdSxoLGY9MDtmPGw7KytmKSh1PXNbZl0pJiYoaD1lLmNhbGwodSx1Ll9fZGF0YV9fLGYscykpJiYoIl9fZGF0YV9fImluIHUmJihoLl9fZGF0YV9fPXUuX19kYXRhX18pLGNbZl09aCxXZyhjW2ZdLHQscixmLGMsb28odSxyKSkpO3JldHVybiBuZXcgbWEobyx0aGlzLl9wYXJlbnRzLHQscil9dmFyIGdqdD1NKCgpPT57THMoKTttZCgpO2tzKCl9KTtmdW5jdGlvbiBfanQoZSl7dmFyIHQ9dGhpcy5fbmFtZSxyPXRoaXMuX2lkO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT14QShlKSk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89W10sYT1bXSxzPTA7czxpOysrcylmb3IodmFyIGw9bltzXSxjPWwubGVuZ3RoLHUsaD0wO2g8YzsrK2gpaWYodT1sW2hdKXtmb3IodmFyIGY9ZS5jYWxsKHUsdS5fX2RhdGFfXyxoLGwpLHAsZD1vbyh1LHIpLGc9MCxfPWYubGVuZ3RoO2c8XzsrK2cpKHA9ZltnXSkmJldnKHAsdCxyLGcsZixkKTtvLnB1c2goZiksYS5wdXNoKHUpfXJldHVybiBuZXcgbWEobyxhLHQscil9dmFyIHlqdD1NKCgpPT57THMoKTttZCgpO2tzKCl9KTtmdW5jdGlvbiB2anQoKXtyZXR1cm4gbmV3IENEZSh0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9dmFyIENEZSx4anQ9TSgoKT0+e0xzKCk7Q0RlPXBkLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcn0pO2Z1bmN0aW9uIEFEZShlLHQpe3ZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1xZyh0aGlzLGUpLGE9KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSkscWcodGhpcyxlKSk7cmV0dXJuIG89PT1hP251bGw6bz09PXImJmE9PT1uP2k6aT10KHI9byxuPWEpfX1mdW5jdGlvbiBianQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKX19ZnVuY3Rpb24gUERlKGUsdCxyKXt2YXIgbixpPXIrIiIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1xZyh0aGlzLGUpO3JldHVybiBhPT09aT9udWxsOmE9PT1uP286bz10KG49YSxyKX19ZnVuY3Rpb24gSURlKGUsdCxyKXt2YXIgbixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9cWcodGhpcyxlKSxzPXIodGhpcyksbD1zKyIiO3JldHVybiBzPT1udWxsJiYobD1zPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLHFnKHRoaXMsZSkpKSxhPT09bD9udWxsOmE9PT1uJiZsPT09aT9vOihpPWwsbz10KG49YSxzKSl9fWZ1bmN0aW9uIExEZShlLHQpe3ZhciByLG4saSxvPSJzdHlsZS4iK3QsYT0iZW5kLiIrbyxzO3JldHVybiBmdW5jdGlvbigpe3ZhciBsPVFhKHRoaXMsZSksYz1sLm9uLHU9bC52YWx1ZVtvXT09bnVsbD9zfHwocz1ianQodCkpOnZvaWQgMDsoYyE9PXJ8fGkhPT11KSYmKG49KHI9YykuY29weSgpKS5vbihhLGk9dSksbC5vbj1ufX1mdW5jdGlvbiB3anQoZSx0LHIpe3ZhciBuPShlKz0iIik9PSJ0cmFuc2Zvcm0iP0dudDppRjtyZXR1cm4gdD09bnVsbD90aGlzLnN0eWxlVHdlZW4oZSxBRGUoZSxuKSkub24oImVuZC5zdHlsZS4iK2UsYmp0KGUpKTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90aGlzLnN0eWxlVHdlZW4oZSxJRGUoZSxuLGNTKHRoaXMsInN0eWxlLiIrZSx0KSkpLmVhY2goTERlKHRoaXMuX2lkLGUpKTp0aGlzLnN0eWxlVHdlZW4oZSxQRGUoZSxuLHQpLHIpLm9uKCJlbmQuc3R5bGUuIitlLG51bGwpfXZhciBTanQ9TSgoKT0+e0FBKCk7THMoKTtrcygpO09BKCk7UW50KCl9KTtmdW5jdGlvbiBrRGUoZSx0LHIpe3JldHVybiBmdW5jdGlvbihuKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUsdC5jYWxsKHRoaXMsbikscil9fWZ1bmN0aW9uIFJEZShlLHQscil7dmFyIG4saTtmdW5jdGlvbiBvKCl7dmFyIGE9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGEhPT1pJiYobj0oaT1hKSYma0RlKGUsYSxyKSksbn1yZXR1cm4gby5fdmFsdWU9dCxvfWZ1bmN0aW9uIE1qdChlLHQscil7dmFyIG49InN0eWxlLiIrKGUrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKG49dGhpcy50d2VlbihuKSkmJm4uX3ZhbHVlO2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4obixudWxsKTtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4obixSRGUoZSx0LHI9PW51bGw/IiI6cikpfXZhciBFanQ9TSgoKT0+e30pO2Z1bmN0aW9uIE5EZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWV9fWZ1bmN0aW9uIEREZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiBUanQoZSl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLHR5cGVvZiBlPT0iZnVuY3Rpb24iP0REZShjUyh0aGlzLCJ0ZXh0IixlKSk6TkRlKGU9PW51bGw/IiI6ZSsiIikpfXZhciBDanQ9TSgoKT0+e09BKCl9KTtmdW5jdGlvbiBPRGUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3RoaXMudGV4dENvbnRlbnQ9ZS5jYWxsKHRoaXMsdCl9fWZ1bmN0aW9uIHpEZShlKXt2YXIgdCxyO2Z1bmN0aW9uIG4oKXt2YXIgaT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gaSE9PXImJih0PShyPWkpJiZPRGUoaSkpLHR9cmV0dXJuIG4uX3ZhbHVlPWUsbn1mdW5jdGlvbiBBanQoZSl7dmFyIHQ9InRleHQiO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSlyZXR1cm4odD10aGlzLnR3ZWVuKHQpKSYmdC5fdmFsdWU7aWYoZT09bnVsbClyZXR1cm4gdGhpcy50d2Vlbih0LG51bGwpO2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2Vlbih0LHpEZShlKSl9dmFyIFBqdD1NKCgpPT57fSk7ZnVuY3Rpb24gSWp0KCl7Zm9yKHZhciBlPXRoaXMuX25hbWUsdD10aGlzLl9pZCxyPW9GKCksbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPTA7bzxpOysrbylmb3IodmFyIGE9bltvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpaWYobD1hW2NdKXt2YXIgdT1vbyhsLHQpO1dnKGwsZSxyLGMsYSx7dGltZTp1LnRpbWUrdS5kZWxheSt1LmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246dS5kdXJhdGlvbixlYXNlOnUuZWFzZX0pfXJldHVybiBuZXcgbWEobix0aGlzLl9wYXJlbnRzLGUscil9dmFyIExqdD1NKCgpPT57bWQoKTtrcygpfSk7ZnVuY3Rpb24ga2p0KCl7dmFyIGUsdCxyPXRoaXMsbj1yLl9pZCxpPXIuc2l6ZSgpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihvLGEpe3ZhciBzPXt2YWx1ZTphfSxsPXt2YWx1ZTpmdW5jdGlvbigpey0taT09PTAmJm8oKX19O3IuZWFjaChmdW5jdGlvbigpe3ZhciBjPVFhKHRoaXMsbiksdT1jLm9uO3UhPT1lJiYodD0oZT11KS5jb3B5KCksdC5fLmNhbmNlbC5wdXNoKHMpLHQuXy5pbnRlcnJ1cHQucHVzaChzKSx0Ll8uZW5kLnB1c2gobCkpLGMub249dH0pfSl9dmFyIFJqdD1NKCgpPT57a3MoKX0pO2Z1bmN0aW9uIG1hKGUsdCxyLG4pe3RoaXMuX2dyb3Vwcz1lLHRoaXMuX3BhcmVudHM9dCx0aGlzLl9uYW1lPXIsdGhpcy5faWQ9bn1mdW5jdGlvbiB0aXQoZSl7cmV0dXJuIHBkKCkudHJhbnNpdGlvbihlKX1mdW5jdGlvbiBvRigpe3JldHVybisrRkRlfXZhciBGRGUsdVMsbWQ9TSgoKT0+e0xzKCk7Sll0KCk7dGp0KCk7cmp0KCk7aWp0KCk7YWp0KCk7bGp0KCk7dWp0KCk7Zmp0KCk7ZGp0KCk7Z2p0KCk7eWp0KCk7eGp0KCk7U2p0KCk7RWp0KCk7Q2p0KCk7UGp0KCk7TGp0KCk7T0EoKTtSanQoKTtGRGU9MDt1Uz1wZC5wcm90b3R5cGU7bWEucHJvdG90eXBlPXRpdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm1hLHNlbGVjdDptanQsc2VsZWN0QWxsOl9qdCxmaWx0ZXI6c2p0LG1lcmdlOmNqdCxzZWxlY3Rpb246dmp0LHRyYW5zaXRpb246SWp0LGNhbGw6dVMuY2FsbCxub2Rlczp1Uy5ub2Rlcyxub2RlOnVTLm5vZGUsc2l6ZTp1Uy5zaXplLGVtcHR5OnVTLmVtcHR5LGVhY2g6dVMuZWFjaCxvbjpoanQsYXR0cjpaWXQsYXR0clR3ZWVuOlFZdCxzdHlsZTp3anQsc3R5bGVUd2VlbjpNanQsdGV4dDpUanQsdGV4dFR3ZWVuOkFqdCxyZW1vdmU6cGp0LHR3ZWVuOktZdCxkZWxheTplanQsZHVyYXRpb246bmp0LGVhc2U6b2p0LGVuZDpranR9fSk7ZnVuY3Rpb24gQkRlKGUsdCl7Zm9yKHZhciByOyEocj1lLl9fdHJhbnNpdGlvbil8fCEocj1yW3RdKTspaWYoIShlPWUucGFyZW50Tm9kZSkpcmV0dXJuIGVpdC50aW1lPWxTKCksZWl0O3JldHVybiByfWZ1bmN0aW9uIE5qdChlKXt2YXIgdCxyO2UgaW5zdGFuY2VvZiBtYT8odD1lLl9pZCxlPWUuX25hbWUpOih0PW9GKCksKHI9ZWl0KS50aW1lPWxTKCksZT1lPT1udWxsP251bGw6ZSsiIik7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgYT1uW29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYykobD1hW2NdKSYmV2cobCxlLHQsYyxhLHJ8fEJEZShsLHQpKTtyZXR1cm4gbmV3IG1hKG4sdGhpcy5fcGFyZW50cyxlLHQpfXZhciBlaXQsRGp0PU0oKCk9PnttZCgpO2tzKCk7TF8oKTtLbnQoKTtlaXQ9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOmJzfX0pO3ZhciBPanQ9TSgoKT0+e0xzKCk7JFl0KCk7RGp0KCk7cGQucHJvdG90eXBlLmludGVycnVwdD1YWXQ7cGQucHJvdG90eXBlLnRyYW5zaXRpb249Tmp0fSk7dmFyIHpqdD1NKCgpPT57bWQoKTtrcygpfSk7dmFyIEZqdD1NKCgpPT57T2p0KCk7bWQoKTt6anQoKTtKbnQoKX0pO2Z1bmN0aW9uIHpBKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgQmp0PU0oKCk9Pnt9KTtmdW5jdGlvbiByaXQoZSx0LHIpe3RoaXMudGFyZ2V0PWUsdGhpcy50eXBlPXQsdGhpcy50cmFuc2Zvcm09cn12YXIgSGp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBJZihlLHQscil7dGhpcy5rPWUsdGhpcy54PXQsdGhpcy55PXJ9ZnVuY3Rpb24gYUYoZSl7cmV0dXJuIGUuX196b29tfHxoU312YXIgaFMsbml0PU0oKCk9PntJZi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOklmLHNjYWxlOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09MT90aGlzOm5ldyBJZih0aGlzLmsqZSx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT0wJnQ9PT0wP3RoaXM6bmV3IElmKHRoaXMuayx0aGlzLngrdGhpcy5rKmUsdGhpcy55K3RoaXMuayp0KX0sYXBwbHk6ZnVuY3Rpb24oZSl7cmV0dXJuW2VbMF0qdGhpcy5rK3RoaXMueCxlWzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKGUpe3JldHVybiBlKnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihlKXtyZXR1cm5bKGVbMF0tdGhpcy54KS90aGlzLmssKGVbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKGUpe3JldHVybihlLXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKGUpe3JldHVybihlLXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihlKXtyZXR1cm4gZS5jb3B5KCkuZG9tYWluKGUucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcChlLmludmVydCxlKSl9LHJlc2NhbGVZOmZ1bmN0aW9uKGUpe3JldHVybiBlLmNvcHkoKS5kb21haW4oZS5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKGUuaW52ZXJ0LGUpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX07aFM9bmV3IElmKDEsMCwwKTthRi5wcm90b3R5cGU9SWYucHJvdG90eXBlfSk7ZnVuY3Rpb24gc0YoKXtZci5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBmUygpe1lyLnByZXZlbnREZWZhdWx0KCksWXIuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9dmFyIFZqdD1NKCgpPT57THMoKX0pO2Z1bmN0aW9uIEhEZSgpe3JldHVybiFZci5idXR0b259ZnVuY3Rpb24gVkRlKCl7dmFyIGU9dGhpcyx0LHI7cmV0dXJuIGUgaW5zdGFuY2VvZiBTVkdFbGVtZW50PyhlPWUub3duZXJTVkdFbGVtZW50fHxlLHQ9ZS53aWR0aC5iYXNlVmFsLnZhbHVlLHI9ZS5oZWlnaHQuYmFzZVZhbC52YWx1ZSk6KHQ9ZS5jbGllbnRXaWR0aCxyPWUuY2xpZW50SGVpZ2h0KSxbWzAsMF0sW3Qscl1dfWZ1bmN0aW9uIFVqdCgpe3JldHVybiB0aGlzLl9fem9vbXx8aFN9ZnVuY3Rpb24gVURlKCl7cmV0dXJuLVlyLmRlbHRhWSooWXIuZGVsdGFNb2RlPzEyMDoxKS81MDB9ZnVuY3Rpb24gcURlKCl7cmV0dXJuIm9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIEdEZShlLHQscil7dmFyIG49ZS5pbnZlcnRYKHRbMF1bMF0pLXJbMF1bMF0saT1lLmludmVydFgodFsxXVswXSktclsxXVswXSxvPWUuaW52ZXJ0WSh0WzBdWzFdKS1yWzBdWzFdLGE9ZS5pbnZlcnRZKHRbMV1bMV0pLXJbMV1bMV07cmV0dXJuIGUudHJhbnNsYXRlKGk+bj8obitpKS8yOk1hdGgubWluKDAsbil8fE1hdGgubWF4KDAsaSksYT5vPyhvK2EpLzI6TWF0aC5taW4oMCxvKXx8TWF0aC5tYXgoMCxhKSl9ZnVuY3Rpb24gcWp0KCl7dmFyIGU9SERlLHQ9VkRlLHI9R0RlLG49VURlLGk9cURlLG89WzAsMS8wXSxhPVtbLTEvMCwtMS8wXSxbMS8wLDEvMF1dLHM9MjUwLGw9am50LGM9W10sdT12QSgic3RhcnQiLCJ6b29tIiwiZW5kIiksaCxmLHA9NTAwLGQ9MTUwLGc9MDtmdW5jdGlvbiBfKFIpe1IucHJvcGVydHkoIl9fem9vbSIsVWp0KS5vbigid2hlZWwuem9vbSIsaykub24oIm1vdXNlZG93bi56b29tIixPKS5vbigiZGJsY2xpY2suem9vbSIsRCkuZmlsdGVyKGkpLm9uKCJ0b3VjaHN0YXJ0Lnpvb20iLEIpLm9uKCJ0b3VjaG1vdmUuem9vbSIsSSkub24oInRvdWNoZW5kLnpvb20gdG91Y2hjYW5jZWwuem9vbSIsTCkuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfV8udHJhbnNmb3JtPWZ1bmN0aW9uKFIsRil7dmFyIHo9Ui5zZWxlY3Rpb24/Ui5zZWxlY3Rpb24oKTpSO3oucHJvcGVydHkoIl9fem9vbSIsVWp0KSxSIT09ej9TKFIsRik6ei5pbnRlcnJ1cHQoKS5lYWNoKGZ1bmN0aW9uKCl7Qyh0aGlzLGFyZ3VtZW50cykuc3RhcnQoKS56b29tKG51bGwsdHlwZW9mIEY9PSJmdW5jdGlvbiI/Ri5hcHBseSh0aGlzLGFyZ3VtZW50cyk6RikuZW5kKCl9KX0sXy5zY2FsZUJ5PWZ1bmN0aW9uKFIsRil7Xy5zY2FsZVRvKFIsZnVuY3Rpb24oKXt2YXIgej10aGlzLl9fem9vbS5rLFU9dHlwZW9mIEY9PSJmdW5jdGlvbiI/Ri5hcHBseSh0aGlzLGFyZ3VtZW50cyk6RjtyZXR1cm4geipVfSl9LF8uc2NhbGVUbz1mdW5jdGlvbihSLEYpe18udHJhbnNmb3JtKFIsZnVuY3Rpb24oKXt2YXIgej10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxVPXRoaXMuX196b29tLFc9Yih6KSxaPVUuaW52ZXJ0KFcpLHJ0PXR5cGVvZiBGPT0iZnVuY3Rpb24iP0YuYXBwbHkodGhpcyxhcmd1bWVudHMpOkY7cmV0dXJuIHIoeCh5KFUscnQpLFcsWikseixhKX0pfSxfLnRyYW5zbGF0ZUJ5PWZ1bmN0aW9uKFIsRix6KXtfLnRyYW5zZm9ybShSLGZ1bmN0aW9uKCl7cmV0dXJuIHIodGhpcy5fX3pvb20udHJhbnNsYXRlKHR5cGVvZiBGPT0iZnVuY3Rpb24iP0YuYXBwbHkodGhpcyxhcmd1bWVudHMpOkYsdHlwZW9mIHo9PSJmdW5jdGlvbiI/ei5hcHBseSh0aGlzLGFyZ3VtZW50cyk6eiksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksYSl9KX0sXy50cmFuc2xhdGVUbz1mdW5jdGlvbihSLEYseil7Xy50cmFuc2Zvcm0oUixmdW5jdGlvbigpe3ZhciBVPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLFc9dGhpcy5fX3pvb20sWj1iKFUpO3JldHVybiByKGhTLnRyYW5zbGF0ZShaWzBdLFpbMV0pLnNjYWxlKFcuaykudHJhbnNsYXRlKHR5cGVvZiBGPT0iZnVuY3Rpb24iPy1GLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotRix0eXBlb2Ygej09ImZ1bmN0aW9uIj8tei5hcHBseSh0aGlzLGFyZ3VtZW50cyk6LXopLFUsYSl9KX07ZnVuY3Rpb24geShSLEYpe3JldHVybiBGPU1hdGgubWF4KG9bMF0sTWF0aC5taW4ob1sxXSxGKSksRj09PVIuaz9SOm5ldyBJZihGLFIueCxSLnkpfWZ1bmN0aW9uIHgoUixGLHope3ZhciBVPUZbMF0telswXSpSLmssVz1GWzFdLXpbMV0qUi5rO3JldHVybiBVPT09Ui54JiZXPT09Ui55P1I6bmV3IElmKFIuayxVLFcpfWZ1bmN0aW9uIGIoUil7cmV0dXJuWygrUlswXVswXSsgK1JbMV1bMF0pLzIsKCtSWzBdWzFdKyArUlsxXVsxXSkvMl19ZnVuY3Rpb24gUyhSLEYseil7Ui5vbigic3RhcnQuem9vbSIsZnVuY3Rpb24oKXtDKHRoaXMsYXJndW1lbnRzKS5zdGFydCgpfSkub24oImludGVycnVwdC56b29tIGVuZC56b29tIixmdW5jdGlvbigpe0ModGhpcyxhcmd1bWVudHMpLmVuZCgpfSkudHdlZW4oInpvb20iLGZ1bmN0aW9uKCl7dmFyIFU9dGhpcyxXPWFyZ3VtZW50cyxaPUMoVSxXKSxydD10LmFwcGx5KFUsVyksb3Q9enx8YihydCksc3Q9TWF0aC5tYXgocnRbMV1bMF0tcnRbMF1bMF0scnRbMV1bMV0tcnRbMF1bMV0pLFN0PVUuX196b29tLGJ0PXR5cGVvZiBGPT0iZnVuY3Rpb24iP0YuYXBwbHkoVSxXKTpGLE10PWwoU3QuaW52ZXJ0KG90KS5jb25jYXQoc3QvU3QuayksYnQuaW52ZXJ0KG90KS5jb25jYXQoc3QvYnQuaykpO3JldHVybiBmdW5jdGlvbihsdCl7aWYobHQ9PT0xKWx0PWJ0O2Vsc2V7dmFyIEt0PU10KGx0KSxfdD1zdC9LdFsyXTtsdD1uZXcgSWYoX3Qsb3RbMF0tS3RbMF0qX3Qsb3RbMV0tS3RbMV0qX3QpfVouem9vbShudWxsLGx0KX19KX1mdW5jdGlvbiBDKFIsRil7Zm9yKHZhciB6PTAsVT1jLmxlbmd0aCxXO3o8VTsrK3opaWYoKFc9Y1t6XSkudGhhdD09PVIpcmV0dXJuIFc7cmV0dXJuIG5ldyBQKFIsRil9ZnVuY3Rpb24gUChSLEYpe3RoaXMudGhhdD1SLHRoaXMuYXJncz1GLHRoaXMuaW5kZXg9LTEsdGhpcy5hY3RpdmU9MCx0aGlzLmV4dGVudD10LmFwcGx5KFIsRil9UC5wcm90b3R5cGU9e3N0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuKyt0aGlzLmFjdGl2ZT09PTEmJih0aGlzLmluZGV4PWMucHVzaCh0aGlzKS0xLHRoaXMuZW1pdCgic3RhcnQiKSksdGhpc30sem9vbTpmdW5jdGlvbihSLEYpe3JldHVybiB0aGlzLm1vdXNlJiZSIT09Im1vdXNlIiYmKHRoaXMubW91c2VbMV09Ri5pbnZlcnQodGhpcy5tb3VzZVswXSkpLHRoaXMudG91Y2gwJiZSIT09InRvdWNoIiYmKHRoaXMudG91Y2gwWzFdPUYuaW52ZXJ0KHRoaXMudG91Y2gwWzBdKSksdGhpcy50b3VjaDEmJlIhPT0idG91Y2giJiYodGhpcy50b3VjaDFbMV09Ri5pbnZlcnQodGhpcy50b3VjaDFbMF0pKSx0aGlzLnRoYXQuX196b29tPUYsdGhpcy5lbWl0KCJ6b29tIiksdGhpc30sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuLS10aGlzLmFjdGl2ZT09PTAmJihjLnNwbGljZSh0aGlzLmluZGV4LDEpLHRoaXMuaW5kZXg9LTEsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihSKXtUbnQobmV3IHJpdChfLFIsdGhpcy50aGF0Ll9fem9vbSksdS5hcHBseSx1LFtSLHRoaXMudGhhdCx0aGlzLmFyZ3NdKX19O2Z1bmN0aW9uIGsoKXtpZighZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpcmV0dXJuO3ZhciBSPUModGhpcyxhcmd1bWVudHMpLEY9dGhpcy5fX3pvb20sej1NYXRoLm1heChvWzBdLE1hdGgubWluKG9bMV0sRi5rKk1hdGgucG93KDIsbi5hcHBseSh0aGlzLGFyZ3VtZW50cykpKSksVT1pUyh0aGlzKTtpZihSLndoZWVsKShSLm1vdXNlWzBdWzBdIT09VVswXXx8Ui5tb3VzZVswXVsxXSE9PVVbMV0pJiYoUi5tb3VzZVsxXT1GLmludmVydChSLm1vdXNlWzBdPVUpKSxjbGVhclRpbWVvdXQoUi53aGVlbCk7ZWxzZXtpZihGLms9PT16KXJldHVybjtSLm1vdXNlPVtVLEYuaW52ZXJ0KFUpXSxJdih0aGlzKSxSLnN0YXJ0KCl9ZlMoKSxSLndoZWVsPXNldFRpbWVvdXQoVyxkKSxSLnpvb20oIm1vdXNlIixyKHgoeShGLHopLFIubW91c2VbMF0sUi5tb3VzZVsxXSksUi5leHRlbnQsYSkpO2Z1bmN0aW9uIFcoKXtSLndoZWVsPW51bGwsUi5lbmQoKX19ZnVuY3Rpb24gTygpe2lmKGZ8fCFlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSlyZXR1cm47dmFyIFI9Qyh0aGlzLGFyZ3VtZW50cyksRj1kZChZci52aWV3KS5vbigibW91c2Vtb3ZlLnpvb20iLFosITApLm9uKCJtb3VzZXVwLnpvb20iLHJ0LCEwKSx6PWlTKHRoaXMpLFU9WXIuY2xpZW50WCxXPVlyLmNsaWVudFk7SW50KFlyLnZpZXcpLHNGKCksUi5tb3VzZT1beix0aGlzLl9fem9vbS5pbnZlcnQoeildLEl2KHRoaXMpLFIuc3RhcnQoKTtmdW5jdGlvbiBaKCl7aWYoZlMoKSwhUi5tb3ZlZCl7dmFyIG90PVlyLmNsaWVudFgtVSxzdD1Zci5jbGllbnRZLVc7Ui5tb3ZlZD1vdCpvdCtzdCpzdD5nfVIuem9vbSgibW91c2UiLHIoeChSLnRoYXQuX196b29tLFIubW91c2VbMF09aVMoUi50aGF0KSxSLm1vdXNlWzFdKSxSLmV4dGVudCxhKSl9ZnVuY3Rpb24gcnQoKXtGLm9uKCJtb3VzZW1vdmUuem9vbSBtb3VzZXVwLnpvb20iLG51bGwpLExudChZci52aWV3LFIubW92ZWQpLGZTKCksUi5lbmQoKX19ZnVuY3Rpb24gRCgpe2lmKCEhZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBSPXRoaXMuX196b29tLEY9aVModGhpcyksej1SLmludmVydChGKSxVPVIuayooWXIuc2hpZnRLZXk/LjU6MiksVz1yKHgoeShSLFUpLEYseiksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksYSk7ZlMoKSxzPjA/ZGQodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKHMpLmNhbGwoUyxXLEYpOmRkKHRoaXMpLmNhbGwoXy50cmFuc2Zvcm0sVyl9fWZ1bmN0aW9uIEIoKXtpZighIWUuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgUj1DKHRoaXMsYXJndW1lbnRzKSxGPVlyLmNoYW5nZWRUb3VjaGVzLHosVT1GLmxlbmd0aCxXLFoscnQ7Zm9yKHNGKCksVz0wO1c8VTsrK1cpWj1GW1ddLHJ0PUh6KHRoaXMsRixaLmlkZW50aWZpZXIpLHJ0PVtydCx0aGlzLl9fem9vbS5pbnZlcnQocnQpLFouaWRlbnRpZmllcl0sUi50b3VjaDA/Ui50b3VjaDF8fChSLnRvdWNoMT1ydCk6KFIudG91Y2gwPXJ0LHo9ITApO2lmKGgmJihoPWNsZWFyVGltZW91dChoKSwhUi50b3VjaDEpKXtSLmVuZCgpLHJ0PWRkKHRoaXMpLm9uKCJkYmxjbGljay56b29tIikscnQmJnJ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm59eiYmKGg9c2V0VGltZW91dChmdW5jdGlvbigpe2g9bnVsbH0scCksSXYodGhpcyksUi5zdGFydCgpKX19ZnVuY3Rpb24gSSgpe3ZhciBSPUModGhpcyxhcmd1bWVudHMpLEY9WXIuY2hhbmdlZFRvdWNoZXMsej1GLmxlbmd0aCxVLFcsWixydDtmb3IoZlMoKSxoJiYoaD1jbGVhclRpbWVvdXQoaCkpLFU9MDtVPHo7KytVKVc9RltVXSxaPUh6KHRoaXMsRixXLmlkZW50aWZpZXIpLFIudG91Y2gwJiZSLnRvdWNoMFsyXT09PVcuaWRlbnRpZmllcj9SLnRvdWNoMFswXT1aOlIudG91Y2gxJiZSLnRvdWNoMVsyXT09PVcuaWRlbnRpZmllciYmKFIudG91Y2gxWzBdPVopO2lmKFc9Ui50aGF0Ll9fem9vbSxSLnRvdWNoMSl7dmFyIG90PVIudG91Y2gwWzBdLHN0PVIudG91Y2gwWzFdLFN0PVIudG91Y2gxWzBdLGJ0PVIudG91Y2gxWzFdLE10PShNdD1TdFswXS1vdFswXSkqTXQrKE10PVN0WzFdLW90WzFdKSpNdCxsdD0obHQ9YnRbMF0tc3RbMF0pKmx0KyhsdD1idFsxXS1zdFsxXSkqbHQ7Vz15KFcsTWF0aC5zcXJ0KE10L2x0KSksWj1bKG90WzBdK1N0WzBdKS8yLChvdFsxXStTdFsxXSkvMl0scnQ9WyhzdFswXStidFswXSkvMiwoc3RbMV0rYnRbMV0pLzJdfWVsc2UgaWYoUi50b3VjaDApWj1SLnRvdWNoMFswXSxydD1SLnRvdWNoMFsxXTtlbHNlIHJldHVybjtSLnpvb20oInRvdWNoIixyKHgoVyxaLHJ0KSxSLmV4dGVudCxhKSl9ZnVuY3Rpb24gTCgpe3ZhciBSPUModGhpcyxhcmd1bWVudHMpLEY9WXIuY2hhbmdlZFRvdWNoZXMsej1GLmxlbmd0aCxVLFc7Zm9yKHNGKCksZiYmY2xlYXJUaW1lb3V0KGYpLGY9c2V0VGltZW91dChmdW5jdGlvbigpe2Y9bnVsbH0scCksVT0wO1U8ejsrK1UpVz1GW1VdLFIudG91Y2gwJiZSLnRvdWNoMFsyXT09PVcuaWRlbnRpZmllcj9kZWxldGUgUi50b3VjaDA6Ui50b3VjaDEmJlIudG91Y2gxWzJdPT09Vy5pZGVudGlmaWVyJiZkZWxldGUgUi50b3VjaDE7Ui50b3VjaDEmJiFSLnRvdWNoMCYmKFIudG91Y2gwPVIudG91Y2gxLGRlbGV0ZSBSLnRvdWNoMSksUi50b3VjaDA/Ui50b3VjaDBbMV09dGhpcy5fX3pvb20uaW52ZXJ0KFIudG91Y2gwWzBdKTpSLmVuZCgpfXJldHVybiBfLndoZWVsRGVsdGE9ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIFI9PSJmdW5jdGlvbiI/Ujp6QSgrUiksXyk6bn0sXy5maWx0ZXI9ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIFI9PSJmdW5jdGlvbiI/Ujp6QSghIVIpLF8pOmV9LF8udG91Y2hhYmxlPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBSPT0iZnVuY3Rpb24iP1I6ekEoISFSKSxfKTppfSxfLmV4dGVudD1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgUj09ImZ1bmN0aW9uIj9SOnpBKFtbK1JbMF1bMF0sK1JbMF1bMV1dLFsrUlsxXVswXSwrUlsxXVsxXV1dKSxfKTp0fSxfLnNjYWxlRXh0ZW50PWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvWzBdPStSWzBdLG9bMV09K1JbMV0sXyk6W29bMF0sb1sxXV19LF8udHJhbnNsYXRlRXh0ZW50PWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhWzBdWzBdPStSWzBdWzBdLGFbMV1bMF09K1JbMV1bMF0sYVswXVsxXT0rUlswXVsxXSxhWzFdWzFdPStSWzFdWzFdLF8pOltbYVswXVswXSxhWzBdWzFdXSxbYVsxXVswXSxhWzFdWzFdXV19LF8uY29uc3RyYWluPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPVIsXyk6cn0sXy5kdXJhdGlvbj1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0rUixfKTpzfSxfLmludGVycG9sYXRlPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPVIsXyk6bH0sXy5vbj1mdW5jdGlvbigpe3ZhciBSPXUub24uYXBwbHkodSxhcmd1bWVudHMpO3JldHVybiBSPT09dT9fOlJ9LF8uY2xpY2tEaXN0YW5jZT1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0oUj0rUikqUixfKTpNYXRoLnNxcnQoZyl9LF99dmFyIEdqdD1NKCgpPT57bW50KCk7Y1l0KCk7QUEoKTtMcygpO0ZqdCgpO0JqdCgpO0hqdCgpO25pdCgpO1ZqdCgpfSk7dmFyIFdqdD1NKCgpPT57R2p0KCk7bml0KCl9KTt2YXIgTXI9e307WnMoTXIse2FjdGl2ZTooKT0+bUd0LGFyYzooKT0+Z0Z0LGFyZWE6KCk9PmI3LGFyZWFSYWRpYWw6KCk9PmtldCxhc2NlbmRpbmc6KCk9Pl9jLGF4aXNCb3R0b206KCk9PlpNdCxheGlzTGVmdDooKT0+Sk10LGF4aXNSaWdodDooKT0+S010LGF4aXNUb3A6KCk9PiRNdCxiaXNlY3Q6KCk9PnNSLGJpc2VjdExlZnQ6KCk9PnNNdCxiaXNlY3RSaWdodDooKT0+eCQsYmlzZWN0b3I6KCk9PmFSLGJydXNoOigpPT55Q3QsYnJ1c2hTZWxlY3Rpb246KCk9Pm1DdCxicnVzaFg6KCk9PmdDdCxicnVzaFk6KCk9Pl9DdCxjaG9yZDooKT0+VUN0LGNsaWVudFBvaW50OigpPT5PZyxjbHVzdGVyOigpPT5HTHQsY29sb3I6KCk9PngyLGNyZWF0ZTooKT0+dEZ0LGNyZWF0b3I6KCk9PkRnLGNyb3NzOigpPT5jTXQsY3N2OigpPT5wTnQsY3N2Rm9ybWF0OigpPT55UHQsY3N2Rm9ybWF0Um93czooKT0+dlB0LGNzdlBhcnNlOigpPT5nUHQsY3N2UGFyc2VSb3dzOigpPT5fUHQsY3ViZWhlbGl4OigpPT51TixjdXJ2ZUJhc2lzOigpPT5PRnQsY3VydmVCYXNpc0Nsb3NlZDooKT0+RkZ0LGN1cnZlQmFzaXNPcGVuOigpPT5WRnQsY3VydmVCdW5kbGU6KCk9PkdGdCxjdXJ2ZUNhcmRpbmFsOigpPT5ZRnQsY3VydmVDYXJkaW5hbENsb3NlZDooKT0+akZ0LGN1cnZlQ2FyZGluYWxPcGVuOigpPT5YRnQsY3VydmVDYXRtdWxsUm9tOigpPT5LRnQsY3VydmVDYXRtdWxsUm9tQ2xvc2VkOigpPT5KRnQsY3VydmVDYXRtdWxsUm9tT3BlbjooKT0+ZUJ0LGN1cnZlTGluZWFyOigpPT5CZyxjdXJ2ZUxpbmVhckNsb3NlZDooKT0+aUJ0LGN1cnZlTW9ub3RvbmVYOigpPT5oQnQsY3VydmVNb25vdG9uZVk6KCk9PmZCdCxjdXJ2ZU5hdHVyYWw6KCk9PmdCdCxjdXJ2ZVN0ZXA6KCk9PnlCdCxjdXJ2ZVN0ZXBBZnRlcjooKT0+eEJ0LGN1cnZlU3RlcEJlZm9yZTooKT0+dkJ0LGN1c3RvbUV2ZW50OigpPT5YenQsZGVzY2VuZGluZzooKT0+aE10LGRldmlhdGlvbjooKT0+Y1IsZGlzcGF0Y2g6KCk9PmtBdCxkcmFnOigpPT5oUHQsZHJhZ0Rpc2FibGU6KCk9PkVOLGRyYWdFbmFibGU6KCk9PlROLGRzdkZvcm1hdDooKT0+dzIsZWFzZUJhY2s6KCk9Pk9aLGVhc2VCYWNrSW46KCk9PkpQdCxlYXNlQmFja0luT3V0OigpPT5PWixlYXNlQmFja091dDooKT0+UVB0LGVhc2VCb3VuY2U6KCk9PlMyLGVhc2VCb3VuY2VJbjooKT0+JFB0LGVhc2VCb3VuY2VJbk91dDooKT0+S1B0LGVhc2VCb3VuY2VPdXQ6KCk9PlMyLGVhc2VDaXJjbGU6KCk9PlJaLGVhc2VDaXJjbGVJbjooKT0+WVB0LGVhc2VDaXJjbGVJbk91dDooKT0+UlosZWFzZUNpcmNsZU91dDooKT0+alB0LGVhc2VDdWJpYzooKT0+QVosZWFzZUN1YmljSW46KCk9PmtQdCxlYXNlQ3ViaWNJbk91dDooKT0+QVosZWFzZUN1YmljT3V0OigpPT5SUHQsZWFzZUVsYXN0aWM6KCk9PkJaLGVhc2VFbGFzdGljSW46KCk9PmU2dCxlYXNlRWxhc3RpY0luT3V0OigpPT5yNnQsZWFzZUVsYXN0aWNPdXQ6KCk9PkJaLGVhc2VFeHA6KCk9PmtaLGVhc2VFeHBJbjooKT0+cVB0LGVhc2VFeHBJbk91dDooKT0+a1osZWFzZUV4cE91dDooKT0+R1B0LGVhc2VMaW5lYXI6KCk9PkNQdCxlYXNlUG9seTooKT0+SVosZWFzZVBvbHlJbjooKT0+RFB0LGVhc2VQb2x5SW5PdXQ6KCk9PklaLGVhc2VQb2x5T3V0OigpPT5PUHQsZWFzZVF1YWQ6KCk9PkNaLGVhc2VRdWFkSW46KCk9PlBQdCxlYXNlUXVhZEluT3V0OigpPT5DWixlYXNlUXVhZE91dDooKT0+SVB0LGVhc2VTaW46KCk9PkxaLGVhc2VTaW5JbjooKT0+SFB0LGVhc2VTaW5Jbk91dDooKT0+TFosZWFzZVNpbk91dDooKT0+VlB0LGVudHJpZXM6KCk9PmhBdCxldmVudDooKT0+UHUsZXh0ZW50OigpPT51Uixmb3JjZUNlbnRlcjooKT0+bzZ0LGZvcmNlQ29sbGlkZTooKT0+RjZ0LGZvcmNlTGluazooKT0+ajZ0LGZvcmNlTWFueUJvZHk6KCk9PmxJdCxmb3JjZVJhZGlhbDooKT0+dUl0LGZvcmNlU2ltdWxhdGlvbjooKT0+c0l0LGZvcmNlWDooKT0+Zkl0LGZvcmNlWTooKT0+ZEl0LGZvcm1hdDooKT0+ckosZm9ybWF0RGVmYXVsdExvY2FsZTooKT0+V04sZm9ybWF0TG9jYWxlOigpPT5xTixmb3JtYXRQcmVmaXg6KCk9Pm5KLGZvcm1hdFNwZWNpZmllcjooKT0+a3ksZ2VvQWxiZXJzOigpPT5ERCxnZW9BbGJlcnNVc2E6KCk9PnZMdCxnZW9BcmVhOigpPT5VSXQsZ2VvQXppbXV0aGFsRXF1YWxBcmVhOigpPT5iTHQsZ2VvQXppbXV0aGFsRXF1YWxBcmVhUmF3OigpPT56RCxnZW9BemltdXRoYWxFcXVpZGlzdGFudDooKT0+U0x0LGdlb0F6aW11dGhhbEVxdWlkaXN0YW50UmF3OigpPT5GRCxnZW9Cb3VuZHM6KCk9PktJdCxnZW9DZW50cm9pZDooKT0+bjl0LGdlb0NpcmNsZTooKT0+dTl0LGdlb0NsaXBBbnRpbWVyaWRpYW46KCk9PnpULGdlb0NsaXBDaXJjbGU6KCk9Pl9ELGdlb0NsaXBFeHRlbnQ6KCk9PlI5dCxnZW9DbGlwUmVjdGFuZ2xlOigpPT50ZCxnZW9Db25pY0NvbmZvcm1hbDooKT0+VEx0LGdlb0NvbmljQ29uZm9ybWFsUmF3OigpPT5mUSxnZW9Db25pY0VxdWFsQXJlYTooKT0+cXksZ2VvQ29uaWNFcXVhbEFyZWFSYXc6KCk9PmNRLGdlb0NvbmljRXF1aWRpc3RhbnQ6KCk9PlBMdCxnZW9Db25pY0VxdWlkaXN0YW50UmF3OigpPT5kUSxnZW9Db250YWluczooKT0+Vjl0LGdlb0Rpc3RhbmNlOigpPT5IeSxnZW9FcXVpcmVjdGFuZ3VsYXI6KCk9PkFMdCxnZW9FcXVpcmVjdGFuZ3VsYXJSYXc6KCk9Pld5LGdlb0dub21vbmljOigpPT5MTHQsZ2VvR25vbW9uaWNSYXc6KCk9PlZELGdlb0dyYXRpY3VsZTooKT0+U0QsZ2VvR3JhdGljdWxlMTA6KCk9Plc5dCxnZW9JZGVudGl0eTooKT0+Ukx0LGdlb0ludGVycG9sYXRlOigpPT5qOXQsZ2VvTGVuZ3RoOigpPT5iRCxnZW9NZXJjYXRvcjooKT0+RUx0LGdlb01lcmNhdG9yUmF3OigpPT5HeSxnZW9OYXR1cmFsRWFydGgxOigpPT5ETHQsZ2VvTmF0dXJhbEVhcnRoMVJhdzooKT0+cUQsZ2VvT3J0aG9ncmFwaGljOigpPT56THQsZ2VvT3J0aG9ncmFwaGljUmF3OigpPT5HRCxnZW9QYXRoOigpPT5mTHQsZ2VvUHJvamVjdGlvbjooKT0+ZW8sZ2VvUHJvamVjdGlvbk11dGF0b3I6KCk9PllULGdlb1JvdGF0aW9uOigpPT5sRCxnZW9TdGVyZW9ncmFwaGljOigpPT5CTHQsZ2VvU3RlcmVvZ3JhcGhpY1JhdzooKT0+V0QsZ2VvU3RyZWFtOigpPT5NbyxnZW9UcmFuc2Zvcm06KCk9PmRMdCxnZW9UcmFuc3ZlcnNlTWVyY2F0b3I6KCk9PlZMdCxnZW9UcmFuc3ZlcnNlTWVyY2F0b3JSYXc6KCk9PllELGhjbDooKT0+aVosaGllcmFyY2h5OigpPT5qVCxoaXN0b2dyYW06KCk9PnhNdCxoc2w6KCk9PlpLLGh0bWw6KCk9Pm9OdCxpbnRlcnBvbGF0ZTooKT0+WjIsaW50ZXJwb2xhdGVBcnJheTooKT0+Zk8saW50ZXJwb2xhdGVCYXNpczooKT0+Y08saW50ZXJwb2xhdGVCYXNpc0Nsb3NlZDooKT0+aE8saW50ZXJwb2xhdGVDb29sOigpPT5FN3QsaW50ZXJwb2xhdGVDdWJlaGVsaXg6KCk9PnE4dCxpbnRlcnBvbGF0ZUN1YmVoZWxpeERlZmF1bHQ6KCk9Pnc3dCxpbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmc6KCk9Pkc4dCxpbnRlcnBvbGF0ZURhdGU6KCk9PmRPLGludGVycG9sYXRlSGNsOigpPT5COHQsaW50ZXJwb2xhdGVIY2xMb25nOigpPT5IOHQsaW50ZXJwb2xhdGVIc2w6KCk9Pk44dCxpbnRlcnBvbGF0ZUhzbExvbmc6KCk9PkQ4dCxpbnRlcnBvbGF0ZUluZmVybm86KCk9Pkk3dCxpbnRlcnBvbGF0ZUxhYjooKT0+JFEsaW50ZXJwb2xhdGVNYWdtYTooKT0+UDd0LGludGVycG9sYXRlTnVtYmVyOigpPT5QcyxpbnRlcnBvbGF0ZU9iamVjdDooKT0+bU8saW50ZXJwb2xhdGVQbGFzbWE6KCk9Pkw3dCxpbnRlcnBvbGF0ZVJhaW5ib3c6KCk9PlQ3dCxpbnRlcnBvbGF0ZVJnYjooKT0+ZUMsaW50ZXJwb2xhdGVSZ2JCYXNpczooKT0+bTh0LGludGVycG9sYXRlUmdiQmFzaXNDbG9zZWQ6KCk9Pmc4dCxpbnRlcnBvbGF0ZVJvdW5kOigpPT5fOHQsaW50ZXJwb2xhdGVTdHJpbmc6KCk9PmdPLGludGVycG9sYXRlVHJhbnNmb3JtQ3NzOigpPT5UOHQsaW50ZXJwb2xhdGVUcmFuc2Zvcm1Tdmc6KCk9PkM4dCxpbnRlcnBvbGF0ZVZpcmlkaXM6KCk9PkE3dCxpbnRlcnBvbGF0ZVdhcm06KCk9Pk03dCxpbnRlcnBvbGF0ZVpvb206KCk9Pkw4dCxpbnRlcnJ1cHQ6KCk9PmR6LGludGVydmFsOigpPT5FVnQsaXNvRm9ybWF0OigpPT5nVnQsaXNvUGFyc2U6KCk9Pl9WdCxqc29uOigpPT5zTnQsa2V5czooKT0+c0F0LGxhYjooKT0+bE4sbGluZTooKT0+UncsbGluZVJhZGlhbDooKT0+SWV0LGxpbmtIb3Jpem9udGFsOigpPT5DRnQsbGlua1JhZGlhbDooKT0+UEZ0LGxpbmtWZXJ0aWNhbDooKT0+QUZ0LGxvY2FsOigpPT5tNyxtYXA6KCk9Pnd5LG1hdGNoZXI6KCk9PnU3LG1heDooKT0+VE10LG1lYW46KCk9PkFNdCxtZWRpYW46KCk9PklNdCxtZXJnZTooKT0+a010LG1pbjooKT0+bVIsbW91c2U6KCk9Pm5GdCxuYW1lc3BhY2U6KCk9Pk13LG5hbWVzcGFjZXM6KCk9PkVDLG5lc3Q6KCk9PnJBdCxub3c6KCk9Pll3LHBhY2s6KCk9PlRrdCxwYWNrRW5jbG9zZTooKT0+JEQscGFja1NpYmxpbmdzOigpPT53a3QscGFpcnM6KCk9PmxNdCxwYXJ0aXRpb246KCk9PkFrdCxwYXRoOigpPT5LOHQscGVybXV0ZTooKT0+Tk10LHBpZTooKT0+U0Z0LHBvaW50UmFkaWFsOigpPT5wdixwb2x5Z29uQXJlYTooKT0+UTh0LHBvbHlnb25DZW50cm9pZDooKT0+ZVJ0LHBvbHlnb25Db250YWluczooKT0+bFJ0LHBvbHlnb25IdWxsOigpPT5hUnQscG9seWdvbkxlbmd0aDooKT0+dVJ0LHByZWNpc2lvbkZpeGVkOigpPT5BSXQscHJlY2lzaW9uUHJlZml4OigpPT5JSXQscHJlY2lzaW9uUm91bmQ6KCk9PmtJdCxxdWFkdHJlZTooKT0+eE8scXVhbnRpbGU6KCk9Pm15LHF1YW50aXplOigpPT5ZOHQscXVldWU6KCk9PndPLHJhZGlhbEFyZWE6KCk9PmtldCxyYWRpYWxMaW5lOigpPT5JZXQscmFuZG9tQmF0ZXM6KCk9PnROdCxyYW5kb21FeHBvbmVudGlhbDooKT0+ck50LHJhbmRvbUlyd2luSGFsbDooKT0+TU8scmFuZG9tTG9nTm9ybWFsOigpPT5KUnQscmFuZG9tTm9ybWFsOigpPT5TTyxyYW5kb21Vbmlmb3JtOigpPT5LUnQscmFuZ2U6KCk9PmhSLHJlcXVlc3Q6KCk9PkoyLHJnYjooKT0+S0sscmliYm9uOigpPT5LQ3Qsc2NhbGVCYW5kOigpPT5jQyxzY2FsZUlkZW50aXR5OigpPT5xTyxzY2FsZUltcGxpY2l0OigpPT5rTyxzY2FsZUxpbmVhcjooKT0+VU8sc2NhbGVMb2c6KCk9PldPLHNjYWxlT3JkaW5hbDooKT0+bncsc2NhbGVQb2ludDooKT0+WU50LHNjYWxlUG93OigpPT5fQyxzY2FsZVF1YW50aWxlOigpPT5ZTyxzY2FsZVF1YW50aXplOigpPT5qTyxzY2FsZVNlcXVlbnRpYWw6KCk9Pmk3LHNjYWxlU3FydDooKT0+YU90LHNjYWxlVGhyZXNob2xkOigpPT5YTyxzY2FsZVRpbWU6KCk9Pmg3dCxzY2FsZVV0YzooKT0+Zjd0LHNjYW46KCk9Pk9NdCxzY2hlbWVDYXRlZ29yeTEwOigpPT5kN3Qsc2NoZW1lQ2F0ZWdvcnkyMDooKT0+eDd0LHNjaGVtZUNhdGVnb3J5MjBiOigpPT5nN3Qsc2NoZW1lQ2F0ZWdvcnkyMGM6KCk9Pnk3dCxzZWxlY3Q6KCk9PmQ3LHNlbGVjdEFsbDooKT0+b0Z0LHNlbGVjdGlvbjooKT0+UXp0LHNlbGVjdG9yOigpPT5FdyxzZWxlY3RvckFsbDooKT0+Yzcsc2V0OigpPT5vQXQsc2h1ZmZsZTooKT0+Rk10LHN0YWNrOigpPT53QnQsc3RhY2tPZmZzZXREaXZlcmdpbmc6KCk9PlRCdCxzdGFja09mZnNldEV4cGFuZDooKT0+TUJ0LHN0YWNrT2Zmc2V0Tm9uZTooKT0+UnUsc3RhY2tPZmZzZXRTaWxob3VldHRlOigpPT5BQnQsc3RhY2tPZmZzZXRXaWdnbGU6KCk9PklCdCxzdGFja09yZGVyQXNjZW5kaW5nOigpPT5ENyxzdGFja09yZGVyRGVzY2VuZGluZzooKT0+a0J0LHN0YWNrT3JkZXJJbnNpZGVPdXQ6KCk9Pk5CdCxzdGFja09yZGVyTm9uZTooKT0+TnUsc3RhY2tPcmRlclJldmVyc2U6KCk9Pk9CdCxzdHJhdGlmeTooKT0+a2t0LHN0eWxlOigpPT5fZXQsc3VtOigpPT5ITXQsc3ltYm9sOigpPT5ORnQsc3ltYm9sQ2lyY2xlOigpPT5SQyxzeW1ib2xDcm9zczooKT0+Uzcsc3ltYm9sRGlhbW9uZDooKT0+TTcsc3ltYm9sU3F1YXJlOigpPT5UNyxzeW1ib2xTdGFyOigpPT5FNyxzeW1ib2xUcmlhbmdsZTooKT0+Qzcsc3ltYm9sV3llOigpPT5BNyxzeW1ib2xzOigpPT5SRnQsdGV4dDooKT0+Y050LHRocmVzaG9sZEZyZWVkbWFuRGlhY29uaXM6KCk9PndNdCx0aHJlc2hvbGRTY290dDooKT0+TU10LHRocmVzaG9sZFN0dXJnZXM6KCk9PnBSLHRpY2tJbmNyZW1lbnQ6KCk9PmskLHRpY2tTdGVwOigpPT5mUix0aWNrczooKT0+dk10LHRpbWVEYXk6KCk9PlpCdCx0aW1lRGF5czooKT0+SkJ0LHRpbWVGb3JtYXQ6KCk9PndydCx0aW1lRm9ybWF0RGVmYXVsdExvY2FsZTooKT0+WDcsdGltZUZvcm1hdExvY2FsZTooKT0+WUMsdGltZUZyaWRheTooKT0+b3J0LHRpbWVGcmlkYXlzOigpPT5pSHQsdGltZUhvdXI6KCk9PmpCdCx0aW1lSG91cnM6KCk9PlhCdCx0aW1lSW50ZXJ2YWw6KCk9PlNyLHRpbWVNaWxsaXNlY29uZDooKT0+WmV0LHRpbWVNaWxsaXNlY29uZHM6KCk9PkpldCx0aW1lTWludXRlOigpPT5xQnQsdGltZU1pbnV0ZXM6KCk9PkdCdCx0aW1lTW9uZGF5OigpPT5lcnQsdGltZU1vbmRheXM6KCk9PnRIdCx0aW1lTW9udGg6KCk9PmxIdCx0aW1lTW9udGhzOigpPT5jSHQsdGltZVBhcnNlOigpPT5TcnQsdGltZVNhdHVyZGF5OigpPT5hcnQsdGltZVNhdHVyZGF5czooKT0+b0h0LHRpbWVTZWNvbmQ6KCk9PlFldCx0aW1lU2Vjb25kczooKT0+dHJ0LHRpbWVTdW5kYXk6KCk9Pkg3LHRpbWVTdW5kYXlzOigpPT5zcnQsdGltZVRodXJzZGF5OigpPT5pcnQsdGltZVRodXJzZGF5czooKT0+bkh0LHRpbWVUdWVzZGF5OigpPT5ycnQsdGltZVR1ZXNkYXlzOigpPT5lSHQsdGltZVdlZG5lc2RheTooKT0+bnJ0LHRpbWVXZWRuZXNkYXlzOigpPT5ySHQsdGltZVdlZWs6KCk9Pkg3LHRpbWVXZWVrczooKT0+c3J0LHRpbWVZZWFyOigpPT5oSHQsdGltZVllYXJzOigpPT5mSHQsdGltZW91dDooKT0+U1Z0LHRpbWVyOigpPT5DcnQsdGltZXJGbHVzaDooKT0+QXJ0LHRvdWNoOigpPT5zRnQsdG91Y2hlczooKT0+Y0Z0LHRyYW5zaXRpb246KCk9PlR6LHRyYW5zcG9zZTooKT0+Z1IsdHJlZTooKT0+Tmt0LHRyZWVtYXA6KCk9Pk9rdCx0cmVlbWFwQmluYXJ5OigpPT5Ga3QsdHJlZW1hcERpY2U6KCk9PmNmLHRyZWVtYXBSZXNxdWFyaWZ5OigpPT5Va3QsdHJlZW1hcFNsaWNlOigpPT5TZyx0cmVlbWFwU2xpY2VEaWNlOigpPT5Ia3QsdHJlZW1hcFNxdWFyaWZ5OigpPT50Tyx0c3Y6KCk9Pm1OdCx0c3ZGb3JtYXQ6KCk9PlNQdCx0c3ZGb3JtYXRSb3dzOigpPT5NUHQsdHN2UGFyc2U6KCk9PmJQdCx0c3ZQYXJzZVJvd3M6KCk9PndQdCx1dGNEYXk6KCk9PlNIdCx1dGNEYXlzOigpPT5NSHQsdXRjRm9ybWF0OigpPT5qQyx1dGNGcmlkYXk6KCk9PnBydCx1dGNGcmlkYXlzOigpPT5JSHQsdXRjSG91cjooKT0+dkh0LHV0Y0hvdXJzOigpPT54SHQsdXRjTWlsbGlzZWNvbmQ6KCk9PlpldCx1dGNNaWxsaXNlY29uZHM6KCk9PkpldCx1dGNNaW51dGU6KCk9Pm1IdCx1dGNNaW51dGVzOigpPT5nSHQsdXRjTW9uZGF5OigpPT5jcnQsdXRjTW9uZGF5czooKT0+VEh0LHV0Y01vbnRoOigpPT5OSHQsdXRjTW9udGhzOigpPT5ESHQsdXRjUGFyc2U6KCk9PlhDLHV0Y1NhdHVyZGF5OigpPT5kcnQsdXRjU2F0dXJkYXlzOigpPT5MSHQsdXRjU2Vjb25kOigpPT5RZXQsdXRjU2Vjb25kczooKT0+dHJ0LHV0Y1N1bmRheTooKT0+VjcsdXRjU3VuZGF5czooKT0+bXJ0LHV0Y1RodXJzZGF5OigpPT5mcnQsdXRjVGh1cnNkYXlzOigpPT5QSHQsdXRjVHVlc2RheTooKT0+dXJ0LHV0Y1R1ZXNkYXlzOigpPT5DSHQsdXRjV2VkbmVzZGF5OigpPT5ocnQsdXRjV2VkbmVzZGF5czooKT0+QUh0LHV0Y1dlZWs6KCk9PlY3LHV0Y1dlZWtzOigpPT5tcnQsdXRjWWVhcjooKT0+ekh0LHV0Y1llYXJzOigpPT5GSHQsdmFsdWVzOigpPT5jQXQsdmFyaWFuY2U6KCk9PmxSLHZlcnNpb246KCk9PmlNdCx2b3Jvbm9pOigpPT5ER3Qsd2luZG93OigpPT5Ddyx4bWw6KCk9PmhOdCx6aXA6KCk9PlVNdCx6b29tOigpPT5xanQsem9vbUlkZW50aXR5OigpPT5oUyx6b29tVHJhbnNmb3JtOigpPT5hRn0pO3ZhciBFcj1NKCgpPT57b010KCk7R010KCk7dEV0KCk7eEN0KCk7SkN0KCk7cEF0KCk7UEF0KCk7TkF0KCk7cFB0KCk7VFB0KCk7aTZ0KCk7Z0l0KCk7Tkl0KCk7cUx0KCk7R2t0KCk7WDh0KCk7Sjh0KCk7ZlJ0KCk7R1J0KCk7JFJ0KCk7aU50KCk7X050KCk7Tjd0KCk7aEZ0KCk7RkJ0KCk7SEh0KCk7dlZ0KCk7Q1Z0KCk7X0d0KCk7ekd0KCk7V2p0KCl9KTt2YXIgJGp0PUgoWGp0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYanQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBZanQ9KEVyKCksVXQoTXIpKSxZZz1ZanQsamp0PVlqdDtmdW5jdGlvbiBXRGUoZSx0KXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksbj1ZZy5zZWxlY3QodGhpcyk7Zm9yKHZhciBpIGluIHIpbi5hdHRyKGkscltpXSl9KX1mdW5jdGlvbiBZRGUoZSx0KXtmb3IodmFyIHIgaW4gdCllLmF0dHIocix0W3JdKTtyZXR1cm4gZX1mdW5jdGlvbiBqRGUoZSl7cmV0dXJuKHR5cGVvZiBlPT0iZnVuY3Rpb24iP1dEZTpZRGUpKHRoaXMsZSl9ZnVuY3Rpb24gWERlKGUsdCxyKXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksaT1ZZy5zZWxlY3QodGhpcyk7Zm9yKHZhciBvIGluIG4paS5zdHlsZShvLG5bb10scil9KX1mdW5jdGlvbiAkRGUoZSx0LHIpe2Zvcih2YXIgbiBpbiB0KWUuc3R5bGUobix0W25dLHIpO3JldHVybiBlfWZ1bmN0aW9uIEtEZShlLHQpe3JldHVybih0eXBlb2YgZT09ImZ1bmN0aW9uIj9YRGU6JERlKSh0aGlzLGUsdD09bnVsbD8iIjp0KX1mdW5jdGlvbiBaRGUoZSx0KXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksbj1ZZy5zZWxlY3QodGhpcyk7Zm9yKHZhciBpIGluIHIpbi5wcm9wZXJ0eShpLHJbaV0pfSl9ZnVuY3Rpb24gSkRlKGUsdCl7Zm9yKHZhciByIGluIHQpZS5wcm9wZXJ0eShyLHRbcl0pO3JldHVybiBlfWZ1bmN0aW9uIFFEZShlKXtyZXR1cm4odHlwZW9mIGU9PSJmdW5jdGlvbiI/WkRlOkpEZSkodGhpcyxlKX1mdW5jdGlvbiB0T2UoZSx0KXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksbj1ZZy5zZWxlY3QodGhpcykudHJhbnNpdGlvbihlKTtmb3IodmFyIGkgaW4gciluLmF0dHIoaSxyW2ldKX0pfWZ1bmN0aW9uIGVPZShlLHQpe2Zvcih2YXIgciBpbiB0KWUuYXR0cihyLHRbcl0pO3JldHVybiBlfWZ1bmN0aW9uIHJPZShlKXtyZXR1cm4odHlwZW9mIGU9PSJmdW5jdGlvbiI/dE9lOmVPZSkodGhpcyxlKX1mdW5jdGlvbiBuT2UoZSx0LHIpe3JldHVybiBlLmVhY2goZnVuY3Rpb24oKXt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxpPVlnLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKGUpO2Zvcih2YXIgbyBpbiBuKWkuc3R5bGUobyxuW29dLHIpfSl9ZnVuY3Rpb24gaU9lKGUsdCxyKXtmb3IodmFyIG4gaW4gdCllLnN0eWxlKG4sdFtuXSxyKTtyZXR1cm4gZX1mdW5jdGlvbiBvT2UoZSx0KXtyZXR1cm4odHlwZW9mIGU9PSJmdW5jdGlvbiI/bk9lOmlPZSkodGhpcyxlLHQ9PW51bGw/IiI6dCl9WWcuc2VsZWN0aW9uLnByb3RvdHlwZS5hdHRycz1qRGU7WWcuc2VsZWN0aW9uLnByb3RvdHlwZS5zdHlsZXM9S0RlO1lnLnNlbGVjdGlvbi5wcm90b3R5cGUucHJvcGVydGllcz1RRGU7amp0LnRyYW5zaXRpb24ucHJvdG90eXBlLmF0dHJzPXJPZTtqanQudHJhbnNpdGlvbi5wcm90b3R5cGUuc3R5bGVzPW9PZX0pO3ZhciBqZz1IKGlpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaWl0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgS2p0PShFcigpLFV0KE1yKSk7ZnVuY3Rpb24gYU9lKGUpe2lmKGUuYXR0cnM9PW51bGwpaWYoZS5ub2Rlcz09bnVsbCl7dmFyIHQ9W107cmV0dXJuIGUuZWFjaChmdW5jdGlvbigpe3QucHVzaCh0aGlzKX0pLEtqdC5zZWxlY3RBbGwodCl9ZWxzZSByZXR1cm4gS2p0LnNlbGVjdEFsbChlLm5vZGVzKCkpO2Vsc2UgcmV0dXJuIGV9aWl0LmNvZXJjZUV4dGVybmFsRDM9YU9lfSk7dmFyIExmPUgob2l0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShvaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2Z1bmN0aW9uIHNPZShlKXtyZXR1cm4gZS5yZWR1Y2UoZnVuY3Rpb24odCxyKXtyZXR1cm4gdFtyXT1yLHR9LHt9KX1vaXQubWFrZUVudW09c09lfSk7dmFyIEpqdD1IKGxGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShsRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGRyPShMXygpLFV0KEJ2dCkpLGxPZT1qZygpLGNPZT1MZigpLFpqdD17bGluZWFyOmRyLmVhc2VMaW5lYXIscXVhZDpkci5lYXNlUXVhZCxxdWFkSW46ZHIuZWFzZVF1YWRJbixxdWFkT3V0OmRyLmVhc2VRdWFkT3V0LHF1YWRJbk91dDpkci5lYXNlUXVhZEluT3V0LGN1YmljOmRyLmVhc2VDdWJpYyxjdWJpY0luOmRyLmVhc2VDdWJpY0luLGN1YmljT3V0OmRyLmVhc2VDdWJpY091dCxjdWJpY0luT3V0OmRyLmVhc2VDdWJpY0luT3V0LHBvbHk6ZHIuZWFzZVBvbHkscG9seUluOmRyLmVhc2VQb2x5SW4scG9seU91dDpkci5lYXNlUG9seU91dCxwb2x5SW5PdXQ6ZHIuZWFzZVBvbHlJbk91dCxzaW46ZHIuZWFzZVNpbixzaW5Jbjpkci5lYXNlU2luSW4sc2luT3V0OmRyLmVhc2VTaW5PdXQsc2luSW5PdXQ6ZHIuZWFzZVNpbkluT3V0LGV4cDpkci5lYXNlRXhwLGV4cEluOmRyLmVhc2VFeHBJbixleHBPdXQ6ZHIuZWFzZUV4cE91dCxleHBJbk91dDpkci5lYXNlRXhwSW5PdXQsY2lyY2xlOmRyLmVhc2VDaXJjbGUsY2lyY2xlSW46ZHIuZWFzZUNpcmNsZUluLGNpcmNsZU91dDpkci5lYXNlQ2lyY2xlT3V0LGNpcmNsZUluT3V0OmRyLmVhc2VDaXJjbGVJbk91dCxib3VuY2U6ZHIuZWFzZUJvdW5jZSxib3VuY2VJbjpkci5lYXNlQm91bmNlSW4sYm91bmNlT3V0OmRyLmVhc2VCb3VuY2VPdXQsYm91bmNlSW5PdXQ6ZHIuZWFzZUJvdW5jZUluT3V0LGJhY2s6ZHIuZWFzZUJhY2ssYmFja0luOmRyLmVhc2VCYWNrSW4sYmFja091dDpkci5lYXNlQmFja091dCxiYWNrSW5PdXQ6ZHIuZWFzZUJhY2tJbk91dCxlbGFzdGljOmRyLmVhc2VFbGFzdGljLGVsYXN0aWNJbjpkci5lYXNlRWxhc3RpY0luLGVsYXN0aWNPdXQ6ZHIuZWFzZUVsYXN0aWNPdXQsZWxhc3RpY0luT3V0OmRyLmVhc2VFbGFzdGljSW5PdXR9O2xGLkVhc2VOYW1lPWNPZS5tYWtlRW51bShbImxpbmVhciIsInF1YWQiLCJxdWFkSW4iLCJxdWFkT3V0IiwicXVhZEluT3V0IiwiY3ViaWMiLCJjdWJpY0luIiwiY3ViaWNPdXQiLCJjdWJpY0luT3V0IiwicG9seSIsInBvbHlJbiIsInBvbHlPdXQiLCJwb2x5SW5PdXQiLCJzaW4iLCJzaW5JbiIsInNpbk91dCIsInNpbkluT3V0IiwiZXhwIiwiZXhwSW4iLCJleHBPdXQiLCJleHBJbk91dCIsImNpcmNsZSIsImNpcmNsZUluIiwiY2lyY2xlT3V0IiwiY2lyY2xlSW5PdXQiLCJib3VuY2UiLCJib3VuY2VJbiIsImJvdW5jZU91dCIsImJvdW5jZUluT3V0IiwiYmFjayIsImJhY2tJbiIsImJhY2tPdXQiLCJiYWNrSW5PdXQiLCJlbGFzdGljIiwiZWxhc3RpY0luIiwiZWxhc3RpY091dCIsImVsYXN0aWNJbk91dCJdKTt2YXIgdU9lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuX3N0YXJ0RGVsYXk9ZS5fREVGQVVMVF9TVEFSVF9ERUxBWV9NSUxMSVNFQ09ORFMsdGhpcy5fc3RlcER1cmF0aW9uPWUuX0RFRkFVTFRfU1RFUF9EVVJBVElPTl9NSUxMSVNFQ09ORFMsdGhpcy5fc3RlcERlbGF5PWUuX0RFRkFVTFRfSVRFUkFUSVZFX0RFTEFZX01JTExJU0VDT05EUyx0aGlzLl9tYXhUb3RhbER1cmF0aW9uPWUuX0RFRkFVTFRfTUFYX1RPVEFMX0RVUkFUSU9OX01JTExJU0VDT05EUyx0aGlzLl9lYXNpbmdNb2RlPWUuX0RFRkFVTFRfRUFTSU5HX01PREV9cmV0dXJuIGUucHJvdG90eXBlLnRvdGFsVGltZT1mdW5jdGlvbih0KXt2YXIgcj10aGlzLl9nZXRBZGp1c3RlZEl0ZXJhdGl2ZURlbGF5KHQpO3JldHVybiB0aGlzLnN0YXJ0RGVsYXkoKStyKk1hdGgubWF4KHQtMSwwKSt0aGlzLnN0ZXBEdXJhdGlvbigpfSxlLnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKHQscil7dmFyIG49dGhpczt0PWxPZS5jb2VyY2VFeHRlcm5hbEQzKHQpO3ZhciBpPXQuc2l6ZSgpLG89dGhpcy5fZ2V0QWRqdXN0ZWRJdGVyYXRpdmVEZWxheShpKTtyZXR1cm4gdC50cmFuc2l0aW9uKCkuZWFzZSh0aGlzLl9nZXRFYXNlRmFjdG9yeSgpKS5kdXJhdGlvbih0aGlzLnN0ZXBEdXJhdGlvbigpKS5kZWxheShmdW5jdGlvbihhLHMpe3JldHVybiBuLnN0YXJ0RGVsYXkoKStvKnN9KS5hdHRycyhyKX0sZS5wcm90b3R5cGUuc3RhcnREZWxheT1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9zdGFydERlbGF5Oih0aGlzLl9zdGFydERlbGF5PXQsdGhpcyl9LGUucHJvdG90eXBlLnN0ZXBEdXJhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD9NYXRoLm1pbih0aGlzLl9zdGVwRHVyYXRpb24sdGhpcy5fbWF4VG90YWxEdXJhdGlvbik6KHRoaXMuX3N0ZXBEdXJhdGlvbj10LHRoaXMpfSxlLnByb3RvdHlwZS5zdGVwRGVsYXk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/dGhpcy5fc3RlcERlbGF5Oih0aGlzLl9zdGVwRGVsYXk9dCx0aGlzKX0sZS5wcm90b3R5cGUubWF4VG90YWxEdXJhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9tYXhUb3RhbER1cmF0aW9uOih0aGlzLl9tYXhUb3RhbER1cmF0aW9uPXQsdGhpcyl9LGUucHJvdG90eXBlLmVhc2luZ01vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/dGhpcy5fZWFzaW5nTW9kZToodGhpcy5fZWFzaW5nTW9kZT10LHRoaXMpfSxlLnByb3RvdHlwZS5fZ2V0RWFzZUZhY3Rvcnk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVhc2luZ01vZGUoKTtpZih0eXBlb2YgdD09InN0cmluZyIpe3ZhciByPVpqdFt0XTtyZXR1cm4gcj09bnVsbD9aanQubGluZWFyOnJ9ZWxzZSByZXR1cm4gdH0sZS5wcm90b3R5cGUuX2dldEFkanVzdGVkSXRlcmF0aXZlRGVsYXk9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcy5tYXhUb3RhbER1cmF0aW9uKCktdGhpcy5zdGVwRHVyYXRpb24oKTtyPU1hdGgubWF4KHIsMCk7dmFyIG49ci9NYXRoLm1heCh0LTEsMSk7cmV0dXJuIE1hdGgubWluKHRoaXMuc3RlcERlbGF5KCksbil9LGUuX0RFRkFVTFRfU1RBUlRfREVMQVlfTUlMTElTRUNPTkRTPTAsZS5fREVGQVVMVF9TVEVQX0RVUkFUSU9OX01JTExJU0VDT05EUz0zMDAsZS5fREVGQVVMVF9JVEVSQVRJVkVfREVMQVlfTUlMTElTRUNPTkRTPTE1LGUuX0RFRkFVTFRfTUFYX1RPVEFMX0RVUkFUSU9OX01JTExJU0VDT05EUz0xLzAsZS5fREVGQVVMVF9FQVNJTkdfTU9ERT0iZXhwT3V0IixlfSgpO2xGLkVhc2luZz11T2V9KTt2YXIgUWp0PUgoYWl0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBoT2U9amcoKSxmT2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS50b3RhbFRpbWU9ZnVuY3Rpb24odCl7cmV0dXJuIDB9LGUucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24odCxyKXtyZXR1cm4gdD1oT2UuY29lcmNlRXh0ZXJuYWxEMyh0KSx0LmF0dHJzKHIpfSxlfSgpO2FpdC5OdWxsPWZPZX0pO3ZhciBrZj1IKGNGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShjRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHRYdD0oZGUoKSxVdChwZSkpO3RYdC5fX2V4cG9ydFN0YXIoSmp0KCksY0YpO3RYdC5fX2V4cG9ydFN0YXIoUWp0KCksY0YpfSk7dmFyIGVYdD1IKHNpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoc2l0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcE9lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt0aGlzLmNhY2hlPXt9LHRoaXMuY29tcHV0ZT10fXJldHVybiBlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2FjaGUuaGFzT3duUHJvcGVydHkodCl8fCh0aGlzLmNhY2hlW3RdPXRoaXMuY29tcHV0ZSh0KSksdGhpcy5jYWNoZVt0XX0sZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYWNoZT17fSx0aGlzfSxlfSgpO3NpdC5DYWNoZT1wT2V9KTt2YXIgclh0PUgobGl0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShsaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBkT2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLmFycmF5RXE9ZnVuY3Rpb24odCxyKXtpZih0PT1udWxsfHxyPT1udWxsKXJldHVybiB0PT09cjtpZih0Lmxlbmd0aCE9PXIubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKWlmKHRbbl0hPT1yW25dKXJldHVybiExO3JldHVybiEwfSxlLm9iakVxPWZ1bmN0aW9uKHQscil7aWYodD09bnVsbHx8cj09bnVsbClyZXR1cm4gdD09PXI7dmFyIG49T2JqZWN0LmtleXModCkuc29ydCgpLGk9T2JqZWN0LmtleXMocikuc29ydCgpLG89bi5tYXAoZnVuY3Rpb24ocyl7cmV0dXJuIHRbc119KSxhPWkubWFwKGZ1bmN0aW9uKHMpe3JldHVybiByW3NdfSk7cmV0dXJuIGUuYXJyYXlFcShuLGkpJiZlLmFycmF5RXEobyxhKX0sZS5zdHJpY3RFcT1mdW5jdGlvbih0LHIpe3JldHVybiB0PT09cn0sZS5kZWZhdWx0cz1mdW5jdGlvbih0KXtmb3IodmFyIHI9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspcltuLTFdPWFyZ3VtZW50c1tuXTtpZih0PT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdCIpO3ZhciBpPU9iamVjdCh0KTtyZXR1cm4gci5mb3JFYWNoKGZ1bmN0aW9uKG8pe2lmKG8hPW51bGwpZm9yKHZhciBhIGluIG8pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sYSkmJihpW2FdPW9bYV0pfSksaX0sZX0oKTtsaXQuTWV0aG9kcz1kT2V9KTt2YXIgblh0PUgoY2l0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShjaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBtT2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLmNvbWJpbmVXaGl0ZXNwYWNlPWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoL1sgXHRdKy9nLCIgIil9LGUuaXNOb3RFbXB0eVN0cmluZz1mdW5jdGlvbih0KXtyZXR1cm4gdCYmdC50cmltKCkhPT0iIn0sZS50cmltU3RhcnQ9ZnVuY3Rpb24odCxyKXtpZighdClyZXR1cm4gdDt2YXIgbj10LnNwbGl0KCIiKSxpPXI/ZnVuY3Rpb24obyl7cmV0dXJuIG8uc3BsaXQocikuc29tZShlLmlzTm90RW1wdHlTdHJpbmcpfTplLmlzTm90RW1wdHlTdHJpbmc7cmV0dXJuIG4ucmVkdWNlKGZ1bmN0aW9uKG8sYSl7cmV0dXJuIGkobythKT9vK2E6b30sIiIpfSxlLnRyaW1FbmQ9ZnVuY3Rpb24odCxyKXtpZighdClyZXR1cm4gdDt2YXIgbj10LnNwbGl0KCIiKTtyZXR1cm4gbi5yZXZlcnNlKCksbj1lLnRyaW1TdGFydChuLmpvaW4oIiIpLHIpLnNwbGl0KCIiKSxuLnJldmVyc2UoKSxuLmpvaW4oIiIpfSxlfSgpO2NpdC5TdHJpbmdNZXRob2RzPW1PZX0pO3ZhciBpWHQ9SCh1aXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHVpdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGdPZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLldvcmREaXZpZGVyUmVnRXhwPW5ldyBSZWdFeHAoIlxcVyIpLHRoaXMuV2hpdGVzcGFjZVJlZ0V4cD1uZXcgUmVnRXhwKCJcXHMiKX1yZXR1cm4gZS5wcm90b3R5cGUudG9rZW5pemU9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcztyZXR1cm4gdC5zcGxpdCgiIikucmVkdWNlKGZ1bmN0aW9uKG4saSl7cmV0dXJuIG4uc2xpY2UoMCwtMSkuY29uY2F0KHIuc2hvdWxkQ3JlYXRlTmV3VG9rZW4obltuLmxlbmd0aC0xXSxpKSl9LFsiIl0pfSxlLnByb3RvdHlwZS5zaG91bGRDcmVhdGVOZXdUb2tlbj1mdW5jdGlvbih0LHIpe2lmKCF0KXJldHVybltyXTt2YXIgbj10W3QubGVuZ3RoLTFdO3JldHVybiB0aGlzLldoaXRlc3BhY2VSZWdFeHAudGVzdChuKSYmdGhpcy5XaGl0ZXNwYWNlUmVnRXhwLnRlc3Qocik/W3Qrcl06dGhpcy5XaGl0ZXNwYWNlUmVnRXhwLnRlc3Qobil8fHRoaXMuV2hpdGVzcGFjZVJlZ0V4cC50ZXN0KHIpP1t0LHJdOnRoaXMuV29yZERpdmlkZXJSZWdFeHAudGVzdChuKT9uPT09cj9bdCtyXTpbdCxyXTpbdCtyXX0sZX0oKTt1aXQuVG9rZW5pemVyPWdPZX0pO3ZhciBwUz1IKHVGPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGhGKGUpe2Zvcih2YXIgdCBpbiBlKXVGLmhhc093blByb3BlcnR5KHQpfHwodUZbdF09ZVt0XSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHVGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtoRihlWHQoKSk7aEYoclh0KCkpO2hGKG5YdCgpKTtoRihpWHQoKSl9KTt2YXIgYVh0PUgoaGl0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShoaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvWHQ9cFMoKSxfT2U9e3RleHRSb3RhdGlvbjowLHRleHRTaGVhcjowLHhBbGlnbjoibGVmdCIseUFsaWduOiJ0b3AifSxmRj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe3RoaXMuX21lYXN1cmVyPXQsdGhpcy5fcGVuRmFjdG9yeT1yLHRoaXMuX3dyYXBwZXI9bn1yZXR1cm4gZS5wcm90b3R5cGUubWVhc3VyZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21lYXN1cmVyPXQsdGhpc30sZS5wcm90b3R5cGUud3JhcHBlcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fd3JhcHBlcj10LHRoaXN9LGUucHJvdG90eXBlLnBlbkZhY3Rvcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BlbkZhY3Rvcnk9dCx0aGlzfSxlLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih0LHIsbixpLG8pe2lmKGk9PT12b2lkIDAmJihpPXt9KSxpPW9YdC5NZXRob2RzLmRlZmF1bHRzKHt9LF9PZSxpKSxlLlN1cHBvcnRlZFJvdGF0aW9uLmluZGV4T2YoaS50ZXh0Um90YXRpb24pPT09LTEpdGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCByb3RhdGlvbiAtICIraS50ZXh0Um90YXRpb24rIi4gU3VwcG9ydGVkIHJvdGF0aW9ucyBhcmUgIitlLlN1cHBvcnRlZFJvdGF0aW9uLmpvaW4oIiwgIikpO2lmKGkudGV4dFNoZWFyIT1udWxsJiZpLnRleHRTaGVhcjwtODB8fGkudGV4dFNoZWFyPjgwKXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgc2hlYXIgYW5nbGUgLSAiK2kudGV4dFNoZWFyKyIuIE11c3QgYmUgYmV0d2VlbiAtODAgYW5kIDgwIik7dmFyIGE9TWF0aC5hYnMoTWF0aC5hYnMoaS50ZXh0Um90YXRpb24pLTkwKT40NSxzPWE/cjpuLGw9YT9uOnIsYz1pLnRleHRTaGVhcix1PWMqTWF0aC5QSS8xODAsaD10aGlzLl9tZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0LGY9aCpNYXRoLnRhbih1KSxwPXMvTWF0aC5jb3ModSktTWF0aC5hYnMoZiksZD1sKk1hdGguY29zKHUpLGc9b1h0LlN0cmluZ01ldGhvZHMuY29tYmluZVdoaXRlc3BhY2UodCksXz10aGlzLl93cmFwcGVyP3RoaXMuX3dyYXBwZXIud3JhcChnLHRoaXMuX21lYXN1cmVyLHAsZCkud3JhcHBlZFRleHQ6Zyx5PV8uc3BsaXQoYApgKSx4PWUuWE9mZnNldEZhY3RvcltpLnhBbGlnbl0qcCpNYXRoLnNpbih1KSxiPWUuWU9mZnNldEZhY3RvcltpLnlBbGlnbl0qKGQteS5sZW5ndGgqaCksUz14LWIsQz1bMCwwXSxQPWkudGV4dFJvdGF0aW9uK2M7c3dpdGNoKGkudGV4dFJvdGF0aW9uKXtjYXNlIDkwOkM9W3IrUywwXTticmVhaztjYXNlLTkwOkM9Wy1TLG5dO2JyZWFrO2Nhc2UgMTgwOkM9W3IsbitTXTticmVhaztkZWZhdWx0OkM9WzAsLVNdO2JyZWFrfXZhciBrPXRoaXMuX3BlbkZhY3RvcnkuY3JlYXRlUGVuKHQse3RyYW5zbGF0ZTpDLHJvdGF0ZTpQfSxvKTt0aGlzLndyaXRlTGluZXMoeSxrLHAsaCxmLGkueEFsaWduKSxrLmRlc3Ryb3khPW51bGwmJmsuZGVzdHJveSgpfSxlLnByb3RvdHlwZS53cml0ZUxpbmVzPWZ1bmN0aW9uKHQscixuLGksbyxhKXt0LmZvckVhY2goZnVuY3Rpb24ocyxsKXt2YXIgYz1vPjA/KGwrMSkqbzpsKm87ci53cml0ZShzLG4sYSxjLChsKzEpKmkpfSl9LGV9KCk7ZkYuWE9mZnNldEZhY3Rvcj17Y2VudGVyOi41LGxlZnQ6MCxyaWdodDoxfTtmRi5ZT2Zmc2V0RmFjdG9yPXtib3R0b206MSxjZW50ZXI6LjUsdG9wOjB9O2ZGLlN1cHBvcnRlZFJvdGF0aW9uPVstOTAsMCwxODAsOTBdO2hpdC5Xcml0ZXI9ZkZ9KTt2YXIgRkE9SChwRj0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB5T2UoZSl7Zm9yKHZhciB0IGluIGUpcEYuaGFzT3duUHJvcGVydHkodCl8fChwRlt0XT1lW3RdKX1PYmplY3QuZGVmaW5lUHJvcGVydHkocEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3lPZShhWHQoKSl9KTt2YXIgZml0PUgoZEY9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGRGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgQkE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLmFwcGVuZD1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj1bXSxpPTI7aTxhcmd1bWVudHMubGVuZ3RoO2krKyluW2ktMl09YXJndW1lbnRzW2ldO3ZhciBvPWUuY3JlYXRlLmFwcGx5KGUsW3JdLmNvbmNhdChuKSk7cmV0dXJuIHQuYXBwZW5kQ2hpbGQobyksb30sZS5jcmVhdGU9ZnVuY3Rpb24odCl7Zm9yKHZhciByPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXJbbi0xXT1hcmd1bWVudHNbbl07dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0KTtyZXR1cm4gZS5hZGRDbGFzc2VzLmFwcGx5KGUsW2ldLmNvbmNhdChyKSksaX0sZS5hZGRDbGFzc2VzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgcj1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKylyW24tMV09YXJndW1lbnRzW25dO3I9ci5maWx0ZXIoZnVuY3Rpb24oaSl7cmV0dXJuIGkhPW51bGx9KSx0LmNsYXNzTGlzdCE9bnVsbD9yLmZvckVhY2goZnVuY3Rpb24oaSl7dC5jbGFzc0xpc3QuYWRkKGkpfSk6dC5zZXRBdHRyaWJ1dGUoImNsYXNzIixyLmpvaW4oIiAiKSl9LGUuZ2V0RGltZW5zaW9ucz1mdW5jdGlvbih0KXtpZih0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCl0cnl7dmFyIHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXIud2lkdGgsaT1yLmhlaWdodDtyZXR1cm57d2lkdGg6bixoZWlnaHQ6aX19Y2F0Y2gobyl7fXJldHVybntoZWlnaHQ6MCx3aWR0aDowfX0sZX0oKTtkRi5IdG1sVXRpbHM9QkE7dmFyIHZPZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe249PT12b2lkIDAmJihuPSExKTt2YXIgaT10aGlzO3RoaXMuZWxlbWVudD10LHRoaXMuY2xhc3NOYW1lPXIsdGhpcy5hZGRUaXRsZT1uLHRoaXMuY3JlYXRlUnVsZXI9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24obyl7dmFyIGE9QkEuYXBwZW5kKGkuZWxlbWVudCwic3BhbiIsInRleHQtdG1wIixpLmNsYXNzTmFtZSk7YS50ZXh0Q29udGVudD1vO3ZhciBzPUJBLmdldERpbWVuc2lvbnMoYSk7cmV0dXJuIGkuZWxlbWVudC5yZW1vdmVDaGlsZChhKSxzfX0sdGhpcy5jcmVhdGVQZW49ZnVuY3Rpb24obyxhLHMpe3M9PW51bGwmJihzPWkuZWxlbWVudCk7dmFyIGw9QkEuYXBwZW5kKHMsImRpdiIsInRleHQtYmxvY2siLGkuY2xhc3NOYW1lKTtyZXR1cm4gbC5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLGwuc3R5bGUudHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwgLTFlbSkgIisoInRyYW5zbGF0ZSgiK2EudHJhbnNsYXRlWzBdKyJweCwgIithLnRyYW5zbGF0ZVsxXSsicHgpICIpKygicm90YXRlKCIrYS5yb3RhdGUrImRlZykiKSxsLnN0eWxlLnRyYW5zZm9ybU9yaWdpbj0iMCAxLjJlbSIsaS5hZGRUaXRsZSYmbC5zZXRBdHRyaWJ1dGUoInRpdGxlIixvKSxpLmNyZWF0ZUh0bWxMaW5lUGVuKGwpfX1yZXR1cm4gZS5wcm90b3R5cGUuc2V0QWRkVGl0bGU9ZnVuY3Rpb24odCl7dGhpcy5hZGRUaXRsZT10fSxlLnByb3RvdHlwZS5jcmVhdGVIdG1sTGluZVBlbj1mdW5jdGlvbih0KXtyZXR1cm57d3JpdGU6ZnVuY3Rpb24ocixuLGksbyxhKXt2YXIgcz1CQS5hcHBlbmQodCwiZGl2IiwidGV4dC1saW5lIik7cy50ZXh0Q29udGVudD1yLHMuc3R5bGUud2lkdGg9bisicHgiLHMuc3R5bGUudGV4dEFsaWduPWkscy5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHMuc3R5bGUud2hpdGVTcGFjZT0ibm93cmFwIixzLnN0eWxlLnRvcD1hKyJweCIscy5zdHlsZS5sZWZ0PW8rInB4In19fSxlfSgpO2RGLkh0bWxDb250ZXh0PXZPZX0pO3ZhciBjWHQ9SChtRj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobUYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB4T2U9RkEoKSxzWHQ9Zml0KCksWGc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLmFwcGVuZD1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj1bXSxpPTI7aTxhcmd1bWVudHMubGVuZ3RoO2krKyluW2ktMl09YXJndW1lbnRzW2ldO3ZhciBvPWUuY3JlYXRlLmFwcGx5KGUsW3JdLmNvbmNhdChuKSk7cmV0dXJuIHQuYXBwZW5kQ2hpbGQobyksb30sZS5jcmVhdGU9ZnVuY3Rpb24odCl7Zm9yKHZhciByPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXJbbi0xXT1hcmd1bWVudHNbbl07dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGUuU1ZHX05TLHQpO3JldHVybiBzWHQuSHRtbFV0aWxzLmFkZENsYXNzZXMuYXBwbHkoc1h0Lkh0bWxVdGlscyxbaV0uY29uY2F0KHIpKSxpfSxlLmdldERpbWVuc2lvbnM9ZnVuY3Rpb24odCl7aWYodC5nZXRCQm94KXRyeXt2YXIgcj10LmdldEJCb3goKSxuPXIud2lkdGgsaT1yLmhlaWdodDtyZXR1cm57d2lkdGg6bixoZWlnaHQ6aX19Y2F0Y2gobyl7fXJldHVybntoZWlnaHQ6MCx3aWR0aDowfX0sZX0oKTtYZy5TVkdfTlM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjttRi5TdmdVdGlscz1YZzt2YXIgbFh0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7bj09PXZvaWQgMCYmKG49ITEpO3ZhciBpPXRoaXM7dGhpcy5lbGVtZW50PXQsdGhpcy5jbGFzc05hbWU9cix0aGlzLmFkZFRpdGxlRWxlbWVudD1uLHRoaXMuY3JlYXRlUnVsZXI9ZnVuY3Rpb24oKXt2YXIgbz1pLmdldFRleHRFbGVtZW50cyhpLmVsZW1lbnQpLGE9by5wYXJlbnRFbGVtZW50LHM9by5jb250YWluZXJFbGVtZW50LGw9by50ZXh0RWxlbWVudDtyZXR1cm4gZnVuY3Rpb24oYyl7YS5hcHBlbmRDaGlsZChzKSxsLnRleHRDb250ZW50PWM7dmFyIHU9WGcuZ2V0RGltZW5zaW9ucyhsKTtyZXR1cm4gYS5yZW1vdmVDaGlsZChzKSx1fX0sdGhpcy5jcmVhdGVQZW49ZnVuY3Rpb24obyxhLHMpe3M9PW51bGwmJihzPWkuZWxlbWVudCk7dmFyIGw9WGcuYXBwZW5kKHMsImciLCJ0ZXh0LWNvbnRhaW5lciIsaS5jbGFzc05hbWUpO2kuYWRkVGl0bGVFbGVtZW50JiYoWGcuYXBwZW5kKGwsInRpdGxlIikudGV4dENvbnRlbnQ9byxsLnNldEF0dHJpYnV0ZSgidGl0bGUiLG8pKTt2YXIgYz1YZy5hcHBlbmQobCwiZyIsInRleHQtYXJlYSIpO3JldHVybiBjLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYS50cmFuc2xhdGVbMF0rIiwiK2EudHJhbnNsYXRlWzFdKyIpIisoInJvdGF0ZSgiK2Eucm90YXRlKyIpIikpLGkuY3JlYXRlU3ZnTGluZVBlbihjKX19cmV0dXJuIGUucHJvdG90eXBlLnNldEFkZFRpdGxlRWxlbWVudD1mdW5jdGlvbih0KXt0aGlzLmFkZFRpdGxlRWxlbWVudD10fSxlLnByb3RvdHlwZS5jcmVhdGVTdmdMaW5lUGVuPWZ1bmN0aW9uKHQpe3JldHVybnt3cml0ZTpmdW5jdGlvbihyLG4saSxvLGEpe28rPW4qeE9lLldyaXRlci5YT2Zmc2V0RmFjdG9yW2ldO3ZhciBzPVhnLmFwcGVuZCh0LCJ0ZXh0IiwidGV4dC1saW5lIik7cy50ZXh0Q29udGVudD1yLHMuc2V0QXR0cmlidXRlKCJ0ZXh0LWFuY2hvciIsZS5BbmNob3JNYXBbaV0pLHMuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitvKyIsIithKyIpIikscy5zZXRBdHRyaWJ1dGUoInkiLCItMC4yNWVtIil9fX0sZS5wcm90b3R5cGUuZ2V0VGV4dEVsZW1lbnRzPWZ1bmN0aW9uKHQpe2lmKHQudGFnTmFtZT09PSJ0ZXh0Iil7dmFyIHI9dC5wYXJlbnRFbGVtZW50O3JldHVybiByPT1udWxsJiYocj10LnBhcmVudE5vZGUpLHIucmVtb3ZlQ2hpbGQodCkse2NvbnRhaW5lckVsZW1lbnQ6dCxwYXJlbnRFbGVtZW50OnIsdGV4dEVsZW1lbnQ6dH19dmFyIG49dC5xdWVyeVNlbGVjdG9yKCJ0ZXh0Iik7aWYobiE9bnVsbCl7dmFyIHI9bi5wYXJlbnRFbGVtZW50O3JldHVybiByPT1udWxsJiYocj1uLnBhcmVudE5vZGUpLHIucmVtb3ZlQ2hpbGQobikse2NvbnRhaW5lckVsZW1lbnQ6bixwYXJlbnRFbGVtZW50OnIsdGV4dEVsZW1lbnQ6bn19dmFyIGk9WGcuY3JlYXRlKCJ0ZXh0Iix0aGlzLmNsYXNzTmFtZSk7cmV0dXJue2NvbnRhaW5lckVsZW1lbnQ6aSxwYXJlbnRFbGVtZW50OnQsdGV4dEVsZW1lbnQ6aX19LGV9KCk7bFh0LkFuY2hvck1hcD17Y2VudGVyOiJtaWRkbGUiLGxlZnQ6InN0YXJ0IixyaWdodDoiZW5kIn07bUYuU3ZnQ29udGV4dD1sWHR9KTt2YXIgdVh0PUgocGl0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShwaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBiT2U9RkEoKSx3T2U9IiM0NDQiLFNPZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe3I9PT12b2lkIDAmJihyPTEwKSxuPT09dm9pZCAwJiYobj17fSk7dmFyIGk9dGhpczt0aGlzLmN0eD10LHRoaXMubGluZUhlaWdodD1yLHRoaXMuc3R5bGU9bix0aGlzLmNyZWF0ZVJ1bGVyPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKG8pe2kuY3R4LmZvbnQ9aS5zdHlsZS5mb250O3ZhciBhPWkuY3R4Lm1lYXN1cmVUZXh0KG8pLndpZHRoO3JldHVybnt3aWR0aDphLGhlaWdodDppLmxpbmVIZWlnaHR9fX0sdGhpcy5jcmVhdGVQZW49ZnVuY3Rpb24obyxhLHMpe3JldHVybiBzPT1udWxsJiYocz1pLmN0eCkscy5zYXZlKCkscy50cmFuc2xhdGUoYS50cmFuc2xhdGVbMF0sYS50cmFuc2xhdGVbMV0pLHMucm90YXRlKGEucm90YXRlKk1hdGguUEkvMTgwKSxpLmNyZWF0ZUNhbnZhc1BlbihzKX0sdGhpcy5zdHlsZS5maWxsPT09dm9pZCAwJiYodGhpcy5zdHlsZS5maWxsPXdPZSl9cmV0dXJuIGUucHJvdG90eXBlLmNyZWF0ZUNhbnZhc1Blbj1mdW5jdGlvbih0KXt2YXIgcj10aGlzO3JldHVybntkZXN0cm95OmZ1bmN0aW9uKCl7dC5yZXN0b3JlKCl9LHdyaXRlOmZ1bmN0aW9uKG4saSxvLGEscyl7YSs9aSpiT2UuV3JpdGVyLlhPZmZzZXRGYWN0b3Jbb10sdC50ZXh0QWxpZ249byxyLnN0eWxlLmZvbnQhPW51bGwmJih0LmZvbnQ9ci5zdHlsZS5mb250KSxyLnN0eWxlLmZpbGwhPW51bGwmJih0LmZpbGxTdHlsZT1yLnN0eWxlLmZpbGwsdC5maWxsVGV4dChuLGEscykpLHIuc3R5bGUuc3Ryb2tlIT1udWxsJiYodC5zdHJva2VTdHlsZT1yLnN0eWxlLmZpbGwsdC5zdHJva2VUZXh0KG4sYSxzKSl9fX0sZX0oKTtwaXQuQ2FudmFzQ29udGV4dD1TT2V9KTt2YXIgbWl0PUgoZ0Y9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZGl0KGUpe2Zvcih2YXIgdCBpbiBlKWdGLmhhc093blByb3BlcnR5KHQpfHwoZ0ZbdF09ZVt0XSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGdGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtkaXQoY1h0KCkpO2RpdCh1WHQoKSk7ZGl0KGZpdCgpKX0pO3ZhciBfRj1IKGdpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2l0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgaFh0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt0LmNyZWF0ZVJ1bGVyIT1udWxsP3RoaXMucnVsZXI9dC5jcmVhdGVSdWxlcigpOnRoaXMucnVsZXI9dH1yZXR1cm4gZS5wcm90b3R5cGUubWVhc3VyZT1mdW5jdGlvbih0KXtyZXR1cm4gdD09PXZvaWQgMCYmKHQ9ZS5IRUlHSFRfVEVYVCksdGhpcy5ydWxlcih0KX0sZX0oKTtoWHQuSEVJR0hUX1RFWFQ9ImJkcHFsIjtnaXQuQWJzdHJhY3RNZWFzdXJlcj1oWHR9KTt2YXIgX2l0PUgoSEE9PnsidXNlIHN0cmljdCI7dmFyIE1PZT1IQSYmSEEuX19leHRlbmRzfHxmdW5jdGlvbigpe3ZhciBlPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbih0LHIpe3QuX19wcm90b19fPXJ9fHxmdW5jdGlvbih0LHIpe2Zvcih2YXIgbiBpbiByKXIuaGFzT3duUHJvcGVydHkobikmJih0W25dPXJbbl0pfTtyZXR1cm4gZnVuY3Rpb24odCxyKXtlKHQscik7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3RydWN0b3I9dH10LnByb3RvdHlwZT1yPT09bnVsbD9PYmplY3QuY3JlYXRlKHIpOihuLnByb3RvdHlwZT1yLnByb3RvdHlwZSxuZXcgbil9fSgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShIQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHlGPV9GKCksRU9lPWZ1bmN0aW9uKGUpe01PZSh0LGUpO2Z1bmN0aW9uIHQocixuKXtuPT09dm9pZCAwJiYobj0hMSk7dmFyIGk9ZS5jYWxsKHRoaXMscil8fHRoaXM7cmV0dXJuIGkudXNlR3VhcmRzPW4saX1yZXR1cm4gdC5wcm90b3R5cGUuX2FkZEd1YXJkcz1mdW5jdGlvbihyKXtyZXR1cm4geUYuQWJzdHJhY3RNZWFzdXJlci5IRUlHSFRfVEVYVCtyK3lGLkFic3RyYWN0TWVhc3VyZXIuSEVJR0hUX1RFWFR9LHQucHJvdG90eXBlLl9tZWFzdXJlTGluZT1mdW5jdGlvbihyLG4pe249PT12b2lkIDAmJihuPSExKTt2YXIgaT10aGlzLnVzZUd1YXJkc3x8bnx8L15bXHQgXSQvLnRlc3Qociksbz1pP3RoaXMuX2FkZEd1YXJkcyhyKTpyLGE9ZS5wcm90b3R5cGUubWVhc3VyZS5jYWxsKHRoaXMsbyk7cmV0dXJuIGEud2lkdGgtPWk/Mip0aGlzLmdldEd1YXJkV2lkdGgoKTowLGF9LHQucHJvdG90eXBlLm1lYXN1cmU9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztpZihyPT09dm9pZCAwJiYocj15Ri5BYnN0cmFjdE1lYXN1cmVyLkhFSUdIVF9URVhUKSxyLnRyaW0oKT09PSIiKXJldHVybnt3aWR0aDowLGhlaWdodDowfTt2YXIgaT1yLnRyaW0oKS5zcGxpdChgCmApLm1hcChmdW5jdGlvbihvKXtyZXR1cm4gbi5fbWVhc3VyZUxpbmUobyl9KTtyZXR1cm57aGVpZ2h0OmkucmVkdWNlKGZ1bmN0aW9uKG8sYSl7cmV0dXJuIG8rYS5oZWlnaHR9LDApLHdpZHRoOmkucmVkdWNlKGZ1bmN0aW9uKG8sYSl7cmV0dXJuIE1hdGgubWF4KG8sYS53aWR0aCl9LDApfX0sdC5wcm90b3R5cGUuZ2V0R3VhcmRXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmd1YXJkV2lkdGg9PW51bGwmJih0aGlzLmd1YXJkV2lkdGg9ZS5wcm90b3R5cGUubWVhc3VyZS5jYWxsKHRoaXMpLndpZHRoKSx0aGlzLmd1YXJkV2lkdGh9LHR9KHlGLkFic3RyYWN0TWVhc3VyZXIpO0hBLk1lYXN1cmVyPUVPZX0pO3ZhciB5aXQ9SChWQT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgVE9lPVZBJiZWQS5fX2V4dGVuZHN8fGZ1bmN0aW9uKCl7dmFyIGU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKHQscil7dC5fX3Byb3RvX189cn18fGZ1bmN0aW9uKHQscil7Zm9yKHZhciBuIGluIHIpci5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbbl09cltuXSl9O3JldHVybiBmdW5jdGlvbih0LHIpe2UodCxyKTtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fXQucHJvdG90eXBlPXI9PT1udWxsP09iamVjdC5jcmVhdGUocik6KG4ucHJvdG90eXBlPXIucHJvdG90eXBlLG5ldyBuKX19KCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFZBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgQ09lPV9pdCgpLEFPZT1mdW5jdGlvbihlKXtUT2UodCxlKTtmdW5jdGlvbiB0KCl7cmV0dXJuIGUhPT1udWxsJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gdC5wcm90b3R5cGUuX21lYXN1cmVDaGFyYWN0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIGUucHJvdG90eXBlLl9tZWFzdXJlTGluZS5jYWxsKHRoaXMscil9LHQucHJvdG90eXBlLl9tZWFzdXJlTGluZT1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9ci5zcGxpdCgiIikubWFwKGZ1bmN0aW9uKG8pe3JldHVybiBuLl9tZWFzdXJlQ2hhcmFjdGVyKG8pfSk7cmV0dXJue2hlaWdodDppLnJlZHVjZShmdW5jdGlvbihvLGEpe3JldHVybiBNYXRoLm1heChvLGEuaGVpZ2h0KX0sMCksd2lkdGg6aS5yZWR1Y2UoZnVuY3Rpb24obyxhKXtyZXR1cm4gbythLndpZHRofSwwKX19LHR9KENPZS5NZWFzdXJlcik7VkEuQ2hhcmFjdGVyTWVhc3VyZXI9QU9lfSk7dmFyIHZpdD1IKFVBPT57InVzZSBzdHJpY3QiO3ZhciBQT2U9VUEmJlVBLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxyKXt0Ll9fcHJvdG9fXz1yfXx8ZnVuY3Rpb24odCxyKXtmb3IodmFyIG4gaW4gcilyLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1yW25dKX07cmV0dXJuIGZ1bmN0aW9uKHQscil7ZSh0LHIpO2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPXR9dC5wcm90b3R5cGU9cj09PW51bGw/T2JqZWN0LmNyZWF0ZShyKToobi5wcm90b3R5cGU9ci5wcm90b3R5cGUsbmV3IG4pfX0oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoVUEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBJT2U9cFMoKSxMT2U9eWl0KCksa09lPWZ1bmN0aW9uKGUpe1BPZSh0LGUpO2Z1bmN0aW9uIHQocixuKXt2YXIgaT1lLmNhbGwodGhpcyxyLG4pfHx0aGlzO3JldHVybiBpLmNhY2hlPW5ldyBJT2UuQ2FjaGUoZnVuY3Rpb24obyl7cmV0dXJuIGkuX21lYXN1cmVDaGFyYWN0ZXJOb3RGcm9tQ2FjaGUobyl9KSxpfXJldHVybiB0LnByb3RvdHlwZS5fbWVhc3VyZUNoYXJhY3Rlck5vdEZyb21DYWNoZT1mdW5jdGlvbihyKXtyZXR1cm4gZS5wcm90b3R5cGUuX21lYXN1cmVDaGFyYWN0ZXIuY2FsbCh0aGlzLHIpfSx0LnByb3RvdHlwZS5fbWVhc3VyZUNoYXJhY3Rlcj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5jYWNoZS5nZXQocil9LHQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5jYWNoZS5jbGVhcigpfSx0fShMT2UuQ2hhcmFjdGVyTWVhc3VyZXIpO1VBLkNhY2hlQ2hhcmFjdGVyTWVhc3VyZXI9a09lfSk7dmFyIGZYdD1IKHFBPT57InVzZSBzdHJpY3QiO3ZhciBST2U9cUEmJnFBLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxyKXt0Ll9fcHJvdG9fXz1yfXx8ZnVuY3Rpb24odCxyKXtmb3IodmFyIG4gaW4gcilyLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1yW25dKX07cmV0dXJuIGZ1bmN0aW9uKHQscil7ZSh0LHIpO2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPXR9dC5wcm90b3R5cGU9cj09PW51bGw/T2JqZWN0LmNyZWF0ZShyKToobi5wcm90b3R5cGU9ci5wcm90b3R5cGUsbmV3IG4pfX0oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkocUEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBOT2U9cFMoKSxET2U9X0YoKSxPT2U9dml0KCksek9lPWZ1bmN0aW9uKGUpe1JPZSh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMscil8fHRoaXM7cmV0dXJuIG4uZGltQ2FjaGU9bmV3IE5PZS5DYWNoZShmdW5jdGlvbihpKXtyZXR1cm4gbi5fbWVhc3VyZU5vdEZyb21DYWNoZShpKX0pLG59cmV0dXJuIHQucHJvdG90eXBlLl9tZWFzdXJlTm90RnJvbUNhY2hlPWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5tZWFzdXJlLmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUubWVhc3VyZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09PXZvaWQgMCYmKHI9RE9lLkFic3RyYWN0TWVhc3VyZXIuSEVJR0hUX1RFWFQpLHRoaXMuZGltQ2FjaGUuZ2V0KHIpfSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuZGltQ2FjaGUuY2xlYXIoKSxlLnByb3RvdHlwZS5yZXNldC5jYWxsKHRoaXMpfSx0fShPT2UuQ2FjaGVDaGFyYWN0ZXJNZWFzdXJlcik7cUEuQ2FjaGVNZWFzdXJlcj16T2V9KTt2YXIgeGl0PUgodkY9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gR0EoZSl7Zm9yKHZhciB0IGluIGUpdkYuaGFzT3duUHJvcGVydHkodCl8fCh2Rlt0XT1lW3RdKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodkYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO0dBKF9GKCkpO0dBKHZpdCgpKTtHQShmWHQoKSk7R0EoeWl0KCkpO0dBKF9pdCgpKX0pO3ZhciB3aXQ9SChiaXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGJpdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFdBPXBTKCksRk9lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMubWF4TGluZXMoMS8wKSx0aGlzLnRleHRUcmltbWluZygiZWxsaXBzaXMiKSx0aGlzLmFsbG93QnJlYWtpbmdXb3JkcyghMSksdGhpcy5fdG9rZW5pemVyPW5ldyBXQS5Ub2tlbml6ZXIsdGhpcy5fYnJlYWtpbmdDaGFyYWN0ZXI9Ii0ifXJldHVybiBlLnByb3RvdHlwZS5tYXhMaW5lcz1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9tYXhMaW5lczoodGhpcy5fbWF4TGluZXM9dCx0aGlzKX0sZS5wcm90b3R5cGUudGV4dFRyaW1taW5nPWZ1bmN0aW9uKHQpe2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMuX3RleHRUcmltbWluZztpZih0IT09ImVsbGlwc2lzIiYmdCE9PSJub25lIil0aHJvdyBuZXcgRXJyb3IodCsiIC0gdW5zdXBwb3J0ZWQgdGV4dCB0cmltbWluZyBvcHRpb24uIik7cmV0dXJuIHRoaXMuX3RleHRUcmltbWluZz10LHRoaXN9LGUucHJvdG90eXBlLmFsbG93QnJlYWtpbmdXb3Jkcz1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9hbGxvd0JyZWFraW5nV29yZHM6KHRoaXMuX2FsbG93QnJlYWtpbmdXb3Jkcz10LHRoaXMpfSxlLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKHQscixuLGkpe3ZhciBvPXRoaXM7aT09PXZvaWQgMCYmKGk9MS8wKTt2YXIgYT17bm9Ccm9rZVdvcmRzOjAsbm9MaW5lczowLG9yaWdpbmFsVGV4dDp0LHRydW5jYXRlZFRleHQ6IiIsd3JhcHBlZFRleHQ6IiJ9LHM9e2F2YWlsYWJsZUxpbmVzOk1hdGgubWluKE1hdGguZmxvb3IoaS9yLm1lYXN1cmUoKS5oZWlnaHQpLHRoaXMuX21heExpbmVzKSxhdmFpbGFibGVXaWR0aDpuLGNhbkZpdFRleHQ6ITAsY3VycmVudExpbmU6IiIsd3JhcHBpbmc6YX0sbD10LnNwbGl0KGAKYCk7cmV0dXJuIGwucmVkdWNlKGZ1bmN0aW9uKGMsdSxoKXtyZXR1cm4gby5icmVha0xpbmVUb0ZpdFdpZHRoKGMsdSxoIT09bC5sZW5ndGgtMSxyKX0scykud3JhcHBpbmd9LGUucHJvdG90eXBlLmJyZWFrTGluZVRvRml0V2lkdGg9ZnVuY3Rpb24odCxyLG4saSl7dmFyIG89dGhpczshdC5jYW5GaXRUZXh0JiZ0LndyYXBwaW5nLnRydW5jYXRlZFRleHQhPT0iIiYmKHQud3JhcHBpbmcudHJ1bmNhdGVkVGV4dCs9YApgKTt2YXIgYT10aGlzLl90b2tlbml6ZXIudG9rZW5pemUocik7dD1hLnJlZHVjZShmdW5jdGlvbihsLGMpe3JldHVybiBvLndyYXBOZXh0VG9rZW4oYyxsLGkpfSx0KTt2YXIgcz1XQS5TdHJpbmdNZXRob2RzLnRyaW1FbmQodC5jdXJyZW50TGluZSk7cmV0dXJuIHQud3JhcHBpbmcubm9MaW5lcys9KyhzIT09IiIpLHQud3JhcHBpbmcubm9MaW5lcz09PXQuYXZhaWxhYmxlTGluZXMmJnRoaXMuX3RleHRUcmltbWluZyE9PSJub25lIiYmbj90LmNhbkZpdFRleHQ9ITE6dC53cmFwcGluZy53cmFwcGVkVGV4dCs9cyx0LmN1cnJlbnRMaW5lPWAKYCx0fSxlLnByb3RvdHlwZS5jYW5GaXRUb2tlbj1mdW5jdGlvbih0LHIsbil7dmFyIGk9dGhpcyxvPXQuc3BsaXQoIiIpLm1hcChmdW5jdGlvbihhLHMpe3JldHVybiBzIT09dC5sZW5ndGgtMT9hK2kuX2JyZWFraW5nQ2hhcmFjdGVyOmF9KTtyZXR1cm4gbi5tZWFzdXJlKHQpLndpZHRoPD1yfHxvLmV2ZXJ5KGZ1bmN0aW9uKGEpe3JldHVybiBuLm1lYXN1cmUoYSkud2lkdGg8PXJ9KX0sZS5wcm90b3R5cGUuYWRkRWxsaXBzaXM9ZnVuY3Rpb24odCxyLG4pe2lmKHRoaXMuX3RleHRUcmltbWluZz09PSJub25lIilyZXR1cm57cmVtYWluaW5nVG9rZW46IiIsd3JhcHBlZFRva2VuOnR9O3ZhciBpPXQuc3Vic3RyaW5nKDApLnRyaW0oKSxvPW4ubWVhc3VyZShpKS53aWR0aCxhPW4ubWVhc3VyZSgiLi4uIikud2lkdGgscz10Lmxlbmd0aD4wJiZ0WzBdPT09YApgP2AKYDoiIjtpZihyPD1hKXt2YXIgbD1hLzMsYz1NYXRoLmZsb29yKHIvbCk7cmV0dXJue3JlbWFpbmluZ1Rva2VuOnQsd3JhcHBlZFRva2VuOnMrIi4uLiIuc3Vic3RyKDAsYyl9fWZvcig7bythPnI7KWk9V0EuU3RyaW5nTWV0aG9kcy50cmltRW5kKGkuc3Vic3RyKDAsaS5sZW5ndGgtMSkpLG89bi5tZWFzdXJlKGkpLndpZHRoO3JldHVybntyZW1haW5pbmdUb2tlbjpXQS5TdHJpbmdNZXRob2RzLnRyaW1FbmQodC5zdWJzdHJpbmcoaS5sZW5ndGgpLCItIikudHJpbSgpLHdyYXBwZWRUb2tlbjpzK2krIi4uLiJ9fSxlLnByb3RvdHlwZS53cmFwTmV4dFRva2VuPWZ1bmN0aW9uKHQscixuKXtpZighci5jYW5GaXRUZXh0fHxyLmF2YWlsYWJsZUxpbmVzPT09ci53cmFwcGluZy5ub0xpbmVzfHwhdGhpcy5jYW5GaXRUb2tlbih0LHIuYXZhaWxhYmxlV2lkdGgsbikpcmV0dXJuIHRoaXMuZmluaXNoV3JhcHBpbmcodCxyLG4pO2Zvcih2YXIgaT10O2k7KXt2YXIgbz10aGlzLmJyZWFrVG9rZW5Ub0ZpdEluV2lkdGgoaSxyLmN1cnJlbnRMaW5lLHIuYXZhaWxhYmxlV2lkdGgsbik7aWYoci5jdXJyZW50TGluZT1vLmxpbmUsaT1vLnJlbWFpbmluZ1Rva2VuLGkhPW51bGwpaWYoci53cmFwcGluZy5ub0Jyb2tlV29yZHMrPStvLmJyZWFrV29yZCwrK3Iud3JhcHBpbmcubm9MaW5lcyxyLmF2YWlsYWJsZUxpbmVzPT09ci53cmFwcGluZy5ub0xpbmVzKXt2YXIgYT10aGlzLmFkZEVsbGlwc2lzKHIuY3VycmVudExpbmUsci5hdmFpbGFibGVXaWR0aCxuKTtyZXR1cm4gci53cmFwcGluZy53cmFwcGVkVGV4dCs9YS53cmFwcGVkVG9rZW4sci53cmFwcGluZy50cnVuY2F0ZWRUZXh0Kz1hLnJlbWFpbmluZ1Rva2VuK2ksci5jdXJyZW50TGluZT1gCmAscn1lbHNlIHIud3JhcHBpbmcud3JhcHBlZFRleHQrPVdBLlN0cmluZ01ldGhvZHMudHJpbUVuZChyLmN1cnJlbnRMaW5lKSxyLmN1cnJlbnRMaW5lPWAKYH1yZXR1cm4gcn0sZS5wcm90b3R5cGUuZmluaXNoV3JhcHBpbmc9ZnVuY3Rpb24odCxyLG4pe2lmKHIuY2FuRml0VGV4dCYmci5hdmFpbGFibGVMaW5lcyE9PXIud3JhcHBpbmcubm9MaW5lcyYmdGhpcy5fdGV4dFRyaW1taW5nIT09Im5vbmUiKXt2YXIgaT10aGlzLmFkZEVsbGlwc2lzKHIuY3VycmVudExpbmUrdCxyLmF2YWlsYWJsZVdpZHRoLG4pO3Iud3JhcHBpbmcud3JhcHBlZFRleHQrPWkud3JhcHBlZFRva2VuLHIud3JhcHBpbmcudHJ1bmNhdGVkVGV4dCs9aS5yZW1haW5pbmdUb2tlbixyLndyYXBwaW5nLm5vQnJva2VXb3Jkcys9KyhpLnJlbWFpbmluZ1Rva2VuLmxlbmd0aDx0Lmxlbmd0aCksci53cmFwcGluZy5ub0xpbmVzKz0rKGkud3JhcHBlZFRva2VuLmxlbmd0aD4wKSxyLmN1cnJlbnRMaW5lPSIifWVsc2Ugci53cmFwcGluZy50cnVuY2F0ZWRUZXh0Kz10O3JldHVybiByLmNhbkZpdFRleHQ9ITEscn0sZS5wcm90b3R5cGUuYnJlYWtUb2tlblRvRml0SW5XaWR0aD1mdW5jdGlvbih0LHIsbixpLG8pe2lmKG89PT12b2lkIDAmJihvPXRoaXMuX2JyZWFraW5nQ2hhcmFjdGVyKSxpLm1lYXN1cmUocit0KS53aWR0aDw9bilyZXR1cm57YnJlYWtXb3JkOiExLGxpbmU6cit0LHJlbWFpbmluZ1Rva2VuOm51bGx9O2lmKHQudHJpbSgpPT09IiIpcmV0dXJue2JyZWFrV29yZDohMSxsaW5lOnIscmVtYWluaW5nVG9rZW46IiJ9O2lmKCF0aGlzLl9hbGxvd0JyZWFraW5nV29yZHMmJnIudHJpbSgpIT09IiIpcmV0dXJue2JyZWFrV29yZDohMSxsaW5lOnIscmVtYWluaW5nVG9rZW46dH07Zm9yKHZhciBhPTA7YTx0Lmxlbmd0aCYmaS5tZWFzdXJlKHIrdC5zdWJzdHJpbmcoMCxhKzEpK28pLndpZHRoPD1uOykrK2E7dmFyIHM9IiI7cmV0dXJuIGE+MCYmKHM9bykse2JyZWFrV29yZDphPjAsbGluZTpyK3Quc3Vic3RyaW5nKDAsYSkrcyxyZW1haW5pbmdUb2tlbjp0LnN1YnN0cmluZyhhKX19LGV9KCk7Yml0LldyYXBwZXI9Rk9lfSk7dmFyIGRYdD1IKFlBPT57InVzZSBzdHJpY3QiO3ZhciBCT2U9WUEmJllBLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxyKXt0Ll9fcHJvdG9fXz1yfXx8ZnVuY3Rpb24odCxyKXtmb3IodmFyIG4gaW4gcilyLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1yW25dKX07cmV0dXJuIGZ1bmN0aW9uKHQscil7ZSh0LHIpO2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPXR9dC5wcm90b3R5cGU9cj09PW51bGw/T2JqZWN0LmNyZWF0ZShyKToobi5wcm90b3R5cGU9ci5wcm90b3R5cGUsbmV3IG4pfX0oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWUEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBIT2U9d2l0KCkscFh0PWZ1bmN0aW9uKGUpe0JPZSh0LGUpO2Z1bmN0aW9uIHQoKXtyZXR1cm4gZSE9PW51bGwmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiB0LnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKHIsbixpLG8pe3ZhciBhPXRoaXM7bz09PXZvaWQgMCYmKG89MS8wKTt2YXIgcz1yLnNwbGl0KGAKYCk7aWYocy5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlNpbmdsZUxpbmVXcmFwcGVyIGlzIGRlc2lnbmVkIHRvIHdvcmsgb25seSBvbiBzaW5nbGUgbGluZSIpO3ZhciBsPWZ1bmN0aW9uKGcpe3JldHVybiBlLnByb3RvdHlwZS53cmFwLmNhbGwoYSxyLG4sZyxvKX0sYz1sKGkpO2lmKGMubm9MaW5lczwyKXJldHVybiBjO2Zvcih2YXIgdT0wLGg9aSxmPTA7Zjx0Lk5PX1dSQVBfSVRFUkFUSU9OUyYmaD51OysrZil7dmFyIHA9KGgrdSkvMixkPWwocCk7dGhpcy5hcmVTYW1lUmVzdWx0cyhjLGQpPyhoPXAsYz1kKTp1PXB9cmV0dXJuIGN9LHQucHJvdG90eXBlLmFyZVNhbWVSZXN1bHRzPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHIubm9MaW5lcz09PW4ubm9MaW5lcyYmci50cnVuY2F0ZWRUZXh0PT09bi50cnVuY2F0ZWRUZXh0fSx0fShIT2UuV3JhcHBlcik7cFh0Lk5PX1dSQVBfSVRFUkFUSU9OUz01O1lBLlNpbmdsZUxpbmVXcmFwcGVyPXBYdH0pO3ZhciBTaXQ9SCh4Rj0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtWHQoZSl7Zm9yKHZhciB0IGluIGUpeEYuaGFzT3duUHJvcGVydHkodCl8fCh4Rlt0XT1lW3RdKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoeEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO21YdChkWHQoKSk7bVh0KHdpdCgpKX0pO3ZhciBnWHQ9SChFaXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEVpdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIE1pdD1taXQoKSxWT2U9eGl0KCksVU9lPVNpdCgpLHFPZT1GQSgpLEdPZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dGhpcy5jb250ZXh0PXQsdGhpcy5tZWFzdXJlcj1uZXcgVk9lLkNhY2hlTWVhc3VyZXIodGhpcy5jb250ZXh0KSx0aGlzLndyYXBwZXI9bmV3IFVPZS5XcmFwcGVyLHRoaXMud3JpdGVyPW5ldyBxT2UuV3JpdGVyKHRoaXMubWVhc3VyZXIsdGhpcy5jb250ZXh0LHRoaXMud3JhcHBlcil9cmV0dXJuIGUuc3ZnPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4gbmV3IGUobmV3IE1pdC5TdmdDb250ZXh0KHQscixuKSl9LGUuY2FudmFzPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4gbmV3IGUobmV3IE1pdC5DYW52YXNDb250ZXh0KHQscixuKSl9LGUuaHRtbD1mdW5jdGlvbih0LHIsbil7cmV0dXJuIG5ldyBlKG5ldyBNaXQuSHRtbENvbnRleHQodCxyLG4pKX0sZS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24odCxyLG4saSxvKXt0aGlzLndyaXRlci53cml0ZSh0LHIsbixpLG8pfSxlLnByb3RvdHlwZS5jbGVhck1lYXN1cmVyQ2FjaGU9ZnVuY3Rpb24oKXt0aGlzLm1lYXN1cmVyLnJlc2V0KCl9LGV9KCk7RWl0LlR5cGVzZXR0ZXI9R09lfSk7dmFyIHlsPUgoYkY9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZFMoZSl7Zm9yKHZhciB0IGluIGUpYkYuaGFzT3duUHJvcGVydHkodCl8fChiRlt0XT1lW3RdKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoYkYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2RTKG1pdCgpKTtkUyh4aXQoKSk7ZFMoZ1h0KCkpO2RTKHBTKCkpO2RTKFNpdCgpKTtkUyhGQSgpKX0pO3ZhciBfWHQ9SChtUz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobVMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBXT2U9KEVyKCksVXQoTXIpKSxZT2U9d2luZG93LkFycmF5O2Z1bmN0aW9uIGpPZShlLHQpe2lmKGUubGVuZ3RoIT09dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJhdHRlbXB0ZWQgdG8gYWRkIGFycmF5cyBvZiB1bmVxdWFsIGxlbmd0aCIpO3JldHVybiBlLm1hcChmdW5jdGlvbihyLG4pe3JldHVybiBlW25dK3Rbbl19KX1tUy5hZGQ9ak9lO2Z1bmN0aW9uIFhPZShlKXt2YXIgdD1XT2Uuc2V0KCkscj1bXTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3QuaGFzKFN0cmluZyhuKSl8fCh0LmFkZChTdHJpbmcobikpLHIucHVzaChuKSl9KSxyfW1TLnVuaXE9WE9lO2Z1bmN0aW9uICRPZShlKXtyZXR1cm4gWU9lLnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sZSl9bVMuZmxhdHRlbj0kT2U7ZnVuY3Rpb24gS09lKGUsdCl7Zm9yKHZhciByPVtdLG49MDtuPHQ7bisrKXJbbl09dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZShuKTplO3JldHVybiByfW1TLmNyZWF0ZUZpbGxlZEFycmF5PUtPZX0pO3ZhciB4WHQ9SChqQT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoakEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB2WHQ9KEVyKCksVXQoTXIpKSxaT2U9d2luZG93Lk1hdGg7ZnVuY3Rpb24gSk9lKGUsdCl7dmFyIHI9eVh0KGUpKy4wNSxuPXlYdCh0KSsuMDU7cmV0dXJuIHI+bj9yL246bi9yfWpBLmNvbnRyYXN0PUpPZTtmdW5jdGlvbiBRT2UoZSx0KXt2YXIgcj12WHQuY29sb3IoZSkuYnJpZ2h0ZXIodCk7cmV0dXJuIHIucmdiKCkudG9TdHJpbmcoKX1qQS5saWdodGVuQ29sb3I9UU9lO2Z1bmN0aW9uIHQ3ZShlLHQpe2UuY2xhc3NlZCh0LCEwKTt2YXIgcj1lLnN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIik7aWYocj09PSJ0cmFuc3BhcmVudCIpcmV0dXJuIG51bGw7dmFyIG49L1woKC4rKVwpLy5leGVjKHIpO2lmKCFuKXJldHVybiBudWxsO3ZhciBpPW5bMV0uc3BsaXQoIiwiKS5tYXAoZnVuY3Rpb24oYSl7dmFyIHM9K2EsbD1zLnRvU3RyaW5nKDE2KTtyZXR1cm4gczwxNj8iMCIrbDpsfSk7aWYoaS5sZW5ndGg9PT00JiZpWzNdPT09IjAwIilyZXR1cm4gbnVsbDt2YXIgbz0iIyIraS5qb2luKCIiKTtyZXR1cm4gZS5jbGFzc2VkKHQsITEpLG99akEuY29sb3JUZXN0PXQ3ZTtmdW5jdGlvbiB5WHQoZSl7dmFyIHQ9dlh0LnJnYihlKSxyPWZ1bmN0aW9uKGEpe3JldHVybiBhPWEvMjU1LGE8PS4wMzkyOD9hLzEyLjkyOlpPZS5wb3coKGErLjA1NSkvMS4wNTUsMi40KX0sbj1yKHQuciksaT1yKHQuZyksbz1yKHQuYik7cmV0dXJuIC4yMTI2Km4rLjcxNTIqaSsuMDcyMipvfX0pO3ZhciBDaXQ9SChhbz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYW8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBUaXQ9KEVyKCksVXQoTXIpKSxnYT13aW5kb3cuTWF0aDtmdW5jdGlvbiBlN2UoZSx0KXtmb3IodmFyIHI9dDtyIT1udWxsJiZyIT09ZTspcj1yLnBhcmVudE5vZGU7cmV0dXJuIHI9PT1lfWFvLmNvbnRhaW5zPWU3ZTtmdW5jdGlvbiB3WHQoZSl7dmFyIHQ7dHJ5e3Q9ZS5ub2RlKCkuZ2V0QkJveCgpfWNhdGNoKHIpe3Q9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH19cmV0dXJuIHR9YW8uZWxlbWVudEJCb3g9d1h0O2Z1bmN0aW9uIHI3ZShlKXtpZihlIGluc3RhbmNlb2YgU1ZHRWxlbWVudClyZXR1cm4gd1h0KFRpdC5zZWxlY3QoZSkpO2lmKGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCl7dmFyIHQ9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57eDp0LmxlZnQseTp0LnRvcCx3aWR0aDp0LndpZHRoLGhlaWdodDp0LmhlaWdodH19ZWxzZSByZXR1cm57eDowLHk6MCx3aWR0aDowLGhlaWdodDowfX1hby5lbnRpdHlCb3VuZHM9cjdlO2FvLlNDUkVFTl9SRUZSRVNIX1JBVEVfTUlMTElTRUNPTkRTPTFlMy82MDtmdW5jdGlvbiBuN2UoZSl7d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSE9bnVsbD93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpOnNldFRpbWVvdXQoZSxhby5TQ1JFRU5fUkVGUkVTSF9SQVRFX01JTExJU0VDT05EUyl9YW8ucmVxdWVzdEFuaW1hdGlvbkZyYW1lUG9seWZpbGw9bjdlO2Z1bmN0aW9uIGk3ZShlKXt2YXIgdD1lIGluc3RhbmNlb2YgVGl0LnNlbGVjdGlvbj9lLm5vZGUoKTplLHI9d2luZG93LmdldENvbXB1dGVkU3R5bGUodCk7cmV0dXJuIFJmKHIsIndpZHRoIikrUmYociwicGFkZGluZy1sZWZ0IikrUmYociwicGFkZGluZy1yaWdodCIpK1JmKHIsImJvcmRlci1sZWZ0LXdpZHRoIikrUmYociwiYm9yZGVyLXJpZ2h0LXdpZHRoIil9YW8uZWxlbWVudFdpZHRoPWk3ZTtmdW5jdGlvbiBvN2UoZSl7dmFyIHQ9ZSBpbnN0YW5jZW9mIFRpdC5zZWxlY3Rpb24/ZS5ub2RlKCk6ZSxyPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpO3JldHVybiBSZihyLCJoZWlnaHQiKStSZihyLCJwYWRkaW5nLXRvcCIpK1JmKHIsInBhZGRpbmctYm90dG9tIikrUmYociwiYm9yZGVyLXRvcC13aWR0aCIpK1JmKHIsImJvcmRlci1ib3R0b20td2lkdGgiKX1hby5lbGVtZW50SGVpZ2h0PW83ZTt2YXIgTGM9IlxccyIsWEE9Iig/OlstK10/WzAtOV0qXFwuP1swLTldKykiLFNYdD0iKD86KD86IitMYysiKyw/IitMYysiKil8KD86LCIrTGMrIiopKSIsYTdlPW5ldyBSZWdFeHAoInRyYW5zbGF0ZSIrTGMrIipcXCgiK0xjKyIqKCIrWEErIikoPzoiK1NYdCsiKCIrWEErIikpPyIrTGMrIipcXCkiKSxzN2U9bmV3IFJlZ0V4cCgicm90YXRlIitMYysiKlxcKCIrTGMrIiooIitYQSsiKSIrTGMrIipcXCkiKSxsN2U9bmV3IFJlZ0V4cCgic2NhbGUiK0xjKyIqXFwoIitMYysiKigiK1hBKyIpKD86IitTWHQrIigiK1hBKyIpKT8iK0xjKyIqXFwpIik7ZnVuY3Rpb24gYzdlKGUpe3ZhciB0PWE3ZS5leGVjKGUuYXR0cigidHJhbnNmb3JtIikpO2lmKHQhPW51bGwpe3ZhciByPXRbMV0sbj10WzJdLGk9bj09PXZvaWQgMD8wOm47cmV0dXJuWytyLCtpXX1lbHNlIHJldHVyblswLDBdfWFvLmdldFRyYW5zbGF0ZVZhbHVlcz1jN2U7ZnVuY3Rpb24gdTdlKGUpe3ZhciB0PXM3ZS5leGVjKGUuYXR0cigidHJhbnNmb3JtIikpO2lmKHQhPW51bGwpe3ZhciByPXRbMV07cmV0dXJuK3J9ZWxzZSByZXR1cm4gMH1hby5nZXRSb3RhdGU9dTdlO2Z1bmN0aW9uIGg3ZShlKXt2YXIgdD1sN2UuZXhlYyhlLmF0dHIoInRyYW5zZm9ybSIpKTtpZih0IT1udWxsKXt2YXIgcj10WzFdLG49dFsyXTtyZXR1cm5bK3Isbj09bnVsbD8rcjorbl19ZWxzZSByZXR1cm5bMCwwXX1hby5nZXRTY2FsZVZhbHVlcz1oN2U7ZnVuY3Rpb24gZjdlKGUsdCl7cmV0dXJuIShnYS5mbG9vcihlLnJpZ2h0KTw9Z2EuY2VpbCh0LmxlZnQpfHxnYS5jZWlsKGUubGVmdCk+PWdhLmZsb29yKHQucmlnaHQpfHxnYS5mbG9vcihlLmJvdHRvbSk8PWdhLmNlaWwodC50b3ApfHxnYS5jZWlsKGUudG9wKT49Z2EuZmxvb3IodC5ib3R0b20pKX1hby5jbGllbnRSZWN0c092ZXJsYXA9ZjdlO2Z1bmN0aW9uIHA3ZShlLHQpe3JldHVybntsZWZ0OmUubGVmdC10LHRvcDplLnRvcC10LHJpZ2h0OmUucmlnaHQrdCxib3R0b206ZS5ib3R0b20rdCx3aWR0aDplLndpZHRoK3QqMixoZWlnaHQ6ZS5oZWlnaHQrdCoyfX1hby5leHBhbmRSZWN0PXA3ZTtmdW5jdGlvbiBkN2UoZSx0KXtyZXR1cm4gZ2EuZmxvb3IodC5sZWZ0KTw9Z2EuY2VpbChlLmxlZnQpJiZnYS5mbG9vcih0LnRvcCk8PWdhLmNlaWwoZS50b3ApJiZnYS5mbG9vcihlLnJpZ2h0KTw9Z2EuY2VpbCh0LnJpZ2h0KSYmZ2EuZmxvb3IoZS5ib3R0b20pPD1nYS5jZWlsKHQuYm90dG9tKX1hby5jbGllbnRSZWN0SW5zaWRlPWQ3ZTtmdW5jdGlvbiBtN2UoZSx0LHIsbil7bj09PXZvaWQgMCYmKG49LjUpO3ZhciBpPWJYdChlKSxvPWJYdCh0KTtyZXR1cm4gci54K3Iud2lkdGg+PWkubWluLW4mJnIueDw9aS5tYXgrbiYmci55K3IuaGVpZ2h0Pj1vLm1pbi1uJiZyLnk8PW8ubWF4K259YW8uaW50ZXJzZWN0c0JCb3g9bTdlO2Z1bmN0aW9uIGJYdChlKXtpZih0eXBlb2YgZT09Im51bWJlciIpe3ZhciB0PWU7cmV0dXJue21pbjp0LG1heDp0fX12YXIgcj1lO2lmKHIgaW5zdGFuY2VvZiBPYmplY3QmJiJtaW4iaW4gciYmIm1heCJpbiByKXJldHVybiByO3Rocm93IG5ldyBFcnJvcigiaW5wdXQgJyIrZSsiJyBjYW4ndCBiZSBwYXJzZWQgYXMgYW4gUmFuZ2UiKX1mdW5jdGlvbiBSZihlLHQpe3ZhciByPWUuZ2V0UHJvcGVydHlWYWx1ZSh0KSxuPXBhcnNlRmxvYXQocik7cmV0dXJuIG58fDB9ZnVuY3Rpb24gZzdlKGUpe2Zvcih2YXIgdD1bXTtlJiZlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7KXQucHVzaChlKSxlPWUucGFyZW50RWxlbWVudDtyZXR1cm4gdH1hby5nZXRIdG1sRWxlbWVudEFuY2VzdG9ycz1nN2U7ZnVuY3Rpb24gXzdlKGUpe3ZhciB0PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCkscj10LmdldFByb3BlcnR5VmFsdWUoIi13ZWJraXQtdHJhbnNmb3JtIil8fHQuZ2V0UHJvcGVydHlWYWx1ZSgiLW1vei10cmFuc2Zvcm0iKXx8dC5nZXRQcm9wZXJ0eVZhbHVlKCItbXMtdHJhbnNmb3JtIil8fHQuZ2V0UHJvcGVydHlWYWx1ZSgiLW8tdHJhbnNmb3JtIil8fHQuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIik7cmV0dXJuIHg3ZShyKX1hby5nZXRFbGVtZW50VHJhbnNmb3JtPV83ZTt2YXIgeTdlPS9ebWF0cml4XCgoW14pXSspXCkkLyx2N2U9L1ssIF0rLztmdW5jdGlvbiB4N2UoZSl7aWYoZT09bnVsbHx8ZT09PSJub25lIilyZXR1cm4gbnVsbDt2YXIgdD1lLm1hdGNoKHk3ZSk7aWYodD09bnVsbHx8dC5sZW5ndGg8MilyZXR1cm4gbnVsbDt2YXIgcj10WzFdLnNwbGl0KHY3ZSkubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBwYXJzZUZsb2F0KG4pfSk7cmV0dXJuIHIubGVuZ3RoIT02P251bGw6cn19KTt2YXIgQWl0PUgoc289PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHNvLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgU0Y9KEVyKCksVXQoTXIpKSxNWHQ9Q2l0KCksZ2Q9d2luZG93Lk1hdGgsYjdlPVsxLDAsMCwxLDAsMF07ZnVuY3Rpb24gdzdlKGUsdCxyKXtyZXR1cm4gZ2QubWluKHQscik8PWUmJmU8PWdkLm1heCh0LHIpfXNvLmluUmFuZ2U9dzdlO2Z1bmN0aW9uIFM3ZShlLHQscil7cmV0dXJuIGdkLm1pbihnZC5tYXgodCxlKSxyKX1zby5jbGFtcD1TN2U7ZnVuY3Rpb24gTTdlKGUsdCxyKXt2YXIgbj10eXBlb2YgdD09ImZ1bmN0aW9uIj90Om51bGwsaT1uPT1udWxsP3Q6cixvPW49PW51bGw/U0YubWF4KGUpOlNGLm1heChlLG4pO3JldHVybiBvIT09dm9pZCAwP286aX1zby5tYXg9TTdlO2Z1bmN0aW9uIEU3ZShlLHQscil7dmFyIG49dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpudWxsLGk9bj09bnVsbD90OnIsbz1uPT1udWxsP1NGLm1pbihlKTpTRi5taW4oZSxuKTtyZXR1cm4gbyE9PXZvaWQgMD9vOml9c28ubWluPUU3ZTtmdW5jdGlvbiBUN2UoZSl7cmV0dXJuIGUhPT1lfXNvLmlzTmFOPVQ3ZTtmdW5jdGlvbiBDN2UoZSl7cmV0dXJuIHR5cGVvZiBlPT0ibnVtYmVyIiYmZS1lPDF9c28uaXNWYWxpZE51bWJlcj1DN2U7ZnVuY3Rpb24gQTdlKGUsdCxyKXtpZihyPT09dm9pZCAwJiYocj0xKSxyPT09MCl0aHJvdyBuZXcgRXJyb3IoInN0ZXAgY2Fubm90IGJlIDAiKTtmb3IodmFyIG49Z2QubWF4KGdkLmNlaWwoKHQtZSkvciksMCksaT1bXSxvPTA7bzxuOysrbylpW29dPWUrcipvO3JldHVybiBpfXNvLnJhbmdlPUE3ZTtmdW5jdGlvbiBQN2UoZSx0KXtyZXR1cm4gZ2QucG93KHQueS1lLnksMikrZ2QucG93KHQueC1lLngsMil9c28uZGlzdGFuY2VTcXVhcmVkPVA3ZTtmdW5jdGlvbiBJN2UoZSl7cmV0dXJuIGUvMzYwKmdkLlBJKjJ9c28uZGVncmVlc1RvUmFkaWFucz1JN2U7ZnVuY3Rpb24gTDdlKGUsdCl7cmV0dXJuIHQudG9wTGVmdC54PD1lLngmJnQuYm90dG9tUmlnaHQueD49ZS54JiZ0LnRvcExlZnQueTw9ZS55JiZ0LmJvdHRvbVJpZ2h0Lnk+PWUueX1zby53aXRoaW49TDdlO2Z1bmN0aW9uIGs3ZShlLHQscixuLGksbyxhLHMpe3JldHVybiBlPD1pK2EmJmk8PWUrciYmdDw9bytzJiZvPD10K259c28uYm91bmRzSW50ZXJzZWN0cz1rN2U7ZnVuY3Rpb24gUjdlKGUpe2Zvcih2YXIgdD1NWHQuZ2V0SHRtbEVsZW1lbnRBbmNlc3RvcnMoZSkscj1iN2Usbj1udWxsLGk9MCxvPXQ7aTxvLmxlbmd0aDtpKyspe3ZhciBhPW9baV0scz1NWHQuZ2V0RWxlbWVudFRyYW5zZm9ybShhKTtpZihzIT1udWxsKXt2YXIgbD1hLmNsaWVudFdpZHRoLzIsYz1hLmNsaWVudEhlaWdodC8yO3I9d0YocixbbCxjXSkscj1FWHQocixUWHQocykpLHI9d0YocixbLWwsLWNdKX12YXIgdT1hLnNjcm9sbExlZnQsaD1hLnNjcm9sbFRvcDsobj09PW51bGx8fGE9PT1uKSYmKHUtPWEub2Zmc2V0TGVmdCthLmNsaWVudExlZnQsaC09YS5vZmZzZXRUb3ArYS5jbGllbnRUb3Asbj1hLm9mZnNldFBhcmVudCkscj13RihyLFt1LGhdKX1yZXR1cm4gcn1zby5nZXRDdW11bGF0aXZlVHJhbnNmb3JtPVI3ZTtmdW5jdGlvbiBFWHQoZSx0KXtyZXR1cm5bZVswXSp0WzBdK2VbMl0qdFsxXSxlWzFdKnRbMF0rZVszXSp0WzFdLGVbMF0qdFsyXStlWzJdKnRbM10sZVsxXSp0WzJdK2VbM10qdFszXSxlWzBdKnRbNF0rZVsyXSp0WzVdK2VbNF0sZVsxXSp0WzRdK2VbM10qdFs1XStlWzVdXX1zby5tdWx0aXBseU1hdHJpeD1FWHQ7ZnVuY3Rpb24gTjdlKGUsdCl7cmV0dXJuW3RbMF0sdFsxXSx0WzJdLHRbM10sdFs0XStlWzBdLHRbNV0rZVsxXV19c28ucHJlbXVsdGlwbHlUcmFuc2xhdGU9TjdlO2Z1bmN0aW9uIHdGKGUsdCl7cmV0dXJuW2VbMF0sZVsxXSxlWzJdLGVbM10sZVswXSp0WzBdK2VbMl0qdFsxXStlWzRdLGVbMV0qdFswXStlWzNdKnRbMV0rZVs1XV19c28ubXVsdGlwbHlUcmFuc2xhdGU9d0Y7ZnVuY3Rpb24gVFh0KGUpe3ZhciB0PWVbMF0qZVszXS1lWzFdKmVbMl07aWYodD09PTApdGhyb3cgbmV3IEVycm9yKCJzaW5ndWxhciBtYXRyaXgiKTt2YXIgcj0xL3Q7cmV0dXJuW3IqZVszXSxyKi1lWzFdLHIqLWVbMl0sciplWzBdLHIqKC1lWzNdKmVbNF0rZVsyXSplWzVdKSxyKihlWzFdKmVbNF0rLWVbMF0qZVs1XSldfXNvLmludmVydE1hdHJpeD1UWHQ7ZnVuY3Rpb24gRDdlKGUsdCl7cmV0dXJue3g6ZVswXSp0LngrZVsyXSp0LnkrZVs0XSx5OmVbMV0qdC54K2VbM10qdC55K2VbNV19fXNvLmFwcGx5VHJhbnNmb3JtPUQ3ZX0pO3ZhciBDWHQ9SChNRj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTUYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBPN2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj1NYXRoLmNlaWwodC5sZW5ndGgvMiksaT0wO2k8bjtpKyspclswXS5pbnNlcnQodFtpXSk7Zm9yKHZhciBpPW47aTx0Lmxlbmd0aDtpKyspclsxXS5pbnNlcnQodFtpXSl9LGV9KCk7TUYuU3BsaXRTdHJhdGVneVRyaXZpYWw9TzdlO3ZhciB6N2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih0LHIpe2Zvcih0PXQuc2xpY2UoKSx0aGlzLmNob29zZUZpcnN0U3BsaXQodCxyKTt0Lmxlbmd0aD4wOyl0aGlzLmFkZE5leHQodCxyKX0sZS5wcm90b3R5cGUuY2hvb3NlRmlyc3RTcGxpdD1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj0wLGk9MCxvPXQubGVuZ3RoLTEsYT10Lmxlbmd0aC0xLHM9MTtzPHQubGVuZ3RoLTE7cysrKXt2YXIgbD10W3NdO2wuYm91bmRzLnhsPnRbb10uYm91bmRzLnhsP289czpsLmJvdW5kcy54aDx0W25dLmJvdW5kcy54aCYmKG49cyksbC5ib3VuZHMueWw+dFthXS5ib3VuZHMueWw/YT1zOmwuYm91bmRzLnloPHRbaV0uYm91bmRzLnloJiYoaT1zKX12YXIgYz1NYXRoLmFicyh0W25dLmJvdW5kcy54aC10W29dLmJvdW5kcy54bCksdT1NYXRoLmFicyh0W2ldLmJvdW5kcy55aC10W2FdLmJvdW5kcy55bCksaD1jPnU/W24sb106W2ksYV0sZj1oWzBdLHA9aFsxXTtmPT09cCYmKGY9MCxwPXQubGVuZ3RoLTEpLHJbMF0uaW5zZXJ0KHQuc3BsaWNlKE1hdGgubWF4KGYscCksMSlbMF0pLHJbMV0uaW5zZXJ0KHQuc3BsaWNlKE1hdGgubWluKGYscCksMSlbMF0pfSxlLnByb3RvdHlwZS5hZGROZXh0PWZ1bmN0aW9uKHQscil7Zm9yKHZhciBuPW51bGwsaT1udWxsLG89bnVsbCxhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBzPXRbYV0sbD1yWzBdLnVuaW9uQXJlYURpZmZlcmVuY2Uocy5ib3VuZHMpLGM9clsxXS51bmlvbkFyZWFEaWZmZXJlbmNlKHMuYm91bmRzKTsobDxpfHxuPT1udWxsKSYmKG49YSxpPWwsbz1yWzBdKSxjPGkmJihuPWEsaT1jLG89clsxXSl9by5pbnNlcnQodC5zcGxpY2UobiwxKVswXSl9LGV9KCk7TUYuU3BsaXRTdHJhdGVneUxpbmVhcj16N2V9KTt2YXIgSWl0PUgoX2Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KF9kLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgRjdlPUNYdCgpLEI3ZT01LEg3ZT1uZXcgRjdlLlNwbGl0U3RyYXRlZ3lMaW5lYXIsTmY7KGZ1bmN0aW9uKGUpe2VbZS5QQVNTPTBdPSJQQVNTIixlW2UuRkFJTD0xXT0iRkFJTCIsZVtlLlBBU1NfQU5EX09WRVJXUklURT0yXT0iUEFTU19BTkRfT1ZFUldSSVRFIn0pKE5mPV9kLlF1ZXJ5UHJlZGljYXRlUmVzdWx0fHwoX2QuUXVlcnlQcmVkaWNhdGVSZXN1bHQ9e30pKTtmdW5jdGlvbiBFRihlLHQscil7dmFyIG49MS8wLGk9MS8wLG89MS8wO3JldHVybiBmdW5jdGlvbihhKXt2YXIgcz10KGEuYm91bmRzLGUpLGw9cihhLmJvdW5kcyxlKTtyZXR1cm4gYS52YWx1ZSE9bnVsbD9zPG4/KG49cyxpPXMsbz1sLE5mLlBBU1NfQU5EX09WRVJXUklURSk6cz09PW4/TmYuUEFTUzpOZi5GQUlMOnM+bz9OZi5GQUlMOihpPU1hdGgubWluKHMsaSksbz1NYXRoLm1heChsLG8pLE5mLlBBU1MpfX1fZC5jcmVhdGVNaW5pbWl6aW5nTm9kZVByZWRpY2F0ZT1FRjtmdW5jdGlvbiBQaXQoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocixuKXtyZXR1cm4gdChuLmJvdW5kcyxlKS10KHIuYm91bmRzLGUpfX1fZC5jcmVhdGVOb2RlU29ydD1QaXQ7dmFyIFY3ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXt0PT09dm9pZCAwJiYodD1CN2UpLHI9PT12b2lkIDAmJihyPUg3ZSksdGhpcy5tYXhOb2RlQ2hpbGRyZW49dCx0aGlzLnNwbGl0U3RyYXRlZ3k9cix0aGlzLnJvb3Q9bmV3IFRGKCEwKSx0aGlzLnNpemU9MH1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0Um9vdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3R9LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5yb290PW5ldyBURighMCksdGhpcy5zaXplPTB9LGUucHJvdG90eXBlLmluc2VydD1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj10aGlzLnJvb3Q7IW4ubGVhZjspbj1uLnN1YnRyZWUodCk7dmFyIGk9VEYudmFsdWVOb2RlKHQscik7Zm9yKG4uaW5zZXJ0KGkpLHRoaXMuc2l6ZSs9MTtuLm92ZXJmbG93KHRoaXMubWF4Tm9kZUNoaWxkcmVuKTspbj1uLnNwbGl0KHRoaXMuc3BsaXRTdHJhdGVneSksbi5wYXJlbnQ9PW51bGwmJih0aGlzLnJvb3Q9bik7cmV0dXJuIGl9LGUucHJvdG90eXBlLmxvY2F0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5xdWVyeShmdW5jdGlvbihyKXtyZXR1cm4gci5jb250YWlucyh0KX0pfSxlLnByb3RvdHlwZS5sb2NhdGVOZWFyZXN0PWZ1bmN0aW9uKHQpe3ZhciByPUVGKHQsdHMuZGlzdGFuY2VTcXVhcmVkVG9OZWFyRWRnZSx0cy5kaXN0YW5jZVNxdWFyZWRUb0ZhckVkZ2UpLG49dGhpcy5xdWVyeU5vZGVzKHIpO3JldHVybiBuLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gaS52YWx1ZX0pfSxlLnByb3RvdHlwZS5sb2NhdGVOZWFyZXN0WD1mdW5jdGlvbih0KXt2YXIgcj1FRih0LHRzLmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWCx0cy5hYnNvbHV0ZURpc3RhbmNlVG9GYXJFZGdlWCksbj10aGlzLnF1ZXJ5Tm9kZXMocik7cmV0dXJuIG4uc29ydChQaXQodCx0cy5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVkpKSxuLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gaS52YWx1ZX0pfSxlLnByb3RvdHlwZS5sb2NhdGVOZWFyZXN0WT1mdW5jdGlvbih0KXt2YXIgcj1FRih0LHRzLmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWSx0cy5hYnNvbHV0ZURpc3RhbmNlVG9GYXJFZGdlWSksbj10aGlzLnF1ZXJ5Tm9kZXMocik7cmV0dXJuIG4uc29ydChQaXQodCx0cy5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVgpKSxuLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gaS52YWx1ZX0pfSxlLnByb3RvdHlwZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucXVlcnkoZnVuY3Rpb24ocil7cmV0dXJuIHRzLmlzQm91bmRzT3ZlcmxhcEJvdW5kcyhyLHQpfSl9LGUucHJvdG90eXBlLmludGVyc2VjdFg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucXVlcnkoZnVuY3Rpb24ocil7cmV0dXJuIHRzLmlzQm91bmRzT3ZlcmxhcFgocix0KX0pfSxlLnByb3RvdHlwZS5pbnRlcnNlY3RZPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnF1ZXJ5KGZ1bmN0aW9uKHIpe3JldHVybiB0cy5pc0JvdW5kc092ZXJsYXBZKHIsdCl9KX0sZS5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24odCl7dmFyIHI9W107aWYodGhpcy5yb290LmJvdW5kcyE9bnVsbCYmIXQodGhpcy5yb290LmJvdW5kcykpcmV0dXJuIHI7Zm9yKHZhciBuPVt0aGlzLnJvb3RdO24ubGVuZ3RoPjA7KWZvcih2YXIgaT1uLnNoaWZ0KCksbz0wO288aS5lbnRyaWVzLmxlbmd0aDtvKyspe3ZhciBhPWkuZW50cmllc1tvXTt0KGEuYm91bmRzKSYmKGkubGVhZj9yLnB1c2goYS52YWx1ZSk6bi5wdXNoKGEpKX1yZXR1cm4gcn0sZS5wcm90b3R5cGUucXVlcnlOb2Rlcz1mdW5jdGlvbih0KXt2YXIgcj1bXTtpZih0aGlzLnJvb3QuYm91bmRzIT1udWxsJiZ0KHRoaXMucm9vdCk9PT1OZi5GQUlMKXJldHVybiByO2Zvcih2YXIgbj1bdGhpcy5yb290XTtuLmxlbmd0aD4wOylmb3IodmFyIGk9bi5zaGlmdCgpLG89MDtvPGkuZW50cmllcy5sZW5ndGg7bysrKXt2YXIgYT1pLmVudHJpZXNbb10scz10KGEpO3M9PT1OZi5QQVNTX0FORF9PVkVSV1JJVEUmJihyPVtdKSwocz09PU5mLlBBU1N8fHM9PT1OZi5QQVNTX0FORF9PVkVSV1JJVEUpJiYoaS5sZWFmP3IucHVzaChhKTpuLnB1c2goYSkpfXJldHVybiByfSxlfSgpO19kLlJUcmVlPVY3ZTt2YXIgVEY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3RoaXMubGVhZj10LHRoaXMuYm91bmRzPW51bGwsdGhpcy5lbnRyaWVzPVtdLHRoaXMucGFyZW50PW51bGwsdGhpcy52YWx1ZT1udWxsfXJldHVybiBlLnZhbHVlTm9kZT1mdW5jdGlvbih0LHIpe3ZhciBuPW5ldyBlKCEwKTtyZXR1cm4gbi5ib3VuZHM9dCxuLnZhbHVlPXIsbn0sZS5wcm90b3R5cGUub3ZlcmZsb3c9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZW50cmllcy5sZW5ndGg+dH0sZS5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKHQpe3RoaXMuZW50cmllcy5wdXNoKHQpLHQucGFyZW50PXRoaXM7Zm9yKHZhciByPXRoaXM7ciE9bnVsbDspci5ib3VuZHM9dHMudW5pb25BbGwoW3IuYm91bmRzLHQuYm91bmRzXSkscj1yLnBhcmVudDtyZXR1cm4gdGhpc30sZS5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe3ZhciByPXRoaXMuZW50cmllcy5pbmRleE9mKHQpO2lmKHI+PTApe3RoaXMuZW50cmllcy5zcGxpY2UociwxKTtmb3IodmFyIG49dGhpcztuIT1udWxsOyluLmJvdW5kcz10cy51bmlvbkFsbChuLmVudHJpZXMubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBpLmJvdW5kc30pKSxuPW4ucGFyZW50fXJldHVybiB0aGlzfSxlLnByb3RvdHlwZS5zdWJ0cmVlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgcj0xLzAsbj1udWxsLGk9MDtpPHRoaXMuZW50cmllcy5sZW5ndGg7aSsrKXt2YXIgbz10aGlzLmVudHJpZXNbaV0sYT1vLnVuaW9uQXJlYURpZmZlcmVuY2UodCk7KGE8cnx8YT09PXImJm4hPW51bGwmJm8uZW50cmllcy5sZW5ndGg8bi5lbnRyaWVzLmxlbmd0aCkmJihuPW8pfXJldHVybiBufSxlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih0KXt0aGlzLnBhcmVudCE9bnVsbCYmdGhpcy5wYXJlbnQucmVtb3ZlKHRoaXMpO3ZhciByPVtuZXcgZSh0aGlzLmxlYWYpLG5ldyBlKHRoaXMubGVhZildO3Quc3BsaXQodGhpcy5lbnRyaWVzLHIpO3ZhciBuPXRoaXMucGFyZW50IT1udWxsP3RoaXMucGFyZW50Om5ldyBlKCExKTtyZXR1cm4gbi5pbnNlcnQoclswXSksbi5pbnNlcnQoclsxXSksbi5sZWFmPSExLG59LGUucHJvdG90eXBlLnVuaW9uQXJlYURpZmZlcmVuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguYWJzKHRzLnVuaW9uKHRoaXMuYm91bmRzLHQpLmFyZWEoKS10aGlzLmJvdW5kcy5hcmVhKCkpfSxlLnByb3RvdHlwZS5tYXhEZXB0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxlYWY/MToxK3RoaXMuZW50cmllcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubWF4RGVwdGgoKX0pLnJlZHVjZShmdW5jdGlvbih0LHIpe3JldHVybiBNYXRoLm1heCh0LHIpfSl9LGV9KCk7X2QuUlRyZWVOb2RlPVRGO3ZhciB0cz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4saSl7dGhpcy54bD10LHRoaXMueWw9cix0aGlzLnhoPW4sdGhpcy55aD1pLHRoaXMud2lkdGg9dGhpcy54aC10aGlzLnhsLHRoaXMuaGVpZ2h0PXRoaXMueWgtdGhpcy55bH1yZXR1cm4gZS54eXdoPWZ1bmN0aW9uKHQscixuLGkpe3JldHVybiBuZXcgZSh0LHIsdCtuLHIraSl9LGUuZW50aXR5Qm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZSh0LngsdC55LHQueCt0LndpZHRoLHQueSt0LmhlaWdodCl9LGUuYm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiBlLnBvaW50UGFpcih0LnRvcExlZnQsdC5ib3R0b21SaWdodCl9LGUucG9pbnRQYWlyPWZ1bmN0aW9uKHQscil7cmV0dXJuIG5ldyBlKE1hdGgubWluKHQueCxyLngpLE1hdGgubWluKHQueSxyLnkpLE1hdGgubWF4KHQueCxyLngpLE1hdGgubWF4KHQueSxyLnkpKX0sZS5wb2ludHM9ZnVuY3Rpb24odCl7aWYodC5sZW5ndGg8Mil0aHJvdyBuZXcgRXJyb3IoIm5lZWQgYXQgbGVhc3QgMiBwb2ludHMgdG8gY3JlYXRlIGJvdW5kcyIpO3ZhciByPXQubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBpLnh9KSxuPXQubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBpLnl9KTtyZXR1cm4gbmV3IGUoci5yZWR1Y2UoZnVuY3Rpb24oaSxvKXtyZXR1cm4gTWF0aC5taW4oaSxvKX0pLG4ucmVkdWNlKGZ1bmN0aW9uKGksbyl7cmV0dXJuIE1hdGgubWluKGksbyl9KSxyLnJlZHVjZShmdW5jdGlvbihpLG8pe3JldHVybiBNYXRoLm1heChpLG8pfSksbi5yZWR1Y2UoZnVuY3Rpb24oaSxvKXtyZXR1cm4gTWF0aC5tYXgoaSxvKX0pKX0sZS51bmlvbj1mdW5jdGlvbih0LHIpe3JldHVybiBuZXcgZShNYXRoLm1pbih0LnhsLHIueGwpLE1hdGgubWluKHQueWwsci55bCksTWF0aC5tYXgodC54aCxyLnhoKSxNYXRoLm1heCh0LnloLHIueWgpKX0sZS51bmlvbkFsbD1mdW5jdGlvbih0KXtyZXR1cm4gdD10LmZpbHRlcihmdW5jdGlvbihyKXtyZXR1cm4gciE9bnVsbH0pLHQubGVuZ3RoPT09MD9udWxsOnQucmVkdWNlKGZ1bmN0aW9uKHIsbil7cmV0dXJuIGUudW5pb24ocixuKX0pfSxlLmlzQm91bmRzT3ZlcmxhcEJvdW5kcz1mdW5jdGlvbih0LHIpe3JldHVybiBlLmlzQm91bmRzT3ZlcmxhcFgodCxyKSYmZS5pc0JvdW5kc092ZXJsYXBZKHQscil9LGUuaXNCb3VuZHNPdmVybGFwWD1mdW5jdGlvbih0LHIpe3JldHVybiEodC54aDxyLnhsKSYmISh0LnhsPnIueGgpfSxlLmlzQm91bmRzT3ZlcmxhcFk9ZnVuY3Rpb24odCxyKXtyZXR1cm4hKHQueWg8ci55bCkmJiEodC55bD5yLnloKX0sZS5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVg9ZnVuY3Rpb24odCxyKXt2YXIgbj10LndpZHRoLzIsaT10LnhsK247cmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKHIueC1pKS1uLDApfSxlLmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWT1mdW5jdGlvbih0LHIpe3ZhciBuPXQuaGVpZ2h0LzIsaT10LnlsK247cmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKHIueS1pKS1uLDApfSxlLmFic29sdXRlRGlzdGFuY2VUb0ZhckVkZ2VYPWZ1bmN0aW9uKHQscil7dmFyIG49ZS5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVgodCxyKTtyZXR1cm4gbj09PTA/MDpuK3Qud2lkdGh9LGUuYWJzb2x1dGVEaXN0YW5jZVRvRmFyRWRnZVk9ZnVuY3Rpb24odCxyKXt2YXIgbj1lLmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWSh0LHIpO3JldHVybiBuPT09MD8wOm4rdC5oZWlnaHR9LGUuZGlzdGFuY2VTcXVhcmVkVG9OZWFyRWRnZT1mdW5jdGlvbih0LHIpe3ZhciBuPWUuYWJzb2x1dGVEaXN0YW5jZVRvTmVhckVkZ2VYKHQsciksaT1lLmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWSh0LHIpO3JldHVybiBuKm4raSppfSxlLmRpc3RhbmNlU3F1YXJlZFRvRmFyRWRnZT1mdW5jdGlvbih0LHIpe3ZhciBuPWUuYWJzb2x1dGVEaXN0YW5jZVRvRmFyRWRnZVgodCxyKSxpPWUuYWJzb2x1dGVEaXN0YW5jZVRvRmFyRWRnZVkodCxyKTtyZXR1cm4gbipuK2kqaX0sZS5wcm90b3R5cGUuYXJlYT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmFyZWFDYWNoZWQ9PW51bGwmJih0aGlzLmFyZWFDYWNoZWQ9KHRoaXMueGgtdGhpcy54bCkqKHRoaXMueWgtdGhpcy55bCkpLHRoaXMuYXJlYUNhY2hlZH0sZS5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueGw8PXQueCYmdGhpcy54aD49dC54JiZ0aGlzLnlsPD10LnkmJnRoaXMueWg+PXQueX0sZX0oKTtfZC5SVHJlZUJvdW5kcz10c30pO3ZhciBJWHQ9SCh5ZD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeWQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBBWHQ9KEVyKCksVXQoTXIpKSxVN2U9T2UoKSwkZz1GZSgpLHE3ZT1MZigpO3lkLklTdGFja2luZ09yZGVyPXE3ZS5tYWtlRW51bShbInRvcGRvd24iLCJib3R0b211cCJdKTt2YXIgUFh0PXdpbmRvdy5NYXRoO2Z1bmN0aW9uIEc3ZShlLHQscixuKXtuPT09dm9pZCAwJiYobj0iYm90dG9tdXAiKTt2YXIgaT1BWHQubWFwKCksbz1BWHQubWFwKCksYT1uZXcgJGcuTWFwO249PT0idG9wZG93biImJihlPWUuc2xpY2UoKSxlLnJldmVyc2UoKSk7Zm9yKHZhciBzPTAsbD1lO3M8bC5sZW5ndGg7cysrKXtmb3IodmFyIGM9bFtzXSx1PW5ldyAkZy5NYXAsaD1jLmRhdGEoKSxmPWgubGVuZ3RoLHA9MDtwPGY7cCsrKXt2YXIgZD1oW3BdLGc9dChkLHAsYyksXz15ZC5ub3JtYWxpemVLZXkoZykseT0rcihkLHAsYykseD12b2lkIDAsYj15Pj0wP2k6bztiLmhhcyhfKT8oeD1iLmdldChfKSxiLnNldChfLHgreSkpOih4PTAsYi5zZXQoXyx5KSksdS5zZXQoXyx7b2Zmc2V0OngsdmFsdWU6eSxheGlzVmFsdWU6ZyxvcmlnaW5hbERhdHVtOmQsb3JpZ2luYWxEYXRhc2V0OmMsb3JpZ2luYWxJbmRleDpwfSl9YS5zZXQoYyx1KX1yZXR1cm4gYX15ZC5zdGFjaz1HN2U7ZnVuY3Rpb24gVzdlKGUpe3ZhciB0PW5ldyAkZy5NYXAscj1uZXcgJGcuTWFwO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24obil7bi5mb3JFYWNoKGZ1bmN0aW9uKGksbyl7dmFyIGE9aS5vZmZzZXQraS52YWx1ZSxzPSRnLk1hdGgubWF4KFthLGkub2Zmc2V0XSxpLm9mZnNldCksbD0kZy5NYXRoLm1pbihbYSxpLm9mZnNldF0saS5vZmZzZXQpLGM9aS5heGlzVmFsdWU7dC5oYXMobyk/dC5nZXQobykuZXh0ZW50PHMmJnQuc2V0KG8se2V4dGVudDpzLGF4aXNWYWx1ZTpjLHN0YWNrZWREYXR1bTppfSk6dC5zZXQobyx7ZXh0ZW50OnMsYXhpc1ZhbHVlOmMsc3RhY2tlZERhdHVtOml9KSxyLmhhcyhvKT9yLmdldChvKS5leHRlbnQ+bCYmci5zZXQobyx7ZXh0ZW50OmwsYXhpc1ZhbHVlOmMsc3RhY2tlZERhdHVtOml9KTpyLnNldChvLHtleHRlbnQ6bCxheGlzVmFsdWU6YyxzdGFja2VkRGF0dW06aX0pfSl9KSx7bWF4aW11bUV4dGVudHM6dCxtaW5pbXVtRXh0ZW50czpyfX15ZC5zdGFja2VkRXh0ZW50cz1XN2U7ZnVuY3Rpb24gWTdlKGUsdCxyKXt2YXIgbj1bXTtlLmZvckVhY2goZnVuY3Rpb24oYSxzKXtmb3IodmFyIGw9cy5kYXRhKCksYz1sLmxlbmd0aCx1PTA7dTxjO3UrKyl7dmFyIGg9bFt1XTtpZighKHIhPW51bGwmJiFyKGgsdSxzKSkpe3ZhciBmPWEuZ2V0KHlkLm5vcm1hbGl6ZUtleSh0KGgsdSxzKSkpO24ucHVzaChmLnZhbHVlK2Yub2Zmc2V0KX19fSk7dmFyIGk9JGcuTWF0aC5tYXgobiwwKSxvPSRnLk1hdGgubWluKG4sMCk7cmV0dXJuW1BYdC5taW4obywwKSxQWHQubWF4KDAsaSldfXlkLnN0YWNrZWRFeHRlbnQ9WTdlO3lkLm5vcm1hbGl6ZUtleT1VN2UubWVtb2l6ZShmdW5jdGlvbihlKXtyZXR1cm4gU3RyaW5nKGUpfSl9KTt2YXIgJEE9SChDRj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQ0YsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO0NGLlNIT1dfV0FSTklOR1M9ITA7Q0YuQUREX1RJVExFX0VMRU1FTlRTPSEwfSk7dmFyIEFGPUgoZ1M9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGdTLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgajdlPSRBKCk7ZnVuY3Rpb24gTFh0KGUpeyFqN2UuU0hPV19XQVJOSU5HU3x8Y29uc29sZS53YXJuKGUpfWdTLndhcm49TFh0O2Z1bmN0aW9uIGtYdChlLHQpe2Zvcih2YXIgcj1bXSxuPTI7bjxhcmd1bWVudHMubGVuZ3RoO24rKylyW24tMl09YXJndW1lbnRzW25dO3JldHVybiB0PT09MD8oZShyKSwtMSk6d2luZG93LnNldFRpbWVvdXQoZSx0LHIpfWdTLnNldFRpbWVvdXQ9a1h0O2Z1bmN0aW9uIFg3ZShlLHQscil7dmFyIG49bnVsbCxpPVtdLG89ZnVuY3Rpb24oKXt0LmFwcGx5KHIsaSl9O3JldHVybiBmdW5jdGlvbigpe2k9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSxjbGVhclRpbWVvdXQobiksbj1rWHQobyxlKX19Z1MuZGVib3VuY2U9WDdlO2Z1bmN0aW9uICQ3ZShlLHQscil7cj09PXZvaWQgMCYmKHI9IiIpLExYdCgiTWV0aG9kICIrZSsiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gdmVyc2lvbiAiK3QrIi4gUGxlYXNlIHJlZmVyIHRvIHRoZSByZWxlYXNlIG5vdGVzLiAiK3IpfWdTLmRlcHJlY2F0ZWQ9JDdlfSk7dmFyIFJYdD1IKExpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTGl0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgSzdlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7dGhpcy5lbnRyeUluZGV4PXQsdGhpcy5leGl0SW5kZXg9dCx0aGlzLm1pbkluZGV4PXQsdGhpcy5tYXhJbmRleD10LHRoaXMuYnVja2V0VmFsdWU9cix0aGlzLm1pblZhbHVlPW4sdGhpcy5tYXhWYWx1ZT1ufXJldHVybiBlLnByb3RvdHlwZS5pc0luQnVja2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0PT10aGlzLmJ1Y2tldFZhbHVlfSxlLnByb3RvdHlwZS5hZGRUb0J1Y2tldD1mdW5jdGlvbih0LHIpe3Q8dGhpcy5taW5WYWx1ZSYmKHRoaXMubWluVmFsdWU9dCx0aGlzLm1pbkluZGV4PXIpLHQ+dGhpcy5tYXhWYWx1ZSYmKHRoaXMubWF4VmFsdWU9dCx0aGlzLm1heEluZGV4PXIpLHRoaXMuZXhpdEluZGV4PXJ9LGUucHJvdG90eXBlLmdldFVuaXF1ZUluZGljZXM9ZnVuY3Rpb24oKXt2YXIgdD1bdGhpcy5lbnRyeUluZGV4LHRoaXMubWF4SW5kZXgsdGhpcy5taW5JbmRleCx0aGlzLmV4aXRJbmRleF07cmV0dXJuIHQuZmlsdGVyKGZ1bmN0aW9uKHIsbil7cmV0dXJuIG49PTB8fHIhPXRbbi0xXX0pfSxlfSgpO0xpdC5CdWNrZXQ9SzdlfSk7dmFyIFJpdD1IKGtpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoa2l0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgWjdlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3R5cGVvZiB3aW5kb3cuU2V0PT0iZnVuY3Rpb24iP3RoaXMuX2VzNlNldD1uZXcgd2luZG93LlNldDp0aGlzLl92YWx1ZXM9W10sdGhpcy5zaXplPTB9cmV0dXJuIGUucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZXM2U2V0IT1udWxsPyh0aGlzLl9lczZTZXQuYWRkKHQpLHRoaXMuc2l6ZT10aGlzLl9lczZTZXQuc2l6ZSx0aGlzKToodGhpcy5oYXModCl8fCh0aGlzLl92YWx1ZXMucHVzaCh0KSx0aGlzLnNpemU9dGhpcy5fdmFsdWVzLmxlbmd0aCksdGhpcyl9LGUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXtpZih0aGlzLl9lczZTZXQhPW51bGwpe3ZhciByPXRoaXMuX2VzNlNldC5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZT10aGlzLl9lczZTZXQuc2l6ZSxyfXZhciBuPXRoaXMuX3ZhbHVlcy5pbmRleE9mKHQpO3JldHVybiBuIT09LTE/KHRoaXMuX3ZhbHVlcy5zcGxpY2UobiwxKSx0aGlzLnNpemU9dGhpcy5fdmFsdWVzLmxlbmd0aCwhMCk6ITF9LGUucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZXM2U2V0IT1udWxsP3RoaXMuX2VzNlNldC5oYXModCk6dGhpcy5fdmFsdWVzLmluZGV4T2YodCkhPT0tMX0sZS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbih0LHIpe3ZhciBuPXRoaXM7aWYodGhpcy5fZXM2U2V0IT1udWxsKXt2YXIgaT1mdW5jdGlvbihvLGEpe3JldHVybiB0LmNhbGwocixvLGEsbil9O3RoaXMuX2VzNlNldC5mb3JFYWNoKGkscik7cmV0dXJufXRoaXMuX3ZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uKG8pe3QuY2FsbChyLG8sbyxuKX0pfSxlfSgpO2tpdC5TZXQ9WjdlfSk7dmFyIE5YdD1IKE5pdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTml0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgSjdlPShkZSgpLFV0KHBlKSksUTdlPVJpdCgpLHR6ZT1mdW5jdGlvbihlKXtKN2UuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3JldHVybiBlIT09bnVsbCYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIHQucHJvdG90eXBlLmNhbGxDYWxsYmFja3M9ZnVuY3Rpb24oKXtmb3IodmFyIHI9dGhpcyxuPVtdLGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKW5baV09YXJndW1lbnRzW2ldO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24obyl7by5hcHBseShyLG4pfSksdGhpc30sdH0oUTdlLlNldCk7Tml0LkNhbGxiYWNrU2V0PXR6ZX0pO3ZhciBEWHQ9SChEaXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KERpdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEtnPUlpdCgpLGV6ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLl9lbnRpdGllcz1bXSx0aGlzLl9ydHJlZT1uZXcgS2cuUlRyZWV9cmV0dXJuIGUucHJvdG90eXBlLmFkZEFsbD1mdW5jdGlvbih0LHIsbil7aWYodGhpcy5fZW50aXRpZXM9dGhpcy5fZW50aXRpZXMuY29uY2F0KHQpLG4hPT12b2lkIDApZm9yKHZhciBpPUtnLlJUcmVlQm91bmRzLmJvdW5kcyhuKSxvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBhPXRbb10scz1LZy5SVHJlZUJvdW5kcy5lbnRpdHlCb3VuZHMocihhKSk7S2cuUlRyZWVCb3VuZHMuaXNCb3VuZHNPdmVybGFwQm91bmRzKGkscykmJnRoaXMuX3J0cmVlLmluc2VydChzLGEpfWVsc2UgZm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBhPXRbb10scz1LZy5SVHJlZUJvdW5kcy5lbnRpdHlCb3VuZHMocihhKSk7dGhpcy5fcnRyZWUuaW5zZXJ0KHMsYSl9fSxlLnByb3RvdHlwZS5lbnRpdHlOZWFyZXN0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ydHJlZS5sb2NhdGVOZWFyZXN0KHQpLnBvcCgpfSxlLnByb3RvdHlwZS5lbnRpdHlOZWFyZXN0WD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcnRyZWUubG9jYXRlTmVhcmVzdFgodCkucG9wKCl9LGUucHJvdG90eXBlLmVudGl0eU5lYXJlc3RZPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ydHJlZS5sb2NhdGVOZWFyZXN0WSh0KS5wb3AoKX0sZS5wcm90b3R5cGUuZW50aXRpZXNJbkJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcnRyZWUuaW50ZXJzZWN0KEtnLlJUcmVlQm91bmRzLmVudGl0eUJvdW5kcyh0KSl9LGUucHJvdG90eXBlLmVudGl0aWVzSW5YQm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ydHJlZS5pbnRlcnNlY3RYKEtnLlJUcmVlQm91bmRzLmVudGl0eUJvdW5kcyh0KSl9LGUucHJvdG90eXBlLmVudGl0aWVzSW5ZQm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ydHJlZS5pbnRlcnNlY3RZKEtnLlJUcmVlQm91bmRzLmVudGl0eUJvdW5kcyh0KSl9LGUucHJvdG90eXBlLmVudGl0aWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VudGl0aWVzfSxlfSgpO0RpdC5FbnRpdHlTdG9yZT1lemV9KTt2YXIgT1h0PUgoT2l0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByemU9QWl0KCksbnplPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3R5cGVvZiB3aW5kb3cuTWFwPT0iZnVuY3Rpb24iP3RoaXMuX2VzNk1hcD1uZXcgd2luZG93Lk1hcDp0aGlzLl9rZXlWYWx1ZVBhaXJzPVtdfXJldHVybiBlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCxyKXtpZihyemUuaXNOYU4odCkpdGhyb3cgbmV3IEVycm9yKCJOYU4gbWF5IG5vdCBiZSB1c2VkIGFzIGEga2V5IHRvIHRoZSBNYXAiKTtpZih0aGlzLl9lczZNYXAhPW51bGwpcmV0dXJuIHRoaXMuX2VzNk1hcC5zZXQodCxyKSx0aGlzO2Zvcih2YXIgbj0wO248dGhpcy5fa2V5VmFsdWVQYWlycy5sZW5ndGg7bisrKWlmKHRoaXMuX2tleVZhbHVlUGFpcnNbbl0ua2V5PT09dClyZXR1cm4gdGhpcy5fa2V5VmFsdWVQYWlyc1tuXS52YWx1ZT1yLHRoaXM7cmV0dXJuIHRoaXMuX2tleVZhbHVlUGFpcnMucHVzaCh7a2V5OnQsdmFsdWU6cn0pLHRoaXN9LGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtpZih0aGlzLl9lczZNYXAhPW51bGwpcmV0dXJuIHRoaXMuX2VzNk1hcC5nZXQodCk7Zm9yKHZhciByPTA7cjx0aGlzLl9rZXlWYWx1ZVBhaXJzLmxlbmd0aDtyKyspaWYodGhpcy5fa2V5VmFsdWVQYWlyc1tyXS5rZXk9PT10KXJldHVybiB0aGlzLl9rZXlWYWx1ZVBhaXJzW3JdLnZhbHVlfSxlLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7aWYodGhpcy5fZXM2TWFwIT1udWxsKXJldHVybiB0aGlzLl9lczZNYXAuaGFzKHQpO2Zvcih2YXIgcj0wO3I8dGhpcy5fa2V5VmFsdWVQYWlycy5sZW5ndGg7cisrKWlmKHRoaXMuX2tleVZhbHVlUGFpcnNbcl0ua2V5PT09dClyZXR1cm4hMDtyZXR1cm4hMX0sZS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbih0LHIpe3ZhciBuPXRoaXM7aWYodGhpcy5fZXM2TWFwIT1udWxsKXt2YXIgaT1mdW5jdGlvbihvLGEpe3JldHVybiB0LmNhbGwocixvLGEsbil9O3RoaXMuX2VzNk1hcC5mb3JFYWNoKGkscik7cmV0dXJufXRoaXMuX2tleVZhbHVlUGFpcnMuZm9yRWFjaChmdW5jdGlvbihvKXt0LmNhbGwocixvLnZhbHVlLG8ua2V5LG4pfSl9LGUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXtpZih0aGlzLl9lczZNYXAhPW51bGwpcmV0dXJuIHRoaXMuX2VzNk1hcC5kZWxldGUodCk7Zm9yKHZhciByPTA7cjx0aGlzLl9rZXlWYWx1ZVBhaXJzLmxlbmd0aDtyKyspaWYodGhpcy5fa2V5VmFsdWVQYWlyc1tyXS5rZXk9PT10KXJldHVybiB0aGlzLl9rZXlWYWx1ZVBhaXJzLnNwbGljZShyLDEpLCEwO3JldHVybiExfSxlfSgpO09pdC5NYXA9bnplfSk7dmFyIHpYdD1IKHppdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeml0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtmdW5jdGlvbiBpemUoKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07Zm9yKHZhciByPXt9LG49MCxpPWU7bjxpLmxlbmd0aDtuKyspZm9yKHZhciBvPWlbbl0sYT1PYmplY3Qua2V5cyhvKSxzPTAsbD1hO3M8bC5sZW5ndGg7cysrKXt2YXIgYz1sW3NdO3JbY109b1tjXX1yZXR1cm4gcn16aXQuYXNzaWduPWl6ZX0pO3ZhciBIWHQ9SChQRj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoUEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBGaXQ9RmUoKSxGWHQ9Il9fUGxvdHRhYmxlX0NsaWVudFRyYW5zbGF0b3IiO2Z1bmN0aW9uIG96ZShlKXt2YXIgdD1lLnJvb3QoKS5yb290RWxlbWVudCgpLm5vZGUoKSxyPXRbRlh0XTtyZXR1cm4gcj09bnVsbCYmKHI9bmV3IEJYdCh0KSx0W0ZYdF09cikscn1QRi5nZXRUcmFuc2xhdG9yPW96ZTt2YXIgQlh0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt0aGlzLl9yb290RWxlbWVudD10fXJldHVybiBlLnByb3RvdHlwZS5jb21wdXRlUG9zaXRpb249ZnVuY3Rpb24odCxyKXt2YXIgbj17eDp0LHk6cn0saT1GaXQuTWF0aC5nZXRDdW11bGF0aXZlVHJhbnNmb3JtKHRoaXMuX3Jvb3RFbGVtZW50KTtpZihpPT1udWxsKXJldHVybiBuO3ZhciBvPUZpdC5NYXRoLmFwcGx5VHJhbnNmb3JtKGksbik7cmV0dXJuIG99LGUuaXNFdmVudEluc2lkZT1mdW5jdGlvbih0LHIpe3JldHVybiBGaXQuRE9NLmNvbnRhaW5zKHQucm9vdCgpLnJvb3RFbGVtZW50KCkubm9kZSgpLHIudGFyZ2V0KX0sZX0oKTtQRi5UcmFuc2xhdG9yPUJYdH0pO3ZhciBGZT1IKHFvPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxbywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFpnPShkZSgpLFV0KHBlKSksYXplPV9YdCgpO3FvLkFycmF5PWF6ZTt2YXIgc3plPXhYdCgpO3FvLkNvbG9yPXN6ZTt2YXIgbHplPUNpdCgpO3FvLkRPTT1semU7dmFyIGN6ZT1BaXQoKTtxby5NYXRoPWN6ZTt2YXIgdXplPUlpdCgpO3FvLlJUcmVlPXV6ZTt2YXIgaHplPUlYdCgpO3FvLlN0YWNraW5nPWh6ZTt2YXIgZnplPUFGKCk7cW8uV2luZG93PWZ6ZTtaZy5fX2V4cG9ydFN0YXIoUlh0KCkscW8pO1pnLl9fZXhwb3J0U3RhcihOWHQoKSxxbyk7WmcuX19leHBvcnRTdGFyKGpnKCkscW8pO1pnLl9fZXhwb3J0U3RhcihEWHQoKSxxbyk7WmcuX19leHBvcnRTdGFyKE9YdCgpLHFvKTtaZy5fX2V4cG9ydFN0YXIoelh0KCkscW8pO1pnLl9fZXhwb3J0U3RhcihSaXQoKSxxbyk7WmcuX19leHBvcnRTdGFyKEhYdCgpLHFvKX0pO3ZhciBIaXQ9SChLQT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoS0EsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBWWHQ9RmUoKSxCaXQ9SUYoKSxwemU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtCaXQuZmx1c2goKX0sZX0oKTtLQS5JbW1lZGlhdGU9cHplO3ZhciBkemU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtWWHQuRE9NLnJlcXVlc3RBbmltYXRpb25GcmFtZVBvbHlmaWxsKEJpdC5mbHVzaCl9LGV9KCk7S0EuQW5pbWF0aW9uRnJhbWU9ZHplO3ZhciBtemU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5fdGltZW91dE1zZWM9Vlh0LkRPTS5TQ1JFRU5fUkVGUkVTSF9SQVRFX01JTExJU0VDT05EU31yZXR1cm4gZS5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7c2V0VGltZW91dChCaXQuZmx1c2gsdGhpcy5fdGltZW91dE1zZWMpfSxlfSgpO0tBLlRpbWVvdXQ9bXplfSk7dmFyIElGPUgoenU9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHp1LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgX1M9RmUoKSxnemU9TGYoKSxMRj1IaXQoKSxKQT1uZXcgX1MuU2V0LFZpdD1uZXcgX1MuU2V0LGtGPSExLFVpdD0hMTt6dS5Qb2xpY3k9Z3plLm1ha2VFbnVtKFsiaW1tZWRpYXRlIiwiYW5pbWF0aW9uRnJhbWUiLCJ0aW1lb3V0Il0pO3ZhciBaQT1uZXcgTEYuQW5pbWF0aW9uRnJhbWU7ZnVuY3Rpb24gX3plKGUpe2lmKGU9PW51bGwpcmV0dXJuIFpBO3N3aXRjaChlKXtjYXNlIHp1LlBvbGljeS5pbW1lZGlhdGU6WkE9bmV3IExGLkltbWVkaWF0ZTticmVhaztjYXNlIHp1LlBvbGljeS5hbmltYXRpb25GcmFtZTpaQT1uZXcgTEYuQW5pbWF0aW9uRnJhbWU7YnJlYWs7Y2FzZSB6dS5Qb2xpY3kudGltZW91dDpaQT1uZXcgTEYuVGltZW91dDticmVhaztkZWZhdWx0Ol9TLldpbmRvdy53YXJuKCJVbnJlY29nbml6ZWQgcmVuZGVyUG9saWN5OiAiK2UpfX16dS5yZW5kZXJQb2xpY3k9X3plO2Z1bmN0aW9uIHl6ZShlKXtVaXQmJl9TLldpbmRvdy53YXJuKCJSZWdpc3RlcmVkIHRvIHJlbmRlciB3aGlsZSBvdGhlciBjb21wb25lbnRzIGFyZSBmbHVzaGluZzogcmVxdWVzdCBtYXkgYmUgaWdub3JlZCIpLEpBLmFkZChlKSxxWHQoKX16dS5yZWdpc3RlclRvUmVuZGVyPXl6ZTtmdW5jdGlvbiBVWHQoZSl7Vml0LmFkZChlKSxKQS5hZGQoZSkscVh0KCl9enUucmVnaXN0ZXJUb0NvbXB1dGVMYXlvdXRBbmRSZW5kZXI9VVh0O2Z1bmN0aW9uIHZ6ZShlKXtVWHQoZSl9enUucmVnaXN0ZXJUb0NvbXB1dGVMYXlvdXQ9dnplO2Z1bmN0aW9uIHFYdCgpe2tGfHwoa0Y9ITAsWkEucmVuZGVyKCkpfWZ1bmN0aW9uIHh6ZSgpe2lmKGtGKXtWaXQuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb21wdXRlTGF5b3V0KCl9KSxKQS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlbmRlcigpfSksVWl0PSEwO3ZhciBlPW5ldyBfUy5TZXQ7SkEuZm9yRWFjaChmdW5jdGlvbih0KXt0cnl7dC5yZW5kZXJJbW1lZGlhdGVseSgpfWNhdGNoKHIpe3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgcn0sMCksZS5hZGQodCl9fSksVml0PW5ldyBfUy5TZXQsSkE9ZSxrRj0hMSxVaXQ9ITF9fXp1LmZsdXNoPXh6ZX0pO3ZhciBrYz1IKFFBPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShRQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEdYdD0oRXIoKSxVdChNcikpLFJGPUlGKCkseVM9RmUoKSxiemU9T2UoKSxXWHQ9amcoKSxZWHQ9TGYoKTtRQS5YQWxpZ25tZW50PVlYdC5tYWtlRW51bShbImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdKTtRQS5ZQWxpZ25tZW50PVlYdC5tYWtlRW51bShbInRvcCIsImNlbnRlciIsImJvdHRvbSJdKTt2YXIgd3plPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuX292ZXJmbG93SGlkZGVuPSExLHRoaXMuX29yaWdpbj17eDowLHk6MH0sdGhpcy5feEFsaWdubWVudD0ibGVmdCIsdGhpcy5feUFsaWdubWVudD0idG9wIix0aGlzLl9pc1NldHVwPSExLHRoaXMuX2lzQW5jaG9yZWQ9ITEsdGhpcy5fY3NzQ2xhc3Nlcz1uZXcgeVMuU2V0LHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9vbkFuY2hvckNhbGxiYWNrcz1uZXcgeVMuQ2FsbGJhY2tTZXQsdGhpcy5fb25EZXRhY2hDYWxsYmFja3M9bmV3IHlTLkNhbGxiYWNrU2V0LHRoaXMuX2Nzc0NsYXNzZXMuYWRkKCJjb21wb25lbnQiKX1yZXR1cm4gZS5wcm90b3R5cGUuYW5jaG9yPWZ1bmN0aW9uKHQpe2lmKHQ9V1h0LmNvZXJjZUV4dGVybmFsRDModCksdGhpcy5fZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiQ2FuJ3QgcmV1c2UgZGVzdHJveSgpLWVkIENvbXBvbmVudHMhIik7cmV0dXJuIHRoaXMuaXNSb290KCkmJih0aGlzLl9yb290RWxlbWVudD10LHRoaXMuX3Jvb3RFbGVtZW50LmNsYXNzZWQoInBsb3R0YWJsZSIsITApKSx0aGlzLl9lbGVtZW50IT1udWxsP3Qubm9kZSgpLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnQubm9kZSgpKToodGhpcy5fZWxlbWVudD10LmFwcGVuZCgiZGl2IiksdGhpcy5fc2V0dXAoKSksdGhpcy5faXNBbmNob3JlZD0hMCx0aGlzLl9vbkFuY2hvckNhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHRoaXMpLHRoaXN9LGUucHJvdG90eXBlLm9uQW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pc0FuY2hvcmVkJiZ0KHRoaXMpLHRoaXMuX29uQW5jaG9yQ2FsbGJhY2tzLmFkZCh0KSx0aGlzfSxlLnByb3RvdHlwZS5vZmZBbmNob3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX29uQW5jaG9yQ2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSxlLnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX2lzU2V0dXB8fCh0aGlzLl9jc3NDbGFzc2VzLmZvckVhY2goZnVuY3Rpb24ocil7dC5fZWxlbWVudC5jbGFzc2VkKHIsITApfSksdGhpcy5fY3NzQ2xhc3Nlcz1uZXcgeVMuU2V0LHRoaXMuX2JhY2tncm91bmRDb250YWluZXI9dGhpcy5fZWxlbWVudC5hcHBlbmQoInN2ZyIpLmNsYXNzZWQoImJhY2tncm91bmQtY29udGFpbmVyIiwhMCksdGhpcy5fY29udGVudD10aGlzLl9lbGVtZW50LmFwcGVuZCgic3ZnIikuY2xhc3NlZCgiY29udGVudCIsITApLHRoaXMuX2ZvcmVncm91bmRDb250YWluZXI9dGhpcy5fZWxlbWVudC5hcHBlbmQoInN2ZyIpLmNsYXNzZWQoImZvcmVncm91bmQtY29udGFpbmVyIiwhMCksdGhpcy5fb3ZlcmZsb3dIaWRkZW4/dGhpcy5fY29udGVudC5jbGFzc2VkKCJjb21wb25lbnQtb3ZlcmZsb3ctaGlkZGVuIiwhMCk6dGhpcy5fY29udGVudC5jbGFzc2VkKCJjb21wb25lbnQtb3ZlcmZsb3ctdmlzaWJsZSIsITApLHRoaXMuX2lzU2V0dXA9ITApfSxlLnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbih0LHIpe3JldHVybnttaW5XaWR0aDowLG1pbkhlaWdodDowfX0sZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbih0LHIsbil7aWYodD09bnVsbHx8cj09bnVsbHx8bj09bnVsbCl7aWYodGhpcy5fZWxlbWVudD09bnVsbCl0aHJvdyBuZXcgRXJyb3IoImFuY2hvcigpIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBjb21wdXRlTGF5b3V0KCkiKTtpZih0aGlzLl9yb290RWxlbWVudCE9bnVsbCl7dD17eDowLHk6MH07dmFyIGk9dGhpcy5fcm9vdEVsZW1lbnQubm9kZSgpO3I9eVMuRE9NLmVsZW1lbnRXaWR0aChpKSxuPXlTLkRPTS5lbGVtZW50SGVpZ2h0KGkpfWVsc2UgdGhyb3cgbmV3IEVycm9yKCJudWxsIGFyZ3VtZW50cyBjYW5ub3QgYmUgcGFzc2VkIHRvIGNvbXB1dGVMYXlvdXQoKSBvbiBhIG5vbi1yb290LCB1bmFuY2hvcmVkIG5vZGUiKX12YXIgbz10aGlzLl9zaXplRnJvbU9mZmVyKHIsbiksYT1vLmhlaWdodCxzPW8ud2lkdGgsbD1lLl94QWxpZ25Ub1Byb3BvcnRpb25bdGhpcy5feEFsaWdubWVudF0sYz1lLl95QWxpZ25Ub1Byb3BvcnRpb25bdGhpcy5feUFsaWdubWVudF0sdT10LngrKHItcykqbCxoPXQueSsobi1hKSpjO3JldHVybiB0aGlzLnNldEJvdW5kcyhzLGEsdSxoKSx0aGlzfSxlLnByb3RvdHlwZS5zZXRCb3VuZHM9ZnVuY3Rpb24odCxyLG4saSl7cmV0dXJuIG49PT12b2lkIDAmJihuPTApLGk9PT12b2lkIDAmJihpPTApLHRoaXMuX3dpZHRoPXQsdGhpcy5faGVpZ2h0PXIsdGhpcy5fb3JpZ2luPXt4Om4seTppfSx0aGlzLl9lbGVtZW50IT1udWxsJiZ0aGlzLl9lbGVtZW50LnN0eWxlcyh7bGVmdDpuKyJweCIsaGVpZ2h0OnIrInB4Iix0b3A6aSsicHgiLHdpZHRoOnQrInB4In0pLHRoaXMuX3Jlc2l6ZUhhbmRsZXIhPW51bGwmJnRoaXMuX3Jlc2l6ZUhhbmRsZXIoe3dpZHRoOnQsaGVpZ2h0OnJ9KSx0aGlzfSxlLnByb3RvdHlwZS5fc2l6ZUZyb21PZmZlcj1mdW5jdGlvbih0LHIpe3ZhciBuPXRoaXMucmVxdWVzdGVkU3BhY2UodCxyKTtyZXR1cm57d2lkdGg6dGhpcy5maXhlZFdpZHRoKCk/TWF0aC5taW4odCxuLm1pbldpZHRoKTp0LGhlaWdodDp0aGlzLmZpeGVkSGVpZ2h0KCk/TWF0aC5taW4ocixuLm1pbkhlaWdodCk6cn19LGUucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9pc1NldHVwJiZ0aGlzLndpZHRoKCk+PTAmJnRoaXMuaGVpZ2h0KCk+PTAmJlJGLnJlZ2lzdGVyVG9SZW5kZXIodGhpcyksdGhpc30sZS5wcm90b3R5cGUucmVuZGVyTG93UHJpb3JpdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXIoKX0sZS5wcm90b3R5cGUuX3NjaGVkdWxlQ29tcHV0ZUxheW91dD1mdW5jdGlvbigpe3RoaXMuX2lzQW5jaG9yZWQmJnRoaXMuX2lzU2V0dXAmJlJGLnJlZ2lzdGVyVG9Db21wdXRlTGF5b3V0QW5kUmVuZGVyKHRoaXMpfSxlLnByb3RvdHlwZS5vblJlc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVzaXplSGFuZGxlcj10LHRoaXN9LGUucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGUucHJvdG90eXBlLnJlZHJhdz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9pc1NldHVwJiYodGhpcy5pc1Jvb3QoKT90aGlzLl9zY2hlZHVsZUNvbXB1dGVMYXlvdXQoKTp0aGlzLnBhcmVudCgpLnJlZHJhdygpKSx0aGlzfSxlLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGU9ZnVuY3Rpb24oKXt9LGUucHJvdG90eXBlLnJlbmRlclRvPWZ1bmN0aW9uKHQpe2lmKHRoaXMuZGV0YWNoKCksdCE9bnVsbCl7dmFyIHI9dm9pZCAwO2lmKHR5cGVvZiB0PT0ic3RyaW5nInx8YnplLmlzRWxlbWVudCh0KT9yPUdYdC5zZWxlY3QodCk6cj1XWHQuY29lcmNlRXh0ZXJuYWxEMyh0KSwhci5ub2RlKCl8fHIubm9kZSgpLm5vZGVOYW1lPT1udWxsKXRocm93IG5ldyBFcnJvcigiUGxvdHRhYmxlIHJlcXVpcmVzIGEgdmFsaWQgRWxlbWVudCB0byByZW5kZXJUbyIpO2lmKHIubm9kZSgpLm5vZGVOYW1lPT09InN2ZyIpdGhyb3cgbmV3IEVycm9yKCJQbG90dGFibGUgMy54IGFuZCBsYXRlciBjYW4gb25seSByZW5kZXJUbyBhbiBIVE1MIGNvbXBvbmVudDsgcGFzcyBhIGRpdiBpbnN0ZWFkISIpO3RoaXMuYW5jaG9yKHIpfWlmKHRoaXMuX2VsZW1lbnQ9PW51bGwpdGhyb3cgbmV3IEVycm9yKCJJZiBhIENvbXBvbmVudCBoYXMgbmV2ZXIgYmVlbiByZW5kZXJlZCBiZWZvcmUsIHRoZW4gcmVuZGVyVG8gbXVzdCBiZSBnaXZlbiBhIG5vZGUgdG8gcmVuZGVyIHRvLCBvciBhIGQzLlNlbGVjdGlvbiwgb3IgYSBzZWxlY3RvciBzdHJpbmciKTtyZXR1cm4gUkYucmVnaXN0ZXJUb0NvbXB1dGVMYXlvdXRBbmRSZW5kZXIodGhpcyksUkYuZmx1c2goKSx0aGlzfSxlLnByb3RvdHlwZS54QWxpZ25tZW50PWZ1bmN0aW9uKHQpe2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMuX3hBbGlnbm1lbnQ7aWYodD10LnRvTG93ZXJDYXNlKCksZS5feEFsaWduVG9Qcm9wb3J0aW9uW3RdPT1udWxsKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgYWxpZ25tZW50OiAiK3QpO3JldHVybiB0aGlzLl94QWxpZ25tZW50PXQsdGhpcy5yZWRyYXcoKSx0aGlzfSxlLnByb3RvdHlwZS55QWxpZ25tZW50PWZ1bmN0aW9uKHQpe2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMuX3lBbGlnbm1lbnQ7aWYodD10LnRvTG93ZXJDYXNlKCksZS5feUFsaWduVG9Qcm9wb3J0aW9uW3RdPT1udWxsKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgYWxpZ25tZW50OiAiK3QpO3JldHVybiB0aGlzLl95QWxpZ25tZW50PXQsdGhpcy5yZWRyYXcoKSx0aGlzfSxlLnByb3RvdHlwZS5oYXNDbGFzcz1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD8hMTp0aGlzLl9lbGVtZW50PT1udWxsP3RoaXMuX2Nzc0NsYXNzZXMuaGFzKHQpOnRoaXMuX2VsZW1lbnQuY2xhc3NlZCh0KX0sZS5wcm90b3R5cGUuYWRkQ2xhc3M9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/dGhpczoodGhpcy5fZWxlbWVudD09bnVsbD90aGlzLl9jc3NDbGFzc2VzLmFkZCh0KTp0aGlzLl9lbGVtZW50LmNsYXNzZWQodCwhMCksdGhpcyl9LGUucHJvdG90eXBlLnJlbW92ZUNsYXNzPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXM6KHRoaXMuX2VsZW1lbnQ9PW51bGw/dGhpcy5fY3NzQ2xhc3Nlcy5kZWxldGUodCk6dGhpcy5fZWxlbWVudC5jbGFzc2VkKHQsITEpLHRoaXMpfSxlLnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudChudWxsKSx0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9lbGVtZW50LnJlbW92ZSgpLHRoaXMuX2lzQW5jaG9yZWQ9ITEsdGhpcy5fb25EZXRhY2hDYWxsYmFja3MuY2FsbENhbGxiYWNrcyh0aGlzKSx0aGlzfSxlLnByb3RvdHlwZS5vbkRldGFjaD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb25EZXRhY2hDYWxsYmFja3MuYWRkKHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZkRldGFjaD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb25EZXRhY2hDYWxsYmFja3MuZGVsZXRlKHQpLHRoaXN9LGUucHJvdG90eXBlLnBhcmVudD1mdW5jdGlvbih0KXtpZih0PT09dm9pZCAwKXJldHVybiB0aGlzLl9wYXJlbnQ7aWYodCE9PW51bGwmJiF0Lmhhcyh0aGlzKSl0aHJvdyBuZXcgRXJyb3IoIlBhc3NlZCBpbnZhbGlkIHBhcmVudCIpO3JldHVybiB0aGlzLl9wYXJlbnQ9dCx0aGlzfSxlLnByb3RvdHlwZS5ib3VuZHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9yaWdpbigpO3JldHVybnt0b3BMZWZ0OnQsYm90dG9tUmlnaHQ6e3g6dC54K3RoaXMud2lkdGgoKSx5OnQueSt0aGlzLmhlaWdodCgpfX19LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5kZXRhY2goKX0sZS5wcm90b3R5cGUud2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd2lkdGh9LGUucHJvdG90eXBlLmhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9oZWlnaHR9LGUucHJvdG90eXBlLm9yaWdpbj1mdW5jdGlvbigpe3JldHVybnt4OnRoaXMuX29yaWdpbi54LHk6dGhpcy5fb3JpZ2luLnl9fSxlLnByb3RvdHlwZS5vcmlnaW5Ub1Jvb3Q9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5vcmlnaW4oKSxyPXRoaXMucGFyZW50KCk7ciE9bnVsbDspe3ZhciBuPXIub3JpZ2luKCk7dC54Kz1uLngsdC55Kz1uLnkscj1yLnBhcmVudCgpfXJldHVybiB0fSxlLnByb3RvdHlwZS5yb290PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXM7IXQuaXNSb290KCk7KXQ9dC5wYXJlbnQoKTtyZXR1cm4gdH0sZS5wcm90b3R5cGUuaXNSb290PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50KCk9PW51bGx9LGUucHJvdG90eXBlLmZvcmVncm91bmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm9yZWdyb3VuZENvbnRhaW5lcn0sZS5wcm90b3R5cGUuY29udGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250ZW50fSxlLnByb3RvdHlwZS5lbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnR9LGUucHJvdG90eXBlLnJvb3RFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdCgpLl9yb290RWxlbWVudH0sZS5wcm90b3R5cGUuYmFja2dyb3VuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNrZ3JvdW5kQ29udGFpbmVyfSxlLl94QWxpZ25Ub1Byb3BvcnRpb249e2xlZnQ6MCxjZW50ZXI6LjUscmlnaHQ6MX0sZS5feUFsaWduVG9Qcm9wb3J0aW9uPXt0b3A6MCxjZW50ZXI6LjUsYm90dG9tOjF9LGV9KCk7UUEuQ29tcG9uZW50PXd6ZX0pO3ZhciBCdT1IKEZ1PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGdSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHZTPShFcigpLFV0KE1yKSksU3plPSExO2Z1bmN0aW9uIE16ZShlLHQscil7ZT09PXZvaWQgMCYmKGU9MiksdD09PXZvaWQgMCYmKHQ9IiQiKSxyPT09dm9pZCAwJiYocj0hMCk7dmFyIG49cWl0KGUpO3JldHVybiBmdW5jdGlvbihpKXt2YXIgbz1uKE1hdGguYWJzKGkpKTtyZXR1cm4gbyE9PSIiJiYocj9vPXQrbzpvKz10LGk8MCYmKG89Ii0iK28pKSxvfX1GdS5jdXJyZW5jeT1NemU7ZnVuY3Rpb24gcWl0KGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT0zKSxORihlKSxmdW5jdGlvbih0KXtyZXR1cm4gdC50b0ZpeGVkKGUpfX1GdS5maXhlZD1xaXQ7ZnVuY3Rpb24gRXplKGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT0zKSxORihlKSxmdW5jdGlvbih0KXtpZih0eXBlb2YgdD09Im51bWJlciIpe3ZhciByPU1hdGgucG93KDEwLGUpO3JldHVybiBTdHJpbmcoTWF0aC5yb3VuZCh0KnIpL3IpfWVsc2UgcmV0dXJuIFN0cmluZyh0KX19RnUuZ2VuZXJhbD1FemU7ZnVuY3Rpb24gVHplKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBTdHJpbmcoZSl9fUZ1LmlkZW50aXR5PVR6ZTtmdW5jdGlvbiBDemUoZSl7ZT09PXZvaWQgMCYmKGU9MCk7dmFyIHQ9cWl0KGUpO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1yKjEwMCxpPXIudG9TdHJpbmcoKSxvPU1hdGgucG93KDEwLGkubGVuZ3RoLShpLmluZGV4T2YoIi4iKSsxKSk7cmV0dXJuIG49cGFyc2VJbnQoKG4qbykudG9TdHJpbmcoKSwxMCkvbyx0KG4pKyIlIn19RnUucGVyY2VudGFnZT1DemU7ZnVuY3Rpb24gQXplKGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT0zKSxORihlKSxmdW5jdGlvbih0KXtyZXR1cm4gdlMuZm9ybWF0KCIuIitlKyJzIikodCl9fUZ1LnNpU3VmZml4PUF6ZTtmdW5jdGlvbiBQemUoZSl7ZT09PXZvaWQgMCYmKGU9MyksTkYoZSk7dmFyIHQ9IktNQlRRIixyPXZTLmZvcm1hdCgiLiIrZSsiZSIpLG49dlMuZm9ybWF0KCIuIitlKyJmIiksaT1NYXRoLnBvdygxMCwzKih0Lmxlbmd0aCsxKSksbz1NYXRoLnBvdygxMCwtZSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBzPU1hdGguYWJzKGEpO2lmKChzPG98fHM+PWkpJiZzIT09MClyZXR1cm4gcihhKTtmb3IodmFyIGw9LTE7cz49TWF0aC5wb3coMWUzLGwrMikmJmw8dC5sZW5ndGgtMTspbCsrO3ZhciBjPSIiO3JldHVybiBsPT09LTE/Yz1uKGEpOmM9bihhL01hdGgucG93KDFlMyxsKzEpKSt0W2xdLChhPjAmJmMuc3Vic3RyKDAsNCk9PT0iMTAwMCJ8fGE8MCYmYy5zdWJzdHIoMCw1KT09PSItMTAwMCIpJiYobDx0Lmxlbmd0aC0xPyhsKyssYz1uKGEvTWF0aC5wb3coMWUzLGwrMSkpK3RbbF0pOmM9cihhKSksY319RnUuc2hvcnRTY2FsZT1QemU7ZnVuY3Rpb24gSXplKCl7dmFyIGU9W3tzcGVjaWZpZXI6Ii4lTCIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbGxpc2Vjb25kcygpIT09MH19LHtzcGVjaWZpZXI6IjolUyIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFNlY29uZHMoKSE9PTB9fSx7c3BlY2lmaWVyOiIlSTolTSIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKSE9PTB9fSx7c3BlY2lmaWVyOiIlSSAlcCIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEhvdXJzKCkhPT0wfX0se3NwZWNpZmllcjoiJWEgJWQiLHByZWRpY2F0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXkoKSE9PTAmJnQuZ2V0RGF0ZSgpIT09MX19LHtzcGVjaWZpZXI6IiViICVkIixwcmVkaWNhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RGF0ZSgpIT09MX19LHtzcGVjaWZpZXI6IiViIixwcmVkaWNhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TW9udGgoKSE9PTB9fV07cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPWUuZmlsdGVyKGZ1bmN0aW9uKGkpe3JldHVybiBpLnByZWRpY2F0ZSh0KX0pLG49ci5sZW5ndGg+MD9yWzBdLnNwZWNpZmllcjoiJVkiO3JldHVybiB2Uy50aW1lRm9ybWF0KG4pKHQpfX1GdS5tdWx0aVRpbWU9SXplO2Z1bmN0aW9uIEx6ZShlLHQpe3JldHVybiB0PT09dm9pZCAwJiYodD1TemUpLHQ/dlMudXRjRm9ybWF0KGUpOnZTLnRpbWVGb3JtYXQoZSl9RnUudGltZT1MemU7ZnVuY3Rpb24gTkYoZSl7aWYoZTwwfHxlPjIwKXRocm93IG5ldyBSYW5nZUVycm9yKCJGb3JtYXR0ZXIgcHJlY2lzaW9uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAyMCIpO2lmKGUhPT1NYXRoLmZsb29yKGUpKXRocm93IG5ldyBSYW5nZUVycm9yKCJGb3JtYXR0ZXIgcHJlY2lzaW9uIG11c3QgYmUgYW4gaW50ZWdlciIpfX0pO3ZhciB0ND1IKERGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShERiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGt6ZT0oZGUoKSxVdChwZSkpLHZkPShFcigpLFV0KE1yKSksR2l0PXlsKCksUnplPWtjKCksalh0PUJ1KCkseFM9RmUoKSxOemU9TGYoKTtERi5BeGlzT3JpZW50YXRpb249TnplLm1ha2VFbnVtKFsiYm90dG9tIiwibGVmdCIsInJpZ2h0IiwidG9wIl0pO3ZhciBEemU9ZnVuY3Rpb24oZSl7a3plLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocixuKXt2YXIgaT1lLmNhbGwodGhpcyl8fHRoaXM7aWYoaS5fZW5kVGlja0xlbmd0aD01LGkuX2lubmVyVGlja0xlbmd0aD01LGkuX3RpY2tMYWJlbFBhZGRpbmc9MTAsaS5fbWFyZ2luPTE1LGkuX3Nob3dFbmRUaWNrTGFiZWxzPSExLGkuX2Fubm90YXRpb25zRW5hYmxlZD0hMSxpLl9hbm5vdGF0aW9uVGllckNvdW50PTEscj09bnVsbHx8bj09bnVsbCl0aHJvdyBuZXcgRXJyb3IoIkF4aXMgcmVxdWlyZXMgYSBzY2FsZSBhbmQgb3JpZW50YXRpb24iKTtyZXR1cm4gaS5fc2NhbGU9cixpLm9yaWVudGF0aW9uKG4pLGkuX3NldERlZmF1bHRBbGlnbm1lbnQoKSxpLmFkZENsYXNzKCJheGlzIiksaS5pc0hvcml6b250YWwoKT9pLmFkZENsYXNzKCJ4LWF4aXMiKTppLmFkZENsYXNzKCJ5LWF4aXMiKSxpLmZvcm1hdHRlcihqWHQuaWRlbnRpdHkoKSksaS5fcmVzY2FsZUNhbGxiYWNrPWZ1bmN0aW9uKG8pe3JldHVybiBpLl9yZXNjYWxlKCl9LGkuX3NjYWxlLm9uVXBkYXRlKGkuX3Jlc2NhbGVDYWxsYmFjayksaS5fYW5ub3RhdGVkVGlja3M9W10saS5fYW5ub3RhdGlvbkZvcm1hdHRlcj1qWHQuaWRlbnRpdHkoKSxpfXJldHVybiB0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX3NjYWxlLm9mZlVwZGF0ZSh0aGlzLl9yZXNjYWxlQ2FsbGJhY2spfSx0LnByb3RvdHlwZS50aWNrTGFiZWxEYXRhT25FbGVtZW50PWZ1bmN0aW9uKHIpe2lmKHIhPW51bGwpe2Zvcih2YXIgbjtyIT1udWxsJiZyLmNsYXNzTGlzdCYmbj09PXZvaWQgMDspci5jbGFzc0xpc3QuY29udGFpbnModC5USUNLX0xBQkVMX0NMQVNTKT9uPXI6cj1yLnBhcmVudE5vZGU7cmV0dXJuIHI9PT12b2lkIDA/dm9pZCAwOnZkLnNlbGVjdChyKS5kYXR1bSgpfX0sdC5wcm90b3R5cGUuX2NvbXB1dGVXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKX0sdC5wcm90b3R5cGUuX2NvbXB1dGVIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCl9LHQucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9MCxvPTA7aWYodGhpcy5pc0hvcml6b250YWwoKSl7aWYobz10aGlzLl9jb21wdXRlSGVpZ2h0KCkrdGhpcy5fbWFyZ2luLHRoaXMuYW5ub3RhdGlvbnNFbmFibGVkKCkpe3ZhciBhPXRoaXMuX2Fubm90YXRpb25NZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0KzIqdC5fQU5OT1RBVElPTl9MQUJFTF9QQURESU5HO28rPWEqdGhpcy5hbm5vdGF0aW9uVGllckNvdW50KCl9fWVsc2UgaWYoaT10aGlzLl9jb21wdXRlV2lkdGgoKSt0aGlzLl9tYXJnaW4sdGhpcy5hbm5vdGF0aW9uc0VuYWJsZWQoKSl7dmFyIGE9dGhpcy5fYW5ub3RhdGlvbk1lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQrMip0Ll9BTk5PVEFUSU9OX0xBQkVMX1BBRERJTkc7aSs9YSp0aGlzLmFubm90YXRpb25UaWVyQ291bnQoKX1yZXR1cm57bWluV2lkdGg6aSxtaW5IZWlnaHQ6b319LHQucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNIb3Jpem9udGFsKCl9LHQucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5pc0hvcml6b250YWwoKX0sdC5wcm90b3R5cGUuX3Jlc2NhbGU9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcigpfSx0LnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PWZ1bmN0aW9uKHIsbixpKXtyZXR1cm4gZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMscixuLGkpLHRoaXMuaXNIb3Jpem9udGFsKCk/dGhpcy5fc2NhbGUucmFuZ2UoWzAsdGhpcy53aWR0aCgpXSk6dGhpcy5fc2NhbGUucmFuZ2UoW3RoaXMuaGVpZ2h0KCksMF0pLHRoaXN9LHQucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5yZXF1ZXN0ZWRTcGFjZShyLG4pO3JldHVybiB0aGlzLmlzSG9yaXpvbnRhbCgpP3t3aWR0aDpyLGhlaWdodDppLm1pbkhlaWdodH06e2hlaWdodDpuLHdpZHRoOmkubWluV2lkdGh9fSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl90aWNrTWFya0NvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKHQuVElDS19NQVJLX0NMQVNTKyItY29udGFpbmVyIiwhMCksdGhpcy5fdGlja0xhYmVsQ29udGFpbmVyPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpLmNsYXNzZWQodC5USUNLX0xBQkVMX0NMQVNTKyItY29udGFpbmVyIiwhMCksdGhpcy5fYmFzZWxpbmU9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCgiYmFzZWxpbmUiLCEwKSx0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImFubm90YXRpb24tY29udGFpbmVyIiwhMCksdGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5hcHBlbmQoImciKS5jbGFzc2VkKCJhbm5vdGF0aW9uLWxpbmUtY29udGFpbmVyIiwhMCksdGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5hcHBlbmQoImciKS5jbGFzc2VkKCJhbm5vdGF0aW9uLWNpcmNsZS1jb250YWluZXIiLCEwKSx0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImFubm90YXRpb24tcmVjdC1jb250YWluZXIiLCEwKTt2YXIgcj10aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImFubm90YXRpb24tbGFiZWwtY29udGFpbmVyIiwhMCksbj1uZXcgR2l0LlN2Z0NvbnRleHQoci5ub2RlKCkpO3RoaXMuX2Fubm90YXRpb25NZWFzdXJlcj1uZXcgR2l0LkNhY2hlTWVhc3VyZXIobiksdGhpcy5fYW5ub3RhdGlvbldyaXRlcj1uZXcgR2l0LldyaXRlcih0aGlzLl9hbm5vdGF0aW9uTWVhc3VyZXIsbil9LHQucHJvdG90eXBlLl9nZXRUaWNrVmFsdWVzPWZ1bmN0aW9uKCl7cmV0dXJuW119LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fZ2V0VGlja1ZhbHVlcygpLG49dGhpcy5fdGlja01hcmtDb250YWluZXIuc2VsZWN0QWxsKCIuIit0LlRJQ0tfTUFSS19DTEFTUykuZGF0YShyKSxpPW4uZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKHQuVElDS19NQVJLX0NMQVNTLCEwKS5tZXJnZShuKTtyZXR1cm4gaS5hdHRycyh0aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goKSksdmQuc2VsZWN0KGkubm9kZXMoKVswXSkuY2xhc3NlZCh0LkVORF9USUNLX01BUktfQ0xBU1MsITApLmF0dHJzKHRoaXMuX2dlbmVyYXRlVGlja01hcmtBdHRySGFzaCghMCkpLHZkLnNlbGVjdChpLm5vZGVzKClbci5sZW5ndGgtMV0pLmNsYXNzZWQodC5FTkRfVElDS19NQVJLX0NMQVNTLCEwKS5hdHRycyh0aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goITApKSxuLmV4aXQoKS5yZW1vdmUoKSx0aGlzLl9iYXNlbGluZS5hdHRycyh0aGlzLl9nZW5lcmF0ZUJhc2VsaW5lQXR0ckhhc2goKSksdGhpcy5hbm5vdGF0aW9uc0VuYWJsZWQoKT90aGlzLl9kcmF3QW5ub3RhdGlvbnMoKTp0aGlzLl9yZW1vdmVBbm5vdGF0aW9ucygpLHRoaXN9LHQucHJvdG90eXBlLmFubm90YXRlZFRpY2tzPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2Fubm90YXRlZFRpY2tzOih0aGlzLl9hbm5vdGF0ZWRUaWNrcz1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLmFubm90YXRpb25Gb3JtYXR0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fYW5ub3RhdGlvbkZvcm1hdHRlcjoodGhpcy5fYW5ub3RhdGlvbkZvcm1hdHRlcj1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLmFubm90YXRpb25zRW5hYmxlZD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9hbm5vdGF0aW9uc0VuYWJsZWQ6KHRoaXMuX2Fubm90YXRpb25zRW5hYmxlZD1yLHRoaXMucmVkcmF3KCksdGhpcyl9LHQucHJvdG90eXBlLmFubm90YXRpb25UaWVyQ291bnQ9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fYW5ub3RhdGlvblRpZXJDb3VudDtpZihyPDApdGhyb3cgbmV3IEVycm9yKCJhbm5vdGF0aW9uVGllckNvdW50IGNhbm5vdCBiZSBuZWdhdGl2ZSIpO3JldHVybiB0aGlzLl9hbm5vdGF0aW9uVGllckNvdW50PXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5fZHJhd0Fubm90YXRpb25zPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXQuX0FOTk9UQVRJT05fTEFCRUxfUEFERElORyxpPW5ldyB4Uy5NYXAsbz10aGlzLl9hbm5vdGF0ZWRUaWNrc1RvUmVuZGVyKCk7by5mb3JFYWNoKGZ1bmN0aW9uKFApe3ZhciBrPXIuX2Fubm90YXRpb25NZWFzdXJlci5tZWFzdXJlKHIuYW5ub3RhdGlvbkZvcm1hdHRlcigpKFApKSxPPXt3aWR0aDprLndpZHRoKzIqbixoZWlnaHQ6ay5oZWlnaHQrMipufTtpLnNldChQLE8pfSk7dmFyIGE9dGhpcy5fYW5ub3RhdGlvbk1lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQrMipuLHM9dGhpcy5fYW5ub3RhdGlvblRvVGllcihpKSxsPW5ldyB4Uy5TZXQsYz10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMuaGVpZ2h0KCk6dGhpcy53aWR0aCgpLHU9dGhpcy5fY29yZVNpemUoKSxoPU1hdGgubWluKHRoaXMuYW5ub3RhdGlvblRpZXJDb3VudCgpLE1hdGguZmxvb3IoKGMtdSkvYSkpO3MuZm9yRWFjaChmdW5jdGlvbihQLGspeyhQPT09LTF8fFA+PWgpJiZsLmFkZChrKX0pO3ZhciBmPWZ1bmN0aW9uKFAsayxPKXt2YXIgRD1QLnNlbGVjdEFsbCgiLiIrTykuZGF0YShvKSxCPUQuZW50ZXIoKS5hcHBlbmQoaykuY2xhc3NlZChPLCEwKS5tZXJnZShEKTtyZXR1cm4gRC5leGl0KCkucmVtb3ZlKCksQn0scD1mdW5jdGlvbihQKXtzd2l0Y2goci5vcmllbnRhdGlvbigpKXtjYXNlImJvdHRvbSI6Y2FzZSJyaWdodCI6cmV0dXJuIHMuZ2V0KFApKmErdTtjYXNlInRvcCI6Y2FzZSJsZWZ0IjpyZXR1cm4gYy11LXMuZ2V0KFApKmF9fSxkPWZ1bmN0aW9uKFApe3JldHVybiByLl9zY2FsZS5zY2FsZShQKX0sZz1mdW5jdGlvbihQKXtyZXR1cm4gbC5oYXMoUCk/ImhpZGRlbiI6InZpc2libGUifSxfO3N3aXRjaCh0aGlzLm9yaWVudGF0aW9uKCkpe2Nhc2UiYm90dG9tIjpjYXNlInJpZ2h0IjpfPTA7YnJlYWs7Y2FzZSJ0b3AiOl89dGhpcy5oZWlnaHQoKTticmVhaztjYXNlImxlZnQiOl89dGhpcy53aWR0aCgpO2JyZWFrfXZhciB5PXRoaXMuaXNIb3Jpem9udGFsKCk7Zih0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLnNlbGVjdCgiLmFubm90YXRpb24tbGluZS1jb250YWluZXIiKSwibGluZSIsdC5BTk5PVEFUSU9OX0xJTkVfQ0xBU1MpLmF0dHJzKHt4MTp5P2Q6Xyx4Mjp5P2Q6cCx5MTp5P186ZCx5Mjp5P3A6ZCx2aXNpYmlsaXR5Omd9KSxmKHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0KCIuYW5ub3RhdGlvbi1jaXJjbGUtY29udGFpbmVyIiksImNpcmNsZSIsdC5BTk5PVEFUSU9OX0NJUkNMRV9DTEFTUykuYXR0cnMoe2N4Onk/ZDpfLGN5Onk/XzpkLHI6M30pO3ZhciB4PWZ1bmN0aW9uKFApe3N3aXRjaChyLm9yaWVudGF0aW9uKCkpe2Nhc2UiYm90dG9tIjpjYXNlInJpZ2h0IjpyZXR1cm4gcChQKTtjYXNlInRvcCI6Y2FzZSJsZWZ0IjpyZXR1cm4gcChQKS1pLmdldChQKS5oZWlnaHR9fTtmKHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0KCIuYW5ub3RhdGlvbi1yZWN0LWNvbnRhaW5lciIpLCJyZWN0Iix0LkFOTk9UQVRJT05fUkVDVF9DTEFTUykuYXR0cnMoe3g6eT9kOngseTp5P3g6ZCx3aWR0aDp5P2Z1bmN0aW9uKFApe3JldHVybiBpLmdldChQKS53aWR0aH06ZnVuY3Rpb24oUCl7cmV0dXJuIGkuZ2V0KFApLmhlaWdodH0saGVpZ2h0Onk/ZnVuY3Rpb24oUCl7cmV0dXJuIGkuZ2V0KFApLmhlaWdodH06ZnVuY3Rpb24oUCl7cmV0dXJuIGkuZ2V0KFApLndpZHRofSx2aXNpYmlsaXR5Omd9KTt2YXIgYj10aGlzLl9hbm5vdGF0aW9uV3JpdGVyLFM9dGhpcy5hbm5vdGF0aW9uRm9ybWF0dGVyKCksQz1mKHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0KCIuYW5ub3RhdGlvbi1sYWJlbC1jb250YWluZXIiKSwiZyIsdC5BTk5PVEFUSU9OX0xBQkVMX0NMQVNTKTtDLnNlbGVjdEFsbCgiLnRleHQtY29udGFpbmVyIikucmVtb3ZlKCksQy5hdHRycyh7dHJhbnNmb3JtOmZ1bmN0aW9uKFApe3ZhciBrPXk/ZChQKTp4KFApLE89eT94KFApOmQoUCk7cmV0dXJuInRyYW5zbGF0ZSgiK2srIiwiK08rIikifSx2aXNpYmlsaXR5Omd9KS5lYWNoKGZ1bmN0aW9uKFApe2Iud3JpdGUoUyhQKSx5P2kuZ2V0KFApLndpZHRoOmkuZ2V0KFApLmhlaWdodCx5P2kuZ2V0KFApLmhlaWdodDppLmdldChQKS53aWR0aCx7eEFsaWduOiJjZW50ZXIiLHlBbGlnbjoiY2VudGVyIix0ZXh0Um90YXRpb246eT8wOjkwfSx2ZC5zZWxlY3QodGhpcykubm9kZSgpKX0pfSx0LnByb3RvdHlwZS5fYW5ub3RhdGVkVGlja3NUb1JlbmRlcj1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj10aGlzLl9zY2FsZS5yYW5nZSgpO3JldHVybiB4Uy5BcnJheS51bmlxKHRoaXMuYW5ub3RhdGVkVGlja3MoKS5maWx0ZXIoZnVuY3Rpb24oaSl7cmV0dXJuIGk9PW51bGw/ITE6eFMuTWF0aC5pblJhbmdlKHIuX3NjYWxlLnNjYWxlKGkpLG5bMF0sblsxXSl9KSl9LHQucHJvdG90eXBlLl9jb3JlU2l6ZT1mdW5jdGlvbigpe3ZhciByPXRoaXMuaXNIb3Jpem9udGFsKCk/dGhpcy5oZWlnaHQoKTp0aGlzLndpZHRoKCksbj10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMuX2NvbXB1dGVIZWlnaHQoKTp0aGlzLl9jb21wdXRlV2lkdGgoKTtyZXR1cm4gTWF0aC5taW4obixyKX0sdC5wcm90b3R5cGUuX2Fubm90YXRpb25UaWVySGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fubm90YXRpb25NZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0KzIqdC5fQU5OT1RBVElPTl9MQUJFTF9QQURESU5HfSx0LnByb3RvdHlwZS5fYW5ub3RhdGlvblRvVGllcj1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9W1tdXSxvPW5ldyB4Uy5NYXAsYT10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMud2lkdGgoKTp0aGlzLmhlaWdodCgpO3JldHVybiB0aGlzLl9hbm5vdGF0ZWRUaWNrc1RvUmVuZGVyKCkuZm9yRWFjaChmdW5jdGlvbihzKXt2YXIgbD1uLl9zY2FsZS5zY2FsZShzKSxjPXIuZ2V0KHMpLndpZHRoO2lmKGw8MHx8bCtjPmEpe28uc2V0KHMsLTEpO3JldHVybn1mb3IodmFyIHU9ZnVuY3Rpb24oZil7cmV0dXJuIGlbZl0uc29tZShmdW5jdGlvbihwKXt2YXIgZD1uLl9zY2FsZS5zY2FsZShwKSxnPXIuZ2V0KHApLndpZHRoO3JldHVybiBsK2M+PWQmJmw8PWQrZ30pfSxoPTA7dShoKTspaCsrLGkubGVuZ3RoPT09aCYmaS5wdXNoKFtdKTtpW2hdLnB1c2gocyksby5zZXQocyxoKX0pLG99LHQucHJvdG90eXBlLl9yZW1vdmVBbm5vdGF0aW9ucz1mdW5jdGlvbigpe3RoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0QWxsKCIuYW5ub3RhdGlvbi1saW5lIikucmVtb3ZlKCksdGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uLWNpcmNsZSIpLnJlbW92ZSgpLHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0QWxsKCIuYW5ub3RhdGlvbi1yZWN0IikucmVtb3ZlKCksdGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uLWxhYmVsIikucmVtb3ZlKCl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZUJhc2VsaW5lQXR0ckhhc2g9ZnVuY3Rpb24oKXt2YXIgcj17eDE6MCx5MTowLHgyOjAseTI6MH07c3dpdGNoKHRoaXMuX29yaWVudGF0aW9uKXtjYXNlImJvdHRvbSI6ci54Mj10aGlzLndpZHRoKCk7YnJlYWs7Y2FzZSJ0b3AiOnIueDI9dGhpcy53aWR0aCgpLHIueTE9dGhpcy5oZWlnaHQoKSxyLnkyPXRoaXMuaGVpZ2h0KCk7YnJlYWs7Y2FzZSJsZWZ0IjpyLngxPXRoaXMud2lkdGgoKSxyLngyPXRoaXMud2lkdGgoKSxyLnkyPXRoaXMuaGVpZ2h0KCk7YnJlYWs7Y2FzZSJyaWdodCI6ci55Mj10aGlzLmhlaWdodCgpO2JyZWFrfXJldHVybiByfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVUaWNrTWFya0F0dHJIYXNoPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cj09PXZvaWQgMCYmKHI9ITEpO3ZhciBpPXt4MTowLHkxOjAseDI6MCx5MjowfSxvPWZ1bmN0aW9uKHMpe3JldHVybiBuLl9zY2FsZS5zY2FsZShzKX07dGhpcy5pc0hvcml6b250YWwoKT8oaS54MT1vLGkueDI9byk6KGkueTE9byxpLnkyPW8pO3ZhciBhPXI/dGhpcy5fZW5kVGlja0xlbmd0aDp0aGlzLl9pbm5lclRpY2tMZW5ndGg7c3dpdGNoKHRoaXMuX29yaWVudGF0aW9uKXtjYXNlImJvdHRvbSI6aS55Mj1hO2JyZWFrO2Nhc2UidG9wIjppLnkxPXRoaXMuaGVpZ2h0KCksaS55Mj10aGlzLmhlaWdodCgpLWE7YnJlYWs7Y2FzZSJsZWZ0IjppLngxPXRoaXMud2lkdGgoKSxpLngyPXRoaXMud2lkdGgoKS1hO2JyZWFrO2Nhc2UicmlnaHQiOmkueDI9YTticmVha31yZXR1cm4gaX0sdC5wcm90b3R5cGUuX3NldERlZmF1bHRBbGlnbm1lbnQ9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fb3JpZW50YXRpb24pe2Nhc2UiYm90dG9tIjp0aGlzLnlBbGlnbm1lbnQoInRvcCIpO2JyZWFrO2Nhc2UidG9wIjp0aGlzLnlBbGlnbm1lbnQoImJvdHRvbSIpO2JyZWFrO2Nhc2UibGVmdCI6dGhpcy54QWxpZ25tZW50KCJyaWdodCIpO2JyZWFrO2Nhc2UicmlnaHQiOnRoaXMueEFsaWdubWVudCgibGVmdCIpO2JyZWFrfX0sdC5wcm90b3R5cGUuaXNIb3Jpem9udGFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29yaWVudGF0aW9uPT09InRvcCJ8fHRoaXMuX29yaWVudGF0aW9uPT09ImJvdHRvbSJ9LHQucHJvdG90eXBlLmdldFNjYWxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NjYWxlfSx0LnByb3RvdHlwZS5mb3JtYXR0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZm9ybWF0dGVyOih0aGlzLl9mb3JtYXR0ZXI9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5pbm5lclRpY2tMZW5ndGg9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5faW5uZXJUaWNrTGVuZ3RoO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoImlubmVyIHRpY2sgbGVuZ3RoIG11c3QgYmUgcG9zaXRpdmUiKTtyZXR1cm4gdGhpcy5faW5uZXJUaWNrTGVuZ3RoPXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5lbmRUaWNrTGVuZ3RoPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX2VuZFRpY2tMZW5ndGg7aWYocjwwKXRocm93IG5ldyBFcnJvcigiZW5kIHRpY2sgbGVuZ3RoIG11c3QgYmUgcG9zaXRpdmUiKTtyZXR1cm4gdGhpcy5fZW5kVGlja0xlbmd0aD1yLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUuX21heExhYmVsVGlja0xlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNob3dFbmRUaWNrTGFiZWxzKCk/TWF0aC5tYXgodGhpcy5pbm5lclRpY2tMZW5ndGgoKSx0aGlzLmVuZFRpY2tMZW5ndGgoKSk6dGhpcy5pbm5lclRpY2tMZW5ndGgoKX0sdC5wcm90b3R5cGUudGlja0xhYmVsUGFkZGluZz1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl90aWNrTGFiZWxQYWRkaW5nO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoInRpY2sgbGFiZWwgcGFkZGluZyBtdXN0IGJlIHBvc2l0aXZlIik7cmV0dXJuIHRoaXMuX3RpY2tMYWJlbFBhZGRpbmc9cix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLm1hcmdpbj1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9tYXJnaW47aWYocjwwKXRocm93IG5ldyBFcnJvcigibWFyZ2luIHNpemUgbXVzdCBiZSBwb3NpdGl2ZSIpO3JldHVybiB0aGlzLl9tYXJnaW49cix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLm9yaWVudGF0aW9uPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uO3ZhciBuPXIudG9Mb3dlckNhc2UoKTtpZihuIT09InRvcCImJm4hPT0iYm90dG9tIiYmbiE9PSJsZWZ0IiYmbiE9PSJyaWdodCIpdGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCBvcmllbnRhdGlvbiIpO3JldHVybiB0aGlzLl9vcmllbnRhdGlvbj1uLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUuc2hvd0VuZFRpY2tMYWJlbHM9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fc2hvd0VuZFRpY2tMYWJlbHM6KHRoaXMuX3Nob3dFbmRUaWNrTGFiZWxzPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuX3Nob3dBbGxUaWNrTWFya3M9ZnVuY3Rpb24oKXt0aGlzLl90aWNrTWFya0NvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3QuVElDS19NQVJLX0NMQVNTKS5lYWNoKGZ1bmN0aW9uKCl7dmQuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaW5oZXJpdCIpfSl9LHQucHJvdG90eXBlLl9zaG93QWxsVGlja0xhYmVscz1mdW5jdGlvbigpe3RoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3QuVElDS19MQUJFTF9DTEFTUykuZWFjaChmdW5jdGlvbigpe3ZkLnNlbGVjdCh0aGlzKS5zdHlsZSgidmlzaWJpbGl0eSIsImluaGVyaXQiKX0pfSx0LnByb3RvdHlwZS5faGlkZU92ZXJmbG93aW5nVGlja0xhYmVscz1mdW5jdGlvbigpe3ZhciByPXRoaXMuZWxlbWVudCgpLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3QuVElDS19MQUJFTF9DTEFTUyk7bi5lbXB0eSgpfHxuLmVhY2goZnVuY3Rpb24oaSxvKXt4Uy5ET00uY2xpZW50UmVjdEluc2lkZSh0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHIpfHx2ZC5zZWxlY3QodGhpcykuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKX0pfSx0LnByb3RvdHlwZS5faGlkZVRpY2tNYXJrc1dpdGhvdXRMYWJlbD1mdW5jdGlvbigpe3ZhciByPXRoaXMuX3RpY2tNYXJrQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrdC5USUNLX01BUktfQ0xBU1MpLG49dGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrdC5USUNLX0xBQkVMX0NMQVNTKS5maWx0ZXIoZnVuY3Rpb24obyxhKXt2YXIgcz12ZC5zZWxlY3QodGhpcykuc3R5bGUoInZpc2liaWxpdHkiKTtyZXR1cm4gcz09PSJpbmhlcml0Inx8cz09PSJ2aXNpYmxlIn0pLGk9bi5kYXRhKCk7ci5lYWNoKGZ1bmN0aW9uKG8sYSl7aS5pbmRleE9mKG8pPT09LTEmJnZkLnNlbGVjdCh0aGlzKS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpfSl9LHQucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZT1mdW5jdGlvbigpe2UucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZS5jYWxsKHRoaXMpLHRoaXMuX2Fubm90YXRpb25NZWFzdXJlci5yZXNldCgpfSx0LkVORF9USUNLX01BUktfQ0xBU1M9ImVuZC10aWNrLW1hcmsiLHQuVElDS19NQVJLX0NMQVNTPSJ0aWNrLW1hcmsiLHQuVElDS19MQUJFTF9DTEFTUz0idGljay1sYWJlbCIsdC5BTk5PVEFUSU9OX0xJTkVfQ0xBU1M9ImFubm90YXRpb24tbGluZSIsdC5BTk5PVEFUSU9OX1JFQ1RfQ0xBU1M9ImFubm90YXRpb24tcmVjdCIsdC5BTk5PVEFUSU9OX0NJUkNMRV9DTEFTUz0iYW5ub3RhdGlvbi1jaXJjbGUiLHQuQU5OT1RBVElPTl9MQUJFTF9DTEFTUz0iYW5ub3RhdGlvbi1sYWJlbCIsdC5fQU5OT1RBVElPTl9MQUJFTF9QQURESU5HPTQsdH0oUnplLkNvbXBvbmVudCk7REYuQXhpcz1EemV9KTt2YXIgJFh0PUgoaml0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBPemU9KGRlKCksVXQocGUpKSxXaXQ9KEVyKCksVXQoTXIpKSxPRj15bCgpLHp6ZT1rYygpLFhYdD1GZSgpLFlpdD10NCgpLEZ6ZT1mdW5jdGlvbihlKXtPemUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyLG4pe249PT12b2lkIDAmJihuPSJib3R0b20iKTt2YXIgaT1lLmNhbGwodGhpcyxyLG4pfHx0aGlzO3JldHVybiBpLl90aWNrTGFiZWxBbmdsZT0wLGkuX3RpY2tMYWJlbFNoZWFyQW5nbGU9MCxpLmFkZENsYXNzKCJjYXRlZ29yeS1heGlzIiksaX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJfd3JhcHBlciIse2dldDpmdW5jdGlvbigpe3ZhciByPW5ldyBPRi5XcmFwcGVyO3JldHVybiB0aGlzLl90aWNrTGFiZWxNYXhMaW5lcyE9bnVsbCYmci5tYXhMaW5lcyh0aGlzLl90aWNrTGFiZWxNYXhMaW5lcykscn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIl93cml0ZXIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE9GLldyaXRlcih0aGlzLl9tZWFzdXJlcix0aGlzLl90eXBlc2V0dGVyQ29udGV4dCx0aGlzLl93cmFwcGVyKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl90eXBlc2V0dGVyQ29udGV4dD1uZXcgT0YuU3ZnQ29udGV4dCh0aGlzLl90aWNrTGFiZWxDb250YWluZXIubm9kZSgpKSx0aGlzLl9tZWFzdXJlcj1uZXcgT0YuQ2FjaGVNZWFzdXJlcih0aGlzLl90eXBlc2V0dGVyQ29udGV4dCl9LHQucHJvdG90eXBlLl9yZXNjYWxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVkcmF3KCl9LHQucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5pc0hvcml6b250YWwoKT8wOnRoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCkrdGhpcy5tYXJnaW4oKSxvPXRoaXMuaXNIb3Jpem9udGFsKCk/dGhpcy5fdGlja1NwYWNlUmVxdWlyZWQoKSt0aGlzLm1hcmdpbigpOjA7aWYodGhpcy5fc2NhbGUuZG9tYWluKCkubGVuZ3RoPT09MClyZXR1cm57bWluV2lkdGg6MCxtaW5IZWlnaHQ6MH07aWYodGhpcy5hbm5vdGF0aW9uc0VuYWJsZWQoKSl7dmFyIGE9dGhpcy5fYW5ub3RhdGlvblRpZXJIZWlnaHQoKSp0aGlzLmFubm90YXRpb25UaWVyQ291bnQoKTt0aGlzLmlzSG9yaXpvbnRhbCgpP28rPWE6aSs9YX12YXIgcz10aGlzLl9tZWFzdXJlVGlja0xhYmVscyhyLG4pO3JldHVybnttaW5XaWR0aDpzLnVzZWRXaWR0aCtpLG1pbkhlaWdodDpzLnVzZWRIZWlnaHQrb319LHQucHJvdG90eXBlLl9jb3JlU2l6ZT1mdW5jdGlvbigpe3ZhciByPXRoaXMuaXNIb3Jpem9udGFsKCk/dGhpcy5oZWlnaHQoKTp0aGlzLndpZHRoKCksbj10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMucmVxdWVzdGVkU3BhY2UodGhpcy53aWR0aCgpLHRoaXMuaGVpZ2h0KCkpLm1pbkhlaWdodDp0aGlzLnJlcXVlc3RlZFNwYWNlKHRoaXMud2lkdGgoKSx0aGlzLmhlaWdodCgpKS5taW5XaWR0aCxpPXRoaXMubWFyZ2luKCkrdGhpcy5fYW5ub3RhdGlvblRpZXJIZWlnaHQoKSxvPW4taTtyZXR1cm4gTWF0aC5taW4obyxyKX0sdC5wcm90b3R5cGUuX2dldFRpY2tWYWx1ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXREb3duc2FtcGxlSW5mbygpLmRvbWFpbn0sdC5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXI9ZnVuY3Rpb24ocixuKXtyZXR1cm4genplLkNvbXBvbmVudC5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXIuY2FsbCh0aGlzLHIsbil9LHQucHJvdG90eXBlLmdldERvd25zYW1wbGVJbmZvPWZ1bmN0aW9uKHIsbil7cj09PXZvaWQgMCYmKHI9dGhpcy5fc2NhbGUpLG49PT12b2lkIDAmJihuPXIuaW52ZXJ0UmFuZ2UoKSk7dmFyIGk9dGhpcy5fdGlja0xhYmVsQW5nbGU9PT0wPzE6MS9NYXRoLmNvcyh0aGlzLl90aWNrTGFiZWxTaGVhckFuZ2xlLzE4MCpNYXRoLlBJKSxvPXQuX01JTklNVU1fV0lEVEhfUEVSX0xBQkVMX1BYKmksYT1NYXRoLmNlaWwoby9yLnN0ZXBXaWR0aCgpKTtyZXR1cm57ZG9tYWluOm4uZmlsdGVyKGZ1bmN0aW9uKHMsbCl7cmV0dXJuIGwlYT09PTB9KSxzdGVwV2lkdGg6YSpyLnN0ZXBXaWR0aCgpfX0sdC5wcm90b3R5cGUudGlja0xhYmVsQW5nbGU9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fdGlja0xhYmVsQW5nbGU7aWYociE9PTAmJnIhPT05MCYmciE9PS05MCl0aHJvdyBuZXcgRXJyb3IoIkFuZ2xlICIrcisiIG5vdCBzdXBwb3J0ZWQ7IG9ubHkgMCwgOTAsIGFuZCAtOTAgYXJlIHZhbGlkIHZhbHVlcyIpO3JldHVybiB0aGlzLl90aWNrTGFiZWxBbmdsZT1yLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUudGlja0xhYmVsU2hlYXJBbmdsZT1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl90aWNrTGFiZWxTaGVhckFuZ2xlO2lmKHI8LTgwfHxyPjgwKXRocm93IG5ldyBFcnJvcigiQW5nbGUgIityKyIgbm90IHN1cHBvcnRlZDsgTXVzdCBiZSBiZXR3ZWVuIFstODAsIDgwXSIpO3JldHVybiB0aGlzLl90aWNrTGFiZWxTaGVhckFuZ2xlPXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS50aWNrTGFiZWxNYXhXaWR0aD1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTA/dGhpcy5fdGlja0xhYmVsTWF4V2lkdGg6KHRoaXMuX3RpY2tMYWJlbE1heFdpZHRoPXIsdGhpcy5yZWRyYXcoKSx0aGlzKX0sdC5wcm90b3R5cGUudGlja0xhYmVsTWF4TGluZXM9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0wP3RoaXMuX3RpY2tMYWJlbE1heExpbmVzOih0aGlzLl90aWNrTGFiZWxNYXhMaW5lcz1yLHRoaXMucmVkcmF3KCksdGhpcyl9LHQucHJvdG90eXBlLl90aWNrU3BhY2VSZXF1aXJlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKSt0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKX0sdC5wcm90b3R5cGUuX2RyYXdUaWNrcz1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMsbyxhO3N3aXRjaCh0aGlzLnRpY2tMYWJlbEFuZ2xlKCkpe2Nhc2UgMDpvPXtsZWZ0OiJyaWdodCIscmlnaHQ6ImxlZnQiLHRvcDoiY2VudGVyIixib3R0b206ImNlbnRlciJ9LGE9e2xlZnQ6ImNlbnRlciIscmlnaHQ6ImNlbnRlciIsdG9wOiJib3R0b20iLGJvdHRvbToidG9wIn07YnJlYWs7Y2FzZSA5MDpvPXtsZWZ0OiJjZW50ZXIiLHJpZ2h0OiJjZW50ZXIiLHRvcDoicmlnaHQiLGJvdHRvbToibGVmdCJ9LGE9e2xlZnQ6InRvcCIscmlnaHQ6ImJvdHRvbSIsdG9wOiJjZW50ZXIiLGJvdHRvbToiY2VudGVyIn07YnJlYWs7Y2FzZS05MDpvPXtsZWZ0OiJjZW50ZXIiLHJpZ2h0OiJjZW50ZXIiLHRvcDoibGVmdCIsYm90dG9tOiJyaWdodCJ9LGE9e2xlZnQ6ImJvdHRvbSIscmlnaHQ6InRvcCIsdG9wOiJjZW50ZXIiLGJvdHRvbToiY2VudGVyIn07YnJlYWt9bi5lYWNoKGZ1bmN0aW9uKHMpe3ZhciBsPVdpdC5zZWxlY3QodGhpcyksYz1pLmlzSG9yaXpvbnRhbCgpP3I6aS53aWR0aCgpLWkuX3RpY2tTcGFjZVJlcXVpcmVkKCksdT1pLmlzSG9yaXpvbnRhbCgpP2kuaGVpZ2h0KCktaS5fdGlja1NwYWNlUmVxdWlyZWQoKTpyLGg9e3hBbGlnbjpvW2kub3JpZW50YXRpb24oKV0seUFsaWduOmFbaS5vcmllbnRhdGlvbigpXSx0ZXh0Um90YXRpb246aS50aWNrTGFiZWxBbmdsZSgpLHRleHRTaGVhcjppLnRpY2tMYWJlbFNoZWFyQW5nbGUoKX07aWYoaS5fdGlja0xhYmVsTWF4V2lkdGghPW51bGwpe2lmKGkub3JpZW50YXRpb24oKT09PSJsZWZ0IiYmYz5pLl90aWNrTGFiZWxNYXhXaWR0aCl7dmFyIGY9Yy1pLl90aWNrTGFiZWxNYXhXaWR0aCxwPWwuYXR0cigidHJhbnNmb3JtIikrIiB0cmFuc2xhdGUoIitmKyIsIDApIjtsLmF0dHIoInRyYW5zZm9ybSIscCl9Yz1NYXRoLm1pbihjLGkuX3RpY2tMYWJlbE1heFdpZHRoKX1pLl93cml0ZXIud3JpdGUoaS5mb3JtYXR0ZXIoKShzKSxjLHUsaCxsLm5vZGUoKSl9KX0sdC5wcm90b3R5cGUuX21lYXN1cmVUaWNrTGFiZWxzPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcyxvPXRoaXMuX3NjYWxlLGE9by5jbG9uZVdpdGhvdXRQcm92aWRlcnMoKS5yYW5nZShbMCx0aGlzLmlzSG9yaXpvbnRhbCgpP3I6bl0pLHM9dGhpcy5nZXREb3duc2FtcGxlSW5mbyhhKSxsPXMuZG9tYWluLGM9cy5zdGVwV2lkdGgsdT1yLXRoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCk7dGhpcy5pc0hvcml6b250YWwoKSYmKHU9Yyx0aGlzLl90aWNrTGFiZWxBbmdsZSE9PTAmJih1PW4tdGhpcy5fdGlja1NwYWNlUmVxdWlyZWQoKSksdT1NYXRoLm1heCh1LDApKTt2YXIgaD1jO3RoaXMuaXNIb3Jpem9udGFsKCkmJihoPW4tdGhpcy5fdGlja1NwYWNlUmVxdWlyZWQoKSx0aGlzLl90aWNrTGFiZWxBbmdsZSE9PTAmJihoPXItdGhpcy5fdGlja1NwYWNlUmVxdWlyZWQoKSksaD1NYXRoLm1heChoLDApKSx0aGlzLl90aWNrTGFiZWxNYXhXaWR0aCE9bnVsbCYmKHU9TWF0aC5taW4odSx0aGlzLl90aWNrTGFiZWxNYXhXaWR0aCkpO3ZhciBmPWwubWFwKGZ1bmN0aW9uKHgpe3JldHVybiBpLl93cmFwcGVyLndyYXAoaS5mb3JtYXR0ZXIoKSh4KSxpLl9tZWFzdXJlcix1LGgpfSkscD10aGlzLmlzSG9yaXpvbnRhbCgpJiZ0aGlzLl90aWNrTGFiZWxBbmdsZT09PTA/V2l0LnN1bTpYWHQuTWF0aC5tYXgsZD10aGlzLmlzSG9yaXpvbnRhbCgpJiZ0aGlzLl90aWNrTGFiZWxBbmdsZT09PTA/WFh0Lk1hdGgubWF4OldpdC5zdW0sZz1wKGYsZnVuY3Rpb24oeCl7cmV0dXJuIGkuX21lYXN1cmVyLm1lYXN1cmUoeC53cmFwcGVkVGV4dCkud2lkdGh9LDApLF89ZChmLGZ1bmN0aW9uKHgpe3JldHVybiBpLl9tZWFzdXJlci5tZWFzdXJlKHgud3JhcHBlZFRleHQpLmhlaWdodH0sMCk7cmV0dXJuIHRoaXMuX3RpY2tMYWJlbEFuZ2xlIT09MCYmKHk9W18sZ10sZz15WzBdLF89eVsxXSkse3VzZWRXaWR0aDpnLHVzZWRIZWlnaHQ6X307dmFyIHl9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpO3ZhciBuPXRoaXMuX3NjYWxlLGk9dGhpcy5nZXREb3duc2FtcGxlSW5mbyhuKSxvPWkuZG9tYWluLGE9aS5zdGVwV2lkdGgscz1hO3RoaXMuaXNIb3Jpem9udGFsKCkmJnRoaXMuX3RpY2tMYWJlbE1heFdpZHRoIT1udWxsJiYocz1NYXRoLm1pbihzLHRoaXMuX3RpY2tMYWJlbE1heFdpZHRoKSk7dmFyIGw9ZnVuY3Rpb24ocCxkKXt2YXIgZz1uLnNjYWxlKHApLXMvMixfPXIuaXNIb3Jpem9udGFsKCk/ZzowLHk9ci5pc0hvcml6b250YWwoKT8wOmc7cmV0dXJuInRyYW5zbGF0ZSgiK18rIiwiK3krIikifSxjPXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK1lpdC5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpLmRhdGEobyksdT1jLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChZaXQuQXhpcy5USUNLX0xBQkVMX0NMQVNTLCEwKS5tZXJnZShjKTtjLmV4aXQoKS5yZW1vdmUoKSx1LmF0dHIoInRyYW5zZm9ybSIsbCksdS50ZXh0KCIiKSx0aGlzLl9kcmF3VGlja3MoYSx1KTt2YXIgaD10aGlzLm9yaWVudGF0aW9uKCk9PT0icmlnaHQiP3RoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCk6MCxmPXRoaXMub3JpZW50YXRpb24oKT09PSJib3R0b20iP3RoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCk6MDtyZXR1cm4gdGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2grIiwiK2YrIikiKSx0aGlzLl9zaG93QWxsVGlja01hcmtzKCksdGhpcy5fc2hvd0FsbFRpY2tMYWJlbHMoKSx0aGlzLl9oaWRlVGlja01hcmtzV2l0aG91dExhYmVsKCksdGhpc30sdC5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihyLG4saSl7cmV0dXJuIGUucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLHIsbixpKSx0aGlzLmlzSG9yaXpvbnRhbCgpfHx0aGlzLl9zY2FsZS5yYW5nZShbMCx0aGlzLmhlaWdodCgpXSksdGhpc30sdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sdC5fTUlOSU1VTV9XSURUSF9QRVJfTEFCRUxfUFg9MTUsdH0oWWl0LkF4aXMpO2ppdC5DYXRlZ29yeT1GemV9KTt2YXIgS1h0PUgoJGl0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBCemU9KGRlKCksVXQocGUpKSx6Rj0oRXIoKSxVdChNcikpLFhpdD15bCgpLEh6ZT1CdSgpLGJTPUZlKCksd1M9dDQoKSxWemU9ZnVuY3Rpb24oZSl7QnplLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocixuKXt2YXIgaT1lLmNhbGwodGhpcyxyLG4pfHx0aGlzO3JldHVybiBpLl90aWNrTGFiZWxQb3NpdGlvbmluZz0iY2VudGVyIixpLl91c2VzVGV4dFdpZHRoQXBwcm94aW1hdGlvbj0hMSxpLmZvcm1hdHRlcihIemUuZ2VuZXJhbCgpKSxpfXJldHVybiB0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKTt2YXIgcj1uZXcgWGl0LlN2Z0NvbnRleHQodGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLm5vZGUoKSx3Uy5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpO3RoaXMuX21lYXN1cmVyPW5ldyBYaXQuQ2FjaGVNZWFzdXJlcihyKSx0aGlzLl93cmFwcGVyPW5ldyBYaXQuV3JhcHBlcigpLm1heExpbmVzKDEpfSx0LnByb3RvdHlwZS5fY29tcHV0ZVdpZHRoPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fdXNlc1RleHRXaWR0aEFwcHJveGltYXRpb24/dGhpcy5fY29tcHV0ZUFwcHJveGltYXRlVGV4dFdpZHRoKCk6dGhpcy5fY29tcHV0ZUV4YWN0VGV4dFdpZHRoKCk7cmV0dXJuIHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nPT09ImNlbnRlciI/dGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCkrdGhpcy50aWNrTGFiZWxQYWRkaW5nKCkrcjpNYXRoLm1heCh0aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKSx0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKStyKX0sdC5wcm90b3R5cGUuX2NvbXB1dGVFeGFjdFRleHRXaWR0aD1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj10aGlzLl9nZXRUaWNrVmFsdWVzKCksaT1uLm1hcChmdW5jdGlvbihvKXt2YXIgYT1yLmZvcm1hdHRlcigpKG8pO3JldHVybiByLl9tZWFzdXJlci5tZWFzdXJlKGEpLndpZHRofSk7cmV0dXJuIGJTLk1hdGgubWF4KGksMCl9LHQucHJvdG90eXBlLl9jb21wdXRlQXBwcm94aW1hdGVUZXh0V2lkdGg9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49dGhpcy5fZ2V0VGlja1ZhbHVlcygpLGk9dGhpcy5fbWVhc3VyZXIubWVhc3VyZSgiTSIpLndpZHRoLG89bi5tYXAoZnVuY3Rpb24oYSl7dmFyIHM9ci5mb3JtYXR0ZXIoKShhKTtyZXR1cm4gcy5sZW5ndGgqaX0pO3JldHVybiBiUy5NYXRoLm1heChvLDApfSx0LnByb3RvdHlwZS5fY29tcHV0ZUhlaWdodD1mdW5jdGlvbigpe3ZhciByPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQ7cmV0dXJuIHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nPT09ImNlbnRlciI/dGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCkrdGhpcy50aWNrTGFiZWxQYWRkaW5nKCkrcjpNYXRoLm1heCh0aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKSx0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKStyKX0sdC5wcm90b3R5cGUuX2dldFRpY2tWYWx1ZXM9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLl9zY2FsZSxuPXIuZG9tYWluKCksaT1uWzBdPD1uWzFdP25bMF06blsxXSxvPW5bMF0+PW5bMV0/blswXTpuWzFdO3JldHVybiByLnRpY2tzKCkuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBhPj1pJiZhPD1vfSl9LHQucHJvdG90eXBlLl9yZXNjYWxlPWZ1bmN0aW9uKCl7aWYoISF0aGlzLl9pc1NldHVwKXtpZighdGhpcy5pc0hvcml6b250YWwoKSl7dmFyIHI9dGhpcy5fY29tcHV0ZVdpZHRoKCk7aWYocj50aGlzLndpZHRoKCl8fHI8dGhpcy53aWR0aCgpLXRoaXMubWFyZ2luKCkpe3RoaXMucmVkcmF3KCk7cmV0dXJufX10aGlzLnJlbmRlcigpfX0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO2UucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyk7dmFyIG49e3g6MCx5OjAsZHg6IjBlbSIsZHk6IjAuM2VtIn0saT10aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKSxvPXRoaXMudGlja0xhYmVsUGFkZGluZygpLGE9Im1pZGRsZSIscz0wLGw9MCxjPTAsdT0wO2lmKHRoaXMuaXNIb3Jpem9udGFsKCkpc3dpdGNoKHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nKXtjYXNlImxlZnQiOmE9ImVuZCIscz0tbyx1PW87YnJlYWs7Y2FzZSJjZW50ZXIiOnU9aStvO2JyZWFrO2Nhc2UicmlnaHQiOmE9InN0YXJ0IixzPW8sdT1vO2JyZWFrfWVsc2Ugc3dpdGNoKHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nKXtjYXNlInRvcCI6bi5keT0iLTAuM2VtIixjPW8sbD0tbzticmVhaztjYXNlImNlbnRlciI6Yz1pK287YnJlYWs7Y2FzZSJib3R0b20iOm4uZHk9IjFlbSIsYz1vLGw9bzticmVha312YXIgaD10aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goKTtzd2l0Y2godGhpcy5vcmllbnRhdGlvbigpKXtjYXNlImJvdHRvbSI6bi54PWgueDEsbi5keT0iMC45NWVtIixsPWgueTErdTticmVhaztjYXNlInRvcCI6bi54PWgueDEsbi5keT0iLS4yNWVtIixsPWgueTEtdTticmVhaztjYXNlImxlZnQiOmE9ImVuZCIscz1oLngxLWMsbi55PWgueTE7YnJlYWs7Y2FzZSJyaWdodCI6YT0ic3RhcnQiLHM9aC54MStjLG4ueT1oLnkxO2JyZWFrfXZhciBmPXRoaXMuX2dldFRpY2tWYWx1ZXMoKSxwPXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3dTLkF4aXMuVElDS19MQUJFTF9DTEFTUykuZGF0YShmKTtwLmV4aXQoKS5yZW1vdmUoKTt2YXIgZD1wLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCh3Uy5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MsITApLm1lcmdlKHApO2Quc3R5bGUoInRleHQtYW5jaG9yIixhKS5zdHlsZSgidmlzaWJpbGl0eSIsImluaGVyaXQiKS5hdHRycyhuKS50ZXh0KGZ1bmN0aW9uKF8pe3JldHVybiByLmZvcm1hdHRlcigpKF8pfSk7dmFyIGc9InRyYW5zbGF0ZSgiK3MrIiwgIitsKyIpIjtyZXR1cm4gdGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLmF0dHIoInRyYW5zZm9ybSIsZyksdGhpcy5fc2hvd0FsbFRpY2tNYXJrcygpLHRoaXMuc2hvd0VuZFRpY2tMYWJlbHMoKXx8dGhpcy5faGlkZUVuZFRpY2tMYWJlbHMoKSx0aGlzLl9oaWRlT3ZlcmZsb3dpbmdUaWNrTGFiZWxzKCksdGhpcy5faGlkZU92ZXJsYXBwaW5nVGlja0xhYmVscygpLHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nIT09ImNlbnRlciImJnRoaXMuX2hpZGVUaWNrTWFya3NXaXRob3V0TGFiZWwoKSx0aGlzfSx0LnByb3RvdHlwZS50aWNrTGFiZWxQb3NpdGlvbj1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl90aWNrTGFiZWxQb3NpdGlvbmluZzt2YXIgbj1yLnRvTG93ZXJDYXNlKCk7aWYodGhpcy5pc0hvcml6b250YWwoKSl7aWYoIShuPT09ImxlZnQifHxuPT09ImNlbnRlciJ8fG49PT0icmlnaHQiKSl0aHJvdyBuZXcgRXJyb3IobisiIGlzIG5vdCBhIHZhbGlkIHRpY2sgbGFiZWwgcG9zaXRpb24gZm9yIGEgaG9yaXpvbnRhbCBOdW1lcmljQXhpcyIpfWVsc2UgaWYoIShuPT09InRvcCJ8fG49PT0iY2VudGVyInx8bj09PSJib3R0b20iKSl0aHJvdyBuZXcgRXJyb3IobisiIGlzIG5vdCBhIHZhbGlkIHRpY2sgbGFiZWwgcG9zaXRpb24gZm9yIGEgdmVydGljYWwgTnVtZXJpY0F4aXMiKTtyZXR1cm4gdGhpcy5fdGlja0xhYmVsUG9zaXRpb25pbmc9bix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLnVzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3VzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uOih0aGlzLl91c2VzVGV4dFdpZHRoQXBwcm94aW1hdGlvbj1yLHRoaXMpfSx0LnByb3RvdHlwZS5faGlkZUVuZFRpY2tMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLmVsZW1lbnQoKS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj10aGlzLl90aWNrTGFiZWxDb250YWluZXIuc2VsZWN0QWxsKCIuIit3Uy5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpO2lmKG4uc2l6ZSgpIT09MCl7dmFyIGk9bi5ub2RlcygpWzBdO2JTLkRPTS5jbGllbnRSZWN0SW5zaWRlKGkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscil8fHpGLnNlbGVjdChpKS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpO3ZhciBvPW4ubm9kZXMoKVtuLnNpemUoKS0xXTtiUy5ET00uY2xpZW50UmVjdEluc2lkZShvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHIpfHx6Ri5zZWxlY3Qobykuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKX19LHQucHJvdG90eXBlLl9oaWRlT3ZlcmxhcHBpbmdUaWNrTGFiZWxzPWZ1bmN0aW9uKCl7Zm9yKHZhciByPXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3dTLkF4aXMuVElDS19MQUJFTF9DTEFTUykuZmlsdGVyKGZ1bmN0aW9uKG8sYSl7dmFyIHM9ekYuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5Iik7cmV0dXJuIHM9PT0iaW5oZXJpdCJ8fHM9PT0idmlzaWJsZSJ9KSxuPXIubm9kZXMoKS5tYXAoZnVuY3Rpb24obyl7cmV0dXJuIG8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9KSxpPTE7IXRoaXMuX2hhc092ZXJsYXBXaXRoSW50ZXJ2YWwoaSxuKSYmaTxuLmxlbmd0aDspaSs9MTtyLmVhY2goZnVuY3Rpb24obyxhKXt2YXIgcz16Ri5zZWxlY3QodGhpcyk7YSVpIT09MCYmcy5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpfSl9LHQucHJvdG90eXBlLl9oYXNPdmVybGFwV2l0aEludGVydmFsPWZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPXRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nPT09ImNlbnRlciI/dGhpcy50aWNrTGFiZWxQYWRkaW5nKCk6dGhpcy50aWNrTGFiZWxQYWRkaW5nKCkqMyxvPW4ubWFwKGZ1bmN0aW9uKGMpe3JldHVybiBiUy5ET00uZXhwYW5kUmVjdChjLGkpfSksYT0wO2E8by5sZW5ndGgtcjthKz1yKXt2YXIgcz1vW2FdLGw9b1thK3JdO2lmKGJTLkRPTS5jbGllbnRSZWN0c092ZXJsYXAocyxsKSlyZXR1cm4hMX1yZXR1cm4hMH0sdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sdH0od1MuQXhpcyk7JGl0Lk51bWVyaWM9VnplfSk7dmFyIFpYdD1IKEZGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFV6ZT1GZSgpO2Z1bmN0aW9uIHF6ZShlKXtpZihlPD0wKXRocm93IG5ldyBFcnJvcigiaW50ZXJ2YWwgbXVzdCBiZSBwb3NpdGl2ZSBudW1iZXIiKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9dC5kb21haW4oKSxuPU1hdGgubWluKHJbMF0sclsxXSksaT1NYXRoLm1heChyWzBdLHJbMV0pLG89TWF0aC5jZWlsKG4vZSkqZSxhPU1hdGguZmxvb3IoKGktbykvZSkrMSxzPW4lZT09PTA/W106W25dLGw9VXplLk1hdGgucmFuZ2UoMCxhKS5tYXAoZnVuY3Rpb24odSl7cmV0dXJuIG8rdSplfSksYz1pJWU9PT0wP1tdOltpXTtyZXR1cm4gcy5jb25jYXQobCkuY29uY2F0KGMpfX1GRi5pbnRlcnZhbFRpY2tHZW5lcmF0b3I9cXplO2Z1bmN0aW9uIEd6ZSgpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLmRlZmF1bHRUaWNrcygpO3JldHVybiB0LmZpbHRlcihmdW5jdGlvbihyLG4pe3JldHVybiByJTE9PT0wfHxuPT09MHx8bj09PXQubGVuZ3RoLTF9KX19RkYuaW50ZWdlclRpY2tHZW5lcmF0b3I9R3plfSk7dmFyIGU0PUgoTHY9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEx2LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtmdW5jdGlvbiBaaXQoZSx0LHIpe3JldHVybiByLShyLWUpKnR9THYuem9vbU91dD1aaXQ7ZnVuY3Rpb24gS2l0KGUsdCxyKXtyZXR1cm4oZSp0LXIpLyh0LTEpfWZ1bmN0aW9uIFd6ZShlLHQscixuLGksbyxhKXtyZXR1cm4gdD1KWHQoZSx0LG4saSksUVh0KGUsdCxyLG8sYSl9THYuY29uc3RyYWluZWRab29tPVd6ZTtmdW5jdGlvbiBKWHQoZSx0LHIsbil7dmFyIGk9dD4xLG89aT9uOnI7aWYobz09bnVsbClyZXR1cm4gdDt2YXIgYT1lLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCkscz1hWzBdLGw9YVsxXSxjPU1hdGguYWJzKGwtcyksdT1pP01hdGgubWluOk1hdGgubWF4O3JldHVybiB1KHQsby9jKX1Mdi5jb25zdHJhaW5ab29tRXh0ZW50cz1KWHQ7ZnVuY3Rpb24gUVh0KGUsdCxyLG4saSl7aWYodDw9MSlyZXR1cm57Y2VudGVyUG9pbnQ6cix6b29tQW1vdW50OnR9O2lmKG49PW51bGwmJmk9PW51bGwpcmV0dXJue2NlbnRlclBvaW50OnIsem9vbUFtb3VudDp0fTt2YXIgbz10JHQoZSksYT1qemUoZSkscz1hPzEvMDotMS8wLGw9YT8tMS8wOjEvMDtuPW49PW51bGw/czpuLGk9aT09bnVsbD9sOmk7dmFyIGM9ZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpLHU9Y1swXSxoPWNbMV0sZj1lLnNjYWxlVHJhbnNmb3JtYXRpb24oaSkscD1lLnNjYWxlVHJhbnNmb3JtYXRpb24oaCksZD1aaXQocCx0LHIpLGc9ZS5zY2FsZVRyYW5zZm9ybWF0aW9uKG4pLF89ZS5zY2FsZVRyYW5zZm9ybWF0aW9uKHUpLHk9Wml0KF8sdCxyKSx4PU1hdGguYWJzKGYtZyksYj1NYXRoLmFicyhkLXkpO2lmKGI+eCl7dmFyIFM9KGYtZykvKHAtXyk7aWYoUyE9PTEpe3ZhciBDPUtpdChwLFMsZik7cmV0dXJue2NlbnRlclBvaW50OkMsem9vbUFtb3VudDpTfX1lbHNlIHJldHVybntjZW50ZXJQb2ludDpyLHpvb21BbW91bnQ6U319ZWxzZSByZXR1cm4gZD5mIT1vP3tjZW50ZXJQb2ludDpLaXQocCx0LGYpLHpvb21BbW91bnQ6dH06eTxnIT1vP3tjZW50ZXJQb2ludDpLaXQoXyx0LGcpLHpvb21BbW91bnQ6dH06e2NlbnRlclBvaW50OnIsem9vbUFtb3VudDp0fX1Mdi5jb25zdHJhaW5ab29tVmFsdWVzPVFYdDtmdW5jdGlvbiBZemUoZSx0LHIsbil7dmFyIGk9ZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpLG89aVswXSxhPWlbMV0scz10JHQoZSk7aWYodD4wIT09cyl7dmFyIGw9bjtpZihsIT1udWxsKXt2YXIgYz1lLnNjYWxlVHJhbnNmb3JtYXRpb24oYSksdT1lLnNjYWxlVHJhbnNmb3JtYXRpb24obCk7dD0ocz9NYXRoLm1heDpNYXRoLm1pbikoYyt0LHUpLWN9fWVsc2V7dmFyIGw9cjtpZihsIT1udWxsKXt2YXIgaD1lLnNjYWxlVHJhbnNmb3JtYXRpb24obyksZj1lLnNjYWxlVHJhbnNmb3JtYXRpb24obCk7dD0ocz9NYXRoLm1pbjpNYXRoLm1heCkoaCt0LGYpLWh9fXJldHVybiB0fUx2LmNvbnN0cmFpbmVkVHJhbnNsYXRpb249WXplO2Z1bmN0aW9uIHQkdChlKXt2YXIgdD1lLnJhbmdlKCk7cmV0dXJuIHRbMV08dFswXX1mdW5jdGlvbiBqemUoZSl7dmFyIHQ9ZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpO3JldHVybiB0WzFdPHRbMF19fSk7dmFyIGt2PUgoSml0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBlJHQ9RmUoKSxYemU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5fYXV0b0RvbWFpbkF1dG9tYXRpY2FsbHk9ITAsdGhpcy5fZG9tYWluTW9kaWZpY2F0aW9uSW5Qcm9ncmVzcz0hMSx0aGlzLl91cGRhdGVJZD0wLHRoaXMuX2NhbGxiYWNrcz1uZXcgZSR0LkNhbGxiYWNrU2V0LHRoaXMuX2luY2x1ZGVkVmFsdWVzUHJvdmlkZXJzPW5ldyBlJHQuU2V0fXJldHVybiBlLnByb3RvdHlwZS5leHRlbnRPZlZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm5bXX0sZS5wcm90b3R5cGUuX2dldEFsbEluY2x1ZGVkVmFsdWVzPWZ1bmN0aW9uKHQpe3ZhciByPXRoaXM7dD09PXZvaWQgMCYmKHQ9ITEpO3ZhciBuPVtdO3JldHVybiB0aGlzLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVycy5mb3JFYWNoKGZ1bmN0aW9uKGkpe3ZhciBvPWkocix0KTtuPW4uY29uY2F0KG8pfSksbn0sZS5wcm90b3R5cGUuX2dldEV4dGVudD1mdW5jdGlvbigpe3JldHVybltdfSxlLnByb3RvdHlwZS5vblVwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY2FsbGJhY2tzLmFkZCh0KSx0aGlzfSxlLnByb3RvdHlwZS5vZmZVcGRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NhbGxiYWNrcy5kZWxldGUodCksdGhpc30sZS5wcm90b3R5cGUuX2Rpc3BhdGNoVXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlSWQrKyx0aGlzLl9jYWxsYmFja3MuY2FsbENhbGxiYWNrcyh0aGlzKX0sZS5wcm90b3R5cGUuYXV0b0RvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hdXRvRG9tYWluQXV0b21hdGljYWxseT0hMCx0aGlzLl9zZXREb21haW4odGhpcy5fZ2V0RXh0ZW50KCkpLHRoaXN9LGUucHJvdG90eXBlLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGU9ZnVuY3Rpb24oKXt0aGlzLl9hdXRvRG9tYWluQXV0b21hdGljYWxseSYmdGhpcy5hdXRvRG9tYWluKCl9LGUucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgc2NhbGUiKX0sZS5wcm90b3R5cGUudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21haW4oKX0sZS5wcm90b3R5cGUuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXMuX2dldERvbWFpbigpOih0aGlzLl9hdXRvRG9tYWluQXV0b21hdGljYWxseT0hMSx0aGlzLl9zZXREb21haW4odCksdGhpcyl9LGUucHJvdG90eXBlLl9nZXREb21haW49ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIF9nZXREb21haW4iKX0sZS5wcm90b3R5cGUuX3NldERvbWFpbj1mdW5jdGlvbih0KXt0aGlzLl9kb21haW5Nb2RpZmljYXRpb25JblByb2dyZXNzfHwodGhpcy5fZG9tYWluTW9kaWZpY2F0aW9uSW5Qcm9ncmVzcz0hMCx0aGlzLl9iYWNraW5nU2NhbGVEb21haW4odCksdGhpcy5fZGlzcGF0Y2hVcGRhdGUoKSx0aGlzLl9kb21haW5Nb2RpZmljYXRpb25JblByb2dyZXNzPSExKX0sZS5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIF9iYWNraW5nRG9tYWluIil9LGUucHJvdG90eXBlLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXMuX2dldFJhbmdlKCk6KHRoaXMuX3NldFJhbmdlKHQpLHRoaXMpfSxlLnByb3RvdHlwZS5fZ2V0UmFuZ2U9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIF9nZXRSYW5nZSIpfSxlLnByb3RvdHlwZS5fc2V0UmFuZ2U9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBfc2V0UmFuZ2UiKX0sZS5wcm90b3R5cGUuYWRkSW5jbHVkZWRWYWx1ZXNQcm92aWRlcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faW5jbHVkZWRWYWx1ZXNQcm92aWRlcnMuYWRkKHQpLHRoaXMuYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZSgpLHRoaXN9LGUucHJvdG90eXBlLnJlbW92ZUluY2x1ZGVkVmFsdWVzUHJvdmlkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2luY2x1ZGVkVmFsdWVzUHJvdmlkZXJzLmRlbGV0ZSh0KSx0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzfSxlLnByb3RvdHlwZS51cGRhdGVJZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl91cGRhdGVJZH0sZX0oKTtKaXQuU2NhbGU9WHplfSk7dmFyIGVvdD1IKHRvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodG90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgJHplPShkZSgpLFV0KHBlKSksQkY9KEVyKCksVXQoTXIpKSxLemU9ZTQoKSxyJHQ9RmUoKSxaemU9a3YoKSxRaXQ9WzAsMV0sSnplPWZ1bmN0aW9uKGUpeyR6ZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3IuX3JhbmdlPVswLDFdLHIuX2QzU2NhbGU9QkYuc2NhbGVCYW5kKCksci5fZDNTY2FsZS5yYW5nZShRaXQpLHIuX2QzVHJhbnNmb3JtYXRpb25TY2FsZT1CRi5zY2FsZUxpbmVhcigpLHIuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4oUWl0KTt2YXIgbj0uMztyZXR1cm4gci5faW5uZXJQYWRkaW5nPXQuX2NvbnZlcnRUb1Bsb3R0YWJsZUlubmVyUGFkZGluZyhuKSxyLl9vdXRlclBhZGRpbmc9dC5fY29udmVydFRvUGxvdHRhYmxlT3V0ZXJQYWRkaW5nKC41LG4pLHJ9cmV0dXJuIHQucHJvdG90eXBlLmNsb25lV2l0aG91dFByb3ZpZGVycz1mdW5jdGlvbigpe3ZhciByPW5ldyB0KCkuZG9tYWluKHRoaXMuZG9tYWluKCkpLnJhbmdlKHRoaXMucmFuZ2UoKSkuaW5uZXJQYWRkaW5nKHRoaXMuaW5uZXJQYWRkaW5nKCkpLm91dGVyUGFkZGluZyh0aGlzLm91dGVyUGFkZGluZygpKTtyZXR1cm4gci5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLmRvbWFpbih0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuZG9tYWluKCkpLHJ9LHQucHJvdG90eXBlLmV4dGVudE9mVmFsdWVzPWZ1bmN0aW9uKHIpe3JldHVybiByJHQuQXJyYXkudW5pcShyKX0sdC5wcm90b3R5cGUuX2dldEV4dGVudD1mdW5jdGlvbigpe3JldHVybiByJHQuQXJyYXkudW5pcSh0aGlzLl9nZXRBbGxJbmNsdWRlZFZhbHVlcygpKX0sdC5wcm90b3R5cGUuZG9tYWluPWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5kb21haW4uY2FsbCh0aGlzLHIpfSx0LnByb3RvdHlwZS5pbnZlcnRSYW5nZT1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3I9PT12b2lkIDAmJihyPXRoaXMucmFuZ2UoKSk7dmFyIGk9dGhpcy5fZDNTY2FsZS5iYW5kd2lkdGgoKSxvPXRoaXMuaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbihyWzBdKSxhPXRoaXMuaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbihyWzFdKSxzPXRoaXMuX2QzU2NhbGUuZG9tYWluKCksbD1zLm1hcChmdW5jdGlvbihoKXtyZXR1cm4gbi5fZDNTY2FsZShoKStpLzJ9KSxjPUJGLmJpc2VjdChsLG8pLHU9QkYuYmlzZWN0KGwsYSk7cmV0dXJuIHMuc2xpY2UoYyx1KX0sdC5wcm90b3R5cGUucmFuZ2U9ZnVuY3Rpb24ocil7cmV0dXJuIGUucHJvdG90eXBlLnJhbmdlLmNhbGwodGhpcyxyKX0sdC5fY29udmVydFRvUGxvdHRhYmxlSW5uZXJQYWRkaW5nPWZ1bmN0aW9uKHIpe3JldHVybiAxLygxLXIpLTF9LHQuX2NvbnZlcnRUb1Bsb3R0YWJsZU91dGVyUGFkZGluZz1mdW5jdGlvbihyLG4pe3JldHVybiByLygxLW4pfSx0LnByb3RvdHlwZS5fc2V0QmFuZHM9ZnVuY3Rpb24oKXt2YXIgcj0xLTEvKDErdGhpcy5pbm5lclBhZGRpbmcoKSksbj10aGlzLm91dGVyUGFkZGluZygpLygxK3RoaXMuaW5uZXJQYWRkaW5nKCkpO3RoaXMuX2QzU2NhbGUucGFkZGluZ0lubmVyKHIpLHRoaXMuX2QzU2NhbGUucGFkZGluZ091dGVyKG4pfSx0LnByb3RvdHlwZS5yYW5nZUJhbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVzY2FsZUJhbmQodGhpcy5fZDNTY2FsZS5iYW5kd2lkdGgoKSl9LHQucHJvdG90eXBlLnN0ZXBXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXNjYWxlQmFuZCh0aGlzLl9kM1NjYWxlLmJhbmR3aWR0aCgpKigxK3RoaXMuaW5uZXJQYWRkaW5nKCkpKX0sdC5wcm90b3R5cGUudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21haW4oKX0sdC5wcm90b3R5cGUuaW5uZXJQYWRkaW5nPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2lubmVyUGFkZGluZzoodGhpcy5faW5uZXJQYWRkaW5nPXIsdGhpcy5yYW5nZSh0aGlzLnJhbmdlKCkpLHRoaXMuX2Rpc3BhdGNoVXBkYXRlKCksdGhpcyl9LHQucHJvdG90eXBlLm91dGVyUGFkZGluZz1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9vdXRlclBhZGRpbmc6KHRoaXMuX291dGVyUGFkZGluZz1yLHRoaXMucmFuZ2UodGhpcy5yYW5nZSgpKSx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpLHRoaXMpfSx0LnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihyKXt2YXIgbj10aGlzLl9kM1NjYWxlKHIpK3RoaXMuX2QzU2NhbGUuYmFuZHdpZHRoKCkvMjtyZXR1cm4gdGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlKG4pfSx0LnByb3RvdHlwZS56b29tPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcyxvPWZ1bmN0aW9uKGEpe3JldHVybiBpLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuaW52ZXJ0KEt6ZS56b29tT3V0KGEscixuKSl9O3RoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4odGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLnJhbmdlKCkubWFwKG8pKSx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpfSx0LnByb3RvdHlwZS5wYW49ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWZ1bmN0aW9uKG8pe3JldHVybiBuLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuaW52ZXJ0KG8rcil9O3RoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4odGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLnJhbmdlKCkubWFwKGkpKSx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpfSx0LnByb3RvdHlwZS5zY2FsZVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUocil9LHQucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5pbnZlcnQocil9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIFFpdH0sdC5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLmRvbWFpbigpfSx0LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbihyKXt0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuZG9tYWluKHIpLHRoaXMuX2Rpc3BhdGNoVXBkYXRlKCl9LHQucHJvdG90eXBlLl9nZXREb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFja2luZ1NjYWxlRG9tYWluKCl9LHQucHJvdG90eXBlLl9iYWNraW5nU2NhbGVEb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZDNTY2FsZS5kb21haW4oKToodGhpcy5fZDNTY2FsZS5kb21haW4ociksdGhpcy5fc2V0QmFuZHMoKSx0aGlzKX0sdC5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JhbmdlfSx0LnByb3RvdHlwZS5fc2V0UmFuZ2U9ZnVuY3Rpb24ocil7dGhpcy5fcmFuZ2U9cix0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUucmFuZ2UociksdGhpcy5fc2V0QmFuZHMoKX0sdC5wcm90b3R5cGUuX3Jlc2NhbGVCYW5kPWZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLmFicyh0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUociktdGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlKDApKX0sdH0oWnplLlNjYWxlKTt0b3QuQ2F0ZWdvcnk9SnplfSk7dmFyIG4kdD1IKHJvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocm90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgUXplPShkZSgpLFV0KHBlKSksRGY9KEVyKCksVXQoTXIpKSxTUz1GZSgpLHRGZT1rdigpLGVGZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLmNvdW50PTAsdGhpcy50cmFja2VyPXt9fXJldHVybiBlLnByb3RvdHlwZS5nZXRJbmRleD1mdW5jdGlvbih0KXtpZih0aGlzLnRyYWNrZXJbdF0hPW51bGwpcmV0dXJuIHRoaXMudHJhY2tlclt0XTt2YXIgcj10aGlzLmNvdW50O3JldHVybiB0aGlzLnRyYWNrZXJbdF09cix0aGlzLmNvdW50Kz0xLHJ9LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5jb3VudD0wLHRoaXMudHJhY2tlcj17fX0sZX0oKSxyRmU9ZnVuY3Rpb24oZSl7UXplLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO24uX3JhbmdlTGVuZ3RoPTEsbi5fdHJhY2tlcj1uZXcgZUZlO3ZhciBpO3N3aXRjaChyKXtjYXNlIG51bGw6Y2FzZSB2b2lkIDA6dC5fcGxvdHRhYmxlQ29sb3JDYWNoZT09bnVsbCYmKHQuX3Bsb3R0YWJsZUNvbG9yQ2FjaGU9dC5fZ2V0UGxvdHRhYmxlQ29sb3JzKCkpLGk9RGYuc2NhbGVPcmRpbmFsKCkucmFuZ2UodC5fcGxvdHRhYmxlQ29sb3JDYWNoZSk7YnJlYWs7Y2FzZSJDYXRlZ29yeTEwIjpjYXNlImNhdGVnb3J5MTAiOmNhc2UiMTAiOmk9RGYuc2NhbGVPcmRpbmFsKERmLnNjaGVtZUNhdGVnb3J5MTApO2JyZWFrO2Nhc2UiQ2F0ZWdvcnkyMCI6Y2FzZSJjYXRlZ29yeTIwIjpjYXNlIjIwIjppPURmLnNjYWxlT3JkaW5hbChEZi5zY2hlbWVDYXRlZ29yeTIwKTticmVhaztjYXNlIkNhdGVnb3J5MjBiIjpjYXNlImNhdGVnb3J5MjBiIjpjYXNlIjIwYiI6aT1EZi5zY2FsZU9yZGluYWwoRGYuc2NoZW1lQ2F0ZWdvcnkyMGIpO2JyZWFrO2Nhc2UiQ2F0ZWdvcnkyMGMiOmNhc2UiY2F0ZWdvcnkyMGMiOmNhc2UiMjBjIjppPURmLnNjYWxlT3JkaW5hbChEZi5zY2hlbWVDYXRlZ29yeTIwYyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIENvbG9yU2NhbGUgdHlwZSIpfXJldHVybiBuLl9kM1NjYWxlPWksbi5fcmFuZ2VMZW5ndGg9bi5fZDNTY2FsZS5yYW5nZSgpLmxlbmd0aCxufXJldHVybiB0LnByb3RvdHlwZS5leHRlbnRPZlZhbHVlcz1mdW5jdGlvbihyKXtyZXR1cm4gU1MuQXJyYXkudW5pcShyKX0sdC5wcm90b3R5cGUuX2dldEV4dGVudD1mdW5jdGlvbigpe3JldHVybiBTUy5BcnJheS51bmlxKHRoaXMuX2dldEFsbEluY2x1ZGVkVmFsdWVzKCkpfSx0LmludmFsaWRhdGVDb2xvckNhY2hlPWZ1bmN0aW9uKCl7dC5fcGxvdHRhYmxlQ29sb3JDYWNoZT1udWxsfSx0Ll9nZXRQbG90dGFibGVDb2xvcnM9ZnVuY3Rpb24oKXtmb3IodmFyIHI9W10sbj1EZi5zZWxlY3QoImJvZHkiKS5hcHBlbmQoInBsb3R0YWJsZS1jb2xvci10ZXN0ZXIiKSxpPVNTLkNvbG9yLmNvbG9yVGVzdChuLCIiKSxvPTAsYT1TUy5Db2xvci5jb2xvclRlc3QobiwicGxvdHRhYmxlLWNvbG9ycy0wIik7YSE9bnVsbCYmbzx0aGlzLl9NQVhJTVVNX0NPTE9SU19GUk9NX0NTUyYmIShhPT09aSYmYT09PXJbci5sZW5ndGgtMV0pOylyLnB1c2goYSksbysrLGE9U1MuQ29sb3IuY29sb3JUZXN0KG4sInBsb3R0YWJsZS1jb2xvcnMtIitvKTtyZXR1cm4gbi5yZW1vdmUoKSxyfSx0LnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihyKXt2YXIgbj10aGlzLl9kM1NjYWxlKHIpLGk9dGhpcy5fdHJhY2tlci5nZXRJbmRleChyKSxvPU1hdGguZmxvb3IoaS90aGlzLl9yYW5nZUxlbmd0aCk7aWYobz09PTApcmV0dXJuIG47dmFyIGE9TWF0aC5sb2cobyp0Ll9MT09QX0xJR0hURU5fRkFDVE9SKzEpO3JldHVybiBTUy5Db2xvci5saWdodGVuQ29sb3IobixhKX0sdC5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKX0sdC5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9kM1NjYWxlLmRvbWFpbigpOih0aGlzLl9kM1NjYWxlLmRvbWFpbihyKSx0aGlzLl90cmFja2VyLmNsZWFyKCksdGhpcyl9LHQucHJvdG90eXBlLl9nZXRSYW5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnJhbmdlKCl9LHQucHJvdG90eXBlLl9zZXRSYW5nZT1mdW5jdGlvbihyKXt0aGlzLl9kM1NjYWxlLnJhbmdlKHIpLHRoaXMuX3JhbmdlTGVuZ3RoPXIubGVuZ3RofSx0Ll9MT09QX0xJR0hURU5fRkFDVE9SPTEuNix0Ll9NQVhJTVVNX0NPTE9SU19GUk9NX0NTUz0yNTYsdH0odEZlLlNjYWxlKTtyb3QuQ29sb3I9ckZlfSk7dmFyIG8kdD1IKG5vdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobm90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbkZlPShkZSgpLFV0KHBlKSksTVM9KEVyKCksVXQoTXIpKSxpJHQ9RmUoKSxpRmU9a3YoKSxvRmU9ZnVuY3Rpb24oZSl7bkZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9ImxpbmVhciIpO3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztzd2l0Y2gocil7Y2FzZSJsaW5lYXIiOm4uX2NvbG9yU2NhbGU9TVMuc2NhbGVMaW5lYXIoKTticmVhaztjYXNlImxvZyI6bi5fY29sb3JTY2FsZT1NUy5zY2FsZUxvZygpO2JyZWFrO2Nhc2Uic3FydCI6bi5fY29sb3JTY2FsZT1NUy5zY2FsZVNxcnQoKTticmVhaztjYXNlInBvdyI6bi5fY29sb3JTY2FsZT1NUy5zY2FsZVBvdygpO2JyZWFrfWlmKG4uX2NvbG9yU2NhbGU9PW51bGwpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIFF1YW50aXRhdGl2ZVNjYWxlIHNjYWxlIHR5cGUgIityKTtyZXR1cm4gbi5yYW5nZSh0LlJFRFMpLG59cmV0dXJuIHQucHJvdG90eXBlLmV4dGVudE9mVmFsdWVzPWZ1bmN0aW9uKHIpe3ZhciBuPU1TLmV4dGVudChyKTtyZXR1cm4gblswXT09bnVsbHx8blsxXT09bnVsbD9bXTpufSx0LnByb3RvdHlwZS5fZDNJbnRlcnBvbGF0ZWRTY2FsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb2xvclNjYWxlLnJhbmdlKFswLDFdKS5pbnRlcnBvbGF0ZSh0aGlzLl9pbnRlcnBvbGF0ZUNvbG9ycygpKX0sdC5wcm90b3R5cGUuX2ludGVycG9sYXRlQ29sb3JzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fY29sb3JSYW5nZTtpZihyLmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcigiQ29sb3Igc2NhbGUgYXJyYXlzIG11c3QgaGF2ZSBhdCBsZWFzdCB0d28gZWxlbWVudHMuIik7cmV0dXJuIGZ1bmN0aW9uKG4saSl7cmV0dXJuIGZ1bmN0aW9uKG8pe289TWF0aC5tYXgoMCxNYXRoLm1pbigxLG8pKTt2YXIgYT1vKihyLmxlbmd0aC0xKSxzPU1hdGguZmxvb3IoYSksbD1NYXRoLmNlaWwoYSksYz1hLXM7cmV0dXJuIE1TLmludGVycG9sYXRlTGFiKHJbc10scltsXSkoYyl9fX0sdC5wcm90b3R5cGUuX3Jlc2V0U2NhbGU9ZnVuY3Rpb24oKXt0aGlzLl9kM1NjYWxlPXRoaXMuX2QzSW50ZXJwb2xhdGVkU2NhbGUoKSx0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpfSx0LnByb3RvdHlwZS5hdXRvRG9tYWluPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXMoKTtyZXR1cm4gci5sZW5ndGg+MCYmdGhpcy5fc2V0RG9tYWluKFtpJHQuTWF0aC5taW4ociwwKSxpJHQuTWF0aC5tYXgociwwKV0pLHRoaXN9LHQucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kM1NjYWxlKHIpfSx0LnByb3RvdHlwZS5fZ2V0RG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JhY2tpbmdTY2FsZURvbWFpbigpfSx0LnByb3RvdHlwZS5fYmFja2luZ1NjYWxlRG9tYWluPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2QzU2NhbGUuZG9tYWluKCk6KHRoaXMuX2QzU2NhbGUuZG9tYWluKHIpLHRoaXMpfSx0LnByb3RvdHlwZS5fZ2V0UmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29sb3JSYW5nZX0sdC5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHIpe3RoaXMuX2NvbG9yUmFuZ2U9cix0aGlzLl9yZXNldFNjYWxlKCl9LHQuUkVEUz1bIiNGRkZGRkYiLCIjRkZGNkUxIiwiI0ZFRjRDMCIsIiNGRUQ5NzYiLCIjRkVCMjRDIiwiI0ZEOEQzQyIsIiNGQzRFMkEiLCIjRTMxQTFDIiwiI0IxMDAyNiJdLHQuQkxVRVM9WyIjRkZGRkZGIiwiI0NDRkZGRiIsIiNBNUZGRkQiLCIjODVGN0ZCIiwiIzZFRDNFRiIsIiM1NUE3RTAiLCIjNDE3RkQwIiwiIzI1NDVEMyIsIiMwQjAyRTEiXSx0LlBPU05FRz1bIiMwQjAyRTEiLCIjMjU0NUQzIiwiIzQxN0ZEMCIsIiM1NUE3RTAiLCIjNkVEM0VGIiwiIzg1RjdGQiIsIiNBNUZGRkQiLCIjQ0NGRkZGIiwiI0ZGRkZGRiIsIiNGRkY2RTEiLCIjRkVGNEMwIiwiI0ZFRDk3NiIsIiNGRUIyNEMiLCIjRkQ4RDNDIiwiI0ZDNEUyQSIsIiNFMzFBMUMiLCIjQjEwMDI2Il0sdH0oaUZlLlNjYWxlKTtub3QuSW50ZXJwb2xhdGVkQ29sb3I9b0ZlfSk7dmFyIHhkPUgoaW90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShpb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBhRmU9KGRlKCksVXQocGUpKSxzRmU9KEVyKCksVXQoTXIpKSxsRmU9ZTQoKSxFUz1GZSgpLGNGZT1rdigpLHVGZT1mdW5jdGlvbihlKXthRmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fdGlja0dlbmVyYXRvcj1mdW5jdGlvbihuKXtyZXR1cm4gbi5kZWZhdWx0VGlja3MoKX0sci5fcGFkUHJvcG9ydGlvbj0uMDUsci5fc25hcHBpbmdEb21haW5FbmFibGVkPSEwLHIuX3BhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXJzPW5ldyBFUy5TZXQscn1yZXR1cm4gdC5wcm90b3R5cGUuYXV0b0RvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kb21haW5NaW49bnVsbCx0aGlzLl9kb21haW5NYXg9bnVsbCxlLnByb3RvdHlwZS5hdXRvRG9tYWluLmNhbGwodGhpcyksdGhpc30sdC5wcm90b3R5cGUuYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZT1mdW5jdGlvbigpe2lmKHRoaXMuX2RvbWFpbk1pbiE9bnVsbCYmdGhpcy5fZG9tYWluTWF4IT1udWxsKXt0aGlzLl9zZXREb21haW4oW3RoaXMuX2RvbWFpbk1pbix0aGlzLl9kb21haW5NYXhdKTtyZXR1cm59dmFyIHI9dGhpcy5fZ2V0RXh0ZW50KCk7aWYodGhpcy5fZG9tYWluTWluIT1udWxsKXt2YXIgbj1yWzFdO3RoaXMuX2RvbWFpbk1pbj49biYmKG49dGhpcy5fZXhwYW5kU2luZ2xlVmFsdWVEb21haW4oW3RoaXMuX2RvbWFpbk1pbix0aGlzLl9kb21haW5NaW5dKVsxXSksdGhpcy5fc2V0RG9tYWluKFt0aGlzLl9kb21haW5NaW4sbl0pO3JldHVybn1pZih0aGlzLl9kb21haW5NYXghPW51bGwpe3ZhciBpPXJbMF07dGhpcy5fZG9tYWluTWF4PD1pJiYoaT10aGlzLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbihbdGhpcy5fZG9tYWluTWF4LHRoaXMuX2RvbWFpbk1heF0pWzBdKSx0aGlzLl9zZXREb21haW4oW2ksdGhpcy5fZG9tYWluTWF4XSk7cmV0dXJufWUucHJvdG90eXBlLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUuY2FsbCh0aGlzKX0sdC5wcm90b3R5cGUuX2dldFVuYm91bmRlZEV4dGVudD1mdW5jdGlvbihyKXtyPT09dm9pZCAwJiYocj0hMSk7dmFyIG49dGhpcy5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXMociksaT10aGlzLl9kZWZhdWx0RXh0ZW50KCk7aWYobi5sZW5ndGghPT0wKXt2YXIgbz1bRVMuTWF0aC5taW4obixpWzBdKSxFUy5NYXRoLm1heChuLGlbMV0pXTtpPXRoaXMuX3BhZERvbWFpbihvKX1yZXR1cm4gaX0sdC5wcm90b3R5cGUuX2dldEV4dGVudD1mdW5jdGlvbigpe3ZhciByPXRoaXMuX2dldFVuYm91bmRlZEV4dGVudCgpO3JldHVybiB0aGlzLl9kb21haW5NaW4hPW51bGwmJihyWzBdPXRoaXMuX2RvbWFpbk1pbiksdGhpcy5fZG9tYWluTWF4IT1udWxsJiYoclsxXT10aGlzLl9kb21haW5NYXgpLHJ9LHQucHJvdG90eXBlLmFkZFBhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3BhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXJzLmFkZChyKSx0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzfSx0LnByb3RvdHlwZS5yZW1vdmVQYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVyPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVycy5kZWxldGUociksdGhpcy5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCksdGhpc30sdC5wcm90b3R5cGUucGFkUHJvcG9ydGlvbj1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9wYWRQcm9wb3J0aW9uO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoInBhZFByb3BvcnRpb24gbXVzdCBiZSBub24tbmVnYXRpdmUiKTtyZXR1cm4gdGhpcy5fcGFkUHJvcG9ydGlvbj1yLHRoaXMuYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZSgpLHRoaXN9LHQucHJvdG90eXBlLl9wYWREb21haW49ZnVuY3Rpb24ocil7dmFyIG49dGhpcztpZihyWzBdLnZhbHVlT2YoKT09PXJbMV0udmFsdWVPZigpKXJldHVybiB0aGlzLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbihyKTtpZih0aGlzLl9wYWRQcm9wb3J0aW9uPT09MClyZXR1cm4gcjt2YXIgaT10aGlzLl9wYWRQcm9wb3J0aW9uLzIsbz1yWzBdLGE9clsxXSxzPSExLGw9ITE7dGhpcy5fcGFkZGluZ0V4Y2VwdGlvbnNQcm92aWRlcnMuZm9yRWFjaChmdW5jdGlvbihmKXt2YXIgcD1mKG4pO3AuZm9yRWFjaChmdW5jdGlvbihkKXtkLnZhbHVlT2YoKT09PW8udmFsdWVPZigpJiYocz0hMCksZC52YWx1ZU9mKCk9PT1hLnZhbHVlT2YoKSYmKGw9ITApfSl9KTt2YXIgYz10aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKTt0aGlzLl9iYWNraW5nU2NhbGVEb21haW4ocik7dmFyIHU9cz9vOnRoaXMuaW52ZXJ0KHRoaXMuc2NhbGUobyktKHRoaXMuc2NhbGUoYSktdGhpcy5zY2FsZShvKSkqaSksaD1sP2E6dGhpcy5pbnZlcnQodGhpcy5zY2FsZShhKSsodGhpcy5zY2FsZShhKS10aGlzLnNjYWxlKG8pKSppKTtyZXR1cm4gdGhpcy5fYmFja2luZ1NjYWxlRG9tYWluKGMpLHRoaXMuX3NuYXBwaW5nRG9tYWluRW5hYmxlZD90aGlzLl9uaWNlRG9tYWluKFt1LGhdKTpbdSxoXX0sdC5wcm90b3R5cGUuc25hcHBpbmdEb21haW5FbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3NuYXBwaW5nRG9tYWluRW5hYmxlZDoodGhpcy5fc25hcHBpbmdEb21haW5FbmFibGVkPXIsdGhpcy5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCksdGhpcyl9LHQucHJvdG90eXBlLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gcn0sdC5wcm90b3R5cGUuaW52ZXJ0PWZ1bmN0aW9uKHIpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgaW52ZXJ0Iil9LHQucHJvdG90eXBlLmRvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gciE9bnVsbCYmKHRoaXMuX2RvbWFpbk1pbj1yWzBdLHRoaXMuX2RvbWFpbk1heD1yWzFdKSxlLnByb3RvdHlwZS5kb21haW4uY2FsbCh0aGlzLHIpfSx0LnByb3RvdHlwZS5kb21haW5NaW49ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5kb21haW4oKVswXToodGhpcy5fZG9tYWluTWluPXIsdGhpcy5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCksdGhpcyl9LHQucHJvdG90eXBlLmRvbWFpbk1heD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLmRvbWFpbigpWzFdOih0aGlzLl9kb21haW5NYXg9cix0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzKX0sdC5wcm90b3R5cGUuZXh0ZW50T2ZWYWx1ZXM9ZnVuY3Rpb24ocil7dmFyIG49c0ZlLmV4dGVudChyLmZpbHRlcihmdW5jdGlvbihpKXtyZXR1cm4gRVMuTWF0aC5pc1ZhbGlkTnVtYmVyKCtpKX0pKTtyZXR1cm4gblswXT09bnVsbHx8blsxXT09bnVsbD9bXTpufSx0LnByb3RvdHlwZS56b29tPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcyxvPWZ1bmN0aW9uKGEpe3JldHVybiBpLmludmVydChsRmUuem9vbU91dChhLHIsbikpfTt0aGlzLmRvbWFpbih0aGlzLnJhbmdlKCkubWFwKG8pKX0sdC5wcm90b3R5cGUucGFuPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT1mdW5jdGlvbihvKXtyZXR1cm4gbi5pbnZlcnQobytyKX07dGhpcy5kb21haW4odGhpcy5yYW5nZSgpLm1hcChpKSl9LHQucHJvdG90eXBlLnNjYWxlVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBzY2FsZVRyYW5zZm9ybWF0aW9uIil9LHQucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBpbnZlcnRlZFRyYW5zZm9ybWF0aW9uIil9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRXh0ZW50PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBnZXRUcmFuc2Zvcm1hdGlvbkV4dGVudCIpfSx0LnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgZ2V0VHJhbnNmb3JtYXRpb25Eb21haW4iKX0sdC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24ocil7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBzZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbiIpfSx0LnByb3RvdHlwZS5fc2V0RG9tYWluPWZ1bmN0aW9uKHIpe3ZhciBuPWZ1bmN0aW9uKGkpe3JldHVybiBFUy5NYXRoLmlzTmFOKGkpfHxpPT09MS8wfHxpPT09LTEvMH07aWYobihyWzBdKXx8bihyWzFdKSl7RVMuV2luZG93Lndhcm4oIldhcm5pbmc6IFF1YW50aXRhdGl2ZVNjYWxlcyBjYW5ub3QgdGFrZSBOYU4gb3IgSW5maW5pdHkgYXMgYSBkb21haW4gdmFsdWUuIElnbm9yaW5nLiIpO3JldHVybn1lLnByb3RvdHlwZS5fc2V0RG9tYWluLmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUuZGVmYXVsdFRpY2tzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBfZ2V0RGVmYXVsdFRpY2tzIil9LHQucHJvdG90eXBlLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RpY2tHZW5lcmF0b3IodGhpcyl9LHQucHJvdG90eXBlLl9uaWNlRG9tYWluPWZ1bmN0aW9uKHIsbil7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBfbmljZURvbWFpbiIpfSx0LnByb3RvdHlwZS5fZGVmYXVsdEV4dGVudD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgX2RlZmF1bHRFeHRlbnQiKX0sdC5wcm90b3R5cGUudGlja0dlbmVyYXRvcj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl90aWNrR2VuZXJhdG9yOih0aGlzLl90aWNrR2VuZXJhdG9yPXIsdGhpcyl9LHQuX0RFRkFVTFRfTlVNX1RJQ0tTPTEwLHR9KGNGZS5TY2FsZSk7aW90LlF1YW50aXRhdGl2ZVNjYWxlPXVGZX0pO3ZhciBhJHQ9SChvb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG9vdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGhGZT0oZGUoKSxVdChwZSkpLGZGZT0oRXIoKSxVdChNcikpLHBGZT14ZCgpLGRGZT1mdW5jdGlvbihlKXtoRmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fZDNTY2FsZT1mRmUuc2NhbGVMaW5lYXIoKSxyfXJldHVybiB0LnByb3RvdHlwZS5fZGVmYXVsdEV4dGVudD1mdW5jdGlvbigpe3JldHVyblswLDFdfSx0LnByb3RvdHlwZS5fZXhwYW5kU2luZ2xlVmFsdWVEb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHJbMF09PT1yWzFdP1tyWzBdLTEsclsxXSsxXTpyfSx0LnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZDNTY2FsZShyKX0sdC5wcm90b3R5cGUuc2NhbGVUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5zY2FsZShyKX0sdC5wcm90b3R5cGUuaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5pbnZlcnQocil9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2dldFVuYm91bmRlZEV4dGVudCghMCl9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tYWluKCl9LHQucHJvdG90eXBlLnNldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKHIpe3RoaXMuZG9tYWluKHIpfSx0LnByb3RvdHlwZS5fZ2V0RG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JhY2tpbmdTY2FsZURvbWFpbigpfSx0LnByb3RvdHlwZS5fYmFja2luZ1NjYWxlRG9tYWluPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2QzU2NhbGUuZG9tYWluKCk6KHRoaXMuX2QzU2NhbGUuZG9tYWluKHIpLHRoaXMpfSx0LnByb3RvdHlwZS5fZ2V0UmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5yYW5nZSgpfSx0LnByb3RvdHlwZS5fc2V0UmFuZ2U9ZnVuY3Rpb24ocil7dGhpcy5fZDNTY2FsZS5yYW5nZShyKX0sdC5wcm90b3R5cGUuaW52ZXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kM1NjYWxlLmludmVydChyKX0sdC5wcm90b3R5cGUuZGVmYXVsdFRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUudGlja3ModC5fREVGQVVMVF9OVU1fVElDS1MpfSx0LnByb3RvdHlwZS5fbmljZURvbWFpbj1mdW5jdGlvbihyLG4pe3JldHVybiB0aGlzLl9kM1NjYWxlLmNvcHkoKS5kb21haW4ocikubmljZShuKS5kb21haW4oKX0sdH0ocEZlLlF1YW50aXRhdGl2ZVNjYWxlKTtvb3QuTGluZWFyPWRGZX0pO3ZhciBzJHQ9SChhb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGFvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG1GZT0oZGUoKSxVdChwZSkpLGdGZT0oRXIoKSxVdChNcikpLF9GZT14ZCgpLHlGZT1mdW5jdGlvbihlKXttRmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyKXtyPT09dm9pZCAwJiYocj0xMCk7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLl9kM1NjYWxlPWdGZS5zY2FsZUxvZygpLmJhc2Uociksbi5fc2V0RG9tYWluKG4uX2RlZmF1bHRFeHRlbnQoKSksbn1yZXR1cm4gdC5wcm90b3R5cGUuX2RlZmF1bHRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm5bMSx0aGlzLl9kM1NjYWxlLmJhc2UoKV19LHQucHJvdG90eXBlLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gclswXT09PXJbMV0/W3JbMF0vdGhpcy5fZDNTY2FsZS5iYXNlKCksclsxXSp0aGlzLl9kM1NjYWxlLmJhc2UoKV06cn0sdC5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2QzU2NhbGUocil9LHQucHJvdG90eXBlLnNjYWxlVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuc2NhbGUocil9LHQucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuaW52ZXJ0KHIpfSx0LnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9nZXRVbmJvdW5kZWRFeHRlbnQoITApfSx0LnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbWFpbigpfSx0LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbihyKXt0aGlzLmRvbWFpbihyKX0sdC5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKX0sdC5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9kM1NjYWxlLmRvbWFpbigpOih0aGlzLl9kM1NjYWxlLmRvbWFpbihyKSx0aGlzKX0sdC5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUucmFuZ2UoKX0sdC5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHIpe3RoaXMuX2QzU2NhbGUucmFuZ2Uocil9LHQucHJvdG90eXBlLmludmVydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5pbnZlcnQocil9LHQucHJvdG90eXBlLmRlZmF1bHRUaWNrcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnRpY2tzKHQuX0RFRkFVTFRfTlVNX1RJQ0tTKX0sdC5wcm90b3R5cGUuX25pY2VEb21haW49ZnVuY3Rpb24ocixuKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5jb3B5KCkuZG9tYWluKHIpLm5pY2UoKS5kb21haW4oKX0sdH0oX0ZlLlF1YW50aXRhdGl2ZVNjYWxlKTthb3QuTG9nPXlGZX0pO3ZhciBsJHQ9SChsb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGxvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHZGZT0oZGUoKSxVdChwZSkpLHI0PShFcigpLFV0KE1yKSksVFM9RmUoKSxzb3Q9UnMoKSx4RmU9eGQoKSxiRmU9ZnVuY3Rpb24oZSl7dkZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9MTApO3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztpZihuLl9sb2dUaWNrR2VuZXJhdG9yPWZ1bmN0aW9uKGkpe3ZhciBvPWZ1bmN0aW9uKHgsYixTKXtyZXR1cm5beCxiLFNdLnNvcnQoZnVuY3Rpb24oQyxQKXtyZXR1cm4gQy1QfSlbMV19LGE9VFMuTWF0aC5taW4obi5fdW50cmFuc2Zvcm1lZERvbWFpbiwwKSxzPVRTLk1hdGgubWF4KG4uX3VudHJhbnNmb3JtZWREb21haW4sMCksbD1hLGM9byhhLHMsLW4uX3Bpdm90KSx1PW8oYSxzLG4uX3Bpdm90KSxoPXMsZj1uLl9sb2dUaWNrcygtYywtbCkubWFwKGZ1bmN0aW9uKHgpe3JldHVybi14fSkucmV2ZXJzZSgpLHA9bi5fbG9nVGlja3ModSxoKSxkPU1hdGgubWF4KGEsLW4uX3Bpdm90KSxnPU1hdGgubWluKHMsbi5fcGl2b3QpLF89cjQuc2NhbGVMaW5lYXIoKS5kb21haW4oW2QsZ10pLnRpY2tzKG4uX2hvd01hbnlUaWNrcyhkLGcpKSx5PWYuY29uY2F0KF8pLmNvbmNhdChwKTtyZXR1cm4geS5sZW5ndGg8PTEmJih5PXI0LnNjYWxlTGluZWFyKCkuZG9tYWluKFthLHNdKS50aWNrcyhzb3QuTW9kaWZpZWRMb2cuX0RFRkFVTFRfTlVNX1RJQ0tTKSkseX0sbi5fZDNTY2FsZT1yNC5zY2FsZUxpbmVhcigpLG4uX2Jhc2U9cixuLl9waXZvdD1uLl9iYXNlLG4uX3NldERvbWFpbihuLl9kZWZhdWx0RXh0ZW50KCkpLG4udGlja0dlbmVyYXRvcihuLl9sb2dUaWNrR2VuZXJhdG9yKSxyPD0xKXRocm93IG5ldyBFcnJvcigiTW9kaWZpZWRMb2dTY2FsZTogVGhlIGJhc2UgbXVzdCBiZSA+IDEiKTtyZXR1cm4gbn1yZXR1cm4gdC5wcm90b3R5cGUuX2FkanVzdGVkTG9nPWZ1bmN0aW9uKHIpe3ZhciBuPXI8MD8tMToxO3JldHVybiByKj1uLHI8dGhpcy5fcGl2b3QmJihyKz0odGhpcy5fcGl2b3QtcikvdGhpcy5fcGl2b3QpLHI9TWF0aC5sb2cocikvTWF0aC5sb2codGhpcy5fYmFzZSkscio9bixyfSx0LnByb3RvdHlwZS5faW52ZXJ0ZWRBZGp1c3RlZExvZz1mdW5jdGlvbihyKXt2YXIgbj1yPDA/LTE6MTtyZXR1cm4gcio9bixyPU1hdGgucG93KHRoaXMuX2Jhc2Uscikscjx0aGlzLl9waXZvdCYmKHI9dGhpcy5fcGl2b3QqKHItMSkvKHRoaXMuX3Bpdm90LTEpKSxyKj1uLHJ9LHQucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kM1NjYWxlKHRoaXMuX2FkanVzdGVkTG9nKHIpKX0sdC5wcm90b3R5cGUuaW52ZXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9pbnZlcnRlZEFkanVzdGVkTG9nKHRoaXMuX2QzU2NhbGUuaW52ZXJ0KHIpKX0sdC5wcm90b3R5cGUuc2NhbGVUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5zY2FsZShyKX0sdC5wcm90b3R5cGUuaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5pbnZlcnQocil9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2dldFVuYm91bmRlZEV4dGVudCghMCl9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tYWluKCl9LHQucHJvdG90eXBlLnNldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKHIpe3RoaXMuZG9tYWluKHIpfSx0LnByb3RvdHlwZS5fZ2V0RG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VudHJhbnNmb3JtZWREb21haW59LHQucHJvdG90eXBlLl9zZXREb21haW49ZnVuY3Rpb24ocil7dGhpcy5fdW50cmFuc2Zvcm1lZERvbWFpbj1yO3ZhciBuPVt0aGlzLl9hZGp1c3RlZExvZyhyWzBdKSx0aGlzLl9hZGp1c3RlZExvZyhyWzFdKV07ZS5wcm90b3R5cGUuX3NldERvbWFpbi5jYWxsKHRoaXMsbil9LHQucHJvdG90eXBlLl9iYWNraW5nU2NhbGVEb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZDNTY2FsZS5kb21haW4oKToodGhpcy5fZDNTY2FsZS5kb21haW4ociksdGhpcyl9LHQucHJvdG90eXBlLl9sb2dUaWNrcz1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMsbz10aGlzLl9ob3dNYW55VGlja3MocixuKTtpZihvPT09MClyZXR1cm5bXTt2YXIgYT1NYXRoLmZsb29yKE1hdGgubG9nKHIpL01hdGgubG9nKHRoaXMuX2Jhc2UpKSxzPU1hdGguY2VpbChNYXRoLmxvZyhuKS9NYXRoLmxvZyh0aGlzLl9iYXNlKSksbD1yNC5yYW5nZShzLGEsLU1hdGguY2VpbCgocy1hKS9vKSksYz1yNC5yYW5nZSh0aGlzLl9iYXNlLDEsLSh0aGlzLl9iYXNlLTEpKS5tYXAoTWF0aC5mbG9vciksdT1UUy5BcnJheS51bmlxKGMpLGg9bC5tYXAoZnVuY3Rpb24oZyl7cmV0dXJuIHUubWFwKGZ1bmN0aW9uKF8pe3JldHVybiBNYXRoLnBvdyhpLl9iYXNlLGctMSkqX30pfSksZj1UUy5BcnJheS5mbGF0dGVuKGgpLHA9Zi5maWx0ZXIoZnVuY3Rpb24oZyl7cmV0dXJuIHI8PWcmJmc8PW59KSxkPXAuc29ydChmdW5jdGlvbihnLF8pe3JldHVybiBnLV99KTtyZXR1cm4gZH0sdC5wcm90b3R5cGUuX2hvd01hbnlUaWNrcz1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX2FkanVzdGVkTG9nKFRTLk1hdGgubWluKHRoaXMuX3VudHJhbnNmb3JtZWREb21haW4sMCkpLG89dGhpcy5fYWRqdXN0ZWRMb2coVFMuTWF0aC5tYXgodGhpcy5fdW50cmFuc2Zvcm1lZERvbWFpbiwwKSksYT10aGlzLl9hZGp1c3RlZExvZyhyKSxzPXRoaXMuX2FkanVzdGVkTG9nKG4pLGw9KHMtYSkvKG8taSksYz1NYXRoLmNlaWwobCpzb3QuTW9kaWZpZWRMb2cuX0RFRkFVTFRfTlVNX1RJQ0tTKTtyZXR1cm4gY30sdC5wcm90b3R5cGUuX25pY2VEb21haW49ZnVuY3Rpb24ocixuKXtyZXR1cm4gcn0sdC5wcm90b3R5cGUuX2RlZmF1bHRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm5bMCx0aGlzLl9iYXNlXX0sdC5wcm90b3R5cGUuX2V4cGFuZFNpbmdsZVZhbHVlRG9tYWluPWZ1bmN0aW9uKHIpe2lmKHJbMF09PT1yWzFdKXt2YXIgbj1yWzBdO3JldHVybiBuPjA/W24vdGhpcy5fYmFzZSxuKnRoaXMuX2Jhc2VdOm49PT0wP1stdGhpcy5fYmFzZSx0aGlzLl9iYXNlXTpbbip0aGlzLl9iYXNlLG4vdGhpcy5fYmFzZV19cmV0dXJuIHJ9LHQucHJvdG90eXBlLl9nZXRSYW5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnJhbmdlKCl9LHQucHJvdG90eXBlLl9zZXRSYW5nZT1mdW5jdGlvbihyKXt0aGlzLl9kM1NjYWxlLnJhbmdlKHIpfSx0LnByb3RvdHlwZS5kZWZhdWx0VGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS50aWNrcyhzb3QuTW9kaWZpZWRMb2cuX0RFRkFVTFRfTlVNX1RJQ0tTKX0sdH0oeEZlLlF1YW50aXRhdGl2ZVNjYWxlKTtsb3QuTW9kaWZpZWRMb2c9YkZlfSk7dmFyIGMkdD1IKGNvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoY290LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgd0ZlPShkZSgpLFV0KHBlKSksX2E9KEVyKCksVXQoTXIpKSxSdj1IRigpLFNGZT14ZCgpLE1GZT1mdW5jdGlvbihlKXt3RmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fZDNTY2FsZT1fYS5zY2FsZVRpbWUoKSxyLmF1dG9Eb21haW4oKSxyfXJldHVybiB0LnByb3RvdHlwZS50aWNrSW50ZXJ2YWw9ZnVuY3Rpb24ocixuLGkpe249PT12b2lkIDAmJihuPTEpLGk9PT12b2lkIDAmJihpPSExKTt2YXIgbz1fYS5zY2FsZVRpbWUoKSxhPXQudGltZUludGVydmFsVG9EM1RpbWUocixpKS5ldmVyeShuKTtyZXR1cm4gby5kb21haW4odGhpcy5kb21haW4oKSksby5yYW5nZSh0aGlzLnJhbmdlKCkpLG8udGlja3MoYSl9LHQucHJvdG90eXBlLl9zZXREb21haW49ZnVuY3Rpb24ocil7aWYoclsxXTxyWzBdKXRocm93IG5ldyBFcnJvcigiU2NhbGUuVGltZSBkb21haW4gdmFsdWVzIG11c3QgYmUgaW4gY2hyb25vbG9naWNhbCBvcmRlciIpO3JldHVybiBlLnByb3RvdHlwZS5fc2V0RG9tYWluLmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUuX2RlZmF1bHRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm5bbmV3IERhdGUoIjE5NzAtMDEtMDEiKSxuZXcgRGF0ZSgiMTk3MC0wMS0wMiIpXX0sdC5wcm90b3R5cGUuX2V4cGFuZFNpbmdsZVZhbHVlRG9tYWluPWZ1bmN0aW9uKHIpe3ZhciBuPXJbMF0uZ2V0VGltZSgpLGk9clsxXS5nZXRUaW1lKCk7aWYobj09PWkpe3ZhciBvPW5ldyBEYXRlKG4pO28uc2V0RGF0ZShvLmdldERhdGUoKS0xKTt2YXIgYT1uZXcgRGF0ZShpKTtyZXR1cm4gYS5zZXREYXRlKGEuZ2V0RGF0ZSgpKzEpLFtvLGFdfXJldHVybiByfSx0LnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZDNTY2FsZShyKX0sdC5wcm90b3R5cGUuc2NhbGVUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5zY2FsZShuZXcgRGF0ZShyKSl9LHQucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuaW52ZXJ0KHIpLmdldFRpbWUoKX0sdC5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtYXRpb25FeHRlbnQ9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLl9nZXRVbmJvdW5kZWRFeHRlbnQoITApO3JldHVybltyWzBdLnZhbHVlT2YoKSxyWzFdLnZhbHVlT2YoKV19LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5kb21haW4oKTtyZXR1cm5bclswXS52YWx1ZU9mKCksclsxXS52YWx1ZU9mKCldfSx0LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbihyKXt2YXIgbj1yWzBdLGk9clsxXTt0aGlzLmRvbWFpbihbbmV3IERhdGUobiksbmV3IERhdGUoaSldKX0sdC5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKX0sdC5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9kM1NjYWxlLmRvbWFpbigpOih0aGlzLl9kM1NjYWxlLmRvbWFpbihyKSx0aGlzKX0sdC5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUucmFuZ2UoKX0sdC5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHIpe3RoaXMuX2QzU2NhbGUucmFuZ2Uocil9LHQucHJvdG90eXBlLmludmVydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5pbnZlcnQocil9LHQucHJvdG90eXBlLmRlZmF1bHRUaWNrcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnRpY2tzKHQuX0RFRkFVTFRfTlVNX1RJQ0tTKX0sdC5wcm90b3R5cGUuX25pY2VEb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2QzU2NhbGUuY29weSgpLmRvbWFpbihyKS5uaWNlKCkuZG9tYWluKCl9LHQudGltZUludGVydmFsVG9EM1RpbWU9ZnVuY3Rpb24ocixuKXtzd2l0Y2gocil7Y2FzZSBSdi5UaW1lSW50ZXJ2YWwuc2Vjb25kOnJldHVybiBuP19hLnV0Y1NlY29uZDpfYS50aW1lU2Vjb25kO2Nhc2UgUnYuVGltZUludGVydmFsLm1pbnV0ZTpyZXR1cm4gbj9fYS51dGNNaW51dGU6X2EudGltZU1pbnV0ZTtjYXNlIFJ2LlRpbWVJbnRlcnZhbC5ob3VyOnJldHVybiBuP19hLnV0Y0hvdXI6X2EudGltZUhvdXI7Y2FzZSBSdi5UaW1lSW50ZXJ2YWwuZGF5OnJldHVybiBuP19hLnV0Y0RheTpfYS50aW1lRGF5O2Nhc2UgUnYuVGltZUludGVydmFsLndlZWs6cmV0dXJuIG4/X2EudXRjV2VlazpfYS50aW1lV2VlaztjYXNlIFJ2LlRpbWVJbnRlcnZhbC5tb250aDpyZXR1cm4gbj9fYS51dGNNb250aDpfYS50aW1lTW9udGg7Y2FzZSBSdi5UaW1lSW50ZXJ2YWwueWVhcjpyZXR1cm4gbj9fYS51dGNZZWFyOl9hLnRpbWVZZWFyO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIlRpbWVJbnRlcnZhbCBzcGVjaWZpZWQgZG9lcyBub3QgZXhpc3Q6ICIrcil9fSx0fShTRmUuUXVhbnRpdGF0aXZlU2NhbGUpO2NvdC5UaW1lPU1GZX0pO3ZhciBScz1IKEh1PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShIdSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIE52PShkZSgpLFV0KHBlKSksRUZlPVpYdCgpO0h1LlRpY2tHZW5lcmF0b3JzPUVGZTtOdi5fX2V4cG9ydFN0YXIoZW90KCksSHUpO052Ll9fZXhwb3J0U3RhcihuJHQoKSxIdSk7TnYuX19leHBvcnRTdGFyKG8kdCgpLEh1KTtOdi5fX2V4cG9ydFN0YXIoYSR0KCksSHUpO052Ll9fZXhwb3J0U3RhcihzJHQoKSxIdSk7TnYuX19leHBvcnRTdGFyKGwkdCgpLEh1KTtOdi5fX2V4cG9ydFN0YXIoYyR0KCksSHUpO3ZhciBURmU9ZW90KCksQ0ZlPXhkKCk7ZnVuY3Rpb24gQUZlKGUpe3JldHVybiBlIGluc3RhbmNlb2YgQ0ZlLlF1YW50aXRhdGl2ZVNjYWxlfHxlIGluc3RhbmNlb2YgVEZlLkNhdGVnb3J5fUh1LmlzVHJhbnNmb3JtYWJsZT1BRmV9KTt2YXIgSEY9SChTZT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoU2UsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBQRmU9KGRlKCksVXQocGUpKSxWdT0oRXIoKSxVdChNcikpLHUkdD15bCgpLGgkdD1CdSgpLElGZT1ScygpLG40PUZlKCksdW90PUxmKCksZXM9dDQoKTtTZS5UaW1lSW50ZXJ2YWw9dW90Lm1ha2VFbnVtKFsic2Vjb25kIiwibWludXRlIiwiaG91ciIsImRheSIsIndlZWsiLCJtb250aCIsInllYXIiXSk7U2UuVGltZUF4aXNPcmllbnRhdGlvbj11b3QubWFrZUVudW0oWyJ0b3AiLCJib3R0b20iXSk7U2UuVGllckxhYmVsUG9zaXRpb249dW90Lm1ha2VFbnVtKFsiYmV0d2VlbiIsImNlbnRlciJdKTt2YXIgTEZlPWZ1bmN0aW9uKGUpe1BGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIsbixpKXt2YXIgbz1lLmNhbGwodGhpcyxyLG4pfHx0aGlzO3JldHVybiBvLl9tYXhUaW1lSW50ZXJ2YWxQcmVjaXNpb249bnVsbCxvLl90aWVyTGFiZWxQb3NpdGlvbnM9W10sby5fdXNlVVRDPWksby5hZGRDbGFzcygidGltZS1heGlzIiksby50aWNrTGFiZWxQYWRkaW5nKDUpLG8uYXhpc0NvbmZpZ3VyYXRpb25zKHQuX0RFRkFVTFRfVElNRV9BWElTX0NPTkZJR1VSQVRJT05TKG8uX3VzZVVUQykpLG8uYW5ub3RhdGlvbkZvcm1hdHRlcihoJHQudGltZSgiJWEgJWIgJWQsICVZIixvLl91c2VVVEMpKSxvfXJldHVybiB0LnByb3RvdHlwZS50aWVyTGFiZWxQb3NpdGlvbnM9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fdGllckxhYmVsUG9zaXRpb25zO2lmKCFyLmV2ZXJ5KGZ1bmN0aW9uKG4pe3JldHVybiBuLnRvTG93ZXJDYXNlKCk9PT0iYmV0d2VlbiJ8fG4udG9Mb3dlckNhc2UoKT09PSJjZW50ZXIifSkpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBwb3NpdGlvbiBmb3IgdGllciBsYWJlbHMiKTtyZXR1cm4gdGhpcy5fdGllckxhYmVsUG9zaXRpb25zPXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5tYXhUaW1lSW50ZXJ2YWxQcmVjaXNpb249ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fbWF4VGltZUludGVydmFsUHJlY2lzaW9uOih0aGlzLl9tYXhUaW1lSW50ZXJ2YWxQcmVjaXNpb249cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5jdXJyZW50QXhpc0NvbmZpZ3VyYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zW3RoaXMuX21vc3RQcmVjaXNlQ29uZmlnSW5kZXhdfSx0LnByb3RvdHlwZS5heGlzQ29uZmlndXJhdGlvbnM9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zO3RoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9ucz1yLHRoaXMuX251bVRpZXJzPW40Lk1hdGgubWF4KHRoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9ucy5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEubGVuZ3RofSksMCksdGhpcy5faXNBbmNob3JlZCYmdGhpcy5fc2V0dXBEb21FbGVtZW50cygpO2Zvcih2YXIgbj10aGlzLnRpZXJMYWJlbFBvc2l0aW9ucygpLGk9W10sbz0wO288dGhpcy5fbnVtVGllcnM7bysrKWkucHVzaChuW29dfHwiYmV0d2VlbiIpO3JldHVybiB0aGlzLnRpZXJMYWJlbFBvc2l0aW9ucyhpKSx0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLl9nZXRNb3N0UHJlY2lzZUNvbmZpZ3VyYXRpb25JbmRleD1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj10aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnMubGVuZ3RoO3JldHVybiB0aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnMuZm9yRWFjaChmdW5jdGlvbihpLG8pe288biYmaS5ldmVyeShmdW5jdGlvbihhKXtyZXR1cm4gci5fY2hlY2tUaW1lQXhpc1RpZXJDb25maWd1cmF0aW9uKGEpfSkmJihuPW8pfSksbj09PXRoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9ucy5sZW5ndGgmJihuNC5XaW5kb3cud2Fybigiem9vbWVkIG91dCB0b28gZmFyOiBjb3VsZCBub3QgZmluZCBzdWl0YWJsZSBpbnRlcnZhbCB0byBkaXNwbGF5IGxhYmVscyIpLC0tbiksbn0sdC5wcm90b3R5cGUub3JpZW50YXRpb249ZnVuY3Rpb24ocil7aWYociYmKHIudG9Mb3dlckNhc2UoKT09PSJyaWdodCJ8fHIudG9Mb3dlckNhc2UoKT09PSJsZWZ0IikpdGhyb3cgbmV3IEVycm9yKHIrIiBpcyBub3QgYSBzdXBwb3J0ZWQgb3JpZW50YXRpb24gZm9yIFRpbWVBeGlzIC0gb25seSBob3Jpem9udGFsIG9yaWVudGF0aW9ucyBhcmUgc3VwcG9ydGVkIik7cmV0dXJuIGUucHJvdG90eXBlLm9yaWVudGF0aW9uLmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUuX2NvbXB1dGVIZWlnaHQ9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLl9tZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0O3RoaXMuX3RpZXJIZWlnaHRzPVtdO2Zvcih2YXIgbj0wO248dGhpcy5fbnVtVGllcnM7bisrKXRoaXMuX3RpZXJIZWlnaHRzLnB1c2gocit0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKSsodGhpcy5fdGllckxhYmVsUG9zaXRpb25zW25dPT09ImJldHdlZW4iPzA6dGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCkpKTtyZXR1cm4gVnUuc3VtKHRoaXMuX3RpZXJIZWlnaHRzKX0sdC5wcm90b3R5cGUuX2dldEludGVydmFsTGVuZ3RoPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX3NjYWxlLmRvbWFpbigpWzBdLGk9SUZlLlRpbWUudGltZUludGVydmFsVG9EM1RpbWUoci5pbnRlcnZhbCx0aGlzLl91c2VVVEMpLG89aS5vZmZzZXQobixyLnN0ZXApO2lmKG8+dGhpcy5fc2NhbGUuZG9tYWluKClbMV0pcmV0dXJuIHRoaXMud2lkdGgoKTt2YXIgYT1NYXRoLmFicyh0aGlzLl9zY2FsZS5zY2FsZShvKS10aGlzLl9zY2FsZS5zY2FsZShuKSk7cmV0dXJuIGF9LHQucHJvdG90eXBlLl9tYXhXaWR0aEZvckludGVydmFsPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9tZWFzdXJlci5tZWFzdXJlKHIuZm9ybWF0dGVyKHQuX0xPTkdfREFURSkpLndpZHRofSx0LnByb3RvdHlwZS5fY2hlY2tUaW1lQXhpc1RpZXJDb25maWd1cmF0aW9uPWZ1bmN0aW9uKHIpe2lmKHRoaXMuX21heFRpbWVJbnRlcnZhbFByZWNpc2lvbiE9bnVsbCl7dmFyIG49dC5fU09SVEVEX1RJTUVfSU5URVJWQUxfSU5ERVhbdGhpcy5fbWF4VGltZUludGVydmFsUHJlY2lzaW9uXSxpPXQuX1NPUlRFRF9USU1FX0lOVEVSVkFMX0lOREVYW3IuaW50ZXJ2YWxdO2lmKG4hPW51bGwmJmkhPW51bGwmJmk8bilyZXR1cm4hMX12YXIgbz10aGlzLl9tYXhXaWR0aEZvckludGVydmFsKHIpKzIqdGhpcy50aWNrTGFiZWxQYWRkaW5nKCk7cmV0dXJuIE1hdGgubWluKHRoaXMuX2dldEludGVydmFsTGVuZ3RoKHIpLHRoaXMud2lkdGgoKSk+PW99LHQucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHIsbil7dmFyIGk9ZS5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXIuY2FsbCh0aGlzLHIsbiksbz10aGlzLl90aWVySGVpZ2h0cy5yZWR1Y2UoZnVuY3Rpb24ocyxsLGMsdSl7cmV0dXJuIHMrbD5pLmhlaWdodD9zOnMrbH0pLGE9dGhpcy5tYXJnaW4oKSsodGhpcy5hbm5vdGF0aW9uc0VuYWJsZWQoKT90aGlzLmFubm90YXRpb25UaWVyQ291bnQoKSp0aGlzLl9hbm5vdGF0aW9uVGllckhlaWdodCgpOjApO3JldHVybiBpLmhlaWdodD1NYXRoLm1pbihpLmhlaWdodCxvK2EpLGl9LHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX3NldHVwRG9tRWxlbWVudHMoKX0sdC5wcm90b3R5cGUuX3NldHVwRG9tRWxlbWVudHM9ZnVuY3Rpb24oKXt0aGlzLmNvbnRlbnQoKS5zZWxlY3RBbGwoIi4iK3QuVElNRV9BWElTX1RJRVJfQ0xBU1MpLnJlbW92ZSgpLHRoaXMuX3RpZXJMYWJlbENvbnRhaW5lcnM9W10sdGhpcy5fdGllck1hcmtDb250YWluZXJzPVtdLHRoaXMuX3RpZXJCYXNlbGluZXM9W10sdGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLnJlbW92ZSgpLHRoaXMuX2Jhc2VsaW5lLnJlbW92ZSgpO2Zvcih2YXIgcj0wO3I8dGhpcy5fbnVtVGllcnM7KytyKXt2YXIgbj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKHQuVElNRV9BWElTX1RJRVJfQ0xBU1MsITApO3RoaXMuX3RpZXJMYWJlbENvbnRhaW5lcnMucHVzaChuLmFwcGVuZCgiZyIpLmNsYXNzZWQoZXMuQXhpcy5USUNLX0xBQkVMX0NMQVNTKyItY29udGFpbmVyIiwhMCkpLHRoaXMuX3RpZXJNYXJrQ29udGFpbmVycy5wdXNoKG4uYXBwZW5kKCJnIikuY2xhc3NlZChlcy5BeGlzLlRJQ0tfTUFSS19DTEFTUysiLWNvbnRhaW5lciIsITApKSx0aGlzLl90aWVyQmFzZWxpbmVzLnB1c2gobi5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJiYXNlbGluZSIsITApKX12YXIgaT1uZXcgdSR0LlN2Z0NvbnRleHQodGhpcy5fdGllckxhYmVsQ29udGFpbmVyc1swXS5ub2RlKCkpO3RoaXMuX21lYXN1cmVyPW5ldyB1JHQuQ2FjaGVNZWFzdXJlcihpKX0sdC5wcm90b3R5cGUuX2dldFRpY2tJbnRlcnZhbFZhbHVlcz1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fc2NhbGUudGlja0ludGVydmFsKHIuaW50ZXJ2YWwsci5zdGVwLHRoaXMuX3VzZVVUQyl9LHQucHJvdG90eXBlLl9nZXRUaWNrVmFsdWVzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztyZXR1cm4gdGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zW3RoaXMuX21vc3RQcmVjaXNlQ29uZmlnSW5kZXhdLnJlZHVjZShmdW5jdGlvbihuLGkpe3JldHVybiBuLmNvbmNhdChyLl9nZXRUaWNrSW50ZXJ2YWxWYWx1ZXMoaSkpfSxbXSl9LHQucHJvdG90eXBlLl9jbGVhblRpZXJzPWZ1bmN0aW9uKCl7Zm9yKHZhciByPTA7cjx0aGlzLl90aWVyTGFiZWxDb250YWluZXJzLmxlbmd0aDtyKyspdGhpcy5fdGllckxhYmVsQ29udGFpbmVyc1tyXS5zZWxlY3RBbGwoIi4iK2VzLkF4aXMuVElDS19MQUJFTF9DTEFTUykucmVtb3ZlKCksdGhpcy5fdGllck1hcmtDb250YWluZXJzW3JdLnNlbGVjdEFsbCgiLiIrZXMuQXhpcy5USUNLX01BUktfQ0xBU1MpLnJlbW92ZSgpLHRoaXMuX3RpZXJCYXNlbGluZXNbcl0uc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKX0sdC5wcm90b3R5cGUuX2dldFRpY2tWYWx1ZXNGb3JDb25maWd1cmF0aW9uPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX3NjYWxlLnRpY2tJbnRlcnZhbChyLmludGVydmFsLHIuc3RlcCx0aGlzLl91c2VVVEMpLGk9dGhpcy5fc2NhbGUuZG9tYWluKCksbz1uLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS52YWx1ZU9mKCl9KTtyZXR1cm4gby5pbmRleE9mKGlbMF0udmFsdWVPZigpKT09PS0xJiZuLnVuc2hpZnQoaVswXSksby5pbmRleE9mKGlbMV0udmFsdWVPZigpKT09PS0xJiZuLnB1c2goaVsxXSksbn0sdC5wcm90b3R5cGUuX3JlbmRlclRpZXJMYWJlbHM9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXMsYT10aGlzLl9nZXRUaWNrVmFsdWVzRm9yQ29uZmlndXJhdGlvbihuKSxzPVtdO3RoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tpXT09PSJiZXR3ZWVuIiYmbi5zdGVwPT09MT9hLm1hcChmdW5jdGlvbihnLF8pe18rMT49YS5sZW5ndGh8fHMucHVzaChuZXcgRGF0ZSgoYVtfKzFdLnZhbHVlT2YoKS1hW19dLnZhbHVlT2YoKSkvMithW19dLnZhbHVlT2YoKSkpfSk6cz1hO3ZhciBsPXIuc2VsZWN0QWxsKCIuIitlcy5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpLmRhdGEocyxmdW5jdGlvbihnKXtyZXR1cm4gU3RyaW5nKGcudmFsdWVPZigpKX0pLGM9bC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZXMuQXhpcy5USUNLX0xBQkVMX0NMQVNTLCEwKTtjLmFwcGVuZCgidGV4dCIpO3ZhciB1PXRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tpXT09PSJjZW50ZXIifHxuLnN0ZXA9PT0xPzA6dGhpcy50aWNrTGFiZWxQYWRkaW5nKCksaDt0aGlzLm9yaWVudGF0aW9uKCk9PT0iYm90dG9tIj9oPVZ1LnN1bSh0aGlzLl90aWVySGVpZ2h0cy5zbGljZSgwLGkrMSkpLXRoaXMudGlja0xhYmVsUGFkZGluZygpOnRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tpXT09PSJjZW50ZXIiP2g9dGhpcy5oZWlnaHQoKS1WdS5zdW0odGhpcy5fdGllckhlaWdodHMuc2xpY2UoMCxpKSktdGhpcy50aWNrTGFiZWxQYWRkaW5nKCktdGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCk6aD10aGlzLmhlaWdodCgpLVZ1LnN1bSh0aGlzLl90aWVySGVpZ2h0cy5zbGljZSgwLGkpKS10aGlzLnRpY2tMYWJlbFBhZGRpbmcoKTt2YXIgZj1sLm1lcmdlKGMpLHA9Zi5zZWxlY3RBbGwoInRleHQiKTtwLnNpemUoKT4wJiZwLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3UrIiwiK2grIikiKSxsLmV4aXQoKS5yZW1vdmUoKSxmLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZyl7cmV0dXJuInRyYW5zbGF0ZSgiK28uX3NjYWxlLnNjYWxlKGcpKyIsMCkifSk7dmFyIGQ9dGhpcy5fdGllckxhYmVsUG9zaXRpb25zW2ldPT09ImNlbnRlciJ8fG4uc3RlcD09PTE/Im1pZGRsZSI6InN0YXJ0IjtmLnNlbGVjdEFsbCgidGV4dCIpLnRleHQobi5mb3JtYXR0ZXIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsZCl9LHQucHJvdG90eXBlLl9yZW5kZXJUaWNrTWFya3M9ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLl90aWVyTWFya0NvbnRhaW5lcnNbbl0uc2VsZWN0QWxsKCIuIitlcy5BeGlzLlRJQ0tfTUFSS19DTEFTUykuZGF0YShyKSxvPWkuZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKGVzLkF4aXMuVElDS19NQVJLX0NMQVNTLCEwKS5tZXJnZShpKSxhPXRoaXMuX2dlbmVyYXRlVGlja01hcmtBdHRySGFzaCgpLHM9dGhpcy5fdGllckhlaWdodHMuc2xpY2UoMCxuKS5yZWR1Y2UoZnVuY3Rpb24obCxjKXtyZXR1cm4gbCtjfSwwKTt0aGlzLm9yaWVudGF0aW9uKCk9PT0iYm90dG9tIj8oYS55MT1zLGEueTI9cysodGhpcy5fdGllckxhYmVsUG9zaXRpb25zW25dPT09ImNlbnRlciI/dGhpcy5pbm5lclRpY2tMZW5ndGgoKTp0aGlzLl90aWVySGVpZ2h0c1tuXSkpOihhLnkxPXRoaXMuaGVpZ2h0KCktcyxhLnkyPXRoaXMuaGVpZ2h0KCktKHMrKHRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tuXT09PSJjZW50ZXIiP3RoaXMuaW5uZXJUaWNrTGVuZ3RoKCk6dGhpcy5fdGllckhlaWdodHNbbl0pKSksby5hdHRycyhhKSx0aGlzLm9yaWVudGF0aW9uKCk9PT0iYm90dG9tIj8oYS55MT1zLGEueTI9cysodGhpcy5fdGllckxhYmVsUG9zaXRpb25zW25dPT09ImNlbnRlciI/dGhpcy5lbmRUaWNrTGVuZ3RoKCk6dGhpcy5fdGllckhlaWdodHNbbl0pKTooYS55MT10aGlzLmhlaWdodCgpLXMsYS55Mj10aGlzLmhlaWdodCgpLShzKyh0aGlzLl90aWVyTGFiZWxQb3NpdGlvbnNbbl09PT0iY2VudGVyIj90aGlzLmVuZFRpY2tMZW5ndGgoKTp0aGlzLl90aWVySGVpZ2h0c1tuXSkpKSxWdS5zZWxlY3Qoby5ub2RlcygpWzBdKS5hdHRycyhhKSxWdS5zZWxlY3Qoby5ub2RlcygpW28uc2l6ZSgpLTFdKS5hdHRycyhhKSxWdS5zZWxlY3Qoby5ub2RlcygpWzBdKS5jbGFzc2VkKGVzLkF4aXMuRU5EX1RJQ0tfTUFSS19DTEFTUywhMCksVnUuc2VsZWN0KG8ubm9kZXMoKVtvLnNpemUoKS0xXSkuY2xhc3NlZChlcy5BeGlzLkVORF9USUNLX01BUktfQ0xBU1MsITApLGkuZXhpdCgpLnJlbW92ZSgpfSx0LnByb3RvdHlwZS5fcmVuZGVyTGFiZWxsZXNzVGlja01hcmtzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX3RpY2tNYXJrQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrZXMuQXhpcy5USUNLX01BUktfQ0xBU1MpLmRhdGEociksaT1uLmVudGVyKCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZChlcy5BeGlzLlRJQ0tfTUFSS19DTEFTUywhMCkubWVyZ2Uobiksbz10aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goKTtvLnkyPXRoaXMub3JpZW50YXRpb24oKT09PSJib3R0b20iP3RoaXMudGlja0xhYmVsUGFkZGluZygpOnRoaXMuaGVpZ2h0KCktdGhpcy50aWNrTGFiZWxQYWRkaW5nKCksaS5hdHRycyhvKSxuLmV4aXQoKS5yZW1vdmUoKX0sdC5wcm90b3R5cGUuX2dlbmVyYXRlTGFiZWxsZXNzVGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9zdFByZWNpc2VDb25maWdJbmRleDwxP1tdOnRoaXMuX2dldFRpY2tJbnRlcnZhbFZhbHVlcyh0aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnNbdGhpcy5fbW9zdFByZWNpc2VDb25maWdJbmRleC0xXVswXSl9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7dmFyIHI9dGhpczt0aGlzLl9tb3N0UHJlY2lzZUNvbmZpZ0luZGV4PXRoaXMuX2dldE1vc3RQcmVjaXNlQ29uZmlndXJhdGlvbkluZGV4KCk7dmFyIG49dGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zW3RoaXMuX21vc3RQcmVjaXNlQ29uZmlnSW5kZXhdO3RoaXMuX2NsZWFuVGllcnMoKSxuLmZvckVhY2goZnVuY3Rpb24oaCxmKXtyZXR1cm4gci5fcmVuZGVyVGllckxhYmVscyhyLl90aWVyTGFiZWxDb250YWluZXJzW2ZdLGgsZil9KTtmb3IodmFyIGk9bi5tYXAoZnVuY3Rpb24oaCxmKXtyZXR1cm4gci5fZ2V0VGlja1ZhbHVlc0ZvckNvbmZpZ3VyYXRpb24oaCl9KSxvPTAsYT0wO2E8TWF0aC5tYXgobi5sZW5ndGgsMSk7KythKXt2YXIgcz10aGlzLl9nZW5lcmF0ZUJhc2VsaW5lQXR0ckhhc2goKTtzLnkxKz10aGlzLm9yaWVudGF0aW9uKCk9PT0iYm90dG9tIj9vOi1vLHMueTI9cy55MSx0aGlzLl90aWVyQmFzZWxpbmVzW2FdLmF0dHJzKHMpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaW5oZXJpdCIpLG8rPXRoaXMuX3RpZXJIZWlnaHRzW2FdfXZhciBsPVtdLGM9dGhpcy5fc2NhbGUuZG9tYWluKCksdT10aGlzLl9zY2FsZS5zY2FsZShjWzFdKS10aGlzLl9zY2FsZS5zY2FsZShjWzBdKTt0aGlzLl9nZXRJbnRlcnZhbExlbmd0aChuWzBdKSoxLjU+PXUmJihsPXRoaXMuX2dlbmVyYXRlTGFiZWxsZXNzVGlja3MoKSksdGhpcy5fcmVuZGVyTGFiZWxsZXNzVGlja01hcmtzKGwpLHRoaXMuX2hpZGVPdmVyZmxvd2luZ1RpZXJzKCk7Zm9yKHZhciBhPTA7YTxuLmxlbmd0aDsrK2EpdGhpcy5fcmVuZGVyVGlja01hcmtzKGlbYV0sYSksdGhpcy5faGlkZU92ZXJsYXBwaW5nQW5kQ3V0T2ZmTGFiZWxzKGEpO3JldHVybiB0aGlzLmFubm90YXRpb25zRW5hYmxlZCgpP3RoaXMuX2RyYXdBbm5vdGF0aW9ucygpOnRoaXMuX3JlbW92ZUFubm90YXRpb25zKCksdGhpc30sdC5wcm90b3R5cGUuX2hpZGVPdmVyZmxvd2luZ1RpZXJzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXRoaXMuaGVpZ2h0KCksaT0wO3RoaXMuY29udGVudCgpLnNlbGVjdEFsbCgiLiIrdC5USU1FX0FYSVNfVElFUl9DTEFTUykuYXR0cigidmlzaWJpbGl0eSIsZnVuY3Rpb24obyxhKXtyZXR1cm4gaSs9ci5fdGllckhlaWdodHNbYV0saTw9bj8iaW5oZXJpdCI6ImhpZGRlbiJ9KX0sdC5wcm90b3R5cGUuX2hpZGVPdmVybGFwcGluZ0FuZEN1dE9mZkxhYmVscz1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9dGhpcy5lbGVtZW50KCkubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89ZnVuY3Rpb24odSl7cmV0dXJuIE1hdGguZmxvb3IoaS5sZWZ0KTw9TWF0aC5jZWlsKHUubGVmdCkmJk1hdGguZmxvb3IoaS50b3ApPD1NYXRoLmNlaWwodS50b3ApJiZNYXRoLmZsb29yKHUucmlnaHQpPD1NYXRoLmNlaWwoaS5sZWZ0K24ud2lkdGgoKSkmJk1hdGguZmxvb3IodS5ib3R0b20pPD1NYXRoLmNlaWwoaS50b3Arbi5oZWlnaHQoKSl9LGE9dGhpcy5fdGllck1hcmtDb250YWluZXJzW3JdLnNlbGVjdEFsbCgiLiIrZXMuQXhpcy5USUNLX01BUktfQ0xBU1MpLmZpbHRlcihmdW5jdGlvbih1LGgpe3ZhciBmPVZ1LnNlbGVjdCh0aGlzKS5zdHlsZSgidmlzaWJpbGl0eSIpO3JldHVybiBmPT09InZpc2libGUifHxmPT09ImluaGVyaXQifSkscz1hLm5vZGVzKCkubWFwKGZ1bmN0aW9uKHUpe3JldHVybiB1LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfSksbD10aGlzLl90aWVyTGFiZWxDb250YWluZXJzW3JdLnNlbGVjdEFsbCgiLiIrZXMuQXhpcy5USUNLX0xBQkVMX0NMQVNTKS5maWx0ZXIoZnVuY3Rpb24odSxoKXt2YXIgZj1WdS5zZWxlY3QodGhpcykuc3R5bGUoInZpc2liaWxpdHkiKTtyZXR1cm4gZj09PSJ2aXNpYmxlInx8Zj09PSJpbmhlcml0In0pLGM7bC5lYWNoKGZ1bmN0aW9uKHUsaCl7dmFyIGY9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxwPVZ1LnNlbGVjdCh0aGlzKSxkPXNbaF0sZz1zW2grMV0sXz1jIT1udWxsJiZuNC5ET00uY2xpZW50UmVjdHNPdmVybGFwKGYsYykseT1kIT1udWxsJiZuNC5ET00uY2xpZW50UmVjdHNPdmVybGFwKGYsZCkseD1nIT1udWxsJiZuNC5ET00uY2xpZW50UmVjdHNPdmVybGFwKGYsZyk7IW8oZil8fF98fHl8fHg/cC5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpOihjPWYscC5zdHlsZSgidmlzaWJpbGl0eSIsImluaGVyaXQiKSl9KX0sdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sdC5USU1FX0FYSVNfVElFUl9DTEFTUz0idGltZS1heGlzLXRpZXIiLHQuX1NPUlRFRF9USU1FX0lOVEVSVkFMX0lOREVYPShiZD17fSxiZFtTZS5UaW1lSW50ZXJ2YWwuc2Vjb25kXT0wLGJkW1NlLlRpbWVJbnRlcnZhbC5taW51dGVdPTEsYmRbU2UuVGltZUludGVydmFsLmhvdXJdPTIsYmRbU2UuVGltZUludGVydmFsLmRheV09MyxiZFtTZS5UaW1lSW50ZXJ2YWwud2Vla109NCxiZFtTZS5UaW1lSW50ZXJ2YWwubW9udGhdPTUsYmRbU2UuVGltZUludGVydmFsLnllYXJdPTYsYmQpLHQuX0RFRkFVTFRfVElNRV9BWElTX0NPTkZJR1VSQVRJT05TPWZ1bmN0aW9uKHIpe3ZhciBuPWZ1bmN0aW9uKGkpe3JldHVybiBoJHQudGltZShpLHIpfTtyZXR1cm5bW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuc2Vjb25kLHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUk6JU06JVMgJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnNlY29uZCxzdGVwOjUsZm9ybWF0dGVyOm4oIiVJOiVNOiVTICVwIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5zZWNvbmQsc3RlcDoxMCxmb3JtYXR0ZXI6bigiJUk6JU06JVMgJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnNlY29uZCxzdGVwOjE1LGZvcm1hdHRlcjpuKCIlSTolTTolUyAlcCIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuc2Vjb25kLHN0ZXA6MzAsZm9ybWF0dGVyOm4oIiVJOiVNOiVTICVwIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5taW51dGUsc3RlcDoxLGZvcm1hdHRlcjpuKCIlSTolTSAlcCIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwubWludXRlLHN0ZXA6NSxmb3JtYXR0ZXI6bigiJUk6JU0gJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLm1pbnV0ZSxzdGVwOjEwLGZvcm1hdHRlcjpuKCIlSTolTSAlcCIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwubWludXRlLHN0ZXA6MTUsZm9ybWF0dGVyOm4oIiVJOiVNICVwIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5taW51dGUsc3RlcDozMCxmb3JtYXR0ZXI6bigiJUk6JU0gJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmhvdXIsc3RlcDoxLGZvcm1hdHRlcjpuKCIlSSAlcCIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuaG91cixzdGVwOjMsZm9ybWF0dGVyOm4oIiVJICVwIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5ob3VyLHN0ZXA6Nixmb3JtYXR0ZXI6bigiJUkgJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmhvdXIsc3RlcDoxMixmb3JtYXR0ZXI6bigiJUkgJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVhICVlIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwubW9udGgsc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJWUiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjEsZm9ybWF0dGVyOm4oIiViIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjMsZm9ybWF0dGVyOm4oIiViIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjYsZm9ybWF0dGVyOm4oIiViIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MSxmb3JtYXR0ZXI6bigiJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnllYXIsc3RlcDoxLGZvcm1hdHRlcjpuKCIleSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjUsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MjUsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6NTAsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MTAwLGZvcm1hdHRlcjpuKCIlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjIwMCxmb3JtYXR0ZXI6bigiJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnllYXIsc3RlcDo1MDAsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MWUzLGZvcm1hdHRlcjpuKCIlWSIpfV1dfSx0Ll9MT05HX0RBVEU9bmV3IERhdGUoOTk5OSw4LDI5LDEyLDU5LDk5OTkpLHR9KGVzLkF4aXMpO1NlLlRpbWU9TEZlO3ZhciBiZH0pO3ZhciBmJHQ9SChpND0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaTQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBob3Q9KGRlKCksVXQocGUpKTtob3QuX19leHBvcnRTdGFyKCRYdCgpLGk0KTtob3QuX19leHBvcnRTdGFyKEtYdCgpLGk0KTtob3QuX19leHBvcnRTdGFyKEhGKCksaTQpfSk7dmFyIG80PUgoZm90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShmb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBrRmU9RmUoKSxSRmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbj17fSx0aGlzLl9ldmVudFRhcmdldD1kb2N1bWVudCx0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0PXt9LHRoaXMuX2Nvbm5lY3RlZD0hMX1yZXR1cm4gZS5wcm90b3R5cGUuX2hhc05vQ2FsbGJhY2tzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PU9iamVjdC5rZXlzKHRoaXMuX2V2ZW50TmFtZVRvQ2FsbGJhY2tTZXQpLHI9MDtyPHQubGVuZ3RoO3IrKylpZih0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0W3Rbcl1dLnNpemUhPT0wKXJldHVybiExO3JldHVybiEwfSxlLnByb3RvdHlwZS5fY29ubmVjdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fY29ubmVjdGVkfHwoT2JqZWN0LmtleXModGhpcy5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbikuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgbj10Ll9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3JdLGk9cj09PSJ3aGVlbCI/e3Bhc3NpdmU6ITF9OnZvaWQgMDt0Ll9ldmVudFRhcmdldC5hZGRFdmVudExpc3RlbmVyKHIsbixpKX0pLHRoaXMuX2Nvbm5lY3RlZD0hMCl9LGUucHJvdG90eXBlLl9kaXNjb25uZWN0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9jb25uZWN0ZWQmJnRoaXMuX2hhc05vQ2FsbGJhY2tzKCkmJihPYmplY3Qua2V5cyh0aGlzLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ZhciBuPXQuX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bcl07dC5fZXZlbnRUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihyLG4pfSksdGhpcy5fY29ubmVjdGVkPSExKX0sZS5wcm90b3R5cGUuX2FkZENhbGxiYWNrRm9yRXZlbnQ9ZnVuY3Rpb24odCxyKXt0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0W3RdPT1udWxsJiYodGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldFt0XT1uZXcga0ZlLkNhbGxiYWNrU2V0KSx0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0W3RdLmFkZChyKSx0aGlzLl9jb25uZWN0KCl9LGUucHJvdG90eXBlLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50PWZ1bmN0aW9uKHQscil7dGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldFt0XSE9bnVsbCYmdGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldFt0XS5kZWxldGUociksdGhpcy5fZGlzY29ubmVjdCgpfSxlLnByb3RvdHlwZS5fY2FsbENhbGxiYWNrc0ZvckV2ZW50PWZ1bmN0aW9uKHQpe2Zvcih2YXIgcj1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKylyW24tMV09YXJndW1lbnRzW25dO3ZhciBpPXRoaXMuX2V2ZW50TmFtZVRvQ2FsbGJhY2tTZXRbdF07aSE9bnVsbCYmaS5jYWxsQ2FsbGJhY2tzLmFwcGx5KGkscil9LGV9KCk7Zm90LkRpc3BhdGNoZXI9UkZlfSk7dmFyIHAkdD1IKHBvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocG90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgTkZlPShkZSgpLFV0KHBlKSksREZlPW80KCksT0ZlPWZ1bmN0aW9uKGUpe05GZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX0tFWURPV05fRVZFTlRfTkFNRV09ZnVuY3Rpb24obil7cmV0dXJuIHIuX3Byb2Nlc3NLZXlkb3duKG4pfSxyLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX0tFWVVQX0VWRU5UX05BTUVdPWZ1bmN0aW9uKG4pe3JldHVybiByLl9wcm9jZXNzS2V5dXAobil9LHJ9cmV0dXJuIHQuZ2V0RGlzcGF0Y2hlcj1mdW5jdGlvbigpe3ZhciByPWRvY3VtZW50W3QuX0RJU1BBVENIRVJfS0VZXTtyZXR1cm4gcj09bnVsbCYmKHI9bmV3IHQsZG9jdW1lbnRbdC5fRElTUEFUQ0hFUl9LRVldPXIpLHJ9LHQucHJvdG90eXBlLl9wcm9jZXNzS2V5ZG93bj1mdW5jdGlvbihyKXt0aGlzLl9jYWxsQ2FsbGJhY2tzRm9yRXZlbnQodC5fS0VZRE9XTl9FVkVOVF9OQU1FLHIua2V5Q29kZSxyKX0sdC5wcm90b3R5cGUuX3Byb2Nlc3NLZXl1cD1mdW5jdGlvbihyKXt0aGlzLl9jYWxsQ2FsbGJhY2tzRm9yRXZlbnQodC5fS0VZVVBfRVZFTlRfTkFNRSxyLmtleUNvZGUscil9LHQucHJvdG90eXBlLm9uS2V5RG93bj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9LRVlET1dOX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub2ZmS2V5RG93bj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudCh0Ll9LRVlET1dOX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub25LZXlVcD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9LRVlVUF9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZktleVVwPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX0tFWVVQX0VWRU5UX05BTUUsciksdGhpc30sdC5fRElTUEFUQ0hFUl9LRVk9Il9fUGxvdHRhYmxlX0Rpc3BhdGNoZXJfS2V5Iix0Ll9LRVlET1dOX0VWRU5UX05BTUU9ImtleWRvd24iLHQuX0tFWVVQX0VWRU5UX05BTUU9ImtleXVwIix0fShERmUuRGlzcGF0Y2hlcik7cG90LktleT1PRmV9KTt2YXIgbSR0PUgoZG90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShkb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB6RmU9KGRlKCksVXQocGUpKSxkJHQ9RmUoKSxGRmU9bzQoKSxCRmU9ZnVuY3Rpb24oZSl7ekZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO24uX2xhc3RNb3VzZVBvc2l0aW9uPXt4Oi0xLHk6LTF9LG4uX3RyYW5zbGF0b3I9ZCR0LmdldFRyYW5zbGF0b3Iocik7dmFyIGk9ZnVuY3Rpb24obyl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLG8sdC5fTU9VU0VNT1ZFX0VWRU5UX05BTUUsInBhZ2UiKX07cmV0dXJuIG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bdC5fTU9VU0VPVkVSX0VWRU5UX05BTUVdPWksbi5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvblt0Ll9NT1VTRU1PVkVfRVZFTlRfTkFNRV09aSxuLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX01PVVNFT1VUX0VWRU5UX05BTUVdPWksbi5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvblt0Ll9NT1VTRURPV05fRVZFTlRfTkFNRV09ZnVuY3Rpb24obyl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLG8sdC5fTU9VU0VET1dOX0VWRU5UX05BTUUpfSxuLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX01PVVNFVVBfRVZFTlRfTkFNRV09ZnVuY3Rpb24obyl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLG8sdC5fTU9VU0VVUF9FVkVOVF9OQU1FLCJwYWdlIil9LG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bdC5fV0hFRUxfRVZFTlRfTkFNRV09ZnVuY3Rpb24obyl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLG8sdC5fV0hFRUxfRVZFTlRfTkFNRSl9LG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bdC5fREJMQ0xJQ0tfRVZFTlRfTkFNRV09ZnVuY3Rpb24obyl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLG8sdC5fREJMQ0xJQ0tfRVZFTlRfTkFNRSl9LG59cmV0dXJuIHQuZ2V0RGlzcGF0Y2hlcj1mdW5jdGlvbihyKXt2YXIgbj1yLnJvb3QoKS5yb290RWxlbWVudCgpLGk9blt0Ll9ESVNQQVRDSEVSX0tFWV07cmV0dXJuIGk9PW51bGwmJihpPW5ldyB0KHIpLG5bdC5fRElTUEFUQ0hFUl9LRVldPWkpLGl9LHQucHJvdG90eXBlLm9uTW91c2VNb3ZlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KHQuX01PVVNFTU9WRV9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZk1vdXNlTW92ZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudCh0Ll9NT1VTRU1PVkVfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vbk1vdXNlRG93bj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9NT1VTRURPV05fRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZNb3VzZURvd249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQodC5fTU9VU0VET1dOX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub25Nb3VzZVVwPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KHQuX01PVVNFVVBfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZNb3VzZVVwPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX01PVVNFVVBfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vbldoZWVsPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KHQuX1dIRUVMX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub2ZmV2hlZWw9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQodC5fV0hFRUxfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vbkRibENsaWNrPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KHQuX0RCTENMSUNLX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub2ZmRGJsQ2xpY2s9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQodC5fREJMQ0xJQ0tfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5fbWVhc3VyZUFuZERpc3BhdGNoPWZ1bmN0aW9uKHIsbixpLG8pe2lmKG89PT12b2lkIDAmJihvPSJlbGVtZW50IiksbyE9PSJwYWdlIiYmbyE9PSJlbGVtZW50Iil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc2NvcGUgJyIrbysiJywgbXVzdCBiZSAnZWxlbWVudCcgb3IgJ3BhZ2UnIik7aWYobz09PSJwYWdlInx8dGhpcy5ldmVudEluc2lkZShyLG4pKXt2YXIgYT10aGlzLl90cmFuc2xhdG9yLmNvbXB1dGVQb3NpdGlvbihuLmNsaWVudFgsbi5jbGllbnRZKTt0aGlzLl9sYXN0TW91c2VQb3NpdGlvbj1hLHRoaXMuX2NhbGxDYWxsYmFja3NGb3JFdmVudChpLHRoaXMubGFzdE1vdXNlUG9zaXRpb24oKSxuKX19LHQucHJvdG90eXBlLmV2ZW50SW5zaWRlPWZ1bmN0aW9uKHIsbil7cmV0dXJuIGQkdC5UcmFuc2xhdG9yLmlzRXZlbnRJbnNpZGUocixuKX0sdC5wcm90b3R5cGUubGFzdE1vdXNlUG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGFzdE1vdXNlUG9zaXRpb259LHQuX0RJU1BBVENIRVJfS0VZPSJfX1Bsb3R0YWJsZV9EaXNwYXRjaGVyX01vdXNlIix0Ll9NT1VTRU9WRVJfRVZFTlRfTkFNRT0ibW91c2VvdmVyIix0Ll9NT1VTRU1PVkVfRVZFTlRfTkFNRT0ibW91c2Vtb3ZlIix0Ll9NT1VTRU9VVF9FVkVOVF9OQU1FPSJtb3VzZW91dCIsdC5fTU9VU0VET1dOX0VWRU5UX05BTUU9Im1vdXNlZG93biIsdC5fTU9VU0VVUF9FVkVOVF9OQU1FPSJtb3VzZXVwIix0Ll9XSEVFTF9FVkVOVF9OQU1FPSJ3aGVlbCIsdC5fREJMQ0xJQ0tfRVZFTlRfTkFNRT0iZGJsY2xpY2siLHR9KEZGZS5EaXNwYXRjaGVyKTtkb3QuTW91c2U9QkZlfSk7dmFyIF8kdD1IKG1vdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobW90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgSEZlPShkZSgpLFV0KHBlKSksZyR0PUZlKCksVkZlPW80KCksVUZlPWZ1bmN0aW9uKGUpe0hGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fdHJhbnNsYXRvcj1nJHQuZ2V0VHJhbnNsYXRvcihyKSxuLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX1RPVUNIU1RBUlRfRVZFTlRfTkFNRV09ZnVuY3Rpb24oaSl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLGksdC5fVE9VQ0hTVEFSVF9FVkVOVF9OQU1FLCJwYWdlIil9LG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bdC5fVE9VQ0hNT1ZFX0VWRU5UX05BTUVdPWZ1bmN0aW9uKGkpe3JldHVybiBuLl9tZWFzdXJlQW5kRGlzcGF0Y2gocixpLHQuX1RPVUNITU9WRV9FVkVOVF9OQU1FLCJwYWdlIil9LG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bdC5fVE9VQ0hFTkRfRVZFTlRfTkFNRV09ZnVuY3Rpb24oaSl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLGksdC5fVE9VQ0hFTkRfRVZFTlRfTkFNRSwicGFnZSIpfSxuLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX1RPVUNIQ0FOQ0VMX0VWRU5UX05BTUVdPWZ1bmN0aW9uKGkpe3JldHVybiBuLl9tZWFzdXJlQW5kRGlzcGF0Y2gocixpLHQuX1RPVUNIQ0FOQ0VMX0VWRU5UX05BTUUsInBhZ2UiKX0sbn1yZXR1cm4gdC5nZXREaXNwYXRjaGVyPWZ1bmN0aW9uKHIpe3ZhciBuPXIucm9vdCgpLnJvb3RFbGVtZW50KCksaT1uW3QuX0RJU1BBVENIRVJfS0VZXTtyZXR1cm4gaT09bnVsbCYmKGk9bmV3IHQociksblt0Ll9ESVNQQVRDSEVSX0tFWV09aSksaX0sdC5wcm90b3R5cGUub25Ub3VjaFN0YXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KHQuX1RPVUNIU1RBUlRfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZUb3VjaFN0YXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX1RPVUNIU1RBUlRfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vblRvdWNoTW92ZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9UT1VDSE1PVkVfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZUb3VjaE1vdmU9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQodC5fVE9VQ0hNT1ZFX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub25Ub3VjaEVuZD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9UT1VDSEVORF9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZlRvdWNoRW5kPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX1RPVUNIRU5EX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub25Ub3VjaENhbmNlbD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9UT1VDSENBTkNFTF9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZlRvdWNoQ2FuY2VsPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX1RPVUNIQ0FOQ0VMX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUuX21lYXN1cmVBbmREaXNwYXRjaD1mdW5jdGlvbihyLG4saSxvKXtpZihvPT09dm9pZCAwJiYobz0iZWxlbWVudCIpLG8hPT0icGFnZSImJm8hPT0iZWxlbWVudCIpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHNjb3BlICciK28rIicsIG11c3QgYmUgJ2VsZW1lbnQnIG9yICdwYWdlJyIpO2lmKCEobz09PSJlbGVtZW50IiYmIXRoaXMuZXZlbnRJbnNpZGUocixuKSkpe2Zvcih2YXIgYT1uLmNoYW5nZWRUb3VjaGVzLHM9e30sbD1bXSxjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciB1PWFbY10saD11LmlkZW50aWZpZXIsZj10aGlzLl90cmFuc2xhdG9yLmNvbXB1dGVQb3NpdGlvbih1LmNsaWVudFgsdS5jbGllbnRZKTtmIT1udWxsJiYoc1toXT1mLGwucHVzaChoKSl9bC5sZW5ndGg+MCYmdGhpcy5fY2FsbENhbGxiYWNrc0ZvckV2ZW50KGksbCxzLG4pfX0sdC5wcm90b3R5cGUuZXZlbnRJbnNpZGU9ZnVuY3Rpb24ocixuKXtyZXR1cm4gZyR0LlRyYW5zbGF0b3IuaXNFdmVudEluc2lkZShyLG4pfSx0Ll9ESVNQQVRDSEVSX0tFWT0iX19QbG90dGFibGVfRGlzcGF0Y2hlcl9Ub3VjaCIsdC5fVE9VQ0hTVEFSVF9FVkVOVF9OQU1FPSJ0b3VjaHN0YXJ0Iix0Ll9UT1VDSE1PVkVfRVZFTlRfTkFNRT0idG91Y2htb3ZlIix0Ll9UT1VDSEVORF9FVkVOVF9OQU1FPSJ0b3VjaGVuZCIsdC5fVE9VQ0hDQU5DRUxfRVZFTlRfTkFNRT0idG91Y2hjYW5jZWwiLHR9KFZGZS5EaXNwYXRjaGVyKTttb3QuVG91Y2g9VUZlfSk7dmFyIER2PUgoYTQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGE0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZ290PShkZSgpLFV0KHBlKSk7Z290Ll9fZXhwb3J0U3RhcihwJHQoKSxhNCk7Z290Ll9fZXhwb3J0U3RhcihtJHQoKSxhNCk7Z290Ll9fZXhwb3J0U3RhcihfJHQoKSxhNCl9KTt2YXIgT3Y9SChfb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KF9vdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHFGZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt2YXIgdD10aGlzO3RoaXMuX2FuY2hvckNhbGxiYWNrPWZ1bmN0aW9uKHIpe3JldHVybiB0Ll9hbmNob3Iocil9LHRoaXMuX2VuYWJsZWQ9ITB9cmV0dXJuIGUucHJvdG90eXBlLmF0dGFjaFRvPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kaXNjb25uZWN0KCksdGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbz10LHRoaXMuX2Nvbm5lY3QoKSx0aGlzfSxlLnByb3RvdHlwZS5kZXRhY2hGcm9tPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRldGFjaCgpfSxlLnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlzY29ubmVjdCgpLHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG89bnVsbCx0aGlzfSxlLnByb3RvdHlwZS5lbmFibGVkPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXMuX2VuYWJsZWQ6KHRoaXMuX2VuYWJsZWQ9dCx0aGlzLl9lbmFibGVkP3RoaXMuX2Nvbm5lY3QoKTp0aGlzLl9kaXNjb25uZWN0KCksdGhpcyl9LGUucHJvdG90eXBlLl9hbmNob3I9ZnVuY3Rpb24odCl7dGhpcy5faXNBbmNob3JlZD0hMH0sZS5wcm90b3R5cGUuX3VuYW5jaG9yPWZ1bmN0aW9uKCl7dGhpcy5faXNBbmNob3JlZD0hMX0sZS5wcm90b3R5cGUuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2U9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby5vcmlnaW5Ub1Jvb3QoKTtyZXR1cm57eDp0Lngtci54LHk6dC55LXIueX19LGUucHJvdG90eXBlLl9pc0luc2lkZUNvbXBvbmVudD1mdW5jdGlvbih0KXtyZXR1cm4gMDw9dC54JiYwPD10LnkmJnQueDw9dGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby53aWR0aCgpJiZ0Lnk8PXRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8uaGVpZ2h0KCl9LGUucHJvdG90eXBlLl9jb25uZWN0PWZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkKCkmJnRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8hPW51bGwmJiF0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLm9uQW5jaG9yKHRoaXMuX2FuY2hvckNhbGxiYWNrKX0sZS5wcm90b3R5cGUuX2Rpc2Nvbm5lY3Q9ZnVuY3Rpb24oKXt0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl91bmFuY2hvcigpLHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8hPW51bGwmJnRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8ub2ZmQW5jaG9yKHRoaXMuX2FuY2hvckNhbGxiYWNrKX0sZX0oKTtfb3QuSW50ZXJhY3Rpb249cUZlfSk7dmFyIHgkdD1IKHlvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeW90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgR0ZlPShkZSgpLFV0KHBlKSkseSR0PUR2KCksdiR0PUZlKCksV0ZlPU92KCksWUZlPWZ1bmN0aW9uKGUpe0dGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZSE9PW51bGwmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiByLl9jbGlja2VkRG93bj0hMSxyLl9kb3VibGVDbGlja2luZz0hMSxyLl9vbkNsaWNrQ2FsbGJhY2tzPW5ldyB2JHQuQ2FsbGJhY2tTZXQsci5fb25Eb3VibGVDbGlja0NhbGxiYWNrcz1uZXcgdiR0LkNhbGxiYWNrU2V0LHIuX21vdXNlRG93bkNhbGxiYWNrPWZ1bmN0aW9uKG4saSl7cmV0dXJuIHIuX2hhbmRsZUNsaWNrRG93bihuLGkpfSxyLl9tb3VzZVVwQ2FsbGJhY2s9ZnVuY3Rpb24obixpKXtyZXR1cm4gci5faGFuZGxlQ2xpY2tVcChuLGkpfSxyLl9kYmxDbGlja0NhbGxiYWNrPWZ1bmN0aW9uKG4saSl7cmV0dXJuIHIuX2hhbmRsZURibENsaWNrKG4saSl9LHIuX3RvdWNoU3RhcnRDYWxsYmFjaz1mdW5jdGlvbihuLGksbyl7cmV0dXJuIHIuX2hhbmRsZUNsaWNrRG93bihpW25bMF1dLG8pfSxyLl90b3VjaEVuZENhbGxiYWNrPWZ1bmN0aW9uKG4saSxvKXtyZXR1cm4gci5faGFuZGxlQ2xpY2tVcChpW25bMF1dLG8pfSxyLl90b3VjaENhbmNlbENhbGxiYWNrPWZ1bmN0aW9uKG4saSl7cmV0dXJuIHIuX2NsaWNrZWREb3duPSExfSxyfXJldHVybiB0LnByb3RvdHlwZS5fYW5jaG9yPWZ1bmN0aW9uKHIpe2UucHJvdG90eXBlLl9hbmNob3IuY2FsbCh0aGlzLHIpLHRoaXMuX21vdXNlRGlzcGF0Y2hlcj15JHQuTW91c2UuZ2V0RGlzcGF0Y2hlcihyKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub25Nb3VzZURvd24odGhpcy5fbW91c2VEb3duQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vbk1vdXNlVXAodGhpcy5fbW91c2VVcENhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub25EYmxDbGljayh0aGlzLl9kYmxDbGlja0NhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXI9eSR0LlRvdWNoLmdldERpc3BhdGNoZXIociksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoRW5kKHRoaXMuX3RvdWNoRW5kQ2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoQ2FuY2VsKHRoaXMuX3RvdWNoQ2FuY2VsQ2FsbGJhY2spfSx0LnByb3RvdHlwZS5fdW5hbmNob3I9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fdW5hbmNob3IuY2FsbCh0aGlzKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmTW91c2VEb3duKHRoaXMuX21vdXNlRG93bkNhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmTW91c2VVcCh0aGlzLl9tb3VzZVVwQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZEYmxDbGljayh0aGlzLl9kYmxDbGlja0NhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9bnVsbCx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaEVuZCh0aGlzLl90b3VjaEVuZENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hDYW5jZWwodGhpcy5fdG91Y2hDYW5jZWxDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyPW51bGx9LHQucHJvdG90eXBlLl9oYW5kbGVDbGlja0Rvd249ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKHIpO3RoaXMuX2lzSW5zaWRlQ29tcG9uZW50KGkpJiYodGhpcy5fY2xpY2tlZERvd249ITAsdGhpcy5fY2xpY2tlZFBvaW50PWkpfSx0LnByb3RvdHlwZS5faGFuZGxlQ2xpY2tVcD1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMsbz10aGlzLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKHIpO3RoaXMuX2NsaWNrZWREb3duJiZ0Ll9wb2ludHNFcXVhbChvLHRoaXMuX2NsaWNrZWRQb2ludCkmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXtpLl9kb3VibGVDbGlja2luZ3x8aS5fb25DbGlja0NhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKG8sbil9LDApLHRoaXMuX2NsaWNrZWREb3duPSExfSx0LnByb3RvdHlwZS5faGFuZGxlRGJsQ2xpY2s9ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLG89dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShyKTt0aGlzLl9kb3VibGVDbGlja2luZz0hMCx0aGlzLl9vbkRvdWJsZUNsaWNrQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MobyxuKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIGkuX2RvdWJsZUNsaWNraW5nPSExfSwwKX0sdC5fcG9pbnRzRXF1YWw9ZnVuY3Rpb24ocixuKXtyZXR1cm4gci54PT09bi54JiZyLnk9PT1uLnl9LHQucHJvdG90eXBlLm9uQ2xpY2s9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX29uQ2xpY2tDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZkNsaWNrPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9vbkNsaWNrQ2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0LnByb3RvdHlwZS5vbkRvdWJsZUNsaWNrPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9vbkRvdWJsZUNsaWNrQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEb3VibGVDbGljaz1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fb25Eb3VibGVDbGlja0NhbGxiYWNrcy5kZWxldGUociksdGhpc30sdH0oV0ZlLkludGVyYWN0aW9uKTt5b3QuQ2xpY2s9WUZlfSk7dmFyIHckdD1IKHZvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodm90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgakZlPShkZSgpLFV0KHBlKSksYiR0PUR2KCksczQ9RmUoKSxYRmU9T3YoKSwkRmU9ZnVuY3Rpb24oZSl7akZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLl9kcmFnZ2luZz0hMSxuLl9jb25zdHJhaW5lZFRvQ29tcG9uZW50PSEwLG4uX21vdXNlRmlsdGVyPXQuX0RFRkFVTFRfTU9VU0VfRklMVEVSLG4uX2RyYWdTdGFydENhbGxiYWNrcz1uZXcgczQuQ2FsbGJhY2tTZXQsbi5fZHJhZ0NhbGxiYWNrcz1uZXcgczQuQ2FsbGJhY2tTZXQsbi5fZHJhZ0VuZENhbGxiYWNrcz1uZXcgczQuQ2FsbGJhY2tTZXQsbi5fbW91c2VEb3duQ2FsbGJhY2s9ZnVuY3Rpb24oaSxvKXtyZXR1cm4gbi5fc3RhcnREcmFnKGksbyl9LG4uX21vdXNlTW92ZUNhbGxiYWNrPWZ1bmN0aW9uKGksbyl7cmV0dXJuIG4uX2RvRHJhZyhpLG8pfSxuLl9tb3VzZVVwQ2FsbGJhY2s9ZnVuY3Rpb24oaSxvKXtyZXR1cm4gbi5fZW5kRHJhZyhpLG8pfSxuLl90b3VjaFN0YXJ0Q2FsbGJhY2s9ZnVuY3Rpb24oaSxvLGEpe3JldHVybiBuLl9zdGFydERyYWcob1tpWzBdXSxhKX0sbi5fdG91Y2hNb3ZlQ2FsbGJhY2s9ZnVuY3Rpb24oaSxvLGEpe3JldHVybiBuLl9kb0RyYWcob1tpWzBdXSxhKX0sbi5fdG91Y2hFbmRDYWxsYmFjaz1mdW5jdGlvbihpLG8sYSl7cmV0dXJuIG4uX2VuZERyYWcob1tpWzBdXSxhKX0sbi5fbW91c2VCdXR0b249ciE9PXZvaWQgMD9yOjAsbn1yZXR1cm4gdC5wcm90b3R5cGUuX2FuY2hvcj1mdW5jdGlvbihyKXtlLnByb3RvdHlwZS5fYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9YiR0Lk1vdXNlLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uTW91c2VEb3duKHRoaXMuX21vdXNlRG93bkNhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub25Nb3VzZU1vdmUodGhpcy5fbW91c2VNb3ZlQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vbk1vdXNlVXAodGhpcy5fbW91c2VVcENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXI9YiR0LlRvdWNoLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoTW92ZSh0aGlzLl90b3VjaE1vdmVDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hFbmQodGhpcy5fdG91Y2hFbmRDYWxsYmFjayl9LHQucHJvdG90eXBlLl91bmFuY2hvcj1mdW5jdGlvbigpe2UucHJvdG90eXBlLl91bmFuY2hvci5jYWxsKHRoaXMpLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZURvd24odGhpcy5fbW91c2VEb3duQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZU1vdmUodGhpcy5fbW91c2VNb3ZlQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZVVwKHRoaXMuX21vdXNlVXBDYWxsYmFjayksdGhpcy5fbW91c2VEaXNwYXRjaGVyPW51bGwsdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9mZlRvdWNoU3RhcnQodGhpcy5fdG91Y2hTdGFydENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hNb3ZlKHRoaXMuX3RvdWNoTW92ZUNhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hFbmQodGhpcy5fdG91Y2hFbmRDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyPW51bGx9LHQucHJvdG90eXBlLl90cmFuc2xhdGVBbmRDb25zdHJhaW49ZnVuY3Rpb24ocil7dmFyIG49dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShyKTtyZXR1cm4gdGhpcy5fY29uc3RyYWluZWRUb0NvbXBvbmVudD97eDpzNC5NYXRoLmNsYW1wKG4ueCwwLHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8ud2lkdGgoKSkseTpzNC5NYXRoLmNsYW1wKG4ueSwwLHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8uaGVpZ2h0KCkpfTpufSx0LnByb3RvdHlwZS5fc3RhcnREcmFnPWZ1bmN0aW9uKHIsbil7aWYoIShuIGluc3RhbmNlb2YgTW91c2VFdmVudCYmIXRoaXMuX21vdXNlRmlsdGVyKG4pKSl7dmFyIGk9dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShyKTt0aGlzLl9pc0luc2lkZUNvbXBvbmVudChpKSYmKG4ucHJldmVudERlZmF1bHQoKSx0aGlzLl9kcmFnZ2luZz0hMCx0aGlzLl9kcmFnT3JpZ2luPWksdGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcy5fZHJhZ09yaWdpbikpfX0sdC5wcm90b3R5cGUuX2RvRHJhZz1mdW5jdGlvbihyLG4pe3RoaXMuX2RyYWdnaW5nJiZ0aGlzLl9kcmFnQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcy5fZHJhZ09yaWdpbix0aGlzLl90cmFuc2xhdGVBbmRDb25zdHJhaW4ocikpfSx0LnByb3RvdHlwZS5fZW5kRHJhZz1mdW5jdGlvbihyLG4pe24gaW5zdGFuY2VvZiBNb3VzZUV2ZW50JiZuLmJ1dHRvbiE9PXRoaXMuX21vdXNlQnV0dG9ufHx0aGlzLl9kcmFnZ2luZyYmKHRoaXMuX2RyYWdnaW5nPSExLHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuY2FsbENhbGxiYWNrcyh0aGlzLl9kcmFnT3JpZ2luLHRoaXMuX3RyYW5zbGF0ZUFuZENvbnN0cmFpbihyKSkpfSx0LnByb3RvdHlwZS5jb25zdHJhaW5lZFRvQ29tcG9uZW50PWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2NvbnN0cmFpbmVkVG9Db21wb25lbnQ6KHRoaXMuX2NvbnN0cmFpbmVkVG9Db21wb25lbnQ9cix0aGlzKX0sdC5wcm90b3R5cGUubW91c2VGaWx0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0wP3RoaXMuX21vdXNlRmlsdGVyOih0aGlzLl9tb3VzZUZpbHRlcj1yLHRoaXMpfSx0LnByb3RvdHlwZS5vbkRyYWdTdGFydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEcmFnU3RhcnQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25EcmFnPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEcmFnPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0LnByb3RvdHlwZS5vbkRyYWdFbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZkRyYWdFbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHQuX0RFRkFVTFRfTU9VU0VfRklMVEVSPWZ1bmN0aW9uKHIpe3JldHVybiByLmJ1dHRvbj09PTB9LHR9KFhGZS5JbnRlcmFjdGlvbik7dm90LkRyYWc9JEZlfSk7dmFyIHdvdD1IKGJvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYm90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgS0ZlPShkZSgpLFV0KHBlKSksUyR0PUR2KCkseG90PUZlKCksWkZlPU92KCksSkZlPWZ1bmN0aW9uKGUpe0tGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZSE9PW51bGwmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiByLl9rZXlQcmVzc0NhbGxiYWNrcz17fSxyLl9rZXlSZWxlYXNlQ2FsbGJhY2tzPXt9LHIuX21vdXNlTW92ZUNhbGxiYWNrPWZ1bmN0aW9uKG4pe3JldHVybiExfSxyLl9kb3duZWRLZXlzPW5ldyB4b3QuU2V0LHIuX2tleURvd25DYWxsYmFjaz1mdW5jdGlvbihuLGkpe3JldHVybiByLl9oYW5kbGVLZXlEb3duRXZlbnQobixpKX0sci5fa2V5VXBDYWxsYmFjaz1mdW5jdGlvbihuKXtyZXR1cm4gci5faGFuZGxlS2V5VXBFdmVudChuKX0scn1yZXR1cm4gdC5wcm90b3R5cGUuX2FuY2hvcj1mdW5jdGlvbihyKXtlLnByb3RvdHlwZS5fYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzLl9wb3NpdGlvbkRpc3BhdGNoZXI9UyR0Lk1vdXNlLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fcG9zaXRpb25EaXNwYXRjaGVyLm9uTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKSx0aGlzLl9rZXlEaXNwYXRjaGVyPVMkdC5LZXkuZ2V0RGlzcGF0Y2hlcigpLHRoaXMuX2tleURpc3BhdGNoZXIub25LZXlEb3duKHRoaXMuX2tleURvd25DYWxsYmFjayksdGhpcy5fa2V5RGlzcGF0Y2hlci5vbktleVVwKHRoaXMuX2tleVVwQ2FsbGJhY2spfSx0LnByb3RvdHlwZS5fdW5hbmNob3I9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fdW5hbmNob3IuY2FsbCh0aGlzKSx0aGlzLl9wb3NpdGlvbkRpc3BhdGNoZXIub2ZmTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKSx0aGlzLl9wb3NpdGlvbkRpc3BhdGNoZXI9bnVsbCx0aGlzLl9rZXlEaXNwYXRjaGVyLm9mZktleURvd24odGhpcy5fa2V5RG93bkNhbGxiYWNrKSx0aGlzLl9rZXlEaXNwYXRjaGVyLm9mZktleVVwKHRoaXMuX2tleVVwQ2FsbGJhY2spLHRoaXMuX2tleURpc3BhdGNoZXI9bnVsbH0sdC5wcm90b3R5cGUuX2hhbmRsZUtleURvd25FdmVudD1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2UodGhpcy5fcG9zaXRpb25EaXNwYXRjaGVyLmxhc3RNb3VzZVBvc2l0aW9uKCkpO3RoaXMuX2lzSW5zaWRlQ29tcG9uZW50KGkpJiYhbi5yZXBlYXQmJih0aGlzLl9rZXlQcmVzc0NhbGxiYWNrc1tyXSYmdGhpcy5fa2V5UHJlc3NDYWxsYmFja3Nbcl0uY2FsbENhbGxiYWNrcyhyKSx0aGlzLl9kb3duZWRLZXlzLmFkZChyKSl9LHQucHJvdG90eXBlLl9oYW5kbGVLZXlVcEV2ZW50PWZ1bmN0aW9uKHIpe3RoaXMuX2Rvd25lZEtleXMuaGFzKHIpJiZ0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3JdJiZ0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3JdLmNhbGxDYWxsYmFja3MociksdGhpcy5fZG93bmVkS2V5cy5kZWxldGUocil9LHQucHJvdG90eXBlLm9uS2V5UHJlc3M9ZnVuY3Rpb24ocixuKXtyZXR1cm4gdGhpcy5fa2V5UHJlc3NDYWxsYmFja3Nbcl18fCh0aGlzLl9rZXlQcmVzc0NhbGxiYWNrc1tyXT1uZXcgeG90LkNhbGxiYWNrU2V0KSx0aGlzLl9rZXlQcmVzc0NhbGxiYWNrc1tyXS5hZGQobiksdGhpc30sdC5wcm90b3R5cGUub2ZmS2V5UHJlc3M9ZnVuY3Rpb24ocixuKXtyZXR1cm4gdGhpcy5fa2V5UHJlc3NDYWxsYmFja3Nbcl0uZGVsZXRlKG4pLHRoaXMuX2tleVByZXNzQ2FsbGJhY2tzW3JdLnNpemU9PT0wJiZkZWxldGUgdGhpcy5fa2V5UHJlc3NDYWxsYmFja3Nbcl0sdGhpc30sdC5wcm90b3R5cGUub25LZXlSZWxlYXNlPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHRoaXMuX2tleVJlbGVhc2VDYWxsYmFja3Nbcl18fCh0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3JdPW5ldyB4b3QuQ2FsbGJhY2tTZXQpLHRoaXMuX2tleVJlbGVhc2VDYWxsYmFja3Nbcl0uYWRkKG4pLHRoaXN9LHQucHJvdG90eXBlLm9mZktleVJlbGVhc2U9ZnVuY3Rpb24ocixuKXtyZXR1cm4gdGhpcy5fa2V5UmVsZWFzZUNhbGxiYWNrc1tyXS5kZWxldGUobiksdGhpcy5fa2V5UmVsZWFzZUNhbGxiYWNrc1tyXS5zaXplPT09MCYmZGVsZXRlIHRoaXMuX2tleVJlbGVhc2VDYWxsYmFja3Nbcl0sdGhpc30sdH0oWkZlLkludGVyYWN0aW9uKTtib3QuS2V5PUpGZX0pO3ZhciBDJHQ9SChTb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFFGZT0oZGUoKSxVdChwZSkpLHRCZT0oRXIoKSxVdChNcikpLE0kdD1EdigpLEUkdD1ScygpLHZsPUZlKCksZUJlPWw0KCksckJlPU92KCksVCR0PWU0KCksbkJlPWZ1bmN0aW9uKGUpe1FGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIsbil7dmFyIGk9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpLl93aGVlbEZpbHRlcj1mdW5jdGlvbihvKXtyZXR1cm4hMH0saS5fd2hlZWxDYWxsYmFjaz1mdW5jdGlvbihvLGEpe3JldHVybiBpLl9oYW5kbGVXaGVlbEV2ZW50KG8sYSl9LGkuX3RvdWNoU3RhcnRDYWxsYmFjaz1mdW5jdGlvbihvLGEscyl7cmV0dXJuIGkuX2hhbmRsZVRvdWNoU3RhcnQobyxhLHMpfSxpLl90b3VjaE1vdmVDYWxsYmFjaz1mdW5jdGlvbihvLGEscyl7cmV0dXJuIGkuX2hhbmRsZVBpbmNoKG8sYSxzKX0saS5fdG91Y2hFbmRDYWxsYmFjaz1mdW5jdGlvbihvLGEscyl7cmV0dXJuIGkuX2hhbmRsZVRvdWNoRW5kKG8sYSxzKX0saS5fdG91Y2hDYW5jZWxDYWxsYmFjaz1mdW5jdGlvbihvLGEscyl7cmV0dXJuIGkuX2hhbmRsZVRvdWNoRW5kKG8sYSxzKX0saS5fcGFuRW5kQ2FsbGJhY2tzPW5ldyB2bC5DYWxsYmFja1NldCxpLl96b29tRW5kQ2FsbGJhY2tzPW5ldyB2bC5DYWxsYmFja1NldCxpLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzPW5ldyB2bC5DYWxsYmFja1NldCxpLl94U2NhbGVzPW5ldyB2bC5TZXQsaS5feVNjYWxlcz1uZXcgdmwuU2V0LGkuX2RyYWdJbnRlcmFjdGlvbj1uZXcgZUJlLkRyYWcsaS5fc2V0dXBEcmFnSW50ZXJhY3Rpb24oKSxpLl90b3VjaElkcz10QmUubWFwKCksaS5fbWluRG9tYWluRXh0ZW50cz1uZXcgdmwuTWFwLGkuX21heERvbWFpbkV4dGVudHM9bmV3IHZsLk1hcCxpLl9taW5Eb21haW5WYWx1ZXM9bmV3IHZsLk1hcCxpLl9tYXhEb21haW5WYWx1ZXM9bmV3IHZsLk1hcCxyIT1udWxsJiZpLmFkZFhTY2FsZShyKSxuIT1udWxsJiZpLmFkZFlTY2FsZShuKSxpfXJldHVybiB0LnByb3RvdHlwZS5kcmFnSW50ZXJhY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZHJhZ0ludGVyYWN0aW9ufSx0LnByb3RvdHlwZS53aGVlbEZpbHRlcj1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTA/dGhpcy5fd2hlZWxGaWx0ZXI6KHRoaXMuX3doZWVsRmlsdGVyPXIsdGhpcyl9LHQucHJvdG90eXBlLnBhbj1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3RoaXMueFNjYWxlcygpLmZvckVhY2goZnVuY3Rpb24oaSl7aS5wYW4obi5fY29uc3RyYWluZWRUcmFuc2xhdGlvbihpLHIueCkpfSksdGhpcy55U2NhbGVzKCkuZm9yRWFjaChmdW5jdGlvbihpKXtpLnBhbihuLl9jb25zdHJhaW5lZFRyYW5zbGF0aW9uKGksci55KSl9KSx0aGlzLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoKX0sdC5wcm90b3R5cGUuem9vbT1mdW5jdGlvbihyLG4saSl7dmFyIG89dGhpcztpPT09dm9pZCAwJiYoaT0hMCk7dmFyIGEscztyZXR1cm4gbiE9bnVsbCYmKGE9bi54LHM9bi55LGkmJih0aGlzLnhTY2FsZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGwpe3ZhciBjPW8uX2NvbnN0cmFpbmVkWm9vbShsLHIsYSk7YT1jLmNlbnRlclBvaW50LHI9Yy56b29tQW1vdW50fSksdGhpcy55U2NhbGVzKCkuZm9yRWFjaChmdW5jdGlvbihsKXt2YXIgYz1vLl9jb25zdHJhaW5lZFpvb20obCxyLHMpO3M9Yy5jZW50ZXJQb2ludCxyPWMuem9vbUFtb3VudH0pKSksdGhpcy54U2NhbGVzKCkuZm9yRWFjaChmdW5jdGlvbihsKXt2YXIgYz1sLnJhbmdlKCksdT1hPT1udWxsPyhjWzFdK2NbMF0pLzI6YTtsLnpvb20ocix1KX0pLHRoaXMueVNjYWxlcygpLmZvckVhY2goZnVuY3Rpb24obCl7dmFyIGM9bC5yYW5nZSgpLHU9cz09bnVsbD8oY1sxXStjWzBdKS8yOnM7bC56b29tKHIsdSl9KSx0aGlzLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoKSx7em9vbUFtb3VudDpyLGNlbnRlclZhbHVlOntjZW50ZXJYOmEsY2VudGVyWTpzfX19LHQucHJvdG90eXBlLl9hbmNob3I9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX2FuY2hvci5jYWxsKHRoaXMsciksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmF0dGFjaFRvKHIpLHRoaXMuX21vdXNlRGlzcGF0Y2hlcj1NJHQuTW91c2UuZ2V0RGlzcGF0Y2hlcih0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub25XaGVlbCh0aGlzLl93aGVlbENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXI9TSR0LlRvdWNoLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoTW92ZSh0aGlzLl90b3VjaE1vdmVDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hFbmQodGhpcy5fdG91Y2hFbmRDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hDYW5jZWwodGhpcy5fdG91Y2hDYW5jZWxDYWxsYmFjayl9LHQucHJvdG90eXBlLl91bmFuY2hvcj1mdW5jdGlvbigpe2UucHJvdG90eXBlLl91bmFuY2hvci5jYWxsKHRoaXMpLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZXaGVlbCh0aGlzLl93aGVlbENhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9bnVsbCx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaE1vdmUodGhpcy5fdG91Y2hNb3ZlQ2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaEVuZCh0aGlzLl90b3VjaEVuZENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hDYW5jZWwodGhpcy5fdG91Y2hDYW5jZWxDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyPW51bGwsdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmRldGFjaCgpfSx0LnByb3RvdHlwZS5faGFuZGxlVG91Y2hTdGFydD1mdW5jdGlvbihyLG4saSl7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aCYmdGhpcy5fdG91Y2hJZHMuc2l6ZSgpPDI7bysrKXt2YXIgYT1yW29dO3RoaXMuX3RvdWNoSWRzLnNldChhLnRvU3RyaW5nKCksdGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShuW2FdKSl9fSx0LnByb3RvdHlwZS5faGFuZGxlUGluY2g9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXM7aWYoISh0aGlzLl90b3VjaElkcy5zaXplKCk8Mikpe3ZhciBhPXRoaXMuX3RvdWNoSWRzLnZhbHVlcygpO2lmKCEoIXRoaXMuX2lzSW5zaWRlQ29tcG9uZW50KHRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2UoYVswXSkpfHwhdGhpcy5faXNJbnNpZGVDb21wb25lbnQodGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShhWzFdKSkpKXt2YXIgcz10Ll9wb2ludERpc3RhbmNlKGFbMF0sYVsxXSk7aWYocyE9PTApe3IuZm9yRWFjaChmdW5jdGlvbihTKXtvLl90b3VjaElkcy5oYXMoUy50b1N0cmluZygpKSYmby5fdG91Y2hJZHMuc2V0KFMudG9TdHJpbmcoKSxvLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKG5bU10pKX0pO3ZhciBsPXRoaXMuX3RvdWNoSWRzLnZhbHVlcygpLGM9dC5fcG9pbnREaXN0YW5jZShsWzBdLGxbMV0pO2lmKGMhPT0wKXt2YXIgdT1zL2MsaD1sLm1hcChmdW5jdGlvbihTLEMpe3JldHVybnt4OihTLngtYVtDXS54KS91LHk6KFMueS1hW0NdLnkpL3V9fSksZj10LmNlbnRlclBvaW50KGFbMF0sYVsxXSkscD10aGlzLnpvb20odSxmKSxkPXAuY2VudGVyVmFsdWUsZz1wLnpvb21BbW91bnQsXz1kLmNlbnRlclgseT1kLmNlbnRlclkseD1hLm1hcChmdW5jdGlvbihTLEMpe3JldHVybnt4OmhbQ10ueCpnK1MueCx5OmhbQ10ueSpnK1MueX19KSxiPXt4Ol8tKHhbMF0ueCt4WzFdLngpLzIseTp5LSh4WzBdLnkreFsxXS55KS8yfTt0aGlzLnBhbihiKX19fX19LHQuY2VudGVyUG9pbnQ9ZnVuY3Rpb24ocixuKXt2YXIgaT1NYXRoLm1pbihyLngsbi54KSxvPU1hdGgubWF4KHIueCxuLngpLGE9TWF0aC5taW4oci55LG4ueSkscz1NYXRoLm1heChyLnksbi55KTtyZXR1cm57eDooaStvKS8yLHk6KHMrYSkvMn19LHQuX3BvaW50RGlzdGFuY2U9ZnVuY3Rpb24ocixuKXt2YXIgaT1NYXRoLm1pbihyLngsbi54KSxvPU1hdGgubWF4KHIueCxuLngpLGE9TWF0aC5taW4oci55LG4ueSkscz1NYXRoLm1heChyLnksbi55KTtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KG8taSwyKStNYXRoLnBvdyhzLWEsMikpfSx0LnByb3RvdHlwZS5faGFuZGxlVG91Y2hFbmQ9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXM7ci5mb3JFYWNoKGZ1bmN0aW9uKGEpe28uX3RvdWNoSWRzLnJlbW92ZShhLnRvU3RyaW5nKCkpfSksdGhpcy5fdG91Y2hJZHMuc2l6ZSgpPjAmJnRoaXMuX3pvb21FbmRDYWxsYmFja3MuY2FsbENhbGxiYWNrcygpfSx0LnByb3RvdHlwZS5faGFuZGxlV2hlZWxFdmVudD1mdW5jdGlvbihyLG4pe2lmKCEhdGhpcy5fd2hlZWxGaWx0ZXIobikpe3ZhciBpPXRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2Uocik7aWYodGhpcy5faXNJbnNpZGVDb21wb25lbnQoaSkpe24ucHJldmVudERlZmF1bHQoKTt2YXIgbz1uLmRlbHRhWSE9PTA/bi5kZWx0YVk6bi5kZWx0YVgsYT1vKihuLmRlbHRhTW9kZT90Ll9QSVhFTFNfUEVSX0xJTkU6MSkscz1NYXRoLnBvdygyLGEqLjAwMik7dGhpcy56b29tKHMsaSksdGhpcy5fem9vbUVuZENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKCl9fX0sdC5wcm90b3R5cGUuX2NvbnN0cmFpbmVkWm9vbT1mdW5jdGlvbihyLG4saSl7cmV0dXJuIFQkdC5jb25zdHJhaW5lZFpvb20ocixuLGksdGhpcy5taW5Eb21haW5FeHRlbnQociksdGhpcy5tYXhEb21haW5FeHRlbnQociksdGhpcy5taW5Eb21haW5WYWx1ZShyKSx0aGlzLm1heERvbWFpblZhbHVlKHIpKX0sdC5wcm90b3R5cGUuX2NvbnN0cmFpbmVkVHJhbnNsYXRpb249ZnVuY3Rpb24ocixuKXtyZXR1cm4gVCR0LmNvbnN0cmFpbmVkVHJhbnNsYXRpb24ocixuLHRoaXMubWluRG9tYWluVmFsdWUociksdGhpcy5tYXhEb21haW5WYWx1ZShyKSl9LHQucHJvdG90eXBlLl9zZXR1cERyYWdJbnRlcmFjdGlvbj1mdW5jdGlvbigpe3ZhciByPXRoaXM7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLmNvbnN0cmFpbmVkVG9Db21wb25lbnQoITEpO3ZhciBuO3RoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWdTdGFydChmdW5jdGlvbigpe3JldHVybiBuPW51bGx9KSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnKGZ1bmN0aW9uKGksbyl7aWYoIShyLl90b3VjaElkcy5zaXplKCk+PTIpKXt2YXIgYT17eDoobj09bnVsbD9pLng6bi54KS1vLngseToobj09bnVsbD9pLnk6bi55KS1vLnl9O3IucGFuKGEpLG49b319KSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnRW5kKGZ1bmN0aW9uKCl7cmV0dXJuIHIuX3BhbkVuZENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKCl9KX0sdC5wcm90b3R5cGUuX25vbkxpbmVhclNjYWxlV2l0aEV4dGVudHM9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMubWluRG9tYWluRXh0ZW50KHIpIT1udWxsJiZ0aGlzLm1heERvbWFpbkV4dGVudChyKSE9bnVsbCYmIShyIGluc3RhbmNlb2YgRSR0LkxpbmVhcikmJiEociBpbnN0YW5jZW9mIEUkdC5UaW1lKX0sdC5wcm90b3R5cGUueFNjYWxlcz1mdW5jdGlvbihyKXt2YXIgbj10aGlzO2lmKHI9PW51bGwpe3ZhciBpPVtdO3JldHVybiB0aGlzLl94U2NhbGVzLmZvckVhY2goZnVuY3Rpb24obyl7aS5wdXNoKG8pfSksaX1yZXR1cm4gdGhpcy5feFNjYWxlcz1uZXcgdmwuU2V0LHIuZm9yRWFjaChmdW5jdGlvbihvKXtuLmFkZFhTY2FsZShvKX0pLHRoaXN9LHQucHJvdG90eXBlLnlTY2FsZXM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztpZihyPT1udWxsKXt2YXIgaT1bXTtyZXR1cm4gdGhpcy5feVNjYWxlcy5mb3JFYWNoKGZ1bmN0aW9uKG8pe2kucHVzaChvKX0pLGl9cmV0dXJuIHRoaXMuX3lTY2FsZXM9bmV3IHZsLlNldCxyLmZvckVhY2goZnVuY3Rpb24obyl7bi5hZGRZU2NhbGUobyl9KSx0aGlzfSx0LnByb3RvdHlwZS5hZGRYU2NhbGU9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3hTY2FsZXMuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLnJlbW92ZVhTY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5feFNjYWxlcy5kZWxldGUociksdGhpcy5fbWluRG9tYWluRXh0ZW50cy5kZWxldGUociksdGhpcy5fbWF4RG9tYWluRXh0ZW50cy5kZWxldGUociksdGhpcy5fbWluRG9tYWluVmFsdWVzLmRlbGV0ZShyKSx0aGlzLl9tYXhEb21haW5WYWx1ZXMuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLmFkZFlTY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5feVNjYWxlcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUucmVtb3ZlWVNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl95U2NhbGVzLmRlbGV0ZShyKSx0aGlzLl9taW5Eb21haW5FeHRlbnRzLmRlbGV0ZShyKSx0aGlzLl9tYXhEb21haW5FeHRlbnRzLmRlbGV0ZShyKSx0aGlzLl9taW5Eb21haW5WYWx1ZXMuZGVsZXRlKHIpLHRoaXMuX21heERvbWFpblZhbHVlcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUubWluRG9tYWluRXh0ZW50PWZ1bmN0aW9uKHIsbil7aWYobj09bnVsbClyZXR1cm4gdGhpcy5fbWluRG9tYWluRXh0ZW50cy5nZXQocik7aWYobi52YWx1ZU9mKCk8MCl0aHJvdyBuZXcgRXJyb3IoImV4dGVudCBtdXN0IGJlIG5vbi1uZWdhdGl2ZSIpO3ZhciBpPXRoaXMubWF4RG9tYWluRXh0ZW50KHIpO2lmKGkhPW51bGwmJmkudmFsdWVPZigpPG4udmFsdWVPZigpKXRocm93IG5ldyBFcnJvcigibWluRG9tYWluRXh0ZW50IG11c3QgYmUgc21hbGxlciB0aGFuIG1heERvbWFpbkV4dGVudCBmb3IgdGhlIHNhbWUgU2NhbGUiKTtyZXR1cm4gdGhpcy5fbm9uTGluZWFyU2NhbGVXaXRoRXh0ZW50cyhyKSYmdmwuV2luZG93Lndhcm4oIlBhbm5pbmcgYW5kIHpvb21pbmcgd2l0aCBleHRlbnRzIG9uIGEgbm9ubGluZWFyIHNjYWxlIG1heSBoYXZlIHVuaW50ZW5kZWQgYmVoYXZpb3IuIiksdGhpcy5fbWluRG9tYWluRXh0ZW50cy5zZXQocixuKSx0aGlzfSx0LnByb3RvdHlwZS5tYXhEb21haW5FeHRlbnQ9ZnVuY3Rpb24ocixuKXtpZihuPT1udWxsKXJldHVybiB0aGlzLl9tYXhEb21haW5FeHRlbnRzLmdldChyKTtpZihuLnZhbHVlT2YoKTw9MCl0aHJvdyBuZXcgRXJyb3IoImV4dGVudCBtdXN0IGJlIHBvc2l0aXZlIik7dmFyIGk9dGhpcy5taW5Eb21haW5FeHRlbnQocik7aWYoaSE9bnVsbCYmbi52YWx1ZU9mKCk8aS52YWx1ZU9mKCkpdGhyb3cgbmV3IEVycm9yKCJtYXhEb21haW5FeHRlbnQgbXVzdCBiZSBsYXJnZXIgdGhhbiBtaW5Eb21haW5FeHRlbnQgZm9yIHRoZSBzYW1lIFNjYWxlIik7cmV0dXJuIHRoaXMuX25vbkxpbmVhclNjYWxlV2l0aEV4dGVudHMocikmJnZsLldpbmRvdy53YXJuKCJQYW5uaW5nIGFuZCB6b29taW5nIHdpdGggZXh0ZW50cyBvbiBhIG5vbmxpbmVhciBzY2FsZSBtYXkgaGF2ZSB1bmludGVuZGVkIGJlaGF2aW9yLiIpLHRoaXMuX21heERvbWFpbkV4dGVudHMuc2V0KHIsbiksdGhpc30sdC5wcm90b3R5cGUubWluRG9tYWluVmFsdWU9ZnVuY3Rpb24ocixuKXtyZXR1cm4gbj09bnVsbD90aGlzLl9taW5Eb21haW5WYWx1ZXMuZ2V0KHIpOih0aGlzLl9taW5Eb21haW5WYWx1ZXMuc2V0KHIsbiksdGhpcyl9LHQucHJvdG90eXBlLm1heERvbWFpblZhbHVlPWZ1bmN0aW9uKHIsbil7cmV0dXJuIG49PW51bGw/dGhpcy5fbWF4RG9tYWluVmFsdWVzLmdldChyKToodGhpcy5fbWF4RG9tYWluVmFsdWVzLnNldChyLG4pLHRoaXMpfSx0LnByb3RvdHlwZS5zZXRNaW5NYXhEb21haW5WYWx1ZXNUbz1mdW5jdGlvbihyKXt0aGlzLl9taW5Eb21haW5WYWx1ZXMuZGVsZXRlKHIpLHRoaXMuX21heERvbWFpblZhbHVlcy5kZWxldGUocik7dmFyIG49ci5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpLGk9blswXSxvPW5bMV07cmV0dXJuIHRoaXMubWluRG9tYWluVmFsdWUocixpKSx0aGlzLm1heERvbWFpblZhbHVlKHIsbyksdGhpc30sdC5wcm90b3R5cGUub25QYW5FbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3BhbkVuZENhbGxiYWNrcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUub2ZmUGFuRW5kPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wYW5FbmRDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLm9uWm9vbUVuZD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fem9vbUVuZENhbGxiYWNrcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUub2ZmWm9vbUVuZD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fem9vbUVuZENhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25QYW5ab29tVXBkYXRlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZQYW5ab29tVXBkYXRlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0Ll9QSVhFTFNfUEVSX0xJTkU9MTIwLHR9KHJCZS5JbnRlcmFjdGlvbik7U290LlBhblpvb209bkJlfSk7dmFyIFAkdD1IKEVvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRW90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgaUJlPShkZSgpLFV0KHBlKSksQSR0PUR2KCksTW90PUZlKCksb0JlPU92KCksYUJlPWZ1bmN0aW9uKGUpe2lCZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZSE9PW51bGwmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiByLl9vdmVyQ29tcG9uZW50PSExLHIuX3BvaW50ZXJFbnRlckNhbGxiYWNrcz1uZXcgTW90LkNhbGxiYWNrU2V0LHIuX3BvaW50ZXJNb3ZlQ2FsbGJhY2tzPW5ldyBNb3QuQ2FsbGJhY2tTZXQsci5fcG9pbnRlckV4aXRDYWxsYmFja3M9bmV3IE1vdC5DYWxsYmFja1NldCxyLl9tb3VzZU1vdmVDYWxsYmFjaz1mdW5jdGlvbihuLGkpe3JldHVybiByLl9oYW5kbGVNb3VzZUV2ZW50KG4saSl9LHIuX3RvdWNoU3RhcnRDYWxsYmFjaz1mdW5jdGlvbihuLGksbyl7cmV0dXJuIHIuX2hhbmRsZVRvdWNoRXZlbnQoaVtuWzBdXSxvKX0scn1yZXR1cm4gdC5wcm90b3R5cGUuX2FuY2hvcj1mdW5jdGlvbihyKXtlLnByb3RvdHlwZS5fYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9QSR0Lk1vdXNlLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXI9QSR0LlRvdWNoLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spfSx0LnByb3RvdHlwZS5fdW5hbmNob3I9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fdW5hbmNob3IuY2FsbCh0aGlzKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9bnVsbCx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlcj1udWxsfSx0LnByb3RvdHlwZS5faGFuZGxlTW91c2VFdmVudD1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX21vdXNlRGlzcGF0Y2hlci5ldmVudEluc2lkZSh0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLG4pO3RoaXMuX2hhbmRsZVBvaW50ZXJFdmVudChyLGkpfSx0LnByb3RvdHlwZS5faGFuZGxlVG91Y2hFdmVudD1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX3RvdWNoRGlzcGF0Y2hlci5ldmVudEluc2lkZSh0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLG4pO3RoaXMuX2hhbmRsZVBvaW50ZXJFdmVudChyLGkpfSx0LnByb3RvdHlwZS5faGFuZGxlUG9pbnRlckV2ZW50PWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShyKSxvPXRoaXMuX2lzSW5zaWRlQ29tcG9uZW50KGkpO28mJm4/KHRoaXMuX292ZXJDb21wb25lbnR8fHRoaXMuX3BvaW50ZXJFbnRlckNhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKGkpLHRoaXMuX3BvaW50ZXJNb3ZlQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoaSkpOnRoaXMuX292ZXJDb21wb25lbnQmJnRoaXMuX3BvaW50ZXJFeGl0Q2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoaSksdGhpcy5fb3ZlckNvbXBvbmVudD1vJiZufSx0LnByb3RvdHlwZS5vblBvaW50ZXJFbnRlcj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcG9pbnRlckVudGVyQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZQb2ludGVyRW50ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3BvaW50ZXJFbnRlckNhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25Qb2ludGVyTW92ZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcG9pbnRlck1vdmVDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZlBvaW50ZXJNb3ZlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wb2ludGVyTW92ZUNhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25Qb2ludGVyRXhpdD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcG9pbnRlckV4aXRDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZlBvaW50ZXJFeGl0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wb2ludGVyRXhpdENhbGxiYWNrcy5kZWxldGUociksdGhpc30sdH0ob0JlLkludGVyYWN0aW9uKTtFb3QuUG9pbnRlcj1hQmV9KTt2YXIgbDQ9SChKZz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSmcsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBjND0oZGUoKSxVdChwZSkpO2M0Ll9fZXhwb3J0U3Rhcih4JHQoKSxKZyk7YzQuX19leHBvcnRTdGFyKHckdCgpLEpnKTtjNC5fX2V4cG9ydFN0YXIod290KCksSmcpO2M0Ll9fZXhwb3J0U3RhcihDJHQoKSxKZyk7YzQuX19leHBvcnRTdGFyKFAkdCgpLEpnKTt2YXIgc0JlPWU0KCk7Smcuem9vbU91dD1zQmUuem9vbU91dH0pO3ZhciBUb3Q9SCh1ND0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodTQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBsQmU9KGRlKCksVXQocGUpKSxWRj1GZSgpLGNCZT1rYygpLHJzOyhmdW5jdGlvbihlKXtlW2UuVkFMVUU9MF09IlZBTFVFIixlW2UuUElYRUw9MV09IlBJWEVMIn0pKHJzPXU0LlByb3BlcnR5TW9kZXx8KHU0LlByb3BlcnR5TW9kZT17fSkpO3ZhciB1QmU9ZnVuY3Rpb24oZSl7bEJlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2JveFZpc2libGU9ITEsci5fYm94Qm91bmRzPXt0b3BMZWZ0Ont4OjAseTowfSxib3R0b21SaWdodDp7eDowLHk6MH19LHIuX3hCb3VuZHNNb2RlPXJzLlBJWEVMLHIuX3lCb3VuZHNNb2RlPXJzLlBJWEVMLHIuYWRkQ2xhc3MoInNlbGVjdGlvbi1ib3gtbGF5ZXIiKSxyLl9hZGp1c3RCb3VuZHNDYWxsYmFjaz1mdW5jdGlvbigpe3IucmVuZGVyKCl9LHIuX292ZXJmbG93SGlkZGVuPSEwLHIuX3hFeHRlbnQ9W3ZvaWQgMCx2b2lkIDBdLHIuX3lFeHRlbnQ9W3ZvaWQgMCx2b2lkIDBdLHJ9cmV0dXJuIHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX2JveD10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJzZWxlY3Rpb24tYm94IiwhMCkucmVtb3ZlKCksdGhpcy5fYm94QXJlYT10aGlzLl9ib3guYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgic2VsZWN0aW9uLWFyZWEiLCEwKX0sdC5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXI9ZnVuY3Rpb24ocixuKXtyZXR1cm57d2lkdGg6cixoZWlnaHQ6bn19LHQucHJvdG90eXBlLmJvdW5kcz1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9nZXRCb3VuZHMoKToodGhpcy5fc2V0Qm91bmRzKHIpLHRoaXMuX3hCb3VuZHNNb2RlPXJzLlBJWEVMLHRoaXMuX3lCb3VuZHNNb2RlPXJzLlBJWEVMLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9zZXRCb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49e3g6TWF0aC5taW4oci50b3BMZWZ0Lngsci5ib3R0b21SaWdodC54KSx5Ok1hdGgubWluKHIudG9wTGVmdC55LHIuYm90dG9tUmlnaHQueSl9LGk9e3g6TWF0aC5tYXgoci50b3BMZWZ0Lngsci5ib3R0b21SaWdodC54KSx5Ok1hdGgubWF4KHIudG9wTGVmdC55LHIuYm90dG9tUmlnaHQueSl9O3RoaXMuX2JveEJvdW5kcz17dG9wTGVmdDpuLGJvdHRvbVJpZ2h0Oml9fSx0LnByb3RvdHlwZS5fZ2V0Qm91bmRzPWZ1bmN0aW9uKCl7cmV0dXJue3RvcExlZnQ6e3g6dGhpcy5feEJvdW5kc01vZGU9PT1ycy5QSVhFTD90aGlzLl9ib3hCb3VuZHMudG9wTGVmdC54OnRoaXMuX3hTY2FsZT09bnVsbD8wOk1hdGgubWluKHRoaXMueFNjYWxlKCkuc2NhbGUodGhpcy54RXh0ZW50KClbMF0pLHRoaXMueFNjYWxlKCkuc2NhbGUodGhpcy54RXh0ZW50KClbMV0pKSx5OnRoaXMuX3lCb3VuZHNNb2RlPT09cnMuUElYRUw/dGhpcy5fYm94Qm91bmRzLnRvcExlZnQueTp0aGlzLl95U2NhbGU9PW51bGw/MDpNYXRoLm1pbih0aGlzLnlTY2FsZSgpLnNjYWxlKHRoaXMueUV4dGVudCgpWzBdKSx0aGlzLnlTY2FsZSgpLnNjYWxlKHRoaXMueUV4dGVudCgpWzFdKSl9LGJvdHRvbVJpZ2h0Ont4OnRoaXMuX3hCb3VuZHNNb2RlPT09cnMuUElYRUw/dGhpcy5fYm94Qm91bmRzLmJvdHRvbVJpZ2h0Lng6dGhpcy5feFNjYWxlPT1udWxsPzA6TWF0aC5tYXgodGhpcy54U2NhbGUoKS5zY2FsZSh0aGlzLnhFeHRlbnQoKVswXSksdGhpcy54U2NhbGUoKS5zY2FsZSh0aGlzLnhFeHRlbnQoKVsxXSkpLHk6dGhpcy5feUJvdW5kc01vZGU9PT1ycy5QSVhFTD90aGlzLl9ib3hCb3VuZHMuYm90dG9tUmlnaHQueTp0aGlzLl95U2NhbGU9PW51bGw/MDpNYXRoLm1heCh0aGlzLnlTY2FsZSgpLnNjYWxlKHRoaXMueUV4dGVudCgpWzBdKSx0aGlzLnlTY2FsZSgpLnNjYWxlKHRoaXMueUV4dGVudCgpWzFdKSl9fX0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtpZihlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpLHRoaXMuX2JveFZpc2libGUpe3ZhciByPXRoaXMuYm91bmRzKCksbj1yLnRvcExlZnQueSxpPXIuYm90dG9tUmlnaHQueSxvPXIudG9wTGVmdC54LGE9ci5ib3R0b21SaWdodC54O2lmKCEoVkYuTWF0aC5pc1ZhbGlkTnVtYmVyKG4pJiZWRi5NYXRoLmlzVmFsaWROdW1iZXIoaSkmJlZGLk1hdGguaXNWYWxpZE51bWJlcihvKSYmVkYuTWF0aC5pc1ZhbGlkTnVtYmVyKGEpKSl0aHJvdyBuZXcgRXJyb3IoImJvdW5kcyBoYXZlIG5vdCBiZWVuIHByb3Blcmx5IHNldCIpO3RoaXMuX2JveEFyZWEuYXR0cnMoe3g6byx5Om4sd2lkdGg6YS1vLGhlaWdodDppLW59KSx0aGlzLmNvbnRlbnQoKS5ub2RlKCkuYXBwZW5kQ2hpbGQodGhpcy5fYm94Lm5vZGUoKSl9ZWxzZSB0aGlzLl9ib3gucmVtb3ZlKCk7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmJveFZpc2libGU9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fYm94VmlzaWJsZToodGhpcy5fYm94VmlzaWJsZT1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUueFNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3hTY2FsZToodGhpcy5feFNjYWxlIT1udWxsJiZ0aGlzLl94U2NhbGUub2ZmVXBkYXRlKHRoaXMuX2FkanVzdEJvdW5kc0NhbGxiYWNrKSx0aGlzLl94U2NhbGU9cix0aGlzLl94Qm91bmRzTW9kZT1ycy5WQUxVRSx0aGlzLl94U2NhbGUub25VcGRhdGUodGhpcy5fYWRqdXN0Qm91bmRzQ2FsbGJhY2spLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLnlTY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl95U2NhbGU6KHRoaXMuX3lTY2FsZSE9bnVsbCYmdGhpcy5feVNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayksdGhpcy5feVNjYWxlPXIsdGhpcy5feUJvdW5kc01vZGU9cnMuVkFMVUUsdGhpcy5feVNjYWxlLm9uVXBkYXRlKHRoaXMuX2FkanVzdEJvdW5kc0NhbGxiYWNrKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS54RXh0ZW50PWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2dldFhFeHRlbnQoKToodGhpcy5fc2V0WEV4dGVudChyKSx0aGlzLl94Qm91bmRzTW9kZT1ycy5WQUxVRSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5fZ2V0WEV4dGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl94Qm91bmRzTW9kZT09PXJzLlZBTFVFP3RoaXMuX3hFeHRlbnQ6dGhpcy5feFNjYWxlPT1udWxsP1t2b2lkIDAsdm9pZCAwXTpbdGhpcy5feFNjYWxlLmludmVydCh0aGlzLl9ib3hCb3VuZHMudG9wTGVmdC54KSx0aGlzLl94U2NhbGUuaW52ZXJ0KHRoaXMuX2JveEJvdW5kcy5ib3R0b21SaWdodC54KV19LHQucHJvdG90eXBlLl9zZXRYRXh0ZW50PWZ1bmN0aW9uKHIpe3RoaXMuX3hFeHRlbnQ9cn0sdC5wcm90b3R5cGUueUV4dGVudD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9nZXRZRXh0ZW50KCk6KHRoaXMuX3NldFlFeHRlbnQociksdGhpcy5feUJvdW5kc01vZGU9cnMuVkFMVUUsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuX2dldFlFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feUJvdW5kc01vZGU9PT1ycy5WQUxVRT90aGlzLl95RXh0ZW50OnRoaXMuX3lTY2FsZT09bnVsbD9bdm9pZCAwLHZvaWQgMF06W3RoaXMuX3lTY2FsZS5pbnZlcnQodGhpcy5fYm94Qm91bmRzLnRvcExlZnQueSksdGhpcy5feVNjYWxlLmludmVydCh0aGlzLl9ib3hCb3VuZHMuYm90dG9tUmlnaHQueSldfSx0LnByb3RvdHlwZS5fc2V0WUV4dGVudD1mdW5jdGlvbihyKXt0aGlzLl95RXh0ZW50PXJ9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyksdGhpcy5feFNjYWxlIT1udWxsJiZ0aGlzLnhTY2FsZSgpLm9mZlVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayksdGhpcy5feVNjYWxlIT1udWxsJiZ0aGlzLnlTY2FsZSgpLm9mZlVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayl9LHR9KGNCZS5Db21wb25lbnQpO3U0LlNlbGVjdGlvbkJveExheWVyPXVCZX0pO3ZhciBxRj1IKEFvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQW90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgaEJlPShkZSgpLFV0KHBlKSksZkJlPWw0KCksQ290PUZlKCkscEJlPWpnKCksVUY9UG90KCksZEJlPVRvdCgpLG1CZT1mdW5jdGlvbihlKXtoQmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fZGV0ZWN0aW9uUmFkaXVzPTMsci5fcmVzaXphYmxlPSExLHIuX21vdmFibGU9ITEsci5faGFzQ29ybmVycz0hMCxyLmFkZENsYXNzKCJkcmFnLWJveC1sYXllciIpLHIuX2RyYWdJbnRlcmFjdGlvbj1uZXcgZkJlLkRyYWcsci5fc2V0VXBDYWxsYmFja3MoKSxyLl9kcmFnSW50ZXJhY3Rpb24uYXR0YWNoVG8ociksci5fZHJhZ1N0YXJ0Q2FsbGJhY2tzPW5ldyBDb3QuQ2FsbGJhY2tTZXQsci5fZHJhZ0NhbGxiYWNrcz1uZXcgQ290LkNhbGxiYWNrU2V0LHIuX2RyYWdFbmRDYWxsYmFja3M9bmV3IENvdC5DYWxsYmFja1NldCxyfXJldHVybiB0LnByb3RvdHlwZS5fc2V0VXBDYWxsYmFja3M9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG4saSxvLGEscz17bmV3Qm94OjAscmVzaXplOjEsbW92ZToyfSxsPXMubmV3Qm94LGM9ZnVuY3Rpb24oZil7bj1yLl9nZXRSZXNpemluZ0VkZ2VzKGYpO3ZhciBwPXIuYm91bmRzKCksZD1wLnRvcExlZnQueDw9Zi54JiZmLng8PXAuYm90dG9tUmlnaHQueCYmcC50b3BMZWZ0Lnk8PWYueSYmZi55PD1wLmJvdHRvbVJpZ2h0Lnk7ci5ib3hWaXNpYmxlKCkmJihuLnRvcHx8bi5ib3R0b218fG4ubGVmdHx8bi5yaWdodCk/bD1zLnJlc2l6ZTpyLmJveFZpc2libGUoKSYmci5tb3ZhYmxlKCkmJmQ/bD1zLm1vdmU6KGw9cy5uZXdCb3gsci5fc2V0Qm91bmRzKHt0b3BMZWZ0OmYsYm90dG9tUmlnaHQ6Zn0pLHIuX3hCb3VuZHNNb2RlPT09VUYuUHJvcGVydHlNb2RlLlZBTFVFJiZyLnhTY2FsZSgpIT1udWxsJiZyLl9zZXRYRXh0ZW50KFtyLnhTY2FsZSgpLmludmVydChmLngpLHIueFNjYWxlKCkuaW52ZXJ0KGYueCldKSxyLl95Qm91bmRzTW9kZT09PVVGLlByb3BlcnR5TW9kZS5WQUxVRSYmci55U2NhbGUoKSE9bnVsbCYmci5fc2V0WUV4dGVudChbci55U2NhbGUoKS5pbnZlcnQoZi55KSxyLnlTY2FsZSgpLmludmVydChmLnkpXSksci5yZW5kZXIoKSksci5ib3hWaXNpYmxlKCEwKSxwPXIuYm91bmRzKCksaT17eDpwLnRvcExlZnQueCx5OnAudG9wTGVmdC55fSxvPXt4OnAuYm90dG9tUmlnaHQueCx5OnAuYm90dG9tUmlnaHQueX0sYT1mLHIuX2RyYWdTdGFydENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHApfSx1PWZ1bmN0aW9uKGYscCl7c3dpdGNoKGwpe2Nhc2Ugcy5uZXdCb3g6by54PXAueCxvLnk9cC55O2JyZWFrO2Nhc2Ugcy5yZXNpemU6bi5ib3R0b20/by55PXAueTpuLnRvcCYmKGkueT1wLnkpLG4ucmlnaHQ/by54PXAueDpuLmxlZnQmJihpLng9cC54KTticmVhaztjYXNlIHMubW92ZTp2YXIgZD1wLngtYS54LGc9cC55LWEueTtpLngrPWQsaS55Kz1nLG8ueCs9ZCxvLnkrPWcsYT1wO2JyZWFrfXIuX3NldEJvdW5kcyh7dG9wTGVmdDppLGJvdHRvbVJpZ2h0Om99KSxyLl94Qm91bmRzTW9kZT09PVVGLlByb3BlcnR5TW9kZS5WQUxVRSYmci54U2NhbGUoKSE9bnVsbCYmci5fc2V0WEV4dGVudChbci54U2NhbGUoKS5pbnZlcnQoaS54KSxyLnhTY2FsZSgpLmludmVydChvLngpXSksci5feUJvdW5kc01vZGU9PT1VRi5Qcm9wZXJ0eU1vZGUuVkFMVUUmJnIueVNjYWxlKCkhPW51bGwmJnIuX3NldFlFeHRlbnQoW3IueVNjYWxlKCkuaW52ZXJ0KGkueSksci55U2NhbGUoKS5pbnZlcnQoby55KV0pLHIucmVuZGVyKCksci5fZHJhZ0NhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHIuYm91bmRzKCkpfSxoPWZ1bmN0aW9uKGYscCl7bD09PXMubmV3Qm94JiZmLng9PT1wLngmJmYueT09PXAueSYmci5ib3hWaXNpYmxlKCExKSxyLl9kcmFnRW5kQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3Moci5ib3VuZHMoKSl9O3RoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWdTdGFydChjKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnKHUpLHRoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWdFbmQoaCksdGhpcy5fZGlzY29ubmVjdEludGVyYWN0aW9uPWZ1bmN0aW9uKCl7ci5fZHJhZ0ludGVyYWN0aW9uLm9mZkRyYWdTdGFydChjKSxyLl9kcmFnSW50ZXJhY3Rpb24ub2ZmRHJhZyh1KSxyLl9kcmFnSW50ZXJhY3Rpb24ub2ZmRHJhZ0VuZChoKSxyLl9kcmFnSW50ZXJhY3Rpb24uZGV0YWNoKCl9fSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpO3ZhciBuPWZ1bmN0aW9uKCl7cmV0dXJuIHIuX2JveC5hcHBlbmQoImxpbmUiKS5zdHlsZXMoe29wYWNpdHk6MCxzdHJva2U6InBpbmsiLCJwb2ludGVyLWV2ZW50cyI6InZpc2libGVTdHJva2UifSl9O2lmKHRoaXMuX2RldGVjdGlvbkVkZ2VUPW4oKS5jbGFzc2VkKCJkcmFnLWVkZ2UtdGIiLCEwKSx0aGlzLl9kZXRlY3Rpb25FZGdlQj1uKCkuY2xhc3NlZCgiZHJhZy1lZGdlLXRiIiwhMCksdGhpcy5fZGV0ZWN0aW9uRWRnZUw9bigpLmNsYXNzZWQoImRyYWctZWRnZS1sciIsITApLHRoaXMuX2RldGVjdGlvbkVkZ2VSPW4oKS5jbGFzc2VkKCJkcmFnLWVkZ2UtbHIiLCEwKSx0aGlzLl9oYXNDb3JuZXJzKXt2YXIgaT1mdW5jdGlvbigpe3JldHVybiByLl9ib3guYXBwZW5kKCJjaXJjbGUiKS5zdHlsZXMoe29wYWNpdHk6MCxmaWxsOiJwaW5rIiwicG9pbnRlci1ldmVudHMiOiJ2aXNpYmxlRmlsbCJ9KX07dGhpcy5fZGV0ZWN0aW9uQ29ybmVyVEw9aSgpLmNsYXNzZWQoImRyYWctY29ybmVyLXRsIiwhMCksdGhpcy5fZGV0ZWN0aW9uQ29ybmVyVFI9aSgpLmNsYXNzZWQoImRyYWctY29ybmVyLXRyIiwhMCksdGhpcy5fZGV0ZWN0aW9uQ29ybmVyQkw9aSgpLmNsYXNzZWQoImRyYWctY29ybmVyLWJsIiwhMCksdGhpcy5fZGV0ZWN0aW9uQ29ybmVyQlI9aSgpLmNsYXNzZWQoImRyYWctY29ybmVyLWJyIiwhMCl9fSx0LnByb3RvdHlwZS5fZ2V0UmVzaXppbmdFZGdlcz1mdW5jdGlvbihyKXt2YXIgbj17dG9wOiExLGJvdHRvbTohMSxsZWZ0OiExLHJpZ2h0OiExfTtpZighdGhpcy5yZXNpemFibGUoKSlyZXR1cm4gbjt2YXIgaT10aGlzLmJvdW5kcygpLG89aS50b3BMZWZ0LnksYT1pLmJvdHRvbVJpZ2h0Lnkscz1pLnRvcExlZnQueCxsPWkuYm90dG9tUmlnaHQueCxjPXRoaXMuX2RldGVjdGlvblJhZGl1cztyZXR1cm4gcy1jPD1yLngmJnIueDw9bCtjJiYobi50b3A9by1jPD1yLnkmJnIueTw9bytjLG4uYm90dG9tPWEtYzw9ci55JiZyLnk8PWErYyksby1jPD1yLnkmJnIueTw9YStjJiYobi5sZWZ0PXMtYzw9ci54JiZyLng8PXMrYyxuLnJpZ2h0PWwtYzw9ci54JiZyLng8PWwrYyksbn0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtpZihlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpLHRoaXMuYm94VmlzaWJsZSgpKXt2YXIgcj10aGlzLmJvdW5kcygpLG49ci50b3BMZWZ0LnksaT1yLmJvdHRvbVJpZ2h0Lnksbz1yLnRvcExlZnQueCxhPXIuYm90dG9tUmlnaHQueDt0aGlzLl9kZXRlY3Rpb25FZGdlVC5hdHRycyh7eDE6byx5MTpuLHgyOmEseTI6biwic3Ryb2tlLXdpZHRoIjp0aGlzLl9kZXRlY3Rpb25SYWRpdXMqMn0pLHRoaXMuX2RldGVjdGlvbkVkZ2VCLmF0dHJzKHt4MTpvLHkxOmkseDI6YSx5MjppLCJzdHJva2Utd2lkdGgiOnRoaXMuX2RldGVjdGlvblJhZGl1cyoyfSksdGhpcy5fZGV0ZWN0aW9uRWRnZUwuYXR0cnMoe3gxOm8seTE6bix4MjpvLHkyOmksInN0cm9rZS13aWR0aCI6dGhpcy5fZGV0ZWN0aW9uUmFkaXVzKjJ9KSx0aGlzLl9kZXRlY3Rpb25FZGdlUi5hdHRycyh7eDE6YSx5MTpuLHgyOmEseTI6aSwic3Ryb2tlLXdpZHRoIjp0aGlzLl9kZXRlY3Rpb25SYWRpdXMqMn0pLHRoaXMuX2hhc0Nvcm5lcnMmJih0aGlzLl9kZXRlY3Rpb25Db3JuZXJUTC5hdHRycyh7Y3g6byxjeTpuLHI6dGhpcy5fZGV0ZWN0aW9uUmFkaXVzfSksdGhpcy5fZGV0ZWN0aW9uQ29ybmVyVFIuYXR0cnMoe2N4OmEsY3k6bixyOnRoaXMuX2RldGVjdGlvblJhZGl1c30pLHRoaXMuX2RldGVjdGlvbkNvcm5lckJMLmF0dHJzKHtjeDpvLGN5Omkscjp0aGlzLl9kZXRlY3Rpb25SYWRpdXN9KSx0aGlzLl9kZXRlY3Rpb25Db3JuZXJCUi5hdHRycyh7Y3g6YSxjeTppLHI6dGhpcy5fZGV0ZWN0aW9uUmFkaXVzfSkpfXJldHVybiB0aGlzfSx0LnByb3RvdHlwZS5kZXRlY3Rpb25SYWRpdXM9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fZGV0ZWN0aW9uUmFkaXVzO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoImRldGVjdGlvbiByYWRpdXMgY2Fubm90IGJlIG5lZ2F0aXZlLiIpO3JldHVybiB0aGlzLl9kZXRlY3Rpb25SYWRpdXM9cix0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLnJlc2l6YWJsZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9yZXNpemFibGU6KHRoaXMuX3Jlc2l6YWJsZT1yLHRoaXMuX3NldFJlc2l6YWJsZUNsYXNzZXMociksdGhpcyl9LHQucHJvdG90eXBlLl9zZXRSZXNpemFibGVDbGFzc2VzPWZ1bmN0aW9uKHIpe3ImJnRoaXMuZW5hYmxlZCgpPyh0aGlzLmFkZENsYXNzKCJ4LXJlc2l6YWJsZSIpLHRoaXMuYWRkQ2xhc3MoInktcmVzaXphYmxlIikpOih0aGlzLnJlbW92ZUNsYXNzKCJ4LXJlc2l6YWJsZSIpLHRoaXMucmVtb3ZlQ2xhc3MoInktcmVzaXphYmxlIikpfSx0LnByb3RvdHlwZS5tb3ZhYmxlPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX21vdmFibGU6KHRoaXMuX21vdmFibGU9cix0aGlzLl9zZXRNb3ZhYmxlQ2xhc3MoKSx0aGlzKX0sdC5wcm90b3R5cGUuX3NldE1vdmFibGVDbGFzcz1mdW5jdGlvbigpe3RoaXMubW92YWJsZSgpJiZ0aGlzLmVuYWJsZWQoKT90aGlzLmFkZENsYXNzKCJtb3ZhYmxlIik6dGhpcy5yZW1vdmVDbGFzcygibW92YWJsZSIpfSx0LnByb3RvdHlwZS5vbkRyYWdTdGFydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEcmFnU3RhcnQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25EcmFnPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEcmFnPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0LnByb3RvdHlwZS5vbkRyYWdFbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZkRyYWdFbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLmRyYWdJbnRlcmFjdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kcmFnSW50ZXJhY3Rpb259LHQucHJvdG90eXBlLmVuYWJsZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZHJhZ0ludGVyYWN0aW9uLmVuYWJsZWQoKToodGhpcy5fZHJhZ0ludGVyYWN0aW9uLmVuYWJsZWQociksdGhpcy5fc2V0UmVzaXphYmxlQ2xhc3Nlcyh0aGlzLnJlc2l6YWJsZSgpKSx0aGlzLl9zZXRNb3ZhYmxlQ2xhc3MoKSx0aGlzKX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciByPXRoaXM7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiByLl9kcmFnQ2FsbGJhY2tzLmRlbGV0ZShuKX0pLHRoaXMuX2RyYWdDYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gci5fZHJhZ0NhbGxiYWNrcy5kZWxldGUobil9KSx0aGlzLl9kcmFnRW5kQ2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIHIuX2RyYWdFbmRDYWxsYmFja3MuZGVsZXRlKG4pfSksdGhpcy5fZGlzY29ubmVjdEludGVyYWN0aW9uKCl9LHQucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXNldFN0YXRlKCksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmRldGFjaCgpLGUucHJvdG90eXBlLmRldGFjaC5jYWxsKHRoaXMpLHRoaXN9LHQucHJvdG90eXBlLmFuY2hvcj1mdW5jdGlvbihyKXtyZXR1cm4gcj1wQmUuY29lcmNlRXh0ZXJuYWxEMyhyKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24uYXR0YWNoVG8odGhpcyksZS5wcm90b3R5cGUuYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzfSx0LnByb3RvdHlwZS5fcmVzZXRTdGF0ZT1mdW5jdGlvbigpe3RoaXMuYm91bmRzKHt0b3BMZWZ0Ont4OjAseTowfSxib3R0b21SaWdodDp7eDowLHk6MH19KX0sdH0oZEJlLlNlbGVjdGlvbkJveExheWVyKTtBb3QuRHJhZ0JveExheWVyPW1CZX0pO3ZhciBMb3Q9SChJb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KElvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGdCZT0oZGUoKSxVdChwZSkpLF9CZT1GZSgpLHlCZT1rYygpLHp2OyhmdW5jdGlvbihlKXtlW2UuVkFMVUU9MF09IlZBTFVFIixlW2UuUElYRUw9MV09IlBJWEVMIn0pKHp2fHwoenY9e30pKTt2YXIgdkJlPWZ1bmN0aW9uKGUpe2dCZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztpZihuLl9tb2RlPXp2LlZBTFVFLHIhPT10Lk9SSUVOVEFUSU9OX1ZFUlRJQ0FMJiZyIT09dC5PUklFTlRBVElPTl9IT1JJWk9OVEFMKXRocm93IG5ldyBFcnJvcihyKyIgaXMgbm90IGEgdmFsaWQgb3JpZW50YXRpb24gZm9yIEd1aWRlTGluZUxheWVyIik7cmV0dXJuIG4uX29yaWVudGF0aW9uPXIsbi5fb3ZlcmZsb3dIaWRkZW49ITAsbi5hZGRDbGFzcygiZ3VpZGUtbGluZS1sYXllciIpLG4uX2lzVmVydGljYWwoKT9uLmFkZENsYXNzKCJ2ZXJ0aWNhbCIpOm4uYWRkQ2xhc3MoImhvcml6b250YWwiKSxuLl9zY2FsZVVwZGF0ZUNhbGxiYWNrPWZ1bmN0aW9uKCl7bi5fc3luY1BpeGVsUG9zaXRpb25BbmRWYWx1ZSgpLG4ucmVuZGVyKCl9LG59cmV0dXJuIHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX2d1aWRlTGluZT10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJndWlkZS1saW5lIiwhMCl9LHQucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHIsbil7cmV0dXJue3dpZHRoOnIsaGVpZ2h0Om59fSx0LnByb3RvdHlwZS5faXNWZXJ0aWNhbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9vcmllbnRhdGlvbj09PXQuT1JJRU5UQVRJT05fVkVSVElDQUx9LHQucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihyLG4saSl7cmV0dXJuIGUucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLHIsbixpKSx0aGlzLnNjYWxlKCkhPW51bGwmJih0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5zY2FsZSgpLnJhbmdlKFswLHRoaXMud2lkdGgoKV0pOnRoaXMuc2NhbGUoKS5yYW5nZShbdGhpcy5oZWlnaHQoKSwwXSkpLHRoaXN9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyksdGhpcy5fc3luY1BpeGVsUG9zaXRpb25BbmRWYWx1ZSgpLHRoaXMuX2d1aWRlTGluZS5hdHRycyh7eDE6dGhpcy5faXNWZXJ0aWNhbCgpP3RoaXMucGl4ZWxQb3NpdGlvbigpOjAseTE6dGhpcy5faXNWZXJ0aWNhbCgpPzA6dGhpcy5waXhlbFBvc2l0aW9uKCkseDI6dGhpcy5faXNWZXJ0aWNhbCgpP3RoaXMucGl4ZWxQb3NpdGlvbigpOnRoaXMud2lkdGgoKSx5Mjp0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5oZWlnaHQoKTp0aGlzLnBpeGVsUG9zaXRpb24oKX0pLHRoaXN9LHQucHJvdG90eXBlLl9zeW5jUGl4ZWxQb3NpdGlvbkFuZFZhbHVlPWZ1bmN0aW9uKCl7dGhpcy5zY2FsZSgpIT1udWxsJiYodGhpcy5fbW9kZT09PXp2LlZBTFVFJiZ0aGlzLnZhbHVlKCkhPW51bGw/dGhpcy5fcGl4ZWxQb3NpdGlvbj10aGlzLnNjYWxlKCkuc2NhbGUodGhpcy52YWx1ZSgpKTp0aGlzLl9tb2RlPT09enYuUElYRUwmJnRoaXMucGl4ZWxQb3NpdGlvbigpIT1udWxsJiYodGhpcy5fdmFsdWU9dGhpcy5zY2FsZSgpLmludmVydCh0aGlzLnBpeGVsUG9zaXRpb24oKSkpKX0sdC5wcm90b3R5cGUuX3NldFBpeGVsUG9zaXRpb25XaXRob3V0Q2hhbmdpbmdNb2RlPWZ1bmN0aW9uKHIpe3RoaXMuX3BpeGVsUG9zaXRpb249cix0aGlzLnNjYWxlKCkhPW51bGwmJih0aGlzLl92YWx1ZT10aGlzLnNjYWxlKCkuaW52ZXJ0KHRoaXMucGl4ZWxQb3NpdGlvbigpKSksdGhpcy5yZW5kZXIoKX0sdC5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fc2NhbGU7dmFyIG49dGhpcy5fc2NhbGU7cmV0dXJuIG4hPW51bGwmJm4ub2ZmVXBkYXRlKHRoaXMuX3NjYWxlVXBkYXRlQ2FsbGJhY2spLHRoaXMuX3NjYWxlPXIsdGhpcy5fc2NhbGUub25VcGRhdGUodGhpcy5fc2NhbGVVcGRhdGVDYWxsYmFjayksdGhpcy5fc3luY1BpeGVsUG9zaXRpb25BbmRWYWx1ZSgpLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUudmFsdWU9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fdmFsdWU6KHRoaXMuX3ZhbHVlPXIsdGhpcy5fbW9kZT16di5WQUxVRSx0aGlzLl9zeW5jUGl4ZWxQb3NpdGlvbkFuZFZhbHVlKCksdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUucGl4ZWxQb3NpdGlvbj1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9waXhlbFBvc2l0aW9uO2lmKCFfQmUuTWF0aC5pc1ZhbGlkTnVtYmVyKHIpKXRocm93IG5ldyBFcnJvcigicGl4ZWxQb3NpdGlvbiBtdXN0IGJlIGEgZmluaXRlIG51bWJlciIpO3JldHVybiB0aGlzLl9waXhlbFBvc2l0aW9uPXIsdGhpcy5fbW9kZT16di5QSVhFTCx0aGlzLl9zeW5jUGl4ZWxQb3NpdGlvbkFuZFZhbHVlKCksdGhpcy5yZW5kZXIoKSx0aGlzfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuc2NhbGUoKSE9bnVsbCYmdGhpcy5zY2FsZSgpLm9mZlVwZGF0ZSh0aGlzLl9zY2FsZVVwZGF0ZUNhbGxiYWNrKX0sdC5PUklFTlRBVElPTl9WRVJUSUNBTD0idmVydGljYWwiLHQuT1JJRU5UQVRJT05fSE9SSVpPTlRBTD0iaG9yaXpvbnRhbCIsdH0oeUJlLkNvbXBvbmVudCk7SW90Lkd1aWRlTGluZUxheWVyPXZCZX0pO3ZhciBJJHQ9SChSb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFJvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHhCZT0oZGUoKSxVdChwZSkpLGJCZT1Mb3QoKSx3QmU9bDQoKSxrb3Q9RmUoKSxTQmU9ZnVuY3Rpb24oZSl7eEJlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMscil8fHRoaXM7bi5fZGV0ZWN0aW9uUmFkaXVzPTMsbi5fZW5hYmxlZD0hMCxuLmFkZENsYXNzKCJkcmFnLWxpbmUtbGF5ZXIiKSxuLmFkZENsYXNzKCJlbmFibGVkIiksbi5fZHJhZ0ludGVyYWN0aW9uPW5ldyB3QmUuRHJhZyxuLl9kcmFnSW50ZXJhY3Rpb24uYXR0YWNoVG8obik7dmFyIGk9ZnVuY3Rpb24oYyl7cmV0dXJuIG4uX2lzVmVydGljYWwoKSYmbi5waXhlbFBvc2l0aW9uKCktbi5kZXRlY3Rpb25SYWRpdXMoKTw9Yy54JiZjLng8PW4ucGl4ZWxQb3NpdGlvbigpK24uZGV0ZWN0aW9uUmFkaXVzKCl8fCFuLl9pc1ZlcnRpY2FsKCkmJm4ucGl4ZWxQb3NpdGlvbigpLW4uZGV0ZWN0aW9uUmFkaXVzKCk8PWMueSYmYy55PD1uLnBpeGVsUG9zaXRpb24oKStuLmRldGVjdGlvblJhZGl1cygpfSxvPSExLGE9ZnVuY3Rpb24oYyl7aShjKSYmKG89ITAsbi5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmNhbGxDYWxsYmFja3MobikpfTtuLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnU3RhcnQoYSk7dmFyIHM9ZnVuY3Rpb24oYyx1KXtvJiYobi5fc2V0UGl4ZWxQb3NpdGlvbldpdGhvdXRDaGFuZ2luZ01vZGUobi5faXNWZXJ0aWNhbCgpP3UueDp1LnkpLG4uX2RyYWdDYWxsYmFja3MuY2FsbENhbGxiYWNrcyhuKSl9O24uX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWcocyk7dmFyIGw9ZnVuY3Rpb24oYyx1KXtvJiYobz0hMSxuLl9kcmFnRW5kQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MobikpfTtyZXR1cm4gbi5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZ0VuZChsKSxuLl9kaXNjb25uZWN0SW50ZXJhY3Rpb249ZnVuY3Rpb24oKXtuLl9kcmFnSW50ZXJhY3Rpb24ub2ZmRHJhZ1N0YXJ0KGEpLG4uX2RyYWdJbnRlcmFjdGlvbi5vZmZEcmFnKHMpLG4uX2RyYWdJbnRlcmFjdGlvbi5vZmZEcmFnRW5kKGwpLG4uX2RyYWdJbnRlcmFjdGlvbi5kZXRhY2goKX0sbi5fZHJhZ1N0YXJ0Q2FsbGJhY2tzPW5ldyBrb3QuQ2FsbGJhY2tTZXQsbi5fZHJhZ0NhbGxiYWNrcz1uZXcga290LkNhbGxiYWNrU2V0LG4uX2RyYWdFbmRDYWxsYmFja3M9bmV3IGtvdC5DYWxsYmFja1NldCxufXJldHVybiB0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl9kZXRlY3Rpb25FZGdlPXRoaXMuY29udGVudCgpLmFwcGVuZCgibGluZSIpLnN0eWxlcyh7b3BhY2l0eTowLHN0cm9rZToicGluayIsInBvaW50ZXItZXZlbnRzIjoidmlzaWJsZVN0cm9rZSJ9KS5jbGFzc2VkKCJkcmFnLWVkZ2UiLCEwKX0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtyZXR1cm4gZS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKSx0aGlzLl9kZXRlY3Rpb25FZGdlLmF0dHJzKHt4MTp0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5waXhlbFBvc2l0aW9uKCk6MCx5MTp0aGlzLl9pc1ZlcnRpY2FsKCk/MDp0aGlzLnBpeGVsUG9zaXRpb24oKSx4Mjp0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5waXhlbFBvc2l0aW9uKCk6dGhpcy53aWR0aCgpLHkyOnRoaXMuX2lzVmVydGljYWwoKT90aGlzLmhlaWdodCgpOnRoaXMucGl4ZWxQb3NpdGlvbigpLCJzdHJva2Utd2lkdGgiOnRoaXMuX2RldGVjdGlvblJhZGl1cyoyfSksdGhpc30sdC5wcm90b3R5cGUuZGV0ZWN0aW9uUmFkaXVzPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX2RldGVjdGlvblJhZGl1cztpZihyPDApdGhyb3cgbmV3IEVycm9yKCJkZXRlY3Rpb24gcmFkaXVzIGNhbm5vdCBiZSBuZWdhdGl2ZS4iKTtyZXR1cm4gdGhpcy5fZGV0ZWN0aW9uUmFkaXVzPXIsdGhpcy5yZW5kZXIoKSx0aGlzfSx0LnByb3RvdHlwZS5lbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2VuYWJsZWQ6KHRoaXMuX2VuYWJsZWQ9cixyP3RoaXMuYWRkQ2xhc3MoImVuYWJsZWQiKTp0aGlzLnJlbW92ZUNsYXNzKCJlbmFibGVkIiksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmVuYWJsZWQociksdGhpcyl9LHQucHJvdG90eXBlLm9uRHJhZ1N0YXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnU3RhcnRDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZkRyYWdTdGFydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0LnByb3RvdHlwZS5vbkRyYWc9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZkRyYWc9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLm9uRHJhZ0VuZD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ0VuZENhbGxiYWNrcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUub2ZmRHJhZ0VuZD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ0VuZENhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciByPXRoaXM7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiByLl9kcmFnU3RhcnRDYWxsYmFja3MuZGVsZXRlKG4pfSksdGhpcy5fZHJhZ0NhbGxiYWNrcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiByLl9kcmFnQ2FsbGJhY2tzLmRlbGV0ZShuKX0pLHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gci5fZHJhZ0VuZENhbGxiYWNrcy5kZWxldGUobil9KSx0aGlzLl9kaXNjb25uZWN0SW50ZXJhY3Rpb24oKX0sdH0oYkJlLkd1aWRlTGluZUxheWVyKTtSb3QuRHJhZ0xpbmVMYXllcj1TQmV9KTt2YXIgTCR0PUgoTm90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShOb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBNQmU9KGRlKCksVXQocGUpKSxFQmU9a2MoKTtmdW5jdGlvbiBHRihlLHQscil7dmFyIG49e307aWYociE9PXZvaWQgMClmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIG89cltpLTFdLGE9cltpXTtuW2FdPW99cmV0dXJuIGZ1bmN0aW9uKHMpe3ZhciBsPWUuc2NhbGUocyk7aWYoIXQpcmV0dXJuIGw7dmFyIGMsdT1uW3NdPT09dm9pZCAwP3ZvaWQgMDplLnNjYWxlKG5bc10pO3JldHVybiB1IT09dm9pZCAwJiYoYz11KyhsLXUpLzIpLGN9fXZhciBUQmU9ZnVuY3Rpb24oZSl7TUJlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocixuKXt2YXIgaT1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuYWRkQ2xhc3MoImdyaWRsaW5lcyIpLGkuX3hTY2FsZT1yLGkuX3lTY2FsZT1uLGkuX3JlbmRlckNhbGxiYWNrPWZ1bmN0aW9uKG8pe3JldHVybiBpLnJlbmRlcigpfSxpLl94U2NhbGUmJmkuX3hTY2FsZS5vblVwZGF0ZShpLl9yZW5kZXJDYWxsYmFjayksaS5feVNjYWxlJiZpLl95U2NhbGUub25VcGRhdGUoaS5fcmVuZGVyQ2FsbGJhY2spLGl9cmV0dXJuIHQucHJvdG90eXBlLmJldHdlZW5YPWZ1bmN0aW9uKHIpe3JldHVybiByPT09dm9pZCAwP3RoaXMuX2JldHdlZW5YOihyIT09dGhpcy5fYmV0d2VlblgmJih0aGlzLl9iZXR3ZWVuWD1yLHRoaXMucmVuZGVyKCkpLHRoaXMpfSx0LnByb3RvdHlwZS5iZXR3ZWVuWT1mdW5jdGlvbihyKXtyZXR1cm4gcj09PXZvaWQgMD90aGlzLl9iZXR3ZWVuWToociE9PXRoaXMuX2JldHdlZW5ZJiYodGhpcy5fYmV0d2Vlblk9cix0aGlzLnJlbmRlcigpKSx0aGlzKX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3JldHVybiBlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyksdGhpcy5feFNjYWxlJiZ0aGlzLl94U2NhbGUub2ZmVXBkYXRlKHRoaXMuX3JlbmRlckNhbGxiYWNrKSx0aGlzLl95U2NhbGUmJnRoaXMuX3lTY2FsZS5vZmZVcGRhdGUodGhpcy5fcmVuZGVyQ2FsbGJhY2spLHRoaXN9LHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX3hMaW5lc0NvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ4LWdyaWRsaW5lcyIsITApLHRoaXMuX3lMaW5lc0NvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ5LWdyaWRsaW5lcyIsITApfSx0LnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe3JldHVybiBlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpLHRoaXMuX3JlZHJhd1hMaW5lcygpLHRoaXMuX3JlZHJhd1lMaW5lcygpLHRoaXN9LHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe3JldHVybiBlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSksdGhpcy5feFNjYWxlIT1udWxsJiZ0aGlzLl94U2NhbGUucmFuZ2UoWzAsdGhpcy53aWR0aCgpXSksdGhpcy5feVNjYWxlIT1udWxsJiZ0aGlzLl95U2NhbGUucmFuZ2UoW3RoaXMuaGVpZ2h0KCksMF0pLHRoaXN9LHQucHJvdG90eXBlLl9yZWRyYXdYTGluZXM9ZnVuY3Rpb24oKXtpZih0aGlzLl94U2NhbGUpe3ZhciByPXRoaXMuYmV0d2VlblgoKSxuPXRoaXMuX3hTY2FsZS50aWNrcygpLnNsaWNlKHI/MTowKSxpPXRoaXMuX3hMaW5lc0NvbnRhaW5lci5zZWxlY3RBbGwoImxpbmUiKS5kYXRhKG4pLG89aS5lbnRlcigpLmFwcGVuZCgibGluZSIpLm1lcmdlKGkpO28uYXR0cigieDEiLEdGKHRoaXMuX3hTY2FsZSxyLHRoaXMuX3hTY2FsZS50aWNrcygpKSkuYXR0cigieTEiLDApLmF0dHIoIngyIixHRih0aGlzLl94U2NhbGUscix0aGlzLl94U2NhbGUudGlja3MoKSkpLmF0dHIoInkyIix0aGlzLmhlaWdodCgpKS5jbGFzc2VkKCJiZXR3ZWVubGluZSIscikuY2xhc3NlZCgiemVyb2xpbmUiLGZ1bmN0aW9uKGEpe3JldHVybiBhPT09MH0pLGkuZXhpdCgpLnJlbW92ZSgpfX0sdC5wcm90b3R5cGUuX3JlZHJhd1lMaW5lcz1mdW5jdGlvbigpe2lmKHRoaXMuX3lTY2FsZSl7dmFyIHI9dGhpcy5iZXR3ZWVuWSgpLG49dGhpcy5feVNjYWxlLnRpY2tzKCkuc2xpY2Uocj8xOjApLGk9dGhpcy5feUxpbmVzQ29udGFpbmVyLnNlbGVjdEFsbCgibGluZSIpLmRhdGEobiksbz1pLmVudGVyKCkuYXBwZW5kKCJsaW5lIikubWVyZ2UoaSk7by5hdHRyKCJ4MSIsMCkuYXR0cigieTEiLEdGKHRoaXMuX3lTY2FsZSxyLHRoaXMuX3lTY2FsZS50aWNrcygpKSkuYXR0cigieDIiLHRoaXMud2lkdGgoKSkuYXR0cigieTIiLEdGKHRoaXMuX3lTY2FsZSxyLHRoaXMuX3lTY2FsZS50aWNrcygpKSkuY2xhc3NlZCgiYmV0d2VlbmxpbmUiLHIpLmNsYXNzZWQoInplcm9saW5lIixmdW5jdGlvbihhKXtyZXR1cm4gYT09PTB9KSxpLmV4aXQoKS5yZW1vdmUoKX19LHR9KEVCZS5Db21wb25lbnQpO05vdC5HcmlkbGluZXM9VEJlfSk7dmFyIFdGPUgoRG90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBDQmU9KGRlKCksVXQocGUpKSxBQmU9amcoKSxQQmU9a2MoKSxJQmU9ZnVuY3Rpb24oZSl7Q0JlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2RldGFjaENhbGxiYWNrPWZ1bmN0aW9uKG4pe3JldHVybiByLnJlbW92ZShuKX0scn1yZXR1cm4gdC5wcm90b3R5cGUuYW5jaG9yPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIHI9QUJlLmNvZXJjZUV4dGVybmFsRDMociksZS5wcm90b3R5cGUuYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uKGkpe3JldHVybiBpLmFuY2hvcihuLmVsZW1lbnQoKSl9KSx0aGlzfSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm9yRWFjaChmdW5jdGlvbihyKXtyZXR1cm4gci5yZW5kZXIoKX0pLHRoaXN9LHQucHJvdG90eXBlLmhhcz1mdW5jdGlvbihyKXt0aHJvdyBuZXcgRXJyb3IoImhhcygpIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiBDb21wb25lbnRDb250YWluZXIiKX0sdC5wcm90b3R5cGUuX2Fkb3B0QW5kQW5jaG9yPWZ1bmN0aW9uKHIpe3IucGFyZW50KHRoaXMpLHIub25EZXRhY2godGhpcy5fZGV0YWNoQ2FsbGJhY2spLHRoaXMuX2lzQW5jaG9yZWQmJnIuYW5jaG9yKHRoaXMuZWxlbWVudCgpKX0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLmhhcyhyKSYmKHIub2ZmRGV0YWNoKHRoaXMuX2RldGFjaENhbGxiYWNrKSx0aGlzLl9yZW1vdmUociksci5kZXRhY2goKSx0aGlzLnJlZHJhdygpKSx0aGlzfSx0LnByb3RvdHlwZS5fcmVtb3ZlPWZ1bmN0aW9uKHIpe3JldHVybiExfSx0LnByb3RvdHlwZS5fZm9yRWFjaD1mdW5jdGlvbihyKXt0aHJvdyBuZXcgRXJyb3IoIl9mb3JFYWNoKCkgaXMgbm90IGltcGxlbWVudGVkIG9uIENvbXBvbmVudENvbnRhaW5lciIpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX2ZvckVhY2goZnVuY3Rpb24ocil7cmV0dXJuIHIuZGVzdHJveSgpfSl9LHQucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZT1mdW5jdGlvbigpe3RoaXMuX2ZvckVhY2goZnVuY3Rpb24ocil7cmV0dXJuIHIuaW52YWxpZGF0ZUNhY2hlKCl9KX0sdH0oUEJlLkNvbXBvbmVudCk7RG90LkNvbXBvbmVudENvbnRhaW5lcj1JQmV9KTt2YXIgem90PUgoT290PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBMQmU9KGRlKCksVXQocGUpKSxrJHQ9RmUoKSxrQmU9V0YoKSxSQmU9ZnVuY3Rpb24oZSl7TEJlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9W10pO3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fY29tcG9uZW50cz1bXSxuLmFkZENsYXNzKCJjb21wb25lbnQtZ3JvdXAiKSxyLmZvckVhY2goZnVuY3Rpb24oaSl7cmV0dXJuIG4uYXBwZW5kKGkpfSksbn1yZXR1cm4gdC5wcm90b3R5cGUuX2ZvckVhY2g9ZnVuY3Rpb24ocil7dGhpcy5jb21wb25lbnRzKCkuZm9yRWFjaChyKX0sdC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9jb21wb25lbnRzLmluZGV4T2Yocik+PTB9LHQucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5fY29tcG9uZW50cy5tYXAoZnVuY3Rpb24obyl7cmV0dXJuIG8ucmVxdWVzdGVkU3BhY2UocixuKX0pO3JldHVybnttaW5XaWR0aDprJHQuTWF0aC5tYXgoaSxmdW5jdGlvbihvKXtyZXR1cm4gby5taW5XaWR0aH0sMCksbWluSGVpZ2h0OmskdC5NYXRoLm1heChpLGZ1bmN0aW9uKG8pe3JldHVybiBvLm1pbkhlaWdodH0sMCl9fSx0LnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PWZ1bmN0aW9uKHIsbixpKXt2YXIgbz10aGlzO3JldHVybiBlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSksdGhpcy5fZm9yRWFjaChmdW5jdGlvbihhKXthLmNvbXB1dGVMYXlvdXQoe3g6MCx5OjB9LG8ud2lkdGgoKSxvLmhlaWdodCgpKX0pLHRoaXN9LHQucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHIsbil7cmV0dXJue3dpZHRoOnIsaGVpZ2h0Om59fSx0LnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbXBvbmVudHMuZXZlcnkoZnVuY3Rpb24ocil7cmV0dXJuIHIuZml4ZWRXaWR0aCgpfSl9LHQucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbXBvbmVudHMuZXZlcnkoZnVuY3Rpb24ocil7cmV0dXJuIHIuZml4ZWRIZWlnaHQoKX0pfSx0LnByb3RvdHlwZS5jb21wb25lbnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbXBvbmVudHMuc2xpY2UoKX0sdC5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKHIpe3JldHVybiByIT1udWxsJiYhdGhpcy5oYXMocikmJihyLmRldGFjaCgpLHRoaXMuX2NvbXBvbmVudHMucHVzaChyKSx0aGlzLl9hZG9wdEFuZEFuY2hvcihyKSx0aGlzLnJlZHJhdygpKSx0aGlzfSx0LnByb3RvdHlwZS5fcmVtb3ZlPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX2NvbXBvbmVudHMuaW5kZXhPZihyKTtyZXR1cm4gbj49MD8odGhpcy5fY29tcG9uZW50cy5zcGxpY2UobiwxKSwhMCk6ITF9LHR9KGtCZS5Db21wb25lbnRDb250YWluZXIpO09vdC5Hcm91cD1SQmV9KTt2YXIgUiR0PUgoRm90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBOQmU9KGRlKCksVXQocGUpKSxZRj15bCgpLERCZT0kQSgpLE9CZT1CdSgpLHpCZT1GZSgpLEZCZT1rYygpLEJCZT1mdW5jdGlvbihlKXtOQmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyKXt2YXIgbj1lLmNhbGwodGhpcyl8fHRoaXM7aWYobi5fdGV4dFBhZGRpbmc9NSxyPT1udWxsKXRocm93IG5ldyBFcnJvcigiSW50ZXJwb2xhdGVkQ29sb3JMZWdlbmQgcmVxdWlyZXMgYSBpbnRlcnBvbGF0ZWRDb2xvclNjYWxlIik7cmV0dXJuIG4uX3NjYWxlPXIsbi5fcmVkcmF3Q2FsbGJhY2s9ZnVuY3Rpb24oaSl7cmV0dXJuIG4ucmVkcmF3KCl9LG4uX3NjYWxlLm9uVXBkYXRlKG4uX3JlZHJhd0NhbGxiYWNrKSxuLl9mb3JtYXR0ZXI9T0JlLmdlbmVyYWwoKSxuLl9vcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIsbi5fZXhwYW5kcz0hMSxuLmFkZENsYXNzKCJsZWdlbmQiKSxuLmFkZENsYXNzKCJpbnRlcnBvbGF0ZWQtY29sb3ItbGVnZW5kIiksbn1yZXR1cm4gdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2UucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLl9zY2FsZS5vZmZVcGRhdGUodGhpcy5fcmVkcmF3Q2FsbGJhY2spfSx0LnByb3RvdHlwZS5mb3JtYXR0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PT12b2lkIDA/dGhpcy5fZm9ybWF0dGVyOih0aGlzLl9mb3JtYXR0ZXI9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5leHBhbmRzPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2V4cGFuZHM6KHRoaXMuX2V4cGFuZHM9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0Ll9lbnN1cmVPcmllbnRhdGlvbj1mdW5jdGlvbihyKXtpZihyPXIudG9Mb3dlckNhc2UoKSxyPT09Imhvcml6b250YWwifHxyPT09ImxlZnQifHxyPT09InJpZ2h0IilyZXR1cm4gcjt0aHJvdyBuZXcgRXJyb3IoJyInK3IrJyIgaXMgbm90IGEgdmFsaWQgb3JpZW50YXRpb24gZm9yIEludGVycG9sYXRlZENvbG9yTGVnZW5kJyl9LHQucHJvdG90eXBlLm9yaWVudGF0aW9uPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX29yaWVudGF0aW9uOih0aGlzLl9vcmllbnRhdGlvbj10Ll9lbnN1cmVPcmllbnRhdGlvbihyKSx0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZXhwYW5kcygpfHx0aGlzLl9pc1ZlcnRpY2FsKCl9LHQucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZXhwYW5kcygpfHwhdGhpcy5faXNWZXJ0aWNhbCgpfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVUaWNrcz1mdW5jdGlvbihyKXtyPT09dm9pZCAwJiYocj10Ll9ERUZBVUxUX05VTV9TV0FUQ0hFUyk7dmFyIG49dGhpcy5fc2NhbGUuZG9tYWluKCk7aWYocj09PTEpcmV0dXJuW25bMF1dO2Zvcih2YXIgaT0oblsxXS1uWzBdKS8oci0xKSxvPVtdLGE9MDthPHI7YSsrKW8ucHVzaChuWzBdK2kqYSk7cmV0dXJuIG99LHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX3N3YXRjaENvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJzd2F0Y2gtY29udGFpbmVyIiwhMCksdGhpcy5fc3dhdGNoQm91bmRpbmdCb3g9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgic3dhdGNoLWJvdW5kaW5nLWJveCIsITApLHRoaXMuX2xvd2VyTGFiZWw9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCh0LkxFR0VORF9MQUJFTF9DTEFTUywhMCksdGhpcy5fdXBwZXJMYWJlbD10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKHQuTEVHRU5EX0xBQkVMX0NMQVNTLCEwKTt2YXIgcj1uZXcgWUYuU3ZnQ29udGV4dCh0aGlzLmNvbnRlbnQoKS5ub2RlKCkpO3RoaXMuX21lYXN1cmVyPW5ldyBZRi5NZWFzdXJlcihyKSx0aGlzLl93cmFwcGVyPW5ldyBZRi5XcmFwcGVyLHRoaXMuX3dyaXRlcj1uZXcgWUYuV3JpdGVyKHRoaXMuX21lYXN1cmVyLHIsdGhpcy5fd3JhcHBlcil9LHQucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcyxvPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQsYT1vLHM9dGhpcy5fc2NhbGUuZG9tYWluKCksbD1zLm1hcChmdW5jdGlvbihwKXtyZXR1cm4gaS5fbWVhc3VyZXIubWVhc3VyZShpLl9mb3JtYXR0ZXIocCkpLndpZHRofSksYyx1LGg9dC5fREVGQVVMVF9OVU1fU1dBVENIRVM7aWYodGhpcy5faXNWZXJ0aWNhbCgpKXt2YXIgZj16QmUuTWF0aC5tYXgobCwwKTt1PWErbyt0aGlzLl90ZXh0UGFkZGluZytmK3RoaXMuX3RleHRQYWRkaW5nLGM9aCpvfWVsc2UgYz1hK28rYSx1PXRoaXMuX3RleHRQYWRkaW5nK2xbMF0raCpvK2xbMV0rdGhpcy5fdGV4dFBhZGRpbmc7cmV0dXJue21pbldpZHRoOnUsbWluSGVpZ2h0OmN9fSx0LnByb3RvdHlwZS5faXNWZXJ0aWNhbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9vcmllbnRhdGlvbiE9PSJob3Jpem9udGFsIn0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO2UucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyk7dmFyIG49dGhpcy5fc2NhbGUuZG9tYWluKCksaT10aGlzLl9mb3JtYXR0ZXIoblswXSksbz10aGlzLl9tZWFzdXJlci5tZWFzdXJlKGkpLndpZHRoLGE9dGhpcy5fZm9ybWF0dGVyKG5bMV0pLHM9dGhpcy5fbWVhc3VyZXIubWVhc3VyZShhKS53aWR0aCxsPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQsYz10aGlzLl90ZXh0UGFkZGluZyx1PXt4OjAseTowfSxoPXt4OjAseTowfSxmPXt4QWxpZ246ImNlbnRlciIseUFsaWduOiJjZW50ZXIiLHRleHRSb3RhdGlvbjowfSxwPXt4QWxpZ246ImNlbnRlciIseUFsaWduOiJjZW50ZXIiLHRleHRSb3RhdGlvbjowfSxkLGcsXyx5LHg9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH0sYixTO2lmKHRoaXMuX2lzVmVydGljYWwoKSl7Uz1NYXRoLmZsb29yKHRoaXMuaGVpZ2h0KCkpO3ZhciBDPU1hdGgubWF4KG8scyk7Yj0odGhpcy53aWR0aCgpLUMtMip0aGlzLl90ZXh0UGFkZGluZykvMixkPU1hdGgubWF4KHRoaXMud2lkdGgoKS1iLTIqYy1DLDApLGc9MSx5PWZ1bmN0aW9uKEwsUil7cmV0dXJuIHIuaGVpZ2h0KCktKFIrMSl9LHAueUFsaWduPSJ0b3AiLHUueT0wLGYueUFsaWduPSJib3R0b20iLGgueT0wLHRoaXMuX29yaWVudGF0aW9uPT09ImxlZnQiPyhfPWZ1bmN0aW9uKEwsUil7cmV0dXJuIGMrQytjfSxwLnhBbGlnbj0icmlnaHQiLHUueD0tKGIrZCtjKSxmLnhBbGlnbj0icmlnaHQiLGgueD0tKGIrZCtjKSk6KF89ZnVuY3Rpb24oTCxSKXtyZXR1cm4gYn0scC54QWxpZ249ImxlZnQiLHUueD1iK2QrYyxmLnhBbGlnbj0ibGVmdCIsaC54PWIrZCtjKSx4LndpZHRoPWQseC5oZWlnaHQ9UypnfWVsc2UgYj1NYXRoLm1heChjLCh0aGlzLmhlaWdodCgpLWwpLzIpLFM9TWF0aC5tYXgoTWF0aC5mbG9vcih0aGlzLndpZHRoKCktYyo0LW8tcyksMCksZD0xLGc9TWF0aC5tYXgodGhpcy5oZWlnaHQoKS0yKmIsMCksXz1mdW5jdGlvbihMLFIpe3JldHVybiBNYXRoLmZsb29yKG8rMipjKStSfSx5PWZ1bmN0aW9uKEwsUil7cmV0dXJuIGJ9LHAueEFsaWduPSJyaWdodCIsdS54PS1jLGYueEFsaWduPSJsZWZ0IixoLng9Yyx4Lnk9Yix4LndpZHRoPVMqZCx4LmhlaWdodD1nO3gueD1fKG51bGwsMCksdGhpcy5fdXBwZXJMYWJlbC50ZXh0KCIiKSx0aGlzLl93cml0ZXIud3JpdGUoYSx0aGlzLndpZHRoKCksdGhpcy5oZWlnaHQoKSxwLHRoaXMuX3VwcGVyTGFiZWwubm9kZSgpKTt2YXIgUD0idHJhbnNsYXRlKCIrdS54KyIsICIrdS55KyIpIjt0aGlzLl91cHBlckxhYmVsLmF0dHIoInRyYW5zZm9ybSIsUCksdGhpcy5fbG93ZXJMYWJlbC50ZXh0KCIiKSx0aGlzLl93cml0ZXIud3JpdGUoaSx0aGlzLndpZHRoKCksdGhpcy5oZWlnaHQoKSxmLHRoaXMuX2xvd2VyTGFiZWwubm9kZSgpKTt2YXIgaz0idHJhbnNsYXRlKCIraC54KyIsICIraC55KyIpIjt0aGlzLl9sb3dlckxhYmVsLmF0dHIoInRyYW5zZm9ybSIsayksdGhpcy5fc3dhdGNoQm91bmRpbmdCb3guYXR0cnMoeCk7dmFyIE89dGhpcy5fZ2VuZXJhdGVUaWNrcyhTKSxEPXRoaXMuX3N3YXRjaENvbnRhaW5lci5zZWxlY3RBbGwoInJlY3Quc3dhdGNoIikuZGF0YShPKSxCPUQuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJzd2F0Y2giLCEwKSxJPUQubWVyZ2UoQik7cmV0dXJuIEQuZXhpdCgpLnJlbW92ZSgpLEkuYXR0cnMoe2ZpbGw6ZnVuY3Rpb24oTCxSKXtyZXR1cm4gci5fc2NhbGUuc2NhbGUoTCl9LHdpZHRoOmQsaGVpZ2h0OmcseDpfLHksInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSksREJlLkFERF9USVRMRV9FTEVNRU5UUyYmQi5hcHBlbmQoInRpdGxlIikudGV4dChmdW5jdGlvbihMKXtyZXR1cm4gci5fZm9ybWF0dGVyKEwpfSksdGhpc30sdC5fREVGQVVMVF9OVU1fU1dBVENIRVM9MTEsdC5MRUdFTkRfTEFCRUxfQ0xBU1M9ImxlZ2VuZC1sYWJlbCIsdH0oRkJlLkNvbXBvbmVudCk7Rm90LkludGVycG9sYXRlZENvbG9yTGVnZW5kPUJCZX0pO3ZhciBWb3Q9SChoND0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaDQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBCb3Q9KGRlKCksVXQocGUpKSxqRj15bCgpLEhCZT1rYygpLEhvdD1mdW5jdGlvbihlKXtCb3QuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyLG4pe3I9PT12b2lkIDAmJihyPSIiKSxuPT09dm9pZCAwJiYobj0wKTt2YXIgaT1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuYWRkQ2xhc3MoImxhYmVsIiksaS50ZXh0KHIpLGkuYW5nbGUobiksaS54QWxpZ25tZW50KCJjZW50ZXIiKS55QWxpZ25tZW50KCJjZW50ZXIiKSxpLl9wYWRkaW5nPTAsaX1yZXR1cm4gdC5wcm90b3R5cGUucmVxdWVzdGVkU3BhY2U9ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLl9tZWFzdXJlci5tZWFzdXJlKHRoaXMuX3RleHQpLG89KHRoaXMuYW5nbGUoKT09PTA/aS53aWR0aDppLmhlaWdodCkrMip0aGlzLnBhZGRpbmcoKSxhPSh0aGlzLmFuZ2xlKCk9PT0wP2kuaGVpZ2h0Omkud2lkdGgpKzIqdGhpcy5wYWRkaW5nKCk7cmV0dXJue21pbldpZHRoOm8sbWluSGVpZ2h0OmF9fSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl90ZXh0Q29udGFpbmVyPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpO3ZhciByPW5ldyBqRi5TdmdDb250ZXh0KHRoaXMuX3RleHRDb250YWluZXIubm9kZSgpKTt0aGlzLl9tZWFzdXJlcj1uZXcgakYuQ2FjaGVNZWFzdXJlcihyKSx0aGlzLl93cmFwcGVyPW5ldyBqRi5XcmFwcGVyLHRoaXMuX3dyaXRlcj1uZXcgakYuV3JpdGVyKHRoaXMuX21lYXN1cmVyLHIsdGhpcy5fd3JhcHBlciksdGhpcy50ZXh0KHRoaXMuX3RleHQpfSx0LnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3RleHQ7aWYodHlwZW9mIHIhPSJzdHJpbmciKXRocm93IG5ldyBFcnJvcigiTGFiZWwudGV4dCgpIG9ubHkgdGFrZXMgc3RyaW5ncyBhcyBpbnB1dCIpO3JldHVybiB0aGlzLl90ZXh0PXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5hbmdsZT1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9hbmdsZTtpZihyJT0zNjAscj4xODA/ci09MzYwOnI8LTE4MCYmKHIrPTM2MCkscj09PS05MHx8cj09PTB8fHI9PT05MCl0aGlzLl9hbmdsZT1yO2Vsc2UgdGhyb3cgbmV3IEVycm9yKHIrIiBpcyBub3QgYSB2YWxpZCBhbmdsZSBmb3IgTGFiZWwiKTtyZXR1cm4gdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5wYWRkaW5nPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3BhZGRpbmc7aWYocj0rcixyPDApdGhyb3cgbmV3IEVycm9yKHIrIiBpcyBub3QgYSB2YWxpZCBwYWRkaW5nIHZhbHVlLiBDYW5ub3QgYmUgbGVzcyB0aGFuIDAuIik7cmV0dXJuIHRoaXMuX3BhZGRpbmc9cix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpLHRoaXMuX3RleHRDb250YWluZXIuc2VsZWN0QWxsKCJnIikucmVtb3ZlKCk7dmFyIHI9dGhpcy5fbWVhc3VyZXIubWVhc3VyZSh0aGlzLl90ZXh0KSxuPU1hdGgubWF4KE1hdGgubWluKCh0aGlzLmhlaWdodCgpLXIuaGVpZ2h0KS8yLHRoaXMucGFkZGluZygpKSwwKSxpPU1hdGgubWF4KE1hdGgubWluKCh0aGlzLndpZHRoKCktci53aWR0aCkvMix0aGlzLnBhZGRpbmcoKSksMCk7dGhpcy5fdGV4dENvbnRhaW5lci5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitpKyIsIituKyIpIik7dmFyIG89dGhpcy53aWR0aCgpLTIqaSxhPXRoaXMuaGVpZ2h0KCktMipuLHM9e3hBbGlnbjp0aGlzLnhBbGlnbm1lbnQoKSx5QWxpZ246dGhpcy55QWxpZ25tZW50KCksdGV4dFJvdGF0aW9uOnRoaXMuYW5nbGUoKX07cmV0dXJuIHRoaXMuX3dyaXRlci53cml0ZSh0aGlzLl90ZXh0LG8sYSxzKSx0aGlzfSx0LnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGU9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGUuY2FsbCh0aGlzKSx0aGlzLl9tZWFzdXJlci5yZXNldCgpfSx0fShIQmUuQ29tcG9uZW50KTtoNC5MYWJlbD1Ib3Q7dmFyIFZCZT1mdW5jdGlvbihlKXtCb3QuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyLG4pe3ZhciBpPWUuY2FsbCh0aGlzLHIsbil8fHRoaXM7cmV0dXJuIGkuYWRkQ2xhc3ModC5USVRMRV9MQUJFTF9DTEFTUyksaX1yZXR1cm4gdC5USVRMRV9MQUJFTF9DTEFTUz0idGl0bGUtbGFiZWwiLHR9KEhvdCk7aDQuVGl0bGVMYWJlbD1WQmU7dmFyIFVCZT1mdW5jdGlvbihlKXtCb3QuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyLG4pe3ZhciBpPWUuY2FsbCh0aGlzLHIsbil8fHRoaXM7cmV0dXJuIGkuYWRkQ2xhc3ModC5BWElTX0xBQkVMX0NMQVNTKSxpfXJldHVybiB0LkFYSVNfTEFCRUxfQ0xBU1M9ImF4aXMtbGFiZWwiLHR9KEhvdCk7aDQuQXhpc0xhYmVsPVVCZX0pO3ZhciBYRj1IKHdkPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh3ZCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIE5zPShFcigpLFV0KE1yKSk7ZnVuY3Rpb24gcUJlKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBOcy5zeW1ib2woKS50eXBlKE5zLnN5bWJvbENpcmNsZSkuc2l6ZShNYXRoLlBJKk1hdGgucG93KGUvMiwyKSl9fXdkLmNpcmNsZT1xQmU7ZnVuY3Rpb24gR0JlKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBOcy5zeW1ib2woKS50eXBlKE5zLnN5bWJvbFNxdWFyZSkuc2l6ZShNYXRoLnBvdyhlLDIpKX19d2Quc3F1YXJlPUdCZTtmdW5jdGlvbiBXQmUoKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIE5zLnN5bWJvbCgpLnR5cGUoTnMuc3ltYm9sQ3Jvc3MpLnNpemUoNS85Kk1hdGgucG93KGUsMikpfX13ZC5jcm9zcz1XQmU7ZnVuY3Rpb24gWUJlKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBOcy5zeW1ib2woKS50eXBlKE5zLnN5bWJvbERpYW1vbmQpLnNpemUoTWF0aC50YW4oTWF0aC5QSS82KSpNYXRoLnBvdyhlLDIpLzIpfX13ZC5kaWFtb25kPVlCZTtmdW5jdGlvbiBqQmUoKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIE5zLnN5bWJvbCgpLnR5cGUoTnMuc3ltYm9sVHJpYW5nbGUpLnNpemUoTWF0aC5zcXJ0KDMpKk1hdGgucG93KGUvMiwyKSl9fXdkLnRyaWFuZ2xlPWpCZTt2YXIgWEJlPS44OTA4MTMwOTE1MjkyODUyO2Z1bmN0aW9uICRCZSgpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gTnMuc3ltYm9sKCkudHlwZShOcy5zeW1ib2xTdGFyKS5zaXplKFhCZSpNYXRoLnBvdyhlLzIsMikpfX13ZC5zdGFyPSRCZTt2YXIgS0JlPSgxL01hdGguc3FydCgxMikvMisxKSozO2Z1bmN0aW9uIFpCZSgpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gTnMuc3ltYm9sKCkudHlwZShOcy5zeW1ib2xXeWUpLnNpemUoS0JlKk1hdGgucG93KGUvMi40LDIpKX19d2Qud3llPVpCZX0pO3ZhciBOJHQ9SChxb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHFvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEpCZT0oZGUoKSxVdChwZSkpLEZ2PShFcigpLFV0KE1yKSksJEY9eWwoKSxRQmU9JEEoKSx0SGU9QnUoKSxlSGU9WEYoKSxRZz1GZSgpLHJIZT1rYygpLFVvdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe3Q9PT12b2lkIDAmJih0PVtdKSxyPT09dm9pZCAwJiYocj0wKSxuPT09dm9pZCAwJiYobj0xLzApLHRoaXMuY29sdW1ucz10LHRoaXMuYm90dG9tUGFkZGluZz1yLHRoaXMubWF4V2lkdGg9bn1yZXR1cm4gZS5wcm90b3R5cGUuYWRkQ29sdW1uPWZ1bmN0aW9uKHQpe3ZhciByPXQud2lkdGgsbj10aGlzLmdldFdpZHRoQXZhaWxhYmxlKCk7dC53aWR0aD1NYXRoLm1pbihuLHIpLHRoaXMuY29sdW1ucy5wdXNoKHQpfSxlLnByb3RvdHlwZS5nZXRCb3VuZHM9ZnVuY3Rpb24odCl7Zm9yKHZhciByPXRoaXMuY29sdW1uc1t0XSxuPTAsaT0wO2k8dDtpKyspbis9dGhpcy5jb2x1bW5zW2ldLndpZHRoO3JldHVybnt0b3BMZWZ0Ont4Om4seTowfSxib3R0b21SaWdodDp7eDpuK3Iud2lkdGgseTpyLmhlaWdodH19fSxlLnByb3RvdHlwZS5nZXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gUWcuTWF0aC5tYXgodGhpcy5jb2x1bW5zLm1hcChmdW5jdGlvbih0KXt2YXIgcj10LmhlaWdodDtyZXR1cm4gcn0pLDApK3RoaXMuYm90dG9tUGFkZGluZ30sZS5wcm90b3R5cGUuZ2V0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5taW4odGhpcy5jb2x1bW5zLnJlZHVjZShmdW5jdGlvbih0LHIpe3ZhciBuPXIud2lkdGg7cmV0dXJuIHQrbn0sMCksdGhpcy5tYXhXaWR0aCl9LGUucHJvdG90eXBlLmdldFdpZHRoQXZhaWxhYmxlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRXaWR0aCgpO3JldHVybiBNYXRoLm1heCh0aGlzLm1heFdpZHRoLXQsMCl9LGV9KCksbkhlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbixpKXt0PT09dm9pZCAwJiYodD0xLzApLHI9PT12b2lkIDAmJihyPTEvMCksbj09PXZvaWQgMCYmKG49MCksaT09PXZvaWQgMCYmKGk9W10pLHRoaXMubWF4V2lkdGg9dCx0aGlzLm1heEhlaWdodD1yLHRoaXMucGFkZGluZz1uLHRoaXMucm93cz1pfXJldHVybiBlLnByb3RvdHlwZS5hZGRSb3c9ZnVuY3Rpb24odCl7dC5tYXhXaWR0aD10aGlzLm1heFdpZHRoLXRoaXMucGFkZGluZyoyLHRoaXMucm93cy5wdXNoKHQpfSxlLnByb3RvdHlwZS5nZXRDb2x1bW5Cb3VuZHM9ZnVuY3Rpb24odCxyKXt2YXIgbj10aGlzLmdldFJvd0JvdW5kcyh0KSxpPXRoaXMucm93c1t0XS5nZXRCb3VuZHMocik7cmV0dXJuIGkudG9wTGVmdC54Kz1uLnRvcExlZnQueCxpLmJvdHRvbVJpZ2h0LngrPW4udG9wTGVmdC54LGkudG9wTGVmdC55Kz1uLnRvcExlZnQueSxpLmJvdHRvbVJpZ2h0LnkrPW4udG9wTGVmdC55LGl9LGUucHJvdG90eXBlLmdldFJvd0JvdW5kcz1mdW5jdGlvbih0KXtmb3IodmFyIHI9dGhpcy5wYWRkaW5nLG49dGhpcy5wYWRkaW5nLGk9MDtpPHQ7aSsrKW4rPXRoaXMucm93c1tpXS5nZXRIZWlnaHQoKTt2YXIgbz17dG9wTGVmdDp7eDpyLHk6bn0sYm90dG9tUmlnaHQ6e3g6cit0aGlzLnJvd3NbdF0uZ2V0V2lkdGgoKSx5Om4rdGhpcy5yb3dzW3RdLmdldEhlaWdodCgpfX07cmV0dXJuIG99LGUucHJvdG90eXBlLmdldEhlaWdodD1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1pbih0aGlzLnJvd3MucmVkdWNlKGZ1bmN0aW9uKHQscil7cmV0dXJuIHQrci5nZXRIZWlnaHQoKX0sMCkrdGhpcy5wYWRkaW5nKjIsdGhpcy5tYXhIZWlnaHQpfSxlLnByb3RvdHlwZS5nZXRXaWR0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1pbihRZy5NYXRoLm1heCh0aGlzLnJvd3MubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFdpZHRoKCl9KSwwKSt0aGlzLnBhZGRpbmcqMix0aGlzLm1heFdpZHRoKX0sZX0oKSxpSGU9ZnVuY3Rpb24oZSl7SkJlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO2lmKG4uX3BhZGRpbmc9NSxuLl9yb3dCb3R0b21QYWRkaW5nPTMsbi5hZGRDbGFzcygibGVnZW5kIiksbi5tYXhFbnRyaWVzUGVyUm93KDEpLHI9PW51bGwpdGhyb3cgbmV3IEVycm9yKCJMZWdlbmQgcmVxdWlyZXMgYSBjb2xvclNjYWxlIik7cmV0dXJuIG4uX2NvbG9yU2NhbGU9cixuLl9yZWRyYXdDYWxsYmFjaz1mdW5jdGlvbihpKXtyZXR1cm4gbi5yZWRyYXcoKX0sbi5fY29sb3JTY2FsZS5vblVwZGF0ZShuLl9yZWRyYXdDYWxsYmFjayksbi5fZm9ybWF0dGVyPXRIZS5pZGVudGl0eSgpLG4ubWF4TGluZXNQZXJFbnRyeSgxKSxuLnhBbGlnbm1lbnQoInJpZ2h0IikueUFsaWdubWVudCgidG9wIiksbi5jb21wYXJhdG9yKGZ1bmN0aW9uKGksbyl7dmFyIGE9bi5fY29sb3JTY2FsZS5kb21haW4oKS5zbGljZSgpLm1hcChmdW5jdGlvbihzKXtyZXR1cm4gbi5fZm9ybWF0dGVyKHMpfSk7cmV0dXJuIGEuaW5kZXhPZihpKS1hLmluZGV4T2Yobyl9KSxuLl9zeW1ib2xGYWN0b3J5QWNjZXNzb3I9ZnVuY3Rpb24oKXtyZXR1cm4gZUhlLmNpcmNsZSgpfSxuLl9zeW1ib2xPcGFjaXR5QWNjZXNzb3I9ZnVuY3Rpb24oKXtyZXR1cm4gMX0sbn1yZXR1cm4gdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyk7dmFyIHI9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCh0LkxFR0VORF9ST1dfQ0xBU1MsITApLG49ci5hcHBlbmQoImciKS5jbGFzc2VkKHQuTEVHRU5EX0VOVFJZX0NMQVNTLCEwKTtuLmFwcGVuZCgidGV4dCIpO3ZhciBpPW5ldyAkRi5TdmdDb250ZXh0KHIubm9kZSgpLG51bGwsUUJlLkFERF9USVRMRV9FTEVNRU5UUyk7dGhpcy5fbWVhc3VyZXI9bmV3ICRGLkNhY2hlTWVhc3VyZXIoaSksdGhpcy5fd3JhcHBlcj1uZXcgJEYuV3JhcHBlcigpLm1heExpbmVzKHRoaXMubWF4TGluZXNQZXJFbnRyeSgpKSx0aGlzLl93cml0ZXI9bmV3ICRGLldyaXRlcih0aGlzLl9tZWFzdXJlcixpLHRoaXMuX3dyYXBwZXIpfSx0LnByb3RvdHlwZS5mb3JtYXR0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZm9ybWF0dGVyOih0aGlzLl9mb3JtYXR0ZXI9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5tYXhFbnRyaWVzUGVyUm93PWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX21heEVudHJpZXNQZXJSb3c6KHRoaXMuX21heEVudHJpZXNQZXJSb3c9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5tYXhMaW5lc1BlckVudHJ5PWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX21heExpbmVzUGVyRW50cnk6KHRoaXMuX21heExpbmVzUGVyRW50cnk9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5tYXhXaWR0aD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9tYXhXaWR0aDoodGhpcy5fbWF4V2lkdGg9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5jb21wYXJhdG9yPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2NvbXBhcmF0b3I6KHRoaXMuX2NvbXBhcmF0b3I9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5jb2xvclNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiByIT1udWxsPyh0aGlzLl9jb2xvclNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9yZWRyYXdDYWxsYmFjayksdGhpcy5fY29sb3JTY2FsZT1yLHRoaXMuX2NvbG9yU2NhbGUub25VcGRhdGUodGhpcy5fcmVkcmF3Q2FsbGJhY2spLHRoaXMucmVkcmF3KCksdGhpcyk6dGhpcy5fY29sb3JTY2FsZX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2UucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLl9jb2xvclNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9yZWRyYXdDYWxsYmFjayl9LHQucHJvdG90eXBlLl9idWlsZExlZ2VuZFRhYmxlPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcyxvPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQsYT1uZXcgbkhlKHIsbix0aGlzLl9wYWRkaW5nKSxzPXRoaXMuX2NvbG9yU2NhbGUuZG9tYWluKCkuc2xpY2UoKS5zb3J0KGZ1bmN0aW9uKGMsdSl7cmV0dXJuIGkuX2NvbXBhcmF0b3IoaS5fZm9ybWF0dGVyKGMpLGkuX2Zvcm1hdHRlcih1KSl9KSxsPW5ldyBVb3Q7cmV0dXJuIGEuYWRkUm93KGwpLGwuYm90dG9tUGFkZGluZz10aGlzLl9yb3dCb3R0b21QYWRkaW5nLHMuZm9yRWFjaChmdW5jdGlvbihjLHUpe2wuY29sdW1ucy5sZW5ndGgvMj09PWkubWF4RW50cmllc1BlclJvdygpJiYobD1uZXcgVW90LGwuYm90dG9tUGFkZGluZz1pLl9yb3dCb3R0b21QYWRkaW5nLGEuYWRkUm93KGwpKTt2YXIgaD1sLmdldFdpZHRoQXZhaWxhYmxlKCksZj1pLl9mb3JtYXR0ZXIoYykscD1pLl9tZWFzdXJlci5tZWFzdXJlKGYpLndpZHRoLGQ9aC1vLXA8MDtkJiZsLmNvbHVtbnMubGVuZ3RoPjEmJihsPW5ldyBVb3QsbC5ib3R0b21QYWRkaW5nPWkuX3Jvd0JvdHRvbVBhZGRpbmcsYS5hZGRSb3cobCkpO3ZhciBnPXt3aWR0aDpvLGhlaWdodDpvLGRhdGE6e25hbWU6Yyx0eXBlOiJzeW1ib2wifX07bC5hZGRDb2x1bW4oZyksaD1sLmdldFdpZHRoQXZhaWxhYmxlKCk7dmFyIF89TWF0aC5taW4oaCxwKTtpLl93cmFwcGVyLm1heExpbmVzKGkubWF4TGluZXNQZXJFbnRyeSgpKTt2YXIgeT1pLl93cmFwcGVyLndyYXAoZixpLl9tZWFzdXJlcixfKS5ub0xpbmVzLHg9eSpvLGI9e3dpZHRoOl8saGVpZ2h0OngsZGF0YTp7bmFtZTpjLHR5cGU6InRleHQifX07bC5hZGRDb2x1bW4oYil9KSxhfSx0LnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX2J1aWxkTGVnZW5kVGFibGUoUWcuTWF0aC5taW4oW3RoaXMubWF4V2lkdGgoKSxyXSxyKSxuKTtyZXR1cm57bWluSGVpZ2h0OmkuZ2V0SGVpZ2h0KCksbWluV2lkdGg6aS5nZXRXaWR0aCgpfX0sdC5wcm90b3R5cGUuZW50aXRpZXNBdD1mdW5jdGlvbihyKXt2YXIgbj10aGlzO2lmKCF0aGlzLl9pc1NldHVwKXJldHVybltdO3ZhciBpPXRoaXMuX2J1aWxkTGVnZW5kVGFibGUodGhpcy53aWR0aCgpLHRoaXMuaGVpZ2h0KCkpO3JldHVybiBpLnJvd3MucmVkdWNlKGZ1bmN0aW9uKG8sYSxzKXtpZihvLmxlbmd0aCE9PTApcmV0dXJuIG87dmFyIGw9aS5nZXRSb3dCb3VuZHMocyksYz1RZy5NYXRoLndpdGhpbihyLGwpO3JldHVybiBjP2EuY29sdW1ucy5yZWR1Y2UoZnVuY3Rpb24odSxoLGYpe3ZhciBwPWkuZ2V0Q29sdW1uQm91bmRzKHMsZiksZD1RZy5NYXRoLndpdGhpbihyLHApO2lmKGQpe3ZhciBnPW4uY29udGVudCgpLnNlbGVjdEFsbCgiLiIrdC5MRUdFTkRfUk9XX0NMQVNTKS5ub2RlcygpW3NdLF89RnYuc2VsZWN0KGcpLnNlbGVjdEFsbCgiLiIrdC5MRUdFTkRfRU5UUllfQ0xBU1MpLm5vZGVzKClbTWF0aC5mbG9vcihmLzIpXSx5PUZ2LnNlbGVjdChfKS5zZWxlY3QoIi4iK3QuTEVHRU5EX1NZTUJPTF9DTEFTUykseD1RZy5ET00uZ2V0VHJhbnNsYXRlVmFsdWVzKEZ2LnNlbGVjdChnKSksYj1RZy5ET00uZ2V0VHJhbnNsYXRlVmFsdWVzKHkpO3JldHVyblt7Ym91bmRzOlFnLkRPTS5lbGVtZW50QkJveChGdi5zZWxlY3QoZykpLGRhdHVtOmguZGF0YS5uYW1lLHBvc2l0aW9uOnt4OnhbMF0rYlswXSx5OnhbMV0rYlsxXX0sc2VsZWN0aW9uOkZ2LnNlbGVjdChfKSxjb21wb25lbnQ6bn1dfXJldHVybiB1fSxvKTpvfSxbXSl9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKTt2YXIgcj10aGlzLl9idWlsZExlZ2VuZFRhYmxlKHRoaXMud2lkdGgoKSx0aGlzLmhlaWdodCgpKTt0aGlzLmNvbnRlbnQoKS5zZWxlY3RBbGwoIioiKS5yZW1vdmUoKTt2YXIgbj10aGlzLmNvbnRlbnQoKS5zZWxlY3RBbGwoImcuIit0LkxFR0VORF9ST1dfQ0xBU1MpLmRhdGEoci5yb3dzKSxpPW4uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHQuTEVHRU5EX1JPV19DTEFTUywhMCkubWVyZ2Uobik7bi5leGl0KCkucmVtb3ZlKCksaS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGEscyl7dmFyIGw9ci5nZXRSb3dCb3VuZHMocyk7cmV0dXJuInRyYW5zbGF0ZSgiK2wudG9wTGVmdC54KyIsICIrbC50b3BMZWZ0LnkrIikifSk7dmFyIG89dGhpcztyZXR1cm4gaS5lYWNoKGZ1bmN0aW9uKGEscyl7Zm9yKHZhciBsPVtdLGM9MDtjPGEuY29sdW1ucy5sZW5ndGg7Yys9MilsLnB1c2goW2EuY29sdW1uc1tjXSxhLmNvbHVtbnNbYysxXV0pO3ZhciB1PUZ2LnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcuIit0LkxFR0VORF9FTlRSWV9DTEFTUykuZGF0YShsKSxoPXUuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHQuTEVHRU5EX0VOVFJZX0NMQVNTLCEwKS5tZXJnZSh1KTtoLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLGZ1bmN0aW9uKGYscCl7dmFyIGQ9ZlswXTtyZXR1cm4gby5zeW1ib2woKShkLmRhdGEubmFtZSxzKShkLmhlaWdodCouNikobnVsbCl9KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGYscCl7dmFyIGQ9ZlswXSxnPXIucm93c1tzXS5jb2x1bW5zLmluZGV4T2YoZCksXz1yLmdldENvbHVtbkJvdW5kcyhzLGcpO3JldHVybiJ0cmFuc2xhdGUoIisoXy50b3BMZWZ0LngrZC53aWR0aC8yKSsiLCAiK2QuaGVpZ2h0LzIrIikifSkuYXR0cigiZmlsbCIsZnVuY3Rpb24oZil7cmV0dXJuIG8uX2NvbG9yU2NhbGUuc2NhbGUoZlswXS5kYXRhLm5hbWUpfSkuYXR0cigib3BhY2l0eSIsZnVuY3Rpb24oZixwKXtyZXR1cm4gby5zeW1ib2xPcGFjaXR5KCkoZlswXS5kYXRhLm5hbWUscyl9KS5jbGFzc2VkKHQuTEVHRU5EX1NZTUJPTF9DTEFTUywhMCksaC5hcHBlbmQoImciKS5jbGFzc2VkKCJ0ZXh0LWNvbnRhaW5lciIsITApLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZixwKXt2YXIgZD1mWzFdLGc9ci5yb3dzW3NdLmNvbHVtbnMuaW5kZXhPZihkKSxfPXIuZ2V0Q29sdW1uQm91bmRzKHMsZyk7cmV0dXJuInRyYW5zbGF0ZSgiK18udG9wTGVmdC54KyIsIDApIn0pLmVhY2goZnVuY3Rpb24oZixwLGQpe3ZhciBnPUZ2LnNlbGVjdCh0aGlzKSxfPWZbMV0seT17eEFsaWduOiJsZWZ0Iix5QWxpZ246InRvcCIsdGV4dFJvdGF0aW9uOjB9O28uX3dyaXRlci53cml0ZShvLl9mb3JtYXR0ZXIoXy5kYXRhLm5hbWUpLF8ud2lkdGgsby5oZWlnaHQoKSx5LGcubm9kZSgpKX0pLHUuZXhpdCgpLnJlbW92ZSgpfSksdGhpc30sdC5wcm90b3R5cGUuc3ltYm9sPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3N5bWJvbEZhY3RvcnlBY2Nlc3NvcjoodGhpcy5fc3ltYm9sRmFjdG9yeUFjY2Vzc29yPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuc3ltYm9sT3BhY2l0eT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9zeW1ib2xPcGFjaXR5QWNjZXNzb3I6KHR5cGVvZiByPT0ibnVtYmVyIj90aGlzLl9zeW1ib2xPcGFjaXR5QWNjZXNzb3I9ZnVuY3Rpb24oKXtyZXR1cm4gcn06dGhpcy5fc3ltYm9sT3BhY2l0eUFjY2Vzc29yPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuZml4ZWRXaWR0aD1mdW5jdGlvbigpe3JldHVybiEwfSx0LnByb3RvdHlwZS5maXhlZEhlaWdodD1mdW5jdGlvbigpe3JldHVybiEwfSx0LnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGU9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGUuY2FsbCh0aGlzKSx0aGlzLl9tZWFzdXJlci5yZXNldCgpfSx0LkxFR0VORF9ST1dfQ0xBU1M9ImxlZ2VuZC1yb3ciLHQuTEVHRU5EX0VOVFJZX0NMQVNTPSJsZWdlbmQtZW50cnkiLHQuTEVHRU5EX1NZTUJPTF9DTEFTUz0ibGVnZW5kLXN5bWJvbCIsdH0ockhlLkNvbXBvbmVudCk7cW90LkxlZ2VuZD1pSGV9KTt2YXIgR290PUgoS0Y9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEtGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgb0hlOyhmdW5jdGlvbihlKXtlLk1BSU49Im1haW4iLGUuUkVTRVQ9InJlc2V0In0pKG9IZT1LRi5BbmltYXRvcnx8KEtGLkFuaW1hdG9yPXt9KSl9KTt2YXIgTyR0PUgoKGVHbixEJHQpPT57InVzZSBzdHJpY3QiO0QkdC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0IT1udWxsJiZ0eXBlb2YgdD09Im9iamVjdCImJkFycmF5LmlzQXJyYXkodCk9PT0hMX19KTt2YXIgQiR0PUgoKHJHbixGJHQpPT57InVzZSBzdHJpY3QiO3ZhciBhSGU9TyR0KCk7ZnVuY3Rpb24geiR0KGUpe3JldHVybiBhSGUoZSk9PT0hMCYmT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpPT09IltvYmplY3QgT2JqZWN0XSJ9RiR0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIHIsbjtyZXR1cm4hKHokdCh0KT09PSExfHwocj10LmNvbnN0cnVjdG9yLHR5cGVvZiByIT0iZnVuY3Rpb24iKXx8KG49ci5wcm90b3R5cGUseiR0KG4pPT09ITEpfHxuLmhhc093blByb3BlcnR5KCJpc1Byb3RvdHlwZU9mIik9PT0hMSl9fSk7dmFyIFlvdD1IKFdvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoV290LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgc0hlPUZlKCksSCR0PTAsbEhlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe3Q9PT12b2lkIDAmJih0PVtdKSxyPT09dm9pZCAwJiYocj17fSksdGhpcy5fdXBkYXRlSWQ9SCR0KyssdGhpcy5fZGF0YT10LHRoaXMuX21ldGFkYXRhPXIsdGhpcy5fY2FsbGJhY2tzPW5ldyBzSGUuQ2FsbGJhY2tTZXR9cmV0dXJuIGUucHJvdG90eXBlLm9uVXBkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jYWxsYmFja3MuYWRkKHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZlVwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSxlLnByb3RvdHlwZS5kYXRhPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXMuX2RhdGE6KHRoaXMuX2RhdGE9dCx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpLHRoaXMpfSxlLnByb3RvdHlwZS5tZXRhZGF0YT1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9tZXRhZGF0YToodGhpcy5fbWV0YWRhdGE9dCx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpLHRoaXMpfSxlLnByb3RvdHlwZS51cGRhdGVJZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl91cGRhdGVJZH0sZS5wcm90b3R5cGUuX2Rpc3BhdGNoVXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlSWQ9SCR0KyssdGhpcy5fY2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcyl9LGV9KCk7V290LkRhdGFzZXQ9bEhlfSk7dmFyICRvdD1IKFJjPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShSYywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGpvdD0oZGUoKSxVdChwZSkpLGNIZT1CJHQoKSx1SGU9WW90KCksaEhlPWt2KCk7ZnVuY3Rpb24gWG90KGUpe3JldHVybiBlIGluc3RhbmNlb2YgcDQ/ZTplIGluc3RhbmNlb2YgRGF0ZT9mNChlLnZhbHVlT2YoKSk6ZSBpbnN0YW5jZW9mIGhIZS5TY2FsZT9WJHQoZSk6ZSBpbnN0YW5jZW9mIHVIZS5EYXRhc2V0P1UkdChlKTpjSGUoZSk/WkYoZSk6QXJyYXkuaXNBcnJheShlKT9xJHQoZSk6ZjQoZSl9UmMuc2lnbj1Yb3Q7ZnVuY3Rpb24gViR0KGUpe3ZhciB0PXtkb21haW46ZS5kb21haW4oKSxyYW5nZTplLnJhbmdlKCksdXBkYXRlSWQ6ZS51cGRhdGVJZCgpLHJlZjpmNChlKX07cmV0dXJuIFpGKHQpfVJjLnNpZ25TY2FsZT1WJHQ7ZnVuY3Rpb24gVSR0KGUpe3ZhciB0PXtyZWY6ZjQoZSksdXBkYXRlSWQ6ZS51cGRhdGVJZCgpfTtyZXR1cm4gWkYodCl9UmMuc2lnbkRhdGFzZXQ9VSR0O2Z1bmN0aW9uIGY0KGUpe3JldHVybiBuZXcgVyR0KGUpfVJjLnNpZ25SZWY9ZjQ7ZnVuY3Rpb24gcSR0KGUpe3JldHVybiBuZXcgRyR0KGUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBYb3QodCl9KSl9UmMuc2lnbkFycmF5PXEkdDtmdW5jdGlvbiBaRihlKXt2YXIgdD17fTtmb3IodmFyIHIgaW4gZSllLmhhc093blByb3BlcnR5KHIpJiYodFtyXT1Yb3QoZVtyXSkpO3JldHVybiBuZXcgWSR0KHQpfVJjLnNpZ25PYmo9WkY7dmFyIHA0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUuaXNEaWZmZXJlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yP3RoaXMuaXNTaWduYXR1cmVEaWZmZXJlbnQodCk6ITB9LGV9KCk7UmMuU2lnbmF0dXJlPXA0O3ZhciBHJHQ9ZnVuY3Rpb24oZSl7am90Ll9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLmFycmF5PXIsbn1yZXR1cm4gdC5wcm90b3R5cGUuaXNTaWduYXR1cmVEaWZmZXJlbnQ9ZnVuY3Rpb24ocil7aWYoci5hcnJheS5sZW5ndGghPT10aGlzLmFycmF5Lmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIG49MDtuPHRoaXMuYXJyYXkubGVuZ3RoO24rKylpZih0aGlzLmFycmF5W25dLmlzRGlmZmVyZW50KHIuYXJyYXlbbl0pKXJldHVybiEwO3JldHVybiExfSx0fShwNCk7UmMuQXJyYXlTaWduYXR1cmU9RyR0O3ZhciBXJHQ9ZnVuY3Rpb24oZSl7am90Ll9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLnJlZj1yLG59cmV0dXJuIHQucHJvdG90eXBlLmlzU2lnbmF0dXJlRGlmZmVyZW50PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLnJlZiE9PXIucmVmfSx0fShwNCk7UmMuUmVmZXJlbmNlU2lnbmF0dXJlPVckdDt2YXIgWSR0PWZ1bmN0aW9uKGUpe2pvdC5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5vYmo9cixufXJldHVybiB0LnByb3RvdHlwZS5pc1NpZ25hdHVyZURpZmZlcmVudD1mdW5jdGlvbihyKXt2YXIgbj1PYmplY3Qua2V5cyh0aGlzLm9iaiksaT1PYmplY3Qua2V5cyhyLm9iaik7aWYobi5sZW5ndGghPT1pLmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIG89MCxhPW47bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107aWYoIXIub2JqLmhhc093blByb3BlcnR5KHMpfHx0aGlzLm9ialtzXS5pc0RpZmZlcmVudChyLm9ialtzXSkpcmV0dXJuITB9cmV0dXJuITF9LHR9KHA0KTtSYy5PYmplY3RTaWduYXR1cmU9WSR0fSk7dmFyIGokdD1IKEtvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoS290LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZkhlPSRvdCgpO2Z1bmN0aW9uIHBIZShlKXt2YXIgdD12b2lkIDAscixuPSExLGk9ITEsbz1mdW5jdGlvbigpe2Zvcih2YXIgYT1bXSxzPTA7czxhcmd1bWVudHMubGVuZ3RoO3MrKylhW3NdPWFyZ3VtZW50c1tzXTtpZihuKXJldHVybiByO3ZhciBsPWZIZS5zaWduQXJyYXkoYSk7cmV0dXJuIHQ9PT12b2lkIDB8fHQuaXNEaWZmZXJlbnQobCk/KGkmJmNvbnNvbGUud2FybigiY2FjaGUgbWlzcyEgY29tcHV0aW5nIiksdD1sLHI9ZS5hcHBseSh0aGlzLGEpKTppJiZjb25zb2xlLndhcm4oImNhY2hlIGhpdCEiKSxyfTtyZXR1cm4gby5kb0xvY2tlZD1mdW5jdGlvbihhKXtpZihuKXRocm93IG5ldyBFcnJvcigiTG9ja2luZyBhbiBhbHJlYWR5IGxvY2tlZCBtZW1vaXplIGZ1bmN0aW9uISIpO249ITA7dmFyIHM9YS5hcHBseSh0aGlzKTtyZXR1cm4gbj0hMSxzfSxvLmxvZ1BlcmZvcm1hbmNlPWZ1bmN0aW9uKGEpe3JldHVybiBhPT09dm9pZCAwJiYoYT0hMCksaT1hLHRoaXN9LG99S290Lm1lbW9pemU9cEhlfSk7dmFyIEskdD1IKEpGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGRIZT1PZSgpLFpvdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLm1hcD1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuZXhpc3RzPU9iamVjdC5jcmVhdGUobnVsbCl9cmV0dXJuIGUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXtyZXR1cm4gZGVsZXRlIHRoaXMubWFwW3RdLGRlbGV0ZSB0aGlzLmV4aXN0c1t0XSwhMH0sZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm1hcFt0XX0sZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiEhdGhpcy5leGlzdHNbdF19LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LHIpe3JldHVybiB0aGlzLm1hcFt0XT1yLHRoaXMuZXhpc3RzW3RdPSEwLHRoaXN9LGV9KCksWCR0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMubWFwPW5ldyBab3R9cmV0dXJuIGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5tYXAuZ2V0KHRbMF0pLmdldCh0WzFdKX0sZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm1hcC5oYXModFswXSkmJnRoaXMubWFwLmdldCh0WzBdKS5oYXModFsxXSl9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LHIpe3JldHVybiB0aGlzLm1hcC5oYXModFswXSl8fHRoaXMubWFwLnNldCh0WzBdLG5ldyBab3QpLHRoaXMubWFwLmdldCh0WzBdKS5zZXQodFsxXSxyKSx0aGlzfSxlLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubWFwLmhhcyh0WzBdKSYmdGhpcy5tYXAuZ2V0KHRbMF0pLmRlbGV0ZSh0WzFdKSwhMH0sZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLm1hcD1uZXcgWm90fSxlLnJlc29sdmVyPWZ1bmN0aW9uKHQscixuKXtyZXR1cm5bbi51cGRhdGVJZCgpLHJdfSxlfSgpO2Z1bmN0aW9uICQkdChlKXt2YXIgdD1kSGUubWVtb2l6ZShlLFgkdC5yZXNvbHZlcik7cmV0dXJuIHQuY2FjaGU9bmV3IFgkdCx0fUpGLm1lbW9pemVQcm9qZWN0b3I9JCR0O2Z1bmN0aW9uIG1IZShlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtlW3RdPSQkdChlW3RdKX0pLGV9SkYubWVtb2l6ZVByb2plY3RvcnM9bUhlfSk7dmFyIFokdD1IKEpvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSm90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZ0hlPUNTKCk7ZnVuY3Rpb24gX0hlKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWVbdF09YXJndW1lbnRzW3RdO3ZhciByPWUuc2xpY2UoMCwtMSksbj1lW2UubGVuZ3RoLTFdLGk9Z0hlLm1lbW9pemUobiksbz1mdW5jdGlvbigpe3ZhciBhPXRoaXMscz1yLm1hcChmdW5jdGlvbihsKXtyZXR1cm4gbC5hcHBseShhKX0pO3JldHVybiBpLmFwcGx5KHZvaWQgMCxzKX07cmV0dXJuIG99Sm90Lm1lbVRodW5rPV9IZX0pO3ZhciBDUz1IKEFTPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShBUywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFFvdD0oZGUoKSxVdChwZSkpO1FvdC5fX2V4cG9ydFN0YXIoaiR0KCksQVMpO1FvdC5fX2V4cG9ydFN0YXIoSyR0KCksQVMpO1FvdC5fX2V4cG9ydFN0YXIoWiR0KCksQVMpO3ZhciB5SGU9JG90KCk7QVMuc2lnbj15SGUuc2lnbn0pO3ZhciBCdj1IKE5jPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShOYywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEokdD0oRXIoKSxVdChNcikpLHZIZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fZHJhd1N0ZXA9cn1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0RHJhd1N0ZXA9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZHJhd1N0ZXB9LGUucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24odCxyKXt2YXIgbj1yW3IubGVuZ3RoLTFdLmF0dHJUb0FwcGxpZWRQcm9qZWN0b3I7dGhpcy5fY29udGV4dC5zYXZlKCksdGhpcy5fZHJhd1N0ZXAodGhpcy5fY29udGV4dCx0LG4pLHRoaXMuX2NvbnRleHQucmVzdG9yZSgpfSxlLnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVzPWZ1bmN0aW9uKCl7cmV0dXJuW119LGUucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXg9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGx9LGUucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe30sZX0oKTtOYy5DYW52YXNEcmF3ZXI9dkhlO05jLkNvbnRleHRTdHlsZUF0dHJzPVsiZmlsbC1vcGFjaXR5IiwiZmlsbCIsIm9wYWNpdHkiLCJzdHJva2Utb3BhY2l0eSIsInN0cm9rZS13aWR0aCIsInN0cm9rZSIsInN0cm9rZS1kYXNoYXJyYXkiXTtmdW5jdGlvbiB4SGUoZSx0LHIsbil7dmFyIGk9TmMuQ29udGV4dFN0eWxlQXR0cnMuY29uY2F0KHQpO3JldHVybiBRJHQoZSxpLHIsbil9TmMucmVzb2x2ZUF0dHJpYnV0ZXNTdWJzZXRXaXRoU3R5bGVzPXhIZTtmdW5jdGlvbiBRJHQoZSx0LHIsbil7Zm9yKHZhciBpPXt9LG89MCxhPXQ7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107ZS5oYXNPd25Qcm9wZXJ0eShzKSYmKGlbc109ZVtzXShyLG4pKX1yZXR1cm4gaX1OYy5yZXNvbHZlQXR0cmlidXRlcz1RJHQ7ZnVuY3Rpb24gYkhlKGUpe3ZhciB0PWUub3BhY2l0eSE9bnVsbD9wYXJzZUZsb2F0KGUub3BhY2l0eSk6MSxyPWVbInN0cm9rZS1vcGFjaXR5Il0hPW51bGw/cGFyc2VGbG9hdChlWyJzdHJva2Utb3BhY2l0eSJdKToxO3JldHVybiByKnR9ZnVuY3Rpb24gd0hlKGUpe3ZhciB0PWUub3BhY2l0eSE9bnVsbD9wYXJzZUZsb2F0KGUub3BhY2l0eSk6MSxyPWVbImZpbGwtb3BhY2l0eSJdIT1udWxsP3BhcnNlRmxvYXQoZVsiZmlsbC1vcGFjaXR5Il0pOjE7cmV0dXJuIHIqdH1mdW5jdGlvbiB0S3QoZSl7cmV0dXJuIGVbInN0cm9rZS13aWR0aCJdIT1udWxsP3BhcnNlRmxvYXQoZVsic3Ryb2tlLXdpZHRoIl0pOjF9TmMuZ2V0U3Ryb2tlV2lkdGg9dEt0O2Z1bmN0aW9uIGVLdChlKXt2YXIgdD1lWyJzdHJva2UtZGFzaGFycmF5Il07aWYodCE9bnVsbCl0cnl7cmV0dXJuIHQuc3BsaXQoL1sgLF0rLykubWFwKGZ1bmN0aW9uKHIpe3JldHVybiBwYXJzZUludChyLDEwKX0pfWNhdGNoKHIpe3JldHVybiBjb25zb2xlLmVycm9yKCJnZXRTdHJva2VEYXNoQXJyYXkgZmFpbGVkIHdpdGg6ICIrciksW119cmV0dXJuW119TmMuZ2V0U3Ryb2tlRGFzaEFycmF5PWVLdDtmdW5jdGlvbiBTSGUoZSx0LHIsbil7ZS5zYXZlKCksZS5iZWdpblBhdGgoKSx0LmNvbnRleHQoZSksdChyKSxlLmxpbmVKb2luPSJyb3VuZCIsdGF0KGUsbiksZS5yZXN0b3JlKCl9TmMucmVuZGVyQXJlYT1TSGU7ZnVuY3Rpb24gTUhlKGUsdCxyLG4pe2Uuc2F2ZSgpLGUuYmVnaW5QYXRoKCksdC5jb250ZXh0KGUpLHQociksZS5saW5lSm9pbj0icm91bmQiLHRhdChlLG4pLGUucmVzdG9yZSgpfU5jLnJlbmRlckxpbmU9TUhlO2Z1bmN0aW9uIHRhdChlLHQpe2lmKHQuc3Ryb2tlKXtlLmxpbmVXaWR0aD10S3QodCk7dmFyIHI9SiR0LmNvbG9yKHQuc3Ryb2tlKSxuPWVLdCh0KTtlLnNldExpbmVEYXNoKG4pLHIub3BhY2l0eSo9YkhlKHQpLGUuc3Ryb2tlU3R5bGU9ci50b1N0cmluZygpLGUuc3Ryb2tlKCl9aWYodC5maWxsKXt2YXIgaT1KJHQuY29sb3IodC5maWxsKTtpLm9wYWNpdHkqPXdIZSh0KSxlLmZpbGxTdHlsZT1pLnRvU3RyaW5nKCksZS5maWxsKCl9fU5jLnJlbmRlclBhdGhXaXRoU3R5bGU9dGF0fSk7dmFyIFV1PUgoZWF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBFSGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7dGhpcy5fc3ZnRHJhd2VyRmFjdG9yeT10LHRoaXMuX2NhbnZhc0RyYXdlckZhY3Rvcnk9cn1yZXR1cm4gZS5wcm90b3R5cGUudXNlU1ZHPWZ1bmN0aW9uKHQpe3RoaXMuX2N1cnJlbnREcmF3ZXIhPW51bGwmJnRoaXMuX2N1cnJlbnREcmF3ZXIucmVtb3ZlKCk7dmFyIHI9dGhpcy5fc3ZnRHJhd2VyRmFjdG9yeSgpO3IuYXR0YWNoVG8odCksdGhpcy5fY3VycmVudERyYXdlcj1yfSxlLnByb3RvdHlwZS51c2VDYW52YXM9ZnVuY3Rpb24odCl7dGhpcy5fY3VycmVudERyYXdlciE9bnVsbCYmdGhpcy5fY3VycmVudERyYXdlci5yZW1vdmUoKSx0aGlzLl9jdXJyZW50RHJhd2VyPXRoaXMuX2NhbnZhc0RyYXdlckZhY3RvcnkodC5ub2RlKCkuZ2V0Q29udGV4dCgiMmQiKSl9LGUucHJvdG90eXBlLmdldERyYXdlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jdXJyZW50RHJhd2VyfSxlLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLl9jdXJyZW50RHJhd2VyIT1udWxsJiZ0aGlzLl9jdXJyZW50RHJhd2VyLnJlbW92ZSgpfSxlLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKHQscil7dGhpcy5fY3VycmVudERyYXdlci5kcmF3KHQscil9LGUucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3VycmVudERyYXdlci5nZXRWaXN1YWxQcmltaXRpdmVzKCl9LGUucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2N1cnJlbnREcmF3ZXIuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleCh0KX0sZX0oKTtlYXQuUHJveHlEcmF3ZXI9RUhlfSk7dmFyIE9mPUgocmF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBUSGU9KEVyKCksVXQoTXIpKSxyS3Q9RmUoKSxDSGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7dGhpcy5fcm9vdD1USGUuc2VsZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLHRoaXMuX2NsYXNzTmFtZT1yLHRoaXMuX3N2Z0VsZW1lbnROYW1lPXR9cmV0dXJuIGUucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24odCxyKXt2YXIgbj10aGlzO3RoaXMuX2NyZWF0ZUFuZERlc3Ryb3lET01FbGVtZW50cyh0KTtmb3IodmFyIGk9MCxvPXIubGVuZ3RoLGE9ZnVuY3Rpb24obCl7dmFyIGM9cltsXTtyS3QuV2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gbi5fZHJhd1N0ZXAoYyl9LGkpLGkrPWMuYW5pbWF0b3IudG90YWxUaW1lKHQubGVuZ3RoKX0scz0wO3M8bztzKyspYShzKX0sZS5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWNoZWRWaXN1YWxQcmltaXRpdmVzTm9kZXM9PW51bGwmJih0aGlzLl9jYWNoZWRWaXN1YWxQcmltaXRpdmVzTm9kZXM9dGhpcy5fc2VsZWN0aW9uLm5vZGVzKCkpLHRoaXMuX2NhY2hlZFZpc3VhbFByaW1pdGl2ZXNOb2Rlc30sZS5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY2FjaGVkVmlzdWFsUHJpbWl0aXZlc05vZGVNYXA9PW51bGw/bnVsbDp0aGlzLl9jYWNoZWRWaXN1YWxQcmltaXRpdmVzTm9kZU1hcC5nZXQodCl9LGUucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3RoaXMuX3Jvb3QucmVtb3ZlKCl9LGUucHJvdG90eXBlLmF0dGFjaFRvPWZ1bmN0aW9uKHQpe3Qubm9kZSgpLmFwcGVuZENoaWxkKHRoaXMuX3Jvb3Qubm9kZSgpKX0sZS5wcm90b3R5cGUuZ2V0Um9vdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb290fSxlLnByb3RvdHlwZS5zZWxlY3Rvcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdmdFbGVtZW50TmFtZX0sZS5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdEF0dHJpYnV0ZXM9ZnVuY3Rpb24odCl7fSxlLnByb3RvdHlwZS5fY3JlYXRlQW5kRGVzdHJveURPTUVsZW1lbnRzPWZ1bmN0aW9uKHQpe3ZhciByPXQubWFwKGZ1bmN0aW9uKGEscyl7cmV0dXJuIGEhPW51bGw/e2Q6YSxpOnN9Om51bGx9KSxuPXIuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBhIT1udWxsfSksaT10aGlzLl9yb290LnNlbGVjdEFsbCh0aGlzLnNlbGVjdG9yKCkpLmRhdGEobik7dGhpcy5fc2VsZWN0aW9uPWkuZW50ZXIoKS5hcHBlbmQodGhpcy5fc3ZnRWxlbWVudE5hbWUpLm1lcmdlKGkpLGkuZXhpdCgpLnJlbW92ZSgpO3ZhciBvPW5ldyByS3QuTWFwO3RoaXMuX3NlbGVjdGlvbi5lYWNoKGZ1bmN0aW9uKGEpe28uc2V0KGEuaSx0aGlzKX0pLHRoaXMuX2NhY2hlZFZpc3VhbFByaW1pdGl2ZXNOb2RlTWFwPW8sdGhpcy5fY2FjaGVkVmlzdWFsUHJpbWl0aXZlc05vZGVzPW51bGwsdGhpcy5fc2VsZWN0aW9uLmRhdGEodGhpcy5fc2VsZWN0aW9uLmRhdGEoKS5tYXAoZnVuY3Rpb24oYSl7dmFyIHM9YS5kO3JldHVybiBzfSkpLHRoaXMuX2NsYXNzTmFtZSE9bnVsbCYmdGhpcy5fc2VsZWN0aW9uLmNsYXNzZWQodGhpcy5fY2xhc3NOYW1lLCEwKSx0aGlzLl9hcHBseURlZmF1bHRBdHRyaWJ1dGVzKHRoaXMuX3NlbGVjdGlvbil9LGUucHJvdG90eXBlLl9kcmF3U3RlcD1mdW5jdGlvbih0KXt2YXIgcj10aGlzLG49WyJmaWxsIiwic3Ryb2tlIl07bi5mb3JFYWNoKGZ1bmN0aW9uKGkpe3QuYXR0clRvQXBwbGllZFByb2plY3RvcltpXSE9bnVsbCYmci5fc2VsZWN0aW9uLmF0dHIoaSx0LmF0dHJUb0FwcGxpZWRQcm9qZWN0b3JbaV0pfSksdC5hbmltYXRvci5hbmltYXRlKHRoaXMuX3NlbGVjdGlvbix0LmF0dHJUb0FwcGxpZWRQcm9qZWN0b3IpLHRoaXMuX2NsYXNzTmFtZSE9bnVsbCYmdGhpcy5fc2VsZWN0aW9uLmNsYXNzZWQodGhpcy5fY2xhc3NOYW1lLCEwKX0sZX0oKTtyYXQuU1ZHRHJhd2VyPUNIZX0pO3ZhciBpYXQ9SChuYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG5hdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG5LdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt2YXIgdD10aGlzO3RoaXMuc2NhbGU9MCx0aGlzLnRyYW5zbGF0ZT0wLHRoaXMuY2FjaGVkRG9tYWluPVtudWxsLG51bGxdLHRoaXMubGFzdFNlZW5Eb21haW49W251bGwsbnVsbF0sdGhpcy51cGRhdGVEb21haW49ZnVuY3Rpb24ocil7dC5sYXN0U2VlbkRvbWFpbj1yLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCk7dmFyIG49ci5zY2FsZVRyYW5zZm9ybWF0aW9uKHQuY2FjaGVkRG9tYWluWzFdKS1yLnNjYWxlVHJhbnNmb3JtYXRpb24odC5jYWNoZWREb21haW5bMF0pLGk9ci5zY2FsZVRyYW5zZm9ybWF0aW9uKHQubGFzdFNlZW5Eb21haW5bMV0pLXIuc2NhbGVUcmFuc2Zvcm1hdGlvbih0Lmxhc3RTZWVuRG9tYWluWzBdKTt0LnNjYWxlPW4vaXx8MSx0LnRyYW5zbGF0ZT1yLnNjYWxlVHJhbnNmb3JtYXRpb24odC5jYWNoZWREb21haW5bMF0pLXIuc2NhbGVUcmFuc2Zvcm1hdGlvbih0Lmxhc3RTZWVuRG9tYWluWzBdKSp0LnNjYWxlfHwwfX1yZXR1cm4gZS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLnNjYWxlPTEsdGhpcy50cmFuc2xhdGU9MCx0aGlzLmNhY2hlZERvbWFpbj10aGlzLmxhc3RTZWVuRG9tYWlufSxlLnByb3RvdHlwZS5zZXREb21haW49ZnVuY3Rpb24odCl7dGhpcy5jYWNoZWREb21haW49dC5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpfSxlfSgpLEFIZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXt2YXIgbj10aGlzO3RoaXMucmVuZGVyQ2FsbGJhY2s9dCx0aGlzLmFwcGx5VHJhbnNmb3JtQ2FsbGJhY2s9cix0aGlzLmRvbWFpblRyYW5zZm9ybVg9bmV3IG5LdCx0aGlzLmRvbWFpblRyYW5zZm9ybVk9bmV3IG5LdCx0aGlzLnJlbmRlckRlZmVycmVkPWZ1bmN0aW9uKCl7bi5hcHBseVRyYW5zZm9ybSgpLGNsZWFyVGltZW91dChuLnRpbWVvdXRUb2tlbiksbi50aW1lb3V0VG9rZW49c2V0VGltZW91dChmdW5jdGlvbigpe24ucmVuZGVyQ2FsbGJhY2soKX0sZS5ERUZFUlJFRF9SRU5ERVJJTkdfREVMQVkpfX1yZXR1cm4gZS5wcm90b3R5cGUuc2V0RG9tYWlucz1mdW5jdGlvbih0LHIpe3QmJnRoaXMuZG9tYWluVHJhbnNmb3JtWC5zZXREb21haW4odCksciYmdGhpcy5kb21haW5UcmFuc2Zvcm1ZLnNldERvbWFpbihyKSx0aGlzLnJlbmRlckRlZmVycmVkKCl9LGUucHJvdG90eXBlLnVwZGF0ZURvbWFpbnM9ZnVuY3Rpb24odCxyKXt0JiZ0aGlzLmRvbWFpblRyYW5zZm9ybVgudXBkYXRlRG9tYWluKHQpLHImJnRoaXMuZG9tYWluVHJhbnNmb3JtWS51cGRhdGVEb21haW4ociksdGhpcy5yZW5kZXJEZWZlcnJlZCgpfSxlLnByb3RvdHlwZS5yZXNldFRyYW5zZm9ybXM9ZnVuY3Rpb24oKXt0aGlzLmRvbWFpblRyYW5zZm9ybVgucmVzZXQoKSx0aGlzLmRvbWFpblRyYW5zZm9ybVkucmVzZXQoKSx0aGlzLmFwcGx5VHJhbnNmb3JtKCl9LGUucHJvdG90eXBlLmFwcGx5VHJhbnNmb3JtPWZ1bmN0aW9uKCl7dGhpcy5hcHBseVRyYW5zZm9ybUNhbGxiYWNrKHRoaXMuZG9tYWluVHJhbnNmb3JtWC50cmFuc2xhdGUsdGhpcy5kb21haW5UcmFuc2Zvcm1ZLnRyYW5zbGF0ZSx0aGlzLmRvbWFpblRyYW5zZm9ybVguc2NhbGUsdGhpcy5kb21haW5UcmFuc2Zvcm1ZLnNjYWxlKX0sZS5ERUZFUlJFRF9SRU5ERVJJTkdfREVMQVk9MjAwLGV9KCk7bmF0LkRlZmVycmVkUmVuZGVyZXI9QUhlfSk7dmFyIG5zPUgoUUY9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFFGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgUEhlPShkZSgpLFV0KHBlKSksU2Q9KEVyKCksVXQoTXIpKSxkND1rZigpLE1kPUZlKCksaUt0PUdvdCgpLG9hdD1DUygpLElIZT1rYygpLExIZT1CdigpLGtIZT1VdSgpLFJIZT1PZigpLE5IZT1qZygpLERIZT1MZigpLE9IZT1pYXQoKTtRRi5SZW5kZXJlcj1ESGUubWFrZUVudW0oWyJzdmciLCJjYW52YXMiXSk7dmFyIHpIZT1mdW5jdGlvbihlKXtQSGUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyLl9kYXRhQ2hhbmdlZD0hMSxyLl9hdHRyRXh0ZW50cz17fSxyLl9hbmltYXRlPSExLHIuX2FuaW1hdG9ycz17fSxyLl9wcm9wZXJ0eUV4dGVudHM9e30sci5fcmVzZXRFbnRpdHlTdG9yZT1mdW5jdGlvbigpe3IuX2NhY2hlZEVudGl0eVN0b3JlPXZvaWQgMH0sci5fb3ZlcmZsb3dIaWRkZW49ITAsci5hZGRDbGFzcygicGxvdCIpLHIuX2RhdGFzZXRUb0RyYXdlcj1uZXcgTWQuTWFwLHIuX2F0dHJCaW5kaW5ncz1TZC5tYXAoKSxyLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVyPWZ1bmN0aW9uKGksbyl7cmV0dXJuIHIuX2luY2x1ZGVkVmFsdWVzRm9yU2NhbGUoaSxvKX0sci5fcmVuZGVyQ2FsbGJhY2s9ZnVuY3Rpb24oKXtyZXR1cm4gci5yZW5kZXIoKX0sci5fb25EYXRhc2V0VXBkYXRlQ2FsbGJhY2s9ZnVuY3Rpb24oKXtyZXR1cm4gci5fb25EYXRhc2V0VXBkYXRlKCl9LHIuX3Byb3BlcnR5QmluZGluZ3M9U2QubWFwKCk7dmFyIG49bmV3IGQ0LkVhc2luZygpLm1heFRvdGFsRHVyYXRpb24odC5fQU5JTUFUSU9OX01BWF9EVVJBVElPTik7cmV0dXJuIHIuYW5pbWF0b3IoaUt0LkFuaW1hdG9yLk1BSU4sbiksci5hbmltYXRvcihpS3QuQW5pbWF0b3IuUkVTRVQsbmV3IGQ0Lk51bGwpLHIuX2RlZmVycmVkUmVzZXRFbnRpdHlTdG9yZT1NZC5XaW5kb3cuZGVib3VuY2UoT0hlLkRlZmVycmVkUmVuZGVyZXIuREVGRVJSRURfUkVOREVSSU5HX0RFTEFZLHIuX3Jlc2V0RW50aXR5U3RvcmUpLHJ9cmV0dXJuIHQuZ2V0VG90YWxEcmF3VGltZT1mdW5jdGlvbihyLG4pe3JldHVybiBuLnJlZHVjZShmdW5jdGlvbihpLG8pe3JldHVybiBpK28uYW5pbWF0b3IudG90YWxUaW1lKHIubGVuZ3RoKX0sMCl9LHQuYXBwbHlEcmF3U3RlcHM9ZnVuY3Rpb24ocixuKXt2YXIgaT1yLm1hcChmdW5jdGlvbihvKXt2YXIgYT1vLmF0dHJUb1Byb2plY3RvcixzPXt9O3JldHVybiBPYmplY3Qua2V5cyhhKS5mb3JFYWNoKGZ1bmN0aW9uKGwpe3NbbF09ZnVuY3Rpb24oYyx1KXtyZXR1cm4gYVtsXShjLHUsbil9fSkse2F0dHJUb0FwcGxpZWRQcm9qZWN0b3I6cyxhbmltYXRvcjpvLmFuaW1hdG9yfX0pO3JldHVybiBpfSx0LnByb3RvdHlwZS5hbmNob3I9ZnVuY3Rpb24ocil7cmV0dXJuIHI9TkhlLmNvZXJjZUV4dGVybmFsRDMociksZS5wcm90b3R5cGUuYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzLl9kYXRhQ2hhbmdlZD0hMCx0aGlzLl9yZXNldEVudGl0eVN0b3JlKCksdGhpcy5fdXBkYXRlRXh0ZW50cygpLHRoaXN9LHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe3ZhciByPXRoaXM7dGhpcy5faXNTZXR1cHx8KGUucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX2NhbnZhcyE9bnVsbCYmdGhpcy5fYXBwZW5kQ2FudmFzTm9kZSgpLHRoaXMuX3JlbmRlckFyZWE9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCgicmVuZGVyLWFyZWEiLCEwKSx0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gci5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0KG4pfSkpfSx0LnByb3RvdHlwZS5fYXBwZW5kQ2FudmFzTm9kZT1mdW5jdGlvbigpe3ZhciByPXRoaXMuZWxlbWVudCgpLnNlbGVjdCgiLnBsb3QtY2FudmFzLWNvbnRhaW5lciIpO3IuZW1wdHkoKSYmKHI9dGhpcy5lbGVtZW50KCkuYXBwZW5kKCJkaXYiKS5jbGFzc2VkKCJwbG90LWNhbnZhcy1jb250YWluZXIiLCEwKSxyLm5vZGUoKS5hcHBlbmRDaGlsZCh0aGlzLl9jYW52YXMubm9kZSgpKSl9LHQucHJvdG90eXBlLnNldEJvdW5kcz1mdW5jdGlvbihyLG4saSxvKXtpZihlLnByb3RvdHlwZS5zZXRCb3VuZHMuY2FsbCh0aGlzLHIsbixpLG8pLHRoaXMuX3VwZGF0ZUV4dGVudHMoKSx0aGlzLl9jYW52YXMhPW51bGwpe2lmKHRoaXMuX2J1ZmZlckNhbnZhcyYmIXRoaXMuX2J1ZmZlckNhbnZhc1ZhbGlkKXt0aGlzLl9idWZmZXJDYW52YXMuYXR0cigid2lkdGgiLHRoaXMuX2NhbnZhcy5hdHRyKCJ3aWR0aCIpKSx0aGlzLl9idWZmZXJDYW52YXMuYXR0cigiaGVpZ2h0Iix0aGlzLl9jYW52YXMuYXR0cigiaGVpZ2h0IikpO3ZhciBhPXRoaXMuX2J1ZmZlckNhbnZhcy5ub2RlKCkuZ2V0Q29udGV4dCgiMmQiKTtpZihhKXt2YXIgcz10aGlzLl9jYW52YXMubm9kZSgpO3Mud2lkdGg+MCYmcy5oZWlnaHQ+MD9hLmNhbnZhcy53aWR0aD4wJiZhLmNhbnZhcy5oZWlnaHQ+MCYmYS5kcmF3SW1hZ2UocywwLDApOmNvbnNvbGUud2FybigiRmFpbGVkIHRvIGZpbGwgYnVmZmVyIGNhbnZhcyB3aXRoIHdpdGggMHgwIGNhbnZhcyIpfXRoaXMuX2J1ZmZlckNhbnZhc1ZhbGlkPSEwfXZhciBsPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIT1udWxsP3dpbmRvdy5kZXZpY2VQaXhlbFJhdGlvOjE7dGhpcy5fY2FudmFzLmF0dHIoIndpZHRoIixyKmwpLHRoaXMuX2NhbnZhcy5hdHRyKCJoZWlnaHQiLG4qbCk7dmFyIGM9dGhpcy5fY2FudmFzLm5vZGUoKS5nZXRDb250ZXh0KCIyZCIpO2lmKGMmJihjLnNldFRyYW5zZm9ybShsLDAsMCxsLDAsMCksdGhpcy5fYnVmZmVyQ2FudmFzKSl7dmFyIHU9dGhpcy5fYnVmZmVyQ2FudmFzLm5vZGUoKTt1LndpZHRoPjAmJnUuaGVpZ2h0PjA/Yy5jYW52YXMud2lkdGg+MCYmYy5jYW52YXMuaGVpZ2h0PjAmJmMuZHJhd0ltYWdlKHUsMCwwLHIsbik6Y29uc29sZS53YXJuKCJGYWlsZWQgdG8gZmlsbCBjYW52YXMgd2l0aCAweDAgYnVmZmVyIGNhbnZhcyIpfX1yZXR1cm4gdGhpc30sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciByPXRoaXM7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX3NjYWxlcygpLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIG4ub2ZmVXBkYXRlKHIuX3JlbmRlckNhbGxiYWNrKX0pLHRoaXMuZGF0YXNldHMoW10pfSx0LnByb3RvdHlwZS5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX2RhdGFzZXRUb0RyYXdlci5nZXQocik7cmV0dXJuIHRoaXMucmVuZGVyZXIoKT09PSJzdmciP24udXNlU1ZHKHRoaXMuX3JlbmRlckFyZWEpOm4udXNlQ2FudmFzKHRoaXMuX2NhbnZhcyksbn0sdC5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbihyKXtyZXR1cm4gbmV3IGtIZS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgUkhlLlNWR0RyYXdlcigicGF0aCIsIiIpfSxmdW5jdGlvbihuKXtyZXR1cm4gbmV3IExIZS5DYW52YXNEcmF3ZXIobixmdW5jdGlvbigpe30pfSl9LHQucHJvdG90eXBlLl9nZXRBbmltYXRvcj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYW5pbWF0ZU9uTmV4dFJlbmRlcigpP3RoaXMuX2FuaW1hdG9yc1tyXXx8bmV3IGQ0Lk51bGw6bmV3IGQ0Lk51bGx9LHQucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGU9ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVFeHRlbnRzKCksdGhpcy5fZGF0YUNoYW5nZWQ9ITAsdGhpcy5fcmVzZXRFbnRpdHlTdG9yZSgpLHRoaXMucmVuZGVyTG93UHJpb3JpdHkoKX0sdC5wcm90b3R5cGUuYXR0cj1mdW5jdGlvbihyLG4saSl7cmV0dXJuIG49PW51bGw/dGhpcy5fYXR0ckJpbmRpbmdzLmdldChyKToodGhpcy5fYmluZEF0dHIocixuLGkpLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9iaW5kUHJvcGVydHk9ZnVuY3Rpb24ocixuLGksbyl7dmFyIGE9dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQocikscz1hIT1udWxsP2Euc2NhbGU6bnVsbCxsPXR5cGVvZiBuPT0iZnVuY3Rpb24iP246ZnVuY3Rpb24oKXtyZXR1cm4gbn07dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5zZXQocix7YWNjZXNzb3I6bCxzY2FsZTppLHBvc3RTY2FsZTpvfSkscyE9bnVsbCYmdGhpcy5fdW5pbnN0YWxsU2NhbGVGb3JLZXkocyxyKSxpIT1udWxsJiZ0aGlzLl9pbnN0YWxsU2NhbGVGb3JLZXkoaSxyKSx0aGlzLl9jbGVhckF0dHJUb1Byb2plY3RvckNhY2hlKCl9LHQucHJvdG90eXBlLl9iaW5kQXR0cj1mdW5jdGlvbihyLG4saSl7dmFyIG89dGhpcy5fYXR0ckJpbmRpbmdzLmdldChyKSxhPW8hPW51bGw/by5zY2FsZTpudWxsLHM9dHlwZW9mIG49PSJmdW5jdGlvbiI/bjpmdW5jdGlvbigpe3JldHVybiBufTt0aGlzLl9hdHRyQmluZGluZ3Muc2V0KHIse2FjY2Vzc29yOnMsc2NhbGU6aX0pLGEhPW51bGwmJnRoaXMuX3VuaW5zdGFsbFNjYWxlRm9yS2V5KGEsciksaSE9bnVsbCYmdGhpcy5faW5zdGFsbFNjYWxlRm9yS2V5KGksciksdGhpcy5fY2xlYXJBdHRyVG9Qcm9qZWN0b3JDYWNoZSgpfSx0LnByb3RvdHlwZS5fY2xlYXJBdHRyVG9Qcm9qZWN0b3JDYWNoZT1mdW5jdGlvbigpe2RlbGV0ZSB0aGlzLl9jYWNoZWRBdHRyVG9Qcm9qZWN0b3J9LHQucHJvdG90eXBlLl9nZXRBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXtpZih0aGlzLl9jYWNoZWRBdHRyVG9Qcm9qZWN0b3I9PW51bGwpe3ZhciByPXRoaXMuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yKCk7dC5PUFRJTUlaRV9NRU1PSVpFX1BST0pFQ1RPUlMmJihyPW9hdC5tZW1vaXplUHJvamVjdG9ycyhyKSksdGhpcy5fY2FjaGVkQXR0clRvUHJvamVjdG9yPXJ9cmV0dXJuIE1kLmFzc2lnbih7fSx0aGlzLl9jYWNoZWRBdHRyVG9Qcm9qZWN0b3IpfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXt2YXIgcj17fTt0aGlzLl9hdHRyQmluZGluZ3MuZWFjaChmdW5jdGlvbihpLG8pe3Jbb109dC5fc2NhbGVkQWNjZXNzb3IoaSl9KTt2YXIgbj10aGlzLl9wcm9wZXJ0eVByb2plY3RvcnMoKTtyZXR1cm4gT2JqZWN0LmtleXMobikuZm9yRWFjaChmdW5jdGlvbihpKXtyW2ldPT1udWxsJiYocltpXT1uW2ldKX0pLHJ9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyksdGhpcy5faXNBbmNob3JlZCYmKHRoaXMuX3BhaW50KCksdGhpcy5fZGF0YUNoYW5nZWQ9ITEpLHRoaXN9LHQucHJvdG90eXBlLnJlbmRlckxvd1ByaW9yaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlckNhbGxiYWNrKCksdGhpc30sdC5wcm90b3R5cGUuYW5pbWF0ZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fYW5pbWF0ZToodGhpcy5fYW5pbWF0ZT1yLHRoaXMpfSx0LnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXtyZXR1cm4gZS5wcm90b3R5cGUuZGV0YWNoLmNhbGwodGhpcyksdGhpcy5fdXBkYXRlRXh0ZW50cygpLHRoaXN9LHQucHJvdG90eXBlLl9zY2FsZXM9ZnVuY3Rpb24oKXt2YXIgcj1bXTtyZXR1cm4gdGhpcy5fYXR0ckJpbmRpbmdzLmVhY2goZnVuY3Rpb24obixpKXt2YXIgbz1uLnNjYWxlO28hPW51bGwmJnIuaW5kZXhPZihvKT09PS0xJiZyLnB1c2gobyl9KSx0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmVhY2goZnVuY3Rpb24obixpKXt2YXIgbz1uLnNjYWxlO28hPW51bGwmJnIuaW5kZXhPZihvKT09PS0xJiZyLnB1c2gobyl9KSxyfSx0LnByb3RvdHlwZS5fdXBkYXRlRXh0ZW50cz1mdW5jdGlvbigpe3ZhciByPXRoaXM7dGhpcy5fcmVzZXRFbnRpdHlTdG9yZSgpLHRoaXMuX3NjYWxlcygpLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIG4uYWRkSW5jbHVkZWRWYWx1ZXNQcm92aWRlcihyLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKX0pfSx0LnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHk9ZnVuY3Rpb24ocil7cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLmdldEV4dGVudHNGb3JBdHRyPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7aWYodGhpcy5fYXR0ckV4dGVudHNbcl09PW51bGwpe3ZhciBpPW9hdC5tZW1UaHVuayhmdW5jdGlvbigpe3JldHVybiBuLmRhdGFzZXRzKCl9LGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2F0dHJCaW5kaW5ncy5nZXQocil9LGZ1bmN0aW9uKG8sYSl7cmV0dXJuIGE9PW51bGx8fGEuYWNjZXNzb3I9PW51bGw/bnVsbDpvLm1hcChmdW5jdGlvbihzKXtyZXR1cm4gb0t0KHMsYSxudWxsKX0pfSk7dGhpcy5fYXR0ckV4dGVudHNbcl09aX1yZXR1cm4gdGhpcy5fYXR0ckV4dGVudHNbcl0oKX0sdC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7aWYodGhpcy5fcHJvcGVydHlFeHRlbnRzW3JdPT1udWxsKXt2YXIgaT1vYXQubWVtVGh1bmsoZnVuY3Rpb24oKXtyZXR1cm4gbi5kYXRhc2V0cygpfSxmdW5jdGlvbigpe3JldHVybiBuLl9wcm9wZXJ0eUJpbmRpbmdzLmdldChyKX0sZnVuY3Rpb24oKXtyZXR1cm4gbi5fZmlsdGVyRm9yUHJvcGVydHkocil9LGZ1bmN0aW9uKG8sYSxzKXtyZXR1cm4gYT09bnVsbHx8YS5hY2Nlc3Nvcj09bnVsbD9udWxsOm8ubWFwKGZ1bmN0aW9uKGwpe3JldHVybiBvS3QobCxhLHMpfSl9KTt0aGlzLl9wcm9wZXJ0eUV4dGVudHNbcl09aX1yZXR1cm4gdGhpcy5fcHJvcGVydHlFeHRlbnRzW3JdKCl9LHQucHJvdG90eXBlLl9pbmNsdWRlZFZhbHVlc0ZvclNjYWxlPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcztpZighdGhpcy5faXNBbmNob3JlZCYmIW4pcmV0dXJuW107dmFyIG89W107cmV0dXJuIHRoaXMuX2F0dHJCaW5kaW5ncy5lYWNoKGZ1bmN0aW9uKGEscyl7aWYoYS5zY2FsZT09PXIpe3ZhciBsPWkuZ2V0RXh0ZW50c0ZvckF0dHIocyk7bCE9bnVsbCYmKG89by5jb25jYXQoU2QubWVyZ2UobCkpKX19KSx0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmVhY2goZnVuY3Rpb24oYSxzKXtpZihhLnNjYWxlPT09cil7dmFyIGw9aS5nZXRFeHRlbnRzRm9yUHJvcGVydHkocyk7bCE9bnVsbCYmKG89by5jb25jYXQoU2QubWVyZ2UobCkpKX19KSxvfSx0LnByb3RvdHlwZS5hbmltYXRvcj1mdW5jdGlvbihyLG4pe3JldHVybiBuPT09dm9pZCAwP3RoaXMuX2FuaW1hdG9yc1tyXToodGhpcy5fYW5pbWF0b3JzW3JdPW4sdGhpcyl9LHQucHJvdG90eXBlLnJlbmRlcmVyPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIHI9PT12b2lkIDA/dGhpcy5fY2FudmFzPT1udWxsPyJzdmciOiJjYW52YXMiOih0aGlzLl9jYW52YXM9PW51bGwmJnI9PT0iY2FudmFzIj8odGhpcy5fY2FudmFzPVNkLnNlbGVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSkuY2xhc3NlZCgicGxvdC1jYW52YXMiLCEwKSx0aGlzLl9idWZmZXJDYW52YXM9U2Quc2VsZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpKSx0aGlzLmVsZW1lbnQoKSE9bnVsbCYmdGhpcy5fYXBwZW5kQ2FudmFzTm9kZSgpLHRoaXMuX2RhdGFzZXRUb0RyYXdlci5mb3JFYWNoKGZ1bmN0aW9uKGkpe2kudXNlQ2FudmFzKG4uX2NhbnZhcyl9KSx0aGlzLnJlbmRlcigpKTp0aGlzLl9jYW52YXMhPW51bGwmJnI9PSJzdmciJiYodGhpcy5fY2FudmFzLnJlbW92ZSgpLHRoaXMuX2NhbnZhcz1udWxsLHRoaXMuX2J1ZmZlckNhbnZhcz1udWxsLHRoaXMuX2RhdGFzZXRUb0RyYXdlci5mb3JFYWNoKGZ1bmN0aW9uKGkpe2kudXNlU1ZHKG4uX3JlbmRlckFyZWEpfSksdGhpcy5yZW5kZXIoKSksdGhpcyl9LHQucHJvdG90eXBlLmFkZERhdGFzZXQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2FkZERhdGFzZXQociksdGhpcy5fb25EYXRhc2V0VXBkYXRlKCksdGhpc30sdC5wcm90b3R5cGUuX2FkZERhdGFzZXQ9ZnVuY3Rpb24ocil7dGhpcy5fcmVtb3ZlRGF0YXNldChyKTt2YXIgbj10aGlzLl9jcmVhdGVEcmF3ZXIocik7cmV0dXJuIHRoaXMuX2RhdGFzZXRUb0RyYXdlci5zZXQocixuKSx0aGlzLl9pc1NldHVwJiZ0aGlzLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQociksci5vblVwZGF0ZSh0aGlzLl9vbkRhdGFzZXRVcGRhdGVDYWxsYmFjayksdGhpc30sdC5wcm90b3R5cGUucmVtb3ZlRGF0YXNldD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcmVtb3ZlRGF0YXNldChyKSx0aGlzLl9vbkRhdGFzZXRVcGRhdGUoKSx0aGlzfSx0LnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5kYXRhc2V0cygpLmluZGV4T2Yocik9PT0tMT90aGlzOih0aGlzLl9yZW1vdmVEYXRhc2V0Tm9kZXMociksci5vZmZVcGRhdGUodGhpcy5fb25EYXRhc2V0VXBkYXRlQ2FsbGJhY2spLHRoaXMuX2RhdGFzZXRUb0RyYXdlci5kZWxldGUociksdGhpcyl9LHQucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcy5fZGF0YXNldFRvRHJhd2VyLmdldChyKTtuLnJlbW92ZSgpfSx0LnByb3RvdHlwZS5kYXRhc2V0cz1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9W107cmV0dXJuIHRoaXMuX2RhdGFzZXRUb0RyYXdlci5mb3JFYWNoKGZ1bmN0aW9uKG8sYSl7cmV0dXJuIGkucHVzaChhKX0pLHI9PW51bGw/aTooaS5mb3JFYWNoKGZ1bmN0aW9uKG8pe3JldHVybiBuLl9yZW1vdmVEYXRhc2V0KG8pfSksci5mb3JFYWNoKGZ1bmN0aW9uKG8pe3JldHVybiBuLl9hZGREYXRhc2V0KG8pfSksdGhpcy5fb25EYXRhc2V0VXBkYXRlKCksdGhpcyl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3JldHVyblt7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOm5ldyBkNC5OdWxsfV19LHQucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24ocil7fSx0LnByb3RvdHlwZS5fYnVpbGRMaWdodHdlaWdodFBsb3RFbnRpdGllcz1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9W107cmV0dXJuIHIuZm9yRWFjaChmdW5jdGlvbihvLGEpe2Zvcih2YXIgcz1uLl9kYXRhc2V0VG9EcmF3ZXIuZ2V0KG8pLGw9MCxjPW8uZGF0YSgpLHU9Yy5sZW5ndGgsaD1mdW5jdGlvbihwKXt2YXIgZD1jW3BdLGc9bi5fcGl4ZWxQb2ludChkLHAsbyk7aWYoTWQuTWF0aC5pc05hTihnLngpfHxNZC5NYXRoLmlzTmFOKGcueSkpcmV0dXJuImNvbnRpbnVlIjt2YXIgXz1uO2kucHVzaCh7ZGF0dW06ZCxnZXQgcG9zaXRpb24oKXtyZXR1cm4gXy5fcGl4ZWxQb2ludC5jYWxsKF8sZCxwLG8pfSxpbmRleDpwLGRhdGFzZXQ6byxkYXRhc2V0SW5kZXg6YSxjb21wb25lbnQ6bixkcmF3ZXI6cyx2YWxpZERhdHVtSW5kZXg6bH0pLGwrK30sZj0wO2Y8dTtmKyspaChmKX0pLGl9LHQucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dmFyIHI9bmV3IE1kLk1hcDtyZXR1cm4gdGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIHIuc2V0KG4sbi5kYXRhKCkpfSkscn0sdC5wcm90b3R5cGUuX3BhaW50PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztkZWxldGUgdGhpcy5fY2FjaGVkQXR0clRvUHJvamVjdG9yO3ZhciBuPXRoaXMuX2dlbmVyYXRlRHJhd1N0ZXBzKCksaT10aGlzLl9nZXREYXRhVG9EcmF3KCksbz10aGlzLmRhdGFzZXRzKCkubWFwKGZ1bmN0aW9uKHUpe3JldHVybiByLl9kYXRhc2V0VG9EcmF3ZXIuZ2V0KHUpfSk7aWYodGhpcy5yZW5kZXJlcigpPT09ImNhbnZhcyIpe3ZhciBhPXRoaXMuX2NhbnZhcy5ub2RlKCkscz1hLmdldENvbnRleHQoIjJkIik7cy5jbGVhclJlY3QoMCwwLGEuY2xpZW50V2lkdGgsYS5jbGllbnRIZWlnaHQpLHRoaXMuX2J1ZmZlckNhbnZhc1ZhbGlkPSExfXRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKHUsaCl7dmFyIGY9dC5hcHBseURyYXdTdGVwcyhuLHUpO29baF0uZHJhdyhpLmdldCh1KSxmKX0pO3ZhciBsPXRoaXMuZGF0YXNldHMoKS5tYXAoZnVuY3Rpb24odSxoKXtyZXR1cm4gdC5nZXRUb3RhbERyYXdUaW1lKGkuZ2V0KHUpLG4pfSksYz1NZC5NYXRoLm1heChsLDApO3RoaXMuX2FkZGl0aW9uYWxQYWludChjKX0sdC5wcm90b3R5cGUuc2VsZWN0aW9ucz1mdW5jdGlvbihyKXt2YXIgbj10aGlzO2lmKHI9PT12b2lkIDAmJihyPXRoaXMuZGF0YXNldHMoKSksdGhpcy5yZW5kZXJlcigpPT09ImNhbnZhcyIpcmV0dXJuIFNkLnNlbGVjdEFsbCgpO3ZhciBpPVtdO3JldHVybiByLmZvckVhY2goZnVuY3Rpb24obyl7dmFyIGE9bi5fZGF0YXNldFRvRHJhd2VyLmdldChvKTtpZihhIT1udWxsKXt2YXIgcz1hLmdldFZpc3VhbFByaW1pdGl2ZXMoKTtpLnB1c2guYXBwbHkoaSxzKX19KSxTZC5zZWxlY3RBbGwoaSl9LHQucHJvdG90eXBlLmVudGl0aWVzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIHRoaXMuX2dldEVudGl0eVN0b3JlKHIpLmVudGl0aWVzKCkubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBuLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkoaSl9KX0sdC5wcm90b3R5cGUuZmlsdGVyRW50aXRpZXM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztyZXR1cm4gdGhpcy5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdGllcygpLmZpbHRlcihyKS5tYXAoZnVuY3Rpb24oaSl7cmV0dXJuIG4uX2xpZ2h0d2VpZ2h0UGxvdEVudGl0eVRvUGxvdEVudGl0eShpKX0pfSx0LnByb3RvdHlwZS5fZ2V0RW50aXR5U3RvcmU9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWZ1bmN0aW9uKGEpe3JldHVybiBuLl9lbnRpdHlCb3VuZHMoYSl9O2lmKHIhPT12b2lkIDApe3ZhciBvPW5ldyBNZC5FbnRpdHlTdG9yZTtyZXR1cm4gby5hZGRBbGwodGhpcy5fYnVpbGRMaWdodHdlaWdodFBsb3RFbnRpdGllcyhyKSxpLHRoaXMuX2xvY2FsT3JpZ2luQm91bmRzKCkpLG99ZWxzZSBpZih0aGlzLl9jYWNoZWRFbnRpdHlTdG9yZT09PXZvaWQgMCl7dmFyIG89bmV3IE1kLkVudGl0eVN0b3JlO28uYWRkQWxsKHRoaXMuX2J1aWxkTGlnaHR3ZWlnaHRQbG90RW50aXRpZXModGhpcy5kYXRhc2V0cygpKSxpLHRoaXMuX2xvY2FsT3JpZ2luQm91bmRzKCkpLHRoaXMuX2NhY2hlZEVudGl0eVN0b3JlPW99cmV0dXJuIHRoaXMuX2NhY2hlZEVudGl0eVN0b3JlfSx0LnByb3RvdHlwZS5fbG9jYWxPcmlnaW5Cb3VuZHM9ZnVuY3Rpb24oKXtyZXR1cm57dG9wTGVmdDp7eDowLHk6MH0sYm90dG9tUmlnaHQ6e3g6dGhpcy53aWR0aCgpLHk6dGhpcy5oZWlnaHQoKX19fSx0LnByb3RvdHlwZS5fZW50aXR5Qm91bmRzPWZ1bmN0aW9uKHIpe3ZhciBuPXIuZGF0dW0saT1yLmluZGV4LG89ci5kYXRhc2V0LGE9dGhpcy5fcGl4ZWxQb2ludChuLGksbykscz1hLngsbD1hLnk7cmV0dXJue3g6cyx5Omwsd2lkdGg6MCxoZWlnaHQ6MH19LHQucHJvdG90eXBlLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHk9ZnVuY3Rpb24ocil7dmFyIG49e2JvdW5kczp0aGlzLl9lbnRpdHlCb3VuZHMociksY29tcG9uZW50OnIuY29tcG9uZW50LGRhdGFzZXQ6ci5kYXRhc2V0LGRhdGFzZXRJbmRleDpyLmRhdGFzZXRJbmRleCxkYXR1bTpyLmRhdHVtLGluZGV4OnIuaW5kZXgscG9zaXRpb246ci5wb3NpdGlvbixzZWxlY3Rpb246U2Quc2VsZWN0KHIuZHJhd2VyLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXgoci52YWxpZERhdHVtSW5kZXgpKX07cmV0dXJuIG59LHQucHJvdG90eXBlLmVudGl0aWVzQXQ9ZnVuY3Rpb24ocil7dGhyb3cgbmV3IEVycm9yKCJwbG90cyBtdXN0IGltcGxlbWVudCBlbnRpdGllc0F0Iil9LHQucHJvdG90eXBlLmVudGl0eU5lYXJlc3Q9ZnVuY3Rpb24ocil7dmFyIG49dGhpcy5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdHlOZWFyZXN0KHIpO3JldHVybiBuPT09dm9pZCAwP3ZvaWQgMDp0aGlzLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkobil9LHQucHJvdG90eXBlLmVudGl0aWVzSW49ZnVuY3Rpb24ocixuKXt2YXIgaTtpZihuPT1udWxsKXt2YXIgbz1yO2k9e3g6by50b3BMZWZ0LngseTpvLnRvcExlZnQueSx3aWR0aDpvLmJvdHRvbVJpZ2h0Lngtby50b3BMZWZ0LngsaGVpZ2h0Om8uYm90dG9tUmlnaHQueS1vLnRvcExlZnQueX19ZWxzZXt2YXIgYT1yO2k9e3g6YS5taW4seTpuLm1pbix3aWR0aDphLm1heC1hLm1pbixoZWlnaHQ6bi5tYXgtbi5taW59fXJldHVybiB0aGlzLmVudGl0aWVzSW5Cb3VuZHMoaSl9LHQucHJvdG90eXBlLmVudGl0aWVzSW5Cb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPXRoaXMuX2dldEVudGl0eVN0b3JlKCkuZW50aXRpZXNJbkJvdW5kcyhyKTtpZighIWkpcmV0dXJuIGkubWFwKGZ1bmN0aW9uKG8pe3JldHVybiBuLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkobyl9KX0sdC5wcm90b3R5cGUuZW50aXRpZXNJblhCb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPXRoaXMuX2dldEVudGl0eVN0b3JlKCkuZW50aXRpZXNJblhCb3VuZHMocik7aWYoISFpKXJldHVybiBpLm1hcChmdW5jdGlvbihvKXtyZXR1cm4gbi5fbGlnaHR3ZWlnaHRQbG90RW50aXR5VG9QbG90RW50aXR5KG8pfSl9LHQucHJvdG90eXBlLmVudGl0aWVzSW5ZQm91bmRzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT10aGlzLl9nZXRFbnRpdHlTdG9yZSgpLmVudGl0aWVzSW5ZQm91bmRzKHIpO2lmKCEhaSlyZXR1cm4gaS5tYXAoZnVuY3Rpb24obyl7cmV0dXJuIG4uX2xpZ2h0d2VpZ2h0UGxvdEVudGl0eVRvUGxvdEVudGl0eShvKX0pfSx0LnByb3RvdHlwZS5fdW5pbnN0YWxsU2NhbGVGb3JLZXk9ZnVuY3Rpb24ocixuKXtyLm9mZlVwZGF0ZSh0aGlzLl9yZW5kZXJDYWxsYmFjayksci5vZmZVcGRhdGUodGhpcy5fZGVmZXJyZWRSZXNldEVudGl0eVN0b3JlKSxyLnJlbW92ZUluY2x1ZGVkVmFsdWVzUHJvdmlkZXIodGhpcy5faW5jbHVkZWRWYWx1ZXNQcm92aWRlcil9LHQucHJvdG90eXBlLl9pbnN0YWxsU2NhbGVGb3JLZXk9ZnVuY3Rpb24ocixuKXtyLm9uVXBkYXRlKHRoaXMuX3JlbmRlckNhbGxiYWNrKSxyLm9uVXBkYXRlKHRoaXMuX2RlZmVycmVkUmVzZXRFbnRpdHlTdG9yZSksci5hZGRJbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKHRoaXMuX2luY2x1ZGVkVmFsdWVzUHJvdmlkZXIpfSx0LnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7cmV0dXJue319LHQuX3NjYWxlZEFjY2Vzc29yPWZ1bmN0aW9uKHIpe3ZhciBuPXIuc2NhbGUsaT1yLmFjY2Vzc29yLG89ci5wb3N0U2NhbGUsYT1uPT1udWxsP2k6ZnVuY3Rpb24obCxjLHUpe3JldHVybiBuLnNjYWxlKGkobCxjLHUpKX0scz1vPT1udWxsP2E6ZnVuY3Rpb24obCxjLHUpe3JldHVybiBvKGEobCxjLHUpLGwsYyx1KX07cmV0dXJuIHN9LHQucHJvdG90eXBlLl9waXhlbFBvaW50PWZ1bmN0aW9uKHIsbixpKXtyZXR1cm57eDowLHk6MH19LHQucHJvdG90eXBlLl9hbmltYXRlT25OZXh0UmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGUmJnRoaXMuX2RhdGFDaGFuZ2VkfSx0Lk9QVElNSVpFX01FTU9JWkVfUFJPSkVDVE9SUz0hMSx0Ll9BTklNQVRJT05fTUFYX0RVUkFUSU9OPTYwMCx0fShJSGUuQ29tcG9uZW50KTtRRi5QbG90PXpIZTtmdW5jdGlvbiBvS3QoZSx0LHIpe3ZhciBuPXQuYWNjZXNzb3IsaT10LnNjYWxlO2lmKGk9PW51bGwpcmV0dXJuW107dmFyIG89ZS5kYXRhKCk7ciE9bnVsbCYmKG89by5maWx0ZXIoZnVuY3Rpb24obCxjKXtyZXR1cm4gcihsLGMsZSl9KSk7dmFyIGE9ZnVuY3Rpb24obCxjKXtyZXR1cm4gbihsLGMsZSl9LHM9by5tYXAoYSk7cmV0dXJuIGkuZXh0ZW50T2ZWYWx1ZXMocyl9fSk7dmFyIGFLdD1IKGFhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYWF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgRkhlPShkZSgpLFV0KHBlKSksQkhlPW5zKCksSEhlPUZlKCksVkhlPXpvdCgpLFVIZT1mdW5jdGlvbihlKXtGSGUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3JldHVybiBlIT09bnVsbCYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIHQucHJvdG90eXBlLmVudGl0eU5lYXJlc3Q9ZnVuY3Rpb24ocil7dmFyIG4saT0xLzA7cmV0dXJuIHRoaXMuY29tcG9uZW50cygpLmZvckVhY2goZnVuY3Rpb24obyl7dmFyIGE9byxzPWEuZW50aXR5TmVhcmVzdChyKTtpZihzIT1udWxsKXt2YXIgbD1ISGUuTWF0aC5kaXN0YW5jZVNxdWFyZWQocy5wb3NpdGlvbixyKTtsPD1pJiYoaT1sLG49cyl9fSksbn0sdC5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKHIpe2lmKHIhPW51bGwmJiEociBpbnN0YW5jZW9mIEJIZS5QbG90KSl0aHJvdyBuZXcgRXJyb3IoIlBsb3QgR3JvdXAgb25seSBhY2NlcHRzIHBsb3RzIik7cmV0dXJuIGUucHJvdG90eXBlLmFwcGVuZC5jYWxsKHRoaXMsciksdGhpc30sdH0oVkhlLkdyb3VwKTthYXQuUGxvdEdyb3VwPVVIZX0pO3ZhciBzS3Q9SChzYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHNhdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHFIZT0oZGUoKSxVdChwZSkpLHF1PShFcigpLFV0KE1yKSksR289RmUoKSxHSGU9V0YoKSxXSGU9ZnVuY3Rpb24oZSl7cUhlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9W10pO3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fcm93UGFkZGluZz0wLG4uX2NvbHVtblBhZGRpbmc9MCxuLl9yb3dzPVtdLG4uX3Jvd1dlaWdodHM9W10sbi5fY29sdW1uV2VpZ2h0cz1bXSxuLl9uUm93cz0wLG4uX25Db2xzPTAsbi5fY2FsY3VsYXRlZExheW91dD1udWxsLG4uYWRkQ2xhc3MoInRhYmxlIiksci5mb3JFYWNoKGZ1bmN0aW9uKGksbyl7aS5mb3JFYWNoKGZ1bmN0aW9uKGEscyl7YSE9bnVsbCYmbi5hZGQoYSxvLHMpfSl9KSxufXJldHVybiB0LnByb3RvdHlwZS5fZm9yRWFjaD1mdW5jdGlvbihyKXtmb3IodmFyIG49MDtuPHRoaXMuX25Sb3dzO24rKylmb3IodmFyIGk9MDtpPHRoaXMuX25Db2xzO2krKyl0aGlzLl9yb3dzW25dW2ldIT1udWxsJiZyKHRoaXMuX3Jvd3Nbbl1baV0pfSx0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24ocil7Zm9yKHZhciBuPTA7bjx0aGlzLl9uUm93cztuKyspZm9yKHZhciBpPTA7aTx0aGlzLl9uQ29scztpKyspaWYodGhpcy5fcm93c1tuXVtpXT09PXIpcmV0dXJuITA7cmV0dXJuITF9LHQucHJvdG90eXBlLmNvbXBvbmVudEF0PWZ1bmN0aW9uKHIsbil7cmV0dXJuIHI8MHx8cj49dGhpcy5fblJvd3N8fG48MHx8bj49dGhpcy5fbkNvbHM/bnVsbDp0aGlzLl9yb3dzW3JdW25dfSx0LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocixuLGkpe2lmKHI9PW51bGwpdGhyb3cgRXJyb3IoIkNhbm5vdCBhZGQgbnVsbCB0byBhIHRhYmxlIGNlbGwiKTtpZighdGhpcy5oYXMocikpe3ZhciBvPXRoaXMuX3Jvd3Nbbl0mJnRoaXMuX3Jvd3Nbbl1baV07aWYobyE9bnVsbCl0aHJvdyBuZXcgRXJyb3IoImNlbGwgaXMgb2NjdXBpZWQiKTtyLmRldGFjaCgpLHRoaXMuX25Sb3dzPU1hdGgubWF4KG4rMSx0aGlzLl9uUm93cyksdGhpcy5fbkNvbHM9TWF0aC5tYXgoaSsxLHRoaXMuX25Db2xzKSx0aGlzLl9wYWRUYWJsZVRvU2l6ZSh0aGlzLl9uUm93cyx0aGlzLl9uQ29scyksdGhpcy5fcm93c1tuXVtpXT1yLHRoaXMuX2Fkb3B0QW5kQW5jaG9yKHIpLHRoaXMucmVkcmF3KCl9cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLl9yZW1vdmU9ZnVuY3Rpb24ocil7Zm9yKHZhciBuPTA7bjx0aGlzLl9uUm93cztuKyspZm9yKHZhciBpPTA7aTx0aGlzLl9uQ29scztpKyspaWYodGhpcy5fcm93c1tuXVtpXT09PXIpcmV0dXJuIHRoaXMuX3Jvd3Nbbl1baV09bnVsbCwhMDtyZXR1cm4hMX0sdC5wcm90b3R5cGUuX2l0ZXJhdGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe2k9PT12b2lkIDAmJihpPSExKTtmb3IodmFyIG89dGhpcy5fcm93cyxhPXF1LnRyYW5zcG9zZSh0aGlzLl9yb3dzKSxzPXItdGhpcy5fY29sdW1uUGFkZGluZyoodGhpcy5fbkNvbHMtMSksbD1uLXRoaXMuX3Jvd1BhZGRpbmcqKHRoaXMuX25Sb3dzLTEpLGM9dC5fY2FsY0NvbXBvbmVudFdlaWdodHModGhpcy5fcm93V2VpZ2h0cyxvLGZ1bmN0aW9uKHope3JldHVybiB6PT1udWxsfHx6LmZpeGVkSGVpZ2h0KCl9KSx1PXQuX2NhbGNDb21wb25lbnRXZWlnaHRzKHRoaXMuX2NvbHVtbldlaWdodHMsYSxmdW5jdGlvbih6KXtyZXR1cm4gej09bnVsbHx8ei5maXhlZFdpZHRoKCl9KSxoPXUubWFwKGZ1bmN0aW9uKHope3JldHVybiB6PT09MD8uNTp6fSksZj1jLm1hcChmdW5jdGlvbih6KXtyZXR1cm4gej09PTA/LjU6en0pLHA9dC5fY2FsY1Byb3BvcnRpb25hbFNwYWNlKGgscyksZD10Ll9jYWxjUHJvcG9ydGlvbmFsU3BhY2UoZixsKSxnPUdvLkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KDAsdGhpcy5fbkNvbHMpLF89R28uQXJyYXkuY3JlYXRlRmlsbGVkQXJyYXkoMCx0aGlzLl9uUm93cykseSx4LGI9MCxTLEMsUDs7KXt2YXIgaz1Hby5BcnJheS5hZGQoXyxkKSxPPUdvLkFycmF5LmFkZChnLHApO1M9dGhpcy5fZGV0ZXJtaW5lR3VhcmFudGVlcyhPLGssaSksZz1TLmd1YXJhbnRlZWRXaWR0aHMsXz1TLmd1YXJhbnRlZWRIZWlnaHRzLEM9Uy53YW50c1dpZHRoQXJyLnNvbWUoZnVuY3Rpb24oeil7cmV0dXJuIHp9KSxQPVMud2FudHNIZWlnaHRBcnIuc29tZShmdW5jdGlvbih6KXtyZXR1cm4gen0pO3ZhciBEPXksQj14O3k9cy1xdS5zdW0oUy5ndWFyYW50ZWVkV2lkdGhzKSx4PWwtcXUuc3VtKFMuZ3VhcmFudGVlZEhlaWdodHMpO3ZhciBJPXZvaWQgMDtDPyhJPVMud2FudHNXaWR0aEFyci5tYXAoZnVuY3Rpb24oeil7cmV0dXJuIHo/LjE6MH0pLEk9R28uQXJyYXkuYWRkKEksdSkpOkk9dTt2YXIgTD12b2lkIDA7UD8oTD1TLndhbnRzSGVpZ2h0QXJyLm1hcChmdW5jdGlvbih6KXtyZXR1cm4gej8uMTowfSksTD1Hby5BcnJheS5hZGQoTCxjKSk6TD1jLHA9dC5fY2FsY1Byb3BvcnRpb25hbFNwYWNlKEkseSksZD10Ll9jYWxjUHJvcG9ydGlvbmFsU3BhY2UoTCx4KSxiKys7dmFyIFI9eT4wJiZ5IT09RCxGPXg+MCYmeCE9PUI7aWYoIShSfHxGKXx8Yj41KWJyZWFrfXJldHVybiB5PXMtcXUuc3VtKFMuZ3VhcmFudGVlZFdpZHRocykseD1sLXF1LnN1bShTLmd1YXJhbnRlZWRIZWlnaHRzKSxwPXQuX2NhbGNQcm9wb3J0aW9uYWxTcGFjZSh1LHkpLGQ9dC5fY2FsY1Byb3BvcnRpb25hbFNwYWNlKGMseCkse2NvbFByb3BvcnRpb25hbFNwYWNlOnAscm93UHJvcG9ydGlvbmFsU3BhY2U6ZCxndWFyYW50ZWVkV2lkdGhzOlMuZ3VhcmFudGVlZFdpZHRocyxndWFyYW50ZWVkSGVpZ2h0czpTLmd1YXJhbnRlZWRIZWlnaHRzLHdhbnRzV2lkdGg6Qyx3YW50c0hlaWdodDpQfX0sdC5wcm90b3R5cGUuX2RldGVybWluZUd1YXJhbnRlZXM9ZnVuY3Rpb24ocixuLGkpe2k9PT12b2lkIDAmJihpPSExKTt2YXIgbz1Hby5BcnJheS5jcmVhdGVGaWxsZWRBcnJheSgwLHRoaXMuX25Db2xzKSxhPUdvLkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KDAsdGhpcy5fblJvd3MpLHM9R28uQXJyYXkuY3JlYXRlRmlsbGVkQXJyYXkoITEsdGhpcy5fbkNvbHMpLGw9R28uQXJyYXkuY3JlYXRlRmlsbGVkQXJyYXkoITEsdGhpcy5fblJvd3MpO3JldHVybiB0aGlzLl9yb3dzLmZvckVhY2goZnVuY3Rpb24oYyx1KXtjLmZvckVhY2goZnVuY3Rpb24oaCxmKXt2YXIgcDtoIT1udWxsP3A9aC5yZXF1ZXN0ZWRTcGFjZShyW2ZdLG5bdV0pOnA9e21pbldpZHRoOjAsbWluSGVpZ2h0OjB9O3ZhciBkPWk/TWF0aC5taW4ocC5taW5XaWR0aCxyW2ZdKTpwLm1pbldpZHRoO29bZl09TWF0aC5tYXgob1tmXSxkKTt2YXIgZz1pP01hdGgubWluKHAubWluSGVpZ2h0LG5bdV0pOnAubWluSGVpZ2h0O2FbdV09TWF0aC5tYXgoYVt1XSxnKTt2YXIgXz1wLm1pbldpZHRoPnJbZl07c1tmXT1zW2ZdfHxfO3ZhciB5PXAubWluSGVpZ2h0Pm5bdV07bFt1XT1sW3VdfHx5fSl9KSx7Z3VhcmFudGVlZFdpZHRoczpvLGd1YXJhbnRlZWRIZWlnaHRzOmEsd2FudHNXaWR0aEFycjpzLHdhbnRzSGVpZ2h0QXJyOmx9fSx0LnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbihyLG4pe3JldHVybiB0aGlzLl9jYWxjdWxhdGVkTGF5b3V0PXRoaXMuX2l0ZXJhdGVMYXlvdXQocixuKSx7bWluV2lkdGg6cXUuc3VtKHRoaXMuX2NhbGN1bGF0ZWRMYXlvdXQuZ3VhcmFudGVlZFdpZHRocyksbWluSGVpZ2h0OnF1LnN1bSh0aGlzLl9jYWxjdWxhdGVkTGF5b3V0Lmd1YXJhbnRlZWRIZWlnaHRzKX19LHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXM7ZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMscixuLGkpO3ZhciBhPXF1LnN1bSh0aGlzLl9jYWxjdWxhdGVkTGF5b3V0Lmd1YXJhbnRlZWRXaWR0aHMpLHM9cXUuc3VtKHRoaXMuX2NhbGN1bGF0ZWRMYXlvdXQuZ3VhcmFudGVlZEhlaWdodHMpLGw9dGhpcy5fY2FsY3VsYXRlZExheW91dDsoYT50aGlzLndpZHRoKCl8fHM+dGhpcy5oZWlnaHQoKSkmJihsPXRoaXMuX2l0ZXJhdGVMYXlvdXQodGhpcy53aWR0aCgpLHRoaXMuaGVpZ2h0KCksITApKTt2YXIgYz0wLHU9R28uQXJyYXkuYWRkKGwucm93UHJvcG9ydGlvbmFsU3BhY2UsbC5ndWFyYW50ZWVkSGVpZ2h0cyksaD1Hby5BcnJheS5hZGQobC5jb2xQcm9wb3J0aW9uYWxTcGFjZSxsLmd1YXJhbnRlZWRXaWR0aHMpO3JldHVybiB0aGlzLl9yb3dzLmZvckVhY2goZnVuY3Rpb24oZixwKXt2YXIgZD0wO2YuZm9yRWFjaChmdW5jdGlvbihnLF8pe2chPW51bGwmJmcuY29tcHV0ZUxheW91dCh7eDpkLHk6Y30saFtfXSx1W3BdKSxkKz1oW19dK28uX2NvbHVtblBhZGRpbmd9KSxjKz11W3BdK28uX3Jvd1BhZGRpbmd9KSx0aGlzfSx0LnByb3RvdHlwZS5yb3dQYWRkaW5nPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3Jvd1BhZGRpbmc7aWYoIUdvLk1hdGguaXNWYWxpZE51bWJlcihyKXx8cjwwKXRocm93IEVycm9yKCJyb3dQYWRkaW5nIG11c3QgYmUgYSBub24tbmVnYXRpdmUgZmluaXRlIHZhbHVlIik7cmV0dXJuIHRoaXMuX3Jvd1BhZGRpbmc9cix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLmNvbHVtblBhZGRpbmc9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fY29sdW1uUGFkZGluZztpZighR28uTWF0aC5pc1ZhbGlkTnVtYmVyKHIpfHxyPDApdGhyb3cgRXJyb3IoImNvbHVtblBhZGRpbmcgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBmaW5pdGUgdmFsdWUiKTtyZXR1cm4gdGhpcy5fY29sdW1uUGFkZGluZz1yLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUucm93V2VpZ2h0PWZ1bmN0aW9uKHIsbil7aWYobj09bnVsbClyZXR1cm4gdGhpcy5fcm93V2VpZ2h0c1tyXTtpZighR28uTWF0aC5pc1ZhbGlkTnVtYmVyKG4pfHxuPDApdGhyb3cgRXJyb3IoInJvd1dlaWdodCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGZpbml0ZSB2YWx1ZSIpO3JldHVybiB0aGlzLl9yb3dXZWlnaHRzW3JdPW4sdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5jb2x1bW5XZWlnaHQ9ZnVuY3Rpb24ocixuKXtpZihuPT1udWxsKXJldHVybiB0aGlzLl9jb2x1bW5XZWlnaHRzW3JdO2lmKCFHby5NYXRoLmlzVmFsaWROdW1iZXIobil8fG48MCl0aHJvdyBFcnJvcigiY29sdW1uV2VpZ2h0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgZmluaXRlIHZhbHVlIik7cmV0dXJuIHRoaXMuX2NvbHVtbldlaWdodHNbcl09bix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXt2YXIgcj1xdS50cmFuc3Bvc2UodGhpcy5fcm93cyk7cmV0dXJuIHQuX2ZpeGVkU3BhY2UocixmdW5jdGlvbihuKXtyZXR1cm4gbj09bnVsbHx8bi5maXhlZFdpZHRoKCl9KX0sdC5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdC5fZml4ZWRTcGFjZSh0aGlzLl9yb3dzLGZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsfHxyLmZpeGVkSGVpZ2h0KCl9KX0sdC5wcm90b3R5cGUuX3BhZFRhYmxlVG9TaXplPWZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPTA7aTxyO2krKyl7dGhpcy5fcm93c1tpXT09PXZvaWQgMCYmKHRoaXMuX3Jvd3NbaV09W10sdGhpcy5fcm93V2VpZ2h0c1tpXT1udWxsKTtmb3IodmFyIG89MDtvPG47bysrKXRoaXMuX3Jvd3NbaV1bb109PT12b2lkIDAmJih0aGlzLl9yb3dzW2ldW29dPW51bGwpfWZvcih2YXIgbz0wO288bjtvKyspdGhpcy5fY29sdW1uV2VpZ2h0c1tvXT09PXZvaWQgMCYmKHRoaXMuX2NvbHVtbldlaWdodHNbb109bnVsbCl9LHQuX2NhbGNDb21wb25lbnRXZWlnaHRzPWZ1bmN0aW9uKHIsbixpKXtyZXR1cm4gci5tYXAoZnVuY3Rpb24obyxhKXtpZihvIT1udWxsKXJldHVybiBvO3ZhciBzPW5bYV0ubWFwKGkpLGw9cy5yZWR1Y2UoZnVuY3Rpb24oYyx1KXtyZXR1cm4gYyYmdX0sITApO3JldHVybiBsPzA6MX0pfSx0Ll9jYWxjUHJvcG9ydGlvbmFsU3BhY2U9ZnVuY3Rpb24ocixuKXt2YXIgaT1xdS5zdW0ocik7cmV0dXJuIGk9PT0wP0dvLkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KDAsci5sZW5ndGgpOnIubWFwKGZ1bmN0aW9uKG8pe3JldHVybiBuKm8vaX0pfSx0Ll9maXhlZFNwYWNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVkdWNlKGZ1bmN0aW9uKHMsbCl7cmV0dXJuIHMmJmx9LCEwKX0sbz1mdW5jdGlvbihhKXtyZXR1cm4gaShhLm1hcChuKSl9O3JldHVybiBpKHIubWFwKG8pKX0sdH0oR0hlLkNvbXBvbmVudENvbnRhaW5lcik7c2F0LlRhYmxlPVdIZX0pO3ZhciBsS3Q9SChsYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGxhdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFlIZT0oZGUoKSxVdChwZSkpLGpIZT1Wb3QoKSxYSGU9MiwkSGU9ZnVuY3Rpb24oZSl7WUhlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lIT09bnVsbCYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIHIuX21heExpbmVzPVhIZSxyfXJldHVybiB0LnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbihyLG4pe3RoaXMuX3dyYXBwZXIubWF4TGluZXModGhpcy5fbWF4TGluZXMpO3ZhciBpPXRoaXMuYW5nbGUoKT09PTA/cjpuO2k9PT0wJiYoaT0xLzApO3ZhciBvPXRoaXMuX3dyYXBwZXIud3JhcCh0aGlzLl90ZXh0LHRoaXMuX21lYXN1cmVyLGkpLGE9dGhpcy5fbWVhc3VyZXIubWVhc3VyZShvLndyYXBwZWRUZXh0KSxzPSh0aGlzLmFuZ2xlKCk9PT0wP2Eud2lkdGg6YS5oZWlnaHQpKzIqdGhpcy5wYWRkaW5nKCksbD0odGhpcy5hbmdsZSgpPT09MD9hLmhlaWdodDphLndpZHRoKSsyKnRoaXMucGFkZGluZygpO3JldHVybnttaW5XaWR0aDpzLG1pbkhlaWdodDpsfX0sdC5wcm90b3R5cGUubWF4TGluZXM9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0wP3RoaXMuX21heExpbmVzOih0aGlzLl9tYXhMaW5lcz1yLHRoaXMucmVkcmF3KCksdGhpcyl9LHR9KGpIZS5MYWJlbCk7bGF0LldyYXBwZWRMYWJlbD0kSGV9KTt2YXIgY0t0PUgoY2F0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShjYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBLSGU9KGRlKCksVXQocGUpKSxaSGU9cUYoKSxKSGU9ZnVuY3Rpb24oZSl7S0hlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuYWRkQ2xhc3MoIngtZHJhZy1ib3gtbGF5ZXIiKSxyLl9oYXNDb3JuZXJzPSExLHJ9cmV0dXJuIHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe3JldHVybiBlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSksdGhpcy5fc2V0Qm91bmRzKHRoaXMuYm91bmRzKCkpLHRoaXN9LHQucHJvdG90eXBlLl9zZXRCb3VuZHM9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX3NldEJvdW5kcy5jYWxsKHRoaXMse3RvcExlZnQ6e3g6ci50b3BMZWZ0LngseTowfSxib3R0b21SaWdodDp7eDpyLmJvdHRvbVJpZ2h0LngseTp0aGlzLmhlaWdodCgpfX0pfSx0LnByb3RvdHlwZS5fc2V0UmVzaXphYmxlQ2xhc3Nlcz1mdW5jdGlvbihyKXtyJiZ0aGlzLmVuYWJsZWQoKT90aGlzLmFkZENsYXNzKCJ4LXJlc2l6YWJsZSIpOnRoaXMucmVtb3ZlQ2xhc3MoIngtcmVzaXphYmxlIil9LHQucHJvdG90eXBlLnlTY2FsZT1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiBlLnByb3RvdHlwZS55U2NhbGUuY2FsbCh0aGlzKTt0aHJvdyBuZXcgRXJyb3IoInlTY2FsZXMgY2Fubm90IGJlIHNldCBvbiBhbiBYRHJhZ0JveExheWVyIil9LHQucHJvdG90eXBlLnlFeHRlbnQ9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gZS5wcm90b3R5cGUueUV4dGVudC5jYWxsKHRoaXMpO3Rocm93IG5ldyBFcnJvcigiWERyYWdCb3hMYXllciBoYXMgbm8geUV4dGVudCIpfSx0fShaSGUuRHJhZ0JveExheWVyKTtjYXQuWERyYWdCb3hMYXllcj1KSGV9KTt2YXIgdUt0PUgodWF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh1YXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBRSGU9KGRlKCksVXQocGUpKSx0VmU9cUYoKSxlVmU9ZnVuY3Rpb24oZSl7UUhlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuYWRkQ2xhc3MoInktZHJhZy1ib3gtbGF5ZXIiKSxyLl9oYXNDb3JuZXJzPSExLHJ9cmV0dXJuIHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe3JldHVybiBlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSksdGhpcy5fc2V0Qm91bmRzKHRoaXMuYm91bmRzKCkpLHRoaXN9LHQucHJvdG90eXBlLl9zZXRCb3VuZHM9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX3NldEJvdW5kcy5jYWxsKHRoaXMse3RvcExlZnQ6e3g6MCx5OnIudG9wTGVmdC55fSxib3R0b21SaWdodDp7eDp0aGlzLndpZHRoKCkseTpyLmJvdHRvbVJpZ2h0Lnl9fSl9LHQucHJvdG90eXBlLl9zZXRSZXNpemFibGVDbGFzc2VzPWZ1bmN0aW9uKHIpe3ImJnRoaXMuZW5hYmxlZCgpP3RoaXMuYWRkQ2xhc3MoInktcmVzaXphYmxlIik6dGhpcy5yZW1vdmVDbGFzcygieS1yZXNpemFibGUiKX0sdC5wcm90b3R5cGUueFNjYWxlPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIGUucHJvdG90eXBlLnhTY2FsZS5jYWxsKHRoaXMpO3Rocm93IG5ldyBFcnJvcigieFNjYWxlcyBjYW5ub3QgYmUgc2V0IG9uIGFuIFlEcmFnQm94TGF5ZXIiKX0sdC5wcm90b3R5cGUueEV4dGVudD1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiBlLnByb3RvdHlwZS54RXh0ZW50LmNhbGwodGhpcyk7dGhyb3cgbmV3IEVycm9yKCJZRHJhZ0JveExheWVyIGhhcyBubyB4RXh0ZW50Iil9LHR9KHRWZS5EcmFnQm94TGF5ZXIpO3VhdC5ZRHJhZ0JveExheWVyPWVWZX0pO3ZhciBQb3Q9SCh5YT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeWEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBEcz0oZGUoKSxVdChwZSkpO0RzLl9fZXhwb3J0U3RhcihxRigpLHlhKTtEcy5fX2V4cG9ydFN0YXIoSSR0KCkseWEpO0RzLl9fZXhwb3J0U3RhcihMJHQoKSx5YSk7RHMuX19leHBvcnRTdGFyKHpvdCgpLHlhKTtEcy5fX2V4cG9ydFN0YXIoTG90KCkseWEpO0RzLl9fZXhwb3J0U3RhcihSJHQoKSx5YSk7RHMuX19leHBvcnRTdGFyKFZvdCgpLHlhKTtEcy5fX2V4cG9ydFN0YXIoTiR0KCkseWEpO0RzLl9fZXhwb3J0U3RhcihhS3QoKSx5YSk7RHMuX19leHBvcnRTdGFyKFRvdCgpLHlhKTtEcy5fX2V4cG9ydFN0YXIoc0t0KCkseWEpO0RzLl9fZXhwb3J0U3RhcihsS3QoKSx5YSk7RHMuX19leHBvcnRTdGFyKGNLdCgpLHlhKTtEcy5fX2V4cG9ydFN0YXIodUt0KCkseWEpfSk7dmFyIGZhdD1IKGhhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaGF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgclZlPShkZSgpLFV0KHBlKSksblZlPU9mKCksaVZlPWZ1bmN0aW9uKGUpe3JWZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7cmV0dXJuIGUuY2FsbCh0aGlzLCJwYXRoIiwiYXJjIGZpbGwiKXx8dGhpc31yZXR1cm4gdC5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdEF0dHJpYnV0ZXM9ZnVuY3Rpb24ocil7ci5zdHlsZSgic3Ryb2tlIiwibm9uZSIpfSx0fShuVmUuU1ZHRHJhd2VyKTtoYXQuQXJjU1ZHRHJhd2VyPWlWZX0pO3ZhciBkYXQ9SChwYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHBhdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG9WZT0oZGUoKSxVdChwZSkpLGFWZT1PZigpLHNWZT1mdW5jdGlvbihlKXtvVmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3JldHVybiBlLmNhbGwodGhpcywicGF0aCIsImFyYyBvdXRsaW5lIil8fHRoaXN9cmV0dXJuIHQucHJvdG90eXBlLl9hcHBseURlZmF1bHRBdHRyaWJ1dGVzPWZ1bmN0aW9uKHIpe3Iuc3R5bGUoImZpbGwiLCJub25lIil9LHR9KGFWZS5TVkdEcmF3ZXIpO3BhdC5BcmNPdXRsaW5lU1ZHRHJhd2VyPXNWZX0pO3ZhciBtYXQ9SChlQj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZUIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBsVmU9KGRlKCksVXQocGUpKSx0Qj1CdigpLGNWZT1PZigpLHVWZT1mdW5jdGlvbihlKXtsVmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3JldHVybiBlLmNhbGwodGhpcywicGF0aCIsImFyZWEiKXx8dGhpc31yZXR1cm4gdC5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdEF0dHJpYnV0ZXM9ZnVuY3Rpb24ocil7ci5zdHlsZSgic3Ryb2tlIiwibm9uZSIpfSx0LnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4PWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4LmNhbGwodGhpcywwKX0sdH0oY1ZlLlNWR0RyYXdlcik7ZUIuQXJlYVNWR0RyYXdlcj11VmU7dmFyIGhWZT1bIm9wYWNpdHkiLCJmaWxsIiwiZmlsbC1vcGFjaXR5Il0sZlZlPVsib3BhY2l0eSIsInN0cm9rZSIsInN0cm9rZS13aWR0aCJdO2Z1bmN0aW9uIHBWZShlLHQpe3JldHVybiBmdW5jdGlvbihyLG4saSl7dmFyIG89dEIucmVzb2x2ZUF0dHJpYnV0ZXMoaSxoVmUsblswXSwwKTt0Qi5yZW5kZXJBcmVhKHIsZSgpLG5bMF0sbyk7dmFyIGE9dEIucmVzb2x2ZUF0dHJpYnV0ZXMoaSxmVmUsblswXSwwKTt0Qi5yZW5kZXJMaW5lKHIsdCgpLG5bMF0sYSl9fWVCLm1ha2VBcmVhQ2FudmFzRHJhd1N0ZXA9cFZlfSk7dmFyIG5CPUgockI9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHJCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZFZlPShkZSgpLFV0KHBlKSksaEt0PUJ2KCksbVZlPU9mKCksZ1ZlPWZ1bmN0aW9uKGUpe2RWZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7cmV0dXJuIGUuY2FsbCh0aGlzLCJwYXRoIiwibGluZSIpfHx0aGlzfXJldHVybiB0LnByb3RvdHlwZS5fYXBwbHlEZWZhdWx0QXR0cmlidXRlcz1mdW5jdGlvbihyKXtyLnN0eWxlKCJmaWxsIiwibm9uZSIpfSx0LnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4PWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4LmNhbGwodGhpcywwKX0sdH0obVZlLlNWR0RyYXdlcik7ckIuTGluZVNWR0RyYXdlcj1nVmU7dmFyIF9WZT1bIm9wYWNpdHkiLCJzdHJva2Utb3BhY2l0eSIsInN0cm9rZS13aWR0aCIsInN0cm9rZSIsInN0cm9rZS1kYXNoYXJyYXkiXTtmdW5jdGlvbiB5VmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXt2YXIgaT1oS3QucmVzb2x2ZUF0dHJpYnV0ZXMobixfVmUsclswXSwwKTtoS3QucmVuZGVyTGluZSh0LGUoKSxyWzBdLGkpfX1yQi5tYWtlTGluZUNhbnZhc0RyYXdTdGVwPXlWZX0pO3ZhciBvQj1IKFBTPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShQUywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGZLdD0oZGUoKSxVdChwZSkpLGlCPUJ2KCksdlZlPU9mKCkseFZlPWZ1bmN0aW9uKGUpe2ZLdC5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3I9PT12b2lkIDAmJihyPSIiKTt2YXIgbj1lLmNhbGwodGhpcywicmVjdCIsIiIpfHx0aGlzO3JldHVybiBuLl9yb290Q2xhc3NOYW1lPXIsbi5fcm9vdC5jbGFzc2VkKG4uX3Jvb3RDbGFzc05hbWUsITApLG59cmV0dXJuIHR9KHZWZS5TVkdEcmF3ZXIpO1BTLlJlY3RhbmdsZVNWR0RyYXdlcj14VmU7dmFyIGJWZT1pQi5Db250ZXh0U3R5bGVBdHRycy5jb25jYXQoWyJ4IiwieSIsIndpZHRoIiwiaGVpZ2h0Il0pO1BTLlJlY3RhbmdsZUNhbnZhc0RyYXdTdGVwPWZ1bmN0aW9uKGUsdCxyKXtlLnNhdmUoKTtmb3IodmFyIG49dC5sZW5ndGgsaT0wO2k8bjtpKyspe3ZhciBvPXRbaV07aWYobyE9bnVsbCl7dmFyIGE9aUIucmVzb2x2ZUF0dHJpYnV0ZXMocixiVmUsbyxpKTtlLmJlZ2luUGF0aCgpLGUucmVjdChhLngsYS55LGEud2lkdGgsYS5oZWlnaHQpLGlCLnJlbmRlclBhdGhXaXRoU3R5bGUoZSxhKX19ZS5yZXN0b3JlKCl9O3ZhciB3VmU9ZnVuY3Rpb24oZSl7Zkt0Ll9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cmV0dXJuIGUuY2FsbCh0aGlzLHIsUFMuUmVjdGFuZ2xlQ2FudmFzRHJhd1N0ZXApfHx0aGlzfXJldHVybiB0fShpQi5DYW52YXNEcmF3ZXIpO1BTLlJlY3RhbmdsZUNhbnZhc0RyYXdlcj13VmV9KTt2YXIgX2F0PUgoZ2F0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShnYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBTVmU9KGRlKCksVXQocGUpKSxNVmU9T2YoKSxFVmU9ZnVuY3Rpb24oZSl7U1ZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXtyZXR1cm4gZS5jYWxsKHRoaXMsImxpbmUiLCIiKXx8dGhpc31yZXR1cm4gdH0oTVZlLlNWR0RyYXdlcik7Z2F0LlNlZ21lbnRTVkdEcmF3ZXI9RVZlfSk7dmFyIHBLdD1IKHlhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeWF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgVFZlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7bj09PXZvaWQgMCYmKG49d2luZG93LmRldmljZVBpeGVsUmF0aW8pLHRoaXMuc2NyZWVuV2lkdGg9dCx0aGlzLnNjcmVlbkhlaWdodD1yLHRoaXMuZGV2aWNlUGl4ZWxSYXRpbz1uLHRoaXMucGl4ZWxXaWR0aD10Km4sdGhpcy5waXhlbEhlaWdodD1yKm4sdGhpcy5jYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksdGhpcy5jdHg9dGhpcy5jYW52YXMuZ2V0Q29udGV4dCgiMmQiKSxlLnNpemVQaXhlbHModGhpcy5jdHgsdCxyLG4pfXJldHVybiBlLnNpemVQaXhlbHM9ZnVuY3Rpb24odCxyLG4saSl7dmFyIG89dC5jYW52YXM7by53aWR0aD1yKmksby5oZWlnaHQ9bippLG8uc3R5bGUud2lkdGg9cisicHgiLG8uc3R5bGUuaGVpZ2h0PW4rInB4Iix0LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksdC5zY2FsZShpLGkpfSxlLnByb3RvdHlwZS5ibGl0PWZ1bmN0aW9uKHQscixuKXtyPT09dm9pZCAwJiYocj0wKSxuPT09dm9pZCAwJiYobj0wKSx0LmRyYXdJbWFnZSh0aGlzLmNhbnZhcyxyLG4sdGhpcy5zY3JlZW5XaWR0aCx0aGlzLnNjcmVlbkhlaWdodCl9LGUucHJvdG90eXBlLmJsaXRDZW50ZXI9ZnVuY3Rpb24odCxyLG4pe3I9PT12b2lkIDAmJihyPTApLG49PT12b2lkIDAmJihuPTApLHRoaXMuYmxpdCh0LE1hdGguZmxvb3Ioci10aGlzLnNjcmVlbldpZHRoLzIpLE1hdGguZmxvb3Iobi10aGlzLnNjcmVlbkhlaWdodC8yKSl9LGUucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbih0LHIsbil7bj09PXZvaWQgMCYmKG49ITEpO3ZhciBpPXRoaXMuZGV2aWNlUGl4ZWxSYXRpbztyZXR1cm4gdGhpcy5zY3JlZW5XaWR0aD10LHRoaXMuc2NyZWVuSGVpZ2h0PXIsdGhpcy5waXhlbFdpZHRoPXQqaSx0aGlzLnBpeGVsSGVpZ2h0PXIqaSxlLnNpemVQaXhlbHModGhpcy5jdHgsdCxyLGkpLG4mJnRoaXMuY3R4LnRyYW5zbGF0ZSh0LzIsdC8yKSx0aGlzfSxlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbih0KXt2YXIgcj10aGlzLG49ci5waXhlbFdpZHRoLGk9ci5waXhlbEhlaWdodCxvPXIuY3R4O3JldHVybiBvLnNhdmUoKSxvLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksdD09bnVsbD9vLmNsZWFyUmVjdCgwLDAsbixpKTooby5maWxsU3R5bGU9dCxvLmZpbGxSZWN0KDAsMCxuLGkpKSxvLnJlc3RvcmUoKSx0aGlzfSxlLnByb3RvdHlwZS5nZXRJbWFnZURhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdHguZ2V0SW1hZ2VEYXRhKDAsMCx0aGlzLnBpeGVsV2lkdGgsdGhpcy5waXhlbEhlaWdodCl9LGV9KCk7eWF0LkNhbnZhc0J1ZmZlcj1UVmV9KTt2YXIgdmF0PUgoYUI9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGFCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgQ1ZlPShkZSgpLFV0KHBlKSksbTQ9QnYoKSxBVmU9cEt0KCksUFZlPU9mKCksSVZlPWZ1bmN0aW9uKGUpe0NWZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7cmV0dXJuIGUuY2FsbCh0aGlzLCJwYXRoIiwic3ltYm9sIil8fHRoaXN9cmV0dXJuIHR9KFBWZS5TVkdEcmF3ZXIpO2FCLlN5bWJvbFNWR0RyYXdlcj1JVmU7dmFyIExWZT1tNC5Db250ZXh0U3R5bGVBdHRycy5jb25jYXQoWyJ4IiwieSJdKTtmdW5jdGlvbiBrVmUoZSx0LHIsbil7dmFyIGk9dGhpcztyZXR1cm4gZnVuY3Rpb24obyxhLHMpe2Zvcih2YXIgbD1vLmNhbnZhcyxjPWwuY2xpZW50V2lkdGgsdT1sLmNsaWVudEhlaWdodCxoPW49PT12b2lkIDA/bmV3IEFWZS5DYW52YXNCdWZmZXIoMCwwKTpuLGY9dCgpLHA9cigpLGQ9bnVsbCxnPW51bGwsXz1udWxsLHk9MDt5PGEubGVuZ3RoO3krKyl7dmFyIHg9YVt5XTtpZih4IT1udWxsKXt2YXIgYj1tNC5yZXNvbHZlQXR0cmlidXRlcyhzLExWZSx4LHkpLFM9cCh4LHksZSk7aWYoISFSVmUoYyx1LGIueCxiLnksUykpe3ZhciBDPU5WZShkLGIsbTQuQ29udGV4dFN0eWxlQXR0cnMpLFA9Zih4LHksaS5fZGF0YXNldCk7aWYoIShDJiZfPT1TJiZnPT1QKSl7dmFyIGs9bTQuZ2V0U3Ryb2tlV2lkdGgoYiksTz1TK2srMTsoTz5oLnNjcmVlbldpZHRofHxPPmguc2NyZWVuSGVpZ2h0KSYmaC5yZXNpemUoTyxPLCEwKSxoLmNsZWFyKCk7dmFyIEQ9aC5jdHg7RC5iZWdpblBhdGgoKSxQKFMpLmNvbnRleHQoRCkobnVsbCksRC5jbG9zZVBhdGgoKSxtNC5yZW5kZXJQYXRoV2l0aFN0eWxlKEQsYiksZz1QLF89UyxkPWJ9aC5ibGl0Q2VudGVyKG8sYi54LGIueSl9fX19fWFCLm1ha2VTeW1ib2xDYW52YXNEcmF3U3RlcD1rVmU7ZnVuY3Rpb24gUlZlKGUsdCxyLG4saSl7cmV0dXJuIHIraT49MCYmci1pPD1lJiZuK2k+PTAmJm4taTw9dH1mdW5jdGlvbiBOVmUoZSx0LHIpe2lmKGU9PW51bGwpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl07aWYoZVtpXSE9dFtpXSlyZXR1cm4hMX1yZXR1cm4hMH19KTt2YXIgSHY9SChEYz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRGMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB6Zj0oZGUoKSxVdChwZSkpO3pmLl9fZXhwb3J0U3RhcihmYXQoKSxEYyk7emYuX19leHBvcnRTdGFyKGRhdCgpLERjKTt6Zi5fX2V4cG9ydFN0YXIobWF0KCksRGMpO3pmLl9fZXhwb3J0U3RhcihCdigpLERjKTt6Zi5fX2V4cG9ydFN0YXIoVXUoKSxEYyk7emYuX19leHBvcnRTdGFyKG5CKCksRGMpO3pmLl9fZXhwb3J0U3RhcihvQigpLERjKTt6Zi5fX2V4cG9ydFN0YXIoX2F0KCksRGMpO3pmLl9fZXhwb3J0U3RhcihPZigpLERjKTt6Zi5fX2V4cG9ydFN0YXIodmF0KCksRGMpfSk7dmFyIFZ2PUgoYmF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShiYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBEVmU9KGRlKCksVXQocGUpKSxkS3Q9UnMoKSx4YXQ9RmUoKSxPVmU9aWF0KCksZzQ9bnMoKSx6VmU9ZnVuY3Rpb24oZSl7RFZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2F1dG9BZGp1c3RYU2NhbGVEb21haW49ITEsci5fYXV0b0FkanVzdFlTY2FsZURvbWFpbj0hMSxyLl9kZWZlcnJlZFJlbmRlcmluZz0hMSxyLl9hcHBseURlZmVycmVkUmVuZGVyaW5nVHJhbnNmb3JtPWZ1bmN0aW9uKG4saSxvLGEpeyFyLl9pc0FuY2hvcmVkfHwoci5fcmVuZGVyQXJlYSE9bnVsbCYmci5fcmVuZGVyQXJlYS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIituKyIsICIraSsiKSBzY2FsZSgiK28rIiwgIithKyIpIiksci5fY2FudmFzIT1udWxsJiZyLl9jYW52YXMuc3R5bGUoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK24rInB4LCAiK2krInB4KSBzY2FsZSgiK28rIiwgIithKyIpIikpfSxyLmFkZENsYXNzKCJ4eS1wbG90Iiksci5fYWRqdXN0WURvbWFpbk9uQ2hhbmdlRnJvbVhDYWxsYmFjaz1mdW5jdGlvbihuKXtyZXR1cm4gci5fYWRqdXN0WURvbWFpbk9uQ2hhbmdlRnJvbVgoKX0sci5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVlDYWxsYmFjaz1mdW5jdGlvbihuKXtyZXR1cm4gci5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVkoKX0sci5fcmVuZGVyQ2FsbGJhY2s9ZnVuY3Rpb24oKXtpZihyLmRlZmVycmVkUmVuZGVyaW5nKCkpe3ZhciBuPXIueCgpJiZyLngoKS5zY2FsZSxpPXIueSgpJiZyLnkoKS5zY2FsZTtyLl9kZWZlcnJlZFJlbmRlcmVyLnVwZGF0ZURvbWFpbnMobixpKX1lbHNlIHIucmVuZGVyKCl9LHIuX2RlZmVycmVkUmVuZGVyZXI9bmV3IE9WZS5EZWZlcnJlZFJlbmRlcmVyKGZ1bmN0aW9uKCl7cmV0dXJuIHIucmVuZGVyKCl9LHIuX2FwcGx5RGVmZXJyZWRSZW5kZXJpbmdUcmFuc2Zvcm0pLHJ9cmV0dXJuIHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmVycmVkUmVuZGVyaW5nKCkmJnRoaXMuX2RlZmVycmVkUmVuZGVyZXIucmVzZXRUcmFuc2Zvcm1zKCksZS5wcm90b3R5cGUucmVuZGVyLmNhbGwodGhpcyl9LHQucHJvdG90eXBlLmRlZmVycmVkUmVuZGVyaW5nPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX2RlZmVycmVkUmVuZGVyaW5nO2lmKHIpe3ZhciBuPXRoaXMueCgpJiZ0aGlzLngoKS5zY2FsZSxpPXRoaXMueSgpJiZ0aGlzLnkoKS5zY2FsZTt0aGlzLl9kZWZlcnJlZFJlbmRlcmVyLnNldERvbWFpbnMobixpKX1yZXR1cm4gdGhpcy5fZGVmZXJyZWRSZW5kZXJpbmc9cix0aGlzfSx0LnByb3RvdHlwZS54PWZ1bmN0aW9uKHIsbixpKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9YX0tFWSk7dGhpcy5fYmluZFByb3BlcnR5KHQuX1hfS0VZLHIsbixpKTt2YXIgbz10aGlzLndpZHRoKCk7cmV0dXJuIG4hPW51bGwmJm8hPW51bGwmJm4ucmFuZ2UoWzAsb10pLHRoaXMuX2F1dG9BZGp1c3RZU2NhbGVEb21haW4mJnRoaXMuX3VwZGF0ZVlFeHRlbnRzQW5kQXV0b2RvbWFpbigpLHRoaXMucmVuZGVyKCksdGhpc30sdC5wcm90b3R5cGUueT1mdW5jdGlvbihyLG4saSl7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fWV9LRVkpO3RoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9ZX0tFWSxyLG4saSk7dmFyIG89dGhpcy5oZWlnaHQoKTtyZXR1cm4gbiE9bnVsbCYmbyE9bnVsbCYmKG4gaW5zdGFuY2VvZiBkS3QuQ2F0ZWdvcnk/bi5yYW5nZShbMCxvXSk6bi5yYW5nZShbbywwXSkpLHRoaXMuX2F1dG9BZGp1c3RYU2NhbGVEb21haW4mJnRoaXMuX3VwZGF0ZVhFeHRlbnRzQW5kQXV0b2RvbWFpbigpLHRoaXMucmVuZGVyKCksdGhpc30sdC5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3JldHVybiByPT09IngiJiZ0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluP3RoaXMuX21ha2VGaWx0ZXJCeVByb3BlcnR5KCJ5Iik6KHI9PT0ieSJ8fHI9PT0ieTAiKSYmdGhpcy5fYXV0b0FkanVzdFlTY2FsZURvbWFpbj90aGlzLl9tYWtlRmlsdGVyQnlQcm9wZXJ0eSgieCIpOm51bGx9LHQucHJvdG90eXBlLl9tYWtlRmlsdGVyQnlQcm9wZXJ0eT1mdW5jdGlvbihyKXt2YXIgbj10aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldChyKTtpZihuIT1udWxsKXt2YXIgaT1uLmFjY2Vzc29yLG89bi5zY2FsZTtpZihvIT1udWxsKXJldHVybiBmdW5jdGlvbihhLHMsbCl7dmFyIGM9by5yYW5nZSgpO3JldHVybiB4YXQuTWF0aC5pblJhbmdlKG8uc2NhbGUoaShhLHMsbCkpLGNbMF0sY1sxXSl9fXJldHVybiBudWxsfSx0LnByb3RvdHlwZS5fdW5pbnN0YWxsU2NhbGVGb3JLZXk9ZnVuY3Rpb24ocixuKXtlLnByb3RvdHlwZS5fdW5pbnN0YWxsU2NhbGVGb3JLZXkuY2FsbCh0aGlzLHIsbik7dmFyIGk9bj09PXQuX1hfS0VZP3RoaXMuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YQ2FsbGJhY2s6dGhpcy5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVlDYWxsYmFjaztyLm9mZlVwZGF0ZShpKX0sdC5wcm90b3R5cGUuX2luc3RhbGxTY2FsZUZvcktleT1mdW5jdGlvbihyLG4pe2UucHJvdG90eXBlLl9pbnN0YWxsU2NhbGVGb3JLZXkuY2FsbCh0aGlzLHIsbik7dmFyIGk9bj09PXQuX1hfS0VZP3RoaXMuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YQ2FsbGJhY2s6dGhpcy5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVlDYWxsYmFjaztyLm9uVXBkYXRlKGkpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLngoKS5zY2FsZSYmdGhpcy54KCkuc2NhbGUub2ZmVXBkYXRlKHRoaXMuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YQ2FsbGJhY2spLHRoaXMueSgpLnNjYWxlJiZ0aGlzLnkoKS5zY2FsZS5vZmZVcGRhdGUodGhpcy5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVlDYWxsYmFjayksdGhpc30sdC5wcm90b3R5cGUuYXV0b3JhbmdlTW9kZT1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluPyJ4Ijp0aGlzLl9hdXRvQWRqdXN0WVNjYWxlRG9tYWluPyJ5Ijoibm9uZSI7c3dpdGNoKHIpe2Nhc2UieCI6dGhpcy5fYXV0b0FkanVzdFhTY2FsZURvbWFpbj0hMCx0aGlzLl9hdXRvQWRqdXN0WVNjYWxlRG9tYWluPSExLHRoaXMuX2FkanVzdFhEb21haW5PbkNoYW5nZUZyb21ZKCk7YnJlYWs7Y2FzZSJ5Ijp0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluPSExLHRoaXMuX2F1dG9BZGp1c3RZU2NhbGVEb21haW49ITAsdGhpcy5fYWRqdXN0WURvbWFpbk9uQ2hhbmdlRnJvbVgoKTticmVhaztjYXNlIm5vbmUiOnRoaXMuX2F1dG9BZGp1c3RYU2NhbGVEb21haW49ITEsdGhpcy5fYXV0b0FkanVzdFlTY2FsZURvbWFpbj0hMTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzY2FsZSBuYW1lICciK3IrIicsIG11c3QgYmUgJ3gnLCAneScgb3IgJ25vbmUnIil9cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe2UucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLHIsbixpKTt2YXIgbz10aGlzLngoKSxhPW8mJm8uc2NhbGU7YSE9bnVsbCYmYS5yYW5nZShbMCx0aGlzLndpZHRoKCldKTt2YXIgcz10aGlzLnkoKSxsPXMmJnMuc2NhbGU7cmV0dXJuIGwhPW51bGwmJihsIGluc3RhbmNlb2YgZEt0LkNhdGVnb3J5P2wucmFuZ2UoWzAsdGhpcy5oZWlnaHQoKV0pOmwucmFuZ2UoW3RoaXMuaGVpZ2h0KCksMF0pKSx0aGlzfSx0LnByb3RvdHlwZS5fdXBkYXRlWEV4dGVudHNBbmRBdXRvZG9tYWluPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy54KCkuc2NhbGU7ciE9bnVsbCYmci5hdXRvRG9tYWluKCl9LHQucHJvdG90eXBlLl91cGRhdGVZRXh0ZW50c0FuZEF1dG9kb21haW49ZnVuY3Rpb24oKXt2YXIgcj10aGlzLnkoKS5zY2FsZTtyIT1udWxsJiZyLmF1dG9Eb21haW4oKX0sdC5wcm90b3R5cGUuc2hvd0FsbERhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlWEV4dGVudHNBbmRBdXRvZG9tYWluKCksdGhpcy5fdXBkYXRlWUV4dGVudHNBbmRBdXRvZG9tYWluKCksdGhpc30sdC5wcm90b3R5cGUuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YPWZ1bmN0aW9uKCl7IXRoaXMuX3Byb2plY3RvcnNSZWFkeSgpfHx0aGlzLl9hdXRvQWRqdXN0WVNjYWxlRG9tYWluJiZ0aGlzLl91cGRhdGVZRXh0ZW50c0FuZEF1dG9kb21haW4oKX0sdC5wcm90b3R5cGUuX2FkanVzdFhEb21haW5PbkNoYW5nZUZyb21ZPWZ1bmN0aW9uKCl7IXRoaXMuX3Byb2plY3RvcnNSZWFkeSgpfHx0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluJiZ0aGlzLl91cGRhdGVYRXh0ZW50c0FuZEF1dG9kb21haW4oKX0sdC5wcm90b3R5cGUuX3Byb2plY3RvcnNSZWFkeT1mdW5jdGlvbigpe3ZhciByPXRoaXMueCgpLG49dGhpcy55KCk7cmV0dXJuIHIhPW51bGwmJnIuYWNjZXNzb3IhPW51bGwmJm4hPW51bGwmJm4uYWNjZXNzb3IhPW51bGx9LHQucHJvdG90eXBlLl9waXhlbFBvaW50PWZ1bmN0aW9uKHIsbixpKXt2YXIgbz1nNC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksYT1nNC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSk7cmV0dXJue3g6byhyLG4saSkseTphKHIsbixpKX19LHQucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPWUucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3LmNhbGwodGhpcyksaT10aGlzLmF0dHIoImRlZmluZWQiKSxvPWZ1bmN0aW9uKGEscyxsKXt2YXIgYz1nNC5QbG90Ll9zY2FsZWRBY2Nlc3NvcihyLngoKSkoYSxzLGwpLHU9ZzQuUGxvdC5fc2NhbGVkQWNjZXNzb3Ioci55KCkpKGEscyxsKTtyZXR1cm4gaSYmaS5hY2Nlc3NvcihhLHMsbCk9PT0hMT8hMTp4YXQuTWF0aC5pc1ZhbGlkTnVtYmVyKGMpJiZ4YXQuTWF0aC5pc1ZhbGlkTnVtYmVyKHUpfTtyZXR1cm4gdGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24oYSl7bi5zZXQoYSxuLmdldChhKS5maWx0ZXIoZnVuY3Rpb24ocyxsKXtyZXR1cm4gbyhzLGwsYSl9KSl9KSxufSx0Ll9YX0tFWT0ieCIsdC5fWV9LRVk9InkiLHR9KGc0LlBsb3QpO2JhdC5YWVBsb3Q9elZlfSk7dmFyIFNhdD1IKGxCPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShsQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEZWZT0oZGUoKSxVdChwZSkpLHZhPShFcigpLFV0KE1yKSksQlZlPWtmKCksSFZlPUh2KCksVlZlPVV1KCksbUt0PW5CKCksVVZlPVJzKCksc0I9eGQoKSx0MD1GZSgpLHFWZT1MZigpLHdhdD1JUygpLHhsPW5zKCksR1ZlPVZ2KCksZ0t0PXtsaW5lYXI6dmEuY3VydmVMaW5lYXIsbGluZWFyQ2xvc2VkOnZhLmN1cnZlTGluZWFyQ2xvc2VkLHN0ZXA6dmEuY3VydmVTdGVwLHN0ZXBCZWZvcmU6dmEuY3VydmVTdGVwQmVmb3JlLHN0ZXBBZnRlcjp2YS5jdXJ2ZVN0ZXBBZnRlcixiYXNpczp2YS5jdXJ2ZUJhc2lzLGJhc2lzT3Blbjp2YS5jdXJ2ZUJhc2lzT3BlbixiYXNpc0Nsb3NlZDp2YS5jdXJ2ZUJhc2lzQ2xvc2VkLGJ1bmRsZTp2YS5jdXJ2ZUJ1bmRsZSxjYXJkaW5hbDp2YS5jdXJ2ZUNhcmRpbmFsLGNhcmRpbmFsT3Blbjp2YS5jdXJ2ZUNhcmRpbmFsT3BlbixjYXJkaW5hbENsb3NlZDp2YS5jdXJ2ZUNhcmRpbmFsQ2xvc2VkLG1vbm90b25lOnZhLmN1cnZlTW9ub3RvbmVYfTtsQi5DdXJ2ZU5hbWU9cVZlLm1ha2VFbnVtKFsibGluZWFyIiwibGluZWFyQ2xvc2VkIiwic3RlcCIsInN0ZXBCZWZvcmUiLCJzdGVwQWZ0ZXIiLCJiYXNpcyIsImJhc2lzT3BlbiIsImJhc2lzQ2xvc2VkIiwiYnVuZGxlIiwiY2FyZGluYWwiLCJjYXJkaW5hbE9wZW4iLCJjYXJkaW5hbENsb3NlZCIsIm1vbm90b25lIl0pO3ZhciBXVmU9ZnVuY3Rpb24oZSl7RlZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7ci5fY3VydmU9ImxpbmVhciIsci5fYXV0b3JhbmdlU21vb3RoPSExLHIuX2Nyb3BwZWRSZW5kZXJpbmdFbmFibGVkPSEwLHIuX2NvbGxhcHNlRGVuc2VWZXJ0aWNhbExpbmVzRW5hYmxlZD0hMSxyLl9kb3duc2FtcGxpbmdFbmFibGVkPSExLHIuYWRkQ2xhc3MoImxpbmUtcGxvdCIpO3ZhciBuPW5ldyBCVmUuRWFzaW5nO3JldHVybiBuLnN0ZXBEdXJhdGlvbih4bC5QbG90Ll9BTklNQVRJT05fTUFYX0RVUkFUSU9OKSxuLmVhc2luZ01vZGUoImV4cEluT3V0Iiksbi5tYXhUb3RhbER1cmF0aW9uKHhsLlBsb3QuX0FOSU1BVElPTl9NQVhfRFVSQVRJT04pLHIuYW5pbWF0b3Iod2F0LkFuaW1hdG9yLk1BSU4sbiksci5hdHRyKCJzdHJva2UiLG5ldyBVVmUuQ29sb3IoKS5yYW5nZSgpWzBdKSxyLmF0dHIoInN0cm9rZS13aWR0aCIsIjJweCIpLHJ9cmV0dXJuIHQucHJvdG90eXBlLng9ZnVuY3Rpb24ocixuLGkpe3JldHVybiByPT1udWxsP2UucHJvdG90eXBlLnguY2FsbCh0aGlzKTooZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscixuLGkpLHRoaXMuX3NldFNjYWxlU25hcHBpbmcoKSx0aGlzKX0sdC5wcm90b3R5cGUueT1mdW5jdGlvbihyLG4saSl7cmV0dXJuIHI9PW51bGw/ZS5wcm90b3R5cGUueS5jYWxsKHRoaXMpOihlLnByb3RvdHlwZS55LmNhbGwodGhpcyxyLG4saSksdGhpcy5fc2V0U2NhbGVTbmFwcGluZygpLHRoaXMpfSx0LnByb3RvdHlwZS5hdXRvcmFuZ2VNb2RlPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP2UucHJvdG90eXBlLmF1dG9yYW5nZU1vZGUuY2FsbCh0aGlzKTooZS5wcm90b3R5cGUuYXV0b3JhbmdlTW9kZS5jYWxsKHRoaXMsciksdGhpcy5fc2V0U2NhbGVTbmFwcGluZygpLHRoaXMpfSx0LnByb3RvdHlwZS5hdXRvcmFuZ2VTbW9vdGg9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fYXV0b3JhbmdlU21vb3RoOih0aGlzLl9hdXRvcmFuZ2VTbW9vdGg9cix0aGlzLl9zZXRTY2FsZVNuYXBwaW5nKCksdGhpcyl9LHQucHJvdG90eXBlLl9zZXRTY2FsZVNuYXBwaW5nPWZ1bmN0aW9uKCl7dGhpcy5hdXRvcmFuZ2VNb2RlKCk9PT0ieCImJnRoaXMueCgpJiZ0aGlzLngoKS5zY2FsZSYmdGhpcy54KCkuc2NhbGUgaW5zdGFuY2VvZiBzQi5RdWFudGl0YXRpdmVTY2FsZSYmdGhpcy54KCkuc2NhbGUuc25hcHBpbmdEb21haW5FbmFibGVkKCF0aGlzLmF1dG9yYW5nZVNtb290aCgpKSx0aGlzLmF1dG9yYW5nZU1vZGUoKT09PSJ5IiYmdGhpcy55KCkmJnRoaXMueSgpLnNjYWxlJiZ0aGlzLnkoKS5zY2FsZSBpbnN0YW5jZW9mIHNCLlF1YW50aXRhdGl2ZVNjYWxlJiZ0aGlzLnkoKS5zY2FsZS5zbmFwcGluZ0RvbWFpbkVuYWJsZWQoIXRoaXMuYXV0b3JhbmdlU21vb3RoKCkpfSx0LnByb3RvdHlwZS5jdXJ2ZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9jdXJ2ZToodGhpcy5fY3VydmU9cix0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5kb3duc2FtcGxpbmdFbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2Rvd25zYW1wbGluZ0VuYWJsZWQ6KHRoaXMuX2Rvd25zYW1wbGluZ0VuYWJsZWQ9cix0aGlzKX0sdC5wcm90b3R5cGUuY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQ6KHRoaXMuX2Nyb3BwZWRSZW5kZXJpbmdFbmFibGVkPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuY29sbGFwc2VEZW5zZUxpbmVzRW5hYmxlZD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9jb2xsYXBzZURlbnNlVmVydGljYWxMaW5lc0VuYWJsZWQ6KHRoaXMuX2NvbGxhcHNlRGVuc2VWZXJ0aWNhbExpbmVzRW5hYmxlZD1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztyZXR1cm4gbmV3IFZWZS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgbUt0LkxpbmVTVkdEcmF3ZXJ9LGZ1bmN0aW9uKGkpe3JldHVybiBuZXcgSFZlLkNhbnZhc0RyYXdlcihpLG1LdC5tYWtlTGluZUNhbnZhc0RyYXdTdGVwKGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2QzTGluZUZhY3Rvcnkocil9KSl9KX0sdC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3ZhciBuPWUucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eS5jYWxsKHRoaXMscik7aWYoIXRoaXMuX2F1dG9yYW5nZVNtb290aHx8dGhpcy5hdXRvcmFuZ2VNb2RlKCkhPT1yfHx0aGlzLmF1dG9yYW5nZU1vZGUoKSE9PSJ4IiYmdGhpcy5hdXRvcmFuZ2VNb2RlKCkhPT0ieSIpcmV0dXJuIG47dmFyIGk9dGhpcy5fZ2V0RWRnZUludGVyc2VjdGlvblBvaW50cygpLG87cmV0dXJuIHRoaXMuYXV0b3JhbmdlTW9kZSgpPT09InkiP289aS5sZWZ0LmNvbmNhdChpLnJpZ2h0KS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEueX0pOm89aS50b3AuY29uY2F0KGkuYm90dG9tKS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEueH0pLG4ubWFwKGZ1bmN0aW9uKGEpe3JldHVybiB2YS5leHRlbnQodmEubWVyZ2UoW2Esb10pKX0pfSx0LnByb3RvdHlwZS5fZ2V0RWRnZUludGVyc2VjdGlvblBvaW50cz1mdW5jdGlvbigpe3ZhciByPXRoaXM7aWYoISh0aGlzLnkoKS5zY2FsZSBpbnN0YW5jZW9mIHNCLlF1YW50aXRhdGl2ZVNjYWxlJiZ0aGlzLngoKS5zY2FsZSBpbnN0YW5jZW9mIHNCLlF1YW50aXRhdGl2ZVNjYWxlKSlyZXR1cm57bGVmdDpbXSxyaWdodDpbXSx0b3A6W10sYm90dG9tOltdfTt2YXIgbj10aGlzLnkoKS5zY2FsZSxpPXRoaXMueCgpLnNjYWxlLG89e2xlZnQ6W10scmlnaHQ6W10sdG9wOltdLGJvdHRvbTpbXX0sYT1pLnNjYWxlKGkuZG9tYWluKClbMF0pLHM9aS5zY2FsZShpLmRvbWFpbigpWzFdKSxsPW4uc2NhbGUobi5kb21haW4oKVswXSksYz1uLnNjYWxlKG4uZG9tYWluKClbMV0pO3JldHVybiB0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbih1KXtmb3IodmFyIGg9dS5kYXRhKCksZixwLGQsZyxfLHkseCxiLFM9MTtTPGgubGVuZ3RoO1MrKylfPXh8fGkuc2NhbGUoci54KCkuYWNjZXNzb3IoaFtTLTFdLFMtMSx1KSkseT1ifHxuLnNjYWxlKHIueSgpLmFjY2Vzc29yKGhbUy0xXSxTLTEsdSkpLHg9aS5zY2FsZShyLngoKS5hY2Nlc3NvcihoW1NdLFMsdSkpLGI9bi5zY2FsZShyLnkoKS5hY2Nlc3NvcihoW1NdLFMsdSkpLF88YT09YTw9eCYmKGY9YS1fLHA9eC1fLGc9Yi15LGQ9ZipnL3Asby5sZWZ0LnB1c2goe3g6YSx5Om4uaW52ZXJ0KHkrZCl9KSksXzxzPT1zPD14JiYoZj1zLV8scD14LV8sZz1iLXksZD1mKmcvcCxvLnJpZ2h0LnB1c2goe3g6cyx5Om4uaW52ZXJ0KHkrZCl9KSkseTxjPT1jPD1iJiYocD14LV8sZD1jLXksZz1iLXksZj1kKnAvZyxvLnRvcC5wdXNoKHt4OmkuaW52ZXJ0KF8rZikseTpjfSkpLHk8bD09bDw9YiYmKHA9eC1fLGQ9bC15LGc9Yi15LGY9ZCpwL2csby5ib3R0b20ucHVzaCh7eDppLmludmVydChfK2YpLHk6bH0pKX0pLG99LHQucHJvdG90eXBlLl9nZXRSZXNldFlGdW5jdGlvbj1mdW5jdGlvbigpe3ZhciByPXRoaXMueSgpLnNjYWxlLmRvbWFpbigpLG49TWF0aC5tYXgoclswXSxyWzFdKSxpPU1hdGgubWluKHJbMF0sclsxXSksbz1uPDAmJm58fGk+MCYmaXx8MCxhPXRoaXMueSgpLnNjYWxlLnNjYWxlKG8pO3JldHVybiBmdW5jdGlvbihzLGwsYyl7cmV0dXJuIGF9fSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVEcmF3U3RlcHM9ZnVuY3Rpb24oKXt2YXIgcj1bXTtpZih0aGlzLl9hbmltYXRlT25OZXh0UmVuZGVyKCkpe3ZhciBuPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO24uZD10aGlzLl9jb25zdHJ1Y3RMaW5lUHJvamVjdG9yKHhsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSx0aGlzLl9nZXRSZXNldFlGdW5jdGlvbigpKSxyLnB1c2goe2F0dHJUb1Byb2plY3RvcjpuLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKHdhdC5BbmltYXRvci5SRVNFVCl9KX1yZXR1cm4gci5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3Iod2F0LkFuaW1hdG9yLk1BSU4pfSkscn0sdC5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7dmFyIHI9ZS5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yLmNhbGwodGhpcyk7cmV0dXJuIE9iamVjdC5rZXlzKHIpLmZvckVhY2goZnVuY3Rpb24obil7aWYobiE9PSJkIil7dmFyIGk9cltuXTtyW25dPWZ1bmN0aW9uKG8sYSxzKXtyZXR1cm4gby5sZW5ndGg+MD9pKG9bMF0sYSxzKTpudWxsfX19KSxyfSx0LnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuZW50aXR5TmVhcmVzdEJ5WFRoZW5ZKHIpO3JldHVybiBuIT1udWxsP1tuXTpbXX0sdC5wcm90b3R5cGUuZW50aXR5TmVhcmVzdEJ5WFRoZW5ZPWZ1bmN0aW9uKHIpe2Zvcih2YXIgbj0xLzAsaT0xLzAsbyxhPXRoaXMuYm91bmRzKCkscz10aGlzLmVudGl0aWVzKCksbD1zLmxlbmd0aCxjPTA7YzxsO2MrKyl7dmFyIHU9c1tjXTtpZighIXQwLk1hdGgud2l0aGluKHUucG9zaXRpb24sYSkpe3ZhciBoPU1hdGguYWJzKHIueC11LnBvc2l0aW9uLngpLGY9TWF0aC5hYnMoci55LXUucG9zaXRpb24ueSk7KGg8bnx8aD09PW4mJmY8aSkmJihvPXUsbj1oLGk9Zil9fXJldHVybiBvfSx0LnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7dmFyIHI9ZS5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycy5jYWxsKHRoaXMpO3JldHVybiByLmQ9dGhpcy5fY29uc3RydWN0TGluZVByb2plY3Rvcih4bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSkseGwuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpKSxyfSx0LnByb3RvdHlwZS5fY29uc3RydWN0TGluZVByb2plY3Rvcj1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKG8sYSxzKXtyZXR1cm4gaS5fZDNMaW5lRmFjdG9yeShzLHIsbikobyl9fSx0LnByb3RvdHlwZS5fZDNMaW5lRmFjdG9yeT1mdW5jdGlvbihyLG4saSl7bj09PXZvaWQgMCYmKG49eGwuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpKSxpPT09dm9pZCAwJiYoaT14bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSkpO3ZhciBvPWZ1bmN0aW9uKGEscyxsKXt2YXIgYz1uKGEscyxsKSx1PWkoYSxzLGwpO3JldHVybiB0MC5NYXRoLmlzVmFsaWROdW1iZXIoYykmJnQwLk1hdGguaXNWYWxpZE51bWJlcih1KX07cmV0dXJuIHZhLmxpbmUoKS54KGZ1bmN0aW9uKGEscyl7cmV0dXJuIG4oYSxzLHIpfSkueShmdW5jdGlvbihhLHMpe3JldHVybiBpKGEscyxyKX0pLmN1cnZlKHRoaXMuX2dldEN1cnZlRmFjdG9yeSgpKS5kZWZpbmVkKGZ1bmN0aW9uKGEscyl7cmV0dXJuIG8oYSxzLHIpfSl9LHQucHJvdG90eXBlLl9nZXRDdXJ2ZUZhY3Rvcnk9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLmN1cnZlKCk7aWYodHlwZW9mIHI9PSJzdHJpbmciKXt2YXIgbj1nS3Rbcl07cmV0dXJuIG49PW51bGw/Z0t0LmxpbmVhcjpufWVsc2UgcmV0dXJuIHJ9LHQucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPW5ldyB0MC5NYXA7cmV0dXJuIHRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe3ZhciBvPWkuZGF0YSgpO2lmKCFyLl9jcm9wcGVkUmVuZGVyaW5nRW5hYmxlZCYmIXIuX2Rvd25zYW1wbGluZ0VuYWJsZWQpe24uc2V0KGksW29dKTtyZXR1cm59Zm9yKHZhciBhPVtdLHM9by5sZW5ndGgsbD0wO2w8cztsKyspYVtsXT1sO3IuX2Nyb3BwZWRSZW5kZXJpbmdFbmFibGVkJiYoYT1yLl9maWx0ZXJDcm9wcGVkUmVuZGVyaW5nKGksYSkpLHIuX2Rvd25zYW1wbGluZ0VuYWJsZWQmJihhPXIuX2ZpbHRlckRvd25zYW1wbGluZyhpLGEpKSxyLl9jb2xsYXBzZURlbnNlVmVydGljYWxMaW5lc0VuYWJsZWQmJihhPXIuX2ZpbHRlckRlbnNlTGluZXMoaSxhKSk7Zm9yKHZhciBjPVtdLHU9YS5sZW5ndGgsbD0wO2w8dTtsKyspe3ZhciBoPWFbbF07Y1tsXT1vW2hdfW4uc2V0KGksW2NdKX0pLG59LHQucHJvdG90eXBlLl9maWx0ZXJDcm9wcGVkUmVuZGVyaW5nPWZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPXRoaXMsbz14bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksYT14bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSkscz1yLmRhdGEoKSxsPVtdLGM9ZnVuY3Rpb24oeCxiKXtyZXR1cm4gdDAuTWF0aC5pblJhbmdlKHgsMCxpLndpZHRoKCkpJiZ0MC5NYXRoLmluUmFuZ2UoYiwwLGkuaGVpZ2h0KCkpfSx1PTA7dTxuLmxlbmd0aDt1Kyspe3ZhciBoPW8oc1tuW3VdXSxuW3VdLHIpLGY9YShzW25bdV1dLG5bdV0scikscD1jKGgsZik7aWYoIXAmJm5bdS0xXSE9bnVsbCYmc1tuW3UtMV1dIT1udWxsKXt2YXIgZD1vKHNbblt1LTFdXSxuW3UtMV0sciksZz1hKHNbblt1LTFdXSxuW3UtMV0scik7cD1wfHxjKGQsZyl9aWYoIXAmJm5bdSsxXSE9bnVsbCYmc1tuW3UrMV1dIT1udWxsKXt2YXIgXz1vKHNbblt1KzFdXSxuW3UrMV0scikseT1hKHNbblt1KzFdXSxuW3UrMV0scik7cD1wfHxjKF8seSl9cCYmbC5wdXNoKG5bdV0pfXJldHVybiBsfSx0LnByb3RvdHlwZS5fZmlsdGVyRG93bnNhbXBsaW5nPWZ1bmN0aW9uKHIsbil7aWYobi5sZW5ndGg9PT0wKXJldHVybltdO2Zvcih2YXIgaT1yLmRhdGEoKSxvPXhsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxhPXhsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSxzPVtuWzBdXSxsPWZ1bmN0aW9uKGssTyl7dmFyIEQ9byhpW25ba11dLG5ba10sciksQj1hKGlbbltrXV0sbltrXSxyKSxJPW8oaVtuW2srMV1dLG5baysxXSxyKSxMPWEoaVtuW2srMV1dLG5baysxXSxyKTtpZihPPT09MS8wKXJldHVybiBNYXRoLmZsb29yKEQpPT09TWF0aC5mbG9vcihJKTt2YXIgUj1CKyhJLUQpKk87cmV0dXJuIE1hdGguZmxvb3IoTCk9PT1NYXRoLmZsb29yKFIpfSxjPTA7YzxuLmxlbmd0aC0xOyl7Zm9yKHZhciB1PW5bY10saD1vKGlbbltjXV0sbltjXSxyKSxmPWEoaVtuW2NdXSxuW2NdLHIpLHA9byhpW25bYysxXV0sbltjKzFdLHIpLGQ9YShpW25bYysxXV0sbltjKzFdLHIpLGc9TWF0aC5mbG9vcihoKT09PU1hdGguZmxvb3IocCk/MS8wOihkLWYpLyhwLWgpLF89bltjXSx5PWc9PT0xLzA/ZjpoLHg9XyxiPXksUz0hMDtjPG4ubGVuZ3RoLTEmJihTfHxsKGMsZykpOyl7YysrLFM9ITE7dmFyIEM9Zz09PTEvMD9hKGlbbltjXV0sbltjXSxyKTpvKGlbbltjXV0sbltjXSxyKTtDPmImJihiPUMseD1uW2NdKSxDPHkmJih5PUMsXz1uW2NdKX12YXIgUD1uW2NdO18hPT11JiZzLnB1c2goXykseCE9PV8mJnghPT11JiZzLnB1c2goeCksUCE9PXUmJlAhPT1fJiZQIT09eCYmcy5wdXNoKFApfXJldHVybiBzfSx0LnByb3RvdHlwZS5fZmlsdGVyRGVuc2VMaW5lcz1mdW5jdGlvbihyLG4pe2lmKG4ubGVuZ3RoPT09MClyZXR1cm5bXTt2YXIgaT1yLmRhdGEoKSxvPXhsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxhPXhsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSxzPWZ1bmN0aW9uKGMpe3JldHVybiBvKGlbY10sYyxyKX0sbD1mdW5jdGlvbihjKXtyZXR1cm4gYShpW2NdLGMscil9O3JldHVybiB0aGlzLl9idWNrZXRCeVgocixuLHMsbCl9LHQucHJvdG90eXBlLl9idWNrZXRCeVg9ZnVuY3Rpb24ocixuLGksbyl7Zm9yKHZhciBhPVtdLHM9ci5kYXRhKCksbD1udWxsLGM9bi5sZW5ndGgsdT0wO3U8PWM7Kyt1KXt2YXIgaD1uW3VdO2lmKHNbaF0hPW51bGwpe3ZhciBmPU1hdGguZmxvb3IoaShoKSkscD1vKGgpO2w9PW51bGw/bD1uZXcgdDAuQnVja2V0KGgsZixwKTpsLmlzSW5CdWNrZXQoZik/bC5hZGRUb0J1Y2tldChwLGgpOihhLnB1c2guYXBwbHkoYSxsLmdldFVuaXF1ZUluZGljZXMoKSksbD1uZXcgdDAuQnVja2V0KGgsZixwKSl9fXJldHVybiBsIT1udWxsJiZhLnB1c2guYXBwbHkoYSxsLmdldFVuaXF1ZUluZGljZXMoKSksYX0sdH0oR1ZlLlhZUGxvdCk7bEIuTGluZT1XVmV9KTt2YXIgVGF0PUgoRWF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShFYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBZVmU9KGRlKCksVXQocGUpKSxjQj0oRXIoKSxVdChNcikpLGpWZT1ScygpLF80PUZlKCksTWF0PUh2KCksX0t0PW1hdCgpLFhWZT1VdSgpLHlLdD1uQigpLHVCPUlTKCksJFZlPVNhdCgpLE9zPW5zKCksS1ZlPWZ1bmN0aW9uKGUpe1lWZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLmFkZENsYXNzKCJhcmVhLXBsb3QiKSxyLnkwKDApLHIuYXR0cigiZmlsbC1vcGFjaXR5IiwuMjUpLHIuYXR0cigiZmlsbCIsbmV3IGpWZS5Db2xvcigpLnJhbmdlKClbMF0pLHIuX2xpbmVEcmF3ZXJzPW5ldyBfNC5NYXAscn1yZXR1cm4gdC5wcm90b3R5cGUueT1mdW5jdGlvbihyLG4pe2lmKHI9PW51bGwpcmV0dXJuIGUucHJvdG90eXBlLnkuY2FsbCh0aGlzKTtpZihuPT1udWxsP2UucHJvdG90eXBlLnkuY2FsbCh0aGlzLHIpOmUucHJvdG90eXBlLnkuY2FsbCh0aGlzLHIsbiksbiE9bnVsbCl7dmFyIGk9dGhpcy55MCgpLmFjY2Vzc29yO2khPW51bGwmJnRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9ZMF9LRVksaSxuKSx0aGlzLl91cGRhdGVZU2NhbGUoKX1yZXR1cm4gdGhpc30sdC5wcm90b3R5cGUueTA9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fWTBfS0VZKTt2YXIgbj10aGlzLnkoKSxpPW4mJm4uc2NhbGU7cmV0dXJuIHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9ZMF9LRVkscixpKSx0aGlzLl91cGRhdGVZU2NhbGUoKSx0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGU9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fb25EYXRhc2V0VXBkYXRlLmNhbGwodGhpcyksdGhpcy5fdXBkYXRlWVNjYWxlKCl9LHQucHJvdG90eXBlLl9hZGREYXRhc2V0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIHRoaXMuX2xpbmVEcmF3ZXJzLnNldChyLG5ldyBNYXQuUHJveHlEcmF3ZXIoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHlLdC5MaW5lU1ZHRHJhd2VyfSxmdW5jdGlvbihpKXtyZXR1cm4gbmV3IE1hdC5DYW52YXNEcmF3ZXIoaSx5S3QubWFrZUxpbmVDYW52YXNEcmF3U3RlcChmdW5jdGlvbigpe3ZhciBvPU9zLlBsb3QuX3NjYWxlZEFjY2Vzc29yKG4ueCgpKSxhPU9zLlBsb3QuX3NjYWxlZEFjY2Vzc29yKG4ueSgpKTtyZXR1cm4gbi5fZDNMaW5lRmFjdG9yeShyLG8sYSl9KSl9KSksZS5wcm90b3R5cGUuX2FkZERhdGFzZXQuY2FsbCh0aGlzLHIpLHRoaXN9LHQucHJvdG90eXBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQ9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldC5jYWxsKHRoaXMscik7dmFyIG49dGhpcy5fbGluZURyYXdlcnMuZ2V0KHIpO3JldHVybiB0aGlzLnJlbmRlcmVyKCk9PT0ic3ZnIj9uLnVzZVNWRyh0aGlzLl9yZW5kZXJBcmVhKTpuLnVzZUNhbnZhcyh0aGlzLl9jYW52YXMpLG59LHQucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXM9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXROb2Rlcy5jYWxsKHRoaXMsciksdGhpcy5fbGluZURyYXdlcnMuZ2V0KHIpLnJlbW92ZSgpfSx0LnByb3RvdHlwZS5fYWRkaXRpb25hbFBhaW50PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXRoaXMuX2dlbmVyYXRlTGluZURyYXdTdGVwcygpLGk9dGhpcy5fZ2V0RGF0YVRvRHJhdygpO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKG8pe3ZhciBhPU9zLlBsb3QuYXBwbHlEcmF3U3RlcHMobixvKTtyLl9saW5lRHJhd2Vycy5nZXQobykuZHJhdyhpLmdldChvKSxhKX0pfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVMaW5lRHJhd1N0ZXBzPWZ1bmN0aW9uKCl7dmFyIHI9W107aWYodGhpcy5fYW5pbWF0ZU9uTmV4dFJlbmRlcigpKXt2YXIgbj10aGlzLl9nZW5lcmF0ZUxpbmVBdHRyVG9Qcm9qZWN0b3IoKTtuLmQ9dGhpcy5fY29uc3RydWN0TGluZVByb2plY3RvcihPcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksdGhpcy5fZ2V0UmVzZXRZRnVuY3Rpb24oKSksci5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6bixhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcih1Qi5BbmltYXRvci5SRVNFVCl9KX1yZXR1cm4gci5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6dGhpcy5fZ2VuZXJhdGVMaW5lQXR0clRvUHJvamVjdG9yKCksYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IodUIuQW5pbWF0b3IuTUFJTil9KSxyfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVMaW5lQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCk7cmV0dXJuIHIuZD10aGlzLl9jb25zdHJ1Y3RMaW5lUHJvamVjdG9yKE9zLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxPcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSkpLHJ9LHQucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztyZXR1cm4gbmV3IFhWZS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgX0t0LkFyZWFTVkdEcmF3ZXJ9LGZ1bmN0aW9uKGkpe3JldHVybiBuZXcgTWF0LkNhbnZhc0RyYXdlcihpLF9LdC5tYWtlQXJlYUNhbnZhc0RyYXdTdGVwKGZ1bmN0aW9uKCl7dmFyIG89bi5fY29vcmRpbmF0ZVByb2plY3RvcnMoKSxhPW9bMF0scz1vWzFdLGw9b1syXSxjPW4uX2NyZWF0ZURlZmluZWRQcm9qZWN0b3IoYSxzKTtyZXR1cm4gbi5fY3JlYXRlQXJlYUdlbmVyYXRvcihhLHMsbCxjLHIpfSxmdW5jdGlvbigpe3ZhciBvPW4uX2Nvb3JkaW5hdGVQcm9qZWN0b3JzKCksYT1vWzBdLHM9b1sxXSxsPW4uX2NyZWF0ZURlZmluZWRQcm9qZWN0b3IoYSxzKTtyZXR1cm4gbi5fY3JlYXRlVG9wTGluZUdlbmVyYXRvcihhLHMsbCxyKX0pKX0pfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVEcmF3U3RlcHM9ZnVuY3Rpb24oKXt2YXIgcj1bXTtpZih0aGlzLl9hbmltYXRlT25OZXh0UmVuZGVyKCkpe3ZhciBuPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO24uZD10aGlzLl9jb25zdHJ1Y3RBcmVhUHJvamVjdG9yKE9zLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSx0aGlzLl9nZXRSZXNldFlGdW5jdGlvbigpLE9zLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueTAoKSkpLHIucHVzaCh7YXR0clRvUHJvamVjdG9yOm4sYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IodUIuQW5pbWF0b3IuUkVTRVQpfSl9cmV0dXJuIHIucHVzaCh7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKHVCLkFuaW1hdG9yLk1BSU4pfSkscn0sdC5wcm90b3R5cGUuX3VwZGF0ZVlTY2FsZT1mdW5jdGlvbigpe3ZhciByPXRoaXMuZ2V0RXh0ZW50c0ZvclByb3BlcnR5KCJ5MCIpLG49XzQuQXJyYXkuZmxhdHRlbihyKSxpPV80LkFycmF5LnVuaXEobiksbz1pLmxlbmd0aD09PTE/aVswXTpudWxsLGE9dGhpcy55KCkscz1hJiZhLnNjYWxlO3MhPW51bGwmJih0aGlzLl9jb25zdGFudEJhc2VsaW5lVmFsdWVQcm92aWRlciE9bnVsbCYmKHMucmVtb3ZlUGFkZGluZ0V4Y2VwdGlvbnNQcm92aWRlcih0aGlzLl9jb25zdGFudEJhc2VsaW5lVmFsdWVQcm92aWRlciksdGhpcy5fY29uc3RhbnRCYXNlbGluZVZhbHVlUHJvdmlkZXI9bnVsbCksbyE9bnVsbCYmKHRoaXMuX2NvbnN0YW50QmFzZWxpbmVWYWx1ZVByb3ZpZGVyPWZ1bmN0aW9uKCl7cmV0dXJuW29dfSxzLmFkZFBhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXIodGhpcy5fY29uc3RhbnRCYXNlbGluZVZhbHVlUHJvdmlkZXIpKSl9LHQucHJvdG90eXBlLl9nZXRSZXNldFlGdW5jdGlvbj1mdW5jdGlvbigpe3JldHVybiBPcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkwKCkpfSx0LnByb3RvdHlwZS5fY29vcmRpbmF0ZVByb2plY3RvcnM9ZnVuY3Rpb24oKXtyZXR1cm5bT3MuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLE9zLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSxPcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkwKCkpXX0sdC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciByPWUucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnMuY2FsbCh0aGlzKSxuPXRoaXMuX2Nvb3JkaW5hdGVQcm9qZWN0b3JzKCksaT1uWzBdLG89blsxXSxhPW5bMl07cmV0dXJuIHIuZD10aGlzLl9jb25zdHJ1Y3RBcmVhUHJvamVjdG9yKGksbyxhKSxyfSx0LnByb3RvdHlwZS5zZWxlY3Rpb25zPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7aWYocj09PXZvaWQgMCYmKHI9dGhpcy5kYXRhc2V0cygpKSx0aGlzLnJlbmRlcmVyKCk9PT0iY2FudmFzIilyZXR1cm4gY0Iuc2VsZWN0QWxsKCk7dmFyIGk9ZS5wcm90b3R5cGUuc2VsZWN0aW9ucy5jYWxsKHRoaXMscikubm9kZXMoKSxvPXIubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBuLl9saW5lRHJhd2Vycy5nZXQoYSl9KS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGEhPW51bGx9KTtyZXR1cm4gby5mb3JFYWNoKGZ1bmN0aW9uKGEpe3JldHVybiBpLnB1c2guYXBwbHkoaSxhLmdldFZpc3VhbFByaW1pdGl2ZXMoKSl9KSxjQi5zZWxlY3RBbGwoaSl9LHQucHJvdG90eXBlLl9jb25zdHJ1Y3RBcmVhUHJvamVjdG9yPWZ1bmN0aW9uKHIsbixpKXt2YXIgbz10aGlzLGE9dGhpcy5fY3JlYXRlRGVmaW5lZFByb2plY3RvcihPcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksT3MuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpKTtyZXR1cm4gZnVuY3Rpb24ocyxsLGMpe3ZhciB1PW8uX2NyZWF0ZUFyZWFHZW5lcmF0b3IocixuLGksYSxjKTtyZXR1cm4gdShzKX19LHQucHJvdG90eXBlLl9jcmVhdGVEZWZpbmVkUHJvamVjdG9yPWZ1bmN0aW9uKHIsbil7cmV0dXJuIGZ1bmN0aW9uKGksbyxhKXt2YXIgcz1yKGksbyxhKSxsPW4oaSxvLGEpO3JldHVybiBfNC5NYXRoLmlzVmFsaWROdW1iZXIocykmJl80Lk1hdGguaXNWYWxpZE51bWJlcihsKX19LHQucHJvdG90eXBlLl9jcmVhdGVBcmVhR2VuZXJhdG9yPWZ1bmN0aW9uKHIsbixpLG8sYSl7dmFyIHM9dGhpcy5fZ2V0Q3VydmVGYWN0b3J5KCksbD1jQi5hcmVhKCkueChmdW5jdGlvbihjLHUpe3JldHVybiByKGMsdSxhKX0pLnkxKGZ1bmN0aW9uKGMsdSl7cmV0dXJuIG4oYyx1LGEpfSkueTAoZnVuY3Rpb24oYyx1KXtyZXR1cm4gaShjLHUsYSl9KS5jdXJ2ZShzKS5kZWZpbmVkKGZ1bmN0aW9uKGMsdSl7cmV0dXJuIG8oYyx1LGEpfSk7cmV0dXJuIGx9LHQucHJvdG90eXBlLl9jcmVhdGVUb3BMaW5lR2VuZXJhdG9yPWZ1bmN0aW9uKHIsbixpLG8pe3ZhciBhPXRoaXMuX2dldEN1cnZlRmFjdG9yeSgpLHM9Y0IubGluZSgpLngoZnVuY3Rpb24obCxjKXtyZXR1cm4gcihsLGMsbyl9KS55KGZ1bmN0aW9uKGwsYyl7cmV0dXJuIG4obCxjLG8pfSkuY3VydmUoYSkuZGVmaW5lZChmdW5jdGlvbihsLGMpe3JldHVybiBpKGwsYyxvKX0pO3JldHVybiBzfSx0Ll9ZMF9LRVk9InkwIix0fSgkVmUuTGluZSk7RWF0LkFyZWE9S1ZlfSk7dmFyIHk0PUgoR3U9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEd1LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgWlZlPShkZSgpLFV0KHBlKSksQWF0PShFcigpLFV0KE1yKSksQ2F0PXlsKCksSlZlPWtmKCksUVZlPUJ1KCksdFVlPUh2KCksZVVlPVV1KCksclVlPW9CKCksblVlPUNTKCksUGF0PVJzKCksdkt0PXhkKCksYmw9RmUoKSxMYXQ9TGYoKSx4S3Q9SVMoKSxoQj1ucygpLGlVZT1WdigpO0d1LkJhck9yaWVudGF0aW9uPUxhdC5tYWtlRW51bShbInZlcnRpY2FsIiwiaG9yaXpvbnRhbCJdKTtHdS5MYWJlbHNQb3NpdGlvbj1MYXQubWFrZUVudW0oWyJzdGFydCIsIm1pZGRsZSIsImVuZCIsIm91dHNpZGUiXSk7R3UuQmFyQWxpZ25tZW50PUxhdC5tYWtlRW51bShbInN0YXJ0IiwibWlkZGxlIiwiZW5kIl0pO3ZhciBJYXQ9ZnVuY3Rpb24oZSl7WlZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9InZlcnRpY2FsIik7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO2lmKG4uX2xhYmVsRm9ybWF0dGVyPVFWZS5pZGVudGl0eSgpLG4uX2xhYmVsc0VuYWJsZWQ9ITEsbi5fbGFiZWxzUG9zaXRpb249R3UuTGFiZWxzUG9zaXRpb24uZW5kLG4uX2hpZGVCYXJzSWZBbnlBcmVUb29XaWRlPSEwLG4uX2JhckFsaWdubWVudD0ibWlkZGxlIixuLl9jb21wdXRlQmFyUGl4ZWxUaGlja25lc3M9blVlLm1lbW9pemUob1VlKSxuLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzPSEwLG4uYWRkQ2xhc3MoImJhci1wbG90IiksciE9PSJ2ZXJ0aWNhbCImJnIhPT0iaG9yaXpvbnRhbCIpdGhyb3cgbmV3IEVycm9yKHIrIiBpcyBub3QgYSB2YWxpZCBvcmllbnRhdGlvbiBmb3IgUGxvdHMuQmFyIik7cmV0dXJuIG4uX2lzVmVydGljYWw9cj09PSJ2ZXJ0aWNhbCIsbi5hbmltYXRvcigiYmFzZWxpbmUiLG5ldyBKVmUuTnVsbCksbi5hdHRyKCJmaWxsIixuZXcgUGF0LkNvbG9yKCkucmFuZ2UoKVswXSksbi5hdHRyKHQuX0JBUl9USElDS05FU1NfS0VZLGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2JhclBpeGVsVGhpY2tuZXNzKCl9KSxuLl9sYWJlbENvbmZpZz1uZXcgYmwuTWFwLG4uX2Jhc2VsaW5lVmFsdWVQcm92aWRlcj1mdW5jdGlvbigpe3JldHVybltuLmJhc2VsaW5lVmFsdWUoKV19LG59cmV0dXJuIHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe3JldHVybiBlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSksdGhpcy5fdXBkYXRlRXh0ZW50cygpLHRoaXN9LHQucHJvdG90eXBlLng9ZnVuY3Rpb24ocixuKXtyZXR1cm4gcj09bnVsbD9lLnByb3RvdHlwZS54LmNhbGwodGhpcyk6KG49PW51bGw/ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscik6ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscixuKSx0aGlzLl91cGRhdGVUaGlja25lc3NBdHRyKCksdGhpcy5fdXBkYXRlTGVuZ3RoU2NhbGUoKSx0aGlzKX0sdC5wcm90b3R5cGUueT1mdW5jdGlvbihyLG4pe3JldHVybiByPT1udWxsP2UucHJvdG90eXBlLnkuY2FsbCh0aGlzKToobj09bnVsbD9lLnByb3RvdHlwZS55LmNhbGwodGhpcyxyKTplLnByb3RvdHlwZS55LmNhbGwodGhpcyxyLG4pLHRoaXMuX3VwZGF0ZUxlbmd0aFNjYWxlKCksdGhpcyl9LHQucHJvdG90eXBlLmxlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1ZlcnRpY2FsP3RoaXMueSgpOnRoaXMueCgpfSx0LnByb3RvdHlwZS5wb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1ZlcnRpY2FsP3RoaXMueCgpOnRoaXMueSgpfSx0LnByb3RvdHlwZS5iYXJFbmQ9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fQkFSX0VORF9LRVkpO3ZhciBuPXRoaXMucG9zaXRpb24oKSxpPW4mJm4uc2NhbGU7cmV0dXJuIHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9CQVJfRU5EX0tFWSxyLGkpLHRoaXMuX3VwZGF0ZVRoaWNrbmVzc0F0dHIoKSx0aGlzLl91cGRhdGVMZW5ndGhTY2FsZSgpLHRoaXMucmVuZGVyKCksdGhpc30sdC5wcm90b3R5cGUuYmFyQWxpZ25tZW50PWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2JhckFsaWdubWVudDoodGhpcy5fYmFyQWxpZ25tZW50PXIsdGhpcy5fY2xlYXJBdHRyVG9Qcm9qZWN0b3JDYWNoZSgpLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLm9yaWVudGF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzVmVydGljYWw/InZlcnRpY2FsIjoiaG9yaXpvbnRhbCJ9LHQucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGVVZS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgclVlLlJlY3RhbmdsZVNWR0RyYXdlcih0Ll9CQVJfQVJFQV9DTEFTUyl9LGZ1bmN0aW9uKHIpe3JldHVybiBuZXcgdFVlLlJlY3RhbmdsZUNhbnZhc0RyYXdlcihyKX0pfSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl9iYXNlbGluZT10aGlzLl9yZW5kZXJBcmVhLmFwcGVuZCgibGluZSIpLmNsYXNzZWQoImJhc2VsaW5lIiwhMCl9LHQucHJvdG90eXBlLmJhc2VsaW5lVmFsdWU9ZnVuY3Rpb24ocil7aWYocj09bnVsbCl7aWYodGhpcy5fYmFzZWxpbmVWYWx1ZSE9bnVsbClyZXR1cm4gdGhpcy5fYmFzZWxpbmVWYWx1ZTtpZighdGhpcy5fcHJvamVjdG9yc1JlYWR5KCkpcmV0dXJuIDA7dmFyIG49dGhpcy5sZW5ndGgoKS5zY2FsZTtyZXR1cm4gbiYmbiBpbnN0YW5jZW9mIFBhdC5UaW1lP25ldyBEYXRlKDApOjB9cmV0dXJuIHRoaXMuX2Jhc2VsaW5lVmFsdWU9cix0aGlzLl91cGRhdGVMZW5ndGhTY2FsZSgpLHRoaXMuX2NsZWFyQXR0clRvUHJvamVjdG9yQ2FjaGUoKSx0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLmFkZERhdGFzZXQ9ZnVuY3Rpb24ocil7cmV0dXJuIGUucHJvdG90eXBlLmFkZERhdGFzZXQuY2FsbCh0aGlzLHIpLHRoaXN9LHQucHJvdG90eXBlLl9hZGREYXRhc2V0PWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5fYWRkRGF0YXNldC5jYWxsKHRoaXMsciksdGhpc30sdC5wcm90b3R5cGUucmVtb3ZlRGF0YXNldD1mdW5jdGlvbihyKXtyZXR1cm4gZS5wcm90b3R5cGUucmVtb3ZlRGF0YXNldC5jYWxsKHRoaXMsciksdGhpc30sdC5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXQ9ZnVuY3Rpb24ocil7cmV0dXJuIGUucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0LmNhbGwodGhpcyxyKSx0aGlzfSx0LnByb3RvdHlwZS5kYXRhc2V0cz1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD9lLnByb3RvdHlwZS5kYXRhc2V0cy5jYWxsKHRoaXMpOihlLnByb3RvdHlwZS5kYXRhc2V0cy5jYWxsKHRoaXMsciksdGhpcyl9LHQucHJvdG90eXBlLmxhYmVsc0VuYWJsZWQ9ZnVuY3Rpb24ocixuKXtyZXR1cm4gcj09bnVsbD90aGlzLl9sYWJlbHNFbmFibGVkOih0aGlzLl9sYWJlbHNFbmFibGVkPXIsbiE9bnVsbCYmKHRoaXMuX2xhYmVsc1Bvc2l0aW9uPW4pLHRoaXMuX2NsZWFyQXR0clRvUHJvamVjdG9yQ2FjaGUoKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5sYWJlbEZvcm1hdHRlcj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9sYWJlbEZvcm1hdHRlcjoodGhpcy5fbGFiZWxGb3JtYXR0ZXI9cix0aGlzLl9jbGVhckF0dHJUb1Byb2plY3RvckNhY2hlKCksdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldD1mdW5jdGlvbihyKXt2YXIgbj1lLnByb3RvdHlwZS5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0LmNhbGwodGhpcyxyKSxpPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJnIikuY2xhc3NlZCh0Ll9MQUJFTF9BUkVBX0NMQVNTLCEwKSxvPW5ldyBDYXQuU3ZnQ29udGV4dChpLm5vZGUoKSksYT1uZXcgQ2F0LkNhY2hlTWVhc3VyZXIobykscz1uZXcgQ2F0LldyaXRlcihhLG8pO3JldHVybiB0aGlzLl9sYWJlbENvbmZpZy5zZXQocix7bGFiZWxBcmVhOmksbWVhc3VyZXI6YSx3cml0ZXI6c30pLG59LHQucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXM9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXROb2Rlcy5jYWxsKHRoaXMscik7dmFyIG49dGhpcy5fbGFiZWxDb25maWcuZ2V0KHIpO24hPW51bGwmJihuLmxhYmVsQXJlYS5yZW1vdmUoKSx0aGlzLl9sYWJlbENvbmZpZy5kZWxldGUocikpfSx0LnByb3RvdHlwZS5lbnRpdHlOZWFyZXN0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT1mdW5jdGlvbigpe3ZhciBvPW4uX2lzVmVydGljYWw/bi5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdHlOZWFyZXN0WChyKTpuLl9nZXRFbnRpdHlTdG9yZSgpLmVudGl0eU5lYXJlc3RZKHIpO3JldHVybiBvPT09dm9pZCAwP3ZvaWQgMDpuLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkobyl9O3JldHVybiB0aGlzLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzP3RoaXMuX2NvbXB1dGVCYXJQaXhlbFRoaWNrbmVzcy5kb0xvY2tlZChpKTppKCl9LHQucHJvdG90eXBlLmVudGl0aWVzQXQ9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWZ1bmN0aW9uKCl7cmV0dXJuIG4uX2VudGl0aWVzSW50ZXJzZWN0aW5nKHIueCxyLnkpfTtyZXR1cm4gdGhpcy5fZml4ZWRCYXJQaXhlbFRoaWNrbmVzcz90aGlzLl9jb21wdXRlQmFyUGl4ZWxUaGlja25lc3MuZG9Mb2NrZWQoaSk6aSgpfSx0LnByb3RvdHlwZS5lbnRpdGllc0luQm91bmRzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT1mdW5jdGlvbigpe3JldHVybiBlLnByb3RvdHlwZS5lbnRpdGllc0luQm91bmRzLmNhbGwobixyKX07cmV0dXJuIHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M/dGhpcy5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzLmRvTG9ja2VkKGkpOmkoKX0sdC5wcm90b3R5cGUuZW50aXRpZXNJblhCb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLmVudGl0aWVzSW5YQm91bmRzLmNhbGwobixyKX07cmV0dXJuIHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M/dGhpcy5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzLmRvTG9ja2VkKGkpOmkoKX0sdC5wcm90b3R5cGUuZW50aXRpZXNJbllCb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLmVudGl0aWVzSW5ZQm91bmRzLmNhbGwobixyKX07cmV0dXJuIHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M/dGhpcy5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzLmRvTG9ja2VkKGkpOmkoKX0sdC5wcm90b3R5cGUuX2VudGl0aWVzSW50ZXJzZWN0aW5nPWZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPVtdLG89dGhpcy5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdGllcygpLGE9by5sZW5ndGgscz0wO3M8YTtzKyspe3ZhciBsPW9bc107YmwuRE9NLmludGVyc2VjdHNCQm94KHIsbix0aGlzLl9lbnRpdHlCb3VuZHMobCkpJiZpLnB1c2godGhpcy5fbGlnaHR3ZWlnaHRQbG90RW50aXR5VG9QbG90RW50aXR5KGwpKX1yZXR1cm4gaX0sdC5wcm90b3R5cGUuX3VwZGF0ZUxlbmd0aFNjYWxlPWZ1bmN0aW9uKCl7aWYoISF0aGlzLl9wcm9qZWN0b3JzUmVhZHkoKSl7dmFyIHI9dGhpcy5sZW5ndGgoKS5zY2FsZTtyIGluc3RhbmNlb2Ygdkt0LlF1YW50aXRhdGl2ZVNjYWxlJiYoci5hZGRQYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVyKHRoaXMuX2Jhc2VsaW5lVmFsdWVQcm92aWRlciksci5hZGRJbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKHRoaXMuX2Jhc2VsaW5lVmFsdWVQcm92aWRlcikpfX0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO3JldHVybiB0aGlzLl9iYXJQaXhlbFRoaWNrbmVzcygpLHRoaXMuX2NvbXB1dGVCYXJQaXhlbFRoaWNrbmVzcy5kb0xvY2tlZChmdW5jdGlvbigpe3JldHVybiBlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHIpfSl9LHQucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPXRoaXMubGVuZ3RoKCkuc2NhbGUsbz1pLnNjYWxlKHRoaXMuYmFzZWxpbmVWYWx1ZSgpKSxhPXt4MTp0aGlzLl9pc1ZlcnRpY2FsPzA6byx5MTp0aGlzLl9pc1ZlcnRpY2FsP286MCx4Mjp0aGlzLl9pc1ZlcnRpY2FsP3RoaXMud2lkdGgoKTpvLHkyOnRoaXMuX2lzVmVydGljYWw/bzp0aGlzLmhlaWdodCgpfTt0aGlzLl9nZXRBbmltYXRvcigiYmFzZWxpbmUiKS5hbmltYXRlKHRoaXMuX2Jhc2VsaW5lLGEpLHRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKHMpe3JldHVybiBuLl9sYWJlbENvbmZpZy5nZXQocykubGFiZWxBcmVhLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpfSksdGhpcy5fbGFiZWxzRW5hYmxlZCYmYmwuV2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gbi5fZHJhd0xhYmVscygpfSxyKX0sdC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT1lLnByb3RvdHlwZS5nZXRFeHRlbnRzRm9yUHJvcGVydHkuY2FsbCh0aGlzLHIpLG87aWYocj09PSJ4IiYmdGhpcy5faXNWZXJ0aWNhbClvPXRoaXMueCgpO2Vsc2UgaWYocj09PSJ5IiYmIXRoaXMuX2lzVmVydGljYWwpbz10aGlzLnkoKTtlbHNlIHJldHVybiBpO2lmKCEobyYmby5zY2FsZSYmby5zY2FsZSBpbnN0YW5jZW9mIHZLdC5RdWFudGl0YXRpdmVTY2FsZSkpcmV0dXJuIGk7dmFyIGE9by5zY2FsZSxzPXRoaXMuX2JhclBpeGVsVGhpY2tuZXNzKCk7cmV0dXJuIGk9aS5tYXAoZnVuY3Rpb24obCl7cmV0dXJuIEFhdC5leHRlbnQoW2EuaW52ZXJ0KG4uX2dldFBvc2l0aW9uQXR0cihhLnNjYWxlKGxbMF0pLHMpKSxhLmludmVydChuLl9nZXRQb3NpdGlvbkF0dHIoYS5zY2FsZShsWzBdKSxzKStzKSxhLmludmVydChuLl9nZXRQb3NpdGlvbkF0dHIoYS5zY2FsZShsWzFdKSxzKSksYS5pbnZlcnQobi5fZ2V0UG9zaXRpb25BdHRyKGEuc2NhbGUobFsxXSkscykrcyldKX0pLGl9LHQucHJvdG90eXBlLl9nZXRQb3NpdGlvbkF0dHI9ZnVuY3Rpb24ocixuKXtzd2l0Y2godGhpcy5faXNWZXJ0aWNhbHx8KHItPW4sbio9LTEpLHRoaXMuX2JhckFsaWdubWVudCl7Y2FzZSJzdGFydCI6cmV0dXJuIHI7Y2FzZSJlbmQiOnJldHVybiByLW47Y2FzZSJtaWRkbGUiOmRlZmF1bHQ6cmV0dXJuIHItbi8yfX0sdC5wcm90b3R5cGUuX2RyYXdMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49dGhpcy5fZ2V0RGF0YVRvRHJhdygpLGk9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksbz10aGlzLmRhdGFzZXRzKCkuc29tZShmdW5jdGlvbihhKXtyZXR1cm4gbi5nZXQoYSkuc29tZShmdW5jdGlvbihzLGwpe3JldHVybiBzPT1udWxsPyExOnIuX2RyYXdMYWJlbChzLGwsYSxpKX0pfSk7dGhpcy5faGlkZUJhcnNJZkFueUFyZVRvb1dpZGUmJm8mJnRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3JldHVybiByLl9sYWJlbENvbmZpZy5nZXQoYSkubGFiZWxBcmVhLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpfSl9LHQucHJvdG90eXBlLl9kcmF3TGFiZWw9ZnVuY3Rpb24ocixuLGksbyl7dmFyIGE9dGhpcy5fbGFiZWxDb25maWcuZ2V0KGkpLHM9YS5sYWJlbEFyZWEsbD1hLm1lYXN1cmVyLGM9YS53cml0ZXIsdT10aGlzLmxlbmd0aCgpLmFjY2Vzc29yLGg9dShyLG4saSksZj10aGlzLmxlbmd0aCgpLnNjYWxlLHA9ZiE9bnVsbD9mLnNjYWxlKGgpOmgsZD1mIT1udWxsP2Yuc2NhbGUodGhpcy5iYXNlbGluZVZhbHVlKCkpOnRoaXMuYmFzZWxpbmVWYWx1ZSgpLGc9e3g6by54KHIsbixpKSx5Om8ueShyLG4saSl9LF89e3dpZHRoOm8ud2lkdGgocixuLGkpLGhlaWdodDpvLmhlaWdodChyLG4saSl9LHk9dGhpcy5fbGFiZWxGb3JtYXR0ZXIoaCxyLG4saSkseD1sLm1lYXN1cmUoeSksYj10aGlzLl9zaG91bGRTaG93TGFiZWxPbkJhcihnLF8seCksUz10aGlzLl9pc1ZlcnRpY2FsP3A8PWQ6cDxkLEM9dGhpcy5fY2FsY3VsYXRlTGFiZWxQcm9wZXJ0aWVzKGcsXyx4LGIsUyksUD1DLmNvbnRhaW5lckRpbWVuc2lvbnMsaz1DLmxhYmVsQ29udGFpbmVyT3JpZ2luLE89Qy5sYWJlbE9yaWdpbixEPUMuYWxpZ25tZW50LEI9by5maWxsKHIsbixpKSxJPXRoaXMuX2NyZWF0ZUxhYmVsQ29udGFpbmVyKHMsayxPLHgsYixCKSxMPXt4QWxpZ246RC54LHlBbGlnbjpELnl9O2Mud3JpdGUoeSxQLndpZHRoLFAuaGVpZ2h0LEwsSS5ub2RlKCkpO3ZhciBSPXRoaXMuX2lzVmVydGljYWw/Xy53aWR0aDx4LndpZHRoOl8uaGVpZ2h0PHguaGVpZ2h0O3JldHVybiBSfSx0LnByb3RvdHlwZS5fc2hvdWxkU2hvd0xhYmVsT25CYXI9ZnVuY3Rpb24ocixuLGkpe2lmKHRoaXMuX2xhYmVsc1Bvc2l0aW9uPT09R3UuTGFiZWxzUG9zaXRpb24ub3V0c2lkZSlyZXR1cm4hMTt2YXIgbz10aGlzLl9pc1ZlcnRpY2FsP3IueTpyLngsYT10aGlzLl9pc1ZlcnRpY2FsP24uaGVpZ2h0Om4ud2lkdGgscz10aGlzLl9pc1ZlcnRpY2FsP3RoaXMuaGVpZ2h0KCk6dGhpcy53aWR0aCgpLGw9dGhpcy5faXNWZXJ0aWNhbD9pLmhlaWdodDppLndpZHRoLGM9bythLHU9YTtyZXR1cm4gYz5zP3U9cy1vOm88MCYmKHU9YyksbCt0Ll9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUjw9dX0sdC5wcm90b3R5cGUuX2NhbGN1bGF0ZUxhYmVsUHJvcGVydGllcz1mdW5jdGlvbihyLG4saSxvLGEpe3ZhciBzPXRoaXMsbD10aGlzLl9pc1ZlcnRpY2FsP3IueTpyLngsYz10aGlzLl9pc1ZlcnRpY2FsP24uaGVpZ2h0Om4ud2lkdGgsdT10aGlzLl9pc1ZlcnRpY2FsP2kuaGVpZ2h0Omkud2lkdGgsaD0iY2VudGVyIixmPWMscD1sLGQ9bCxnPWZ1bmN0aW9uKF8pe3N3aXRjaChfKXtjYXNlInRvcExlZnQiOmg9cy5faXNWZXJ0aWNhbD8idG9wIjoibGVmdCIscCs9dC5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVIsZCs9dC5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVI7cmV0dXJuO2Nhc2UiY2VudGVyIjpkKz0oYyt1KS8yO3JldHVybjtjYXNlImJvdHRvbVJpZ2h0IjpoPXMuX2lzVmVydGljYWw/ImJvdHRvbSI6InJpZ2h0IixwLT10Ll9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUixkKz1mLXQuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSLXU7cmV0dXJufX07aWYobylzd2l0Y2godGhpcy5fbGFiZWxzUG9zaXRpb24pe2Nhc2UgR3UuTGFiZWxzUG9zaXRpb24uc3RhcnQ6ZyhhPyJib3R0b21SaWdodCI6InRvcExlZnQiKTticmVhaztjYXNlIEd1LkxhYmVsc1Bvc2l0aW9uLm1pZGRsZTpnKCJjZW50ZXIiKTticmVhaztjYXNlIEd1LkxhYmVsc1Bvc2l0aW9uLmVuZDpnKGE/InRvcExlZnQiOiJib3R0b21SaWdodCIpO2JyZWFrfWVsc2UgYT8oaD10aGlzLl9pc1ZlcnRpY2FsPyJ0b3AiOiJsZWZ0IixmPWMrdC5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVIrdSxwLT10Ll9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUit1LGQtPXQuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSK3UpOihoPXRoaXMuX2lzVmVydGljYWw/ImJvdHRvbSI6InJpZ2h0IixmPWMrdC5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVIrdSxkKz1jK3QuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSKTtyZXR1cm57Y29udGFpbmVyRGltZW5zaW9uczp7d2lkdGg6dGhpcy5faXNWZXJ0aWNhbD9uLndpZHRoOmYsaGVpZ2h0OnRoaXMuX2lzVmVydGljYWw/ZjpuLmhlaWdodH0sbGFiZWxDb250YWluZXJPcmlnaW46e3g6dGhpcy5faXNWZXJ0aWNhbD9yLng6cCx5OnRoaXMuX2lzVmVydGljYWw/cDpyLnl9LGxhYmVsT3JpZ2luOnt4OnRoaXMuX2lzVmVydGljYWw/ci54K24ud2lkdGgvMi1pLndpZHRoLzI6ZCx5OnRoaXMuX2lzVmVydGljYWw/ZDpyLnkrbi5oZWlnaHQvMi1pLmhlaWdodC8yfSxhbGlnbm1lbnQ6e3g6dGhpcy5faXNWZXJ0aWNhbD8iY2VudGVyIjpoLHk6dGhpcy5faXNWZXJ0aWNhbD9oOiJjZW50ZXIifX19LHQucHJvdG90eXBlLl9jcmVhdGVMYWJlbENvbnRhaW5lcj1mdW5jdGlvbihyLG4saSxvLGEscyl7dmFyIGw9ci5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIituLngrIiwgIituLnkrIikiKTtpZihhKXtsLmNsYXNzZWQoIm9uLWJhci1sYWJlbCIsITApO3ZhciBjPWJsLkNvbG9yLmNvbnRyYXN0KCJ3aGl0ZSIscykqMS42PGJsLkNvbG9yLmNvbnRyYXN0KCJibGFjayIscyk7bC5jbGFzc2VkKGM/ImRhcmstbGFiZWwiOiJsaWdodC1sYWJlbCIsITApfWVsc2UgbC5jbGFzc2VkKCJvZmYtYmFyLWxhYmVsIiwhMCk7cmV0dXJuIGx9LHQucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3ZhciByPVtdO2lmKHRoaXMuX2FuaW1hdGVPbk5leHRSZW5kZXIoKSl7dmFyIG49dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksaT10aGlzLmxlbmd0aCgpLnNjYWxlLG89aS5zY2FsZSh0aGlzLmJhc2VsaW5lVmFsdWUoKSksYT10aGlzLl9pc1ZlcnRpY2FsPyJ5IjoieCIscz10aGlzLl9pc1ZlcnRpY2FsPyJoZWlnaHQiOiJ3aWR0aCI7blthXT1mdW5jdGlvbigpe3JldHVybiBvfSxuW3NdPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LHIucHVzaCh7YXR0clRvUHJvamVjdG9yOm4sYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IoeEt0LkFuaW1hdG9yLlJFU0VUKX0pfXJldHVybiByLnB1c2goe2F0dHJUb1Byb2plY3Rvcjp0aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcih4S3QuQW5pbWF0b3IuTUFJTil9KSxyfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49ZS5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yLmNhbGwodGhpcyksaT10aGlzLmxlbmd0aCgpLnNjYWxlLG89aS5zY2FsZSh0aGlzLmJhc2VsaW5lVmFsdWUoKSksYT10aGlzLl9pc1ZlcnRpY2FsPyJ5IjoieCIscz10aGlzLl9pc1ZlcnRpY2FsPyJ4IjoieSIsbD1oQi5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnBvc2l0aW9uKCkpLGM9aEIuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5sZW5ndGgoKSksdT1mdW5jdGlvbihkLGcsXyl7cmV0dXJuIE1hdGguYWJzKG8tYyhkLGcsXykpfSxoPW5bdC5fQkFSX1RISUNLTkVTU19LRVldLGY9bi5nYXAscD1mPT1udWxsP2g6ZnVuY3Rpb24oZCxnLF8pe3ZhciB5PWgoZCxnLF8pO3JldHVybiB5PHQuX0JBUl9HQVBMRVNTX1RIUkVTSE9MRF9QWD95OnktZihkLGcsXyl9O3JldHVybiBuLndpZHRoPXRoaXMuX2lzVmVydGljYWw/cDp1LG4uaGVpZ2h0PXRoaXMuX2lzVmVydGljYWw/dTpwLG5bYV09ZnVuY3Rpb24oZCxnLF8pe3ZhciB5PWMoZCxnLF8pO3JldHVybiB5Pm8/bzp5fSxuW3NdPWZ1bmN0aW9uKGQsZyxfKXtyZXR1cm4gci5fZ2V0UG9zaXRpb25BdHRyKGwoZCxnLF8pLGgoZCxnLF8pKX0sbn0sdC5wcm90b3R5cGUuX3VwZGF0ZVRoaWNrbmVzc0F0dHI9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49dGhpcy5wb3NpdGlvbigpLGk9dGhpcy5iYXJFbmQoKTtuIT1udWxsJiZpIT1udWxsPyh0aGlzLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzPSExLHRoaXMuYXR0cih0Ll9CQVJfVEhJQ0tORVNTX0tFWSxmdW5jdGlvbihvLGEscyl7dmFyIGw9bi5hY2Nlc3NvcihvLGEscyksYz1pLmFjY2Vzc29yKG8sYSxzKTtyZXR1cm4gbD1uLnNjYWxlP24uc2NhbGUuc2NhbGUobCk6bCxjPWkuc2NhbGU/aS5zY2FsZS5zY2FsZShjKTpjLE1hdGguYWJzKGMtbCl9KSk6KHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M9ITAsdGhpcy5hdHRyKHQuX0JBUl9USElDS05FU1NfS0VZLGZ1bmN0aW9uKCl7cmV0dXJuIHIuX2JhclBpeGVsVGhpY2tuZXNzKCl9KSl9LHQucHJvdG90eXBlLl9iYXJQaXhlbFRoaWNrbmVzcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzJiZ0aGlzLl9wcm9qZWN0b3JzUmVhZHkoKT90aGlzLl9jb21wdXRlQmFyUGl4ZWxUaGlja25lc3ModGhpcy5wb3NpdGlvbigpLHRoaXMuZGF0YXNldHMoKSx0aGlzLl9pc1ZlcnRpY2FsP3RoaXMud2lkdGgoKTp0aGlzLmhlaWdodCgpKTowfSx0LnByb3RvdHlwZS5lbnRpdGllcz1mdW5jdGlvbihyKXtpZihyPT09dm9pZCAwJiYocj10aGlzLmRhdGFzZXRzKCkpLCF0aGlzLl9wcm9qZWN0b3JzUmVhZHkoKSlyZXR1cm5bXTt2YXIgbj1lLnByb3RvdHlwZS5lbnRpdGllcy5jYWxsKHRoaXMscik7cmV0dXJuIG59LHQucHJvdG90eXBlLl9lbnRpdHlCb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49ci5kYXR1bSxpPXIuaW5kZXgsbz1yLmRhdGFzZXQ7cmV0dXJuIHRoaXMuX3BpeGVsQm91bmRzKG4saSxvKX0sdC5wcm90b3R5cGUuX3BpeGVsQm91bmRzPWZ1bmN0aW9uKHIsbixpKXt2YXIgbz10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKTtyZXR1cm57eDpvLngocixuLGkpLHk6by55KHIsbixpKSx3aWR0aDpvLndpZHRoKHIsbixpKSxoZWlnaHQ6by5oZWlnaHQocixuLGkpfX0sdC5wcm90b3R5cGUuX3BpeGVsUG9pbnQ9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXMuX3BpeGVsQm91bmRzKHIsbixpKSxhPSh0aGlzLl9pc1ZlcnRpY2FsP2hCLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKTpoQi5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSkpKHIsbixpKSxzPSh0aGlzLl9pc1ZlcnRpY2FsP3RoaXMueSgpLnNjYWxlOnRoaXMueCgpLnNjYWxlKS5zY2FsZSh0aGlzLmJhc2VsaW5lVmFsdWUoKSk7cmV0dXJuIHRoaXMuX3BpeGVsUG9pbnRCYXIoYSxzLG8pfSx0LnByb3RvdHlwZS5fcGl4ZWxQb2ludEJhcj1mdW5jdGlvbihyLG4saSl7dmFyIG8sYTtyZXR1cm4gdGhpcy5faXNWZXJ0aWNhbD8obz1pLngraS53aWR0aC8yLGE9cjw9bj9pLnk6aS55K2kuaGVpZ2h0KToobz1yPj1uP2kueCtpLndpZHRoOmkueCxhPWkueStpLmhlaWdodC8yKSx7eDpvLHk6YX19LHQucHJvdG90eXBlLl91bmluc3RhbGxTY2FsZUZvcktleT1mdW5jdGlvbihyLG4pe2UucHJvdG90eXBlLl91bmluc3RhbGxTY2FsZUZvcktleS5jYWxsKHRoaXMscixuKX0sdC5wcm90b3R5cGUuX2dldERhdGFUb0RyYXc9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49bmV3IGJsLk1hcCxpPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLG89dGhpcy53aWR0aCgpLGE9dGhpcy5oZWlnaHQoKTtyZXR1cm4gdGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIGw9cy5kYXRhKCkubWFwKGZ1bmN0aW9uKGMsdSl7dmFyIGg9ci5faXNEYXR1bU9uU2NyZWVuKGksbyxhLGMsdSxzKTtyZXR1cm4gaD9jOm51bGx9KTtuLnNldChzLGwpfSksbn0sdC5wcm90b3R5cGUuX2lzRGF0dW1PblNjcmVlbj1mdW5jdGlvbihyLG4saSxvLGEscyl7dmFyIGw9ci54KG8sYSxzKSxjPXIueShvLGEscyksdT1yLndpZHRoKG8sYSxzKSxoPXIuaGVpZ2h0KG8sYSxzKSxmPWJsLk1hdGguaXNWYWxpZE51bWJlcihsKSYmYmwuTWF0aC5pc1ZhbGlkTnVtYmVyKGMpJiZibC5NYXRoLmlzVmFsaWROdW1iZXIodSkmJmJsLk1hdGguaXNWYWxpZE51bWJlcihoKTtyZXR1cm4gZj9ibC5NYXRoLmJvdW5kc0ludGVyc2VjdHMobCxjLHUsaCwwLDAsbixpKTohMX0sdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztlLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGUuY2FsbCh0aGlzKSx0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gci5fbGFiZWxDb25maWcuZ2V0KG4pLm1lYXN1cmVyLnJlc2V0KCl9KX0sdC5fQkFSX1RISUNLTkVTU19SQVRJTz0uOTUsdC5fQkFSX0dBUExFU1NfVEhSRVNIT0xEX1BYPTMsdC5fU0lOR0xFX0JBUl9ESU1FTlNJT05fUkFUSU89LjQsdC5fQkFSX0FSRUFfQ0xBU1M9ImJhci1hcmVhIix0Ll9CQVJfRU5EX0tFWT0iYmFyRW5kIix0Ll9CQVJfVEhJQ0tORVNTX0tFWT0id2lkdGgiLHQuX0xBQkVMX0FSRUFfQ0xBU1M9ImJhci1sYWJlbC10ZXh0LWFyZWEiLHQuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSPTEwLHR9KGlVZS5YWVBsb3QpO0d1LkJhcj1JYXQ7ZnVuY3Rpb24gb1VlKGUsdCxyKXt2YXIgbixpPWUuc2NhbGU7aWYoaSBpbnN0YW5jZW9mIFBhdC5DYXRlZ29yeSluPWkucmFuZ2VCYW5kKCk7ZWxzZXt2YXIgbz1lLmFjY2Vzc29yLGE9QWF0LnNldChibC5BcnJheS5mbGF0dGVuKHQubWFwKGZ1bmN0aW9uKGMpe3JldHVybiBjLmRhdGEoKS5tYXAoZnVuY3Rpb24odSxoKXtyZXR1cm4gbyh1LGgsYyl9KS5maWx0ZXIoZnVuY3Rpb24odSl7cmV0dXJuIHUhPW51bGx9KS5tYXAoZnVuY3Rpb24odSl7cmV0dXJuIHUudmFsdWVPZigpfSl9KSkpLnZhbHVlcygpLm1hcChmdW5jdGlvbihjKXtyZXR1cm4rY30pO2Euc29ydChmdW5jdGlvbihjLHUpe3JldHVybiBjLXV9KTt2YXIgcz1hLm1hcChmdW5jdGlvbihjKXtyZXR1cm4gaS5zY2FsZShjKX0pLGw9QWF0LnBhaXJzKHMpO249YmwuTWF0aC5taW4obCxmdW5jdGlvbihjLHUpe3JldHVybiBNYXRoLmFicyhjWzFdLWNbMF0pfSxyKklhdC5fU0lOR0xFX0JBUl9ESU1FTlNJT05fUkFUSU8pLG4qPUlhdC5fQkFSX1RISUNLTkVTU19SQVRJT31yZXR1cm4gbn19KTt2YXIgd0t0PUgoa2F0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShrYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBhVWU9KGRlKCksVXQocGUpKSxzVWU9UnMoKSxsVWU9RmUoKSxiS3Q9eTQoKSxjVWU9bnMoKSx1VWU9ZnVuY3Rpb24oZSl7YVVlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9InZlcnRpY2FsIik7dmFyIG49ZS5jYWxsKHRoaXMscil8fHRoaXM7cmV0dXJuIG4uX2NsdXN0ZXJPZmZzZXRzPW5ldyBsVWUuTWFwLG59cmV0dXJuIHQucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvcj1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj1lLnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3IuY2FsbCh0aGlzKSxpPXRoaXMuX21ha2VJbm5lclNjYWxlKCksbz1mdW5jdGlvbihsLGMpe3JldHVybiBpLnJhbmdlQmFuZCgpfTtuLndpZHRoPXRoaXMuX2lzVmVydGljYWw/bzpuLndpZHRoLG4uaGVpZ2h0PXRoaXMuX2lzVmVydGljYWw/bi5oZWlnaHQ6bzt2YXIgYT1uLngscz1uLnk7cmV0dXJuIG4ueD10aGlzLl9pc1ZlcnRpY2FsP2Z1bmN0aW9uKGwsYyx1KXtyZXR1cm4gYShsLGMsdSkrci5fY2x1c3Rlck9mZnNldHMuZ2V0KHUpfTpmdW5jdGlvbihsLGMsdSl7cmV0dXJuIGEobCxjLHUpfSxuLnk9dGhpcy5faXNWZXJ0aWNhbD9mdW5jdGlvbihsLGMsdSl7cmV0dXJuIHMobCxjLHUpfTpmdW5jdGlvbihsLGMsdSl7cmV0dXJuIHMobCxjLHUpK3IuX2NsdXN0ZXJPZmZzZXRzLmdldCh1KX0sbn0sdC5wcm90b3R5cGUuX3VwZGF0ZUNsdXN0ZXJQb3NpdGlvbj1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj10aGlzLl9tYWtlSW5uZXJTY2FsZSgpO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKGksbyl7cmV0dXJuIHIuX2NsdXN0ZXJPZmZzZXRzLnNldChpLG4uc2NhbGUoU3RyaW5nKG8pKS1uLnJhbmdlQmFuZCgpLzIpfSl9LHQucHJvdG90eXBlLl9tYWtlSW5uZXJTY2FsZT1mdW5jdGlvbigpe3ZhciByPW5ldyBzVWUuQ2F0ZWdvcnk7ci5kb21haW4odGhpcy5kYXRhc2V0cygpLm1hcChmdW5jdGlvbihpLG8pe3JldHVybiBTdHJpbmcobyl9KSk7dmFyIG49Y1VlLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuYXR0cihiS3QuQmFyLl9CQVJfVEhJQ0tORVNTX0tFWSkpO3JldHVybiByLnJhbmdlKFswLG4obnVsbCwwLG51bGwpXSkscn0sdC5wcm90b3R5cGUuX2dldERhdGFUb0RyYXc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlQ2x1c3RlclBvc2l0aW9uKCksZS5wcm90b3R5cGUuX2dldERhdGFUb0RyYXcuY2FsbCh0aGlzKX0sdH0oYkt0LkJhcik7a2F0LkNsdXN0ZXJlZEJhcj11VWV9KTt2YXIgU0t0PUgoTmF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShOYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBoVWU9KGRlKCksVXQocGUpKSx2ND0oRXIoKSxVdChNcikpLFJhdD15bCgpLGZVZT1rZigpLHBVZT1CdSgpLGRVZT1ScygpLFV2PUZlKCksbVVlPWZhdCgpLGdVZT1kYXQoKSxfVWU9VXUoKSx5VWU9QUYoKSxFZD1ucygpLHZVZT1mdW5jdGlvbihlKXtoVWUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fc3RhcnRBbmdsZT0wLHIuX2VuZEFuZ2xlPTIqTWF0aC5QSSxyLl9sYWJlbEZvcm1hdHRlcj1wVWUuaWRlbnRpdHkoKSxyLl9sYWJlbHNFbmFibGVkPSExLHIuaW5uZXJSYWRpdXMoMCksci5vdXRlclJhZGl1cyhmdW5jdGlvbigpe3ZhciBuPXIuX3BpZUNlbnRlcigpO3JldHVybiBNYXRoLm1pbihNYXRoLm1heChyLndpZHRoKCktbi54LG4ueCksTWF0aC5tYXgoci5oZWlnaHQoKS1uLnksbi55KSl9KSxyLmFkZENsYXNzKCJwaWUtcGxvdCIpLHIuYXR0cigiZmlsbCIsZnVuY3Rpb24obixpKXtyZXR1cm4gU3RyaW5nKGkpfSxuZXcgZFVlLkNvbG9yKSxyLl9zdHJva2VEcmF3ZXJzPW5ldyBVdi5NYXAscn1yZXR1cm4gdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl9zdHJva2VEcmF3ZXJzLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIG4uYXR0YWNoVG8oci5fcmVuZGVyQXJlYSl9KX0sdC5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihyLG4saSl7ZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMscixuLGkpO3ZhciBvPXRoaXMuX3BpZUNlbnRlcigpO3RoaXMuX3JlbmRlckFyZWEuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrby54KyIsIitvLnkrIikiKTt2YXIgYT1NYXRoLm1pbihNYXRoLm1heCh0aGlzLndpZHRoKCktby54LG8ueCksTWF0aC5tYXgodGhpcy5oZWlnaHQoKS1vLnksby55KSk7cmV0dXJuIHRoaXMuaW5uZXJSYWRpdXMoKS5zY2FsZSE9bnVsbCYmdGhpcy5pbm5lclJhZGl1cygpLnNjYWxlLnJhbmdlKFswLGFdKSx0aGlzLm91dGVyUmFkaXVzKCkuc2NhbGUhPW51bGwmJnRoaXMub3V0ZXJSYWRpdXMoKS5zY2FsZS5yYW5nZShbMCxhXSksdGhpc30sdC5wcm90b3R5cGUuYWRkRGF0YXNldD1mdW5jdGlvbihyKXtyZXR1cm4gZS5wcm90b3R5cGUuYWRkRGF0YXNldC5jYWxsKHRoaXMsciksdGhpc30sdC5wcm90b3R5cGUuX2FkZERhdGFzZXQ9ZnVuY3Rpb24ocil7aWYodGhpcy5kYXRhc2V0cygpLmxlbmd0aD09PTEpcmV0dXJuIFV2LldpbmRvdy53YXJuKCJPbmx5IG9uZSBkYXRhc2V0IGlzIHN1cHBvcnRlZCBpbiBQaWUgcGxvdHMiKSx0aGlzO3RoaXMuX3VwZGF0ZVBpZUFuZ2xlcygpLGUucHJvdG90eXBlLl9hZGREYXRhc2V0LmNhbGwodGhpcyxyKTt2YXIgbj1uZXcgZ1VlLkFyY091dGxpbmVTVkdEcmF3ZXI7cmV0dXJuIHRoaXMuX2lzU2V0dXAmJm4uYXR0YWNoVG8odGhpcy5fcmVuZGVyQXJlYSksdGhpcy5fc3Ryb2tlRHJhd2Vycy5zZXQocixuKSx0aGlzfSx0LnByb3RvdHlwZS5yZW1vdmVEYXRhc2V0PWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5yZW1vdmVEYXRhc2V0LmNhbGwodGhpcyxyKSx0aGlzfSx0LnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldE5vZGVzPWZ1bmN0aW9uKHIpe2UucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXMuY2FsbCh0aGlzLHIpLHRoaXMuX3N0cm9rZURyYXdlcnMuZ2V0KHIpLnJlbW92ZSgpfSx0LnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldD1mdW5jdGlvbihyKXtyZXR1cm4gZS5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXQuY2FsbCh0aGlzLHIpLHRoaXMuX3N0cm9rZURyYXdlcnMuZGVsZXRlKHIpLHRoaXMuX3N0YXJ0QW5nbGVzPVtdLHRoaXMuX2VuZEFuZ2xlcz1bXSx0aGlzfSx0LnByb3RvdHlwZS5zZWxlY3Rpb25zPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cj09PXZvaWQgMCYmKHI9dGhpcy5kYXRhc2V0cygpKTt2YXIgaT1lLnByb3RvdHlwZS5zZWxlY3Rpb25zLmNhbGwodGhpcyxyKS5ub2RlcygpO3JldHVybiByLmZvckVhY2goZnVuY3Rpb24obyl7dmFyIGE9bi5fc3Ryb2tlRHJhd2Vycy5nZXQobyk7YSE9bnVsbCYmaS5wdXNoLmFwcGx5KGksYS5nZXRWaXN1YWxQcmltaXRpdmVzKCkpfSksdjQuc2VsZWN0QWxsKGkpfSx0LnByb3RvdHlwZS5fb25EYXRhc2V0VXBkYXRlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX29uRGF0YXNldFVwZGF0ZS5jYWxsKHRoaXMpLHRoaXMuX3VwZGF0ZVBpZUFuZ2xlcygpLHRoaXMucmVuZGVyKCl9LHQucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IF9VZS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgbVVlLkFyY1NWR0RyYXdlcn0sZnVuY3Rpb24oKXtyZXR1cm4geVVlLndhcm4oImNhbnZhcyByZW5kZXJlciBpcyBub3Qgc3VwcG9ydGVkIG9uIFBpZSBQbG90ISIpLG51bGx9KX0sdC5wcm90b3R5cGUuZW50aXRpZXM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztyPT09dm9pZCAwJiYocj10aGlzLmRhdGFzZXRzKCkpO3ZhciBpPWUucHJvdG90eXBlLmVudGl0aWVzLmNhbGwodGhpcyxyKTtyZXR1cm4gaS5tYXAoZnVuY3Rpb24obyl7by5wb3NpdGlvbi54Kz1uLndpZHRoKCkvMixvLnBvc2l0aW9uLnkrPW4uaGVpZ2h0KCkvMjt2YXIgYT12NC5zZWxlY3Qobi5fc3Ryb2tlRHJhd2Vycy5nZXQoby5kYXRhc2V0KS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4KG8uaW5kZXgpKSxzPW87cmV0dXJuIHMuc3Ryb2tlU2VsZWN0aW9uPWEsc30pfSx0LnByb3RvdHlwZS5zZWN0b3JWYWx1ZT1mdW5jdGlvbihyLG4pe3JldHVybiByPT1udWxsP3RoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQuX1NFQ1RPUl9WQUxVRV9LRVkpOih0aGlzLl9iaW5kUHJvcGVydHkodC5fU0VDVE9SX1ZBTFVFX0tFWSxyLG4pLHRoaXMuX3VwZGF0ZVBpZUFuZ2xlcygpLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLmlubmVyUmFkaXVzPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHI9PW51bGw/dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fSU5ORVJfUkFESVVTX0tFWSk6KHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9JTk5FUl9SQURJVVNfS0VZLHIsbiksdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUub3V0ZXJSYWRpdXM9ZnVuY3Rpb24ocixuKXtyZXR1cm4gcj09bnVsbD90aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9PVVRFUl9SQURJVVNfS0VZKToodGhpcy5fYmluZFByb3BlcnR5KHQuX09VVEVSX1JBRElVU19LRVkscixuKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3N0YXJ0QW5nbGU6KHRoaXMuX3N0YXJ0QW5nbGU9cix0aGlzLl91cGRhdGVQaWVBbmdsZXMoKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5lbmRBbmdsZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9lbmRBbmdsZToodGhpcy5fZW5kQW5nbGU9cix0aGlzLl91cGRhdGVQaWVBbmdsZXMoKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5sYWJlbHNFbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2xhYmVsc0VuYWJsZWQ6KHRoaXMuX2xhYmVsc0VuYWJsZWQ9cix0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5sYWJlbEZvcm1hdHRlcj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9sYWJlbEZvcm1hdHRlcjoodGhpcy5fbGFiZWxGb3JtYXR0ZXI9cix0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKHIpe3ZhciBuPXt4OnRoaXMud2lkdGgoKS8yLHk6dGhpcy5oZWlnaHQoKS8yfSxpPXt4OnIueC1uLngseTpyLnktbi55fSxvPXRoaXMuX3NsaWNlSW5kZXhGb3JQb2ludChpKTtyZXR1cm4gbz09bnVsbD9bXTpbdGhpcy5lbnRpdGllcygpW29dXX0sdC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj1lLnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzLmNhbGwodGhpcyksaT1FZC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLmlubmVyUmFkaXVzKCkpLG89RWQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5vdXRlclJhZGl1cygpKTtyZXR1cm4gbi5kPWZ1bmN0aW9uKGEscyxsKXtyZXR1cm4gdjQuYXJjKCkuaW5uZXJSYWRpdXMoaShhLHMsbCkpLm91dGVyUmFkaXVzKG8oYSxzLGwpKS5zdGFydEFuZ2xlKHIuX3N0YXJ0QW5nbGVzW3NdKS5lbmRBbmdsZShyLl9lbmRBbmdsZXNbc10pKGEscyl9LG59LHQucHJvdG90eXBlLl91cGRhdGVQaWVBbmdsZXM9ZnVuY3Rpb24oKXtpZih0aGlzLnNlY3RvclZhbHVlKCkhPW51bGwmJnRoaXMuZGF0YXNldHMoKS5sZW5ndGghPT0wKXt2YXIgcj1FZC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnNlY3RvclZhbHVlKCkpLG49dGhpcy5kYXRhc2V0cygpWzBdLGk9dGhpcy5fZ2V0RGF0YVRvRHJhdygpLmdldChuKSxvPXY0LnBpZSgpLnNvcnQobnVsbCkuc3RhcnRBbmdsZSh0aGlzLl9zdGFydEFuZ2xlKS5lbmRBbmdsZSh0aGlzLl9lbmRBbmdsZSkudmFsdWUoZnVuY3Rpb24oYSxzKXtyZXR1cm4gcihhLHMsbil9KShpKTt0aGlzLl9zdGFydEFuZ2xlcz1vLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS5zdGFydEFuZ2xlfSksdGhpcy5fZW5kQW5nbGVzPW8ubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLmVuZEFuZ2xlfSl9fSx0LnByb3RvdHlwZS5fcGllQ2VudGVyPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fc3RhcnRBbmdsZTx0aGlzLl9lbmRBbmdsZT90aGlzLl9zdGFydEFuZ2xlOnRoaXMuX2VuZEFuZ2xlLG49dGhpcy5fc3RhcnRBbmdsZTx0aGlzLl9lbmRBbmdsZT90aGlzLl9lbmRBbmdsZTp0aGlzLl9zdGFydEFuZ2xlLGk9TWF0aC5zaW4ociksbz1NYXRoLmNvcyhyKSxhPU1hdGguc2luKG4pLHM9TWF0aC5jb3MobiksbCxjLHUsaDtyZXR1cm4gaT49MCYmYT49MD9vPj0wJiZzPj0wPyhsPW8sYz0wLGg9MCx1PWEpOm88MCYmczwwPyhsPTAsYz0tcyxoPTAsdT1pKTpvPj0wJiZzPDA/KGw9byxjPS1zLGg9MCx1PWkpOm88MCYmcz49MCYmKGw9MSxjPTEsaD0xLHU9TWF0aC5tYXgoaSxhKSk6aT49MCYmYTwwP28+PTAmJnM+PTA/KGw9TWF0aC5tYXgobyxzKSxjPTEsaD0xLHU9MSk6bzwwJiZzPDA/KGw9MCxjPTEsaD0tYSx1PWkpOm8+PTAmJnM8MD8obD1vLGM9MSxoPS1hLHU9MSk6bzwwJiZzPj0wJiYobD1zLGM9MSxoPTEsdT1pKTppPDAmJmE+PTA/bz49MCYmcz49MD8obD0xLGM9MCxoPS1pLHU9YSk6bzwwJiZzPDA/KGw9MSxjPU1hdGgubWF4KC1vLC1zKSxoPTEsdT0xKTpvPj0wJiZzPDA/KGw9MSxjPS1zLGg9LWksdT0xKTpvPDAmJnM+PTAmJihsPTEsYz0tbyxoPTEsdT1hKTppPDAmJmE8MCYmKG8+PTAmJnM+PTA/KGw9cyxjPTAsaD0taSx1PTApOm88MCYmczwwPyhsPTAsYz0tbyxoPS1hLHU9MCk6bz49MCYmczwwPyhsPTEsYz0xLGg9TWF0aC5tYXgobywtcyksdT0xKTpvPDAmJnM+PTAmJihsPXMsYz0tbyxoPTEsdT0wKSkse3g6aCt1PT0wPzA6aC8oaCt1KSp0aGlzLndpZHRoKCkseTpsK2M9PTA/MDpsLyhsK2MpKnRoaXMuaGVpZ2h0KCl9fSx0LnByb3RvdHlwZS5fZ2V0RGF0YVRvRHJhdz1mdW5jdGlvbigpe3ZhciByPWUucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3LmNhbGwodGhpcyk7aWYodGhpcy5kYXRhc2V0cygpLmxlbmd0aD09PTApcmV0dXJuIHI7dmFyIG49RWQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5zZWN0b3JWYWx1ZSgpKSxpPXRoaXMuZGF0YXNldHMoKVswXSxvPXIuZ2V0KGkpLGE9by5maWx0ZXIoZnVuY3Rpb24ocyxsKXtyZXR1cm4gdC5faXNWYWxpZERhdGEobihzLGwsaSkpfSk7cmV0dXJuIHIuc2V0KGksYSkscn0sdC5faXNWYWxpZERhdGE9ZnVuY3Rpb24ocil7cmV0dXJuIFV2Lk1hdGguaXNWYWxpZE51bWJlcihyKSYmcj49MH0sdC5wcm90b3R5cGUuX3BpeGVsUG9pbnQ9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPUVkLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuc2VjdG9yVmFsdWUoKSk7aWYoIXQuX2lzVmFsaWREYXRhKG8ocixuLGkpKSlyZXR1cm57eDpOYU4seTpOYU59O3ZhciBhPUVkLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuaW5uZXJSYWRpdXMoKSkocixuLGkpLHM9RWQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5vdXRlclJhZGl1cygpKShyLG4saSksbD0oYStzKS8yLGM9djQucGllKCkuc29ydChudWxsKS52YWx1ZShmdW5jdGlvbihwLGQpe3ZhciBnPW8ocCxkLGkpO3JldHVybiB0Ll9pc1ZhbGlkRGF0YShnKT9nOjB9KS5zdGFydEFuZ2xlKHRoaXMuX3N0YXJ0QW5nbGUpLmVuZEFuZ2xlKHRoaXMuX2VuZEFuZ2xlKShpLmRhdGEoKSksdT1jW25dLnN0YXJ0QW5nbGUsaD1jW25dLmVuZEFuZ2xlLGY9KHUraCkvMjtyZXR1cm57eDpsKk1hdGguc2luKGYpLHk6LWwqTWF0aC5jb3MoZil9fSx0LnByb3RvdHlwZS5fYWRkaXRpb25hbFBhaW50PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7dGhpcy5fcmVuZGVyQXJlYS5zZWxlY3QoIi5sYWJlbC1hcmVhIikucmVtb3ZlKCksdGhpcy5fbGFiZWxzRW5hYmxlZCYmVXYuV2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gbi5fZHJhd0xhYmVscygpfSxyKTt2YXIgaT10aGlzLl9nZW5lcmF0ZVN0cm9rZURyYXdTdGVwcygpLG89dGhpcy5fZ2V0RGF0YVRvRHJhdygpO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBzPUVkLlBsb3QuYXBwbHlEcmF3U3RlcHMoaSxhKTtuLl9zdHJva2VEcmF3ZXJzLmdldChhKS5kcmF3KG8uZ2V0KGEpLHMpfSl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZVN0cm9rZURyYXdTdGVwcz1mdW5jdGlvbigpe3ZhciByPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO3JldHVyblt7YXR0clRvUHJvamVjdG9yOnIsYW5pbWF0b3I6bmV3IGZVZS5OdWxsfV19LHQucHJvdG90eXBlLl9zbGljZUluZGV4Rm9yUG9pbnQ9ZnVuY3Rpb24ocil7dmFyIG49TWF0aC5zcXJ0KE1hdGgucG93KHIueCwyKStNYXRoLnBvdyhyLnksMikpLGk9TWF0aC5hY29zKC1yLnkvbik7ci54PDAmJihpPU1hdGguUEkqMi1pKTtmb3IodmFyIG8sYT0wO2E8dGhpcy5fc3RhcnRBbmdsZXMubGVuZ3RoO2ErKylpZih0aGlzLl9zdGFydEFuZ2xlc1thXTxpJiZ0aGlzLl9lbmRBbmdsZXNbYV0+aSl7bz1hO2JyZWFrfWlmKG8hPT12b2lkIDApe3ZhciBzPXRoaXMuZGF0YXNldHMoKVswXSxsPXMuZGF0YSgpW29dLGM9dGhpcy5pbm5lclJhZGl1cygpLmFjY2Vzc29yKGwsbyxzKSx1PXRoaXMub3V0ZXJSYWRpdXMoKS5hY2Nlc3NvcihsLG8scyk7aWYobj5jJiZuPHUpcmV0dXJuIG99cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLl9kcmF3TGFiZWxzPWZ1bmN0aW9uKCl7Zm9yKHZhciByPXRoaXMsbj10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxpPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJnIikuY2xhc3NlZCgibGFiZWwtYXJlYSIsITApLG89bmV3IFJhdC5TdmdDb250ZXh0KGkubm9kZSgpKSxhPW5ldyBSYXQuQ2FjaGVNZWFzdXJlcihvKSxzPW5ldyBSYXQuV3JpdGVyKGEsbyksbD10aGlzLmRhdGFzZXRzKClbMF0sYz10aGlzLl9nZXREYXRhVG9EcmF3KCkuZ2V0KGwpLHU9Yy5sZW5ndGgsaD1mdW5jdGlvbihkKXt2YXIgZz1jW2RdLF89Zi5zZWN0b3JWYWx1ZSgpLmFjY2Vzc29yKGcsZCxsKTtpZighVXYuTWF0aC5pc1ZhbGlkTnVtYmVyKF8pKXJldHVybiJjb250aW51ZSI7Xz1mLl9sYWJlbEZvcm1hdHRlcihfLGcsZCxsKTt2YXIgeT1hLm1lYXN1cmUoXykseD0oZi5fZW5kQW5nbGVzW2RdK2YuX3N0YXJ0QW5nbGVzW2RdKS8yLGI9Zi5vdXRlclJhZGl1cygpLmFjY2Vzc29yKGcsZCxsKTtmLm91dGVyUmFkaXVzKCkuc2NhbGUmJihiPWYub3V0ZXJSYWRpdXMoKS5zY2FsZS5zY2FsZShiKSk7dmFyIFM9Zi5pbm5lclJhZGl1cygpLmFjY2Vzc29yKGcsZCxsKTtmLmlubmVyUmFkaXVzKCkuc2NhbGUmJihTPWYuaW5uZXJSYWRpdXMoKS5zY2FsZS5zY2FsZShTKSk7dmFyIEM9KGIrUykvMixQPU1hdGguc2luKHgpKkMteS53aWR0aC8yLGs9LU1hdGguY29zKHgpKkMteS5oZWlnaHQvMixPPVt7eDpQLHk6a30se3g6UCx5OmsreS5oZWlnaHR9LHt4OlAreS53aWR0aCx5Omt9LHt4OlAreS53aWR0aCx5OmsreS5oZWlnaHR9XSxEPU8uZXZlcnkoZnVuY3Rpb24oeil7cmV0dXJuIE1hdGguYWJzKHoueCk8PXIud2lkdGgoKS8yJiZNYXRoLmFicyh6LnkpPD1yLmhlaWdodCgpLzJ9KTtpZihEKXt2YXIgQj1PLm1hcChmdW5jdGlvbih6KXtyZXR1cm4gci5fc2xpY2VJbmRleEZvclBvaW50KHopfSk7RD1CLmV2ZXJ5KGZ1bmN0aW9uKHope3JldHVybiB6PT09ZH0pfXZhciBJPW4uZmlsbChnLGQsbCksTD1Vdi5Db2xvci5jb250cmFzdCgid2hpdGUiLEkpKjEuNjxVdi5Db2xvci5jb250cmFzdCgiYmxhY2siLEkpLFI9aS5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitQKyIsIitrKyIpIiksRj1MPyJkYXJrLWxhYmVsIjoibGlnaHQtbGFiZWwiO1IuY2xhc3NlZChGLCEwKSxSLnN0eWxlKCJ2aXNpYmlsaXR5IixEPyJpbmhlcml0IjoiaGlkZGVuIikscy53cml0ZShfLHkud2lkdGgseS5oZWlnaHQse3hBbGlnbjoiY2VudGVyIix5QWxpZ246ImNlbnRlciJ9LFIubm9kZSgpKX0sZj10aGlzLHA9MDtwPHU7cCsrKWgocCl9LHQuX0lOTkVSX1JBRElVU19LRVk9ImlubmVyLXJhZGl1cyIsdC5fT1VURVJfUkFESVVTX0tFWT0ib3V0ZXItcmFkaXVzIix0Ll9TRUNUT1JfVkFMVUVfS0VZPSJzZWN0b3ItdmFsdWUiLHR9KEVkLlBsb3QpO05hdC5QaWU9dlVlfSk7dmFyIE1LdD1IKE9hdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoT2F0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgeFVlPShkZSgpLFV0KHBlKSksYlVlPShFcigpLFV0KE1yKSksRGF0PXlsKCksd1VlPWtmKCksU1VlPUh2KCksTVVlPVV1KCksRVVlPW9CKCksZkI9UnMoKSxPYz1GZSgpLHBCPW5zKCksVFVlPVZ2KCksQ1VlPWZ1bmN0aW9uKGUpe3hVZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9sYWJlbHNFbmFibGVkPSExLHIuX2xhYmVsPW51bGwsci5hbmltYXRvcigicmVjdGFuZ2xlcyIsbmV3IHdVZS5OdWxsKSxyLmFkZENsYXNzKCJyZWN0YW5nbGUtcGxvdCIpLHIuYXR0cigiZmlsbCIsbmV3IGZCLkNvbG9yKCkucmFuZ2UoKVswXSkscn1yZXR1cm4gdC5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbigpe3JldHVybiBuZXcgTVVlLlByb3h5RHJhd2VyKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBFVWUuUmVjdGFuZ2xlU1ZHRHJhd2VyfSxmdW5jdGlvbihyKXtyZXR1cm4gbmV3IFNVZS5SZWN0YW5nbGVDYW52YXNEcmF3ZXIocil9KX0sdC5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPWUucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvci5jYWxsKHRoaXMpLGk9cEIuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLG89blt0Ll9YMl9LRVldLGE9cEIuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpLHM9blt0Ll9ZMl9LRVldLGw9dGhpcy54KCkuc2NhbGUsYz10aGlzLnkoKS5zY2FsZTtyZXR1cm4gbyE9bnVsbD8obi53aWR0aD1mdW5jdGlvbih1LGgsZil7cmV0dXJuIE1hdGguYWJzKG8odSxoLGYpLWkodSxoLGYpKX0sbi54PWZ1bmN0aW9uKHUsaCxmKXtyZXR1cm4gTWF0aC5taW4obyh1LGgsZiksaSh1LGgsZikpfSk6KG4ud2lkdGg9ZnVuY3Rpb24odSxoLGYpe3JldHVybiByLl9yZWN0YW5nbGVXaWR0aChsKX0sbi54PWZ1bmN0aW9uKHUsaCxmKXtyZXR1cm4gaSh1LGgsZiktLjUqbi53aWR0aCh1LGgsZil9KSxzIT1udWxsPyhuLmhlaWdodD1mdW5jdGlvbih1LGgsZil7cmV0dXJuIE1hdGguYWJzKHModSxoLGYpLWEodSxoLGYpKX0sbi55PWZ1bmN0aW9uKHUsaCxmKXtyZXR1cm4gTWF0aC5tYXgocyh1LGgsZiksYSh1LGgsZikpLW4uaGVpZ2h0KHUsaCxmKX0pOihuLmhlaWdodD1mdW5jdGlvbih1LGgsZil7cmV0dXJuIHIuX3JlY3RhbmdsZVdpZHRoKGMpfSxuLnk9ZnVuY3Rpb24odSxoLGYpe3JldHVybiBhKHUsaCxmKS0uNSpuLmhlaWdodCh1LGgsZil9KSxkZWxldGUgblt0Ll9YMl9LRVldLGRlbGV0ZSBuW3QuX1kyX0tFWV0sbn0sdC5wcm90b3R5cGUuX2dlbmVyYXRlRHJhd1N0ZXBzPWZ1bmN0aW9uKCl7cmV0dXJuW3thdHRyVG9Qcm9qZWN0b3I6dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IoInJlY3RhbmdsZXMiKX1dfSx0LnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHk9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PT0ieDIiP2UucHJvdG90eXBlLl9maWx0ZXJGb3JQcm9wZXJ0eS5jYWxsKHRoaXMsIngiKTpyPT09InkyIj9lLnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHkuY2FsbCh0aGlzLCJ5Iik6ZS5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5LmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUueD1mdW5jdGlvbihyLG4saSl7aWYocj09bnVsbClyZXR1cm4gZS5wcm90b3R5cGUueC5jYWxsKHRoaXMpO2lmKG49PW51bGw/ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscik6ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscixuLGkpLG4hPW51bGwpe3ZhciBvPXRoaXMueDIoKSxhPW8mJm8uYWNjZXNzb3I7YSE9bnVsbCYmdGhpcy5fYmluZFByb3BlcnR5KHQuX1gyX0tFWSxhLG4sby5wb3N0U2NhbGUpfXJldHVybiBuIGluc3RhbmNlb2YgZkIuQ2F0ZWdvcnkmJm4uaW5uZXJQYWRkaW5nKDApLm91dGVyUGFkZGluZygwKSx0aGlzfSx0LnByb3RvdHlwZS54Mj1mdW5jdGlvbihyLG4pe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQuX1gyX0tFWSk7dmFyIGk9dGhpcy54KCksbz1pJiZpLnNjYWxlO3JldHVybiB0aGlzLl9iaW5kUHJvcGVydHkodC5fWDJfS0VZLHIsbyxuKSx0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLnk9ZnVuY3Rpb24ocixuLGkpe2lmKHI9PW51bGwpcmV0dXJuIGUucHJvdG90eXBlLnkuY2FsbCh0aGlzKTtpZihuPT1udWxsP2UucHJvdG90eXBlLnkuY2FsbCh0aGlzLHIpOmUucHJvdG90eXBlLnkuY2FsbCh0aGlzLHIsbixpKSxuIT1udWxsKXt2YXIgbz10aGlzLnkyKCksYT1vJiZvLmFjY2Vzc29yO2EhPW51bGwmJnRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9ZMl9LRVksYSxuLG8ucG9zdFNjYWxlKX1yZXR1cm4gbiBpbnN0YW5jZW9mIGZCLkNhdGVnb3J5JiZuLmlubmVyUGFkZGluZygwKS5vdXRlclBhZGRpbmcoMCksdGhpc30sdC5wcm90b3R5cGUueTI9ZnVuY3Rpb24ocixuKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9ZMl9LRVkpO3ZhciBpPXRoaXMueSgpLG89aSYmaS5zY2FsZTtyZXR1cm4gdGhpcy5fYmluZFByb3BlcnR5KHQuX1kyX0tFWSxyLG8sbiksdGhpcy5yZW5kZXIoKSx0aGlzfSx0LnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO3JldHVybiB0aGlzLmVudGl0aWVzKCkuZmlsdGVyKGZ1bmN0aW9uKGkpe3ZhciBvPWkuZGF0dW0sYT1pLmluZGV4LHM9aS5kYXRhc2V0LGw9bi54KG8sYSxzKSxjPW4ueShvLGEscyksdT1uLndpZHRoKG8sYSxzKSxoPW4uaGVpZ2h0KG8sYSxzKTtyZXR1cm4gbDw9ci54JiZyLng8PWwrdSYmYzw9ci55JiZyLnk8PWMraH0pfSx0LnByb3RvdHlwZS5fZW50aXR5Qm91bmRzPWZ1bmN0aW9uKHIpe3ZhciBuPXIuZGF0dW0saT1yLmluZGV4LG89ci5kYXRhc2V0O3JldHVybiB0aGlzLl9lbnRpdHlCQm94KG4saSxvLHRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpKX0sdC5wcm90b3R5cGUuX2VudGl0eUJCb3g9ZnVuY3Rpb24ocixuLGksbyl7cmV0dXJue3g6by54KHIsbixpKSx5Om8ueShyLG4saSksd2lkdGg6by53aWR0aChyLG4saSksaGVpZ2h0Om8uaGVpZ2h0KHIsbixpKX19LHQucHJvdG90eXBlLmxhYmVsPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2xhYmVsOih0aGlzLl9sYWJlbD1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLmxhYmVsc0VuYWJsZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fbGFiZWxzRW5hYmxlZDoodGhpcy5fbGFiZWxzRW5hYmxlZD1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnM9ZnVuY3Rpb24oKXt2YXIgcj1lLnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzLmNhbGwodGhpcyk7cmV0dXJuIHRoaXMueDIoKSE9bnVsbCYmKHIueDI9cEIuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54MigpKSksdGhpcy55MigpIT1udWxsJiYoci55Mj1wQi5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkyKCkpKSxyfSx0LnByb3RvdHlwZS5fcGl4ZWxQb2ludD1mdW5jdGlvbihyLG4saSl7dmFyIG89dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksYT1vLngocixuLGkpLHM9by55KHIsbixpKSxsPW8ud2lkdGgocixuLGkpLGM9by5oZWlnaHQocixuLGkpLHU9YStsLzIsaD1zK2MvMjtyZXR1cm57eDp1LHk6aH19LHQucHJvdG90eXBlLl9yZWN0YW5nbGVXaWR0aD1mdW5jdGlvbihyKXtpZihyIGluc3RhbmNlb2YgZkIuQ2F0ZWdvcnkpcmV0dXJuIHIucmFuZ2VCYW5kKCk7dmFyIG49cj09PXRoaXMueCgpLnNjYWxlP3RoaXMueCgpLmFjY2Vzc29yOnRoaXMueSgpLmFjY2Vzc29yLGk9YlVlLnNldChPYy5BcnJheS5mbGF0dGVuKHRoaXMuZGF0YXNldHMoKS5tYXAoZnVuY3Rpb24oYyl7cmV0dXJuIGMuZGF0YSgpLm1hcChmdW5jdGlvbih1LGgpe3JldHVybiBuKHUsaCxjKS52YWx1ZU9mKCl9KX0pKSkudmFsdWVzKCkubWFwKGZ1bmN0aW9uKGMpe3JldHVybitjfSksbz1PYy5NYXRoLm1pbihpLDApLGE9T2MuTWF0aC5tYXgoaSwwKSxzPXIuc2NhbGUobyksbD1yLnNjYWxlKGEpO3JldHVybihsLXMpL01hdGguYWJzKGEtbyl9LHQucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dmFyIHI9bmV3IE9jLk1hcCxuPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO3JldHVybiB0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihpKXt2YXIgbz1pLmRhdGEoKS5tYXAoZnVuY3Rpb24oYSxzKXt2YXIgbD1PYy5NYXRoLmlzVmFsaWROdW1iZXIobi54KGEscyxpKSkmJk9jLk1hdGguaXNWYWxpZE51bWJlcihuLnkoYSxzLGkpKSYmT2MuTWF0aC5pc1ZhbGlkTnVtYmVyKG4ud2lkdGgoYSxzLGkpKSYmT2MuTWF0aC5pc1ZhbGlkTnVtYmVyKG4uaGVpZ2h0KGEscyxpKSk7cmV0dXJuIGw/YTpudWxsfSk7ci5zZXQoaSxvKX0pLHJ9LHQucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24ocil7dmFyIG49dGhpczt0aGlzLl9yZW5kZXJBcmVhLnNlbGVjdEFsbCgiLmxhYmVsLWFyZWEiKS5yZW1vdmUoKSx0aGlzLl9sYWJlbHNFbmFibGVkJiZ0aGlzLmxhYmVsKCkhPW51bGwmJk9jLldpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2RyYXdMYWJlbHMoKX0scil9LHQucHJvdG90eXBlLl9kcmF3TGFiZWxzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXRoaXMuX2dldERhdGFUb0RyYXcoKTt0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihpLG8pe3JldHVybiByLl9kcmF3TGFiZWwobixpLG8pfSl9LHQucHJvdG90eXBlLl9kcmF3TGFiZWw9ZnVuY3Rpb24ocixuLGkpe2Zvcih2YXIgbz10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxhPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJnIikuY2xhc3NlZCgibGFiZWwtYXJlYSIsITApLHM9bmV3IERhdC5TdmdDb250ZXh0KGEubm9kZSgpKSxsPW5ldyBEYXQuQ2FjaGVNZWFzdXJlcihzKSxjPW5ldyBEYXQuV3JpdGVyKGwscyksdT10aGlzLngoKS5zY2FsZS5yYW5nZSgpLGg9dGhpcy55KCkuc2NhbGUucmFuZ2UoKSxmPU1hdGgubWluLmFwcGx5KG51bGwsdSkscD1NYXRoLm1heC5hcHBseShudWxsLHUpLGQ9TWF0aC5taW4uYXBwbHkobnVsbCxoKSxnPU1hdGgubWF4LmFwcGx5KG51bGwsaCksXz1yLmdldChuKSx5PV8ubGVuZ3RoLHg9MDt4PHk7eCsrKXt2YXIgYj1fW3hdO2lmKGIhPW51bGwpe3ZhciBTPSIiK3RoaXMubGFiZWwoKShiLHgsbiksQz1sLm1lYXN1cmUoUyksUD1vLngoYix4LG4pLGs9by55KGIseCxuKSxPPW8ud2lkdGgoYix4LG4pLEQ9by5oZWlnaHQoYix4LG4pO2lmKEMuaGVpZ2h0PD1EJiZDLndpZHRoPD1PKXt2YXIgQj0oTy1DLndpZHRoKS8yLEk9KEQtQy5oZWlnaHQpLzI7UCs9QixrKz1JO3ZhciBMPXttaW46UCxtYXg6UCtDLndpZHRofSxSPXttaW46ayxtYXg6aytDLmhlaWdodH07aWYoTC5taW48Znx8TC5tYXg+cHx8Ui5taW48ZHx8Ui5tYXg+Z3x8dGhpcy5fb3ZlcmxheUxhYmVsKEwsUix4LGkscikpY29udGludWU7dmFyIEY9by5maWxsKGIseCxuKSx6PU9jLkNvbG9yLmNvbnRyYXN0KCJ3aGl0ZSIsRikqMS42PE9jLkNvbG9yLmNvbnRyYXN0KCJibGFjayIsRiksVT1hLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1ArIiwiK2srIikiKSxXPXo/ImRhcmstbGFiZWwiOiJsaWdodC1sYWJlbCI7VS5jbGFzc2VkKFcsITApLGMud3JpdGUoUyxDLndpZHRoLEMuaGVpZ2h0LHt4QWxpZ246ImNlbnRlciIseUFsaWduOiJjZW50ZXIifSxVLm5vZGUoKSl9fX19LHQucHJvdG90eXBlLl9vdmVybGF5TGFiZWw9ZnVuY3Rpb24ocixuLGksbyxhKXtmb3IodmFyIHM9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksbD10aGlzLmRhdGFzZXRzKCksYz1vO2M8bC5sZW5ndGg7YysrKWZvcih2YXIgdT1sW2NdLGg9YS5nZXQodSksZj1oLmxlbmd0aCxwPWM9PT1vP2krMTowO3A8ZjtwKyspaWYoT2MuRE9NLmludGVyc2VjdHNCQm94KHIsbix0aGlzLl9lbnRpdHlCQm94KGhbcF0scCx1LHMpKSlyZXR1cm4hMDtyZXR1cm4hMX0sdC5fWDJfS0VZPSJ4MiIsdC5fWTJfS0VZPSJ5MiIsdH0oVFVlLlhZUGxvdCk7T2F0LlJlY3RhbmdsZT1DVWV9KTt2YXIgVEt0PUgoSGF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShIYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBBVWU9KGRlKCksVXQocGUpKSx6YXQ9eWwoKSxQVWU9QnUoKSxJVWU9WEYoKSxMVWU9VXUoKSxFS3Q9dmF0KCksa1VlPWtmKCksUlVlPUh2KCksTlVlPVJzKCksRmF0PUZlKCksQmF0PUlTKCksd2w9bnMoKSxEVWU9VnYoKSxPVWU9ZnVuY3Rpb24oZSl7QVVlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7ci5fbGFiZWxGb3JtYXR0ZXI9UFVlLmlkZW50aXR5KCksci5fbGFiZWxzRW5hYmxlZD0hMSxyLmFkZENsYXNzKCJzY2F0dGVyLXBsb3QiKTt2YXIgbj1uZXcga1VlLkVhc2luZztuLnN0YXJ0RGVsYXkoNSksbi5zdGVwRHVyYXRpb24oMjUwKSxuLm1heFRvdGFsRHVyYXRpb24od2wuUGxvdC5fQU5JTUFUSU9OX01BWF9EVVJBVElPTiksci5hbmltYXRvcihCYXQuQW5pbWF0b3IuTUFJTixuKSxyLmF0dHIoIm9wYWNpdHkiLC42KSxyLmF0dHIoImZpbGwiLG5ldyBOVWUuQ29sb3IoKS5yYW5nZSgpWzBdKSxyLnNpemUoNik7dmFyIGk9SVVlLmNpcmNsZSgpO3JldHVybiByLnN5bWJvbChmdW5jdGlvbigpe3JldHVybiBpfSksci5fbGFiZWxDb25maWc9bmV3IEZhdC5NYXAscn1yZXR1cm4gdC5wcm90b3R5cGUuX2J1aWxkTGlnaHR3ZWlnaHRQbG90RW50aXRpZXM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWUucHJvdG90eXBlLl9idWlsZExpZ2h0d2VpZ2h0UGxvdEVudGl0aWVzLmNhbGwodGhpcyxyKTtyZXR1cm4gaS5tYXAoZnVuY3Rpb24obyl7dmFyIGE9d2wuUGxvdC5fc2NhbGVkQWNjZXNzb3Iobi5zaXplKCkpKG8uZGF0dW0sby5pbmRleCxvLmRhdGFzZXQpO3JldHVybiBvLmRpYW1ldGVyPWEsb30pfSx0LnByb3RvdHlwZS5fY3JlYXRlRHJhd2VyPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIG5ldyBMVWUuUHJveHlEcmF3ZXIoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEVLdC5TeW1ib2xTVkdEcmF3ZXJ9LGZ1bmN0aW9uKGkpe3JldHVybiBuZXcgUlVlLkNhbnZhc0RyYXdlcihpLEVLdC5tYWtlU3ltYm9sQ2FudmFzRHJhd1N0ZXAocixmdW5jdGlvbigpe3JldHVybiB3bC5QbG90Ll9zY2FsZWRBY2Nlc3NvcihuLnN5bWJvbCgpKX0sZnVuY3Rpb24oKXtyZXR1cm4gd2wuUGxvdC5fc2NhbGVkQWNjZXNzb3Iobi5zaXplKCkpfSkpfSl9LHQucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24ocixuKXtyZXR1cm4gcj09bnVsbD90aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9TSVpFX0tFWSk6KHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9TSVpFX0tFWSxyLG4pLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLnN5bWJvbD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9TWU1CT0xfS0VZKToodGhpcy5fcHJvcGVydHlCaW5kaW5ncy5zZXQodC5fU1lNQk9MX0tFWSx7YWNjZXNzb3I6cn0pLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3ZhciByPVtdO2lmKHRoaXMuX2FuaW1hdGVPbk5leHRSZW5kZXIoKSl7dmFyIG49dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksaT13bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnN5bWJvbCgpKTtuLmQ9ZnVuY3Rpb24obyxhLHMpe3JldHVybiBpKG8sYSxzKSgwKShudWxsKX0sci5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6bixhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcihCYXQuQW5pbWF0b3IuUkVTRVQpfSl9cmV0dXJuIHIucHVzaCh7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKEJhdC5BbmltYXRvci5NQUlOKX0pLHJ9LHQucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnM9ZnVuY3Rpb24oKXt2YXIgcj1lLnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzLmNhbGwodGhpcyksbj13bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksaT13bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSk7cmV0dXJuIHIueD1uLHIueT1pLHIudHJhbnNmb3JtPWZ1bmN0aW9uKG8sYSxzKXtyZXR1cm4idHJhbnNsYXRlKCIrbihvLGEscykrIiwiK2kobyxhLHMpKyIpIn0sci5kPXRoaXMuX2NvbnN0cnVjdFN5bWJvbEdlbmVyYXRvcigpLHJ9LHQucHJvdG90eXBlLl9jb25zdHJ1Y3RTeW1ib2xHZW5lcmF0b3I9ZnVuY3Rpb24oKXt2YXIgcj13bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnN5bWJvbCgpKSxuPXdsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuc2l6ZSgpKTtyZXR1cm4gZnVuY3Rpb24oaSxvLGEpe3JldHVybiByKGksbyxhKShuKGksbyxhKSkobnVsbCl9fSx0LnByb3RvdHlwZS5fZW50aXR5Qm91bmRzPWZ1bmN0aW9uKHIpe3JldHVybnt4OnIucG9zaXRpb24ueC1yLmRpYW1ldGVyLzIseTpyLnBvc2l0aW9uLnktci5kaWFtZXRlci8yLHdpZHRoOnIuZGlhbWV0ZXIsaGVpZ2h0OnIuZGlhbWV0ZXJ9fSx0LnByb3RvdHlwZS5fZW50aXR5VmlzaWJsZU9uUGxvdD1mdW5jdGlvbihyLG4pe3ZhciBpPXttaW46bi50b3BMZWZ0LngsbWF4Om4uYm90dG9tUmlnaHQueH0sbz17bWluOm4udG9wTGVmdC55LG1heDpuLmJvdHRvbVJpZ2h0Lnl9LGE9dGhpcy5fZW50aXR5Qm91bmRzKHIpO3JldHVybiBGYXQuRE9NLmludGVyc2VjdHNCQm94KGksbyxhKX0sdC5wcm90b3R5cGUuZW50aXRpZXNBdD1mdW5jdGlvbihyKXt2YXIgbj13bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksaT13bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSksbz13bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnNpemUoKSk7cmV0dXJuIHRoaXMuZW50aXRpZXMoKS5maWx0ZXIoZnVuY3Rpb24oYSl7dmFyIHM9YS5kYXR1bSxsPWEuaW5kZXgsYz1hLmRhdGFzZXQsdT1uKHMsbCxjKSxoPWkocyxsLGMpLGY9byhzLGwsYyk7cmV0dXJuIHUtZi8yPD1yLngmJnIueDw9dStmLzImJmgtZi8yPD1yLnkmJnIueTw9aCtmLzJ9KX0sdC5wcm90b3R5cGUubGFiZWxzRW5hYmxlZD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9sYWJlbHNFbmFibGVkOih0aGlzLl9sYWJlbHNFbmFibGVkPXIsdGhpcy5fY2xlYXJBdHRyVG9Qcm9qZWN0b3JDYWNoZSgpLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQ9ZnVuY3Rpb24ocil7dmFyIG49ZS5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldC5jYWxsKHRoaXMsciksaT10aGlzLl9yZW5kZXJBcmVhLmFwcGVuZCgiZyIpLmNsYXNzZWQodC5fTEFCRUxfQVJFQV9DTEFTUywhMCksbz1uZXcgemF0LlN2Z0NvbnRleHQoaS5ub2RlKCkpLGE9bmV3IHphdC5DYWNoZU1lYXN1cmVyKG8pLHM9bmV3IHphdC5Xcml0ZXIoYSxvKTtyZXR1cm4gdGhpcy5fbGFiZWxDb25maWcuc2V0KHIse2xhYmVsQXJlYTppLG1lYXN1cmVyOmEsd3JpdGVyOnN9KSxufSx0LnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldE5vZGVzPWZ1bmN0aW9uKHIpe2UucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXMuY2FsbCh0aGlzLHIpO3ZhciBuPXRoaXMuX2xhYmVsQ29uZmlnLmdldChyKTtuIT1udWxsJiYobi5sYWJlbEFyZWEucmVtb3ZlKCksdGhpcy5fbGFiZWxDb25maWcuZGVsZXRlKHIpKX0sdC5wcm90b3R5cGUuX2FkZGl0aW9uYWxQYWludD1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe3JldHVybiBuLl9sYWJlbENvbmZpZy5nZXQoaSkubGFiZWxBcmVhLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpfSksdGhpcy5fbGFiZWxzRW5hYmxlZCYmRmF0LldpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2RyYXdMYWJlbHMoKX0scil9LHQucHJvdG90eXBlLl9kcmF3TGFiZWxzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXRoaXMuX2dldERhdGFUb0RyYXcoKSxpPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKG8pe2Zvcih2YXIgYT1uLmdldChvKSxzPWEubGVuZ3RoLGw9MDtsPHM7bCsrKXt2YXIgYz1hW2xdO2MhPW51bGwmJnIuX2RyYXdMYWJlbChjLGwsbyxpKX19KX0sdC5wcm90b3R5cGUuX2RyYXdMYWJlbD1mdW5jdGlvbihyLG4saSxvKXtpZihyLmxhYmVsIT1udWxsKXt2YXIgYT10aGlzLl9sYWJlbENvbmZpZy5nZXQoaSkscz1hLmxhYmVsQXJlYSxsPWEubWVhc3VyZXIsYz1hLndyaXRlcix1PXt4Om8ueChyLG4saSkseTpvLnkocixuLGkpfSxoPXdsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuc2l6ZSgpKSxmPWgocixuLGkpLHA9dGhpcy5fbGFiZWxGb3JtYXR0ZXIoci5sYWJlbCxyLG4saSksZD1sLm1lYXN1cmUocCksZz10aGlzLl9jYWxjdWxhdGVMYWJlbFByb3BlcnRpZXModSxmLGQpLF89Zy5jb250YWluZXJEaW1lbnNpb25zLHk9Zy5sYWJlbENvbnRhaW5lck9yaWdpbix4PWcubGFiZWxPcmlnaW4sYj1nLmFsaWdubWVudCxTPXRoaXMuX2NyZWF0ZUxhYmVsQ29udGFpbmVyKHMseSx4LGQpLEM9e3hBbGlnbjpiLngseUFsaWduOmIueX07Yy53cml0ZShwLF8ud2lkdGgsXy5oZWlnaHQsQyxTLm5vZGUoKSl9fSx0LnByb3RvdHlwZS5fY2FsY3VsYXRlTGFiZWxQcm9wZXJ0aWVzPWZ1bmN0aW9uKHIsbixpKXt2YXIgbz1uPGkuaGVpZ2h0P24vMit0Ll9MQUJFTF9NQVJHSU5fRlJPTV9CVUJCTEU6MDtyZXR1cm57Y29udGFpbmVyRGltZW5zaW9uczp7d2lkdGg6aS53aWR0aCxoZWlnaHQ6aS5oZWlnaHR9LGxhYmVsQ29udGFpbmVyT3JpZ2luOnt4OnIueC1pLndpZHRoLzIseTpyLnktaS5oZWlnaHQvMitvfSxsYWJlbE9yaWdpbjp7eDpyLngseTpyLnl9LGFsaWdubWVudDp7eDoiY2VudGVyIix5OiJjZW50ZXIifX19LHQucHJvdG90eXBlLl9jcmVhdGVMYWJlbENvbnRhaW5lcj1mdW5jdGlvbihyLG4saSxvKXt2YXIgYT1yLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK24ueCsiLCAiK24ueSsiKSIpO3JldHVybiBhLmNsYXNzZWQoIm9uLWJhci1sYWJlbCIsITApLGF9LHQuX1NJWkVfS0VZPSJzaXplIix0Ll9TWU1CT0xfS0VZPSJzeW1ib2wiLHQuX0xBQkVMX0FSRUFfQ0xBU1M9InNjYXR0ZXItbGFiZWwtdGV4dC1hcmVhIix0Ll9MQUJFTF9NQVJHSU5fRlJPTV9CVUJCTEU9MTUsdH0oRFVlLlhZUGxvdCk7SGF0LlNjYXR0ZXI9T1VlfSk7dmFyIENLdD1IKFZhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoVmF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgelVlPShkZSgpLFV0KHBlKSksRlVlPWtmKCksQlVlPVV1KCksSFVlPV9hdCgpLFZVZT1ScygpLFVVZT1BRigpLExTPW5zKCkscVVlPVZ2KCksR1VlPWZ1bmN0aW9uKGUpe3pVZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLmFkZENsYXNzKCJzZWdtZW50LXBsb3QiKSxyLmF0dHIoInN0cm9rZSIsbmV3IFZVZS5Db2xvcigpLnJhbmdlKClbMF0pLHIuYXR0cigic3Ryb2tlLXdpZHRoIiwiMnB4Iikscn1yZXR1cm4gdC5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbigpe3JldHVybiBuZXcgQlVlLlByb3h5RHJhd2VyKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBIVWUuU2VnbWVudFNWR0RyYXdlcn0sZnVuY3Rpb24oKXtyZXR1cm4gVVVlLndhcm4oImNhbnZhcyByZW5kZXJlciBpcyBub3Qgc3VwcG9ydGVkIG9uIFNlZ21lbnQgUGxvdCEiKSxudWxsfSl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3JldHVyblt7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOm5ldyBGVWUuTnVsbH1dfSx0LnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHk9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PT0ieDIiP2UucHJvdG90eXBlLl9maWx0ZXJGb3JQcm9wZXJ0eS5jYWxsKHRoaXMsIngiKTpyPT09InkyIj9lLnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHkuY2FsbCh0aGlzLCJ5Iik6ZS5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5LmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUueD1mdW5jdGlvbihyLG4pe2lmKHI9PW51bGwpcmV0dXJuIGUucHJvdG90eXBlLnguY2FsbCh0aGlzKTtpZihuPT1udWxsKWUucHJvdG90eXBlLnguY2FsbCh0aGlzLHIpO2Vsc2V7ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscixuKTt2YXIgaT10aGlzLngyKCksbz1pJiZpLmFjY2Vzc29yO28hPW51bGwmJnRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9YMl9LRVksbyxuKX1yZXR1cm4gdGhpc30sdC5wcm90b3R5cGUueDI9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fWDJfS0VZKTt2YXIgbj10aGlzLngoKSxpPW4mJm4uc2NhbGU7cmV0dXJuIHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9YMl9LRVkscixpKSx0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLnk9ZnVuY3Rpb24ocixuKXtpZihyPT1udWxsKXJldHVybiBlLnByb3RvdHlwZS55LmNhbGwodGhpcyk7aWYobj09bnVsbCllLnByb3RvdHlwZS55LmNhbGwodGhpcyxyKTtlbHNle2UucHJvdG90eXBlLnkuY2FsbCh0aGlzLHIsbik7dmFyIGk9dGhpcy55MigpLG89aSYmaS5hY2Nlc3NvcjtvIT1udWxsJiZ0aGlzLl9iaW5kUHJvcGVydHkodC5fWTJfS0VZLG8sbil9cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLnkyPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQuX1kyX0tFWSk7dmFyIG49dGhpcy55KCksaT1uJiZuLnNjYWxlO3JldHVybiB0aGlzLl9iaW5kUHJvcGVydHkodC5fWTJfS0VZLHIsaSksdGhpcy5yZW5kZXIoKSx0aGlzfSx0LnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7dmFyIHI9ZS5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycy5jYWxsKHRoaXMpO3JldHVybiByLngxPUxTLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxyLngyPXRoaXMueDIoKT09bnVsbD9MUy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSk6TFMuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54MigpKSxyLnkxPUxTLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSxyLnkyPXRoaXMueTIoKT09bnVsbD9MUy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSk6TFMuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55MigpKSxyfSx0LnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuZW50aXR5TmVhcmVzdChyKTtyZXR1cm4gbiE9bnVsbD9bbl06W119LHQucHJvdG90eXBlLmVudGl0aWVzSW49ZnVuY3Rpb24ocixuKXt2YXIgaSxvO2lmKG49PW51bGwpe3ZhciBhPXI7aT17bWluOmEudG9wTGVmdC54LG1heDphLmJvdHRvbVJpZ2h0Lnh9LG89e21pbjphLnRvcExlZnQueSxtYXg6YS5ib3R0b21SaWdodC55fX1lbHNlIGk9cixvPW47cmV0dXJuIHRoaXMuX2VudGl0aWVzSW50ZXJzZWN0aW5nKGksbyl9LHQucHJvdG90eXBlLl9lbnRpdGllc0ludGVyc2VjdGluZz1mdW5jdGlvbihyLG4pe2Zvcih2YXIgaT1bXSxvPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGE9dGhpcy5lbnRpdGllcygpLHM9YS5sZW5ndGgsbD0wO2w8cztsKyspe3ZhciBjPWFbbF07dGhpcy5fbGluZUludGVyc2VjdHNCb3goYyxyLG4sbykmJmkucHVzaChjKX1yZXR1cm4gaX0sdC5wcm90b3R5cGUuX2xpbmVJbnRlcnNlY3RzQm94PWZ1bmN0aW9uKHIsbixpLG8pe3ZhciBhPXRoaXMscz1vLngxKHIuZGF0dW0sci5pbmRleCxyLmRhdGFzZXQpLGw9by54MihyLmRhdHVtLHIuaW5kZXgsci5kYXRhc2V0KSxjPW8ueTEoci5kYXR1bSxyLmluZGV4LHIuZGF0YXNldCksdT1vLnkyKHIuZGF0dW0sci5pbmRleCxyLmRhdGFzZXQpO2lmKG4ubWluPD1zJiZzPD1uLm1heCYmaS5taW48PWMmJmM8PWkubWF4fHxuLm1pbjw9bCYmbDw9bi5tYXgmJmkubWluPD11JiZ1PD1pLm1heClyZXR1cm4hMDt2YXIgaD17eDpzLHk6Y30sZj17eDpsLHk6dX0scD1be3g6bi5taW4seTppLm1pbn0se3g6bi5taW4seTppLm1heH0se3g6bi5tYXgseTppLm1heH0se3g6bi5tYXgseTppLm1pbn1dLGQ9cC5maWx0ZXIoZnVuY3Rpb24oZyxfKXtyZXR1cm4gXyE9PTA/YS5fbGluZUludGVyc2VjdHNTZWdtZW50KGgsZixnLHBbXy0xXSkmJmEuX2xpbmVJbnRlcnNlY3RzU2VnbWVudChnLHBbXy0xXSxoLGYpOiExfSk7cmV0dXJuIGQubGVuZ3RoPjB9LHQucHJvdG90eXBlLl9saW5lSW50ZXJzZWN0c1NlZ21lbnQ9ZnVuY3Rpb24ocixuLGksbyl7dmFyIGE9ZnVuY3Rpb24ocyxsLGMpe3JldHVybihsLngtcy54KSooYy55LWwueSktKGwueS1zLnkpKihjLngtbC54KX07cmV0dXJuIGEocixuLGkpKmEocixuLG8pPDB9LHQuX1gyX0tFWT0ieDIiLHQuX1kyX0tFWT0ieTIiLHR9KHFVZS5YWVBsb3QpO1ZhdC5TZWdtZW50PUdVZX0pO3ZhciBJS3Q9SChVYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFVhdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFdVZT0oZGUoKSxVdChwZSkpLEFLdD0oRXIoKSxVdChNcikpLFlVZT1rZigpLFBLdD1DUygpLGUwPUZlKCksalVlPVRhdCgpLFhVZT1ucygpLCRVZT1mdW5jdGlvbihlKXtXVWUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fc3RhY2tpbmdSZXN1bHQ9UEt0Lm1lbVRodW5rKGZ1bmN0aW9uKCl7cmV0dXJuIHIuZGF0YXNldHMoKX0sZnVuY3Rpb24oKXtyZXR1cm4gci54KCkuYWNjZXNzb3J9LGZ1bmN0aW9uKCl7cmV0dXJuIHIueSgpLmFjY2Vzc29yfSxmdW5jdGlvbigpe3JldHVybiByLl9zdGFja2luZ09yZGVyfSxmdW5jdGlvbihuLGksbyxhKXtyZXR1cm4gZTAuU3RhY2tpbmcuc3RhY2sobixpLG8sYSl9KSxyLl9zdGFja2VkRXh0ZW50PVBLdC5tZW1UaHVuayhyLl9zdGFja2luZ1Jlc3VsdCxmdW5jdGlvbigpe3JldHVybiByLngoKS5hY2Nlc3Nvcn0sZnVuY3Rpb24oKXtyZXR1cm4gci5fZmlsdGVyRm9yUHJvcGVydHkoInkiKX0sZnVuY3Rpb24obixpLG8pe3JldHVybiBlMC5TdGFja2luZy5zdGFja2VkRXh0ZW50KG4saSxvKX0pLHIuX2Jhc2VsaW5lVmFsdWU9MCxyLl9zdGFja2luZ09yZGVyPSJib3R0b211cCIsci5hZGRDbGFzcygic3RhY2tlZC1hcmVhLXBsb3QiKSxyLl9iYXNlbGluZVZhbHVlUHJvdmlkZXI9ZnVuY3Rpb24oKXtyZXR1cm5bci5fYmFzZWxpbmVWYWx1ZV19LHIuY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQoITEpLHJ9cmV0dXJuIHQucHJvdG90eXBlLmNyb3BwZWRSZW5kZXJpbmdFbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP2UucHJvdG90eXBlLmNyb3BwZWRSZW5kZXJpbmdFbmFibGVkLmNhbGwodGhpcyk6cj8oZTAuV2luZG93Lndhcm4oIldhcm5pbmc6IFN0YWNrZWQgQXJlYSBQbG90IGRvZXMgbm90IHN1cHBvcnQgY3JvcHBlZCByZW5kZXJpbmcuIiksdGhpcyk6ZS5wcm90b3R5cGUuY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQuY2FsbCh0aGlzLHIpfSx0LnByb3RvdHlwZS5fZ2V0QW5pbWF0b3I9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyBZVWUuTnVsbH0sdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyksdGhpcy5fYmFzZWxpbmU9dGhpcy5fcmVuZGVyQXJlYS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJiYXNlbGluZSIsITApfSx0LnByb3RvdHlwZS54PWZ1bmN0aW9uKHIsbil7cmV0dXJuIHI9PW51bGw/ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMpOihuPT1udWxsP2UucHJvdG90eXBlLnguY2FsbCh0aGlzLHIpOmUucHJvdG90eXBlLnguY2FsbCh0aGlzLHIsbiksdGhpcy5fY2hlY2tTYW1lRG9tYWluKCksdGhpcyl9LHQucHJvdG90eXBlLnk9ZnVuY3Rpb24ocixuKXtyZXR1cm4gcj09bnVsbD9lLnByb3RvdHlwZS55LmNhbGwodGhpcyk6KG49PW51bGw/ZS5wcm90b3R5cGUueS5jYWxsKHRoaXMscik6ZS5wcm90b3R5cGUueS5jYWxsKHRoaXMscixuKSx0aGlzLl9jaGVja1NhbWVEb21haW4oKSx0aGlzKX0sdC5wcm90b3R5cGUueU9mZnNldD1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX3N0YWNraW5nUmVzdWx0KCk7aWYoaSE9bnVsbCl7dmFyIG89aS5nZXQocik7aWYobyE9bnVsbCl7dmFyIGE9by5nZXQoU3RyaW5nKG4pKTtpZihhIT1udWxsKXJldHVybiBhLm9mZnNldH19fSx0LnByb3RvdHlwZS5zdGFja2luZ09yZGVyPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3N0YWNraW5nT3JkZXI6KHRoaXMuX3N0YWNraW5nT3JkZXI9cix0aGlzLl9vbkRhdGFzZXRVcGRhdGUoKSx0aGlzKX0sdC5wcm90b3R5cGUuZG93bnNhbXBsaW5nRW5hYmxlZD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD9lLnByb3RvdHlwZS5kb3duc2FtcGxpbmdFbmFibGVkLmNhbGwodGhpcyk6KGUwLldpbmRvdy53YXJuKCJXYXJuaW5nOiBTdGFja2VkIEFyZWEgUGxvdCBkb2VzIG5vdCBzdXBwb3J0IGRvd25zYW1wbGluZyIpLHRoaXMpfSx0LnByb3RvdHlwZS5fYWRkaXRpb25hbFBhaW50PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy55KCkuc2NhbGUuc2NhbGUodGhpcy5fYmFzZWxpbmVWYWx1ZSksbj17eDE6MCx5MTpyLHgyOnRoaXMud2lkdGgoKSx5MjpyfTt0aGlzLl9nZXRBbmltYXRvcigiYmFzZWxpbmUiKS5hbmltYXRlKHRoaXMuX2Jhc2VsaW5lLG4pfSx0LnByb3RvdHlwZS5fdXBkYXRlWVNjYWxlPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy55KCksbj1yJiZyLnNjYWxlO24hPW51bGwmJihuLmFkZFBhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXIodGhpcy5fYmFzZWxpbmVWYWx1ZVByb3ZpZGVyKSxuLmFkZEluY2x1ZGVkVmFsdWVzUHJvdmlkZXIodGhpcy5fYmFzZWxpbmVWYWx1ZVByb3ZpZGVyKSl9LHQucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tTYW1lRG9tYWluKCksZS5wcm90b3R5cGUuX29uRGF0YXNldFVwZGF0ZS5jYWxsKHRoaXMpLHRoaXN9LHQucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eT1mdW5jdGlvbihyKXt2YXIgbj0ieSI7cmV0dXJuIHI9PT1uP1t0aGlzLl9zdGFja2VkRXh0ZW50KCldOmUucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eS5jYWxsKHRoaXMscil9LHQucHJvdG90eXBlLl9jaGVja1NhbWVEb21haW49ZnVuY3Rpb24oKXtpZighIXRoaXMuX3Byb2plY3RvcnNSZWFkeSgpKXt2YXIgcj10aGlzLmRhdGFzZXRzKCksbj10aGlzLngoKS5hY2Nlc3NvcixpPXIubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBBS3Quc2V0KGEuZGF0YSgpLm1hcChmdW5jdGlvbihzLGwpe3JldHVybiBlMC5TdGFja2luZy5ub3JtYWxpemVLZXkobihzLGwsYSkpfSkpLnZhbHVlcygpfSksbz10Ll9kb21haW5LZXlzKHIsbik7aS5zb21lKGZ1bmN0aW9uKGEpe3JldHVybiBhLmxlbmd0aCE9PW8ubGVuZ3RofSkmJmUwLldpbmRvdy53YXJuKCJ0aGUgZG9tYWlucyBhY3Jvc3MgdGhlIGRhdGFzZXRzIGFyZSBub3QgdGhlIHNhbWUuIFBsb3QgbWF5IHByb2R1Y2UgdW5pbnRlbmRlZCBiZWhhdmlvci4iKX19LHQuX2RvbWFpbktleXM9ZnVuY3Rpb24ocixuKXt2YXIgaT1BS3Quc2V0KCk7cmV0dXJuIHIuZm9yRWFjaChmdW5jdGlvbihvKXtmb3IodmFyIGE9by5kYXRhKCkscz1hLmxlbmd0aCxsPTA7bDxzO2wrKyl7dmFyIGM9YVtsXTtpLmFkZChuKGMsbCxvKSl9fSksaS52YWx1ZXMoKX0sdC5wcm90b3R5cGUuX2Nvb3JkaW5hdGVQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPVhVZS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksaT10aGlzLnkoKS5hY2Nlc3NvcixvPXRoaXMueCgpLmFjY2Vzc29yLGE9ZnVuY3Rpb24odSxoLGYpe3JldHVybiBlMC5TdGFja2luZy5ub3JtYWxpemVLZXkobyh1LGgsZikpfSxzPXRoaXMuX3N0YWNraW5nUmVzdWx0KCksbD1mdW5jdGlvbih1LGgsZil7dmFyIHA9K2kodSxoLGYpLGQ9cy5nZXQoZikuZ2V0KGEodSxoLGYpKS5vZmZzZXQ7cmV0dXJuIHIueSgpLnNjYWxlLnNjYWxlKHArZCl9LGM9ZnVuY3Rpb24odSxoLGYpe3ZhciBwPXMuZ2V0KGYpLmdldChhKHUsaCxmKSkub2Zmc2V0O3JldHVybiByLnkoKS5zY2FsZS5zY2FsZShwKX07cmV0dXJuW24sbCxjXX0sdC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciByPWUucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnMuY2FsbCh0aGlzKSxuPXRoaXMuX2Nvb3JkaW5hdGVQcm9qZWN0b3JzKCksaT1uWzBdLG89blsxXSxhPW5bMl07cmV0dXJuIHIuZD10aGlzLl9jb25zdHJ1Y3RBcmVhUHJvamVjdG9yKGksbyxhKSxyfSx0LnByb3RvdHlwZS5fcGl4ZWxQb2ludD1mdW5jdGlvbihyLG4saSl7dmFyIG89ZS5wcm90b3R5cGUuX3BpeGVsUG9pbnQuY2FsbCh0aGlzLHIsbixpKSxhPXRoaXMueCgpLmFjY2Vzc29yKHIsbixpKSxzPXRoaXMueSgpLmFjY2Vzc29yKHIsbixpKSxsPXRoaXMueSgpLnNjYWxlLnNjYWxlKCtzK3RoaXMuX3N0YWNraW5nUmVzdWx0KCkuZ2V0KGkpLmdldChlMC5TdGFja2luZy5ub3JtYWxpemVLZXkoYSkpLm9mZnNldCk7cmV0dXJue3g6by54LHk6bH19LHR9KGpVZS5BcmVhKTtVYXQuU3RhY2tlZEFyZWE9JFVlfSk7dmFyIGtLdD1IKFdhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoV2F0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgS1VlPShkZSgpLFV0KHBlKSkscWF0PXlsKCksWlVlPUJ1KCksTEt0PUNTKCksZEI9RmUoKSxHYXQ9eTQoKSxKVWU9bnMoKSxRVWU9ZnVuY3Rpb24oZSl7S1VlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9InZlcnRpY2FsIik7dmFyIG49ZS5jYWxsKHRoaXMscil8fHRoaXM7cmV0dXJuIG4uX2V4dHJlbWFGb3JtYXR0ZXI9WlVlLmlkZW50aXR5KCksbi5fc3RhY2tpbmdSZXN1bHQ9TEt0Lm1lbVRodW5rKGZ1bmN0aW9uKCl7cmV0dXJuIG4uZGF0YXNldHMoKX0sZnVuY3Rpb24oKXtyZXR1cm4gbi5wb3NpdGlvbigpLmFjY2Vzc29yfSxmdW5jdGlvbigpe3JldHVybiBuLmxlbmd0aCgpLmFjY2Vzc29yfSxmdW5jdGlvbigpe3JldHVybiBuLl9zdGFja2luZ09yZGVyfSxmdW5jdGlvbihpLG8sYSxzKXtyZXR1cm4gZEIuU3RhY2tpbmcuc3RhY2soaSxvLGEscyl9KSxuLl9zdGFja2VkRXh0ZW50PUxLdC5tZW1UaHVuayhuLl9zdGFja2luZ1Jlc3VsdCxmdW5jdGlvbigpe3JldHVybiBuLnBvc2l0aW9uKCkuYWNjZXNzb3J9LGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2ZpbHRlckZvclByb3BlcnR5KG4uX2lzVmVydGljYWw/InkiOiJ4Iil9LGZ1bmN0aW9uKGksbyxhKXtyZXR1cm4gZEIuU3RhY2tpbmcuc3RhY2tlZEV4dGVudChpLG8sYSl9KSxuLmFkZENsYXNzKCJzdGFja2VkLWJhci1wbG90Iiksbi5fc3RhY2tpbmdPcmRlcj0iYm90dG9tdXAiLG59cmV0dXJuIHQucHJvdG90eXBlLnN0YWNraW5nT3JkZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fc3RhY2tpbmdPcmRlcjoodGhpcy5fc3RhY2tpbmdPcmRlcj1yLHRoaXMuX29uRGF0YXNldFVwZGF0ZSgpLHRoaXMpfSx0LnByb3RvdHlwZS5leHRyZW1hRm9ybWF0dGVyPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MD90aGlzLl9leHRyZW1hRm9ybWF0dGVyOih0aGlzLl9leHRyZW1hRm9ybWF0dGVyPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyksdGhpcy5fbGFiZWxBcmVhPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJnIikuY2xhc3NlZChHYXQuQmFyLl9MQUJFTF9BUkVBX0NMQVNTLCEwKTt2YXIgcj1uZXcgcWF0LlN2Z0NvbnRleHQodGhpcy5fbGFiZWxBcmVhLm5vZGUoKSk7dGhpcy5fbWVhc3VyZXI9bmV3IHFhdC5DYWNoZU1lYXN1cmVyKHIpLHRoaXMuX3dyaXRlcj1uZXcgcWF0LldyaXRlcih0aGlzLl9tZWFzdXJlcixyKX0sdC5wcm90b3R5cGUuX2RyYXdMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO2UucHJvdG90eXBlLl9kcmF3TGFiZWxzLmNhbGwodGhpcyksdGhpcy5fbGFiZWxBcmVhLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpO3ZhciBuPSt0aGlzLmJhc2VsaW5lVmFsdWUoKSxpPXRoaXMucG9zaXRpb24oKS5zY2FsZSxvPXRoaXMubGVuZ3RoKCkuc2NhbGUsYT1kQi5TdGFja2luZy5zdGFja2VkRXh0ZW50cyh0aGlzLl9zdGFja2luZ1Jlc3VsdCgpKSxzPWEubWF4aW11bUV4dGVudHMsbD1hLm1pbmltdW1FeHRlbnRzLGM9W10sdT1mdW5jdGlvbihmLHAsZCl7dmFyIGc9cC50b3BMZWZ0LF89Zy54LHk9Zy55LHg9cC5ib3R0b21SaWdodC54LXAudG9wTGVmdC54LGI9cC5ib3R0b21SaWdodC55LXAudG9wTGVmdC55LFM9ci5faXNWZXJ0aWNhbD94PmQ6Yj5kO2lmKCFTKXt2YXIgQz1yLl9sYWJlbEFyZWEuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrXysiLCAiK3krIikiKTtDLmNsYXNzZWQoInN0YWNrZWQtYmFyLWxhYmVsIiwhMCk7dmFyIFA9e3hBbGlnbjoiY2VudGVyIix5QWxpZ246ImNlbnRlciJ9O3IuX3dyaXRlci53cml0ZShmLHgsYixQLEMubm9kZSgpKX1yZXR1cm4gU30saD1mdW5jdGlvbihmLHApe3ZhciBkPXIuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yKCksZz1yLndpZHRoKCksXz1yLmhlaWdodCgpO2YuZm9yRWFjaChmdW5jdGlvbih5KXtpZih5LmV4dGVudCE9PW4pe3ZhciB4PXIuZXh0cmVtYUZvcm1hdHRlcigpKHkuZXh0ZW50KSxiPXIuX21lYXN1cmVyLm1lYXN1cmUoeCksUz15LnN0YWNrZWREYXR1bSxDPVMub3JpZ2luYWxEYXR1bSxQPVMub3JpZ2luYWxJbmRleCxrPVMub3JpZ2luYWxEYXRhc2V0O2lmKCFyLl9pc0RhdHVtT25TY3JlZW4oZCxnLF8sQyxQLGspKXJldHVybjt2YXIgTz1KVWUuUGxvdC5fc2NhbGVkQWNjZXNzb3Ioci5hdHRyKEdhdC5CYXIuX0JBUl9USElDS05FU1NfS0VZKSkoQyxQLGspLEQ9by5zY2FsZSh5LmV4dGVudCksQj1yLl9nZXRQb3NpdGlvbkF0dHIoaS5zY2FsZSh5LmF4aXNWYWx1ZSksTykrTy8yLEk9ci5faXNWZXJ0aWNhbD97eDpCLHk6RH06e3g6RCx5OkJ9LEw9cChJLGIsTyksUj11KHgse3RvcExlZnQ6TCxib3R0b21SaWdodDp7eDpMLngrYi53aWR0aCx5OkwueStiLmhlaWdodH19LE8pO2MucHVzaChSKX19KX07aChzLGZ1bmN0aW9uKGYscCxkKXt2YXIgZz1yLl9pc1ZlcnRpY2FsP3Aud2lkdGg6cC5oZWlnaHQsXz1yLl9pc1ZlcnRpY2FsP3AuaGVpZ2h0OnAud2lkdGg7cmV0dXJue3g6ci5faXNWZXJ0aWNhbD9mLngtZy8yOmYueCt0Ll9FWFRSRU1BX0xBQkVMX01BUkdJTl9GUk9NX0JBUix5OnIuX2lzVmVydGljYWw/Zi55LV86Zi55LWcvMn19KSxoKGwsZnVuY3Rpb24oZixwLGQpe3ZhciBnPXIuX2lzVmVydGljYWw/cC53aWR0aDpwLmhlaWdodCxfPXIuX2lzVmVydGljYWw/cC5oZWlnaHQ6cC53aWR0aDtyZXR1cm57eDpyLl9pc1ZlcnRpY2FsP2YueC1nLzI6Zi54LV8seTpyLl9pc1ZlcnRpY2FsP2YueSt0Ll9FWFRSRU1BX0xBQkVMX01BUkdJTl9GUk9NX0JBUjpmLnktZy8yfX0pLGMuc29tZShmdW5jdGlvbihmKXtyZXR1cm4gZn0pJiZ0aGlzLl9sYWJlbEFyZWEuc2VsZWN0QWxsKCJnIikucmVtb3ZlKCl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvcj1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj1lLnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3IuY2FsbCh0aGlzKSxpPXRoaXMuX2lzVmVydGljYWw/InkiOiJ4IixvPXRoaXMubGVuZ3RoKCkuc2NhbGUsYT10aGlzLmxlbmd0aCgpLmFjY2Vzc29yLHM9dGhpcy5wb3NpdGlvbigpLmFjY2Vzc29yLGw9ZnVuY3Rpb24oZCxnLF8pe3JldHVybiBkQi5TdGFja2luZy5ub3JtYWxpemVLZXkocyhkLGcsXykpfSxjPXRoaXMuX3N0YWNraW5nUmVzdWx0KCksdT1mdW5jdGlvbihkLGcsXyl7cmV0dXJuIG8uc2NhbGUoYy5nZXQoXykuZ2V0KGwoZCxnLF8pKS5vZmZzZXQpfSxoPWZ1bmN0aW9uKGQsZyxfKXtyZXR1cm4gby5zY2FsZSgrYShkLGcsXykrYy5nZXQoXykuZ2V0KGwoZCxnLF8pKS5vZmZzZXQpfSxmPWZ1bmN0aW9uKGQsZyxfKXtyZXR1cm4gTWF0aC5hYnMoaChkLGcsXyktdShkLGcsXykpfTtuW3RoaXMuX2lzVmVydGljYWw/ImhlaWdodCI6IndpZHRoIl09Zjt2YXIgcD1mdW5jdGlvbihkLGcsXyl7cmV0dXJuK2EoZCxnLF8pPDA/dShkLGcsXyk6aChkLGcsXyl9O3JldHVybiBuW2ldPWZ1bmN0aW9uKGQsZyxfKXtyZXR1cm4gci5faXNWZXJ0aWNhbD9wKGQsZyxfKTpwKGQsZyxfKS1mKGQsZyxfKX0sbn0sdC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX2lzVmVydGljYWw/InkiOiJ4IjtyZXR1cm4gcj09PW4/W3RoaXMuX3N0YWNrZWRFeHRlbnQoKV06ZS5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5LmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sdC5fRVhUUkVNQV9MQUJFTF9NQVJHSU5fRlJPTV9CQVI9NSx0fShHYXQuQmFyKTtXYXQuU3RhY2tlZEJhcj1RVWV9KTt2YXIgUkt0PUgoWWF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShZYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB0cWU9KGRlKCksVXQocGUpKSxlcWU9RmUoKSxycWU9eTQoKSxucWU9bnMoKSxpcWU9ZnVuY3Rpb24oZSl7dHFlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2Nvbm5lY3RvcnNFbmFibGVkPSExLHIuYWRkQ2xhc3MoIndhdGVyZmFsbC1wbG90Iikscn1yZXR1cm4gdC5wcm90b3R5cGUuY29ubmVjdG9yc0VuYWJsZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fY29ubmVjdG9yc0VuYWJsZWQ6KHRoaXMuX2Nvbm5lY3RvcnNFbmFibGVkPXIsdGhpcyl9LHQucHJvdG90eXBlLnRvdGFsPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQuX1RPVEFMX0tFWSk6KHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9UT1RBTF9LRVkscixudWxsKSx0aGlzKX0sdC5wcm90b3R5cGUuX2FkZGl0aW9uYWxQYWludD1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3RoaXMuX2Nvbm5lY3RvckFyZWEuc2VsZWN0QWxsKCJsaW5lIikucmVtb3ZlKCksdGhpcy5fY29ubmVjdG9yc0VuYWJsZWQmJmVxZS5XaW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBuLl9kcmF3Q29ubmVjdG9ycygpfSxyKX0sdC5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldD1mdW5jdGlvbihyKXt2YXIgbj1lLnByb3RvdHlwZS5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0LmNhbGwodGhpcyxyKTtyZXR1cm4gdGhpcy5fY29ubmVjdG9yQXJlYT10aGlzLl9yZW5kZXJBcmVhLmFwcGVuZCgiZyIpLmNsYXNzZWQodC5fQ09OTkVDVE9SX0FSRUFfQ0xBU1MsITApLG59LHQucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eT1mdW5jdGlvbihyKXt2YXIgbj0ieSI7cmV0dXJuIHI9PT1uP1t0aGlzLl9leHRlbnRdOmUucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eS5jYWxsKHRoaXMscil9LHQucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvcj1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj1lLnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3IuY2FsbCh0aGlzKSxpPXRoaXMueSgpLnNjYWxlLG89bnFlLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMudG90YWwoKSksYT10aGlzLmF0dHIoInkiKTthPT1udWxsJiYobi55PWZ1bmN0aW9uKGwsYyx1KXt2YXIgaD1yLnkoKS5hY2Nlc3NvcihsLGMsdSksZj1vKGwsYyx1KTtpZihmKXJldHVybiBNYXRoLm1pbihpLnNjYWxlKGgpLGkuc2NhbGUoMCkpO3ZhciBwPXIuX3N1YnRvdGFsc1tjXTtpZihjPT09MClyZXR1cm4gaDwwP2kuc2NhbGUocC1oKTppLnNjYWxlKHApO3ZhciBkPXIuX3N1YnRvdGFsc1tjLTFdO3JldHVybiBwPmQ/aS5zY2FsZShwKTppLnNjYWxlKGQpfSk7dmFyIHM9dGhpcy5hdHRyKCJoZWlnaHQiKTtyZXR1cm4gcz09bnVsbCYmKG4uaGVpZ2h0PWZ1bmN0aW9uKGwsYyx1KXt2YXIgaD1vKGwsYyx1KSxmPXIueSgpLmFjY2Vzc29yKGwsYyx1KTtpZihoKXJldHVybiBNYXRoLmFicyhpLnNjYWxlKGYpLWkuc2NhbGUoMCkpO3ZhciBwPXIuX3N1YnRvdGFsc1tjXTtpZihjPT09MClyZXR1cm4gTWF0aC5hYnMoaS5zY2FsZShwKS1pLnNjYWxlKHAtZikpO3ZhciBkPXIuX3N1YnRvdGFsc1tjLTFdO3JldHVybiBNYXRoLmFicyhpLnNjYWxlKHApLWkuc2NhbGUoZCkpfSksbi5jbGFzcz1mdW5jdGlvbihsLGMsdSl7dmFyIGg9IiI7ci5hdHRyKCJjbGFzcyIpIT1udWxsJiYoaD1yLmF0dHIoImNsYXNzIikuYWNjZXNzb3IobCxjLHUpKyIgIik7dmFyIGY9byhsLGMsdSk7aWYoZilyZXR1cm4gaCt0Ll9CQVJfVE9UQUxfQ0xBU1M7dmFyIHA9ci55KCkuYWNjZXNzb3IobCxjLHUpO3JldHVybiBoKyhwPjA/dC5fQkFSX0dST1dUSF9DTEFTUzp0Ll9CQVJfREVDTElORV9DTEFTUyl9LG59LHQucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlU3VidG90YWxzKCksZS5wcm90b3R5cGUuX29uRGF0YXNldFVwZGF0ZS5jYWxsKHRoaXMpLHRoaXN9LHQucHJvdG90eXBlLl9jYWxjdWxhdGVTdWJ0b3RhbHNBbmRFeHRlbnQ9ZnVuY3Rpb24ocil7Zm9yKHZhciBuPU51bWJlci5NQVhfVkFMVUUsaT1OdW1iZXIuTUlOX1ZBTFVFLG89MCxhPSExLHM9ci5kYXRhKCksbD1zLmxlbmd0aCxjPTA7YzxsO2MrKyl7dmFyIHU9c1tjXSxoPXRoaXMueSgpLmFjY2Vzc29yKHUsYyxyKSxmPXRoaXMudG90YWwoKS5hY2Nlc3Nvcih1LGMscik7aWYoKCFmfHxjPT09MCkmJihvKz1oKSx0aGlzLl9zdWJ0b3RhbHMucHVzaChvKSxvPG4mJihuPW8pLG8+aSYmKGk9byksZiYmKGg8biYmKG49aCksaD5pJiYoaT1oKSksIWEmJmYpe2Zvcih2YXIgcD1oLW8sZD0wO2Q8dGhpcy5fc3VidG90YWxzLmxlbmd0aDtkKyspdGhpcy5fc3VidG90YWxzW2RdKz1wO2E9ITAsbys9cCxuKz1wLGkrPXB9fXRoaXMuX2V4dGVudD1bbixpXX0sdC5wcm90b3R5cGUuX2RyYXdDb25uZWN0b3JzPWZ1bmN0aW9uKCl7Zm9yKHZhciByPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLG49dGhpcy5kYXRhc2V0cygpWzBdLGk9MTtpPG4uZGF0YSgpLmxlbmd0aDtpKyspe3ZhciBvPWktMSxhPW4uZGF0YSgpW2ldLHM9bi5kYXRhKClbb10sbD1yLngocyxvLG4pLGM9ci54KGEsaSxuKStyLndpZHRoKGEsaSxuKSx1PXIueShhLGksbik7KHRoaXMuX3N1YnRvdGFsc1tpXT4wJiZ0aGlzLl9zdWJ0b3RhbHNbaV0+dGhpcy5fc3VidG90YWxzW29dfHx0aGlzLl9zdWJ0b3RhbHNbaV08MCYmdGhpcy5fc3VidG90YWxzW2ldPj10aGlzLl9zdWJ0b3RhbHNbb10pJiYodT1yLnkoYSxpLG4pK3IuaGVpZ2h0KGEsaSxuKSksdGhpcy5fY29ubmVjdG9yQXJlYS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKHQuX0NPTk5FQ1RPUl9DTEFTUywhMCkuYXR0cigieDEiLGwpLmF0dHIoIngyIixjKS5hdHRyKCJ5MSIsdSkuYXR0cigieTIiLHUpfX0sdC5wcm90b3R5cGUuX3VwZGF0ZVN1YnRvdGFscz1mdW5jdGlvbigpe3ZhciByPXRoaXMuZGF0YXNldHMoKTtpZihyLmxlbmd0aD4wKXt2YXIgbj1yW3IubGVuZ3RoLTFdO3RoaXMuX3N1YnRvdGFscz1uZXcgQXJyYXksdGhpcy5fY2FsY3VsYXRlU3VidG90YWxzQW5kRXh0ZW50KG4pfX0sdC5fQkFSX0RFQ0xJTkVfQ0xBU1M9IndhdGVyZmFsbC1kZWNsaW5lIix0Ll9CQVJfR1JPV1RIX0NMQVNTPSJ3YXRlcmZhbGwtZ3Jvd3RoIix0Ll9CQVJfVE9UQUxfQ0xBU1M9IndhdGVyZmFsbC10b3RhbCIsdC5fQ09OTkVDVE9SX0NMQVNTPSJjb25uZWN0b3IiLHQuX0NPTk5FQ1RPUl9BUkVBX0NMQVNTPSJjb25uZWN0b3ItYXJlYSIsdC5fVE9UQUxfS0VZPSJ0b3RhbCIsdH0ocnFlLkJhcik7WWF0LldhdGVyZmFsbD1pcWV9KTt2YXIgSVM9SCh6cz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoenMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB6Yz0oZGUoKSxVdChwZSkpO3pjLl9fZXhwb3J0U3RhcihUYXQoKSx6cyk7emMuX19leHBvcnRTdGFyKHk0KCksenMpO3pjLl9fZXhwb3J0U3RhcihHb3QoKSx6cyk7emMuX19leHBvcnRTdGFyKHdLdCgpLHpzKTt6Yy5fX2V4cG9ydFN0YXIoU2F0KCksenMpO3pjLl9fZXhwb3J0U3RhcihTS3QoKSx6cyk7emMuX19leHBvcnRTdGFyKE1LdCgpLHpzKTt6Yy5fX2V4cG9ydFN0YXIoVEt0KCksenMpO3pjLl9fZXhwb3J0U3RhcihDS3QoKSx6cyk7emMuX19leHBvcnRTdGFyKElLdCgpLHpzKTt6Yy5fX2V4cG9ydFN0YXIoa0t0KCksenMpO3pjLl9fZXhwb3J0U3RhcihSS3QoKSx6cyl9KTt2YXIgTkt0PUgoamF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2phdC52ZXJzaW9uPSIzLjkuMCJ9KTt2YXIgU2w9SChsbj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBGYz0oZGUoKSxVdChwZSkpOyRqdCgpO3ZhciBvcWU9a2YoKTtsbi5BbmltYXRvcnM9b3FlO3ZhciBhcWU9ZiR0KCk7bG4uQXhlcz1hcWU7dmFyIHNxZT1Qb3QoKTtsbi5Db21wb25lbnRzPXNxZTt2YXIgbHFlPSRBKCk7bG4uQ29uZmlncz1scWU7dmFyIGNxZT1CdSgpO2xuLkZvcm1hdHRlcnM9Y3FlO3ZhciB1cWU9SUYoKTtsbi5SZW5kZXJDb250cm9sbGVyPXVxZTt2YXIgaHFlPUhpdCgpO2xuLlJlbmRlclBvbGljaWVzPWhxZTt2YXIgZnFlPVhGKCk7bG4uU3ltYm9sRmFjdG9yaWVzPWZxZTt2YXIgcHFlPUR2KCk7bG4uRGlzcGF0Y2hlcnM9cHFlO3ZhciBkcWU9SHYoKTtsbi5EcmF3ZXJzPWRxZTt2YXIgbXFlPWw0KCk7bG4uSW50ZXJhY3Rpb25zPW1xZTt2YXIgZ3FlPUlTKCk7bG4uUGxvdHM9Z3FlO3ZhciBfcWU9UnMoKTtsbi5TY2FsZXM9X3FlO3ZhciB5cWU9RmUoKTtsbi5VdGlscz15cWU7RmMuX19leHBvcnRTdGFyKHQ0KCksbG4pO3ZhciB2cWU9SEYoKTtsbi5UaW1lSW50ZXJ2YWw9dnFlLlRpbWVJbnRlcnZhbDtGYy5fX2V4cG9ydFN0YXIoa2MoKSxsbik7RmMuX19leHBvcnRTdGFyKFdGKCksbG4pO0ZjLl9fZXhwb3J0U3RhcihZb3QoKSxsbik7dmFyIHhxZT1OS3QoKTtsbi52ZXJzaW9uPXhxZS52ZXJzaW9uO0ZjLl9fZXhwb3J0U3RhcihvNCgpLGxuKTtGYy5fX2V4cG9ydFN0YXIoVXUoKSxsbik7RmMuX19leHBvcnRTdGFyKE92KCksbG4pO0ZjLl9fZXhwb3J0U3Rhcih3b3QoKSxsbik7RmMuX19leHBvcnRTdGFyKFZ2KCksbG4pO0ZjLl9fZXhwb3J0U3RhcihucygpLGxuKTtGYy5fX2V4cG9ydFN0YXIoeGQoKSxsbik7RmMuX19leHBvcnRTdGFyKGt2KCksbG4pfSk7dmFyIFFLdD1IKChzWG4sSkt0KT0+e2Z1bmN0aW9uIEJxZSgpe3RoaXMuX19kYXRhX189W10sdGhpcy5zaXplPTB9Skt0LmV4cG9ydHM9QnFlfSk7dmFyIGp2PUgoKGxYbix0WnQpPT57ZnVuY3Rpb24gSHFlKGUsdCl7cmV0dXJuIGU9PT10fHxlIT09ZSYmdCE9PXR9dFp0LmV4cG9ydHM9SHFlfSk7dmFyIE00PUgoKGNYbixlWnQpPT57dmFyIFZxZT1qdigpO2Z1bmN0aW9uIFVxZShlLHQpe2Zvcih2YXIgcj1lLmxlbmd0aDtyLS07KWlmKFZxZShlW3JdWzBdLHQpKXJldHVybiByO3JldHVybi0xfWVadC5leHBvcnRzPVVxZX0pO3ZhciBuWnQ9SCgodVhuLHJadCk9Pnt2YXIgcXFlPU00KCksR3FlPUFycmF5LnByb3RvdHlwZSxXcWU9R3FlLnNwbGljZTtmdW5jdGlvbiBZcWUoZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXyxyPXFxZSh0LGUpO2lmKHI8MClyZXR1cm4hMTt2YXIgbj10Lmxlbmd0aC0xO3JldHVybiByPT1uP3QucG9wKCk6V3FlLmNhbGwodCxyLDEpLC0tdGhpcy5zaXplLCEwfXJadC5leHBvcnRzPVlxZX0pO3ZhciBvWnQ9SCgoaFhuLGladCk9Pnt2YXIganFlPU00KCk7ZnVuY3Rpb24gWHFlKGUpe3ZhciB0PXRoaXMuX19kYXRhX18scj1qcWUodCxlKTtyZXR1cm4gcjwwP3ZvaWQgMDp0W3JdWzFdfWladC5leHBvcnRzPVhxZX0pO3ZhciBzWnQ9SCgoZlhuLGFadCk9Pnt2YXIgJHFlPU00KCk7ZnVuY3Rpb24gS3FlKGUpe3JldHVybiAkcWUodGhpcy5fX2RhdGFfXyxlKT4tMX1hWnQuZXhwb3J0cz1LcWV9KTt2YXIgY1p0PUgoKHBYbixsWnQpPT57dmFyIFpxZT1NNCgpO2Z1bmN0aW9uIEpxZShlLHQpe3ZhciByPXRoaXMuX19kYXRhX18sbj1acWUocixlKTtyZXR1cm4gbjwwPygrK3RoaXMuc2l6ZSxyLnB1c2goW2UsdF0pKTpyW25dWzFdPXQsdGhpc31sWnQuZXhwb3J0cz1KcWV9KTt2YXIgRTQ9SCgoZFhuLHVadCk9Pnt2YXIgUXFlPVFLdCgpLHRHZT1uWnQoKSxlR2U9b1p0KCksckdlPXNadCgpLG5HZT1jWnQoKTtmdW5jdGlvbiB6UyhlKXt2YXIgdD0tMSxyPWU9PW51bGw/MDplLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxyOyl7dmFyIG49ZVt0XTt0aGlzLnNldChuWzBdLG5bMV0pfX16Uy5wcm90b3R5cGUuY2xlYXI9UXFlO3pTLnByb3RvdHlwZS5kZWxldGU9dEdlO3pTLnByb3RvdHlwZS5nZXQ9ZUdlO3pTLnByb3RvdHlwZS5oYXM9ckdlO3pTLnByb3RvdHlwZS5zZXQ9bkdlO3VadC5leHBvcnRzPXpTfSk7dmFyIGZadD1IKChtWG4saFp0KT0+e3ZhciBpR2U9RTQoKTtmdW5jdGlvbiBvR2UoKXt0aGlzLl9fZGF0YV9fPW5ldyBpR2UsdGhpcy5zaXplPTB9aFp0LmV4cG9ydHM9b0dlfSk7dmFyIGRadD1IKChnWG4scFp0KT0+e2Z1bmN0aW9uIGFHZShlKXt2YXIgdD10aGlzLl9fZGF0YV9fLHI9dC5kZWxldGUoZSk7cmV0dXJuIHRoaXMuc2l6ZT10LnNpemUscn1wWnQuZXhwb3J0cz1hR2V9KTt2YXIgZ1p0PUgoKF9YbixtWnQpPT57ZnVuY3Rpb24gc0dlKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldChlKX1tWnQuZXhwb3J0cz1zR2V9KTt2YXIgeVp0PUgoKHlYbixfWnQpPT57ZnVuY3Rpb24gbEdlKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhlKX1fWnQuZXhwb3J0cz1sR2V9KTt2YXIgY3N0PUgoKHZYbix2WnQpPT57dmFyIGNHZT10eXBlb2YgZ2xvYmFsPT0ib2JqZWN0IiYmZ2xvYmFsJiZnbG9iYWwuT2JqZWN0PT09T2JqZWN0JiZnbG9iYWw7dlp0LmV4cG9ydHM9Y0dlfSk7dmFyIEhjPUgoKHhYbix4WnQpPT57dmFyIHVHZT1jc3QoKSxoR2U9dHlwZW9mIHNlbGY9PSJvYmplY3QiJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixmR2U9dUdlfHxoR2V8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCk7eFp0LmV4cG9ydHM9ZkdlfSk7dmFyIFh2PUgoKGJYbixiWnQpPT57dmFyIHBHZT1IYygpLGRHZT1wR2UuU3ltYm9sO2JadC5leHBvcnRzPWRHZX0pO3ZhciBFWnQ9SCgod1huLE1adCk9Pnt2YXIgd1p0PVh2KCksU1p0PU9iamVjdC5wcm90b3R5cGUsbUdlPVNadC5oYXNPd25Qcm9wZXJ0eSxnR2U9U1p0LnRvU3RyaW5nLFQ0PXdadD93WnQudG9TdHJpbmdUYWc6dm9pZCAwO2Z1bmN0aW9uIF9HZShlKXt2YXIgdD1tR2UuY2FsbChlLFQ0KSxyPWVbVDRdO3RyeXtlW1Q0XT12b2lkIDA7dmFyIG49ITB9Y2F0Y2gobyl7fXZhciBpPWdHZS5jYWxsKGUpO3JldHVybiBuJiYodD9lW1Q0XT1yOmRlbGV0ZSBlW1Q0XSksaX1NWnQuZXhwb3J0cz1fR2V9KTt2YXIgQ1p0PUgoKFNYbixUWnQpPT57dmFyIHlHZT1PYmplY3QucHJvdG90eXBlLHZHZT15R2UudG9TdHJpbmc7ZnVuY3Rpb24geEdlKGUpe3JldHVybiB2R2UuY2FsbChlKX1UWnQuZXhwb3J0cz14R2V9KTt2YXIgbDA9SCgoTVhuLEladCk9Pnt2YXIgQVp0PVh2KCksYkdlPUVadCgpLHdHZT1DWnQoKSxTR2U9IltvYmplY3QgTnVsbF0iLE1HZT0iW29iamVjdCBVbmRlZmluZWRdIixQWnQ9QVp0P0FadC50b1N0cmluZ1RhZzp2b2lkIDA7ZnVuY3Rpb24gRUdlKGUpe3JldHVybiBlPT1udWxsP2U9PT12b2lkIDA/TUdlOlNHZTpQWnQmJlBadCBpbiBPYmplY3QoZSk/YkdlKGUpOndHZShlKX1JWnQuZXhwb3J0cz1FR2V9KTt2YXIgRWw9SCgoRVhuLExadCk9PntmdW5jdGlvbiBUR2UoZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuIGUhPW51bGwmJih0PT0ib2JqZWN0Inx8dD09ImZ1bmN0aW9uIil9TFp0LmV4cG9ydHM9VEdlfSk7dmFyIEZTPUgoKFRYbixrWnQpPT57dmFyIENHZT1sMCgpLEFHZT1FbCgpLFBHZT0iW29iamVjdCBBc3luY0Z1bmN0aW9uXSIsSUdlPSJbb2JqZWN0IEZ1bmN0aW9uXSIsTEdlPSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsa0dlPSJbb2JqZWN0IFByb3h5XSI7ZnVuY3Rpb24gUkdlKGUpe2lmKCFBR2UoZSkpcmV0dXJuITE7dmFyIHQ9Q0dlKGUpO3JldHVybiB0PT1JR2V8fHQ9PUxHZXx8dD09UEdlfHx0PT1rR2V9a1p0LmV4cG9ydHM9UkdlfSk7dmFyIE5adD1IKChDWG4sUlp0KT0+e3ZhciBOR2U9SGMoKSxER2U9TkdlWyJfX2NvcmUtanNfc2hhcmVkX18iXTtSWnQuZXhwb3J0cz1ER2V9KTt2YXIgelp0PUgoKEFYbixPWnQpPT57dmFyIHVzdD1OWnQoKSxEWnQ9ZnVuY3Rpb24oKXt2YXIgZT0vW14uXSskLy5leGVjKHVzdCYmdXN0LmtleXMmJnVzdC5rZXlzLklFX1BST1RPfHwiIik7cmV0dXJuIGU/IlN5bWJvbChzcmMpXzEuIitlOiIifSgpO2Z1bmN0aW9uIE9HZShlKXtyZXR1cm4hIURadCYmRFp0IGluIGV9T1p0LmV4cG9ydHM9T0dlfSk7dmFyIGhzdD1IKChQWG4sRlp0KT0+e3ZhciB6R2U9RnVuY3Rpb24ucHJvdG90eXBlLEZHZT16R2UudG9TdHJpbmc7ZnVuY3Rpb24gQkdlKGUpe2lmKGUhPW51bGwpe3RyeXtyZXR1cm4gRkdlLmNhbGwoZSl9Y2F0Y2godCl7fXRyeXtyZXR1cm4gZSsiIn1jYXRjaCh0KXt9fXJldHVybiIifUZadC5leHBvcnRzPUJHZX0pO3ZhciBIWnQ9SCgoSVhuLEJadCk9Pnt2YXIgSEdlPUZTKCksVkdlPXpadCgpLFVHZT1FbCgpLHFHZT1oc3QoKSxHR2U9L1tcXF4kLiorPygpW1xde318XS9nLFdHZT0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyxZR2U9RnVuY3Rpb24ucHJvdG90eXBlLGpHZT1PYmplY3QucHJvdG90eXBlLFhHZT1ZR2UudG9TdHJpbmcsJEdlPWpHZS5oYXNPd25Qcm9wZXJ0eSxLR2U9UmVnRXhwKCJeIitYR2UuY2FsbCgkR2UpLnJlcGxhY2UoR0dlLCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpO2Z1bmN0aW9uIFpHZShlKXtpZighVUdlKGUpfHxWR2UoZSkpcmV0dXJuITE7dmFyIHQ9SEdlKGUpP0tHZTpXR2U7cmV0dXJuIHQudGVzdChxR2UoZSkpfUJadC5leHBvcnRzPVpHZX0pO3ZhciBVWnQ9SCgoTFhuLFZadCk9PntmdW5jdGlvbiBKR2UoZSx0KXtyZXR1cm4gZT09bnVsbD92b2lkIDA6ZVt0XX1WWnQuZXhwb3J0cz1KR2V9KTt2YXIgYzA9SCgoa1huLHFadCk9Pnt2YXIgUUdlPUhadCgpLHRXZT1VWnQoKTtmdW5jdGlvbiBlV2UoZSx0KXt2YXIgcj10V2UoZSx0KTtyZXR1cm4gUUdlKHIpP3I6dm9pZCAwfXFadC5leHBvcnRzPWVXZX0pO3ZhciB6Qj1IKChSWG4sR1p0KT0+e3ZhciByV2U9YzAoKSxuV2U9SGMoKSxpV2U9cldlKG5XZSwiTWFwIik7R1p0LmV4cG9ydHM9aVdlfSk7dmFyIEM0PUgoKE5YbixXWnQpPT57dmFyIG9XZT1jMCgpLGFXZT1vV2UoT2JqZWN0LCJjcmVhdGUiKTtXWnQuZXhwb3J0cz1hV2V9KTt2YXIgWFp0PUgoKERYbixqWnQpPT57dmFyIFladD1DNCgpO2Z1bmN0aW9uIHNXZSgpe3RoaXMuX19kYXRhX189WVp0P1ladChudWxsKTp7fSx0aGlzLnNpemU9MH1qWnQuZXhwb3J0cz1zV2V9KTt2YXIgS1p0PUgoKE9YbiwkWnQpPT57ZnVuY3Rpb24gbFdlKGUpe3ZhciB0PXRoaXMuaGFzKGUpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1tlXTtyZXR1cm4gdGhpcy5zaXplLT10PzE6MCx0fSRadC5leHBvcnRzPWxXZX0pO3ZhciBKWnQ9SCgoelhuLFpadCk9Pnt2YXIgY1dlPUM0KCksdVdlPSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIixoV2U9T2JqZWN0LnByb3RvdHlwZSxmV2U9aFdlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIHBXZShlKXt2YXIgdD10aGlzLl9fZGF0YV9fO2lmKGNXZSl7dmFyIHI9dFtlXTtyZXR1cm4gcj09PXVXZT92b2lkIDA6cn1yZXR1cm4gZldlLmNhbGwodCxlKT90W2VdOnZvaWQgMH1aWnQuZXhwb3J0cz1wV2V9KTt2YXIgdEp0PUgoKEZYbixRWnQpPT57dmFyIGRXZT1DNCgpLG1XZT1PYmplY3QucHJvdG90eXBlLGdXZT1tV2UuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gX1dlKGUpe3ZhciB0PXRoaXMuX19kYXRhX187cmV0dXJuIGRXZT90W2VdIT09dm9pZCAwOmdXZS5jYWxsKHQsZSl9UVp0LmV4cG9ydHM9X1dlfSk7dmFyIHJKdD1IKChCWG4sZUp0KT0+e3ZhciB5V2U9QzQoKSx2V2U9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iO2Z1bmN0aW9uIHhXZShlLHQpe3ZhciByPXRoaXMuX19kYXRhX187cmV0dXJuIHRoaXMuc2l6ZSs9dGhpcy5oYXMoZSk/MDoxLHJbZV09eVdlJiZ0PT09dm9pZCAwP3ZXZTp0LHRoaXN9ZUp0LmV4cG9ydHM9eFdlfSk7dmFyIGlKdD1IKChIWG4sbkp0KT0+e3ZhciBiV2U9WFp0KCksd1dlPUtadCgpLFNXZT1KWnQoKSxNV2U9dEp0KCksRVdlPXJKdCgpO2Z1bmN0aW9uIEJTKGUpe3ZhciB0PS0xLHI9ZT09bnVsbD8wOmUubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7Kyt0PHI7KXt2YXIgbj1lW3RdO3RoaXMuc2V0KG5bMF0sblsxXSl9fUJTLnByb3RvdHlwZS5jbGVhcj1iV2U7QlMucHJvdG90eXBlLmRlbGV0ZT13V2U7QlMucHJvdG90eXBlLmdldD1TV2U7QlMucHJvdG90eXBlLmhhcz1NV2U7QlMucHJvdG90eXBlLnNldD1FV2U7bkp0LmV4cG9ydHM9QlN9KTt2YXIgc0p0PUgoKFZYbixhSnQpPT57dmFyIG9KdD1pSnQoKSxUV2U9RTQoKSxDV2U9ekIoKTtmdW5jdGlvbiBBV2UoKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBvSnQsbWFwOm5ldyhDV2V8fFRXZSksc3RyaW5nOm5ldyBvSnR9fWFKdC5leHBvcnRzPUFXZX0pO3ZhciBjSnQ9SCgoVVhuLGxKdCk9PntmdW5jdGlvbiBQV2UoZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuIHQ9PSJzdHJpbmcifHx0PT0ibnVtYmVyInx8dD09InN5bWJvbCJ8fHQ9PSJib29sZWFuIj9lIT09Il9fcHJvdG9fXyI6ZT09PW51bGx9bEp0LmV4cG9ydHM9UFdlfSk7dmFyIEE0PUgoKHFYbix1SnQpPT57dmFyIElXZT1jSnQoKTtmdW5jdGlvbiBMV2UoZSx0KXt2YXIgcj1lLl9fZGF0YV9fO3JldHVybiBJV2UodCk/clt0eXBlb2YgdD09InN0cmluZyI/InN0cmluZyI6Imhhc2giXTpyLm1hcH11SnQuZXhwb3J0cz1MV2V9KTt2YXIgZkp0PUgoKEdYbixoSnQpPT57dmFyIGtXZT1BNCgpO2Z1bmN0aW9uIFJXZShlKXt2YXIgdD1rV2UodGhpcyxlKS5kZWxldGUoZSk7cmV0dXJuIHRoaXMuc2l6ZS09dD8xOjAsdH1oSnQuZXhwb3J0cz1SV2V9KTt2YXIgZEp0PUgoKFdYbixwSnQpPT57dmFyIE5XZT1BNCgpO2Z1bmN0aW9uIERXZShlKXtyZXR1cm4gTldlKHRoaXMsZSkuZ2V0KGUpfXBKdC5leHBvcnRzPURXZX0pO3ZhciBnSnQ9SCgoWVhuLG1KdCk9Pnt2YXIgT1dlPUE0KCk7ZnVuY3Rpb24geldlKGUpe3JldHVybiBPV2UodGhpcyxlKS5oYXMoZSl9bUp0LmV4cG9ydHM9eldlfSk7dmFyIHlKdD1IKChqWG4sX0p0KT0+e3ZhciBGV2U9QTQoKTtmdW5jdGlvbiBCV2UoZSx0KXt2YXIgcj1GV2UodGhpcyxlKSxuPXIuc2l6ZTtyZXR1cm4gci5zZXQoZSx0KSx0aGlzLnNpemUrPXIuc2l6ZT09bj8wOjEsdGhpc31fSnQuZXhwb3J0cz1CV2V9KTt2YXIgRkI9SCgoWFhuLHZKdCk9Pnt2YXIgSFdlPXNKdCgpLFZXZT1mSnQoKSxVV2U9ZEp0KCkscVdlPWdKdCgpLEdXZT15SnQoKTtmdW5jdGlvbiBIUyhlKXt2YXIgdD0tMSxyPWU9PW51bGw/MDplLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxyOyl7dmFyIG49ZVt0XTt0aGlzLnNldChuWzBdLG5bMV0pfX1IUy5wcm90b3R5cGUuY2xlYXI9SFdlO0hTLnByb3RvdHlwZS5kZWxldGU9VldlO0hTLnByb3RvdHlwZS5nZXQ9VVdlO0hTLnByb3RvdHlwZS5oYXM9cVdlO0hTLnByb3RvdHlwZS5zZXQ9R1dlO3ZKdC5leHBvcnRzPUhTfSk7dmFyIGJKdD1IKCgkWG4seEp0KT0+e3ZhciBXV2U9RTQoKSxZV2U9ekIoKSxqV2U9RkIoKSxYV2U9MjAwO2Z1bmN0aW9uICRXZShlLHQpe3ZhciByPXRoaXMuX19kYXRhX187aWYociBpbnN0YW5jZW9mIFdXZSl7dmFyIG49ci5fX2RhdGFfXztpZighWVdlfHxuLmxlbmd0aDxYV2UtMSlyZXR1cm4gbi5wdXNoKFtlLHRdKSx0aGlzLnNpemU9KytyLnNpemUsdGhpcztyPXRoaXMuX19kYXRhX189bmV3IGpXZShuKX1yZXR1cm4gci5zZXQoZSx0KSx0aGlzLnNpemU9ci5zaXplLHRoaXN9eEp0LmV4cG9ydHM9JFdlfSk7dmFyIFA0PUgoKEtYbix3SnQpPT57dmFyIEtXZT1FNCgpLFpXZT1mWnQoKSxKV2U9ZFp0KCksUVdlPWdadCgpLHRZZT15WnQoKSxlWWU9Ykp0KCk7ZnVuY3Rpb24gVlMoZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXz1uZXcgS1dlKGUpO3RoaXMuc2l6ZT10LnNpemV9VlMucHJvdG90eXBlLmNsZWFyPVpXZTtWUy5wcm90b3R5cGUuZGVsZXRlPUpXZTtWUy5wcm90b3R5cGUuZ2V0PVFXZTtWUy5wcm90b3R5cGUuaGFzPXRZZTtWUy5wcm90b3R5cGUuc2V0PWVZZTt3SnQuZXhwb3J0cz1WU30pO3ZhciBCQj1IKChaWG4sU0p0KT0+e2Z1bmN0aW9uIHJZZShlLHQpe2Zvcih2YXIgcj0tMSxuPWU9PW51bGw/MDplLmxlbmd0aDsrK3I8biYmdChlW3JdLHIsZSkhPT0hMTspO3JldHVybiBlfVNKdC5leHBvcnRzPXJZZX0pO3ZhciBmc3Q9SCgoSlhuLE1KdCk9Pnt2YXIgblllPWMwKCksaVllPWZ1bmN0aW9uKCl7dHJ5e3ZhciBlPW5ZZShPYmplY3QsImRlZmluZVByb3BlcnR5Iik7cmV0dXJuIGUoe30sIiIse30pLGV9Y2F0Y2godCl7fX0oKTtNSnQuZXhwb3J0cz1pWWV9KTt2YXIgSTQ9SCgoUVhuLFRKdCk9Pnt2YXIgRUp0PWZzdCgpO2Z1bmN0aW9uIG9ZZShlLHQscil7dD09Il9fcHJvdG9fXyImJkVKdD9FSnQoZSx0LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpyLHdyaXRhYmxlOiEwfSk6ZVt0XT1yfVRKdC5leHBvcnRzPW9ZZX0pO3ZhciBMND1IKCh0JG4sQ0p0KT0+e3ZhciBhWWU9STQoKSxzWWU9anYoKSxsWWU9T2JqZWN0LnByb3RvdHlwZSxjWWU9bFllLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIHVZZShlLHQscil7dmFyIG49ZVt0XTsoIShjWWUuY2FsbChlLHQpJiZzWWUobixyKSl8fHI9PT12b2lkIDAmJiEodCBpbiBlKSkmJmFZZShlLHQscil9Q0p0LmV4cG9ydHM9dVllfSk7dmFyIFVTPUgoKGUkbixBSnQpPT57dmFyIGhZZT1MNCgpLGZZZT1JNCgpO2Z1bmN0aW9uIHBZZShlLHQscixuKXt2YXIgaT0hcjtyfHwocj17fSk7Zm9yKHZhciBvPS0xLGE9dC5sZW5ndGg7KytvPGE7KXt2YXIgcz10W29dLGw9bj9uKHJbc10sZVtzXSxzLHIsZSk6dm9pZCAwO2w9PT12b2lkIDAmJihsPWVbc10pLGk/ZlllKHIscyxsKTpoWWUocixzLGwpfXJldHVybiByfUFKdC5leHBvcnRzPXBZZX0pO3ZhciBJSnQ9SCgociRuLFBKdCk9PntmdW5jdGlvbiBkWWUoZSx0KXtmb3IodmFyIHI9LTEsbj1BcnJheShlKTsrK3I8ZTspbltyXT10KHIpO3JldHVybiBufVBKdC5leHBvcnRzPWRZZX0pO3ZhciBZdT1IKChuJG4sTEp0KT0+e2Z1bmN0aW9uIG1ZZShlKXtyZXR1cm4gZSE9bnVsbCYmdHlwZW9mIGU9PSJvYmplY3QifUxKdC5leHBvcnRzPW1ZZX0pO3ZhciBSSnQ9SCgoaSRuLGtKdCk9Pnt2YXIgZ1llPWwwKCksX1llPVl1KCkseVllPSJbb2JqZWN0IEFyZ3VtZW50c10iO2Z1bmN0aW9uIHZZZShlKXtyZXR1cm4gX1llKGUpJiZnWWUoZSk9PXlZZX1rSnQuZXhwb3J0cz12WWV9KTt2YXIgcVM9SCgobyRuLE9KdCk9Pnt2YXIgTkp0PVJKdCgpLHhZZT1ZdSgpLERKdD1PYmplY3QucHJvdG90eXBlLGJZZT1ESnQuaGFzT3duUHJvcGVydHksd1llPURKdC5wcm9wZXJ0eUlzRW51bWVyYWJsZSxTWWU9Tkp0KGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk/Tkp0OmZ1bmN0aW9uKGUpe3JldHVybiB4WWUoZSkmJmJZZS5jYWxsKGUsImNhbGxlZSIpJiYhd1llLmNhbGwoZSwiY2FsbGVlIil9O09KdC5leHBvcnRzPVNZZX0pO3ZhciBUaT1IKChhJG4sekp0KT0+e3ZhciBNWWU9QXJyYXkuaXNBcnJheTt6SnQuZXhwb3J0cz1NWWV9KTt2YXIgQkp0PUgoKHMkbixGSnQpPT57ZnVuY3Rpb24gRVllKCl7cmV0dXJuITF9Rkp0LmV4cG9ydHM9RVllfSk7dmFyICR2PUgoKGs0LEdTKT0+e3ZhciBUWWU9SGMoKSxDWWU9Qkp0KCksVUp0PXR5cGVvZiBrND09Im9iamVjdCImJms0JiYhazQubm9kZVR5cGUmJms0LEhKdD1VSnQmJnR5cGVvZiBHUz09Im9iamVjdCImJkdTJiYhR1Mubm9kZVR5cGUmJkdTLEFZZT1ISnQmJkhKdC5leHBvcnRzPT09VUp0LFZKdD1BWWU/VFllLkJ1ZmZlcjp2b2lkIDAsUFllPVZKdD9WSnQuaXNCdWZmZXI6dm9pZCAwLElZZT1QWWV8fENZZTtHUy5leHBvcnRzPUlZZX0pO3ZhciBSND1IKChsJG4scUp0KT0+e3ZhciBMWWU9OTAwNzE5OTI1NDc0MDk5MSxrWWU9L14oPzowfFsxLTldXGQqKSQvO2Z1bmN0aW9uIFJZZShlLHQpe3ZhciByPXR5cGVvZiBlO3JldHVybiB0PXQ9PW51bGw/TFllOnQsISF0JiYocj09Im51bWJlciJ8fHIhPSJzeW1ib2wiJiZrWWUudGVzdChlKSkmJmU+LTEmJmUlMT09MCYmZTx0fXFKdC5leHBvcnRzPVJZZX0pO3ZhciBIQj1IKChjJG4sR0p0KT0+e3ZhciBOWWU9OTAwNzE5OTI1NDc0MDk5MTtmdW5jdGlvbiBEWWUoZSl7cmV0dXJuIHR5cGVvZiBlPT0ibnVtYmVyIiYmZT4tMSYmZSUxPT0wJiZlPD1OWWV9R0p0LmV4cG9ydHM9RFllfSk7dmFyIFlKdD1IKCh1JG4sV0p0KT0+e3ZhciBPWWU9bDAoKSx6WWU9SEIoKSxGWWU9WXUoKSxCWWU9IltvYmplY3QgQXJndW1lbnRzXSIsSFllPSJbb2JqZWN0IEFycmF5XSIsVlllPSJbb2JqZWN0IEJvb2xlYW5dIixVWWU9IltvYmplY3QgRGF0ZV0iLHFZZT0iW29iamVjdCBFcnJvcl0iLEdZZT0iW29iamVjdCBGdW5jdGlvbl0iLFdZZT0iW29iamVjdCBNYXBdIixZWWU9IltvYmplY3QgTnVtYmVyXSIsalllPSJbb2JqZWN0IE9iamVjdF0iLFhZZT0iW29iamVjdCBSZWdFeHBdIiwkWWU9IltvYmplY3QgU2V0XSIsS1llPSJbb2JqZWN0IFN0cmluZ10iLFpZZT0iW29iamVjdCBXZWFrTWFwXSIsSlllPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsUVllPSJbb2JqZWN0IERhdGFWaWV3XSIsdGplPSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLGVqZT0iW29iamVjdCBGbG9hdDY0QXJyYXldIixyamU9IltvYmplY3QgSW50OEFycmF5XSIsbmplPSJbb2JqZWN0IEludDE2QXJyYXldIixpamU9IltvYmplY3QgSW50MzJBcnJheV0iLG9qZT0iW29iamVjdCBVaW50OEFycmF5XSIsYWplPSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsc2plPSJbb2JqZWN0IFVpbnQxNkFycmF5XSIsbGplPSJbb2JqZWN0IFVpbnQzMkFycmF5XSIsVW49e307VW5bdGplXT1VbltlamVdPVVuW3JqZV09VW5bbmplXT1VbltpamVdPVVuW29qZV09VW5bYWplXT1VbltzamVdPVVuW2xqZV09ITA7VW5bQlllXT1VbltIWWVdPVVuW0pZZV09VW5bVlllXT1VbltRWWVdPVVuW1VZZV09VW5bcVllXT1VbltHWWVdPVVuW1dZZV09VW5bWVllXT1VbltqWWVdPVVuW1hZZV09VW5bJFllXT1VbltLWWVdPVVuW1pZZV09ITE7ZnVuY3Rpb24gY2plKGUpe3JldHVybiBGWWUoZSkmJnpZZShlLmxlbmd0aCkmJiEhVW5bT1llKGUpXX1XSnQuZXhwb3J0cz1jamV9KTt2YXIgTjQ9SCgoaCRuLGpKdCk9PntmdW5jdGlvbiB1amUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpfX1qSnQuZXhwb3J0cz11amV9KTt2YXIgVkI9SCgoRDQsV1MpPT57dmFyIGhqZT1jc3QoKSxYSnQ9dHlwZW9mIEQ0PT0ib2JqZWN0IiYmRDQmJiFENC5ub2RlVHlwZSYmRDQsTzQ9WEp0JiZ0eXBlb2YgV1M9PSJvYmplY3QiJiZXUyYmIVdTLm5vZGVUeXBlJiZXUyxmamU9TzQmJk80LmV4cG9ydHM9PT1YSnQscHN0PWZqZSYmaGplLnByb2Nlc3MscGplPWZ1bmN0aW9uKCl7dHJ5e3ZhciBlPU80JiZPNC5yZXF1aXJlJiZPNC5yZXF1aXJlKCJ1dGlsIikudHlwZXM7cmV0dXJuIGV8fHBzdCYmcHN0LmJpbmRpbmcmJnBzdC5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2godCl7fX0oKTtXUy5leHBvcnRzPXBqZX0pO3ZhciBZUz1IKChmJG4sWkp0KT0+e3ZhciBkamU9WUp0KCksbWplPU40KCksJEp0PVZCKCksS0p0PSRKdCYmJEp0LmlzVHlwZWRBcnJheSxnamU9S0p0P21qZShLSnQpOmRqZTtaSnQuZXhwb3J0cz1namV9KTt2YXIgZHN0PUgoKHAkbixKSnQpPT57dmFyIF9qZT1JSnQoKSx5amU9cVMoKSx2amU9VGkoKSx4amU9JHYoKSxiamU9UjQoKSx3amU9WVMoKSxTamU9T2JqZWN0LnByb3RvdHlwZSxNamU9U2plLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIEVqZShlLHQpe3ZhciByPXZqZShlKSxuPSFyJiZ5amUoZSksaT0hciYmIW4mJnhqZShlKSxvPSFyJiYhbiYmIWkmJndqZShlKSxhPXJ8fG58fGl8fG8scz1hP19qZShlLmxlbmd0aCxTdHJpbmcpOltdLGw9cy5sZW5ndGg7Zm9yKHZhciBjIGluIGUpKHR8fE1qZS5jYWxsKGUsYykpJiYhKGEmJihjPT0ibGVuZ3RoInx8aSYmKGM9PSJvZmZzZXQifHxjPT0icGFyZW50Iil8fG8mJihjPT0iYnVmZmVyInx8Yz09ImJ5dGVMZW5ndGgifHxjPT0iYnl0ZU9mZnNldCIpfHxiamUoYyxsKSkpJiZzLnB1c2goYyk7cmV0dXJuIHN9Skp0LmV4cG9ydHM9RWplfSk7dmFyIHo0PUgoKGQkbixRSnQpPT57dmFyIFRqZT1PYmplY3QucHJvdG90eXBlO2Z1bmN0aW9uIENqZShlKXt2YXIgdD1lJiZlLmNvbnN0cnVjdG9yLHI9dHlwZW9mIHQ9PSJmdW5jdGlvbiImJnQucHJvdG90eXBlfHxUamU7cmV0dXJuIGU9PT1yfVFKdC5leHBvcnRzPUNqZX0pO3ZhciBtc3Q9SCgobSRuLHRRdCk9PntmdW5jdGlvbiBBamUoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGUodChyKSl9fXRRdC5leHBvcnRzPUFqZX0pO3ZhciByUXQ9SCgoZyRuLGVRdCk9Pnt2YXIgUGplPW1zdCgpLElqZT1QamUoT2JqZWN0LmtleXMsT2JqZWN0KTtlUXQuZXhwb3J0cz1JamV9KTt2YXIgVUI9SCgoXyRuLG5RdCk9Pnt2YXIgTGplPXo0KCksa2plPXJRdCgpLFJqZT1PYmplY3QucHJvdG90eXBlLE5qZT1SamUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gRGplKGUpe2lmKCFMamUoZSkpcmV0dXJuIGtqZShlKTt2YXIgdD1bXTtmb3IodmFyIHIgaW4gT2JqZWN0KGUpKU5qZS5jYWxsKGUscikmJnIhPSJjb25zdHJ1Y3RvciImJnQucHVzaChyKTtyZXR1cm4gdH1uUXQuZXhwb3J0cz1EamV9KTt2YXIgSGY9SCgoeSRuLGlRdCk9Pnt2YXIgT2plPUZTKCksemplPUhCKCk7ZnVuY3Rpb24gRmplKGUpe3JldHVybiBlIT1udWxsJiZ6amUoZS5sZW5ndGgpJiYhT2plKGUpfWlRdC5leHBvcnRzPUZqZX0pO3ZhciBQZD1IKCh2JG4sb1F0KT0+e3ZhciBCamU9ZHN0KCksSGplPVVCKCksVmplPUhmKCk7ZnVuY3Rpb24gVWplKGUpe3JldHVybiBWamUoZSk/QmplKGUpOkhqZShlKX1vUXQuZXhwb3J0cz1VamV9KTt2YXIgc1F0PUgoKHgkbixhUXQpPT57dmFyIHFqZT1VUygpLEdqZT1QZCgpO2Z1bmN0aW9uIFdqZShlLHQpe3JldHVybiBlJiZxamUodCxHamUodCksZSl9YVF0LmV4cG9ydHM9V2plfSk7dmFyIGNRdD1IKChiJG4sbFF0KT0+e2Z1bmN0aW9uIFlqZShlKXt2YXIgdD1bXTtpZihlIT1udWxsKWZvcih2YXIgciBpbiBPYmplY3QoZSkpdC5wdXNoKHIpO3JldHVybiB0fWxRdC5leHBvcnRzPVlqZX0pO3ZhciBoUXQ9SCgodyRuLHVRdCk9Pnt2YXIgamplPUVsKCksWGplPXo0KCksJGplPWNRdCgpLEtqZT1PYmplY3QucHJvdG90eXBlLFpqZT1LamUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gSmplKGUpe2lmKCFqamUoZSkpcmV0dXJuICRqZShlKTt2YXIgdD1YamUoZSkscj1bXTtmb3IodmFyIG4gaW4gZSluPT0iY29uc3RydWN0b3IiJiYodHx8IVpqZS5jYWxsKGUsbikpfHxyLnB1c2gobik7cmV0dXJuIHJ9dVF0LmV4cG9ydHM9SmplfSk7dmFyIHUwPUgoKFMkbixmUXQpPT57dmFyIFFqZT1kc3QoKSx0WGU9aFF0KCksZVhlPUhmKCk7ZnVuY3Rpb24gclhlKGUpe3JldHVybiBlWGUoZSk/UWplKGUsITApOnRYZShlKX1mUXQuZXhwb3J0cz1yWGV9KTt2YXIgZFF0PUgoKE0kbixwUXQpPT57dmFyIG5YZT1VUygpLGlYZT11MCgpO2Z1bmN0aW9uIG9YZShlLHQpe3JldHVybiBlJiZuWGUodCxpWGUodCksZSl9cFF0LmV4cG9ydHM9b1hlfSk7dmFyIGdzdD1IKChGNCxqUyk9Pnt2YXIgYVhlPUhjKCkseVF0PXR5cGVvZiBGND09Im9iamVjdCImJkY0JiYhRjQubm9kZVR5cGUmJkY0LG1RdD15UXQmJnR5cGVvZiBqUz09Im9iamVjdCImJmpTJiYhalMubm9kZVR5cGUmJmpTLHNYZT1tUXQmJm1RdC5leHBvcnRzPT09eVF0LGdRdD1zWGU/YVhlLkJ1ZmZlcjp2b2lkIDAsX1F0PWdRdD9nUXQuYWxsb2NVbnNhZmU6dm9pZCAwO2Z1bmN0aW9uIGxYZShlLHQpe2lmKHQpcmV0dXJuIGUuc2xpY2UoKTt2YXIgcj1lLmxlbmd0aCxuPV9RdD9fUXQocik6bmV3IGUuY29uc3RydWN0b3Iocik7cmV0dXJuIGUuY29weShuKSxufWpTLmV4cG9ydHM9bFhlfSk7dmFyIF9zdD1IKChFJG4sdlF0KT0+e2Z1bmN0aW9uIGNYZShlLHQpe3ZhciByPS0xLG49ZS5sZW5ndGg7Zm9yKHR8fCh0PUFycmF5KG4pKTsrK3I8bjspdFtyXT1lW3JdO3JldHVybiB0fXZRdC5leHBvcnRzPWNYZX0pO3ZhciB5c3Q9SCgoVCRuLHhRdCk9PntmdW5jdGlvbiB1WGUoZSx0KXtmb3IodmFyIHI9LTEsbj1lPT1udWxsPzA6ZS5sZW5ndGgsaT0wLG89W107KytyPG47KXt2YXIgYT1lW3JdO3QoYSxyLGUpJiYob1tpKytdPWEpfXJldHVybiBvfXhRdC5leHBvcnRzPXVYZX0pO3ZhciB2c3Q9SCgoQyRuLGJRdCk9PntmdW5jdGlvbiBoWGUoKXtyZXR1cm5bXX1iUXQuZXhwb3J0cz1oWGV9KTt2YXIgcUI9SCgoQSRuLFNRdCk9Pnt2YXIgZlhlPXlzdCgpLHBYZT12c3QoKSxkWGU9T2JqZWN0LnByb3RvdHlwZSxtWGU9ZFhlLnByb3BlcnR5SXNFbnVtZXJhYmxlLHdRdD1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLGdYZT13UXQ/ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PW51bGw/W106KGU9T2JqZWN0KGUpLGZYZSh3UXQoZSksZnVuY3Rpb24odCl7cmV0dXJuIG1YZS5jYWxsKGUsdCl9KSl9OnBYZTtTUXQuZXhwb3J0cz1nWGV9KTt2YXIgRVF0PUgoKFAkbixNUXQpPT57dmFyIF9YZT1VUygpLHlYZT1xQigpO2Z1bmN0aW9uIHZYZShlLHQpe3JldHVybiBfWGUoZSx5WGUoZSksdCl9TVF0LmV4cG9ydHM9dlhlfSk7dmFyIEdCPUgoKEkkbixUUXQpPT57ZnVuY3Rpb24geFhlKGUsdCl7Zm9yKHZhciByPS0xLG49dC5sZW5ndGgsaT1lLmxlbmd0aDsrK3I8bjspZVtpK3JdPXRbcl07cmV0dXJuIGV9VFF0LmV4cG9ydHM9eFhlfSk7dmFyIEI0PUgoKEwkbixDUXQpPT57dmFyIGJYZT1tc3QoKSx3WGU9YlhlKE9iamVjdC5nZXRQcm90b3R5cGVPZixPYmplY3QpO0NRdC5leHBvcnRzPXdYZX0pO3ZhciB4c3Q9SCgoayRuLEFRdCk9Pnt2YXIgU1hlPUdCKCksTVhlPUI0KCksRVhlPXFCKCksVFhlPXZzdCgpLENYZT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLEFYZT1DWGU/ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdO2U7KVNYZSh0LEVYZShlKSksZT1NWGUoZSk7cmV0dXJuIHR9OlRYZTtBUXQuZXhwb3J0cz1BWGV9KTt2YXIgSVF0PUgoKFIkbixQUXQpPT57dmFyIFBYZT1VUygpLElYZT14c3QoKTtmdW5jdGlvbiBMWGUoZSx0KXtyZXR1cm4gUFhlKGUsSVhlKGUpLHQpfVBRdC5leHBvcnRzPUxYZX0pO3ZhciBic3Q9SCgoTiRuLExRdCk9Pnt2YXIga1hlPUdCKCksUlhlPVRpKCk7ZnVuY3Rpb24gTlhlKGUsdCxyKXt2YXIgbj10KGUpO3JldHVybiBSWGUoZSk/bjprWGUobixyKGUpKX1MUXQuZXhwb3J0cz1OWGV9KTt2YXIgd3N0PUgoKEQkbixrUXQpPT57dmFyIERYZT1ic3QoKSxPWGU9cUIoKSx6WGU9UGQoKTtmdW5jdGlvbiBGWGUoZSl7cmV0dXJuIERYZShlLHpYZSxPWGUpfWtRdC5leHBvcnRzPUZYZX0pO3ZhciBOUXQ9SCgoTyRuLFJRdCk9Pnt2YXIgQlhlPWJzdCgpLEhYZT14c3QoKSxWWGU9dTAoKTtmdW5jdGlvbiBVWGUoZSl7cmV0dXJuIEJYZShlLFZYZSxIWGUpfVJRdC5leHBvcnRzPVVYZX0pO3ZhciBPUXQ9SCgoeiRuLERRdCk9Pnt2YXIgcVhlPWMwKCksR1hlPUhjKCksV1hlPXFYZShHWGUsIkRhdGFWaWV3Iik7RFF0LmV4cG9ydHM9V1hlfSk7dmFyIEZRdD1IKChGJG4selF0KT0+e3ZhciBZWGU9YzAoKSxqWGU9SGMoKSxYWGU9WVhlKGpYZSwiUHJvbWlzZSIpO3pRdC5leHBvcnRzPVhYZX0pO3ZhciBTc3Q9SCgoQiRuLEJRdCk9Pnt2YXIgJFhlPWMwKCksS1hlPUhjKCksWlhlPSRYZShLWGUsIlNldCIpO0JRdC5leHBvcnRzPVpYZX0pO3ZhciBWUXQ9SCgoSCRuLEhRdCk9Pnt2YXIgSlhlPWMwKCksUVhlPUhjKCksdCRlPUpYZShRWGUsIldlYWtNYXAiKTtIUXQuZXhwb3J0cz10JGV9KTt2YXIgWnY9SCgoViRuLFhRdCk9Pnt2YXIgTXN0PU9RdCgpLEVzdD16QigpLFRzdD1GUXQoKSxDc3Q9U3N0KCksQXN0PVZRdCgpLGpRdD1sMCgpLFhTPWhzdCgpLFVRdD0iW29iamVjdCBNYXBdIixlJGU9IltvYmplY3QgT2JqZWN0XSIscVF0PSJbb2JqZWN0IFByb21pc2VdIixHUXQ9IltvYmplY3QgU2V0XSIsV1F0PSJbb2JqZWN0IFdlYWtNYXBdIixZUXQ9IltvYmplY3QgRGF0YVZpZXddIixyJGU9WFMoTXN0KSxuJGU9WFMoRXN0KSxpJGU9WFMoVHN0KSxvJGU9WFMoQ3N0KSxhJGU9WFMoQXN0KSxLdj1qUXQ7KE1zdCYmS3YobmV3IE1zdChuZXcgQXJyYXlCdWZmZXIoMSkpKSE9WVF0fHxFc3QmJkt2KG5ldyBFc3QpIT1VUXR8fFRzdCYmS3YoVHN0LnJlc29sdmUoKSkhPXFRdHx8Q3N0JiZLdihuZXcgQ3N0KSE9R1F0fHxBc3QmJkt2KG5ldyBBc3QpIT1XUXQpJiYoS3Y9ZnVuY3Rpb24oZSl7dmFyIHQ9alF0KGUpLHI9dD09ZSRlP2UuY29uc3RydWN0b3I6dm9pZCAwLG49cj9YUyhyKToiIjtpZihuKXN3aXRjaChuKXtjYXNlIHIkZTpyZXR1cm4gWVF0O2Nhc2UgbiRlOnJldHVybiBVUXQ7Y2FzZSBpJGU6cmV0dXJuIHFRdDtjYXNlIG8kZTpyZXR1cm4gR1F0O2Nhc2UgYSRlOnJldHVybiBXUXR9cmV0dXJuIHR9KTtYUXQuZXhwb3J0cz1Ldn0pO3ZhciBLUXQ9SCgoVSRuLCRRdCk9Pnt2YXIgcyRlPU9iamVjdC5wcm90b3R5cGUsbCRlPXMkZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBjJGUoZSl7dmFyIHQ9ZS5sZW5ndGgscj1uZXcgZS5jb25zdHJ1Y3Rvcih0KTtyZXR1cm4gdCYmdHlwZW9mIGVbMF09PSJzdHJpbmciJiZsJGUuY2FsbChlLCJpbmRleCIpJiYoci5pbmRleD1lLmluZGV4LHIuaW5wdXQ9ZS5pbnB1dCkscn0kUXQuZXhwb3J0cz1jJGV9KTt2YXIgUHN0PUgoKHEkbixaUXQpPT57dmFyIHUkZT1IYygpLGgkZT11JGUuVWludDhBcnJheTtaUXQuZXhwb3J0cz1oJGV9KTt2YXIgV0I9SCgoRyRuLFFRdCk9Pnt2YXIgSlF0PVBzdCgpO2Z1bmN0aW9uIGYkZShlKXt2YXIgdD1uZXcgZS5jb25zdHJ1Y3RvcihlLmJ5dGVMZW5ndGgpO3JldHVybiBuZXcgSlF0KHQpLnNldChuZXcgSlF0KGUpKSx0fVFRdC5leHBvcnRzPWYkZX0pO3ZhciBldGU9SCgoVyRuLHR0ZSk9Pnt2YXIgcCRlPVdCKCk7ZnVuY3Rpb24gZCRlKGUsdCl7dmFyIHI9dD9wJGUoZS5idWZmZXIpOmUuYnVmZmVyO3JldHVybiBuZXcgZS5jb25zdHJ1Y3RvcihyLGUuYnl0ZU9mZnNldCxlLmJ5dGVMZW5ndGgpfXR0ZS5leHBvcnRzPWQkZX0pO3ZhciBudGU9SCgoWSRuLHJ0ZSk9Pnt2YXIgbSRlPS9cdyokLztmdW5jdGlvbiBnJGUoZSl7dmFyIHQ9bmV3IGUuY29uc3RydWN0b3IoZS5zb3VyY2UsbSRlLmV4ZWMoZSkpO3JldHVybiB0Lmxhc3RJbmRleD1lLmxhc3RJbmRleCx0fXJ0ZS5leHBvcnRzPWckZX0pO3ZhciBsdGU9SCgoaiRuLHN0ZSk9Pnt2YXIgaXRlPVh2KCksb3RlPWl0ZT9pdGUucHJvdG90eXBlOnZvaWQgMCxhdGU9b3RlP290ZS52YWx1ZU9mOnZvaWQgMDtmdW5jdGlvbiBfJGUoZSl7cmV0dXJuIGF0ZT9PYmplY3QoYXRlLmNhbGwoZSkpOnt9fXN0ZS5leHBvcnRzPV8kZX0pO3ZhciBJc3Q9SCgoWCRuLGN0ZSk9Pnt2YXIgeSRlPVdCKCk7ZnVuY3Rpb24gdiRlKGUsdCl7dmFyIHI9dD95JGUoZS5idWZmZXIpOmUuYnVmZmVyO3JldHVybiBuZXcgZS5jb25zdHJ1Y3RvcihyLGUuYnl0ZU9mZnNldCxlLmxlbmd0aCl9Y3RlLmV4cG9ydHM9diRlfSk7dmFyIGh0ZT1IKCgkJG4sdXRlKT0+e3ZhciB4JGU9V0IoKSxiJGU9ZXRlKCksdyRlPW50ZSgpLFMkZT1sdGUoKSxNJGU9SXN0KCksRSRlPSJbb2JqZWN0IEJvb2xlYW5dIixUJGU9IltvYmplY3QgRGF0ZV0iLEMkZT0iW29iamVjdCBNYXBdIixBJGU9IltvYmplY3QgTnVtYmVyXSIsUCRlPSJbb2JqZWN0IFJlZ0V4cF0iLEkkZT0iW29iamVjdCBTZXRdIixMJGU9IltvYmplY3QgU3RyaW5nXSIsayRlPSJbb2JqZWN0IFN5bWJvbF0iLFIkZT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLE4kZT0iW29iamVjdCBEYXRhVmlld10iLEQkZT0iW29iamVjdCBGbG9hdDMyQXJyYXldIixPJGU9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIseiRlPSJbb2JqZWN0IEludDhBcnJheV0iLEYkZT0iW29iamVjdCBJbnQxNkFycmF5XSIsQiRlPSJbb2JqZWN0IEludDMyQXJyYXldIixIJGU9IltvYmplY3QgVWludDhBcnJheV0iLFYkZT0iW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLFUkZT0iW29iamVjdCBVaW50MTZBcnJheV0iLHEkZT0iW29iamVjdCBVaW50MzJBcnJheV0iO2Z1bmN0aW9uIEckZShlLHQscil7dmFyIG49ZS5jb25zdHJ1Y3Rvcjtzd2l0Y2godCl7Y2FzZSBSJGU6cmV0dXJuIHgkZShlKTtjYXNlIEUkZTpjYXNlIFQkZTpyZXR1cm4gbmV3IG4oK2UpO2Nhc2UgTiRlOnJldHVybiBiJGUoZSxyKTtjYXNlIEQkZTpjYXNlIE8kZTpjYXNlIHokZTpjYXNlIEYkZTpjYXNlIEIkZTpjYXNlIEgkZTpjYXNlIFYkZTpjYXNlIFUkZTpjYXNlIHEkZTpyZXR1cm4gTSRlKGUscik7Y2FzZSBDJGU6cmV0dXJuIG5ldyBuO2Nhc2UgQSRlOmNhc2UgTCRlOnJldHVybiBuZXcgbihlKTtjYXNlIFAkZTpyZXR1cm4gdyRlKGUpO2Nhc2UgSSRlOnJldHVybiBuZXcgbjtjYXNlIGskZTpyZXR1cm4gUyRlKGUpfX11dGUuZXhwb3J0cz1HJGV9KTt2YXIgTHN0PUgoKEskbixwdGUpPT57dmFyIFckZT1FbCgpLGZ0ZT1PYmplY3QuY3JlYXRlLFkkZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKCFXJGUodCkpcmV0dXJue307aWYoZnRlKXJldHVybiBmdGUodCk7ZS5wcm90b3R5cGU9dDt2YXIgcj1uZXcgZTtyZXR1cm4gZS5wcm90b3R5cGU9dm9pZCAwLHJ9fSgpO3B0ZS5leHBvcnRzPVkkZX0pO3ZhciBrc3Q9SCgoWiRuLGR0ZSk9Pnt2YXIgaiRlPUxzdCgpLFgkZT1CNCgpLCQkZT16NCgpO2Z1bmN0aW9uIEskZShlKXtyZXR1cm4gdHlwZW9mIGUuY29uc3RydWN0b3I9PSJmdW5jdGlvbiImJiEkJGUoZSk/aiRlKFgkZShlKSk6e319ZHRlLmV4cG9ydHM9SyRlfSk7dmFyIGd0ZT1IKChKJG4sbXRlKT0+e3ZhciBaJGU9WnYoKSxKJGU9WXUoKSxRJGU9IltvYmplY3QgTWFwXSI7ZnVuY3Rpb24gdEtlKGUpe3JldHVybiBKJGUoZSkmJlokZShlKT09USRlfW10ZS5leHBvcnRzPXRLZX0pO3ZhciB4dGU9SCgoUSRuLHZ0ZSk9Pnt2YXIgZUtlPWd0ZSgpLHJLZT1ONCgpLF90ZT1WQigpLHl0ZT1fdGUmJl90ZS5pc01hcCxuS2U9eXRlP3JLZSh5dGUpOmVLZTt2dGUuZXhwb3J0cz1uS2V9KTt2YXIgd3RlPUgoKHRLbixidGUpPT57dmFyIGlLZT1adigpLG9LZT1ZdSgpLGFLZT0iW29iamVjdCBTZXRdIjtmdW5jdGlvbiBzS2UoZSl7cmV0dXJuIG9LZShlKSYmaUtlKGUpPT1hS2V9YnRlLmV4cG9ydHM9c0tlfSk7dmFyIFR0ZT1IKChlS24sRXRlKT0+e3ZhciBsS2U9d3RlKCksY0tlPU40KCksU3RlPVZCKCksTXRlPVN0ZSYmU3RlLmlzU2V0LHVLZT1NdGU/Y0tlKE10ZSk6bEtlO0V0ZS5leHBvcnRzPXVLZX0pO3ZhciBSc3Q9SCgocktuLEl0ZSk9Pnt2YXIgaEtlPVA0KCksZktlPUJCKCkscEtlPUw0KCksZEtlPXNRdCgpLG1LZT1kUXQoKSxnS2U9Z3N0KCksX0tlPV9zdCgpLHlLZT1FUXQoKSx2S2U9SVF0KCkseEtlPXdzdCgpLGJLZT1OUXQoKSx3S2U9WnYoKSxTS2U9S1F0KCksTUtlPWh0ZSgpLEVLZT1rc3QoKSxUS2U9VGkoKSxDS2U9JHYoKSxBS2U9eHRlKCksUEtlPUVsKCksSUtlPVR0ZSgpLExLZT1QZCgpLGtLZT11MCgpLFJLZT0xLE5LZT0yLERLZT00LEN0ZT0iW29iamVjdCBBcmd1bWVudHNdIixPS2U9IltvYmplY3QgQXJyYXldIix6S2U9IltvYmplY3QgQm9vbGVhbl0iLEZLZT0iW29iamVjdCBEYXRlXSIsQktlPSJbb2JqZWN0IEVycm9yXSIsQXRlPSJbb2JqZWN0IEZ1bmN0aW9uXSIsSEtlPSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsVktlPSJbb2JqZWN0IE1hcF0iLFVLZT0iW29iamVjdCBOdW1iZXJdIixQdGU9IltvYmplY3QgT2JqZWN0XSIscUtlPSJbb2JqZWN0IFJlZ0V4cF0iLEdLZT0iW29iamVjdCBTZXRdIixXS2U9IltvYmplY3QgU3RyaW5nXSIsWUtlPSJbb2JqZWN0IFN5bWJvbF0iLGpLZT0iW29iamVjdCBXZWFrTWFwXSIsWEtlPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsJEtlPSJbb2JqZWN0IERhdGFWaWV3XSIsS0tlPSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLFpLZT0iW29iamVjdCBGbG9hdDY0QXJyYXldIixKS2U9IltvYmplY3QgSW50OEFycmF5XSIsUUtlPSJbb2JqZWN0IEludDE2QXJyYXldIix0WmU9IltvYmplY3QgSW50MzJBcnJheV0iLGVaZT0iW29iamVjdCBVaW50OEFycmF5XSIsclplPSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsblplPSJbb2JqZWN0IFVpbnQxNkFycmF5XSIsaVplPSJbb2JqZWN0IFVpbnQzMkFycmF5XSIsQ249e307Q25bQ3RlXT1DbltPS2VdPUNuW1hLZV09Q25bJEtlXT1Dblt6S2VdPUNuW0ZLZV09Q25bS0tlXT1DbltaS2VdPUNuW0pLZV09Q25bUUtlXT1Dblt0WmVdPUNuW1ZLZV09Q25bVUtlXT1DbltQdGVdPUNuW3FLZV09Q25bR0tlXT1DbltXS2VdPUNuW1lLZV09Q25bZVplXT1DbltyWmVdPUNuW25aZV09Q25baVplXT0hMDtDbltCS2VdPUNuW0F0ZV09Q25baktlXT0hMTtmdW5jdGlvbiBZQihlLHQscixuLGksbyl7dmFyIGEscz10JlJLZSxsPXQmTktlLGM9dCZES2U7aWYociYmKGE9aT9yKGUsbixpLG8pOnIoZSkpLGEhPT12b2lkIDApcmV0dXJuIGE7aWYoIVBLZShlKSlyZXR1cm4gZTt2YXIgdT1US2UoZSk7aWYodSl7aWYoYT1TS2UoZSksIXMpcmV0dXJuIF9LZShlLGEpfWVsc2V7dmFyIGg9d0tlKGUpLGY9aD09QXRlfHxoPT1IS2U7aWYoQ0tlKGUpKXJldHVybiBnS2UoZSxzKTtpZihoPT1QdGV8fGg9PUN0ZXx8ZiYmIWkpe2lmKGE9bHx8Zj97fTpFS2UoZSksIXMpcmV0dXJuIGw/dktlKGUsbUtlKGEsZSkpOnlLZShlLGRLZShhLGUpKX1lbHNle2lmKCFDbltoXSlyZXR1cm4gaT9lOnt9O2E9TUtlKGUsaCxzKX19b3x8KG89bmV3IGhLZSk7dmFyIHA9by5nZXQoZSk7aWYocClyZXR1cm4gcDtvLnNldChlLGEpLElLZShlKT9lLmZvckVhY2goZnVuY3Rpb24oXyl7YS5hZGQoWUIoXyx0LHIsXyxlLG8pKX0pOkFLZShlKSYmZS5mb3JFYWNoKGZ1bmN0aW9uKF8seSl7YS5zZXQoeSxZQihfLHQscix5LGUsbykpfSk7dmFyIGQ9Yz9sP2JLZTp4S2U6bD9rS2U6TEtlLGc9dT92b2lkIDA6ZChlKTtyZXR1cm4gZktlKGd8fGUsZnVuY3Rpb24oXyx5KXtnJiYoeT1fLF89ZVt5XSkscEtlKGEseSxZQihfLHQscix5LGUsbykpfSksYX1JdGUuZXhwb3J0cz1ZQn0pO3ZhciBrdGU9SCgobktuLEx0ZSk9Pnt2YXIgb1plPVJzdCgpLGFaZT00O2Z1bmN0aW9uIHNaZShlKXtyZXR1cm4gb1plKGUsYVplKX1MdGUuZXhwb3J0cz1zWmV9KTt2YXIgakI9SCgoaUtuLFJ0ZSk9PntmdW5jdGlvbiBsWmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fVJ0ZS5leHBvcnRzPWxaZX0pO3ZhciBEdGU9SCgob0tuLE50ZSk9PntmdW5jdGlvbiBjWmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXtmb3IodmFyIGk9LTEsbz1PYmplY3QodCksYT1uKHQpLHM9YS5sZW5ndGg7cy0tOyl7dmFyIGw9YVtlP3M6KytpXTtpZihyKG9bbF0sbCxvKT09PSExKWJyZWFrfXJldHVybiB0fX1OdGUuZXhwb3J0cz1jWmV9KTt2YXIgWEI9SCgoYUtuLE90ZSk9Pnt2YXIgdVplPUR0ZSgpLGhaZT11WmUoKTtPdGUuZXhwb3J0cz1oWmV9KTt2YXIgJEI9SCgoc0tuLHp0ZSk9Pnt2YXIgZlplPVhCKCkscFplPVBkKCk7ZnVuY3Rpb24gZFplKGUsdCl7cmV0dXJuIGUmJmZaZShlLHQscFplKX16dGUuZXhwb3J0cz1kWmV9KTt2YXIgQnRlPUgoKGxLbixGdGUpPT57dmFyIG1aZT1IZigpO2Z1bmN0aW9uIGdaZShlLHQpe3JldHVybiBmdW5jdGlvbihyLG4pe2lmKHI9PW51bGwpcmV0dXJuIHI7aWYoIW1aZShyKSlyZXR1cm4gZShyLG4pO2Zvcih2YXIgaT1yLmxlbmd0aCxvPXQ/aTotMSxhPU9iamVjdChyKTsodD9vLS06KytvPGkpJiZuKGFbb10sbyxhKSE9PSExOyk7cmV0dXJuIHJ9fUZ0ZS5leHBvcnRzPWdaZX0pO3ZhciBIND1IKChjS24sSHRlKT0+e3ZhciBfWmU9JEIoKSx5WmU9QnRlKCksdlplPXlaZShfWmUpO0h0ZS5leHBvcnRzPXZaZX0pO3ZhciBoMD1IKCh1S24sVnRlKT0+e2Z1bmN0aW9uIHhaZShlKXtyZXR1cm4gZX1WdGUuZXhwb3J0cz14WmV9KTt2YXIgTnN0PUgoKGhLbixVdGUpPT57dmFyIGJaZT1oMCgpO2Z1bmN0aW9uIHdaZShlKXtyZXR1cm4gdHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpiWmV9VXRlLmV4cG9ydHM9d1plfSk7dmFyIERzdD1IKChmS24scXRlKT0+e3ZhciBTWmU9QkIoKSxNWmU9SDQoKSxFWmU9TnN0KCksVFplPVRpKCk7ZnVuY3Rpb24gQ1plKGUsdCl7dmFyIHI9VFplKGUpP1NaZTpNWmU7cmV0dXJuIHIoZSxFWmUodCkpfXF0ZS5leHBvcnRzPUNaZX0pO3ZhciBPc3Q9SCgocEtuLEd0ZSk9PntHdGUuZXhwb3J0cz1Ec3QoKX0pO3ZhciBZdGU9SCgoZEtuLFd0ZSk9Pnt2YXIgQVplPUg0KCk7ZnVuY3Rpb24gUFplKGUsdCl7dmFyIHI9W107cmV0dXJuIEFaZShlLGZ1bmN0aW9uKG4saSxvKXt0KG4saSxvKSYmci5wdXNoKG4pfSkscn1XdGUuZXhwb3J0cz1QWmV9KTt2YXIgWHRlPUgoKG1LbixqdGUpPT57dmFyIElaZT0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI7ZnVuY3Rpb24gTFplKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLnNldChlLElaZSksdGhpc31qdGUuZXhwb3J0cz1MWmV9KTt2YXIgS3RlPUgoKGdLbiwkdGUpPT57ZnVuY3Rpb24ga1plKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhlKX0kdGUuZXhwb3J0cz1rWmV9KTt2YXIgenN0PUgoKF9LbixadGUpPT57dmFyIFJaZT1GQigpLE5aZT1YdGUoKSxEWmU9S3RlKCk7ZnVuY3Rpb24gS0IoZSl7dmFyIHQ9LTEscj1lPT1udWxsPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuX19kYXRhX189bmV3IFJaZTsrK3Q8cjspdGhpcy5hZGQoZVt0XSl9S0IucHJvdG90eXBlLmFkZD1LQi5wcm90b3R5cGUucHVzaD1OWmU7S0IucHJvdG90eXBlLmhhcz1EWmU7WnRlLmV4cG9ydHM9S0J9KTt2YXIgUXRlPUgoKHlLbixKdGUpPT57ZnVuY3Rpb24gT1plKGUsdCl7Zm9yKHZhciByPS0xLG49ZT09bnVsbD8wOmUubGVuZ3RoOysrcjxuOylpZih0KGVbcl0scixlKSlyZXR1cm4hMDtyZXR1cm4hMX1KdGUuZXhwb3J0cz1PWmV9KTt2YXIgRnN0PUgoKHZLbix0ZWUpPT57ZnVuY3Rpb24gelplKGUsdCl7cmV0dXJuIGUuaGFzKHQpfXRlZS5leHBvcnRzPXpaZX0pO3ZhciBCc3Q9SCgoeEtuLGVlZSk9Pnt2YXIgRlplPXpzdCgpLEJaZT1RdGUoKSxIWmU9RnN0KCksVlplPTEsVVplPTI7ZnVuY3Rpb24gcVplKGUsdCxyLG4saSxvKXt2YXIgYT1yJlZaZSxzPWUubGVuZ3RoLGw9dC5sZW5ndGg7aWYocyE9bCYmIShhJiZsPnMpKXJldHVybiExO3ZhciBjPW8uZ2V0KGUpLHU9by5nZXQodCk7aWYoYyYmdSlyZXR1cm4gYz09dCYmdT09ZTt2YXIgaD0tMSxmPSEwLHA9ciZVWmU/bmV3IEZaZTp2b2lkIDA7Zm9yKG8uc2V0KGUsdCksby5zZXQodCxlKTsrK2g8czspe3ZhciBkPWVbaF0sZz10W2hdO2lmKG4pdmFyIF89YT9uKGcsZCxoLHQsZSxvKTpuKGQsZyxoLGUsdCxvKTtpZihfIT09dm9pZCAwKXtpZihfKWNvbnRpbnVlO2Y9ITE7YnJlYWt9aWYocCl7aWYoIUJaZSh0LGZ1bmN0aW9uKHkseCl7aWYoIUhaZShwLHgpJiYoZD09PXl8fGkoZCx5LHIsbixvKSkpcmV0dXJuIHAucHVzaCh4KX0pKXtmPSExO2JyZWFrfX1lbHNlIGlmKCEoZD09PWd8fGkoZCxnLHIsbixvKSkpe2Y9ITE7YnJlYWt9fXJldHVybiBvLmRlbGV0ZShlKSxvLmRlbGV0ZSh0KSxmfWVlZS5leHBvcnRzPXFaZX0pO3ZhciBuZWU9SCgoYktuLHJlZSk9PntmdW5jdGlvbiBHWmUoZSl7dmFyIHQ9LTEscj1BcnJheShlLnNpemUpO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24obixpKXtyWysrdF09W2ksbl19KSxyfXJlZS5leHBvcnRzPUdaZX0pO3ZhciBaQj1IKCh3S24saWVlKT0+e2Z1bmN0aW9uIFdaZShlKXt2YXIgdD0tMSxyPUFycmF5KGUuc2l6ZSk7cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihuKXtyWysrdF09bn0pLHJ9aWVlLmV4cG9ydHM9V1plfSk7dmFyIGNlZT1IKChTS24sbGVlKT0+e3ZhciBvZWU9WHYoKSxhZWU9UHN0KCksWVplPWp2KCksalplPUJzdCgpLFhaZT1uZWUoKSwkWmU9WkIoKSxLWmU9MSxaWmU9MixKWmU9IltvYmplY3QgQm9vbGVhbl0iLFFaZT0iW29iamVjdCBEYXRlXSIsdEplPSJbb2JqZWN0IEVycm9yXSIsZUplPSJbb2JqZWN0IE1hcF0iLHJKZT0iW29iamVjdCBOdW1iZXJdIixuSmU9IltvYmplY3QgUmVnRXhwXSIsaUplPSJbb2JqZWN0IFNldF0iLG9KZT0iW29iamVjdCBTdHJpbmddIixhSmU9IltvYmplY3QgU3ltYm9sXSIsc0plPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsbEplPSJbb2JqZWN0IERhdGFWaWV3XSIsc2VlPW9lZT9vZWUucHJvdG90eXBlOnZvaWQgMCxIc3Q9c2VlP3NlZS52YWx1ZU9mOnZvaWQgMDtmdW5jdGlvbiBjSmUoZSx0LHIsbixpLG8sYSl7c3dpdGNoKHIpe2Nhc2UgbEplOmlmKGUuYnl0ZUxlbmd0aCE9dC5ieXRlTGVuZ3RofHxlLmJ5dGVPZmZzZXQhPXQuYnl0ZU9mZnNldClyZXR1cm4hMTtlPWUuYnVmZmVyLHQ9dC5idWZmZXI7Y2FzZSBzSmU6cmV0dXJuIShlLmJ5dGVMZW5ndGghPXQuYnl0ZUxlbmd0aHx8IW8obmV3IGFlZShlKSxuZXcgYWVlKHQpKSk7Y2FzZSBKWmU6Y2FzZSBRWmU6Y2FzZSBySmU6cmV0dXJuIFlaZSgrZSwrdCk7Y2FzZSB0SmU6cmV0dXJuIGUubmFtZT09dC5uYW1lJiZlLm1lc3NhZ2U9PXQubWVzc2FnZTtjYXNlIG5KZTpjYXNlIG9KZTpyZXR1cm4gZT09dCsiIjtjYXNlIGVKZTp2YXIgcz1YWmU7Y2FzZSBpSmU6dmFyIGw9biZLWmU7aWYoc3x8KHM9JFplKSxlLnNpemUhPXQuc2l6ZSYmIWwpcmV0dXJuITE7dmFyIGM9YS5nZXQoZSk7aWYoYylyZXR1cm4gYz09dDtufD1aWmUsYS5zZXQoZSx0KTt2YXIgdT1qWmUocyhlKSxzKHQpLG4saSxvLGEpO3JldHVybiBhLmRlbGV0ZShlKSx1O2Nhc2UgYUplOmlmKEhzdClyZXR1cm4gSHN0LmNhbGwoZSk9PUhzdC5jYWxsKHQpfXJldHVybiExfWxlZS5leHBvcnRzPWNKZX0pO3ZhciBmZWU9SCgoTUtuLGhlZSk9Pnt2YXIgdWVlPXdzdCgpLHVKZT0xLGhKZT1PYmplY3QucHJvdG90eXBlLGZKZT1oSmUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gcEplKGUsdCxyLG4saSxvKXt2YXIgYT1yJnVKZSxzPXVlZShlKSxsPXMubGVuZ3RoLGM9dWVlKHQpLHU9Yy5sZW5ndGg7aWYobCE9dSYmIWEpcmV0dXJuITE7Zm9yKHZhciBoPWw7aC0tOyl7dmFyIGY9c1toXTtpZighKGE/ZiBpbiB0OmZKZS5jYWxsKHQsZikpKXJldHVybiExfXZhciBwPW8uZ2V0KGUpLGQ9by5nZXQodCk7aWYocCYmZClyZXR1cm4gcD09dCYmZD09ZTt2YXIgZz0hMDtvLnNldChlLHQpLG8uc2V0KHQsZSk7Zm9yKHZhciBfPWE7KytoPGw7KXtmPXNbaF07dmFyIHk9ZVtmXSx4PXRbZl07aWYobil2YXIgYj1hP24oeCx5LGYsdCxlLG8pOm4oeSx4LGYsZSx0LG8pO2lmKCEoYj09PXZvaWQgMD95PT09eHx8aSh5LHgscixuLG8pOmIpKXtnPSExO2JyZWFrfV98fChfPWY9PSJjb25zdHJ1Y3RvciIpfWlmKGcmJiFfKXt2YXIgUz1lLmNvbnN0cnVjdG9yLEM9dC5jb25zdHJ1Y3RvcjtTIT1DJiYiY29uc3RydWN0b3IiaW4gZSYmImNvbnN0cnVjdG9yImluIHQmJiEodHlwZW9mIFM9PSJmdW5jdGlvbiImJlMgaW5zdGFuY2VvZiBTJiZ0eXBlb2YgQz09ImZ1bmN0aW9uIiYmQyBpbnN0YW5jZW9mIEMpJiYoZz0hMSl9cmV0dXJuIG8uZGVsZXRlKGUpLG8uZGVsZXRlKHQpLGd9aGVlLmV4cG9ydHM9cEplfSk7dmFyIHhlZT1IKChFS24sdmVlKT0+e3ZhciBWc3Q9UDQoKSxkSmU9QnN0KCksbUplPWNlZSgpLGdKZT1mZWUoKSxwZWU9WnYoKSxkZWU9VGkoKSxtZWU9JHYoKSxfSmU9WVMoKSx5SmU9MSxnZWU9IltvYmplY3QgQXJndW1lbnRzXSIsX2VlPSJbb2JqZWN0IEFycmF5XSIsSkI9IltvYmplY3QgT2JqZWN0XSIsdkplPU9iamVjdC5wcm90b3R5cGUseWVlPXZKZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiB4SmUoZSx0LHIsbixpLG8pe3ZhciBhPWRlZShlKSxzPWRlZSh0KSxsPWE/X2VlOnBlZShlKSxjPXM/X2VlOnBlZSh0KTtsPWw9PWdlZT9KQjpsLGM9Yz09Z2VlP0pCOmM7dmFyIHU9bD09SkIsaD1jPT1KQixmPWw9PWM7aWYoZiYmbWVlKGUpKXtpZighbWVlKHQpKXJldHVybiExO2E9ITAsdT0hMX1pZihmJiYhdSlyZXR1cm4gb3x8KG89bmV3IFZzdCksYXx8X0plKGUpP2RKZShlLHQscixuLGksbyk6bUplKGUsdCxsLHIsbixpLG8pO2lmKCEociZ5SmUpKXt2YXIgcD11JiZ5ZWUuY2FsbChlLCJfX3dyYXBwZWRfXyIpLGQ9aCYmeWVlLmNhbGwodCwiX193cmFwcGVkX18iKTtpZihwfHxkKXt2YXIgZz1wP2UudmFsdWUoKTplLF89ZD90LnZhbHVlKCk6dDtyZXR1cm4gb3x8KG89bmV3IFZzdCksaShnLF8scixuLG8pfX1yZXR1cm4gZj8ob3x8KG89bmV3IFZzdCksZ0plKGUsdCxyLG4saSxvKSk6ITF9dmVlLmV4cG9ydHM9eEplfSk7dmFyIFVzdD1IKChUS24sU2VlKT0+e3ZhciBiSmU9eGVlKCksYmVlPVl1KCk7ZnVuY3Rpb24gd2VlKGUsdCxyLG4saSl7cmV0dXJuIGU9PT10PyEwOmU9PW51bGx8fHQ9PW51bGx8fCFiZWUoZSkmJiFiZWUodCk/ZSE9PWUmJnQhPT10OmJKZShlLHQscixuLHdlZSxpKX1TZWUuZXhwb3J0cz13ZWV9KTt2YXIgRWVlPUgoKENLbixNZWUpPT57dmFyIHdKZT1QNCgpLFNKZT1Vc3QoKSxNSmU9MSxFSmU9MjtmdW5jdGlvbiBUSmUoZSx0LHIsbil7dmFyIGk9ci5sZW5ndGgsbz1pLGE9IW47aWYoZT09bnVsbClyZXR1cm4hbztmb3IoZT1PYmplY3QoZSk7aS0tOyl7dmFyIHM9cltpXTtpZihhJiZzWzJdP3NbMV0hPT1lW3NbMF1dOiEoc1swXWluIGUpKXJldHVybiExfWZvcig7KytpPG87KXtzPXJbaV07dmFyIGw9c1swXSxjPWVbbF0sdT1zWzFdO2lmKGEmJnNbMl0pe2lmKGM9PT12b2lkIDAmJiEobCBpbiBlKSlyZXR1cm4hMX1lbHNle3ZhciBoPW5ldyB3SmU7aWYobil2YXIgZj1uKGMsdSxsLGUsdCxoKTtpZighKGY9PT12b2lkIDA/U0plKHUsYyxNSmV8RUplLG4saCk6ZikpcmV0dXJuITF9fXJldHVybiEwfU1lZS5leHBvcnRzPVRKZX0pO3ZhciBxc3Q9SCgoQUtuLFRlZSk9Pnt2YXIgQ0plPUVsKCk7ZnVuY3Rpb24gQUplKGUpe3JldHVybiBlPT09ZSYmIUNKZShlKX1UZWUuZXhwb3J0cz1BSmV9KTt2YXIgQWVlPUgoKFBLbixDZWUpPT57dmFyIFBKZT1xc3QoKSxJSmU9UGQoKTtmdW5jdGlvbiBMSmUoZSl7Zm9yKHZhciB0PUlKZShlKSxyPXQubGVuZ3RoO3ItLTspe3ZhciBuPXRbcl0saT1lW25dO3Rbcl09W24saSxQSmUoaSldfXJldHVybiB0fUNlZS5leHBvcnRzPUxKZX0pO3ZhciBHc3Q9SCgoSUtuLFBlZSk9PntmdW5jdGlvbiBrSmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/ITE6cltlXT09PXQmJih0IT09dm9pZCAwfHxlIGluIE9iamVjdChyKSl9fVBlZS5leHBvcnRzPWtKZX0pO3ZhciBMZWU9SCgoTEtuLEllZSk9Pnt2YXIgUkplPUVlZSgpLE5KZT1BZWUoKSxESmU9R3N0KCk7ZnVuY3Rpb24gT0plKGUpe3ZhciB0PU5KZShlKTtyZXR1cm4gdC5sZW5ndGg9PTEmJnRbMF1bMl0/REplKHRbMF1bMF0sdFswXVsxXSk6ZnVuY3Rpb24ocil7cmV0dXJuIHI9PT1lfHxSSmUocixlLHQpfX1JZWUuZXhwb3J0cz1PSmV9KTt2YXIgSnY9SCgoa0tuLGtlZSk9Pnt2YXIgekplPWwwKCksRkplPVl1KCksQkplPSJbb2JqZWN0IFN5bWJvbF0iO2Z1bmN0aW9uIEhKZShlKXtyZXR1cm4gdHlwZW9mIGU9PSJzeW1ib2wifHxGSmUoZSkmJnpKZShlKT09QkplfWtlZS5leHBvcnRzPUhKZX0pO3ZhciBRQj1IKChSS24sUmVlKT0+e3ZhciBWSmU9VGkoKSxVSmU9SnYoKSxxSmU9L1wufFxbKD86W15bXF1dKnwoWyInXSkoPzooPyFcMSlbXlxcXXxcXC4pKj9cMSlcXS8sR0plPS9eXHcqJC87ZnVuY3Rpb24gV0plKGUsdCl7aWYoVkplKGUpKXJldHVybiExO3ZhciByPXR5cGVvZiBlO3JldHVybiByPT0ibnVtYmVyInx8cj09InN5bWJvbCJ8fHI9PSJib29sZWFuInx8ZT09bnVsbHx8VUplKGUpPyEwOkdKZS50ZXN0KGUpfHwhcUplLnRlc3QoZSl8fHQhPW51bGwmJmUgaW4gT2JqZWN0KHQpfVJlZS5leHBvcnRzPVdKZX0pO3ZhciBPZWU9SCgoTktuLERlZSk9Pnt2YXIgTmVlPUZCKCksWUplPSJFeHBlY3RlZCBhIGZ1bmN0aW9uIjtmdW5jdGlvbiBXc3QoZSx0KXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uInx8dCE9bnVsbCYmdHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcihZSmUpO3ZhciByPWZ1bmN0aW9uKCl7dmFyIG49YXJndW1lbnRzLGk9dD90LmFwcGx5KHRoaXMsbik6blswXSxvPXIuY2FjaGU7aWYoby5oYXMoaSkpcmV0dXJuIG8uZ2V0KGkpO3ZhciBhPWUuYXBwbHkodGhpcyxuKTtyZXR1cm4gci5jYWNoZT1vLnNldChpLGEpfHxvLGF9O3JldHVybiByLmNhY2hlPW5ldyhXc3QuQ2FjaGV8fE5lZSkscn1Xc3QuQ2FjaGU9TmVlO0RlZS5leHBvcnRzPVdzdH0pO3ZhciBGZWU9SCgoREtuLHplZSk9Pnt2YXIgakplPU9lZSgpLFhKZT01MDA7ZnVuY3Rpb24gJEplKGUpe3ZhciB0PWpKZShlLGZ1bmN0aW9uKG4pe3JldHVybiByLnNpemU9PT1YSmUmJnIuY2xlYXIoKSxufSkscj10LmNhY2hlO3JldHVybiB0fXplZS5leHBvcnRzPSRKZX0pO3ZhciBIZWU9SCgoT0tuLEJlZSk9Pnt2YXIgS0plPUZlZSgpLFpKZT0vW14uW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/KXwoWyInXSkoKD86KD8hXDIpW15cXF18XFwuKSo/KVwyKVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwkKSkvZyxKSmU9L1xcKFxcKT8vZyxRSmU9S0plKGZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiBlLmNoYXJDb2RlQXQoMCk9PT00NiYmdC5wdXNoKCIiKSxlLnJlcGxhY2UoWkplLGZ1bmN0aW9uKHIsbixpLG8pe3QucHVzaChpP28ucmVwbGFjZShKSmUsIiQxIik6bnx8cil9KSx0fSk7QmVlLmV4cG9ydHM9UUplfSk7dmFyIFY0PUgoKHpLbixWZWUpPT57ZnVuY3Rpb24gdFFlKGUsdCl7Zm9yKHZhciByPS0xLG49ZT09bnVsbD8wOmUubGVuZ3RoLGk9QXJyYXkobik7KytyPG47KWlbcl09dChlW3JdLHIsZSk7cmV0dXJuIGl9VmVlLmV4cG9ydHM9dFFlfSk7dmFyIGplZT1IKChGS24sWWVlKT0+e3ZhciBVZWU9WHYoKSxlUWU9VjQoKSxyUWU9VGkoKSxuUWU9SnYoKSxpUWU9MS8wLHFlZT1VZWU/VWVlLnByb3RvdHlwZTp2b2lkIDAsR2VlPXFlZT9xZWUudG9TdHJpbmc6dm9pZCAwO2Z1bmN0aW9uIFdlZShlKXtpZih0eXBlb2YgZT09InN0cmluZyIpcmV0dXJuIGU7aWYoclFlKGUpKXJldHVybiBlUWUoZSxXZWUpKyIiO2lmKG5RZShlKSlyZXR1cm4gR2VlP0dlZS5jYWxsKGUpOiIiO3ZhciB0PWUrIiI7cmV0dXJuIHQ9PSIwIiYmMS9lPT0taVFlPyItMCI6dH1ZZWUuZXhwb3J0cz1XZWV9KTt2YXIgWXN0PUgoKEJLbixYZWUpPT57dmFyIG9RZT1qZWUoKTtmdW5jdGlvbiBhUWUoZSl7cmV0dXJuIGU9PW51bGw/IiI6b1FlKGUpfVhlZS5leHBvcnRzPWFRZX0pO3ZhciBVND1IKChIS24sJGVlKT0+e3ZhciBzUWU9VGkoKSxsUWU9UUIoKSxjUWU9SGVlKCksdVFlPVlzdCgpO2Z1bmN0aW9uIGhRZShlLHQpe3JldHVybiBzUWUoZSk/ZTpsUWUoZSx0KT9bZV06Y1FlKHVRZShlKSl9JGVlLmV4cG9ydHM9aFFlfSk7dmFyICRTPUgoKFZLbixLZWUpPT57dmFyIGZRZT1KdigpLHBRZT0xLzA7ZnVuY3Rpb24gZFFlKGUpe2lmKHR5cGVvZiBlPT0ic3RyaW5nInx8ZlFlKGUpKXJldHVybiBlO3ZhciB0PWUrIiI7cmV0dXJuIHQ9PSIwIiYmMS9lPT0tcFFlPyItMCI6dH1LZWUuZXhwb3J0cz1kUWV9KTt2YXIgcTQ9SCgoVUtuLFplZSk9Pnt2YXIgbVFlPVU0KCksZ1FlPSRTKCk7ZnVuY3Rpb24gX1FlKGUsdCl7dD1tUWUodCxlKTtmb3IodmFyIHI9MCxuPXQubGVuZ3RoO2UhPW51bGwmJnI8bjspZT1lW2dRZSh0W3IrK10pXTtyZXR1cm4gciYmcj09bj9lOnZvaWQgMH1aZWUuZXhwb3J0cz1fUWV9KTt2YXIgUWVlPUgoKHFLbixKZWUpPT57dmFyIHlRZT1xNCgpO2Z1bmN0aW9uIHZRZShlLHQscil7dmFyIG49ZT09bnVsbD92b2lkIDA6eVFlKGUsdCk7cmV0dXJuIG49PT12b2lkIDA/cjpufUplZS5leHBvcnRzPXZRZX0pO3ZhciBlcmU9SCgoR0tuLHRyZSk9PntmdW5jdGlvbiB4UWUoZSx0KXtyZXR1cm4gZSE9bnVsbCYmdCBpbiBPYmplY3QoZSl9dHJlLmV4cG9ydHM9eFFlfSk7dmFyIGpzdD1IKChXS24scnJlKT0+e3ZhciBiUWU9VTQoKSx3UWU9cVMoKSxTUWU9VGkoKSxNUWU9UjQoKSxFUWU9SEIoKSxUUWU9JFMoKTtmdW5jdGlvbiBDUWUoZSx0LHIpe3Q9YlFlKHQsZSk7Zm9yKHZhciBuPS0xLGk9dC5sZW5ndGgsbz0hMTsrK248aTspe3ZhciBhPVRRZSh0W25dKTtpZighKG89ZSE9bnVsbCYmcihlLGEpKSlicmVhaztlPWVbYV19cmV0dXJuIG98fCsrbiE9aT9vOihpPWU9PW51bGw/MDplLmxlbmd0aCwhIWkmJkVRZShpKSYmTVFlKGEsaSkmJihTUWUoZSl8fHdRZShlKSkpfXJyZS5leHBvcnRzPUNRZX0pO3ZhciBYc3Q9SCgoWUtuLG5yZSk9Pnt2YXIgQVFlPWVyZSgpLFBRZT1qc3QoKTtmdW5jdGlvbiBJUWUoZSx0KXtyZXR1cm4gZSE9bnVsbCYmUFFlKGUsdCxBUWUpfW5yZS5leHBvcnRzPUlRZX0pO3ZhciBvcmU9SCgoaktuLGlyZSk9Pnt2YXIgTFFlPVVzdCgpLGtRZT1RZWUoKSxSUWU9WHN0KCksTlFlPVFCKCksRFFlPXFzdCgpLE9RZT1Hc3QoKSx6UWU9JFMoKSxGUWU9MSxCUWU9MjtmdW5jdGlvbiBIUWUoZSx0KXtyZXR1cm4gTlFlKGUpJiZEUWUodCk/T1FlKHpRZShlKSx0KTpmdW5jdGlvbihyKXt2YXIgbj1rUWUocixlKTtyZXR1cm4gbj09PXZvaWQgMCYmbj09PXQ/UlFlKHIsZSk6TFFlKHQsbixGUWV8QlFlKX19aXJlLmV4cG9ydHM9SFFlfSk7dmFyICRzdD1IKChYS24sYXJlKT0+e2Z1bmN0aW9uIFZRZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/dm9pZCAwOnRbZV19fWFyZS5leHBvcnRzPVZRZX0pO3ZhciBscmU9SCgoJEtuLHNyZSk9Pnt2YXIgVVFlPXE0KCk7ZnVuY3Rpb24gcVFlKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gVVFlKHQsZSl9fXNyZS5leHBvcnRzPXFRZX0pO3ZhciB1cmU9SCgoS0tuLGNyZSk9Pnt2YXIgR1FlPSRzdCgpLFdRZT1scmUoKSxZUWU9UUIoKSxqUWU9JFMoKTtmdW5jdGlvbiBYUWUoZSl7cmV0dXJuIFlRZShlKT9HUWUoalFlKGUpKTpXUWUoZSl9Y3JlLmV4cG9ydHM9WFFlfSk7dmFyIFZmPUgoKFpLbixocmUpPT57dmFyICRRZT1MZWUoKSxLUWU9b3JlKCksWlFlPWgwKCksSlFlPVRpKCksUVFlPXVyZSgpO2Z1bmN0aW9uIHR0cihlKXtyZXR1cm4gdHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTplPT1udWxsP1pRZTp0eXBlb2YgZT09Im9iamVjdCI/SlFlKGUpP0tRZShlWzBdLGVbMV0pOiRRZShlKTpRUWUoZSl9aHJlLmV4cG9ydHM9dHRyfSk7dmFyIEtzdD1IKChKS24sZnJlKT0+e3ZhciBldHI9eXN0KCkscnRyPVl0ZSgpLG50cj1WZigpLGl0cj1UaSgpO2Z1bmN0aW9uIG90cihlLHQpe3ZhciByPWl0cihlKT9ldHI6cnRyO3JldHVybiByKGUsbnRyKHQsMykpfWZyZS5leHBvcnRzPW90cn0pO3ZhciBkcmU9SCgoUUtuLHByZSk9Pnt2YXIgYXRyPU9iamVjdC5wcm90b3R5cGUsc3RyPWF0ci5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBsdHIoZSx0KXtyZXR1cm4gZSE9bnVsbCYmc3RyLmNhbGwoZSx0KX1wcmUuZXhwb3J0cz1sdHJ9KTt2YXIgWnN0PUgoKHRabixtcmUpPT57dmFyIGN0cj1kcmUoKSx1dHI9anN0KCk7ZnVuY3Rpb24gaHRyKGUsdCl7cmV0dXJuIGUhPW51bGwmJnV0cihlLHQsY3RyKX1tcmUuZXhwb3J0cz1odHJ9KTt2YXIgX3JlPUgoKGVabixncmUpPT57dmFyIGZ0cj1VQigpLHB0cj1adigpLGR0cj1xUygpLG10cj1UaSgpLGd0cj1IZigpLF90cj0kdigpLHl0cj16NCgpLHZ0cj1ZUygpLHh0cj0iW29iamVjdCBNYXBdIixidHI9IltvYmplY3QgU2V0XSIsd3RyPU9iamVjdC5wcm90b3R5cGUsU3RyPXd0ci5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBNdHIoZSl7aWYoZT09bnVsbClyZXR1cm4hMDtpZihndHIoZSkmJihtdHIoZSl8fHR5cGVvZiBlPT0ic3RyaW5nInx8dHlwZW9mIGUuc3BsaWNlPT0iZnVuY3Rpb24ifHxfdHIoZSl8fHZ0cihlKXx8ZHRyKGUpKSlyZXR1cm4hZS5sZW5ndGg7dmFyIHQ9cHRyKGUpO2lmKHQ9PXh0cnx8dD09YnRyKXJldHVybiFlLnNpemU7aWYoeXRyKGUpKXJldHVybiFmdHIoZSkubGVuZ3RoO2Zvcih2YXIgciBpbiBlKWlmKFN0ci5jYWxsKGUscikpcmV0dXJuITE7cmV0dXJuITB9Z3JlLmV4cG9ydHM9TXRyfSk7dmFyIEpzdD1IKChyWm4seXJlKT0+e2Z1bmN0aW9uIEV0cihlKXtyZXR1cm4gZT09PXZvaWQgMH15cmUuZXhwb3J0cz1FdHJ9KTt2YXIgUXN0PUgoKG5abix2cmUpPT57dmFyIFR0cj1INCgpLEN0cj1IZigpO2Z1bmN0aW9uIEF0cihlLHQpe3ZhciByPS0xLG49Q3RyKGUpP0FycmF5KGUubGVuZ3RoKTpbXTtyZXR1cm4gVHRyKGUsZnVuY3Rpb24oaSxvLGEpe25bKytyXT10KGksbyxhKX0pLG59dnJlLmV4cG9ydHM9QXRyfSk7dmFyIHRsdD1IKChpWm4seHJlKT0+e3ZhciBQdHI9VjQoKSxJdHI9VmYoKSxMdHI9UXN0KCksa3RyPVRpKCk7ZnVuY3Rpb24gUnRyKGUsdCl7dmFyIHI9a3RyKGUpP1B0cjpMdHI7cmV0dXJuIHIoZSxJdHIodCwzKSl9eHJlLmV4cG9ydHM9UnRyfSk7dmFyIHdyZT1IKChvWm4sYnJlKT0+e2Z1bmN0aW9uIE50cihlLHQscixuKXt2YXIgaT0tMSxvPWU9PW51bGw/MDplLmxlbmd0aDtmb3IobiYmbyYmKHI9ZVsrK2ldKTsrK2k8bzspcj10KHIsZVtpXSxpLGUpO3JldHVybiByfWJyZS5leHBvcnRzPU50cn0pO3ZhciBNcmU9SCgoYVpuLFNyZSk9PntmdW5jdGlvbiBEdHIoZSx0LHIsbixpKXtyZXR1cm4gaShlLGZ1bmN0aW9uKG8sYSxzKXtyPW4/KG49ITEsbyk6dChyLG8sYSxzKX0pLHJ9U3JlLmV4cG9ydHM9RHRyfSk7dmFyIGVsdD1IKChzWm4sRXJlKT0+e3ZhciBPdHI9d3JlKCksenRyPUg0KCksRnRyPVZmKCksQnRyPU1yZSgpLEh0cj1UaSgpO2Z1bmN0aW9uIFZ0cihlLHQscil7dmFyIG49SHRyKGUpP090cjpCdHIsaT1hcmd1bWVudHMubGVuZ3RoPDM7cmV0dXJuIG4oZSxGdHIodCw0KSxyLGksenRyKX1FcmUuZXhwb3J0cz1WdHJ9KTt2YXIgQ3JlPUgoKGxabixUcmUpPT57dmFyIFV0cj1sMCgpLHF0cj1UaSgpLEd0cj1ZdSgpLFd0cj0iW29iamVjdCBTdHJpbmddIjtmdW5jdGlvbiBZdHIoZSl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nInx8IXF0cihlKSYmR3RyKGUpJiZVdHIoZSk9PVd0cn1UcmUuZXhwb3J0cz1ZdHJ9KTt2YXIgUHJlPUgoKGNabixBcmUpPT57dmFyIGp0cj0kc3QoKSxYdHI9anRyKCJsZW5ndGgiKTtBcmUuZXhwb3J0cz1YdHJ9KTt2YXIgTHJlPUgoKHVabixJcmUpPT57dmFyICR0cj0iXFx1ZDgwMC1cXHVkZmZmIixLdHI9IlxcdTAzMDAtXFx1MDM2ZiIsWnRyPSJcXHVmZTIwLVxcdWZlMmYiLEp0cj0iXFx1MjBkMC1cXHUyMGZmIixRdHI9S3RyK1p0citKdHIsdGVyPSJcXHVmZTBlXFx1ZmUwZiIsZWVyPSJcXHUyMDBkIixyZXI9UmVnRXhwKCJbIitlZXIrJHRyK1F0cit0ZXIrIl0iKTtmdW5jdGlvbiBuZXIoZSl7cmV0dXJuIHJlci50ZXN0KGUpfUlyZS5leHBvcnRzPW5lcn0pO3ZhciBIcmU9SCgoaFpuLEJyZSk9Pnt2YXIgUnJlPSJcXHVkODAwLVxcdWRmZmYiLGllcj0iXFx1MDMwMC1cXHUwMzZmIixvZXI9IlxcdWZlMjAtXFx1ZmUyZiIsYWVyPSJcXHUyMGQwLVxcdTIwZmYiLHNlcj1pZXIrb2VyK2FlcixsZXI9IlxcdWZlMGVcXHVmZTBmIixjZXI9IlsiK1JyZSsiXSIscmx0PSJbIitzZXIrIl0iLG5sdD0iXFx1ZDgzY1tcXHVkZmZiLVxcdWRmZmZdIix1ZXI9Iig/OiIrcmx0KyJ8IitubHQrIikiLE5yZT0iW14iK1JyZSsiXSIsRHJlPSIoPzpcXHVkODNjW1xcdWRkZTYtXFx1ZGRmZl0pezJ9IixPcmU9IltcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl0iLGhlcj0iXFx1MjAwZCIsenJlPXVlcisiPyIsRnJlPSJbIitsZXIrIl0/IixmZXI9Iig/OiIraGVyKyIoPzoiK1tOcmUsRHJlLE9yZV0uam9pbigifCIpKyIpIitGcmUrenJlKyIpKiIscGVyPUZyZSt6cmUrZmVyLGRlcj0iKD86IitbTnJlK3JsdCsiPyIscmx0LERyZSxPcmUsY2VyXS5qb2luKCJ8IikrIikiLGtyZT1SZWdFeHAobmx0KyIoPz0iK25sdCsiKXwiK2RlcitwZXIsImciKTtmdW5jdGlvbiBtZXIoZSl7Zm9yKHZhciB0PWtyZS5sYXN0SW5kZXg9MDtrcmUudGVzdChlKTspKyt0O3JldHVybiB0fUJyZS5leHBvcnRzPW1lcn0pO3ZhciBVcmU9SCgoZlpuLFZyZSk9Pnt2YXIgZ2VyPVByZSgpLF9lcj1McmUoKSx5ZXI9SHJlKCk7ZnVuY3Rpb24gdmVyKGUpe3JldHVybiBfZXIoZSk/eWVyKGUpOmdlcihlKX1WcmUuZXhwb3J0cz12ZXJ9KTt2YXIgR3JlPUgoKHBabixxcmUpPT57dmFyIHhlcj1VQigpLGJlcj1adigpLHdlcj1IZigpLFNlcj1DcmUoKSxNZXI9VXJlKCksRWVyPSJbb2JqZWN0IE1hcF0iLFRlcj0iW29iamVjdCBTZXRdIjtmdW5jdGlvbiBDZXIoZSl7aWYoZT09bnVsbClyZXR1cm4gMDtpZih3ZXIoZSkpcmV0dXJuIFNlcihlKT9NZXIoZSk6ZS5sZW5ndGg7dmFyIHQ9YmVyKGUpO3JldHVybiB0PT1FZXJ8fHQ9PVRlcj9lLnNpemU6eGVyKGUpLmxlbmd0aH1xcmUuZXhwb3J0cz1DZXJ9KTt2YXIgWXJlPUgoKGRabixXcmUpPT57dmFyIEFlcj1CQigpLFBlcj1Mc3QoKSxJZXI9JEIoKSxMZXI9VmYoKSxrZXI9QjQoKSxSZXI9VGkoKSxOZXI9JHYoKSxEZXI9RlMoKSxPZXI9RWwoKSx6ZXI9WVMoKTtmdW5jdGlvbiBGZXIoZSx0LHIpe3ZhciBuPVJlcihlKSxpPW58fE5lcihlKXx8emVyKGUpO2lmKHQ9TGVyKHQsNCkscj09bnVsbCl7dmFyIG89ZSYmZS5jb25zdHJ1Y3RvcjtpP3I9bj9uZXcgbzpbXTpPZXIoZSk/cj1EZXIobyk/UGVyKGtlcihlKSk6e306cj17fX1yZXR1cm4oaT9BZXI6SWVyKShlLGZ1bmN0aW9uKGEscyxsKXtyZXR1cm4gdChyLGEscyxsKX0pLHJ9V3JlLmV4cG9ydHM9RmVyfSk7dmFyIEtyZT1IKChtWm4sJHJlKT0+e3ZhciBqcmU9WHYoKSxCZXI9cVMoKSxIZXI9VGkoKSxYcmU9anJlP2pyZS5pc0NvbmNhdFNwcmVhZGFibGU6dm9pZCAwO2Z1bmN0aW9uIFZlcihlKXtyZXR1cm4gSGVyKGUpfHxCZXIoZSl8fCEhKFhyZSYmZSYmZVtYcmVdKX0kcmUuZXhwb3J0cz1WZXJ9KTt2YXIgdEg9SCgoZ1puLEpyZSk9Pnt2YXIgVWVyPUdCKCkscWVyPUtyZSgpO2Z1bmN0aW9uIFpyZShlLHQscixuLGkpe3ZhciBvPS0xLGE9ZS5sZW5ndGg7Zm9yKHJ8fChyPXFlciksaXx8KGk9W10pOysrbzxhOyl7dmFyIHM9ZVtvXTt0PjAmJnIocyk/dD4xP1pyZShzLHQtMSxyLG4saSk6VWVyKGkscyk6bnx8KGlbaS5sZW5ndGhdPXMpfXJldHVybiBpfUpyZS5leHBvcnRzPVpyZX0pO3ZhciB0bmU9SCgoX1puLFFyZSk9PntmdW5jdGlvbiBHZXIoZSx0LHIpe3N3aXRjaChyLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBlLmNhbGwodCk7Y2FzZSAxOnJldHVybiBlLmNhbGwodCxyWzBdKTtjYXNlIDI6cmV0dXJuIGUuY2FsbCh0LHJbMF0sclsxXSk7Y2FzZSAzOnJldHVybiBlLmNhbGwodCxyWzBdLHJbMV0sclsyXSl9cmV0dXJuIGUuYXBwbHkodCxyKX1RcmUuZXhwb3J0cz1HZXJ9KTt2YXIgaWx0PUgoKHlabixybmUpPT57dmFyIFdlcj10bmUoKSxlbmU9TWF0aC5tYXg7ZnVuY3Rpb24gWWVyKGUsdCxyKXtyZXR1cm4gdD1lbmUodD09PXZvaWQgMD9lLmxlbmd0aC0xOnQsMCksZnVuY3Rpb24oKXtmb3IodmFyIG49YXJndW1lbnRzLGk9LTEsbz1lbmUobi5sZW5ndGgtdCwwKSxhPUFycmF5KG8pOysraTxvOylhW2ldPW5bdCtpXTtpPS0xO2Zvcih2YXIgcz1BcnJheSh0KzEpOysraTx0OylzW2ldPW5baV07cmV0dXJuIHNbdF09cihhKSxXZXIoZSx0aGlzLHMpfX1ybmUuZXhwb3J0cz1ZZXJ9KTt2YXIgb25lPUgoKHZabixpbmUpPT57dmFyIGplcj1qQigpLG5uZT1mc3QoKSxYZXI9aDAoKSwkZXI9bm5lP2Z1bmN0aW9uKGUsdCl7cmV0dXJuIG5uZShlLCJ0b1N0cmluZyIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOmplcih0KSx3cml0YWJsZTohMH0pfTpYZXI7aW5lLmV4cG9ydHM9JGVyfSk7dmFyIHNuZT1IKCh4Wm4sYW5lKT0+e3ZhciBLZXI9ODAwLFplcj0xNixKZXI9RGF0ZS5ub3c7ZnVuY3Rpb24gUWVyKGUpe3ZhciB0PTAscj0wO3JldHVybiBmdW5jdGlvbigpe3ZhciBuPUplcigpLGk9WmVyLShuLXIpO2lmKHI9bixpPjApe2lmKCsrdD49S2VyKXJldHVybiBhcmd1bWVudHNbMF19ZWxzZSB0PTA7cmV0dXJuIGUuYXBwbHkodm9pZCAwLGFyZ3VtZW50cyl9fWFuZS5leHBvcnRzPVFlcn0pO3ZhciBvbHQ9SCgoYlpuLGxuZSk9Pnt2YXIgdHJyPW9uZSgpLGVycj1zbmUoKSxycnI9ZXJyKHRycik7bG5lLmV4cG9ydHM9cnJyfSk7dmFyIEc0PUgoKHdabixjbmUpPT57dmFyIG5ycj1oMCgpLGlycj1pbHQoKSxvcnI9b2x0KCk7ZnVuY3Rpb24gYXJyKGUsdCl7cmV0dXJuIG9ycihpcnIoZSx0LG5yciksZSsiIil9Y25lLmV4cG9ydHM9YXJyfSk7dmFyIGFsdD1IKChTWm4sdW5lKT0+e2Z1bmN0aW9uIHNycihlLHQscixuKXtmb3IodmFyIGk9ZS5sZW5ndGgsbz1yKyhuPzE6LTEpO24/by0tOisrbzxpOylpZih0KGVbb10sbyxlKSlyZXR1cm4gbztyZXR1cm4tMX11bmUuZXhwb3J0cz1zcnJ9KTt2YXIgZm5lPUgoKE1abixobmUpPT57ZnVuY3Rpb24gbHJyKGUpe3JldHVybiBlIT09ZX1obmUuZXhwb3J0cz1scnJ9KTt2YXIgZG5lPUgoKEVabixwbmUpPT57ZnVuY3Rpb24gY3JyKGUsdCxyKXtmb3IodmFyIG49ci0xLGk9ZS5sZW5ndGg7KytuPGk7KWlmKGVbbl09PT10KXJldHVybiBuO3JldHVybi0xfXBuZS5leHBvcnRzPWNycn0pO3ZhciBnbmU9SCgoVFpuLG1uZSk9Pnt2YXIgdXJyPWFsdCgpLGhycj1mbmUoKSxmcnI9ZG5lKCk7ZnVuY3Rpb24gcHJyKGUsdCxyKXtyZXR1cm4gdD09PXQ/ZnJyKGUsdCxyKTp1cnIoZSxocnIscil9bW5lLmV4cG9ydHM9cHJyfSk7dmFyIHluZT1IKChDWm4sX25lKT0+e3ZhciBkcnI9Z25lKCk7ZnVuY3Rpb24gbXJyKGUsdCl7dmFyIHI9ZT09bnVsbD8wOmUubGVuZ3RoO3JldHVybiEhciYmZHJyKGUsdCwwKT4tMX1fbmUuZXhwb3J0cz1tcnJ9KTt2YXIgeG5lPUgoKEFabix2bmUpPT57ZnVuY3Rpb24gZ3JyKGUsdCxyKXtmb3IodmFyIG49LTEsaT1lPT1udWxsPzA6ZS5sZW5ndGg7KytuPGk7KWlmKHIodCxlW25dKSlyZXR1cm4hMDtyZXR1cm4hMX12bmUuZXhwb3J0cz1ncnJ9KTt2YXIgd25lPUgoKFBabixibmUpPT57ZnVuY3Rpb24gX3JyKCl7fWJuZS5leHBvcnRzPV9ycn0pO3ZhciBNbmU9SCgoSVpuLFNuZSk9Pnt2YXIgc2x0PVNzdCgpLHlycj13bmUoKSx2cnI9WkIoKSx4cnI9MS8wLGJycj1zbHQmJjEvdnJyKG5ldyBzbHQoWywtMF0pKVsxXT09eHJyP2Z1bmN0aW9uKGUpe3JldHVybiBuZXcgc2x0KGUpfTp5cnI7U25lLmV4cG9ydHM9YnJyfSk7dmFyIFRuZT1IKChMWm4sRW5lKT0+e3ZhciB3cnI9enN0KCksU3JyPXluZSgpLE1ycj14bmUoKSxFcnI9RnN0KCksVHJyPU1uZSgpLENycj1aQigpLEFycj0yMDA7ZnVuY3Rpb24gUHJyKGUsdCxyKXt2YXIgbj0tMSxpPVNycixvPWUubGVuZ3RoLGE9ITAscz1bXSxsPXM7aWYocilhPSExLGk9TXJyO2Vsc2UgaWYobz49QXJyKXt2YXIgYz10P251bGw6VHJyKGUpO2lmKGMpcmV0dXJuIENycihjKTthPSExLGk9RXJyLGw9bmV3IHdycn1lbHNlIGw9dD9bXTpzO3Q6Zm9yKDsrK248bzspe3ZhciB1PWVbbl0saD10P3QodSk6dTtpZih1PXJ8fHUhPT0wP3U6MCxhJiZoPT09aCl7Zm9yKHZhciBmPWwubGVuZ3RoO2YtLTspaWYobFtmXT09PWgpY29udGludWUgdDt0JiZsLnB1c2goaCkscy5wdXNoKHUpfWVsc2UgaShsLGgscil8fChsIT09cyYmbC5wdXNoKGgpLHMucHVzaCh1KSl9cmV0dXJuIHN9RW5lLmV4cG9ydHM9UHJyfSk7dmFyIGxsdD1IKChrWm4sQ25lKT0+e3ZhciBJcnI9SGYoKSxMcnI9WXUoKTtmdW5jdGlvbiBrcnIoZSl7cmV0dXJuIExycihlKSYmSXJyKGUpfUNuZS5leHBvcnRzPWtycn0pO3ZhciBQbmU9SCgoUlpuLEFuZSk9Pnt2YXIgUnJyPXRIKCksTnJyPUc0KCksRHJyPVRuZSgpLE9ycj1sbHQoKSx6cnI9TnJyKGZ1bmN0aW9uKGUpe3JldHVybiBEcnIoUnJyKGUsMSxPcnIsITApKX0pO0FuZS5leHBvcnRzPXpycn0pO3ZhciBMbmU9SCgoTlpuLEluZSk9Pnt2YXIgRnJyPVY0KCk7ZnVuY3Rpb24gQnJyKGUsdCl7cmV0dXJuIEZycih0LGZ1bmN0aW9uKHIpe3JldHVybiBlW3JdfSl9SW5lLmV4cG9ydHM9QnJyfSk7dmFyIGNsdD1IKChEWm4sa25lKT0+e3ZhciBIcnI9TG5lKCksVnJyPVBkKCk7ZnVuY3Rpb24gVXJyKGUpe3JldHVybiBlPT1udWxsP1tdOkhycihlLFZycihlKSl9a25lLmV4cG9ydHM9VXJyfSk7dmFyIFRsPUgoKE9abixSbmUpPT57dmFyIGVIO2lmKHR5cGVvZiBFeD09ImZ1bmN0aW9uIil0cnl7ZUg9e2Nsb25lOmt0ZSgpLGNvbnN0YW50OmpCKCksZWFjaDpPc3QoKSxmaWx0ZXI6S3N0KCksaGFzOlpzdCgpLGlzQXJyYXk6VGkoKSxpc0VtcHR5Ol9yZSgpLGlzRnVuY3Rpb246RlMoKSxpc1VuZGVmaW5lZDpKc3QoKSxrZXlzOlBkKCksbWFwOnRsdCgpLHJlZHVjZTplbHQoKSxzaXplOkdyZSgpLHRyYW5zZm9ybTpZcmUoKSx1bmlvbjpQbmUoKSx2YWx1ZXM6Y2x0KCl9fWNhdGNoKGUpe31lSHx8KGVIPXdpbmRvdy5fKTtSbmUuZXhwb3J0cz1lSH0pO3ZhciBySD1IKChGWm4sem5lKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgamU9VGwoKTt6bmUuZXhwb3J0cz1jcjt2YXIgcXJyPSJcMCIsUXY9IlwwIixObmU9IgEiO2Z1bmN0aW9uIGNyKGUpe3RoaXMuX2lzRGlyZWN0ZWQ9amUuaGFzKGUsImRpcmVjdGVkIik/ZS5kaXJlY3RlZDohMCx0aGlzLl9pc011bHRpZ3JhcGg9amUuaGFzKGUsIm11bHRpZ3JhcGgiKT9lLm11bHRpZ3JhcGg6ITEsdGhpcy5faXNDb21wb3VuZD1qZS5oYXMoZSwiY29tcG91bmQiKT9lLmNvbXBvdW5kOiExLHRoaXMuX2xhYmVsPXZvaWQgMCx0aGlzLl9kZWZhdWx0Tm9kZUxhYmVsRm49amUuY29uc3RhbnQodm9pZCAwKSx0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm49amUuY29uc3RhbnQodm9pZCAwKSx0aGlzLl9ub2Rlcz17fSx0aGlzLl9pc0NvbXBvdW5kJiYodGhpcy5fcGFyZW50PXt9LHRoaXMuX2NoaWxkcmVuPXt9LHRoaXMuX2NoaWxkcmVuW1F2XT17fSksdGhpcy5faW49e30sdGhpcy5fcHJlZHM9e30sdGhpcy5fb3V0PXt9LHRoaXMuX3N1Y3M9e30sdGhpcy5fZWRnZU9ianM9e30sdGhpcy5fZWRnZUxhYmVscz17fX1jci5wcm90b3R5cGUuX25vZGVDb3VudD0wO2NyLnByb3RvdHlwZS5fZWRnZUNvdW50PTA7Y3IucHJvdG90eXBlLmlzRGlyZWN0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNEaXJlY3RlZH07Y3IucHJvdG90eXBlLmlzTXVsdGlncmFwaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc011bHRpZ3JhcGh9O2NyLnByb3RvdHlwZS5pc0NvbXBvdW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzQ29tcG91bmR9O2NyLnByb3RvdHlwZS5zZXRHcmFwaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbGFiZWw9ZSx0aGlzfTtjci5wcm90b3R5cGUuZ3JhcGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGFiZWx9O2NyLnByb3RvdHlwZS5zZXREZWZhdWx0Tm9kZUxhYmVsPWZ1bmN0aW9uKGUpe3JldHVybiBqZS5pc0Z1bmN0aW9uKGUpfHwoZT1qZS5jb25zdGFudChlKSksdGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuPWUsdGhpc307Y3IucHJvdG90eXBlLm5vZGVDb3VudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ub2RlQ291bnR9O2NyLnByb3RvdHlwZS5ub2Rlcz1mdW5jdGlvbigpe3JldHVybiBqZS5rZXlzKHRoaXMuX25vZGVzKX07Y3IucHJvdG90eXBlLnNvdXJjZXM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiBqZS5maWx0ZXIodGhpcy5ub2RlcygpLGZ1bmN0aW9uKHQpe3JldHVybiBqZS5pc0VtcHR5KGUuX2luW3RdKX0pfTtjci5wcm90b3R5cGUuc2lua3M9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiBqZS5maWx0ZXIodGhpcy5ub2RlcygpLGZ1bmN0aW9uKHQpe3JldHVybiBqZS5pc0VtcHR5KGUuX291dFt0XSl9KX07Y3IucHJvdG90eXBlLnNldE5vZGVzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9YXJndW1lbnRzLG49dGhpcztyZXR1cm4gamUuZWFjaChlLGZ1bmN0aW9uKGkpe3IubGVuZ3RoPjE/bi5zZXROb2RlKGksdCk6bi5zZXROb2RlKGkpfSksdGhpc307Y3IucHJvdG90eXBlLnNldE5vZGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gamUuaGFzKHRoaXMuX25vZGVzLGUpPyhhcmd1bWVudHMubGVuZ3RoPjEmJih0aGlzLl9ub2Rlc1tlXT10KSx0aGlzKToodGhpcy5fbm9kZXNbZV09YXJndW1lbnRzLmxlbmd0aD4xP3Q6dGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuKGUpLHRoaXMuX2lzQ29tcG91bmQmJih0aGlzLl9wYXJlbnRbZV09UXYsdGhpcy5fY2hpbGRyZW5bZV09e30sdGhpcy5fY2hpbGRyZW5bUXZdW2VdPSEwKSx0aGlzLl9pbltlXT17fSx0aGlzLl9wcmVkc1tlXT17fSx0aGlzLl9vdXRbZV09e30sdGhpcy5fc3Vjc1tlXT17fSwrK3RoaXMuX25vZGVDb3VudCx0aGlzKX07Y3IucHJvdG90eXBlLm5vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX25vZGVzW2VdfTtjci5wcm90b3R5cGUuaGFzTm9kZT1mdW5jdGlvbihlKXtyZXR1cm4gamUuaGFzKHRoaXMuX25vZGVzLGUpfTtjci5wcm90b3R5cGUucmVtb3ZlTm9kZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzO2lmKGplLmhhcyh0aGlzLl9ub2RlcyxlKSl7dmFyIHI9ZnVuY3Rpb24obil7dC5yZW1vdmVFZGdlKHQuX2VkZ2VPYmpzW25dKX07ZGVsZXRlIHRoaXMuX25vZGVzW2VdLHRoaXMuX2lzQ29tcG91bmQmJih0aGlzLl9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdChlKSxkZWxldGUgdGhpcy5fcGFyZW50W2VdLGplLmVhY2godGhpcy5jaGlsZHJlbihlKSxmdW5jdGlvbihuKXt0LnNldFBhcmVudChuKX0pLGRlbGV0ZSB0aGlzLl9jaGlsZHJlbltlXSksamUuZWFjaChqZS5rZXlzKHRoaXMuX2luW2VdKSxyKSxkZWxldGUgdGhpcy5faW5bZV0sZGVsZXRlIHRoaXMuX3ByZWRzW2VdLGplLmVhY2goamUua2V5cyh0aGlzLl9vdXRbZV0pLHIpLGRlbGV0ZSB0aGlzLl9vdXRbZV0sZGVsZXRlIHRoaXMuX3N1Y3NbZV0sLS10aGlzLl9ub2RlQ291bnR9cmV0dXJuIHRoaXN9O2NyLnByb3RvdHlwZS5zZXRQYXJlbnQ9ZnVuY3Rpb24oZSx0KXtpZighdGhpcy5faXNDb21wb3VuZCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXQgcGFyZW50IGluIGEgbm9uLWNvbXBvdW5kIGdyYXBoIik7aWYoamUuaXNVbmRlZmluZWQodCkpdD1RdjtlbHNle3QrPSIiO2Zvcih2YXIgcj10OyFqZS5pc1VuZGVmaW5lZChyKTtyPXRoaXMucGFyZW50KHIpKWlmKHI9PT1lKXRocm93IG5ldyBFcnJvcigiU2V0dGluZyAiK3QrIiBhcyBwYXJlbnQgb2YgIitlKyIgd291bGQgY3JlYXRlIGEgY3ljbGUiKTt0aGlzLnNldE5vZGUodCl9cmV0dXJuIHRoaXMuc2V0Tm9kZShlKSx0aGlzLl9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdChlKSx0aGlzLl9wYXJlbnRbZV09dCx0aGlzLl9jaGlsZHJlblt0XVtlXT0hMCx0aGlzfTtjci5wcm90b3R5cGUuX3JlbW92ZUZyb21QYXJlbnRzQ2hpbGRMaXN0PWZ1bmN0aW9uKGUpe2RlbGV0ZSB0aGlzLl9jaGlsZHJlblt0aGlzLl9wYXJlbnRbZV1dW2VdfTtjci5wcm90b3R5cGUucGFyZW50PWZ1bmN0aW9uKGUpe2lmKHRoaXMuX2lzQ29tcG91bmQpe3ZhciB0PXRoaXMuX3BhcmVudFtlXTtpZih0IT09UXYpcmV0dXJuIHR9fTtjci5wcm90b3R5cGUuY2hpbGRyZW49ZnVuY3Rpb24oZSl7aWYoamUuaXNVbmRlZmluZWQoZSkmJihlPVF2KSx0aGlzLl9pc0NvbXBvdW5kKXt2YXIgdD10aGlzLl9jaGlsZHJlbltlXTtpZih0KXJldHVybiBqZS5rZXlzKHQpfWVsc2V7aWYoZT09PVF2KXJldHVybiB0aGlzLm5vZGVzKCk7aWYodGhpcy5oYXNOb2RlKGUpKXJldHVybltdfX07Y3IucHJvdG90eXBlLnByZWRlY2Vzc29ycz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9wcmVkc1tlXTtpZih0KXJldHVybiBqZS5rZXlzKHQpfTtjci5wcm90b3R5cGUuc3VjY2Vzc29ycz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9zdWNzW2VdO2lmKHQpcmV0dXJuIGplLmtleXModCl9O2NyLnByb3RvdHlwZS5uZWlnaGJvcnM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcmVkZWNlc3NvcnMoZSk7aWYodClyZXR1cm4gamUudW5pb24odCx0aGlzLnN1Y2Nlc3NvcnMoZSkpfTtjci5wcm90b3R5cGUuaXNMZWFmPWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiB0aGlzLmlzRGlyZWN0ZWQoKT90PXRoaXMuc3VjY2Vzc29ycyhlKTp0PXRoaXMubmVpZ2hib3JzKGUpLHQubGVuZ3RoPT09MH07Y3IucHJvdG90eXBlLmZpbHRlck5vZGVzPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyB0aGlzLmNvbnN0cnVjdG9yKHtkaXJlY3RlZDp0aGlzLl9pc0RpcmVjdGVkLG11bHRpZ3JhcGg6dGhpcy5faXNNdWx0aWdyYXBoLGNvbXBvdW5kOnRoaXMuX2lzQ29tcG91bmR9KTt0LnNldEdyYXBoKHRoaXMuZ3JhcGgoKSk7dmFyIHI9dGhpcztqZS5lYWNoKHRoaXMuX25vZGVzLGZ1bmN0aW9uKG8sYSl7ZShhKSYmdC5zZXROb2RlKGEsbyl9KSxqZS5lYWNoKHRoaXMuX2VkZ2VPYmpzLGZ1bmN0aW9uKG8pe3QuaGFzTm9kZShvLnYpJiZ0Lmhhc05vZGUoby53KSYmdC5zZXRFZGdlKG8sci5lZGdlKG8pKX0pO3ZhciBuPXt9O2Z1bmN0aW9uIGkobyl7dmFyIGE9ci5wYXJlbnQobyk7cmV0dXJuIGE9PT12b2lkIDB8fHQuaGFzTm9kZShhKT8obltvXT1hLGEpOmEgaW4gbj9uW2FdOmkoYSl9cmV0dXJuIHRoaXMuX2lzQ29tcG91bmQmJmplLmVhY2godC5ub2RlcygpLGZ1bmN0aW9uKG8pe3Quc2V0UGFyZW50KG8saShvKSl9KSx0fTtjci5wcm90b3R5cGUuc2V0RGVmYXVsdEVkZ2VMYWJlbD1mdW5jdGlvbihlKXtyZXR1cm4gamUuaXNGdW5jdGlvbihlKXx8KGU9amUuY29uc3RhbnQoZSkpLHRoaXMuX2RlZmF1bHRFZGdlTGFiZWxGbj1lLHRoaXN9O2NyLnByb3RvdHlwZS5lZGdlQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWRnZUNvdW50fTtjci5wcm90b3R5cGUuZWRnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gamUudmFsdWVzKHRoaXMuX2VkZ2VPYmpzKX07Y3IucHJvdG90eXBlLnNldFBhdGg9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLG49YXJndW1lbnRzO3JldHVybiBqZS5yZWR1Y2UoZSxmdW5jdGlvbihpLG8pe3JldHVybiBuLmxlbmd0aD4xP3Iuc2V0RWRnZShpLG8sdCk6ci5zZXRFZGdlKGksbyksb30pLHRoaXN9O2NyLnByb3RvdHlwZS5zZXRFZGdlPWZ1bmN0aW9uKCl7dmFyIGUsdCxyLG4saT0hMSxvPWFyZ3VtZW50c1swXTt0eXBlb2Ygbz09Im9iamVjdCImJm8hPT1udWxsJiYidiJpbiBvPyhlPW8udix0PW8udyxyPW8ubmFtZSxhcmd1bWVudHMubGVuZ3RoPT09MiYmKG49YXJndW1lbnRzWzFdLGk9ITApKTooZT1vLHQ9YXJndW1lbnRzWzFdLHI9YXJndW1lbnRzWzNdLGFyZ3VtZW50cy5sZW5ndGg+MiYmKG49YXJndW1lbnRzWzJdLGk9ITApKSxlPSIiK2UsdD0iIit0LGplLmlzVW5kZWZpbmVkKHIpfHwocj0iIityKTt2YXIgYT1XNCh0aGlzLl9pc0RpcmVjdGVkLGUsdCxyKTtpZihqZS5oYXModGhpcy5fZWRnZUxhYmVscyxhKSlyZXR1cm4gaSYmKHRoaXMuX2VkZ2VMYWJlbHNbYV09biksdGhpcztpZighamUuaXNVbmRlZmluZWQocikmJiF0aGlzLl9pc011bHRpZ3JhcGgpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2V0IGEgbmFtZWQgZWRnZSB3aGVuIGlzTXVsdGlncmFwaCA9IGZhbHNlIik7dGhpcy5zZXROb2RlKGUpLHRoaXMuc2V0Tm9kZSh0KSx0aGlzLl9lZGdlTGFiZWxzW2FdPWk/bjp0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm4oZSx0LHIpO3ZhciBzPUdycih0aGlzLl9pc0RpcmVjdGVkLGUsdCxyKTtyZXR1cm4gZT1zLnYsdD1zLncsT2JqZWN0LmZyZWV6ZShzKSx0aGlzLl9lZGdlT2Jqc1thXT1zLERuZSh0aGlzLl9wcmVkc1t0XSxlKSxEbmUodGhpcy5fc3Vjc1tlXSx0KSx0aGlzLl9pblt0XVthXT1zLHRoaXMuX291dFtlXVthXT1zLHRoaXMuX2VkZ2VDb3VudCsrLHRoaXN9O2NyLnByb3RvdHlwZS5lZGdlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPT09MT91bHQodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOlc0KHRoaXMuX2lzRGlyZWN0ZWQsZSx0LHIpO3JldHVybiB0aGlzLl9lZGdlTGFiZWxzW25dfTtjci5wcm90b3R5cGUuaGFzRWRnZT1mdW5jdGlvbihlLHQscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aD09PTE/dWx0KHRoaXMuX2lzRGlyZWN0ZWQsYXJndW1lbnRzWzBdKTpXNCh0aGlzLl9pc0RpcmVjdGVkLGUsdCxyKTtyZXR1cm4gamUuaGFzKHRoaXMuX2VkZ2VMYWJlbHMsbil9O2NyLnByb3RvdHlwZS5yZW1vdmVFZGdlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPT09MT91bHQodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOlc0KHRoaXMuX2lzRGlyZWN0ZWQsZSx0LHIpLGk9dGhpcy5fZWRnZU9ianNbbl07cmV0dXJuIGkmJihlPWkudix0PWkudyxkZWxldGUgdGhpcy5fZWRnZUxhYmVsc1tuXSxkZWxldGUgdGhpcy5fZWRnZU9ianNbbl0sT25lKHRoaXMuX3ByZWRzW3RdLGUpLE9uZSh0aGlzLl9zdWNzW2VdLHQpLGRlbGV0ZSB0aGlzLl9pblt0XVtuXSxkZWxldGUgdGhpcy5fb3V0W2VdW25dLHRoaXMuX2VkZ2VDb3VudC0tKSx0aGlzfTtjci5wcm90b3R5cGUuaW5FZGdlcz1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX2luW2VdO2lmKHIpe3ZhciBuPWplLnZhbHVlcyhyKTtyZXR1cm4gdD9qZS5maWx0ZXIobixmdW5jdGlvbihpKXtyZXR1cm4gaS52PT09dH0pOm59fTtjci5wcm90b3R5cGUub3V0RWRnZXM9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9vdXRbZV07aWYocil7dmFyIG49amUudmFsdWVzKHIpO3JldHVybiB0P2plLmZpbHRlcihuLGZ1bmN0aW9uKGkpe3JldHVybiBpLnc9PT10fSk6bn19O2NyLnByb3RvdHlwZS5ub2RlRWRnZXM9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmluRWRnZXMoZSx0KTtpZihyKXJldHVybiByLmNvbmNhdCh0aGlzLm91dEVkZ2VzKGUsdCkpfTtmdW5jdGlvbiBEbmUoZSx0KXtlW3RdP2VbdF0rKzplW3RdPTF9ZnVuY3Rpb24gT25lKGUsdCl7LS1lW3RdfHxkZWxldGUgZVt0XX1mdW5jdGlvbiBXNChlLHQscixuKXt2YXIgaT0iIit0LG89IiIrcjtpZighZSYmaT5vKXt2YXIgYT1pO2k9byxvPWF9cmV0dXJuIGkrTm5lK28rTm5lKyhqZS5pc1VuZGVmaW5lZChuKT9xcnI6bil9ZnVuY3Rpb24gR3JyKGUsdCxyLG4pe3ZhciBpPSIiK3Qsbz0iIityO2lmKCFlJiZpPm8pe3ZhciBhPWk7aT1vLG89YX12YXIgcz17djppLHc6b307cmV0dXJuIG4mJihzLm5hbWU9biksc31mdW5jdGlvbiB1bHQoZSx0KXtyZXR1cm4gVzQoZSx0LnYsdC53LHQubmFtZSl9fSk7dmFyIEJuZT1IKChCWm4sRm5lKT0+e0ZuZS5leHBvcnRzPSIyLjEuOCJ9KTt2YXIgVm5lPUgoKEhabixIbmUpPT57SG5lLmV4cG9ydHM9e0dyYXBoOnJIKCksdmVyc2lvbjpCbmUoKX19KTt2YXIgcW5lPUgoKFZabixVbmUpPT57dmFyIFVmPVRsKCksV3JyPXJIKCk7VW5lLmV4cG9ydHM9e3dyaXRlOllycixyZWFkOiRycn07ZnVuY3Rpb24gWXJyKGUpe3ZhciB0PXtvcHRpb25zOntkaXJlY3RlZDplLmlzRGlyZWN0ZWQoKSxtdWx0aWdyYXBoOmUuaXNNdWx0aWdyYXBoKCksY29tcG91bmQ6ZS5pc0NvbXBvdW5kKCl9LG5vZGVzOmpycihlKSxlZGdlczpYcnIoZSl9O3JldHVybiBVZi5pc1VuZGVmaW5lZChlLmdyYXBoKCkpfHwodC52YWx1ZT1VZi5jbG9uZShlLmdyYXBoKCkpKSx0fWZ1bmN0aW9uIGpycihlKXtyZXR1cm4gVWYubWFwKGUubm9kZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLm5vZGUodCksbj1lLnBhcmVudCh0KSxpPXt2OnR9O3JldHVybiBVZi5pc1VuZGVmaW5lZChyKXx8KGkudmFsdWU9ciksVWYuaXNVbmRlZmluZWQobil8fChpLnBhcmVudD1uKSxpfSl9ZnVuY3Rpb24gWHJyKGUpe3JldHVybiBVZi5tYXAoZS5lZGdlcygpLGZ1bmN0aW9uKHQpe3ZhciByPWUuZWRnZSh0KSxuPXt2OnQudix3OnQud307cmV0dXJuIFVmLmlzVW5kZWZpbmVkKHQubmFtZSl8fChuLm5hbWU9dC5uYW1lKSxVZi5pc1VuZGVmaW5lZChyKXx8KG4udmFsdWU9ciksbn0pfWZ1bmN0aW9uICRycihlKXt2YXIgdD1uZXcgV3JyKGUub3B0aW9ucykuc2V0R3JhcGgoZS52YWx1ZSk7cmV0dXJuIFVmLmVhY2goZS5ub2RlcyxmdW5jdGlvbihyKXt0LnNldE5vZGUoci52LHIudmFsdWUpLHIucGFyZW50JiZ0LnNldFBhcmVudChyLnYsci5wYXJlbnQpfSksVWYuZWFjaChlLmVkZ2VzLGZ1bmN0aW9uKHIpe3Quc2V0RWRnZSh7djpyLnYsdzpyLncsbmFtZTpyLm5hbWV9LHIudmFsdWUpfSksdH19KTt2YXIgV25lPUgoKFVabixHbmUpPT57dmFyIG5IPVRsKCk7R25lLmV4cG9ydHM9S3JyO2Z1bmN0aW9uIEtycihlKXt2YXIgdD17fSxyPVtdLG47ZnVuY3Rpb24gaShvKXtuSC5oYXModCxvKXx8KHRbb109ITAsbi5wdXNoKG8pLG5ILmVhY2goZS5zdWNjZXNzb3JzKG8pLGkpLG5ILmVhY2goZS5wcmVkZWNlc3NvcnMobyksaSkpfXJldHVybiBuSC5lYWNoKGUubm9kZXMoKSxmdW5jdGlvbihvKXtuPVtdLGkobyksbi5sZW5ndGgmJnIucHVzaChuKX0pLHJ9fSk7dmFyIGhsdD1IKChxWm4sam5lKT0+e3ZhciBZbmU9VGwoKTtqbmUuZXhwb3J0cz1WYztmdW5jdGlvbiBWYygpe3RoaXMuX2Fycj1bXSx0aGlzLl9rZXlJbmRpY2VzPXt9fVZjLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fyci5sZW5ndGh9O1ZjLnByb3RvdHlwZS5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fyci5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUua2V5fSl9O1ZjLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIFluZS5oYXModGhpcy5fa2V5SW5kaWNlcyxlKX07VmMucHJvdG90eXBlLnByaW9yaXR5PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2tleUluZGljZXNbZV07aWYodCE9PXZvaWQgMClyZXR1cm4gdGhpcy5fYXJyW3RdLnByaW9yaXR5fTtWYy5wcm90b3R5cGUubWluPWZ1bmN0aW9uKCl7aWYodGhpcy5zaXplKCk9PT0wKXRocm93IG5ldyBFcnJvcigiUXVldWUgdW5kZXJmbG93Iik7cmV0dXJuIHRoaXMuX2FyclswXS5rZXl9O1ZjLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9rZXlJbmRpY2VzO2lmKGU9U3RyaW5nKGUpLCFZbmUuaGFzKHIsZSkpe3ZhciBuPXRoaXMuX2FycixpPW4ubGVuZ3RoO3JldHVybiByW2VdPWksbi5wdXNoKHtrZXk6ZSxwcmlvcml0eTp0fSksdGhpcy5fZGVjcmVhc2UoaSksITB9cmV0dXJuITF9O1ZjLnByb3RvdHlwZS5yZW1vdmVNaW49ZnVuY3Rpb24oKXt0aGlzLl9zd2FwKDAsdGhpcy5fYXJyLmxlbmd0aC0xKTt2YXIgZT10aGlzLl9hcnIucG9wKCk7cmV0dXJuIGRlbGV0ZSB0aGlzLl9rZXlJbmRpY2VzW2Uua2V5XSx0aGlzLl9oZWFwaWZ5KDApLGUua2V5fTtWYy5wcm90b3R5cGUuZGVjcmVhc2U9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9rZXlJbmRpY2VzW2VdO2lmKHQ+dGhpcy5fYXJyW3JdLnByaW9yaXR5KXRocm93IG5ldyBFcnJvcigiTmV3IHByaW9yaXR5IGlzIGdyZWF0ZXIgdGhhbiBjdXJyZW50IHByaW9yaXR5LiBLZXk6ICIrZSsiIE9sZDogIit0aGlzLl9hcnJbcl0ucHJpb3JpdHkrIiBOZXc6ICIrdCk7dGhpcy5fYXJyW3JdLnByaW9yaXR5PXQsdGhpcy5fZGVjcmVhc2Uocil9O1ZjLnByb3RvdHlwZS5faGVhcGlmeT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9hcnIscj0yKmUsbj1yKzEsaT1lO3I8dC5sZW5ndGgmJihpPXRbcl0ucHJpb3JpdHk8dFtpXS5wcmlvcml0eT9yOmksbjx0Lmxlbmd0aCYmKGk9dFtuXS5wcmlvcml0eTx0W2ldLnByaW9yaXR5P246aSksaSE9PWUmJih0aGlzLl9zd2FwKGUsaSksdGhpcy5faGVhcGlmeShpKSkpfTtWYy5wcm90b3R5cGUuX2RlY3JlYXNlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLl9hcnIscj10W2VdLnByaW9yaXR5LG47ZSE9PTAmJihuPWU+PjEsISh0W25dLnByaW9yaXR5PHIpKTspdGhpcy5fc3dhcChlLG4pLGU9bn07VmMucHJvdG90eXBlLl9zd2FwPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fYXJyLG49dGhpcy5fa2V5SW5kaWNlcyxpPXJbZV0sbz1yW3RdO3JbZV09byxyW3RdPWksbltvLmtleV09ZSxuW2kua2V5XT10fX0pO3ZhciBmbHQ9SCgoR1puLFhuZSk9Pnt2YXIgWnJyPVRsKCksSnJyPWhsdCgpO1huZS5leHBvcnRzPXRucjt2YXIgUXJyPVpyci5jb25zdGFudCgxKTtmdW5jdGlvbiB0bnIoZSx0LHIsbil7cmV0dXJuIGVucihlLFN0cmluZyh0KSxyfHxRcnIsbnx8ZnVuY3Rpb24oaSl7cmV0dXJuIGUub3V0RWRnZXMoaSl9KX1mdW5jdGlvbiBlbnIoZSx0LHIsbil7dmFyIGk9e30sbz1uZXcgSnJyLGEscyxsPWZ1bmN0aW9uKGMpe3ZhciB1PWMudiE9PWE/Yy52OmMudyxoPWlbdV0sZj1yKGMpLHA9cy5kaXN0YW5jZStmO2lmKGY8MCl0aHJvdyBuZXcgRXJyb3IoImRpamtzdHJhIGRvZXMgbm90IGFsbG93IG5lZ2F0aXZlIGVkZ2Ugd2VpZ2h0cy4gQmFkIGVkZ2U6ICIrYysiIFdlaWdodDogIitmKTtwPGguZGlzdGFuY2UmJihoLmRpc3RhbmNlPXAsaC5wcmVkZWNlc3Nvcj1hLG8uZGVjcmVhc2UodSxwKSl9O2ZvcihlLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihjKXt2YXIgdT1jPT09dD8wOk51bWJlci5QT1NJVElWRV9JTkZJTklUWTtpW2NdPXtkaXN0YW5jZTp1fSxvLmFkZChjLHUpfSk7by5zaXplKCk+MCYmKGE9by5yZW1vdmVNaW4oKSxzPWlbYV0scy5kaXN0YW5jZSE9PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7KW4oYSkuZm9yRWFjaChsKTtyZXR1cm4gaX19KTt2YXIgS25lPUgoKFdabiwkbmUpPT57dmFyIHJucj1mbHQoKSxubnI9VGwoKTskbmUuZXhwb3J0cz1pbnI7ZnVuY3Rpb24gaW5yKGUsdCxyKXtyZXR1cm4gbm5yLnRyYW5zZm9ybShlLm5vZGVzKCksZnVuY3Rpb24obixpKXtuW2ldPXJucihlLGksdCxyKX0se30pfX0pO3ZhciBwbHQ9SCgoWVpuLEpuZSk9Pnt2YXIgWm5lPVRsKCk7Sm5lLmV4cG9ydHM9b25yO2Z1bmN0aW9uIG9ucihlKXt2YXIgdD0wLHI9W10sbj17fSxpPVtdO2Z1bmN0aW9uIG8oYSl7dmFyIHM9blthXT17b25TdGFjazohMCxsb3dsaW5rOnQsaW5kZXg6dCsrfTtpZihyLnB1c2goYSksZS5zdWNjZXNzb3JzKGEpLmZvckVhY2goZnVuY3Rpb24odSl7Wm5lLmhhcyhuLHUpP25bdV0ub25TdGFjayYmKHMubG93bGluaz1NYXRoLm1pbihzLmxvd2xpbmssblt1XS5pbmRleCkpOihvKHUpLHMubG93bGluaz1NYXRoLm1pbihzLmxvd2xpbmssblt1XS5sb3dsaW5rKSl9KSxzLmxvd2xpbms9PT1zLmluZGV4KXt2YXIgbD1bXSxjO2RvIGM9ci5wb3AoKSxuW2NdLm9uU3RhY2s9ITEsbC5wdXNoKGMpO3doaWxlKGEhPT1jKTtpLnB1c2gobCl9fXJldHVybiBlLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihhKXtabmUuaGFzKG4sYSl8fG8oYSl9KSxpfX0pO3ZhciB0aWU9SCgoalpuLFFuZSk9Pnt2YXIgYW5yPVRsKCksc25yPXBsdCgpO1FuZS5leHBvcnRzPWxucjtmdW5jdGlvbiBsbnIoZSl7cmV0dXJuIGFuci5maWx0ZXIoc25yKGUpLGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aD4xfHx0Lmxlbmd0aD09PTEmJmUuaGFzRWRnZSh0WzBdLHRbMF0pfSl9fSk7dmFyIHJpZT1IKChYWm4sZWllKT0+e3ZhciBjbnI9VGwoKTtlaWUuZXhwb3J0cz1obnI7dmFyIHVucj1jbnIuY29uc3RhbnQoMSk7ZnVuY3Rpb24gaG5yKGUsdCxyKXtyZXR1cm4gZm5yKGUsdHx8dW5yLHJ8fGZ1bmN0aW9uKG4pe3JldHVybiBlLm91dEVkZ2VzKG4pfSl9ZnVuY3Rpb24gZm5yKGUsdCxyKXt2YXIgbj17fSxpPWUubm9kZXMoKTtyZXR1cm4gaS5mb3JFYWNoKGZ1bmN0aW9uKG8pe25bb109e30sbltvXVtvXT17ZGlzdGFuY2U6MH0saS5mb3JFYWNoKGZ1bmN0aW9uKGEpe28hPT1hJiYobltvXVthXT17ZGlzdGFuY2U6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZfSl9KSxyKG8pLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIHM9YS52PT09bz9hLnc6YS52LGw9dChhKTtuW29dW3NdPXtkaXN0YW5jZTpsLHByZWRlY2Vzc29yOm99fSl9KSxpLmZvckVhY2goZnVuY3Rpb24obyl7dmFyIGE9bltvXTtpLmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIGw9bltzXTtpLmZvckVhY2goZnVuY3Rpb24oYyl7dmFyIHU9bFtvXSxoPWFbY10sZj1sW2NdLHA9dS5kaXN0YW5jZStoLmRpc3RhbmNlO3A8Zi5kaXN0YW5jZSYmKGYuZGlzdGFuY2U9cCxmLnByZWRlY2Vzc29yPWgucHJlZGVjZXNzb3IpfSl9KX0pLG59fSk7dmFyIGRsdD1IKCgkWm4saWllKT0+e3ZhciBZND1UbCgpO2lpZS5leHBvcnRzPW5pZTtuaWUuQ3ljbGVFeGNlcHRpb249aUg7ZnVuY3Rpb24gbmllKGUpe3ZhciB0PXt9LHI9e30sbj1bXTtmdW5jdGlvbiBpKG8pe2lmKFk0LmhhcyhyLG8pKXRocm93IG5ldyBpSDtZNC5oYXModCxvKXx8KHJbb109ITAsdFtvXT0hMCxZNC5lYWNoKGUucHJlZGVjZXNzb3JzKG8pLGkpLGRlbGV0ZSByW29dLG4ucHVzaChvKSl9aWYoWTQuZWFjaChlLnNpbmtzKCksaSksWTQuc2l6ZSh0KSE9PWUubm9kZUNvdW50KCkpdGhyb3cgbmV3IGlIO3JldHVybiBufWZ1bmN0aW9uIGlIKCl7fWlILnByb3RvdHlwZT1uZXcgRXJyb3J9KTt2YXIgc2llPUgoKEtabixhaWUpPT57dmFyIG9pZT1kbHQoKTthaWUuZXhwb3J0cz1wbnI7ZnVuY3Rpb24gcG5yKGUpe3RyeXtvaWUoZSl9Y2F0Y2godCl7aWYodCBpbnN0YW5jZW9mIG9pZS5DeWNsZUV4Y2VwdGlvbilyZXR1cm4hMTt0aHJvdyB0fXJldHVybiEwfX0pO3ZhciBtbHQ9SCgoWlpuLGNpZSk9Pnt2YXIgb0g9VGwoKTtjaWUuZXhwb3J0cz1kbnI7ZnVuY3Rpb24gZG5yKGUsdCxyKXtvSC5pc0FycmF5KHQpfHwodD1bdF0pO3ZhciBuPShlLmlzRGlyZWN0ZWQoKT9lLnN1Y2Nlc3NvcnM6ZS5uZWlnaGJvcnMpLmJpbmQoZSksaT1bXSxvPXt9O3JldHVybiBvSC5lYWNoKHQsZnVuY3Rpb24oYSl7aWYoIWUuaGFzTm9kZShhKSl0aHJvdyBuZXcgRXJyb3IoIkdyYXBoIGRvZXMgbm90IGhhdmUgbm9kZTogIithKTtsaWUoZSxhLHI9PT0icG9zdCIsbyxuLGkpfSksaX1mdW5jdGlvbiBsaWUoZSx0LHIsbixpLG8pe29ILmhhcyhuLHQpfHwoblt0XT0hMCxyfHxvLnB1c2godCksb0guZWFjaChpKHQpLGZ1bmN0aW9uKGEpe2xpZShlLGEscixuLGksbyl9KSxyJiZvLnB1c2godCkpfX0pO3ZhciBoaWU9SCgoSlpuLHVpZSk9Pnt2YXIgbW5yPW1sdCgpO3VpZS5leHBvcnRzPWducjtmdW5jdGlvbiBnbnIoZSx0KXtyZXR1cm4gbW5yKGUsdCwicG9zdCIpfX0pO3ZhciBwaWU9SCgoUVpuLGZpZSk9Pnt2YXIgX25yPW1sdCgpO2ZpZS5leHBvcnRzPXlucjtmdW5jdGlvbiB5bnIoZSx0KXtyZXR1cm4gX25yKGUsdCwicHJlIil9fSk7dmFyIGdpZT1IKCh0Sm4sbWllKT0+e3ZhciBkaWU9VGwoKSx2bnI9ckgoKSx4bnI9aGx0KCk7bWllLmV4cG9ydHM9Ym5yO2Z1bmN0aW9uIGJucihlLHQpe3ZhciByPW5ldyB2bnIsbj17fSxpPW5ldyB4bnIsbztmdW5jdGlvbiBhKGwpe3ZhciBjPWwudj09PW8/bC53Omwudix1PWkucHJpb3JpdHkoYyk7aWYodSE9PXZvaWQgMCl7dmFyIGg9dChsKTtoPHUmJihuW2NdPW8saS5kZWNyZWFzZShjLGgpKX19aWYoZS5ub2RlQ291bnQoKT09PTApcmV0dXJuIHI7ZGllLmVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKGwpe2kuYWRkKGwsTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSxyLnNldE5vZGUobCl9KSxpLmRlY3JlYXNlKGUubm9kZXMoKVswXSwwKTtmb3IodmFyIHM9ITE7aS5zaXplKCk+MDspe2lmKG89aS5yZW1vdmVNaW4oKSxkaWUuaGFzKG4sbykpci5zZXRFZGdlKG8sbltvXSk7ZWxzZXtpZihzKXRocm93IG5ldyBFcnJvcigiSW5wdXQgZ3JhcGggaXMgbm90IGNvbm5lY3RlZDogIitlKTtzPSEwfWUubm9kZUVkZ2VzKG8pLmZvckVhY2goYSl9cmV0dXJuIHJ9fSk7dmFyIHlpZT1IKChlSm4sX2llKT0+e19pZS5leHBvcnRzPXtjb21wb25lbnRzOlduZSgpLGRpamtzdHJhOmZsdCgpLGRpamtzdHJhQWxsOktuZSgpLGZpbmRDeWNsZXM6dGllKCksZmxveWRXYXJzaGFsbDpyaWUoKSxpc0FjeWNsaWM6c2llKCkscG9zdG9yZGVyOmhpZSgpLHByZW9yZGVyOnBpZSgpLHByaW06Z2llKCksdGFyamFuOnBsdCgpLHRvcHNvcnQ6ZGx0KCl9fSk7dmFyIGJpZT1IKChySm4seGllKT0+e3ZhciB2aWU9Vm5lKCk7eGllLmV4cG9ydHM9e0dyYXBoOnZpZS5HcmFwaCxqc29uOnFuZSgpLGFsZzp5aWUoKSx2ZXJzaW9uOnZpZS52ZXJzaW9ufX0pO3ZhciBVYz1IKChuSm4sd2llKT0+e3ZhciBhSDtpZih0eXBlb2YgRXg9PSJmdW5jdGlvbiIpdHJ5e2FIPWJpZSgpfWNhdGNoKGUpe31hSHx8KGFIPXdpbmRvdy5ncmFwaGxpYik7d2llLmV4cG9ydHM9YUh9KTt2YXIgTWllPUgoKG9KbixTaWUpPT57dmFyIHducj1Sc3QoKSxTbnI9MSxNbnI9NDtmdW5jdGlvbiBFbnIoZSl7cmV0dXJuIHducihlLFNucnxNbnIpfVNpZS5leHBvcnRzPUVucn0pO3ZhciBqND1IKChhSm4sRWllKT0+e3ZhciBUbnI9anYoKSxDbnI9SGYoKSxBbnI9UjQoKSxQbnI9RWwoKTtmdW5jdGlvbiBJbnIoZSx0LHIpe2lmKCFQbnIocikpcmV0dXJuITE7dmFyIG49dHlwZW9mIHQ7cmV0dXJuKG49PSJudW1iZXIiP0NucihyKSYmQW5yKHQsci5sZW5ndGgpOm49PSJzdHJpbmciJiZ0IGluIHIpP1RucihyW3RdLGUpOiExfUVpZS5leHBvcnRzPUlucn0pO3ZhciBBaWU9SCgoc0puLENpZSk9Pnt2YXIgTG5yPUc0KCksa25yPWp2KCksUm5yPWo0KCksTm5yPXUwKCksVGllPU9iamVjdC5wcm90b3R5cGUsRG5yPVRpZS5oYXNPd25Qcm9wZXJ0eSxPbnI9TG5yKGZ1bmN0aW9uKGUsdCl7ZT1PYmplY3QoZSk7dmFyIHI9LTEsbj10Lmxlbmd0aCxpPW4+Mj90WzJdOnZvaWQgMDtmb3IoaSYmUm5yKHRbMF0sdFsxXSxpKSYmKG49MSk7KytyPG47KWZvcih2YXIgbz10W3JdLGE9Tm5yKG8pLHM9LTEsbD1hLmxlbmd0aDsrK3M8bDspe3ZhciBjPWFbc10sdT1lW2NdOyh1PT09dm9pZCAwfHxrbnIodSxUaWVbY10pJiYhRG5yLmNhbGwoZSxjKSkmJihlW2NdPW9bY10pfXJldHVybiBlfSk7Q2llLmV4cG9ydHM9T25yfSk7dmFyIElpZT1IKChsSm4sUGllKT0+e3ZhciB6bnI9VmYoKSxGbnI9SGYoKSxCbnI9UGQoKTtmdW5jdGlvbiBIbnIoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXt2YXIgaT1PYmplY3QodCk7aWYoIUZucih0KSl7dmFyIG89em5yKHIsMyk7dD1CbnIodCkscj1mdW5jdGlvbihzKXtyZXR1cm4gbyhpW3NdLHMsaSl9fXZhciBhPWUodCxyLG4pO3JldHVybiBhPi0xP2lbbz90W2FdOmFdOnZvaWQgMH19UGllLmV4cG9ydHM9SG5yfSk7dmFyIGtpZT1IKChjSm4sTGllKT0+e3ZhciBWbnI9L1xzLztmdW5jdGlvbiBVbnIoZSl7Zm9yKHZhciB0PWUubGVuZ3RoO3QtLSYmVm5yLnRlc3QoZS5jaGFyQXQodCkpOyk7cmV0dXJuIHR9TGllLmV4cG9ydHM9VW5yfSk7dmFyIE5pZT1IKCh1Sm4sUmllKT0+e3ZhciBxbnI9a2llKCksR25yPS9eXHMrLztmdW5jdGlvbiBXbnIoZSl7cmV0dXJuIGUmJmUuc2xpY2UoMCxxbnIoZSkrMSkucmVwbGFjZShHbnIsIiIpfVJpZS5leHBvcnRzPVducn0pO3ZhciBGaWU9SCgoaEpuLHppZSk9Pnt2YXIgWW5yPU5pZSgpLERpZT1FbCgpLGpucj1KdigpLE9pZT0wLzAsWG5yPS9eWy0rXTB4WzAtOWEtZl0rJC9pLCRucj0vXjBiWzAxXSskL2ksS25yPS9eMG9bMC03XSskL2ksWm5yPXBhcnNlSW50O2Z1bmN0aW9uIEpucihlKXtpZih0eXBlb2YgZT09Im51bWJlciIpcmV0dXJuIGU7aWYoam5yKGUpKXJldHVybiBPaWU7aWYoRGllKGUpKXt2YXIgdD10eXBlb2YgZS52YWx1ZU9mPT0iZnVuY3Rpb24iP2UudmFsdWVPZigpOmU7ZT1EaWUodCk/dCsiIjp0fWlmKHR5cGVvZiBlIT0ic3RyaW5nIilyZXR1cm4gZT09PTA/ZTorZTtlPVlucihlKTt2YXIgcj0kbnIudGVzdChlKTtyZXR1cm4gcnx8S25yLnRlc3QoZSk/Wm5yKGUuc2xpY2UoMikscj8yOjgpOlhuci50ZXN0KGUpP09pZTorZX16aWUuZXhwb3J0cz1KbnJ9KTt2YXIgZ2x0PUgoKGZKbixIaWUpPT57dmFyIFFucj1GaWUoKSxCaWU9MS8wLHRpcj0xNzk3NjkzMTM0ODYyMzE1N2UyOTI7ZnVuY3Rpb24gZWlyKGUpe2lmKCFlKXJldHVybiBlPT09MD9lOjA7aWYoZT1RbnIoZSksZT09PUJpZXx8ZT09PS1CaWUpe3ZhciB0PWU8MD8tMToxO3JldHVybiB0KnRpcn1yZXR1cm4gZT09PWU/ZTowfUhpZS5leHBvcnRzPWVpcn0pO3ZhciBVaWU9SCgocEpuLFZpZSk9Pnt2YXIgcmlyPWdsdCgpO2Z1bmN0aW9uIG5pcihlKXt2YXIgdD1yaXIoZSkscj10JTE7cmV0dXJuIHQ9PT10P3I/dC1yOnQ6MH1WaWUuZXhwb3J0cz1uaXJ9KTt2YXIgR2llPUgoKGRKbixxaWUpPT57dmFyIGlpcj1hbHQoKSxvaXI9VmYoKSxhaXI9VWllKCksc2lyPU1hdGgubWF4O2Z1bmN0aW9uIGxpcihlLHQscil7dmFyIG49ZT09bnVsbD8wOmUubGVuZ3RoO2lmKCFuKXJldHVybi0xO3ZhciBpPXI9PW51bGw/MDphaXIocik7cmV0dXJuIGk8MCYmKGk9c2lyKG4raSwwKSksaWlyKGUsb2lyKHQsMyksaSl9cWllLmV4cG9ydHM9bGlyfSk7dmFyIFlpZT1IKChtSm4sV2llKT0+e3ZhciBjaXI9SWllKCksdWlyPUdpZSgpLGhpcj1jaXIodWlyKTtXaWUuZXhwb3J0cz1oaXJ9KTt2YXIgX2x0PUgoKGdKbixqaWUpPT57dmFyIGZpcj10SCgpO2Z1bmN0aW9uIHBpcihlKXt2YXIgdD1lPT1udWxsPzA6ZS5sZW5ndGg7cmV0dXJuIHQ/ZmlyKGUsMSk6W119amllLmV4cG9ydHM9cGlyfSk7dmFyICRpZT1IKChfSm4sWGllKT0+e3ZhciBkaXI9WEIoKSxtaXI9TnN0KCksZ2lyPXUwKCk7ZnVuY3Rpb24gX2lyKGUsdCl7cmV0dXJuIGU9PW51bGw/ZTpkaXIoZSxtaXIodCksZ2lyKX1YaWUuZXhwb3J0cz1faXJ9KTt2YXIgWmllPUgoKHlKbixLaWUpPT57ZnVuY3Rpb24geWlyKGUpe3ZhciB0PWU9PW51bGw/MDplLmxlbmd0aDtyZXR1cm4gdD9lW3QtMV06dm9pZCAwfUtpZS5leHBvcnRzPXlpcn0pO3ZhciBRaWU9SCgodkpuLEppZSk9Pnt2YXIgdmlyPUk0KCkseGlyPSRCKCksYmlyPVZmKCk7ZnVuY3Rpb24gd2lyKGUsdCl7dmFyIHI9e307cmV0dXJuIHQ9YmlyKHQsMykseGlyKGUsZnVuY3Rpb24obixpLG8pe3ZpcihyLGksdChuLGksbykpfSkscn1KaWUuZXhwb3J0cz13aXJ9KTt2YXIgc0g9SCgoeEpuLHRvZSk9Pnt2YXIgU2lyPUp2KCk7ZnVuY3Rpb24gTWlyKGUsdCxyKXtmb3IodmFyIG49LTEsaT1lLmxlbmd0aDsrK248aTspe3ZhciBvPWVbbl0sYT10KG8pO2lmKGEhPW51bGwmJihzPT09dm9pZCAwP2E9PT1hJiYhU2lyKGEpOnIoYSxzKSkpdmFyIHM9YSxsPW99cmV0dXJuIGx9dG9lLmV4cG9ydHM9TWlyfSk7dmFyIHJvZT1IKChiSm4sZW9lKT0+e2Z1bmN0aW9uIEVpcihlLHQpe3JldHVybiBlPnR9ZW9lLmV4cG9ydHM9RWlyfSk7dmFyIGlvZT1IKCh3Sm4sbm9lKT0+e3ZhciBUaXI9c0goKSxDaXI9cm9lKCksQWlyPWgwKCk7ZnVuY3Rpb24gUGlyKGUpe3JldHVybiBlJiZlLmxlbmd0aD9UaXIoZSxBaXIsQ2lyKTp2b2lkIDB9bm9lLmV4cG9ydHM9UGlyfSk7dmFyIHlsdD1IKChTSm4sb29lKT0+e3ZhciBJaXI9STQoKSxMaXI9anYoKTtmdW5jdGlvbiBraXIoZSx0LHIpeyhyIT09dm9pZCAwJiYhTGlyKGVbdF0scil8fHI9PT12b2lkIDAmJiEodCBpbiBlKSkmJklpcihlLHQscil9b29lLmV4cG9ydHM9a2lyfSk7dmFyIGxvZT1IKChNSm4sc29lKT0+e3ZhciBSaXI9bDAoKSxOaXI9QjQoKSxEaXI9WXUoKSxPaXI9IltvYmplY3QgT2JqZWN0XSIsemlyPUZ1bmN0aW9uLnByb3RvdHlwZSxGaXI9T2JqZWN0LnByb3RvdHlwZSxhb2U9emlyLnRvU3RyaW5nLEJpcj1GaXIuaGFzT3duUHJvcGVydHksSGlyPWFvZS5jYWxsKE9iamVjdCk7ZnVuY3Rpb24gVmlyKGUpe2lmKCFEaXIoZSl8fFJpcihlKSE9T2lyKXJldHVybiExO3ZhciB0PU5pcihlKTtpZih0PT09bnVsbClyZXR1cm4hMDt2YXIgcj1CaXIuY2FsbCh0LCJjb25zdHJ1Y3RvciIpJiZ0LmNvbnN0cnVjdG9yO3JldHVybiB0eXBlb2Ygcj09ImZ1bmN0aW9uIiYmciBpbnN0YW5jZW9mIHImJmFvZS5jYWxsKHIpPT1IaXJ9c29lLmV4cG9ydHM9VmlyfSk7dmFyIHZsdD1IKChFSm4sY29lKT0+e2Z1bmN0aW9uIFVpcihlLHQpe2lmKCEodD09PSJjb25zdHJ1Y3RvciImJnR5cGVvZiBlW3RdPT0iZnVuY3Rpb24iKSYmdCE9Il9fcHJvdG9fXyIpcmV0dXJuIGVbdF19Y29lLmV4cG9ydHM9VWlyfSk7dmFyIGhvZT1IKChUSm4sdW9lKT0+e3ZhciBxaXI9VVMoKSxHaXI9dTAoKTtmdW5jdGlvbiBXaXIoZSl7cmV0dXJuIHFpcihlLEdpcihlKSl9dW9lLmV4cG9ydHM9V2lyfSk7dmFyIF9vZT1IKChDSm4sZ29lKT0+e3ZhciBmb2U9eWx0KCksWWlyPWdzdCgpLGppcj1Jc3QoKSxYaXI9X3N0KCksJGlyPWtzdCgpLHBvZT1xUygpLGRvZT1UaSgpLEtpcj1sbHQoKSxaaXI9JHYoKSxKaXI9RlMoKSxRaXI9RWwoKSx0b3I9bG9lKCksZW9yPVlTKCksbW9lPXZsdCgpLHJvcj1ob2UoKTtmdW5jdGlvbiBub3IoZSx0LHIsbixpLG8sYSl7dmFyIHM9bW9lKGUsciksbD1tb2UodCxyKSxjPWEuZ2V0KGwpO2lmKGMpe2ZvZShlLHIsYyk7cmV0dXJufXZhciB1PW8/byhzLGwscisiIixlLHQsYSk6dm9pZCAwLGg9dT09PXZvaWQgMDtpZihoKXt2YXIgZj1kb2UobCkscD0hZiYmWmlyKGwpLGQ9IWYmJiFwJiZlb3IobCk7dT1sLGZ8fHB8fGQ/ZG9lKHMpP3U9czpLaXIocyk/dT1YaXIocyk6cD8oaD0hMSx1PVlpcihsLCEwKSk6ZD8oaD0hMSx1PWppcihsLCEwKSk6dT1bXTp0b3IobCl8fHBvZShsKT8odT1zLHBvZShzKT91PXJvcihzKTooIVFpcihzKXx8SmlyKHMpKSYmKHU9JGlyKGwpKSk6aD0hMX1oJiYoYS5zZXQobCx1KSxpKHUsbCxuLG8sYSksYS5kZWxldGUobCkpLGZvZShlLHIsdSl9Z29lLmV4cG9ydHM9bm9yfSk7dmFyIHhvZT1IKChBSm4sdm9lKT0+e3ZhciBpb3I9UDQoKSxvb3I9eWx0KCksYW9yPVhCKCksc29yPV9vZSgpLGxvcj1FbCgpLGNvcj11MCgpLHVvcj12bHQoKTtmdW5jdGlvbiB5b2UoZSx0LHIsbixpKXtlIT09dCYmYW9yKHQsZnVuY3Rpb24obyxhKXtpZihpfHwoaT1uZXcgaW9yKSxsb3Iobykpc29yKGUsdCxhLHIseW9lLG4saSk7ZWxzZXt2YXIgcz1uP24odW9yKGUsYSksbyxhKyIiLGUsdCxpKTp2b2lkIDA7cz09PXZvaWQgMCYmKHM9byksb29yKGUsYSxzKX19LGNvcil9dm9lLmV4cG9ydHM9eW9lfSk7dmFyIHdvZT1IKChQSm4sYm9lKT0+e3ZhciBob3I9RzQoKSxwb3I9ajQoKTtmdW5jdGlvbiBkb3IoZSl7cmV0dXJuIGhvcihmdW5jdGlvbih0LHIpe3ZhciBuPS0xLGk9ci5sZW5ndGgsbz1pPjE/cltpLTFdOnZvaWQgMCxhPWk+Mj9yWzJdOnZvaWQgMDtmb3Iobz1lLmxlbmd0aD4zJiZ0eXBlb2Ygbz09ImZ1bmN0aW9uIj8oaS0tLG8pOnZvaWQgMCxhJiZwb3IoclswXSxyWzFdLGEpJiYobz1pPDM/dm9pZCAwOm8saT0xKSx0PU9iamVjdCh0KTsrK248aTspe3ZhciBzPXJbbl07cyYmZSh0LHMsbixvKX1yZXR1cm4gdH0pfWJvZS5leHBvcnRzPWRvcn0pO3ZhciBNb2U9SCgoSUpuLFNvZSk9Pnt2YXIgbW9yPXhvZSgpLGdvcj13b2UoKSxfb3I9Z29yKGZ1bmN0aW9uKGUsdCxyKXttb3IoZSx0LHIpfSk7U29lLmV4cG9ydHM9X29yfSk7dmFyIHhsdD1IKChMSm4sRW9lKT0+e2Z1bmN0aW9uIHlvcihlLHQpe3JldHVybiBlPHR9RW9lLmV4cG9ydHM9eW9yfSk7dmFyIENvZT1IKChrSm4sVG9lKT0+e3ZhciB2b3I9c0goKSx4b3I9eGx0KCksYm9yPWgwKCk7ZnVuY3Rpb24gd29yKGUpe3JldHVybiBlJiZlLmxlbmd0aD92b3IoZSxib3IseG9yKTp2b2lkIDB9VG9lLmV4cG9ydHM9d29yfSk7dmFyIFBvZT1IKChSSm4sQW9lKT0+e3ZhciBTb3I9c0goKSxNb3I9VmYoKSxFb3I9eGx0KCk7ZnVuY3Rpb24gVG9yKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP1NvcihlLE1vcih0LDIpLEVvcik6dm9pZCAwfUFvZS5leHBvcnRzPVRvcn0pO3ZhciBMb2U9SCgoTkpuLElvZSk9Pnt2YXIgQ29yPUhjKCksQW9yPWZ1bmN0aW9uKCl7cmV0dXJuIENvci5EYXRlLm5vdygpfTtJb2UuZXhwb3J0cz1Bb3J9KTt2YXIgTm9lPUgoKERKbixSb2UpPT57dmFyIFBvcj1MNCgpLElvcj1VNCgpLExvcj1SNCgpLGtvZT1FbCgpLGtvcj0kUygpO2Z1bmN0aW9uIFJvcihlLHQscixuKXtpZigha29lKGUpKXJldHVybiBlO3Q9SW9yKHQsZSk7Zm9yKHZhciBpPS0xLG89dC5sZW5ndGgsYT1vLTEscz1lO3MhPW51bGwmJisraTxvOyl7dmFyIGw9a29yKHRbaV0pLGM9cjtpZihsPT09Il9fcHJvdG9fXyJ8fGw9PT0iY29uc3RydWN0b3IifHxsPT09InByb3RvdHlwZSIpcmV0dXJuIGU7aWYoaSE9YSl7dmFyIHU9c1tsXTtjPW4/bih1LGwscyk6dm9pZCAwLGM9PT12b2lkIDAmJihjPWtvZSh1KT91Okxvcih0W2krMV0pP1tdOnt9KX1Qb3IocyxsLGMpLHM9c1tsXX1yZXR1cm4gZX1Sb2UuZXhwb3J0cz1Sb3J9KTt2YXIgT29lPUgoKE9KbixEb2UpPT57dmFyIE5vcj1xNCgpLERvcj1Ob2UoKSxPb3I9VTQoKTtmdW5jdGlvbiB6b3IoZSx0LHIpe2Zvcih2YXIgbj0tMSxpPXQubGVuZ3RoLG89e307KytuPGk7KXt2YXIgYT10W25dLHM9Tm9yKGUsYSk7cihzLGEpJiZEb3IobyxPb3IoYSxlKSxzKX1yZXR1cm4gb31Eb2UuZXhwb3J0cz16b3J9KTt2YXIgRm9lPUgoKHpKbix6b2UpPT57dmFyIEZvcj1Pb2UoKSxCb3I9WHN0KCk7ZnVuY3Rpb24gSG9yKGUsdCl7cmV0dXJuIEZvcihlLHQsZnVuY3Rpb24ocixuKXtyZXR1cm4gQm9yKGUsbil9KX16b2UuZXhwb3J0cz1Ib3J9KTt2YXIgSG9lPUgoKEZKbixCb2UpPT57dmFyIFZvcj1fbHQoKSxVb3I9aWx0KCkscW9yPW9sdCgpO2Z1bmN0aW9uIEdvcihlKXtyZXR1cm4gcW9yKFVvcihlLHZvaWQgMCxWb3IpLGUrIiIpfUJvZS5leHBvcnRzPUdvcn0pO3ZhciBVb2U9SCgoQkpuLFZvZSk9Pnt2YXIgV29yPUZvZSgpLFlvcj1Ib2UoKSxqb3I9WW9yKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PW51bGw/e306V29yKGUsdCl9KTtWb2UuZXhwb3J0cz1qb3J9KTt2YXIgR29lPUgoKEhKbixxb2UpPT57dmFyIFhvcj1NYXRoLmNlaWwsJG9yPU1hdGgubWF4O2Z1bmN0aW9uIEtvcihlLHQscixuKXtmb3IodmFyIGk9LTEsbz0kb3IoWG9yKCh0LWUpLyhyfHwxKSksMCksYT1BcnJheShvKTtvLS07KWFbbj9vOisraV09ZSxlKz1yO3JldHVybiBhfXFvZS5leHBvcnRzPUtvcn0pO3ZhciBZb2U9SCgoVkpuLFdvZSk9Pnt2YXIgWm9yPUdvZSgpLEpvcj1qNCgpLGJsdD1nbHQoKTtmdW5jdGlvbiBRb3IoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXtyZXR1cm4gbiYmdHlwZW9mIG4hPSJudW1iZXIiJiZKb3IodCxyLG4pJiYocj1uPXZvaWQgMCksdD1ibHQodCkscj09PXZvaWQgMD8ocj10LHQ9MCk6cj1ibHQociksbj1uPT09dm9pZCAwP3Q8cj8xOi0xOmJsdChuKSxab3IodCxyLG4sZSl9fVdvZS5leHBvcnRzPVFvcn0pO3ZhciBYb2U9SCgoVUpuLGpvZSk9Pnt2YXIgdGFyPVlvZSgpLGVhcj10YXIoKTtqb2UuZXhwb3J0cz1lYXJ9KTt2YXIgS29lPUgoKHFKbiwkb2UpPT57ZnVuY3Rpb24gcmFyKGUsdCl7dmFyIHI9ZS5sZW5ndGg7Zm9yKGUuc29ydCh0KTtyLS07KWVbcl09ZVtyXS52YWx1ZTtyZXR1cm4gZX0kb2UuZXhwb3J0cz1yYXJ9KTt2YXIgUW9lPUgoKEdKbixKb2UpPT57dmFyIFpvZT1KdigpO2Z1bmN0aW9uIG5hcihlLHQpe2lmKGUhPT10KXt2YXIgcj1lIT09dm9pZCAwLG49ZT09PW51bGwsaT1lPT09ZSxvPVpvZShlKSxhPXQhPT12b2lkIDAscz10PT09bnVsbCxsPXQ9PT10LGM9Wm9lKHQpO2lmKCFzJiYhYyYmIW8mJmU+dHx8byYmYSYmbCYmIXMmJiFjfHxuJiZhJiZsfHwhciYmbHx8IWkpcmV0dXJuIDE7aWYoIW4mJiFvJiYhYyYmZTx0fHxjJiZyJiZpJiYhbiYmIW98fHMmJnImJml8fCFhJiZpfHwhbClyZXR1cm4tMX1yZXR1cm4gMH1Kb2UuZXhwb3J0cz1uYXJ9KTt2YXIgZWFlPUgoKFdKbix0YWUpPT57dmFyIGlhcj1Rb2UoKTtmdW5jdGlvbiBvYXIoZSx0LHIpe2Zvcih2YXIgbj0tMSxpPWUuY3JpdGVyaWEsbz10LmNyaXRlcmlhLGE9aS5sZW5ndGgscz1yLmxlbmd0aDsrK248YTspe3ZhciBsPWlhcihpW25dLG9bbl0pO2lmKGwpe2lmKG4+PXMpcmV0dXJuIGw7dmFyIGM9cltuXTtyZXR1cm4gbCooYz09ImRlc2MiPy0xOjEpfX1yZXR1cm4gZS5pbmRleC10LmluZGV4fXRhZS5leHBvcnRzPW9hcn0pO3ZhciBuYWU9SCgoWUpuLHJhZSk9Pnt2YXIgd2x0PVY0KCksYWFyPXE0KCksc2FyPVZmKCksbGFyPVFzdCgpLGNhcj1Lb2UoKSx1YXI9TjQoKSxoYXI9ZWFlKCksZmFyPWgwKCkscGFyPVRpKCk7ZnVuY3Rpb24gZGFyKGUsdCxyKXt0Lmxlbmd0aD90PXdsdCh0LGZ1bmN0aW9uKG8pe3JldHVybiBwYXIobyk/ZnVuY3Rpb24oYSl7cmV0dXJuIGFhcihhLG8ubGVuZ3RoPT09MT9vWzBdOm8pfTpvfSk6dD1bZmFyXTt2YXIgbj0tMTt0PXdsdCh0LHVhcihzYXIpKTt2YXIgaT1sYXIoZSxmdW5jdGlvbihvLGEscyl7dmFyIGw9d2x0KHQsZnVuY3Rpb24oYyl7cmV0dXJuIGMobyl9KTtyZXR1cm57Y3JpdGVyaWE6bCxpbmRleDorK24sdmFsdWU6b319KTtyZXR1cm4gY2FyKGksZnVuY3Rpb24obyxhKXtyZXR1cm4gaGFyKG8sYSxyKX0pfXJhZS5leHBvcnRzPWRhcn0pO3ZhciBhYWU9SCgoakpuLG9hZSk9Pnt2YXIgbWFyPXRIKCksZ2FyPW5hZSgpLF9hcj1HNCgpLGlhZT1qNCgpLHlhcj1fYXIoZnVuY3Rpb24oZSx0KXtpZihlPT1udWxsKXJldHVybltdO3ZhciByPXQubGVuZ3RoO3JldHVybiByPjEmJmlhZShlLHRbMF0sdFsxXSk/dD1bXTpyPjImJmlhZSh0WzBdLHRbMV0sdFsyXSkmJih0PVt0WzBdXSksZ2FyKGUsbWFyKHQsMSksW10pfSk7b2FlLmV4cG9ydHM9eWFyfSk7dmFyIGxhZT1IKChYSm4sc2FlKT0+e3ZhciB4YXI9WXN0KCksYmFyPTA7ZnVuY3Rpb24gd2FyKGUpe3ZhciB0PSsrYmFyO3JldHVybiB4YXIoZSkrdH1zYWUuZXhwb3J0cz13YXJ9KTt2YXIgdWFlPUgoKCRKbixjYWUpPT57ZnVuY3Rpb24gU2FyKGUsdCxyKXtmb3IodmFyIG49LTEsaT1lLmxlbmd0aCxvPXQubGVuZ3RoLGE9e307KytuPGk7KXt2YXIgcz1uPG8/dFtuXTp2b2lkIDA7cihhLGVbbl0scyl9cmV0dXJuIGF9Y2FlLmV4cG9ydHM9U2FyfSk7dmFyIGZhZT1IKChLSm4saGFlKT0+e3ZhciBNYXI9TDQoKSxFYXI9dWFlKCk7ZnVuY3Rpb24gVGFyKGUsdCl7cmV0dXJuIEVhcihlfHxbXSx0fHxbXSxNYXIpfWhhZS5leHBvcnRzPVRhcn0pO3ZhciBxbj1IKChaSm4scGFlKT0+e3ZhciBsSDtpZih0eXBlb2YgRXg9PSJmdW5jdGlvbiIpdHJ5e2xIPXtjbG9uZURlZXA6TWllKCksY29uc3RhbnQ6akIoKSxkZWZhdWx0czpBaWUoKSxlYWNoOk9zdCgpLGZpbHRlcjpLc3QoKSxmaW5kOllpZSgpLGZsYXR0ZW46X2x0KCksZm9yRWFjaDpEc3QoKSxmb3JJbjokaWUoKSxoYXM6WnN0KCksaXNVbmRlZmluZWQ6SnN0KCksbGFzdDpaaWUoKSxtYXA6dGx0KCksbWFwVmFsdWVzOlFpZSgpLG1heDppb2UoKSxtZXJnZTpNb2UoKSxtaW46Q29lKCksbWluQnk6UG9lKCksbm93OkxvZSgpLHBpY2s6VW9lKCkscmFuZ2U6WG9lKCkscmVkdWNlOmVsdCgpLHNvcnRCeTphYWUoKSx1bmlxdWVJZDpsYWUoKSx2YWx1ZXM6Y2x0KCksemlwT2JqZWN0OmZhZSgpfX1jYXRjaChlKXt9bEh8fChsSD13aW5kb3cuXyk7cGFlLmV4cG9ydHM9bEh9KTt2YXIgZ2FlPUgoKFFKbixtYWUpPT57bWFlLmV4cG9ydHM9Y0g7ZnVuY3Rpb24gY0goKXt2YXIgZT17fTtlLl9uZXh0PWUuX3ByZXY9ZSx0aGlzLl9zZW50aW5lbD1lfWNILnByb3RvdHlwZS5kZXF1ZXVlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fc2VudGluZWwsdD1lLl9wcmV2O2lmKHQhPT1lKXJldHVybiBkYWUodCksdH07Y0gucHJvdG90eXBlLmVucXVldWU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fc2VudGluZWw7ZS5fcHJldiYmZS5fbmV4dCYmZGFlKGUpLGUuX25leHQ9dC5fbmV4dCx0Ll9uZXh0Ll9wcmV2PWUsdC5fbmV4dD1lLGUuX3ByZXY9dH07Y0gucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9dGhpcy5fc2VudGluZWwscj10Ll9wcmV2O3IhPT10OyllLnB1c2goSlNPTi5zdHJpbmdpZnkocixDYXIpKSxyPXIuX3ByZXY7cmV0dXJuIlsiK2Uuam9pbigiLCAiKSsiXSJ9O2Z1bmN0aW9uIGRhZShlKXtlLl9wcmV2Ll9uZXh0PWUuX25leHQsZS5fbmV4dC5fcHJldj1lLl9wcmV2LGRlbGV0ZSBlLl9uZXh0LGRlbGV0ZSBlLl9wcmV2fWZ1bmN0aW9uIENhcihlLHQpe2lmKGUhPT0iX25leHQiJiZlIT09Il9wcmV2IilyZXR1cm4gdH19KTt2YXIgeWFlPUgoKHRRbixfYWUpPT57dmFyIElkPXFuKCksQWFyPVVjKCkuR3JhcGgsUGFyPWdhZSgpO19hZS5leHBvcnRzPUxhcjt2YXIgSWFyPUlkLmNvbnN0YW50KDEpO2Z1bmN0aW9uIExhcihlLHQpe2lmKGUubm9kZUNvdW50KCk8PTEpcmV0dXJuW107dmFyIHI9UmFyKGUsdHx8SWFyKSxuPWthcihyLmdyYXBoLHIuYnVja2V0cyxyLnplcm9JZHgpO3JldHVybiBJZC5mbGF0dGVuKElkLm1hcChuLGZ1bmN0aW9uKGkpe3JldHVybiBlLm91dEVkZ2VzKGkudixpLncpfSksITApfWZ1bmN0aW9uIGthcihlLHQscil7Zm9yKHZhciBuPVtdLGk9dFt0Lmxlbmd0aC0xXSxvPXRbMF0sYTtlLm5vZGVDb3VudCgpOyl7Zm9yKDthPW8uZGVxdWV1ZSgpOylTbHQoZSx0LHIsYSk7Zm9yKDthPWkuZGVxdWV1ZSgpOylTbHQoZSx0LHIsYSk7aWYoZS5ub2RlQ291bnQoKSl7Zm9yKHZhciBzPXQubGVuZ3RoLTI7cz4wOy0tcylpZihhPXRbc10uZGVxdWV1ZSgpLGEpe249bi5jb25jYXQoU2x0KGUsdCxyLGEsITApKTticmVha319fXJldHVybiBufWZ1bmN0aW9uIFNsdChlLHQscixuLGkpe3ZhciBvPWk/W106dm9pZCAwO3JldHVybiBJZC5mb3JFYWNoKGUuaW5FZGdlcyhuLnYpLGZ1bmN0aW9uKGEpe3ZhciBzPWUuZWRnZShhKSxsPWUubm9kZShhLnYpO2kmJm8ucHVzaCh7djphLnYsdzphLnd9KSxsLm91dC09cyxNbHQodCxyLGwpfSksSWQuZm9yRWFjaChlLm91dEVkZ2VzKG4udiksZnVuY3Rpb24oYSl7dmFyIHM9ZS5lZGdlKGEpLGw9YS53LGM9ZS5ub2RlKGwpO2MuaW4tPXMsTWx0KHQscixjKX0pLGUucmVtb3ZlTm9kZShuLnYpLG99ZnVuY3Rpb24gUmFyKGUsdCl7dmFyIHI9bmV3IEFhcixuPTAsaT0wO0lkLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHMpe3Iuc2V0Tm9kZShzLHt2OnMsaW46MCxvdXQ6MH0pfSksSWQuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24ocyl7dmFyIGw9ci5lZGdlKHMudixzLncpfHwwLGM9dChzKSx1PWwrYztyLnNldEVkZ2Uocy52LHMudyx1KSxpPU1hdGgubWF4KGksci5ub2RlKHMudikub3V0Kz1jKSxuPU1hdGgubWF4KG4sci5ub2RlKHMudykuaW4rPWMpfSk7dmFyIG89SWQucmFuZ2UoaStuKzMpLm1hcChmdW5jdGlvbigpe3JldHVybiBuZXcgUGFyfSksYT1uKzE7cmV0dXJuIElkLmZvckVhY2goci5ub2RlcygpLGZ1bmN0aW9uKHMpe01sdChvLGEsci5ub2RlKHMpKX0pLHtncmFwaDpyLGJ1Y2tldHM6byx6ZXJvSWR4OmF9fWZ1bmN0aW9uIE1sdChlLHQscil7ci5vdXQ/ci5pbj9lW3Iub3V0LXIuaW4rdF0uZW5xdWV1ZShyKTplW2UubGVuZ3RoLTFdLmVucXVldWUocik6ZVswXS5lbnF1ZXVlKHIpfX0pO3ZhciB4YWU9SCgoZVFuLHZhZSk9PnsidXNlIHN0cmljdCI7dmFyIHQxPXFuKCksTmFyPXlhZSgpO3ZhZS5leHBvcnRzPXtydW46RGFyLHVuZG86emFyfTtmdW5jdGlvbiBEYXIoZSl7dmFyIHQ9ZS5ncmFwaCgpLmFjeWNsaWNlcj09PSJncmVlZHkiP05hcihlLHIoZSkpOk9hcihlKTt0MS5mb3JFYWNoKHQsZnVuY3Rpb24obil7dmFyIGk9ZS5lZGdlKG4pO2UucmVtb3ZlRWRnZShuKSxpLmZvcndhcmROYW1lPW4ubmFtZSxpLnJldmVyc2VkPSEwLGUuc2V0RWRnZShuLncsbi52LGksdDEudW5pcXVlSWQoInJldiIpKX0pO2Z1bmN0aW9uIHIobil7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBuLmVkZ2UoaSkud2VpZ2h0fX19ZnVuY3Rpb24gT2FyKGUpe3ZhciB0PVtdLHI9e30sbj17fTtmdW5jdGlvbiBpKG8pe3QxLmhhcyhuLG8pfHwobltvXT0hMCxyW29dPSEwLHQxLmZvckVhY2goZS5vdXRFZGdlcyhvKSxmdW5jdGlvbihhKXt0MS5oYXMocixhLncpP3QucHVzaChhKTppKGEudyl9KSxkZWxldGUgcltvXSl9cmV0dXJuIHQxLmZvckVhY2goZS5ub2RlcygpLGkpLHR9ZnVuY3Rpb24gemFyKGUpe3QxLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe3ZhciByPWUuZWRnZSh0KTtpZihyLnJldmVyc2VkKXtlLnJlbW92ZUVkZ2UodCk7dmFyIG49ci5mb3J3YXJkTmFtZTtkZWxldGUgci5yZXZlcnNlZCxkZWxldGUgci5mb3J3YXJkTmFtZSxlLnNldEVkZ2UodC53LHQudixyLG4pfX0pfX0pO3ZhciBpcz1IKChyUW4sTWFlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUXI9cW4oKSxiYWU9VWMoKS5HcmFwaDtNYWUuZXhwb3J0cz17YWRkRHVtbXlOb2RlOndhZSxzaW1wbGlmeTpGYXIsYXNOb25Db21wb3VuZEdyYXBoOkJhcixzdWNjZXNzb3JXZWlnaHRzOkhhcixwcmVkZWNlc3NvcldlaWdodHM6VmFyLGludGVyc2VjdFJlY3Q6VWFyLGJ1aWxkTGF5ZXJNYXRyaXg6cWFyLG5vcm1hbGl6ZVJhbmtzOkdhcixyZW1vdmVFbXB0eVJhbmtzOldhcixhZGRCb3JkZXJOb2RlOllhcixtYXhSYW5rOlNhZSxwYXJ0aXRpb246amFyLHRpbWU6WGFyLG5vdGltZTokYXJ9O2Z1bmN0aW9uIHdhZShlLHQscixuKXt2YXIgaTtkbyBpPVFyLnVuaXF1ZUlkKG4pO3doaWxlKGUuaGFzTm9kZShpKSk7cmV0dXJuIHIuZHVtbXk9dCxlLnNldE5vZGUoaSxyKSxpfWZ1bmN0aW9uIEZhcihlKXt2YXIgdD1uZXcgYmFlKCkuc2V0R3JhcGgoZS5ncmFwaCgpKTtyZXR1cm4gUXIuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24ocil7dC5zZXROb2RlKHIsZS5ub2RlKHIpKX0pLFFyLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHIpe3ZhciBuPXQuZWRnZShyLnYsci53KXx8e3dlaWdodDowLG1pbmxlbjoxfSxpPWUuZWRnZShyKTt0LnNldEVkZ2Uoci52LHIudyx7d2VpZ2h0Om4ud2VpZ2h0K2kud2VpZ2h0LG1pbmxlbjpNYXRoLm1heChuLm1pbmxlbixpLm1pbmxlbil9KX0pLHR9ZnVuY3Rpb24gQmFyKGUpe3ZhciB0PW5ldyBiYWUoe211bHRpZ3JhcGg6ZS5pc011bHRpZ3JhcGgoKX0pLnNldEdyYXBoKGUuZ3JhcGgoKSk7cmV0dXJuIFFyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHIpe2UuY2hpbGRyZW4ocikubGVuZ3RofHx0LnNldE5vZGUocixlLm5vZGUocikpfSksUXIuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24ocil7dC5zZXRFZGdlKHIsZS5lZGdlKHIpKX0pLHR9ZnVuY3Rpb24gSGFyKGUpe3ZhciB0PVFyLm1hcChlLm5vZGVzKCksZnVuY3Rpb24ocil7dmFyIG49e307cmV0dXJuIFFyLmZvckVhY2goZS5vdXRFZGdlcyhyKSxmdW5jdGlvbihpKXtuW2kud109KG5baS53XXx8MCkrZS5lZGdlKGkpLndlaWdodH0pLG59KTtyZXR1cm4gUXIuemlwT2JqZWN0KGUubm9kZXMoKSx0KX1mdW5jdGlvbiBWYXIoZSl7dmFyIHQ9UXIubWFwKGUubm9kZXMoKSxmdW5jdGlvbihyKXt2YXIgbj17fTtyZXR1cm4gUXIuZm9yRWFjaChlLmluRWRnZXMociksZnVuY3Rpb24oaSl7bltpLnZdPShuW2kudl18fDApK2UuZWRnZShpKS53ZWlnaHR9KSxufSk7cmV0dXJuIFFyLnppcE9iamVjdChlLm5vZGVzKCksdCl9ZnVuY3Rpb24gVWFyKGUsdCl7dmFyIHI9ZS54LG49ZS55LGk9dC54LXIsbz10LnktbixhPWUud2lkdGgvMixzPWUuaGVpZ2h0LzI7aWYoIWkmJiFvKXRocm93IG5ldyBFcnJvcigiTm90IHBvc3NpYmxlIHRvIGZpbmQgaW50ZXJzZWN0aW9uIGluc2lkZSBvZiB0aGUgcmVjdGFuZ2xlIik7dmFyIGwsYztyZXR1cm4gTWF0aC5hYnMobykqYT5NYXRoLmFicyhpKSpzPyhvPDAmJihzPS1zKSxsPXMqaS9vLGM9cyk6KGk8MCYmKGE9LWEpLGw9YSxjPWEqby9pKSx7eDpyK2wseTpuK2N9fWZ1bmN0aW9uIHFhcihlKXt2YXIgdD1Rci5tYXAoUXIucmFuZ2UoU2FlKGUpKzEpLGZ1bmN0aW9uKCl7cmV0dXJuW119KTtyZXR1cm4gUXIuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24ocil7dmFyIG49ZS5ub2RlKHIpLGk9bi5yYW5rO1FyLmlzVW5kZWZpbmVkKGkpfHwodFtpXVtuLm9yZGVyXT1yKX0pLHR9ZnVuY3Rpb24gR2FyKGUpe3ZhciB0PVFyLm1pbihRci5tYXAoZS5ub2RlcygpLGZ1bmN0aW9uKHIpe3JldHVybiBlLm5vZGUocikucmFua30pKTtRci5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbihyKXt2YXIgbj1lLm5vZGUocik7UXIuaGFzKG4sInJhbmsiKSYmKG4ucmFuay09dCl9KX1mdW5jdGlvbiBXYXIoZSl7dmFyIHQ9UXIubWluKFFyLm1hcChlLm5vZGVzKCksZnVuY3Rpb24obyl7cmV0dXJuIGUubm9kZShvKS5yYW5rfSkpLHI9W107UXIuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24obyl7dmFyIGE9ZS5ub2RlKG8pLnJhbmstdDtyW2FdfHwoclthXT1bXSksclthXS5wdXNoKG8pfSk7dmFyIG49MCxpPWUuZ3JhcGgoKS5ub2RlUmFua0ZhY3RvcjtRci5mb3JFYWNoKHIsZnVuY3Rpb24obyxhKXtRci5pc1VuZGVmaW5lZChvKSYmYSVpIT09MD8tLW46biYmUXIuZm9yRWFjaChvLGZ1bmN0aW9uKHMpe2Uubm9kZShzKS5yYW5rKz1ufSl9KX1mdW5jdGlvbiBZYXIoZSx0LHIsbil7dmFyIGk9e3dpZHRoOjAsaGVpZ2h0OjB9O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj00JiYoaS5yYW5rPXIsaS5vcmRlcj1uKSx3YWUoZSwiYm9yZGVyIixpLHQpfWZ1bmN0aW9uIFNhZShlKXtyZXR1cm4gUXIubWF4KFFyLm1hcChlLm5vZGVzKCksZnVuY3Rpb24odCl7dmFyIHI9ZS5ub2RlKHQpLnJhbms7aWYoIVFyLmlzVW5kZWZpbmVkKHIpKXJldHVybiByfSkpfWZ1bmN0aW9uIGphcihlLHQpe3ZhciByPXtsaHM6W10scmhzOltdfTtyZXR1cm4gUXIuZm9yRWFjaChlLGZ1bmN0aW9uKG4pe3Qobik/ci5saHMucHVzaChuKTpyLnJocy5wdXNoKG4pfSkscn1mdW5jdGlvbiBYYXIoZSx0KXt2YXIgcj1Rci5ub3coKTt0cnl7cmV0dXJuIHQoKX1maW5hbGx5e2NvbnNvbGUubG9nKGUrIiB0aW1lOiAiKyhRci5ub3coKS1yKSsibXMiKX19ZnVuY3Rpb24gJGFyKGUsdCl7cmV0dXJuIHQoKX19KTt2YXIgQ2FlPUgoKG5RbixUYWUpPT57InVzZSBzdHJpY3QiO3ZhciBFYWU9cW4oKSxLYXI9aXMoKTtUYWUuZXhwb3J0cz17cnVuOlphcix1bmRvOlFhcn07ZnVuY3Rpb24gWmFyKGUpe2UuZ3JhcGgoKS5kdW1teUNoYWlucz1bXSxFYWUuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24odCl7SmFyKGUsdCl9KX1mdW5jdGlvbiBKYXIoZSx0KXt2YXIgcj10LnYsbj1lLm5vZGUocikucmFuayxpPXQudyxvPWUubm9kZShpKS5yYW5rLGE9dC5uYW1lLHM9ZS5lZGdlKHQpLGw9cy5sYWJlbFJhbms7aWYobyE9PW4rMSl7ZS5yZW1vdmVFZGdlKHQpO3ZhciBjLHUsaDtmb3IoaD0wLCsrbjtuPG87KytoLCsrbilzLnBvaW50cz1bXSx1PXt3aWR0aDowLGhlaWdodDowLGVkZ2VMYWJlbDpzLGVkZ2VPYmo6dCxyYW5rOm59LGM9S2FyLmFkZER1bW15Tm9kZShlLCJlZGdlIix1LCJfZCIpLG49PT1sJiYodS53aWR0aD1zLndpZHRoLHUuaGVpZ2h0PXMuaGVpZ2h0LHUuZHVtbXk9ImVkZ2UtbGFiZWwiLHUubGFiZWxwb3M9cy5sYWJlbHBvcyksZS5zZXRFZGdlKHIsYyx7d2VpZ2h0OnMud2VpZ2h0fSxhKSxoPT09MCYmZS5ncmFwaCgpLmR1bW15Q2hhaW5zLnB1c2goYykscj1jO2Uuc2V0RWRnZShyLGkse3dlaWdodDpzLndlaWdodH0sYSl9fWZ1bmN0aW9uIFFhcihlKXtFYWUuZm9yRWFjaChlLmdyYXBoKCkuZHVtbXlDaGFpbnMsZnVuY3Rpb24odCl7dmFyIHI9ZS5ub2RlKHQpLG49ci5lZGdlTGFiZWwsaTtmb3IoZS5zZXRFZGdlKHIuZWRnZU9iaixuKTtyLmR1bW15OylpPWUuc3VjY2Vzc29ycyh0KVswXSxlLnJlbW92ZU5vZGUodCksbi5wb2ludHMucHVzaCh7eDpyLngseTpyLnl9KSxyLmR1bW15PT09ImVkZ2UtbGFiZWwiJiYobi54PXIueCxuLnk9ci55LG4ud2lkdGg9ci53aWR0aCxuLmhlaWdodD1yLmhlaWdodCksdD1pLHI9ZS5ub2RlKHQpfSl9fSk7dmFyIFg0PUgoKGlRbixBYWUpPT57InVzZSBzdHJpY3QiO3ZhciB1SD1xbigpO0FhZS5leHBvcnRzPXtsb25nZXN0UGF0aDp0c3Isc2xhY2s6ZXNyfTtmdW5jdGlvbiB0c3IoZSl7dmFyIHQ9e307ZnVuY3Rpb24gcihuKXt2YXIgaT1lLm5vZGUobik7aWYodUguaGFzKHQsbikpcmV0dXJuIGkucmFuazt0W25dPSEwO3ZhciBvPXVILm1pbih1SC5tYXAoZS5vdXRFZGdlcyhuKSxmdW5jdGlvbihhKXtyZXR1cm4gcihhLncpLWUuZWRnZShhKS5taW5sZW59KSk7cmV0dXJuKG89PT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFl8fG89PT12b2lkIDB8fG89PT1udWxsKSYmKG89MCksaS5yYW5rPW99dUguZm9yRWFjaChlLnNvdXJjZXMoKSxyKX1mdW5jdGlvbiBlc3IoZSx0KXtyZXR1cm4gZS5ub2RlKHQudykucmFuay1lLm5vZGUodC52KS5yYW5rLWUuZWRnZSh0KS5taW5sZW59fSk7dmFyIEVsdD1IKChvUW4sUGFlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgaEg9cW4oKSxyc3I9VWMoKS5HcmFwaCxmSD1YNCgpLnNsYWNrO1BhZS5leHBvcnRzPW5zcjtmdW5jdGlvbiBuc3IoZSl7dmFyIHQ9bmV3IHJzcih7ZGlyZWN0ZWQ6ITF9KSxyPWUubm9kZXMoKVswXSxuPWUubm9kZUNvdW50KCk7dC5zZXROb2RlKHIse30pO2Zvcih2YXIgaSxvO2lzcih0LGUpPG47KWk9b3NyKHQsZSksbz10Lmhhc05vZGUoaS52KT9mSChlLGkpOi1mSChlLGkpLGFzcih0LGUsbyk7cmV0dXJuIHR9ZnVuY3Rpb24gaXNyKGUsdCl7ZnVuY3Rpb24gcihuKXtoSC5mb3JFYWNoKHQubm9kZUVkZ2VzKG4pLGZ1bmN0aW9uKGkpe3ZhciBvPWkudixhPW49PT1vP2kudzpvOyFlLmhhc05vZGUoYSkmJiFmSCh0LGkpJiYoZS5zZXROb2RlKGEse30pLGUuc2V0RWRnZShuLGEse30pLHIoYSkpfSl9cmV0dXJuIGhILmZvckVhY2goZS5ub2RlcygpLHIpLGUubm9kZUNvdW50KCl9ZnVuY3Rpb24gb3NyKGUsdCl7cmV0dXJuIGhILm1pbkJ5KHQuZWRnZXMoKSxmdW5jdGlvbihyKXtpZihlLmhhc05vZGUoci52KSE9PWUuaGFzTm9kZShyLncpKXJldHVybiBmSCh0LHIpfSl9ZnVuY3Rpb24gYXNyKGUsdCxyKXtoSC5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbihuKXt0Lm5vZGUobikucmFuays9cn0pfX0pO3ZhciB6YWU9SCgoYVFuLE9hZSk9PnsidXNlIHN0cmljdCI7dmFyIExkPXFuKCksc3NyPUVsdCgpLGxzcj1YNCgpLnNsYWNrLGNzcj1YNCgpLmxvbmdlc3RQYXRoLHVzcj1VYygpLmFsZy5wcmVvcmRlcixoc3I9VWMoKS5hbGcucG9zdG9yZGVyLGZzcj1pcygpLnNpbXBsaWZ5O09hZS5leHBvcnRzPWUxO2UxLmluaXRMb3dMaW1WYWx1ZXM9Q2x0O2UxLmluaXRDdXRWYWx1ZXM9VGx0O2UxLmNhbGNDdXRWYWx1ZT1MYWU7ZTEubGVhdmVFZGdlPVJhZTtlMS5lbnRlckVkZ2U9TmFlO2UxLmV4Y2hhbmdlRWRnZXM9RGFlO2Z1bmN0aW9uIGUxKGUpe2U9ZnNyKGUpLGNzcihlKTt2YXIgdD1zc3IoZSk7Q2x0KHQpLFRsdCh0LGUpO2Zvcih2YXIgcixuO3I9UmFlKHQpOyluPU5hZSh0LGUsciksRGFlKHQsZSxyLG4pfWZ1bmN0aW9uIFRsdChlLHQpe3ZhciByPWhzcihlLGUubm9kZXMoKSk7cj1yLnNsaWNlKDAsci5sZW5ndGgtMSksTGQuZm9yRWFjaChyLGZ1bmN0aW9uKG4pe3BzcihlLHQsbil9KX1mdW5jdGlvbiBwc3IoZSx0LHIpe3ZhciBuPWUubm9kZShyKSxpPW4ucGFyZW50O2UuZWRnZShyLGkpLmN1dHZhbHVlPUxhZShlLHQscil9ZnVuY3Rpb24gTGFlKGUsdCxyKXt2YXIgbj1lLm5vZGUociksaT1uLnBhcmVudCxvPSEwLGE9dC5lZGdlKHIsaSkscz0wO3JldHVybiBhfHwobz0hMSxhPXQuZWRnZShpLHIpKSxzPWEud2VpZ2h0LExkLmZvckVhY2godC5ub2RlRWRnZXMociksZnVuY3Rpb24obCl7dmFyIGM9bC52PT09cix1PWM/bC53OmwudjtpZih1IT09aSl7dmFyIGg9Yz09PW8sZj10LmVkZ2UobCkud2VpZ2h0O2lmKHMrPWg/ZjotZixtc3IoZSxyLHUpKXt2YXIgcD1lLmVkZ2Uocix1KS5jdXR2YWx1ZTtzKz1oPy1wOnB9fX0pLHN9ZnVuY3Rpb24gQ2x0KGUsdCl7YXJndW1lbnRzLmxlbmd0aDwyJiYodD1lLm5vZGVzKClbMF0pLGthZShlLHt9LDEsdCl9ZnVuY3Rpb24ga2FlKGUsdCxyLG4saSl7dmFyIG89cixhPWUubm9kZShuKTtyZXR1cm4gdFtuXT0hMCxMZC5mb3JFYWNoKGUubmVpZ2hib3JzKG4pLGZ1bmN0aW9uKHMpe0xkLmhhcyh0LHMpfHwocj1rYWUoZSx0LHIscyxuKSl9KSxhLmxvdz1vLGEubGltPXIrKyxpP2EucGFyZW50PWk6ZGVsZXRlIGEucGFyZW50LHJ9ZnVuY3Rpb24gUmFlKGUpe3JldHVybiBMZC5maW5kKGUuZWRnZXMoKSxmdW5jdGlvbih0KXtyZXR1cm4gZS5lZGdlKHQpLmN1dHZhbHVlPDB9KX1mdW5jdGlvbiBOYWUoZSx0LHIpe3ZhciBuPXIudixpPXIudzt0Lmhhc0VkZ2UobixpKXx8KG49ci53LGk9ci52KTt2YXIgbz1lLm5vZGUobiksYT1lLm5vZGUoaSkscz1vLGw9ITE7by5saW0+YS5saW0mJihzPWEsbD0hMCk7dmFyIGM9TGQuZmlsdGVyKHQuZWRnZXMoKSxmdW5jdGlvbih1KXtyZXR1cm4gbD09PUlhZShlLGUubm9kZSh1LnYpLHMpJiZsIT09SWFlKGUsZS5ub2RlKHUudykscyl9KTtyZXR1cm4gTGQubWluQnkoYyxmdW5jdGlvbih1KXtyZXR1cm4gbHNyKHQsdSl9KX1mdW5jdGlvbiBEYWUoZSx0LHIsbil7dmFyIGk9ci52LG89ci53O2UucmVtb3ZlRWRnZShpLG8pLGUuc2V0RWRnZShuLnYsbi53LHt9KSxDbHQoZSksVGx0KGUsdCksZHNyKGUsdCl9ZnVuY3Rpb24gZHNyKGUsdCl7dmFyIHI9TGQuZmluZChlLm5vZGVzKCksZnVuY3Rpb24oaSl7cmV0dXJuIXQubm9kZShpKS5wYXJlbnR9KSxuPXVzcihlLHIpO249bi5zbGljZSgxKSxMZC5mb3JFYWNoKG4sZnVuY3Rpb24oaSl7dmFyIG89ZS5ub2RlKGkpLnBhcmVudCxhPXQuZWRnZShpLG8pLHM9ITE7YXx8KGE9dC5lZGdlKG8saSkscz0hMCksdC5ub2RlKGkpLnJhbms9dC5ub2RlKG8pLnJhbmsrKHM/YS5taW5sZW46LWEubWlubGVuKX0pfWZ1bmN0aW9uIG1zcihlLHQscil7cmV0dXJuIGUuaGFzRWRnZSh0LHIpfWZ1bmN0aW9uIElhZShlLHQscil7cmV0dXJuIHIubG93PD10LmxpbSYmdC5saW08PXIubGltfX0pO3ZhciBWYWU9SCgoc1FuLEhhZSk9PnsidXNlIHN0cmljdCI7dmFyIGdzcj1YNCgpLEJhZT1nc3IubG9uZ2VzdFBhdGgsX3NyPUVsdCgpLHlzcj16YWUoKTtIYWUuZXhwb3J0cz12c3I7ZnVuY3Rpb24gdnNyKGUpe3N3aXRjaChlLmdyYXBoKCkucmFua2VyKXtjYXNlIm5ldHdvcmstc2ltcGxleCI6RmFlKGUpO2JyZWFrO2Nhc2UidGlnaHQtdHJlZSI6YnNyKGUpO2JyZWFrO2Nhc2UibG9uZ2VzdC1wYXRoIjp4c3IoZSk7YnJlYWs7ZGVmYXVsdDpGYWUoZSl9fXZhciB4c3I9QmFlO2Z1bmN0aW9uIGJzcihlKXtCYWUoZSksX3NyKGUpfWZ1bmN0aW9uIEZhZShlKXt5c3IoZSl9fSk7dmFyIHFhZT1IKChsUW4sVWFlKT0+e3ZhciBBbHQ9cW4oKTtVYWUuZXhwb3J0cz13c3I7ZnVuY3Rpb24gd3NyKGUpe3ZhciB0PU1zcihlKTtBbHQuZm9yRWFjaChlLmdyYXBoKCkuZHVtbXlDaGFpbnMsZnVuY3Rpb24ocil7Zm9yKHZhciBuPWUubm9kZShyKSxpPW4uZWRnZU9iaixvPVNzcihlLHQsaS52LGkudyksYT1vLnBhdGgscz1vLmxjYSxsPTAsYz1hW2xdLHU9ITA7ciE9PWkudzspe2lmKG49ZS5ub2RlKHIpLHUpe2Zvcig7KGM9YVtsXSkhPT1zJiZlLm5vZGUoYykubWF4UmFuazxuLnJhbms7KWwrKztjPT09cyYmKHU9ITEpfWlmKCF1KXtmb3IoO2w8YS5sZW5ndGgtMSYmZS5ub2RlKGM9YVtsKzFdKS5taW5SYW5rPD1uLnJhbms7KWwrKztjPWFbbF19ZS5zZXRQYXJlbnQocixjKSxyPWUuc3VjY2Vzc29ycyhyKVswXX19KX1mdW5jdGlvbiBTc3IoZSx0LHIsbil7dmFyIGk9W10sbz1bXSxhPU1hdGgubWluKHRbcl0ubG93LHRbbl0ubG93KSxzPU1hdGgubWF4KHRbcl0ubGltLHRbbl0ubGltKSxsLGM7bD1yO2RvIGw9ZS5wYXJlbnQobCksaS5wdXNoKGwpO3doaWxlKGwmJih0W2xdLmxvdz5hfHxzPnRbbF0ubGltKSk7Zm9yKGM9bCxsPW47KGw9ZS5wYXJlbnQobCkpIT09Yzspby5wdXNoKGwpO3JldHVybntwYXRoOmkuY29uY2F0KG8ucmV2ZXJzZSgpKSxsY2E6Y319ZnVuY3Rpb24gTXNyKGUpe3ZhciB0PXt9LHI9MDtmdW5jdGlvbiBuKGkpe3ZhciBvPXI7QWx0LmZvckVhY2goZS5jaGlsZHJlbihpKSxuKSx0W2ldPXtsb3c6byxsaW06cisrfX1yZXR1cm4gQWx0LmZvckVhY2goZS5jaGlsZHJlbigpLG4pLHR9fSk7dmFyIFlhZT1IKChjUW4sV2FlKT0+e3ZhciBrZD1xbigpLFBsdD1pcygpO1dhZS5leHBvcnRzPXtydW46RXNyLGNsZWFudXA6QXNyfTtmdW5jdGlvbiBFc3IoZSl7dmFyIHQ9UGx0LmFkZER1bW15Tm9kZShlLCJyb290Iix7fSwiX3Jvb3QiKSxyPVRzcihlKSxuPWtkLm1heChrZC52YWx1ZXMocikpLTEsaT0yKm4rMTtlLmdyYXBoKCkubmVzdGluZ1Jvb3Q9dCxrZC5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbihhKXtlLmVkZ2UoYSkubWlubGVuKj1pfSk7dmFyIG89Q3NyKGUpKzE7a2QuZm9yRWFjaChlLmNoaWxkcmVuKCksZnVuY3Rpb24oYSl7R2FlKGUsdCxpLG8sbixyLGEpfSksZS5ncmFwaCgpLm5vZGVSYW5rRmFjdG9yPWl9ZnVuY3Rpb24gR2FlKGUsdCxyLG4saSxvLGEpe3ZhciBzPWUuY2hpbGRyZW4oYSk7aWYoIXMubGVuZ3RoKXthIT09dCYmZS5zZXRFZGdlKHQsYSx7d2VpZ2h0OjAsbWlubGVuOnJ9KTtyZXR1cm59dmFyIGw9UGx0LmFkZEJvcmRlck5vZGUoZSwiX2J0IiksYz1QbHQuYWRkQm9yZGVyTm9kZShlLCJfYmIiKSx1PWUubm9kZShhKTtlLnNldFBhcmVudChsLGEpLHUuYm9yZGVyVG9wPWwsZS5zZXRQYXJlbnQoYyxhKSx1LmJvcmRlckJvdHRvbT1jLGtkLmZvckVhY2gocyxmdW5jdGlvbihoKXtHYWUoZSx0LHIsbixpLG8saCk7dmFyIGY9ZS5ub2RlKGgpLHA9Zi5ib3JkZXJUb3A/Zi5ib3JkZXJUb3A6aCxkPWYuYm9yZGVyQm90dG9tP2YuYm9yZGVyQm90dG9tOmgsZz1mLmJvcmRlclRvcD9uOjIqbixfPXAhPT1kPzE6aS1vW2FdKzE7ZS5zZXRFZGdlKGwscCx7d2VpZ2h0OmcsbWlubGVuOl8sbmVzdGluZ0VkZ2U6ITB9KSxlLnNldEVkZ2UoZCxjLHt3ZWlnaHQ6ZyxtaW5sZW46XyxuZXN0aW5nRWRnZTohMH0pfSksZS5wYXJlbnQoYSl8fGUuc2V0RWRnZSh0LGwse3dlaWdodDowLG1pbmxlbjppK29bYV19KX1mdW5jdGlvbiBUc3IoZSl7dmFyIHQ9e307ZnVuY3Rpb24gcihuLGkpe3ZhciBvPWUuY2hpbGRyZW4obik7byYmby5sZW5ndGgmJmtkLmZvckVhY2gobyxmdW5jdGlvbihhKXtyKGEsaSsxKX0pLHRbbl09aX1yZXR1cm4ga2QuZm9yRWFjaChlLmNoaWxkcmVuKCksZnVuY3Rpb24obil7cihuLDEpfSksdH1mdW5jdGlvbiBDc3IoZSl7cmV0dXJuIGtkLnJlZHVjZShlLmVkZ2VzKCksZnVuY3Rpb24odCxyKXtyZXR1cm4gdCtlLmVkZ2Uocikud2VpZ2h0fSwwKX1mdW5jdGlvbiBBc3IoZSl7dmFyIHQ9ZS5ncmFwaCgpO2UucmVtb3ZlTm9kZSh0Lm5lc3RpbmdSb290KSxkZWxldGUgdC5uZXN0aW5nUm9vdCxrZC5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbihyKXt2YXIgbj1lLmVkZ2Uocik7bi5uZXN0aW5nRWRnZSYmZS5yZW1vdmVFZGdlKHIpfSl9fSk7dmFyICRhZT1IKCh1UW4sWGFlKT0+e3ZhciBJbHQ9cW4oKSxQc3I9aXMoKTtYYWUuZXhwb3J0cz1Jc3I7ZnVuY3Rpb24gSXNyKGUpe2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jaGlsZHJlbihyKSxpPWUubm9kZShyKTtpZihuLmxlbmd0aCYmSWx0LmZvckVhY2gobix0KSxJbHQuaGFzKGksIm1pblJhbmsiKSl7aS5ib3JkZXJMZWZ0PVtdLGkuYm9yZGVyUmlnaHQ9W107Zm9yKHZhciBvPWkubWluUmFuayxhPWkubWF4UmFuaysxO288YTsrK28pamFlKGUsImJvcmRlckxlZnQiLCJfYmwiLHIsaSxvKSxqYWUoZSwiYm9yZGVyUmlnaHQiLCJfYnIiLHIsaSxvKX19SWx0LmZvckVhY2goZS5jaGlsZHJlbigpLHQpfWZ1bmN0aW9uIGphZShlLHQscixuLGksbyl7dmFyIGE9e3dpZHRoOjAsaGVpZ2h0OjAscmFuazpvLGJvcmRlclR5cGU6dH0scz1pW3RdW28tMV0sbD1Qc3IuYWRkRHVtbXlOb2RlKGUsImJvcmRlciIsYSxyKTtpW3RdW29dPWwsZS5zZXRQYXJlbnQobCxuKSxzJiZlLnNldEVkZ2UocyxsLHt3ZWlnaHQ6MX0pfX0pO3ZhciBRYWU9SCgoaFFuLEphZSk9PnsidXNlIHN0cmljdCI7dmFyIHFmPXFuKCk7SmFlLmV4cG9ydHM9e2FkanVzdDpMc3IsdW5kbzprc3J9O2Z1bmN0aW9uIExzcihlKXt2YXIgdD1lLmdyYXBoKCkucmFua2Rpci50b0xvd2VyQ2FzZSgpOyh0PT09ImxyInx8dD09PSJybCIpJiZaYWUoZSl9ZnVuY3Rpb24ga3NyKGUpe3ZhciB0PWUuZ3JhcGgoKS5yYW5rZGlyLnRvTG93ZXJDYXNlKCk7KHQ9PT0iYnQifHx0PT09InJsIikmJlJzcihlKSwodD09PSJsciJ8fHQ9PT0icmwiKSYmKE5zcihlKSxaYWUoZSkpfWZ1bmN0aW9uIFphZShlKXtxZi5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbih0KXtLYWUoZS5ub2RlKHQpKX0pLHFmLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe0thZShlLmVkZ2UodCkpfSl9ZnVuY3Rpb24gS2FlKGUpe3ZhciB0PWUud2lkdGg7ZS53aWR0aD1lLmhlaWdodCxlLmhlaWdodD10fWZ1bmN0aW9uIFJzcihlKXtxZi5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbih0KXtMbHQoZS5ub2RlKHQpKX0pLHFmLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe3ZhciByPWUuZWRnZSh0KTtxZi5mb3JFYWNoKHIucG9pbnRzLExsdCkscWYuaGFzKHIsInkiKSYmTGx0KHIpfSl9ZnVuY3Rpb24gTGx0KGUpe2UueT0tZS55fWZ1bmN0aW9uIE5zcihlKXtxZi5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbih0KXtrbHQoZS5ub2RlKHQpKX0pLHFmLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe3ZhciByPWUuZWRnZSh0KTtxZi5mb3JFYWNoKHIucG9pbnRzLGtsdCkscWYuaGFzKHIsIngiKSYma2x0KHIpfSl9ZnVuY3Rpb24ga2x0KGUpe3ZhciB0PWUueDtlLng9ZS55LGUueT10fX0pO3ZhciBlc2U9SCgoZlFuLHRzZSk9PnsidXNlIHN0cmljdCI7dmFyIFJkPXFuKCk7dHNlLmV4cG9ydHM9RHNyO2Z1bmN0aW9uIERzcihlKXt2YXIgdD17fSxyPVJkLmZpbHRlcihlLm5vZGVzKCksZnVuY3Rpb24ocyl7cmV0dXJuIWUuY2hpbGRyZW4ocykubGVuZ3RofSksbj1SZC5tYXgoUmQubWFwKHIsZnVuY3Rpb24ocyl7cmV0dXJuIGUubm9kZShzKS5yYW5rfSkpLGk9UmQubWFwKFJkLnJhbmdlKG4rMSksZnVuY3Rpb24oKXtyZXR1cm5bXX0pO2Z1bmN0aW9uIG8ocyl7aWYoIVJkLmhhcyh0LHMpKXt0W3NdPSEwO3ZhciBsPWUubm9kZShzKTtpW2wucmFua10ucHVzaChzKSxSZC5mb3JFYWNoKGUuc3VjY2Vzc29ycyhzKSxvKX19dmFyIGE9UmQuc29ydEJ5KHIsZnVuY3Rpb24ocyl7cmV0dXJuIGUubm9kZShzKS5yYW5rfSk7cmV0dXJuIFJkLmZvckVhY2goYSxvKSxpfX0pO3ZhciBuc2U9SCgocFFuLHJzZSk9PnsidXNlIHN0cmljdCI7dmFyIGYwPXFuKCk7cnNlLmV4cG9ydHM9T3NyO2Z1bmN0aW9uIE9zcihlLHQpe2Zvcih2YXIgcj0wLG49MTtuPHQubGVuZ3RoOysrbilyKz16c3IoZSx0W24tMV0sdFtuXSk7cmV0dXJuIHJ9ZnVuY3Rpb24genNyKGUsdCxyKXtmb3IodmFyIG49ZjAuemlwT2JqZWN0KHIsZjAubWFwKHIsZnVuY3Rpb24oYyx1KXtyZXR1cm4gdX0pKSxpPWYwLmZsYXR0ZW4oZjAubWFwKHQsZnVuY3Rpb24oYyl7cmV0dXJuIGYwLnNvcnRCeShmMC5tYXAoZS5vdXRFZGdlcyhjKSxmdW5jdGlvbih1KXtyZXR1cm57cG9zOm5bdS53XSx3ZWlnaHQ6ZS5lZGdlKHUpLndlaWdodH19KSwicG9zIil9KSwhMCksbz0xO288ci5sZW5ndGg7KW88PD0xO3ZhciBhPTIqby0xO28tPTE7dmFyIHM9ZjAubWFwKG5ldyBBcnJheShhKSxmdW5jdGlvbigpe3JldHVybiAwfSksbD0wO3JldHVybiBmMC5mb3JFYWNoKGkuZm9yRWFjaChmdW5jdGlvbihjKXt2YXIgdT1jLnBvcytvO3NbdV0rPWMud2VpZ2h0O2Zvcih2YXIgaD0wO3U+MDspdSUyJiYoaCs9c1t1KzFdKSx1PXUtMT4+MSxzW3VdKz1jLndlaWdodDtsKz1jLndlaWdodCpofSkpLGx9fSk7dmFyIGFzZT1IKChkUW4sb3NlKT0+e3ZhciBpc2U9cW4oKTtvc2UuZXhwb3J0cz1Gc3I7ZnVuY3Rpb24gRnNyKGUsdCl7cmV0dXJuIGlzZS5tYXAodCxmdW5jdGlvbihyKXt2YXIgbj1lLmluRWRnZXMocik7aWYobi5sZW5ndGgpe3ZhciBpPWlzZS5yZWR1Y2UobixmdW5jdGlvbihvLGEpe3ZhciBzPWUuZWRnZShhKSxsPWUubm9kZShhLnYpO3JldHVybntzdW06by5zdW0rcy53ZWlnaHQqbC5vcmRlcix3ZWlnaHQ6by53ZWlnaHQrcy53ZWlnaHR9fSx7c3VtOjAsd2VpZ2h0OjB9KTtyZXR1cm57djpyLGJhcnljZW50ZXI6aS5zdW0vaS53ZWlnaHQsd2VpZ2h0Omkud2VpZ2h0fX1lbHNlIHJldHVybnt2OnJ9fSl9fSk7dmFyIGxzZT1IKChtUW4sc3NlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgQ2w9cW4oKTtzc2UuZXhwb3J0cz1Cc3I7ZnVuY3Rpb24gQnNyKGUsdCl7dmFyIHI9e307Q2wuZm9yRWFjaChlLGZ1bmN0aW9uKGksbyl7dmFyIGE9cltpLnZdPXtpbmRlZ3JlZTowLGluOltdLG91dDpbXSx2czpbaS52XSxpOm99O0NsLmlzVW5kZWZpbmVkKGkuYmFyeWNlbnRlcil8fChhLmJhcnljZW50ZXI9aS5iYXJ5Y2VudGVyLGEud2VpZ2h0PWkud2VpZ2h0KX0pLENsLmZvckVhY2godC5lZGdlcygpLGZ1bmN0aW9uKGkpe3ZhciBvPXJbaS52XSxhPXJbaS53XTshQ2wuaXNVbmRlZmluZWQobykmJiFDbC5pc1VuZGVmaW5lZChhKSYmKGEuaW5kZWdyZWUrKyxvLm91dC5wdXNoKHJbaS53XSkpfSk7dmFyIG49Q2wuZmlsdGVyKHIsZnVuY3Rpb24oaSl7cmV0dXJuIWkuaW5kZWdyZWV9KTtyZXR1cm4gSHNyKG4pfWZ1bmN0aW9uIEhzcihlKXt2YXIgdD1bXTtmdW5jdGlvbiByKG8pe3JldHVybiBmdW5jdGlvbihhKXthLm1lcmdlZHx8KENsLmlzVW5kZWZpbmVkKGEuYmFyeWNlbnRlcil8fENsLmlzVW5kZWZpbmVkKG8uYmFyeWNlbnRlcil8fGEuYmFyeWNlbnRlcj49by5iYXJ5Y2VudGVyKSYmVnNyKG8sYSl9fWZ1bmN0aW9uIG4obyl7cmV0dXJuIGZ1bmN0aW9uKGEpe2EuaW4ucHVzaChvKSwtLWEuaW5kZWdyZWU9PT0wJiZlLnB1c2goYSl9fWZvcig7ZS5sZW5ndGg7KXt2YXIgaT1lLnBvcCgpO3QucHVzaChpKSxDbC5mb3JFYWNoKGkuaW4ucmV2ZXJzZSgpLHIoaSkpLENsLmZvckVhY2goaS5vdXQsbihpKSl9cmV0dXJuIENsLm1hcChDbC5maWx0ZXIodCxmdW5jdGlvbihvKXtyZXR1cm4hby5tZXJnZWR9KSxmdW5jdGlvbihvKXtyZXR1cm4gQ2wucGljayhvLFsidnMiLCJpIiwiYmFyeWNlbnRlciIsIndlaWdodCJdKX0pfWZ1bmN0aW9uIFZzcihlLHQpe3ZhciByPTAsbj0wO2Uud2VpZ2h0JiYocis9ZS5iYXJ5Y2VudGVyKmUud2VpZ2h0LG4rPWUud2VpZ2h0KSx0LndlaWdodCYmKHIrPXQuYmFyeWNlbnRlcip0LndlaWdodCxuKz10LndlaWdodCksZS52cz10LnZzLmNvbmNhdChlLnZzKSxlLmJhcnljZW50ZXI9ci9uLGUud2VpZ2h0PW4sZS5pPU1hdGgubWluKHQuaSxlLmkpLHQubWVyZ2VkPSEwfX0pO3ZhciBoc2U9SCgoZ1FuLHVzZSk9Pnt2YXIgJDQ9cW4oKSxVc3I9aXMoKTt1c2UuZXhwb3J0cz1xc3I7ZnVuY3Rpb24gcXNyKGUsdCl7dmFyIHI9VXNyLnBhcnRpdGlvbihlLGZ1bmN0aW9uKHUpe3JldHVybiAkNC5oYXModSwiYmFyeWNlbnRlciIpfSksbj1yLmxocyxpPSQ0LnNvcnRCeShyLnJocyxmdW5jdGlvbih1KXtyZXR1cm4tdS5pfSksbz1bXSxhPTAscz0wLGw9MDtuLnNvcnQoR3NyKCEhdCkpLGw9Y3NlKG8saSxsKSwkNC5mb3JFYWNoKG4sZnVuY3Rpb24odSl7bCs9dS52cy5sZW5ndGgsby5wdXNoKHUudnMpLGErPXUuYmFyeWNlbnRlcip1LndlaWdodCxzKz11LndlaWdodCxsPWNzZShvLGksbCl9KTt2YXIgYz17dnM6JDQuZmxhdHRlbihvLCEwKX07cmV0dXJuIHMmJihjLmJhcnljZW50ZXI9YS9zLGMud2VpZ2h0PXMpLGN9ZnVuY3Rpb24gY3NlKGUsdCxyKXtmb3IodmFyIG47dC5sZW5ndGgmJihuPSQ0Lmxhc3QodCkpLmk8PXI7KXQucG9wKCksZS5wdXNoKG4udnMpLHIrKztyZXR1cm4gcn1mdW5jdGlvbiBHc3IoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIHQuYmFyeWNlbnRlcjxyLmJhcnljZW50ZXI/LTE6dC5iYXJ5Y2VudGVyPnIuYmFyeWNlbnRlcj8xOmU/ci5pLXQuaTp0Lmktci5pfX19KTt2YXIgZHNlPUgoKF9Rbixwc2UpPT57dmFyIHAwPXFuKCksV3NyPWFzZSgpLFlzcj1sc2UoKSxqc3I9aHNlKCk7cHNlLmV4cG9ydHM9ZnNlO2Z1bmN0aW9uIGZzZShlLHQscixuKXt2YXIgaT1lLmNoaWxkcmVuKHQpLG89ZS5ub2RlKHQpLGE9bz9vLmJvcmRlckxlZnQ6dm9pZCAwLHM9bz9vLmJvcmRlclJpZ2h0OnZvaWQgMCxsPXt9O2EmJihpPXAwLmZpbHRlcihpLGZ1bmN0aW9uKGQpe3JldHVybiBkIT09YSYmZCE9PXN9KSk7dmFyIGM9V3NyKGUsaSk7cDAuZm9yRWFjaChjLGZ1bmN0aW9uKGQpe2lmKGUuY2hpbGRyZW4oZC52KS5sZW5ndGgpe3ZhciBnPWZzZShlLGQudixyLG4pO2xbZC52XT1nLHAwLmhhcyhnLCJiYXJ5Y2VudGVyIikmJiRzcihkLGcpfX0pO3ZhciB1PVlzcihjLHIpO1hzcih1LGwpO3ZhciBoPWpzcih1LG4pO2lmKGEmJihoLnZzPXAwLmZsYXR0ZW4oW2EsaC52cyxzXSwhMCksZS5wcmVkZWNlc3NvcnMoYSkubGVuZ3RoKSl7dmFyIGY9ZS5ub2RlKGUucHJlZGVjZXNzb3JzKGEpWzBdKSxwPWUubm9kZShlLnByZWRlY2Vzc29ycyhzKVswXSk7cDAuaGFzKGgsImJhcnljZW50ZXIiKXx8KGguYmFyeWNlbnRlcj0wLGgud2VpZ2h0PTApLGguYmFyeWNlbnRlcj0oaC5iYXJ5Y2VudGVyKmgud2VpZ2h0K2Yub3JkZXIrcC5vcmRlcikvKGgud2VpZ2h0KzIpLGgud2VpZ2h0Kz0yfXJldHVybiBofWZ1bmN0aW9uIFhzcihlLHQpe3AwLmZvckVhY2goZSxmdW5jdGlvbihyKXtyLnZzPXAwLmZsYXR0ZW4oci52cy5tYXAoZnVuY3Rpb24obil7cmV0dXJuIHRbbl0/dFtuXS52czpufSksITApfSl9ZnVuY3Rpb24gJHNyKGUsdCl7cDAuaXNVbmRlZmluZWQoZS5iYXJ5Y2VudGVyKT8oZS5iYXJ5Y2VudGVyPXQuYmFyeWNlbnRlcixlLndlaWdodD10LndlaWdodCk6KGUuYmFyeWNlbnRlcj0oZS5iYXJ5Y2VudGVyKmUud2VpZ2h0K3QuYmFyeWNlbnRlcip0LndlaWdodCkvKGUud2VpZ2h0K3Qud2VpZ2h0KSxlLndlaWdodCs9dC53ZWlnaHQpfX0pO3ZhciBnc2U9SCgoeVFuLG1zZSk9Pnt2YXIgSzQ9cW4oKSxLc3I9VWMoKS5HcmFwaDttc2UuZXhwb3J0cz1ac3I7ZnVuY3Rpb24gWnNyKGUsdCxyKXt2YXIgbj1Kc3IoZSksaT1uZXcgS3NyKHtjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyb290Om59KS5zZXREZWZhdWx0Tm9kZUxhYmVsKGZ1bmN0aW9uKG8pe3JldHVybiBlLm5vZGUobyl9KTtyZXR1cm4gSzQuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24obyl7dmFyIGE9ZS5ub2RlKG8pLHM9ZS5wYXJlbnQobyk7KGEucmFuaz09PXR8fGEubWluUmFuazw9dCYmdDw9YS5tYXhSYW5rKSYmKGkuc2V0Tm9kZShvKSxpLnNldFBhcmVudChvLHN8fG4pLEs0LmZvckVhY2goZVtyXShvKSxmdW5jdGlvbihsKXt2YXIgYz1sLnY9PT1vP2wudzpsLnYsdT1pLmVkZ2UoYyxvKSxoPUs0LmlzVW5kZWZpbmVkKHUpPzA6dS53ZWlnaHQ7aS5zZXRFZGdlKGMsbyx7d2VpZ2h0OmUuZWRnZShsKS53ZWlnaHQraH0pfSksSzQuaGFzKGEsIm1pblJhbmsiKSYmaS5zZXROb2RlKG8se2JvcmRlckxlZnQ6YS5ib3JkZXJMZWZ0W3RdLGJvcmRlclJpZ2h0OmEuYm9yZGVyUmlnaHRbdF19KSl9KSxpfWZ1bmN0aW9uIEpzcihlKXtmb3IodmFyIHQ7ZS5oYXNOb2RlKHQ9SzQudW5pcXVlSWQoIl9yb290IikpOyk7cmV0dXJuIHR9fSk7dmFyIHlzZT1IKCh2UW4sX3NlKT0+e3ZhciBRc3I9cW4oKTtfc2UuZXhwb3J0cz10bHI7ZnVuY3Rpb24gdGxyKGUsdCxyKXt2YXIgbj17fSxpO1Fzci5mb3JFYWNoKHIsZnVuY3Rpb24obyl7Zm9yKHZhciBhPWUucGFyZW50KG8pLHMsbDthOyl7aWYocz1lLnBhcmVudChhKSxzPyhsPW5bc10sbltzXT1hKToobD1pLGk9YSksbCYmbCE9PWEpe3Quc2V0RWRnZShsLGEpO3JldHVybn1hPXN9fSl9fSk7dmFyIFNzZT1IKCh4UW4sd3NlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgZDA9cW4oKSxlbHI9ZXNlKCkscmxyPW5zZSgpLG5scj1kc2UoKSxpbHI9Z3NlKCksb2xyPXlzZSgpLGFscj1VYygpLkdyYXBoLHZzZT1pcygpO3dzZS5leHBvcnRzPXNscjtmdW5jdGlvbiBzbHIoZSl7dmFyIHQ9dnNlLm1heFJhbmsoZSkscj14c2UoZSxkMC5yYW5nZSgxLHQrMSksImluRWRnZXMiKSxuPXhzZShlLGQwLnJhbmdlKHQtMSwtMSwtMSksIm91dEVkZ2VzIiksaT1lbHIoZSk7YnNlKGUsaSk7Zm9yKHZhciBvPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxhLHM9MCxsPTA7bDw0OysrcywrK2wpe2xscihzJTI/cjpuLHMlND49MiksaT12c2UuYnVpbGRMYXllck1hdHJpeChlKTt2YXIgYz1ybHIoZSxpKTtjPG8mJihsPTAsYT1kMC5jbG9uZURlZXAoaSksbz1jKX1ic2UoZSxhKX1mdW5jdGlvbiB4c2UoZSx0LHIpe3JldHVybiBkMC5tYXAodCxmdW5jdGlvbihuKXtyZXR1cm4gaWxyKGUsbixyKX0pfWZ1bmN0aW9uIGxscihlLHQpe3ZhciByPW5ldyBhbHI7ZDAuZm9yRWFjaChlLGZ1bmN0aW9uKG4pe3ZhciBpPW4uZ3JhcGgoKS5yb290LG89bmxyKG4saSxyLHQpO2QwLmZvckVhY2goby52cyxmdW5jdGlvbihhLHMpe24ubm9kZShhKS5vcmRlcj1zfSksb2xyKG4scixvLnZzKX0pfWZ1bmN0aW9uIGJzZShlLHQpe2QwLmZvckVhY2godCxmdW5jdGlvbihyKXtkMC5mb3JFYWNoKHIsZnVuY3Rpb24obixpKXtlLm5vZGUobikub3JkZXI9aX0pfSl9fSk7dmFyIFJzZT1IKChiUW4sa3NlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgWGU9cW4oKSxjbHI9VWMoKS5HcmFwaCx1bHI9aXMoKTtrc2UuZXhwb3J0cz17cG9zaXRpb25YOnBscixmaW5kVHlwZTFDb25mbGljdHM6TXNlLGZpbmRUeXBlMkNvbmZsaWN0czpFc2UsYWRkQ29uZmxpY3Q6Umx0LGhhc0NvbmZsaWN0OlRzZSx2ZXJ0aWNhbEFsaWdubWVudDpDc2UsaG9yaXpvbnRhbENvbXBhY3Rpb246QXNlLGFsaWduQ29vcmRpbmF0ZXM6SXNlLGZpbmRTbWFsbGVzdFdpZHRoQWxpZ25tZW50OlBzZSxiYWxhbmNlOkxzZX07ZnVuY3Rpb24gTXNlKGUsdCl7dmFyIHI9e307ZnVuY3Rpb24gbihpLG8pe3ZhciBhPTAscz0wLGw9aS5sZW5ndGgsYz1YZS5sYXN0KG8pO3JldHVybiBYZS5mb3JFYWNoKG8sZnVuY3Rpb24odSxoKXt2YXIgZj1obHIoZSx1KSxwPWY/ZS5ub2RlKGYpLm9yZGVyOmw7KGZ8fHU9PT1jKSYmKFhlLmZvckVhY2goby5zbGljZShzLGgrMSksZnVuY3Rpb24oZCl7WGUuZm9yRWFjaChlLnByZWRlY2Vzc29ycyhkKSxmdW5jdGlvbihnKXt2YXIgXz1lLm5vZGUoZykseT1fLm9yZGVyOyh5PGF8fHA8eSkmJiEoXy5kdW1teSYmZS5ub2RlKGQpLmR1bW15KSYmUmx0KHIsZyxkKX0pfSkscz1oKzEsYT1wKX0pLG99cmV0dXJuIFhlLnJlZHVjZSh0LG4pLHJ9ZnVuY3Rpb24gRXNlKGUsdCl7dmFyIHI9e307ZnVuY3Rpb24gbihvLGEscyxsLGMpe3ZhciB1O1hlLmZvckVhY2goWGUucmFuZ2UoYSxzKSxmdW5jdGlvbihoKXt1PW9baF0sZS5ub2RlKHUpLmR1bW15JiZYZS5mb3JFYWNoKGUucHJlZGVjZXNzb3JzKHUpLGZ1bmN0aW9uKGYpe3ZhciBwPWUubm9kZShmKTtwLmR1bW15JiYocC5vcmRlcjxsfHxwLm9yZGVyPmMpJiZSbHQocixmLHUpfSl9KX1mdW5jdGlvbiBpKG8sYSl7dmFyIHM9LTEsbCxjPTA7cmV0dXJuIFhlLmZvckVhY2goYSxmdW5jdGlvbih1LGgpe2lmKGUubm9kZSh1KS5kdW1teT09PSJib3JkZXIiKXt2YXIgZj1lLnByZWRlY2Vzc29ycyh1KTtmLmxlbmd0aCYmKGw9ZS5ub2RlKGZbMF0pLm9yZGVyLG4oYSxjLGgscyxsKSxjPWgscz1sKX1uKGEsYyxhLmxlbmd0aCxsLG8ubGVuZ3RoKX0pLGF9cmV0dXJuIFhlLnJlZHVjZSh0LGkpLHJ9ZnVuY3Rpb24gaGxyKGUsdCl7aWYoZS5ub2RlKHQpLmR1bW15KXJldHVybiBYZS5maW5kKGUucHJlZGVjZXNzb3JzKHQpLGZ1bmN0aW9uKHIpe3JldHVybiBlLm5vZGUocikuZHVtbXl9KX1mdW5jdGlvbiBSbHQoZSx0LHIpe2lmKHQ+cil7dmFyIG49dDt0PXIscj1ufXZhciBpPWVbdF07aXx8KGVbdF09aT17fSksaVtyXT0hMH1mdW5jdGlvbiBUc2UoZSx0LHIpe2lmKHQ+cil7dmFyIG49dDt0PXIscj1ufXJldHVybiBYZS5oYXMoZVt0XSxyKX1mdW5jdGlvbiBDc2UoZSx0LHIsbil7dmFyIGk9e30sbz17fSxhPXt9O3JldHVybiBYZS5mb3JFYWNoKHQsZnVuY3Rpb24ocyl7WGUuZm9yRWFjaChzLGZ1bmN0aW9uKGwsYyl7aVtsXT1sLG9bbF09bCxhW2xdPWN9KX0pLFhlLmZvckVhY2godCxmdW5jdGlvbihzKXt2YXIgbD0tMTtYZS5mb3JFYWNoKHMsZnVuY3Rpb24oYyl7dmFyIHU9bihjKTtpZih1Lmxlbmd0aCl7dT1YZS5zb3J0QnkodSxmdW5jdGlvbihnKXtyZXR1cm4gYVtnXX0pO2Zvcih2YXIgaD0odS5sZW5ndGgtMSkvMixmPU1hdGguZmxvb3IoaCkscD1NYXRoLmNlaWwoaCk7Zjw9cDsrK2Ype3ZhciBkPXVbZl07b1tjXT09PWMmJmw8YVtkXSYmIVRzZShyLGMsZCkmJihvW2RdPWMsb1tjXT1pW2NdPWlbZF0sbD1hW2RdKX19fSl9KSx7cm9vdDppLGFsaWduOm99fWZ1bmN0aW9uIEFzZShlLHQscixuLGkpe3ZhciBvPXt9LGE9ZmxyKGUsdCxyLGkpLHM9aT8iYm9yZGVyTGVmdCI6ImJvcmRlclJpZ2h0IjtmdW5jdGlvbiBsKGgsZil7Zm9yKHZhciBwPWEubm9kZXMoKSxkPXAucG9wKCksZz17fTtkOylnW2RdP2goZCk6KGdbZF09ITAscC5wdXNoKGQpLHA9cC5jb25jYXQoZihkKSkpLGQ9cC5wb3AoKX1mdW5jdGlvbiBjKGgpe29baF09YS5pbkVkZ2VzKGgpLnJlZHVjZShmdW5jdGlvbihmLHApe3JldHVybiBNYXRoLm1heChmLG9bcC52XSthLmVkZ2UocCkpfSwwKX1mdW5jdGlvbiB1KGgpe3ZhciBmPWEub3V0RWRnZXMoaCkucmVkdWNlKGZ1bmN0aW9uKGQsZyl7cmV0dXJuIE1hdGgubWluKGQsb1tnLnddLWEuZWRnZShnKSl9LE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkscD1lLm5vZGUoaCk7ZiE9PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSYmcC5ib3JkZXJUeXBlIT09cyYmKG9baF09TWF0aC5tYXgob1toXSxmKSl9cmV0dXJuIGwoYyxhLnByZWRlY2Vzc29ycy5iaW5kKGEpKSxsKHUsYS5zdWNjZXNzb3JzLmJpbmQoYSkpLFhlLmZvckVhY2gobixmdW5jdGlvbihoKXtvW2hdPW9bcltoXV19KSxvfWZ1bmN0aW9uIGZscihlLHQscixuKXt2YXIgaT1uZXcgY2xyLG89ZS5ncmFwaCgpLGE9ZGxyKG8ubm9kZXNlcCxvLmVkZ2VzZXAsbik7cmV0dXJuIFhlLmZvckVhY2godCxmdW5jdGlvbihzKXt2YXIgbDtYZS5mb3JFYWNoKHMsZnVuY3Rpb24oYyl7dmFyIHU9cltjXTtpZihpLnNldE5vZGUodSksbCl7dmFyIGg9cltsXSxmPWkuZWRnZShoLHUpO2kuc2V0RWRnZShoLHUsTWF0aC5tYXgoYShlLGMsbCksZnx8MCkpfWw9Y30pfSksaX1mdW5jdGlvbiBQc2UoZSx0KXtyZXR1cm4gWGUubWluQnkoWGUudmFsdWVzKHQpLGZ1bmN0aW9uKHIpe3ZhciBuPU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxpPU51bWJlci5QT1NJVElWRV9JTkZJTklUWTtyZXR1cm4gWGUuZm9ySW4ocixmdW5jdGlvbihvLGEpe3ZhciBzPW1scihlLGEpLzI7bj1NYXRoLm1heChvK3MsbiksaT1NYXRoLm1pbihvLXMsaSl9KSxuLWl9KX1mdW5jdGlvbiBJc2UoZSx0KXt2YXIgcj1YZS52YWx1ZXModCksbj1YZS5taW4ociksaT1YZS5tYXgocik7WGUuZm9yRWFjaChbInUiLCJkIl0sZnVuY3Rpb24obyl7WGUuZm9yRWFjaChbImwiLCJyIl0sZnVuY3Rpb24oYSl7dmFyIHM9bythLGw9ZVtzXSxjO2lmKGwhPT10KXt2YXIgdT1YZS52YWx1ZXMobCk7Yz1hPT09ImwiP24tWGUubWluKHUpOmktWGUubWF4KHUpLGMmJihlW3NdPVhlLm1hcFZhbHVlcyhsLGZ1bmN0aW9uKGgpe3JldHVybiBoK2N9KSl9fSl9KX1mdW5jdGlvbiBMc2UoZSx0KXtyZXR1cm4gWGUubWFwVmFsdWVzKGUudWwsZnVuY3Rpb24ocixuKXtpZih0KXJldHVybiBlW3QudG9Mb3dlckNhc2UoKV1bbl07dmFyIGk9WGUuc29ydEJ5KFhlLm1hcChlLG4pKTtyZXR1cm4oaVsxXStpWzJdKS8yfSl9ZnVuY3Rpb24gcGxyKGUpe3ZhciB0PXVsci5idWlsZExheWVyTWF0cml4KGUpLHI9WGUubWVyZ2UoTXNlKGUsdCksRXNlKGUsdCkpLG49e30saTtYZS5mb3JFYWNoKFsidSIsImQiXSxmdW5jdGlvbihhKXtpPWE9PT0idSI/dDpYZS52YWx1ZXModCkucmV2ZXJzZSgpLFhlLmZvckVhY2goWyJsIiwiciJdLGZ1bmN0aW9uKHMpe3M9PT0iciImJihpPVhlLm1hcChpLGZ1bmN0aW9uKGgpe3JldHVybiBYZS52YWx1ZXMoaCkucmV2ZXJzZSgpfSkpO3ZhciBsPShhPT09InUiP2UucHJlZGVjZXNzb3JzOmUuc3VjY2Vzc29ycykuYmluZChlKSxjPUNzZShlLGkscixsKSx1PUFzZShlLGksYy5yb290LGMuYWxpZ24scz09PSJyIik7cz09PSJyIiYmKHU9WGUubWFwVmFsdWVzKHUsZnVuY3Rpb24oaCl7cmV0dXJuLWh9KSksblthK3NdPXV9KX0pO3ZhciBvPVBzZShlLG4pO3JldHVybiBJc2UobixvKSxMc2UobixlLmdyYXBoKCkuYWxpZ24pfWZ1bmN0aW9uIGRscihlLHQscil7cmV0dXJuIGZ1bmN0aW9uKG4saSxvKXt2YXIgYT1uLm5vZGUoaSkscz1uLm5vZGUobyksbD0wLGM7aWYobCs9YS53aWR0aC8yLFhlLmhhcyhhLCJsYWJlbHBvcyIpKXN3aXRjaChhLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkpe2Nhc2UibCI6Yz0tYS53aWR0aC8yO2JyZWFrO2Nhc2UiciI6Yz1hLndpZHRoLzI7YnJlYWt9aWYoYyYmKGwrPXI/YzotYyksYz0wLGwrPShhLmR1bW15P3Q6ZSkvMixsKz0ocy5kdW1teT90OmUpLzIsbCs9cy53aWR0aC8yLFhlLmhhcyhzLCJsYWJlbHBvcyIpKXN3aXRjaChzLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkpe2Nhc2UibCI6Yz1zLndpZHRoLzI7YnJlYWs7Y2FzZSJyIjpjPS1zLndpZHRoLzI7YnJlYWt9cmV0dXJuIGMmJihsKz1yP2M6LWMpLGM9MCxsfX1mdW5jdGlvbiBtbHIoZSx0KXtyZXR1cm4gZS5ub2RlKHQpLndpZHRofX0pO3ZhciBPc2U9SCgod1FuLERzZSk9PnsidXNlIHN0cmljdCI7dmFyIFo0PXFuKCksTnNlPWlzKCksZ2xyPVJzZSgpLnBvc2l0aW9uWDtEc2UuZXhwb3J0cz1fbHI7ZnVuY3Rpb24gX2xyKGUpe2U9TnNlLmFzTm9uQ29tcG91bmRHcmFwaChlKSx5bHIoZSksWjQuZm9yRWFjaChnbHIoZSksZnVuY3Rpb24odCxyKXtlLm5vZGUocikueD10fSl9ZnVuY3Rpb24geWxyKGUpe3ZhciB0PU5zZS5idWlsZExheWVyTWF0cml4KGUpLHI9ZS5ncmFwaCgpLnJhbmtzZXAsbj0wO1o0LmZvckVhY2godCxmdW5jdGlvbihpKXt2YXIgbz1aNC5tYXgoWjQubWFwKGksZnVuY3Rpb24oYSl7cmV0dXJuIGUubm9kZShhKS5oZWlnaHR9KSk7WjQuZm9yRWFjaChpLGZ1bmN0aW9uKGEpe2Uubm9kZShhKS55PW4rby8yfSksbis9bytyfSl9fSk7dmFyIFVzZT1IKChTUW4sVnNlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgaXI9cW4oKSx6c2U9eGFlKCksRnNlPUNhZSgpLHZscj1WYWUoKSx4bHI9aXMoKS5ub3JtYWxpemVSYW5rcyxibHI9cWFlKCksd2xyPWlzKCkucmVtb3ZlRW1wdHlSYW5rcyxCc2U9WWFlKCksU2xyPSRhZSgpLEhzZT1RYWUoKSxNbHI9U3NlKCksRWxyPU9zZSgpLG0wPWlzKCksVGxyPVVjKCkuR3JhcGg7VnNlLmV4cG9ydHM9Q2xyO2Z1bmN0aW9uIENscihlLHQpe3ZhciByPXQmJnQuZGVidWdUaW1pbmc/bTAudGltZTptMC5ub3RpbWU7cigibGF5b3V0IixmdW5jdGlvbigpe3ZhciBuPXIoIiAgYnVpbGRMYXlvdXRHcmFwaCIsZnVuY3Rpb24oKXtyZXR1cm4gRmxyKGUpfSk7cigiICBydW5MYXlvdXQiLGZ1bmN0aW9uKCl7QWxyKG4scil9KSxyKCIgIHVwZGF0ZUlucHV0R3JhcGgiLGZ1bmN0aW9uKCl7UGxyKGUsbil9KX0pfWZ1bmN0aW9uIEFscihlLHQpe3QoIiAgICBtYWtlU3BhY2VGb3JFZGdlTGFiZWxzIixmdW5jdGlvbigpe0JscihlKX0pLHQoIiAgICByZW1vdmVTZWxmRWRnZXMiLGZ1bmN0aW9uKCl7WGxyKGUpfSksdCgiICAgIGFjeWNsaWMiLGZ1bmN0aW9uKCl7enNlLnJ1bihlKX0pLHQoIiAgICBuZXN0aW5nR3JhcGgucnVuIixmdW5jdGlvbigpe0JzZS5ydW4oZSl9KSx0KCIgICAgcmFuayIsZnVuY3Rpb24oKXt2bHIobTAuYXNOb25Db21wb3VuZEdyYXBoKGUpKX0pLHQoIiAgICBpbmplY3RFZGdlTGFiZWxQcm94aWVzIixmdW5jdGlvbigpe0hscihlKX0pLHQoIiAgICByZW1vdmVFbXB0eVJhbmtzIixmdW5jdGlvbigpe3dscihlKX0pLHQoIiAgICBuZXN0aW5nR3JhcGguY2xlYW51cCIsZnVuY3Rpb24oKXtCc2UuY2xlYW51cChlKX0pLHQoIiAgICBub3JtYWxpemVSYW5rcyIsZnVuY3Rpb24oKXt4bHIoZSl9KSx0KCIgICAgYXNzaWduUmFua01pbk1heCIsZnVuY3Rpb24oKXtWbHIoZSl9KSx0KCIgICAgcmVtb3ZlRWRnZUxhYmVsUHJveGllcyIsZnVuY3Rpb24oKXtVbHIoZSl9KSx0KCIgICAgbm9ybWFsaXplLnJ1biIsZnVuY3Rpb24oKXtGc2UucnVuKGUpfSksdCgiICAgIHBhcmVudER1bW15Q2hhaW5zIixmdW5jdGlvbigpe2JscihlKX0pLHQoIiAgICBhZGRCb3JkZXJTZWdtZW50cyIsZnVuY3Rpb24oKXtTbHIoZSl9KSx0KCIgICAgb3JkZXIiLGZ1bmN0aW9uKCl7TWxyKGUpfSksdCgiICAgIGluc2VydFNlbGZFZGdlcyIsZnVuY3Rpb24oKXskbHIoZSl9KSx0KCIgICAgYWRqdXN0Q29vcmRpbmF0ZVN5c3RlbSIsZnVuY3Rpb24oKXtIc2UuYWRqdXN0KGUpfSksdCgiICAgIHBvc2l0aW9uIixmdW5jdGlvbigpe0VscihlKX0pLHQoIiAgICBwb3NpdGlvblNlbGZFZGdlcyIsZnVuY3Rpb24oKXtLbHIoZSl9KSx0KCIgICAgcmVtb3ZlQm9yZGVyTm9kZXMiLGZ1bmN0aW9uKCl7amxyKGUpfSksdCgiICAgIG5vcm1hbGl6ZS51bmRvIixmdW5jdGlvbigpe0ZzZS51bmRvKGUpfSksdCgiICAgIGZpeHVwRWRnZUxhYmVsQ29vcmRzIixmdW5jdGlvbigpe1dscihlKX0pLHQoIiAgICB1bmRvQ29vcmRpbmF0ZVN5c3RlbSIsZnVuY3Rpb24oKXtIc2UudW5kbyhlKX0pLHQoIiAgICB0cmFuc2xhdGVHcmFwaCIsZnVuY3Rpb24oKXtxbHIoZSl9KSx0KCIgICAgYXNzaWduTm9kZUludGVyc2VjdHMiLGZ1bmN0aW9uKCl7R2xyKGUpfSksdCgiICAgIHJldmVyc2VQb2ludHMiLGZ1bmN0aW9uKCl7WWxyKGUpfSksdCgiICAgIGFjeWNsaWMudW5kbyIsZnVuY3Rpb24oKXt6c2UudW5kbyhlKX0pfWZ1bmN0aW9uIFBscihlLHQpe2lyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHIpe3ZhciBuPWUubm9kZShyKSxpPXQubm9kZShyKTtuJiYobi54PWkueCxuLnk9aS55LHQuY2hpbGRyZW4ocikubGVuZ3RoJiYobi53aWR0aD1pLndpZHRoLG4uaGVpZ2h0PWkuaGVpZ2h0KSl9KSxpci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbihyKXt2YXIgbj1lLmVkZ2UociksaT10LmVkZ2Uocik7bi5wb2ludHM9aS5wb2ludHMsaXIuaGFzKGksIngiKSYmKG4ueD1pLngsbi55PWkueSl9KSxlLmdyYXBoKCkud2lkdGg9dC5ncmFwaCgpLndpZHRoLGUuZ3JhcGgoKS5oZWlnaHQ9dC5ncmFwaCgpLmhlaWdodH12YXIgSWxyPVsibm9kZXNlcCIsImVkZ2VzZXAiLCJyYW5rc2VwIiwibWFyZ2lueCIsIm1hcmdpbnkiXSxMbHI9e3JhbmtzZXA6NTAsZWRnZXNlcDoyMCxub2Rlc2VwOjUwLHJhbmtkaXI6InRiIn0sa2xyPVsiYWN5Y2xpY2VyIiwicmFua2VyIiwicmFua2RpciIsImFsaWduIl0sUmxyPVsid2lkdGgiLCJoZWlnaHQiXSxObHI9e3dpZHRoOjAsaGVpZ2h0OjB9LERscj1bIm1pbmxlbiIsIndlaWdodCIsIndpZHRoIiwiaGVpZ2h0IiwibGFiZWxvZmZzZXQiXSxPbHI9e21pbmxlbjoxLHdlaWdodDoxLHdpZHRoOjAsaGVpZ2h0OjAsbGFiZWxvZmZzZXQ6MTAsbGFiZWxwb3M6InIifSx6bHI9WyJsYWJlbHBvcyJdO2Z1bmN0aW9uIEZscihlKXt2YXIgdD1uZXcgVGxyKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkscj1EbHQoZS5ncmFwaCgpKTtyZXR1cm4gdC5zZXRHcmFwaChpci5tZXJnZSh7fSxMbHIsTmx0KHIsSWxyKSxpci5waWNrKHIsa2xyKSkpLGlyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKG4pe3ZhciBpPURsdChlLm5vZGUobikpO3Quc2V0Tm9kZShuLGlyLmRlZmF1bHRzKE5sdChpLFJsciksTmxyKSksdC5zZXRQYXJlbnQobixlLnBhcmVudChuKSl9KSxpci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbihuKXt2YXIgaT1EbHQoZS5lZGdlKG4pKTt0LnNldEVkZ2Uobixpci5tZXJnZSh7fSxPbHIsTmx0KGksRGxyKSxpci5waWNrKGksemxyKSkpfSksdH1mdW5jdGlvbiBCbHIoZSl7dmFyIHQ9ZS5ncmFwaCgpO3QucmFua3NlcC89Mixpci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbihyKXt2YXIgbj1lLmVkZ2Uocik7bi5taW5sZW4qPTIsbi5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpIT09ImMiJiYodC5yYW5rZGlyPT09IlRCInx8dC5yYW5rZGlyPT09IkJUIj9uLndpZHRoKz1uLmxhYmVsb2Zmc2V0Om4uaGVpZ2h0Kz1uLmxhYmVsb2Zmc2V0KX0pfWZ1bmN0aW9uIEhscihlKXtpci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLmVkZ2UodCk7aWYoci53aWR0aCYmci5oZWlnaHQpe3ZhciBuPWUubm9kZSh0LnYpLGk9ZS5ub2RlKHQudyksbz17cmFuazooaS5yYW5rLW4ucmFuaykvMituLnJhbmssZTp0fTttMC5hZGREdW1teU5vZGUoZSwiZWRnZS1wcm94eSIsbywiX2VwIil9fSl9ZnVuY3Rpb24gVmxyKGUpe3ZhciB0PTA7aXIuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24ocil7dmFyIG49ZS5ub2RlKHIpO24uYm9yZGVyVG9wJiYobi5taW5SYW5rPWUubm9kZShuLmJvcmRlclRvcCkucmFuayxuLm1heFJhbms9ZS5ub2RlKG4uYm9yZGVyQm90dG9tKS5yYW5rLHQ9aXIubWF4KHQsbi5tYXhSYW5rKSl9KSxlLmdyYXBoKCkubWF4UmFuaz10fWZ1bmN0aW9uIFVscihlKXtpci5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLm5vZGUodCk7ci5kdW1teT09PSJlZGdlLXByb3h5IiYmKGUuZWRnZShyLmUpLmxhYmVsUmFuaz1yLnJhbmssZS5yZW1vdmVOb2RlKHQpKX0pfWZ1bmN0aW9uIHFscihlKXt2YXIgdD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkscj0wLG49TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLGk9MCxvPWUuZ3JhcGgoKSxhPW8ubWFyZ2lueHx8MCxzPW8ubWFyZ2lueXx8MDtmdW5jdGlvbiBsKGMpe3ZhciB1PWMueCxoPWMueSxmPWMud2lkdGgscD1jLmhlaWdodDt0PU1hdGgubWluKHQsdS1mLzIpLHI9TWF0aC5tYXgocix1K2YvMiksbj1NYXRoLm1pbihuLGgtcC8yKSxpPU1hdGgubWF4KGksaCtwLzIpfWlyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKGMpe2woZS5ub2RlKGMpKX0pLGlyLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKGMpe3ZhciB1PWUuZWRnZShjKTtpci5oYXModSwieCIpJiZsKHUpfSksdC09YSxuLT1zLGlyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKGMpe3ZhciB1PWUubm9kZShjKTt1LngtPXQsdS55LT1ufSksaXIuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24oYyl7dmFyIHU9ZS5lZGdlKGMpO2lyLmZvckVhY2godS5wb2ludHMsZnVuY3Rpb24oaCl7aC54LT10LGgueS09bn0pLGlyLmhhcyh1LCJ4IikmJih1LngtPXQpLGlyLmhhcyh1LCJ5IikmJih1LnktPW4pfSksby53aWR0aD1yLXQrYSxvLmhlaWdodD1pLW4rc31mdW5jdGlvbiBHbHIoZSl7aXIuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24odCl7dmFyIHI9ZS5lZGdlKHQpLG49ZS5ub2RlKHQudiksaT1lLm5vZGUodC53KSxvLGE7ci5wb2ludHM/KG89ci5wb2ludHNbMF0sYT1yLnBvaW50c1tyLnBvaW50cy5sZW5ndGgtMV0pOihyLnBvaW50cz1bXSxvPWksYT1uKSxyLnBvaW50cy51bnNoaWZ0KG0wLmludGVyc2VjdFJlY3QobixvKSksci5wb2ludHMucHVzaChtMC5pbnRlcnNlY3RSZWN0KGksYSkpfSl9ZnVuY3Rpb24gV2xyKGUpe2lyLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe3ZhciByPWUuZWRnZSh0KTtpZihpci5oYXMociwieCIpKXN3aXRjaCgoci5sYWJlbHBvcz09PSJsInx8ci5sYWJlbHBvcz09PSJyIikmJihyLndpZHRoLT1yLmxhYmVsb2Zmc2V0KSxyLmxhYmVscG9zKXtjYXNlImwiOnIueC09ci53aWR0aC8yK3IubGFiZWxvZmZzZXQ7YnJlYWs7Y2FzZSJyIjpyLngrPXIud2lkdGgvMityLmxhYmVsb2Zmc2V0O2JyZWFrfX0pfWZ1bmN0aW9uIFlscihlKXtpci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLmVkZ2UodCk7ci5yZXZlcnNlZCYmci5wb2ludHMucmV2ZXJzZSgpfSl9ZnVuY3Rpb24gamxyKGUpe2lyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHQpe2lmKGUuY2hpbGRyZW4odCkubGVuZ3RoKXt2YXIgcj1lLm5vZGUodCksbj1lLm5vZGUoci5ib3JkZXJUb3ApLGk9ZS5ub2RlKHIuYm9yZGVyQm90dG9tKSxvPWUubm9kZShpci5sYXN0KHIuYm9yZGVyTGVmdCkpLGE9ZS5ub2RlKGlyLmxhc3Qoci5ib3JkZXJSaWdodCkpO3Iud2lkdGg9TWF0aC5hYnMoYS54LW8ueCksci5oZWlnaHQ9TWF0aC5hYnMoaS55LW4ueSksci54PW8ueCtyLndpZHRoLzIsci55PW4ueStyLmhlaWdodC8yfX0pLGlyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHQpe2Uubm9kZSh0KS5kdW1teT09PSJib3JkZXIiJiZlLnJlbW92ZU5vZGUodCl9KX1mdW5jdGlvbiBYbHIoZSl7aXIuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24odCl7aWYodC52PT09dC53KXt2YXIgcj1lLm5vZGUodC52KTtyLnNlbGZFZGdlc3x8KHIuc2VsZkVkZ2VzPVtdKSxyLnNlbGZFZGdlcy5wdXNoKHtlOnQsbGFiZWw6ZS5lZGdlKHQpfSksZS5yZW1vdmVFZGdlKHQpfX0pfWZ1bmN0aW9uICRscihlKXt2YXIgdD1tMC5idWlsZExheWVyTWF0cml4KGUpO2lyLmZvckVhY2godCxmdW5jdGlvbihyKXt2YXIgbj0wO2lyLmZvckVhY2gocixmdW5jdGlvbihpLG8pe3ZhciBhPWUubm9kZShpKTthLm9yZGVyPW8rbixpci5mb3JFYWNoKGEuc2VsZkVkZ2VzLGZ1bmN0aW9uKHMpe20wLmFkZER1bW15Tm9kZShlLCJzZWxmZWRnZSIse3dpZHRoOnMubGFiZWwud2lkdGgsaGVpZ2h0OnMubGFiZWwuaGVpZ2h0LHJhbms6YS5yYW5rLG9yZGVyOm8rICsrbixlOnMuZSxsYWJlbDpzLmxhYmVsfSwiX3NlIil9KSxkZWxldGUgYS5zZWxmRWRnZXN9KX0pfWZ1bmN0aW9uIEtscihlKXtpci5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLm5vZGUodCk7aWYoci5kdW1teT09PSJzZWxmZWRnZSIpe3ZhciBuPWUubm9kZShyLmUudiksaT1uLngrbi53aWR0aC8yLG89bi55LGE9ci54LWkscz1uLmhlaWdodC8yO2Uuc2V0RWRnZShyLmUsci5sYWJlbCksZS5yZW1vdmVOb2RlKHQpLHIubGFiZWwucG9pbnRzPVt7eDppKzIqYS8zLHk6by1zfSx7eDppKzUqYS82LHk6by1zfSx7eDppK2EseTpvfSx7eDppKzUqYS82LHk6bytzfSx7eDppKzIqYS8zLHk6bytzfV0sci5sYWJlbC54PXIueCxyLmxhYmVsLnk9ci55fX0pfWZ1bmN0aW9uIE5sdChlLHQpe3JldHVybiBpci5tYXBWYWx1ZXMoaXIucGljayhlLHQpLE51bWJlcil9ZnVuY3Rpb24gRGx0KGUpe3ZhciB0PXt9O3JldHVybiBpci5mb3JFYWNoKGUsZnVuY3Rpb24ocixuKXt0W24udG9Mb3dlckNhc2UoKV09cn0pLHR9fSk7dmFyIEdzZT1IKChNUW4scXNlKT0+e3ZhciBwSD1xbigpLFpscj1pcygpLEpscj1VYygpLkdyYXBoO3FzZS5leHBvcnRzPXtkZWJ1Z09yZGVyaW5nOlFscn07ZnVuY3Rpb24gUWxyKGUpe3ZhciB0PVpsci5idWlsZExheWVyTWF0cml4KGUpLHI9bmV3IEpscih7Y29tcG91bmQ6ITAsbXVsdGlncmFwaDohMH0pLnNldEdyYXBoKHt9KTtyZXR1cm4gcEguZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24obil7ci5zZXROb2RlKG4se2xhYmVsOm59KSxyLnNldFBhcmVudChuLCJsYXllciIrZS5ub2RlKG4pLnJhbmspfSkscEguZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24obil7ci5zZXRFZGdlKG4udixuLncse30sbi5uYW1lKX0pLHBILmZvckVhY2godCxmdW5jdGlvbihuLGkpe3ZhciBvPSJsYXllciIraTtyLnNldE5vZGUobyx7cmFuazoic2FtZSJ9KSxwSC5yZWR1Y2UobixmdW5jdGlvbihhLHMpe3JldHVybiByLnNldEVkZ2UoYSxzLHtzdHlsZToiaW52aXMifSksc30pfSkscn19KTt2YXIgWXNlPUgoKEVRbixXc2UpPT57V3NlLmV4cG9ydHM9IjAuOC41In0pO3ZhciBPbHQ9SCgoVFFuLGpzZSk9Pntqc2UuZXhwb3J0cz17Z3JhcGhsaWI6VWMoKSxsYXlvdXQ6VXNlKCksZGVidWc6R3NlKCksdXRpbDp7dGltZTppcygpLnRpbWUsbm90aW1lOmlzKCkubm90aW1lfSx2ZXJzaW9uOllzZSgpfX0pO3ZhciBWZHQ9RWUoSGR0KCksMSkse19fZXh0ZW5kczpkX3IsX19hc3NpZ246bV9yLF9fcmVzdDpnX3IsX19kZWNvcmF0ZTpFLF9fcGFyYW06X19yLF9fZXNEZWNvcmF0ZTp5X3IsX19ydW5Jbml0aWFsaXplcnM6dl9yLF9fcHJvcEtleTp4X3IsX19zZXRGdW5jdGlvbk5hbWU6Yl9yLF9fbWV0YWRhdGE6dyxfX2F3YWl0ZXI6d19yLF9fZ2VuZXJhdG9yOlNfcixfX2V4cG9ydFN0YXI6TV9yLF9fY3JlYXRlQmluZGluZzpFX3IsX192YWx1ZXM6VF9yLF9fcmVhZDpDX3IsX19zcHJlYWQ6QV9yLF9fc3ByZWFkQXJyYXlzOlBfcixfX3NwcmVhZEFycmF5OklfcixfX2F3YWl0OkxfcixfX2FzeW5jR2VuZXJhdG9yOmtfcixfX2FzeW5jRGVsZWdhdG9yOlJfcixfX2FzeW5jVmFsdWVzOk5fcixfX21ha2VUZW1wbGF0ZU9iamVjdDpEX3IsX19pbXBvcnRTdGFyOk9fcixfX2ltcG9ydERlZmF1bHQ6el9yLF9fY2xhc3NQcml2YXRlRmllbGRHZXQ6Rl9yLF9fY2xhc3NQcml2YXRlRmllbGRTZXQ6Ql9yLF9fY2xhc3NQcml2YXRlRmllbGRJbjpIX3J9PVZkdC5kZWZhdWx0O2Z1bmN0aW9uIHl0KGUpe3JldHVybiB0PT57aWYoZSlpZih0Lmhhc093blByb3BlcnR5KCJpcyIpKXtpZihlIT09dC5pcyl0aHJvdyBuZXcgRXJyb3IoYGN1c3RvbSBlbGVtZW50IHRhZyBuYW1lcyBkbyBub3QgbWF0Y2g6ICgke2V9ICE9PSAke3QuaXN9KWApfWVsc2UgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImlzIix7dmFsdWU6ZX0pO3dpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUodC5pcyx0KX19ZnVuY3Rpb24gVWR0KGUsdCxyKXtlLmNvbnN0cnVjdG9yLmhhc093blByb3BlcnR5KCJwcm9wZXJ0aWVzIil8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLmNvbnN0cnVjdG9yLCJwcm9wZXJ0aWVzIix7dmFsdWU6e319KSxlLmNvbnN0cnVjdG9yLnByb3BlcnRpZXNbdF09T2JqZWN0LmFzc2lnbih7fSxlLmNvbnN0cnVjdG9yLnByb3BlcnRpZXNbdF0scil9ZnVuY3Rpb24gQShlKXtyZXR1cm4odCxyKT0+e1VkdCh0LHIsZSl9fWZ1bmN0aW9uIEJ0KC4uLmUpe3JldHVybih0LHIpPT57dC5jb25zdHJ1Y3Rvci5oYXNPd25Qcm9wZXJ0eSgib2JzZXJ2ZXJzIil8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmNvbnN0cnVjdG9yLCJvYnNlcnZlcnMiLHt2YWx1ZTpbXX0pLHQuY29uc3RydWN0b3Iub2JzZXJ2ZXJzLnB1c2goYCR7cn0oJHtlLmpvaW4oIiwiKX0pYCl9fWZ1bmN0aW9uIFJ0KGUsLi4udCl7cmV0dXJuKHIsbixpKT0+e2xldCBvPWBfX2NvbXB1dGUke259YDtPYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTppLmdldH0pLGkuZ2V0PXZvaWQgMDtsZXQgYT1bZSwuLi50XS5qb2luKCIsIik7VWR0KHIsbix7Y29tcHV0ZWQ6YCR7b30oJHthfSlgfSl9fXZhciBVX3I9cWR0KChlLHQpPT5lLnF1ZXJ5U2VsZWN0b3IodCkpLHFfcj1xZHQoKGUsdCk9PmUucXVlcnlTZWxlY3RvckFsbCh0KSk7ZnVuY3Rpb24gcWR0KGUpe3JldHVybiB0PT4ocixuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG4se2dldCgpe3JldHVybiBlKHRoaXMuc2hhZG93Um9vdCx0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX19d2luZG93LkpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZX07dmFyIFR2ZT0vKHVybFwoKShbXildKikoXCkpL2csQ3ZlPS8oXlwvW15cL10pfCheIyl8KF5bXHctXGRdKjopLyxJSSxKcztmdW5jdGlvbiBjXyhlLHQpe2lmKGUmJkN2ZS50ZXN0KGUpfHxlPT09Ii8vIilyZXR1cm4gZTtpZihJST09PXZvaWQgMCl7SUk9ITE7dHJ5e2xldCByPW5ldyBVUkwoImIiLCJodHRwOi8vYSIpO3IucGF0aG5hbWU9ImMlMjBkIixJST1yLmhyZWY9PT0iaHR0cDovL2EvYyUyMGQifWNhdGNoKHIpe319aWYodHx8KHQ9ZG9jdW1lbnQuYmFzZVVSSXx8d2luZG93LmxvY2F0aW9uLmhyZWYpLElJKXRyeXtyZXR1cm4gbmV3IFVSTChlLHQpLmhyZWZ9Y2F0Y2gocil7cmV0dXJuIGV9cmV0dXJuIEpzfHwoSnM9ZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCJ0ZW1wIiksSnMuYmFzZT1Kcy5jcmVhdGVFbGVtZW50KCJiYXNlIiksSnMuaGVhZC5hcHBlbmRDaGlsZChKcy5iYXNlKSxKcy5hbmNob3I9SnMuY3JlYXRlRWxlbWVudCgiYSIpLEpzLmJvZHkuYXBwZW5kQ2hpbGQoSnMuYW5jaG9yKSksSnMuYmFzZS5ocmVmPXQsSnMuYW5jaG9yLmhyZWY9ZSxKcy5hbmNob3IuaHJlZnx8ZX1mdW5jdGlvbiBITShlLHQpe3JldHVybiBlLnJlcGxhY2UoVHZlLGZ1bmN0aW9uKHIsbixpLG8pe3JldHVybiBuKyInIitjXyhpLnJlcGxhY2UoL1siJ10vZywiIiksdCkrIiciK299KX1mdW5jdGlvbiBDeChlKXtyZXR1cm4gZS5zdWJzdHJpbmcoMCxlLmxhc3RJbmRleE9mKCIvIikrMSl9dmFyIHVfPSF3aW5kb3cuU2hhZHlET018fCF3aW5kb3cuU2hhZHlET00uaW5Vc2UsJF9yPUJvb2xlYW4oIXdpbmRvdy5TaGFkeUNTU3x8d2luZG93LlNoYWR5Q1NTLm5hdGl2ZUNzcyksS19yPSF3aW5kb3cuY3VzdG9tRWxlbWVudHMucG9seWZpbGxXcmFwRmx1c2hDYWxsYmFjayxHZHQ9dV8mJiJhZG9wdGVkU3R5bGVTaGVldHMiaW4gRG9jdW1lbnQucHJvdG90eXBlJiYicmVwbGFjZVN5bmMiaW4gQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUmJigoKT0+e3RyeXtsZXQgZT1uZXcgQ1NTU3R5bGVTaGVldDtlLnJlcGxhY2VTeW5jKCIiKTtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gdC5hdHRhY2hTaGFkb3coe21vZGU6Im9wZW4ifSksdC5zaGFkb3dSb290LmFkb3B0ZWRTdHlsZVNoZWV0cz1bZV0sdC5zaGFkb3dSb290LmFkb3B0ZWRTdHlsZVNoZWV0c1swXT09PWV9Y2F0Y2goZSl7cmV0dXJuITF9fSkoKSxXZHQ9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLnJvb3RQYXRofHxDeChkb2N1bWVudC5iYXNlVVJJfHx3aW5kb3cubG9jYXRpb24uaHJlZik7dmFyIFZNPXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci5zYW5pdGl6ZURPTVZhbHVlfHx2b2lkIDA7dmFyIFlkdD13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIuc2V0UGFzc2l2ZVRvdWNoR2VzdHVyZXN8fCExO3ZhciBpdT13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIuc3RyaWN0VGVtcGxhdGVQb2xpY3l8fCExO3ZhciBqZHQ9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLmFsbG93VGVtcGxhdGVGcm9tRG9tTW9kdWxlfHwhMTt2YXIgZHA9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLmxlZ2FjeU9wdGltaXphdGlvbnN8fCExO3ZhciBMST13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIubGVnYWN5V2FybmluZ3N8fCExO3ZhciBYZHQ9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLnN5bmNJbml0aWFsUmVuZGVyfHwhMTt2YXIga0k9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLmxlZ2FjeVVuZGVmaW5lZHx8ITE7dmFyICRkdD13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIub3JkZXJlZENvbXB1dGVkfHwhMTt2YXIgZkc9ITA7dmFyIHBHPXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci5yZW1vdmVOZXN0ZWRUZW1wbGF0ZXN8fCExO3ZhciBSST13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIuZmFzdERvbUlmfHwhMTt2YXIgVU09d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLnN1cHByZXNzVGVtcGxhdGVOb3RpZmljYXRpb25zfHwhMTt2YXIgcU09d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLmxlZ2FjeU5vT2JzZXJ2ZWRBdHRyaWJ1dGVzfHwhMTt2YXIgS2R0PXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci51c2VBZG9wdGVkU3R5bGVTaGVldHNXaXRoQnVpbHRDU1N8fCExO3ZhciBBdmU9MDtmdW5jdGlvbiBaZHQoKXt9WmR0LnByb3RvdHlwZS5fX21peGluQXBwbGljYXRpb25zO1pkdC5wcm90b3R5cGUuX19taXhpblNldDt2YXIgTm49ZnVuY3Rpb24oZSl7bGV0IHQ9ZS5fX21peGluQXBwbGljYXRpb25zO3R8fCh0PW5ldyBXZWFrTWFwLGUuX19taXhpbkFwcGxpY2F0aW9ucz10KTtsZXQgcj1BdmUrKztmdW5jdGlvbiBuKGkpe2xldCBvPWkuX19taXhpblNldDtpZihvJiZvW3JdKXJldHVybiBpO2xldCBhPXQscz1hLmdldChpKTtpZighcyl7cz1lKGkpLGEuc2V0KGkscyk7bGV0IGw9T2JqZWN0LmNyZWF0ZShzLl9fbWl4aW5TZXR8fG98fG51bGwpO2xbcl09ITAscy5fX21peGluU2V0PWx9cmV0dXJuIHN9cmV0dXJuIG59O3ZhciBkRz17fSx0bXQ9e307ZnVuY3Rpb24gSmR0KGUsdCl7ZEdbZV09dG10W2UudG9Mb3dlckNhc2UoKV09dH1mdW5jdGlvbiBRZHQoZSl7cmV0dXJuIGRHW2VdfHx0bXRbZS50b0xvd2VyQ2FzZSgpXX1mdW5jdGlvbiBQdmUoZSl7ZS5xdWVyeVNlbGVjdG9yKCJzdHlsZSIpJiZjb25zb2xlLndhcm4oImRvbS1tb2R1bGUgJXMgaGFzIHN0eWxlIG91dHNpZGUgdGVtcGxhdGUiLGUuaWQpfXZhciBvdT1jbGFzcyBleHRlbmRzIEhUTUxFbGVtZW50e3N0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCl7cmV0dXJuWyJpZCJdfXN0YXRpYyBpbXBvcnQodCxyKXtpZih0KXtsZXQgbj1RZHQodCk7cmV0dXJuIG4mJnI/bi5xdWVyeVNlbGVjdG9yKHIpOm59cmV0dXJuIG51bGx9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHQscixuLGkpe3IhPT1uJiZ0aGlzLnJlZ2lzdGVyKCl9Z2V0IGFzc2V0cGF0aCgpe2lmKCF0aGlzLl9fYXNzZXRwYXRoKXtsZXQgdD13aW5kb3cuSFRNTEltcG9ydHMmJkhUTUxJbXBvcnRzLmltcG9ydEZvckVsZW1lbnQ/SFRNTEltcG9ydHMuaW1wb3J0Rm9yRWxlbWVudCh0aGlzKXx8ZG9jdW1lbnQ6dGhpcy5vd25lckRvY3VtZW50LHI9Y18odGhpcy5nZXRBdHRyaWJ1dGUoImFzc2V0cGF0aCIpfHwiIix0LmJhc2VVUkkpO3RoaXMuX19hc3NldHBhdGg9Q3gocil9cmV0dXJuIHRoaXMuX19hc3NldHBhdGh9cmVnaXN0ZXIodCl7aWYodD10fHx0aGlzLmlkLHQpe2lmKGl1JiZRZHQodCkhPT12b2lkIDApdGhyb3cgSmR0KHQsbnVsbCksbmV3IEVycm9yKGBzdHJpY3RUZW1wbGF0ZVBvbGljeTogZG9tLW1vZHVsZSAke3R9IHJlLXJlZ2lzdGVyZWRgKTt0aGlzLmlkPXQsSmR0KHQsdGhpcyksUHZlKHRoaXMpfX19O291LnByb3RvdHlwZS5tb2R1bGVzPWRHO2N1c3RvbUVsZW1lbnRzLmRlZmluZSgiZG9tLW1vZHVsZSIsb3UpO3ZhciBJdmU9ImxpbmtbcmVsPWltcG9ydF1bdHlwZX49Y3NzXSIsTHZlPSJpbmNsdWRlIixlbXQ9InNoYWR5LXVuc2NvcGVkIjtmdW5jdGlvbiBtRyhlKXtyZXR1cm4gb3UuaW1wb3J0KGUpfWZ1bmN0aW9uIHJtdChlKXtsZXQgdD1lLmJvZHk/ZS5ib2R5OmUscj1ITSh0LnRleHRDb250ZW50LGUuYmFzZVVSSSksbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO3JldHVybiBuLnRleHRDb250ZW50PXIsbn1mdW5jdGlvbiBrdmUoZSl7bGV0IHQ9ZS50cmltKCkuc3BsaXQoL1xzKy8pLHI9W107Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspci5wdXNoKC4uLlJ2ZSh0W25dKSk7cmV0dXJuIHJ9ZnVuY3Rpb24gUnZlKGUpe2xldCB0PW1HKGUpO2lmKCF0KXJldHVybiBjb25zb2xlLndhcm4oIkNvdWxkIG5vdCBmaW5kIHN0eWxlIGRhdGEgaW4gbW9kdWxlIG5hbWVkIixlKSxbXTtpZih0Ll9zdHlsZXM9PT12b2lkIDApe2xldCByPVtdO3IucHVzaCguLi5nRyh0KSk7bGV0IG49dC5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpO24mJnIucHVzaCguLi5OSShuLHQuYXNzZXRwYXRoKSksdC5fc3R5bGVzPXJ9cmV0dXJuIHQuX3N0eWxlc31mdW5jdGlvbiBOSShlLHQpe2lmKCFlLl9zdHlsZXMpe2xldCByPVtdLG49ZS5jb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoInN0eWxlIik7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspe2xldCBvPW5baV0sYT1vLmdldEF0dHJpYnV0ZShMdmUpO2EmJnIucHVzaCguLi5rdmUoYSkuZmlsdGVyKGZ1bmN0aW9uKHMsbCxjKXtyZXR1cm4gYy5pbmRleE9mKHMpPT09bH0pKSx0JiYoby50ZXh0Q29udGVudD1ITShvLnRleHRDb250ZW50LHQpKSxyLnB1c2gobyl9ZS5fc3R5bGVzPXJ9cmV0dXJuIGUuX3N0eWxlc31mdW5jdGlvbiBubXQoZSl7bGV0IHQ9bUcoZSk7cmV0dXJuIHQ/Z0codCk6W119ZnVuY3Rpb24gZ0coZSl7bGV0IHQ9W10scj1lLnF1ZXJ5U2VsZWN0b3JBbGwoSXZlKTtmb3IobGV0IG49MDtuPHIubGVuZ3RoO24rKyl7bGV0IGk9cltuXTtpZihpLmltcG9ydCl7bGV0IG89aS5pbXBvcnQsYT1pLmhhc0F0dHJpYnV0ZShlbXQpO2lmKGEmJiFvLl91bnNjb3BlZFN0eWxlKXtsZXQgcz1ybXQobyk7cy5zZXRBdHRyaWJ1dGUoZW10LCIiKSxvLl91bnNjb3BlZFN0eWxlPXN9ZWxzZSBvLl9zdHlsZXx8KG8uX3N0eWxlPXJtdChvKSk7dC5wdXNoKGE/by5fdW5zY29wZWRTdHlsZTpvLl9zdHlsZSl9fXJldHVybiB0fWZ1bmN0aW9uIGltdChlKXtsZXQgdD1lLnRyaW0oKS5zcGxpdCgvXHMrLykscj0iIjtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKylyKz1OdmUodFtuXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gTnZlKGUpe2xldCB0PW1HKGUpO2lmKHQmJnQuX2Nzc1RleHQ9PT12b2lkIDApe2xldCByPU92ZSh0KSxuPXQucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKTtuJiYocis9RHZlKG4sdC5hc3NldHBhdGgpKSx0Ll9jc3NUZXh0PXJ8fG51bGx9cmV0dXJuIHR8fGNvbnNvbGUud2FybigiQ291bGQgbm90IGZpbmQgc3R5bGUgZGF0YSBpbiBtb2R1bGUgbmFtZWQiLGUpLHQmJnQuX2Nzc1RleHR8fCIifWZ1bmN0aW9uIER2ZShlLHQpe2xldCByPSIiLG49TkkoZSx0KTtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKyl7bGV0IG89bltpXTtvLnBhcmVudE5vZGUmJm8ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvKSxyKz1vLnRleHRDb250ZW50fXJldHVybiByfWZ1bmN0aW9uIE92ZShlKXtsZXQgdD0iIixyPWdHKGUpO2ZvcihsZXQgbj0wO248ci5sZW5ndGg7bisrKXQrPXJbbl0udGV4dENvbnRlbnQ7cmV0dXJuIHR9dmFyIHVlPXdpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLm5vUGF0Y2gmJndpbmRvdy5TaGFkeURPTS53cmFwP3dpbmRvdy5TaGFkeURPTS53cmFwOndpbmRvdy5TaGFkeURPTT9lPT5TaGFkeURPTS5wYXRjaChlKTplPT5lO2Z1bmN0aW9uIERJKGUpe3JldHVybiBlLmluZGV4T2YoIi4iKT49MH1mdW5jdGlvbiBhdShlKXtsZXQgdD1lLmluZGV4T2YoIi4iKTtyZXR1cm4gdD09PS0xP2U6ZS5zbGljZSgwLHQpfWZ1bmN0aW9uIF9HKGUsdCl7cmV0dXJuIGUuaW5kZXhPZih0KyIuIik9PT0wfWZ1bmN0aW9uIEF4KGUsdCl7cmV0dXJuIHQuaW5kZXhPZihlKyIuIik9PT0wfWZ1bmN0aW9uIG1wKGUsdCxyKXtyZXR1cm4gdCtyLnNsaWNlKGUubGVuZ3RoKX1mdW5jdGlvbiBPSShlLHQpe3JldHVybiBlPT09dHx8X0coZSx0KXx8QXgoZSx0KX1mdW5jdGlvbiBQeChlKXtpZihBcnJheS5pc0FycmF5KGUpKXtsZXQgdD1bXTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7bGV0IG49ZVtyXS50b1N0cmluZygpLnNwbGl0KCIuIik7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspdC5wdXNoKG5baV0pfXJldHVybiB0LmpvaW4oIi4iKX1lbHNlIHJldHVybiBlfWZ1bmN0aW9uIG9tdChlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9QeChlKS5zcGxpdCgiLiIpOmUudG9TdHJpbmcoKS5zcGxpdCgiLiIpfWZ1bmN0aW9uIE5vKGUsdCxyKXtsZXQgbj1lLGk9b210KHQpO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKXtpZighbilyZXR1cm47bGV0IGE9aVtvXTtuPW5bYV19cmV0dXJuIHImJihyLnBhdGg9aS5qb2luKCIuIikpLG59ZnVuY3Rpb24geUcoZSx0LHIpe2xldCBuPWUsaT1vbXQodCksbz1pW2kubGVuZ3RoLTFdO2lmKGkubGVuZ3RoPjEpe2ZvcihsZXQgYT0wO2E8aS5sZW5ndGgtMTthKyspe2xldCBzPWlbYV07aWYobj1uW3NdLCFuKXJldHVybn1uW29dPXJ9ZWxzZSBuW3RdPXI7cmV0dXJuIGkuam9pbigiLiIpfXZhciB6ST17fSx6dmU9Ly1bYS16XS9nLEZ2ZT0vKFtBLVpdKS9nO2Z1bmN0aW9uIFNtKGUpe3JldHVybiB6SVtlXXx8KHpJW2VdPWUuaW5kZXhPZigiLSIpPDA/ZTplLnJlcGxhY2UoenZlLHQ9PnRbMV0udG9VcHBlckNhc2UoKSkpfWZ1bmN0aW9uIEl4KGUpe3JldHVybiB6SVtlXXx8KHpJW2VdPWUucmVwbGFjZShGdmUsIi0kMSIpLnRvTG93ZXJDYXNlKCkpfXZhciBCdmU9MCxhbXQ9MCxMeD1bXSxIdmU9MCx2Rz0hMSxzbXQ9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpO25ldyB3aW5kb3cuTXV0YXRpb25PYnNlcnZlcihWdmUpLm9ic2VydmUoc210LHtjaGFyYWN0ZXJEYXRhOiEwfSk7ZnVuY3Rpb24gVnZlKCl7dkc9ITE7bGV0IGU9THgubGVuZ3RoO2ZvcihsZXQgdD0wO3Q8ZTt0Kyspe2xldCByPUx4W3RdO2lmKHIpdHJ5e3IoKX1jYXRjaChuKXtzZXRUaW1lb3V0KCgpPT57dGhyb3cgbn0pfX1MeC5zcGxpY2UoMCxlKSxhbXQrPWV9dmFyIG1vPXthZnRlcihlKXtyZXR1cm57cnVuKHQpe3JldHVybiB3aW5kb3cuc2V0VGltZW91dCh0LGUpfSxjYW5jZWwodCl7d2luZG93LmNsZWFyVGltZW91dCh0KX19fSxydW4oZSx0KXtyZXR1cm4gd2luZG93LnNldFRpbWVvdXQoZSx0KX0sY2FuY2VsKGUpe3dpbmRvdy5jbGVhclRpbWVvdXQoZSl9fTt2YXIgTmk9e3J1bihlKXtyZXR1cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShlKX0sY2FuY2VsKGUpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShlKX19O3ZhciBreD17cnVuKGUpe3JldHVybiB3aW5kb3cucmVxdWVzdElkbGVDYWxsYmFjaz93aW5kb3cucmVxdWVzdElkbGVDYWxsYmFjayhlKTp3aW5kb3cuc2V0VGltZW91dChlLDE2KX0sY2FuY2VsKGUpe3dpbmRvdy5jYW5jZWxJZGxlQ2FsbGJhY2s/d2luZG93LmNhbmNlbElkbGVDYWxsYmFjayhlKTp3aW5kb3cuY2xlYXJUaW1lb3V0KGUpfX07dmFyIGxpPXtydW4oZSl7cmV0dXJuIHZHfHwodkc9ITAsc210LnRleHRDb250ZW50PUh2ZSsrKSxMeC5wdXNoKGUpLEJ2ZSsrfSxjYW5jZWwoZSl7bGV0IHQ9ZS1hbXQ7aWYodD49MCl7aWYoIUx4W3RdKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBhc3luYyBoYW5kbGU6ICIrZSk7THhbdF09bnVsbH19fTt2YXIgVXZlPWxpLEZJPU5uKGU9PntjbGFzcyB0IGV4dGVuZHMgZXtzdGF0aWMgY3JlYXRlUHJvcGVydGllcyhuKXtsZXQgaT10aGlzLnByb3RvdHlwZTtmb3IobGV0IG8gaW4gbilvIGluIGl8fGkuX2NyZWF0ZVByb3BlcnR5QWNjZXNzb3Iobyl9c3RhdGljIGF0dHJpYnV0ZU5hbWVGb3JQcm9wZXJ0eShuKXtyZXR1cm4gbi50b0xvd2VyQ2FzZSgpfXN0YXRpYyB0eXBlRm9yUHJvcGVydHkobil7fV9jcmVhdGVQcm9wZXJ0eUFjY2Vzc29yKG4saSl7dGhpcy5fYWRkUHJvcGVydHlUb0F0dHJpYnV0ZU1hcChuKSx0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9fZGF0YUhhc0FjY2Vzc29yIix0aGlzKSl8fCh0aGlzLl9fZGF0YUhhc0FjY2Vzc29yPU9iamVjdC5hc3NpZ24oe30sdGhpcy5fX2RhdGFIYXNBY2Nlc3NvcikpLHRoaXMuX19kYXRhSGFzQWNjZXNzb3Jbbl18fCh0aGlzLl9fZGF0YUhhc0FjY2Vzc29yW25dPSEwLHRoaXMuX2RlZmluZVByb3BlcnR5QWNjZXNzb3IobixpKSl9X2FkZFByb3BlcnR5VG9BdHRyaWJ1dGVNYXAobil7dGhpcy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX2RhdGFBdHRyaWJ1dGVzIix0aGlzKSl8fCh0aGlzLl9fZGF0YUF0dHJpYnV0ZXM9T2JqZWN0LmFzc2lnbih7fSx0aGlzLl9fZGF0YUF0dHJpYnV0ZXMpKTtsZXQgaT10aGlzLl9fZGF0YUF0dHJpYnV0ZXNbbl07cmV0dXJuIGl8fChpPXRoaXMuY29uc3RydWN0b3IuYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KG4pLHRoaXMuX19kYXRhQXR0cmlidXRlc1tpXT1uKSxpfV9kZWZpbmVQcm9wZXJ0eUFjY2Vzc29yKG4saSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsbix7Z2V0KCl7cmV0dXJuIHRoaXMuX19kYXRhW25dfSxzZXQ6aT9mdW5jdGlvbigpe306ZnVuY3Rpb24obyl7dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KG4sbywhMCkmJnRoaXMuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9fSl9Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX19kYXRhRW5hYmxlZD0hMSx0aGlzLl9fZGF0YVJlYWR5PSExLHRoaXMuX19kYXRhSW52YWxpZD0hMSx0aGlzLl9fZGF0YT17fSx0aGlzLl9fZGF0YVBlbmRpbmc9bnVsbCx0aGlzLl9fZGF0YU9sZD1udWxsLHRoaXMuX19kYXRhSW5zdGFuY2VQcm9wcz1udWxsLHRoaXMuX19kYXRhQ291bnRlcj0wLHRoaXMuX19zZXJpYWxpemluZz0hMSx0aGlzLl9pbml0aWFsaXplUHJvcGVydGllcygpfXJlYWR5KCl7dGhpcy5fX2RhdGFSZWFkeT0hMCx0aGlzLl9mbHVzaFByb3BlcnRpZXMoKX1faW5pdGlhbGl6ZVByb3BlcnRpZXMoKXtmb3IobGV0IG4gaW4gdGhpcy5fX2RhdGFIYXNBY2Nlc3Nvcil0aGlzLmhhc093blByb3BlcnR5KG4pJiYodGhpcy5fX2RhdGFJbnN0YW5jZVByb3BzPXRoaXMuX19kYXRhSW5zdGFuY2VQcm9wc3x8e30sdGhpcy5fX2RhdGFJbnN0YW5jZVByb3BzW25dPXRoaXNbbl0sZGVsZXRlIHRoaXNbbl0pfV9pbml0aWFsaXplSW5zdGFuY2VQcm9wZXJ0aWVzKG4pe09iamVjdC5hc3NpZ24odGhpcyxuKX1fc2V0UHJvcGVydHkobixpKXt0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHkobixpKSYmdGhpcy5faW52YWxpZGF0ZVByb3BlcnRpZXMoKX1fZ2V0UHJvcGVydHkobil7cmV0dXJuIHRoaXMuX19kYXRhW25dfV9zZXRQZW5kaW5nUHJvcGVydHkobixpLG8pe2xldCBhPXRoaXMuX19kYXRhW25dLHM9dGhpcy5fc2hvdWxkUHJvcGVydHlDaGFuZ2UobixpLGEpO3JldHVybiBzJiYodGhpcy5fX2RhdGFQZW5kaW5nfHwodGhpcy5fX2RhdGFQZW5kaW5nPXt9LHRoaXMuX19kYXRhT2xkPXt9KSx0aGlzLl9fZGF0YU9sZCYmIShuIGluIHRoaXMuX19kYXRhT2xkKSYmKHRoaXMuX19kYXRhT2xkW25dPWEpLHRoaXMuX19kYXRhW25dPWksdGhpcy5fX2RhdGFQZW5kaW5nW25dPWkpLHN9X2lzUHJvcGVydHlQZW5kaW5nKG4pe3JldHVybiEhKHRoaXMuX19kYXRhUGVuZGluZyYmdGhpcy5fX2RhdGFQZW5kaW5nLmhhc093blByb3BlcnR5KG4pKX1faW52YWxpZGF0ZVByb3BlcnRpZXMoKXshdGhpcy5fX2RhdGFJbnZhbGlkJiZ0aGlzLl9fZGF0YVJlYWR5JiYodGhpcy5fX2RhdGFJbnZhbGlkPSEwLFV2ZS5ydW4oKCk9Pnt0aGlzLl9fZGF0YUludmFsaWQmJih0aGlzLl9fZGF0YUludmFsaWQ9ITEsdGhpcy5fZmx1c2hQcm9wZXJ0aWVzKCkpfSkpfV9lbmFibGVQcm9wZXJ0aWVzKCl7dGhpcy5fX2RhdGFFbmFibGVkfHwodGhpcy5fX2RhdGFFbmFibGVkPSEwLHRoaXMuX19kYXRhSW5zdGFuY2VQcm9wcyYmKHRoaXMuX2luaXRpYWxpemVJbnN0YW5jZVByb3BlcnRpZXModGhpcy5fX2RhdGFJbnN0YW5jZVByb3BzKSx0aGlzLl9fZGF0YUluc3RhbmNlUHJvcHM9bnVsbCksdGhpcy5yZWFkeSgpKX1fZmx1c2hQcm9wZXJ0aWVzKCl7dGhpcy5fX2RhdGFDb3VudGVyKys7bGV0IG49dGhpcy5fX2RhdGEsaT10aGlzLl9fZGF0YVBlbmRpbmcsbz10aGlzLl9fZGF0YU9sZDt0aGlzLl9zaG91bGRQcm9wZXJ0aWVzQ2hhbmdlKG4saSxvKSYmKHRoaXMuX19kYXRhUGVuZGluZz1udWxsLHRoaXMuX19kYXRhT2xkPW51bGwsdGhpcy5fcHJvcGVydGllc0NoYW5nZWQobixpLG8pKSx0aGlzLl9fZGF0YUNvdW50ZXItLX1fc2hvdWxkUHJvcGVydGllc0NoYW5nZShuLGksbyl7cmV0dXJuIEJvb2xlYW4oaSl9X3Byb3BlcnRpZXNDaGFuZ2VkKG4saSxvKXt9X3Nob3VsZFByb3BlcnR5Q2hhbmdlKG4saSxvKXtyZXR1cm4gbyE9PWkmJihvPT09b3x8aT09PWkpfWF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhuLGksbyxhKXtpIT09byYmdGhpcy5fYXR0cmlidXRlVG9Qcm9wZXJ0eShuLG8pLHN1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayYmc3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG4saSxvLGEpfV9hdHRyaWJ1dGVUb1Byb3BlcnR5KG4saSxvKXtpZighdGhpcy5fX3NlcmlhbGl6aW5nKXtsZXQgYT10aGlzLl9fZGF0YUF0dHJpYnV0ZXMscz1hJiZhW25dfHxuO3RoaXNbc109dGhpcy5fZGVzZXJpYWxpemVWYWx1ZShpLG98fHRoaXMuY29uc3RydWN0b3IudHlwZUZvclByb3BlcnR5KHMpKX19X3Byb3BlcnR5VG9BdHRyaWJ1dGUobixpLG8pe3RoaXMuX19zZXJpYWxpemluZz0hMCxvPWFyZ3VtZW50cy5sZW5ndGg8Mz90aGlzW25dOm8sdGhpcy5fdmFsdWVUb05vZGVBdHRyaWJ1dGUodGhpcyxvLGl8fHRoaXMuY29uc3RydWN0b3IuYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KG4pKSx0aGlzLl9fc2VyaWFsaXppbmc9ITF9X3ZhbHVlVG9Ob2RlQXR0cmlidXRlKG4saSxvKXtsZXQgYT10aGlzLl9zZXJpYWxpemVWYWx1ZShpKTsobz09PSJjbGFzcyJ8fG89PT0ibmFtZSJ8fG89PT0ic2xvdCIpJiYobj11ZShuKSksYT09PXZvaWQgMD9uLnJlbW92ZUF0dHJpYnV0ZShvKTpuLnNldEF0dHJpYnV0ZShvLGEpfV9zZXJpYWxpemVWYWx1ZShuKXtzd2l0Y2godHlwZW9mIG4pe2Nhc2UiYm9vbGVhbiI6cmV0dXJuIG4/IiI6dm9pZCAwO2RlZmF1bHQ6cmV0dXJuIG4hPW51bGw/bi50b1N0cmluZygpOnZvaWQgMH19X2Rlc2VyaWFsaXplVmFsdWUobixpKXtzd2l0Y2goaSl7Y2FzZSBCb29sZWFuOnJldHVybiBuIT09bnVsbDtjYXNlIE51bWJlcjpyZXR1cm4gTnVtYmVyKG4pO2RlZmF1bHQ6cmV0dXJuIG59fX1yZXR1cm4gdH0pO3ZhciBsbXQ9e30sQkk9SFRNTEVsZW1lbnQucHJvdG90eXBlO2Zvcig7Qkk7KXtsZXQgZT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhCSSk7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspbG10W2VbdF1dPSEwO0JJPU9iamVjdC5nZXRQcm90b3R5cGVPZihCSSl9ZnVuY3Rpb24gcXZlKGUsdCl7aWYoIWxtdFt0XSl7bGV0IHI9ZVt0XTtyIT09dm9pZCAwJiYoZS5fX2RhdGE/ZS5fc2V0UGVuZGluZ1Byb3BlcnR5KHQscik6KGUuX19kYXRhUHJvdG8/ZS5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX2RhdGFQcm90byIsZSkpfHwoZS5fX2RhdGFQcm90bz1PYmplY3QuY3JlYXRlKGUuX19kYXRhUHJvdG8pKTplLl9fZGF0YVByb3RvPXt9LGUuX19kYXRhUHJvdG9bdF09cikpfX12YXIgSEk9Tm4oZT0+e2xldCB0PUZJKGUpO2NsYXNzIHIgZXh0ZW5kcyB0e3N0YXRpYyBjcmVhdGVQcm9wZXJ0aWVzRm9yQXR0cmlidXRlcygpe2xldCBpPXRoaXMub2JzZXJ2ZWRBdHRyaWJ1dGVzO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKXRoaXMucHJvdG90eXBlLl9jcmVhdGVQcm9wZXJ0eUFjY2Vzc29yKFNtKGlbb10pKX1zdGF0aWMgYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KGkpe3JldHVybiBJeChpKX1faW5pdGlhbGl6ZVByb3BlcnRpZXMoKXt0aGlzLl9fZGF0YVByb3RvJiYodGhpcy5faW5pdGlhbGl6ZVByb3RvUHJvcGVydGllcyh0aGlzLl9fZGF0YVByb3RvKSx0aGlzLl9fZGF0YVByb3RvPW51bGwpLHN1cGVyLl9pbml0aWFsaXplUHJvcGVydGllcygpfV9pbml0aWFsaXplUHJvdG9Qcm9wZXJ0aWVzKGkpe2ZvcihsZXQgbyBpbiBpKXRoaXMuX3NldFByb3BlcnR5KG8saVtvXSl9X2Vuc3VyZUF0dHJpYnV0ZShpLG8pe2xldCBhPXRoaXM7YS5oYXNBdHRyaWJ1dGUoaSl8fHRoaXMuX3ZhbHVlVG9Ob2RlQXR0cmlidXRlKGEsbyxpKX1fc2VyaWFsaXplVmFsdWUoaSl7c3dpdGNoKHR5cGVvZiBpKXtjYXNlIm9iamVjdCI6aWYoaSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIGkudG9TdHJpbmcoKTtpZihpKXRyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoaSl9Y2F0Y2gobyl7cmV0dXJuIiJ9ZGVmYXVsdDpyZXR1cm4gc3VwZXIuX3NlcmlhbGl6ZVZhbHVlKGkpfX1fZGVzZXJpYWxpemVWYWx1ZShpLG8pe2xldCBhO3N3aXRjaChvKXtjYXNlIE9iamVjdDp0cnl7YT1KU09OLnBhcnNlKGkpfWNhdGNoKHMpe2E9aX1icmVhaztjYXNlIEFycmF5OnRyeXthPUpTT04ucGFyc2UoaSl9Y2F0Y2gocyl7YT1udWxsLGNvbnNvbGUud2FybihgUG9seW1lcjo6QXR0cmlidXRlczogY291bGRuJ3QgZGVjb2RlIEFycmF5IGFzIEpTT046ICR7aX1gKX1icmVhaztjYXNlIERhdGU6YT1pc05hTihpKT9TdHJpbmcoaSk6TnVtYmVyKGkpLGE9bmV3IERhdGUoYSk7YnJlYWs7ZGVmYXVsdDphPXN1cGVyLl9kZXNlcmlhbGl6ZVZhbHVlKGksbyk7YnJlYWt9cmV0dXJuIGF9X2RlZmluZVByb3BlcnR5QWNjZXNzb3IoaSxvKXtxdmUodGhpcyxpKSxzdXBlci5fZGVmaW5lUHJvcGVydHlBY2Nlc3NvcihpLG8pfV9oYXNBY2Nlc3NvcihpKXtyZXR1cm4gdGhpcy5fX2RhdGFIYXNBY2Nlc3NvciYmdGhpcy5fX2RhdGFIYXNBY2Nlc3NvcltpXX1faXNQcm9wZXJ0eVBlbmRpbmcoaSl7cmV0dXJuIEJvb2xlYW4odGhpcy5fX2RhdGFQZW5kaW5nJiZpIGluIHRoaXMuX19kYXRhUGVuZGluZyl9fXJldHVybiByfSk7dmFyIEd2ZT17ImRvbS1pZiI6ITAsImRvbS1yZXBlYXQiOiEwfSxjbXQ9ITEsdW10PSExO2Z1bmN0aW9uIFd2ZSgpe2lmKCFjbXQpe2NtdD0hMDtsZXQgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpO2UucGxhY2Vob2xkZXI9ImEiLHVtdD1lLnBsYWNlaG9sZGVyPT09ZS50ZXh0Q29udGVudH1yZXR1cm4gdW10fWZ1bmN0aW9uIFl2ZShlKXtXdmUoKSYmZS5sb2NhbE5hbWU9PT0idGV4dGFyZWEiJiZlLnBsYWNlaG9sZGVyJiZlLnBsYWNlaG9sZGVyPT09ZS50ZXh0Q29udGVudCYmKGUudGV4dENvbnRlbnQ9bnVsbCl9ZnVuY3Rpb24ganZlKGUpe2xldCB0PWUuZ2V0QXR0cmlidXRlKCJpcyIpO2lmKHQmJkd2ZVt0XSl7bGV0IHI9ZTtmb3Ioci5yZW1vdmVBdHRyaWJ1dGUoImlzIiksZT1yLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0KSxyLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGUsciksZS5hcHBlbmRDaGlsZChyKTtyLmF0dHJpYnV0ZXMubGVuZ3RoOyllLnNldEF0dHJpYnV0ZShyLmF0dHJpYnV0ZXNbMF0ubmFtZSxyLmF0dHJpYnV0ZXNbMF0udmFsdWUpLHIucmVtb3ZlQXR0cmlidXRlKHIuYXR0cmlidXRlc1swXS5uYW1lKX1yZXR1cm4gZX1mdW5jdGlvbiBobXQoZSx0KXtsZXQgcj10LnBhcmVudEluZm8mJmhtdChlLHQucGFyZW50SW5mbyk7aWYocil7Zm9yKGxldCBuPXIuZmlyc3RDaGlsZCxpPTA7bjtuPW4ubmV4dFNpYmxpbmcpaWYodC5wYXJlbnRJbmRleD09PWkrKylyZXR1cm4gbn1lbHNlIHJldHVybiBlfWZ1bmN0aW9uIFh2ZShlLHQscixuKXtuLmlkJiYodFtuLmlkXT1yKX1mdW5jdGlvbiAkdmUoZSx0LHIpe2lmKHIuZXZlbnRzJiZyLmV2ZW50cy5sZW5ndGgpZm9yKGxldCBuPTAsaT1yLmV2ZW50cyxvO248aS5sZW5ndGgmJihvPWlbbl0pO24rKyllLl9hZGRNZXRob2RFdmVudExpc3RlbmVyVG9Ob2RlKHQsby5uYW1lLG8udmFsdWUsZSl9ZnVuY3Rpb24gS3ZlKGUsdCxyLG4pe3IudGVtcGxhdGVJbmZvJiYodC5fdGVtcGxhdGVJbmZvPXIudGVtcGxhdGVJbmZvLHQuX3BhcmVudFRlbXBsYXRlSW5mbz1uKX1mdW5jdGlvbiBadmUoZSx0LHIpe3JldHVybiBlPWUuX21ldGhvZEhvc3R8fGUsZnVuY3Rpb24oaSl7ZVtyXT9lW3JdKGksaS5kZXRhaWwpOmNvbnNvbGUud2FybigibGlzdGVuZXIgbWV0aG9kIGAiK3IrImAgbm90IGRlZmluZWQiKX19dmFyIGZtdD1ObihlPT57Y2xhc3MgdCBleHRlbmRzIGV7c3RhdGljIF9wYXJzZVRlbXBsYXRlKG4saSl7aWYoIW4uX3RlbXBsYXRlSW5mbyl7bGV0IG89bi5fdGVtcGxhdGVJbmZvPXt9O28ubm9kZUluZm9MaXN0PVtdLG8ubmVzdGVkVGVtcGxhdGU9Qm9vbGVhbihpKSxvLnN0cmlwV2hpdGVTcGFjZT1pJiZpLnN0cmlwV2hpdGVTcGFjZXx8bi5oYXNBdHRyaWJ1dGUoInN0cmlwLXdoaXRlc3BhY2UiKSx0aGlzLl9wYXJzZVRlbXBsYXRlQ29udGVudChuLG8se3BhcmVudDpudWxsfSl9cmV0dXJuIG4uX3RlbXBsYXRlSW5mb31zdGF0aWMgX3BhcnNlVGVtcGxhdGVDb250ZW50KG4saSxvKXtyZXR1cm4gdGhpcy5fcGFyc2VUZW1wbGF0ZU5vZGUobi5jb250ZW50LGksbyl9c3RhdGljIF9wYXJzZVRlbXBsYXRlTm9kZShuLGksbyl7bGV0IGE9ITEscz1uO3JldHVybiBzLmxvY2FsTmFtZT09InRlbXBsYXRlIiYmIXMuaGFzQXR0cmlidXRlKCJwcmVzZXJ2ZS1jb250ZW50Iik/YT10aGlzLl9wYXJzZVRlbXBsYXRlTmVzdGVkVGVtcGxhdGUocyxpLG8pfHxhOnMubG9jYWxOYW1lPT09InNsb3QiJiYoaS5oYXNJbnNlcnRpb25Qb2ludD0hMCksWXZlKHMpLHMuZmlyc3RDaGlsZCYmdGhpcy5fcGFyc2VUZW1wbGF0ZUNoaWxkTm9kZXMocyxpLG8pLHMuaGFzQXR0cmlidXRlcyYmcy5oYXNBdHRyaWJ1dGVzKCkmJihhPXRoaXMuX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlcyhzLGksbyl8fGEpLGF8fG8ubm90ZWR9c3RhdGljIF9wYXJzZVRlbXBsYXRlQ2hpbGROb2RlcyhuLGksbyl7aWYoIShuLmxvY2FsTmFtZT09PSJzY3JpcHQifHxuLmxvY2FsTmFtZT09PSJzdHlsZSIpKWZvcihsZXQgYT1uLmZpcnN0Q2hpbGQscz0wLGw7YTthPWwpe2lmKGEubG9jYWxOYW1lPT0idGVtcGxhdGUiJiYoYT1qdmUoYSkpLGw9YS5uZXh0U2libGluZyxhLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREUpe2xldCB1PWw7Zm9yKDt1JiZ1Lm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREU7KWEudGV4dENvbnRlbnQrPXUudGV4dENvbnRlbnQsbD11Lm5leHRTaWJsaW5nLG4ucmVtb3ZlQ2hpbGQodSksdT1sO2lmKGkuc3RyaXBXaGl0ZVNwYWNlJiYhYS50ZXh0Q29udGVudC50cmltKCkpe24ucmVtb3ZlQ2hpbGQoYSk7Y29udGludWV9fWxldCBjPXtwYXJlbnRJbmRleDpzLHBhcmVudEluZm86b307dGhpcy5fcGFyc2VUZW1wbGF0ZU5vZGUoYSxpLGMpJiYoYy5pbmZvSW5kZXg9aS5ub2RlSW5mb0xpc3QucHVzaChjKS0xKSxhLnBhcmVudE5vZGUmJnMrK319c3RhdGljIF9wYXJzZVRlbXBsYXRlTmVzdGVkVGVtcGxhdGUobixpLG8pe2xldCBhPW4scz10aGlzLl9wYXJzZVRlbXBsYXRlKGEsaSk7cmV0dXJuKHMuY29udGVudD1hLmNvbnRlbnQub3duZXJEb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpLmFwcGVuZENoaWxkKGEuY29udGVudCksby50ZW1wbGF0ZUluZm89cywhMH1zdGF0aWMgX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlcyhuLGksbyl7bGV0IGE9ITEscz1BcnJheS5mcm9tKG4uYXR0cmlidXRlcyk7Zm9yKGxldCBsPXMubGVuZ3RoLTEsYztjPXNbbF07bC0tKWE9dGhpcy5fcGFyc2VUZW1wbGF0ZU5vZGVBdHRyaWJ1dGUobixpLG8sYy5uYW1lLGMudmFsdWUpfHxhO3JldHVybiBhfXN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5vZGVBdHRyaWJ1dGUobixpLG8sYSxzKXtyZXR1cm4gYS5zbGljZSgwLDMpPT09Im9uLSI/KG4ucmVtb3ZlQXR0cmlidXRlKGEpLG8uZXZlbnRzPW8uZXZlbnRzfHxbXSxvLmV2ZW50cy5wdXNoKHtuYW1lOmEuc2xpY2UoMyksdmFsdWU6c30pLCEwKTphPT09ImlkIj8oby5pZD1zLCEwKTohMX1zdGF0aWMgX2NvbnRlbnRGb3JUZW1wbGF0ZShuKXtsZXQgaT1uLl90ZW1wbGF0ZUluZm87cmV0dXJuIGkmJmkuY29udGVudHx8bi5jb250ZW50fV9zdGFtcFRlbXBsYXRlKG4saSl7biYmIW4uY29udGVudCYmd2luZG93LkhUTUxUZW1wbGF0ZUVsZW1lbnQmJkhUTUxUZW1wbGF0ZUVsZW1lbnQuZGVjb3JhdGUmJkhUTUxUZW1wbGF0ZUVsZW1lbnQuZGVjb3JhdGUobiksaT1pfHx0aGlzLmNvbnN0cnVjdG9yLl9wYXJzZVRlbXBsYXRlKG4pO2xldCBvPWkubm9kZUluZm9MaXN0LGE9aS5jb250ZW50fHxuLmNvbnRlbnQscz1kb2N1bWVudC5pbXBvcnROb2RlKGEsITApO3MuX19ub0luc2VydGlvblBvaW50PSFpLmhhc0luc2VydGlvblBvaW50O2xldCBsPXMubm9kZUxpc3Q9bmV3IEFycmF5KG8ubGVuZ3RoKTtzLiQ9e307Zm9yKGxldCBjPTAsdT1vLmxlbmd0aCxoO2M8dSYmKGg9b1tjXSk7YysrKXtsZXQgZj1sW2NdPWhtdChzLGgpO1h2ZSh0aGlzLHMuJCxmLGgpLEt2ZSh0aGlzLGYsaCxpKSwkdmUodGhpcyxmLGgpfXJldHVybiBzPXMsc31fYWRkTWV0aG9kRXZlbnRMaXN0ZW5lclRvTm9kZShuLGksbyxhKXthPWF8fG47bGV0IHM9WnZlKGEsaSxvKTtyZXR1cm4gdGhpcy5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZShuLGkscyksc31fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZShuLGksbyl7bi5hZGRFdmVudExpc3RlbmVyKGksbyl9X3JlbW92ZUV2ZW50TGlzdGVuZXJGcm9tTm9kZShuLGksbyl7bi5yZW1vdmVFdmVudExpc3RlbmVyKGksbyl9fXJldHVybiB0fSk7dmFyIGpNPTAsWE09W10senI9e0NPTVBVVEU6Il9fY29tcHV0ZUVmZmVjdHMiLFJFRkxFQ1Q6Il9fcmVmbGVjdEVmZmVjdHMiLE5PVElGWToiX19ub3RpZnlFZmZlY3RzIixQUk9QQUdBVEU6Il9fcHJvcGFnYXRlRWZmZWN0cyIsT0JTRVJWRToiX19vYnNlcnZlRWZmZWN0cyIsUkVBRF9PTkxZOiJfX3JlYWRPbmx5In0seG10PSJfX2NvbXB1dGVJbmZvIixKdmU9L1tBLVpdLztmdW5jdGlvbiB4RyhlLHQscil7bGV0IG49ZVt0XTtpZighbiluPWVbdF09e307ZWxzZSBpZighZS5oYXNPd25Qcm9wZXJ0eSh0KSYmKG49ZVt0XT1PYmplY3QuY3JlYXRlKGVbdF0pLHIpKWZvcihsZXQgaSBpbiBuKXtsZXQgbz1uW2ldLGE9bltpXT1BcnJheShvLmxlbmd0aCk7Zm9yKGxldCBzPTA7czxvLmxlbmd0aDtzKyspYVtzXT1vW3NdfXJldHVybiBufWZ1bmN0aW9uIFlNKGUsdCxyLG4saSxvKXtpZih0KXtsZXQgYT0hMSxzPWpNKys7Zm9yKGxldCBsIGluIHIpe2xldCBjPWk/YXUobCk6bCx1PXRbY107aWYodSlmb3IobGV0IGg9MCxmPXUubGVuZ3RoLHA7aDxmJiYocD11W2hdKTtoKyspKCFwLmluZm98fHAuaW5mby5sYXN0UnVuIT09cykmJighaXx8TUcobCxwLnRyaWdnZXIpKSYmKHAuaW5mbyYmKHAuaW5mby5sYXN0UnVuPXMpLHAuZm4oZSxsLHIsbixwLmluZm8saSxvKSxhPSEwKX1yZXR1cm4gYX1yZXR1cm4hMX1mdW5jdGlvbiBRdmUoZSx0LHIsbixpLG8sYSxzKXtsZXQgbD0hMSxjPWE/YXUobik6bix1PXRbY107aWYodSlmb3IobGV0IGg9MCxmPXUubGVuZ3RoLHA7aDxmJiYocD11W2hdKTtoKyspKCFwLmluZm98fHAuaW5mby5sYXN0UnVuIT09cikmJighYXx8TUcobixwLnRyaWdnZXIpKSYmKHAuaW5mbyYmKHAuaW5mby5sYXN0UnVuPXIpLHAuZm4oZSxuLGksbyxwLmluZm8sYSxzKSxsPSEwKTtyZXR1cm4gbH1mdW5jdGlvbiBNRyhlLHQpe2lmKHQpe2xldCByPXQubmFtZTtyZXR1cm4gcj09ZXx8ISEodC5zdHJ1Y3R1cmVkJiZfRyhyLGUpKXx8ISEodC53aWxkY2FyZCYmQXgocixlKSl9ZWxzZSByZXR1cm4hMH1mdW5jdGlvbiBwbXQoZSx0LHIsbixpKXtsZXQgbz10eXBlb2YgaS5tZXRob2Q9PSJzdHJpbmciP2VbaS5tZXRob2RdOmkubWV0aG9kLGE9aS5wcm9wZXJ0eTtvP28uY2FsbChlLGUuX19kYXRhW2FdLG5bYV0pOmkuZHluYW1pY0ZufHxjb25zb2xlLndhcm4oIm9ic2VydmVyIG1ldGhvZCBgIitpLm1ldGhvZCsiYCBub3QgZGVmaW5lZCIpfWZ1bmN0aW9uIHQxZShlLHQscixuLGkpe2xldCBvPWVbenIuTk9USUZZXSxhLHM9ak0rKztmb3IobGV0IGMgaW4gdCl0W2NdJiYobyYmUXZlKGUsbyxzLGMscixuLGkpfHxpJiZlMWUoZSxjLHIpKSYmKGE9ITApO2xldCBsO2EmJihsPWUuX19kYXRhSG9zdCkmJmwuX2ludmFsaWRhdGVQcm9wZXJ0aWVzJiZsLl9pbnZhbGlkYXRlUHJvcGVydGllcygpfWZ1bmN0aW9uIGUxZShlLHQscil7bGV0IG49YXUodCk7aWYobiE9PXQpe2xldCBpPUl4KG4pKyItY2hhbmdlZCI7cmV0dXJuIGJtdChlLGksclt0XSx0KSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBibXQoZSx0LHIsbil7bGV0IGk9e3ZhbHVlOnIscXVldWVQcm9wZXJ0eTohMH07biYmKGkucGF0aD1uKSx1ZShlKS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCh0LHtkZXRhaWw6aX0pKX1mdW5jdGlvbiByMWUoZSx0LHIsbixpLG8pe2xldCBzPShvP2F1KHQpOnQpIT10P3Q6bnVsbCxsPXM/Tm8oZSxzKTplLl9fZGF0YVt0XTtzJiZsPT09dm9pZCAwJiYobD1yW3RdKSxibXQoZSxpLmV2ZW50TmFtZSxsLHMpfWZ1bmN0aW9uIG4xZShlLHQscixuLGkpe2xldCBvLGE9ZS5kZXRhaWwscz1hJiZhLnBhdGg7cz8obj1tcChyLG4scyksbz1hJiZhLnZhbHVlKTpvPWUuY3VycmVudFRhcmdldFtyXSxvPWk/IW86bywoIXRbenIuUkVBRF9PTkxZXXx8IXRbenIuUkVBRF9PTkxZXVtuXSkmJnQuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aChuLG8sITAsQm9vbGVhbihzKSkmJighYXx8IWEucXVldWVQcm9wZXJ0eSkmJnQuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9ZnVuY3Rpb24gaTFlKGUsdCxyLG4saSl7bGV0IG89ZS5fX2RhdGFbdF07Vk0mJihvPVZNKG8saS5hdHRyTmFtZSwiYXR0cmlidXRlIixlKSksZS5fcHJvcGVydHlUb0F0dHJpYnV0ZSh0LGkuYXR0ck5hbWUsbyl9ZnVuY3Rpb24gbzFlKGUsdCxyLG4pe2xldCBpPWVbenIuQ09NUFVURV07aWYoaSlpZigkZHQpe2pNKys7bGV0IG89czFlKGUpLGE9W107Zm9yKGxldCBsIGluIHQpZG10KGwsaSxhLG8sbik7bGV0IHM7Zm9yKDtzPWEuc2hpZnQoKTspd210KGUsIiIsdCxyLHMpJiZkbXQocy5tZXRob2RJbmZvLGksYSxvLG4pO09iamVjdC5hc3NpZ24ocixlLl9fZGF0YU9sZCksT2JqZWN0LmFzc2lnbih0LGUuX19kYXRhUGVuZGluZyksZS5fX2RhdGFQZW5kaW5nPW51bGx9ZWxzZXtsZXQgbz10O2Zvcig7WU0oZSxpLG8scixuKTspT2JqZWN0LmFzc2lnbihyLGUuX19kYXRhT2xkKSxPYmplY3QuYXNzaWduKHQsZS5fX2RhdGFQZW5kaW5nKSxvPWUuX19kYXRhUGVuZGluZyxlLl9fZGF0YVBlbmRpbmc9bnVsbH19dmFyIGExZT0oZSx0LHIpPT57bGV0IG49MCxpPXQubGVuZ3RoLTEsbz0tMTtmb3IoO248PWk7KXtsZXQgYT1uK2k+PjEscz1yLmdldCh0W2FdLm1ldGhvZEluZm8pLXIuZ2V0KGUubWV0aG9kSW5mbyk7aWYoczwwKW49YSsxO2Vsc2UgaWYocz4wKWk9YS0xO2Vsc2V7bz1hO2JyZWFrfX1vPDAmJihvPWkrMSksdC5zcGxpY2UobywwLGUpfSxkbXQ9KGUsdCxyLG4saSk9PntsZXQgbz1pP2F1KGUpOmUsYT10W29dO2lmKGEpZm9yKGxldCBzPTA7czxhLmxlbmd0aDtzKyspe2xldCBsPWFbc107bC5pbmZvLmxhc3RSdW4hPT1qTSYmKCFpfHxNRyhlLGwudHJpZ2dlcikpJiYobC5pbmZvLmxhc3RSdW49ak0sYTFlKGwuaW5mbyxyLG4pKX19O2Z1bmN0aW9uIHMxZShlKXtsZXQgdD1lLmNvbnN0cnVjdG9yLl9fb3JkZXJlZENvbXB1dGVkRGVwcztpZighdCl7dD1uZXcgTWFwO2xldCByPWVbenIuQ09NUFVURV0se2NvdW50czpuLHJlYWR5OmksdG90YWw6b309bDFlKGUpLGE7Zm9yKDthPWkuc2hpZnQoKTspe3Quc2V0KGEsdC5zaXplKTtsZXQgcz1yW2FdO3MmJnMuZm9yRWFjaChsPT57bGV0IGM9bC5pbmZvLm1ldGhvZEluZm87LS1vLC0tbltjXT09PTAmJmkucHVzaChjKX0pfW8hPT0wJiZjb25zb2xlLndhcm4oYENvbXB1dGVkIGdyYXBoIGZvciAke2UubG9jYWxOYW1lfSBpbmNvbXBsZXRlOyBjaXJjdWxhcj9gKSxlLmNvbnN0cnVjdG9yLl9fb3JkZXJlZENvbXB1dGVkRGVwcz10fXJldHVybiB0fWZ1bmN0aW9uIGwxZShlKXtsZXQgdD1lW3htdF0scj17fSxuPWVbenIuQ09NUFVURV0saT1bXSxvPTA7Zm9yKGxldCBhIGluIHQpe2xldCBzPXRbYV07bys9clthXT1zLmFyZ3MuZmlsdGVyKGw9PiFsLmxpdGVyYWwpLmxlbmd0aCsocy5keW5hbWljRm4/MTowKX1mb3IobGV0IGEgaW4gbil0W2FdfHxpLnB1c2goYSk7cmV0dXJue2NvdW50czpyLHJlYWR5OmksdG90YWw6b319ZnVuY3Rpb24gd210KGUsdCxyLG4saSl7bGV0IG89U0coZSx0LHIsbixpKTtpZihvPT09WE0pcmV0dXJuITE7bGV0IGE9aS5tZXRob2RJbmZvO3JldHVybiBlLl9fZGF0YUhhc0FjY2Vzc29yJiZlLl9fZGF0YUhhc0FjY2Vzc29yW2FdP2UuX3NldFBlbmRpbmdQcm9wZXJ0eShhLG8sITApOihlW2FdPW8sITEpfWZ1bmN0aW9uIGMxZShlLHQscil7bGV0IG49ZS5fX2RhdGFMaW5rZWRQYXRocztpZihuKXtsZXQgaTtmb3IobGV0IG8gaW4gbil7bGV0IGE9bltvXTtBeChvLHQpPyhpPW1wKG8sYSx0KSxlLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoaSxyLCEwLCEwKSk6QXgoYSx0KSYmKGk9bXAoYSxvLHQpLGUuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aChpLHIsITAsITApKX19fWZ1bmN0aW9uIGJHKGUsdCxyLG4saSxvLGEpe3IuYmluZGluZ3M9ci5iaW5kaW5nc3x8W107bGV0IHM9e2tpbmQ6bix0YXJnZXQ6aSxwYXJ0czpvLGxpdGVyYWw6YSxpc0NvbXBvdW5kOm8ubGVuZ3RoIT09MX07aWYoci5iaW5kaW5ncy5wdXNoKHMpLGQxZShzKSl7bGV0e2V2ZW50OmMsbmVnYXRlOnV9PXMucGFydHNbMF07cy5saXN0ZW5lckV2ZW50PWN8fEl4KGkpKyItY2hhbmdlZCIscy5saXN0ZW5lck5lZ2F0ZT11fWxldCBsPXQubm9kZUluZm9MaXN0Lmxlbmd0aDtmb3IobGV0IGM9MDtjPHMucGFydHMubGVuZ3RoO2MrKyl7bGV0IHU9cy5wYXJ0c1tjXTt1LmNvbXBvdW5kSW5kZXg9Yyx1MWUoZSx0LHMsdSxsKX19ZnVuY3Rpb24gdTFlKGUsdCxyLG4saSl7aWYoIW4ubGl0ZXJhbClpZihyLmtpbmQ9PT0iYXR0cmlidXRlIiYmci50YXJnZXRbMF09PT0iLSIpY29uc29sZS53YXJuKCJDYW5ub3Qgc2V0IGF0dHJpYnV0ZSAiK3IudGFyZ2V0KycgYmVjYXVzZSAiLSIgaXMgbm90IGEgdmFsaWQgYXR0cmlidXRlIHN0YXJ0aW5nIGNoYXJhY3RlcicpO2Vsc2V7bGV0IG89bi5kZXBlbmRlbmNpZXMsYT17aW5kZXg6aSxiaW5kaW5nOnIscGFydDpuLGV2YWx1YXRvcjplfTtmb3IobGV0IHM9MDtzPG8ubGVuZ3RoO3MrKyl7bGV0IGw9b1tzXTt0eXBlb2YgbD09InN0cmluZyImJihsPU1tdChsKSxsLndpbGRjYXJkPSEwKSxlLl9hZGRUZW1wbGF0ZVByb3BlcnR5RWZmZWN0KHQsbC5yb290UHJvcGVydHkse2ZuOmgxZSxpbmZvOmEsdHJpZ2dlcjpsfSl9fX1mdW5jdGlvbiBoMWUoZSx0LHIsbixpLG8sYSl7bGV0IHM9YVtpLmluZGV4XSxsPWkuYmluZGluZyxjPWkucGFydDtpZihvJiZjLnNvdXJjZSYmdC5sZW5ndGg+Yy5zb3VyY2UubGVuZ3RoJiZsLmtpbmQ9PSJwcm9wZXJ0eSImJiFsLmlzQ29tcG91bmQmJnMuX19pc1Byb3BlcnR5RWZmZWN0c0NsaWVudCYmcy5fX2RhdGFIYXNBY2Nlc3NvciYmcy5fX2RhdGFIYXNBY2Nlc3NvcltsLnRhcmdldF0pe2xldCB1PXJbdF07dD1tcChjLnNvdXJjZSxsLnRhcmdldCx0KSxzLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgodCx1LCExLCEwKSYmZS5fZW5xdWV1ZUNsaWVudChzKX1lbHNle2xldCB1PWkuZXZhbHVhdG9yLl9ldmFsdWF0ZUJpbmRpbmcoZSxjLHQscixuLG8pO3UhPT1YTSYmZjFlKGUscyxsLGMsdSl9fWZ1bmN0aW9uIGYxZShlLHQscixuLGkpe2lmKGk9cDFlKHQsaSxyLG4pLFZNJiYoaT1WTShpLHIudGFyZ2V0LHIua2luZCx0KSksci5raW5kPT0iYXR0cmlidXRlIillLl92YWx1ZVRvTm9kZUF0dHJpYnV0ZSh0LGksci50YXJnZXQpO2Vsc2V7bGV0IG89ci50YXJnZXQ7dC5fX2lzUHJvcGVydHlFZmZlY3RzQ2xpZW50JiZ0Ll9fZGF0YUhhc0FjY2Vzc29yJiZ0Ll9fZGF0YUhhc0FjY2Vzc29yW29dPyghdFt6ci5SRUFEX09OTFldfHwhdFt6ci5SRUFEX09OTFldW29dKSYmdC5fc2V0UGVuZGluZ1Byb3BlcnR5KG8saSkmJmUuX2VucXVldWVDbGllbnQodCk6ZS5fc2V0VW5tYW5hZ2VkUHJvcGVydHlUb05vZGUodCxvLGkpfX1mdW5jdGlvbiBwMWUoZSx0LHIsbil7aWYoci5pc0NvbXBvdW5kKXtsZXQgaT1lLl9fZGF0YUNvbXBvdW5kU3RvcmFnZVtyLnRhcmdldF07aVtuLmNvbXBvdW5kSW5kZXhdPXQsdD1pLmpvaW4oIiIpfXJldHVybiByLmtpbmQhPT0iYXR0cmlidXRlIiYmKHIudGFyZ2V0PT09InRleHRDb250ZW50Inx8ci50YXJnZXQ9PT0idmFsdWUiJiYoZS5sb2NhbE5hbWU9PT0iaW5wdXQifHxlLmxvY2FsTmFtZT09PSJ0ZXh0YXJlYSIpKSYmKHQ9dD09bnVsbD8iIjp0KSx0fWZ1bmN0aW9uIGQxZShlKXtyZXR1cm4gQm9vbGVhbihlLnRhcmdldCkmJmUua2luZCE9ImF0dHJpYnV0ZSImJmUua2luZCE9InRleHQiJiYhZS5pc0NvbXBvdW5kJiZlLnBhcnRzWzBdLm1vZGU9PT0ieyJ9ZnVuY3Rpb24gbTFlKGUsdCl7bGV0e25vZGVMaXN0OnIsbm9kZUluZm9MaXN0Om59PXQ7aWYobi5sZW5ndGgpZm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspe2xldCBvPW5baV0sYT1yW2ldLHM9by5iaW5kaW5ncztpZihzKWZvcihsZXQgbD0wO2w8cy5sZW5ndGg7bCsrKXtsZXQgYz1zW2xdO2cxZShhLGMpLF8xZShhLGUsYyl9YS5fX2RhdGFIb3N0PWV9fWZ1bmN0aW9uIGcxZShlLHQpe2lmKHQuaXNDb21wb3VuZCl7bGV0IHI9ZS5fX2RhdGFDb21wb3VuZFN0b3JhZ2V8fChlLl9fZGF0YUNvbXBvdW5kU3RvcmFnZT17fSksbj10LnBhcnRzLGk9bmV3IEFycmF5KG4ubGVuZ3RoKTtmb3IobGV0IGE9MDthPG4ubGVuZ3RoO2ErKylpW2FdPW5bYV0ubGl0ZXJhbDtsZXQgbz10LnRhcmdldDtyW29dPWksdC5saXRlcmFsJiZ0LmtpbmQ9PSJwcm9wZXJ0eSImJihvPT09ImNsYXNzTmFtZSImJihlPXVlKGUpKSxlW29dPXQubGl0ZXJhbCl9fWZ1bmN0aW9uIF8xZShlLHQscil7aWYoci5saXN0ZW5lckV2ZW50KXtsZXQgbj1yLnBhcnRzWzBdO2UuYWRkRXZlbnRMaXN0ZW5lcihyLmxpc3RlbmVyRXZlbnQsZnVuY3Rpb24oaSl7bjFlKGksdCxyLnRhcmdldCxuLnNvdXJjZSxuLm5lZ2F0ZSl9KX19ZnVuY3Rpb24gbW10KGUsdCxyLG4saSxvKXtvPXQuc3RhdGljfHxvJiYodHlwZW9mIG8hPSJvYmplY3QifHxvW3QubWV0aG9kTmFtZV0pO2xldCBhPXttZXRob2ROYW1lOnQubWV0aG9kTmFtZSxhcmdzOnQuYXJncyxtZXRob2RJbmZvOmksZHluYW1pY0ZuOm99O2ZvcihsZXQgcz0wLGw7czx0LmFyZ3MubGVuZ3RoJiYobD10LmFyZ3Nbc10pO3MrKylsLmxpdGVyYWx8fGUuX2FkZFByb3BlcnR5RWZmZWN0KGwucm9vdFByb3BlcnR5LHIse2ZuOm4saW5mbzphLHRyaWdnZXI6bH0pO3JldHVybiBvJiZlLl9hZGRQcm9wZXJ0eUVmZmVjdCh0Lm1ldGhvZE5hbWUscix7Zm46bixpbmZvOmF9KSxhfWZ1bmN0aW9uIFNHKGUsdCxyLG4saSl7bGV0IG89ZS5fbWV0aG9kSG9zdHx8ZSxhPW9baS5tZXRob2ROYW1lXTtpZihhKXtsZXQgcz1lLl9tYXJzaGFsQXJncyhpLmFyZ3MsdCxyKTtyZXR1cm4gcz09PVhNP1hNOmEuYXBwbHkobyxzKX1lbHNlIGkuZHluYW1pY0ZufHxjb25zb2xlLndhcm4oIm1ldGhvZCBgIitpLm1ldGhvZE5hbWUrImAgbm90IGRlZmluZWQiKX12YXIgeTFlPVtdLFNtdD0iKD86W2EtekEtWl8kXVtcXHcuOiRcXC0qXSopIix2MWU9Iig/OlstK10/WzAtOV0qXFwuP1swLTldKyg/OltlRV1bLStdP1swLTldKyk/KSIseDFlPSIoPzonKD86W14nXFxcXF18XFxcXC4pKicpIixiMWU9Jyg/OiIoPzpbXiJcXFxcXXxcXFxcLikqIiknLHcxZT0iKD86Iit4MWUrInwiK2IxZSsiKSIsZ210PSIoPzooIitTbXQrInwiK3YxZSsifCIrdzFlKyIpXFxzKikiLFMxZT0iKD86IitnbXQrIig/OixcXHMqIitnbXQrIikqKSIsTTFlPSIoPzpcXChcXHMqKD86IitTMWUrIj8pXFwpXFxzKikiLEUxZT0iKCIrU210KyJcXHMqIitNMWUrIj8pIixUMWU9IihcXFtcXFt8e3spXFxzKiIsQzFlPSIoPzpdXXx9fSkiLEExZT0iKD86KCEpXFxzKik/IixQMWU9VDFlK0ExZStFMWUrQzFlLF9tdD1uZXcgUmVnRXhwKFAxZSwiZyIpO2Z1bmN0aW9uIHltdChlKXtsZXQgdD0iIjtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl0Kz1lW3JdLmxpdGVyYWx8fCIiO3JldHVybiB0fWZ1bmN0aW9uIHdHKGUpe2xldCB0PWUubWF0Y2goLyhbXlxzXSs/KVwoKFtcc1xTXSopXCkvKTtpZih0KXtsZXQgbj17bWV0aG9kTmFtZTp0WzFdLHN0YXRpYzohMCxhcmdzOnkxZX07aWYodFsyXS50cmltKCkpe2xldCBpPXRbMl0ucmVwbGFjZSgvXFwsL2csIiZjb21tYTsiKS5zcGxpdCgiLCIpO3JldHVybiBJMWUoaSxuKX1lbHNlIHJldHVybiBufXJldHVybiBudWxsfWZ1bmN0aW9uIEkxZShlLHQpe3JldHVybiB0LmFyZ3M9ZS5tYXAoZnVuY3Rpb24ocil7bGV0IG49TW10KHIpO3JldHVybiBuLmxpdGVyYWx8fCh0LnN0YXRpYz0hMSksbn0sdGhpcyksdH1mdW5jdGlvbiBNbXQoZSl7bGV0IHQ9ZS50cmltKCkucmVwbGFjZSgvJmNvbW1hOy9nLCIsIikucmVwbGFjZSgvXFwoLikvZywiJDEiKSxyPXtuYW1lOnQsdmFsdWU6IiIsbGl0ZXJhbDohMX0sbj10WzBdO3N3aXRjaChuPT09Ii0iJiYobj10WzFdKSxuPj0iMCImJm48PSI5IiYmKG49IiMiKSxuKXtjYXNlIiciOmNhc2UnIic6ci52YWx1ZT10LnNsaWNlKDEsLTEpLHIubGl0ZXJhbD0hMDticmVhaztjYXNlIiMiOnIudmFsdWU9TnVtYmVyKHQpLHIubGl0ZXJhbD0hMDticmVha31yZXR1cm4gci5saXRlcmFsfHwoci5yb290UHJvcGVydHk9YXUodCksci5zdHJ1Y3R1cmVkPURJKHQpLHIuc3RydWN0dXJlZCYmKHIud2lsZGNhcmQ9dC5zbGljZSgtMik9PSIuKiIsci53aWxkY2FyZCYmKHIubmFtZT10LnNsaWNlKDAsLTIpKSkpLHJ9ZnVuY3Rpb24gdm10KGUsdCxyKXtsZXQgbj1ObyhlLHIpO3JldHVybiBuPT09dm9pZCAwJiYobj10W3JdKSxufWZ1bmN0aW9uIEVtdChlLHQscixuKXtsZXQgaT17aW5kZXhTcGxpY2VzOm59O2tJJiYhZS5fb3ZlcnJpZGVMZWdhY3lVbmRlZmluZWQmJih0LnNwbGljZXM9aSksZS5ub3RpZnlQYXRoKHIrIi5zcGxpY2VzIixpKSxlLm5vdGlmeVBhdGgocisiLmxlbmd0aCIsdC5sZW5ndGgpLGtJJiYhZS5fb3ZlcnJpZGVMZWdhY3lVbmRlZmluZWQmJihpLmluZGV4U3BsaWNlcz1bXSl9ZnVuY3Rpb24gR00oZSx0LHIsbixpLG8pe0VtdChlLHQscixbe2luZGV4Om4sYWRkZWRDb3VudDppLHJlbW92ZWQ6byxvYmplY3Q6dCx0eXBlOiJzcGxpY2UifV0pfWZ1bmN0aW9uIEwxZShlKXtyZXR1cm4gZVswXS50b1VwcGVyQ2FzZSgpK2Uuc3Vic3RyaW5nKDEpfXZhciBoXz1ObihlPT57bGV0IHQ9Zm10KEhJKGUpKTtjbGFzcyByIGV4dGVuZHMgdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fX2lzUHJvcGVydHlFZmZlY3RzQ2xpZW50PSEwLHRoaXMuX19kYXRhQ2xpZW50c1JlYWR5LHRoaXMuX19kYXRhUGVuZGluZ0NsaWVudHMsdGhpcy5fX2RhdGFUb05vdGlmeSx0aGlzLl9fZGF0YUxpbmtlZFBhdGhzLHRoaXMuX19kYXRhSGFzUGF0aHMsdGhpcy5fX2RhdGFDb21wb3VuZFN0b3JhZ2UsdGhpcy5fX2RhdGFIb3N0LHRoaXMuX19kYXRhVGVtcCx0aGlzLl9fZGF0YUNsaWVudHNJbml0aWFsaXplZCx0aGlzLl9fZGF0YSx0aGlzLl9fZGF0YVBlbmRpbmcsdGhpcy5fX2RhdGFPbGQsdGhpcy5fX2NvbXB1dGVFZmZlY3RzLHRoaXMuX19jb21wdXRlSW5mbyx0aGlzLl9fcmVmbGVjdEVmZmVjdHMsdGhpcy5fX25vdGlmeUVmZmVjdHMsdGhpcy5fX3Byb3BhZ2F0ZUVmZmVjdHMsdGhpcy5fX29ic2VydmVFZmZlY3RzLHRoaXMuX19yZWFkT25seSx0aGlzLl9fdGVtcGxhdGVJbmZvLHRoaXMuX292ZXJyaWRlTGVnYWN5VW5kZWZpbmVkfWdldCBQUk9QRVJUWV9FRkZFQ1RfVFlQRVMoKXtyZXR1cm4genJ9X2luaXRpYWxpemVQcm9wZXJ0aWVzKCl7c3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCksdGhpcy5fcmVnaXN0ZXJIb3N0KCksdGhpcy5fX2RhdGFDbGllbnRzUmVhZHk9ITEsdGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50cz1udWxsLHRoaXMuX19kYXRhVG9Ob3RpZnk9bnVsbCx0aGlzLl9fZGF0YUxpbmtlZFBhdGhzPW51bGwsdGhpcy5fX2RhdGFIYXNQYXRocz0hMSx0aGlzLl9fZGF0YUNvbXBvdW5kU3RvcmFnZT10aGlzLl9fZGF0YUNvbXBvdW5kU3RvcmFnZXx8bnVsbCx0aGlzLl9fZGF0YUhvc3Q9dGhpcy5fX2RhdGFIb3N0fHxudWxsLHRoaXMuX19kYXRhVGVtcD17fSx0aGlzLl9fZGF0YUNsaWVudHNJbml0aWFsaXplZD0hMX1fcmVnaXN0ZXJIb3N0KCl7aWYoV00ubGVuZ3RoKXtsZXQgaT1XTVtXTS5sZW5ndGgtMV07aS5fZW5xdWV1ZUNsaWVudCh0aGlzKSx0aGlzLl9fZGF0YUhvc3Q9aX19X2luaXRpYWxpemVQcm90b1Byb3BlcnRpZXMoaSl7dGhpcy5fX2RhdGE9T2JqZWN0LmNyZWF0ZShpKSx0aGlzLl9fZGF0YVBlbmRpbmc9T2JqZWN0LmNyZWF0ZShpKSx0aGlzLl9fZGF0YU9sZD17fX1faW5pdGlhbGl6ZUluc3RhbmNlUHJvcGVydGllcyhpKXtsZXQgbz10aGlzW3pyLlJFQURfT05MWV07Zm9yKGxldCBhIGluIGkpKCFvfHwhb1thXSkmJih0aGlzLl9fZGF0YVBlbmRpbmc9dGhpcy5fX2RhdGFQZW5kaW5nfHx7fSx0aGlzLl9fZGF0YU9sZD10aGlzLl9fZGF0YU9sZHx8e30sdGhpcy5fX2RhdGFbYV09dGhpcy5fX2RhdGFQZW5kaW5nW2FdPWlbYV0pfV9hZGRQcm9wZXJ0eUVmZmVjdChpLG8sYSl7dGhpcy5fY3JlYXRlUHJvcGVydHlBY2Nlc3NvcihpLG89PXpyLlJFQURfT05MWSk7bGV0IHM9eEcodGhpcyxvLCEwKVtpXTtzfHwocz10aGlzW29dW2ldPVtdKSxzLnB1c2goYSl9X3JlbW92ZVByb3BlcnR5RWZmZWN0KGksbyxhKXtsZXQgcz14Ryh0aGlzLG8sITApW2ldLGw9cy5pbmRleE9mKGEpO2w+PTAmJnMuc3BsaWNlKGwsMSl9X2hhc1Byb3BlcnR5RWZmZWN0KGksbyl7bGV0IGE9dGhpc1tvXTtyZXR1cm4gQm9vbGVhbihhJiZhW2ldKX1faGFzUmVhZE9ubHlFZmZlY3QoaSl7cmV0dXJuIHRoaXMuX2hhc1Byb3BlcnR5RWZmZWN0KGksenIuUkVBRF9PTkxZKX1faGFzTm90aWZ5RWZmZWN0KGkpe3JldHVybiB0aGlzLl9oYXNQcm9wZXJ0eUVmZmVjdChpLHpyLk5PVElGWSl9X2hhc1JlZmxlY3RFZmZlY3QoaSl7cmV0dXJuIHRoaXMuX2hhc1Byb3BlcnR5RWZmZWN0KGksenIuUkVGTEVDVCl9X2hhc0NvbXB1dGVkRWZmZWN0KGkpe3JldHVybiB0aGlzLl9oYXNQcm9wZXJ0eUVmZmVjdChpLHpyLkNPTVBVVEUpfV9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoaSxvLGEscyl7aWYoc3x8YXUoQXJyYXkuaXNBcnJheShpKT9pWzBdOmkpIT09aSl7aWYoIXMpe2xldCBsPU5vKHRoaXMsaSk7aWYoaT15Ryh0aGlzLGksbyksIWl8fCFzdXBlci5fc2hvdWxkUHJvcGVydHlDaGFuZ2UoaSxvLGwpKXJldHVybiExfWlmKHRoaXMuX19kYXRhSGFzUGF0aHM9ITAsdGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KGksbyxhKSlyZXR1cm4gYzFlKHRoaXMsaSxvKSwhMH1lbHNle2lmKHRoaXMuX19kYXRhSGFzQWNjZXNzb3ImJnRoaXMuX19kYXRhSGFzQWNjZXNzb3JbaV0pcmV0dXJuIHRoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eShpLG8sYSk7dGhpc1tpXT1vfXJldHVybiExfV9zZXRVbm1hbmFnZWRQcm9wZXJ0eVRvTm9kZShpLG8sYSl7KGEhPT1pW29dfHx0eXBlb2YgYT09Im9iamVjdCIpJiYobz09PSJjbGFzc05hbWUiJiYoaT11ZShpKSksaVtvXT1hKX1fc2V0UGVuZGluZ1Byb3BlcnR5KGksbyxhKXtsZXQgcz10aGlzLl9fZGF0YUhhc1BhdGhzJiZESShpKSxsPXM/dGhpcy5fX2RhdGFUZW1wOnRoaXMuX19kYXRhO3JldHVybiB0aGlzLl9zaG91bGRQcm9wZXJ0eUNoYW5nZShpLG8sbFtpXSk/KHRoaXMuX19kYXRhUGVuZGluZ3x8KHRoaXMuX19kYXRhUGVuZGluZz17fSx0aGlzLl9fZGF0YU9sZD17fSksaSBpbiB0aGlzLl9fZGF0YU9sZHx8KHRoaXMuX19kYXRhT2xkW2ldPXRoaXMuX19kYXRhW2ldKSxzP3RoaXMuX19kYXRhVGVtcFtpXT1vOnRoaXMuX19kYXRhW2ldPW8sdGhpcy5fX2RhdGFQZW5kaW5nW2ldPW8sKHN8fHRoaXNbenIuTk9USUZZXSYmdGhpc1t6ci5OT1RJRlldW2ldKSYmKHRoaXMuX19kYXRhVG9Ob3RpZnk9dGhpcy5fX2RhdGFUb05vdGlmeXx8e30sdGhpcy5fX2RhdGFUb05vdGlmeVtpXT1hKSwhMCk6ITF9X3NldFByb3BlcnR5KGksbyl7dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KGksbywhMCkmJnRoaXMuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9X2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl7dGhpcy5fX2RhdGFSZWFkeSYmdGhpcy5fZmx1c2hQcm9wZXJ0aWVzKCl9X2VucXVldWVDbGllbnQoaSl7dGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50cz10aGlzLl9fZGF0YVBlbmRpbmdDbGllbnRzfHxbXSxpIT09dGhpcyYmdGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50cy5wdXNoKGkpfV9mbHVzaENsaWVudHMoKXt0aGlzLl9fZGF0YUNsaWVudHNSZWFkeT90aGlzLl9fZW5hYmxlT3JGbHVzaENsaWVudHMoKToodGhpcy5fX2RhdGFDbGllbnRzUmVhZHk9ITAsdGhpcy5fcmVhZHlDbGllbnRzKCksdGhpcy5fX2RhdGFSZWFkeT0hMCl9X19lbmFibGVPckZsdXNoQ2xpZW50cygpe2xldCBpPXRoaXMuX19kYXRhUGVuZGluZ0NsaWVudHM7aWYoaSl7dGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50cz1udWxsO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKXtsZXQgYT1pW29dO2EuX19kYXRhRW5hYmxlZD9hLl9fZGF0YVBlbmRpbmcmJmEuX2ZsdXNoUHJvcGVydGllcygpOmEuX2VuYWJsZVByb3BlcnRpZXMoKX19fV9yZWFkeUNsaWVudHMoKXt0aGlzLl9fZW5hYmxlT3JGbHVzaENsaWVudHMoKX1zZXRQcm9wZXJ0aWVzKGksbyl7Zm9yKGxldCBhIGluIGkpKG98fCF0aGlzW3pyLlJFQURfT05MWV18fCF0aGlzW3pyLlJFQURfT05MWV1bYV0pJiZ0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoYSxpW2FdLCEwKTt0aGlzLl9pbnZhbGlkYXRlUHJvcGVydGllcygpfXJlYWR5KCl7dGhpcy5fZmx1c2hQcm9wZXJ0aWVzKCksdGhpcy5fX2RhdGFDbGllbnRzUmVhZHl8fHRoaXMuX2ZsdXNoQ2xpZW50cygpLHRoaXMuX19kYXRhUGVuZGluZyYmdGhpcy5fZmx1c2hQcm9wZXJ0aWVzKCl9X3Byb3BlcnRpZXNDaGFuZ2VkKGksbyxhKXtsZXQgcz10aGlzLl9fZGF0YUhhc1BhdGhzO3RoaXMuX19kYXRhSGFzUGF0aHM9ITE7bGV0IGw7bzFlKHRoaXMsbyxhLHMpLGw9dGhpcy5fX2RhdGFUb05vdGlmeSx0aGlzLl9fZGF0YVRvTm90aWZ5PW51bGwsdGhpcy5fcHJvcGFnYXRlUHJvcGVydHlDaGFuZ2VzKG8sYSxzKSx0aGlzLl9mbHVzaENsaWVudHMoKSxZTSh0aGlzLHRoaXNbenIuUkVGTEVDVF0sbyxhLHMpLFlNKHRoaXMsdGhpc1t6ci5PQlNFUlZFXSxvLGEscyksbCYmdDFlKHRoaXMsbCxvLGEscyksdGhpcy5fX2RhdGFDb3VudGVyPT0xJiYodGhpcy5fX2RhdGFUZW1wPXt9KX1fcHJvcGFnYXRlUHJvcGVydHlDaGFuZ2VzKGksbyxhKXt0aGlzW3pyLlBST1BBR0FURV0mJllNKHRoaXMsdGhpc1t6ci5QUk9QQUdBVEVdLGksbyxhKSx0aGlzLl9fdGVtcGxhdGVJbmZvJiZ0aGlzLl9ydW5FZmZlY3RzRm9yVGVtcGxhdGUodGhpcy5fX3RlbXBsYXRlSW5mbyxpLG8sYSl9X3J1bkVmZmVjdHNGb3JUZW1wbGF0ZShpLG8sYSxzKXtsZXQgbD0oYyx1KT0+e1lNKHRoaXMsaS5wcm9wZXJ0eUVmZmVjdHMsYyxhLHUsaS5ub2RlTGlzdCk7Zm9yKGxldCBoPWkuZmlyc3RDaGlsZDtoO2g9aC5uZXh0U2libGluZyl0aGlzLl9ydW5FZmZlY3RzRm9yVGVtcGxhdGUoaCxjLGEsdSl9O2kucnVuRWZmZWN0cz9pLnJ1bkVmZmVjdHMobCxvLHMpOmwobyxzKX1saW5rUGF0aHMoaSxvKXtpPVB4KGkpLG89UHgobyksdGhpcy5fX2RhdGFMaW5rZWRQYXRocz10aGlzLl9fZGF0YUxpbmtlZFBhdGhzfHx7fSx0aGlzLl9fZGF0YUxpbmtlZFBhdGhzW2ldPW99dW5saW5rUGF0aHMoaSl7aT1QeChpKSx0aGlzLl9fZGF0YUxpbmtlZFBhdGhzJiZkZWxldGUgdGhpcy5fX2RhdGFMaW5rZWRQYXRoc1tpXX1ub3RpZnlTcGxpY2VzKGksbyl7bGV0IGE9e3BhdGg6IiJ9LHM9Tm8odGhpcyxpLGEpO0VtdCh0aGlzLHMsYS5wYXRoLG8pfWdldChpLG8pe3JldHVybiBObyhvfHx0aGlzLGkpfXNldChpLG8sYSl7YT95RyhhLGksbyk6KCF0aGlzW3pyLlJFQURfT05MWV18fCF0aGlzW3pyLlJFQURfT05MWV1baV0pJiZ0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoaSxvLCEwKSYmdGhpcy5faW52YWxpZGF0ZVByb3BlcnRpZXMoKX1wdXNoKGksLi4ubyl7bGV0IGE9e3BhdGg6IiJ9LHM9Tm8odGhpcyxpLGEpLGw9cy5sZW5ndGgsYz1zLnB1c2goLi4ubyk7cmV0dXJuIG8ubGVuZ3RoJiZHTSh0aGlzLHMsYS5wYXRoLGwsby5sZW5ndGgsW10pLGN9cG9wKGkpe2xldCBvPXtwYXRoOiIifSxhPU5vKHRoaXMsaSxvKSxzPUJvb2xlYW4oYS5sZW5ndGgpLGw9YS5wb3AoKTtyZXR1cm4gcyYmR00odGhpcyxhLG8ucGF0aCxhLmxlbmd0aCwwLFtsXSksbH1zcGxpY2UoaSxvLGEsLi4ucyl7bGV0IGw9e3BhdGg6IiJ9LGM9Tm8odGhpcyxpLGwpO288MD9vPWMubGVuZ3RoLU1hdGguZmxvb3IoLW8pOm8mJihvPU1hdGguZmxvb3IobykpO2xldCB1O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09Mj91PWMuc3BsaWNlKG8pOnU9Yy5zcGxpY2UobyxhLC4uLnMpLChzLmxlbmd0aHx8dS5sZW5ndGgpJiZHTSh0aGlzLGMsbC5wYXRoLG8scy5sZW5ndGgsdSksdX1zaGlmdChpKXtsZXQgbz17cGF0aDoiIn0sYT1Obyh0aGlzLGksbykscz1Cb29sZWFuKGEubGVuZ3RoKSxsPWEuc2hpZnQoKTtyZXR1cm4gcyYmR00odGhpcyxhLG8ucGF0aCwwLDAsW2xdKSxsfXVuc2hpZnQoaSwuLi5vKXtsZXQgYT17cGF0aDoiIn0scz1Obyh0aGlzLGksYSksbD1zLnVuc2hpZnQoLi4ubyk7cmV0dXJuIG8ubGVuZ3RoJiZHTSh0aGlzLHMsYS5wYXRoLDAsby5sZW5ndGgsW10pLGx9bm90aWZ5UGF0aChpLG8pe2xldCBhO2lmKGFyZ3VtZW50cy5sZW5ndGg9PTEpe2xldCBzPXtwYXRoOiIifTtvPU5vKHRoaXMsaSxzKSxhPXMucGF0aH1lbHNlIEFycmF5LmlzQXJyYXkoaSk/YT1QeChpKTphPWk7dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5T3JQYXRoKGEsbywhMCwhMCkmJnRoaXMuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9X2NyZWF0ZVJlYWRPbmx5UHJvcGVydHkoaSxvKXt0aGlzLl9hZGRQcm9wZXJ0eUVmZmVjdChpLHpyLlJFQURfT05MWSksbyYmKHRoaXNbIl9zZXQiK0wxZShpKV09ZnVuY3Rpb24oYSl7dGhpcy5fc2V0UHJvcGVydHkoaSxhKX0pfV9jcmVhdGVQcm9wZXJ0eU9ic2VydmVyKGksbyxhKXtsZXQgcz17cHJvcGVydHk6aSxtZXRob2Q6byxkeW5hbWljRm46Qm9vbGVhbihhKX07dGhpcy5fYWRkUHJvcGVydHlFZmZlY3QoaSx6ci5PQlNFUlZFLHtmbjpwbXQsaW5mbzpzLHRyaWdnZXI6e25hbWU6aX19KSxhJiZ0aGlzLl9hZGRQcm9wZXJ0eUVmZmVjdChvLHpyLk9CU0VSVkUse2ZuOnBtdCxpbmZvOnMsdHJpZ2dlcjp7bmFtZTpvfX0pfV9jcmVhdGVNZXRob2RPYnNlcnZlcihpLG8pe2xldCBhPXdHKGkpO2lmKCFhKXRocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIG9ic2VydmVyIGV4cHJlc3Npb24gJyIraSsiJyIpO21tdCh0aGlzLGEsenIuT0JTRVJWRSxTRyxudWxsLG8pfV9jcmVhdGVOb3RpZnlpbmdQcm9wZXJ0eShpKXt0aGlzLl9hZGRQcm9wZXJ0eUVmZmVjdChpLHpyLk5PVElGWSx7Zm46cjFlLGluZm86e2V2ZW50TmFtZTpJeChpKSsiLWNoYW5nZWQiLHByb3BlcnR5Oml9fSl9X2NyZWF0ZVJlZmxlY3RlZFByb3BlcnR5KGkpe2xldCBvPXRoaXMuY29uc3RydWN0b3IuYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KGkpO29bMF09PT0iLSI/Y29uc29sZS53YXJuKCJQcm9wZXJ0eSAiK2krIiBjYW5ub3QgYmUgcmVmbGVjdGVkIHRvIGF0dHJpYnV0ZSAiK28rJyBiZWNhdXNlICItIiBpcyBub3QgYSB2YWxpZCBzdGFydGluZyBhdHRyaWJ1dGUgbmFtZS4gVXNlIGEgbG93ZXJjYXNlIGZpcnN0IGxldHRlciBmb3IgdGhlIHByb3BlcnR5IGluc3RlYWQuJyk6dGhpcy5fYWRkUHJvcGVydHlFZmZlY3QoaSx6ci5SRUZMRUNULHtmbjppMWUsaW5mbzp7YXR0ck5hbWU6b319KX1fY3JlYXRlQ29tcHV0ZWRQcm9wZXJ0eShpLG8sYSl7bGV0IHM9d0cobyk7aWYoIXMpdGhyb3cgbmV3IEVycm9yKCJNYWxmb3JtZWQgY29tcHV0ZWQgZXhwcmVzc2lvbiAnIitvKyInIik7bGV0IGw9bW10KHRoaXMscyx6ci5DT01QVVRFLHdtdCxpLGEpO3hHKHRoaXMseG10KVtpXT1sfV9tYXJzaGFsQXJncyhpLG8sYSl7bGV0IHM9dGhpcy5fX2RhdGEsbD1bXTtmb3IobGV0IGM9MCx1PWkubGVuZ3RoO2M8dTtjKyspe2xldHtuYW1lOmgsc3RydWN0dXJlZDpmLHdpbGRjYXJkOnAsdmFsdWU6ZCxsaXRlcmFsOmd9PWlbY107aWYoIWcpaWYocCl7bGV0IF89QXgoaCxvKSx5PXZtdChzLGEsXz9vOmgpO2Q9e3BhdGg6Xz9vOmgsdmFsdWU6eSxiYXNlOl8/Tm8ocyxoKTp5fX1lbHNlIGQ9Zj92bXQocyxhLGgpOnNbaF07aWYoa0kmJiF0aGlzLl9vdmVycmlkZUxlZ2FjeVVuZGVmaW5lZCYmZD09PXZvaWQgMCYmaS5sZW5ndGg+MSlyZXR1cm4gWE07bFtjXT1kfXJldHVybiBsfXN0YXRpYyBhZGRQcm9wZXJ0eUVmZmVjdChpLG8sYSl7dGhpcy5wcm90b3R5cGUuX2FkZFByb3BlcnR5RWZmZWN0KGksbyxhKX1zdGF0aWMgY3JlYXRlUHJvcGVydHlPYnNlcnZlcihpLG8sYSl7dGhpcy5wcm90b3R5cGUuX2NyZWF0ZVByb3BlcnR5T2JzZXJ2ZXIoaSxvLGEpfXN0YXRpYyBjcmVhdGVNZXRob2RPYnNlcnZlcihpLG8pe3RoaXMucHJvdG90eXBlLl9jcmVhdGVNZXRob2RPYnNlcnZlcihpLG8pfXN0YXRpYyBjcmVhdGVOb3RpZnlpbmdQcm9wZXJ0eShpKXt0aGlzLnByb3RvdHlwZS5fY3JlYXRlTm90aWZ5aW5nUHJvcGVydHkoaSl9c3RhdGljIGNyZWF0ZVJlYWRPbmx5UHJvcGVydHkoaSxvKXt0aGlzLnByb3RvdHlwZS5fY3JlYXRlUmVhZE9ubHlQcm9wZXJ0eShpLG8pfXN0YXRpYyBjcmVhdGVSZWZsZWN0ZWRQcm9wZXJ0eShpKXt0aGlzLnByb3RvdHlwZS5fY3JlYXRlUmVmbGVjdGVkUHJvcGVydHkoaSl9c3RhdGljIGNyZWF0ZUNvbXB1dGVkUHJvcGVydHkoaSxvLGEpe3RoaXMucHJvdG90eXBlLl9jcmVhdGVDb21wdXRlZFByb3BlcnR5KGksbyxhKX1zdGF0aWMgYmluZFRlbXBsYXRlKGkpe3JldHVybiB0aGlzLnByb3RvdHlwZS5fYmluZFRlbXBsYXRlKGkpfV9iaW5kVGVtcGxhdGUoaSxvKXtsZXQgYT10aGlzLmNvbnN0cnVjdG9yLl9wYXJzZVRlbXBsYXRlKGkpLHM9dGhpcy5fX3ByZUJvdW5kVGVtcGxhdGVJbmZvPT1hO2lmKCFzKWZvcihsZXQgbCBpbiBhLnByb3BlcnR5RWZmZWN0cyl0aGlzLl9jcmVhdGVQcm9wZXJ0eUFjY2Vzc29yKGwpO2lmKG8paWYoYT1PYmplY3QuY3JlYXRlKGEpLGEud2FzUHJlQm91bmQ9cywhdGhpcy5fX3RlbXBsYXRlSW5mbyl0aGlzLl9fdGVtcGxhdGVJbmZvPWE7ZWxzZXtsZXQgbD1pLl9wYXJlbnRUZW1wbGF0ZUluZm98fHRoaXMuX190ZW1wbGF0ZUluZm8sYz1sLmxhc3RDaGlsZDthLnBhcmVudD1sLGwubGFzdENoaWxkPWEsYS5wcmV2aW91c1NpYmxpbmc9YyxjP2MubmV4dFNpYmxpbmc9YTpsLmZpcnN0Q2hpbGQ9YX1lbHNlIHRoaXMuX19wcmVCb3VuZFRlbXBsYXRlSW5mbz1hO3JldHVybiBhfXN0YXRpYyBfYWRkVGVtcGxhdGVQcm9wZXJ0eUVmZmVjdChpLG8sYSl7bGV0IHM9aS5ob3N0UHJvcHM9aS5ob3N0UHJvcHN8fHt9O3Nbb109ITA7bGV0IGw9aS5wcm9wZXJ0eUVmZmVjdHM9aS5wcm9wZXJ0eUVmZmVjdHN8fHt9OyhsW29dPWxbb118fFtdKS5wdXNoKGEpfV9zdGFtcFRlbXBsYXRlKGksbyl7bz1vfHx0aGlzLl9iaW5kVGVtcGxhdGUoaSwhMCksV00ucHVzaCh0aGlzKTtsZXQgYT1zdXBlci5fc3RhbXBUZW1wbGF0ZShpLG8pO2lmKFdNLnBvcCgpLG8ubm9kZUxpc3Q9YS5ub2RlTGlzdCwhby53YXNQcmVCb3VuZCl7bGV0IHM9by5jaGlsZE5vZGVzPVtdO2ZvcihsZXQgbD1hLmZpcnN0Q2hpbGQ7bDtsPWwubmV4dFNpYmxpbmcpcy5wdXNoKGwpfXJldHVybiBhLnRlbXBsYXRlSW5mbz1vLG0xZSh0aGlzLG8pLHRoaXMuX19kYXRhQ2xpZW50c1JlYWR5JiYodGhpcy5fcnVuRWZmZWN0c0ZvclRlbXBsYXRlKG8sdGhpcy5fX2RhdGEsbnVsbCwhMSksdGhpcy5fZmx1c2hDbGllbnRzKCkpLGF9X3JlbW92ZUJvdW5kRG9tKGkpe2xldCBvPWkudGVtcGxhdGVJbmZvLHtwcmV2aW91c1NpYmxpbmc6YSxuZXh0U2libGluZzpzLHBhcmVudDpsfT1vO2E/YS5uZXh0U2libGluZz1zOmwmJihsLmZpcnN0Q2hpbGQ9cykscz9zLnByZXZpb3VzU2libGluZz1hOmwmJihsLmxhc3RDaGlsZD1hKSxvLm5leHRTaWJsaW5nPW8ucHJldmlvdXNTaWJsaW5nPW51bGw7bGV0IGM9by5jaGlsZE5vZGVzO2ZvcihsZXQgdT0wO3U8Yy5sZW5ndGg7dSsrKXtsZXQgaD1jW3VdO3VlKHVlKGgpLnBhcmVudE5vZGUpLnJlbW92ZUNoaWxkKGgpfX1zdGF0aWMgX3BhcnNlVGVtcGxhdGVOb2RlKGksbyxhKXtsZXQgcz10Ll9wYXJzZVRlbXBsYXRlTm9kZS5jYWxsKHRoaXMsaSxvLGEpO2lmKGkubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERSl7bGV0IGw9dGhpcy5fcGFyc2VCaW5kaW5ncyhpLnRleHRDb250ZW50LG8pO2wmJihpLnRleHRDb250ZW50PXltdChsKXx8IiAiLGJHKHRoaXMsbyxhLCJ0ZXh0IiwidGV4dENvbnRlbnQiLGwpLHM9ITApfXJldHVybiBzfXN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5vZGVBdHRyaWJ1dGUoaSxvLGEscyxsKXtsZXQgYz10aGlzLl9wYXJzZUJpbmRpbmdzKGwsbyk7aWYoYyl7bGV0IHU9cyxoPSJwcm9wZXJ0eSI7SnZlLnRlc3Qocyk/aD0iYXR0cmlidXRlIjpzW3MubGVuZ3RoLTFdPT0iJCImJihzPXMuc2xpY2UoMCwtMSksaD0iYXR0cmlidXRlIik7bGV0IGY9eW10KGMpO3JldHVybiBmJiZoPT0iYXR0cmlidXRlIiYmKHM9PSJjbGFzcyImJmkuaGFzQXR0cmlidXRlKCJjbGFzcyIpJiYoZis9IiAiK2kuZ2V0QXR0cmlidXRlKHMpKSxpLnNldEF0dHJpYnV0ZShzLGYpKSxoPT0iYXR0cmlidXRlIiYmdT09ImRpc2FibGUtdXBncmFkZSQiJiZpLnNldEF0dHJpYnV0ZShzLCIiKSxpLmxvY2FsTmFtZT09PSJpbnB1dCImJnU9PT0idmFsdWUiJiZpLnNldEF0dHJpYnV0ZSh1LCIiKSxpLnJlbW92ZUF0dHJpYnV0ZSh1KSxoPT09InByb3BlcnR5IiYmKHM9U20ocykpLGJHKHRoaXMsbyxhLGgscyxjLGYpLCEwfWVsc2UgcmV0dXJuIHQuX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlLmNhbGwodGhpcyxpLG8sYSxzLGwpfXN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5lc3RlZFRlbXBsYXRlKGksbyxhKXtsZXQgcz10Ll9wYXJzZVRlbXBsYXRlTmVzdGVkVGVtcGxhdGUuY2FsbCh0aGlzLGksbyxhKSxsPWkucGFyZW50Tm9kZSxjPWEudGVtcGxhdGVJbmZvLHU9bC5sb2NhbE5hbWU9PT0iZG9tLWlmIixoPWwubG9jYWxOYW1lPT09ImRvbS1yZXBlYXQiO3BHJiYodXx8aCkmJihsLnJlbW92ZUNoaWxkKGkpLGE9YS5wYXJlbnRJbmZvLGEudGVtcGxhdGVJbmZvPWMsYS5ub3RlZD0hMCxzPSExKTtsZXQgZj1jLmhvc3RQcm9wcztpZihSSSYmdSlmJiYoby5ob3N0UHJvcHM9T2JqZWN0LmFzc2lnbihvLmhvc3RQcm9wc3x8e30sZikscEd8fChhLnBhcmVudEluZm8ubm90ZWQ9ITApKTtlbHNle2xldCBwPSJ7Ijtmb3IobGV0IGQgaW4gZil7bGV0IGc9W3ttb2RlOnAsc291cmNlOmQsZGVwZW5kZW5jaWVzOltkXSxob3N0UHJvcDohMH1dO2JHKHRoaXMsbyxhLCJwcm9wZXJ0eSIsIl9ob3N0XyIrZCxnKX19cmV0dXJuIHN9c3RhdGljIF9wYXJzZUJpbmRpbmdzKGksbyl7bGV0IGE9W10scz0wLGw7Zm9yKDsobD1fbXQuZXhlYyhpKSkhPT1udWxsOyl7bC5pbmRleD5zJiZhLnB1c2goe2xpdGVyYWw6aS5zbGljZShzLGwuaW5kZXgpfSk7bGV0IGM9bFsxXVswXSx1PUJvb2xlYW4obFsyXSksaD1sWzNdLnRyaW0oKSxmPSExLHA9IiIsZD0tMTtjPT0ieyImJihkPWguaW5kZXhPZigiOjoiKSk+MCYmKHA9aC5zdWJzdHJpbmcoZCsyKSxoPWguc3Vic3RyaW5nKDAsZCksZj0hMCk7bGV0IGc9d0coaCksXz1bXTtpZihnKXtsZXR7YXJnczp5LG1ldGhvZE5hbWU6eH09Zztmb3IobGV0IFM9MDtTPHkubGVuZ3RoO1MrKyl7bGV0IEM9eVtTXTtDLmxpdGVyYWx8fF8ucHVzaChDKX1sZXQgYj1vLmR5bmFtaWNGbnM7KGImJmJbeF18fGcuc3RhdGljKSYmKF8ucHVzaCh4KSxnLmR5bmFtaWNGbj0hMCl9ZWxzZSBfLnB1c2goaCk7YS5wdXNoKHtzb3VyY2U6aCxtb2RlOmMsbmVnYXRlOnUsY3VzdG9tRXZlbnQ6ZixzaWduYXR1cmU6ZyxkZXBlbmRlbmNpZXM6XyxldmVudDpwfSkscz1fbXQubGFzdEluZGV4fWlmKHMmJnM8aS5sZW5ndGgpe2xldCBjPWkuc3Vic3RyaW5nKHMpO2MmJmEucHVzaCh7bGl0ZXJhbDpjfSl9cmV0dXJuIGEubGVuZ3RoP2E6bnVsbH1zdGF0aWMgX2V2YWx1YXRlQmluZGluZyhpLG8sYSxzLGwsYyl7bGV0IHU7cmV0dXJuIG8uc2lnbmF0dXJlP3U9U0coaSxhLHMsbCxvLnNpZ25hdHVyZSk6YSE9by5zb3VyY2U/dT1ObyhpLG8uc291cmNlKTpjJiZESShhKT91PU5vKGksYSk6dT1pLl9fZGF0YVthXSxvLm5lZ2F0ZSYmKHU9IXUpLHV9fXJldHVybiByfSksV009W107dmFyIGsxZT0wO2Z1bmN0aW9uIFRtdCgpe2sxZSsrfXZhciBSMWU9W107ZnVuY3Rpb24gVkkoZSl7UjFlLnB1c2goZSl9ZnVuY3Rpb24gTjFlKGUpe2xldCB0PXt9O2ZvcihsZXQgciBpbiBlKXtsZXQgbj1lW3JdO3Rbcl09dHlwZW9mIG49PSJmdW5jdGlvbiI/e3R5cGU6bn06bn1yZXR1cm4gdH12YXIgQ210PU5uKGU9PntsZXQgdD1GSShlKTtmdW5jdGlvbiByKG8pe2xldCBhPU9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtyZXR1cm4gYS5wcm90b3R5cGUgaW5zdGFuY2VvZiBpP2E6bnVsbH1mdW5jdGlvbiBuKG8pe2lmKCFvLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9fb3duUHJvcGVydGllcyIsbykpKXtsZXQgYT1udWxsO2lmKG8uaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgicHJvcGVydGllcyIsbykpKXtsZXQgcz1vLnByb3BlcnRpZXM7cyYmKGE9TjFlKHMpKX1vLl9fb3duUHJvcGVydGllcz1hfXJldHVybiBvLl9fb3duUHJvcGVydGllc31jbGFzcyBpIGV4dGVuZHMgdHtzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpe2lmKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9fb2JzZXJ2ZWRBdHRyaWJ1dGVzIix0aGlzKSkpe1ZJKHRoaXMucHJvdG90eXBlKTtsZXQgYT10aGlzLl9wcm9wZXJ0aWVzO3RoaXMuX19vYnNlcnZlZEF0dHJpYnV0ZXM9YT9PYmplY3Qua2V5cyhhKS5tYXAocz0+dGhpcy5wcm90b3R5cGUuX2FkZFByb3BlcnR5VG9BdHRyaWJ1dGVNYXAocykpOltdfXJldHVybiB0aGlzLl9fb2JzZXJ2ZWRBdHRyaWJ1dGVzfXN0YXRpYyBmaW5hbGl6ZSgpe2lmKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9fZmluYWxpemVkIix0aGlzKSkpe2xldCBhPXIodGhpcyk7YSYmYS5maW5hbGl6ZSgpLHRoaXMuX19maW5hbGl6ZWQ9ITAsdGhpcy5fZmluYWxpemVDbGFzcygpfX1zdGF0aWMgX2ZpbmFsaXplQ2xhc3MoKXtsZXQgYT1uKHRoaXMpO2EmJnRoaXMuY3JlYXRlUHJvcGVydGllcyhhKX1zdGF0aWMgZ2V0IF9wcm9wZXJ0aWVzKCl7aWYoIXRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19wcm9wZXJ0aWVzIix0aGlzKSkpe2xldCBhPXIodGhpcyk7dGhpcy5fX3Byb3BlcnRpZXM9T2JqZWN0LmFzc2lnbih7fSxhJiZhLl9wcm9wZXJ0aWVzLG4odGhpcykpfXJldHVybiB0aGlzLl9fcHJvcGVydGllc31zdGF0aWMgdHlwZUZvclByb3BlcnR5KGEpe2xldCBzPXRoaXMuX3Byb3BlcnRpZXNbYV07cmV0dXJuIHMmJnMudHlwZX1faW5pdGlhbGl6ZVByb3BlcnRpZXMoKXtUbXQoKSx0aGlzLmNvbnN0cnVjdG9yLmZpbmFsaXplKCksc3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCl9Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjayYmc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9lbmFibGVQcm9wZXJ0aWVzKCl9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjayYmc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKX19cmV0dXJuIGl9KTt2YXIgQW10PSIzLjQuMSIsVUk9d2luZG93LlNoYWR5Q1NTJiZ3aW5kb3cuU2hhZHlDU1MuY3NzQnVpbGQsTW09Tm4oZT0+e2xldCB0PUNtdChoXyhlKSk7ZnVuY3Rpb24gcihsKXtpZighbC5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX3Byb3BlcnR5RGVmYXVsdHMiLGwpKSl7bC5fX3Byb3BlcnR5RGVmYXVsdHM9bnVsbDtsZXQgYz1sLl9wcm9wZXJ0aWVzO2ZvcihsZXQgdSBpbiBjKXtsZXQgaD1jW3VdOyJ2YWx1ZSJpbiBoJiYobC5fX3Byb3BlcnR5RGVmYXVsdHM9bC5fX3Byb3BlcnR5RGVmYXVsdHN8fHt9LGwuX19wcm9wZXJ0eURlZmF1bHRzW3VdPWgpfX1yZXR1cm4gbC5fX3Byb3BlcnR5RGVmYXVsdHN9ZnVuY3Rpb24gbihsKXtyZXR1cm4gbC5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX293bk9ic2VydmVycyIsbCkpfHwobC5fX293bk9ic2VydmVycz1sLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIm9ic2VydmVycyIsbCkpP2wub2JzZXJ2ZXJzOm51bGwpLGwuX19vd25PYnNlcnZlcnN9ZnVuY3Rpb24gaShsLGMsdSxoKXt1LmNvbXB1dGVkJiYodS5yZWFkT25seT0hMCksdS5jb21wdXRlZCYmKGwuX2hhc1JlYWRPbmx5RWZmZWN0KGMpP2NvbnNvbGUud2FybihgQ2Fubm90IHJlZGVmaW5lIGNvbXB1dGVkIHByb3BlcnR5ICcke2N9Jy5gKTpsLl9jcmVhdGVDb21wdXRlZFByb3BlcnR5KGMsdS5jb21wdXRlZCxoKSksdS5yZWFkT25seSYmIWwuX2hhc1JlYWRPbmx5RWZmZWN0KGMpP2wuX2NyZWF0ZVJlYWRPbmx5UHJvcGVydHkoYywhdS5jb21wdXRlZCk6dS5yZWFkT25seT09PSExJiZsLl9oYXNSZWFkT25seUVmZmVjdChjKSYmY29uc29sZS53YXJuKGBDYW5ub3QgbWFrZSByZWFkT25seSBwcm9wZXJ0eSAnJHtjfScgbm9uLXJlYWRPbmx5LmApLHUucmVmbGVjdFRvQXR0cmlidXRlJiYhbC5faGFzUmVmbGVjdEVmZmVjdChjKT9sLl9jcmVhdGVSZWZsZWN0ZWRQcm9wZXJ0eShjKTp1LnJlZmxlY3RUb0F0dHJpYnV0ZT09PSExJiZsLl9oYXNSZWZsZWN0RWZmZWN0KGMpJiZjb25zb2xlLndhcm4oYENhbm5vdCBtYWtlIHJlZmxlY3RlZCBwcm9wZXJ0eSAnJHtjfScgbm9uLXJlZmxlY3RlZC5gKSx1Lm5vdGlmeSYmIWwuX2hhc05vdGlmeUVmZmVjdChjKT9sLl9jcmVhdGVOb3RpZnlpbmdQcm9wZXJ0eShjKTp1Lm5vdGlmeT09PSExJiZsLl9oYXNOb3RpZnlFZmZlY3QoYykmJmNvbnNvbGUud2FybihgQ2Fubm90IG1ha2Ugbm90aWZ5IHByb3BlcnR5ICcke2N9JyBub24tbm90aWZ5LmApLHUub2JzZXJ2ZXImJmwuX2NyZWF0ZVByb3BlcnR5T2JzZXJ2ZXIoYyx1Lm9ic2VydmVyLGhbdS5vYnNlcnZlcl0pLGwuX2FkZFByb3BlcnR5VG9BdHRyaWJ1dGVNYXAoYyl9ZnVuY3Rpb24gbyhsLGMsdSxoKXtpZighVUkpe2xldCBmPWMuY29udGVudC5xdWVyeVNlbGVjdG9yQWxsKCJzdHlsZSIpLHA9TkkoYyksZD1ubXQodSksZz1jLmNvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQ7Zm9yKGxldCB5PTA7eTxkLmxlbmd0aDt5Kyspe2xldCB4PWRbeV07eC50ZXh0Q29udGVudD1sLl9wcm9jZXNzU3R5bGVUZXh0KHgudGV4dENvbnRlbnQsaCksYy5jb250ZW50Lmluc2VydEJlZm9yZSh4LGcpfWxldCBfPTA7Zm9yKGxldCB5PTA7eTxwLmxlbmd0aDt5Kyspe2xldCB4PXBbeV0sYj1mW19dO2IhPT14Pyh4PXguY2xvbmVOb2RlKCEwKSxiLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHgsYikpOl8rKyx4LnRleHRDb250ZW50PWwuX3Byb2Nlc3NTdHlsZVRleHQoeC50ZXh0Q29udGVudCxoKX19aWYod2luZG93LlNoYWR5Q1NTJiZ3aW5kb3cuU2hhZHlDU1MucHJlcGFyZVRlbXBsYXRlKGMsdSksS2R0JiZVSSYmR2R0KXtsZXQgZj1jLmNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgic3R5bGUiKTtpZihmKXtsZXQgcD0iIjtBcnJheS5mcm9tKGYpLmZvckVhY2goZD0+e3ArPWQudGV4dENvbnRlbnQsZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGQpfSksbC5fc3R5bGVTaGVldD1uZXcgQ1NTU3R5bGVTaGVldCxsLl9zdHlsZVNoZWV0LnJlcGxhY2VTeW5jKHApfX19ZnVuY3Rpb24gYShsKXtsZXQgYz1udWxsO2lmKGwmJighaXV8fGpkdCkmJihjPW91LmltcG9ydChsLCJ0ZW1wbGF0ZSIpLGl1JiYhYykpdGhyb3cgbmV3IEVycm9yKGBzdHJpY3RUZW1wbGF0ZVBvbGljeTogZXhwZWN0aW5nIGRvbS1tb2R1bGUgb3IgbnVsbCB0ZW1wbGF0ZSBmb3IgJHtsfWApO3JldHVybiBjfWNsYXNzIHMgZXh0ZW5kcyB0e3N0YXRpYyBnZXQgcG9seW1lckVsZW1lbnRWZXJzaW9uKCl7cmV0dXJuIEFtdH1zdGF0aWMgX2ZpbmFsaXplQ2xhc3MoKXt0Ll9maW5hbGl6ZUNsYXNzLmNhbGwodGhpcyk7bGV0IGM9bih0aGlzKTtjJiZ0aGlzLmNyZWF0ZU9ic2VydmVycyhjLHRoaXMuX3Byb3BlcnRpZXMpLHRoaXMuX3ByZXBhcmVUZW1wbGF0ZSgpfXN0YXRpYyBfcHJlcGFyZVRlbXBsYXRlKCl7bGV0IGM9dGhpcy50ZW1wbGF0ZTtjJiYodHlwZW9mIGM9PSJzdHJpbmciPyhjb25zb2xlLmVycm9yKCJ0ZW1wbGF0ZSBnZXR0ZXIgbXVzdCByZXR1cm4gSFRNTFRlbXBsYXRlRWxlbWVudCIpLGM9bnVsbCk6ZHB8fChjPWMuY2xvbmVOb2RlKCEwKSkpLHRoaXMucHJvdG90eXBlLl90ZW1wbGF0ZT1jfXN0YXRpYyBjcmVhdGVQcm9wZXJ0aWVzKGMpe2ZvcihsZXQgdSBpbiBjKWkodGhpcy5wcm90b3R5cGUsdSxjW3VdLGMpfXN0YXRpYyBjcmVhdGVPYnNlcnZlcnMoYyx1KXtsZXQgaD10aGlzLnByb3RvdHlwZTtmb3IobGV0IGY9MDtmPGMubGVuZ3RoO2YrKyloLl9jcmVhdGVNZXRob2RPYnNlcnZlcihjW2ZdLHUpfXN0YXRpYyBnZXQgdGVtcGxhdGUoKXtpZighdGhpcy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfdGVtcGxhdGUiLHRoaXMpKSl7bGV0IGM9dGhpcy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX3RlbXBsYXRlIix0aGlzLnByb3RvdHlwZSkpP3RoaXMucHJvdG90eXBlLl90ZW1wbGF0ZTp2b2lkIDA7dGhpcy5fdGVtcGxhdGU9YyE9PXZvaWQgMD9jOnRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiaXMiLHRoaXMpKSYmYSh0aGlzLmlzKXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMucHJvdG90eXBlKS5jb25zdHJ1Y3Rvci50ZW1wbGF0ZX1yZXR1cm4gdGhpcy5fdGVtcGxhdGV9c3RhdGljIHNldCB0ZW1wbGF0ZShjKXt0aGlzLl90ZW1wbGF0ZT1jfXN0YXRpYyBnZXQgaW1wb3J0UGF0aCgpe2lmKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9pbXBvcnRQYXRoIix0aGlzKSkpe2xldCBjPXRoaXMuaW1wb3J0TWV0YTtpZihjKXRoaXMuX2ltcG9ydFBhdGg9Q3goYy51cmwpO2Vsc2V7bGV0IHU9b3UuaW1wb3J0KHRoaXMuaXMpO3RoaXMuX2ltcG9ydFBhdGg9dSYmdS5hc3NldHBhdGh8fE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzLnByb3RvdHlwZSkuY29uc3RydWN0b3IuaW1wb3J0UGF0aH19cmV0dXJuIHRoaXMuX2ltcG9ydFBhdGh9Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX3RlbXBsYXRlLHRoaXMuX2ltcG9ydFBhdGgsdGhpcy5yb290UGF0aCx0aGlzLmltcG9ydFBhdGgsdGhpcy5yb290LHRoaXMuJH1faW5pdGlhbGl6ZVByb3BlcnRpZXMoKXt0aGlzLmNvbnN0cnVjdG9yLmZpbmFsaXplKCksdGhpcy5jb25zdHJ1Y3Rvci5fZmluYWxpemVUZW1wbGF0ZSh0aGlzLmxvY2FsTmFtZSksc3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCksdGhpcy5yb290UGF0aD1XZHQsdGhpcy5pbXBvcnRQYXRoPXRoaXMuY29uc3RydWN0b3IuaW1wb3J0UGF0aDtsZXQgYz1yKHRoaXMuY29uc3RydWN0b3IpO2lmKCEhYylmb3IobGV0IHUgaW4gYyl7bGV0IGg9Y1t1XTtpZih0aGlzLl9jYW5BcHBseVByb3BlcnR5RGVmYXVsdCh1KSl7bGV0IGY9dHlwZW9mIGgudmFsdWU9PSJmdW5jdGlvbiI/aC52YWx1ZS5jYWxsKHRoaXMpOmgudmFsdWU7dGhpcy5faGFzQWNjZXNzb3IodSk/dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KHUsZiwhMCk6dGhpc1t1XT1mfX19X2NhbkFwcGx5UHJvcGVydHlEZWZhdWx0KGMpe3JldHVybiF0aGlzLmhhc093blByb3BlcnR5KGMpfXN0YXRpYyBfcHJvY2Vzc1N0eWxlVGV4dChjLHUpe3JldHVybiBITShjLHUpfXN0YXRpYyBfZmluYWxpemVUZW1wbGF0ZShjKXtsZXQgdT10aGlzLnByb3RvdHlwZS5fdGVtcGxhdGU7aWYodSYmIXUuX19wb2x5bWVyRmluYWxpemVkKXt1Ll9fcG9seW1lckZpbmFsaXplZD0hMDtsZXQgaD10aGlzLmltcG9ydFBhdGgsZj1oP2NfKGgpOiIiO28odGhpcyx1LGMsZiksdGhpcy5wcm90b3R5cGUuX2JpbmRUZW1wbGF0ZSh1KX19Y29ubmVjdGVkQ2FsbGJhY2soKXt3aW5kb3cuU2hhZHlDU1MmJnRoaXMuX3RlbXBsYXRlJiZ3aW5kb3cuU2hhZHlDU1Muc3R5bGVFbGVtZW50KHRoaXMpLHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCl9cmVhZHkoKXt0aGlzLl90ZW1wbGF0ZSYmKHRoaXMucm9vdD10aGlzLl9zdGFtcFRlbXBsYXRlKHRoaXMuX3RlbXBsYXRlKSx0aGlzLiQ9dGhpcy5yb290LiQpLHN1cGVyLnJlYWR5KCl9X3JlYWR5Q2xpZW50cygpe3RoaXMuX3RlbXBsYXRlJiYodGhpcy5yb290PXRoaXMuX2F0dGFjaERvbSh0aGlzLnJvb3QpKSxzdXBlci5fcmVhZHlDbGllbnRzKCl9X2F0dGFjaERvbShjKXtsZXQgdT11ZSh0aGlzKTtpZih1LmF0dGFjaFNoYWRvdylyZXR1cm4gYz8odS5zaGFkb3dSb290fHwodS5hdHRhY2hTaGFkb3coe21vZGU6Im9wZW4iLHNoYWR5VXBncmFkZUZyYWdtZW50OmN9KSx1LnNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQoYyksdGhpcy5jb25zdHJ1Y3Rvci5fc3R5bGVTaGVldCYmKHUuc2hhZG93Um9vdC5hZG9wdGVkU3R5bGVTaGVldHM9W3RoaXMuY29uc3RydWN0b3IuX3N0eWxlU2hlZXRdKSksWGR0JiZ3aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS5mbHVzaEluaXRpYWwodS5zaGFkb3dSb290KSx1LnNoYWRvd1Jvb3QpOm51bGw7dGhyb3cgbmV3IEVycm9yKCJTaGFkb3dET00gbm90IGF2YWlsYWJsZS4gUG9seW1lckVsZW1lbnQgY2FuIGNyZWF0ZSBkb20gYXMgY2hpbGRyZW4gaW5zdGVhZCBvZiBpbiBTaGFkb3dET00gYnkgc2V0dGluZyBgdGhpcy5yb290ID0gdGhpcztgIGJlZm9yZSBgcmVhZHlgLiIpfXVwZGF0ZVN0eWxlcyhjKXt3aW5kb3cuU2hhZHlDU1MmJndpbmRvdy5TaGFkeUNTUy5zdHlsZVN1YnRyZWUodGhpcyxjKX1yZXNvbHZlVXJsKGMsdSl7cmV0dXJuIXUmJnRoaXMuaW1wb3J0UGF0aCYmKHU9Y18odGhpcy5pbXBvcnRQYXRoKSksY18oYyx1KX1zdGF0aWMgX3BhcnNlVGVtcGxhdGVDb250ZW50KGMsdSxoKXtyZXR1cm4gdS5keW5hbWljRm5zPXUuZHluYW1pY0Zuc3x8dGhpcy5fcHJvcGVydGllcyx0Ll9wYXJzZVRlbXBsYXRlQ29udGVudC5jYWxsKHRoaXMsYyx1LGgpfXN0YXRpYyBfYWRkVGVtcGxhdGVQcm9wZXJ0eUVmZmVjdChjLHUsaCl7cmV0dXJuIExJJiYhKHUgaW4gdGhpcy5fcHJvcGVydGllcykmJiEoaC5pbmZvLnBhcnQuc2lnbmF0dXJlJiZoLmluZm8ucGFydC5zaWduYXR1cmUuc3RhdGljKSYmIWguaW5mby5wYXJ0Lmhvc3RQcm9wJiYhYy5uZXN0ZWRUZW1wbGF0ZSYmY29uc29sZS53YXJuKGBQcm9wZXJ0eSAnJHt1fScgdXNlZCBpbiB0ZW1wbGF0ZSBidXQgbm90IGRlY2xhcmVkIGluICdwcm9wZXJ0aWVzJzsgYXR0cmlidXRlIHdpbGwgbm90IGJlIG9ic2VydmVkLmApLHQuX2FkZFRlbXBsYXRlUHJvcGVydHlFZmZlY3QuY2FsbCh0aGlzLGMsdSxoKX19cmV0dXJuIHN9KTt2YXIgcUk9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy52YWx1ZT10LnRvU3RyaW5nKCl9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy52YWx1ZX19O2Z1bmN0aW9uIEQxZShlKXtpZihlIGluc3RhbmNlb2YgcUkpcmV0dXJuIGUudmFsdWU7dGhyb3cgbmV3IEVycm9yKGBub24tbGl0ZXJhbCB2YWx1ZSBwYXNzZWQgdG8gUG9seW1lcidzIGh0bWxMaXRlcmFsIGZ1bmN0aW9uOiAke2V9YCl9ZnVuY3Rpb24gTzFlKGUpe2lmKGUgaW5zdGFuY2VvZiBIVE1MVGVtcGxhdGVFbGVtZW50KXJldHVybiBlLmlubmVySFRNTDtpZihlIGluc3RhbmNlb2YgcUkpcmV0dXJuIEQxZShlKTt0aHJvdyBuZXcgRXJyb3IoYG5vbi10ZW1wbGF0ZSB2YWx1ZSBwYXNzZWQgdG8gUG9seW1lcidzIGh0bWwgZnVuY3Rpb246ICR7ZX1gKX12YXIgUT1mdW5jdGlvbih0LC4uLnIpe2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7cmV0dXJuIG4uaW5uZXJIVE1MPXIucmVkdWNlKChpLG8sYSk9PmkrTzFlKG8pK3RbYSsxXSx0WzBdKSxufTt2YXIgbXQ9TW0oSFRNTEVsZW1lbnQpO3ZhciBweT1FZShPZSgpLDEpO3ZhciBmXz0hKHdpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLmluVXNlKSxHSTtmdW5jdGlvbiBQbXQoZSl7ZSYmZS5zaGltY3NzcHJvcGVydGllcz9HST0hMTpHST1mX3x8Qm9vbGVhbighbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQXBwbGVXZWJLaXRcLzYwMXxFZGdlXC8xNS8pJiZ3aW5kb3cuQ1NTJiZDU1Muc3VwcG9ydHMmJkNTUy5zdXBwb3J0cygiYm94LXNoYWRvdyIsIjAgMCAwIHZhcigtLWZvbykiKSl9dmFyIEVtO3dpbmRvdy5TaGFkeUNTUyYmd2luZG93LlNoYWR5Q1NTLmNzc0J1aWxkIT09dm9pZCAwJiYoRW09d2luZG93LlNoYWR5Q1NTLmNzc0J1aWxkKTt2YXIgV0k9Qm9vbGVhbih3aW5kb3cuU2hhZHlDU1MmJndpbmRvdy5TaGFkeUNTUy5kaXNhYmxlUnVudGltZSk7d2luZG93LlNoYWR5Q1NTJiZ3aW5kb3cuU2hhZHlDU1MubmF0aXZlQ3NzIT09dm9pZCAwP0dJPXdpbmRvdy5TaGFkeUNTUy5uYXRpdmVDc3M6d2luZG93LlNoYWR5Q1NTPyhQbXQod2luZG93LlNoYWR5Q1NTKSx3aW5kb3cuU2hhZHlDU1M9dm9pZCAwKTpQbXQod2luZG93LldlYkNvbXBvbmVudHMmJndpbmRvdy5XZWJDb21wb25lbnRzLmZsYWdzKTt2YXIgTng9R0k7dmFyIFlJPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zdGFydD0wLHRoaXMuZW5kPTAsdGhpcy5wcmV2aW91cz1udWxsLHRoaXMucGFyZW50PW51bGwsdGhpcy5ydWxlcz1udWxsLHRoaXMucGFyc2VkQ3NzVGV4dD0iIix0aGlzLmNzc1RleHQ9IiIsdGhpcy5hdFJ1bGU9ITEsdGhpcy50eXBlPTAsdGhpcy5rZXlmcmFtZXNOYW1lPSIiLHRoaXMuc2VsZWN0b3I9IiIsdGhpcy5wYXJzZWRTZWxlY3Rvcj0iIn19O2Z1bmN0aW9uIEVHKGUpe3JldHVybiBlPXoxZShlKSxJbXQoRjFlKGUpLGUpfWZ1bmN0aW9uIHoxZShlKXtyZXR1cm4gZS5yZXBsYWNlKF9wLmNvbW1lbnRzLCIiKS5yZXBsYWNlKF9wLnBvcnQsIiIpfWZ1bmN0aW9uIEYxZShlKXtsZXQgdD1uZXcgWUk7dC5zdGFydD0wLHQuZW5kPWUubGVuZ3RoO2xldCByPXQ7Zm9yKGxldCBuPTAsaT1lLmxlbmd0aDtuPGk7bisrKWlmKGVbbl09PT1MbXQpe3IucnVsZXN8fChyLnJ1bGVzPVtdKTtsZXQgbz1yLGE9by5ydWxlc1tvLnJ1bGVzLmxlbmd0aC0xXXx8bnVsbDtyPW5ldyBZSSxyLnN0YXJ0PW4rMSxyLnBhcmVudD1vLHIucHJldmlvdXM9YSxvLnJ1bGVzLnB1c2gocil9ZWxzZSBlW25dPT09a210JiYoci5lbmQ9bisxLHI9ci5wYXJlbnR8fHQpO3JldHVybiB0fWZ1bmN0aW9uIEltdChlLHQpe2xldCByPXQuc3Vic3RyaW5nKGUuc3RhcnQsZS5lbmQtMSk7aWYoZS5wYXJzZWRDc3NUZXh0PWUuY3NzVGV4dD1yLnRyaW0oKSxlLnBhcmVudCl7bGV0IGk9ZS5wcmV2aW91cz9lLnByZXZpb3VzLmVuZDplLnBhcmVudC5zdGFydDtyPXQuc3Vic3RyaW5nKGksZS5zdGFydC0xKSxyPUIxZShyKSxyPXIucmVwbGFjZShfcC5tdWx0aXBsZVNwYWNlcywiICIpLHI9ci5zdWJzdHJpbmcoci5sYXN0SW5kZXhPZigiOyIpKzEpO2xldCBvPWUucGFyc2VkU2VsZWN0b3I9ZS5zZWxlY3Rvcj1yLnRyaW0oKTtlLmF0UnVsZT1vLmluZGV4T2YoVzFlKT09PTAsZS5hdFJ1bGU/by5pbmRleE9mKEcxZSk9PT0wP2UudHlwZT1ncC5NRURJQV9SVUxFOm8ubWF0Y2goX3Aua2V5ZnJhbWVzUnVsZSkmJihlLnR5cGU9Z3AuS0VZRlJBTUVTX1JVTEUsZS5rZXlmcmFtZXNOYW1lPWUuc2VsZWN0b3Iuc3BsaXQoX3AubXVsdGlwbGVTcGFjZXMpLnBvcCgpKTpvLmluZGV4T2YoUm10KT09PTA/ZS50eXBlPWdwLk1JWElOX1JVTEU6ZS50eXBlPWdwLlNUWUxFX1JVTEV9bGV0IG49ZS5ydWxlcztpZihuKWZvcihsZXQgaT0wLG89bi5sZW5ndGgsYTtpPG8mJihhPW5baV0pO2krKylJbXQoYSx0KTtyZXR1cm4gZX1mdW5jdGlvbiBCMWUoZSl7cmV0dXJuIGUucmVwbGFjZSgvXFwoWzAtOWEtZl17MSw2fSlccy9naSxmdW5jdGlvbigpe2xldCB0PWFyZ3VtZW50c1sxXSxyPTYtdC5sZW5ndGg7Zm9yKDtyLS07KXQ9IjAiK3Q7cmV0dXJuIlxcIit0fSl9ZnVuY3Rpb24gVEcoZSx0LHI9IiIpe2xldCBuPSIiO2lmKGUuY3NzVGV4dHx8ZS5ydWxlcyl7bGV0IGk9ZS5ydWxlcztpZihpJiYhSDFlKGkpKWZvcihsZXQgbz0wLGE9aS5sZW5ndGgscztvPGEmJihzPWlbb10pO28rKyluPVRHKHMsdCxuKTtlbHNlIG49dD9lLmNzc1RleHQ6VjFlKGUuY3NzVGV4dCksbj1uLnRyaW0oKSxuJiYobj0iICAiK24rYApgKX1yZXR1cm4gbiYmKGUuc2VsZWN0b3ImJihyKz1lLnNlbGVjdG9yKyIgIitMbXQrYApgKSxyKz1uLGUuc2VsZWN0b3ImJihyKz1rbXQrYAoKYCkpLHJ9ZnVuY3Rpb24gSDFlKGUpe2xldCB0PWVbMF07cmV0dXJuIEJvb2xlYW4odCkmJkJvb2xlYW4odC5zZWxlY3RvcikmJnQuc2VsZWN0b3IuaW5kZXhPZihSbXQpPT09MH1mdW5jdGlvbiBWMWUoZSl7cmV0dXJuIGU9VTFlKGUpLHExZShlKX1mdW5jdGlvbiBVMWUoZSl7cmV0dXJuIGUucmVwbGFjZShfcC5jdXN0b21Qcm9wLCIiKS5yZXBsYWNlKF9wLm1peGluUHJvcCwiIil9ZnVuY3Rpb24gcTFlKGUpe3JldHVybiBlLnJlcGxhY2UoX3AubWl4aW5BcHBseSwiIikucmVwbGFjZShfcC52YXJBcHBseSwiIil9dmFyIGdwPXtTVFlMRV9SVUxFOjEsS0VZRlJBTUVTX1JVTEU6NyxNRURJQV9SVUxFOjQsTUlYSU5fUlVMRToxZTN9LExtdD0ieyIsa210PSJ9IixfcD17Y29tbWVudHM6L1wvXCpbXipdKlwqKyhbXi8qXVteKl0qXCorKSpcLy9naW0scG9ydDovQGltcG9ydFteO10qOy9naW0sY3VzdG9tUHJvcDovKD86XlteO1wtXHN9XSspPy0tW147e31dKj86W157fTtdKj8oPzpbO1xuXXwkKS9naW0sbWl4aW5Qcm9wOi8oPzpeW147XC1cc31dKyk/LS1bXjt7fV0qPzpbXnt9O10qP3tbXn1dKj99KD86Wztcbl18JCk/L2dpbSxtaXhpbkFwcGx5Oi9AYXBwbHlccypcKD9bXik7XSpcKT9ccyooPzpbO1xuXXwkKT8vZ2ltLHZhckFwcGx5Oi9bXjs6XSo/OlteO10qP3ZhclwoW147XSpcKSg/Ols7XG5dfCQpPy9naW0sa2V5ZnJhbWVzUnVsZTovXkBbXlxzXSprZXlmcmFtZXMvLG11bHRpcGxlU3BhY2VzOi9ccysvZ30sUm10PSItLSIsRzFlPSJAbWVkaWEiLFcxZT0iQCI7dmFyIEtNPS8oPzpefFs7XHN7XVxzKikoLS1bXHctXSo/KVxzKjpccyooPzooKD86Jyg/OlxcJ3wuKSo/J3wiKD86XFwifC4pKj8ifFwoW14pXSo/XCl8W159O3tdKSspfFx7KFtefV0qKVx9KD86KD89Wztcc31dKXwkKSkvZ2ksRHg9Lyg/Ol58XFcrKUBhcHBseVxzKlwoPyhbXik7XG5dKilcKT8vZ2k7dmFyIE5tdD0vQG1lZGlhXHMoLiopLzt2YXIgRG10PW5ldyBTZXQsWTFlPSJzaGFkeS11bnNjb3BlZCI7ZnVuY3Rpb24gT210KGUpe2xldCB0PWUudGV4dENvbnRlbnQ7aWYoIURtdC5oYXModCkpe0RtdC5hZGQodCk7bGV0IHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtyLnNldEF0dHJpYnV0ZSgic2hhZHktdW5zY29wZWQiLCIiKSxyLnRleHRDb250ZW50PXQsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChyKX19ZnVuY3Rpb24gem10KGUpe3JldHVybiBlLmhhc0F0dHJpYnV0ZShZMWUpfWZ1bmN0aW9uIFpNKGUsdCl7cmV0dXJuIGU/KHR5cGVvZiBlPT0ic3RyaW5nIiYmKGU9RUcoZSkpLHQmJk94KGUsdCksVEcoZSxOeCkpOiIifWZ1bmN0aW9uIENHKGUpe3JldHVybiFlLl9fY3NzUnVsZXMmJmUudGV4dENvbnRlbnQmJihlLl9fY3NzUnVsZXM9RUcoZS50ZXh0Q29udGVudCkpLGUuX19jc3NSdWxlc3x8bnVsbH1mdW5jdGlvbiBPeChlLHQscixuKXtpZighZSlyZXR1cm47bGV0IGk9ITEsbz1lLnR5cGU7aWYobiYmbz09PWdwLk1FRElBX1JVTEUpe2xldCBzPWUuc2VsZWN0b3IubWF0Y2goTm10KTtzJiYod2luZG93Lm1hdGNoTWVkaWEoc1sxXSkubWF0Y2hlc3x8KGk9ITApKX1vPT09Z3AuU1RZTEVfUlVMRT90KGUpOnImJm89PT1ncC5LRVlGUkFNRVNfUlVMRT9yKGUpOm89PT1ncC5NSVhJTl9SVUxFJiYoaT0hMCk7bGV0IGE9ZS5ydWxlcztpZihhJiYhaSlmb3IobGV0IHM9MCxsPWEubGVuZ3RoLGM7czxsJiYoYz1hW3NdKTtzKyspT3goYyx0LHIsbil9ZnVuY3Rpb24gajFlKGUsdCl7bGV0IHI9MDtmb3IobGV0IG49dCxpPWUubGVuZ3RoO248aTtuKyspaWYoZVtuXT09PSIoIilyKys7ZWxzZSBpZihlW25dPT09IikiJiYtLXI9PT0wKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIEFHKGUsdCl7bGV0IHI9ZS5pbmRleE9mKCJ2YXIoIik7aWYocj09PS0xKXJldHVybiB0KGUsIiIsIiIsIiIpO2xldCBuPWoxZShlLHIrMyksaT1lLnN1YnN0cmluZyhyKzQsbiksbz1lLnN1YnN0cmluZygwLHIpLGE9QUcoZS5zdWJzdHJpbmcobisxKSx0KSxzPWkuaW5kZXhPZigiLCIpO2lmKHM9PT0tMSlyZXR1cm4gdChvLGkudHJpbSgpLCIiLGEpO2xldCBsPWkuc3Vic3RyaW5nKDAscykudHJpbSgpLGM9aS5zdWJzdHJpbmcocysxKS50cmltKCk7cmV0dXJuIHQobyxsLGMsYSl9dmFyIGZ2cj13aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS53cmFwfHwoZT0+ZSk7ZnVuY3Rpb24gRm10KGUpe2xldCB0PWUubG9jYWxOYW1lLHI9IiIsbj0iIjtyZXR1cm4gdD90LmluZGV4T2YoIi0iKT4tMT9yPXQ6KG49dCxyPWUuZ2V0QXR0cmlidXRlJiZlLmdldEF0dHJpYnV0ZSgiaXMiKXx8IiIpOihyPWUuaXMsbj1lLmV4dGVuZHMpLHtpczpyLHR5cGVFeHRlbnNpb246bn19ZnVuY3Rpb24gQm10KGUpe2xldCB0PVtdLHI9ZS5xdWVyeVNlbGVjdG9yQWxsKCJzdHlsZSIpO2ZvcihsZXQgbj0wO248ci5sZW5ndGg7bisrKXtsZXQgaT1yW25dO3ptdChpKT9mX3x8KE9tdChpKSxpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaSkpOih0LnB1c2goaS50ZXh0Q29udGVudCksaS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGkpKX1yZXR1cm4gdC5qb2luKCIiKS50cmltKCl9dmFyIEhtdD0iY3NzLWJ1aWxkIjtmdW5jdGlvbiBYMWUoZSl7aWYoRW0hPT12b2lkIDApcmV0dXJuIEVtO2lmKGUuX19jc3NCdWlsZD09PXZvaWQgMCl7bGV0IHQ9ZS5nZXRBdHRyaWJ1dGUoSG10KTtpZih0KWUuX19jc3NCdWlsZD10O2Vsc2V7bGV0IHI9JDFlKGUpO3IhPT0iIiYmSzFlKGUpLGUuX19jc3NCdWlsZD1yfX1yZXR1cm4gZS5fX2Nzc0J1aWxkfHwiIn1mdW5jdGlvbiBQRyhlKXtyZXR1cm4gWDFlKGUpIT09IiJ9ZnVuY3Rpb24gJDFlKGUpe2xldCB0PWUubG9jYWxOYW1lPT09InRlbXBsYXRlIj9lLmNvbnRlbnQuZmlyc3RDaGlsZDplLmZpcnN0Q2hpbGQ7aWYodCBpbnN0YW5jZW9mIENvbW1lbnQpe2xldCByPXQudGV4dENvbnRlbnQudHJpbSgpLnNwbGl0KCI6Iik7aWYoclswXT09PUhtdClyZXR1cm4gclsxXX1yZXR1cm4iIn1mdW5jdGlvbiBLMWUoZSl7bGV0IHQ9ZS5sb2NhbE5hbWU9PT0idGVtcGxhdGUiP2UuY29udGVudC5maXJzdENoaWxkOmUuZmlyc3RDaGlsZDt0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCl9ZnVuY3Rpb24gSk0oZSx0KXtmb3IobGV0IHIgaW4gdClyPT09bnVsbD9lLnN0eWxlLnJlbW92ZVByb3BlcnR5KHIpOmUuc3R5bGUuc2V0UHJvcGVydHkocix0W3JdKX1mdW5jdGlvbiBqSShlLHQpe2xldCByPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpLmdldFByb3BlcnR5VmFsdWUodCk7cmV0dXJuIHI/ci50cmltKCk6IiJ9ZnVuY3Rpb24gVm10KGUpe2xldCB0PUR4LnRlc3QoZSl8fEtNLnRlc3QoZSk7cmV0dXJuIER4Lmxhc3RJbmRleD0wLEtNLmxhc3RJbmRleD0wLHR9dmFyIFoxZT0vO1xzKi9tLEoxZT0vXlxzKihpbml0aWFsKXwoaW5oZXJpdClccyokLyxVbXQ9L1xzKiFpbXBvcnRhbnQvLElHPSJfLV8iO3ZhciBMRz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX21hcD17fX1zZXQodCxyKXt0PXQudHJpbSgpLHRoaXMuX21hcFt0XT17cHJvcGVydGllczpyLGRlcGVuZGFudHM6e319fWdldCh0KXtyZXR1cm4gdD10LnRyaW0oKSx0aGlzLl9tYXBbdF18fG51bGx9fSxYST1udWxsLERvPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fY3VycmVudEVsZW1lbnQ9bnVsbCx0aGlzLl9tZWFzdXJlRWxlbWVudD1udWxsLHRoaXMuX21hcD1uZXcgTEd9ZGV0ZWN0TWl4aW4odCl7cmV0dXJuIFZtdCh0KX1nYXRoZXJTdHlsZXModCl7bGV0IHI9Qm10KHQuY29udGVudCk7aWYocil7bGV0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtyZXR1cm4gbi50ZXh0Q29udGVudD1yLHQuY29udGVudC5pbnNlcnRCZWZvcmUobix0LmNvbnRlbnQuZmlyc3RDaGlsZCksbn1yZXR1cm4gbnVsbH10cmFuc2Zvcm1UZW1wbGF0ZSh0LHIpe3QuX2dhdGhlcmVkU3R5bGU9PT12b2lkIDAmJih0Ll9nYXRoZXJlZFN0eWxlPXRoaXMuZ2F0aGVyU3R5bGVzKHQpKTtsZXQgbj10Ll9nYXRoZXJlZFN0eWxlO3JldHVybiBuP3RoaXMudHJhbnNmb3JtU3R5bGUobixyKTpudWxsfXRyYW5zZm9ybVN0eWxlKHQscj0iIil7bGV0IG49Q0codCk7cmV0dXJuIHRoaXMudHJhbnNmb3JtUnVsZXMobixyKSx0LnRleHRDb250ZW50PVpNKG4pLG59dHJhbnNmb3JtQ3VzdG9tU3R5bGUodCl7bGV0IHI9Q0codCk7cmV0dXJuIE94KHIsbj0+e24uc2VsZWN0b3I9PT0iOnJvb3QiJiYobi5zZWxlY3Rvcj0iaHRtbCIpLHRoaXMudHJhbnNmb3JtUnVsZShuKX0pLHQudGV4dENvbnRlbnQ9Wk0ocikscn10cmFuc2Zvcm1SdWxlcyh0LHIpe3RoaXMuX2N1cnJlbnRFbGVtZW50PXIsT3godCxuPT57dGhpcy50cmFuc2Zvcm1SdWxlKG4pfSksdGhpcy5fY3VycmVudEVsZW1lbnQ9bnVsbH10cmFuc2Zvcm1SdWxlKHQpe3QuY3NzVGV4dD10aGlzLnRyYW5zZm9ybUNzc1RleHQodC5wYXJzZWRDc3NUZXh0LHQpLHQuc2VsZWN0b3I9PT0iOnJvb3QiJiYodC5zZWxlY3Rvcj0iOmhvc3QgPiAqIil9dHJhbnNmb3JtQ3NzVGV4dCh0LHIpe3JldHVybiB0PXQucmVwbGFjZShLTSwobixpLG8sYSk9PnRoaXMuX3Byb2R1Y2VDc3NQcm9wZXJ0aWVzKG4saSxvLGEscikpLHRoaXMuX2NvbnN1bWVDc3NQcm9wZXJ0aWVzKHQscil9X2dldEluaXRpYWxWYWx1ZUZvclByb3BlcnR5KHQpe3JldHVybiB0aGlzLl9tZWFzdXJlRWxlbWVudHx8KHRoaXMuX21lYXN1cmVFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm1ldGEiKSx0aGlzLl9tZWFzdXJlRWxlbWVudC5zZXRBdHRyaWJ1dGUoImFwcGx5LXNoaW0tbWVhc3VyZSIsIiIpLHRoaXMuX21lYXN1cmVFbGVtZW50LnN0eWxlLmFsbD0iaW5pdGlhbCIsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh0aGlzLl9tZWFzdXJlRWxlbWVudCkpLHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuX21lYXN1cmVFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKHQpfV9mYWxsYmFja3NGcm9tUHJldmlvdXNSdWxlcyh0KXtsZXQgcj10O2Zvcig7ci5wYXJlbnQ7KXI9ci5wYXJlbnQ7bGV0IG49e30saT0hMTtyZXR1cm4gT3gocixvPT57aT1pfHxvPT09dCwhaSYmby5zZWxlY3Rvcj09PXQuc2VsZWN0b3ImJk9iamVjdC5hc3NpZ24obix0aGlzLl9jc3NUZXh0VG9NYXAoby5wYXJzZWRDc3NUZXh0KSl9KSxufV9jb25zdW1lQ3NzUHJvcGVydGllcyh0LHIpe2xldCBuPW51bGw7Zm9yKDtuPUR4LmV4ZWModCk7KXtsZXQgaT1uWzBdLG89blsxXSxhPW4uaW5kZXgscz1hK2kuaW5kZXhPZigiQGFwcGx5IiksbD1hK2kubGVuZ3RoLGM9dC5zbGljZSgwLHMpLHU9dC5zbGljZShsKSxoPXI/dGhpcy5fZmFsbGJhY2tzRnJvbVByZXZpb3VzUnVsZXMocik6e307T2JqZWN0LmFzc2lnbihoLHRoaXMuX2Nzc1RleHRUb01hcChjKSk7bGV0IGY9dGhpcy5fYXRBcHBseVRvQ3NzUHJvcGVydGllcyhvLGgpO3Q9YCR7Y30ke2Z9JHt1fWAsRHgubGFzdEluZGV4PWErZi5sZW5ndGh9cmV0dXJuIHR9X2F0QXBwbHlUb0Nzc1Byb3BlcnRpZXModCxyKXt0PXQucmVwbGFjZShaMWUsIiIpO2xldCBuPVtdLGk9dGhpcy5fbWFwLmdldCh0KTtpZihpfHwodGhpcy5fbWFwLnNldCh0LHt9KSxpPXRoaXMuX21hcC5nZXQodCkpLGkpe3RoaXMuX2N1cnJlbnRFbGVtZW50JiYoaS5kZXBlbmRhbnRzW3RoaXMuX2N1cnJlbnRFbGVtZW50XT0hMCk7bGV0IG8sYSxzLGw9aS5wcm9wZXJ0aWVzO2ZvcihvIGluIGwpcz1yJiZyW29dLGE9W28sIjogdmFyKCIsdCxJRyxvXSxzJiZhLnB1c2goIiwiLHMucmVwbGFjZShVbXQsIiIpKSxhLnB1c2goIikiKSxVbXQudGVzdChsW29dKSYmYS5wdXNoKCIgIWltcG9ydGFudCIpLG4ucHVzaChhLmpvaW4oIiIpKX1yZXR1cm4gbi5qb2luKCI7ICIpfV9yZXBsYWNlSW5pdGlhbE9ySW5oZXJpdCh0LHIpe2xldCBuPUoxZS5leGVjKHIpO3JldHVybiBuJiYoblsxXT9yPXRoaXMuX2dldEluaXRpYWxWYWx1ZUZvclByb3BlcnR5KHQpOnI9ImFwcGx5LXNoaW0taW5oZXJpdCIpLHJ9X2Nzc1RleHRUb01hcCh0LHI9ITEpe2xldCBuPXQuc3BsaXQoIjsiKSxpLG8sYT17fTtmb3IobGV0IHM9MCxsLGM7czxuLmxlbmd0aDtzKyspbD1uW3NdLGwmJihjPWwuc3BsaXQoIjoiKSxjLmxlbmd0aD4xJiYoaT1jWzBdLnRyaW0oKSxvPWMuc2xpY2UoMSkuam9pbigiOiIpLHImJihvPXRoaXMuX3JlcGxhY2VJbml0aWFsT3JJbmhlcml0KGksbykpLGFbaV09bykpO3JldHVybiBhfV9pbnZhbGlkYXRlTWl4aW5FbnRyeSh0KXtpZighIVhJKWZvcihsZXQgciBpbiB0LmRlcGVuZGFudHMpciE9PXRoaXMuX2N1cnJlbnRFbGVtZW50JiZYSShyKX1fcHJvZHVjZUNzc1Byb3BlcnRpZXModCxyLG4saSxvKXtpZihuJiZBRyhuLChfLHkpPT57eSYmdGhpcy5fbWFwLmdldCh5KSYmKGk9YEBhcHBseSAke3l9O2ApfSksIWkpcmV0dXJuIHQ7bGV0IGE9dGhpcy5fY29uc3VtZUNzc1Byb3BlcnRpZXMoIiIraSxvKSxzPXQuc2xpY2UoMCx0LmluZGV4T2YoIi0tIikpLGw9dGhpcy5fY3NzVGV4dFRvTWFwKGEsITApLGM9bCx1PXRoaXMuX21hcC5nZXQociksaD11JiZ1LnByb3BlcnRpZXM7aD9jPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShoKSxsKTp0aGlzLl9tYXAuc2V0KHIsYyk7bGV0IGY9W10scCxkLGc9ITE7Zm9yKHAgaW4gYylkPWxbcF0sZD09PXZvaWQgMCYmKGQ9ImluaXRpYWwiKSxoJiYhKHAgaW4gaCkmJihnPSEwKSxmLnB1c2goYCR7cn0ke0lHfSR7cH06ICR7ZH1gKTtyZXR1cm4gZyYmdGhpcy5faW52YWxpZGF0ZU1peGluRW50cnkodSksdSYmKHUucHJvcGVydGllcz1jKSxuJiYocz1gJHt0fTske3N9YCksYCR7c30ke2Yuam9pbigiOyAiKX07YH19O0RvLnByb3RvdHlwZS5kZXRlY3RNaXhpbj1Eby5wcm90b3R5cGUuZGV0ZWN0TWl4aW47RG8ucHJvdG90eXBlLnRyYW5zZm9ybVN0eWxlPURvLnByb3RvdHlwZS50cmFuc2Zvcm1TdHlsZTtEby5wcm90b3R5cGUudHJhbnNmb3JtQ3VzdG9tU3R5bGU9RG8ucHJvdG90eXBlLnRyYW5zZm9ybUN1c3RvbVN0eWxlO0RvLnByb3RvdHlwZS50cmFuc2Zvcm1SdWxlcz1Eby5wcm90b3R5cGUudHJhbnNmb3JtUnVsZXM7RG8ucHJvdG90eXBlLnRyYW5zZm9ybVJ1bGU9RG8ucHJvdG90eXBlLnRyYW5zZm9ybVJ1bGU7RG8ucHJvdG90eXBlLnRyYW5zZm9ybVRlbXBsYXRlPURvLnByb3RvdHlwZS50cmFuc2Zvcm1UZW1wbGF0ZTtEby5wcm90b3R5cGUuX3NlcGFyYXRvcj1JRztPYmplY3QuZGVmaW5lUHJvcGVydHkoRG8ucHJvdG90eXBlLCJpbnZhbGlkQ2FsbGJhY2siLHtnZXQoKXtyZXR1cm4gWEl9LHNldChlKXtYST1lfX0pO3ZhciBxbXQ9RG87dmFyIFExZT17fSxRTT1RMWU7dmFyICRJPSJfYXBwbHlTaGltQ3VycmVudFZlcnNpb24iLHp4PSJfYXBwbHlTaGltTmV4dFZlcnNpb24iLEtJPSJfYXBwbHlTaGltVmFsaWRhdGluZ1ZlcnNpb24iLHR4ZT1Qcm9taXNlLnJlc29sdmUoKTtmdW5jdGlvbiBHbXQoZSl7bGV0IHQ9UU1bZV07dCYmZXhlKHQpfWZ1bmN0aW9uIGV4ZShlKXtlWyRJXT1lWyRJXXx8MCxlW0tJXT1lW0tJXXx8MCxlW3p4XT0oZVt6eF18fDApKzF9ZnVuY3Rpb24ga0coZSl7cmV0dXJuIGVbJEldPT09ZVt6eF19ZnVuY3Rpb24gV210KGUpe3JldHVybiFrRyhlKSYmZVtLSV09PT1lW3p4XX1mdW5jdGlvbiBZbXQoZSl7ZVtLSV09ZVt6eF0sZS5fdmFsaWRhdGluZ3x8KGUuX3ZhbGlkYXRpbmc9ITAsdHhlLnRoZW4oZnVuY3Rpb24oKXtlWyRJXT1lW3p4XSxlLl92YWxpZGF0aW5nPSExfSkpfXZhciBSRz1udWxsLGptdD13aW5kb3cuSFRNTEltcG9ydHMmJndpbmRvdy5IVE1MSW1wb3J0cy53aGVuUmVhZHl8fG51bGwsTkc7ZnVuY3Rpb24gWkkoZSl7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7am10P2ptdChlKTooUkd8fChSRz1uZXcgUHJvbWlzZSh0PT57Tkc9dH0pLGRvY3VtZW50LnJlYWR5U3RhdGU9PT0iY29tcGxldGUiP05HKCk6ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicmVhZHlzdGF0ZWNoYW5nZSIsKCk9Pntkb2N1bWVudC5yZWFkeVN0YXRlPT09ImNvbXBsZXRlIiYmTkcoKX0pKSxSRy50aGVuKGZ1bmN0aW9uKCl7ZSYmZSgpfSkpfSl9dmFyIFhtdD0iX19zZWVuQnlTaGFkeUNTUyIsSkk9Il9fc2hhZHlDU1NDYWNoZWRTdHlsZSIsUUk9bnVsbCx0RT1udWxsLFpsPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5jdXN0b21TdHlsZXM9W10sdGhpcy5lbnF1ZXVlZD0hMSxaSSgoKT0+e3dpbmRvdy5TaGFkeUNTUy5mbHVzaEN1c3RvbVN0eWxlcyYmd2luZG93LlNoYWR5Q1NTLmZsdXNoQ3VzdG9tU3R5bGVzKCl9KX1lbnF1ZXVlRG9jdW1lbnRWYWxpZGF0aW9uKCl7dGhpcy5lbnF1ZXVlZHx8IXRFfHwodGhpcy5lbnF1ZXVlZD0hMCxaSSh0RSkpfWFkZEN1c3RvbVN0eWxlKHQpe3RbWG10XXx8KHRbWG10XT0hMCx0aGlzLmN1c3RvbVN0eWxlcy5wdXNoKHQpLHRoaXMuZW5xdWV1ZURvY3VtZW50VmFsaWRhdGlvbigpKX1nZXRTdHlsZUZvckN1c3RvbVN0eWxlKHQpe2lmKHRbSkldKXJldHVybiB0W0pJXTtsZXQgcjtyZXR1cm4gdC5nZXRTdHlsZT9yPXQuZ2V0U3R5bGUoKTpyPXQscn1wcm9jZXNzU3R5bGVzKCl7bGV0IHQ9dGhpcy5jdXN0b21TdHlsZXM7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspe2xldCBuPXRbcl07aWYobltKSV0pY29udGludWU7bGV0IGk9dGhpcy5nZXRTdHlsZUZvckN1c3RvbVN0eWxlKG4pO2lmKGkpe2xldCBvPWkuX19hcHBsaWVkRWxlbWVudHx8aTtRSSYmUUkobyksbltKSV09b319cmV0dXJuIHR9fTtabC5wcm90b3R5cGUuYWRkQ3VzdG9tU3R5bGU9WmwucHJvdG90eXBlLmFkZEN1c3RvbVN0eWxlO1psLnByb3RvdHlwZS5nZXRTdHlsZUZvckN1c3RvbVN0eWxlPVpsLnByb3RvdHlwZS5nZXRTdHlsZUZvckN1c3RvbVN0eWxlO1psLnByb3RvdHlwZS5wcm9jZXNzU3R5bGVzPVpsLnByb3RvdHlwZS5wcm9jZXNzU3R5bGVzO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFpsLnByb3RvdHlwZSx7dHJhbnNmb3JtQ2FsbGJhY2s6e2dldCgpe3JldHVybiBRSX0sc2V0KGUpe1FJPWV9fSx2YWxpZGF0ZUNhbGxiYWNrOntnZXQoKXtyZXR1cm4gdEV9LHNldChlKXtsZXQgdD0hMTt0RXx8KHQ9ITApLHRFPWUsdCYmdGhpcy5lbnF1ZXVlRG9jdW1lbnRWYWxpZGF0aW9uKCl9fX0pO3ZhciBlRT1uZXcgcW10LERHPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5jdXN0b21TdHlsZUludGVyZmFjZT1udWxsLGVFLmludmFsaWRDYWxsYmFjaz1HbXR9ZW5zdXJlKCl7dGhpcy5jdXN0b21TdHlsZUludGVyZmFjZXx8d2luZG93LlNoYWR5Q1NTLkN1c3RvbVN0eWxlSW50ZXJmYWNlJiYodGhpcy5jdXN0b21TdHlsZUludGVyZmFjZT13aW5kb3cuU2hhZHlDU1MuQ3VzdG9tU3R5bGVJbnRlcmZhY2UsdGhpcy5jdXN0b21TdHlsZUludGVyZmFjZS50cmFuc2Zvcm1DYWxsYmFjaz10PT57ZUUudHJhbnNmb3JtQ3VzdG9tU3R5bGUodCl9LHRoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2UudmFsaWRhdGVDYWxsYmFjaz0oKT0+e3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2UuZW5xdWV1ZWQmJnRoaXMuZmx1c2hDdXN0b21TdHlsZXMoKX0pfSl9cHJlcGFyZVRlbXBsYXRlKHQscil7aWYodGhpcy5lbnN1cmUoKSxQRyh0KSlyZXR1cm47UU1bcl09dDtsZXQgbj1lRS50cmFuc2Zvcm1UZW1wbGF0ZSh0LHIpO3QuX3N0eWxlQXN0PW59Zmx1c2hDdXN0b21TdHlsZXMoKXtpZih0aGlzLmVuc3VyZSgpLCF0aGlzLmN1c3RvbVN0eWxlSW50ZXJmYWNlKXJldHVybjtsZXQgdD10aGlzLmN1c3RvbVN0eWxlSW50ZXJmYWNlLnByb2Nlc3NTdHlsZXMoKTtpZighIXRoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2UuZW5xdWV1ZWQpe2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtsZXQgbj10W3JdLGk9dGhpcy5jdXN0b21TdHlsZUludGVyZmFjZS5nZXRTdHlsZUZvckN1c3RvbVN0eWxlKG4pO2kmJmVFLnRyYW5zZm9ybUN1c3RvbVN0eWxlKGkpfXRoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2UuZW5xdWV1ZWQ9ITF9fXN0eWxlU3VidHJlZSh0LHIpe2lmKHRoaXMuZW5zdXJlKCksciYmSk0odCxyKSx0LnNoYWRvd1Jvb3Qpe3RoaXMuc3R5bGVFbGVtZW50KHQpO2xldCBuPXQuc2hhZG93Um9vdC5jaGlsZHJlbnx8dC5zaGFkb3dSb290LmNoaWxkTm9kZXM7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspdGhpcy5zdHlsZVN1YnRyZWUobltpXSl9ZWxzZXtsZXQgbj10LmNoaWxkcmVufHx0LmNoaWxkTm9kZXM7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspdGhpcy5zdHlsZVN1YnRyZWUobltpXSl9fXN0eWxlRWxlbWVudCh0KXt0aGlzLmVuc3VyZSgpO2xldHtpczpyfT1GbXQodCksbj1RTVtyXTtpZighKG4mJlBHKG4pKSYmbiYmIWtHKG4pKXtXbXQobil8fCh0aGlzLnByZXBhcmVUZW1wbGF0ZShuLHIpLFltdChuKSk7bGV0IGk9dC5zaGFkb3dSb290O2lmKGkpe2xldCBvPWkucXVlcnlTZWxlY3Rvcigic3R5bGUiKTtvJiYoby5fX2Nzc1J1bGVzPW4uX3N0eWxlQXN0LG8udGV4dENvbnRlbnQ9Wk0obi5fc3R5bGVBc3QpKX19fXN0eWxlRG9jdW1lbnQodCl7dGhpcy5lbnN1cmUoKSx0aGlzLnN0eWxlU3VidHJlZShkb2N1bWVudC5ib2R5LHQpfX07aWYoIXdpbmRvdy5TaGFkeUNTU3x8IXdpbmRvdy5TaGFkeUNTUy5TY29waW5nU2hpbSl7bGV0IGU9bmV3IERHLHQ9d2luZG93LlNoYWR5Q1NTJiZ3aW5kb3cuU2hhZHlDU1MuQ3VzdG9tU3R5bGVJbnRlcmZhY2U7d2luZG93LlNoYWR5Q1NTPXtwcmVwYXJlVGVtcGxhdGUocixuLGkpe2UuZmx1c2hDdXN0b21TdHlsZXMoKSxlLnByZXBhcmVUZW1wbGF0ZShyLG4pfSxwcmVwYXJlVGVtcGxhdGVTdHlsZXMocixuLGkpe3dpbmRvdy5TaGFkeUNTUy5wcmVwYXJlVGVtcGxhdGUocixuLGkpfSxwcmVwYXJlVGVtcGxhdGVEb20ocixuKXt9LHN0eWxlU3VidHJlZShyLG4pe2UuZmx1c2hDdXN0b21TdHlsZXMoKSxlLnN0eWxlU3VidHJlZShyLG4pfSxzdHlsZUVsZW1lbnQocil7ZS5mbHVzaEN1c3RvbVN0eWxlcygpLGUuc3R5bGVFbGVtZW50KHIpfSxzdHlsZURvY3VtZW50KHIpe2UuZmx1c2hDdXN0b21TdHlsZXMoKSxlLnN0eWxlRG9jdW1lbnQocil9LGdldENvbXB1dGVkU3R5bGVWYWx1ZShyLG4pe3JldHVybiBqSShyLG4pfSxmbHVzaEN1c3RvbVN0eWxlcygpe2UuZmx1c2hDdXN0b21TdHlsZXMoKX0sbmF0aXZlQ3NzOk54LG5hdGl2ZVNoYWRvdzpmXyxjc3NCdWlsZDpFbSxkaXNhYmxlUnVudGltZTpXSX0sdCYmKHdpbmRvdy5TaGFkeUNTUy5DdXN0b21TdHlsZUludGVyZmFjZT10KX13aW5kb3cuU2hhZHlDU1MuQXBwbHlTaGltPWVFO3ZhciBzcj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2FzeW5jTW9kdWxlPW51bGwsdGhpcy5fY2FsbGJhY2s9bnVsbCx0aGlzLl90aW1lcj1udWxsfXNldENvbmZpZyh0LHIpe3RoaXMuX2FzeW5jTW9kdWxlPXQsdGhpcy5fY2FsbGJhY2s9cix0aGlzLl90aW1lcj10aGlzLl9hc3luY01vZHVsZS5ydW4oKCk9Pnt0aGlzLl90aW1lcj1udWxsLHJFLmRlbGV0ZSh0aGlzKSx0aGlzLl9jYWxsYmFjaygpfSl9Y2FuY2VsKCl7dGhpcy5pc0FjdGl2ZSgpJiYodGhpcy5fY2FuY2VsQXN5bmMoKSxyRS5kZWxldGUodGhpcykpfV9jYW5jZWxBc3luYygpe3RoaXMuaXNBY3RpdmUoKSYmKHRoaXMuX2FzeW5jTW9kdWxlLmNhbmNlbCh0aGlzLl90aW1lciksdGhpcy5fdGltZXI9bnVsbCl9Zmx1c2goKXt0aGlzLmlzQWN0aXZlKCkmJih0aGlzLmNhbmNlbCgpLHRoaXMuX2NhbGxiYWNrKCkpfWlzQWN0aXZlKCl7cmV0dXJuIHRoaXMuX3RpbWVyIT1udWxsfXN0YXRpYyBkZWJvdW5jZSh0LHIsbil7cmV0dXJuIHQgaW5zdGFuY2VvZiBzcj90Ll9jYW5jZWxBc3luYygpOnQ9bmV3IHNyLHQuc2V0Q29uZmlnKHIsbiksdH19LHJFPW5ldyBTZXQsSmw9ZnVuY3Rpb24oZSl7ckUuYWRkKGUpfSwkbXQ9ZnVuY3Rpb24oKXtsZXQgZT1Cb29sZWFuKHJFLnNpemUpO3JldHVybiByRS5mb3JFYWNoKHQ9Pnt0cnl7dC5mbHVzaCgpfWNhdGNoKHIpe3NldFRpbWVvdXQoKCk9Pnt0aHJvdyByfSl9fSksZX07dmFyIEJHPXR5cGVvZiBkb2N1bWVudC5oZWFkLnN0eWxlLnRvdWNoQWN0aW9uPT0ic3RyaW5nIixlOT0iX19wb2x5bWVyR2VzdHVyZXMiLHQ5PSJfX3BvbHltZXJHZXN0dXJlc0hhbmRsZWQiLHpHPSJfX3BvbHltZXJHZXN0dXJlc1RvdWNoQWN0aW9uIixLbXQ9MjUsWm10PTUsbnhlPTIsaXhlPTI1MDAscmd0PVsibW91c2Vkb3duIiwibW91c2Vtb3ZlIiwibW91c2V1cCIsImNsaWNrIl0sb3hlPVswLDEsNCwyXSxheGU9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBNb3VzZUV2ZW50KCJ0ZXN0Iix7YnV0dG9uczoxfSkuYnV0dG9ucz09PTF9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO2Z1bmN0aW9uIEhHKGUpe3JldHVybiByZ3QuaW5kZXhPZihlKT4tMX12YXIgVkc9ITE7KGZ1bmN0aW9uKCl7dHJ5e2xldCBlPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldCgpe1ZHPSEwfX0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixudWxsLGUpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0ZXN0IixudWxsLGUpfWNhdGNoKGUpe319KSgpO2Z1bmN0aW9uIG5ndChlKXtpZighKEhHKGUpfHxlPT09InRvdWNoZW5kIikmJkJHJiZWRyYmWWR0KXJldHVybntwYXNzaXZlOiEwfX12YXIgaWd0PW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQKD86W29hXWR8aG9uZSl8QW5kcm9pZC8pLEZHPVtdLHN4ZT17YnV0dG9uOiEwLGlucHV0OiEwLGtleWdlbjohMCxtZXRlcjohMCxvdXRwdXQ6ITAsdGV4dGFyZWE6ITAscHJvZ3Jlc3M6ITAsc2VsZWN0OiEwfSxseGU9e2J1dHRvbjohMCxjb21tYW5kOiEwLGZpZWxkc2V0OiEwLGlucHV0OiEwLGtleWdlbjohMCxvcHRncm91cDohMCxvcHRpb246ITAsc2VsZWN0OiEwLHRleHRhcmVhOiEwfTtmdW5jdGlvbiBjeGUoZSl7cmV0dXJuIHN4ZVtlLmxvY2FsTmFtZV18fCExfWZ1bmN0aW9uIHV4ZShlKXtsZXQgdD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLmxhYmVsc3x8W10pO2lmKCF0Lmxlbmd0aCl7dD1bXTtsZXQgcj1lLmdldFJvb3ROb2RlKCk7aWYoZS5pZCl7bGV0IG49ci5xdWVyeVNlbGVjdG9yQWxsKGBsYWJlbFtmb3IgPSAke2UuaWR9XWApO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXQucHVzaChuW2ldKX19cmV0dXJuIHR9dmFyIEptdD1mdW5jdGlvbihlKXtsZXQgdD1lLnNvdXJjZUNhcGFiaWxpdGllcztpZighKHQmJiF0LmZpcmVzVG91Y2hFdmVudHMpJiYoZVt0OV09e3NraXA6ITB9LGUudHlwZT09PSJjbGljayIpKXtsZXQgcj0hMSxuPW45KGUpO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXtpZihuW2ldLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpe2lmKG5baV0ubG9jYWxOYW1lPT09ImxhYmVsIilGRy5wdXNoKG5baV0pO2Vsc2UgaWYoY3hlKG5baV0pKXtsZXQgbz11eGUobltpXSk7Zm9yKGxldCBhPTA7YTxvLmxlbmd0aDthKyspcj1yfHxGRy5pbmRleE9mKG9bYV0pPi0xfX1pZihuW2ldPT09b2EubW91c2UudGFyZ2V0KXJldHVybn1pZihyKXJldHVybjtlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKX19O2Z1bmN0aW9uIFFtdChlKXtsZXQgdD1pZ3Q/WyJjbGljayJdOnJndDtmb3IobGV0IHI9MCxuO3I8dC5sZW5ndGg7cisrKW49dFtyXSxlPyhGRy5sZW5ndGg9MCxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKG4sSm10LCEwKSk6ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLEptdCwhMCl9ZnVuY3Rpb24gaHhlKGUpe2lmKCFmRylyZXR1cm47b2EubW91c2UubW91c2VJZ25vcmVKb2J8fFFtdCghMCk7bGV0IHQ9ZnVuY3Rpb24oKXtRbXQoKSxvYS5tb3VzZS50YXJnZXQ9bnVsbCxvYS5tb3VzZS5tb3VzZUlnbm9yZUpvYj1udWxsfTtvYS5tb3VzZS50YXJnZXQ9bjkoZSlbMF0sb2EubW91c2UubW91c2VJZ25vcmVKb2I9c3IuZGVib3VuY2Uob2EubW91c2UubW91c2VJZ25vcmVKb2IsbW8uYWZ0ZXIoaXhlKSx0KX1mdW5jdGlvbiBkXyhlKXtsZXQgdD1lLnR5cGU7aWYoIUhHKHQpKXJldHVybiExO2lmKHQ9PT0ibW91c2Vtb3ZlIil7bGV0IHI9ZS5idXR0b25zPT09dm9pZCAwPzE6ZS5idXR0b25zO3JldHVybiBlIGluc3RhbmNlb2Ygd2luZG93Lk1vdXNlRXZlbnQmJiFheGUmJihyPW94ZVtlLndoaWNoXXx8MCksQm9vbGVhbihyJjEpfWVsc2UgcmV0dXJuKGUuYnV0dG9uPT09dm9pZCAwPzA6ZS5idXR0b24pPT09MH1mdW5jdGlvbiBmeGUoZSl7aWYoZS50eXBlPT09ImNsaWNrIil7aWYoZS5kZXRhaWw9PT0wKXJldHVybiEwO2xldCB0PXlwKGUpO2lmKCF0Lm5vZGVUeXBlfHx0Lm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREUpcmV0dXJuITA7bGV0IHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPWUucGFnZVgsaT1lLnBhZ2VZO3JldHVybiEobj49ci5sZWZ0JiZuPD1yLnJpZ2h0JiZpPj1yLnRvcCYmaTw9ci5ib3R0b20pfXJldHVybiExfXZhciBvYT17bW91c2U6e3RhcmdldDpudWxsLG1vdXNlSWdub3JlSm9iOm51bGx9LHRvdWNoOnt4OjAseTowLGlkOi0xLHNjcm9sbERlY2lkZWQ6ITF9fTtmdW5jdGlvbiBweGUoZSl7bGV0IHQ9ImF1dG8iLHI9bjkoZSk7Zm9yKGxldCBuPTAsaTtuPHIubGVuZ3RoO24rKylpZihpPXJbbl0saVt6R10pe3Q9aVt6R107YnJlYWt9cmV0dXJuIHR9ZnVuY3Rpb24gb2d0KGUsdCxyKXtlLm1vdmVmbj10LGUudXBmbj1yLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIscil9ZnVuY3Rpb24gRngoZSl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixlLm1vdmVmbiksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsZS51cGZuKSxlLm1vdmVmbj1udWxsLGUudXBmbj1udWxsfWZHJiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsaHhlLFZHP3twYXNzaXZlOiEwfTohMSk7dmFyIG45PXdpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLm5vUGF0Y2g/d2luZG93LlNoYWR5RE9NLmNvbXBvc2VkUGF0aDplPT5lLmNvbXBvc2VkUGF0aCYmZS5jb21wb3NlZFBhdGgoKXx8W10saUU9e30scF89W107ZnVuY3Rpb24gZHhlKGUsdCl7bGV0IHI9ZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChlLHQpLG49cjtmb3IoO24mJm4uc2hhZG93Um9vdCYmIXdpbmRvdy5TaGFkeURPTTspe2xldCBpPW47aWYobj1uLnNoYWRvd1Jvb3QuZWxlbWVudEZyb21Qb2ludChlLHQpLGk9PT1uKWJyZWFrO24mJihyPW4pfXJldHVybiByfWZ1bmN0aW9uIHlwKGUpe2xldCB0PW45KGUpO3JldHVybiB0Lmxlbmd0aD4wP3RbMF06ZS50YXJnZXR9ZnVuY3Rpb24gYWd0KGUpe2xldCB0LHI9ZS50eXBlLGk9ZS5jdXJyZW50VGFyZ2V0W2U5XTtpZighaSlyZXR1cm47bGV0IG89aVtyXTtpZighIW8pe2lmKCFlW3Q5XSYmKGVbdDldPXt9LHIuc2xpY2UoMCw1KT09PSJ0b3VjaCIpKXtlPWU7bGV0IGE9ZS5jaGFuZ2VkVG91Y2hlc1swXTtpZihyPT09InRvdWNoc3RhcnQiJiZlLnRvdWNoZXMubGVuZ3RoPT09MSYmKG9hLnRvdWNoLmlkPWEuaWRlbnRpZmllciksb2EudG91Y2guaWQhPT1hLmlkZW50aWZpZXIpcmV0dXJuO0JHfHwocj09PSJ0b3VjaHN0YXJ0Inx8cj09PSJ0b3VjaG1vdmUiKSYmbXhlKGUpfWlmKHQ9ZVt0OV0sIXQuc2tpcCl7Zm9yKGxldCBhPTAsczthPHBfLmxlbmd0aDthKyspcz1wX1thXSxvW3MubmFtZV0mJiF0W3MubmFtZV0mJnMuZmxvdyYmcy5mbG93LnN0YXJ0LmluZGV4T2YoZS50eXBlKT4tMSYmcy5yZXNldCYmcy5yZXNldCgpO2ZvcihsZXQgYT0wLHM7YTxwXy5sZW5ndGg7YSsrKXM9cF9bYV0sb1tzLm5hbWVdJiYhdFtzLm5hbWVdJiYodFtzLm5hbWVdPSEwLHNbcl0oZSkpfX19ZnVuY3Rpb24gbXhlKGUpe2xldCB0PWUuY2hhbmdlZFRvdWNoZXNbMF0scj1lLnR5cGU7aWYocj09PSJ0b3VjaHN0YXJ0IilvYS50b3VjaC54PXQuY2xpZW50WCxvYS50b3VjaC55PXQuY2xpZW50WSxvYS50b3VjaC5zY3JvbGxEZWNpZGVkPSExO2Vsc2UgaWYocj09PSJ0b3VjaG1vdmUiKXtpZihvYS50b3VjaC5zY3JvbGxEZWNpZGVkKXJldHVybjtvYS50b3VjaC5zY3JvbGxEZWNpZGVkPSEwO2xldCBuPXB4ZShlKSxpPSExLG89TWF0aC5hYnMob2EudG91Y2gueC10LmNsaWVudFgpLGE9TWF0aC5hYnMob2EudG91Y2gueS10LmNsaWVudFkpO2UuY2FuY2VsYWJsZSYmKG49PT0ibm9uZSI/aT0hMDpuPT09InBhbi14Ij9pPWE+bzpuPT09InBhbi15IiYmKGk9bz5hKSksaT9lLnByZXZlbnREZWZhdWx0KCk6cjkoInRyYWNrIil9fWZ1bmN0aW9uIFRtKGUsdCxyKXtyZXR1cm4gaUVbdF0/KGd4ZShlLHQsciksITApOiExfWZ1bmN0aW9uIHNndChlLHQscil7cmV0dXJuIGlFW3RdPyhfeGUoZSx0LHIpLCEwKTohMX1mdW5jdGlvbiBneGUoZSx0LHIpe2xldCBuPWlFW3RdLGk9bi5kZXBzLG89bi5uYW1lLGE9ZVtlOV07YXx8KGVbZTldPWE9e30pO2ZvcihsZXQgcz0wLGwsYztzPGkubGVuZ3RoO3MrKylsPWlbc10sIShpZ3QmJkhHKGwpJiZsIT09ImNsaWNrIikmJihjPWFbbF0sY3x8KGFbbF09Yz17X2NvdW50OjB9KSxjLl9jb3VudD09PTAmJmUuYWRkRXZlbnRMaXN0ZW5lcihsLGFndCxuZ3QobCkpLGNbb109KGNbb118fDApKzEsYy5fY291bnQ9KGMuX2NvdW50fHwwKSsxKTtlLmFkZEV2ZW50TGlzdGVuZXIodCxyKSxuLnRvdWNoQWN0aW9uJiZtXyhlLG4udG91Y2hBY3Rpb24pfWZ1bmN0aW9uIF94ZShlLHQscil7bGV0IG49aUVbdF0saT1uLmRlcHMsbz1uLm5hbWUsYT1lW2U5XTtpZihhKWZvcihsZXQgcz0wLGwsYztzPGkubGVuZ3RoO3MrKylsPWlbc10sYz1hW2xdLGMmJmNbb10mJihjW29dPShjW29dfHwxKS0xLGMuX2NvdW50PShjLl9jb3VudHx8MSktMSxjLl9jb3VudD09PTAmJmUucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLGFndCxuZ3QobCkpKTtlLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxyKX1mdW5jdGlvbiBVRyhlKXtwXy5wdXNoKGUpO2ZvcihsZXQgdD0wO3Q8ZS5lbWl0cy5sZW5ndGg7dCsrKWlFW2UuZW1pdHNbdF1dPWV9ZnVuY3Rpb24geXhlKGUpe2ZvcihsZXQgdD0wLHI7dDxwXy5sZW5ndGg7dCsrKXtyPXBfW3RdO2ZvcihsZXQgbj0wLGk7bjxyLmVtaXRzLmxlbmd0aDtuKyspaWYoaT1yLmVtaXRzW25dLGk9PT1lKXJldHVybiByfXJldHVybiBudWxsfWZ1bmN0aW9uIG1fKGUsdCl7QkcmJmUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmbGkucnVuKCgpPT57ZS5zdHlsZS50b3VjaEFjdGlvbj10fSksZVt6R109dH1mdW5jdGlvbiBxRyhlLHQscil7bGV0IG49bmV3IEV2ZW50KHQse2J1YmJsZXM6ITAsY2FuY2VsYWJsZTohMCxjb21wb3NlZDohMH0pO2lmKG4uZGV0YWlsPXIsdWUoZSkuZGlzcGF0Y2hFdmVudChuKSxuLmRlZmF1bHRQcmV2ZW50ZWQpe2xldCBpPXIucHJldmVudGVyfHxyLnNvdXJjZUV2ZW50O2kmJmkucHJldmVudERlZmF1bHQmJmkucHJldmVudERlZmF1bHQoKX19ZnVuY3Rpb24gcjkoZSl7bGV0IHQ9eXhlKGUpO3QuaW5mbyYmKHQuaW5mby5wcmV2ZW50PSEwKX1VRyh7bmFtZToiZG93bnVwIixkZXBzOlsibW91c2Vkb3duIiwidG91Y2hzdGFydCIsInRvdWNoZW5kIl0sZmxvdzp7c3RhcnQ6WyJtb3VzZWRvd24iLCJ0b3VjaHN0YXJ0Il0sZW5kOlsibW91c2V1cCIsInRvdWNoZW5kIl19LGVtaXRzOlsiZG93biIsInVwIl0saW5mbzp7bW92ZWZuOm51bGwsdXBmbjpudWxsfSxyZXNldDpmdW5jdGlvbigpe0Z4KHRoaXMuaW5mbyl9LG1vdXNlZG93bjpmdW5jdGlvbihlKXtpZighZF8oZSkpcmV0dXJuO2xldCB0PXlwKGUpLHI9dGhpcyxuPWZ1bmN0aW9uKGEpe2RfKGEpfHwobkUoInVwIix0LGEpLEZ4KHIuaW5mbykpfSxpPWZ1bmN0aW9uKGEpe2RfKGEpJiZuRSgidXAiLHQsYSksRngoci5pbmZvKX07b2d0KHRoaXMuaW5mbyxuLGkpLG5FKCJkb3duIix0LGUpfSx0b3VjaHN0YXJ0OmZ1bmN0aW9uKGUpe25FKCJkb3duIix5cChlKSxlLmNoYW5nZWRUb3VjaGVzWzBdLGUpfSx0b3VjaGVuZDpmdW5jdGlvbihlKXtuRSgidXAiLHlwKGUpLGUuY2hhbmdlZFRvdWNoZXNbMF0sZSl9fSk7ZnVuY3Rpb24gbkUoZSx0LHIsbil7IXR8fHFHKHQsZSx7eDpyLmNsaWVudFgseTpyLmNsaWVudFksc291cmNlRXZlbnQ6cixwcmV2ZW50ZXI6bixwcmV2ZW50OmZ1bmN0aW9uKGkpe3JldHVybiByOShpKX19KX1VRyh7bmFtZToidHJhY2siLHRvdWNoQWN0aW9uOiJub25lIixkZXBzOlsibW91c2Vkb3duIiwidG91Y2hzdGFydCIsInRvdWNobW92ZSIsInRvdWNoZW5kIl0sZmxvdzp7c3RhcnQ6WyJtb3VzZWRvd24iLCJ0b3VjaHN0YXJ0Il0sZW5kOlsibW91c2V1cCIsInRvdWNoZW5kIl19LGVtaXRzOlsidHJhY2siXSxpbmZvOnt4OjAseTowLHN0YXRlOiJzdGFydCIsc3RhcnRlZDohMSxtb3ZlczpbXSxhZGRNb3ZlOmZ1bmN0aW9uKGUpe3RoaXMubW92ZXMubGVuZ3RoPm54ZSYmdGhpcy5tb3Zlcy5zaGlmdCgpLHRoaXMubW92ZXMucHVzaChlKX0sbW92ZWZuOm51bGwsdXBmbjpudWxsLHByZXZlbnQ6ITF9LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5pbmZvLnN0YXRlPSJzdGFydCIsdGhpcy5pbmZvLnN0YXJ0ZWQ9ITEsdGhpcy5pbmZvLm1vdmVzPVtdLHRoaXMuaW5mby54PTAsdGhpcy5pbmZvLnk9MCx0aGlzLmluZm8ucHJldmVudD0hMSxGeCh0aGlzLmluZm8pfSxtb3VzZWRvd246ZnVuY3Rpb24oZSl7aWYoIWRfKGUpKXJldHVybjtsZXQgdD15cChlKSxyPXRoaXMsbj1mdW5jdGlvbihhKXtsZXQgcz1hLmNsaWVudFgsbD1hLmNsaWVudFk7dGd0KHIuaW5mbyxzLGwpJiYoci5pbmZvLnN0YXRlPXIuaW5mby5zdGFydGVkP2EudHlwZT09PSJtb3VzZXVwIj8iZW5kIjoidHJhY2siOiJzdGFydCIsci5pbmZvLnN0YXRlPT09InN0YXJ0IiYmcjkoInRhcCIpLHIuaW5mby5hZGRNb3ZlKHt4OnMseTpsfSksZF8oYSl8fChyLmluZm8uc3RhdGU9ImVuZCIsRngoci5pbmZvKSksdCYmT0coci5pbmZvLHQsYSksci5pbmZvLnN0YXJ0ZWQ9ITApfSxpPWZ1bmN0aW9uKGEpe3IuaW5mby5zdGFydGVkJiZuKGEpLEZ4KHIuaW5mbyl9O29ndCh0aGlzLmluZm8sbixpKSx0aGlzLmluZm8ueD1lLmNsaWVudFgsdGhpcy5pbmZvLnk9ZS5jbGllbnRZfSx0b3VjaHN0YXJ0OmZ1bmN0aW9uKGUpe2xldCB0PWUuY2hhbmdlZFRvdWNoZXNbMF07dGhpcy5pbmZvLng9dC5jbGllbnRYLHRoaXMuaW5mby55PXQuY2xpZW50WX0sdG91Y2htb3ZlOmZ1bmN0aW9uKGUpe2xldCB0PXlwKGUpLHI9ZS5jaGFuZ2VkVG91Y2hlc1swXSxuPXIuY2xpZW50WCxpPXIuY2xpZW50WTt0Z3QodGhpcy5pbmZvLG4saSkmJih0aGlzLmluZm8uc3RhdGU9PT0ic3RhcnQiJiZyOSgidGFwIiksdGhpcy5pbmZvLmFkZE1vdmUoe3g6bix5Oml9KSxPRyh0aGlzLmluZm8sdCxyKSx0aGlzLmluZm8uc3RhdGU9InRyYWNrIix0aGlzLmluZm8uc3RhcnRlZD0hMCl9LHRvdWNoZW5kOmZ1bmN0aW9uKGUpe2xldCB0PXlwKGUpLHI9ZS5jaGFuZ2VkVG91Y2hlc1swXTt0aGlzLmluZm8uc3RhcnRlZCYmKHRoaXMuaW5mby5zdGF0ZT0iZW5kIix0aGlzLmluZm8uYWRkTW92ZSh7eDpyLmNsaWVudFgseTpyLmNsaWVudFl9KSxPRyh0aGlzLmluZm8sdCxyKSl9fSk7ZnVuY3Rpb24gdGd0KGUsdCxyKXtpZihlLnByZXZlbnQpcmV0dXJuITE7aWYoZS5zdGFydGVkKXJldHVybiEwO2xldCBuPU1hdGguYWJzKGUueC10KSxpPU1hdGguYWJzKGUueS1yKTtyZXR1cm4gbj49Wm10fHxpPj1abXR9ZnVuY3Rpb24gT0coZSx0LHIpe2lmKCF0KXJldHVybjtsZXQgbj1lLm1vdmVzW2UubW92ZXMubGVuZ3RoLTJdLGk9ZS5tb3Zlc1tlLm1vdmVzLmxlbmd0aC0xXSxvPWkueC1lLngsYT1pLnktZS55LHMsbD0wO24mJihzPWkueC1uLngsbD1pLnktbi55KSxxRyh0LCJ0cmFjayIse3N0YXRlOmUuc3RhdGUseDpyLmNsaWVudFgseTpyLmNsaWVudFksZHg6byxkeTphLGRkeDpzLGRkeTpsLHNvdXJjZUV2ZW50OnIsaG92ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gZHhlKHIuY2xpZW50WCxyLmNsaWVudFkpfX0pfVVHKHtuYW1lOiJ0YXAiLGRlcHM6WyJtb3VzZWRvd24iLCJjbGljayIsInRvdWNoc3RhcnQiLCJ0b3VjaGVuZCJdLGZsb3c6e3N0YXJ0OlsibW91c2Vkb3duIiwidG91Y2hzdGFydCJdLGVuZDpbImNsaWNrIiwidG91Y2hlbmQiXX0sZW1pdHM6WyJ0YXAiXSxpbmZvOnt4Ok5hTix5Ok5hTixwcmV2ZW50OiExfSxyZXNldDpmdW5jdGlvbigpe3RoaXMuaW5mby54PU5hTix0aGlzLmluZm8ueT1OYU4sdGhpcy5pbmZvLnByZXZlbnQ9ITF9LG1vdXNlZG93bjpmdW5jdGlvbihlKXtkXyhlKSYmKHRoaXMuaW5mby54PWUuY2xpZW50WCx0aGlzLmluZm8ueT1lLmNsaWVudFkpfSxjbGljazpmdW5jdGlvbihlKXtkXyhlKSYmZWd0KHRoaXMuaW5mbyxlKX0sdG91Y2hzdGFydDpmdW5jdGlvbihlKXtsZXQgdD1lLmNoYW5nZWRUb3VjaGVzWzBdO3RoaXMuaW5mby54PXQuY2xpZW50WCx0aGlzLmluZm8ueT10LmNsaWVudFl9LHRvdWNoZW5kOmZ1bmN0aW9uKGUpe2VndCh0aGlzLmluZm8sZS5jaGFuZ2VkVG91Y2hlc1swXSxlKX19KTtmdW5jdGlvbiBlZ3QoZSx0LHIpe2xldCBuPU1hdGguYWJzKHQuY2xpZW50WC1lLngpLGk9TWF0aC5hYnModC5jbGllbnRZLWUueSksbz15cChyfHx0KTshb3x8bHhlW28ubG9jYWxOYW1lXSYmby5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIil8fChpc05hTihuKXx8aXNOYU4oaSl8fG48PUttdCYmaTw9S210fHxmeGUodCkpJiYoZS5wcmV2ZW50fHxxRyhvLCJ0YXAiLHt4OnQuY2xpZW50WCx5OnQuY2xpZW50WSxzb3VyY2VFdmVudDp0LHByZXZlbnRlcjpyfSkpfXZhciBsZ3Q9eXA7dmFyIHZoPU5uKGU9PntjbGFzcyB0IGV4dGVuZHMgZXtfYWRkRXZlbnRMaXN0ZW5lclRvTm9kZShuLGksbyl7VG0obixpLG8pfHxzdXBlci5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZShuLGksbyl9X3JlbW92ZUV2ZW50TGlzdGVuZXJGcm9tTm9kZShuLGksbyl7c2d0KG4saSxvKXx8c3VwZXIuX3JlbW92ZUV2ZW50TGlzdGVuZXJGcm9tTm9kZShuLGksbyl9fXJldHVybiB0fSk7dmFyIHZ4ZT0vOmhvc3RcKDpkaXJcKChsdHJ8cnRsKVwpXCkvZyx4eGU9Jzpob3N0KFtkaXI9IiQxIl0pJyxieGU9LyhbXHNcdy0jXC5cW1xdXCpdKik6ZGlyXCgobHRyfHJ0bClcKS9nLHd4ZT0nOmhvc3QoW2Rpcj0iJDIiXSkgJDEnLFN4ZT0vOmRpclwoKD86bHRyfHJ0bClcKS8sdWd0PUJvb2xlYW4od2luZG93LlNoYWR5RE9NJiZ3aW5kb3cuU2hhZHlET00uaW5Vc2UpLG9FPVtdLGFFPW51bGwsR0c9IiI7ZnVuY3Rpb24gaGd0KCl7R0c9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGlyIil9ZnVuY3Rpb24gZmd0KGUpe2UuX19hdXRvRGlyT3B0T3V0fHxlLnNldEF0dHJpYnV0ZSgiZGlyIixHRyl9ZnVuY3Rpb24gcGd0KCl7aGd0KCksR0c9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGlyIik7Zm9yKGxldCBlPTA7ZTxvRS5sZW5ndGg7ZSsrKWZndChvRVtlXSl9ZnVuY3Rpb24gTXhlKCl7YUUmJmFFLnRha2VSZWNvcmRzKCkubGVuZ3RoJiZwZ3QoKX12YXIgZGd0PU5uKGU9Pnt1Z3R8fGFFfHwoaGd0KCksYUU9bmV3IE11dGF0aW9uT2JzZXJ2ZXIocGd0KSxhRS5vYnNlcnZlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx7YXR0cmlidXRlczohMCxhdHRyaWJ1dGVGaWx0ZXI6WyJkaXIiXX0pKTtsZXQgdD1ISShlKTtjbGFzcyByIGV4dGVuZHMgdHtzdGF0aWMgX3Byb2Nlc3NTdHlsZVRleHQoaSxvKXtyZXR1cm4gaT10Ll9wcm9jZXNzU3R5bGVUZXh0LmNhbGwodGhpcyxpLG8pLCF1Z3QmJlN4ZS50ZXN0KGkpJiYoaT10aGlzLl9yZXBsYWNlRGlySW5Dc3NUZXh0KGkpLHRoaXMuX19hY3RpdmF0ZURpcj0hMCksaX1zdGF0aWMgX3JlcGxhY2VEaXJJbkNzc1RleHQoaSl7bGV0IG89aTtyZXR1cm4gbz1vLnJlcGxhY2UodnhlLHh4ZSksbz1vLnJlcGxhY2UoYnhlLHd4ZSksb31jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fX2F1dG9EaXJPcHRPdXQ9ITF9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuX19hdXRvRGlyT3B0T3V0PXRoaXMuaGFzQXR0cmlidXRlKCJkaXIiKX1jb25uZWN0ZWRDYWxsYmFjaygpe3QucHJvdG90eXBlLmNvbm5lY3RlZENhbGxiYWNrJiZzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuY29uc3RydWN0b3IuX19hY3RpdmF0ZURpciYmKE14ZSgpLG9FLnB1c2godGhpcyksZmd0KHRoaXMpKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe2lmKHQucHJvdG90eXBlLmRpc2Nvbm5lY3RlZENhbGxiYWNrJiZzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuY29uc3RydWN0b3IuX19hY3RpdmF0ZURpcil7bGV0IGk9b0UuaW5kZXhPZih0aGlzKTtpPi0xJiZvRS5zcGxpY2UoaSwxKX19fXJldHVybiByLl9fYWN0aXZhdGVEaXI9ITEscn0pO3ZhciBpOT0hMSxtZ3Q9W10sZ2d0PVtdO2Z1bmN0aW9uIF9ndCgpe2k5PSEwLHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe2k5PSExLEV4ZShtZ3QpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtUeGUoZ2d0KX0pfSl9ZnVuY3Rpb24gRXhlKGUpe2Zvcig7ZS5sZW5ndGg7KXlndChlLnNoaWZ0KCkpfWZ1bmN0aW9uIFR4ZShlKXtmb3IobGV0IHQ9MCxyPWUubGVuZ3RoO3Q8cjt0KyspeWd0KGUuc2hpZnQoKSl9ZnVuY3Rpb24geWd0KGUpe2xldCB0PWVbMF0scj1lWzFdLG49ZVsyXTt0cnl7ci5hcHBseSh0LG4pfWNhdGNoKGkpe3NldFRpbWVvdXQoKCk9Pnt0aHJvdyBpfSl9fWZ1bmN0aW9uIHZndChlLHQscil7aTl8fF9ndCgpLG1ndC5wdXNoKFtlLHQscl0pfWZ1bmN0aW9uIENtKGUsdCxyKXtpOXx8X2d0KCksZ2d0LnB1c2goW2UsdCxyXSl9ZnVuY3Rpb24geGd0KCl7ZG9jdW1lbnQuYm9keS5yZW1vdmVBdHRyaWJ1dGUoInVucmVzb2x2ZWQiKX1kb2N1bWVudC5yZWFkeVN0YXRlPT09ImludGVyYWN0aXZlInx8ZG9jdW1lbnQucmVhZHlTdGF0ZT09PSJjb21wbGV0ZSI/eGd0KCk6d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLHhndCk7ZnVuY3Rpb24gc0UoZSx0LHIpe3JldHVybntpbmRleDplLHJlbW92ZWQ6dCxhZGRlZENvdW50OnJ9fXZhciBiZ3Q9MCx3Z3Q9MSxXRz0yLFlHPTM7ZnVuY3Rpb24gQ3hlKGUsdCxyLG4saSxvKXtsZXQgYT1vLWkrMSxzPXItdCsxLGw9bmV3IEFycmF5KGEpO2ZvcihsZXQgYz0wO2M8YTtjKyspbFtjXT1uZXcgQXJyYXkocyksbFtjXVswXT1jO2ZvcihsZXQgYz0wO2M8cztjKyspbFswXVtjXT1jO2ZvcihsZXQgYz0xO2M8YTtjKyspZm9yKGxldCB1PTE7dTxzO3UrKylpZihqRyhlW3QrdS0xXSxuW2krYy0xXSkpbFtjXVt1XT1sW2MtMV1bdS0xXTtlbHNle2xldCBoPWxbYy0xXVt1XSsxLGY9bFtjXVt1LTFdKzE7bFtjXVt1XT1oPGY/aDpmfXJldHVybiBsfWZ1bmN0aW9uIEF4ZShlKXtsZXQgdD1lLmxlbmd0aC0xLHI9ZVswXS5sZW5ndGgtMSxuPWVbdF1bcl0saT1bXTtmb3IoO3Q+MHx8cj4wOyl7aWYodD09MCl7aS5wdXNoKFdHKSxyLS07Y29udGludWV9aWYocj09MCl7aS5wdXNoKFlHKSx0LS07Y29udGludWV9bGV0IG89ZVt0LTFdW3ItMV0sYT1lW3QtMV1bcl0scz1lW3RdW3ItMV0sbDthPHM/bD1hPG8/YTpvOmw9czxvP3M6byxsPT1vPyhvPT1uP2kucHVzaChiZ3QpOihpLnB1c2god2d0KSxuPW8pLHQtLSxyLS0pOmw9PWE/KGkucHVzaChZRyksdC0tLG49YSk6KGkucHVzaChXRyksci0tLG49cyl9cmV0dXJuIGkucmV2ZXJzZSgpLGl9ZnVuY3Rpb24gUHhlKGUsdCxyLG4saSxvKXtsZXQgYT0wLHM9MCxsLGM9TWF0aC5taW4oci10LG8taSk7aWYodD09MCYmaT09MCYmKGE9SXhlKGUsbixjKSkscj09ZS5sZW5ndGgmJm89PW4ubGVuZ3RoJiYocz1MeGUoZSxuLGMtYSkpLHQrPWEsaSs9YSxyLT1zLG8tPXMsci10PT0wJiZvLWk9PTApcmV0dXJuW107aWYodD09cil7Zm9yKGw9c0UodCxbXSwwKTtpPG87KWwucmVtb3ZlZC5wdXNoKG5baSsrXSk7cmV0dXJuW2xdfWVsc2UgaWYoaT09bylyZXR1cm5bc0UodCxbXSxyLXQpXTtsZXQgdT1BeGUoQ3hlKGUsdCxyLG4saSxvKSk7bD12b2lkIDA7bGV0IGg9W10sZj10LHA9aTtmb3IobGV0IGQ9MDtkPHUubGVuZ3RoO2QrKylzd2l0Y2godVtkXSl7Y2FzZSBiZ3Q6bCYmKGgucHVzaChsKSxsPXZvaWQgMCksZisrLHArKzticmVhaztjYXNlIHdndDpsfHwobD1zRShmLFtdLDApKSxsLmFkZGVkQ291bnQrKyxmKyssbC5yZW1vdmVkLnB1c2gobltwXSkscCsrO2JyZWFrO2Nhc2UgV0c6bHx8KGw9c0UoZixbXSwwKSksbC5hZGRlZENvdW50KyssZisrO2JyZWFrO2Nhc2UgWUc6bHx8KGw9c0UoZixbXSwwKSksbC5yZW1vdmVkLnB1c2gobltwXSkscCsrO2JyZWFrfXJldHVybiBsJiZoLnB1c2gobCksaH1mdW5jdGlvbiBJeGUoZSx0LHIpe2ZvcihsZXQgbj0wO248cjtuKyspaWYoIWpHKGVbbl0sdFtuXSkpcmV0dXJuIG47cmV0dXJuIHJ9ZnVuY3Rpb24gTHhlKGUsdCxyKXtsZXQgbj1lLmxlbmd0aCxpPXQubGVuZ3RoLG89MDtmb3IoO288ciYmakcoZVstLW5dLHRbLS1pXSk7KW8rKztyZXR1cm4gb31mdW5jdGlvbiBvOShlLHQpe3JldHVybiBQeGUoZSwwLGUubGVuZ3RoLHQsMCx0Lmxlbmd0aCl9ZnVuY3Rpb24gakcoZSx0KXtyZXR1cm4gZT09PXR9ZnVuY3Rpb24gQngoZSl7cmV0dXJuIGUubG9jYWxOYW1lPT09InNsb3QifXZhciB4aD1jbGFzc3tzdGF0aWMgZ2V0RmxhdHRlbmVkTm9kZXMoZSl7bGV0IHQ9dWUoZSk7cmV0dXJuIEJ4KGUpPyhlPWUsdC5hc3NpZ25lZE5vZGVzKHtmbGF0dGVuOiEwfSkpOkFycmF5LmZyb20odC5jaGlsZE5vZGVzKS5tYXAocj0+Qngocik/KHI9cix1ZShyKS5hc3NpZ25lZE5vZGVzKHtmbGF0dGVuOiEwfSkpOltyXSkucmVkdWNlKChyLG4pPT5yLmNvbmNhdChuKSxbXSl9Y29uc3RydWN0b3IoZSx0KXt0aGlzLl9zaGFkeUNoaWxkcmVuT2JzZXJ2ZXI9bnVsbCx0aGlzLl9uYXRpdmVDaGlsZHJlbk9ic2VydmVyPW51bGwsdGhpcy5fY29ubmVjdGVkPSExLHRoaXMuX3RhcmdldD1lLHRoaXMuY2FsbGJhY2s9dCx0aGlzLl9lZmZlY3RpdmVOb2Rlcz1bXSx0aGlzLl9vYnNlcnZlcj1udWxsLHRoaXMuX3NjaGVkdWxlZD0hMSx0aGlzLl9ib3VuZFNjaGVkdWxlPSgpPT57dGhpcy5fc2NoZWR1bGUoKX0sdGhpcy5jb25uZWN0KCksdGhpcy5fc2NoZWR1bGUoKX1jb25uZWN0KCl7QngodGhpcy5fdGFyZ2V0KT90aGlzLl9saXN0ZW5TbG90cyhbdGhpcy5fdGFyZ2V0XSk6dWUodGhpcy5fdGFyZ2V0KS5jaGlsZHJlbiYmKHRoaXMuX2xpc3RlblNsb3RzKHVlKHRoaXMuX3RhcmdldCkuY2hpbGRyZW4pLHdpbmRvdy5TaGFkeURPTT90aGlzLl9zaGFkeUNoaWxkcmVuT2JzZXJ2ZXI9d2luZG93LlNoYWR5RE9NLm9ic2VydmVDaGlsZHJlbih0aGlzLl90YXJnZXQsZT0+e3RoaXMuX3Byb2Nlc3NNdXRhdGlvbnMoZSl9KToodGhpcy5fbmF0aXZlQ2hpbGRyZW5PYnNlcnZlcj1uZXcgTXV0YXRpb25PYnNlcnZlcihlPT57dGhpcy5fcHJvY2Vzc011dGF0aW9ucyhlKX0pLHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLl90YXJnZXQse2NoaWxkTGlzdDohMH0pKSksdGhpcy5fY29ubmVjdGVkPSEwfWRpc2Nvbm5lY3QoKXtCeCh0aGlzLl90YXJnZXQpP3RoaXMuX3VubGlzdGVuU2xvdHMoW3RoaXMuX3RhcmdldF0pOnVlKHRoaXMuX3RhcmdldCkuY2hpbGRyZW4mJih0aGlzLl91bmxpc3RlblNsb3RzKHVlKHRoaXMuX3RhcmdldCkuY2hpbGRyZW4pLHdpbmRvdy5TaGFkeURPTSYmdGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyPyh3aW5kb3cuU2hhZHlET00udW5vYnNlcnZlQ2hpbGRyZW4odGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyKSx0aGlzLl9zaGFkeUNoaWxkcmVuT2JzZXJ2ZXI9bnVsbCk6dGhpcy5fbmF0aXZlQ2hpbGRyZW5PYnNlcnZlciYmKHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXIuZGlzY29ubmVjdCgpLHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXI9bnVsbCkpLHRoaXMuX2Nvbm5lY3RlZD0hMX1fc2NoZWR1bGUoKXt0aGlzLl9zY2hlZHVsZWR8fCh0aGlzLl9zY2hlZHVsZWQ9ITAsbGkucnVuKCgpPT50aGlzLmZsdXNoKCkpKX1fcHJvY2Vzc011dGF0aW9ucyhlKXt0aGlzLl9wcm9jZXNzU2xvdE11dGF0aW9ucyhlKSx0aGlzLmZsdXNoKCl9X3Byb2Nlc3NTbG90TXV0YXRpb25zKGUpe2lmKGUpZm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2xldCByPWVbdF07ci5hZGRlZE5vZGVzJiZ0aGlzLl9saXN0ZW5TbG90cyhyLmFkZGVkTm9kZXMpLHIucmVtb3ZlZE5vZGVzJiZ0aGlzLl91bmxpc3RlblNsb3RzKHIucmVtb3ZlZE5vZGVzKX19Zmx1c2goKXtpZighdGhpcy5fY29ubmVjdGVkKXJldHVybiExO3dpbmRvdy5TaGFkeURPTSYmU2hhZHlET00uZmx1c2goKSx0aGlzLl9uYXRpdmVDaGlsZHJlbk9ic2VydmVyP3RoaXMuX3Byb2Nlc3NTbG90TXV0YXRpb25zKHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXIudGFrZVJlY29yZHMoKSk6dGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyJiZ0aGlzLl9wcm9jZXNzU2xvdE11dGF0aW9ucyh0aGlzLl9zaGFkeUNoaWxkcmVuT2JzZXJ2ZXIudGFrZVJlY29yZHMoKSksdGhpcy5fc2NoZWR1bGVkPSExO2xldCBlPXt0YXJnZXQ6dGhpcy5fdGFyZ2V0LGFkZGVkTm9kZXM6W10scmVtb3ZlZE5vZGVzOltdfSx0PXRoaXMuY29uc3RydWN0b3IuZ2V0RmxhdHRlbmVkTm9kZXModGhpcy5fdGFyZ2V0KSxyPW85KHQsdGhpcy5fZWZmZWN0aXZlTm9kZXMpO2ZvcihsZXQgaT0wLG87aTxyLmxlbmd0aCYmKG89cltpXSk7aSsrKWZvcihsZXQgYT0wLHM7YTxvLnJlbW92ZWQubGVuZ3RoJiYocz1vLnJlbW92ZWRbYV0pO2ErKyllLnJlbW92ZWROb2Rlcy5wdXNoKHMpO2ZvcihsZXQgaT0wLG87aTxyLmxlbmd0aCYmKG89cltpXSk7aSsrKWZvcihsZXQgYT1vLmluZGV4O2E8by5pbmRleCtvLmFkZGVkQ291bnQ7YSsrKWUuYWRkZWROb2Rlcy5wdXNoKHRbYV0pO3RoaXMuX2VmZmVjdGl2ZU5vZGVzPXQ7bGV0IG49ITE7cmV0dXJuKGUuYWRkZWROb2Rlcy5sZW5ndGh8fGUucmVtb3ZlZE5vZGVzLmxlbmd0aCkmJihuPSEwLHRoaXMuY2FsbGJhY2suY2FsbCh0aGlzLl90YXJnZXQsZSkpLG59X2xpc3RlblNsb3RzKGUpe2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXtsZXQgcj1lW3RdO0J4KHIpJiZyLmFkZEV2ZW50TGlzdGVuZXIoInNsb3RjaGFuZ2UiLHRoaXMuX2JvdW5kU2NoZWR1bGUpfX1fdW5saXN0ZW5TbG90cyhlKXtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7bGV0IHI9ZVt0XTtCeChyKSYmci5yZW1vdmVFdmVudExpc3RlbmVyKCJzbG90Y2hhbmdlIix0aGlzLl9ib3VuZFNjaGVkdWxlKX19fTt2YXIgY2k9ZnVuY3Rpb24oKXtsZXQgZSx0O2RvIGU9d2luZG93LlNoYWR5RE9NJiZTaGFkeURPTS5mbHVzaCgpLHdpbmRvdy5TaGFkeUNTUyYmd2luZG93LlNoYWR5Q1NTLlNjb3BpbmdTaGltJiZ3aW5kb3cuU2hhZHlDU1MuU2NvcGluZ1NoaW0uZmx1c2goKSx0PSRtdCgpO3doaWxlKGV8fHQpfTt2YXIgSHg9RWxlbWVudC5wcm90b3R5cGUsa3hlPUh4Lm1hdGNoZXN8fEh4Lm1hdGNoZXNTZWxlY3Rvcnx8SHgubW96TWF0Y2hlc1NlbGVjdG9yfHxIeC5tc01hdGNoZXNTZWxlY3Rvcnx8SHgub01hdGNoZXNTZWxlY3Rvcnx8SHgud2Via2l0TWF0Y2hlc1NlbGVjdG9yLCRHPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGt4ZS5jYWxsKGUsdCl9LEtyPWNsYXNze2NvbnN0cnVjdG9yKHQpe3dpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLmluVXNlJiZ3aW5kb3cuU2hhZHlET00ucGF0Y2godCksdGhpcy5ub2RlPXR9b2JzZXJ2ZU5vZGVzKHQpe3JldHVybiBuZXcgeGgodGhpcy5ub2RlLHQpfXVub2JzZXJ2ZU5vZGVzKHQpe3QuZGlzY29ubmVjdCgpfW5vdGlmeU9ic2VydmVyKCl7fWRlZXBDb250YWlucyh0KXtpZih1ZSh0aGlzLm5vZGUpLmNvbnRhaW5zKHQpKXJldHVybiEwO2xldCByPXQsbj10Lm93bmVyRG9jdW1lbnQ7Zm9yKDtyJiZyIT09biYmciE9PXRoaXMubm9kZTspcj11ZShyKS5wYXJlbnROb2RlfHx1ZShyKS5ob3N0O3JldHVybiByPT09dGhpcy5ub2RlfWdldE93bmVyUm9vdCgpe3JldHVybiB1ZSh0aGlzLm5vZGUpLmdldFJvb3ROb2RlKCl9Z2V0RGlzdHJpYnV0ZWROb2Rlcygpe3JldHVybiB0aGlzLm5vZGUubG9jYWxOYW1lPT09InNsb3QiP3VlKHRoaXMubm9kZSkuYXNzaWduZWROb2Rlcyh7ZmxhdHRlbjohMH0pOltdfWdldERlc3RpbmF0aW9uSW5zZXJ0aW9uUG9pbnRzKCl7bGV0IHQ9W10scj11ZSh0aGlzLm5vZGUpLmFzc2lnbmVkU2xvdDtmb3IoO3I7KXQucHVzaChyKSxyPXVlKHIpLmFzc2lnbmVkU2xvdDtyZXR1cm4gdH1pbXBvcnROb2RlKHQscil7bGV0IG49dGhpcy5ub2RlIGluc3RhbmNlb2YgRG9jdW1lbnQ/dGhpcy5ub2RlOnRoaXMubm9kZS5vd25lckRvY3VtZW50O3JldHVybiB1ZShuKS5pbXBvcnROb2RlKHQscil9Z2V0RWZmZWN0aXZlQ2hpbGROb2Rlcygpe3JldHVybiB4aC5nZXRGbGF0dGVuZWROb2Rlcyh0aGlzLm5vZGUpfXF1ZXJ5RGlzdHJpYnV0ZWRFbGVtZW50cyh0KXtsZXQgcj10aGlzLmdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKSxuPVtdO2ZvcihsZXQgaT0wLG89ci5sZW5ndGgsYTtpPG8mJihhPXJbaV0pO2krKylhLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJiRHKGEsdCkmJm4ucHVzaChhKTtyZXR1cm4gbn1nZXQgYWN0aXZlRWxlbWVudCgpe2xldCB0PXRoaXMubm9kZTtyZXR1cm4gdC5fYWN0aXZlRWxlbWVudCE9PXZvaWQgMD90Ll9hY3RpdmVFbGVtZW50OnQuYWN0aXZlRWxlbWVudH19O2Z1bmN0aW9uIFJ4ZShlLHQpe2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtsZXQgbj10W3JdO2Vbbl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlW25dLmFwcGx5KHRoaXMubm9kZSxhcmd1bWVudHMpfX19ZnVuY3Rpb24gU2d0KGUsdCl7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspe2xldCBuPXRbcl07T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZVtuXX0sY29uZmlndXJhYmxlOiEwfSl9fWZ1bmN0aW9uIE54ZShlLHQpe2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtsZXQgbj10W3JdO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVbbl19LHNldDpmdW5jdGlvbihpKXt0aGlzLm5vZGVbbl09aX0sY29uZmlndXJhYmxlOiEwfSl9fXZhciBsRT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmV2ZW50PXR9Z2V0IHJvb3RUYXJnZXQoKXtyZXR1cm4gdGhpcy5wYXRoWzBdfWdldCBsb2NhbFRhcmdldCgpe3JldHVybiB0aGlzLmV2ZW50LnRhcmdldH1nZXQgcGF0aCgpe3JldHVybiB0aGlzLmV2ZW50LmNvbXBvc2VkUGF0aCgpfX07S3IucHJvdG90eXBlLmNsb25lTm9kZTtLci5wcm90b3R5cGUuYXBwZW5kQ2hpbGQ7S3IucHJvdG90eXBlLmluc2VydEJlZm9yZTtLci5wcm90b3R5cGUucmVtb3ZlQ2hpbGQ7S3IucHJvdG90eXBlLnJlcGxhY2VDaGlsZDtLci5wcm90b3R5cGUuc2V0QXR0cmlidXRlO0tyLnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGU7S3IucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3I7S3IucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3JBbGw7S3IucHJvdG90eXBlLnBhcmVudE5vZGU7S3IucHJvdG90eXBlLmZpcnN0Q2hpbGQ7S3IucHJvdG90eXBlLmxhc3RDaGlsZDtLci5wcm90b3R5cGUubmV4dFNpYmxpbmc7S3IucHJvdG90eXBlLnByZXZpb3VzU2libGluZztLci5wcm90b3R5cGUuZmlyc3RFbGVtZW50Q2hpbGQ7S3IucHJvdG90eXBlLmxhc3RFbGVtZW50Q2hpbGQ7S3IucHJvdG90eXBlLm5leHRFbGVtZW50U2libGluZztLci5wcm90b3R5cGUucHJldmlvdXNFbGVtZW50U2libGluZztLci5wcm90b3R5cGUuY2hpbGROb2RlcztLci5wcm90b3R5cGUuY2hpbGRyZW47S3IucHJvdG90eXBlLmNsYXNzTGlzdDtLci5wcm90b3R5cGUudGV4dENvbnRlbnQ7S3IucHJvdG90eXBlLmlubmVySFRNTDt2YXIgWEc9S3I7aWYod2luZG93LlNoYWR5RE9NJiZ3aW5kb3cuU2hhZHlET00uaW5Vc2UmJndpbmRvdy5TaGFkeURPTS5ub1BhdGNoJiZ3aW5kb3cuU2hhZHlET00uV3JhcHBlcil7Y2xhc3MgZSBleHRlbmRzIHdpbmRvdy5TaGFkeURPTS5XcmFwcGVye31PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhLci5wcm90b3R5cGUpLmZvckVhY2godD0+e3QhPSJhY3RpdmVFbGVtZW50IiYmKGUucHJvdG90eXBlW3RdPUtyLnByb3RvdHlwZVt0XSl9KSxTZ3QoZS5wcm90b3R5cGUsWyJjbGFzc0xpc3QiXSksWEc9ZSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhsRS5wcm90b3R5cGUse2xvY2FsVGFyZ2V0OntnZXQoKXtsZXQgdD10aGlzLmV2ZW50LmN1cnJlbnRUYXJnZXQscj10JiZ6dCh0KS5nZXRPd25lclJvb3QoKSxuPXRoaXMucGF0aDtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKyl7bGV0IG89bltpXTtpZih6dChvKS5nZXRPd25lclJvb3QoKT09PXIpcmV0dXJuIG99fSxjb25maWd1cmFibGU6ITB9LHBhdGg6e2dldCgpe3JldHVybiB3aW5kb3cuU2hhZHlET00uY29tcG9zZWRQYXRoKHRoaXMuZXZlbnQpfSxjb25maWd1cmFibGU6ITB9fSl9ZWxzZSBSeGUoS3IucHJvdG90eXBlLFsiY2xvbmVOb2RlIiwiYXBwZW5kQ2hpbGQiLCJpbnNlcnRCZWZvcmUiLCJyZW1vdmVDaGlsZCIsInJlcGxhY2VDaGlsZCIsInNldEF0dHJpYnV0ZSIsInJlbW92ZUF0dHJpYnV0ZSIsInF1ZXJ5U2VsZWN0b3IiLCJxdWVyeVNlbGVjdG9yQWxsIl0pLFNndChLci5wcm90b3R5cGUsWyJwYXJlbnROb2RlIiwiZmlyc3RDaGlsZCIsImxhc3RDaGlsZCIsIm5leHRTaWJsaW5nIiwicHJldmlvdXNTaWJsaW5nIiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJsYXN0RWxlbWVudENoaWxkIiwibmV4dEVsZW1lbnRTaWJsaW5nIiwicHJldmlvdXNFbGVtZW50U2libGluZyIsImNoaWxkTm9kZXMiLCJjaGlsZHJlbiIsImNsYXNzTGlzdCJdKSxOeGUoS3IucHJvdG90eXBlLFsidGV4dENvbnRlbnQiLCJpbm5lckhUTUwiLCJjbGFzc05hbWUiXSk7dmFyIHp0PWZ1bmN0aW9uKGUpe2lmKGU9ZXx8ZG9jdW1lbnQsZSBpbnN0YW5jZW9mIFhHfHxlIGluc3RhbmNlb2YgbEUpcmV0dXJuIGU7bGV0IHQ9ZS5fX2RvbUFwaTtyZXR1cm4gdHx8KGUgaW5zdGFuY2VvZiBFdmVudD90PW5ldyBsRShlKTp0PW5ldyBYRyhlKSxlLl9fZG9tQXBpPXQpLHR9O3ZhciBLRz13aW5kb3cuU2hhZHlET00sTWd0PXdpbmRvdy5TaGFkeUNTUztmdW5jdGlvbiBFZ3QoZSx0KXtyZXR1cm4gdWUoZSkuZ2V0Um9vdE5vZGUoKT09PXR9ZnVuY3Rpb24gVGd0KGUsdD0hMSl7aWYoIUtHfHwhTWd0fHwhS0cuaGFuZGxlc0R5bmFtaWNTY29waW5nKXJldHVybiBudWxsO2xldCByPU1ndC5TY29waW5nU2hpbTtpZighcilyZXR1cm4gbnVsbDtsZXQgbj1yLnNjb3BlRm9yTm9kZShlKSxpPXVlKGUpLmdldFJvb3ROb2RlKCksbz1hPT57aWYoIUVndChhLGkpKXJldHVybjtsZXQgcz1BcnJheS5mcm9tKEtHLm5hdGl2ZU1ldGhvZHMucXVlcnlTZWxlY3RvckFsbC5jYWxsKGEsIioiKSk7cy5wdXNoKGEpO2ZvcihsZXQgbD0wO2w8cy5sZW5ndGg7bCsrKXtsZXQgYz1zW2xdO2lmKCFFZ3QoYyxpKSljb250aW51ZTtsZXQgdT1yLmN1cnJlbnRTY29wZUZvck5vZGUoYyk7dSE9PW4mJih1IT09IiImJnIudW5zY29wZU5vZGUoYyx1KSxyLnNjb3BlTm9kZShjLG4pKX19O2lmKG8oZSksdCl7bGV0IGE9bmV3IE11dGF0aW9uT2JzZXJ2ZXIocz0+e2ZvcihsZXQgbD0wO2w8cy5sZW5ndGg7bCsrKXtsZXQgYz1zW2xdO2ZvcihsZXQgdT0wO3U8Yy5hZGRlZE5vZGVzLmxlbmd0aDt1Kyspe2xldCBoPWMuYWRkZWROb2Rlc1t1XTtoLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJm8oaCl9fX0pO3JldHVybiBhLm9ic2VydmUoZSx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITB9KSxhfWVsc2UgcmV0dXJuIG51bGx9dmFyIFpHPSJkaXNhYmxlLXVwZ3JhZGUiLEpHPWU9Pntmb3IoO2U7KXtsZXQgdD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIm9ic2VydmVkQXR0cmlidXRlcyIpO2lmKHQpcmV0dXJuIHQuZ2V0O2U9T2JqZWN0LmdldFByb3RvdHlwZU9mKGUucHJvdG90eXBlKS5jb25zdHJ1Y3Rvcn1yZXR1cm4oKT0+W119LEUxcj1ObihlPT57bGV0IHQ9TW0oZSkscj1KRyh0KTtjbGFzcyBuIGV4dGVuZHMgdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fX2lzVXBncmFkZURpc2FibGVkfXN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCl7cmV0dXJuIHIuY2FsbCh0aGlzKS5jb25jYXQoWkcpfV9pbml0aWFsaXplUHJvcGVydGllcygpe3RoaXMuaGFzQXR0cmlidXRlKFpHKT90aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQ9ITA6c3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCl9X2VuYWJsZVByb3BlcnRpZXMoKXt0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWR8fHN1cGVyLl9lbmFibGVQcm9wZXJ0aWVzKCl9X2NhbkFwcGx5UHJvcGVydHlEZWZhdWx0KG8pe3JldHVybiBzdXBlci5fY2FuQXBwbHlQcm9wZXJ0eURlZmF1bHQobykmJiEodGhpcy5fX2lzVXBncmFkZURpc2FibGVkJiZ0aGlzLl9pc1Byb3BlcnR5UGVuZGluZyhvKSl9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG8sYSxzLGwpe289PVpHP3RoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZCYmcz09bnVsbCYmKHN1cGVyLl9pbml0aWFsaXplUHJvcGVydGllcygpLHRoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZD0hMSx1ZSh0aGlzKS5pc0Nvbm5lY3RlZCYmc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSk6c3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG8sYSxzLGwpfWNvbm5lY3RlZENhbGxiYWNrKCl7dGhpcy5fX2lzVXBncmFkZURpc2FibGVkfHxzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7dGhpcy5fX2lzVXBncmFkZURpc2FibGVkfHxzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpfX1yZXR1cm4gbn0pO3ZhciBhOT0iZGlzYWJsZS11cGdyYWRlIixEeGU9d2luZG93LlNoYWR5Q1NTLEd0PU5uKGU9PntsZXQgdD12aChNbShlKSkscj1VST90OmRndCh0KSxuPUpHKHIpLGk9e3g6InBhbi14Iix5OiJwYW4teSIsbm9uZToibm9uZSIsYWxsOiJhdXRvIn07Y2xhc3MgbyBleHRlbmRzIHJ7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuaXNBdHRhY2hlZCx0aGlzLl9fYm91bmRMaXN0ZW5lcnMsdGhpcy5fZGVib3VuY2Vycyx0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQsdGhpcy5fX25lZWRzQXR0cmlidXRlc0F0Q29ubmVjdGVkLHRoaXMuX2xlZ2FjeUZvcmNlT2JzZXJ2ZWRBdHRyaWJ1dGVzfXN0YXRpYyBnZXQgaW1wb3J0TWV0YSgpe3JldHVybiB0aGlzLnByb3RvdHlwZS5pbXBvcnRNZXRhfWNyZWF0ZWQoKXt9X19hdHRyaWJ1dGVSZWFjdGlvbihzLGwsYyl7KHRoaXMuX19kYXRhQXR0cmlidXRlcyYmdGhpcy5fX2RhdGFBdHRyaWJ1dGVzW3NdfHxzPT09YTkpJiZ0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhzLGwsYyxudWxsKX1zZXRBdHRyaWJ1dGUocyxsKXtpZihxTSYmIXRoaXMuX2xlZ2FjeUZvcmNlT2JzZXJ2ZWRBdHRyaWJ1dGVzKXtsZXQgYz10aGlzLmdldEF0dHJpYnV0ZShzKTtzdXBlci5zZXRBdHRyaWJ1dGUocyxsKSx0aGlzLl9fYXR0cmlidXRlUmVhY3Rpb24ocyxjLFN0cmluZyhsKSl9ZWxzZSBzdXBlci5zZXRBdHRyaWJ1dGUocyxsKX1yZW1vdmVBdHRyaWJ1dGUocyl7aWYocU0mJiF0aGlzLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcyl7bGV0IGw9dGhpcy5nZXRBdHRyaWJ1dGUocyk7c3VwZXIucmVtb3ZlQXR0cmlidXRlKHMpLHRoaXMuX19hdHRyaWJ1dGVSZWFjdGlvbihzLGwsbnVsbCl9ZWxzZSBzdXBlci5yZW1vdmVBdHRyaWJ1dGUocyl9c3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKXtyZXR1cm4gcU0mJiF0aGlzLnByb3RvdHlwZS5fbGVnYWN5Rm9yY2VPYnNlcnZlZEF0dHJpYnV0ZXM/KHRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19vYnNlcnZlZEF0dHJpYnV0ZXMiLHRoaXMpKXx8KHRoaXMuX19vYnNlcnZlZEF0dHJpYnV0ZXM9W10sVkkodGhpcy5wcm90b3R5cGUpKSx0aGlzLl9fb2JzZXJ2ZWRBdHRyaWJ1dGVzKTpuLmNhbGwodGhpcykuY29uY2F0KGE5KX1fZW5hYmxlUHJvcGVydGllcygpe3RoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZHx8c3VwZXIuX2VuYWJsZVByb3BlcnRpZXMoKX1fY2FuQXBwbHlQcm9wZXJ0eURlZmF1bHQocyl7cmV0dXJuIHN1cGVyLl9jYW5BcHBseVByb3BlcnR5RGVmYXVsdChzKSYmISh0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQmJnRoaXMuX2lzUHJvcGVydHlQZW5kaW5nKHMpKX1jb25uZWN0ZWRDYWxsYmFjaygpe3RoaXMuX19uZWVkc0F0dHJpYnV0ZXNBdENvbm5lY3RlZCYmdGhpcy5fdGFrZUF0dHJpYnV0ZXMoKSx0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWR8fChzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuaXNBdHRhY2hlZD0hMCx0aGlzLmF0dGFjaGVkKCkpfWF0dGFjaGVkKCl7fWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7dGhpcy5fX2lzVXBncmFkZURpc2FibGVkfHwoc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmlzQXR0YWNoZWQ9ITEsdGhpcy5kZXRhY2hlZCgpKX1kZXRhY2hlZCgpe31hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2socyxsLGMsdSl7bCE9PWMmJihzPT1hOT90aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQmJmM9PW51bGwmJih0aGlzLl9pbml0aWFsaXplUHJvcGVydGllcygpLHRoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZD0hMSx1ZSh0aGlzKS5pc0Nvbm5lY3RlZCYmdGhpcy5jb25uZWN0ZWRDYWxsYmFjaygpKTooc3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHMsbCxjLHUpLHRoaXMuYXR0cmlidXRlQ2hhbmdlZChzLGwsYykpKX1hdHRyaWJ1dGVDaGFuZ2VkKHMsbCxjKXt9X2luaXRpYWxpemVQcm9wZXJ0aWVzKCl7aWYoZHAmJnRoaXMuaGFzQXR0cmlidXRlKGE5KSl0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQ9ITA7ZWxzZXtsZXQgcz1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcyk7cy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX2hhc1JlZ2lzdGVyRmluaXNoZWQiLHMpKXx8KHRoaXMuX3JlZ2lzdGVyZWQoKSxzLl9faGFzUmVnaXN0ZXJGaW5pc2hlZD0hMCksc3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCksdGhpcy5yb290PXRoaXMsdGhpcy5jcmVhdGVkKCkscU0mJiF0aGlzLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcyYmKHRoaXMuaGFzQXR0cmlidXRlcygpP3RoaXMuX3Rha2VBdHRyaWJ1dGVzKCk6dGhpcy5wYXJlbnROb2RlfHwodGhpcy5fX25lZWRzQXR0cmlidXRlc0F0Q29ubmVjdGVkPSEwKSksdGhpcy5fYXBwbHlMaXN0ZW5lcnMoKX19X3Rha2VBdHRyaWJ1dGVzKCl7bGV0IHM9dGhpcy5hdHRyaWJ1dGVzO2ZvcihsZXQgbD0wLGM9cy5sZW5ndGg7bDxjO2wrKyl7bGV0IHU9c1tsXTt0aGlzLl9fYXR0cmlidXRlUmVhY3Rpb24odS5uYW1lLG51bGwsdS52YWx1ZSl9fV9yZWdpc3RlcmVkKCl7fXJlYWR5KCl7dGhpcy5fZW5zdXJlQXR0cmlidXRlcygpLHN1cGVyLnJlYWR5KCl9X2Vuc3VyZUF0dHJpYnV0ZXMoKXt9X2FwcGx5TGlzdGVuZXJzKCl7fXNlcmlhbGl6ZShzKXtyZXR1cm4gdGhpcy5fc2VyaWFsaXplVmFsdWUocyl9ZGVzZXJpYWxpemUocyxsKXtyZXR1cm4gdGhpcy5fZGVzZXJpYWxpemVWYWx1ZShzLGwpfXJlZmxlY3RQcm9wZXJ0eVRvQXR0cmlidXRlKHMsbCxjKXt0aGlzLl9wcm9wZXJ0eVRvQXR0cmlidXRlKHMsbCxjKX1zZXJpYWxpemVWYWx1ZVRvQXR0cmlidXRlKHMsbCxjKXt0aGlzLl92YWx1ZVRvTm9kZUF0dHJpYnV0ZShjfHx0aGlzLHMsbCl9ZXh0ZW5kKHMsbCl7aWYoIShzJiZsKSlyZXR1cm4gc3x8bDtsZXQgYz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhsKTtmb3IobGV0IHU9MCxoO3U8Yy5sZW5ndGgmJihoPWNbdV0pO3UrKyl7bGV0IGY9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihsLGgpO2YmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLGgsZil9cmV0dXJuIHN9bWl4aW4ocyxsKXtmb3IobGV0IGMgaW4gbClzW2NdPWxbY107cmV0dXJuIHN9Y2hhaW5PYmplY3QocyxsKXtyZXR1cm4gcyYmbCYmcyE9PWwmJihzLl9fcHJvdG9fXz1sKSxzfWluc3RhbmNlVGVtcGxhdGUocyl7bGV0IGw9dGhpcy5jb25zdHJ1Y3Rvci5fY29udGVudEZvclRlbXBsYXRlKHMpO3JldHVybiBkb2N1bWVudC5pbXBvcnROb2RlKGwsITApfWZpcmUocyxsLGMpe2M9Y3x8e30sbD1sPT1udWxsP3t9Omw7bGV0IHU9bmV3IEV2ZW50KHMse2J1YmJsZXM6Yy5idWJibGVzPT09dm9pZCAwPyEwOmMuYnViYmxlcyxjYW5jZWxhYmxlOkJvb2xlYW4oYy5jYW5jZWxhYmxlKSxjb21wb3NlZDpjLmNvbXBvc2VkPT09dm9pZCAwPyEwOmMuY29tcG9zZWR9KTt1LmRldGFpbD1sO2xldCBoPWMubm9kZXx8dGhpcztyZXR1cm4gdWUoaCkuZGlzcGF0Y2hFdmVudCh1KSx1fWxpc3RlbihzLGwsYyl7cz1zfHx0aGlzO2xldCB1PXRoaXMuX19ib3VuZExpc3RlbmVyc3x8KHRoaXMuX19ib3VuZExpc3RlbmVycz1uZXcgV2Vha01hcCksaD11LmdldChzKTtofHwoaD17fSx1LnNldChzLGgpKTtsZXQgZj1sK2M7aFtmXXx8KGhbZl09dGhpcy5fYWRkTWV0aG9kRXZlbnRMaXN0ZW5lclRvTm9kZShzLGwsYyx0aGlzKSl9dW5saXN0ZW4ocyxsLGMpe3M9c3x8dGhpcztsZXQgdT10aGlzLl9fYm91bmRMaXN0ZW5lcnMmJnRoaXMuX19ib3VuZExpc3RlbmVycy5nZXQocyksaD1sK2MsZj11JiZ1W2hdO2YmJih0aGlzLl9yZW1vdmVFdmVudExpc3RlbmVyRnJvbU5vZGUocyxsLGYpLHVbaF09bnVsbCl9c2V0U2Nyb2xsRGlyZWN0aW9uKHMsbCl7bV8obHx8dGhpcyxpW3NdfHwiYXV0byIpfSQkKHMpe3JldHVybiB0aGlzLnJvb3QucXVlcnlTZWxlY3RvcihzKX1nZXQgZG9tSG9zdCgpe2xldCBzPXVlKHRoaXMpLmdldFJvb3ROb2RlKCk7cmV0dXJuIHMgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50P3MuaG9zdDpzfWRpc3RyaWJ1dGVDb250ZW50KCl7bGV0IGw9enQodGhpcyk7d2luZG93LlNoYWR5RE9NJiZsLnNoYWRvd1Jvb3QmJlNoYWR5RE9NLmZsdXNoKCl9Z2V0RWZmZWN0aXZlQ2hpbGROb2Rlcygpe3JldHVybiB6dCh0aGlzKS5nZXRFZmZlY3RpdmVDaGlsZE5vZGVzKCl9cXVlcnlEaXN0cmlidXRlZEVsZW1lbnRzKHMpe3JldHVybiB6dCh0aGlzKS5xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHMocyl9Z2V0RWZmZWN0aXZlQ2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5nZXRFZmZlY3RpdmVDaGlsZE5vZGVzKCkuZmlsdGVyKGZ1bmN0aW9uKGwpe3JldHVybiBsLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREV9KX1nZXRFZmZlY3RpdmVUZXh0Q29udGVudCgpe2xldCBzPXRoaXMuZ2V0RWZmZWN0aXZlQ2hpbGROb2RlcygpLGw9W107Zm9yKGxldCBjPTAsdTt1PXNbY107YysrKXUubm9kZVR5cGUhPT1Ob2RlLkNPTU1FTlRfTk9ERSYmbC5wdXNoKHUudGV4dENvbnRlbnQpO3JldHVybiBsLmpvaW4oIiIpfXF1ZXJ5RWZmZWN0aXZlQ2hpbGRyZW4ocyl7bGV0IGw9dGhpcy5xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHMocyk7cmV0dXJuIGwmJmxbMF19cXVlcnlBbGxFZmZlY3RpdmVDaGlsZHJlbihzKXtyZXR1cm4gdGhpcy5xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHMocyl9Z2V0Q29udGVudENoaWxkTm9kZXMocyl7bGV0IGw9dGhpcy5yb290LnF1ZXJ5U2VsZWN0b3Ioc3x8InNsb3QiKTtyZXR1cm4gbD96dChsKS5nZXREaXN0cmlidXRlZE5vZGVzKCk6W119Z2V0Q29udGVudENoaWxkcmVuKHMpe3JldHVybiB0aGlzLmdldENvbnRlbnRDaGlsZE5vZGVzKHMpLmZpbHRlcihmdW5jdGlvbihjKXtyZXR1cm4gYy5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFfSl9aXNMaWdodERlc2NlbmRhbnQocyl7bGV0IGw9dGhpcztyZXR1cm4gbCE9PXMmJnVlKGwpLmNvbnRhaW5zKHMpJiZ1ZShsKS5nZXRSb290Tm9kZSgpPT09dWUocykuZ2V0Um9vdE5vZGUoKX1pc0xvY2FsRGVzY2VuZGFudChzKXtyZXR1cm4gdGhpcy5yb290PT09dWUocykuZ2V0Um9vdE5vZGUoKX1zY29wZVN1YnRyZWUocyxsPSExKXtyZXR1cm4gVGd0KHMsbCl9Z2V0Q29tcHV0ZWRTdHlsZVZhbHVlKHMpe3JldHVybiBEeGUuZ2V0Q29tcHV0ZWRTdHlsZVZhbHVlKHRoaXMscyl9ZGVib3VuY2UocyxsLGMpe3JldHVybiB0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9LHRoaXMuX2RlYm91bmNlcnNbc109c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2Vyc1tzXSxjPjA/bW8uYWZ0ZXIoYyk6bGksbC5iaW5kKHRoaXMpKX1pc0RlYm91bmNlckFjdGl2ZShzKXt0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9O2xldCBsPXRoaXMuX2RlYm91bmNlcnNbc107cmV0dXJuISEobCYmbC5pc0FjdGl2ZSgpKX1mbHVzaERlYm91bmNlcihzKXt0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9O2xldCBsPXRoaXMuX2RlYm91bmNlcnNbc107bCYmbC5mbHVzaCgpfWNhbmNlbERlYm91bmNlcihzKXt0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9O2xldCBsPXRoaXMuX2RlYm91bmNlcnNbc107bCYmbC5jYW5jZWwoKX1hc3luYyhzLGwpe3JldHVybiBsPjA/bW8ucnVuKHMuYmluZCh0aGlzKSxsKTp+bGkucnVuKHMuYmluZCh0aGlzKSl9Y2FuY2VsQXN5bmMocyl7czwwP2xpLmNhbmNlbCh+cyk6bW8uY2FuY2VsKHMpfWNyZWF0ZShzLGwpe2xldCBjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocyk7aWYobClpZihjLnNldFByb3BlcnRpZXMpYy5zZXRQcm9wZXJ0aWVzKGwpO2Vsc2UgZm9yKGxldCB1IGluIGwpY1t1XT1sW3VdO3JldHVybiBjfWVsZW1lbnRNYXRjaGVzKHMsbCl7cmV0dXJuICRHKGx8fHRoaXMscyl9dG9nZ2xlQXR0cmlidXRlKHMsbCl7bGV0IGM9dGhpcztyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTMmJihjPWFyZ3VtZW50c1syXSksYXJndW1lbnRzLmxlbmd0aD09MSYmKGw9IWMuaGFzQXR0cmlidXRlKHMpKSxsPyh1ZShjKS5zZXRBdHRyaWJ1dGUocywiIiksITApOih1ZShjKS5yZW1vdmVBdHRyaWJ1dGUocyksITEpfXRvZ2dsZUNsYXNzKHMsbCxjKXtjPWN8fHRoaXMsYXJndW1lbnRzLmxlbmd0aD09MSYmKGw9IWMuY2xhc3NMaXN0LmNvbnRhaW5zKHMpKSxsP2MuY2xhc3NMaXN0LmFkZChzKTpjLmNsYXNzTGlzdC5yZW1vdmUocyl9dHJhbnNmb3JtKHMsbCl7bD1sfHx0aGlzLGwuc3R5bGUud2Via2l0VHJhbnNmb3JtPXMsbC5zdHlsZS50cmFuc2Zvcm09c310cmFuc2xhdGUzZChzLGwsYyx1KXt1PXV8fHRoaXMsdGhpcy50cmFuc2Zvcm0oInRyYW5zbGF0ZTNkKCIrcysiLCIrbCsiLCIrYysiKSIsdSl9YXJyYXlEZWxldGUocyxsKXtsZXQgYztpZihBcnJheS5pc0FycmF5KHMpKXtpZihjPXMuaW5kZXhPZihsKSxjPj0wKXJldHVybiBzLnNwbGljZShjLDEpfWVsc2UgaWYoYz1Obyh0aGlzLHMpLmluZGV4T2YobCksYz49MClyZXR1cm4gdGhpcy5zcGxpY2UocyxjLDEpO3JldHVybiBudWxsfV9sb2dnZXIocyxsKXtzd2l0Y2goQXJyYXkuaXNBcnJheShsKSYmbC5sZW5ndGg9PT0xJiZBcnJheS5pc0FycmF5KGxbMF0pJiYobD1sWzBdKSxzKXtjYXNlImxvZyI6Y2FzZSJ3YXJuIjpjYXNlImVycm9yIjpjb25zb2xlW3NdKC4uLmwpfX1fbG9nKC4uLnMpe3RoaXMuX2xvZ2dlcigibG9nIixzKX1fd2FybiguLi5zKXt0aGlzLl9sb2dnZXIoIndhcm4iLHMpfV9lcnJvciguLi5zKXt0aGlzLl9sb2dnZXIoImVycm9yIixzKX1fbG9nZihzLC4uLmwpe3JldHVyblsiWyVzOjolc10iLHRoaXMuaXMscywuLi5sXX19cmV0dXJuIG8ucHJvdG90eXBlLmlzPSIiLG99KTt2YXIgQW09RWUoT2UoKSwxKTtmdW5jdGlvbiBiaChlLHQpe2xldCByPTAsbj0wO2Zvcig7Oyl7aWYocj09PWUubGVuZ3RoKXJldHVybiBuPT09dC5sZW5ndGg/MDotMTtpZihuPT09dC5sZW5ndGgpcmV0dXJuIDE7aWYoZ18oZVtyXSkmJmdfKHRbbl0pKXtsZXQgaT1yLG89bjtyPUNndChlLHIrMSksbj1DZ3QodCxuKzEpO2xldCBhPXBhcnNlRmxvYXQoZS5zbGljZShpLHIpKSxzPXBhcnNlRmxvYXQodC5zbGljZShvLG4pKTtpZihhPHMpcmV0dXJuLTE7aWYoYT5zKXJldHVybiAxO2NvbnRpbnVlfWlmKFFHKGVbcl0pKXtpZighUUcodFtuXSkpcmV0dXJuLTF9ZWxzZXtpZihRRyh0W25dKSlyZXR1cm4gMTtpZihlW3JdPHRbbl0pcmV0dXJuLTE7aWYoZVtyXT50W25dKXJldHVybiAxfXIrKyxuKyt9fWZ1bmN0aW9uIENndChlLHQpe2xldCByOyhmdW5jdGlvbihpKXtpW2kuTkFUVVJBTD0wXT0iTkFUVVJBTCIsaVtpLlJFQUw9MV09IlJFQUwiLGlbaS5FWFBPTkVOVF9TSUdOPTJdPSJFWFBPTkVOVF9TSUdOIixpW2kuRVhQT05FTlQ9M109IkVYUE9ORU5UIn0pKHJ8fChyPXt9KSk7bGV0IG49ci5OQVRVUkFMO2Zvcig7dDxlLmxlbmd0aDt0KyspaWYobj09PXIuTkFUVVJBTCl7aWYoZVt0XT09PSIuIiluPXIuUkVBTDtlbHNlIGlmKGVbdF09PT0iZSJ8fGVbdF09PT0iRSIpbj1yLkVYUE9ORU5UX1NJR047ZWxzZSBpZighZ18oZVt0XSkpYnJlYWt9ZWxzZSBpZihuPT09ci5SRUFMKXtpZihlW3RdPT09ImUifHxlW3RdPT09IkUiKW49ci5FWFBPTkVOVF9TSUdOO2Vsc2UgaWYoIWdfKGVbdF0pKWJyZWFrfWVsc2UgaWYobj09PXIuRVhQT05FTlRfU0lHTilpZihnXyhlW3RdKXx8ZVt0XT09PSIrInx8ZVt0XT09PSItIiluPXIuRVhQT05FTlQ7ZWxzZSBicmVhaztlbHNlIGlmKG49PT1yLkVYUE9ORU5UJiYhZ18oZVt0XSkpYnJlYWs7cmV0dXJuIHR9ZnVuY3Rpb24gZ18oZSl7cmV0dXJuIjAiPD1lJiZlPD0iOSJ9ZnVuY3Rpb24gUUcoZSl7cmV0dXJuIGU9PT0iLyJ8fGU9PT0iXyJ8fGdfKGUpfXZhciBPeGU9W107ZnVuY3Rpb24genhlKGUpe3JldHVybiBBbS5rZXlzKGUpLnNvcnQoYmgpfWZ1bmN0aW9uICRpKGUpe3JldHVybiBBbS51bmlvbi5hcHBseShudWxsLEFtLnZhbHVlcyhlKSkuc29ydChiaCl9ZnVuY3Rpb24gRnhlKGUsdCl7bGV0IHI9W107cmV0dXJuIHQuZm9yRWFjaChuPT5yPXIuY29uY2F0KGVbbl0pKSxBbS51bmlxKHIpLnNvcnQoYmgpfXZhciBQZ3Q9IlgtVGVuc29yQm9hcmQtRmVhdHVyZS1GbGFncyIsSWd0PSJ0ZW5zb3JCb2FyZEZlYXR1cmVGbGFncyI7dmFyIHRXPXt9O1pzKHRXLHtnZXRGZWF0dXJlRmxhZ3M6KCk9Pkh4ZSxnZXRGZWF0dXJlRmxhZ3NUb1NlbmRUb1NlcnZlcjooKT0+Y0UsaW5pdGlhbGl6ZUZlYXR1cmVGbGFnczooKT0+TGd0LHNldEZlYXR1cmVGbGFnczooKT0+QnhlfSk7dmFyIHM5LGw5O0xndCgpO2Z1bmN0aW9uIExndCgpe3M5PW51bGwsbDk9bnVsbH1mdW5jdGlvbiBCeGUoZSx0KXtzOT1lLGw5PXR9ZnVuY3Rpb24gSHhlKCl7aWYoczk9PT1udWxsKXRocm93IEVycm9yKCJGZWF0dXJlRmxhZ3MgaGF2ZSBub3QgeWV0IGJlZW4gZGV0ZXJtaW5lZCBieSBUZW5zb3JCb2FyZC4iKTtyZXR1cm4gczl9ZnVuY3Rpb24gY0UoKXtpZihsOT09PW51bGwpdGhyb3cgRXJyb3IoIkZlYXR1cmVGbGFncyBoYXZlIG5vdCB5ZXQgYmVlbiBkZXRlcm1pbmVkIGJ5IFRlbnNvckJvYXJkLiIpO3JldHVybiBsOX12YXIgYzk9Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5uYW1lPSJSZXF1ZXN0Q2FuY2VsbGF0aW9uRXJyb3IifX0sVng9Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLm5hbWU9IkludmFsaWRSZXF1ZXN0T3B0aW9uc0Vycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxWeC5wcm90b3R5cGUpfX0sdUU9Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0LHIpe3N1cGVyKCksdGhpcy5tZXNzYWdlPWBSZXF1ZXN0TmV0d29ya0Vycm9yOiAke3Quc3RhdHVzfSBhdCAke3J9YCx0aGlzLm5hbWU9IlJlcXVlc3ROZXR3b3JrRXJyb3IiLHRoaXMucmVxPXQsdGhpcy51cmw9cn19LFBtOyhmdW5jdGlvbihlKXtlLkdFVD0iR0VUIixlLlBPU1Q9IlBPU1QifSkoUG18fChQbT17fSkpO3ZhciBVeD1jbGFzc3t2YWxpZGF0ZSgpe2lmKHRoaXMubWV0aG9kVHlwZT09PVBtLkdFVCYmdGhpcy5ib2R5KXRocm93IG5ldyBWeCgiYm9keSBtdXN0IGJlIG1pc3NpbmcgZm9yIGEgR0VUIHJlcXVlc3QuIil9fSxBZT1jbGFzc3tjb25zdHJ1Y3Rvcih0PTFlMyxyPTMpe3RoaXMuX3F1ZXVlPVtdLHRoaXMuX25BY3RpdmVSZXF1ZXN0cz0wLHRoaXMuX25TaW11bHRhbmVvdXNSZXF1ZXN0cz10LHRoaXMuX21heFJldHJpZXM9cn1yZXF1ZXN0KHQscil7bGV0IG49VXhlKHIpO3JldHVybiB0aGlzLnJlcXVlc3RXaXRoT3B0aW9ucyh0LG4pfXJlcXVlc3RXaXRoT3B0aW9ucyh0LHIpe3JldHVybiByLnZhbGlkYXRlKCksbmV3IFByb21pc2UoKGksbyk9PntsZXQgYT17cmVzb2x2ZTppLHJlamVjdDpvfTt0aGlzLl9xdWV1ZS5wdXNoKGEpLHRoaXMubGF1bmNoUmVxdWVzdHMoKX0pLnRoZW4oKCk9PnRoaXMucHJvbWlzZVdpdGhSZXRyaWVzKHQsdGhpcy5fbWF4UmV0cmllcyxyKSkudGhlbihpPT4odGhpcy5fbkFjdGl2ZVJlcXVlc3RzLS0sdGhpcy5sYXVuY2hSZXF1ZXN0cygpLGkpLGk9PihpLm5hbWU9PT0iUmVxdWVzdE5ldHdvcmtFcnJvciImJih0aGlzLl9uQWN0aXZlUmVxdWVzdHMtLSx0aGlzLmxhdW5jaFJlcXVlc3RzKCkpLFByb21pc2UucmVqZWN0KGkpKSl9ZmV0Y2godCxyKXtyZXR1cm4gbmV3IFByb21pc2UoKG4saSk9PntsZXQgbz17cmVzb2x2ZTpuLHJlamVjdDppfTt0aGlzLl9xdWV1ZS5wdXNoKG8pLHRoaXMubGF1bmNoUmVxdWVzdHMoKX0pLnRoZW4oKCk9PntsZXQgbj0xO3JldHVybiBuZXcgUHJvbWlzZShpPT57bGV0IG89KCk9PntmZXRjaCh0LHIpLnRoZW4oYT0+e2lmKCFhLm9rJiZ0aGlzLl9tYXhSZXRyaWVzPm4pe24rKyxvKCk7cmV0dXJufWkoYSksdGhpcy5fbkFjdGl2ZVJlcXVlc3RzLS0sdGhpcy5sYXVuY2hSZXF1ZXN0cygpfSl9O28oKX0pfSl9Y2xlYXJRdWV1ZSgpe3ZhciB0O2Zvcig7dGhpcy5fcXVldWUubGVuZ3RoPjA7KSh0PXRoaXMuX3F1ZXVlLnBvcCgpKT09bnVsbHx8dC5yZWplY3QobmV3IGM5KCJSZXF1ZXN0IGNhbmNlbGxlZCBieSBjbGVhclF1ZXVlIikpfWFjdGl2ZVJlcXVlc3RzKCl7cmV0dXJuIHRoaXMuX25BY3RpdmVSZXF1ZXN0c31vdXRzdGFuZGluZ1JlcXVlc3RzKCl7cmV0dXJuIHRoaXMuX25BY3RpdmVSZXF1ZXN0cyt0aGlzLl9xdWV1ZS5sZW5ndGh9bGF1bmNoUmVxdWVzdHMoKXtmb3IoO3RoaXMuX25BY3RpdmVSZXF1ZXN0czx0aGlzLl9uU2ltdWx0YW5lb3VzUmVxdWVzdHMmJnRoaXMuX3F1ZXVlLmxlbmd0aD4wOyl0aGlzLl9uQWN0aXZlUmVxdWVzdHMrKyx0aGlzLl9xdWV1ZS5wb3AoKS5yZXNvbHZlKHZvaWQgMCl9cHJvbWlzZVdpdGhSZXRyaWVzKHQscixuKXt2YXIgaT1hPT5hLG89YT0+cj4wP3RoaXMucHJvbWlzZVdpdGhSZXRyaWVzKHQsci0xLG4pOlByb21pc2UucmVqZWN0KGEpO3JldHVybiB0aGlzLl9wcm9taXNlRnJvbVVybCh0LG4pLnRoZW4oaSxvKX1fcHJvbWlzZUZyb21VcmwodCxyKXtyZXR1cm4gbmV3IFByb21pc2UoKG4saSk9PntsZXQgbz1WeGUoci5tZXRob2RUeXBlLHQsci53aXRoQ3JlZGVudGlhbHMsci5jb250ZW50VHlwZSk7by5zZXRSZXF1ZXN0SGVhZGVyKFBndCxKU09OLnN0cmluZ2lmeShjRSgpKSksby5vbmxvYWQ9ZnVuY3Rpb24oKXtvLnN0YXR1cz09PTIwMD9uKEpTT04ucGFyc2Uoby5yZXNwb25zZVRleHQpKTppKG5ldyB1RShvLHQpKX0sby5vbmVycm9yPWZ1bmN0aW9uKCl7aShuZXcgdUUobyx0KSl9LHIuYm9keT9vLnNlbmQoci5ib2R5KTpvLnNlbmQoKX0pfX07ZnVuY3Rpb24gVnhlKGUsdCxyLG4pe2xldCBpPW5ldyBYTUxIdHRwUmVxdWVzdDtyZXR1cm4gaS5vcGVuKGUsdCksciYmKGkud2l0aENyZWRlbnRpYWxzPXIpLG4mJmkuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIixuKSxpfWZ1bmN0aW9uIFV4ZShlKXtsZXQgdD1uZXcgVXg7cmV0dXJuIGU/KHQubWV0aG9kVHlwZT1QbS5QT1NULHQuYm9keT1xeGUoZSksdCk6KHQubWV0aG9kVHlwZT1QbS5HRVQsdCl9ZnVuY3Rpb24gcXhlKGUpe2xldCB0PW5ldyBGb3JtRGF0YTtmb3IobGV0W3Isbl1vZiBPYmplY3QuZW50cmllcyhlKSl7bGV0IGk9QXJyYXkuaXNBcnJheShuKT9uOltuXTtmb3IobGV0IG8gb2YgaSl0LmFwcGVuZChyLG8pfXJldHVybiB0fXZhciBrZ3Q9ImV4cGVyaW1lbnRhbFBsdWdpbiIsR3hlPW5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCksV3hlPVJndCgpO2Z1bmN0aW9uIFJndCgpe3JldHVybntlbnZpcm9ubWVudDooKT0+cXgoIi9lbnZpcm9ubWVudCIpLGV4cGVyaW1lbnRzOigpPT5xeCgiL2V4cGVyaW1lbnRzIikscGx1Z2luUm91dGU6KGUsdCxyKT0+cXgoYC9wbHVnaW4vJHtlfSR7dH1gLHIpLHBsdWdpblJvdXRlRm9yU3JjOihlLHQscj1uZXcgVVJMU2VhcmNoUGFyYW1zKT0+e2xldCBuPWNFKCk7cmV0dXJuIE9iamVjdC5rZXlzKG4pLmxlbmd0aD4wJiZyLmFwcGVuZChJZ3QsSlNPTi5zdHJpbmdpZnkobikpLHF4KGAvcGx1Z2luLyR7ZX0ke3R9YCxyKX0scGx1Z2luc0xpc3Rpbmc6KCk9PnF4KCIvcGx1Z2luc19saXN0aW5nIixOZ3Qoe1trZ3RdOkd4ZS5nZXRBbGwoa2d0KX0pKSxydW5zOigpPT5xeCgiL3J1bnMiKX19ZnVuY3Rpb24gX2UoKXtyZXR1cm4gV3hlfWZ1bmN0aW9uIHF4KGUsdD1uZXcgVVJMU2VhcmNoUGFyYW1zKXtsZXQgcj0iZGF0YSIrZTtyZXR1cm4gU3RyaW5nKHQpJiYocis9KGUuaW5jbHVkZXMoIj8iKT8iJiI6Ij8iKStTdHJpbmcodCkpLHJ9ZnVuY3Rpb24gTmd0KGU9e30pe2xldCB0PU9iamVjdC5rZXlzKGUpLnNvcnQoKS5maWx0ZXIobj0+ZVtuXSkscj1uZXcgVVJMU2VhcmNoUGFyYW1zO3JldHVybiB0LmZvckVhY2gobj0+e2xldCBpPWVbbl07KEFycmF5LmlzQXJyYXkoaSk/aTpbaV0pLmZvckVhY2goYT0+ci5hcHBlbmQobixhKSl9KSxyfXZhciB1OT1FZShPZSgpLDEpO3ZhciBEYTsoZnVuY3Rpb24oZSl7ZVtlLlNFQVJDSF9SRVNVTFRTPTBdPSJTRUFSQ0hfUkVTVUxUUyIsZVtlLlBSRUZJWF9HUk9VUD0xXT0iUFJFRklYX0dST1VQIn0pKERhfHwoRGE9e30pKTtmdW5jdGlvbiBZeGUoZSx0KXtsZXQgcj0oKCk9Pnt0cnl7cmV0dXJuIG5ldyBSZWdFeHAodCl9Y2F0Y2gobil7cmV0dXJuIG51bGx9fSkoKTtyZXR1cm57bmFtZTp0LG1ldGFkYXRhOnt0eXBlOkRhLlNFQVJDSF9SRVNVTFRTLHZhbGlkUmVnZXg6ISFyLHVuaXZlcnNhbFJlZ2V4OnQ9PT0iLioifSxpdGVtczpyP2UuZmlsdGVyKG49Pm4ubWF0Y2gocikpOltdfX1mdW5jdGlvbiBqeGUoZSx0PSIvIil7bGV0IHI9W10sbj17fTtyZXR1cm4gZS5mb3JFYWNoKGk9PntsZXQgbz1pLmluZGV4T2YodCksYT1vPj0wP2kuc2xpY2UoMCxvKTppO2lmKCFuW2FdKXtsZXQgcz17bmFtZTphLG1ldGFkYXRhOnt0eXBlOkRhLlBSRUZJWF9HUk9VUH0saXRlbXM6W119O25bYV09cyxyLnB1c2gocyl9blthXS5pdGVtcy5wdXNoKGkpfSkscn1mdW5jdGlvbiBYeGUoZSx0PSIiKXtsZXQgcj1bWXhlKGUsdCldLG49anhlKGUpO3JldHVybiBBcnJheSgpLmNvbmNhdChyLG4pfWZ1bmN0aW9uIGhFKGUsdCxyKXtsZXQgbj0kaShlKSxpPVh4ZShuLHIpLG89JHhlKHU5LnBpY2soZSx0KSk7cmV0dXJuIGkubWFwKCh7bmFtZTphLG1ldGFkYXRhOnMsaXRlbXM6bH0pPT4oe25hbWU6YSxtZXRhZGF0YTpzLGl0ZW1zOmwubWFwKGM9Pih7dGFnOmMscnVuczooby5nZXQoYyl8fFtdKS5zbGljZSgpfSkpfSkpfWZ1bmN0aW9uICR4ZShlKXtsZXQgdD1uZXcgTWFwO3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKHI9PntlW3JdLmZvckVhY2gobj0+e2xldCBpPXQuZ2V0KG4pfHxbXTtpLnB1c2gociksdC5zZXQobixpKX0pfSksdH1mdW5jdGlvbiBLeGUoZSx0KXtsZXQgcj1iaChlLnRhZyx0LnRhZyk7cmV0dXJuIHIhPTA/cjpiaChlLnJ1bix0LnJ1bil9ZnVuY3Rpb24gUWwoZSx0LHIpe2xldCBuPWhFKGUsdCxyKTtmdW5jdGlvbiBpKG8pe2xldCBhPXU5LmZsYXR0ZW4oby5pdGVtcy5tYXAoKHt0YWc6cyxydW5zOmx9KT0+bC5tYXAoYz0+KHt0YWc6cyxydW46Y30pKSkpO3JldHVybiBhLnNvcnQoS3hlKSx7bmFtZTpvLm5hbWUsbWV0YWRhdGE6by5tZXRhZGF0YSxpdGVtczphfX1yZXR1cm4gbi5tYXAoaSl9dmFyIGNXPXt9O1pzKGNXLHtJcm9uUmVzaXphYmxlQmVoYXZpb3I6KCk9PlFzfSk7dmFyIFp4ZT17YXR0YWNoZWQ6ITAsZGV0YWNoZWQ6ITAscmVhZHk6ITAsY3JlYXRlZDohMCxiZWZvcmVSZWdpc3RlcjohMCxyZWdpc3RlcmVkOiEwLGF0dHJpYnV0ZUNoYW5nZWQ6ITAsbGlzdGVuZXJzOiEwLGhvc3RBdHRyaWJ1dGVzOiEwfSxGZ3Q9e2F0dGFjaGVkOiEwLGRldGFjaGVkOiEwLHJlYWR5OiEwLGNyZWF0ZWQ6ITAsYmVmb3JlUmVnaXN0ZXI6ITAscmVnaXN0ZXJlZDohMCxhdHRyaWJ1dGVDaGFuZ2VkOiEwLGJlaGF2aW9yczohMCxfbm9BY2Nlc3NvcnM6ITB9LEp4ZT1PYmplY3QuYXNzaWduKHtsaXN0ZW5lcnM6ITAsaG9zdEF0dHJpYnV0ZXM6ITAscHJvcGVydGllczohMCxvYnNlcnZlcnM6ITB9LEZndCk7ZnVuY3Rpb24gUXhlKGUsdCxyKXtsZXQgbj1lLl9ub0FjY2Vzc29ycyxpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKXtsZXQgYT1pW29dO2lmKCEoYSBpbiByKSlpZihuKXRbYV09ZVthXTtlbHNle2xldCBzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxhKTtzJiYocy5jb25maWd1cmFibGU9ITAsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsYSxzKSl9fX1mdW5jdGlvbiBCZ3QoZSx0KXtyZXR1cm4gVWd0KHt9LEd0KHQpLGUpfWZ1bmN0aW9uIHRiZShlLHQscil7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspSGd0KGUsdFtuXSxyLEp4ZSl9ZnVuY3Rpb24gSGd0KGUsdCxyLG4pe1F4ZSh0LGUsbik7Zm9yKGxldCBpIGluIFp4ZSl0W2ldJiYocltpXT1yW2ldfHxbXSxyW2ldLnB1c2godFtpXSkpfWZ1bmN0aW9uIFZndChlLHQscil7dD10fHxbXTtmb3IobGV0IG49ZS5sZW5ndGgtMTtuPj0wO24tLSl7bGV0IGk9ZVtuXTtpP0FycmF5LmlzQXJyYXkoaSk/Vmd0KGksdCk6dC5pbmRleE9mKGkpPDAmJighcnx8ci5pbmRleE9mKGkpPDApJiZ0LnVuc2hpZnQoaSk6Y29uc29sZS53YXJuKCJiZWhhdmlvciBpcyBudWxsLCBjaGVjayBmb3IgbWlzc2luZyBvciA0MDQgaW1wb3J0Iil9cmV0dXJuIHR9ZnVuY3Rpb24gT2d0KGUsdCl7Zm9yKGxldCByIGluIHQpe2xldCBuPWVbcl0saT10W3JdOyEoInZhbHVlImluIGkpJiZuJiYidmFsdWUiaW4gbj9lW3JdPU9iamVjdC5hc3NpZ24oe3ZhbHVlOm4udmFsdWV9LGkpOmVbcl09aX19dmFyIHpndD1HdChIVE1MRWxlbWVudCk7ZnVuY3Rpb24gVWd0KGUsdCxyKXtsZXQgbixpPXt9O2NsYXNzIG8gZXh0ZW5kcyB0e3N0YXRpYyBfZmluYWxpemVDbGFzcygpe2lmKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoImdlbmVyYXRlZEZyb20iLHRoaXMpKSl0Ll9maW5hbGl6ZUNsYXNzLmNhbGwodGhpcyk7ZWxzZXtpZihuKWZvcihsZXQgbD0wLGM7bDxuLmxlbmd0aDtsKyspYz1uW2xdLGMucHJvcGVydGllcyYmdGhpcy5jcmVhdGVQcm9wZXJ0aWVzKGMucHJvcGVydGllcyksYy5vYnNlcnZlcnMmJnRoaXMuY3JlYXRlT2JzZXJ2ZXJzKGMub2JzZXJ2ZXJzLGMucHJvcGVydGllcyk7ZS5wcm9wZXJ0aWVzJiZ0aGlzLmNyZWF0ZVByb3BlcnRpZXMoZS5wcm9wZXJ0aWVzKSxlLm9ic2VydmVycyYmdGhpcy5jcmVhdGVPYnNlcnZlcnMoZS5vYnNlcnZlcnMsZS5wcm9wZXJ0aWVzKSx0aGlzLl9wcmVwYXJlVGVtcGxhdGUoKX19c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7bGV0IGw9e307aWYobilmb3IobGV0IGM9MDtjPG4ubGVuZ3RoO2MrKylPZ3QobCxuW2NdLnByb3BlcnRpZXMpO3JldHVybiBPZ3QobCxlLnByb3BlcnRpZXMpLGx9c3RhdGljIGdldCBvYnNlcnZlcnMoKXtsZXQgbD1bXTtpZihuKWZvcihsZXQgYz0wLHU7YzxuLmxlbmd0aDtjKyspdT1uW2NdLHUub2JzZXJ2ZXJzJiYobD1sLmNvbmNhdCh1Lm9ic2VydmVycykpO3JldHVybiBlLm9ic2VydmVycyYmKGw9bC5jb25jYXQoZS5vYnNlcnZlcnMpKSxsfWNyZWF0ZWQoKXtzdXBlci5jcmVhdGVkKCk7bGV0IGw9aS5jcmVhdGVkO2lmKGwpZm9yKGxldCBjPTA7YzxsLmxlbmd0aDtjKyspbFtjXS5jYWxsKHRoaXMpfV9yZWdpc3RlcmVkKCl7bGV0IGw9by5wcm90b3R5cGU7aWYoIWwuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19oYXNSZWdpc3RlckZpbmlzaGVkIixsKSkpe2wuX19oYXNSZWdpc3RlckZpbmlzaGVkPSEwLHN1cGVyLl9yZWdpc3RlcmVkKCksZHAmJmEobCk7bGV0IGM9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLHU9aS5iZWZvcmVSZWdpc3RlcjtpZih1KWZvcihsZXQgaD0wO2g8dS5sZW5ndGg7aCsrKXVbaF0uY2FsbChjKTtpZih1PWkucmVnaXN0ZXJlZCx1KWZvcihsZXQgaD0wO2g8dS5sZW5ndGg7aCsrKXVbaF0uY2FsbChjKX19X2FwcGx5TGlzdGVuZXJzKCl7c3VwZXIuX2FwcGx5TGlzdGVuZXJzKCk7bGV0IGw9aS5saXN0ZW5lcnM7aWYobClmb3IobGV0IGM9MDtjPGwubGVuZ3RoO2MrKyl7bGV0IHU9bFtjXTtpZih1KWZvcihsZXQgaCBpbiB1KXRoaXMuX2FkZE1ldGhvZEV2ZW50TGlzdGVuZXJUb05vZGUodGhpcyxoLHVbaF0pfX1fZW5zdXJlQXR0cmlidXRlcygpe2xldCBsPWkuaG9zdEF0dHJpYnV0ZXM7aWYobClmb3IobGV0IGM9bC5sZW5ndGgtMTtjPj0wO2MtLSl7bGV0IHU9bFtjXTtmb3IobGV0IGggaW4gdSl0aGlzLl9lbnN1cmVBdHRyaWJ1dGUoaCx1W2hdKX1zdXBlci5fZW5zdXJlQXR0cmlidXRlcygpfXJlYWR5KCl7c3VwZXIucmVhZHkoKTtsZXQgbD1pLnJlYWR5O2lmKGwpZm9yKGxldCBjPTA7YzxsLmxlbmd0aDtjKyspbFtjXS5jYWxsKHRoaXMpfWF0dGFjaGVkKCl7c3VwZXIuYXR0YWNoZWQoKTtsZXQgbD1pLmF0dGFjaGVkO2lmKGwpZm9yKGxldCBjPTA7YzxsLmxlbmd0aDtjKyspbFtjXS5jYWxsKHRoaXMpfWRldGFjaGVkKCl7c3VwZXIuZGV0YWNoZWQoKTtsZXQgbD1pLmRldGFjaGVkO2lmKGwpZm9yKGxldCBjPTA7YzxsLmxlbmd0aDtjKyspbFtjXS5jYWxsKHRoaXMpfWF0dHJpYnV0ZUNoYW5nZWQobCxjLHUpe3N1cGVyLmF0dHJpYnV0ZUNoYW5nZWQoKTtsZXQgaD1pLmF0dHJpYnV0ZUNoYW5nZWQ7aWYoaClmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKyloW2ZdLmNhbGwodGhpcyxsLGMsdSl9fWlmKHIpe0FycmF5LmlzQXJyYXkocil8fChyPVtyXSk7bGV0IHM9dC5wcm90b3R5cGUuYmVoYXZpb3JzO249Vmd0KHIsbnVsbCxzKSxvLnByb3RvdHlwZS5iZWhhdmlvcnM9cz9zLmNvbmNhdChyKTpufWxldCBhPXM9PntuJiZ0YmUocyxuLGkpLEhndChzLGUsaSxGZ3QpfTtyZXR1cm4gZHB8fGEoby5wcm90b3R5cGUpLG8uZ2VuZXJhdGVkRnJvbT1lLG99dmFyIGg5PWZ1bmN0aW9uKGUsdCl7ZXx8Y29uc29sZS53YXJuKCJQb2x5bWVyLkNsYXNzIHJlcXVpcmVzIGBpbmZvYCBhcmd1bWVudCIpO2xldCByPXQ/dCh6Z3QpOnpndDtyZXR1cm4gcj1VZ3QoZSxyLGUuYmVoYXZpb3JzKSxyLmlzPXIucHJvdG90eXBlLmlzPWUuaXMscn07dmFyIFl0PWZ1bmN0aW9uKGUpe2xldCB0O3JldHVybiB0eXBlb2YgZT09ImZ1bmN0aW9uIj90PWU6dD1ZdC5DbGFzcyhlKSxlLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcyYmKHQucHJvdG90eXBlLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcz1lLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcyksY3VzdG9tRWxlbWVudHMuZGVmaW5lKHQuaXMsdCksdH07WXQuQ2xhc3M9aDk7ZnVuY3Rpb24gZVcoZSx0LHIsbixpKXtsZXQgbztpJiYobz10eXBlb2Ygcj09Im9iamVjdCImJnIhPT1udWxsLG8mJihuPWUuX19kYXRhVGVtcFt0XSkpO2xldCBhPW4hPT1yJiYobj09PW58fHI9PT1yKTtyZXR1cm4gbyYmYSYmKGUuX19kYXRhVGVtcFt0XT1yKSxhfXZhciBHeD1ObihlPT57Y2xhc3MgdCBleHRlbmRzIGV7X3Nob3VsZFByb3BlcnR5Q2hhbmdlKG4saSxvKXtyZXR1cm4gZVcodGhpcyxuLGksbywhMCl9fXJldHVybiB0fSksZjk9Tm4oZT0+e2NsYXNzIHQgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnttdXRhYmxlRGF0YTpCb29sZWFufX1fc2hvdWxkUHJvcGVydHlDaGFuZ2UobixpLG8pe3JldHVybiBlVyh0aGlzLG4saSxvLHRoaXMubXV0YWJsZURhdGEpfX1yZXR1cm4gdH0pO0d4Ll9tdXRhYmxlUHJvcGVydHlDaGFuZ2U9ZVc7dmFyIHJXPW51bGw7ZnVuY3Rpb24gblcoKXtyZXR1cm4gcld9blcucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSFRNTFRlbXBsYXRlRWxlbWVudC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpuVyx3cml0YWJsZTohMH19KTt2YXIgR2d0PWhfKG5XKSxlYmU9R3goR2d0KTtmdW5jdGlvbiByYmUoZSx0KXtyVz1lLE9iamVjdC5zZXRQcm90b3R5cGVPZihlLHQucHJvdG90eXBlKSxuZXcgdCxyVz1udWxsfXZhciBuYmU9aF8oY2xhc3N7fSk7ZnVuY3Rpb24gaVcoZSx0KXtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyl7bGV0IG49dFtyXTtpZihCb29sZWFuKGUpIT1Cb29sZWFuKG4uX19oaWRlVGVtcGxhdGVDaGlsZHJlbl9fKSlpZihuLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREUpZT8obi5fX3BvbHltZXJUZXh0Q29udGVudF9fPW4udGV4dENvbnRlbnQsbi50ZXh0Q29udGVudD0iIik6bi50ZXh0Q29udGVudD1uLl9fcG9seW1lclRleHRDb250ZW50X187ZWxzZSBpZihuLmxvY2FsTmFtZT09PSJzbG90IilpZihlKW4uX19wb2x5bWVyUmVwbGFjZWRfXz1kb2N1bWVudC5jcmVhdGVDb21tZW50KCJoaWRkZW4tc2xvdCIpLHVlKHVlKG4pLnBhcmVudE5vZGUpLnJlcGxhY2VDaGlsZChuLl9fcG9seW1lclJlcGxhY2VkX18sbik7ZWxzZXtsZXQgaT1uLl9fcG9seW1lclJlcGxhY2VkX187aSYmdWUodWUoaSkucGFyZW50Tm9kZSkucmVwbGFjZUNoaWxkKG4saSl9ZWxzZSBuLnN0eWxlJiYoZT8obi5fX3BvbHltZXJEaXNwbGF5X189bi5zdHlsZS5kaXNwbGF5LG4uc3R5bGUuZGlzcGxheT0ibm9uZSIpOm4uc3R5bGUuZGlzcGxheT1uLl9fcG9seW1lckRpc3BsYXlfXyk7bi5fX2hpZGVUZW1wbGF0ZUNoaWxkcmVuX189ZSxuLl9zaG93SGlkZUNoaWxkcmVuJiZuLl9zaG93SGlkZUNoaWxkcmVuKGUpfX12YXIgd2g9Y2xhc3MgZXh0ZW5kcyBuYmV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLl9jb25maWd1cmVQcm9wZXJ0aWVzKHQpLHRoaXMucm9vdD10aGlzLl9zdGFtcFRlbXBsYXRlKHRoaXMuX19kYXRhSG9zdCk7bGV0IHI9W107dGhpcy5jaGlsZHJlbj1yO2ZvcihsZXQgaT10aGlzLnJvb3QuZmlyc3RDaGlsZDtpO2k9aS5uZXh0U2libGluZylyLnB1c2goaSksaS5fX3RlbXBsYXRpemVJbnN0YW5jZT10aGlzO3RoaXMuX190ZW1wbGF0aXplT3duZXImJnRoaXMuX190ZW1wbGF0aXplT3duZXIuX19oaWRlVGVtcGxhdGVDaGlsZHJlbl9fJiZ0aGlzLl9zaG93SGlkZUNoaWxkcmVuKCEwKTtsZXQgbj10aGlzLl9fdGVtcGxhdGl6ZU9wdGlvbnM7KHQmJm4uaW5zdGFuY2VQcm9wc3x8IW4uaW5zdGFuY2VQcm9wcykmJnRoaXMuX2VuYWJsZVByb3BlcnRpZXMoKX1fY29uZmlndXJlUHJvcGVydGllcyh0KXtpZih0aGlzLl9fdGVtcGxhdGl6ZU9wdGlvbnMuZm9yd2FyZEhvc3RQcm9wKWZvcihsZXQgbiBpbiB0aGlzLl9faG9zdFByb3BzKXRoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eShuLHRoaXMuX19kYXRhSG9zdFsiX2hvc3RfIituXSk7Zm9yKGxldCBuIGluIHQpdGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KG4sdFtuXSl9Zm9yd2FyZEhvc3RQcm9wKHQscil7dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5T3JQYXRoKHQsciwhMSwhMCkmJnRoaXMuX19kYXRhSG9zdC5fZW5xdWV1ZUNsaWVudCh0aGlzKX1fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZSh0LHIsbil7aWYodGhpcy5fbWV0aG9kSG9zdCYmdGhpcy5fX3RlbXBsYXRpemVPcHRpb25zLnBhcmVudE1vZGVsKXRoaXMuX21ldGhvZEhvc3QuX2FkZEV2ZW50TGlzdGVuZXJUb05vZGUodCxyLGk9PntpLm1vZGVsPXRoaXMsbihpKX0pO2Vsc2V7bGV0IGk9dGhpcy5fX2RhdGFIb3N0Ll9fZGF0YUhvc3Q7aSYmaS5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZSh0LHIsbil9fV9zaG93SGlkZUNoaWxkcmVuKHQpe2lXKHQsdGhpcy5jaGlsZHJlbil9X3NldFVubWFuYWdlZFByb3BlcnR5VG9Ob2RlKHQscixuKXt0Ll9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fXyYmdC5ub2RlVHlwZT09Tm9kZS5URVhUX05PREUmJnI9PSJ0ZXh0Q29udGVudCI/dC5fX3BvbHltZXJUZXh0Q29udGVudF9fPW46c3VwZXIuX3NldFVubWFuYWdlZFByb3BlcnR5VG9Ob2RlKHQscixuKX1nZXQgcGFyZW50TW9kZWwoKXtsZXQgdD10aGlzLl9fcGFyZW50TW9kZWw7aWYoIXQpe2xldCByO3Q9dGhpcztkbyB0PXQuX19kYXRhSG9zdC5fX2RhdGFIb3N0O3doaWxlKChyPXQuX190ZW1wbGF0aXplT3B0aW9ucykmJiFyLnBhcmVudE1vZGVsKTt0aGlzLl9fcGFyZW50TW9kZWw9dH1yZXR1cm4gdH1kaXNwYXRjaEV2ZW50KHQpe3JldHVybiEwfX07d2gucHJvdG90eXBlLl9fZGF0YUhvc3Q7d2gucHJvdG90eXBlLl9fdGVtcGxhdGl6ZU9wdGlvbnM7d2gucHJvdG90eXBlLl9tZXRob2RIb3N0O3doLnByb3RvdHlwZS5fX3RlbXBsYXRpemVPd25lcjt3aC5wcm90b3R5cGUuX19ob3N0UHJvcHM7dmFyIGliZT1HeCh3aCk7ZnVuY3Rpb24gcWd0KGUpe2xldCB0PWUuX19kYXRhSG9zdDtyZXR1cm4gdCYmdC5fbWV0aG9kSG9zdHx8dH1mdW5jdGlvbiBvYmUoZSx0LHIpe2xldCBuPXIubXV0YWJsZURhdGE/aWJlOndoO3RjLm1peGluJiYobj10Yy5taXhpbihuKSk7bGV0IGk9Y2xhc3MgZXh0ZW5kcyBue307cmV0dXJuIGkucHJvdG90eXBlLl9fdGVtcGxhdGl6ZU9wdGlvbnM9cixpLnByb3RvdHlwZS5fYmluZFRlbXBsYXRlKGUpLGxiZShpLGUsdCxyKSxpfWZ1bmN0aW9uIGFiZShlLHQscixuKXtsZXQgaT1yLmZvcndhcmRIb3N0UHJvcDtpZihpJiZ0Lmhhc0hvc3RQcm9wcyl7bGV0IG89ZS5sb2NhbE5hbWU9PSJ0ZW1wbGF0ZSIsYT10LnRlbXBsYXRpemVUZW1wbGF0ZUNsYXNzO2lmKCFhKXtpZihvKXtsZXQgbD1yLm11dGFibGVEYXRhP2ViZTpHZ3Q7Y2xhc3MgYyBleHRlbmRzIGx7fWE9dC50ZW1wbGF0aXplVGVtcGxhdGVDbGFzcz1jfWVsc2V7bGV0IGw9ZS5jb25zdHJ1Y3RvcjtjbGFzcyBjIGV4dGVuZHMgbHt9YT10LnRlbXBsYXRpemVUZW1wbGF0ZUNsYXNzPWN9bGV0IHM9dC5ob3N0UHJvcHM7Zm9yKGxldCBsIGluIHMpYS5wcm90b3R5cGUuX2FkZFByb3BlcnR5RWZmZWN0KCJfaG9zdF8iK2wsYS5wcm90b3R5cGUuUFJPUEVSVFlfRUZGRUNUX1RZUEVTLlBST1BBR0FURSx7Zm46c2JlKGwsaSl9KSxhLnByb3RvdHlwZS5fY3JlYXRlTm90aWZ5aW5nUHJvcGVydHkoIl9ob3N0XyIrbCk7TEkmJm4mJmhiZSh0LHIsbil9aWYoZS5fX2RhdGFQcm90byYmT2JqZWN0LmFzc2lnbihlLl9fZGF0YSxlLl9fZGF0YVByb3RvKSxvKXJiZShlLGEpLGUuX19kYXRhVGVtcD17fSxlLl9fZGF0YVBlbmRpbmc9bnVsbCxlLl9fZGF0YU9sZD1udWxsLGUuX2VuYWJsZVByb3BlcnRpZXMoKTtlbHNle09iamVjdC5zZXRQcm90b3R5cGVPZihlLGEucHJvdG90eXBlKTtsZXQgcz10Lmhvc3RQcm9wcztmb3IobGV0IGwgaW4gcylpZihsPSJfaG9zdF8iK2wsbCBpbiBlKXtsZXQgYz1lW2xdO2RlbGV0ZSBlW2xdLGUuX19kYXRhW2xdPWN9fX19ZnVuY3Rpb24gc2JlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4saSxvKXt0LmNhbGwobi5fX3RlbXBsYXRpemVPd25lcixpLnN1YnN0cmluZyg2KSxvW2ldKX19ZnVuY3Rpb24gbGJlKGUsdCxyLG4pe2xldCBpPXIuaG9zdFByb3BzfHx7fTtmb3IobGV0IG8gaW4gbi5pbnN0YW5jZVByb3BzKXtkZWxldGUgaVtvXTtsZXQgYT1uLm5vdGlmeUluc3RhbmNlUHJvcDthJiZlLnByb3RvdHlwZS5fYWRkUHJvcGVydHlFZmZlY3QobyxlLnByb3RvdHlwZS5QUk9QRVJUWV9FRkZFQ1RfVFlQRVMuTk9USUZZLHtmbjpjYmUobyxhKX0pfWlmKG4uZm9yd2FyZEhvc3RQcm9wJiZ0Ll9fZGF0YUhvc3QpZm9yKGxldCBvIGluIGkpci5oYXNIb3N0UHJvcHN8fChyLmhhc0hvc3RQcm9wcz0hMCksZS5wcm90b3R5cGUuX2FkZFByb3BlcnR5RWZmZWN0KG8sZS5wcm90b3R5cGUuUFJPUEVSVFlfRUZGRUNUX1RZUEVTLk5PVElGWSx7Zm46dWJlKCl9KX1mdW5jdGlvbiBjYmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24obixpLG8pe3QuY2FsbChuLl9fdGVtcGxhdGl6ZU93bmVyLG4saSxvW2ldKX19ZnVuY3Rpb24gdWJlKCl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXt0Ll9fZGF0YUhvc3QuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aCgiX2hvc3RfIityLG5bcl0sITAsITApfX1mdW5jdGlvbiB0YyhlLHQscil7aWYoaXUmJiFxZ3QoZSkpdGhyb3cgbmV3IEVycm9yKCJzdHJpY3RUZW1wbGF0ZVBvbGljeTogdGVtcGxhdGUgb3duZXIgbm90IHRydXN0ZWQiKTtpZihyPXJ8fHt9LGUuX190ZW1wbGF0aXplT3duZXIpdGhyb3cgbmV3IEVycm9yKCJBIDx0ZW1wbGF0ZT4gY2FuIG9ubHkgYmUgdGVtcGxhdGl6ZWQgb25jZSIpO2UuX190ZW1wbGF0aXplT3duZXI9dDtsZXQgaT0odD90LmNvbnN0cnVjdG9yOndoKS5fcGFyc2VUZW1wbGF0ZShlKSxvPWkudGVtcGxhdGl6ZUluc3RhbmNlQ2xhc3M7b3x8KG89b2JlKGUsaSxyKSxpLnRlbXBsYXRpemVJbnN0YW5jZUNsYXNzPW8pO2xldCBhPXFndChlKTthYmUoZSxpLHIsYSk7bGV0IHM9Y2xhc3MgZXh0ZW5kcyBve307cmV0dXJuIHMucHJvdG90eXBlLl9tZXRob2RIb3N0PWEscy5wcm90b3R5cGUuX19kYXRhSG9zdD1lLHMucHJvdG90eXBlLl9fdGVtcGxhdGl6ZU93bmVyPXQscy5wcm90b3R5cGUuX19ob3N0UHJvcHM9aS5ob3N0UHJvcHMscz1zLHN9ZnVuY3Rpb24gaGJlKGUsdCxyKXtsZXQgbj1yLmNvbnN0cnVjdG9yLl9wcm9wZXJ0aWVzLHtwcm9wZXJ0eUVmZmVjdHM6aX09ZSx7aW5zdGFuY2VQcm9wczpvfT10O2ZvcihsZXQgYSBpbiBpKWlmKCFuW2FdJiYhKG8mJm9bYV0pKXtsZXQgcz1pW2FdO2ZvcihsZXQgbD0wO2w8cy5sZW5ndGg7bCsrKXtsZXR7cGFydDpjfT1zW2xdLmluZm87aWYoIShjLnNpZ25hdHVyZSYmYy5zaWduYXR1cmUuc3RhdGljKSl7Y29uc29sZS53YXJuKGBQcm9wZXJ0eSAnJHthfScgdXNlZCBpbiB0ZW1wbGF0ZSBidXQgbm90IGRlY2xhcmVkIGluICdwcm9wZXJ0aWVzJzsgYXR0cmlidXRlIHdpbGwgbm90IGJlIG9ic2VydmVkLmApO2JyZWFrfX19fWZ1bmN0aW9uIHA5KGUsdCl7bGV0IHI7Zm9yKDt0OylpZihyPXQuX19kYXRhSG9zdD90OnQuX190ZW1wbGF0aXplSW5zdGFuY2UpaWYoci5fX2RhdGFIb3N0IT1lKXQ9ci5fX2RhdGFIb3N0O2Vsc2UgcmV0dXJuIHI7ZWxzZSB0PXVlKHQpLnBhcmVudE5vZGU7cmV0dXJuIG51bGx9dmFyIFdndD17dGVtcGxhdGl6ZShlLHQpe3RoaXMuX3RlbXBsYXRpemVyVGVtcGxhdGU9ZSx0aGlzLmN0b3I9dGMoZSx0aGlzLHttdXRhYmxlRGF0YTpCb29sZWFuKHQpLHBhcmVudE1vZGVsOnRoaXMuX3BhcmVudE1vZGVsLGluc3RhbmNlUHJvcHM6dGhpcy5faW5zdGFuY2VQcm9wcyxmb3J3YXJkSG9zdFByb3A6dGhpcy5fZm9yd2FyZEhvc3RQcm9wVjIsbm90aWZ5SW5zdGFuY2VQcm9wOnRoaXMuX25vdGlmeUluc3RhbmNlUHJvcFYyfSl9LHN0YW1wKGUpe3JldHVybiBuZXcgdGhpcy5jdG9yKGUpfSxtb2RlbEZvckVsZW1lbnQoZSl7cmV0dXJuIHA5KHRoaXMuX3RlbXBsYXRpemVyVGVtcGxhdGUsZSl9fTt2YXIgWWd0PSExO2Z1bmN0aW9uIFd4KCl7aWYoZHAmJiF1Xyl7aWYoIVlndCl7WWd0PSEwO2xldCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7ZS50ZXh0Q29udGVudD0iZG9tLWJpbmQsZG9tLWlmLGRvbS1yZXBlYXR7ZGlzcGxheTpub25lO30iLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoZSl9cmV0dXJuITB9cmV0dXJuITF9dmFyIGZiZT12aChmOShoXyhIVE1MRWxlbWVudCkpKSxvVz1jbGFzcyBleHRlbmRzIGZiZXtzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpe3JldHVyblsibXV0YWJsZS1kYXRhIl19Y29uc3RydWN0b3IoKXtpZihzdXBlcigpLGl1KXRocm93IG5ldyBFcnJvcigic3RyaWN0VGVtcGxhdGVQb2xpY3k6IGRvbS1iaW5kIG5vdCBhbGxvd2VkIik7dGhpcy5yb290PW51bGwsdGhpcy4kPW51bGwsdGhpcy5fX2NoaWxkcmVuPW51bGx9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHQscixuLGkpe3RoaXMubXV0YWJsZURhdGE9ITB9Y29ubmVjdGVkQ2FsbGJhY2soKXtXeCgpfHwodGhpcy5zdHlsZS5kaXNwbGF5PSJub25lIiksdGhpcy5yZW5kZXIoKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3RoaXMuX19yZW1vdmVDaGlsZHJlbigpfV9faW5zZXJ0Q2hpbGRyZW4oKXt1ZSh1ZSh0aGlzKS5wYXJlbnROb2RlKS5pbnNlcnRCZWZvcmUodGhpcy5yb290LHRoaXMpfV9fcmVtb3ZlQ2hpbGRyZW4oKXtpZih0aGlzLl9fY2hpbGRyZW4pZm9yKGxldCB0PTA7dDx0aGlzLl9fY2hpbGRyZW4ubGVuZ3RoO3QrKyl0aGlzLnJvb3QuYXBwZW5kQ2hpbGQodGhpcy5fX2NoaWxkcmVuW3RdKX1yZW5kZXIoKXtsZXQgdDtpZighdGhpcy5fX2NoaWxkcmVuKXtpZih0PXR8fHRoaXMucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKSwhdCl7bGV0IHI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCk9PntpZih0PXRoaXMucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKSx0KXIuZGlzY29ubmVjdCgpLHRoaXMucmVuZGVyKCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoImRvbS1iaW5kIHJlcXVpcmVzIGEgPHRlbXBsYXRlPiBjaGlsZCIpfSk7ci5vYnNlcnZlKHRoaXMse2NoaWxkTGlzdDohMH0pO3JldHVybn10aGlzLnJvb3Q9dGhpcy5fc3RhbXBUZW1wbGF0ZSh0KSx0aGlzLiQ9dGhpcy5yb290LiQsdGhpcy5fX2NoaWxkcmVuPVtdO2ZvcihsZXQgcj10aGlzLnJvb3QuZmlyc3RDaGlsZDtyO3I9ci5uZXh0U2libGluZyl0aGlzLl9fY2hpbGRyZW5bdGhpcy5fX2NoaWxkcmVuLmxlbmd0aF09cjt0aGlzLl9lbmFibGVQcm9wZXJ0aWVzKCl9dGhpcy5fX2luc2VydENoaWxkcmVuKCksdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZG9tLWNoYW5nZSIse2J1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9fTtjdXN0b21FbGVtZW50cy5kZWZpbmUoImRvbS1iaW5kIixvVyk7dmFyIHBiZT1mOShtdCksZDk9Y2xhc3MgZXh0ZW5kcyBwYmV7c3RhdGljIGdldCBpcygpe3JldHVybiJkb20tcmVwZWF0In1zdGF0aWMgZ2V0IHRlbXBsYXRlKCl7cmV0dXJuIG51bGx9c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2l0ZW1zOnt0eXBlOkFycmF5fSxhczp7dHlwZTpTdHJpbmcsdmFsdWU6Iml0ZW0ifSxpbmRleEFzOnt0eXBlOlN0cmluZyx2YWx1ZToiaW5kZXgifSxpdGVtc0luZGV4QXM6e3R5cGU6U3RyaW5nLHZhbHVlOiJpdGVtc0luZGV4In0sc29ydDp7dHlwZTpGdW5jdGlvbixvYnNlcnZlcjoiX19zb3J0Q2hhbmdlZCJ9LGZpbHRlcjp7dHlwZTpGdW5jdGlvbixvYnNlcnZlcjoiX19maWx0ZXJDaGFuZ2VkIn0sb2JzZXJ2ZTp7dHlwZTpTdHJpbmcsb2JzZXJ2ZXI6Il9fb2JzZXJ2ZUNoYW5nZWQifSxkZWxheTpOdW1iZXIscmVuZGVyZWRJdGVtQ291bnQ6e3R5cGU6TnVtYmVyLG5vdGlmeTohVU0scmVhZE9ubHk6ITB9LGluaXRpYWxDb3VudDp7dHlwZTpOdW1iZXJ9LHRhcmdldEZyYW1lcmF0ZTp7dHlwZTpOdW1iZXIsdmFsdWU6MjB9LF90YXJnZXRGcmFtZVRpbWU6e3R5cGU6TnVtYmVyLGNvbXB1dGVkOiJfX2NvbXB1dGVGcmFtZVRpbWUodGFyZ2V0RnJhbWVyYXRlKSJ9LG5vdGlmeURvbUNoYW5nZTp7dHlwZTpCb29sZWFufSxyZXVzZUNodW5rZWRJbnN0YW5jZXM6e3R5cGU6Qm9vbGVhbn19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfX2l0ZW1zQ2hhbmdlZChpdGVtcy4qKSJdfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9faW5zdGFuY2VzPVtdLHRoaXMuX19yZW5kZXJEZWJvdW5jZXI9bnVsbCx0aGlzLl9faXRlbXNJZHhUb0luc3RJZHg9e30sdGhpcy5fX2NodW5rQ291bnQ9bnVsbCx0aGlzLl9fcmVuZGVyU3RhcnRUaW1lPW51bGwsdGhpcy5fX2l0ZW1zQXJyYXlDaGFuZ2VkPSExLHRoaXMuX19zaG91bGRNZWFzdXJlQ2h1bms9ITEsdGhpcy5fX3Nob3VsZENvbnRpbnVlQ2h1bmtpbmc9ITEsdGhpcy5fX2NodW5raW5nSWQ9MCx0aGlzLl9fc29ydEZuPW51bGwsdGhpcy5fX2ZpbHRlckZuPW51bGwsdGhpcy5fX29ic2VydmVQYXRocz1udWxsLHRoaXMuX19jdG9yPW51bGwsdGhpcy5fX2lzRGV0YWNoZWQ9ITAsdGhpcy50ZW1wbGF0ZT1udWxsLHRoaXMuX3RlbXBsYXRlSW5mb31kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fX2lzRGV0YWNoZWQ9ITA7Zm9yKGxldCB0PTA7dDx0aGlzLl9faW5zdGFuY2VzLmxlbmd0aDt0KyspdGhpcy5fX2RldGFjaEluc3RhbmNlKHQpfWNvbm5lY3RlZENhbGxiYWNrKCl7aWYoc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSxXeCgpfHwodGhpcy5zdHlsZS5kaXNwbGF5PSJub25lIiksdGhpcy5fX2lzRGV0YWNoZWQpe3RoaXMuX19pc0RldGFjaGVkPSExO2xldCB0PXVlKHVlKHRoaXMpLnBhcmVudE5vZGUpO2ZvcihsZXQgcj0wO3I8dGhpcy5fX2luc3RhbmNlcy5sZW5ndGg7cisrKXRoaXMuX19hdHRhY2hJbnN0YW5jZShyLHQpfX1fX2Vuc3VyZVRlbXBsYXRpemVkKCl7aWYoIXRoaXMuX19jdG9yKXtsZXQgdD10aGlzLHI9dGhpcy50ZW1wbGF0ZT10Ll90ZW1wbGF0ZUluZm8/dDp0aGlzLnF1ZXJ5U2VsZWN0b3IoInRlbXBsYXRlIik7aWYoIXIpe2xldCBpPW5ldyBNdXRhdGlvbk9ic2VydmVyKCgpPT57aWYodGhpcy5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpKWkuZGlzY29ubmVjdCgpLHRoaXMuX19yZW5kZXIoKTtlbHNlIHRocm93IG5ldyBFcnJvcigiZG9tLXJlcGVhdCByZXF1aXJlcyBhIDx0ZW1wbGF0ZT4gY2hpbGQiKX0pO3JldHVybiBpLm9ic2VydmUodGhpcyx7Y2hpbGRMaXN0OiEwfSksITF9bGV0IG49e307blt0aGlzLmFzXT0hMCxuW3RoaXMuaW5kZXhBc109ITAsblt0aGlzLml0ZW1zSW5kZXhBc109ITAsdGhpcy5fX2N0b3I9dGMocix0aGlzLHttdXRhYmxlRGF0YTp0aGlzLm11dGFibGVEYXRhLHBhcmVudE1vZGVsOiEwLGluc3RhbmNlUHJvcHM6bixmb3J3YXJkSG9zdFByb3A6ZnVuY3Rpb24oaSxvKXtsZXQgYT10aGlzLl9faW5zdGFuY2VzO2ZvcihsZXQgcz0wLGw7czxhLmxlbmd0aCYmKGw9YVtzXSk7cysrKWwuZm9yd2FyZEhvc3RQcm9wKGksbyl9LG5vdGlmeUluc3RhbmNlUHJvcDpmdW5jdGlvbihpLG8sYSl7aWYoT0kodGhpcy5hcyxvKSl7bGV0IHM9aVt0aGlzLml0ZW1zSW5kZXhBc107bz09dGhpcy5hcyYmKHRoaXMuaXRlbXNbc109YSk7bGV0IGw9bXAodGhpcy5hcyxgJHtKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJpdGVtcyIsdGhpcyl9LiR7c31gLG8pO3RoaXMubm90aWZ5UGF0aChsLGEpfX19KX1yZXR1cm4hMH1fX2dldE1ldGhvZEhvc3QoKXtyZXR1cm4gdGhpcy5fX2RhdGFIb3N0Ll9tZXRob2RIb3N0fHx0aGlzLl9fZGF0YUhvc3R9X19mdW5jdGlvbkZyb21Qcm9wZXJ0eVZhbHVlKHQpe2lmKHR5cGVvZiB0PT0ic3RyaW5nIil7bGV0IHI9dCxuPXRoaXMuX19nZXRNZXRob2RIb3N0KCk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5bcl0uYXBwbHkobixhcmd1bWVudHMpfX1yZXR1cm4gdH1fX3NvcnRDaGFuZ2VkKHQpe3RoaXMuX19zb3J0Rm49dGhpcy5fX2Z1bmN0aW9uRnJvbVByb3BlcnR5VmFsdWUodCksdGhpcy5pdGVtcyYmdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpfV9fZmlsdGVyQ2hhbmdlZCh0KXt0aGlzLl9fZmlsdGVyRm49dGhpcy5fX2Z1bmN0aW9uRnJvbVByb3BlcnR5VmFsdWUodCksdGhpcy5pdGVtcyYmdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpfV9fY29tcHV0ZUZyYW1lVGltZSh0KXtyZXR1cm4gTWF0aC5jZWlsKDFlMy90KX1fX29ic2VydmVDaGFuZ2VkKCl7dGhpcy5fX29ic2VydmVQYXRocz10aGlzLm9ic2VydmUmJnRoaXMub2JzZXJ2ZS5yZXBsYWNlKCIuKiIsIi4iKS5zcGxpdCgiICIpfV9faGFuZGxlT2JzZXJ2ZWRQYXRocyh0KXtpZih0aGlzLl9fc29ydEZufHx0aGlzLl9fZmlsdGVyRm4pe2lmKCF0KXRoaXMuX19kZWJvdW5jZVJlbmRlcih0aGlzLl9fcmVuZGVyLHRoaXMuZGVsYXkpO2Vsc2UgaWYodGhpcy5fX29ic2VydmVQYXRocyl7bGV0IHI9dGhpcy5fX29ic2VydmVQYXRocztmb3IobGV0IG49MDtuPHIubGVuZ3RoO24rKyl0LmluZGV4T2YocltuXSk9PT0wJiZ0aGlzLl9fZGVib3VuY2VSZW5kZXIodGhpcy5fX3JlbmRlcix0aGlzLmRlbGF5KX19fV9faXRlbXNDaGFuZ2VkKHQpe3RoaXMuaXRlbXMmJiFBcnJheS5pc0FycmF5KHRoaXMuaXRlbXMpJiZjb25zb2xlLndhcm4oImRvbS1yZXBlYXQgZXhwZWN0ZWQgYXJyYXkgZm9yIGBpdGVtc2AsIGZvdW5kIix0aGlzLml0ZW1zKSx0aGlzLl9faGFuZGxlSXRlbVBhdGgodC5wYXRoLHQudmFsdWUpfHwodC5wYXRoPT09Iml0ZW1zIiYmKHRoaXMuX19pdGVtc0FycmF5Q2hhbmdlZD0hMCksdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpKX1fX2RlYm91bmNlUmVuZGVyKHQscj0wKXt0aGlzLl9fcmVuZGVyRGVib3VuY2VyPXNyLmRlYm91bmNlKHRoaXMuX19yZW5kZXJEZWJvdW5jZXIscj4wP21vLmFmdGVyKHIpOmxpLHQuYmluZCh0aGlzKSksSmwodGhpcy5fX3JlbmRlckRlYm91bmNlcil9cmVuZGVyKCl7dGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpLGNpKCl9X19yZW5kZXIoKXtpZighdGhpcy5fX2Vuc3VyZVRlbXBsYXRpemVkKCkpcmV0dXJuO2xldCB0PXRoaXMuaXRlbXN8fFtdLHI9dGhpcy5fX3NvcnRBbmRGaWx0ZXJJdGVtcyh0KSxuPXRoaXMuX19jYWxjdWxhdGVMaW1pdChyLmxlbmd0aCk7dGhpcy5fX3VwZGF0ZUluc3RhbmNlcyh0LG4sciksdGhpcy5pbml0aWFsQ291bnQmJih0aGlzLl9fc2hvdWxkTWVhc3VyZUNodW5rfHx0aGlzLl9fc2hvdWxkQ29udGludWVDaHVua2luZykmJihjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9fY2h1bmtpbmdJZCksdGhpcy5fX2NodW5raW5nSWQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLl9fY29udGludWVDaHVua2luZygpKSksdGhpcy5fc2V0UmVuZGVyZWRJdGVtQ291bnQodGhpcy5fX2luc3RhbmNlcy5sZW5ndGgpLCghVU18fHRoaXMubm90aWZ5RG9tQ2hhbmdlKSYmdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZG9tLWNoYW5nZSIse2J1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9X19zb3J0QW5kRmlsdGVySXRlbXModCl7bGV0IHI9bmV3IEFycmF5KHQubGVuZ3RoKTtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKylyW25dPW47cmV0dXJuIHRoaXMuX19maWx0ZXJGbiYmKHI9ci5maWx0ZXIoKG4saSxvKT0+dGhpcy5fX2ZpbHRlckZuKHRbbl0saSxvKSkpLHRoaXMuX19zb3J0Rm4mJnIuc29ydCgobixpKT0+dGhpcy5fX3NvcnRGbih0W25dLHRbaV0pKSxyfV9fY2FsY3VsYXRlTGltaXQodCl7bGV0IHI9dCxuPXRoaXMuX19pbnN0YW5jZXMubGVuZ3RoO2lmKHRoaXMuaW5pdGlhbENvdW50KXtsZXQgaTshdGhpcy5fX2NodW5rQ291bnR8fHRoaXMuX19pdGVtc0FycmF5Q2hhbmdlZCYmIXRoaXMucmV1c2VDaHVua2VkSW5zdGFuY2VzPyhyPU1hdGgubWluKHQsdGhpcy5pbml0aWFsQ291bnQpLGk9TWF0aC5tYXgoci1uLDApLHRoaXMuX19jaHVua0NvdW50PWl8fDEpOihpPU1hdGgubWluKE1hdGgubWF4KHQtbiwwKSx0aGlzLl9fY2h1bmtDb3VudCkscj1NYXRoLm1pbihuK2ksdCkpLHRoaXMuX19zaG91bGRNZWFzdXJlQ2h1bms9aT09PXRoaXMuX19jaHVua0NvdW50LHRoaXMuX19zaG91bGRDb250aW51ZUNodW5raW5nPXI8dCx0aGlzLl9fcmVuZGVyU3RhcnRUaW1lPXBlcmZvcm1hbmNlLm5vdygpfXJldHVybiB0aGlzLl9faXRlbXNBcnJheUNoYW5nZWQ9ITEscn1fX2NvbnRpbnVlQ2h1bmtpbmcoKXtpZih0aGlzLl9fc2hvdWxkTWVhc3VyZUNodW5rKXtsZXQgdD1wZXJmb3JtYW5jZS5ub3coKS10aGlzLl9fcmVuZGVyU3RhcnRUaW1lLHI9dGhpcy5fdGFyZ2V0RnJhbWVUaW1lL3Q7dGhpcy5fX2NodW5rQ291bnQ9TWF0aC5yb3VuZCh0aGlzLl9fY2h1bmtDb3VudCpyKXx8MX10aGlzLl9fc2hvdWxkQ29udGludWVDaHVua2luZyYmdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpfV9fdXBkYXRlSW5zdGFuY2VzKHQscixuKXtsZXQgaT10aGlzLl9faXRlbXNJZHhUb0luc3RJZHg9e30sbztmb3Iobz0wO288cjtvKyspe2xldCBhPXRoaXMuX19pbnN0YW5jZXNbb10scz1uW29dLGw9dFtzXTtpW3NdPW8sYT8oYS5fc2V0UGVuZGluZ1Byb3BlcnR5KHRoaXMuYXMsbCksYS5fc2V0UGVuZGluZ1Byb3BlcnR5KHRoaXMuaW5kZXhBcyxvKSxhLl9zZXRQZW5kaW5nUHJvcGVydHkodGhpcy5pdGVtc0luZGV4QXMscyksYS5fZmx1c2hQcm9wZXJ0aWVzKCkpOnRoaXMuX19pbnNlcnRJbnN0YW5jZShsLG8scyl9Zm9yKGxldCBhPXRoaXMuX19pbnN0YW5jZXMubGVuZ3RoLTE7YT49bzthLS0pdGhpcy5fX2RldGFjaEFuZFJlbW92ZUluc3RhbmNlKGEpfV9fZGV0YWNoSW5zdGFuY2UodCl7bGV0IHI9dGhpcy5fX2luc3RhbmNlc1t0XSxuPXVlKHIucm9vdCk7Zm9yKGxldCBpPTA7aTxyLmNoaWxkcmVuLmxlbmd0aDtpKyspe2xldCBvPXIuY2hpbGRyZW5baV07bi5hcHBlbmRDaGlsZChvKX1yZXR1cm4gcn1fX2F0dGFjaEluc3RhbmNlKHQscil7bGV0IG49dGhpcy5fX2luc3RhbmNlc1t0XTtyLmluc2VydEJlZm9yZShuLnJvb3QsdGhpcyl9X19kZXRhY2hBbmRSZW1vdmVJbnN0YW5jZSh0KXt0aGlzLl9fZGV0YWNoSW5zdGFuY2UodCksdGhpcy5fX2luc3RhbmNlcy5zcGxpY2UodCwxKX1fX3N0YW1wSW5zdGFuY2UodCxyLG4pe2xldCBpPXt9O3JldHVybiBpW3RoaXMuYXNdPXQsaVt0aGlzLmluZGV4QXNdPXIsaVt0aGlzLml0ZW1zSW5kZXhBc109bixuZXcgdGhpcy5fX2N0b3IoaSl9X19pbnNlcnRJbnN0YW5jZSh0LHIsbil7bGV0IGk9dGhpcy5fX3N0YW1wSW5zdGFuY2UodCxyLG4pLG89dGhpcy5fX2luc3RhbmNlc1tyKzFdLGE9bz9vLmNoaWxkcmVuWzBdOnRoaXM7cmV0dXJuIHVlKHVlKHRoaXMpLnBhcmVudE5vZGUpLmluc2VydEJlZm9yZShpLnJvb3QsYSksdGhpcy5fX2luc3RhbmNlc1tyXT1pLGl9X3Nob3dIaWRlQ2hpbGRyZW4odCl7Zm9yKGxldCByPTA7cjx0aGlzLl9faW5zdGFuY2VzLmxlbmd0aDtyKyspdGhpcy5fX2luc3RhbmNlc1tyXS5fc2hvd0hpZGVDaGlsZHJlbih0KX1fX2hhbmRsZUl0ZW1QYXRoKHQscil7bGV0IG49dC5zbGljZSg2KSxpPW4uaW5kZXhPZigiLiIpLG89aTwwP246bi5zdWJzdHJpbmcoMCxpKTtpZihvPT1wYXJzZUludChvLDEwKSl7bGV0IGE9aTwwPyIiOm4uc3Vic3RyaW5nKGkrMSk7dGhpcy5fX2hhbmRsZU9ic2VydmVkUGF0aHMoYSk7bGV0IHM9dGhpcy5fX2l0ZW1zSWR4VG9JbnN0SWR4W29dLGw9dGhpcy5fX2luc3RhbmNlc1tzXTtpZihsKXtsZXQgYz10aGlzLmFzKyhhPyIuIithOiIiKTtsLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoYyxyLCExLCEwKSxsLl9mbHVzaFByb3BlcnRpZXMoKX1yZXR1cm4hMH19aXRlbUZvckVsZW1lbnQodCl7bGV0IHI9dGhpcy5tb2RlbEZvckVsZW1lbnQodCk7cmV0dXJuIHImJnJbdGhpcy5hc119aW5kZXhGb3JFbGVtZW50KHQpe2xldCByPXRoaXMubW9kZWxGb3JFbGVtZW50KHQpO3JldHVybiByJiZyW3RoaXMuaW5kZXhBc119bW9kZWxGb3JFbGVtZW50KHQpe3JldHVybiBwOSh0aGlzLnRlbXBsYXRlLHQpfX07Y3VzdG9tRWxlbWVudHMuZGVmaW5lKGQ5LmlzLGQ5KTt2YXIgbTk9Y2xhc3MgZXh0ZW5kcyBtdHtzdGF0aWMgZ2V0IGlzKCl7cmV0dXJuImRvbS1pZiJ9c3RhdGljIGdldCB0ZW1wbGF0ZSgpe3JldHVybiBudWxsfXN0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntpZjp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfX2RlYm91bmNlUmVuZGVyIn0scmVzdGFtcDp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfX2RlYm91bmNlUmVuZGVyIn0sbm90aWZ5RG9tQ2hhbmdlOnt0eXBlOkJvb2xlYW59fX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fX3JlbmRlckRlYm91bmNlcj1udWxsLHRoaXMuX2xhc3RJZj0hMSx0aGlzLl9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fXz0hMSx0aGlzLl9fdGVtcGxhdGUsdGhpcy5fdGVtcGxhdGVJbmZvfV9fZGVib3VuY2VSZW5kZXIoKXt0aGlzLl9fcmVuZGVyRGVib3VuY2VyPXNyLmRlYm91bmNlKHRoaXMuX19yZW5kZXJEZWJvdW5jZXIsbGksKCk9PnRoaXMuX19yZW5kZXIoKSksSmwodGhpcy5fX3JlbmRlckRlYm91bmNlcil9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO2xldCB0PXVlKHRoaXMpLnBhcmVudE5vZGU7KCF0fHx0Lm5vZGVUeXBlPT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUmJiF1ZSh0KS5ob3N0KSYmdGhpcy5fX3RlYXJkb3duSW5zdGFuY2UoKX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksV3goKXx8KHRoaXMuc3R5bGUuZGlzcGxheT0ibm9uZSIpLHRoaXMuaWYmJnRoaXMuX19kZWJvdW5jZVJlbmRlcigpfV9fZW5zdXJlVGVtcGxhdGUoKXtpZighdGhpcy5fX3RlbXBsYXRlKXtsZXQgdD10aGlzLHI9dC5fdGVtcGxhdGVJbmZvP3Q6dWUodCkucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKTtpZighcil7bGV0IG49bmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCk9PntpZih1ZSh0aGlzKS5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpKW4uZGlzY29ubmVjdCgpLHRoaXMuX19yZW5kZXIoKTtlbHNlIHRocm93IG5ldyBFcnJvcigiZG9tLWlmIHJlcXVpcmVzIGEgPHRlbXBsYXRlPiBjaGlsZCIpfSk7cmV0dXJuIG4ub2JzZXJ2ZSh0aGlzLHtjaGlsZExpc3Q6ITB9KSwhMX10aGlzLl9fdGVtcGxhdGU9cn1yZXR1cm4hMH1fX2Vuc3VyZUluc3RhbmNlKCl7bGV0IHQ9dWUodGhpcykucGFyZW50Tm9kZTtpZih0aGlzLl9faGFzSW5zdGFuY2UoKSl7bGV0IHI9dGhpcy5fX2dldEluc3RhbmNlTm9kZXMoKTtpZihyJiZyLmxlbmd0aCYmdWUodGhpcykucHJldmlvdXNTaWJsaW5nIT09cltyLmxlbmd0aC0xXSlmb3IobGV0IGk9MCxvO2k8ci5sZW5ndGgmJihvPXJbaV0pO2krKyl1ZSh0KS5pbnNlcnRCZWZvcmUobyx0aGlzKX1lbHNle2lmKCF0fHwhdGhpcy5fX2Vuc3VyZVRlbXBsYXRlKCkpcmV0dXJuITE7dGhpcy5fX2NyZWF0ZUFuZEluc2VydEluc3RhbmNlKHQpfXJldHVybiEwfXJlbmRlcigpe2NpKCl9X19yZW5kZXIoKXtpZih0aGlzLmlmKXtpZighdGhpcy5fX2Vuc3VyZUluc3RhbmNlKCkpcmV0dXJufWVsc2UgdGhpcy5yZXN0YW1wJiZ0aGlzLl9fdGVhcmRvd25JbnN0YW5jZSgpO3RoaXMuX3Nob3dIaWRlQ2hpbGRyZW4oKSwoIVVNfHx0aGlzLm5vdGlmeURvbUNoYW5nZSkmJnRoaXMuaWYhPXRoaXMuX2xhc3RJZiYmKHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImRvbS1jaGFuZ2UiLHtidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpLHRoaXMuX2xhc3RJZj10aGlzLmlmKX1fX2hhc0luc3RhbmNlKCl7fV9fZ2V0SW5zdGFuY2VOb2Rlcygpe31fX2NyZWF0ZUFuZEluc2VydEluc3RhbmNlKHQpe31fX3RlYXJkb3duSW5zdGFuY2UoKXt9X3Nob3dIaWRlQ2hpbGRyZW4oKXt9fSxhVz1jbGFzcyBleHRlbmRzIG05e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9faW5zdGFuY2U9bnVsbCx0aGlzLl9fc3luY0luZm89bnVsbH1fX2hhc0luc3RhbmNlKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5fX2luc3RhbmNlKX1fX2dldEluc3RhbmNlTm9kZXMoKXtyZXR1cm4gdGhpcy5fX2luc3RhbmNlLnRlbXBsYXRlSW5mby5jaGlsZE5vZGVzfV9fY3JlYXRlQW5kSW5zZXJ0SW5zdGFuY2UodCl7bGV0IHI9dGhpcy5fX2RhdGFIb3N0fHx0aGlzO2lmKGl1JiYhdGhpcy5fX2RhdGFIb3N0KXRocm93IG5ldyBFcnJvcigic3RyaWN0VGVtcGxhdGVQb2xpY3k6IHRlbXBsYXRlIG93bmVyIG5vdCB0cnVzdGVkIik7bGV0IG49ci5fYmluZFRlbXBsYXRlKHRoaXMuX190ZW1wbGF0ZSwhMCk7bi5ydW5FZmZlY3RzPShpLG8sYSk9PntsZXQgcz10aGlzLl9fc3luY0luZm87aWYodGhpcy5pZilzJiYodGhpcy5fX3N5bmNJbmZvPW51bGwsdGhpcy5fc2hvd0hpZGVDaGlsZHJlbigpLG89T2JqZWN0LmFzc2lnbihzLmNoYW5nZWRQcm9wcyxvKSksaShvLGEpO2Vsc2UgaWYodGhpcy5fX2luc3RhbmNlKWlmKHN8fChzPXRoaXMuX19zeW5jSW5mbz17cnVuRWZmZWN0czppLGNoYW5nZWRQcm9wczp7fX0pLGEpZm9yKGxldCBsIGluIG8pe2xldCBjPWF1KGwpO3MuY2hhbmdlZFByb3BzW2NdPXRoaXMuX19kYXRhSG9zdFtjXX1lbHNlIE9iamVjdC5hc3NpZ24ocy5jaGFuZ2VkUHJvcHMsbyl9LHRoaXMuX19pbnN0YW5jZT1yLl9zdGFtcFRlbXBsYXRlKHRoaXMuX190ZW1wbGF0ZSxuKSx1ZSh0KS5pbnNlcnRCZWZvcmUodGhpcy5fX2luc3RhbmNlLHRoaXMpfV9fc3luY0hvc3RQcm9wZXJ0aWVzKCl7bGV0IHQ9dGhpcy5fX3N5bmNJbmZvO3QmJih0aGlzLl9fc3luY0luZm89bnVsbCx0LnJ1bkVmZmVjdHModC5jaGFuZ2VkUHJvcHMsITEpKX1fX3RlYXJkb3duSW5zdGFuY2UoKXtsZXQgdD10aGlzLl9fZGF0YUhvc3R8fHRoaXM7dGhpcy5fX2luc3RhbmNlJiYodC5fcmVtb3ZlQm91bmREb20odGhpcy5fX2luc3RhbmNlKSx0aGlzLl9faW5zdGFuY2U9bnVsbCx0aGlzLl9fc3luY0luZm89bnVsbCl9X3Nob3dIaWRlQ2hpbGRyZW4oKXtsZXQgdD10aGlzLl9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fX3x8IXRoaXMuaWY7dGhpcy5fX2luc3RhbmNlJiZCb29sZWFuKHRoaXMuX19pbnN0YW5jZS5fX2hpZGRlbikhPT10JiYodGhpcy5fX2luc3RhbmNlLl9faGlkZGVuPXQsaVcodCx0aGlzLl9faW5zdGFuY2UudGVtcGxhdGVJbmZvLmNoaWxkTm9kZXMpKSx0fHx0aGlzLl9fc3luY0hvc3RQcm9wZXJ0aWVzKCl9fSxzVz1jbGFzcyBleHRlbmRzIG05e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9fY3Rvcj1udWxsLHRoaXMuX19pbnN0YW5jZT1udWxsLHRoaXMuX19pbnZhbGlkUHJvcHM9bnVsbH1fX2hhc0luc3RhbmNlKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5fX2luc3RhbmNlKX1fX2dldEluc3RhbmNlTm9kZXMoKXtyZXR1cm4gdGhpcy5fX2luc3RhbmNlLmNoaWxkcmVufV9fY3JlYXRlQW5kSW5zZXJ0SW5zdGFuY2UodCl7dGhpcy5fX2N0b3J8fCh0aGlzLl9fY3Rvcj10Yyh0aGlzLl9fdGVtcGxhdGUsdGhpcyx7bXV0YWJsZURhdGE6ITAsZm9yd2FyZEhvc3RQcm9wOmZ1bmN0aW9uKHIsbil7dGhpcy5fX2luc3RhbmNlJiYodGhpcy5pZj90aGlzLl9faW5zdGFuY2UuZm9yd2FyZEhvc3RQcm9wKHIsbik6KHRoaXMuX19pbnZhbGlkUHJvcHM9dGhpcy5fX2ludmFsaWRQcm9wc3x8T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9faW52YWxpZFByb3BzW2F1KHIpXT0hMCkpfX0pKSx0aGlzLl9faW5zdGFuY2U9bmV3IHRoaXMuX19jdG9yLHVlKHQpLmluc2VydEJlZm9yZSh0aGlzLl9faW5zdGFuY2Uucm9vdCx0aGlzKX1fX3RlYXJkb3duSW5zdGFuY2UoKXtpZih0aGlzLl9faW5zdGFuY2Upe2xldCB0PXRoaXMuX19pbnN0YW5jZS5jaGlsZHJlbjtpZih0JiZ0Lmxlbmd0aCl7bGV0IHI9dWUodFswXSkucGFyZW50Tm9kZTtpZihyKXtyPXVlKHIpO2ZvcihsZXQgbj0wLGk7bjx0Lmxlbmd0aCYmKGk9dFtuXSk7bisrKXIucmVtb3ZlQ2hpbGQoaSl9fXRoaXMuX19pbnZhbGlkUHJvcHM9bnVsbCx0aGlzLl9faW5zdGFuY2U9bnVsbH19X19zeW5jSG9zdFByb3BlcnRpZXMoKXtsZXQgdD10aGlzLl9faW52YWxpZFByb3BzO2lmKHQpe3RoaXMuX19pbnZhbGlkUHJvcHM9bnVsbDtmb3IobGV0IHIgaW4gdCl0aGlzLl9faW5zdGFuY2UuX3NldFBlbmRpbmdQcm9wZXJ0eShyLHRoaXMuX19kYXRhSG9zdFtyXSk7dGhpcy5fX2luc3RhbmNlLl9mbHVzaFByb3BlcnRpZXMoKX19X3Nob3dIaWRlQ2hpbGRyZW4oKXtsZXQgdD10aGlzLl9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fX3x8IXRoaXMuaWY7dGhpcy5fX2luc3RhbmNlJiZCb29sZWFuKHRoaXMuX19pbnN0YW5jZS5fX2hpZGRlbikhPT10JiYodGhpcy5fX2luc3RhbmNlLl9faGlkZGVuPXQsdGhpcy5fX2luc3RhbmNlLl9zaG93SGlkZUNoaWxkcmVuKHQpKSx0fHx0aGlzLl9fc3luY0hvc3RQcm9wZXJ0aWVzKCl9fSxqZ3Q9Ukk/YVc6c1c7Y3VzdG9tRWxlbWVudHMuZGVmaW5lKGpndC5pcyxqZ3QpO3ZhciBkYmU9Tm4oZT0+e2xldCB0PU1tKGUpO2NsYXNzIHIgZXh0ZW5kcyB0e3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntpdGVtczp7dHlwZTpBcnJheX0sbXVsdGk6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sc2VsZWN0ZWQ6e3R5cGU6T2JqZWN0LG5vdGlmeTohMH0sc2VsZWN0ZWRJdGVtOnt0eXBlOk9iamVjdCxub3RpZnk6ITB9LHRvZ2dsZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfX19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9fdXBkYXRlU2VsZWN0aW9uKG11bHRpLCBpdGVtcy4qKSJdfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9fbGFzdEl0ZW1zPW51bGwsdGhpcy5fX2xhc3RNdWx0aT1udWxsLHRoaXMuX19zZWxlY3RlZE1hcD1udWxsfV9fdXBkYXRlU2VsZWN0aW9uKGksbyl7bGV0IGE9by5wYXRoO2lmKGE9PUpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKSl7bGV0IHM9by5iYXNlfHxbXSxsPXRoaXMuX19sYXN0SXRlbXMsYz10aGlzLl9fbGFzdE11bHRpO2lmKGkhPT1jJiZ0aGlzLmNsZWFyU2VsZWN0aW9uKCksbCl7bGV0IHU9bzkocyxsKTt0aGlzLl9fYXBwbHlTcGxpY2VzKHUpfXRoaXMuX19sYXN0SXRlbXM9cyx0aGlzLl9fbGFzdE11bHRpPWl9ZWxzZSBpZihvLnBhdGg9PWAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uc3BsaWNlc2ApdGhpcy5fX2FwcGx5U3BsaWNlcyhvLnZhbHVlLmluZGV4U3BsaWNlcyk7ZWxzZXtsZXQgcz1hLnNsaWNlKGAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uYC5sZW5ndGgpLGw9cGFyc2VJbnQocywxMCk7cy5pbmRleE9mKCIuIik8MCYmcz09bCYmdGhpcy5fX2Rlc2VsZWN0Q2hhbmdlZElkeChsKX19X19hcHBseVNwbGljZXMoaSl7bGV0IG89dGhpcy5fX3NlbGVjdGVkTWFwO2ZvcihsZXQgcz0wO3M8aS5sZW5ndGg7cysrKXtsZXQgbD1pW3NdO28uZm9yRWFjaCgoYyx1KT0+e2M8bC5pbmRleHx8KGM+PWwuaW5kZXgrbC5yZW1vdmVkLmxlbmd0aD9vLnNldCh1LGMrbC5hZGRlZENvdW50LWwucmVtb3ZlZC5sZW5ndGgpOm8uc2V0KHUsLTEpKX0pO2ZvcihsZXQgYz0wO2M8bC5hZGRlZENvdW50O2MrKyl7bGV0IHU9bC5pbmRleCtjO28uaGFzKHRoaXMuaXRlbXNbdV0pJiZvLnNldCh0aGlzLml0ZW1zW3VdLHUpfX10aGlzLl9fdXBkYXRlTGlua3MoKTtsZXQgYT0wO28uZm9yRWFjaCgocyxsKT0+e3M8MD8odGhpcy5tdWx0aT90aGlzLnNwbGljZShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJzZWxlY3RlZCIsdGhpcyksYSwxKTp0aGlzLnNlbGVjdGVkPXRoaXMuc2VsZWN0ZWRJdGVtPW51bGwsby5kZWxldGUobCkpOmErK30pfV9fdXBkYXRlTGlua3MoKXtpZih0aGlzLl9fZGF0YUxpbmtlZFBhdGhzPXt9LHRoaXMubXVsdGkpe2xldCBpPTA7dGhpcy5fX3NlbGVjdGVkTWFwLmZvckVhY2gobz0+e28+PTAmJnRoaXMubGlua1BhdGhzKGAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uJHtvfWAsYCR7SlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgic2VsZWN0ZWQiLHRoaXMpfS4ke2krK31gKX0pfWVsc2UgdGhpcy5fX3NlbGVjdGVkTWFwLmZvckVhY2goaT0+e3RoaXMubGlua1BhdGhzKEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoInNlbGVjdGVkIix0aGlzKSxgJHtKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJpdGVtcyIsdGhpcyl9LiR7aX1gKSx0aGlzLmxpbmtQYXRocyhKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJzZWxlY3RlZEl0ZW0iLHRoaXMpLGAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uJHtpfWApfSl9Y2xlYXJTZWxlY3Rpb24oKXt0aGlzLl9fZGF0YUxpbmtlZFBhdGhzPXt9LHRoaXMuX19zZWxlY3RlZE1hcD1uZXcgTWFwLHRoaXMuc2VsZWN0ZWQ9dGhpcy5tdWx0aT9bXTpudWxsLHRoaXMuc2VsZWN0ZWRJdGVtPW51bGx9aXNTZWxlY3RlZChpKXtyZXR1cm4gdGhpcy5fX3NlbGVjdGVkTWFwLmhhcyhpKX1pc0luZGV4U2VsZWN0ZWQoaSl7cmV0dXJuIHRoaXMuaXNTZWxlY3RlZCh0aGlzLml0ZW1zW2ldKX1fX2Rlc2VsZWN0Q2hhbmdlZElkeChpKXtsZXQgbz10aGlzLl9fc2VsZWN0ZWRJbmRleEZvckl0ZW1JbmRleChpKTtpZihvPj0wKXtsZXQgYT0wO3RoaXMuX19zZWxlY3RlZE1hcC5mb3JFYWNoKChzLGwpPT57bz09YSsrJiZ0aGlzLmRlc2VsZWN0KGwpfSl9fV9fc2VsZWN0ZWRJbmRleEZvckl0ZW1JbmRleChpKXtsZXQgbz10aGlzLl9fZGF0YUxpbmtlZFBhdGhzW2Ake0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uJHtpfWBdO2lmKG8pcmV0dXJuIHBhcnNlSW50KG8uc2xpY2UoYCR7SlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgic2VsZWN0ZWQiLHRoaXMpfS5gLmxlbmd0aCksMTApfWRlc2VsZWN0KGkpe2xldCBvPXRoaXMuX19zZWxlY3RlZE1hcC5nZXQoaSk7aWYobz49MCl7dGhpcy5fX3NlbGVjdGVkTWFwLmRlbGV0ZShpKTtsZXQgYTt0aGlzLm11bHRpJiYoYT10aGlzLl9fc2VsZWN0ZWRJbmRleEZvckl0ZW1JbmRleChvKSksdGhpcy5fX3VwZGF0ZUxpbmtzKCksdGhpcy5tdWx0aT90aGlzLnNwbGljZShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJzZWxlY3RlZCIsdGhpcyksYSwxKTp0aGlzLnNlbGVjdGVkPXRoaXMuc2VsZWN0ZWRJdGVtPW51bGx9fWRlc2VsZWN0SW5kZXgoaSl7dGhpcy5kZXNlbGVjdCh0aGlzLml0ZW1zW2ldKX1zZWxlY3QoaSl7dGhpcy5zZWxlY3RJbmRleCh0aGlzLml0ZW1zLmluZGV4T2YoaSkpfXNlbGVjdEluZGV4KGkpe2xldCBvPXRoaXMuaXRlbXNbaV07dGhpcy5pc1NlbGVjdGVkKG8pP3RoaXMudG9nZ2xlJiZ0aGlzLmRlc2VsZWN0SW5kZXgoaSk6KHRoaXMubXVsdGl8fHRoaXMuX19zZWxlY3RlZE1hcC5jbGVhcigpLHRoaXMuX19zZWxlY3RlZE1hcC5zZXQobyxpKSx0aGlzLl9fdXBkYXRlTGlua3MoKSx0aGlzLm11bHRpP3RoaXMucHVzaChKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJzZWxlY3RlZCIsdGhpcyksbyk6dGhpcy5zZWxlY3RlZD10aGlzLnNlbGVjdGVkSXRlbT1vKX19cmV0dXJuIHJ9KTt2YXIgbWJlPWRiZShtdCksZzk9Y2xhc3MgZXh0ZW5kcyBtYmV7c3RhdGljIGdldCBpcygpe3JldHVybiJhcnJheS1zZWxlY3RvciJ9c3RhdGljIGdldCB0ZW1wbGF0ZSgpe3JldHVybiBudWxsfX07Y3VzdG9tRWxlbWVudHMuZGVmaW5lKGc5LmlzLGc5KTt2YXIgXzk9bmV3IFpsO3dpbmRvdy5TaGFkeUNTU3x8KHdpbmRvdy5TaGFkeUNTUz17cHJlcGFyZVRlbXBsYXRlKGUsdCxyKXt9LHByZXBhcmVUZW1wbGF0ZURvbShlLHQpe30scHJlcGFyZVRlbXBsYXRlU3R5bGVzKGUsdCxyKXt9LHN0eWxlU3VidHJlZShlLHQpe185LnByb2Nlc3NTdHlsZXMoKSxKTShlLHQpfSxzdHlsZUVsZW1lbnQoZSl7XzkucHJvY2Vzc1N0eWxlcygpfSxzdHlsZURvY3VtZW50KGUpe185LnByb2Nlc3NTdHlsZXMoKSxKTShkb2N1bWVudC5ib2R5LGUpfSxnZXRDb21wdXRlZFN0eWxlVmFsdWUoZSx0KXtyZXR1cm4gakkoZSx0KX0sZmx1c2hDdXN0b21TdHlsZXMoKXt9LG5hdGl2ZUNzczpOeCxuYXRpdmVTaGFkb3c6Zl8sY3NzQnVpbGQ6RW0sZGlzYWJsZVJ1bnRpbWU6V0l9KTt3aW5kb3cuU2hhZHlDU1MuQ3VzdG9tU3R5bGVJbnRlcmZhY2U9Xzk7dmFyIFhndD0iaW5jbHVkZSIsZ2JlPXdpbmRvdy5TaGFkeUNTUy5DdXN0b21TdHlsZUludGVyZmFjZSxsVz1jbGFzcyBleHRlbmRzIEhUTUxFbGVtZW50e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9zdHlsZT1udWxsLGdiZS5hZGRDdXN0b21TdHlsZSh0aGlzKX1nZXRTdHlsZSgpe2lmKHRoaXMuX3N0eWxlKXJldHVybiB0aGlzLl9zdHlsZTtsZXQgdD10aGlzLnF1ZXJ5U2VsZWN0b3IoInN0eWxlIik7aWYoIXQpcmV0dXJuIG51bGw7dGhpcy5fc3R5bGU9dDtsZXQgcj10LmdldEF0dHJpYnV0ZShYZ3QpO3JldHVybiByJiYodC5yZW1vdmVBdHRyaWJ1dGUoWGd0KSx0LnRleHRDb250ZW50PWltdChyKSt0LnRleHRDb250ZW50KSx0aGlzLm93bmVyRG9jdW1lbnQhPT13aW5kb3cuZG9jdW1lbnQmJndpbmRvdy5kb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHRoaXMpLHRoaXMuX3N0eWxlfX07d2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZSgiY3VzdG9tLXN0eWxlIixsVyk7dmFyICRndDskZ3Q9R3guX211dGFibGVQcm9wZXJ0eUNoYW5nZTt2YXIgS2d0PXtwcm9wZXJ0aWVzOnttdXRhYmxlRGF0YTpCb29sZWFufSxfc2hvdWxkUHJvcGVydHlDaGFuZ2UoZSx0LHIpe3JldHVybiAkZ3QodGhpcyxlLHQscix0aGlzLm11dGFibGVEYXRhKX19O3ZhciBPYT1HdChIVE1MRWxlbWVudCkucHJvdG90eXBlO3ZhciB5OT1uZXcgU2V0LFFzPXtwcm9wZXJ0aWVzOntfcGFyZW50UmVzaXphYmxlOnt0eXBlOk9iamVjdCxvYnNlcnZlcjoiX3BhcmVudFJlc2l6YWJsZUNoYW5nZWQifSxfbm90aWZ5aW5nRGVzY2VuZGFudDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfX0sbGlzdGVuZXJzOnsiaXJvbi1yZXF1ZXN0LXJlc2l6ZS1ub3RpZmljYXRpb25zIjoiX29uSXJvblJlcXVlc3RSZXNpemVOb3RpZmljYXRpb25zIn0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX2ludGVyZXN0ZWRSZXNpemFibGVzPVtdLHRoaXMuX2JvdW5kTm90aWZ5UmVzaXplPXRoaXMubm90aWZ5UmVzaXplLmJpbmQodGhpcyksdGhpcy5fYm91bmRPbkRlc2NlbmRhbnRJcm9uUmVzaXplPXRoaXMuX29uRGVzY2VuZGFudElyb25SZXNpemUuYmluZCh0aGlzKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9yZXF1ZXN0UmVzaXplTm90aWZpY2F0aW9ucygpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX3BhcmVudFJlc2l6YWJsZT90aGlzLl9wYXJlbnRSZXNpemFibGUuc3RvcFJlc2l6ZU5vdGlmaWNhdGlvbnNGb3IodGhpcyk6KHk5LmRlbGV0ZSh0aGlzKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9ib3VuZE5vdGlmeVJlc2l6ZSkpLHRoaXMuX3BhcmVudFJlc2l6YWJsZT1udWxsfSxub3RpZnlSZXNpemU6ZnVuY3Rpb24oKXshdGhpcy5pc0F0dGFjaGVkfHwodGhpcy5faW50ZXJlc3RlZFJlc2l6YWJsZXMuZm9yRWFjaChmdW5jdGlvbihlKXt0aGlzLnJlc2l6ZXJTaG91bGROb3RpZnkoZSkmJnRoaXMuX25vdGlmeURlc2NlbmRhbnQoZSl9LHRoaXMpLHRoaXMuX2ZpcmVSZXNpemUoKSl9LGFzc2lnblBhcmVudFJlc2l6YWJsZTpmdW5jdGlvbihlKXt0aGlzLl9wYXJlbnRSZXNpemFibGUmJnRoaXMuX3BhcmVudFJlc2l6YWJsZS5zdG9wUmVzaXplTm90aWZpY2F0aW9uc0Zvcih0aGlzKSx0aGlzLl9wYXJlbnRSZXNpemFibGU9ZSxlJiZlLl9pbnRlcmVzdGVkUmVzaXphYmxlcy5pbmRleE9mKHRoaXMpPT09LTEmJihlLl9pbnRlcmVzdGVkUmVzaXphYmxlcy5wdXNoKHRoaXMpLGUuX3N1YnNjcmliZUlyb25SZXNpemUodGhpcykpfSxzdG9wUmVzaXplTm90aWZpY2F0aW9uc0ZvcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9pbnRlcmVzdGVkUmVzaXphYmxlcy5pbmRleE9mKGUpO3Q+LTEmJih0aGlzLl9pbnRlcmVzdGVkUmVzaXphYmxlcy5zcGxpY2UodCwxKSx0aGlzLl91bnN1YnNjcmliZUlyb25SZXNpemUoZSkpfSxfc3Vic2NyaWJlSXJvblJlc2l6ZTpmdW5jdGlvbihlKXtlLmFkZEV2ZW50TGlzdGVuZXIoImlyb24tcmVzaXplIix0aGlzLl9ib3VuZE9uRGVzY2VuZGFudElyb25SZXNpemUpfSxfdW5zdWJzY3JpYmVJcm9uUmVzaXplOmZ1bmN0aW9uKGUpe2UucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaXJvbi1yZXNpemUiLHRoaXMuX2JvdW5kT25EZXNjZW5kYW50SXJvblJlc2l6ZSl9LHJlc2l6ZXJTaG91bGROb3RpZnk6ZnVuY3Rpb24oZSl7cmV0dXJuITB9LF9vbkRlc2NlbmRhbnRJcm9uUmVzaXplOmZ1bmN0aW9uKGUpe2lmKHRoaXMuX25vdGlmeWluZ0Rlc2NlbmRhbnQpe2Uuc3RvcFByb3BhZ2F0aW9uKCk7cmV0dXJufXVffHx0aGlzLl9maXJlUmVzaXplKCl9LF9maXJlUmVzaXplOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJpcm9uLXJlc2l6ZSIsbnVsbCx7bm9kZTp0aGlzLGJ1YmJsZXM6ITF9KX0sX29uSXJvblJlcXVlc3RSZXNpemVOb3RpZmljYXRpb25zOmZ1bmN0aW9uKGUpe3ZhciB0PXp0KGUpLnJvb3RUYXJnZXQ7dCE9PXRoaXMmJih0LmFzc2lnblBhcmVudFJlc2l6YWJsZSh0aGlzKSx0aGlzLl9ub3RpZnlEZXNjZW5kYW50KHQpLGUuc3RvcFByb3BhZ2F0aW9uKCkpfSxfcGFyZW50UmVzaXphYmxlQ2hhbmdlZDpmdW5jdGlvbihlKXtlJiZ3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9ib3VuZE5vdGlmeVJlc2l6ZSl9LF9ub3RpZnlEZXNjZW5kYW50OmZ1bmN0aW9uKGUpeyF0aGlzLmlzQXR0YWNoZWR8fCh0aGlzLl9ub3RpZnlpbmdEZXNjZW5kYW50PSEwLGUubm90aWZ5UmVzaXplKCksdGhpcy5fbm90aWZ5aW5nRGVzY2VuZGFudD0hMSl9LF9yZXF1ZXN0UmVzaXplTm90aWZpY2F0aW9uczpmdW5jdGlvbigpe2lmKCEhdGhpcy5pc0F0dGFjaGVkKWlmKGRvY3VtZW50LnJlYWR5U3RhdGU9PT0ibG9hZGluZyIpe3ZhciBlPXRoaXMuX3JlcXVlc3RSZXNpemVOb3RpZmljYXRpb25zLmJpbmQodGhpcyk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicmVhZHlzdGF0ZWNoYW5nZSIsZnVuY3Rpb24gdCgpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlYWR5c3RhdGVjaGFuZ2UiLHQpLGUoKX0pfWVsc2UgdGhpcy5fZmluZFBhcmVudCgpLHRoaXMuX3BhcmVudFJlc2l6YWJsZT90aGlzLl9wYXJlbnRSZXNpemFibGUuX2ludGVyZXN0ZWRSZXNpemFibGVzLmZvckVhY2goZnVuY3Rpb24odCl7dCE9PXRoaXMmJnQuX2ZpbmRQYXJlbnQoKX0sdGhpcyk6KHk5LmZvckVhY2goZnVuY3Rpb24odCl7dCE9PXRoaXMmJnQuX2ZpbmRQYXJlbnQoKX0sdGhpcyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5fYm91bmROb3RpZnlSZXNpemUpLHRoaXMubm90aWZ5UmVzaXplKCkpfSxfZmluZFBhcmVudDpmdW5jdGlvbigpe3RoaXMuYXNzaWduUGFyZW50UmVzaXphYmxlKG51bGwpLHRoaXMuZmlyZSgiaXJvbi1yZXF1ZXN0LXJlc2l6ZS1ub3RpZmljYXRpb25zIixudWxsLHtub2RlOnRoaXMsYnViYmxlczohMCxjYW5jZWxhYmxlOiEwfSksdGhpcy5fcGFyZW50UmVzaXphYmxlP3k5LmRlbGV0ZSh0aGlzKTp5OS5hZGQodGhpcyl9fTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiB2YXIoLS1pcm9uLWNvbGxhcHNlLXRyYW5zaXRpb24tZHVyYXRpb24sIDMwMG1zKTsKICAgICAgICAvKiBTYWZhcmkgMTAgbmVlZHMgdGhpcyBwcm9wZXJ0eSBwcmVmaXhlZCB0byBjb3JyZWN0bHkgYXBwbHkgdGhlIGN1c3RvbSBwcm9wZXJ0eSAqLwogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogdmFyKC0taXJvbi1jb2xsYXBzZS10cmFuc2l0aW9uLWR1cmF0aW9uLCAzMDBtcyk7CiAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICAgIH0KCiAgICAgIDpob3N0KC5pcm9uLWNvbGxhcHNlLWNsb3NlZCkgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KDpub3QoLmlyb24tY29sbGFwc2Utb3BlbmVkKSkgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJpcm9uLWNvbGxhcHNlIixiZWhhdmlvcnM6W1FzXSxwcm9wZXJ0aWVzOntob3Jpem9udGFsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9ob3Jpem9udGFsQ2hhbmdlZCJ9LG9wZW5lZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCxvYnNlcnZlcjoiX29wZW5lZENoYW5nZWQifSx0cmFuc2l0aW9uaW5nOnt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwLHJlYWRPbmx5OiEwfSxub0FuaW1hdGlvbjp7dHlwZTpCb29sZWFufSxfZGVzaXJlZFNpemU6e3R5cGU6U3RyaW5nLHZhbHVlOiIifX0sZ2V0IGRpbWVuc2lvbigpe3JldHVybiB0aGlzLmhvcml6b250YWw/IndpZHRoIjoiaGVpZ2h0In0sZ2V0IF9kaW1lbnNpb25NYXgoKXtyZXR1cm4gdGhpcy5ob3Jpem9udGFsPyJtYXhXaWR0aCI6Im1heEhlaWdodCJ9LGdldCBfZGltZW5zaW9uTWF4Q3NzKCl7cmV0dXJuIHRoaXMuaG9yaXpvbnRhbD8ibWF4LXdpZHRoIjoibWF4LWhlaWdodCJ9LGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJncm91cCIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9LGxpc3RlbmVyczp7dHJhbnNpdGlvbmVuZDoiX29uVHJhbnNpdGlvbkVuZCJ9LHRvZ2dsZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkPSF0aGlzLm9wZW5lZH0sc2hvdzpmdW5jdGlvbigpe3RoaXMub3BlbmVkPSEwfSxoaWRlOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ9ITF9LHVwZGF0ZVNpemU6ZnVuY3Rpb24oZSx0KXtlPWU9PT0iYXV0byI/IiI6ZTt2YXIgcj10JiYhdGhpcy5ub0FuaW1hdGlvbiYmdGhpcy5pc0F0dGFjaGVkJiZ0aGlzLl9kZXNpcmVkU2l6ZSE9PWU7aWYodGhpcy5fZGVzaXJlZFNpemU9ZSx0aGlzLl91cGRhdGVUcmFuc2l0aW9uKCExKSxyKXt2YXIgbj10aGlzLl9jYWxjU2l6ZSgpO2U9PT0iIiYmKHRoaXMuc3R5bGVbdGhpcy5fZGltZW5zaW9uTWF4XT0iIixlPXRoaXMuX2NhbGNTaXplKCkpLHRoaXMuc3R5bGVbdGhpcy5fZGltZW5zaW9uTWF4XT1uLHRoaXMuc2Nyb2xsVG9wPXRoaXMuc2Nyb2xsVG9wLHRoaXMuX3VwZGF0ZVRyYW5zaXRpb24oITApLHI9ZSE9PW59dGhpcy5zdHlsZVt0aGlzLl9kaW1lbnNpb25NYXhdPWUscnx8dGhpcy5fdHJhbnNpdGlvbkVuZCgpfSxlbmFibGVUcmFuc2l0aW9uOmZ1bmN0aW9uKGUpe09hLl93YXJuKCJgZW5hYmxlVHJhbnNpdGlvbigpYCBpcyBkZXByZWNhdGVkLCB1c2UgYG5vQW5pbWF0aW9uYCBpbnN0ZWFkLiIpLHRoaXMubm9BbmltYXRpb249IWV9LF91cGRhdGVUcmFuc2l0aW9uOmZ1bmN0aW9uKGUpe3RoaXMuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uPWUmJiF0aGlzLm5vQW5pbWF0aW9uPyIiOiIwcyJ9LF9ob3Jpem9udGFsQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuc3R5bGUudHJhbnNpdGlvblByb3BlcnR5PXRoaXMuX2RpbWVuc2lvbk1heENzczt2YXIgZT10aGlzLl9kaW1lbnNpb25NYXg9PT0ibWF4V2lkdGgiPyJtYXhIZWlnaHQiOiJtYXhXaWR0aCI7dGhpcy5zdHlsZVtlXT0iIix0aGlzLnVwZGF0ZVNpemUodGhpcy5vcGVuZWQ/ImF1dG8iOiIwcHgiLCExKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCF0aGlzLm9wZW5lZCksdGhpcy5fc2V0VHJhbnNpdGlvbmluZyghMCksdGhpcy50b2dnbGVDbGFzcygiaXJvbi1jb2xsYXBzZS1jbG9zZWQiLCExKSx0aGlzLnRvZ2dsZUNsYXNzKCJpcm9uLWNvbGxhcHNlLW9wZW5lZCIsITEpLHRoaXMudXBkYXRlU2l6ZSh0aGlzLm9wZW5lZD8iYXV0byI6IjBweCIsITApLHRoaXMub3BlbmVkJiZ0aGlzLmZvY3VzKCl9LF90cmFuc2l0aW9uRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHlsZVt0aGlzLl9kaW1lbnNpb25NYXhdPXRoaXMuX2Rlc2lyZWRTaXplLHRoaXMudG9nZ2xlQ2xhc3MoImlyb24tY29sbGFwc2UtY2xvc2VkIiwhdGhpcy5vcGVuZWQpLHRoaXMudG9nZ2xlQ2xhc3MoImlyb24tY29sbGFwc2Utb3BlbmVkIix0aGlzLm9wZW5lZCksdGhpcy5fdXBkYXRlVHJhbnNpdGlvbighMSksdGhpcy5ub3RpZnlSZXNpemUoKSx0aGlzLl9zZXRUcmFuc2l0aW9uaW5nKCExKX0sX29uVHJhbnNpdGlvbkVuZDpmdW5jdGlvbihlKXt6dChlKS5yb290VGFyZ2V0PT09dGhpcyYmdGhpcy5fdHJhbnNpdGlvbkVuZCgpfSxfY2FsY1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVt0aGlzLmRpbWVuc2lvbl0rInB4In19KTt2YXIgWmd0PVFgCi8qIE1vc3QgY29tbW9uIHVzZWQgZmxleCBzdHlsZXMqLwo8ZG9tLW1vZHVsZSBpZD0iaXJvbi1mbGV4Ij4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIC5sYXlvdXQuaG9yaXpvbnRhbCwKICAgICAgLmxheW91dC52ZXJ0aWNhbCB7CiAgICAgICAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1mbGV4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuaW5saW5lIHsKICAgICAgICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1pbmxpbmUtZmxleDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgfQoKICAgICAgLmxheW91dC5ob3Jpem9udGFsIHsKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICAtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgfQoKICAgICAgLmxheW91dC52ZXJ0aWNhbCB7CiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIH0KCiAgICAgIC5sYXlvdXQud3JhcCB7CiAgICAgICAgLW1zLWZsZXgtd3JhcDogd3JhcDsKICAgICAgICAtd2Via2l0LWZsZXgtd3JhcDogd3JhcDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQubm8td3JhcCB7CiAgICAgICAgLW1zLWZsZXgtd3JhcDogbm93cmFwOwogICAgICAgIC13ZWJraXQtZmxleC13cmFwOiBub3dyYXA7CiAgICAgICAgZmxleC13cmFwOiBub3dyYXA7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuY2VudGVyLAogICAgICAubGF5b3V0LmNlbnRlci1jZW50ZXIgewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuY2VudGVyLWp1c3RpZmllZCwKICAgICAgLmxheW91dC5jZW50ZXItY2VudGVyIHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmZsZXggewogICAgICAgIC1tcy1mbGV4OiAxIDEgMC4wMDAwMDAwMDFweDsKICAgICAgICAtd2Via2l0LWZsZXg6IDE7CiAgICAgICAgZmxleDogMTsKICAgICAgICAtd2Via2l0LWZsZXgtYmFzaXM6IDAuMDAwMDAwMDAxcHg7CiAgICAgICAgZmxleC1iYXNpczogMC4wMDAwMDAwMDFweDsKICAgICAgfQoKICAgICAgLmZsZXgtYXV0byB7CiAgICAgICAgLW1zLWZsZXg6IDEgMSBhdXRvOwogICAgICAgIC13ZWJraXQtZmxleDogMSAxIGF1dG87CiAgICAgICAgZmxleDogMSAxIGF1dG87CiAgICAgIH0KCiAgICAgIC5mbGV4LW5vbmUgewogICAgICAgIC1tcy1mbGV4OiBub25lOwogICAgICAgIC13ZWJraXQtZmxleDogbm9uZTsKICAgICAgICBmbGV4OiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KLyogQmFzaWMgZmxleGJveCByZXZlcnNlIHN0eWxlcyAqLwo8ZG9tLW1vZHVsZSBpZD0iaXJvbi1mbGV4LXJldmVyc2UiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLmxheW91dC5ob3Jpem9udGFsLXJldmVyc2UsCiAgICAgIC5sYXlvdXQudmVydGljYWwtcmV2ZXJzZSB7CiAgICAgICAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1mbGV4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuaG9yaXpvbnRhbC1yZXZlcnNlIHsKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsKICAgICAgfQoKICAgICAgLmxheW91dC52ZXJ0aWNhbC1yZXZlcnNlIHsKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTsKICAgICAgfQoKICAgICAgLmxheW91dC53cmFwLXJldmVyc2UgewogICAgICAgIC1tcy1mbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZTsKICAgICAgICAtd2Via2l0LWZsZXgtd3JhcDogd3JhcC1yZXZlcnNlOwogICAgICAgIGZsZXgtd3JhcDogd3JhcC1yZXZlcnNlOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KLyogRmxleGJveCBhbGlnbm1lbnQgKi8KPGRvbS1tb2R1bGUgaWQ9Imlyb24tZmxleC1hbGlnbm1lbnQiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLyoqCiAgICAgICAqIEFsaWdubWVudCBpbiBjcm9zcyBheGlzLgogICAgICAgKi8KICAgICAgLmxheW91dC5zdGFydCB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IHN0YXJ0OwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuY2VudGVyLAogICAgICAubGF5b3V0LmNlbnRlci1jZW50ZXIgewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuZW5kIHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICAgICAgfQoKICAgICAgLmxheW91dC5iYXNlbGluZSB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGJhc2VsaW5lOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIEFsaWdubWVudCBpbiBtYWluIGF4aXMuCiAgICAgICAqLwogICAgICAubGF5b3V0LnN0YXJ0LWp1c3RpZmllZCB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICB9CgogICAgICAubGF5b3V0LmNlbnRlci1qdXN0aWZpZWQsCiAgICAgIC5sYXlvdXQuY2VudGVyLWNlbnRlciB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyOwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuZW5kLWp1c3RpZmllZCB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogZW5kOwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICB9CgogICAgICAubGF5b3V0LmFyb3VuZC1qdXN0aWZpZWQgewogICAgICAgIC1tcy1mbGV4LXBhY2s6IGRpc3RyaWJ1dGU7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgfQoKICAgICAgLmxheW91dC5qdXN0aWZpZWQgewogICAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9CgogICAgICAvKioKICAgICAgICogU2VsZiBhbGlnbm1lbnQuCiAgICAgICAqLwogICAgICAuc2VsZi1zdGFydCB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBmbGV4LXN0YXJ0OwogICAgICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgIH0KCiAgICAgIC5zZWxmLWNlbnRlciB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5zZWxmLWVuZCB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGZsZXgtZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgICAgICAgYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgICAgIH0KCiAgICAgIC5zZWxmLXN0cmV0Y2ggewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogc3RyZXRjaDsKICAgICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICB9CgogICAgICAuc2VsZi1iYXNlbGluZSB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGJhc2VsaW5lOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogYmFzZWxpbmU7CiAgICAgICAgYWxpZ24tc2VsZjogYmFzZWxpbmU7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBtdWx0aS1saW5lIGFsaWdubWVudCBpbiBtYWluIGF4aXMuCiAgICAgICAqLwogICAgICAubGF5b3V0LnN0YXJ0LWFsaWduZWQgewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazogc3RhcnQ7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuZW5kLWFsaWduZWQgewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazogZW5kOyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICB9CgogICAgICAubGF5b3V0LmNlbnRlci1hbGlnbmVkIHsKICAgICAgICAtbXMtZmxleC1saW5lLXBhY2s6IGNlbnRlcjsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogY2VudGVyOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogY2VudGVyOwogICAgICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmxheW91dC5iZXR3ZWVuLWFsaWduZWQgewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazoganVzdGlmeTsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgfQoKICAgICAgLmxheW91dC5hcm91bmQtYWxpZ25lZCB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBkaXN0cmlidXRlOyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgICAgYWxpZ24tY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KLyogTm9uLWZsZXhib3ggcG9zaXRpb25pbmcgaGVscGVyIHN0eWxlcyAqLwo8ZG9tLW1vZHVsZSBpZD0iaXJvbi1mbGV4LWZhY3RvcnMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLmZsZXgsCiAgICAgIC5mbGV4LTEgewogICAgICAgIC1tcy1mbGV4OiAxIDEgMC4wMDAwMDAwMDFweDsKICAgICAgICAtd2Via2l0LWZsZXg6IDE7CiAgICAgICAgZmxleDogMTsKICAgICAgICAtd2Via2l0LWZsZXgtYmFzaXM6IDAuMDAwMDAwMDAxcHg7CiAgICAgICAgZmxleC1iYXNpczogMC4wMDAwMDAwMDFweDsKICAgICAgfQoKICAgICAgLmZsZXgtMiB7CiAgICAgICAgLW1zLWZsZXg6IDI7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAyOwogICAgICAgIGZsZXg6IDI7CiAgICAgIH0KCiAgICAgIC5mbGV4LTMgewogICAgICAgIC1tcy1mbGV4OiAzOwogICAgICAgIC13ZWJraXQtZmxleDogMzsKICAgICAgICBmbGV4OiAzOwogICAgICB9CgogICAgICAuZmxleC00IHsKICAgICAgICAtbXMtZmxleDogNDsKICAgICAgICAtd2Via2l0LWZsZXg6IDQ7CiAgICAgICAgZmxleDogNDsKICAgICAgfQoKICAgICAgLmZsZXgtNSB7CiAgICAgICAgLW1zLWZsZXg6IDU7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA1OwogICAgICAgIGZsZXg6IDU7CiAgICAgIH0KCiAgICAgIC5mbGV4LTYgewogICAgICAgIC1tcy1mbGV4OiA2OwogICAgICAgIC13ZWJraXQtZmxleDogNjsKICAgICAgICBmbGV4OiA2OwogICAgICB9CgogICAgICAuZmxleC03IHsKICAgICAgICAtbXMtZmxleDogNzsKICAgICAgICAtd2Via2l0LWZsZXg6IDc7CiAgICAgICAgZmxleDogNzsKICAgICAgfQoKICAgICAgLmZsZXgtOCB7CiAgICAgICAgLW1zLWZsZXg6IDg7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA4OwogICAgICAgIGZsZXg6IDg7CiAgICAgIH0KCiAgICAgIC5mbGV4LTkgewogICAgICAgIC1tcy1mbGV4OiA5OwogICAgICAgIC13ZWJraXQtZmxleDogOTsKICAgICAgICBmbGV4OiA5OwogICAgICB9CgogICAgICAuZmxleC0xMCB7CiAgICAgICAgLW1zLWZsZXg6IDEwOwogICAgICAgIC13ZWJraXQtZmxleDogMTA7CiAgICAgICAgZmxleDogMTA7CiAgICAgIH0KCiAgICAgIC5mbGV4LTExIHsKICAgICAgICAtbXMtZmxleDogMTE7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxMTsKICAgICAgICBmbGV4OiAxMTsKICAgICAgfQoKICAgICAgLmZsZXgtMTIgewogICAgICAgIC1tcy1mbGV4OiAxMjsKICAgICAgICAtd2Via2l0LWZsZXg6IDEyOwogICAgICAgIGZsZXg6IDEyOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KPGRvbS1tb2R1bGUgaWQ9Imlyb24tcG9zaXRpb25pbmciPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLmJsb2NrIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgW2hpZGRlbl0gewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLmludmlzaWJsZSB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC5yZWxhdGl2ZSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuZml0IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICB9CgogICAgICBib2R5LmZ1bGxibGVlZCB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGhlaWdodDogMTAwdmg7CiAgICAgIH0KCiAgICAgIC5zY3JvbGwgewogICAgICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfQoKICAgICAgLyogZml4ZWQgcG9zaXRpb24gKi8KICAgICAgLmZpeGVkLWJvdHRvbSwKICAgICAgLmZpeGVkLWxlZnQsCiAgICAgIC5maXhlZC1yaWdodCwKICAgICAgLmZpeGVkLXRvcCB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICB9CgogICAgICAuZml4ZWQtdG9wIHsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgfQoKICAgICAgLmZpeGVkLXJpZ2h0IHsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICB9CgogICAgICAuZml4ZWQtYm90dG9tIHsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgfQoKICAgICAgLmZpeGVkLWxlZnQgewogICAgICAgIHRvcDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CmA7Wmd0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoWmd0LmNvbnRlbnQpO3ZhciBKZ3Q9UWAKPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBbaGlkZGVuXSB7CiAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KICA8L3N0eWxlPgo8L2N1c3RvbS1zdHlsZT4KPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBodG1sIHsKCiAgICAgIC0tbGF5b3V0OiB7CiAgICAgICAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1mbGV4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH07CgogICAgICAtLWxheW91dC1pbmxpbmU6IHsKICAgICAgICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1pbmxpbmUtZmxleDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWhvcml6b250YWw6IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQ7CgogICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtaG9yaXpvbnRhbC1yZXZlcnNlOiB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0OwoKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXZlcnRpY2FsOiB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0OwoKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXZlcnRpY2FsLXJldmVyc2U6IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQ7CgogICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7CiAgICAgICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtd3JhcDogewogICAgICAgIC1tcy1mbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgLXdlYmtpdC1mbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtd3JhcC1yZXZlcnNlOiB7CiAgICAgICAgLW1zLWZsZXgtd3JhcDogd3JhcC1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC13cmFwOiB3cmFwLXJldmVyc2U7CiAgICAgICAgZmxleC13cmFwOiB3cmFwLXJldmVyc2U7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LWF1dG86IHsKICAgICAgICAtbXMtZmxleDogMSAxIGF1dG87CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxIDEgYXV0bzsKICAgICAgICBmbGV4OiAxIDEgYXV0bzsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtbm9uZTogewogICAgICAgIC1tcy1mbGV4OiBub25lOwogICAgICAgIC13ZWJraXQtZmxleDogbm9uZTsKICAgICAgICBmbGV4OiBub25lOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleDogewogICAgICAgIC1tcy1mbGV4OiAxIDEgMC4wMDAwMDAwMDFweDsKICAgICAgICAtd2Via2l0LWZsZXg6IDE7CiAgICAgICAgZmxleDogMTsKICAgICAgICAtd2Via2l0LWZsZXgtYmFzaXM6IDAuMDAwMDAwMDAxcHg7CiAgICAgICAgZmxleC1iYXNpczogMC4wMDAwMDAwMDFweDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtMjogewogICAgICAgIC1tcy1mbGV4OiAyOwogICAgICAgIC13ZWJraXQtZmxleDogMjsKICAgICAgICBmbGV4OiAyOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC0zOiB7CiAgICAgICAgLW1zLWZsZXg6IDM7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAzOwogICAgICAgIGZsZXg6IDM7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTQ6IHsKICAgICAgICAtbXMtZmxleDogNDsKICAgICAgICAtd2Via2l0LWZsZXg6IDQ7CiAgICAgICAgZmxleDogNDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtNTogewogICAgICAgIC1tcy1mbGV4OiA1OwogICAgICAgIC13ZWJraXQtZmxleDogNTsKICAgICAgICBmbGV4OiA1OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC02OiB7CiAgICAgICAgLW1zLWZsZXg6IDY7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA2OwogICAgICAgIGZsZXg6IDY7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTc6IHsKICAgICAgICAtbXMtZmxleDogNzsKICAgICAgICAtd2Via2l0LWZsZXg6IDc7CiAgICAgICAgZmxleDogNzsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtODogewogICAgICAgIC1tcy1mbGV4OiA4OwogICAgICAgIC13ZWJraXQtZmxleDogODsKICAgICAgICBmbGV4OiA4OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC05OiB7CiAgICAgICAgLW1zLWZsZXg6IDk7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA5OwogICAgICAgIGZsZXg6IDk7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTEwOiB7CiAgICAgICAgLW1zLWZsZXg6IDEwOwogICAgICAgIC13ZWJraXQtZmxleDogMTA7CiAgICAgICAgZmxleDogMTA7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTExOiB7CiAgICAgICAgLW1zLWZsZXg6IDExOwogICAgICAgIC13ZWJraXQtZmxleDogMTE7CiAgICAgICAgZmxleDogMTE7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTEyOiB7CiAgICAgICAgLW1zLWZsZXg6IDEyOwogICAgICAgIC13ZWJraXQtZmxleDogMTI7CiAgICAgICAgZmxleDogMTI7CiAgICAgIH07CgogICAgICAvKiBhbGlnbm1lbnQgaW4gY3Jvc3MgYXhpcyAqLwoKICAgICAgLS1sYXlvdXQtc3RhcnQ6IHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWNlbnRlcjogewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH07CgogICAgICAtLWxheW91dC1lbmQ6IHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWJhc2VsaW5lOiB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGJhc2VsaW5lOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgfTsKCiAgICAgIC8qIGFsaWdubWVudCBpbiBtYWluIGF4aXMgKi8KCiAgICAgIC0tbGF5b3V0LXN0YXJ0LWp1c3RpZmllZDogewogICAgICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0OwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWNlbnRlci1qdXN0aWZpZWQ6IHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWVuZC1qdXN0aWZpZWQ6IHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBlbmQ7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1hcm91bmQtanVzdGlmaWVkOiB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogZGlzdHJpYnV0ZTsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtanVzdGlmaWVkOiB7CiAgICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIH07CgogICAgICAtLWxheW91dC1jZW50ZXItY2VudGVyOiB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWp1c3RpZmllZDsKICAgICAgfTsKCiAgICAgIC8qIHNlbGYgYWxpZ25tZW50ICovCgogICAgICAtLWxheW91dC1zZWxmLXN0YXJ0OiB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBmbGV4LXN0YXJ0OwogICAgICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1zZWxmLWNlbnRlcjogewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtc2VsZi1lbmQ6IHsKICAgICAgICAtbXMtYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBmbGV4LWVuZDsKICAgICAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXNlbGYtc3RyZXRjaDogewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogc3RyZXRjaDsKICAgICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtc2VsZi1iYXNlbGluZTogewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBiYXNlbGluZTsKICAgICAgICAtd2Via2l0LWFsaWduLXNlbGY6IGJhc2VsaW5lOwogICAgICAgIGFsaWduLXNlbGY6IGJhc2VsaW5lOwogICAgICB9OwoKICAgICAgLyogbXVsdGktbGluZSBhbGlnbm1lbnQgaW4gbWFpbiBheGlzICovCgogICAgICAtLWxheW91dC1zdGFydC1hbGlnbmVkOiB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBzdGFydDsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogZmxleC1zdGFydDsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAgYWxpZ24tY29udGVudDogZmxleC1zdGFydDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWVuZC1hbGlnbmVkOiB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBlbmQ7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogZmxleC1lbmQ7CiAgICAgICAgYWxpZ24tY29udGVudDogZmxleC1lbmQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1jZW50ZXItYWxpZ25lZDogewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazogY2VudGVyOyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYWxpZ24tY29udGVudDogY2VudGVyOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtYmV0d2Vlbi1hbGlnbmVkOiB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBqdXN0aWZ5OyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBhbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtYXJvdW5kLWFsaWduZWQ6IHsKICAgICAgICAtbXMtZmxleC1saW5lLXBhY2s6IGRpc3RyaWJ1dGU7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgICBhbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgIH07CgogICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAgICAgICAgICAgT3RoZXIgTGF5b3V0CiAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgogICAgICAtLWxheW91dC1ibG9jazogewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtaW52aXNpYmxlOiB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuICFpbXBvcnRhbnQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1yZWxhdGl2ZTogewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZpdDogewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH07CgogICAgICAtLWxheW91dC1zY3JvbGw6IHsKICAgICAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH07CgogICAgICAtLWxheW91dC1mdWxsYmxlZWQ6IHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgaGVpZ2h0OiAxMDB2aDsKICAgICAgfTsKCiAgICAgIC8qIGZpeGVkIHBvc2l0aW9uICovCgogICAgICAtLWxheW91dC1maXhlZC10b3A6IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgIH07CgogICAgICAtLWxheW91dC1maXhlZC1yaWdodDogewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZml4ZWQtYm90dG9tOiB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZml4ZWQtbGVmdDogewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH07CgogICAgfQogIDwvc3R5bGU+CjwvY3VzdG9tLXN0eWxlPmA7Smd0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoSmd0LmNvbnRlbnQpO3ZhciBRZ3Q9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtRZ3QudGV4dENvbnRlbnQ9IltoaWRkZW5dIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9Ijtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKFFndCk7dmFyIGdvPWNsYXNze2NvbnN0cnVjdG9yKHQpe2dvWyIgIl0odCksdGhpcy50eXBlPXQmJnQudHlwZXx8ImRlZmF1bHQiLHRoaXMua2V5PXQmJnQua2V5LHQmJiJ2YWx1ZSJpbiB0JiYodGhpcy52YWx1ZT10LnZhbHVlKX1nZXQgdmFsdWUoKXt2YXIgdD10aGlzLnR5cGUscj10aGlzLmtleTtpZih0JiZyKXJldHVybiBnby50eXBlc1t0XSYmZ28udHlwZXNbdF1bcl19c2V0IHZhbHVlKHQpe3ZhciByPXRoaXMudHlwZSxuPXRoaXMua2V5O3ImJm4mJihyPWdvLnR5cGVzW3JdPWdvLnR5cGVzW3JdfHx7fSx0PT1udWxsP2RlbGV0ZSByW25dOnJbbl09dCl9Z2V0IGxpc3QoKXt2YXIgdD10aGlzLnR5cGU7aWYodCl7dmFyIHI9Z28udHlwZXNbdGhpcy50eXBlXTtyZXR1cm4gcj9PYmplY3Qua2V5cyhyKS5tYXAoZnVuY3Rpb24obil7cmV0dXJuIF9iZVt0aGlzLnR5cGVdW25dfSx0aGlzKTpbXX19YnlLZXkodCl7cmV0dXJuIHRoaXMua2V5PXQsdGhpcy52YWx1ZX19O2dvWyIgIl09ZnVuY3Rpb24oKXt9O2dvLnR5cGVzPXt9O3ZhciBfYmU9Z28udHlwZXM7WXQoe2lzOiJpcm9uLW1ldGEiLHByb3BlcnRpZXM6e3R5cGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJkZWZhdWx0In0sa2V5Ont0eXBlOlN0cmluZ30sdmFsdWU6e3R5cGU6U3RyaW5nLG5vdGlmeTohMH0sc2VsZjp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfc2VsZkNoYW5nZWQifSxfX21ldGE6e3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX19jb21wdXRlTWV0YSh0eXBlLCBrZXksIHZhbHVlKSJ9fSxob3N0QXR0cmlidXRlczp7aGlkZGVuOiEwfSxfX2NvbXB1dGVNZXRhOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1uZXcgZ28oe3R5cGU6ZSxrZXk6dH0pO3JldHVybiByIT09dm9pZCAwJiZyIT09bi52YWx1ZT9uLnZhbHVlPXI6dGhpcy52YWx1ZSE9PW4udmFsdWUmJih0aGlzLnZhbHVlPW4udmFsdWUpLG59LGdldCBsaXN0KCl7cmV0dXJuIHRoaXMuX19tZXRhJiZ0aGlzLl9fbWV0YS5saXN0fSxfc2VsZkNoYW5nZWQ6ZnVuY3Rpb24oZSl7ZSYmKHRoaXMudmFsdWU9dGhpcyl9LGJ5S2V5OmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZ28oe3R5cGU6dGhpcy50eXBlLGtleTplfSkudmFsdWV9fSk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWlubGluZTsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWNlbnRlcjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CgogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CgogICAgICAgIGZpbGw6IHZhcigtLWlyb24taWNvbi1maWxsLWNvbG9yLCBjdXJyZW50Y29sb3IpOwogICAgICAgIHN0cm9rZTogdmFyKC0taXJvbi1pY29uLXN0cm9rZS1jb2xvciwgbm9uZSk7CgogICAgICAgIHdpZHRoOiB2YXIoLS1pcm9uLWljb24td2lkdGgsIDI0cHgpOwogICAgICAgIGhlaWdodDogdmFyKC0taXJvbi1pY29uLWhlaWdodCwgMjRweCk7CiAgICAgICAgQGFwcGx5IC0taXJvbi1pY29uOwogICAgICB9CgogICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CmAsaXM6Imlyb24taWNvbiIscHJvcGVydGllczp7aWNvbjp7dHlwZTpTdHJpbmd9LHRoZW1lOnt0eXBlOlN0cmluZ30sc3JjOnt0eXBlOlN0cmluZ30sX21ldGE6e3ZhbHVlOk9hLmNyZWF0ZSgiaXJvbi1tZXRhIix7dHlwZToiaWNvbnNldCJ9KX19LG9ic2VydmVyczpbIl91cGRhdGVJY29uKF9tZXRhLCBpc0F0dGFjaGVkKSIsIl91cGRhdGVJY29uKHRoZW1lLCBpc0F0dGFjaGVkKSIsIl9zcmNDaGFuZ2VkKHNyYywgaXNBdHRhY2hlZCkiLCJfaWNvbkNoYW5nZWQoaWNvbiwgaXNBdHRhY2hlZCkiXSxfREVGQVVMVF9JQ09OU0VUOiJpY29ucyIsX2ljb25DaGFuZ2VkOmZ1bmN0aW9uKGUpe3ZhciB0PShlfHwiIikuc3BsaXQoIjoiKTt0aGlzLl9pY29uTmFtZT10LnBvcCgpLHRoaXMuX2ljb25zZXROYW1lPXQucG9wKCl8fHRoaXMuX0RFRkFVTFRfSUNPTlNFVCx0aGlzLl91cGRhdGVJY29uKCl9LF9zcmNDaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMuX3VwZGF0ZUljb24oKX0sX3VzZXNJY29uc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWNvbnx8IXRoaXMuc3JjfSxfdXBkYXRlSWNvbjpmdW5jdGlvbigpe3RoaXMuX3VzZXNJY29uc2V0KCk/KHRoaXMuX2ltZyYmdGhpcy5faW1nLnBhcmVudE5vZGUmJnp0KHRoaXMucm9vdCkucmVtb3ZlQ2hpbGQodGhpcy5faW1nKSx0aGlzLl9pY29uTmFtZT09PSIiP3RoaXMuX2ljb25zZXQmJnRoaXMuX2ljb25zZXQucmVtb3ZlSWNvbih0aGlzKTp0aGlzLl9pY29uc2V0TmFtZSYmdGhpcy5fbWV0YSYmKHRoaXMuX2ljb25zZXQ9dGhpcy5fbWV0YS5ieUtleSh0aGlzLl9pY29uc2V0TmFtZSksdGhpcy5faWNvbnNldD8odGhpcy5faWNvbnNldC5hcHBseUljb24odGhpcyx0aGlzLl9pY29uTmFtZSx0aGlzLnRoZW1lKSx0aGlzLnVubGlzdGVuKHdpbmRvdywiaXJvbi1pY29uc2V0LWFkZGVkIiwiX3VwZGF0ZUljb24iKSk6dGhpcy5saXN0ZW4od2luZG93LCJpcm9uLWljb25zZXQtYWRkZWQiLCJfdXBkYXRlSWNvbiIpKSk6KHRoaXMuX2ljb25zZXQmJnRoaXMuX2ljb25zZXQucmVtb3ZlSWNvbih0aGlzKSx0aGlzLl9pbWd8fCh0aGlzLl9pbWc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIiksdGhpcy5faW1nLnN0eWxlLndpZHRoPSIxMDAlIix0aGlzLl9pbWcuc3R5bGUuaGVpZ2h0PSIxMDAlIix0aGlzLl9pbWcuZHJhZ2dhYmxlPSExKSx0aGlzLl9pbWcuc3JjPXRoaXMuc3JjLHp0KHRoaXMucm9vdCkuYXBwZW5kQ2hpbGQodGhpcy5faW1nKSl9fSk7WXQoe2lzOiJpcm9uLWljb25zZXQtc3ZnIixwcm9wZXJ0aWVzOntuYW1lOnt0eXBlOlN0cmluZyxvYnNlcnZlcjoiX25hbWVDaGFuZ2VkIn0sc2l6ZTp7dHlwZTpOdW1iZXIsdmFsdWU6MjR9LHJ0bE1pcnJvcmluZzp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSx1c2VHbG9iYWxSdGxBdHRyaWJ1dGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9tZXRhPW5ldyBnbyh7dHlwZToiaWNvbnNldCIsa2V5Om51bGwsdmFsdWU6bnVsbH0pfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuc3R5bGUuZGlzcGxheT0ibm9uZSJ9LGdldEljb25OYW1lczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pY29ucz10aGlzLl9jcmVhdGVJY29uTWFwKCksT2JqZWN0LmtleXModGhpcy5faWNvbnMpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5uYW1lKyI6IitlfSx0aGlzKX0sYXBwbHlJY29uOmZ1bmN0aW9uKGUsdCl7dGhpcy5yZW1vdmVJY29uKGUpO3ZhciByPXRoaXMuX2Nsb25lSWNvbih0LHRoaXMucnRsTWlycm9yaW5nJiZ0aGlzLl90YXJnZXRJc1JUTChlKSk7aWYocil7dmFyIG49enQoZS5yb290fHxlKTtyZXR1cm4gbi5pbnNlcnRCZWZvcmUocixuLmNoaWxkTm9kZXNbMF0pLGUuX3N2Z0ljb249cn1yZXR1cm4gbnVsbH0scmVtb3ZlSWNvbjpmdW5jdGlvbihlKXtlLl9zdmdJY29uJiYoenQoZS5yb290fHxlKS5yZW1vdmVDaGlsZChlLl9zdmdJY29uKSxlLl9zdmdJY29uPW51bGwpfSxfdGFyZ2V0SXNSVEw6ZnVuY3Rpb24oZSl7aWYodGhpcy5fX3RhcmdldElzUlRMPT1udWxsKWlmKHRoaXMudXNlR2xvYmFsUnRsQXR0cmlidXRlKXt2YXIgdD1kb2N1bWVudC5ib2R5JiZkb2N1bWVudC5ib2R5Lmhhc0F0dHJpYnV0ZSgiZGlyIik/ZG9jdW1lbnQuYm9keTpkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7dGhpcy5fX3RhcmdldElzUlRMPXQuZ2V0QXR0cmlidXRlKCJkaXIiKT09PSJydGwifWVsc2UgZSYmZS5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFJiYoZT1lLmhvc3QpLHRoaXMuX190YXJnZXRJc1JUTD1lJiZ3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlKS5kaXJlY3Rpb249PT0icnRsIjtyZXR1cm4gdGhpcy5fX3RhcmdldElzUlRMfSxfbmFtZUNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLl9tZXRhLnZhbHVlPW51bGwsdGhpcy5fbWV0YS5rZXk9dGhpcy5uYW1lLHRoaXMuX21ldGEudmFsdWU9dGhpcyx0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5maXJlKCJpcm9uLWljb25zZXQtYWRkZWQiLHRoaXMse25vZGU6d2luZG93fSl9KX0sX2NyZWF0ZUljb25NYXA6ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiB6dCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKCJbaWRdIikuZm9yRWFjaChmdW5jdGlvbih0KXtlW3QuaWRdPXR9KSxlfSxfY2xvbmVJY29uOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2ljb25zPXRoaXMuX2ljb25zfHx0aGlzLl9jcmVhdGVJY29uTWFwKCksdGhpcy5fcHJlcGFyZVN2Z0Nsb25lKHRoaXMuX2ljb25zW2VdLHRoaXMuc2l6ZSx0KX0sX3ByZXBhcmVTdmdDbG9uZTpmdW5jdGlvbihlLHQscil7aWYoZSl7dmFyIG49ZS5jbG9uZU5vZGUoITApLGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInN2ZyIpLG89bi5nZXRBdHRyaWJ1dGUoInZpZXdCb3giKXx8IjAgMCAiK3QrIiAiK3QsYT0icG9pbnRlci1ldmVudHM6IG5vbmU7IGRpc3BsYXk6IGJsb2NrOyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyI7cmV0dXJuIHImJm4uaGFzQXR0cmlidXRlKCJtaXJyb3ItaW4tcnRsIikmJihhKz0iLXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoLTEsMSk7dHJhbnNmb3JtOnNjYWxlKC0xLDEpO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyOyIpLGkuc2V0QXR0cmlidXRlKCJ2aWV3Qm94IixvKSxpLnNldEF0dHJpYnV0ZSgicHJlc2VydmVBc3BlY3RSYXRpbyIsInhNaWRZTWlkIG1lZXQiKSxpLnNldEF0dHJpYnV0ZSgiZm9jdXNhYmxlIiwiZmFsc2UiKSxpLnN0eWxlLmNzc1RleHQ9YSxpLmFwcGVuZENoaWxkKG4pLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKSxpfXJldHVybiBudWxsfX0pO3ZhciB5YmU9UWA8aXJvbi1pY29uc2V0LXN2ZyBuYW1lPSJpbWFnZSIgc2l6ZT0iMjQiPgo8c3ZnPjxkZWZzPgo8ZyBpZD0iYWRkLWEtcGhvdG8iPjxwYXRoIGQ9Ik0zIDRWMWgydjNoM3YySDV2M0gzVjZIMFY0aDN6bTMgNlY3aDNWNGg3bDEuODMgMkgyMWMxLjEgMCAyIC45IDIgMnYxMmMwIDEuMS0uOSAyLTIgMkg1Yy0xLjEgMC0yLS45LTItMlYxMGgzem03IDljMi43NiAwIDUtMi4yNCA1LTVzLTIuMjQtNS01LTUtNSAyLjI0LTUgNSAyLjI0IDUgNSA1em0tMy4yLTVjMCAxLjc3IDEuNDMgMy4yIDMuMiAzLjJzMy4yLTEuNDMgMy4yLTMuMi0xLjQzLTMuMi0zLjItMy4yLTMuMiAxLjQzLTMuMiAzLjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWRkLXRvLXBob3RvcyI+PHBhdGggZD0iTTQgNkgydjE0YzAgMS4xLjkgMiAyIDJoMTR2LTJINFY2em0xNi00SDhjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptLTEgOWgtNHY0aC0ydi00SDlWOWg0VjVoMnY0aDR2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhZGp1c3QiPjxwYXRoIGQ9Ik0xMiAyQzYuNDkgMiAyIDYuNDkgMiAxMnM0LjQ5IDEwIDEwIDEwIDEwLTQuNDkgMTAtMTBTMTcuNTEgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHptMy04YzAgMS42Ni0xLjM0IDMtMyAzcy0zLTEuMzQtMy0zIDEuMzQtMyAzLTMgMyAxLjM0IDMgM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3Npc3RhbnQiPjxwYXRoIGQ9Ik0xOSAySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoNGwzIDMgMy0zaDRjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptLTUuMTIgMTAuODhMMTIgMTdsLTEuODgtNC4xMkw2IDExbDQuMTItMS44OEwxMiA1bDEuODggNC4xMkwxOCAxMWwtNC4xMiAxLjg4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFzc2lzdGFudC1waG90byI+PHBhdGggZD0iTTE0LjQgNkwxNCA0SDV2MTdoMnYtN2g1LjZsLjQgMmg3VjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXVkaW90cmFjayI+PHBhdGggZD0iTTEyIDN2OS4yOGMtLjQ3LS4xNy0uOTctLjI4LTEuNS0uMjhDOC4wMSAxMiA2IDE0LjAxIDYgMTYuNVM4LjAxIDIxIDEwLjUgMjFjMi4zMSAwIDQuMi0xLjc1IDQuNDUtNEgxNVY2aDRWM2gtN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJibHVyLWNpcmN1bGFyIj48cGF0aCBkPSJNMTAgOWMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0wIDRjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXpNNyA5LjVjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41em0zIDdjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41em0tMy0zYy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXptMy02Yy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXpNMTQgOWMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0wLTEuNWMuMjggMCAuNS0uMjIuNS0uNXMtLjIyLS41LS41LS41LS41LjIyLS41LjUuMjIuNS41LjV6bTMgNmMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6bTAtNGMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6TTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDIgMC04LTMuNTgtOC04czMuNTgtOCA4LTggOCAzLjU4IDggOC0zLjU4IDgtOCA4em0yLTMuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6bTAtMy41Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYmx1ci1saW5lYXIiPjxwYXRoIGQ9Ik01IDE3LjVjLjgzIDAgMS41LS42NyAxLjUtMS41cy0uNjctMS41LTEuNS0xLjUtMS41LjY3LTEuNSAxLjUuNjcgMS41IDEuNSAxLjV6TTkgMTNjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptMC00Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6TTMgMjFoMTh2LTJIM3Yyek01IDkuNWMuODMgMCAxLjUtLjY3IDEuNS0xLjVTNS44MyA2LjUgNSA2LjUgMy41IDcuMTcgMy41IDggNC4xNyA5LjUgNSA5LjV6bTAgNGMuODMgMCAxLjUtLjY3IDEuNS0xLjVzLS42Ny0xLjUtMS41LTEuNS0xLjUuNjctMS41IDEuNS42NyAxLjUgMS41IDEuNXpNOSAxN2MuNTUgMCAxLS40NSAxLTFzLS40NS0xLTEtMS0xIC40NS0xIDEgLjQ1IDEgMSAxem04LS41Yy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXpNMyAzdjJoMThWM0gzem0xNCA1LjVjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41em0wIDRjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41ek0xMyA5Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6bTAgNGMuNTUgMCAxLS40NSAxLTFzLS40NS0xLTEtMS0xIC40NS0xIDEgLjQ1IDEgMSAxem0wIDRjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJibHVyLW9mZiI+PHBhdGggZD0iTTE0IDdjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptLS4yIDQuNDhsLjIuMDJjLjgzIDAgMS41LS42NyAxLjUtMS41cy0uNjctMS41LTEuNS0xLjUtMS41LjY3LTEuNSAxLjVsLjAyLjJjLjA5LjY3LjYxIDEuMTkgMS4yOCAxLjI4ek0xNCAzLjVjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41em0tNCAwYy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXptMTEgN2MuMjggMCAuNS0uMjIuNS0uNXMtLjIyLS41LS41LS41LS41LjIyLS41LjUuMjIuNS41LjV6TTEwIDdjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptOCA4Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6bTAtNGMuNTUgMCAxLS40NSAxLTFzLS40NS0xLTEtMS0xIC40NS0xIDEgLjQ1IDEgMSAxem0wLTRjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptLTQgMTMuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6TTIuNSA1LjI3bDMuNzggMy43OEw2IDljLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xYzAtLjEtLjAzLS4xOS0uMDYtLjI4bDIuODEgMi44MWMtLjcxLjExLTEuMjUuNzMtMS4yNSAxLjQ3IDAgLjgzLjY3IDEuNSAxLjUgMS41Ljc0IDAgMS4zNi0uNTQgMS40Ny0xLjI1bDIuODEgMi44MWMtLjA5LS4wMy0uMTgtLjA2LS4yOC0uMDYtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTFjMC0uMS0uMDMtLjE5LS4wNi0uMjhsMy43OCAzLjc4TDIwIDIwLjIzIDMuNzcgNCAyLjUgNS4yN3pNMTAgMTdjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMTEtMy41Yy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXpNNiAxM2MtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xek0zIDkuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6bTcgMTFjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41ek02IDE3Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bS0zLTMuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYmx1ci1vbiI+PHBhdGggZD0iTTYgMTNjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMCA0Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTAtOGMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0tMyAuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6TTYgNWMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0xNSA1LjVjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41ek0xNCA3Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6bTAtMy41Yy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXptLTExIDEwYy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXptNyA3Yy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXptMC0xN2MuMjggMCAuNS0uMjIuNS0uNXMtLjIyLS41LS41LS41LS41LjIyLS41LjUuMjIuNS41LjV6TTEwIDdjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptMCA1LjVjLS44MyAwLTEuNS42Ny0xLjUgMS41cy42NyAxLjUgMS41IDEuNSAxLjUtLjY3IDEuNS0xLjUtLjY3LTEuNS0xLjUtMS41em04IC41Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTAgNGMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0wLThjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMC00Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTMgOC41Yy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXpNMTQgMTdjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMCAzLjVjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41em0tNC0xMmMtLjgzIDAtMS41LjY3LTEuNSAxLjVzLjY3IDEuNSAxLjUgMS41IDEuNS0uNjcgMS41LTEuNS0uNjctMS41LTEuNS0xLjV6bTAgOC41Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTQtNC41Yy0uODMgMC0xLjUuNjctMS41IDEuNXMuNjcgMS41IDEuNSAxLjUgMS41LS42NyAxLjUtMS41LS42Ny0xLjUtMS41LTEuNXptMC00Yy0uODMgMC0xLjUuNjctMS41IDEuNXMuNjcgMS41IDEuNSAxLjUgMS41LS42NyAxLjUtMS41LS42Ny0xLjUtMS41LTEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTEiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjEwIj48L2NpcmNsZT48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTIiPjxwYXRoIGQ9Ik0xMCAyYy0xLjgyIDAtMy41My41LTUgMS4zNUM3Ljk5IDUuMDggMTAgOC4zIDEwIDEycy0yLjAxIDYuOTItNSA4LjY1QzYuNDcgMjEuNSA4LjE4IDIyIDEwIDIyYzUuNTIgMCAxMC00LjQ4IDEwLTEwUzE1LjUyIDIgMTAgMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTMiPjxwYXRoIGQ9Ik05IDJjLTEuMDUgMC0yLjA1LjE2LTMgLjQ2IDQuMDYgMS4yNyA3IDUuMDYgNyA5LjU0IDAgNC40OC0yLjk0IDguMjctNyA5LjU0Ljk1LjMgMS45NS40NiAzIC40NiA1LjUyIDAgMTAtNC40OCAxMC0xMFMxNC41MiAyIDkgMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTQiPjxwYXRoIGQ9Ik0yMCA4LjY5VjRoLTQuNjlMMTIgLjY5IDguNjkgNEg0djQuNjlMLjY5IDEyIDQgMTUuMzFWMjBoNC42OUwxMiAyMy4zMSAxNS4zMSAyMEgyMHYtNC42OUwyMy4zMSAxMiAyMCA4LjY5ek0xMiAxOGMtLjg5IDAtMS43NC0uMi0yLjUtLjU1QzExLjU2IDE2LjUgMTMgMTQuNDIgMTMgMTJzLTEuNDQtNC41LTMuNS01LjQ1QzEwLjI2IDYuMiAxMS4xMSA2IDEyIDZjMy4zMSAwIDYgMi42OSA2IDZzLTIuNjkgNi02IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYnJpZ2h0bmVzcy01Ij48cGF0aCBkPSJNMjAgMTUuMzFMMjMuMzEgMTIgMjAgOC42OVY0aC00LjY5TDEyIC42OSA4LjY5IDRINHY0LjY5TC42OSAxMiA0IDE1LjMxVjIwaDQuNjlMMTIgMjMuMzEgMTUuMzEgMjBIMjB2LTQuNjl6TTEyIDE4Yy0zLjMxIDAtNi0yLjY5LTYtNnMyLjY5LTYgNi02IDYgMi42OSA2IDYtMi42OSA2LTYgNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTYiPjxwYXRoIGQ9Ik0yMCAxNS4zMUwyMy4zMSAxMiAyMCA4LjY5VjRoLTQuNjlMMTIgLjY5IDguNjkgNEg0djQuNjlMLjY5IDEyIDQgMTUuMzFWMjBoNC42OUwxMiAyMy4zMSAxNS4zMSAyMEgyMHYtNC42OXpNMTIgMThWNmMzLjMxIDAgNiAyLjY5IDYgNnMtMi42OSA2LTYgNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTciPjxwYXRoIGQ9Ik0yMCA4LjY5VjRoLTQuNjlMMTIgLjY5IDguNjkgNEg0djQuNjlMLjY5IDEyIDQgMTUuMzFWMjBoNC42OUwxMiAyMy4zMSAxNS4zMSAyMEgyMHYtNC42OUwyMy4zMSAxMiAyMCA4LjY5ek0xMiAxOGMtMy4zMSAwLTYtMi42OS02LTZzMi42OS02IDYtNiA2IDIuNjkgNiA2LTIuNjkgNi02IDZ6bTAtMTBjLTIuMjEgMC00IDEuNzktNCA0czEuNzkgNCA0IDQgNC0xLjc5IDQtNC0xLjc5LTQtNC00eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJyb2tlbi1pbWFnZSI+PHBhdGggZD0iTTIxIDV2Ni41OWwtMy0zLjAxLTQgNC4wMS00LTQtNCA0LTMtMy4wMVY1YzAtMS4xLjktMiAyLTJoMTRjMS4xIDAgMiAuOSAyIDJ6bS0zIDYuNDJsMyAzLjAxVjE5YzAgMS4xLS45IDItMiAySDVjLTEuMSAwLTItLjktMi0ydi02LjU4bDMgMi45OSA0LTQgNCA0IDQtMy45OXoiPjwvcGF0aD48L2c+CjxnIGlkPSJicnVzaCI+PHBhdGggZD0iTTcgMTRjLTEuNjYgMC0zIDEuMzQtMyAzIDAgMS4zMS0xLjE2IDItMiAyIC45MiAxLjIyIDIuNDkgMiA0IDIgMi4yMSAwIDQtMS43OSA0LTQgMC0xLjY2LTEuMzQtMy0zLTN6bTEzLjcxLTkuMzdsLTEuMzQtMS4zNGMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBMOSAxMi4yNSAxMS43NSAxNWw4Ljk2LTguOTZjLjM5LS4zOS4zOS0xLjAyIDAtMS40MXoiPjwvcGF0aD48L2c+CjxnIGlkPSJidXJzdC1tb2RlIj48cGF0aCBkPSJNMSA1aDJ2MTRIMXptNCAwaDJ2MTRINXptMTcgMEgxMGMtLjU1IDAtMSAuNDUtMSAxdjEyYzAgLjU1LjQ1IDEgMSAxaDEyYy41NSAwIDEtLjQ1IDEtMVY2YzAtLjU1LS40NS0xLTEtMXpNMTEgMTdsMi41LTMuMTVMMTUuMjkgMTZsMi41LTMuMjJMMjEgMTdIMTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FtZXJhIj48cGF0aCBkPSJNOS40IDEwLjVsNC43Ny04LjI2QzEzLjQ3IDIuMDkgMTIuNzUgMiAxMiAyYy0yLjQgMC00LjYuODUtNi4zMiAyLjI1bDMuNjYgNi4zNS4wNi0uMXpNMjEuNTQgOWMtLjkyLTIuOTItMy4xNS01LjI2LTYtNi4zNEwxMS44OCA5aDkuNjZ6bS4yNiAxaC03LjQ5bC4yOS41IDQuNzYgOC4yNUMyMSAxNi45NyAyMiAxNC42MSAyMiAxMmMwLS42OS0uMDctMS4zNS0uMi0yek04LjU0IDEybC0zLjktNi43NUMzLjAxIDcuMDMgMiA5LjM5IDIgMTJjMCAuNjkuMDcgMS4zNS4yIDJoNy40OWwtMS4xNS0yem0tNi4wOCAzYy45MiAyLjkyIDMuMTUgNS4yNiA2IDYuMzRMMTIuMTIgMTVIMi40NnptMTEuMjcgMGwtMy45IDYuNzZjLjcuMTUgMS40Mi4yNCAyLjE3LjI0IDIuNCAwIDQuNi0uODUgNi4zMi0yLjI1bC0zLjY2LTYuMzUtLjkzIDEuNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYW1lcmEtYWx0Ij48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIzLjIiPjwvY2lyY2xlPjxwYXRoIGQ9Ik05IDJMNy4xNyA0SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMmgtMy4xN0wxNSAySDl6bTMgMTVjLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNS0yLjI0IDUtNSA1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNhbWVyYS1mcm9udCI+PHBhdGggZD0iTTEwIDIwSDV2Mmg1djJsMy0zLTMtM3Yyem00IDB2Mmg1di0yaC01ek0xMiA4YzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMi0xLjk5LjktMS45OSAyUzEwLjkgOCAxMiA4em01LThIN0M1LjkgMCA1IC45IDUgMnYxNGMwIDEuMS45IDIgMiAyaDEwYzEuMSAwIDItLjkgMi0yVjJjMC0xLjEtLjktMi0yLTJ6TTcgMmgxMHYxMC41YzAtMS42Ny0zLjMzLTIuNS01LTIuNXMtNSAuODMtNSAyLjVWMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYW1lcmEtcmVhciI+PHBhdGggZD0iTTEwIDIwSDV2Mmg1djJsMy0zLTMtM3Yyem00IDB2Mmg1di0yaC01em0zLTIwSDdDNS45IDAgNSAuOSA1IDJ2MTRjMCAxLjEuOSAyIDIgMmgxMGMxLjEgMCAyLS45IDItMlYyYzAtMS4xLS45LTItMi0yem0tNSA2Yy0xLjExIDAtMi0uOS0yLTJzLjg5LTIgMS45OS0yIDIgLjkgMiAyQzE0IDUuMSAxMy4xIDYgMTIgNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYW1lcmEtcm9sbCI+PHBhdGggZD0iTTE0IDVjMC0xLjEtLjktMi0yLTJoLTFWMmMwLS41NS0uNDUtMS0xLTFINmMtLjU1IDAtMSAuNDUtMSAxdjFINGMtMS4xIDAtMiAuOS0yIDJ2MTVjMCAxLjEuOSAyIDIgMmg4YzEuMSAwIDItLjkgMi0yaDhWNWgtOHptLTIgMTNoLTJ2LTJoMnYyem0wLTloLTJWN2gydjJ6bTQgOWgtMnYtMmgydjJ6bTAtOWgtMlY3aDJ2MnptNCA5aC0ydi0yaDJ2MnptMC05aC0yVjdoMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNlbnRlci1mb2N1cy1zdHJvbmciPjxwYXRoIGQ9Ik0xMiA4Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTQtMS43OS00LTQtNHptLTcgN0gzdjRjMCAxLjEuOSAyIDIgMmg0di0ySDV2LTR6TTUgNWg0VjNINWMtMS4xIDAtMiAuOS0yIDJ2NGgyVjV6bTE0LTJoLTR2Mmg0djRoMlY1YzAtMS4xLS45LTItMi0yem0wIDE2aC00djJoNGMxLjEgMCAyLS45IDItMnYtNGgtMnY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNlbnRlci1mb2N1cy13ZWFrIj48cGF0aCBkPSJNNSAxNUgzdjRjMCAxLjEuOSAyIDIgMmg0di0ySDV2LTR6TTUgNWg0VjNINWMtMS4xIDAtMiAuOS0yIDJ2NGgyVjV6bTE0LTJoLTR2Mmg0djRoMlY1YzAtMS4xLS45LTItMi0yem0wIDE2aC00djJoNGMxLjEgMCAyLS45IDItMnYtNGgtMnY0ek0xMiA4Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTQtMS43OS00LTQtNHptMCA2Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMiAyIC45IDIgMi0uOSAyLTIgMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb2xsZWN0aW9ucyI+PHBhdGggZD0iTTIyIDE2VjRjMC0xLjEtLjktMi0yLTJIOGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMnptLTExLTRsMi4wMyAyLjcxTDE2IDExbDQgNUg4bDMtNHpNMiA2djE0YzAgMS4xLjkgMiAyIDJoMTR2LTJINFY2SDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29sbGVjdGlvbnMtYm9va21hcmsiPjxwYXRoIGQ9Ik00IDZIMnYxNGMwIDEuMS45IDIgMiAyaDE0di0ySDRWNnptMTYtNEg4Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bTAgMTBsLTIuNS0xLjVMMTUgMTJWNGg1djh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29sb3ItbGVucyI+PHBhdGggZD0iTTEyIDNjLTQuOTcgMC05IDQuMDMtOSA5czQuMDMgOSA5IDljLjgzIDAgMS41LS42NyAxLjUtMS41IDAtLjM5LS4xNS0uNzQtLjM5LTEuMDEtLjIzLS4yNi0uMzgtLjYxLS4zOC0uOTkgMC0uODMuNjctMS41IDEuNS0xLjVIMTZjMi43NiAwIDUtMi4yNCA1LTUgMC00LjQyLTQuMDMtOC05LTh6bS01LjUgOWMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzUuNjcgOSA2LjUgOSA4IDkuNjcgOCAxMC41IDcuMzMgMTIgNi41IDEyem0zLTRDOC42NyA4IDggNy4zMyA4IDYuNVM4LjY3IDUgOS41IDVzMS41LjY3IDEuNSAxLjVTMTAuMzMgOCA5LjUgOHptNSAwYy0uODMgMC0xLjUtLjY3LTEuNS0xLjVTMTMuNjcgNSAxNC41IDVzMS41LjY3IDEuNSAxLjVTMTUuMzMgOCAxNC41IDh6bTMgNGMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzE2LjY3IDkgMTcuNSA5czEuNS42NyAxLjUgMS41LS42NyAxLjUtMS41IDEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb2xvcml6ZSI+PHBhdGggZD0iTTIwLjcxIDUuNjNsLTIuMzQtMi4zNGMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBsLTMuMTIgMy4xMi0xLjkzLTEuOTEtMS40MSAxLjQxIDEuNDIgMS40MkwzIDE2LjI1VjIxaDQuNzVsOC45Mi04LjkyIDEuNDIgMS40MiAxLjQxLTEuNDEtMS45Mi0xLjkyIDMuMTItMy4xMmMuNC0uNC40LTEuMDMuMDEtMS40MnpNNi45MiAxOUw1IDE3LjA4bDguMDYtOC4wNiAxLjkyIDEuOTJMNi45MiAxOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb21wYXJlIj48cGF0aCBkPSJNMTAgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDV2MmgyVjFoLTJ2MnptMCAxNUg1bDUtNnY2em05LTE1aC01djJoNXYxM2wtNS02djloNWMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNvbnRyb2wtcG9pbnQiPjxwYXRoIGQ9Ik0xMyA3aC0ydjRIN3YyaDR2NGgydi00aDR2LTJoLTRWN3ptLTEtNUM2LjQ5IDIgMiA2LjQ5IDIgMTJzNC40OSAxMCAxMCAxMCAxMC00LjQ5IDEwLTEwUzE3LjUxIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29udHJvbC1wb2ludC1kdXBsaWNhdGUiPjxwYXRoIGQ9Ik0xNiA4aC0ydjNoLTN2MmgzdjNoMnYtM2gzdi0yaC0zek0yIDEyYzAtMi43OSAxLjY0LTUuMiA0LjAxLTYuMzJWMy41MkMyLjUyIDQuNzYgMCA4LjA5IDAgMTJzMi41MiA3LjI0IDYuMDEgOC40OHYtMi4xNkMzLjY0IDE3LjIgMiAxNC43OSAyIDEyem0xMy05Yy00Ljk2IDAtOSA0LjA0LTkgOXM0LjA0IDkgOSA5IDktNC4wNCA5LTktNC4wNC05LTktOXptMCAxNmMtMy44NiAwLTctMy4xNC03LTdzMy4xNC03IDctNyA3IDMuMTQgNyA3LTMuMTQgNy03IDd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JvcCI+PHBhdGggZD0iTTE3IDE1aDJWN2MwLTEuMS0uOS0yLTItMkg5djJoOHY4ek03IDE3VjFINXY0SDF2Mmg0djEwYzAgMS4xLjkgMiAyIDJoMTB2NGgydi00aDR2LTJIN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJjcm9wLTE2LTkiPjxwYXRoIGQ9Ik0xOSA2SDVjLTEuMSAwLTIgLjktMiAydjhjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yem0wIDEwSDVWOGgxNHY4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtMy0yIj48cGF0aCBkPSJNMTkgNEg1Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bTAgMTRINVY2aDE0djEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtNS00Ij48cGF0aCBkPSJNMTkgNUg1Yy0xLjEgMC0yIC45LTIgMnYxMGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdjMC0xLjEtLjktMi0yLTJ6bTAgMTJINVY3aDE0djEweiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtNy01Ij48cGF0aCBkPSJNMTkgN0g1Yy0xLjEgMC0yIC45LTIgMnY2YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWOWMwLTEuMS0uOS0yLTItMnptMCA4SDVWOWgxNHY2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtZGluIj48cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTZINVY1aDE0djE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtZnJlZSI+PHBhdGggZD0iTTMgNXY0aDJWNWg0VjNINWMtMS4xIDAtMiAuOS0yIDJ6bTIgMTBIM3Y0YzAgMS4xLjkgMiAyIDJoNHYtMkg1di00em0xNCA0aC00djJoNGMxLjEgMCAyLS45IDItMnYtNGgtMnY0em0wLTE2aC00djJoNHY0aDJWNWMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjcm9wLWxhbmRzY2FwZSI+PHBhdGggZD0iTTE5IDVINWMtMS4xIDAtMiAuOS0yIDJ2MTBjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0wIDEySDVWN2gxNHYxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJjcm9wLW9yaWdpbmFsIj48cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTZINVY1aDE0djE0em0tNS4wNC02LjcxbC0yLjc1IDMuNTQtMS45Ni0yLjM2TDYuNSAxN2gxMWwtMy41NC00LjcxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtcG9ydHJhaXQiPjxwYXRoIGQ9Ik0xNyAzSDdjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTBjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNkg3VjVoMTB2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JvcC1yb3RhdGUiPjxwYXRoIGQ9Ik03LjQ3IDIxLjQ5QzQuMiAxOS45MyAxLjg2IDE2Ljc2IDEuNSAxM0gwYy41MSA2LjE2IDUuNjYgMTEgMTEuOTUgMTEgLjIzIDAgLjQ0LS4wMi42Ni0uMDNMOC44IDIwLjE1bC0xLjMzIDEuMzR6TTEyLjA1IDBjLS4yMyAwLS40NC4wMi0uNjYuMDRsMy44MSAzLjgxIDEuMzMtMS4zM0MxOS44IDQuMDcgMjIuMTQgNy4yNCAyMi41IDExSDI0Yy0uNTEtNi4xNi01LjY2LTExLTExLjk1LTExek0xNiAxNGgyVjhjMC0xLjExLS45LTItMi0yaC02djJoNnY2em0tOCAyVjRINnYySDR2MmgydjhjMCAxLjEuODkgMiAyIDJoOHYyaDJ2LTJoMnYtMkg4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3Atc3F1YXJlIj48cGF0aCBkPSJNMTggNEg2Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bTAgMTRINlY2aDEydjEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRlaGF6ZSI+PHBhdGggZD0iTTIgMTUuNXYyaDIwdi0ySDJ6bTAtNXYyaDIwdi0ySDJ6bTAtNXYyaDIwdi0ySDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZGV0YWlscyI+PHBhdGggZD0iTTMgNGw5IDE2IDktMTZIM3ptMy4zOCAyaDExLjI1TDEyIDE2IDYuMzggNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJlZGl0Ij48cGF0aCBkPSJNMyAxNy4yNVYyMWgzLjc1TDE3LjgxIDkuOTRsLTMuNzUtMy43NUwzIDE3LjI1ek0yMC43MSA3LjA0Yy4zOS0uMzkuMzktMS4wMiAwLTEuNDFsLTIuMzQtMi4zNGMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBsLTEuODMgMS44MyAzLjc1IDMuNzUgMS44My0xLjgzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4cG9zdXJlIj48cGF0aCBkPSJNMTUgMTd2Mmgydi0yaDJ2LTJoLTJ2LTJoLTJ2MmgtMnYyaDJ6bTUtMTVINGMtMS4xIDAtMiAuOS0yIDJ2MTZjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yek01IDVoNnYySDVWNXptMTUgMTVINEwyMCA0djE2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4cG9zdXJlLW5lZy0xIj48cGF0aCBkPSJNNCAxMXYyaDh2LTJINHptMTUgN2gtMlY3LjM4TDE0IDguNFY2LjdMMTguNyA1aC4zdjEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4cG9zdXJlLW5lZy0yIj48cGF0aCBkPSJNMTUuMDUgMTYuMjlsMi44Ni0zLjA3Yy4zOC0uMzkuNzItLjc5IDEuMDQtMS4xOC4zMi0uMzkuNTktLjc4LjgyLTEuMTcuMjMtLjM5LjQxLS43OC41NC0xLjE3cy4xOS0uNzkuMTktMS4xOGMwLS41My0uMDktMS4wMi0uMjctMS40Ni0uMTgtLjQ0LS40NC0uODEtLjc4LTEuMTEtLjM0LS4zMS0uNzctLjU0LTEuMjYtLjcxLS41MS0uMTYtMS4wOC0uMjQtMS43Mi0uMjQtLjY5IDAtMS4zMS4xMS0xLjg1LjMyLS41NC4yMS0xIC41MS0xLjM2Ljg4LS4zNy4zNy0uNjUuOC0uODQgMS4zLS4xOC40Ny0uMjcuOTctLjI4IDEuNWgyLjE0Yy4wMS0uMzEuMDUtLjYuMTMtLjg3LjA5LS4yOS4yMy0uNTQuNC0uNzUuMTgtLjIxLjQxLS4zNy42OC0uNDkuMjctLjEyLjYtLjE4Ljk2LS4xOC4zMSAwIC41OC4wNS44MS4xNS4yMy4xLjQzLjI1LjU5LjQzLjE2LjE4LjI4LjQuMzcuNjUuMDguMjUuMTMuNTIuMTMuODEgMCAuMjItLjAzLjQzLS4wOC42NS0uMDYuMjItLjE1LjQ1LS4yOS43LS4xNC4yNS0uMzIuNTMtLjU2LjgzLS4yMy4zLS41Mi42NS0uODggMS4wM2wtNC4xNyA0LjU1VjE4SDIxdi0xLjcxaC01Ljk1ek0yIDExdjJoOHYtMkgyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4cG9zdXJlLXBsdXMtMSI+PHBhdGggZD0iTTEwIDdIOHY0SDR2Mmg0djRoMnYtNGg0di0yaC00Vjd6bTEwIDExaC0yVjcuMzhMMTUgOC40VjYuN0wxOS43IDVoLjN2MTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXhwb3N1cmUtcGx1cy0yIj48cGF0aCBkPSJNMTYuMDUgMTYuMjlsMi44Ni0zLjA3Yy4zOC0uMzkuNzItLjc5IDEuMDQtMS4xOC4zMi0uMzkuNTktLjc4LjgyLTEuMTcuMjMtLjM5LjQxLS43OC41NC0xLjE3LjEzLS4zOS4xOS0uNzkuMTktMS4xOCAwLS41My0uMDktMS4wMi0uMjctMS40Ni0uMTgtLjQ0LS40NC0uODEtLjc4LTEuMTEtLjM0LS4zMS0uNzctLjU0LTEuMjYtLjcxLS41MS0uMTYtMS4wOC0uMjQtMS43Mi0uMjQtLjY5IDAtMS4zMS4xMS0xLjg1LjMyLS41NC4yMS0xIC41MS0xLjM2Ljg4LS4zNy4zNy0uNjUuOC0uODQgMS4zLS4xOC40Ny0uMjcuOTctLjI4IDEuNWgyLjE0Yy4wMS0uMzEuMDUtLjYuMTMtLjg3LjA5LS4yOS4yMy0uNTQuNC0uNzUuMTgtLjIxLjQxLS4zNy42OC0uNDkuMjctLjEyLjYtLjE4Ljk2LS4xOC4zMSAwIC41OC4wNS44MS4xNS4yMy4xLjQzLjI1LjU5LjQzLjE2LjE4LjI4LjQuMzcuNjUuMDguMjUuMTMuNTIuMTMuODEgMCAuMjItLjAzLjQzLS4wOC42NS0uMDYuMjItLjE1LjQ1LS4yOS43LS4xNC4yNS0uMzIuNTMtLjU2LjgzLS4yMy4zLS41Mi42NS0uODggMS4wM2wtNC4xNyA0LjU1VjE4SDIydi0xLjcxaC01Ljk1ek04IDdINnY0SDJ2Mmg0djRoMnYtNGg0di0ySDhWN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJleHBvc3VyZS16ZXJvIj48cGF0aCBkPSJNMTYuMTQgMTIuNWMwIDEtLjEgMS44NS0uMyAyLjU1LS4yLjctLjQ4IDEuMjctLjgzIDEuNy0uMzYuNDQtLjc5Ljc1LTEuMy45NS0uNTEuMi0xLjA3LjMtMS43LjMtLjYyIDAtMS4xOC0uMS0xLjY5LS4zLS41MS0uMi0uOTUtLjUxLTEuMzEtLjk1LS4zNi0uNDQtLjY1LTEuMDEtLjg1LTEuNy0uMi0uNy0uMy0xLjU1LS4zLTIuNTV2LTIuMDRjMC0xIC4xLTEuODUuMy0yLjU1LjItLjcuNDgtMS4yNi44NC0xLjY5LjM2LS40My44LS43NCAxLjMxLS45M0MxMC44MSA1LjEgMTEuMzggNSAxMiA1Yy42MyAwIDEuMTkuMSAxLjcuMjkuNTEuMTkuOTUuNSAxLjMxLjkzLjM2LjQzLjY0Ljk5Ljg0IDEuNjkuMi43LjMgMS41NC4zIDIuNTV2Mi4wNHptLTIuMTEtMi4zNmMwLS42NC0uMDUtMS4xOC0uMTMtMS42Mi0uMDktLjQ0LS4yMi0uNzktLjQtMS4wNi0uMTctLjI3LS4zOS0uNDYtLjY0LS41OC0uMjUtLjEzLS41NC0uMTktLjg2LS4xOS0uMzIgMC0uNjEuMDYtLjg2LjE4cy0uNDcuMzEtLjY0LjU4Yy0uMTcuMjctLjMxLjYyLS40IDEuMDZzLS4xMy45OC0uMTMgMS42MnYyLjY3YzAgLjY0LjA1IDEuMTguMTQgMS42Mi4wOS40NS4yMy44MS40IDEuMDlzLjM5LjQ4LjY0LjYxLjU0LjE5Ljg3LjE5Yy4zMyAwIC42Mi0uMDYuODctLjE5cy40Ni0uMzMuNjMtLjYxYy4xNy0uMjguMy0uNjQuMzktMS4wOS4wOS0uNDUuMTMtLjk5LjEzLTEuNjJ2LTIuNjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyIj48cGF0aCBkPSJNMTUuOTYgMTAuMjlsLTIuNzUgMy41NC0xLjk2LTIuMzZMOC41IDE1aDExbC0zLjU0LTQuNzF6TTMgNUgxdjE2YzAgMS4xLjkgMiAyIDJoMTZ2LTJIM1Y1em0xOC00SDdjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0yLTItMnptMCAxNkg3VjNoMTR2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTEiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTEgMTBoMlY1aC00djJoMnY4em03LTE0SDdjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0yLTItMnptMCAxNkg3VjNoMTR2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTIiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0em0tNC00aC00di0yaDJjMS4xIDAgMi0uODkgMi0yVjdjMC0xLjExLS45LTItMi0yaC00djJoNHYyaC0yYy0xLjEgMC0yIC44OS0yIDJ2NGg2di0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci0zIj48cGF0aCBkPSJNMjEgMUg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0ek0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTQgOHYtMS41YzAtLjgzLS42Ny0xLjUtMS41LTEuNS44MyAwIDEuNS0uNjcgMS41LTEuNVY3YzAtMS4xMS0uOS0yLTItMmgtNHYyaDR2MmgtMnYyaDJ2MmgtNHYyaDRjMS4xIDAgMi0uODkgMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci00Ij48cGF0aCBkPSJNMyA1SDF2MTZjMCAxLjEuOSAyIDIgMmgxNnYtMkgzVjV6bTEyIDEwaDJWNWgtMnY0aC0yVjVoLTJ2Nmg0djR6bTYtMTRIN2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTItMi0yem0wIDE2SDdWM2gxNHYxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItNSI+PHBhdGggZD0iTTIxIDFIN2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTItMi0yem0wIDE2SDdWM2gxNHYxNHpNMyA1SDF2MTZjMCAxLjEuOSAyIDIgMmgxNnYtMkgzVjV6bTE0IDh2LTJjMC0xLjExLS45LTItMi0yaC0yVjdoNFY1aC02djZoNHYyaC00djJoNGMxLjEgMCAyLS44OSAyLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTYiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0em0tOC0yaDJjMS4xIDAgMi0uODkgMi0ydi0yYzAtMS4xMS0uOS0yLTItMmgtMlY3aDRWNWgtNGMtMS4xIDAtMiAuODktMiAydjZjMCAxLjExLjkgMiAyIDJ6bTAtNGgydjJoLTJ2LTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTciPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0em0tOC0ybDQtOFY1aC02djJoNGwtNCA4aDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTgiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0em0tOC0yaDJjMS4xIDAgMi0uODkgMi0ydi0xLjVjMC0uODMtLjY3LTEuNS0xLjUtMS41LjgzIDAgMS41LS42NyAxLjUtMS41VjdjMC0xLjExLS45LTItMi0yaC0yYy0xLjEgMC0yIC44OS0yIDJ2MS41YzAgLjgzLjY3IDEuNSAxLjUgMS41LS44MyAwLTEuNS42Ny0xLjUgMS41VjEzYzAgMS4xMS45IDIgMiAyem0wLThoMnYyaC0yVjd6bTAgNGgydjJoLTJ2LTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTkiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0ek0xNSA1aC0yYy0xLjEgMC0yIC44OS0yIDJ2MmMwIDEuMTEuOSAyIDIgMmgydjJoLTR2Mmg0YzEuMSAwIDItLjg5IDItMlY3YzAtMS4xMS0uOS0yLTItMnptMCA0aC0yVjdoMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci05LXBsdXMiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTEgN1Y4YzAtMS4xMS0uOS0yLTItMmgtMWMtMS4xIDAtMiAuODktMiAydjFjMCAxLjExLjkgMiAyIDJoMXYxSDl2MmgzYzEuMSAwIDItLjg5IDItMnptLTMtM1Y4aDF2MWgtMXptMTAtOEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgOGgtMlY3aC0ydjJoLTJ2MmgydjJoMnYtMmgydjZIN1YzaDE0djZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLWItYW5kLXciPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNmwtNy04djhINWw3LThWNWg3djE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci1jZW50ZXItZm9jdXMiPjxwYXRoIGQ9Ik01IDE1SDN2NGMwIDEuMS45IDIgMiAyaDR2LTJINXYtNHpNNSA1aDRWM0g1Yy0xLjEgMC0yIC45LTIgMnY0aDJWNXptMTQtMmgtNHYyaDR2NGgyVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTZoLTR2Mmg0YzEuMSAwIDItLjkgMi0ydi00aC0ydjR6TTEyIDljLTEuNjYgMC0zIDEuMzQtMyAzczEuMzQgMyAzIDMgMy0xLjM0IDMtMy0xLjM0LTMtMy0zeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci1kcmFtYSI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYxIDUuNjQgNS4zNiA4LjA0IDIuMzUgOC4zNiAwIDEwLjkgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnpNMTkgMThINmMtMi4yMSAwLTQtMS43OS00LTRzMS43OS00IDQtNCA0IDEuNzkgNCA0aDJjMC0yLjc2LTEuODYtNS4wOC00LjQtNS43OEM4LjYxIDYuODggMTAuMiA2IDEyIDZjMy4wMyAwIDUuNSAyLjQ3IDUuNSA1LjV2LjVIMTljMS42NSAwIDMgMS4zNSAzIDNzLTEuMzUgMy0zIDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLWZyYW1lcyI+PHBhdGggZD0iTTIwIDRoLTRsLTQtNC00IDRINGMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDE2SDRWNmg0LjUybDMuNTItMy41TDE1LjUyIDZIMjB2MTR6TTE4IDhINnYxMGgxMiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci1oZHIiPjxwYXRoIGQ9Ik0xNCA2bC0zLjc1IDUgMi44NSAzLjgtMS42IDEuMkM5LjgxIDEzLjc1IDcgMTAgNyAxMGwtNiA4aDIyTDE0IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLW5vbmUiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci10aWx0LXNoaWZ0Ij48cGF0aCBkPSJNMTEgNC4wN1YyLjA1Yy0yLjAxLjItMy44NCAxLTUuMzIgMi4yMUw3LjEgNS42OWMxLjExLS44NiAyLjQ0LTEuNDQgMy45LTEuNjJ6bTcuMzIuMTlDMTYuODQgMy4wNSAxNS4wMSAyLjI1IDEzIDIuMDV2Mi4wMmMxLjQ2LjE4IDIuNzkuNzYgMy45IDEuNjJsMS40Mi0xLjQzek0xOS45MyAxMWgyLjAyYy0uMi0yLjAxLTEtMy44NC0yLjIxLTUuMzJMMTguMzEgNy4xYy44NiAxLjExIDEuNDQgMi40NCAxLjYyIDMuOXpNNS42OSA3LjFMNC4yNiA1LjY4QzMuMDUgNy4xNiAyLjI1IDguOTkgMi4wNSAxMWgyLjAyYy4xOC0xLjQ2Ljc2LTIuNzkgMS42Mi0zLjl6TTQuMDcgMTNIMi4wNWMuMiAyLjAxIDEgMy44NCAyLjIxIDUuMzJsMS40My0xLjQzYy0uODYtMS4xLTEuNDQtMi40My0xLjYyLTMuODl6TTE1IDEyYzAtMS42Ni0xLjM0LTMtMy0zcy0zIDEuMzQtMyAzIDEuMzQgMyAzIDMgMy0xLjM0IDMtM3ptMy4zMSA0LjlsMS40MyAxLjQzYzEuMjEtMS40OCAyLjAxLTMuMzIgMi4yMS01LjMyaC0yLjAyYy0uMTggMS40NS0uNzYgMi43OC0xLjYyIDMuODl6TTEzIDE5LjkzdjIuMDJjMi4wMS0uMiAzLjg0LTEgNS4zMi0yLjIxbC0xLjQzLTEuNDNjLTEuMS44Ni0yLjQzIDEuNDQtMy44OSAxLjYyem0tNy4zMi0uMTlDNy4xNiAyMC45NSA5IDIxLjc1IDExIDIxLjk1di0yLjAyYy0xLjQ2LS4xOC0yLjc5LS43Ni0zLjktMS42MmwtMS40MiAxLjQzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci12aW50YWdlIj48cGF0aCBkPSJNMTguNyAxMi40Yy0uMjgtLjE2LS41Ny0uMjktLjg2LS40LjI5LS4xMS41OC0uMjQuODYtLjQgMS45Mi0xLjExIDIuOTktMy4xMiAzLTUuMTktMS43OS0xLjAzLTQuMDctMS4xMS02IDAtLjI4LjE2LS41NC4zNS0uNzguNTQuMDUtLjMxLjA4LS42My4wOC0uOTUgMC0yLjIyLTEuMjEtNC4xNS0zLTUuMTlDMTAuMjEgMS44NSA5IDMuNzggOSA2YzAgLjMyLjAzLjY0LjA4Ljk1LS4yNC0uMi0uNS0uMzktLjc4LS41NS0xLjkyLTEuMTEtNC4yLTEuMDMtNiAwIDAgMi4wNyAxLjA3IDQuMDggMyA1LjE5LjI4LjE2LjU3LjI5Ljg2LjQtLjI5LjExLS41OC4yNC0uODYuNC0xLjkyIDEuMTEtMi45OSAzLjEyLTMgNS4xOSAxLjc5IDEuMDMgNC4wNyAxLjExIDYgMCAuMjgtLjE2LjU0LS4zNS43OC0uNTQtLjA1LjMyLS4wOC42NC0uMDguOTYgMCAyLjIyIDEuMjEgNC4xNSAzIDUuMTkgMS43OS0xLjA0IDMtMi45NyAzLTUuMTkgMC0uMzItLjAzLS42NC0uMDgtLjk1LjI0LjIuNS4zOC43OC41NCAxLjkyIDEuMTEgNC4yIDEuMDMgNiAwLS4wMS0yLjA3LTEuMDgtNC4wOC0zLTUuMTl6TTEyIDE2Yy0yLjIxIDAtNC0xLjc5LTQtNHMxLjc5LTQgNC00IDQgMS43OSA0IDQtMS43OSA0LTQgNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmbGFyZSI+PHBhdGggZD0iTTcgMTFIMXYyaDZ2LTJ6bTIuMTctMy4yNEw3LjA1IDUuNjQgNS42NCA3LjA1bDIuMTIgMi4xMiAxLjQxLTEuNDF6TTEzIDFoLTJ2NmgyVjF6bTUuMzYgNi4wNWwtMS40MS0xLjQxLTIuMTIgMi4xMiAxLjQxIDEuNDEgMi4xMi0yLjEyek0xNyAxMXYyaDZ2LTJoLTZ6bS01LTJjLTEuNjYgMC0zIDEuMzQtMyAzczEuMzQgMyAzIDMgMy0xLjM0IDMtMy0xLjM0LTMtMy0zem0yLjgzIDcuMjRsMi4xMiAyLjEyIDEuNDEtMS40MS0yLjEyLTIuMTItMS40MSAxLjQxem0tOS4xOS43MWwxLjQxIDEuNDEgMi4xMi0yLjEyLTEuNDEtMS40MS0yLjEyIDIuMTJ6TTExIDIzaDJ2LTZoLTJ2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmbGFzaC1hdXRvIj48cGF0aCBkPSJNMyAydjEyaDN2OWw3LTEySDlsNC05SDN6bTE2IDBoLTJsLTMuMiA5aDEuOWwuNy0yaDMuMmwuNyAyaDEuOUwxOSAyem0tMi4xNSA1LjY1TDE4IDRsMS4xNSAzLjY1aC0yLjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxhc2gtb2ZmIj48cGF0aCBkPSJNMy4yNyAzTDIgNC4yN2w1IDVWMTNoM3Y5bDMuNTgtNi4xNEwxNy43MyAyMCAxOSAxOC43MyAzLjI3IDN6TTE3IDEwaC00bDQtOEg3djIuMThsOC40NiA4LjQ2TDE3IDEweiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZsYXNoLW9uIj48cGF0aCBkPSJNNyAydjExaDN2OWw3LTEyaC00bDQtOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmbGlwIj48cGF0aCBkPSJNMTUgMjFoMnYtMmgtMnYyem00LTEyaDJWN2gtMnYyek0zIDV2MTRjMCAxLjEuOSAyIDIgMmg0di0ySDVWNWg0VjNINWMtMS4xIDAtMiAuOS0yIDJ6bTE2LTJ2MmgyYzAtMS4xLS45LTItMi0yem0tOCAyMGgyVjFoLTJ2MjJ6bTgtNmgydi0yaC0ydjJ6TTE1IDVoMlYzaC0ydjJ6bTQgOGgydi0yaC0ydjJ6bTAgOGMxLjEgMCAyLS45IDItMmgtMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImdyYWRpZW50Ij48cGF0aCBkPSJNMTEgOWgydjJoLTJ6bS0yIDJoMnYySDl6bTQgMGgydjJoLTJ6bTItMmgydjJoLTJ6TTcgOWgydjJIN3ptMTItNkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6TTkgMThIN3YtMmgydjJ6bTQgMGgtMnYtMmgydjJ6bTQgMGgtMnYtMmgydjJ6bTItN2gtMnYyaDJ2MmgtMnYtMmgtMnYyaC0ydi0yaC0ydjJIOXYtMkg3djJINXYtMmgydi0ySDVWNWgxNHY2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImdyYWluIj48cGF0aCBkPSJNMTAgMTJjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yek02IDhjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0wIDhjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0xMi04YzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMi0yIC45LTIgMiAuOSAyIDIgMnptLTQgOGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTQtNGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bS00LTRjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0tNC00Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJncmlkLW9mZiI+PHBhdGggZD0iTTggNHYxLjQ1bDIgMlY0aDR2NGgtMy40NWwyIDJIMTR2MS40NWwyIDJWMTBoNHY0aC0zLjQ1bDIgMkgyMHYxLjQ1bDIgMlY0YzAtMS4xLS45LTItMi0ySDQuNTVsMiAySDh6bTggMGg0djRoLTRWNHpNMS4yNyAxLjI3TDAgMi41NWwyIDJWMjBjMCAxLjEuOSAyIDIgMmgxNS40NmwyIDIgMS4yNy0xLjI3TDEuMjcgMS4yN3pNMTAgMTIuNTVMMTEuNDUgMTRIMTB2LTEuNDV6bS02LTZMNS40NSA4SDRWNi41NXpNOCAyMEg0di00aDR2NHptMC02SDR2LTRoMy40NWwuNTUuNTVWMTR6bTYgNmgtNHYtNGgzLjQ1bC41NS41NFYyMHptMiAwdi0xLjQ2TDE3LjQ2IDIwSDE2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImdyaWQtb24iPjxwYXRoIGQ9Ik0yMCAySDRjLTEuMSAwLTIgLjktMiAydjE2YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnpNOCAyMEg0di00aDR2NHptMC02SDR2LTRoNHY0em0wLTZINFY0aDR2NHptNiAxMmgtNHYtNGg0djR6bTAtNmgtNHYtNGg0djR6bTAtNmgtNFY0aDR2NHptNiAxMmgtNHYtNGg0djR6bTAtNmgtNHYtNGg0djR6bTAtNmgtNFY0aDR2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJoZHItb2ZmIj48cGF0aCBkPSJNMTcuNSAxNXYtMmgxLjFsLjkgMkgyMWwtLjktMi4xYy41LS4yLjktLjguOS0xLjR2LTFjMC0uOC0uNy0xLjUtMS41LTEuNUgxNnY0LjlsMS4xIDEuMWguNHptMC00LjVoMnYxaC0ydi0xem0tNC41IDB2LjRsMS41IDEuNXYtMS45YzAtLjgtLjctMS41LTEuNS0xLjVoLTEuOWwxLjUgMS41aC40em0tMy41LTFsLTctNy0xLjEgMUw2LjkgOWgtLjR2MmgtMlY5SDN2NmgxLjV2LTIuNWgyVjE1SDh2LTQuOWwxLjUgMS41VjE1aDMuNGw3LjYgNy42IDEuMS0xLjEtMTIuMS0xMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJoZHItb24iPjxwYXRoIGQ9Ik0yMSAxMS41di0xYzAtLjgtLjctMS41LTEuNS0xLjVIMTZ2NmgxLjV2LTJoMS4xbC45IDJIMjFsLS45LTIuMWMuNS0uMy45LS44LjktMS40em0tMS41IDBoLTJ2LTFoMnYxem0tMTMtLjVoLTJWOUgzdjZoMS41di0yLjVoMlYxNUg4VjlINi41djJ6TTEzIDlIOS41djZIMTNjLjggMCAxLjUtLjcgMS41LTEuNXYtM2MwLS44LS43LTEuNS0xLjUtMS41em0wIDQuNWgtMnYtM2gydjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaGRyLXN0cm9uZyI+PHBhdGggZD0iTTE3IDZjLTMuMzEgMC02IDIuNjktNiA2czIuNjkgNiA2IDYgNi0yLjY5IDYtNi0yLjY5LTYtNi02ek01IDhjLTIuMjEgMC00IDEuNzktNCA0czEuNzkgNCA0IDQgNC0xLjc5IDQtNC0xLjc5LTQtNC00em0wIDZjLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imhkci13ZWFrIj48cGF0aCBkPSJNNSA4Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTQtMS43OS00LTQtNHptMTItMmMtMy4zMSAwLTYgMi42OS02IDZzMi42OSA2IDYgNiA2LTIuNjkgNi02LTIuNjktNi02LTZ6bTAgMTBjLTIuMjEgMC00LTEuNzktNC00czEuNzktNCA0LTQgNCAxLjc5IDQgNC0xLjc5IDQtNCA0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImhlYWxpbmciPjxwYXRoIGQ9Ik0xNy43MyAxMi4wMmwzLjk4LTMuOThjLjM5LS4zOS4zOS0xLjAyIDAtMS40MWwtNC4zNC00LjM0Yy0uMzktLjM5LTEuMDItLjM5LTEuNDEgMGwtMy45OCAzLjk4TDggMi4yOUM3LjggMi4xIDcuNTUgMiA3LjI5IDJjLS4yNSAwLS41MS4xLS43LjI5TDIuMjUgNi42M2MtLjM5LjM5LS4zOSAxLjAyIDAgMS40MWwzLjk4IDMuOThMMi4yNSAxNmMtLjM5LjM5LS4zOSAxLjAyIDAgMS40MWw0LjM0IDQuMzRjLjM5LjM5IDEuMDIuMzkgMS40MSAwbDMuOTgtMy45OCAzLjk4IDMuOThjLjIuMi40NS4yOS43MS4yOS4yNiAwIC41MS0uMS43MS0uMjlsNC4zNC00LjM0Yy4zOS0uMzkuMzktMS4wMiAwLTEuNDFsLTMuOTktMy45OHpNMTIgOWMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0tNC43MSAxLjk2TDMuNjYgNy4zNGwzLjYzLTMuNjMgMy42MiAzLjYyLTMuNjIgMy42M3pNMTAgMTNjLS41NSAwLTEtLjQ1LTEtMXMuNDUtMSAxLTEgMSAuNDUgMSAxLS40NSAxLTEgMXptMiAyYy0uNTUgMC0xLS40NS0xLTFzLjQ1LTEgMS0xIDEgLjQ1IDEgMS0uNDUgMS0xIDF6bTItNGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0yLjY2IDkuMzRsLTMuNjMtMy42MiAzLjYzLTMuNjMgMy42MiAzLjYyLTMuNjIgMy42M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJpbWFnZSI+PHBhdGggZD0iTTIxIDE5VjVjMC0xLjEtLjktMi0yLTJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMnpNOC41IDEzLjVsMi41IDMuMDFMMTQuNSAxMmw0LjUgNkg1bDMuNS00LjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaW1hZ2UtYXNwZWN0LXJhdGlvIj48cGF0aCBkPSJNMTYgMTBoLTJ2Mmgydi0yem0wIDRoLTJ2Mmgydi0yem0tOC00SDZ2Mmgydi0yem00IDBoLTJ2Mmgydi0yem04LTZINGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDE0SDRWNmgxNnYxMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJpc28iPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnpNNS41IDcuNWgydi0ySDl2MmgyVjlIOXYySDcuNVY5aC0yVjcuNXpNMTkgMTlINUwxOSA1djE0em0tMi0ydi0xLjVoLTVWMTdoNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsYW5kc2NhcGUiPjxwYXRoIGQ9Ik0xNCA2bC0zLjc1IDUgMi44NSAzLjgtMS42IDEuMkM5LjgxIDEzLjc1IDcgMTAgNyAxMGwtNiA4aDIyTDE0IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibGVhay1hZGQiPjxwYXRoIGQ9Ik02IDNIM3YzYzEuNjYgMCAzLTEuMzQgMy0zem04IDBoLTJjMCA0Ljk3LTQuMDMgOS05IDl2MmM2LjA4IDAgMTEtNC45MyAxMS0xMXptLTQgMEg4YzAgMi43Ni0yLjI0IDUtNSA1djJjMy44NyAwIDctMy4xMyA3LTd6bTAgMThoMmMwLTQuOTcgNC4wMy05IDktOXYtMmMtNi4wNyAwLTExIDQuOTMtMTEgMTF6bTggMGgzdi0zYy0xLjY2IDAtMyAxLjM0LTMgM3ptLTQgMGgyYzAtMi43NiAyLjI0LTUgNS01di0yYy0zLjg3IDAtNyAzLjEzLTcgN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJsZWFrLXJlbW92ZSI+PHBhdGggZD0iTTEwIDNIOGMwIC4zNy0uMDQuNzItLjEyIDEuMDZsMS41OSAxLjU5QzkuODEgNC44NCAxMCAzLjk0IDEwIDN6TTMgNC4yN2wyLjg0IDIuODRDNS4wMyA3LjY3IDQuMDYgOCAzIDh2MmMxLjYxIDAgMy4wOS0uNTUgNC4yNy0xLjQ2TDguNyA5Ljk3QzcuMTQgMTEuMjQgNS4xNiAxMiAzIDEydjJjMi43MSAwIDUuMTktLjk5IDcuMTEtMi42MmwyLjUgMi41QzEwLjk5IDE1LjgxIDEwIDE4LjI5IDEwIDIxaDJjMC0yLjE2Ljc2LTQuMTQgMi4wMy01LjY5bDEuNDMgMS40M0MxNC41NSAxNy45MSAxNCAxOS4zOSAxNCAyMWgyYzAtMS4wNi4zMy0yLjAzLjg5LTIuODRMMTkuNzMgMjEgMjEgMTkuNzMgNC4yNyAzIDMgNC4yN3pNMTQgM2gtMmMwIDEuNS0uMzcgMi45MS0xLjAyIDQuMTZsMS40NiAxLjQ2QzEzLjQyIDYuOTggMTQgNS4wNiAxNCAzem01Ljk0IDEzLjEyYy4zNC0uMDguNjktLjEyIDEuMDYtLjEydi0yYy0uOTQgMC0xLjg0LjE5LTIuNjYuNTJsMS42IDEuNnptLTQuNTYtNC41NmwxLjQ2IDEuNDZDMTguMDkgMTIuMzcgMTkuNSAxMiAyMSAxMnYtMmMtMi4wNiAwLTMuOTguNTgtNS42MiAxLjU2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxlbnMiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxpbmtlZC1jYW1lcmEiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTQiIHI9IjMuMiI+PC9jaXJjbGU+PHBhdGggZD0iTTE2IDMuMzNjMi41OCAwIDQuNjcgMi4wOSA0LjY3IDQuNjdIMjJjMC0zLjMxLTIuNjktNi02LTZ2MS4zM00xNiA2YzEuMTEgMCAyIC44OSAyIDJoMS4zM2MwLTEuODQtMS40OS0zLjMzLTMuMzMtMy4zM1Y2Ij48L3BhdGg+PHBhdGggZD0iTTE3IDljMC0xLjExLS44OS0yLTItMlY0SDlMNy4xNyA2SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWOWgtNXptLTUgMTBjLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNS0yLjI0IDUtNSA1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imxvb2tzIj48cGF0aCBkPSJNMTIgMTBjLTMuODYgMC03IDMuMTQtNyA3aDJjMC0yLjc2IDIuMjQtNSA1LTVzNSAyLjI0IDUgNWgyYzAtMy44Ni0zLjE0LTctNy03em0wLTRDNS45MyA2IDEgMTAuOTMgMSAxN2gyYzAtNC45NiA0LjA0LTkgOS05czkgNC4wNCA5IDloMmMwLTYuMDctNC45My0xMS0xMS0xMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb29rcy0zIj48cGF0aCBkPSJNMTkuMDEgM2gtMTRjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTQgNy41YzAgLjgzLS42NyAxLjUtMS41IDEuNS44MyAwIDEuNS42NyAxLjUgMS41VjE1YzAgMS4xMS0uOSAyLTIgMmgtNHYtMmg0di0yaC0ydi0yaDJWOWgtNFY3aDRjMS4xIDAgMiAuODkgMiAydjEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb29rcy00Ij48cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS00IDE0aC0ydi00SDlWN2gydjRoMlY3aDJ2MTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG9va3MtNSI+PHBhdGggZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNCA2aC00djJoMmMxLjEgMCAyIC44OSAyIDJ2MmMwIDEuMTEtLjkgMi0yIDJIOXYtMmg0di0ySDlWN2g2djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG9va3MtNiI+PHBhdGggZD0iTTExIDE1aDJ2LTJoLTJ2MnptOC0xMkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS00IDZoLTR2MmgyYzEuMSAwIDIgLjg5IDIgMnYyYzAgMS4xMS0uOSAyLTIgMmgtMmMtMS4xIDAtMi0uODktMi0yVjljMC0xLjExLjktMiAyLTJoNHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imxvb2tzLW9uZSI+PHBhdGggZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNSAxNGgtMlY5aC0yVjdoNHYxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb29rcy10d28iPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTQgOGMwIDEuMTEtLjkgMi0yIDJoLTJ2Mmg0djJIOXYtNGMwLTEuMTEuOS0yIDItMmgyVjlIOVY3aDRjMS4xIDAgMiAuODkgMiAydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG91cGUiPjxwYXRoIGQ9Ik0xMyA3aC0ydjRIN3YyaDR2NGgydi00aDR2LTJoLTRWN3ptLTEtNUM2LjQ5IDIgMiA2LjQ5IDIgMTJzNC40OSAxMCAxMCAxMGg4YzEuMSAwIDItLjkgMi0ydi04YzAtNS41MS00LjQ5LTEwLTEwLTEwem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJtb25vY2hyb21lLXBob3RvcyI+PHBhdGggZD0iTTIwIDVoLTMuMkwxNSAzSDlMNy4yIDVINGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0wIDE0aC04di0xYy0yLjggMC01LTIuMi01LTVzMi4yLTUgNS01VjdoOHYxMnptLTMtNmMwLTIuOC0yLjItNS01LTV2MS44YzEuOCAwIDMuMiAxLjQgMy4yIDMuMnMtMS40IDMuMi0zLjIgMy4yVjE4YzIuOCAwIDUtMi4yIDUtNXptLTguMiAwYzAgMS44IDEuNCAzLjIgMy4yIDMuMlY5LjhjLTEuOCAwLTMuMiAxLjQtMy4yIDMuMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJtb3ZpZS1jcmVhdGlvbiI+PHBhdGggZD0iTTE4IDRsMiA0aC0zbC0yLTRoLTJsMiA0aC0zbC0yLTRIOGwyIDRIN0w1IDRINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDE4YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNGgtNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJtb3ZpZS1maWx0ZXIiPjxwYXRoIGQ9Ik0xOCA0bDIgM2gtM2wtMi0zaC0ybDIgM2gtM2wtMi0zSDhsMiAzSDdMNSA0SDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJMMiAxOGMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjRoLTR6bS02Ljc1IDExLjI1TDEwIDE4bC0xLjI1LTIuNzVMNiAxNGwyLjc1LTEuMjVMMTAgMTBsMS4yNSAyLjc1TDE0IDE0bC0yLjc1IDEuMjV6bTUuNjktMy4zMUwxNiAxNGwtLjk0LTIuMDZMMTMgMTFsMi4wNi0uOTRMMTYgOGwuOTQgMi4wNkwxOSAxMWwtMi4wNi45NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJtdXNpYy1ub3RlIj48cGF0aCBkPSJNMTIgM3YxMC41NWMtLjU5LS4zNC0xLjI3LS41NS0yLS41NS0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRWN2g0VjNoLTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibmF0dXJlIj48cGF0aCBkPSJNMTMgMTYuMTJjMy40Ny0uNDEgNi4xNy0zLjM2IDYuMTctNi45NSAwLTMuODctMy4xMy03LTctN3MtNyAzLjEzLTcgN2MwIDMuNDcgMi41MiA2LjM0IDUuODMgNi44OVYyMEg1djJoMTR2LTJoLTZ2LTMuODh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibmF0dXJlLXBlb3BsZSI+PHBhdGggZD0iTTIyLjE3IDkuMTdjMC0zLjg3LTMuMTMtNy03LTdzLTcgMy4xMy03IDdjMCAzLjQ3IDIuNTIgNi4zNCA1LjgzIDYuODlWMjBINnYtM2gxdi00YzAtLjU1LS40NS0xLTEtMUgzYy0uNTUgMC0xIC40NS0xIDF2NGgxdjVoMTZ2LTJoLTN2LTMuODhjMy40Ny0uNDEgNi4xNy0zLjM2IDYuMTctNi45NXpNNC41IDExYy44MyAwIDEuNS0uNjcgMS41LTEuNVM1LjMzIDggNC41IDggMyA4LjY3IDMgOS41IDMuNjcgMTEgNC41IDExeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im5hdmlnYXRlLWJlZm9yZSI+PHBhdGggZD0iTTE1LjQxIDcuNDFMMTQgNmwtNiA2IDYgNiAxLjQxLTEuNDFMMTAuODMgMTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibmF2aWdhdGUtbmV4dCI+PHBhdGggZD0iTTEwIDZMOC41OSA3LjQxIDEzLjE3IDEybC00LjU4IDQuNTlMMTAgMThsNi02eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBhbGV0dGUiPjxwYXRoIGQ9Ik0xMiAzYy00Ljk3IDAtOSA0LjAzLTkgOXM0LjAzIDkgOSA5Yy44MyAwIDEuNS0uNjcgMS41LTEuNSAwLS4zOS0uMTUtLjc0LS4zOS0xLjAxLS4yMy0uMjYtLjM4LS42MS0uMzgtLjk5IDAtLjgzLjY3LTEuNSAxLjUtMS41SDE2YzIuNzYgMCA1LTIuMjQgNS01IDAtNC40Mi00LjAzLTgtOS04em0tNS41IDljLS44MyAwLTEuNS0uNjctMS41LTEuNVM1LjY3IDkgNi41IDkgOCA5LjY3IDggMTAuNSA3LjMzIDEyIDYuNSAxMnptMy00QzguNjcgOCA4IDcuMzMgOCA2LjVTOC42NyA1IDkuNSA1czEuNS42NyAxLjUgMS41UzEwLjMzIDggOS41IDh6bTUgMGMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzEzLjY3IDUgMTQuNSA1czEuNS42NyAxLjUgMS41UzE1LjMzIDggMTQuNSA4em0zIDRjLS44MyAwLTEuNS0uNjctMS41LTEuNVMxNi42NyA5IDE3LjUgOXMxLjUuNjcgMS41IDEuNS0uNjcgMS41LTEuNSAxLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGFub3JhbWEiPjxwYXRoIGQ9Ik0yMyAxOFY2YzAtMS4xLS45LTItMi0ySDNjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJ6TTguNSAxMi41bDIuNSAzLjAxTDE0LjUgMTFsNC41IDZINWwzLjUtNC41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBhbm9yYW1hLWZpc2gtZXllIj48cGF0aCBkPSJNMTIgMkM2LjQ3IDIgMiA2LjQ3IDIgMTJzNC40NyAxMCAxMCAxMCAxMC00LjQ3IDEwLTEwUzE3LjUzIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGFub3JhbWEtaG9yaXpvbnRhbCI+PHBhdGggZD0iTTIwIDYuNTR2MTAuOTFjLTIuNi0uNzctNS4yOC0xLjE2LTgtMS4xNi0yLjcyIDAtNS40LjM5LTggMS4xNlY2LjU0YzIuNi43NyA1LjI4IDEuMTYgOCAxLjE2IDIuNzIuMDEgNS40LS4zOCA4LTEuMTZNMjEuNDMgNGMtLjEgMC0uMi4wMi0uMzEuMDZDMTguMTggNS4xNiAxNS4wOSA1LjcgMTIgNS43Yy0zLjA5IDAtNi4xOC0uNTUtOS4xMi0xLjY0LS4xMS0uMDQtLjIyLS4wNi0uMzEtLjA2LS4zNCAwLS41Ny4yMy0uNTcuNjN2MTQuNzVjMCAuMzkuMjMuNjIuNTcuNjIuMSAwIC4yLS4wMi4zMS0uMDYgMi45NC0xLjEgNi4wMy0xLjY0IDkuMTItMS42NCAzLjA5IDAgNi4xOC41NSA5LjEyIDEuNjQuMTEuMDQuMjEuMDYuMzEuMDYuMzMgMCAuNTctLjIzLjU3LS42M1Y0LjYzYzAtLjQtLjI0LS42My0uNTctLjYzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBhbm9yYW1hLXZlcnRpY2FsIj48cGF0aCBkPSJNMTkuOTQgMjEuMTJjLTEuMS0yLjk0LTEuNjQtNi4wMy0xLjY0LTkuMTIgMC0zLjA5LjU1LTYuMTggMS42NC05LjEyLjA0LS4xMS4wNi0uMjIuMDYtLjMxIDAtLjM0LS4yMy0uNTctLjYzLS41N0g0LjYzYy0uNCAwLS42My4yMy0uNjMuNTcgMCAuMS4wMi4yLjA2LjMxQzUuMTYgNS44MiA1LjcxIDguOTEgNS43MSAxMmMwIDMuMDktLjU1IDYuMTgtMS42NCA5LjEyLS4wNS4xMS0uMDcuMjItLjA3LjMxIDAgLjMzLjIzLjU3LjYzLjU3aDE0Ljc1Yy4zOSAwIC42My0uMjQuNjMtLjU3LS4wMS0uMS0uMDMtLjItLjA3LS4zMXpNNi41NCAyMGMuNzctMi42IDEuMTYtNS4yOCAxLjE2LTggMC0yLjcyLS4zOS01LjQtMS4xNi04aDEwLjkxYy0uNzcgMi42LTEuMTYgNS4yOC0xLjE2IDggMCAyLjcyLjM5IDUuNCAxLjE2IDhINi41NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwYW5vcmFtYS13aWRlLWFuZ2xlIj48cGF0aCBkPSJNMTIgNmMyLjQ1IDAgNC43MS4yIDcuMjkuNjQuNDcgMS43OC43MSAzLjU4LjcxIDUuMzYgMCAxLjc4LS4yNCAzLjU4LS43MSA1LjM2LTIuNTguNDQtNC44NC42NC03LjI5LjY0cy00LjcxLS4yLTcuMjktLjY0QzQuMjQgMTUuNTggNCAxMy43OCA0IDEyYzAtMS43OC4yNC0zLjU4LjcxLTUuMzZDNy4yOSA2LjIgOS41NSA2IDEyIDZtMC0yYy0yLjczIDAtNS4yMi4yNC03Ljk1LjcybC0uOTMuMTYtLjI1LjlDMi4yOSA3Ljg1IDIgOS45MyAyIDEycy4yOSA0LjE1Ljg3IDYuMjJsLjI1Ljg5LjkzLjE2YzIuNzMuNDkgNS4yMi43MyA3Ljk1LjczczUuMjItLjI0IDcuOTUtLjcybC45My0uMTYuMjUtLjg5Yy41OC0yLjA4Ljg3LTQuMTYuODctNi4yM3MtLjI5LTQuMTUtLjg3LTYuMjJsLS4yNS0uODktLjkzLS4xNkMxNy4yMiA0LjI0IDE0LjczIDQgMTIgNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwaG90byI+PHBhdGggZD0iTTIxIDE5VjVjMC0xLjEtLjktMi0yLTJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMnpNOC41IDEzLjVsMi41IDMuMDFMMTQuNSAxMmw0LjUgNkg1bDMuNS00LjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGhvdG8tYWxidW0iPjxwYXRoIGQ9Ik0xOCAySDZjLTEuMSAwLTIgLjktMiAydjE2YzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnpNNiA0aDV2OGwtMi41LTEuNUw2IDEyVjR6bTAgMTVsMy0zLjg2IDIuMTQgMi41OCAzLTMuODZMMTggMTlINnoiPjwvcGF0aD48L2c+CjxnIGlkPSJwaG90by1jYW1lcmEiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjMuMiI+PC9jaXJjbGU+PHBhdGggZD0iTTkgMkw3LjE3IDRINGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yaC0zLjE3TDE1IDJIOXptMyAxNWMtMi43NiAwLTUtMi4yNC01LTVzMi4yNC01IDUtNSA1IDIuMjQgNSA1LTIuMjQgNS01IDV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGhvdG8tZmlsdGVyIj48cGF0aCBkPSJNMTkuMDIgMTB2OUg1VjVoOVYzSDUuMDJjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJ2LTloLTJ6TTE3IDEwbC45NC0yLjA2TDIwIDdsLTIuMDYtLjk0TDE3IDRsLS45NCAyLjA2TDE0IDdsMi4wNi45NHptLTMuNzUuNzVMMTIgOGwtMS4yNSAyLjc1TDggMTJsMi43NSAxLjI1TDEyIDE2bDEuMjUtMi43NUwxNiAxMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJwaG90by1saWJyYXJ5Ij48cGF0aCBkPSJNMjIgMTZWNGMwLTEuMS0uOS0yLTItMkg4Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yem0tMTEtNGwyLjAzIDIuNzFMMTYgMTFsNCA1SDhsMy00ek0yIDZ2MTRjMCAxLjEuOSAyIDIgMmgxNHYtMkg0VjZIMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJwaG90by1zaXplLXNlbGVjdC1hY3R1YWwiPjxwYXRoIGQ9Ik0yMSAzSDNDMiAzIDEgNCAxIDV2MTRjMCAxLjEuOSAyIDIgMmgxOGMxIDAgMi0xIDItMlY1YzAtMS0xLTItMi0yek01IDE3bDMuNS00LjUgMi41IDMuMDFMMTQuNSAxMWw0LjUgNkg1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBob3RvLXNpemUtc2VsZWN0LWxhcmdlIj48cGF0aCBkPSJNMjEgMTVoMnYyaC0ydi0yem0wLTRoMnYyaC0ydi0yem0yIDhoLTJ2MmMxIDAgMi0xIDItMnpNMTMgM2gydjJoLTJWM3ptOCA0aDJ2MmgtMlY3em0wLTR2MmgyYzAtMS0xLTItMi0yek0xIDdoMnYySDFWN3ptMTYtNGgydjJoLTJWM3ptMCAxNmgydjJoLTJ2LTJ6TTMgM0MyIDMgMSA0IDEgNWgyVjN6bTYgMGgydjJIOVYzek01IDNoMnYySDVWM3ptLTQgOHY4YzAgMS4xLjkgMiAyIDJoMTJWMTFIMXptMiA4bDIuNS0zLjIxIDEuNzkgMi4xNSAyLjUtMy4yMkwxMyAxOUgzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBob3RvLXNpemUtc2VsZWN0LXNtYWxsIj48cGF0aCBkPSJNMjMgMTVoLTJ2Mmgydi0yem0wLTRoLTJ2Mmgydi0yem0wIDhoLTJ2MmMxIDAgMi0xIDItMnpNMTUgM2gtMnYyaDJWM3ptOCA0aC0ydjJoMlY3em0tMi00djJoMmMwLTEtMS0yLTItMnpNMyAyMWg4di02SDF2NGMwIDEuMS45IDIgMiAyek0zIDdIMXYyaDJWN3ptMTIgMTJoLTJ2Mmgydi0yem00LTE2aC0ydjJoMlYzem0wIDE2aC0ydjJoMnYtMnpNMyAzQzIgMyAxIDQgMSA1aDJWM3ptMCA4SDF2Mmgydi0yem04LThIOXYyaDJWM3pNNyAzSDV2MmgyVjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGljdHVyZS1hcy1wZGYiPjxwYXRoIGQ9Ik0yMCAySDhjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptLTguNSA3LjVjMCAuODMtLjY3IDEuNS0xLjUgMS41SDl2Mkg3LjVWN0gxMGMuODMgMCAxLjUuNjcgMS41IDEuNXYxem01IDJjMCAuODMtLjY3IDEuNS0xLjUgMS41aC0yLjVWN0gxNWMuODMgMCAxLjUuNjcgMS41IDEuNXYzem00LTNIMTl2MWgxLjVWMTFIMTl2MmgtMS41VjdoM3YxLjV6TTkgOS41aDF2LTFIOXYxek00IDZIMnYxNGMwIDEuMS45IDIgMiAyaDE0di0ySDRWNnptMTAgNS41aDF2LTNoLTF2M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJwb3J0cmFpdCI+PHBhdGggZD0iTTEyIDEyLjI1YzEuMjQgMCAyLjI1LTEuMDEgMi4yNS0yLjI1UzEzLjI0IDcuNzUgMTIgNy43NSA5Ljc1IDguNzYgOS43NSAxMHMxLjAxIDIuMjUgMi4yNSAyLjI1em00LjUgNGMwLTEuNS0zLTIuMjUtNC41LTIuMjVzLTQuNS43NS00LjUgMi4yNVYxN2g5di0uNzV6TTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDVWNWgxNHYxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZW1vdmUtcmVkLWV5ZSI+PHBhdGggZD0iTTEyIDQuNUM3IDQuNSAyLjczIDcuNjEgMSAxMmMxLjczIDQuMzkgNiA3LjUgMTEgNy41czkuMjctMy4xMSAxMS03LjVjLTEuNzMtNC4zOS02LTcuNS0xMS03LjV6TTEyIDE3Yy0yLjc2IDAtNS0yLjI0LTUtNXMyLjI0LTUgNS01IDUgMi4yNCA1IDUtMi4yNCA1LTUgNXptMC04Yy0xLjY2IDAtMyAxLjM0LTMgM3MxLjM0IDMgMyAzIDMtMS4zNCAzLTMtMS4zNC0zLTMtM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJyb3RhdGUtOTAtZGVncmVlcy1jY3ciPjxwYXRoIGQ9Ik03LjM0IDYuNDFMLjg2IDEyLjlsNi40OSA2LjQ4IDYuNDktNi40OC02LjUtNi40OXpNMy42OSAxMi45bDMuNjYtMy42NkwxMSAxMi45bC0zLjY2IDMuNjYtMy42NS0zLjY2em0xNS42Ny02LjI2QzE3LjYxIDQuODggMTUuMyA0IDEzIDRWLjc2TDguNzYgNSAxMyA5LjI0VjZjMS43OSAwIDMuNTguNjggNC45NSAyLjA1IDIuNzMgMi43MyAyLjczIDcuMTcgMCA5LjlDMTYuNTggMTkuMzIgMTQuNzkgMjAgMTMgMjBjLS45NyAwLTEuOTQtLjIxLTIuODQtLjYxbC0xLjQ5IDEuNDlDMTAuMDIgMjEuNjIgMTEuNTEgMjIgMTMgMjJjMi4zIDAgNC42MS0uODggNi4zNi0yLjY0IDMuNTItMy41MSAzLjUyLTkuMjEgMC0xMi43MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyb3RhdGUtbGVmdCI+PHBhdGggZD0iTTcuMTEgOC41M0w1LjcgNy4xMUM0LjggOC4yNyA0LjI0IDkuNjEgNC4wNyAxMWgyLjAyYy4xNC0uODcuNDktMS43MiAxLjAyLTIuNDd6TTYuMDkgMTNINC4wN2MuMTcgMS4zOS43MiAyLjczIDEuNjIgMy44OWwxLjQxLTEuNDJjLS41Mi0uNzUtLjg3LTEuNTktMS4wMS0yLjQ3em0xLjAxIDUuMzJjMS4xNi45IDIuNTEgMS40NCAzLjkgMS42MVYxNy45Yy0uODctLjE1LTEuNzEtLjQ5LTIuNDYtMS4wM0w3LjEgMTguMzJ6TTEzIDQuMDdWMUw4LjQ1IDUuNTUgMTMgMTBWNi4wOWMyLjg0LjQ4IDUgMi45NCA1IDUuOTFzLTIuMTYgNS40My01IDUuOTF2Mi4wMmMzLjk1LS40OSA3LTMuODUgNy03Ljkzcy0zLjA1LTcuNDQtNy03LjkzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJvdGF0ZS1yaWdodCI+PHBhdGggZD0iTTE1LjU1IDUuNTVMMTEgMXYzLjA3QzcuMDYgNC41NiA0IDcuOTIgNCAxMnMzLjA1IDcuNDQgNyA3Ljkzdi0yLjAyYy0yLjg0LS40OC01LTIuOTQtNS01LjkxczIuMTYtNS40MyA1LTUuOTFWMTBsNC41NS00LjQ1ek0xOS45MyAxMWMtLjE3LTEuMzktLjcyLTIuNzMtMS42Mi0zLjg5bC0xLjQyIDEuNDJjLjU0Ljc1Ljg4IDEuNiAxLjAyIDIuNDdoMi4wMnpNMTMgMTcuOXYyLjAyYzEuMzktLjE3IDIuNzQtLjcxIDMuOS0xLjYxbC0xLjQ0LTEuNDRjLS43NS41NC0xLjU5Ljg5LTIuNDYgMS4wM3ptMy44OS0yLjQybDEuNDIgMS40MWMuOS0xLjE2IDEuNDUtMi41IDEuNjItMy44OWgtMi4wMmMtLjE0Ljg3LS40OCAxLjcyLTEuMDIgMi40OHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzbGlkZXNob3ciPjxwYXRoIGQ9Ik0xMCA4djhsNS00LTUtNHptOS01SDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNkg1VjVoMTR2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3RyYWlnaHRlbiI+PHBhdGggZD0iTTIxIDZIM2MtMS4xIDAtMiAuOS0yIDJ2OGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjhjMC0xLjEtLjktMi0yLTJ6bTAgMTBIM1Y4aDJ2NGgyVjhoMnY0aDJWOGgydjRoMlY4aDJ2NGgyVjhoMnY4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN0eWxlIj48cGF0aCBkPSJNMi41MyAxOS42NWwxLjM0LjU2di05LjAzbC0yLjQzIDUuODZjLS40MSAxLjAyLjA4IDIuMTkgMS4wOSAyLjYxem0xOS41LTMuN0wxNy4wNyAzLjk4Yy0uMzEtLjc1LTEuMDQtMS4yMS0xLjgxLTEuMjMtLjI2IDAtLjUzLjA0LS43OS4xNUw3LjEgNS45NWMtLjc1LjMxLTEuMjEgMS4wMy0xLjIzIDEuOC0uMDEuMjcuMDQuNTQuMTUuOGw0Ljk2IDExLjk3Yy4zMS43NiAxLjA1IDEuMjIgMS44MyAxLjIzLjI2IDAgLjUyLS4wNS43Ny0uMTVsNy4zNi0zLjA1YzEuMDItLjQyIDEuNTEtMS41OSAxLjA5LTIuNnpNNy44OCA4Ljc1Yy0uNTUgMC0xLS40NS0xLTFzLjQ1LTEgMS0xIDEgLjQ1IDEgMS0uNDUgMS0xIDF6bS0yIDExYzAgMS4xLjkgMiAyIDJoMS40NWwtMy40NS04LjM0djYuMzR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3dpdGNoLWNhbWVyYSI+PHBhdGggZD0iTTIwIDRoLTMuMTdMMTUgMkg5TDcuMTcgNEg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bS01IDExLjVWMTNIOXYyLjVMNS41IDEyIDkgOC41VjExaDZWOC41bDMuNSAzLjUtMy41IDMuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzd2l0Y2gtdmlkZW8iPjxwYXRoIGQ9Ik0xOCA5LjVWNmMwLS41NS0uNDUtMS0xLTFIM2MtLjU1IDAtMSAuNDUtMSAxdjEyYzAgLjU1LjQ1IDEgMSAxaDE0Yy41NSAwIDEtLjQ1IDEtMXYtMy41bDQgNHYtMTNsLTQgNHptLTUgNlYxM0g3djIuNUwzLjUgMTIgNyA4LjVWMTFoNlY4LjVsMy41IDMuNS0zLjUgMy41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRhZy1mYWNlcyI+PHBhdGggZD0iTTExLjk5IDJDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJ6TTEyIDIwYy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHptMy41LTljLjgzIDAgMS41LS42NyAxLjUtMS41UzE2LjMzIDggMTUuNSA4IDE0IDguNjcgMTQgOS41cy42NyAxLjUgMS41IDEuNXptLTcgMGMuODMgMCAxLjUtLjY3IDEuNS0xLjVTOS4zMyA4IDguNSA4IDcgOC42NyA3IDkuNSA3LjY3IDExIDguNSAxMXptMy41IDYuNWMyLjMzIDAgNC4zMS0xLjQ2IDUuMTEtMy41SDYuODljLjggMi4wNCAyLjc4IDMuNSA1LjExIDMuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0ZXh0dXJlIj48cGF0aCBkPSJNMTkuNTEgMy4wOEwzLjA4IDE5LjUxYy4wOS4zNC4yNy42NS41MS45LjI1LjI0LjU2LjQyLjkuNTFMMjAuOTMgNC40OWMtLjE5LS42OS0uNzMtMS4yMy0xLjQyLTEuNDF6TTExLjg4IDNMMyAxMS44OHYyLjgzTDE0LjcxIDNoLTIuODN6TTUgM2MtMS4xIDAtMiAuOS0yIDJ2Mmw0LTRINXptMTQgMThjLjU1IDAgMS4wNS0uMjIgMS40MS0uNTkuMzctLjM2LjU5LS44Ni41OS0xLjQxdi0ybC00IDRoMnptLTkuNzEgMGgyLjgzTDIxIDEyLjEyVjkuMjlMOS4yOSAyMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0aW1lbGFwc2UiPjxwYXRoIGQ9Ik0xNi4yNCA3Ljc2QzE1LjA3IDYuNTkgMTMuNTQgNiAxMiA2djZsLTQuMjQgNC4yNGMyLjM0IDIuMzQgNi4xNCAyLjM0IDguNDkgMCAyLjM0LTIuMzQgMi4zNC02LjE0LS4wMS04LjQ4ek0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0aW1lciI+PHBhdGggZD0iTTE1IDFIOXYyaDZWMXptLTQgMTNoMlY4aC0ydjZ6bTguMDMtNi42MWwxLjQyLTEuNDJjLS40My0uNTEtLjktLjk5LTEuNDEtMS40MWwtMS40MiAxLjQyQzE2LjA3IDQuNzQgMTQuMTIgNCAxMiA0Yy00Ljk3IDAtOSA0LjAzLTkgOXM0LjAyIDkgOSA5IDktNC4wMyA5LTljMC0yLjEyLS43NC00LjA3LTEuOTctNS42MXpNMTIgMjBjLTMuODcgMC03LTMuMTMtNy03czMuMTMtNyA3LTcgNyAzLjEzIDcgNy0zLjEzIDctNyA3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRpbWVyLTEwIj48cGF0aCBkPSJNMCA3LjcyVjkuNGwzLTFWMThoMlY2aC0uMjVMMCA3Ljcyem0yMy43OCA2LjY1Yy0uMTQtLjI4LS4zNS0uNTMtLjYzLS43NC0uMjgtLjIxLS42MS0uMzktMS4wMS0uNTNzLS44NS0uMjctMS4zNS0uMzhjLS4zNS0uMDctLjY0LS4xNS0uODctLjIzLS4yMy0uMDgtLjQxLS4xNi0uNTUtLjI1LS4xNC0uMDktLjIzLS4xOS0uMjgtLjMtLjA1LS4xMS0uMDgtLjI0LS4wOC0uMzkgMC0uMTQuMDMtLjI4LjA5LS40MS4wNi0uMTMuMTUtLjI1LjI3LS4zNC4xMi0uMS4yNy0uMTguNDUtLjI0cy40LS4wOS42NC0uMDljLjI1IDAgLjQ3LjA0LjY2LjExLjE5LjA3LjM1LjE3LjQ4LjI5LjEzLjEyLjIyLjI2LjI5LjQyLjA2LjE2LjEuMzIuMS40OWgxLjk1YzAtLjM5LS4wOC0uNzUtLjI0LTEuMDktLjE2LS4zNC0uMzktLjYzLS42OS0uODgtLjMtLjI1LS42Ni0uNDQtMS4wOS0uNTlDMjEuNDkgOS4wNyAyMSA5IDIwLjQ2IDljLS41MSAwLS45OC4wNy0xLjM5LjIxLS40MS4xNC0uNzcuMzMtMS4wNi41Ny0uMjkuMjQtLjUxLjUyLS42Ny44NC0uMTYuMzItLjIzLjY1LS4yMyAxLjAxcy4wOC42OS4yMy45NmMuMTUuMjguMzYuNTIuNjQuNzMuMjcuMjEuNi4zOC45OC41My4zOC4xNC44MS4yNiAxLjI3LjM2LjM5LjA4LjcxLjE3Ljk1LjI2cy40My4xOS41Ny4yOWMuMTMuMS4yMi4yMi4yNy4zNC4wNS4xMi4wNy4yNS4wNy4zOSAwIC4zMi0uMTMuNTctLjQuNzctLjI3LjItLjY2LjI5LTEuMTcuMjktLjIyIDAtLjQzLS4wMi0uNjQtLjA4LS4yMS0uMDUtLjQtLjEzLS41Ni0uMjQtLjE3LS4xMS0uMy0uMjYtLjQxLS40NC0uMTEtLjE4LS4xNy0uNDEtLjE4LS42N2gtMS44OWMwIC4zNi4wOC43MS4yNCAxLjA1LjE2LjM0LjM5LjY1LjcuOTMuMzEuMjcuNjkuNDkgMS4xNS42Ni40Ni4xNy45OC4yNSAxLjU4LjI1LjUzIDAgMS4wMS0uMDYgMS40NC0uMTkuNDMtLjEzLjgtLjMxIDEuMTEtLjU0LjMxLS4yMy41NC0uNTEuNzEtLjgzLjE3LS4zMi4yNS0uNjcuMjUtMS4wNi0uMDItLjQtLjA5LS43NC0uMjQtMS4wMnptLTkuOTYtNy4zMmMtLjM0LS40LS43NS0uNy0xLjIzLS44OC0uNDctLjE4LTEuMDEtLjI3LTEuNTktLjI3LS41OCAwLTEuMTEuMDktMS41OS4yNy0uNDguMTgtLjg5LjQ3LTEuMjMuODgtLjM0LjQxLS42LjkzLS43OSAxLjU5LS4xOC42NS0uMjggMS40NS0uMjggMi4zOXYxLjkyYzAgLjk0LjA5IDEuNzQuMjggMi4zOS4xOS42Ni40NSAxLjE5LjggMS42LjM0LjQxLjc1LjcxIDEuMjMuODkuNDguMTggMS4wMS4yOCAxLjU5LjI4LjU5IDAgMS4xMi0uMDkgMS41OS0uMjguNDgtLjE4Ljg4LS40OCAxLjIyLS44OS4zNC0uNDEuNi0uOTQuNzgtMS42LjE4LS42NS4yOC0xLjQ1LjI4LTIuMzl2LTEuOTJjMC0uOTQtLjA5LTEuNzQtLjI4LTIuMzktLjE4LS42Ni0uNDQtMS4xOS0uNzgtMS41OXptLS45MiA2LjE3YzAgLjYtLjA0IDEuMTEtLjEyIDEuNTMtLjA4LjQyLS4yLjc2LS4zNiAxLjAyLS4xNi4yNi0uMzYuNDUtLjU5LjU3LS4yMy4xMi0uNTEuMTgtLjgyLjE4LS4zIDAtLjU4LS4wNi0uODItLjE4cy0uNDQtLjMxLS42LS41N2MtLjE2LS4yNi0uMjktLjYtLjM4LTEuMDItLjA5LS40Mi0uMTMtLjkzLS4xMy0xLjUzdi0yLjVjMC0uNi4wNC0xLjExLjEzLTEuNTIuMDktLjQxLjIxLS43NC4zOC0xIC4xNi0uMjUuMzYtLjQzLjYtLjU1LjI0LS4xMS41MS0uMTcuODEtLjE3LjMxIDAgLjU4LjA2LjgxLjE3LjI0LjExLjQ0LjI5LjYuNTUuMTYuMjUuMjkuNTguMzcuOTkuMDguNDEuMTMuOTIuMTMgMS41MnYyLjUxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRpbWVyLTMiPjxwYXRoIGQ9Ik0xMS42MSAxMi45N2MtLjE2LS4yNC0uMzYtLjQ2LS42Mi0uNjUtLjI1LS4xOS0uNTYtLjM1LS45My0uNDguMy0uMTQuNTctLjMuOC0uNS4yMy0uMi40Mi0uNDEuNTctLjY0LjE1LS4yMy4yNy0uNDYuMzQtLjcxLjA4LS4yNC4xMS0uNDkuMTEtLjczIDAtLjU1LS4wOS0xLjA0LS4yOC0xLjQ2LS4xOC0uNDItLjQ0LS43Ny0uNzgtMS4wNi0uMzMtLjI4LS43My0uNS0xLjItLjY0LS40NS0uMTMtLjk3LS4yLTEuNTMtLjItLjU1IDAtMS4wNi4wOC0xLjUyLjI0LS40Ny4xNy0uODcuNC0xLjIuNjktLjMzLjI5LS42LjYzLS43OCAxLjAzLS4yLjM5LS4yOS44My0uMjkgMS4yOWgxLjk4YzAtLjI2LjA1LS40OS4xNC0uNjkuMDktLjIuMjItLjM4LjM4LS41Mi4xNy0uMTQuMzYtLjI1LjU4LS4zMy4yMi0uMDguNDYtLjEyLjczLS4xMi42MSAwIDEuMDYuMTYgMS4zNi40Ny4zLjMxLjQ0Ljc1LjQ0IDEuMzIgMCAuMjctLjA0LjUyLS4xMi43NC0uMDguMjItLjIxLjQxLS4zOC41Ny0uMTcuMTYtLjM4LjI4LS42My4zNy0uMjUuMDktLjU1LjEzLS44OS4xM0g2LjcydjEuNTdINy45Yy4zNCAwIC42NC4wNC45MS4xMS4yNy4wOC41LjE5LjY5LjM1LjE5LjE2LjM0LjM2LjQ0LjYxLjEuMjQuMTYuNTQuMTYuODcgMCAuNjItLjE4IDEuMDktLjUzIDEuNDItLjM1LjMzLS44NC40OS0xLjQ1LjQ5LS4yOSAwLS41Ni0uMDQtLjgtLjEzLS4yNC0uMDgtLjQ0LS4yLS42MS0uMzYtLjE3LS4xNi0uMy0uMzQtLjM5LS41Ni0uMDktLjIyLS4xNC0uNDYtLjE0LS43Mkg0LjE5YzAgLjU1LjExIDEuMDMuMzIgMS40NS4yMS40Mi41Ljc3Ljg2IDEuMDVzLjc3LjQ5IDEuMjQuNjMuOTYuMjEgMS40OC4yMWMuNTcgMCAxLjA5LS4wOCAxLjU4LS4yMy40OS0uMTUuOTEtLjM4IDEuMjYtLjY4LjM2LS4zLjY0LS42Ni44NC0xLjEuMi0uNDMuMy0uOTMuMy0xLjQ4IDAtLjI5LS4wNC0uNTgtLjExLS44Ni0uMDgtLjI1LS4xOS0uNTEtLjM1LS43NnptOS4yNiAxLjRjLS4xNC0uMjgtLjM1LS41My0uNjMtLjc0LS4yOC0uMjEtLjYxLS4zOS0xLjAxLS41M3MtLjg1LS4yNy0xLjM1LS4zOGMtLjM1LS4wNy0uNjQtLjE1LS44Ny0uMjMtLjIzLS4wOC0uNDEtLjE2LS41NS0uMjUtLjE0LS4wOS0uMjMtLjE5LS4yOC0uMy0uMDUtLjExLS4wOC0uMjQtLjA4LS4zOXMuMDMtLjI4LjA5LS40MWMuMDYtLjEzLjE1LS4yNS4yNy0uMzQuMTItLjEuMjctLjE4LjQ1LS4yNHMuNC0uMDkuNjQtLjA5Yy4yNSAwIC40Ny4wNC42Ni4xMS4xOS4wNy4zNS4xNy40OC4yOS4xMy4xMi4yMi4yNi4yOS40Mi4wNi4xNi4xLjMyLjEuNDloMS45NWMwLS4zOS0uMDgtLjc1LS4yNC0xLjA5LS4xNi0uMzQtLjM5LS42My0uNjktLjg4LS4zLS4yNS0uNjYtLjQ0LTEuMDktLjU5LS40My0uMTUtLjkyLS4yMi0xLjQ2LS4yMi0uNTEgMC0uOTguMDctMS4zOS4yMS0uNDEuMTQtLjc3LjMzLTEuMDYuNTctLjI5LjI0LS41MS41Mi0uNjcuODQtLjE2LjMyLS4yMy42NS0uMjMgMS4wMXMuMDguNjguMjMuOTZjLjE1LjI4LjM3LjUyLjY0LjczLjI3LjIxLjYuMzguOTguNTMuMzguMTQuODEuMjYgMS4yNy4zNi4zOS4wOC43MS4xNy45NS4yNnMuNDMuMTkuNTcuMjljLjEzLjEuMjIuMjIuMjcuMzQuMDUuMTIuMDcuMjUuMDcuMzkgMCAuMzItLjEzLjU3LS40Ljc3LS4yNy4yLS42Ni4yOS0xLjE3LjI5LS4yMiAwLS40My0uMDItLjY0LS4wOC0uMjEtLjA1LS40LS4xMy0uNTYtLjI0LS4xNy0uMTEtLjMtLjI2LS40MS0uNDQtLjExLS4xOC0uMTctLjQxLS4xOC0uNjdoLTEuODljMCAuMzYuMDguNzEuMjQgMS4wNS4xNi4zNC4zOS42NS43LjkzLjMxLjI3LjY5LjQ5IDEuMTUuNjYuNDYuMTcuOTguMjUgMS41OC4yNS41MyAwIDEuMDEtLjA2IDEuNDQtLjE5LjQzLS4xMy44LS4zMSAxLjExLS41NC4zMS0uMjMuNTQtLjUxLjcxLS44My4xNy0uMzIuMjUtLjY3LjI1LTEuMDYtLjAyLS40LS4wOS0uNzQtLjI0LTEuMDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGltZXItb2ZmIj48cGF0aCBkPSJNMTkuMDQgNC41NWwtMS40MiAxLjQyQzE2LjA3IDQuNzQgMTQuMTIgNCAxMiA0Yy0xLjgzIDAtMy41My41NS00Ljk1IDEuNDhsMS40NiAxLjQ2QzkuNTMgNi4zNSAxMC43MyA2IDEyIDZjMy44NyAwIDcgMy4xMyA3IDcgMCAxLjI3LS4zNSAyLjQ3LS45NCAzLjQ5bDEuNDUgMS40NUMyMC40NSAxNi41MyAyMSAxNC44MyAyMSAxM2MwLTIuMTItLjc0LTQuMDctMS45Ny01LjYxbDEuNDItMS40Mi0xLjQxLTEuNDJ6TTE1IDFIOXYyaDZWMXptLTQgOC40NGwyIDJWOGgtMnYxLjQ0ek0zLjAyIDRMMS43NSA1LjI3IDQuNSA4LjAzQzMuNTUgOS40NSAzIDExLjE2IDMgMTNjMCA0Ljk3IDQuMDIgOSA5IDkgMS44NCAwIDMuNTUtLjU1IDQuOTgtMS41bDIuNSAyLjUgMS4yNy0xLjI3LTcuNzEtNy43MUwzLjAyIDR6TTEyIDIwYy0zLjg3IDAtNy0zLjEzLTctNyAwLTEuMjguMzUtMi40OC45NS0zLjUybDkuNTYgOS41NmMtMS4wMy42MS0yLjIzLjk2LTMuNTEuOTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idG9uYWxpdHkiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0tMSAxNy45M2MtMy45NC0uNDktNy0zLjg1LTctNy45M3MzLjA1LTcuNDQgNy03LjkzdjE1Ljg2em0yLTE1Ljg2YzEuMDMuMTMgMiAuNDUgMi44Ny45M0gxM3YtLjkzek0xMyA3aDUuMjRjLjI1LjMxLjQ4LjY1LjY4IDFIMTNWN3ptMCAzaDYuNzRjLjA4LjMzLjE1LjY2LjE5IDFIMTN2LTF6bTAgOS45M1YxOWgyLjg3Yy0uODcuNDgtMS44NC44LTIuODcuOTN6TTE4LjI0IDE3SDEzdi0xaDUuOTJjLS4yLjM1LS40My42OS0uNjggMXptMS41LTNIMTN2LTFoNi45M2MtLjA0LjM0LS4xMS42Ny0uMTkgMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0cmFuc2Zvcm0iPjxwYXRoIGQ9Ik0yMiAxOHYtMkg4VjRoMkw3IDEgNCA0aDJ2MkgydjJoNHY4YzAgMS4xLjkgMiAyIDJoOHYyaC0ybDMgMyAzLTNoLTJ2LTJoNHpNMTAgOGg2djZoMlY4YzAtMS4xLS45LTItMi0yaC02djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idHVuZSI+PHBhdGggZD0iTTMgMTd2Mmg2di0ySDN6TTMgNXYyaDEwVjVIM3ptMTAgMTZ2LTJoOHYtMmgtOHYtMmgtMnY2aDJ6TTcgOXYySDN2Mmg0djJoMlY5SDd6bTE0IDR2LTJIMTF2MmgxMHptLTYtNGgyVjdoNFY1aC00VjNoLTJ2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LWNvbWZ5Ij48cGF0aCBkPSJNMyA5aDRWNUgzdjR6bTAgNWg0di00SDN2NHptNSAwaDR2LTRIOHY0em01IDBoNHYtNGgtNHY0ek04IDloNFY1SDh2NHptNS00djRoNFY1aC00em01IDloNHYtNGgtNHY0ek0zIDE5aDR2LTRIM3Y0em01IDBoNHYtNEg4djR6bTUgMGg0di00aC00djR6bTUgMGg0di00aC00djR6bTAtMTR2NGg0VjVoLTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1jb21wYWN0Ij48cGF0aCBkPSJNMyAxOWg2di03SDN2N3ptNyAwaDEydi03SDEwdjd6TTMgNXY2aDE5VjVIM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWduZXR0ZSI+PHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tOSAxNWMtNC40MiAwLTgtMi42OS04LTZzMy41OC02IDgtNiA4IDIuNjkgOCA2LTMuNTggNi04IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id2ItYXV0byI+PHBhdGggZD0iTTYuODUgMTIuNjVoMi4zTDggOWwtMS4xNSAzLjY1ek0yMiA3bC0xLjIgNi4yOUwxOS4zIDdoLTEuNmwtMS40OSA2LjI5TDE1IDdoLS43NkMxMi43NyA1LjE3IDEwLjUzIDQgOCA0Yy00LjQyIDAtOCAzLjU4LTggOHMzLjU4IDggOCA4YzMuMTMgMCA1Ljg0LTEuODEgNy4xNS00LjQzbC4xLjQzSDE3bDEuNS02LjFMMjAgMTZoMS43NWwyLjA1LTlIMjJ6bS0xMS43IDlsLS43LTJINi40bC0uNyAySDMuOEw3IDdoMmwzLjIgOWgtMS45eiI+PC9wYXRoPjwvZz4KPGcgaWQ9IndiLWNsb3VkeSI+PHBhdGggZD0iTTE5LjM2IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYgNS42NCA1LjM1IDguMDQgMi4zNCA4LjM2IDAgMTAuOTEgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjQtNC45NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ3Yi1pbmNhbmRlc2NlbnQiPjxwYXRoIGQ9Ik0zLjU1IDE4LjU0bDEuNDEgMS40MSAxLjc5LTEuOC0xLjQxLTEuNDEtMS43OSAxLjh6TTExIDIyLjQ1aDJWMTkuNWgtMnYyLjk1ek00IDEwLjVIMXYyaDN2LTJ6bTExLTQuMTlWMS41SDl2NC44MUM3LjIxIDcuMzUgNiA5LjI4IDYgMTEuNWMwIDMuMzEgMi42OSA2IDYgNnM2LTIuNjkgNi02YzAtMi4yMi0xLjIxLTQuMTUtMy01LjE5em01IDQuMTl2Mmgzdi0yaC0zem0tMi43NiA3LjY2bDEuNzkgMS44IDEuNDEtMS40MS0xLjgtMS43OS0xLjQgMS40eiI+PC9wYXRoPjwvZz4KPGcgaWQ9IndiLWlyaWRlc2NlbnQiPjxwYXRoIGQ9Ik01IDE0LjVoMTR2LTZINXY2ek0xMSAuNTVWMy41aDJWLjU1aC0yem04LjA0IDIuNWwtMS43OSAxLjc5IDEuNDEgMS40MSAxLjgtMS43OS0xLjQyLTEuNDF6TTEzIDIyLjQ1VjE5LjVoLTJ2Mi45NWgyem03LjQ1LTMuOTFsLTEuOC0xLjc5LTEuNDEgMS40MSAxLjc5IDEuOCAxLjQyLTEuNDJ6TTMuNTUgNC40NmwxLjc5IDEuNzkgMS40MS0xLjQxLTEuNzktMS43OS0xLjQxIDEuNDF6bTEuNDEgMTUuNDlsMS43OS0xLjgtMS40MS0xLjQxLTEuNzkgMS43OSAxLjQxIDEuNDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id2Itc3VubnkiPjxwYXRoIGQ9Ik02Ljc2IDQuODRsLTEuOC0xLjc5LTEuNDEgMS40MSAxLjc5IDEuNzkgMS40Mi0xLjQxek00IDEwLjVIMXYyaDN2LTJ6bTktOS45NWgtMlYzLjVoMlYuNTV6bTcuNDUgMy45MWwtMS40MS0xLjQxLTEuNzkgMS43OSAxLjQxIDEuNDEgMS43OS0xLjc5em0tMy4yMSAxMy43bDEuNzkgMS44IDEuNDEtMS40MS0xLjgtMS43OS0xLjQgMS40ek0yMCAxMC41djJoM3YtMmgtM3ptLTgtNWMtMy4zMSAwLTYgMi42OS02IDZzMi42OSA2IDYgNiA2LTIuNjkgNi02LTIuNjktNi02LTZ6bS0xIDE2Ljk1aDJWMTkuNWgtMnYyLjk1em0tNy40NS0zLjkxbDEuNDEgMS40MSAxLjc5LTEuOC0xLjQxLTEuNDEtMS43OSAxLjh6Ij48L3BhdGg+PC9nPgo8L2RlZnM+PC9zdmc+CjwvaXJvbi1pY29uc2V0LXN2Zz5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoeWJlLmNvbnRlbnQpO3ZhciB2YmU9UWA8aXJvbi1pY29uc2V0LXN2ZyBuYW1lPSJpY29ucyIgc2l6ZT0iMjQiPgo8c3ZnPjxkZWZzPgo8ZyBpZD0iM2Qtcm90YXRpb24iPjxwYXRoIGQ9Ik03LjUyIDIxLjQ4QzQuMjUgMTkuOTQgMS45MSAxNi43NiAxLjU1IDEzSC4wNUMuNTYgMTkuMTYgNS43MSAyNCAxMiAyNGwuNjYtLjAzLTMuODEtMy44MS0xLjMzIDEuMzJ6bS44OS02LjUyYy0uMTkgMC0uMzctLjAzLS41Mi0uMDgtLjE2LS4wNi0uMjktLjEzLS40LS4yNC0uMTEtLjEtLjItLjIyLS4yNi0uMzctLjA2LS4xNC0uMDktLjMtLjA5LS40N2gtMS4zYzAgLjM2LjA3LjY4LjIxLjk1LjE0LjI3LjMzLjUuNTYuNjkuMjQuMTguNTEuMzIuODIuNDEuMy4xLjYyLjE1Ljk2LjE1LjM3IDAgLjcyLS4wNSAxLjAzLS4xNS4zMi0uMS42LS4yNS44My0uNDRzLjQyLS40My41NS0uNzJjLjEzLS4yOS4yLS42MS4yLS45NyAwLS4xOS0uMDItLjM4LS4wNy0uNTYtLjA1LS4xOC0uMTItLjM1LS4yMy0uNTEtLjEtLjE2LS4yNC0uMy0uNC0uNDMtLjE3LS4xMy0uMzctLjIzLS42MS0uMzEuMi0uMDkuMzctLjIuNTItLjMzLjE1LS4xMy4yNy0uMjcuMzctLjQyLjEtLjE1LjE3LS4zLjIyLS40Ni4wNS0uMTYuMDctLjMyLjA3LS40OCAwLS4zNi0uMDYtLjY4LS4xOC0uOTYtLjEyLS4yOC0uMjktLjUxLS41MS0uNjktLjItLjE5LS40Ny0uMzMtLjc3LS40M0M5LjEgOC4wNSA4Ljc2IDggOC4zOSA4Yy0uMzYgMC0uNjkuMDUtMSAuMTYtLjMuMTEtLjU3LjI2LS43OS40NS0uMjEuMTktLjM4LjQxLS41MS42Ny0uMTIuMjYtLjE4LjU0LS4xOC44NWgxLjNjMC0uMTcuMDMtLjMyLjA5LS40NXMuMTQtLjI1LjI1LS4zNGMuMTEtLjA5LjIzLS4xNy4zOC0uMjIuMTUtLjA1LjMtLjA4LjQ4LS4wOC40IDAgLjcuMS44OS4zMS4xOS4yLjI5LjQ5LjI5Ljg2IDAgLjE4LS4wMy4zNC0uMDguNDktLjA1LjE1LS4xNC4yNy0uMjUuMzctLjExLjEtLjI1LjE4LS40MS4yNC0uMTYuMDYtLjM2LjA5LS41OC4wOUg3LjV2MS4wM2guNzdjLjIyIDAgLjQyLjAyLjYuMDdzLjMzLjEzLjQ1LjIzYy4xMi4xMS4yMi4yNC4yOS40LjA3LjE2LjEuMzUuMS41NyAwIC40MS0uMTIuNzItLjM1LjkzLS4yMy4yMy0uNTUuMzMtLjk1LjMzem04LjU1LTUuOTJjLS4zMi0uMzMtLjctLjU5LTEuMTQtLjc3LS40My0uMTgtLjkyLS4yNy0xLjQ2LS4yN0gxMnY4aDIuM2MuNTUgMCAxLjA2LS4wOSAxLjUxLS4yNy40NS0uMTguODQtLjQzIDEuMTYtLjc2LjMyLS4zMy41Ny0uNzMuNzQtMS4xOS4xNy0uNDcuMjYtLjk5LjI2LTEuNTd2LS40YzAtLjU4LS4wOS0xLjEtLjI2LTEuNTctLjE4LS40Ny0uNDMtLjg3LS43NS0xLjJ6bS0uMzkgMy4xNmMwIC40Mi0uMDUuNzktLjE0IDEuMTMtLjEuMzMtLjI0LjYyLS40My44NS0uMTkuMjMtLjQzLjQxLS43MS41My0uMjkuMTItLjYyLjE4LS45OS4xOGgtLjkxVjkuMTJoLjk3Yy43MiAwIDEuMjcuMjMgMS42NC42OS4zOC40Ni41NyAxLjEyLjU3IDEuOTl2LjR6TTEyIDBsLS42Ni4wMyAzLjgxIDMuODEgMS4zMy0xLjMzYzMuMjcgMS41NSA1LjYxIDQuNzIgNS45NiA4LjQ4aDEuNUMyMy40NCA0Ljg0IDE4LjI5IDAgMTIgMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhY2Nlc3NpYmlsaXR5Ij48cGF0aCBkPSJNMTIgMmMxLjEgMCAyIC45IDIgMnMtLjkgMi0yIDItMi0uOS0yLTIgLjktMiAyLTJ6bTkgN2gtNnYxM2gtMnYtNmgtMnY2SDlWOUgzVjdoMTh2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhY2Nlc3NpYmxlIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjQiIHI9IjIiPjwvY2lyY2xlPjxwYXRoIGQ9Ik0xOSAxM3YtMmMtMS41NC4wMi0zLjA5LS43NS00LjA3LTEuODNsLTEuMjktMS40M2MtLjE3LS4xOS0uMzgtLjM0LS42MS0uNDUtLjAxIDAtLjAxLS4wMS0uMDItLjAxSDEzYy0uMzUtLjItLjc1LS4zLTEuMTktLjI2QzEwLjc2IDcuMTEgMTAgOC4wNCAxMCA5LjA5VjE1YzAgMS4xLjkgMiAyIDJoNXY1aDJ2LTUuNWMwLTEuMS0uOS0yLTItMmgtM3YtMy40NWMxLjI5IDEuMDcgMy4yNSAxLjk0IDUgMS45NXptLTYuMTcgNWMtLjQxIDEuMTYtMS41MiAyLTIuODMgMi0xLjY2IDAtMy0xLjM0LTMtMyAwLTEuMzEuODQtMi40MSAyLTIuODNWMTIuMWMtMi4yOC40Ni00IDIuNDgtNCA0LjkgMCAyLjc2IDIuMjQgNSA1IDUgMi40MiAwIDQuNDQtMS43MiA0LjktNGgtMi4wN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJhY2NvdW50LWJhbGFuY2UiPjxwYXRoIGQ9Ik00IDEwdjdoM3YtN0g0em02IDB2N2gzdi03aC0zek0yIDIyaDE5di0zSDJ2M3ptMTQtMTJ2N2gzdi03aC0zem0tNC41LTlMMiA2djJoMTlWNmwtOS41LTV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWNjb3VudC1iYWxhbmNlLXdhbGxldCI+PHBhdGggZD0iTTIxIDE4djFjMCAxLjEtLjkgMi0yIDJINWMtMS4xMSAwLTItLjktMi0yVjVjMC0xLjEuODktMiAyLTJoMTRjMS4xIDAgMiAuOSAyIDJ2MWgtOWMtMS4xMSAwLTIgLjktMiAydjhjMCAxLjEuODkgMiAyIDJoOXptLTktMmgxMFY4SDEydjh6bTQtMi41Yy0uODMgMC0xLjUtLjY3LTEuNS0xLjVzLjY3LTEuNSAxLjUtMS41IDEuNS42NyAxLjUgMS41LS42NyAxLjUtMS41IDEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhY2NvdW50LWJveCI+PHBhdGggZD0iTTMgNXYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0ySDVjLTEuMTEgMC0yIC45LTIgMnptMTIgNGMwIDEuNjYtMS4zNCAzLTMgM3MtMy0xLjM0LTMtMyAxLjM0LTMgMy0zIDMgMS4zNCAzIDN6bS05IDhjMC0yIDQtMy4xIDYtMy4xczYgMS4xIDYgMy4xdjFINnYtMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhY2NvdW50LWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgM2MxLjY2IDAgMyAxLjM0IDMgM3MtMS4zNCAzLTMgMy0zLTEuMzQtMy0zIDEuMzQtMyAzLTN6bTAgMTQuMmMtMi41IDAtNC43MS0xLjI4LTYtMy4yMi4wMy0xLjk5IDQtMy4wOCA2LTMuMDggMS45OSAwIDUuOTcgMS4wOSA2IDMuMDgtMS4yOSAxLjk0LTMuNSAzLjIyLTYgMy4yMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhZGQiPjxwYXRoIGQ9Ik0xOSAxM2gtNnY2aC0ydi02SDV2LTJoNlY1aDJ2Nmg2djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWRkLWFsZXJ0Ij48cGF0aCBkPSJNMTAuMDEgMjEuMDFjMCAxLjEuODkgMS45OSAxLjk5IDEuOTlzMS45OS0uODkgMS45OS0xLjk5aC0zLjk4em04Ljg3LTQuMTlWMTFjMC0zLjI1LTIuMjUtNS45Ny01LjI5LTYuNjl2LS43MkMxMy41OSAyLjcxIDEyLjg4IDIgMTIgMnMtMS41OS43MS0xLjU5IDEuNTl2LjcyQzcuMzcgNS4wMyA1LjEyIDcuNzUgNS4xMiAxMXY1LjgyTDMgMTguOTRWMjBoMTh2LTEuMDZsLTIuMTItMi4xMnpNMTYgMTMuMDFoLTN2M2gtMnYtM0g4VjExaDNWOGgydjNoM3YyLjAxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFkZC1ib3giPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tMiAxMGgtNHY0aC0ydi00SDd2LTJoNFY3aDJ2NGg0djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWRkLWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTUgMTFoLTR2NGgtMnYtNEg3di0yaDRWN2gydjRoNHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFkZC1jaXJjbGUtb3V0bGluZSI+PHBhdGggZD0iTTEzIDdoLTJ2NEg3djJoNHY0aDJ2LTRoNHYtMmgtNFY3em0tMS01QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhZGQtc2hvcHBpbmctY2FydCI+PHBhdGggZD0iTTExIDloMlY2aDNWNGgtM1YxaC0ydjNIOHYyaDN2M3ptLTQgOWMtMS4xIDAtMS45OS45LTEuOTkgMlM1LjkgMjIgNyAyMnMyLS45IDItMi0uOS0yLTItMnptMTAgMGMtMS4xIDAtMS45OS45LTEuOTkgMnMuODkgMiAxLjk5IDIgMi0uOSAyLTItLjktMi0yLTJ6bS05LjgzLTMuMjVsLjAzLS4xMi45LTEuNjNoNy40NWMuNzUgMCAxLjQxLS40MSAxLjc1LTEuMDNsMy44Ni03LjAxTDE5LjQyIDRoLS4wMWwtMS4xIDItMi43NiA1SDguNTNsLS4xMy0uMjdMNi4xNiA2bC0uOTUtMi0uOTQtMkgxdjJoMmwzLjYgNy41OS0xLjM1IDIuNDVjLS4xNi4yOC0uMjUuNjEtLjI1Ljk2IDAgMS4xLjkgMiAyIDJoMTJ2LTJINy40MmMtLjEzIDAtLjI1LS4xMS0uMjUtLjI1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFsYXJtIj48cGF0aCBkPSJNMjIgNS43MmwtNC42LTMuODYtMS4yOSAxLjUzIDQuNiAzLjg2TDIyIDUuNzJ6TTcuODggMy4zOUw2LjYgMS44NiAyIDUuNzFsMS4yOSAxLjUzIDQuNTktMy44NXpNMTIuNSA4SDExdjZsNC43NSAyLjg1Ljc1LTEuMjMtNC0yLjM3Vjh6TTEyIDRjLTQuOTcgMC05IDQuMDMtOSA5czQuMDIgOSA5IDljNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bTAgMTZjLTMuODcgMC03LTMuMTMtNy03czMuMTMtNyA3LTcgNyAzLjEzIDcgNy0zLjEzIDctNyA3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFsYXJtLWFkZCI+PHBhdGggZD0iTTcuODggMy4zOUw2LjYgMS44NiAyIDUuNzFsMS4yOSAxLjUzIDQuNTktMy44NXpNMjIgNS43MmwtNC42LTMuODYtMS4yOSAxLjUzIDQuNiAzLjg2TDIyIDUuNzJ6TTEyIDRjLTQuOTcgMC05IDQuMDMtOSA5czQuMDIgOSA5IDljNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bTAgMTZjLTMuODcgMC03LTMuMTMtNy03czMuMTMtNyA3LTcgNyAzLjEzIDcgNy0zLjEzIDctNyA3em0xLTExaC0ydjNIOHYyaDN2M2gydi0zaDN2LTJoLTNWOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhbGFybS1vZmYiPjxwYXRoIGQ9Ik0xMiA2YzMuODcgMCA3IDMuMTMgNyA3IDAgLjg0LS4xNiAxLjY1LS40MyAyLjRsMS41MiAxLjUyYy41OC0xLjE5LjkxLTIuNTEuOTEtMy45MiAwLTQuOTctNC4wMy05LTktOS0xLjQxIDAtMi43My4zMy0zLjkyLjkxTDkuNiA2LjQzQzEwLjM1IDYuMTYgMTEuMTYgNiAxMiA2em0xMC0uMjhsLTQuNi0zLjg2LTEuMjkgMS41MyA0LjYgMy44NkwyMiA1Ljcyek0yLjkyIDIuMjlMMS42NSAzLjU3IDIuOTggNC45bC0xLjExLjkzIDEuNDIgMS40MiAxLjExLS45NC44LjhDMy44MyA4LjY5IDMgMTAuNzUgMyAxM2MwIDQuOTcgNC4wMiA5IDkgOSAyLjI1IDAgNC4zMS0uODMgNS44OS0yLjJsMi4yIDIuMiAxLjI3LTEuMjdMMy44OSAzLjI3bC0uOTctLjk4em0xMy41NSAxNi4xQzE1LjI2IDE5LjM5IDEzLjcgMjAgMTIgMjBjLTMuODcgMC03LTMuMTMtNy03IDAtMS43LjYxLTMuMjYgMS42MS00LjQ3bDkuODYgOS44NnpNOC4wMiAzLjI4TDYuNiAxLjg2bC0uODYuNzEgMS40MiAxLjQyLjg2LS43MXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhbGFybS1vbiI+PHBhdGggZD0iTTIyIDUuNzJsLTQuNi0zLjg2LTEuMjkgMS41MyA0LjYgMy44NkwyMiA1Ljcyek03Ljg4IDMuMzlMNi42IDEuODYgMiA1LjcxbDEuMjkgMS41MyA0LjU5LTMuODV6TTEyIDRjLTQuOTcgMC05IDQuMDMtOSA5czQuMDIgOSA5IDljNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bTAgMTZjLTMuODcgMC03LTMuMTMtNy03czMuMTMtNyA3LTcgNyAzLjEzIDcgNy0zLjEzIDctNyA3em0tMS40Ni01LjQ3TDguNDEgMTIuNGwtMS4wNiAxLjA2IDMuMTggMy4xOCA2LTYtMS4wNi0xLjA2LTQuOTMgNC45NXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhbGwtb3V0Ij48cGF0aCBkPSJNMTYuMjEgNC4xNmw0IDR2LTR6bTQgMTJsLTQgNGg0em0tMTIgNGwtNC00djR6bS00LTEybDQtNGgtNHptMTIuOTUtLjk1Yy0yLjczLTIuNzMtNy4xNy0yLjczLTkuOSAwcy0yLjczIDcuMTcgMCA5LjkgNy4xNyAyLjczIDkuOSAwIDIuNzMtNy4xNiAwLTkuOXptLTEuMSA4LjhjLTIuMTMgMi4xMy01LjU3IDIuMTMtNy43IDBzLTIuMTMtNS41NyAwLTcuNyA1LjU3LTIuMTMgNy43IDAgMi4xMyA1LjU3IDAgNy43eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFuZHJvaWQiPjxwYXRoIGQ9Ik02IDE4YzAgLjU1LjQ1IDEgMSAxaDF2My41YzAgLjgzLjY3IDEuNSAxLjUgMS41czEuNS0uNjcgMS41LTEuNVYxOWgydjMuNWMwIC44My42NyAxLjUgMS41IDEuNXMxLjUtLjY3IDEuNS0xLjVWMTloMWMuNTUgMCAxLS40NSAxLTFWOEg2djEwek0zLjUgOEMyLjY3IDggMiA4LjY3IDIgOS41djdjMCAuODMuNjcgMS41IDEuNSAxLjVTNSAxNy4zMyA1IDE2LjV2LTdDNSA4LjY3IDQuMzMgOCAzLjUgOHptMTcgMGMtLjgzIDAtMS41LjY3LTEuNSAxLjV2N2MwIC44My42NyAxLjUgMS41IDEuNXMxLjUtLjY3IDEuNS0xLjV2LTdjMC0uODMtLjY3LTEuNS0xLjUtMS41em0tNC45Ny01Ljg0bDEuMy0xLjNjLjItLjIuMi0uNTEgMC0uNzEtLjItLjItLjUxLS4yLS43MSAwbC0xLjQ4IDEuNDhDMTMuODUgMS4yMyAxMi45NSAxIDEyIDFjLS45NiAwLTEuODYuMjMtMi42Ni42M0w3Ljg1LjE1Yy0uMi0uMi0uNTEtLjItLjcxIDAtLjIuMi0uMi41MSAwIC43MWwxLjMxIDEuMzFDNi45NyAzLjI2IDYgNS4wMSA2IDdoMTJjMC0xLjk5LS45Ny0zLjc1LTIuNDctNC44NHpNMTAgNUg5VjRoMXYxem01IDBoLTFWNGgxdjF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYW5ub3VuY2VtZW50Ij48cGF0aCBkPSJNMjAgMkg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMjJsNC00aDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDloLTJWNWgydjZ6bTAgNGgtMnYtMmgydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXBwcyI+PHBhdGggZD0iTTQgOGg0VjRINHY0em02IDEyaDR2LTRoLTR2NHptLTYgMGg0di00SDR2NHptMC02aDR2LTRINHY0em02IDBoNHYtNGgtNHY0em02LTEwdjRoNFY0aC00em0tNiA0aDRWNGgtNHY0em02IDZoNHYtNGgtNHY0em0wIDZoNHYtNGgtNHY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFyY2hpdmUiPjxwYXRoIGQ9Ik0yMC41NCA1LjIzbC0xLjM5LTEuNjhDMTguODggMy4yMSAxOC40NyAzIDE4IDNINmMtLjQ3IDAtLjg4LjIxLTEuMTYuNTVMMy40NiA1LjIzQzMuMTcgNS41NyAzIDYuMDIgMyA2LjVWMTljMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY2LjVjMC0uNDgtLjE3LS45My0uNDYtMS4yN3pNMTIgMTcuNUw2LjUgMTJIMTB2LTJoNHYyaDMuNUwxMiAxNy41ek01LjEyIDVsLjgxLTFoMTJsLjk0IDFINS4xMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcnJvdy1iYWNrIj48cGF0aCBkPSJNMjAgMTFINy44M2w1LjU5LTUuNTlMMTIgNGwtOCA4IDggOCAxLjQxLTEuNDFMNy44MyAxM0gyMHYtMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcnJvdy1kb3dud2FyZCI+PHBhdGggZD0iTTIwIDEybC0xLjQxLTEuNDFMMTMgMTYuMTdWNGgtMnYxMi4xN2wtNS41OC01LjU5TDQgMTJsOCA4IDgtOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcnJvdy1kcm9wLWRvd24iPjxwYXRoIGQ9Ik03IDEwbDUgNSA1LTV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXJyb3ctZHJvcC1kb3duLWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMTJsLTQtNGg4bC00IDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXJyb3ctZHJvcC11cCI+PHBhdGggZD0iTTcgMTRsNS01IDUgNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcnJvdy1mb3J3YXJkIj48cGF0aCBkPSJNMTIgNGwtMS40MSAxLjQxTDE2LjE3IDExSDR2MmgxMi4xN2wtNS41OCA1LjU5TDEyIDIwbDgtOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcnJvdy11cHdhcmQiPjxwYXRoIGQ9Ik00IDEybDEuNDEgMS40MUwxMSA3LjgzVjIwaDJWNy44M2w1LjU4IDUuNTlMMjAgMTJsLTgtOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXNwZWN0LXJhdGlvIj48cGF0aCBkPSJNMTkgMTJoLTJ2M2gtM3YyaDV2LTV6TTcgOWgzVjdINXY1aDJWOXptMTQtNkgzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTYuMDFIM1Y0Ljk5aDE4djE0LjAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFzc2Vzc21lbnQiPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnpNOSAxN0g3di03aDJ2N3ptNCAwaC0yVjdoMnYxMHptNCAwaC0ydi00aDJ2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3NpZ25tZW50Ij48cGF0aCBkPSJNMTkgM2gtNC4xOEMxNC40IDEuODQgMTMuMyAxIDEyIDFjLTEuMyAwLTIuNC44NC0yLjgyIDJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNyAwYy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bTIgMTRIN3YtMmg3djJ6bTMtNEg3di0yaDEwdjJ6bTAtNEg3VjdoMTB2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3NpZ25tZW50LWluZCI+PHBhdGggZD0iTTE5IDNoLTQuMThDMTQuNCAxLjg0IDEzLjMgMSAxMiAxYy0xLjMgMC0yLjQuODQtMi44MiAySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTcgMGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0wIDRjMS42NiAwIDMgMS4zNCAzIDNzLTEuMzQgMy0zIDMtMy0xLjM0LTMtMyAxLjM0LTMgMy0zem02IDEySDZ2LTEuNGMwLTIgNC0zLjEgNi0zLjFzNiAxLjEgNiAzLjFWMTl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXNzaWdubWVudC1sYXRlIj48cGF0aCBkPSJNMTkgM2gtNC4xOEMxNC40IDEuODQgMTMuMyAxIDEyIDFjLTEuMyAwLTIuNC44NC0yLjgyIDJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNiAxNWgtMnYtMmgydjJ6bTAtNGgtMlY4aDJ2NnptLTEtOWMtLjU1IDAtMS0uNDUtMS0xcy40NS0xIDEtMSAxIC40NSAxIDEtLjQ1IDEtMSAxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFzc2lnbm1lbnQtcmV0dXJuIj48cGF0aCBkPSJNMTkgM2gtNC4xOEMxNC40IDEuODQgMTMuMyAxIDEyIDFjLTEuMyAwLTIuNC44NC0yLjgyIDJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNyAwYy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bTQgMTJoLTR2M2wtNS01IDUtNXYzaDR2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3NpZ25tZW50LXJldHVybmVkIj48cGF0aCBkPSJNMTkgM2gtNC4xOEMxNC40IDEuODQgMTMuMyAxIDEyIDFjLTEuMyAwLTIuNC44NC0yLjgyIDJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNyAwYy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bTAgMTVsLTUtNWgzVjloNHY0aDNsLTUgNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3NpZ25tZW50LXR1cm5lZC1pbiI+PHBhdGggZD0iTTE5IDNoLTQuMThDMTQuNCAxLjg0IDEzLjMgMSAxMiAxYy0xLjMgMC0yLjQuODQtMi44MiAySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTcgMGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0tMiAxNGwtNC00IDEuNDEtMS40MUwxMCAxNC4xN2w2LjU5LTYuNTlMMTggOWwtOCA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImF0dGFjaG1lbnQiPjxwYXRoIGQ9Ik0yIDEyLjVDMiA5LjQ2IDQuNDYgNyA3LjUgN0gxOGMyLjIxIDAgNCAxLjc5IDQgNHMtMS43OSA0LTQgNEg5LjVDOC4xMiAxNSA3IDEzLjg4IDcgMTIuNVM4LjEyIDEwIDkuNSAxMEgxN3YySDkuNDFjLS41NSAwLS41NSAxIDAgMUgxOGMxLjEgMCAyLS45IDItMnMtLjktMi0yLTJINy41QzUuNTcgOSA0IDEwLjU3IDQgMTIuNVM1LjU3IDE2IDcuNSAxNkgxN3YySDcuNUM0LjQ2IDE4IDIgMTUuNTQgMiAxMi41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImF1dG9yZW5ldyI+PHBhdGggZD0iTTEyIDZ2M2w0LTQtNC00djNjLTQuNDIgMC04IDMuNTgtOCA4IDAgMS41Ny40NiAzLjAzIDEuMjQgNC4yNkw2LjcgMTQuOGMtLjQ1LS44My0uNy0xLjc5LS43LTIuOCAwLTMuMzEgMi42OS02IDYtNnptNi43NiAxLjc0TDE3LjMgOS4yYy40NC44NC43IDEuNzkuNyAyLjggMCAzLjMxLTIuNjkgNi02IDZ2LTNsLTQgNCA0IDR2LTNjNC40MiAwIDgtMy41OCA4LTggMC0xLjU3LS40Ni0zLjAzLTEuMjQtNC4yNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJiYWNrc3BhY2UiPjxwYXRoIGQ9Ik0yMiAzSDdjLS42OSAwLTEuMjMuMzUtMS41OS44OEwwIDEybDUuNDEgOC4xMWMuMzYuNTMuOS44OSAxLjU5Ljg5aDE1YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS0zIDEyLjU5TDE3LjU5IDE3IDE0IDEzLjQxIDEwLjQxIDE3IDkgMTUuNTkgMTIuNTkgMTIgOSA4LjQxIDEwLjQxIDcgMTQgMTAuNTkgMTcuNTkgNyAxOSA4LjQxIDE1LjQxIDEyIDE5IDE1LjU5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJhY2t1cCI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYgNS42NCA1LjM1IDguMDQgMi4zNCA4LjM2IDAgMTAuOTEgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnpNMTQgMTN2NGgtNHYtNEg3bDUtNSA1IDVoLTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYmxvY2siPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyek00IDEyYzAtNC40MiAzLjU4LTggOC04IDEuODUgMCAzLjU1LjYzIDQuOSAxLjY5TDUuNjkgMTYuOUM0LjYzIDE1LjU1IDQgMTMuODUgNCAxMnptOCA4Yy0xLjg1IDAtMy41NS0uNjMtNC45LTEuNjlMMTguMzEgNy4xQzE5LjM3IDguNDUgMjAgMTAuMTUgMjAgMTJjMCA0LjQyLTMuNTggOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYm9vayI+PHBhdGggZD0iTTE4IDJINmMtMS4xIDAtMiAuOS0yIDJ2MTZjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yek02IDRoNXY4bC0yLjUtMS41TDYgMTJWNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJib29rbWFyayI+PHBhdGggZD0iTTE3IDNIN2MtMS4xIDAtMS45OS45LTEuOTkgMkw1IDIxbDctMyA3IDNWNWMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJib29rbWFyay1ib3JkZXIiPjxwYXRoIGQ9Ik0xNyAzSDdjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNSAyMWw3LTMgNyAzVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTVsLTUtMi4xOEw3IDE4VjVoMTB2MTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYnVnLXJlcG9ydCI+PHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJidWlsZCI+PHBhdGggZD0iTTIyLjcgMTlsLTkuMS05LjFjLjktMi4zLjQtNS0xLjUtNi45LTItMi01LTIuNC03LjQtMS4zTDkgNiA2IDkgMS42IDQuN0MuNCA3LjEuOSAxMC4xIDIuOSAxMi4xYzEuOSAxLjkgNC42IDIuNCA2LjkgMS41bDkuMSA5LjFjLjQuNCAxIC40IDEuNCAwbDIuMy0yLjNjLjUtLjQuNS0xLjEuMS0xLjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FjaGVkIj48cGF0aCBkPSJNMTkgOGwtNCA0aDNjMCAzLjMxLTIuNjkgNi02IDYtMS4wMSAwLTEuOTctLjI1LTIuOC0uN2wtMS40NiAxLjQ2QzguOTcgMTkuNTQgMTAuNDMgMjAgMTIgMjBjNC40MiAwIDgtMy41OCA4LThoM2wtNC00ek02IDEyYzAtMy4zMSAyLjY5LTYgNi02IDEuMDEgMCAxLjk3LjI1IDIuOC43bDEuNDYtMS40NkMxNS4wMyA0LjQ2IDEzLjU3IDQgMTIgNGMtNC40MiAwLTggMy41OC04IDhIMWw0IDQgNC00SDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FtZXJhLWVuaGFuY2UiPjxwYXRoIGQ9Ik05IDNMNy4xNyA1SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWN2MwLTEuMS0uOS0yLTItMmgtMy4xN0wxNSAzSDl6bTMgMTVjLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNS0yLjI0IDUtNSA1em0wLTFsMS4yNS0yLjc1TDE2IDEzbC0yLjc1LTEuMjVMMTIgOWwtMS4yNSAyLjc1TDggMTNsMi43NSAxLjI1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNhbmNlbCI+PHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTUgMTMuNTlMMTUuNTkgMTcgMTIgMTMuNDEgOC40MSAxNyA3IDE1LjU5IDEwLjU5IDEyIDcgOC40MSA4LjQxIDcgMTIgMTAuNTkgMTUuNTkgNyAxNyA4LjQxIDEzLjQxIDEyIDE3IDE1LjU5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNhcmQtZ2lmdGNhcmQiPjxwYXRoIGQ9Ik0yMCA2aC0yLjE4Yy4xMS0uMzEuMTgtLjY1LjE4LTEgMC0xLjY2LTEuMzQtMy0zLTMtMS4wNSAwLTEuOTYuNTQtMi41IDEuMzVsLS41LjY3LS41LS42OEMxMC45NiAyLjU0IDEwLjA1IDIgOSAyIDcuMzQgMiA2IDMuMzQgNiA1YzAgLjM1LjA3LjY5LjE4IDFINGMtMS4xMSAwLTEuOTkuODktMS45OSAyTDIgMTljMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWOGMwLTEuMTEtLjg5LTItMi0yem0tNS0yYy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6TTkgNGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0xMSAxNUg0di0yaDE2djJ6bTAtNUg0VjhoNS4wOEw3IDEwLjgzIDguNjIgMTIgMTEgOC43NmwxLTEuMzYgMSAxLjM2TDE1LjM4IDEyIDE3IDEwLjgzIDE0LjkyIDhIMjB2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYXJkLW1lbWJlcnNoaXAiPjxwYXRoIGQ9Ik0yMCAySDRjLTEuMTEgMC0yIC44OS0yIDJ2MTFjMCAxLjExLjg5IDIgMiAyaDR2NWw0LTIgNCAydi01aDRjMS4xMSAwIDItLjg5IDItMlY0YzAtMS4xMS0uODktMi0yLTJ6bTAgMTNINHYtMmgxNnYyem0wLTVINFY0aDE2djZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FyZC10cmF2ZWwiPjxwYXRoIGQ9Ik0yMCA2aC0zVjRjMC0xLjExLS44OS0yLTItMkg5Yy0xLjExIDAtMiAuODktMiAydjJINGMtMS4xMSAwLTIgLjg5LTIgMnYxMWMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6TTkgNGg2djJIOVY0em0xMSAxNUg0di0yaDE2djJ6bTAtNUg0VjhoM3YyaDJWOGg2djJoMlY4aDN2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjaGFuZ2UtaGlzdG9yeSI+PHBhdGggZD0iTTEyIDcuNzdMMTguMzkgMThINS42MUwxMiA3Ljc3TTEyIDRMMiAyMGgyMEwxMiA0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNoZWNrIj48cGF0aCBkPSJNOSAxNi4xN0w0LjgzIDEybC0xLjQyIDEuNDFMOSAxOSAyMSA3bC0xLjQxLTEuNDF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2hlY2stYm94Ij48cGF0aCBkPSJNMTkgM0g1Yy0xLjExIDAtMiAuOS0yIDJ2MTRjMCAxLjEuODkgMiAyIDJoMTRjMS4xMSAwIDItLjkgMi0yVjVjMC0xLjEtLjg5LTItMi0yem0tOSAxNGwtNS01IDEuNDEtMS40MUwxMCAxNC4xN2w3LjU5LTcuNTlMMTkgOGwtOSA5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNoZWNrLWJveC1vdXRsaW5lLWJsYW5rIj48cGF0aCBkPSJNMTkgNXYxNEg1VjVoMTRtMC0ySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjaGVjay1jaXJjbGUiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0tMiAxNWwtNS01IDEuNDEtMS40MUwxMCAxNC4xN2w3LjU5LTcuNTlMMTkgOGwtOSA5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNoZXZyb24tbGVmdCI+PHBhdGggZD0iTTE1LjQxIDcuNDFMMTQgNmwtNiA2IDYgNiAxLjQxLTEuNDFMMTAuODMgMTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2hldnJvbi1yaWdodCI+PHBhdGggZD0iTTEwIDZMOC41OSA3LjQxIDEzLjE3IDEybC00LjU4IDQuNTlMMTAgMThsNi02eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNocm9tZS1yZWFkZXItbW9kZSI+PHBhdGggZD0iTTEzIDEyaDd2MS41aC03em0wLTIuNWg3VjExaC03em0wIDVoN1YxNmgtN3pNMjEgNEgzYy0xLjEgMC0yIC45LTIgMnYxM2MwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bTAgMTVoLTlWNmg5djEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsYXNzIj48cGF0aCBkPSJNMTggMkg2Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6TTYgNGg1djhsLTIuNS0xLjVMNiAxMlY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsZWFyIj48cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3NlIj48cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3VkIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDQgOS4xMSA0IDYuNiA1LjY0IDUuMzUgOC4wNCAyLjM0IDguMzYgMCAxMC45MSAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDEzYzIuNzYgMCA1LTIuMjQgNS01IDAtMi42NC0yLjA1LTQuNzgtNC42NS00Ljk2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3VkLWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTQuNSAxNEg4Yy0xLjY2IDAtMy0xLjM0LTMtM3MxLjM0LTMgMy0zbC4xNC4wMUM4LjU4IDguMjggMTAuMTMgNyAxMiA3YzIuMjEgMCA0IDEuNzkgNCA0aC41YzEuMzggMCAyLjUgMS4xMiAyLjUgMi41UzE3Ljg4IDE2IDE2LjUgMTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2xvdWQtZG9uZSI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYgNS42NCA1LjM1IDguMDQgMi4zNCA4LjM2IDAgMTAuOTEgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnpNMTAgMTdsLTMuNS0zLjUgMS40MS0xLjQxTDEwIDE0LjE3IDE1LjE4IDlsMS40MSAxLjQxTDEwIDE3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3VkLWRvd25sb2FkIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDQgOS4xMSA0IDYuNiA1LjY0IDUuMzUgOC4wNCAyLjM0IDguMzYgMCAxMC45MSAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDEzYzIuNzYgMCA1LTIuMjQgNS01IDAtMi42NC0yLjA1LTQuNzgtNC42NS00Ljk2ek0xNyAxM2wtNSA1LTUtNWgzVjloNHY0aDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2xvdWQtb2ZmIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDRjLTEuNDggMC0yLjg1LjQzLTQuMDEgMS4xN2wxLjQ2IDEuNDZDMTAuMjEgNi4yMyAxMS4wOCA2IDEyIDZjMy4wNCAwIDUuNSAyLjQ2IDUuNSA1LjV2LjVIMTljMS42NiAwIDMgMS4zNCAzIDMgMCAxLjEzLS42NCAyLjExLTEuNTYgMi42MmwxLjQ1IDEuNDVDMjMuMTYgMTguMTYgMjQgMTYuNjggMjQgMTVjMC0yLjY0LTIuMDUtNC43OC00LjY1LTQuOTZ6TTMgNS4yN2wyLjc1IDIuNzRDMi41NiA4LjE1IDAgMTAuNzcgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxMS43M2wyIDJMMjEgMjAuNzMgNC4yNyA0IDMgNS4yN3pNNy43MyAxMGw4IDhINmMtMi4yMSAwLTQtMS43OS00LTRzMS43OS00IDQtNGgxLjczeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3VkLXF1ZXVlIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDQgOS4xMSA0IDYuNiA1LjY0IDUuMzUgOC4wNCAyLjM0IDguMzYgMCAxMC45MSAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDEzYzIuNzYgMCA1LTIuMjQgNS01IDAtMi42NC0yLjA1LTQuNzgtNC42NS00Ljk2ek0xOSAxOEg2Yy0yLjIxIDAtNC0xLjc5LTQtNHMxLjc5LTQgNC00aC43MUM3LjM3IDcuNjkgOS40OCA2IDEyIDZjMy4wNCAwIDUuNSAyLjQ2IDUuNSA1LjV2LjVIMTljMS42NiAwIDMgMS4zNCAzIDNzLTEuMzQgMy0zIDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2xvdWQtdXBsb2FkIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDQgOS4xMSA0IDYuNiA1LjY0IDUuMzUgOC4wNCAyLjM0IDguMzYgMCAxMC45MSAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDEzYzIuNzYgMCA1LTIuMjQgNS01IDAtMi42NC0yLjA1LTQuNzgtNC42NS00Ljk2ek0xNCAxM3Y0aC00di00SDdsNS01IDUgNWgtM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJjb2RlIj48cGF0aCBkPSJNOS40IDE2LjZMNC44IDEybDQuNi00LjZMOCA2bC02IDYgNiA2IDEuNC0xLjR6bTUuMiAwbDQuNi00LjYtNC42LTQuNkwxNiA2bDYgNi02IDYtMS40LTEuNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb21wYXJlLWFycm93cyI+PHBhdGggZD0iTTkuMDEgMTRIMnYyaDcuMDF2M0wxMyAxNWwtMy45OS00djN6bTUuOTgtMXYtM0gyMlY4aC03LjAxVjVMMTEgOWwzLjk5IDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29udGVudC1jb3B5Ij48cGF0aCBkPSJNMTYgMUg0Yy0xLjEgMC0yIC45LTIgMnYxNGgyVjNoMTJWMXptMyA0SDhjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTFjMS4xIDAgMi0uOSAyLTJWN2MwLTEuMS0uOS0yLTItMnptMCAxNkg4VjdoMTF2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29udGVudC1jdXQiPjxwYXRoIGQ9Ik05LjY0IDcuNjRjLjIzLS41LjM2LTEuMDUuMzYtMS42NCAwLTIuMjEtMS43OS00LTQtNFMyIDMuNzkgMiA2czEuNzkgNCA0IDRjLjU5IDAgMS4xNC0uMTMgMS42NC0uMzZMMTAgMTJsLTIuMzYgMi4zNkM3LjE0IDE0LjEzIDYuNTkgMTQgNiAxNGMtMi4yMSAwLTQgMS43OS00IDRzMS43OSA0IDQgNCA0LTEuNzkgNC00YzAtLjU5LS4xMy0xLjE0LS4zNi0xLjY0TDEyIDE0bDcgN2gzdi0xTDkuNjQgNy42NHpNNiA4Yy0xLjEgMC0yLS44OS0yLTJzLjktMiAyLTIgMiAuODkgMiAyLS45IDItMiAyem0wIDEyYy0xLjEgMC0yLS44OS0yLTJzLjktMiAyLTIgMiAuODkgMiAyLS45IDItMiAyem02LTcuNWMtLjI4IDAtLjUtLjIyLS41LS41cy4yMi0uNS41LS41LjUuMjIuNS41LS4yMi41LS41LjV6TTE5IDNsLTYgNiAyIDIgNy03VjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29udGVudC1wYXN0ZSI+PHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb3B5cmlnaHQiPjxwYXRoIGQ9Ik0xMC4wOCAxMC44NmMuMDUtLjMzLjE2LS42Mi4zLS44N3MuMzQtLjQ2LjU5LS42MmMuMjQtLjE1LjU0LS4yMi45MS0uMjMuMjMuMDEuNDQuMDUuNjMuMTMuMi4wOS4zOC4yMS41Mi4zNnMuMjUuMzMuMzQuNTMuMTMuNDIuMTQuNjRoMS43OWMtLjAyLS40Ny0uMTEtLjktLjI4LTEuMjlzLS40LS43My0uNy0xLjAxLS42Ni0uNS0xLjA4LS42Ni0uODgtLjIzLTEuMzktLjIzYy0uNjUgMC0xLjIyLjExLTEuNy4zNHMtLjg4LjUzLTEuMi45Mi0uNTYuODQtLjcxIDEuMzZTOCAxMS4yOSA4IDExLjg3di4yN2MwIC41OC4wOCAxLjEyLjIzIDEuNjRzLjM5Ljk3LjcxIDEuMzUuNzIuNjkgMS4yLjkxIDEuMDUuMzQgMS43LjM0Yy40NyAwIC45MS0uMDggMS4zMi0uMjNzLjc3LS4zNiAxLjA4LS42My41Ni0uNTguNzQtLjk0LjI5LS43NC4zLTEuMTVoLTEuNzljLS4wMS4yMS0uMDYuNC0uMTUuNThzLS4yMS4zMy0uMzYuNDYtLjMyLjIzLS41Mi4zYy0uMTkuMDctLjM5LjA5LS42LjEtLjM2LS4wMS0uNjYtLjA4LS44OS0uMjMtLjI1LS4xNi0uNDUtLjM3LS41OS0uNjJzLS4yNS0uNTUtLjMtLjg4LS4wOC0uNjctLjA4LTF2LS4yN2MwLS4zNS4wMy0uNjguMDgtMS4wMXpNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JlYXRlIj48cGF0aCBkPSJNMyAxNy4yNVYyMWgzLjc1TDE3LjgxIDkuOTRsLTMuNzUtMy43NUwzIDE3LjI1ek0yMC43MSA3LjA0Yy4zOS0uMzkuMzktMS4wMiAwLTEuNDFsLTIuMzQtMi4zNGMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBsLTEuODMgMS44MyAzLjc1IDMuNzUgMS44My0xLjgzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyZWF0ZS1uZXctZm9sZGVyIj48cGF0aCBkPSJNMjAgNmgtOGwtMi0ySDRjLTEuMTEgMC0xLjk5Ljg5LTEuOTkgMkwyIDE4YzAgMS4xMS44OSAyIDIgMmgxNmMxLjExIDAgMi0uODkgMi0yVjhjMC0xLjExLS44OS0yLTItMnptLTEgOGgtM3YzaC0ydi0zaC0zdi0yaDNWOWgydjNoM3YyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyZWRpdC1jYXJkIj48cGF0aCBkPSJNMjAgNEg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY2YzAtMS4xMS0uODktMi0yLTJ6bTAgMTRINHYtNmgxNnY2em0wLTEwSDRWNmgxNnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRhc2hib2FyZCI+PHBhdGggZD0iTTMgMTNoOFYzSDN2MTB6bTAgOGg4di02SDN2NnptMTAgMGg4VjExaC04djEwem0wLTE4djZoOFYzaC04eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRhdGUtcmFuZ2UiPjxwYXRoIGQ9Ik05IDExSDd2Mmgydi0yem00IDBoLTJ2Mmgydi0yem00IDBoLTJ2Mmgydi0yem0yLTdoLTFWMmgtMnYySDhWMkg2djJINWMtMS4xMSAwLTEuOTkuOS0xLjk5IDJMMyAyMGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDE2SDVWOWgxNHYxMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJkZWxldGUiPjxwYXRoIGQ9Ik02IDE5YzAgMS4xLjkgMiAyIDJoOGMxLjEgMCAyLS45IDItMlY3SDZ2MTJ6TTE5IDRoLTMuNWwtMS0xaC01bC0xIDFINXYyaDE0VjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZGVsZXRlLWZvcmV2ZXIiPjxwYXRoIGQ9Ik02IDE5YzAgMS4xLjkgMiAyIDJoOGMxLjEgMCAyLS45IDItMlY3SDZ2MTJ6bTIuNDYtNy4xMmwxLjQxLTEuNDFMMTIgMTIuNTlsMi4xMi0yLjEyIDEuNDEgMS40MUwxMy40MSAxNGwyLjEyIDIuMTItMS40MSAxLjQxTDEyIDE1LjQxbC0yLjEyIDIuMTItMS40MS0xLjQxTDEwLjU5IDE0bC0yLjEzLTIuMTJ6TTE1LjUgNGwtMS0xaC01bC0xIDFINXYyaDE0VjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZGVsZXRlLXN3ZWVwIj48cGF0aCBkPSJNMTUgMTZoNHYyaC00em0wLThoN3YyaC03em0wIDRoNnYyaC02ek0zIDE4YzAgMS4xLjkgMiAyIDJoNmMxLjEgMCAyLS45IDItMlY4SDN2MTB6TTE0IDVoLTNsLTEtMUg2TDUgNUgydjJoMTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZGVzY3JpcHRpb24iPjxwYXRoIGQ9Ik0xNCAySDZjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNCAyMGMwIDEuMS44OSAyIDEuOTkgMkgxOGMxLjEgMCAyLS45IDItMlY4bC02LTZ6bTIgMTZIOHYtMmg4djJ6bTAtNEg4di0yaDh2MnptLTMtNVYzLjVMMTguNSA5SDEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRucyI+PHBhdGggZD0iTTIwIDEzSDRjLS41NSAwLTEgLjQ1LTEgMXY2YzAgLjU1LjQ1IDEgMSAxaDE2Yy41NSAwIDEtLjQ1IDEtMXYtNmMwLS41NS0uNDUtMS0xLTF6TTcgMTljLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyek0yMCAzSDRjLS41NSAwLTEgLjQ1LTEgMXY2YzAgLjU1LjQ1IDEgMSAxaDE2Yy41NSAwIDEtLjQ1IDEtMVY0YzAtLjU1LS40NS0xLTEtMXpNNyA5Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMiAyIC45IDIgMi0uOSAyLTIgMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJkb25lIj48cGF0aCBkPSJNOSAxNi4yTDQuOCAxMmwtMS40IDEuNEw5IDE5IDIxIDdsLTEuNC0xLjRMOSAxNi4yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRvbmUtYWxsIj48cGF0aCBkPSJNMTggN2wtMS40MS0xLjQxLTYuMzQgNi4zNCAxLjQxIDEuNDFMMTggN3ptNC4yNC0xLjQxTDExLjY2IDE2LjE3IDcuNDggMTJsLTEuNDEgMS40MUwxMS42NiAxOWwxMi0xMi0xLjQyLTEuNDF6TS40MSAxMy40MUw2IDE5bDEuNDEtMS40MUwxLjgzIDEyIC40MSAxMy40MXoiPjwvcGF0aD48L2c+CjxnIGlkPSJkb251dC1sYXJnZSI+PHBhdGggZD0iTTExIDUuMDhWMmMtNSAuNS05IDQuODEtOSAxMHM0IDkuNSA5IDEwdi0zLjA4Yy0zLS40OC02LTMuNC02LTYuOTJzMy02LjQ0IDYtNi45MnpNMTguOTcgMTFIMjJjLS40Ny01LTQtOC41My05LTl2My4wOEMxNiA1LjUxIDE4LjU0IDggMTguOTcgMTF6TTEzIDE4LjkyVjIyYzUtLjQ3IDguNTMtNCA5LTloLTMuMDNjLS40MyAzLTIuOTcgNS40OS01Ljk3IDUuOTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZG9udXQtc21hbGwiPjxwYXRoIGQ9Ik0xMSA5LjE2VjJjLTUgLjUtOSA0Ljc5LTkgMTBzNCA5LjUgOSAxMHYtNy4xNmMtMS0uNDEtMi0xLjUyLTItMi44NHMxLTIuNDMgMi0yLjg0ek0xNC44NiAxMUgyMmMtLjQ4LTQuNzUtNC04LjUzLTktOXY3LjE2YzEgLjMgMS41Mi45OCAxLjg2IDEuODR6TTEzIDE0Ljg0VjIyYzUtLjQ3IDguNTItNC4yNSA5LTloLTcuMTRjLS4zNC44Ni0uODYgMS41NC0xLjg2IDEuODR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZHJhZnRzIj48cGF0aCBkPSJNMjEuOTkgOGMwLS43Mi0uMzctMS4zNS0uOTQtMS43TDEyIDEgMi45NSA2LjNDMi4zOCA2LjY1IDIgNy4yOCAyIDh2MTBjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMmwtLjAxLTEwek0xMiAxM0wzLjc0IDcuODQgMTIgM2w4LjI2IDQuODRMMTIgMTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZWplY3QiPjxwYXRoIGQ9Ik01IDE3aDE0djJINXptNy0xMkw1LjMzIDE1aDEzLjM0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImVycm9yIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMSAxNWgtMnYtMmgydjJ6bTAtNGgtMlY3aDJ2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJlcnJvci1vdXRsaW5lIj48cGF0aCBkPSJNMTEgMTVoMnYyaC0yem0wLThoMnY2aC0yem0uOTktNUM2LjQ3IDIgMiA2LjQ4IDIgMTJzNC40NyAxMCA5Ljk5IDEwQzE3LjUyIDIyIDIyIDE3LjUyIDIyIDEyUzE3LjUyIDIgMTEuOTkgMnpNMTIgMjBjLTQuNDIgMC04LTMuNTgtOC04czMuNTgtOCA4LTggOCAzLjU4IDggOC0zLjU4IDgtOCA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV1cm8tc3ltYm9sIj48cGF0aCBkPSJNMTUgMTguNWMtMi41MSAwLTQuNjgtMS40Mi01Ljc2LTMuNUgxNXYtMkg4LjU4Yy0uMDUtLjMzLS4wOC0uNjYtLjA4LTFzLjAzLS42Ny4wOC0xSDE1VjlIOS4yNEMxMC4zMiA2LjkyIDEyLjUgNS41IDE1IDUuNWMxLjYxIDAgMy4wOS41OSA0LjIzIDEuNTdMMjEgNS4zQzE5LjQxIDMuODcgMTcuMyAzIDE1IDNjLTMuOTIgMC03LjI0IDIuNTEtOC40OCA2SDN2MmgzLjA2Yy0uMDQuMzMtLjA2LjY2LS4wNiAxIDAgLjM0LjAyLjY3LjA2IDFIM3YyaDMuNTJjMS4yNCAzLjQ5IDQuNTYgNiA4LjQ4IDYgMi4zMSAwIDQuNDEtLjg3IDYtMi4zbC0xLjc4LTEuNzdjLTEuMTMuOTgtMi42IDEuNTctNC4yMiAxLjU3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV2ZW50Ij48cGF0aCBkPSJNMTcgMTJoLTV2NWg1di01ek0xNiAxdjJIOFYxSDZ2Mkg1Yy0xLjExIDAtMS45OS45LTEuOTkgMkwzIDE5YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJoLTFWMWgtMnptMyAxOEg1VjhoMTR2MTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXZlbnQtc2VhdCI+PHBhdGggZD0iTTQgMTh2M2gzdi0zaDEwdjNoM3YtNkg0em0xNS04aDN2M2gtM3pNMiAxMGgzdjNIMnptMTUgM0g3VjVjMC0xLjEuOS0yIDItMmg2YzEuMSAwIDIgLjkgMiAydjh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXhpdC10by1hcHAiPjxwYXRoIGQ9Ik0xMC4wOSAxNS41OUwxMS41IDE3bDUtNS01LTUtMS40MSAxLjQxTDEyLjY3IDExSDN2Mmg5LjY3bC0yLjU4IDIuNTl6TTE5IDNINWMtMS4xMSAwLTIgLjktMiAydjRoMlY1aDE0djE0SDV2LTRIM3Y0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXhwYW5kLWxlc3MiPjxwYXRoIGQ9Ik0xMiA4bC02IDYgMS40MSAxLjQxTDEyIDEwLjgzbDQuNTkgNC41OEwxOCAxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJleHBhbmQtbW9yZSI+PHBhdGggZD0iTTE2LjU5IDguNTlMMTIgMTMuMTcgNy40MSA4LjU5IDYgMTBsNiA2IDYtNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJleHBsb3JlIj48cGF0aCBkPSJNMTIgMTAuOWMtLjYxIDAtMS4xLjQ5LTEuMSAxLjFzLjQ5IDEuMSAxLjEgMS4xYy42MSAwIDEuMS0uNDkgMS4xLTEuMXMtLjQ5LTEuMS0xLjEtMS4xek0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0yLjE5IDEyLjE5TDYgMThsMy44MS04LjE5TDE4IDZsLTMuODEgOC4xOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJleHRlbnNpb24iPjxwYXRoIGQ9Ik0yMC41IDExSDE5VjdjMC0xLjEtLjktMi0yLTJoLTRWMy41QzEzIDIuMTIgMTEuODggMSAxMC41IDFTOCAyLjEyIDggMy41VjVINGMtMS4xIDAtMS45OS45LTEuOTkgMnYzLjhIMy41YzEuNDkgMCAyLjcgMS4yMSAyLjcgMi43cy0xLjIxIDIuNy0yLjcgMi43SDJWMjBjMCAxLjEuOSAyIDIgMmgzLjh2LTEuNWMwLTEuNDkgMS4yMS0yLjcgMi43LTIuNyAxLjQ5IDAgMi43IDEuMjEgMi43IDIuN1YyMkgxN2MxLjEgMCAyLS45IDItMnYtNGgxLjVjMS4zOCAwIDIuNS0xLjEyIDIuNS0yLjVTMjEuODggMTEgMjAuNSAxMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJmYWNlIj48cGF0aCBkPSJNOSAxMS43NWMtLjY5IDAtMS4yNS41Ni0xLjI1IDEuMjVzLjU2IDEuMjUgMS4yNSAxLjI1IDEuMjUtLjU2IDEuMjUtMS4yNS0uNTYtMS4yNS0xLjI1LTEuMjV6bTYgMGMtLjY5IDAtMS4yNS41Ni0xLjI1IDEuMjVzLjU2IDEuMjUgMS4yNSAxLjI1IDEuMjUtLjU2IDEuMjUtMS4yNS0uNTYtMS4yNS0xLjI1LTEuMjV6TTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04IDAtLjI5LjAyLS41OC4wNS0uODYgMi4zNi0xLjA1IDQuMjMtMi45OCA1LjIxLTUuMzdDMTEuMDcgOC4zMyAxNC4wNSAxMCAxNy40MiAxMGMuNzggMCAxLjUzLS4wOSAyLjI1LS4yNi4yMS43MS4zMyAxLjQ3LjMzIDIuMjYgMCA0LjQxLTMuNTkgOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmF2b3JpdGUiPjxwYXRoIGQ9Ik0xMiAyMS4zNWwtMS40NS0xLjMyQzUuNCAxNS4zNiAyIDEyLjI4IDIgOC41IDIgNS40MiA0LjQyIDMgNy41IDNjMS43NCAwIDMuNDEuODEgNC41IDIuMDlDMTMuMDkgMy44MSAxNC43NiAzIDE2LjUgMyAxOS41OCAzIDIyIDUuNDIgMjIgOC41YzAgMy43OC0zLjQgNi44Ni04LjU1IDExLjU0TDEyIDIxLjM1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZhdm9yaXRlLWJvcmRlciI+PHBhdGggZD0iTTE2LjUgM2MtMS43NCAwLTMuNDEuODEtNC41IDIuMDlDMTAuOTEgMy44MSA5LjI0IDMgNy41IDMgNC40MiAzIDIgNS40MiAyIDguNWMwIDMuNzggMy40IDYuODYgOC41NSAxMS41NEwxMiAyMS4zNWwxLjQ1LTEuMzJDMTguNiAxNS4zNiAyMiAxMi4yOCAyMiA4LjUgMjIgNS40MiAxOS41OCAzIDE2LjUgM3ptLTQuNCAxNS41NWwtLjEuMS0uMS0uMUM3LjE0IDE0LjI0IDQgMTEuMzkgNCA4LjUgNCA2LjUgNS41IDUgNy41IDVjMS41NCAwIDMuMDQuOTkgMy41NyAyLjM2aDEuODdDMTMuNDYgNS45OSAxNC45NiA1IDE2LjUgNWMyIDAgMy41IDEuNSAzLjUgMy41IDAgMi44OS0zLjE0IDUuNzQtNy45IDEwLjA1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZlZWRiYWNrIj48cGF0aCBkPSJNMjAgMkg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMjJsNC00aDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDEyaC0ydi0yaDJ2MnptMC00aC0yVjZoMnY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbGUtZG93bmxvYWQiPjxwYXRoIGQ9Ik0xOSA5aC00VjNIOXY2SDVsNyA3IDctN3pNNSAxOHYyaDE0di0ySDV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsZS11cGxvYWQiPjxwYXRoIGQ9Ik05IDE2aDZ2LTZoNGwtNy03LTcgN2g0em0tNCAyaDE0djJINXoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItbGlzdCI+PHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbmQtaW4tcGFnZSI+PHBhdGggZD0iTTIwIDE5LjU5VjhsLTYtNkg2Yy0xLjEgMC0xLjk5LjktMS45OSAyTDQgMjBjMCAxLjEuODkgMiAxLjk5IDJIMThjLjQ1IDAgLjg1LS4xNSAxLjE5LS40bC00LjQzLTQuNDNjLS44LjUyLTEuNzQuODMtMi43Ni44My0yLjc2IDAtNS0yLjI0LTUtNXMyLjI0LTUgNS01IDUgMi4yNCA1IDVjMCAxLjAyLS4zMSAxLjk2LS44MyAyLjc1TDIwIDE5LjU5ek05IDEzYzAgMS42NiAxLjM0IDMgMyAzczMtMS4zNCAzLTMtMS4zNC0zLTMtMy0zIDEuMzQtMyAzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbmQtcmVwbGFjZSI+PHBhdGggZD0iTTExIDZjMS4zOCAwIDIuNjMuNTYgMy41NCAxLjQ2TDEyIDEwaDZWNGwtMi4wNSAyLjA1QzE0LjY4IDQuNzggMTIuOTMgNCAxMSA0Yy0zLjUzIDAtNi40MyAyLjYxLTYuOTIgNkg2LjFjLjQ2LTIuMjggMi40OC00IDQuOS00em01LjY0IDkuMTRjLjY2LS45IDEuMTItMS45NyAxLjI4LTMuMTRIMTUuOWMtLjQ2IDIuMjgtMi40OCA0LTQuOSA0LTEuMzggMC0yLjYzLS41Ni0zLjU0LTEuNDZMMTAgMTJINHY2bDIuMDUtMi4wNUM3LjMyIDE3LjIyIDkuMDcgMTggMTEgMThjMS41NSAwIDIuOTgtLjUxIDQuMTQtMS4zNkwyMCAyMS40OSAyMS40OSAyMGwtNC44NS00Ljg2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbmdlcnByaW50Ij48cGF0aCBkPSJNMTcuODEgNC40N2MtLjA4IDAtLjE2LS4wMi0uMjMtLjA2QzE1LjY2IDMuNDIgMTQgMyAxMi4wMSAzYy0xLjk4IDAtMy44Ni40Ny01LjU3IDEuNDEtLjI0LjEzLS41NC4wNC0uNjgtLjItLjEzLS4yNC0uMDQtLjU1LjItLjY4QzcuODIgMi41MiA5Ljg2IDIgMTIuMDEgMmMyLjEzIDAgMy45OS40NyA2LjAzIDEuNTIuMjUuMTMuMzQuNDMuMjEuNjctLjA5LjE4LS4yNi4yOC0uNDQuMjh6TTMuNSA5LjcyYy0uMSAwLS4yLS4wMy0uMjktLjA5LS4yMy0uMTYtLjI4LS40Ny0uMTItLjcuOTktMS40IDIuMjUtMi41IDMuNzUtMy4yN0M5Ljk4IDQuMDQgMTQgNC4wMyAxNy4xNSA1LjY1YzEuNS43NyAyLjc2IDEuODYgMy43NSAzLjI1LjE2LjIyLjExLjU0LS4xMi43LS4yMy4xNi0uNTQuMTEtLjctLjEyLS45LTEuMjYtMi4wNC0yLjI1LTMuMzktMi45NC0yLjg3LTEuNDctNi41NC0xLjQ3LTkuNC4wMS0xLjM2LjctMi41IDEuNy0zLjQgMi45Ni0uMDguMTQtLjIzLjIxLS4zOS4yMXptNi4yNSAxMi4wN2MtLjEzIDAtLjI2LS4wNS0uMzUtLjE1LS44Ny0uODctMS4zNC0xLjQzLTIuMDEtMi42NC0uNjktMS4yMy0xLjA1LTIuNzMtMS4wNS00LjM0IDAtMi45NyAyLjU0LTUuMzkgNS42Ni01LjM5czUuNjYgMi40MiA1LjY2IDUuMzljMCAuMjgtLjIyLjUtLjUuNXMtLjUtLjIyLS41LS41YzAtMi40Mi0yLjA5LTQuMzktNC42Ni00LjM5LTIuNTcgMC00LjY2IDEuOTctNC42NiA0LjM5IDAgMS40NC4zMiAyLjc3LjkzIDMuODUuNjQgMS4xNSAxLjA4IDEuNjQgMS44NSAyLjQyLjE5LjIuMTkuNTEgMCAuNzEtLjExLjEtLjI0LjE1LS4zNy4xNXptNy4xNy0xLjg1Yy0xLjE5IDAtMi4yNC0uMy0zLjEtLjg5LTEuNDktMS4wMS0yLjM4LTIuNjUtMi4zOC00LjM5IDAtLjI4LjIyLS41LjUtLjVzLjUuMjIuNS41YzAgMS40MS43MiAyLjc0IDEuOTQgMy41Ni43MS40OCAxLjU0LjcxIDIuNTQuNzEuMjQgMCAuNjQtLjAzIDEuMDQtLjEuMjctLjA1LjUzLjEzLjU4LjQxLjA1LjI3LS4xMy41My0uNDEuNTgtLjU3LjExLTEuMDcuMTItMS4yMS4xMnpNMTQuOTEgMjJjLS4wNCAwLS4wOS0uMDEtLjEzLS4wMi0xLjU5LS40NC0yLjYzLTEuMDMtMy43Mi0yLjEtMS40LTEuMzktMi4xNy0zLjI0LTIuMTctNS4yMiAwLTEuNjIgMS4zOC0yLjk0IDMuMDgtMi45NCAxLjcgMCAzLjA4IDEuMzIgMy4wOCAyLjk0IDAgMS4wNy45MyAxLjk0IDIuMDggMS45NHMyLjA4LS44NyAyLjA4LTEuOTRjMC0zLjc3LTMuMjUtNi44My03LjI1LTYuODMtMi44NCAwLTUuNDQgMS41OC02LjYxIDQuMDMtLjM5LjgxLS41OSAxLjc2LS41OSAyLjggMCAuNzguMDcgMi4wMS42NyAzLjYxLjEuMjYtLjAzLjU1LS4yOS42NC0uMjYuMS0uNTUtLjA0LS42NC0uMjktLjQ5LTEuMzEtLjczLTIuNjEtLjczLTMuOTYgMC0xLjIuMjMtMi4yOS42OC0zLjI0IDEuMzMtMi43OSA0LjI4LTQuNiA3LjUxLTQuNiA0LjU1IDAgOC4yNSAzLjUxIDguMjUgNy44MyAwIDEuNjItMS4zOCAyLjk0LTMuMDggMi45NHMtMy4wOC0xLjMyLTMuMDgtMi45NGMwLTEuMDctLjkzLTEuOTQtMi4wOC0xLjk0cy0yLjA4Ljg3LTIuMDggMS45NGMwIDEuNzEuNjYgMy4zMSAxLjg3IDQuNTEuOTUuOTQgMS44NiAxLjQ2IDMuMjcgMS44NS4yNy4wNy40Mi4zNS4zNS42MS0uMDUuMjMtLjI2LjM4LS40Ny4zOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaXJzdC1wYWdlIj48cGF0aCBkPSJNMTguNDEgMTYuNTlMMTMuODIgMTJsNC41OS00LjU5TDE3IDZsLTYgNiA2IDZ6TTYgNmgydjEySDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxhZyI+PHBhdGggZD0iTTE0LjQgNkwxNCA0SDV2MTdoMnYtN2g1LjZsLjQgMmg3VjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxpZ2h0LWxhbmQiPjxwYXRoIGQ9Ik0yLjUgMTloMTl2MmgtMTl6bTcuMTgtNS43M2w0LjM1IDEuMTYgNS4zMSAxLjQyYy44LjIxIDEuNjItLjI2IDEuODQtMS4wNi4yMS0uOC0uMjYtMS42Mi0xLjA2LTEuODRsLTUuMzEtMS40Mi0yLjc2LTkuMDJMMTAuMTIgMnY4LjI4TDUuMTUgOC45NWwtLjkzLTIuMzItMS40NS0uMzl2NS4xN2wxLjYuNDMgNS4zMSAxLjQzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZsaWdodC10YWtlb2ZmIj48cGF0aCBkPSJNMi41IDE5aDE5djJoLTE5em0xOS41Ny05LjM2Yy0uMjEtLjgtMS4wNC0xLjI4LTEuODQtMS4wNkwxNC45MiAxMGwtNi45LTYuNDMtMS45My41MSA0LjE0IDcuMTctNC45NyAxLjMzLTEuOTctMS41NC0xLjQ1LjM5IDEuODIgMy4xNi43NyAxLjMzIDEuNi0uNDMgNS4zMS0xLjQyIDQuMzUtMS4xNkwyMSAxMS40OWMuODEtLjIzIDEuMjgtMS4wNSAxLjA3LTEuODV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxpcC10by1iYWNrIj48cGF0aCBkPSJNOSA3SDd2MmgyVjd6bTAgNEg3djJoMnYtMnptMC04Yy0xLjExIDAtMiAuOS0yIDJoMlYzem00IDEyaC0ydjJoMnYtMnptNi0xMnYyaDJjMC0xLjEtLjktMi0yLTJ6bS02IDBoLTJ2MmgyVjN6TTkgMTd2LTJIN2MwIDEuMS44OSAyIDIgMnptMTAtNGgydi0yaC0ydjJ6bTAtNGgyVjdoLTJ2MnptMCA4YzEuMSAwIDItLjkgMi0yaC0ydjJ6TTUgN0gzdjEyYzAgMS4xLjg5IDIgMiAyaDEydi0ySDVWN3ptMTAtMmgyVjNoLTJ2MnptMCAxMmgydi0yaC0ydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxpcC10by1mcm9udCI+PHBhdGggZD0iTTMgMTNoMnYtMkgzdjJ6bTAgNGgydi0ySDN2MnptMiA0di0ySDNjMCAxLjEuODkgMiAyIDJ6TTMgOWgyVjdIM3Yyem0xMiAxMmgydi0yaC0ydjJ6bTQtMThIOWMtMS4xMSAwLTIgLjktMiAydjEwYzAgMS4xLjg5IDIgMiAyaDEwYzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTJIOVY1aDEwdjEwem0tOCA2aDJ2LTJoLTJ2MnptLTQgMGgydi0ySDd2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmb2xkZXIiPjxwYXRoIGQ9Ik0xMCA0SDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJMMiAxOGMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjhjMC0xLjEtLjktMi0yLTJoLThsLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmb2xkZXItb3BlbiI+PHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yem0wIDEySDRWOGgxNnYxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmb2xkZXItc2hhcmVkIj48cGF0aCBkPSJNMjAgNmgtOGwtMi0ySDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJMMiAxOGMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjhjMC0xLjEtLjktMi0yLTJ6bS01IDNjMS4xIDAgMiAuOSAyIDJzLS45IDItMiAyLTItLjktMi0yIC45LTIgMi0yem00IDhoLTh2LTFjMC0xLjMzIDIuNjctMiA0LTJzNCAuNjcgNCAydjF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZm9udC1kb3dubG9hZCI+PHBhdGggZD0iTTkuOTMgMTMuNWg0LjE0TDEyIDcuOTh6TTIwIDJINGMtMS4xIDAtMiAuOS0yIDJ2MTZjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yem0tNC4wNSAxNi41bC0xLjE0LTNIOS4xN2wtMS4xMiAzSDUuOTZsNS4xMS0xM2gxLjg2bDUuMTEgMTNoLTIuMDl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZm9yd2FyZCI+PHBhdGggZD0iTTEyIDhWNGw4IDgtOCA4di00SDRWOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmdWxsc2NyZWVuIj48cGF0aCBkPSJNNyAxNEg1djVoNXYtMkg3di0zem0tMi00aDJWN2gzVjVINXY1em0xMiA3aC0zdjJoNXYtNWgtMnYzek0xNCA1djJoM3YzaDJWNWgtNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJmdWxsc2NyZWVuLWV4aXQiPjxwYXRoIGQ9Ik01IDE2aDN2M2gydi01SDV2MnptMy04SDV2Mmg1VjVIOHYzem02IDExaDJ2LTNoM3YtMmgtNXY1em0yLTExVjVoLTJ2NWg1VjhoLTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZy10cmFuc2xhdGUiPjxwYXRoIGQ9Ik0yMCA1aC05LjEyTDEwIDJINGMtMS4xIDAtMiAuOS0yIDJ2MTNjMCAxLjEuOSAyIDIgMmg3bDEgM2g4YzEuMSAwIDItLjkgMi0yVjdjMC0xLjEtLjktMi0yLTJ6TTcuMTcgMTQuNTljLTIuMjUgMC00LjA5LTEuODMtNC4wOS00LjA5czEuODMtNC4wOSA0LjA5LTQuMDljMS4wNCAwIDEuOTkuMzcgMi43NCAxLjA3bC4wNy4wNi0xLjIzIDEuMTgtLjA2LS4wNWMtLjI5LS4yNy0uNzgtLjU5LTEuNTItLjU5LTEuMzEgMC0yLjM4IDEuMDktMi4zOCAyLjQyczEuMDcgMi40MiAyLjM4IDIuNDJjMS4zNyAwIDEuOTYtLjg3IDIuMTItMS40Nkg3LjA4VjkuOTFoMy45NWwuMDEuMDdjLjA0LjIxLjA1LjQuMDUuNjEgMCAyLjM1LTEuNjEgNC0zLjkyIDR6bTYuMDMtMS43MWMuMzMuNi43NCAxLjE4IDEuMTkgMS43bC0uNTQuNTMtLjY1LTIuMjN6bS43Ny0uNzZoLS45OWwtLjMxLTEuMDRoMy45OXMtLjM0IDEuMzEtMS41NiAyLjc0Yy0uNTItLjYyLS44OS0xLjIzLTEuMTMtMS43ek0yMSAyMGMwIC41NS0uNDUgMS0xIDFoLTdsMi0yLS44MS0yLjc3LjkyLS45MkwxNy43OSAxOGwuNzMtLjczLTIuNzEtMi42OGMuOS0xLjAzIDEuNi0yLjI1IDEuOTItMy41MUgxOXYtMS4wNGgtMy42NFY5aC0xLjA0djEuMDRoLTEuOTZMMTEuMTggNkgyMGMuNTUgMCAxIC40NSAxIDF2MTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZ2F2ZWwiPjxwYXRoIGQ9Ik0xIDIxaDEydjJIMXpNNS4yNDUgOC4wN2wyLjgzLTIuODI3IDE0LjE0IDE0LjE0Mi0yLjgyOCAyLjgyOHpNMTIuMzE3IDFsNS42NTcgNS42NTYtMi44MyAyLjgzLTUuNjU0LTUuNjZ6TTMuODI1IDkuNDg1bDUuNjU3IDUuNjU3LTIuODI4IDIuODI4LTUuNjU3LTUuNjU3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imdlc3R1cmUiPjxwYXRoIGQ9Ik00LjU5IDYuODljLjctLjcxIDEuNC0xLjM1IDEuNzEtMS4yMi41LjIgMCAxLjAzLS4zIDEuNTItLjI1LjQyLTIuODYgMy44OS0yLjg2IDYuMzEgMCAxLjI4LjQ4IDIuMzQgMS4zNCAyLjk4Ljc1LjU2IDEuNzQuNzMgMi42NC40NiAxLjA3LS4zMSAxLjk1LTEuNCAzLjA2LTIuNzcgMS4yMS0xLjQ5IDIuODMtMy40NCA0LjA4LTMuNDQgMS42MyAwIDEuNjUgMS4wMSAxLjc2IDEuNzktMy43OC42NC01LjM4IDMuNjctNS4zOCA1LjM3IDAgMS43IDEuNDQgMy4wOSAzLjIxIDMuMDkgMS42MyAwIDQuMjktMS4zMyA0LjY5LTYuMUgyMXYtMi41aC0yLjQ3Yy0uMTUtMS42NS0xLjA5LTQuMi00LjAzLTQuMi0yLjI1IDAtNC4xOCAxLjkxLTQuOTQgMi44NC0uNTguNzMtMi4wNiAyLjQ4LTIuMjkgMi43Mi0uMjUuMy0uNjguODQtMS4xMS44NC0uNDUgMC0uNzItLjgzLS4zNi0xLjkyLjM1LTEuMDkgMS40LTIuODYgMS44NS0zLjUyLjc4LTEuMTQgMS4zLTEuOTIgMS4zLTMuMjhDOC45NSAzLjY5IDcuMzEgMyA2LjQ0IDMgNS4xMiAzIDMuOTcgNCAzLjcyIDQuMjVjLS4zNi4zNi0uNjYuNjYtLjg4LjkzbDEuNzUgMS43MXptOS4yOSAxMS42NmMtLjMxIDAtLjc0LS4yNi0uNzQtLjcyIDAtLjYuNzMtMi4yIDIuODctMi43Ni0uMyAyLjY5LTEuNDMgMy40OC0yLjEzIDMuNDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZ2V0LWFwcCI+PHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiPjwvcGF0aD48L2c+CjxnIGlkPSJnaWYiPjxwYXRoIGQ9Ik0xMS41IDlIMTN2NmgtMS41ek05IDlINmMtLjYgMC0xIC41LTEgMXY0YzAgLjUuNCAxIDEgMWgzYy42IDAgMS0uNSAxLTF2LTJIOC41djEuNWgtMnYtM0gxMFYxMGMwLS41LS40LTEtMS0xem0xMCAxLjVWOWgtNC41djZIMTZ2LTJoMnYtMS41aC0ydi0xeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImdyYWRlIj48cGF0aCBkPSJNMTIgMTcuMjdMMTguMTggMjFsLTEuNjQtNy4wM0wyMiA5LjI0bC03LjE5LS42MUwxMiAyIDkuMTkgOC42MyAyIDkuMjRsNS40NiA0LjczTDUuODIgMjF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZ3JvdXAtd29yayI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6TTggMTcuNWMtMS4zOCAwLTIuNS0xLjEyLTIuNS0yLjVzMS4xMi0yLjUgMi41LTIuNSAyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjV6TTkuNSA4YzAtMS4zOCAxLjEyLTIuNSAyLjUtMi41czIuNSAxLjEyIDIuNSAyLjUtMS4xMiAyLjUtMi41IDIuNVM5LjUgOS4zOCA5LjUgOHptNi41IDkuNWMtMS4zOCAwLTIuNS0xLjEyLTIuNS0yLjVzMS4xMi0yLjUgMi41LTIuNSAyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaGVscCI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTEgMTdoLTJ2LTJoMnYyem0yLjA3LTcuNzVsLS45LjkyQzEzLjQ1IDEyLjkgMTMgMTMuNSAxMyAxNWgtMnYtLjVjMC0xLjEuNDUtMi4xIDEuMTctMi44M2wxLjI0LTEuMjZjLjM3LS4zNi41OS0uODYuNTktMS40MSAwLTEuMS0uOS0yLTItMnMtMiAuOS0yIDJIOGMwLTIuMjEgMS43OS00IDQtNHM0IDEuNzkgNCA0YzAgLjg4LS4zNiAxLjY4LS45MyAyLjI1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImhlbHAtb3V0bGluZSI+PHBhdGggZD0iTTExIDE4aDJ2LTJoLTJ2MnptMS0xNkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6bTAtMTRjLTIuMjEgMC00IDEuNzktNCA0aDJjMC0xLjEuOS0yIDItMnMyIC45IDIgMmMwIDItMyAxLjc1LTMgNWgyYzAtMi4yNSAzLTIuNSAzLTUgMC0yLjIxLTEuNzktNC00LTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaGlnaGxpZ2h0LW9mZiI+PHBhdGggZD0iTTE0LjU5IDhMMTIgMTAuNTkgOS40MSA4IDggOS40MSAxMC41OSAxMiA4IDE0LjU5IDkuNDEgMTYgMTIgMTMuNDEgMTQuNTkgMTYgMTYgMTQuNTkgMTMuNDEgMTIgMTYgOS40MSAxNC41OSA4ek0xMiAyQzYuNDcgMiAyIDYuNDcgMiAxMnM0LjQ3IDEwIDEwIDEwIDEwLTQuNDcgMTAtMTBTMTcuNTMgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJoaXN0b3J5Ij48cGF0aCBkPSJNMTMgM2MtNC45NyAwLTkgNC4wMy05IDlIMWwzLjg5IDMuODkuMDcuMTRMOSAxMkg2YzAtMy44NyAzLjEzLTcgNy03czcgMy4xMyA3IDctMy4xMyA3LTcgN2MtMS45MyAwLTMuNjgtLjc5LTQuOTQtMi4wNmwtMS40MiAxLjQyQzguMjcgMTkuOTkgMTAuNTEgMjEgMTMgMjFjNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bS0xIDV2NWw0LjI4IDIuNTQuNzItMS4yMS0zLjUtMi4wOFY4SDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImhvbWUiPjxwYXRoIGQ9Ik0xMCAyMHYtNmg0djZoNXYtOGgzTDEyIDMgMiAxMmgzdjh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaG91cmdsYXNzLWVtcHR5Ij48cGF0aCBkPSJNNiAydjZoLjAxTDYgOC4wMSAxMCAxMmwtNCA0IC4wMS4wMUg2VjIyaDEydi01Ljk5aC0uMDFMMTggMTZsLTQtNCA0LTMuOTktLjAxLS4wMUgxOFYySDZ6bTEwIDE0LjVWMjBIOHYtMy41bDQtNCA0IDR6bS00LTVsLTQtNFY0aDh2My41bC00IDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaG91cmdsYXNzLWZ1bGwiPjxwYXRoIGQ9Ik02IDJ2NmguMDFMNiA4LjAxIDEwIDEybC00IDQgLjAxLjAxSDZWMjJoMTJ2LTUuOTloLS4wMUwxOCAxNmwtNC00IDQtMy45OS0uMDEtLjAxSDE4VjJINnoiPjwvcGF0aD48L2c+CjxnIGlkPSJodHRwIj48cGF0aCBkPSJNNC41IDExaC0yVjlIMXY2aDEuNXYtMi41aDJWMTVINlY5SDQuNXYyem0yLjUtLjVoMS41VjE1SDEwdi00LjVoMS41VjlIN3YxLjV6bTUuNSAwSDE0VjE1aDEuNXYtNC41SDE3VjloLTQuNXYxLjV6bTktMS41SDE4djZoMS41di0yaDJjLjggMCAxLjUtLjcgMS41LTEuNXYtMWMwLS44LS43LTEuNS0xLjUtMS41em0wIDIuNWgtMnYtMWgydjF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaHR0cHMiPjxwYXRoIGQ9Ik0xOCA4aC0xVjZjMC0yLjc2LTIuMjQtNS01LTVTNyAzLjI0IDcgNnYySDZjLTEuMSAwLTIgLjktMiAydjEwYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWMTBjMC0xLjEtLjktMi0yLTJ6bS02IDljLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyem0zLjEtOUg4LjlWNmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMSAxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImltcG9ydGFudC1kZXZpY2VzIj48cGF0aCBkPSJNMjMgMTEuMDFMMTggMTFjLS41NSAwLTEgLjQ1LTEgMXY5YzAgLjU1LjQ1IDEgMSAxaDVjLjU1IDAgMS0uNDUgMS0xdi05YzAtLjU1LS40NS0uOTktMS0uOTl6TTIzIDIwaC01di03aDV2N3pNMjAgMkgyQy44OSAyIDAgMi44OSAwIDR2MTJjMCAxLjEuODkgMiAyIDJoN3YySDd2Mmg4di0yaC0ydi0yaDJ2LTJIMlY0aDE4djVoMlY0YzAtMS4xMS0uOS0yLTItMnptLTguMDMgN0wxMSA2bC0uOTcgM0g3bDIuNDcgMS43Ni0uOTQgMi45MSAyLjQ3LTEuOCAyLjQ3IDEuOC0uOTQtMi45MUwxNSA5aC0zLjAzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImluYm94Ij48cGF0aCBkPSJNMTkgM0g0Ljk5Yy0xLjExIDAtMS45OC44OS0xLjk4IDJMMyAxOWMwIDEuMS44OCAyIDEuOTkgMkgxOWMxLjEgMCAyLS45IDItMlY1YzAtMS4xMS0uOS0yLTItMnptMCAxMmgtNGMwIDEuNjYtMS4zNSAzLTMgM3MtMy0xLjM0LTMtM0g0Ljk5VjVIMTl2MTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaW5kZXRlcm1pbmF0ZS1jaGVjay1ib3giPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTIgMTBIN3YtMmgxMHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImluZm8iPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0xIDE1aC0ydi02aDJ2NnptMC04aC0yVjdoMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImluZm8tb3V0bGluZSI+PHBhdGggZD0iTTExIDE3aDJ2LTZoLTJ2NnptMS0xNUM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6TTExIDloMlY3aC0ydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaW5wdXQiPjxwYXRoIGQ9Ik0yMSAzLjAxSDNjLTEuMSAwLTIgLjktMiAyVjloMlY0Ljk5aDE4djE0LjAzSDNWMTVIMXY0LjAxYzAgMS4xLjkgMS45OCAyIDEuOThoMThjMS4xIDAgMi0uODggMi0xLjk4di0xNGMwLTEuMTEtLjktMi0yLTJ6TTExIDE2bDQtNC00LTR2M0gxdjJoMTB2M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJpbnZlcnQtY29sb3JzIj48cGF0aCBkPSJNMTcuNjYgNy45M0wxMiAyLjI3IDYuMzQgNy45M2MtMy4xMiAzLjEyLTMuMTIgOC4xOSAwIDExLjMxQzcuOSAyMC44IDkuOTUgMjEuNTggMTIgMjEuNThjMi4wNSAwIDQuMS0uNzggNS42Ni0yLjM0IDMuMTItMy4xMiAzLjEyLTguMTkgMC0xMS4zMXpNMTIgMTkuNTljLTEuNiAwLTMuMTEtLjYyLTQuMjQtMS43NkM2LjYyIDE2LjY5IDYgMTUuMTkgNiAxMy41OXMuNjItMy4xMSAxLjc2LTQuMjRMMTIgNS4xdjE0LjQ5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxhYmVsIj48cGF0aCBkPSJNMTcuNjMgNS44NEMxNy4yNyA1LjMzIDE2LjY3IDUgMTYgNUw1IDUuMDFDMy45IDUuMDEgMyA1LjkgMyA3djEwYzAgMS4xLjkgMS45OSAyIDEuOTlMMTYgMTljLjY3IDAgMS4yNy0uMzMgMS42My0uODRMMjIgMTJsLTQuMzctNi4xNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJsYWJlbC1vdXRsaW5lIj48cGF0aCBkPSJNMTcuNjMgNS44NEMxNy4yNyA1LjMzIDE2LjY3IDUgMTYgNUw1IDUuMDFDMy45IDUuMDEgMyA1LjkgMyA3djEwYzAgMS4xLjkgMS45OSAyIDEuOTlMMTYgMTljLjY3IDAgMS4yNy0uMzMgMS42My0uODRMMjIgMTJsLTQuMzctNi4xNnpNMTYgMTdINVY3aDExbDMuNTUgNUwxNiAxN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJsYW5ndWFnZSI+PHBhdGggZD0iTTExLjk5IDJDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJ6bTYuOTMgNmgtMi45NWMtLjMyLTEuMjUtLjc4LTIuNDUtMS4zOC0zLjU2IDEuODQuNjMgMy4zNyAxLjkxIDQuMzMgMy41NnpNMTIgNC4wNGMuODMgMS4yIDEuNDggMi41MyAxLjkxIDMuOTZoLTMuODJjLjQzLTEuNDMgMS4wOC0yLjc2IDEuOTEtMy45NnpNNC4yNiAxNEM0LjEgMTMuMzYgNCAxMi42OSA0IDEycy4xLTEuMzYuMjYtMmgzLjM4Yy0uMDguNjYtLjE0IDEuMzItLjE0IDIgMCAuNjguMDYgMS4zNC4xNCAySDQuMjZ6bS44MiAyaDIuOTVjLjMyIDEuMjUuNzggMi40NSAxLjM4IDMuNTYtMS44NC0uNjMtMy4zNy0xLjktNC4zMy0zLjU2em0yLjk1LThINS4wOGMuOTYtMS42NiAyLjQ5LTIuOTMgNC4zMy0zLjU2QzguODEgNS41NSA4LjM1IDYuNzUgOC4wMyA4ek0xMiAxOS45NmMtLjgzLTEuMi0xLjQ4LTIuNTMtMS45MS0zLjk2aDMuODJjLS40MyAxLjQzLTEuMDggMi43Ni0xLjkxIDMuOTZ6TTE0LjM0IDE0SDkuNjZjLS4wOS0uNjYtLjE2LTEuMzItLjE2LTIgMC0uNjguMDctMS4zNS4xNi0yaDQuNjhjLjA5LjY1LjE2IDEuMzIuMTYgMiAwIC42OC0uMDcgMS4zNC0uMTYgMnptLjI1IDUuNTZjLjYtMS4xMSAxLjA2LTIuMzEgMS4zOC0zLjU2aDIuOTVjLS45NiAxLjY1LTIuNDkgMi45My00LjMzIDMuNTZ6TTE2LjM2IDE0Yy4wOC0uNjYuMTQtMS4zMi4xNC0yIDAtLjY4LS4wNi0xLjM0LS4xNC0yaDMuMzhjLjE2LjY0LjI2IDEuMzEuMjYgMnMtLjEgMS4zNi0uMjYgMmgtMy4zOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJsYXN0LXBhZ2UiPjxwYXRoIGQ9Ik01LjU5IDcuNDFMMTAuMTggMTJsLTQuNTkgNC41OUw3IDE4bDYtNi02LTZ6TTE2IDZoMnYxMmgtMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJsYXVuY2giPjxwYXRoIGQ9Ik0xOSAxOUg1VjVoN1YzSDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJsaWdodGJ1bGItb3V0bGluZSI+PHBhdGggZD0iTTkgMjFjMCAuNTUuNDUgMSAxIDFoNGMuNTUgMCAxLS40NSAxLTF2LTFIOXYxem0zLTE5QzguMTQgMiA1IDUuMTQgNSA5YzAgMi4zOCAxLjE5IDQuNDcgMyA1Ljc0VjE3YzAgLjU1LjQ1IDEgMSAxaDZjLjU1IDAgMS0uNDUgMS0xdi0yLjI2YzEuODEtMS4yNyAzLTMuMzYgMy01Ljc0IDAtMy44Ni0zLjE0LTctNy03em0yLjg1IDExLjFsLS44NS42VjE2aC00di0yLjNsLS44NS0uNkM3LjggMTIuMTYgNyAxMC42MyA3IDljMC0yLjc2IDIuMjQtNSA1LTVzNSAyLjI0IDUgNWMwIDEuNjMtLjggMy4xNi0yLjE1IDQuMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsaW5lLXN0eWxlIj48cGF0aCBkPSJNMyAxNmg1di0ySDN2MnptNi41IDBoNXYtMmgtNXYyem02LjUgMGg1di0yaC01djJ6TTMgMjBoMnYtMkgzdjJ6bTQgMGgydi0ySDd2MnptNCAwaDJ2LTJoLTJ2MnptNCAwaDJ2LTJoLTJ2MnptNCAwaDJ2LTJoLTJ2MnpNMyAxMmg4di0ySDN2MnptMTAgMGg4di0yaC04djJ6TTMgNHY0aDE4VjRIM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJsaW5lLXdlaWdodCI+PHBhdGggZD0iTTMgMTdoMTh2LTJIM3Yyem0wIDNoMTh2LTFIM3Yxem0wLTdoMTh2LTNIM3Yzem0wLTl2NGgxOFY0SDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibGluayI+PHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imxpc3QiPjxwYXRoIGQ9Ik0zIDEzaDJ2LTJIM3Yyem0wIDRoMnYtMkgzdjJ6bTAtOGgyVjdIM3Yyem00IDRoMTR2LTJIN3Yyem0wIDRoMTR2LTJIN3Yyek03IDd2MmgxNFY3SDd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG9jayI+PHBhdGggZD0iTTE4IDhoLTFWNmMwLTIuNzYtMi4yNC01LTUtNVM3IDMuMjQgNyA2djJINmMtMS4xIDAtMiAuOS0yIDJ2MTBjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlYxMGMwLTEuMS0uOS0yLTItMnptLTYgOWMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTIgMiAuOSAyIDItLjkgMi0yIDJ6bTMuMS05SDguOVY2YzAtMS43MSAxLjM5LTMuMSAzLjEtMy4xIDEuNzEgMCAzLjEgMS4zOSAzLjEgMy4xdjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG9jay1vcGVuIj48cGF0aCBkPSJNMTIgMTdjMS4xIDAgMi0uOSAyLTJzLS45LTItMi0yLTIgLjktMiAyIC45IDIgMiAyem02LTloLTFWNmMwLTIuNzYtMi4yNC01LTUtNVM3IDMuMjQgNyA2aDEuOWMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMSAxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXYySDZjLTEuMSAwLTIgLjktMiAydjEwYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWMTBjMC0xLjEtLjktMi0yLTJ6bTAgMTJINlYxMGgxMnYxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb2NrLW91dGxpbmUiPjxwYXRoIGQ9Ik0xMiAxN2MxLjEgMCAyLS45IDItMnMtLjktMi0yLTItMiAuOS0yIDIgLjkgMiAyIDJ6bTYtOWgtMVY2YzAtMi43Ni0yLjI0LTUtNS01UzcgMy4yNCA3IDZ2Mkg2Yy0xLjEgMC0yIC45LTIgMnYxMGMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjEwYzAtMS4xLS45LTItMi0yek04LjkgNmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMXMzLjEgMS4zOSAzLjEgMy4xdjJIOC45VjZ6TTE4IDIwSDZWMTBoMTJ2MTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG93LXByaW9yaXR5Ij48cGF0aCBkPSJNMTQgNWg4djJoLTh6bTAgNS41aDh2MmgtOHptMCA1LjVoOHYyaC04ek0yIDExLjVDMiAxNS4wOCA0LjkyIDE4IDguNSAxOEg5djJsMy0zLTMtM3YyaC0uNUM2LjAyIDE2IDQgMTMuOTggNCAxMS41UzYuMDIgNyA4LjUgN0gxMlY1SDguNUM0LjkyIDUgMiA3LjkyIDIgMTEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb3lhbHR5Ij48cGF0aCBkPSJNMjEuNDEgMTEuNThsLTktOUMxMi4wNSAyLjIyIDExLjU1IDIgMTEgMkg0Yy0xLjEgMC0yIC45LTIgMnY3YzAgLjU1LjIyIDEuMDUuNTkgMS40Mmw5IDljLjM2LjM2Ljg2LjU4IDEuNDEuNTguNTUgMCAxLjA1LS4yMiAxLjQxLS41OWw3LTdjLjM3LS4zNi41OS0uODYuNTktMS40MSAwLS41NS0uMjMtMS4wNi0uNTktMS40MnpNNS41IDdDNC42NyA3IDQgNi4zMyA0IDUuNVM0LjY3IDQgNS41IDQgNyA0LjY3IDcgNS41IDYuMzMgNyA1LjUgN3ptMTEuNzcgOC4yN0wxMyAxOS41NGwtNC4yNy00LjI3QzguMjggMTQuODEgOCAxNC4xOSA4IDEzLjVjMC0xLjM4IDEuMTItMi41IDIuNS0yLjUuNjkgMCAxLjMyLjI4IDEuNzcuNzRsLjczLjcyLjczLS43M2MuNDUtLjQ1IDEuMDgtLjczIDEuNzctLjczIDEuMzggMCAyLjUgMS4xMiAyLjUgMi41IDAgLjY5LS4yOCAxLjMyLS43MyAxLjc3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im1haWwiPjxwYXRoIGQ9Ik0yMCA0SDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJMMiAxOGMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bTAgNGwtOCA1LTgtNVY2bDggNSA4LTV2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJtYXJrdW5yZWFkIj48cGF0aCBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDRsLTggNS04LTVWNmw4IDUgOC01djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibWFya3VucmVhZC1tYWlsYm94Ij48cGF0aCBkPSJNMjAgNkgxMHY2SDhWNGg2VjBINnY2SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWOGMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJtZW51Ij48cGF0aCBkPSJNMyAxOGgxOHYtMkgzdjJ6bTAtNWgxOHYtMkgzdjJ6bTAtN3YyaDE4VjZIM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJtb3JlLWhvcml6Ij48cGF0aCBkPSJNNiAxMGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTEyIDBjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0tNiAwYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJtb3JlLXZlcnQiPjxwYXRoIGQ9Ik0xMiA4YzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMi0yIC45LTIgMiAuOSAyIDIgMnptMCAyYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptMCA2Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJtb3RvcmN5Y2xlIj48cGF0aCBkPSJNMTkuNDQgOS4wM0wxNS40MSA1SDExdjJoMy41OWwyIDJINWMtMi44IDAtNSAyLjItNSA1czIuMiA1IDUgNWMyLjQ2IDAgNC40NS0xLjY5IDQuOS00aDEuNjVsMi43Ny0yLjc3Yy0uMjEuNTQtLjMyIDEuMTQtLjMyIDEuNzcgMCAyLjggMi4yIDUgNSA1czUtMi4yIDUtNWMwLTIuNjUtMS45Ny00Ljc3LTQuNTYtNC45N3pNNy44MiAxNUM3LjQgMTYuMTUgNi4yOCAxNyA1IDE3Yy0xLjYzIDAtMy0xLjM3LTMtM3MxLjM3LTMgMy0zYzEuMjggMCAyLjQuODUgMi44MiAySDV2MmgyLjgyek0xOSAxN2MtMS42NiAwLTMtMS4zNC0zLTNzMS4zNC0zIDMtMyAzIDEuMzQgMyAzLTEuMzQgMy0zIDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibW92ZS10by1pbmJveCI+PHBhdGggZD0iTTE5IDNINC45OWMtMS4xMSAwLTEuOTguOS0xLjk4IDJMMyAxOWMwIDEuMS44OCAyIDEuOTkgMkgxOWMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDEyaC00YzAgMS42Ni0xLjM1IDMtMyAzcy0zLTEuMzQtMy0zSDQuOTlWNUgxOXYxMHptLTMtNWgtMlY3aC00djNIOGw0IDQgNC00eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im5leHQtd2VlayI+PHBhdGggZD0iTTIwIDdoLTRWNWMwLS41NS0uMjItMS4wNS0uNTktMS40MUMxNS4wNSAzLjIyIDE0LjU1IDMgMTQgM2gtNGMtMS4xIDAtMiAuOS0yIDJ2Mkg0Yy0xLjEgMC0yIC45LTIgMnYxMWMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjljMC0xLjEtLjktMi0yLTJ6TTEwIDVoNHYyaC00VjV6bTEgMTMuNWwtMS0xIDMtMy0zLTMgMS0xIDQgNC00IDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibm90ZS1hZGQiPjxwYXRoIGQ9Ik0xNCAySDZjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNCAyMGMwIDEuMS44OSAyIDEuOTkgMkgxOGMxLjEgMCAyLS45IDItMlY4bC02LTZ6bTIgMTRoLTN2M2gtMnYtM0g4di0yaDN2LTNoMnYzaDN2MnptLTMtN1YzLjVMMTguNSA5SDEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im9mZmxpbmUtcGluIj48cGF0aCBkPSJNMTIgMkM2LjUgMiAyIDYuNSAyIDEyczQuNSAxMCAxMCAxMCAxMC00LjUgMTAtMTBTMTcuNSAyIDEyIDJ6bTUgMTZIN3YtMmgxMHYyem0tNi43LTRMNyAxMC43bDEuNC0xLjQgMS45IDEuOSA1LjMtNS4zTDE3IDcuMyAxMC4zIDE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im9wYWNpdHkiPjxwYXRoIGQ9Ik0xNy42NiA4TDEyIDIuMzUgNi4zNCA4QzQuNzggOS41NiA0IDExLjY0IDQgMTMuNjRzLjc4IDQuMTEgMi4zNCA1LjY3IDMuNjEgMi4zNSA1LjY2IDIuMzUgNC4xLS43OSA1LjY2LTIuMzVTMjAgMTUuNjQgMjAgMTMuNjQgMTkuMjIgOS41NiAxNy42NiA4ek02IDE0Yy4wMS0yIC42Mi0zLjI3IDEuNzYtNC40TDEyIDUuMjdsNC4yNCA0LjM4QzE3LjM4IDEwLjc3IDE3Ljk5IDEyIDE4IDE0SDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ib3Blbi1pbi1icm93c2VyIj48cGF0aCBkPSJNMTkgNEg1Yy0xLjExIDAtMiAuOS0yIDJ2MTJjMCAxLjEuODkgMiAyIDJoNHYtMkg1VjhoMTR2MTBoLTR2Mmg0YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjg5LTItMi0yem0tNyA2bC00IDRoM3Y2aDJ2LTZoM2wtNC00eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im9wZW4taW4tbmV3Ij48cGF0aCBkPSJNMTkgMTlINVY1aDdWM0g1Yy0xLjExIDAtMiAuOS0yIDJ2MTRjMCAxLjEuODkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJ2LTdoLTJ2N3pNMTQgM3YyaDMuNTlsLTkuODMgOS44MyAxLjQxIDEuNDFMMTkgNi40MVYxMGgyVjNoLTd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ib3Blbi13aXRoIj48cGF0aCBkPSJNMTAgOWg0VjZoM2wtNS01LTUgNWgzdjN6bS0xIDFINlY3bC01IDUgNSA1di0zaDN2LTR6bTE0IDJsLTUtNXYzaC0zdjRoM3YzbDUtNXptLTkgM2gtNHYzSDdsNSA1IDUtNWgtM3YtM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJwYWdldmlldyI+PHBhdGggZD0iTTExLjUgOUMxMC4xMiA5IDkgMTAuMTIgOSAxMS41czEuMTIgMi41IDIuNSAyLjUgMi41LTEuMTIgMi41LTIuNVMxMi44OCA5IDExLjUgOXpNMjAgNEg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bS0zLjIxIDE0LjIxbC0yLjkxLTIuOTFjLS42OS40NC0xLjUxLjctMi4zOS43QzkuMDEgMTYgNyAxMy45OSA3IDExLjVTOS4wMSA3IDExLjUgNyAxNiA5LjAxIDE2IDExLjVjMCAuODgtLjI2IDEuNjktLjcgMi4zOWwyLjkxIDIuOS0xLjQyIDEuNDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGFuLXRvb2wiPjxwYXRoIGQ9Ik0yMyA1LjVWMjBjMCAyLjItMS44IDQtNCA0aC03LjNjLTEuMDggMC0yLjEtLjQzLTIuODUtMS4xOUwxIDE0LjgzczEuMjYtMS4yMyAxLjMtMS4yNWMuMjItLjE5LjQ5LS4yOS43OS0uMjkuMjIgMCAuNDIuMDYuNi4xNi4wNC4wMSA0LjMxIDIuNDYgNC4zMSAyLjQ2VjRjMC0uODMuNjctMS41IDEuNS0xLjVTMTEgMy4xNyAxMSA0djdoMVYxLjVjMC0uODMuNjctMS41IDEuNS0xLjVTMTUgLjY3IDE1IDEuNVYxMWgxVjIuNWMwLS44My42Ny0xLjUgMS41LTEuNXMxLjUuNjcgMS41IDEuNVYxMWgxVjUuNWMwLS44My42Ny0xLjUgMS41LTEuNXMxLjUuNjcgMS41IDEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJwYXltZW50Ij48cGF0aCBkPSJNMjAgNEg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY2YzAtMS4xMS0uODktMi0yLTJ6bTAgMTRINHYtNmgxNnY2em0wLTEwSDRWNmgxNnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0tY2FtZXJhLW1pYyI+PHBhdGggZD0iTTIwIDVoLTMuMTdMMTUgM0g5TDcuMTcgNUg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDd2LTIuMDljLTIuODMtLjQ4LTUtMi45NC01LTUuOTFoMmMwIDIuMjEgMS43OSA0IDQgNHM0LTEuNzkgNC00aDJjMCAyLjk3LTIuMTcgNS40My01IDUuOTFWMjFoN2MxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tNiA4YzAgMS4xLS45IDItMiAycy0yLS45LTItMlY5YzAtMS4xLjktMiAyLTJzMiAuOSAyIDJ2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwZXJtLWNvbnRhY3QtY2FsZW5kYXIiPjxwYXRoIGQ9Ik0xOSAzaC0xVjFoLTJ2Mkg4VjFINnYySDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNyAzYzEuNjYgMCAzIDEuMzQgMyAzcy0xLjM0IDMtMyAzLTMtMS4zNC0zLTMgMS4zNC0zIDMtM3ptNiAxMkg2di0xYzAtMiA0LTMuMSA2LTMuMXM2IDEuMSA2IDMuMXYxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0tZGF0YS1zZXR0aW5nIj48cGF0aCBkPSJNMTguOTkgMTEuNWMuMzQgMCAuNjcuMDMgMSAuMDdMMjAgMCAwIDIwaDExLjU2Yy0uMDQtLjMzLS4wNy0uNjYtLjA3LTEgMC00LjE0IDMuMzYtNy41IDcuNS03LjV6bTMuNzEgNy45OWMuMDItLjE2LjA0LS4zMi4wNC0uNDkgMC0uMTctLjAxLS4zMy0uMDQtLjQ5bDEuMDYtLjgzYy4wOS0uMDguMTItLjIxLjA2LS4zMmwtMS0xLjczYy0uMDYtLjExLS4xOS0uMTUtLjMxLS4xMWwtMS4yNC41Yy0uMjYtLjItLjU0LS4zNy0uODUtLjQ5bC0uMTktMS4zMmMtLjAxLS4xMi0uMTItLjIxLS4yNC0uMjFoLTJjLS4xMiAwLS4yMy4wOS0uMjUuMjFsLS4xOSAxLjMyYy0uMy4xMy0uNTkuMjktLjg1LjQ5bC0xLjI0LS41Yy0uMTEtLjA0LS4yNCAwLS4zMS4xMWwtMSAxLjczYy0uMDYuMTEtLjA0LjI0LjA2LjMybDEuMDYuODNjLS4wMi4xNi0uMDMuMzItLjAzLjQ5IDAgLjE3LjAxLjMzLjAzLjQ5bC0xLjA2LjgzYy0uMDkuMDgtLjEyLjIxLS4wNi4zMmwxIDEuNzNjLjA2LjExLjE5LjE1LjMxLjExbDEuMjQtLjVjLjI2LjIuNTQuMzcuODUuNDlsLjE5IDEuMzJjLjAyLjEyLjEyLjIxLjI1LjIxaDJjLjEyIDAgLjIzLS4wOS4yNS0uMjFsLjE5LTEuMzJjLjMtLjEzLjU5LS4yOS44NC0uNDlsMS4yNS41Yy4xMS4wNC4yNCAwIC4zMS0uMTFsMS0xLjczYy4wNi0uMTEuMDMtLjI0LS4wNi0uMzJsLTEuMDctLjgzem0tMy43MSAxLjAxYy0uODMgMC0xLjUtLjY3LTEuNS0xLjVzLjY3LTEuNSAxLjUtMS41IDEuNS42NyAxLjUgMS41LS42NyAxLjUtMS41IDEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJwZXJtLWRldmljZS1pbmZvcm1hdGlvbiI+PHBhdGggZD0iTTEzIDdoLTJ2MmgyVjd6bTAgNGgtMnY2aDJ2LTZ6bTQtOS45OUw3IDFjLTEuMSAwLTIgLjktMiAydjE4YzAgMS4xLjkgMiAyIDJoMTBjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0xLjk5LTItMS45OXpNMTcgMTlIN1Y1aDEwdjE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0taWRlbnRpdHkiPjxwYXRoIGQ9Ik0xMiA1LjljMS4xNiAwIDIuMS45NCAyLjEgMi4xcy0uOTQgMi4xLTIuMSAyLjFTOS45IDkuMTYgOS45IDhzLjk0LTIuMSAyLjEtMi4xbTAgOWMyLjk3IDAgNi4xIDEuNDYgNi4xIDIuMXYxLjFINS45VjE3YzAtLjY0IDMuMTMtMi4xIDYuMS0yLjFNMTIgNEM5Ljc5IDQgOCA1Ljc5IDggOHMxLjc5IDQgNCA0IDQtMS43OSA0LTQtMS43OS00LTQtNHptMCA5Yy0yLjY3IDAtOCAxLjM0LTggNHYzaDE2di0zYzAtMi42Ni01LjMzLTQtOC00eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0tbWVkaWEiPjxwYXRoIGQ9Ik0yIDZIMHY1aC4wMUwwIDIwYzAgMS4xLjkgMiAyIDJoMTh2LTJIMlY2em0yMC0yaC04bC0yLTJINmMtMS4xIDAtMS45OS45LTEuOTkgMkw0IDE2YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMnpNNyAxNWw0LjUtNiAzLjUgNC41MSAyLjUtMy4wMUwyMSAxNUg3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0tcGhvbmUtbXNnIj48cGF0aCBkPSJNMjAgMTUuNWMtMS4yNSAwLTIuNDUtLjItMy41Ny0uNTctLjM1LS4xMS0uNzQtLjAzLTEuMDIuMjRsLTIuMiAyLjJjLTIuODMtMS40NC01LjE1LTMuNzUtNi41OS02LjU4bDIuMi0yLjIxYy4yOC0uMjcuMzYtLjY2LjI1LTEuMDFDOC43IDYuNDUgOC41IDUuMjUgOC41IDRjMC0uNTUtLjQ1LTEtMS0xSDRjLS41NSAwLTEgLjQ1LTEgMSAwIDkuMzkgNy42MSAxNyAxNyAxNyAuNTUgMCAxLS40NSAxLTF2LTMuNWMwLS41NS0uNDUtMS0xLTF6TTEyIDN2MTBsMy0zaDZWM2gtOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJwZXJtLXNjYW4td2lmaSI+PHBhdGggZD0iTTEyIDNDNi45NSAzIDMuMTUgNC44NSAwIDcuMjNMMTIgMjIgMjQgNy4yNUMyMC44NSA0Ljg3IDE3LjA1IDMgMTIgM3ptMSAxM2gtMnYtNmgydjZ6bS0yLThWNmgydjJoLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGV0cyI+PGNpcmNsZSBjeD0iNC41IiBjeT0iOS41IiByPSIyLjUiPjwvY2lyY2xlPjxjaXJjbGUgY3g9IjkiIGN5PSI1LjUiIHI9IjIuNSI+PC9jaXJjbGU+PGNpcmNsZSBjeD0iMTUiIGN5PSI1LjUiIHI9IjIuNSI+PC9jaXJjbGU+PGNpcmNsZSBjeD0iMTkuNSIgY3k9IjkuNSIgcj0iMi41Ij48L2NpcmNsZT48cGF0aCBkPSJNMTcuMzQgMTQuODZjLS44Ny0xLjAyLTEuNi0xLjg5LTIuNDgtMi45MS0uNDYtLjU0LTEuMDUtMS4wOC0xLjc1LTEuMzItLjExLS4wNC0uMjItLjA3LS4zMy0uMDktLjI1LS4wNC0uNTItLjA0LS43OC0uMDRzLS41MyAwLS43OS4wNWMtLjExLjAyLS4yMi4wNS0uMzMuMDktLjcuMjQtMS4yOC43OC0xLjc1IDEuMzItLjg3IDEuMDItMS42IDEuODktMi40OCAyLjkxLTEuMzEgMS4zMS0yLjkyIDIuNzYtMi42MiA0Ljc5LjI5IDEuMDIgMS4wMiAyLjAzIDIuMzMgMi4zMi43My4xNSAzLjA2LS40NCA1LjU0LS40NGguMThjMi40OCAwIDQuODEuNTggNS41NC40NCAxLjMxLS4yOSAyLjA0LTEuMzEgMi4zMy0yLjMyLjMxLTIuMDQtMS4zLTMuNDktMi42MS00Ljh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGljdHVyZS1pbi1waWN0dXJlIj48cGF0aCBkPSJNMTkgN2gtOHY2aDhWN3ptMi00SDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMS45OCAyIDEuOThoMThjMS4xIDAgMi0uODggMi0xLjk4VjVjMC0xLjEtLjktMi0yLTJ6bTAgMTYuMDFIM1Y0Ljk4aDE4djE0LjAzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBpY3R1cmUtaW4tcGljdHVyZS1hbHQiPjxwYXRoIGQ9Ik0xOSAxMWgtOHY2aDh2LTZ6bTQgOFY0Ljk4QzIzIDMuODggMjIuMSAzIDIxIDNIM2MtMS4xIDAtMiAuODgtMiAxLjk4VjE5YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJ6bS0yIC4wMkgzVjQuOTdoMTh2MTQuMDV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGxheS1mb3Itd29yayI+PHBhdGggZD0iTTExIDV2NS41OUg3LjVsNC41IDQuNSA0LjUtNC41SDEzVjVoLTJ6bS01IDljMCAzLjMxIDIuNjkgNiA2IDZzNi0yLjY5IDYtNmgtMmMwIDIuMjEtMS43OSA0LTQgNHMtNC0xLjc5LTQtNEg2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBvbHltZXIiPjxwYXRoIGQ9Ik0xOSA0aC00TDcuMTEgMTYuNjMgNC41IDEyIDkgNEg1TC41IDEyIDUgMjBoNGw3Ljg5LTEyLjYzTDE5LjUgMTIgMTUgMjBoNGw0LjUtOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwb3dlci1zZXR0aW5ncy1uZXciPjxwYXRoIGQ9Ik0xMyAzaC0ydjEwaDJWM3ptNC44MyAyLjE3bC0xLjQyIDEuNDJDMTcuOTkgNy44NiAxOSA5LjgxIDE5IDEyYzAgMy44Ny0zLjEzIDctNyA3cy03LTMuMTMtNy03YzAtMi4xOSAxLjAxLTQuMTQgMi41OC01LjQyTDYuMTcgNS4xN0M0LjIzIDYuODIgMyA5LjI2IDMgMTJjMCA0Ljk3IDQuMDMgOSA5IDlzOS00LjAzIDktOWMwLTIuNzQtMS4yMy01LjE4LTMuMTctNi44M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJwcmVnbmFudC13b21hbiI+PHBhdGggZD0iTTkgNGMwLTEuMTEuODktMiAyLTJzMiAuODkgMiAyLS44OSAyLTIgMi0yLS44OS0yLTJ6bTcgOWMtLjAxLTEuMzQtLjgzLTIuNTEtMi0zIDAtMS42Ni0xLjM0LTMtMy0zcy0zIDEuMzQtMyAzdjdoMnY1aDN2LTVoM3YtNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwcmludCI+PHBhdGggZD0iTTE5IDhINWMtMS42NiAwLTMgMS4zNC0zIDN2Nmg0djRoMTJ2LTRoNHYtNmMwLTEuNjYtMS4zNC0zLTMtM3ptLTMgMTFIOHYtNWg4djV6bTMtN2MtLjU1IDAtMS0uNDUtMS0xcy40NS0xIDEtMSAxIC40NSAxIDEtLjQ1IDEtMSAxem0tMS05SDZ2NGgxMlYzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InF1ZXJ5LWJ1aWxkZXIiPjxwYXRoIGQ9Ik0xMS45OSAyQzYuNDcgMiAyIDYuNDggMiAxMnM0LjQ3IDEwIDkuOTkgMTBDMTcuNTIgMjIgMjIgMTcuNTIgMjIgMTJTMTcuNTIgMiAxMS45OSAyek0xMiAyMGMtNC40MiAwLTgtMy41OC04LThzMy41OC04IDgtOCA4IDMuNTggOCA4LTMuNTggOC04IDh6bS41LTEzSDExdjZsNS4yNSAzLjE1Ljc1LTEuMjMtNC41LTIuNjd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icXVlc3Rpb24tYW5zd2VyIj48cGF0aCBkPSJNMjEgNmgtMnY5SDZ2MmMwIC41NS40NSAxIDEgMWgxMWw0IDRWN2MwLS41NS0uNDUtMS0xLTF6bS00IDZWM2MwLS41NS0uNDUtMS0xLTFIM2MtLjU1IDAtMSAuNDUtMSAxdjE0bDQtNGgxMGMuNTUgMCAxLS40NSAxLTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmFkaW8tYnV0dG9uLWNoZWNrZWQiPjxwYXRoIGQ9Ik0xMiA3Yy0yLjc2IDAtNSAyLjI0LTUgNXMyLjI0IDUgNSA1IDUtMi4yNCA1LTUtMi4yNC01LTUtNXptMC01QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyYWRpby1idXR0b24tdW5jaGVja2VkIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MiAwLTgtMy41OC04LThzMy41OC04IDgtOCA4IDMuNTggOCA4LTMuNTggOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVjZWlwdCI+PHBhdGggZD0iTTE4IDE3SDZ2LTJoMTJ2MnptMC00SDZ2LTJoMTJ2MnptMC00SDZWN2gxMnYyek0zIDIybDEuNS0xLjVMNiAyMmwxLjUtMS41TDkgMjJsMS41LTEuNUwxMiAyMmwxLjUtMS41TDE1IDIybDEuNS0xLjVMMTggMjJsMS41LTEuNUwyMSAyMlYybC0xLjUgMS41TDE4IDJsLTEuNSAxLjVMMTUgMmwtMS41IDEuNUwxMiAybC0xLjUgMS41TDkgMiA3LjUgMy41IDYgMiA0LjUgMy41IDMgMnYyMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZWNvcmQtdm9pY2Utb3ZlciI+PGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjQiPjwvY2lyY2xlPjxwYXRoIGQ9Ik05IDE1Yy0yLjY3IDAtOCAxLjM0LTggNHYyaDE2di0yYzAtMi42Ni01LjMzLTQtOC00em03Ljc2LTkuNjRsLTEuNjggMS42OWMuODQgMS4xOC44NCAyLjcxIDAgMy44OWwxLjY4IDEuNjljMi4wMi0yLjAyIDIuMDItNS4wNyAwLTcuMjd6TTIwLjA3IDJsLTEuNjMgMS42M2MyLjc3IDMuMDIgMi43NyA3LjU2IDAgMTAuNzRMMjAuMDcgMTZjMy45LTMuODkgMy45MS05Ljk1IDAtMTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVkZWVtIj48cGF0aCBkPSJNMjAgNmgtMi4xOGMuMTEtLjMxLjE4LS42NS4xOC0xIDAtMS42Ni0xLjM0LTMtMy0zLTEuMDUgMC0xLjk2LjU0LTIuNSAxLjM1bC0uNS42Ny0uNS0uNjhDMTAuOTYgMi41NCAxMC4wNSAyIDkgMiA3LjM0IDIgNiAzLjM0IDYgNWMwIC4zNS4wNy42OS4xOCAxSDRjLTEuMTEgMC0xLjk5Ljg5LTEuOTkgMkwyIDE5YzAgMS4xMS44OSAyIDIgMmgxNmMxLjExIDAgMi0uODkgMi0yVjhjMC0xLjExLS44OS0yLTItMnptLTUtMmMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xek05IDRjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptMTEgMTVINHYtMmgxNnYyem0wLTVINFY4aDUuMDhMNyAxMC44MyA4LjYyIDEyIDExIDguNzZsMS0xLjM2IDEgMS4zNkwxNS4zOCAxMiAxNyAxMC44MyAxNC45MiA4SDIwdjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVkbyI+PHBhdGggZD0iTTE4LjQgMTAuNkMxNi41NSA4Ljk5IDE0LjE1IDggMTEuNSA4Yy00LjY1IDAtOC41OCAzLjAzLTkuOTYgNy4yMkwzLjkgMTZjMS4wNS0zLjE5IDQuMDUtNS41IDcuNi01LjUgMS45NSAwIDMuNzMuNzIgNS4xMiAxLjg4TDEzIDE2aDlWN2wtMy42IDMuNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZWZyZXNoIj48cGF0aCBkPSJNMTcuNjUgNi4zNUMxNi4yIDQuOSAxNC4yMSA0IDEyIDRjLTQuNDIgMC03Ljk5IDMuNTgtNy45OSA4czMuNTcgOCA3Ljk5IDhjMy43MyAwIDYuODQtMi41NSA3LjczLTZoLTIuMDhjLS44MiAyLjMzLTMuMDQgNC01LjY1IDQtMy4zMSAwLTYtMi42OS02LTZzMi42OS02IDYtNmMxLjY2IDAgMy4xNC42OSA0LjIyIDEuNzhMMTMgMTFoN1Y0bC0yLjM1IDIuMzV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVtb3ZlIj48cGF0aCBkPSJNMTkgMTNINXYtMmgxNHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlbW92ZS1jaXJjbGUiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem01IDExSDd2LTJoMTB2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZW1vdmUtY2lyY2xlLW91dGxpbmUiPjxwYXRoIGQ9Ik03IDExdjJoMTB2LTJIN3ptNS05QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZW1vdmUtc2hvcHBpbmctY2FydCI+PHBhdGggZD0iTTIyLjczIDIyLjczTDIuNzcgMi43NyAyIDJsLS43My0uNzNMMCAyLjU0bDQuMzkgNC4zOSAyLjIxIDQuNjYtMS4zNSAyLjQ1Yy0uMTYuMjgtLjI1LjYxLS4yNS45NiAwIDEuMS45IDIgMiAyaDcuNDZsMS4zOCAxLjM4Yy0uNS4zNi0uODMuOTUtLjgzIDEuNjIgMCAxLjEuODkgMiAxLjk5IDIgLjY3IDAgMS4yNi0uMzMgMS42Mi0uODRMMjEuNDYgMjRsMS4yNy0xLjI3ek03LjQyIDE1Yy0uMTQgMC0uMjUtLjExLS4yNS0uMjVsLjAzLS4xMi45LTEuNjNoMi4zNmwyIDJINy40MnptOC4xMy0yYy43NSAwIDEuNDEtLjQxIDEuNzUtMS4wM2wzLjU4LTYuNDljLjA4LS4xNC4xMi0uMzEuMTItLjQ4IDAtLjU1LS40NS0xLTEtMUg2LjU0bDkuMDEgOXpNNyAxOGMtMS4xIDAtMS45OS45LTEuOTkgMlM1LjkgMjIgNyAyMnMyLS45IDItMi0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZW9yZGVyIj48cGF0aCBkPSJNMyAxNWgxOHYtMkgzdjJ6bTAgNGgxOHYtMkgzdjJ6bTAtOGgxOFY5SDN2MnptMC02djJoMThWNUgzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlcGx5Ij48cGF0aCBkPSJNMTAgOVY1bC03IDcgNyA3di00LjFjNSAwIDguNSAxLjYgMTEgNS4xLTEtNS00LTEwLTExLTExeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlcGx5LWFsbCI+PHBhdGggZD0iTTcgOFY1bC03IDcgNyA3di0zbC00LTQgNC00em02IDFWNWwtNyA3IDcgN3YtNC4xYzUgMCA4LjUgMS42IDExIDUuMS0xLTUtNC0xMC0xMS0xMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZXBvcnQiPjxwYXRoIGQ9Ik0xNS43MyAzSDguMjdMMyA4LjI3djcuNDZMOC4yNyAyMWg3LjQ2TDIxIDE1LjczVjguMjdMMTUuNzMgM3pNMTIgMTcuM2MtLjcyIDAtMS4zLS41OC0xLjMtMS4zIDAtLjcyLjU4LTEuMyAxLjMtMS4zLjcyIDAgMS4zLjU4IDEuMyAxLjMgMCAuNzItLjU4IDEuMy0xLjMgMS4zem0xLTQuM2gtMlY3aDJ2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZXBvcnQtcHJvYmxlbSI+PHBhdGggZD0iTTEgMjFoMjJMMTIgMiAxIDIxem0xMi0zaC0ydi0yaDJ2MnptMC00aC0ydi00aDJ2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZXN0b3JlIj48cGF0aCBkPSJNMTMgM2MtNC45NyAwLTkgNC4wMy05IDlIMWwzLjg5IDMuODkuMDcuMTRMOSAxMkg2YzAtMy44NyAzLjEzLTcgNy03czcgMy4xMyA3IDctMy4xMyA3LTcgN2MtMS45MyAwLTMuNjgtLjc5LTQuOTQtMi4wNmwtMS40MiAxLjQyQzguMjcgMTkuOTkgMTAuNTEgMjEgMTMgMjFjNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bS0xIDV2NWw0LjI4IDIuNTQuNzItMS4yMS0zLjUtMi4wOFY4SDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlc3RvcmUtcGFnZSI+PHBhdGggZD0iTTE0IDJINmMtMS4xIDAtMS45OS45LTEuOTkgMkw0IDIwYzAgMS4xLjg5IDIgMS45OSAySDE4YzEuMSAwIDItLjkgMi0yVjhsLTYtNnptLTIgMTZjLTIuMDUgMC0zLjgxLTEuMjQtNC41OC0zaDEuNzFjLjYzLjkgMS42OCAxLjUgMi44NyAxLjUgMS45MyAwIDMuNS0xLjU3IDMuNS0zLjVTMTMuOTMgOS41IDEyIDkuNWMtMS4zNSAwLTIuNTIuNzgtMy4xIDEuOWwxLjYgMS42aC00VjlsMS4zIDEuM0M4LjY5IDguOTIgMTAuMjMgOCAxMiA4YzIuNzYgMCA1IDIuMjQgNSA1cy0yLjI0IDUtNSA1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJvb20iPjxwYXRoIGQ9Ik0xMiAyQzguMTMgMiA1IDUuMTMgNSA5YzAgNS4yNSA3IDEzIDcgMTNzNy03Ljc1IDctMTNjMC0zLjg3LTMuMTMtNy03LTd6bTAgOS41Yy0xLjM4IDAtMi41LTEuMTItMi41LTIuNXMxLjEyLTIuNSAyLjUtMi41IDIuNSAxLjEyIDIuNSAyLjUtMS4xMiAyLjUtMi41IDIuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJyb3VuZGVkLWNvcm5lciI+PHBhdGggZD0iTTE5IDE5aDJ2MmgtMnYtMnptMC0yaDJ2LTJoLTJ2MnpNMyAxM2gydi0ySDN2MnptMCA0aDJ2LTJIM3Yyem0wLThoMlY3SDN2MnptMC00aDJWM0gzdjJ6bTQgMGgyVjNIN3Yyem04IDE2aDJ2LTJoLTJ2MnptLTQgMGgydi0yaC0ydjJ6bTQgMGgydi0yaC0ydjJ6bS04IDBoMnYtMkg3djJ6bS00IDBoMnYtMkgzdjJ6TTIxIDhjMC0yLjc2LTIuMjQtNS01LTVoLTV2Mmg1YzEuNjUgMCAzIDEuMzUgMyAzdjVoMlY4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJvd2luZyI+PHBhdGggZD0iTTguNSAxNC41TDQgMTlsMS41IDEuNUw5IDE3aDJsLTIuNS0yLjV6TTE1IDFjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem02IDIwLjAxTDE4IDI0bC0yLjk5LTMuMDFWMTkuNWwtNy4xLTcuMDljLS4zMS4wNS0uNjEuMDctLjkxLjA3di0yLjE2YzEuNjYuMDMgMy42MS0uODcgNC42Ny0yLjA0bDEuNC0xLjU1Yy4xOS0uMjEuNDMtLjM4LjY5LS41LjI5LS4xNC42Mi0uMjMuOTYtLjIzaC4wM0MxNS45OSA2LjAxIDE3IDcuMDIgMTcgOC4yNnY1Ljc1YzAgLjg0LS4zNSAxLjYxLS45MiAyLjE2bC0zLjU4LTMuNTh2LTIuMjdjLS42My41Mi0xLjQzIDEuMDItMi4yOSAxLjM5TDE2LjUgMThIMThsMyAzLjAxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNhdmUiPjxwYXRoIGQ9Ik0xNyAzSDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY3bC00LTR6bS01IDE2Yy0xLjY2IDAtMy0xLjM0LTMtM3MxLjM0LTMgMy0zIDMgMS4zNCAzIDMtMS4zNCAzLTMgM3ptMy0xMEg1VjVoMTB2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzY2hlZHVsZSI+PHBhdGggZD0iTTExLjk5IDJDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJ6TTEyIDIwYy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHptLjUtMTNIMTF2Nmw1LjI1IDMuMTUuNzUtMS4yMy00LjUtMi42N3oiPjwvcGF0aD48L2c+CjxnIGlkPSJzZWFyY2giPjxwYXRoIGQ9Ik0xNS41IDE0aC0uNzlsLS4yOC0uMjdDMTUuNDEgMTIuNTkgMTYgMTEuMTEgMTYgOS41IDE2IDUuOTEgMTMuMDkgMyA5LjUgM1MzIDUuOTEgMyA5LjUgNS45MSAxNiA5LjUgMTZjMS42MSAwIDMuMDktLjU5IDQuMjMtMS41N2wuMjcuMjh2Ljc5bDUgNC45OUwyMC40OSAxOWwtNC45OS01em0tNiAwQzcuMDEgMTQgNSAxMS45OSA1IDkuNVM3LjAxIDUgOS41IDUgMTQgNy4wMSAxNCA5LjUgMTEuOTkgMTQgOS41IDE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNlbGVjdC1hbGwiPjxwYXRoIGQ9Ik0zIDVoMlYzYy0xLjEgMC0yIC45LTIgMnptMCA4aDJ2LTJIM3Yyem00IDhoMnYtMkg3djJ6TTMgOWgyVjdIM3Yyem0xMC02aC0ydjJoMlYzem02IDB2MmgyYzAtMS4xLS45LTItMi0yek01IDIxdi0ySDNjMCAxLjEuOSAyIDIgMnptLTItNGgydi0ySDN2MnpNOSAzSDd2MmgyVjN6bTIgMThoMnYtMmgtMnYyem04LThoMnYtMmgtMnYyem0wIDhjMS4xIDAgMi0uOSAyLTJoLTJ2MnptMC0xMmgyVjdoLTJ2MnptMCA4aDJ2LTJoLTJ2MnptLTQgNGgydi0yaC0ydjJ6bTAtMTZoMlYzaC0ydjJ6TTcgMTdoMTBWN0g3djEwem0yLThoNnY2SDlWOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZW5kIj48cGF0aCBkPSJNMi4wMSAyMUwyMyAxMiAyLjAxIDMgMiAxMGwxNSAyLTE1IDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MiPjxwYXRoIGQ9Ik0xOS40MyAxMi45OGMuMDQtLjMyLjA3LS42NC4wNy0uOThzLS4wMy0uNjYtLjA3LS45OGwyLjExLTEuNjVjLjE5LS4xNS4yNC0uNDIuMTItLjY0bC0yLTMuNDZjLS4xMi0uMjItLjM5LS4zLS42MS0uMjJsLTIuNDkgMWMtLjUyLS40LTEuMDgtLjczLTEuNjktLjk4bC0uMzgtMi42NUMxNC40NiAyLjE4IDE0LjI1IDIgMTQgMmgtNGMtLjI1IDAtLjQ2LjE4LS40OS40MmwtLjM4IDIuNjVjLS42MS4yNS0xLjE3LjU5LTEuNjkuOThsLTIuNDktMWMtLjIzLS4wOS0uNDkgMC0uNjEuMjJsLTIgMy40NmMtLjEzLjIyLS4wNy40OS4xMi42NGwyLjExIDEuNjVjLS4wNC4zMi0uMDcuNjUtLjA3Ljk4cy4wMy42Ni4wNy45OGwtMi4xMSAxLjY1Yy0uMTkuMTUtLjI0LjQyLS4xMi42NGwyIDMuNDZjLjEyLjIyLjM5LjMuNjEuMjJsMi40OS0xYy41Mi40IDEuMDguNzMgMS42OS45OGwuMzggMi42NWMuMDMuMjQuMjQuNDIuNDkuNDJoNGMuMjUgMCAuNDYtLjE4LjQ5LS40MmwuMzgtMi42NWMuNjEtLjI1IDEuMTctLjU5IDEuNjktLjk4bDIuNDkgMWMuMjMuMDkuNDkgMCAuNjEtLjIybDItMy40NmMuMTItLjIyLjA3LS40OS0uMTItLjY0bC0yLjExLTEuNjV6TTEyIDE1LjVjLTEuOTMgMC0zLjUtMS41Ny0zLjUtMy41czEuNTctMy41IDMuNS0zLjUgMy41IDEuNTcgMy41IDMuNS0xLjU3IDMuNS0zLjUgMy41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWFwcGxpY2F0aW9ucyI+PHBhdGggZD0iTTEyIDEwYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptNy03SDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjExIDAgMi0uOSAyLTJWNWMwLTEuMS0uODktMi0yLTJ6bS0xLjc1IDljMCAuMjMtLjAyLjQ2LS4wNS42OGwxLjQ4IDEuMTZjLjEzLjExLjE3LjMuMDguNDVsLTEuNCAyLjQyYy0uMDkuMTUtLjI3LjIxLS40My4xNWwtMS43NC0uN2MtLjM2LjI4LS43Ni41MS0xLjE4LjY5bC0uMjYgMS44NWMtLjAzLjE3LS4xOC4zLS4zNS4zaC0yLjhjLS4xNyAwLS4zMi0uMTMtLjM1LS4yOWwtLjI2LTEuODVjLS40My0uMTgtLjgyLS40MS0xLjE4LS42OWwtMS43NC43Yy0uMTYuMDYtLjM0IDAtLjQzLS4xNWwtMS40LTIuNDJjLS4wOS0uMTUtLjA1LS4zNC4wOC0uNDVsMS40OC0xLjE2Yy0uMDMtLjIzLS4wNS0uNDYtLjA1LS42OSAwLS4yMy4wMi0uNDYuMDUtLjY4bC0xLjQ4LTEuMTZjLS4xMy0uMTEtLjE3LS4zLS4wOC0uNDVsMS40LTIuNDJjLjA5LS4xNS4yNy0uMjEuNDMtLjE1bDEuNzQuN2MuMzYtLjI4Ljc2LS41MSAxLjE4LS42OWwuMjYtMS44NWMuMDMtLjE3LjE4LS4zLjM1LS4zaDIuOGMuMTcgMCAuMzIuMTMuMzUuMjlsLjI2IDEuODVjLjQzLjE4LjgyLjQxIDEuMTguNjlsMS43NC0uN2MuMTYtLjA2LjM0IDAgLjQzLjE1bDEuNCAyLjQyYy4wOS4xNS4wNS4zNC0uMDguNDVsLTEuNDggMS4xNmMuMDMuMjMuMDUuNDYuMDUuNjl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtYmFja3VwLXJlc3RvcmUiPjxwYXRoIGQ9Ik0xNCAxMmMwLTEuMS0uOS0yLTItMnMtMiAuOS0yIDIgLjkgMiAyIDIgMi0uOSAyLTJ6bS0yLTljLTQuOTcgMC05IDQuMDMtOSA5SDBsNCA0IDQtNEg1YzAtMy44NyAzLjEzLTcgNy03czcgMy4xMyA3IDctMy4xMyA3LTcgN2MtMS41MSAwLTIuOTEtLjQ5LTQuMDYtMS4zbC0xLjQyIDEuNDRDOC4wNCAyMC4zIDkuOTQgMjEgMTIgMjFjNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtYmx1ZXRvb3RoIj48cGF0aCBkPSJNMTEgMjRoMnYtMmgtMnYyem0tNCAwaDJ2LTJIN3Yyem04IDBoMnYtMmgtMnYyem0yLjcxLTE4LjI5TDEyIDBoLTF2Ny41OUw2LjQxIDMgNSA0LjQxIDEwLjU5IDEwIDUgMTUuNTkgNi40MSAxNyAxMSAxMi40MVYyMGgxbDUuNzEtNS43MS00LjMtNC4yOSA0LjMtNC4yOXpNMTMgMy44M2wxLjg4IDEuODhMMTMgNy41OVYzLjgzem0xLjg4IDEwLjQ2TDEzIDE2LjE3di0zLjc2bDEuODggMS44OHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncy1icmlnaHRuZXNzIj48cGF0aCBkPSJNMjEgM0gzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTYuMDFIM1Y0Ljk5aDE4djE0LjAyek04IDE2aDIuNWwxLjUgMS41IDEuNS0xLjVIMTZ2LTIuNWwxLjUtMS41LTEuNS0xLjVWOGgtMi41TDEyIDYuNSAxMC41IDhIOHYyLjVMNi41IDEyIDggMTMuNVYxNnptNC03YzEuNjYgMCAzIDEuMzQgMyAzcy0xLjM0IDMtMyAzVjl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtY2VsbCI+PHBhdGggZD0iTTcgMjRoMnYtMkg3djJ6bTQgMGgydi0yaC0ydjJ6bTQgMGgydi0yaC0ydjJ6TTE2IC4wMUw4IDBDNi45IDAgNiAuOSA2IDJ2MTZjMCAxLjEuOSAyIDIgMmg4YzEuMSAwIDItLjkgMi0yVjJjMC0xLjEtLjktMS45OS0yLTEuOTl6TTE2IDE2SDhWNGg4djEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWV0aGVybmV0Ij48cGF0aCBkPSJNNy43NyA2Ljc2TDYuMjMgNS40OC44MiAxMmw1LjQxIDYuNTIgMS41NC0xLjI4TDMuNDIgMTJsNC4zNS01LjI0ek03IDEzaDJ2LTJIN3Yyem0xMC0yaC0ydjJoMnYtMnptLTYgMmgydi0yaC0ydjJ6bTYuNzctNy41MmwtMS41NCAxLjI4TDIwLjU4IDEybC00LjM1IDUuMjQgMS41NCAxLjI4TDIzLjE4IDEybC01LjQxLTYuNTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtaW5wdXQtYW50ZW5uYSI+PHBhdGggZD0iTTEyIDVjLTMuODcgMC03IDMuMTMtNyA3aDJjMC0yLjc2IDIuMjQtNSA1LTVzNSAyLjI0IDUgNWgyYzAtMy44Ny0zLjEzLTctNy03em0xIDkuMjljLjg4LS4zOSAxLjUtMS4yNiAxLjUtMi4yOSAwLTEuMzgtMS4xMi0yLjUtMi41LTIuNVM5LjUgMTAuNjIgOS41IDEyYzAgMS4wMi42MiAxLjkgMS41IDIuMjl2My4zTDcuNTkgMjEgOSAyMi40MWwzLTMgMyAzTDE2LjQxIDIxIDEzIDE3LjU5di0zLjN6TTEyIDFDNS45MyAxIDEgNS45MyAxIDEyaDJjMC00Ljk3IDQuMDMtOSA5LTlzOSA0LjAzIDkgOWgyYzAtNi4wNy00LjkzLTExLTExLTExeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWlucHV0LWNvbXBvbmVudCI+PHBhdGggZD0iTTUgMmMwLS41NS0uNDUtMS0xLTFzLTEgLjQ1LTEgMXY0SDF2Nmg2VjZINVYyem00IDE0YzAgMS4zLjg0IDIuNCAyIDIuODJWMjNoMnYtNC4xOGMxLjE2LS40MSAyLTEuNTEgMi0yLjgydi0ySDl2MnptLTggMGMwIDEuMy44NCAyLjQgMiAyLjgyVjIzaDJ2LTQuMThDNi4xNiAxOC40IDcgMTcuMyA3IDE2di0ySDF2MnpNMjEgNlYyYzAtLjU1LS40NS0xLTEtMXMtMSAuNDUtMSAxdjRoLTJ2Nmg2VjZoLTJ6bS04LTRjMC0uNTUtLjQ1LTEtMS0xcy0xIC40NS0xIDF2NEg5djZoNlY2aC0yVjJ6bTQgMTRjMCAxLjMuODQgMi40IDIgMi44MlYyM2gydi00LjE4YzEuMTYtLjQxIDItMS41MSAyLTIuODJ2LTJoLTZ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncy1pbnB1dC1jb21wb3NpdGUiPjxwYXRoIGQ9Ik01IDJjMC0uNTUtLjQ1LTEtMS0xcy0xIC40NS0xIDF2NEgxdjZoNlY2SDVWMnptNCAxNGMwIDEuMy44NCAyLjQgMiAyLjgyVjIzaDJ2LTQuMThjMS4xNi0uNDEgMi0xLjUxIDItMi44MnYtMkg5djJ6bS04IDBjMCAxLjMuODQgMi40IDIgMi44MlYyM2gydi00LjE4QzYuMTYgMTguNCA3IDE3LjMgNyAxNnYtMkgxdjJ6TTIxIDZWMmMwLS41NS0uNDUtMS0xLTFzLTEgLjQ1LTEgMXY0aC0ydjZoNlY2aC0yem0tOC00YzAtLjU1LS40NS0xLTEtMXMtMSAuNDUtMSAxdjRIOXY2aDZWNmgtMlYyem00IDE0YzAgMS4zLjg0IDIuNCAyIDIuODJWMjNoMnYtNC4xOGMxLjE2LS40MSAyLTEuNTEgMi0yLjgydi0yaC02djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtaW5wdXQtaGRtaSI+PHBhdGggZD0iTTE4IDdWNGMwLTEuMS0uOS0yLTItMkg4Yy0xLjEgMC0yIC45LTIgMnYzSDV2NmwzIDZ2M2g4di0zbDMtNlY3aC0xek04IDRoOHYzaC0yVjVoLTF2MmgtMlY1aC0xdjJIOFY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWlucHV0LXN2aWRlbyI+PHBhdGggZD0iTTggMTEuNWMwLS44My0uNjctMS41LTEuNS0xLjVTNSAxMC42NyA1IDExLjUgNS42NyAxMyA2LjUgMTMgOCAxMi4zMyA4IDExLjV6bTctNWMwLS44My0uNjctMS41LTEuNS0xLjVoLTNDOS42NyA1IDkgNS42NyA5IDYuNVM5LjY3IDggMTAuNSA4aDNjLjgzIDAgMS41LS42NyAxLjUtMS41ek04LjUgMTVjLS44MyAwLTEuNS42Ny0xLjUgMS41UzcuNjcgMTggOC41IDE4czEuNS0uNjcgMS41LTEuNVM5LjMzIDE1IDguNSAxNXpNMTIgMUM1LjkzIDEgMSA1LjkzIDEgMTJzNC45MyAxMSAxMSAxMSAxMS00LjkzIDExLTExUzE4LjA3IDEgMTIgMXptMCAyMGMtNC45NiAwLTktNC4wNC05LTlzNC4wNC05IDktOSA5IDQuMDQgOSA5LTQuMDQgOS05IDl6bTUuNS0xMWMtLjgzIDAtMS41LjY3LTEuNSAxLjVzLjY3IDEuNSAxLjUgMS41IDEuNS0uNjcgMS41LTEuNS0uNjctMS41LTEuNS0xLjV6bS0yIDVjLS44MyAwLTEuNS42Ny0xLjUgMS41cy42NyAxLjUgMS41IDEuNSAxLjUtLjY3IDEuNS0xLjUtLjY3LTEuNS0xLjUtMS41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLW92ZXJzY2FuIj48cGF0aCBkPSJNMTIuMDEgNS41TDEwIDhoNGwtMS45OS0yLjV6TTE4IDEwdjRsMi41LTEuOTlMMTggMTB6TTYgMTBsLTIuNSAyLjAxTDYgMTR2LTR6bTggNmgtNGwyLjAxIDIuNUwxNCAxNnptNy0xM0gzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTYuMDFIM1Y0Ljk5aDE4djE0LjAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLXBob25lIj48cGF0aCBkPSJNMTMgOWgtMnYyaDJWOXptNCAwaC0ydjJoMlY5em0zIDYuNWMtMS4yNSAwLTIuNDUtLjItMy41Ny0uNTctLjM1LS4xMS0uNzQtLjAzLTEuMDIuMjRsLTIuMiAyLjJjLTIuODMtMS40NC01LjE1LTMuNzUtNi41OS02LjU4bDIuMi0yLjIxYy4yOC0uMjcuMzYtLjY2LjI1LTEuMDFDOC43IDYuNDUgOC41IDUuMjUgOC41IDRjMC0uNTUtLjQ1LTEtMS0xSDRjLS41NSAwLTEgLjQ1LTEgMSAwIDkuMzkgNy42MSAxNyAxNyAxNyAuNTUgMCAxLS40NSAxLTF2LTMuNWMwLS41NS0uNDUtMS0xLTF6TTE5IDl2MmgyVjloLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtcG93ZXIiPjxwYXRoIGQ9Ik03IDI0aDJ2LTJIN3Yyem00IDBoMnYtMmgtMnYyem0yLTIyaC0ydjEwaDJWMnptMy41NiAyLjQ0bC0xLjQ1IDEuNDVDMTYuODQgNi45NCAxOCA4LjgzIDE4IDExYzAgMy4zMS0yLjY5IDYtNiA2cy02LTIuNjktNi02YzAtMi4xNyAxLjE2LTQuMDYgMi44OC01LjEyTDcuNDQgNC40NEM1LjM2IDUuODggNCA4LjI4IDQgMTFjMCA0LjQyIDMuNTggOCA4IDhzOC0zLjU4IDgtOGMwLTIuNzItMS4zNi01LjEyLTMuNDQtNi41NnpNMTUgMjRoMnYtMmgtMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLXJlbW90ZSI+PHBhdGggZD0iTTE1IDlIOWMtLjU1IDAtMSAuNDUtMSAxdjEyYzAgLjU1LjQ1IDEgMSAxaDZjLjU1IDAgMS0uNDUgMS0xVjEwYzAtLjU1LS40NS0xLTEtMXptLTMgNmMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTIgMiAuOSAyIDItLjkgMi0yIDJ6TTcuMDUgNi4wNWwxLjQxIDEuNDFDOS4zNyA2LjU2IDEwLjYyIDYgMTIgNnMyLjYzLjU2IDMuNTQgMS40NmwxLjQxLTEuNDFDMTUuNjggNC43OCAxMy45MyA0IDEyIDRzLTMuNjguNzgtNC45NSAyLjA1ek0xMiAwQzguOTYgMCA2LjIxIDEuMjMgNC4yMiAzLjIybDEuNDEgMS40MUM3LjI2IDMuMDEgOS41MSAyIDEyIDJzNC43NCAxLjAxIDYuMzYgMi42NGwxLjQxLTEuNDFDMTcuNzkgMS4yMyAxNS4wNCAwIDEyIDB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3Mtdm9pY2UiPjxwYXRoIGQ9Ik03IDI0aDJ2LTJIN3Yyem01LTExYzEuNjYgMCAyLjk5LTEuMzQgMi45OS0zTDE1IDRjMC0xLjY2LTEuMzQtMy0zLTNTOSAyLjM0IDkgNHY2YzAgMS42NiAxLjM0IDMgMyAzem0tMSAxMWgydi0yaC0ydjJ6bTQgMGgydi0yaC0ydjJ6bTQtMTRoLTEuN2MwIDMtMi41NCA1LjEtNS4zIDUuMVM2LjcgMTMgNi43IDEwSDVjMCAzLjQxIDIuNzIgNi4yMyA2IDYuNzJWMjBoMnYtMy4yOGMzLjI4LS40OSA2LTMuMzEgNi02LjcyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNob3AiPjxwYXRoIGQ9Ik0xNiA2VjRjMC0xLjExLS44OS0yLTItMmgtNGMtMS4xMSAwLTIgLjg5LTIgMnYySDJ2MTNjMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWNmgtNnptLTYtMmg0djJoLTRWNHpNOSAxOFY5bDcuNSA0TDkgMTh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2hvcC10d28iPjxwYXRoIGQ9Ik0zIDlIMXYxMWMwIDEuMTEuODkgMiAyIDJoMTRjMS4xMSAwIDItLjg5IDItMkgzVjl6bTE1LTRWM2MwLTEuMTEtLjg5LTItMi0yaC00Yy0xLjExIDAtMiAuODktMiAydjJINXYxMWMwIDEuMTEuODkgMiAyIDJoMTRjMS4xMSAwIDItLjg5IDItMlY1aC01em0tNi0yaDR2MmgtNFYzem0wIDEyVjhsNS41IDMtNS41IDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2hvcHBpbmctYmFza2V0Ij48cGF0aCBkPSJNMTcuMjEgOWwtNC4zOC02LjU2Yy0uMTktLjI4LS41MS0uNDItLjgzLS40Mi0uMzIgMC0uNjQuMTQtLjgzLjQzTDYuNzkgOUgyYy0uNTUgMC0xIC40NS0xIDEgMCAuMDkuMDEuMTguMDQuMjdsMi41NCA5LjI3Yy4yMy44NCAxIDEuNDYgMS45MiAxLjQ2aDEzYy45MiAwIDEuNjktLjYyIDEuOTMtMS40NmwyLjU0LTkuMjdMMjMgMTBjMC0uNTUtLjQ1LTEtMS0xaC00Ljc5ek05IDlsMy00LjRMMTUgOUg5em0zIDhjLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNob3BwaW5nLWNhcnQiPjxwYXRoIGQ9Ik03IDE4Yy0xLjEgMC0xLjk5LjktMS45OSAyUzUuOSAyMiA3IDIyczItLjkgMi0yLS45LTItMi0yek0xIDJ2MmgybDMuNiA3LjU5LTEuMzUgMi40NWMtLjE2LjI4LS4yNS42MS0uMjUuOTYgMCAxLjEuOSAyIDIgMmgxMnYtMkg3LjQyYy0uMTQgMC0uMjUtLjExLS4yNS0uMjVsLjAzLS4xMi45LTEuNjNoNy40NWMuNzUgMCAxLjQxLS40MSAxLjc1LTEuMDNsMy41OC02LjQ5Yy4wOC0uMTQuMTItLjMxLjEyLS40OCAwLS41NS0uNDUtMS0xLTFINS4yMWwtLjk0LTJIMXptMTYgMTZjLTEuMSAwLTEuOTkuOS0xLjk5IDJzLjg5IDIgMS45OSAyIDItLjkgMi0yLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNvcnQiPjxwYXRoIGQ9Ik0zIDE4aDZ2LTJIM3Yyek0zIDZ2MmgxOFY2SDN6bTAgN2gxMnYtMkgzdjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3BlYWtlci1ub3RlcyI+PHBhdGggZD0iTTIwIDJINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDIybDQtNGgxNGMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yek04IDE0SDZ2LTJoMnYyem0wLTNINlY5aDJ2MnptMC0zSDZWNmgydjJ6bTcgNmgtNXYtMmg1djJ6bTMtM2gtOFY5aDh2MnptMC0zaC04VjZoOHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNwZWFrZXItbm90ZXMtb2ZmIj48cGF0aCBkPSJNMTAuNTQgMTFsLS41NC0uNTRMNy41NCA4IDYgNi40NiAyLjM4IDIuODQgMS4yNyAxLjczIDAgM2wyLjAxIDIuMDFMMiAyMmw0LTRoOWw1LjczIDUuNzNMMjIgMjIuNDYgMTcuNTQgMThsLTctN3pNOCAxNEg2di0yaDJ2MnptLTItM1Y5bDIgMkg2em0xNC05SDQuMDhMMTAgNy45MlY2aDh2MmgtNy45MmwxIDFIMTh2MmgtNC45Mmw2Ljk5IDYuOTlDMjEuMTQgMTcuOTUgMjIgMTcuMDggMjIgMTZWNGMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzcGVsbGNoZWNrIj48cGF0aCBkPSJNMTIuNDUgMTZoMi4wOUw5LjQzIDNINy41N0wyLjQ2IDE2aDIuMDlsMS4xMi0zaDUuNjRsMS4xNCAzem0tNi4wMi01TDguNSA1LjQ4IDEwLjU3IDExSDYuNDN6bTE1LjE2LjU5bC04LjA5IDguMDlMOS44MyAxNmwtMS40MSAxLjQxIDUuMDkgNS4wOUwyMyAxM2wtMS40MS0xLjQxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN0YXIiPjxwYXRoIGQ9Ik0xMiAxNy4yN0wxOC4xOCAyMWwtMS42NC03LjAzTDIyIDkuMjRsLTcuMTktLjYxTDEyIDIgOS4xOSA4LjYzIDIgOS4yNGw1LjQ2IDQuNzNMNS44MiAyMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzdGFyLWJvcmRlciI+PHBhdGggZD0iTTIyIDkuMjRsLTcuMTktLjYyTDEyIDIgOS4xOSA4LjYzIDIgOS4yNGw1LjQ2IDQuNzNMNS44MiAyMSAxMiAxNy4yNyAxOC4xOCAyMWwtMS42My03LjAzTDIyIDkuMjR6TTEyIDE1LjRsLTMuNzYgMi4yNyAxLTQuMjgtMy4zMi0yLjg4IDQuMzgtLjM4TDEyIDYuMWwxLjcxIDQuMDQgNC4zOC4zOC0zLjMyIDIuODggMSA0LjI4TDEyIDE1LjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3Rhci1oYWxmIj48cGF0aCBkPSJNMjIgOS4yNGwtNy4xOS0uNjJMMTIgMiA5LjE5IDguNjMgMiA5LjI0bDUuNDYgNC43M0w1LjgyIDIxIDEyIDE3LjI3IDE4LjE4IDIxbC0xLjYzLTcuMDNMMjIgOS4yNHpNMTIgMTUuNFY2LjFsMS43MSA0LjA0IDQuMzguMzgtMy4zMiAyLjg4IDEgNC4yOEwxMiAxNS40eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN0YXJzIj48cGF0aCBkPSJNMTEuOTkgMkM2LjQ3IDIgMiA2LjQ4IDIgMTJzNC40NyAxMCA5Ljk5IDEwQzE3LjUyIDIyIDIyIDE3LjUyIDIyIDEyUzE3LjUyIDIgMTEuOTkgMnptNC4yNCAxNkwxMiAxNS40NSA3Ljc3IDE4bDEuMTItNC44MS0zLjczLTMuMjMgNC45Mi0uNDJMMTIgNWwxLjkyIDQuNTMgNC45Mi40Mi0zLjczIDMuMjNMMTYuMjMgMTh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3RvcmUiPjxwYXRoIGQ9Ik0yMCA0SDR2MmgxNlY0em0xIDEwdi0ybC0xLTVINGwtMSA1djJoMXY2aDEwdi02aDR2Nmgydi02aDF6bS05IDRINnYtNGg2djR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3ViZGlyZWN0b3J5LWFycm93LWxlZnQiPjxwYXRoIGQ9Ik0xMSA5bDEuNDIgMS40Mkw4LjgzIDE0SDE4VjRoMnYxMkg4LjgzbDMuNTkgMy41OEwxMSAyMWwtNi02IDYtNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzdWJkaXJlY3RvcnktYXJyb3ctcmlnaHQiPjxwYXRoIGQ9Ik0xOSAxNWwtNiA2LTEuNDItMS40MkwxNS4xNyAxNkg0VjRoMnYxMGg5LjE3bC0zLjU5LTMuNThMMTMgOWw2IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3ViamVjdCI+PHBhdGggZD0iTTE0IDE3SDR2MmgxMHYtMnptNi04SDR2MmgxNlY5ek00IDE1aDE2di0ySDR2MnpNNCA1djJoMTZWNUg0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN1cGVydmlzb3ItYWNjb3VudCI+PHBhdGggZD0iTTE2LjUgMTJjMS4zOCAwIDIuNDktMS4xMiAyLjQ5LTIuNVMxNy44OCA3IDE2LjUgN0MxNS4xMiA3IDE0IDguMTIgMTQgOS41czEuMTIgMi41IDIuNSAyLjV6TTkgMTFjMS42NiAwIDIuOTktMS4zNCAyLjk5LTNTMTAuNjYgNSA5IDVDNy4zNCA1IDYgNi4zNCA2IDhzMS4zNCAzIDMgM3ptNy41IDNjLTEuODMgMC01LjUuOTItNS41IDIuNzVWMTloMTF2LTIuMjVjMC0xLjgzLTMuNjctMi43NS01LjUtMi43NXpNOSAxM2MtMi4zMyAwLTcgMS4xNy03IDMuNVYxOWg3di0yLjI1YzAtLjg1LjMzLTIuMzQgMi4zNy0zLjQ3QzEwLjUgMTMuMSA5LjY2IDEzIDkgMTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3dhcC1ob3JpeiI+PHBhdGggZD0iTTYuOTkgMTFMMyAxNWwzLjk5IDR2LTNIMTR2LTJINi45OXYtM3pNMjEgOWwtMy45OS00djNIMTB2Mmg3LjAxdjNMMjEgOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzd2FwLXZlcnQiPjxwYXRoIGQ9Ik0xNiAxNy4wMVYxMGgtMnY3LjAxaC0zTDE1IDIxbDQtMy45OWgtM3pNOSAzTDUgNi45OWgzVjE0aDJWNi45OWgzTDkgM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJzd2FwLXZlcnRpY2FsLWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6TTYuNSA5TDEwIDUuNSAxMy41IDlIMTF2NEg5VjlINi41em0xMSA2TDE0IDE4LjUgMTAuNSAxNUgxM3YtNGgydjRoMi41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN5c3RlbS11cGRhdGUtYWx0Ij48cGF0aCBkPSJNMTIgMTYuNWw0LTRoLTN2LTloLTJ2OUg4bDQgNHptOS0xM2gtNnYxLjk5aDZ2MTQuMDNIM1Y1LjQ5aDZWMy41SDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJ2LTE0YzAtMS4xLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRhYiI+PHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGFiLXVuc2VsZWN0ZWQiPjxwYXRoIGQ9Ik0xIDloMlY3SDF2MnptMCA0aDJ2LTJIMXYyem0wLThoMlYzYy0xLjEgMC0yIC45LTIgMnptOCAxNmgydi0ySDl2MnptLTgtNGgydi0ySDF2MnptMiA0di0ySDFjMCAxLjEuOSAyIDIgMnpNMjEgM2gtOHY2aDEwVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTRoMnYtMmgtMnYyek05IDVoMlYzSDl2MnpNNSAyMWgydi0ySDV2MnpNNSA1aDJWM0g1djJ6bTE2IDE2YzEuMSAwIDItLjkgMi0yaC0ydjJ6bTAtOGgydi0yaC0ydjJ6bS04IDhoMnYtMmgtMnYyem00IDBoMnYtMmgtMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRleHQtZm9ybWF0Ij48cGF0aCBkPSJNNSAxN3YyaDE0di0ySDV6bTQuNS00LjJoNWwuOSAyLjJoMi4xTDEyLjc1IDRoLTEuNUw2LjUgMTVoMi4xbC45LTIuMnpNMTIgNS45OEwxMy44NyAxMWgtMy43NEwxMiA1Ljk4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRoZWF0ZXJzIj48cGF0aCBkPSJNMTggM3YyaC0yVjNIOHYySDZWM0g0djE4aDJ2LTJoMnYyaDh2LTJoMnYyaDJWM2gtMnpNOCAxN0g2di0yaDJ2MnptMC00SDZ2LTJoMnYyem0wLTRINlY3aDJ2MnptMTAgOGgtMnYtMmgydjJ6bTAtNGgtMnYtMmgydjJ6bTAtNGgtMlY3aDJ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0aHVtYi1kb3duIj48cGF0aCBkPSJNMTUgM0g2Yy0uODMgMC0xLjU0LjUtMS44NCAxLjIybC0zLjAyIDcuMDVjLS4wOS4yMy0uMTQuNDctLjE0LjczdjEuOTFsLjAxLjAxTDEgMTRjMCAxLjEuOSAyIDIgMmg2LjMxbC0uOTUgNC41Ny0uMDMuMzJjMCAuNDEuMTcuNzkuNDQgMS4wNkw5LjgzIDIzbDYuNTktNi41OWMuMzYtLjM2LjU4LS44Ni41OC0xLjQxVjVjMC0xLjEtLjktMi0yLTJ6bTQgMHYxMmg0VjNoLTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGh1bWItdXAiPjxwYXRoIGQ9Ik0xIDIxaDRWOUgxdjEyem0yMi0xMWMwLTEuMS0uOS0yLTItMmgtNi4zMWwuOTUtNC41Ny4wMy0uMzJjMC0uNDEtLjE3LS43OS0uNDQtMS4wNkwxNC4xNyAxIDcuNTkgNy41OUM3LjIyIDcuOTUgNyA4LjQ1IDcgOXYxMGMwIDEuMS45IDIgMiAyaDljLjgzIDAgMS41NC0uNSAxLjg0LTEuMjJsMy4wMi03LjA1Yy4wOS0uMjMuMTQtLjQ3LjE0LS43M3YtMS45MWwtLjAxLS4wMUwyMyAxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0aHVtYnMtdXAtZG93biI+PHBhdGggZD0iTTEyIDZjMC0uNTUtLjQ1LTEtMS0xSDUuODJsLjY2LTMuMTguMDItLjIzYzAtLjMxLS4xMy0uNTktLjMzLS44TDUuMzggMCAuNDQgNC45NEMuMTcgNS4yMSAwIDUuNTkgMCA2djYuNWMwIC44My42NyAxLjUgMS41IDEuNWg2Ljc1Yy42MiAwIDEuMTUtLjM4IDEuMzgtLjkxbDIuMjYtNS4yOWMuMDctLjE3LjExLS4zNi4xMS0uNTVWNnptMTAuNSA0aC02Ljc1Yy0uNjIgMC0xLjE1LjM4LTEuMzguOTFsLTIuMjYgNS4yOWMtLjA3LjE3LS4xMS4zNi0uMTEuNTVWMThjMCAuNTUuNDUgMSAxIDFoNS4xOGwtLjY2IDMuMTgtLjAyLjI0YzAgLjMxLjEzLjU5LjMzLjhsLjc5Ljc4IDQuOTQtNC45NGMuMjctLjI3LjQ0LS42NS40NC0xLjA2di02LjVjMC0uODMtLjY3LTEuNS0xLjUtMS41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRpbWVsaW5lIj48cGF0aCBkPSJNMjMgOGMwIDEuMS0uOSAyLTIgMi0uMTggMC0uMzUtLjAyLS41MS0uMDdsLTMuNTYgMy41NWMuMDUuMTYuMDcuMzQuMDcuNTIgMCAxLjEtLjkgMi0yIDJzLTItLjktMi0yYzAtLjE4LjAyLS4zNi4wNy0uNTJsLTIuNTUtMi41NWMtLjE2LjA1LS4zNC4wNy0uNTIuMDdzLS4zNi0uMDItLjUyLS4wN2wtNC41NSA0LjU2Yy4wNS4xNi4wNy4zMy4wNy41MSAwIDEuMS0uOSAyLTIgMnMtMi0uOS0yLTIgLjktMiAyLTJjLjE4IDAgLjM1LjAyLjUxLjA3bDQuNTYtNC41NUM4LjAyIDkuMzYgOCA5LjE4IDggOWMwLTEuMS45LTIgMi0yczIgLjkgMiAyYzAgLjE4LS4wMi4zNi0uMDcuNTJsMi41NSAyLjU1Yy4xNi0uMDUuMzQtLjA3LjUyLS4wN3MuMzYuMDIuNTIuMDdsMy41NS0zLjU2QzE5LjAyIDguMzUgMTkgOC4xOCAxOSA4YzAtMS4xLjktMiAyLTJzMiAuOSAyIDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idG9jIj48cGF0aCBkPSJNMyA5aDE0VjdIM3Yyem0wIDRoMTR2LTJIM3Yyem0wIDRoMTR2LTJIM3Yyem0xNiAwaDJ2LTJoLTJ2MnptMC0xMHYyaDJWN2gtMnptMCA2aDJ2LTJoLTJ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0b2RheSI+PHBhdGggZD0iTTE5IDNoLTFWMWgtMnYySDhWMUg2djJINWMtMS4xMSAwLTEuOTkuOS0xLjk5IDJMMyAxOWMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDVWOGgxNHYxMXpNNyAxMGg1djVIN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJ0b2xsIj48cGF0aCBkPSJNMTUgNGMtNC40MiAwLTggMy41OC04IDhzMy41OCA4IDggOCA4LTMuNTggOC04LTMuNTgtOC04LTh6bTAgMTRjLTMuMzEgMC02LTIuNjktNi02czIuNjktNiA2LTYgNiAyLjY5IDYgNi0yLjY5IDYtNiA2ek0zIDEyYzAtMi42MSAxLjY3LTQuODMgNC01LjY1VjQuMjZDMy41NSA1LjE1IDEgOC4yNyAxIDEyczIuNTUgNi44NSA2IDcuNzR2LTIuMDljLTIuMzMtLjgyLTQtMy4wNC00LTUuNjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idG91Y2gtYXBwIj48cGF0aCBkPSJNOSAxMS4yNFY3LjVDOSA2LjEyIDEwLjEyIDUgMTEuNSA1UzE0IDYuMTIgMTQgNy41djMuNzRjMS4yMS0uODEgMi0yLjE4IDItMy43NEMxNiA1LjAxIDEzLjk5IDMgMTEuNSAzUzcgNS4wMSA3IDcuNWMwIDEuNTYuNzkgMi45MyAyIDMuNzR6bTkuODQgNC42M2wtNC41NC0yLjI2Yy0uMTctLjA3LS4zNS0uMTEtLjU0LS4xMUgxM3YtNmMwLS44My0uNjctMS41LTEuNS0xLjVTMTAgNi42NyAxMCA3LjV2MTAuNzRsLTMuNDMtLjcyYy0uMDgtLjAxLS4xNS0uMDMtLjI0LS4wMy0uMzEgMC0uNTkuMTMtLjc5LjMzbC0uNzkuOCA0Ljk0IDQuOTRjLjI3LjI3LjY1LjQ0IDEuMDYuNDRoNi43OWMuNzUgMCAxLjMzLS41NSAxLjQ0LTEuMjhsLjc1LTUuMjdjLjAxLS4wNy4wMi0uMTQuMDItLjIgMC0uNjItLjM4LTEuMTYtLjkxLTEuMzh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idHJhY2stY2hhbmdlcyI+PHBhdGggZD0iTTE5LjA3IDQuOTNsLTEuNDEgMS40MUMxOS4xIDcuNzkgMjAgOS43OSAyMCAxMmMwIDQuNDItMy41OCA4LTggOHMtOC0zLjU4LTgtOGMwLTQuMDggMy4wNS03LjQ0IDctNy45M3YyLjAyQzguMTYgNi41NyA2IDkuMDMgNiAxMmMwIDMuMzEgMi42OSA2IDYgNnM2LTIuNjkgNi02YzAtMS42Ni0uNjctMy4xNi0xLjc2LTQuMjRsLTEuNDEgMS40MUMxNS41NSA5LjkgMTYgMTAuOSAxNiAxMmMwIDIuMjEtMS43OSA0LTQgNHMtNC0xLjc5LTQtNGMwLTEuODYgMS4yOC0zLjQxIDMtMy44NnYyLjE0Yy0uNi4zNS0xIC45OC0xIDEuNzIgMCAxLjEuOSAyIDIgMnMyLS45IDItMmMwLS43NC0uNC0xLjM4LTEtMS43MlYyaC0xQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBjMC0yLjc2LTEuMTItNS4yNi0yLjkzLTcuMDd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idHJhbnNsYXRlIj48cGF0aCBkPSJNMTIuODcgMTUuMDdsLTIuNTQtMi41MS4wMy0uMDNjMS43NC0xLjk0IDIuOTgtNC4xNyAzLjcxLTYuNTNIMTdWNGgtN1YySDh2MkgxdjEuOTloMTEuMTdDMTEuNSA3LjkyIDEwLjQ0IDkuNzUgOSAxMS4zNSA4LjA3IDEwLjMyIDcuMyA5LjE5IDYuNjkgOGgtMmMuNzMgMS42MyAxLjczIDMuMTcgMi45OCA0LjU2bC01LjA5IDUuMDJMNCAxOWw1LTUgMy4xMSAzLjExLjc2LTIuMDR6TTE4LjUgMTBoLTJMMTIgMjJoMmwxLjEyLTNoNC43NUwyMSAyMmgybC00LjUtMTJ6bS0yLjYyIDdsMS42Mi00LjMzTDE5LjEyIDE3aC0zLjI0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRyZW5kaW5nLWRvd24iPjxwYXRoIGQ9Ik0xNiAxOGwyLjI5LTIuMjktNC44OC00Ljg4LTQgNEwyIDcuNDEgMy40MSA2bDYgNiA0LTQgNi4zIDYuMjlMMjIgMTJ2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0cmVuZGluZy1mbGF0Ij48cGF0aCBkPSJNMjIgMTJsLTQtNHYzSDN2MmgxNXYzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRyZW5kaW5nLXVwIj48cGF0aCBkPSJNMTYgNmwyLjI5IDIuMjktNC44OCA0Ljg4LTQtNEwyIDE2LjU5IDMuNDEgMThsNi02IDQgNCA2LjMtNi4yOUwyMiAxMlY2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InR1cm5lZC1pbiI+PHBhdGggZD0iTTE3IDNIN2MtMS4xIDAtMS45OS45LTEuOTkgMkw1IDIxbDctMyA3IDNWNWMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0dXJuZWQtaW4tbm90Ij48cGF0aCBkPSJNMTcgM0g3Yy0xLjEgMC0xLjk5LjktMS45OSAyTDUgMjFsNy0zIDcgM1Y1YzAtMS4xLS45LTItMi0yem0wIDE1bC01LTIuMThMNyAxOFY1aDEwdjEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InVuYXJjaGl2ZSI+PHBhdGggZD0iTTIwLjU1IDUuMjJsLTEuMzktMS42OEMxOC44OCAzLjIxIDE4LjQ3IDMgMTggM0g2Yy0uNDcgMC0uODguMjEtMS4xNS41NUwzLjQ2IDUuMjJDMy4xNyA1LjU3IDMgNi4wMSAzIDYuNVYxOWMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY2LjVjMC0uNDktLjE3LS45My0uNDUtMS4yOHpNMTIgOS41bDUuNSA1LjVIMTR2MmgtNHYtMkg2LjVMMTIgOS41ek01LjEyIDVsLjgyLTFoMTJsLjkzIDFINS4xMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ1bmRvIj48cGF0aCBkPSJNMTIuNSA4Yy0yLjY1IDAtNS4wNS45OS02LjkgMi42TDIgN3Y5aDlsLTMuNjItMy42MmMxLjM5LTEuMTYgMy4xNi0xLjg4IDUuMTItMS44OCAzLjU0IDAgNi41NSAyLjMxIDcuNiA1LjVsMi4zNy0uNzhDMjEuMDggMTEuMDMgMTcuMTUgOCAxMi41IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idW5mb2xkLWxlc3MiPjxwYXRoIGQ9Ik03LjQxIDE4LjU5TDguODMgMjAgMTIgMTYuODMgMTUuMTcgMjBsMS40MS0xLjQxTDEyIDE0bC00LjU5IDQuNTl6bTkuMTgtMTMuMThMMTUuMTcgNCAxMiA3LjE3IDguODMgNCA3LjQxIDUuNDEgMTIgMTBsNC41OS00LjU5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InVuZm9sZC1tb3JlIj48cGF0aCBkPSJNMTIgNS44M0wxNS4xNyA5bDEuNDEtMS40MUwxMiAzIDcuNDEgNy41OSA4LjgzIDkgMTIgNS44M3ptMCAxMi4zNEw4LjgzIDE1bC0xLjQxIDEuNDFMMTIgMjFsNC41OS00LjU5TDE1LjE3IDE1IDEyIDE4LjE3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InVwZGF0ZSI+PHBhdGggZD0iTTIxIDEwLjEyaC02Ljc4bDIuNzQtMi44MmMtMi43My0yLjctNy4xNS0yLjgtOS44OC0uMS0yLjczIDIuNzEtMi43MyA3LjA4IDAgOS43OSAyLjczIDIuNzEgNy4xNSAyLjcxIDkuODggMEMxOC4zMiAxNS42NSAxOSAxNC4wOCAxOSAxMi4xaDJjMCAxLjk4LS44OCA0LjU1LTIuNjQgNi4yOS0zLjUxIDMuNDgtOS4yMSAzLjQ4LTEyLjcyIDAtMy41LTMuNDctMy41My05LjExLS4wMi0xMi41OCAzLjUxLTMuNDcgOS4xNC0zLjQ3IDEyLjY1IDBMMjEgM3Y3LjEyek0xMi41IDh2NC4yNWwzLjUgMi4wOC0uNzIgMS4yMUwxMSAxM1Y4aDEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2ZXJpZmllZC11c2VyIj48cGF0aCBkPSJNMTIgMUwzIDV2NmMwIDUuNTUgMy44NCAxMC43NCA5IDEyIDUuMTYtMS4yNiA5LTYuNDUgOS0xMlY1bC05LTR6bS0yIDE2bC00LTQgMS40MS0xLjQxTDEwIDE0LjE3bDYuNTktNi41OUwxOCA5bC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1hZ2VuZGEiPjxwYXRoIGQ9Ik0yMCAxM0gzYy0uNTUgMC0xIC40NS0xIDF2NmMwIC41NS40NSAxIDEgMWgxN2MuNTUgMCAxLS40NSAxLTF2LTZjMC0uNTUtLjQ1LTEtMS0xem0wLTEwSDNjLS41NSAwLTEgLjQ1LTEgMXY2YzAgLjU1LjQ1IDEgMSAxaDE3Yy41NSAwIDEtLjQ1IDEtMVY0YzAtLjU1LS40NS0xLTEtMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LWFycmF5Ij48cGF0aCBkPSJNNCAxOGgzVjVINHYxM3pNMTggNXYxM2gzVjVoLTN6TTggMThoOVY1SDh2MTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1jYXJvdXNlbCI+PHBhdGggZD0iTTcgMTloMTBWNEg3djE1em0tNS0yaDRWNkgydjExek0xOCA2djExaDRWNmgtNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LWNvbHVtbiI+PHBhdGggZD0iTTEwIDE4aDVWNWgtNXYxM3ptLTYgMGg1VjVINHYxM3pNMTYgNXYxM2g1VjVoLTV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1kYXkiPjxwYXRoIGQ9Ik0yIDIxaDE5di0zSDJ2M3pNMjAgOEgzYy0uNTUgMC0xIC40NS0xIDF2NmMwIC41NS40NSAxIDEgMWgxN2MuNTUgMCAxLS40NSAxLTFWOWMwLS41NS0uNDUtMS0xLTF6TTIgM3YzaDE5VjNIMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LWhlYWRsaW5lIj48cGF0aCBkPSJNNCAxNWgxNnYtMkg0djJ6bTAgNGgxNnYtMkg0djJ6bTAtOGgxNlY5SDR2MnptMC02djJoMTZWNUg0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpZXctbGlzdCI+PHBhdGggZD0iTTQgMTRoNHYtNEg0djR6bTAgNWg0di00SDR2NHpNNCA5aDRWNUg0djR6bTUgNWgxMnYtNEg5djR6bTAgNWgxMnYtNEg5djR6TTkgNXY0aDEyVjVIOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LW1vZHVsZSI+PHBhdGggZD0iTTQgMTFoNVY1SDR2NnptMCA3aDV2LTZINHY2em02IDBoNXYtNmgtNXY2em02IDBoNXYtNmgtNXY2em0tNi03aDVWNWgtNXY2em02LTZ2Nmg1VjVoLTV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1xdWlsdCI+PHBhdGggZD0iTTEwIDE4aDV2LTZoLTV2NnptLTYgMGg1VjVINHYxM3ptMTIgMGg1di02aC01djZ6TTEwIDV2NmgxMVY1SDEweiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpZXctc3RyZWFtIj48cGF0aCBkPSJNNCAxOGgxN3YtNkg0djZ6TTQgNXY2aDE3VjVINHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LXdlZWsiPjxwYXRoIGQ9Ik02IDVIM2MtLjU1IDAtMSAuNDUtMSAxdjEyYzAgLjU1LjQ1IDEgMSAxaDNjLjU1IDAgMS0uNDUgMS0xVjZjMC0uNTUtLjQ1LTEtMS0xem0xNCAwaC0zYy0uNTUgMC0xIC40NS0xIDF2MTJjMCAuNTUuNDUgMSAxIDFoM2MuNTUgMCAxLS40NSAxLTFWNmMwLS41NS0uNDUtMS0xLTF6bS03IDBoLTNjLS41NSAwLTEgLjQ1LTEgMXYxMmMwIC41NS40NSAxIDEgMWgzYy41NSAwIDEtLjQ1IDEtMVY2YzAtLjU1LS40NS0xLTEtMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aXNpYmlsaXR5Ij48cGF0aCBkPSJNMTIgNC41QzcgNC41IDIuNzMgNy42MSAxIDEyYzEuNzMgNC4zOSA2IDcuNSAxMSA3LjVzOS4yNy0zLjExIDExLTcuNWMtMS43My00LjM5LTYtNy41LTExLTcuNXpNMTIgMTdjLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNS0yLjI0IDUtNSA1em0wLThjLTEuNjYgMC0zIDEuMzQtMyAzczEuMzQgMyAzIDMgMy0xLjM0IDMtMy0xLjM0LTMtMy0zeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpc2liaWxpdHktb2ZmIj48cGF0aCBkPSJNMTIgN2MyLjc2IDAgNSAyLjI0IDUgNSAwIC42NS0uMTMgMS4yNi0uMzYgMS44M2wyLjkyIDIuOTJjMS41MS0xLjI2IDIuNy0yLjg5IDMuNDMtNC43NS0xLjczLTQuMzktNi03LjUtMTEtNy41LTEuNCAwLTIuNzQuMjUtMy45OC43bDIuMTYgMi4xNkMxMC43NCA3LjEzIDExLjM1IDcgMTIgN3pNMiA0LjI3bDIuMjggMi4yOC40Ni40NkMzLjA4IDguMyAxLjc4IDEwLjAyIDEgMTJjMS43MyA0LjM5IDYgNy41IDExIDcuNSAxLjU1IDAgMy4wMy0uMyA0LjM4LS44NGwuNDIuNDJMMTkuNzMgMjIgMjEgMjAuNzMgMy4yNyAzIDIgNC4yN3pNNy41MyA5LjhsMS41NSAxLjU1Yy0uMDUuMjEtLjA4LjQzLS4wOC42NSAwIDEuNjYgMS4zNCAzIDMgMyAuMjIgMCAuNDQtLjAzLjY1LS4wOGwxLjU1IDEuNTVjLS42Ny4zMy0xLjQxLjUzLTIuMi41My0yLjc2IDAtNS0yLjI0LTUtNSAwLS43OS4yLTEuNTMuNTMtMi4yem00LjMxLS43OGwzLjE1IDMuMTUuMDItLjE2YzAtMS42Ni0xLjM0LTMtMy0zbC0uMTcuMDF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id2FybmluZyI+PHBhdGggZD0iTTEgMjFoMjJMMTIgMiAxIDIxem0xMi0zaC0ydi0yaDJ2MnptMC00aC0ydi00aDJ2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ3YXRjaC1sYXRlciI+PHBhdGggZD0iTTEyIDJDNi41IDIgMiA2LjUgMiAxMnM0LjUgMTAgMTAgMTAgMTAtNC41IDEwLTEwUzE3LjUgMiAxMiAyem00LjIgMTQuMkwxMSAxM1Y3aDEuNXY1LjJsNC41IDIuNy0uOCAxLjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id2Vla2VuZCI+PHBhdGggZD0iTTIxIDEwYy0xLjEgMC0yIC45LTIgMnYzSDV2LTNjMC0xLjEtLjktMi0yLTJzLTIgLjktMiAydjVjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMnYtNWMwLTEuMS0uOS0yLTItMnptLTMtNUg2Yy0xLjEgMC0yIC45LTIgMnYyLjE1YzEuMTYuNDEgMiAxLjUxIDIgMi44MlYxNGgxMnYtMi4wM2MwLTEuMy44NC0yLjQgMi0yLjgyVjdjMC0xLjEtLjktMi0yLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id29yayI+PHBhdGggZD0iTTIwIDZoLTRWNGMwLTEuMTEtLjg5LTItMi0yaC00Yy0xLjExIDAtMiAuODktMiAydjJINGMtMS4xMSAwLTEuOTkuODktMS45OSAyTDIgMTljMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWOGMwLTEuMTEtLjg5LTItMi0yem0tNiAwaC00VjRoNHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InlvdXR1YmUtc2VhcmNoZWQtZm9yIj48cGF0aCBkPSJNMTcuMDEgMTRoLS44bC0uMjctLjI3Yy45OC0xLjE0IDEuNTctMi42MSAxLjU3LTQuMjMgMC0zLjU5LTIuOTEtNi41LTYuNS02LjVzLTYuNSAzLTYuNSA2LjVIMmwzLjg0IDQgNC4xNi00SDYuNTFDNi41MSA3IDguNTMgNSAxMS4wMSA1czQuNSAyLjAxIDQuNSA0LjVjMCAyLjQ4LTIuMDIgNC41LTQuNSA0LjUtLjY1IDAtMS4yNi0uMTQtMS44Mi0uMzhMNy43MSAxNS4xYy45Ny41NyAyLjA5LjkgMy4zLjkgMS42MSAwIDMuMDgtLjU5IDQuMjItMS41N2wuMjcuMjd2Ljc5bDUuMDEgNC45OUwyMiAxOWwtNC45OS01eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Inpvb20taW4iPjxwYXRoIGQ9Ik0xNS41IDE0aC0uNzlsLS4yOC0uMjdDMTUuNDEgMTIuNTkgMTYgMTEuMTEgMTYgOS41IDE2IDUuOTEgMTMuMDkgMyA5LjUgM1MzIDUuOTEgMyA5LjUgNS45MSAxNiA5LjUgMTZjMS42MSAwIDMuMDktLjU5IDQuMjMtMS41N2wuMjcuMjh2Ljc5bDUgNC45OUwyMC40OSAxOWwtNC45OS01em0tNiAwQzcuMDEgMTQgNSAxMS45OSA1IDkuNVM3LjAxIDUgOS41IDUgMTQgNy4wMSAxNCA5LjUgMTEuOTkgMTQgOS41IDE0em0yLjUtNGgtMnYySDl2LTJIN1Y5aDJWN2gxdjJoMnYxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Inpvb20tb3V0Ij48cGF0aCBkPSJNMTUuNSAxNGgtLjc5bC0uMjgtLjI3QzE1LjQxIDEyLjU5IDE2IDExLjExIDE2IDkuNSAxNiA1LjkxIDEzLjA5IDMgOS41IDNTMyA1LjkxIDMgOS41IDUuOTEgMTYgOS41IDE2YzEuNjEgMCAzLjA5LS41OSA0LjIzLTEuNTdsLjI3LjI4di43OWw1IDQuOTlMMjAuNDkgMTlsLTQuOTktNXptLTYgMEM3LjAxIDE0IDUgMTEuOTkgNSA5LjVTNy4wMSA1IDkuNSA1IDE0IDcuMDEgMTQgOS41IDExLjk5IDE0IDkuNSAxNHpNNyA5aDV2MUg3eiI+PC9wYXRoPjwvZz4KPC9kZWZzPjwvc3ZnPgo8L2lyb24taWNvbnNldC1zdmc+YDtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHZiZS5jb250ZW50KTt2YXIgdDB0PXsiVSswMDA4IjoiYmFja3NwYWNlIiwiVSswMDA5IjoidGFiIiwiVSswMDFCIjoiZXNjIiwiVSswMDIwIjoic3BhY2UiLCJVKzAwN0YiOiJkZWwifSx4YmU9ezg6ImJhY2tzcGFjZSIsOToidGFiIiwxMzoiZW50ZXIiLDI3OiJlc2MiLDMzOiJwYWdldXAiLDM0OiJwYWdlZG93biIsMzU6ImVuZCIsMzY6ImhvbWUiLDMyOiJzcGFjZSIsMzc6ImxlZnQiLDM4OiJ1cCIsMzk6InJpZ2h0Iiw0MDoiZG93biIsNDY6ImRlbCIsMTA2OiIqIn0sZTB0PXtzaGlmdDoic2hpZnRLZXkiLGN0cmw6ImN0cmxLZXkiLGFsdDoiYWx0S2V5IixtZXRhOiJtZXRhS2V5In0sYmJlPS9bYS16MC05Kl0vLHdiZT0vVVwrLyxTYmU9L15hcnJvdy8sTWJlPS9ec3BhY2UoYmFyKT8vLEViZT0vXmVzY2FwZSQvO2Z1bmN0aW9uIHIwdChlLHQpe3ZhciByPSIiO2lmKGUpe3ZhciBuPWUudG9Mb3dlckNhc2UoKTtuPT09IiAifHxNYmUudGVzdChuKT9yPSJzcGFjZSI6RWJlLnRlc3Qobik/cj0iZXNjIjpuLmxlbmd0aD09MT8oIXR8fGJiZS50ZXN0KG4pKSYmKHI9bik6U2JlLnRlc3Qobik/cj1uLnJlcGxhY2UoImFycm93IiwiIik6bj09Im11bHRpcGx5Ij9yPSIqIjpyPW59cmV0dXJuIHJ9ZnVuY3Rpb24gVGJlKGUpe3ZhciB0PSIiO3JldHVybiBlJiYoZSBpbiB0MHQ/dD10MHRbZV06d2JlLnRlc3QoZSk/KGU9cGFyc2VJbnQoZS5yZXBsYWNlKCJVKyIsIjB4IiksMTYpLHQ9U3RyaW5nLmZyb21DaGFyQ29kZShlKS50b0xvd2VyQ2FzZSgpKTp0PWUudG9Mb3dlckNhc2UoKSksdH1mdW5jdGlvbiBDYmUoZSl7dmFyIHQ9IiI7cmV0dXJuIE51bWJlcihlKSYmKGU+PTY1JiZlPD05MD90PVN0cmluZy5mcm9tQ2hhckNvZGUoMzIrZSk6ZT49MTEyJiZlPD0xMjM/dD0iZiIrKGUtMTEyKzEpOmU+PTQ4JiZlPD01Nz90PVN0cmluZyhlLTQ4KTplPj05NiYmZTw9MTA1P3Q9U3RyaW5nKGUtOTYpOnQ9eGJlW2VdKSx0fWZ1bmN0aW9uIEFiZShlLHQpe3JldHVybiBlLmtleT9yMHQoZS5rZXksdCk6ZS5kZXRhaWwmJmUuZGV0YWlsLmtleT9yMHQoZS5kZXRhaWwua2V5LHQpOlRiZShlLmtleUlkZW50aWZpZXIpfHxDYmUoZS5rZXlDb2RlKXx8IiJ9ZnVuY3Rpb24gbjB0KGUsdCl7dmFyIHI9QWJlKHQsZS5oYXNNb2RpZmllcnMpO3JldHVybiByPT09ZS5rZXkmJighZS5oYXNNb2RpZmllcnN8fCEhdC5zaGlmdEtleT09ISFlLnNoaWZ0S2V5JiYhIXQuY3RybEtleT09ISFlLmN0cmxLZXkmJiEhdC5hbHRLZXk9PSEhZS5hbHRLZXkmJiEhdC5tZXRhS2V5PT0hIWUubWV0YUtleSl9ZnVuY3Rpb24gUGJlKGUpe3JldHVybiBlLmxlbmd0aD09PTE/e2NvbWJvOmUsa2V5OmUsZXZlbnQ6ImtleWRvd24ifTplLnNwbGl0KCIrIikucmVkdWNlKGZ1bmN0aW9uKHQscil7dmFyIG49ci5zcGxpdCgiOiIpLGk9blswXSxvPW5bMV07cmV0dXJuIGkgaW4gZTB0Pyh0W2UwdFtpXV09ITAsdC5oYXNNb2RpZmllcnM9ITApOih0LmtleT1pLHQuZXZlbnQ9b3x8ImtleWRvd24iKSx0fSx7Y29tYm86ZS5zcGxpdCgiOiIpLnNoaWZ0KCl9KX1mdW5jdGlvbiBpMHQoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KCIgIikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBQYmUodCl9KX12YXIgT289e3Byb3BlcnRpZXM6e2tleUV2ZW50VGFyZ2V0Ont0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzfX0sc3RvcEtleWJvYXJkRXZlbnRQcm9wYWdhdGlvbjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfYm91bmRLZXlIYW5kbGVyczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sX2ltcGVyYXRpdmVLZXlCaW5kaW5nczp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57fX19fSxvYnNlcnZlcnM6WyJfcmVzZXRLZXlFdmVudExpc3RlbmVycyhrZXlFdmVudFRhcmdldCwgX2JvdW5kS2V5SGFuZGxlcnMpIl0sa2V5QmluZGluZ3M6e30scmVnaXN0ZXJlZDpmdW5jdGlvbigpe3RoaXMuX3ByZXBLZXlCaW5kaW5ncygpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2xpc3RlbktleUV2ZW50TGlzdGVuZXJzKCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fdW5saXN0ZW5LZXlFdmVudExpc3RlbmVycygpfSxhZGRPd25LZXlCaW5kaW5nOmZ1bmN0aW9uKGUsdCl7dGhpcy5faW1wZXJhdGl2ZUtleUJpbmRpbmdzW2VdPXQsdGhpcy5fcHJlcEtleUJpbmRpbmdzKCksdGhpcy5fcmVzZXRLZXlFdmVudExpc3RlbmVycygpfSxyZW1vdmVPd25LZXlCaW5kaW5nczpmdW5jdGlvbigpe3RoaXMuX2ltcGVyYXRpdmVLZXlCaW5kaW5ncz17fSx0aGlzLl9wcmVwS2V5QmluZGluZ3MoKSx0aGlzLl9yZXNldEtleUV2ZW50TGlzdGVuZXJzKCl9LGtleWJvYXJkRXZlbnRNYXRjaGVzS2V5czpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1pMHQodCksbj0wO248ci5sZW5ndGg7KytuKWlmKG4wdChyW25dLGUpKXJldHVybiEwO3JldHVybiExfSxfY29sbGVjdEtleUJpbmRpbmdzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5iZWhhdmlvcnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleUJpbmRpbmdzfSk7cmV0dXJuIGUuaW5kZXhPZih0aGlzLmtleUJpbmRpbmdzKT09PS0xJiZlLnB1c2godGhpcy5rZXlCaW5kaW5ncyksZX0sX3ByZXBLZXlCaW5kaW5nczpmdW5jdGlvbigpe3RoaXMuX2tleUJpbmRpbmdzPXt9LHRoaXMuX2NvbGxlY3RLZXlCaW5kaW5ncygpLmZvckVhY2goZnVuY3Rpb24ocil7Zm9yKHZhciBuIGluIHIpdGhpcy5fYWRkS2V5QmluZGluZyhuLHJbbl0pfSx0aGlzKTtmb3IodmFyIGUgaW4gdGhpcy5faW1wZXJhdGl2ZUtleUJpbmRpbmdzKXRoaXMuX2FkZEtleUJpbmRpbmcoZSx0aGlzLl9pbXBlcmF0aXZlS2V5QmluZGluZ3NbZV0pO2Zvcih2YXIgdCBpbiB0aGlzLl9rZXlCaW5kaW5ncyl0aGlzLl9rZXlCaW5kaW5nc1t0XS5zb3J0KGZ1bmN0aW9uKHIsbil7dmFyIGk9clswXS5oYXNNb2RpZmllcnMsbz1uWzBdLmhhc01vZGlmaWVycztyZXR1cm4gaT09PW8/MDppPy0xOjF9KX0sX2FkZEtleUJpbmRpbmc6ZnVuY3Rpb24oZSx0KXtpMHQoZSkuZm9yRWFjaChmdW5jdGlvbihyKXt0aGlzLl9rZXlCaW5kaW5nc1tyLmV2ZW50XT10aGlzLl9rZXlCaW5kaW5nc1tyLmV2ZW50XXx8W10sdGhpcy5fa2V5QmluZGluZ3Nbci5ldmVudF0ucHVzaChbcix0XSl9LHRoaXMpfSxfcmVzZXRLZXlFdmVudExpc3RlbmVyczpmdW5jdGlvbigpe3RoaXMuX3VubGlzdGVuS2V5RXZlbnRMaXN0ZW5lcnMoKSx0aGlzLmlzQXR0YWNoZWQmJnRoaXMuX2xpc3RlbktleUV2ZW50TGlzdGVuZXJzKCl9LF9saXN0ZW5LZXlFdmVudExpc3RlbmVyczpmdW5jdGlvbigpeyF0aGlzLmtleUV2ZW50VGFyZ2V0fHxPYmplY3Qua2V5cyh0aGlzLl9rZXlCaW5kaW5ncykuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9rZXlCaW5kaW5nc1tlXSxyPXRoaXMuX29uS2V5QmluZGluZ0V2ZW50LmJpbmQodGhpcyx0KTt0aGlzLl9ib3VuZEtleUhhbmRsZXJzLnB1c2goW3RoaXMua2V5RXZlbnRUYXJnZXQsZSxyXSksdGhpcy5rZXlFdmVudFRhcmdldC5hZGRFdmVudExpc3RlbmVyKGUscil9LHRoaXMpfSxfdW5saXN0ZW5LZXlFdmVudExpc3RlbmVyczpmdW5jdGlvbigpe2Zvcih2YXIgZSx0LHIsbjt0aGlzLl9ib3VuZEtleUhhbmRsZXJzLmxlbmd0aDspZT10aGlzLl9ib3VuZEtleUhhbmRsZXJzLnBvcCgpLHQ9ZVswXSxyPWVbMV0sbj1lWzJdLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihyLG4pfSxfb25LZXlCaW5kaW5nRXZlbnQ6ZnVuY3Rpb24oZSx0KXtpZih0aGlzLnN0b3BLZXlib2FyZEV2ZW50UHJvcGFnYXRpb24mJnQuc3RvcFByb3BhZ2F0aW9uKCksIXQuZGVmYXVsdFByZXZlbnRlZClmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXVswXSxpPWVbcl1bMV07aWYobjB0KG4sdCkmJih0aGlzLl90cmlnZ2VyS2V5SGFuZGxlcihuLGksdCksdC5kZWZhdWx0UHJldmVudGVkKSlyZXR1cm59fSxfdHJpZ2dlcktleUhhbmRsZXI6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPU9iamVjdC5jcmVhdGUoZSk7bi5rZXlib2FyZEV2ZW50PXI7dmFyIGk9bmV3IEN1c3RvbUV2ZW50KGUuZXZlbnQse2RldGFpbDpuLGNhbmNlbGFibGU6ITB9KTt0aGlzW3RdLmNhbGwodGhpcyxpKSxpLmRlZmF1bHRQcmV2ZW50ZWQmJnIucHJldmVudERlZmF1bHQoKX19O3ZhciB2OT17cHJvcGVydGllczp7c2Nyb2xsVGFyZ2V0Ont0eXBlOkhUTUxFbGVtZW50LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRTY3JvbGxUYXJnZXR9fX0sb2JzZXJ2ZXJzOlsiX3Njcm9sbFRhcmdldENoYW5nZWQoc2Nyb2xsVGFyZ2V0LCBpc0F0dGFjaGVkKSJdLF9zaG91bGRIYXZlTGlzdGVuZXI6ITAsX3Njcm9sbFRhcmdldENoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt2YXIgcjtpZih0aGlzLl9vbGRTY3JvbGxUYXJnZXQmJih0aGlzLl90b2dnbGVTY3JvbGxMaXN0ZW5lcighMSx0aGlzLl9vbGRTY3JvbGxUYXJnZXQpLHRoaXMuX29sZFNjcm9sbFRhcmdldD1udWxsKSwhIXQpaWYoZT09PSJkb2N1bWVudCIpdGhpcy5zY3JvbGxUYXJnZXQ9dGhpcy5fZG9jO2Vsc2UgaWYodHlwZW9mIGU9PSJzdHJpbmciKXt2YXIgbj10aGlzLmRvbUhvc3Q7dGhpcy5zY3JvbGxUYXJnZXQ9biYmbi4kP24uJFtlXTp6dCh0aGlzLm93bmVyRG9jdW1lbnQpLnF1ZXJ5U2VsZWN0b3IoIiMiK2UpfWVsc2UgdGhpcy5faXNWYWxpZFNjcm9sbFRhcmdldCgpJiYodGhpcy5fb2xkU2Nyb2xsVGFyZ2V0PWUsdGhpcy5fdG9nZ2xlU2Nyb2xsTGlzdGVuZXIodGhpcy5fc2hvdWxkSGF2ZUxpc3RlbmVyLGUpKX0sX3Njcm9sbEhhbmRsZXI6ZnVuY3Rpb24oKXt9LGdldCBfZGVmYXVsdFNjcm9sbFRhcmdldCgpe3JldHVybiB0aGlzLl9kb2N9LGdldCBfZG9jKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnR9LGdldCBfc2Nyb2xsVG9wKCl7cmV0dXJuIHRoaXMuX2lzVmFsaWRTY3JvbGxUYXJnZXQoKT90aGlzLnNjcm9sbFRhcmdldD09PXRoaXMuX2RvYz93aW5kb3cucGFnZVlPZmZzZXQ6dGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsVG9wOjB9LGdldCBfc2Nyb2xsTGVmdCgpe3JldHVybiB0aGlzLl9pc1ZhbGlkU2Nyb2xsVGFyZ2V0KCk/dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LnBhZ2VYT2Zmc2V0OnRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbExlZnQ6MH0sc2V0IF9zY3JvbGxUb3AoZSl7dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LnNjcm9sbFRvKHdpbmRvdy5wYWdlWE9mZnNldCxlKTp0aGlzLl9pc1ZhbGlkU2Nyb2xsVGFyZ2V0KCkmJih0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxUb3A9ZSl9LHNldCBfc2Nyb2xsTGVmdChlKXt0aGlzLnNjcm9sbFRhcmdldD09PXRoaXMuX2RvYz93aW5kb3cuc2Nyb2xsVG8oZSx3aW5kb3cucGFnZVlPZmZzZXQpOnRoaXMuX2lzVmFsaWRTY3JvbGxUYXJnZXQoKSYmKHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbExlZnQ9ZSl9LHNjcm9sbDpmdW5jdGlvbihlLHQpe3ZhciByO3R5cGVvZiBlPT0ib2JqZWN0Ij8ocj1lLmxlZnQsdD1lLnRvcCk6cj1lLHI9cnx8MCx0PXR8fDAsdGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LnNjcm9sbFRvKHIsdCk6dGhpcy5faXNWYWxpZFNjcm9sbFRhcmdldCgpJiYodGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsTGVmdD1yLHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbFRvcD10KX0sZ2V0IF9zY3JvbGxUYXJnZXRXaWR0aCgpe3JldHVybiB0aGlzLl9pc1ZhbGlkU2Nyb2xsVGFyZ2V0KCk/dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LmlubmVyV2lkdGg6dGhpcy5zY3JvbGxUYXJnZXQub2Zmc2V0V2lkdGg6MH0sZ2V0IF9zY3JvbGxUYXJnZXRIZWlnaHQoKXtyZXR1cm4gdGhpcy5faXNWYWxpZFNjcm9sbFRhcmdldCgpP3RoaXMuc2Nyb2xsVGFyZ2V0PT09dGhpcy5fZG9jP3dpbmRvdy5pbm5lckhlaWdodDp0aGlzLnNjcm9sbFRhcmdldC5vZmZzZXRIZWlnaHQ6MH0sX2lzVmFsaWRTY3JvbGxUYXJnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zY3JvbGxUYXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudH0sX3RvZ2dsZVNjcm9sbExpc3RlbmVyOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dD09PXRoaXMuX2RvYz93aW5kb3c6dDtlP3RoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlcnx8KHRoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlcj10aGlzLl9zY3JvbGxIYW5kbGVyLmJpbmQodGhpcyksci5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlcikpOnRoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlciYmKHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLl9ib3VuZFNjcm9sbEhhbmRsZXIpLHRoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlcj1udWxsKX0sdG9nZ2xlU2Nyb2xsTGlzdGVuZXI6ZnVuY3Rpb24oZSl7dGhpcy5fc2hvdWxkSGF2ZUxpc3RlbmVyPWUsdGhpcy5fdG9nZ2xlU2Nyb2xsTGlzdGVuZXIoZSx0aGlzLnNjcm9sbFRhcmdldCl9fTt2YXIgbzB0PW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQKD86aG9uZXxhZDsoPzogVTspPyBDUFUpIE9TIChcZCspLyksSWJlPW8wdCYmbzB0WzFdPj04LGEwdD0zLHMwdD0iLTEwMDAwcHgiLGZFPS0xMDA7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKC13ZWJraXQtbWF4LWRldmljZS1waXhlbC1yYXRpbzogMSkgewogICAgICAgIDpob3N0IHsKICAgICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgICAgfQogICAgICB9CgogICAgICAjaXRlbXMgewogICAgICAgIEBhcHBseSAtLWlyb24tbGlzdC1pdGVtcy1jb250YWluZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICA6aG9zdCg6bm90KFtncmlkXSkpICNpdGVtcyA+IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgICNpdGVtcyA+IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxhcnJheS1zZWxlY3RvciBpZD0ic2VsZWN0b3IiIGl0ZW1zPSJ7e2l0ZW1zfX0iIHNlbGVjdGVkPSJ7e3NlbGVjdGVkSXRlbXN9fSIgc2VsZWN0ZWQtaXRlbT0ie3tzZWxlY3RlZEl0ZW19fSI+PC9hcnJheS1zZWxlY3Rvcj4KCiAgICA8ZGl2IGlkPSJpdGVtcyI+CiAgICAgIDxzbG90Pjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJpcm9uLWxpc3QiLHByb3BlcnRpZXM6e2l0ZW1zOnt0eXBlOkFycmF5fSxhczp7dHlwZTpTdHJpbmcsdmFsdWU6Iml0ZW0ifSxpbmRleEFzOnt0eXBlOlN0cmluZyx2YWx1ZToiaW5kZXgifSxzZWxlY3RlZEFzOnt0eXBlOlN0cmluZyx2YWx1ZToic2VsZWN0ZWQifSxncmlkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwLG9ic2VydmVyOiJfZ3JpZENoYW5nZWQifSxzZWxlY3Rpb25FbmFibGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNlbGVjdGVkSXRlbTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSxzZWxlY3RlZEl0ZW1zOnt0eXBlOk9iamVjdCxub3RpZnk6ITB9LG11bHRpU2VsZWN0aW9uOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNjcm9sbE9mZnNldDp7dHlwZTpOdW1iZXIsdmFsdWU6MH19LG9ic2VydmVyczpbIl9pdGVtc0NoYW5nZWQoaXRlbXMuKikiLCJfc2VsZWN0aW9uRW5hYmxlZENoYW5nZWQoc2VsZWN0aW9uRW5hYmxlZCkiLCJfbXVsdGlTZWxlY3Rpb25DaGFuZ2VkKG11bHRpU2VsZWN0aW9uKSIsIl9zZXRPdmVyZmxvdyhzY3JvbGxUYXJnZXQsIHNjcm9sbE9mZnNldCkiXSxiZWhhdmlvcnM6W1dndCxRcyx2OSxLZ3RdLF9yYXRpbzouNSxfc2Nyb2xsZXJQYWRkaW5nVG9wOjAsX3Njcm9sbFBvc2l0aW9uOjAsX3BoeXNpY2FsU2l6ZTowLF9waHlzaWNhbEF2ZXJhZ2U6MCxfcGh5c2ljYWxBdmVyYWdlQ291bnQ6MCxfcGh5c2ljYWxUb3A6MCxfdmlydHVhbENvdW50OjAsX2VzdFNjcm9sbEhlaWdodDowLF9zY3JvbGxIZWlnaHQ6MCxfdmlld3BvcnRIZWlnaHQ6MCxfdmlld3BvcnRXaWR0aDowLF9waHlzaWNhbEl0ZW1zOm51bGwsX3BoeXNpY2FsU2l6ZXM6bnVsbCxfZmlyc3RWaXNpYmxlSW5kZXhWYWw6bnVsbCxfbGFzdFZpc2libGVJbmRleFZhbDpudWxsLF9tYXhQYWdlczoyLF9mb2N1c2VkSXRlbTpudWxsLF9mb2N1c2VkVmlydHVhbEluZGV4Oi0xLF9mb2N1c2VkUGh5c2ljYWxJbmRleDotMSxfb2Zmc2NyZWVuRm9jdXNlZEl0ZW06bnVsbCxfZm9jdXNCYWNrZmlsbEl0ZW06bnVsbCxfaXRlbXNQZXJSb3c6MSxfaXRlbVdpZHRoOjAsX3Jvd0hlaWdodDowLF90ZW1wbGF0ZUNvc3Q6MCxfcGFyZW50TW9kZWw6ITAsZ2V0IF9waHlzaWNhbEJvdHRvbSgpe3JldHVybiB0aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9waHlzaWNhbFNpemV9LGdldCBfc2Nyb2xsQm90dG9tKCl7cmV0dXJuIHRoaXMuX3Njcm9sbFBvc2l0aW9uK3RoaXMuX3ZpZXdwb3J0SGVpZ2h0fSxnZXQgX3ZpcnR1YWxFbmQoKXtyZXR1cm4gdGhpcy5fdmlydHVhbFN0YXJ0K3RoaXMuX3BoeXNpY2FsQ291bnQtMX0sZ2V0IF9oaWRkZW5Db250ZW50U2l6ZSgpe3ZhciBlPXRoaXMuZ3JpZD90aGlzLl9waHlzaWNhbFJvd3MqdGhpcy5fcm93SGVpZ2h0OnRoaXMuX3BoeXNpY2FsU2l6ZTtyZXR1cm4gZS10aGlzLl92aWV3cG9ydEhlaWdodH0sZ2V0IF9pdGVtc1BhcmVudCgpe3JldHVybiB6dCh6dCh0aGlzLl91c2VyVGVtcGxhdGUpLnBhcmVudE5vZGUpfSxnZXQgX21heFNjcm9sbFRvcCgpe3JldHVybiB0aGlzLl9lc3RTY3JvbGxIZWlnaHQtdGhpcy5fdmlld3BvcnRIZWlnaHQrdGhpcy5fc2Nyb2xsT2Zmc2V0fSxnZXQgX21heFZpcnR1YWxTdGFydCgpe3ZhciBlPXRoaXMuX2NvbnZlcnRJbmRleFRvQ29tcGxldGVSb3codGhpcy5fdmlydHVhbENvdW50KTtyZXR1cm4gTWF0aC5tYXgoMCxlLXRoaXMuX3BoeXNpY2FsQ291bnQpfSxzZXQgX3ZpcnR1YWxTdGFydChlKXtlPXRoaXMuX2NsYW1wKGUsMCx0aGlzLl9tYXhWaXJ0dWFsU3RhcnQpLHRoaXMuZ3JpZCYmKGU9ZS1lJXRoaXMuX2l0ZW1zUGVyUm93KSx0aGlzLl92aXJ0dWFsU3RhcnRWYWw9ZX0sZ2V0IF92aXJ0dWFsU3RhcnQoKXtyZXR1cm4gdGhpcy5fdmlydHVhbFN0YXJ0VmFsfHwwfSxzZXQgX3BoeXNpY2FsU3RhcnQoZSl7ZT1lJXRoaXMuX3BoeXNpY2FsQ291bnQsZTwwJiYoZT10aGlzLl9waHlzaWNhbENvdW50K2UpLHRoaXMuZ3JpZCYmKGU9ZS1lJXRoaXMuX2l0ZW1zUGVyUm93KSx0aGlzLl9waHlzaWNhbFN0YXJ0VmFsPWV9LGdldCBfcGh5c2ljYWxTdGFydCgpe3JldHVybiB0aGlzLl9waHlzaWNhbFN0YXJ0VmFsfHwwfSxnZXQgX3BoeXNpY2FsRW5kKCl7cmV0dXJuKHRoaXMuX3BoeXNpY2FsU3RhcnQrdGhpcy5fcGh5c2ljYWxDb3VudC0xKSV0aGlzLl9waHlzaWNhbENvdW50fSxzZXQgX3BoeXNpY2FsQ291bnQoZSl7dGhpcy5fcGh5c2ljYWxDb3VudFZhbD1lfSxnZXQgX3BoeXNpY2FsQ291bnQoKXtyZXR1cm4gdGhpcy5fcGh5c2ljYWxDb3VudFZhbHx8MH0sZ2V0IF9vcHRQaHlzaWNhbFNpemUoKXtyZXR1cm4gdGhpcy5fdmlld3BvcnRIZWlnaHQ9PT0wPzEvMDp0aGlzLl92aWV3cG9ydEhlaWdodCp0aGlzLl9tYXhQYWdlc30sZ2V0IF9pc1Zpc2libGUoKXtyZXR1cm4gQm9vbGVhbih0aGlzLm9mZnNldFdpZHRofHx0aGlzLm9mZnNldEhlaWdodCl9LGdldCBmaXJzdFZpc2libGVJbmRleCgpe3ZhciBlPXRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsO2lmKGU9PW51bGwpe3ZhciB0PXRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldDtlPXRoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihyLG4pe2lmKHQrPXRoaXMuX2dldFBoeXNpY2FsU2l6ZUluY3JlbWVudChyKSx0PnRoaXMuX3Njcm9sbFBvc2l0aW9uKXJldHVybiB0aGlzLmdyaWQ/bi1uJXRoaXMuX2l0ZW1zUGVyUm93Om47aWYodGhpcy5ncmlkJiZ0aGlzLl92aXJ0dWFsQ291bnQtMT09PW4pcmV0dXJuIG4tbiV0aGlzLl9pdGVtc1BlclJvd30pfHwwLHRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPWV9cmV0dXJuIGV9LGdldCBsYXN0VmlzaWJsZUluZGV4KCl7dmFyIGU9dGhpcy5fbGFzdFZpc2libGVJbmRleFZhbDtpZihlPT1udWxsKXtpZih0aGlzLmdyaWQpZT1NYXRoLm1pbih0aGlzLl92aXJ0dWFsQ291bnQsdGhpcy5maXJzdFZpc2libGVJbmRleCt0aGlzLl9lc3RSb3dzSW5WaWV3KnRoaXMuX2l0ZW1zUGVyUm93LTEpO2Vsc2V7dmFyIHQ9dGhpcy5fcGh5c2ljYWxUb3ArdGhpcy5fc2Nyb2xsT2Zmc2V0O3RoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihyLG4pe3Q8dGhpcy5fc2Nyb2xsQm90dG9tJiYoZT1uKSx0Kz10aGlzLl9nZXRQaHlzaWNhbFNpemVJbmNyZW1lbnQocil9KX10aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPWV9cmV0dXJuIGV9LGdldCBfZGVmYXVsdFNjcm9sbFRhcmdldCgpe3JldHVybiB0aGlzfSxnZXQgX3ZpcnR1YWxSb3dDb3VudCgpe3JldHVybiBNYXRoLmNlaWwodGhpcy5fdmlydHVhbENvdW50L3RoaXMuX2l0ZW1zUGVyUm93KX0sZ2V0IF9lc3RSb3dzSW5WaWV3KCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLl92aWV3cG9ydEhlaWdodC90aGlzLl9yb3dIZWlnaHQpfSxnZXQgX3BoeXNpY2FsUm93cygpe3JldHVybiBNYXRoLmNlaWwodGhpcy5fcGh5c2ljYWxDb3VudC90aGlzLl9pdGVtc1BlclJvdyl9LGdldCBfc2Nyb2xsT2Zmc2V0KCl7cmV0dXJuIHRoaXMuX3Njcm9sbGVyUGFkZGluZ1RvcCt0aGlzLnNjcm9sbE9mZnNldH0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9kaWRGb2N1cy5iaW5kKHRoaXMpLCEwKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsdGhpcy5fcmVuZGVyLE5pKSx0aGlzLmxpc3Rlbih0aGlzLCJpcm9uLXJlc2l6ZSIsIl9yZXNpemVIYW5kbGVyIiksdGhpcy5saXN0ZW4odGhpcywia2V5ZG93biIsIl9rZXlkb3duSGFuZGxlciIpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMudW5saXN0ZW4odGhpcywiaXJvbi1yZXNpemUiLCJfcmVzaXplSGFuZGxlciIpLHRoaXMudW5saXN0ZW4odGhpcywia2V5ZG93biIsIl9rZXlkb3duSGFuZGxlciIpfSxfc2V0T3ZlcmZsb3c6ZnVuY3Rpb24oZSl7dGhpcy5zdHlsZS53ZWJraXRPdmVyZmxvd1Njcm9sbGluZz1lPT09dGhpcz8idG91Y2giOiIiLHRoaXMuc3R5bGUub3ZlcmZsb3dZPWU9PT10aGlzPyJhdXRvIjoiIix0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsdGhpcy5fcmVuZGVyLE5pKX0sdXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzOmZ1bmN0aW9uKCl7dmFyIGU9d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcyk7dGhpcy5fc2Nyb2xsZXJQYWRkaW5nVG9wPXRoaXMuc2Nyb2xsVGFyZ2V0PT09dGhpcz8wOnBhcnNlSW50KGVbInBhZGRpbmctdG9wIl0sMTApLHRoaXMuX2lzUlRMPUJvb2xlYW4oZS5kaXJlY3Rpb249PT0icnRsIiksdGhpcy5fdmlld3BvcnRXaWR0aD10aGlzLiQuaXRlbXMub2Zmc2V0V2lkdGgsdGhpcy5fdmlld3BvcnRIZWlnaHQ9dGhpcy5fc2Nyb2xsVGFyZ2V0SGVpZ2h0LHRoaXMuZ3JpZCYmdGhpcy5fdXBkYXRlR3JpZE1ldHJpY3MoKX0sX3Njcm9sbEhhbmRsZXI6ZnVuY3Rpb24oKXt2YXIgZT1NYXRoLm1heCgwLE1hdGgubWluKHRoaXMuX21heFNjcm9sbFRvcCx0aGlzLl9zY3JvbGxUb3ApKSx0PWUtdGhpcy5fc2Nyb2xsUG9zaXRpb24scj10Pj0wO2lmKHRoaXMuX3Njcm9sbFBvc2l0aW9uPWUsdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsTWF0aC5hYnModCk+dGhpcy5fcGh5c2ljYWxTaXplJiZ0aGlzLl9waHlzaWNhbFNpemU+MCl7dD10LXRoaXMuX3Njcm9sbE9mZnNldDt2YXIgbj1NYXRoLnJvdW5kKHQvdGhpcy5fcGh5c2ljYWxBdmVyYWdlKSp0aGlzLl9pdGVtc1BlclJvdzt0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0K24sdGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0K24sdGhpcy5fcGh5c2ljYWxUb3A9TWF0aC5taW4oTWF0aC5mbG9vcih0aGlzLl92aXJ0dWFsU3RhcnQvdGhpcy5faXRlbXNQZXJSb3cpKnRoaXMuX3BoeXNpY2FsQXZlcmFnZSx0aGlzLl9zY3JvbGxQb3NpdGlvbiksdGhpcy5fdXBkYXRlKCl9ZWxzZSBpZih0aGlzLl9waHlzaWNhbENvdW50PjApe3ZhciBpPXRoaXMuX2dldFJldXNhYmxlcyhyKTtyPyh0aGlzLl9waHlzaWNhbFRvcD1pLnBoeXNpY2FsVG9wLHRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQraS5pbmRleGVzLmxlbmd0aCx0aGlzLl9waHlzaWNhbFN0YXJ0PXRoaXMuX3BoeXNpY2FsU3RhcnQraS5pbmRleGVzLmxlbmd0aCk6KHRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQtaS5pbmRleGVzLmxlbmd0aCx0aGlzLl9waHlzaWNhbFN0YXJ0PXRoaXMuX3BoeXNpY2FsU3RhcnQtaS5pbmRleGVzLmxlbmd0aCksdGhpcy5fdXBkYXRlKGkuaW5kZXhlcyxyP251bGw6aS5pbmRleGVzKSx0aGlzLl9kZWJvdW5jZSgiX2luY3JlYXNlUG9vbElmTmVlZGVkIix0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZC5iaW5kKHRoaXMsMCksbGkpfX0sX2dldFJldXNhYmxlczpmdW5jdGlvbihlKXt2YXIgdCxyLG4saSxvPVtdLGE9dGhpcy5faGlkZGVuQ29udGVudFNpemUqdGhpcy5fcmF0aW8scz10aGlzLl92aXJ0dWFsU3RhcnQsbD10aGlzLl92aXJ0dWFsRW5kLGM9dGhpcy5fcGh5c2ljYWxDb3VudCx1PXRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldCxoPXRoaXMuX3BoeXNpY2FsQm90dG9tK3RoaXMuX3Njcm9sbE9mZnNldCxmPXRoaXMuX3Njcm9sbFBvc2l0aW9uLHA9dGhpcy5fc2Nyb2xsQm90dG9tO2ZvcihlPyh0PXRoaXMuX3BoeXNpY2FsU3RhcnQscj10aGlzLl9waHlzaWNhbEVuZCxuPWYtdSk6KHQ9dGhpcy5fcGh5c2ljYWxFbmQscj10aGlzLl9waHlzaWNhbFN0YXJ0LG49aC1wKTtpPXRoaXMuX2dldFBoeXNpY2FsU2l6ZUluY3JlbWVudCh0KSxuPW4taSwhKG8ubGVuZ3RoPj1jfHxuPD1hKTspaWYoZSl7aWYobCtvLmxlbmd0aCsxPj10aGlzLl92aXJ0dWFsQ291bnR8fHUraT49Zi10aGlzLl9zY3JvbGxPZmZzZXQpYnJlYWs7by5wdXNoKHQpLHU9dStpLHQ9KHQrMSklY31lbHNle2lmKHMtby5sZW5ndGg8PTB8fHUrdGhpcy5fcGh5c2ljYWxTaXplLWk8PXApYnJlYWs7by5wdXNoKHQpLHU9dS1pLHQ9dD09PTA/Yy0xOnQtMX1yZXR1cm57aW5kZXhlczpvLHBoeXNpY2FsVG9wOnUtdGhpcy5fc2Nyb2xsT2Zmc2V0fX0sX3VwZGF0ZTpmdW5jdGlvbihlLHQpe2lmKCEoZSYmZS5sZW5ndGg9PT0wfHx0aGlzLl9waHlzaWNhbENvdW50PT09MCkpe2lmKHRoaXMuX21hbmFnZUZvY3VzKCksdGhpcy5fYXNzaWduTW9kZWxzKGUpLHRoaXMuX3VwZGF0ZU1ldHJpY3MoZSksdClmb3IoO3QubGVuZ3RoOyl7dmFyIHI9dC5wb3AoKTt0aGlzLl9waHlzaWNhbFRvcC09dGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KHIpfXRoaXMuX3Bvc2l0aW9uSXRlbXMoKSx0aGlzLl91cGRhdGVTY3JvbGxlclNpemUoKX19LF9jcmVhdGVQb29sOmZ1bmN0aW9uKGUpe3RoaXMuX2Vuc3VyZVRlbXBsYXRpemVkKCk7dmFyIHQscixuPW5ldyBBcnJheShlKTtmb3IodD0wO3Q8ZTt0Kyspcj10aGlzLnN0YW1wKG51bGwpLG5bdF09ci5yb290LnF1ZXJ5U2VsZWN0b3IoIioiKSx0aGlzLl9pdGVtc1BhcmVudC5hcHBlbmRDaGlsZChyLnJvb3QpO3JldHVybiBufSxfaXNDbGllbnRGdWxsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Njcm9sbEJvdHRvbSE9MCYmdGhpcy5fcGh5c2ljYWxCb3R0b20tMT49dGhpcy5fc2Nyb2xsQm90dG9tJiZ0aGlzLl9waHlzaWNhbFRvcDw9dGhpcy5fc2Nyb2xsUG9zaXRpb259LF9pbmNyZWFzZVBvb2xJZk5lZWRlZDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9jbGFtcCh0aGlzLl9waHlzaWNhbENvdW50K2UsYTB0LHRoaXMuX3ZpcnR1YWxDb3VudC10aGlzLl92aXJ0dWFsU3RhcnQpO2lmKHQ9dGhpcy5fY29udmVydEluZGV4VG9Db21wbGV0ZVJvdyh0KSx0aGlzLmdyaWQpe3ZhciByPXQldGhpcy5faXRlbXNQZXJSb3c7ciYmdC1yPD10aGlzLl9waHlzaWNhbENvdW50JiYodCs9dGhpcy5faXRlbXNQZXJSb3cpLHQtPXJ9dmFyIG49dC10aGlzLl9waHlzaWNhbENvdW50LGk9TWF0aC5yb3VuZCh0aGlzLl9waHlzaWNhbENvdW50Ki41KTtpZighKG48MCkpe2lmKG4+MCl7dmFyIG89d2luZG93LnBlcmZvcm1hbmNlLm5vdygpO1tdLnB1c2guYXBwbHkodGhpcy5fcGh5c2ljYWxJdGVtcyx0aGlzLl9jcmVhdGVQb29sKG4pKTtmb3IodmFyIGE9MDthPG47YSsrKXRoaXMuX3BoeXNpY2FsU2l6ZXMucHVzaCgwKTt0aGlzLl9waHlzaWNhbENvdW50PXRoaXMuX3BoeXNpY2FsQ291bnQrbix0aGlzLl9waHlzaWNhbFN0YXJ0PnRoaXMuX3BoeXNpY2FsRW5kJiZ0aGlzLl9pc0luZGV4UmVuZGVyZWQodGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCkmJnRoaXMuX2dldFBoeXNpY2FsSW5kZXgodGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCk8dGhpcy5fcGh5c2ljYWxFbmQmJih0aGlzLl9waHlzaWNhbFN0YXJ0PXRoaXMuX3BoeXNpY2FsU3RhcnQrbiksdGhpcy5fdXBkYXRlKCksdGhpcy5fdGVtcGxhdGVDb3N0PSh3aW5kb3cucGVyZm9ybWFuY2Uubm93KCktbykvbixpPU1hdGgucm91bmQodGhpcy5fcGh5c2ljYWxDb3VudCouNSl9dGhpcy5fdmlydHVhbEVuZD49dGhpcy5fdmlydHVhbENvdW50LTF8fGk9PT0wfHwodGhpcy5faXNDbGllbnRGdWxsKCk/dGhpcy5fcGh5c2ljYWxTaXplPHRoaXMuX29wdFBoeXNpY2FsU2l6ZSYmdGhpcy5fZGVib3VuY2UoIl9pbmNyZWFzZVBvb2xJZk5lZWRlZCIsdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQuYmluZCh0aGlzLHRoaXMuX2NsYW1wKE1hdGgucm91bmQoNTAvdGhpcy5fdGVtcGxhdGVDb3N0KSwxLGkpKSxreCk6dGhpcy5fZGVib3VuY2UoIl9pbmNyZWFzZVBvb2xJZk5lZWRlZCIsdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQuYmluZCh0aGlzLGkpLGxpKSl9fSxfcmVuZGVyOmZ1bmN0aW9uKCl7aWYoISghdGhpcy5pc0F0dGFjaGVkfHwhdGhpcy5faXNWaXNpYmxlKSlpZih0aGlzLl9waHlzaWNhbENvdW50IT09MCl7dmFyIGU9dGhpcy5fZ2V0UmV1c2FibGVzKCEwKTt0aGlzLl9waHlzaWNhbFRvcD1lLnBoeXNpY2FsVG9wLHRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQrZS5pbmRleGVzLmxlbmd0aCx0aGlzLl9waHlzaWNhbFN0YXJ0PXRoaXMuX3BoeXNpY2FsU3RhcnQrZS5pbmRleGVzLmxlbmd0aCx0aGlzLl91cGRhdGUoZS5pbmRleGVzKSx0aGlzLl91cGRhdGUoKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZCgwKX1lbHNlIHRoaXMuX3ZpcnR1YWxDb3VudD4wJiYodGhpcy51cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXMoKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZChhMHQpKX0sX2Vuc3VyZVRlbXBsYXRpemVkOmZ1bmN0aW9uKCl7aWYoIXRoaXMuY3Rvcil7dGhpcy5fdXNlclRlbXBsYXRlPXRoaXMucXVlcnlFZmZlY3RpdmVDaGlsZHJlbigidGVtcGxhdGUiKSx0aGlzLl91c2VyVGVtcGxhdGV8fGNvbnNvbGUud2FybigiaXJvbi1saXN0IHJlcXVpcmVzIGEgdGVtcGxhdGUgdG8gYmUgcHJvdmlkZWQgaW4gbGlnaHQtZG9tIik7dmFyIGU9e307ZS5fX2tleV9fPSEwLGVbdGhpcy5hc109ITAsZVt0aGlzLmluZGV4QXNdPSEwLGVbdGhpcy5zZWxlY3RlZEFzXT0hMCxlLnRhYkluZGV4PSEwLHRoaXMuX2luc3RhbmNlUHJvcHM9ZSx0aGlzLnRlbXBsYXRpemUodGhpcy5fdXNlclRlbXBsYXRlLHRoaXMubXV0YWJsZURhdGEpfX0sX2dyaWRDaGFuZ2VkOmZ1bmN0aW9uKGUsdCl7dHlwZW9mIHQhPSJ1bmRlZmluZWQiJiYodGhpcy5ub3RpZnlSZXNpemUoKSxjaSgpLGUmJnRoaXMuX3VwZGF0ZUdyaWRNZXRyaWNzKCkpfSxfaXRlbXNDaGFuZ2VkOmZ1bmN0aW9uKGUpe2lmKGUucGF0aD09PSJpdGVtcyIpdGhpcy5fdmlydHVhbFN0YXJ0PTAsdGhpcy5fcGh5c2ljYWxUb3A9MCx0aGlzLl92aXJ0dWFsQ291bnQ9dGhpcy5pdGVtcz90aGlzLml0ZW1zLmxlbmd0aDowLHRoaXMuX3BoeXNpY2FsSW5kZXhGb3JLZXk9e30sdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fcGh5c2ljYWxDb3VudD10aGlzLl9waHlzaWNhbENvdW50fHwwLHRoaXMuX3BoeXNpY2FsSXRlbXM9dGhpcy5fcGh5c2ljYWxJdGVtc3x8W10sdGhpcy5fcGh5c2ljYWxTaXplcz10aGlzLl9waHlzaWNhbFNpemVzfHxbXSx0aGlzLl9waHlzaWNhbFN0YXJ0PTAsdGhpcy5fc2Nyb2xsVG9wPnRoaXMuX3Njcm9sbE9mZnNldCYmdGhpcy5fcmVzZXRTY3JvbGxQb3NpdGlvbigwKSx0aGlzLl9yZW1vdmVGb2N1c2VkSXRlbSgpLHRoaXMuX2RlYm91bmNlKCJfcmVuZGVyIix0aGlzLl9yZW5kZXIsTmkpO2Vsc2UgaWYoZS5wYXRoPT09Iml0ZW1zLnNwbGljZXMiKXt0aGlzLl9hZGp1c3RWaXJ0dWFsSW5kZXgoZS52YWx1ZS5pbmRleFNwbGljZXMpLHRoaXMuX3ZpcnR1YWxDb3VudD10aGlzLml0ZW1zP3RoaXMuaXRlbXMubGVuZ3RoOjA7dmFyIHQ9ZS52YWx1ZS5pbmRleFNwbGljZXMuc29tZShmdW5jdGlvbihpKXtyZXR1cm4gaS5hZGRlZENvdW50PjB8fGkucmVtb3ZlZC5sZW5ndGg+MH0pO2lmKHQpe3ZhciByPXRoaXMuX2dldEFjdGl2ZUVsZW1lbnQoKTt0aGlzLmNvbnRhaW5zKHIpJiZyLmJsdXIoKX12YXIgbj1lLnZhbHVlLmluZGV4U3BsaWNlcy5zb21lKGZ1bmN0aW9uKGkpe3JldHVybiBpLmluZGV4K2kuYWRkZWRDb3VudD49dGhpcy5fdmlydHVhbFN0YXJ0JiZpLmluZGV4PD10aGlzLl92aXJ0dWFsRW5kfSx0aGlzKTsoIXRoaXMuX2lzQ2xpZW50RnVsbCgpfHxuKSYmdGhpcy5fZGVib3VuY2UoIl9yZW5kZXIiLHRoaXMuX3JlbmRlcixOaSl9ZWxzZSBlLnBhdGghPT0iaXRlbXMubGVuZ3RoIiYmdGhpcy5fZm9yd2FyZEl0ZW1QYXRoKGUucGF0aCxlLnZhbHVlKX0sX2ZvcndhcmRJdGVtUGF0aDpmdW5jdGlvbihlLHQpe2U9ZS5zbGljZSg2KTt2YXIgcj1lLmluZGV4T2YoIi4iKTtyPT09LTEmJihyPWUubGVuZ3RoKTt2YXIgbixpLG8sYT10aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSkscz1wYXJzZUludChlLnN1YnN0cmluZygwLHIpLDEwKTtuPXRoaXMuX2lzSW5kZXhSZW5kZXJlZChzKSxuPyhpPXRoaXMuX2dldFBoeXNpY2FsSW5kZXgocyksbz10aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9waHlzaWNhbEl0ZW1zW2ldKSk6YSYmKG89YSksISghb3x8b1t0aGlzLmluZGV4QXNdIT09cykmJihlPWUuc3Vic3RyaW5nKHIrMSksZT10aGlzLmFzKyhlPyIuIitlOiIiKSxvLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoZSx0LCExLCEwKSxvLl9mbHVzaFByb3BlcnRpZXMmJm8uX2ZsdXNoUHJvcGVydGllcygpLG4mJih0aGlzLl91cGRhdGVNZXRyaWNzKFtpXSksdGhpcy5fcG9zaXRpb25JdGVtcygpLHRoaXMuX3VwZGF0ZVNjcm9sbGVyU2l6ZSgpKSl9LF9hZGp1c3RWaXJ0dWFsSW5kZXg6ZnVuY3Rpb24oZSl7ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKHQucmVtb3ZlZC5mb3JFYWNoKHRoaXMuX3JlbW92ZUl0ZW0sdGhpcyksdC5pbmRleDx0aGlzLl92aXJ0dWFsU3RhcnQpe3ZhciByPU1hdGgubWF4KHQuYWRkZWRDb3VudC10LnJlbW92ZWQubGVuZ3RoLHQuaW5kZXgtdGhpcy5fdmlydHVhbFN0YXJ0KTt0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0K3IsdGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleD49MCYmKHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9dGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCtyKX19LHRoaXMpfSxfcmVtb3ZlSXRlbTpmdW5jdGlvbihlKXt0aGlzLiQuc2VsZWN0b3IuZGVzZWxlY3QoZSksdGhpcy5fZm9jdXNlZEl0ZW0mJnRoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX2ZvY3VzZWRJdGVtKVt0aGlzLmFzXT09PWUmJnRoaXMuX3JlbW92ZUZvY3VzZWRJdGVtKCl9LF9pdGVyYXRlSXRlbXM6ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGksbztpZihhcmd1bWVudHMubGVuZ3RoPT09MiYmdCl7Zm9yKG89MDtvPHQubGVuZ3RoO28rKylpZihyPXRbb10sbj10aGlzLl9jb21wdXRlVmlkeChyKSwoaT1lLmNhbGwodGhpcyxyLG4pKSE9bnVsbClyZXR1cm4gaX1lbHNle2ZvcihyPXRoaXMuX3BoeXNpY2FsU3RhcnQsbj10aGlzLl92aXJ0dWFsU3RhcnQ7cjx0aGlzLl9waHlzaWNhbENvdW50O3IrKyxuKyspaWYoKGk9ZS5jYWxsKHRoaXMscixuKSkhPW51bGwpcmV0dXJuIGk7Zm9yKHI9MDtyPHRoaXMuX3BoeXNpY2FsU3RhcnQ7cisrLG4rKylpZigoaT1lLmNhbGwodGhpcyxyLG4pKSE9bnVsbClyZXR1cm4gaX19LF9jb21wdXRlVmlkeDpmdW5jdGlvbihlKXtyZXR1cm4gZT49dGhpcy5fcGh5c2ljYWxTdGFydD90aGlzLl92aXJ0dWFsU3RhcnQrKGUtdGhpcy5fcGh5c2ljYWxTdGFydCk6dGhpcy5fdmlydHVhbFN0YXJ0Kyh0aGlzLl9waHlzaWNhbENvdW50LXRoaXMuX3BoeXNpY2FsU3RhcnQpK2V9LF9hc3NpZ25Nb2RlbHM6ZnVuY3Rpb24oZSl7dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKHQscil7dmFyIG49dGhpcy5fcGh5c2ljYWxJdGVtc1t0XSxpPXRoaXMuaXRlbXMmJnRoaXMuaXRlbXNbcl07aWYoaSE9bnVsbCl7dmFyIG89dGhpcy5tb2RlbEZvckVsZW1lbnQobik7by5fX2tleV9fPW51bGwsdGhpcy5fZm9yd2FyZFByb3BlcnR5KG8sdGhpcy5hcyxpKSx0aGlzLl9mb3J3YXJkUHJvcGVydHkobyx0aGlzLnNlbGVjdGVkQXMsdGhpcy4kLnNlbGVjdG9yLmlzU2VsZWN0ZWQoaSkpLHRoaXMuX2ZvcndhcmRQcm9wZXJ0eShvLHRoaXMuaW5kZXhBcyxyKSx0aGlzLl9mb3J3YXJkUHJvcGVydHkobywidGFiSW5kZXgiLHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9PT1yPzA6LTEpLHRoaXMuX3BoeXNpY2FsSW5kZXhGb3JLZXlbby5fX2tleV9fXT10LG8uX2ZsdXNoUHJvcGVydGllcyYmby5fZmx1c2hQcm9wZXJ0aWVzKCEwKSxuLnJlbW92ZUF0dHJpYnV0ZSgiaGlkZGVuIil9ZWxzZSBuLnNldEF0dHJpYnV0ZSgiaGlkZGVuIiwiIil9LGUpfSxfdXBkYXRlTWV0cmljczpmdW5jdGlvbihlKXtjaSgpO3ZhciB0PTAscj0wLG49dGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQsaT10aGlzLl9waHlzaWNhbEF2ZXJhZ2U7dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKG8sYSl7cis9dGhpcy5fcGh5c2ljYWxTaXplc1tvXSx0aGlzLl9waHlzaWNhbFNpemVzW29dPXRoaXMuX3BoeXNpY2FsSXRlbXNbb10ub2Zmc2V0SGVpZ2h0LHQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbb10sdGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbb10/MTowfSxlKSx0aGlzLmdyaWQ/KHRoaXMuX3VwZGF0ZUdyaWRNZXRyaWNzKCksdGhpcy5fcGh5c2ljYWxTaXplPU1hdGguY2VpbCh0aGlzLl9waHlzaWNhbENvdW50L3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9yb3dIZWlnaHQpOihyPXRoaXMuX2l0ZW1zUGVyUm93PT09MT9yOk1hdGguY2VpbCh0aGlzLl9waHlzaWNhbENvdW50L3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9yb3dIZWlnaHQsdGhpcy5fcGh5c2ljYWxTaXplPXRoaXMuX3BoeXNpY2FsU2l6ZSt0LXIsdGhpcy5faXRlbXNQZXJSb3c9MSksdGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQhPT1uJiYodGhpcy5fcGh5c2ljYWxBdmVyYWdlPU1hdGgucm91bmQoKGkqbit0KS90aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCkpfSxfdXBkYXRlR3JpZE1ldHJpY3M6ZnVuY3Rpb24oKXt0aGlzLl9pdGVtV2lkdGg9dGhpcy5fcGh5c2ljYWxDb3VudD4wP3RoaXMuX3BoeXNpY2FsSXRlbXNbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg6MjAwLHRoaXMuX3Jvd0hlaWdodD10aGlzLl9waHlzaWNhbENvdW50PjA/dGhpcy5fcGh5c2ljYWxJdGVtc1swXS5vZmZzZXRIZWlnaHQ6MjAwLHRoaXMuX2l0ZW1zUGVyUm93PXRoaXMuX2l0ZW1XaWR0aD9NYXRoLmZsb29yKHRoaXMuX3ZpZXdwb3J0V2lkdGgvdGhpcy5faXRlbVdpZHRoKTp0aGlzLl9pdGVtc1BlclJvd30sX3Bvc2l0aW9uSXRlbXM6ZnVuY3Rpb24oKXt0aGlzLl9hZGp1c3RTY3JvbGxQb3NpdGlvbigpO3ZhciBlPXRoaXMuX3BoeXNpY2FsVG9wO2lmKHRoaXMuZ3JpZCl7dmFyIHQ9dGhpcy5faXRlbXNQZXJSb3cqdGhpcy5faXRlbVdpZHRoLHI9KHRoaXMuX3ZpZXdwb3J0V2lkdGgtdCkvMjt0aGlzLl9pdGVyYXRlSXRlbXMoZnVuY3Rpb24obixpKXt2YXIgbz1pJXRoaXMuX2l0ZW1zUGVyUm93LGE9TWF0aC5mbG9vcihvKnRoaXMuX2l0ZW1XaWR0aCtyKTt0aGlzLl9pc1JUTCYmKGE9YSotMSksdGhpcy50cmFuc2xhdGUzZChhKyJweCIsZSsicHgiLDAsdGhpcy5fcGh5c2ljYWxJdGVtc1tuXSksdGhpcy5fc2hvdWxkUmVuZGVyTmV4dFJvdyhpKSYmKGUrPXRoaXMuX3Jvd0hlaWdodCl9KX1lbHNle2xldCBuPVtdO3RoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihpLG8pe2xldCBhPXRoaXMuX3BoeXNpY2FsSXRlbXNbaV07dGhpcy50cmFuc2xhdGUzZCgwLGUrInB4IiwwLGEpLGUrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbaV07bGV0IHM9YS5pZDtzJiZuLnB1c2gocyl9KSxuLmxlbmd0aCYmdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtb3ducyIsbi5qb2luKCIgIikpfX0sX2dldFBoeXNpY2FsU2l6ZUluY3JlbWVudDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5ncmlkP3RoaXMuX2NvbXB1dGVWaWR4KGUpJXRoaXMuX2l0ZW1zUGVyUm93IT09dGhpcy5faXRlbXNQZXJSb3ctMT8wOnRoaXMuX3Jvd0hlaWdodDp0aGlzLl9waHlzaWNhbFNpemVzW2VdfSxfc2hvdWxkUmVuZGVyTmV4dFJvdzpmdW5jdGlvbihlKXtyZXR1cm4gZSV0aGlzLl9pdGVtc1BlclJvdz09PXRoaXMuX2l0ZW1zUGVyUm93LTF9LF9hZGp1c3RTY3JvbGxQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3ZpcnR1YWxTdGFydD09PTA/dGhpcy5fcGh5c2ljYWxUb3A6TWF0aC5taW4odGhpcy5fc2Nyb2xsUG9zaXRpb24rdGhpcy5fcGh5c2ljYWxUb3AsMCk7aWYoZSE9PTApe3RoaXMuX3BoeXNpY2FsVG9wPXRoaXMuX3BoeXNpY2FsVG9wLWU7dmFyIHQ9dGhpcy5fc2Nyb2xsUG9zaXRpb247IUliZSYmdD4wJiZ0aGlzLl9yZXNldFNjcm9sbFBvc2l0aW9uKHQtZSl9fSxfcmVzZXRTY3JvbGxQb3NpdGlvbjpmdW5jdGlvbihlKXt0aGlzLnNjcm9sbFRhcmdldCYmZT49MCYmKHRoaXMuX3Njcm9sbFRvcD1lLHRoaXMuX3Njcm9sbFBvc2l0aW9uPXRoaXMuX3Njcm9sbFRvcCl9LF91cGRhdGVTY3JvbGxlclNpemU6ZnVuY3Rpb24oZSl7dGhpcy5ncmlkP3RoaXMuX2VzdFNjcm9sbEhlaWdodD10aGlzLl92aXJ0dWFsUm93Q291bnQqdGhpcy5fcm93SGVpZ2h0OnRoaXMuX2VzdFNjcm9sbEhlaWdodD10aGlzLl9waHlzaWNhbEJvdHRvbStNYXRoLm1heCh0aGlzLl92aXJ0dWFsQ291bnQtdGhpcy5fcGh5c2ljYWxDb3VudC10aGlzLl92aXJ0dWFsU3RhcnQsMCkqdGhpcy5fcGh5c2ljYWxBdmVyYWdlLGU9ZXx8dGhpcy5fc2Nyb2xsSGVpZ2h0PT09MCxlPWV8fHRoaXMuX3Njcm9sbFBvc2l0aW9uPj10aGlzLl9lc3RTY3JvbGxIZWlnaHQtdGhpcy5fcGh5c2ljYWxTaXplLGU9ZXx8dGhpcy5ncmlkJiZ0aGlzLiQuaXRlbXMuc3R5bGUuaGVpZ2h0PHRoaXMuX2VzdFNjcm9sbEhlaWdodCwoZXx8TWF0aC5hYnModGhpcy5fZXN0U2Nyb2xsSGVpZ2h0LXRoaXMuX3Njcm9sbEhlaWdodCk+PXRoaXMuX3ZpZXdwb3J0SGVpZ2h0KSYmKHRoaXMuJC5pdGVtcy5zdHlsZS5oZWlnaHQ9dGhpcy5fZXN0U2Nyb2xsSGVpZ2h0KyJweCIsdGhpcy5fc2Nyb2xsSGVpZ2h0PXRoaXMuX2VzdFNjcm9sbEhlaWdodCl9LHNjcm9sbFRvSXRlbTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zY3JvbGxUb0luZGV4KHRoaXMuaXRlbXMuaW5kZXhPZihlKSl9LHNjcm9sbFRvSW5kZXg6ZnVuY3Rpb24oZSl7aWYoISh0eXBlb2YgZSE9Im51bWJlciJ8fGU8MHx8ZT50aGlzLml0ZW1zLmxlbmd0aC0xKSYmKGNpKCksdGhpcy5fcGh5c2ljYWxDb3VudCE9PTApKXtlPXRoaXMuX2NsYW1wKGUsMCx0aGlzLl92aXJ0dWFsQ291bnQtMSksKCF0aGlzLl9pc0luZGV4UmVuZGVyZWQoZSl8fGU+PXRoaXMuX21heFZpcnR1YWxTdGFydCkmJih0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5ncmlkP2UtdGhpcy5faXRlbXNQZXJSb3cqMjplLTEpLHRoaXMuX21hbmFnZUZvY3VzKCksdGhpcy5fYXNzaWduTW9kZWxzKCksdGhpcy5fdXBkYXRlTWV0cmljcygpLHRoaXMuX3BoeXNpY2FsVG9wPU1hdGguZmxvb3IodGhpcy5fdmlydHVhbFN0YXJ0L3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9waHlzaWNhbEF2ZXJhZ2U7Zm9yKHZhciB0PXRoaXMuX3BoeXNpY2FsU3RhcnQscj10aGlzLl92aXJ0dWFsU3RhcnQsbj0wLGk9dGhpcy5faGlkZGVuQ29udGVudFNpemU7cjxlJiZuPD1pOyluPW4rdGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KHQpLHQ9KHQrMSkldGhpcy5fcGh5c2ljYWxDb3VudCxyKys7dGhpcy5fdXBkYXRlU2Nyb2xsZXJTaXplKCEwKSx0aGlzLl9wb3NpdGlvbkl0ZW1zKCksdGhpcy5fcmVzZXRTY3JvbGxQb3NpdGlvbih0aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9zY3JvbGxPZmZzZXQrbiksdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQoMCksdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGx9fSxfcmVzZXRBdmVyYWdlOmZ1bmN0aW9uKCl7dGhpcy5fcGh5c2ljYWxBdmVyYWdlPTAsdGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQ9MH0sX3Jlc2l6ZUhhbmRsZXI6ZnVuY3Rpb24oKXt0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsZnVuY3Rpb24oKXt0aGlzLl9maXJzdFZpc2libGVJbmRleFZhbD1udWxsLHRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9pc1Zpc2libGU/KHRoaXMudXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzKCksdGhpcy50b2dnbGVTY3JvbGxMaXN0ZW5lcighMCksdGhpcy5fcmVzZXRBdmVyYWdlKCksdGhpcy5fcmVuZGVyKCkpOnRoaXMudG9nZ2xlU2Nyb2xsTGlzdGVuZXIoITEpfSxOaSl9LHNlbGVjdEl0ZW06ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc2VsZWN0SW5kZXgodGhpcy5pdGVtcy5pbmRleE9mKGUpKX0sc2VsZWN0SW5kZXg6ZnVuY3Rpb24oZSl7aWYoIShlPDB8fGU+PXRoaXMuX3ZpcnR1YWxDb3VudCkpe2lmKCF0aGlzLm11bHRpU2VsZWN0aW9uJiZ0aGlzLnNlbGVjdGVkSXRlbSYmdGhpcy5jbGVhclNlbGVjdGlvbigpLHRoaXMuX2lzSW5kZXhSZW5kZXJlZChlKSl7dmFyIHQ9dGhpcy5tb2RlbEZvckVsZW1lbnQodGhpcy5fcGh5c2ljYWxJdGVtc1t0aGlzLl9nZXRQaHlzaWNhbEluZGV4KGUpXSk7dCYmKHRbdGhpcy5zZWxlY3RlZEFzXT0hMCksdGhpcy51cGRhdGVTaXplRm9ySW5kZXgoZSl9dGhpcy4kLnNlbGVjdG9yLnNlbGVjdEluZGV4KGUpfX0sZGVzZWxlY3RJdGVtOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmRlc2VsZWN0SW5kZXgodGhpcy5pdGVtcy5pbmRleE9mKGUpKX0sZGVzZWxlY3RJbmRleDpmdW5jdGlvbihlKXtpZighKGU8MHx8ZT49dGhpcy5fdmlydHVhbENvdW50KSl7aWYodGhpcy5faXNJbmRleFJlbmRlcmVkKGUpKXt2YXIgdD10aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9waHlzaWNhbEl0ZW1zW3RoaXMuX2dldFBoeXNpY2FsSW5kZXgoZSldKTt0W3RoaXMuc2VsZWN0ZWRBc109ITEsdGhpcy51cGRhdGVTaXplRm9ySW5kZXgoZSl9dGhpcy4kLnNlbGVjdG9yLmRlc2VsZWN0SW5kZXgoZSl9fSx0b2dnbGVTZWxlY3Rpb25Gb3JJdGVtOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRvZ2dsZVNlbGVjdGlvbkZvckluZGV4KHRoaXMuaXRlbXMuaW5kZXhPZihlKSl9LHRvZ2dsZVNlbGVjdGlvbkZvckluZGV4OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuJC5zZWxlY3Rvci5pc0luZGV4U2VsZWN0ZWQ/dGhpcy4kLnNlbGVjdG9yLmlzSW5kZXhTZWxlY3RlZChlKTp0aGlzLiQuc2VsZWN0b3IuaXNTZWxlY3RlZCh0aGlzLml0ZW1zW2VdKTt0P3RoaXMuZGVzZWxlY3RJbmRleChlKTp0aGlzLnNlbGVjdEluZGV4KGUpfSxjbGVhclNlbGVjdGlvbjpmdW5jdGlvbigpe3RoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihlLHQpe3RoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX3BoeXNpY2FsSXRlbXNbZV0pW3RoaXMuc2VsZWN0ZWRBc109ITF9KSx0aGlzLiQuc2VsZWN0b3IuY2xlYXJTZWxlY3Rpb24oKX0sX3NlbGVjdGlvbkVuYWJsZWRDaGFuZ2VkOmZ1bmN0aW9uKGUpe3ZhciB0PWU/dGhpcy5saXN0ZW46dGhpcy51bmxpc3Rlbjt0LmNhbGwodGhpcyx0aGlzLCJ0YXAiLCJfc2VsZWN0aW9uSGFuZGxlciIpfSxfc2VsZWN0aW9uSGFuZGxlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLm1vZGVsRm9yRWxlbWVudChlLnRhcmdldCk7aWYoISF0KXt2YXIgcixuLGk9enQoZSkucGF0aFswXSxvPXRoaXMuX2dldEFjdGl2ZUVsZW1lbnQoKSxhPXRoaXMuX3BoeXNpY2FsSXRlbXNbdGhpcy5fZ2V0UGh5c2ljYWxJbmRleCh0W3RoaXMuaW5kZXhBc10pXTtpLmxvY2FsTmFtZT09PSJpbnB1dCJ8fGkubG9jYWxOYW1lPT09ImJ1dHRvbiJ8fGkubG9jYWxOYW1lPT09InNlbGVjdCJ8fChyPXQudGFiSW5kZXgsdC50YWJJbmRleD1mRSxuPW8/by50YWJJbmRleDotMSx0LnRhYkluZGV4PXIsIShvJiZhIT09byYmYS5jb250YWlucyhvKSYmbiE9PWZFKSYmdGhpcy50b2dnbGVTZWxlY3Rpb25Gb3JJdGVtKHRbdGhpcy5hc10pKX19LF9tdWx0aVNlbGVjdGlvbkNoYW5nZWQ6ZnVuY3Rpb24oZSl7dGhpcy5jbGVhclNlbGVjdGlvbigpLHRoaXMuJC5zZWxlY3Rvci5tdWx0aT1lfSx1cGRhdGVTaXplRm9ySXRlbTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy51cGRhdGVTaXplRm9ySW5kZXgodGhpcy5pdGVtcy5pbmRleE9mKGUpKX0sdXBkYXRlU2l6ZUZvckluZGV4OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pc0luZGV4UmVuZGVyZWQoZSkmJih0aGlzLl91cGRhdGVNZXRyaWNzKFt0aGlzLl9nZXRQaHlzaWNhbEluZGV4KGUpXSksdGhpcy5fcG9zaXRpb25JdGVtcygpKSxudWxsfSxfbWFuYWdlRm9jdXM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4O2U+PTAmJmU8dGhpcy5fdmlydHVhbENvdW50P3RoaXMuX2lzSW5kZXhSZW5kZXJlZChlKT90aGlzLl9yZXN0b3JlRm9jdXNlZEl0ZW0oKTp0aGlzLl9jcmVhdGVGb2N1c0JhY2tmaWxsSXRlbSgpOnRoaXMuX3ZpcnR1YWxDb3VudD4wJiZ0aGlzLl9waHlzaWNhbENvdW50PjAmJih0aGlzLl9mb2N1c2VkUGh5c2ljYWxJbmRleD10aGlzLl9waHlzaWNhbFN0YXJ0LHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9dGhpcy5fdmlydHVhbFN0YXJ0LHRoaXMuX2ZvY3VzZWRJdGVtPXRoaXMuX3BoeXNpY2FsSXRlbXNbdGhpcy5fcGh5c2ljYWxTdGFydF0pfSxfY29udmVydEluZGV4VG9Db21wbGV0ZVJvdzpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faXRlbXNQZXJSb3c9dGhpcy5faXRlbXNQZXJSb3d8fDEsdGhpcy5ncmlkP01hdGguY2VpbChlL3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9pdGVtc1BlclJvdzplfSxfaXNJbmRleFJlbmRlcmVkOmZ1bmN0aW9uKGUpe3JldHVybiBlPj10aGlzLl92aXJ0dWFsU3RhcnQmJmU8PXRoaXMuX3ZpcnR1YWxFbmR9LF9pc0luZGV4VmlzaWJsZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49dGhpcy5maXJzdFZpc2libGVJbmRleCYmZTw9dGhpcy5sYXN0VmlzaWJsZUluZGV4fSxfZ2V0UGh5c2ljYWxJbmRleDpmdW5jdGlvbihlKXtyZXR1cm4odGhpcy5fcGh5c2ljYWxTdGFydCsoZS10aGlzLl92aXJ0dWFsU3RhcnQpKSV0aGlzLl9waHlzaWNhbENvdW50fSxmb2N1c0l0ZW06ZnVuY3Rpb24oZSl7dGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0oZSl9LF9mb2N1c1BoeXNpY2FsSXRlbTpmdW5jdGlvbihlKXtpZighKGU8MHx8ZT49dGhpcy5fdmlydHVhbENvdW50KSl7dGhpcy5fcmVzdG9yZUZvY3VzZWRJdGVtKCksdGhpcy5faXNJbmRleFJlbmRlcmVkKGUpfHx0aGlzLnNjcm9sbFRvSW5kZXgoZSk7dmFyIHQ9dGhpcy5fcGh5c2ljYWxJdGVtc1t0aGlzLl9nZXRQaHlzaWNhbEluZGV4KGUpXSxyPXRoaXMubW9kZWxGb3JFbGVtZW50KHQpLG47ci50YWJJbmRleD1mRSx0LnRhYkluZGV4PT09ZkUmJihuPXQpLG58fChuPXp0KHQpLnF1ZXJ5U2VsZWN0b3IoJ1t0YWJpbmRleD0iJytmRSsnIl0nKSksci50YWJJbmRleD0wLHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9ZSxuJiZuLmZvY3VzKCl9fSxfcmVtb3ZlRm9jdXNlZEl0ZW06ZnVuY3Rpb24oKXt0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSYmdGhpcy5faXRlbXNQYXJlbnQucmVtb3ZlQ2hpbGQodGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0pLHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtPW51bGwsdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW09bnVsbCx0aGlzLl9mb2N1c2VkSXRlbT1udWxsLHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9LTEsdGhpcy5fZm9jdXNlZFBoeXNpY2FsSW5kZXg9LTF9LF9jcmVhdGVGb2N1c0JhY2tmaWxsSXRlbTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4O2lmKCEodGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW18fHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg8MCkpe2lmKCF0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbSl7dmFyIHQ9dGhpcy5zdGFtcChudWxsKTt0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbT10LnJvb3QucXVlcnlTZWxlY3RvcigiKiIpLHRoaXMuX2l0ZW1zUGFyZW50LmFwcGVuZENoaWxkKHQucm9vdCl9dGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW09dGhpcy5fcGh5c2ljYWxJdGVtc1tlXSx0aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSkudGFiSW5kZXg9MCx0aGlzLl9waHlzaWNhbEl0ZW1zW2VdPXRoaXMuX2ZvY3VzQmFja2ZpbGxJdGVtLHRoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4PWUsdGhpcy50cmFuc2xhdGUzZCgwLHMwdCwwLHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtKX19LF9yZXN0b3JlRm9jdXNlZEl0ZW06ZnVuY3Rpb24oKXtpZighKCF0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbXx8dGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleDwwKSl7dGhpcy5fYXNzaWduTW9kZWxzKCk7dmFyIGU9dGhpcy5fZm9jdXNlZFBoeXNpY2FsSW5kZXg9dGhpcy5fZ2V0UGh5c2ljYWxJbmRleCh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4KSx0PXRoaXMuX3BoeXNpY2FsSXRlbXNbZV07aWYoISF0KXt2YXIgcj10aGlzLm1vZGVsRm9yRWxlbWVudCh0KSxuPXRoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtKTtyW3RoaXMuYXNdPT09blt0aGlzLmFzXT8odGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW09dCxyLnRhYkluZGV4PS0xLHRoaXMuX3BoeXNpY2FsSXRlbXNbZV09dGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0sdGhpcy50cmFuc2xhdGUzZCgwLHMwdCwwLHRoaXMuX2ZvY3VzQmFja2ZpbGxJdGVtKSk6KHRoaXMuX3JlbW92ZUZvY3VzZWRJdGVtKCksdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW09bnVsbCksdGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW09bnVsbH19fSxfZGlkRm9jdXM6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5tb2RlbEZvckVsZW1lbnQoZS50YXJnZXQpLHI9dGhpcy5tb2RlbEZvckVsZW1lbnQodGhpcy5fZm9jdXNlZEl0ZW0pLG49dGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0hPT1udWxsLGk9dGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleDshdHx8KHI9PT10P3RoaXMuX2lzSW5kZXhWaXNpYmxlKGkpfHx0aGlzLnNjcm9sbFRvSW5kZXgoaSk6KHRoaXMuX3Jlc3RvcmVGb2N1c2VkSXRlbSgpLHImJihyLnRhYkluZGV4PS0xKSx0LnRhYkluZGV4PTAsaT10W3RoaXMuaW5kZXhBc10sdGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleD1pLHRoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4PXRoaXMuX2dldFBoeXNpY2FsSW5kZXgoaSksdGhpcy5fZm9jdXNlZEl0ZW09dGhpcy5fcGh5c2ljYWxJdGVtc1t0aGlzLl9mb2N1c2VkUGh5c2ljYWxJbmRleF0sbiYmIXRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtJiZ0aGlzLl91cGRhdGUoKSkpfSxfa2V5ZG93bkhhbmRsZXI6ZnVuY3Rpb24oZSl7c3dpdGNoKGUua2V5Q29kZSl7Y2FzZSA0MDp0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4PHRoaXMuX3ZpcnR1YWxDb3VudC0xJiZlLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCsodGhpcy5ncmlkP3RoaXMuX2l0ZW1zUGVyUm93OjEpKTticmVhaztjYXNlIDM5OnRoaXMuZ3JpZCYmdGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCsodGhpcy5faXNSVEw/LTE6MSkpO2JyZWFrO2Nhc2UgMzg6dGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleD4wJiZlLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleC0odGhpcy5ncmlkP3RoaXMuX2l0ZW1zUGVyUm93OjEpKTticmVhaztjYXNlIDM3OnRoaXMuZ3JpZCYmdGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCsodGhpcy5faXNSVEw/MTotMSkpO2JyZWFrO2Nhc2UgMTM6dGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCksdGhpcy5zZWxlY3Rpb25FbmFibGVkJiZ0aGlzLl9zZWxlY3Rpb25IYW5kbGVyKGUpO2JyZWFrfX0sX2NsYW1wOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gTWF0aC5taW4ocixNYXRoLm1heCh0LGUpKX0sX2RlYm91bmNlOmZ1bmN0aW9uKGUsdCxyKXt0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9LHRoaXMuX2RlYm91bmNlcnNbZV09c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2Vyc1tlXSxyLHQuYmluZCh0aGlzKSksSmwodGhpcy5fZGVib3VuY2Vyc1tlXSl9LF9mb3J3YXJkUHJvcGVydHk6ZnVuY3Rpb24oZSx0LHIpe2UuX3NldFBlbmRpbmdQcm9wZXJ0eSh0LHIpfSxfZm9yd2FyZEhvc3RQcm9wVjI6ZnVuY3Rpb24oZSx0KXsodGhpcy5fcGh5c2ljYWxJdGVtc3x8W10pLmNvbmNhdChbdGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0sdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW1dKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ImJnRoaXMubW9kZWxGb3JFbGVtZW50KHIpLmZvcndhcmRIb3N0UHJvcChlLHQpfSx0aGlzKX0sX25vdGlmeUluc3RhbmNlUHJvcFYyOmZ1bmN0aW9uKGUsdCxyKXtpZihPSSh0aGlzLmFzLHQpKXt2YXIgbj1lW3RoaXMuaW5kZXhBc107dD09dGhpcy5hcyYmKHRoaXMuaXRlbXNbbl09ciksdGhpcy5ub3RpZnlQYXRoKG1wKHRoaXMuYXMsIml0ZW1zLiIrbix0KSxyKX19LF9nZXRTdGFtcGVkQ2hpbGRyZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGh5c2ljYWxJdGVtc30sX2ZvcndhcmRJbnN0YW5jZVBhdGg6ZnVuY3Rpb24oZSx0LHIpe3QuaW5kZXhPZih0aGlzLmFzKyIuIik9PT0wJiZ0aGlzLm5vdGlmeVBhdGgoIml0ZW1zLiIrZS5fX2tleV9fKyIuIit0LnNsaWNlKHRoaXMuYXMubGVuZ3RoKzEpLHIpfSxfZm9yd2FyZFBhcmVudFBhdGg6ZnVuY3Rpb24oZSx0KXsodGhpcy5fcGh5c2ljYWxJdGVtc3x8W10pLmNvbmNhdChbdGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0sdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW1dKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ImJnRoaXMubW9kZWxGb3JFbGVtZW50KHIpLm5vdGlmeVBhdGgoZSx0KX0sdGhpcyl9LF9mb3J3YXJkUGFyZW50UHJvcDpmdW5jdGlvbihlLHQpeyh0aGlzLl9waHlzaWNhbEl0ZW1zfHxbXSkuY29uY2F0KFt0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSx0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbV0pLmZvckVhY2goZnVuY3Rpb24ocil7ciYmKHRoaXMubW9kZWxGb3JFbGVtZW50KHIpW2VdPXQpfSx0aGlzKX0sX2dldEFjdGl2ZUVsZW1lbnQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9pdGVtc1BhcmVudC5ub2RlLmRvbUhvc3Q7cmV0dXJuIHp0KGU/ZS5yb290OmRvY3VtZW50KS5hY3RpdmVFbGVtZW50fX0pO3ZhciB4OT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnNlbGVjdGlvbj1bXSx0aGlzLnNlbGVjdENhbGxiYWNrPXR9Z2V0KCl7cmV0dXJuIHRoaXMubXVsdGk/dGhpcy5zZWxlY3Rpb24uc2xpY2UoKTp0aGlzLnNlbGVjdGlvblswXX1jbGVhcih0KXt0aGlzLnNlbGVjdGlvbi5zbGljZSgpLmZvckVhY2goZnVuY3Rpb24ocil7KCF0fHx0LmluZGV4T2Yocik8MCkmJnRoaXMuc2V0SXRlbVNlbGVjdGVkKHIsITEpfSx0aGlzKX1pc1NlbGVjdGVkKHQpe3JldHVybiB0aGlzLnNlbGVjdGlvbi5pbmRleE9mKHQpPj0wfXNldEl0ZW1TZWxlY3RlZCh0LHIpe2lmKHQhPW51bGwmJnIhPT10aGlzLmlzU2VsZWN0ZWQodCkpe2lmKHIpdGhpcy5zZWxlY3Rpb24ucHVzaCh0KTtlbHNle3ZhciBuPXRoaXMuc2VsZWN0aW9uLmluZGV4T2YodCk7bj49MCYmdGhpcy5zZWxlY3Rpb24uc3BsaWNlKG4sMSl9dGhpcy5zZWxlY3RDYWxsYmFjayYmdGhpcy5zZWxlY3RDYWxsYmFjayh0LHIpfX1zZWxlY3QodCl7dGhpcy5tdWx0aT90aGlzLnRvZ2dsZSh0KTp0aGlzLmdldCgpIT09dCYmKHRoaXMuc2V0SXRlbVNlbGVjdGVkKHRoaXMuZ2V0KCksITEpLHRoaXMuc2V0SXRlbVNlbGVjdGVkKHQsITApKX10b2dnbGUodCl7dGhpcy5zZXRJdGVtU2VsZWN0ZWQodCwhdGhpcy5pc1NlbGVjdGVkKHQpKX19O3ZhciBTaD17cHJvcGVydGllczp7YXR0ckZvclNlbGVjdGVkOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxzZWxlY3RlZDp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxzZWxlY3RlZEl0ZW06e3R5cGU6T2JqZWN0LHJlYWRPbmx5OiEwLG5vdGlmeTohMH0sYWN0aXZhdGVFdmVudDp7dHlwZTpTdHJpbmcsdmFsdWU6InRhcCIsb2JzZXJ2ZXI6Il9hY3RpdmF0ZUV2ZW50Q2hhbmdlZCJ9LHNlbGVjdGFibGU6U3RyaW5nLHNlbGVjdGVkQ2xhc3M6e3R5cGU6U3RyaW5nLHZhbHVlOiJpcm9uLXNlbGVjdGVkIn0sc2VsZWN0ZWRBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LGZhbGxiYWNrU2VsZWN0aW9uOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxpdGVtczp7dHlwZTpBcnJheSxyZWFkT25seTohMCxub3RpZnk6ITAsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LF9leGNsdWRlZExvY2FsTmFtZXM6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue3RlbXBsYXRlOjEsImRvbS1iaW5kIjoxLCJkb20taWYiOjEsImRvbS1yZXBlYXQiOjF9fX19LG9ic2VydmVyczpbIl91cGRhdGVBdHRyRm9yU2VsZWN0ZWQoYXR0ckZvclNlbGVjdGVkKSIsIl91cGRhdGVTZWxlY3RlZChzZWxlY3RlZCkiLCJfY2hlY2tGYWxsYmFjayhmYWxsYmFja1NlbGVjdGlvbikiXSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5fYmluZEZpbHRlckl0ZW09dGhpcy5fZmlsdGVySXRlbS5iaW5kKHRoaXMpLHRoaXMuX3NlbGVjdGlvbj1uZXcgeDkodGhpcy5fYXBwbHlTZWxlY3Rpb24uYmluZCh0aGlzKSl9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXI9dGhpcy5fb2JzZXJ2ZUl0ZW1zKHRoaXMpLHRoaXMuX2FkZExpc3RlbmVyKHRoaXMuYWN0aXZhdGVFdmVudCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXImJnp0KHRoaXMpLnVub2JzZXJ2ZU5vZGVzKHRoaXMuX29ic2VydmVyKSx0aGlzLl9yZW1vdmVMaXN0ZW5lcih0aGlzLmFjdGl2YXRlRXZlbnQpfSxpbmRleE9mOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLml0ZW1zP3RoaXMuaXRlbXMuaW5kZXhPZihlKTotMX0sc2VsZWN0OmZ1bmN0aW9uKGUpe3RoaXMuc2VsZWN0ZWQ9ZX0sc2VsZWN0UHJldmlvdXM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLml0ZW1zLmxlbmd0aCx0PWUtMTt0aGlzLnNlbGVjdGVkIT09dm9pZCAwJiYodD0oTnVtYmVyKHRoaXMuX3ZhbHVlVG9JbmRleCh0aGlzLnNlbGVjdGVkKSktMStlKSVlKSx0aGlzLnNlbGVjdGVkPXRoaXMuX2luZGV4VG9WYWx1ZSh0KX0sc2VsZWN0TmV4dDpmdW5jdGlvbigpe3ZhciBlPTA7dGhpcy5zZWxlY3RlZCE9PXZvaWQgMCYmKGU9KE51bWJlcih0aGlzLl92YWx1ZVRvSW5kZXgodGhpcy5zZWxlY3RlZCkpKzEpJXRoaXMuaXRlbXMubGVuZ3RoKSx0aGlzLnNlbGVjdGVkPXRoaXMuX2luZGV4VG9WYWx1ZShlKX0sc2VsZWN0SW5kZXg6ZnVuY3Rpb24oZSl7dGhpcy5zZWxlY3QodGhpcy5faW5kZXhUb1ZhbHVlKGUpKX0sZm9yY2VTeW5jaHJvbm91c0l0ZW1VcGRhdGU6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlciYmdHlwZW9mIHRoaXMuX29ic2VydmVyLmZsdXNoPT0iZnVuY3Rpb24iP3RoaXMuX29ic2VydmVyLmZsdXNoKCk6dGhpcy5fdXBkYXRlSXRlbXMoKX0sZ2V0IF9zaG91bGRVcGRhdGVTZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3RlZCE9bnVsbH0sX2NoZWNrRmFsbGJhY2s6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVTZWxlY3RlZCgpfSxfYWRkTGlzdGVuZXI6ZnVuY3Rpb24oZSl7dGhpcy5saXN0ZW4odGhpcyxlLCJfYWN0aXZhdGVIYW5kbGVyIil9LF9yZW1vdmVMaXN0ZW5lcjpmdW5jdGlvbihlKXt0aGlzLnVubGlzdGVuKHRoaXMsZSwiX2FjdGl2YXRlSGFuZGxlciIpfSxfYWN0aXZhdGVFdmVudENoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt0aGlzLl9yZW1vdmVMaXN0ZW5lcih0KSx0aGlzLl9hZGRMaXN0ZW5lcihlKX0sX3VwZGF0ZUl0ZW1zOmZ1bmN0aW9uKCl7dmFyIGU9enQodGhpcykucXVlcnlEaXN0cmlidXRlZEVsZW1lbnRzKHRoaXMuc2VsZWN0YWJsZXx8IioiKTtlPUFycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbChlLHRoaXMuX2JpbmRGaWx0ZXJJdGVtKSx0aGlzLl9zZXRJdGVtcyhlKX0sX3VwZGF0ZUF0dHJGb3JTZWxlY3RlZDpmdW5jdGlvbigpe3RoaXMuc2VsZWN0ZWRJdGVtJiYodGhpcy5zZWxlY3RlZD10aGlzLl92YWx1ZUZvckl0ZW0odGhpcy5zZWxlY3RlZEl0ZW0pKX0sX3VwZGF0ZVNlbGVjdGVkOmZ1bmN0aW9uKCl7dGhpcy5fc2VsZWN0U2VsZWN0ZWQodGhpcy5zZWxlY3RlZCl9LF9zZWxlY3RTZWxlY3RlZDpmdW5jdGlvbihlKXtpZighIXRoaXMuaXRlbXMpe3ZhciB0PXRoaXMuX3ZhbHVlVG9JdGVtKHRoaXMuc2VsZWN0ZWQpO3Q/dGhpcy5fc2VsZWN0aW9uLnNlbGVjdCh0KTp0aGlzLl9zZWxlY3Rpb24uY2xlYXIoKSx0aGlzLmZhbGxiYWNrU2VsZWN0aW9uJiZ0aGlzLml0ZW1zLmxlbmd0aCYmdGhpcy5fc2VsZWN0aW9uLmdldCgpPT09dm9pZCAwJiYodGhpcy5zZWxlY3RlZD10aGlzLmZhbGxiYWNrU2VsZWN0aW9uKX19LF9maWx0ZXJJdGVtOmZ1bmN0aW9uKGUpe3JldHVybiF0aGlzLl9leGNsdWRlZExvY2FsTmFtZXNbZS5sb2NhbE5hbWVdfSxfdmFsdWVUb0l0ZW06ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PW51bGw/bnVsbDp0aGlzLml0ZW1zW3RoaXMuX3ZhbHVlVG9JbmRleChlKV19LF92YWx1ZVRvSW5kZXg6ZnVuY3Rpb24oZSl7aWYodGhpcy5hdHRyRm9yU2VsZWN0ZWQpe2Zvcih2YXIgdD0wLHI7cj10aGlzLml0ZW1zW3RdO3QrKylpZih0aGlzLl92YWx1ZUZvckl0ZW0ocik9PWUpcmV0dXJuIHR9ZWxzZSByZXR1cm4gTnVtYmVyKGUpfSxfaW5kZXhUb1ZhbHVlOmZ1bmN0aW9uKGUpe2lmKHRoaXMuYXR0ckZvclNlbGVjdGVkKXt2YXIgdD10aGlzLml0ZW1zW2VdO2lmKHQpcmV0dXJuIHRoaXMuX3ZhbHVlRm9ySXRlbSh0KX1lbHNlIHJldHVybiBlfSxfdmFsdWVGb3JJdGVtOmZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiBudWxsO2lmKCF0aGlzLmF0dHJGb3JTZWxlY3RlZCl7dmFyIHQ9dGhpcy5pbmRleE9mKGUpO3JldHVybiB0PT09LTE/bnVsbDp0fXZhciByPWVbU20odGhpcy5hdHRyRm9yU2VsZWN0ZWQpXTtyZXR1cm4gciE9bnVsbD9yOmUuZ2V0QXR0cmlidXRlKHRoaXMuYXR0ckZvclNlbGVjdGVkKX0sX2FwcGx5U2VsZWN0aW9uOmZ1bmN0aW9uKGUsdCl7dGhpcy5zZWxlY3RlZENsYXNzJiZ0aGlzLnRvZ2dsZUNsYXNzKHRoaXMuc2VsZWN0ZWRDbGFzcyx0LGUpLHRoaXMuc2VsZWN0ZWRBdHRyaWJ1dGUmJnRoaXMudG9nZ2xlQXR0cmlidXRlKHRoaXMuc2VsZWN0ZWRBdHRyaWJ1dGUsdCxlKSx0aGlzLl9zZWxlY3Rpb25DaGFuZ2UoKSx0aGlzLmZpcmUoImlyb24tIisodD8ic2VsZWN0IjoiZGVzZWxlY3QiKSx7aXRlbTplfSl9LF9zZWxlY3Rpb25DaGFuZ2U6ZnVuY3Rpb24oKXt0aGlzLl9zZXRTZWxlY3RlZEl0ZW0odGhpcy5fc2VsZWN0aW9uLmdldCgpKX0sX29ic2VydmVJdGVtczpmdW5jdGlvbihlKXtyZXR1cm4genQoZSkub2JzZXJ2ZU5vZGVzKGZ1bmN0aW9uKHQpe3RoaXMuX3VwZGF0ZUl0ZW1zKCksdGhpcy5fdXBkYXRlU2VsZWN0ZWQoKSx0aGlzLmZpcmUoImlyb24taXRlbXMtY2hhbmdlZCIsdCx7YnViYmxlczohMSxjYW5jZWxhYmxlOiExfSl9KX0sX2FjdGl2YXRlSGFuZGxlcjpmdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS50YXJnZXQscj10aGlzLml0ZW1zO3QmJnQhPXRoaXM7KXt2YXIgbj1yLmluZGV4T2YodCk7aWYobj49MCl7dmFyIGk9dGhpcy5faW5kZXhUb1ZhbHVlKG4pO3RoaXMuX2l0ZW1BY3RpdmF0ZShpLHQpO3JldHVybn10PXQucGFyZW50Tm9kZX19LF9pdGVtQWN0aXZhdGU6ZnVuY3Rpb24oZSx0KXt0aGlzLmZpcmUoImlyb24tYWN0aXZhdGUiLHtzZWxlY3RlZDplLGl0ZW06dH0se2NhbmNlbGFibGU6ITB9KS5kZWZhdWx0UHJldmVudGVkfHx0aGlzLnNlbGVjdChlKX19O1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZCg6bm90KHNsb3QpOm5vdCguaXJvbi1zZWxlY3RlZCkpIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJpcm9uLXBhZ2VzIixiZWhhdmlvcnM6W1FzLFNoXSxwcm9wZXJ0aWVzOnthY3RpdmF0ZUV2ZW50Ont0eXBlOlN0cmluZyx2YWx1ZTpudWxsfX0sb2JzZXJ2ZXJzOlsiX3NlbGVjdGVkUGFnZUNoYW5nZWQoc2VsZWN0ZWQpIl0sX3NlbGVjdGVkUGFnZUNoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt0aGlzLmFzeW5jKHRoaXMubm90aWZ5UmVzaXplKX19KTt2YXIgbDB0PVFgCjxjdXN0b20tc3R5bGU+CiAgPHN0eWxlIGlzPSJjdXN0b20tc3R5bGUiPgogICAgaHRtbCB7CgogICAgICAtLXNoYWRvdy10cmFuc2l0aW9uOiB7CiAgICAgICAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjI4cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICB9OwoKICAgICAgLS1zaGFkb3ctbm9uZTogewogICAgICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICAgIH07CgogICAgICAvKiBmcm9tIGh0dHA6Ly9jb2RlcGVuLmlvL3NoeW5kbWFuL3Blbi9jNTM5NGRkZjJlOGIyYTVjOTE4NTkwNGI1NzQyMWNkYiAqLwoKICAgICAgLS1zaGFkb3ctZWxldmF0aW9uLTJkcDogewogICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDJweCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksCiAgICAgICAgICAgICAgICAgICAgMCAxcHggNXB4IDAgcmdiYSgwLCAwLCAwLCAwLjEyKSwKICAgICAgICAgICAgICAgICAgICAwIDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAgIH07CgogICAgICAtLXNoYWRvdy1lbGV2YXRpb24tM2RwOiB7CiAgICAgICAgYm94LXNoYWRvdzogMCAzcHggNHB4IDAgcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDFweCA4cHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgM3B4IDNweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi00ZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDRweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuMTQpLAogICAgICAgICAgICAgICAgICAgIDAgMXB4IDEwcHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi02ZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDZweCAxMHB4IDAgcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDFweCAxOHB4IDAgcmdiYSgwLCAwLCAwLCAwLjEyKSwKICAgICAgICAgICAgICAgICAgICAwIDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuNCk7CiAgICAgIH07CgogICAgICAtLXNoYWRvdy1lbGV2YXRpb24tOGRwOiB7CiAgICAgICAgYm94LXNoYWRvdzogMCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi0xMmRwOiB7CiAgICAgICAgYm94LXNoYWRvdzogMCAxMnB4IDE2cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksCiAgICAgICAgICAgICAgICAgICAgMCA0cHggMjJweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEyKSwKICAgICAgICAgICAgICAgICAgICAwIDZweCA3cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuNCk7CiAgICAgIH07CgogICAgICAtLXNoYWRvdy1lbGV2YXRpb24tMTZkcDogewogICAgICAgIGJveC1zaGFkb3c6IDAgMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLAogICAgICAgICAgICAgICAgICAgIDAgIDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgIDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICB9OwoKICAgICAgLS1zaGFkb3ctZWxldmF0aW9uLTI0ZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgMTFweCAxNXB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICB9OwogICAgfQogIDwvc3R5bGU+CjwvY3VzdG9tLXN0eWxlPmA7bDB0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobDB0LmNvbnRlbnQpO3ZhciBjMHQ9UWAKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLW1hdGVyaWFsLXN0eWxlcyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICBodG1sIHsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsOiB7CiAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTE6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMmRwOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMjogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi00ZHA7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0zOiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTZkcDsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTQ6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tOGRwOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tNTogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi0xNmRwOwogICAgICAgIH07CiAgICAgIH0KICAgICAgLnBhcGVyLW1hdGVyaWFsIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbDsKICAgICAgfQogICAgICAucGFwZXItbWF0ZXJpYWxbZWxldmF0aW9uPSIxIl0gewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0xOwogICAgICB9CiAgICAgIC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjIiXSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTI7CiAgICAgIH0KICAgICAgLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iMyJdIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMzsKICAgICAgfQogICAgICAucGFwZXItbWF0ZXJpYWxbZWxldmF0aW9uPSI0Il0gewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi00OwogICAgICB9CiAgICAgIC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjUiXSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTU7CiAgICAgIH0KCiAgICAgIC8qIER1cGxpY2F0ZSB0aGUgc3R5bGVzIGJlY2F1c2Ugb2YgaHR0cHM6Ly9naXRodWIuY29tL3dlYmNvbXBvbmVudHMvc2hhZHljc3MvaXNzdWVzLzE5MyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbDogewogICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0xOiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTJkcDsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTI6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tNGRwOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMzogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi02ZHA7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi00OiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLThkcDsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTU6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMTZkcDsKICAgICAgICB9OwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbCkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsOwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjEiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0xOwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjIiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0yOwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjMiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0zOwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjQiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi00OwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjUiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi01OwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT5gO2MwdC5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKTtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGMwdC5jb250ZW50KTt2YXIgRGk9e3Byb3BlcnRpZXM6e2ZvY3VzZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITAscmVhZE9ubHk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCxvYnNlcnZlcjoiX2Rpc2FibGVkQ2hhbmdlZCIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxfb2xkVGFiSW5kZXg6e3R5cGU6U3RyaW5nfSxfYm91bmRGb2N1c0JsdXJIYW5kbGVyOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZvY3VzQmx1ckhhbmRsZXIuYmluZCh0aGlzKX19fSxvYnNlcnZlcnM6WyJfY2hhbmdlZENvbnRyb2xTdGF0ZShmb2N1c2VkLCBkaXNhYmxlZCkiXSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuX2JvdW5kRm9jdXNCbHVySGFuZGxlciwhMCksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl9ib3VuZEZvY3VzQmx1ckhhbmRsZXIsITApfSxfZm9jdXNCbHVySGFuZGxlcjpmdW5jdGlvbihlKXt0aGlzLl9zZXRGb2N1c2VkKGUudHlwZT09PSJmb2N1cyIpfSxfZGlzYWJsZWRDaGFuZ2VkOmZ1bmN0aW9uKGUsdCl7dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtZGlzYWJsZWQiLGU/InRydWUiOiJmYWxzZSIpLHRoaXMuc3R5bGUucG9pbnRlckV2ZW50cz1lPyJub25lIjoiIixlPyh0aGlzLl9vbGRUYWJJbmRleD10aGlzLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKSx0aGlzLl9zZXRGb2N1c2VkKCExKSx0aGlzLnRhYkluZGV4PS0xLHRoaXMuYmx1cigpKTp0aGlzLl9vbGRUYWJJbmRleCE9PXZvaWQgMCYmKHRoaXMuX29sZFRhYkluZGV4PT09bnVsbD90aGlzLnJlbW92ZUF0dHJpYnV0ZSgidGFiaW5kZXgiKTp0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLHRoaXMuX29sZFRhYkluZGV4KSl9LF9jaGFuZ2VkQ29udHJvbFN0YXRlOmZ1bmN0aW9uKCl7dGhpcy5fY29udHJvbFN0YXRlQ2hhbmdlZCYmdGhpcy5fY29udHJvbFN0YXRlQ2hhbmdlZCgpfX07dmFyIFl4PXtwcm9wZXJ0aWVzOntwcmVzc2VkOnt0eXBlOkJvb2xlYW4scmVhZE9ubHk6ITAsdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwLG9ic2VydmVyOiJfcHJlc3NlZENoYW5nZWQifSx0b2dnbGVzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxhY3RpdmU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxwb2ludGVyRG93bjp7dHlwZTpCb29sZWFuLHJlYWRPbmx5OiEwLHZhbHVlOiExfSxyZWNlaXZlZEZvY3VzRnJvbUtleWJvYXJkOnt0eXBlOkJvb2xlYW4scmVhZE9ubHk6ITB9LGFyaWFBY3RpdmVBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJhcmlhLXByZXNzZWQiLG9ic2VydmVyOiJfYXJpYUFjdGl2ZUF0dHJpYnV0ZUNoYW5nZWQifX0sbGlzdGVuZXJzOntkb3duOiJfZG93bkhhbmRsZXIiLHVwOiJfdXBIYW5kbGVyIix0YXA6Il90YXBIYW5kbGVyIn0sb2JzZXJ2ZXJzOlsiX2ZvY3VzQ2hhbmdlZChmb2N1c2VkKSIsIl9hY3RpdmVDaGFuZ2VkKGFjdGl2ZSwgYXJpYUFjdGl2ZUF0dHJpYnV0ZSkiXSxrZXlCaW5kaW5nczp7ImVudGVyOmtleWRvd24iOiJfYXN5bmNDbGljayIsInNwYWNlOmtleWRvd24iOiJfc3BhY2VLZXlEb3duSGFuZGxlciIsInNwYWNlOmtleXVwIjoiX3NwYWNlS2V5VXBIYW5kbGVyIn0sX21vdXNlRXZlbnRSZTovXm1vdXNlLyxfdGFwSGFuZGxlcjpmdW5jdGlvbigpe3RoaXMudG9nZ2xlcz90aGlzLl91c2VyQWN0aXZhdGUoIXRoaXMuYWN0aXZlKTp0aGlzLmFjdGl2ZT0hMX0sX2ZvY3VzQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLl9kZXRlY3RLZXlib2FyZEZvY3VzKGUpLGV8fHRoaXMuX3NldFByZXNzZWQoITEpfSxfZGV0ZWN0S2V5Ym9hcmRGb2N1czpmdW5jdGlvbihlKXt0aGlzLl9zZXRSZWNlaXZlZEZvY3VzRnJvbUtleWJvYXJkKCF0aGlzLnBvaW50ZXJEb3duJiZlKX0sX3VzZXJBY3RpdmF0ZTpmdW5jdGlvbihlKXt0aGlzLmFjdGl2ZSE9PWUmJih0aGlzLmFjdGl2ZT1lLHRoaXMuZmlyZSgiY2hhbmdlIikpfSxfZG93bkhhbmRsZXI6ZnVuY3Rpb24oZSl7dGhpcy5fc2V0UG9pbnRlckRvd24oITApLHRoaXMuX3NldFByZXNzZWQoITApLHRoaXMuX3NldFJlY2VpdmVkRm9jdXNGcm9tS2V5Ym9hcmQoITEpfSxfdXBIYW5kbGVyOmZ1bmN0aW9uKCl7dGhpcy5fc2V0UG9pbnRlckRvd24oITEpLHRoaXMuX3NldFByZXNzZWQoITEpfSxfc3BhY2VLZXlEb3duSGFuZGxlcjpmdW5jdGlvbihlKXt2YXIgdD1lLmRldGFpbC5rZXlib2FyZEV2ZW50LHI9enQodCkubG9jYWxUYXJnZXQ7dGhpcy5pc0xpZ2h0RGVzY2VuZGFudChyKXx8KHQucHJldmVudERlZmF1bHQoKSx0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLHRoaXMuX3NldFByZXNzZWQoITApKX0sX3NwYWNlS2V5VXBIYW5kbGVyOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZGV0YWlsLmtleWJvYXJkRXZlbnQscj16dCh0KS5sb2NhbFRhcmdldDt0aGlzLmlzTGlnaHREZXNjZW5kYW50KHIpfHwodGhpcy5wcmVzc2VkJiZ0aGlzLl9hc3luY0NsaWNrKCksdGhpcy5fc2V0UHJlc3NlZCghMSkpfSxfYXN5bmNDbGljazpmdW5jdGlvbigpe3RoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLmNsaWNrKCl9LDEpfSxfcHJlc3NlZENoYW5nZWQ6ZnVuY3Rpb24oZSl7dGhpcy5fY2hhbmdlZEJ1dHRvblN0YXRlKCl9LF9hcmlhQWN0aXZlQXR0cmlidXRlQ2hhbmdlZDpmdW5jdGlvbihlLHQpe3QmJnQhPWUmJnRoaXMuaGFzQXR0cmlidXRlKHQpJiZ0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX0sX2FjdGl2ZUNoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt0aGlzLnRvZ2dsZXM/dGhpcy5zZXRBdHRyaWJ1dGUodGhpcy5hcmlhQWN0aXZlQXR0cmlidXRlLGU/InRydWUiOiJmYWxzZSIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKHRoaXMuYXJpYUFjdGl2ZUF0dHJpYnV0ZSksdGhpcy5fY2hhbmdlZEJ1dHRvblN0YXRlKCl9LF9jb250cm9sU3RhdGVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZD90aGlzLl9zZXRQcmVzc2VkKCExKTp0aGlzLl9jaGFuZ2VkQnV0dG9uU3RhdGUoKX0sX2NoYW5nZWRCdXR0b25TdGF0ZTpmdW5jdGlvbigpe3RoaXMuX2J1dHRvblN0YXRlQ2hhbmdlZCYmdGhpcy5fYnV0dG9uU3RhdGVDaGFuZ2VkKCl9fSxNaD1bT28sWXhdO3ZhciBFaD17ZGlzdGFuY2U6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGk9ZS1yLG89dC1uO3JldHVybiBNYXRoLnNxcnQoaSppK28qbyl9LG5vdzp3aW5kb3cucGVyZm9ybWFuY2UmJndpbmRvdy5wZXJmb3JtYW5jZS5ub3c/d2luZG93LnBlcmZvcm1hbmNlLm5vdy5iaW5kKHdpbmRvdy5wZXJmb3JtYW5jZSk6RGF0ZS5ub3d9O2Z1bmN0aW9uIHUwdChlKXt0aGlzLmVsZW1lbnQ9ZSx0aGlzLndpZHRoPXRoaXMuYm91bmRpbmdSZWN0LndpZHRoLHRoaXMuaGVpZ2h0PXRoaXMuYm91bmRpbmdSZWN0LmhlaWdodCx0aGlzLnNpemU9TWF0aC5tYXgodGhpcy53aWR0aCx0aGlzLmhlaWdodCl9dTB0LnByb3RvdHlwZT17Z2V0IGJvdW5kaW5nUmVjdCgpe3JldHVybiB0aGlzLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9LGZ1cnRoZXN0Q29ybmVyRGlzdGFuY2VGcm9tOmZ1bmN0aW9uKGUsdCl7dmFyIHI9RWguZGlzdGFuY2UoZSx0LDAsMCksbj1FaC5kaXN0YW5jZShlLHQsdGhpcy53aWR0aCwwKSxpPUVoLmRpc3RhbmNlKGUsdCwwLHRoaXMuaGVpZ2h0KSxvPUVoLmRpc3RhbmNlKGUsdCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KTtyZXR1cm4gTWF0aC5tYXgocixuLGksbyl9fTtmdW5jdGlvbiBfXyhlKXt0aGlzLmVsZW1lbnQ9ZSx0aGlzLmNvbG9yPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpLmNvbG9yLHRoaXMud2F2ZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLndhdmVDb250YWluZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy53YXZlLnN0eWxlLmJhY2tncm91bmRDb2xvcj10aGlzLmNvbG9yLHRoaXMud2F2ZS5jbGFzc0xpc3QuYWRkKCJ3YXZlIiksdGhpcy53YXZlQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoIndhdmUtY29udGFpbmVyIiksenQodGhpcy53YXZlQ29udGFpbmVyKS5hcHBlbmRDaGlsZCh0aGlzLndhdmUpLHRoaXMucmVzZXRJbnRlcmFjdGlvblN0YXRlKCl9X18uTUFYX1JBRElVUz0zMDA7X18ucHJvdG90eXBlPXtnZXQgcmVjZW50ZXJzKCl7cmV0dXJuIHRoaXMuZWxlbWVudC5yZWNlbnRlcnN9LGdldCBjZW50ZXIoKXtyZXR1cm4gdGhpcy5lbGVtZW50LmNlbnRlcn0sZ2V0IG1vdXNlRG93bkVsYXBzZWQoKXt2YXIgZTtyZXR1cm4gdGhpcy5tb3VzZURvd25TdGFydD8oZT1FaC5ub3coKS10aGlzLm1vdXNlRG93blN0YXJ0LHRoaXMubW91c2VVcFN0YXJ0JiYoZS09dGhpcy5tb3VzZVVwRWxhcHNlZCksZSk6MH0sZ2V0IG1vdXNlVXBFbGFwc2VkKCl7cmV0dXJuIHRoaXMubW91c2VVcFN0YXJ0P0VoLm5vdygpLXRoaXMubW91c2VVcFN0YXJ0OjB9LGdldCBtb3VzZURvd25FbGFwc2VkU2Vjb25kcygpe3JldHVybiB0aGlzLm1vdXNlRG93bkVsYXBzZWQvMWUzfSxnZXQgbW91c2VVcEVsYXBzZWRTZWNvbmRzKCl7cmV0dXJuIHRoaXMubW91c2VVcEVsYXBzZWQvMWUzfSxnZXQgbW91c2VJbnRlcmFjdGlvblNlY29uZHMoKXtyZXR1cm4gdGhpcy5tb3VzZURvd25FbGFwc2VkU2Vjb25kcyt0aGlzLm1vdXNlVXBFbGFwc2VkU2Vjb25kc30sZ2V0IGluaXRpYWxPcGFjaXR5KCl7cmV0dXJuIHRoaXMuZWxlbWVudC5pbml0aWFsT3BhY2l0eX0sZ2V0IG9wYWNpdHlEZWNheVZlbG9jaXR5KCl7cmV0dXJuIHRoaXMuZWxlbWVudC5vcGFjaXR5RGVjYXlWZWxvY2l0eX0sZ2V0IHJhZGl1cygpe3ZhciBlPXRoaXMuY29udGFpbmVyTWV0cmljcy53aWR0aCp0aGlzLmNvbnRhaW5lck1ldHJpY3Mud2lkdGgsdD10aGlzLmNvbnRhaW5lck1ldHJpY3MuaGVpZ2h0KnRoaXMuY29udGFpbmVyTWV0cmljcy5oZWlnaHQscj1NYXRoLm1pbihNYXRoLnNxcnQoZSt0KSxfXy5NQVhfUkFESVVTKSoxLjErNSxuPTEuMS0uMiooci9fXy5NQVhfUkFESVVTKSxpPXRoaXMubW91c2VJbnRlcmFjdGlvblNlY29uZHMvbixvPXIqKDEtTWF0aC5wb3coODAsLWkpKTtyZXR1cm4gTWF0aC5hYnMobyl9LGdldCBvcGFjaXR5KCl7cmV0dXJuIHRoaXMubW91c2VVcFN0YXJ0P01hdGgubWF4KDAsdGhpcy5pbml0aWFsT3BhY2l0eS10aGlzLm1vdXNlVXBFbGFwc2VkU2Vjb25kcyp0aGlzLm9wYWNpdHlEZWNheVZlbG9jaXR5KTp0aGlzLmluaXRpYWxPcGFjaXR5fSxnZXQgb3V0ZXJPcGFjaXR5KCl7dmFyIGU9dGhpcy5tb3VzZVVwRWxhcHNlZFNlY29uZHMqLjMsdD10aGlzLm9wYWNpdHk7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oZSx0KSl9LGdldCBpc09wYWNpdHlGdWxseURlY2F5ZWQoKXtyZXR1cm4gdGhpcy5vcGFjaXR5PC4wMSYmdGhpcy5yYWRpdXM+PU1hdGgubWluKHRoaXMubWF4UmFkaXVzLF9fLk1BWF9SQURJVVMpfSxnZXQgaXNSZXN0aW5nQXRNYXhSYWRpdXMoKXtyZXR1cm4gdGhpcy5vcGFjaXR5Pj10aGlzLmluaXRpYWxPcGFjaXR5JiZ0aGlzLnJhZGl1cz49TWF0aC5taW4odGhpcy5tYXhSYWRpdXMsX18uTUFYX1JBRElVUyl9LGdldCBpc0FuaW1hdGlvbkNvbXBsZXRlKCl7cmV0dXJuIHRoaXMubW91c2VVcFN0YXJ0P3RoaXMuaXNPcGFjaXR5RnVsbHlEZWNheWVkOnRoaXMuaXNSZXN0aW5nQXRNYXhSYWRpdXN9LGdldCB0cmFuc2xhdGlvbkZyYWN0aW9uKCl7cmV0dXJuIE1hdGgubWluKDEsdGhpcy5yYWRpdXMvdGhpcy5jb250YWluZXJNZXRyaWNzLnNpemUqMi9NYXRoLnNxcnQoMikpfSxnZXQgeE5vdygpe3JldHVybiB0aGlzLnhFbmQ/dGhpcy54U3RhcnQrdGhpcy50cmFuc2xhdGlvbkZyYWN0aW9uKih0aGlzLnhFbmQtdGhpcy54U3RhcnQpOnRoaXMueFN0YXJ0fSxnZXQgeU5vdygpe3JldHVybiB0aGlzLnlFbmQ/dGhpcy55U3RhcnQrdGhpcy50cmFuc2xhdGlvbkZyYWN0aW9uKih0aGlzLnlFbmQtdGhpcy55U3RhcnQpOnRoaXMueVN0YXJ0fSxnZXQgaXNNb3VzZURvd24oKXtyZXR1cm4gdGhpcy5tb3VzZURvd25TdGFydCYmIXRoaXMubW91c2VVcFN0YXJ0fSxyZXNldEludGVyYWN0aW9uU3RhdGU6ZnVuY3Rpb24oKXt0aGlzLm1heFJhZGl1cz0wLHRoaXMubW91c2VEb3duU3RhcnQ9MCx0aGlzLm1vdXNlVXBTdGFydD0wLHRoaXMueFN0YXJ0PTAsdGhpcy55U3RhcnQ9MCx0aGlzLnhFbmQ9MCx0aGlzLnlFbmQ9MCx0aGlzLnNsaWRlRGlzdGFuY2U9MCx0aGlzLmNvbnRhaW5lck1ldHJpY3M9bmV3IHUwdCh0aGlzLmVsZW1lbnQpfSxkcmF3OmZ1bmN0aW9uKCl7dmFyIGUsdCxyO3RoaXMud2F2ZS5zdHlsZS5vcGFjaXR5PXRoaXMub3BhY2l0eSxlPXRoaXMucmFkaXVzLyh0aGlzLmNvbnRhaW5lck1ldHJpY3Muc2l6ZS8yKSx0PXRoaXMueE5vdy10aGlzLmNvbnRhaW5lck1ldHJpY3Mud2lkdGgvMixyPXRoaXMueU5vdy10aGlzLmNvbnRhaW5lck1ldHJpY3MuaGVpZ2h0LzIsdGhpcy53YXZlQ29udGFpbmVyLnN0eWxlLndlYmtpdFRyYW5zZm9ybT0idHJhbnNsYXRlKCIrdCsicHgsICIrcisicHgpIix0aGlzLndhdmVDb250YWluZXIuc3R5bGUudHJhbnNmb3JtPSJ0cmFuc2xhdGUzZCgiK3QrInB4LCAiK3IrInB4LCAwKSIsdGhpcy53YXZlLnN0eWxlLndlYmtpdFRyYW5zZm9ybT0ic2NhbGUoIitlKyIsIitlKyIpIix0aGlzLndhdmUuc3R5bGUudHJhbnNmb3JtPSJzY2FsZTNkKCIrZSsiLCIrZSsiLDEpIn0sZG93bkFjdGlvbjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmNvbnRhaW5lck1ldHJpY3Mud2lkdGgvMixyPXRoaXMuY29udGFpbmVyTWV0cmljcy5oZWlnaHQvMjt0aGlzLnJlc2V0SW50ZXJhY3Rpb25TdGF0ZSgpLHRoaXMubW91c2VEb3duU3RhcnQ9RWgubm93KCksdGhpcy5jZW50ZXI/KHRoaXMueFN0YXJ0PXQsdGhpcy55U3RhcnQ9cix0aGlzLnNsaWRlRGlzdGFuY2U9RWguZGlzdGFuY2UodGhpcy54U3RhcnQsdGhpcy55U3RhcnQsdGhpcy54RW5kLHRoaXMueUVuZCkpOih0aGlzLnhTdGFydD1lP2UuZGV0YWlsLngtdGhpcy5jb250YWluZXJNZXRyaWNzLmJvdW5kaW5nUmVjdC5sZWZ0OnRoaXMuY29udGFpbmVyTWV0cmljcy53aWR0aC8yLHRoaXMueVN0YXJ0PWU/ZS5kZXRhaWwueS10aGlzLmNvbnRhaW5lck1ldHJpY3MuYm91bmRpbmdSZWN0LnRvcDp0aGlzLmNvbnRhaW5lck1ldHJpY3MuaGVpZ2h0LzIpLHRoaXMucmVjZW50ZXJzJiYodGhpcy54RW5kPXQsdGhpcy55RW5kPXIsdGhpcy5zbGlkZURpc3RhbmNlPUVoLmRpc3RhbmNlKHRoaXMueFN0YXJ0LHRoaXMueVN0YXJ0LHRoaXMueEVuZCx0aGlzLnlFbmQpKSx0aGlzLm1heFJhZGl1cz10aGlzLmNvbnRhaW5lck1ldHJpY3MuZnVydGhlc3RDb3JuZXJEaXN0YW5jZUZyb20odGhpcy54U3RhcnQsdGhpcy55U3RhcnQpLHRoaXMud2F2ZUNvbnRhaW5lci5zdHlsZS50b3A9KHRoaXMuY29udGFpbmVyTWV0cmljcy5oZWlnaHQtdGhpcy5jb250YWluZXJNZXRyaWNzLnNpemUpLzIrInB4Iix0aGlzLndhdmVDb250YWluZXIuc3R5bGUubGVmdD0odGhpcy5jb250YWluZXJNZXRyaWNzLndpZHRoLXRoaXMuY29udGFpbmVyTWV0cmljcy5zaXplKS8yKyJweCIsdGhpcy53YXZlQ29udGFpbmVyLnN0eWxlLndpZHRoPXRoaXMuY29udGFpbmVyTWV0cmljcy5zaXplKyJweCIsdGhpcy53YXZlQ29udGFpbmVyLnN0eWxlLmhlaWdodD10aGlzLmNvbnRhaW5lck1ldHJpY3Muc2l6ZSsicHgifSx1cEFjdGlvbjpmdW5jdGlvbihlKXshdGhpcy5pc01vdXNlRG93bnx8KHRoaXMubW91c2VVcFN0YXJ0PUVoLm5vdygpKX0scmVtb3ZlOmZ1bmN0aW9uKCl7enQoenQodGhpcy53YXZlQ29udGFpbmVyKS5wYXJlbnROb2RlKS5yZW1vdmVDaGlsZCh0aGlzLndhdmVDb250YWluZXIpfX07WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CgogICAgICAgIC8qIFNlZSBQb2x5bWVyRWxlbWVudHMvcGFwZXItYmVoYXZpb3JzL2lzc3Vlcy8zNC4gT24gbm9uLUNocm9tZSBicm93c2VycywKICAgICAgICAgKiBjcmVhdGluZyBhIG5vZGUgKHdpdGggYSBwb3NpdGlvbjphYnNvbHV0ZSkgaW4gdGhlIG1pZGRsZSBvZiBhbiBldmVudAogICAgICAgICAqIGhhbmRsZXIgImludGVycnVwdHMiIHRoYXQgZXZlbnQgaGFuZGxlciAod2hpY2ggaGFwcGVucyB3aGVuIHRoZQogICAgICAgICAqIHJpcHBsZSBpcyBjcmVhdGVkIG9uIGRlbWFuZCkgKi8KICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2FuaW1hdGluZ10pIHsKICAgICAgICAvKiBUaGlzIHJlc29sdmVzIGEgcmVuZGVyaW5nIGlzc3VlIGluIENocm9tZSAoYXMgb2YgNDApIHdoZXJlIHRoZQogICAgICAgICAgIHJpcHBsZSBpcyBub3QgcHJvcGVybHkgY2xpcHBlZCBieSBpdHMgcGFyZW50ICh3aGljaCBtYXkgaGF2ZQogICAgICAgICAgIHJvdW5kZWQgY29ybmVycykuIFNlZTogaHR0cDovL2pzYmluLmNvbS90ZW1leGEvNAoKICAgICAgICAgICBOb3RlOiBXZSBvbmx5IGFwcGx5IHRoaXMgc3R5bGUgY29uZGl0aW9uYWxseS4gT3RoZXJ3aXNlLCB0aGUgYnJvd3NlcgogICAgICAgICAgIHdpbGwgY3JlYXRlIGEgbmV3IGNvbXBvc2l0aW5nIGxheWVyIGZvciBldmVyeSByaXBwbGUgZWxlbWVudCBvbiB0aGUKICAgICAgICAgICBwYWdlLCBhbmQgdGhhdCB3b3VsZCBiZSBiYWQuICovCiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApOwogICAgICB9CgogICAgICAjYmFja2dyb3VuZCwKICAgICAgI3dhdmVzLAogICAgICAud2F2ZS1jb250YWluZXIsCiAgICAgIC53YXZlIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAjYmFja2dyb3VuZCwKICAgICAgLndhdmUgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgIH0KCiAgICAgICN3YXZlcywKICAgICAgLndhdmUgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC53YXZlLWNvbnRhaW5lciwKICAgICAgLndhdmUgewogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgfQoKICAgICAgOmhvc3QoLmNpcmNsZSkgI2JhY2tncm91bmQsCiAgICAgIDpob3N0KC5jaXJjbGUpICN3YXZlcyB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICB9CgogICAgICA6aG9zdCguY2lyY2xlKSAud2F2ZS1jb250YWluZXIgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBpZD0iYmFja2dyb3VuZCI+PC9kaXY+CiAgICA8ZGl2IGlkPSJ3YXZlcyI+PC9kaXY+CmAsaXM6InBhcGVyLXJpcHBsZSIsYmVoYXZpb3JzOltPb10scHJvcGVydGllczp7aW5pdGlhbE9wYWNpdHk6e3R5cGU6TnVtYmVyLHZhbHVlOi4yNX0sb3BhY2l0eURlY2F5VmVsb2NpdHk6e3R5cGU6TnVtYmVyLHZhbHVlOi44fSxyZWNlbnRlcnM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sY2VudGVyOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHJpcHBsZXM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LGFuaW1hdGluZzp7dHlwZTpCb29sZWFuLHJlYWRPbmx5OiEwLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCx2YWx1ZTohMX0saG9sZERvd246e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX2hvbGREb3duQ2hhbmdlZCJ9LG5vaW5rOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9hbmltYXRpbmc6e3R5cGU6Qm9vbGVhbn0sX2JvdW5kQW5pbWF0ZTp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFuaW1hdGUuYmluZCh0aGlzKX19fSxnZXQgdGFyZ2V0KCl7cmV0dXJuIHRoaXMua2V5RXZlbnRUYXJnZXR9LGtleUJpbmRpbmdzOnsiZW50ZXI6a2V5ZG93biI6Il9vbkVudGVyS2V5ZG93biIsInNwYWNlOmtleWRvd24iOiJfb25TcGFjZUtleWRvd24iLCJzcGFjZTprZXl1cCI6Il9vblNwYWNlS2V5dXAifSxhdHRhY2hlZDpmdW5jdGlvbigpe3p0KHRoaXMpLnBhcmVudE5vZGUubm9kZVR5cGU9PTExP3RoaXMua2V5RXZlbnRUYXJnZXQ9enQodGhpcykuZ2V0T3duZXJSb290KCkuaG9zdDp0aGlzLmtleUV2ZW50VGFyZ2V0PXp0KHRoaXMpLnBhcmVudE5vZGU7dmFyIGU9dGhpcy5rZXlFdmVudFRhcmdldDt0aGlzLmxpc3RlbihlLCJ1cCIsInVpVXBBY3Rpb24iKSx0aGlzLmxpc3RlbihlLCJkb3duIiwidWlEb3duQWN0aW9uIil9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy51bmxpc3Rlbih0aGlzLmtleUV2ZW50VGFyZ2V0LCJ1cCIsInVpVXBBY3Rpb24iKSx0aGlzLnVubGlzdGVuKHRoaXMua2V5RXZlbnRUYXJnZXQsImRvd24iLCJ1aURvd25BY3Rpb24iKSx0aGlzLmtleUV2ZW50VGFyZ2V0PW51bGx9LGdldCBzaG91bGRLZWVwQW5pbWF0aW5nKCl7Zm9yKHZhciBlPTA7ZTx0aGlzLnJpcHBsZXMubGVuZ3RoOysrZSlpZighdGhpcy5yaXBwbGVzW2VdLmlzQW5pbWF0aW9uQ29tcGxldGUpcmV0dXJuITA7cmV0dXJuITF9LHNpbXVsYXRlZFJpcHBsZTpmdW5jdGlvbigpe3RoaXMuZG93bkFjdGlvbihudWxsKSx0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy51cEFjdGlvbigpfSwxKX0sdWlEb3duQWN0aW9uOmZ1bmN0aW9uKGUpe3RoaXMubm9pbmt8fHRoaXMuZG93bkFjdGlvbihlKX0sZG93bkFjdGlvbjpmdW5jdGlvbihlKXtpZighKHRoaXMuaG9sZERvd24mJnRoaXMucmlwcGxlcy5sZW5ndGg+MCkpe3ZhciB0PXRoaXMuYWRkUmlwcGxlKCk7dC5kb3duQWN0aW9uKGUpLHRoaXMuX2FuaW1hdGluZ3x8KHRoaXMuX2FuaW1hdGluZz0hMCx0aGlzLmFuaW1hdGUoKSl9fSx1aVVwQWN0aW9uOmZ1bmN0aW9uKGUpe3RoaXMubm9pbmt8fHRoaXMudXBBY3Rpb24oZSl9LHVwQWN0aW9uOmZ1bmN0aW9uKGUpe3RoaXMuaG9sZERvd258fCh0aGlzLnJpcHBsZXMuZm9yRWFjaChmdW5jdGlvbih0KXt0LnVwQWN0aW9uKGUpfSksdGhpcy5fYW5pbWF0aW5nPSEwLHRoaXMuYW5pbWF0ZSgpKX0sb25BbmltYXRpb25Db21wbGV0ZTpmdW5jdGlvbigpe3RoaXMuX2FuaW1hdGluZz0hMSx0aGlzLiQuYmFja2dyb3VuZC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9IiIsdGhpcy5maXJlKCJ0cmFuc2l0aW9uZW5kIil9LGFkZFJpcHBsZTpmdW5jdGlvbigpe3ZhciBlPW5ldyBfXyh0aGlzKTtyZXR1cm4genQodGhpcy4kLndhdmVzKS5hcHBlbmRDaGlsZChlLndhdmVDb250YWluZXIpLHRoaXMuJC5iYWNrZ3JvdW5kLnN0eWxlLmJhY2tncm91bmRDb2xvcj1lLmNvbG9yLHRoaXMucmlwcGxlcy5wdXNoKGUpLHRoaXMuX3NldEFuaW1hdGluZyghMCksZX0scmVtb3ZlUmlwcGxlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucmlwcGxlcy5pbmRleE9mKGUpO3Q8MHx8KHRoaXMucmlwcGxlcy5zcGxpY2UodCwxKSxlLnJlbW92ZSgpLHRoaXMucmlwcGxlcy5sZW5ndGh8fHRoaXMuX3NldEFuaW1hdGluZyghMSkpfSxhbmltYXRlOmZ1bmN0aW9uKCl7aWYoISF0aGlzLl9hbmltYXRpbmcpe3ZhciBlLHQ7Zm9yKGU9MDtlPHRoaXMucmlwcGxlcy5sZW5ndGg7KytlKXQ9dGhpcy5yaXBwbGVzW2VdLHQuZHJhdygpLHRoaXMuJC5iYWNrZ3JvdW5kLnN0eWxlLm9wYWNpdHk9dC5vdXRlck9wYWNpdHksdC5pc09wYWNpdHlGdWxseURlY2F5ZWQmJiF0LmlzUmVzdGluZ0F0TWF4UmFkaXVzJiZ0aGlzLnJlbW92ZVJpcHBsZSh0KTshdGhpcy5zaG91bGRLZWVwQW5pbWF0aW5nJiZ0aGlzLnJpcHBsZXMubGVuZ3RoPT09MD90aGlzLm9uQW5pbWF0aW9uQ29tcGxldGUoKTp3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX2JvdW5kQW5pbWF0ZSl9fSxhbmltYXRlUmlwcGxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYW5pbWF0ZSgpfSxfb25FbnRlcktleWRvd246ZnVuY3Rpb24oKXt0aGlzLnVpRG93bkFjdGlvbigpLHRoaXMuYXN5bmModGhpcy51aVVwQWN0aW9uLDEpfSxfb25TcGFjZUtleWRvd246ZnVuY3Rpb24oKXt0aGlzLnVpRG93bkFjdGlvbigpfSxfb25TcGFjZUtleXVwOmZ1bmN0aW9uKCl7dGhpcy51aVVwQWN0aW9uKCl9LF9ob2xkRG93bkNoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt0IT09dm9pZCAwJiYoZT90aGlzLmRvd25BY3Rpb24oKTp0aGlzLnVwQWN0aW9uKCkpfX0pO3ZhciBzdT17cHJvcGVydGllczp7bm9pbms6e3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX25vaW5rQ2hhbmdlZCJ9LF9yaXBwbGVDb250YWluZXI6e3R5cGU6T2JqZWN0fX0sX2J1dHRvblN0YXRlQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuZm9jdXNlZCYmdGhpcy5lbnN1cmVSaXBwbGUoKX0sX2Rvd25IYW5kbGVyOmZ1bmN0aW9uKGUpe1l4Ll9kb3duSGFuZGxlci5jYWxsKHRoaXMsZSksdGhpcy5wcmVzc2VkJiZ0aGlzLmVuc3VyZVJpcHBsZShlKX0sZW5zdXJlUmlwcGxlOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLmhhc1JpcHBsZSgpKXt0aGlzLl9yaXBwbGU9dGhpcy5fY3JlYXRlUmlwcGxlKCksdGhpcy5fcmlwcGxlLm5vaW5rPXRoaXMubm9pbms7dmFyIHQ9dGhpcy5fcmlwcGxlQ29udGFpbmVyfHx0aGlzLnJvb3Q7aWYodCYmenQodCkuYXBwZW5kQ2hpbGQodGhpcy5fcmlwcGxlKSxlKXt2YXIgcj16dCh0aGlzLl9yaXBwbGVDb250YWluZXJ8fHRoaXMpLG49enQoZSkucm9vdFRhcmdldDtyLmRlZXBDb250YWlucyhuKSYmdGhpcy5fcmlwcGxlLnVpRG93bkFjdGlvbihlKX19fSxnZXRSaXBwbGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbnN1cmVSaXBwbGUoKSx0aGlzLl9yaXBwbGV9LGhhc1JpcHBsZTpmdW5jdGlvbigpe3JldHVybiBCb29sZWFuKHRoaXMuX3JpcHBsZSl9LF9jcmVhdGVSaXBwbGU6ZnVuY3Rpb24oKXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwYXBlci1yaXBwbGUiKTtyZXR1cm4gZX0sX25vaW5rQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLmhhc1JpcHBsZSgpJiYodGhpcy5fcmlwcGxlLm5vaW5rPWUpfX07dmFyIHVXPXtwcm9wZXJ0aWVzOntlbGV2YXRpb246e3R5cGU6TnVtYmVyLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxyZWFkT25seTohMH19LG9ic2VydmVyczpbIl9jYWxjdWxhdGVFbGV2YXRpb24oZm9jdXNlZCwgZGlzYWJsZWQsIGFjdGl2ZSwgcHJlc3NlZCwgcmVjZWl2ZWRGb2N1c0Zyb21LZXlib2FyZCkiLCJfY29tcHV0ZUtleWJvYXJkQ2xhc3MocmVjZWl2ZWRGb2N1c0Zyb21LZXlib2FyZCkiXSxob3N0QXR0cmlidXRlczp7cm9sZToiYnV0dG9uIix0YWJpbmRleDoiMCIsYW5pbWF0ZWQ6ITB9LF9jYWxjdWxhdGVFbGV2YXRpb246ZnVuY3Rpb24oKXt2YXIgZT0xO3RoaXMuZGlzYWJsZWQ/ZT0wOnRoaXMuYWN0aXZlfHx0aGlzLnByZXNzZWQ/ZT00OnRoaXMucmVjZWl2ZWRGb2N1c0Zyb21LZXlib2FyZCYmKGU9MyksdGhpcy5fc2V0RWxldmF0aW9uKGUpfSxfY29tcHV0ZUtleWJvYXJkQ2xhc3M6ZnVuY3Rpb24oZSl7dGhpcy50b2dnbGVDbGFzcygia2V5Ym9hcmQtZm9jdXMiLGUpfSxfc3BhY2VLZXlEb3duSGFuZGxlcjpmdW5jdGlvbihlKXtZeC5fc3BhY2VLZXlEb3duSGFuZGxlci5jYWxsKHRoaXMsZSksdGhpcy5oYXNSaXBwbGUoKSYmdGhpcy5nZXRSaXBwbGUoKS5yaXBwbGVzLmxlbmd0aDwxJiZ0aGlzLl9yaXBwbGUudWlEb3duQWN0aW9uKCl9LF9zcGFjZUtleVVwSGFuZGxlcjpmdW5jdGlvbihlKXtZeC5fc3BhY2VLZXlVcEhhbmRsZXIuY2FsbCh0aGlzLGUpLHRoaXMuaGFzUmlwcGxlKCkmJnRoaXMuX3JpcHBsZS51aVVwQWN0aW9uKCl9fSxoMHQ9W01oLERpLHN1LHVXXTt2YXIgZjB0PVFgCiAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLW1hdGVyaWFsLXN0eWxlcyI+CiAgICAvKiBOZWVkIHRvIHNwZWNpZnkgdGhlIHNhbWUgc3BlY2lmaWNpdHkgYXMgdGhlIHN0eWxlcyBpbXBvcnRlZCBmcm9tIHBhcGVyLW1hdGVyaWFsLiAqLwogICAgOmhvc3QgewogICAgICBAYXBwbHkgLS1sYXlvdXQtaW5saW5lOwogICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWNlbnRlcjsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICBtaW4td2lkdGg6IDUuMTRlbTsKICAgICAgbWFyZ2luOiAwIDAuMjllbTsKICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTsKICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgZm9udDogaW5oZXJpdDsKICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgb3V0bGluZS13aWR0aDogMDsKICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIHotaW5kZXg6IDA7CiAgICAgIHBhZGRpbmc6IDAuN2VtIDAuNTdlbTsKCiAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgIEBhcHBseSAtLXBhcGVyLWJ1dHRvbjsKICAgIH0KCiAgICA6aG9zdChbZWxldmF0aW9uPSIxIl0pIHsKICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTE7CiAgICB9CgogICAgOmhvc3QoW2VsZXZhdGlvbj0iMiJdKSB7CiAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0yOwogICAgfQoKICAgIDpob3N0KFtlbGV2YXRpb249IjMiXSkgewogICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMzsKICAgIH0KCiAgICA6aG9zdChbZWxldmF0aW9uPSI0Il0pIHsKICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTQ7CiAgICB9CgogICAgOmhvc3QoW2VsZXZhdGlvbj0iNSJdKSB7CiAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi01OwogICAgfQoKICAgIDpob3N0KFtoaWRkZW5dKSB7CiAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KCiAgICA6aG9zdChbcmFpc2VkXS5rZXlib2FyZC1mb2N1cykgewogICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgQGFwcGx5IC0tcGFwZXItYnV0dG9uLXJhaXNlZC1rZXlib2FyZC1mb2N1czsKICAgIH0KCiAgICA6aG9zdCg6bm90KFtyYWlzZWRdKS5rZXlib2FyZC1mb2N1cykgewogICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgQGFwcGx5IC0tcGFwZXItYnV0dG9uLWZsYXQta2V5Ym9hcmQtZm9jdXM7CiAgICB9CgogICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICBjb2xvcjogI2E4YThhODsKICAgICAgY3Vyc29yOiBhdXRvOwogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKCiAgICAgIEBhcHBseSAtLXBhcGVyLWJ1dHRvbi1kaXNhYmxlZDsKICAgIH0KCiAgICA6aG9zdChbZGlzYWJsZWRdW3JhaXNlZF0pIHsKICAgICAgYmFja2dyb3VuZDogI2VhZWFlYTsKICAgIH0KCgogICAgOmhvc3QoW2FuaW1hdGVkXSkgewogICAgICBAYXBwbHkgLS1zaGFkb3ctdHJhbnNpdGlvbjsKICAgIH0KCiAgICBwYXBlci1yaXBwbGUgewogICAgICBjb2xvcjogdmFyKC0tcGFwZXItYnV0dG9uLWluay1jb2xvcik7CiAgICB9CiAgPC9zdHlsZT4KCiAgPHNsb3Q+PC9zbG90PmA7ZjB0LnNldEF0dHJpYnV0ZSgic3RyaXAtd2hpdGVzcGFjZSIsIiIpO1l0KHtfdGVtcGxhdGU6ZjB0LGlzOiJwYXBlci1idXR0b24iLGJlaGF2aW9yczpbaDB0XSxwcm9wZXJ0aWVzOntyYWlzZWQ6e3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsdmFsdWU6ITEsb2JzZXJ2ZXI6Il9jYWxjdWxhdGVFbGV2YXRpb24ifX0sX2NhbGN1bGF0ZUVsZXZhdGlvbjpmdW5jdGlvbigpe3RoaXMucmFpc2VkP3VXLl9jYWxjdWxhdGVFbGV2YXRpb24uYXBwbHkodGhpcyk6dGhpcy5fc2V0RWxldmF0aW9uKDApfX0pO3ZhciBwMHQ9UWAKPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBodG1sIHsKCiAgICAgIC8qIE1hdGVyaWFsIERlc2lnbiBjb2xvciBwYWxldHRlIGZvciBHb29nbGUgcHJvZHVjdHMgKi8KCiAgICAgIC0tZ29vZ2xlLXJlZC0xMDA6ICNmNGM3YzM7CiAgICAgIC0tZ29vZ2xlLXJlZC0zMDA6ICNlNjdjNzM7CiAgICAgIC0tZ29vZ2xlLXJlZC01MDA6ICNkYjQ0Mzc7CiAgICAgIC0tZ29vZ2xlLXJlZC03MDA6ICNjNTM5Mjk7CgogICAgICAtLWdvb2dsZS1ibHVlLTEwMDogI2M2ZGFmYzsKICAgICAgLS1nb29nbGUtYmx1ZS0zMDA6ICM3YmFhZjc7CiAgICAgIC0tZ29vZ2xlLWJsdWUtNTAwOiAjNDI4NWY0OwogICAgICAtLWdvb2dsZS1ibHVlLTcwMDogIzMzNjdkNjsKCiAgICAgIC0tZ29vZ2xlLWdyZWVuLTEwMDogI2I3ZTFjZDsKICAgICAgLS1nb29nbGUtZ3JlZW4tMzAwOiAjNTdiYjhhOwogICAgICAtLWdvb2dsZS1ncmVlbi01MDA6ICMwZjlkNTg7CiAgICAgIC0tZ29vZ2xlLWdyZWVuLTcwMDogIzBiODA0MzsKCiAgICAgIC0tZ29vZ2xlLXllbGxvdy0xMDA6ICNmY2U4YjI7CiAgICAgIC0tZ29vZ2xlLXllbGxvdy0zMDA6ICNmN2NiNGQ7CiAgICAgIC0tZ29vZ2xlLXllbGxvdy01MDA6ICNmNGI0MDA7CiAgICAgIC0tZ29vZ2xlLXllbGxvdy03MDA6ICNmMDkzMDA7CgogICAgICAtLWdvb2dsZS1ncmV5LTEwMDogI2Y1ZjVmNTsKICAgICAgLS1nb29nbGUtZ3JleS0zMDA6ICNlMGUwZTA7CiAgICAgIC0tZ29vZ2xlLWdyZXktNTAwOiAjOWU5ZTllOwogICAgICAtLWdvb2dsZS1ncmV5LTcwMDogIzYxNjE2MTsKCiAgICAgIC8qIE1hdGVyaWFsIERlc2lnbiBjb2xvciBwYWxldHRlIGZyb20gb25saW5lIHNwZWMgZG9jdW1lbnQgKi8KCiAgICAgIC0tcGFwZXItcmVkLTUwOiAjZmZlYmVlOwogICAgICAtLXBhcGVyLXJlZC0xMDA6ICNmZmNkZDI7CiAgICAgIC0tcGFwZXItcmVkLTIwMDogI2VmOWE5YTsKICAgICAgLS1wYXBlci1yZWQtMzAwOiAjZTU3MzczOwogICAgICAtLXBhcGVyLXJlZC00MDA6ICNlZjUzNTA7CiAgICAgIC0tcGFwZXItcmVkLTUwMDogI2Y0NDMzNjsKICAgICAgLS1wYXBlci1yZWQtNjAwOiAjZTUzOTM1OwogICAgICAtLXBhcGVyLXJlZC03MDA6ICNkMzJmMmY7CiAgICAgIC0tcGFwZXItcmVkLTgwMDogI2M2MjgyODsKICAgICAgLS1wYXBlci1yZWQtOTAwOiAjYjcxYzFjOwogICAgICAtLXBhcGVyLXJlZC1hMTAwOiAjZmY4YTgwOwogICAgICAtLXBhcGVyLXJlZC1hMjAwOiAjZmY1MjUyOwogICAgICAtLXBhcGVyLXJlZC1hNDAwOiAjZmYxNzQ0OwogICAgICAtLXBhcGVyLXJlZC1hNzAwOiAjZDUwMDAwOwoKICAgICAgLS1wYXBlci1waW5rLTUwOiAjZmNlNGVjOwogICAgICAtLXBhcGVyLXBpbmstMTAwOiAjZjhiYmQwOwogICAgICAtLXBhcGVyLXBpbmstMjAwOiAjZjQ4ZmIxOwogICAgICAtLXBhcGVyLXBpbmstMzAwOiAjZjA2MjkyOwogICAgICAtLXBhcGVyLXBpbmstNDAwOiAjZWM0MDdhOwogICAgICAtLXBhcGVyLXBpbmstNTAwOiAjZTkxZTYzOwogICAgICAtLXBhcGVyLXBpbmstNjAwOiAjZDgxYjYwOwogICAgICAtLXBhcGVyLXBpbmstNzAwOiAjYzIxODViOwogICAgICAtLXBhcGVyLXBpbmstODAwOiAjYWQxNDU3OwogICAgICAtLXBhcGVyLXBpbmstOTAwOiAjODgwZTRmOwogICAgICAtLXBhcGVyLXBpbmstYTEwMDogI2ZmODBhYjsKICAgICAgLS1wYXBlci1waW5rLWEyMDA6ICNmZjQwODE7CiAgICAgIC0tcGFwZXItcGluay1hNDAwOiAjZjUwMDU3OwogICAgICAtLXBhcGVyLXBpbmstYTcwMDogI2M1MTE2MjsKCiAgICAgIC0tcGFwZXItcHVycGxlLTUwOiAjZjNlNWY1OwogICAgICAtLXBhcGVyLXB1cnBsZS0xMDA6ICNlMWJlZTc7CiAgICAgIC0tcGFwZXItcHVycGxlLTIwMDogI2NlOTNkODsKICAgICAgLS1wYXBlci1wdXJwbGUtMzAwOiAjYmE2OGM4OwogICAgICAtLXBhcGVyLXB1cnBsZS00MDA6ICNhYjQ3YmM7CiAgICAgIC0tcGFwZXItcHVycGxlLTUwMDogIzljMjdiMDsKICAgICAgLS1wYXBlci1wdXJwbGUtNjAwOiAjOGUyNGFhOwogICAgICAtLXBhcGVyLXB1cnBsZS03MDA6ICM3YjFmYTI7CiAgICAgIC0tcGFwZXItcHVycGxlLTgwMDogIzZhMWI5YTsKICAgICAgLS1wYXBlci1wdXJwbGUtOTAwOiAjNGExNDhjOwogICAgICAtLXBhcGVyLXB1cnBsZS1hMTAwOiAjZWE4MGZjOwogICAgICAtLXBhcGVyLXB1cnBsZS1hMjAwOiAjZTA0MGZiOwogICAgICAtLXBhcGVyLXB1cnBsZS1hNDAwOiAjZDUwMGY5OwogICAgICAtLXBhcGVyLXB1cnBsZS1hNzAwOiAjYWEwMGZmOwoKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS01MDogI2VkZTdmNjsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS0xMDA6ICNkMWM0ZTk7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtMjAwOiAjYjM5ZGRiOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTMwMDogIzk1NzVjZDsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS00MDA6ICM3ZTU3YzI7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtNTAwOiAjNjczYWI3OwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTYwMDogIzVlMzViMTsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS03MDA6ICM1MTJkYTg7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtODAwOiAjNDUyN2EwOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTkwMDogIzMxMWI5MjsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS1hMTAwOiAjYjM4OGZmOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLWEyMDA6ICM3YzRkZmY7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtYTQwMDogIzY1MWZmZjsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS1hNzAwOiAjNjIwMGVhOwoKICAgICAgLS1wYXBlci1pbmRpZ28tNTA6ICNlOGVhZjY7CiAgICAgIC0tcGFwZXItaW5kaWdvLTEwMDogI2M1Y2FlOTsKICAgICAgLS1wYXBlci1pbmRpZ28tMjAwOiAjOWZhOGRhOwogICAgICAtLXBhcGVyLWluZGlnby0zMDA6ICM3OTg2Y2I7CiAgICAgIC0tcGFwZXItaW5kaWdvLTQwMDogIzVjNmJjMDsKICAgICAgLS1wYXBlci1pbmRpZ28tNTAwOiAjM2Y1MWI1OwogICAgICAtLXBhcGVyLWluZGlnby02MDA6ICMzOTQ5YWI7CiAgICAgIC0tcGFwZXItaW5kaWdvLTcwMDogIzMwM2Y5ZjsKICAgICAgLS1wYXBlci1pbmRpZ28tODAwOiAjMjgzNTkzOwogICAgICAtLXBhcGVyLWluZGlnby05MDA6ICMxYTIzN2U7CiAgICAgIC0tcGFwZXItaW5kaWdvLWExMDA6ICM4YzllZmY7CiAgICAgIC0tcGFwZXItaW5kaWdvLWEyMDA6ICM1MzZkZmU7CiAgICAgIC0tcGFwZXItaW5kaWdvLWE0MDA6ICMzZDVhZmU7CiAgICAgIC0tcGFwZXItaW5kaWdvLWE3MDA6ICMzMDRmZmU7CgogICAgICAtLXBhcGVyLWJsdWUtNTA6ICNlM2YyZmQ7CiAgICAgIC0tcGFwZXItYmx1ZS0xMDA6ICNiYmRlZmI7CiAgICAgIC0tcGFwZXItYmx1ZS0yMDA6ICM5MGNhZjk7CiAgICAgIC0tcGFwZXItYmx1ZS0zMDA6ICM2NGI1ZjY7CiAgICAgIC0tcGFwZXItYmx1ZS00MDA6ICM0MmE1ZjU7CiAgICAgIC0tcGFwZXItYmx1ZS01MDA6ICMyMTk2ZjM7CiAgICAgIC0tcGFwZXItYmx1ZS02MDA6ICMxZTg4ZTU7CiAgICAgIC0tcGFwZXItYmx1ZS03MDA6ICMxOTc2ZDI7CiAgICAgIC0tcGFwZXItYmx1ZS04MDA6ICMxNTY1YzA7CiAgICAgIC0tcGFwZXItYmx1ZS05MDA6ICMwZDQ3YTE7CiAgICAgIC0tcGFwZXItYmx1ZS1hMTAwOiAjODJiMWZmOwogICAgICAtLXBhcGVyLWJsdWUtYTIwMDogIzQ0OGFmZjsKICAgICAgLS1wYXBlci1ibHVlLWE0MDA6ICMyOTc5ZmY7CiAgICAgIC0tcGFwZXItYmx1ZS1hNzAwOiAjMjk2MmZmOwoKICAgICAgLS1wYXBlci1saWdodC1ibHVlLTUwOiAjZTFmNWZlOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtMTAwOiAjYjNlNWZjOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtMjAwOiAjODFkNGZhOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtMzAwOiAjNGZjM2Y3OwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtNDAwOiAjMjliNmY2OwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtNTAwOiAjMDNhOWY0OwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtNjAwOiAjMDM5YmU1OwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtNzAwOiAjMDI4OGQxOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtODAwOiAjMDI3N2JkOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtOTAwOiAjMDE1NzliOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtYTEwMDogIzgwZDhmZjsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLWEyMDA6ICM0MGM0ZmY7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS1hNDAwOiAjMDBiMGZmOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtYTcwMDogIzAwOTFlYTsKCiAgICAgIC0tcGFwZXItY3lhbi01MDogI2UwZjdmYTsKICAgICAgLS1wYXBlci1jeWFuLTEwMDogI2IyZWJmMjsKICAgICAgLS1wYXBlci1jeWFuLTIwMDogIzgwZGVlYTsKICAgICAgLS1wYXBlci1jeWFuLTMwMDogIzRkZDBlMTsKICAgICAgLS1wYXBlci1jeWFuLTQwMDogIzI2YzZkYTsKICAgICAgLS1wYXBlci1jeWFuLTUwMDogIzAwYmNkNDsKICAgICAgLS1wYXBlci1jeWFuLTYwMDogIzAwYWNjMTsKICAgICAgLS1wYXBlci1jeWFuLTcwMDogIzAwOTdhNzsKICAgICAgLS1wYXBlci1jeWFuLTgwMDogIzAwODM4ZjsKICAgICAgLS1wYXBlci1jeWFuLTkwMDogIzAwNjA2NDsKICAgICAgLS1wYXBlci1jeWFuLWExMDA6ICM4NGZmZmY7CiAgICAgIC0tcGFwZXItY3lhbi1hMjAwOiAjMThmZmZmOwogICAgICAtLXBhcGVyLWN5YW4tYTQwMDogIzAwZTVmZjsKICAgICAgLS1wYXBlci1jeWFuLWE3MDA6ICMwMGI4ZDQ7CgogICAgICAtLXBhcGVyLXRlYWwtNTA6ICNlMGYyZjE7CiAgICAgIC0tcGFwZXItdGVhbC0xMDA6ICNiMmRmZGI7CiAgICAgIC0tcGFwZXItdGVhbC0yMDA6ICM4MGNiYzQ7CiAgICAgIC0tcGFwZXItdGVhbC0zMDA6ICM0ZGI2YWM7CiAgICAgIC0tcGFwZXItdGVhbC00MDA6ICMyNmE2OWE7CiAgICAgIC0tcGFwZXItdGVhbC01MDA6ICMwMDk2ODg7CiAgICAgIC0tcGFwZXItdGVhbC02MDA6ICMwMDg5N2I7CiAgICAgIC0tcGFwZXItdGVhbC03MDA6ICMwMDc5NmI7CiAgICAgIC0tcGFwZXItdGVhbC04MDA6ICMwMDY5NWM7CiAgICAgIC0tcGFwZXItdGVhbC05MDA6ICMwMDRkNDA7CiAgICAgIC0tcGFwZXItdGVhbC1hMTAwOiAjYTdmZmViOwogICAgICAtLXBhcGVyLXRlYWwtYTIwMDogIzY0ZmZkYTsKICAgICAgLS1wYXBlci10ZWFsLWE0MDA6ICMxZGU5YjY7CiAgICAgIC0tcGFwZXItdGVhbC1hNzAwOiAjMDBiZmE1OwoKICAgICAgLS1wYXBlci1ncmVlbi01MDogI2U4ZjVlOTsKICAgICAgLS1wYXBlci1ncmVlbi0xMDA6ICNjOGU2Yzk7CiAgICAgIC0tcGFwZXItZ3JlZW4tMjAwOiAjYTVkNmE3OwogICAgICAtLXBhcGVyLWdyZWVuLTMwMDogIzgxYzc4NDsKICAgICAgLS1wYXBlci1ncmVlbi00MDA6ICM2NmJiNmE7CiAgICAgIC0tcGFwZXItZ3JlZW4tNTAwOiAjNGNhZjUwOwogICAgICAtLXBhcGVyLWdyZWVuLTYwMDogIzQzYTA0NzsKICAgICAgLS1wYXBlci1ncmVlbi03MDA6ICMzODhlM2M7CiAgICAgIC0tcGFwZXItZ3JlZW4tODAwOiAjMmU3ZDMyOwogICAgICAtLXBhcGVyLWdyZWVuLTkwMDogIzFiNWUyMDsKICAgICAgLS1wYXBlci1ncmVlbi1hMTAwOiAjYjlmNmNhOwogICAgICAtLXBhcGVyLWdyZWVuLWEyMDA6ICM2OWYwYWU7CiAgICAgIC0tcGFwZXItZ3JlZW4tYTQwMDogIzAwZTY3NjsKICAgICAgLS1wYXBlci1ncmVlbi1hNzAwOiAjMDBjODUzOwoKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi01MDogI2YxZjhlOTsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi0xMDA6ICNkY2VkYzg7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tMjAwOiAjYzVlMWE1OwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTMwMDogI2FlZDU4MTsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi00MDA6ICM5Y2NjNjU7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tNTAwOiAjOGJjMzRhOwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTYwMDogIzdjYjM0MjsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi03MDA6ICM2ODlmMzg7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tODAwOiAjNTU4YjJmOwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTkwMDogIzMzNjkxZTsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi1hMTAwOiAjY2NmZjkwOwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLWEyMDA6ICNiMmZmNTk7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tYTQwMDogIzc2ZmYwMzsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi1hNzAwOiAjNjRkZDE3OwoKICAgICAgLS1wYXBlci1saW1lLTUwOiAjZjlmYmU3OwogICAgICAtLXBhcGVyLWxpbWUtMTAwOiAjZjBmNGMzOwogICAgICAtLXBhcGVyLWxpbWUtMjAwOiAjZTZlZTljOwogICAgICAtLXBhcGVyLWxpbWUtMzAwOiAjZGNlNzc1OwogICAgICAtLXBhcGVyLWxpbWUtNDAwOiAjZDRlMTU3OwogICAgICAtLXBhcGVyLWxpbWUtNTAwOiAjY2RkYzM5OwogICAgICAtLXBhcGVyLWxpbWUtNjAwOiAjYzBjYTMzOwogICAgICAtLXBhcGVyLWxpbWUtNzAwOiAjYWZiNDJiOwogICAgICAtLXBhcGVyLWxpbWUtODAwOiAjOWU5ZDI0OwogICAgICAtLXBhcGVyLWxpbWUtOTAwOiAjODI3NzE3OwogICAgICAtLXBhcGVyLWxpbWUtYTEwMDogI2Y0ZmY4MTsKICAgICAgLS1wYXBlci1saW1lLWEyMDA6ICNlZWZmNDE7CiAgICAgIC0tcGFwZXItbGltZS1hNDAwOiAjYzZmZjAwOwogICAgICAtLXBhcGVyLWxpbWUtYTcwMDogI2FlZWEwMDsKCiAgICAgIC0tcGFwZXIteWVsbG93LTUwOiAjZmZmZGU3OwogICAgICAtLXBhcGVyLXllbGxvdy0xMDA6ICNmZmY5YzQ7CiAgICAgIC0tcGFwZXIteWVsbG93LTIwMDogI2ZmZjU5ZDsKICAgICAgLS1wYXBlci15ZWxsb3ctMzAwOiAjZmZmMTc2OwogICAgICAtLXBhcGVyLXllbGxvdy00MDA6ICNmZmVlNTg7CiAgICAgIC0tcGFwZXIteWVsbG93LTUwMDogI2ZmZWIzYjsKICAgICAgLS1wYXBlci15ZWxsb3ctNjAwOiAjZmRkODM1OwogICAgICAtLXBhcGVyLXllbGxvdy03MDA6ICNmYmMwMmQ7CiAgICAgIC0tcGFwZXIteWVsbG93LTgwMDogI2Y5YTgyNTsKICAgICAgLS1wYXBlci15ZWxsb3ctOTAwOiAjZjU3ZjE3OwogICAgICAtLXBhcGVyLXllbGxvdy1hMTAwOiAjZmZmZjhkOwogICAgICAtLXBhcGVyLXllbGxvdy1hMjAwOiAjZmZmZjAwOwogICAgICAtLXBhcGVyLXllbGxvdy1hNDAwOiAjZmZlYTAwOwogICAgICAtLXBhcGVyLXllbGxvdy1hNzAwOiAjZmZkNjAwOwoKICAgICAgLS1wYXBlci1hbWJlci01MDogI2ZmZjhlMTsKICAgICAgLS1wYXBlci1hbWJlci0xMDA6ICNmZmVjYjM7CiAgICAgIC0tcGFwZXItYW1iZXItMjAwOiAjZmZlMDgyOwogICAgICAtLXBhcGVyLWFtYmVyLTMwMDogI2ZmZDU0ZjsKICAgICAgLS1wYXBlci1hbWJlci00MDA6ICNmZmNhMjg7CiAgICAgIC0tcGFwZXItYW1iZXItNTAwOiAjZmZjMTA3OwogICAgICAtLXBhcGVyLWFtYmVyLTYwMDogI2ZmYjMwMDsKICAgICAgLS1wYXBlci1hbWJlci03MDA6ICNmZmEwMDA7CiAgICAgIC0tcGFwZXItYW1iZXItODAwOiAjZmY4ZjAwOwogICAgICAtLXBhcGVyLWFtYmVyLTkwMDogI2ZmNmYwMDsKICAgICAgLS1wYXBlci1hbWJlci1hMTAwOiAjZmZlNTdmOwogICAgICAtLXBhcGVyLWFtYmVyLWEyMDA6ICNmZmQ3NDA7CiAgICAgIC0tcGFwZXItYW1iZXItYTQwMDogI2ZmYzQwMDsKICAgICAgLS1wYXBlci1hbWJlci1hNzAwOiAjZmZhYjAwOwoKICAgICAgLS1wYXBlci1vcmFuZ2UtNTA6ICNmZmYzZTA7CiAgICAgIC0tcGFwZXItb3JhbmdlLTEwMDogI2ZmZTBiMjsKICAgICAgLS1wYXBlci1vcmFuZ2UtMjAwOiAjZmZjYzgwOwogICAgICAtLXBhcGVyLW9yYW5nZS0zMDA6ICNmZmI3NGQ7CiAgICAgIC0tcGFwZXItb3JhbmdlLTQwMDogI2ZmYTcyNjsKICAgICAgLS1wYXBlci1vcmFuZ2UtNTAwOiAjZmY5ODAwOwogICAgICAtLXBhcGVyLW9yYW5nZS02MDA6ICNmYjhjMDA7CiAgICAgIC0tcGFwZXItb3JhbmdlLTcwMDogI2Y1N2MwMDsKICAgICAgLS1wYXBlci1vcmFuZ2UtODAwOiAjZWY2YzAwOwogICAgICAtLXBhcGVyLW9yYW5nZS05MDA6ICNlNjUxMDA7CiAgICAgIC0tcGFwZXItb3JhbmdlLWExMDA6ICNmZmQxODA7CiAgICAgIC0tcGFwZXItb3JhbmdlLWEyMDA6ICNmZmFiNDA7CiAgICAgIC0tcGFwZXItb3JhbmdlLWE0MDA6ICNmZjkxMDA7CiAgICAgIC0tcGFwZXItb3JhbmdlLWE3MDA6ICNmZjY1MDA7CgogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTUwOiAjZmJlOWU3OwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTEwMDogI2ZmY2NiYzsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS0yMDA6ICNmZmFiOTE7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtMzAwOiAjZmY4YTY1OwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTQwMDogI2ZmNzA0MzsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS01MDA6ICNmZjU3MjI7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtNjAwOiAjZjQ1MTFlOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTcwMDogI2U2NGExOTsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS04MDA6ICNkODQzMTU7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtOTAwOiAjYmYzNjBjOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLWExMDA6ICNmZjllODA7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtYTIwMDogI2ZmNmU0MDsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS1hNDAwOiAjZmYzZDAwOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLWE3MDA6ICNkZDJjMDA7CgogICAgICAtLXBhcGVyLWJyb3duLTUwOiAjZWZlYmU5OwogICAgICAtLXBhcGVyLWJyb3duLTEwMDogI2Q3Y2NjODsKICAgICAgLS1wYXBlci1icm93bi0yMDA6ICNiY2FhYTQ7CiAgICAgIC0tcGFwZXItYnJvd24tMzAwOiAjYTE4ODdmOwogICAgICAtLXBhcGVyLWJyb3duLTQwMDogIzhkNmU2MzsKICAgICAgLS1wYXBlci1icm93bi01MDA6ICM3OTU1NDg7CiAgICAgIC0tcGFwZXItYnJvd24tNjAwOiAjNmQ0YzQxOwogICAgICAtLXBhcGVyLWJyb3duLTcwMDogIzVkNDAzNzsKICAgICAgLS1wYXBlci1icm93bi04MDA6ICM0ZTM0MmU7CiAgICAgIC0tcGFwZXItYnJvd24tOTAwOiAjM2UyNzIzOwoKICAgICAgLS1wYXBlci1ncmV5LTUwOiAjZmFmYWZhOwogICAgICAtLXBhcGVyLWdyZXktMTAwOiAjZjVmNWY1OwogICAgICAtLXBhcGVyLWdyZXktMjAwOiAjZWVlZWVlOwogICAgICAtLXBhcGVyLWdyZXktMzAwOiAjZTBlMGUwOwogICAgICAtLXBhcGVyLWdyZXktNDAwOiAjYmRiZGJkOwogICAgICAtLXBhcGVyLWdyZXktNTAwOiAjOWU5ZTllOwogICAgICAtLXBhcGVyLWdyZXktNjAwOiAjNzU3NTc1OwogICAgICAtLXBhcGVyLWdyZXktNzAwOiAjNjE2MTYxOwogICAgICAtLXBhcGVyLWdyZXktODAwOiAjNDI0MjQyOwogICAgICAtLXBhcGVyLWdyZXktOTAwOiAjMjEyMTIxOwoKICAgICAgLS1wYXBlci1ibHVlLWdyZXktNTA6ICNlY2VmZjE7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTEwMDogI2NmZDhkYzsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktMjAwOiAjYjBiZWM1OwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS0zMDA6ICM5MGE0YWU7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTQwMDogIzc4OTA5YzsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktNTAwOiAjNjA3ZDhiOwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS02MDA6ICM1NDZlN2E7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTcwMDogIzQ1NWE2NDsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktODAwOiAjMzc0NzRmOwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS05MDA6ICMyNjMyMzg7CgogICAgICAvKiBvcGFjaXR5IGZvciBkYXJrIHRleHQgb24gYSBsaWdodCBiYWNrZ3JvdW5kICovCiAgICAgIC0tZGFyay1kaXZpZGVyLW9wYWNpdHk6IDAuMTI7CiAgICAgIC0tZGFyay1kaXNhYmxlZC1vcGFjaXR5OiAwLjM4OyAvKiBvciBoaW50IHRleHQgb3IgaWNvbiAqLwogICAgICAtLWRhcmstc2Vjb25kYXJ5LW9wYWNpdHk6IDAuNTQ7CiAgICAgIC0tZGFyay1wcmltYXJ5LW9wYWNpdHk6IDAuODc7CgogICAgICAvKiBvcGFjaXR5IGZvciBsaWdodCB0ZXh0IG9uIGEgZGFyayBiYWNrZ3JvdW5kICovCiAgICAgIC0tbGlnaHQtZGl2aWRlci1vcGFjaXR5OiAwLjEyOwogICAgICAtLWxpZ2h0LWRpc2FibGVkLW9wYWNpdHk6IDAuMzsgLyogb3IgaGludCB0ZXh0IG9yIGljb24gKi8KICAgICAgLS1saWdodC1zZWNvbmRhcnktb3BhY2l0eTogMC43OwogICAgICAtLWxpZ2h0LXByaW1hcnktb3BhY2l0eTogMS4wOwoKICAgIH0KCiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+CmA7cDB0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQocDB0LmNvbnRlbnQpO3ZhciBkMHQ9UWAKPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBodG1sIHsKICAgICAgLyoKICAgICAgICogWW91IGNhbiB1c2UgdGhlc2UgZ2VuZXJpYyB2YXJpYWJsZXMgaW4geW91ciBlbGVtZW50cyBmb3IgZWFzeSB0aGVtaW5nLgogICAgICAgKiBGb3IgZXhhbXBsZSwgaWYgYWxsIHlvdXIgZWxlbWVudHMgdXNlIFxgLS1wcmltYXJ5LXRleHQtY29sb3JcYCBhcyBpdHMgbWFpbgogICAgICAgKiBjb2xvciwgdGhlbiBzd2l0Y2hpbmcgZnJvbSBhIGxpZ2h0IHRvIGEgZGFyayB0aGVtZSBpcyBqdXN0IGEgbWF0dGVyIG9mCiAgICAgICAqIGNoYW5naW5nIHRoZSB2YWx1ZSBvZiBcYC0tcHJpbWFyeS10ZXh0LWNvbG9yXGAgaW4geW91ciBhcHBsaWNhdGlvbi4KICAgICAgICovCiAgICAgIC0tcHJpbWFyeS10ZXh0LWNvbG9yOiB2YXIoLS1saWdodC10aGVtZS10ZXh0LWNvbG9yKTsKICAgICAgLS1wcmltYXJ5LWJhY2tncm91bmQtY29sb3I6IHZhcigtLWxpZ2h0LXRoZW1lLWJhY2tncm91bmQtY29sb3IpOwogICAgICAtLXNlY29uZGFyeS10ZXh0LWNvbG9yOiB2YXIoLS1saWdodC10aGVtZS1zZWNvbmRhcnktY29sb3IpOwogICAgICAtLWRpc2FibGVkLXRleHQtY29sb3I6IHZhcigtLWxpZ2h0LXRoZW1lLWRpc2FibGVkLWNvbG9yKTsKICAgICAgLS1kaXZpZGVyLWNvbG9yOiB2YXIoLS1saWdodC10aGVtZS1kaXZpZGVyLWNvbG9yKTsKICAgICAgLS1lcnJvci1jb2xvcjogdmFyKC0tcGFwZXItZGVlcC1vcmFuZ2UtYTcwMCk7CgogICAgICAvKgogICAgICAgKiBQcmltYXJ5IGFuZCBhY2NlbnQgY29sb3JzLiBBbHNvIHNlZSBjb2xvci5qcyBmb3IgbW9yZSBjb2xvcnMuCiAgICAgICAqLwogICAgICAtLXByaW1hcnktY29sb3I6IHZhcigtLXBhcGVyLWluZGlnby01MDApOwogICAgICAtLWxpZ2h0LXByaW1hcnktY29sb3I6IHZhcigtLXBhcGVyLWluZGlnby0xMDApOwogICAgICAtLWRhcmstcHJpbWFyeS1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTcwMCk7CgogICAgICAtLWFjY2VudC1jb2xvcjogdmFyKC0tcGFwZXItcGluay1hMjAwKTsKICAgICAgLS1saWdodC1hY2NlbnQtY29sb3I6IHZhcigtLXBhcGVyLXBpbmstYTEwMCk7CiAgICAgIC0tZGFyay1hY2NlbnQtY29sb3I6IHZhcigtLXBhcGVyLXBpbmstYTQwMCk7CgoKICAgICAgLyoKICAgICAgICogTWF0ZXJpYWwgRGVzaWduIExpZ2h0IGJhY2tncm91bmQgdGhlbWUKICAgICAgICovCiAgICAgIC0tbGlnaHQtdGhlbWUtYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjsKICAgICAgLS1saWdodC10aGVtZS1iYXNlLWNvbG9yOiAjMDAwMDAwOwogICAgICAtLWxpZ2h0LXRoZW1lLXRleHQtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktOTAwKTsKICAgICAgLS1saWdodC10aGVtZS1zZWNvbmRhcnktY29sb3I6ICM3MzczNzM7ICAvKiBmb3Igc2Vjb25kYXJ5IHRleHQgYW5kIGljb25zICovCiAgICAgIC0tbGlnaHQtdGhlbWUtZGlzYWJsZWQtY29sb3I6ICM5YjliOWI7ICAvKiBkaXNhYmxlZC9oaW50IHRleHQgKi8KICAgICAgLS1saWdodC10aGVtZS1kaXZpZGVyLWNvbG9yOiAjZGJkYmRiOwoKICAgICAgLyoKICAgICAgICogTWF0ZXJpYWwgRGVzaWduIERhcmsgYmFja2dyb3VuZCB0aGVtZQogICAgICAgKi8KICAgICAgLS1kYXJrLXRoZW1lLWJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktOTAwKTsKICAgICAgLS1kYXJrLXRoZW1lLWJhc2UtY29sb3I6ICNmZmZmZmY7CiAgICAgIC0tZGFyay10aGVtZS10ZXh0LWNvbG9yOiAjZmZmZmZmOwogICAgICAtLWRhcmstdGhlbWUtc2Vjb25kYXJ5LWNvbG9yOiAjYmNiY2JjOyAgLyogZm9yIHNlY29uZGFyeSB0ZXh0IGFuZCBpY29ucyAqLwogICAgICAtLWRhcmstdGhlbWUtZGlzYWJsZWQtY29sb3I6ICM2NDY0NjQ7ICAvKiBkaXNhYmxlZC9oaW50IHRleHQgKi8KICAgICAgLS1kYXJrLXRoZW1lLWRpdmlkZXItY29sb3I6ICMzYzNjM2M7CgogICAgICAvKgogICAgICAgKiBEZXByZWNhdGVkIHZhbHVlcyBiZWNhdXNlIG9mIHRoZWlyIGNvbmZ1c2luZyBuYW1lcy4KICAgICAgICovCiAgICAgIC0tdGV4dC1wcmltYXJ5LWNvbG9yOiB2YXIoLS1kYXJrLXRoZW1lLXRleHQtY29sb3IpOwogICAgICAtLWRlZmF1bHQtcHJpbWFyeS1jb2xvcjogdmFyKC0tcHJpbWFyeS1jb2xvcik7CiAgICB9CiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+YDtkMHQuc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7Iik7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChkMHQuY29udGVudCk7dmFyIFRoPXtwcm9wZXJ0aWVzOntuYW1lOnt0eXBlOlN0cmluZ30sdmFsdWU6e25vdGlmeTohMCx0eXBlOlN0cmluZ30scmVxdWlyZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LGF0dGFjaGVkOmZ1bmN0aW9uKCl7fSxkZXRhY2hlZDpmdW5jdGlvbigpe319O3ZhciBoVz1udWxsLENoPXtwcm9wZXJ0aWVzOnt2YWxpZGF0b3I6e3R5cGU6U3RyaW5nfSxpbnZhbGlkOntub3RpZnk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwLHR5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX2ludmFsaWRDaGFuZ2VkIn19LHJlZ2lzdGVyZWQ6ZnVuY3Rpb24oKXtoVz1uZXcgZ28oe3R5cGU6InZhbGlkYXRvciJ9KX0sX2ludmFsaWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5pbnZhbGlkP3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWludmFsaWQiLCJ0cnVlIik6dGhpcy5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtaW52YWxpZCIpfSxnZXQgX3ZhbGlkYXRvcigpe3JldHVybiBoVyYmaFcuYnlLZXkodGhpcy52YWxpZGF0b3IpfSxoYXNWYWxpZGF0b3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmFsaWRhdG9yIT1udWxsfSx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT09PXZvaWQgMCYmdGhpcy52YWx1ZSE9PXZvaWQgMD90aGlzLmludmFsaWQ9IXRoaXMuX2dldFZhbGlkaXR5KHRoaXMudmFsdWUpOnRoaXMuaW52YWxpZD0hdGhpcy5fZ2V0VmFsaWRpdHkoZSksIXRoaXMuaW52YWxpZH0sX2dldFZhbGlkaXR5OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmhhc1ZhbGlkYXRvcigpP3RoaXMuX3ZhbGlkYXRvci52YWxpZGF0ZShlKTohMH19O3ZhciBmVz17cHJvcGVydGllczp7Y2hlY2tlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9jaGVja2VkQ2hhbmdlZCJ9LHRvZ2dsZXM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LHZhbHVlOnt0eXBlOlN0cmluZyx2YWx1ZToib24iLG9ic2VydmVyOiJfdmFsdWVDaGFuZ2VkIn19LG9ic2VydmVyczpbIl9yZXF1aXJlZENoYW5nZWQocmVxdWlyZWQpIl0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX2hhc0lyb25DaGVja2VkRWxlbWVudEJlaGF2aW9yPSEwfSxfZ2V0VmFsaWRpdHk6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fCF0aGlzLnJlcXVpcmVkfHx0aGlzLmNoZWNrZWR9LF9yZXF1aXJlZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLnJlcXVpcmVkP3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXJlcXVpcmVkIiwidHJ1ZSIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLXJlcXVpcmVkIil9LF9jaGVja2VkQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuYWN0aXZlPXRoaXMuY2hlY2tlZCx0aGlzLmZpcmUoImlyb24tY2hhbmdlIil9LF92YWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oKXsodGhpcy52YWx1ZT09PXZvaWQgMHx8dGhpcy52YWx1ZT09PW51bGwpJiYodGhpcy52YWx1ZT0ib24iKX19LG0wdD1bVGgsQ2gsZlddO3ZhciBwRT17b2JzZXJ2ZXJzOlsiX2ZvY3VzZWRDaGFuZ2VkKHJlY2VpdmVkRm9jdXNGcm9tS2V5Ym9hcmQpIl0sX2ZvY3VzZWRDaGFuZ2VkOmZ1bmN0aW9uKGUpe2UmJnRoaXMuZW5zdXJlUmlwcGxlKCksdGhpcy5oYXNSaXBwbGUoKSYmKHRoaXMuX3JpcHBsZS5ob2xkRG93bj1lKX0sX2NyZWF0ZVJpcHBsZTpmdW5jdGlvbigpe3ZhciBlPXN1Ll9jcmVhdGVSaXBwbGUoKTtyZXR1cm4gZS5pZD0iaW5rIixlLnNldEF0dHJpYnV0ZSgiY2VudGVyIiwiIiksZS5jbGFzc0xpc3QuYWRkKCJjaXJjbGUiKSxlfX0sang9W01oLERpLHN1LHBFXTt2YXIgTGJlPXtfY2hlY2tlZENoYW5nZWQ6ZnVuY3Rpb24oKXtmVy5fY2hlY2tlZENoYW5nZWQuY2FsbCh0aGlzKSx0aGlzLmhhc1JpcHBsZSgpJiYodGhpcy5jaGVja2VkP3RoaXMuX3JpcHBsZS5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCIiKTp0aGlzLl9yaXBwbGUucmVtb3ZlQXR0cmlidXRlKCJjaGVja2VkIikpfSxfYnV0dG9uU3RhdGVDaGFuZ2VkOmZ1bmN0aW9uKCl7c3UuX2J1dHRvblN0YXRlQ2hhbmdlZC5jYWxsKHRoaXMpLCF0aGlzLmRpc2FibGVkJiZ0aGlzLmlzQXR0YWNoZWQmJih0aGlzLmNoZWNrZWQ9dGhpcy5hY3RpdmUpfX0sWHg9W2p4LG0wdCxMYmVdO3ZhciBnMHQ9UWA8c3R5bGU+CiAgOmhvc3QgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1zaXplOiB2YXIoLS1wYXBlci1jaGVja2JveC1zaXplLCAxOHB4KTsKICAgIC8qIC0xcHggaXMgYSBzZW50aW5lbCBmb3IgdGhlIGRlZmF1bHQgYW5kIGlzIHJlcGxhY2VkIGluIFxgYXR0YWNoZWRcYC4gKi8KICAgIC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZTogdmFyKC0tcGFwZXItY2hlY2tib3gtaW5rLXNpemUsIC0xcHgpOwogICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgIGxpbmUtaGVpZ2h0OiAwOwogICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKICB9CgogIDpob3N0KFtoaWRkZW5dKSB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgfQoKICA6aG9zdCg6Zm9jdXMpIHsKICAgIG91dGxpbmU6IG5vbmU7CiAgfQoKICAuaGlkZGVuIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQoKICAjY2hlY2tib3hDb250YWluZXIgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSk7CiAgICBoZWlnaHQ6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSk7CiAgICBtaW4td2lkdGg6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSk7CiAgICBtYXJnaW46IHZhcigtLXBhcGVyLWNoZWNrYm94LW1hcmdpbiwgaW5pdGlhbCk7CiAgICB2ZXJ0aWNhbC1hbGlnbjogdmFyKC0tcGFwZXItY2hlY2tib3gtdmVydGljYWwtYWxpZ24sIG1pZGRsZSk7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtYmFja2dyb3VuZC1jb2xvciwgdHJhbnNwYXJlbnQpOwogIH0KCiAgI2luayB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CgogICAgLyogQ2VudGVyIHRoZSByaXBwbGUgaW4gdGhlIGNoZWNrYm94IGJ5IG5lZ2F0aXZlIG9mZnNldHRpbmcgaXQgYnkKICAgICAqIChpbmtXaWR0aCAtIHJpcHBsZVdpZHRoKSAvIDIgKi8KICAgIHRvcDogY2FsYygwcHggLSAodmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSkgLSB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpKSAvIDIpOwogICAgbGVmdDogY2FsYygwcHggLSAodmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSkgLSB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpKSAvIDIpOwogICAgd2lkdGg6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtaW5rLXNpemUpOwogICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LWluay1zaXplKTsKICAgIGNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgIG9wYWNpdHk6IDAuNjsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogIH0KCiAgI2luazpkaXIocnRsKSB7CiAgICByaWdodDogY2FsYygwcHggLSAodmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSkgLSB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpKSAvIDIpOwogICAgbGVmdDogYXV0bzsKICB9CgogICNpbmtbY2hlY2tlZF0gewogICAgY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWNvbG9yKSk7CiAgfQoKICAjY2hlY2tib3ggewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIGhlaWdodDogMTAwJTsKICAgIGJvcmRlcjogc29saWQgMnB4OwogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAtd2Via2l0LXRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMTQwbXMsIGJvcmRlci1jb2xvciAxNDBtczsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMTQwbXMsIGJvcmRlci1jb2xvciAxNDBtczsKCiAgICAtd2Via2l0LXRyYW5zaXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLWNoZWNrYm94LWFuaW1hdGlvbi1kdXJhdGlvbiwgMTQwbXMpOwogICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItY2hlY2tib3gtYW5pbWF0aW9uLWR1cmF0aW9uLCAxNDBtcyk7CiAgfQoKICAvKiBjaGVja2JveCBjaGVja2VkIGFuaW1hdGlvbnMgKi8KICAjY2hlY2tib3guY2hlY2tlZCAjY2hlY2ttYXJrIHsKICAgIC13ZWJraXQtYW5pbWF0aW9uOiBjaGVja21hcmstZXhwYW5kIDE0MG1zIGVhc2Utb3V0IGZvcndhcmRzOwogICAgYW5pbWF0aW9uOiBjaGVja21hcmstZXhwYW5kIDE0MG1zIGVhc2Utb3V0IGZvcndhcmRzOwoKICAgIC13ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci1jaGVja2JveC1hbmltYXRpb24tZHVyYXRpb24sIDE0MG1zKTsKICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItY2hlY2tib3gtYW5pbWF0aW9uLWR1cmF0aW9uLCAxNDBtcyk7CiAgfQoKICBALXdlYmtpdC1rZXlmcmFtZXMgY2hlY2ttYXJrLWV4cGFuZCB7CiAgICAwJSB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwLCAwKSByb3RhdGUoNDVkZWcpOwogICAgfQogICAgMTAwJSB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSByb3RhdGUoNDVkZWcpOwogICAgfQogIH0KCiAgQGtleWZyYW1lcyBjaGVja21hcmstZXhwYW5kIHsKICAgIDAlIHsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLCAwKSByb3RhdGUoNDVkZWcpOwogICAgfQogICAgMTAwJSB7CiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSkgcm90YXRlKDQ1ZGVnKTsKICAgIH0KICB9CgogICNjaGVja2JveC5jaGVja2VkIHsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogIH0KCiAgI2NoZWNrbWFyayB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB3aWR0aDogMzYlOwogICAgaGVpZ2h0OiA3MCU7CiAgICBib3JkZXItc3R5bGU6IHNvbGlkOwogICAgYm9yZGVyLXRvcDogbm9uZTsKICAgIGJvcmRlci1sZWZ0OiBub25lOwogICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiBjYWxjKDIvMTUgKiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpKTsKICAgIGJvcmRlci1ib3R0b20td2lkdGg6IGNhbGMoMi8xNSAqIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSkpOwogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC1jaGVja21hcmstY29sb3IsIHdoaXRlKTsKICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogOTclIDg2JTsKICAgIHRyYW5zZm9ybS1vcmlnaW46IDk3JSA4NiU7CiAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsgLyogcHJvdGVjdCBhZ2FpbnN0IHBhZ2UtbGV2ZWwgYm94LXNpemluZyAqLwogIH0KCiAgI2NoZWNrbWFyazpkaXIocnRsKSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IDUwJSAxNCU7CiAgICB0cmFuc2Zvcm0tb3JpZ2luOiA1MCUgMTQlOwogIH0KCiAgLyogbGFiZWwgKi8KICAjY2hlY2tib3hMYWJlbCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgcGFkZGluZy1sZWZ0OiB2YXIoLS1wYXBlci1jaGVja2JveC1sYWJlbC1zcGFjaW5nLCA4cHgpOwogICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7CiAgICBjb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtbGFiZWwtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgQGFwcGx5IC0tcGFwZXItY2hlY2tib3gtbGFiZWw7CiAgfQoKICA6aG9zdChbY2hlY2tlZF0pICNjaGVja2JveExhYmVsIHsKICAgIGNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC1sYWJlbC1jaGVja2VkLWNvbG9yLCB2YXIoLS1wYXBlci1jaGVja2JveC1sYWJlbC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSkpOwogICAgQGFwcGx5IC0tcGFwZXItY2hlY2tib3gtbGFiZWwtY2hlY2tlZDsKICB9CgogICNjaGVja2JveExhYmVsOmRpcihydGwpIHsKICAgIHBhZGRpbmctcmlnaHQ6IHZhcigtLXBhcGVyLWNoZWNrYm94LWxhYmVsLXNwYWNpbmcsIDhweCk7CiAgICBwYWRkaW5nLWxlZnQ6IDA7CiAgfQoKICAjY2hlY2tib3hMYWJlbFtoaWRkZW5dIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQoKICAvKiBkaXNhYmxlZCBzdGF0ZSAqLwoKICA6aG9zdChbZGlzYWJsZWRdKSAjY2hlY2tib3ggewogICAgb3BhY2l0eTogMC41OwogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogIH0KCiAgOmhvc3QoW2Rpc2FibGVkXVtjaGVja2VkXSkgI2NoZWNrYm94IHsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICBvcGFjaXR5OiAwLjU7CiAgfQoKICA6aG9zdChbZGlzYWJsZWRdKSAjY2hlY2tib3hMYWJlbCAgewogICAgb3BhY2l0eTogMC42NTsKICB9CgogIC8qIGludmFsaWQgc3RhdGUgKi8KICAjY2hlY2tib3guaW52YWxpZDpub3QoLmNoZWNrZWQpIHsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtZXJyb3ItY29sb3IsIHZhcigtLWVycm9yLWNvbG9yKSk7CiAgfQo8L3N0eWxlPgoKPGRpdiBpZD0iY2hlY2tib3hDb250YWluZXIiPgogIDxkaXYgaWQ9ImNoZWNrYm94IiBjbGFzcyQ9IltbX2NvbXB1dGVDaGVja2JveENsYXNzKGNoZWNrZWQsIGludmFsaWQpXV0iPgogICAgPGRpdiBpZD0iY2hlY2ttYXJrIiBjbGFzcyQ9IltbX2NvbXB1dGVDaGVja21hcmtDbGFzcyhjaGVja2VkKV1dIj48L2Rpdj4KICA8L2Rpdj4KPC9kaXY+Cgo8ZGl2IGlkPSJjaGVja2JveExhYmVsIj48c2xvdD48L3Nsb3Q+PC9kaXY+YDtnMHQuc2V0QXR0cmlidXRlKCJzdHJpcC13aGl0ZXNwYWNlIiwiIik7WXQoe190ZW1wbGF0ZTpnMHQsaXM6InBhcGVyLWNoZWNrYm94IixiZWhhdmlvcnM6W1h4XSxob3N0QXR0cmlidXRlczp7cm9sZToiY2hlY2tib3giLCJhcmlhLWNoZWNrZWQiOiExLHRhYmluZGV4OjB9LHByb3BlcnRpZXM6e2FyaWFBY3RpdmVBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJhcmlhLWNoZWNrZWQifX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXtDbSh0aGlzLGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRDb21wdXRlZFN0eWxlVmFsdWUoIi0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSIpLnRyaW0oKTtpZihlPT09Ii0xcHgiKXt2YXIgdD10aGlzLmdldENvbXB1dGVkU3R5bGVWYWx1ZSgiLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUiKS50cmltKCkscj0icHgiLG49dC5tYXRjaCgvW0EtWmEtel0rJC8pO24hPT1udWxsJiYocj1uWzBdKTt2YXIgaT1wYXJzZUZsb2F0KHQpLG89OC8zKmk7cj09PSJweCImJihvPU1hdGguZmxvb3IobyksbyUyIT09aSUyJiZvKyspLHRoaXMudXBkYXRlU3R5bGVzKHsiLS1wYXBlci1jaGVja2JveC1pbmstc2l6ZSI6bytyfSl9fSl9LF9jb21wdXRlQ2hlY2tib3hDbGFzczpmdW5jdGlvbihlLHQpe3ZhciByPSIiO3JldHVybiBlJiYocis9ImNoZWNrZWQgIiksdCYmKHIrPSJpbnZhbGlkIikscn0sX2NvbXB1dGVDaGVja21hcmtDbGFzczpmdW5jdGlvbihlKXtyZXR1cm4gZT8iIjoiaGlkZGVuIn0sX2NyZWF0ZVJpcHBsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yaXBwbGVDb250YWluZXI9dGhpcy4kLmNoZWNrYm94Q29udGFpbmVyLHBFLl9jcmVhdGVSaXBwbGUuY2FsbCh0aGlzKX19KTtpZighd2luZG93LnBvbHltZXJTa2lwTG9hZGluZ0ZvbnRSb2JvdG8pe2xldCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpbmsiKTtlLnJlbD0ic3R5bGVzaGVldCIsZS50eXBlPSJ0ZXh0L2NzcyIsZS5jcm9zc09yaWdpbj0iYW5vbnltb3VzIixlLmhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1Sb2JvdG8rTW9ubzo0MDAsNzAwfFJvYm90bzo0MDAsMzAwLDMwMGl0YWxpYyw0MDBpdGFsaWMsNTAwLDUwMGl0YWxpYyw3MDAsNzAwaXRhbGljIixkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGUpfXZhciBfMHQ9UWA8Y3VzdG9tLXN0eWxlPgogIDxzdHlsZSBpcz0iY3VzdG9tLXN0eWxlIj4KICAgIGh0bWwgewoKICAgICAgLyogU2hhcmVkIFN0eWxlcyAqLwogICAgICAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U6IHsKICAgICAgICBmb250LWZhbWlseTogJ1JvYm90bycsICdOb3RvJywgc2Fucy1zZXJpZjsKICAgICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jb21tb24tY29kZTogewogICAgICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nLCAnQ29uc29sYXMnLCAnTWVubG8nLCBtb25vc3BhY2U7CiAgICAgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtY29tbW9uLWV4cGVuc2l2ZS1rZXJuaW5nOiB7CiAgICAgICAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jb21tb24tbm93cmFwOiB7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9OwoKICAgICAgLyogTWF0ZXJpYWwgRm9udCBTdHlsZXMgKi8KCiAgICAgIC0tcGFwZXItZm9udC1kaXNwbGF5NDogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tbm93cmFwOwoKICAgICAgICBmb250LXNpemU6IDExMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDQ0ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEyMHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWRpc3BsYXkzOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1ub3dyYXA7CgogICAgICAgIGZvbnQtc2l6ZTogNTZweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAyNmVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiA2MHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWRpc3BsYXkyOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKCiAgICAgICAgZm9udC1zaXplOiA0NXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDE4ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDQ4cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtZGlzcGxheTE6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwoKICAgICAgICBmb250LXNpemU6IDM0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wMWVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiA0MHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWhlYWRsaW5lOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKCiAgICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDEyZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDMycHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtdGl0bGU6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKCiAgICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI4cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtc3ViaGVhZDogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CgogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWJvZHkyOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKCiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtYm9keTE6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwoKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jYXB0aW9uOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1ub3dyYXA7CgogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjAxMWVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LW1lbnU6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKCiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtYnV0dG9uOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1ub3dyYXA7CgogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjAxOGVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtY29kZTI6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1jb2RlOwoKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jb2RlMTogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWNvZGU7CgogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICB9OwoKICAgIH0KCiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+YDtfMHQuc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7Iik7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChfMHQuY29udGVudCk7dmFyIHBXPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7cFcuc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7Iik7cFcuaW5uZXJIVE1MPWA8ZG9tLW1vZHVsZSBpZD0icGFwZXItZGlhbG9nLXNoYXJlZC1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG1hcmdpbjogMjRweCA0MHB4OwoKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wYXBlci1kaWFsb2ctYmFja2dyb3VuZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yKSk7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWRpYWxvZy1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtYm9keTE7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi0xNmRwOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWRpYWxvZzsKICAgICAgfQoKICAgICAgOmhvc3QgPiA6OnNsb3R0ZWQoKikgewogICAgICAgIG1hcmdpbi10b3A6IDIwcHg7CiAgICAgICAgcGFkZGluZzogMCAyNHB4OwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZCgubm8tcGFkZGluZykgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIAogICAgICA6aG9zdCA+IDo6c2xvdHRlZCgqOmZpcnN0LWNoaWxkKSB7CiAgICAgICAgbWFyZ2luLXRvcDogMjRweDsKICAgICAgfQoKICAgICAgOmhvc3QgPiA6OnNsb3R0ZWQoKjpsYXN0LWNoaWxkKSB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgfQoKICAgICAgLyogSW4gMS54LCB0aGlzIHNlbGVjdG9yIHdhcyBcYDpob3N0ID4gOjpjb250ZW50IGgyXGAuIEluIDIueCA8c2xvdD4gYWxsb3dzCiAgICAgIHRvIHNlbGVjdCBkaXJlY3QgY2hpbGRyZW4gb25seSwgd2hpY2ggaW5jcmVhc2VzIHRoZSB3ZWlnaHQgb2YgdGhpcwogICAgICBzZWxlY3Rvciwgc28gd2UgaGF2ZSB0byByZS1kZWZpbmUgZmlyc3QtY2hpbGQvbGFzdC1jaGlsZCBtYXJnaW5zIGJlbG93LiAqLwogICAgICA6aG9zdCA+IDo6c2xvdHRlZChoMikgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IDA7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtdGl0bGU7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZGlhbG9nLXRpdGxlOwogICAgICB9CgogICAgICAvKiBBcHBseSBtaXhpbiBhZ2FpbiwgaW4gY2FzZSBpdCBzZXRzIG1hcmdpbi10b3AuICovCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKGgyOmZpcnN0LWNoaWxkKSB7CiAgICAgICAgbWFyZ2luLXRvcDogMjRweDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1kaWFsb2ctdGl0bGU7CiAgICAgIH0KCiAgICAgIC8qIEFwcGx5IG1peGluIGFnYWluLCBpbiBjYXNlIGl0IHNldHMgbWFyZ2luLWJvdHRvbS4gKi8KICAgICAgOmhvc3QgPiA6OnNsb3R0ZWQoaDI6bGFzdC1jaGlsZCkgewogICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZGlhbG9nLXRpdGxlOwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZCgucGFwZXItZGlhbG9nLWJ1dHRvbnMpLAogICAgICA6aG9zdCA+IDo6c2xvdHRlZCguYnV0dG9ucykgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBwYWRkaW5nOiA4cHggOHB4IDhweCAyNHB4OwogICAgICAgIG1hcmdpbjogMDsKCiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWRpYWxvZy1idXR0b24tY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWVuZC1qdXN0aWZpZWQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChwVy5jb250ZW50KTt2YXIgeTB0PXtwcm9wZXJ0aWVzOnthbmltYXRpb25Db25maWc6e3R5cGU6T2JqZWN0fSxlbnRyeUFuaW1hdGlvbjp7b2JzZXJ2ZXI6Il9lbnRyeUFuaW1hdGlvbkNoYW5nZWQiLHR5cGU6U3RyaW5nfSxleGl0QW5pbWF0aW9uOntvYnNlcnZlcjoiX2V4aXRBbmltYXRpb25DaGFuZ2VkIix0eXBlOlN0cmluZ319LF9lbnRyeUFuaW1hdGlvbkNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLmFuaW1hdGlvbkNvbmZpZz10aGlzLmFuaW1hdGlvbkNvbmZpZ3x8e30sdGhpcy5hbmltYXRpb25Db25maWcuZW50cnk9W3tuYW1lOnRoaXMuZW50cnlBbmltYXRpb24sbm9kZTp0aGlzfV19LF9leGl0QW5pbWF0aW9uQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuYW5pbWF0aW9uQ29uZmlnPXRoaXMuYW5pbWF0aW9uQ29uZmlnfHx7fSx0aGlzLmFuaW1hdGlvbkNvbmZpZy5leGl0PVt7bmFtZTp0aGlzLmV4aXRBbmltYXRpb24sbm9kZTp0aGlzfV19LF9jb3B5UHJvcGVydGllczpmdW5jdGlvbihlLHQpe2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXX0sX2Nsb25lQ29uZmlnOmZ1bmN0aW9uKGUpe3ZhciB0PXtpc0Nsb25lOiEwfTtyZXR1cm4gdGhpcy5fY29weVByb3BlcnRpZXModCxlKSx0fSxfZ2V0QW5pbWF0aW9uQ29uZmlnUmVjdXJzaXZlOmZ1bmN0aW9uKGUsdCxyKXtpZighIXRoaXMuYW5pbWF0aW9uQ29uZmlnKXtpZih0aGlzLmFuaW1hdGlvbkNvbmZpZy52YWx1ZSYmdHlwZW9mIHRoaXMuYW5pbWF0aW9uQ29uZmlnLnZhbHVlPT0iZnVuY3Rpb24iKXt0aGlzLl93YXJuKHRoaXMuX2xvZ2YoInBsYXlBbmltYXRpb24iLCJQbGVhc2UgcHV0ICdhbmltYXRpb25Db25maWcnIGluc2lkZSBvZiB5b3VyIGNvbXBvbmVudHMgJ3Byb3BlcnRpZXMnIG9iamVjdCBpbnN0ZWFkIG9mIG91dHNpZGUgb2YgaXQuIikpO3JldHVybn12YXIgbjtpZihlP249dGhpcy5hbmltYXRpb25Db25maWdbZV06bj10aGlzLmFuaW1hdGlvbkNvbmZpZyxBcnJheS5pc0FycmF5KG4pfHwobj1bbl0pLG4pZm9yKHZhciBpLG89MDtpPW5bb107bysrKWlmKGkuYW5pbWF0YWJsZSlpLmFuaW1hdGFibGUuX2dldEFuaW1hdGlvbkNvbmZpZ1JlY3Vyc2l2ZShpLnR5cGV8fGUsdCxyKTtlbHNlIGlmKGkuaWQpe3ZhciBhPXRbaS5pZF07YT8oYS5pc0Nsb25lfHwodFtpLmlkXT10aGlzLl9jbG9uZUNvbmZpZyhhKSxhPXRbaS5pZF0pLHRoaXMuX2NvcHlQcm9wZXJ0aWVzKGEsaSkpOnRbaS5pZF09aX1lbHNlIHIucHVzaChpKX19LGdldEFuaW1hdGlvbkNvbmZpZzpmdW5jdGlvbihlKXt2YXIgdD17fSxyPVtdO3RoaXMuX2dldEFuaW1hdGlvbkNvbmZpZ1JlY3Vyc2l2ZShlLHQscik7Zm9yKHZhciBuIGluIHQpci5wdXNoKHRbbl0pO3JldHVybiByfX07dmFyIGtiZT17X2NvbmZpZ3VyZUFuaW1hdGlvbnM6ZnVuY3Rpb24oZSl7dmFyIHQ9W10scj1bXTtpZihlLmxlbmd0aD4wKWZvcihsZXQgaSxvPTA7aT1lW29dO28rKyl7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpLm5hbWUpO2lmKGEuaXNOZW9uQW5pbWF0aW9uKXtsZXQgcz1udWxsO2EuY29uZmlndXJlfHwoYS5jb25maWd1cmU9ZnVuY3Rpb24obCl7cmV0dXJuIG51bGx9KSxzPWEuY29uZmlndXJlKGkpLHIucHVzaCh7cmVzdWx0OnMsY29uZmlnOmksbmVvbkFuaW1hdGlvbjphfSl9ZWxzZSBjb25zb2xlLndhcm4odGhpcy5pcysiOiIsaS5uYW1lLCJub3QgZm91bmQhIil9Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspe2xldCBpPXJbbl0ucmVzdWx0LG89cltuXS5jb25maWcsYT1yW25dLm5lb25BbmltYXRpb247dHJ5e3R5cGVvZiBpLmNhbmNlbCE9ImZ1bmN0aW9uIiYmKGk9ZG9jdW1lbnQudGltZWxpbmUucGxheShpKSl9Y2F0Y2gocyl7aT1udWxsLGNvbnNvbGUud2FybigiQ291bGRudCBwbGF5IiwiKCIsby5uYW1lLCIpLiIscyl9aSYmdC5wdXNoKHtuZW9uQW5pbWF0aW9uOmEsY29uZmlnOm8sYW5pbWF0aW9uOml9KX1yZXR1cm4gdH0sX3Nob3VsZENvbXBsZXRlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0hMCxyPTA7cjxlLmxlbmd0aDtyKyspaWYoZVtyXS5hbmltYXRpb24ucGxheVN0YXRlIT0iZmluaXNoZWQiKXt0PSExO2JyZWFrfXJldHVybiB0fSxfY29tcGxldGU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspZVt0XS5uZW9uQW5pbWF0aW9uLmNvbXBsZXRlKGVbdF0uY29uZmlnKTtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyllW3RdLmFuaW1hdGlvbi5jYW5jZWwoKX0scGxheUFuaW1hdGlvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuZ2V0QW5pbWF0aW9uQ29uZmlnKGUpO2lmKCEhcil7dGhpcy5fYWN0aXZlPXRoaXMuX2FjdGl2ZXx8e30sdGhpcy5fYWN0aXZlW2VdJiYodGhpcy5fY29tcGxldGUodGhpcy5fYWN0aXZlW2VdKSxkZWxldGUgdGhpcy5fYWN0aXZlW2VdKTt2YXIgbj10aGlzLl9jb25maWd1cmVBbmltYXRpb25zKHIpO2lmKG4ubGVuZ3RoPT0wKXt0aGlzLmZpcmUoIm5lb24tYW5pbWF0aW9uLWZpbmlzaCIsdCx7YnViYmxlczohMX0pO3JldHVybn10aGlzLl9hY3RpdmVbZV09bjtmb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKyluW2ldLmFuaW1hdGlvbi5vbmZpbmlzaD1mdW5jdGlvbigpe3RoaXMuX3Nob3VsZENvbXBsZXRlKG4pJiYodGhpcy5fY29tcGxldGUobiksZGVsZXRlIHRoaXMuX2FjdGl2ZVtlXSx0aGlzLmZpcmUoIm5lb24tYW5pbWF0aW9uLWZpbmlzaCIsdCx7YnViYmxlczohMX0pKX0uYmluZCh0aGlzKX19LGNhbmNlbEFuaW1hdGlvbjpmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzLl9hY3RpdmUpe3ZhciB0PXRoaXMuX2FjdGl2ZVtlXTtmb3IodmFyIHIgaW4gdCl0W3JdLmFuaW1hdGlvbi5jYW5jZWwoKX10aGlzLl9hY3RpdmU9e319fSxiOT1beTB0LGtiZV07dmFyIHc5LFJiZT0oKT0+e2lmKHc5IT09dm9pZCAwKXJldHVybiB3OTtsZXQgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtPYmplY3QuYXNzaWduKGUuc3R5bGUse292ZXJmbG93OiJhdXRvIixwb3NpdGlvbjoiZml4ZWQiLGxlZnQ6IjBweCIsdG9wOiIwcHgiLG1heFdpZHRoOiIxMDBweCIsbWF4SGVpZ2h0OiIxMDBweCJ9KTtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gdC5zdHlsZS53aWR0aD0iMjAwcHgiLHQuc3R5bGUuaGVpZ2h0PSIyMDBweCIsZS5hcHBlbmRDaGlsZCh0KSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpLHc5PU1hdGguYWJzKGUub2Zmc2V0V2lkdGgtMTAwKT4xP2Uub2Zmc2V0V2lkdGgtZS5jbGllbnRXaWR0aDowLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZSksdzl9LHYwdD17cHJvcGVydGllczp7c2l6aW5nVGFyZ2V0Ont0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzfX0sZml0SW50bzp7dHlwZTpPYmplY3QsdmFsdWU6d2luZG93fSxub092ZXJsYXA6e3R5cGU6Qm9vbGVhbn0scG9zaXRpb25UYXJnZXQ6e3R5cGU6RWxlbWVudH0saG9yaXpvbnRhbEFsaWduOnt0eXBlOlN0cmluZ30sdmVydGljYWxBbGlnbjp7dHlwZTpTdHJpbmd9LGR5bmFtaWNBbGlnbjp7dHlwZTpCb29sZWFufSxob3Jpem9udGFsT2Zmc2V0Ont0eXBlOk51bWJlcix2YWx1ZTowLG5vdGlmeTohMH0sdmVydGljYWxPZmZzZXQ6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwfSxhdXRvRml0T25BdHRhY2g6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sZXhwYW5kU2l6aW5nVGFyZ2V0Rm9yU2Nyb2xsYmFyczp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfZml0SW5mbzp7dHlwZTpPYmplY3R9fSxnZXQgX2ZpdFdpZHRoKCl7dmFyIGU7cmV0dXJuIHRoaXMuZml0SW50bz09PXdpbmRvdz9lPXRoaXMuZml0SW50by5pbm5lcldpZHRoOmU9dGhpcy5maXRJbnRvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoLGV9LGdldCBfZml0SGVpZ2h0KCl7dmFyIGU7cmV0dXJuIHRoaXMuZml0SW50bz09PXdpbmRvdz9lPXRoaXMuZml0SW50by5pbm5lckhlaWdodDplPXRoaXMuZml0SW50by5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQsZX0sZ2V0IF9maXRMZWZ0KCl7dmFyIGU7cmV0dXJuIHRoaXMuZml0SW50bz09PXdpbmRvdz9lPTA6ZT10aGlzLmZpdEludG8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCxlfSxnZXQgX2ZpdFRvcCgpe3ZhciBlO3JldHVybiB0aGlzLmZpdEludG89PT13aW5kb3c/ZT0wOmU9dGhpcy5maXRJbnRvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCxlfSxnZXQgX2RlZmF1bHRQb3NpdGlvblRhcmdldCgpe3ZhciBlPXp0KHRoaXMpLnBhcmVudE5vZGU7cmV0dXJuIGUmJmUubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUmJihlPWUuaG9zdCksZX0sZ2V0IF9sb2NhbGVIb3Jpem9udGFsQWxpZ24oKXtpZih0aGlzLl9pc1JUTCl7aWYodGhpcy5ob3Jpem9udGFsQWxpZ249PT0icmlnaHQiKXJldHVybiJsZWZ0IjtpZih0aGlzLmhvcml6b250YWxBbGlnbj09PSJsZWZ0IilyZXR1cm4icmlnaHQifXJldHVybiB0aGlzLmhvcml6b250YWxBbGlnbn0sZ2V0IF9fc2hvdWxkUG9zaXRpb24oKXtyZXR1cm4odGhpcy5ob3Jpem9udGFsQWxpZ258fHRoaXMudmVydGljYWxBbGlnbikmJnRoaXMucG9zaXRpb25UYXJnZXR9LGdldCBfaXNSVEwoKXtyZXR1cm4gdHlwZW9mIHRoaXMuX21lbW9pemVkSXNSVEw9PSJ1bmRlZmluZWQiJiYodGhpcy5fbWVtb2l6ZWRJc1JUTD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKS5kaXJlY3Rpb249PSJydGwiKSx0aGlzLl9tZW1vaXplZElzUlRMfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMucG9zaXRpb25UYXJnZXQ9dGhpcy5wb3NpdGlvblRhcmdldHx8dGhpcy5fZGVmYXVsdFBvc2l0aW9uVGFyZ2V0LHRoaXMuYXV0b0ZpdE9uQXR0YWNoJiYod2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcykuZGlzcGxheT09PSJub25lIj9zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5maXQoKX0uYmluZCh0aGlzKSk6KHdpbmRvdy5TaGFkeURPTSYmU2hhZHlET00uZmx1c2goKSx0aGlzLmZpdCgpKSl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fX2RlZmVycmVkRml0JiYoY2xlYXJUaW1lb3V0KHRoaXMuX19kZWZlcnJlZEZpdCksdGhpcy5fX2RlZmVycmVkRml0PW51bGwpfSxmaXQ6ZnVuY3Rpb24oKXt0aGlzLnBvc2l0aW9uKCksdGhpcy5jb25zdHJhaW4oKSx0aGlzLmNlbnRlcigpfSxfZGlzY292ZXJJbmZvOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX2ZpdEluZm8pe3ZhciBlPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpLHQ9d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5zaXppbmdUYXJnZXQpO3RoaXMuX2ZpdEluZm89e2lubGluZVN0eWxlOnt0b3A6dGhpcy5zdHlsZS50b3B8fCIiLGxlZnQ6dGhpcy5zdHlsZS5sZWZ0fHwiIixwb3NpdGlvbjp0aGlzLnN0eWxlLnBvc2l0aW9ufHwiIn0sc2l6ZXJJbmxpbmVTdHlsZTp7bWF4V2lkdGg6dGhpcy5zaXppbmdUYXJnZXQuc3R5bGUubWF4V2lkdGh8fCIiLG1heEhlaWdodDp0aGlzLnNpemluZ1RhcmdldC5zdHlsZS5tYXhIZWlnaHR8fCIiLGJveFNpemluZzp0aGlzLnNpemluZ1RhcmdldC5zdHlsZS5ib3hTaXppbmd8fCIifSxwb3NpdGlvbmVkQnk6e3ZlcnRpY2FsbHk6ZS50b3AhPT0iYXV0byI/InRvcCI6ZS5ib3R0b20hPT0iYXV0byI/ImJvdHRvbSI6bnVsbCxob3Jpem9udGFsbHk6ZS5sZWZ0IT09ImF1dG8iPyJsZWZ0IjplLnJpZ2h0IT09ImF1dG8iPyJyaWdodCI6bnVsbH0sc2l6ZWRCeTp7aGVpZ2h0OnQubWF4SGVpZ2h0IT09Im5vbmUiLHdpZHRoOnQubWF4V2lkdGghPT0ibm9uZSIsbWluV2lkdGg6cGFyc2VJbnQodC5taW5XaWR0aCwxMCl8fDAsbWluSGVpZ2h0OnBhcnNlSW50KHQubWluSGVpZ2h0LDEwKXx8MH0sbWFyZ2luOnt0b3A6cGFyc2VJbnQoZS5tYXJnaW5Ub3AsMTApfHwwLHJpZ2h0OnBhcnNlSW50KGUubWFyZ2luUmlnaHQsMTApfHwwLGJvdHRvbTpwYXJzZUludChlLm1hcmdpbkJvdHRvbSwxMCl8fDAsbGVmdDpwYXJzZUludChlLm1hcmdpbkxlZnQsMTApfHwwfX19fSxyZXNldEZpdDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2ZpdEluZm98fHt9O2Zvcih2YXIgdCBpbiBlLnNpemVySW5saW5lU3R5bGUpdGhpcy5zaXppbmdUYXJnZXQuc3R5bGVbdF09ZS5zaXplcklubGluZVN0eWxlW3RdO2Zvcih2YXIgdCBpbiBlLmlubGluZVN0eWxlKXRoaXMuc3R5bGVbdF09ZS5pbmxpbmVTdHlsZVt0XTt0aGlzLl9maXRJbmZvPW51bGx9LHJlZml0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zaXppbmdUYXJnZXQuc2Nyb2xsTGVmdCx0PXRoaXMuc2l6aW5nVGFyZ2V0LnNjcm9sbFRvcDt0aGlzLnJlc2V0Rml0KCksdGhpcy5maXQoKSx0aGlzLnNpemluZ1RhcmdldC5zY3JvbGxMZWZ0PWUsdGhpcy5zaXppbmdUYXJnZXQuc2Nyb2xsVG9wPXR9LHBvc2l0aW9uOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX19zaG91bGRQb3NpdGlvbilyZXR1cm47dGhpcy5fZGlzY292ZXJJbmZvKCksd2luZG93LlNoYWR5RE9NJiZ3aW5kb3cuU2hhZHlET00uZmx1c2goKSx0aGlzLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsdGhpcy5zaXppbmdUYXJnZXQuc3R5bGUuYm94U2l6aW5nPSJib3JkZXItYm94Iix0aGlzLnN0eWxlLmxlZnQ9IjBweCIsdGhpcy5zdHlsZS50b3A9IjBweCI7dmFyIGU9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0PXRoaXMuX19nZXROb3JtYWxpemVkUmVjdCh0aGlzLnBvc2l0aW9uVGFyZ2V0KSxyPXRoaXMuX19nZXROb3JtYWxpemVkUmVjdCh0aGlzLmZpdEludG8pO2xldCBuLGksbyxhO3RoaXMuZXhwYW5kU2l6aW5nVGFyZ2V0Rm9yU2Nyb2xsYmFycyYmKG49dGhpcy5zaXppbmdUYXJnZXQub2Zmc2V0V2lkdGgsaT10aGlzLnNpemluZ1RhcmdldC5vZmZzZXRIZWlnaHQsbz10aGlzLnNpemluZ1RhcmdldC5jbGllbnRXaWR0aCxhPXRoaXMuc2l6aW5nVGFyZ2V0LmNsaWVudEhlaWdodCk7dmFyIHM9dGhpcy5fZml0SW5mby5tYXJnaW4sbD17d2lkdGg6ZS53aWR0aCtzLmxlZnQrcy5yaWdodCxoZWlnaHQ6ZS5oZWlnaHQrcy50b3Arcy5ib3R0b219LGM9dGhpcy5fX2dldFBvc2l0aW9uKHRoaXMuX2xvY2FsZUhvcml6b250YWxBbGlnbix0aGlzLnZlcnRpY2FsQWxpZ24sbCxlLHQsciksdT1jLmxlZnQrcy5sZWZ0LGg9Yy50b3Arcy50b3AsZj1NYXRoLm1pbihyLnJpZ2h0LXMucmlnaHQsdStlLndpZHRoKSxwPU1hdGgubWluKHIuYm90dG9tLXMuYm90dG9tLGgrZS5oZWlnaHQpO3U9TWF0aC5tYXgoci5sZWZ0K3MubGVmdCxNYXRoLm1pbih1LGYtdGhpcy5fZml0SW5mby5zaXplZEJ5Lm1pbldpZHRoKSksaD1NYXRoLm1heChyLnRvcCtzLnRvcCxNYXRoLm1pbihoLHAtdGhpcy5fZml0SW5mby5zaXplZEJ5Lm1pbkhlaWdodCkpO2xldCBkPU1hdGgubWF4KGYtdSx0aGlzLl9maXRJbmZvLnNpemVkQnkubWluV2lkdGgpLGc9TWF0aC5tYXgocC1oLHRoaXMuX2ZpdEluZm8uc2l6ZWRCeS5taW5IZWlnaHQpO3RoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLm1heFdpZHRoPWQrInB4Iix0aGlzLnNpemluZ1RhcmdldC5zdHlsZS5tYXhIZWlnaHQ9ZysicHgiO2xldCBfPXUtZS5sZWZ0LHk9aC1lLnRvcDtpZih0aGlzLnN0eWxlLmxlZnQ9YCR7X31weGAsdGhpcy5zdHlsZS50b3A9YCR7eX1weGAsdGhpcy5leHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzKXtsZXQgeD10aGlzLnNpemluZ1RhcmdldC5vZmZzZXRIZWlnaHQsYj10aGlzLnNpemluZ1RhcmdldC5jbGllbnRIZWlnaHQsUz1pLWEsUD14LWItUztpZihQPjApe2xldCBMPXIuaGVpZ2h0LXMudG9wLXMuYm90dG9tLFI9TWF0aC5taW4oTCxnK1ApO3RoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLm1heEhlaWdodD1gJHtSfXB4YDtsZXQgRj10aGlzLnNpemluZ1RhcmdldC5vZmZzZXRIZWlnaHQsej1GLXgsVTtjLnZlcnRpY2FsQWxpZ249PT0idG9wIj9VPXk6Yy52ZXJ0aWNhbEFsaWduPT09Im1pZGRsZSI/VT15LXovMjpjLnZlcnRpY2FsQWxpZ249PT0iYm90dG9tIiYmKFU9eS16KSxVPU1hdGgubWF4KHIudG9wK3MudG9wLE1hdGgubWluKFUsci5ib3R0b20tcy5ib3R0b20tRikpLHRoaXMuc3R5bGUudG9wPWAke1V9cHhgfWxldCBrPXRoaXMuc2l6aW5nVGFyZ2V0Lm9mZnNldFdpZHRoLE89dGhpcy5zaXppbmdUYXJnZXQuY2xpZW50V2lkdGgsRD1uLW8sST1rLU8tRDtpZihJPjApe2xldCBMPVJiZSgpLFI9ci53aWR0aC1zLmxlZnQtcy5yaWdodCxGPU1hdGgubWluKFIsZCtJLUwpO3RoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLm1heFdpZHRoPWAke0Z9cHhgO2xldCB6PXRoaXMuc2l6aW5nVGFyZ2V0Lm9mZnNldFdpZHRoK0wsVT16LWssVztjLmhvcml6b250YWxBbGlnbj09PSJsZWZ0Ij9XPV86Yy5ob3Jpem9udGFsQWxpZ249PT0iY2VudGVyIj9XPV8tVS8yOmMuaG9yaXpvbnRhbEFsaWduPT09InJpZ2h0IiYmKFc9Xy1VKSxXPU1hdGgubWF4KHIubGVmdCtzLmxlZnQsTWF0aC5taW4oVyxyLnJpZ2h0LXMucmlnaHQteikpLHRoaXMuc3R5bGUubGVmdD1gJHtXfXB4YH19fSxjb25zdHJhaW46ZnVuY3Rpb24oKXtpZighdGhpcy5fX3Nob3VsZFBvc2l0aW9uKXt0aGlzLl9kaXNjb3ZlckluZm8oKTt2YXIgZT10aGlzLl9maXRJbmZvO2UucG9zaXRpb25lZEJ5LnZlcnRpY2FsbHl8fCh0aGlzLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsdGhpcy5zdHlsZS50b3A9IjBweCIpLGUucG9zaXRpb25lZEJ5Lmhvcml6b250YWxseXx8KHRoaXMuc3R5bGUucG9zaXRpb249ImZpeGVkIix0aGlzLnN0eWxlLmxlZnQ9IjBweCIpLHRoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLmJveFNpemluZz0iYm9yZGVyLWJveCI7dmFyIHQ9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtlLnNpemVkQnkuaGVpZ2h0fHx0aGlzLl9fc2l6ZURpbWVuc2lvbih0LGUucG9zaXRpb25lZEJ5LnZlcnRpY2FsbHksInRvcCIsImJvdHRvbSIsIkhlaWdodCIpLGUuc2l6ZWRCeS53aWR0aHx8dGhpcy5fX3NpemVEaW1lbnNpb24odCxlLnBvc2l0aW9uZWRCeS5ob3Jpem9udGFsbHksImxlZnQiLCJyaWdodCIsIldpZHRoIil9fSxfc2l6ZURpbWVuc2lvbjpmdW5jdGlvbihlLHQscixuLGkpe3RoaXMuX19zaXplRGltZW5zaW9uKGUsdCxyLG4saSl9LF9fc2l6ZURpbWVuc2lvbjpmdW5jdGlvbihlLHQscixuLGkpe3ZhciBvPXRoaXMuX2ZpdEluZm8sYT10aGlzLl9fZ2V0Tm9ybWFsaXplZFJlY3QodGhpcy5maXRJbnRvKSxzPWk9PT0iV2lkdGgiP2Eud2lkdGg6YS5oZWlnaHQsbD10PT09bixjPWw/cy1lW25dOmVbcl0sdT1vLm1hcmdpbltsP3I6bl0saD0ib2Zmc2V0IitpLGY9dGhpc1toXS10aGlzLnNpemluZ1RhcmdldFtoXTt0aGlzLnNpemluZ1RhcmdldC5zdHlsZVsibWF4IitpXT1zLXUtYy1mKyJweCJ9LGNlbnRlcjpmdW5jdGlvbigpe2lmKCF0aGlzLl9fc2hvdWxkUG9zaXRpb24pe3RoaXMuX2Rpc2NvdmVySW5mbygpO3ZhciBlPXRoaXMuX2ZpdEluZm8ucG9zaXRpb25lZEJ5O2lmKCEoZS52ZXJ0aWNhbGx5JiZlLmhvcml6b250YWxseSkpe3RoaXMuc3R5bGUucG9zaXRpb249ImZpeGVkIixlLnZlcnRpY2FsbHl8fCh0aGlzLnN0eWxlLnRvcD0iMHB4IiksZS5ob3Jpem9udGFsbHl8fCh0aGlzLnN0eWxlLmxlZnQ9IjBweCIpO3ZhciB0PXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscj10aGlzLl9fZ2V0Tm9ybWFsaXplZFJlY3QodGhpcy5maXRJbnRvKTtpZighZS52ZXJ0aWNhbGx5KXt2YXIgbj1yLnRvcC10LnRvcCsoci5oZWlnaHQtdC5oZWlnaHQpLzI7dGhpcy5zdHlsZS50b3A9bisicHgifWlmKCFlLmhvcml6b250YWxseSl7dmFyIGk9ci5sZWZ0LXQubGVmdCsoci53aWR0aC10LndpZHRoKS8yO3RoaXMuc3R5bGUubGVmdD1pKyJweCJ9fX19LF9fZ2V0Tm9ybWFsaXplZFJlY3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnR8fGU9PT13aW5kb3c/e3RvcDowLGxlZnQ6MCx3aWR0aDp3aW5kb3cuaW5uZXJXaWR0aCxoZWlnaHQ6d2luZG93LmlubmVySGVpZ2h0LHJpZ2h0OndpbmRvdy5pbm5lcldpZHRoLGJvdHRvbTp3aW5kb3cuaW5uZXJIZWlnaHR9OmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9LF9fZ2V0T2Zmc2NyZWVuQXJlYTpmdW5jdGlvbihlLHQscil7dmFyIG49TWF0aC5taW4oMCxlLnRvcCkrTWF0aC5taW4oMCxyLmJvdHRvbS0oZS50b3ArdC5oZWlnaHQpKSxpPU1hdGgubWluKDAsZS5sZWZ0KStNYXRoLm1pbigwLHIucmlnaHQtKGUubGVmdCt0LndpZHRoKSk7cmV0dXJuIE1hdGguYWJzKG4pKnQud2lkdGgrTWF0aC5hYnMoaSkqdC5oZWlnaHR9LF9fZ2V0UG9zaXRpb246ZnVuY3Rpb24oZSx0LHIsbixpLG8pe3ZhciBhPVt7dmVydGljYWxBbGlnbjoidG9wIixob3Jpem9udGFsQWxpZ246ImxlZnQiLHRvcDppLnRvcCt0aGlzLnZlcnRpY2FsT2Zmc2V0LGxlZnQ6aS5sZWZ0K3RoaXMuaG9yaXpvbnRhbE9mZnNldH0se3ZlcnRpY2FsQWxpZ246InRvcCIsaG9yaXpvbnRhbEFsaWduOiJyaWdodCIsdG9wOmkudG9wK3RoaXMudmVydGljYWxPZmZzZXQsbGVmdDppLnJpZ2h0LXIud2lkdGgtdGhpcy5ob3Jpem9udGFsT2Zmc2V0fSx7dmVydGljYWxBbGlnbjoiYm90dG9tIixob3Jpem9udGFsQWxpZ246ImxlZnQiLHRvcDppLmJvdHRvbS1yLmhlaWdodC10aGlzLnZlcnRpY2FsT2Zmc2V0LGxlZnQ6aS5sZWZ0K3RoaXMuaG9yaXpvbnRhbE9mZnNldH0se3ZlcnRpY2FsQWxpZ246ImJvdHRvbSIsaG9yaXpvbnRhbEFsaWduOiJyaWdodCIsdG9wOmkuYm90dG9tLXIuaGVpZ2h0LXRoaXMudmVydGljYWxPZmZzZXQsbGVmdDppLnJpZ2h0LXIud2lkdGgtdGhpcy5ob3Jpem9udGFsT2Zmc2V0fV07aWYodGhpcy5ub092ZXJsYXApe2Zvcih2YXIgcz0wLGw9YS5sZW5ndGg7czxsO3MrKyl7dmFyIGM9e307Zm9yKHZhciB1IGluIGFbc10pY1t1XT1hW3NdW3VdO2EucHVzaChjKX1hWzBdLnRvcD1hWzFdLnRvcCs9aS5oZWlnaHQsYVsyXS50b3A9YVszXS50b3AtPWkuaGVpZ2h0LGFbNF0ubGVmdD1hWzZdLmxlZnQrPWkud2lkdGgsYVs1XS5sZWZ0PWFbN10ubGVmdC09aS53aWR0aH10PXQ9PT0iYXV0byI/bnVsbDp0LGU9ZT09PSJhdXRvIj9udWxsOmUsKCFlfHxlPT09ImNlbnRlciIpJiYoYS5wdXNoKHt2ZXJ0aWNhbEFsaWduOiJ0b3AiLGhvcml6b250YWxBbGlnbjoiY2VudGVyIix0b3A6aS50b3ArdGhpcy52ZXJ0aWNhbE9mZnNldCsodGhpcy5ub092ZXJsYXA/aS5oZWlnaHQ6MCksbGVmdDppLmxlZnQtbi53aWR0aC8yK2kud2lkdGgvMit0aGlzLmhvcml6b250YWxPZmZzZXR9KSxhLnB1c2goe3ZlcnRpY2FsQWxpZ246ImJvdHRvbSIsaG9yaXpvbnRhbEFsaWduOiJjZW50ZXIiLHRvcDppLmJvdHRvbS1yLmhlaWdodC10aGlzLnZlcnRpY2FsT2Zmc2V0LSh0aGlzLm5vT3ZlcmxhcD9pLmhlaWdodDowKSxsZWZ0OmkubGVmdC1uLndpZHRoLzIraS53aWR0aC8yK3RoaXMuaG9yaXpvbnRhbE9mZnNldH0pKSwoIXR8fHQ9PT0ibWlkZGxlIikmJihhLnB1c2goe3ZlcnRpY2FsQWxpZ246Im1pZGRsZSIsaG9yaXpvbnRhbEFsaWduOiJsZWZ0Iix0b3A6aS50b3Atbi5oZWlnaHQvMitpLmhlaWdodC8yK3RoaXMudmVydGljYWxPZmZzZXQsbGVmdDppLmxlZnQrdGhpcy5ob3Jpem9udGFsT2Zmc2V0Kyh0aGlzLm5vT3ZlcmxhcD9pLndpZHRoOjApfSksYS5wdXNoKHt2ZXJ0aWNhbEFsaWduOiJtaWRkbGUiLGhvcml6b250YWxBbGlnbjoicmlnaHQiLHRvcDppLnRvcC1uLmhlaWdodC8yK2kuaGVpZ2h0LzIrdGhpcy52ZXJ0aWNhbE9mZnNldCxsZWZ0OmkucmlnaHQtci53aWR0aC10aGlzLmhvcml6b250YWxPZmZzZXQtKHRoaXMubm9PdmVybGFwP2kud2lkdGg6MCl9KSksdD09PSJtaWRkbGUiJiZlPT09ImNlbnRlciImJmEucHVzaCh7dmVydGljYWxBbGlnbjoibWlkZGxlIixob3Jpem9udGFsQWxpZ246ImNlbnRlciIsdG9wOmkudG9wLW4uaGVpZ2h0LzIraS5oZWlnaHQvMit0aGlzLnZlcnRpY2FsT2Zmc2V0LGxlZnQ6aS5sZWZ0LW4ud2lkdGgvMitpLndpZHRoLzIrdGhpcy5ob3Jpem9udGFsT2Zmc2V0fSk7Zm9yKHZhciBoLHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGY9YVtzXSxwPWYudmVydGljYWxBbGlnbj09PXQsZD1mLmhvcml6b250YWxBbGlnbj09PWU7aWYoIXRoaXMuZHluYW1pY0FsaWduJiYhdGhpcy5ub092ZXJsYXAmJnAmJmQpe2g9ZjticmVha312YXIgZz0oIXR8fHApJiYoIWV8fGQpO2lmKCEoIXRoaXMuZHluYW1pY0FsaWduJiYhZykpe2lmKGYub2Zmc2NyZWVuQXJlYT10aGlzLl9fZ2V0T2Zmc2NyZWVuQXJlYShmLHIsbyksZi5vZmZzY3JlZW5BcmVhPT09MCYmZyl7aD1mO2JyZWFrfWg9aHx8Zjt2YXIgXz1mLm9mZnNjcmVlbkFyZWEtaC5vZmZzY3JlZW5BcmVhOyhfPDB8fF89PT0wJiYocHx8ZCkpJiYoaD1mKX19cmV0dXJuIGh9fTt2YXIgJHg9RWxlbWVudC5wcm90b3R5cGUsUzk9JHgubWF0Y2hlc3x8JHgubWF0Y2hlc1NlbGVjdG9yfHwkeC5tb3pNYXRjaGVzU2VsZWN0b3J8fCR4Lm1zTWF0Y2hlc1NlbGVjdG9yfHwkeC5vTWF0Y2hlc1NlbGVjdG9yfHwkeC53ZWJraXRNYXRjaGVzU2VsZWN0b3IsZFc9Y2xhc3N7Z2V0VGFiYmFibGVOb2Rlcyh0KXt2YXIgcj1bXSxuPXRoaXMuX2NvbGxlY3RUYWJiYWJsZU5vZGVzKHQscik7cmV0dXJuIG4/dGhpcy5fc29ydEJ5VGFiSW5kZXgocik6cn1pc0ZvY3VzYWJsZSh0KXtyZXR1cm4gUzkuY2FsbCh0LCJpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYnV0dG9uLCBvYmplY3QiKT9TOS5jYWxsKHQsIjpub3QoW2Rpc2FibGVkXSkiKTpTOS5jYWxsKHQsImFbaHJlZl0sIGFyZWFbaHJlZl0sIGlmcmFtZSwgW3RhYmluZGV4XSwgW2NvbnRlbnRFZGl0YWJsZV0iKX1pc1RhYmJhYmxlKHQpe3JldHVybiB0aGlzLmlzRm9jdXNhYmxlKHQpJiZTOS5jYWxsKHQsJzpub3QoW3RhYmluZGV4PSItMSJdKScpJiZ0aGlzLl9pc1Zpc2libGUodCl9X25vcm1hbGl6ZWRUYWJJbmRleCh0KXtpZih0aGlzLmlzRm9jdXNhYmxlKHQpKXt2YXIgcj10LmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKXx8MDtyZXR1cm4gTnVtYmVyKHIpfXJldHVybi0xfV9jb2xsZWN0VGFiYmFibGVOb2Rlcyh0LHIpe2lmKHQubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERSlyZXR1cm4hMTt2YXIgbj10O2lmKCF0aGlzLl9pc1Zpc2libGUobikpcmV0dXJuITE7dmFyIGk9dGhpcy5fbm9ybWFsaXplZFRhYkluZGV4KG4pLG89aT4wO2k+PTAmJnIucHVzaChuKTt2YXIgYTtuLmxvY2FsTmFtZT09PSJjb250ZW50Inx8bi5sb2NhbE5hbWU9PT0ic2xvdCI/YT16dChuKS5nZXREaXN0cmlidXRlZE5vZGVzKCk6YT16dChuLnJvb3R8fG4pLmNoaWxkcmVuO2Zvcih2YXIgcz0wO3M8YS5sZW5ndGg7cysrKW89dGhpcy5fY29sbGVjdFRhYmJhYmxlTm9kZXMoYVtzXSxyKXx8bztyZXR1cm4gb31faXNWaXNpYmxlKHQpe3ZhciByPXQuc3R5bGU7cmV0dXJuIHIudmlzaWJpbGl0eSE9PSJoaWRkZW4iJiZyLmRpc3BsYXkhPT0ibm9uZSI/KHI9d2luZG93LmdldENvbXB1dGVkU3R5bGUodCksci52aXNpYmlsaXR5IT09ImhpZGRlbiImJnIuZGlzcGxheSE9PSJub25lIik6ITF9X3NvcnRCeVRhYkluZGV4KHQpe3ZhciByPXQubGVuZ3RoO2lmKHI8MilyZXR1cm4gdDt2YXIgbj1NYXRoLmNlaWwoci8yKSxpPXRoaXMuX3NvcnRCeVRhYkluZGV4KHQuc2xpY2UoMCxuKSksbz10aGlzLl9zb3J0QnlUYWJJbmRleCh0LnNsaWNlKG4pKTtyZXR1cm4gdGhpcy5fbWVyZ2VTb3J0QnlUYWJJbmRleChpLG8pfV9tZXJnZVNvcnRCeVRhYkluZGV4KHQscil7Zm9yKHZhciBuPVtdO3QubGVuZ3RoPjAmJnIubGVuZ3RoPjA7KXRoaXMuX2hhc0xvd2VyVGFiT3JkZXIodFswXSxyWzBdKT9uLnB1c2goci5zaGlmdCgpKTpuLnB1c2godC5zaGlmdCgpKTtyZXR1cm4gbi5jb25jYXQodCxyKX1faGFzTG93ZXJUYWJPcmRlcih0LHIpe3ZhciBuPU1hdGgubWF4KHQudGFiSW5kZXgsMCksaT1NYXRoLm1heChyLnRhYkluZGV4LDApO3JldHVybiBuPT09MHx8aT09PTA/aT5uOm4+aX19LHgwdD1uZXcgZFc7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1pcm9uLW92ZXJsYXktYmFja2Ryb3AtYmFja2dyb3VuZC1jb2xvciwgIzAwMCk7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnM7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgQGFwcGx5IC0taXJvbi1vdmVybGF5LWJhY2tkcm9wOwogICAgICB9CgogICAgICA6aG9zdCgub3BlbmVkKSB7CiAgICAgICAgb3BhY2l0eTogdmFyKC0taXJvbi1vdmVybGF5LWJhY2tkcm9wLW9wYWNpdHksIDAuNik7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICAgICAgQGFwcGx5IC0taXJvbi1vdmVybGF5LWJhY2tkcm9wLW9wZW5lZDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c2xvdD48L3Nsb3Q+CmAsaXM6Imlyb24tb3ZlcmxheS1iYWNrZHJvcCIscHJvcGVydGllczp7b3BlbmVkOntyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsdHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfb3BlbmVkQ2hhbmdlZCJ9fSxsaXN0ZW5lcnM6e3RyYW5zaXRpb25lbmQ6Il9vblRyYW5zaXRpb25lbmQifSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5fX29wZW5lZFJhZj1udWxsfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMub3BlbmVkJiZ0aGlzLl9vcGVuZWRDaGFuZ2VkKHRoaXMub3BlbmVkKX0scHJlcGFyZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkJiYhdGhpcy5wYXJlbnROb2RlJiZ6dChkb2N1bWVudC5ib2R5KS5hcHBlbmRDaGlsZCh0aGlzKX0sb3BlbjpmdW5jdGlvbigpe3RoaXMub3BlbmVkPSEwfSxjbG9zZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkPSExfSxjb21wbGV0ZTpmdW5jdGlvbigpeyF0aGlzLm9wZW5lZCYmdGhpcy5wYXJlbnROb2RlPT09ZG9jdW1lbnQuYm9keSYmenQodGhpcy5wYXJlbnROb2RlKS5yZW1vdmVDaGlsZCh0aGlzKX0sX29uVHJhbnNpdGlvbmVuZDpmdW5jdGlvbihlKXtlJiZlLnRhcmdldD09PXRoaXMmJnRoaXMuY29tcGxldGUoKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oZSl7aWYoZSl0aGlzLnByZXBhcmUoKTtlbHNle3ZhciB0PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpOyh0LnRyYW5zaXRpb25EdXJhdGlvbj09PSIwcyJ8fHQub3BhY2l0eT09MCkmJnRoaXMuY29tcGxldGUoKX0hdGhpcy5pc0F0dGFjaGVkfHwodGhpcy5fX29wZW5lZFJhZiYmKHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9fb3BlbmVkUmFmKSx0aGlzLl9fb3BlbmVkUmFmPW51bGwpLHRoaXMuc2Nyb2xsVG9wPXRoaXMuc2Nyb2xsVG9wLHRoaXMuX19vcGVuZWRSYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe3RoaXMuX19vcGVuZWRSYWY9bnVsbCx0aGlzLnRvZ2dsZUNsYXNzKCJvcGVuZWQiLHRoaXMub3BlbmVkKX0uYmluZCh0aGlzKSkpfX0pO3ZhciBtVz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX292ZXJsYXlzPVtdLHRoaXMuX21pbmltdW1aPTEwMSx0aGlzLl9iYWNrZHJvcEVsZW1lbnQ9bnVsbCxUbShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsInRhcCIsZnVuY3Rpb24oKXt9KSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0YXAiLHRoaXMuX29uQ2FwdHVyZUNsaWNrLmJpbmQodGhpcyksITApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9vbkNhcHR1cmVGb2N1cy5iaW5kKHRoaXMpLCEwKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9vbkNhcHR1cmVLZXlEb3duLmJpbmQodGhpcyksITApfWdldCBiYWNrZHJvcEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fYmFja2Ryb3BFbGVtZW50fHwodGhpcy5fYmFja2Ryb3BFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlyb24tb3ZlcmxheS1iYWNrZHJvcCIpKSx0aGlzLl9iYWNrZHJvcEVsZW1lbnR9Z2V0IGRlZXBBY3RpdmVFbGVtZW50KCl7dmFyIHQ9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtmb3IoKCF0fHwhKHQgaW5zdGFuY2VvZiBFbGVtZW50KSkmJih0PWRvY3VtZW50LmJvZHkpO3Qucm9vdCYmenQodC5yb290KS5hY3RpdmVFbGVtZW50Oyl0PXp0KHQucm9vdCkuYWN0aXZlRWxlbWVudDtyZXR1cm4gdH1fYnJpbmdPdmVybGF5QXRJbmRleFRvRnJvbnQodCl7dmFyIHI9dGhpcy5fb3ZlcmxheXNbdF07aWYoISFyKXt2YXIgbj10aGlzLl9vdmVybGF5cy5sZW5ndGgtMSxpPXRoaXMuX292ZXJsYXlzW25dO2lmKGkmJnRoaXMuX3Nob3VsZEJlQmVoaW5kT3ZlcmxheShyLGkpJiZuLS0sISh0Pj1uKSl7dmFyIG89TWF0aC5tYXgodGhpcy5jdXJyZW50T3ZlcmxheVooKSx0aGlzLl9taW5pbXVtWik7Zm9yKHRoaXMuX2dldFoocik8PW8mJnRoaXMuX2FwcGx5T3ZlcmxheVoocixvKTt0PG47KXRoaXMuX292ZXJsYXlzW3RdPXRoaXMuX292ZXJsYXlzW3QrMV0sdCsrO3RoaXMuX292ZXJsYXlzW25dPXJ9fX1hZGRPclJlbW92ZU92ZXJsYXkodCl7dC5vcGVuZWQ/dGhpcy5hZGRPdmVybGF5KHQpOnRoaXMucmVtb3ZlT3ZlcmxheSh0KX1hZGRPdmVybGF5KHQpe3ZhciByPXRoaXMuX292ZXJsYXlzLmluZGV4T2YodCk7aWYocj49MCl7dGhpcy5fYnJpbmdPdmVybGF5QXRJbmRleFRvRnJvbnQociksdGhpcy50cmFja0JhY2tkcm9wKCk7cmV0dXJufXZhciBuPXRoaXMuX292ZXJsYXlzLmxlbmd0aCxpPXRoaXMuX292ZXJsYXlzW24tMV0sbz1NYXRoLm1heCh0aGlzLl9nZXRaKGkpLHRoaXMuX21pbmltdW1aKSxhPXRoaXMuX2dldFoodCk7aWYoaSYmdGhpcy5fc2hvdWxkQmVCZWhpbmRPdmVybGF5KHQsaSkpe3RoaXMuX2FwcGx5T3ZlcmxheVooaSxvKSxuLS07dmFyIHM9dGhpcy5fb3ZlcmxheXNbbi0xXTtvPU1hdGgubWF4KHRoaXMuX2dldFoocyksdGhpcy5fbWluaW11bVopfWE8PW8mJnRoaXMuX2FwcGx5T3ZlcmxheVoodCxvKSx0aGlzLl9vdmVybGF5cy5zcGxpY2UobiwwLHQpLHRoaXMudHJhY2tCYWNrZHJvcCgpfXJlbW92ZU92ZXJsYXkodCl7dmFyIHI9dGhpcy5fb3ZlcmxheXMuaW5kZXhPZih0KTtyIT09LTEmJih0aGlzLl9vdmVybGF5cy5zcGxpY2UociwxKSx0aGlzLnRyYWNrQmFja2Ryb3AoKSl9Y3VycmVudE92ZXJsYXkoKXt2YXIgdD10aGlzLl9vdmVybGF5cy5sZW5ndGgtMTtyZXR1cm4gdGhpcy5fb3ZlcmxheXNbdF19Y3VycmVudE92ZXJsYXlaKCl7cmV0dXJuIHRoaXMuX2dldFoodGhpcy5jdXJyZW50T3ZlcmxheSgpKX1lbnN1cmVNaW5pbXVtWih0KXt0aGlzLl9taW5pbXVtWj1NYXRoLm1heCh0aGlzLl9taW5pbXVtWix0KX1mb2N1c092ZXJsYXkoKXt2YXIgdD10aGlzLmN1cnJlbnRPdmVybGF5KCk7dCYmdC5fYXBwbHlGb2N1cygpfXRyYWNrQmFja2Ryb3AoKXt2YXIgdD10aGlzLl9vdmVybGF5V2l0aEJhY2tkcm9wKCk7IXQmJiF0aGlzLl9iYWNrZHJvcEVsZW1lbnR8fCh0aGlzLmJhY2tkcm9wRWxlbWVudC5zdHlsZS56SW5kZXg9dGhpcy5fZ2V0Wih0KS0xLHRoaXMuYmFja2Ryb3BFbGVtZW50Lm9wZW5lZD0hIXQsdGhpcy5iYWNrZHJvcEVsZW1lbnQucHJlcGFyZSgpKX1nZXRCYWNrZHJvcHMoKXtmb3IodmFyIHQ9W10scj0wO3I8dGhpcy5fb3ZlcmxheXMubGVuZ3RoO3IrKyl0aGlzLl9vdmVybGF5c1tyXS53aXRoQmFja2Ryb3AmJnQucHVzaCh0aGlzLl9vdmVybGF5c1tyXSk7cmV0dXJuIHR9YmFja2Ryb3BaKCl7cmV0dXJuIHRoaXMuX2dldFoodGhpcy5fb3ZlcmxheVdpdGhCYWNrZHJvcCgpKS0xfV9vdmVybGF5V2l0aEJhY2tkcm9wKCl7Zm9yKHZhciB0PXRoaXMuX292ZXJsYXlzLmxlbmd0aC0xO3Q+PTA7dC0tKWlmKHRoaXMuX292ZXJsYXlzW3RdLndpdGhCYWNrZHJvcClyZXR1cm4gdGhpcy5fb3ZlcmxheXNbdF19X2dldFoodCl7dmFyIHI9dGhpcy5fbWluaW11bVo7aWYodCl7dmFyIG49TnVtYmVyKHQuc3R5bGUuekluZGV4fHx3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KS56SW5kZXgpO249PT1uJiYocj1uKX1yZXR1cm4gcn1fc2V0Wih0LHIpe3Quc3R5bGUuekluZGV4PXJ9X2FwcGx5T3ZlcmxheVoodCxyKXt0aGlzLl9zZXRaKHQscisyKX1fb3ZlcmxheUluUGF0aCh0KXt0PXR8fFtdO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWlmKHRbcl0uX21hbmFnZXI9PT10aGlzKXJldHVybiB0W3JdfV9vbkNhcHR1cmVDbGljayh0KXt2YXIgcj10aGlzLl9vdmVybGF5cy5sZW5ndGgtMTtpZihyIT09LTEpZm9yKHZhciBuPXp0KHQpLnBhdGgsaTsoaT10aGlzLl9vdmVybGF5c1tyXSkmJnRoaXMuX292ZXJsYXlJblBhdGgobikhPT1pJiYoaS5fb25DYXB0dXJlQ2xpY2sodCksaS5hbGxvd0NsaWNrVGhyb3VnaCk7KXItLX1fb25DYXB0dXJlRm9jdXModCl7dmFyIHI9dGhpcy5jdXJyZW50T3ZlcmxheSgpO3ImJnIuX29uQ2FwdHVyZUZvY3VzKHQpfV9vbkNhcHR1cmVLZXlEb3duKHQpe3ZhciByPXRoaXMuY3VycmVudE92ZXJsYXkoKTtyJiYoT28ua2V5Ym9hcmRFdmVudE1hdGNoZXNLZXlzKHQsImVzYyIpP3IuX29uQ2FwdHVyZUVzYyh0KTpPby5rZXlib2FyZEV2ZW50TWF0Y2hlc0tleXModCwidGFiIikmJnIuX29uQ2FwdHVyZVRhYih0KSl9X3Nob3VsZEJlQmVoaW5kT3ZlcmxheSh0LHIpe3JldHVybiF0LmFsd2F5c09uVG9wJiZyLmFsd2F5c09uVG9wfX0sYjB0PW5ldyBtVzt2YXIgRTk9e3BhZ2VYOjAscGFnZVk6MH0sdzB0PW51bGwsZ1c9W10sVDk9WyJ3aGVlbCIsIm1vdXNld2hlZWwiLCJET01Nb3VzZVNjcm9sbCIsInRvdWNoc3RhcnQiLCJ0b3VjaG1vdmUiXSxNOSxfVztmdW5jdGlvbiBTMHQoZSl7QWguaW5kZXhPZihlKT49MHx8KEFoLmxlbmd0aD09PTAmJkRiZSgpLEFoLnB1c2goZSksX1c9QWhbQWgubGVuZ3RoLTFdLEUwdD1bXSxUMHQ9W10pfWZ1bmN0aW9uIE0wdChlKXt2YXIgdD1BaC5pbmRleE9mKGUpO3QhPT0tMSYmKEFoLnNwbGljZSh0LDEpLF9XPUFoW0FoLmxlbmd0aC0xXSxFMHQ9W10sVDB0PVtdLEFoLmxlbmd0aD09PTAmJk9iZSgpKX12YXIgQWg9W10sRTB0PW51bGwsVDB0PW51bGw7ZnVuY3Rpb24gTmJlKGUpe2lmKGUuY2FuY2VsYWJsZSYmemJlKGUpJiZlLnByZXZlbnREZWZhdWx0KCksZS50YXJnZXRUb3VjaGVzKXt2YXIgdD1lLnRhcmdldFRvdWNoZXNbMF07RTkucGFnZVg9dC5wYWdlWCxFOS5wYWdlWT10LnBhZ2VZfX1mdW5jdGlvbiBEYmUoKXtNOT1NOXx8TmJlLmJpbmQodm9pZCAwKTtmb3IodmFyIGU9MCx0PVQ5Lmxlbmd0aDtlPHQ7ZSsrKWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoVDlbZV0sTTkse2NhcHR1cmU6ITAscGFzc2l2ZTohMX0pfWZ1bmN0aW9uIE9iZSgpe2Zvcih2YXIgZT0wLHQ9VDkubGVuZ3RoO2U8dDtlKyspZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihUOVtlXSxNOSx7Y2FwdHVyZTohMCxwYXNzaXZlOiExfSl9ZnVuY3Rpb24gemJlKGUpe3ZhciB0PXp0KGUpLnJvb3RUYXJnZXQ7aWYoZS50eXBlIT09InRvdWNobW92ZSImJncwdCE9PXQmJih3MHQ9dCxnVz1GYmUoenQoZSkucGF0aCkpLCFnVy5sZW5ndGgpcmV0dXJuITA7aWYoZS50eXBlPT09InRvdWNoc3RhcnQiKXJldHVybiExO3ZhciByPUhiZShlKTtyZXR1cm4hQmJlKGdXLHIuZGVsdGFYLHIuZGVsdGFZKX1mdW5jdGlvbiBGYmUoZSl7Zm9yKHZhciB0PVtdLHI9ZS5pbmRleE9mKF9XKSxuPTA7bjw9cjtuKyspaWYoZVtuXS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFKXt2YXIgaT1lW25dLG89aS5zdHlsZTtvLm92ZXJmbG93IT09InNjcm9sbCImJm8ub3ZlcmZsb3chPT0iYXV0byImJihvPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGkpKSwoby5vdmVyZmxvdz09PSJzY3JvbGwifHxvLm92ZXJmbG93PT09ImF1dG8iKSYmdC5wdXNoKGkpfXJldHVybiB0fWZ1bmN0aW9uIEJiZShlLHQscil7aWYoISghdCYmIXIpKWZvcih2YXIgbj1NYXRoLmFicyhyKT49TWF0aC5hYnModCksaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbz1lW2ldLGE9ITE7aWYobj9hPXI8MD9vLnNjcm9sbFRvcD4wOm8uc2Nyb2xsVG9wPG8uc2Nyb2xsSGVpZ2h0LW8uY2xpZW50SGVpZ2h0OmE9dDwwP28uc2Nyb2xsTGVmdD4wOm8uc2Nyb2xsTGVmdDxvLnNjcm9sbFdpZHRoLW8uY2xpZW50V2lkdGgsYSlyZXR1cm4gb319ZnVuY3Rpb24gSGJlKGUpe3ZhciB0PXtkZWx0YVg6ZS5kZWx0YVgsZGVsdGFZOmUuZGVsdGFZfTtpZighKCJkZWx0YVgiaW4gZSkpe2lmKCJ3aGVlbERlbHRhWCJpbiBlJiYid2hlZWxEZWx0YVkiaW4gZSl0LmRlbHRhWD0tZS53aGVlbERlbHRhWCx0LmRlbHRhWT0tZS53aGVlbERlbHRhWTtlbHNlIGlmKCJ3aGVlbERlbHRhImluIGUpdC5kZWx0YVg9MCx0LmRlbHRhWT0tZS53aGVlbERlbHRhO2Vsc2UgaWYoImF4aXMiaW4gZSl0LmRlbHRhWD1lLmF4aXM9PT0xP2UuZGV0YWlsOjAsdC5kZWx0YVk9ZS5heGlzPT09Mj9lLmRldGFpbDowO2Vsc2UgaWYoZS50YXJnZXRUb3VjaGVzKXt2YXIgcj1lLnRhcmdldFRvdWNoZXNbMF07dC5kZWx0YVg9RTkucGFnZVgtci5wYWdlWCx0LmRlbHRhWT1FOS5wYWdlWS1yLnBhZ2VZfX1yZXR1cm4gdH12YXIgSW09e3Byb3BlcnRpZXM6e29wZW5lZDp7b2JzZXJ2ZXI6Il9vcGVuZWRDaGFuZ2VkIix0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxjYW5jZWxlZDp7b2JzZXJ2ZXI6Il9jYW5jZWxlZENoYW5nZWQiLHJlYWRPbmx5OiEwLHR5cGU6Qm9vbGVhbix2YWx1ZTohMX0sd2l0aEJhY2tkcm9wOntvYnNlcnZlcjoiX3dpdGhCYWNrZHJvcENoYW5nZWQiLHR5cGU6Qm9vbGVhbn0sbm9BdXRvRm9jdXM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sbm9DYW5jZWxPbkVzY0tleTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxub0NhbmNlbE9uT3V0c2lkZUNsaWNrOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGNsb3NpbmdSZWFzb246e3R5cGU6T2JqZWN0fSxyZXN0b3JlRm9jdXNPbkNsb3NlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGFsbG93Q2xpY2tUaHJvdWdoOnt0eXBlOkJvb2xlYW59LGFsd2F5c09uVG9wOnt0eXBlOkJvb2xlYW59LHNjcm9sbEFjdGlvbjp7dHlwZTpTdHJpbmd9LF9tYW5hZ2VyOnt0eXBlOk9iamVjdCx2YWx1ZTpiMHR9LF9mb2N1c2VkQ2hpbGQ6e3R5cGU6T2JqZWN0fX0sbGlzdGVuZXJzOnsiaXJvbi1yZXNpemUiOiJfb25Jcm9uUmVzaXplIn0sb2JzZXJ2ZXJzOlsiX191cGRhdGVTY3JvbGxPYnNlcnZlcnMoaXNBdHRhY2hlZCwgb3BlbmVkLCBzY3JvbGxBY3Rpb24pIl0sZ2V0IGJhY2tkcm9wRWxlbWVudCgpe3JldHVybiB0aGlzLl9tYW5hZ2VyLmJhY2tkcm9wRWxlbWVudH0sZ2V0IF9mb2N1c05vZGUoKXtyZXR1cm4gdGhpcy5fZm9jdXNlZENoaWxkfHx6dCh0aGlzKS5xdWVyeVNlbGVjdG9yKCJbYXV0b2ZvY3VzXSIpfHx0aGlzfSxnZXQgX2ZvY3VzYWJsZU5vZGVzKCl7cmV0dXJuIHgwdC5nZXRUYWJiYWJsZU5vZGVzKHRoaXMpfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuX19pc0FuaW1hdGluZz0hMSx0aGlzLl9fc2hvdWxkUmVtb3ZlVGFiSW5kZXg9ITEsdGhpcy5fX2ZpcnN0Rm9jdXNhYmxlTm9kZT10aGlzLl9fbGFzdEZvY3VzYWJsZU5vZGU9bnVsbCx0aGlzLl9fcmFmcz17fSx0aGlzLl9fcmVzdG9yZUZvY3VzTm9kZT1udWxsLHRoaXMuX19zY3JvbGxUb3A9dGhpcy5fX3Njcm9sbExlZnQ9bnVsbCx0aGlzLl9fb25DYXB0dXJlU2Nyb2xsPXRoaXMuX19vbkNhcHR1cmVTY3JvbGwuYmluZCh0aGlzKSx0aGlzLl9fcm9vdE5vZGVzPW51bGwsdGhpcy5fZW5zdXJlU2V0dXAoKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZCYmdGhpcy5fb3BlbmVkQ2hhbmdlZCh0aGlzLm9wZW5lZCksdGhpcy5fb2JzZXJ2ZXI9enQodGhpcykub2JzZXJ2ZU5vZGVzKHRoaXMuX29uTm9kZXNDaGFuZ2UpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX29ic2VydmVyJiZ6dCh0aGlzKS51bm9ic2VydmVOb2Rlcyh0aGlzLl9vYnNlcnZlciksdGhpcy5fb2JzZXJ2ZXI9bnVsbDtmb3IodmFyIGUgaW4gdGhpcy5fX3JhZnMpdGhpcy5fX3JhZnNbZV0hPT1udWxsJiZjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9fcmFmc1tlXSk7dGhpcy5fX3JhZnM9e30sdGhpcy5fbWFuYWdlci5yZW1vdmVPdmVybGF5KHRoaXMpLHRoaXMuX19pc0FuaW1hdGluZyYmKHRoaXMub3BlbmVkP3RoaXMuX2ZpbmlzaFJlbmRlck9wZW5lZCgpOih0aGlzLl9hcHBseUZvY3VzKCksdGhpcy5fZmluaXNoUmVuZGVyQ2xvc2VkKCkpKX0sdG9nZ2xlOmZ1bmN0aW9uKCl7dGhpcy5fc2V0Q2FuY2VsZWQoITEpLHRoaXMub3BlbmVkPSF0aGlzLm9wZW5lZH0sb3BlbjpmdW5jdGlvbigpe3RoaXMuX3NldENhbmNlbGVkKCExKSx0aGlzLm9wZW5lZD0hMH0sY2xvc2U6ZnVuY3Rpb24oKXt0aGlzLl9zZXRDYW5jZWxlZCghMSksdGhpcy5vcGVuZWQ9ITF9LGNhbmNlbDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmZpcmUoImlyb24tb3ZlcmxheS1jYW5jZWxlZCIsZSx7Y2FuY2VsYWJsZTohMH0pO3QuZGVmYXVsdFByZXZlbnRlZHx8KHRoaXMuX3NldENhbmNlbGVkKCEwKSx0aGlzLm9wZW5lZD0hMSl9LGludmFsaWRhdGVUYWJiYWJsZXM6ZnVuY3Rpb24oKXt0aGlzLl9fZmlyc3RGb2N1c2FibGVOb2RlPXRoaXMuX19sYXN0Rm9jdXNhYmxlTm9kZT1udWxsfSxfZW5zdXJlU2V0dXA6ZnVuY3Rpb24oKXt0aGlzLl9vdmVybGF5U2V0dXB8fCh0aGlzLl9vdmVybGF5U2V0dXA9ITAsdGhpcy5zdHlsZS5vdXRsaW5lPSJub25lIix0aGlzLnN0eWxlLmRpc3BsYXk9Im5vbmUiKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oZSl7ZT90aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iKTp0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIiksdGhpcy5pc0F0dGFjaGVkJiYodGhpcy5fX2lzQW5pbWF0aW5nPSEwLHRoaXMuX19kZXJhZigiX19vcGVuZWRDaGFuZ2VkIix0aGlzLl9fb3BlbmVkQ2hhbmdlZCkpfSxfY2FuY2VsZWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5jbG9zaW5nUmVhc29uPXRoaXMuY2xvc2luZ1JlYXNvbnx8e30sdGhpcy5jbG9zaW5nUmVhc29uLmNhbmNlbGVkPXRoaXMuY2FuY2VsZWR9LF93aXRoQmFja2Ryb3BDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy53aXRoQmFja2Ryb3AmJiF0aGlzLmhhc0F0dHJpYnV0ZSgidGFiaW5kZXgiKT8odGhpcy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSx0aGlzLl9fc2hvdWxkUmVtb3ZlVGFiSW5kZXg9ITApOnRoaXMuX19zaG91bGRSZW1vdmVUYWJJbmRleCYmKHRoaXMucmVtb3ZlQXR0cmlidXRlKCJ0YWJpbmRleCIpLHRoaXMuX19zaG91bGRSZW1vdmVUYWJJbmRleD0hMSksdGhpcy5vcGVuZWQmJnRoaXMuaXNBdHRhY2hlZCYmdGhpcy5fbWFuYWdlci50cmFja0JhY2tkcm9wKCl9LF9wcmVwYXJlUmVuZGVyT3BlbmVkOmZ1bmN0aW9uKCl7dGhpcy5fX3Jlc3RvcmVGb2N1c05vZGU9dGhpcy5fbWFuYWdlci5kZWVwQWN0aXZlRWxlbWVudCx0aGlzLl9wcmVwYXJlUG9zaXRpb25pbmcoKSx0aGlzLnJlZml0KCksdGhpcy5fZmluaXNoUG9zaXRpb25pbmcoKSx0aGlzLm5vQXV0b0ZvY3VzJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09dGhpcy5fZm9jdXNOb2RlJiYodGhpcy5fZm9jdXNOb2RlLmJsdXIoKSx0aGlzLl9fcmVzdG9yZUZvY3VzTm9kZS5mb2N1cygpKX0sX3JlbmRlck9wZW5lZDpmdW5jdGlvbigpe3RoaXMuX2ZpbmlzaFJlbmRlck9wZW5lZCgpfSxfcmVuZGVyQ2xvc2VkOmZ1bmN0aW9uKCl7dGhpcy5fZmluaXNoUmVuZGVyQ2xvc2VkKCl9LF9maW5pc2hSZW5kZXJPcGVuZWQ6ZnVuY3Rpb24oKXt0aGlzLm5vdGlmeVJlc2l6ZSgpLHRoaXMuX19pc0FuaW1hdGluZz0hMSx0aGlzLmZpcmUoImlyb24tb3ZlcmxheS1vcGVuZWQiKX0sX2ZpbmlzaFJlbmRlckNsb3NlZDpmdW5jdGlvbigpe3RoaXMuc3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5zdHlsZS56SW5kZXg9IiIsdGhpcy5ub3RpZnlSZXNpemUoKSx0aGlzLl9faXNBbmltYXRpbmc9ITEsdGhpcy5maXJlKCJpcm9uLW92ZXJsYXktY2xvc2VkIix0aGlzLmNsb3NpbmdSZWFzb24pfSxfcHJlcGFyZVBvc2l0aW9uaW5nOmZ1bmN0aW9uKCl7dGhpcy5zdHlsZS50cmFuc2l0aW9uPXRoaXMuc3R5bGUud2Via2l0VHJhbnNpdGlvbj0ibm9uZSIsdGhpcy5zdHlsZS50cmFuc2Zvcm09dGhpcy5zdHlsZS53ZWJraXRUcmFuc2Zvcm09Im5vbmUiLHRoaXMuc3R5bGUuZGlzcGxheT0iIn0sX2ZpbmlzaFBvc2l0aW9uaW5nOmZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLnNjcm9sbFRvcD10aGlzLnNjcm9sbFRvcCx0aGlzLnN0eWxlLnRyYW5zaXRpb249dGhpcy5zdHlsZS53ZWJraXRUcmFuc2l0aW9uPSIiLHRoaXMuc3R5bGUudHJhbnNmb3JtPXRoaXMuc3R5bGUud2Via2l0VHJhbnNmb3JtPSIiLHRoaXMuc3R5bGUuZGlzcGxheT0iIix0aGlzLnNjcm9sbFRvcD10aGlzLnNjcm9sbFRvcH0sX2FwcGx5Rm9jdXM6ZnVuY3Rpb24oKXtpZih0aGlzLm9wZW5lZCl0aGlzLm5vQXV0b0ZvY3VzfHx0aGlzLl9mb2N1c05vZGUuZm9jdXMoKTtlbHNle2lmKHRoaXMucmVzdG9yZUZvY3VzT25DbG9zZSYmdGhpcy5fX3Jlc3RvcmVGb2N1c05vZGUpe3ZhciBlPXRoaXMuX21hbmFnZXIuZGVlcEFjdGl2ZUVsZW1lbnQ7KGU9PT1kb2N1bWVudC5ib2R5fHxVYmUodGhpcyxlKSkmJnRoaXMuX19yZXN0b3JlRm9jdXNOb2RlLmZvY3VzKCl9dGhpcy5fX3Jlc3RvcmVGb2N1c05vZGU9bnVsbCx0aGlzLl9mb2N1c05vZGUuYmx1cigpLHRoaXMuX2ZvY3VzZWRDaGlsZD1udWxsfX0sX29uQ2FwdHVyZUNsaWNrOmZ1bmN0aW9uKGUpe3RoaXMubm9DYW5jZWxPbk91dHNpZGVDbGlja3x8dGhpcy5jYW5jZWwoZSl9LF9vbkNhcHR1cmVGb2N1czpmdW5jdGlvbihlKXtpZighIXRoaXMud2l0aEJhY2tkcm9wKXt2YXIgdD16dChlKS5wYXRoO3QuaW5kZXhPZih0aGlzKT09PS0xPyhlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuX2FwcGx5Rm9jdXMoKSk6dGhpcy5fZm9jdXNlZENoaWxkPXRbMF19fSxfb25DYXB0dXJlRXNjOmZ1bmN0aW9uKGUpe3RoaXMubm9DYW5jZWxPbkVzY0tleXx8dGhpcy5jYW5jZWwoZSl9LF9vbkNhcHR1cmVUYWI6ZnVuY3Rpb24oZSl7aWYoISF0aGlzLndpdGhCYWNrZHJvcCl7dGhpcy5fX2Vuc3VyZUZpcnN0TGFzdEZvY3VzYWJsZXMoKTt2YXIgdD1lLnNoaWZ0S2V5LHI9dD90aGlzLl9fZmlyc3RGb2N1c2FibGVOb2RlOnRoaXMuX19sYXN0Rm9jdXNhYmxlTm9kZSxuPXQ/dGhpcy5fX2xhc3RGb2N1c2FibGVOb2RlOnRoaXMuX19maXJzdEZvY3VzYWJsZU5vZGUsaT0hMTtpZihyPT09bilpPSEwO2Vsc2V7dmFyIG89dGhpcy5fbWFuYWdlci5kZWVwQWN0aXZlRWxlbWVudDtpPW89PT1yfHxvPT09dGhpc31pJiYoZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRDaGlsZD1uLHRoaXMuX2FwcGx5Rm9jdXMoKSl9fSxfb25Jcm9uUmVzaXplOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQmJiF0aGlzLl9faXNBbmltYXRpbmcmJnRoaXMuX19kZXJhZigicmVmaXQiLHRoaXMucmVmaXQpfSxfb25Ob2Rlc0NoYW5nZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkJiYhdGhpcy5fX2lzQW5pbWF0aW5nJiYodGhpcy5pbnZhbGlkYXRlVGFiYmFibGVzKCksdGhpcy5ub3RpZnlSZXNpemUoKSl9LF9fZW5zdXJlRmlyc3RMYXN0Rm9jdXNhYmxlczpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2ZvY3VzYWJsZU5vZGVzO3RoaXMuX19maXJzdEZvY3VzYWJsZU5vZGU9ZVswXSx0aGlzLl9fbGFzdEZvY3VzYWJsZU5vZGU9ZVtlLmxlbmd0aC0xXX0sX19vcGVuZWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ/KHRoaXMuX3ByZXBhcmVSZW5kZXJPcGVuZWQoKSx0aGlzLl9tYW5hZ2VyLmFkZE92ZXJsYXkodGhpcyksdGhpcy5fYXBwbHlGb2N1cygpLHRoaXMuX3JlbmRlck9wZW5lZCgpKToodGhpcy5fbWFuYWdlci5yZW1vdmVPdmVybGF5KHRoaXMpLHRoaXMuX2FwcGx5Rm9jdXMoKSx0aGlzLl9yZW5kZXJDbG9zZWQoKSl9LF9fZGVyYWY6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9fcmFmcztyW2VdIT09bnVsbCYmY2FuY2VsQW5pbWF0aW9uRnJhbWUocltlXSkscltlXT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXtyW2VdPW51bGwsdC5jYWxsKHRoaXMpfS5iaW5kKHRoaXMpKX0sX191cGRhdGVTY3JvbGxPYnNlcnZlcnM6ZnVuY3Rpb24oZSx0LHIpeyFlfHwhdHx8IXRoaXMuX19pc1ZhbGlkU2Nyb2xsQWN0aW9uKHIpPyhNMHQodGhpcyksdGhpcy5fX3JlbW92ZVNjcm9sbExpc3RlbmVycygpKToocj09PSJsb2NrIiYmKHRoaXMuX19zYXZlU2Nyb2xsUG9zaXRpb24oKSxTMHQodGhpcykpLHRoaXMuX19hZGRTY3JvbGxMaXN0ZW5lcnMoKSl9LF9fYWRkU2Nyb2xsTGlzdGVuZXJzOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX19yb290Tm9kZXMpe2lmKHRoaXMuX19yb290Tm9kZXM9W10sdV8pZm9yKHZhciBlPXRoaXM7ZTspZS5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSYmZS5ob3N0JiZ0aGlzLl9fcm9vdE5vZGVzLnB1c2goZSksZT1lLmhvc3R8fGUuYXNzaWduZWRTbG90fHxlLnBhcmVudE5vZGU7dGhpcy5fX3Jvb3ROb2Rlcy5wdXNoKGRvY3VtZW50KX10aGlzLl9fcm9vdE5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7dC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuX19vbkNhcHR1cmVTY3JvbGwse2NhcHR1cmU6ITAscGFzc2l2ZTohMH0pfSx0aGlzKX0sX19yZW1vdmVTY3JvbGxMaXN0ZW5lcnM6ZnVuY3Rpb24oKXt0aGlzLl9fcm9vdE5vZGVzJiZ0aGlzLl9fcm9vdE5vZGVzLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuX19vbkNhcHR1cmVTY3JvbGwse2NhcHR1cmU6ITAscGFzc2l2ZTohMH0pfSx0aGlzKSx0aGlzLmlzQXR0YWNoZWR8fCh0aGlzLl9fcm9vdE5vZGVzPW51bGwpfSxfX2lzVmFsaWRTY3JvbGxBY3Rpb246ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT0ibG9jayJ8fGU9PT0icmVmaXQifHxlPT09ImNhbmNlbCJ9LF9fb25DYXB0dXJlU2Nyb2xsOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLl9faXNBbmltYXRpbmcmJiEoenQoZSkucGF0aC5pbmRleE9mKHRoaXMpPj0wKSlzd2l0Y2godGhpcy5zY3JvbGxBY3Rpb24pe2Nhc2UibG9jayI6dGhpcy5fX3Jlc3RvcmVTY3JvbGxQb3NpdGlvbigpO2JyZWFrO2Nhc2UicmVmaXQiOnRoaXMuX19kZXJhZigicmVmaXQiLHRoaXMucmVmaXQpO2JyZWFrO2Nhc2UiY2FuY2VsIjp0aGlzLmNhbmNlbChlKTticmVha319LF9fc2F2ZVNjcm9sbFBvc2l0aW9uOmZ1bmN0aW9uKCl7ZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudD8odGhpcy5fX3Njcm9sbFRvcD1kb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCx0aGlzLl9fc2Nyb2xsTGVmdD1kb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQpOih0aGlzLl9fc2Nyb2xsVG9wPU1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AsZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ApLHRoaXMuX19zY3JvbGxMZWZ0PU1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0LGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCkpfSxfX3Jlc3RvcmVTY3JvbGxQb3NpdGlvbjpmdW5jdGlvbigpe2RvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ/KGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wPXRoaXMuX19zY3JvbGxUb3AsZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0PXRoaXMuX19zY3JvbGxMZWZ0KTooZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcD1kb2N1bWVudC5ib2R5LnNjcm9sbFRvcD10aGlzLl9fc2Nyb2xsVG9wLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0PWRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdD10aGlzLl9fc2Nyb2xsTGVmdCl9fSxWYmU9ZT0+ZS5hc3NpZ25lZFNsb3R8fGUucGFyZW50Tm9kZXx8ZS5ob3N0LFViZT0oZSx0KT0+e2ZvcihsZXQgcj10O3I7cj1WYmUocikpaWYocj09PWUpcmV0dXJuITA7cmV0dXJuITF9LEt4PVt2MHQsUXMsSW1dO3ZhciB5Vz17aG9zdEF0dHJpYnV0ZXM6e3JvbGU6ImRpYWxvZyIsdGFiaW5kZXg6Ii0xIn0scHJvcGVydGllczp7bW9kYWw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX19yZWFkaWVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxvYnNlcnZlcnM6WyJfbW9kYWxDaGFuZ2VkKG1vZGFsLCBfX3JlYWRpZWQpIl0sbGlzdGVuZXJzOnt0YXA6Il9vbkRpYWxvZ0NsaWNrIn0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLl9fcHJldk5vQ2FuY2VsT25PdXRzaWRlQ2xpY2s9dGhpcy5ub0NhbmNlbE9uT3V0c2lkZUNsaWNrLHRoaXMuX19wcmV2Tm9DYW5jZWxPbkVzY0tleT10aGlzLm5vQ2FuY2VsT25Fc2NLZXksdGhpcy5fX3ByZXZXaXRoQmFja2Ryb3A9dGhpcy53aXRoQmFja2Ryb3AsdGhpcy5fX3JlYWRpZWQ9ITB9LF9tb2RhbENoYW5nZWQ6ZnVuY3Rpb24oZSx0KXshdHx8KGU/KHRoaXMuX19wcmV2Tm9DYW5jZWxPbk91dHNpZGVDbGljaz10aGlzLm5vQ2FuY2VsT25PdXRzaWRlQ2xpY2ssdGhpcy5fX3ByZXZOb0NhbmNlbE9uRXNjS2V5PXRoaXMubm9DYW5jZWxPbkVzY0tleSx0aGlzLl9fcHJldldpdGhCYWNrZHJvcD10aGlzLndpdGhCYWNrZHJvcCx0aGlzLm5vQ2FuY2VsT25PdXRzaWRlQ2xpY2s9ITAsdGhpcy5ub0NhbmNlbE9uRXNjS2V5PSEwLHRoaXMud2l0aEJhY2tkcm9wPSEwKToodGhpcy5ub0NhbmNlbE9uT3V0c2lkZUNsaWNrPXRoaXMubm9DYW5jZWxPbk91dHNpZGVDbGljayYmdGhpcy5fX3ByZXZOb0NhbmNlbE9uT3V0c2lkZUNsaWNrLHRoaXMubm9DYW5jZWxPbkVzY0tleT10aGlzLm5vQ2FuY2VsT25Fc2NLZXkmJnRoaXMuX19wcmV2Tm9DYW5jZWxPbkVzY0tleSx0aGlzLndpdGhCYWNrZHJvcD10aGlzLndpdGhCYWNrZHJvcCYmdGhpcy5fX3ByZXZXaXRoQmFja2Ryb3ApKX0sX3VwZGF0ZUNsb3NpbmdSZWFzb25Db25maXJtZWQ6ZnVuY3Rpb24oZSl7dGhpcy5jbG9zaW5nUmVhc29uPXRoaXMuY2xvc2luZ1JlYXNvbnx8e30sdGhpcy5jbG9zaW5nUmVhc29uLmNvbmZpcm1lZD1lfSxfb25EaWFsb2dDbGljazpmdW5jdGlvbihlKXtmb3IodmFyIHQ9enQoZSkucGF0aCxyPTAsbj10LmluZGV4T2YodGhpcyk7cjxuO3IrKyl7dmFyIGk9dFtyXTtpZihpLmhhc0F0dHJpYnV0ZSYmKGkuaGFzQXR0cmlidXRlKCJkaWFsb2ctZGlzbWlzcyIpfHxpLmhhc0F0dHJpYnV0ZSgiZGlhbG9nLWNvbmZpcm0iKSkpe3RoaXMuX3VwZGF0ZUNsb3NpbmdSZWFzb25Db25maXJtZWQoaS5oYXNBdHRyaWJ1dGUoImRpYWxvZy1jb25maXJtIikpLHRoaXMuY2xvc2UoKSxlLnN0b3BQcm9wYWdhdGlvbigpO2JyZWFrfX19fSxDMHQ9W0t4LHlXXTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGUgaW5jbHVkZT0icGFwZXItZGlhbG9nLXNoYXJlZC1zdHlsZXMiPjwvc3R5bGU+CiAgICA8c2xvdD48L3Nsb3Q+CmAsaXM6InBhcGVyLWRpYWxvZyIsYmVoYXZpb3JzOltDMHQsYjldLGxpc3RlbmVyczp7Im5lb24tYW5pbWF0aW9uLWZpbmlzaCI6Il9vbk5lb25BbmltYXRpb25GaW5pc2gifSxfcmVuZGVyT3BlbmVkOmZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxBbmltYXRpb24oKSx0aGlzLnBsYXlBbmltYXRpb24oImVudHJ5Iil9LF9yZW5kZXJDbG9zZWQ6ZnVuY3Rpb24oKXt0aGlzLmNhbmNlbEFuaW1hdGlvbigpLHRoaXMucGxheUFuaW1hdGlvbigiZXhpdCIpfSxfb25OZW9uQW5pbWF0aW9uRmluaXNoOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ/dGhpcy5fZmluaXNoUmVuZGVyT3BlbmVkKCk6dGhpcy5fZmluaXNoUmVuZGVyQ2xvc2VkKCl9fSk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgoKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIEBhcHBseSAtLWxheW91dC1yZWxhdGl2ZTsKICAgICAgfQoKICAgICAgOmhvc3QoLmlzLXNjcm9sbGVkOm5vdCg6Zmlyc3QtY2hpbGQpKTo6YmVmb3JlIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgaGVpZ2h0OiAxcHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tZGl2aWRlci1jb2xvcik7CiAgICAgIH0KCiAgICAgIDpob3N0KC5jYW4tc2Nyb2xsOm5vdCguc2Nyb2xsZWQtdG8tYm90dG9tKTpub3QoOmxhc3QtY2hpbGQpKTo6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBoZWlnaHQ6IDFweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1kaXZpZGVyLWNvbG9yKTsKICAgICAgfQoKICAgICAgLnNjcm9sbGFibGUgewogICAgICAgIHBhZGRpbmc6IDAgMjRweDsKCiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LXNjcm9sbDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1kaWFsb2ctc2Nyb2xsYWJsZTsKICAgICAgfQoKICAgICAgLmZpdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZpdDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJzY3JvbGxhYmxlIiBjbGFzcz0ic2Nyb2xsYWJsZSIgb24tc2Nyb2xsPSJ1cGRhdGVTY3JvbGxTdGF0ZSI+CiAgICAgIDxzbG90Pjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci1kaWFsb2ctc2Nyb2xsYWJsZSIscHJvcGVydGllczp7ZGlhbG9nRWxlbWVudDp7dHlwZTpPYmplY3R9fSxnZXQgc2Nyb2xsVGFyZ2V0KCl7cmV0dXJuIHRoaXMuJC5zY3JvbGxhYmxlfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuX2Vuc3VyZVRhcmdldCgpLHRoaXMuY2xhc3NMaXN0LmFkZCgibm8tcGFkZGluZyIpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2Vuc3VyZVRhcmdldCgpLHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLnVwZGF0ZVNjcm9sbFN0YXRlLmJpbmQodGhpcykpfSx1cGRhdGVTY3JvbGxTdGF0ZTpmdW5jdGlvbigpe3RoaXMudG9nZ2xlQ2xhc3MoImlzLXNjcm9sbGVkIix0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxUb3A+MCksdGhpcy50b2dnbGVDbGFzcygiY2FuLXNjcm9sbCIsdGhpcy5zY3JvbGxUYXJnZXQub2Zmc2V0SGVpZ2h0PHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbEhlaWdodCksdGhpcy50b2dnbGVDbGFzcygic2Nyb2xsZWQtdG8tYm90dG9tIix0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxUb3ArdGhpcy5zY3JvbGxUYXJnZXQub2Zmc2V0SGVpZ2h0Pj10aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxIZWlnaHQpfSxfZW5zdXJlVGFyZ2V0OmZ1bmN0aW9uKCl7dGhpcy5kaWFsb2dFbGVtZW50PXRoaXMuZGlhbG9nRWxlbWVudHx8dGhpcy5wYXJlbnRFbGVtZW50LHRoaXMuZGlhbG9nRWxlbWVudCYmdGhpcy5kaWFsb2dFbGVtZW50LmJlaGF2aW9ycyYmdGhpcy5kaWFsb2dFbGVtZW50LmJlaGF2aW9ycy5pbmRleE9mKHlXKT49MD8odGhpcy5kaWFsb2dFbGVtZW50LnNpemluZ1RhcmdldD10aGlzLnNjcm9sbFRhcmdldCx0aGlzLnNjcm9sbFRhcmdldC5jbGFzc0xpc3QucmVtb3ZlKCJmaXQiKSk6dGhpcy5kaWFsb2dFbGVtZW50JiZ0aGlzLnNjcm9sbFRhcmdldC5jbGFzc0xpc3QuYWRkKCJmaXQiKX19KTt2YXIgZWM9WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICBjbGlwOiByZWN0KDBweCwwcHgsMHB4LDBweCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGFyaWEtbGl2ZSQ9IltbbW9kZV1dIj5bW190ZXh0XV08L2Rpdj4KYCxpczoiaXJvbi1hMTF5LWFubm91bmNlciIscHJvcGVydGllczp7bW9kZTp7dHlwZTpTdHJpbmcsdmFsdWU6InBvbGl0ZSJ9LHRpbWVvdXQ6e3R5cGU6TnVtYmVyLHZhbHVlOjE1MH0sX3RleHQ6e3R5cGU6U3RyaW5nLHZhbHVlOiIifX0sY3JlYXRlZDpmdW5jdGlvbigpe2VjLmluc3RhbmNlfHwoZWMuaW5zdGFuY2U9dGhpcyksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiaXJvbi1hbm5vdW5jZSIsdGhpcy5fb25Jcm9uQW5ub3VuY2UuYmluZCh0aGlzKSl9LGFubm91bmNlOmZ1bmN0aW9uKGUpe3RoaXMuX3RleHQ9IiIsdGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMuX3RleHQ9ZX0sdGhpcy50aW1lb3V0KX0sX29uSXJvbkFubm91bmNlOmZ1bmN0aW9uKGUpe2UuZGV0YWlsJiZlLmRldGFpbC50ZXh0JiZ0aGlzLmFubm91bmNlKGUuZGV0YWlsLnRleHQpfX0pO2VjLmluc3RhbmNlPW51bGw7ZWMucmVxdWVzdEF2YWlsYWJpbGl0eT1mdW5jdGlvbigpe2VjLmluc3RhbmNlfHwoZWMuaW5zdGFuY2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaXJvbi1hMTF5LWFubm91bmNlciIpKSxkb2N1bWVudC5ib2R5P2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWMuaW5zdGFuY2UpOmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGZ1bmN0aW9uKCl7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlYy5pbnN0YW5jZSl9KX07WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHNsb3QgaWQ9ImNvbnRlbnQiPjwvc2xvdD4KYCxpczoiaXJvbi1pbnB1dCIsYmVoYXZpb3JzOltDaF0scHJvcGVydGllczp7YmluZFZhbHVlOnt0eXBlOlN0cmluZyx2YWx1ZToiIn0sdmFsdWU6e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVZhbHVlKGJpbmRWYWx1ZSkifSxhbGxvd2VkUGF0dGVybjp7dHlwZTpTdHJpbmd9LGF1dG9WYWxpZGF0ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfaW5wdXRFbGVtZW50Ok9iamVjdH0sb2JzZXJ2ZXJzOlsiX2JpbmRWYWx1ZUNoYW5nZWQoYmluZFZhbHVlLCBfaW5wdXRFbGVtZW50KSJdLGxpc3RlbmVyczp7aW5wdXQ6Il9vbklucHV0IixrZXlwcmVzczoiX29uS2V5cHJlc3MifSxjcmVhdGVkOmZ1bmN0aW9uKCl7ZWMucmVxdWVzdEF2YWlsYWJpbGl0eSgpLHRoaXMuX3ByZXZpb3VzVmFsaWRJbnB1dD0iIix0aGlzLl9wYXR0ZXJuQWxyZWFkeUNoZWNrZWQ9ITF9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXI9enQodGhpcykub2JzZXJ2ZU5vZGVzKGZ1bmN0aW9uKGUpe3RoaXMuX2luaXRTbG90dGVkSW5wdXQoKX0uYmluZCh0aGlzKSl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXImJih6dCh0aGlzKS51bm9ic2VydmVOb2Rlcyh0aGlzLl9vYnNlcnZlciksdGhpcy5fb2JzZXJ2ZXI9bnVsbCl9LGdldCBpbnB1dEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5faW5wdXRFbGVtZW50fSxfaW5pdFNsb3R0ZWRJbnB1dDpmdW5jdGlvbigpe3RoaXMuX2lucHV0RWxlbWVudD10aGlzLmdldEVmZmVjdGl2ZUNoaWxkcmVuKClbMF0sdGhpcy5pbnB1dEVsZW1lbnQmJnRoaXMuaW5wdXRFbGVtZW50LnZhbHVlJiYodGhpcy5iaW5kVmFsdWU9dGhpcy5pbnB1dEVsZW1lbnQudmFsdWUpLHRoaXMuZmlyZSgiaXJvbi1pbnB1dC1yZWFkeSIpfSxnZXQgX3BhdHRlcm5SZWdFeHAoKXt2YXIgZTtpZih0aGlzLmFsbG93ZWRQYXR0ZXJuKWU9bmV3IFJlZ0V4cCh0aGlzLmFsbG93ZWRQYXR0ZXJuKTtlbHNlIHN3aXRjaCh0aGlzLmlucHV0RWxlbWVudC50eXBlKXtjYXNlIm51bWJlciI6ZT0vWzAtOS4sZS1dLzticmVha31yZXR1cm4gZX0sX2JpbmRWYWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oZSx0KXshdHx8KGU9PT12b2lkIDA/dC52YWx1ZT1udWxsOmUhPT10LnZhbHVlJiYodGhpcy5pbnB1dEVsZW1lbnQudmFsdWU9ZSksdGhpcy5hdXRvVmFsaWRhdGUmJnRoaXMudmFsaWRhdGUoKSx0aGlzLmZpcmUoImJpbmQtdmFsdWUtY2hhbmdlZCIse3ZhbHVlOmV9KSl9LF9vbklucHV0OmZ1bmN0aW9uKCl7aWYodGhpcy5hbGxvd2VkUGF0dGVybiYmIXRoaXMuX3BhdHRlcm5BbHJlYWR5Q2hlY2tlZCl7dmFyIGU9dGhpcy5fY2hlY2tQYXR0ZXJuVmFsaWRpdHkoKTtlfHwodGhpcy5fYW5ub3VuY2VJbnZhbGlkQ2hhcmFjdGVyKCJJbnZhbGlkIHN0cmluZyBvZiBjaGFyYWN0ZXJzIG5vdCBlbnRlcmVkLiIpLHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlPXRoaXMuX3ByZXZpb3VzVmFsaWRJbnB1dCl9dGhpcy5iaW5kVmFsdWU9dGhpcy5fcHJldmlvdXNWYWxpZElucHV0PXRoaXMuaW5wdXRFbGVtZW50LnZhbHVlLHRoaXMuX3BhdHRlcm5BbHJlYWR5Q2hlY2tlZD0hMX0sX2lzUHJpbnRhYmxlOmZ1bmN0aW9uKGUpe3ZhciB0PWUua2V5Q29kZT09OHx8ZS5rZXlDb2RlPT05fHxlLmtleUNvZGU9PTEzfHxlLmtleUNvZGU9PTI3LHI9ZS5rZXlDb2RlPT0xOXx8ZS5rZXlDb2RlPT0yMHx8ZS5rZXlDb2RlPT00NXx8ZS5rZXlDb2RlPT00Nnx8ZS5rZXlDb2RlPT0xNDR8fGUua2V5Q29kZT09MTQ1fHxlLmtleUNvZGU+MzImJmUua2V5Q29kZTw0MXx8ZS5rZXlDb2RlPjExMSYmZS5rZXlDb2RlPDEyNDtyZXR1cm4hdCYmIShlLmNoYXJDb2RlPT0wJiZyKX0sX29uS2V5cHJlc3M6ZnVuY3Rpb24oZSl7aWYoISghdGhpcy5hbGxvd2VkUGF0dGVybiYmdGhpcy5pbnB1dEVsZW1lbnQudHlwZSE9PSJudW1iZXIiKSl7dmFyIHQ9dGhpcy5fcGF0dGVyblJlZ0V4cDtpZighIXQmJiEoZS5tZXRhS2V5fHxlLmN0cmxLZXl8fGUuYWx0S2V5KSl7dGhpcy5fcGF0dGVybkFscmVhZHlDaGVja2VkPSEwO3ZhciByPVN0cmluZy5mcm9tQ2hhckNvZGUoZS5jaGFyQ29kZSk7dGhpcy5faXNQcmludGFibGUoZSkmJiF0LnRlc3QocikmJihlLnByZXZlbnREZWZhdWx0KCksdGhpcy5fYW5ub3VuY2VJbnZhbGlkQ2hhcmFjdGVyKCJJbnZhbGlkIGNoYXJhY3RlciAiK3IrIiBub3QgZW50ZXJlZC4iKSl9fX0sX2NoZWNrUGF0dGVyblZhbGlkaXR5OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcGF0dGVyblJlZ0V4cDtpZighZSlyZXR1cm4hMDtmb3IodmFyIHQ9MDt0PHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlLmxlbmd0aDt0KyspaWYoIWUudGVzdCh0aGlzLmlucHV0RWxlbWVudC52YWx1ZVt0XSkpcmV0dXJuITE7cmV0dXJuITB9LHZhbGlkYXRlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuaW5wdXRFbGVtZW50KXJldHVybiB0aGlzLmludmFsaWQ9ITEsITA7dmFyIGU9dGhpcy5pbnB1dEVsZW1lbnQuY2hlY2tWYWxpZGl0eSgpO3JldHVybiBlJiYodGhpcy5yZXF1aXJlZCYmdGhpcy5iaW5kVmFsdWU9PT0iIj9lPSExOnRoaXMuaGFzVmFsaWRhdG9yKCkmJihlPUNoLnZhbGlkYXRlLmNhbGwodGhpcyx0aGlzLmJpbmRWYWx1ZSkpKSx0aGlzLmludmFsaWQ9IWUsdGhpcy5maXJlKCJpcm9uLWlucHV0LXZhbGlkYXRlIiksZX0sX2Fubm91bmNlSW52YWxpZENoYXJhY3RlcjpmdW5jdGlvbihlKXt0aGlzLmZpcmUoImlyb24tYW5ub3VuY2UiLHt0ZXh0OmV9KX0sX2NvbXB1dGVWYWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZX19KTt2YXIgQzk9e2F0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJhZGRvbi1hdHRhY2hlZCIpfSx1cGRhdGU6ZnVuY3Rpb24oZSl7fX07WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGZsb2F0OiByaWdodDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jYXB0aW9uOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNoYXItY291bnRlcjsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpkaXIocnRsKSkgewogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzcGFuPltbX2NoYXJDb3VudGVyU3RyXV08L3NwYW4+CmAsaXM6InBhcGVyLWlucHV0LWNoYXItY291bnRlciIsYmVoYXZpb3JzOltDOV0scHJvcGVydGllczp7X2NoYXJDb3VudGVyU3RyOnt0eXBlOlN0cmluZyx2YWx1ZToiMCJ9fSx1cGRhdGU6ZnVuY3Rpb24oZSl7aWYoISFlLmlucHV0RWxlbWVudCl7ZS52YWx1ZT1lLnZhbHVlfHwiIjt2YXIgdD1lLnZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoLnRvU3RyaW5nKCk7ZS5pbnB1dEVsZW1lbnQuaGFzQXR0cmlidXRlKCJtYXhsZW5ndGgiKSYmKHQrPSIvIitlLmlucHV0RWxlbWVudC5nZXRBdHRyaWJ1dGUoIm1heGxlbmd0aCIpKSx0aGlzLl9jaGFyQ291bnRlclN0cj10fX19KTt2YXIgQTB0PVFgCjxjdXN0b20tc3R5bGU+CiAgPHN0eWxlIGlzPSJjdXN0b20tc3R5bGUiPgogICAgaHRtbCB7CiAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXNoYXJlZC1pbnB1dC1zdHlsZTogewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgLyogdG8gbWFrZSBhIHN0YWNraW5nIGNvbnRleHQgKi8KICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LWFsaWduLCBib3R0b20pOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXN1YmhlYWQ7CiAgICAgIH07CiAgICB9CiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+CmA7QTB0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoQTB0LmNvbnRlbnQpO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDhweCAwOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lcjsKICAgICAgfQoKICAgICAgOmhvc3QoW2lubGluZV0pIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBvcGFjaXR5OiAwLjMzOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItZGlzYWJsZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtoaWRkZW5dKSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuZmxvYXRlZC1sYWJlbC1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jYXB0aW9uOwogICAgICB9CgogICAgICAudW5kZXJsaW5lIHsKICAgICAgICBoZWlnaHQ6IDJweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5mb2N1c2VkLWxpbmUgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwoKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUzZCgwLDEsMSk7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZTNkKDAsMSwxKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXVuZGVybGluZS1mb2N1czsKICAgICAgfQoKICAgICAgLnVuZGVybGluZS5pcy1oaWdobGlnaHRlZCAuZm9jdXNlZC1saW5lIHsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjI1czsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXM7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRyYW5zaXRpb24tZWFzaW5nOwogICAgICB9CgogICAgICAudW5kZXJsaW5lLmlzLWludmFsaWQgLmZvY3VzZWQtbGluZSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW52YWxpZC1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjI1czsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXM7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRyYW5zaXRpb24tZWFzaW5nOwogICAgICB9CgogICAgICAudW5mb2N1c2VkLWxpbmUgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItdW5kZXJsaW5lOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAudW5mb2N1c2VkLWxpbmUgewogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBkYXNoZWQ7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItY29sb3IsIHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKSk7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXVuZGVybGluZS1kaXNhYmxlZDsKICAgICAgfQoKICAgICAgLmlucHV0LXdyYXBwZXIgewogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtYXV0bzsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtcmVsYXRpdmU7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQobGFiZWwpLAogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWxhYmVsKSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGZvbnQ6IGluaGVyaXQ7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICAtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDAuMjVzLCB3aWR0aCAwLjI1czsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXMsIHdpZHRoIDAuMjVzOwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogbGVmdCB0b3A7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogbGVmdCB0b3A7CiAgICAgICAgLyogRml4IGZvciBzYWZhcmkgbm90IGZvY3VzaW5nIDAtaGVpZ2h0IGRhdGUvdGltZSBpbnB1dHMgd2l0aCAtd2Via2l0LWFwcGVyYW5jZTogbm9uZTsgKi8KICAgICAgICBtaW4taGVpZ2h0OiAxcHg7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXN1YmhlYWQ7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRyYW5zaXRpb24tZWFzaW5nOwogICAgICB9CgoKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGxhYmVsKTpiZWZvcmUsCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZCgucGFwZXItaW5wdXQtbGFiZWwpOmJlZm9yZSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsLWJlZm9yZTsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGxhYmVsKTphZnRlciwKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCk6YWZ0ZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbC1hZnRlcjsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtZmxvYXRpbmcgOjpzbG90dGVkKGxhYmVsKSwKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtZmxvYXRpbmcgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCkgewogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC03NSUpIHNjYWxlKDAuNzUpOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNzUlKSBzY2FsZSgwLjc1KTsKCiAgICAgICAgLyogU2luY2Ugd2Ugc2NhbGUgdG8gNzUvMTAwIG9mIHRoZSBzaXplLCB3ZSBhY3R1YWxseSBoYXZlIDEwMC83NSBvZiB0aGUKICAgICAgICBvcmlnaW5hbCBzcGFjZSBub3cgYXZhaWxhYmxlICovCiAgICAgICAgd2lkdGg6IDEzMyU7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbC1mbG9hdGluZzsKICAgICAgfQoKICAgICAgOmhvc3QoOmRpcihydGwpKSAuaW5wdXQtY29udGVudC5sYWJlbC1pcy1mbG9hdGluZyA6OnNsb3R0ZWQobGFiZWwpLAogICAgICA6aG9zdCg6ZGlyKHJ0bCkpIC5pbnB1dC1jb250ZW50LmxhYmVsLWlzLWZsb2F0aW5nIDo6c2xvdHRlZCgucGFwZXItaW5wdXQtbGFiZWwpIHsKICAgICAgICByaWdodDogMDsKICAgICAgICBsZWZ0OiBhdXRvOwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogcmlnaHQgdG9wOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IHJpZ2h0IHRvcDsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtaGlnaGxpZ2h0ZWQgOjpzbG90dGVkKGxhYmVsKSwKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtaGlnaGxpZ2h0ZWQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCkgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItZm9jdXMtY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsLWZvY3VzOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZChsYWJlbCksCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCkgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW52YWxpZC1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtaGlkZGVuIDo6c2xvdHRlZChsYWJlbCksCiAgICAgIC5pbnB1dC1jb250ZW50LmxhYmVsLWlzLWhpZGRlbiA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWxhYmVsKSB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoaW5wdXQpLAogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoaXJvbi1pbnB1dCksCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZCh0ZXh0YXJlYSksCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZChpcm9uLWF1dG9ncm93LXRleHRhcmVhKSwKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1pbnB1dCkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1zaGFyZWQtaW5wdXQtc3R5bGU7CiAgICAgICAgLyogVGhlIGFwcGx5IHNoaW0gZG9lc24ndCBhcHBseSB0aGUgbmVzdGVkIGNvbG9yIGN1c3RvbSBwcm9wZXJ0eSwKICAgICAgICAgIHNvIHdlIGhhdmUgdG8gcmUtYXBwbHkgaXQgaGVyZS4gKi8KICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ7CiAgICAgIH0KCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZChpbnB1dCk6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24sCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZChpbnB1dCk6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24gewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dC13ZWJraXQtc3Bpbm5lcjsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQuZm9jdXNlZCA6OnNsb3R0ZWQoaW5wdXQpLAogICAgICAuaW5wdXQtY29udGVudC5mb2N1c2VkIDo6c2xvdHRlZChpcm9uLWlucHV0KSwKICAgICAgLmlucHV0LWNvbnRlbnQuZm9jdXNlZCA6OnNsb3R0ZWQodGV4dGFyZWEpLAogICAgICAuaW5wdXQtY29udGVudC5mb2N1c2VkIDo6c2xvdHRlZChpcm9uLWF1dG9ncm93LXRleHRhcmVhKSwKICAgICAgLmlucHV0LWNvbnRlbnQuZm9jdXNlZCA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWlucHV0KSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LWZvY3VzOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZChpbnB1dCksCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKGlyb24taW5wdXQpLAogICAgICAuaW5wdXQtY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZCh0ZXh0YXJlYSksCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKGlyb24tYXV0b2dyb3ctdGV4dGFyZWEpLAogICAgICAuaW5wdXQtY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZCgucGFwZXItaW5wdXQtaW5wdXQpIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtaW52YWxpZDsKICAgICAgfQoKICAgICAgLnByZWZpeCA6OnNsb3R0ZWQoKikgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXN1YmhlYWQ7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtbm9uZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1wcmVmaXg7CiAgICAgIH0KCiAgICAgIC5zdWZmaXggOjpzbG90dGVkKCopIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1zdWJoZWFkOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LW5vbmU7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LXN1ZmZpeDsKICAgICAgfQoKICAgICAgLyogRmlyZWZveCBzZXRzIGEgbWluLXdpZHRoIG9uIHRoZSBpbnB1dCwgd2hpY2ggY2FuIGNhdXNlIGxheW91dCBpc3N1ZXMgKi8KICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGlucHV0KSB7CiAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQodGV4dGFyZWEpIHsKICAgICAgICByZXNpemU6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5hZGQtb24tY29udGVudCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuYWRkLW9uLWNvbnRlbnQuaXMtaW52YWxpZCA6OnNsb3R0ZWQoKikgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW52YWxpZC1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgfQoKICAgICAgLmFkZC1vbi1jb250ZW50LmlzLWhpZ2hsaWdodGVkIDo6c2xvdHRlZCgqKSB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgY2xhc3M9ImZsb2F0ZWQtbGFiZWwtcGxhY2Vob2xkZXIiIGFyaWEtaGlkZGVuPSJ0cnVlIiBoaWRkZW49Iltbbm9MYWJlbEZsb2F0XV0iPiZuYnNwOzwvZGl2PgoKICAgIDxkaXYgY2xhc3M9ImlucHV0LXdyYXBwZXIiPgogICAgICA8c3BhbiBjbGFzcz0icHJlZml4Ij48c2xvdCBuYW1lPSJwcmVmaXgiPjwvc2xvdD48L3NwYW4+CgogICAgICA8ZGl2IGNsYXNzJD0iW1tfY29tcHV0ZUlucHV0Q29udGVudENsYXNzKG5vTGFiZWxGbG9hdCxhbHdheXNGbG9hdExhYmVsLGZvY3VzZWQsaW52YWxpZCxfaW5wdXRIYXNDb250ZW50KV1dIiBpZD0ibGFiZWxBbmRJbnB1dENvbnRhaW5lciI+CiAgICAgICAgPHNsb3QgbmFtZT0ibGFiZWwiPjwvc2xvdD4KICAgICAgICA8c2xvdCBuYW1lPSJpbnB1dCI+PC9zbG90PgogICAgICA8L2Rpdj4KCiAgICAgIDxzcGFuIGNsYXNzPSJzdWZmaXgiPjxzbG90IG5hbWU9InN1ZmZpeCI+PC9zbG90Pjwvc3Bhbj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3MkPSJbW19jb21wdXRlVW5kZXJsaW5lQ2xhc3MoZm9jdXNlZCxpbnZhbGlkKV1dIj4KICAgICAgPGRpdiBjbGFzcz0idW5mb2N1c2VkLWxpbmUiPjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJmb2N1c2VkLWxpbmUiPjwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcyQ9IltbX2NvbXB1dGVBZGRPbkNvbnRlbnRDbGFzcyhmb2N1c2VkLGludmFsaWQpXV0iPgogICAgICA8c2xvdCBuYW1lPSJhZGQtb24iPjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci1pbnB1dC1jb250YWluZXIiLHByb3BlcnRpZXM6e25vTGFiZWxGbG9hdDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhbHdheXNGbG9hdExhYmVsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGF0dHJGb3JWYWx1ZTp7dHlwZTpTdHJpbmcsdmFsdWU6ImJpbmQtdmFsdWUifSxhdXRvVmFsaWRhdGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0saW52YWxpZDp7b2JzZXJ2ZXI6Il9pbnZhbGlkQ2hhbmdlZCIsdHlwZTpCb29sZWFuLHZhbHVlOiExfSxmb2N1c2VkOntyZWFkT25seTohMCx0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxfYWRkb25zOnt0eXBlOkFycmF5fSxfaW5wdXRIYXNDb250ZW50Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9pbnB1dFNlbGVjdG9yOnt0eXBlOlN0cmluZyx2YWx1ZToiaW5wdXQsaXJvbi1pbnB1dCx0ZXh0YXJlYSwucGFwZXItaW5wdXQtaW5wdXQifSxfYm91bmRPbkZvY3VzOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uRm9jdXMuYmluZCh0aGlzKX19LF9ib3VuZE9uQmx1cjp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vbkJsdXIuYmluZCh0aGlzKX19LF9ib3VuZE9uSW5wdXQ6e3R5cGU6RnVuY3Rpb24sdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25JbnB1dC5iaW5kKHRoaXMpfX0sX2JvdW5kVmFsdWVDaGFuZ2VkOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uVmFsdWVDaGFuZ2VkLmJpbmQodGhpcyl9fX0sbGlzdGVuZXJzOnsiYWRkb24tYXR0YWNoZWQiOiJfb25BZGRvbkF0dGFjaGVkIiwiaXJvbi1pbnB1dC12YWxpZGF0ZSI6Il9vbklyb25JbnB1dFZhbGlkYXRlIn0sZ2V0IF92YWx1ZUNoYW5nZWRFdmVudCgpe3JldHVybiB0aGlzLmF0dHJGb3JWYWx1ZSsiLWNoYW5nZWQifSxnZXQgX3Byb3BlcnR5Rm9yVmFsdWUoKXtyZXR1cm4gU20odGhpcy5hdHRyRm9yVmFsdWUpfSxnZXQgX2lucHV0RWxlbWVudCgpe3JldHVybiB6dCh0aGlzKS5xdWVyeVNlbGVjdG9yKHRoaXMuX2lucHV0U2VsZWN0b3IpfSxnZXQgX2lucHV0RWxlbWVudFZhbHVlKCl7cmV0dXJuIHRoaXMuX2lucHV0RWxlbWVudFt0aGlzLl9wcm9wZXJ0eUZvclZhbHVlXXx8dGhpcy5faW5wdXRFbGVtZW50LnZhbHVlfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuX19pc0ZpcnN0VmFsdWVVcGRhdGU9ITAsdGhpcy5fYWRkb25zfHwodGhpcy5fYWRkb25zPVtdKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9ib3VuZE9uRm9jdXMsITApLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsdGhpcy5fYm91bmRPbkJsdXIsITApfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuYXR0ckZvclZhbHVlP3RoaXMuX2lucHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHRoaXMuX3ZhbHVlQ2hhbmdlZEV2ZW50LHRoaXMuX2JvdW5kVmFsdWVDaGFuZ2VkKTp0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0Iix0aGlzLl9vbklucHV0KSx0aGlzLl9pbnB1dEVsZW1lbnRWYWx1ZSYmdGhpcy5faW5wdXRFbGVtZW50VmFsdWUhPSIiP3RoaXMuX2hhbmRsZVZhbHVlQW5kQXV0b1ZhbGlkYXRlKHRoaXMuX2lucHV0RWxlbWVudCk6dGhpcy5faGFuZGxlVmFsdWUodGhpcy5faW5wdXRFbGVtZW50KX0sX29uQWRkb25BdHRhY2hlZDpmdW5jdGlvbihlKXt0aGlzLl9hZGRvbnN8fCh0aGlzLl9hZGRvbnM9W10pO3ZhciB0PWUudGFyZ2V0O3RoaXMuX2FkZG9ucy5pbmRleE9mKHQpPT09LTEmJih0aGlzLl9hZGRvbnMucHVzaCh0KSx0aGlzLmlzQXR0YWNoZWQmJnRoaXMuX2hhbmRsZVZhbHVlKHRoaXMuX2lucHV0RWxlbWVudCkpfSxfb25Gb2N1czpmdW5jdGlvbigpe3RoaXMuX3NldEZvY3VzZWQoITApfSxfb25CbHVyOmZ1bmN0aW9uKCl7dGhpcy5fc2V0Rm9jdXNlZCghMSksdGhpcy5faGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGUodGhpcy5faW5wdXRFbGVtZW50KX0sX29uSW5wdXQ6ZnVuY3Rpb24oZSl7dGhpcy5faGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGUoZS50YXJnZXQpfSxfb25WYWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50YXJnZXQ7dGhpcy5fX2lzRmlyc3RWYWx1ZVVwZGF0ZSYmKHRoaXMuX19pc0ZpcnN0VmFsdWVVcGRhdGU9ITEsdC52YWx1ZT09PXZvaWQgMHx8dC52YWx1ZT09PSIiKXx8dGhpcy5faGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGUoZS50YXJnZXQpfSxfaGFuZGxlVmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5faW5wdXRFbGVtZW50VmFsdWU7dHx8dD09PTB8fGUudHlwZT09PSJudW1iZXIiJiYhZS5jaGVja1ZhbGlkaXR5KCk/dGhpcy5faW5wdXRIYXNDb250ZW50PSEwOnRoaXMuX2lucHV0SGFzQ29udGVudD0hMSx0aGlzLnVwZGF0ZUFkZG9ucyh7aW5wdXRFbGVtZW50OmUsdmFsdWU6dCxpbnZhbGlkOnRoaXMuaW52YWxpZH0pfSxfaGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGU6ZnVuY3Rpb24oZSl7aWYodGhpcy5hdXRvVmFsaWRhdGUmJmUpe3ZhciB0O2UudmFsaWRhdGU/dD1lLnZhbGlkYXRlKHRoaXMuX2lucHV0RWxlbWVudFZhbHVlKTp0PWUuY2hlY2tWYWxpZGl0eSgpLHRoaXMuaW52YWxpZD0hdH10aGlzLl9oYW5kbGVWYWx1ZShlKX0sX29uSXJvbklucHV0VmFsaWRhdGU6ZnVuY3Rpb24oZSl7dGhpcy5pbnZhbGlkPXRoaXMuX2lucHV0RWxlbWVudC5pbnZhbGlkfSxfaW52YWxpZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLl9hZGRvbnMmJnRoaXMudXBkYXRlQWRkb25zKHtpbnZhbGlkOnRoaXMuaW52YWxpZH0pfSx1cGRhdGVBZGRvbnM6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9MDt0PXRoaXMuX2FkZG9uc1tyXTtyKyspdC51cGRhdGUoZSl9LF9jb21wdXRlSW5wdXRDb250ZW50Q2xhc3M6ZnVuY3Rpb24oZSx0LHIsbixpKXt2YXIgbz0iaW5wdXQtY29udGVudCI7aWYoZSlpJiYobys9IiBsYWJlbC1pcy1oaWRkZW4iKSxuJiYobys9IiBpcy1pbnZhbGlkIik7ZWxzZXt2YXIgYT10aGlzLnF1ZXJ5U2VsZWN0b3IoImxhYmVsIik7dHx8aT8obys9IiBsYWJlbC1pcy1mbG9hdGluZyIsdGhpcy4kLmxhYmVsQW5kSW5wdXRDb250YWluZXIuc3R5bGUucG9zaXRpb249InN0YXRpYyIsbj9vKz0iIGlzLWludmFsaWQiOnImJihvKz0iIGxhYmVsLWlzLWhpZ2hsaWdodGVkIikpOihhJiYodGhpcy4kLmxhYmVsQW5kSW5wdXRDb250YWluZXIuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIiksbiYmKG8rPSIgaXMtaW52YWxpZCIpKX1yZXR1cm4gciYmKG8rPSIgZm9jdXNlZCIpLG99LF9jb21wdXRlVW5kZXJsaW5lQ2xhc3M6ZnVuY3Rpb24oZSx0KXt2YXIgcj0idW5kZXJsaW5lIjtyZXR1cm4gdD9yKz0iIGlzLWludmFsaWQiOmUmJihyKz0iIGlzLWhpZ2hsaWdodGVkIikscn0sX2NvbXB1dGVBZGRPbkNvbnRlbnRDbGFzczpmdW5jdGlvbihlLHQpe3ZhciByPSJhZGQtb24tY29udGVudCI7cmV0dXJuIHQ/cis9IiBpcy1pbnZhbGlkIjplJiYocis9IiBpcy1oaWdobGlnaHRlZCIpLHJ9fSk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKCiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnZhbGlkLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNhcHRpb247CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtZXJyb3I7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6MDsKICAgICAgICByaWdodDowOwogICAgICB9CgogICAgICA6aG9zdChbaW52YWxpZF0pIHsKICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlOwogICAgICB9CgogICAgICAjYTExeVdyYXBwZXIgewogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgfQoKICAgICAgOmhvc3QoW2ludmFsaWRdKSAjYTExeVdyYXBwZXIgewogICAgICAgIHZpc2liaWxpdHk6IHZpc2libGU7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPCEtLQogICAgSWYgdGhlIHBhcGVyLWlucHV0LWVycm9yIGVsZW1lbnQgaXMgZGlyZWN0bHkgcmVmZXJlbmNlZCBieSBhbgogICAgXGBhcmlhLWRlc2NyaWJlZGJ5XGAgYXR0cmlidXRlLCBzdWNoIGFzIHdoZW4gdXNlZCBhcyBhIHBhcGVyLWlucHV0IGFkZC1vbiwKICAgIHRoZW4gYXBwbHlpbmcgXGB2aXNpYmlsaXR5OiBoaWRkZW47XGAgdG8gdGhlIHBhcGVyLWlucHV0LWVycm9yIGVsZW1lbnQgaXRzZWxmCiAgICBkb2VzIG5vdCBoaWRlIHRoZSBlcnJvci4KCiAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlOgogICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL2FjY25hbWUtMS4xLyNtYXBwaW5nX2FkZGl0aW9uYWxfbmRfZGVzY3JpcHRpb24KICAgIC0tPgogICAgPGRpdiBpZD0iYTExeVdyYXBwZXIiPgogICAgICA8c2xvdD48L3Nsb3Q+CiAgICA8L2Rpdj4KYCxpczoicGFwZXItaW5wdXQtZXJyb3IiLGJlaGF2aW9yczpbQzldLHByb3BlcnRpZXM6e2ludmFsaWQ6e3JlYWRPbmx5OiEwLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCx0eXBlOkJvb2xlYW59fSx1cGRhdGU6ZnVuY3Rpb24oZSl7dGhpcy5fc2V0SW52YWxpZChlLmludmFsaWQpfX0pO3ZhciBaeD17fTtaeC5OZXh0TGFiZWxJRD0xO1p4Lk5leHRBZGRvbklEPTE7WnguTmV4dElucHV0SUQ9MTt2YXIgcWJlPXtwcm9wZXJ0aWVzOntsYWJlbDp7dHlwZTpTdHJpbmd9LHZhbHVlOntub3RpZnk6ITAsdHlwZTpTdHJpbmd9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGludmFsaWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITB9LGFsbG93ZWRQYXR0ZXJuOnt0eXBlOlN0cmluZ30sdHlwZTp7dHlwZTpTdHJpbmd9LGxpc3Q6e3R5cGU6U3RyaW5nfSxwYXR0ZXJuOnt0eXBlOlN0cmluZ30scmVxdWlyZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sZXJyb3JNZXNzYWdlOnt0eXBlOlN0cmluZ30sY2hhckNvdW50ZXI6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sbm9MYWJlbEZsb2F0Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGFsd2F5c0Zsb2F0TGFiZWw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sYXV0b1ZhbGlkYXRlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHZhbGlkYXRvcjp7dHlwZTpTdHJpbmd9LGF1dG9jb21wbGV0ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im9mZiJ9LGF1dG9mb2N1czp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfYXV0b2ZvY3VzQ2hhbmdlZCJ9LGlucHV0bW9kZTp7dHlwZTpTdHJpbmd9LG1pbmxlbmd0aDp7dHlwZTpOdW1iZXJ9LG1heGxlbmd0aDp7dHlwZTpOdW1iZXJ9LG1pbjp7dHlwZTpTdHJpbmd9LG1heDp7dHlwZTpTdHJpbmd9LHN0ZXA6e3R5cGU6U3RyaW5nfSxuYW1lOnt0eXBlOlN0cmluZ30scGxhY2Vob2xkZXI6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxyZWFkb25seTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxzaXplOnt0eXBlOk51bWJlcn0sYXV0b2NhcGl0YWxpemU6e3R5cGU6U3RyaW5nLHZhbHVlOiJub25lIn0sYXV0b2NvcnJlY3Q6e3R5cGU6U3RyaW5nLHZhbHVlOiJvZmYifSxhdXRvc2F2ZTp7dHlwZTpTdHJpbmd9LHJlc3VsdHM6e3R5cGU6TnVtYmVyfSxhY2NlcHQ6e3R5cGU6U3RyaW5nfSxtdWx0aXBsZTp7dHlwZTpCb29sZWFufSxfYXJpYURlc2NyaWJlZEJ5Ont0eXBlOlN0cmluZyx2YWx1ZToiIn0sX2FyaWFMYWJlbGxlZEJ5Ont0eXBlOlN0cmluZyx2YWx1ZToiIn0sX2lucHV0SWQ6e3R5cGU6U3RyaW5nLHZhbHVlOiIifX0sbGlzdGVuZXJzOnsiYWRkb24tYXR0YWNoZWQiOiJfb25BZGRvbkF0dGFjaGVkIn0sa2V5QmluZGluZ3M6eyJzaGlmdCt0YWI6a2V5ZG93biI6Il9vblNoaWZ0VGFiRG93biJ9LGhvc3RBdHRyaWJ1dGVzOnt0YWJpbmRleDowfSxnZXQgaW5wdXRFbGVtZW50KCl7cmV0dXJuIHRoaXMuJHx8KHRoaXMuJD17fSksdGhpcy4kLmlucHV0fHwodGhpcy5fZ2VuZXJhdGVJbnB1dElkKCksdGhpcy4kLmlucHV0PXRoaXMuJCQoIiMiK3RoaXMuX2lucHV0SWQpKSx0aGlzLiQuaW5wdXR9LGdldCBfZm9jdXNhYmxlRWxlbWVudCgpe3JldHVybiB0aGlzLmlucHV0RWxlbWVudH0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX3R5cGVzVGhhdEhhdmVUZXh0PVsiZGF0ZSIsImRhdGV0aW1lIiwiZGF0ZXRpbWUtbG9jYWwiLCJtb250aCIsInRpbWUiLCJ3ZWVrIiwiZmlsZSJdfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5KCksIW10JiZ0aGlzLmlucHV0RWxlbWVudCYmdGhpcy5fdHlwZXNUaGF0SGF2ZVRleHQuaW5kZXhPZih0aGlzLmlucHV0RWxlbWVudC50eXBlKSE9PS0xJiYodGhpcy5hbHdheXNGbG9hdExhYmVsPSEwKX0sX2FwcGVuZFN0cmluZ1dpdGhTcGFjZTpmdW5jdGlvbihlLHQpe3JldHVybiBlP2U9ZSsiICIrdDplPXQsZX0sX29uQWRkb25BdHRhY2hlZDpmdW5jdGlvbihlKXt2YXIgdD16dChlKS5yb290VGFyZ2V0O2lmKHQuaWQpdGhpcy5fYXJpYURlc2NyaWJlZEJ5PXRoaXMuX2FwcGVuZFN0cmluZ1dpdGhTcGFjZSh0aGlzLl9hcmlhRGVzY3JpYmVkQnksdC5pZCk7ZWxzZXt2YXIgcj0icGFwZXItaW5wdXQtYWRkLW9uLSIrWnguTmV4dEFkZG9uSUQrKzt0LmlkPXIsdGhpcy5fYXJpYURlc2NyaWJlZEJ5PXRoaXMuX2FwcGVuZFN0cmluZ1dpdGhTcGFjZSh0aGlzLl9hcmlhRGVzY3JpYmVkQnkscil9fSx2YWxpZGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlucHV0RWxlbWVudC52YWxpZGF0ZSgpfSxfZm9jdXNCbHVySGFuZGxlcjpmdW5jdGlvbihlKXtEaS5fZm9jdXNCbHVySGFuZGxlci5jYWxsKHRoaXMsZSksdGhpcy5mb2N1c2VkJiYhdGhpcy5fc2hpZnRUYWJQcmVzc2VkJiZ0aGlzLl9mb2N1c2FibGVFbGVtZW50JiZ0aGlzLl9mb2N1c2FibGVFbGVtZW50LmZvY3VzKCl9LF9vblNoaWZ0VGFiRG93bjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKTt0aGlzLl9zaGlmdFRhYlByZXNzZWQ9ITAsdGhpcy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSx0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4Iix0KSx0aGlzLl9zaGlmdFRhYlByZXNzZWQ9ITF9LDEpfSxfaGFuZGxlQXV0b1ZhbGlkYXRlOmZ1bmN0aW9uKCl7dGhpcy5hdXRvVmFsaWRhdGUmJnRoaXMudmFsaWRhdGUoKX0sdXBkYXRlVmFsdWVBbmRQcmVzZXJ2ZUNhcmV0OmZ1bmN0aW9uKGUpe3RyeXt2YXIgdD10aGlzLmlucHV0RWxlbWVudC5zZWxlY3Rpb25TdGFydDt0aGlzLnZhbHVlPWUsdGhpcy5pbnB1dEVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ9dCx0aGlzLmlucHV0RWxlbWVudC5zZWxlY3Rpb25FbmQ9dH1jYXRjaChyKXt0aGlzLnZhbHVlPWV9fSxfY29tcHV0ZUFsd2F5c0Zsb2F0TGFiZWw6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZX0sX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5OmZ1bmN0aW9uKCl7dmFyIGU9enQodGhpcy5yb290KS5xdWVyeVNlbGVjdG9yKCJsYWJlbCIpO2lmKCFlKXt0aGlzLl9hcmlhTGFiZWxsZWRCeT0iIjtyZXR1cm59dmFyIHQ7ZS5pZD90PWUuaWQ6KHQ9InBhcGVyLWlucHV0LWxhYmVsLSIrWnguTmV4dExhYmVsSUQrKyxlLmlkPXQpLHRoaXMuX2FyaWFMYWJlbGxlZEJ5PXR9LF9nZW5lcmF0ZUlucHV0SWQ6ZnVuY3Rpb24oKXsoIXRoaXMuX2lucHV0SWR8fHRoaXMuX2lucHV0SWQ9PT0iIikmJih0aGlzLl9pbnB1dElkPSJpbnB1dC0iK1p4Lk5leHRJbnB1dElEKyspfSxfb25DaGFuZ2U6ZnVuY3Rpb24oZSl7dGhpcy5zaGFkb3dSb290JiZ0aGlzLmZpcmUoZS50eXBlLHtzb3VyY2VFdmVudDplfSx7bm9kZTp0aGlzLGJ1YmJsZXM6ZS5idWJibGVzLGNhbmNlbGFibGU6ZS5jYW5jZWxhYmxlfSl9LF9hdXRvZm9jdXNDaGFuZ2VkOmZ1bmN0aW9uKCl7aWYodGhpcy5hdXRvZm9jdXMmJnRoaXMuX2ZvY3VzYWJsZUVsZW1lbnQpe3ZhciBlPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQsdD1lIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQscj10JiZlIT09ZG9jdW1lbnQuYm9keSYmZSE9PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtyfHx0aGlzLl9mb2N1c2FibGVFbGVtZW50LmZvY3VzKCl9fX0sQTk9W0RpLE9vLHFiZV07WXQoe2lzOiJwYXBlci1pbnB1dCIsX3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgOmhvc3QoW2ZvY3VzZWRdKSB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIGlucHV0IHsKICAgICAgICAvKiBGaXJlZm94IHNldHMgYSBtaW4td2lkdGggb24gdGhlIGlucHV0LCB3aGljaCBjYW4gY2F1c2UgbGF5b3V0IGlzc3VlcyAqLwogICAgICAgIG1pbi13aWR0aDogMDsKICAgICAgfQoKICAgICAgLyogSW4gMS54LCB0aGUgPGlucHV0PiBpcyBkaXN0cmlidXRlZCB0byBwYXBlci1pbnB1dC1jb250YWluZXIsIHdoaWNoIHN0eWxlcyBpdC4KICAgICAgSW4gMi54IHRoZSA8aXJvbi1pbnB1dD4gaXMgZGlzdHJpYnV0ZWQgdG8gcGFwZXItaW5wdXQtY29udGFpbmVyLCB3aGljaCBzdHlsZXMKICAgICAgaXQsIGJ1dCBpbiBvcmRlciBmb3IgdGhpcyB0byB3b3JrIGNvcnJlY3RseSwgd2UgbmVlZCB0byByZXNldCBzb21lCiAgICAgIG9mIHRoZSBuYXRpdmUgaW5wdXQncyBwcm9wZXJ0aWVzIHRvIGluaGVyaXQgKGZyb20gdGhlIGlyb24taW5wdXQpICovCiAgICAgIGlyb24taW5wdXQgPiBpbnB1dCB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXNoYXJlZC1pbnB1dC1zdHlsZTsKICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgICAgICBmb250LXdlaWdodDogaW5oZXJpdDsKICAgICAgICBmb250LXNpemU6IGluaGVyaXQ7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IGluaGVyaXQ7CiAgICAgICAgd29yZC1zcGFjaW5nOiBpbmhlcml0OwogICAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0OwogICAgICAgIHRleHQtc2hhZG93OiBpbmhlcml0OwogICAgICAgIGNvbG9yOiBpbmhlcml0OwogICAgICAgIGN1cnNvcjogaW5oZXJpdDsKICAgICAgfQoKICAgICAgaW5wdXQ6ZGlzYWJsZWQgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dC1kaXNhYmxlZDsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24sCiAgICAgIGlucHV0Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtd2Via2l0LXNwaW5uZXI7CiAgICAgIH0KCiAgICAgIGlucHV0Ojotd2Via2l0LWNsZWFyLWJ1dHRvbiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LXdlYmtpdC1jbGVhcjsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9yOwogICAgICB9CgogICAgICBpbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgaW5wdXQ6LW1vei1wbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi1tb3otcGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItY29sb3IsIHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKSk7CiAgICAgIH0KCiAgICAgIGlucHV0OjotbXMtY2xlYXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1tcy1jbGVhcjsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi1tcy1yZXZlYWwgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1tcy1yZXZlYWw7CiAgICAgIH0KCiAgICAgIGlucHV0Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgbGFiZWwgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxwYXBlci1pbnB1dC1jb250YWluZXIgaWQ9ImNvbnRhaW5lciIgbm8tbGFiZWwtZmxvYXQ9Iltbbm9MYWJlbEZsb2F0XV0iIGFsd2F5cy1mbG9hdC1sYWJlbD0iW1tfY29tcHV0ZUFsd2F5c0Zsb2F0TGFiZWwoYWx3YXlzRmxvYXRMYWJlbCxwbGFjZWhvbGRlcildXSIgYXV0by12YWxpZGF0ZSQ9IltbYXV0b1ZhbGlkYXRlXV0iIGRpc2FibGVkJD0iW1tkaXNhYmxlZF1dIiBpbnZhbGlkPSJbW2ludmFsaWRdXSI+CgogICAgICA8c2xvdCBuYW1lPSJwcmVmaXgiIHNsb3Q9InByZWZpeCI+PC9zbG90PgoKICAgICAgPGxhYmVsIGhpZGRlbiQ9IltbIWxhYmVsXV0iIGFyaWEtaGlkZGVuPSJ0cnVlIiBmb3IkPSJbW19pbnB1dElkXV0iIHNsb3Q9ImxhYmVsIj5bW2xhYmVsXV08L2xhYmVsPgoKICAgICAgPCEtLSBOZWVkIHRvIGJpbmQgbWF4bGVuZ3RoIHNvIHRoYXQgdGhlIHBhcGVyLWlucHV0LWNoYXItY291bnRlciB3b3JrcyBjb3JyZWN0bHkgLS0+CiAgICAgIDxpcm9uLWlucHV0IGJpbmQtdmFsdWU9Int7dmFsdWV9fSIgc2xvdD0iaW5wdXQiIGNsYXNzPSJpbnB1dC1lbGVtZW50IiBpZCQ9IltbX2lucHV0SWRdXSIgbWF4bGVuZ3RoJD0iW1ttYXhsZW5ndGhdXSIgYWxsb3dlZC1wYXR0ZXJuPSJbW2FsbG93ZWRQYXR0ZXJuXV0iIGludmFsaWQ9Int7aW52YWxpZH19IiB2YWxpZGF0b3I9IltbdmFsaWRhdG9yXV0iPgogICAgICAgIDxpbnB1dCBhcmlhLWxhYmVsbGVkYnkkPSJbW19hcmlhTGFiZWxsZWRCeV1dIiBhcmlhLWRlc2NyaWJlZGJ5JD0iW1tfYXJpYURlc2NyaWJlZEJ5XV0iIGRpc2FibGVkJD0iW1tkaXNhYmxlZF1dIiB0aXRsZSQ9IltbdGl0bGVdXSIgdHlwZSQ9IltbdHlwZV1dIiBwYXR0ZXJuJD0iW1twYXR0ZXJuXV0iIHJlcXVpcmVkJD0iW1tyZXF1aXJlZF1dIiBhdXRvY29tcGxldGUkPSJbW2F1dG9jb21wbGV0ZV1dIiBhdXRvZm9jdXMkPSJbW2F1dG9mb2N1c11dIiBpbnB1dG1vZGUkPSJbW2lucHV0bW9kZV1dIiBtaW5sZW5ndGgkPSJbW21pbmxlbmd0aF1dIiBtYXhsZW5ndGgkPSJbW21heGxlbmd0aF1dIiBtaW4kPSJbW21pbl1dIiBtYXgkPSJbW21heF1dIiBzdGVwJD0iW1tzdGVwXV0iIG5hbWUkPSJbW25hbWVdXSIgcGxhY2Vob2xkZXIkPSJbW3BsYWNlaG9sZGVyXV0iIHJlYWRvbmx5JD0iW1tyZWFkb25seV1dIiBsaXN0JD0iW1tsaXN0XV0iIHNpemUkPSJbW3NpemVdXSIgYXV0b2NhcGl0YWxpemUkPSJbW2F1dG9jYXBpdGFsaXplXV0iIGF1dG9jb3JyZWN0JD0iW1thdXRvY29ycmVjdF1dIiBvbi1jaGFuZ2U9Il9vbkNoYW5nZSIgdGFiaW5kZXgkPSJbW3RhYkluZGV4XV0iIGF1dG9zYXZlJD0iW1thdXRvc2F2ZV1dIiByZXN1bHRzJD0iW1tyZXN1bHRzXV0iIGFjY2VwdCQ9IltbYWNjZXB0XV0iIG11bHRpcGxlJD0iW1ttdWx0aXBsZV1dIiByb2xlJD0iW1tpbnB1dFJvbGVdXSIgYXJpYS1oYXNwb3B1cCQ9IltbaW5wdXRBcmlhSGFzcG9wdXBdXSI+CiAgICAgIDwvaXJvbi1pbnB1dD4KCiAgICAgIDxzbG90IG5hbWU9InN1ZmZpeCIgc2xvdD0ic3VmZml4Ij48L3Nsb3Q+CgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZXJyb3JNZXNzYWdlXV0iPgogICAgICAgIDxwYXBlci1pbnB1dC1lcnJvciBhcmlhLWxpdmU9ImFzc2VydGl2ZSIgc2xvdD0iYWRkLW9uIj5bW2Vycm9yTWVzc2FnZV1dPC9wYXBlci1pbnB1dC1lcnJvcj4KICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tjaGFyQ291bnRlcl1dIj4KICAgICAgICA8cGFwZXItaW5wdXQtY2hhci1jb3VudGVyIHNsb3Q9ImFkZC1vbiI+PC9wYXBlci1pbnB1dC1jaGFyLWNvdW50ZXI+CiAgICAgIDwvdGVtcGxhdGU+CgogICAgPC9wYXBlci1pbnB1dC1jb250YWluZXI+CiAgYCxiZWhhdmlvcnM6W0E5LFRoXSxwcm9wZXJ0aWVzOnt2YWx1ZTp7dHlwZTpTdHJpbmd9LGlucHV0Um9sZTp7dHlwZTpTdHJpbmcsdmFsdWU6dm9pZCAwfSxpbnB1dEFyaWFIYXNwb3B1cDp7dHlwZTpTdHJpbmcsdmFsdWU6dm9pZCAwfX0sZ2V0IF9mb2N1c2FibGVFbGVtZW50KCl7cmV0dXJuIHRoaXMuaW5wdXRFbGVtZW50Ll9pbnB1dEVsZW1lbnR9LGxpc3RlbmVyczp7Imlyb24taW5wdXQtcmVhZHkiOiJfb25Jcm9uSW5wdXRSZWFkeSJ9LF9vbklyb25JbnB1dFJlYWR5OmZ1bmN0aW9uKCl7dGhpcy4kLm5hdGl2ZUlucHV0fHwodGhpcy4kLm5hdGl2ZUlucHV0PXRoaXMuJCQoImlucHV0IikpLHRoaXMuaW5wdXRFbGVtZW50JiZ0aGlzLl90eXBlc1RoYXRIYXZlVGV4dC5pbmRleE9mKHRoaXMuJC5uYXRpdmVJbnB1dC50eXBlKSE9PS0xJiYodGhpcy5hbHdheXNGbG9hdExhYmVsPSEwKSx0aGlzLmlucHV0RWxlbWVudC5iaW5kVmFsdWUmJnRoaXMuJC5jb250YWluZXIuX2hhbmRsZVZhbHVlQW5kQXV0b1ZhbGlkYXRlKHRoaXMuaW5wdXRFbGVtZW50KX19KTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgIH0KCiAgICAgICNjb250ZW50V3JhcHBlciA6OnNsb3R0ZWQoKikgewogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICB9CgogICAgICAjY29udGVudFdyYXBwZXIuYW5pbWF0aW5nIDo6c2xvdHRlZCgqKSB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJjb250ZW50V3JhcHBlciI+CiAgICAgIDxzbG90IGlkPSJjb250ZW50IiBuYW1lPSJkcm9wZG93bi1jb250ZW50Ij48L3Nsb3Q+CiAgICA8L2Rpdj4KYCxpczoiaXJvbi1kcm9wZG93biIsYmVoYXZpb3JzOltEaSxPbyxLeCxiOV0scHJvcGVydGllczp7aG9yaXpvbnRhbEFsaWduOnt0eXBlOlN0cmluZyx2YWx1ZToibGVmdCIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSx2ZXJ0aWNhbEFsaWduOnt0eXBlOlN0cmluZyx2YWx1ZToidG9wIixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LG9wZW5BbmltYXRpb25Db25maWc6e3R5cGU6T2JqZWN0fSxjbG9zZUFuaW1hdGlvbkNvbmZpZzp7dHlwZTpPYmplY3R9LGZvY3VzVGFyZ2V0Ont0eXBlOk9iamVjdH0sbm9BbmltYXRpb25zOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGFsbG93T3V0c2lkZVNjcm9sbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfYWxsb3dPdXRzaWRlU2Nyb2xsQ2hhbmdlZCJ9fSxsaXN0ZW5lcnM6eyJuZW9uLWFuaW1hdGlvbi1maW5pc2giOiJfb25OZW9uQW5pbWF0aW9uRmluaXNoIn0sb2JzZXJ2ZXJzOlsiX3VwZGF0ZU92ZXJsYXlQb3NpdGlvbihwb3NpdGlvblRhcmdldCwgdmVydGljYWxBbGlnbiwgaG9yaXpvbnRhbEFsaWduLCB2ZXJ0aWNhbE9mZnNldCwgaG9yaXpvbnRhbE9mZnNldCkiXSxnZXQgY29udGFpbmVkRWxlbWVudCgpe2Zvcih2YXIgZT16dCh0aGlzLiQuY29udGVudCkuZ2V0RGlzdHJpYnV0ZWROb2RlcygpLHQ9MCxyPWUubGVuZ3RoO3Q8cjt0KyspaWYoZVt0XS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFKXJldHVybiBlW3RdfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuc2Nyb2xsQWN0aW9ufHwodGhpcy5zY3JvbGxBY3Rpb249dGhpcy5hbGxvd091dHNpZGVTY3JvbGw/InJlZml0IjoibG9jayIpLHRoaXMuX3JlYWRpZWQ9ITB9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7KCF0aGlzLnNpemluZ1RhcmdldHx8dGhpcy5zaXppbmdUYXJnZXQ9PT10aGlzKSYmKHRoaXMuc2l6aW5nVGFyZ2V0PXRoaXMuY29udGFpbmVkRWxlbWVudHx8dGhpcyl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxBbmltYXRpb24oKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZCYmdGhpcy5kaXNhYmxlZD90aGlzLmNhbmNlbCgpOih0aGlzLmNhbmNlbEFuaW1hdGlvbigpLHRoaXMuX3VwZGF0ZUFuaW1hdGlvbkNvbmZpZygpLEltLl9vcGVuZWRDaGFuZ2VkLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LF9yZW5kZXJPcGVuZWQ6ZnVuY3Rpb24oKXshdGhpcy5ub0FuaW1hdGlvbnMmJnRoaXMuYW5pbWF0aW9uQ29uZmlnLm9wZW4/KHRoaXMuJC5jb250ZW50V3JhcHBlci5jbGFzc0xpc3QuYWRkKCJhbmltYXRpbmciKSx0aGlzLnBsYXlBbmltYXRpb24oIm9wZW4iKSk6SW0uX3JlbmRlck9wZW5lZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LF9yZW5kZXJDbG9zZWQ6ZnVuY3Rpb24oKXshdGhpcy5ub0FuaW1hdGlvbnMmJnRoaXMuYW5pbWF0aW9uQ29uZmlnLmNsb3NlPyh0aGlzLiQuY29udGVudFdyYXBwZXIuY2xhc3NMaXN0LmFkZCgiYW5pbWF0aW5nIiksdGhpcy5wbGF5QW5pbWF0aW9uKCJjbG9zZSIpKTpJbS5fcmVuZGVyQ2xvc2VkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sX29uTmVvbkFuaW1hdGlvbkZpbmlzaDpmdW5jdGlvbigpe3RoaXMuJC5jb250ZW50V3JhcHBlci5jbGFzc0xpc3QucmVtb3ZlKCJhbmltYXRpbmciKSx0aGlzLm9wZW5lZD90aGlzLl9maW5pc2hSZW5kZXJPcGVuZWQoKTp0aGlzLl9maW5pc2hSZW5kZXJDbG9zZWQoKX0sX3VwZGF0ZUFuaW1hdGlvbkNvbmZpZzpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmNvbnRhaW5lZEVsZW1lbnQsdD1bXS5jb25jYXQodGhpcy5vcGVuQW5pbWF0aW9uQ29uZmlnfHxbXSkuY29uY2F0KHRoaXMuY2xvc2VBbmltYXRpb25Db25maWd8fFtdKSxyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXS5ub2RlPWU7dGhpcy5hbmltYXRpb25Db25maWc9e29wZW46dGhpcy5vcGVuQW5pbWF0aW9uQ29uZmlnLGNsb3NlOnRoaXMuY2xvc2VBbmltYXRpb25Db25maWd9fSxfdXBkYXRlT3ZlcmxheVBvc2l0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc0F0dGFjaGVkJiZ0aGlzLm5vdGlmeVJlc2l6ZSgpfSxfYWxsb3dPdXRzaWRlU2Nyb2xsQ2hhbmdlZDpmdW5jdGlvbihlKXshdGhpcy5fcmVhZGllZHx8KGU/KCF0aGlzLnNjcm9sbEFjdGlvbnx8dGhpcy5zY3JvbGxBY3Rpb249PT0ibG9jayIpJiYodGhpcy5zY3JvbGxBY3Rpb249InJlZml0Iik6dGhpcy5zY3JvbGxBY3Rpb249ImxvY2siKX0sX2FwcGx5Rm9jdXM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmZvY3VzVGFyZ2V0fHx0aGlzLmNvbnRhaW5lZEVsZW1lbnQ7ZSYmdGhpcy5vcGVuZWQmJiF0aGlzLm5vQXV0b0ZvY3VzP2UuZm9jdXMoKTpJbS5fYXBwbHlGb2N1cy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSk7dmFyIHZwPXtwcm9wZXJ0aWVzOnthbmltYXRpb25UaW1pbmc6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue2R1cmF0aW9uOjUwMCxlYXNpbmc6ImN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkiLGZpbGw6ImJvdGgifX19fSxpc05lb25BbmltYXRpb246ITAsY3JlYXRlZDpmdW5jdGlvbigpe2RvY3VtZW50LmJvZHkuYW5pbWF0ZXx8Y29uc29sZS53YXJuKCJObyB3ZWIgYW5pbWF0aW9ucyBkZXRlY3RlZC4gVGhpcyBlbGVtZW50IHdpbGwgbm90IGZ1bmN0aW9uIHdpdGhvdXQgYSB3ZWIgYW5pbWF0aW9ucyBwb2x5ZmlsbC4iKX0sdGltaW5nRnJvbUNvbmZpZzpmdW5jdGlvbihlKXtpZihlLnRpbWluZylmb3IodmFyIHQgaW4gZS50aW1pbmcpdGhpcy5hbmltYXRpb25UaW1pbmdbdF09ZS50aW1pbmdbdF07cmV0dXJuIHRoaXMuYW5pbWF0aW9uVGltaW5nfSxzZXRQcmVmaXhlZFByb3BlcnR5OmZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIG49e3RyYW5zZm9ybTpbIndlYmtpdFRyYW5zZm9ybSJdLHRyYW5zZm9ybU9yaWdpbjpbIm1velRyYW5zZm9ybU9yaWdpbiIsIndlYmtpdFRyYW5zZm9ybU9yaWdpbiJdfSxpPW5bdF0sbyxhPTA7bz1pW2FdO2ErKyllLnN0eWxlW29dPXI7ZS5zdHlsZVt0XT1yfSxjb21wbGV0ZTpmdW5jdGlvbihlKXt9fTtZdCh7aXM6ImZhZGUtaW4tYW5pbWF0aW9uIixiZWhhdmlvcnM6W3ZwXSxjb25maWd1cmU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlO3JldHVybiB0aGlzLl9lZmZlY3Q9bmV3IEtleWZyYW1lRWZmZWN0KHQsW3tvcGFjaXR5OiIwIn0se29wYWNpdHk6IjEifV0sdGhpcy50aW1pbmdGcm9tQ29uZmlnKGUpKSx0aGlzLl9lZmZlY3R9fSk7WXQoe2lzOiJmYWRlLW91dC1hbmltYXRpb24iLGJlaGF2aW9yczpbdnBdLGNvbmZpZ3VyZTpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGU7cmV0dXJuIHRoaXMuX2VmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QodCxbe29wYWNpdHk6IjEifSx7b3BhY2l0eToiMCJ9XSx0aGlzLnRpbWluZ0Zyb21Db25maWcoZSkpLHRoaXMuX2VmZmVjdH19KTtZdCh7aXM6InBhcGVyLW1lbnUtZ3Jvdy1oZWlnaHQtYW5pbWF0aW9uIixfdGVtcGxhdGU6bnVsbCxiZWhhdmlvcnM6W3ZwXSxjb25maWd1cmU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlLHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXIuaGVpZ2h0O3JldHVybiB0aGlzLl9lZmZlY3Q9bmV3IEtleWZyYW1lRWZmZWN0KHQsW3toZWlnaHQ6bi8yKyJweCJ9LHtoZWlnaHQ6bisicHgifV0sdGhpcy50aW1pbmdGcm9tQ29uZmlnKGUpKSx0aGlzLl9lZmZlY3R9fSk7WXQoe2lzOiJwYXBlci1tZW51LWdyb3ctd2lkdGgtYW5pbWF0aW9uIixfdGVtcGxhdGU6bnVsbCxiZWhhdmlvcnM6W3ZwXSxjb25maWd1cmU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlLHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXIud2lkdGg7cmV0dXJuIHRoaXMuX2VmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QodCxbe3dpZHRoOm4vMisicHgifSx7d2lkdGg6bisicHgifV0sdGhpcy50aW1pbmdGcm9tQ29uZmlnKGUpKSx0aGlzLl9lZmZlY3R9fSk7WXQoe2lzOiJwYXBlci1tZW51LXNocmluay13aWR0aC1hbmltYXRpb24iLF90ZW1wbGF0ZTpudWxsLGJlaGF2aW9yczpbdnBdLGNvbmZpZ3VyZTpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGUscj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49ci53aWR0aDtyZXR1cm4gdGhpcy5fZWZmZWN0PW5ldyBLZXlmcmFtZUVmZmVjdCh0LFt7d2lkdGg6bisicHgifSx7d2lkdGg6bi1uLzIwKyJweCJ9XSx0aGlzLnRpbWluZ0Zyb21Db25maWcoZSkpLHRoaXMuX2VmZmVjdH19KTtZdCh7aXM6InBhcGVyLW1lbnUtc2hyaW5rLWhlaWdodC1hbmltYXRpb24iLF90ZW1wbGF0ZTpudWxsLGJlaGF2aW9yczpbdnBdLGNvbmZpZ3VyZTpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGUscj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49ci5oZWlnaHQ7cmV0dXJuIHRoaXMuc2V0UHJlZml4ZWRQcm9wZXJ0eSh0LCJ0cmFuc2Zvcm1PcmlnaW4iLCIwIDAiKSx0aGlzLl9lZmZlY3Q9bmV3IEtleWZyYW1lRWZmZWN0KHQsW3toZWlnaHQ6bisicHgiLHRyYW5zZm9ybToidHJhbnNsYXRlWSgwKSJ9LHtoZWlnaHQ6bi8yKyJweCIsdHJhbnNmb3JtOiJ0cmFuc2xhdGVZKC0yMHB4KSJ9XSx0aGlzLnRpbWluZ0Zyb21Db25maWcoZSkpLHRoaXMuX2VmZmVjdH19KTt2YXIgZEU9e0FOSU1BVElPTl9DVUJJQ19CRVpJRVI6ImN1YmljLWJlemllciguMywuOTUsLjUsMSkiLE1BWF9BTklNQVRJT05fVElNRV9NUzo0MDB9LEdiZT1ZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBvdXRsaW5lOiBub25lOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1tZW51LWJ1dHRvbjsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICAgIGN1cnNvcjogYXV0bzsKICAgICAgICBjb2xvcjogdmFyKC0tZGlzYWJsZWQtdGV4dC1jb2xvcik7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLW1lbnUtYnV0dG9uLWRpc2FibGVkOwogICAgICB9CgogICAgICBpcm9uLWRyb3Bkb3duIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tZW51LWJ1dHRvbi1kcm9wZG93bjsKICAgICAgfQoKICAgICAgLmRyb3Bkb3duLWNvbnRlbnQgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMmRwOwoKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLW1lbnUtYnV0dG9uLWRyb3Bkb3duLWJhY2tncm91bmQsIHZhcigtLXByaW1hcnktYmFja2dyb3VuZC1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1tZW51LWJ1dHRvbi1jb250ZW50OwogICAgICB9CgogICAgICA6aG9zdChbdmVydGljYWwtYWxpZ249InRvcCJdKSAuZHJvcGRvd24tY29udGVudCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDsKICAgICAgICBtYXJnaW4tdG9wOiAtMTBweDsKICAgICAgICB0b3A6IDEwcHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFt2ZXJ0aWNhbC1hbGlnbj0iYm90dG9tIl0pIC5kcm9wZG93bi1jb250ZW50IHsKICAgICAgICBib3R0b206IDEwcHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogLTEwcHg7CiAgICAgICAgbWFyZ2luLXRvcDogMjBweDsKICAgICAgfQoKICAgICAgI3RyaWdnZXIgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJ0cmlnZ2VyIiBvbi10YXA9InRvZ2dsZSI+CiAgICAgIDxzbG90IG5hbWU9ImRyb3Bkb3duLXRyaWdnZXIiPjwvc2xvdD4KICAgIDwvZGl2PgoKICAgIDxpcm9uLWRyb3Bkb3duIGlkPSJkcm9wZG93biIgb3BlbmVkPSJ7e29wZW5lZH19IiBob3Jpem9udGFsLWFsaWduPSJbW2hvcml6b250YWxBbGlnbl1dIiB2ZXJ0aWNhbC1hbGlnbj0iW1t2ZXJ0aWNhbEFsaWduXV0iIGR5bmFtaWMtYWxpZ249IltbZHluYW1pY0FsaWduXV0iIGhvcml6b250YWwtb2Zmc2V0PSJbW2hvcml6b250YWxPZmZzZXRdXSIgdmVydGljYWwtb2Zmc2V0PSJbW3ZlcnRpY2FsT2Zmc2V0XV0iIG5vLW92ZXJsYXA9Iltbbm9PdmVybGFwXV0iIG9wZW4tYW5pbWF0aW9uLWNvbmZpZz0iW1tvcGVuQW5pbWF0aW9uQ29uZmlnXV0iIGNsb3NlLWFuaW1hdGlvbi1jb25maWc9IltbY2xvc2VBbmltYXRpb25Db25maWddXSIgbm8tYW5pbWF0aW9ucz0iW1tub0FuaW1hdGlvbnNdXSIgZm9jdXMtdGFyZ2V0PSJbW19kcm9wZG93bkNvbnRlbnRdXSIgYWxsb3ctb3V0c2lkZS1zY3JvbGw9IltbYWxsb3dPdXRzaWRlU2Nyb2xsXV0iIHJlc3RvcmUtZm9jdXMtb24tY2xvc2U9IltbcmVzdG9yZUZvY3VzT25DbG9zZV1dIiBvbi1pcm9uLW92ZXJsYXktY2FuY2VsZWQ9Il9fb25Jcm9uT3ZlcmxheUNhbmNlbGVkIiBleHBhbmQtc2l6aW5nLXRhcmdldC1mb3Itc2Nyb2xsYmFycz0iW1tleHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzXV0iPgogICAgICA8ZGl2IHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiIGNsYXNzPSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICA8c2xvdCBpZD0iY29udGVudCIgbmFtZT0iZHJvcGRvd24tY29udGVudCI+PC9zbG90PgogICAgICA8L2Rpdj4KICAgIDwvaXJvbi1kcm9wZG93bj4KYCxpczoicGFwZXItbWVudS1idXR0b24iLGJlaGF2aW9yczpbT28sRGldLHByb3BlcnRpZXM6e29wZW5lZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCxvYnNlcnZlcjoiX29wZW5lZENoYW5nZWQifSxob3Jpem9udGFsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJsZWZ0IixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LHZlcnRpY2FsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJ0b3AiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sZHluYW1pY0FsaWduOnt0eXBlOkJvb2xlYW59LGhvcml6b250YWxPZmZzZXQ6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwfSx2ZXJ0aWNhbE9mZnNldDp7dHlwZTpOdW1iZXIsdmFsdWU6MCxub3RpZnk6ITB9LG5vT3ZlcmxhcDp7dHlwZTpCb29sZWFufSxub0FuaW1hdGlvbnM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0saWdub3JlU2VsZWN0Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGNsb3NlT25BY3RpdmF0ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxvcGVuQW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVyblt7bmFtZToiZmFkZS1pbi1hbmltYXRpb24iLHRpbWluZzp7ZGVsYXk6MTAwLGR1cmF0aW9uOjIwMH19LHtuYW1lOiJwYXBlci1tZW51LWdyb3ctd2lkdGgtYW5pbWF0aW9uIix0aW1pbmc6e2RlbGF5OjEwMCxkdXJhdGlvbjoxNTAsZWFzaW5nOmRFLkFOSU1BVElPTl9DVUJJQ19CRVpJRVJ9fSx7bmFtZToicGFwZXItbWVudS1ncm93LWhlaWdodC1hbmltYXRpb24iLHRpbWluZzp7ZGVsYXk6MTAwLGR1cmF0aW9uOjI3NSxlYXNpbmc6ZEUuQU5JTUFUSU9OX0NVQklDX0JFWklFUn19XX19LGNsb3NlQW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVyblt7bmFtZToiZmFkZS1vdXQtYW5pbWF0aW9uIix0aW1pbmc6e2R1cmF0aW9uOjE1MH19LHtuYW1lOiJwYXBlci1tZW51LXNocmluay13aWR0aC1hbmltYXRpb24iLHRpbWluZzp7ZGVsYXk6MTAwLGR1cmF0aW9uOjUwLGVhc2luZzpkRS5BTklNQVRJT05fQ1VCSUNfQkVaSUVSfX0se25hbWU6InBhcGVyLW1lbnUtc2hyaW5rLWhlaWdodC1hbmltYXRpb24iLHRpbWluZzp7ZHVyYXRpb246MjAwLGVhc2luZzoiZWFzZS1pbiJ9fV19fSxhbGxvd091dHNpZGVTY3JvbGw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0scmVzdG9yZUZvY3VzT25DbG9zZTp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfSxleHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9kcm9wZG93bkNvbnRlbnQ6e3R5cGU6T2JqZWN0fX0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6Imdyb3VwIiwiYXJpYS1oYXNwb3B1cCI6InRydWUifSxsaXN0ZW5lcnM6eyJpcm9uLWFjdGl2YXRlIjoiX29uSXJvbkFjdGl2YXRlIiwiaXJvbi1zZWxlY3QiOiJfb25Jcm9uU2VsZWN0In0sZ2V0IGNvbnRlbnRFbGVtZW50KCl7Zm9yKHZhciBlPXp0KHRoaXMuJC5jb250ZW50KS5nZXREaXN0cmlidXRlZE5vZGVzKCksdD0wLHI9ZS5sZW5ndGg7dDxyO3QrKylpZihlW3RdLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpcmV0dXJuIGVbdF19LHRvZ2dsZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkP3RoaXMuY2xvc2UoKTp0aGlzLm9wZW4oKX0sb3BlbjpmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWR8fHRoaXMuJC5kcm9wZG93bi5vcGVuKCl9LGNsb3NlOmZ1bmN0aW9uKCl7dGhpcy4kLmRyb3Bkb3duLmNsb3NlKCl9LF9vbklyb25TZWxlY3Q6ZnVuY3Rpb24oZSl7dGhpcy5pZ25vcmVTZWxlY3R8fHRoaXMuY2xvc2UoKX0sX29uSXJvbkFjdGl2YXRlOmZ1bmN0aW9uKGUpe3RoaXMuY2xvc2VPbkFjdGl2YXRlJiZ0aGlzLmNsb3NlKCl9LF9vcGVuZWRDaGFuZ2VkOmZ1bmN0aW9uKGUsdCl7ZT8odGhpcy5fZHJvcGRvd25Db250ZW50PXRoaXMuY29udGVudEVsZW1lbnQsdGhpcy5maXJlKCJwYXBlci1kcm9wZG93bi1vcGVuIikpOnQhPW51bGwmJnRoaXMuZmlyZSgicGFwZXItZHJvcGRvd24tY2xvc2UiKX0sX2Rpc2FibGVkQ2hhbmdlZDpmdW5jdGlvbihlKXtEaS5fZGlzYWJsZWRDaGFuZ2VkLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlJiZ0aGlzLm9wZW5lZCYmdGhpcy5jbG9zZSgpfSxfX29uSXJvbk92ZXJsYXlDYW5jZWxlZDpmdW5jdGlvbihlKXt2YXIgdD1lLmRldGFpbCxyPXRoaXMuJC50cmlnZ2VyLG49enQodCkucGF0aDtuLmluZGV4T2Yocik+LTEmJmUucHJldmVudERlZmF1bHQoKX19KTtPYmplY3Qua2V5cyhkRSkuZm9yRWFjaChmdW5jdGlvbihlKXtHYmVbZV09ZEVbZV19KTt2YXIgdlc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTt2Vy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKTt2Vy5pbm5lckhUTUw9YDxpcm9uLWljb25zZXQtc3ZnIG5hbWU9InBhcGVyLWRyb3Bkb3duLW1lbnUiIHNpemU9IjI0Ij4KPHN2Zz48ZGVmcz4KPGcgaWQ9ImFycm93LWRyb3AtZG93biI+PHBhdGggZD0iTTcgMTBsNSA1IDUtNXoiPjwvcGF0aD48L2c+CjwvZGVmcz48L3N2Zz4KPC9pcm9uLWljb25zZXQtc3ZnPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh2Vy5jb250ZW50KTt2YXIgeFc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTt4Vy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKTt4Vy5pbm5lckhUTUw9YDxkb20tbW9kdWxlIGlkPSJwYXBlci1kcm9wZG93bi1tZW51LXNoYXJlZC1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKCiAgICAgICAgLyogTk9URShjZGF0YSk6IEJvdGggdmFsdWVzIGFyZSBuZWVkZWQsIHNpbmNlIHNvbWUgcGhvbmVzIHJlcXVpcmUgdGhlCiAgICAgICAgICogdmFsdWUgdG8gYmUgXGB0cmFuc3BhcmVudFxgLgogICAgICAgICAqLwogICAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLDAsMCwwKTsKICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwoKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgfTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZHJvcGRvd24tbWVudTsKICAgICAgfQoKICAgICAgLyogcGFwZXItZHJvcGRvd24tbWVudSBhbmQgcGFwZXItZHJvcGRvd24tbWVudS1saWdodCBib3RoIGRlbGVnYXRlIGZvY3VzCiAgICAgICAqIHRvIG90aGVyIGludGVybmFsIGVsZW1lbnRzIHdoaWNoIG1hbmFnZSBmb2N1cyBzdHlsaW5nLiAqLwogICAgICA6aG9zdCg6Zm9jdXMpIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CgogICAgICA6aG9zdCg6ZGlyKHJ0bCkpIHsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKCiAgICAgICAgQGFwcGx5KC0tcGFwZXItZHJvcGRvd24tbWVudSk7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1kcm9wZG93bi1tZW51LWRpc2FibGVkOwogICAgICB9CgogICAgICA6aG9zdChbbm9pbmtdKSBwYXBlci1yaXBwbGUgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtuby1sYWJlbC1mbG9hdF0pIHBhcGVyLXJpcHBsZSB7CiAgICAgICAgdG9wOiA4cHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLXJpcHBsZSB7CiAgICAgICAgdG9wOiAxMnB4OwogICAgICAgIGxlZnQ6IDBweDsKICAgICAgICBib3R0b206IDhweDsKICAgICAgICByaWdodDogMHB4OwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1kcm9wZG93bi1tZW51LXJpcHBsZTsKICAgICAgfQoKICAgICAgcGFwZXItbWVudS1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDA7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWRyb3Bkb3duLW1lbnUtYnV0dG9uOwogICAgICB9CgogICAgICBwYXBlci1pbnB1dCB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZHJvcGRvd24tbWVudS1pbnB1dDsKICAgICAgfQoKICAgICAgaXJvbi1pY29uIHsKICAgICAgICBjb2xvcjogdmFyKC0tZGlzYWJsZWQtdGV4dC1jb2xvcik7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWRyb3Bkb3duLW1lbnUtaWNvbjsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+YDtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHhXLmNvbnRlbnQpO3ZhciBXYmU9R3QoSFRNTEVsZW1lbnQpO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1kcm9wZG93bi1tZW51LXNoYXJlZC1zdHlsZXMiPjwvc3R5bGU+CgogICAgPHBhcGVyLW1lbnUtYnV0dG9uIGlkPSJtZW51QnV0dG9uIiB2ZXJ0aWNhbC1hbGlnbj0iW1t2ZXJ0aWNhbEFsaWduXV0iIGhvcml6b250YWwtYWxpZ249IltbaG9yaXpvbnRhbEFsaWduXV0iIGR5bmFtaWMtYWxpZ249IltbZHluYW1pY0FsaWduXV0iIHZlcnRpY2FsLW9mZnNldD0iW1tfY29tcHV0ZU1lbnVWZXJ0aWNhbE9mZnNldChub0xhYmVsRmxvYXQsIHZlcnRpY2FsT2Zmc2V0KV1dIiBkaXNhYmxlZD0iW1tkaXNhYmxlZF1dIiBuby1hbmltYXRpb25zPSJbW25vQW5pbWF0aW9uc11dIiBvbi1pcm9uLXNlbGVjdD0iX29uSXJvblNlbGVjdCIgb24taXJvbi1kZXNlbGVjdD0iX29uSXJvbkRlc2VsZWN0IiBvcGVuZWQ9Int7b3BlbmVkfX0iIGNsb3NlLW9uLWFjdGl2YXRlIGFsbG93LW91dHNpZGUtc2Nyb2xsPSJbW2FsbG93T3V0c2lkZVNjcm9sbF1dIiByZXN0b3JlLWZvY3VzLW9uLWNsb3NlPSJbW3Jlc3RvcmVGb2N1c09uQ2xvc2VdXSIgZXhwYW5kLXNpemluZy10YXJnZXQtZm9yLXNjcm9sbGJhcnM9IltbZXhwYW5kU2l6aW5nVGFyZ2V0Rm9yU2Nyb2xsYmFyc11dIj4KICAgICAgPCEtLSBzdXBwb3J0IGh5YnJpZCBtb2RlOiB1c2VyIG1pZ2h0IGJlIHVzaW5nIHBhcGVyLW1lbnUtYnV0dG9uIDEueCB3aGljaCBkaXN0cmlidXRlcyB2aWEgPGNvbnRlbnQ+IC0tPgogICAgICA8ZGl2IGNsYXNzPSJkcm9wZG93bi10cmlnZ2VyIiBzbG90PSJkcm9wZG93bi10cmlnZ2VyIj4KICAgICAgICA8cGFwZXItcmlwcGxlPjwvcGFwZXItcmlwcGxlPgogICAgICAgIDwhLS0gcGFwZXItaW5wdXQgaGFzIHR5cGU9InRleHQiIGZvciBhMTF5LCBkbyBub3QgcmVtb3ZlIC0tPgogICAgICAgIDxwYXBlci1pbnB1dCBpZD0iaW5wdXQiIHR5cGU9InRleHQiIGludmFsaWQ9IltbaW52YWxpZF1dIiByZWFkb25seSBkaXNhYmxlZD0iW1tkaXNhYmxlZF1dIiB2YWx1ZT0iW1t2YWx1ZV1dIiBwbGFjZWhvbGRlcj0iW1twbGFjZWhvbGRlcl1dIiBlcnJvci1tZXNzYWdlPSJbW2Vycm9yTWVzc2FnZV1dIiBhbHdheXMtZmxvYXQtbGFiZWw9IltbYWx3YXlzRmxvYXRMYWJlbF1dIiBuby1sYWJlbC1mbG9hdD0iW1tub0xhYmVsRmxvYXRdXSIgbGFiZWw9IltbbGFiZWxdXSIgaW5wdXQtcm9sZT0iYnV0dG9uIiBpbnB1dC1hcmlhLWhhc3BvcHVwPSJsaXN0Ym94IiBhdXRvY29tcGxldGU9Im9mZiI+CiAgICAgICAgICA8IS0tIHN1cHBvcnQgaHlicmlkIG1vZGU6IHVzZXIgbWlnaHQgYmUgdXNpbmcgcGFwZXItaW5wdXQgMS54IHdoaWNoIGRpc3RyaWJ1dGVzIHZpYSA8Y29udGVudD4gLS0+CiAgICAgICAgICA8aXJvbi1pY29uIGljb249InBhcGVyLWRyb3Bkb3duLW1lbnU6YXJyb3ctZHJvcC1kb3duIiBzdWZmaXggc2xvdD0ic3VmZml4Ij48L2lyb24taWNvbj4KICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICA8L2Rpdj4KICAgICAgPHNsb3QgaWQ9ImNvbnRlbnQiIG5hbWU9ImRyb3Bkb3duLWNvbnRlbnQiIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiPjwvc2xvdD4KICAgIDwvcGFwZXItbWVudS1idXR0b24+CmAsaXM6InBhcGVyLWRyb3Bkb3duLW1lbnUiLGJlaGF2aW9yczpbTWgsRGksVGgsQ2hdLHByb3BlcnRpZXM6e3NlbGVjdGVkSXRlbUxhYmVsOnt0eXBlOlN0cmluZyxub3RpZnk6ITAscmVhZE9ubHk6ITB9LHNlbGVjdGVkSXRlbTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLHJlYWRPbmx5OiEwfSx2YWx1ZTp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxsYWJlbDp7dHlwZTpTdHJpbmd9LHBsYWNlaG9sZGVyOnt0eXBlOlN0cmluZ30sZXJyb3JNZXNzYWdlOnt0eXBlOlN0cmluZ30sb3BlbmVkOnt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwLHZhbHVlOiExLG9ic2VydmVyOiJfb3BlbmVkQ2hhbmdlZCJ9LGFsbG93T3V0c2lkZVNjcm9sbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxub0xhYmVsRmxvYXQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LGFsd2F5c0Zsb2F0TGFiZWw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sbm9BbmltYXRpb25zOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGhvcml6b250YWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6InJpZ2h0In0sdmVydGljYWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6InRvcCJ9LHZlcnRpY2FsT2Zmc2V0Ok51bWJlcixkeW5hbWljQWxpZ246e3R5cGU6Qm9vbGVhbn0scmVzdG9yZUZvY3VzT25DbG9zZTp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfSxleHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxsaXN0ZW5lcnM6e3RhcDoiX29uVGFwIn0sa2V5QmluZGluZ3M6eyJ1cCBkb3duIjoib3BlbiIsZXNjOiJjbG9zZSJ9LG9ic2VydmVyczpbIl9zZWxlY3RlZEl0ZW1DaGFuZ2VkKHNlbGVjdGVkSXRlbSkiXSxfYXR0YWNoRG9tKGUpe2xldCB0PXVlKHRoaXMpO3JldHVybiB0LmF0dGFjaFNoYWRvdyh7bW9kZToib3BlbiIsZGVsZWdhdGVzRm9jdXM6ITAsc2hhZHlVcGdyYWRlRnJhZ21lbnQ6ZX0pLHQuc2hhZG93Um9vdC5hcHBlbmRDaGlsZChlKSxXYmUucHJvdG90eXBlLl9hdHRhY2hEb20uY2FsbCh0aGlzLGUpfSxmb2N1cygpe3RoaXMuJC5pbnB1dC5fZm9jdXNhYmxlRWxlbWVudC5mb2N1cygpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY29udGVudEVsZW1lbnQ7ZSYmZS5zZWxlY3RlZEl0ZW0mJnRoaXMuX3NldFNlbGVjdGVkSXRlbShlLnNlbGVjdGVkSXRlbSl9LGdldCBjb250ZW50RWxlbWVudCgpe2Zvcih2YXIgZT16dCh0aGlzLiQuY29udGVudCkuZ2V0RGlzdHJpYnV0ZWROb2RlcygpLHQ9MCxyPWUubGVuZ3RoO3Q8cjt0KyspaWYoZVt0XS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFKXJldHVybiBlW3RdfSxvcGVuOmZ1bmN0aW9uKCl7dGhpcy4kLm1lbnVCdXR0b24ub3BlbigpfSxjbG9zZTpmdW5jdGlvbigpe3RoaXMuJC5tZW51QnV0dG9uLmNsb3NlKCl9LF9vbklyb25TZWxlY3Q6ZnVuY3Rpb24oZSl7dGhpcy5fc2V0U2VsZWN0ZWRJdGVtKGUuZGV0YWlsLml0ZW0pfSxfb25Jcm9uRGVzZWxlY3Q6ZnVuY3Rpb24oZSl7dGhpcy5fc2V0U2VsZWN0ZWRJdGVtKG51bGwpfSxfb25UYXA6ZnVuY3Rpb24oZSl7bGd0KGUpPT09dGhpcyYmdGhpcy5vcGVuKCl9LF9zZWxlY3RlZEl0ZW1DaGFuZ2VkOmZ1bmN0aW9uKGUpe3ZhciB0PSIiO2U/dD1lLmxhYmVsfHxlLmdldEF0dHJpYnV0ZSgibGFiZWwiKXx8ZS50ZXh0Q29udGVudC50cmltKCk6dD0iIix0aGlzLnZhbHVlPXQsdGhpcy5fc2V0U2VsZWN0ZWRJdGVtTGFiZWwodCl9LF9jb21wdXRlTWVudVZlcnRpY2FsT2Zmc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fChlPy00OjgpfSxfZ2V0VmFsaWRpdHk6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fCF0aGlzLnJlcXVpcmVkfHx0aGlzLnJlcXVpcmVkJiYhIXRoaXMudmFsdWV9LF9vcGVuZWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcGVuZWQ/InRydWUiOiJmYWxzZSIsdD10aGlzLmNvbnRlbnRFbGVtZW50O3QmJnQuc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIixlKX19KTt2YXIgYlc9MSxQMHQ9MixQOT17b3V0ZXJTY3JvbGw6e3Njcm9sbDohMH0sc2hhZG93TW9kZTp7c3RhbmRhcmQ6UDB0LHdhdGVyZmFsbDpiVywid2F0ZXJmYWxsLXRhbGwiOmJXfSx0YWxsTW9kZTp7IndhdGVyZmFsbC10YWxsIjohMH19O1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIEBhcHBseSAtLWxheW91dC12ZXJ0aWNhbDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbDsKICAgICAgfQoKICAgICAgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CiAgICAgIH0KCiAgICAgICNtYWluUGFuZWwgewogICAgICAgIEBhcHBseSAtLWxheW91dC12ZXJ0aWNhbDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZmxleDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWluLWhlaWdodDogMDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtYm9keTsKICAgICAgfQoKICAgICAgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC1jb250YWluZXI7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1vZGU6IHNjcm9sbAogICAgICAgKi8KICAgICAgOmhvc3QoW21vZGU9c2Nyb2xsXSkgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC1zY3JvbGwtY29udGFpbmVyOwogICAgICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgICB9CgogICAgICA6aG9zdChbbW9kZT1zY3JvbGxdKSB7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOwogICAgICB9CgogICAgICAvKgogICAgICAgKiBtb2RlOiBjb3ZlcgogICAgICAgKi8KICAgICAgOmhvc3QoW21vZGU9Y292ZXJdKSAjbWFpbkNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsLWNvdmVyLWNvbnRhaW5lcjsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICB9CgogICAgICA6aG9zdChbbW9kZT1jb3Zlcl0pICNtYWluUGFuZWwgewogICAgICAgIHBvc2l0aW9uOiBzdGF0aWM7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1vZGU6IHN0YW5kYXJkCiAgICAgICAqLwogICAgICA6aG9zdChbbW9kZT1zdGFuZGFyZF0pICNtYWluQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtc3RhbmRhcmQtY29udGFpbmVyOwogICAgICB9CgogICAgICAvKgogICAgICAgKiBtb2RlOiBzZWFtZWQKICAgICAgICovCiAgICAgIDpob3N0KFttb2RlPXNlYW1lZF0pICNtYWluQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtc2VhbWVkLWNvbnRhaW5lcjsKICAgICAgfQoKCiAgICAgIC8qCiAgICAgICAqIG1vZGU6IHdhdGVyZmFsbAogICAgICAgKi8KICAgICAgOmhvc3QoW21vZGU9d2F0ZXJmYWxsXSkgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC13YXRlcmZhbGwtY29udGFpbmVyOwogICAgICB9CgogICAgICAvKgogICAgICAgKiBtb2RlOiB3YXRlcmZhbGwtdGFsbAogICAgICAgKi8KICAgICAgOmhvc3QoW21vZGU9d2F0ZXJmYWxsLXRhbGxdKSAjbWFpbkNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsLXdhdGVyZmFsbC10YWxsLWNvbnRhaW5lcjsKICAgICAgfQoKICAgICAgI2Ryb3BTaGFkb3cgewogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC41czsKICAgICAgICBoZWlnaHQ6IDZweDsKICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwcHggNXB4IDZweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtc2hhZG93OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAjZHJvcFNoYWRvdy5oYXMtc2hhZG93IHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAjbWFpbkNvbnRhaW5lciA+IDo6c2xvdHRlZCguZml0KSB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZpdDsKICAgICAgfQoKICAgIDwvc3R5bGU+CgogICAgPHNsb3QgaWQ9ImhlYWRlclNsb3QiIG5hbWU9ImhlYWRlciI+PC9zbG90PgoKICAgIDxkaXYgaWQ9Im1haW5QYW5lbCI+CiAgICAgIDxkaXYgaWQ9Im1haW5Db250YWluZXIiIGNsYXNzXCQ9IltbX2NvbXB1dGVNYWluQ29udGFpbmVyQ2xhc3MobW9kZSldXSI+CiAgICAgICAgPHNsb3Q+PC9zbG90PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBpZD0iZHJvcFNoYWRvdyI+PC9kaXY+CiAgICA8L2Rpdj4KYCxpczoicGFwZXItaGVhZGVyLXBhbmVsIixwcm9wZXJ0aWVzOnttb2RlOnt0eXBlOlN0cmluZyx2YWx1ZToic3RhbmRhcmQiLG9ic2VydmVyOiJfbW9kZUNoYW5nZWQiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sc2hhZG93Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHRhbGxDbGFzczp7dHlwZTpTdHJpbmcsdmFsdWU6InRhbGwifSxhdFRvcDp7dHlwZTpCb29sZWFuLHZhbHVlOiEwLG5vdGlmeTohMCxyZWFkT25seTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9fSxvYnNlcnZlcnM6WyJfY29tcHV0ZURyb3BTaGFkb3dIaWRkZW4oYXRUb3AsIG1vZGUsIHNoYWRvdykiXSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2FkZExpc3RlbmVyKCksdGhpcy5fa2VlcFNjcm9sbGluZ1N0YXRlKCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fcmVtb3ZlTGlzdGVuZXIoKX0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLnNjcm9sbEhhbmRsZXI9dGhpcy5fc2Nyb2xsLmJpbmQodGhpcyksY29uc29sZS53YXJuKHRoaXMuaXMsImlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgYXBwLWxheW91dCBpbnN0ZWFkISIpfSxnZXQgaGVhZGVyKCl7cmV0dXJuIHp0KHRoaXMuJC5oZWFkZXJTbG90KS5nZXREaXN0cmlidXRlZE5vZGVzKClbMF19LGdldCBzY3JvbGxlcigpe3JldHVybiB0aGlzLl9nZXRTY3JvbGxlckZvck1vZGUodGhpcy5tb2RlKX0sZ2V0IHZpc2libGVTaGFkb3coKXtyZXR1cm4gdGhpcy4kLmRyb3BTaGFkb3cuY2xhc3NMaXN0LmNvbnRhaW5zKCJoYXMtc2hhZG93Iil9LF9jb21wdXRlRHJvcFNoYWRvd0hpZGRlbjpmdW5jdGlvbihlLHQscil7dmFyIG49UDkuc2hhZG93TW9kZVt0XTt0aGlzLnNoYWRvdz90aGlzLnRvZ2dsZUNsYXNzKCJoYXMtc2hhZG93IiwhMCx0aGlzLiQuZHJvcFNoYWRvdyk6bj09PVAwdD90aGlzLnRvZ2dsZUNsYXNzKCJoYXMtc2hhZG93IiwhMCx0aGlzLiQuZHJvcFNoYWRvdyk6bj09PWJXJiYhZT90aGlzLnRvZ2dsZUNsYXNzKCJoYXMtc2hhZG93IiwhMCx0aGlzLiQuZHJvcFNoYWRvdyk6dGhpcy50b2dnbGVDbGFzcygiaGFzLXNoYWRvdyIsITEsdGhpcy4kLmRyb3BTaGFkb3cpfSxfY29tcHV0ZU1haW5Db250YWluZXJDbGFzczpmdW5jdGlvbihlKXt2YXIgdD17fTtyZXR1cm4gdC5mbGV4PWUhPT0iY292ZXIiLE9iamVjdC5rZXlzKHQpLmZpbHRlcihmdW5jdGlvbihyKXtyZXR1cm4gdFtyXX0pLmpvaW4oIiAiKX0sX2FkZExpc3RlbmVyOmZ1bmN0aW9uKCl7dGhpcy5zY3JvbGxlci5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuc2Nyb2xsSGFuZGxlcil9LF9yZW1vdmVMaXN0ZW5lcjpmdW5jdGlvbigpe3RoaXMuc2Nyb2xsZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLnNjcm9sbEhhbmRsZXIpfSxfbW9kZUNoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt2YXIgcj1QOSxuPXRoaXMuaGVhZGVyLGk9MjAwO24mJihyLnRhbGxNb2RlW3RdJiYhci50YWxsTW9kZVtlXT8obi5jbGFzc0xpc3QucmVtb3ZlKHRoaXMudGFsbENsYXNzKSx0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7bi5jbGFzc0xpc3QucmVtb3ZlKCJhbmltYXRlIil9LGkpKTp0aGlzLnRvZ2dsZUNsYXNzKCJhbmltYXRlIixyLnRhbGxNb2RlW2VdLG4pKSx0aGlzLl9rZWVwU2Nyb2xsaW5nU3RhdGUoKX0sX2tlZXBTY3JvbGxpbmdTdGF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuc2Nyb2xsZXIsdD10aGlzLmhlYWRlcjt0aGlzLl9zZXRBdFRvcChlLnNjcm9sbFRvcD09PTApLHQmJnRoaXMudGFsbENsYXNzJiZQOS50YWxsTW9kZVt0aGlzLm1vZGVdJiZ0aGlzLnRvZ2dsZUNsYXNzKHRoaXMudGFsbENsYXNzLHRoaXMuYXRUb3B8fHQuY2xhc3NMaXN0LmNvbnRhaW5zKHRoaXMudGFsbENsYXNzKSYmZS5zY3JvbGxIZWlnaHQ8dGhpcy5vZmZzZXRIZWlnaHQsdCl9LF9zY3JvbGw6ZnVuY3Rpb24oKXt0aGlzLl9rZWVwU2Nyb2xsaW5nU3RhdGUoKSx0aGlzLmZpcmUoImNvbnRlbnQtc2Nyb2xsIix7dGFyZ2V0OnRoaXMuc2Nyb2xsZXJ9LHtidWJibGVzOiExfSl9LF9nZXRTY3JvbGxlckZvck1vZGU6ZnVuY3Rpb24oZSl7cmV0dXJuIFA5Lm91dGVyU2Nyb2xsW2VdP3RoaXM6dGhpcy4kLm1haW5Db250YWluZXJ9fSk7WXQoe2lzOiJwYXBlci1pY29uLWJ1dHRvbiIsX3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHotaW5kZXg6IDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CgogICAgICAgIHdpZHRoOiA0MHB4OwogICAgICAgIGhlaWdodDogNDBweDsKCiAgICAgICAgLyoKICAgICAgICAgIE5PVEU6IEJvdGggdmFsdWVzIGFyZSBuZWVkZWQsIHNpbmNlIHNvbWUgcGhvbmVzIHJlcXVpcmUgdGhlIHZhbHVlIHRvCiAgICAgICAgICBiZSBcYHRyYW5zcGFyZW50XGAuCiAgICAgICAgKi8KICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7CiAgICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKCiAgICAgICAgLyogQmVjYXVzZSBvZiBwb2x5bWVyLzI1NTgsIHRoaXMgc3R5bGUgaGFzIGxvd2VyIHNwZWNpZmljaXR5IHRoYW4gKiAqLwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3ggIWltcG9ydGFudDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaWNvbi1idXR0b247CiAgICAgIH0KCiAgICAgIDpob3N0ICNpbmsgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pY29uLWJ1dHRvbi1pbmstY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgICAgIG9wYWNpdHk6IDAuNjsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pY29uLWJ1dHRvbi1kaXNhYmxlZC10ZXh0LCB2YXIoLS1kaXNhYmxlZC10ZXh0LWNvbG9yKSk7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgY3Vyc29yOiBhdXRvOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pY29uLWJ1dHRvbi1kaXNhYmxlZDsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpob3ZlcikgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWljb24tYnV0dG9uLWhvdmVyOwogICAgICB9CgogICAgICBpcm9uLWljb24gewogICAgICAgIC0taXJvbi1pY29uLXdpZHRoOiAxMDAlOwogICAgICAgIC0taXJvbi1pY29uLWhlaWdodDogMTAwJTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8aXJvbi1pY29uIGlkPSJpY29uIiBzcmM9Iltbc3JjXV0iIGljb249IltbaWNvbl1dIgogICAgICAgICAgICAgICBhbHQkPSJbW2FsdF1dIj48L2lyb24taWNvbj4KICBgLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJidXR0b24iLHRhYmluZGV4OiIwIn0sYmVoYXZpb3JzOltqeF0scmVnaXN0ZXJlZDpmdW5jdGlvbigpe3RoaXMuX3RlbXBsYXRlLnNldEF0dHJpYnV0ZSgic3RyaXAtd2hpdGVzcGFjZSIsIiIpfSxwcm9wZXJ0aWVzOntzcmM6e3R5cGU6U3RyaW5nfSxpY29uOnt0eXBlOlN0cmluZ30sYWx0Ont0eXBlOlN0cmluZyxvYnNlcnZlcjoiX2FsdENoYW5nZWQifX0sX2FsdENoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmdldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIpOyghcnx8dD09cikmJnRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIixlKX19KTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiA0MDBweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZDsKICAgICAgICBwYWRkaW5nOiAycHg7CiAgICAgICAgLW1vei1hcHBlYXJhbmNlOiB0ZXh0YXJlYTsKICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHRleHRhcmVhOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5taXJyb3ItdGV4dCB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBAYXBwbHkgLS1pcm9uLWF1dG9ncm93LXRleHRhcmVhOwogICAgICB9CgogICAgICAuZml0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZml0OwogICAgICB9CgogICAgICB0ZXh0YXJlYSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIHJlc2l6ZTogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kOiBpbmhlcml0OwogICAgICAgIGNvbG9yOiBpbmhlcml0OwogICAgICAgIC8qIHNlZSBjb21tZW50cyBpbiB0ZW1wbGF0ZSAqLwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBmb250LXNpemU6IGluaGVyaXQ7CiAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICAgICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7CiAgICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdDsKICAgICAgICBAYXBwbHkgLS1pcm9uLWF1dG9ncm93LXRleHRhcmVhOwogICAgICB9CgogICAgICB0ZXh0YXJlYTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0taXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS1wbGFjZWhvbGRlcjsKICAgICAgfQoKICAgICAgdGV4dGFyZWE6LW1vei1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0taXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS1wbGFjZWhvbGRlcjsKICAgICAgfQoKICAgICAgdGV4dGFyZWE6Oi1tb3otcGxhY2Vob2xkZXIgewogICAgICAgIEBhcHBseSAtLWlyb24tYXV0b2dyb3ctdGV4dGFyZWEtcGxhY2Vob2xkZXI7CiAgICAgIH0KCiAgICAgIHRleHRhcmVhOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0taXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS1wbGFjZWhvbGRlcjsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8IS0tIHRoZSBtaXJyb3Igc2l6ZXMgdGhlIGlucHV0L3RleHRhcmVhIHNvIGl0IGdyb3dzIHdpdGggdHlwaW5nIC0tPgogICAgPCEtLSB1c2UgJiMxNjA7IGluc3RlYWQgJm5ic3A7IG9mIHRvIGFsbG93IHRoaXMgZWxlbWVudCB0byBiZSB1c2VkIGluIFhIVE1MIC0tPgogICAgPGRpdiBpZD0ibWlycm9yIiBjbGFzcz0ibWlycm9yLXRleHQiIGFyaWEtaGlkZGVuPSJ0cnVlIj4mbmJzcDs8L2Rpdj4KCiAgICA8IS0tIHNpemUgdGhlIGlucHV0L3RleHRhcmVhIHdpdGggYSBkaXYsIGJlY2F1c2UgdGhlIHRleHRhcmVhIGhhcyBpbnRyaW5zaWMgc2l6ZSBpbiBmZiAtLT4KICAgIDxkaXYgY2xhc3M9InRleHRhcmVhLWNvbnRhaW5lciBmaXQiPgogICAgICA8dGV4dGFyZWEgaWQ9InRleHRhcmVhIiBuYW1lJD0iW1tuYW1lXV0iIGFyaWEtbGFiZWwkPSJbW2xhYmVsXV0iIGF1dG9jb21wbGV0ZSQ9IltbYXV0b2NvbXBsZXRlXV0iIGF1dG9mb2N1cyQ9IltbYXV0b2ZvY3VzXV0iIGF1dG9jYXBpdGFsaXplJD0iW1thdXRvY2FwaXRhbGl6ZV1dIiBpbnB1dG1vZGUkPSJbW2lucHV0bW9kZV1dIiBwbGFjZWhvbGRlciQ9IltbcGxhY2Vob2xkZXJdXSIgcmVhZG9ubHkkPSJbW3JlYWRvbmx5XV0iIHJlcXVpcmVkJD0iW1tyZXF1aXJlZF1dIiBkaXNhYmxlZCQ9IltbZGlzYWJsZWRdXSIgcm93cyQ9Iltbcm93c11dIiBtaW5sZW5ndGgkPSJbW21pbmxlbmd0aF1dIiBtYXhsZW5ndGgkPSJbW21heGxlbmd0aF1dIj48L3RleHRhcmVhPgogICAgPC9kaXY+CmAsaXM6Imlyb24tYXV0b2dyb3ctdGV4dGFyZWEiLGJlaGF2aW9yczpbQ2gsRGldLHByb3BlcnRpZXM6e3ZhbHVlOntvYnNlcnZlcjoiX3ZhbHVlQ2hhbmdlZCIsdHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxiaW5kVmFsdWU6e29ic2VydmVyOiJfYmluZFZhbHVlQ2hhbmdlZCIsdHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxyb3dzOnt0eXBlOk51bWJlcix2YWx1ZToxLG9ic2VydmVyOiJfdXBkYXRlQ2FjaGVkIn0sbWF4Um93czp7dHlwZTpOdW1iZXIsdmFsdWU6MCxvYnNlcnZlcjoiX3VwZGF0ZUNhY2hlZCJ9LGF1dG9jb21wbGV0ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im9mZiJ9LGF1dG9mb2N1czp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhdXRvY2FwaXRhbGl6ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im5vbmUifSxpbnB1dG1vZGU6e3R5cGU6U3RyaW5nfSxwbGFjZWhvbGRlcjp7dHlwZTpTdHJpbmd9LHJlYWRvbmx5Ont0eXBlOlN0cmluZ30scmVxdWlyZWQ6e3R5cGU6Qm9vbGVhbn0sbWlubGVuZ3RoOnt0eXBlOk51bWJlcn0sbWF4bGVuZ3RoOnt0eXBlOk51bWJlcn0sbGFiZWw6e3R5cGU6U3RyaW5nfX0sbGlzdGVuZXJzOntpbnB1dDoiX29uSW5wdXQifSxnZXQgdGV4dGFyZWEoKXtyZXR1cm4gdGhpcy4kLnRleHRhcmVhfSxnZXQgc2VsZWN0aW9uU3RhcnQoKXtyZXR1cm4gdGhpcy4kLnRleHRhcmVhLnNlbGVjdGlvblN0YXJ0fSxnZXQgc2VsZWN0aW9uRW5kKCl7cmV0dXJuIHRoaXMuJC50ZXh0YXJlYS5zZWxlY3Rpb25FbmR9LHNldCBzZWxlY3Rpb25TdGFydChlKXt0aGlzLiQudGV4dGFyZWEuc2VsZWN0aW9uU3RhcnQ9ZX0sc2V0IHNlbGVjdGlvbkVuZChlKXt0aGlzLiQudGV4dGFyZWEuc2VsZWN0aW9uRW5kPWV9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dmFyIGU9bmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVAoPzpbb2FdZHxob25lKS8pJiYhbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvT1MgMVszNDU2Nzg5XS8pO2UmJih0aGlzLiQudGV4dGFyZWEuc3R5bGUubWFyZ2luTGVmdD0iLTNweCIpfSx2YWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuJC50ZXh0YXJlYS52YWxpZGl0eS52YWxpZDtyZXR1cm4gZSYmKHRoaXMucmVxdWlyZWQmJnRoaXMudmFsdWU9PT0iIj9lPSExOnRoaXMuaGFzVmFsaWRhdG9yKCkmJihlPUNoLnZhbGlkYXRlLmNhbGwodGhpcyx0aGlzLnZhbHVlKSkpLHRoaXMuaW52YWxpZD0hZSx0aGlzLmZpcmUoImlyb24taW5wdXQtdmFsaWRhdGUiKSxlfSxfYmluZFZhbHVlQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLnZhbHVlPWV9LF92YWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy50ZXh0YXJlYTshdHx8KHQudmFsdWUhPT1lJiYodC52YWx1ZT1lfHxlPT09MD9lOiIiKSx0aGlzLmJpbmRWYWx1ZT1lLHRoaXMuJC5taXJyb3IuaW5uZXJIVE1MPXRoaXMuX3ZhbHVlRm9yTWlycm9yKCksdGhpcy5maXJlKCJiaW5kLXZhbHVlLWNoYW5nZWQiLHt2YWx1ZTp0aGlzLmJpbmRWYWx1ZX0pKX0sX29uSW5wdXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9enQoZSkucGF0aDt0aGlzLnZhbHVlPXQ/dFswXS52YWx1ZTplLnRhcmdldC52YWx1ZX0sX2NvbnN0cmFpbjpmdW5jdGlvbihlKXt2YXIgdDtmb3IoZT1lfHxbIiJdLHRoaXMubWF4Um93cz4wJiZlLmxlbmd0aD50aGlzLm1heFJvd3M/dD1lLnNsaWNlKDAsdGhpcy5tYXhSb3dzKTp0PWUuc2xpY2UoMCk7dGhpcy5yb3dzPjAmJnQubGVuZ3RoPHRoaXMucm93czspdC5wdXNoKCIiKTtyZXR1cm4gdC5qb2luKCI8YnIvPiIpKyImIzE2MDsifSxfdmFsdWVGb3JNaXJyb3I6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnRleHRhcmVhO2lmKCEhZSlyZXR1cm4gdGhpcy50b2tlbnM9ZSYmZS52YWx1ZT9lLnZhbHVlLnJlcGxhY2UoLyYvZ20sIiZhbXA7IikucmVwbGFjZSgvIi9nbSwiJnF1b3Q7IikucmVwbGFjZSgvJy9nbSwiJiMzOTsiKS5yZXBsYWNlKC88L2dtLCImbHQ7IikucmVwbGFjZSgvPi9nbSwiJmd0OyIpLnNwbGl0KGAKYCk6WyIiXSx0aGlzLl9jb25zdHJhaW4odGhpcy50b2tlbnMpfSxfdXBkYXRlQ2FjaGVkOmZ1bmN0aW9uKCl7dGhpcy4kLm1pcnJvci5pbm5lckhUTUw9dGhpcy5fY29uc3RyYWluKHRoaXMudG9rZW5zKX19KTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIGxhYmVsIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8cGFwZXItaW5wdXQtY29udGFpbmVyIG5vLWxhYmVsLWZsb2F0JD0iW1tub0xhYmVsRmxvYXRdXSIgYWx3YXlzLWZsb2F0LWxhYmVsPSJbW19jb21wdXRlQWx3YXlzRmxvYXRMYWJlbChhbHdheXNGbG9hdExhYmVsLHBsYWNlaG9sZGVyKV1dIiBhdXRvLXZhbGlkYXRlJD0iW1thdXRvVmFsaWRhdGVdXSIgZGlzYWJsZWQkPSJbW2Rpc2FibGVkXV0iIGludmFsaWQ9IltbaW52YWxpZF1dIj4KCiAgICAgIDxsYWJlbCBoaWRkZW4kPSJbWyFsYWJlbF1dIiBhcmlhLWhpZGRlbj0idHJ1ZSIgZm9yJD0iW1tfaW5wdXRJZF1dIiBzbG90PSJsYWJlbCI+W1tsYWJlbF1dPC9sYWJlbD4KCiAgICAgIDxpcm9uLWF1dG9ncm93LXRleHRhcmVhIGNsYXNzPSJwYXBlci1pbnB1dC1pbnB1dCIgc2xvdD0iaW5wdXQiIGlkJD0iW1tfaW5wdXRJZF1dIiBhcmlhLWxhYmVsbGVkYnkkPSJbW19hcmlhTGFiZWxsZWRCeV1dIiBhcmlhLWRlc2NyaWJlZGJ5JD0iW1tfYXJpYURlc2NyaWJlZEJ5XV0iIGJpbmQtdmFsdWU9Int7dmFsdWV9fSIgaW52YWxpZD0ie3tpbnZhbGlkfX0iIHZhbGlkYXRvciQ9IltbdmFsaWRhdG9yXV0iIGRpc2FibGVkJD0iW1tkaXNhYmxlZF1dIiBhdXRvY29tcGxldGUkPSJbW2F1dG9jb21wbGV0ZV1dIiBhdXRvZm9jdXMkPSJbW2F1dG9mb2N1c11dIiBpbnB1dG1vZGUkPSJbW2lucHV0bW9kZV1dIiBuYW1lJD0iW1tuYW1lXV0iIHBsYWNlaG9sZGVyJD0iW1twbGFjZWhvbGRlcl1dIiByZWFkb25seSQ9IltbcmVhZG9ubHldXSIgcmVxdWlyZWQkPSJbW3JlcXVpcmVkXV0iIG1pbmxlbmd0aCQ9IltbbWlubGVuZ3RoXV0iIG1heGxlbmd0aCQ9IltbbWF4bGVuZ3RoXV0iIGF1dG9jYXBpdGFsaXplJD0iW1thdXRvY2FwaXRhbGl6ZV1dIiByb3dzJD0iW1tyb3dzXV0iIG1heC1yb3dzJD0iW1ttYXhSb3dzXV0iIG9uLWNoYW5nZT0iX29uQ2hhbmdlIj48L2lyb24tYXV0b2dyb3ctdGV4dGFyZWE+CgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZXJyb3JNZXNzYWdlXV0iPgogICAgICAgIDxwYXBlci1pbnB1dC1lcnJvciBhcmlhLWxpdmU9ImFzc2VydGl2ZSIgc2xvdD0iYWRkLW9uIj5bW2Vycm9yTWVzc2FnZV1dPC9wYXBlci1pbnB1dC1lcnJvcj4KICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tjaGFyQ291bnRlcl1dIj4KICAgICAgICA8cGFwZXItaW5wdXQtY2hhci1jb3VudGVyIHNsb3Q9ImFkZC1vbiI+PC9wYXBlci1pbnB1dC1jaGFyLWNvdW50ZXI+CiAgICAgIDwvdGVtcGxhdGU+CgogICAgPC9wYXBlci1pbnB1dC1jb250YWluZXI+CmAsaXM6InBhcGVyLXRleHRhcmVhIixiZWhhdmlvcnM6W0E5LFRoXSxwcm9wZXJ0aWVzOntfYXJpYUxhYmVsbGVkQnk6e29ic2VydmVyOiJfYXJpYUxhYmVsbGVkQnlDaGFuZ2VkIix0eXBlOlN0cmluZ30sX2FyaWFEZXNjcmliZWRCeTp7b2JzZXJ2ZXI6Il9hcmlhRGVzY3JpYmVkQnlDaGFuZ2VkIix0eXBlOlN0cmluZ30sdmFsdWU6e3R5cGU6U3RyaW5nfSxyb3dzOnt0eXBlOk51bWJlcix2YWx1ZToxfSxtYXhSb3dzOnt0eXBlOk51bWJlcix2YWx1ZTowfX0sZ2V0IHNlbGVjdGlvblN0YXJ0KCl7cmV0dXJuIHRoaXMuJC5pbnB1dC50ZXh0YXJlYS5zZWxlY3Rpb25TdGFydH0sc2V0IHNlbGVjdGlvblN0YXJ0KGUpe3RoaXMuJC5pbnB1dC50ZXh0YXJlYS5zZWxlY3Rpb25TdGFydD1lfSxnZXQgc2VsZWN0aW9uRW5kKCl7cmV0dXJuIHRoaXMuJC5pbnB1dC50ZXh0YXJlYS5zZWxlY3Rpb25FbmR9LHNldCBzZWxlY3Rpb25FbmQoZSl7dGhpcy4kLmlucHV0LnRleHRhcmVhLnNlbGVjdGlvbkVuZD1lfSxfYXJpYUxhYmVsbGVkQnlDaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMuX2ZvY3VzYWJsZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsbGVkYnkiLGUpfSxfYXJpYURlc2NyaWJlZEJ5Q2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLl9mb2N1c2FibGVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1kZXNjcmliZWRieSIsZSl9LGdldCBfZm9jdXNhYmxlRWxlbWVudCgpe3JldHVybiB0aGlzLmlucHV0RWxlbWVudC50ZXh0YXJlYX19KTt2YXIgd1c9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTt3Vy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKTt3Vy5pbm5lckhUTUw9YDxkb20tbW9kdWxlIGlkPSJwYXBlci1pdGVtLXNoYXJlZC1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QsIC5wYXBlci1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWluLWhlaWdodDogdmFyKC0tcGFwZXItaXRlbS1taW4taGVpZ2h0LCA0OHB4KTsKICAgICAgICBwYWRkaW5nOiAwcHggMTZweDsKICAgICAgfQoKICAgICAgLnBhcGVyLWl0ZW0gewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtc3ViaGVhZDsKICAgICAgICBib3JkZXI6bm9uZTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJhY2tncm91bmQ6IHdoaXRlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtoaWRkZW5dKSwgLnBhcGVyLWl0ZW1baGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICA6aG9zdCguaXJvbi1zZWxlY3RlZCksIC5wYXBlci1pdGVtLmlyb24tc2VsZWN0ZWQgewogICAgICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1wYXBlci1pdGVtLXNlbGVjdGVkLXdlaWdodCwgYm9sZCk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWl0ZW0tc2VsZWN0ZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pLCAucGFwZXItaXRlbVtkaXNhYmxlZF0gewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pdGVtLWRpc2FibGVkLWNvbG9yLCB2YXIoLS1kaXNhYmxlZC10ZXh0LWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWl0ZW0tZGlzYWJsZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpmb2N1cyksIC5wYXBlci1pdGVtOmZvY3VzIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgb3V0bGluZTogMDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbS1mb2N1c2VkOwogICAgICB9CgogICAgICA6aG9zdCg6Zm9jdXMpOmJlZm9yZSwgLnBhcGVyLWl0ZW06Zm9jdXM6YmVmb3JlIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZml0OwoKICAgICAgICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgb3BhY2l0eTogdmFyKC0tZGFyay1kaXZpZGVyLW9wYWNpdHkpOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pdGVtLWZvY3VzZWQtYmVmb3JlOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQod1cuY29udGVudCk7dmFyIFliZT17aG9zdEF0dHJpYnV0ZXM6e3JvbGU6Im9wdGlvbiIsdGFiaW5kZXg6IjAifX0sSTk9W01oLERpLFliZV07WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLWl0ZW0tc2hhcmVkLXN0eWxlcyI+CiAgICAgIDpob3N0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtc3ViaGVhZDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxzbG90Pjwvc2xvdD4KYCxpczoicGFwZXItaXRlbSIsYmVoYXZpb3JzOltJOV19KTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOyAvKiBuZWVkZWQgZm9yIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzIHRvIHdvcmsgb24gZmYgKi8KICAgICAgICBAYXBwbHkgLS1sYXlvdXQtdmVydGljYWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlci1qdXN0aWZpZWQ7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXg7CiAgICAgIH0KCiAgICAgIDpob3N0KFt0d28tbGluZV0pIHsKICAgICAgICBtaW4taGVpZ2h0OiB2YXIoLS1wYXBlci1pdGVtLWJvZHktdHdvLWxpbmUtbWluLWhlaWdodCwgNzJweCk7CiAgICAgIH0KCiAgICAgIDpob3N0KFt0aHJlZS1saW5lXSkgewogICAgICAgIG1pbi1oZWlnaHQ6IHZhcigtLXBhcGVyLWl0ZW0tYm9keS10aHJlZS1saW5lLW1pbi1oZWlnaHQsIDg4cHgpOwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZChbc2Vjb25kYXJ5XSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtYm9keTE7CgogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pdGVtLWJvZHktc2Vjb25kYXJ5LWNvbG9yLCB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pdGVtLWJvZHktc2Vjb25kYXJ5OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzbG90Pjwvc2xvdD4KYCxpczoicGFwZXItaXRlbS1ib2R5In0pO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1pdGVtLXNoYXJlZC1zdHlsZXMiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtc3ViaGVhZDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pY29uLWl0ZW07CiAgICAgIH0KCiAgICAgIC5jb250ZW50LWljb24gewogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CgogICAgICAgIHdpZHRoOiB2YXIoLS1wYXBlci1pdGVtLWljb24td2lkdGgsIDU2cHgpOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWl0ZW0taWNvbjsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJjb250ZW50SWNvbiIgY2xhc3M9ImNvbnRlbnQtaWNvbiI+CiAgICAgIDxzbG90IG5hbWU9Iml0ZW0taWNvbiI+PC9zbG90PgogICAgPC9kaXY+CiAgICA8c2xvdD48L3Nsb3Q+CmAsaXM6InBhcGVyLWljb24taXRlbSIsYmVoYXZpb3JzOltJOV19KTt2YXIgU1c9e3Byb3BlcnRpZXM6e211bHRpOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Im11bHRpQ2hhbmdlZCJ9LHNlbGVjdGVkVmFsdWVzOnt0eXBlOkFycmF5LG5vdGlmeTohMCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sc2VsZWN0ZWRJdGVtczp7dHlwZTpBcnJheSxyZWFkT25seTohMCxub3RpZnk6ITAsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fSxvYnNlcnZlcnM6WyJfdXBkYXRlU2VsZWN0ZWQoc2VsZWN0ZWRWYWx1ZXMuc3BsaWNlcykiXSxzZWxlY3Q6ZnVuY3Rpb24oZSl7dGhpcy5tdWx0aT90aGlzLl90b2dnbGVTZWxlY3RlZChlKTp0aGlzLnNlbGVjdGVkPWV9LG11bHRpQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLl9zZWxlY3Rpb24ubXVsdGk9ZSx0aGlzLl91cGRhdGVTZWxlY3RlZCgpfSxnZXQgX3Nob3VsZFVwZGF0ZVNlbGVjdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGVkIT1udWxsfHx0aGlzLnNlbGVjdGVkVmFsdWVzIT1udWxsJiZ0aGlzLnNlbGVjdGVkVmFsdWVzLmxlbmd0aH0sX3VwZGF0ZUF0dHJGb3JTZWxlY3RlZDpmdW5jdGlvbigpe3RoaXMubXVsdGk/dGhpcy5zZWxlY3RlZEl0ZW1zJiZ0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoPjAmJih0aGlzLnNlbGVjdGVkVmFsdWVzPXRoaXMuc2VsZWN0ZWRJdGVtcy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2luZGV4VG9WYWx1ZSh0aGlzLmluZGV4T2YoZSkpfSx0aGlzKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUhPW51bGx9LHRoaXMpKTpTaC5fdXBkYXRlQXR0ckZvclNlbGVjdGVkLmFwcGx5KHRoaXMpfSxfdXBkYXRlU2VsZWN0ZWQ6ZnVuY3Rpb24oKXt0aGlzLm11bHRpP3RoaXMuX3NlbGVjdE11bHRpKHRoaXMuc2VsZWN0ZWRWYWx1ZXMpOnRoaXMuX3NlbGVjdFNlbGVjdGVkKHRoaXMuc2VsZWN0ZWQpfSxfc2VsZWN0TXVsdGk6ZnVuY3Rpb24oZSl7ZT1lfHxbXTt2YXIgdD0odGhpcy5fdmFsdWVzVG9JdGVtcyhlKXx8W10pLmZpbHRlcihmdW5jdGlvbihpKXtyZXR1cm4gaSE9bnVsbH0pO3RoaXMuX3NlbGVjdGlvbi5jbGVhcih0KTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl0aGlzLl9zZWxlY3Rpb24uc2V0SXRlbVNlbGVjdGVkKHRbcl0sITApO2lmKHRoaXMuZmFsbGJhY2tTZWxlY3Rpb24mJiF0aGlzLl9zZWxlY3Rpb24uZ2V0KCkubGVuZ3RoKXt2YXIgbj10aGlzLl92YWx1ZVRvSXRlbSh0aGlzLmZhbGxiYWNrU2VsZWN0aW9uKTtuJiZ0aGlzLnNlbGVjdCh0aGlzLmZhbGxiYWNrU2VsZWN0aW9uKX19LF9zZWxlY3Rpb25DaGFuZ2U6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9zZWxlY3Rpb24uZ2V0KCk7dGhpcy5tdWx0aT8odGhpcy5fc2V0U2VsZWN0ZWRJdGVtcyhlKSx0aGlzLl9zZXRTZWxlY3RlZEl0ZW0oZS5sZW5ndGg/ZVswXTpudWxsKSk6ZSE9bnVsbD8odGhpcy5fc2V0U2VsZWN0ZWRJdGVtcyhbZV0pLHRoaXMuX3NldFNlbGVjdGVkSXRlbShlKSk6KHRoaXMuX3NldFNlbGVjdGVkSXRlbXMoW10pLHRoaXMuX3NldFNlbGVjdGVkSXRlbShudWxsKSl9LF90b2dnbGVTZWxlY3RlZDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnNlbGVjdGVkVmFsdWVzLmluZGV4T2YoZSkscj10PDA7cj90aGlzLnB1c2goInNlbGVjdGVkVmFsdWVzIixlKTp0aGlzLnNwbGljZSgic2VsZWN0ZWRWYWx1ZXMiLHQsMSl9LF92YWx1ZXNUb0l0ZW1zOmZ1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsP251bGw6ZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbHVlVG9JdGVtKHQpfSx0aGlzKX19LEkwdD1bU2gsU1ddO3ZhciB5Xz17cHJvcGVydGllczp7Zm9jdXNlZEl0ZW06e29ic2VydmVyOiJfZm9jdXNlZEl0ZW1DaGFuZ2VkIixyZWFkT25seTohMCx0eXBlOk9iamVjdH0sYXR0ckZvckl0ZW1UaXRsZTp7dHlwZTpTdHJpbmd9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9kaXNhYmxlZENoYW5nZWQifX0sX01PRElGSUVSX0tFWVM6WyJBbHQiLCJBbHRHcmFwaCIsIkNhcHNMb2NrIiwiQ29udHJvbCIsIkZuIiwiRm5Mb2NrIiwiSHlwZXIiLCJNZXRhIiwiTnVtTG9jayIsIk9TIiwiU2Nyb2xsTG9jayIsIlNoaWZ0IiwiU3VwZXIiLCJTeW1ib2wiLCJTeW1ib2xMb2NrIl0sX1NFQVJDSF9SRVNFVF9USU1FT1VUX01TOjFlMyxfcHJldmlvdXNUYWJJbmRleDowLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJtZW51In0sb2JzZXJ2ZXJzOlsiX3VwZGF0ZU11bHRpc2VsZWN0YWJsZShtdWx0aSkiXSxsaXN0ZW5lcnM6e2ZvY3VzOiJfb25Gb2N1cyIsa2V5ZG93bjoiX29uS2V5ZG93biIsImlyb24taXRlbXMtY2hhbmdlZCI6Il9vbklyb25JdGVtc0NoYW5nZWQifSxrZXlCaW5kaW5nczp7dXA6Il9vblVwS2V5Iixkb3duOiJfb25Eb3duS2V5Iixlc2M6Il9vbkVzY0tleSIsInNoaWZ0K3RhYjprZXlkb3duIjoiX29uU2hpZnRUYWJEb3duIn0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9yZXNldFRhYmluZGljZXMoKX0sc2VsZWN0OmZ1bmN0aW9uKGUpe3RoaXMuX2RlZmF1bHRGb2N1c0FzeW5jJiYodGhpcy5jYW5jZWxBc3luYyh0aGlzLl9kZWZhdWx0Rm9jdXNBc3luYyksdGhpcy5fZGVmYXVsdEZvY3VzQXN5bmM9bnVsbCk7dmFyIHQ9dGhpcy5fdmFsdWVUb0l0ZW0oZSk7dCYmdC5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIil8fCh0aGlzLl9zZXRGb2N1c2VkSXRlbSh0KSxTVy5zZWxlY3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sX3Jlc2V0VGFiaW5kaWNlczpmdW5jdGlvbigpe3ZhciBlPXRoaXMubXVsdGk/dGhpcy5zZWxlY3RlZEl0ZW1zJiZ0aGlzLnNlbGVjdGVkSXRlbXNbMF06dGhpcy5zZWxlY3RlZEl0ZW07dGhpcy5pdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Quc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsdD09PWU/IjAiOiItMSIpLHQuc2V0QXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIix0aGlzLl9zZWxlY3Rpb24uaXNTZWxlY3RlZCh0KSl9LHRoaXMpfSxfdXBkYXRlTXVsdGlzZWxlY3RhYmxlOmZ1bmN0aW9uKGUpe2U/dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtbXVsdGlzZWxlY3RhYmxlIiwidHJ1ZSIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLW11bHRpc2VsZWN0YWJsZSIpfSxfZm9jdXNXaXRoS2V5Ym9hcmRFdmVudDpmdW5jdGlvbihlKXtpZih0aGlzLl9NT0RJRklFUl9LRVlTLmluZGV4T2YoZS5rZXkpPT09LTEpe3RoaXMuY2FuY2VsRGVib3VuY2VyKCJfY2xlYXJTZWFyY2hUZXh0Iik7dmFyIHQ9dGhpcy5fc2VhcmNoVGV4dHx8IiIscj1lLmtleSYmZS5rZXkubGVuZ3RoPT0xP2Uua2V5OlN0cmluZy5mcm9tQ2hhckNvZGUoZS5rZXlDb2RlKTt0Kz1yLnRvTG9jYWxlTG93ZXJDYXNlKCk7Zm9yKHZhciBuPXQubGVuZ3RoLGk9MCxvO289dGhpcy5pdGVtc1tpXTtpKyspaWYoIW8uaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpKXt2YXIgYT10aGlzLmF0dHJGb3JJdGVtVGl0bGV8fCJ0ZXh0Q29udGVudCIscz0ob1thXXx8by5nZXRBdHRyaWJ1dGUoYSl8fCIiKS50cmltKCk7aWYoIShzLmxlbmd0aDxuKSYmcy5zbGljZSgwLG4pLnRvTG9jYWxlTG93ZXJDYXNlKCk9PXQpe3RoaXMuX3NldEZvY3VzZWRJdGVtKG8pO2JyZWFrfX10aGlzLl9zZWFyY2hUZXh0PXQsdGhpcy5kZWJvdW5jZSgiX2NsZWFyU2VhcmNoVGV4dCIsdGhpcy5fY2xlYXJTZWFyY2hUZXh0LHRoaXMuX1NFQVJDSF9SRVNFVF9USU1FT1VUX01TKX19LF9jbGVhclNlYXJjaFRleHQ6ZnVuY3Rpb24oKXt0aGlzLl9zZWFyY2hUZXh0PSIifSxfZm9jdXNQcmV2aW91czpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLml0ZW1zLmxlbmd0aCx0PU51bWJlcih0aGlzLmluZGV4T2YodGhpcy5mb2N1c2VkSXRlbSkpLHI9MTtyPGUrMTtyKyspe3ZhciBuPXRoaXMuaXRlbXNbKHQtcitlKSVlXTtpZighbi5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikpe3ZhciBpPXp0KG4pLmdldE93bmVyUm9vdCgpfHxkb2N1bWVudDtpZih0aGlzLl9zZXRGb2N1c2VkSXRlbShuKSx6dChpKS5hY3RpdmVFbGVtZW50PT1uKXJldHVybn19fSxfZm9jdXNOZXh0OmZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuaXRlbXMubGVuZ3RoLHQ9TnVtYmVyKHRoaXMuaW5kZXhPZih0aGlzLmZvY3VzZWRJdGVtKSkscj0xO3I8ZSsxO3IrKyl7dmFyIG49dGhpcy5pdGVtc1sodCtyKSVlXTtpZighbi5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikpe3ZhciBpPXp0KG4pLmdldE93bmVyUm9vdCgpfHxkb2N1bWVudDtpZih0aGlzLl9zZXRGb2N1c2VkSXRlbShuKSx6dChpKS5hY3RpdmVFbGVtZW50PT1uKXJldHVybn19fSxfYXBwbHlTZWxlY3Rpb246ZnVuY3Rpb24oZSx0KXt0P2Uuc2V0QXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIiwidHJ1ZSIpOmUuc2V0QXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIiwiZmFsc2UiKSxTaC5fYXBwbHlTZWxlY3Rpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxfZm9jdXNlZEl0ZW1DaGFuZ2VkOmZ1bmN0aW9uKGUsdCl7dCYmdC5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSxlJiYhZS5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikmJiF0aGlzLmRpc2FibGVkJiYoZS5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiMCIpLGUuZm9jdXMoKSl9LF9vbklyb25JdGVtc0NoYW5nZWQ6ZnVuY3Rpb24oZSl7ZS5kZXRhaWwuYWRkZWROb2Rlcy5sZW5ndGgmJnRoaXMuX3Jlc2V0VGFiaW5kaWNlcygpfSxfb25TaGlmdFRhYkRvd246ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRBdHRyaWJ1dGUoInRhYmluZGV4Iik7eV8uX3NoaWZ0VGFiUHJlc3NlZD0hMCx0aGlzLl9zZXRGb2N1c2VkSXRlbShudWxsKSx0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCItMSIpLHRoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLHQpLHlfLl9zaGlmdFRhYlByZXNzZWQ9ITF9LDEpfSxfb25Gb2N1czpmdW5jdGlvbihlKXtpZigheV8uX3NoaWZ0VGFiUHJlc3NlZCl7dmFyIHQ9enQoZSkucm9vdFRhcmdldDt0IT09dGhpcyYmdHlwZW9mIHQudGFiSW5kZXghPSJ1bmRlZmluZWQiJiYhdGhpcy5pc0xpZ2h0RGVzY2VuZGFudCh0KXx8KHRoaXMuX2RlZmF1bHRGb2N1c0FzeW5jPXRoaXMuYXN5bmMoZnVuY3Rpb24oKXt2YXIgcj10aGlzLm11bHRpP3RoaXMuc2VsZWN0ZWRJdGVtcyYmdGhpcy5zZWxlY3RlZEl0ZW1zWzBdOnRoaXMuc2VsZWN0ZWRJdGVtO3RoaXMuX3NldEZvY3VzZWRJdGVtKG51bGwpLHI/dGhpcy5fc2V0Rm9jdXNlZEl0ZW0ocik6dGhpcy5pdGVtc1swXSYmdGhpcy5fZm9jdXNOZXh0KCl9KSl9fSxfb25VcEtleTpmdW5jdGlvbihlKXt0aGlzLl9mb2N1c1ByZXZpb3VzKCksZS5kZXRhaWwua2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSxfb25Eb3duS2V5OmZ1bmN0aW9uKGUpe3RoaXMuX2ZvY3VzTmV4dCgpLGUuZGV0YWlsLmtleWJvYXJkRXZlbnQucHJldmVudERlZmF1bHQoKX0sX29uRXNjS2V5OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZm9jdXNlZEl0ZW07dCYmdC5ibHVyKCl9LF9vbktleWRvd246ZnVuY3Rpb24oZSl7dGhpcy5rZXlib2FyZEV2ZW50TWF0Y2hlc0tleXMoZSwidXAgZG93biBlc2MiKXx8dGhpcy5fZm9jdXNXaXRoS2V5Ym9hcmRFdmVudChlKSxlLnN0b3BQcm9wYWdhdGlvbigpfSxfYWN0aXZhdGVIYW5kbGVyOmZ1bmN0aW9uKGUpe1NoLl9hY3RpdmF0ZUhhbmRsZXIuY2FsbCh0aGlzLGUpLGUuc3RvcFByb3BhZ2F0aW9uKCl9LF9kaXNhYmxlZENoYW5nZWQ6ZnVuY3Rpb24oZSl7ZT8odGhpcy5fcHJldmlvdXNUYWJJbmRleD10aGlzLmhhc0F0dHJpYnV0ZSgidGFiaW5kZXgiKT90aGlzLnRhYkluZGV4OjAsdGhpcy5yZW1vdmVBdHRyaWJ1dGUoInRhYmluZGV4IikpOnRoaXMuaGFzQXR0cmlidXRlKCJ0YWJpbmRleCIpfHx0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLHRoaXMuX3ByZXZpb3VzVGFiSW5kZXgpfX07eV8uX3NoaWZ0VGFiUHJlc3NlZD0hMTt2YXIgTDk9W0kwdCxPbyx5X107WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZzogOHB4IDA7CgogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLWxpc3Rib3gtYmFja2dyb3VuZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yKSk7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWxpc3Rib3gtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1saXN0Ym94OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzbG90Pjwvc2xvdD4KYCxpczoicGFwZXItbGlzdGJveCIsYmVoYXZpb3JzOltMOV0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6Imxpc3Rib3gifX0pO3ZhciBMMHQ9UWAKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLW1hdGVyaWFsLXNoYXJlZC1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2VsZXZhdGlvbj0iMSJdKSB7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi0yZHA7CiAgICAgIH0KCiAgICAgIDpob3N0KFtlbGV2YXRpb249IjIiXSkgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tNGRwOwogICAgICB9CgogICAgICA6aG9zdChbZWxldmF0aW9uPSIzIl0pIHsKICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTZkcDsKICAgICAgfQoKICAgICAgOmhvc3QoW2VsZXZhdGlvbj0iNCJdKSB7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi04ZHA7CiAgICAgIH0KCiAgICAgIDpob3N0KFtlbGV2YXRpb249IjUiXSkgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMTZkcDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CmA7TDB0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoTDB0LmNvbnRlbnQpO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1tYXRlcmlhbC1zaGFyZWQtc3R5bGVzIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICA6aG9zdChbYW5pbWF0ZWRdKSB7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LXRyYW5zaXRpb247CiAgICAgIH0KICAgICAgOmhvc3QgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzbG90Pjwvc2xvdD4KYCxpczoicGFwZXItbWF0ZXJpYWwiLHByb3BlcnRpZXM6e2VsZXZhdGlvbjp7dHlwZTpOdW1iZXIscmVmbGVjdFRvQXR0cmlidXRlOiEwLHZhbHVlOjF9LGFuaW1hdGVkOnt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwLHZhbHVlOiExfX19KTt2YXIgazk9e3Byb3BlcnRpZXM6e3ZhbHVlOnt0eXBlOk51bWJlcix2YWx1ZTowLG5vdGlmeTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LG1pbjp7dHlwZTpOdW1iZXIsdmFsdWU6MCxub3RpZnk6ITB9LG1heDp7dHlwZTpOdW1iZXIsdmFsdWU6MTAwLG5vdGlmeTohMH0sc3RlcDp7dHlwZTpOdW1iZXIsdmFsdWU6MSxub3RpZnk6ITB9LHJhdGlvOnt0eXBlOk51bWJlcix2YWx1ZTowLHJlYWRPbmx5OiEwLG5vdGlmeTohMH19LG9ic2VydmVyczpbIl91cGRhdGUodmFsdWUsIG1pbiwgbWF4LCBzdGVwKSJdLF9jYWxjUmF0aW86ZnVuY3Rpb24oZSl7cmV0dXJuKHRoaXMuX2NsYW1wVmFsdWUoZSktdGhpcy5taW4pLyh0aGlzLm1heC10aGlzLm1pbil9LF9jbGFtcFZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLm1pbih0aGlzLm1heCxNYXRoLm1heCh0aGlzLm1pbix0aGlzLl9jYWxjU3RlcChlKSkpfSxfY2FsY1N0ZXA6ZnVuY3Rpb24oZSl7aWYoZT1wYXJzZUZsb2F0KGUpLCF0aGlzLnN0ZXApcmV0dXJuIGU7dmFyIHQ9TWF0aC5yb3VuZCgoZS10aGlzLm1pbikvdGhpcy5zdGVwKTtyZXR1cm4gdGhpcy5zdGVwPDE/dC8oMS90aGlzLnN0ZXApK3RoaXMubWluOnQqdGhpcy5zdGVwK3RoaXMubWlufSxfdmFsaWRhdGVWYWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NsYW1wVmFsdWUodGhpcy52YWx1ZSk7cmV0dXJuIHRoaXMudmFsdWU9dGhpcy5vbGRWYWx1ZT1pc05hTihlKT90aGlzLm9sZFZhbHVlOmUsdGhpcy52YWx1ZSE9PWV9LF91cGRhdGU6ZnVuY3Rpb24oKXt0aGlzLl92YWxpZGF0ZVZhbHVlKCksdGhpcy5fc2V0UmF0aW8odGhpcy5fY2FsY1JhdGlvKHRoaXMudmFsdWUpKjEwMCl9fTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMjAwcHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIDpob3N0KFtoaWRkZW5dKSwgW2hpZGRlbl0gewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgI3Byb2dyZXNzQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1wcm9ncmVzcy1jb250YWluZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAjcHJvZ3Jlc3NDb250YWluZXIsCiAgICAgIC8qIHRoZSBzdHJpcGUgZm9yIHRoZSBpbmRldGVybWluYXRlIGFuaW1hdGlvbiovCiAgICAgIC5pbmRldGVybWluYXRlOjphZnRlciB7CiAgICAgICAgaGVpZ2h0OiB2YXIoLS1wYXBlci1wcm9ncmVzcy1oZWlnaHQsIDRweCk7CiAgICAgIH0KCiAgICAgICNwcmltYXJ5UHJvZ3Jlc3MsCiAgICAgICNzZWNvbmRhcnlQcm9ncmVzcywKICAgICAgLmluZGV0ZXJtaW5hdGU6OmFmdGVyIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZml0OwogICAgICB9CgogICAgICAjcHJvZ3Jlc3NDb250YWluZXIsCiAgICAgIC5pbmRldGVybWluYXRlOjphZnRlciB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtY29udGFpbmVyLWNvbG9yLCB2YXIoLS1nb29nbGUtZ3JleS0zMDApKTsKICAgICAgfQoKICAgICAgOmhvc3QoLnRyYW5zaXRpbmcpICNwcmltYXJ5UHJvZ3Jlc3MsCiAgICAgIDpob3N0KC50cmFuc2l0aW5nKSAjc2Vjb25kYXJ5UHJvZ3Jlc3MgewogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eTogLXdlYmtpdC10cmFuc2Zvcm07CiAgICAgICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogdHJhbnNmb3JtOwoKICAgICAgICAvKiBEdXJhdGlvbiAqLwogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtdHJhbnNpdGlvbi1kdXJhdGlvbiwgMC4wOHMpOwogICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXByb2dyZXNzLXRyYW5zaXRpb24tZHVyYXRpb24sIDAuMDhzKTsKCiAgICAgICAgLyogVGltaW5nIGZ1bmN0aW9uICovCiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24sIGVhc2UpOwogICAgICAgIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1wYXBlci1wcm9ncmVzcy10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbiwgZWFzZSk7CgogICAgICAgIC8qIERlbGF5ICovCiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uLWRlbGF5OiB2YXIoLS1wYXBlci1wcm9ncmVzcy10cmFuc2l0aW9uLWRlbGF5LCAwcyk7CiAgICAgICAgdHJhbnNpdGlvbi1kZWxheTogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtdHJhbnNpdGlvbi1kZWxheSwgMHMpOwogICAgICB9CgogICAgICAjcHJpbWFyeVByb2dyZXNzLAogICAgICAjc2Vjb25kYXJ5UHJvZ3Jlc3MgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IGNlbnRlcjsKICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IGNlbnRlcjsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKDApOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKDApOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgIH0KCiAgICAgICNwcmltYXJ5UHJvZ3Jlc3MgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXByb2dyZXNzLWFjdGl2ZS1jb2xvciwgdmFyKC0tZ29vZ2xlLWdyZWVuLTUwMCkpOwogICAgICB9CgogICAgICAjc2Vjb25kYXJ5UHJvZ3Jlc3MgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXByb2dyZXNzLXNlY29uZGFyeS1jb2xvciwgdmFyKC0tZ29vZ2xlLWdyZWVuLTEwMCkpOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAjcHJpbWFyeVByb2dyZXNzIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wYXBlci1wcm9ncmVzcy1kaXNhYmxlZC1hY3RpdmUtY29sb3IsIHZhcigtLWdvb2dsZS1ncmV5LTUwMCkpOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAjc2Vjb25kYXJ5UHJvZ3Jlc3MgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXByb2dyZXNzLWRpc2FibGVkLXNlY29uZGFyeS1jb2xvciwgdmFyKC0tZ29vZ2xlLWdyZXktMzAwKSk7CiAgICAgIH0KCiAgICAgIDpob3N0KDpub3QoW2Rpc2FibGVkXSkpICNwcmltYXJ5UHJvZ3Jlc3MuaW5kZXRlcm1pbmF0ZSB7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiByaWdodCBjZW50ZXI7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogcmlnaHQgY2VudGVyOwogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBpbmRldGVybWluYXRlLWJhciB2YXIoLS1wYXBlci1wcm9ncmVzcy1pbmRldGVybWluYXRlLWN5Y2xlLWR1cmF0aW9uLCAycykgbGluZWFyIGluZmluaXRlOwogICAgICAgIGFuaW1hdGlvbjogaW5kZXRlcm1pbmF0ZS1iYXIgdmFyKC0tcGFwZXItcHJvZ3Jlc3MtaW5kZXRlcm1pbmF0ZS1jeWNsZS1kdXJhdGlvbiwgMnMpIGxpbmVhciBpbmZpbml0ZTsKICAgICAgfQoKICAgICAgOmhvc3QoOm5vdChbZGlzYWJsZWRdKSkgI3ByaW1hcnlQcm9ncmVzcy5pbmRldGVybWluYXRlOjphZnRlciB7CiAgICAgICAgY29udGVudDogIiI7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgY2VudGVyOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7CgogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBpbmRldGVybWluYXRlLXNwbGl0dGVyIHZhcigtLXBhcGVyLXByb2dyZXNzLWluZGV0ZXJtaW5hdGUtY3ljbGUtZHVyYXRpb24sIDJzKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgICAgYW5pbWF0aW9uOiBpbmRldGVybWluYXRlLXNwbGl0dGVyIHZhcigtLXBhcGVyLXByb2dyZXNzLWluZGV0ZXJtaW5hdGUtY3ljbGUtZHVyYXRpb24sIDJzKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBpbmRldGVybWluYXRlLWJhciB7CiAgICAgICAgMCUgewogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCgxKSB0cmFuc2xhdGVYKC0xMDAlKTsKICAgICAgICB9CiAgICAgICAgNTAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoMSkgdHJhbnNsYXRlWCgwJSk7CiAgICAgICAgfQogICAgICAgIDc1JSB7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKDEpIHRyYW5zbGF0ZVgoMCUpOwogICAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoLjI4LC42MiwuMzcsLjkxKTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKDApIHRyYW5zbGF0ZVgoMCUpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGluZGV0ZXJtaW5hdGUtc3BsaXR0ZXIgewogICAgICAgIDAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKC0xMjUlKTsKICAgICAgICB9CiAgICAgICAgMzAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKC0xMjUlKTsKICAgICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKC40MiwwLC42LC44KTsKICAgICAgICB9CiAgICAgICAgOTAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKDEyNSUpOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKDEyNSUpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBpbmRldGVybWluYXRlLWJhciB7CiAgICAgICAgMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoMSkgdHJhbnNsYXRlWCgtMTAwJSk7CiAgICAgICAgfQogICAgICAgIDUwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCgxKSB0cmFuc2xhdGVYKDAlKTsKICAgICAgICB9CiAgICAgICAgNzUlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKDEpIHRyYW5zbGF0ZVgoMCUpOwogICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKC4yOCwuNjIsLjM3LC45MSk7CiAgICAgICAgfQogICAgICAgIDEwMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoMCkgdHJhbnNsYXRlWCgwJSk7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGluZGV0ZXJtaW5hdGUtc3BsaXR0ZXIgewogICAgICAgIDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC43NSkgdHJhbnNsYXRlWCgtMTI1JSk7CiAgICAgICAgfQogICAgICAgIDMwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCguNzUpIHRyYW5zbGF0ZVgoLTEyNSUpOwogICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKC40MiwwLC42LC44KTsKICAgICAgICB9CiAgICAgICAgOTAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC43NSkgdHJhbnNsYXRlWCgxMjUlKTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCguNzUpIHRyYW5zbGF0ZVgoMTI1JSk7CiAgICAgICAgfQogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9InByb2dyZXNzQ29udGFpbmVyIj4KICAgICAgPGRpdiBpZD0ic2Vjb25kYXJ5UHJvZ3Jlc3MiIGhpZGRlblwkPSJbW19oaWRlU2Vjb25kYXJ5UHJvZ3Jlc3Moc2Vjb25kYXJ5UmF0aW8pXV0iPjwvZGl2PgogICAgICA8ZGl2IGlkPSJwcmltYXJ5UHJvZ3Jlc3MiPjwvZGl2PgogICAgPC9kaXY+CmAsaXM6InBhcGVyLXByb2dyZXNzIixiZWhhdmlvcnM6W2s5XSxwcm9wZXJ0aWVzOntzZWNvbmRhcnlQcm9ncmVzczp7dHlwZTpOdW1iZXIsdmFsdWU6MH0sc2Vjb25kYXJ5UmF0aW86e3R5cGU6TnVtYmVyLHZhbHVlOjAscmVhZE9ubHk6ITB9LGluZGV0ZXJtaW5hdGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX3RvZ2dsZUluZGV0ZXJtaW5hdGUifSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxvYnNlcnZlcjoiX2Rpc2FibGVkQ2hhbmdlZCJ9fSxvYnNlcnZlcnM6WyJfcHJvZ3Jlc3NDaGFuZ2VkKHNlY29uZGFyeVByb2dyZXNzLCB2YWx1ZSwgbWluLCBtYXgsIGluZGV0ZXJtaW5hdGUpIl0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6InByb2dyZXNzYmFyIn0sX3RvZ2dsZUluZGV0ZXJtaW5hdGU6ZnVuY3Rpb24oZSl7dGhpcy50b2dnbGVDbGFzcygiaW5kZXRlcm1pbmF0ZSIsZSx0aGlzLiQucHJpbWFyeVByb2dyZXNzKX0sX3RyYW5zZm9ybVByb2dyZXNzOmZ1bmN0aW9uKGUsdCl7dmFyIHI9InNjYWxlWCgiK3QvMTAwKyIpIjtlLnN0eWxlLnRyYW5zZm9ybT1lLnN0eWxlLndlYmtpdFRyYW5zZm9ybT1yfSxfbWFpblJhdGlvQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLl90cmFuc2Zvcm1Qcm9ncmVzcyh0aGlzLiQucHJpbWFyeVByb2dyZXNzLGUpfSxfcHJvZ3Jlc3NDaGFuZ2VkOmZ1bmN0aW9uKGUsdCxyLG4saSl7ZT10aGlzLl9jbGFtcFZhbHVlKGUpLHQ9dGhpcy5fY2xhbXBWYWx1ZSh0KTt2YXIgbz10aGlzLl9jYWxjUmF0aW8oZSkqMTAwLGE9dGhpcy5fY2FsY1JhdGlvKHQpKjEwMDt0aGlzLl9zZXRTZWNvbmRhcnlSYXRpbyhvKSx0aGlzLl90cmFuc2Zvcm1Qcm9ncmVzcyh0aGlzLiQuc2Vjb25kYXJ5UHJvZ3Jlc3MsbyksdGhpcy5fdHJhbnNmb3JtUHJvZ3Jlc3ModGhpcy4kLnByaW1hcnlQcm9ncmVzcyxhKSx0aGlzLnNlY29uZGFyeVByb2dyZXNzPWUsaT90aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS12YWx1ZW5vdyIpOnRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXZhbHVlbm93Iix0KSx0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS12YWx1ZW1pbiIsciksdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtdmFsdWVtYXgiLG4pfSxfZGlzYWJsZWRDaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWRpc2FibGVkIixlPyJ0cnVlIjoiZmFsc2UiKX0sX2hpZGVTZWNvbmRhcnlQcm9ncmVzczpmdW5jdGlvbihlKXtyZXR1cm4gZT09PTB9fSk7dmFyIGswdD1RYAo8c3R5bGU+CiAgOmhvc3QgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgbGluZS1oZWlnaHQ6IDA7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgIC0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24tc2l6ZTogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLXNpemUsIDE2cHgpOwogICAgLyogLTFweCBpcyBhIHNlbnRpbmVsIGZvciB0aGUgZGVmYXVsdCBhbmQgaXMgcmVwbGFjZSBpbiBcYGF0dGFjaGVkXGAuICovCiAgICAtLWNhbGN1bGF0ZWQtcGFwZXItcmFkaW8tYnV0dG9uLWluay1zaXplOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemUsIC0xcHgpOwogIH0KCiAgOmhvc3QoOmZvY3VzKSB7CiAgICBvdXRsaW5lOiBub25lOwogIH0KCiAgI3JhZGlvQ29udGFpbmVyIHsKICAgIEBhcHBseSAtLWxheW91dC1pbmxpbmU7CiAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWNlbnRlcjsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdpZHRoOiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1zaXplKTsKICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24tc2l6ZSk7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwoKICAgIEBhcHBseSAtLXBhcGVyLXJhZGlvLWJ1dHRvbi1yYWRpby1jb250YWluZXI7CiAgfQoKICAjaW5rIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogNTAlOwogICAgbGVmdDogNTAlOwogICAgcmlnaHQ6IGF1dG87CiAgICB3aWR0aDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemUpOwogICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1pbmstc2l6ZSk7CiAgICBjb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLXVuY2hlY2tlZC1pbmstY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgb3BhY2l0eTogMC42OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7CiAgfQoKICAjaW5rW2NoZWNrZWRdIHsKICAgIGNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tY2hlY2tlZC1pbmstY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKICB9CgogICNvZmZSYWRpbywgI29uUmFkaW8gewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIHRvcDogMDsKICAgIGxlZnQ6IDA7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICB9CgogICNvZmZSYWRpbyB7CiAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tdW5jaGVja2VkLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi11bmNoZWNrZWQtYmFja2dyb3VuZC1jb2xvciwgdHJhbnNwYXJlbnQpOwogICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMjhzOwogIH0KCiAgI29uUmFkaW8gewogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLWNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7CiAgICB0cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSBlYXNlIDAuMjhzOwogICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIGVhc2UgMC4yOHM7CiAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogIH0KCiAgOmhvc3QoW2NoZWNrZWRdKSAjb2ZmUmFkaW8gewogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogIH0KCiAgOmhvc3QoW2NoZWNrZWRdKSAjb25SYWRpbyB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMC41KTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMC41KTsKICB9CgogICNyYWRpb0xhYmVsIHsKICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgbWFyZ2luLWxlZnQ6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi1sYWJlbC1zcGFjaW5nLCAxMHB4KTsKICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICBjb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLWxhYmVsLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKCiAgICBAYXBwbHkgLS1wYXBlci1yYWRpby1idXR0b24tbGFiZWw7CiAgfQoKICA6aG9zdChbY2hlY2tlZF0pICNyYWRpb0xhYmVsIHsKICAgIEBhcHBseSAtLXBhcGVyLXJhZGlvLWJ1dHRvbi1sYWJlbC1jaGVja2VkOwogIH0KCiAgI3JhZGlvTGFiZWw6ZGlyKHJ0bCkgewogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICBtYXJnaW4tcmlnaHQ6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi1sYWJlbC1zcGFjaW5nLCAxMHB4KTsKICB9CgogICNyYWRpb0xhYmVsW2hpZGRlbl0gewogICAgZGlzcGxheTogbm9uZTsKICB9CgogIC8qIGRpc2FibGVkIHN0YXRlICovCgogIDpob3N0KFtkaXNhYmxlZF0pICNvZmZSYWRpbyB7CiAgICBib3JkZXItY29sb3I6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi11bmNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgb3BhY2l0eTogMC41OwogIH0KCiAgOmhvc3QoW2Rpc2FibGVkXVtjaGVja2VkXSkgI29uUmFkaW8gewogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLXVuY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICBvcGFjaXR5OiAwLjU7CiAgfQoKICA6aG9zdChbZGlzYWJsZWRdKSAjcmFkaW9MYWJlbCB7CiAgICAvKiBzbGlnaHRseSBkYXJrZXIgdGhhbiB0aGUgYnV0dG9uLCBzbyB0aGF0IGl0J3MgcmVhZGFibGUgKi8KICAgIG9wYWNpdHk6IDAuNjU7CiAgfQo8L3N0eWxlPgoKPGRpdiBpZD0icmFkaW9Db250YWluZXIiPgogIDxkaXYgaWQ9Im9mZlJhZGlvIj48L2Rpdj4KICA8ZGl2IGlkPSJvblJhZGlvIj48L2Rpdj4KPC9kaXY+Cgo8ZGl2IGlkPSJyYWRpb0xhYmVsIj48c2xvdD48L3Nsb3Q+PC9kaXY+YDtrMHQuc2V0QXR0cmlidXRlKCJzdHJpcC13aGl0ZXNwYWNlIiwiIik7WXQoe190ZW1wbGF0ZTprMHQsaXM6InBhcGVyLXJhZGlvLWJ1dHRvbiIsYmVoYXZpb3JzOltYeF0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6InJhZGlvIiwiYXJpYS1jaGVja2VkIjohMSx0YWJpbmRleDowfSxwcm9wZXJ0aWVzOnthcmlhQWN0aXZlQXR0cmlidXRlOnt0eXBlOlN0cmluZyx2YWx1ZToiYXJpYS1jaGVja2VkIn19LHJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5fcmlwcGxlQ29udGFpbmVyPXRoaXMuJC5yYWRpb0NvbnRhaW5lcn0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXtDbSh0aGlzLGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRDb21wdXRlZFN0eWxlVmFsdWUoIi0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemUiKS50cmltKCk7aWYoZT09PSItMXB4Iil7dmFyIHQ9cGFyc2VGbG9hdCh0aGlzLmdldENvbXB1dGVkU3R5bGVWYWx1ZSgiLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1zaXplIikudHJpbSgpKSxyPU1hdGguZmxvb3IoMyp0KTtyJTIhPT10JTImJnIrKyx0aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tcGFwZXItcmFkaW8tYnV0dG9uLWluay1zaXplIjpyKyJweCJ9KX19KX19KTt2YXIgUjk9e2hvc3RBdHRyaWJ1dGVzOntyb2xlOiJtZW51YmFyIn0sa2V5QmluZGluZ3M6e2xlZnQ6Il9vbkxlZnRLZXkiLHJpZ2h0OiJfb25SaWdodEtleSJ9LF9vblVwS2V5OmZ1bmN0aW9uKGUpe3RoaXMuZm9jdXNlZEl0ZW0uY2xpY2soKSxlLmRldGFpbC5rZXlib2FyZEV2ZW50LnByZXZlbnREZWZhdWx0KCl9LF9vbkRvd25LZXk6ZnVuY3Rpb24oZSl7dGhpcy5mb2N1c2VkSXRlbS5jbGljaygpLGUuZGV0YWlsLmtleWJvYXJkRXZlbnQucHJldmVudERlZmF1bHQoKX0sZ2V0IF9pc1JUTCgpe3JldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKS5kaXJlY3Rpb249PT0icnRsIn0sX29uTGVmdEtleTpmdW5jdGlvbihlKXt0aGlzLl9pc1JUTD90aGlzLl9mb2N1c05leHQoKTp0aGlzLl9mb2N1c1ByZXZpb3VzKCksZS5kZXRhaWwua2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSxfb25SaWdodEtleTpmdW5jdGlvbihlKXt0aGlzLl9pc1JUTD90aGlzLl9mb2N1c1ByZXZpb3VzKCk6dGhpcy5fZm9jdXNOZXh0KCksZS5kZXRhaWwua2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSxfb25LZXlkb3duOmZ1bmN0aW9uKGUpe3RoaXMua2V5Ym9hcmRFdmVudE1hdGNoZXNLZXlzKGUsInVwIGRvd24gbGVmdCByaWdodCBlc2MiKXx8dGhpcy5fZm9jdXNXaXRoS2V5Ym9hcmRFdmVudChlKX19LE45PVtMOSxSOV07WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICA6aG9zdCA6OnNsb3R0ZWQoKikgewogICAgICAgIHBhZGRpbmc6IHZhcigtLXBhcGVyLXJhZGlvLWdyb3VwLWl0ZW0tcGFkZGluZywgMTJweCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJwYXBlci1yYWRpby1ncm91cCIsYmVoYXZpb3JzOltOOV0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6InJhZGlvZ3JvdXAifSxwcm9wZXJ0aWVzOnthdHRyRm9yU2VsZWN0ZWQ6e3R5cGU6U3RyaW5nLHZhbHVlOiJuYW1lIn0sc2VsZWN0ZWRBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJjaGVja2VkIn0sc2VsZWN0YWJsZTp7dHlwZTpTdHJpbmcsdmFsdWU6InBhcGVyLXJhZGlvLWJ1dHRvbiJ9LGFsbG93RW1wdHlTZWxlY3Rpb246e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LHNlbGVjdDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl92YWx1ZVRvSXRlbShlKTtpZighKHQmJnQuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpKSl7aWYodGhpcy5zZWxlY3RlZCl7dmFyIHI9dGhpcy5fdmFsdWVUb0l0ZW0odGhpcy5zZWxlY3RlZCk7aWYodGhpcy5zZWxlY3RlZD09ZSlpZih0aGlzLmFsbG93RW1wdHlTZWxlY3Rpb24pZT0iIjtlbHNle3ImJihyLmNoZWNrZWQ9ITApO3JldHVybn1yJiYoci5jaGVja2VkPSExKX1TaC5zZWxlY3QuYXBwbHkodGhpcyxbZV0pLHRoaXMuZmlyZSgicGFwZXItcmFkaW8tZ3JvdXAtY2hhbmdlZCIpfX0sX2FjdGl2YXRlRm9jdXNlZEl0ZW06ZnVuY3Rpb24oKXt0aGlzLl9pdGVtQWN0aXZhdGUodGhpcy5fdmFsdWVGb3JJdGVtKHRoaXMuZm9jdXNlZEl0ZW0pLHRoaXMuZm9jdXNlZEl0ZW0pfSxfb25VcEtleTpmdW5jdGlvbihlKXt0aGlzLl9mb2N1c1ByZXZpb3VzKCksZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2FjdGl2YXRlRm9jdXNlZEl0ZW0oKX0sX29uRG93bktleTpmdW5jdGlvbihlKXt0aGlzLl9mb2N1c05leHQoKSxlLnByZXZlbnREZWZhdWx0KCksdGhpcy5fYWN0aXZhdGVGb2N1c2VkSXRlbSgpfSxfb25MZWZ0S2V5OmZ1bmN0aW9uKGUpe1I5Ll9vbkxlZnRLZXkuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX2FjdGl2YXRlRm9jdXNlZEl0ZW0oKX0sX29uUmlnaHRLZXk6ZnVuY3Rpb24oZSl7UjkuX29uUmlnaHRLZXkuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX2FjdGl2YXRlRm9jdXNlZEl0ZW0oKX19KTt2YXIgUjB0PVFgCiAgPHN0eWxlPgogICAgOmhvc3QgewogICAgICBAYXBwbHkgLS1sYXlvdXQ7CiAgICAgIEBhcHBseSAtLWxheW91dC1qdXN0aWZpZWQ7CiAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgIHdpZHRoOiAyMDBweDsKICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7CiAgICAgIC0tcGFwZXItcHJvZ3Jlc3MtYWN0aXZlLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItYWN0aXZlLWNvbG9yLCB2YXIoLS1nb29nbGUtYmx1ZS03MDApKTsKICAgICAgLS1wYXBlci1wcm9ncmVzcy1zZWNvbmRhcnktY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1zZWNvbmRhcnktY29sb3IsIHZhcigtLWdvb2dsZS1ibHVlLTMwMCkpOwogICAgICAtLXBhcGVyLXByb2dyZXNzLWRpc2FibGVkLWFjdGl2ZS1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWRpc2FibGVkLWFjdGl2ZS1jb2xvciwgdmFyKC0tcGFwZXItZ3JleS00MDApKTsKICAgICAgLS1wYXBlci1wcm9ncmVzcy1kaXNhYmxlZC1zZWNvbmRhcnktY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1kaXNhYmxlZC1zZWNvbmRhcnktY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICAgIC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0OiB2YXIoLS1wYXBlci1zbGlkZXItaGVpZ2h0LCAycHgpOwogICAgfQoKICAgIC8qIGZvY3VzIHNob3dzIHRoZSByaXBwbGUgKi8KICAgIDpob3N0KDpmb2N1cykgewogICAgICBvdXRsaW5lOiBub25lOwogICAgfQoKICAgIC8qKgogICAgICAqIE5PVEUoa2VhbnVsZWUpOiBUaG91Z2ggOmhvc3QtY29udGV4dCBpcyBub3QgdW5pdmVyc2FsbHkgc3VwcG9ydGVkLCBzb21lIHBhZ2VzCiAgICAgICogc3RpbGwgcmVseSBvbiBwYXBlci1zbGlkZXIgYmVpbmcgZmxpcHBlZCB3aGVuIGRpcj0icnRsIiBpcyBzZXQgb24gYm9keS4gRm9yIGZ1bGwKICAgICAgKiBjb21wYXRpYmlsaXR5LCBkaXI9InJ0bCIgbXVzdCBiZSBleHBsaWNpdGx5IHNldCBvbiBwYXBlci1zbGlkZXIuCiAgICAgICovCiAgICA6ZGlyKHJ0bCkgI3NsaWRlckNvbnRhaW5lciB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLTEpOwogICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7CiAgICB9CgogICAgLyoqCiAgICAgICogTk9URShrZWFudWxlZSk6IFRoaXMgaXMgc2VwYXJhdGUgZnJvbSB0aGUgcnVsZSBhYm92ZSBiZWNhdXNlIDpob3N0LWNvbnRleHQgbWF5CiAgICAgICogbm90IGJlIHJlY29nbml6ZWQuCiAgICAgICovCiAgICA6aG9zdChbZGlyPSJydGwiXSkgI3NsaWRlckNvbnRhaW5lciB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLTEpOwogICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7CiAgICB9CgogICAgLyoqCiAgICAgICogTk9URShrZWFudWxlZSk6IE5lZWRlZCB0byBvdmVycmlkZSB0aGUgOmhvc3QtY29udGV4dCBydWxlICh3aGVyZSBzdXBwb3J0ZWQpCiAgICAgICogdG8gc3VwcG9ydCBMVFIgc2xpZGVycyBpbiBSVEwgcGFnZXMuCiAgICAgICovCiAgICA6aG9zdChbZGlyPSJsdHIiXSkgI3NsaWRlckNvbnRhaW5lciB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoMSk7CiAgICAgIHRyYW5zZm9ybTogc2NhbGVYKDEpOwogICAgfQoKICAgICNzbGlkZXJDb250YWluZXIgewogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBoZWlnaHQ6IGNhbGMoMzBweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkpOwogICAgICBtYXJnaW4tbGVmdDogY2FsYygxNXB4ICsgdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KS8yKTsKICAgICAgbWFyZ2luLXJpZ2h0OiBjYWxjKDE1cHggKyB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpLzIpOwogICAgfQoKICAgICNzbGlkZXJDb250YWluZXI6Zm9jdXMgewogICAgICBvdXRsaW5lOiAwOwogICAgfQoKICAgICNzbGlkZXJDb250YWluZXIuZWRpdGFibGUgewogICAgICBtYXJnaW4tdG9wOiAxMnB4OwogICAgICBtYXJnaW4tYm90dG9tOiAxMnB4OwogICAgfQoKICAgIC5iYXItY29udGFpbmVyIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIGJvdHRvbTogMDsKICAgICAgbGVmdDogMDsKICAgICAgcmlnaHQ6IDA7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB9CgogICAgLnJpbmcgPiAuYmFyLWNvbnRhaW5lciB7CiAgICAgIGxlZnQ6IGNhbGMoNXB4ICsgdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KS8yKTsKICAgICAgdHJhbnNpdGlvbjogbGVmdCAwLjE4cyBlYXNlOwogICAgfQoKICAgIC5yaW5nLmV4cGFuZC5kcmFnZ2luZyA+IC5iYXItY29udGFpbmVyIHsKICAgICAgdHJhbnNpdGlvbjogbm9uZTsKICAgIH0KCiAgICAucmluZy5leHBhbmQ6bm90KC5waW4pID4gLmJhci1jb250YWluZXIgewogICAgICBsZWZ0OiBjYWxjKDhweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkvMik7CiAgICB9CgogICAgI3NsaWRlckJhciB7CiAgICAgIHBhZGRpbmc6IDE1cHggMDsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1iYXItY29sb3IsIHRyYW5zcGFyZW50KTsKICAgICAgLS1wYXBlci1wcm9ncmVzcy1jb250YWluZXItY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1jb250YWluZXItY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICAgIC0tcGFwZXItcHJvZ3Jlc3MtaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpOwogICAgfQoKICAgIC5zbGlkZXItbWFya2VycyB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgLyogc2xpZGVyLWtub2IgaXMgMzBweCArIHRoZSBzbGlkZXItaGVpZ2h0IHNvIHRoYXQgdGhlIG1hcmtlcnMgc2hvdWxkIHN0YXJ0IGF0IGEgb2Zmc2V0IG9mIDE1cHgqLwogICAgICB0b3A6IDE1cHg7CiAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KTsKICAgICAgbGVmdDogMDsKICAgICAgcmlnaHQ6IC0xcHg7CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbDsKICAgIH0KCiAgICAuc2xpZGVyLW1hcmtlciB7CiAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4OwogICAgfQogICAgLnNsaWRlci1tYXJrZXJzOjphZnRlciwKICAgIC5zbGlkZXItbWFya2VyOjphZnRlciB7CiAgICAgIGNvbnRlbnQ6ICIiOwogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgbWFyZ2luLWxlZnQ6IC0xcHg7CiAgICAgIHdpZHRoOiAycHg7CiAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KTsKICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItbWFya2Vycy1jb2xvciwgIzAwMCk7CiAgICB9CgogICAgLnNsaWRlci1rbm9iIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICBsZWZ0OiAwOwogICAgICB0b3A6IDA7CiAgICAgIG1hcmdpbi1sZWZ0OiBjYWxjKC0xNXB4IC0gdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KS8yKTsKICAgICAgd2lkdGg6IGNhbGMoMzBweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkpOwogICAgICBoZWlnaHQ6IGNhbGMoMzBweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkpOwogICAgfQoKICAgIC50cmFuc2l0aW5nID4gLnNsaWRlci1rbm9iIHsKICAgICAgdHJhbnNpdGlvbjogbGVmdCAwLjA4cyBlYXNlOwogICAgfQoKICAgIC5zbGlkZXIta25vYjpmb2N1cyB7CiAgICAgIG91dGxpbmU6IG5vbmU7CiAgICB9CgogICAgLnNsaWRlci1rbm9iLmRyYWdnaW5nIHsKICAgICAgdHJhbnNpdGlvbjogbm9uZTsKICAgIH0KCiAgICAuc25hcHMgPiAuc2xpZGVyLWtub2IuZHJhZ2dpbmcgewogICAgICB0cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjA4cyBlYXNlOwogICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4wOHMgZWFzZTsKICAgIH0KCiAgICAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICBtYXJnaW46IDEwcHg7CiAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAyMHB4KTsKICAgICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAyMHB4KTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWtub2ItY29sb3IsIHZhcigtLWdvb2dsZS1ibHVlLTcwMCkpOwogICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wYXBlci1zbGlkZXIta25vYi1jb2xvciwgdmFyKC0tZ29vZ2xlLWJsdWUtNzAwKSk7CiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKCiAgICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKCiAgICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IC13ZWJraXQtdHJhbnNmb3JtLCBiYWNrZ3JvdW5kLWNvbG9yLCBib3JkZXI7CiAgICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybSwgYmFja2dyb3VuZC1jb2xvciwgYm9yZGVyOwogICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjE4czsKICAgICAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2U7CiAgICB9CgogICAgLmV4cGFuZDpub3QoLnBpbikgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMS41KTsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjUpOwogICAgfQoKICAgIC5yaW5nID4gLnNsaWRlci1rbm9iID4gLnNsaWRlci1rbm9iLWlubmVyIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtY29sb3IsIHRyYW5zcGFyZW50KTsKICAgICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtYm9yZGVyLWNvbG9yLCB2YXIoLS1wYXBlci1ncmV5LTQwMCkpOwogICAgfQoKICAgIC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLXBpbi1jb2xvciwgdmFyKC0tZ29vZ2xlLWJsdWUtNzAwKSk7CiAgICB9CgogICAgLnBpbiA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlIHsKICAgICAgY29udGVudDogIiI7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiAwOwogICAgICBsZWZ0OiA1MCU7CiAgICAgIG1hcmdpbi1sZWZ0OiAtMTNweDsKICAgICAgd2lkdGg6IDI2cHg7CiAgICAgIGhlaWdodDogMjZweDsKICAgICAgYm9yZGVyLXJhZGl1czogNTAlIDUwJSA1MCUgMDsKCiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKSBzY2FsZSgwKSB0cmFuc2xhdGUoMCk7CiAgICAgIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZykgc2NhbGUoMCkgdHJhbnNsYXRlKDApOwogICAgfQoKICAgIC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlLAogICAgLnNsaWRlci1rbm9iLWlubmVyOjphZnRlciB7CiAgICAgIHRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIC4xOHMgZWFzZSwgYmFja2dyb3VuZC1jb2xvciAuMThzIGVhc2U7CiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAuMThzIGVhc2UsIGJhY2tncm91bmQtY29sb3IgLjE4cyBlYXNlOwogICAgfQoKICAgIC5waW4ucmluZyA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLXBpbi1zdGFydC1jb2xvciwgdmFyKC0tcGFwZXItZ3JleS00MDApKTsKICAgIH0KCiAgICAucGluLmV4cGFuZCA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlIHsKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpIHNjYWxlKDEpIHRyYW5zbGF0ZSgxN3B4LCAtMTdweCk7CiAgICAgIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZykgc2NhbGUoMSkgdHJhbnNsYXRlKDE3cHgsIC0xN3B4KTsKICAgIH0KCiAgICAucGluID4gLnNsaWRlci1rbm9iID4gLnNsaWRlci1rbm9iLWlubmVyOjphZnRlciB7CiAgICAgIGNvbnRlbnQ6IGF0dHIodmFsdWUpOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogMDsKICAgICAgbGVmdDogNTAlOwogICAgICBtYXJnaW4tbGVmdDogLTE2cHg7CiAgICAgIHdpZHRoOiAzMnB4OwogICAgICBoZWlnaHQ6IDI2cHg7CiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1mb250LWNvbG9yLCAjZmZmKTsKICAgICAgZm9udC1zaXplOiAxMHB4OwoKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDApIHRyYW5zbGF0ZSgwKTsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwKSB0cmFuc2xhdGUoMCk7CiAgICB9CgogICAgLnBpbi5leHBhbmQgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXI6OmFmdGVyIHsKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpIHRyYW5zbGF0ZSgwLCAtMTdweCk7CiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSkgdHJhbnNsYXRlKDAsIC0xN3B4KTsKICAgIH0KCiAgICAvKiBwYXBlci1pbnB1dCAqLwogICAgLnNsaWRlci1pbnB1dCB7CiAgICAgIHdpZHRoOiA1MHB4OwogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBAYXBwbHkgLS1wYXBlci1zbGlkZXItaW5wdXQtY29udGFpbmVyLWlucHV0OwogICAgICB9OwogICAgICBAYXBwbHkgLS1wYXBlci1zbGlkZXItaW5wdXQ7CiAgICB9CgogICAgLyogZGlzYWJsZWQgc3RhdGUgKi8KICAgICNzbGlkZXJDb250YWluZXIuZGlzYWJsZWQgewogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIH0KCiAgICAuZGlzYWJsZWQgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItZGlzYWJsZWQta25vYi1jb2xvciwgdmFyKC0tcGFwZXItZ3JleS00MDApKTsKICAgICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tcGFwZXItc2xpZGVyLWRpc2FibGVkLWtub2ItY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZTNkKDAuNzUsIDAuNzUsIDEpOwogICAgICB0cmFuc2Zvcm06IHNjYWxlM2QoMC43NSwgMC43NSwgMSk7CiAgICB9CgogICAgLmRpc2FibGVkLnJpbmcgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1jb2xvciwgdHJhbnNwYXJlbnQpOwogICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1ib3JkZXItY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICB9CgogICAgcGFwZXItcmlwcGxlIHsKICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yLCB2YXIoLS1nb29nbGUtYmx1ZS03MDApKTsKICAgIH0KICA8L3N0eWxlPgoKICA8ZGl2IGlkPSJzbGlkZXJDb250YWluZXIiIGNsYXNzXCQ9IltbX2dldENsYXNzTmFtZXMoZGlzYWJsZWQsIHBpbiwgc25hcHMsIGltbWVkaWF0ZVZhbHVlLCBtaW4sIGV4cGFuZCwgZHJhZ2dpbmcsIHRyYW5zaXRpbmcsIGVkaXRhYmxlKV1dIj4KICAgIDxkaXYgY2xhc3M9ImJhci1jb250YWluZXIiPgogICAgICA8cGFwZXItcHJvZ3Jlc3MgZGlzYWJsZWRcJD0iW1tkaXNhYmxlZF1dIiBpZD0ic2xpZGVyQmFyIiBhcmlhLWhpZGRlbj0idHJ1ZSIgbWluPSJbW21pbl1dIiBtYXg9IltbbWF4XV0iIHN0ZXA9Iltbc3RlcF1dIiB2YWx1ZT0iW1tpbW1lZGlhdGVWYWx1ZV1dIiBzZWNvbmRhcnktcHJvZ3Jlc3M9Iltbc2Vjb25kYXJ5UHJvZ3Jlc3NdXSIgb24tZG93bj0iX2JhcmRvd24iIG9uLXVwPSJfcmVzZXRLbm9iIiBvbi10cmFjaz0iX2JhcnRyYWNrIiBvbi10YXA9Il9iYXJjbGljayI+CiAgICAgIDwvcGFwZXItcHJvZ3Jlc3M+CiAgICA8L2Rpdj4KCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc25hcHNdXSI+CiAgICAgIDxkaXYgY2xhc3M9InNsaWRlci1tYXJrZXJzIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW21hcmtlcnNdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzbGlkZXItbWFya2VyIj48L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CgogICAgPGRpdiBpZD0ic2xpZGVyS25vYiIgY2xhc3M9InNsaWRlci1rbm9iIiBvbi1kb3duPSJfa25vYmRvd24iIG9uLXVwPSJfcmVzZXRLbm9iIiBvbi10cmFjaz0iX29uVHJhY2siIG9uLXRyYW5zaXRpb25lbmQ9Il9rbm9iVHJhbnNpdGlvbkVuZCI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2xpZGVyLWtub2ItaW5uZXIiIHZhbHVlXCQ9IltbaW1tZWRpYXRlVmFsdWVdXSI+PC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KCiAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2VkaXRhYmxlXV0iPgogICAgPHBhcGVyLWlucHV0IGlkPSJpbnB1dCIgdHlwZT0ibnVtYmVyIiBzdGVwPSJbW3N0ZXBdXSIgbWluPSJbW21pbl1dIiBtYXg9IltbbWF4XV0iIGNsYXNzPSJzbGlkZXItaW5wdXQiIGRpc2FibGVkXCQ9IltbZGlzYWJsZWRdXSIgdmFsdWU9IltbaW1tZWRpYXRlVmFsdWVdXSIgb24tY2hhbmdlPSJfY2hhbmdlVmFsdWUiIG9uLWtleWRvd249Il9pbnB1dEtleURvd24iIG5vLWxhYmVsLWZsb2F0PgogICAgPC9wYXBlci1pbnB1dD4KICA8L3RlbXBsYXRlPgpgO1IwdC5zZXRBdHRyaWJ1dGUoInN0cmlwLXdoaXRlc3BhY2UiLCIiKTtZdCh7X3RlbXBsYXRlOlIwdCxpczoicGFwZXItc2xpZGVyIixiZWhhdmlvcnM6W09vLFRoLGp4LGs5XSxwcm9wZXJ0aWVzOnt2YWx1ZTp7dHlwZTpOdW1iZXIsdmFsdWU6MH0sc25hcHM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITB9LHBpbjp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMH0sc2Vjb25kYXJ5UHJvZ3Jlc3M6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwLG9ic2VydmVyOiJfc2Vjb25kYXJ5UHJvZ3Jlc3NDaGFuZ2VkIn0sZWRpdGFibGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0saW1tZWRpYXRlVmFsdWU6e3R5cGU6TnVtYmVyLHZhbHVlOjAscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSxtYXhNYXJrZXJzOnt0eXBlOk51bWJlcix2YWx1ZTowLG5vdGlmeTohMH0sZXhwYW5kOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVhZE9ubHk6ITB9LGlnbm9yZUJhclRvdWNoOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGRyYWdnaW5nOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSx0cmFuc2l0aW5nOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVhZE9ubHk6ITB9LG1hcmtlcnM6e3R5cGU6QXJyYXkscmVhZE9ubHk6ITAsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fSxvYnNlcnZlcnM6WyJfdXBkYXRlS25vYih2YWx1ZSwgbWluLCBtYXgsIHNuYXBzLCBzdGVwKSIsIl92YWx1ZUNoYW5nZWQodmFsdWUpIiwiX2ltbWVkaWF0ZVZhbHVlQ2hhbmdlZChpbW1lZGlhdGVWYWx1ZSkiLCJfdXBkYXRlTWFya2VycyhtYXhNYXJrZXJzLCBtaW4sIG1heCwgc25hcHMpIl0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6InNsaWRlciIsdGFiaW5kZXg6MH0sa2V5QmluZGluZ3M6e2xlZnQ6Il9sZWZ0S2V5IixyaWdodDoiX3JpZ2h0S2V5IiwiZG93biBwYWdlZG93biBob21lIjoiX2RlY3JlbWVudEtleSIsInVwIHBhZ2V1cCBlbmQiOiJfaW5jcmVtZW50S2V5In0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLmlnbm9yZUJhclRvdWNoJiZtXyh0aGlzLiQuc2xpZGVyQmFyLCJhdXRvIil9LGluY3JlbWVudDpmdW5jdGlvbigpe3RoaXMudmFsdWU9dGhpcy5fY2xhbXBWYWx1ZSh0aGlzLnZhbHVlK3RoaXMuc3RlcCl9LGRlY3JlbWVudDpmdW5jdGlvbigpe3RoaXMudmFsdWU9dGhpcy5fY2xhbXBWYWx1ZSh0aGlzLnZhbHVlLXRoaXMuc3RlcCl9LF91cGRhdGVLbm9iOmZ1bmN0aW9uKGUsdCxyLG4saSl7dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtdmFsdWVtaW4iLHQpLHRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXZhbHVlbWF4IixyKSx0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS12YWx1ZW5vdyIsZSksdGhpcy5fcG9zaXRpb25Lbm9iKHRoaXMuX2NhbGNSYXRpbyhlKSoxMDApfSxfdmFsdWVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJ2YWx1ZS1jaGFuZ2UiLHtjb21wb3NlZDohMH0pfSxfaW1tZWRpYXRlVmFsdWVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5kcmFnZ2luZz90aGlzLmZpcmUoImltbWVkaWF0ZS12YWx1ZS1jaGFuZ2UiLHtjb21wb3NlZDohMH0pOnRoaXMudmFsdWU9dGhpcy5pbW1lZGlhdGVWYWx1ZX0sX3NlY29uZGFyeVByb2dyZXNzQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuc2Vjb25kYXJ5UHJvZ3Jlc3M9dGhpcy5fY2xhbXBWYWx1ZSh0aGlzLnNlY29uZGFyeVByb2dyZXNzKX0sX2V4cGFuZEtub2I6ZnVuY3Rpb24oKXt0aGlzLl9zZXRFeHBhbmQoITApfSxfcmVzZXRLbm9iOmZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxEZWJvdW5jZXIoImV4cGFuZEtub2IiKSx0aGlzLl9zZXRFeHBhbmQoITEpfSxfcG9zaXRpb25Lbm9iOmZ1bmN0aW9uKGUpe3RoaXMuX3NldEltbWVkaWF0ZVZhbHVlKHRoaXMuX2NhbGNTdGVwKHRoaXMuX2NhbGNLbm9iUG9zaXRpb24oZSkpKSx0aGlzLl9zZXRSYXRpbyh0aGlzLl9jYWxjUmF0aW8odGhpcy5pbW1lZGlhdGVWYWx1ZSkqMTAwKSx0aGlzLiQuc2xpZGVyS25vYi5zdHlsZS5sZWZ0PXRoaXMucmF0aW8rIiUiLHRoaXMuZHJhZ2dpbmcmJih0aGlzLl9rbm9ic3RhcnR4PXRoaXMucmF0aW8qdGhpcy5fdy8xMDAsdGhpcy50cmFuc2xhdGUzZCgwLDAsMCx0aGlzLiQuc2xpZGVyS25vYikpfSxfY2FsY0tub2JQb3NpdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4odGhpcy5tYXgtdGhpcy5taW4pKmUvMTAwK3RoaXMubWlufSxfb25UcmFjazpmdW5jdGlvbihlKXtzd2l0Y2goZS5zdG9wUHJvcGFnYXRpb24oKSxlLmRldGFpbC5zdGF0ZSl7Y2FzZSJzdGFydCI6dGhpcy5fdHJhY2tTdGFydChlKTticmVhaztjYXNlInRyYWNrIjp0aGlzLl90cmFja1goZSk7YnJlYWs7Y2FzZSJlbmQiOnRoaXMuX3RyYWNrRW5kKCk7YnJlYWt9fSxfdHJhY2tTdGFydDpmdW5jdGlvbihlKXt0aGlzLl9zZXRUcmFuc2l0aW5nKCExKSx0aGlzLl93PXRoaXMuJC5zbGlkZXJCYXIub2Zmc2V0V2lkdGgsdGhpcy5feD10aGlzLnJhdGlvKnRoaXMuX3cvMTAwLHRoaXMuX3N0YXJ0eD10aGlzLl94LHRoaXMuX2tub2JzdGFydHg9dGhpcy5fc3RhcnR4LHRoaXMuX21pbng9LXRoaXMuX3N0YXJ0eCx0aGlzLl9tYXh4PXRoaXMuX3ctdGhpcy5fc3RhcnR4LHRoaXMuJC5zbGlkZXJLbm9iLmNsYXNzTGlzdC5hZGQoImRyYWdnaW5nIiksdGhpcy5fc2V0RHJhZ2dpbmcoITApfSxfdHJhY2tYOmZ1bmN0aW9uKGUpe3RoaXMuZHJhZ2dpbmd8fHRoaXMuX3RyYWNrU3RhcnQoZSk7dmFyIHQ9dGhpcy5faXNSVEw/LTE6MSxyPU1hdGgubWluKHRoaXMuX21heHgsTWF0aC5tYXgodGhpcy5fbWlueCxlLmRldGFpbC5keCp0KSk7dGhpcy5feD10aGlzLl9zdGFydHgrcjt2YXIgbj10aGlzLl9jYWxjU3RlcCh0aGlzLl9jYWxjS25vYlBvc2l0aW9uKHRoaXMuX3gvdGhpcy5fdyoxMDApKTt0aGlzLl9zZXRJbW1lZGlhdGVWYWx1ZShuKTt2YXIgaT10aGlzLl9jYWxjUmF0aW8odGhpcy5pbW1lZGlhdGVWYWx1ZSkqdGhpcy5fdy10aGlzLl9rbm9ic3RhcnR4O3RoaXMudHJhbnNsYXRlM2QoaSsicHgiLDAsMCx0aGlzLiQuc2xpZGVyS25vYil9LF90cmFja0VuZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuJC5zbGlkZXJLbm9iLnN0eWxlO3RoaXMuJC5zbGlkZXJLbm9iLmNsYXNzTGlzdC5yZW1vdmUoImRyYWdnaW5nIiksdGhpcy5fc2V0RHJhZ2dpbmcoITEpLHRoaXMuX3Jlc2V0S25vYigpLHRoaXMudmFsdWU9dGhpcy5pbW1lZGlhdGVWYWx1ZSxlLnRyYW5zZm9ybT1lLndlYmtpdFRyYW5zZm9ybT0iIix0aGlzLmZpcmUoImNoYW5nZSIse2NvbXBvc2VkOiEwfSl9LF9rbm9iZG93bjpmdW5jdGlvbihlKXt0aGlzLl9leHBhbmRLbm9iKCksZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuZm9jdXMoKX0sX2JhcnRyYWNrOmZ1bmN0aW9uKGUpe3RoaXMuX2FsbG93QmFyRXZlbnQoZSkmJnRoaXMuX29uVHJhY2soZSl9LF9iYXJjbGljazpmdW5jdGlvbihlKXt0aGlzLl93PXRoaXMuJC5zbGlkZXJCYXIub2Zmc2V0V2lkdGg7dmFyIHQ9dGhpcy4kLnNsaWRlckJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPShlLmRldGFpbC54LXQubGVmdCkvdGhpcy5fdyoxMDA7dGhpcy5faXNSVEwmJihyPTEwMC1yKTt2YXIgbj10aGlzLnJhdGlvO3RoaXMuX3NldFRyYW5zaXRpbmcoITApLHRoaXMuX3Bvc2l0aW9uS25vYihyKSxuPT09dGhpcy5yYXRpbyYmdGhpcy5fc2V0VHJhbnNpdGluZyghMSksdGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMuZmlyZSgiY2hhbmdlIix7Y29tcG9zZWQ6ITB9KX0pLGUucHJldmVudERlZmF1bHQoKSx0aGlzLmZvY3VzKCl9LF9iYXJkb3duOmZ1bmN0aW9uKGUpe3RoaXMuX2FsbG93QmFyRXZlbnQoZSkmJih0aGlzLmRlYm91bmNlKCJleHBhbmRLbm9iIix0aGlzLl9leHBhbmRLbm9iLDYwKSx0aGlzLl9iYXJjbGljayhlKSl9LF9rbm9iVHJhbnNpdGlvbkVuZDpmdW5jdGlvbihlKXtlLnRhcmdldD09PXRoaXMuJC5zbGlkZXJLbm9iJiZ0aGlzLl9zZXRUcmFuc2l0aW5nKCExKX0sX3VwZGF0ZU1hcmtlcnM6ZnVuY3Rpb24oZSx0LHIsbil7bnx8dGhpcy5fc2V0TWFya2VycyhbXSk7dmFyIGk9TWF0aC5yb3VuZCgoci10KS90aGlzLnN0ZXApO2k+ZSYmKGk9ZSksKGk8MHx8IWlzRmluaXRlKGkpKSYmKGk9MCksdGhpcy5fc2V0TWFya2VycyhuZXcgQXJyYXkoaSkpfSxfbWVyZ2VDbGFzc2VzOmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Qua2V5cyhlKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19KS5qb2luKCIgIil9LF9nZXRDbGFzc05hbWVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21lcmdlQ2xhc3Nlcyh7ZGlzYWJsZWQ6dGhpcy5kaXNhYmxlZCxwaW46dGhpcy5waW4sc25hcHM6dGhpcy5zbmFwcyxyaW5nOnRoaXMuaW1tZWRpYXRlVmFsdWU8PXRoaXMubWluLGV4cGFuZDp0aGlzLmV4cGFuZCxkcmFnZ2luZzp0aGlzLmRyYWdnaW5nLHRyYW5zaXRpbmc6dGhpcy50cmFuc2l0aW5nLGVkaXRhYmxlOnRoaXMuZWRpdGFibGV9KX0sX2FsbG93QmFyRXZlbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIXRoaXMuaWdub3JlQmFyVG91Y2h8fGUuZGV0YWlsLnNvdXJjZUV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudH0sZ2V0IF9pc1JUTCgpe3JldHVybiB0aGlzLl9faXNSVEw9PT12b2lkIDAmJih0aGlzLl9faXNSVEw9d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcykuZGlyZWN0aW9uPT09InJ0bCIpLHRoaXMuX19pc1JUTH0sX2xlZnRLZXk6ZnVuY3Rpb24oZSl7dGhpcy5faXNSVEw/dGhpcy5faW5jcmVtZW50S2V5KGUpOnRoaXMuX2RlY3JlbWVudEtleShlKX0sX3JpZ2h0S2V5OmZ1bmN0aW9uKGUpe3RoaXMuX2lzUlRMP3RoaXMuX2RlY3JlbWVudEtleShlKTp0aGlzLl9pbmNyZW1lbnRLZXkoZSl9LF9pbmNyZW1lbnRLZXk6ZnVuY3Rpb24oZSl7dGhpcy5kaXNhYmxlZHx8KGUuZGV0YWlsLmtleT09PSJlbmQiP3RoaXMudmFsdWU9dGhpcy5tYXg6dGhpcy5pbmNyZW1lbnQoKSx0aGlzLmZpcmUoImNoYW5nZSIpLGUucHJldmVudERlZmF1bHQoKSl9LF9kZWNyZW1lbnRLZXk6ZnVuY3Rpb24oZSl7dGhpcy5kaXNhYmxlZHx8KGUuZGV0YWlsLmtleT09PSJob21lIj90aGlzLnZhbHVlPXRoaXMubWluOnRoaXMuZGVjcmVtZW50KCksdGhpcy5maXJlKCJjaGFuZ2UiKSxlLnByZXZlbnREZWZhdWx0KCkpfSxfY2hhbmdlVmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy52YWx1ZT1lLnRhcmdldC52YWx1ZSx0aGlzLmZpcmUoImNoYW5nZSIse2NvbXBvc2VkOiEwfSl9LF9pbnB1dEtleURvd246ZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKX0sX2NyZWF0ZVJpcHBsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yaXBwbGVDb250YWluZXI9dGhpcy4kLnNsaWRlcktub2IscEUuX2NyZWF0ZVJpcHBsZS5jYWxsKHRoaXMpfSxfZm9jdXNlZENoYW5nZWQ6ZnVuY3Rpb24oZSl7ZSYmdGhpcy5lbnN1cmVSaXBwbGUoKSx0aGlzLmhhc1JpcHBsZSgpJiYoZT90aGlzLl9yaXBwbGUuc3R5bGUuZGlzcGxheT0iIjp0aGlzLl9yaXBwbGUuc3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5fcmlwcGxlLmhvbGREb3duPWUpfX0pO3ZhciBNVz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO01XLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO01XLmlubmVySFRNTD1gPGRvbS1tb2R1bGUgaWQ9InBhcGVyLXNwaW5uZXItc3R5bGVzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIC8qCiAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgICAgLyogU1RZTEVTIEZPUiBUSEUgU1BJTk5FUiAqLwogICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCgogICAgICAvKgogICAgICAgKiBDb25zdGFudHM6CiAgICAgICAqICAgICAgQVJDU0laRSAgICAgPSAyNzAgZGVncmVlcyAoYW1vdW50IG9mIGNpcmNsZSB0aGUgYXJjIHRha2VzIHVwKQogICAgICAgKiAgICAgIEFSQ1RJTUUgICAgID0gMTMzM21zICh0aW1lIGl0IHRha2VzIHRvIGV4cGFuZCBhbmQgY29udHJhY3QgYXJjKQogICAgICAgKiAgICAgIEFSQ1NUQVJUUk9UID0gMjE2IGRlZ3JlZXMgKGhvdyBtdWNoIHRoZSBzdGFydCBsb2NhdGlvbiBvZiB0aGUgYXJjCiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGQgcm90YXRlIGVhY2ggdGltZSwgMjE2IGdpdmVzIHVzIGEKICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUgcG9pbnRlZCBzdGFyIHNoYXBlIChpdCdzIDM2MC81ICogMykuCiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgYSA3IHBvaW50ZWQgc3Rhciwgd2UgbWlnaHQgZG8KICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM2MC83ICogMyA9IDE1NC4yODYpCiAgICAgICAqICAgICAgU0hSSU5LX1RJTUUgPSA0MDBtcwogICAgICAgKi8KCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAyOHB4OwogICAgICAgIGhlaWdodDogMjhweDsKCiAgICAgICAgLyogMzYwICogQVJDVElNRSAvIChBUkNTVEFSVFJPVCArICgzNjAtQVJDU0laRSkpICovCiAgICAgICAgLS1wYXBlci1zcGlubmVyLWNvbnRhaW5lci1yb3RhdGlvbi1kdXJhdGlvbjogMTU2OG1zOwoKICAgICAgICAvKiBBUkNUSU1FICovCiAgICAgICAgLS1wYXBlci1zcGlubmVyLWV4cGFuZC1jb250cmFjdC1kdXJhdGlvbjogMTMzM21zOwoKICAgICAgICAvKiA0ICogQVJDVElNRSAqLwogICAgICAgIC0tcGFwZXItc3Bpbm5lci1mdWxsLWN5Y2xlLWR1cmF0aW9uOiA1MzMybXM7CgogICAgICAgIC8qIFNIUklOS19USU1FICovCiAgICAgICAgLS1wYXBlci1zcGlubmVyLWNvb2xkb3duLWR1cmF0aW9uOiA0MDBtczsKICAgICAgfQoKICAgICAgI3NwaW5uZXJDb250YWluZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKCiAgICAgICAgLyogVGhlIHNwaW5uZXIgZG9lcyBub3QgaGF2ZSBhbnkgY29udGVudHMgdGhhdCB3b3VsZCBoYXZlIHRvIGJlCiAgICAgICAgICogZmxpcHBlZCBpZiB0aGUgZGlyZWN0aW9uIGNoYW5nZXMuIEFsd2F5cyB1c2UgbHRyIHNvIHRoYXQgdGhlCiAgICAgICAgICogc3R5bGUgd29ya3Mgb3V0IGNvcnJlY3RseSBpbiBib3RoIGNhc2VzLiAqLwogICAgICAgIGRpcmVjdGlvbjogbHRyOwogICAgICB9CgogICAgICAjc3Bpbm5lckNvbnRhaW5lci5hY3RpdmUgewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBjb250YWluZXItcm90YXRlIHZhcigtLXBhcGVyLXNwaW5uZXItY29udGFpbmVyLXJvdGF0aW9uLWR1cmF0aW9uKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgICAgYW5pbWF0aW9uOiBjb250YWluZXItcm90YXRlIHZhcigtLXBhcGVyLXNwaW5uZXItY29udGFpbmVyLXJvdGF0aW9uLWR1cmF0aW9uKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBjb250YWluZXItcm90YXRlIHsKICAgICAgICB0byB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKSB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgY29udGFpbmVyLXJvdGF0ZSB7CiAgICAgICAgdG8geyB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpIH0KICAgICAgfQoKICAgICAgLnNwaW5uZXItbGF5ZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1zcGlubmVyLWNvbG9yLCB2YXIoLS1nb29nbGUtYmx1ZS01MDApKTsKICAgICAgfQoKICAgICAgLmxheWVyLTEgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1zcGlubmVyLWxheWVyLTEtY29sb3IsIHZhcigtLWdvb2dsZS1ibHVlLTUwMCkpOwogICAgICB9CgogICAgICAubGF5ZXItMiB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNwaW5uZXItbGF5ZXItMi1jb2xvciwgdmFyKC0tZ29vZ2xlLXJlZC01MDApKTsKICAgICAgfQoKICAgICAgLmxheWVyLTMgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1zcGlubmVyLWxheWVyLTMtY29sb3IsIHZhcigtLWdvb2dsZS15ZWxsb3ctNTAwKSk7CiAgICAgIH0KCiAgICAgIC5sYXllci00IHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItc3Bpbm5lci1sYXllci00LWNvbG9yLCB2YXIoLS1nb29nbGUtZ3JlZW4tNTAwKSk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBJTVBPUlRBTlQgTk9URSBBQk9VVCBDU1MgQU5JTUFUSU9OIFBST1BFUlRJRVMgKGtlYW51bGVlKToKICAgICAgICoKICAgICAgICogaU9TIFNhZmFyaSAodGVzdGVkIG9uIGlPUyA4LjEpIGRvZXMgbm90IGhhbmRsZSBhbmltYXRpb24tZGVsYXkgdmVyeSB3ZWxsIC0gaXQgZG9lc24ndAogICAgICAgKiBndWFyYW50ZWUgdGhhdCB0aGUgYW5pbWF0aW9uIHdpbGwgc3RhcnQgX2V4YWN0bHlfIGFmdGVyIHRoYXQgdmFsdWUuIFNvIHdlIGF2b2lkIHVzaW5nCiAgICAgICAqIGFuaW1hdGlvbi1kZWxheSBhbmQgaW5zdGVhZCBzZXQgY3VzdG9tIGtleWZyYW1lcyBmb3IgZWFjaCBjb2xvciAoYXMgbGF5ZXItMnVuZGFudCBhcyBpdAogICAgICAgKiBzZWVtcykuCiAgICAgICAqLwogICAgICAuYWN0aXZlIC5zcGlubmVyLWxheWVyIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGU7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXNwaW5uZXItZnVsbC1jeWNsZS1kdXJhdGlvbik7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSk7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTsKICAgICAgICBhbmltYXRpb24tbmFtZTogZmlsbC11bmZpbGwtcm90YXRlOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItc3Bpbm5lci1mdWxsLWN5Y2xlLWR1cmF0aW9uKTsKICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSk7CiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5sYXllci0xIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTEtZmFkZS1pbi1vdXQ7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItMS1mYWRlLWluLW91dDsKICAgICAgfQoKICAgICAgLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5sYXllci0yIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTItZmFkZS1pbi1vdXQ7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItMi1mYWRlLWluLW91dDsKICAgICAgfQoKICAgICAgLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5sYXllci0zIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTMtZmFkZS1pbi1vdXQ7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItMy1mYWRlLWluLW91dDsKICAgICAgfQoKICAgICAgLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5sYXllci00IHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTQtZmFkZS1pbi1vdXQ7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItNC1mYWRlLWluLW91dDsKICAgICAgfQoKICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGZpbGwtdW5maWxsLXJvdGF0ZSB7CiAgICAgICAgMTIuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEzNWRlZykgfSAvKiAwLjUgKiBBUkNTSVpFICovCiAgICAgICAgMjUlICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDI3MGRlZykgfSAvKiAxICAgKiBBUkNTSVpFICovCiAgICAgICAgMzcuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDQwNWRlZykgfSAvKiAxLjUgKiBBUkNTSVpFICovCiAgICAgICAgNTAlICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDU0MGRlZykgfSAvKiAyICAgKiBBUkNTSVpFICovCiAgICAgICAgNjIuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDY3NWRlZykgfSAvKiAyLjUgKiBBUkNTSVpFICovCiAgICAgICAgNzUlICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDgxMGRlZykgfSAvKiAzICAgKiBBUkNTSVpFICovCiAgICAgICAgODcuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDk0NWRlZykgfSAvKiAzLjUgKiBBUkNTSVpFICovCiAgICAgICAgdG8gICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEwODBkZWcpIH0gLyogNCAgICogQVJDU0laRSAqLwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGZpbGwtdW5maWxsLXJvdGF0ZSB7CiAgICAgICAgMTIuNSUgeyB0cmFuc2Zvcm06IHJvdGF0ZSgxMzVkZWcpIH0gLyogMC41ICogQVJDU0laRSAqLwogICAgICAgIDI1JSAgIHsgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKSB9IC8qIDEgICAqIEFSQ1NJWkUgKi8KICAgICAgICAzNy41JSB7IHRyYW5zZm9ybTogcm90YXRlKDQwNWRlZykgfSAvKiAxLjUgKiBBUkNTSVpFICovCiAgICAgICAgNTAlICAgeyB0cmFuc2Zvcm06IHJvdGF0ZSg1NDBkZWcpIH0gLyogMiAgICogQVJDU0laRSAqLwogICAgICAgIDYyLjUlIHsgdHJhbnNmb3JtOiByb3RhdGUoNjc1ZGVnKSB9IC8qIDIuNSAqIEFSQ1NJWkUgKi8KICAgICAgICA3NSUgICB7IHRyYW5zZm9ybTogcm90YXRlKDgxMGRlZykgfSAvKiAzICAgKiBBUkNTSVpFICovCiAgICAgICAgODcuNSUgeyB0cmFuc2Zvcm06IHJvdGF0ZSg5NDVkZWcpIH0gLyogMy41ICogQVJDU0laRSAqLwogICAgICAgIHRvICAgIHsgdHJhbnNmb3JtOiByb3RhdGUoMTA4MGRlZykgfSAvKiA0ICAgKiBBUkNTSVpFICovCiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBsYXllci0xLWZhZGUtaW4tb3V0IHsKICAgICAgICAwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDI1JSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDI2JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDg5JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDkwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIHRvIHsgb3BhY2l0eTogMSB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgbGF5ZXItMS1mYWRlLWluLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICAyNSUgeyBvcGFjaXR5OiAxIH0KICAgICAgICAyNiUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA4OSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA5MCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDEgfQogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgbGF5ZXItMi1mYWRlLWluLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAwIH0KICAgICAgICAxNSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICAyNSUgeyBvcGFjaXR5OiAxIH0KICAgICAgICA1MCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICA1MSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGxheWVyLTItZmFkZS1pbi1vdXQgewogICAgICAgIDAlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgMTUlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgMjUlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNTAlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNTElIHsgb3BhY2l0eTogMCB9CiAgICAgICAgdG8geyBvcGFjaXR5OiAwIH0KICAgICAgfQoKICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGxheWVyLTMtZmFkZS1pbi1vdXQgewogICAgICAgIDAlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgNDAlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgNTAlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNzUlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNzYlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgdG8geyBvcGFjaXR5OiAwIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBsYXllci0zLWZhZGUtaW4tb3V0IHsKICAgICAgICAwJSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDQwJSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDUwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDc1JSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDc2JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIHRvIHsgb3BhY2l0eTogMCB9CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBsYXllci00LWZhZGUtaW4tb3V0IHsKICAgICAgICAwJSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDY1JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDc1JSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDkwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIHRvIHsgb3BhY2l0eTogMCB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgbGF5ZXItNC1mYWRlLWluLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA2NSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA3NSUgeyBvcGFjaXR5OiAxIH0KICAgICAgICA5MCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDAgfQogICAgICB9CgogICAgICAuY2lyY2xlLWNsaXBwZXIgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDUwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFBhdGNoIHRoZSBnYXAgdGhhdCBhcHBlYXIgYmV0d2VlbiB0aGUgdHdvIGFkamFjZW50IGRpdi5jaXJjbGUtY2xpcHBlciB3aGlsZSB0aGUKICAgICAgICogc3Bpbm5lciBpcyByb3RhdGluZyAoYXBwZWFycyBvbiBDaHJvbWUgNTAsIFNhZmFyaSA5LjEuMSwgYW5kIEVkZ2UpLgogICAgICAgKi8KICAgICAgLnNwaW5uZXItbGF5ZXI6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBsZWZ0OiA0NSU7CiAgICAgICAgd2lkdGg6IDEwJTsKICAgICAgICBib3JkZXItdG9wLXN0eWxlOiBzb2xpZDsKICAgICAgfQoKICAgICAgLnNwaW5uZXItbGF5ZXI6OmFmdGVyLAogICAgICAuY2lyY2xlLWNsaXBwZXIgLmNpcmNsZSB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvcmRlci13aWR0aDogdmFyKC0tcGFwZXItc3Bpbm5lci1zdHJva2Utd2lkdGgsIDNweCk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICB9CgogICAgICAuY2lyY2xlLWNsaXBwZXIgLmNpcmNsZSB7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIHdpZHRoOiAyMDAlOwogICAgICAgIGJvcmRlci1zdHlsZTogc29saWQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLmNpcmNsZS1jbGlwcGVyLmxlZnQgLmNpcmNsZSB7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBib3JkZXItcmlnaHQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgxMjlkZWcpOwogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDEyOWRlZyk7CiAgICAgIH0KCiAgICAgIC5jaXJjbGUtY2xpcHBlci5yaWdodCAuY2lyY2xlIHsKICAgICAgICBsZWZ0OiAtMTAwJTsKICAgICAgICBib3JkZXItbGVmdC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC0xMjlkZWcpOwogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0xMjlkZWcpOwogICAgICB9CgogICAgICAuYWN0aXZlIC5nYXAtcGF0Y2g6OmFmdGVyLAogICAgICAuYWN0aXZlIC5jaXJjbGUtY2xpcHBlciAuY2lyY2xlIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItc3Bpbm5lci1leHBhbmQtY29udHJhY3QtZHVyYXRpb24pOwogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpOwogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7CiAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci1zcGlubmVyLWV4cGFuZC1jb250cmFjdC1kdXJhdGlvbik7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpOwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlOwogICAgICB9CgogICAgICAuYWN0aXZlIC5jaXJjbGUtY2xpcHBlci5sZWZ0IC5jaXJjbGUgewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IGxlZnQtc3BpbjsKICAgICAgICBhbmltYXRpb24tbmFtZTogbGVmdC1zcGluOwogICAgICB9CgogICAgICAuYWN0aXZlIC5jaXJjbGUtY2xpcHBlci5yaWdodCAuY2lyY2xlIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiByaWdodC1zcGluOwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiByaWdodC1zcGluOwogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgbGVmdC1zcGluIHsKICAgICAgICAwJSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMTMwZGVnKSB9CiAgICAgICAgNTAlIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtNWRlZykgfQogICAgICAgIHRvIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgxMzBkZWcpIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBsZWZ0LXNwaW4gewogICAgICAgIDAlIHsgdHJhbnNmb3JtOiByb3RhdGUoMTMwZGVnKSB9CiAgICAgICAgNTAlIHsgdHJhbnNmb3JtOiByb3RhdGUoLTVkZWcpIH0KICAgICAgICB0byB7IHRyYW5zZm9ybTogcm90YXRlKDEzMGRlZykgfQogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgcmlnaHQtc3BpbiB7CiAgICAgICAgMCUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC0xMzBkZWcpIH0KICAgICAgICA1MCUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDVkZWcpIH0KICAgICAgICB0byB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTEzMGRlZykgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIHJpZ2h0LXNwaW4gewogICAgICAgIDAlIHsgdHJhbnNmb3JtOiByb3RhdGUoLTEzMGRlZykgfQogICAgICAgIDUwJSB7IHRyYW5zZm9ybTogcm90YXRlKDVkZWcpIH0KICAgICAgICB0byB7IHRyYW5zZm9ybTogcm90YXRlKC0xMzBkZWcpIH0KICAgICAgfQoKICAgICAgI3NwaW5uZXJDb250YWluZXIuY29vbGRvd24gewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBjb250YWluZXItcm90YXRlIHZhcigtLXBhcGVyLXNwaW5uZXItY29udGFpbmVyLXJvdGF0aW9uLWR1cmF0aW9uKSBsaW5lYXIgaW5maW5pdGUsIGZhZGUtb3V0IHZhcigtLXBhcGVyLXNwaW5uZXItY29vbGRvd24tZHVyYXRpb24pIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKTsKICAgICAgICBhbmltYXRpb246IGNvbnRhaW5lci1yb3RhdGUgdmFyKC0tcGFwZXItc3Bpbm5lci1jb250YWluZXItcm90YXRpb24tZHVyYXRpb24pIGxpbmVhciBpbmZpbml0ZSwgZmFkZS1vdXQgdmFyKC0tcGFwZXItc3Bpbm5lci1jb29sZG93bi1kdXJhdGlvbikgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpOwogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgZmFkZS1vdXQgewogICAgICAgIDAlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgdG8geyBvcGFjaXR5OiAwIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBmYWRlLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDAgfQogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoTVcuY29udGVudCk7dmFyIEQ5PXtwcm9wZXJ0aWVzOnthY3RpdmU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsb2JzZXJ2ZXI6Il9fYWN0aXZlQ2hhbmdlZCJ9LGFsdDp7dHlwZTpTdHJpbmcsdmFsdWU6ImxvYWRpbmciLG9ic2VydmVyOiJfX2FsdENoYW5nZWQifSxfX2Nvb2xpbmdEb3duOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxfX2NvbXB1dGVDb250YWluZXJDbGFzc2VzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuW2V8fHQ/ImFjdGl2ZSI6IiIsdD8iY29vbGRvd24iOiIiXS5qb2luKCIgIil9LF9fYWN0aXZlQ2hhbmdlZDpmdW5jdGlvbihlLHQpe3RoaXMuX19zZXRBcmlhSGlkZGVuKCFlKSx0aGlzLl9fY29vbGluZ0Rvd249IWUmJnR9LF9fYWx0Q2hhbmdlZDpmdW5jdGlvbihlKXtlPT09ImxvYWRpbmciP3RoaXMuYWx0PXRoaXMuZ2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIil8fGU6KHRoaXMuX19zZXRBcmlhSGlkZGVuKGU9PT0iIiksdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLGUpKX0sX19zZXRBcmlhSGlkZGVuOmZ1bmN0aW9uKGUpe3ZhciB0PSJhcmlhLWhpZGRlbiI7ZT90aGlzLnNldEF0dHJpYnV0ZSh0LCJ0cnVlIik6dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9LF9fcmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLmFjdGl2ZT0hMSx0aGlzLl9fY29vbGluZ0Rvd249ITF9fTt2YXIgTjB0PVFgCiAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLXNwaW5uZXItc3R5bGVzIj48L3N0eWxlPgoKICA8ZGl2IGlkPSJzcGlubmVyQ29udGFpbmVyIiBjbGFzcy1uYW1lPSJbW19fY29tcHV0ZUNvbnRhaW5lckNsYXNzZXMoYWN0aXZlLCBfX2Nvb2xpbmdEb3duKV1dIiBvbi1hbmltYXRpb25lbmQ9Il9fcmVzZXQiIG9uLXdlYmtpdC1hbmltYXRpb24tZW5kPSJfX3Jlc2V0Ij4KICAgIDxkaXYgY2xhc3M9InNwaW5uZXItbGF5ZXIgbGF5ZXItMSI+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIGxlZnQiPgogICAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciByaWdodCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJzcGlubmVyLWxheWVyIGxheWVyLTIiPgogICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciBsZWZ0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgcmlnaHQiPgogICAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0ic3Bpbm5lci1sYXllciBsYXllci0zIj4KICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgbGVmdCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIHJpZ2h0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9InNwaW5uZXItbGF5ZXIgbGF5ZXItNCI+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIGxlZnQiPgogICAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciByaWdodCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KYDtOMHQuc2V0QXR0cmlidXRlKCJzdHJpcC13aGl0ZXNwYWNlIiwiIik7WXQoe190ZW1wbGF0ZTpOMHQsaXM6InBhcGVyLXNwaW5uZXIiLGJlaGF2aW9yczpbRDldfSk7dmFyIEQwdD1RYAogIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1zcGlubmVyLXN0eWxlcyI+PC9zdHlsZT4KCiAgPGRpdiBpZD0ic3Bpbm5lckNvbnRhaW5lciIgY2xhc3MtbmFtZT0iW1tfX2NvbXB1dGVDb250YWluZXJDbGFzc2VzKGFjdGl2ZSwgX19jb29saW5nRG93bildXSIgb24tYW5pbWF0aW9uZW5kPSJfX3Jlc2V0IiBvbi13ZWJraXQtYW5pbWF0aW9uLWVuZD0iX19yZXNldCI+CiAgICA8ZGl2IGNsYXNzPSJzcGlubmVyLWxheWVyIj4KICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgbGVmdCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIHJpZ2h0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2PgpgO0QwdC5zZXRBdHRyaWJ1dGUoInN0cmlwLXdoaXRlc3BhY2UiLCIiKTtZdCh7X3RlbXBsYXRlOkQwdCxpczoicGFwZXItc3Bpbm5lci1saXRlIixiZWhhdmlvcnM6W0Q5XX0pO3ZhciBqYmU9UWA8aXJvbi1pY29uc2V0LXN2ZyBuYW1lPSJwYXBlci10YWJzIiBzaXplPSIyNCI+Cjxzdmc+PGRlZnM+CjxnIGlkPSJjaGV2cm9uLWxlZnQiPjxwYXRoIGQ9Ik0xNS40MSA3LjQxTDE0IDZsLTYgNiA2IDYgMS40MS0xLjQxTDEwLjgzIDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNoZXZyb24tcmlnaHQiPjxwYXRoIGQ9Ik0xMCA2TDguNTkgNy40MSAxMy4xNyAxMmwtNC41OCA0LjU5TDEwIDE4bDYtNnoiPjwvcGF0aD48L2c+CjwvZGVmcz48L3N2Zz4KPC9pcm9uLWljb25zZXQtc3ZnPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChqYmUuY29udGVudCk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWlubGluZTsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXItanVzdGlmaWVkOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LWF1dG87CgogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWI7CiAgICAgIH0KCiAgICAgIDpob3N0KDpmb2N1cykgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtsaW5rXSkgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC50YWItY29udGVudCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDEsIDEpOwogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXItY2VudGVyOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LWF1dG87CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFiLWNvbnRlbnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpub3QoLmlyb24tc2VsZWN0ZWQpKSA+IC50YWItY29udGVudCB7CiAgICAgICAgb3BhY2l0eTogMC44OwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWItY29udGVudC11bnNlbGVjdGVkOwogICAgICB9CgogICAgICA6aG9zdCg6Zm9jdXMpIC50YWItY29udGVudCB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICBmb250LXdlaWdodDogNzAwOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWItY29udGVudC1mb2N1c2VkOwogICAgICB9CgogICAgICBwYXBlci1yaXBwbGUgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10YWItaW5rLCB2YXIoLS1wYXBlci15ZWxsb3ctYTEwMCkpOwogICAgICB9CgogICAgICAudGFiLWNvbnRlbnQgPiA6OnNsb3R0ZWQoYSkgewogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LWF1dG87CgogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJ0YWItY29udGVudCI+CiAgICAgIDxzbG90Pjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci10YWIiLGJlaGF2aW9yczpbRGksTWgsc3VdLHByb3BlcnRpZXM6e2xpbms6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9fSxob3N0QXR0cmlidXRlczp7cm9sZToidGFiIn0sbGlzdGVuZXJzOntkb3duOiJfdXBkYXRlTm9pbmsiLHRhcDoiX29uVGFwIn0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVOb2luaygpfSxnZXQgX3BhcmVudE5vaW5rKCl7dmFyIGU9enQodGhpcykucGFyZW50Tm9kZTtyZXR1cm4hIWUmJiEhZS5ub2lua30sX3VwZGF0ZU5vaW5rOmZ1bmN0aW9uKCl7dGhpcy5ub2luaz0hIXRoaXMubm9pbmt8fCEhdGhpcy5fcGFyZW50Tm9pbmt9LF9vblRhcDpmdW5jdGlvbihlKXtpZih0aGlzLmxpbmspe3ZhciB0PXRoaXMucXVlcnlFZmZlY3RpdmVDaGlsZHJlbigiYSIpO2lmKCF0fHxlLnRhcmdldD09PXQpcmV0dXJuO3QuY2xpY2soKX19fSk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0OwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CgogICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CgogICAgICAgIC8qIE5PVEU6IEJvdGggdmFsdWVzIGFyZSBuZWVkZWQsIHNpbmNlIHNvbWUgcGhvbmVzIHJlcXVpcmUgdGhlIHZhbHVlIHRvIGJlIFxgdHJhbnNwYXJlbnRcYC4gKi8KICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7CiAgICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFiczsKICAgICAgfQoKICAgICAgOmhvc3QoOmRpcihydGwpKSB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWwtcmV2ZXJzZTsKICAgICAgfQoKICAgICAgI3RhYnNDb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LWF1dG87CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFicy1jb250YWluZXI7CiAgICAgIH0KCiAgICAgICN0YWJzQ29udGVudCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIC1tb3otZmxleC1iYXNpczogYXV0bzsKICAgICAgICAtbXMtZmxleC1iYXNpczogYXV0bzsKICAgICAgICBmbGV4LWJhc2lzOiBhdXRvOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRhYnMtY29udGVudDsKICAgICAgfQoKICAgICAgI3RhYnNDb250ZW50LnNjcm9sbGFibGUgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAjdGFic0NvbnRlbnQ6bm90KC5zY3JvbGxhYmxlKSwKICAgICAgI3RhYnNDb250ZW50LnNjcm9sbGFibGUuZml0LWNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgIH0KCiAgICAgICN0YWJzQ29udGVudC5zY3JvbGxhYmxlLmZpdC1jb250YWluZXIgewogICAgICAgIG1pbi13aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgI3RhYnNDb250ZW50LnNjcm9sbGFibGUuZml0LWNvbnRhaW5lciA+IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgLyogSUUgLSBwcmV2ZW50IHRhYnMgZnJvbSBjb21wcmVzc2luZyB3aGVuIHRoZXkgc2hvdWxkIHNjcm9sbC4gKi8KICAgICAgICAtbXMtZmxleDogMSAwIGF1dG87CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxIDAgYXV0bzsKICAgICAgICBmbGV4OiAxIDAgYXV0bzsKICAgICAgfQoKICAgICAgLmhpZGRlbiB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLm5vdC12aXNpYmxlIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgfQoKICAgICAgcGFwZXItaWNvbi1idXR0b24gewogICAgICAgIHdpZHRoOiA0OHB4OwogICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIG1hcmdpbjogMCA0cHg7CiAgICAgIH0KCiAgICAgICNzZWxlY3Rpb25CYXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBoZWlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHZhcigtLXBhcGVyLXRhYnMtc2VsZWN0aW9uLWJhci1jb2xvciwgdmFyKC0tcGFwZXIteWVsbG93LWExMDApKTsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDApOwogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IGNlbnRlcjsKICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IGNlbnRlcjsKICAgICAgICAgIHRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtOwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFicy1zZWxlY3Rpb24tYmFyOwogICAgICB9CgogICAgICAjc2VsZWN0aW9uQmFyLmFsaWduLWJvdHRvbSB7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvdHRvbTogYXV0bzsKICAgICAgfQoKICAgICAgI3NlbGVjdGlvbkJhci5leHBhbmQgewogICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMTVzOwogICAgICAgIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDEsIDEpOwogICAgICB9CgogICAgICAjc2VsZWN0aW9uQmFyLmNvbnRyYWN0IHsKICAgICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjE4czsKICAgICAgICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMCwgMC4wLCAwLjIsIDEpOwogICAgICB9CgogICAgICAjdGFic0NvbnRlbnQgPiA6OnNsb3R0ZWQoOm5vdCgjc2VsZWN0aW9uQmFyKSkgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0icGFwZXItdGFiczpjaGV2cm9uLWxlZnQiIGNsYXNzJD0iW1tfY29tcHV0ZVNjcm9sbEJ1dHRvbkNsYXNzKF9sZWZ0SGlkZGVuLCBzY3JvbGxhYmxlLCBoaWRlU2Nyb2xsQnV0dG9ucyldXSIgb24tdXA9Il9vblNjcm9sbEJ1dHRvblVwIiBvbi1kb3duPSJfb25MZWZ0U2Nyb2xsQnV0dG9uRG93biIgdGFiaW5kZXg9Ii0xIj48L3BhcGVyLWljb24tYnV0dG9uPgoKICAgIDxkaXYgaWQ9InRhYnNDb250YWluZXIiIG9uLXRyYWNrPSJfc2Nyb2xsIiBvbi1kb3duPSJfZG93biI+CiAgICAgIDxkaXYgaWQ9InRhYnNDb250ZW50IiBjbGFzcyQ9IltbX2NvbXB1dGVUYWJzQ29udGVudENsYXNzKHNjcm9sbGFibGUsIGZpdENvbnRhaW5lcildXSI+CiAgICAgICAgPGRpdiBpZD0ic2VsZWN0aW9uQmFyIiBjbGFzcyQ9IltbX2NvbXB1dGVTZWxlY3Rpb25CYXJDbGFzcyhub0JhciwgYWxpZ25Cb3R0b20pXV0iIG9uLXRyYW5zaXRpb25lbmQ9Il9vbkJhclRyYW5zaXRpb25FbmQiPjwvZGl2PgogICAgICAgIDxzbG90Pjwvc2xvdD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0icGFwZXItdGFiczpjaGV2cm9uLXJpZ2h0IiBjbGFzcyQ9IltbX2NvbXB1dGVTY3JvbGxCdXR0b25DbGFzcyhfcmlnaHRIaWRkZW4sIHNjcm9sbGFibGUsIGhpZGVTY3JvbGxCdXR0b25zKV1dIiBvbi11cD0iX29uU2Nyb2xsQnV0dG9uVXAiIG9uLWRvd249Il9vblJpZ2h0U2Nyb2xsQnV0dG9uRG93biIgdGFiaW5kZXg9Ii0xIj48L3BhcGVyLWljb24tYnV0dG9uPgpgLGlzOiJwYXBlci10YWJzIixiZWhhdmlvcnM6W1FzLE45XSxwcm9wZXJ0aWVzOntub2luazp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfbm9pbmtDaGFuZ2VkIn0sbm9CYXI6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sbm9TbGlkZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxzY3JvbGxhYmxlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGZpdENvbnRhaW5lcjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxkaXNhYmxlRHJhZzp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxoaWRlU2Nyb2xsQnV0dG9uczp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhbGlnbkJvdHRvbTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxzZWxlY3RhYmxlOnt0eXBlOlN0cmluZyx2YWx1ZToicGFwZXItdGFiIn0sYXV0b3NlbGVjdDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhdXRvc2VsZWN0RGVsYXk6e3R5cGU6TnVtYmVyLHZhbHVlOjB9LF9zdGVwOnt0eXBlOk51bWJlcix2YWx1ZToxMH0sX2hvbGREZWxheTp7dHlwZTpOdW1iZXIsdmFsdWU6MX0sX2xlZnRIaWRkZW46e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX3JpZ2h0SGlkZGVuOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9wcmV2aW91c1RhYjp7dHlwZTpPYmplY3R9fSxob3N0QXR0cmlidXRlczp7cm9sZToidGFibGlzdCJ9LGxpc3RlbmVyczp7Imlyb24tcmVzaXplIjoiX29uVGFiU2l6aW5nQ2hhbmdlZCIsImlyb24taXRlbXMtY2hhbmdlZCI6Il9vblRhYlNpemluZ0NoYW5nZWQiLCJpcm9uLXNlbGVjdCI6Il9vbklyb25TZWxlY3QiLCJpcm9uLWRlc2VsZWN0IjoiX29uSXJvbkRlc2VsZWN0In0sa2V5QmluZGluZ3M6eyJsZWZ0OmtleXVwIHJpZ2h0OmtleXVwIjoiX29uQXJyb3dLZXl1cCJ9LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9ob2xkSm9iPW51bGwsdGhpcy5fcGVuZGluZ0FjdGl2YXRpb25JdGVtPXZvaWQgMCx0aGlzLl9wZW5kaW5nQWN0aXZhdGlvblRpbWVvdXQ9dm9pZCAwLHRoaXMuX2JpbmREZWxheWVkQWN0aXZhdGlvbkhhbmRsZXI9dGhpcy5fZGVsYXllZEFjdGl2YXRpb25IYW5kbGVyLmJpbmQodGhpcyksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl9vbkJsdXJDYXB0dXJlLmJpbmQodGhpcyksITApfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuc2V0U2Nyb2xsRGlyZWN0aW9uKCJ5Iix0aGlzLiQudGFic0NvbnRhaW5lcil9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fY2FuY2VsUGVuZGluZ0FjdGl2YXRpb24oKX0sX25vaW5rQ2hhbmdlZDpmdW5jdGlvbihlKXt2YXIgdD16dCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKCJwYXBlci10YWIiKTt0LmZvckVhY2goZT90aGlzLl9zZXROb2lua0F0dHJpYnV0ZTp0aGlzLl9yZW1vdmVOb2lua0F0dHJpYnV0ZSl9LF9zZXROb2lua0F0dHJpYnV0ZTpmdW5jdGlvbihlKXtlLnNldEF0dHJpYnV0ZSgibm9pbmsiLCIiKX0sX3JlbW92ZU5vaW5rQXR0cmlidXRlOmZ1bmN0aW9uKGUpe2UucmVtb3ZlQXR0cmlidXRlKCJub2luayIpfSxfY29tcHV0ZVNjcm9sbEJ1dHRvbkNsYXNzOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4hdHx8cj8iaGlkZGVuIjplPyJub3QtdmlzaWJsZSI6IiJ9LF9jb21wdXRlVGFic0NvbnRlbnRDbGFzczpmdW5jdGlvbihlLHQpe3JldHVybiBlPyJzY3JvbGxhYmxlIisodD8iIGZpdC1jb250YWluZXIiOiIiKToiIGZpdC1jb250YWluZXIifSxfY29tcHV0ZVNlbGVjdGlvbkJhckNsYXNzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU/ImhpZGRlbiI6dD8iYWxpZ24tYm90dG9tIjoiIn0sX29uVGFiU2l6aW5nQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuZGVib3VuY2UoIl9vblRhYlNpemluZ0NoYW5nZWQiLGZ1bmN0aW9uKCl7dGhpcy5fc2Nyb2xsKCksdGhpcy5fdGFiQ2hhbmdlZCh0aGlzLnNlbGVjdGVkSXRlbSl9LDEwKX0sX29uSXJvblNlbGVjdDpmdW5jdGlvbihlKXt0aGlzLl90YWJDaGFuZ2VkKGUuZGV0YWlsLml0ZW0sdGhpcy5fcHJldmlvdXNUYWIpLHRoaXMuX3ByZXZpb3VzVGFiPWUuZGV0YWlsLml0ZW0sdGhpcy5jYW5jZWxEZWJvdW5jZXIoInRhYi1jaGFuZ2VkIil9LF9vbklyb25EZXNlbGVjdDpmdW5jdGlvbihlKXt0aGlzLmRlYm91bmNlKCJ0YWItY2hhbmdlZCIsZnVuY3Rpb24oKXt0aGlzLl90YWJDaGFuZ2VkKG51bGwsdGhpcy5fcHJldmlvdXNUYWIpLHRoaXMuX3ByZXZpb3VzVGFiPW51bGx9LDEpfSxfYWN0aXZhdGVIYW5kbGVyOmZ1bmN0aW9uKCl7dGhpcy5fY2FuY2VsUGVuZGluZ0FjdGl2YXRpb24oKSx5Xy5fYWN0aXZhdGVIYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sX3NjaGVkdWxlQWN0aXZhdGlvbjpmdW5jdGlvbihlLHQpe3RoaXMuX3BlbmRpbmdBY3RpdmF0aW9uSXRlbT1lLHRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uVGltZW91dD10aGlzLmFzeW5jKHRoaXMuX2JpbmREZWxheWVkQWN0aXZhdGlvbkhhbmRsZXIsdCl9LF9kZWxheWVkQWN0aXZhdGlvbkhhbmRsZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9wZW5kaW5nQWN0aXZhdGlvbkl0ZW07dGhpcy5fcGVuZGluZ0FjdGl2YXRpb25JdGVtPXZvaWQgMCx0aGlzLl9wZW5kaW5nQWN0aXZhdGlvblRpbWVvdXQ9dm9pZCAwLGUuZmlyZSh0aGlzLmFjdGl2YXRlRXZlbnQsbnVsbCx7YnViYmxlczohMCxjYW5jZWxhYmxlOiEwfSl9LF9jYW5jZWxQZW5kaW5nQWN0aXZhdGlvbjpmdW5jdGlvbigpe3RoaXMuX3BlbmRpbmdBY3RpdmF0aW9uVGltZW91dCE9PXZvaWQgMCYmKHRoaXMuY2FuY2VsQXN5bmModGhpcy5fcGVuZGluZ0FjdGl2YXRpb25UaW1lb3V0KSx0aGlzLl9wZW5kaW5nQWN0aXZhdGlvbkl0ZW09dm9pZCAwLHRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uVGltZW91dD12b2lkIDApfSxfb25BcnJvd0tleXVwOmZ1bmN0aW9uKGUpe3RoaXMuYXV0b3NlbGVjdCYmdGhpcy5fc2NoZWR1bGVBY3RpdmF0aW9uKHRoaXMuZm9jdXNlZEl0ZW0sdGhpcy5hdXRvc2VsZWN0RGVsYXkpfSxfb25CbHVyQ2FwdHVyZTpmdW5jdGlvbihlKXtlLnRhcmdldD09PXRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uSXRlbSYmdGhpcy5fY2FuY2VsUGVuZGluZ0FjdGl2YXRpb24oKX0sZ2V0IF90YWJDb250YWluZXJTY3JvbGxTaXplKCl7cmV0dXJuIE1hdGgubWF4KDAsdGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsV2lkdGgtdGhpcy4kLnRhYnNDb250YWluZXIub2Zmc2V0V2lkdGgpfSxfc2Nyb2xsOmZ1bmN0aW9uKGUsdCl7aWYoISF0aGlzLnNjcm9sbGFibGUpe3ZhciByPXQmJi10LmRkeHx8MDt0aGlzLl9hZmZlY3RTY3JvbGwocil9fSxfZG93bjpmdW5jdGlvbihlKXt0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5fZGVmYXVsdEZvY3VzQXN5bmMmJih0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX2RlZmF1bHRGb2N1c0FzeW5jKSx0aGlzLl9kZWZhdWx0Rm9jdXNBc3luYz1udWxsKX0sMSl9LF9hZmZlY3RTY3JvbGw6ZnVuY3Rpb24oZSl7dGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsTGVmdCs9ZTt2YXIgdD10aGlzLiQudGFic0NvbnRhaW5lci5zY3JvbGxMZWZ0O3RoaXMuX2xlZnRIaWRkZW49dD09PTAsdGhpcy5fcmlnaHRIaWRkZW49dD09PXRoaXMuX3RhYkNvbnRhaW5lclNjcm9sbFNpemV9LF9vbkxlZnRTY3JvbGxCdXR0b25Eb3duOmZ1bmN0aW9uKCl7dGhpcy5fc2Nyb2xsVG9MZWZ0KCksdGhpcy5faG9sZEpvYj1zZXRJbnRlcnZhbCh0aGlzLl9zY3JvbGxUb0xlZnQuYmluZCh0aGlzKSx0aGlzLl9ob2xkRGVsYXkpfSxfb25SaWdodFNjcm9sbEJ1dHRvbkRvd246ZnVuY3Rpb24oKXt0aGlzLl9zY3JvbGxUb1JpZ2h0KCksdGhpcy5faG9sZEpvYj1zZXRJbnRlcnZhbCh0aGlzLl9zY3JvbGxUb1JpZ2h0LmJpbmQodGhpcyksdGhpcy5faG9sZERlbGF5KX0sX29uU2Nyb2xsQnV0dG9uVXA6ZnVuY3Rpb24oKXtjbGVhckludGVydmFsKHRoaXMuX2hvbGRKb2IpLHRoaXMuX2hvbGRKb2I9bnVsbH0sX3Njcm9sbFRvTGVmdDpmdW5jdGlvbigpe3RoaXMuX2FmZmVjdFNjcm9sbCgtdGhpcy5fc3RlcCl9LF9zY3JvbGxUb1JpZ2h0OmZ1bmN0aW9uKCl7dGhpcy5fYWZmZWN0U2Nyb2xsKHRoaXMuX3N0ZXApfSxfdGFiQ2hhbmdlZDpmdW5jdGlvbihlLHQpe2lmKCFlKXt0aGlzLiQuc2VsZWN0aW9uQmFyLmNsYXNzTGlzdC5yZW1vdmUoImV4cGFuZCIpLHRoaXMuJC5zZWxlY3Rpb25CYXIuY2xhc3NMaXN0LnJlbW92ZSgiY29udHJhY3QiKSx0aGlzLl9wb3NpdGlvbkJhcigwLDApO3JldHVybn12YXIgcj10aGlzLiQudGFic0NvbnRlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj1yLndpZHRoLGk9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPWkubGVmdC1yLmxlZnQ7aWYodGhpcy5fcG9zPXt3aWR0aDp0aGlzLl9jYWxjUGVyY2VudChpLndpZHRoLG4pLGxlZnQ6dGhpcy5fY2FsY1BlcmNlbnQobyxuKX0sdGhpcy5ub1NsaWRlfHx0PT1udWxsKXt0aGlzLiQuc2VsZWN0aW9uQmFyLmNsYXNzTGlzdC5yZW1vdmUoImV4cGFuZCIpLHRoaXMuJC5zZWxlY3Rpb25CYXIuY2xhc3NMaXN0LnJlbW92ZSgiY29udHJhY3QiKSx0aGlzLl9wb3NpdGlvbkJhcih0aGlzLl9wb3Mud2lkdGgsdGhpcy5fcG9zLmxlZnQpO3JldHVybn12YXIgYT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHM9dGhpcy5pdGVtcy5pbmRleE9mKHQpLGw9dGhpcy5pdGVtcy5pbmRleE9mKGUpLGM9NTt0aGlzLiQuc2VsZWN0aW9uQmFyLmNsYXNzTGlzdC5hZGQoImV4cGFuZCIpO3ZhciB1PXM8bCxoPXRoaXMuX2lzUlRMO2gmJih1PSF1KSx1P3RoaXMuX3Bvc2l0aW9uQmFyKHRoaXMuX2NhbGNQZXJjZW50KGkubGVmdCtpLndpZHRoLWEubGVmdCxuKS1jLHRoaXMuX2xlZnQpOnRoaXMuX3Bvc2l0aW9uQmFyKHRoaXMuX2NhbGNQZXJjZW50KGEubGVmdCthLndpZHRoLWkubGVmdCxuKS1jLHRoaXMuX2NhbGNQZXJjZW50KG8sbikrYyksdGhpcy5zY3JvbGxhYmxlJiZ0aGlzLl9zY3JvbGxUb1NlbGVjdGVkSWZOZWVkZWQoaS53aWR0aCxvKX0sX3Njcm9sbFRvU2VsZWN0ZWRJZk5lZWRlZDpmdW5jdGlvbihlLHQpe3ZhciByPXQtdGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsTGVmdDtyPDA/dGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsTGVmdCs9cjoocis9ZS10aGlzLiQudGFic0NvbnRhaW5lci5vZmZzZXRXaWR0aCxyPjAmJih0aGlzLiQudGFic0NvbnRhaW5lci5zY3JvbGxMZWZ0Kz1yKSl9LF9jYWxjUGVyY2VudDpmdW5jdGlvbihlLHQpe3JldHVybiAxMDAqZS90fSxfcG9zaXRpb25CYXI6ZnVuY3Rpb24oZSx0KXtlPWV8fDAsdD10fHwwLHRoaXMuX3dpZHRoPWUsdGhpcy5fbGVmdD10LHRoaXMudHJhbnNmb3JtKCJ0cmFuc2xhdGVYKCIrdCsiJSkgc2NhbGVYKCIrZS8xMDArIikiLHRoaXMuJC5zZWxlY3Rpb25CYXIpfSxfb25CYXJUcmFuc2l0aW9uRW5kOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuJC5zZWxlY3Rpb25CYXIuY2xhc3NMaXN0O3QuY29udGFpbnMoImV4cGFuZCIpPyh0LnJlbW92ZSgiZXhwYW5kIiksdC5hZGQoImNvbnRyYWN0IiksdGhpcy5fcG9zaXRpb25CYXIodGhpcy5fcG9zLndpZHRoLHRoaXMuX3Bvcy5sZWZ0KSk6dC5jb250YWlucygiY29udHJhY3QiKSYmdC5yZW1vdmUoImNvbnRyYWN0Iil9fSk7dmFyIEp4PW51bGw7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvYXN0LWJhY2tncm91bmQtY29sb3IsICMzMjMyMzIpOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b2FzdC1jb2xvciwgI2YxZjFmMSk7CiAgICAgICAgbWluLWhlaWdodDogNDhweDsKICAgICAgICBtaW4td2lkdGg6IDI4OHB4OwogICAgICAgIHBhZGRpbmc6IDE2cHggMjRweDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDVweCAwIHJnYmEoMCwgMCwgMCwgMC4yNik7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIG1hcmdpbjogMTJweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gMC4zcywgb3BhY2l0eSAwLjNzOwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzLCBvcGFjaXR5IDAuM3M7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDBweCk7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMHB4KTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICB9CgogICAgICA6aG9zdCguY2Fwc3VsZSkgewogICAgICAgIGJvcmRlci1yYWRpdXM6IDI0cHg7CiAgICAgIH0KCiAgICAgIDpob3N0KC5maXQtYm90dG9tKSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDA7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICB9CgogICAgICA6aG9zdCgucGFwZXItdG9hc3Qtb3BlbikgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c3BhbiBpZD0ibGFiZWwiPnt7dGV4dH19PC9zcGFuPgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJwYXBlci10b2FzdCIsYmVoYXZpb3JzOltLeF0scHJvcGVydGllczp7Zml0SW50bzp7dHlwZTpPYmplY3QsdmFsdWU6d2luZG93LG9ic2VydmVyOiJfb25GaXRJbnRvQ2hhbmdlZCJ9LGhvcml6b250YWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6ImxlZnQifSx2ZXJ0aWNhbEFsaWduOnt0eXBlOlN0cmluZyx2YWx1ZToiYm90dG9tIn0sZHVyYXRpb246e3R5cGU6TnVtYmVyLHZhbHVlOjNlM30sdGV4dDp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LG5vQ2FuY2VsT25PdXRzaWRlQ2xpY2s6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH0sbm9BdXRvRm9jdXM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH19LGxpc3RlbmVyczp7dHJhbnNpdGlvbmVuZDoiX19vblRyYW5zaXRpb25FbmQifSxnZXQgdmlzaWJsZSgpe3JldHVybiBPYS5fd2FybigiYHZpc2libGVgIGlzIGRlcHJlY2F0ZWQsIHVzZSBgb3BlbmVkYCBpbnN0ZWFkIiksdGhpcy5vcGVuZWR9LGdldCBfY2FuQXV0b0Nsb3NlKCl7cmV0dXJuIHRoaXMuZHVyYXRpb24+MCYmdGhpcy5kdXJhdGlvbiE9PTEvMH0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX2F1dG9DbG9zZT1udWxsLGVjLnJlcXVlc3RBdmFpbGFiaWxpdHkoKX0sc2hvdzpmdW5jdGlvbihlKXt0eXBlb2YgZT09InN0cmluZyImJihlPXt0ZXh0OmV9KTtmb3IodmFyIHQgaW4gZSl0LmluZGV4T2YoIl8iKT09PTA/T2EuX3dhcm4oJ1RoZSBwcm9wZXJ0eSAiJyt0KyciIGlzIHByaXZhdGUgYW5kIHdhcyBub3Qgc2V0LicpOnQgaW4gdGhpcz90aGlzW3RdPWVbdF06T2EuX3dhcm4oJ1RoZSBwcm9wZXJ0eSAiJyt0KyciIGlzIG5vdCB2YWxpZC4nKTt0aGlzLm9wZW4oKX0saGlkZTpmdW5jdGlvbigpe3RoaXMuY2xvc2UoKX0sX19vblRyYW5zaXRpb25FbmQ6ZnVuY3Rpb24oZSl7ZSYmZS50YXJnZXQ9PT10aGlzJiZlLnByb3BlcnR5TmFtZT09PSJvcGFjaXR5IiYmKHRoaXMub3BlbmVkP3RoaXMuX2ZpbmlzaFJlbmRlck9wZW5lZCgpOnRoaXMuX2ZpbmlzaFJlbmRlckNsb3NlZCgpKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLl9hdXRvQ2xvc2UhPT1udWxsJiYodGhpcy5jYW5jZWxBc3luYyh0aGlzLl9hdXRvQ2xvc2UpLHRoaXMuX2F1dG9DbG9zZT1udWxsKSx0aGlzLm9wZW5lZD8oSngmJkp4IT09dGhpcyYmSnguY2xvc2UoKSxKeD10aGlzLHRoaXMuZmlyZSgiaXJvbi1hbm5vdW5jZSIse3RleHQ6dGhpcy50ZXh0fSksdGhpcy5fY2FuQXV0b0Nsb3NlJiYodGhpcy5fYXV0b0Nsb3NlPXRoaXMuYXN5bmModGhpcy5jbG9zZSx0aGlzLmR1cmF0aW9uKSkpOkp4PT09dGhpcyYmKEp4PW51bGwpLEltLl9vcGVuZWRDaGFuZ2VkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sX3JlbmRlck9wZW5lZDpmdW5jdGlvbigpe3RoaXMuY2xhc3NMaXN0LmFkZCgicGFwZXItdG9hc3Qtb3BlbiIpfSxfcmVuZGVyQ2xvc2VkOmZ1bmN0aW9uKCl7dGhpcy5jbGFzc0xpc3QucmVtb3ZlKCJwYXBlci10b2FzdC1vcGVuIil9LF9vbkZpdEludG9DaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMucG9zaXRpb25UYXJnZXQ9ZX19KTt2YXIgTzB0PVFgCgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICA6aG9zdCg6Zm9jdXMpIHsKICAgICAgICBvdXRsaW5lOm5vbmU7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtYmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBvcGFjaXR5OiAwLjQ7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciBsaW5lYXIgLjA4czsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1iYXItY29sb3IsICMwMDAwMDApOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1iYXI7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtYnV0dG9uIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAtM3B4OwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuNik7CiAgICAgICAgdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gbGluZWFyIC4wOHMsIGJhY2tncm91bmQtY29sb3IgbGluZWFyIC4wOHM7CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIGxpbmVhciAuMDhzLCBiYWNrZ3JvdW5kLWNvbG9yIGxpbmVhciAuMDhzOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi11bmNoZWNrZWQtYnV0dG9uLWNvbG9yLCB2YXIoLS1wYXBlci1ncmV5LTUwKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvZ2dsZS1idXR0b24tdW5jaGVja2VkLWJ1dHRvbjsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1idXR0b24uZHJhZ2dpbmcgewogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogbm9uZTsKICAgICAgICB0cmFuc2l0aW9uOiBub25lOwogICAgICB9CgogICAgICA6aG9zdChbY2hlY2tlZF06bm90KFtkaXNhYmxlZF0pKSAudG9nZ2xlLWJhciB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24tY2hlY2tlZC1iYXItY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1jaGVja2VkLWJhcjsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLnRvZ2dsZS1iYXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDA7CiAgICAgICAgb3BhY2l0eTogMC4xMjsKICAgICAgfQoKICAgICAgOmhvc3QoW2NoZWNrZWRdKSAudG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgxNnB4LCAwKTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxNnB4LCAwKTsKICAgICAgfQoKICAgICAgOmhvc3QoW2NoZWNrZWRdOm5vdChbZGlzYWJsZWRdKSkgLnRvZ2dsZS1idXR0b24gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24tY2hlY2tlZC1idXR0b24tY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1jaGVja2VkLWJ1dHRvbjsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLnRvZ2dsZS1idXR0b24gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNiZGJkYmQ7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1pbmsgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IC0xNHB4OwogICAgICAgIGxlZnQ6IC0xNHB4OwogICAgICAgIHJpZ2h0OiBhdXRvOwogICAgICAgIGJvdHRvbTogYXV0bzsKICAgICAgICB3aWR0aDogNDhweDsKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1pbmstY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1pbms7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjaGVja2VkXSkgLnRvZ2dsZS1pbmsgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWNoZWNrZWQtaW5rLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvZ2dsZS1idXR0b24tY2hlY2tlZC1pbms7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAzNnB4OwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgICAvKiBUaGUgdG9nZ2xlIGJ1dHRvbiBoYXMgYW4gYWJzb2x1dGUgcG9zaXRpb24gb2YgLTNweDsgVGhlIGV4dHJhIDFweAogICAgICAgIC8qIGFjY291bnRzIGZvciB0aGUgdG9nZ2xlIGJ1dHRvbiBzaGFkb3cgYm94LiAqLwogICAgICAgIG1hcmdpbjogNHB4IDFweDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1sYWJlbCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICAgIHBhZGRpbmctbGVmdDogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1sYWJlbC1zcGFjaW5nLCA4cHgpOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWxhYmVsLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgLyogaW52YWxpZCBzdGF0ZSAqLwogICAgICA6aG9zdChbaW52YWxpZF0pIC50b2dnbGUtYmFyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWludmFsaWQtYmFyLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwogICAgICB9CgogICAgICA6aG9zdChbaW52YWxpZF0pIC50b2dnbGUtYnV0dG9uIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWludmFsaWQtYnV0dG9uLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwogICAgICB9CgogICAgICA6aG9zdChbaW52YWxpZF0pIC50b2dnbGUtaW5rIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1pbnZhbGlkLWluay1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJ0b2dnbGUtY29udGFpbmVyIj4KICAgICAgPGRpdiBpZD0idG9nZ2xlQmFyIiBjbGFzcz0idG9nZ2xlLWJhciI+PC9kaXY+CiAgICAgIDxkaXYgaWQ9InRvZ2dsZUJ1dHRvbiIgY2xhc3M9InRvZ2dsZS1idXR0b24iPjwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0idG9nZ2xlLWxhYmVsIj48c2xvdD48L3Nsb3Q+PC9kaXY+CgogIGA7TzB0LnNldEF0dHJpYnV0ZSgic3RyaXAtd2hpdGVzcGFjZSIsIiIpO1l0KHtfdGVtcGxhdGU6TzB0LGlzOiJwYXBlci10b2dnbGUtYnV0dG9uIixiZWhhdmlvcnM6W1h4XSxob3N0QXR0cmlidXRlczp7cm9sZToiYnV0dG9uIiwiYXJpYS1wcmVzc2VkIjoiZmFsc2UiLHRhYmluZGV4OjB9LHByb3BlcnRpZXM6e30sbGlzdGVuZXJzOnt0cmFjazoiX29udHJhY2sifSxhdHRhY2hlZDpmdW5jdGlvbigpe0NtKHRoaXMsZnVuY3Rpb24oKXttXyh0aGlzLCJwYW4teSIpfSl9LF9vbnRyYWNrOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZGV0YWlsO3Quc3RhdGU9PT0ic3RhcnQiP3RoaXMuX3RyYWNrU3RhcnQodCk6dC5zdGF0ZT09PSJ0cmFjayI/dGhpcy5fdHJhY2tNb3ZlKHQpOnQuc3RhdGU9PT0iZW5kIiYmdGhpcy5fdHJhY2tFbmQodCl9LF90cmFja1N0YXJ0OmZ1bmN0aW9uKGUpe3RoaXMuX3dpZHRoPXRoaXMuJC50b2dnbGVCYXIub2Zmc2V0V2lkdGgvMix0aGlzLl90cmFja0NoZWNrZWQ9dGhpcy5jaGVja2VkLHRoaXMuJC50b2dnbGVCdXR0b24uY2xhc3NMaXN0LmFkZCgiZHJhZ2dpbmciKX0sX3RyYWNrTW92ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmR4O3RoaXMuX3g9TWF0aC5taW4odGhpcy5fd2lkdGgsTWF0aC5tYXgoMCx0aGlzLl90cmFja0NoZWNrZWQ/dGhpcy5fd2lkdGgrdDp0KSksdGhpcy50cmFuc2xhdGUzZCh0aGlzLl94KyJweCIsMCwwLHRoaXMuJC50b2dnbGVCdXR0b24pLHRoaXMuX3VzZXJBY3RpdmF0ZSh0aGlzLl94PnRoaXMuX3dpZHRoLzIpfSxfdHJhY2tFbmQ6ZnVuY3Rpb24oZSl7dGhpcy4kLnRvZ2dsZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJkcmFnZ2luZyIpLHRoaXMudHJhbnNmb3JtKCIiLHRoaXMuJC50b2dnbGVCdXR0b24pfSxfY3JlYXRlUmlwcGxlOmZ1bmN0aW9uKCl7dGhpcy5fcmlwcGxlQ29udGFpbmVyPXRoaXMuJC50b2dnbGVCdXR0b247dmFyIGU9c3UuX2NyZWF0ZVJpcHBsZSgpO3JldHVybiBlLmlkPSJpbmsiLGUuc2V0QXR0cmlidXRlKCJyZWNlbnRlcnMiLCIiKSxlLmNsYXNzTGlzdC5hZGQoImNpcmNsZSIsInRvZ2dsZS1pbmsiKSxlfX0pO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLWhlaWdodDogdmFyKC0tcGFwZXItdG9vbGJhci1oZWlnaHQsIDY0cHgpOwogICAgICAgIC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLXNtLWhlaWdodDogdmFyKC0tcGFwZXItdG9vbGJhci1zbS1oZWlnaHQsIDU2cHgpOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBoZWlnaHQ6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItdG9vbGJhci1oZWlnaHQpOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXRvb2xiYXItYmFja2dyb3VuZCwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b29sYmFyLWNvbG9yLCB2YXIoLS1kYXJrLXRoZW1lLXRleHQtY29sb3IpKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyOwogICAgICB9CgogICAgICA6aG9zdCguYW5pbWF0ZSkgewogICAgICAgIHRyYW5zaXRpb246IHZhcigtLXBhcGVyLXRvb2xiYXItdHJhbnNpdGlvbiwgaGVpZ2h0IDAuMThzIGVhc2UtaW4pOwogICAgICB9CgogICAgICA6aG9zdCgubWVkaXVtLXRhbGwpIHsKICAgICAgICBoZWlnaHQ6IGNhbGModmFyKC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLWhlaWdodCkgKiAyKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyLW1lZGl1bTsKICAgICAgfQoKICAgICAgOmhvc3QoLnRhbGwpIHsKICAgICAgICBoZWlnaHQ6IGNhbGModmFyKC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLWhlaWdodCkgKiAzKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyLXRhbGw7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItaGVpZ2h0KTsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyLWNvbnRlbnQ7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIFRPRE86IFdoZXJlIHNob3VsZCBtZWRpYSBxdWVyeSBicmVha3BvaW50cyBsaXZlIHNvIHRoZXkgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGVsZW1lbnRzPwogICAgICAgKi8KCiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA2MDBweCkgewogICAgICAgIDpob3N0IHsKICAgICAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLXNtLWhlaWdodCk7CiAgICAgICAgfQoKICAgICAgICA6aG9zdCgubWVkaXVtLXRhbGwpIHsKICAgICAgICAgIGhlaWdodDogY2FsYyh2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItc20taGVpZ2h0KSAqIDIpOwogICAgICAgIH0KCiAgICAgICAgOmhvc3QoLnRhbGwpIHsKICAgICAgICAgIGhlaWdodDogY2FsYyh2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItc20taGVpZ2h0KSAqIDMpOwogICAgICAgIH0KCiAgICAgICAgLnRvb2xiYXItdG9vbHMgewogICAgICAgICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItc20taGVpZ2h0KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgICN0b3BCYXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLyogbWlkZGxlIGJhciAqLwogICAgICAjbWlkZGxlQmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH0KCiAgICAgIDpob3N0KC50YWxsKSAjbWlkZGxlQmFyLAogICAgICA6aG9zdCgubWVkaXVtLXRhbGwpICNtaWRkbGVCYXIgewogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTsKICAgICAgfQoKICAgICAgLyogYm90dG9tIGJhciAqLwogICAgICAjYm90dG9tQmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1ha2UgZWxlbWVudHMgKGUuZy4gYnV0dG9ucykgcmVzcG9uZCB0byBtb3VzZS90b3VjaCBldmVudHMKICAgICAgICoKICAgICAgICogXGAudG9vbGJhci10b29sc1xgIGRpc2FibGVzIHRvdWNoIGV2ZW50cyBzbyBtdWx0aXBsZSB0b29sYmFycyBjYW4gc3RhY2sgYW5kIG5vdAogICAgICAgKiBhYnNvcmIgZXZlbnRzLiBBbGwgY2hpbGRyZW4gbXVzdCBoYXZlIHBvaW50ZXIgZXZlbnRzIHJlLWVuYWJsZWQgdG8gd29yayBhcwogICAgICAgKiBleHBlY3RlZC4KICAgICAgICovCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKCo6bm90KFtkaXNhYmxlZF0pKSB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKC50aXRsZSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4OwogICAgICB9CgogICAgICAudG9vbGJhci10b29scyA+IDo6c2xvdHRlZCgudGl0bGUpIHsKICAgICAgICBtYXJnaW4tbGVmdDogNTZweDsKICAgICAgfQoKICAgICAgLnRvb2xiYXItdG9vbHMgPiA6OnNsb3R0ZWQocGFwZXItaWNvbi1idXR0b24gKyAudGl0bGUpIHsKICAgICAgICBtYXJnaW4tbGVmdDogMDsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFRoZSAtLXBhcGVyLXRvb2xiYXItdGl0bGUgbWl4aW4gaXMgYXBwbGllZCBoZXJlIGluc3RlYWQgb2YgYWJvdmUgdG8KICAgICAgICogZml4IHRoZSBpc3N1ZSB3aXRoIG1hcmdpbi1sZWZ0IGJlaW5nIGlnbm9yZWQgZHVlIHRvIGNzcyBvcmRlcmluZy4KICAgICAgICovCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKC50aXRsZSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2xiYXItdGl0bGU7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKHBhcGVyLWljb24tYnV0dG9uW2ljb249bWVudV0pIHsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDI0cHg7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKC5maXQpIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiBhdXRvOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHdpZHRoOiBhdXRvOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgfQoKICAgICAgLyogVE9ETyhub21zKTogVW50aWwgd2UgaGF2ZSBhIGJldHRlciBzb2x1dGlvbiBmb3IgY2xhc3NlcyB0aGF0IGRvbid0IHVzZQogICAgICAgKiAvZGVlcC8gY3JlYXRlIG91ciBvd24uCiAgICAgICAqLwogICAgICAuc3RhcnQtanVzdGlmaWVkIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtc3RhcnQtanVzdGlmaWVkOwogICAgICB9CgogICAgICAuY2VudGVyLWp1c3RpZmllZCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlci1qdXN0aWZpZWQ7CiAgICAgIH0KCiAgICAgIC5lbmQtanVzdGlmaWVkIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZW5kLWp1c3RpZmllZDsKICAgICAgfQoKICAgICAgLmFyb3VuZC1qdXN0aWZpZWQgewogICAgICAgIEBhcHBseSAtLWxheW91dC1hcm91bmQtanVzdGlmaWVkOwogICAgICB9CgogICAgICAuanVzdGlmaWVkIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtanVzdGlmaWVkOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9InRvcEJhciIgY2xhc3NcJD0idG9vbGJhci10b29scyBbW19jb21wdXRlQmFyRXh0cmFDbGFzc2VzKGp1c3RpZnkpXV0iPgogICAgICA8c2xvdCBuYW1lPSJ0b3AiPjwvc2xvdD4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9Im1pZGRsZUJhciIgY2xhc3NcJD0idG9vbGJhci10b29scyBbW19jb21wdXRlQmFyRXh0cmFDbGFzc2VzKG1pZGRsZUp1c3RpZnkpXV0iPgogICAgICA8c2xvdCBuYW1lPSJtaWRkbGUiPjwvc2xvdD4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9ImJvdHRvbUJhciIgY2xhc3NcJD0idG9vbGJhci10b29scyBbW19jb21wdXRlQmFyRXh0cmFDbGFzc2VzKGJvdHRvbUp1c3RpZnkpXV0iPgogICAgICA8c2xvdCBuYW1lPSJib3R0b20iPjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci10b29sYmFyIixob3N0QXR0cmlidXRlczp7cm9sZToidG9vbGJhciJ9LHByb3BlcnRpZXM6e2JvdHRvbUp1c3RpZnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxqdXN0aWZ5Ont0eXBlOlN0cmluZyx2YWx1ZToiIn0sbWlkZGxlSnVzdGlmeTp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9fSxyZWFkeTpmdW5jdGlvbigpe2NvbnNvbGUud2Fybih0aGlzLmlzLCJpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIGFwcC1sYXlvdXQgaW5zdGVhZCEiKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlcj10aGlzLl9vYnNlcnZlKHRoaXMpLHRoaXMuX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5KCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXImJnRoaXMuX29ic2VydmVyLmRpc2Nvbm5lY3QoKX0sX29ic2VydmU6ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVBcmlhTGFiZWxsZWRCeSgpfS5iaW5kKHRoaXMpKTtyZXR1cm4gdC5vYnNlcnZlKGUse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSksdH0sX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5OmZ1bmN0aW9uKCl7Y2koKTtmb3IodmFyIGU9W10sdD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh6dCh0aGlzLnJvb3QpLnF1ZXJ5U2VsZWN0b3JBbGwoInNsb3QiKSkuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHp0KHRoaXMucm9vdCkucXVlcnlTZWxlY3RvckFsbCgiY29udGVudCIpKSkscixuPTA7cj10W25dO24rKylmb3IodmFyIGk9enQocikuZ2V0RGlzdHJpYnV0ZWROb2RlcygpLG8sYT0wO289aVthXTthKyspaWYoby5jbGFzc0xpc3QmJm8uY2xhc3NMaXN0LmNvbnRhaW5zKCJ0aXRsZSIpKWlmKG8uaWQpZS5wdXNoKG8uaWQpO2Vsc2V7dmFyIHM9InBhcGVyLXRvb2xiYXItbGFiZWwtIitNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMWU0KTtvLmlkPXMsZS5wdXNoKHMpfWUubGVuZ3RoPjAmJnRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsbGVkYnkiLGUuam9pbigiICIpKX0sX2NvbXB1dGVCYXJFeHRyYUNsYXNzZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/ZSsoZT09PSJqdXN0aWZpZWQiPyIiOiItanVzdGlmaWVkIik6IiJ9fSk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgei1pbmRleDogMTAwMjsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgfQoKICAgICAgI3Rvb2x0aXAgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItdG9vbHRpcC1iYWNrZ3JvdW5kLCAjNjE2MTYxKTsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItdG9vbHRpcC10ZXh0LWNvbG9yLCB3aGl0ZSk7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sdGlwOwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGtleUZyYW1lU2NhbGVVcCB7CiAgICAgICAgMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjApOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMga2V5RnJhbWVTY2FsZURvd24gewogICAgICAgIDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wKTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuMCk7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGtleUZyYW1lRmFkZUluT3BhY2l0eSB7CiAgICAgICAgMCUgewogICAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICBvcGFjaXR5OiB2YXIoLS1wYXBlci10b29sdGlwLW9wYWNpdHksIDAuOSk7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGtleUZyYW1lRmFkZU91dE9wYWNpdHkgewogICAgICAgIDAlIHsKICAgICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBrZXlGcmFtZVNsaWRlRG93bkluIHsKICAgICAgICAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTIwMDBweCk7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIH0KICAgICAgICAxMCUgewogICAgICAgICAgb3BhY2l0eTogMC4yOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAgICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMga2V5RnJhbWVTbGlkZURvd25PdXQgewogICAgICAgIDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAgICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICB9CiAgICAgICAgMTAlIHsKICAgICAgICAgIG9wYWNpdHk6IDAuMjsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTIwMDBweCk7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLmZhZGUtaW4tYW5pbWF0aW9uIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tcGFwZXItdG9vbHRpcC1kZWxheS1pbiwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiBrZXlGcmFtZUZhZGVJbk9wYWNpdHk7CiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTsKICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlLWluOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItdG9vbHRpcC1kdXJhdGlvbi1pbiwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2x0aXAtYW5pbWF0aW9uOwogICAgICB9CgogICAgICAuZmFkZS1vdXQtYW5pbWF0aW9uIHsKICAgICAgICBvcGFjaXR5OiB2YXIoLS1wYXBlci10b29sdGlwLW9wYWNpdHksIDAuOSk7CiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1wYXBlci10b29sdGlwLWRlbGF5LW91dCwgMG1zKTsKICAgICAgICBhbmltYXRpb24tbmFtZToga2V5RnJhbWVGYWRlT3V0T3BhY2l0eTsKICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAxOwogICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2UtaW47CiAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci10b29sdGlwLWR1cmF0aW9uLW91dCwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2x0aXAtYW5pbWF0aW9uOwogICAgICB9CgogICAgICAuc2NhbGUtdXAtYW5pbWF0aW9uIHsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDApOwogICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXRvb2x0aXAtZGVsYXktaW4sIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tbmFtZToga2V5RnJhbWVTY2FsZVVwOwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZS1pbjsKICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXRvb2x0aXAtZHVyYXRpb24taW4sIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkczsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sdGlwLWFuaW1hdGlvbjsKICAgICAgfQoKICAgICAgLnNjYWxlLWRvd24tYW5pbWF0aW9uIHsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXRvb2x0aXAtZGVsYXktb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGtleUZyYW1lU2NhbGVEb3duOwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZS1pbjsKICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXRvb2x0aXAtZHVyYXRpb24tb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9vbHRpcC1hbmltYXRpb247CiAgICAgIH0KCiAgICAgIC5zbGlkZS1kb3duLWFuaW1hdGlvbiB7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0yMDAwcHgpOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1wYXBlci10b29sdGlwLWRlbGF5LW91dCwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiBrZXlGcmFtZVNsaWRlRG93bkluOwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMCwgMC4wLCAwLjIsIDEpOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItdG9vbHRpcC1kdXJhdGlvbi1vdXQsIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkczsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sdGlwLWFuaW1hdGlvbjsKICAgICAgfQoKICAgICAgLnNsaWRlLWRvd24tYW5pbWF0aW9uLW91dCB7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXRvb2x0aXAtZGVsYXktb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGtleUZyYW1lU2xpZGVEb3duT3V0OwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAxLCAxKTsKICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXRvb2x0aXAtZHVyYXRpb24tb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9vbHRpcC1hbmltYXRpb247CiAgICAgIH0KCiAgICAgIC5jYW5jZWwtYW5pbWF0aW9uIHsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IC0zMHMgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLyogVGhhbmtzIElFIDEwLiAqLwoKICAgICAgLmhpZGRlbiB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9InRvb2x0aXAiIGNsYXNzPSJoaWRkZW4iPgogICAgICA8c2xvdD48L3Nsb3Q+CiAgICA8L2Rpdj4KYCxpczoicGFwZXItdG9vbHRpcCIsaG9zdEF0dHJpYnV0ZXM6e3JvbGU6InRvb2x0aXAiLHRhYmluZGV4Oi0xfSxwcm9wZXJ0aWVzOntmb3I6e3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfZmluZFRhcmdldCJ9LG1hbnVhbE1vZGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX21hbnVhbE1vZGVDaGFuZ2VkIn0scG9zaXRpb246e3R5cGU6U3RyaW5nLHZhbHVlOiJib3R0b20ifSxmaXRUb1Zpc2libGVCb3VuZHM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sb2Zmc2V0Ont0eXBlOk51bWJlcix2YWx1ZToxNH0sbWFyZ2luVG9wOnt0eXBlOk51bWJlcix2YWx1ZToxNH0sYW5pbWF0aW9uRGVsYXk6e3R5cGU6TnVtYmVyLHZhbHVlOjUwMCxvYnNlcnZlcjoiX2RlbGF5Q2hhbmdlIn0sYW5pbWF0aW9uRW50cnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxhbmltYXRpb25FeGl0Ont0eXBlOlN0cmluZyx2YWx1ZToiIn0sYW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybntlbnRyeTpbe25hbWU6ImZhZGUtaW4tYW5pbWF0aW9uIixub2RlOnRoaXMsdGltaW5nOntkZWxheTowfX1dLGV4aXQ6W3tuYW1lOiJmYWRlLW91dC1hbmltYXRpb24iLG5vZGU6dGhpc31dfX19LF9zaG93aW5nOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxsaXN0ZW5lcnM6e3dlYmtpdEFuaW1hdGlvbkVuZDoiX29uQW5pbWF0aW9uRW5kIn0sZ2V0IHRhcmdldCgpe3ZhciBlPXp0KHRoaXMpLnBhcmVudE5vZGUsdD16dCh0aGlzKS5nZXRPd25lclJvb3QoKSxyO3JldHVybiB0aGlzLmZvcj9yPXp0KHQpLnF1ZXJ5U2VsZWN0b3IoIiMiK3RoaXMuZm9yKTpyPWUubm9kZVR5cGU9PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERT90Lmhvc3Q6ZSxyfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2ZpbmRUYXJnZXQoKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLm1hbnVhbE1vZGV8fHRoaXMuX3JlbW92ZUxpc3RlbmVycygpfSxwbGF5QW5pbWF0aW9uOmZ1bmN0aW9uKGUpe2U9PT0iZW50cnkiP3RoaXMuc2hvdygpOmU9PT0iZXhpdCImJnRoaXMuaGlkZSgpfSxjYW5jZWxBbmltYXRpb246ZnVuY3Rpb24oKXt0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QuYWRkKCJjYW5jZWwtYW5pbWF0aW9uIil9LHNob3c6ZnVuY3Rpb24oKXtpZighdGhpcy5fc2hvd2luZyl7aWYoenQodGhpcykudGV4dENvbnRlbnQudHJpbSgpPT09IiIpe2Zvcih2YXIgZT0hMCx0PXp0KHRoaXMpLmdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKSxyPTA7cjx0Lmxlbmd0aDtyKyspaWYodFtyXS50ZXh0Q29udGVudC50cmltKCkhPT0iIil7ZT0hMTticmVha31pZihlKXJldHVybn10aGlzLl9zaG93aW5nPSEwLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5yZW1vdmUoImhpZGRlbiIpLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5yZW1vdmUoImNhbmNlbC1hbmltYXRpb24iKSx0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2dldEFuaW1hdGlvblR5cGUoImV4aXQiKSksdGhpcy51cGRhdGVQb3NpdGlvbigpLHRoaXMuX2FuaW1hdGlvblBsYXlpbmc9ITAsdGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LmFkZCh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJlbnRyeSIpKX19LGhpZGU6ZnVuY3Rpb24oKXtpZighIXRoaXMuX3Nob3dpbmcpe2lmKHRoaXMuX2FuaW1hdGlvblBsYXlpbmcpe3RoaXMuX3Nob3dpbmc9ITEsdGhpcy5fY2FuY2VsQW5pbWF0aW9uKCk7cmV0dXJufWVsc2UgdGhpcy5fb25BbmltYXRpb25GaW5pc2goKTt0aGlzLl9zaG93aW5nPSExLHRoaXMuX2FuaW1hdGlvblBsYXlpbmc9ITB9fSx1cGRhdGVQb3NpdGlvbjpmdW5jdGlvbigpe2lmKCEoIXRoaXMuX3RhcmdldHx8IXRoaXMub2Zmc2V0UGFyZW50KSl7dmFyIGU9dGhpcy5vZmZzZXQ7dGhpcy5tYXJnaW5Ub3AhPTE0JiZ0aGlzLm9mZnNldD09MTQmJihlPXRoaXMubWFyZ2luVG9wKTt2YXIgdD10aGlzLm9mZnNldFBhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPXRoaXMuX3RhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT0oci53aWR0aC1uLndpZHRoKS8yLG89KHIuaGVpZ2h0LW4uaGVpZ2h0KS8yLGE9ci5sZWZ0LXQubGVmdCxzPXIudG9wLXQudG9wLGwsYztzd2l0Y2godGhpcy5wb3NpdGlvbil7Y2FzZSJ0b3AiOmw9YStpLGM9cy1uLmhlaWdodC1lO2JyZWFrO2Nhc2UiYm90dG9tIjpsPWEraSxjPXMrci5oZWlnaHQrZTticmVhaztjYXNlImxlZnQiOmw9YS1uLndpZHRoLWUsYz1zK287YnJlYWs7Y2FzZSJyaWdodCI6bD1hK3Iud2lkdGgrZSxjPXMrbzticmVha310aGlzLmZpdFRvVmlzaWJsZUJvdW5kcz8odC5sZWZ0K2wrbi53aWR0aD53aW5kb3cuaW5uZXJXaWR0aD8odGhpcy5zdHlsZS5yaWdodD0iMHB4Iix0aGlzLnN0eWxlLmxlZnQ9ImF1dG8iKToodGhpcy5zdHlsZS5sZWZ0PU1hdGgubWF4KDAsbCkrInB4Iix0aGlzLnN0eWxlLnJpZ2h0PSJhdXRvIiksdC50b3ArYytuLmhlaWdodD53aW5kb3cuaW5uZXJIZWlnaHQ/KHRoaXMuc3R5bGUuYm90dG9tPXQuaGVpZ2h0LXMrZSsicHgiLHRoaXMuc3R5bGUudG9wPSJhdXRvIik6KHRoaXMuc3R5bGUudG9wPU1hdGgubWF4KC10LnRvcCxjKSsicHgiLHRoaXMuc3R5bGUuYm90dG9tPSJhdXRvIikpOih0aGlzLnN0eWxlLmxlZnQ9bCsicHgiLHRoaXMuc3R5bGUudG9wPWMrInB4Iil9fSxfYWRkTGlzdGVuZXJzOmZ1bmN0aW9uKCl7dGhpcy5fdGFyZ2V0JiYodGhpcy5saXN0ZW4odGhpcy5fdGFyZ2V0LCJtb3VzZWVudGVyIiwic2hvdyIpLHRoaXMubGlzdGVuKHRoaXMuX3RhcmdldCwiZm9jdXMiLCJzaG93IiksdGhpcy5saXN0ZW4odGhpcy5fdGFyZ2V0LCJtb3VzZWxlYXZlIiwiaGlkZSIpLHRoaXMubGlzdGVuKHRoaXMuX3RhcmdldCwiYmx1ciIsImhpZGUiKSx0aGlzLmxpc3Rlbih0aGlzLl90YXJnZXQsInRhcCIsImhpZGUiKSksdGhpcy5saXN0ZW4odGhpcy4kLnRvb2x0aXAsImFuaW1hdGlvbmVuZCIsIl9vbkFuaW1hdGlvbkVuZCIpLHRoaXMubGlzdGVuKHRoaXMsIm1vdXNlZW50ZXIiLCJoaWRlIil9LF9maW5kVGFyZ2V0OmZ1bmN0aW9uKCl7dGhpcy5tYW51YWxNb2RlfHx0aGlzLl9yZW1vdmVMaXN0ZW5lcnMoKSx0aGlzLl90YXJnZXQ9dGhpcy50YXJnZXQsdGhpcy5tYW51YWxNb2RlfHx0aGlzLl9hZGRMaXN0ZW5lcnMoKX0sX2RlbGF5Q2hhbmdlOmZ1bmN0aW9uKGUpe2UhPT01MDAmJnRoaXMudXBkYXRlU3R5bGVzKHsiLS1wYXBlci10b29sdGlwLWRlbGF5LWluIjplKyJtcyJ9KX0sX21hbnVhbE1vZGVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5tYW51YWxNb2RlP3RoaXMuX3JlbW92ZUxpc3RlbmVycygpOnRoaXMuX2FkZExpc3RlbmVycygpfSxfY2FuY2VsQW5pbWF0aW9uOmZ1bmN0aW9uKCl7dGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJlbnRyeSIpKSx0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2dldEFuaW1hdGlvblR5cGUoImV4aXQiKSksdGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSgiY2FuY2VsLWFuaW1hdGlvbiIpLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpfSxfb25BbmltYXRpb25GaW5pc2g6ZnVuY3Rpb24oKXt0aGlzLl9zaG93aW5nJiYodGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJlbnRyeSIpKSx0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKCJjYW5jZWwtYW5pbWF0aW9uIiksdGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LmFkZCh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJleGl0IikpKX0sX29uQW5pbWF0aW9uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fYW5pbWF0aW9uUGxheWluZz0hMSx0aGlzLl9zaG93aW5nfHwodGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJleGl0IikpLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpKX0sX2dldEFuaW1hdGlvblR5cGU6ZnVuY3Rpb24oZSl7aWYoZT09PSJlbnRyeSImJnRoaXMuYW5pbWF0aW9uRW50cnkhPT0iIilyZXR1cm4gdGhpcy5hbmltYXRpb25FbnRyeTtpZihlPT09ImV4aXQiJiZ0aGlzLmFuaW1hdGlvbkV4aXQhPT0iIilyZXR1cm4gdGhpcy5hbmltYXRpb25FeGl0O2lmKHRoaXMuYW5pbWF0aW9uQ29uZmlnW2VdJiZ0eXBlb2YgdGhpcy5hbmltYXRpb25Db25maWdbZV1bMF0ubmFtZT09InN0cmluZyIpe2lmKHRoaXMuYW5pbWF0aW9uQ29uZmlnW2VdWzBdLnRpbWluZyYmdGhpcy5hbmltYXRpb25Db25maWdbZV1bMF0udGltaW5nLmRlbGF5JiZ0aGlzLmFuaW1hdGlvbkNvbmZpZ1tlXVswXS50aW1pbmcuZGVsYXkhPT0wKXt2YXIgdD10aGlzLmFuaW1hdGlvbkNvbmZpZ1tlXVswXS50aW1pbmcuZGVsYXk7ZT09PSJlbnRyeSI/dGhpcy51cGRhdGVTdHlsZXMoeyItLXBhcGVyLXRvb2x0aXAtZGVsYXktaW4iOnQrIm1zIn0pOmU9PT0iZXhpdCImJnRoaXMudXBkYXRlU3R5bGVzKHsiLS1wYXBlci10b29sdGlwLWRlbGF5LW91dCI6dCsibXMifSl9cmV0dXJuIHRoaXMuYW5pbWF0aW9uQ29uZmlnW2VdWzBdLm5hbWV9fSxfcmVtb3ZlTGlzdGVuZXJzOmZ1bmN0aW9uKCl7dGhpcy5fdGFyZ2V0JiYodGhpcy51bmxpc3Rlbih0aGlzLl90YXJnZXQsIm1vdXNlZW50ZXIiLCJzaG93IiksdGhpcy51bmxpc3Rlbih0aGlzLl90YXJnZXQsImZvY3VzIiwic2hvdyIpLHRoaXMudW5saXN0ZW4odGhpcy5fdGFyZ2V0LCJtb3VzZWxlYXZlIiwiaGlkZSIpLHRoaXMudW5saXN0ZW4odGhpcy5fdGFyZ2V0LCJibHVyIiwiaGlkZSIpLHRoaXMudW5saXN0ZW4odGhpcy5fdGFyZ2V0LCJ0YXAiLCJoaWRlIikpLHRoaXMudW5saXN0ZW4odGhpcy4kLnRvb2x0aXAsImFuaW1hdGlvbmVuZCIsIl9vbkFuaW1hdGlvbkVuZCIpLHRoaXMudW5saXN0ZW4odGhpcywibW91c2VlbnRlciIsImhpZGUiKX19KTt2YXIgcmI9RWUoT2UoKSwxKTt2YXIgbUU9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5saXN0ZW5lcj10fX0sRVc9bmV3IFNldCxPOT1uZXcgU2V0O3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIiwoKT0+e0VXLmZvckVhY2goZT0+ZS5saXN0ZW5lcigpKX0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJzdG9yYWdlIiwoKT0+e085LmZvckVhY2goZT0+ZS5saXN0ZW5lcigpKX0pO2Z1bmN0aW9uIGdFKGUpe2xldCB0PW5ldyBtRShlKTtyZXR1cm4gRVcuYWRkKHQpLHR9ZnVuY3Rpb24gVFcoZSl7bGV0IHQ9bmV3IG1FKGUpO3JldHVybiBPOS5hZGQodCksdH1mdW5jdGlvbiBDVygpe085LmZvckVhY2goZT0+ZS5saXN0ZW5lcigpKX1mdW5jdGlvbiBBVyhlKXtFVy5kZWxldGUoZSl9ZnVuY3Rpb24gUFcoZSl7TzkuZGVsZXRlKGUpfXZhciBrVz17fTtacyhrVyx7Z2V0RmFrZUhhc2g6KCk9PkxXLHNldEZha2VIYXNoOigpPT5JVyxzZXRVc2VIYXNoOigpPT5YYmUsdXNlSGFzaDooKT0+ejl9KTt2YXIgejB0PSExO2Z1bmN0aW9uIFhiZShlKXt6MHQ9ZX1mdW5jdGlvbiB6OSgpe3JldHVybiB6MHR9dmFyIEYwdD0iIjtmdW5jdGlvbiBJVyhlKXtGMHQ9ZX1mdW5jdGlvbiBMVygpe3JldHVybiBGMHR9dmFyIFF4PSJfX3RhYl9fIixSVz17fTtmdW5jdGlvbiBCMHQoKXtyZXR1cm4gUld9ZnVuY3Rpb24gSDB0KGUpe1JXPWV9Z0UoKCk9PntSVz1lYih0YigpKX0pO2Z1bmN0aW9uIHRiKCl7cmV0dXJuIHo5KCk/d2luZG93LmxvY2F0aW9uLmhhc2guc2xpY2UoMSk6TFcoKX1mdW5jdGlvbiBlYihlKXtsZXQgdD17fTtyZXR1cm4gZS5zcGxpdCgiJiIpLmZvckVhY2gobj0+e2xldCBpPW4uc3BsaXQoIj0iKTtpLmxlbmd0aD09PTE/dFtReF09aVswXTppLmxlbmd0aD09PTImJih0W2RlY29kZVVSSUNvbXBvbmVudChpWzBdKV09ZGVjb2RlVVJJQ29tcG9uZW50KGlbMV0pKX0pLHR9ZnVuY3Rpb24gRjkoZSx0PSExKXtpZih6OSgpKWlmKHQpe2xldCByPW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO3IuaGFzaD1lLHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSh3aW5kb3cuaGlzdG9yeS5zdGF0ZSwiIixyLnRvU3RyaW5nKCkpfWVsc2Ugd2luZG93LmxvY2F0aW9uLmhhc2g9ZTtlbHNlIElXKGUpfWZ1bmN0aW9uIEI5KGUpe2xldCB0PSIiO2VbUXhdIT09dm9pZCAwJiYodCs9ZVtReF0pO2xldCByPU9iamVjdC5rZXlzKGUpLm1hcChuPT5bbixlW25dXSkuZmlsdGVyKG49Pm5bMF0hPT1ReCkubWFwKG49PmVuY29kZVVSSUNvbXBvbmVudChuWzBdKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KG5bMV0pKS5qb2luKCImIik7cmV0dXJuIHIubGVuZ3RoPjA/dCsiJiIrcjp0fWZ1bmN0aW9uIFYwdChlLHQ9ITEpe2xldCByPWViKHRiKCkpO2RlbGV0ZSByW2VdLEY5KEI5KHIpLHQpfXZhciBxMHQ9ImRpc2FtYmlndWF0b3IiLHtnZXQ6JGJlLHNldDpLYmUsZ2V0SW5pdGlhbGl6ZXI6dl8sZ2V0T2JzZXJ2ZXI6eF8sZGlzcG9zZUJpbmRpbmc6WmJlfT12RShlPT5lLGU9PmUpLHtnZXQ6SmJlLHNldDpRYmUsZ2V0SW5pdGlhbGl6ZXI6eHAsZ2V0T2JzZXJ2ZXI6YnAsZGlzcG9zZUJpbmRpbmc6dDJlfT12RShlPT5lPT09InRydWUiPyEwOmU9PT0iZmFsc2UiPyExOnZvaWQgMCxlPT5lLnRvU3RyaW5nKCkpLHtnZXQ6Tlcsc2V0OkRXLGdldEluaXRpYWxpemVyOl9FLGdldE9ic2VydmVyOnlFLGRpc3Bvc2VCaW5kaW5nOmUyZX09dkUoZT0+K2UsZT0+ZS50b1N0cmluZygpKSx7Z2V0OnIyZSxzZXQ6bjJlLGdldEluaXRpYWxpemVyOk9XLGdldE9ic2VydmVyOnpXLGRpc3Bvc2VCaW5kaW5nOmkyZX09dkUoZT0+SlNPTi5wYXJzZShhdG9iKGUpKSxlPT5idG9hKEpTT04uc3RyaW5naWZ5KGUpKSk7ZnVuY3Rpb24gdkUoZSx0KXtsZXQgcj1bXSxuPVtdO2Z1bmN0aW9uIGkoYyx1PXt9KXtsZXR7ZGVmYXVsdFZhbHVlOmgsdXNlTG9jYWxTdG9yYWdlOmY9ITF9PXUscD1mP3dpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShjKTplYih0YigpKVtjXTtyZXR1cm4gcD09bnVsbD9yYi5jbG9uZURlZXAoaCk6ZShwKX1mdW5jdGlvbiBvKGMsdSxoPXt9KXtsZXR7ZGVmYXVsdFZhbHVlOmYsdXNlTG9jYWxTdG9yYWdlOnA9ITEsdXNlTG9jYXRpb25SZXBsYWNlOmQ9ITF9PWgsZz10KHUpO2lmKHApd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGMsZyksQ1coKTtlbHNlIGlmKCFyYi5pc0VxdWFsKHUsaShjLHt1c2VMb2NhbFN0b3JhZ2U6cH0pKSlpZihyYi5pc0VxdWFsKHUsZikpVjB0KGMsZCk7ZWxzZXtsZXQgXz1lYih0YigpKTtfW2NdPWcsRjkoQjkoXyksZCl9fWZ1bmN0aW9uIGEoYyx1KXtsZXQgaD1pYSh7ZGVmYXVsdFZhbHVlOnUuZGVmYXVsdFZhbHVlLHBvbHltZXJQcm9wZXJ0eTpjLHVzZUxvY2FsU3RvcmFnZTohMX0sdSk7cmV0dXJuIGZ1bmN0aW9uKCl7bGV0IGY9VTB0KHRoaXMsYykscD0oKT0+e2xldCBfPWkoZixoKSx5PXRoaXNbaC5wb2x5bWVyUHJvcGVydHldO3JiLmlzRXF1YWwoXyx5KXx8KHRoaXNbaC5wb2x5bWVyUHJvcGVydHldPV8pfSxnPShoLnVzZUxvY2FsU3RvcmFnZT9UVzpnRSkoKCk9PnAoKSk7cmV0dXJuIGgudXNlTG9jYWxTdG9yYWdlP24ucHVzaChnKTpyLnB1c2goZykscCgpLHRoaXNbaC5wb2x5bWVyUHJvcGVydHldfX1mdW5jdGlvbiBzKCl7ci5mb3JFYWNoKGM9PkFXKGMpKSxuLmZvckVhY2goYz0+UFcoYykpfWZ1bmN0aW9uIGwoYyx1KXtsZXQgaD1pYSh7ZGVmYXVsdFZhbHVlOnUuZGVmYXVsdFZhbHVlLHBvbHltZXJQcm9wZXJ0eTpjLHVzZUxvY2FsU3RvcmFnZTohMX0sdSk7cmV0dXJuIGZ1bmN0aW9uKCl7bGV0IGY9VTB0KHRoaXMsYykscD10aGlzW2gucG9seW1lclByb3BlcnR5XTtvKGYscCxoKX19cmV0dXJue2dldDppLHNldDpvLGdldEluaXRpYWxpemVyOmEsZ2V0T2JzZXJ2ZXI6bCxkaXNwb3NlQmluZGluZzpzfX1mdW5jdGlvbiBvMmUoKXtsZXQgZT1uZXcgU2V0KFsiZXhhbXBsZXNQYXRoIiwiaGlkZU1vZGVsUGFuZTIiLCJtb2RlbE5hbWUxIiwibW9kZWxOYW1lMiIsImluZmVyZW5jZUFkZHJlc3MxIiwiaW5mZXJlbmNlQWRkcmVzczIiLCJtb2RlbFR5cGUiLCJtb2RlbFZlcnNpb24xIiwibW9kZWxWZXJzaW9uMiIsIm1vZGVsU2lnbmF0dXJlMSIsIm1vZGVsU2lnbmF0dXJlMiIsIm1heEV4YW1wbGVzIiwibGFiZWxWb2NhYlBhdGgiLCJtdWx0aUNsYXNzIiwic2VxdWVuY2VFeGFtcGxlcyIsIm1heENsYXNzZXNUb0Rpc3BsYXkiLCJzYW1wbGluZ09kZHMiLCJ1c2VQcmVkaWN0QXBpIiwicHJlZGljdElucHV0VGVuc29yIiwicHJlZGljdE91dHB1dFRlbnNvciJdKSx0PWViKHRiKCkpO2lmKHRbUXhdPT09IndoYXRpZiIpe2ZvcihsZXQgciBvZiBlKWlmKHIgaW4gdCl7bGV0IG49dFtyXTt0W2BwLndoYXRpZi4ke3J9YF09bn19RjkoQjkodCkpLEgwdCh0KX1mdW5jdGlvbiBVMHQoZSx0KXtsZXQgcj1lW3EwdF07cmV0dXJuKHI9PW51bGw/W3RdOltyLHRdKS5qb2luKCIuIil9dmFyIHhFPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3RhZ0ZpbHRlcj12XygidGFnRmlsdGVyIix7ZGVmYXVsdFZhbHVlOiIiLHVzZUxvY2FsU3RvcmFnZTohMSxwb2x5bWVyUHJvcGVydHk6Il90YWdGaWx0ZXIifSkuY2FsbCh0aGlzKSx0aGlzLl90YWdGaWx0ZXJPYnNlcnZlcj14XygidGFnRmlsdGVyIix7ZGVmYXVsdFZhbHVlOiIiLHVzZUxvY2FsU3RvcmFnZTohMSxwb2x5bWVyUHJvcGVydHk6Il90YWdGaWx0ZXIifSl9X2NvbXB1dGVUYWdGaWx0ZXIoKXtyZXR1cm4gdGhpcy5fdGFnRmlsdGVyfX07eEUudGVtcGxhdGU9UWAKICAgIDxwYXBlci1pbnB1dAogICAgICBuby1sYWJlbC1mbG9hdD0iIgogICAgICBsYWJlbD0iRmlsdGVyIHRhZ3MgKHJlZ3VsYXIgZXhwcmVzc2lvbnMgc3VwcG9ydGVkKSIKICAgICAgdmFsdWU9Int7X3RhZ0ZpbHRlcn19IgogICAgICBjbGFzcz0ic2VhcmNoLWlucHV0IgogICAgPgogICAgICA8aXJvbi1pY29uIHByZWZpeD0iIiBpY29uPSJzZWFyY2giIHNsb3Q9InByZWZpeCI+PC9pcm9uLWljb24+CiAgICA8L3BhcGVyLWlucHV0PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWFyZ2luOiAxMHB4IDVweCAxMHB4IDEwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITAsY29tcHV0ZWQ6Il9jb21wdXRlVGFnRmlsdGVyKF90YWdGaWx0ZXIpIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx4RS5wcm90b3R5cGUsInRhZ0ZpbHRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxvYnNlcnZlcjoiX3RhZ0ZpbHRlck9ic2VydmVyIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx4RS5wcm90b3R5cGUsIl90YWdGaWx0ZXIiLHZvaWQgMCk7eEU9RShbeXQoInRmLXRhZy1maWx0ZXJlciIpXSx4RSk7ZnVuY3Rpb24geXMoZSl7bGV0e21vZHVsZU5hbWU6dCxzdHlsZUNvbnRlbnQ6cn09ZSxuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRvbS1tb2R1bGUiKSxpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIiksbz1bXTtlLnN0eWxlRGVwZW5kZW5jaWVzJiZlLnN0eWxlRGVwZW5kZW5jaWVzLmZvckVhY2gocz0+e2xldCBsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7bC5zZXRBdHRyaWJ1dGUoImluY2x1ZGUiLHMpLG8ucHVzaChsKX0pO2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7T2JqZWN0LmFzc2lnbihhLHt0ZXh0Q29udGVudDpyfSksby5mb3JFYWNoKHM9PntpLmNvbnRlbnQuYXBwZW5kQ2hpbGQocyl9KSxpLmNvbnRlbnQuYXBwZW5kQ2hpbGQoYSksbi5hcHBlbmRDaGlsZChpKSxuLnJlZ2lzdGVyKHQpfXlzKHttb2R1bGVOYW1lOiJkYXNoYm9hcmQtc3R5bGUiLHN0eWxlRGVwZW5kZW5jaWVzOlsiaXJvbi1mbGV4Il0sc3R5bGVDb250ZW50OmAKICAgICAgOmhvc3QgewogICAgICAgIC0tc2lkZWJhci12ZXJ0aWNhbC1wYWRkaW5nOiAxNXB4OwogICAgICAgIC0tc2lkZWJhci1sZWZ0LXBhZGRpbmc6IDMwcHg7CiAgICAgIH0KCiAgICAgIFtzbG90PSdzaWRlYmFyJ10gewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIHBhZGRpbmc6IDVweCAwOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9CgogICAgICAuc2V0dGluZ3MgewogICAgICAgIG1pbi1oZWlnaHQ6IDUwcHg7CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgfQoKICAgICAgLnJ1bnMtc2VsZWN0b3IgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIG1pbi1oZWlnaHQ6IDIwMHB4OwogICAgICB9CgogICAgICB0Zi1ydW5zLXNlbGVjdG9yIHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgbGVmdDogdmFyKC0tc2lkZWJhci1sZWZ0LXBhZGRpbmcpOwogICAgICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwJSAtIHZhcigtLXNpZGViYXItdmVydGljYWwtcGFkZGluZykgKiAyKTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogMDsKICAgICAgfQoKICAgICAgLnNlYXJjaC1pbnB1dCB7CiAgICAgICAgbWFyZ2luOiAxMHB4IDVweCAwIDEwcHg7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLXNlY3Rpb24gewogICAgICAgIGJvcmRlci10b3A6IHNvbGlkIDFweCB2YXIoLS10Yi11aS1ib3JkZXIpOwogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgICBwYWRkaW5nOiB2YXIoLS1zaWRlYmFyLXZlcnRpY2FsLXBhZGRpbmcpIDAKICAgICAgICAgIHZhcigtLXNpZGViYXItdmVydGljYWwtcGFkZGluZykgdmFyKC0tc2lkZWJhci1sZWZ0LXBhZGRpbmcpOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uOmZpcnN0LW9mLXR5cGUgewogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgfQoKICAgICAgLnNpZGViYXItc2VjdGlvbiBwYXBlci1idXR0b24gewogICAgICAgIG1hcmdpbjogNXB4OwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uIHBhcGVyLWJ1dHRvbjpmaXJzdC1vZi10eXBlIHsKICAgICAgICBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uIHBhcGVyLWJ1dHRvbjpsYXN0LW9mLXR5cGUgewogICAgICAgIG1hcmdpbi1yaWdodDogMCAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uID4gOmZpcnN0LWNoaWxkIHsKICAgICAgICBtYXJnaW4tdG9wOiAwOwogICAgICAgIHBhZGRpbmctdG9wOiAwOwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uID4gOmxhc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLXNlY3Rpb24gaDMgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgbWFyZ2luOiAxMHB4IDAgNXB4OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICBwYXBlci1jaGVja2JveCB7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS10Yi11aS1kYXJrLWFjY2VudCk7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTsKICAgICAgICBmb250LXNpemU6IDE1cHg7CiAgICAgICAgbWFyZ2luLXRvcDogNXB4OwogICAgICB9CgogICAgICBhIHsKICAgICAgICBjb2xvcjogdmFyKC0tdGItbGluayk7CiAgICAgIH0KCiAgICAgIGE6dmlzaXRlZCB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWxpbmstdmlzaXRlZCk7CiAgICAgIH0KICBgfSk7ZnVuY3Rpb24gX28oZSl7cmV0dXJuIGNsYXNzIGV4dGVuZHMgZXtjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fbWF5YmVTZXREYXJrTW9kZSgpLHRoaXMub2JzZXJ2ZXI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIocj0+e3Iuc29tZShpPT5pLmF0dHJpYnV0ZU5hbWU9PT0iY2xhc3MiKSYmdGhpcy5fbWF5YmVTZXREYXJrTW9kZSgpfSksdGhpcy5vYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHkse2F0dHJpYnV0ZXM6ITB9KX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3ZhciByO3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksKHI9dGhpcy5vYnNlcnZlcik9PW51bGx8fHIuZGlzY29ubmVjdCgpfV9tYXliZVNldERhcmtNb2RlKCl7dGhpcy5jbGFzc0xpc3QudG9nZ2xlKCJkYXJrLW1vZGUiLGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCJkYXJrLW1vZGUiKSl9fX15cyh7bW9kdWxlTmFtZToic2Nyb2xsYmFyLXN0eWxlIixzdHlsZUNvbnRlbnQ6YAogICAgLnNjcm9sbGJhcjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICB9CgogICAgLnNjcm9sbGJhcjo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgICB3aWR0aDogMTBweDsKICAgIH0KCiAgICAuc2Nyb2xsYmFyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAwIDJweCByZ2JhKDAsIDAsIDAsIDAuMyk7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNTAwKTsKICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWdyZXktOTAwKTsKICAgIH0KICAgIC5zY3JvbGxiYXIgewogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgfQogIGB9KTt2YXIgQlc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtCVy5zZXRBdHRyaWJ1dGUoImlzIiwiY3VzdG9tLXN0eWxlIik7QlcudGV4dENvbnRlbnQ9YAogIDpyb290IHsKICAgIC0tdGItb3JhbmdlLXdlYWs6ICNmZmE3MjY7CiAgICAtLXRiLW9yYW5nZS1zdHJvbmc6ICNmNTdjMDA7CiAgICAtLXRiLW9yYW5nZS1kYXJrOiAjZGM3MzIwOwogICAgLS10Yi1ncmV5LWRhcmtlcjogI2UyZTJlMjsKICAgIC0tdGItZ3JleS1saWdodGVyOiAjZjNmM2YzOwogICAgLS10Yi11aS1kYXJrLWFjY2VudDogIzc1NzU3NTsKICAgIC0tdGItdWktbGlnaHQtYWNjZW50OiAjZTBlMGUwOwogICAgLS10Yi11aS1ib3JkZXI6IHZhcigtLXBhcGVyLWdyZXktMzAwKTsKICAgIC0tdGItZ3JhcGgtZmFkZWQ6ICNlMGQ0YjM7CiAgICAtLXRiLXNlY29uZGFyeS10ZXh0LWNvbG9yOiB2YXIoLS1wYXBlci1ncmV5LTgwMCk7CiAgICAtLXRiLXJhaXNlZC1idXR0b24tc2hhZG93LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAtLXByaW1hcnktYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKICAgIC0tc2Vjb25kYXJ5LWJhY2tncm91bmQtY29sb3I6ICNlOWU5ZTk7CiAgICAtLXRiLWxheW91dC1iYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1OwogICAgLS10Yi1saW5rOiAjMTk3NmQyOyAvKiBtYXRlcmlhbCBibHVlIDcwMC4gKi8KICAgIC0tdGItbGluay12aXNpdGVkOiAjN2IxZmEyOyAvKiBtYXRlcmlhbCBwdXJwbGUgNzAwLiAqLwogIH0KCiAgOnJvb3QgLmRhcmstbW9kZSB7CiAgICAtLXRiLXVpLWJvcmRlcjogdmFyKC0tcGFwZXItZ3JleS03MDApOwogICAgLS10Yi11aS1kYXJrLWFjY2VudDogdmFyKC0tcGFwZXItZ3JleS00MDApOwogICAgLS10Yi11aS1saWdodC1hY2NlbnQ6IHZhcigtLXBhcGVyLWdyZXktNjAwKTsKICAgIC0tdGItc2Vjb25kYXJ5LXRleHQtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNDAwKTsKICAgIC0tdGItcmFpc2VkLWJ1dHRvbi1zaGFkb3ctY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKICAgIC0tcHJpbWFyeS10ZXh0LWNvbG9yOiAjZmZmOwogICAgLS1zZWNvbmRhcnktdGV4dC1jb2xvcjogdmFyKC0tcGFwZXItZ3JleS00MDApOwogICAgLS1wcmltYXJ5LWJhY2tncm91bmQtY29sb3I6ICMzMDMwMzA7ICAvKiBtYXRlcmlhbCBncmV5IEE0MDAuICovCiAgICAtLXNlY29uZGFyeS1iYWNrZ3JvdW5kLWNvbG9yOiAjM2EzYTNhOwogICAgLS10Yi1sYXlvdXQtYmFja2dyb3VuZC1jb2xvcjogIzNhM2EzYTsKICAgIC0tdGItbGluazogIzQyYTVmNTsgLyogbWF0ZXJpYWwgYmx1ZSA0MDAuICovCiAgICAtLXRiLWxpbmstdmlzaXRlZDogI2JhNjhjODsgLyogbWF0ZXJpYWwgcHVycGxlIDMwMC4gKi8KICAgIC8qIE92ZXJyaWRlcyBwYXBlci1tYXRlcmlhbCAqLwogICAgLS1zaGFkb3ctZWxldmF0aW9uLTJkcF8tX2JveC1zaGFkb3c6IDAgMnB4IDJweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNCksCiAgICAgIDAgMXB4IDVweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiksCiAgICAgIDAgM3B4IDFweCAtMnB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKICB9CmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChCVyk7dmFyIEhXPWNsYXNzIGV4dGVuZHMgX28obXQpe307SFcudGVtcGxhdGU9UWAKICAgIDxkaXYgaWQ9InNpZGViYXIiPgogICAgICA8c2xvdCBuYW1lPSJzaWRlYmFyIj48L3Nsb3Q+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGlkPSJjZW50ZXIiPgogICAgICA8c2xvdCBuYW1lPSJjZW50ZXIiIGNsYXNzPSJzY29sbGJhciI+PC9zbG90PgogICAgPC9kaXY+CiAgICA8c3R5bGUgaW5jbHVkZT0ic2Nyb2xsYmFyLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICA6aG9zdCguZGFyay1tb2RlKSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc2Vjb25kYXJ5LWJhY2tncm91bmQtY29sb3IpOwogICAgICB9CgogICAgICAjc2lkZWJhciB7CiAgICAgICAgZmxleDogMCAwIHZhcigtLXRmLWRhc2hib2FyZC1sYXlvdXQtc2lkZWJhci1iYXNpcywgMjUlKTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgbWF4LXdpZHRoOiB2YXIoLS10Zi1kYXNoYm9hcmQtbGF5b3V0LXNpZGViYXItbWF4LXdpZHRoLCAzNTBweCk7CiAgICAgICAgbWluLXdpZHRoOiB2YXIoLS10Zi1kYXNoYm9hcmQtbGF5b3V0LXNpZGViYXItbWluLXdpZHRoLCAyNzBweCk7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgfQoKICAgICAgI2NlbnRlciB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICA6OnNsb3R0ZWQoW3Nsb3Q9J2NlbnRlciddKSB7CiAgICAgICAgY29udGFpbjogc3RyaWN0OwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CgogICAgICAudGYtZ3JhcGgtZGFzaGJvYXJkICNjZW50ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICNmZmY7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtIVz1FKFt5dCgidGYtZGFzaGJvYXJkLWxheW91dCIpXSxIVyk7dmFyIEcwdD0iVEYuVGVuc29yQm9hcmQuUGFnaW5hdGVkVmlldy5saW1pdCIsYTJlPTEyLFBoPW51bGwsVlc9bmV3IFNldDtmdW5jdGlvbiBVVyhlKXtWVy5hZGQoZSl9ZnVuY3Rpb24gcVcoZSl7VlcuZGVsZXRlKGUpfWZ1bmN0aW9uIEdXKCl7cmV0dXJuIFBoPT1udWxsJiYoUGg9TlcoRzB0LHt1c2VMb2NhbFN0b3JhZ2U6ITB9KSwoUGg9PW51bGx8fCFpc0Zpbml0ZShQaCl8fFBoPD0wKSYmKFBoPWEyZSkpLFBofWZ1bmN0aW9uIHMyZShlKXtpZihlIT09TWF0aC5mbG9vcihlKSl0aHJvdyBuZXcgRXJyb3IoYGxpbWl0IG11c3QgYmUgYW4gaW50ZWdlciwgYnV0IGdvdDogJHtlfWApO2lmKGU8PTApdGhyb3cgbmV3IEVycm9yKGBsaW1pdCBtdXN0IGJlIHBvc2l0aXZlLCBidXQgZ290OiAke2V9YCk7ZSE9PVBoJiYoUGg9ZSxEVyhHMHQsUGgse3VzZUxvY2FsU3RvcmFnZTohMH0pLFZXLmZvckVhY2godD0+e3QoKX0pKX12YXIgbmI9Y2xhc3MgZXh0ZW5kcyBtdHt1cGRhdGVBcnJheVByb3AodCxyLG4pe2xldCBpPXRoaXMuZ2V0KHQpLG89cjtpZighQXJyYXkuaXNBcnJheShvKSl0aHJvdyBSYW5nZUVycm9yKGBFeHBlY3RlZCBuZXcgdmFsdWUgdG8gJyR7dH0nIHRvIGJlIGFuIGFycmF5LmApO0FycmF5LmlzQXJyYXkoaSl8fChpPVtdLHRoaXMuc2V0KHQsaSkpO2xldCBhPW5ldyBTZXQoby5tYXAoKGMsdSk9Pm4oYyx1KSkpLHM9MCxsPTA7Zm9yKDtzPGkubGVuZ3RoJiZsPG8ubGVuZ3RoOyl7aWYoYS5oYXMobihpW3NdLHMpKSluKGlbc10scyk9PW4ob1tsXSxsKT90aGlzLnNldChgJHt0fS4ke3N9YCxvW2xdKTp0aGlzLnNwbGljZSh0LHMsMCxvW2xdKTtlbHNle3RoaXMuc3BsaWNlKHQscywxKTtjb250aW51ZX1sKysscysrfXM8aS5sZW5ndGgmJnRoaXMuc3BsaWNlKHQscyksbDxvLmxlbmd0aCYmdGhpcy5wdXNoKHQsLi4uby5zbGljZShsKSl9fTt2YXIgT2k9Y2xhc3MgZXh0ZW5kcyBuYntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5hcz0iaXRlbSIsdGhpcy5fY29udGVudEFjdGl2ZT0hMCx0aGlzLl9kb21Cb290c3RyYXBwZWQ9ITEsdGhpcy5fY3Rvcj1udWxsLHRoaXMuX3JlbmRlcmVkSXRlbXM9W10sdGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3Q9bmV3IE1hcCx0aGlzLl9scnVDYWNoZWRJdGVtcz1uZXcgTWFwLHRoaXMuX2NhY2hlU2l6ZT0xMCx0aGlzLl9nZXRJdGVtS2V5PXQ9PkpTT04uc3RyaW5naWZ5KHQpLHRoaXMuX2lzQ29ubmVjdGVkPSExfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9pc0Nvbm5lY3RlZD0hMH1zZXRDYWNoZVNpemUodCl7dGhpcy5fY2FjaGVTaXplPXR9c2V0R2V0SXRlbUtleSh0KXt0aGlzLl9nZXRJdGVtS2V5PXR9dXBkYXRlRG9tKHQpe3RoaXMudXBkYXRlQXJyYXlQcm9wKCJfcmVuZGVyZWRJdGVtcyIsdCx0aGlzLl9nZXRJdGVtS2V5KX1fZW5zdXJlVGVtcGxhdGl6ZWQoKXtpZighdGhpcy5pc0Nvbm5lY3RlZClyZXR1cm4hMTtpZighdGhpcy5fY3Rvcil7bGV0IHQ9dGhpcy5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpO3RoaXMuX2N0b3I9dGModCx0aGlzLHtwYXJlbnRNb2RlbDohMCxpbnN0YW5jZVByb3BzOntbdGhpcy5hc106ITAsYWN0aXZlOnRoaXMuX2NvbnRlbnRBY3RpdmV9LGZvcndhcmRIb3N0UHJvcDpmdW5jdGlvbihyLG4pe3RoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmZvckVhY2goaT0+e2kuZm9yd2FyZEhvc3RQcm9wKHIsbil9KX19KX1yZXR1cm4hMH1fYm9vdHN0cmFwRG9tKCl7aWYoIXRoaXMuX2Vuc3VyZVRlbXBsYXRpemVkKCl8fHRoaXMuX2RvbUJvb3RzdHJhcHBlZClyZXR1cm47bmV3IE11dGF0aW9uT2JzZXJ2ZXIocj0+e2ZvcihsZXQgbiBvZiByKWlmKG4udHlwZT09PSJjaGlsZExpc3QiKWZvcihsZXQgaSBvZiBBcnJheS5mcm9tKG4uYWRkZWROb2RlcykpaSBpbnN0YW5jZW9mIEVsZW1lbnQmJmkuc2V0QXR0cmlidXRlKCJzbG90IiwiaXRlbXMiKX0pLm9ic2VydmUodGhpcyx7Y2hpbGRMaXN0OiEwfSksQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKS5mb3JFYWNoKHI9Pnt0aGlzLnJlbW92ZUNoaWxkKHIpfSksdGhpcy5fbHJ1Q2FjaGVkSXRlbXMuY2xlYXIoKSx0aGlzLl9yZW5kZXJlZEl0ZW1zLmZvckVhY2goKHIsbik9PnRoaXMuX2luc2VydEl0ZW0ocixuKSksdGhpcy5fZG9tQm9vdHN0cmFwcGVkPSEwfV91cGRhdGVBY3RpdmUoKXshdGhpcy5fZG9tQm9vdHN0cmFwcGVkfHxBcnJheS5mcm9tKHRoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LnZhbHVlcygpKS5mb3JFYWNoKHQ9Pnt0Lm5vdGlmeVBhdGgoImFjdGl2ZSIsdGhpcy5fY29udGVudEFjdGl2ZSl9KX1fdXBkYXRlRG9tKHQpe2lmKCEhdGhpcy5fZG9tQm9vdHN0cmFwcGVkJiYhKHQucGF0aD09Il9yZW5kZXJlZEl0ZW1zInx8dC5wYXRoPT0iX3JlbmRlcmVkSXRlbXMubGVuZ3RoIikpaWYodC5wYXRoPT09Il9yZW5kZXJlZEl0ZW1zLnNwbGljZXMiKXQudmFsdWUuaW5kZXhTcGxpY2VzLmZvckVhY2gobj0+e2xldHtpbmRleDppLGFkZGVkQ291bnQ6byxvYmplY3Q6YSxyZW1vdmVkOnN9PW47cy5mb3JFYWNoKGw9Pnt0aGlzLl9yZW1vdmVJdGVtKGwsdGhpcy5jaGlsZHJlbltpXSl9KSxhLnNsaWNlKGksaStvKS5mb3JFYWNoKChsLGMpPT50aGlzLl9pbnNlcnRJdGVtKGwsaStjKSksdGhpcy5fdHJpbUNhY2hlKCl9KTtlbHNle2xldCByPXRoaXMuX2dldEl0ZW1LZXkodC52YWx1ZSk7dGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3QuaGFzKHIpP3RoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmdldChyKS5ub3RpZnlQYXRoKHRoaXMuYXMsdC52YWx1ZSk6Y29uc29sZS53YXJuKGBFeHBlY3RlZCAnJHtyfScgdG8gZXhpc3QgaW4gdGhlIERPTSBidXQgY291bGQgbm90IGZpbmQgb25lLmApfX1faW5zZXJ0SXRlbSh0LHIpe2lmKCF0aGlzLl9lbnN1cmVUZW1wbGF0aXplZCgpKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgdGVtcGxhdGl6ZWQgYmVmb3JlIGluc2VydGluZyBhbiBpdGVtIik7bGV0IG4saT10aGlzLl9nZXRJdGVtS2V5KHQpO2lmKHRoaXMuX2xydUNhY2hlZEl0ZW1zLmhhcyhpKSluPXRoaXMuX2xydUNhY2hlZEl0ZW1zLmdldChpKSx0aGlzLl9scnVDYWNoZWRJdGVtcy5kZWxldGUoaSksdGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3QuZ2V0KGkpLm5vdGlmeVBhdGgoImFjdGl2ZSIsdGhpcy5fY29udGVudEFjdGl2ZSk7ZWxzZXtsZXQgbz17W3RoaXMuYXNdOnQsYWN0aXZlOnRoaXMuX2NvbnRlbnRBY3RpdmV9LGE9bmV3IHRoaXMuX2N0b3Iobyk7bj1hLnJvb3QsdGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3Quc2V0KGksYSl9dGhpcy5jaGlsZHJlbltyXT90aGlzLmluc2VydEJlZm9yZShuLHRoaXMuY2hpbGRyZW5bcl0pOigobi5ub2RlVHlwZT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFP0FycmF5LmZyb20obi5jaGlsZHJlbik6W25dKS5mb3JFYWNoKGE9PmEuc2V0QXR0cmlidXRlKCJzbG90IiwiaXRlbXMiKSksdGhpcy5hcHBlbmRDaGlsZChuKSl9X3JlbW92ZUl0ZW0odCxyKXtyLnBhcmVudE5vZGUmJnIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChyKTtsZXQgbj10aGlzLl9nZXRJdGVtS2V5KHQpO3RoaXMuX2xydUNhY2hlZEl0ZW1zLnNldChuLHIpLHRoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmdldChuKS5ub3RpZnlQYXRoKCJhY3RpdmUiLCExKX1fdHJpbUNhY2hlKCl7Zm9yKDt0aGlzLl9scnVDYWNoZWRJdGVtcy5zaXplPnRoaXMuX2NhY2hlU2l6ZTspe2xldFt0XT10aGlzLl9scnVDYWNoZWRJdGVtcy5rZXlzKCk7dGhpcy5fbHJ1Q2FjaGVkSXRlbXMuZGVsZXRlKHQpLHRoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmRlbGV0ZSh0KX19fTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPaS5wcm90b3R5cGUsImFzIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxPaS5wcm90b3R5cGUsIml0ZW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sT2kucHJvdG90eXBlLCJfY29udGVudEFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT2kucHJvdG90eXBlLCJfZG9tQm9vdHN0cmFwcGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLE9pLnByb3RvdHlwZSwiX2N0b3IiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLE9pLnByb3RvdHlwZSwiX3JlbmRlcmVkSXRlbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT2kucHJvdG90eXBlLCJfcmVuZGVyZWRUZW1wbGF0ZUluc3QiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT2kucHJvdG90eXBlLCJfbHJ1Q2FjaGVkSXRlbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT2kucHJvdG90eXBlLCJfY2FjaGVTaXplIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLE9pLnByb3RvdHlwZSwiX2dldEl0ZW1LZXkiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLE9pLnByb3RvdHlwZSwiX2lzQ29ubmVjdGVkIix2b2lkIDApO0UoW0J0KCJfaXNDb25uZWN0ZWQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLE9pLnByb3RvdHlwZSwiX2Jvb3RzdHJhcERvbSIsbnVsbCk7RShbQnQoIl9jb250ZW50QWN0aXZlIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxPaS5wcm90b3R5cGUsIl91cGRhdGVBY3RpdmUiLG51bGwpO0UoW0J0KCJfcmVuZGVyZWRJdGVtcy4qIiwiX2RvbUJvb3RzdHJhcHBlZCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtPYmplY3RdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sT2kucHJvdG90eXBlLCJfdXBkYXRlRG9tIixudWxsKTtFKFtCdCgiX2NhY2hlU2l6ZSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sT2kucHJvdG90eXBlLCJfdHJpbUNhY2hlIixudWxsKTt2YXIgaG49Y2xhc3MgZXh0ZW5kcyBPaXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5kaXNhYmxlUGFnaW5hdGlvbj0hMSx0aGlzLmdldENhdGVnb3J5SXRlbUtleT10PT5KU09OLnN0cmluZ2lmeSh0KSx0aGlzLl9saW1pdD0xMix0aGlzLl9hY3RpdmVJbmRleD0wLHRoaXMuX3BhZ2VJbnB1dFJhd1ZhbHVlPSIiLHRoaXMuX3BhZ2VJbnB1dEZvY3VzZWQ9ITF9X2NvbXB1dGVDb3VudCgpe3JldHVybiB0aGlzLmNhdGVnb3J5Lml0ZW1zLmxlbmd0aH1nZXQgX2hhc011bHRpcGxlKCl7cmV0dXJuIHRoaXMuX2NvdW50PjF9X3RvZ2dsZVBhbmUoKXt0aGlzLm9wZW5lZD0hdGhpcy5vcGVuZWR9X2NoYW5nZUNvbnRlbnRBY3RpdmUodCl7dGhpcy5fY29udGVudEFjdGl2ZT10fV9vblBhbmVSZW5kZXJlZENoYW5nZWQodCxyKXt0JiZ0IT09ciYmdGhpcy4kLmlmUmVuZGVyZWQucmVuZGVyKCl9X2NvbXB1dGVQYW5lUmVuZGVyZWQodCl7cmV0dXJuISh0Lm1ldGFkYXRhLnR5cGU9PT1EYS5TRUFSQ0hfUkVTVUxUUyYmdC5uYW1lPT09IiIpfWdldCBfaXRlbXNSZW5kZXJlZCgpe3JldHVybiB0aGlzLl9wYW5lUmVuZGVyZWQmJnRoaXMub3BlbmVkfV9jb21wdXRlSXNTZWFyY2hSZXN1bHRzKHQpe3JldHVybiB0PT09RGEuU0VBUkNIX1JFU1VMVFN9X2NvbXB1dGVJc0ludmFsaWRTZWFyY2hSZXN1bHRzKHQpe3JldHVybiB0LnR5cGU9PT1EYS5TRUFSQ0hfUkVTVUxUUyYmIXQudmFsaWRSZWdleH1fY29tcHV0ZUlzVW5pdmVyc2FsU2VhcmNoUXVlcnkodCl7cmV0dXJuIHQudHlwZT09PURhLlNFQVJDSF9SRVNVTFRTJiZ0LnVuaXZlcnNhbFJlZ2V4fV9pc0NvbXBvc2l0ZVNlYXJjaCgpe2xldHt0eXBlOnQsY29tcG9zaXRlU2VhcmNoOnJ9PXRoaXMuY2F0ZWdvcnkubWV0YWRhdGE7cmV0dXJuIHImJnQ9PT1EYS5TRUFSQ0hfUkVTVUxUU31yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5vcGVuZWQ9dGhpcy5pbml0aWFsT3BlbmVkPT1udWxsPyEwOnRoaXMuaW5pdGlhbE9wZW5lZCx0aGlzLl9saW1pdExpc3RlbmVyPSgpPT57dGhpcy5zZXQoIl9saW1pdCIsR1coKSl9LFVXKHRoaXMuX2xpbWl0TGlzdGVuZXIpLHRoaXMuX2xpbWl0TGlzdGVuZXIoKX1kZXRhY2hlZCgpe3FXKHRoaXMuX2xpbWl0TGlzdGVuZXIpfV91cGRhdGVSZW5kZXJlZEl0ZW1zKCl7dmFyIHQ9dGhpcy5faXRlbXNSZW5kZXJlZCxyPXRoaXMuX2xpbWl0LG49dGhpcy5fYWN0aXZlSW5kZXgsaT10aGlzLmRpc2FibGVQYWdpbmF0aW9uO2lmKCF0KXJldHVybjtsZXQgbz1NYXRoLmZsb29yKG4vciksYT10aGlzLmNhdGVnb3J5Lml0ZW1zfHxbXSxzPWk/YTphLnNsaWNlKG8qciwobysxKSpyKTt0aGlzLnVwZGF0ZURvbShzKX1fbGltaXRDaGFuZ2VkKHQpe3RoaXMuc2V0Q2FjaGVTaXplKHQqMil9X2dldENhdGVnb3J5SXRlbUtleUNoYW5nZWQoKXt0aGlzLnNldEdldEl0ZW1LZXkodGhpcy5nZXRDYXRlZ29yeUl0ZW1LZXkpfWdldCBfY3VycmVudFBhZ2UoKXt2YXIgdD10aGlzLl9saW1pdCxyPXRoaXMuX2FjdGl2ZUluZGV4O3JldHVybiBNYXRoLmZsb29yKHIvdCkrMX1fY29tcHV0ZVBhZ2VDb3VudCh0LHIpe3JldHVybiB0aGlzLmNhdGVnb3J5P01hdGguY2VpbCh0aGlzLmNhdGVnb3J5Lml0ZW1zLmxlbmd0aC9yKTowfWdldCBfbXVsdGlwbGVQYWdlc0V4aXN0KCl7dmFyIHQ9dGhpcy5fcGFnZUNvdW50LHI9dGhpcy5kaXNhYmxlUGFnaW5hdGlvbjtyZXR1cm4hciYmdD4xfWdldCBfaGFzUHJldmlvdXNQYWdlKCl7dmFyIHQ9dGhpcy5fY3VycmVudFBhZ2U7cmV0dXJuIHQ+MX1nZXQgX2hhc05leHRQYWdlKCl7dmFyIHQ9dGhpcy5fY3VycmVudFBhZ2Uscj10aGlzLl9wYWdlQ291bnQ7cmV0dXJuIHQ8cn1fY29tcHV0ZUlucHV0V2lkdGgodCl7cmV0dXJuYGNhbGMoJHt0LnRvU3RyaW5nKCkubGVuZ3RofWVtICsgMjBweClgfV9zZXRBY3RpdmVJbmRleCh0KXtsZXQgcj0odGhpcy5jYXRlZ29yeS5pdGVtc3x8W10pLmxlbmd0aC0xO3Q+ciYmKHQ9ciksdDwwJiYodD0wKSx0aGlzLnNldCgiX2FjdGl2ZUluZGV4Iix0KX1fY2xhbXBBY3RpdmVJbmRleCgpe3RoaXMuX3NldEFjdGl2ZUluZGV4KHRoaXMuX2FjdGl2ZUluZGV4KX1fcGVyZm9ybVByZXZpb3VzUGFnZSgpe3RoaXMuX3NldEFjdGl2ZUluZGV4KHRoaXMuX2FjdGl2ZUluZGV4LXRoaXMuX2xpbWl0KX1fcGVyZm9ybU5leHRQYWdlKCl7dGhpcy5fc2V0QWN0aXZlSW5kZXgodGhpcy5fYWN0aXZlSW5kZXgrdGhpcy5fbGltaXQpfV9jb21wdXRlUGFnZUlucHV0VmFsdWUodCxyLG4pe3JldHVybiB0P3I6bi50b1N0cmluZygpfV9oYW5kbGVQYWdlSW5wdXRFdmVudCh0KXt0aGlzLnNldCgiX3BhZ2VJbnB1dFJhd1ZhbHVlIix0LnRhcmdldC52YWx1ZSk7bGV0IHI9TnVtYmVyKHQudGFyZ2V0LnZhbHVlfHxOYU4pO2lmKGlzTmFOKHIpKXJldHVybjtsZXQgbj1NYXRoLm1heCgxLE1hdGgubWluKHIsdGhpcy5fcGFnZUNvdW50KSktMTt0aGlzLl9zZXRBY3RpdmVJbmRleCh0aGlzLl9saW1pdCpuKX1faGFuZGxlUGFnZUNoYW5nZUV2ZW50KCl7dGhpcy5zZXQoIl9wYWdlSW5wdXRSYXdWYWx1ZSIsdGhpcy5fY3VycmVudFBhZ2UudG9TdHJpbmcoKSl9X2hhbmRsZVBhZ2VGb2N1c0V2ZW50KCl7dGhpcy5zZXQoIl9wYWdlSW5wdXRSYXdWYWx1ZSIsdGhpcy5fcGFnZUlucHV0VmFsdWUpLHRoaXMuc2V0KCJfcGFnZUlucHV0Rm9jdXNlZCIsITApfV9oYW5kbGVQYWdlQmx1ckV2ZW50KCl7dGhpcy5zZXQoIl9wYWdlSW5wdXRGb2N1c2VkIiwhMSl9X3VwZGF0ZVBhZ2VJbnB1dFZhbHVlKHQpe3ZhciBuO2xldCByPShuPXRoaXMuc2hhZG93Um9vdCk9PW51bGw/dm9pZCAwOm4ucXVlcnlTZWxlY3RvcigiI3BhZ2UtaW5wdXQgaW5wdXQiKTtyJiYoci52YWx1ZT10KX1fdXBkYXRlSW5wdXRXaWR0aCgpe3RoaXMudXBkYXRlU3R5bGVzKHsiLS10Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldy1wYWdlLWlucHV0LXdpZHRoIjp0aGlzLl9pbnB1dFdpZHRofSl9fTtobi50ZW1wbGF0ZT1RYAogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19wYW5lUmVuZGVyZWRdXSIgaWQ9ImlmUmVuZGVyZWQiPgogICAgICA8YnV0dG9uIGNsYXNzPSJoZWFkaW5nIiBvbi10YXA9Il90b2dnbGVQYW5lIiBvcGVuLWJ1dHRvbiQ9Iltbb3BlbmVkXV0iPgogICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNTZWFyY2hSZXN1bHRzXV0iPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzQ29tcG9zaXRlU2VhcmNoKGNhdGVnb3J5KV1dIj4KICAgICAgICAgICAgICA8c3Bhbj5UYWdzIG1hdGNoaW5nIG11bHRpcGxlIGV4cGVyaW1lbnRzPC9zcGFuPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNJbnZhbGlkU2VhcmNoUmVzdWx0c11dIj4KICAgICAgICAgICAgICAgIDxzcGFuCiAgICAgICAgICAgICAgICAgID4mbmJzcDs8c3Ryb25nPihtYWxmb3JtZWQgcmVndWxhciBleHByZXNzaW9uKTwvc3Ryb25nPjwvc3BhbgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2lzQ29tcG9zaXRlU2VhcmNoKGNhdGVnb3J5KV1dIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGlnaHQiPlRhZ3MgbWF0Y2hpbmcgLzwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY2F0ZWdvcnktbmFtZSIgdGl0bGUkPSJbW2NhdGVnb3J5Lm5hbWVdXSIKICAgICAgICAgICAgICAgID5bW2NhdGVnb3J5Lm5hbWVdXTwvc3BhbgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGlnaHQiPi88L3NwYW4+CiAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1VuaXZlcnNhbFNlYXJjaFF1ZXJ5XV0iPgogICAgICAgICAgICAgICAgPHNwYW4+IChhbGwgdGFncyk8L3NwYW4+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzSW52YWxpZFNlYXJjaFJlc3VsdHNdXSI+CiAgICAgICAgICAgICAgICA8c3Bhbj4gPHN0cm9uZz4obWFsZm9ybWVkIHJlZ3VsYXIgZXhwcmVzc2lvbik8L3N0cm9uZz48L3NwYW4+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9pc1NlYXJjaFJlc3VsdHNdXSI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjYXRlZ29yeS1uYW1lIiB0aXRsZSQ9IltbY2F0ZWdvcnkubmFtZV1dIgogICAgICAgICAgICAgID5bW2NhdGVnb3J5Lm5hbWVdXTwvc3BhbgogICAgICAgICAgICA+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0iY291bnQiPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZV1dIj4KICAgICAgICAgICAgPHNwYW4+W1tfY291bnRdXTwvc3Bhbj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8aXJvbi1pY29uIGljb249ImV4cGFuZC1tb3JlIiBjbGFzcz0iZXhwYW5kLWFycm93Ij48L2lyb24taWNvbj4KICAgICAgICA8L3NwYW4+CiAgICAgIDwvYnV0dG9uPgogICAgICA8IS0tIFRPRE8oc3RlcGhhbndsZWUpOiBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBGb3Igc29tZSByZWFzb24sCiAgICAgICAgdHJhbnNpdGlvbmVuZCB0aGF0IHRoZSBpcm9uLWNvbGxhcHNlIHJlbGllcyBvbiBzb21ldGltZXMgZG9lcyBub3QKICAgICAgICB0cmlnZ2VyIHdoZW4gcmVuZGVyaW5nIGEgY2hhcnQgd2l0aCBhIHNwaW5uZXIuIEEgdG95IGV4YW1wbGUgY2Fubm90CiAgICAgICAgcmVwcm9kdWNlIHRoaXMgYnVnLiAtLT4KICAgICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJbW29wZW5lZF1dIiBuby1hbmltYXRpb249IiI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudCI+CiAgICAgICAgICA8c3BhbiBpZD0idG9wLW9mLWNvbnRhaW5lciI+PC9zcGFuPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19tdWx0aXBsZVBhZ2VzRXhpc3RdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJpZy1wYWdlLWJ1dHRvbnMiIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAxMHB4OyI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgb24tdGFwPSJfcGVyZm9ybVByZXZpb3VzUGFnZSIKICAgICAgICAgICAgICAgIGRpc2FibGVkJD0iW1shX2hhc1ByZXZpb3VzUGFnZV1dIgogICAgICAgICAgICAgICAgPlByZXZpb3VzIHBhZ2U8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgICBvbi10YXA9Il9wZXJmb3JtTmV4dFBhZ2UiCiAgICAgICAgICAgICAgICBkaXNhYmxlZCQ9IltbIV9oYXNOZXh0UGFnZV1dIgogICAgICAgICAgICAgICAgPk5leHQgcGFnZTwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CgogICAgICAgICAgPGRpdiBpZD0iaXRlbXMiPgogICAgICAgICAgICA8c2xvdCBuYW1lPSJpdGVtcyI+PC9zbG90PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX211bHRpcGxlUGFnZXNFeGlzdF1dIj4KICAgICAgICAgICAgPGRpdiBpZD0iY29udHJvbHMtY29udGFpbmVyIj4KICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBhZGRpbmc6IDAgNXB4Ij4KICAgICAgICAgICAgICAgIFBhZ2UKICAgICAgICAgICAgICAgIDxwYXBlci1pbnB1dAogICAgICAgICAgICAgICAgICBpZD0icGFnZS1pbnB1dCIKICAgICAgICAgICAgICAgICAgdHlwZT0ibnVtYmVyIgogICAgICAgICAgICAgICAgICBuby1sYWJlbC1mbG9hdD0iIgogICAgICAgICAgICAgICAgICBtaW49IjEiCiAgICAgICAgICAgICAgICAgIG1heD0iW1tfcGFnZUNvdW50XV0iCiAgICAgICAgICAgICAgICAgIHZhbHVlPSJbW19wYWdlSW5wdXRWYWx1ZV1dIgogICAgICAgICAgICAgICAgICBvbi1pbnB1dD0iX2hhbmRsZVBhZ2VJbnB1dEV2ZW50IgogICAgICAgICAgICAgICAgICBvbi1jaGFuZ2U9Il9oYW5kbGVQYWdlQ2hhbmdlRXZlbnQiCiAgICAgICAgICAgICAgICAgIG9uLWZvY3VzPSJfaGFuZGxlUGFnZUZvY3VzRXZlbnQiCiAgICAgICAgICAgICAgICAgIG9uLWJsdXI9Il9oYW5kbGVQYWdlQmx1ckV2ZW50IgogICAgICAgICAgICAgICAgPjwvcGFwZXItaW5wdXQ+CiAgICAgICAgICAgICAgICBvZiBbW19wYWdlQ291bnRdXQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJpZy1wYWdlLWJ1dHRvbnMiIHN0eWxlPSJtYXJnaW4tdG9wOiAxMHB4OyI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgb24tdGFwPSJfcGVyZm9ybVByZXZpb3VzUGFnZSIKICAgICAgICAgICAgICAgIGRpc2FibGVkJD0iW1shX2hhc1ByZXZpb3VzUGFnZV1dIgogICAgICAgICAgICAgICAgPlByZXZpb3VzIHBhZ2U8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgICBvbi10YXA9Il9wZXJmb3JtTmV4dFBhZ2UiCiAgICAgICAgICAgICAgICBkaXNhYmxlZCQ9IltbIV9oYXNOZXh0UGFnZV1dIgogICAgICAgICAgICAgICAgPk5leHQgcGFnZTwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgIDwvdGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXJnaW46IDAgNXB4IDFweCAxMHB4OwogICAgICB9CgogICAgICA6aG9zdCg6Zmlyc3Qtb2YtdHlwZSkgewogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgIH0KCiAgICAgIDpob3N0KDpsYXN0LW9mLXR5cGUpIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICB9CgogICAgICAuaGVhZGluZyB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCA1cHggdmFyKC0tdGItcmFpc2VkLWJ1dHRvbi1zaGFkb3ctY29sb3IpOwogICAgICAgIHBhZGRpbmc6IDEwcHggMTVweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9CgogICAgICAuaGVhZGluZzo6LW1vei1mb2N1cy1pbm5lciB7CiAgICAgICAgcGFkZGluZzogMTBweCAxNXB4OwogICAgICB9CgogICAgICBbb3Blbi1idXR0b25dIHsKICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwICFpbXBvcnRhbnQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDAgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgW29wZW4tYnV0dG9uXSAuZXhwYW5kLWFycm93IHsKICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZVooMTgwZGVnKTsKICAgICAgfQoKICAgICAgLm5hbWUgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5saWdodCB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNTAwKTsKICAgICAgfQoKICAgICAgLmNhdGVnb3J5LW5hbWUgewogICAgICAgIHdoaXRlLXNwYWNlOiBwcmU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICBwYWRkaW5nOiAycHggMDsKICAgICAgfQoKICAgICAgLmNvdW50IHsKICAgICAgICBtYXJnaW46IDAgNXB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItZ3JleS01MDApOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBmbGV4OiBub25lOwogICAgICB9CgogICAgICAuaGVhZGluZzo6LW1vei1mb2N1cy1pbm5lciB7CiAgICAgICAgcGFkZGluZzogMTBweCAxNXB4OwogICAgICB9CgogICAgICAuY29udGVudCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXByaW1hcnktYmFja2dyb3VuZC1jb2xvcik7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMnB4OwogICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAycHg7CiAgICAgICAgYm9yZGVyLXRvcDogbm9uZTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZGVkZWRlOwogICAgICAgIHBhZGRpbmc6IDE1cHg7CiAgICAgIH0KCiAgICAgIC5saWdodCB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNTAwKTsKICAgICAgfQoKICAgICAgI2NvbnRyb2xzLWNvbnRhaW5lciB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgI2NvbnRyb2xzLWNvbnRhaW5lciBwYXBlci1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQoKICAgICAgLmJpZy1wYWdlLWJ1dHRvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIC5iaWctcGFnZS1idXR0b25zIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgICBjb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBmbGV4LWJhc2lzOiAwOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIH0KCiAgICAgIC5iaWctcGFnZS1idXR0b25zIHBhcGVyLWJ1dHRvbltkaXNhYmxlZF0gewogICAgICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICAgIH0KCiAgICAgIHNsb3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KCiAgICAgIDo6c2xvdHRlZChbc2xvdD0naXRlbXMnXSkgewogICAgICAgIC8qIFRvb2x0aXAgZm9yIGRlc2NyaXB0aW9ucyBhbmQgb3RoZXJzIGJyZWFrIHdpdGggbW9yZSBzdHJpY3Qgb25lcy4gKi8KICAgICAgICBjb250YWluOiBzdHlsZTsKICAgICAgfQoKICAgICAgI3BhZ2UtaW5wdXQgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB3aWR0aDogdmFyKC0tdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXctcGFnZS1pbnB1dC13aWR0aCwgMTAwJSk7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxobi5wcm90b3R5cGUsImNhdGVnb3J5Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0saG4ucHJvdG90eXBlLCJpbml0aWFsT3BlbmVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGhuLnByb3RvdHlwZSwib3BlbmVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0saG4ucHJvdG90eXBlLCJkaXNhYmxlUGFnaW5hdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixjb21wdXRlZDoiX2NvbXB1dGVDb3VudChjYXRlZ29yeS5pdGVtcy4qKSJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0saG4ucHJvdG90eXBlLCJfY291bnQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfY29tcHV0ZVBhbmVSZW5kZXJlZChjYXRlZ29yeSkiLG9ic2VydmVyOiJfb25QYW5lUmVuZGVyZWRDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0saG4ucHJvdG90eXBlLCJfcGFuZVJlbmRlcmVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX2NvbXB1dGVJc1NlYXJjaFJlc3VsdHMoY2F0ZWdvcnkubWV0YWRhdGEudHlwZSkifSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxobi5wcm90b3R5cGUsIl9pc1NlYXJjaFJlc3VsdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfY29tcHV0ZUlzSW52YWxpZFNlYXJjaFJlc3VsdHMoY2F0ZWdvcnkubWV0YWRhdGEpIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0saG4ucHJvdG90eXBlLCJfaXNJbnZhbGlkU2VhcmNoUmVzdWx0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlSXNVbml2ZXJzYWxTZWFyY2hRdWVyeShjYXRlZ29yeS5tZXRhZGF0YSkifSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxobi5wcm90b3R5cGUsIl9pc1VuaXZlcnNhbFNlYXJjaFF1ZXJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfZ2V0Q2F0ZWdvcnlJdGVtS2V5Q2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0saG4ucHJvdG90eXBlLCJnZXRDYXRlZ29yeUl0ZW1LZXkiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsb2JzZXJ2ZXI6Il9saW1pdENoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLGhuLnByb3RvdHlwZSwiX2xpbWl0Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLGhuLnByb3RvdHlwZSwiX2FjdGl2ZUluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLGNvbXB1dGVkOiJfY29tcHV0ZVBhZ2VDb3VudChjYXRlZ29yeS5pdGVtcy4qLCBfbGltaXQpIn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxobi5wcm90b3R5cGUsIl9wYWdlQ291bnQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlSW5wdXRXaWR0aChfcGFnZUNvdW50KSIsb2JzZXJ2ZXI6Il91cGRhdGVJbnB1dFdpZHRoIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxobi5wcm90b3R5cGUsIl9pbnB1dFdpZHRoIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVBhZ2VJbnB1dFZhbHVlKF9wYWdlSW5wdXRGb2N1c2VkLCBfcGFnZUlucHV0UmF3VmFsdWUsIF9jdXJyZW50UGFnZSkiLG9ic2VydmVyOiJfdXBkYXRlUGFnZUlucHV0VmFsdWUifSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGhuLnByb3RvdHlwZSwiX3BhZ2VJbnB1dFZhbHVlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGhuLnByb3RvdHlwZSwiX3BhZ2VJbnB1dFJhd1ZhbHVlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0saG4ucHJvdG90eXBlLCJfcGFnZUlucHV0Rm9jdXNlZCIsdm9pZCAwKTtFKFtSdCgiX2NvdW50IiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGhuLnByb3RvdHlwZSwiX2hhc011bHRpcGxlIixudWxsKTtFKFtCdCgib3BlbmVkIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW0Jvb2xlYW5dKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0saG4ucHJvdG90eXBlLCJfY2hhbmdlQ29udGVudEFjdGl2ZSIsbnVsbCk7RShbUnQoIm9wZW5lZCIsIl9wYW5lUmVuZGVyZWQiKSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0saG4ucHJvdG90eXBlLCJfaXRlbXNSZW5kZXJlZCIsbnVsbCk7RShbQnQoIl9pdGVtc1JlbmRlcmVkIiwiY2F0ZWdvcnkuaXRlbXMuKiIsIl9saW1pdCIsIl9hY3RpdmVJbmRleCIsIl9wYWdlQ291bnQiLCJkaXNhYmxlUGFnaW5hdGlvbiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0saG4ucHJvdG90eXBlLCJfdXBkYXRlUmVuZGVyZWRJdGVtcyIsbnVsbCk7RShbUnQoIl9saW1pdCIsIl9hY3RpdmVJbmRleCIpLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGhuLnByb3RvdHlwZSwiX2N1cnJlbnRQYWdlIixudWxsKTtFKFtSdCgiX3BhZ2VDb3VudCIsImRpc2FibGVQYWdpbmF0aW9uIiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGhuLnByb3RvdHlwZSwiX211bHRpcGxlUGFnZXNFeGlzdCIsbnVsbCk7RShbUnQoIl9jdXJyZW50UGFnZSIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxobi5wcm90b3R5cGUsIl9oYXNQcmV2aW91c1BhZ2UiLG51bGwpO0UoW1J0KCJfY3VycmVudFBhZ2UiLCJfcGFnZUNvdW50IiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGhuLnByb3RvdHlwZSwiX2hhc05leHRQYWdlIixudWxsKTtFKFtCdCgiY2F0ZWdvcnkuaXRlbXMuKiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0saG4ucHJvdG90eXBlLCJfY2xhbXBBY3RpdmVJbmRleCIsbnVsbCk7aG49RShbeXQoInRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3IildLGhuKTt2YXIgVzB0PUVlKE9lKCksMSk7dmFyIEg5PWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMubGlzdGVuZXI9dH19LHdwPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5yZXF1ZXN0TWFuYWdlcj1uZXcgQWUoMSksdGhpcy5fbGlzdGVuZXJzPW5ldyBTZXQsdGhpcy5pbml0aWFsaXplZD0hMX1yZWZyZXNoKCl7cmV0dXJuIHRoaXMubG9hZCgpLnRoZW4oKCk9Pnt0aGlzLmluaXRpYWxpemVkPSEwfSl9YWRkTGlzdGVuZXIodCl7bGV0IHI9bmV3IEg5KHQpO3JldHVybiB0aGlzLl9saXN0ZW5lcnMuYWRkKHIpLHJ9cmVtb3ZlTGlzdGVuZXJCeUtleSh0KXt0aGlzLl9saXN0ZW5lcnMuZGVsZXRlKHQpfWVtaXRDaGFuZ2UoKXt0aGlzLl9saXN0ZW5lcnMuZm9yRWFjaCh0PT57dHJ5e3QubGlzdGVuZXIoKX1jYXRjaChyKXt9fSl9fTt2YXIgVjk9Y2xhc3MgZXh0ZW5kcyB3cHtsb2FkKCl7bGV0IHQ9X2UoKS5lbnZpcm9ubWVudCgpO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyPT57bGV0IG49e2RhdGFMb2NhdGlvbjpyLmRhdGFfbG9jYXRpb24sd2luZG93VGl0bGU6ci53aW5kb3dfdGl0bGV9O3IuZXhwZXJpbWVudF9uYW1lIT09dm9pZCAwJiYobi5leHBlcmltZW50TmFtZT1yLmV4cGVyaW1lbnRfbmFtZSksci5leHBlcmltZW50X2Rlc2NyaXB0aW9uIT09dm9pZCAwJiYobi5leHBlcmltZW50RGVzY3JpcHRpb249ci5leHBlcmltZW50X2Rlc2NyaXB0aW9uKSxyLmNyZWF0aW9uX3RpbWUhPT12b2lkIDAmJihuLmNyZWF0aW9uVGltZT1yLmNyZWF0aW9uX3RpbWUpLCFXMHQuaXNFcXVhbCh0aGlzLmVudmlyb25tZW50LG4pJiYodGhpcy5lbnZpcm9ubWVudD1uLHRoaXMuZW1pdENoYW5nZSgpKX0pfWdldERhdGFMb2NhdGlvbigpe3JldHVybiB0aGlzLmVudmlyb25tZW50P3RoaXMuZW52aXJvbm1lbnQuZGF0YUxvY2F0aW9uOiIifWdldFdpbmRvd1RpdGxlKCl7cmV0dXJuIHRoaXMuZW52aXJvbm1lbnQ/dGhpcy5lbnZpcm9ubWVudC53aW5kb3dUaXRsZToiIn1nZXRFeHBlcmltZW50TmFtZSgpe3JldHVybiB0aGlzLmVudmlyb25tZW50P3RoaXMuZW52aXJvbm1lbnQuZXhwZXJpbWVudE5hbWU6IiJ9Z2V0RXhwZXJpbWVudERlc2NyaXB0aW9uKCl7cmV0dXJuIHRoaXMuZW52aXJvbm1lbnQ/dGhpcy5lbnZpcm9ubWVudC5leHBlcmltZW50RGVzY3JpcHRpb246IiJ9Z2V0Q3JlYXRpb25UaW1lKCl7cmV0dXJuIHRoaXMuZW52aXJvbm1lbnQ/dGhpcy5lbnZpcm9ubWVudC5jcmVhdGlvblRpbWU6bnVsbH19LGliPW5ldyBWOTt2YXIgWTB0PUVlKE9lKCksMSk7dmFyIFU5PWNsYXNzIGV4dGVuZHMgd3B7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3J1bnM9W119bG9hZCgpe2xldCB0PV9lKCkucnVucygpO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyPT57WTB0LmlzRXF1YWwodGhpcy5fcnVucyxyKXx8KHRoaXMuX3J1bnM9cix0aGlzLmVtaXRDaGFuZ2UoKSl9KX1nZXRSdW5zKCl7cmV0dXJuIHRoaXMuX3J1bnMuc2xpY2UoKX19LFNwPW5ldyBVOTt2YXIgVnI9e307WnMoVnIse0Zvcm1hdFNwZWNpZmllcjooKT0+R0UsYWN0aXZlOigpPT5WdnQsYXJjOigpPT5CU3QsYXJlYTooKT0+ejgsYXJlYVJhZGlhbDooKT0+byQsYXNjZW5kaW5nOigpPT5hYSxhdXRvVHlwZTooKT0+aWosYXhpc0JvdHRvbTooKT0+WjksYXhpc0xlZnQ6KCk9PmxiLGF4aXNSaWdodDooKT0+bV90LGF4aXNUb3A6KCk9PmRfdCxiaXNlY3Q6KCk9PnZzLGJpc2VjdExlZnQ6KCk9PiQwdCxiaXNlY3RSaWdodDooKT0+V1csYmlzZWN0b3I6KCk9Pm9iLGJsb2I6KCk9PkQxdCxicnVzaDooKT0+R0wsYnJ1c2hTZWxlY3Rpb246KCk9PlVMLGJydXNoWDooKT0+anZ0LGJydXNoWTooKT0+cUwsYnVmZmVyOigpPT5PMXQsY2hvcmQ6KCk9PiR2dCxjbGllbnRQb2ludDooKT0+T20sY2x1c3RlcjooKT0+V2J0LGNvbG9yOigpPT5yYyxjb250b3VyRGVuc2l0eTooKT0+ZzF0LGNvbnRvdXJzOigpPT5aTCxjcmVhdGU6KCk9PnN5dCxjcmVhdG9yOigpPT5ObSxjcm9zczooKT0+cTksY3N2OigpPT5GMXQsY3N2Rm9ybWF0OigpPT5iMXQsY3N2Rm9ybWF0Qm9keTooKT0+dzF0LGNzdkZvcm1hdFJvdzooKT0+TTF0LGNzdkZvcm1hdFJvd3M6KCk9PlMxdCxjc3ZGb3JtYXRWYWx1ZTooKT0+RTF0LGNzdlBhcnNlOigpPT5DYixjc3ZQYXJzZVJvd3M6KCk9PngxdCxjdWJlaGVsaXg6KCk9PmNhLGN1cnZlQmFzaXM6KCk9Plc4LGN1cnZlQmFzaXNDbG9zZWQ6KCk9PlFTdCxjdXJ2ZUJhc2lzT3BlbjooKT0+ZTN0LGN1cnZlQnVuZGxlOigpPT5uM3QsY3VydmVDYXJkaW5hbDooKT0+aTN0LGN1cnZlQ2FyZGluYWxDbG9zZWQ6KCk9Pm8zdCxjdXJ2ZUNhcmRpbmFsT3BlbjooKT0+YTN0LGN1cnZlQ2F0bXVsbFJvbTooKT0+bDN0LGN1cnZlQ2F0bXVsbFJvbUNsb3NlZDooKT0+dTN0LGN1cnZlQ2F0bXVsbFJvbU9wZW46KCk9PmYzdCxjdXJ2ZUxpbmVhcjooKT0+amgsY3VydmVMaW5lYXJDbG9zZWQ6KCk9PmQzdCxjdXJ2ZU1vbm90b25lWDooKT0+eDN0LGN1cnZlTW9ub3RvbmVZOigpPT5iM3QsY3VydmVOYXR1cmFsOigpPT5NM3QsY3VydmVTdGVwOigpPT5FM3QsY3VydmVTdGVwQWZ0ZXI6KCk9PkMzdCxjdXJ2ZVN0ZXBCZWZvcmU6KCk9PlQzdCxjdXN0b21FdmVudDooKT0+RXAsZGVzY2VuZGluZzooKT0+WjB0LGRldmlhdGlvbjooKT0+VzksZGlzcGF0Y2g6KCk9PnhzLGRyYWc6KCk9PnBiLGRyYWdEaXNhYmxlOigpPT5GbSxkcmFnRW5hYmxlOigpPT5CbSxkc3Y6KCk9Pm9qLGRzdkZvcm1hdDooKT0+WW0sZWFzZUJhY2s6KCk9Pk9MLGVhc2VCYWNrSW46KCk9Pk9ZLGVhc2VCYWNrSW5PdXQ6KCk9Pk9MLGVhc2VCYWNrT3V0OigpPT56WSxlYXNlQm91bmNlOigpPT5JXyxlYXNlQm91bmNlSW46KCk9PlJZLGVhc2VCb3VuY2VJbk91dDooKT0+TlksZWFzZUJvdW5jZU91dDooKT0+SV8sZWFzZUNpcmNsZTooKT0+TkwsZWFzZUNpcmNsZUluOigpPT5JWSxlYXNlQ2lyY2xlSW5PdXQ6KCk9Pk5MLGVhc2VDaXJjbGVPdXQ6KCk9PkxZLGVhc2VDdWJpYzooKT0+YnMsZWFzZUN1YmljSW46KCk9PnhZLGVhc2VDdWJpY0luT3V0OigpPT5icyxlYXNlQ3ViaWNPdXQ6KCk9PmJZLGVhc2VFbGFzdGljOigpPT56TCxlYXNlRWxhc3RpY0luOigpPT5IWSxlYXNlRWxhc3RpY0luT3V0OigpPT5WWSxlYXNlRWxhc3RpY091dDooKT0+ekwsZWFzZUV4cDooKT0+UkwsZWFzZUV4cEluOigpPT5BWSxlYXNlRXhwSW5PdXQ6KCk9PlJMLGVhc2VFeHBPdXQ6KCk9PlBZLGVhc2VMaW5lYXI6KCk9Pl9ZLGVhc2VQb2x5OigpPT5MTCxlYXNlUG9seUluOigpPT5TWSxlYXNlUG9seUluT3V0OigpPT5MTCxlYXNlUG9seU91dDooKT0+TVksZWFzZVF1YWQ6KCk9PklMLGVhc2VRdWFkSW46KCk9PnlZLGVhc2VRdWFkSW5PdXQ6KCk9PklMLGVhc2VRdWFkT3V0OigpPT52WSxlYXNlU2luOigpPT5rTCxlYXNlU2luSW46KCk9PkVZLGVhc2VTaW5Jbk91dDooKT0+a0wsZWFzZVNpbk91dDooKT0+VFksZW50cmllczooKT0+dTF0LGV2ZW50OigpPT5xdCxleHRlbnQ6KCk9PnNhLGZvcmNlQ2VudGVyOigpPT5XMXQsZm9yY2VDb2xsaWRlOigpPT51eHQsZm9yY2VMaW5rOigpPT5meHQsZm9yY2VNYW55Qm9keTooKT0+Z3h0LGZvcmNlUmFkaWFsOigpPT5feHQsZm9yY2VTaW11bGF0aW9uOigpPT5teHQsZm9yY2VYOigpPT55eHQsZm9yY2VZOigpPT52eHQsZm9ybWF0OigpPT54bixmb3JtYXREZWZhdWx0TG9jYWxlOigpPT5uayxmb3JtYXRMb2NhbGU6KCk9PmVrLGZvcm1hdFByZWZpeDooKT0+V0UsZm9ybWF0U3BlY2lmaWVyOigpPT5rcCxnZW9BbGJlcnM6KCk9PlVrLGdlb0FsYmVyc1VzYTooKT0+TGJ0LGdlb0FyZWE6KCk9Pk54dCxnZW9BemltdXRoYWxFcXVhbEFyZWE6KCk9PmtidCxnZW9BemltdXRoYWxFcXVhbEFyZWFSYXc6KCk9PkdrLGdlb0F6aW11dGhhbEVxdWlkaXN0YW50OigpPT5SYnQsZ2VvQXppbXV0aGFsRXF1aWRpc3RhbnRSYXc6KCk9PldrLGdlb0JvdW5kczooKT0+VXh0LGdlb0NlbnRyb2lkOigpPT5YeHQsZ2VvQ2lyY2xlOigpPT5ReHQsZ2VvQ2xpcEFudGltZXJpZGlhbjooKT0+ZTUsZ2VvQ2xpcENpcmNsZTooKT0+QWssZ2VvQ2xpcEV4dGVudDooKT0+cmJ0LGdlb0NsaXBSZWN0YW5nbGU6KCk9Pk9wLGdlb0NvbmljQ29uZm9ybWFsOigpPT5EYnQsZ2VvQ29uaWNDb25mb3JtYWxSYXc6KCk9PmpqLGdlb0NvbmljRXF1YWxBcmVhOigpPT5ZXyxnZW9Db25pY0VxdWFsQXJlYVJhdzooKT0+V2osZ2VvQ29uaWNFcXVpZGlzdGFudDooKT0+emJ0LGdlb0NvbmljRXF1aWRpc3RhbnRSYXc6KCk9PlhqLGdlb0NvbnRhaW5zOigpPT5jYnQsZ2VvRGlzdGFuY2U6KCk9Pk5iLGdlb0VxdWFsRWFydGg6KCk9PkZidCxnZW9FcXVhbEVhcnRoUmF3OigpPT5YayxnZW9FcXVpcmVjdGFuZ3VsYXI6KCk9Pk9idCxnZW9FcXVpcmVjdGFuZ3VsYXJSYXc6KCk9PlhfLGdlb0dub21vbmljOigpPT5CYnQsZ2VvR25vbW9uaWNSYXc6KCk9PiRrLGdlb0dyYXRpY3VsZTooKT0+TmssZ2VvR3JhdGljdWxlMTA6KCk9PmZidCxnZW9JZGVudGl0eTooKT0+SGJ0LGdlb0ludGVycG9sYXRlOigpPT5wYnQsZ2VvTGVuZ3RoOigpPT5rayxnZW9NZXJjYXRvcjooKT0+TmJ0LGdlb01lcmNhdG9yUmF3OigpPT5qXyxnZW9OYXR1cmFsRWFydGgxOigpPT5WYnQsZ2VvTmF0dXJhbEVhcnRoMVJhdzooKT0+S2ssZ2VvT3J0aG9ncmFwaGljOigpPT5VYnQsZ2VvT3J0aG9ncmFwaGljUmF3OigpPT5aayxnZW9QYXRoOigpPT5UYnQsZ2VvUHJvamVjdGlvbjooKT0+U2ksZ2VvUHJvamVjdGlvbk11dGF0b3I6KCk9Pmw1LGdlb1JvdGF0aW9uOigpPT53ayxnZW9TdGVyZW9ncmFwaGljOigpPT5xYnQsZ2VvU3RlcmVvZ3JhcGhpY1JhdzooKT0+SmssZ2VvU3RyZWFtOigpPT52byxnZW9UcmFuc2Zvcm06KCk9PkNidCxnZW9UcmFuc3ZlcnNlTWVyY2F0b3I6KCk9PkdidCxnZW9UcmFuc3ZlcnNlTWVyY2F0b3JSYXc6KCk9PlFrLGdyYXk6KCk9PlN5dCxoY2w6KCk9PmdiLGhpZXJhcmNoeTooKT0+cDUsaGlzdG9ncmFtOigpPT5yX3QsaHNsOigpPT5VbSxodG1sOigpPT5xMXQsaW1hZ2U6KCk9PkgxdCxpbnRlcnBvbGF0ZTooKT0+bmMsaW50ZXJwb2xhdGVBcnJheTooKT0+RHl0LGludGVycG9sYXRlQmFzaXM6KCk9PmxMLGludGVycG9sYXRlQmFzaXNDbG9zZWQ6KCk9PmNMLGludGVycG9sYXRlQmx1ZXM6KCk9PnhTdCxpbnRlcnBvbGF0ZUJyQkc6KCk9PlF3dCxpbnRlcnBvbGF0ZUJ1R246KCk9PmxTdCxpbnRlcnBvbGF0ZUJ1UHU6KCk9PmNTdCxpbnRlcnBvbGF0ZUNpdmlkaXM6KCk9PlRTdCxpbnRlcnBvbGF0ZUNvb2w6KCk9PlBTdCxpbnRlcnBvbGF0ZUN1YmVoZWxpeDooKT0+Snl0LGludGVycG9sYXRlQ3ViZWhlbGl4RGVmYXVsdDooKT0+Q1N0LGludGVycG9sYXRlQ3ViZWhlbGl4TG9uZzooKT0+VF8saW50ZXJwb2xhdGVEYXRlOigpPT5mTCxpbnRlcnBvbGF0ZURpc2NyZXRlOigpPT5PeXQsaW50ZXJwb2xhdGVHbkJ1OigpPT51U3QsaW50ZXJwb2xhdGVHcmVlbnM6KCk9PmJTdCxpbnRlcnBvbGF0ZUdyZXlzOigpPT53U3QsaW50ZXJwb2xhdGVIY2w6KCk9PiR5dCxpbnRlcnBvbGF0ZUhjbExvbmc6KCk9Pkt5dCxpbnRlcnBvbGF0ZUhzbDooKT0+WXl0LGludGVycG9sYXRlSHNsTG9uZzooKT0+anl0LGludGVycG9sYXRlSHVlOigpPT56eXQsaW50ZXJwb2xhdGVJbmZlcm5vOigpPT5EU3QsaW50ZXJwb2xhdGVMYWI6KCk9PkVfLGludGVycG9sYXRlTWFnbWE6KCk9Pk5TdCxpbnRlcnBvbGF0ZU51bWJlcjooKT0+emksaW50ZXJwb2xhdGVOdW1iZXJBcnJheTooKT0+eWIsaW50ZXJwb2xhdGVPYmplY3Q6KCk9PnBMLGludGVycG9sYXRlT3JSZDooKT0+aFN0LGludGVycG9sYXRlT3JhbmdlczooKT0+RVN0LGludGVycG9sYXRlUFJHbjooKT0+dFN0LGludGVycG9sYXRlUGlZRzooKT0+ZVN0LGludGVycG9sYXRlUGxhc21hOigpPT5PU3QsaW50ZXJwb2xhdGVQdUJ1OigpPT5wU3QsaW50ZXJwb2xhdGVQdUJ1R246KCk9PmZTdCxpbnRlcnBvbGF0ZVB1T3I6KCk9PnJTdCxpbnRlcnBvbGF0ZVB1UmQ6KCk9PmRTdCxpbnRlcnBvbGF0ZVB1cnBsZXM6KCk9PlNTdCxpbnRlcnBvbGF0ZVJhaW5ib3c6KCk9PklTdCxpbnRlcnBvbGF0ZVJkQnU6KCk9Pm5TdCxpbnRlcnBvbGF0ZVJkR3k6KCk9PmlTdCxpbnRlcnBvbGF0ZVJkUHU6KCk9Pm1TdCxpbnRlcnBvbGF0ZVJkWWxCdTooKT0+b1N0LGludGVycG9sYXRlUmRZbEduOigpPT5hU3QsaW50ZXJwb2xhdGVSZWRzOigpPT5NU3QsaW50ZXJwb2xhdGVSZ2I6KCk9PkdtLGludGVycG9sYXRlUmdiQmFzaXM6KCk9PnVMLGludGVycG9sYXRlUmdiQmFzaXNDbG9zZWQ6KCk9Pk55dCxpbnRlcnBvbGF0ZVJvdW5kOigpPT5kTCxpbnRlcnBvbGF0ZVNpbmVib3c6KCk9PkxTdCxpbnRlcnBvbGF0ZVNwZWN0cmFsOigpPT5zU3QsaW50ZXJwb2xhdGVTdHJpbmc6KCk9PnZiLGludGVycG9sYXRlVHJhbnNmb3JtQ3NzOigpPT5fTCxpbnRlcnBvbGF0ZVRyYW5zZm9ybVN2ZzooKT0+eUwsaW50ZXJwb2xhdGVUdXJibzooKT0+a1N0LGludGVycG9sYXRlVmlyaWRpczooKT0+UlN0LGludGVycG9sYXRlV2FybTooKT0+QVN0LGludGVycG9sYXRlWWxHbjooKT0+X1N0LGludGVycG9sYXRlWWxHbkJ1OigpPT5nU3QsaW50ZXJwb2xhdGVZbE9yQnI6KCk9PnlTdCxpbnRlcnBvbGF0ZVlsT3JSZDooKT0+dlN0LGludGVycG9sYXRlWm9vbTooKT0+dkwsaW50ZXJydXB0OigpPT5odSxpbnRlcnZhbDooKT0+bnZ0LGlzb0Zvcm1hdDooKT0+Rnd0LGlzb1BhcnNlOigpPT5Cd3QsanNvbjooKT0+VjF0LGtleXM6KCk9PiRMLGxhYjooKT0+U18sbGNoOigpPT5FeXQsbGluZTooKT0+dnUsbGluZVJhZGlhbDooKT0+aSQsbGlua0hvcml6b250YWw6KCk9PldTdCxsaW5rUmFkaWFsOigpPT5qU3QsbGlua1ZlcnRpY2FsOigpPT5ZU3QsbG9jYWw6KCk9PmVMLG1hcDooKT0+SmksbWF0Y2hlcjooKT0+dWIsbWF4OigpPT5sdSxtZWFuOigpPT5vX3QsbWVkaWFuOigpPT5hX3QsbWVyZ2U6KCk9PkxtLG1pbjooKT0+a20sbW91c2U6KCk9PnpvLG5hbWVzcGFjZTooKT0+SWgsbmFtZXNwYWNlczooKT0+U0UsbmVzdDooKT0+cjF0LG5vdzooKT0+UHAscGFjazooKT0+ZDJ0LHBhY2tFbmNsb3NlOigpPT5lOCxwYWNrU2libGluZ3M6KCk9PnUydCxwYWlyczooKT0+SzB0LHBhcnRpdGlvbjooKT0+bTJ0LHBhdGg6KCk9PndzLHBlcm11dGU6KCk9PnNfdCxwaWU6KCk9PnFTdCxwaWVjZXdpc2U6KCk9PmRZLHBvaW50UmFkaWFsOigpPT5jeSxwb2x5Z29uQXJlYTooKT0+TTJ0LHBvbHlnb25DZW50cm9pZDooKT0+RTJ0LHBvbHlnb25Db250YWluczooKT0+UDJ0LHBvbHlnb25IdWxsOigpPT5BMnQscG9seWdvbkxlbmd0aDooKT0+STJ0LHByZWNpc2lvbkZpeGVkOigpPT5payxwcmVjaXNpb25QcmVmaXg6KCk9Pm9rLHByZWNpc2lvblJvdW5kOigpPT5hayxxdWFkdHJlZTooKT0+RmgscXVhbnRpbGU6KCk9PmxhLHF1YW50aXplOigpPT5ReXQscmFkaWFsQXJlYTooKT0+byQscmFkaWFsTGluZTooKT0+aSQscmFuZG9tQmF0ZXM6KCk9PlIydCxyYW5kb21FeHBvbmVudGlhbDooKT0+TjJ0LHJhbmRvbUlyd2luSGFsbDooKT0+czgscmFuZG9tTG9nTm9ybWFsOigpPT5rMnQscmFuZG9tTm9ybWFsOigpPT5hOCxyYW5kb21Vbmlmb3JtOigpPT5MMnQscmFuZ2U6KCk9PklyLHJnYjooKT0+Y3UscmliYm9uOigpPT5KdnQsc2NhbGVCYW5kOigpPT50ZyxzY2FsZURpdmVyZ2luZzooKT0+STgsc2NhbGVEaXZlcmdpbmdMb2c6KCk9PkNYLHNjYWxlRGl2ZXJnaW5nUG93OigpPT5MOCxzY2FsZURpdmVyZ2luZ1NxcnQ6KCk9PnF3dCxzY2FsZURpdmVyZ2luZ1N5bWxvZzooKT0+QVgsc2NhbGVJZGVudGl0eTooKT0+dTgsc2NhbGVJbXBsaWNpdDooKT0+bDgsc2NhbGVMaW5lYXI6KCk9PnpuLHNjYWxlTG9nOigpPT5jYyxzY2FsZU9yZGluYWw6KCk9Pmd1LHNjYWxlUG9pbnQ6KCk9PmVnLHNjYWxlUG93OigpPT5aXyxzY2FsZVF1YW50aWxlOigpPT5yZyxzY2FsZVF1YW50aXplOigpPT5xYixzY2FsZVNlcXVlbnRpYWw6KCk9PlQ4LHNjYWxlU2VxdWVudGlhbExvZzooKT0+RVgsc2NhbGVTZXF1ZW50aWFsUG93OigpPT5DOCxzY2FsZVNlcXVlbnRpYWxRdWFudGlsZTooKT0+QTgsc2NhbGVTZXF1ZW50aWFsU3FydDooKT0+VXd0LHNjYWxlU2VxdWVudGlhbFN5bWxvZzooKT0+VFgsc2NhbGVTcXJ0OigpPT5ZMnQsc2NhbGVTeW1sb2c6KCk9PmY4LHNjYWxlVGhyZXNob2xkOigpPT5wOCxzY2FsZVRpbWU6KCk9PlliLHNjYWxlVXRjOigpPT5Wd3Qsc2NhbjooKT0+bF90LHNjaGVtZUFjY2VudDooKT0+R3d0LHNjaGVtZUJsdWVzOigpPT5LWCxzY2hlbWVCckJHOigpPT5QWCxzY2hlbWVCdUduOigpPT5GWCxzY2hlbWVCdVB1OigpPT5CWCxzY2hlbWVDYXRlZ29yeTEwOigpPT5qYixzY2hlbWVEYXJrMjooKT0+V3d0LHNjaGVtZUduQnU6KCk9PkhYLHNjaGVtZUdyZWVuczooKT0+Wlgsc2NoZW1lR3JleXM6KCk9PkpYLHNjaGVtZU9yUmQ6KCk9PlZYLHNjaGVtZU9yYW5nZXM6KCk9PmUkLHNjaGVtZVBSR246KCk9PklYLHNjaGVtZVBhaXJlZDooKT0+WXd0LHNjaGVtZVBhc3RlbDE6KCk9Pmp3dCxzY2hlbWVQYXN0ZWwyOigpPT5Yd3Qsc2NoZW1lUGlZRzooKT0+TFgsc2NoZW1lUHVCdTooKT0+cVgsc2NoZW1lUHVCdUduOigpPT5VWCxzY2hlbWVQdU9yOigpPT5rWCxzY2hlbWVQdVJkOigpPT5HWCxzY2hlbWVQdXJwbGVzOigpPT5RWCxzY2hlbWVSZEJ1OigpPT5SWCxzY2hlbWVSZEd5OigpPT5OWCxzY2hlbWVSZFB1OigpPT5XWCxzY2hlbWVSZFlsQnU6KCk9PkRYLHNjaGVtZVJkWWxHbjooKT0+T1gsc2NoZW1lUmVkczooKT0+dCQsc2NoZW1lU2V0MTooKT0+JHd0LHNjaGVtZVNldDI6KCk9Pkt3dCxzY2hlbWVTZXQzOigpPT5ad3Qsc2NoZW1lU3BlY3RyYWw6KCk9PnpYLHNjaGVtZVRhYmxlYXUxMDooKT0+Snd0LHNjaGVtZVlsR246KCk9PmpYLHNjaGVtZVlsR25CdTooKT0+WVgsc2NoZW1lWWxPckJyOigpPT5YWCxzY2hlbWVZbE9yUmQ6KCk9PiRYLHNlbGVjdDooKT0+SHQsc2VsZWN0QWxsOigpPT5UcCxzZWxlY3Rpb246KCk9PkxoLHNlbGVjdG9yOigpPT5EbSxzZWxlY3RvckFsbDooKT0+Y2Isc2V0OigpPT5vMXQsc2h1ZmZsZTooKT0+Y190LHN0YWNrOigpPT5BM3Qsc3RhY2tPZmZzZXREaXZlcmdpbmc6KCk9PkkzdCxzdGFja09mZnNldEV4cGFuZDooKT0+UDN0LHN0YWNrT2Zmc2V0Tm9uZTooKT0+eHUsc3RhY2tPZmZzZXRTaWxob3VldHRlOigpPT5MM3Qsc3RhY2tPZmZzZXRXaWdnbGU6KCk9PmszdCxzdGFja09yZGVyQXBwZWFyYW5jZTooKT0+Wjgsc3RhY2tPcmRlckFzY2VuZGluZzooKT0+Sjgsc3RhY2tPcmRlckRlc2NlbmRpbmc6KCk9PlIzdCxzdGFja09yZGVySW5zaWRlT3V0OigpPT5OM3Qsc3RhY2tPcmRlck5vbmU6KCk9PmJ1LHN0YWNrT3JkZXJSZXZlcnNlOigpPT5EM3Qsc3RyYXRpZnk6KCk9PnkydCxzdHlsZTooKT0+TXAsc3VtOigpPT51X3Qsc3ZnOigpPT5HMXQsc3ltYm9sOigpPT5aU3Qsc3ltYm9sQ2lyY2xlOigpPT5rNSxzeW1ib2xDcm9zczooKT0+Qjgsc3ltYm9sRGlhbW9uZDooKT0+SDgsc3ltYm9sU3F1YXJlOigpPT5VOCxzeW1ib2xTdGFyOigpPT5WOCxzeW1ib2xUcmlhbmdsZTooKT0+cTgsc3ltYm9sV3llOigpPT5HOCxzeW1ib2xzOigpPT5LU3QsdGV4dDooKT0+T18sdGhyZXNob2xkRnJlZWRtYW5EaWFjb25pczooKT0+bl90LHRocmVzaG9sZFNjb3R0OigpPT5pX3QsdGhyZXNob2xkU3R1cmdlczooKT0+c2IsdGlja0Zvcm1hdDooKT0+YzgsdGlja0luY3JlbWVudDooKT0+Yl8sdGlja1N0ZXA6KCk9PmVsLHRpY2tzOigpPT5hYix0aW1lRGF5OigpPT5leSx0aW1lRGF5czooKT0+UTJ0LHRpbWVGb3JtYXQ6KCk9Pk01LHRpbWVGb3JtYXREZWZhdWx0TG9jYWxlOigpPT5TOCx0aW1lRm9ybWF0TG9jYWxlOigpPT5TNSx0aW1lRnJpZGF5OigpPT51WCx0aW1lRnJpZGF5czooKT0+aXd0LHRpbWVIb3VyOigpPT55OCx0aW1lSG91cnM6KCk9PloydCx0aW1lSW50ZXJ2YWw6KCk9PmJyLHRpbWVNaWxsaXNlY29uZDooKT0+Sl8sdGltZU1pbGxpc2Vjb25kczooKT0+YVgsdGltZU1pbnV0ZTooKT0+XzgsdGltZU1pbnV0ZXM6KCk9PiQydCx0aW1lTW9uZGF5OigpPT5ueSx0aW1lTW9uZGF5czooKT0+dHd0LHRpbWVNb250aDooKT0+djgsdGltZU1vbnRoczooKT0+c3d0LHRpbWVQYXJzZTooKT0+d1gsdGltZVNhdHVyZGF5OigpPT5oWCx0aW1lU2F0dXJkYXlzOigpPT5vd3QsdGltZVNlY29uZDooKT0+dHksdGltZVNlY29uZHM6KCk9PnNYLHRpbWVTdW5kYXk6KCk9Pm5nLHRpbWVTdW5kYXlzOigpPT5mWCx0aW1lVGh1cnNkYXk6KCk9PkZwLHRpbWVUaHVyc2RheXM6KCk9Pm53dCx0aW1lVHVlc2RheTooKT0+bFgsdGltZVR1ZXNkYXlzOigpPT5ld3QsdGltZVdlZG5lc2RheTooKT0+Y1gsdGltZVdlZG5lc2RheXM6KCk9PnJ3dCx0aW1lV2VlazooKT0+bmcsdGltZVdlZWtzOigpPT5mWCx0aW1lWWVhcjooKT0+V2gsdGltZVllYXJzOigpPT5sd3QsdGltZW91dDooKT0+ekUsdGltZXI6KCk9PlBfLHRpbWVyRmx1c2g6KCk9PmdZLHRvdWNoOigpPT5DcCx0b3VjaGVzOigpPT5seXQsdHJhbnNpdGlvbjooKT0+UEwsdHJhbnNwb3NlOigpPT5ZOSx0cmVlOigpPT52MnQsdHJlZW1hcDooKT0+eDJ0LHRyZWVtYXBCaW5hcnk6KCk9PmIydCx0cmVlbWFwRGljZTooKT0+cWgsdHJlZW1hcFJlc3F1YXJpZnk6KCk9PlMydCx0cmVlbWFwU2xpY2U6KCk9PlFtLHRyZWVtYXBTbGljZURpY2U6KCk9PncydCx0cmVlbWFwU3F1YXJpZnk6KCk9Pm84LHRzdjooKT0+QjF0LHRzdkZvcm1hdDooKT0+QTF0LHRzdkZvcm1hdEJvZHk6KCk9PlAxdCx0c3ZGb3JtYXRSb3c6KCk9PkwxdCx0c3ZGb3JtYXRSb3dzOigpPT5JMXQsdHN2Rm9ybWF0VmFsdWU6KCk9PmsxdCx0c3ZQYXJzZTooKT0+QWIsdHN2UGFyc2VSb3dzOigpPT5DMXQsdXRjRGF5OigpPT5peSx1dGNEYXlzOigpPT5kd3QsdXRjRm9ybWF0OigpPT5zeSx1dGNGcmlkYXk6KCk9PmdYLHV0Y0ZyaWRheXM6KCk9PnZ3dCx1dGNIb3VyOigpPT5iOCx1dGNIb3VyczooKT0+Znd0LHV0Y01pbGxpc2Vjb25kOigpPT5KXyx1dGNNaWxsaXNlY29uZHM6KCk9PmFYLHV0Y01pbnV0ZTooKT0+eDgsdXRjTWludXRlczooKT0+dXd0LHV0Y01vbmRheTooKT0+YXksdXRjTW9uZGF5czooKT0+bXd0LHV0Y01vbnRoOigpPT53OCx1dGNNb250aHM6KCk9Pnd3dCx1dGNQYXJzZTooKT0+RTUsdXRjU2F0dXJkYXk6KCk9Pl9YLHV0Y1NhdHVyZGF5czooKT0+eHd0LHV0Y1NlY29uZDooKT0+dHksdXRjU2Vjb25kczooKT0+c1gsdXRjU3VuZGF5OigpPT5pZyx1dGNTdW5kYXlzOigpPT55WCx1dGNUaHVyc2RheTooKT0+QnAsdXRjVGh1cnNkYXlzOigpPT55d3QsdXRjVHVlc2RheTooKT0+ZFgsdXRjVHVlc2RheXM6KCk9Pmd3dCx1dGNXZWRuZXNkYXk6KCk9Pm1YLHV0Y1dlZG5lc2RheXM6KCk9Pl93dCx1dGNXZWVrOigpPT5pZyx1dGNXZWVrczooKT0+eVgsdXRjWWVhcjooKT0+WWgsdXRjWWVhcnM6KCk9PlN3dCx2YWx1ZXM6KCk9PmwxdCx2YXJpYW5jZTooKT0+RzksdmVyc2lvbjooKT0+ajB0LHZvcm9ub2k6KCk9PkszdCx3aW5kb3c6KCk9PmhiLHhtbDooKT0+VTF0LHppcDooKT0+aF90LHpvb206KCk9PmVSLHpvb21JZGVudGl0eTooKT0+JGgsem9vbVRyYW5zZm9ybTooKT0+aTJ9KTt2YXIgajB0PSI1LjcuMCI7ZnVuY3Rpb24gYWEoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59ZnVuY3Rpb24gb2IoZSl7cmV0dXJuIGUubGVuZ3RoPT09MSYmKGU9bDJlKGUpKSx7bGVmdDpmdW5jdGlvbih0LHIsbixpKXtmb3Iobj09bnVsbCYmKG49MCksaT09bnVsbCYmKGk9dC5sZW5ndGgpO248aTspe3ZhciBvPW4raT4+PjE7ZSh0W29dLHIpPDA/bj1vKzE6aT1vfXJldHVybiBufSxyaWdodDpmdW5jdGlvbih0LHIsbixpKXtmb3Iobj09bnVsbCYmKG49MCksaT09bnVsbCYmKGk9dC5sZW5ndGgpO248aTspe3ZhciBvPW4raT4+PjE7ZSh0W29dLHIpPjA/aT1vOm49bysxfXJldHVybiBufX19ZnVuY3Rpb24gbDJlKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBhYShlKHQpLHIpfX12YXIgWDB0PW9iKGFhKSxXVz1YMHQucmlnaHQsJDB0PVgwdC5sZWZ0LHZzPVdXO2Z1bmN0aW9uIEswdChlLHQpe3Q9PW51bGwmJih0PVlXKTtmb3IodmFyIHI9MCxuPWUubGVuZ3RoLTEsaT1lWzBdLG89bmV3IEFycmF5KG48MD8wOm4pO3I8bjspb1tyXT10KGksaT1lWysrcl0pO3JldHVybiBvfWZ1bmN0aW9uIFlXKGUsdCl7cmV0dXJuW2UsdF19ZnVuY3Rpb24gcTkoZSx0LHIpe3ZhciBuPWUubGVuZ3RoLGk9dC5sZW5ndGgsbz1uZXcgQXJyYXkobippKSxhLHMsbCxjO2ZvcihyPT1udWxsJiYocj1ZVyksYT1sPTA7YTxuOysrYSlmb3IoYz1lW2FdLHM9MDtzPGk7KytzLCsrbClvW2xdPXIoYyx0W3NdKTtyZXR1cm4gb31mdW5jdGlvbiBaMHQoZSx0KXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59ZnVuY3Rpb24gdGwoZSl7cmV0dXJuIGU9PT1udWxsP05hTjorZX1mdW5jdGlvbiBHOShlLHQpe3ZhciByPWUubGVuZ3RoLG49MCxpPS0xLG89MCxhLHMsbD0wO2lmKHQ9PW51bGwpZm9yKDsrK2k8cjspaXNOYU4oYT10bChlW2ldKSl8fChzPWEtbyxvKz1zLysrbixsKz1zKihhLW8pKTtlbHNlIGZvcig7KytpPHI7KWlzTmFOKGE9dGwodChlW2ldLGksZSkpKXx8KHM9YS1vLG8rPXMvKytuLGwrPXMqKGEtbykpO2lmKG4+MSlyZXR1cm4gbC8obi0xKX1mdW5jdGlvbiBXOShlLHQpe3ZhciByPUc5KGUsdCk7cmV0dXJuIHImJk1hdGguc3FydChyKX1mdW5jdGlvbiBzYShlLHQpe3ZhciByPWUubGVuZ3RoLG49LTEsaSxvLGE7aWYodD09bnVsbCl7Zm9yKDsrK248cjspaWYoKGk9ZVtuXSkhPW51bGwmJmk+PWkpZm9yKG89YT1pOysrbjxyOykoaT1lW25dKSE9bnVsbCYmKG8+aSYmKG89aSksYTxpJiYoYT1pKSl9ZWxzZSBmb3IoOysrbjxyOylpZigoaT10KGVbbl0sbixlKSkhPW51bGwmJmk+PWkpZm9yKG89YT1pOysrbjxyOykoaT10KGVbbl0sbixlKSkhPW51bGwmJihvPmkmJihvPWkpLGE8aSYmKGE9aSkpO3JldHVybltvLGFdfXZhciBKMHQ9QXJyYXkucHJvdG90eXBlLFEwdD1KMHQuc2xpY2UsdF90PUowdC5tYXA7ZnVuY3Rpb24gYkUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIGVfdChlKXtyZXR1cm4gZX1mdW5jdGlvbiBJcihlLHQscil7ZT0rZSx0PSt0LHI9KGk9YXJndW1lbnRzLmxlbmd0aCk8Mj8odD1lLGU9MCwxKTppPDM/MTorcjtmb3IodmFyIG49LTEsaT1NYXRoLm1heCgwLE1hdGguY2VpbCgodC1lKS9yKSl8MCxvPW5ldyBBcnJheShpKTsrK248aTspb1tuXT1lK24qcjtyZXR1cm4gb312YXIgalc9TWF0aC5zcXJ0KDUwKSxYVz1NYXRoLnNxcnQoMTApLCRXPU1hdGguc3FydCgyKTtmdW5jdGlvbiBhYihlLHQscil7dmFyIG4saT0tMSxvLGEscztpZih0PSt0LGU9K2Uscj0rcixlPT09dCYmcj4wKXJldHVybltlXTtpZigobj10PGUpJiYobz1lLGU9dCx0PW8pLChzPWJfKGUsdCxyKSk9PT0wfHwhaXNGaW5pdGUocykpcmV0dXJuW107aWYocz4wKWZvcihlPU1hdGguY2VpbChlL3MpLHQ9TWF0aC5mbG9vcih0L3MpLGE9bmV3IEFycmF5KG89TWF0aC5jZWlsKHQtZSsxKSk7KytpPG87KWFbaV09KGUraSkqcztlbHNlIGZvcihlPU1hdGguZmxvb3IoZSpzKSx0PU1hdGguY2VpbCh0KnMpLGE9bmV3IEFycmF5KG89TWF0aC5jZWlsKGUtdCsxKSk7KytpPG87KWFbaV09KGUtaSkvcztyZXR1cm4gbiYmYS5yZXZlcnNlKCksYX1mdW5jdGlvbiBiXyhlLHQscil7dmFyIG49KHQtZSkvTWF0aC5tYXgoMCxyKSxpPU1hdGguZmxvb3IoTWF0aC5sb2cobikvTWF0aC5MTjEwKSxvPW4vTWF0aC5wb3coMTAsaSk7cmV0dXJuIGk+PTA/KG8+PWpXPzEwOm8+PVhXPzU6bz49JFc/MjoxKSpNYXRoLnBvdygxMCxpKTotTWF0aC5wb3coMTAsLWkpLyhvPj1qVz8xMDpvPj1YVz81Om8+PSRXPzI6MSl9ZnVuY3Rpb24gZWwoZSx0LHIpe3ZhciBuPU1hdGguYWJzKHQtZSkvTWF0aC5tYXgoMCxyKSxpPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2cobikvTWF0aC5MTjEwKSksbz1uL2k7cmV0dXJuIG8+PWpXP2kqPTEwOm8+PVhXP2kqPTU6bz49JFcmJihpKj0yKSx0PGU/LWk6aX1mdW5jdGlvbiBzYihlKXtyZXR1cm4gTWF0aC5jZWlsKE1hdGgubG9nKGUubGVuZ3RoKS9NYXRoLkxOMikrMX1mdW5jdGlvbiByX3QoKXt2YXIgZT1lX3QsdD1zYSxyPXNiO2Z1bmN0aW9uIG4oaSl7dmFyIG8sYT1pLmxlbmd0aCxzLGw9bmV3IEFycmF5KGEpO2ZvcihvPTA7bzxhOysrbylsW29dPWUoaVtvXSxvLGkpO3ZhciBjPXQobCksdT1jWzBdLGg9Y1sxXSxmPXIobCx1LGgpO0FycmF5LmlzQXJyYXkoZil8fChmPWVsKHUsaCxmKSxmPUlyKE1hdGguY2VpbCh1L2YpKmYsaCxmKSk7Zm9yKHZhciBwPWYubGVuZ3RoO2ZbMF08PXU7KWYuc2hpZnQoKSwtLXA7Zm9yKDtmW3AtMV0+aDspZi5wb3AoKSwtLXA7dmFyIGQ9bmV3IEFycmF5KHArMSksZztmb3Iobz0wO288PXA7KytvKWc9ZFtvXT1bXSxnLngwPW8+MD9mW28tMV06dSxnLngxPW88cD9mW29dOmg7Zm9yKG89MDtvPGE7KytvKXM9bFtvXSx1PD1zJiZzPD1oJiZkW3ZzKGYscywwLHApXS5wdXNoKGlbb10pO3JldHVybiBkfXJldHVybiBuLnZhbHVlPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6YkUoaSksbik6ZX0sbi5kb21haW49ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIGk9PSJmdW5jdGlvbiI/aTpiRShbaVswXSxpWzFdXSksbik6dH0sbi50aHJlc2hvbGRzPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6QXJyYXkuaXNBcnJheShpKT9iRShRMHQuY2FsbChpKSk6YkUoaSksbik6cn0sbn1mdW5jdGlvbiBsYShlLHQscil7aWYocj09bnVsbCYmKHI9dGwpLCEhKG49ZS5sZW5ndGgpKXtpZigodD0rdCk8PTB8fG48MilyZXR1cm4rcihlWzBdLDAsZSk7aWYodD49MSlyZXR1cm4rcihlW24tMV0sbi0xLGUpO3ZhciBuLGk9KG4tMSkqdCxvPU1hdGguZmxvb3IoaSksYT0rcihlW29dLG8sZSkscz0rcihlW28rMV0sbysxLGUpO3JldHVybiBhKyhzLWEpKihpLW8pfX1mdW5jdGlvbiBuX3QoZSx0LHIpe3JldHVybiBlPXRfdC5jYWxsKGUsdGwpLnNvcnQoYWEpLE1hdGguY2VpbCgoci10KS8oMioobGEoZSwuNzUpLWxhKGUsLjI1KSkqTWF0aC5wb3coZS5sZW5ndGgsLTEvMykpKX1mdW5jdGlvbiBpX3QoZSx0LHIpe3JldHVybiBNYXRoLmNlaWwoKHItdCkvKDMuNSpXOShlKSpNYXRoLnBvdyhlLmxlbmd0aCwtMS8zKSkpfWZ1bmN0aW9uIGx1KGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG87aWYodD09bnVsbCl7Zm9yKDsrK248cjspaWYoKGk9ZVtuXSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9ZVtuXSkhPW51bGwmJmk+byYmKG89aSl9ZWxzZSBmb3IoOysrbjxyOylpZigoaT10KGVbbl0sbixlKSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9dChlW25dLG4sZSkpIT1udWxsJiZpPm8mJihvPWkpO3JldHVybiBvfWZ1bmN0aW9uIG9fdChlLHQpe3ZhciByPWUubGVuZ3RoLG49cixpPS0xLG8sYT0wO2lmKHQ9PW51bGwpZm9yKDsrK2k8cjspaXNOYU4obz10bChlW2ldKSk/LS1uOmErPW87ZWxzZSBmb3IoOysraTxyOylpc05hTihvPXRsKHQoZVtpXSxpLGUpKSk/LS1uOmErPW87aWYobilyZXR1cm4gYS9ufWZ1bmN0aW9uIGFfdChlLHQpe3ZhciByPWUubGVuZ3RoLG49LTEsaSxvPVtdO2lmKHQ9PW51bGwpZm9yKDsrK248cjspaXNOYU4oaT10bChlW25dKSl8fG8ucHVzaChpKTtlbHNlIGZvcig7KytuPHI7KWlzTmFOKGk9dGwodChlW25dLG4sZSkpKXx8by5wdXNoKGkpO3JldHVybiBsYShvLnNvcnQoYWEpLC41KX1mdW5jdGlvbiBMbShlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscixuPS0xLGk9MCxvLGE7KytuPHQ7KWkrPWVbbl0ubGVuZ3RoO2ZvcihvPW5ldyBBcnJheShpKTstLXQ+PTA7KWZvcihhPWVbdF0scj1hLmxlbmd0aDstLXI+PTA7KW9bLS1pXT1hW3JdO3JldHVybiBvfWZ1bmN0aW9uIGttKGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG87aWYodD09bnVsbCl7Zm9yKDsrK248cjspaWYoKGk9ZVtuXSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9ZVtuXSkhPW51bGwmJm8+aSYmKG89aSl9ZWxzZSBmb3IoOysrbjxyOylpZigoaT10KGVbbl0sbixlKSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9dChlW25dLG4sZSkpIT1udWxsJiZvPmkmJihvPWkpO3JldHVybiBvfWZ1bmN0aW9uIHNfdChlLHQpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKTtyLS07KW5bcl09ZVt0W3JdXTtyZXR1cm4gbn1mdW5jdGlvbiBsX3QoZSx0KXtpZighIShyPWUubGVuZ3RoKSl7dmFyIHIsbj0wLGk9MCxvLGE9ZVtpXTtmb3IodD09bnVsbCYmKHQ9YWEpOysrbjxyOykodChvPWVbbl0sYSk8MHx8dChhLGEpIT09MCkmJihhPW8saT1uKTtpZih0KGEsYSk9PT0wKXJldHVybiBpfX1mdW5jdGlvbiBjX3QoZSx0LHIpe2Zvcih2YXIgbj0ocj09bnVsbD9lLmxlbmd0aDpyKS0odD10PT1udWxsPzA6K3QpLGksbztuOylvPU1hdGgucmFuZG9tKCkqbi0tfDAsaT1lW24rdF0sZVtuK3RdPWVbbyt0XSxlW28rdF09aTtyZXR1cm4gZX1mdW5jdGlvbiB1X3QoZSx0KXt2YXIgcj1lLmxlbmd0aCxuPS0xLGksbz0wO2lmKHQ9PW51bGwpZm9yKDsrK248cjspKGk9K2Vbbl0pJiYobys9aSk7ZWxzZSBmb3IoOysrbjxyOykoaT0rdChlW25dLG4sZSkpJiYobys9aSk7cmV0dXJuIG99ZnVuY3Rpb24gWTkoZSl7aWYoIShvPWUubGVuZ3RoKSlyZXR1cm5bXTtmb3IodmFyIHQ9LTEscj1rbShlLGMyZSksbj1uZXcgQXJyYXkocik7Kyt0PHI7KWZvcih2YXIgaT0tMSxvLGE9blt0XT1uZXcgQXJyYXkobyk7KytpPG87KWFbaV09ZVtpXVt0XTtyZXR1cm4gbn1mdW5jdGlvbiBjMmUoZSl7cmV0dXJuIGUubGVuZ3RofWZ1bmN0aW9uIGhfdCgpe3JldHVybiBZOShhcmd1bWVudHMpfXZhciBqOT1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gZl90KGUpe3JldHVybiBlfXZhciBYOT0xLCQ5PTIsS1c9Myx3RT00LHBfdD0xZS02O2Z1bmN0aW9uIHUyZShlKXtyZXR1cm4idHJhbnNsYXRlKCIrKGUrLjUpKyIsMCkifWZ1bmN0aW9uIGgyZShlKXtyZXR1cm4idHJhbnNsYXRlKDAsIisoZSsuNSkrIikifWZ1bmN0aW9uIGYyZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuK2UodCl9fWZ1bmN0aW9uIHAyZShlKXt2YXIgdD1NYXRoLm1heCgwLGUuYmFuZHdpZHRoKCktMSkvMjtyZXR1cm4gZS5yb3VuZCgpJiYodD1NYXRoLnJvdW5kKHQpKSxmdW5jdGlvbihyKXtyZXR1cm4rZShyKSt0fX1mdW5jdGlvbiBkMmUoKXtyZXR1cm4hdGhpcy5fX2F4aXN9ZnVuY3Rpb24gSzkoZSx0KXt2YXIgcj1bXSxuPW51bGwsaT1udWxsLG89NixhPTYscz0zLGw9ZT09PVg5fHxlPT09d0U/LTE6MSxjPWU9PT13RXx8ZT09PSQ5PyJ4IjoieSIsdT1lPT09WDl8fGU9PT1LVz91MmU6aDJlO2Z1bmN0aW9uIGgoZil7dmFyIHA9bj09bnVsbD90LnRpY2tzP3QudGlja3MuYXBwbHkodCxyKTp0LmRvbWFpbigpOm4sZD1pPT1udWxsP3QudGlja0Zvcm1hdD90LnRpY2tGb3JtYXQuYXBwbHkodCxyKTpmX3Q6aSxnPU1hdGgubWF4KG8sMCkrcyxfPXQucmFuZ2UoKSx5PStfWzBdKy41LHg9K19bXy5sZW5ndGgtMV0rLjUsYj0odC5iYW5kd2lkdGg/cDJlOmYyZSkodC5jb3B5KCkpLFM9Zi5zZWxlY3Rpb24/Zi5zZWxlY3Rpb24oKTpmLEM9Uy5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFtudWxsXSksUD1TLnNlbGVjdEFsbCgiLnRpY2siKS5kYXRhKHAsdCkub3JkZXIoKSxrPVAuZXhpdCgpLE89UC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidGljayIpLEQ9UC5zZWxlY3QoImxpbmUiKSxCPVAuc2VsZWN0KCJ0ZXh0Iik7Qz1DLm1lcmdlKEMuZW50ZXIoKS5pbnNlcnQoInBhdGgiLCIudGljayIpLmF0dHIoImNsYXNzIiwiZG9tYWluIikuYXR0cigic3Ryb2tlIiwiY3VycmVudENvbG9yIikpLFA9UC5tZXJnZShPKSxEPUQubWVyZ2UoTy5hcHBlbmQoImxpbmUiKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKS5hdHRyKGMrIjIiLGwqbykpLEI9Qi5tZXJnZShPLmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLCJjdXJyZW50Q29sb3IiKS5hdHRyKGMsbCpnKS5hdHRyKCJkeSIsZT09PVg5PyIwZW0iOmU9PT1LVz8iMC43MWVtIjoiMC4zMmVtIikpLGYhPT1TJiYoQz1DLnRyYW5zaXRpb24oZiksUD1QLnRyYW5zaXRpb24oZiksRD1ELnRyYW5zaXRpb24oZiksQj1CLnRyYW5zaXRpb24oZiksaz1rLnRyYW5zaXRpb24oZikuYXR0cigib3BhY2l0eSIscF90KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKEkpe3JldHVybiBpc0Zpbml0ZShJPWIoSSkpP3UoSSk6dGhpcy5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpfSksTy5hdHRyKCJvcGFjaXR5IixwX3QpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oSSl7dmFyIEw9dGhpcy5wYXJlbnROb2RlLl9fYXhpcztyZXR1cm4gdShMJiZpc0Zpbml0ZShMPUwoSSkpP0w6YihJKSl9KSksay5yZW1vdmUoKSxDLmF0dHIoImQiLGU9PT13RXx8ZT09JDk/YT8iTSIrbCphKyIsIit5KyJIMC41ViIreCsiSCIrbCphOiJNMC41LCIreSsiViIreDphPyJNIit5KyIsIitsKmErIlYwLjVIIit4KyJWIitsKmE6Ik0iK3krIiwwLjVIIit4KSxQLmF0dHIoIm9wYWNpdHkiLDEpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oSSl7cmV0dXJuIHUoYihJKSl9KSxELmF0dHIoYysiMiIsbCpvKSxCLmF0dHIoYyxsKmcpLnRleHQoZCksUy5maWx0ZXIoZDJlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImZvbnQtc2l6ZSIsMTApLmF0dHIoImZvbnQtZmFtaWx5Iiwic2Fucy1zZXJpZiIpLmF0dHIoInRleHQtYW5jaG9yIixlPT09JDk/InN0YXJ0IjplPT09d0U/ImVuZCI6Im1pZGRsZSIpLFMuZWFjaChmdW5jdGlvbigpe3RoaXMuX19heGlzPWJ9KX1yZXR1cm4gaC5zY2FsZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1mLGgpOnR9LGgudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gcj1qOS5jYWxsKGFyZ3VtZW50cyksaH0saC50aWNrQXJndW1lbnRzPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWY9PW51bGw/W106ajkuY2FsbChmKSxoKTpyLnNsaWNlKCl9LGgudGlja1ZhbHVlcz1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1mPT1udWxsP251bGw6ajkuY2FsbChmKSxoKTpuJiZuLnNsaWNlKCl9LGgudGlja0Zvcm1hdD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1mLGgpOml9LGgudGlja1NpemU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89YT0rZixoKTpvfSxoLnRpY2tTaXplSW5uZXI9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K2YsaCk6b30saC50aWNrU2l6ZU91dGVyPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPStmLGgpOmF9LGgudGlja1BhZGRpbmc9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K2YsaCk6c30saH1mdW5jdGlvbiBkX3QoZSl7cmV0dXJuIEs5KFg5LGUpfWZ1bmN0aW9uIG1fdChlKXtyZXR1cm4gSzkoJDksZSl9ZnVuY3Rpb24gWjkoZSl7cmV0dXJuIEs5KEtXLGUpfWZ1bmN0aW9uIGxiKGUpe3JldHVybiBLOSh3RSxlKX1SbSgpO1JtKCk7dmFyIFE5PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixTRT17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6UTkseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiBJaChlKXt2YXIgdD1lKz0iIixyPXQuaW5kZXhPZigiOiIpO3JldHVybiByPj0wJiYodD1lLnNsaWNlKDAscikpIT09InhtbG5zIiYmKGU9ZS5zbGljZShyKzEpKSxTRS5oYXNPd25Qcm9wZXJ0eSh0KT97c3BhY2U6U0VbdF0sbG9jYWw6ZX06ZX1mdW5jdGlvbiB5MmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vd25lckRvY3VtZW50LHI9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIHI9PT1ROSYmdC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09UTk/dC5jcmVhdGVFbGVtZW50KGUpOnQuY3JlYXRlRWxlbWVudE5TKHIsZSl9fWZ1bmN0aW9uIHYyZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBObShlKXt2YXIgdD1JaChlKTtyZXR1cm4odC5sb2NhbD92MmU6eTJlKSh0KX1mdW5jdGlvbiB4MmUoKXt9ZnVuY3Rpb24gRG0oZSl7cmV0dXJuIGU9PW51bGw/eDJlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihlKX19ZnVuY3Rpb24gdl90KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1EbShlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPW5ldyBBcnJheShhKSxsLGMsdT0wO3U8YTsrK3UpKGw9b1t1XSkmJihjPWUuY2FsbChsLGwuX19kYXRhX18sdSxvKSkmJigiX19kYXRhX18iaW4gbCYmKGMuX19kYXRhX189bC5fX2RhdGFfXyksc1t1XT1jKTtyZXR1cm4gbmV3IERuKG4sdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gYjJlKCl7cmV0dXJuW119ZnVuY3Rpb24gY2IoZSl7cmV0dXJuIGU9PW51bGw/YjJlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChlKX19ZnVuY3Rpb24geF90KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1jYihlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49W10saT1bXSxvPTA7bzxyOysrbylmb3IodmFyIGE9dFtvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpKGw9YVtjXSkmJihuLnB1c2goZS5jYWxsKGwsbC5fX2RhdGFfXyxjLGEpKSxpLnB1c2gobCkpO3JldHVybiBuZXcgRG4obixpKX1mdW5jdGlvbiB1YihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKGUpfX1mdW5jdGlvbiBiX3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPXViKGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBEbihuLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIHRMKGUpe3JldHVybiBuZXcgQXJyYXkoZS5sZW5ndGgpfWZ1bmN0aW9uIHdfdCgpe3JldHVybiBuZXcgRG4odGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAodEwpLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIE1FKGUsdCl7dGhpcy5vd25lckRvY3VtZW50PWUub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1lLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PWUsdGhpcy5fX2RhdGFfXz10fU1FLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TUUsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0KX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IoZSl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKGUpfX07ZnVuY3Rpb24gU190KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgTV90PSIkIjtmdW5jdGlvbiB3MmUoZSx0LHIsbixpLG8pe2Zvcih2YXIgYT0wLHMsbD10Lmxlbmd0aCxjPW8ubGVuZ3RoO2E8YzsrK2EpKHM9dFthXSk/KHMuX19kYXRhX189b1thXSxuW2FdPXMpOnJbYV09bmV3IE1FKGUsb1thXSk7Zm9yKDthPGw7KythKShzPXRbYV0pJiYoaVthXT1zKX1mdW5jdGlvbiBTMmUoZSx0LHIsbixpLG8sYSl7dmFyIHMsbCxjPXt9LHU9dC5sZW5ndGgsaD1vLmxlbmd0aCxmPW5ldyBBcnJheSh1KSxwO2ZvcihzPTA7czx1OysrcykobD10W3NdKSYmKGZbc109cD1NX3QrYS5jYWxsKGwsbC5fX2RhdGFfXyxzLHQpLHAgaW4gYz9pW3NdPWw6Y1twXT1sKTtmb3Iocz0wO3M8aDsrK3MpcD1NX3QrYS5jYWxsKGUsb1tzXSxzLG8pLChsPWNbcF0pPyhuW3NdPWwsbC5fX2RhdGFfXz1vW3NdLGNbcF09bnVsbCk6cltzXT1uZXcgTUUoZSxvW3NdKTtmb3Iocz0wO3M8dTsrK3MpKGw9dFtzXSkmJmNbZltzXV09PT1sJiYoaVtzXT1sKX1mdW5jdGlvbiBFX3QoZSx0KXtpZighZSlyZXR1cm4gcD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLGM9LTEsdGhpcy5lYWNoKGZ1bmN0aW9uKFApe3BbKytjXT1QfSkscDt2YXIgcj10P1MyZTp3MmUsbj10aGlzLl9wYXJlbnRzLGk9dGhpcy5fZ3JvdXBzO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1TX3QoZSkpO2Zvcih2YXIgbz1pLmxlbmd0aCxhPW5ldyBBcnJheShvKSxzPW5ldyBBcnJheShvKSxsPW5ldyBBcnJheShvKSxjPTA7YzxvOysrYyl7dmFyIHU9bltjXSxoPWlbY10sZj1oLmxlbmd0aCxwPWUuY2FsbCh1LHUmJnUuX19kYXRhX18sYyxuKSxkPXAubGVuZ3RoLGc9c1tjXT1uZXcgQXJyYXkoZCksXz1hW2NdPW5ldyBBcnJheShkKSx5PWxbY109bmV3IEFycmF5KGYpO3IodSxoLGcsXyx5LHAsdCk7Zm9yKHZhciB4PTAsYj0wLFMsQzt4PGQ7Kyt4KWlmKFM9Z1t4XSl7Zm9yKHg+PWImJihiPXgrMSk7IShDPV9bYl0pJiYrK2I8ZDspO1MuX25leHQ9Q3x8bnVsbH19cmV0dXJuIGE9bmV3IERuKGEsbiksYS5fZW50ZXI9cyxhLl9leGl0PWwsYX1mdW5jdGlvbiBUX3QoKXtyZXR1cm4gbmV3IERuKHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAodEwpLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIENfdChlLHQscil7dmFyIG49dGhpcy5lbnRlcigpLGk9dGhpcyxvPXRoaXMuZXhpdCgpO3JldHVybiBuPXR5cGVvZiBlPT0iZnVuY3Rpb24iP2Uobik6bi5hcHBlbmQoZSsiIiksdCE9bnVsbCYmKGk9dChpKSkscj09bnVsbD9vLnJlbW92ZSgpOnIobyksbiYmaT9uLm1lcmdlKGkpLm9yZGVyKCk6aX1mdW5jdGlvbiBBX3QoZSl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPWUuX2dyb3VwcyxuPXQubGVuZ3RoLGk9ci5sZW5ndGgsbz1NYXRoLm1pbihuLGkpLGE9bmV3IEFycmF5KG4pLHM9MDtzPG87KytzKWZvcih2YXIgbD10W3NdLGM9cltzXSx1PWwubGVuZ3RoLGg9YVtzXT1uZXcgQXJyYXkodSksZixwPTA7cDx1OysrcCkoZj1sW3BdfHxjW3BdKSYmKGhbcF09Zik7Zm9yKDtzPG47KytzKWFbc109dFtzXTtyZXR1cm4gbmV3IERuKGEsdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gUF90KCl7Zm9yKHZhciBlPXRoaXMuX2dyb3Vwcyx0PS0xLHI9ZS5sZW5ndGg7Kyt0PHI7KWZvcih2YXIgbj1lW3RdLGk9bi5sZW5ndGgtMSxvPW5baV0sYTstLWk+PTA7KShhPW5baV0pJiYobyYmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihvKV40JiZvLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsbyksbz1hKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBJX3QoZSl7ZXx8KGU9TTJlKTtmdW5jdGlvbiB0KGgsZil7cmV0dXJuIGgmJmY/ZShoLl9fZGF0YV9fLGYuX19kYXRhX18pOiFoLSFmfWZvcih2YXIgcj10aGlzLl9ncm91cHMsbj1yLmxlbmd0aCxpPW5ldyBBcnJheShuKSxvPTA7bzxuOysrbyl7Zm9yKHZhciBhPXJbb10scz1hLmxlbmd0aCxsPWlbb109bmV3IEFycmF5KHMpLGMsdT0wO3U8czsrK3UpKGM9YVt1XSkmJihsW3VdPWMpO2wuc29ydCh0KX1yZXR1cm4gbmV3IERuKGksdGhpcy5fcGFyZW50cykub3JkZXIoKX1mdW5jdGlvbiBNMmUoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59ZnVuY3Rpb24gTF90KCl7dmFyIGU9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxlLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfWZ1bmN0aW9uIGtfdCgpe3ZhciBlPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdD0tMTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZVsrK3RdPXRoaXN9KSxlfWZ1bmN0aW9uIFJfdCgpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsdD0wLHI9ZS5sZW5ndGg7dDxyOysrdClmb3IodmFyIG49ZVt0XSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKXt2YXIgYT1uW2ldO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9ZnVuY3Rpb24gTl90KCl7dmFyIGU9MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytlfSksZX1mdW5jdGlvbiBEX3QoKXtyZXR1cm4hdGhpcy5ub2RlKCl9ZnVuY3Rpb24gT190KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxvPTAsYT1pLmxlbmd0aCxzO288YTsrK28pKHM9aVtvXSkmJmUuY2FsbChzLHMuX19kYXRhX18sbyxpKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBFMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSl9fWZ1bmN0aW9uIFQyZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIEMyZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKGUsdCl9fWZ1bmN0aW9uIEEyZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQpfX1mdW5jdGlvbiBQMmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpOnRoaXMuc2V0QXR0cmlidXRlKGUscil9fWZ1bmN0aW9uIEkyZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHIpfX1mdW5jdGlvbiB6X3QoZSx0KXt2YXIgcj1JaChlKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBuPXRoaXMubm9kZSgpO3JldHVybiByLmxvY2FsP24uZ2V0QXR0cmlidXRlTlMoci5zcGFjZSxyLmxvY2FsKTpuLmdldEF0dHJpYnV0ZShyKX1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP3IubG9jYWw/VDJlOkUyZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9yLmxvY2FsP0kyZTpQMmU6ci5sb2NhbD9BMmU6QzJlKShyLHQpKX1mdW5jdGlvbiBoYihlKXtyZXR1cm4gZS5vd25lckRvY3VtZW50JiZlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fGUuZG9jdW1lbnQmJmV8fGUuZGVmYXVsdFZpZXd9ZnVuY3Rpb24gTDJlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIGsyZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLHQscil9fWZ1bmN0aW9uIFIyZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bj09bnVsbD90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSxuLHIpfX1mdW5jdGlvbiBGX3QoZSx0LHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP0wyZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9SMmU6azJlKShlLHQscj09bnVsbD8iIjpyKSk6TXAodGhpcy5ub2RlKCksZSl9ZnVuY3Rpb24gTXAoZSx0KXtyZXR1cm4gZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxoYihlKS5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX1mdW5jdGlvbiBOMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbZV19fWZ1bmN0aW9uIEQyZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbZV09dH19ZnVuY3Rpb24gTzJlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD9kZWxldGUgdGhpc1tlXTp0aGlzW2VdPXJ9fWZ1bmN0aW9uIEJfdChlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP04yZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9PMmU6RDJlKShlLHQpKTp0aGlzLm5vZGUoKVtlXX1mdW5jdGlvbiBIX3QoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIFpXKGUpe3JldHVybiBlLmNsYXNzTGlzdHx8bmV3IFZfdChlKX1mdW5jdGlvbiBWX3QoZSl7dGhpcy5fbm9kZT1lLHRoaXMuX25hbWVzPUhfdChlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfVZfdC5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q8MCYmKHRoaXMuX25hbWVzLnB1c2goZSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2YoZSk7dD49MCYmKHRoaXMuX25hbWVzLnNwbGljZSh0LDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKGUpPj0wfX07ZnVuY3Rpb24gVV90KGUsdCl7Zm9yKHZhciByPVpXKGUpLG49LTEsaT10Lmxlbmd0aDsrK248aTspci5hZGQodFtuXSl9ZnVuY3Rpb24gcV90KGUsdCl7Zm9yKHZhciByPVpXKGUpLG49LTEsaT10Lmxlbmd0aDsrK248aTspci5yZW1vdmUodFtuXSl9ZnVuY3Rpb24gejJlKGUpe3JldHVybiBmdW5jdGlvbigpe1VfdCh0aGlzLGUpfX1mdW5jdGlvbiBGMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cV90KHRoaXMsZSl9fWZ1bmN0aW9uIEIyZShlLHQpe3JldHVybiBmdW5jdGlvbigpeyh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKT9VX3Q6cV90KSh0aGlzLGUpfX1mdW5jdGlvbiBHX3QoZSx0KXt2YXIgcj1IX3QoZSsiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIG49WlcodGhpcy5ub2RlKCkpLGk9LTEsbz1yLmxlbmd0aDsrK2k8bzspaWYoIW4uY29udGFpbnMocltpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHQ9PSJmdW5jdGlvbiI/QjJlOnQ/ejJlOkYyZSkocix0KSl9ZnVuY3Rpb24gSDJlKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBWMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1lfX1mdW5jdGlvbiBVMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIFdfdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD9IMmU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP1UyZTpWMmUpKGUpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH1mdW5jdGlvbiBxMmUoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBHMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9ZX19ZnVuY3Rpb24gVzJlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gWV90KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsP3EyZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/VzJlOkcyZSkoZSkpOnRoaXMubm9kZSgpLmlubmVySFRNTH1mdW5jdGlvbiBZMmUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gal90KCl7cmV0dXJuIHRoaXMuZWFjaChZMmUpfWZ1bmN0aW9uIGoyZSgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIFhfdCgpe3JldHVybiB0aGlzLmVhY2goajJlKX1mdW5jdGlvbiAkX3QoZSl7dmFyIHQ9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpObShlKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX1mdW5jdGlvbiBYMmUoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBLX3QoZSx0KXt2YXIgcj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lOk5tKGUpLG49dD09bnVsbD9YMmU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpEbSh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoci5hcHBseSh0aGlzLGFyZ3VtZW50cyksbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9ZnVuY3Rpb24gJDJlKCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlO2UmJmUucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gWl90KCl7cmV0dXJuIHRoaXMuZWFjaCgkMmUpfWZ1bmN0aW9uIEsyZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCExKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24gWjJlKCl7dmFyIGU9dGhpcy5jbG9uZU5vZGUoITApLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2libGluZyk6ZX1mdW5jdGlvbiBKX3QoZSl7cmV0dXJuIHRoaXMuc2VsZWN0KGU/WjJlOksyZSl9ZnVuY3Rpb24gUV90KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixlKTp0aGlzLm5vZGUoKS5fX2RhdGFfX312YXIgZXl0PXt9LHF0PW51bGw7dHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmKHR5dD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIm9ubW91c2VlbnRlciJpbiB0eXR8fChleXQ9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpO3ZhciB0eXQ7ZnVuY3Rpb24gSjJlKGUsdCxyKXtyZXR1cm4gZT1yeXQoZSx0LHIpLGZ1bmN0aW9uKG4pe3ZhciBpPW4ucmVsYXRlZFRhcmdldDsoIWl8fGkhPT10aGlzJiYhKGkuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykmOCkpJiZlLmNhbGwodGhpcyxuKX19ZnVuY3Rpb24gcnl0KGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9cXQ7cXQ9bjt0cnl7ZS5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyx0LHIpfWZpbmFsbHl7cXQ9aX19fWZ1bmN0aW9uIFEyZShlKXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciByPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihyPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOnJ9fSl9ZnVuY3Rpb24gdHdlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMuX19vbjtpZighIXQpe2Zvcih2YXIgcj0wLG49LTEsaT10Lmxlbmd0aCxvO3I8aTsrK3Ipbz10W3JdLCghZS50eXBlfHxvLnR5cGU9PT1lLnR5cGUpJiZvLm5hbWU9PT1lLm5hbWU/dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG8udHlwZSxvLmxpc3RlbmVyLG8uY2FwdHVyZSk6dFsrK25dPW87KytuP3QubGVuZ3RoPW46ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIGV3ZShlLHQscil7dmFyIG49ZXl0Lmhhc093blByb3BlcnR5KGUudHlwZSk/SjJlOnJ5dDtyZXR1cm4gZnVuY3Rpb24oaSxvLGEpe3ZhciBzPXRoaXMuX19vbixsLGM9bih0LG8sYSk7aWYocyl7Zm9yKHZhciB1PTAsaD1zLmxlbmd0aDt1PGg7Kyt1KWlmKChsPXNbdV0pLnR5cGU9PT1lLnR5cGUmJmwubmFtZT09PWUubmFtZSl7dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyLGwuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyPWMsbC5jYXB0dXJlPXIpLGwudmFsdWU9dDtyZXR1cm59fXRoaXMuYWRkRXZlbnRMaXN0ZW5lcihlLnR5cGUsYyxyKSxsPXt0eXBlOmUudHlwZSxuYW1lOmUubmFtZSx2YWx1ZTp0LGxpc3RlbmVyOmMsY2FwdHVyZTpyfSxzP3MucHVzaChsKTp0aGlzLl9fb249W2xdfX1mdW5jdGlvbiBueXQoZSx0LHIpe3ZhciBuPVEyZShlKyIiKSxpLG89bi5sZW5ndGgsYTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBzPXRoaXMubm9kZSgpLl9fb247aWYocyl7Zm9yKHZhciBsPTAsYz1zLmxlbmd0aCx1O2w8YzsrK2wpZm9yKGk9MCx1PXNbbF07aTxvOysraSlpZigoYT1uW2ldKS50eXBlPT09dS50eXBlJiZhLm5hbWU9PT11Lm5hbWUpcmV0dXJuIHUudmFsdWV9cmV0dXJufWZvcihzPXQ/ZXdlOnR3ZSxyPT1udWxsJiYocj0hMSksaT0wO2k8bzsrK2kpdGhpcy5lYWNoKHMobltpXSx0LHIpKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBFcChlLHQscixuKXt2YXIgaT1xdDtlLnNvdXJjZUV2ZW50PXF0LHF0PWU7dHJ5e3JldHVybiB0LmFwcGx5KHIsbil9ZmluYWxseXtxdD1pfX1mdW5jdGlvbiBpeXQoZSx0LHIpe3ZhciBuPWhiKGUpLGk9bi5DdXN0b21FdmVudDt0eXBlb2YgaT09ImZ1bmN0aW9uIj9pPW5ldyBpKHQscik6KGk9bi5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxyPyhpLmluaXRFdmVudCh0LHIuYnViYmxlcyxyLmNhbmNlbGFibGUpLGkuZGV0YWlsPXIuZGV0YWlsKTppLmluaXRFdmVudCh0LCExLCExKSksZS5kaXNwYXRjaEV2ZW50KGkpfWZ1bmN0aW9uIHJ3ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBpeXQodGhpcyxlLHQpfX1mdW5jdGlvbiBud2UoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaXl0KHRoaXMsZSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fWZ1bmN0aW9uIG95dChlLHQpe3JldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP253ZTpyd2UpKGUsdCkpfXZhciBFRT1bbnVsbF07ZnVuY3Rpb24gRG4oZSx0KXt0aGlzLl9ncm91cHM9ZSx0aGlzLl9wYXJlbnRzPXR9ZnVuY3Rpb24gYXl0KCl7cmV0dXJuIG5ldyBEbihbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLEVFKX1Ebi5wcm90b3R5cGU9YXl0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6RG4sc2VsZWN0OnZfdCxzZWxlY3RBbGw6eF90LGZpbHRlcjpiX3QsZGF0YTpFX3QsZW50ZXI6d190LGV4aXQ6VF90LGpvaW46Q190LG1lcmdlOkFfdCxvcmRlcjpQX3Qsc29ydDpJX3QsY2FsbDpMX3Qsbm9kZXM6a190LG5vZGU6Ul90LHNpemU6Tl90LGVtcHR5OkRfdCxlYWNoOk9fdCxhdHRyOnpfdCxzdHlsZTpGX3QscHJvcGVydHk6Ql90LGNsYXNzZWQ6R190LHRleHQ6V190LGh0bWw6WV90LHJhaXNlOmpfdCxsb3dlcjpYX3QsYXBwZW5kOiRfdCxpbnNlcnQ6S190LHJlbW92ZTpaX3QsY2xvbmU6Sl90LGRhdHVtOlFfdCxvbjpueXQsZGlzcGF0Y2g6b3l0fTt2YXIgTGg9YXl0O2Z1bmN0aW9uIEh0KGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/bmV3IERuKFtbZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlKV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgRG4oW1tlXV0sRUUpfWZ1bmN0aW9uIHN5dChlKXtyZXR1cm4gSHQoTm0oZSkuY2FsbChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpKX12YXIgaXdlPTA7ZnVuY3Rpb24gZUwoKXtyZXR1cm4gbmV3IEpXfWZ1bmN0aW9uIEpXKCl7dGhpcy5fPSJAIisoKytpd2UpLnRvU3RyaW5nKDM2KX1KVy5wcm90b3R5cGU9ZUwucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpKVyxnZXQ6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuXzshKHQgaW4gZSk7KWlmKCEoZT1lLnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gZVt0XX0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdGhpcy5fXT10fSxyZW1vdmU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuXyBpbiBlJiZkZWxldGUgZVt0aGlzLl9dfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTtmdW5jdGlvbiBmYigpe2Zvcih2YXIgZT1xdCx0O3Q9ZS5zb3VyY2VFdmVudDspZT10O3JldHVybiBlfWZ1bmN0aW9uIE9tKGUsdCl7dmFyIHI9ZS5vd25lclNWR0VsZW1lbnR8fGU7aWYoci5jcmVhdGVTVkdQb2ludCl7dmFyIG49ci5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBuLng9dC5jbGllbnRYLG4ueT10LmNsaWVudFksbj1uLm1hdHJpeFRyYW5zZm9ybShlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSksW24ueCxuLnldfXZhciBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW3QuY2xpZW50WC1pLmxlZnQtZS5jbGllbnRMZWZ0LHQuY2xpZW50WS1pLnRvcC1lLmNsaWVudFRvcF19ZnVuY3Rpb24gem8oZSl7dmFyIHQ9ZmIoKTtyZXR1cm4gdC5jaGFuZ2VkVG91Y2hlcyYmKHQ9dC5jaGFuZ2VkVG91Y2hlc1swXSksT20oZSx0KX1mdW5jdGlvbiBUcChlKXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciP25ldyBEbihbZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChlKV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBEbihbZT09bnVsbD9bXTplXSxFRSl9ZnVuY3Rpb24gQ3AoZSx0LHIpe2FyZ3VtZW50cy5sZW5ndGg8MyYmKHI9dCx0PWZiKCkuY2hhbmdlZFRvdWNoZXMpO2Zvcih2YXIgbj0wLGk9dD90Lmxlbmd0aDowLG87bjxpOysrbilpZigobz10W25dKS5pZGVudGlmaWVyPT09cilyZXR1cm4gT20oZSxvKTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBseXQoZSx0KXt0PT1udWxsJiYodD1mYigpLnRvdWNoZXMpO2Zvcih2YXIgcj0wLG49dD90Lmxlbmd0aDowLGk9bmV3IEFycmF5KG4pO3I8bjsrK3IpaVtyXT1PbShlLHRbcl0pO3JldHVybiBpfWZ1bmN0aW9uIHJMKCl7cXQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gem0oKXtxdC5wcmV2ZW50RGVmYXVsdCgpLHF0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIEZtKGUpe3ZhciB0PWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHI9SHQoZSkub24oImRyYWdzdGFydC5kcmFnIix6bSwhMCk7Im9uc2VsZWN0c3RhcnQiaW4gdD9yLm9uKCJzZWxlY3RzdGFydC5kcmFnIix6bSwhMCk6KHQuX19ub3NlbGVjdD10LnN0eWxlLk1velVzZXJTZWxlY3QsdC5zdHlsZS5Nb3pVc2VyU2VsZWN0PSJub25lIil9ZnVuY3Rpb24gQm0oZSx0KXt2YXIgcj1lLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxuPUh0KGUpLm9uKCJkcmFnc3RhcnQuZHJhZyIsbnVsbCk7dCYmKG4ub24oImNsaWNrLmRyYWciLHptLCEwKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bi5vbigiY2xpY2suZHJhZyIsbnVsbCl9LDApKSwib25zZWxlY3RzdGFydCJpbiByP24ub24oInNlbGVjdHN0YXJ0LmRyYWciLG51bGwpOihyLnN0eWxlLk1velVzZXJTZWxlY3Q9ci5fX25vc2VsZWN0LGRlbGV0ZSByLl9fbm9zZWxlY3QpfWZ1bmN0aW9uIFRFKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBDRShlLHQscixuLGksbyxhLHMsbCxjKXt0aGlzLnRhcmdldD1lLHRoaXMudHlwZT10LHRoaXMuc3ViamVjdD1yLHRoaXMuaWRlbnRpZmllcj1uLHRoaXMuYWN0aXZlPWksdGhpcy54PW8sdGhpcy55PWEsdGhpcy5keD1zLHRoaXMuZHk9bCx0aGlzLl89Y31DRS5wcm90b3R5cGUub249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl8ub24uYXBwbHkodGhpcy5fLGFyZ3VtZW50cyk7cmV0dXJuIGU9PT10aGlzLl8/dGhpczplfTtmdW5jdGlvbiBvd2UoKXtyZXR1cm4hcXQuY3RybEtleSYmIXF0LmJ1dHRvbn1mdW5jdGlvbiBhd2UoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlfWZ1bmN0aW9uIHN3ZShlKXtyZXR1cm4gZT09bnVsbD97eDpxdC54LHk6cXQueX06ZX1mdW5jdGlvbiBsd2UoKXtyZXR1cm4gbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzfHwib250b3VjaHN0YXJ0ImluIHRoaXN9ZnVuY3Rpb24gcGIoKXt2YXIgZT1vd2UsdD1hd2Uscj1zd2Usbj1sd2UsaT17fSxvPXhzKCJzdGFydCIsImRyYWciLCJlbmQiKSxhPTAscyxsLGMsdSxoPTA7ZnVuY3Rpb24gZihTKXtTLm9uKCJtb3VzZWRvd24uZHJhZyIscCkuZmlsdGVyKG4pLm9uKCJ0b3VjaHN0YXJ0LmRyYWciLF8pLm9uKCJ0b3VjaG1vdmUuZHJhZyIseSkub24oInRvdWNoZW5kLmRyYWcgdG91Y2hjYW5jZWwuZHJhZyIseCkuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfWZ1bmN0aW9uIHAoKXtpZighKHV8fCFlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkpe3ZhciBTPWIoIm1vdXNlIix0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSx6byx0aGlzLGFyZ3VtZW50cyk7IVN8fChIdChxdC52aWV3KS5vbigibW91c2Vtb3ZlLmRyYWciLGQsITApLm9uKCJtb3VzZXVwLmRyYWciLGcsITApLEZtKHF0LnZpZXcpLHJMKCksYz0hMSxzPXF0LmNsaWVudFgsbD1xdC5jbGllbnRZLFMoInN0YXJ0IikpfX1mdW5jdGlvbiBkKCl7aWYoem0oKSwhYyl7dmFyIFM9cXQuY2xpZW50WC1zLEM9cXQuY2xpZW50WS1sO2M9UypTK0MqQz5ofWkubW91c2UoImRyYWciKX1mdW5jdGlvbiBnKCl7SHQocXQudmlldykub24oIm1vdXNlbW92ZS5kcmFnIG1vdXNldXAuZHJhZyIsbnVsbCksQm0ocXQudmlldyxjKSx6bSgpLGkubW91c2UoImVuZCIpfWZ1bmN0aW9uIF8oKXtpZighIWUuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgUz1xdC5jaGFuZ2VkVG91Y2hlcyxDPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLFA9Uy5sZW5ndGgsayxPO2ZvcihrPTA7azxQOysraykoTz1iKFNba10uaWRlbnRpZmllcixDLENwLHRoaXMsYXJndW1lbnRzKSkmJihyTCgpLE8oInN0YXJ0IikpfX1mdW5jdGlvbiB5KCl7dmFyIFM9cXQuY2hhbmdlZFRvdWNoZXMsQz1TLmxlbmd0aCxQLGs7Zm9yKFA9MDtQPEM7KytQKShrPWlbU1tQXS5pZGVudGlmaWVyXSkmJih6bSgpLGsoImRyYWciKSl9ZnVuY3Rpb24geCgpe3ZhciBTPXF0LmNoYW5nZWRUb3VjaGVzLEM9Uy5sZW5ndGgsUCxrO2Zvcih1JiZjbGVhclRpbWVvdXQodSksdT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dT1udWxsfSw1MDApLFA9MDtQPEM7KytQKShrPWlbU1tQXS5pZGVudGlmaWVyXSkmJihyTCgpLGsoImVuZCIpKX1mdW5jdGlvbiBiKFMsQyxQLGssTyl7dmFyIEQ9UChDLFMpLEIsSSxMLFI9by5jb3B5KCk7aWYoISFFcChuZXcgQ0UoZiwiYmVmb3Jlc3RhcnQiLEIsUyxhLERbMF0sRFsxXSwwLDAsUiksZnVuY3Rpb24oKXtyZXR1cm4ocXQuc3ViamVjdD1CPXIuYXBwbHkoayxPKSk9PW51bGw/ITE6KEk9Qi54LURbMF18fDAsTD1CLnktRFsxXXx8MCwhMCl9KSlyZXR1cm4gZnVuY3Rpb24gRih6KXt2YXIgVT1ELFc7c3dpdGNoKHope2Nhc2Uic3RhcnQiOmlbU109RixXPWErKzticmVhaztjYXNlImVuZCI6ZGVsZXRlIGlbU10sLS1hO2Nhc2UiZHJhZyI6RD1QKEMsUyksVz1hO2JyZWFrfUVwKG5ldyBDRShmLHosQixTLFcsRFswXStJLERbMV0rTCxEWzBdLVVbMF0sRFsxXS1VWzFdLFIpLFIuYXBwbHksUixbeixrLE9dKX19cmV0dXJuIGYuZmlsdGVyPWZ1bmN0aW9uKFMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBTPT0iZnVuY3Rpb24iP1M6VEUoISFTKSxmKTplfSxmLmNvbnRhaW5lcj1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgUz09ImZ1bmN0aW9uIj9TOlRFKFMpLGYpOnR9LGYuc3ViamVjdD1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgUz09ImZ1bmN0aW9uIj9TOlRFKFMpLGYpOnJ9LGYudG91Y2hhYmxlPWZ1bmN0aW9uKFMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBTPT0iZnVuY3Rpb24iP1M6VEUoISFTKSxmKTpufSxmLm9uPWZ1bmN0aW9uKCl7dmFyIFM9by5vbi5hcHBseShvLGFyZ3VtZW50cyk7cmV0dXJuIFM9PT1vP2Y6U30sZi5jbGlja0Rpc3RhbmNlPWZ1bmN0aW9uKFMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPShTPStTKSpTLGYpOk1hdGguc3FydChoKX0sZn1mdW5jdGlvbiBBcChlLHQscil7ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gSG0oZSx0KXt2YXIgcj1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gTmgoKXt9dmFyIFZtPS43LHdfPTEvVm0sZGI9IlxccyooWystXT9cXGQrKVxccyoiLEFFPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLFJoPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixjd2U9L14jKFswLTlhLWZdezMsOH0pJC8sdXdlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tkYixkYixkYl0rIlxcKSQiKSxod2U9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW1JoLFJoLFJoXSsiXFwpJCIpLGZ3ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW2RiLGRiLGRiLEFFXSsiXFwpJCIpLHB3ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW1JoLFJoLFJoLEFFXSsiXFwpJCIpLGR3ZT1uZXcgUmVnRXhwKCJeaHNsXFwoIitbQUUsUmgsUmhdKyJcXCkkIiksbXdlPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbQUUsUmgsUmgsQUVdKyJcXCkkIiksY3l0PXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O0FwKE5oLHJjLHtjb3B5OmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsZSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OnV5dCxmb3JtYXRIZXg6dXl0LGZvcm1hdEhzbDpnd2UsZm9ybWF0UmdiOmh5dCx0b1N0cmluZzpoeXR9KTtmdW5jdGlvbiB1eXQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBnd2UoKXtyZXR1cm4gZ3l0KHRoaXMpLmZvcm1hdEhzbCgpfWZ1bmN0aW9uIGh5dCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIHJjKGUpe3ZhciB0LHI7cmV0dXJuIGU9KGUrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLCh0PWN3ZS5leGVjKGUpKT8ocj10WzFdLmxlbmd0aCx0PXBhcnNlSW50KHRbMV0sMTYpLHI9PT02P2Z5dCh0KTpyPT09Mz9uZXcgS2kodD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fHQmMjQwLCh0JjE1KTw8NHx0JjE1LDEpOnI9PT04P25MKHQ+PjI0JjI1NSx0Pj4xNiYyNTUsdD4+OCYyNTUsKHQmMjU1KS8yNTUpOnI9PT00P25MKHQ+PjEyJjE1fHQ+PjgmMjQwLHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwoKHQmMTUpPDw0fHQmMTUpLzI1NSk6bnVsbCk6KHQ9dXdlLmV4ZWMoZSkpP25ldyBLaSh0WzFdLHRbMl0sdFszXSwxKToodD1od2UuZXhlYyhlKSk/bmV3IEtpKHRbMV0qMjU1LzEwMCx0WzJdKjI1NS8xMDAsdFszXSoyNTUvMTAwLDEpOih0PWZ3ZS5leGVjKGUpKT9uTCh0WzFdLHRbMl0sdFszXSx0WzRdKToodD1wd2UuZXhlYyhlKSk/bkwodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsdFs0XSk6KHQ9ZHdlLmV4ZWMoZSkpP215dCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLDEpOih0PW13ZS5leGVjKGUpKT9teXQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCx0WzRdKTpjeXQuaGFzT3duUHJvcGVydHkoZSk/Znl0KGN5dFtlXSk6ZT09PSJ0cmFuc3BhcmVudCI/bmV3IEtpKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gZnl0KGUpe3JldHVybiBuZXcgS2koZT4+MTYmMjU1LGU+PjgmMjU1LGUmMjU1LDEpfWZ1bmN0aW9uIG5MKGUsdCxyLG4pe3JldHVybiBuPD0wJiYoZT10PXI9TmFOKSxuZXcgS2koZSx0LHIsbil9ZnVuY3Rpb24gUEUoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBOaHx8KGU9cmMoZSkpLGU/KGU9ZS5yZ2IoKSxuZXcgS2koZS5yLGUuZyxlLmIsZS5vcGFjaXR5KSk6bmV3IEtpfWZ1bmN0aW9uIGN1KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9QRShlKTpuZXcgS2koZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIEtpKGUsdCxyLG4pe3RoaXMucj0rZSx0aGlzLmc9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1BcChLaSxjdSxIbShOaCx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD93XzpNYXRoLnBvdyh3XyxlKSxuZXcgS2kodGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/Vm06TWF0aC5wb3coVm0sZSksbmV3IEtpKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6cHl0LGZvcm1hdEhleDpweXQsZm9ybWF0UmdiOmR5dCx0b1N0cmluZzpkeXR9KSk7ZnVuY3Rpb24gcHl0KCl7cmV0dXJuIiMiK1FXKHRoaXMucikrUVcodGhpcy5nKStRVyh0aGlzLmIpfWZ1bmN0aW9uIGR5dCgpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX1mdW5jdGlvbiBRVyhlKXtyZXR1cm4gZT1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKGUpfHwwKSksKGU8MTY/IjAiOiIiKStlLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBteXQoZSx0LHIsbil7cmV0dXJuIG48PTA/ZT10PXI9TmFOOnI8PTB8fHI+PTE/ZT10PU5hTjp0PD0wJiYoZT1OYU4pLG5ldyBraChlLHQscixuKX1mdW5jdGlvbiBneXQoZSl7aWYoZSBpbnN0YW5jZW9mIGtoKXJldHVybiBuZXcga2goZS5oLGUucyxlLmwsZS5vcGFjaXR5KTtpZihlIGluc3RhbmNlb2YgTmh8fChlPXJjKGUpKSwhZSlyZXR1cm4gbmV3IGtoO2lmKGUgaW5zdGFuY2VvZiBraClyZXR1cm4gZTtlPWUucmdiKCk7dmFyIHQ9ZS5yLzI1NSxyPWUuZy8yNTUsbj1lLmIvMjU1LGk9TWF0aC5taW4odCxyLG4pLG89TWF0aC5tYXgodCxyLG4pLGE9TmFOLHM9by1pLGw9KG8raSkvMjtyZXR1cm4gcz8odD09PW8/YT0oci1uKS9zKyhyPG4pKjY6cj09PW8/YT0obi10KS9zKzI6YT0odC1yKS9zKzQscy89bDwuNT9vK2k6Mi1vLWksYSo9NjApOnM9bD4wJiZsPDE/MDphLG5ldyBraChhLHMsbCxlLm9wYWNpdHkpfWZ1bmN0aW9uIFVtKGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9neXQoZSk6bmV3IGtoKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBraChlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259QXAoa2gsVW0sSG0oTmgse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/d186TWF0aC5wb3cod18sZSksbmV3IGtoKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/Vm06TWF0aC5wb3coVm0sZSksbmV3IGtoKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5oJTM2MCsodGhpcy5oPDApKjM2MCx0PWlzTmFOKGUpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLHI9dGhpcy5sLG49cisocjwuNT9yOjEtcikqdCxpPTIqci1uO3JldHVybiBuZXcgS2kodFkoZT49MjQwP2UtMjQwOmUrMTIwLGksbiksdFkoZSxpLG4pLHRZKGU8MTIwP2UrMjQwOmUtMTIwLGksbiksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJoc2woIjoiaHNsYSgiKSsodGhpcy5ofHwwKSsiLCAiKyh0aGlzLnN8fDApKjEwMCsiJSwgIisodGhpcy5sfHwwKSoxMDArIiUiKyhlPT09MT8iKSI6IiwgIitlKyIpIil9fSkpO2Z1bmN0aW9uIHRZKGUsdCxyKXtyZXR1cm4oZTw2MD90KyhyLXQpKmUvNjA6ZTwxODA/cjplPDI0MD90KyhyLXQpKigyNDAtZSkvNjA6dCkqMjU1fXZhciBpTD1NYXRoLlBJLzE4MCxvTD0xODAvTWF0aC5QSTt2YXIgYUw9MTgsX3l0PS45NjQyMix5eXQ9MSx2eXQ9LjgyNTIxLHh5dD00LzI5LG1iPTYvMjksYnl0PTMqbWIqbWIsX3dlPW1iKm1iKm1iO2Z1bmN0aW9uIHd5dChlKXtpZihlIGluc3RhbmNlb2YgdXUpcmV0dXJuIG5ldyB1dShlLmwsZS5hLGUuYixlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiBEaClyZXR1cm4gVHl0KGUpO2UgaW5zdGFuY2VvZiBLaXx8KGU9UEUoZSkpO3ZhciB0PWlZKGUucikscj1pWShlLmcpLG49aVkoZS5iKSxpPWVZKCguMjIyNTA0NSp0Ky43MTY4Nzg2KnIrLjA2MDYxNjkqbikveXl0KSxvLGE7cmV0dXJuIHQ9PT1yJiZyPT09bj9vPWE9aToobz1lWSgoLjQzNjA3NDcqdCsuMzg1MDY0OSpyKy4xNDMwODA0Km4pL195dCksYT1lWSgoLjAxMzkzMjIqdCsuMDk3MTA0NSpyKy43MTQxNzMzKm4pL3Z5dCkpLG5ldyB1dSgxMTYqaS0xNiw1MDAqKG8taSksMjAwKihpLWEpLGUub3BhY2l0eSl9ZnVuY3Rpb24gU3l0KGUsdCl7cmV0dXJuIG5ldyB1dShlLDAsMCx0PT1udWxsPzE6dCl9ZnVuY3Rpb24gU18oZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP3d5dChlKTpuZXcgdXUoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIHV1KGUsdCxyLG4pe3RoaXMubD0rZSx0aGlzLmE9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1BcCh1dSxTXyxIbShOaCx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB1dSh0aGlzLmwrYUwqKGU9PW51bGw/MTplKSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHV1KHRoaXMubC1hTCooZT09bnVsbD8xOmUpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9KHRoaXMubCsxNikvMTE2LHQ9aXNOYU4odGhpcy5hKT9lOmUrdGhpcy5hLzUwMCxyPWlzTmFOKHRoaXMuYik/ZTplLXRoaXMuYi8yMDA7cmV0dXJuIHQ9X3l0KnJZKHQpLGU9eXl0KnJZKGUpLHI9dnl0KnJZKHIpLG5ldyBLaShuWSgzLjEzMzg1NjEqdC0xLjYxNjg2NjcqZS0uNDkwNjE0NipyKSxuWSgtLjk3ODc2ODQqdCsxLjkxNjE0MTUqZSsuMDMzNDU0KnIpLG5ZKC4wNzE5NDUzKnQtLjIyODk5MTQqZSsxLjQwNTI0MjcqciksdGhpcy5vcGFjaXR5KX19KSk7ZnVuY3Rpb24gZVkoZSl7cmV0dXJuIGU+X3dlP01hdGgucG93KGUsMS8zKTplL2J5dCt4eXR9ZnVuY3Rpb24gclkoZSl7cmV0dXJuIGU+bWI/ZSplKmU6Ynl0KihlLXh5dCl9ZnVuY3Rpb24gblkoZSl7cmV0dXJuIDI1NSooZTw9LjAwMzEzMDg/MTIuOTIqZToxLjA1NSpNYXRoLnBvdyhlLDEvMi40KS0uMDU1KX1mdW5jdGlvbiBpWShlKXtyZXR1cm4oZS89MjU1KTw9LjA0MDQ1P2UvMTIuOTI6TWF0aC5wb3coKGUrLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiBNeXQoZSl7aWYoZSBpbnN0YW5jZW9mIERoKXJldHVybiBuZXcgRGgoZS5oLGUuYyxlLmwsZS5vcGFjaXR5KTtpZihlIGluc3RhbmNlb2YgdXV8fChlPXd5dChlKSksZS5hPT09MCYmZS5iPT09MClyZXR1cm4gbmV3IERoKE5hTiwwPGUubCYmZS5sPDEwMD8wOk5hTixlLmwsZS5vcGFjaXR5KTt2YXIgdD1NYXRoLmF0YW4yKGUuYixlLmEpKm9MO3JldHVybiBuZXcgRGgodDwwP3QrMzYwOnQsTWF0aC5zcXJ0KGUuYSplLmErZS5iKmUuYiksZS5sLGUub3BhY2l0eSl9ZnVuY3Rpb24gRXl0KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9NeXQoZSk6bmV3IERoKHIsdCxlLG49PW51bGw/MTpuKX1mdW5jdGlvbiBnYihlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/TXl0KGUpOm5ldyBEaChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gRGgoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMuYz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIFR5dChlKXtpZihpc05hTihlLmgpKXJldHVybiBuZXcgdXUoZS5sLDAsMCxlLm9wYWNpdHkpO3ZhciB0PWUuaCppTDtyZXR1cm4gbmV3IHV1KGUubCxNYXRoLmNvcyh0KSplLmMsTWF0aC5zaW4odCkqZS5jLGUub3BhY2l0eSl9QXAoRGgsZ2IsSG0oTmgse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRGgodGhpcy5oLHRoaXMuYyx0aGlzLmwrYUwqKGU9PW51bGw/MTplKSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBEaCh0aGlzLmgsdGhpcy5jLHRoaXMubC1hTCooZT09bnVsbD8xOmUpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiBUeXQodGhpcykucmdiKCl9fSkpO3ZhciBJeXQ9LS4xNDg2MSxvWT0xLjc4Mjc3LGFZPS0uMjkyMjcsc0w9LS45MDY0OSxJRT0xLjk3Mjk0LEN5dD1JRSpzTCxBeXQ9SUUqb1ksUHl0PW9ZKmFZLXNMKkl5dDtmdW5jdGlvbiB5d2UoZSl7aWYoZSBpbnN0YW5jZW9mIE1fKXJldHVybiBuZXcgTV8oZS5oLGUucyxlLmwsZS5vcGFjaXR5KTtlIGluc3RhbmNlb2YgS2l8fChlPVBFKGUpKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT0oUHl0Km4rQ3l0KnQtQXl0KnIpLyhQeXQrQ3l0LUF5dCksbz1uLWksYT0oSUUqKHItaSktYVkqbykvc0wscz1NYXRoLnNxcnQoYSphK28qbykvKElFKmkqKDEtaSkpLGw9cz9NYXRoLmF0YW4yKGEsbykqb0wtMTIwOk5hTjtyZXR1cm4gbmV3IE1fKGw8MD9sKzM2MDpsLHMsaSxlLm9wYWNpdHkpfWZ1bmN0aW9uIGNhKGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT95d2UoZSk6bmV3IE1fKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBNXyhlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259QXAoTV8sY2EsSG0oTmgse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/d186TWF0aC5wb3cod18sZSksbmV3IE1fKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/Vm06TWF0aC5wb3coVm0sZSksbmV3IE1fKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9aXNOYU4odGhpcy5oKT8wOih0aGlzLmgrMTIwKSppTCx0PSt0aGlzLmwscj1pc05hTih0aGlzLnMpPzA6dGhpcy5zKnQqKDEtdCksbj1NYXRoLmNvcyhlKSxpPU1hdGguc2luKGUpO3JldHVybiBuZXcgS2koMjU1Kih0K3IqKEl5dCpuK29ZKmkpKSwyNTUqKHQrciooYVkqbitzTCppKSksMjU1Kih0K3IqKElFKm4pKSx0aGlzLm9wYWNpdHkpfX0pKTtmdW5jdGlvbiBzWShlLHQscixuLGkpe3ZhciBvPWUqZSxhPW8qZTtyZXR1cm4oKDEtMyplKzMqby1hKSp0Kyg0LTYqbyszKmEpKnIrKDErMyplKzMqby0zKmEpKm4rYSppKS82fWZ1bmN0aW9uIGxMKGUpe3ZhciB0PWUubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXI8PTA/cj0wOnI+PTE/KHI9MSx0LTEpOk1hdGguZmxvb3Iocip0KSxpPWVbbl0sbz1lW24rMV0sYT1uPjA/ZVtuLTFdOjIqaS1vLHM9bjx0LTE/ZVtuKzJdOjIqby1pO3JldHVybiBzWSgoci1uL3QpKnQsYSxpLG8scyl9fWZ1bmN0aW9uIGNMKGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1NYXRoLmZsb29yKCgociU9MSk8MD8rK3I6cikqdCksaT1lWyhuK3QtMSkldF0sbz1lW24ldF0sYT1lWyhuKzEpJXRdLHM9ZVsobisyKSV0XTtyZXR1cm4gc1koKHItbi90KSp0LGksbyxhLHMpfX1mdW5jdGlvbiBfYihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19ZnVuY3Rpb24gTHl0KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBlK3IqdH19ZnVuY3Rpb24gdndlKGUsdCxyKXtyZXR1cm4gZT1NYXRoLnBvdyhlLHIpLHQ9TWF0aC5wb3codCxyKS1lLHI9MS9yLGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnBvdyhlK24qdCxyKX19ZnVuY3Rpb24gcW0oZSx0KXt2YXIgcj10LWU7cmV0dXJuIHI/THl0KGUscj4xODB8fHI8LTE4MD9yLTM2MCpNYXRoLnJvdW5kKHIvMzYwKTpyKTpfYihpc05hTihlKT90OmUpfWZ1bmN0aW9uIGt5dChlKXtyZXR1cm4oZT0rZSk9PTE/Wm46ZnVuY3Rpb24odCxyKXtyZXR1cm4gci10P3Z3ZSh0LHIsZSk6X2IoaXNOYU4odCk/cjp0KX19ZnVuY3Rpb24gWm4oZSx0KXt2YXIgcj10LWU7cmV0dXJuIHI/THl0KGUscik6X2IoaXNOYU4oZSk/dDplKX12YXIgR209ZnVuY3Rpb24gZSh0KXt2YXIgcj1reXQodCk7ZnVuY3Rpb24gbihpLG8pe3ZhciBhPXIoKGk9Y3UoaSkpLnIsKG89Y3UobykpLnIpLHM9cihpLmcsby5nKSxsPXIoaS5iLG8uYiksYz1abihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkucj1hKHUpLGkuZz1zKHUpLGkuYj1sKHUpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPWUsbn0oMSk7ZnVuY3Rpb24gUnl0KGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKSxhLHM7Zm9yKGE9MDthPHI7KythKXM9Y3UodFthXSksblthXT1zLnJ8fDAsaVthXT1zLmd8fDAsb1thXT1zLmJ8fDA7cmV0dXJuIG49ZShuKSxpPWUoaSksbz1lKG8pLHMub3BhY2l0eT0xLGZ1bmN0aW9uKGwpe3JldHVybiBzLnI9bihsKSxzLmc9aShsKSxzLmI9byhsKSxzKyIifX19dmFyIHVMPVJ5dChsTCksTnl0PVJ5dChjTCk7ZnVuY3Rpb24geWIoZSx0KXt0fHwodD1bXSk7dmFyIHI9ZT9NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCk6MCxuPXQuc2xpY2UoKSxpO3JldHVybiBmdW5jdGlvbihvKXtmb3IoaT0wO2k8cjsrK2kpbltpXT1lW2ldKigxLW8pK3RbaV0qbztyZXR1cm4gbn19ZnVuY3Rpb24gaEwoZSl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhlKSYmIShlIGluc3RhbmNlb2YgRGF0YVZpZXcpfWZ1bmN0aW9uIER5dChlLHQpe3JldHVybihoTCh0KT95YjpsWSkoZSx0KX1mdW5jdGlvbiBsWShlLHQpe3ZhciByPXQ/dC5sZW5ndGg6MCxuPWU/TWF0aC5taW4ocixlLmxlbmd0aCk6MCxpPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShyKSxhO2ZvcihhPTA7YTxuOysrYSlpW2FdPW5jKGVbYV0sdFthXSk7Zm9yKDthPHI7KythKW9bYV09dFthXTtyZXR1cm4gZnVuY3Rpb24ocyl7Zm9yKGE9MDthPG47KythKW9bYV09aVthXShzKTtyZXR1cm4gb319ZnVuY3Rpb24gZkwoZSx0KXt2YXIgcj1uZXcgRGF0ZTtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKG4pe3JldHVybiByLnNldFRpbWUoZSooMS1uKSt0Km4pLHJ9fWZ1bmN0aW9uIHppKGUsdCl7cmV0dXJuIGU9K2UsdD0rdCxmdW5jdGlvbihyKXtyZXR1cm4gZSooMS1yKSt0KnJ9fWZ1bmN0aW9uIHBMKGUsdCl7dmFyIHI9e30sbj17fSxpOyhlPT09bnVsbHx8dHlwZW9mIGUhPSJvYmplY3QiKSYmKGU9e30pLCh0PT09bnVsbHx8dHlwZW9mIHQhPSJvYmplY3QiKSYmKHQ9e30pO2ZvcihpIGluIHQpaSBpbiBlP3JbaV09bmMoZVtpXSx0W2ldKTpuW2ldPXRbaV07cmV0dXJuIGZ1bmN0aW9uKG8pe2ZvcihpIGluIHIpbltpXT1yW2ldKG8pO3JldHVybiBufX12YXIgdVk9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLGNZPW5ldyBSZWdFeHAodVkuc291cmNlLCJnIik7ZnVuY3Rpb24geHdlKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBid2UoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpKyIifX1mdW5jdGlvbiB2YihlLHQpe3ZhciByPXVZLmxhc3RJbmRleD1jWS5sYXN0SW5kZXg9MCxuLGksbyxhPS0xLHM9W10sbD1bXTtmb3IoZT1lKyIiLHQ9dCsiIjsobj11WS5leGVjKGUpKSYmKGk9Y1kuZXhlYyh0KSk7KShvPWkuaW5kZXgpPnImJihvPXQuc2xpY2UocixvKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLChuPW5bMF0pPT09KGk9aVswXSk/c1thXT9zW2FdKz1pOnNbKythXT1pOihzWysrYV09bnVsbCxsLnB1c2goe2k6YSx4OnppKG4saSl9KSkscj1jWS5sYXN0SW5kZXg7cmV0dXJuIHI8dC5sZW5ndGgmJihvPXQuc2xpY2Uociksc1thXT9zW2FdKz1vOnNbKythXT1vKSxzLmxlbmd0aDwyP2xbMF0/YndlKGxbMF0ueCk6eHdlKHQpOih0PWwubGVuZ3RoLGZ1bmN0aW9uKGMpe2Zvcih2YXIgdT0wLGg7dTx0OysrdSlzWyhoPWxbdV0pLmldPWgueChjKTtyZXR1cm4gcy5qb2luKCIiKX0pfWZ1bmN0aW9uIG5jKGUsdCl7dmFyIHI9dHlwZW9mIHQsbjtyZXR1cm4gdD09bnVsbHx8cj09PSJib29sZWFuIj9fYih0KToocj09PSJudW1iZXIiP3ppOnI9PT0ic3RyaW5nIj8obj1yYyh0KSk/KHQ9bixHbSk6dmI6dCBpbnN0YW5jZW9mIHJjP0dtOnQgaW5zdGFuY2VvZiBEYXRlP2ZMOmhMKHQpP3liOkFycmF5LmlzQXJyYXkodCk/bFk6dHlwZW9mIHQudmFsdWVPZiE9ImZ1bmN0aW9uIiYmdHlwZW9mIHQudG9TdHJpbmchPSJmdW5jdGlvbiJ8fGlzTmFOKHQpP3BMOnppKShlLHQpfWZ1bmN0aW9uIE95dChlKXt2YXIgdD1lLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGVbTWF0aC5tYXgoMCxNYXRoLm1pbih0LTEsTWF0aC5mbG9vcihyKnQpKSldfX1mdW5jdGlvbiB6eXQoZSx0KXt2YXIgcj1xbSgrZSwrdCk7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpPXIobik7cmV0dXJuIGktMzYwKk1hdGguZmxvb3IoaS8zNjApfX1mdW5jdGlvbiBkTChlLHQpe3JldHVybiBlPStlLHQ9K3QsZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgucm91bmQoZSooMS1yKSt0KnIpfX12YXIgRnl0PTE4MC9NYXRoLlBJLG1MPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O2Z1bmN0aW9uIGhZKGUsdCxyLG4saSxvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KGUqZSt0KnQpKSYmKGUvPWEsdC89YSksKGw9ZSpyK3QqbikmJihyLT1lKmwsbi09dCpsKSwocz1NYXRoLnNxcnQocipyK24qbikpJiYoci89cyxuLz1zLGwvPXMpLGUqbjx0KnImJihlPS1lLHQ9LXQsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMih0LGUpKkZ5dCxza2V3WDpNYXRoLmF0YW4obCkqRnl0LHNjYWxlWDphLHNjYWxlWTpzfX12YXIgTEUsZlksQnl0LGdMO2Z1bmN0aW9uIEh5dChlKXtyZXR1cm4gZT09PSJub25lIj9tTDooTEV8fChMRT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSxmWT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsQnl0PWRvY3VtZW50LmRlZmF1bHRWaWV3KSxMRS5zdHlsZS50cmFuc2Zvcm09ZSxlPUJ5dC5nZXRDb21wdXRlZFN0eWxlKGZZLmFwcGVuZENoaWxkKExFKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxmWS5yZW1vdmVDaGlsZChMRSksZT1lLnNsaWNlKDcsLTEpLnNwbGl0KCIsIiksaFkoK2VbMF0sK2VbMV0sK2VbMl0sK2VbM10sK2VbNF0sK2VbNV0pKX1mdW5jdGlvbiBWeXQoZSl7cmV0dXJuIGU9PW51bGw/bUw6KGdMfHwoZ0w9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksZ0wuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLGUpLChlPWdMLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpPyhlPWUubWF0cml4LGhZKGUuYSxlLmIsZS5jLGUuZCxlLmUsZS5mKSk6bUwpfWZ1bmN0aW9uIFV5dChlLHQscixuKXtmdW5jdGlvbiBpKGMpe3JldHVybiBjLmxlbmd0aD9jLnBvcCgpKyIgIjoiIn1mdW5jdGlvbiBvKGMsdSxoLGYscCxkKXtpZihjIT09aHx8dSE9PWYpe3ZhciBnPXAucHVzaCgidHJhbnNsYXRlKCIsbnVsbCx0LG51bGwscik7ZC5wdXNoKHtpOmctNCx4OnppKGMsaCl9LHtpOmctMix4OnppKHUsZil9KX1lbHNlKGh8fGYpJiZwLnB1c2goInRyYW5zbGF0ZSgiK2grdCtmK3IpfWZ1bmN0aW9uIGEoYyx1LGgsZil7YyE9PXU/KGMtdT4xODA/dSs9MzYwOnUtYz4xODAmJihjKz0zNjApLGYucHVzaCh7aTpoLnB1c2goaShoKSsicm90YXRlKCIsbnVsbCxuKS0yLHg6emkoYyx1KX0pKTp1JiZoLnB1c2goaShoKSsicm90YXRlKCIrdStuKX1mdW5jdGlvbiBzKGMsdSxoLGYpe2MhPT11P2YucHVzaCh7aTpoLnB1c2goaShoKSsic2tld1goIixudWxsLG4pLTIseDp6aShjLHUpfSk6dSYmaC5wdXNoKGkoaCkrInNrZXdYKCIrdStuKX1mdW5jdGlvbiBsKGMsdSxoLGYscCxkKXtpZihjIT09aHx8dSE9PWYpe3ZhciBnPXAucHVzaChpKHApKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTtkLnB1c2goe2k6Zy00LHg6emkoYyxoKX0se2k6Zy0yLHg6emkodSxmKX0pfWVsc2UoaCE9PTF8fGYhPT0xKSYmcC5wdXNoKGkocCkrInNjYWxlKCIraCsiLCIrZisiKSIpfXJldHVybiBmdW5jdGlvbihjLHUpe3ZhciBoPVtdLGY9W107cmV0dXJuIGM9ZShjKSx1PWUodSksbyhjLnRyYW5zbGF0ZVgsYy50cmFuc2xhdGVZLHUudHJhbnNsYXRlWCx1LnRyYW5zbGF0ZVksaCxmKSxhKGMucm90YXRlLHUucm90YXRlLGgsZikscyhjLnNrZXdYLHUuc2tld1gsaCxmKSxsKGMuc2NhbGVYLGMuc2NhbGVZLHUuc2NhbGVYLHUuc2NhbGVZLGgsZiksYz11PW51bGwsZnVuY3Rpb24ocCl7Zm9yKHZhciBkPS0xLGc9Zi5sZW5ndGgsXzsrK2Q8ZzspaFsoXz1mW2RdKS5pXT1fLngocCk7cmV0dXJuIGguam9pbigiIil9fX12YXIgX0w9VXl0KEh5dCwicHgsICIsInB4KSIsImRlZykiKSx5TD1VeXQoVnl0LCIsICIsIikiLCIpIik7dmFyIGtFPU1hdGguU1FSVDIscFk9MixxeXQ9NCx3d2U9MWUtMTI7ZnVuY3Rpb24gR3l0KGUpe3JldHVybigoZT1NYXRoLmV4cChlKSkrMS9lKS8yfWZ1bmN0aW9uIFN3ZShlKXtyZXR1cm4oKGU9TWF0aC5leHAoZSkpLTEvZSkvMn1mdW5jdGlvbiBNd2UoZSl7cmV0dXJuKChlPU1hdGguZXhwKDIqZSkpLTEpLyhlKzEpfWZ1bmN0aW9uIHZMKGUsdCl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLG89dFswXSxhPXRbMV0scz10WzJdLGw9by1yLGM9YS1uLHU9bCpsK2MqYyxoLGY7aWYodTx3d2UpZj1NYXRoLmxvZyhzL2kpL2tFLGg9ZnVuY3Rpb24oeCl7cmV0dXJuW3IreCpsLG4reCpjLGkqTWF0aC5leHAoa0UqeCpmKV19O2Vsc2V7dmFyIHA9TWF0aC5zcXJ0KHUpLGQ9KHMqcy1pKmkrcXl0KnUpLygyKmkqcFkqcCksZz0ocypzLWkqaS1xeXQqdSkvKDIqcypwWSpwKSxfPU1hdGgubG9nKE1hdGguc3FydChkKmQrMSktZCkseT1NYXRoLmxvZyhNYXRoLnNxcnQoZypnKzEpLWcpO2Y9KHktXykva0UsaD1mdW5jdGlvbih4KXt2YXIgYj14KmYsUz1HeXQoXyksQz1pLyhwWSpwKSooUypNd2Uoa0UqYitfKS1Td2UoXykpO3JldHVybltyK0MqbCxuK0MqYyxpKlMvR3l0KGtFKmIrXyldfX1yZXR1cm4gaC5kdXJhdGlvbj1mKjFlMyxofWZ1bmN0aW9uIFd5dChlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1lKCh0PVVtKHQpKS5oLChyPVVtKHIpKS5oKSxpPVpuKHQucyxyLnMpLG89Wm4odC5sLHIubCksYT1abih0Lm9wYWNpdHksci5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIHQuaD1uKHMpLHQucz1pKHMpLHQubD1vKHMpLHQub3BhY2l0eT1hKHMpLHQrIiJ9fX12YXIgWXl0PVd5dChxbSksanl0PVd5dChabik7ZnVuY3Rpb24gRV8oZSx0KXt2YXIgcj1abigoZT1TXyhlKSkubCwodD1TXyh0KSkubCksbj1abihlLmEsdC5hKSxpPVpuKGUuYix0LmIpLG89Wm4oZS5vcGFjaXR5LHQub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBlLmw9cihhKSxlLmE9bihhKSxlLmI9aShhKSxlLm9wYWNpdHk9byhhKSxlKyIifX1mdW5jdGlvbiBYeXQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7dmFyIG49ZSgodD1nYih0KSkuaCwocj1nYihyKSkuaCksaT1abih0LmMsci5jKSxvPVpuKHQubCxyLmwpLGE9Wm4odC5vcGFjaXR5LHIub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiB0Lmg9bihzKSx0LmM9aShzKSx0Lmw9byhzKSx0Lm9wYWNpdHk9YShzKSx0KyIifX19dmFyICR5dD1YeXQocW0pLEt5dD1YeXQoWm4pO2Z1bmN0aW9uIFp5dChlKXtyZXR1cm4gZnVuY3Rpb24gdChyKXtyPStyO2Z1bmN0aW9uIG4oaSxvKXt2YXIgYT1lKChpPWNhKGkpKS5oLChvPWNhKG8pKS5oKSxzPVpuKGkucyxvLnMpLGw9Wm4oaS5sLG8ubCksYz1abihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkuaD1hKHUpLGkucz1zKHUpLGkubD1sKE1hdGgucG93KHUscikpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPXQsbn0oMSl9dmFyIEp5dD1aeXQocW0pLFRfPVp5dChabik7ZnVuY3Rpb24gZFkoZSx0KXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoLTEsaT10WzBdLG89bmV3IEFycmF5KG48MD8wOm4pO3I8bjspb1tyXT1lKGksaT10Wysrcl0pO3JldHVybiBmdW5jdGlvbihhKXt2YXIgcz1NYXRoLm1heCgwLE1hdGgubWluKG4tMSxNYXRoLmZsb29yKGEqPW4pKSk7cmV0dXJuIG9bc10oYS1zKX19ZnVuY3Rpb24gUXl0KGUsdCl7Zm9yKHZhciByPW5ldyBBcnJheSh0KSxuPTA7bjx0OysrbilyW25dPWUobi8odC0xKSk7cmV0dXJuIHJ9Um0oKTt2YXIgeGI9MCxORT0wLFJFPTAsZXZ0PTFlMyx4TCxERSxiTD0wLENfPTAsd0w9MCxPRT10eXBlb2YgcGVyZm9ybWFuY2U9PSJvYmplY3QiJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxydnQ9dHlwZW9mIHdpbmRvdz09Im9iamVjdCImJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24oZSl7c2V0VGltZW91dChlLDE3KX07ZnVuY3Rpb24gUHAoKXtyZXR1cm4gQ198fChydnQoRXdlKSxDXz1PRS5ub3coKSt3TCl9ZnVuY3Rpb24gRXdlKCl7Q189MH1mdW5jdGlvbiBBXygpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9QV8ucHJvdG90eXBlPVBfLnByb3RvdHlwZT17Y29uc3RydWN0b3I6QV8scmVzdGFydDpmdW5jdGlvbihlLHQscil7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtyPShyPT1udWxsP1BwKCk6K3IpKyh0PT1udWxsPzA6K3QpLCF0aGlzLl9uZXh0JiZERSE9PXRoaXMmJihERT9ERS5fbmV4dD10aGlzOnhMPXRoaXMsREU9dGhpcyksdGhpcy5fY2FsbD1lLHRoaXMuX3RpbWU9cixtWSgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxtWSgpKX19O2Z1bmN0aW9uIFBfKGUsdCxyKXt2YXIgbj1uZXcgQV87cmV0dXJuIG4ucmVzdGFydChlLHQsciksbn1mdW5jdGlvbiBnWSgpe1BwKCksKyt4Yjtmb3IodmFyIGU9eEwsdDtlOykodD1DXy1lLl90aW1lKT49MCYmZS5fY2FsbC5jYWxsKG51bGwsdCksZT1lLl9uZXh0Oy0teGJ9ZnVuY3Rpb24gdHZ0KCl7Q189KGJMPU9FLm5vdygpKSt3TCx4Yj1ORT0wO3RyeXtnWSgpfWZpbmFsbHl7eGI9MCxDd2UoKSxDXz0wfX1mdW5jdGlvbiBUd2UoKXt2YXIgZT1PRS5ub3coKSx0PWUtYkw7dD5ldnQmJih3TC09dCxiTD1lKX1mdW5jdGlvbiBDd2UoKXtmb3IodmFyIGUsdD14TCxyLG49MS8wO3Q7KXQuX2NhbGw/KG4+dC5fdGltZSYmKG49dC5fdGltZSksZT10LHQ9dC5fbmV4dCk6KHI9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1lP2UuX25leHQ9cjp4TD1yKTtERT1lLG1ZKG4pfWZ1bmN0aW9uIG1ZKGUpe2lmKCF4Yil7TkUmJihORT1jbGVhclRpbWVvdXQoTkUpKTt2YXIgdD1lLUNfO3Q+MjQ/KGU8MS8wJiYoTkU9c2V0VGltZW91dCh0dnQsZS1PRS5ub3coKS13TCkpLFJFJiYoUkU9Y2xlYXJJbnRlcnZhbChSRSkpKTooUkV8fChiTD1PRS5ub3coKSxSRT1zZXRJbnRlcnZhbChUd2UsZXZ0KSkseGI9MSxydnQodHZ0KSl9fWZ1bmN0aW9uIHpFKGUsdCxyKXt2YXIgbj1uZXcgQV87cmV0dXJuIHQ9dD09bnVsbD8wOit0LG4ucmVzdGFydChmdW5jdGlvbihpKXtuLnN0b3AoKSxlKGkrdCl9LHQsciksbn1mdW5jdGlvbiBudnQoZSx0LHIpe3ZhciBuPW5ldyBBXyxpPXQ7cmV0dXJuIHQ9PW51bGw/KG4ucmVzdGFydChlLHQsciksbik6KHQ9K3Qscj1yPT1udWxsP1BwKCk6K3Isbi5yZXN0YXJ0KGZ1bmN0aW9uIG8oYSl7YSs9aSxuLnJlc3RhcnQobyxpKz10LHIpLGUoYSl9LHQsciksbil9dmFyIEF3ZT14cygic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxQd2U9W10sb3Z0PTAsTUw9MSxFTD0yLFNMPTMsaXZ0PTQsVEw9NSxGRT02O2Z1bmN0aW9uIFdtKGUsdCxyLG4saSxvKXt2YXIgYT1lLl9fdHJhbnNpdGlvbjtpZighYSllLl9fdHJhbnNpdGlvbj17fTtlbHNlIGlmKHIgaW4gYSlyZXR1cm47SXdlKGUscix7bmFtZTp0LGluZGV4Om4sZ3JvdXA6aSxvbjpBd2UsdHdlZW46UHdlLHRpbWU6by50aW1lLGRlbGF5Om8uZGVsYXksZHVyYXRpb246by5kdXJhdGlvbixlYXNlOm8uZWFzZSx0aW1lcjpudWxsLHN0YXRlOm92dH0pfWZ1bmN0aW9uIEJFKGUsdCl7dmFyIHI9WmkoZSx0KTtpZihyLnN0YXRlPm92dCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiByfWZ1bmN0aW9uIHphKGUsdCl7dmFyIHI9WmkoZSx0KTtpZihyLnN0YXRlPlNMKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiByfWZ1bmN0aW9uIFppKGUsdCl7dmFyIHI9ZS5fX3RyYW5zaXRpb247aWYoIXJ8fCEocj1yW3RdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIHJ9ZnVuY3Rpb24gSXdlKGUsdCxyKXt2YXIgbj1lLl9fdHJhbnNpdGlvbixpO25bdF09cixyLnRpbWVyPVBfKG8sMCxyLnRpbWUpO2Z1bmN0aW9uIG8oYyl7ci5zdGF0ZT1NTCxyLnRpbWVyLnJlc3RhcnQoYSxyLmRlbGF5LHIudGltZSksci5kZWxheTw9YyYmYShjLXIuZGVsYXkpfWZ1bmN0aW9uIGEoYyl7dmFyIHUsaCxmLHA7aWYoci5zdGF0ZSE9PU1MKXJldHVybiBsKCk7Zm9yKHUgaW4gbilpZihwPW5bdV0scC5uYW1lPT09ci5uYW1lKXtpZihwLnN0YXRlPT09U0wpcmV0dXJuIHpFKGEpO3Auc3RhdGU9PT1pdnQ/KHAuc3RhdGU9RkUscC50aW1lci5zdG9wKCkscC5vbi5jYWxsKCJpbnRlcnJ1cHQiLGUsZS5fX2RhdGFfXyxwLmluZGV4LHAuZ3JvdXApLGRlbGV0ZSBuW3VdKTordTx0JiYocC5zdGF0ZT1GRSxwLnRpbWVyLnN0b3AoKSxwLm9uLmNhbGwoImNhbmNlbCIsZSxlLl9fZGF0YV9fLHAuaW5kZXgscC5ncm91cCksZGVsZXRlIG5bdV0pfWlmKHpFKGZ1bmN0aW9uKCl7ci5zdGF0ZT09PVNMJiYoci5zdGF0ZT1pdnQsci50aW1lci5yZXN0YXJ0KHMsci5kZWxheSxyLnRpbWUpLHMoYykpfSksci5zdGF0ZT1FTCxyLm9uLmNhbGwoInN0YXJ0IixlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxyLnN0YXRlPT09RUwpe2ZvcihyLnN0YXRlPVNMLGk9bmV3IEFycmF5KGY9ci50d2Vlbi5sZW5ndGgpLHU9MCxoPS0xO3U8ZjsrK3UpKHA9ci50d2Vlblt1XS52YWx1ZS5jYWxsKGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApKSYmKGlbKytoXT1wKTtpLmxlbmd0aD1oKzF9fWZ1bmN0aW9uIHMoYyl7Zm9yKHZhciB1PWM8ci5kdXJhdGlvbj9yLmVhc2UuY2FsbChudWxsLGMvci5kdXJhdGlvbik6KHIudGltZXIucmVzdGFydChsKSxyLnN0YXRlPVRMLDEpLGg9LTEsZj1pLmxlbmd0aDsrK2g8ZjspaVtoXS5jYWxsKGUsdSk7ci5zdGF0ZT09PVRMJiYoci5vbi5jYWxsKCJlbmQiLGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApLGwoKSl9ZnVuY3Rpb24gbCgpe3Iuc3RhdGU9RkUsci50aW1lci5zdG9wKCksZGVsZXRlIG5bdF07Zm9yKHZhciBjIGluIG4pcmV0dXJuO2RlbGV0ZSBlLl9fdHJhbnNpdGlvbn19ZnVuY3Rpb24gaHUoZSx0KXt2YXIgcj1lLl9fdHJhbnNpdGlvbixuLGksbz0hMCxhO2lmKCEhcil7dD10PT1udWxsP251bGw6dCsiIjtmb3IoYSBpbiByKXtpZigobj1yW2FdKS5uYW1lIT09dCl7bz0hMTtjb250aW51ZX1pPW4uc3RhdGU+RUwmJm4uc3RhdGU8VEwsbi5zdGF0ZT1GRSxuLnRpbWVyLnN0b3AoKSxuLm9uLmNhbGwoaT8iaW50ZXJydXB0IjoiY2FuY2VsIixlLGUuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxkZWxldGUgclthXX1vJiZkZWxldGUgZS5fX3RyYW5zaXRpb259fWZ1bmN0aW9uIGF2dChlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7aHUodGhpcyxlKX0pfWZ1bmN0aW9uIEx3ZShlLHQpe3ZhciByLG47cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9emEodGhpcyxlKSxvPWkudHdlZW47aWYobyE9PXIpe249cj1vO2Zvcih2YXIgYT0wLHM9bi5sZW5ndGg7YTxzOysrYSlpZihuW2FdLm5hbWU9PT10KXtuPW4uc2xpY2UoKSxuLnNwbGljZShhLDEpO2JyZWFrfX1pLnR3ZWVuPW59fWZ1bmN0aW9uIGt3ZShlLHQscil7dmFyIG4saTtpZih0eXBlb2YgciE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89emEodGhpcyxlKSxhPW8udHdlZW47aWYoYSE9PW4pe2k9KG49YSkuc2xpY2UoKTtmb3IodmFyIHM9e25hbWU6dCx2YWx1ZTpyfSxsPTAsYz1pLmxlbmd0aDtsPGM7KytsKWlmKGlbbF0ubmFtZT09PXQpe2lbbF09czticmVha31sPT09YyYmaS5wdXNoKHMpfW8udHdlZW49aX19ZnVuY3Rpb24gc3Z0KGUsdCl7dmFyIHI9dGhpcy5faWQ7aWYoZSs9IiIsYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIG49WmkodGhpcy5ub2RlKCkscikudHdlZW4saT0wLG89bi5sZW5ndGgsYTtpPG87KytpKWlmKChhPW5baV0pLm5hbWU9PT1lKXJldHVybiBhLnZhbHVlO3JldHVybiBudWxsfXJldHVybiB0aGlzLmVhY2goKHQ9PW51bGw/THdlOmt3ZSkocixlLHQpKX1mdW5jdGlvbiBiYihlLHQscil7dmFyIG49ZS5faWQ7cmV0dXJuIGUuZWFjaChmdW5jdGlvbigpe3ZhciBpPXphKHRoaXMsbik7KGkudmFsdWV8fChpLnZhbHVlPXt9KSlbdF09ci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxmdW5jdGlvbihpKXtyZXR1cm4gWmkoaSxuKS52YWx1ZVt0XX19ZnVuY3Rpb24gQ0woZSx0KXt2YXIgcjtyZXR1cm4odHlwZW9mIHQ9PSJudW1iZXIiP3ppOnQgaW5zdGFuY2VvZiByYz9HbToocj1yYyh0KSk/KHQ9cixHbSk6dmIpKGUsdCl9ZnVuY3Rpb24gUndlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBOd2UoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBEd2UoZSx0LHIpe3ZhciBuLGk9cisiIixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlKGUpO3JldHVybiBhPT09aT9udWxsOmE9PT1uP286bz10KG49YSxyKX19ZnVuY3Rpb24gT3dlKGUsdCxyKXt2YXIgbixpPXIrIiIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk7cmV0dXJuIGE9PT1pP251bGw6YT09PW4/bzpvPXQobj1hLHIpfX1mdW5jdGlvbiB6d2UoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKGUpOihhPXRoaXMuZ2V0QXR0cmlidXRlKGUpLGw9cysiIixhPT09bD9udWxsOmE9PT1uJiZsPT09aT9vOihpPWwsbz10KG49YSxzKSkpfX1mdW5jdGlvbiBGd2UoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTooYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCksbD1zKyIiLGE9PT1sP251bGw6YT09PW4mJmw9PT1pP286KGk9bCxvPXQobj1hLHMpKSl9fWZ1bmN0aW9uIGx2dChlLHQpe3ZhciByPUloKGUpLG49cj09PSJ0cmFuc2Zvcm0iP3lMOkNMO3JldHVybiB0aGlzLmF0dHJUd2VlbihlLHR5cGVvZiB0PT0iZnVuY3Rpb24iPyhyLmxvY2FsP0Z3ZTp6d2UpKHIsbixiYih0aGlzLCJhdHRyLiIrZSx0KSk6dD09bnVsbD8oci5sb2NhbD9Od2U6UndlKShyKTooci5sb2NhbD9Pd2U6RHdlKShyLG4sdCkpfWZ1bmN0aW9uIEJ3ZShlLHQpe3JldHVybiBmdW5jdGlvbihyKXt0aGlzLnNldEF0dHJpYnV0ZShlLHQuY2FsbCh0aGlzLHIpKX19ZnVuY3Rpb24gSHdlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQuY2FsbCh0aGlzLHIpKX19ZnVuY3Rpb24gVndlKGUsdCl7dmFyIHIsbjtmdW5jdGlvbiBpKCl7dmFyIG89dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG8hPT1uJiYocj0obj1vKSYmSHdlKGUsbykpLHJ9cmV0dXJuIGkuX3ZhbHVlPXQsaX1mdW5jdGlvbiBVd2UoZSx0KXt2YXIgcixuO2Z1bmN0aW9uIGkoKXt2YXIgbz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbyE9PW4mJihyPShuPW8pJiZCd2UoZSxvKSkscn1yZXR1cm4gaS5fdmFsdWU9dCxpfWZ1bmN0aW9uIGN2dChlLHQpe3ZhciByPSJhdHRyLiIrZTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKHI9dGhpcy50d2VlbihyKSkmJnIuX3ZhbHVlO2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4ocixudWxsKTtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7dmFyIG49SWgoZSk7cmV0dXJuIHRoaXMudHdlZW4ociwobi5sb2NhbD9Wd2U6VXdlKShuLHQpKX1mdW5jdGlvbiBxd2UoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtCRSh0aGlzLGUpLmRlbGF5PSt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gR3dlKGUsdCl7cmV0dXJuIHQ9K3QsZnVuY3Rpb24oKXtCRSh0aGlzLGUpLmRlbGF5PXR9fWZ1bmN0aW9uIHV2dChlKXt2YXIgdD10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKHR5cGVvZiBlPT0iZnVuY3Rpb24iP3F3ZTpHd2UpKHQsZSkpOlppKHRoaXMubm9kZSgpLHQpLmRlbGF5fWZ1bmN0aW9uIFd3ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3phKHRoaXMsZSkuZHVyYXRpb249K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBZd2UoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe3phKHRoaXMsZSkuZHVyYXRpb249dH19ZnVuY3Rpb24gaHZ0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/V3dlOll3ZSkodCxlKSk6WmkodGhpcy5ub2RlKCksdCkuZHVyYXRpb259ZnVuY3Rpb24gandlKGUsdCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3phKHRoaXMsZSkuZWFzZT10fX1mdW5jdGlvbiBmdnQoZSl7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGp3ZSh0LGUpKTpaaSh0aGlzLm5vZGUoKSx0KS5lYXNlfWZ1bmN0aW9uIHB2dChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9dWIoZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSlmb3IodmFyIG89dFtpXSxhPW8ubGVuZ3RoLHM9bltpXT1bXSxsLGM9MDtjPGE7KytjKShsPW9bY10pJiZlLmNhbGwobCxsLl9fZGF0YV9fLGMsbykmJnMucHVzaChsKTtyZXR1cm4gbmV3IEZvKG4sdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX1mdW5jdGlvbiBkdnQoZSl7aWYoZS5faWQhPT10aGlzLl9pZCl0aHJvdyBuZXcgRXJyb3I7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPWUuX2dyb3VwcyxuPXQubGVuZ3RoLGk9ci5sZW5ndGgsbz1NYXRoLm1pbihuLGkpLGE9bmV3IEFycmF5KG4pLHM9MDtzPG87KytzKWZvcih2YXIgbD10W3NdLGM9cltzXSx1PWwubGVuZ3RoLGg9YVtzXT1uZXcgQXJyYXkodSksZixwPTA7cDx1OysrcCkoZj1sW3BdfHxjW3BdKSYmKGhbcF09Zik7Zm9yKDtzPG47KytzKWFbc109dFtzXTtyZXR1cm4gbmV3IEZvKGEsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX1mdW5jdGlvbiBYd2UoZSl7cmV0dXJuKGUrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbih0KXt2YXIgcj10LmluZGV4T2YoIi4iKTtyZXR1cm4gcj49MCYmKHQ9dC5zbGljZSgwLHIpKSwhdHx8dD09PSJzdGFydCJ9KX1mdW5jdGlvbiAkd2UoZSx0LHIpe3ZhciBuLGksbz1Yd2UodCk/QkU6emE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9byh0aGlzLGUpLHM9YS5vbjtzIT09biYmKGk9KG49cykuY29weSgpKS5vbih0LHIpLGEub249aX19ZnVuY3Rpb24gbXZ0KGUsdCl7dmFyIHI9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9aaSh0aGlzLm5vZGUoKSxyKS5vbi5vbihlKTp0aGlzLmVhY2goJHdlKHIsZSx0KSl9ZnVuY3Rpb24gS3dlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTtmb3IodmFyIHIgaW4gdGhpcy5fX3RyYW5zaXRpb24paWYoK3IhPT1lKXJldHVybjt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfX1mdW5jdGlvbiBndnQoKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsS3dlKHRoaXMuX2lkKSl9ZnVuY3Rpb24gX3Z0KGUpe3ZhciB0PXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9RG0oZSkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPW5ldyBBcnJheShpKSxhPTA7YTxpOysrYSlmb3IodmFyIHM9blthXSxsPXMubGVuZ3RoLGM9b1thXT1uZXcgQXJyYXkobCksdSxoLGY9MDtmPGw7KytmKSh1PXNbZl0pJiYoaD1lLmNhbGwodSx1Ll9fZGF0YV9fLGYscykpJiYoIl9fZGF0YV9fImluIHUmJihoLl9fZGF0YV9fPXUuX19kYXRhX18pLGNbZl09aCxXbShjW2ZdLHQscixmLGMsWmkodSxyKSkpO3JldHVybiBuZXcgRm8obyx0aGlzLl9wYXJlbnRzLHQscil9ZnVuY3Rpb24geXZ0KGUpe3ZhciB0PXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9Y2IoZSkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPVtdLGE9W10scz0wO3M8aTsrK3MpZm9yKHZhciBsPW5bc10sYz1sLmxlbmd0aCx1LGg9MDtoPGM7KytoKWlmKHU9bFtoXSl7Zm9yKHZhciBmPWUuY2FsbCh1LHUuX19kYXRhX18saCxsKSxwLGQ9WmkodSxyKSxnPTAsXz1mLmxlbmd0aDtnPF87KytnKShwPWZbZ10pJiZXbShwLHQscixnLGYsZCk7by5wdXNoKGYpLGEucHVzaCh1KX1yZXR1cm4gbmV3IEZvKG8sYSx0LHIpfXZhciBad2U9TGgucHJvdG90eXBlLmNvbnN0cnVjdG9yO2Z1bmN0aW9uIHZ2dCgpe3JldHVybiBuZXcgWndlKHRoaXMuX2dyb3Vwcyx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBKd2UoZSx0KXt2YXIgcixuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89TXAodGhpcyxlKSxhPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLE1wKHRoaXMsZSkpO3JldHVybiBvPT09YT9udWxsOm89PT1yJiZhPT09bj9pOmk9dChyPW8sbj1hKX19ZnVuY3Rpb24geHZ0KGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIFF3ZShlLHQscil7dmFyIG4saT1yKyIiLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9TXAodGhpcyxlKTtyZXR1cm4gYT09PWk/bnVsbDphPT09bj9vOm89dChuPWEscil9fWZ1bmN0aW9uIHRTZShlLHQscil7dmFyIG4saSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPU1wKHRoaXMsZSkscz1yKHRoaXMpLGw9cysiIjtyZXR1cm4gcz09bnVsbCYmKGw9cz0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKSxNcCh0aGlzLGUpKSksYT09PWw/bnVsbDphPT09biYmbD09PWk/bzooaT1sLG89dChuPWEscykpfX1mdW5jdGlvbiBlU2UoZSx0KXt2YXIgcixuLGksbz0ic3R5bGUuIit0LGE9ImVuZC4iK28scztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD16YSh0aGlzLGUpLGM9bC5vbix1PWwudmFsdWVbb109PW51bGw/c3x8KHM9eHZ0KHQpKTp2b2lkIDA7KGMhPT1yfHxpIT09dSkmJihuPShyPWMpLmNvcHkoKSkub24oYSxpPXUpLGwub249bn19ZnVuY3Rpb24gYnZ0KGUsdCxyKXt2YXIgbj0oZSs9IiIpPT0idHJhbnNmb3JtIj9fTDpDTDtyZXR1cm4gdD09bnVsbD90aGlzLnN0eWxlVHdlZW4oZSxKd2UoZSxuKSkub24oImVuZC5zdHlsZS4iK2UseHZ0KGUpKTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90aGlzLnN0eWxlVHdlZW4oZSx0U2UoZSxuLGJiKHRoaXMsInN0eWxlLiIrZSx0KSkpLmVhY2goZVNlKHRoaXMuX2lkLGUpKTp0aGlzLnN0eWxlVHdlZW4oZSxRd2UoZSxuLHQpLHIpLm9uKCJlbmQuc3R5bGUuIitlLG51bGwpfWZ1bmN0aW9uIHJTZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKG4pe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSx0LmNhbGwodGhpcyxuKSxyKX19ZnVuY3Rpb24gblNlKGUsdCxyKXt2YXIgbixpO2Z1bmN0aW9uIG8oKXt2YXIgYT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gYSE9PWkmJihuPShpPWEpJiZyU2UoZSxhLHIpKSxufXJldHVybiBvLl92YWx1ZT10LG99ZnVuY3Rpb24gd3Z0KGUsdCxyKXt2YXIgbj0ic3R5bGUuIisoZSs9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4obj10aGlzLnR3ZWVuKG4pKSYmbi5fdmFsdWU7aWYodD09bnVsbClyZXR1cm4gdGhpcy50d2VlbihuLG51bGwpO2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihuLG5TZShlLHQscj09bnVsbD8iIjpyKSl9ZnVuY3Rpb24gaVNlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9ZX19ZnVuY3Rpb24gb1NlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUodGhpcyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIFN2dChlKXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsdHlwZW9mIGU9PSJmdW5jdGlvbiI/b1NlKGJiKHRoaXMsInRleHQiLGUpKTppU2UoZT09bnVsbD8iIjplKyIiKSl9ZnVuY3Rpb24gYVNlKGUpe3JldHVybiBmdW5jdGlvbih0KXt0aGlzLnRleHRDb250ZW50PWUuY2FsbCh0aGlzLHQpfX1mdW5jdGlvbiBzU2UoZSl7dmFyIHQscjtmdW5jdGlvbiBuKCl7dmFyIGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGkhPT1yJiYodD0ocj1pKSYmYVNlKGkpKSx0fXJldHVybiBuLl92YWx1ZT1lLG59ZnVuY3Rpb24gTXZ0KGUpe3ZhciB0PSJ0ZXh0IjtpZihhcmd1bWVudHMubGVuZ3RoPDEpcmV0dXJuKHQ9dGhpcy50d2Vlbih0KSkmJnQuX3ZhbHVlO2lmKGU9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4odCxudWxsKTtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4odCxzU2UoZSkpfWZ1bmN0aW9uIEV2dCgpe2Zvcih2YXIgZT10aGlzLl9uYW1lLHQ9dGhpcy5faWQscj1BTCgpLG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsbz0wO288aTsrK28pZm9yKHZhciBhPW5bb10scz1hLmxlbmd0aCxsLGM9MDtjPHM7KytjKWlmKGw9YVtjXSl7dmFyIHU9WmkobCx0KTtXbShsLGUscixjLGEse3RpbWU6dS50aW1lK3UuZGVsYXkrdS5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOnUuZHVyYXRpb24sZWFzZTp1LmVhc2V9KX1yZXR1cm4gbmV3IEZvKG4sdGhpcy5fcGFyZW50cyxlLHIpfWZ1bmN0aW9uIFR2dCgpe3ZhciBlLHQscj10aGlzLG49ci5faWQsaT1yLnNpemUoKTtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obyxhKXt2YXIgcz17dmFsdWU6YX0sbD17dmFsdWU6ZnVuY3Rpb24oKXstLWk9PT0wJiZvKCl9fTtyLmVhY2goZnVuY3Rpb24oKXt2YXIgYz16YSh0aGlzLG4pLHU9Yy5vbjt1IT09ZSYmKHQ9KGU9dSkuY29weSgpLHQuXy5jYW5jZWwucHVzaChzKSx0Ll8uaW50ZXJydXB0LnB1c2gocyksdC5fLmVuZC5wdXNoKGwpKSxjLm9uPXR9KX0pfXZhciBsU2U9MDtmdW5jdGlvbiBGbyhlLHQscixuKXt0aGlzLl9ncm91cHM9ZSx0aGlzLl9wYXJlbnRzPXQsdGhpcy5fbmFtZT1yLHRoaXMuX2lkPW59ZnVuY3Rpb24gUEwoZSl7cmV0dXJuIExoKCkudHJhbnNpdGlvbihlKX1mdW5jdGlvbiBBTCgpe3JldHVybisrbFNlfXZhciB3Yj1MaC5wcm90b3R5cGU7Rm8ucHJvdG90eXBlPVBMLnByb3RvdHlwZT17Y29uc3RydWN0b3I6Rm8sc2VsZWN0Ol92dCxzZWxlY3RBbGw6eXZ0LGZpbHRlcjpwdnQsbWVyZ2U6ZHZ0LHNlbGVjdGlvbjp2dnQsdHJhbnNpdGlvbjpFdnQsY2FsbDp3Yi5jYWxsLG5vZGVzOndiLm5vZGVzLG5vZGU6d2Iubm9kZSxzaXplOndiLnNpemUsZW1wdHk6d2IuZW1wdHksZWFjaDp3Yi5lYWNoLG9uOm12dCxhdHRyOmx2dCxhdHRyVHdlZW46Y3Z0LHN0eWxlOmJ2dCxzdHlsZVR3ZWVuOnd2dCx0ZXh0OlN2dCx0ZXh0VHdlZW46TXZ0LHJlbW92ZTpndnQsdHdlZW46c3Z0LGRlbGF5OnV2dCxkdXJhdGlvbjpodnQsZWFzZTpmdnQsZW5kOlR2dH07TF8oKTt2YXIgVVk9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOmJzfTtmdW5jdGlvbiBfU2UoZSx0KXtmb3IodmFyIHI7IShyPWUuX190cmFuc2l0aW9uKXx8IShyPXJbdF0pOylpZighKGU9ZS5wYXJlbnROb2RlKSlyZXR1cm4gVVkudGltZT1QcCgpLFVZO3JldHVybiByfWZ1bmN0aW9uIEh2dChlKXt2YXIgdCxyO2UgaW5zdGFuY2VvZiBGbz8odD1lLl9pZCxlPWUuX25hbWUpOih0PUFMKCksKHI9VVkpLnRpbWU9UHAoKSxlPWU9PW51bGw/bnVsbDplKyIiKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsbz0wO288aTsrK28pZm9yKHZhciBhPW5bb10scz1hLmxlbmd0aCxsLGM9MDtjPHM7KytjKShsPWFbY10pJiZXbShsLGUsdCxjLGEscnx8X1NlKGwsdCkpO3JldHVybiBuZXcgRm8obix0aGlzLl9wYXJlbnRzLGUsdCl9TGgucHJvdG90eXBlLmludGVycnVwdD1hdnQ7TGgucHJvdG90eXBlLnRyYW5zaXRpb249SHZ0O3ZhciB5U2U9W251bGxdO2Z1bmN0aW9uIFZ2dChlLHQpe3ZhciByPWUuX190cmFuc2l0aW9uLG4saTtpZihyKXt0PXQ9PW51bGw/bnVsbDp0KyIiO2ZvcihpIGluIHIpaWYoKG49cltpXSkuc3RhdGU+TUwmJm4ubmFtZT09PXQpcmV0dXJuIG5ldyBGbyhbW2VdXSx5U2UsdCwraSl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gRkwoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIFV2dChlLHQscil7dGhpcy50YXJnZXQ9ZSx0aGlzLnR5cGU9dCx0aGlzLnNlbGVjdGlvbj1yfWZ1bmN0aW9uIHFZKCl7cXQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gQkwoKXtxdC5wcmV2ZW50RGVmYXVsdCgpLHF0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciBxdnQ9e25hbWU6ImRyYWcifSxHWT17bmFtZToic3BhY2UifSxNYj17bmFtZToiaGFuZGxlIn0sRWI9e25hbWU6ImNlbnRlciJ9O2Z1bmN0aW9uIEd2dChlKXtyZXR1cm5bK2VbMF0sK2VbMV1dfWZ1bmN0aW9uIFlZKGUpe3JldHVybltHdnQoZVswXSksR3Z0KGVbMV0pXX1mdW5jdGlvbiB2U2UoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBDcCh0LHF0LnRvdWNoZXMsZSl9fXZhciBITD17bmFtZToieCIsaGFuZGxlczpbInciLCJlIl0ubWFwKEhFKSxpbnB1dDpmdW5jdGlvbihlLHQpe3JldHVybiBlPT1udWxsP251bGw6W1srZVswXSx0WzBdWzFdXSxbK2VbMV0sdFsxXVsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJltlWzBdWzBdLGVbMV1bMF1dfX0sVkw9e25hbWU6InkiLGhhbmRsZXM6WyJuIiwicyJdLm1hcChIRSksaW5wdXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09bnVsbD9udWxsOltbdFswXVswXSwrZVswXV0sW3RbMV1bMF0sK2VbMV1dXX0sb3V0cHV0OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZbZVswXVsxXSxlWzFdWzFdXX19LHhTZT17bmFtZToieHkiLGhhbmRsZXM6WyJuIiwidyIsImUiLCJzIiwibnciLCJuZSIsInN3Iiwic2UiXS5tYXAoSEUpLGlucHV0OmZ1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsP251bGw6WVkoZSl9LG91dHB1dDpmdW5jdGlvbihlKXtyZXR1cm4gZX19LElwPXtvdmVybGF5OiJjcm9zc2hhaXIiLHNlbGVjdGlvbjoibW92ZSIsbjoibnMtcmVzaXplIixlOiJldy1yZXNpemUiLHM6Im5zLXJlc2l6ZSIsdzoiZXctcmVzaXplIixudzoibndzZS1yZXNpemUiLG5lOiJuZXN3LXJlc2l6ZSIsc2U6Im53c2UtcmVzaXplIixzdzoibmVzdy1yZXNpemUifSxXdnQ9e2U6InciLHc6ImUiLG53OiJuZSIsbmU6Im53IixzZToic3ciLHN3OiJzZSJ9LFl2dD17bjoicyIsczoibiIsbnc6InN3IixuZToic2UiLHNlOiJuZSIsc3c6Im53In0sYlNlPXtvdmVybGF5OjEsc2VsZWN0aW9uOjEsbjpudWxsLGU6MSxzOm51bGwsdzotMSxudzotMSxuZToxLHNlOjEsc3c6LTF9LHdTZT17b3ZlcmxheToxLHNlbGVjdGlvbjoxLG46LTEsZTpudWxsLHM6MSx3Om51bGwsbnc6LTEsbmU6LTEsc2U6MSxzdzoxfTtmdW5jdGlvbiBIRShlKXtyZXR1cm57dHlwZTplfX1mdW5jdGlvbiBTU2UoKXtyZXR1cm4hcXQuY3RybEtleSYmIXF0LmJ1dHRvbn1mdW5jdGlvbiBNU2UoKXt2YXIgZT10aGlzLm93bmVyU1ZHRWxlbWVudHx8dGhpcztyZXR1cm4gZS5oYXNBdHRyaWJ1dGUoInZpZXdCb3giKT8oZT1lLnZpZXdCb3guYmFzZVZhbCxbW2UueCxlLnldLFtlLngrZS53aWR0aCxlLnkrZS5oZWlnaHRdXSk6W1swLDBdLFtlLndpZHRoLmJhc2VWYWwudmFsdWUsZS5oZWlnaHQuYmFzZVZhbC52YWx1ZV1dfWZ1bmN0aW9uIEVTZSgpe3JldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHN8fCJvbnRvdWNoc3RhcnQiaW4gdGhpc31mdW5jdGlvbiBXWShlKXtmb3IoOyFlLl9fYnJ1c2g7KWlmKCEoZT1lLnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gZS5fX2JydXNofWZ1bmN0aW9uIFRTZShlKXtyZXR1cm4gZVswXVswXT09PWVbMV1bMF18fGVbMF1bMV09PT1lWzFdWzFdfWZ1bmN0aW9uIFVMKGUpe3ZhciB0PWUuX19icnVzaDtyZXR1cm4gdD90LmRpbS5vdXRwdXQodC5zZWxlY3Rpb24pOm51bGx9ZnVuY3Rpb24ganZ0KCl7cmV0dXJuIGpZKEhMKX1mdW5jdGlvbiBxTCgpe3JldHVybiBqWShWTCl9ZnVuY3Rpb24gR0woKXtyZXR1cm4galkoeFNlKX1mdW5jdGlvbiBqWShlKXt2YXIgdD1NU2Uscj1TU2Usbj1FU2UsaT0hMCxvPXhzKCJzdGFydCIsImJydXNoIiwiZW5kIiksYT02LHM7ZnVuY3Rpb24gbChfKXt2YXIgeT1fLnByb3BlcnR5KCJfX2JydXNoIixnKS5zZWxlY3RBbGwoIi5vdmVybGF5IikuZGF0YShbSEUoIm92ZXJsYXkiKV0pO3kuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsIm92ZXJsYXkiKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLmF0dHIoImN1cnNvciIsSXAub3ZlcmxheSkubWVyZ2UoeSkuZWFjaChmdW5jdGlvbigpe3ZhciBiPVdZKHRoaXMpLmV4dGVudDtIdCh0aGlzKS5hdHRyKCJ4IixiWzBdWzBdKS5hdHRyKCJ5IixiWzBdWzFdKS5hdHRyKCJ3aWR0aCIsYlsxXVswXS1iWzBdWzBdKS5hdHRyKCJoZWlnaHQiLGJbMV1bMV0tYlswXVsxXSl9KSxfLnNlbGVjdEFsbCgiLnNlbGVjdGlvbiIpLmRhdGEoW0hFKCJzZWxlY3Rpb24iKV0pLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJzZWxlY3Rpb24iKS5hdHRyKCJjdXJzb3IiLElwLnNlbGVjdGlvbikuYXR0cigiZmlsbCIsIiM3NzciKS5hdHRyKCJmaWxsLW9wYWNpdHkiLC4zKS5hdHRyKCJzdHJva2UiLCIjZmZmIikuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpO3ZhciB4PV8uc2VsZWN0QWxsKCIuaGFuZGxlIikuZGF0YShlLmhhbmRsZXMsZnVuY3Rpb24oYil7cmV0dXJuIGIudHlwZX0pO3guZXhpdCgpLnJlbW92ZSgpLHguZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oYil7cmV0dXJuImhhbmRsZSBoYW5kbGUtLSIrYi50eXBlfSkuYXR0cigiY3Vyc29yIixmdW5jdGlvbihiKXtyZXR1cm4gSXBbYi50eXBlXX0pLF8uZWFjaChjKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikub24oIm1vdXNlZG93bi5icnVzaCIsZikuZmlsdGVyKG4pLm9uKCJ0b3VjaHN0YXJ0LmJydXNoIixmKS5vbigidG91Y2htb3ZlLmJydXNoIixwKS5vbigidG91Y2hlbmQuYnJ1c2ggdG91Y2hjYW5jZWwuYnJ1c2giLGQpLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1sLm1vdmU9ZnVuY3Rpb24oXyx5KXtfLnNlbGVjdGlvbj9fLm9uKCJzdGFydC5icnVzaCIsZnVuY3Rpb24oKXt1KHRoaXMsYXJndW1lbnRzKS5iZWZvcmVzdGFydCgpLnN0YXJ0KCl9KS5vbigiaW50ZXJydXB0LmJydXNoIGVuZC5icnVzaCIsZnVuY3Rpb24oKXt1KHRoaXMsYXJndW1lbnRzKS5lbmQoKX0pLnR3ZWVuKCJicnVzaCIsZnVuY3Rpb24oKXt2YXIgeD10aGlzLGI9eC5fX2JydXNoLFM9dSh4LGFyZ3VtZW50cyksQz1iLnNlbGVjdGlvbixQPWUuaW5wdXQodHlwZW9mIHk9PSJmdW5jdGlvbiI/eS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6eSxiLmV4dGVudCksaz1uYyhDLFApO2Z1bmN0aW9uIE8oRCl7Yi5zZWxlY3Rpb249RD09PTEmJlA9PT1udWxsP251bGw6ayhEKSxjLmNhbGwoeCksUy5icnVzaCgpfXJldHVybiBDIT09bnVsbCYmUCE9PW51bGw/TzpPKDEpfSk6Xy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHg9dGhpcyxiPWFyZ3VtZW50cyxTPXguX19icnVzaCxDPWUuaW5wdXQodHlwZW9mIHk9PSJmdW5jdGlvbiI/eS5hcHBseSh4LGIpOnksUy5leHRlbnQpLFA9dSh4LGIpLmJlZm9yZXN0YXJ0KCk7aHUoeCksUy5zZWxlY3Rpb249Qz09PW51bGw/bnVsbDpDLGMuY2FsbCh4KSxQLnN0YXJ0KCkuYnJ1c2goKS5lbmQoKX0pfSxsLmNsZWFyPWZ1bmN0aW9uKF8pe2wubW92ZShfLG51bGwpfTtmdW5jdGlvbiBjKCl7dmFyIF89SHQodGhpcykseT1XWSh0aGlzKS5zZWxlY3Rpb247eT8oXy5zZWxlY3RBbGwoIi5zZWxlY3Rpb24iKS5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cigieCIseVswXVswXSkuYXR0cigieSIseVswXVsxXSkuYXR0cigid2lkdGgiLHlbMV1bMF0teVswXVswXSkuYXR0cigiaGVpZ2h0Iix5WzFdWzFdLXlbMF1bMV0pLF8uc2VsZWN0QWxsKCIuaGFuZGxlIikuc3R5bGUoImRpc3BsYXkiLG51bGwpLmF0dHIoIngiLGZ1bmN0aW9uKHgpe3JldHVybiB4LnR5cGVbeC50eXBlLmxlbmd0aC0xXT09PSJlIj95WzFdWzBdLWEvMjp5WzBdWzBdLWEvMn0pLmF0dHIoInkiLGZ1bmN0aW9uKHgpe3JldHVybiB4LnR5cGVbMF09PT0icyI/eVsxXVsxXS1hLzI6eVswXVsxXS1hLzJ9KS5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24oeCl7cmV0dXJuIHgudHlwZT09PSJuInx8eC50eXBlPT09InMiP3lbMV1bMF0teVswXVswXSthOmF9KS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKHgpe3JldHVybiB4LnR5cGU9PT0iZSJ8fHgudHlwZT09PSJ3Ij95WzFdWzFdLXlbMF1bMV0rYTphfSkpOl8uc2VsZWN0QWxsKCIuc2VsZWN0aW9uLC5oYW5kbGUiKS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKS5hdHRyKCJ4IixudWxsKS5hdHRyKCJ5IixudWxsKS5hdHRyKCJ3aWR0aCIsbnVsbCkuYXR0cigiaGVpZ2h0IixudWxsKX1mdW5jdGlvbiB1KF8seSx4KXt2YXIgYj1fLl9fYnJ1c2guZW1pdHRlcjtyZXR1cm4gYiYmKCF4fHwhYi5jbGVhbik/YjpuZXcgaChfLHkseCl9ZnVuY3Rpb24gaChfLHkseCl7dGhpcy50aGF0PV8sdGhpcy5hcmdzPXksdGhpcy5zdGF0ZT1fLl9fYnJ1c2gsdGhpcy5hY3RpdmU9MCx0aGlzLmNsZWFuPXh9aC5wcm90b3R5cGU9e2JlZm9yZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuKyt0aGlzLmFjdGl2ZT09PTEmJih0aGlzLnN0YXRlLmVtaXR0ZXI9dGhpcyx0aGlzLnN0YXJ0aW5nPSEwKSx0aGlzfSxzdGFydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0aW5nPyh0aGlzLnN0YXJ0aW5nPSExLHRoaXMuZW1pdCgic3RhcnQiKSk6dGhpcy5lbWl0KCJicnVzaCIpLHRoaXN9LGJydXNoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1pdCgiYnJ1c2giKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4tLXRoaXMuYWN0aXZlPT09MCYmKGRlbGV0ZSB0aGlzLnN0YXRlLmVtaXR0ZXIsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihfKXtFcChuZXcgVXZ0KGwsXyxlLm91dHB1dCh0aGlzLnN0YXRlLnNlbGVjdGlvbikpLG8uYXBwbHksbyxbXyx0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fTtmdW5jdGlvbiBmKCl7aWYocyYmIXF0LnRvdWNoZXN8fCFyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSlyZXR1cm47dmFyIF89dGhpcyx5PXF0LnRhcmdldC5fX2RhdGFfXy50eXBlLHg9KGkmJnF0Lm1ldGFLZXk/eT0ib3ZlcmxheSI6eSk9PT0ic2VsZWN0aW9uIj9xdnQ6aSYmcXQuYWx0S2V5P0ViOk1iLGI9ZT09PVZMP251bGw6YlNlW3ldLFM9ZT09PUhMP251bGw6d1NlW3ldLEM9V1koXyksUD1DLmV4dGVudCxrPUMuc2VsZWN0aW9uLE89UFswXVswXSxELEIsST1QWzBdWzFdLEwsUixGPVBbMV1bMF0seixVLFc9UFsxXVsxXSxaLHJ0LG90PTAsc3Q9MCxTdCxidD1iJiZTJiZpJiZxdC5zaGlmdEtleSxNdCxsdCxLdD1xdC50b3VjaGVzP3ZTZShxdC5jaGFuZ2VkVG91Y2hlc1swXS5pZGVudGlmaWVyKTp6byxfdD1LdChfKSxjdD1fdCxYPXUoXyxhcmd1bWVudHMsITApLmJlZm9yZXN0YXJ0KCk7eT09PSJvdmVybGF5Ij8oayYmKFN0PSEwKSxDLnNlbGVjdGlvbj1rPVtbRD1lPT09Vkw/TzpfdFswXSxMPWU9PT1ITD9JOl90WzFdXSxbej1lPT09Vkw/RjpELFo9ZT09PUhMP1c6TF1dKTooRD1rWzBdWzBdLEw9a1swXVsxXSx6PWtbMV1bMF0sWj1rWzFdWzFdKSxCPUQsUj1MLFU9eixydD1aO3ZhciBldD1IdChfKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKSxkdD1ldC5zZWxlY3RBbGwoIi5vdmVybGF5IikuYXR0cigiY3Vyc29yIixJcFt5XSk7aWYocXQudG91Y2hlcylYLm1vdmVkPXB0LFguZW5kZWQ9d3Q7ZWxzZXt2YXIgcT1IdChxdC52aWV3KS5vbigibW91c2Vtb3ZlLmJydXNoIixwdCwhMCkub24oIm1vdXNldXAuYnJ1c2giLHd0LCEwKTtpJiZxLm9uKCJrZXlkb3duLmJydXNoIixrdCwhMCkub24oImtleXVwLmJydXNoIixpZSwhMCksRm0ocXQudmlldyl9cVkoKSxodShfKSxjLmNhbGwoXyksWC5zdGFydCgpO2Z1bmN0aW9uIHB0KCl7dmFyIGVlPUt0KF8pO2J0JiYhTXQmJiFsdCYmKE1hdGguYWJzKGVlWzBdLWN0WzBdKT5NYXRoLmFicyhlZVsxXS1jdFsxXSk/bHQ9ITA6TXQ9ITApLGN0PWVlLFN0PSEwLEJMKCksaHQoKX1mdW5jdGlvbiBodCgpe3ZhciBlZTtzd2l0Y2gob3Q9Y3RbMF0tX3RbMF0sc3Q9Y3RbMV0tX3RbMV0seCl7Y2FzZSBHWTpjYXNlIHF2dDp7YiYmKG90PU1hdGgubWF4KE8tRCxNYXRoLm1pbihGLXosb3QpKSxCPUQrb3QsVT16K290KSxTJiYoc3Q9TWF0aC5tYXgoSS1MLE1hdGgubWluKFctWixzdCkpLFI9TCtzdCxydD1aK3N0KTticmVha31jYXNlIE1iOntiPDA/KG90PU1hdGgubWF4KE8tRCxNYXRoLm1pbihGLUQsb3QpKSxCPUQrb3QsVT16KTpiPjAmJihvdD1NYXRoLm1heChPLXosTWF0aC5taW4oRi16LG90KSksQj1ELFU9eitvdCksUzwwPyhzdD1NYXRoLm1heChJLUwsTWF0aC5taW4oVy1MLHN0KSksUj1MK3N0LHJ0PVopOlM+MCYmKHN0PU1hdGgubWF4KEktWixNYXRoLm1pbihXLVosc3QpKSxSPUwscnQ9WitzdCk7YnJlYWt9Y2FzZSBFYjp7YiYmKEI9TWF0aC5tYXgoTyxNYXRoLm1pbihGLEQtb3QqYikpLFU9TWF0aC5tYXgoTyxNYXRoLm1pbihGLHorb3QqYikpKSxTJiYoUj1NYXRoLm1heChJLE1hdGgubWluKFcsTC1zdCpTKSkscnQ9TWF0aC5tYXgoSSxNYXRoLm1pbihXLForc3QqUykpKTticmVha319VTxCJiYoYio9LTEsZWU9RCxEPXosej1lZSxlZT1CLEI9VSxVPWVlLHkgaW4gV3Z0JiZkdC5hdHRyKCJjdXJzb3IiLElwW3k9V3Z0W3ldXSkpLHJ0PFImJihTKj0tMSxlZT1MLEw9WixaPWVlLGVlPVIsUj1ydCxydD1lZSx5IGluIFl2dCYmZHQuYXR0cigiY3Vyc29yIixJcFt5PVl2dFt5XV0pKSxDLnNlbGVjdGlvbiYmKGs9Qy5zZWxlY3Rpb24pLE10JiYoQj1rWzBdWzBdLFU9a1sxXVswXSksbHQmJihSPWtbMF1bMV0scnQ9a1sxXVsxXSksKGtbMF1bMF0hPT1CfHxrWzBdWzFdIT09Unx8a1sxXVswXSE9PVV8fGtbMV1bMV0hPT1ydCkmJihDLnNlbGVjdGlvbj1bW0IsUl0sW1UscnRdXSxjLmNhbGwoXyksWC5icnVzaCgpKX1mdW5jdGlvbiB3dCgpe2lmKHFZKCkscXQudG91Y2hlcyl7aWYocXQudG91Y2hlcy5sZW5ndGgpcmV0dXJuO3MmJmNsZWFyVGltZW91dChzKSxzPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtzPW51bGx9LDUwMCl9ZWxzZSBCbShxdC52aWV3LFN0KSxxLm9uKCJrZXlkb3duLmJydXNoIGtleXVwLmJydXNoIG1vdXNlbW92ZS5icnVzaCBtb3VzZXVwLmJydXNoIixudWxsKTtldC5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLGR0LmF0dHIoImN1cnNvciIsSXAub3ZlcmxheSksQy5zZWxlY3Rpb24mJihrPUMuc2VsZWN0aW9uKSxUU2UoaykmJihDLnNlbGVjdGlvbj1udWxsLGMuY2FsbChfKSksWC5lbmQoKX1mdW5jdGlvbiBrdCgpe3N3aXRjaChxdC5rZXlDb2RlKXtjYXNlIDE2OntidD1iJiZTO2JyZWFrfWNhc2UgMTg6e3g9PT1NYiYmKGImJih6PVUtb3QqYixEPUIrb3QqYiksUyYmKFo9cnQtc3QqUyxMPVIrc3QqUykseD1FYixodCgpKTticmVha31jYXNlIDMyOnsoeD09PU1ifHx4PT09RWIpJiYoYjwwP3o9VS1vdDpiPjAmJihEPUItb3QpLFM8MD9aPXJ0LXN0OlM+MCYmKEw9Ui1zdCkseD1HWSxkdC5hdHRyKCJjdXJzb3IiLElwLnNlbGVjdGlvbiksaHQoKSk7YnJlYWt9ZGVmYXVsdDpyZXR1cm59QkwoKX1mdW5jdGlvbiBpZSgpe3N3aXRjaChxdC5rZXlDb2RlKXtjYXNlIDE2OntidCYmKE10PWx0PWJ0PSExLGh0KCkpO2JyZWFrfWNhc2UgMTg6e3g9PT1FYiYmKGI8MD96PVU6Yj4wJiYoRD1CKSxTPDA/Wj1ydDpTPjAmJihMPVIpLHg9TWIsaHQoKSk7YnJlYWt9Y2FzZSAzMjp7eD09PUdZJiYocXQuYWx0S2V5PyhiJiYoej1VLW90KmIsRD1CK290KmIpLFMmJihaPXJ0LXN0KlMsTD1SK3N0KlMpLHg9RWIpOihiPDA/ej1VOmI+MCYmKEQ9QiksUzwwP1o9cnQ6Uz4wJiYoTD1SKSx4PU1iKSxkdC5hdHRyKCJjdXJzb3IiLElwW3ldKSxodCgpKTticmVha31kZWZhdWx0OnJldHVybn1CTCgpfX1mdW5jdGlvbiBwKCl7dSh0aGlzLGFyZ3VtZW50cykubW92ZWQoKX1mdW5jdGlvbiBkKCl7dSh0aGlzLGFyZ3VtZW50cykuZW5kZWQoKX1mdW5jdGlvbiBnKCl7dmFyIF89dGhpcy5fX2JydXNofHx7c2VsZWN0aW9uOm51bGx9O3JldHVybiBfLmV4dGVudD1ZWSh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSksXy5kaW09ZSxffXJldHVybiBsLmV4dGVudD1mdW5jdGlvbihfKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgXz09ImZ1bmN0aW9uIj9fOkZMKFlZKF8pKSxsKTp0fSxsLmZpbHRlcj1mdW5jdGlvbihfKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgXz09ImZ1bmN0aW9uIj9fOkZMKCEhXyksbCk6cn0sbC50b3VjaGFibGU9ZnVuY3Rpb24oXyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIF89PSJmdW5jdGlvbiI/XzpGTCghIV8pLGwpOm59LGwuaGFuZGxlU2l6ZT1mdW5jdGlvbihfKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rXyxsKTphfSxsLmtleU1vZGlmaWVycz1mdW5jdGlvbihfKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0hIV8sbCk6aX0sbC5vbj1mdW5jdGlvbigpe3ZhciBfPW8ub24uYXBwbHkobyxhcmd1bWVudHMpO3JldHVybiBfPT09bz9sOl99LGx9dmFyIFhZPU1hdGguY29zLCRZPU1hdGguc2luLFh2dD1NYXRoLlBJLFZFPVh2dC8yLEtZPVh2dCoyLFpZPU1hdGgubWF4O2Z1bmN0aW9uIENTZShlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXtyZXR1cm4gZSh0LnNvdXJjZS52YWx1ZSt0LnRhcmdldC52YWx1ZSxyLnNvdXJjZS52YWx1ZStyLnRhcmdldC52YWx1ZSl9fWZ1bmN0aW9uICR2dCgpe3ZhciBlPTAsdD1udWxsLHI9bnVsbCxuPW51bGw7ZnVuY3Rpb24gaShvKXt2YXIgYT1vLmxlbmd0aCxzPVtdLGw9SXIoYSksYz1bXSx1PVtdLGg9dS5ncm91cHM9bmV3IEFycmF5KGEpLGY9bmV3IEFycmF5KGEqYSkscCxkLGcsXyx5LHg7Zm9yKHA9MCx5PS0xOysreTxhOyl7Zm9yKGQ9MCx4PS0xOysreDxhOylkKz1vW3ldW3hdO3MucHVzaChkKSxjLnB1c2goSXIoYSkpLHArPWR9Zm9yKHQmJmwuc29ydChmdW5jdGlvbihCLEkpe3JldHVybiB0KHNbQl0sc1tJXSl9KSxyJiZjLmZvckVhY2goZnVuY3Rpb24oQixJKXtCLnNvcnQoZnVuY3Rpb24oTCxSKXtyZXR1cm4gcihvW0ldW0xdLG9bSV1bUl0pfSl9KSxwPVpZKDAsS1ktZSphKS9wLF89cD9lOktZL2EsZD0wLHk9LTE7Kyt5PGE7KXtmb3IoZz1kLHg9LTE7Kyt4PGE7KXt2YXIgYj1sW3ldLFM9Y1tiXVt4XSxDPW9bYl1bU10sUD1kLGs9ZCs9QypwO2ZbUyphK2JdPXtpbmRleDpiLHN1YmluZGV4OlMsc3RhcnRBbmdsZTpQLGVuZEFuZ2xlOmssdmFsdWU6Q319aFtiXT17aW5kZXg6YixzdGFydEFuZ2xlOmcsZW5kQW5nbGU6ZCx2YWx1ZTpzW2JdfSxkKz1ffWZvcih5PS0xOysreTxhOylmb3IoeD15LTE7Kyt4PGE7KXt2YXIgTz1mW3gqYSt5XSxEPWZbeSphK3hdOyhPLnZhbHVlfHxELnZhbHVlKSYmdS5wdXNoKE8udmFsdWU8RC52YWx1ZT97c291cmNlOkQsdGFyZ2V0Ok99Ontzb3VyY2U6Tyx0YXJnZXQ6RH0pfXJldHVybiBuP3Uuc29ydChuKTp1fXJldHVybiBpLnBhZEFuZ2xlPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPVpZKDAsbyksaSk6ZX0saS5zb3J0R3JvdXBzPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW8saSk6dH0saS5zb3J0U3ViZ3JvdXBzPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW8saSk6cn0saS5zb3J0Q2hvcmRzPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPT1udWxsP249bnVsbDoobj1DU2UobykpLl89byxpKTpuJiZuLl99LGl9dmFyIEt2dD1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gV0woZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBKWT1NYXRoLlBJLFFZPTIqSlksa189MWUtNixBU2U9UVkta187ZnVuY3Rpb24gdGooKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIn1mdW5jdGlvbiBadnQoKXtyZXR1cm4gbmV3IHRqfXRqLnByb3RvdHlwZT1adnQucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp0aixtb3ZlVG86ZnVuY3Rpb24oZSx0KXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2UpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K3QpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl94MSE9PW51bGwmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl8rPSJaIil9LGxpbmVUbzpmdW5jdGlvbihlLHQpe3RoaXMuXys9IkwiKyh0aGlzLl94MT0rZSkrIiwiKyh0aGlzLl95MT0rdCl9LHF1YWRyYXRpY0N1cnZlVG86ZnVuY3Rpb24oZSx0LHIsbil7dGhpcy5fKz0iUSIrICtlKyIsIisgK3QrIiwiKyh0aGlzLl94MT0rcikrIiwiKyh0aGlzLl95MT0rbil9LGJlemllckN1cnZlVG86ZnVuY3Rpb24oZSx0LHIsbixpLG8pe3RoaXMuXys9IkMiKyArZSsiLCIrICt0KyIsIisgK3IrIiwiKyArbisiLCIrKHRoaXMuX3gxPStpKSsiLCIrKHRoaXMuX3kxPStvKX0sYXJjVG86ZnVuY3Rpb24oZSx0LHIsbixpKXtlPStlLHQ9K3Qscj0rcixuPStuLGk9K2k7dmFyIG89dGhpcy5feDEsYT10aGlzLl95MSxzPXItZSxsPW4tdCxjPW8tZSx1PWEtdCxoPWMqYyt1KnU7aWYoaTwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK2kpO2lmKHRoaXMuX3gxPT09bnVsbCl0aGlzLl8rPSJNIisodGhpcy5feDE9ZSkrIiwiKyh0aGlzLl95MT10KTtlbHNlIGlmKGg+a18paWYoIShNYXRoLmFicyh1KnMtbCpjKT5rXyl8fCFpKXRoaXMuXys9IkwiKyh0aGlzLl94MT1lKSsiLCIrKHRoaXMuX3kxPXQpO2Vsc2V7dmFyIGY9ci1vLHA9bi1hLGQ9cypzK2wqbCxnPWYqZitwKnAsXz1NYXRoLnNxcnQoZCkseT1NYXRoLnNxcnQoaCkseD1pKk1hdGgudGFuKChKWS1NYXRoLmFjb3MoKGQraC1nKS8oMipfKnkpKSkvMiksYj14L3ksUz14L187TWF0aC5hYnMoYi0xKT5rXyYmKHRoaXMuXys9IkwiKyhlK2IqYykrIiwiKyh0K2IqdSkpLHRoaXMuXys9IkEiK2krIiwiK2krIiwwLDAsIisgKyh1KmY+YypwKSsiLCIrKHRoaXMuX3gxPWUrUypzKSsiLCIrKHRoaXMuX3kxPXQrUypsKX19LGFyYzpmdW5jdGlvbihlLHQscixuLGksbyl7ZT0rZSx0PSt0LHI9K3Isbz0hIW87dmFyIGE9cipNYXRoLmNvcyhuKSxzPXIqTWF0aC5zaW4obiksbD1lK2EsYz10K3MsdT0xXm8saD1vP24taTppLW47aWYocjwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK3IpO3RoaXMuX3gxPT09bnVsbD90aGlzLl8rPSJNIitsKyIsIitjOihNYXRoLmFicyh0aGlzLl94MS1sKT5rX3x8TWF0aC5hYnModGhpcy5feTEtYyk+a18pJiYodGhpcy5fKz0iTCIrbCsiLCIrYyksciYmKGg8MCYmKGg9aCVRWStRWSksaD5BU2U/dGhpcy5fKz0iQSIrcisiLCIrcisiLDAsMSwiK3UrIiwiKyhlLWEpKyIsIisodC1zKSsiQSIrcisiLCIrcisiLDAsMSwiK3UrIiwiKyh0aGlzLl94MT1sKSsiLCIrKHRoaXMuX3kxPWMpOmg+a18mJih0aGlzLl8rPSJBIityKyIsIityKyIsMCwiKyArKGg+PUpZKSsiLCIrdSsiLCIrKHRoaXMuX3gxPWUrcipNYXRoLmNvcyhpKSkrIiwiKyh0aGlzLl95MT10K3IqTWF0aC5zaW4oaSkpKSl9LHJlY3Q6ZnVuY3Rpb24oZSx0LHIsbil7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPSt0KSsiaCIrICtyKyJ2IisgK24rImgiKy1yKyJaIn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX07dmFyIHdzPVp2dDtmdW5jdGlvbiBQU2UoZSl7cmV0dXJuIGUuc291cmNlfWZ1bmN0aW9uIElTZShlKXtyZXR1cm4gZS50YXJnZXR9ZnVuY3Rpb24gTFNlKGUpe3JldHVybiBlLnJhZGl1c31mdW5jdGlvbiBrU2UoZSl7cmV0dXJuIGUuc3RhcnRBbmdsZX1mdW5jdGlvbiBSU2UoZSl7cmV0dXJuIGUuZW5kQW5nbGV9ZnVuY3Rpb24gSnZ0KCl7dmFyIGU9UFNlLHQ9SVNlLHI9TFNlLG49a1NlLGk9UlNlLG89bnVsbDtmdW5jdGlvbiBhKCl7dmFyIHMsbD1LdnQuY2FsbChhcmd1bWVudHMpLGM9ZS5hcHBseSh0aGlzLGwpLHU9dC5hcHBseSh0aGlzLGwpLGg9K3IuYXBwbHkodGhpcywobFswXT1jLGwpKSxmPW4uYXBwbHkodGhpcyxsKS1WRSxwPWkuYXBwbHkodGhpcyxsKS1WRSxkPWgqWFkoZiksZz1oKiRZKGYpLF89K3IuYXBwbHkodGhpcywobFswXT11LGwpKSx5PW4uYXBwbHkodGhpcyxsKS1WRSx4PWkuYXBwbHkodGhpcyxsKS1WRTtpZihvfHwobz1zPXdzKCkpLG8ubW92ZVRvKGQsZyksby5hcmMoMCwwLGgsZixwKSwoZiE9PXl8fHAhPT14KSYmKG8ucXVhZHJhdGljQ3VydmVUbygwLDAsXypYWSh5KSxfKiRZKHkpKSxvLmFyYygwLDAsXyx5LHgpKSxvLnF1YWRyYXRpY0N1cnZlVG8oMCwwLGQsZyksby5jbG9zZVBhdGgoKSxzKXJldHVybiBvPW51bGwscysiInx8bnVsbH1yZXR1cm4gYS5yYWRpdXM9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpXTCgrcyksYSk6cn0sYS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6V0woK3MpLGEpOm59LGEuZW5kQW5nbGU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpXTCgrcyksYSk6aX0sYS5zb3VyY2U9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9cyxhKTplfSxhLnRhcmdldD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1zLGEpOnR9LGEuY29udGV4dD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1zPT1udWxsP251bGw6cyxhKTpvfSxhfVRiKCk7dmFyIE9TZT1BcnJheS5wcm90b3R5cGUsS0w9T1NlLnNsaWNlO2Z1bmN0aW9uIGYxdChlLHQpe3JldHVybiBlLXR9ZnVuY3Rpb24gcDF0KGUpe2Zvcih2YXIgdD0wLHI9ZS5sZW5ndGgsbj1lW3ItMV1bMV0qZVswXVswXS1lW3ItMV1bMF0qZVswXVsxXTsrK3Q8cjspbis9ZVt0LTFdWzFdKmVbdF1bMF0tZVt0LTFdWzBdKmVbdF1bMV07cmV0dXJuIG59ZnVuY3Rpb24gemgoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIGQxdChlLHQpe2Zvcih2YXIgcj0tMSxuPXQubGVuZ3RoLGk7KytyPG47KWlmKGk9elNlKGUsdFtyXSkpcmV0dXJuIGk7cmV0dXJuIDB9ZnVuY3Rpb24gelNlKGUsdCl7Zm9yKHZhciByPXRbMF0sbj10WzFdLGk9LTEsbz0wLGE9ZS5sZW5ndGgscz1hLTE7bzxhO3M9bysrKXt2YXIgbD1lW29dLGM9bFswXSx1PWxbMV0saD1lW3NdLGY9aFswXSxwPWhbMV07aWYoRlNlKGwsaCx0KSlyZXR1cm4gMDt1Pm4hPXA+biYmcjwoZi1jKSoobi11KS8ocC11KStjJiYoaT0taSl9cmV0dXJuIGl9ZnVuY3Rpb24gRlNlKGUsdCxyKXt2YXIgbjtyZXR1cm4gQlNlKGUsdCxyKSYmSFNlKGVbbj0rKGVbMF09PT10WzBdKV0scltuXSx0W25dKX1mdW5jdGlvbiBCU2UoZSx0LHIpe3JldHVybih0WzBdLWVbMF0pKihyWzFdLWVbMV0pPT09KHJbMF0tZVswXSkqKHRbMV0tZVsxXSl9ZnVuY3Rpb24gSFNlKGUsdCxyKXtyZXR1cm4gZTw9dCYmdDw9cnx8cjw9dCYmdDw9ZX1mdW5jdGlvbiBtMXQoKXt9dmFyIExwPVtbXSxbW1sxLDEuNV0sWy41LDFdXV0sW1tbMS41LDFdLFsxLDEuNV1dXSxbW1sxLjUsMV0sWy41LDFdXV0sW1tbMSwuNV0sWzEuNSwxXV1dLFtbWzEsMS41XSxbLjUsMV1dLFtbMSwuNV0sWzEuNSwxXV1dLFtbWzEsLjVdLFsxLDEuNV1dXSxbW1sxLC41XSxbLjUsMV1dXSxbW1suNSwxXSxbMSwuNV1dXSxbW1sxLDEuNV0sWzEsLjVdXV0sW1tbLjUsMV0sWzEsLjVdXSxbWzEuNSwxXSxbMSwxLjVdXV0sW1tbMS41LDFdLFsxLC41XV1dLFtbWy41LDFdLFsxLjUsMV1dXSxbW1sxLDEuNV0sWzEuNSwxXV1dLFtbWy41LDFdLFsxLDEuNV1dXSxbXV07ZnVuY3Rpb24gWkwoKXt2YXIgZT0xLHQ9MSxyPXNiLG49bDtmdW5jdGlvbiBpKGMpe3ZhciB1PXIoYyk7aWYoQXJyYXkuaXNBcnJheSh1KSl1PXUuc2xpY2UoKS5zb3J0KGYxdCk7ZWxzZXt2YXIgaD1zYShjKSxmPWhbMF0scD1oWzFdO3U9ZWwoZixwLHUpLHU9SXIoTWF0aC5mbG9vcihmL3UpKnUsTWF0aC5mbG9vcihwL3UpKnUsdSl9cmV0dXJuIHUubWFwKGZ1bmN0aW9uKGQpe3JldHVybiBvKGMsZCl9KX1mdW5jdGlvbiBvKGMsdSl7dmFyIGg9W10sZj1bXTtyZXR1cm4gYShjLHUsZnVuY3Rpb24ocCl7bihwLGMsdSkscDF0KHApPjA/aC5wdXNoKFtwXSk6Zi5wdXNoKHApfSksZi5mb3JFYWNoKGZ1bmN0aW9uKHApe2Zvcih2YXIgZD0wLGc9aC5sZW5ndGgsXztkPGc7KytkKWlmKGQxdCgoXz1oW2RdKVswXSxwKSE9PS0xKXtfLnB1c2gocCk7cmV0dXJufX0pLHt0eXBlOiJNdWx0aVBvbHlnb24iLHZhbHVlOnUsY29vcmRpbmF0ZXM6aH19ZnVuY3Rpb24gYShjLHUsaCl7dmFyIGY9bmV3IEFycmF5LHA9bmV3IEFycmF5LGQsZyxfLHkseCxiO2ZvcihkPWc9LTEseT1jWzBdPj11LExwW3k8PDFdLmZvckVhY2goUyk7KytkPGUtMTspXz15LHk9Y1tkKzFdPj11LExwW198eTw8MV0uZm9yRWFjaChTKTtmb3IoTHBbeTw8MF0uZm9yRWFjaChTKTsrK2c8dC0xOyl7Zm9yKGQ9LTEseT1jW2cqZStlXT49dSx4PWNbZyplXT49dSxMcFt5PDwxfHg8PDJdLmZvckVhY2goUyk7KytkPGUtMTspXz15LHk9Y1tnKmUrZStkKzFdPj11LGI9eCx4PWNbZyplK2QrMV0+PXUsTHBbX3x5PDwxfHg8PDJ8Yjw8M10uZm9yRWFjaChTKTtMcFt5fHg8PDNdLmZvckVhY2goUyl9Zm9yKGQ9LTEseD1jW2cqZV0+PXUsTHBbeDw8Ml0uZm9yRWFjaChTKTsrK2Q8ZS0xOyliPXgseD1jW2cqZStkKzFdPj11LExwW3g8PDJ8Yjw8M10uZm9yRWFjaChTKTtMcFt4PDwzXS5mb3JFYWNoKFMpO2Z1bmN0aW9uIFMoQyl7dmFyIFA9W0NbMF1bMF0rZCxDWzBdWzFdK2ddLGs9W0NbMV1bMF0rZCxDWzFdWzFdK2ddLE89cyhQKSxEPXMoayksQixJOyhCPXBbT10pPyhJPWZbRF0pPyhkZWxldGUgcFtCLmVuZF0sZGVsZXRlIGZbSS5zdGFydF0sQj09PUk/KEIucmluZy5wdXNoKGspLGgoQi5yaW5nKSk6ZltCLnN0YXJ0XT1wW0kuZW5kXT17c3RhcnQ6Qi5zdGFydCxlbmQ6SS5lbmQscmluZzpCLnJpbmcuY29uY2F0KEkucmluZyl9KTooZGVsZXRlIHBbQi5lbmRdLEIucmluZy5wdXNoKGspLHBbQi5lbmQ9RF09Qik6KEI9ZltEXSk/KEk9cFtPXSk/KGRlbGV0ZSBmW0Iuc3RhcnRdLGRlbGV0ZSBwW0kuZW5kXSxCPT09ST8oQi5yaW5nLnB1c2goayksaChCLnJpbmcpKTpmW0kuc3RhcnRdPXBbQi5lbmRdPXtzdGFydDpJLnN0YXJ0LGVuZDpCLmVuZCxyaW5nOkkucmluZy5jb25jYXQoQi5yaW5nKX0pOihkZWxldGUgZltCLnN0YXJ0XSxCLnJpbmcudW5zaGlmdChQKSxmW0Iuc3RhcnQ9T109Qik6ZltPXT1wW0RdPXtzdGFydDpPLGVuZDpELHJpbmc6W1Asa119fX1mdW5jdGlvbiBzKGMpe3JldHVybiBjWzBdKjIrY1sxXSooZSsxKSo0fWZ1bmN0aW9uIGwoYyx1LGgpe2MuZm9yRWFjaChmdW5jdGlvbihmKXt2YXIgcD1mWzBdLGQ9ZlsxXSxnPXB8MCxfPWR8MCx5LHg9dVtfKmUrZ107cD4wJiZwPGUmJmc9PT1wJiYoeT11W18qZStnLTFdLGZbMF09cCsoaC15KS8oeC15KS0uNSksZD4wJiZkPHQmJl89PT1kJiYoeT11WyhfLTEpKmUrZ10sZlsxXT1kKyhoLXkpLyh4LXkpLS41KX0pfXJldHVybiBpLmNvbnRvdXI9byxpLnNpemU9ZnVuY3Rpb24oYyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuW2UsdF07dmFyIHU9TWF0aC5jZWlsKGNbMF0pLGg9TWF0aC5jZWlsKGNbMV0pO2lmKCEodT4wKXx8IShoPjApKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaXplIik7cmV0dXJuIGU9dSx0PWgsaX0saS50aHJlc2hvbGRzPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6QXJyYXkuaXNBcnJheShjKT96aChLTC5jYWxsKGMpKTp6aChjKSxpKTpyfSxpLnNtb290aD1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1jP2w6bTF0LGkpOm49PT1sfSxpfWZ1bmN0aW9uIEpMKGUsdCxyKXtmb3IodmFyIG49ZS53aWR0aCxpPWUuaGVpZ2h0LG89KHI8PDEpKzEsYT0wO2E8aTsrK2EpZm9yKHZhciBzPTAsbD0wO3M8bityOysrcylzPG4mJihsKz1lLmRhdGFbcythKm5dKSxzPj1yJiYocz49byYmKGwtPWUuZGF0YVtzLW8rYSpuXSksdC5kYXRhW3MtcithKm5dPWwvTWF0aC5taW4ocysxLG4tMStvLXMsbykpfWZ1bmN0aW9uIFFMKGUsdCxyKXtmb3IodmFyIG49ZS53aWR0aCxpPWUuaGVpZ2h0LG89KHI8PDEpKzEsYT0wO2E8bjsrK2EpZm9yKHZhciBzPTAsbD0wO3M8aStyOysrcylzPGkmJihsKz1lLmRhdGFbYStzKm5dKSxzPj1yJiYocz49byYmKGwtPWUuZGF0YVthKyhzLW8pKm5dKSx0LmRhdGFbYSsocy1yKSpuXT1sL01hdGgubWluKHMrMSxpLTErby1zLG8pKX1mdW5jdGlvbiBWU2UoZSl7cmV0dXJuIGVbMF19ZnVuY3Rpb24gVVNlKGUpe3JldHVybiBlWzFdfWZ1bmN0aW9uIHFTZSgpe3JldHVybiAxfWZ1bmN0aW9uIGcxdCgpe3ZhciBlPVZTZSx0PVVTZSxyPXFTZSxuPTk2MCxpPTUwMCxvPTIwLGE9MixzPW8qMyxsPW4rcyoyPj5hLGM9aStzKjI+PmEsdT16aCgyMCk7ZnVuY3Rpb24gaCh5KXt2YXIgeD1uZXcgRmxvYXQzMkFycmF5KGwqYyksYj1uZXcgRmxvYXQzMkFycmF5KGwqYyk7eS5mb3JFYWNoKGZ1bmN0aW9uKFAsayxPKXt2YXIgRD0rZShQLGssTykrcz4+YSxCPSt0KFAsayxPKStzPj5hLEk9K3IoUCxrLE8pO0Q+PTAmJkQ8bCYmQj49MCYmQjxjJiYoeFtEK0IqbF0rPUkpfSksSkwoe3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTp4fSx7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOmJ9LG8+PmEpLFFMKHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6Yn0se3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTp4fSxvPj5hKSxKTCh7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOnh9LHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6Yn0sbz4+YSksUUwoe3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTpifSx7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOnh9LG8+PmEpLEpMKHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6eH0se3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTpifSxvPj5hKSxRTCh7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOmJ9LHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6eH0sbz4+YSk7dmFyIFM9dSh4KTtpZighQXJyYXkuaXNBcnJheShTKSl7dmFyIEM9bHUoeCk7Uz1lbCgwLEMsUyksUz1JcigwLE1hdGguZmxvb3IoQy9TKSpTLFMpLFMuc2hpZnQoKX1yZXR1cm4gWkwoKS50aHJlc2hvbGRzKFMpLnNpemUoW2wsY10pKHgpLm1hcChmKX1mdW5jdGlvbiBmKHkpe3JldHVybiB5LnZhbHVlKj1NYXRoLnBvdygyLC0yKmEpLHkuY29vcmRpbmF0ZXMuZm9yRWFjaChwKSx5fWZ1bmN0aW9uIHAoeSl7eS5mb3JFYWNoKGQpfWZ1bmN0aW9uIGQoeSl7eS5mb3JFYWNoKGcpfWZ1bmN0aW9uIGcoeSl7eVswXT15WzBdKk1hdGgucG93KDIsYSktcyx5WzFdPXlbMV0qTWF0aC5wb3coMixhKS1zfWZ1bmN0aW9uIF8oKXtyZXR1cm4gcz1vKjMsbD1uK3MqMj4+YSxjPWkrcyoyPj5hLGh9cmV0dXJuIGgueD1mdW5jdGlvbih5KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgeT09ImZ1bmN0aW9uIj95OnpoKCt5KSxoKTplfSxoLnk9ZnVuY3Rpb24oeSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIHk9PSJmdW5jdGlvbiI/eTp6aCgreSksaCk6dH0saC53ZWlnaHQ9ZnVuY3Rpb24oeSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIHk9PSJmdW5jdGlvbiI/eTp6aCgreSksaCk6cn0saC5zaXplPWZ1bmN0aW9uKHkpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybltuLGldO3ZhciB4PU1hdGguY2VpbCh5WzBdKSxiPU1hdGguY2VpbCh5WzFdKTtpZighKHg+PTApJiYhKHg+PTApKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaXplIik7cmV0dXJuIG49eCxpPWIsXygpfSxoLmNlbGxTaXplPWZ1bmN0aW9uKHkpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiAxPDxhO2lmKCEoKHk9K3kpPj0xKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2VsbCBzaXplIik7cmV0dXJuIGE9TWF0aC5mbG9vcihNYXRoLmxvZyh5KS9NYXRoLkxOMiksXygpfSxoLnRocmVzaG9sZHM9ZnVuY3Rpb24oeSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dHlwZW9mIHk9PSJmdW5jdGlvbiI/eTpBcnJheS5pc0FycmF5KHkpP3poKEtMLmNhbGwoeSkpOnpoKHkpLGgpOnV9LGguYmFuZHdpZHRoPWZ1bmN0aW9uKHkpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBNYXRoLnNxcnQobyoobysxKSk7aWYoISgoeT0reSk+PTApKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBiYW5kd2lkdGgiKTtyZXR1cm4gbz1NYXRoLnJvdW5kKChNYXRoLnNxcnQoNCp5KnkrMSktMSkvMiksXygpfSxofVJtKCk7cUUoKTtMXygpO2Z1bmN0aW9uIFhTZShlKXtpZighZS5vayl0aHJvdyBuZXcgRXJyb3IoZS5zdGF0dXMrIiAiK2Uuc3RhdHVzVGV4dCk7cmV0dXJuIGUuYmxvYigpfWZ1bmN0aW9uIEQxdChlLHQpe3JldHVybiBmZXRjaChlLHQpLnRoZW4oWFNlKX1mdW5jdGlvbiAkU2UoZSl7aWYoIWUub2spdGhyb3cgbmV3IEVycm9yKGUuc3RhdHVzKyIgIitlLnN0YXR1c1RleHQpO3JldHVybiBlLmFycmF5QnVmZmVyKCl9ZnVuY3Rpb24gTzF0KGUsdCl7cmV0dXJuIGZldGNoKGUsdCkudGhlbigkU2UpfXFFKCk7ZnVuY3Rpb24gS1NlKGUpe2lmKCFlLm9rKXRocm93IG5ldyBFcnJvcihlLnN0YXR1cysiICIrZS5zdGF0dXNUZXh0KTtyZXR1cm4gZS50ZXh0KCl9ZnVuY3Rpb24gT18oZSx0KXtyZXR1cm4gZmV0Y2goZSx0KS50aGVuKEtTZSl9ZnVuY3Rpb24gejF0KGUpe3JldHVybiBmdW5jdGlvbih0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0yJiZ0eXBlb2Ygcj09ImZ1bmN0aW9uIiYmKG49cixyPXZvaWQgMCksT18odCxyKS50aGVuKGZ1bmN0aW9uKGkpe3JldHVybiBlKGksbil9KX19ZnVuY3Rpb24gb2ooZSx0LHIsbil7YXJndW1lbnRzLmxlbmd0aD09PTMmJnR5cGVvZiByPT0iZnVuY3Rpb24iJiYobj1yLHI9dm9pZCAwKTt2YXIgaT1ZbShlKTtyZXR1cm4gT18odCxyKS50aGVuKGZ1bmN0aW9uKG8pe3JldHVybiBpLnBhcnNlKG8sbil9KX12YXIgRjF0PXoxdChDYiksQjF0PXoxdChBYik7ZnVuY3Rpb24gSDF0KGUsdCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsbil7dmFyIGk9bmV3IEltYWdlO2Zvcih2YXIgbyBpbiB0KWlbb109dFtvXTtpLm9uZXJyb3I9bixpLm9ubG9hZD1mdW5jdGlvbigpe3IoaSl9LGkuc3JjPWV9KX1mdW5jdGlvbiBaU2UoZSl7aWYoIWUub2spdGhyb3cgbmV3IEVycm9yKGUuc3RhdHVzKyIgIitlLnN0YXR1c1RleHQpO2lmKCEoZS5zdGF0dXM9PT0yMDR8fGUuc3RhdHVzPT09MjA1KSlyZXR1cm4gZS5qc29uKCl9ZnVuY3Rpb24gVjF0KGUsdCl7cmV0dXJuIGZldGNoKGUsdCkudGhlbihaU2UpfWZ1bmN0aW9uIGFqKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBPXyh0LHIpLnRoZW4oZnVuY3Rpb24obil7cmV0dXJuIG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcobixlKX0pfX12YXIgVTF0PWFqKCJhcHBsaWNhdGlvbi94bWwiKSxxMXQ9YWooInRleHQvaHRtbCIpLEcxdD1haigiaW1hZ2Uvc3ZnK3htbCIpO2Z1bmN0aW9uIFcxdChlLHQpe3ZhciByO2U9PW51bGwmJihlPTApLHQ9PW51bGwmJih0PTApO2Z1bmN0aW9uIG4oKXt2YXIgaSxvPXIubGVuZ3RoLGEscz0wLGw9MDtmb3IoaT0wO2k8bzsrK2kpYT1yW2ldLHMrPWEueCxsKz1hLnk7Zm9yKHM9cy9vLWUsbD1sL28tdCxpPTA7aTxvOysraSlhPXJbaV0sYS54LT1zLGEueS09bH1yZXR1cm4gbi5pbml0aWFsaXplPWZ1bmN0aW9uKGkpe3I9aX0sbi54PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPStpLG4pOmV9LG4ueT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0raSxuKTp0fSxufWZ1bmN0aW9uIE9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBmdSgpe3JldHVybihNYXRoLnJhbmRvbSgpLS41KSoxZS02fWZ1bmN0aW9uIFkxdChlKXt2YXIgdD0rdGhpcy5feC5jYWxsKG51bGwsZSkscj0rdGhpcy5feS5jYWxsKG51bGwsZSk7cmV0dXJuIGoxdCh0aGlzLmNvdmVyKHQsciksdCxyLGUpfWZ1bmN0aW9uIGoxdChlLHQscixuKXtpZihpc05hTih0KXx8aXNOYU4ocikpcmV0dXJuIGU7dmFyIGksbz1lLl9yb290LGE9e2RhdGE6bn0scz1lLl94MCxsPWUuX3kwLGM9ZS5feDEsdT1lLl95MSxoLGYscCxkLGcsXyx5LHg7aWYoIW8pcmV0dXJuIGUuX3Jvb3Q9YSxlO2Zvcig7by5sZW5ndGg7KWlmKChnPXQ+PShoPShzK2MpLzIpKT9zPWg6Yz1oLChfPXI+PShmPShsK3UpLzIpKT9sPWY6dT1mLGk9bywhKG89b1t5PV88PDF8Z10pKXJldHVybiBpW3ldPWEsZTtpZihwPStlLl94LmNhbGwobnVsbCxvLmRhdGEpLGQ9K2UuX3kuY2FsbChudWxsLG8uZGF0YSksdD09PXAmJnI9PT1kKXJldHVybiBhLm5leHQ9byxpP2lbeV09YTplLl9yb290PWEsZTtkbyBpPWk/aVt5XT1uZXcgQXJyYXkoNCk6ZS5fcm9vdD1uZXcgQXJyYXkoNCksKGc9dD49KGg9KHMrYykvMikpP3M9aDpjPWgsKF89cj49KGY9KGwrdSkvMikpP2w9Zjp1PWY7d2hpbGUoKHk9Xzw8MXxnKT09PSh4PShkPj1mKTw8MXxwPj1oKSk7cmV0dXJuIGlbeF09byxpW3ldPWEsZX1mdW5jdGlvbiBYMXQoZSl7dmFyIHQscixuPWUubGVuZ3RoLGksbyxhPW5ldyBBcnJheShuKSxzPW5ldyBBcnJheShuKSxsPTEvMCxjPTEvMCx1PS0xLzAsaD0tMS8wO2ZvcihyPTA7cjxuOysrcilpc05hTihpPSt0aGlzLl94LmNhbGwobnVsbCx0PWVbcl0pKXx8aXNOYU4obz0rdGhpcy5feS5jYWxsKG51bGwsdCkpfHwoYVtyXT1pLHNbcl09byxpPGwmJihsPWkpLGk+dSYmKHU9aSksbzxjJiYoYz1vKSxvPmgmJihoPW8pKTtpZihsPnV8fGM+aClyZXR1cm4gdGhpcztmb3IodGhpcy5jb3ZlcihsLGMpLmNvdmVyKHUsaCkscj0wO3I8bjsrK3IpajF0KHRoaXMsYVtyXSxzW3JdLGVbcl0pO3JldHVybiB0aGlzfWZ1bmN0aW9uICQxdChlLHQpe2lmKGlzTmFOKGU9K2UpfHxpc05hTih0PSt0KSlyZXR1cm4gdGhpczt2YXIgcj10aGlzLl94MCxuPXRoaXMuX3kwLGk9dGhpcy5feDEsbz10aGlzLl95MTtpZihpc05hTihyKSlpPShyPU1hdGguZmxvb3IoZSkpKzEsbz0obj1NYXRoLmZsb29yKHQpKSsxO2Vsc2V7Zm9yKHZhciBhPWktcixzPXRoaXMuX3Jvb3QsbCxjO3I+ZXx8ZT49aXx8bj50fHx0Pj1vOylzd2l0Y2goYz0odDxuKTw8MXxlPHIsbD1uZXcgQXJyYXkoNCksbFtjXT1zLHM9bCxhKj0yLGMpe2Nhc2UgMDppPXIrYSxvPW4rYTticmVhaztjYXNlIDE6cj1pLWEsbz1uK2E7YnJlYWs7Y2FzZSAyOmk9cithLG49by1hO2JyZWFrO2Nhc2UgMzpyPWktYSxuPW8tYTticmVha310aGlzLl9yb290JiZ0aGlzLl9yb290Lmxlbmd0aCYmKHRoaXMuX3Jvb3Q9cyl9cmV0dXJuIHRoaXMuX3gwPXIsdGhpcy5feTA9bix0aGlzLl94MT1pLHRoaXMuX3kxPW8sdGhpc31mdW5jdGlvbiBLMXQoKXt2YXIgZT1bXTtyZXR1cm4gdGhpcy52aXNpdChmdW5jdGlvbih0KXtpZighdC5sZW5ndGgpZG8gZS5wdXNoKHQuZGF0YSk7d2hpbGUodD10Lm5leHQpfSksZX1mdW5jdGlvbiBaMXQoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5jb3ZlcigrZVswXVswXSwrZVswXVsxXSkuY292ZXIoK2VbMV1bMF0sK2VbMV1bMV0pOmlzTmFOKHRoaXMuX3gwKT92b2lkIDA6W1t0aGlzLl94MCx0aGlzLl95MF0sW3RoaXMuX3gxLHRoaXMuX3kxXV19ZnVuY3Rpb24geW8oZSx0LHIsbixpKXt0aGlzLm5vZGU9ZSx0aGlzLngwPXQsdGhpcy55MD1yLHRoaXMueDE9bix0aGlzLnkxPWl9ZnVuY3Rpb24gSjF0KGUsdCxyKXt2YXIgbixpPXRoaXMuX3gwLG89dGhpcy5feTAsYSxzLGwsYyx1PXRoaXMuX3gxLGg9dGhpcy5feTEsZj1bXSxwPXRoaXMuX3Jvb3QsZCxnO2ZvcihwJiZmLnB1c2gobmV3IHlvKHAsaSxvLHUsaCkpLHI9PW51bGw/cj0xLzA6KGk9ZS1yLG89dC1yLHU9ZStyLGg9dCtyLHIqPXIpO2Q9Zi5wb3AoKTspaWYoISghKHA9ZC5ub2RlKXx8KGE9ZC54MCk+dXx8KHM9ZC55MCk+aHx8KGw9ZC54MSk8aXx8KGM9ZC55MSk8bykpaWYocC5sZW5ndGgpe3ZhciBfPShhK2wpLzIseT0ocytjKS8yO2YucHVzaChuZXcgeW8ocFszXSxfLHksbCxjKSxuZXcgeW8ocFsyXSxhLHksXyxjKSxuZXcgeW8ocFsxXSxfLHMsbCx5KSxuZXcgeW8ocFswXSxhLHMsXyx5KSksKGc9KHQ+PXkpPDwxfGU+PV8pJiYoZD1mW2YubGVuZ3RoLTFdLGZbZi5sZW5ndGgtMV09ZltmLmxlbmd0aC0xLWddLGZbZi5sZW5ndGgtMS1nXT1kKX1lbHNle3ZhciB4PWUtK3RoaXMuX3guY2FsbChudWxsLHAuZGF0YSksYj10LSt0aGlzLl95LmNhbGwobnVsbCxwLmRhdGEpLFM9eCp4K2IqYjtpZihTPHIpe3ZhciBDPU1hdGguc3FydChyPVMpO2k9ZS1DLG89dC1DLHU9ZStDLGg9dCtDLG49cC5kYXRhfX1yZXR1cm4gbn1mdW5jdGlvbiBRMXQoZSl7aWYoaXNOYU4odT0rdGhpcy5feC5jYWxsKG51bGwsZSkpfHxpc05hTihoPSt0aGlzLl95LmNhbGwobnVsbCxlKSkpcmV0dXJuIHRoaXM7dmFyIHQscj10aGlzLl9yb290LG4saSxvLGE9dGhpcy5feDAscz10aGlzLl95MCxsPXRoaXMuX3gxLGM9dGhpcy5feTEsdSxoLGYscCxkLGcsXyx5O2lmKCFyKXJldHVybiB0aGlzO2lmKHIubGVuZ3RoKWZvcig7Oyl7aWYoKGQ9dT49KGY9KGErbCkvMikpP2E9ZjpsPWYsKGc9aD49KHA9KHMrYykvMikpP3M9cDpjPXAsdD1yLCEocj1yW189Zzw8MXxkXSkpcmV0dXJuIHRoaXM7aWYoIXIubGVuZ3RoKWJyZWFrOyh0W18rMSYzXXx8dFtfKzImM118fHRbXyszJjNdKSYmKG49dCx5PV8pfWZvcig7ci5kYXRhIT09ZTspaWYoaT1yLCEocj1yLm5leHQpKXJldHVybiB0aGlzO3JldHVybihvPXIubmV4dCkmJmRlbGV0ZSByLm5leHQsaT8obz9pLm5leHQ9bzpkZWxldGUgaS5uZXh0LHRoaXMpOnQ/KG8/dFtfXT1vOmRlbGV0ZSB0W19dLChyPXRbMF18fHRbMV18fHRbMl18fHRbM10pJiZyPT09KHRbM118fHRbMl18fHRbMV18fHRbMF0pJiYhci5sZW5ndGgmJihuP25beV09cjp0aGlzLl9yb290PXIpLHRoaXMpOih0aGlzLl9yb290PW8sdGhpcyl9ZnVuY3Rpb24gdHh0KGUpe2Zvcih2YXIgdD0wLHI9ZS5sZW5ndGg7dDxyOysrdCl0aGlzLnJlbW92ZShlW3RdKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBleHQoKXtyZXR1cm4gdGhpcy5fcm9vdH1mdW5jdGlvbiByeHQoKXt2YXIgZT0wO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKHQpe2lmKCF0Lmxlbmd0aClkbysrZTt3aGlsZSh0PXQubmV4dCl9KSxlfWZ1bmN0aW9uIG54dChlKXt2YXIgdD1bXSxyLG49dGhpcy5fcm9vdCxpLG8sYSxzLGw7Zm9yKG4mJnQucHVzaChuZXcgeW8obix0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO3I9dC5wb3AoKTspaWYoIWUobj1yLm5vZGUsbz1yLngwLGE9ci55MCxzPXIueDEsbD1yLnkxKSYmbi5sZW5ndGgpe3ZhciBjPShvK3MpLzIsdT0oYStsKS8yOyhpPW5bM10pJiZ0LnB1c2gobmV3IHlvKGksYyx1LHMsbCkpLChpPW5bMl0pJiZ0LnB1c2gobmV3IHlvKGksbyx1LGMsbCkpLChpPW5bMV0pJiZ0LnB1c2gobmV3IHlvKGksYyxhLHMsdSkpLChpPW5bMF0pJiZ0LnB1c2gobmV3IHlvKGksbyxhLGMsdSkpfXJldHVybiB0aGlzfWZ1bmN0aW9uIGl4dChlKXt2YXIgdD1bXSxyPVtdLG47Zm9yKHRoaXMuX3Jvb3QmJnQucHVzaChuZXcgeW8odGhpcy5fcm9vdCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO249dC5wb3AoKTspe3ZhciBpPW4ubm9kZTtpZihpLmxlbmd0aCl7dmFyIG8sYT1uLngwLHM9bi55MCxsPW4ueDEsYz1uLnkxLHU9KGErbCkvMixoPShzK2MpLzI7KG89aVswXSkmJnQucHVzaChuZXcgeW8obyxhLHMsdSxoKSksKG89aVsxXSkmJnQucHVzaChuZXcgeW8obyx1LHMsbCxoKSksKG89aVsyXSkmJnQucHVzaChuZXcgeW8obyxhLGgsdSxjKSksKG89aVszXSkmJnQucHVzaChuZXcgeW8obyx1LGgsbCxjKSl9ci5wdXNoKG4pfWZvcig7bj1yLnBvcCgpOyllKG4ubm9kZSxuLngwLG4ueTAsbi54MSxuLnkxKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBveHQoZSl7cmV0dXJuIGVbMF19ZnVuY3Rpb24gYXh0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl94PWUsdGhpcyk6dGhpcy5feH1mdW5jdGlvbiBzeHQoZSl7cmV0dXJuIGVbMV19ZnVuY3Rpb24gbHh0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl95PWUsdGhpcyk6dGhpcy5feX1mdW5jdGlvbiBGaChlLHQscil7dmFyIG49bmV3IHNqKHQ9PW51bGw/b3h0OnQscj09bnVsbD9zeHQ6cixOYU4sTmFOLE5hTixOYU4pO3JldHVybiBlPT1udWxsP246bi5hZGRBbGwoZSl9ZnVuY3Rpb24gc2ooZSx0LHIsbixpLG8pe3RoaXMuX3g9ZSx0aGlzLl95PXQsdGhpcy5feDA9cix0aGlzLl95MD1uLHRoaXMuX3gxPWksdGhpcy5feTE9byx0aGlzLl9yb290PXZvaWQgMH1mdW5jdGlvbiBjeHQoZSl7Zm9yKHZhciB0PXtkYXRhOmUuZGF0YX0scj10O2U9ZS5uZXh0OylyPXIubmV4dD17ZGF0YTplLmRhdGF9O3JldHVybiB0fXZhciBGYT1GaC5wcm90b3R5cGU9c2oucHJvdG90eXBlO0ZhLmNvcHk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgc2oodGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSx0PXRoaXMuX3Jvb3QscixuO2lmKCF0KXJldHVybiBlO2lmKCF0Lmxlbmd0aClyZXR1cm4gZS5fcm9vdD1jeHQodCksZTtmb3Iocj1be3NvdXJjZTp0LHRhcmdldDplLl9yb290PW5ldyBBcnJheSg0KX1dO3Q9ci5wb3AoKTspZm9yKHZhciBpPTA7aTw0OysraSkobj10LnNvdXJjZVtpXSkmJihuLmxlbmd0aD9yLnB1c2goe3NvdXJjZTpuLHRhcmdldDp0LnRhcmdldFtpXT1uZXcgQXJyYXkoNCl9KTp0LnRhcmdldFtpXT1jeHQobikpO3JldHVybiBlfTtGYS5hZGQ9WTF0O0ZhLmFkZEFsbD1YMXQ7RmEuY292ZXI9JDF0O0ZhLmRhdGE9SzF0O0ZhLmV4dGVudD1aMXQ7RmEuZmluZD1KMXQ7RmEucmVtb3ZlPVExdDtGYS5yZW1vdmVBbGw9dHh0O0ZhLnJvb3Q9ZXh0O0ZhLnNpemU9cnh0O0ZhLnZpc2l0PW54dDtGYS52aXNpdEFmdGVyPWl4dDtGYS54PWF4dDtGYS55PWx4dDtmdW5jdGlvbiBKU2UoZSl7cmV0dXJuIGUueCtlLnZ4fWZ1bmN0aW9uIFFTZShlKXtyZXR1cm4gZS55K2Uudnl9ZnVuY3Rpb24gdXh0KGUpe3ZhciB0LHIsbj0xLGk9MTt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9T24oZT09bnVsbD8xOitlKSk7ZnVuY3Rpb24gbygpe2Zvcih2YXIgbCxjPXQubGVuZ3RoLHUsaCxmLHAsZCxnLF89MDtfPGk7KytfKWZvcih1PUZoKHQsSlNlLFFTZSkudmlzaXRBZnRlcihhKSxsPTA7bDxjOysrbCloPXRbbF0sZD1yW2guaW5kZXhdLGc9ZCpkLGY9aC54K2gudngscD1oLnkraC52eSx1LnZpc2l0KHkpO2Z1bmN0aW9uIHkoeCxiLFMsQyxQKXt2YXIgaz14LmRhdGEsTz14LnIsRD1kK087aWYoayl7aWYoay5pbmRleD5oLmluZGV4KXt2YXIgQj1mLWsueC1rLnZ4LEk9cC1rLnktay52eSxMPUIqQitJKkk7TDxEKkQmJihCPT09MCYmKEI9ZnUoKSxMKz1CKkIpLEk9PT0wJiYoST1mdSgpLEwrPUkqSSksTD0oRC0oTD1NYXRoLnNxcnQoTCkpKS9MKm4saC52eCs9KEIqPUwpKihEPShPKj1PKS8oZytPKSksaC52eSs9KEkqPUwpKkQsay52eC09QiooRD0xLUQpLGsudnktPUkqRCl9cmV0dXJufXJldHVybiBiPmYrRHx8QzxmLUR8fFM+cCtEfHxQPHAtRH19ZnVuY3Rpb24gYShsKXtpZihsLmRhdGEpcmV0dXJuIGwucj1yW2wuZGF0YS5pbmRleF07Zm9yKHZhciBjPWwucj0wO2M8NDsrK2MpbFtjXSYmbFtjXS5yPmwuciYmKGwucj1sW2NdLnIpfWZ1bmN0aW9uIHMoKXtpZighIXQpe3ZhciBsLGM9dC5sZW5ndGgsdTtmb3Iocj1uZXcgQXJyYXkoYyksbD0wO2w8YzsrK2wpdT10W2xdLHJbdS5pbmRleF09K2UodSxsLHQpfX1yZXR1cm4gby5pbml0aWFsaXplPWZ1bmN0aW9uKGwpe3Q9bCxzKCl9LG8uaXRlcmF0aW9ucz1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rbCxvKTppfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStsLG8pOm59LG8ucmFkaXVzPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBsPT0iZnVuY3Rpb24iP2w6T24oK2wpLHMoKSxvKTplfSxvfVRiKCk7ZnVuY3Rpb24gdDNlKGUpe3JldHVybiBlLmluZGV4fWZ1bmN0aW9uIGh4dChlLHQpe3ZhciByPWUuZ2V0KHQpO2lmKCFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIit0KTtyZXR1cm4gcn1mdW5jdGlvbiBmeHQoZSl7dmFyIHQ9dDNlLHI9dSxuLGk9T24oMzApLG8sYSxzLGwsYz0xO2U9PW51bGwmJihlPVtdKTtmdW5jdGlvbiB1KGcpe3JldHVybiAxL01hdGgubWluKHNbZy5zb3VyY2UuaW5kZXhdLHNbZy50YXJnZXQuaW5kZXhdKX1mdW5jdGlvbiBoKGcpe2Zvcih2YXIgXz0wLHk9ZS5sZW5ndGg7XzxjOysrXylmb3IodmFyIHg9MCxiLFMsQyxQLGssTyxEO3g8eTsrK3gpYj1lW3hdLFM9Yi5zb3VyY2UsQz1iLnRhcmdldCxQPUMueCtDLnZ4LVMueC1TLnZ4fHxmdSgpLGs9Qy55K0MudnktUy55LVMudnl8fGZ1KCksTz1NYXRoLnNxcnQoUCpQK2sqayksTz0oTy1vW3hdKS9PKmcqblt4XSxQKj1PLGsqPU8sQy52eC09UCooRD1sW3hdKSxDLnZ5LT1rKkQsUy52eCs9UCooRD0xLUQpLFMudnkrPWsqRH1mdW5jdGlvbiBmKCl7aWYoISFhKXt2YXIgZyxfPWEubGVuZ3RoLHk9ZS5sZW5ndGgseD1KaShhLHQpLGI7Zm9yKGc9MCxzPW5ldyBBcnJheShfKTtnPHk7KytnKWI9ZVtnXSxiLmluZGV4PWcsdHlwZW9mIGIuc291cmNlIT0ib2JqZWN0IiYmKGIuc291cmNlPWh4dCh4LGIuc291cmNlKSksdHlwZW9mIGIudGFyZ2V0IT0ib2JqZWN0IiYmKGIudGFyZ2V0PWh4dCh4LGIudGFyZ2V0KSksc1tiLnNvdXJjZS5pbmRleF09KHNbYi5zb3VyY2UuaW5kZXhdfHwwKSsxLHNbYi50YXJnZXQuaW5kZXhdPShzW2IudGFyZ2V0LmluZGV4XXx8MCkrMTtmb3IoZz0wLGw9bmV3IEFycmF5KHkpO2c8eTsrK2cpYj1lW2ddLGxbZ109c1tiLnNvdXJjZS5pbmRleF0vKHNbYi5zb3VyY2UuaW5kZXhdK3NbYi50YXJnZXQuaW5kZXhdKTtuPW5ldyBBcnJheSh5KSxwKCksbz1uZXcgQXJyYXkoeSksZCgpfX1mdW5jdGlvbiBwKCl7aWYoISFhKWZvcih2YXIgZz0wLF89ZS5sZW5ndGg7ZzxfOysrZyluW2ddPStyKGVbZ10sZyxlKX1mdW5jdGlvbiBkKCl7aWYoISFhKWZvcih2YXIgZz0wLF89ZS5sZW5ndGg7ZzxfOysrZylvW2ddPStpKGVbZ10sZyxlKX1yZXR1cm4gaC5pbml0aWFsaXplPWZ1bmN0aW9uKGcpe2E9ZyxmKCl9LGgubGlua3M9ZnVuY3Rpb24oZyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ZyxmKCksaCk6ZX0saC5pZD1mdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1nLGgpOnR9LGguaXRlcmF0aW9ucz1mdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rZyxoKTpjfSxoLnN0cmVuZ3RoPWZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBnPT0iZnVuY3Rpb24iP2c6T24oK2cpLHAoKSxoKTpyfSxoLmRpc3RhbmNlPWZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBnPT0iZnVuY3Rpb24iP2c6T24oK2cpLGQoKSxoKTppfSxofVJtKCk7VGIoKTtmdW5jdGlvbiBweHQoZSl7cmV0dXJuIGUueH1mdW5jdGlvbiBkeHQoZSl7cmV0dXJuIGUueX12YXIgZTNlPTEwLHIzZT1NYXRoLlBJKigzLU1hdGguc3FydCg1KSk7ZnVuY3Rpb24gbXh0KGUpe3ZhciB0LHI9MSxuPS4wMDEsaT0xLU1hdGgucG93KG4sMS8zMDApLG89MCxhPS42LHM9SmkoKSxsPVBfKHUpLGM9eHMoInRpY2siLCJlbmQiKTtlPT1udWxsJiYoZT1bXSk7ZnVuY3Rpb24gdSgpe2goKSxjLmNhbGwoInRpY2siLHQpLHI8biYmKGwuc3RvcCgpLGMuY2FsbCgiZW5kIix0KSl9ZnVuY3Rpb24gaChkKXt2YXIgZyxfPWUubGVuZ3RoLHk7ZD09PXZvaWQgMCYmKGQ9MSk7Zm9yKHZhciB4PTA7eDxkOysreClmb3Iocis9KG8tcikqaSxzLmVhY2goZnVuY3Rpb24oYil7YihyKX0pLGc9MDtnPF87KytnKXk9ZVtnXSx5LmZ4PT1udWxsP3kueCs9eS52eCo9YTooeS54PXkuZngseS52eD0wKSx5LmZ5PT1udWxsP3kueSs9eS52eSo9YTooeS55PXkuZnkseS52eT0wKTtyZXR1cm4gdH1mdW5jdGlvbiBmKCl7Zm9yKHZhciBkPTAsZz1lLmxlbmd0aCxfO2Q8ZzsrK2Qpe2lmKF89ZVtkXSxfLmluZGV4PWQsXy5meCE9bnVsbCYmKF8ueD1fLmZ4KSxfLmZ5IT1udWxsJiYoXy55PV8uZnkpLGlzTmFOKF8ueCl8fGlzTmFOKF8ueSkpe3ZhciB5PWUzZSpNYXRoLnNxcnQoZCkseD1kKnIzZTtfLng9eSpNYXRoLmNvcyh4KSxfLnk9eSpNYXRoLnNpbih4KX0oaXNOYU4oXy52eCl8fGlzTmFOKF8udnkpKSYmKF8udng9Xy52eT0wKX19ZnVuY3Rpb24gcChkKXtyZXR1cm4gZC5pbml0aWFsaXplJiZkLmluaXRpYWxpemUoZSksZH1yZXR1cm4gZigpLHQ9e3RpY2s6aCxyZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIGwucmVzdGFydCh1KSx0fSxzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGwuc3RvcCgpLHR9LG5vZGVzOmZ1bmN0aW9uKGQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWQsZigpLHMuZWFjaChwKSx0KTplfSxhbHBoYTpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rZCx0KTpyfSxhbHBoYU1pbjpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rZCx0KTpufSxhbHBoYURlY2F5OmZ1bmN0aW9uKGQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPStkLHQpOitpfSxhbHBoYVRhcmdldDpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rZCx0KTpvfSx2ZWxvY2l0eURlY2F5OmZ1bmN0aW9uKGQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPTEtZCx0KToxLWF9LGZvcmNlOmZ1bmN0aW9uKGQsZyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8oZz09bnVsbD9zLnJlbW92ZShkKTpzLnNldChkLHAoZykpLHQpOnMuZ2V0KGQpfSxmaW5kOmZ1bmN0aW9uKGQsZyxfKXt2YXIgeT0wLHg9ZS5sZW5ndGgsYixTLEMsUCxrO2ZvcihfPT1udWxsP189MS8wOl8qPV8seT0wO3k8eDsrK3kpUD1lW3ldLGI9ZC1QLngsUz1nLVAueSxDPWIqYitTKlMsQzxfJiYoaz1QLF89Qyk7cmV0dXJuIGt9LG9uOmZ1bmN0aW9uKGQsZyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8oYy5vbihkLGcpLHQpOmMub24oZCl9fX1mdW5jdGlvbiBneHQoKXt2YXIgZSx0LHIsbj1PbigtMzApLGksbz0xLGE9MS8wLHM9LjgxO2Z1bmN0aW9uIGwoZil7dmFyIHAsZD1lLmxlbmd0aCxnPUZoKGUscHh0LGR4dCkudmlzaXRBZnRlcih1KTtmb3Iocj1mLHA9MDtwPGQ7KytwKXQ9ZVtwXSxnLnZpc2l0KGgpfWZ1bmN0aW9uIGMoKXtpZighIWUpe3ZhciBmLHA9ZS5sZW5ndGgsZDtmb3IoaT1uZXcgQXJyYXkocCksZj0wO2Y8cDsrK2YpZD1lW2ZdLGlbZC5pbmRleF09K24oZCxmLGUpfX1mdW5jdGlvbiB1KGYpe3ZhciBwPTAsZCxnLF89MCx5LHgsYjtpZihmLmxlbmd0aCl7Zm9yKHk9eD1iPTA7Yjw0OysrYikoZD1mW2JdKSYmKGc9TWF0aC5hYnMoZC52YWx1ZSkpJiYocCs9ZC52YWx1ZSxfKz1nLHkrPWcqZC54LHgrPWcqZC55KTtmLng9eS9fLGYueT14L199ZWxzZXtkPWYsZC54PWQuZGF0YS54LGQueT1kLmRhdGEueTtkbyBwKz1pW2QuZGF0YS5pbmRleF07d2hpbGUoZD1kLm5leHQpfWYudmFsdWU9cH1mdW5jdGlvbiBoKGYscCxkLGcpe2lmKCFmLnZhbHVlKXJldHVybiEwO3ZhciBfPWYueC10LngseT1mLnktdC55LHg9Zy1wLGI9XypfK3kqeTtpZih4KngvczxiKXJldHVybiBiPGEmJihfPT09MCYmKF89ZnUoKSxiKz1fKl8pLHk9PT0wJiYoeT1mdSgpLGIrPXkqeSksYjxvJiYoYj1NYXRoLnNxcnQobypiKSksdC52eCs9XypmLnZhbHVlKnIvYix0LnZ5Kz15KmYudmFsdWUqci9iKSwhMDtpZihmLmxlbmd0aHx8Yj49YSlyZXR1cm47KGYuZGF0YSE9PXR8fGYubmV4dCkmJihfPT09MCYmKF89ZnUoKSxiKz1fKl8pLHk9PT0wJiYoeT1mdSgpLGIrPXkqeSksYjxvJiYoYj1NYXRoLnNxcnQobypiKSkpO2RvIGYuZGF0YSE9PXQmJih4PWlbZi5kYXRhLmluZGV4XSpyL2IsdC52eCs9Xyp4LHQudnkrPXkqeCk7d2hpbGUoZj1mLm5leHQpfXJldHVybiBsLmluaXRpYWxpemU9ZnVuY3Rpb24oZil7ZT1mLGMoKX0sbC5zdHJlbmd0aD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOk9uKCtmKSxjKCksbCk6bn0sbC5kaXN0YW5jZU1pbj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1mKmYsbCk6TWF0aC5zcXJ0KG8pfSxsLmRpc3RhbmNlTWF4PWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPWYqZixsKTpNYXRoLnNxcnQoYSl9LGwudGhldGE9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ZipmLGwpOk1hdGguc3FydChzKX0sbH1mdW5jdGlvbiBfeHQoZSx0LHIpe3ZhciBuLGk9T24oLjEpLG8sYTt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9T24oK2UpKSx0PT1udWxsJiYodD0wKSxyPT1udWxsJiYocj0wKTtmdW5jdGlvbiBzKGMpe2Zvcih2YXIgdT0wLGg9bi5sZW5ndGg7dTxoOysrdSl7dmFyIGY9blt1XSxwPWYueC10fHwxZS02LGQ9Zi55LXJ8fDFlLTYsZz1NYXRoLnNxcnQocCpwK2QqZCksXz0oYVt1XS1nKSpvW3VdKmMvZztmLnZ4Kz1wKl8sZi52eSs9ZCpffX1mdW5jdGlvbiBsKCl7aWYoISFuKXt2YXIgYyx1PW4ubGVuZ3RoO2ZvcihvPW5ldyBBcnJheSh1KSxhPW5ldyBBcnJheSh1KSxjPTA7Yzx1OysrYylhW2NdPStlKG5bY10sYyxuKSxvW2NdPWlzTmFOKGFbY10pPzA6K2kobltjXSxjLG4pfX1yZXR1cm4gcy5pbml0aWFsaXplPWZ1bmN0aW9uKGMpe249YyxsKCl9LHMuc3RyZW5ndGg9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpPbigrYyksbCgpLHMpOml9LHMucmFkaXVzPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6T24oK2MpLGwoKSxzKTplfSxzLng9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2Mscyk6dH0scy55PWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPStjLHMpOnJ9LHN9ZnVuY3Rpb24geXh0KGUpe3ZhciB0PU9uKC4xKSxyLG4saTt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9T24oZT09bnVsbD8wOitlKSk7ZnVuY3Rpb24gbyhzKXtmb3IodmFyIGw9MCxjPXIubGVuZ3RoLHU7bDxjOysrbCl1PXJbbF0sdS52eCs9KGlbbF0tdS54KSpuW2xdKnN9ZnVuY3Rpb24gYSgpe2lmKCEhcil7dmFyIHMsbD1yLmxlbmd0aDtmb3Iobj1uZXcgQXJyYXkobCksaT1uZXcgQXJyYXkobCkscz0wO3M8bDsrK3MpbltzXT1pc05hTihpW3NdPStlKHJbc10scyxyKSk/MDordChyW3NdLHMscil9fXJldHVybiBvLmluaXRpYWxpemU9ZnVuY3Rpb24ocyl7cj1zLGEoKX0sby5zdHJlbmd0aD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOk9uKCtzKSxhKCksbyk6dH0sby54PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6T24oK3MpLGEoKSxvKTplfSxvfWZ1bmN0aW9uIHZ4dChlKXt2YXIgdD1PbiguMSkscixuLGk7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPU9uKGU9PW51bGw/MDorZSkpO2Z1bmN0aW9uIG8ocyl7Zm9yKHZhciBsPTAsYz1yLmxlbmd0aCx1O2w8YzsrK2wpdT1yW2xdLHUudnkrPShpW2xdLXUueSkqbltsXSpzfWZ1bmN0aW9uIGEoKXtpZighIXIpe3ZhciBzLGw9ci5sZW5ndGg7Zm9yKG49bmV3IEFycmF5KGwpLGk9bmV3IEFycmF5KGwpLHM9MDtzPGw7KytzKW5bc109aXNOYU4oaVtzXT0rZShyW3NdLHMscikpPzA6K3QocltzXSxzLHIpfX1yZXR1cm4gby5pbml0aWFsaXplPWZ1bmN0aW9uKHMpe3I9cyxhKCl9LG8uc3RyZW5ndGg9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpPbigrcyksYSgpLG8pOnR9LG8ueT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOk9uKCtzKSxhKCksbyk6ZX0sb31mdW5jdGlvbiB4eHQoZSl7cmV0dXJuIE1hdGguYWJzKGU9TWF0aC5yb3VuZChlKSk+PTFlMjE/ZS50b0xvY2FsZVN0cmluZygiZW4iKS5yZXBsYWNlKC8sL2csIiIpOmUudG9TdHJpbmcoMTApfWZ1bmN0aW9uIHpfKGUsdCl7aWYoKHI9KGU9dD9lLnRvRXhwb25lbnRpYWwodC0xKTplLnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciByLG49ZS5zbGljZSgwLHIpO3JldHVybltuLmxlbmd0aD4xP25bMF0rbi5zbGljZSgyKTpuLCtlLnNsaWNlKHIrMSldfWZ1bmN0aW9uIEJoKGUpe3JldHVybiBlPXpfKE1hdGguYWJzKGUpKSxlP2VbMV06TmFOfWZ1bmN0aW9uIGJ4dChlLHQpe3JldHVybiBmdW5jdGlvbihyLG4pe2Zvcih2YXIgaT1yLmxlbmd0aCxvPVtdLGE9MCxzPWVbMF0sbD0wO2k+MCYmcz4wJiYobCtzKzE+biYmKHM9TWF0aC5tYXgoMSxuLWwpKSxvLnB1c2goci5zdWJzdHJpbmcoaS09cyxpK3MpKSwhKChsKz1zKzEpPm4pKTspcz1lW2E9KGErMSklZS5sZW5ndGhdO3JldHVybiBvLnJldmVyc2UoKS5qb2luKHQpfX1mdW5jdGlvbiB3eHQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoL1swLTldL2csZnVuY3Rpb24ocil7cmV0dXJuIGVbK3JdfSl9fXZhciBuM2U9L14oPzooLik/KFs8Pj1eXSkpPyhbK1wtKCBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC5cZCspPyh+KT8oW2EteiVdKT8kL2k7ZnVuY3Rpb24ga3AoZSl7aWYoISh0PW4zZS5leGVjKGUpKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK2UpO3ZhciB0O3JldHVybiBuZXcgR0Uoe2ZpbGw6dFsxXSxhbGlnbjp0WzJdLHNpZ246dFszXSxzeW1ib2w6dFs0XSx6ZXJvOnRbNV0sd2lkdGg6dFs2XSxjb21tYTp0WzddLHByZWNpc2lvbjp0WzhdJiZ0WzhdLnNsaWNlKDEpLHRyaW06dFs5XSx0eXBlOnRbMTBdfSl9a3AucHJvdG90eXBlPUdFLnByb3RvdHlwZTtmdW5jdGlvbiBHRShlKXt0aGlzLmZpbGw9ZS5maWxsPT09dm9pZCAwPyIgIjplLmZpbGwrIiIsdGhpcy5hbGlnbj1lLmFsaWduPT09dm9pZCAwPyI+IjplLmFsaWduKyIiLHRoaXMuc2lnbj1lLnNpZ249PT12b2lkIDA/Ii0iOmUuc2lnbisiIix0aGlzLnN5bWJvbD1lLnN5bWJvbD09PXZvaWQgMD8iIjplLnN5bWJvbCsiIix0aGlzLnplcm89ISFlLnplcm8sdGhpcy53aWR0aD1lLndpZHRoPT09dm9pZCAwP3ZvaWQgMDorZS53aWR0aCx0aGlzLmNvbW1hPSEhZS5jb21tYSx0aGlzLnByZWNpc2lvbj1lLnByZWNpc2lvbj09PXZvaWQgMD92b2lkIDA6K2UucHJlY2lzaW9uLHRoaXMudHJpbT0hIWUudHJpbSx0aGlzLnR5cGU9ZS50eXBlPT09dm9pZCAwPyIiOmUudHlwZSsiIn1HRS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsodGhpcy53aWR0aD09PXZvaWQgMD8iIjpNYXRoLm1heCgxLHRoaXMud2lkdGh8MCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKHRoaXMucHJlY2lzaW9uPT09dm9pZCAwPyIiOiIuIitNYXRoLm1heCgwLHRoaXMucHJlY2lzaW9ufDApKSsodGhpcy50cmltPyJ+IjoiIikrdGhpcy50eXBlfTtmdW5jdGlvbiBTeHQoZSl7dDpmb3IodmFyIHQ9ZS5sZW5ndGgscj0xLG49LTEsaTtyPHQ7KytyKXN3aXRjaChlW3JdKXtjYXNlIi4iOm49aT1yO2JyZWFrO2Nhc2UiMCI6bj09PTAmJihuPXIpLGk9cjticmVhaztkZWZhdWx0OmlmKCErZVtyXSlicmVhayB0O24+MCYmKG49MCk7YnJlYWt9cmV0dXJuIG4+MD9lLnNsaWNlKDAsbikrZS5zbGljZShpKzEpOmV9dmFyIGxqO2Z1bmN0aW9uIE14dChlLHQpe3ZhciByPXpfKGUsdCk7aWYoIXIpcmV0dXJuIGUrIiI7dmFyIG49clswXSxpPXJbMV0sbz1pLShsaj1NYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoaS8zKSkpKjMpKzEsYT1uLmxlbmd0aDtyZXR1cm4gbz09PWE/bjpvPmE/bituZXcgQXJyYXkoby1hKzEpLmpvaW4oIjAiKTpvPjA/bi5zbGljZSgwLG8pKyIuIituLnNsaWNlKG8pOiIwLiIrbmV3IEFycmF5KDEtbykuam9pbigiMCIpK3pfKGUsTWF0aC5tYXgoMCx0K28tMSkpWzBdfWZ1bmN0aW9uIGNqKGUsdCl7dmFyIHI9el8oZSx0KTtpZighcilyZXR1cm4gZSsiIjt2YXIgbj1yWzBdLGk9clsxXTtyZXR1cm4gaTwwPyIwLiIrbmV3IEFycmF5KC1pKS5qb2luKCIwIikrbjpuLmxlbmd0aD5pKzE/bi5zbGljZSgwLGkrMSkrIi4iK24uc2xpY2UoaSsxKTpuK25ldyBBcnJheShpLW4ubGVuZ3RoKzIpLmpvaW4oIjAiKX12YXIgdWo9eyIlIjpmdW5jdGlvbihlLHQpe3JldHVybihlKjEwMCkudG9GaXhlZCh0KX0sYjpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygyKX0sYzpmdW5jdGlvbihlKXtyZXR1cm4gZSsiIn0sZDp4eHQsZTpmdW5jdGlvbihlLHQpe3JldHVybiBlLnRvRXhwb25lbnRpYWwodCl9LGY6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS50b0ZpeGVkKHQpfSxnOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudG9QcmVjaXNpb24odCl9LG86ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQoZSkudG9TdHJpbmcoOCl9LHA6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gY2ooZSoxMDAsdCl9LHI6Y2osczpNeHQsWDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX0seDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygxNil9fTtmdW5jdGlvbiBoaihlKXtyZXR1cm4gZX12YXIgRXh0PUFycmF5LnByb3RvdHlwZS5tYXAsVHh0PVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiXHhCNSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdO2Z1bmN0aW9uIGVrKGUpe3ZhciB0PWUuZ3JvdXBpbmc9PT12b2lkIDB8fGUudGhvdXNhbmRzPT09dm9pZCAwP2hqOmJ4dChFeHQuY2FsbChlLmdyb3VwaW5nLE51bWJlciksZS50aG91c2FuZHMrIiIpLHI9ZS5jdXJyZW5jeT09PXZvaWQgMD8iIjplLmN1cnJlbmN5WzBdKyIiLG49ZS5jdXJyZW5jeT09PXZvaWQgMD8iIjplLmN1cnJlbmN5WzFdKyIiLGk9ZS5kZWNpbWFsPT09dm9pZCAwPyIuIjplLmRlY2ltYWwrIiIsbz1lLm51bWVyYWxzPT09dm9pZCAwP2hqOnd4dChFeHQuY2FsbChlLm51bWVyYWxzLFN0cmluZykpLGE9ZS5wZXJjZW50PT09dm9pZCAwPyIlIjplLnBlcmNlbnQrIiIscz1lLm1pbnVzPT09dm9pZCAwPyItIjplLm1pbnVzKyIiLGw9ZS5uYW49PT12b2lkIDA/Ik5hTiI6ZS5uYW4rIiI7ZnVuY3Rpb24gYyhoKXtoPWtwKGgpO3ZhciBmPWguZmlsbCxwPWguYWxpZ24sZD1oLnNpZ24sZz1oLnN5bWJvbCxfPWguemVybyx5PWgud2lkdGgseD1oLmNvbW1hLGI9aC5wcmVjaXNpb24sUz1oLnRyaW0sQz1oLnR5cGU7Qz09PSJuIj8oeD0hMCxDPSJnIik6dWpbQ118fChiPT09dm9pZCAwJiYoYj0xMiksUz0hMCxDPSJnIiksKF98fGY9PT0iMCImJnA9PT0iPSIpJiYoXz0hMCxmPSIwIixwPSI9Iik7dmFyIFA9Zz09PSIkIj9yOmc9PT0iIyImJi9bYm94WF0vLnRlc3QoQyk/IjAiK0MudG9Mb3dlckNhc2UoKToiIixrPWc9PT0iJCI/bjovWyVwXS8udGVzdChDKT9hOiIiLE89dWpbQ10sRD0vW2RlZmdwcnMlXS8udGVzdChDKTtiPWI9PT12b2lkIDA/NjovW2dwcnNdLy50ZXN0KEMpP01hdGgubWF4KDEsTWF0aC5taW4oMjEsYikpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsYikpO2Z1bmN0aW9uIEIoSSl7dmFyIEw9UCxSPWssRix6LFU7aWYoQz09PSJjIilSPU8oSSkrUixJPSIiO2Vsc2V7ST0rSTt2YXIgVz1JPDB8fDEvSTwwO2lmKEk9aXNOYU4oSSk/bDpPKE1hdGguYWJzKEkpLGIpLFMmJihJPVN4dChJKSksVyYmK0k9PTAmJmQhPT0iKyImJihXPSExKSxMPShXP2Q9PT0iKCI/ZDpzOmQ9PT0iLSJ8fGQ9PT0iKCI/IiI6ZCkrTCxSPShDPT09InMiP1R4dFs4K2xqLzNdOiIiKStSKyhXJiZkPT09IigiPyIpIjoiIiksRCl7Zm9yKEY9LTEsej1JLmxlbmd0aDsrK0Y8ejspaWYoVT1JLmNoYXJDb2RlQXQoRiksNDg+VXx8VT41Nyl7Uj0oVT09PTQ2P2krSS5zbGljZShGKzEpOkkuc2xpY2UoRikpK1IsST1JLnNsaWNlKDAsRik7YnJlYWt9fX14JiYhXyYmKEk9dChJLDEvMCkpO3ZhciBaPUwubGVuZ3RoK0kubGVuZ3RoK1IubGVuZ3RoLHJ0PVo8eT9uZXcgQXJyYXkoeS1aKzEpLmpvaW4oZik6IiI7c3dpdGNoKHgmJl8mJihJPXQocnQrSSxydC5sZW5ndGg/eS1SLmxlbmd0aDoxLzApLHJ0PSIiKSxwKXtjYXNlIjwiOkk9TCtJK1IrcnQ7YnJlYWs7Y2FzZSI9IjpJPUwrcnQrSStSO2JyZWFrO2Nhc2UiXiI6ST1ydC5zbGljZSgwLFo9cnQubGVuZ3RoPj4xKStMK0krUitydC5zbGljZShaKTticmVhaztkZWZhdWx0Okk9cnQrTCtJK1I7YnJlYWt9cmV0dXJuIG8oSSl9cmV0dXJuIEIudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gaCsiIn0sQn1mdW5jdGlvbiB1KGgsZil7dmFyIHA9YygoaD1rcChoKSxoLnR5cGU9ImYiLGgpKSxkPU1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihCaChmKS8zKSkpKjMsZz1NYXRoLnBvdygxMCwtZCksXz1UeHRbOCtkLzNdO3JldHVybiBmdW5jdGlvbih5KXtyZXR1cm4gcChnKnkpK199fXJldHVybntmb3JtYXQ6Yyxmb3JtYXRQcmVmaXg6dX19dmFyIHJrLHhuLFdFO25rKHtkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXSxtaW51czoiLSJ9KTtmdW5jdGlvbiBuayhlKXtyZXR1cm4gcms9ZWsoZSkseG49cmsuZm9ybWF0LFdFPXJrLmZvcm1hdFByZWZpeCxya31mdW5jdGlvbiBpayhlKXtyZXR1cm4gTWF0aC5tYXgoMCwtQmgoTWF0aC5hYnMoZSkpKX1mdW5jdGlvbiBvayhlLHQpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihCaCh0KS8zKSkpKjMtQmgoTWF0aC5hYnMoZSkpKX1mdW5jdGlvbiBhayhlLHQpe3JldHVybiBlPU1hdGguYWJzKGUpLHQ9TWF0aC5hYnModCktZSxNYXRoLm1heCgwLEJoKHQpLUJoKGUpKSsxfWZ1bmN0aW9uIE1zKCl7cmV0dXJuIG5ldyBsa31mdW5jdGlvbiBsaygpe3RoaXMucmVzZXQoKX1say5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmxrLHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5zPXRoaXMudD0wfSxhZGQ6ZnVuY3Rpb24oZSl7Q3h0KHNrLGUsdGhpcy50KSxDeHQodGhpcyxzay5zLHRoaXMucyksdGhpcy5zP3RoaXMudCs9c2sudDp0aGlzLnM9c2sudH0sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN9fTt2YXIgc2s9bmV3IGxrO2Z1bmN0aW9uIEN4dChlLHQscil7dmFyIG49ZS5zPXQrcixpPW4tdCxvPW4taTtlLnQ9dC1vKyhyLWkpfXZhciBsZT0xZS02LEZfPTFlLTEyLEJlPU1hdGguUEksbW49QmUvMixQYj1CZS80LHdpPUJlKjIsdnI9MTgwL0JlLHllPUJlLzE4MCxSZT1NYXRoLmFicyxpYz1NYXRoLmF0YW4sYm49TWF0aC5hdGFuMixadD1NYXRoLmNvcyxZRT1NYXRoLmNlaWwsY2s9TWF0aC5leHA7dmFyIEJfPU1hdGgubG9nLHVrPU1hdGgucG93LFh0PU1hdGguc2luLHVhPU1hdGguc2lnbnx8ZnVuY3Rpb24oZSl7cmV0dXJuIGU+MD8xOmU8MD8tMTowfSx4cj1NYXRoLnNxcnQsSWI9TWF0aC50YW47ZnVuY3Rpb24gaGsoZSl7cmV0dXJuIGU+MT8wOmU8LTE/QmU6TWF0aC5hY29zKGUpfWZ1bmN0aW9uIHduKGUpe3JldHVybiBlPjE/bW46ZTwtMT8tbW46TWF0aC5hc2luKGUpfWZ1bmN0aW9uIGZqKGUpe3JldHVybihlPVh0KGUvMikpKmV9ZnVuY3Rpb24gRnIoKXt9ZnVuY3Rpb24gZmsoZSx0KXtlJiZQeHQuaGFzT3duUHJvcGVydHkoZS50eXBlKSYmUHh0W2UudHlwZV0oZSx0KX12YXIgQXh0PXtGZWF0dXJlOmZ1bmN0aW9uKGUsdCl7ZmsoZS5nZW9tZXRyeSx0KX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5mZWF0dXJlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWZrKHJbbl0uZ2VvbWV0cnksdCl9fSxQeHQ9e1NwaGVyZTpmdW5jdGlvbihlLHQpe3Quc3BoZXJlKCl9LFBvaW50OmZ1bmN0aW9uKGUsdCl7ZT1lLmNvb3JkaW5hdGVzLHQucG9pbnQoZVswXSxlWzFdLGVbMl0pfSxNdWx0aVBvaW50OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOyllPXJbbl0sdC5wb2ludChlWzBdLGVbMV0sZVsyXSl9LExpbmVTdHJpbmc6ZnVuY3Rpb24oZSx0KXtwaihlLmNvb3JkaW5hdGVzLHQsMCl9LE11bHRpTGluZVN0cmluZzpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspcGoocltuXSx0LDApfSxQb2x5Z29uOmZ1bmN0aW9uKGUsdCl7SXh0KGUuY29vcmRpbmF0ZXMsdCl9LE11bHRpUG9seWdvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspSXh0KHJbbl0sdCl9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmdlb21ldHJpZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylmayhyW25dLHQpfX07ZnVuY3Rpb24gcGooZSx0LHIpe3ZhciBuPS0xLGk9ZS5sZW5ndGgtcixvO2Zvcih0LmxpbmVTdGFydCgpOysrbjxpOylvPWVbbl0sdC5wb2ludChvWzBdLG9bMV0sb1syXSk7dC5saW5lRW5kKCl9ZnVuY3Rpb24gSXh0KGUsdCl7dmFyIHI9LTEsbj1lLmxlbmd0aDtmb3IodC5wb2x5Z29uU3RhcnQoKTsrK3I8bjspcGooZVtyXSx0LDEpO3QucG9seWdvbkVuZCgpfWZ1bmN0aW9uIHZvKGUsdCl7ZSYmQXh0Lmhhc093blByb3BlcnR5KGUudHlwZSk/QXh0W2UudHlwZV0oZSx0KTpmayhlLHQpfXZhciBqRT1NcygpLHBrPU1zKCksTHh0LGt4dCxkaixtaixnaixwdT17cG9pbnQ6RnIsbGluZVN0YXJ0OkZyLGxpbmVFbmQ6RnIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7akUucmVzZXQoKSxwdS5saW5lU3RhcnQ9aTNlLHB1LmxpbmVFbmQ9bzNlfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dmFyIGU9K2pFO3BrLmFkZChlPDA/d2krZTplKSx0aGlzLmxpbmVTdGFydD10aGlzLmxpbmVFbmQ9dGhpcy5wb2ludD1Gcn0sc3BoZXJlOmZ1bmN0aW9uKCl7cGsuYWRkKHdpKX19O2Z1bmN0aW9uIGkzZSgpe3B1LnBvaW50PWEzZX1mdW5jdGlvbiBvM2UoKXtSeHQoTHh0LGt4dCl9ZnVuY3Rpb24gYTNlKGUsdCl7cHUucG9pbnQ9Unh0LEx4dD1lLGt4dD10LGUqPXllLHQqPXllLGRqPWUsbWo9WnQodD10LzIrUGIpLGdqPVh0KHQpfWZ1bmN0aW9uIFJ4dChlLHQpe2UqPXllLHQqPXllLHQ9dC8yK1BiO3ZhciByPWUtZGosbj1yPj0wPzE6LTEsaT1uKnIsbz1adCh0KSxhPVh0KHQpLHM9Z2oqYSxsPW1qKm8rcypadChpKSxjPXMqbipYdChpKTtqRS5hZGQoYm4oYyxsKSksZGo9ZSxtaj1vLGdqPWF9ZnVuY3Rpb24gTnh0KGUpe3JldHVybiBway5yZXNldCgpLHZvKGUscHUpLHBrKjJ9ZnVuY3Rpb24gSF8oZSl7cmV0dXJuW2JuKGVbMV0sZVswXSksd24oZVsyXSldfWZ1bmN0aW9uIG9jKGUpe3ZhciB0PWVbMF0scj1lWzFdLG49WnQocik7cmV0dXJuW24qWnQodCksbipYdCh0KSxYdChyKV19ZnVuY3Rpb24gWEUoZSx0KXtyZXR1cm4gZVswXSp0WzBdK2VbMV0qdFsxXStlWzJdKnRbMl19ZnVuY3Rpb24gUnAoZSx0KXtyZXR1cm5bZVsxXSp0WzJdLWVbMl0qdFsxXSxlWzJdKnRbMF0tZVswXSp0WzJdLGVbMF0qdFsxXS1lWzFdKnRbMF1dfWZ1bmN0aW9uIGRrKGUsdCl7ZVswXSs9dFswXSxlWzFdKz10WzFdLGVbMl0rPXRbMl19ZnVuY3Rpb24gJEUoZSx0KXtyZXR1cm5bZVswXSp0LGVbMV0qdCxlWzJdKnRdfWZ1bmN0aW9uIFZfKGUpe3ZhciB0PXhyKGVbMF0qZVswXStlWzFdKmVbMV0rZVsyXSplWzJdKTtlWzBdLz10LGVbMV0vPXQsZVsyXS89dH12YXIgcmksRXMsdWksaWwsVV8sRnh0LEJ4dCxMYixLRT1NcygpLGptLERwLE5wPXtwb2ludDpfaixsaW5lU3RhcnQ6RHh0LGxpbmVFbmQ6T3h0LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe05wLnBvaW50PVZ4dCxOcC5saW5lU3RhcnQ9czNlLE5wLmxpbmVFbmQ9bDNlLEtFLnJlc2V0KCkscHUucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtwdS5wb2x5Z29uRW5kKCksTnAucG9pbnQ9X2osTnAubGluZVN0YXJ0PUR4dCxOcC5saW5lRW5kPU94dCxqRTwwPyhyaT0tKHVpPTE4MCksRXM9LShpbD05MCkpOktFPmxlP2lsPTkwOktFPC1sZSYmKEVzPS05MCksRHBbMF09cmksRHBbMV09dWl9LHNwaGVyZTpmdW5jdGlvbigpe3JpPS0odWk9MTgwKSxFcz0tKGlsPTkwKX19O2Z1bmN0aW9uIF9qKGUsdCl7am0ucHVzaChEcD1bcmk9ZSx1aT1lXSksdDxFcyYmKEVzPXQpLHQ+aWwmJihpbD10KX1mdW5jdGlvbiBIeHQoZSx0KXt2YXIgcj1vYyhbZSp5ZSx0KnllXSk7aWYoTGIpe3ZhciBuPVJwKExiLHIpLGk9W25bMV0sLW5bMF0sMF0sbz1ScChpLG4pO1ZfKG8pLG89SF8obyk7dmFyIGE9ZS1VXyxzPWE+MD8xOi0xLGw9b1swXSp2cipzLGMsdT1SZShhKT4xODA7dV4ocypVXzxsJiZsPHMqZSk/KGM9b1sxXSp2cixjPmlsJiYoaWw9YykpOihsPShsKzM2MCklMzYwLTE4MCx1XihzKlVfPGwmJmw8cyplKT8oYz0tb1sxXSp2cixjPEVzJiYoRXM9YykpOih0PEVzJiYoRXM9dCksdD5pbCYmKGlsPXQpKSksdT9lPFVfP25sKHJpLGUpPm5sKHJpLHVpKSYmKHVpPWUpOm5sKGUsdWkpPm5sKHJpLHVpKSYmKHJpPWUpOnVpPj1yaT8oZTxyaSYmKHJpPWUpLGU+dWkmJih1aT1lKSk6ZT5VXz9ubChyaSxlKT5ubChyaSx1aSkmJih1aT1lKTpubChlLHVpKT5ubChyaSx1aSkmJihyaT1lKX1lbHNlIGptLnB1c2goRHA9W3JpPWUsdWk9ZV0pO3Q8RXMmJihFcz10KSx0PmlsJiYoaWw9dCksTGI9cixVXz1lfWZ1bmN0aW9uIER4dCgpe05wLnBvaW50PUh4dH1mdW5jdGlvbiBPeHQoKXtEcFswXT1yaSxEcFsxXT11aSxOcC5wb2ludD1faixMYj1udWxsfWZ1bmN0aW9uIFZ4dChlLHQpe2lmKExiKXt2YXIgcj1lLVVfO0tFLmFkZChSZShyKT4xODA/cisocj4wPzM2MDotMzYwKTpyKX1lbHNlIEZ4dD1lLEJ4dD10O3B1LnBvaW50KGUsdCksSHh0KGUsdCl9ZnVuY3Rpb24gczNlKCl7cHUubGluZVN0YXJ0KCl9ZnVuY3Rpb24gbDNlKCl7Vnh0KEZ4dCxCeHQpLHB1LmxpbmVFbmQoKSxSZShLRSk+bGUmJihyaT0tKHVpPTE4MCkpLERwWzBdPXJpLERwWzFdPXVpLExiPW51bGx9ZnVuY3Rpb24gbmwoZSx0KXtyZXR1cm4odC09ZSk8MD90KzM2MDp0fWZ1bmN0aW9uIGMzZShlLHQpe3JldHVybiBlWzBdLXRbMF19ZnVuY3Rpb24genh0KGUsdCl7cmV0dXJuIGVbMF08PWVbMV0/ZVswXTw9dCYmdDw9ZVsxXTp0PGVbMF18fGVbMV08dH1mdW5jdGlvbiBVeHQoZSl7dmFyIHQscixuLGksbyxhLHM7aWYoaWw9dWk9LShyaT1Fcz0xLzApLGptPVtdLHZvKGUsTnApLHI9am0ubGVuZ3RoKXtmb3Ioam0uc29ydChjM2UpLHQ9MSxuPWptWzBdLG89W25dO3Q8cjsrK3QpaT1qbVt0XSx6eHQobixpWzBdKXx8enh0KG4saVsxXSk/KG5sKG5bMF0saVsxXSk+bmwoblswXSxuWzFdKSYmKG5bMV09aVsxXSksbmwoaVswXSxuWzFdKT5ubChuWzBdLG5bMV0pJiYoblswXT1pWzBdKSk6by5wdXNoKG49aSk7Zm9yKGE9LTEvMCxyPW8ubGVuZ3RoLTEsdD0wLG49b1tyXTt0PD1yO249aSwrK3QpaT1vW3RdLChzPW5sKG5bMV0saVswXSkpPmEmJihhPXMscmk9aVswXSx1aT1uWzFdKX1yZXR1cm4gam09RHA9bnVsbCxyaT09PTEvMHx8RXM9PT0xLzA/W1tOYU4sTmFOXSxbTmFOLE5hTl1dOltbcmksRXNdLFt1aSxpbF1dfXZhciBaRSxtayxnayxfayx5ayx2ayx4ayxiayx5aix2aix4aixXeHQsWXh0LEJhLEhhLFZhLGR1PXtzcGhlcmU6RnIscG9pbnQ6YmosbGluZVN0YXJ0OnF4dCxsaW5lRW5kOkd4dCxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtkdS5saW5lU3RhcnQ9ZjNlLGR1LmxpbmVFbmQ9cDNlfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7ZHUubGluZVN0YXJ0PXF4dCxkdS5saW5lRW5kPUd4dH19O2Z1bmN0aW9uIGJqKGUsdCl7ZSo9eWUsdCo9eWU7dmFyIHI9WnQodCk7SkUocipadChlKSxyKlh0KGUpLFh0KHQpKX1mdW5jdGlvbiBKRShlLHQscil7KytaRSxnays9KGUtZ2spL1pFLF9rKz0odC1faykvWkUseWsrPShyLXlrKS9aRX1mdW5jdGlvbiBxeHQoKXtkdS5wb2ludD11M2V9ZnVuY3Rpb24gdTNlKGUsdCl7ZSo9eWUsdCo9eWU7dmFyIHI9WnQodCk7QmE9cipadChlKSxIYT1yKlh0KGUpLFZhPVh0KHQpLGR1LnBvaW50PWgzZSxKRShCYSxIYSxWYSl9ZnVuY3Rpb24gaDNlKGUsdCl7ZSo9eWUsdCo9eWU7dmFyIHI9WnQodCksbj1yKlp0KGUpLGk9cipYdChlKSxvPVh0KHQpLGE9Ym4oeHIoKGE9SGEqby1WYSppKSphKyhhPVZhKm4tQmEqbykqYSsoYT1CYSppLUhhKm4pKmEpLEJhKm4rSGEqaStWYSpvKTttays9YSx2ays9YSooQmErKEJhPW4pKSx4ays9YSooSGErKEhhPWkpKSxiays9YSooVmErKFZhPW8pKSxKRShCYSxIYSxWYSl9ZnVuY3Rpb24gR3h0KCl7ZHUucG9pbnQ9Ymp9ZnVuY3Rpb24gZjNlKCl7ZHUucG9pbnQ9ZDNlfWZ1bmN0aW9uIHAzZSgpe2p4dChXeHQsWXh0KSxkdS5wb2ludD1ian1mdW5jdGlvbiBkM2UoZSx0KXtXeHQ9ZSxZeHQ9dCxlKj15ZSx0Kj15ZSxkdS5wb2ludD1qeHQ7dmFyIHI9WnQodCk7QmE9cipadChlKSxIYT1yKlh0KGUpLFZhPVh0KHQpLEpFKEJhLEhhLFZhKX1mdW5jdGlvbiBqeHQoZSx0KXtlKj15ZSx0Kj15ZTt2YXIgcj1adCh0KSxuPXIqWnQoZSksaT1yKlh0KGUpLG89WHQodCksYT1IYSpvLVZhKmkscz1WYSpuLUJhKm8sbD1CYSppLUhhKm4sYz14cihhKmErcypzK2wqbCksdT13bihjKSxoPWMmJi11L2M7eWorPWgqYSx2ais9aCpzLHhqKz1oKmwsbWsrPXUsdmsrPXUqKEJhKyhCYT1uKSkseGsrPXUqKEhhKyhIYT1pKSksYmsrPXUqKFZhKyhWYT1vKSksSkUoQmEsSGEsVmEpfWZ1bmN0aW9uIFh4dChlKXtaRT1taz1naz1faz15az12az14az1iaz15aj12aj14aj0wLHZvKGUsZHUpO3ZhciB0PXlqLHI9dmosbj14aixpPXQqdCtyKnIrbipuO3JldHVybiBpPEZfJiYodD12ayxyPXhrLG49YmssbWs8bGUmJih0PWdrLHI9X2ssbj15ayksaT10KnQrcipyK24qbixpPEZfKT9bTmFOLE5hTl06W2JuKHIsdCkqdnIsd24obi94cihpKSkqdnJdfWZ1bmN0aW9uIHFfKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBRRShlLHQpe2Z1bmN0aW9uIHIobixpKXtyZXR1cm4gbj1lKG4saSksdChuWzBdLG5bMV0pfXJldHVybiBlLmludmVydCYmdC5pbnZlcnQmJihyLmludmVydD1mdW5jdGlvbihuLGkpe3JldHVybiBuPXQuaW52ZXJ0KG4saSksbiYmZS5pbnZlcnQoblswXSxuWzFdKX0pLHJ9ZnVuY3Rpb24gd2ooZSx0KXtyZXR1cm5bUmUoZSk+QmU/ZStNYXRoLnJvdW5kKC1lL3dpKSp3aTplLHRdfXdqLmludmVydD13ajtmdW5jdGlvbiB0NShlLHQscil7cmV0dXJuKGUlPXdpKT90fHxyP1FFKEt4dChlKSxaeHQodCxyKSk6S3h0KGUpOnR8fHI/Wnh0KHQscik6d2p9ZnVuY3Rpb24gJHh0KGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiB0Kz1lLFt0PkJlP3Qtd2k6dDwtQmU/dCt3aTp0LHJdfX1mdW5jdGlvbiBLeHQoZSl7dmFyIHQ9JHh0KGUpO3JldHVybiB0LmludmVydD0keHQoLWUpLHR9ZnVuY3Rpb24gWnh0KGUsdCl7dmFyIHI9WnQoZSksbj1YdChlKSxpPVp0KHQpLG89WHQodCk7ZnVuY3Rpb24gYShzLGwpe3ZhciBjPVp0KGwpLHU9WnQocykqYyxoPVh0KHMpKmMsZj1YdChsKSxwPWYqcit1Km47cmV0dXJuW2JuKGgqaS1wKm8sdSpyLWYqbiksd24ocCppK2gqbyldfXJldHVybiBhLmludmVydD1mdW5jdGlvbihzLGwpe3ZhciBjPVp0KGwpLHU9WnQocykqYyxoPVh0KHMpKmMsZj1YdChsKSxwPWYqaS1oKm87cmV0dXJuW2JuKGgqaStmKm8sdSpyK3Aqbiksd24ocCpyLXUqbildfSxhfWZ1bmN0aW9uIHdrKGUpe2U9dDUoZVswXSp5ZSxlWzFdKnllLGUubGVuZ3RoPjI/ZVsyXSp5ZTowKTtmdW5jdGlvbiB0KHIpe3JldHVybiByPWUoclswXSp5ZSxyWzFdKnllKSxyWzBdKj12cixyWzFdKj12cixyfXJldHVybiB0LmludmVydD1mdW5jdGlvbihyKXtyZXR1cm4gcj1lLmludmVydChyWzBdKnllLHJbMV0qeWUpLHJbMF0qPXZyLHJbMV0qPXZyLHJ9LHR9ZnVuY3Rpb24gU2ooZSx0LHIsbixpLG8pe2lmKCEhcil7dmFyIGE9WnQodCkscz1YdCh0KSxsPW4qcjtpPT1udWxsPyhpPXQrbip3aSxvPXQtbC8yKTooaT1KeHQoYSxpKSxvPUp4dChhLG8pLChuPjA/aTxvOmk+bykmJihpKz1uKndpKSk7Zm9yKHZhciBjLHU9aTtuPjA/dT5vOnU8bzt1LT1sKWM9SF8oW2EsLXMqWnQodSksLXMqWHQodSldKSxlLnBvaW50KGNbMF0sY1sxXSl9fWZ1bmN0aW9uIEp4dChlLHQpe3Q9b2ModCksdFswXS09ZSxWXyh0KTt2YXIgcj1oaygtdFsxXSk7cmV0dXJuKCgtdFsyXTwwPy1yOnIpK3dpLWxlKSV3aX1mdW5jdGlvbiBReHQoKXt2YXIgZT1xXyhbMCwwXSksdD1xXyg5MCkscj1xXyg2KSxuLGksbz17cG9pbnQ6YX07ZnVuY3Rpb24gYShsLGMpe24ucHVzaChsPWkobCxjKSksbFswXSo9dnIsbFsxXSo9dnJ9ZnVuY3Rpb24gcygpe3ZhciBsPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpLGM9dC5hcHBseSh0aGlzLGFyZ3VtZW50cykqeWUsdT1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKSp5ZTtyZXR1cm4gbj1bXSxpPXQ1KC1sWzBdKnllLC1sWzFdKnllLDApLmludmVydCxTaihvLGMsdSwxKSxsPXt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbbl19LG49aT1udWxsLGx9cmV0dXJuIHMuY2VudGVyPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBsPT0iZnVuY3Rpb24iP2w6cV8oWytsWzBdLCtsWzFdXSkscyk6ZX0scy5yYWRpdXM9ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIGw9PSJmdW5jdGlvbiI/bDpxXygrbCkscyk6dH0scy5wcmVjaXNpb249ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIGw9PSJmdW5jdGlvbiI/bDpxXygrbCkscyk6cn0sc31mdW5jdGlvbiBTaygpe3ZhciBlPVtdLHQ7cmV0dXJue3BvaW50OmZ1bmN0aW9uKHIsbixpKXt0LnB1c2goW3IsbixpXSl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2UucHVzaCh0PVtdKX0sbGluZUVuZDpGcixyZWpvaW46ZnVuY3Rpb24oKXtlLmxlbmd0aD4xJiZlLnB1c2goZS5wb3AoKS5jb25jYXQoZS5zaGlmdCgpKSl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciByPWU7cmV0dXJuIGU9W10sdD1udWxsLHJ9fX1mdW5jdGlvbiBrYihlLHQpe3JldHVybiBSZShlWzBdLXRbMF0pPGxlJiZSZShlWzFdLXRbMV0pPGxlfWZ1bmN0aW9uIE1rKGUsdCxyLG4pe3RoaXMueD1lLHRoaXMuej10LHRoaXMubz1yLHRoaXMuZT1uLHRoaXMudj0hMSx0aGlzLm49dGhpcy5wPW51bGx9ZnVuY3Rpb24gRWsoZSx0LHIsbixpKXt2YXIgbz1bXSxhPVtdLHMsbDtpZihlLmZvckVhY2goZnVuY3Rpb24oZCl7aWYoISgoZz1kLmxlbmd0aC0xKTw9MCkpe3ZhciBnLF89ZFswXSx5PWRbZ10seDtpZihrYihfLHkpKXtpZighX1syXSYmIXlbMl0pe2ZvcihpLmxpbmVTdGFydCgpLHM9MDtzPGc7KytzKWkucG9pbnQoKF89ZFtzXSlbMF0sX1sxXSk7aS5saW5lRW5kKCk7cmV0dXJufXlbMF0rPTIqbGV9by5wdXNoKHg9bmV3IE1rKF8sZCxudWxsLCEwKSksYS5wdXNoKHgubz1uZXcgTWsoXyxudWxsLHgsITEpKSxvLnB1c2goeD1uZXcgTWsoeSxkLG51bGwsITEpKSxhLnB1c2goeC5vPW5ldyBNayh5LG51bGwseCwhMCkpfX0pLCEhby5sZW5ndGgpe2ZvcihhLnNvcnQodCksdGJ0KG8pLHRidChhKSxzPTAsbD1hLmxlbmd0aDtzPGw7KytzKWFbc10uZT1yPSFyO2Zvcih2YXIgYz1vWzBdLHUsaDs7KXtmb3IodmFyIGY9YyxwPSEwO2YudjspaWYoKGY9Zi5uKT09PWMpcmV0dXJuO3U9Zi56LGkubGluZVN0YXJ0KCk7ZG97aWYoZi52PWYuby52PSEwLGYuZSl7aWYocClmb3Iocz0wLGw9dS5sZW5ndGg7czxsOysrcylpLnBvaW50KChoPXVbc10pWzBdLGhbMV0pO2Vsc2UgbihmLngsZi5uLngsMSxpKTtmPWYubn1lbHNle2lmKHApZm9yKHU9Zi5wLnoscz11Lmxlbmd0aC0xO3M+PTA7LS1zKWkucG9pbnQoKGg9dVtzXSlbMF0saFsxXSk7ZWxzZSBuKGYueCxmLnAueCwtMSxpKTtmPWYucH1mPWYubyx1PWYueixwPSFwfXdoaWxlKCFmLnYpO2kubGluZUVuZCgpfX19ZnVuY3Rpb24gdGJ0KGUpe2lmKCEhKHQ9ZS5sZW5ndGgpKXtmb3IodmFyIHQscj0wLG49ZVswXSxpOysrcjx0OyluLm49aT1lW3JdLGkucD1uLG49aTtuLm49aT1lWzBdLGkucD1ufX12YXIgTWo9TXMoKTtmdW5jdGlvbiBFaihlKXtyZXR1cm4gUmUoZVswXSk8PUJlP2VbMF06dWEoZVswXSkqKChSZShlWzBdKStCZSkld2ktQmUpfWZ1bmN0aW9uIFRrKGUsdCl7dmFyIHI9RWoodCksbj10WzFdLGk9WHQobiksbz1bWHQociksLVp0KHIpLDBdLGE9MCxzPTA7TWoucmVzZXQoKSxpPT09MT9uPW1uK2xlOmk9PT0tMSYmKG49LW1uLWxlKTtmb3IodmFyIGw9MCxjPWUubGVuZ3RoO2w8YzsrK2wpaWYoISEoaD0odT1lW2xdKS5sZW5ndGgpKWZvcih2YXIgdSxoLGY9dVtoLTFdLHA9RWooZiksZD1mWzFdLzIrUGIsZz1YdChkKSxfPVp0KGQpLHk9MDt5PGg7Kyt5LHA9YixnPUMsXz1QLGY9eCl7dmFyIHg9dVt5XSxiPUVqKHgpLFM9eFsxXS8yK1BiLEM9WHQoUyksUD1adChTKSxrPWItcCxPPWs+PTA/MTotMSxEPU8qayxCPUQ+QmUsST1nKkM7aWYoTWouYWRkKGJuKEkqTypYdChEKSxfKlArSSpadChEKSkpLGErPUI/aytPKndpOmssQl5wPj1yXmI+PXIpe3ZhciBMPVJwKG9jKGYpLG9jKHgpKTtWXyhMKTt2YXIgUj1ScChvLEwpO1ZfKFIpO3ZhciBGPShCXms+PTA/LTE6MSkqd24oUlsyXSk7KG4+Rnx8bj09PUYmJihMWzBdfHxMWzFdKSkmJihzKz1CXms+PTA/MTotMSl9fXJldHVybihhPC1sZXx8YTxsZSYmTWo8LWxlKV5zJjF9ZnVuY3Rpb24gQ2soZSx0LHIsbil7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciBvPXQoaSksYT1TaygpLHM9dChhKSxsPSExLGMsdSxoLGY9e3BvaW50OnAsbGluZVN0YXJ0OmcsbGluZUVuZDpfLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2YucG9pbnQ9eSxmLmxpbmVTdGFydD14LGYubGluZUVuZD1iLHU9W10sYz1bXX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2YucG9pbnQ9cCxmLmxpbmVTdGFydD1nLGYubGluZUVuZD1fLHU9TG0odSk7dmFyIFM9VGsoYyxuKTt1Lmxlbmd0aD8obHx8KGkucG9seWdvblN0YXJ0KCksbD0hMCksRWsodSxnM2UsUyxyLGkpKTpTJiYobHx8KGkucG9seWdvblN0YXJ0KCksbD0hMCksaS5saW5lU3RhcnQoKSxyKG51bGwsbnVsbCwxLGkpLGkubGluZUVuZCgpKSxsJiYoaS5wb2x5Z29uRW5kKCksbD0hMSksdT1jPW51bGx9LHNwaGVyZTpmdW5jdGlvbigpe2kucG9seWdvblN0YXJ0KCksaS5saW5lU3RhcnQoKSxyKG51bGwsbnVsbCwxLGkpLGkubGluZUVuZCgpLGkucG9seWdvbkVuZCgpfX07ZnVuY3Rpb24gcChTLEMpe2UoUyxDKSYmaS5wb2ludChTLEMpfWZ1bmN0aW9uIGQoUyxDKXtvLnBvaW50KFMsQyl9ZnVuY3Rpb24gZygpe2YucG9pbnQ9ZCxvLmxpbmVTdGFydCgpfWZ1bmN0aW9uIF8oKXtmLnBvaW50PXAsby5saW5lRW5kKCl9ZnVuY3Rpb24geShTLEMpe2gucHVzaChbUyxDXSkscy5wb2ludChTLEMpfWZ1bmN0aW9uIHgoKXtzLmxpbmVTdGFydCgpLGg9W119ZnVuY3Rpb24gYigpe3koaFswXVswXSxoWzBdWzFdKSxzLmxpbmVFbmQoKTt2YXIgUz1zLmNsZWFuKCksQz1hLnJlc3VsdCgpLFAsaz1DLmxlbmd0aCxPLEQsQjtpZihoLnBvcCgpLGMucHVzaChoKSxoPW51bGwsISFrKXtpZihTJjEpe2lmKEQ9Q1swXSwoTz1ELmxlbmd0aC0xKT4wKXtmb3IobHx8KGkucG9seWdvblN0YXJ0KCksbD0hMCksaS5saW5lU3RhcnQoKSxQPTA7UDxPOysrUClpLnBvaW50KChCPURbUF0pWzBdLEJbMV0pO2kubGluZUVuZCgpfXJldHVybn1rPjEmJlMmMiYmQy5wdXNoKEMucG9wKCkuY29uY2F0KEMuc2hpZnQoKSkpLHUucHVzaChDLmZpbHRlcihtM2UpKX19cmV0dXJuIGZ9fWZ1bmN0aW9uIG0zZShlKXtyZXR1cm4gZS5sZW5ndGg+MX1mdW5jdGlvbiBnM2UoZSx0KXtyZXR1cm4oKGU9ZS54KVswXTwwP2VbMV0tbW4tbGU6bW4tZVsxXSktKCh0PXQueClbMF08MD90WzFdLW1uLWxlOm1uLXRbMV0pfXZhciBlNT1DayhmdW5jdGlvbigpe3JldHVybiEwfSxfM2UsdjNlLFstQmUsLW1uXSk7ZnVuY3Rpb24gXzNlKGUpe3ZhciB0PU5hTixyPU5hTixuPU5hTixpO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtlLmxpbmVTdGFydCgpLGk9MX0scG9pbnQ6ZnVuY3Rpb24obyxhKXt2YXIgcz1vPjA/QmU6LUJlLGw9UmUoby10KTtSZShsLUJlKTxsZT8oZS5wb2ludCh0LHI9KHIrYSkvMj4wP21uOi1tbiksZS5wb2ludChuLHIpLGUubGluZUVuZCgpLGUubGluZVN0YXJ0KCksZS5wb2ludChzLHIpLGUucG9pbnQobyxyKSxpPTApOm4hPT1zJiZsPj1CZSYmKFJlKHQtbik8bGUmJih0LT1uKmxlKSxSZShvLXMpPGxlJiYoby09cypsZSkscj15M2UodCxyLG8sYSksZS5wb2ludChuLHIpLGUubGluZUVuZCgpLGUubGluZVN0YXJ0KCksZS5wb2ludChzLHIpLGk9MCksZS5wb2ludCh0PW8scj1hKSxuPXN9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtlLmxpbmVFbmQoKSx0PXI9TmFOfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiAyLWl9fX1mdW5jdGlvbiB5M2UoZSx0LHIsbil7dmFyIGksbyxhPVh0KGUtcik7cmV0dXJuIFJlKGEpPmxlP2ljKChYdCh0KSoobz1adChuKSkqWHQociktWHQobikqKGk9WnQodCkpKlh0KGUpKS8oaSpvKmEpKToodCtuKS8yfWZ1bmN0aW9uIHYzZShlLHQscixuKXt2YXIgaTtpZihlPT1udWxsKWk9ciptbixuLnBvaW50KC1CZSxpKSxuLnBvaW50KDAsaSksbi5wb2ludChCZSxpKSxuLnBvaW50KEJlLDApLG4ucG9pbnQoQmUsLWkpLG4ucG9pbnQoMCwtaSksbi5wb2ludCgtQmUsLWkpLG4ucG9pbnQoLUJlLDApLG4ucG9pbnQoLUJlLGkpO2Vsc2UgaWYoUmUoZVswXS10WzBdKT5sZSl7dmFyIG89ZVswXTx0WzBdP0JlOi1CZTtpPXIqby8yLG4ucG9pbnQoLW8saSksbi5wb2ludCgwLGkpLG4ucG9pbnQobyxpKX1lbHNlIG4ucG9pbnQodFswXSx0WzFdKX1mdW5jdGlvbiBBayhlKXt2YXIgdD1adChlKSxyPTYqeWUsbj10PjAsaT1SZSh0KT5sZTtmdW5jdGlvbiBvKHUsaCxmLHApe1NqKHAsZSxyLGYsdSxoKX1mdW5jdGlvbiBhKHUsaCl7cmV0dXJuIFp0KHUpKlp0KGgpPnR9ZnVuY3Rpb24gcyh1KXt2YXIgaCxmLHAsZCxnO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtkPXA9ITEsZz0xfSxwb2ludDpmdW5jdGlvbihfLHkpe3ZhciB4PVtfLHldLGIsUz1hKF8seSksQz1uP1M/MDpjKF8seSk6Uz9jKF8rKF88MD9CZTotQmUpLHkpOjA7aWYoIWgmJihkPXA9UykmJnUubGluZVN0YXJ0KCksUyE9PXAmJihiPWwoaCx4KSwoIWJ8fGtiKGgsYil8fGtiKHgsYikpJiYoeFsyXT0xKSksUyE9PXApZz0wLFM/KHUubGluZVN0YXJ0KCksYj1sKHgsaCksdS5wb2ludChiWzBdLGJbMV0pKTooYj1sKGgseCksdS5wb2ludChiWzBdLGJbMV0sMiksdS5saW5lRW5kKCkpLGg9YjtlbHNlIGlmKGkmJmgmJm5eUyl7dmFyIFA7IShDJmYpJiYoUD1sKHgsaCwhMCkpJiYoZz0wLG4/KHUubGluZVN0YXJ0KCksdS5wb2ludChQWzBdWzBdLFBbMF1bMV0pLHUucG9pbnQoUFsxXVswXSxQWzFdWzFdKSx1LmxpbmVFbmQoKSk6KHUucG9pbnQoUFsxXVswXSxQWzFdWzFdKSx1LmxpbmVFbmQoKSx1LmxpbmVTdGFydCgpLHUucG9pbnQoUFswXVswXSxQWzBdWzFdLDMpKSl9UyYmKCFofHwha2IoaCx4KSkmJnUucG9pbnQoeFswXSx4WzFdKSxoPXgscD1TLGY9Q30sbGluZUVuZDpmdW5jdGlvbigpe3AmJnUubGluZUVuZCgpLGg9bnVsbH0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gZ3woZCYmcCk8PDF9fX1mdW5jdGlvbiBsKHUsaCxmKXt2YXIgcD1vYyh1KSxkPW9jKGgpLGc9WzEsMCwwXSxfPVJwKHAsZCkseT1YRShfLF8pLHg9X1swXSxiPXkteCp4O2lmKCFiKXJldHVybiFmJiZ1O3ZhciBTPXQqeS9iLEM9LXQqeC9iLFA9UnAoZyxfKSxrPSRFKGcsUyksTz0kRShfLEMpO2RrKGssTyk7dmFyIEQ9UCxCPVhFKGssRCksST1YRShELEQpLEw9QipCLUkqKFhFKGssayktMSk7aWYoIShMPDApKXt2YXIgUj14cihMKSxGPSRFKEQsKC1CLVIpL0kpO2lmKGRrKEYsayksRj1IXyhGKSwhZilyZXR1cm4gRjt2YXIgej11WzBdLFU9aFswXSxXPXVbMV0sWj1oWzFdLHJ0O1U8eiYmKHJ0PXosej1VLFU9cnQpO3ZhciBvdD1VLXosc3Q9UmUob3QtQmUpPGxlLFN0PXN0fHxvdDxsZTtpZighc3QmJlo8VyYmKHJ0PVcsVz1aLFo9cnQpLFN0P3N0P1crWj4wXkZbMV08KFJlKEZbMF0teik8bGU/VzpaKTpXPD1GWzFdJiZGWzFdPD1aOm90PkJlXih6PD1GWzBdJiZGWzBdPD1VKSl7dmFyIGJ0PSRFKEQsKC1CK1IpL0kpO3JldHVybiBkayhidCxrKSxbRixIXyhidCldfX19ZnVuY3Rpb24gYyh1LGgpe3ZhciBmPW4/ZTpCZS1lLHA9MDtyZXR1cm4gdTwtZj9wfD0xOnU+ZiYmKHB8PTIpLGg8LWY/cHw9NDpoPmYmJihwfD04KSxwfXJldHVybiBDayhhLHMsbyxuP1swLC1lXTpbLUJlLGUtQmVdKX1mdW5jdGlvbiBlYnQoZSx0LHIsbixpLG8pe3ZhciBhPWVbMF0scz1lWzFdLGw9dFswXSxjPXRbMV0sdT0wLGg9MSxmPWwtYSxwPWMtcyxkO2lmKGQ9ci1hLCEoIWYmJmQ+MCkpe2lmKGQvPWYsZjwwKXtpZihkPHUpcmV0dXJuO2Q8aCYmKGg9ZCl9ZWxzZSBpZihmPjApe2lmKGQ+aClyZXR1cm47ZD51JiYodT1kKX1pZihkPWktYSwhKCFmJiZkPDApKXtpZihkLz1mLGY8MCl7aWYoZD5oKXJldHVybjtkPnUmJih1PWQpfWVsc2UgaWYoZj4wKXtpZihkPHUpcmV0dXJuO2Q8aCYmKGg9ZCl9aWYoZD1uLXMsISghcCYmZD4wKSl7aWYoZC89cCxwPDApe2lmKGQ8dSlyZXR1cm47ZDxoJiYoaD1kKX1lbHNlIGlmKHA+MCl7aWYoZD5oKXJldHVybjtkPnUmJih1PWQpfWlmKGQ9by1zLCEoIXAmJmQ8MCkpe2lmKGQvPXAscDwwKXtpZihkPmgpcmV0dXJuO2Q+dSYmKHU9ZCl9ZWxzZSBpZihwPjApe2lmKGQ8dSlyZXR1cm47ZDxoJiYoaD1kKX1yZXR1cm4gdT4wJiYoZVswXT1hK3UqZixlWzFdPXMrdSpwKSxoPDEmJih0WzBdPWEraCpmLHRbMV09cytoKnApLCEwfX19fX12YXIgcjU9MWU5LFBrPS1yNTtmdW5jdGlvbiBPcChlLHQscixuKXtmdW5jdGlvbiBpKGMsdSl7cmV0dXJuIGU8PWMmJmM8PXImJnQ8PXUmJnU8PW59ZnVuY3Rpb24gbyhjLHUsaCxmKXt2YXIgcD0wLGQ9MDtpZihjPT1udWxsfHwocD1hKGMsaCkpIT09KGQ9YSh1LGgpKXx8bChjLHUpPDBeaD4wKWRvIGYucG9pbnQocD09PTB8fHA9PT0zP2U6cixwPjE/bjp0KTt3aGlsZSgocD0ocCtoKzQpJTQpIT09ZCk7ZWxzZSBmLnBvaW50KHVbMF0sdVsxXSl9ZnVuY3Rpb24gYShjLHUpe3JldHVybiBSZShjWzBdLWUpPGxlP3U+MD8wOjM6UmUoY1swXS1yKTxsZT91PjA/MjoxOlJlKGNbMV0tdCk8bGU/dT4wPzE6MDp1PjA/MzoyfWZ1bmN0aW9uIHMoYyx1KXtyZXR1cm4gbChjLngsdS54KX1mdW5jdGlvbiBsKGMsdSl7dmFyIGg9YShjLDEpLGY9YSh1LDEpO3JldHVybiBoIT09Zj9oLWY6aD09PTA/dVsxXS1jWzFdOmg9PT0xP2NbMF0tdVswXTpoPT09Mj9jWzFdLXVbMV06dVswXS1jWzBdfXJldHVybiBmdW5jdGlvbihjKXt2YXIgdT1jLGg9U2soKSxmLHAsZCxnLF8seSx4LGIsUyxDLFAsaz17cG9pbnQ6TyxsaW5lU3RhcnQ6TCxsaW5lRW5kOlIscG9seWdvblN0YXJ0OkIscG9seWdvbkVuZDpJfTtmdW5jdGlvbiBPKHosVSl7aSh6LFUpJiZ1LnBvaW50KHosVSl9ZnVuY3Rpb24gRCgpe2Zvcih2YXIgej0wLFU9MCxXPXAubGVuZ3RoO1U8VzsrK1UpZm9yKHZhciBaPXBbVV0scnQ9MSxvdD1aLmxlbmd0aCxzdD1aWzBdLFN0LGJ0LE10PXN0WzBdLGx0PXN0WzFdO3J0PG90OysrcnQpU3Q9TXQsYnQ9bHQsc3Q9WltydF0sTXQ9c3RbMF0sbHQ9c3RbMV0sYnQ8PW4/bHQ+biYmKE10LVN0KSoobi1idCk+KGx0LWJ0KSooZS1TdCkmJisrejpsdDw9biYmKE10LVN0KSoobi1idCk8KGx0LWJ0KSooZS1TdCkmJi0tejtyZXR1cm4gen1mdW5jdGlvbiBCKCl7dT1oLGY9W10scD1bXSxQPSEwfWZ1bmN0aW9uIEkoKXt2YXIgej1EKCksVT1QJiZ6LFc9KGY9TG0oZikpLmxlbmd0aDsoVXx8VykmJihjLnBvbHlnb25TdGFydCgpLFUmJihjLmxpbmVTdGFydCgpLG8obnVsbCxudWxsLDEsYyksYy5saW5lRW5kKCkpLFcmJkVrKGYscyx6LG8sYyksYy5wb2x5Z29uRW5kKCkpLHU9YyxmPXA9ZD1udWxsfWZ1bmN0aW9uIEwoKXtrLnBvaW50PUYscCYmcC5wdXNoKGQ9W10pLEM9ITAsUz0hMSx4PWI9TmFOfWZ1bmN0aW9uIFIoKXtmJiYoRihnLF8pLHkmJlMmJmgucmVqb2luKCksZi5wdXNoKGgucmVzdWx0KCkpKSxrLnBvaW50PU8sUyYmdS5saW5lRW5kKCl9ZnVuY3Rpb24gRih6LFUpe3ZhciBXPWkoeixVKTtpZihwJiZkLnB1c2goW3osVV0pLEMpZz16LF89VSx5PVcsQz0hMSxXJiYodS5saW5lU3RhcnQoKSx1LnBvaW50KHosVSkpO2Vsc2UgaWYoVyYmUyl1LnBvaW50KHosVSk7ZWxzZXt2YXIgWj1beD1NYXRoLm1heChQayxNYXRoLm1pbihyNSx4KSksYj1NYXRoLm1heChQayxNYXRoLm1pbihyNSxiKSldLHJ0PVt6PU1hdGgubWF4KFBrLE1hdGgubWluKHI1LHopKSxVPU1hdGgubWF4KFBrLE1hdGgubWluKHI1LFUpKV07ZWJ0KFoscnQsZSx0LHIsbik/KFN8fCh1LmxpbmVTdGFydCgpLHUucG9pbnQoWlswXSxaWzFdKSksdS5wb2ludChydFswXSxydFsxXSksV3x8dS5saW5lRW5kKCksUD0hMSk6VyYmKHUubGluZVN0YXJ0KCksdS5wb2ludCh6LFUpLFA9ITEpfXg9eixiPVUsUz1XfXJldHVybiBrfX1mdW5jdGlvbiByYnQoKXt2YXIgZT0wLHQ9MCxyPTk2MCxuPTUwMCxpLG8sYTtyZXR1cm4gYT17c3RyZWFtOmZ1bmN0aW9uKHMpe3JldHVybiBpJiZvPT09cz9pOmk9T3AoZSx0LHIsbikobz1zKX0sZXh0ZW50OmZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPStzWzBdWzBdLHQ9K3NbMF1bMV0scj0rc1sxXVswXSxuPStzWzFdWzFdLGk9bz1udWxsLGEpOltbZSx0XSxbcixuXV19fX12YXIgVGo9TXMoKSxDaixJayxMayxSYj17c3BoZXJlOkZyLHBvaW50OkZyLGxpbmVTdGFydDp4M2UsbGluZUVuZDpGcixwb2x5Z29uU3RhcnQ6RnIscG9seWdvbkVuZDpGcn07ZnVuY3Rpb24geDNlKCl7UmIucG9pbnQ9dzNlLFJiLmxpbmVFbmQ9YjNlfWZ1bmN0aW9uIGIzZSgpe1JiLnBvaW50PVJiLmxpbmVFbmQ9RnJ9ZnVuY3Rpb24gdzNlKGUsdCl7ZSo9eWUsdCo9eWUsQ2o9ZSxJaz1YdCh0KSxMaz1adCh0KSxSYi5wb2ludD1TM2V9ZnVuY3Rpb24gUzNlKGUsdCl7ZSo9eWUsdCo9eWU7dmFyIHI9WHQodCksbj1adCh0KSxpPVJlKGUtQ2opLG89WnQoaSksYT1YdChpKSxzPW4qYSxsPUxrKnItSWsqbipvLGM9SWsqcitMaypuKm87VGouYWRkKGJuKHhyKHMqcytsKmwpLGMpKSxDaj1lLElrPXIsTGs9bn1mdW5jdGlvbiBrayhlKXtyZXR1cm4gVGoucmVzZXQoKSx2byhlLFJiKSwrVGp9dmFyIEFqPVtudWxsLG51bGxdLE0zZT17dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6QWp9O2Z1bmN0aW9uIE5iKGUsdCl7cmV0dXJuIEFqWzBdPWUsQWpbMV09dCxrayhNM2UpfXZhciBuYnQ9e0ZlYXR1cmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gUmsoZS5nZW9tZXRyeSx0KX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5mZWF0dXJlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKFJrKHJbbl0uZ2VvbWV0cnksdCkpcmV0dXJuITA7cmV0dXJuITF9fSxpYnQ9e1NwaGVyZTpmdW5jdGlvbigpe3JldHVybiEwfSxQb2ludDpmdW5jdGlvbihlLHQpe3JldHVybiBvYnQoZS5jb29yZGluYXRlcyx0KX0sTXVsdGlQb2ludDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaWYob2J0KHJbbl0sdCkpcmV0dXJuITA7cmV0dXJuITF9LExpbmVTdHJpbmc6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYWJ0KGUuY29vcmRpbmF0ZXMsdCl9LE11bHRpTGluZVN0cmluZzpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaWYoYWJ0KHJbbl0sdCkpcmV0dXJuITA7cmV0dXJuITF9LFBvbHlnb246ZnVuY3Rpb24oZSx0KXtyZXR1cm4gc2J0KGUuY29vcmRpbmF0ZXMsdCl9LE11bHRpUG9seWdvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaWYoc2J0KHJbbl0sdCkpcmV0dXJuITA7cmV0dXJuITF9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmdlb21ldHJpZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylpZihSayhyW25dLHQpKXJldHVybiEwO3JldHVybiExfX07ZnVuY3Rpb24gUmsoZSx0KXtyZXR1cm4gZSYmaWJ0Lmhhc093blByb3BlcnR5KGUudHlwZSk/aWJ0W2UudHlwZV0oZSx0KTohMX1mdW5jdGlvbiBvYnQoZSx0KXtyZXR1cm4gTmIoZSx0KT09PTB9ZnVuY3Rpb24gYWJ0KGUsdCl7Zm9yKHZhciByLG4saSxvPTAsYT1lLmxlbmd0aDtvPGE7bysrKXtpZihuPU5iKGVbb10sdCksbj09PTB8fG8+MCYmKGk9TmIoZVtvXSxlW28tMV0pLGk+MCYmcjw9aSYmbjw9aSYmKHIrbi1pKSooMS1NYXRoLnBvdygoci1uKS9pLDIpKTxGXyppKSlyZXR1cm4hMDtyPW59cmV0dXJuITF9ZnVuY3Rpb24gc2J0KGUsdCl7cmV0dXJuISFUayhlLm1hcChFM2UpLGxidCh0KSl9ZnVuY3Rpb24gRTNlKGUpe3JldHVybiBlPWUubWFwKGxidCksZS5wb3AoKSxlfWZ1bmN0aW9uIGxidChlKXtyZXR1cm5bZVswXSp5ZSxlWzFdKnllXX1mdW5jdGlvbiBjYnQoZSx0KXtyZXR1cm4oZSYmbmJ0Lmhhc093blByb3BlcnR5KGUudHlwZSk/bmJ0W2UudHlwZV06UmspKGUsdCl9ZnVuY3Rpb24gdWJ0KGUsdCxyKXt2YXIgbj1JcihlLHQtbGUscikuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24obyl7cmV0dXJuW2ksb119KX19ZnVuY3Rpb24gaGJ0KGUsdCxyKXt2YXIgbj1JcihlLHQtbGUscikuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24obyl7cmV0dXJuW28saV19KX19ZnVuY3Rpb24gTmsoKXt2YXIgZSx0LHIsbixpLG8sYSxzLGw9MTAsYz1sLHU9OTAsaD0zNjAsZixwLGQsZyxfPTIuNTtmdW5jdGlvbiB5KCl7cmV0dXJue3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6eCgpfX1mdW5jdGlvbiB4KCl7cmV0dXJuIElyKFlFKG4vdSkqdSxyLHUpLm1hcChkKS5jb25jYXQoSXIoWUUocy9oKSpoLGEsaCkubWFwKGcpKS5jb25jYXQoSXIoWUUodC9sKSpsLGUsbCkuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBSZShiJXUpPmxlfSkubWFwKGYpKS5jb25jYXQoSXIoWUUoby9jKSpjLGksYykuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBSZShiJWgpPmxlfSkubWFwKHApKX1yZXR1cm4geS5saW5lcz1mdW5jdGlvbigpe3JldHVybiB4KCkubWFwKGZ1bmN0aW9uKGIpe3JldHVybnt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpifX0pfSx5Lm91dGxpbmU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W2QobikuY29uY2F0KGcoYSkuc2xpY2UoMSksZChyKS5yZXZlcnNlKCkuc2xpY2UoMSksZyhzKS5yZXZlcnNlKCkuc2xpY2UoMSkpXX19LHkuZXh0ZW50PWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3kuZXh0ZW50TWFqb3IoYikuZXh0ZW50TWlub3IoYik6eS5leHRlbnRNaW5vcigpfSx5LmV4dGVudE1ham9yPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStiWzBdWzBdLHI9K2JbMV1bMF0scz0rYlswXVsxXSxhPStiWzFdWzFdLG4+ciYmKGI9bixuPXIscj1iKSxzPmEmJihiPXMscz1hLGE9YikseS5wcmVjaXNpb24oXykpOltbbixzXSxbcixhXV19LHkuZXh0ZW50TWlub3I9ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2JbMF1bMF0sZT0rYlsxXVswXSxvPStiWzBdWzFdLGk9K2JbMV1bMV0sdD5lJiYoYj10LHQ9ZSxlPWIpLG8+aSYmKGI9byxvPWksaT1iKSx5LnByZWNpc2lvbihfKSk6W1t0LG9dLFtlLGldXX0seS5zdGVwPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3kuc3RlcE1ham9yKGIpLnN0ZXBNaW5vcihiKTp5LnN0ZXBNaW5vcigpfSx5LnN0ZXBNYWpvcj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rYlswXSxoPStiWzFdLHkpOlt1LGhdfSx5LnN0ZXBNaW5vcj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0rYlswXSxjPStiWzFdLHkpOltsLGNdfSx5LnByZWNpc2lvbj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz0rYixmPXVidChvLGksOTApLHA9aGJ0KHQsZSxfKSxkPXVidChzLGEsOTApLGc9aGJ0KG4scixfKSx5KTpffSx5LmV4dGVudE1ham9yKFtbLTE4MCwtOTArbGVdLFsxODAsOTAtbGVdXSkuZXh0ZW50TWlub3IoW1stMTgwLC04MC1sZV0sWzE4MCw4MCtsZV1dKX1mdW5jdGlvbiBmYnQoKXtyZXR1cm4gTmsoKSgpfWZ1bmN0aW9uIHBidChlLHQpe3ZhciByPWVbMF0qeWUsbj1lWzFdKnllLGk9dFswXSp5ZSxvPXRbMV0qeWUsYT1adChuKSxzPVh0KG4pLGw9WnQobyksYz1YdChvKSx1PWEqWnQociksaD1hKlh0KHIpLGY9bCpadChpKSxwPWwqWHQoaSksZD0yKnduKHhyKGZqKG8tbikrYSpsKmZqKGktcikpKSxnPVh0KGQpLF89ZD9mdW5jdGlvbih5KXt2YXIgeD1YdCh5Kj1kKS9nLGI9WHQoZC15KS9nLFM9Yip1K3gqZixDPWIqaCt4KnAsUD1iKnMreCpjO3JldHVybltibihDLFMpKnZyLGJuKFAseHIoUypTK0MqQykpKnZyXX06ZnVuY3Rpb24oKXtyZXR1cm5bcip2cixuKnZyXX07cmV0dXJuIF8uZGlzdGFuY2U9ZCxffWZ1bmN0aW9uIFhtKGUpe3JldHVybiBlfXZhciBQaj1NcygpLElqPU1zKCksZGJ0LG1idCxMaixraiwkbT17cG9pbnQ6RnIsbGluZVN0YXJ0OkZyLGxpbmVFbmQ6RnIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7JG0ubGluZVN0YXJ0PVQzZSwkbS5saW5lRW5kPUEzZX0scG9seWdvbkVuZDpmdW5jdGlvbigpeyRtLmxpbmVTdGFydD0kbS5saW5lRW5kPSRtLnBvaW50PUZyLFBqLmFkZChSZShJaikpLElqLnJlc2V0KCl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPVBqLzI7cmV0dXJuIFBqLnJlc2V0KCksZX19O2Z1bmN0aW9uIFQzZSgpeyRtLnBvaW50PUMzZX1mdW5jdGlvbiBDM2UoZSx0KXskbS5wb2ludD1nYnQsZGJ0PUxqPWUsbWJ0PWtqPXR9ZnVuY3Rpb24gZ2J0KGUsdCl7SWouYWRkKGtqKmUtTGoqdCksTGo9ZSxraj10fWZ1bmN0aW9uIEEzZSgpe2didChkYnQsbWJ0KX12YXIgUmo9JG07dmFyIERiPTEvMCxEaz1EYixuNT0tRGIsT2s9bjUsUDNlPXtwb2ludDpJM2UsbGluZVN0YXJ0OkZyLGxpbmVFbmQ6RnIscG9seWdvblN0YXJ0OkZyLHBvbHlnb25FbmQ6RnIscmVzdWx0OmZ1bmN0aW9uKCl7dmFyIGU9W1tEYixEa10sW241LE9rXV07cmV0dXJuIG41PU9rPS0oRGs9RGI9MS8wKSxlfX07ZnVuY3Rpb24gSTNlKGUsdCl7ZTxEYiYmKERiPWUpLGU+bjUmJihuNT1lKSx0PERrJiYoRGs9dCksdD5PayYmKE9rPXQpfXZhciBPYj1QM2U7dmFyIE5qPTAsRGo9MCxpNT0wLHprPTAsRms9MCx6Yj0wLE9qPTAsemo9MCxvNT0wLHZidCx4YnQsSGgsVmgsbXU9e3BvaW50OkdfLGxpbmVTdGFydDpfYnQsbGluZUVuZDp5YnQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7bXUubGluZVN0YXJ0PVIzZSxtdS5saW5lRW5kPU4zZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe211LnBvaW50PUdfLG11LmxpbmVTdGFydD1fYnQsbXUubGluZUVuZD15YnR9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPW81P1tPai9vNSx6ai9vNV06emI/W3prL3piLEZrL3piXTppNT9bTmovaTUsRGovaTVdOltOYU4sTmFOXTtyZXR1cm4gTmo9RGo9aTU9ems9Rms9emI9T2o9emo9bzU9MCxlfX07ZnVuY3Rpb24gR18oZSx0KXtOais9ZSxEais9dCwrK2k1fWZ1bmN0aW9uIF9idCgpe211LnBvaW50PUwzZX1mdW5jdGlvbiBMM2UoZSx0KXttdS5wb2ludD1rM2UsR18oSGg9ZSxWaD10KX1mdW5jdGlvbiBrM2UoZSx0KXt2YXIgcj1lLUhoLG49dC1WaCxpPXhyKHIqcituKm4pO3prKz1pKihIaCtlKS8yLEZrKz1pKihWaCt0KS8yLHpiKz1pLEdfKEhoPWUsVmg9dCl9ZnVuY3Rpb24geWJ0KCl7bXUucG9pbnQ9R199ZnVuY3Rpb24gUjNlKCl7bXUucG9pbnQ9RDNlfWZ1bmN0aW9uIE4zZSgpe2JidCh2YnQseGJ0KX1mdW5jdGlvbiBEM2UoZSx0KXttdS5wb2ludD1iYnQsR18odmJ0PUhoPWUseGJ0PVZoPXQpfWZ1bmN0aW9uIGJidChlLHQpe3ZhciByPWUtSGgsbj10LVZoLGk9eHIocipyK24qbik7emsrPWkqKEhoK2UpLzIsRmsrPWkqKFZoK3QpLzIsemIrPWksaT1WaCplLUhoKnQsT2orPWkqKEhoK2UpLHpqKz1pKihWaCt0KSxvNSs9aSozLEdfKEhoPWUsVmg9dCl9dmFyIEZqPW11O2Z1bmN0aW9uIEJrKGUpe3RoaXMuX2NvbnRleHQ9ZX1Cay5wcm90b3R5cGU9e19yYWRpdXM6NC41LHBvaW50UmFkaXVzOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9yYWRpdXM9ZSx0aGlzfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9PT0wJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX3BvaW50PU5hTn0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp7dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KSx0aGlzLl9wb2ludD0xO2JyZWFrfWNhc2UgMTp7dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTticmVha31kZWZhdWx0Ont0aGlzLl9jb250ZXh0Lm1vdmVUbyhlK3RoaXMuX3JhZGl1cyx0KSx0aGlzLl9jb250ZXh0LmFyYyhlLHQsdGhpcy5fcmFkaXVzLDAsd2kpO2JyZWFrfX19LHJlc3VsdDpGcn07dmFyIEhqPU1zKCksQmosd2J0LFNidCxhNSxzNSxIaz17cG9pbnQ6RnIsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7SGsucG9pbnQ9TzNlfSxsaW5lRW5kOmZ1bmN0aW9uKCl7QmomJk1idCh3YnQsU2J0KSxIay5wb2ludD1Gcn0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Qmo9ITB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtCaj1udWxsfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgZT0rSGo7cmV0dXJuIEhqLnJlc2V0KCksZX19O2Z1bmN0aW9uIE8zZShlLHQpe0hrLnBvaW50PU1idCx3YnQ9YTU9ZSxTYnQ9czU9dH1mdW5jdGlvbiBNYnQoZSx0KXthNS09ZSxzNS09dCxIai5hZGQoeHIoYTUqYTUrczUqczUpKSxhNT1lLHM1PXR9dmFyIFZqPUhrO2Z1bmN0aW9uIFZrKCl7dGhpcy5fc3RyaW5nPVtdfVZrLnByb3RvdHlwZT17X3JhZGl1czo0LjUsX2NpcmNsZTpFYnQoNC41KSxwb2ludFJhZGl1czpmdW5jdGlvbihlKXtyZXR1cm4oZT0rZSkhPT10aGlzLl9yYWRpdXMmJih0aGlzLl9yYWRpdXM9ZSx0aGlzLl9jaXJjbGU9bnVsbCksdGhpc30scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPT09MCYmdGhpcy5fc3RyaW5nLnB1c2goIloiKSx0aGlzLl9wb2ludD1OYU59LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6e3RoaXMuX3N0cmluZy5wdXNoKCJNIixlLCIsIix0KSx0aGlzLl9wb2ludD0xO2JyZWFrfWNhc2UgMTp7dGhpcy5fc3RyaW5nLnB1c2goIkwiLGUsIiwiLHQpO2JyZWFrfWRlZmF1bHQ6e3RoaXMuX2NpcmNsZT09bnVsbCYmKHRoaXMuX2NpcmNsZT1FYnQodGhpcy5fcmFkaXVzKSksdGhpcy5fc3RyaW5nLnB1c2goIk0iLGUsIiwiLHQsdGhpcy5fY2lyY2xlKTticmVha319fSxyZXN1bHQ6ZnVuY3Rpb24oKXtpZih0aGlzLl9zdHJpbmcubGVuZ3RoKXt2YXIgZT10aGlzLl9zdHJpbmcuam9pbigiIik7cmV0dXJuIHRoaXMuX3N0cmluZz1bXSxlfWVsc2UgcmV0dXJuIG51bGx9fTtmdW5jdGlvbiBFYnQoZSl7cmV0dXJuIm0wLCIrZSsiYSIrZSsiLCIrZSsiIDAgMSwxIDAsIistMiplKyJhIitlKyIsIitlKyIgMCAxLDEgMCwiKzIqZSsieiJ9ZnVuY3Rpb24gVGJ0KGUsdCl7dmFyIHI9NC41LG4saTtmdW5jdGlvbiBvKGEpe3JldHVybiBhJiYodHlwZW9mIHI9PSJmdW5jdGlvbiImJmkucG9pbnRSYWRpdXMoK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKSx2byhhLG4oaSkpKSxpLnJlc3VsdCgpfXJldHVybiBvLmFyZWE9ZnVuY3Rpb24oYSl7cmV0dXJuIHZvKGEsbihSaikpLFJqLnJlc3VsdCgpfSxvLm1lYXN1cmU9ZnVuY3Rpb24oYSl7cmV0dXJuIHZvKGEsbihWaikpLFZqLnJlc3VsdCgpfSxvLmJvdW5kcz1mdW5jdGlvbihhKXtyZXR1cm4gdm8oYSxuKE9iKSksT2IucmVzdWx0KCl9LG8uY2VudHJvaWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHZvKGEsbihGaikpLEZqLnJlc3VsdCgpfSxvLnByb2plY3Rpb249ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49YT09bnVsbD8oZT1udWxsLFhtKTooZT1hKS5zdHJlYW0sbyk6ZX0sby5jb250ZXh0PWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWE9PW51bGw/KHQ9bnVsbCxuZXcgVmspOm5ldyBCayh0PWEpLHR5cGVvZiByIT0iZnVuY3Rpb24iJiZpLnBvaW50UmFkaXVzKHIpLG8pOnR9LG8ucG9pbnRSYWRpdXM9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIGE9PSJmdW5jdGlvbiI/YTooaS5wb2ludFJhZGl1cygrYSksK2EpLG8pOnJ9LG8ucHJvamVjdGlvbihlKS5jb250ZXh0KHQpfWZ1bmN0aW9uIENidChlKXtyZXR1cm57c3RyZWFtOkttKGUpfX1mdW5jdGlvbiBLbShlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9bmV3IFVqO2Zvcih2YXIgbiBpbiBlKXJbbl09ZVtuXTtyZXR1cm4gci5zdHJlYW09dCxyfX1mdW5jdGlvbiBVaigpe31Vai5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlVqLHBvaW50OmZ1bmN0aW9uKGUsdCl7dGhpcy5zdHJlYW0ucG9pbnQoZSx0KX0sc3BoZXJlOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25FbmQoKX19O2Z1bmN0aW9uIHFqKGUsdCxyKXt2YXIgbj1lLmNsaXBFeHRlbnQmJmUuY2xpcEV4dGVudCgpO3JldHVybiBlLnNjYWxlKDE1MCkudHJhbnNsYXRlKFswLDBdKSxuIT1udWxsJiZlLmNsaXBFeHRlbnQobnVsbCksdm8ocixlLnN0cmVhbShPYikpLHQoT2IucmVzdWx0KCkpLG4hPW51bGwmJmUuY2xpcEV4dGVudChuKSxlfWZ1bmN0aW9uIFdfKGUsdCxyKXtyZXR1cm4gcWooZSxmdW5jdGlvbihuKXt2YXIgaT10WzFdWzBdLXRbMF1bMF0sbz10WzFdWzFdLXRbMF1bMV0sYT1NYXRoLm1pbihpLyhuWzFdWzBdLW5bMF1bMF0pLG8vKG5bMV1bMV0tblswXVsxXSkpLHM9K3RbMF1bMF0rKGktYSooblsxXVswXStuWzBdWzBdKSkvMixsPSt0WzBdWzFdKyhvLWEqKG5bMV1bMV0rblswXVsxXSkpLzI7ZS5zY2FsZSgxNTAqYSkudHJhbnNsYXRlKFtzLGxdKX0scil9ZnVuY3Rpb24gRmIoZSx0LHIpe3JldHVybiBXXyhlLFtbMCwwXSx0XSxyKX1mdW5jdGlvbiBCYihlLHQscil7cmV0dXJuIHFqKGUsZnVuY3Rpb24obil7dmFyIGk9K3Qsbz1pLyhuWzFdWzBdLW5bMF1bMF0pLGE9KGktbyooblsxXVswXStuWzBdWzBdKSkvMixzPS1vKm5bMF1bMV07ZS5zY2FsZSgxNTAqbykudHJhbnNsYXRlKFthLHNdKX0scil9ZnVuY3Rpb24gSGIoZSx0LHIpe3JldHVybiBxaihlLGZ1bmN0aW9uKG4pe3ZhciBpPSt0LG89aS8oblsxXVsxXS1uWzBdWzFdKSxhPS1vKm5bMF1bMF0scz0oaS1vKihuWzFdWzFdK25bMF1bMV0pKS8yO2Uuc2NhbGUoMTUwKm8pLnRyYW5zbGF0ZShbYSxzXSl9LHIpfXZhciBBYnQ9MTYsejNlPVp0KDMwKnllKTtmdW5jdGlvbiBHaihlLHQpe3JldHVybit0P0IzZShlLHQpOkYzZShlKX1mdW5jdGlvbiBGM2UoZSl7cmV0dXJuIEttKHtwb2ludDpmdW5jdGlvbih0LHIpe3Q9ZSh0LHIpLHRoaXMuc3RyZWFtLnBvaW50KHRbMF0sdFsxXSl9fSl9ZnVuY3Rpb24gQjNlKGUsdCl7ZnVuY3Rpb24gcihuLGksbyxhLHMsbCxjLHUsaCxmLHAsZCxnLF8pe3ZhciB5PWMtbix4PXUtaSxiPXkqeSt4Kng7aWYoYj40KnQmJmctLSl7dmFyIFM9YStmLEM9cytwLFA9bCtkLGs9eHIoUypTK0MqQytQKlApLE89d24oUC89ayksRD1SZShSZShQKS0xKTxsZXx8UmUoby1oKTxsZT8obytoKS8yOmJuKEMsUyksQj1lKEQsTyksST1CWzBdLEw9QlsxXSxSPUktbixGPUwtaSx6PXgqUi15KkY7KHoqei9iPnR8fFJlKCh5KlIreCpGKS9iLS41KT4uM3x8YSpmK3MqcCtsKmQ8ejNlKSYmKHIobixpLG8sYSxzLGwsSSxMLEQsUy89ayxDLz1rLFAsZyxfKSxfLnBvaW50KEksTCkscihJLEwsRCxTLEMsUCxjLHUsaCxmLHAsZCxnLF8pKX19cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpLG8sYSxzLGwsYyx1LGgsZixwLGQsZyxfPXtwb2ludDp5LGxpbmVTdGFydDp4LGxpbmVFbmQ6Uyxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtuLnBvbHlnb25TdGFydCgpLF8ubGluZVN0YXJ0PUN9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtuLnBvbHlnb25FbmQoKSxfLmxpbmVTdGFydD14fX07ZnVuY3Rpb24geShPLEQpe089ZShPLEQpLG4ucG9pbnQoT1swXSxPWzFdKX1mdW5jdGlvbiB4KCl7aD1OYU4sXy5wb2ludD1iLG4ubGluZVN0YXJ0KCl9ZnVuY3Rpb24gYihPLEQpe3ZhciBCPW9jKFtPLERdKSxJPWUoTyxEKTtyKGgsZix1LHAsZCxnLGg9SVswXSxmPUlbMV0sdT1PLHA9QlswXSxkPUJbMV0sZz1CWzJdLEFidCxuKSxuLnBvaW50KGgsZil9ZnVuY3Rpb24gUygpe18ucG9pbnQ9eSxuLmxpbmVFbmQoKX1mdW5jdGlvbiBDKCl7eCgpLF8ucG9pbnQ9UCxfLmxpbmVFbmQ9a31mdW5jdGlvbiBQKE8sRCl7YihpPU8sRCksbz1oLGE9ZixzPXAsbD1kLGM9ZyxfLnBvaW50PWJ9ZnVuY3Rpb24gaygpe3IoaCxmLHUscCxkLGcsbyxhLGkscyxsLGMsQWJ0LG4pLF8ubGluZUVuZD1TLFMoKX1yZXR1cm4gX319dmFyIEgzZT1LbSh7cG9pbnQ6ZnVuY3Rpb24oZSx0KXt0aGlzLnN0cmVhbS5wb2ludChlKnllLHQqeWUpfX0pO2Z1bmN0aW9uIFYzZShlKXtyZXR1cm4gS20oe3BvaW50OmZ1bmN0aW9uKHQscil7dmFyIG49ZSh0LHIpO3JldHVybiB0aGlzLnN0cmVhbS5wb2ludChuWzBdLG5bMV0pfX0pfWZ1bmN0aW9uIFUzZShlLHQscixuLGkpe2Z1bmN0aW9uIG8oYSxzKXtyZXR1cm4gYSo9bixzKj1pLFt0K2UqYSxyLWUqc119cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKGEscyl7cmV0dXJuWyhhLXQpL2Uqbiwoci1zKS9lKmldfSxvfWZ1bmN0aW9uIFBidChlLHQscixuLGksbyl7dmFyIGE9WnQobykscz1YdChvKSxsPWEqZSxjPXMqZSx1PWEvZSxoPXMvZSxmPShzKnItYSp0KS9lLHA9KHMqdCthKnIpL2U7ZnVuY3Rpb24gZChnLF8pe3JldHVybiBnKj1uLF8qPWksW2wqZy1jKl8rdCxyLWMqZy1sKl9dfXJldHVybiBkLmludmVydD1mdW5jdGlvbihnLF8pe3JldHVybltuKih1KmctaCpfK2YpLGkqKHAtaCpnLXUqXyldfSxkfWZ1bmN0aW9uIFNpKGUpe3JldHVybiBsNShmdW5jdGlvbigpe3JldHVybiBlfSkoKX1mdW5jdGlvbiBsNShlKXt2YXIgdCxyPTE1MCxuPTQ4MCxpPTI1MCxvPTAsYT0wLHM9MCxsPTAsYz0wLHUsaD0wLGY9MSxwPTEsZD1udWxsLGc9ZTUsXz1udWxsLHkseCxiLFM9WG0sQz0uNSxQLGssTyxELEI7ZnVuY3Rpb24gSSh6KXtyZXR1cm4gTyh6WzBdKnllLHpbMV0qeWUpfWZ1bmN0aW9uIEwoeil7cmV0dXJuIHo9Ty5pbnZlcnQoelswXSx6WzFdKSx6JiZbelswXSp2cix6WzFdKnZyXX1JLnN0cmVhbT1mdW5jdGlvbih6KXtyZXR1cm4gRCYmQj09PXo/RDpEPUgzZShWM2UodSkoZyhQKFMoQj16KSkpKSl9LEkucHJlY2xpcD1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz16LGQ9dm9pZCAwLEYoKSk6Z30sSS5wb3N0Y2xpcD1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUz16LF89eT14PWI9bnVsbCxGKCkpOlN9LEkuY2xpcEFuZ2xlPWZ1bmN0aW9uKHope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPSt6P0FrKGQ9eip5ZSk6KGQ9bnVsbCxlNSksRigpKTpkKnZyfSxJLmNsaXBFeHRlbnQ9ZnVuY3Rpb24oeil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFM9ej09bnVsbD8oXz15PXg9Yj1udWxsLFhtKTpPcChfPSt6WzBdWzBdLHk9K3pbMF1bMV0seD0relsxXVswXSxiPSt6WzFdWzFdKSxGKCkpOl89PW51bGw/bnVsbDpbW18seV0sW3gsYl1dfSxJLnNjYWxlPWZ1bmN0aW9uKHope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt6LFIoKSk6cn0sSS50cmFuc2xhdGU9ZnVuY3Rpb24oeil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3pbMF0saT0relsxXSxSKCkpOltuLGldfSxJLmNlbnRlcj1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz16WzBdJTM2MCp5ZSxhPXpbMV0lMzYwKnllLFIoKSk6W28qdnIsYSp2cl19LEkucm90YXRlPWZ1bmN0aW9uKHope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXpbMF0lMzYwKnllLGw9elsxXSUzNjAqeWUsYz16Lmxlbmd0aD4yP3pbMl0lMzYwKnllOjAsUigpKTpbcyp2cixsKnZyLGMqdnJdfSxJLmFuZ2xlPWZ1bmN0aW9uKHope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPXolMzYwKnllLFIoKSk6aCp2cn0sSS5yZWZsZWN0WD1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj16Py0xOjEsUigpKTpmPDB9LEkucmVmbGVjdFk9ZnVuY3Rpb24oeil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9ej8tMToxLFIoKSk6cDwwfSxJLnByZWNpc2lvbj1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUD1HaihrLEM9eip6KSxGKCkpOnhyKEMpfSxJLmZpdEV4dGVudD1mdW5jdGlvbih6LFUpe3JldHVybiBXXyhJLHosVSl9LEkuZml0U2l6ZT1mdW5jdGlvbih6LFUpe3JldHVybiBGYihJLHosVSl9LEkuZml0V2lkdGg9ZnVuY3Rpb24oeixVKXtyZXR1cm4gQmIoSSx6LFUpfSxJLmZpdEhlaWdodD1mdW5jdGlvbih6LFUpe3JldHVybiBIYihJLHosVSl9O2Z1bmN0aW9uIFIoKXt2YXIgej1QYnQociwwLDAsZixwLGgpLmFwcGx5KG51bGwsdChvLGEpKSxVPShoP1BidDpVM2UpKHIsbi16WzBdLGktelsxXSxmLHAsaCk7cmV0dXJuIHU9dDUocyxsLGMpLGs9UUUodCxVKSxPPVFFKHUsayksUD1HaihrLEMpLEYoKX1mdW5jdGlvbiBGKCl7cmV0dXJuIEQ9Qj1udWxsLEl9cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksSS5pbnZlcnQ9dC5pbnZlcnQmJkwsUigpfX1mdW5jdGlvbiBWYihlKXt2YXIgdD0wLHI9QmUvMyxuPWw1KGUpLGk9bih0LHIpO3JldHVybiBpLnBhcmFsbGVscz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKHQ9b1swXSp5ZSxyPW9bMV0qeWUpOlt0KnZyLHIqdnJdfSxpfWZ1bmN0aW9uIElidChlKXt2YXIgdD1adChlKTtmdW5jdGlvbiByKG4saSl7cmV0dXJuW24qdCxYdChpKS90XX1yZXR1cm4gci5pbnZlcnQ9ZnVuY3Rpb24obixpKXtyZXR1cm5bbi90LHduKGkqdCldfSxyfWZ1bmN0aW9uIFdqKGUsdCl7dmFyIHI9WHQoZSksbj0ocitYdCh0KSkvMjtpZihSZShuKTxsZSlyZXR1cm4gSWJ0KGUpO3ZhciBpPTErciooMipuLXIpLG89eHIoaSkvbjtmdW5jdGlvbiBhKHMsbCl7dmFyIGM9eHIoaS0yKm4qWHQobCkpL247cmV0dXJuW2MqWHQocyo9biksby1jKlp0KHMpXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24ocyxsKXt2YXIgYz1vLWwsdT1ibihzLFJlKGMpKSp1YShjKTtyZXR1cm4gYypuPDAmJih1LT1CZSp1YShzKSp1YShjKSksW3Uvbix3bigoaS0ocypzK2MqYykqbipuKS8oMipuKSldfSxhfWZ1bmN0aW9uIFlfKCl7cmV0dXJuIFZiKFdqKS5zY2FsZSgxNTUuNDI0KS5jZW50ZXIoWzAsMzMuNjQ0Ml0pfWZ1bmN0aW9uIFVrKCl7cmV0dXJuIFlfKCkucGFyYWxsZWxzKFsyOS41LDQ1LjVdKS5zY2FsZSgxMDcwKS50cmFuc2xhdGUoWzQ4MCwyNTBdKS5yb3RhdGUoWzk2LDBdKS5jZW50ZXIoWy0uNiwzOC43XSl9ZnVuY3Rpb24gcTNlKGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybntwb2ludDpmdW5jdGlvbihyLG4pe2Zvcih2YXIgaT0tMTsrK2k8dDspZVtpXS5wb2ludChyLG4pfSxzcGhlcmU6ZnVuY3Rpb24oKXtmb3IodmFyIHI9LTE7KytyPHQ7KWVbcl0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5wb2x5Z29uRW5kKCl9fX1mdW5jdGlvbiBMYnQoKXt2YXIgZSx0LHI9VWsoKSxuLGk9WV8oKS5yb3RhdGUoWzE1NCwwXSkuY2VudGVyKFstMiw1OC41XSkucGFyYWxsZWxzKFs1NSw2NV0pLG8sYT1ZXygpLnJvdGF0ZShbMTU3LDBdKS5jZW50ZXIoWy0zLDE5LjldKS5wYXJhbGxlbHMoWzgsMThdKSxzLGwsYz17cG9pbnQ6ZnVuY3Rpb24oZixwKXtsPVtmLHBdfX07ZnVuY3Rpb24gdShmKXt2YXIgcD1mWzBdLGQ9ZlsxXTtyZXR1cm4gbD1udWxsLG4ucG9pbnQocCxkKSxsfHwoby5wb2ludChwLGQpLGwpfHwocy5wb2ludChwLGQpLGwpfXUuaW52ZXJ0PWZ1bmN0aW9uKGYpe3ZhciBwPXIuc2NhbGUoKSxkPXIudHJhbnNsYXRlKCksZz0oZlswXS1kWzBdKS9wLF89KGZbMV0tZFsxXSkvcDtyZXR1cm4oXz49LjEyJiZfPC4yMzQmJmc+PS0uNDI1JiZnPC0uMjE0P2k6Xz49LjE2NiYmXzwuMjM0JiZnPj0tLjIxNCYmZzwtLjExNT9hOnIpLmludmVydChmKX0sdS5zdHJlYW09ZnVuY3Rpb24oZil7cmV0dXJuIGUmJnQ9PT1mP2U6ZT1xM2UoW3Iuc3RyZWFtKHQ9ZiksaS5zdHJlYW0oZiksYS5zdHJlYW0oZildKX0sdS5wcmVjaXNpb249ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHIucHJlY2lzaW9uKGYpLGkucHJlY2lzaW9uKGYpLGEucHJlY2lzaW9uKGYpLGgoKSk6ci5wcmVjaXNpb24oKX0sdS5zY2FsZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oci5zY2FsZShmKSxpLnNjYWxlKGYqLjM1KSxhLnNjYWxlKGYpLHUudHJhbnNsYXRlKHIudHJhbnNsYXRlKCkpKTpyLnNjYWxlKCl9LHUudHJhbnNsYXRlPWZ1bmN0aW9uKGYpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiByLnRyYW5zbGF0ZSgpO3ZhciBwPXIuc2NhbGUoKSxkPStmWzBdLGc9K2ZbMV07cmV0dXJuIG49ci50cmFuc2xhdGUoZikuY2xpcEV4dGVudChbW2QtLjQ1NSpwLGctLjIzOCpwXSxbZCsuNDU1KnAsZysuMjM4KnBdXSkuc3RyZWFtKGMpLG89aS50cmFuc2xhdGUoW2QtLjMwNypwLGcrLjIwMSpwXSkuY2xpcEV4dGVudChbW2QtLjQyNSpwK2xlLGcrLjEyKnArbGVdLFtkLS4yMTQqcC1sZSxnKy4yMzQqcC1sZV1dKS5zdHJlYW0oYykscz1hLnRyYW5zbGF0ZShbZC0uMjA1KnAsZysuMjEyKnBdKS5jbGlwRXh0ZW50KFtbZC0uMjE0KnArbGUsZysuMTY2KnArbGVdLFtkLS4xMTUqcC1sZSxnKy4yMzQqcC1sZV1dKS5zdHJlYW0oYyksaCgpfSx1LmZpdEV4dGVudD1mdW5jdGlvbihmLHApe3JldHVybiBXXyh1LGYscCl9LHUuZml0U2l6ZT1mdW5jdGlvbihmLHApe3JldHVybiBGYih1LGYscCl9LHUuZml0V2lkdGg9ZnVuY3Rpb24oZixwKXtyZXR1cm4gQmIodSxmLHApfSx1LmZpdEhlaWdodD1mdW5jdGlvbihmLHApe3JldHVybiBIYih1LGYscCl9O2Z1bmN0aW9uIGgoKXtyZXR1cm4gZT10PW51bGwsdX1yZXR1cm4gdS5zY2FsZSgxMDcwKX1mdW5jdGlvbiBxayhlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1adCh0KSxpPVp0KHIpLG89ZShuKmkpO3JldHVybltvKmkqWHQodCksbypYdChyKV19fWZ1bmN0aW9uIFVoKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3ZhciBuPXhyKHQqdCtyKnIpLGk9ZShuKSxvPVh0KGkpLGE9WnQoaSk7cmV0dXJuW2JuKHQqbyxuKmEpLHduKG4mJnIqby9uKV19fXZhciBHaz1xayhmdW5jdGlvbihlKXtyZXR1cm4geHIoMi8oMStlKSl9KTtHay5pbnZlcnQ9VWgoZnVuY3Rpb24oZSl7cmV0dXJuIDIqd24oZS8yKX0pO2Z1bmN0aW9uIGtidCgpe3JldHVybiBTaShHaykuc2NhbGUoMTI0Ljc1KS5jbGlwQW5nbGUoMTgwLS4wMDEpfXZhciBXaz1xayhmdW5jdGlvbihlKXtyZXR1cm4oZT1oayhlKSkmJmUvWHQoZSl9KTtXay5pbnZlcnQ9VWgoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KTtmdW5jdGlvbiBSYnQoKXtyZXR1cm4gU2koV2spLnNjYWxlKDc5LjQxODgpLmNsaXBBbmdsZSgxODAtLjAwMSl9ZnVuY3Rpb24gal8oZSx0KXtyZXR1cm5bZSxCXyhJYigobW4rdCkvMikpXX1qXy5pbnZlcnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm5bZSwyKmljKGNrKHQpKS1tbl19O2Z1bmN0aW9uIE5idCgpe3JldHVybiBZaihqXykuc2NhbGUoOTYxL3dpKX1mdW5jdGlvbiBZaihlKXt2YXIgdD1TaShlKSxyPXQuY2VudGVyLG49dC5zY2FsZSxpPXQudHJhbnNsYXRlLG89dC5jbGlwRXh0ZW50LGE9bnVsbCxzLGwsYzt0LnNjYWxlPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuKGgpLHUoKSk6bigpfSx0LnRyYW5zbGF0ZT1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaShoKSx1KCkpOmkoKX0sdC5jZW50ZXI9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHIoaCksdSgpKTpyKCl9LHQuY2xpcEV4dGVudD1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD09bnVsbD9hPXM9bD1jPW51bGw6KGE9K2hbMF1bMF0scz0raFswXVsxXSxsPStoWzFdWzBdLGM9K2hbMV1bMV0pLHUoKSk6YT09bnVsbD9udWxsOltbYSxzXSxbbCxjXV19O2Z1bmN0aW9uIHUoKXt2YXIgaD1CZSpuKCksZj10KHdrKHQucm90YXRlKCkpLmludmVydChbMCwwXSkpO3JldHVybiBvKGE9PW51bGw/W1tmWzBdLWgsZlsxXS1oXSxbZlswXStoLGZbMV0raF1dOmU9PT1qXz9bW01hdGgubWF4KGZbMF0taCxhKSxzXSxbTWF0aC5taW4oZlswXStoLGwpLGNdXTpbW2EsTWF0aC5tYXgoZlsxXS1oLHMpXSxbbCxNYXRoLm1pbihmWzFdK2gsYyldXSl9cmV0dXJuIHUoKX1mdW5jdGlvbiBZayhlKXtyZXR1cm4gSWIoKG1uK2UpLzIpfWZ1bmN0aW9uIGpqKGUsdCl7dmFyIHI9WnQoZSksbj1lPT09dD9YdChlKTpCXyhyL1p0KHQpKS9CXyhZayh0KS9ZayhlKSksaT1yKnVrKFlrKGUpLG4pL247aWYoIW4pcmV0dXJuIGpfO2Z1bmN0aW9uIG8oYSxzKXtpPjA/czwtbW4rbGUmJihzPS1tbitsZSk6cz5tbi1sZSYmKHM9bW4tbGUpO3ZhciBsPWkvdWsoWWsocyksbik7cmV0dXJuW2wqWHQobiphKSxpLWwqWnQobiphKV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKGEscyl7dmFyIGw9aS1zLGM9dWEobikqeHIoYSphK2wqbCksdT1ibihhLFJlKGwpKSp1YShsKTtyZXR1cm4gbCpuPDAmJih1LT1CZSp1YShhKSp1YShsKSksW3UvbiwyKmljKHVrKGkvYywxL24pKS1tbl19LG99ZnVuY3Rpb24gRGJ0KCl7cmV0dXJuIFZiKGpqKS5zY2FsZSgxMDkuNSkucGFyYWxsZWxzKFszMCwzMF0pfWZ1bmN0aW9uIFhfKGUsdCl7cmV0dXJuW2UsdF19WF8uaW52ZXJ0PVhfO2Z1bmN0aW9uIE9idCgpe3JldHVybiBTaShYXykuc2NhbGUoMTUyLjYzKX1mdW5jdGlvbiBYaihlLHQpe3ZhciByPVp0KGUpLG49ZT09PXQ/WHQoZSk6KHItWnQodCkpLyh0LWUpLGk9ci9uK2U7aWYoUmUobik8bGUpcmV0dXJuIFhfO2Z1bmN0aW9uIG8oYSxzKXt2YXIgbD1pLXMsYz1uKmE7cmV0dXJuW2wqWHQoYyksaS1sKlp0KGMpXX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24oYSxzKXt2YXIgbD1pLXMsYz1ibihhLFJlKGwpKSp1YShsKTtyZXR1cm4gbCpuPDAmJihjLT1CZSp1YShhKSp1YShsKSksW2MvbixpLXVhKG4pKnhyKGEqYStsKmwpXX0sb31mdW5jdGlvbiB6YnQoKXtyZXR1cm4gVmIoWGopLnNjYWxlKDEzMS4xNTQpLmNlbnRlcihbMCwxMy45Mzg5XSl9dmFyIGM1PTEuMzQwMjY0LHU1PS0uMDgxMTA2LGg1PTg5M2UtNixmNT0uMDAzNzk2LGprPXhyKDMpLzIsRzNlPTEyO2Z1bmN0aW9uIFhrKGUsdCl7dmFyIHI9d24oamsqWHQodCkpLG49cipyLGk9bipuKm47cmV0dXJuW2UqWnQocikvKGprKihjNSszKnU1Km4raSooNypoNSs5KmY1Km4pKSksciooYzUrdTUqbitpKihoNStmNSpuKSldfVhrLmludmVydD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj10LG49cipyLGk9bipuKm4sbz0wLGEscyxsO288RzNlJiYocz1yKihjNSt1NSpuK2kqKGg1K2Y1Km4pKS10LGw9YzUrMyp1NSpuK2kqKDcqaDUrOSpmNSpuKSxyLT1hPXMvbCxuPXIqcixpPW4qbipuLCEoUmUoYSk8Rl8pKTsrK28pO3JldHVybltqayplKihjNSszKnU1Km4raSooNypoNSs5KmY1Km4pKS9adChyKSx3bihYdChyKS9qayldfTtmdW5jdGlvbiBGYnQoKXtyZXR1cm4gU2koWGspLnNjYWxlKDE3Ny4xNTgpfWZ1bmN0aW9uICRrKGUsdCl7dmFyIHI9WnQodCksbj1adChlKSpyO3JldHVybltyKlh0KGUpL24sWHQodCkvbl19JGsuaW52ZXJ0PVVoKGljKTtmdW5jdGlvbiBCYnQoKXtyZXR1cm4gU2koJGspLnNjYWxlKDE0NC4wNDkpLmNsaXBBbmdsZSg2MCl9ZnVuY3Rpb24gSGJ0KCl7dmFyIGU9MSx0PTAscj0wLG49MSxpPTEsbz0wLGEscyxsPW51bGwsYyx1LGgsZj0xLHA9MSxkPUttKHtwb2ludDpmdW5jdGlvbihTLEMpe3ZhciBQPWIoW1MsQ10pO3RoaXMuc3RyZWFtLnBvaW50KFBbMF0sUFsxXSl9fSksZz1YbSxfLHk7ZnVuY3Rpb24geCgpe3JldHVybiBmPWUqbixwPWUqaSxfPXk9bnVsbCxifWZ1bmN0aW9uIGIoUyl7dmFyIEM9U1swXSpmLFA9U1sxXSpwO2lmKG8pe3ZhciBrPVAqYS1DKnM7Qz1DKmErUCpzLFA9a31yZXR1cm5bQyt0LFArcl19cmV0dXJuIGIuaW52ZXJ0PWZ1bmN0aW9uKFMpe3ZhciBDPVNbMF0tdCxQPVNbMV0tcjtpZihvKXt2YXIgaz1QKmErQypzO0M9QyphLVAqcyxQPWt9cmV0dXJuW0MvZixQL3BdfSxiLnN0cmVhbT1mdW5jdGlvbihTKXtyZXR1cm4gXyYmeT09PVM/XzpfPWQoZyh5PVMpKX0sYi5wb3N0Y2xpcD1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz1TLGw9Yz11PWg9bnVsbCx4KCkpOmd9LGIuY2xpcEV4dGVudD1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz1TPT1udWxsPyhsPWM9dT1oPW51bGwsWG0pOk9wKGw9K1NbMF1bMF0sYz0rU1swXVsxXSx1PStTWzFdWzBdLGg9K1NbMV1bMV0pLHgoKSk6bD09bnVsbD9udWxsOltbbCxjXSxbdSxoXV19LGIuc2NhbGU9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K1MseCgpKTplfSxiLnRyYW5zbGF0ZT1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rU1swXSxyPStTWzFdLHgoKSk6W3Qscl19LGIuYW5nbGU9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89UyUzNjAqeWUscz1YdChvKSxhPVp0KG8pLHgoKSk6byp2cn0sYi5yZWZsZWN0WD1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1TPy0xOjEseCgpKTpuPDB9LGIucmVmbGVjdFk9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9Uz8tMToxLHgoKSk6aTwwfSxiLmZpdEV4dGVudD1mdW5jdGlvbihTLEMpe3JldHVybiBXXyhiLFMsQyl9LGIuZml0U2l6ZT1mdW5jdGlvbihTLEMpe3JldHVybiBGYihiLFMsQyl9LGIuZml0V2lkdGg9ZnVuY3Rpb24oUyxDKXtyZXR1cm4gQmIoYixTLEMpfSxiLmZpdEhlaWdodD1mdW5jdGlvbihTLEMpe3JldHVybiBIYihiLFMsQyl9LGJ9ZnVuY3Rpb24gS2soZSx0KXt2YXIgcj10KnQsbj1yKnI7cmV0dXJuW2UqKC44NzA3LS4xMzE5NzkqcituKigtLjAxMzc5MStuKiguMDAzOTcxKnItLjAwMTUyOSpuKSkpLHQqKDEuMDA3MjI2K3IqKC4wMTUwODUrbiooLS4wNDQ0NzUrLjAyODg3NCpyLS4wMDU5MTYqbikpKV19S2suaW52ZXJ0PWZ1bmN0aW9uKGUsdCl7dmFyIHI9dCxuPTI1LGk7ZG97dmFyIG89cipyLGE9bypvO3ItPWk9KHIqKDEuMDA3MjI2K28qKC4wMTUwODUrYSooLS4wNDQ0NzUrLjAyODg3NCpvLS4wMDU5MTYqYSkpKS10KS8oMS4wMDcyMjYrbyooLjAxNTA4NSozK2EqKC0uMDQ0NDc1KjcrLjAyODg3NCo5Km8tLjAwNTkxNioxMSphKSkpfXdoaWxlKFJlKGkpPmxlJiYtLW4+MCk7cmV0dXJuW2UvKC44NzA3KyhvPXIqcikqKC0uMTMxOTc5K28qKC0uMDEzNzkxK28qbypvKiguMDAzOTcxLS4wMDE1MjkqbykpKSkscl19O2Z1bmN0aW9uIFZidCgpe3JldHVybiBTaShLaykuc2NhbGUoMTc1LjI5NSl9ZnVuY3Rpb24gWmsoZSx0KXtyZXR1cm5bWnQodCkqWHQoZSksWHQodCldfVprLmludmVydD1VaCh3bik7ZnVuY3Rpb24gVWJ0KCl7cmV0dXJuIFNpKFprKS5zY2FsZSgyNDkuNSkuY2xpcEFuZ2xlKDkwK2xlKX1mdW5jdGlvbiBKayhlLHQpe3ZhciByPVp0KHQpLG49MStadChlKSpyO3JldHVybltyKlh0KGUpL24sWHQodCkvbl19SmsuaW52ZXJ0PVVoKGZ1bmN0aW9uKGUpe3JldHVybiAyKmljKGUpfSk7ZnVuY3Rpb24gcWJ0KCl7cmV0dXJuIFNpKEprKS5zY2FsZSgyNTApLmNsaXBBbmdsZSgxNDIpfWZ1bmN0aW9uIFFrKGUsdCl7cmV0dXJuW0JfKEliKChtbit0KS8yKSksLWVdfVFrLmludmVydD1mdW5jdGlvbihlLHQpe3JldHVyblstdCwyKmljKGNrKGUpKS1tbl19O2Z1bmN0aW9uIEdidCgpe3ZhciBlPVlqKFFrKSx0PWUuY2VudGVyLHI9ZS5yb3RhdGU7cmV0dXJuIGUuY2VudGVyPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QoWy1uWzFdLG5bMF1dKToobj10KCksW25bMV0sLW5bMF1dKX0sZS5yb3RhdGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cihbblswXSxuWzFdLG4ubGVuZ3RoPjI/blsyXSs5MDo5MF0pOihuPXIoKSxbblswXSxuWzFdLG5bMl0tOTBdKX0scihbMCwwLDkwXSkuc2NhbGUoMTU5LjE1NSl9ZnVuY3Rpb24gVzNlKGUsdCl7cmV0dXJuIGUucGFyZW50PT09dC5wYXJlbnQ/MToyfWZ1bmN0aW9uIFkzZShlKXtyZXR1cm4gZS5yZWR1Y2UoajNlLDApL2UubGVuZ3RofWZ1bmN0aW9uIGozZShlLHQpe3JldHVybiBlK3QueH1mdW5jdGlvbiBYM2UoZSl7cmV0dXJuIDErZS5yZWR1Y2UoJDNlLDApfWZ1bmN0aW9uICQzZShlLHQpe3JldHVybiBNYXRoLm1heChlLHQueSl9ZnVuY3Rpb24gSzNlKGUpe2Zvcih2YXIgdDt0PWUuY2hpbGRyZW47KWU9dFswXTtyZXR1cm4gZX1mdW5jdGlvbiBaM2UoZSl7Zm9yKHZhciB0O3Q9ZS5jaGlsZHJlbjspZT10W3QubGVuZ3RoLTFdO3JldHVybiBlfWZ1bmN0aW9uIFdidCgpe3ZhciBlPVczZSx0PTEscj0xLG49ITE7ZnVuY3Rpb24gaShvKXt2YXIgYSxzPTA7by5lYWNoQWZ0ZXIoZnVuY3Rpb24oZil7dmFyIHA9Zi5jaGlsZHJlbjtwPyhmLng9WTNlKHApLGYueT1YM2UocCkpOihmLng9YT9zKz1lKGYsYSk6MCxmLnk9MCxhPWYpfSk7dmFyIGw9SzNlKG8pLGM9WjNlKG8pLHU9bC54LWUobCxjKS8yLGg9Yy54K2UoYyxsKS8yO3JldHVybiBvLmVhY2hBZnRlcihuP2Z1bmN0aW9uKGYpe2YueD0oZi54LW8ueCkqdCxmLnk9KG8ueS1mLnkpKnJ9OmZ1bmN0aW9uKGYpe2YueD0oZi54LXUpLyhoLXUpKnQsZi55PSgxLShvLnk/Zi55L28ueToxKSkqcn0pfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9byxpKTplfSxpLnNpemU9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ITEsdD0rb1swXSxyPStvWzFdLGkpOm4/bnVsbDpbdCxyXX0saS5ub2RlU2l6ZT1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMCx0PStvWzBdLHI9K29bMV0saSk6bj9bdCxyXTpudWxsfSxpfWZ1bmN0aW9uIEozZShlKXt2YXIgdD0wLHI9ZS5jaGlsZHJlbixuPXImJnIubGVuZ3RoO2lmKCFuKXQ9MTtlbHNlIGZvcig7LS1uPj0wOyl0Kz1yW25dLnZhbHVlO2UudmFsdWU9dH1mdW5jdGlvbiBZYnQoKXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoSjNlKX1mdW5jdGlvbiBqYnQoZSl7dmFyIHQ9dGhpcyxyLG49W3RdLGksbyxhO2RvIGZvcihyPW4ucmV2ZXJzZSgpLG49W107dD1yLnBvcCgpOylpZihlKHQpLGk9dC5jaGlsZHJlbixpKWZvcihvPTAsYT1pLmxlbmd0aDtvPGE7KytvKW4ucHVzaChpW29dKTt3aGlsZShuLmxlbmd0aCk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gWGJ0KGUpe2Zvcih2YXIgdD10aGlzLHI9W3RdLG4saTt0PXIucG9wKCk7KWlmKGUodCksbj10LmNoaWxkcmVuLG4pZm9yKGk9bi5sZW5ndGgtMTtpPj0wOy0taSlyLnB1c2gobltpXSk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gJGJ0KGUpe2Zvcih2YXIgdD10aGlzLHI9W3RdLG49W10saSxvLGE7dD1yLnBvcCgpOylpZihuLnB1c2godCksaT10LmNoaWxkcmVuLGkpZm9yKG89MCxhPWkubGVuZ3RoO288YTsrK28pci5wdXNoKGlbb10pO2Zvcig7dD1uLnBvcCgpOyllKHQpO3JldHVybiB0aGlzfWZ1bmN0aW9uIEtidChlKXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoZnVuY3Rpb24odCl7Zm9yKHZhciByPStlKHQuZGF0YSl8fDAsbj10LmNoaWxkcmVuLGk9biYmbi5sZW5ndGg7LS1pPj0wOylyKz1uW2ldLnZhbHVlO3QudmFsdWU9cn0pfWZ1bmN0aW9uIFpidChlKXtyZXR1cm4gdGhpcy5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQpe3QuY2hpbGRyZW4mJnQuY2hpbGRyZW4uc29ydChlKX0pfWZ1bmN0aW9uIEpidChlKXtmb3IodmFyIHQ9dGhpcyxyPVEzZSh0LGUpLG49W3RdO3QhPT1yOyl0PXQucGFyZW50LG4ucHVzaCh0KTtmb3IodmFyIGk9bi5sZW5ndGg7ZSE9PXI7KW4uc3BsaWNlKGksMCxlKSxlPWUucGFyZW50O3JldHVybiBufWZ1bmN0aW9uIFEzZShlLHQpe2lmKGU9PT10KXJldHVybiBlO3ZhciByPWUuYW5jZXN0b3JzKCksbj10LmFuY2VzdG9ycygpLGk9bnVsbDtmb3IoZT1yLnBvcCgpLHQ9bi5wb3AoKTtlPT09dDspaT1lLGU9ci5wb3AoKSx0PW4ucG9wKCk7cmV0dXJuIGl9ZnVuY3Rpb24gUWJ0KCl7Zm9yKHZhciBlPXRoaXMsdD1bZV07ZT1lLnBhcmVudDspdC5wdXNoKGUpO3JldHVybiB0fWZ1bmN0aW9uIHQydCgpe3ZhciBlPVtdO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24odCl7ZS5wdXNoKHQpfSksZX1mdW5jdGlvbiBlMnQoKXt2YXIgZT1bXTtyZXR1cm4gdGhpcy5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQpe3QuY2hpbGRyZW58fGUucHVzaCh0KX0pLGV9ZnVuY3Rpb24gcjJ0KCl7dmFyIGU9dGhpcyx0PVtdO3JldHVybiBlLmVhY2goZnVuY3Rpb24ocil7ciE9PWUmJnQucHVzaCh7c291cmNlOnIucGFyZW50LHRhcmdldDpyfSl9KSx0fWZ1bmN0aW9uIHA1KGUsdCl7dmFyIHI9bmV3IFptKGUpLG49K2UudmFsdWUmJihyLnZhbHVlPWUudmFsdWUpLGksbz1bcl0sYSxzLGwsYztmb3IodD09bnVsbCYmKHQ9ZU1lKTtpPW8ucG9wKCk7KWlmKG4mJihpLnZhbHVlPStpLmRhdGEudmFsdWUpLChzPXQoaS5kYXRhKSkmJihjPXMubGVuZ3RoKSlmb3IoaS5jaGlsZHJlbj1uZXcgQXJyYXkoYyksbD1jLTE7bD49MDstLWwpby5wdXNoKGE9aS5jaGlsZHJlbltsXT1uZXcgWm0oc1tsXSkpLGEucGFyZW50PWksYS5kZXB0aD1pLmRlcHRoKzE7cmV0dXJuIHIuZWFjaEJlZm9yZSgkail9ZnVuY3Rpb24gdE1lKCl7cmV0dXJuIHA1KHRoaXMpLmVhY2hCZWZvcmUock1lKX1mdW5jdGlvbiBlTWUoZSl7cmV0dXJuIGUuY2hpbGRyZW59ZnVuY3Rpb24gck1lKGUpe2UuZGF0YT1lLmRhdGEuZGF0YX1mdW5jdGlvbiAkaihlKXt2YXIgdD0wO2RvIGUuaGVpZ2h0PXQ7d2hpbGUoKGU9ZS5wYXJlbnQpJiZlLmhlaWdodDwrK3QpfWZ1bmN0aW9uIFptKGUpe3RoaXMuZGF0YT1lLHRoaXMuZGVwdGg9dGhpcy5oZWlnaHQ9MCx0aGlzLnBhcmVudD1udWxsfVptLnByb3RvdHlwZT1wNS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlptLGNvdW50OllidCxlYWNoOmpidCxlYWNoQWZ0ZXI6JGJ0LGVhY2hCZWZvcmU6WGJ0LHN1bTpLYnQsc29ydDpaYnQscGF0aDpKYnQsYW5jZXN0b3JzOlFidCxkZXNjZW5kYW50czp0MnQsbGVhdmVzOmUydCxsaW5rczpyMnQsY29weTp0TWV9O3ZhciBuMnQ9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIGkydChlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscixuO3Q7KW49TWF0aC5yYW5kb20oKSp0LS18MCxyPWVbdF0sZVt0XT1lW25dLGVbbl09cjtyZXR1cm4gZX1mdW5jdGlvbiBlOChlKXtmb3IodmFyIHQ9MCxyPShlPWkydChuMnQuY2FsbChlKSkpLmxlbmd0aCxuPVtdLGksbzt0PHI7KWk9ZVt0XSxvJiZvMnQobyxpKT8rK3Q6KG89aU1lKG49bk1lKG4saSkpLHQ9MCk7cmV0dXJuIG99ZnVuY3Rpb24gbk1lKGUsdCl7dmFyIHIsbjtpZihLaih0LGUpKXJldHVyblt0XTtmb3Iocj0wO3I8ZS5sZW5ndGg7KytyKWlmKHQ4KHQsZVtyXSkmJktqKGQ1KGVbcl0sdCksZSkpcmV0dXJuW2Vbcl0sdF07Zm9yKHI9MDtyPGUubGVuZ3RoLTE7KytyKWZvcihuPXIrMTtuPGUubGVuZ3RoOysrbilpZih0OChkNShlW3JdLGVbbl0pLHQpJiZ0OChkNShlW3JdLHQpLGVbbl0pJiZ0OChkNShlW25dLHQpLGVbcl0pJiZLaihhMnQoZVtyXSxlW25dLHQpLGUpKXJldHVybltlW3JdLGVbbl0sdF07dGhyb3cgbmV3IEVycm9yfWZ1bmN0aW9uIHQ4KGUsdCl7dmFyIHI9ZS5yLXQucixuPXQueC1lLngsaT10LnktZS55O3JldHVybiByPDB8fHIqcjxuKm4raSppfWZ1bmN0aW9uIG8ydChlLHQpe3ZhciByPWUuci10LnIrMWUtNixuPXQueC1lLngsaT10LnktZS55O3JldHVybiByPjAmJnIqcj5uKm4raSppfWZ1bmN0aW9uIEtqKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpaWYoIW8ydChlLHRbcl0pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGlNZShlKXtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMTpyZXR1cm4gb01lKGVbMF0pO2Nhc2UgMjpyZXR1cm4gZDUoZVswXSxlWzFdKTtjYXNlIDM6cmV0dXJuIGEydChlWzBdLGVbMV0sZVsyXSl9fWZ1bmN0aW9uIG9NZShlKXtyZXR1cm57eDplLngseTplLnkscjplLnJ9fWZ1bmN0aW9uIGQ1KGUsdCl7dmFyIHI9ZS54LG49ZS55LGk9ZS5yLG89dC54LGE9dC55LHM9dC5yLGw9by1yLGM9YS1uLHU9cy1pLGg9TWF0aC5zcXJ0KGwqbCtjKmMpO3JldHVybnt4OihyK28rbC9oKnUpLzIseToobithK2MvaCp1KS8yLHI6KGgraStzKS8yfX1mdW5jdGlvbiBhMnQoZSx0LHIpe3ZhciBuPWUueCxpPWUueSxvPWUucixhPXQueCxzPXQueSxsPXQucixjPXIueCx1PXIueSxoPXIucixmPW4tYSxwPW4tYyxkPWktcyxnPWktdSxfPWwtbyx5PWgtbyx4PW4qbitpKmktbypvLGI9eC1hKmEtcypzK2wqbCxTPXgtYypjLXUqdStoKmgsQz1wKmQtZipnLFA9KGQqUy1nKmIpLyhDKjIpLW4saz0oZypfLWQqeSkvQyxPPShwKmItZipTKS8oQyoyKS1pLEQ9KGYqeS1wKl8pL0MsQj1rKmsrRCpELTEsST0yKihvK1AqaytPKkQpLEw9UCpQK08qTy1vKm8sUj0tKEI/KEkrTWF0aC5zcXJ0KEkqSS00KkIqTCkpLygyKkIpOkwvSSk7cmV0dXJue3g6bitQK2sqUix5OmkrTytEKlIscjpSfX1mdW5jdGlvbiBzMnQoZSx0LHIpe3ZhciBuPWUueC10LngsaSxvLGE9ZS55LXQueSxzLGwsYz1uKm4rYSphO2M/KG89dC5yK3IucixvKj1vLGw9ZS5yK3IucixsKj1sLG8+bD8oaT0oYytsLW8pLygyKmMpLHM9TWF0aC5zcXJ0KE1hdGgubWF4KDAsbC9jLWkqaSkpLHIueD1lLngtaSpuLXMqYSxyLnk9ZS55LWkqYStzKm4pOihpPShjK28tbCkvKDIqYykscz1NYXRoLnNxcnQoTWF0aC5tYXgoMCxvL2MtaSppKSksci54PXQueCtpKm4tcyphLHIueT10LnkraSphK3MqbikpOihyLng9dC54K3IucixyLnk9dC55KX1mdW5jdGlvbiBsMnQoZSx0KXt2YXIgcj1lLnIrdC5yLTFlLTYsbj10LngtZS54LGk9dC55LWUueTtyZXR1cm4gcj4wJiZyKnI+bipuK2kqaX1mdW5jdGlvbiBjMnQoZSl7dmFyIHQ9ZS5fLHI9ZS5uZXh0Ll8sbj10LnIrci5yLGk9KHQueCpyLnIrci54KnQucikvbixvPSh0Lnkqci5yK3IueSp0LnIpL247cmV0dXJuIGkqaStvKm99ZnVuY3Rpb24gcjgoZSl7dGhpcy5fPWUsdGhpcy5uZXh0PW51bGwsdGhpcy5wcmV2aW91cz1udWxsfWZ1bmN0aW9uIFpqKGUpe2lmKCEoaT1lLmxlbmd0aCkpcmV0dXJuIDA7dmFyIHQscixuLGksbyxhLHMsbCxjLHUsaDtpZih0PWVbMF0sdC54PTAsdC55PTAsIShpPjEpKXJldHVybiB0LnI7aWYocj1lWzFdLHQueD0tci5yLHIueD10LnIsci55PTAsIShpPjIpKXJldHVybiB0LnIrci5yO3MydChyLHQsbj1lWzJdKSx0PW5ldyByOCh0KSxyPW5ldyByOChyKSxuPW5ldyByOChuKSx0Lm5leHQ9bi5wcmV2aW91cz1yLHIubmV4dD10LnByZXZpb3VzPW4sbi5uZXh0PXIucHJldmlvdXM9dDt0OmZvcihzPTM7czxpOysrcyl7czJ0KHQuXyxyLl8sbj1lW3NdKSxuPW5ldyByOChuKSxsPXIubmV4dCxjPXQucHJldmlvdXMsdT1yLl8ucixoPXQuXy5yO2RvIGlmKHU8PWgpe2lmKGwydChsLl8sbi5fKSl7cj1sLHQubmV4dD1yLHIucHJldmlvdXM9dCwtLXM7Y29udGludWUgdH11Kz1sLl8ucixsPWwubmV4dH1lbHNle2lmKGwydChjLl8sbi5fKSl7dD1jLHQubmV4dD1yLHIucHJldmlvdXM9dCwtLXM7Y29udGludWUgdH1oKz1jLl8ucixjPWMucHJldmlvdXN9d2hpbGUobCE9PWMubmV4dCk7Zm9yKG4ucHJldmlvdXM9dCxuLm5leHQ9cix0Lm5leHQ9ci5wcmV2aW91cz1yPW4sbz1jMnQodCk7KG49bi5uZXh0KSE9PXI7KShhPWMydChuKSk8byYmKHQ9bixvPWEpO3I9dC5uZXh0fWZvcih0PVtyLl9dLG49cjsobj1uLm5leHQpIT09cjspdC5wdXNoKG4uXyk7Zm9yKG49ZTgodCkscz0wO3M8aTsrK3MpdD1lW3NdLHQueC09bi54LHQueS09bi55O3JldHVybiBuLnJ9ZnVuY3Rpb24gdTJ0KGUpe3JldHVybiBaaihlKSxlfWZ1bmN0aW9uIGgydChlKXtyZXR1cm4gZT09bnVsbD9udWxsOlViKGUpfWZ1bmN0aW9uIFViKGUpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZX1mdW5jdGlvbiB6cCgpe3JldHVybiAwfWZ1bmN0aW9uIEptKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBhTWUoZSl7cmV0dXJuIE1hdGguc3FydChlLnZhbHVlKX1mdW5jdGlvbiBkMnQoKXt2YXIgZT1udWxsLHQ9MSxyPTEsbj16cDtmdW5jdGlvbiBpKG8pe3JldHVybiBvLng9dC8yLG8ueT1yLzIsZT9vLmVhY2hCZWZvcmUoZjJ0KGUpKS5lYWNoQWZ0ZXIoSmoobiwuNSkpLmVhY2hCZWZvcmUocDJ0KDEpKTpvLmVhY2hCZWZvcmUoZjJ0KGFNZSkpLmVhY2hBZnRlcihKaih6cCwxKSkuZWFjaEFmdGVyKEpqKG4sby5yL01hdGgubWluKHQscikpKS5lYWNoQmVmb3JlKHAydChNYXRoLm1pbih0LHIpLygyKm8ucikpKSxvfXJldHVybiBpLnJhZGl1cz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1oMnQobyksaSk6ZX0saS5zaXplPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStvWzBdLHI9K29bMV0saSk6W3Qscl19LGkucGFkZGluZz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2Ygbz09ImZ1bmN0aW9uIj9vOkptKCtvKSxpKTpufSxpfWZ1bmN0aW9uIGYydChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dC5jaGlsZHJlbnx8KHQucj1NYXRoLm1heCgwLCtlKHQpfHwwKSl9fWZ1bmN0aW9uIEpqKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe2lmKG49ci5jaGlsZHJlbil7dmFyIG4saSxvPW4ubGVuZ3RoLGE9ZShyKSp0fHwwLHM7aWYoYSlmb3IoaT0wO2k8bzsrK2kpbltpXS5yKz1hO2lmKHM9WmoobiksYSlmb3IoaT0wO2k8bzsrK2kpbltpXS5yLT1hO3Iucj1zK2F9fX1mdW5jdGlvbiBwMnQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPXQucGFyZW50O3Qucio9ZSxyJiYodC54PXIueCtlKnQueCx0Lnk9ci55K2UqdC55KX19ZnVuY3Rpb24gbjgoZSl7ZS54MD1NYXRoLnJvdW5kKGUueDApLGUueTA9TWF0aC5yb3VuZChlLnkwKSxlLngxPU1hdGgucm91bmQoZS54MSksZS55MT1NYXRoLnJvdW5kKGUueTEpfWZ1bmN0aW9uIHFoKGUsdCxyLG4saSl7Zm9yKHZhciBvPWUuY2hpbGRyZW4sYSxzPS0xLGw9by5sZW5ndGgsYz1lLnZhbHVlJiYobi10KS9lLnZhbHVlOysrczxsOylhPW9bc10sYS55MD1yLGEueTE9aSxhLngwPXQsYS54MT10Kz1hLnZhbHVlKmN9ZnVuY3Rpb24gbTJ0KCl7dmFyIGU9MSx0PTEscj0wLG49ITE7ZnVuY3Rpb24gaShhKXt2YXIgcz1hLmhlaWdodCsxO3JldHVybiBhLngwPWEueTA9cixhLngxPWUsYS55MT10L3MsYS5lYWNoQmVmb3JlKG8odCxzKSksbiYmYS5lYWNoQmVmb3JlKG44KSxhfWZ1bmN0aW9uIG8oYSxzKXtyZXR1cm4gZnVuY3Rpb24obCl7bC5jaGlsZHJlbiYmcWgobCxsLngwLGEqKGwuZGVwdGgrMSkvcyxsLngxLGEqKGwuZGVwdGgrMikvcyk7dmFyIGM9bC54MCx1PWwueTAsaD1sLngxLXIsZj1sLnkxLXI7aDxjJiYoYz1oPShjK2gpLzIpLGY8dSYmKHU9Zj0odStmKS8yKSxsLngwPWMsbC55MD11LGwueDE9aCxsLnkxPWZ9fXJldHVybiBpLnJvdW5kPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEhYSxpKTpufSxpLnNpemU9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K2FbMF0sdD0rYVsxXSxpKTpbZSx0XX0saS5wYWRkaW5nPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSthLGkpOnJ9LGl9dmFyIGcydD0iJCIsc01lPXtkZXB0aDotMX0sXzJ0PXt9O2Z1bmN0aW9uIGxNZShlKXtyZXR1cm4gZS5pZH1mdW5jdGlvbiBjTWUoZSl7cmV0dXJuIGUucGFyZW50SWR9ZnVuY3Rpb24geTJ0KCl7dmFyIGU9bE1lLHQ9Y01lO2Z1bmN0aW9uIHIobil7dmFyIGksbyxhPW4ubGVuZ3RoLHMsbCxjLHU9bmV3IEFycmF5KGEpLGgsZixwPXt9O2ZvcihvPTA7bzxhOysrbylpPW5bb10sYz11W29dPW5ldyBabShpKSwoaD1lKGksbyxuKSkhPW51bGwmJihoKz0iIikmJihmPWcydCsoYy5pZD1oKSxwW2ZdPWYgaW4gcD9fMnQ6Yyk7Zm9yKG89MDtvPGE7KytvKWlmKGM9dVtvXSxoPXQobltvXSxvLG4pLGg9PW51bGx8fCEoaCs9IiIpKXtpZihzKXRocm93IG5ldyBFcnJvcigibXVsdGlwbGUgcm9vdHMiKTtzPWN9ZWxzZXtpZihsPXBbZzJ0K2hdLCFsKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIitoKTtpZihsPT09XzJ0KXRocm93IG5ldyBFcnJvcigiYW1iaWd1b3VzOiAiK2gpO2wuY2hpbGRyZW4/bC5jaGlsZHJlbi5wdXNoKGMpOmwuY2hpbGRyZW49W2NdLGMucGFyZW50PWx9aWYoIXMpdGhyb3cgbmV3IEVycm9yKCJubyByb290Iik7aWYocy5wYXJlbnQ9c01lLHMuZWFjaEJlZm9yZShmdW5jdGlvbihkKXtkLmRlcHRoPWQucGFyZW50LmRlcHRoKzEsLS1hfSkuZWFjaEJlZm9yZSgkaikscy5wYXJlbnQ9bnVsbCxhPjApdGhyb3cgbmV3IEVycm9yKCJjeWNsZSIpO3JldHVybiBzfXJldHVybiByLmlkPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPVViKG4pLHIpOmV9LHIucGFyZW50SWQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9VWIobikscik6dH0scn1mdW5jdGlvbiB1TWUoZSx0KXtyZXR1cm4gZS5wYXJlbnQ9PT10LnBhcmVudD8xOjJ9ZnVuY3Rpb24gUWooZSl7dmFyIHQ9ZS5jaGlsZHJlbjtyZXR1cm4gdD90WzBdOmUudH1mdW5jdGlvbiB0WChlKXt2YXIgdD1lLmNoaWxkcmVuO3JldHVybiB0P3RbdC5sZW5ndGgtMV06ZS50fWZ1bmN0aW9uIGhNZShlLHQscil7dmFyIG49ci8odC5pLWUuaSk7dC5jLT1uLHQucys9cixlLmMrPW4sdC56Kz1yLHQubSs9cn1mdW5jdGlvbiBmTWUoZSl7Zm9yKHZhciB0PTAscj0wLG49ZS5jaGlsZHJlbixpPW4ubGVuZ3RoLG87LS1pPj0wOylvPW5baV0sby56Kz10LG8ubSs9dCx0Kz1vLnMrKHIrPW8uYyl9ZnVuY3Rpb24gcE1lKGUsdCxyKXtyZXR1cm4gZS5hLnBhcmVudD09PXQucGFyZW50P2UuYTpyfWZ1bmN0aW9uIGk4KGUsdCl7dGhpcy5fPWUsdGhpcy5wYXJlbnQ9bnVsbCx0aGlzLmNoaWxkcmVuPW51bGwsdGhpcy5BPW51bGwsdGhpcy5hPXRoaXMsdGhpcy56PTAsdGhpcy5tPTAsdGhpcy5jPTAsdGhpcy5zPTAsdGhpcy50PW51bGwsdGhpcy5pPXR9aTgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoWm0ucHJvdG90eXBlKTtmdW5jdGlvbiBkTWUoZSl7Zm9yKHZhciB0PW5ldyBpOChlLDApLHIsbj1bdF0saSxvLGEscztyPW4ucG9wKCk7KWlmKG89ci5fLmNoaWxkcmVuKWZvcihyLmNoaWxkcmVuPW5ldyBBcnJheShzPW8ubGVuZ3RoKSxhPXMtMTthPj0wOy0tYSluLnB1c2goaT1yLmNoaWxkcmVuW2FdPW5ldyBpOChvW2FdLGEpKSxpLnBhcmVudD1yO3JldHVybih0LnBhcmVudD1uZXcgaTgobnVsbCwwKSkuY2hpbGRyZW49W3RdLHR9ZnVuY3Rpb24gdjJ0KCl7dmFyIGU9dU1lLHQ9MSxyPTEsbj1udWxsO2Z1bmN0aW9uIGkoYyl7dmFyIHU9ZE1lKGMpO2lmKHUuZWFjaEFmdGVyKG8pLHUucGFyZW50Lm09LXUueix1LmVhY2hCZWZvcmUoYSksbiljLmVhY2hCZWZvcmUobCk7ZWxzZXt2YXIgaD1jLGY9YyxwPWM7Yy5lYWNoQmVmb3JlKGZ1bmN0aW9uKHgpe3gueDxoLngmJihoPXgpLHgueD5mLngmJihmPXgpLHguZGVwdGg+cC5kZXB0aCYmKHA9eCl9KTt2YXIgZD1oPT09Zj8xOmUoaCxmKS8yLGc9ZC1oLngsXz10LyhmLngrZCtnKSx5PXIvKHAuZGVwdGh8fDEpO2MuZWFjaEJlZm9yZShmdW5jdGlvbih4KXt4Lng9KHgueCtnKSpfLHgueT14LmRlcHRoKnl9KX1yZXR1cm4gY31mdW5jdGlvbiBvKGMpe3ZhciB1PWMuY2hpbGRyZW4saD1jLnBhcmVudC5jaGlsZHJlbixmPWMuaT9oW2MuaS0xXTpudWxsO2lmKHUpe2ZNZShjKTt2YXIgcD0odVswXS56K3VbdS5sZW5ndGgtMV0ueikvMjtmPyhjLno9Zi56K2UoYy5fLGYuXyksYy5tPWMuei1wKTpjLno9cH1lbHNlIGYmJihjLno9Zi56K2UoYy5fLGYuXykpO2MucGFyZW50LkE9cyhjLGYsYy5wYXJlbnQuQXx8aFswXSl9ZnVuY3Rpb24gYShjKXtjLl8ueD1jLnorYy5wYXJlbnQubSxjLm0rPWMucGFyZW50Lm19ZnVuY3Rpb24gcyhjLHUsaCl7aWYodSl7Zm9yKHZhciBmPWMscD1jLGQ9dSxnPWYucGFyZW50LmNoaWxkcmVuWzBdLF89Zi5tLHk9cC5tLHg9ZC5tLGI9Zy5tLFM7ZD10WChkKSxmPVFqKGYpLGQmJmY7KWc9UWooZykscD10WChwKSxwLmE9YyxTPWQueit4LWYuei1fK2UoZC5fLGYuXyksUz4wJiYoaE1lKHBNZShkLGMsaCksYyxTKSxfKz1TLHkrPVMpLHgrPWQubSxfKz1mLm0sYis9Zy5tLHkrPXAubTtkJiYhdFgocCkmJihwLnQ9ZCxwLm0rPXgteSksZiYmIVFqKGcpJiYoZy50PWYsZy5tKz1fLWIsaD1jKX1yZXR1cm4gaH1mdW5jdGlvbiBsKGMpe2MueCo9dCxjLnk9Yy5kZXB0aCpyfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9YyxpKTplfSxpLnNpemU9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ITEsdD0rY1swXSxyPStjWzFdLGkpOm4/bnVsbDpbdCxyXX0saS5ub2RlU2l6ZT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMCx0PStjWzBdLHI9K2NbMV0saSk6bj9bdCxyXTpudWxsfSxpfWZ1bmN0aW9uIFFtKGUsdCxyLG4saSl7Zm9yKHZhciBvPWUuY2hpbGRyZW4sYSxzPS0xLGw9by5sZW5ndGgsYz1lLnZhbHVlJiYoaS1yKS9lLnZhbHVlOysrczxsOylhPW9bc10sYS54MD10LGEueDE9bixhLnkwPXIsYS55MT1yKz1hLnZhbHVlKmN9dmFyIGVYPSgxK01hdGguc3FydCg1KSkvMjtmdW5jdGlvbiByWChlLHQscixuLGksbyl7Zm9yKHZhciBhPVtdLHM9dC5jaGlsZHJlbixsLGMsdT0wLGg9MCxmPXMubGVuZ3RoLHAsZCxnPXQudmFsdWUsXyx5LHgsYixTLEMsUDt1PGY7KXtwPWktcixkPW8tbjtkbyBfPXNbaCsrXS52YWx1ZTt3aGlsZSghXyYmaDxmKTtmb3IoeT14PV8sQz1NYXRoLm1heChkL3AscC9kKS8oZyplKSxQPV8qXypDLFM9TWF0aC5tYXgoeC9QLFAveSk7aDxmOysraCl7aWYoXys9Yz1zW2hdLnZhbHVlLGM8eSYmKHk9YyksYz54JiYoeD1jKSxQPV8qXypDLGI9TWF0aC5tYXgoeC9QLFAveSksYj5TKXtfLT1jO2JyZWFrfVM9Yn1hLnB1c2gobD17dmFsdWU6XyxkaWNlOnA8ZCxjaGlsZHJlbjpzLnNsaWNlKHUsaCl9KSxsLmRpY2U/cWgobCxyLG4saSxnP24rPWQqXy9nOm8pOlFtKGwscixuLGc/cis9cCpfL2c6aSxvKSxnLT1fLHU9aH1yZXR1cm4gYX12YXIgbzg9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSxvLGEscyl7clgodCxuLGksbyxhLHMpfXJldHVybiByLnJhdGlvPWZ1bmN0aW9uKG4pe3JldHVybiBlKChuPStuKT4xP246MSl9LHJ9KGVYKTtmdW5jdGlvbiB4MnQoKXt2YXIgZT1vOCx0PSExLHI9MSxuPTEsaT1bMF0sbz16cCxhPXpwLHM9enAsbD16cCxjPXpwO2Z1bmN0aW9uIHUoZil7cmV0dXJuIGYueDA9Zi55MD0wLGYueDE9cixmLnkxPW4sZi5lYWNoQmVmb3JlKGgpLGk9WzBdLHQmJmYuZWFjaEJlZm9yZShuOCksZn1mdW5jdGlvbiBoKGYpe3ZhciBwPWlbZi5kZXB0aF0sZD1mLngwK3AsZz1mLnkwK3AsXz1mLngxLXAseT1mLnkxLXA7XzxkJiYoZD1fPShkK18pLzIpLHk8ZyYmKGc9eT0oZyt5KS8yKSxmLngwPWQsZi55MD1nLGYueDE9XyxmLnkxPXksZi5jaGlsZHJlbiYmKHA9aVtmLmRlcHRoKzFdPW8oZikvMixkKz1jKGYpLXAsZys9YShmKS1wLF8tPXMoZiktcCx5LT1sKGYpLXAsXzxkJiYoZD1fPShkK18pLzIpLHk8ZyYmKGc9eT0oZyt5KS8yKSxlKGYsZCxnLF8seSkpfXJldHVybiB1LnJvdW5kPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSEhZix1KTp0fSx1LnNpemU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K2ZbMF0sbj0rZlsxXSx1KTpbcixuXX0sdS50aWxlPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPVViKGYpLHUpOmV9LHUucGFkZGluZz1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD91LnBhZGRpbmdJbm5lcihmKS5wYWRkaW5nT3V0ZXIoZik6dS5wYWRkaW5nSW5uZXIoKX0sdS5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpKbSgrZiksdSk6b30sdS5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dS5wYWRkaW5nVG9wKGYpLnBhZGRpbmdSaWdodChmKS5wYWRkaW5nQm90dG9tKGYpLnBhZGRpbmdMZWZ0KGYpOnUucGFkZGluZ1RvcCgpfSx1LnBhZGRpbmdUb3A9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpKbSgrZiksdSk6YX0sdS5wYWRkaW5nUmlnaHQ9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpKbSgrZiksdSk6c30sdS5wYWRkaW5nQm90dG9tPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXR5cGVvZiBmPT0iZnVuY3Rpb24iP2Y6Sm0oK2YpLHUpOmx9LHUucGFkZGluZ0xlZnQ9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpKbSgrZiksdSk6Y30sdX1mdW5jdGlvbiBiMnQoZSx0LHIsbixpKXt2YXIgbz1lLmNoaWxkcmVuLGEscz1vLmxlbmd0aCxsLGM9bmV3IEFycmF5KHMrMSk7Zm9yKGNbMF09bD1hPTA7YTxzOysrYSljW2ErMV09bCs9b1thXS52YWx1ZTt1KDAscyxlLnZhbHVlLHQscixuLGkpO2Z1bmN0aW9uIHUoaCxmLHAsZCxnLF8seSl7aWYoaD49Zi0xKXt2YXIgeD1vW2hdO3gueDA9ZCx4LnkwPWcseC54MT1fLHgueTE9eTtyZXR1cm59Zm9yKHZhciBiPWNbaF0sUz1wLzIrYixDPWgrMSxQPWYtMTtDPFA7KXt2YXIgaz1DK1A+Pj4xO2Nba108Uz9DPWsrMTpQPWt9Uy1jW0MtMV08Y1tDXS1TJiZoKzE8QyYmLS1DO3ZhciBPPWNbQ10tYixEPXAtTztpZihfLWQ+eS1nKXt2YXIgQj0oZCpEK18qTykvcDt1KGgsQyxPLGQsZyxCLHkpLHUoQyxmLEQsQixnLF8seSl9ZWxzZXt2YXIgST0oZypEK3kqTykvcDt1KGgsQyxPLGQsZyxfLEkpLHUoQyxmLEQsZCxJLF8seSl9fX1mdW5jdGlvbiB3MnQoZSx0LHIsbixpKXsoZS5kZXB0aCYxP1FtOnFoKShlLHQscixuLGkpfXZhciBTMnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSxvLGEscyl7aWYoKGw9bi5fc3F1YXJpZnkpJiZsLnJhdGlvPT09dClmb3IodmFyIGwsYyx1LGgsZj0tMSxwLGQ9bC5sZW5ndGgsZz1uLnZhbHVlOysrZjxkOyl7Zm9yKGM9bFtmXSx1PWMuY2hpbGRyZW4saD1jLnZhbHVlPTAscD11Lmxlbmd0aDtoPHA7KytoKWMudmFsdWUrPXVbaF0udmFsdWU7Yy5kaWNlP3FoKGMsaSxvLGEsbys9KHMtbykqYy52YWx1ZS9nKTpRbShjLGksbyxpKz0oYS1pKSpjLnZhbHVlL2cscyksZy09Yy52YWx1ZX1lbHNlIG4uX3NxdWFyaWZ5PWw9clgodCxuLGksbyxhLHMpLGwucmF0aW89dH1yZXR1cm4gci5yYXRpbz1mdW5jdGlvbihuKXtyZXR1cm4gZSgobj0rbik+MT9uOjEpfSxyfShlWCk7ZnVuY3Rpb24gTTJ0KGUpe2Zvcih2YXIgdD0tMSxyPWUubGVuZ3RoLG4saT1lW3ItMV0sbz0wOysrdDxyOyluPWksaT1lW3RdLG8rPW5bMV0qaVswXS1uWzBdKmlbMV07cmV0dXJuIG8vMn1mdW5jdGlvbiBFMnQoZSl7Zm9yKHZhciB0PS0xLHI9ZS5sZW5ndGgsbj0wLGk9MCxvLGE9ZVtyLTFdLHMsbD0wOysrdDxyOylvPWEsYT1lW3RdLGwrPXM9b1swXSphWzFdLWFbMF0qb1sxXSxuKz0ob1swXSthWzBdKSpzLGkrPShvWzFdK2FbMV0pKnM7cmV0dXJuIGwqPTMsW24vbCxpL2xdfWZ1bmN0aW9uIFQydChlLHQscil7cmV0dXJuKHRbMF0tZVswXSkqKHJbMV0tZVsxXSktKHRbMV0tZVsxXSkqKHJbMF0tZVswXSl9ZnVuY3Rpb24gbU1lKGUsdCl7cmV0dXJuIGVbMF0tdFswXXx8ZVsxXS10WzFdfWZ1bmN0aW9uIEMydChlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscj1bMCwxXSxuPTIsaT0yO2k8dDsrK2kpe2Zvcig7bj4xJiZUMnQoZVtyW24tMl1dLGVbcltuLTFdXSxlW2ldKTw9MDspLS1uO3JbbisrXT1pfXJldHVybiByLnNsaWNlKDAsbil9ZnVuY3Rpb24gQTJ0KGUpe2lmKChyPWUubGVuZ3RoKTwzKXJldHVybiBudWxsO3ZhciB0LHIsbj1uZXcgQXJyYXkociksaT1uZXcgQXJyYXkocik7Zm9yKHQ9MDt0PHI7Kyt0KW5bdF09WytlW3RdWzBdLCtlW3RdWzFdLHRdO2ZvcihuLnNvcnQobU1lKSx0PTA7dDxyOysrdClpW3RdPVtuW3RdWzBdLC1uW3RdWzFdXTt2YXIgbz1DMnQobiksYT1DMnQoaSkscz1hWzBdPT09b1swXSxsPWFbYS5sZW5ndGgtMV09PT1vW28ubGVuZ3RoLTFdLGM9W107Zm9yKHQ9by5sZW5ndGgtMTt0Pj0wOy0tdCljLnB1c2goZVtuW29bdF1dWzJdXSk7Zm9yKHQ9K3M7dDxhLmxlbmd0aC1sOysrdCljLnB1c2goZVtuW2FbdF1dWzJdXSk7cmV0dXJuIGN9ZnVuY3Rpb24gUDJ0KGUsdCl7Zm9yKHZhciByPWUubGVuZ3RoLG49ZVtyLTFdLGk9dFswXSxvPXRbMV0sYT1uWzBdLHM9blsxXSxsLGMsdT0hMSxoPTA7aDxyOysraCluPWVbaF0sbD1uWzBdLGM9blsxXSxjPm8hPXM+byYmaTwoYS1sKSooby1jKS8ocy1jKStsJiYodT0hdSksYT1sLHM9YztyZXR1cm4gdX1mdW5jdGlvbiBJMnQoZSl7Zm9yKHZhciB0PS0xLHI9ZS5sZW5ndGgsbj1lW3ItMV0saSxvLGE9blswXSxzPW5bMV0sbD0wOysrdDxyOylpPWEsbz1zLG49ZVt0XSxhPW5bMF0scz1uWzFdLGktPWEsby09cyxsKz1NYXRoLnNxcnQoaSppK28qbyk7cmV0dXJuIGx9ZnVuY3Rpb24gYWMoKXtyZXR1cm4gTWF0aC5yYW5kb20oKX12YXIgTDJ0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuLGkpe3JldHVybiBuPW49PW51bGw/MDorbixpPWk9PW51bGw/MToraSxhcmd1bWVudHMubGVuZ3RoPT09MT8oaT1uLG49MCk6aS09bixmdW5jdGlvbigpe3JldHVybiB0KCkqaStufX1yZXR1cm4gci5zb3VyY2U9ZSxyfShhYyk7dmFyIGE4PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuLGkpe3ZhciBvLGE7cmV0dXJuIG49bj09bnVsbD8wOituLGk9aT09bnVsbD8xOitpLGZ1bmN0aW9uKCl7dmFyIHM7aWYobyE9bnVsbClzPW8sbz1udWxsO2Vsc2UgZG8gbz10KCkqMi0xLHM9dCgpKjItMSxhPW8qbytzKnM7d2hpbGUoIWF8fGE+MSk7cmV0dXJuIG4raSpzKk1hdGguc3FydCgtMipNYXRoLmxvZyhhKS9hKX19cmV0dXJuIHIuc291cmNlPWUscn0oYWMpO3ZhciBrMnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKCl7dmFyIG49YTguc291cmNlKHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAobigpKX19cmV0dXJuIHIuc291cmNlPWUscn0oYWMpO3ZhciBzOD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBpPTAsbz0wO288bjsrK28paSs9dCgpO3JldHVybiBpfX1yZXR1cm4gci5zb3VyY2U9ZSxyfShhYyk7dmFyIFIydD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7dmFyIGk9czguc291cmNlKHQpKG4pO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBpKCkvbn19cmV0dXJuIHIuc291cmNlPWUscn0oYWMpO3ZhciBOMnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybi1NYXRoLmxvZygxLXQoKSkvbn19cmV0dXJuIHIuc291cmNlPWUscn0oYWMpO2Z1bmN0aW9uIGhpKGUsdCl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpicmVhaztjYXNlIDE6dGhpcy5yYW5nZShlKTticmVhaztkZWZhdWx0OnRoaXMucmFuZ2UodCkuZG9tYWluKGUpO2JyZWFrfXJldHVybiB0aGlzfWZ1bmN0aW9uIHNjKGUsdCl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpicmVhaztjYXNlIDE6dGhpcy5pbnRlcnBvbGF0b3IoZSk7YnJlYWs7ZGVmYXVsdDp0aGlzLmludGVycG9sYXRvcih0KS5kb21haW4oZSk7YnJlYWt9cmV0dXJuIHRoaXN9VGIoKTt2YXIgRDJ0PUFycmF5LnByb3RvdHlwZSwkXz1EMnQubWFwLGxjPUQydC5zbGljZTt2YXIgbDg9e25hbWU6ImltcGxpY2l0In07ZnVuY3Rpb24gZ3UoKXt2YXIgZT1KaSgpLHQ9W10scj1bXSxuPWw4O2Z1bmN0aW9uIGkobyl7dmFyIGE9bysiIixzPWUuZ2V0KGEpO2lmKCFzKXtpZihuIT09bDgpcmV0dXJuIG47ZS5zZXQoYSxzPXQucHVzaChvKSl9cmV0dXJuIHJbKHMtMSklci5sZW5ndGhdfXJldHVybiBpLmRvbWFpbj1mdW5jdGlvbihvKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdC5zbGljZSgpO3Q9W10sZT1KaSgpO2Zvcih2YXIgYT0tMSxzPW8ubGVuZ3RoLGwsYzsrK2E8czspZS5oYXMoYz0obD1vW2FdKSsiIil8fGUuc2V0KGMsdC5wdXNoKGwpKTtyZXR1cm4gaX0saS5yYW5nZT1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1sYy5jYWxsKG8pLGkpOnIuc2xpY2UoKX0saS51bmtub3duPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW8saSk6bn0saS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGd1KHQscikudW5rbm93bihuKX0saGkuYXBwbHkoaSxhcmd1bWVudHMpLGl9ZnVuY3Rpb24gdGcoKXt2YXIgZT1ndSgpLnVua25vd24odm9pZCAwKSx0PWUuZG9tYWluLHI9ZS5yYW5nZSxuPVswLDFdLGksbyxhPSExLHM9MCxsPTAsYz0uNTtkZWxldGUgZS51bmtub3duO2Z1bmN0aW9uIHUoKXt2YXIgaD10KCkubGVuZ3RoLGY9blsxXTxuWzBdLHA9bltmLTBdLGQ9blsxLWZdO2k9KGQtcCkvTWF0aC5tYXgoMSxoLXMrbCoyKSxhJiYoaT1NYXRoLmZsb29yKGkpKSxwKz0oZC1wLWkqKGgtcykpKmMsbz1pKigxLXMpLGEmJihwPU1hdGgucm91bmQocCksbz1NYXRoLnJvdW5kKG8pKTt2YXIgZz1JcihoKS5tYXAoZnVuY3Rpb24oXyl7cmV0dXJuIHAraSpffSk7cmV0dXJuIHIoZj9nLnJldmVyc2UoKTpnKX1yZXR1cm4gZS5kb21haW49ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQoaCksdSgpKTp0KCl9LGUucmFuZ2U9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49WytoWzBdLCtoWzFdXSx1KCkpOm4uc2xpY2UoKX0sZS5yYW5nZVJvdW5kPWZ1bmN0aW9uKGgpe3JldHVybiBuPVsraFswXSwraFsxXV0sYT0hMCx1KCl9LGUuYmFuZHdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIG99LGUuc3RlcD1mdW5jdGlvbigpe3JldHVybiBpfSxlLnJvdW5kPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSEhaCx1KCkpOmF9LGUucGFkZGluZz1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1NYXRoLm1pbigxLGw9K2gpLHUoKSk6c30sZS5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9TWF0aC5taW4oMSxoKSx1KCkpOnN9LGUucGFkZGluZ091dGVyPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPStoLHUoKSk6bH0sZS5hbGlnbj1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1NYXRoLm1heCgwLE1hdGgubWluKDEsaCkpLHUoKSk6Y30sZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHRnKHQoKSxuKS5yb3VuZChhKS5wYWRkaW5nSW5uZXIocykucGFkZGluZ091dGVyKGwpLmFsaWduKGMpfSxoaS5hcHBseSh1KCksYXJndW1lbnRzKX1mdW5jdGlvbiBPMnQoZSl7dmFyIHQ9ZS5jb3B5O3JldHVybiBlLnBhZGRpbmc9ZS5wYWRkaW5nT3V0ZXIsZGVsZXRlIGUucGFkZGluZ0lubmVyLGRlbGV0ZSBlLnBhZGRpbmdPdXRlcixlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gTzJ0KHQoKSl9LGV9ZnVuY3Rpb24gZWcoKXtyZXR1cm4gTzJ0KHRnLmFwcGx5KG51bGwsYXJndW1lbnRzKS5wYWRkaW5nSW5uZXIoMSkpfWZ1bmN0aW9uIHoydChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19ZnVuY3Rpb24gbTUoZSl7cmV0dXJuK2V9dmFyIEYydD1bMCwxXTtmdW5jdGlvbiBuaShlKXtyZXR1cm4gZX1mdW5jdGlvbiBuWChlLHQpe3JldHVybih0LT1lPStlKT9mdW5jdGlvbihyKXtyZXR1cm4oci1lKS90fTp6MnQoaXNOYU4odCk/TmFOOi41KX1mdW5jdGlvbiBCMnQoZSl7dmFyIHQ9ZVswXSxyPWVbZS5sZW5ndGgtMV0sbjtyZXR1cm4gdD5yJiYobj10LHQ9cixyPW4pLGZ1bmN0aW9uKGkpe3JldHVybiBNYXRoLm1heCh0LE1hdGgubWluKHIsaSkpfX1mdW5jdGlvbiBnTWUoZSx0LHIpe3ZhciBuPWVbMF0saT1lWzFdLG89dFswXSxhPXRbMV07cmV0dXJuIGk8bj8obj1uWChpLG4pLG89cihhLG8pKToobj1uWChuLGkpLG89cihvLGEpKSxmdW5jdGlvbihzKXtyZXR1cm4gbyhuKHMpKX19ZnVuY3Rpb24gX01lKGUsdCxyKXt2YXIgbj1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCktMSxpPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShuKSxhPS0xO2ZvcihlW25dPGVbMF0mJihlPWUuc2xpY2UoKS5yZXZlcnNlKCksdD10LnNsaWNlKCkucmV2ZXJzZSgpKTsrK2E8bjspaVthXT1uWChlW2FdLGVbYSsxXSksb1thXT1yKHRbYV0sdFthKzFdKTtyZXR1cm4gZnVuY3Rpb24ocyl7dmFyIGw9dnMoZSxzLDEsbiktMTtyZXR1cm4gb1tsXShpW2xdKHMpKX19ZnVuY3Rpb24gR2goZSx0KXtyZXR1cm4gdC5kb21haW4oZS5kb21haW4oKSkucmFuZ2UoZS5yYW5nZSgpKS5pbnRlcnBvbGF0ZShlLmludGVycG9sYXRlKCkpLmNsYW1wKGUuY2xhbXAoKSkudW5rbm93bihlLnVua25vd24oKSl9ZnVuY3Rpb24gS18oKXt2YXIgZT1GMnQsdD1GMnQscj1uYyxuLGksbyxhPW5pLHMsbCxjO2Z1bmN0aW9uIHUoKXtyZXR1cm4gcz1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCk+Mj9fTWU6Z01lLGw9Yz1udWxsLGh9ZnVuY3Rpb24gaChmKXtyZXR1cm4gaXNOYU4oZj0rZik/bzoobHx8KGw9cyhlLm1hcChuKSx0LHIpKSkobihhKGYpKSl9cmV0dXJuIGguaW52ZXJ0PWZ1bmN0aW9uKGYpe3JldHVybiBhKGkoKGN8fChjPXModCxlLm1hcChuKSx6aSkpKShmKSkpfSxoLmRvbWFpbj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0kXy5jYWxsKGYsbTUpLGE9PT1uaXx8KGE9QjJ0KGUpKSx1KCkpOmUuc2xpY2UoKX0saC5yYW5nZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1sYy5jYWxsKGYpLHUoKSk6dC5zbGljZSgpfSxoLnJhbmdlUm91bmQ9ZnVuY3Rpb24oZil7cmV0dXJuIHQ9bGMuY2FsbChmKSxyPWRMLHUoKX0saC5jbGFtcD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1mP0IydChlKTpuaSxoKTphIT09bml9LGguaW50ZXJwb2xhdGU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9Zix1KCkpOnJ9LGgudW5rbm93bj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1mLGgpOm99LGZ1bmN0aW9uKGYscCl7cmV0dXJuIG49ZixpPXAsdSgpfX1mdW5jdGlvbiBnNShlLHQpe3JldHVybiBLXygpKGUsdCl9ZnVuY3Rpb24gYzgoZSx0LHIsbil7dmFyIGk9ZWwoZSx0LHIpLG87c3dpdGNoKG49a3Aobj09bnVsbD8iLGYiOm4pLG4udHlwZSl7Y2FzZSJzIjp7dmFyIGE9TWF0aC5tYXgoTWF0aC5hYnMoZSksTWF0aC5hYnModCkpO3JldHVybiBuLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKG89b2soaSxhKSkmJihuLnByZWNpc2lvbj1vKSxXRShuLGEpfWNhc2UiIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJwIjpjYXNlInIiOntuLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKG89YWsoaSxNYXRoLm1heChNYXRoLmFicyhlKSxNYXRoLmFicyh0KSkpKSYmKG4ucHJlY2lzaW9uPW8tKG4udHlwZT09PSJlIikpO2JyZWFrfWNhc2UiZiI6Y2FzZSIlIjp7bi5wcmVjaXNpb249PW51bGwmJiFpc05hTihvPWlrKGkpKSYmKG4ucHJlY2lzaW9uPW8tKG4udHlwZT09PSIlIikqMik7YnJlYWt9fXJldHVybiB4bihuKX1mdW5jdGlvbiBvbChlKXt2YXIgdD1lLmRvbWFpbjtyZXR1cm4gZS50aWNrcz1mdW5jdGlvbihyKXt2YXIgbj10KCk7cmV0dXJuIGFiKG5bMF0sbltuLmxlbmd0aC0xXSxyPT1udWxsPzEwOnIpfSxlLnRpY2tGb3JtYXQ9ZnVuY3Rpb24ocixuKXt2YXIgaT10KCk7cmV0dXJuIGM4KGlbMF0saVtpLmxlbmd0aC0xXSxyPT1udWxsPzEwOnIsbil9LGUubmljZT1mdW5jdGlvbihyKXtyPT1udWxsJiYocj0xMCk7dmFyIG49dCgpLGk9MCxvPW4ubGVuZ3RoLTEsYT1uW2ldLHM9bltvXSxsO3JldHVybiBzPGEmJihsPWEsYT1zLHM9bCxsPWksaT1vLG89bCksbD1iXyhhLHMsciksbD4wPyhhPU1hdGguZmxvb3IoYS9sKSpsLHM9TWF0aC5jZWlsKHMvbCkqbCxsPWJfKGEscyxyKSk6bDwwJiYoYT1NYXRoLmNlaWwoYSpsKS9sLHM9TWF0aC5mbG9vcihzKmwpL2wsbD1iXyhhLHMscikpLGw+MD8obltpXT1NYXRoLmZsb29yKGEvbCkqbCxuW29dPU1hdGguY2VpbChzL2wpKmwsdChuKSk6bDwwJiYobltpXT1NYXRoLmNlaWwoYSpsKS9sLG5bb109TWF0aC5mbG9vcihzKmwpL2wsdChuKSksZX0sZX1mdW5jdGlvbiB6bigpe3ZhciBlPWc1KG5pLG5pKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEdoKGUsem4oKSl9LGhpLmFwcGx5KGUsYXJndW1lbnRzKSxvbChlKX1mdW5jdGlvbiB1OChlKXt2YXIgdDtmdW5jdGlvbiByKG4pe3JldHVybiBpc05hTihuPStuKT90Om59cmV0dXJuIHIuaW52ZXJ0PXIsci5kb21haW49ci5yYW5nZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0kXy5jYWxsKG4sbTUpLHIpOmUuc2xpY2UoKX0sci51bmtub3duPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4scik6dH0sci5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHU4KGUpLnVua25vd24odCl9LGU9YXJndW1lbnRzLmxlbmd0aD8kXy5jYWxsKGUsbTUpOlswLDFdLG9sKHIpfWZ1bmN0aW9uIGg4KGUsdCl7ZT1lLnNsaWNlKCk7dmFyIHI9MCxuPWUubGVuZ3RoLTEsaT1lW3JdLG89ZVtuXSxhO3JldHVybiBvPGkmJihhPXIscj1uLG49YSxhPWksaT1vLG89YSksZVtyXT10LmZsb29yKGkpLGVbbl09dC5jZWlsKG8pLGV9ZnVuY3Rpb24gSDJ0KGUpe3JldHVybiBNYXRoLmxvZyhlKX1mdW5jdGlvbiBWMnQoZSl7cmV0dXJuIE1hdGguZXhwKGUpfWZ1bmN0aW9uIHlNZShlKXtyZXR1cm4tTWF0aC5sb2coLWUpfWZ1bmN0aW9uIHZNZShlKXtyZXR1cm4tTWF0aC5leHAoLWUpfWZ1bmN0aW9uIHhNZShlKXtyZXR1cm4gaXNGaW5pdGUoZSk/KygiMWUiK2UpOmU8MD8wOmV9ZnVuY3Rpb24gYk1lKGUpe3JldHVybiBlPT09MTA/eE1lOmU9PT1NYXRoLkU/TWF0aC5leHA6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucG93KGUsdCl9fWZ1bmN0aW9uIHdNZShlKXtyZXR1cm4gZT09PU1hdGguRT9NYXRoLmxvZzplPT09MTAmJk1hdGgubG9nMTB8fGU9PT0yJiZNYXRoLmxvZzJ8fChlPU1hdGgubG9nKGUpLGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KS9lfSl9ZnVuY3Rpb24gVTJ0KGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4tZSgtdCl9fWZ1bmN0aW9uIF81KGUpe3ZhciB0PWUoSDJ0LFYydCkscj10LmRvbWFpbixuPTEwLGksbztmdW5jdGlvbiBhKCl7cmV0dXJuIGk9d01lKG4pLG89Yk1lKG4pLHIoKVswXTwwPyhpPVUydChpKSxvPVUydChvKSxlKHlNZSx2TWUpKTplKEgydCxWMnQpLHR9cmV0dXJuIHQuYmFzZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rcyxhKCkpOm59LHQuZG9tYWluPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyKHMpLGEoKSk6cigpfSx0LnRpY2tzPWZ1bmN0aW9uKHMpe3ZhciBsPXIoKSxjPWxbMF0sdT1sW2wubGVuZ3RoLTFdLGg7KGg9dTxjKSYmKGY9YyxjPXUsdT1mKTt2YXIgZj1pKGMpLHA9aSh1KSxkLGcsXyx5PXM9PW51bGw/MTA6K3MseD1bXTtpZighKG4lMSkmJnAtZjx5KXtpZihmPU1hdGgucm91bmQoZiktMSxwPU1hdGgucm91bmQocCkrMSxjPjApe2Zvcig7ZjxwOysrZilmb3IoZz0xLGQ9byhmKTtnPG47KytnKWlmKF89ZCpnLCEoXzxjKSl7aWYoXz51KWJyZWFrO3gucHVzaChfKX19ZWxzZSBmb3IoO2Y8cDsrK2YpZm9yKGc9bi0xLGQ9byhmKTtnPj0xOy0tZylpZihfPWQqZywhKF88Yykpe2lmKF8+dSlicmVhazt4LnB1c2goXyl9fWVsc2UgeD1hYihmLHAsTWF0aC5taW4ocC1mLHkpKS5tYXAobyk7cmV0dXJuIGg/eC5yZXZlcnNlKCk6eH0sdC50aWNrRm9ybWF0PWZ1bmN0aW9uKHMsbCl7aWYobD09bnVsbCYmKGw9bj09PTEwPyIuMGUiOiIsIiksdHlwZW9mIGwhPSJmdW5jdGlvbiImJihsPXhuKGwpKSxzPT09MS8wKXJldHVybiBsO3M9PW51bGwmJihzPTEwKTt2YXIgYz1NYXRoLm1heCgxLG4qcy90LnRpY2tzKCkubGVuZ3RoKTtyZXR1cm4gZnVuY3Rpb24odSl7dmFyIGg9dS9vKE1hdGgucm91bmQoaSh1KSkpO3JldHVybiBoKm48bi0uNSYmKGgqPW4pLGg8PWM/bCh1KToiIn19LHQubmljZT1mdW5jdGlvbigpe3JldHVybiByKGg4KHIoKSx7Zmxvb3I6ZnVuY3Rpb24ocyl7cmV0dXJuIG8oTWF0aC5mbG9vcihpKHMpKSl9LGNlaWw6ZnVuY3Rpb24ocyl7cmV0dXJuIG8oTWF0aC5jZWlsKGkocykpKX19KSl9LHR9ZnVuY3Rpb24gY2MoKXt2YXIgZT1fNShLXygpKS5kb21haW4oWzEsMTBdKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEdoKGUsY2MoKSkuYmFzZShlLmJhc2UoKSl9LGhpLmFwcGx5KGUsYXJndW1lbnRzKSxlfWZ1bmN0aW9uIHEydChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc2lnbih0KSpNYXRoLmxvZzFwKE1hdGguYWJzKHQvZSkpfX1mdW5jdGlvbiBHMnQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNpZ24odCkqTWF0aC5leHBtMShNYXRoLmFicyh0KSkqZX19ZnVuY3Rpb24geTUoZSl7dmFyIHQ9MSxyPWUocTJ0KHQpLEcydCh0KSk7cmV0dXJuIHIuY29uc3RhbnQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZShxMnQodD0rbiksRzJ0KHQpKTp0fSxvbChyKX1mdW5jdGlvbiBmOCgpe3ZhciBlPXk1KEtfKCkpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gR2goZSxmOCgpKS5jb25zdGFudChlLmNvbnN0YW50KCkpfSxoaS5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gVzJ0KGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdDwwPy1NYXRoLnBvdygtdCxlKTpNYXRoLnBvdyh0LGUpfX1mdW5jdGlvbiBTTWUoZSl7cmV0dXJuIGU8MD8tTWF0aC5zcXJ0KC1lKTpNYXRoLnNxcnQoZSl9ZnVuY3Rpb24gTU1lKGUpe3JldHVybiBlPDA/LWUqZTplKmV9ZnVuY3Rpb24gdjUoZSl7dmFyIHQ9ZShuaSxuaSkscj0xO2Z1bmN0aW9uIG4oKXtyZXR1cm4gcj09PTE/ZShuaSxuaSk6cj09PS41P2UoU01lLE1NZSk6ZShXMnQociksVzJ0KDEvcikpfXJldHVybiB0LmV4cG9uZW50PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPStpLG4oKSk6cn0sb2wodCl9ZnVuY3Rpb24gWl8oKXt2YXIgZT12NShLXygpKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEdoKGUsWl8oKSkuZXhwb25lbnQoZS5leHBvbmVudCgpKX0saGkuYXBwbHkoZSxhcmd1bWVudHMpLGV9ZnVuY3Rpb24gWTJ0KCl7cmV0dXJuIFpfLmFwcGx5KG51bGwsYXJndW1lbnRzKS5leHBvbmVudCguNSl9ZnVuY3Rpb24gcmcoKXt2YXIgZT1bXSx0PVtdLHI9W10sbjtmdW5jdGlvbiBpKCl7dmFyIGE9MCxzPU1hdGgubWF4KDEsdC5sZW5ndGgpO2ZvcihyPW5ldyBBcnJheShzLTEpOysrYTxzOylyW2EtMV09bGEoZSxhL3MpO3JldHVybiBvfWZ1bmN0aW9uIG8oYSl7cmV0dXJuIGlzTmFOKGE9K2EpP246dFt2cyhyLGEpXX1yZXR1cm4gby5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24oYSl7dmFyIHM9dC5pbmRleE9mKGEpO3JldHVybiBzPDA/W05hTixOYU5dOltzPjA/cltzLTFdOmVbMF0sczxyLmxlbmd0aD9yW3NdOmVbZS5sZW5ndGgtMV1dfSxvLmRvbWFpbj1mdW5jdGlvbihhKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZS5zbGljZSgpO2U9W107Zm9yKHZhciBzPTAsbD1hLmxlbmd0aCxjO3M8bDsrK3MpYz1hW3NdLGMhPW51bGwmJiFpc05hTihjPStjKSYmZS5wdXNoKGMpO3JldHVybiBlLnNvcnQoYWEpLGkoKX0sby5yYW5nZT1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1sYy5jYWxsKGEpLGkoKSk6dC5zbGljZSgpfSxvLnVua25vd249ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49YSxvKTpufSxvLnF1YW50aWxlcz1mdW5jdGlvbigpe3JldHVybiByLnNsaWNlKCl9LG8uY29weT1mdW5jdGlvbigpe3JldHVybiByZygpLmRvbWFpbihlKS5yYW5nZSh0KS51bmtub3duKG4pfSxoaS5hcHBseShvLGFyZ3VtZW50cyl9ZnVuY3Rpb24gcWIoKXt2YXIgZT0wLHQ9MSxyPTEsbj1bLjVdLGk9WzAsMV0sbztmdW5jdGlvbiBhKGwpe3JldHVybiBsPD1sP2lbdnMobixsLDAscildOm99ZnVuY3Rpb24gcygpe3ZhciBsPS0xO2ZvcihuPW5ldyBBcnJheShyKTsrK2w8cjspbltsXT0oKGwrMSkqdC0obC1yKSplKS8ocisxKTtyZXR1cm4gYX1yZXR1cm4gYS5kb21haW49ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K2xbMF0sdD0rbFsxXSxzKCkpOltlLHRdfSxhLnJhbmdlPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPShpPWxjLmNhbGwobCkpLmxlbmd0aC0xLHMoKSk6aS5zbGljZSgpfSxhLmludmVydEV4dGVudD1mdW5jdGlvbihsKXt2YXIgYz1pLmluZGV4T2YobCk7cmV0dXJuIGM8MD9bTmFOLE5hTl06YzwxP1tlLG5bMF1dOmM+PXI/W25bci0xXSx0XTpbbltjLTFdLG5bY11dfSxhLnVua25vd249ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGgmJihvPWwpLGF9LGEudGhyZXNob2xkcz1mdW5jdGlvbigpe3JldHVybiBuLnNsaWNlKCl9LGEuY29weT1mdW5jdGlvbigpe3JldHVybiBxYigpLmRvbWFpbihbZSx0XSkucmFuZ2UoaSkudW5rbm93bihvKX0saGkuYXBwbHkob2woYSksYXJndW1lbnRzKX1mdW5jdGlvbiBwOCgpe3ZhciBlPVsuNV0sdD1bMCwxXSxyLG49MTtmdW5jdGlvbiBpKG8pe3JldHVybiBvPD1vP3RbdnMoZSxvLDAsbildOnJ9cmV0dXJuIGkuZG9tYWluPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWxjLmNhbGwobyksbj1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aC0xKSxpKTplLnNsaWNlKCl9LGkucmFuZ2U9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bGMuY2FsbChvKSxuPU1hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoLTEpLGkpOnQuc2xpY2UoKX0saS5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24obyl7dmFyIGE9dC5pbmRleE9mKG8pO3JldHVybltlW2EtMV0sZVthXV19LGkudW5rbm93bj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1vLGkpOnJ9LGkuY29weT1mdW5jdGlvbigpe3JldHVybiBwOCgpLmRvbWFpbihlKS5yYW5nZSh0KS51bmtub3duKHIpfSxoaS5hcHBseShpLGFyZ3VtZW50cyl9dmFyIGlYPW5ldyBEYXRlLG9YPW5ldyBEYXRlO2Z1bmN0aW9uIGJyKGUsdCxyLG4pe2Z1bmN0aW9uIGkobyl7cmV0dXJuIGUobz1hcmd1bWVudHMubGVuZ3RoPT09MD9uZXcgRGF0ZTpuZXcgRGF0ZSgrbykpLG99cmV0dXJuIGkuZmxvb3I9ZnVuY3Rpb24obyl7cmV0dXJuIGUobz1uZXcgRGF0ZSgrbykpLG99LGkuY2VpbD1mdW5jdGlvbihvKXtyZXR1cm4gZShvPW5ldyBEYXRlKG8tMSkpLHQobywxKSxlKG8pLG99LGkucm91bmQ9ZnVuY3Rpb24obyl7dmFyIGE9aShvKSxzPWkuY2VpbChvKTtyZXR1cm4gby1hPHMtbz9hOnN9LGkub2Zmc2V0PWZ1bmN0aW9uKG8sYSl7cmV0dXJuIHQobz1uZXcgRGF0ZSgrbyksYT09bnVsbD8xOk1hdGguZmxvb3IoYSkpLG99LGkucmFuZ2U9ZnVuY3Rpb24obyxhLHMpe3ZhciBsPVtdLGM7aWYobz1pLmNlaWwobykscz1zPT1udWxsPzE6TWF0aC5mbG9vcihzKSwhKG88YSl8fCEocz4wKSlyZXR1cm4gbDtkbyBsLnB1c2goYz1uZXcgRGF0ZSgrbykpLHQobyxzKSxlKG8pO3doaWxlKGM8byYmbzxhKTtyZXR1cm4gbH0saS5maWx0ZXI9ZnVuY3Rpb24obyl7cmV0dXJuIGJyKGZ1bmN0aW9uKGEpe2lmKGE+PWEpZm9yKDtlKGEpLCFvKGEpOylhLnNldFRpbWUoYS0xKX0sZnVuY3Rpb24oYSxzKXtpZihhPj1hKWlmKHM8MClmb3IoOysrczw9MDspZm9yKDt0KGEsLTEpLCFvKGEpOyk7ZWxzZSBmb3IoOy0tcz49MDspZm9yKDt0KGEsMSksIW8oYSk7KTt9KX0sciYmKGkuY291bnQ9ZnVuY3Rpb24obyxhKXtyZXR1cm4gaVguc2V0VGltZSgrbyksb1guc2V0VGltZSgrYSksZShpWCksZShvWCksTWF0aC5mbG9vcihyKGlYLG9YKSl9LGkuZXZlcnk9ZnVuY3Rpb24obyl7cmV0dXJuIG89TWF0aC5mbG9vcihvKSwhaXNGaW5pdGUobyl8fCEobz4wKT9udWxsOm8+MT9pLmZpbHRlcihuP2Z1bmN0aW9uKGEpe3JldHVybiBuKGEpJW89PT0wfTpmdW5jdGlvbihhKXtyZXR1cm4gaS5jb3VudCgwLGEpJW89PT0wfSk6aX0pLGl9dmFyIGQ4PWJyKGZ1bmN0aW9uKCl7fSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC1lfSk7ZDguZXZlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9TWF0aC5mbG9vcihlKSwhaXNGaW5pdGUoZSl8fCEoZT4wKT9udWxsOmU+MT9icihmdW5jdGlvbih0KXt0LnNldFRpbWUoTWF0aC5mbG9vcih0L2UpKmUpfSxmdW5jdGlvbih0LHIpe3Quc2V0VGltZSgrdCtyKmUpfSxmdW5jdGlvbih0LHIpe3JldHVybihyLXQpL2V9KTpkOH07dmFyIEpfPWQ4LGFYPWQ4LnJhbmdlO3ZhciBRXz0xZTMsdWM9NmU0LEdiPTM2ZTUsbTg9ODY0ZTUsZzg9NjA0OGU1O3ZhciBqMnQ9YnIoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKGUtZS5nZXRNaWxsaXNlY29uZHMoKSl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QqUV8pfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL1FffSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENTZWNvbmRzKCl9KSx0eT1qMnQsc1g9ajJ0LnJhbmdlO3ZhciBYMnQ9YnIoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKGUtZS5nZXRNaWxsaXNlY29uZHMoKS1lLmdldFNlY29uZHMoKSpRXyl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QqdWMpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL3VjfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRNaW51dGVzKCl9KSxfOD1YMnQsJDJ0PVgydC5yYW5nZTt2YXIgSzJ0PWJyKGZ1bmN0aW9uKGUpe2Uuc2V0VGltZShlLWUuZ2V0TWlsbGlzZWNvbmRzKCktZS5nZXRTZWNvbmRzKCkqUV8tZS5nZXRNaW51dGVzKCkqdWMpfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KkdiKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9HYn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0SG91cnMoKX0pLHk4PUsydCxaMnQ9SzJ0LnJhbmdlO3ZhciBKMnQ9YnIoZnVuY3Rpb24oZSl7ZS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldERhdGUoZS5nZXREYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZS0odC5nZXRUaW1lem9uZU9mZnNldCgpLWUuZ2V0VGltZXpvbmVPZmZzZXQoKSkqdWMpL204fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXREYXRlKCktMX0pLGV5PUoydCxRMnQ9SjJ0LnJhbmdlO2Z1bmN0aW9uIHJ5KGUpe3JldHVybiBicihmdW5jdGlvbih0KXt0LnNldERhdGUodC5nZXREYXRlKCktKHQuZ2V0RGF5KCkrNy1lKSU3KSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0RGF0ZSh0LmdldERhdGUoKStyKjcpfSxmdW5jdGlvbih0LHIpe3JldHVybihyLXQtKHIuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKnVjKS9nOH0pfXZhciBuZz1yeSgwKSxueT1yeSgxKSxsWD1yeSgyKSxjWD1yeSgzKSxGcD1yeSg0KSx1WD1yeSg1KSxoWD1yeSg2KSxmWD1uZy5yYW5nZSx0d3Q9bnkucmFuZ2UsZXd0PWxYLnJhbmdlLHJ3dD1jWC5yYW5nZSxud3Q9RnAucmFuZ2UsaXd0PXVYLnJhbmdlLG93dD1oWC5yYW5nZTt2YXIgYXd0PWJyKGZ1bmN0aW9uKGUpe2Uuc2V0RGF0ZSgxKSxlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0TW9udGgoZS5nZXRNb250aCgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldE1vbnRoKCktZS5nZXRNb250aCgpKyh0LmdldEZ1bGxZZWFyKCktZS5nZXRGdWxsWWVhcigpKSoxMn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0TW9udGgoKX0pLHY4PWF3dCxzd3Q9YXd0LnJhbmdlO3ZhciBwWD1icihmdW5jdGlvbihlKXtlLnNldE1vbnRoKDAsMSksZS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldEZ1bGxZZWFyKGUuZ2V0RnVsbFllYXIoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpLWUuZ2V0RnVsbFllYXIoKX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0RnVsbFllYXIoKX0pO3BYLmV2ZXJ5PWZ1bmN0aW9uKGUpe3JldHVybiFpc0Zpbml0ZShlPU1hdGguZmxvb3IoZSkpfHwhKGU+MCk/bnVsbDpicihmdW5jdGlvbih0KXt0LnNldEZ1bGxZZWFyKE1hdGguZmxvb3IodC5nZXRGdWxsWWVhcigpL2UpKmUpLHQuc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpK3IqZSl9KX07dmFyIFdoPXBYLGx3dD1wWC5yYW5nZTt2YXIgY3d0PWJyKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDU2Vjb25kcygwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KnVjKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS91Y30sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDTWludXRlcygpfSkseDg9Y3d0LHV3dD1jd3QucmFuZ2U7dmFyIGh3dD1icihmdW5jdGlvbihlKXtlLnNldFVUQ01pbnV0ZXMoMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KkdiKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9HYn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDSG91cnMoKX0pLGI4PWh3dCxmd3Q9aHd0LnJhbmdlO3ZhciBwd3Q9YnIoZnVuY3Rpb24oZSl7ZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvbTh9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0RhdGUoKS0xfSksaXk9cHd0LGR3dD1wd3QucmFuZ2U7ZnVuY3Rpb24gb3koZSl7cmV0dXJuIGJyKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKS0odC5nZXRVVENEYXkoKSs3LWUpJTcpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK3IqNyl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdCkvZzh9KX12YXIgaWc9b3koMCksYXk9b3koMSksZFg9b3koMiksbVg9b3koMyksQnA9b3koNCksZ1g9b3koNSksX1g9b3koNikseVg9aWcucmFuZ2UsbXd0PWF5LnJhbmdlLGd3dD1kWC5yYW5nZSxfd3Q9bVgucmFuZ2UseXd0PUJwLnJhbmdlLHZ3dD1nWC5yYW5nZSx4d3Q9X1gucmFuZ2U7dmFyIGJ3dD1icihmdW5jdGlvbihlKXtlLnNldFVUQ0RhdGUoMSksZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ01vbnRoKGUuZ2V0VVRDTW9udGgoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5nZXRVVENNb250aCgpLWUuZ2V0VVRDTW9udGgoKSsodC5nZXRVVENGdWxsWWVhcigpLWUuZ2V0VVRDRnVsbFllYXIoKSkqMTJ9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ01vbnRoKCl9KSx3OD1id3Qsd3d0PWJ3dC5yYW5nZTt2YXIgdlg9YnIoZnVuY3Rpb24oZSl7ZS5zZXRVVENNb250aCgwLDEpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRVVENGdWxsWWVhcihlLmdldFVUQ0Z1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZ2V0VVRDRnVsbFllYXIoKS1lLmdldFVUQ0Z1bGxZZWFyKCl9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0Z1bGxZZWFyKCl9KTt2WC5ldmVyeT1mdW5jdGlvbihlKXtyZXR1cm4haXNGaW5pdGUoZT1NYXRoLmZsb29yKGUpKXx8IShlPjApP251bGw6YnIoZnVuY3Rpb24odCl7dC5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKHQuZ2V0VVRDRnVsbFllYXIoKS9lKSplKSx0LnNldFVUQ01vbnRoKDAsMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxyKXt0LnNldFVUQ0Z1bGxZZWFyKHQuZ2V0VVRDRnVsbFllYXIoKStyKmUpfSl9O3ZhciBZaD12WCxTd3Q9dlgucmFuZ2U7ZnVuY3Rpb24geFgoZSl7aWYoMDw9ZS55JiZlLnk8MTAwKXt2YXIgdD1uZXcgRGF0ZSgtMSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCk7cmV0dXJuIHQuc2V0RnVsbFllYXIoZS55KSx0fXJldHVybiBuZXcgRGF0ZShlLnksZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpfWZ1bmN0aW9uIGJYKGUpe2lmKDA8PWUueSYmZS55PDEwMCl7dmFyIHQ9bmV3IERhdGUoRGF0ZS5VVEMoLTEsZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpKTtyZXR1cm4gdC5zZXRVVENGdWxsWWVhcihlLnkpLHR9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKGUueSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCkpfWZ1bmN0aW9uIHg1KGUsdCxyKXtyZXR1cm57eTplLG06dCxkOnIsSDowLE06MCxTOjAsTDowfX1mdW5jdGlvbiBTNShlKXt2YXIgdD1lLmRhdGVUaW1lLHI9ZS5kYXRlLG49ZS50aW1lLGk9ZS5wZXJpb2RzLG89ZS5kYXlzLGE9ZS5zaG9ydERheXMscz1lLm1vbnRocyxsPWUuc2hvcnRNb250aHMsYz1iNShpKSx1PXc1KGkpLGg9YjUobyksZj13NShvKSxwPWI1KGEpLGQ9dzUoYSksZz1iNShzKSxfPXc1KHMpLHk9YjUobCkseD13NShsKSxiPXthOlcsQTpaLGI6cnQsQjpvdCxjOm51bGwsZDpQd3QsZTpQd3QsZjpqTWUsZzpuRWUsRzpvRWUsSDpHTWUsSTpXTWUsajpZTWUsTDpOd3QsbTpYTWUsTTokTWUscDpzdCxxOlN0LFE6a3d0LHM6Und0LFM6S01lLHU6Wk1lLFU6Sk1lLFY6UU1lLHc6dEVlLFc6ZUVlLHg6bnVsbCxYOm51bGwseTpyRWUsWTppRWUsWjphRWUsIiUiOkx3dH0sUz17YTpidCxBOk10LGI6bHQsQjpLdCxjOm51bGwsZDpJd3QsZTpJd3QsZjp1RWUsZzp4RWUsRzp3RWUsSDpzRWUsSTpsRWUsajpjRWUsTDpPd3QsbTpoRWUsTTpmRWUscDpfdCxxOmN0LFE6a3d0LHM6Und0LFM6cEVlLHU6ZEVlLFU6bUVlLFY6Z0VlLHc6X0VlLFc6eUVlLHg6bnVsbCxYOm51bGwseTp2RWUsWTpiRWUsWjpTRWUsIiUiOkx3dH0sQz17YTpCLEE6SSxiOkwsQjpSLGM6RixkOkN3dCxlOkN3dCxmOkhNZSxnOlR3dCxHOkV3dCxIOkF3dCxJOkF3dCxqOk9NZSxMOkJNZSxtOkRNZSxNOnpNZSxwOkQscTpOTWUsUTpVTWUsczpxTWUsUzpGTWUsdTpQTWUsVTpJTWUsVjpMTWUsdzpBTWUsVzprTWUseDp6LFg6VSx5OlR3dCxZOkV3dCxaOlJNZSwiJSI6Vk1lfTtiLng9UChyLGIpLGIuWD1QKG4sYiksYi5jPVAodCxiKSxTLng9UChyLFMpLFMuWD1QKG4sUyksUy5jPVAodCxTKTtmdW5jdGlvbiBQKFgsZXQpe3JldHVybiBmdW5jdGlvbihkdCl7dmFyIHE9W10scHQ9LTEsaHQ9MCx3dD1YLmxlbmd0aCxrdCxpZSxlZTtmb3IoZHQgaW5zdGFuY2VvZiBEYXRlfHwoZHQ9bmV3IERhdGUoK2R0KSk7KytwdDx3dDspWC5jaGFyQ29kZUF0KHB0KT09PTM3JiYocS5wdXNoKFguc2xpY2UoaHQscHQpKSwoaWU9TXd0W2t0PVguY2hhckF0KCsrcHQpXSkhPW51bGw/a3Q9WC5jaGFyQXQoKytwdCk6aWU9a3Q9PT0iZSI/IiAiOiIwIiwoZWU9ZXRba3RdKSYmKGt0PWVlKGR0LGllKSkscS5wdXNoKGt0KSxodD1wdCsxKTtyZXR1cm4gcS5wdXNoKFguc2xpY2UoaHQscHQpKSxxLmpvaW4oIiIpfX1mdW5jdGlvbiBrKFgsZXQpe3JldHVybiBmdW5jdGlvbihkdCl7dmFyIHE9eDUoMTkwMCx2b2lkIDAsMSkscHQ9TyhxLFgsZHQrPSIiLDApLGh0LHd0O2lmKHB0IT1kdC5sZW5ndGgpcmV0dXJuIG51bGw7aWYoIlEiaW4gcSlyZXR1cm4gbmV3IERhdGUocS5RKTtpZigicyJpbiBxKXJldHVybiBuZXcgRGF0ZShxLnMqMWUzKygiTCJpbiBxP3EuTDowKSk7aWYoZXQmJiEoIloiaW4gcSkmJihxLlo9MCksInAiaW4gcSYmKHEuSD1xLkglMTIrcS5wKjEyKSxxLm09PT12b2lkIDAmJihxLm09InEiaW4gcT9xLnE6MCksIlYiaW4gcSl7aWYocS5WPDF8fHEuVj41MylyZXR1cm4gbnVsbDsidyJpbiBxfHwocS53PTEpLCJaImluIHE/KGh0PWJYKHg1KHEueSwwLDEpKSx3dD1odC5nZXRVVENEYXkoKSxodD13dD40fHx3dD09PTA/YXkuY2VpbChodCk6YXkoaHQpLGh0PWl5Lm9mZnNldChodCwocS5WLTEpKjcpLHEueT1odC5nZXRVVENGdWxsWWVhcigpLHEubT1odC5nZXRVVENNb250aCgpLHEuZD1odC5nZXRVVENEYXRlKCkrKHEudys2KSU3KTooaHQ9eFgoeDUocS55LDAsMSkpLHd0PWh0LmdldERheSgpLGh0PXd0PjR8fHd0PT09MD9ueS5jZWlsKGh0KTpueShodCksaHQ9ZXkub2Zmc2V0KGh0LChxLlYtMSkqNykscS55PWh0LmdldEZ1bGxZZWFyKCkscS5tPWh0LmdldE1vbnRoKCkscS5kPWh0LmdldERhdGUoKSsocS53KzYpJTcpfWVsc2UoIlciaW4gcXx8IlUiaW4gcSkmJigidyJpbiBxfHwocS53PSJ1ImluIHE/cS51JTc6IlciaW4gcT8xOjApLHd0PSJaImluIHE/YlgoeDUocS55LDAsMSkpLmdldFVUQ0RheSgpOnhYKHg1KHEueSwwLDEpKS5nZXREYXkoKSxxLm09MCxxLmQ9IlciaW4gcT8ocS53KzYpJTcrcS5XKjctKHd0KzUpJTc6cS53K3EuVSo3LSh3dCs2KSU3KTtyZXR1cm4iWiJpbiBxPyhxLkgrPXEuWi8xMDB8MCxxLk0rPXEuWiUxMDAsYlgocSkpOnhYKHEpfX1mdW5jdGlvbiBPKFgsZXQsZHQscSl7Zm9yKHZhciBwdD0wLGh0PWV0Lmxlbmd0aCx3dD1kdC5sZW5ndGgsa3QsaWU7cHQ8aHQ7KXtpZihxPj13dClyZXR1cm4tMTtpZihrdD1ldC5jaGFyQ29kZUF0KHB0KyspLGt0PT09Mzcpe2lmKGt0PWV0LmNoYXJBdChwdCsrKSxpZT1DW2t0IGluIE13dD9ldC5jaGFyQXQocHQrKyk6a3RdLCFpZXx8KHE9aWUoWCxkdCxxKSk8MClyZXR1cm4tMX1lbHNlIGlmKGt0IT1kdC5jaGFyQ29kZUF0KHErKykpcmV0dXJuLTF9cmV0dXJuIHF9ZnVuY3Rpb24gRChYLGV0LGR0KXt2YXIgcT1jLmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC5wPXVbcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQihYLGV0LGR0KXt2YXIgcT1wLmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC53PWRbcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSShYLGV0LGR0KXt2YXIgcT1oLmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC53PWZbcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTChYLGV0LGR0KXt2YXIgcT15LmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC5tPXhbcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUihYLGV0LGR0KXt2YXIgcT1nLmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC5tPV9bcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRihYLGV0LGR0KXtyZXR1cm4gTyhYLHQsZXQsZHQpfWZ1bmN0aW9uIHooWCxldCxkdCl7cmV0dXJuIE8oWCxyLGV0LGR0KX1mdW5jdGlvbiBVKFgsZXQsZHQpe3JldHVybiBPKFgsbixldCxkdCl9ZnVuY3Rpb24gVyhYKXtyZXR1cm4gYVtYLmdldERheSgpXX1mdW5jdGlvbiBaKFgpe3JldHVybiBvW1guZ2V0RGF5KCldfWZ1bmN0aW9uIHJ0KFgpe3JldHVybiBsW1guZ2V0TW9udGgoKV19ZnVuY3Rpb24gb3QoWCl7cmV0dXJuIHNbWC5nZXRNb250aCgpXX1mdW5jdGlvbiBzdChYKXtyZXR1cm4gaVsrKFguZ2V0SG91cnMoKT49MTIpXX1mdW5jdGlvbiBTdChYKXtyZXR1cm4gMSt+fihYLmdldE1vbnRoKCkvMyl9ZnVuY3Rpb24gYnQoWCl7cmV0dXJuIGFbWC5nZXRVVENEYXkoKV19ZnVuY3Rpb24gTXQoWCl7cmV0dXJuIG9bWC5nZXRVVENEYXkoKV19ZnVuY3Rpb24gbHQoWCl7cmV0dXJuIGxbWC5nZXRVVENNb250aCgpXX1mdW5jdGlvbiBLdChYKXtyZXR1cm4gc1tYLmdldFVUQ01vbnRoKCldfWZ1bmN0aW9uIF90KFgpe3JldHVybiBpWysoWC5nZXRVVENIb3VycygpPj0xMildfWZ1bmN0aW9uIGN0KFgpe3JldHVybiAxK35+KFguZ2V0VVRDTW9udGgoKS8zKX1yZXR1cm57Zm9ybWF0OmZ1bmN0aW9uKFgpe3ZhciBldD1QKFgrPSIiLGIpO3JldHVybiBldC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBYfSxldH0scGFyc2U6ZnVuY3Rpb24oWCl7dmFyIGV0PWsoWCs9IiIsITEpO3JldHVybiBldC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBYfSxldH0sdXRjRm9ybWF0OmZ1bmN0aW9uKFgpe3ZhciBldD1QKFgrPSIiLFMpO3JldHVybiBldC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBYfSxldH0sdXRjUGFyc2U6ZnVuY3Rpb24oWCl7dmFyIGV0PWsoWCs9IiIsITApO3JldHVybiBldC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBYfSxldH19fXZhciBNd3Q9eyItIjoiIixfOiIgIiwwOiIwIn0seG89L15ccypcZCsvLEVNZT0vXiUvLFRNZT0vW1xcXiQqKz98W1xdKCkue31dL2c7ZnVuY3Rpb24gQnIoZSx0LHIpe3ZhciBuPWU8MD8iLSI6IiIsaT0obj8tZTplKSsiIixvPWkubGVuZ3RoO3JldHVybiBuKyhvPHI/bmV3IEFycmF5KHItbysxKS5qb2luKHQpK2k6aSl9ZnVuY3Rpb24gQ01lKGUpe3JldHVybiBlLnJlcGxhY2UoVE1lLCJcXCQmIil9ZnVuY3Rpb24gYjUoZSl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK2UubWFwKENNZSkuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIHc1KGUpe2Zvcih2YXIgdD17fSxyPS0xLG49ZS5sZW5ndGg7KytyPG47KXRbZVtyXS50b0xvd2VyQ2FzZSgpXT1yO3JldHVybiB0fWZ1bmN0aW9uIEFNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUudz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBQTWUoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMSkpO3JldHVybiBuPyhlLnU9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSU1lKGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5VPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIExNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuVj0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBrTWUoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlc9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRXd0KGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzQpKTtyZXR1cm4gbj8oZS55PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFR3dChlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUueT0rblswXSsoK25bMF0+Njg/MTkwMDoyZTMpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFJNZShlLHQscil7dmFyIG49L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWModC5zbGljZShyLHIrNikpO3JldHVybiBuPyhlLlo9blsxXT8wOi0oblsyXSsoblszXXx8IjAwIikpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE5NZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUucT1uWzBdKjMtMyxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBETWUoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLm09blswXS0xLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEN3dChlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuZD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBPTWUoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMykpO3JldHVybiBuPyhlLm09MCxlLmQ9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQXd0KGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5IPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHpNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuTT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBGTWUoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlM9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQk1lKGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8oZS5MPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEhNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscis2KSk7cmV0dXJuIG4/KGUuTD1NYXRoLmZsb29yKG5bMF0vMWUzKSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBWTWUoZSx0LHIpe3ZhciBuPUVNZS5leGVjKHQuc2xpY2UocixyKzEpKTtyZXR1cm4gbj9yK25bMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIFVNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIpKTtyZXR1cm4gbj8oZS5RPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHFNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIpKTtyZXR1cm4gbj8oZS5zPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFB3dChlLHQpe3JldHVybiBCcihlLmdldERhdGUoKSx0LDIpfWZ1bmN0aW9uIEdNZShlLHQpe3JldHVybiBCcihlLmdldEhvdXJzKCksdCwyKX1mdW5jdGlvbiBXTWUoZSx0KXtyZXR1cm4gQnIoZS5nZXRIb3VycygpJTEyfHwxMix0LDIpfWZ1bmN0aW9uIFlNZShlLHQpe3JldHVybiBCcigxK2V5LmNvdW50KFdoKGUpLGUpLHQsMyl9ZnVuY3Rpb24gTnd0KGUsdCl7cmV0dXJuIEJyKGUuZ2V0TWlsbGlzZWNvbmRzKCksdCwzKX1mdW5jdGlvbiBqTWUoZSx0KXtyZXR1cm4gTnd0KGUsdCkrIjAwMCJ9ZnVuY3Rpb24gWE1lKGUsdCl7cmV0dXJuIEJyKGUuZ2V0TW9udGgoKSsxLHQsMil9ZnVuY3Rpb24gJE1lKGUsdCl7cmV0dXJuIEJyKGUuZ2V0TWludXRlcygpLHQsMil9ZnVuY3Rpb24gS01lKGUsdCl7cmV0dXJuIEJyKGUuZ2V0U2Vjb25kcygpLHQsMil9ZnVuY3Rpb24gWk1lKGUpe3ZhciB0PWUuZ2V0RGF5KCk7cmV0dXJuIHQ9PT0wPzc6dH1mdW5jdGlvbiBKTWUoZSx0KXtyZXR1cm4gQnIobmcuY291bnQoV2goZSktMSxlKSx0LDIpfWZ1bmN0aW9uIER3dChlKXt2YXIgdD1lLmdldERheSgpO3JldHVybiB0Pj00fHx0PT09MD9GcChlKTpGcC5jZWlsKGUpfWZ1bmN0aW9uIFFNZShlLHQpe3JldHVybiBlPUR3dChlKSxCcihGcC5jb3VudChXaChlKSxlKSsoV2goZSkuZ2V0RGF5KCk9PT00KSx0LDIpfWZ1bmN0aW9uIHRFZShlKXtyZXR1cm4gZS5nZXREYXkoKX1mdW5jdGlvbiBlRWUoZSx0KXtyZXR1cm4gQnIobnkuY291bnQoV2goZSktMSxlKSx0LDIpfWZ1bmN0aW9uIHJFZShlLHQpe3JldHVybiBCcihlLmdldEZ1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gbkVlKGUsdCl7cmV0dXJuIGU9RHd0KGUpLEJyKGUuZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBpRWUoZSx0KXtyZXR1cm4gQnIoZS5nZXRGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIG9FZShlLHQpe3ZhciByPWUuZ2V0RGF5KCk7cmV0dXJuIGU9cj49NHx8cj09PTA/RnAoZSk6RnAuY2VpbChlKSxCcihlLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gYUVlKGUpe3ZhciB0PWUuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4odD4wPyItIjoodCo9LTEsIisiKSkrQnIodC82MHwwLCIwIiwyKStCcih0JTYwLCIwIiwyKX1mdW5jdGlvbiBJd3QoZSx0KXtyZXR1cm4gQnIoZS5nZXRVVENEYXRlKCksdCwyKX1mdW5jdGlvbiBzRWUoZSx0KXtyZXR1cm4gQnIoZS5nZXRVVENIb3VycygpLHQsMil9ZnVuY3Rpb24gbEVlKGUsdCl7cmV0dXJuIEJyKGUuZ2V0VVRDSG91cnMoKSUxMnx8MTIsdCwyKX1mdW5jdGlvbiBjRWUoZSx0KXtyZXR1cm4gQnIoMStpeS5jb3VudChZaChlKSxlKSx0LDMpfWZ1bmN0aW9uIE93dChlLHQpe3JldHVybiBCcihlLmdldFVUQ01pbGxpc2Vjb25kcygpLHQsMyl9ZnVuY3Rpb24gdUVlKGUsdCl7cmV0dXJuIE93dChlLHQpKyIwMDAifWZ1bmN0aW9uIGhFZShlLHQpe3JldHVybiBCcihlLmdldFVUQ01vbnRoKCkrMSx0LDIpfWZ1bmN0aW9uIGZFZShlLHQpe3JldHVybiBCcihlLmdldFVUQ01pbnV0ZXMoKSx0LDIpfWZ1bmN0aW9uIHBFZShlLHQpe3JldHVybiBCcihlLmdldFVUQ1NlY29uZHMoKSx0LDIpfWZ1bmN0aW9uIGRFZShlKXt2YXIgdD1lLmdldFVUQ0RheSgpO3JldHVybiB0PT09MD83OnR9ZnVuY3Rpb24gbUVlKGUsdCl7cmV0dXJuIEJyKGlnLmNvdW50KFloKGUpLTEsZSksdCwyKX1mdW5jdGlvbiB6d3QoZSl7dmFyIHQ9ZS5nZXRVVENEYXkoKTtyZXR1cm4gdD49NHx8dD09PTA/QnAoZSk6QnAuY2VpbChlKX1mdW5jdGlvbiBnRWUoZSx0KXtyZXR1cm4gZT16d3QoZSksQnIoQnAuY291bnQoWWgoZSksZSkrKFloKGUpLmdldFVUQ0RheSgpPT09NCksdCwyKX1mdW5jdGlvbiBfRWUoZSl7cmV0dXJuIGUuZ2V0VVRDRGF5KCl9ZnVuY3Rpb24geUVlKGUsdCl7cmV0dXJuIEJyKGF5LmNvdW50KFloKGUpLTEsZSksdCwyKX1mdW5jdGlvbiB2RWUoZSx0KXtyZXR1cm4gQnIoZS5nZXRVVENGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIHhFZShlLHQpe3JldHVybiBlPXp3dChlKSxCcihlLmdldFVUQ0Z1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gYkVlKGUsdCl7cmV0dXJuIEJyKGUuZ2V0VVRDRnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiB3RWUoZSx0KXt2YXIgcj1lLmdldFVUQ0RheSgpO3JldHVybiBlPXI+PTR8fHI9PT0wP0JwKGUpOkJwLmNlaWwoZSksQnIoZS5nZXRVVENGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIFNFZSgpe3JldHVybiIrMDAwMCJ9ZnVuY3Rpb24gTHd0KCl7cmV0dXJuIiUifWZ1bmN0aW9uIGt3dChlKXtyZXR1cm4rZX1mdW5jdGlvbiBSd3QoZSl7cmV0dXJuIE1hdGguZmxvb3IoK2UvMWUzKX12YXIgV2IsTTUsd1gsc3ksRTU7Uzgoe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KTtmdW5jdGlvbiBTOChlKXtyZXR1cm4gV2I9UzUoZSksTTU9V2IuZm9ybWF0LHdYPVdiLnBhcnNlLHN5PVdiLnV0Y0Zvcm1hdCxFNT1XYi51dGNQYXJzZSxXYn12YXIgU1g9IiVZLSVtLSVkVCVIOiVNOiVTLiVMWiI7ZnVuY3Rpb24gTUVlKGUpe3JldHVybiBlLnRvSVNPU3RyaW5nKCl9dmFyIEVFZT1EYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZz9NRWU6c3koU1gpLEZ3dD1FRWU7ZnVuY3Rpb24gVEVlKGUpe3ZhciB0PW5ldyBEYXRlKGUpO3JldHVybiBpc05hTih0KT9udWxsOnR9dmFyIENFZT0rbmV3IERhdGUoIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWiIpP1RFZTpFNShTWCksQnd0PUNFZTt2YXIgVDU9MWUzLEM1PVQ1KjYwLEE1PUM1KjYwLFA1PUE1KjI0LEFFZT1QNSo3LEh3dD1QNSozMCxNWD1QNSozNjU7ZnVuY3Rpb24gUEVlKGUpe3JldHVybiBuZXcgRGF0ZShlKX1mdW5jdGlvbiBJRWUoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBEYXRlPytlOituZXcgRGF0ZSgrZSl9ZnVuY3Rpb24gTTgoZSx0LHIsbixpLG8sYSxzLGwpe3ZhciBjPWc1KG5pLG5pKSx1PWMuaW52ZXJ0LGg9Yy5kb21haW4sZj1sKCIuJUwiKSxwPWwoIjolUyIpLGQ9bCgiJUk6JU0iKSxnPWwoIiVJICVwIiksXz1sKCIlYSAlZCIpLHk9bCgiJWIgJWQiKSx4PWwoIiVCIiksYj1sKCIlWSIpLFM9W1thLDEsVDVdLFthLDUsNSpUNV0sW2EsMTUsMTUqVDVdLFthLDMwLDMwKlQ1XSxbbywxLEM1XSxbbyw1LDUqQzVdLFtvLDE1LDE1KkM1XSxbbywzMCwzMCpDNV0sW2ksMSxBNV0sW2ksMywzKkE1XSxbaSw2LDYqQTVdLFtpLDEyLDEyKkE1XSxbbiwxLFA1XSxbbiwyLDIqUDVdLFtyLDEsQUVlXSxbdCwxLEh3dF0sW3QsMywzKkh3dF0sW2UsMSxNWF1dO2Z1bmN0aW9uIEMoayl7cmV0dXJuKGEoayk8az9mOm8oayk8az9wOmkoayk8az9kOm4oayk8az9nOnQoayk8az9yKGspPGs/Xzp5OmUoayk8az94OmIpKGspfWZ1bmN0aW9uIFAoayxPLEQsQil7aWYoaz09bnVsbCYmKGs9MTApLHR5cGVvZiBrPT0ibnVtYmVyIil7dmFyIEk9TWF0aC5hYnMoRC1PKS9rLEw9b2IoZnVuY3Rpb24oUil7cmV0dXJuIFJbMl19KS5yaWdodChTLEkpO0w9PT1TLmxlbmd0aD8oQj1lbChPL01YLEQvTVgsayksaz1lKTpMPyhMPVNbSS9TW0wtMV1bMl08U1tMXVsyXS9JP0wtMTpMXSxCPUxbMV0saz1MWzBdKTooQj1NYXRoLm1heChlbChPLEQsayksMSksaz1zKX1yZXR1cm4gQj09bnVsbD9rOmsuZXZlcnkoQil9cmV0dXJuIGMuaW52ZXJ0PWZ1bmN0aW9uKGspe3JldHVybiBuZXcgRGF0ZSh1KGspKX0sYy5kb21haW49ZnVuY3Rpb24oayl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/aCgkXy5jYWxsKGssSUVlKSk6aCgpLm1hcChQRWUpfSxjLnRpY2tzPWZ1bmN0aW9uKGssTyl7dmFyIEQ9aCgpLEI9RFswXSxJPURbRC5sZW5ndGgtMV0sTD1JPEIsUjtyZXR1cm4gTCYmKFI9QixCPUksST1SKSxSPVAoayxCLEksTyksUj1SP1IucmFuZ2UoQixJKzEpOltdLEw/Ui5yZXZlcnNlKCk6Un0sYy50aWNrRm9ybWF0PWZ1bmN0aW9uKGssTyl7cmV0dXJuIE89PW51bGw/QzpsKE8pfSxjLm5pY2U9ZnVuY3Rpb24oayxPKXt2YXIgRD1oKCk7cmV0dXJuKGs9UChrLERbMF0sRFtELmxlbmd0aC0xXSxPKSk/aChoOChELGspKTpjfSxjLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gR2goYyxNOChlLHQscixuLGksbyxhLHMsbCkpfSxjfWZ1bmN0aW9uIFliKCl7cmV0dXJuIGhpLmFwcGx5KE04KFdoLHY4LG5nLGV5LHk4LF84LHR5LEpfLE01KS5kb21haW4oW25ldyBEYXRlKDJlMywwLDEpLG5ldyBEYXRlKDJlMywwLDIpXSksYXJndW1lbnRzKX1mdW5jdGlvbiBWd3QoKXtyZXR1cm4gaGkuYXBwbHkoTTgoWWgsdzgsaWcsaXksYjgseDgsdHksSl8sc3kpLmRvbWFpbihbRGF0ZS5VVEMoMmUzLDAsMSksRGF0ZS5VVEMoMmUzLDAsMildKSxhcmd1bWVudHMpfWZ1bmN0aW9uIEU4KCl7dmFyIGU9MCx0PTEscixuLGksbyxhPW5pLHM9ITEsbDtmdW5jdGlvbiBjKHUpe3JldHVybiBpc05hTih1PSt1KT9sOmEoaT09PTA/LjU6KHU9KG8odSktcikqaSxzP01hdGgubWF4KDAsTWF0aC5taW4oMSx1KSk6dSkpfXJldHVybiBjLmRvbWFpbj1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1vKGU9K3VbMF0pLG49byh0PSt1WzFdKSxpPXI9PT1uPzA6MS8obi1yKSxjKTpbZSx0XX0sYy5jbGFtcD1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0hIXUsYyk6c30sYy5pbnRlcnBvbGF0b3I9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dSxjKTphfSxjLnVua25vd249ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dSxjKTpsfSxmdW5jdGlvbih1KXtyZXR1cm4gbz11LHI9dShlKSxuPXUodCksaT1yPT09bj8wOjEvKG4tciksY319ZnVuY3Rpb24gSHAoZSx0KXtyZXR1cm4gdC5kb21haW4oZS5kb21haW4oKSkuaW50ZXJwb2xhdG9yKGUuaW50ZXJwb2xhdG9yKCkpLmNsYW1wKGUuY2xhbXAoKSkudW5rbm93bihlLnVua25vd24oKSl9ZnVuY3Rpb24gVDgoKXt2YXIgZT1vbChFOCgpKG5pKSk7cmV0dXJuIGUuY29weT1mdW5jdGlvbigpe3JldHVybiBIcChlLFQ4KCkpfSxzYy5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gRVgoKXt2YXIgZT1fNShFOCgpKS5kb21haW4oWzEsMTBdKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEhwKGUsRVgoKSkuYmFzZShlLmJhc2UoKSl9LHNjLmFwcGx5KGUsYXJndW1lbnRzKX1mdW5jdGlvbiBUWCgpe3ZhciBlPXk1KEU4KCkpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gSHAoZSxUWCgpKS5jb25zdGFudChlLmNvbnN0YW50KCkpfSxzYy5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gQzgoKXt2YXIgZT12NShFOCgpKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEhwKGUsQzgoKSkuZXhwb25lbnQoZS5leHBvbmVudCgpKX0sc2MuYXBwbHkoZSxhcmd1bWVudHMpfWZ1bmN0aW9uIFV3dCgpe3JldHVybiBDOC5hcHBseShudWxsLGFyZ3VtZW50cykuZXhwb25lbnQoLjUpfWZ1bmN0aW9uIEE4KCl7dmFyIGU9W10sdD1uaTtmdW5jdGlvbiByKG4pe2lmKCFpc05hTihuPStuKSlyZXR1cm4gdCgodnMoZSxuKS0xKS8oZS5sZW5ndGgtMSkpfXJldHVybiByLmRvbWFpbj1mdW5jdGlvbihuKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZS5zbGljZSgpO2U9W107Zm9yKHZhciBpPTAsbz1uLmxlbmd0aCxhO2k8bzsrK2kpYT1uW2ldLGEhPW51bGwmJiFpc05hTihhPSthKSYmZS5wdXNoKGEpO3JldHVybiBlLnNvcnQoYWEpLHJ9LHIuaW50ZXJwb2xhdG9yPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4scik6dH0sci5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEE4KHQpLmRvbWFpbihlKX0sc2MuYXBwbHkocixhcmd1bWVudHMpfWZ1bmN0aW9uIFA4KCl7dmFyIGU9MCx0PS41LHI9MSxuLGksbyxhLHMsbD1uaSxjLHU9ITEsaDtmdW5jdGlvbiBmKHApe3JldHVybiBpc05hTihwPStwKT9oOihwPS41KygocD0rYyhwKSktaSkqKHA8aT9hOnMpLGwodT9NYXRoLm1heCgwLE1hdGgubWluKDEscCkpOnApKX1yZXR1cm4gZi5kb21haW49ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49YyhlPStwWzBdKSxpPWModD0rcFsxXSksbz1jKHI9K3BbMl0pLGE9bj09PWk/MDouNS8oaS1uKSxzPWk9PT1vPzA6LjUvKG8taSksZik6W2UsdCxyXX0sZi5jbGFtcD1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0hIXAsZik6dX0sZi5pbnRlcnBvbGF0b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9cCxmKTpsfSxmLnVua25vd249ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9cCxmKTpofSxmdW5jdGlvbihwKXtyZXR1cm4gYz1wLG49cChlKSxpPXAodCksbz1wKHIpLGE9bj09PWk/MDouNS8oaS1uKSxzPWk9PT1vPzA6LjUvKG8taSksZn19ZnVuY3Rpb24gSTgoKXt2YXIgZT1vbChQOCgpKG5pKSk7cmV0dXJuIGUuY29weT1mdW5jdGlvbigpe3JldHVybiBIcChlLEk4KCkpfSxzYy5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gQ1goKXt2YXIgZT1fNShQOCgpKS5kb21haW4oWy4xLDEsMTBdKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEhwKGUsQ1goKSkuYmFzZShlLmJhc2UoKSl9LHNjLmFwcGx5KGUsYXJndW1lbnRzKX1mdW5jdGlvbiBBWCgpe3ZhciBlPXk1KFA4KCkpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gSHAoZSxBWCgpKS5jb25zdGFudChlLmNvbnN0YW50KCkpfSxzYy5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gTDgoKXt2YXIgZT12NShQOCgpKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEhwKGUsTDgoKSkuZXhwb25lbnQoZS5leHBvbmVudCgpKX0sc2MuYXBwbHkoZSxhcmd1bWVudHMpfWZ1bmN0aW9uIHF3dCgpe3JldHVybiBMOC5hcHBseShudWxsLGFyZ3VtZW50cykuZXhwb25lbnQoLjUpfWZ1bmN0aW9uIHRlKGUpe2Zvcih2YXIgdD1lLmxlbmd0aC82fDAscj1uZXcgQXJyYXkodCksbj0wO248dDspcltuXT0iIyIrZS5zbGljZShuKjYsKytuKjYpO3JldHVybiByfXZhciBqYj10ZSgiMWY3N2I0ZmY3ZjBlMmNhMDJjZDYyNzI4OTQ2N2JkOGM1NjRiZTM3N2MyN2Y3ZjdmYmNiZDIyMTdiZWNmIik7dmFyIEd3dD10ZSgiN2ZjOTdmYmVhZWQ0ZmRjMDg2ZmZmZjk5Mzg2Y2IwZjAwMjdmYmY1YjE3NjY2NjY2Iik7dmFyIFd3dD10ZSgiMWI5ZTc3ZDk1ZjAyNzU3MGIzZTcyOThhNjZhNjFlZTZhYjAyYTY3NjFkNjY2NjY2Iik7dmFyIFl3dD10ZSgiYTZjZWUzMWY3OGI0YjJkZjhhMzNhMDJjZmI5YTk5ZTMxYTFjZmRiZjZmZmY3ZjAwY2FiMmQ2NmEzZDlhZmZmZjk5YjE1OTI4Iik7dmFyIGp3dD10ZSgiZmJiNGFlYjNjZGUzY2NlYmM1ZGVjYmU0ZmVkOWE2ZmZmZmNjZTVkOGJkZmRkYWVjZjJmMmYyIik7dmFyIFh3dD10ZSgiYjNlMmNkZmRjZGFjY2JkNWU4ZjRjYWU0ZTZmNWM5ZmZmMmFlZjFlMmNjY2NjY2NjIik7dmFyICR3dD10ZSgiZTQxYTFjMzc3ZWI4NGRhZjRhOTg0ZWEzZmY3ZjAwZmZmZjMzYTY1NjI4Zjc4MWJmOTk5OTk5Iik7dmFyIEt3dD10ZSgiNjZjMmE1ZmM4ZDYyOGRhMGNiZTc4YWMzYTZkODU0ZmZkOTJmZTVjNDk0YjNiM2IzIik7dmFyIFp3dD10ZSgiOGRkM2M3ZmZmZmIzYmViYWRhZmI4MDcyODBiMWQzZmRiNDYyYjNkZTY5ZmNjZGU1ZDlkOWQ5YmM4MGJkY2NlYmM1ZmZlZDZmIik7dmFyIEp3dD10ZSgiNGU3OWE3ZjI4ZTJjZTE1NzU5NzZiN2IyNTlhMTRmZWRjOTQ5YWY3YWExZmY5ZGE3OWM3NTVmYmFiMGFiIik7ZnVuY3Rpb24gSWUoZSl7cmV0dXJuIHVMKGVbZS5sZW5ndGgtMV0pfXZhciBQWD1uZXcgQXJyYXkoMykuY29uY2F0KCJkOGIzNjVmNWY1ZjU1YWI0YWMiLCJhNjYxMWFkZmMyN2Q4MGNkYzEwMTg1NzEiLCJhNjYxMWFkZmMyN2RmNWY1ZjU4MGNkYzEwMTg1NzEiLCI4YzUxMGFkOGIzNjVmNmU4YzNjN2VhZTU1YWI0YWMwMTY2NWUiLCI4YzUxMGFkOGIzNjVmNmU4YzNmNWY1ZjVjN2VhZTU1YWI0YWMwMTY2NWUiLCI4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUiLCI4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNmNWY1ZjVjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUiLCI1NDMwMDU4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUwMDNjMzAiLCI1NDMwMDU4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNmNWY1ZjVjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUwMDNjMzAiKS5tYXAodGUpLFF3dD1JZShQWCk7dmFyIElYPW5ldyBBcnJheSgzKS5jb25jYXQoImFmOGRjM2Y3ZjdmNzdmYmY3YiIsIjdiMzI5NGMyYTVjZmE2ZGJhMDAwODgzNyIsIjdiMzI5NGMyYTVjZmY3ZjdmN2E2ZGJhMDAwODgzNyIsIjc2MmE4M2FmOGRjM2U3ZDRlOGQ5ZjBkMzdmYmY3YjFiNzgzNyIsIjc2MmE4M2FmOGRjM2U3ZDRlOGY3ZjdmN2Q5ZjBkMzdmYmY3YjFiNzgzNyIsIjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGQ5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNyIsIjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGY3ZjdmN2Q5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNyIsIjQwMDA0Yjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGQ5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNzAwNDQxYiIsIjQwMDA0Yjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGY3ZjdmN2Q5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNzAwNDQxYiIpLm1hcCh0ZSksdFN0PUllKElYKTt2YXIgTFg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZTlhM2M5ZjdmN2Y3YTFkNzZhIiwiZDAxYzhiZjFiNmRhYjhlMTg2NGRhYzI2IiwiZDAxYzhiZjFiNmRhZjdmN2Y3YjhlMTg2NGRhYzI2IiwiYzUxYjdkZTlhM2M5ZmRlMGVmZTZmNWQwYTFkNzZhNGQ5MjIxIiwiYzUxYjdkZTlhM2M5ZmRlMGVmZjdmN2Y3ZTZmNWQwYTFkNzZhNGQ5MjIxIiwiYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxIiwiYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZjdmN2Y3ZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxIiwiOGUwMTUyYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxMjc2NDE5IiwiOGUwMTUyYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZjdmN2Y3ZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxMjc2NDE5IikubWFwKHRlKSxlU3Q9SWUoTFgpO3ZhciBrWD1uZXcgQXJyYXkoMykuY29uY2F0KCI5OThlYzNmN2Y3ZjdmMWEzNDAiLCI1ZTNjOTliMmFiZDJmZGI4NjNlNjYxMDEiLCI1ZTNjOTliMmFiZDJmN2Y3ZjdmZGI4NjNlNjYxMDEiLCI1NDI3ODg5OThlYzNkOGRhZWJmZWUwYjZmMWEzNDBiMzU4MDYiLCI1NDI3ODg5OThlYzNkOGRhZWJmN2Y3ZjdmZWUwYjZmMWEzNDBiMzU4MDYiLCI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDYiLCI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmN2Y3ZjdmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDYiLCIyZDAwNGI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDY3ZjNiMDgiLCIyZDAwNGI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmN2Y3ZjdmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDY3ZjNiMDgiKS5tYXAodGUpLHJTdD1JZShrWCk7dmFyIFJYPW5ldyBBcnJheSgzKS5jb25jYXQoImVmOGE2MmY3ZjdmNzY3YTljZiIsImNhMDAyMGY0YTU4MjkyYzVkZTA1NzFiMCIsImNhMDAyMGY0YTU4MmY3ZjdmNzkyYzVkZTA1NzFiMCIsImIyMTgyYmVmOGE2MmZkZGJjN2QxZTVmMDY3YTljZjIxNjZhYyIsImIyMTgyYmVmOGE2MmZkZGJjN2Y3ZjdmN2QxZTVmMDY3YTljZjIxNjZhYyIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYyIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2Y3ZjdmN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYyIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYzA1MzA2MSIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2Y3ZjdmN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYzA1MzA2MSIpLm1hcCh0ZSksblN0PUllKFJYKTt2YXIgTlg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZWY4YTYyZmZmZmZmOTk5OTk5IiwiY2EwMDIwZjRhNTgyYmFiYWJhNDA0MDQwIiwiY2EwMDIwZjRhNTgyZmZmZmZmYmFiYWJhNDA0MDQwIiwiYjIxODJiZWY4YTYyZmRkYmM3ZTBlMGUwOTk5OTk5NGQ0ZDRkIiwiYjIxODJiZWY4YTYyZmRkYmM3ZmZmZmZmZTBlMGUwOTk5OTk5NGQ0ZDRkIiwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkIiwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZmZmZmZmZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkIiwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkMWExYTFhIiwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZmZmZmZmZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkMWExYTFhIikubWFwKHRlKSxpU3Q9SWUoTlgpO3ZhciBEWD1uZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5MWJmZGIiLCJkNzE5MWNmZGFlNjFhYmQ5ZTkyYzdiYjYiLCJkNzE5MWNmZGFlNjFmZmZmYmZhYmQ5ZTkyYzdiYjYiLCJkNzMwMjdmYzhkNTlmZWUwOTBlMGYzZjg5MWJmZGI0NTc1YjQiLCJkNzMwMjdmYzhkNTlmZWUwOTBmZmZmYmZlMGYzZjg5MWJmZGI0NTc1YjQiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBmZmZmYmZlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQzMTM2OTUiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBmZmZmYmZlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQzMTM2OTUiKS5tYXAodGUpLG9TdD1JZShEWCk7dmFyIE9YPW5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjkxY2Y2MCIsImQ3MTkxY2ZkYWU2MWE2ZDk2YTFhOTY0MSIsImQ3MTkxY2ZkYWU2MWZmZmZiZmE2ZDk2YTFhOTY0MSIsImQ3MzAyN2ZjOGQ1OWZlZTA4YmQ5ZWY4YjkxY2Y2MDFhOTg1MCIsImQ3MzAyN2ZjOGQ1OWZlZTA4YmZmZmZiZmQ5ZWY4YjkxY2Y2MDFhOTg1MCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MCIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzNyIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzNyIpLm1hcCh0ZSksYVN0PUllKE9YKTt2YXIgelg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmM4ZDU5ZmZmZmJmOTlkNTk0IiwiZDcxOTFjZmRhZTYxYWJkZGE0MmI4M2JhIiwiZDcxOTFjZmRhZTYxZmZmZmJmYWJkZGE0MmI4M2JhIiwiZDUzZTRmZmM4ZDU5ZmVlMDhiZTZmNTk4OTlkNTk0MzI4OGJkIiwiZDUzZTRmZmM4ZDU5ZmVlMDhiZmZmZmJmZTZmNTk4OTlkNTk0MzI4OGJkIiwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkIiwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkIiwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyIiwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyIikubWFwKHRlKSxzU3Q9SWUoelgpO3ZhciBGWD1uZXcgQXJyYXkoMykuY29uY2F0KCJlNWY1Zjk5OWQ4YzkyY2EyNWYiLCJlZGY4ZmJiMmUyZTI2NmMyYTQyMzhiNDUiLCJlZGY4ZmJiMmUyZTI2NmMyYTQyY2EyNWYwMDZkMmMiLCJlZGY4ZmJjY2VjZTY5OWQ4Yzk2NmMyYTQyY2EyNWYwMDZkMmMiLCJlZGY4ZmJjY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDU4MjQiLCJmN2ZjZmRlNWY1ZjljY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDU4MjQiLCJmN2ZjZmRlNWY1ZjljY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDZkMmMwMDQ0MWIiKS5tYXAodGUpLGxTdD1JZShGWCk7dmFyIEJYPW5ldyBBcnJheSgzKS5jb25jYXQoImUwZWNmNDllYmNkYTg4NTZhNyIsImVkZjhmYmIzY2RlMzhjOTZjNjg4NDE5ZCIsImVkZjhmYmIzY2RlMzhjOTZjNjg4NTZhNzgxMGY3YyIsImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjg4NTZhNzgxMGY3YyIsImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YiIsImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YiIsImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDgxMGY3YzRkMDA0YiIpLm1hcCh0ZSksY1N0PUllKEJYKTt2YXIgSFg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZTBmM2RiYThkZGI1NDNhMmNhIiwiZjBmOWU4YmFlNGJjN2JjY2M0MmI4Y2JlIiwiZjBmOWU4YmFlNGJjN2JjY2M0NDNhMmNhMDg2OGFjIiwiZjBmOWU4Y2NlYmM1YThkZGI1N2JjY2M0NDNhMmNhMDg2OGFjIiwiZjBmOWU4Y2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg1ODllIiwiZjdmY2YwZTBmM2RiY2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg1ODllIiwiZjdmY2YwZTBmM2RiY2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg2OGFjMDg0MDgxIikubWFwKHRlKSx1U3Q9SWUoSFgpO3ZhciBWWD1uZXcgQXJyYXkoMykuY29uY2F0KCJmZWU4YzhmZGJiODRlMzRhMzMiLCJmZWYwZDlmZGNjOGFmYzhkNTlkNzMwMWYiLCJmZWYwZDlmZGNjOGFmYzhkNTllMzRhMzNiMzAwMDAiLCJmZWYwZDlmZGQ0OWVmZGJiODRmYzhkNTllMzRhMzNiMzAwMDAiLCJmZWYwZDlmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWY5OTAwMDAiLCJmZmY3ZWNmZWU4YzhmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWY5OTAwMDAiLCJmZmY3ZWNmZWU4YzhmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWZiMzAwMDA3ZjAwMDAiKS5tYXAodGUpLGhTdD1JZShWWCk7dmFyIFVYPW5ldyBBcnJheSgzKS5jb25jYXQoImVjZTJmMGE2YmRkYjFjOTA5OSIsImY2ZWZmN2JkYzllMTY3YTljZjAyODE4YSIsImY2ZWZmN2JkYzllMTY3YTljZjFjOTA5OTAxNmM1OSIsImY2ZWZmN2QwZDFlNmE2YmRkYjY3YTljZjFjOTA5OTAxNmM1OSIsImY2ZWZmN2QwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNjQ1MCIsImZmZjdmYmVjZTJmMGQwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNjQ1MCIsImZmZjdmYmVjZTJmMGQwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNmM1OTAxNDYzNiIpLm1hcCh0ZSksZlN0PUllKFVYKTt2YXIgcVg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZWNlN2YyYTZiZGRiMmI4Y2JlIiwiZjFlZWY2YmRjOWUxNzRhOWNmMDU3MGIwIiwiZjFlZWY2YmRjOWUxNzRhOWNmMmI4Y2JlMDQ1YThkIiwiZjFlZWY2ZDBkMWU2YTZiZGRiNzRhOWNmMmI4Y2JlMDQ1YThkIiwiZjFlZWY2ZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDM0ZTdiIiwiZmZmN2ZiZWNlN2YyZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDM0ZTdiIiwiZmZmN2ZiZWNlN2YyZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDQ1YThkMDIzODU4IikubWFwKHRlKSxwU3Q9SWUocVgpO3ZhciBHWD1uZXcgQXJyYXkoMykuY29uY2F0KCJlN2UxZWZjOTk0YzdkZDFjNzciLCJmMWVlZjZkN2I1ZDhkZjY1YjBjZTEyNTYiLCJmMWVlZjZkN2I1ZDhkZjY1YjBkZDFjNzc5ODAwNDMiLCJmMWVlZjZkNGI5ZGFjOTk0YzdkZjY1YjBkZDFjNzc5ODAwNDMiLCJmMWVlZjZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5MTAwM2YiLCJmN2Y0ZjllN2UxZWZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5MTAwM2YiLCJmN2Y0ZjllN2UxZWZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5ODAwNDM2NzAwMWYiKS5tYXAodGUpLGRTdD1JZShHWCk7dmFyIFdYPW5ldyBBcnJheSgzKS5jb25jYXQoImZkZTBkZGZhOWZiNWM1MWI4YSIsImZlZWJlMmZiYjRiOWY3NjhhMWFlMDE3ZSIsImZlZWJlMmZiYjRiOWY3NjhhMWM1MWI4YTdhMDE3NyIsImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWM1MWI4YTdhMDE3NyIsImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NyIsImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NyIsImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NzQ5MDA2YSIpLm1hcCh0ZSksbVN0PUllKFdYKTt2YXIgWVg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZWRmOGIxN2ZjZGJiMmM3ZmI4IiwiZmZmZmNjYTFkYWI0NDFiNmM0MjI1ZWE4IiwiZmZmZmNjYTFkYWI0NDFiNmM0MmM3ZmI4MjUzNDk0IiwiZmZmZmNjYzdlOWI0N2ZjZGJiNDFiNmM0MmM3ZmI4MjUzNDk0IiwiZmZmZmNjYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MGMyYzg0IiwiZmZmZmQ5ZWRmOGIxYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MGMyYzg0IiwiZmZmZmQ5ZWRmOGIxYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MjUzNDk0MDgxZDU4IikubWFwKHRlKSxnU3Q9SWUoWVgpO3ZhciBqWD1uZXcgQXJyYXkoMykuY29uY2F0KCJmN2ZjYjlhZGRkOGUzMWEzNTQiLCJmZmZmY2NjMmU2OTk3OGM2NzkyMzg0NDMiLCJmZmZmY2NjMmU2OTk3OGM2NzkzMWEzNTQwMDY4MzciLCJmZmZmY2NkOWYwYTNhZGRkOGU3OGM2NzkzMWEzNTQwMDY4MzciLCJmZmZmY2NkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDVhMzIiLCJmZmZmZTVmN2ZjYjlkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDVhMzIiLCJmZmZmZTVmN2ZjYjlkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDY4MzcwMDQ1MjkiKS5tYXAodGUpLF9TdD1JZShqWCk7dmFyIFhYPW5ldyBBcnJheSgzKS5jb25jYXQoImZmZjdiY2ZlYzQ0ZmQ5NWYwZSIsImZmZmZkNGZlZDk4ZWZlOTkyOWNjNGMwMiIsImZmZmZkNGZlZDk4ZWZlOTkyOWQ5NWYwZTk5MzQwNCIsImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWQ5NWYwZTk5MzQwNCIsImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNCIsImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNCIsImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjk5MzQwNDY2MjUwNiIpLm1hcCh0ZSkseVN0PUllKFhYKTt2YXIgJFg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmZlZGEwZmViMjRjZjAzYjIwIiwiZmZmZmIyZmVjYzVjZmQ4ZDNjZTMxYTFjIiwiZmZmZmIyZmVjYzVjZmQ4ZDNjZjAzYjIwYmQwMDI2IiwiZmZmZmIyZmVkOTc2ZmViMjRjZmQ4ZDNjZjAzYjIwYmQwMDI2IiwiZmZmZmIyZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYjEwMDI2IiwiZmZmZmNjZmZlZGEwZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYjEwMDI2IiwiZmZmZmNjZmZlZGEwZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYmQwMDI2ODAwMDI2IikubWFwKHRlKSx2U3Q9SWUoJFgpO3ZhciBLWD1uZXcgQXJyYXkoMykuY29uY2F0KCJkZWViZjc5ZWNhZTEzMTgyYmQiLCJlZmYzZmZiZGQ3ZTc2YmFlZDYyMTcxYjUiLCJlZmYzZmZiZGQ3ZTc2YmFlZDYzMTgyYmQwODUxOWMiLCJlZmYzZmZjNmRiZWY5ZWNhZTE2YmFlZDYzMTgyYmQwODUxOWMiLCJlZmYzZmZjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODQ1OTQiLCJmN2ZiZmZkZWViZjdjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODQ1OTQiLCJmN2ZiZmZkZWViZjdjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODUxOWMwODMwNmIiKS5tYXAodGUpLHhTdD1JZShLWCk7dmFyIFpYPW5ldyBBcnJheSgzKS5jb25jYXQoImU1ZjVlMGExZDk5YjMxYTM1NCIsImVkZjhlOWJhZTRiMzc0YzQ3NjIzOGI0NSIsImVkZjhlOWJhZTRiMzc0YzQ3NjMxYTM1NDAwNmQyYyIsImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjMxYTM1NDAwNmQyYyIsImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMiIsImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMiIsImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNmQyYzAwNDQxYiIpLm1hcCh0ZSksYlN0PUllKFpYKTt2YXIgSlg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZjBmMGYwYmRiZGJkNjM2MzYzIiwiZjdmN2Y3Y2NjY2NjOTY5Njk2NTI1MjUyIiwiZjdmN2Y3Y2NjY2NjOTY5Njk2NjM2MzYzMjUyNTI1IiwiZjdmN2Y3ZDlkOWQ5YmRiZGJkOTY5Njk2NjM2MzYzMjUyNTI1IiwiZjdmN2Y3ZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1IiwiZmZmZmZmZjBmMGYwZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1IiwiZmZmZmZmZjBmMGYwZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1MDAwMDAwIikubWFwKHRlKSx3U3Q9SWUoSlgpO3ZhciBRWD1uZXcgQXJyYXkoMykuY29uY2F0KCJlZmVkZjViY2JkZGM3NTZiYjEiLCJmMmYwZjdjYmM5ZTI5ZTlhYzg2YTUxYTMiLCJmMmYwZjdjYmM5ZTI5ZTlhYzg3NTZiYjE1NDI3OGYiLCJmMmYwZjdkYWRhZWJiY2JkZGM5ZTlhYzg3NTZiYjE1NDI3OGYiLCJmMmYwZjdkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM0YTE0ODYiLCJmY2ZiZmRlZmVkZjVkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM0YTE0ODYiLCJmY2ZiZmRlZmVkZjVkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM1NDI3OGYzZjAwN2QiKS5tYXAodGUpLFNTdD1JZShRWCk7dmFyIHQkPW5ldyBBcnJheSgzKS5jb25jYXQoImZlZTBkMmZjOTI3MmRlMmQyNiIsImZlZTVkOWZjYWU5MWZiNmE0YWNiMTgxZCIsImZlZTVkOWZjYWU5MWZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZGE1MGYxNTY3MDAwZCIpLm1hcCh0ZSksTVN0PUllKHQkKTt2YXIgZSQ9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmVlNmNlZmRhZTZiZTY1NTBkIiwiZmVlZGRlZmRiZTg1ZmQ4ZDNjZDk0NzAxIiwiZmVlZGRlZmRiZTg1ZmQ4ZDNjZTY1NTBkYTYzNjAzIiwiZmVlZGRlZmRkMGEyZmRhZTZiZmQ4ZDNjZTY1NTBkYTYzNjAzIiwiZmVlZGRlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxOGMyZDA0IiwiZmZmNWViZmVlNmNlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxOGMyZDA0IiwiZmZmNWViZmVlNmNlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxYTYzNjAzN2YyNzA0IikubWFwKHRlKSxFU3Q9SWUoZSQpO2Z1bmN0aW9uIFRTdChlKXtyZXR1cm4gZT1NYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLCJyZ2IoIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKC00LjU0LWUqKDM1LjM0LWUqKDIzODEuNzMtZSooNjQwMi43LWUqKDcwMjQuNzItZSoyNzEwLjU3KSkpKSkpKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoMzIuNDkrZSooMTcwLjczK2UqKDUyLjgyLWUqKDEzMS40Ni1lKigxNzYuNTgtZSo2Ny4zNykpKSkpKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDgxLjI0K2UqKDQ0Mi4zNi1lKigyNDgyLjQzLWUqKDYxNjcuMjQtZSooNjYxNC45NC1lKjI0NzUuNjcpKSkpKSkpKyIpIn12YXIgQ1N0PVRfKGNhKDMwMCwuNSwwKSxjYSgtMjQwLC41LDEpKTt2YXIgQVN0PVRfKGNhKC0xMDAsLjc1LC4zNSksY2EoODAsMS41LC44KSksUFN0PVRfKGNhKDI2MCwuNzUsLjM1KSxjYSg4MCwxLjUsLjgpKSxrOD1jYSgpO2Z1bmN0aW9uIElTdChlKXsoZTwwfHxlPjEpJiYoZS09TWF0aC5mbG9vcihlKSk7dmFyIHQ9TWF0aC5hYnMoZS0uNSk7cmV0dXJuIGs4Lmg9MzYwKmUtMTAwLGs4LnM9MS41LTEuNSp0LGs4Lmw9LjgtLjkqdCxrOCsiIn12YXIgUjg9Y3UoKSxMRWU9TWF0aC5QSS8zLGtFZT1NYXRoLlBJKjIvMztmdW5jdGlvbiBMU3QoZSl7dmFyIHQ7cmV0dXJuIGU9KC41LWUpKk1hdGguUEksUjgucj0yNTUqKHQ9TWF0aC5zaW4oZSkpKnQsUjguZz0yNTUqKHQ9TWF0aC5zaW4oZStMRWUpKSp0LFI4LmI9MjU1Kih0PU1hdGguc2luKGUra0VlKSkqdCxSOCsiIn1mdW5jdGlvbiBrU3QoZSl7cmV0dXJuIGU9TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwicmdiKCIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgzNC42MStlKigxMTcyLjMzLWUqKDEwNzkzLjU2LWUqKDMzMzAwLjEyLWUqKDM4Mzk0LjQ5LWUqMTQ4MjUuMDUpKSkpKSkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgyMy4zMStlKig1NTcuMzMrZSooMTIyNS4zMy1lKigzNTc0Ljk2LWUqKDEwNzMuNzcrZSo3MDcuNTYpKSkpKSkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgyNy4yK2UqKDMyMTEuMS1lKigxNTMyNy45Ny1lKigyNzgxNC1lKigyMjU2OS4xOC1lKjY4MzguNjYpKSkpKSkpKyIpIn1mdW5jdGlvbiBOOChlKXt2YXIgdD1lLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGVbTWF0aC5tYXgoMCxNYXRoLm1pbih0LTEsTWF0aC5mbG9vcihyKnQpKSldfX12YXIgUlN0PU44KHRlKCI0NDAxNTQ0NDAyNTY0NTA0NTc0NTA1NTk0NjA3NWE0NjA4NWM0NjBhNWQ0NjBiNWU0NzBkNjA0NzBlNjE0NzEwNjM0NzExNjQ0NzEzNjU0ODE0Njc0ODE2Njg0ODE3Njk0ODE4NmE0ODFhNmM0ODFiNmQ0ODFjNmU0ODFkNmY0ODFmNzA0ODIwNzE0ODIxNzM0ODIzNzQ0ODI0NzU0ODI1NzY0ODI2Nzc0ODI4Nzg0ODI5Nzk0NzJhN2E0NzJjN2E0NzJkN2I0NzJlN2M0NzJmN2Q0NjMwN2U0NjMyN2U0NjMzN2Y0NjM0ODA0NTM1ODE0NTM3ODE0NTM4ODI0NDM5ODM0NDNhODM0NDNiODQ0MzNkODQ0MzNlODU0MjNmODU0MjQwODY0MjQxODY0MTQyODc0MTQ0ODc0MDQ1ODg0MDQ2ODgzZjQ3ODgzZjQ4ODkzZTQ5ODkzZTRhODkzZTRjOGEzZDRkOGEzZDRlOGEzYzRmOGEzYzUwOGIzYjUxOGIzYjUyOGIzYTUzOGIzYTU0OGMzOTU1OGMzOTU2OGMzODU4OGMzODU5OGMzNzVhOGMzNzViOGQzNjVjOGQzNjVkOGQzNTVlOGQzNTVmOGQzNDYwOGQzNDYxOGQzMzYyOGQzMzYzOGQzMjY0OGUzMjY1OGUzMTY2OGUzMTY3OGUzMTY4OGUzMDY5OGUzMDZhOGUyZjZiOGUyZjZjOGUyZTZkOGUyZTZlOGUyZTZmOGUyZDcwOGUyZDcxOGUyYzcxOGUyYzcyOGUyYzczOGUyYjc0OGUyYjc1OGUyYTc2OGUyYTc3OGUyYTc4OGUyOTc5OGUyOTdhOGUyOTdiOGUyODdjOGUyODdkOGUyNzdlOGUyNzdmOGUyNzgwOGUyNjgxOGUyNjgyOGUyNjgyOGUyNTgzOGUyNTg0OGUyNTg1OGUyNDg2OGUyNDg3OGUyMzg4OGUyMzg5OGUyMzhhOGQyMjhiOGQyMjhjOGQyMjhkOGQyMThlOGQyMThmOGQyMTkwOGQyMTkxOGMyMDkyOGMyMDkyOGMyMDkzOGMxZjk0OGMxZjk1OGIxZjk2OGIxZjk3OGIxZjk4OGIxZjk5OGExZjlhOGExZTliOGExZTljODkxZTlkODkxZjllODkxZjlmODgxZmEwODgxZmExODgxZmExODcxZmEyODcyMGEzODYyMGE0ODYyMWE1ODUyMWE2ODUyMmE3ODUyMmE4ODQyM2E5ODMyNGFhODMyNWFiODIyNWFjODIyNmFkODEyN2FkODEyOGFlODAyOWFmN2YyYWIwN2YyY2IxN2UyZGIyN2QyZWIzN2MyZmI0N2MzMWI1N2IzMmI2N2EzNGI2NzkzNWI3NzkzN2I4NzgzOGI5NzczYWJhNzYzYmJiNzUzZGJjNzQzZmJjNzM0MGJkNzI0MmJlNzE0NGJmNzA0NmMwNmY0OGMxNmU0YWMxNmQ0Y2MyNmM0ZWMzNmI1MGM0NmE1MmM1Njk1NGM1Njg1NmM2Njc1OGM3NjU1YWM4NjQ1Y2M4NjM1ZWM5NjI2MGNhNjA2M2NiNWY2NWNiNWU2N2NjNWM2OWNkNWI2Y2NkNWE2ZWNlNTg3MGNmNTc3M2QwNTY3NWQwNTQ3N2QxNTM3YWQxNTE3Y2QyNTA3ZmQzNGU4MWQzNGQ4NGQ0NGI4NmQ1NDk4OWQ1NDg4YmQ2NDY4ZWQ2NDU5MGQ3NDM5M2Q3NDE5NWQ4NDA5OGQ4M2U5YmQ5M2M5ZGQ5M2JhMGRhMzlhMmRhMzdhNWRiMzZhOGRiMzRhYWRjMzJhZGRjMzBiMGRkMmZiMmRkMmRiNWRlMmJiOGRlMjliYWRlMjhiZGRmMjZjMGRmMjVjMmRmMjNjNWUwMjFjOGUwMjBjYWUxMWZjZGUxMWRkMGUxMWNkMmUyMWJkNWUyMWFkOGUyMTlkYWUzMTlkZGUzMThkZmUzMThlMmU0MThlNWU0MTllN2U0MTllYWU1MWFlY2U1MWJlZmU1MWNmMWU1MWRmNGU2MWVmNmU2MjBmOGU2MjFmYmU3MjNmZGU3MjUiKSksTlN0PU44KHRlKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMDkwMjAyMGIwMjAyMGQwMzAzMGYwMzAzMTIwNDA0MTQwNTA0MTYwNjA1MTgwNjA1MWEwNzA2MWMwODA3MWUwOTA3MjAwYTA4MjIwYjA5MjQwYzA5MjYwZDBhMjkwZTBiMmIxMDBiMmQxMTBjMmYxMjBkMzExMzBkMzQxNDBlMzYxNTBlMzgxNjBmM2IxODBmM2QxOTEwM2YxYTEwNDIxYzEwNDQxZDExNDcxZTExNDkyMDExNGIyMTExNGUyMjExNTAyNDEyNTMyNTEyNTUyNzEyNTgyOTExNWEyYTExNWMyYzExNWYyZDExNjEyZjExNjMzMTExNjUzMzEwNjczNDEwNjkzNjEwNmIzODEwNmMzOTBmNmUzYjBmNzAzZDBmNzEzZjBmNzI0MDBmNzQ0MjBmNzU0NDBmNzY0NTEwNzc0NzEwNzg0OTEwNzg0YTEwNzk0YzExN2E0ZTExN2I0ZjEyN2I1MTEyN2M1MjEzN2M1NDEzN2Q1NjE0N2Q1NzE1N2U1OTE1N2U1YTE2N2U1YzE2N2Y1ZDE3N2Y1ZjE4N2Y2MDE4ODA2MjE5ODA2NDFhODA2NTFhODA2NzFiODA2ODFjODE2YTFjODE2YjFkODE2ZDFkODE2ZTFlODE3MDFmODE3MjFmODE3MzIwODE3NTIxODE3NjIxODE3ODIyODE3OTIyODI3YjIzODI3YzIzODI3ZTI0ODI4MDI1ODI4MTI1ODE4MzI2ODE4NDI2ODE4NjI3ODE4ODI3ODE4OTI4ODE4YjI5ODE4YzI5ODE4ZTJhODE5MDJhODE5MTJiODE5MzJiODA5NDJjODA5NjJjODA5ODJkODA5OTJkODA5YjJlN2Y5YzJlN2Y5ZTJmN2ZhMDJmN2ZhMTMwN2VhMzMwN2VhNTMxN2VhNjMxN2RhODMyN2RhYTMzN2RhYjMzN2NhZDM0N2NhZTM0N2JiMDM1N2JiMjM1N2JiMzM2N2FiNTM2N2FiNzM3NzliODM3NzliYTM4NzhiYzM5NzhiZDM5NzdiZjNhNzdjMDNhNzZjMjNiNzVjNDNjNzVjNTNjNzRjNzNkNzNjODNlNzNjYTNlNzJjYzNmNzFjZDQwNzFjZjQwNzBkMDQxNmZkMjQyNmZkMzQzNmVkNTQ0NmRkNjQ1NmNkODQ1NmNkOTQ2NmJkYjQ3NmFkYzQ4NjlkZTQ5NjhkZjRhNjhlMDRjNjdlMjRkNjZlMzRlNjVlNDRmNjRlNTUwNjRlNzUyNjNlODUzNjJlOTU0NjJlYTU2NjFlYjU3NjBlYzU4NjBlZDVhNWZlZTViNWVlZjVkNWVmMDVmNWVmMTYwNWRmMjYyNWRmMjY0NWNmMzY1NWNmNDY3NWNmNDY5NWNmNTZiNWNmNjZjNWNmNjZlNWNmNzcwNWNmNzcyNWNmODc0NWNmODc2NWNmOTc4NWRmOTc5NWRmOTdiNWRmYTdkNWVmYTdmNWVmYTgxNWZmYjgzNWZmYjg1NjBmYjg3NjFmYzg5NjFmYzhhNjJmYzhjNjNmYzhlNjRmYzkwNjVmZDkyNjZmZDk0NjdmZDk2NjhmZDk4NjlmZDlhNmFmZDliNmJmZTlkNmNmZTlmNmRmZWExNmVmZWEzNmZmZWE1NzFmZWE3NzJmZWE5NzNmZWFhNzRmZWFjNzZmZWFlNzdmZWIwNzhmZWIyN2FmZWI0N2JmZWI2N2NmZWI3N2VmZWI5N2ZmZWJiODFmZWJkODJmZWJmODRmZWMxODVmZWMyODdmZWM0ODhmZWM2OGFmZWM4OGNmZWNhOGRmZWNjOGZmZWNkOTBmZWNmOTJmZWQxOTRmZWQzOTVmZWQ1OTdmZWQ3OTlmZWQ4OWFmZGRhOWNmZGRjOWVmZGRlYTBmZGUwYTFmZGUyYTNmZGUzYTVmZGU1YTdmZGU3YTlmZGU5YWFmZGViYWNmY2VjYWVmY2VlYjBmY2YwYjJmY2YyYjRmY2Y0YjZmY2Y2YjhmY2Y3YjlmY2Y5YmJmY2ZiYmRmY2ZkYmYiKSksRFN0PU44KHRlKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMGEwMjAyMGMwMjAyMGUwMzAyMTAwNDAzMTIwNDAzMTQwNTA0MTcwNjA0MTkwNzA1MWIwODA1MWQwOTA2MWYwYTA3MjIwYjA3MjQwYzA4MjYwZDA4MjkwZTA5MmIxMDA5MmQxMTBhMzAxMjBhMzIxNDBiMzQxNTBiMzcxNjBiMzkxODBjM2MxOTBjM2UxYjBjNDExYzBjNDMxZTBjNDUxZjBjNDgyMTBjNGEyMzBjNGMyNDBjNGYyNjBjNTEyODBiNTMyOTBiNTUyYjBiNTcyZDBiNTkyZjBhNWIzMTBhNWMzMjBhNWUzNDBhNWYzNjA5NjEzODA5NjIzOTA5NjMzYjA5NjQzZDA5NjUzZTA5NjY0MDBhNjc0MjBhNjg0NDBhNjg0NTBhNjk0NzBiNmE0OTBiNmE0YTBjNmI0YzBjNmI0ZDBkNmM0ZjBkNmM1MTBlNmM1MjBlNmQ1NDBmNmQ1NTBmNmQ1NzEwNmU1OTEwNmU1YTExNmU1YzEyNmU1ZDEyNmU1ZjEzNmU2MTEzNmU2MjE0NmU2NDE1NmU2NTE1NmU2NzE2NmU2OTE2NmU2YTE3NmU2YzE4NmU2ZDE4NmU2ZjE5NmU3MTE5NmU3MjFhNmU3NDFhNmU3NTFiNmU3NzFjNmQ3ODFjNmQ3YTFkNmQ3YzFkNmQ3ZDFlNmQ3ZjFlNmM4MDFmNmM4MjIwNmM4NDIwNmI4NTIxNmI4NzIxNmI4ODIyNmE4YTIyNmE4YzIzNjk4ZDIzNjk4ZjI0Njk5MDI1Njg5MjI1Njg5MzI2Njc5NTI2Njc5NzI3NjY5ODI3NjY5YTI4NjU5YjI5NjQ5ZDI5NjQ5ZjJhNjNhMDJhNjNhMjJiNjJhMzJjNjFhNTJjNjBhNjJkNjBhODJlNWZhOTJlNWVhYjJmNWVhZDMwNWRhZTMwNWNiMDMxNWJiMTMyNWFiMzMyNWFiNDMzNTliNjM0NThiNzM1NTdiOTM1NTZiYTM2NTViYzM3NTRiZDM4NTNiZjM5NTJjMDNhNTFjMTNhNTBjMzNiNGZjNDNjNGVjNjNkNGRjNzNlNGNjODNmNGJjYTQwNGFjYjQxNDljYzQyNDhjZTQzNDdjZjQ0NDZkMDQ1NDVkMjQ2NDRkMzQ3NDNkNDQ4NDJkNTRhNDFkNzRiM2ZkODRjM2VkOTRkM2RkYTRlM2NkYjUwM2JkZDUxM2FkZTUyMzhkZjUzMzdlMDU1MzZlMTU2MzVlMjU3MzRlMzU5MzNlNDVhMzFlNTVjMzBlNjVkMmZlNzVlMmVlODYwMmRlOTYxMmJlYTYzMmFlYjY0MjllYjY2MjhlYzY3MjZlZDY5MjVlZTZhMjRlZjZjMjNlZjZlMjFmMDZmMjBmMTcxMWZmMTczMWRmMjc0MWNmMzc2MWJmMzc4MTlmNDc5MThmNTdiMTdmNTdkMTVmNjdlMTRmNjgwMTNmNzgyMTJmNzg0MTBmODg1MGZmODg3MGVmODg5MGNmOThiMGJmOThjMGFmOThlMDlmYTkwMDhmYTkyMDdmYTk0MDdmYjk2MDZmYjk3MDZmYjk5MDZmYjliMDZmYjlkMDdmYzlmMDdmY2ExMDhmY2EzMDlmY2E1MGFmY2E2MGNmY2E4MGRmY2FhMGZmY2FjMTFmY2FlMTJmY2IwMTRmY2IyMTZmY2I0MThmYmI2MWFmYmI4MWRmYmJhMWZmYmJjMjFmYmJlMjNmYWMwMjZmYWMyMjhmYWM0MmFmYWM2MmRmOWM3MmZmOWM5MzJmOWNiMzVmOGNkMzdmOGNmM2FmN2QxM2RmN2QzNDBmNmQ1NDNmNmQ3NDZmNWQ5NDlmNWRiNGNmNGRkNGZmNGRmNTNmNGUxNTZmM2UzNWFmM2U1NWRmMmU2NjFmMmU4NjVmMmVhNjlmMWVjNmRmMWVkNzFmMWVmNzVmMWYxNzlmMmYyN2RmMmY0ODJmM2Y1ODZmM2Y2OGFmNGY4OGVmNWY5OTJmNmZhOTZmOGZiOWFmOWZjOWRmYWZkYTFmY2ZmYTQiKSksT1N0PU44KHRlKCIwZDA4ODcxMDA3ODgxMzA3ODkxNjA3OGExOTA2OGMxYjA2OGQxZDA2OGUyMDA2OGYyMjA2OTAyNDA2OTEyNjA1OTEyODA1OTIyYTA1OTMyYzA1OTQyZTA1OTUyZjA1OTYzMTA1OTczMzA1OTczNTA0OTgzNzA0OTkzODA0OWEzYTA0OWEzYzA0OWIzZTA0OWMzZjA0OWM0MTA0OWQ0MzAzOWU0NDAzOWU0NjAzOWY0ODAzOWY0OTAzYTA0YjAzYTE0YzAyYTE0ZTAyYTI1MDAyYTI1MTAyYTM1MzAyYTM1NTAyYTQ1NjAxYTQ1ODAxYTQ1OTAxYTU1YjAxYTU1YzAxYTY1ZTAxYTY2MDAxYTY2MTAwYTc2MzAwYTc2NDAwYTc2NjAwYTc2NzAwYTg2OTAwYTg2YTAwYTg2YzAwYTg2ZTAwYTg2ZjAwYTg3MTAwYTg3MjAxYTg3NDAxYTg3NTAxYTg3NzAxYTg3ODAxYTg3YTAyYTg3YjAyYTg3ZDAzYTg3ZTAzYTg4MDA0YTg4MTA0YTc4MzA1YTc4NDA1YTc4NjA2YTY4NzA3YTY4ODA4YTY4YTA5YTU4YjBhYTU4ZDBiYTU4ZTBjYTQ4ZjBkYTQ5MTBlYTM5MjBmYTM5NDEwYTI5NTExYTE5NjEzYTE5ODE0YTA5OTE1OWY5YTE2OWY5YzE3OWU5ZDE4OWQ5ZTE5OWRhMDFhOWNhMTFiOWJhMjFkOWFhMzFlOWFhNTFmOTlhNjIwOThhNzIxOTdhODIyOTZhYTIzOTVhYjI0OTRhYzI2OTRhZDI3OTNhZTI4OTJiMDI5OTFiMTJhOTBiMjJiOGZiMzJjOGViNDJlOGRiNTJmOGNiNjMwOGJiNzMxOGFiODMyODliYTMzODhiYjM0ODhiYzM1ODdiZDM3ODZiZTM4ODViZjM5ODRjMDNhODNjMTNiODJjMjNjODFjMzNkODBjNDNlN2ZjNTQwN2VjNjQxN2RjNzQyN2NjODQzN2JjOTQ0N2FjYTQ1N2FjYjQ2NzljYzQ3NzhjYzQ5NzdjZDRhNzZjZTRiNzVjZjRjNzRkMDRkNzNkMTRlNzJkMjRmNzFkMzUxNzFkNDUyNzBkNTUzNmZkNTU0NmVkNjU1NmRkNzU2NmNkODU3NmJkOTU4NmFkYTVhNmFkYTViNjlkYjVjNjhkYzVkNjdkZDVlNjZkZTVmNjVkZTYxNjRkZjYyNjNlMDYzNjNlMTY0NjJlMjY1NjFlMjY2NjBlMzY4NWZlNDY5NWVlNTZhNWRlNTZiNWRlNjZjNWNlNzZlNWJlNzZmNWFlODcwNTllOTcxNThlOTcyNTdlYTc0NTdlYjc1NTZlYjc2NTVlYzc3NTRlZDc5NTNlZDdhNTJlZTdiNTFlZjdjNTFlZjdlNTBmMDdmNGZmMDgwNGVmMTgxNGRmMTgzNGNmMjg0NGJmMzg1NGJmMzg3NGFmNDg4NDlmNDg5NDhmNThiNDdmNThjNDZmNjhkNDVmNjhmNDRmNzkwNDRmNzkxNDNmNzkzNDJmODk0NDFmODk1NDBmOTk3M2ZmOTk4M2VmOTlhM2VmYTliM2RmYTljM2NmYTllM2JmYjlmM2FmYmExMzlmYmEyMzhmY2EzMzhmY2E1MzdmY2E2MzZmY2E4MzVmY2E5MzRmZGFiMzNmZGFjMzNmZGFlMzJmZGFmMzFmZGIxMzBmZGIyMmZmZGI0MmZmZGI1MmVmZWI3MmRmZWI4MmNmZWJhMmNmZWJiMmJmZWJkMmFmZWJlMmFmZWMwMjlmZGMyMjlmZGMzMjhmZGM1MjdmZGM2MjdmZGM4MjdmZGNhMjZmZGNiMjZmY2NkMjVmY2NlMjVmY2QwMjVmY2QyMjVmYmQzMjRmYmQ1MjRmYmQ3MjRmYWQ4MjRmYWRhMjRmOWRjMjRmOWRkMjVmOGRmMjVmOGUxMjVmN2UyMjVmN2U0MjVmNmU2MjZmNmU4MjZmNWU5MjZmNWViMjdmNGVkMjdmM2VlMjdmM2YwMjdmMmYyMjdmMWY0MjZmMWY1MjVmMGY3MjRmMGY5MjEiKSk7ZnVuY3Rpb24gcWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciByJD1NYXRoLmFicyxCbz1NYXRoLmF0YW4yLG9nPU1hdGguY29zLHpTdD1NYXRoLm1heCxEOD1NYXRoLm1pbixfdT1NYXRoLnNpbixseT1NYXRoLnNxcnQsYm89MWUtMTIseXU9TWF0aC5QSSxJNT15dS8yLGhjPTIqeXU7ZnVuY3Rpb24gRlN0KGUpe3JldHVybiBlPjE/MDplPC0xP3l1Ok1hdGguYWNvcyhlKX1mdW5jdGlvbiBuJChlKXtyZXR1cm4gZT49MT9JNTplPD0tMT8tSTU6TWF0aC5hc2luKGUpfWZ1bmN0aW9uIFJFZShlKXtyZXR1cm4gZS5pbm5lclJhZGl1c31mdW5jdGlvbiBORWUoZSl7cmV0dXJuIGUub3V0ZXJSYWRpdXN9ZnVuY3Rpb24gREVlKGUpe3JldHVybiBlLnN0YXJ0QW5nbGV9ZnVuY3Rpb24gT0VlKGUpe3JldHVybiBlLmVuZEFuZ2xlfWZ1bmN0aW9uIHpFZShlKXtyZXR1cm4gZSYmZS5wYWRBbmdsZX1mdW5jdGlvbiBGRWUoZSx0LHIsbixpLG8sYSxzKXt2YXIgbD1yLWUsYz1uLXQsdT1hLWksaD1zLW8sZj1oKmwtdSpjO2lmKCEoZipmPGJvKSlyZXR1cm4gZj0odSoodC1vKS1oKihlLWkpKS9mLFtlK2YqbCx0K2YqY119ZnVuY3Rpb24gTzgoZSx0LHIsbixpLG8sYSl7dmFyIHM9ZS1yLGw9dC1uLGM9KGE/bzotbykvbHkocypzK2wqbCksdT1jKmwsaD0tYypzLGY9ZSt1LHA9dCtoLGQ9cit1LGc9bitoLF89KGYrZCkvMix5PShwK2cpLzIseD1kLWYsYj1nLXAsUz14KngrYipiLEM9aS1vLFA9ZipnLWQqcCxrPShiPDA/LTE6MSkqbHkoelN0KDAsQypDKlMtUCpQKSksTz0oUCpiLXgqaykvUyxEPSgtUCp4LWIqaykvUyxCPShQKmIreCprKS9TLEk9KC1QKngrYiprKS9TLEw9Ty1fLFI9RC15LEY9Qi1fLHo9SS15O3JldHVybiBMKkwrUipSPkYqRit6KnomJihPPUIsRD1JKSx7Y3g6TyxjeTpELHgwMTotdSx5MDE6LWgseDExOk8qKGkvQy0xKSx5MTE6RCooaS9DLTEpfX1mdW5jdGlvbiBCU3QoKXt2YXIgZT1SRWUsdD1ORWUscj1xZSgwKSxuPW51bGwsaT1ERWUsbz1PRWUsYT16RWUscz1udWxsO2Z1bmN0aW9uIGwoKXt2YXIgYyx1LGg9K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpLGY9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpLHA9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyktSTUsZD1vLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1JNSxnPXIkKGQtcCksXz1kPnA7aWYoc3x8KHM9Yz13cygpKSxmPGgmJih1PWYsZj1oLGg9dSksIShmPmJvKSlzLm1vdmVUbygwLDApO2Vsc2UgaWYoZz5oYy1ibylzLm1vdmVUbyhmKm9nKHApLGYqX3UocCkpLHMuYXJjKDAsMCxmLHAsZCwhXyksaD5ibyYmKHMubW92ZVRvKGgqb2coZCksaCpfdShkKSkscy5hcmMoMCwwLGgsZCxwLF8pKTtlbHNle3ZhciB5PXAseD1kLGI9cCxTPWQsQz1nLFA9ZyxrPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpLzIsTz1rPmJvJiYobj8rbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6bHkoaCpoK2YqZikpLEQ9RDgociQoZi1oKS8yLCtyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksQj1ELEk9RCxMLFI7aWYoTz5ibyl7dmFyIEY9biQoTy9oKl91KGspKSx6PW4kKE8vZipfdShrKSk7KEMtPUYqMik+Ym8/KEYqPV8/MTotMSxiKz1GLFMtPUYpOihDPTAsYj1TPShwK2QpLzIpLChQLT16KjIpPmJvPyh6Kj1fPzE6LTEseSs9eix4LT16KTooUD0wLHk9eD0ocCtkKS8yKX12YXIgVT1mKm9nKHkpLFc9ZipfdSh5KSxaPWgqb2coUykscnQ9aCpfdShTKTtpZihEPmJvKXt2YXIgb3Q9ZipvZyh4KSxzdD1mKl91KHgpLFN0PWgqb2coYiksYnQ9aCpfdShiKSxNdDtpZihnPHl1JiYoTXQ9RkVlKFUsVyxTdCxidCxvdCxzdCxaLHJ0KSkpe3ZhciBsdD1VLU10WzBdLEt0PVctTXRbMV0sX3Q9b3QtTXRbMF0sY3Q9c3QtTXRbMV0sWD0xL191KEZTdCgobHQqX3QrS3QqY3QpLyhseShsdCpsdCtLdCpLdCkqbHkoX3QqX3QrY3QqY3QpKSkvMiksZXQ9bHkoTXRbMF0qTXRbMF0rTXRbMV0qTXRbMV0pO0I9RDgoRCwoaC1ldCkvKFgtMSkpLEk9RDgoRCwoZi1ldCkvKFgrMSkpfX1QPmJvP0k+Ym8/KEw9TzgoU3QsYnQsVSxXLGYsSSxfKSxSPU84KG90LHN0LFoscnQsZixJLF8pLHMubW92ZVRvKEwuY3grTC54MDEsTC5jeStMLnkwMSksSTxEP3MuYXJjKEwuY3gsTC5jeSxJLEJvKEwueTAxLEwueDAxKSxCbyhSLnkwMSxSLngwMSksIV8pOihzLmFyYyhMLmN4LEwuY3ksSSxCbyhMLnkwMSxMLngwMSksQm8oTC55MTEsTC54MTEpLCFfKSxzLmFyYygwLDAsZixCbyhMLmN5K0wueTExLEwuY3grTC54MTEpLEJvKFIuY3krUi55MTEsUi5jeCtSLngxMSksIV8pLHMuYXJjKFIuY3gsUi5jeSxJLEJvKFIueTExLFIueDExKSxCbyhSLnkwMSxSLngwMSksIV8pKSk6KHMubW92ZVRvKFUsVykscy5hcmMoMCwwLGYseSx4LCFfKSk6cy5tb3ZlVG8oVSxXKSwhKGg+Ym8pfHwhKEM+Ym8pP3MubGluZVRvKFoscnQpOkI+Ym8/KEw9TzgoWixydCxvdCxzdCxoLC1CLF8pLFI9TzgoVSxXLFN0LGJ0LGgsLUIsXykscy5saW5lVG8oTC5jeCtMLngwMSxMLmN5K0wueTAxKSxCPEQ/cy5hcmMoTC5jeCxMLmN5LEIsQm8oTC55MDEsTC54MDEpLEJvKFIueTAxLFIueDAxKSwhXyk6KHMuYXJjKEwuY3gsTC5jeSxCLEJvKEwueTAxLEwueDAxKSxCbyhMLnkxMSxMLngxMSksIV8pLHMuYXJjKDAsMCxoLEJvKEwuY3krTC55MTEsTC5jeCtMLngxMSksQm8oUi5jeStSLnkxMSxSLmN4K1IueDExKSxfKSxzLmFyYyhSLmN4LFIuY3ksQixCbyhSLnkxMSxSLngxMSksQm8oUi55MDEsUi54MDEpLCFfKSkpOnMuYXJjKDAsMCxoLFMsYixfKX1pZihzLmNsb3NlUGF0aCgpLGMpcmV0dXJuIHM9bnVsbCxjKyIifHxudWxsfXJldHVybiBsLmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIGM9KCtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLHU9KCtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK28uYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLXl1LzI7cmV0dXJuW29nKHUpKmMsX3UodSkqY119LGwuaW5uZXJSYWRpdXM9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpxZSgrYyksbCk6ZX0sbC5vdXRlclJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOnFlKCtjKSxsKTp0fSxsLmNvcm5lclJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOnFlKCtjKSxsKTpyfSxsLnBhZFJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1jPT1udWxsP251bGw6dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpxZSgrYyksbCk6bn0sbC5zdGFydEFuZ2xlPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6cWUoK2MpLGwpOml9LGwuZW5kQW5nbGU9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpxZSgrYyksbCk6b30sbC5wYWRBbmdsZT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOnFlKCtjKSxsKTphfSxsLmNvbnRleHQ9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9Yz09bnVsbD9udWxsOmMsbCk6c30sbH1mdW5jdGlvbiBIU3QoZSl7dGhpcy5fY29udGV4dD1lfUhTdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTticmVha319fTtmdW5jdGlvbiBqaChlKXtyZXR1cm4gbmV3IEhTdChlKX1mdW5jdGlvbiBYYihlKXtyZXR1cm4gZVswXX1mdW5jdGlvbiAkYihlKXtyZXR1cm4gZVsxXX1mdW5jdGlvbiB2dSgpe3ZhciBlPVhiLHQ9JGIscj1xZSghMCksbj1udWxsLGk9amgsbz1udWxsO2Z1bmN0aW9uIGEocyl7dmFyIGwsYz1zLmxlbmd0aCx1LGg9ITEsZjtmb3Iobj09bnVsbCYmKG89aShmPXdzKCkpKSxsPTA7bDw9YzsrK2wpIShsPGMmJnIodT1zW2xdLGwscykpPT09aCYmKChoPSFoKT9vLmxpbmVTdGFydCgpOm8ubGluZUVuZCgpKSxoJiZvLnBvaW50KCtlKHUsbCxzKSwrdCh1LGwscykpO2lmKGYpcmV0dXJuIG89bnVsbCxmKyIifHxudWxsfXJldHVybiBhLng9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpxZSgrcyksYSk6ZX0sYS55PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6cWUoK3MpLGEpOnR9LGEuZGVmaW5lZD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOnFlKCEhcyksYSk6cn0sYS5jdXJ2ZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1zLG4hPW51bGwmJihvPWkobikpLGEpOml9LGEuY29udGV4dD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz09bnVsbD9uPW89bnVsbDpvPWkobj1zKSxhKTpufSxhfWZ1bmN0aW9uIHo4KCl7dmFyIGU9WGIsdD1udWxsLHI9cWUoMCksbj0kYixpPXFlKCEwKSxvPW51bGwsYT1qaCxzPW51bGw7ZnVuY3Rpb24gbCh1KXt2YXIgaCxmLHAsZD11Lmxlbmd0aCxnLF89ITEseSx4PW5ldyBBcnJheShkKSxiPW5ldyBBcnJheShkKTtmb3Iobz09bnVsbCYmKHM9YSh5PXdzKCkpKSxoPTA7aDw9ZDsrK2gpe2lmKCEoaDxkJiZpKGc9dVtoXSxoLHUpKT09PV8paWYoXz0hXylmPWgscy5hcmVhU3RhcnQoKSxzLmxpbmVTdGFydCgpO2Vsc2V7Zm9yKHMubGluZUVuZCgpLHMubGluZVN0YXJ0KCkscD1oLTE7cD49ZjstLXApcy5wb2ludCh4W3BdLGJbcF0pO3MubGluZUVuZCgpLHMuYXJlYUVuZCgpfV8mJih4W2hdPStlKGcsaCx1KSxiW2hdPStyKGcsaCx1KSxzLnBvaW50KHQ/K3QoZyxoLHUpOnhbaF0sbj8rbihnLGgsdSk6YltoXSkpfWlmKHkpcmV0dXJuIHM9bnVsbCx5KyIifHxudWxsfWZ1bmN0aW9uIGMoKXtyZXR1cm4gdnUoKS5kZWZpbmVkKGkpLmN1cnZlKGEpLmNvbnRleHQobyl9cmV0dXJuIGwueD1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgdT09ImZ1bmN0aW9uIj91OnFlKCt1KSx0PW51bGwsbCk6ZX0sbC54MD1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgdT09ImZ1bmN0aW9uIj91OnFlKCt1KSxsKTplfSxsLngxPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXU9PW51bGw/bnVsbDp0eXBlb2YgdT09ImZ1bmN0aW9uIj91OnFlKCt1KSxsKTp0fSxsLnk9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpxZSgrdSksbj1udWxsLGwpOnJ9LGwueTA9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpxZSgrdSksbCk6cn0sbC55MT1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj11PT1udWxsP251bGw6dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpxZSgrdSksbCk6bn0sbC5saW5lWDA9bC5saW5lWTA9ZnVuY3Rpb24oKXtyZXR1cm4gYygpLngoZSkueShyKX0sbC5saW5lWTE9ZnVuY3Rpb24oKXtyZXR1cm4gYygpLngoZSkueShuKX0sbC5saW5lWDE9ZnVuY3Rpb24oKXtyZXR1cm4gYygpLngodCkueShyKX0sbC5kZWZpbmVkPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6cWUoISF1KSxsKTppfSxsLmN1cnZlPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXUsbyE9bnVsbCYmKHM9YShvKSksbCk6YX0sbC5jb250ZXh0PWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PT1udWxsP289cz1udWxsOnM9YShvPXUpLGwpOm99LGx9ZnVuY3Rpb24gVlN0KGUsdCl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfWZ1bmN0aW9uIFVTdChlKXtyZXR1cm4gZX1mdW5jdGlvbiBxU3QoKXt2YXIgZT1VU3QsdD1WU3Qscj1udWxsLG49cWUoMCksaT1xZShoYyksbz1xZSgwKTtmdW5jdGlvbiBhKHMpe3ZhciBsLGM9cy5sZW5ndGgsdSxoLGY9MCxwPW5ldyBBcnJheShjKSxkPW5ldyBBcnJheShjKSxnPStuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxfPU1hdGgubWluKGhjLE1hdGgubWF4KC1oYyxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1nKSkseSx4PU1hdGgubWluKE1hdGguYWJzKF8pL2Msby5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGI9eCooXzwwPy0xOjEpLFM7Zm9yKGw9MDtsPGM7KytsKShTPWRbcFtsXT1sXT0rZShzW2xdLGwscykpPjAmJihmKz1TKTtmb3IodCE9bnVsbD9wLnNvcnQoZnVuY3Rpb24oQyxQKXtyZXR1cm4gdChkW0NdLGRbUF0pfSk6ciE9bnVsbCYmcC5zb3J0KGZ1bmN0aW9uKEMsUCl7cmV0dXJuIHIoc1tDXSxzW1BdKX0pLGw9MCxoPWY/KF8tYypiKS9mOjA7bDxjOysrbCxnPXkpdT1wW2xdLFM9ZFt1XSx5PWcrKFM+MD9TKmg6MCkrYixkW3VdPXtkYXRhOnNbdV0saW5kZXg6bCx2YWx1ZTpTLHN0YXJ0QW5nbGU6ZyxlbmRBbmdsZTp5LHBhZEFuZ2xlOnh9O3JldHVybiBkfXJldHVybiBhLnZhbHVlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6cWUoK3MpLGEpOmV9LGEuc29ydFZhbHVlcz1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1zLHI9bnVsbCxhKTp0fSxhLnNvcnQ9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9cyx0PW51bGwsYSk6cn0sYS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6cWUoK3MpLGEpOm59LGEuZW5kQW5nbGU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpxZSgrcyksYSk6aX0sYS5wYWRBbmdsZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOnFlKCtzKSxhKTpvfSxhfXZhciBGOD1LYihqaCk7ZnVuY3Rpb24gR1N0KGUpe3RoaXMuX2N1cnZlPWV9R1N0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYVN0YXJ0KCl9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhRW5kKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuX2N1cnZlLnBvaW50KHQqTWF0aC5zaW4oZSksdCotTWF0aC5jb3MoZSkpfX07ZnVuY3Rpb24gS2IoZSl7ZnVuY3Rpb24gdChyKXtyZXR1cm4gbmV3IEdTdChlKHIpKX1yZXR1cm4gdC5fY3VydmU9ZSx0fWZ1bmN0aW9uIFpiKGUpe3ZhciB0PWUuY3VydmU7cmV0dXJuIGUuYW5nbGU9ZS54LGRlbGV0ZSBlLngsZS5yYWRpdXM9ZS55LGRlbGV0ZSBlLnksZS5jdXJ2ZT1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90KEtiKHIpKTp0KCkuX2N1cnZlfSxlfWZ1bmN0aW9uIGkkKCl7cmV0dXJuIFpiKHZ1KCkuY3VydmUoRjgpKX1mdW5jdGlvbiBvJCgpe3ZhciBlPXo4KCkuY3VydmUoRjgpLHQ9ZS5jdXJ2ZSxyPWUubGluZVgwLG49ZS5saW5lWDEsaT1lLmxpbmVZMCxvPWUubGluZVkxO3JldHVybiBlLmFuZ2xlPWUueCxkZWxldGUgZS54LGUuc3RhcnRBbmdsZT1lLngwLGRlbGV0ZSBlLngwLGUuZW5kQW5nbGU9ZS54MSxkZWxldGUgZS54MSxlLnJhZGl1cz1lLnksZGVsZXRlIGUueSxlLmlubmVyUmFkaXVzPWUueTAsZGVsZXRlIGUueTAsZS5vdXRlclJhZGl1cz1lLnkxLGRlbGV0ZSBlLnkxLGUubGluZVN0YXJ0QW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gWmIocigpKX0sZGVsZXRlIGUubGluZVgwLGUubGluZUVuZEFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIFpiKG4oKSl9LGRlbGV0ZSBlLmxpbmVYMSxlLmxpbmVJbm5lclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBaYihpKCkpfSxkZWxldGUgZS5saW5lWTAsZS5saW5lT3V0ZXJSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gWmIobygpKX0sZGVsZXRlIGUubGluZVkxLGUuY3VydmU9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dChLYihhKSk6dCgpLl9jdXJ2ZX0sZX1mdW5jdGlvbiBjeShlLHQpe3JldHVyblsodD0rdCkqTWF0aC5jb3MoZS09TWF0aC5QSS8yKSx0Kk1hdGguc2luKGUpXX12YXIgTDU9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIEJFZShlKXtyZXR1cm4gZS5zb3VyY2V9ZnVuY3Rpb24gSEVlKGUpe3JldHVybiBlLnRhcmdldH1mdW5jdGlvbiBhJChlKXt2YXIgdD1CRWUscj1IRWUsbj1YYixpPSRiLG89bnVsbDtmdW5jdGlvbiBhKCl7dmFyIHMsbD1MNS5jYWxsKGFyZ3VtZW50cyksYz10LmFwcGx5KHRoaXMsbCksdT1yLmFwcGx5KHRoaXMsbCk7aWYob3x8KG89cz13cygpKSxlKG8sK24uYXBwbHkodGhpcywobFswXT1jLGwpKSwraS5hcHBseSh0aGlzLGwpLCtuLmFwcGx5KHRoaXMsKGxbMF09dSxsKSksK2kuYXBwbHkodGhpcyxsKSkscylyZXR1cm4gbz1udWxsLHMrIiJ8fG51bGx9cmV0dXJuIGEuc291cmNlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXMsYSk6dH0sYS50YXJnZXQ9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9cyxhKTpyfSxhLng9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpxZSgrcyksYSk6bn0sYS55PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6cWUoK3MpLGEpOml9LGEuY29udGV4dD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1zPT1udWxsP251bGw6cyxhKTpvfSxhfWZ1bmN0aW9uIFZFZShlLHQscixuLGkpe2UubW92ZVRvKHQsciksZS5iZXppZXJDdXJ2ZVRvKHQ9KHQrbikvMixyLHQsaSxuLGkpfWZ1bmN0aW9uIFVFZShlLHQscixuLGkpe2UubW92ZVRvKHQsciksZS5iZXppZXJDdXJ2ZVRvKHQscj0ocitpKS8yLG4scixuLGkpfWZ1bmN0aW9uIHFFZShlLHQscixuLGkpe3ZhciBvPWN5KHQsciksYT1jeSh0LHI9KHIraSkvMikscz1jeShuLHIpLGw9Y3kobixpKTtlLm1vdmVUbyhvWzBdLG9bMV0pLGUuYmV6aWVyQ3VydmVUbyhhWzBdLGFbMV0sc1swXSxzWzFdLGxbMF0sbFsxXSl9ZnVuY3Rpb24gV1N0KCl7cmV0dXJuIGEkKFZFZSl9ZnVuY3Rpb24gWVN0KCl7cmV0dXJuIGEkKFVFZSl9ZnVuY3Rpb24galN0KCl7dmFyIGU9YSQocUVlKTtyZXR1cm4gZS5hbmdsZT1lLngsZGVsZXRlIGUueCxlLnJhZGl1cz1lLnksZGVsZXRlIGUueSxlfXZhciBrNT17ZHJhdzpmdW5jdGlvbihlLHQpe3ZhciByPU1hdGguc3FydCh0L3l1KTtlLm1vdmVUbyhyLDApLGUuYXJjKDAsMCxyLDAsaGMpfX07dmFyIEI4PXtkcmF3OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWF0aC5zcXJ0KHQvNSkvMjtlLm1vdmVUbygtMypyLC1yKSxlLmxpbmVUbygtciwtciksZS5saW5lVG8oLXIsLTMqciksZS5saW5lVG8ociwtMypyKSxlLmxpbmVUbyhyLC1yKSxlLmxpbmVUbygzKnIsLXIpLGUubGluZVRvKDMqcixyKSxlLmxpbmVUbyhyLHIpLGUubGluZVRvKHIsMypyKSxlLmxpbmVUbygtciwzKnIpLGUubGluZVRvKC1yLHIpLGUubGluZVRvKC0zKnIsciksZS5jbG9zZVBhdGgoKX19O3ZhciBYU3Q9TWF0aC5zcXJ0KC4zMzMzMzMzMzMzMzMzMzMzKSxHRWU9WFN0KjIsSDg9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLnNxcnQodC9HRWUpLG49cipYU3Q7ZS5tb3ZlVG8oMCwtciksZS5saW5lVG8obiwwKSxlLmxpbmVUbygwLHIpLGUubGluZVRvKC1uLDApLGUuY2xvc2VQYXRoKCl9fTt2YXIgV0VlPS44OTA4MTMwOTE1MjkyODUyLCRTdD1NYXRoLnNpbih5dS8xMCkvTWF0aC5zaW4oNyp5dS8xMCksWUVlPU1hdGguc2luKGhjLzEwKSokU3QsakVlPS1NYXRoLmNvcyhoYy8xMCkqJFN0LFY4PXtkcmF3OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWF0aC5zcXJ0KHQqV0VlKSxuPVlFZSpyLGk9akVlKnI7ZS5tb3ZlVG8oMCwtciksZS5saW5lVG8obixpKTtmb3IodmFyIG89MTtvPDU7KytvKXt2YXIgYT1oYypvLzUscz1NYXRoLmNvcyhhKSxsPU1hdGguc2luKGEpO2UubGluZVRvKGwqciwtcypyKSxlLmxpbmVUbyhzKm4tbCppLGwqbitzKmkpfWUuY2xvc2VQYXRoKCl9fTt2YXIgVTg9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLnNxcnQodCksbj0tci8yO2UucmVjdChuLG4scixyKX19O3ZhciBzJD1NYXRoLnNxcnQoMykscTg9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj0tTWF0aC5zcXJ0KHQvKHMkKjMpKTtlLm1vdmVUbygwLHIqMiksZS5saW5lVG8oLXMkKnIsLXIpLGUubGluZVRvKHMkKnIsLXIpLGUuY2xvc2VQYXRoKCl9fTt2YXIgZmM9LS41LHBjPU1hdGguc3FydCgzKS8yLGwkPTEvTWF0aC5zcXJ0KDEyKSxYRWU9KGwkLzIrMSkqMyxHOD17ZHJhdzpmdW5jdGlvbihlLHQpe3ZhciByPU1hdGguc3FydCh0L1hFZSksbj1yLzIsaT1yKmwkLG89bixhPXIqbCQrcixzPS1vLGw9YTtlLm1vdmVUbyhuLGkpLGUubGluZVRvKG8sYSksZS5saW5lVG8ocyxsKSxlLmxpbmVUbyhmYypuLXBjKmkscGMqbitmYyppKSxlLmxpbmVUbyhmYypvLXBjKmEscGMqbytmYyphKSxlLmxpbmVUbyhmYypzLXBjKmwscGMqcytmYypsKSxlLmxpbmVUbyhmYypuK3BjKmksZmMqaS1wYypuKSxlLmxpbmVUbyhmYypvK3BjKmEsZmMqYS1wYypvKSxlLmxpbmVUbyhmYypzK3BjKmwsZmMqbC1wYypzKSxlLmNsb3NlUGF0aCgpfX07dmFyIEtTdD1bazUsQjgsSDgsVTgsVjgscTgsRzhdO2Z1bmN0aW9uIFpTdCgpe3ZhciBlPXFlKGs1KSx0PXFlKDY0KSxyPW51bGw7ZnVuY3Rpb24gbigpe3ZhciBpO2lmKHJ8fChyPWk9d3MoKSksZS5hcHBseSh0aGlzLGFyZ3VtZW50cykuZHJhdyhyLCt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSksaSlyZXR1cm4gcj1udWxsLGkrIiJ8fG51bGx9cmV0dXJuIG4udHlwZT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOnFlKGkpLG4pOmV9LG4uc2l6ZT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOnFlKCtpKSxuKTp0fSxuLmNvbnRleHQ9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9aT09bnVsbD9udWxsOmksbik6cn0sbn1mdW5jdGlvbiBkYygpe31mdW5jdGlvbiBKYihlLHQscil7ZS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKCgyKmUuX3gwK2UuX3gxKS8zLCgyKmUuX3kwK2UuX3kxKS8zLChlLl94MCsyKmUuX3gxKS8zLChlLl95MCsyKmUuX3kxKS8zLChlLl94MCs0KmUuX3gxK3QpLzYsKGUuX3kwKzQqZS5feTErcikvNil9ZnVuY3Rpb24gUjUoZSl7dGhpcy5fY29udGV4dD1lfVI1LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDM6SmIodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKTticmVha30odGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOnRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fY29udGV4dC5saW5lVG8oKDUqdGhpcy5feDArdGhpcy5feDEpLzYsKDUqdGhpcy5feTArdGhpcy5feTEpLzYpO2RlZmF1bHQ6SmIodGhpcyxlLHQpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dH19O2Z1bmN0aW9uIFc4KGUpe3JldHVybiBuZXcgUjUoZSl9ZnVuY3Rpb24gSlN0KGUpe3RoaXMuX2NvbnRleHQ9ZX1KU3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZGMsYXJlYUVuZDpkYyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDI6e3RoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MisyKnRoaXMuX3gzKS8zLCh0aGlzLl95MisyKnRoaXMuX3kzKS8zKSx0aGlzLl9jb250ZXh0LmxpbmVUbygodGhpcy5feDMrMip0aGlzLl94MikvMywodGhpcy5feTMrMip0aGlzLl95MikvMyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDM6e3RoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpLHRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpO2JyZWFrfX19LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDI9ZSx0aGlzLl95Mj10O2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gzPWUsdGhpcy5feTM9dDticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94ND1lLHRoaXMuX3k0PXQsdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gwKzQqdGhpcy5feDErZSkvNiwodGhpcy5feTArNCp0aGlzLl95MSt0KS82KTticmVhaztkZWZhdWx0OkpiKHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXR9fTtmdW5jdGlvbiBRU3QoZSl7cmV0dXJuIG5ldyBKU3QoZSl9ZnVuY3Rpb24gdDN0KGUpe3RoaXMuX2NvbnRleHQ9ZX10M3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MykmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7dmFyIHI9KHRoaXMuX3gwKzQqdGhpcy5feDErZSkvNixuPSh0aGlzLl95MCs0KnRoaXMuX3kxK3QpLzY7dGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhyLG4pOnRoaXMuX2NvbnRleHQubW92ZVRvKHIsbik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpKYih0aGlzLGUsdCk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10fX07ZnVuY3Rpb24gZTN0KGUpe3JldHVybiBuZXcgdDN0KGUpfWZ1bmN0aW9uIHIzdChlLHQpe3RoaXMuX2Jhc2lzPW5ldyBSNShlKSx0aGlzLl9iZXRhPXR9cjN0LnByb3RvdHlwZT17bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdLHRoaXMuX2Jhc2lzLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5feCx0PXRoaXMuX3kscj1lLmxlbmd0aC0xO2lmKHI+MClmb3IodmFyIG49ZVswXSxpPXRbMF0sbz1lW3JdLW4sYT10W3JdLWkscz0tMSxsOysrczw9cjspbD1zL3IsdGhpcy5fYmFzaXMucG9pbnQodGhpcy5fYmV0YSplW3NdKygxLXRoaXMuX2JldGEpKihuK2wqbyksdGhpcy5fYmV0YSp0W3NdKygxLXRoaXMuX2JldGEpKihpK2wqYSkpO3RoaXMuX3g9dGhpcy5feT1udWxsLHRoaXMuX2Jhc2lzLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXt0aGlzLl94LnB1c2goK2UpLHRoaXMuX3kucHVzaCgrdCl9fTt2YXIgbjN0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gdD09PTE/bmV3IFI1KG4pOm5ldyByM3Qobix0KX1yZXR1cm4gci5iZXRhPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oLjg1KTtmdW5jdGlvbiBRYihlLHQscil7ZS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGUuX3gxK2UuX2sqKGUuX3gyLWUuX3gwKSxlLl95MStlLl9rKihlLl95Mi1lLl95MCksZS5feDIrZS5fayooZS5feDEtdCksZS5feTIrZS5fayooZS5feTEtciksZS5feDIsZS5feTIpfWZ1bmN0aW9uIFk4KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2s9KDEtdCkvNn1ZOC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6UWIodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gxPWUsdGhpcy5feTE9dDticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OlFiKHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fTt2YXIgaTN0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gbmV3IFk4KG4sdCl9cmV0dXJuIHIudGVuc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gZSgrbil9LHJ9KDApO2Z1bmN0aW9uIGo4KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2s9KDEtdCkvNn1qOC5wcm90b3R5cGU9e2FyZWFTdGFydDpkYyxhcmVhRW5kOmRjLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPWUsdGhpcy5feTM9dDticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND1lLHRoaXMuX3k0PXQpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PWUsdGhpcy5feTU9dDticmVhaztkZWZhdWx0OlFiKHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fTt2YXIgbzN0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gbmV3IGo4KG4sdCl9cmV0dXJuIHIudGVuc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gZSgrbil9LHJ9KDApO2Z1bmN0aW9uIFg4KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2s9KDEtdCkvNn1YOC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0zKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZT0rZSx0PSt0LHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpRYih0aGlzLGUsdCk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj10fX07dmFyIGEzdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIG5ldyBYOChuLHQpfXJldHVybiByLnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIGUoK24pfSxyfSgwKTtmdW5jdGlvbiBONShlLHQscil7dmFyIG49ZS5feDEsaT1lLl95MSxvPWUuX3gyLGE9ZS5feTI7aWYoZS5fbDAxX2E+Ym8pe3ZhciBzPTIqZS5fbDAxXzJhKzMqZS5fbDAxX2EqZS5fbDEyX2ErZS5fbDEyXzJhLGw9MyplLl9sMDFfYSooZS5fbDAxX2ErZS5fbDEyX2EpO249KG4qcy1lLl94MCplLl9sMTJfMmErZS5feDIqZS5fbDAxXzJhKS9sLGk9KGkqcy1lLl95MCplLl9sMTJfMmErZS5feTIqZS5fbDAxXzJhKS9sfWlmKGUuX2wyM19hPmJvKXt2YXIgYz0yKmUuX2wyM18yYSszKmUuX2wyM19hKmUuX2wxMl9hK2UuX2wxMl8yYSx1PTMqZS5fbDIzX2EqKGUuX2wyM19hK2UuX2wxMl9hKTtvPShvKmMrZS5feDEqZS5fbDIzXzJhLXQqZS5fbDEyXzJhKS91LGE9KGEqYytlLl95MSplLl9sMjNfMmEtciplLl9sMTJfMmEpL3V9ZS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG4saSxvLGEsZS5feDIsZS5feTIpfWZ1bmN0aW9uIHMzdChlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl9hbHBoYT10fXMzdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe2lmKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItZSxuPXRoaXMuX3kyLXQ7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0Ok41KHRoaXMsZSx0KTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj10fX07dmFyIGwzdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIHQ/bmV3IHMzdChuLHQpOm5ldyBZOChuLDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oLjUpO2Z1bmN0aW9uIGMzdChlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl9hbHBoYT10fWMzdC5wcm90b3R5cGU9e2FyZWFTdGFydDpkYyxhcmVhRW5kOmRjLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSxwb2ludDpmdW5jdGlvbihlLHQpe2lmKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItZSxuPXRoaXMuX3kyLXQ7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz1lLHRoaXMuX3kzPXQ7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9ZSx0aGlzLl95ND10KTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT1lLHRoaXMuX3k1PXQ7YnJlYWs7ZGVmYXVsdDpONSh0aGlzLGUsdCk7YnJlYWt9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9dH19O3ZhciB1M3Q9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiB0P25ldyBjM3Qobix0KTpuZXcgajgobiwwKX1yZXR1cm4gci5hbHBoYT1mdW5jdGlvbihuKXtyZXR1cm4gZSgrbil9LHJ9KC41KTtmdW5jdGlvbiBoM3QoZSx0KXt0aGlzLl9jb250ZXh0PWUsdGhpcy5fYWxwaGE9dH1oM3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MykmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7aWYoZT0rZSx0PSt0LHRoaXMuX3BvaW50KXt2YXIgcj10aGlzLl94Mi1lLG49dGhpcy5feTItdDt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KHIqcituKm4sdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0Ok41KHRoaXMsZSx0KTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj10fX07dmFyIGYzdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIHQ/bmV3IGgzdChuLHQpOm5ldyBYOChuLDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oLjUpO2Z1bmN0aW9uIHAzdChlKXt0aGlzLl9jb250ZXh0PWV9cDN0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmRjLGFyZWFFbmQ6ZGMsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxwb2ludDpmdW5jdGlvbihlLHQpe2U9K2UsdD0rdCx0aGlzLl9wb2ludD90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOih0aGlzLl9wb2ludD0xLHRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCkpfX07ZnVuY3Rpb24gZDN0KGUpe3JldHVybiBuZXcgcDN0KGUpfWZ1bmN0aW9uIG0zdChlKXtyZXR1cm4gZTwwPy0xOjF9ZnVuY3Rpb24gZzN0KGUsdCxyKXt2YXIgbj1lLl94MS1lLl94MCxpPXQtZS5feDEsbz0oZS5feTEtZS5feTApLyhufHxpPDAmJi0wKSxhPShyLWUuX3kxKS8oaXx8bjwwJiYtMCkscz0obyppK2EqbikvKG4raSk7cmV0dXJuKG0zdChvKSttM3QoYSkpKk1hdGgubWluKE1hdGguYWJzKG8pLE1hdGguYWJzKGEpLC41Kk1hdGguYWJzKHMpKXx8MH1mdW5jdGlvbiBfM3QoZSx0KXt2YXIgcj1lLl94MS1lLl94MDtyZXR1cm4gcj8oMyooZS5feTEtZS5feTApL3ItdCkvMjp0fWZ1bmN0aW9uIGMkKGUsdCxyKXt2YXIgbj1lLl94MCxpPWUuX3kwLG89ZS5feDEsYT1lLl95MSxzPShvLW4pLzM7ZS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG4rcyxpK3MqdCxvLXMsYS1zKnIsbyxhKX1mdW5jdGlvbiAkOChlKXt0aGlzLl9jb250ZXh0PWV9JDgucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5fdDA9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWs7Y2FzZSAzOmMkKHRoaXMsdGhpcy5fdDAsXzN0KHRoaXMsdGhpcy5fdDApKTticmVha30odGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TmFOO2lmKGU9K2UsdD0rdCwhKGU9PT10aGlzLl94MSYmdD09PXRoaXMuX3kxKSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MyxjJCh0aGlzLF8zdCh0aGlzLHI9ZzN0KHRoaXMsZSx0KSkscik7YnJlYWs7ZGVmYXVsdDpjJCh0aGlzLHRoaXMuX3QwLHI9ZzN0KHRoaXMsZSx0KSk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10LHRoaXMuX3QwPXJ9fX07ZnVuY3Rpb24geTN0KGUpe3RoaXMuX2NvbnRleHQ9bmV3IHYzdChlKX0oeTN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKCQ4LnByb3RvdHlwZSkpLnBvaW50PWZ1bmN0aW9uKGUsdCl7JDgucHJvdG90eXBlLnBvaW50LmNhbGwodGhpcyx0LGUpfTtmdW5jdGlvbiB2M3QoZSl7dGhpcy5fY29udGV4dD1lfXYzdC5wcm90b3R5cGU9e21vdmVUbzpmdW5jdGlvbihlLHQpe3RoaXMuX2NvbnRleHQubW92ZVRvKHQsZSl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LGxpbmVUbzpmdW5jdGlvbihlLHQpe3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSl9LGJlemllckN1cnZlVG86ZnVuY3Rpb24oZSx0LHIsbixpLG8pe3RoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh0LGUsbixyLG8saSl9fTtmdW5jdGlvbiB4M3QoZSl7cmV0dXJuIG5ldyAkOChlKX1mdW5jdGlvbiBiM3QoZSl7cmV0dXJuIG5ldyB5M3QoZSl9ZnVuY3Rpb24gUzN0KGUpe3RoaXMuX2NvbnRleHQ9ZX1TM3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5feCx0PXRoaXMuX3kscj1lLmxlbmd0aDtpZihyKWlmKHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZVswXSx0WzBdKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlWzBdLHRbMF0pLHI9PT0yKXRoaXMuX2NvbnRleHQubGluZVRvKGVbMV0sdFsxXSk7ZWxzZSBmb3IodmFyIG49dzN0KGUpLGk9dzN0KHQpLG89MCxhPTE7YTxyOysrbywrK2EpdGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG5bMF1bb10saVswXVtvXSxuWzFdW29dLGlbMV1bb10sZVthXSx0W2FdKTsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnI9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSx0aGlzLl94PXRoaXMuX3k9bnVsbH0scG9pbnQ6ZnVuY3Rpb24oZSx0KXt0aGlzLl94LnB1c2goK2UpLHRoaXMuX3kucHVzaCgrdCl9fTtmdW5jdGlvbiB3M3QoZSl7dmFyIHQscj1lLmxlbmd0aC0xLG4saT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkociksYT1uZXcgQXJyYXkocik7Zm9yKGlbMF09MCxvWzBdPTIsYVswXT1lWzBdKzIqZVsxXSx0PTE7dDxyLTE7Kyt0KWlbdF09MSxvW3RdPTQsYVt0XT00KmVbdF0rMiplW3QrMV07Zm9yKGlbci0xXT0yLG9bci0xXT03LGFbci0xXT04KmVbci0xXStlW3JdLHQ9MTt0PHI7Kyt0KW49aVt0XS9vW3QtMV0sb1t0XS09bixhW3RdLT1uKmFbdC0xXTtmb3IoaVtyLTFdPWFbci0xXS9vW3ItMV0sdD1yLTI7dD49MDstLXQpaVt0XT0oYVt0XS1pW3QrMV0pL29bdF07Zm9yKG9bci0xXT0oZVtyXStpW3ItMV0pLzIsdD0wO3Q8ci0xOysrdClvW3RdPTIqZVt0KzFdLWlbdCsxXTtyZXR1cm5baSxvXX1mdW5jdGlvbiBNM3QoZSl7cmV0dXJuIG5ldyBTM3QoZSl9ZnVuY3Rpb24gSzgoZSx0KXt0aGlzLl9jb250ZXh0PWUsdGhpcy5fdD10fUs4LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9dGhpcy5feT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA8dGhpcy5fdCYmdGhpcy5fdDwxJiZ0aGlzLl9wb2ludD09PTImJnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsdGhpcy5feSksKHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU+PTAmJih0aGlzLl90PTEtdGhpcy5fdCx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSl9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOnRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp7aWYodGhpcy5fdDw9MCl0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LHQpLHRoaXMuX2NvbnRleHQubGluZVRvKGUsdCk7ZWxzZXt2YXIgcj10aGlzLl94KigxLXRoaXMuX3QpK2UqdGhpcy5fdDt0aGlzLl9jb250ZXh0LmxpbmVUbyhyLHRoaXMuX3kpLHRoaXMuX2NvbnRleHQubGluZVRvKHIsdCl9YnJlYWt9fXRoaXMuX3g9ZSx0aGlzLl95PXR9fTtmdW5jdGlvbiBFM3QoZSl7cmV0dXJuIG5ldyBLOChlLC41KX1mdW5jdGlvbiBUM3QoZSl7cmV0dXJuIG5ldyBLOChlLDApfWZ1bmN0aW9uIEMzdChlKXtyZXR1cm4gbmV3IEs4KGUsMSl9ZnVuY3Rpb24geHUoZSx0KXtpZigoYT1lLmxlbmd0aCk+MSlmb3IodmFyIHI9MSxuLGksbz1lW3RbMF1dLGEscz1vLmxlbmd0aDtyPGE7KytyKWZvcihpPW8sbz1lW3Rbcl1dLG49MDtuPHM7KytuKW9bbl1bMV0rPW9bbl1bMF09aXNOYU4oaVtuXVsxXSk/aVtuXVswXTppW25dWzFdfWZ1bmN0aW9uIGJ1KGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyPW5ldyBBcnJheSh0KTstLXQ+PTA7KXJbdF09dDtyZXR1cm4gcn1mdW5jdGlvbiAkRWUoZSx0KXtyZXR1cm4gZVt0XX1mdW5jdGlvbiBBM3QoKXt2YXIgZT1xZShbXSksdD1idSxyPXh1LG49JEVlO2Z1bmN0aW9uIGkobyl7dmFyIGE9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cykscyxsPW8ubGVuZ3RoLGM9YS5sZW5ndGgsdT1uZXcgQXJyYXkoYyksaDtmb3Iocz0wO3M8YzsrK3Mpe2Zvcih2YXIgZj1hW3NdLHA9dVtzXT1uZXcgQXJyYXkobCksZD0wLGc7ZDxsOysrZClwW2RdPWc9WzAsK24ob1tkXSxmLGQsbyldLGcuZGF0YT1vW2RdO3Aua2V5PWZ9Zm9yKHM9MCxoPXQodSk7czxjOysrcyl1W2hbc11dLmluZGV4PXM7cmV0dXJuIHIodSxoKSx1fXJldHVybiBpLmtleXM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIG89PSJmdW5jdGlvbiI/bzpxZShMNS5jYWxsKG8pKSxpKTplfSxpLnZhbHVlPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBvPT0iZnVuY3Rpb24iP286cWUoK28pLGkpOm59LGkub3JkZXI9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bz09bnVsbD9idTp0eXBlb2Ygbz09ImZ1bmN0aW9uIj9vOnFlKEw1LmNhbGwobykpLGkpOnR9LGkub2Zmc2V0PWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW89PW51bGw/eHU6byxpKTpyfSxpfWZ1bmN0aW9uIFAzdChlLHQpe2lmKChuPWUubGVuZ3RoKT4wKXtmb3IodmFyIHIsbixpPTAsbz1lWzBdLmxlbmd0aCxhO2k8bzsrK2kpe2ZvcihhPXI9MDtyPG47KytyKWErPWVbcl1baV1bMV18fDA7aWYoYSlmb3Iocj0wO3I8bjsrK3IpZVtyXVtpXVsxXS89YX14dShlLHQpfX1mdW5jdGlvbiBJM3QoZSx0KXtpZigobD1lLmxlbmd0aCk+MClmb3IodmFyIHIsbj0wLGksbyxhLHMsbCxjPWVbdFswXV0ubGVuZ3RoO248YzsrK24pZm9yKGE9cz0wLHI9MDtyPGw7KytyKShvPShpPWVbdFtyXV1bbl0pWzFdLWlbMF0pPjA/KGlbMF09YSxpWzFdPWErPW8pOm88MD8oaVsxXT1zLGlbMF09cys9byk6KGlbMF09MCxpWzFdPW8pfWZ1bmN0aW9uIEwzdChlLHQpe2lmKChpPWUubGVuZ3RoKT4wKXtmb3IodmFyIHI9MCxuPWVbdFswXV0saSxvPW4ubGVuZ3RoO3I8bzsrK3Ipe2Zvcih2YXIgYT0wLHM9MDthPGk7KythKXMrPWVbYV1bcl1bMV18fDA7bltyXVsxXSs9bltyXVswXT0tcy8yfXh1KGUsdCl9fWZ1bmN0aW9uIGszdChlLHQpe2lmKCEoISgoYT1lLmxlbmd0aCk+MCl8fCEoKG89KGk9ZVt0WzBdXSkubGVuZ3RoKT4wKSkpe2Zvcih2YXIgcj0wLG49MSxpLG8sYTtuPG87KytuKXtmb3IodmFyIHM9MCxsPTAsYz0wO3M8YTsrK3Mpe2Zvcih2YXIgdT1lW3Rbc11dLGg9dVtuXVsxXXx8MCxmPXVbbi0xXVsxXXx8MCxwPShoLWYpLzIsZD0wO2Q8czsrK2Qpe3ZhciBnPWVbdFtkXV0sXz1nW25dWzFdfHwwLHk9Z1tuLTFdWzFdfHwwO3ArPV8teX1sKz1oLGMrPXAqaH1pW24tMV1bMV0rPWlbbi0xXVswXT1yLGwmJihyLT1jL2wpfWlbbi0xXVsxXSs9aVtuLTFdWzBdPXIseHUoZSx0KX19ZnVuY3Rpb24gWjgoZSl7dmFyIHQ9ZS5tYXAoS0VlKTtyZXR1cm4gYnUoZSkuc29ydChmdW5jdGlvbihyLG4pe3JldHVybiB0W3JdLXRbbl19KX1mdW5jdGlvbiBLRWUoZSl7Zm9yKHZhciB0PS0xLHI9MCxuPWUubGVuZ3RoLGksbz0tMS8wOysrdDxuOykoaT0rZVt0XVsxXSk+byYmKG89aSxyPXQpO3JldHVybiByfWZ1bmN0aW9uIEo4KGUpe3ZhciB0PWUubWFwKHUkKTtyZXR1cm4gYnUoZSkuc29ydChmdW5jdGlvbihyLG4pe3JldHVybiB0W3JdLXRbbl19KX1mdW5jdGlvbiB1JChlKXtmb3IodmFyIHQ9MCxyPS0xLG49ZS5sZW5ndGgsaTsrK3I8bjspKGk9K2Vbcl1bMV0pJiYodCs9aSk7cmV0dXJuIHR9ZnVuY3Rpb24gUjN0KGUpe3JldHVybiBKOChlKS5yZXZlcnNlKCl9ZnVuY3Rpb24gTjN0KGUpe3ZhciB0PWUubGVuZ3RoLHIsbixpPWUubWFwKHUkKSxvPVo4KGUpLGE9MCxzPTAsbD1bXSxjPVtdO2ZvcihyPTA7cjx0OysrciluPW9bcl0sYTxzPyhhKz1pW25dLGwucHVzaChuKSk6KHMrPWlbbl0sYy5wdXNoKG4pKTtyZXR1cm4gYy5yZXZlcnNlKCkuY29uY2F0KGwpfWZ1bmN0aW9uIEQzdChlKXtyZXR1cm4gYnUoZSkucmV2ZXJzZSgpfWZ1bmN0aW9uIGgkKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBPM3QoZSl7cmV0dXJuIGVbMF19ZnVuY3Rpb24gejN0KGUpe3JldHVybiBlWzFdfWZ1bmN0aW9uIGYkKCl7dGhpcy5fPW51bGx9ZnVuY3Rpb24gdDIoZSl7ZS5VPWUuQz1lLkw9ZS5SPWUuUD1lLk49bnVsbH1mJC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmYkLGluc2VydDpmdW5jdGlvbihlLHQpe3ZhciByLG4saTtpZihlKXtpZih0LlA9ZSx0Lk49ZS5OLGUuTiYmKGUuTi5QPXQpLGUuTj10LGUuUil7Zm9yKGU9ZS5SO2UuTDspZT1lLkw7ZS5MPXR9ZWxzZSBlLlI9dDtyPWV9ZWxzZSB0aGlzLl8/KGU9RjN0KHRoaXMuXyksdC5QPW51bGwsdC5OPWUsZS5QPWUuTD10LHI9ZSk6KHQuUD10Lk49bnVsbCx0aGlzLl89dCxyPW51bGwpO2Zvcih0Lkw9dC5SPW51bGwsdC5VPXIsdC5DPSEwLGU9dDtyJiZyLkM7KW49ci5VLHI9PT1uLkw/KGk9bi5SLGkmJmkuQz8oci5DPWkuQz0hMSxuLkM9ITAsZT1uKTooZT09PXIuUiYmKEQ1KHRoaXMsciksZT1yLHI9ZS5VKSxyLkM9ITEsbi5DPSEwLE81KHRoaXMsbikpKTooaT1uLkwsaSYmaS5DPyhyLkM9aS5DPSExLG4uQz0hMCxlPW4pOihlPT09ci5MJiYoTzUodGhpcyxyKSxlPXIscj1lLlUpLHIuQz0hMSxuLkM9ITAsRDUodGhpcyxuKSkpLHI9ZS5VO3RoaXMuXy5DPSExfSxyZW1vdmU6ZnVuY3Rpb24oZSl7ZS5OJiYoZS5OLlA9ZS5QKSxlLlAmJihlLlAuTj1lLk4pLGUuTj1lLlA9bnVsbDt2YXIgdD1lLlUscixuPWUuTCxpPWUuUixvLGE7aWYobj9pP289RjN0KGkpOm89bjpvPWksdD90Lkw9PT1lP3QuTD1vOnQuUj1vOnRoaXMuXz1vLG4mJmk/KGE9by5DLG8uQz1lLkMsby5MPW4sbi5VPW8sbyE9PWk/KHQ9by5VLG8uVT1lLlUsZT1vLlIsdC5MPWUsby5SPWksaS5VPW8pOihvLlU9dCx0PW8sZT1vLlIpKTooYT1lLkMsZT1vKSxlJiYoZS5VPXQpLCFhKXtpZihlJiZlLkMpe2UuQz0hMTtyZXR1cm59ZG97aWYoZT09PXRoaXMuXylicmVhaztpZihlPT09dC5MKXtpZihyPXQuUixyLkMmJihyLkM9ITEsdC5DPSEwLEQ1KHRoaXMsdCkscj10LlIpLHIuTCYmci5MLkN8fHIuUiYmci5SLkMpeyghci5SfHwhci5SLkMpJiYoci5MLkM9ITEsci5DPSEwLE81KHRoaXMscikscj10LlIpLHIuQz10LkMsdC5DPXIuUi5DPSExLEQ1KHRoaXMsdCksZT10aGlzLl87YnJlYWt9fWVsc2UgaWYocj10Lkwsci5DJiYoci5DPSExLHQuQz0hMCxPNSh0aGlzLHQpLHI9dC5MKSxyLkwmJnIuTC5DfHxyLlImJnIuUi5DKXsoIXIuTHx8IXIuTC5DKSYmKHIuUi5DPSExLHIuQz0hMCxENSh0aGlzLHIpLHI9dC5MKSxyLkM9dC5DLHQuQz1yLkwuQz0hMSxPNSh0aGlzLHQpLGU9dGhpcy5fO2JyZWFrfXIuQz0hMCxlPXQsdD10LlV9d2hpbGUoIWUuQyk7ZSYmKGUuQz0hMSl9fX07ZnVuY3Rpb24gRDUoZSx0KXt2YXIgcj10LG49dC5SLGk9ci5VO2k/aS5MPT09cj9pLkw9bjppLlI9bjplLl89bixuLlU9aSxyLlU9bixyLlI9bi5MLHIuUiYmKHIuUi5VPXIpLG4uTD1yfWZ1bmN0aW9uIE81KGUsdCl7dmFyIHI9dCxuPXQuTCxpPXIuVTtpP2kuTD09PXI/aS5MPW46aS5SPW46ZS5fPW4sbi5VPWksci5VPW4sci5MPW4uUixyLkwmJihyLkwuVT1yKSxuLlI9cn1mdW5jdGlvbiBGM3QoZSl7Zm9yKDtlLkw7KWU9ZS5MO3JldHVybiBlfXZhciBwJD1mJDtmdW5jdGlvbiBlMihlLHQscixuKXt2YXIgaT1bbnVsbCxudWxsXSxvPXdvLnB1c2goaSktMTtyZXR1cm4gaS5sZWZ0PWUsaS5yaWdodD10LHImJno1KGksZSx0LHIpLG4mJno1KGksdCxlLG4pLFVhW2UuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKG8pLFVhW3QuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKG8pLGl9ZnVuY3Rpb24gcjIoZSx0LHIpe3ZhciBuPVt0LHJdO3JldHVybiBuLmxlZnQ9ZSxufWZ1bmN0aW9uIHo1KGUsdCxyLG4peyFlWzBdJiYhZVsxXT8oZVswXT1uLGUubGVmdD10LGUucmlnaHQ9cik6ZS5sZWZ0PT09cj9lWzFdPW46ZVswXT1ufWZ1bmN0aW9uIFpFZShlLHQscixuLGkpe3ZhciBvPWVbMF0sYT1lWzFdLHM9b1swXSxsPW9bMV0sYz1hWzBdLHU9YVsxXSxoPTAsZj0xLHA9Yy1zLGQ9dS1sLGc7aWYoZz10LXMsISghcCYmZz4wKSl7aWYoZy89cCxwPDApe2lmKGc8aClyZXR1cm47ZzxmJiYoZj1nKX1lbHNlIGlmKHA+MCl7aWYoZz5mKXJldHVybjtnPmgmJihoPWcpfWlmKGc9bi1zLCEoIXAmJmc8MCkpe2lmKGcvPXAscDwwKXtpZihnPmYpcmV0dXJuO2c+aCYmKGg9Zyl9ZWxzZSBpZihwPjApe2lmKGc8aClyZXR1cm47ZzxmJiYoZj1nKX1pZihnPXItbCwhKCFkJiZnPjApKXtpZihnLz1kLGQ8MCl7aWYoZzxoKXJldHVybjtnPGYmJihmPWcpfWVsc2UgaWYoZD4wKXtpZihnPmYpcmV0dXJuO2c+aCYmKGg9Zyl9aWYoZz1pLWwsISghZCYmZzwwKSl7aWYoZy89ZCxkPDApe2lmKGc+ZilyZXR1cm47Zz5oJiYoaD1nKX1lbHNlIGlmKGQ+MCl7aWYoZzxoKXJldHVybjtnPGYmJihmPWcpfXJldHVybiEoaD4wKSYmIShmPDEpfHwoaD4wJiYoZVswXT1bcytoKnAsbCtoKmRdKSxmPDEmJihlWzFdPVtzK2YqcCxsK2YqZF0pKSwhMH19fX19ZnVuY3Rpb24gSkVlKGUsdCxyLG4saSl7dmFyIG89ZVsxXTtpZihvKXJldHVybiEwO3ZhciBhPWVbMF0scz1lLmxlZnQsbD1lLnJpZ2h0LGM9c1swXSx1PXNbMV0saD1sWzBdLGY9bFsxXSxwPShjK2gpLzIsZD0odStmKS8yLGcsXztpZihmPT09dSl7aWYocDx0fHxwPj1uKXJldHVybjtpZihjPmgpe2lmKCFhKWE9W3Ascl07ZWxzZSBpZihhWzFdPj1pKXJldHVybjtvPVtwLGldfWVsc2V7aWYoIWEpYT1bcCxpXTtlbHNlIGlmKGFbMV08cilyZXR1cm47bz1bcCxyXX19ZWxzZSBpZihnPShjLWgpLyhmLXUpLF89ZC1nKnAsZzwtMXx8Zz4xKWlmKGM+aCl7aWYoIWEpYT1bKHItXykvZyxyXTtlbHNlIGlmKGFbMV0+PWkpcmV0dXJuO289WyhpLV8pL2csaV19ZWxzZXtpZighYSlhPVsoaS1fKS9nLGldO2Vsc2UgaWYoYVsxXTxyKXJldHVybjtvPVsoci1fKS9nLHJdfWVsc2UgaWYodTxmKXtpZighYSlhPVt0LGcqdCtfXTtlbHNlIGlmKGFbMF0+PW4pcmV0dXJuO289W24sZypuK19dfWVsc2V7aWYoIWEpYT1bbixnKm4rX107ZWxzZSBpZihhWzBdPHQpcmV0dXJuO289W3QsZyp0K19dfXJldHVybiBlWzBdPWEsZVsxXT1vLCEwfWZ1bmN0aW9uIEIzdChlLHQscixuKXtmb3IodmFyIGk9d28ubGVuZ3RoLG87aS0tOykoIUpFZShvPXdvW2ldLGUsdCxyLG4pfHwhWkVlKG8sZSx0LHIsbil8fCEoTWF0aC5hYnMob1swXVswXS1vWzFdWzBdKT5Icnx8TWF0aC5hYnMob1swXVsxXS1vWzFdWzFdKT5IcikpJiZkZWxldGUgd29baV19ZnVuY3Rpb24gSDN0KGUpe3JldHVybiBVYVtlLmluZGV4XT17c2l0ZTplLGhhbGZlZGdlczpbXX19ZnVuY3Rpb24gUUVlKGUsdCl7dmFyIHI9ZS5zaXRlLG49dC5sZWZ0LGk9dC5yaWdodDtyZXR1cm4gcj09PWkmJihpPW4sbj1yKSxpP01hdGguYXRhbjIoaVsxXS1uWzFdLGlbMF0tblswXSk6KHI9PT1uPyhuPXRbMV0saT10WzBdKToobj10WzBdLGk9dFsxXSksTWF0aC5hdGFuMihuWzBdLWlbMF0saVsxXS1uWzFdKSl9ZnVuY3Rpb24gZCQoZSx0KXtyZXR1cm4gdFsrKHQubGVmdCE9PWUuc2l0ZSldfWZ1bmN0aW9uIHQ1ZShlLHQpe3JldHVybiB0WysodC5sZWZ0PT09ZS5zaXRlKV19ZnVuY3Rpb24gVjN0KCl7Zm9yKHZhciBlPTAsdD1VYS5sZW5ndGgscixuLGksbztlPHQ7KytlKWlmKChyPVVhW2VdKSYmKG89KG49ci5oYWxmZWRnZXMpLmxlbmd0aCkpe3ZhciBhPW5ldyBBcnJheShvKSxzPW5ldyBBcnJheShvKTtmb3IoaT0wO2k8bzsrK2kpYVtpXT1pLHNbaV09UUVlKHIsd29bbltpXV0pO2ZvcihhLnNvcnQoZnVuY3Rpb24obCxjKXtyZXR1cm4gc1tjXS1zW2xdfSksaT0wO2k8bzsrK2kpc1tpXT1uW2FbaV1dO2ZvcihpPTA7aTxvOysraSluW2ldPXNbaV19fWZ1bmN0aW9uIFUzdChlLHQscixuKXt2YXIgaT1VYS5sZW5ndGgsbyxhLHMsbCxjLHUsaCxmLHAsZCxnLF8seT0hMDtmb3Iobz0wO288aTsrK28paWYoYT1VYVtvXSl7Zm9yKHM9YS5zaXRlLGM9YS5oYWxmZWRnZXMsbD1jLmxlbmd0aDtsLS07KXdvW2NbbF1dfHxjLnNwbGljZShsLDEpO2ZvcihsPTAsdT1jLmxlbmd0aDtsPHU7KWQ9dDVlKGEsd29bY1tsXV0pLGc9ZFswXSxfPWRbMV0saD1kJChhLHdvW2NbKytsJXVdXSksZj1oWzBdLHA9aFsxXSwoTWF0aC5hYnMoZy1mKT5Icnx8TWF0aC5hYnMoXy1wKT5IcikmJihjLnNwbGljZShsLDAsd28ucHVzaChyMihzLGQsTWF0aC5hYnMoZy1lKTxIciYmbi1fPkhyP1tlLE1hdGguYWJzKGYtZSk8SHI/cDpuXTpNYXRoLmFicyhfLW4pPEhyJiZyLWc+SHI/W01hdGguYWJzKHAtbik8SHI/ZjpyLG5dOk1hdGguYWJzKGctcik8SHImJl8tdD5Icj9bcixNYXRoLmFicyhmLXIpPEhyP3A6dF06TWF0aC5hYnMoXy10KTxIciYmZy1lPkhyP1tNYXRoLmFicyhwLXQpPEhyP2Y6ZSx0XTpudWxsKSktMSksKyt1KTt1JiYoeT0hMSl9aWYoeSl7dmFyIHgsYixTLEM9MS8wO2ZvcihvPTAseT1udWxsO288aTsrK28pKGE9VWFbb10pJiYocz1hLnNpdGUseD1zWzBdLWUsYj1zWzFdLXQsUz14KngrYipiLFM8QyYmKEM9Uyx5PWEpKTtpZih5KXt2YXIgUD1bZSx0XSxrPVtlLG5dLE89W3Isbl0sRD1bcix0XTt5LmhhbGZlZGdlcy5wdXNoKHdvLnB1c2gocjIocz15LnNpdGUsUCxrKSktMSx3by5wdXNoKHIyKHMsayxPKSktMSx3by5wdXNoKHIyKHMsTyxEKSktMSx3by5wdXNoKHIyKHMsRCxQKSktMSl9fWZvcihvPTA7bzxpOysrbykoYT1VYVtvXSkmJihhLmhhbGZlZGdlcy5sZW5ndGh8fGRlbGV0ZSBVYVtvXSl9dmFyIHEzdD1bXSxRODtmdW5jdGlvbiBlNWUoKXt0Mih0aGlzKSx0aGlzLng9dGhpcy55PXRoaXMuYXJjPXRoaXMuc2l0ZT10aGlzLmN5PW51bGx9ZnVuY3Rpb24gdXkoZSl7dmFyIHQ9ZS5QLHI9ZS5OO2lmKCEoIXR8fCFyKSl7dmFyIG49dC5zaXRlLGk9ZS5zaXRlLG89ci5zaXRlO2lmKG4hPT1vKXt2YXIgYT1pWzBdLHM9aVsxXSxsPW5bMF0tYSxjPW5bMV0tcyx1PW9bMF0tYSxoPW9bMV0tcyxmPTIqKGwqaC1jKnUpO2lmKCEoZj49LUczdCkpe3ZhciBwPWwqbCtjKmMsZD11KnUraCpoLGc9KGgqcC1jKmQpL2YsXz0obCpkLXUqcCkvZix5PXEzdC5wb3AoKXx8bmV3IGU1ZTt5LmFyYz1lLHkuc2l0ZT1pLHkueD1nK2EseS55PSh5LmN5PV8rcykrTWF0aC5zcXJ0KGcqZytfKl8pLGUuY2lyY2xlPXk7Zm9yKHZhciB4PW51bGwsYj1uMi5fO2I7KWlmKHkueTxiLnl8fHkueT09PWIueSYmeS54PD1iLngpaWYoYi5MKWI9Yi5MO2Vsc2V7eD1iLlA7YnJlYWt9ZWxzZSBpZihiLlIpYj1iLlI7ZWxzZXt4PWI7YnJlYWt9bjIuaW5zZXJ0KHgseSkseHx8KFE4PXkpfX19fWZ1bmN0aW9uIGh5KGUpe3ZhciB0PWUuY2lyY2xlO3QmJih0LlB8fChROD10Lk4pLG4yLnJlbW92ZSh0KSxxM3QucHVzaCh0KSx0Mih0KSxlLmNpcmNsZT1udWxsKX12YXIgWTN0PVtdO2Z1bmN0aW9uIHI1ZSgpe3QyKHRoaXMpLHRoaXMuZWRnZT10aGlzLnNpdGU9dGhpcy5jaXJjbGU9bnVsbH1mdW5jdGlvbiBXM3QoZSl7dmFyIHQ9WTN0LnBvcCgpfHxuZXcgcjVlO3JldHVybiB0LnNpdGU9ZSx0fWZ1bmN0aW9uIG0kKGUpe2h5KGUpLGZ5LnJlbW92ZShlKSxZM3QucHVzaChlKSx0MihlKX1mdW5jdGlvbiBqM3QoZSl7dmFyIHQ9ZS5jaXJjbGUscj10Lngsbj10LmN5LGk9W3Isbl0sbz1lLlAsYT1lLk4scz1bZV07bSQoZSk7Zm9yKHZhciBsPW87bC5jaXJjbGUmJk1hdGguYWJzKHItbC5jaXJjbGUueCk8SHImJk1hdGguYWJzKG4tbC5jaXJjbGUuY3kpPEhyOylvPWwuUCxzLnVuc2hpZnQobCksbSQobCksbD1vO3MudW5zaGlmdChsKSxoeShsKTtmb3IodmFyIGM9YTtjLmNpcmNsZSYmTWF0aC5hYnMoci1jLmNpcmNsZS54KTxIciYmTWF0aC5hYnMobi1jLmNpcmNsZS5jeSk8SHI7KWE9Yy5OLHMucHVzaChjKSxtJChjKSxjPWE7cy5wdXNoKGMpLGh5KGMpO3ZhciB1PXMubGVuZ3RoLGg7Zm9yKGg9MTtoPHU7KytoKWM9c1toXSxsPXNbaC0xXSx6NShjLmVkZ2UsbC5zaXRlLGMuc2l0ZSxpKTtsPXNbMF0sYz1zW3UtMV0sYy5lZGdlPWUyKGwuc2l0ZSxjLnNpdGUsbnVsbCxpKSx1eShsKSx1eShjKX1mdW5jdGlvbiBYM3QoZSl7Zm9yKHZhciB0PWVbMF0scj1lWzFdLG4saSxvLGEscz1meS5fO3M7KWlmKG89JDN0KHMsciktdCxvPkhyKXM9cy5MO2Vsc2UgaWYoYT10LW41ZShzLHIpLGE+SHIpe2lmKCFzLlIpe249czticmVha31zPXMuUn1lbHNle28+LUhyPyhuPXMuUCxpPXMpOmE+LUhyPyhuPXMsaT1zLk4pOm49aT1zO2JyZWFrfUgzdChlKTt2YXIgbD1XM3QoZSk7aWYoZnkuaW5zZXJ0KG4sbCksISghbiYmIWkpKXtpZihuPT09aSl7aHkobiksaT1XM3Qobi5zaXRlKSxmeS5pbnNlcnQobCxpKSxsLmVkZ2U9aS5lZGdlPWUyKG4uc2l0ZSxsLnNpdGUpLHV5KG4pLHV5KGkpO3JldHVybn1pZighaSl7bC5lZGdlPWUyKG4uc2l0ZSxsLnNpdGUpO3JldHVybn1oeShuKSxoeShpKTt2YXIgYz1uLnNpdGUsdT1jWzBdLGg9Y1sxXSxmPWVbMF0tdSxwPWVbMV0taCxkPWkuc2l0ZSxnPWRbMF0tdSxfPWRbMV0taCx5PTIqKGYqXy1wKmcpLHg9ZipmK3AqcCxiPWcqZytfKl8sUz1bKF8qeC1wKmIpL3krdSwoZipiLWcqeCkveStoXTt6NShpLmVkZ2UsYyxkLFMpLGwuZWRnZT1lMihjLGUsbnVsbCxTKSxpLmVkZ2U9ZTIoZSxkLG51bGwsUyksdXkobiksdXkoaSl9fWZ1bmN0aW9uICQzdChlLHQpe3ZhciByPWUuc2l0ZSxuPXJbMF0saT1yWzFdLG89aS10O2lmKCFvKXJldHVybiBuO3ZhciBhPWUuUDtpZighYSlyZXR1cm4tMS8wO3I9YS5zaXRlO3ZhciBzPXJbMF0sbD1yWzFdLGM9bC10O2lmKCFjKXJldHVybiBzO3ZhciB1PXMtbixoPTEvby0xL2MsZj11L2M7cmV0dXJuIGg/KC1mK01hdGguc3FydChmKmYtMipoKih1KnUvKC0yKmMpLWwrYy8yK2ktby8yKSkpL2grbjoobitzKS8yfWZ1bmN0aW9uIG41ZShlLHQpe3ZhciByPWUuTjtpZihyKXJldHVybiAkM3Qocix0KTt2YXIgbj1lLnNpdGU7cmV0dXJuIG5bMV09PT10P25bMF06MS8wfXZhciBIcj0xZS02LEczdD0xZS0xMixmeSxVYSxuMix3bztmdW5jdGlvbiBpNWUoZSx0LHIpe3JldHVybihlWzBdLXJbMF0pKih0WzFdLWVbMV0pLShlWzBdLXRbMF0pKihyWzFdLWVbMV0pfWZ1bmN0aW9uIG81ZShlLHQpe3JldHVybiB0WzFdLWVbMV18fHRbMF0tZVswXX1mdW5jdGlvbiBGNShlLHQpe3ZhciByPWUuc29ydChvNWUpLnBvcCgpLG4saSxvO2Zvcih3bz1bXSxVYT1uZXcgQXJyYXkoZS5sZW5ndGgpLGZ5PW5ldyBwJCxuMj1uZXcgcCQ7OylpZihvPVE4LHImJighb3x8clsxXTxvLnl8fHJbMV09PT1vLnkmJnJbMF08by54KSkoclswXSE9PW58fHJbMV0hPT1pKSYmKFgzdChyKSxuPXJbMF0saT1yWzFdKSxyPWUucG9wKCk7ZWxzZSBpZihvKWozdChvLmFyYyk7ZWxzZSBicmVhaztpZihWM3QoKSx0KXt2YXIgYT0rdFswXVswXSxzPSt0WzBdWzFdLGw9K3RbMV1bMF0sYz0rdFsxXVsxXTtCM3QoYSxzLGwsYyksVTN0KGEscyxsLGMpfXRoaXMuZWRnZXM9d28sdGhpcy5jZWxscz1VYSxmeT1uMj13bz1VYT1udWxsfUY1LnByb3RvdHlwZT17Y29uc3RydWN0b3I6RjUscG9seWdvbnM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLm1hcChmdW5jdGlvbih0KXt2YXIgcj10LmhhbGZlZGdlcy5tYXAoZnVuY3Rpb24obil7cmV0dXJuIGQkKHQsZVtuXSl9KTtyZXR1cm4gci5kYXRhPXQuc2l0ZS5kYXRhLHJ9KX0sdHJpYW5nbGVzOmZ1bmN0aW9uKCl7dmFyIGU9W10sdD10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLmZvckVhY2goZnVuY3Rpb24ocixuKXtpZighIShzPShvPXIuaGFsZmVkZ2VzKS5sZW5ndGgpKWZvcih2YXIgaT1yLnNpdGUsbyxhPS0xLHMsbCxjPXRbb1tzLTFdXSx1PWMubGVmdD09PWk/Yy5yaWdodDpjLmxlZnQ7KythPHM7KWw9dSxjPXRbb1thXV0sdT1jLmxlZnQ9PT1pP2MucmlnaHQ6Yy5sZWZ0LGwmJnUmJm48bC5pbmRleCYmbjx1LmluZGV4JiZpNWUoaSxsLHUpPDAmJmUucHVzaChbaS5kYXRhLGwuZGF0YSx1LmRhdGFdKX0pLGV9LGxpbmtzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJpZ2h0fSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybntzb3VyY2U6ZS5sZWZ0LmRhdGEsdGFyZ2V0OmUucmlnaHQuZGF0YX19KX0sZmluZDpmdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPXRoaXMsaSxvPW4uX2ZvdW5kfHwwLGE9bi5jZWxscy5sZW5ndGgsczshKHM9bi5jZWxsc1tvXSk7KWlmKCsrbz49YSlyZXR1cm4gbnVsbDt2YXIgbD1lLXMuc2l0ZVswXSxjPXQtcy5zaXRlWzFdLHU9bCpsK2MqYztkbyBzPW4uY2VsbHNbaT1vXSxvPW51bGwscy5oYWxmZWRnZXMuZm9yRWFjaChmdW5jdGlvbihoKXt2YXIgZj1uLmVkZ2VzW2hdLHA9Zi5sZWZ0O2lmKCEoKHA9PT1zLnNpdGV8fCFwKSYmIShwPWYucmlnaHQpKSl7dmFyIGQ9ZS1wWzBdLGc9dC1wWzFdLF89ZCpkK2cqZztfPHUmJih1PV8sbz1wLmluZGV4KX19KTt3aGlsZShvIT09bnVsbCk7cmV0dXJuIG4uX2ZvdW5kPWkscj09bnVsbHx8dTw9cipyP3Muc2l0ZTpudWxsfX07ZnVuY3Rpb24gSzN0KCl7dmFyIGU9TzN0LHQ9ejN0LHI9bnVsbDtmdW5jdGlvbiBuKGkpe3JldHVybiBuZXcgRjUoaS5tYXAoZnVuY3Rpb24obyxhKXt2YXIgcz1bTWF0aC5yb3VuZChlKG8sYSxpKS9IcikqSHIsTWF0aC5yb3VuZCh0KG8sYSxpKS9IcikqSHJdO3JldHVybiBzLmluZGV4PWEscy5kYXRhPW8sc30pLHIpfXJldHVybiBuLnBvbHlnb25zPWZ1bmN0aW9uKGkpe3JldHVybiBuKGkpLnBvbHlnb25zKCl9LG4ubGlua3M9ZnVuY3Rpb24oaSl7cmV0dXJuIG4oaSkubGlua3MoKX0sbi50cmlhbmdsZXM9ZnVuY3Rpb24oaSl7cmV0dXJuIG4oaSkudHJpYW5nbGVzKCl9LG4ueD1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOmgkKCtpKSxuKTplfSxuLnk9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIGk9PSJmdW5jdGlvbiI/aTpoJCgraSksbik6dH0sbi5leHRlbnQ9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9aT09bnVsbD9udWxsOltbK2lbMF1bMF0sK2lbMF1bMV1dLFsraVsxXVswXSwraVsxXVsxXV1dLG4pOnImJltbclswXVswXSxyWzBdWzFdXSxbclsxXVswXSxyWzFdWzFdXV19LG4uc2l6ZT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1pPT1udWxsP251bGw6W1swLDBdLFsraVswXSwraVsxXV1dLG4pOnImJltyWzFdWzBdLXJbMF1bMF0sclsxXVsxXS1yWzBdWzFdXX0sbn1SbSgpO2Z1bmN0aW9uIEI1KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBnJChlLHQscil7dGhpcy50YXJnZXQ9ZSx0aGlzLnR5cGU9dCx0aGlzLnRyYW5zZm9ybT1yfWZ1bmN0aW9uIFhoKGUsdCxyKXt0aGlzLms9ZSx0aGlzLng9dCx0aGlzLnk9cn1YaC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlhoLHNjYWxlOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09MT90aGlzOm5ldyBYaCh0aGlzLmsqZSx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT0wJnQ9PT0wP3RoaXM6bmV3IFhoKHRoaXMuayx0aGlzLngrdGhpcy5rKmUsdGhpcy55K3RoaXMuayp0KX0sYXBwbHk6ZnVuY3Rpb24oZSl7cmV0dXJuW2VbMF0qdGhpcy5rK3RoaXMueCxlWzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKGUpe3JldHVybiBlKnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihlKXtyZXR1cm5bKGVbMF0tdGhpcy54KS90aGlzLmssKGVbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKGUpe3JldHVybihlLXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKGUpe3JldHVybihlLXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihlKXtyZXR1cm4gZS5jb3B5KCkuZG9tYWluKGUucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcChlLmludmVydCxlKSl9LHJlc2NhbGVZOmZ1bmN0aW9uKGUpe3JldHVybiBlLmNvcHkoKS5kb21haW4oZS5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKGUuaW52ZXJ0LGUpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX07dmFyICRoPW5ldyBYaCgxLDAsMCk7aTIucHJvdG90eXBlPVhoLnByb3RvdHlwZTtmdW5jdGlvbiBpMihlKXtmb3IoOyFlLl9fem9vbTspaWYoIShlPWUucGFyZW50Tm9kZSkpcmV0dXJuICRoO3JldHVybiBlLl9fem9vbX1mdW5jdGlvbiB0Uigpe3F0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIG8yKCl7cXQucHJldmVudERlZmF1bHQoKSxxdC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBhNWUoKXtyZXR1cm4hcXQuY3RybEtleSYmIXF0LmJ1dHRvbn1mdW5jdGlvbiBzNWUoKXt2YXIgZT10aGlzO3JldHVybiBlIGluc3RhbmNlb2YgU1ZHRWxlbWVudD8oZT1lLm93bmVyU1ZHRWxlbWVudHx8ZSxlLmhhc0F0dHJpYnV0ZSgidmlld0JveCIpPyhlPWUudmlld0JveC5iYXNlVmFsLFtbZS54LGUueV0sW2UueCtlLndpZHRoLGUueStlLmhlaWdodF1dKTpbWzAsMF0sW2Uud2lkdGguYmFzZVZhbC52YWx1ZSxlLmhlaWdodC5iYXNlVmFsLnZhbHVlXV0pOltbMCwwXSxbZS5jbGllbnRXaWR0aCxlLmNsaWVudEhlaWdodF1dfWZ1bmN0aW9uIFozdCgpe3JldHVybiB0aGlzLl9fem9vbXx8JGh9ZnVuY3Rpb24gbDVlKCl7cmV0dXJuLXF0LmRlbHRhWSoocXQuZGVsdGFNb2RlPT09MT8uMDU6cXQuZGVsdGFNb2RlPzE6LjAwMil9ZnVuY3Rpb24gYzVlKCl7cmV0dXJuIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50c3x8Im9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIHU1ZShlLHQscil7dmFyIG49ZS5pbnZlcnRYKHRbMF1bMF0pLXJbMF1bMF0saT1lLmludmVydFgodFsxXVswXSktclsxXVswXSxvPWUuaW52ZXJ0WSh0WzBdWzFdKS1yWzBdWzFdLGE9ZS5pbnZlcnRZKHRbMV1bMV0pLXJbMV1bMV07cmV0dXJuIGUudHJhbnNsYXRlKGk+bj8obitpKS8yOk1hdGgubWluKDAsbil8fE1hdGgubWF4KDAsaSksYT5vPyhvK2EpLzI6TWF0aC5taW4oMCxvKXx8TWF0aC5tYXgoMCxhKSl9ZnVuY3Rpb24gZVIoKXt2YXIgZT1hNWUsdD1zNWUscj11NWUsbj1sNWUsaT1jNWUsbz1bMCwxLzBdLGE9W1stMS8wLC0xLzBdLFsxLzAsMS8wXV0scz0yNTAsbD12TCxjPXhzKCJzdGFydCIsInpvb20iLCJlbmQiKSx1LGgsZj01MDAscD0xNTAsZD0wO2Z1bmN0aW9uIGcoTCl7TC5wcm9wZXJ0eSgiX196b29tIixaM3QpLm9uKCJ3aGVlbC56b29tIixQKS5vbigibW91c2Vkb3duLnpvb20iLGspLm9uKCJkYmxjbGljay56b29tIixPKS5maWx0ZXIoaSkub24oInRvdWNoc3RhcnQuem9vbSIsRCkub24oInRvdWNobW92ZS56b29tIixCKS5vbigidG91Y2hlbmQuem9vbSB0b3VjaGNhbmNlbC56b29tIixJKS5zdHlsZSgidG91Y2gtYWN0aW9uIiwibm9uZSIpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIil9Zy50cmFuc2Zvcm09ZnVuY3Rpb24oTCxSLEYpe3ZhciB6PUwuc2VsZWN0aW9uP0wuc2VsZWN0aW9uKCk6TDt6LnByb3BlcnR5KCJfX3pvb20iLFozdCksTCE9PXo/YihMLFIsRik6ei5pbnRlcnJ1cHQoKS5lYWNoKGZ1bmN0aW9uKCl7Uyh0aGlzLGFyZ3VtZW50cykuc3RhcnQoKS56b29tKG51bGwsdHlwZW9mIFI9PSJmdW5jdGlvbiI/Ui5hcHBseSh0aGlzLGFyZ3VtZW50cyk6UikuZW5kKCl9KX0sZy5zY2FsZUJ5PWZ1bmN0aW9uKEwsUixGKXtnLnNjYWxlVG8oTCxmdW5jdGlvbigpe3ZhciB6PXRoaXMuX196b29tLmssVT10eXBlb2YgUj09ImZ1bmN0aW9uIj9SLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpSO3JldHVybiB6KlV9LEYpfSxnLnNjYWxlVG89ZnVuY3Rpb24oTCxSLEYpe2cudHJhbnNmb3JtKEwsZnVuY3Rpb24oKXt2YXIgej10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxVPXRoaXMuX196b29tLFc9Rj09bnVsbD94KHopOnR5cGVvZiBGPT0iZnVuY3Rpb24iP0YuYXBwbHkodGhpcyxhcmd1bWVudHMpOkYsWj1VLmludmVydChXKSxydD10eXBlb2YgUj09ImZ1bmN0aW9uIj9SLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpSO3JldHVybiByKHkoXyhVLHJ0KSxXLFopLHosYSl9LEYpfSxnLnRyYW5zbGF0ZUJ5PWZ1bmN0aW9uKEwsUixGKXtnLnRyYW5zZm9ybShMLGZ1bmN0aW9uKCl7cmV0dXJuIHIodGhpcy5fX3pvb20udHJhbnNsYXRlKHR5cGVvZiBSPT0iZnVuY3Rpb24iP1IuYXBwbHkodGhpcyxhcmd1bWVudHMpOlIsdHlwZW9mIEY9PSJmdW5jdGlvbiI/Ri5hcHBseSh0aGlzLGFyZ3VtZW50cyk6RiksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksYSl9KX0sZy50cmFuc2xhdGVUbz1mdW5jdGlvbihMLFIsRix6KXtnLnRyYW5zZm9ybShMLGZ1bmN0aW9uKCl7dmFyIFU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksVz10aGlzLl9fem9vbSxaPXo9PW51bGw/eChVKTp0eXBlb2Ygej09ImZ1bmN0aW9uIj96LmFwcGx5KHRoaXMsYXJndW1lbnRzKTp6O3JldHVybiByKCRoLnRyYW5zbGF0ZShaWzBdLFpbMV0pLnNjYWxlKFcuaykudHJhbnNsYXRlKHR5cGVvZiBSPT0iZnVuY3Rpb24iPy1SLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotUix0eXBlb2YgRj09ImZ1bmN0aW9uIj8tRi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6LUYpLFUsYSl9LHopfTtmdW5jdGlvbiBfKEwsUil7cmV0dXJuIFI9TWF0aC5tYXgob1swXSxNYXRoLm1pbihvWzFdLFIpKSxSPT09TC5rP0w6bmV3IFhoKFIsTC54LEwueSl9ZnVuY3Rpb24geShMLFIsRil7dmFyIHo9UlswXS1GWzBdKkwuayxVPVJbMV0tRlsxXSpMLms7cmV0dXJuIHo9PT1MLngmJlU9PT1MLnk/TDpuZXcgWGgoTC5rLHosVSl9ZnVuY3Rpb24geChMKXtyZXR1cm5bKCtMWzBdWzBdKyArTFsxXVswXSkvMiwoK0xbMF1bMV0rICtMWzFdWzFdKS8yXX1mdW5jdGlvbiBiKEwsUixGKXtMLm9uKCJzdGFydC56b29tIixmdW5jdGlvbigpe1ModGhpcyxhcmd1bWVudHMpLnN0YXJ0KCl9KS5vbigiaW50ZXJydXB0Lnpvb20gZW5kLnpvb20iLGZ1bmN0aW9uKCl7Uyh0aGlzLGFyZ3VtZW50cykuZW5kKCl9KS50d2Vlbigiem9vbSIsZnVuY3Rpb24oKXt2YXIgej10aGlzLFU9YXJndW1lbnRzLFc9Uyh6LFUpLFo9dC5hcHBseSh6LFUpLHJ0PUY9PW51bGw/eChaKTp0eXBlb2YgRj09ImZ1bmN0aW9uIj9GLmFwcGx5KHosVSk6RixvdD1NYXRoLm1heChaWzFdWzBdLVpbMF1bMF0sWlsxXVsxXS1aWzBdWzFdKSxzdD16Ll9fem9vbSxTdD10eXBlb2YgUj09ImZ1bmN0aW9uIj9SLmFwcGx5KHosVSk6UixidD1sKHN0LmludmVydChydCkuY29uY2F0KG90L3N0LmspLFN0LmludmVydChydCkuY29uY2F0KG90L1N0LmspKTtyZXR1cm4gZnVuY3Rpb24oTXQpe2lmKE10PT09MSlNdD1TdDtlbHNle3ZhciBsdD1idChNdCksS3Q9b3QvbHRbMl07TXQ9bmV3IFhoKEt0LHJ0WzBdLWx0WzBdKkt0LHJ0WzFdLWx0WzFdKkt0KX1XLnpvb20obnVsbCxNdCl9fSl9ZnVuY3Rpb24gUyhMLFIsRil7cmV0dXJuIUYmJkwuX196b29taW5nfHxuZXcgQyhMLFIpfWZ1bmN0aW9uIEMoTCxSKXt0aGlzLnRoYXQ9TCx0aGlzLmFyZ3M9Uix0aGlzLmFjdGl2ZT0wLHRoaXMuZXh0ZW50PXQuYXBwbHkoTCxSKSx0aGlzLnRhcHM9MH1DLnByb3RvdHlwZT17c3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4rK3RoaXMuYWN0aXZlPT09MSYmKHRoaXMudGhhdC5fX3pvb21pbmc9dGhpcyx0aGlzLmVtaXQoInN0YXJ0IikpLHRoaXN9LHpvb206ZnVuY3Rpb24oTCxSKXtyZXR1cm4gdGhpcy5tb3VzZSYmTCE9PSJtb3VzZSImJih0aGlzLm1vdXNlWzFdPVIuaW52ZXJ0KHRoaXMubW91c2VbMF0pKSx0aGlzLnRvdWNoMCYmTCE9PSJ0b3VjaCImJih0aGlzLnRvdWNoMFsxXT1SLmludmVydCh0aGlzLnRvdWNoMFswXSkpLHRoaXMudG91Y2gxJiZMIT09InRvdWNoIiYmKHRoaXMudG91Y2gxWzFdPVIuaW52ZXJ0KHRoaXMudG91Y2gxWzBdKSksdGhpcy50aGF0Ll9fem9vbT1SLHRoaXMuZW1pdCgiem9vbSIpLHRoaXN9LGVuZDpmdW5jdGlvbigpe3JldHVybi0tdGhpcy5hY3RpdmU9PT0wJiYoZGVsZXRlIHRoaXMudGhhdC5fX3pvb21pbmcsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihMKXtFcChuZXcgZyQoZyxMLHRoaXMudGhhdC5fX3pvb20pLGMuYXBwbHksYyxbTCx0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fTtmdW5jdGlvbiBQKCl7aWYoIWUuYXBwbHkodGhpcyxhcmd1bWVudHMpKXJldHVybjt2YXIgTD1TKHRoaXMsYXJndW1lbnRzKSxSPXRoaXMuX196b29tLEY9TWF0aC5tYXgob1swXSxNYXRoLm1pbihvWzFdLFIuaypNYXRoLnBvdygyLG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKSkpLHo9em8odGhpcyk7aWYoTC53aGVlbCkoTC5tb3VzZVswXVswXSE9PXpbMF18fEwubW91c2VbMF1bMV0hPT16WzFdKSYmKEwubW91c2VbMV09Ui5pbnZlcnQoTC5tb3VzZVswXT16KSksY2xlYXJUaW1lb3V0KEwud2hlZWwpO2Vsc2V7aWYoUi5rPT09RilyZXR1cm47TC5tb3VzZT1beixSLmludmVydCh6KV0saHUodGhpcyksTC5zdGFydCgpfW8yKCksTC53aGVlbD1zZXRUaW1lb3V0KFUscCksTC56b29tKCJtb3VzZSIscih5KF8oUixGKSxMLm1vdXNlWzBdLEwubW91c2VbMV0pLEwuZXh0ZW50LGEpKTtmdW5jdGlvbiBVKCl7TC53aGVlbD1udWxsLEwuZW5kKCl9fWZ1bmN0aW9uIGsoKXtpZihofHwhZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpcmV0dXJuO3ZhciBMPVModGhpcyxhcmd1bWVudHMsITApLFI9SHQocXQudmlldykub24oIm1vdXNlbW92ZS56b29tIixXLCEwKS5vbigibW91c2V1cC56b29tIixaLCEwKSxGPXpvKHRoaXMpLHo9cXQuY2xpZW50WCxVPXF0LmNsaWVudFk7Rm0ocXQudmlldyksdFIoKSxMLm1vdXNlPVtGLHRoaXMuX196b29tLmludmVydChGKV0saHUodGhpcyksTC5zdGFydCgpO2Z1bmN0aW9uIFcoKXtpZihvMigpLCFMLm1vdmVkKXt2YXIgcnQ9cXQuY2xpZW50WC16LG90PXF0LmNsaWVudFktVTtMLm1vdmVkPXJ0KnJ0K290Km90PmR9TC56b29tKCJtb3VzZSIscih5KEwudGhhdC5fX3pvb20sTC5tb3VzZVswXT16byhMLnRoYXQpLEwubW91c2VbMV0pLEwuZXh0ZW50LGEpKX1mdW5jdGlvbiBaKCl7Ui5vbigibW91c2Vtb3ZlLnpvb20gbW91c2V1cC56b29tIixudWxsKSxCbShxdC52aWV3LEwubW92ZWQpLG8yKCksTC5lbmQoKX19ZnVuY3Rpb24gTygpe2lmKCEhZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBMPXRoaXMuX196b29tLFI9em8odGhpcyksRj1MLmludmVydChSKSx6PUwuayoocXQuc2hpZnRLZXk/LjU6MiksVT1yKHkoXyhMLHopLFIsRiksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksYSk7bzIoKSxzPjA/SHQodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKHMpLmNhbGwoYixVLFIpOkh0KHRoaXMpLmNhbGwoZy50cmFuc2Zvcm0sVSl9fWZ1bmN0aW9uIEQoKXtpZighIWUuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgTD1xdC50b3VjaGVzLFI9TC5sZW5ndGgsRj1TKHRoaXMsYXJndW1lbnRzLHF0LmNoYW5nZWRUb3VjaGVzLmxlbmd0aD09PVIpLHosVSxXLFo7Zm9yKHRSKCksVT0wO1U8UjsrK1UpVz1MW1VdLFo9Q3AodGhpcyxMLFcuaWRlbnRpZmllciksWj1bWix0aGlzLl9fem9vbS5pbnZlcnQoWiksVy5pZGVudGlmaWVyXSxGLnRvdWNoMD8hRi50b3VjaDEmJkYudG91Y2gwWzJdIT09WlsyXSYmKEYudG91Y2gxPVosRi50YXBzPTApOihGLnRvdWNoMD1aLHo9ITAsRi50YXBzPTErISF1KTt1JiYodT1jbGVhclRpbWVvdXQodSkpLHomJihGLnRhcHM8MiYmKHU9c2V0VGltZW91dChmdW5jdGlvbigpe3U9bnVsbH0sZikpLGh1KHRoaXMpLEYuc3RhcnQoKSl9fWZ1bmN0aW9uIEIoKXtpZighIXRoaXMuX196b29taW5nKXt2YXIgTD1TKHRoaXMsYXJndW1lbnRzKSxSPXF0LmNoYW5nZWRUb3VjaGVzLEY9Ui5sZW5ndGgseixVLFcsWjtmb3IobzIoKSx1JiYodT1jbGVhclRpbWVvdXQodSkpLEwudGFwcz0wLHo9MDt6PEY7Kyt6KVU9Ult6XSxXPUNwKHRoaXMsUixVLmlkZW50aWZpZXIpLEwudG91Y2gwJiZMLnRvdWNoMFsyXT09PVUuaWRlbnRpZmllcj9MLnRvdWNoMFswXT1XOkwudG91Y2gxJiZMLnRvdWNoMVsyXT09PVUuaWRlbnRpZmllciYmKEwudG91Y2gxWzBdPVcpO2lmKFU9TC50aGF0Ll9fem9vbSxMLnRvdWNoMSl7dmFyIHJ0PUwudG91Y2gwWzBdLG90PUwudG91Y2gwWzFdLHN0PUwudG91Y2gxWzBdLFN0PUwudG91Y2gxWzFdLGJ0PShidD1zdFswXS1ydFswXSkqYnQrKGJ0PXN0WzFdLXJ0WzFdKSpidCxNdD0oTXQ9U3RbMF0tb3RbMF0pKk10KyhNdD1TdFsxXS1vdFsxXSkqTXQ7VT1fKFUsTWF0aC5zcXJ0KGJ0L010KSksVz1bKHJ0WzBdK3N0WzBdKS8yLChydFsxXStzdFsxXSkvMl0sWj1bKG90WzBdK1N0WzBdKS8yLChvdFsxXStTdFsxXSkvMl19ZWxzZSBpZihMLnRvdWNoMClXPUwudG91Y2gwWzBdLFo9TC50b3VjaDBbMV07ZWxzZSByZXR1cm47TC56b29tKCJ0b3VjaCIscih5KFUsVyxaKSxMLmV4dGVudCxhKSl9fWZ1bmN0aW9uIEkoKXtpZighIXRoaXMuX196b29taW5nKXt2YXIgTD1TKHRoaXMsYXJndW1lbnRzKSxSPXF0LmNoYW5nZWRUb3VjaGVzLEY9Ui5sZW5ndGgseixVO2Zvcih0UigpLGgmJmNsZWFyVGltZW91dChoKSxoPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtoPW51bGx9LGYpLHo9MDt6PEY7Kyt6KVU9Ult6XSxMLnRvdWNoMCYmTC50b3VjaDBbMl09PT1VLmlkZW50aWZpZXI/ZGVsZXRlIEwudG91Y2gwOkwudG91Y2gxJiZMLnRvdWNoMVsyXT09PVUuaWRlbnRpZmllciYmZGVsZXRlIEwudG91Y2gxO2lmKEwudG91Y2gxJiYhTC50b3VjaDAmJihMLnRvdWNoMD1MLnRvdWNoMSxkZWxldGUgTC50b3VjaDEpLEwudG91Y2gwKUwudG91Y2gwWzFdPXRoaXMuX196b29tLmludmVydChMLnRvdWNoMFswXSk7ZWxzZSBpZihMLmVuZCgpLEwudGFwcz09PTIpe3ZhciBXPUh0KHRoaXMpLm9uKCJkYmxjbGljay56b29tIik7VyYmVy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX1yZXR1cm4gZy53aGVlbERlbHRhPWZ1bmN0aW9uKEwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBMPT0iZnVuY3Rpb24iP0w6QjUoK0wpLGcpOm59LGcuZmlsdGVyPWZ1bmN0aW9uKEwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBMPT0iZnVuY3Rpb24iP0w6QjUoISFMKSxnKTplfSxnLnRvdWNoYWJsZT1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2YgTD09ImZ1bmN0aW9uIj9MOkI1KCEhTCksZyk6aX0sZy5leHRlbnQ9ZnVuY3Rpb24oTCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIEw9PSJmdW5jdGlvbiI/TDpCNShbWytMWzBdWzBdLCtMWzBdWzFdXSxbK0xbMV1bMF0sK0xbMV1bMV1dXSksZyk6dH0sZy5zY2FsZUV4dGVudD1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ob1swXT0rTFswXSxvWzFdPStMWzFdLGcpOltvWzBdLG9bMV1dfSxnLnRyYW5zbGF0ZUV4dGVudD1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYVswXVswXT0rTFswXVswXSxhWzFdWzBdPStMWzFdWzBdLGFbMF1bMV09K0xbMF1bMV0sYVsxXVsxXT0rTFsxXVsxXSxnKTpbW2FbMF1bMF0sYVswXVsxXV0sW2FbMV1bMF0sYVsxXVsxXV1dfSxnLmNvbnN0cmFpbj1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1MLGcpOnJ9LGcuZHVyYXRpb249ZnVuY3Rpb24oTCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K0wsZyk6c30sZy5pbnRlcnBvbGF0ZT1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1MLGcpOmx9LGcub249ZnVuY3Rpb24oKXt2YXIgTD1jLm9uLmFwcGx5KGMsYXJndW1lbnRzKTtyZXR1cm4gTD09PWM/ZzpMfSxnLmNsaWNrRGlzdGFuY2U9ZnVuY3Rpb24oTCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9KEw9K0wpKkwsZyk6TWF0aC5zcXJ0KGQpfSxnfXZhciBKM3Q9RWUoT2UoKSwxKTt2YXIgclI9Y2xhc3MgZXh0ZW5kcyB3cHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fZXhwZXJpbWVudHM9W119bG9hZCgpe2xldCB0PV9lKCkuZXhwZXJpbWVudHMoKTtyZXR1cm4gdGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHQpLnRoZW4ocj0+e0ozdC5pc0VxdWFsKHRoaXMuX2V4cGVyaW1lbnRzLHIpfHwodGhpcy5fZXhwZXJpbWVudHM9cix0aGlzLmVtaXRDaGFuZ2UoKSl9KX1nZXRFeHBlcmltZW50cygpe3JldHVybiB0aGlzLl9leHBlcmltZW50cy5zbGljZSgpfX0sblI9bmV3IHJSO3ZhciBoNWU9e2dvb2dsZVN0YW5kYXJkOlsiI2RiNDQzNyIsIiNmZjcwNDMiLCIjZjRiNDAwIiwiIzBmOWQ1OCIsIiMwMDc5NmIiLCIjMDBhY2MxIiwiIzQyODVmNCIsIiM1YzZiYzAiLCIjYWI0N2JjIl0sZ29vZ2xlQ29vbDpbIiM5ZTlkMjQiLCIjMGY5ZDU4IiwiIzAwNzk2YiIsIiMwMGFjYzEiLCIjNDI4NWY0IiwiIzVjNmJjMCIsIiM2MDdkOGIiXSxnb29nbGVXYXJtOlsiIzc5NTU0OCIsIiNhYjQ3YmMiLCIjZjA2MjkyIiwiI2MyMTg1YiIsIiNkYjQ0MzciLCIjZmY3MDQzIiwiI2Y0YjQwMCJdLGdvb2dsZUNvbG9yQmxpbmRBc3Npc3Q6WyIjZmY3MDQzIiwiIzAwQUNDMSIsIiNBQjQ3QkMiLCIjMkE1NkM2IiwiIzBiODA0MyIsIiNGN0NCNEQiLCIjYzBjYTMzIiwiIzVlMzViMSIsIiNBNTI3MTQiXSx0ZW5zb3Jib2FyZENvbG9yQmxpbmRBc3Npc3Q6WyIjZmY3MDQzIiwiIzAwNzdiYiIsIiNjYzMzMTEiLCIjMzNiYmVlIiwiI2VlMzM3NyIsIiMwMDk5ODgiLCIjYmJiYmJiIl0sY29sb3JCbGluZEFzc2lzdDE6WyIjNDQ3N2FhIiwiIzQ0YWFhYSIsIiNhYWFhNDQiLCIjYWE3NzQ0IiwiI2FhNDQ1NSIsIiNhYTQ0ODgiXSxjb2xvckJsaW5kQXNzaXN0MjpbIiM4OGNjZWUiLCIjNDRhYTk5IiwiIzExNzczMyIsIiM5OTk5MzMiLCIjZGRjYzc3IiwiI2NjNjY3NyIsIiM4ODIyNTUiLCIjYWE0NDk5Il0sY29sb3JCbGluZEFzc2lzdDM6WyIjMzMyMjg4IiwiIzY2OTljYyIsIiM4OGNjZWUiLCIjNDRhYTk5IiwiIzExNzczMyIsIiM5OTk5MzMiLCIjZGRjYzc3IiwiI2NjNjY3NyIsIiNhYTQ0NjYiLCIjODgyMjU1IiwiIzY2MTEwMCIsIiNhYTQ0OTkiXSxjb2xvckJsaW5kQXNzaXN0NDpbIiM0NDc3YWEiLCIjNjZjY2VlIiwiIzIyODgzMyIsIiNjY2JiNDQiLCIjZWU2Njc3IiwiI2FhMzM3NyIsIiNiYmJiYmIiXSxjb2xvckJsaW5kQXNzaXN0NTpbIiNGRjZEQjYiLCIjOTIwMDAwIiwiIzkyNDkwMCIsIiNEQkQxMDAiLCIjMjRGRjI0IiwiIzAwNkREQiIsIiM0OTAwOTIiXSxtbGRhc2g6WyIjRTQ3RUFEIiwiI0Y0NjQwRCIsIiNGQUEzMDAiLCIjRjVFNjM2IiwiIzAwQTA3NyIsIiMwMDc3QjgiLCIjMDBCN0VEIl19LGlSPWg1ZS50ZW5zb3Jib2FyZENvbG9yQmxpbmRBc3Npc3Q7dmFyIF8kPWNsYXNze2NvbnN0cnVjdG9yKHQ9aVIpe3RoaXMucGFsZXR0ZT10LHRoaXMuaWRlbnRpZmllcnM9SmkoKX1zZXREb21haW4odCl7cmV0dXJuIHRoaXMuaWRlbnRpZmllcnM9SmkoKSx0LmZvckVhY2goKHIsbik9Pnt0aGlzLmlkZW50aWZpZXJzLnNldChyLHRoaXMucGFsZXR0ZVtuJXRoaXMucGFsZXR0ZS5sZW5ndGhdKX0pLHRoaXN9Z2V0Q29sb3IodCl7aWYoIXRoaXMuaWRlbnRpZmllcnMuaGFzKHQpKXRocm93IG5ldyBFcnJvcihgU3RyaW5nICR7dH0gd2FzIG5vdCBpbiB0aGUgZG9tYWluLmApO3JldHVybiB0aGlzLmlkZW50aWZpZXJzLmdldCh0KX19O2Z1bmN0aW9uIFEzdChlLHQpe2xldCByPW5ldyBfJDtmdW5jdGlvbiBuKCl7ci5zZXREb21haW4odCgpKX1yZXR1cm4gZS5hZGRMaXN0ZW5lcihuKSxuKCksaT0+ci5nZXRDb2xvcihpKX12YXIgZm49UTN0KFNwLCgpPT5TcC5nZXRSdW5zKCkpLHZRcj1RM3QoblIsKCk9Pm5SLmdldEV4cGVyaW1lbnRzKCkubWFwKCh7bmFtZTplfSk9PmUpKTt2YXIgYWc9RWUoT2UoKSwxKTt5cyh7bW9kdWxlTmFtZToicnVuLWNvbG9yLXN0eWxlIixzdHlsZUNvbnRlbnQ6YAogICAgW2NvbG9yLWNsYXNzPSdsaWdodC1ibHVlJ10gcGFwZXItY2hlY2tib3ggewogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLWxpZ2h0LWJsdWUtNTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItbGlnaHQtYmx1ZS01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItbGlnaHQtYmx1ZS05MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLWxpZ2h0LWJsdWUtOTAwKTsKICAgIH0KICAgIFtjb2xvci1jbGFzcz0ncmVkJ10gcGFwZXItY2hlY2tib3ggewogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXJlZC01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1yZWQtNTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXJlZC05MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXJlZC05MDApOwogICAgfQogICAgW2NvbG9yLWNsYXNzPSdncmVlbiddIHBhcGVyLWNoZWNrYm94IHsKICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1ncmVlbi01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1ncmVlbi01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItZ3JlZW4tOTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1ncmVlbi05MDApOwogICAgfQogICAgW2NvbG9yLWNsYXNzPSdwdXJwbGUnXSBwYXBlci1jaGVja2JveCB7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItcHVycGxlLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXB1cnBsZS01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItcHVycGxlLTkwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItcHVycGxlLTkwMCk7CiAgICB9CiAgICBbY29sb3ItY2xhc3M9J3RlYWwnXSBwYXBlci1jaGVja2JveCB7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItdGVhbC01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci10ZWFsLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci10ZWFsLTkwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItdGVhbC05MDApOwogICAgfQogICAgW2NvbG9yLWNsYXNzPSdwaW5rJ10gcGFwZXItY2hlY2tib3ggewogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXBpbmstNTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItcGluay01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItcGluay05MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXBpbmstOTAwKTsKICAgIH0KICAgIFtjb2xvci1jbGFzcz0nb3JhbmdlJ10gcGFwZXItY2hlY2tib3ggewogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1vcmFuZ2UtNTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS05MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS05MDApOwogICAgfQogICAgW2NvbG9yLWNsYXNzPSdicm93biddIHBhcGVyLWNoZWNrYm94IHsKICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1icm93bi01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1icm93bi01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItYnJvd24tOTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1icm93bi05MDApOwogICAgfQogICAgW2NvbG9yLWNsYXNzPSdpbmRpZ28nXSBwYXBlci1jaGVja2JveCB7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLWluZGlnby01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTkwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTkwMCk7CiAgICB9CiAgYH0pO3ZhciBhbD1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5uYW1lcz1bXSx0aGlzLmNvbG9yaW5nPXtnZXRDb2xvcjooKT0+IiJ9LHRoaXMucmVnZXg9IiIsdGhpcy5zZWxlY3Rpb25TdGF0ZT17fSx0aGlzLm1heE5hbWVzVG9FbmFibGVCeURlZmF1bHQ9NDAsdGhpcy5fZGVib3VuY2VkUmVnZXhDaGFuZ2U9dGhpcy5fZGVib3VuY2VkUmVnZXhDaGFuZ2VJbXBsKCl9X2RlYm91bmNlZFJlZ2V4Q2hhbmdlSW1wbCgpe3ZhciB0PWFnLmRlYm91bmNlKHI9Pnt0aGlzLnJlZ2V4PXJ9LDE1MCx7bGVhZGluZzohMX0pO3JldHVybiBmdW5jdGlvbigpe3ZhciByPXRoaXMuJCQoIiNuYW1lcy1yZWdleCIpLnZhbHVlO3I9PSIiP3RoaXMuYXN5bmMoKCk9Pnt0aGlzLnJlZ2V4PXJ9LDMwKTp0KHIpfX1nZXQgX3JlZ2V4KCl7dmFyIHQ9dGhpcy5yZWdleDt0cnl7cmV0dXJuIG5ldyBSZWdFeHAodCl9Y2F0Y2gocil7cmV0dXJuIG51bGx9fV9zZXRJc29sYXRvckljb24oKXt2YXIgaTt2YXIgdD10aGlzLnNlbGVjdGlvblN0YXRlLHI9YWcuZmlsdGVyKGFnLnZhbHVlcyh0KSkubGVuZ3RoLG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoKGk9dGhpcy5yb290KT09bnVsbD92b2lkIDA6aS5xdWVyeVNlbGVjdG9yQWxsKCIuaXNvbGF0b3IiKSk7bi5mb3JFYWNoKGZ1bmN0aW9uKG8pe3I9PT0xJiZ0W28ubmFtZV0/by5pY29uPSJyYWRpby1idXR0b24tY2hlY2tlZCI6by5pY29uPSJyYWRpby1idXR0b24tdW5jaGVja2VkIn0pfWNvbXB1dGVOYW1lc01hdGNoaW5nUmVnZXgodCxyKXtsZXQgbj10aGlzLl9yZWdleDtyZXR1cm4gbj90aGlzLm5hbWVzLmZpbHRlcihpPT5uLnRlc3QoaSkpOnRoaXMubmFtZXN9Y29tcHV0ZU91dFNlbGVjdGVkKHQscil7dmFyIG49dGhpcy5zZWxlY3Rpb25TdGF0ZSxpPXRoaXMubWF4TmFtZXNUb0VuYWJsZUJ5RGVmYXVsdCxvPXRoaXMubmFtZXNNYXRjaGluZ1JlZ2V4Lmxlbmd0aDw9aTtyZXR1cm4gdGhpcy5uYW1lc01hdGNoaW5nUmVnZXguZmlsdGVyKGE9Pm5bYV09PW51bGw/bzpuW2FdKX1zeW5jaHJvbml6ZUNvbG9ycyh0KXt2YXIgaSxvLGEsczt0aGlzLl9zZXRJc29sYXRvckljb24oKSwoKG89KGk9dGhpcy5yb290KT09bnVsbD92b2lkIDA6aS5xdWVyeVNlbGVjdG9yQWxsKCJwYXBlci1jaGVja2JveCIpKSE9bnVsbD9vOltdKS5mb3JFYWNoKGw9PntsZXQgYz10aGlzLmNvbG9yaW5nLmdldENvbG9yKGwubmFtZSk7bC51cGRhdGVTdHlsZXMoeyItLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3IiOmMsIi0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3IiOmMsIi0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yIjpjLCItLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3IiOmN9KX0pLCgocz0oYT10aGlzLnJvb3QpPT1udWxsP3ZvaWQgMDphLnF1ZXJ5U2VsZWN0b3JBbGwoIi5pc29sYXRvciIpKSE9bnVsbD9zOltdKS5mb3JFYWNoKGw9PntsZXQgYz10aGlzLmNvbG9yaW5nLmdldENvbG9yKGwubmFtZSk7bC5zdHlsZS5jb2xvcj1jfSksd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMudXBkYXRlU3R5bGVzKCl9KX1faXNvbGF0ZU5hbWUodCl7dmFyIHI9dC50YXJnZXQubmFtZSxuPXt9O3RoaXMubmFtZXMuZm9yRWFjaChmdW5jdGlvbihpKXtuW2ldPWk9PXJ9KSx0aGlzLnNlbGVjdGlvblN0YXRlPW59X2NoZWNrYm94Q2hhbmdlKHQpe3ZhciByPXQudGFyZ2V0O2xldCBuPWFnLmNsb25lKHRoaXMuc2VsZWN0aW9uU3RhdGUpO25bci5uYW1lXT1yLmNoZWNrZWQsdGhpcy5zZWxlY3Rpb25TdGF0ZT1ufV9pc0NoZWNrZWQodCxyKXtyZXR1cm4gdGhpcy5vdXRTZWxlY3RlZC5pbmRleE9mKHQpIT0tMX10b2dnbGVBbGwoKXtsZXQgdD10aGlzLm5hbWVzTWF0Y2hpbmdSZWdleC5zb21lKG49PnRoaXMub3V0U2VsZWN0ZWQuaW5jbHVkZXMobikpLHI9e307dGhpcy5uYW1lcy5mb3JFYWNoKG49PntyW25dPSF0fSksdGhpcy5zZWxlY3Rpb25TdGF0ZT1yfX07YWwudGVtcGxhdGU9UWAKICAgIDxzdHlsZSBpbmNsdWRlPSJzY3JvbGxiYXItc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGUgaW5jbHVkZT0icnVuLWNvbG9yLXN0eWxlIj48L3N0eWxlPgoKICAgIDxwYXBlci1pbnB1dAogICAgICBpZD0ibmFtZXMtcmVnZXgiCiAgICAgIG5vLWxhYmVsLWZsb2F0PSIiCiAgICAgIGxhYmVsPSJXcml0ZSBhIHJlZ2V4IHRvIGZpbHRlciBydW5zIgogICAgICB2YWx1ZT0iW1tyZWdleF1dIgogICAgICBvbi1iaW5kLXZhbHVlLWNoYW5nZWQ9Il9kZWJvdW5jZWRSZWdleENoYW5nZSIKICAgID48L3BhcGVyLWlucHV0PgogICAgPGRpdiBpZD0ib3V0ZXItY29udGFpbmVyIiBjbGFzcz0ic2Nyb2xsYmFyIj4KICAgICAgPHRlbXBsYXRlCiAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgaXRlbXM9IltbbmFtZXNNYXRjaGluZ1JlZ2V4XV0iCiAgICAgICAgb24tZG9tLWNoYW5nZT0ic3luY2hyb25pemVDb2xvcnMiCiAgICAgID4KICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lLXJvdyI+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJpY29uLWNvbnRhaW5lciBjaGVja2JveC1jb250YWluZXIgdmVydGljYWwtYWxpZ24tY29udGFpbmVyIgogICAgICAgICAgPgogICAgICAgICAgICA8cGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICBjbGFzcz0iY2hlY2tib3ggdmVydGljYWwtYWxpZ24tY2VudGVyIgogICAgICAgICAgICAgIGlkJD0iY2hlY2tib3gtW1tpdGVtXV0iCiAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtXV0iCiAgICAgICAgICAgICAgY2hlY2tlZCQ9IltbX2lzQ2hlY2tlZChpdGVtLCBzZWxlY3Rpb25TdGF0ZS4qKV1dIgogICAgICAgICAgICAgIG9uLWNoYW5nZT0iX2NoZWNrYm94Q2hhbmdlIgogICAgICAgICAgICA+PC9wYXBlci1jaGVja2JveD4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdgogICAgICAgICAgICBjbGFzcz0iaWNvbi1jb250YWluZXIgaXNvbGF0b3ItY29udGFpbmVyIHZlcnRpY2FsLWFsaWduLWNvbnRhaW5lciIKICAgICAgICAgID4KICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgICAgaWNvbj0icmFkaW8tYnV0dG9uLXVuY2hlY2tlZCIKICAgICAgICAgICAgICBjbGFzcz0iaXNvbGF0b3IgdmVydGljYWwtYWxpZ24tY2VudGVyIgogICAgICAgICAgICAgIG9uLXRhcD0iX2lzb2xhdGVOYW1lIgogICAgICAgICAgICAgIG5hbWU9IltbaXRlbV1dIgogICAgICAgICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iaXRlbS1sYWJlbC1jb250YWluZXIiPgogICAgICAgICAgICA8c3Bhbj5bW2l0ZW1dXTwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIHBhcGVyLWlucHV0IHsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICB9CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWw6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICB9CiAgICAgIH0KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQogICAgICAjb3V0ZXItY29udGFpbmVyIHsKICAgICAgICBjb250YWluOiBjb250ZW50OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgfQogICAgICAubmFtZS1yb3cgewogICAgICAgIGNvbnRhaW46IGNvbnRlbnQ7CiAgICAgICAgcGFkZGluZy10b3A6IDVweDsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogNXB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgd29yZC1icmVhazogYnJlYWstYWxsOyAvKiBtYWtlcyB3cmFwcGluZyBvZiBoeXBlcnBhcmFtIHN0cmluZ3MgYmV0dGVyICovCiAgICAgIH0KICAgICAgLmljb24tY29udGFpbmVyIHsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAycHg7CiAgICAgIH0KICAgICAgLmNoZWNrYm94IHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDJweDsKICAgICAgICB3aWR0aDogMThweDsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgIH0KICAgICAgLmlzb2xhdG9yIHsKICAgICAgICB3aWR0aDogMThweDsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgICAgcGFkZGluZzogMHB4OwogICAgICB9CiAgICAgIC5pc29sYXRvci1jb250YWluZXIgewogICAgICAgIHBhZGRpbmctbGVmdDogNnB4OwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDNweDsKICAgICAgfQogICAgICAuY2hlY2tib3gtY29udGFpbmVyIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDJweDsKICAgICAgfQogICAgICAuaXRlbS1sYWJlbC1jb250YWluZXIgewogICAgICAgIHBhZGRpbmctbGVmdDogNXB4OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICB3aWR0aDogMHB4OyAvKiBoYWNrIHRvIGdldCB0aGUgZmxleC1ncm93IHRvIHdvcmsgcHJvcGVybHkgKi8KICAgICAgfQogICAgICAudG9vbHRpcC12YWx1ZS1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIHBhZGRpbmctbGVmdDogMnB4OwogICAgICB9CiAgICAgIC52ZXJ0aWNhbC1hbGlnbi1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KICAgICAgLnZlcnRpY2FsLWFsaWduLWNvbnRhaW5lciAudmVydGljYWwtYWxpZ24tY2VudGVyIHsKICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgIH0KICAgICAgLnZlcnRpY2FsLWFsaWduLWNvbnRhaW5lciAudmVydGljYWwtYWxpZ24tdG9wIHsKICAgICAgICBhbGlnbi1zZWxmOiBzdGFydDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxhbC5wcm90b3R5cGUsIm5hbWVzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGFsLnByb3RvdHlwZSwiY29sb3JpbmciLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGFsLnByb3RvdHlwZSwicmVnZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheSxjb21wdXRlZDoiY29tcHV0ZU5hbWVzTWF0Y2hpbmdSZWdleChuYW1lcy4qLCBfcmVnZXgpIn0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLGFsLnByb3RvdHlwZSwibmFtZXNNYXRjaGluZ1JlZ2V4Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxhbC5wcm90b3R5cGUsInNlbGVjdGlvblN0YXRlIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXksbm90aWZ5OiEwLGNvbXB1dGVkOiJjb21wdXRlT3V0U2VsZWN0ZWQobmFtZXNNYXRjaGluZ1JlZ2V4LiosIHNlbGVjdGlvblN0YXRlLiopIn0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLGFsLnByb3RvdHlwZSwib3V0U2VsZWN0ZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sYWwucHJvdG90eXBlLCJtYXhOYW1lc1RvRW5hYmxlQnlEZWZhdWx0Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGFsLnByb3RvdHlwZSwiX2RlYm91bmNlZFJlZ2V4Q2hhbmdlIix2b2lkIDApO0UoW1J0KCJyZWdleCIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGFsLnByb3RvdHlwZSwiX3JlZ2V4IixudWxsKTtFKFtCdCgic2VsZWN0aW9uU3RhdGUiLCJuYW1lcyIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sYWwucHJvdG90eXBlLCJfc2V0SXNvbGF0b3JJY29uIixudWxsKTthbD1FKFt5dCgidGYtbXVsdGktY2hlY2tib3giKV0sYWwpO3ZhciBhMj1jbGFzcyBleHRlbmRzIG10e2dldCBfcGFydHMoKXt2YXIgdD10aGlzLnZhbHVlLHI9dGhpcy5kZWxpbWl0ZXJQYXR0ZXJuO2xldCBuPVtdO2Zvcig7Oyl7bGV0IGk9bmV3IFJlZ0V4cChyLCJnIik7aWYoaS50ZXN0KHQpLGkubGFzdEluZGV4PT09MCl7bi5wdXNoKHQpO2JyZWFrfWVsc2Ugbi5wdXNoKHQuc2xpY2UoMCxpLmxhc3RJbmRleCkpLHQ9dC5zbGljZShpLmxhc3RJbmRleCl9cmV0dXJuIG59fTthMi50ZW1wbGF0ZT1RYAogICAgPCEtLQogICAgICBUaGlzIHVnbHkgZm9ybWF0dGluZyBpcyByZXF1aXJlZCB0byBwcmV2ZW50IHNwYWNlcyBmcm9tIHNsaXBwaW5nCiAgICAgIGludG8gdGhlIEhUTUwuCiAgICAtLT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX3BhcnRzXV0iIGFzPSJwYXJ0IgogICAgICA+W1twYXJ0XV08d2JyCiAgICAvPjwvdGVtcGxhdGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxhMi5wcm90b3R5cGUsInZhbHVlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGEyLnByb3RvdHlwZSwiZGVsaW1pdGVyUGF0dGVybiIsdm9pZCAwKTtFKFtSdCgidmFsdWUiLCJkZWxpbWl0ZXJQYXR0ZXJuIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxhMi5wcm90b3R5cGUsIl9wYXJ0cyIsbnVsbCk7YTI9RShbeXQoInRmLXdici1zdHJpbmciKV0sYTIpO3ZhciBtYz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5ydW5TZWxlY3Rpb25TdGF0ZT1PVygicnVuU2VsZWN0aW9uU3RhdGUiLHtkZWZhdWx0VmFsdWU6e319KS5jYWxsKHRoaXMpLHRoaXMucmVnZXhJbnB1dD12XygicmVnZXhJbnB1dCIse2RlZmF1bHRWYWx1ZToiIn0pLmNhbGwodGhpcyksdGhpcy5fZGF0YUxvY2F0aW9uQ2xpcExlbmd0aD0yNTAsdGhpcy5fZGF0YUxvY2F0aW9uRGVsaW1pdGVyUGF0dGVybj0iWy89XywtXSIsdGhpcy5jb2xvcmluZz17Z2V0Q29sb3I6Zm59LHRoaXMuX3N0b3JlUnVuU2VsZWN0aW9uU3RhdGU9elcoInJ1blNlbGVjdGlvblN0YXRlIix7ZGVmYXVsdFZhbHVlOnt9fSksdGhpcy5fcmVnZXhPYnNlcnZlcj14XygicmVnZXhJbnB1dCIse2RlZmF1bHRWYWx1ZToiIn0pfWF0dGFjaGVkKCl7dGhpcy5fcnVuU3RvcmVMaXN0ZW5lcj1TcC5hZGRMaXN0ZW5lcigoKT0+e3RoaXMuc2V0KCJydW5zIixTcC5nZXRSdW5zKCkpfSksdGhpcy5zZXQoInJ1bnMiLFNwLmdldFJ1bnMoKSksdGhpcy5fZW52U3RvcmVMaXN0ZW5lcj1pYi5hZGRMaXN0ZW5lcigoKT0+e3RoaXMuc2V0KCJkYXRhTG9jYXRpb24iLGliLmdldERhdGFMb2NhdGlvbigpKX0pLHRoaXMuc2V0KCJkYXRhTG9jYXRpb24iLGliLmdldERhdGFMb2NhdGlvbigpKX1kZXRhY2hlZCgpe1NwLnJlbW92ZUxpc3RlbmVyQnlLZXkodGhpcy5fcnVuU3RvcmVMaXN0ZW5lciksaWIucmVtb3ZlTGlzdGVuZXJCeUtleSh0aGlzLl9lbnZTdG9yZUxpc3RlbmVyKX1fdG9nZ2xlQWxsKCl7dGhpcy4kLm11bHRpQ2hlY2tib3gudG9nZ2xlQWxsKCl9Z2V0IF9jbGlwcGVkRGF0YUxvY2F0aW9uKCl7dmFyIHQ9dGhpcy5kYXRhTG9jYXRpb24scj10aGlzLl9kYXRhTG9jYXRpb25DbGlwTGVuZ3RoO2lmKHQhPT12b2lkIDApcmV0dXJuIHQubGVuZ3RoPnI/dC5zdWJzdHJpbmcoMCxyKTp0fV9vcGVuRGF0YUxvY2F0aW9uRGlhbG9nKHQpe3QucHJldmVudERlZmF1bHQoKSx0aGlzLiQkKCIjZGF0YS1sb2NhdGlvbi1kaWFsb2ciKS5vcGVuKCl9X3Nob3VsZFNob3dFeHBhbmREYXRhTG9jYXRpb25CdXR0b24odCxyKXtyZXR1cm4gdCYmdC5sZW5ndGg+cn19O21jLnRlbXBsYXRlPVFgCiAgICA8cGFwZXItZGlhbG9nIHdpdGgtYmFja2Ryb3A9IiIgaWQ9ImRhdGEtbG9jYXRpb24tZGlhbG9nIj4KICAgICAgPGgyPkRhdGEgTG9jYXRpb248L2gyPgogICAgICA8dGYtd2JyLXN0cmluZwogICAgICAgIHZhbHVlPSJbW2RhdGFMb2NhdGlvbl1dIgogICAgICAgIGRlbGltaXRlci1wYXR0ZXJuPSJbW19kYXRhTG9jYXRpb25EZWxpbWl0ZXJQYXR0ZXJuXV0iCiAgICAgID4KICAgICAgPC90Zi13YnItc3RyaW5nCiAgICA+PC9wYXBlci1kaWFsb2c+CiAgICA8ZGl2IGlkPSJ0b3AtdGV4dCI+CiAgICAgIDxoMyBpZD0idG9vbHRpcC1oZWxwIiBjbGFzcz0idG9vbHRpcC1jb250YWluZXIiPlJ1bnM8L2gzPgogICAgPC9kaXY+CiAgICA8dGYtbXVsdGktY2hlY2tib3gKICAgICAgaWQ9Im11bHRpQ2hlY2tib3giCiAgICAgIG5hbWVzPSJbW3J1bnNdXSIKICAgICAgc2VsZWN0aW9uLXN0YXRlPSJ7e3J1blNlbGVjdGlvblN0YXRlfX0iCiAgICAgIG91dC1zZWxlY3RlZD0ie3tzZWxlY3RlZFJ1bnN9fSIKICAgICAgcmVnZXg9Int7cmVnZXhJbnB1dH19IgogICAgICBjb2xvcmluZz0iW1tjb2xvcmluZ11dIgogICAgPjwvdGYtbXVsdGktY2hlY2tib3g+CiAgICA8cGFwZXItYnV0dG9uIGNsYXNzPSJ4LWJ1dHRvbiIgaWQ9InRvZ2dsZS1hbGwiIG9uLXRhcD0iX3RvZ2dsZUFsbCI+CiAgICAgIFRvZ2dsZSBBbGwgUnVucwogICAgPC9wYXBlci1idXR0b24+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZGF0YUxvY2F0aW9uXV0iPgogICAgICA8ZGl2IGlkPSJkYXRhLWxvY2F0aW9uIj4KICAgICAgICA8dGYtd2JyLXN0cmluZwogICAgICAgICAgdmFsdWU9IltbX2NsaXBwZWREYXRhTG9jYXRpb25dXSIKICAgICAgICAgIGRlbGltaXRlci1wYXR0ZXJuPSJbW19kYXRhTG9jYXRpb25EZWxpbWl0ZXJQYXR0ZXJuXV0iCiAgICAgICAgPjwvdGYtd2JyLXN0cmluZwogICAgICAgID48IS0tCiAgICAgICAgICBXZSB1c2UgSFRNTCBjb21tZW50cyB0byByZW1vdmUgc3BhY2VzIGJlZm9yZSB0aGUgZWxsaXBzaXMuCiAgICAgICAgLS0+PHRlbXBsYXRlCiAgICAgICAgICBpcz0iZG9tLWlmIgogICAgICAgICAgaWY9IltbX3Nob3VsZFNob3dFeHBhbmREYXRhTG9jYXRpb25CdXR0b24oZGF0YUxvY2F0aW9uLCBfZGF0YUxvY2F0aW9uQ2xpcExlbmd0aCldXSIKICAgICAgICAgID48IS0tCiAgICAgICAgICAtLT48YSBocmVmPSIiIG9uLWNsaWNrPSJfb3BlbkRhdGFMb2NhdGlvbkRpYWxvZyI+4oCmPC9hPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHBhZGRpbmctYm90dG9tOiAxMHB4OwogICAgICB9CiAgICAgICN0b3AtdGV4dCB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgcGFkZGluZy1yaWdodDogMTZweDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CiAgICAgIHRmLXdici1zdHJpbmcgewogICAgICAgIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgIH0KICAgICAgdGYtbXVsdGktY2hlY2tib3ggewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KICAgICAgLngtYnV0dG9uIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgICBjb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICB9CiAgICAgICN0b29sdGlwLWhlbHAgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgICAgfQogICAgICBwYXBlci1idXR0b24gewogICAgICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgICB9CiAgICAgICNkYXRhLWxvY2F0aW9uIHsKICAgICAgICBjb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBtYXJnaW46IDVweCAwIDAgMDsKICAgICAgICBtYXgtd2lkdGg6IDI4OHB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il9zdG9yZVJ1blNlbGVjdGlvblN0YXRlIn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxtYy5wcm90b3R5cGUsInJ1blNlbGVjdGlvblN0YXRlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfcmVnZXhPYnNlcnZlciJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbWMucHJvdG90eXBlLCJyZWdleElucHV0Iix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXksbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sbWMucHJvdG90eXBlLCJzZWxlY3RlZFJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG1jLnByb3RvdHlwZSwicnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbWMucHJvdG90eXBlLCJkYXRhTG9jYXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sbWMucHJvdG90eXBlLCJfZGF0YUxvY2F0aW9uQ2xpcExlbmd0aCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxtYy5wcm90b3R5cGUsIl9kYXRhTG9jYXRpb25EZWxpbWl0ZXJQYXR0ZXJuIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLG1jLnByb3RvdHlwZSwiY29sb3JpbmciLHZvaWQgMCk7RShbUnQoImRhdGFMb2NhdGlvbiIsIl9kYXRhTG9jYXRpb25DbGlwTGVuZ3RoIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sbWMucHJvdG90eXBlLCJfY2xpcHBlZERhdGFMb2NhdGlvbiIsbnVsbCk7bWM9RShbeXQoInRmLXJ1bnMtc2VsZWN0b3IiKV0sbWMpO3ZhciBhbj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuY2FuY2VsbGF0aW9uQ291bnQ9MH1jYW5jZWxsYWJsZSh0KXtsZXQgcj10aGlzLmNhbmNlbGxhdGlvbkNvdW50O3JldHVybiBuPT57bGV0IGk9dGhpcy5jYW5jZWxsYXRpb25Db3VudCE9PXI7cmV0dXJuIHQoe3ZhbHVlOm4sY2FuY2VsbGVkOml9KX19Y2FuY2VsQWxsKCl7dGhpcy5jYW5jZWxsYXRpb25Db3VudCsrfX07dmFyIEg1PWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmh0bWw9IiJ9Z2V0IHNhbml0aXplZEh0bWwoKXtyZXR1cm4gdGhpcy5odG1sfWF0dGFjaGVkKCl7d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuc2NvcGVTdWJ0cmVlKHRoaXMuJC5tYXJrZG93biwhMCl9KX19O0g1LnRlbXBsYXRlPVFgCiAgICA8ZGl2IGlkPSJtYXJrZG93biIgaW5uZXItaC10LW0tbD0iW1tzYW5pdGl6ZWRIdG1sXV0iPjwvZGl2PgogICAgPHN0eWxlPgogICAgICAvKgogICAgICAgKiBSZWR1Y2UgdG9wbW9zdCBhbmQgYm90dG9tbW9zdCBtYXJnaW5zIGZyb20gMTZweCB0byAwLjNlbSAocmVuZGVycwogICAgICAgKiBhdCBhYm91dCA0LjhweCkgdG8ga2VlcCB0aGUgbGF5b3V0IGNvbXBhY3QuIFRoaXMgaW1wcm92ZXMgdGhlCiAgICAgICAqIGFwcGVhcmFuY2Ugd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSBsaW5lIG9mIHRleHQ7IHN0YW5kYXJkIE1hcmtkb3duCiAgICAgICAqIHJlbmRlcmVycyB3aWxsIHN0aWxsIGluY2x1ZGUgYSBcYDxwPlxgIGVsZW1lbnQuCiAgICAgICAqCiAgICAgICAqIEJ5IHRhcmdldGluZyBvbmx5IHRoZSB0b3AtbGV2ZWwsIGV4dHJlbWFsIGVsZW1lbnRzLCB3ZSBwcmVzZXJ2ZSBhbnkKICAgICAgICogYWN0dWFsIHBhcmFncmFwaCBicmVha3MgYW5kIG9ubHkgY2hhbmdlIHRoZSBwYWRkaW5nIGFnYWluc3QgdGhlCiAgICAgICAqIGNvbXBvbmVudCBlZGdlcy4KICAgICAgICovCiAgICAgICNtYXJrZG93biA+IHA6Zmlyc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi10b3A6IDAuM2VtOwogICAgICB9CiAgICAgICNtYXJrZG93biA+IHA6bGFzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMC4zZW07CiAgICAgIH0KICAgICAgI21hcmtkb3duIHAgewogICAgICAgIC8qIFNvbWUgdXNlcnMgaW5jbHVkZSBtdWx0aXBsZSBzcGFjZXMgYW5kIHdvdWxkIGxpa2UgdGhlbSBwcmVzZXJ2ZWQgaW4KICAgICAgICAgKiB0aGUgdGV4dCB2aXN1YWxpemF0aW9uIGluIFRCLiBHb29nbGVycywgc2VlIGIvMzM1NzcwMzUyLgogICAgICAgICAqLwogICAgICAgIHdoaXRlLXNwYWNlOiBicmVhay1zcGFjZXM7CiAgICAgIH0KCiAgICAgIC8qIFBsZWFzYW50IHN0eWxlcyBmb3IgTWFya2Rvd24gdGFibGVzLiAqLwogICAgICAjbWFya2Rvd24gdGFibGUgewogICAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CiAgICAgIH0KICAgICAgI21hcmtkb3duIHRhYmxlIHRoIHsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICB9CiAgICAgICNtYXJrZG93biB0YWJsZSB0aCwKICAgICAgI21hcmtkb3duIHRhYmxlIHRkIHsKICAgICAgICBwYWRkaW5nOiA2cHggMTNweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS10Yi11aS1ib3JkZXIsICNkZmUyZTUpOwogICAgICB9CiAgICAgICNtYXJrZG93biB0YWJsZSB0ciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tdGItdWktYm9yZGVyLCAjYzZjYmQxKTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEg1LnByb3RvdHlwZSwiaHRtbCIsdm9pZCAwKTtFKFtSdCgiaHRtbCIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEg1LnByb3RvdHlwZSwic2FuaXRpemVkSHRtbCIsbnVsbCk7SDU9RShbeXQoInRmLW1hcmtkb3duLXZpZXciKV0sSDUpO3lzKHttb2R1bGVOYW1lOiJ0Zi1jYXJkLWhlYWRpbmctc3R5bGUiLHN0eWxlQ29udGVudDpgCiAgICBmaWdjYXB0aW9uIHsKICAgICAgd2lkdGg6IDEwMCU7CiAgICB9CgogICAgLyoqIEhvcml6b250YWwgbGluZSBvZiBsYWJlbHMuICovCiAgICAuaGVhZGluZy1yb3cgewogICAgICBtYXJnaW4tdG9wOiAtNHB4OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICB9CgogICAgLyoqIFBpZWNlIG9mIHRleHQgaW4gdGhlIGZpZ3VyZSBjYXB0aW9uLiAqLwogICAgLmhlYWRpbmctbGFiZWwgewogICAgICBmbGV4LWdyb3c6IDE7CiAgICAgIG1hcmdpbi10b3A6IDRweDsKICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICB9CgogICAgLyoqIE1ha2VzIGxhYmVsIHNob3cgb24gdGhlIHJpZ2h0LiAqLwogICAgLmhlYWRpbmctcmlnaHQgewogICAgICBmbGV4LWdyb3c6IDA7CiAgICB9CiAgYH0pO2Z1bmN0aW9uIHMyKGUpe3JldHVybiBlP2UudG9TdHJpbmcoKS5yZXBsYWNlKC9HTVQtXGQrIFwoKFteKV0rKVwpLywiJDEiKToiIn1mdW5jdGlvbiB0TXQoZSl7bGV0IHQ9cDVlKGUpO3JldHVybiB0P01hdGgucm91bmQoKHRbMF0qMjk5K3RbMV0qNTg3K3RbMl0qMTE0KS8xZTMpPjEyNT8iaW5oZXJpdCI6IiNlZWUiOiJpbmhlcml0In1mdW5jdGlvbiBwNWUoZSl7aWYoIWUpcmV0dXJuIG51bGw7bGV0IHQ9ZS5tYXRjaCgvXiMoWzAtOWEtZl17MSwyfSkoWzAtOWEtZl17MSwyfSkoWzAtOWEtZl17MSwyfSkkLyk7aWYoIXQpcmV0dXJuIG51bGw7aWYoZS5sZW5ndGg9PTQpZm9yKHZhciByPTE7cjw9MztyKyspdFtyXT10W3JdK3Rbcl07cmV0dXJuW3BhcnNlSW50KHRbMV0sMTYpLHBhcnNlSW50KHRbMl0sMTYpLHBhcnNlSW50KHRbM10sMTYpXX12YXIgZ2M9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5kaXNwbGF5TmFtZT1udWxsLHRoaXMudGFnPW51bGwsdGhpcy5ydW49bnVsbCx0aGlzLmRlc2NyaXB0aW9uPW51bGwsdGhpcy5jb2xvcj1udWxsfV91cGRhdGVIZWFkaW5nU3R5bGUoKXt0aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tdGYtY2FyZC1oZWFkaW5nLWJhY2tncm91bmQtY29sb3IiOnRoaXMuX3J1bkJhY2tncm91bmQsIi0tdGYtY2FyZC1oZWFkaW5nLWNvbG9yIjp0aGlzLl9ydW5Db2xvcn0pfV9jb21wdXRlUnVuQmFja2dyb3VuZCh0KXtyZXR1cm4gdHx8Im5vbmUifV9jb21wdXRlUnVuQ29sb3IodCl7cmV0dXJuIHRNdCh0KX1nZXQgX25hbWVMYWJlbCgpe3ZhciB0PXRoaXMuZGlzcGxheU5hbWUscj10aGlzLnRhZztyZXR1cm4gdHx8cnx8IiJ9Z2V0IF90YWdMYWJlbCgpe3ZhciB0PXRoaXMuZGlzcGxheU5hbWUscj10aGlzLnRhZztyZXR1cm4gciYmciE9PXQ/cjoiIn1fdG9nZ2xlRGVzY3JpcHRpb25EaWFsb2codCl7bGV0IHI9dGhpcy4kLmRlc2NyaXB0aW9uRGlhbG9nO3IucG9zaXRpb25UYXJnZXQ9dC50YXJnZXQsci50b2dnbGUoKX19O2djLnRlbXBsYXRlPVFgCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgICA8ZmlnY2FwdGlvbiBjbGFzcz0iY29udGVudCI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19uYW1lTGFiZWxdXSI+CiAgICAgICAgICAgIDxkaXYgaXRlbXByb3A9Im5hbWUiIGNsYXNzPSJoZWFkaW5nLWxhYmVsIG5hbWUiPltbX25hbWVMYWJlbF1dPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3J1bl1dIj4KICAgICAgICAgICAgPCEtLSBFeHRyYSB3cmFwcGluZyBzcGFuIG5lZWRlZCB0byBhdm9pZCBmbGV4Ym94IGJsb2NraWZpY2F0aW9uLiAtLT4KICAgICAgICAgICAgPCEtLSAoc2VlIGZsZXhib3ggc3BlYywgc2VjdGlvbiA0ICJGbGV4IEl0ZW1zIikgLS0+CiAgICAgICAgICAgIDxzcGFuPgogICAgICAgICAgICAgIDxzcGFuCiAgICAgICAgICAgICAgICBpdGVtcHJvcD0icnVuIgogICAgICAgICAgICAgICAgaWQ9ImhlYWRpbmctcnVuIgogICAgICAgICAgICAgICAgY2xhc3M9ImhlYWRpbmctbGFiZWwgaGVhZGluZy1yaWdodCBydW4iCiAgICAgICAgICAgICAgICA+W1tydW5dXTwvc3BhbgogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3RhZ0xhYmVsXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIj4KICAgICAgICAgICAgICB0YWc6IDxzcGFuIGl0ZW1wcm9wPSJ0YWciPltbX3RhZ0xhYmVsXV08L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8c2xvdD48L3Nsb3Q+CiAgICAgIDwvZmlnY2FwdGlvbj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2Rlc2NyaXB0aW9uXV0iPgogICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgICAgaWNvbj0iaW5mbyIKICAgICAgICAgIG9uLXRhcD0iX3RvZ2dsZURlc2NyaXB0aW9uRGlhbG9nIgogICAgICAgICAgdGl0bGU9IlNob3cgc3VtbWFyeSBkZXNjcmlwdGlvbiIKICAgICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHBhcGVyLWRpYWxvZwogICAgICAgIGlkPSJkZXNjcmlwdGlvbkRpYWxvZyIKICAgICAgICBuby1vdmVybGFwPSIiCiAgICAgICAgaG9yaXpvbnRhbC1hbGlnbj0iYXV0byIKICAgICAgICB2ZXJ0aWNhbC1hbGlnbj0iYXV0byIKICAgICAgPgogICAgICAgIDxwYXBlci1kaWFsb2ctc2Nyb2xsYWJsZT4KICAgICAgICAgIDx0Zi1tYXJrZG93bi12aWV3IGh0bWw9IltbZGVzY3JpcHRpb25dXSI+PC90Zi1tYXJrZG93bi12aWV3PgogICAgICAgIDwvcGFwZXItZGlhbG9nLXNjcm9sbGFibGU+CiAgICAgIDwvcGFwZXItZGlhbG9nPgogICAgPC9kaXY+CiAgICA8c3R5bGUgaW5jbHVkZT0idGYtY2FyZC1oZWFkaW5nLXN0eWxlIj4KICAgICAgLmNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQogICAgICAuY29udGVudCB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQogICAgICAubmFtZSB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CiAgICAgIC5ydW4gewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICB3aWR0aDogYXV0bzsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgICAgcGFkZGluZzogMXB4IDRweCAycHg7CiAgICAgIH0KICAgICAgcGFwZXItaWNvbi1idXR0b24gewogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgfQogICAgICBwYXBlci1kaWFsb2ctc2Nyb2xsYWJsZSB7CiAgICAgICAgbWF4LXdpZHRoOiA2NDBweDsKICAgICAgfQogICAgICAjaGVhZGluZy1ydW4gewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRmLWNhcmQtaGVhZGluZy1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgICBjb2xvcjogdmFyKC0tdGYtY2FyZC1oZWFkaW5nLWNvbG9yKTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGdjLnByb3RvdHlwZSwiZGlzcGxheU5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZ2MucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZ2MucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZ2MucHJvdG90eXBlLCJkZXNjcmlwdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxnYy5wcm90b3R5cGUsImNvbG9yIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVJ1bkJhY2tncm91bmQoY29sb3IpIixyZWFkT25seTohMCxvYnNlcnZlcjoiX3VwZGF0ZUhlYWRpbmdTdHlsZSJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZ2MucHJvdG90eXBlLCJfcnVuQmFja2dyb3VuZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVSdW5Db2xvcihjb2xvcikiLHJlYWRPbmx5OiEwLG9ic2VydmVyOiJfdXBkYXRlSGVhZGluZ1N0eWxlIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxnYy5wcm90b3R5cGUsIl9ydW5Db2xvciIsdm9pZCAwKTtFKFtSdCgiZGlzcGxheU5hbWUiLCJ0YWciKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxnYy5wcm90b3R5cGUsIl9uYW1lTGFiZWwiLG51bGwpO0UoW1J0KCJkaXNwbGF5TmFtZSIsInRhZyIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGdjLnByb3RvdHlwZSwiX3RhZ0xhYmVsIixudWxsKTtnYz1FKFt5dCgidGYtY2FyZC1oZWFkaW5nIildLGdjKTt2YXIgRmk9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX21ldGFkYXRhQ2FuY2VsbGVyPW5ldyBhbix0aGlzLl9zdGVwcz1bXSx0aGlzLl9hdHRhY2hlZD0hMX1nZXQgX3J1bkNvbG9yKCl7dmFyIHQ9dGhpcy5ydW47cmV0dXJuIGZuKHQpfWdldCBfaGFzQXRMZWFzdE9uZVN0ZXAoKXt2YXIgdD10aGlzLl9zdGVwcztyZXR1cm4hIXQmJnQubGVuZ3RoPjB9Z2V0IF9oYXNNdWx0aXBsZVN0ZXBzKCl7dmFyIHQ9dGhpcy5fc3RlcHM7cmV0dXJuISF0JiZ0Lmxlbmd0aD4xfWdldCBfbWF4U3RlcEluZGV4KCl7dmFyIHQ9dGhpcy5fc3RlcHM7cmV0dXJuIHQubGVuZ3RoLTF9Z2V0IF9jdXJyZW50RGF0dW0oKXt2YXIgdD10aGlzLl9zdGVwcyxyPXRoaXMuX3N0ZXBJbmRleDtyZXR1cm4gdFtyXX1nZXQgX3NhbXBsZVRleHQoKXt2YXIgdD10aGlzLnNhbXBsZTtyZXR1cm5gJHt0KzF9YH1nZXQgX2hhc011bHRpcGxlU2FtcGxlcygpe3ZhciB0PXRoaXMudG90YWxTYW1wbGVzO3JldHVybiB0PjF9YXR0YWNoZWQoKXt0aGlzLl9hdHRhY2hlZD0hMCx0aGlzLnJlbG9hZCgpfV9yZWxvYWRPblJ1blRhZ0NoYW5nZSgpe3RoaXMucmVsb2FkKCl9cmVsb2FkKCl7aWYoIXRoaXMuX2F0dGFjaGVkKXJldHVybjt0aGlzLl9tZXRhZGF0YUNhbmNlbGxlci5jYW5jZWxBbGwoKTtsZXQgcj1fZSgpLnBsdWdpblJvdXRlKCJhdWRpbyIsIi9hdWRpbyIsbmV3IFVSTFNlYXJjaFBhcmFtcyh7dGFnOnRoaXMudGFnLHJ1bjp0aGlzLnJ1bixzYW1wbGU6U3RyaW5nKHRoaXMuc2FtcGxlKX0pKSxuPXRoaXMuX21ldGFkYXRhQ2FuY2VsbGVyLmNhbmNlbGxhYmxlKGk9PntpZihpLmNhbmNlbGxlZClyZXR1cm47bGV0IGE9aS52YWx1ZS5tYXAodGhpcy5fY3JlYXRlU3RlcERhdHVtLmJpbmQodGhpcykpO3RoaXMuc2V0KCJfc3RlcHMiLGEpLHRoaXMuc2V0KCJfc3RlcEluZGV4IixhLmxlbmd0aC0xKX0pO3RoaXMucmVxdWVzdE1hbmFnZXIucmVxdWVzdChyKS50aGVuKG4pfV9jcmVhdGVTdGVwRGF0dW0odCl7bGV0IHI9bmV3IFVSTFNlYXJjaFBhcmFtcyh0LnF1ZXJ5KTtyLmFwcGVuZCgidHMiLFN0cmluZyh0LndhbGxfdGltZSkpO2xldCBuPV9lKCkucGx1Z2luUm91dGVGb3JTcmMoImF1ZGlvIiwiL2luZGl2aWR1YWxBdWRpbyIscik7cmV0dXJue3dhbGxfdGltZTpzMihuZXcgRGF0ZSh0LndhbGxfdGltZSoxZTMpKSxzdGVwOnQuc3RlcCxsYWJlbDp0LmxhYmVsLGNvbnRlbnRUeXBlOnQuY29udGVudFR5cGUsdXJsOm59fX07RmkudGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcKICAgICAgdGFnPSJbW3RhZ11dIgogICAgICBydW49IltbcnVuXV0iCiAgICAgIGRpc3BsYXktbmFtZT0iW1t0YWdNZXRhZGF0YS5kaXNwbGF5TmFtZV1dIgogICAgICBkZXNjcmlwdGlvbj0iW1t0YWdNZXRhZGF0YS5kZXNjcmlwdGlvbl1dIgogICAgICBjb2xvcj0iW1tfcnVuQ29sb3JdXSIKICAgID4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZVNhbXBsZXNdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1sYWJlbCI+CiAgICAgICAgICAgIHNhbXBsZTogW1tfc2FtcGxlVGV4dF1dIG9mIFtbdG90YWxTYW1wbGVzXV0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc0F0TGVhc3RPbmVTdGVwXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctcm93Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctbGFiZWwiPgogICAgICAgICAgICBzdGVwIDxzdHJvbmc+W1tfY3VycmVudERhdHVtLnN0ZXBdXTwvc3Ryb25nPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2N1cnJlbnREYXR1bS53YWxsX3RpbWVdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctbGFiZWwgaGVhZGluZy1yaWdodCI+CiAgICAgICAgICAgICAgW1tfY3VycmVudERhdHVtLndhbGxfdGltZV1dCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZVN0ZXBzXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctcm93Ij4KICAgICAgICAgIDxwYXBlci1zbGlkZXIKICAgICAgICAgICAgaWQ9InN0ZXBzIgogICAgICAgICAgICBpbW1lZGlhdGUtdmFsdWU9Int7X3N0ZXBJbmRleH19IgogICAgICAgICAgICBtYXg9IltbX21heFN0ZXBJbmRleF1dIgogICAgICAgICAgICBtYXgtbWFya2Vycz0iW1tfbWF4U3RlcEluZGV4XV0iCiAgICAgICAgICAgIHNuYXBzPSIiCiAgICAgICAgICAgIHN0ZXA9IjEiCiAgICAgICAgICAgIHZhbHVlPSJ7e19zdGVwSW5kZXh9fSIKICAgICAgICAgID48L3BhcGVyLXNsaWRlcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvdGYtY2FyZC1oZWFkaW5nPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNBdExlYXN0T25lU3RlcF1dIj4KICAgICAgPGF1ZGlvCiAgICAgICAgY29udHJvbHM9IiIKICAgICAgICBzcmMkPSJbW19jdXJyZW50RGF0dW0udXJsXV0iCiAgICAgICAgdHlwZSQ9IltbX2N1cnJlbnREYXR1bS5jb250ZW50VHlwZV1dIgogICAgICA+PC9hdWRpbz4KICAgICAgPHRmLW1hcmtkb3duLXZpZXcgaHRtbD0iW1tfY3VycmVudERhdHVtLmxhYmVsXV0iPjwvdGYtbWFya2Rvd24tdmlldz4KICAgIDwvdGVtcGxhdGU+CiAgICA8ZGl2IGlkPSJtYWluLWF1ZGlvLWNvbnRhaW5lciI+PC9kaXY+CgogICAgPHN0eWxlIGluY2x1ZGU9InRmLWNhcmQtaGVhZGluZy1zdHlsZSI+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMzUwcHg7CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3I6ICM0MjQyNDI7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxNXB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICAgIH0KCiAgICAgICNzdGVwcyB7CiAgICAgICAgaGVpZ2h0OiAxNXB4OwogICAgICAgIG1hcmdpbjogMCAwIDAgLTE1cHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBwYWRkaW5nOiAwIDVweDsgLyogc28gdGhlIHNsaWRlciBrbm9iIGRvZXNuJ3QgYnV0dCBvdXQgKi8KICAgICAgICBtYXJnaW4tdG9wOiA1cHg7CiAgICAgICAgLS1wYXBlci1zbGlkZXItYWN0aXZlLWNvbG9yOiB2YXIoLS1zdGVwLXNsaWRlci1rbm9iLWNvbG9yKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yOiB2YXIoLS1zdGVwLXNsaWRlci1rbm9iLWNvbG9yKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tY29sb3I6IHZhcigtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3IpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtY29sb3I6IHZhcigtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3IpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtYm9yZGVyLWNvbG9yOiB2YXIoLS1zdGVwLXNsaWRlci1rbm9iLWNvbG9yKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tc3RhcnQtY29sb3I6IHZhcigtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3IpOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRmkucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRmkucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sRmkucHJvdG90eXBlLCJzYW1wbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sRmkucHJvdG90eXBlLCJ0b3RhbFNhbXBsZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRmkucHJvdG90eXBlLCJ0YWdNZXRhZGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLEZpLnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsYW4pXSxGaS5wcm90b3R5cGUsIl9tZXRhZGF0YUNhbmNlbGxlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sRmkucHJvdG90eXBlLCJfc3RlcHMiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sRmkucHJvdG90eXBlLCJfc3RlcEluZGV4Iix2b2lkIDApO0UoW1J0KCJydW4iKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxGaS5wcm90b3R5cGUsIl9ydW5Db2xvciIsbnVsbCk7RShbUnQoIl9zdGVwcyIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxGaS5wcm90b3R5cGUsIl9oYXNBdExlYXN0T25lU3RlcCIsbnVsbCk7RShbUnQoIl9zdGVwcyIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxGaS5wcm90b3R5cGUsIl9oYXNNdWx0aXBsZVN0ZXBzIixudWxsKTtFKFtSdCgiX3N0ZXBzIiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sRmkucHJvdG90eXBlLCJfbWF4U3RlcEluZGV4IixudWxsKTtFKFtSdCgiX3N0ZXBzIiwiX3N0ZXBJbmRleCIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEZpLnByb3RvdHlwZSwiX2N1cnJlbnREYXR1bSIsbnVsbCk7RShbUnQoInNhbXBsZSIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEZpLnByb3RvdHlwZSwiX3NhbXBsZVRleHQiLG51bGwpO0UoW1J0KCJ0b3RhbFNhbXBsZXMiKSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sRmkucHJvdG90eXBlLCJfaGFzTXVsdGlwbGVTYW1wbGVzIixudWxsKTtFKFtCdCgicnVuIiwidGFnIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxGaS5wcm90b3R5cGUsIl9yZWxvYWRPblJ1blRhZ0NoYW5nZSIsbnVsbCk7Rmk9RShbeXQoInRmLWF1ZGlvLWxvYWRlciIpXSxGaSk7dmFyIEtoPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnJlbG9hZE9uUmVhZHk9ITAsdGhpcy5fdGFnRmlsdGVyPSIiLHRoaXMuX3JlcXVlc3RNYW5hZ2VyPW5ldyBBZX1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5yZWxvYWRPblJlYWR5JiZ0aGlzLnJlbG9hZCgpfXJlbG9hZCgpe3RoaXMuX2ZldGNoVGFncygpLnRoZW4oKCk9Pnt0aGlzLl9yZWxvYWRBdWRpbygpfSl9X2ZldGNoVGFncygpe2xldCB0PV9lKCkucGx1Z2luUm91dGUoImF1ZGlvIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntpZihweS5pc0VxdWFsKHIsdGhpcy5fcnVuVG9UYWdJbmZvKSlyZXR1cm47bGV0IG49cHkubWFwVmFsdWVzKHIsbz0+T2JqZWN0LmtleXMobykpLGk9JGkobik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLGkubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLHIpfSl9X3JlbG9hZEF1ZGlvKCl7dmFyIHQ7KHQ9dGhpcy5yb290KT09bnVsbHx8dC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1hdWRpby1sb2FkZXIiKS5mb3JFYWNoKHI9PntyLnJlbG9hZCgpfSl9X3Nob3VsZE9wZW4odCl7cmV0dXJuIHQ8PTJ9Z2V0IF9jYXRlZ29yaWVzKCl7dmFyIHQ9dGhpcy5fcnVuVG9UYWdJbmZvLHI9dGhpcy5fc2VsZWN0ZWRSdW5zLG49dGhpcy5fdGFnRmlsdGVyO2xldCBpPXB5Lm1hcFZhbHVlcyh0LGw9Pk9iamVjdC5rZXlzKGwpKSxvPVFsKGkscixuKTtmdW5jdGlvbiBhKGwpe2xldCBjPXRbbC5ydW5dW2wudGFnXS5zYW1wbGVzO3JldHVybiBweS5yYW5nZShjKS5tYXAodT0+T2JqZWN0LmFzc2lnbih7fSxsLHtzYW1wbGU6dSx0b3RhbFNhbXBsZXM6Y30pKX1yZXR1cm4gby5tYXAobD0+T2JqZWN0LmFzc2lnbih7fSxsLHtpdGVtczpbXS5jb25jYXQuYXBwbHkoW10sbC5pdGVtcy5tYXAoYSkpfSkpfV90YWdNZXRhZGF0YSh0LHIsbil7cmV0dXJuIHRbcl1bbl19fTtLaC50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiBydW5zLXNlbGVjdG9yIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yCiAgICAgICAgICAgIGlkPSJydW5zLXNlbGVjdG9yIgogICAgICAgICAgICBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSIKICAgICAgICAgID48L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjZW50ZXIiIHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gYXVkaW8gZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT5Zb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IGF1ZGlvIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1hdWRpby1sb2FkZXIKICAgICAgICAgICAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgICAgICAgICAgICBydW49IltbaXRlbS5ydW5dXSIKICAgICAgICAgICAgICAgICAgdGFnPSJbW2l0ZW0udGFnXV0iCiAgICAgICAgICAgICAgICAgIHNhbXBsZT0iW1tpdGVtLnNhbXBsZV1dIgogICAgICAgICAgICAgICAgICB0b3RhbC1zYW1wbGVzPSJbW2l0ZW0udG90YWxTYW1wbGVzXV0iCiAgICAgICAgICAgICAgICAgIHRhZy1tZXRhZGF0YT0iW1tfdGFnTWV0YWRhdGEoX3J1blRvVGFnSW5mbywgaXRlbS5ydW4sIGl0ZW0udGFnKV1dIgogICAgICAgICAgICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgICAgICAgICA+PC90Zi1hdWRpby1sb2FkZXI+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sS2gucHJvdG90eXBlLCJyZWxvYWRPblJlYWR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxLaC5wcm90b3R5cGUsIl9zZWxlY3RlZFJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sS2gucHJvdG90eXBlLCJfcnVuVG9UYWdJbmZvIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sS2gucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEtoLnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLEtoLnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW1J0KCJfcnVuVG9UYWdJbmZvIiwiX3NlbGVjdGVkUnVucyIsIl90YWdGaWx0ZXIiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEtoLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpO0toPUUoW3l0KCJ0Zi1hdWRpby1kYXNoYm9hcmQiKV0sS2gpO3ZhciBWNT1jbGFzcyBleHRlbmRzIEd0KG10KXthdHRhY2hlZCgpe3RoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLmdldEVmZmVjdGl2ZUNoaWxkcmVuKCkuZm9yRWFjaChmdW5jdGlvbih0KXt0aGlzLmxpc3Rlbih0LCJ0YXAiLCJfc2VsZWN0VGFyZ2V0Iil9LmJpbmQodGhpcykpfSl9X3NlbGVjdFRhcmdldCh0KXt0aGlzLnNlbGVjdGVkSWQ9dC5jdXJyZW50VGFyZ2V0LmlkfV9zZWxlY3RlZElkQ2hhbmdlZCgpe3ZhciB0PXRoaXMucXVlcnlFZmZlY3RpdmVDaGlsZHJlbigiIyIrdGhpcy5zZWxlY3RlZElkKTshdHx8KHRoaXMuZ2V0RWZmZWN0aXZlQ2hpbGRyZW4oKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3IuY2xhc3NMaXN0LnJlbW92ZSgic2VsZWN0ZWQiKX0pLHQuY2xhc3NMaXN0LmFkZCgic2VsZWN0ZWQiKSl9fTtWNS50ZW1wbGF0ZT1RYAogICAgPGRpdiBpZD0id3JhcCI+CiAgICAgIDxoMz5bW25hbWVdXTwvaDM+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQtd3JhcHBlciI+PHNsb3Q+PC9zbG90PjwvZGl2PgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIC5jb250ZW50LXdyYXBwZXIgOjpzbG90dGVkKCopIHsKICAgICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICAgIGNvbG9yOiB2YXIoLS10Yi11aS1kYXJrLWFjY2VudCk7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5jb250ZW50LXdyYXBwZXIgOjpzbG90dGVkKCopIHsKICAgICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICAgIGNvbG9yOiB2YXIoLS10Yi11aS1kYXJrLWFjY2VudCk7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5jb250ZW50LXdyYXBwZXIgOjpzbG90dGVkKC5zZWxlY3RlZCkgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTsKICAgICAgICBjb2xvcjogd2hpdGUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgaDMgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgbWFyZ2luOiAwIDAgNXB4OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sVjUucHJvdG90eXBlLCJuYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMCxvYnNlcnZlcjoiX3NlbGVjdGVkSWRDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxWNS5wcm90b3R5cGUsInNlbGVjdGVkSWQiLHZvaWQgMCk7VjU9RShbeXQoInRmLW9wdGlvbi1zZWxlY3RvciIpXSxWNSk7ZnVuY3Rpb24gb1IoZSx0KXtsZXQgcixuPXt9O09iamVjdC5rZXlzKGUpLmZvckVhY2goYT0+e2xldCBzPWVbYV07cj09PXZvaWQgMCYmKHI9cy5kaXNwbGF5TmFtZSksciE9PXMuZGlzcGxheU5hbWUmJihyPW51bGwpLG5bcy5kZXNjcmlwdGlvbl09PT12b2lkIDAmJihuW3MuZGVzY3JpcHRpb25dPVtdKSxuW3MuZGVzY3JpcHRpb25dLnB1c2goYSl9KTtsZXQgaT1yIT1udWxsP3I6dCxvPSgoKT0+e2xldCBhPU9iamVjdC5rZXlzKG4pO3JldHVybiBhLmxlbmd0aD09PTA/IiI6YS5sZW5ndGg9PT0xP2FbMF06YDxwPjxzdHJvbmc+TXVsdGlwbGUgZGVzY3JpcHRpb25zOjwvc3Ryb25nPjwvcD48dWw+JHthLm1hcChjPT57bGV0IHU9bltjXS5tYXAocD0+YDxjb2RlPiR7cC5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKS5yZXBsYWNlKC8mL2csIiZhbXA7Iil9PC9jb2RlPmApLGg9dS5sZW5ndGg+Mj91LnNsaWNlKDAsdS5sZW5ndGgtMSkuam9pbigiLCAiKSsiLCBhbmQgIit1W3UubGVuZ3RoLTFdOnUuam9pbigiIGFuZCAiKTtyZXR1cm5gPGxpPjxwPkZvciAke2Q1ZSh1Lmxlbmd0aCwicnVuIiwicnVucyIpfSAke2h9OjwvcD4ke2N9PC9saT5gfSkuam9pbigiIil9PC91bD5gfSkoKTtyZXR1cm57ZGlzcGxheU5hbWU6aSxkZXNjcmlwdGlvbjpvfX1mdW5jdGlvbiBkNWUoZSx0LHIpe3JldHVybiBlPT09MT90OnJ9dmFyIHJNdD1FZShPZSgpLDEpO3ZhciBWcD1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLndlaWdodD0uNix0aGlzLl91cGRhdGVXZWlnaHQ9ck10LmRlYm91bmNlKGZ1bmN0aW9uKHQpe3RoaXMud2VpZ2h0PXR9LDI1MCl9X2ltbWVkaWF0ZVdlaWdodE51bWJlckZvclBhcGVyU2xpZGVyQ2hhbmdlZCgpe3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dD10aGlzLl9pbW1lZGlhdGVXZWlnaHROdW1iZXJGb3JQYXBlclNsaWRlci50b1N0cmluZygpLHRoaXMuX3VwZGF0ZVdlaWdodC5jYWxsKHRoaXMsdGhpcy5faW1tZWRpYXRlV2VpZ2h0TnVtYmVyRm9yUGFwZXJTbGlkZXIpfV9pbnB1dFdlaWdodFN0cmluZ0ZvclBhcGVySW5wdXRDaGFuZ2VkKCl7K3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dDwwP3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dD0iMCI6K3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dD4xJiYodGhpcy5faW5wdXRXZWlnaHRTdHJpbmdGb3JQYXBlcklucHV0PSIxIik7dmFyIHQ9K3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dDtpc05hTih0KXx8dGhpcy5fdXBkYXRlV2VpZ2h0LmNhbGwodGhpcyx0KX19O1ZwLnRlbXBsYXRlPVFgCiAgICA8aDMgY2xhc3M9InRpdGxlIj5TbW9vdGhpbmc8L2gzPgogICAgPGRpdiBjbGFzcz0ic21vb3RoaW5nLWJsb2NrIj4KICAgICAgPHBhcGVyLXNsaWRlcgogICAgICAgIGlkPSJzbGlkZXIiCiAgICAgICAgaW1tZWRpYXRlLXZhbHVlPSJ7e19pbW1lZGlhdGVXZWlnaHROdW1iZXJGb3JQYXBlclNsaWRlcn19IgogICAgICAgIG1heD0iW1ttYXhdXSIKICAgICAgICBtaW49IltbbWluXV0iCiAgICAgICAgcGluCiAgICAgICAgc3RlcD0iW1tzdGVwXV0iCiAgICAgICAgdHlwZT0ibnVtYmVyIgogICAgICAgIHZhbHVlPSJ7e3dlaWdodH19IgogICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgIDxwYXBlci1pbnB1dAogICAgICAgIGlkPSJpbnB1dCIKICAgICAgICBsYWJlbD0id2VpZ2h0IgogICAgICAgIG5vLWxhYmVsLWZsb2F0CiAgICAgICAgdmFsdWU9Int7X2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dH19IgogICAgICAgIHR5cGU9Im51bWJlciIKICAgICAgICBzdGVwPSJbW3N0ZXBdXSIKICAgICAgICBtaW49IltbbWluXV0iCiAgICAgICAgbWF4PSJbW21heF1dIgogICAgICA+PC9wYXBlci1pbnB1dD4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICAudGl0bGUgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgICAgfQoKICAgICAgLnNtb290aGluZy1ibG9jayB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQoKICAgICAgcGFwZXItc2xpZGVyIHsKICAgICAgICAtLXBhcGVyLXNsaWRlci1hY3RpdmUtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2ItY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtYm9yZGVyLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1tYXJrZXJzLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLXBpbi1zdGFydC1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgZmxleC1ncm93OiAyOwogICAgICB9CgogICAgICBwYXBlci1pbnB1dCB7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItZm9jdXMtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0OiB7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgfQogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsOiB7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgfQogICAgICAgIHdpZHRoOiA2MHB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sVnAucHJvdG90eXBlLCJzdGVwIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLFZwLnByb3RvdHlwZSwibWF4Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLFZwLnByb3RvdHlwZSwibWluIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxWcC5wcm90b3R5cGUsIndlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITAsb2JzZXJ2ZXI6Il9pbW1lZGlhdGVXZWlnaHROdW1iZXJGb3JQYXBlclNsaWRlckNoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLFZwLnByb3RvdHlwZSwiX2ltbWVkaWF0ZVdlaWdodE51bWJlckZvclBhcGVyU2xpZGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMCxvYnNlcnZlcjoiX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dENoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFZwLnByb3RvdHlwZSwiX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dCIsdm9pZCAwKTtWcD1FKFt5dCgidGYtc21vb3RoaW5nLWlucHV0IildLFZwKTt2YXIgWW89RWUoT2UoKSwxKTtmdW5jdGlvbiBNaShlLHQpe2xldCByPU9iamVjdC5rZXlzKHQpLnNvcnQoKS5maWx0ZXIoYT0+dFthXSE9PXZvaWQgMCk7aWYoIXIubGVuZ3RoKXJldHVybiBlO2xldCBuPWUuaW5kZXhPZigiPyIpIT09LTE/IiYiOiI/IixvPUFycmF5KCkuY29uY2F0KC4uLnIubWFwKGE9PntsZXQgcz10W2FdO3JldHVybihBcnJheS5pc0FycmF5KHMpP3M6W3NdKS5tYXAoYz0+YCR7YX09JHttNWUoYyl9YCl9KSkuam9pbigiJiIpO3JldHVybiBlK24rb31mdW5jdGlvbiBtNWUoZSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKC9cKC9nLCIlMjgiKS5yZXBsYWNlKC9cKS9nLCIlMjkiKX12YXIgJEt0PUVlKE9lKCksMSksWlduPUVlKFNsKCksMSk7dmFyIERLdD1FZShPZSgpLDEpO3ZhciB4NDsoZnVuY3Rpb24oZSl7ZVtlLkxPQURJTkc9MF09IkxPQURJTkciLGVbZS5MT0FERUQ9MV09IkxPQURFRCJ9KSh4NHx8KHg0PXt9KSk7ZnVuY3Rpb24ga1MoZSl7cmV0dXJuIGNsYXNzIGV4dGVuZHMgZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5sb2FkS2V5PSIiLHRoaXMuZGF0YVRvTG9hZD1bXSx0aGlzLmdldERhdGFMb2FkTmFtZT1yPT5TdHJpbmcociksdGhpcy5kYXRhTG9hZGluZz0hMSx0aGlzLmRhdGFMb2FkZWRBdExlYXN0T25jZT0hMSx0aGlzLl9pc0Nvbm5lY3RlZD0hMSx0aGlzLl9kYXRhTG9hZFN0YXRlPW5ldyBNYXAsdGhpcy5fY2FuY2VsbGVyPW5ldyBhbix0aGlzLl9sb2FkRGF0YUFzeW5jPW51bGwsdGhpcy5fbG9hZERhdGE9REt0LnRocm90dGxlKHRoaXMuX2xvYWREYXRhSW1wbCwxMDAse2xlYWRpbmc6ITAsdHJhaWxpbmc6ITB9KX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5faXNDb25uZWN0ZWQ9ITB9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuX2lzQ29ubmVjdGVkPSExfXN0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnthY3RpdmU6e3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX2xvYWREYXRhSWZBY3RpdmUifSxfaXNDb25uZWN0ZWQ6e3R5cGU6Qm9vbGVhbn0sbG9hZEtleTp7dHlwZTpTdHJpbmd9LGRhdGFUb0xvYWQ6e3R5cGU6QXJyYXl9LGdldERhdGFMb2FkTmFtZTp7dHlwZTpPYmplY3R9LGxvYWREYXRhQ2FsbGJhY2s6e3R5cGU6T2JqZWN0fSxyZXF1ZXN0RGF0YTp7dHlwZTpPYmplY3R9fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX2RhdGFUb0xvYWRDaGFuZ2VkKF9pc0Nvbm5lY3RlZCwgZGF0YVRvTG9hZC4qKSJdfW9uTG9hZEZpbmlzaCgpe31yZWxvYWQoKXt0aGlzLl9kYXRhTG9hZFN0YXRlLmNsZWFyKCksdGhpcy5fbG9hZERhdGEoKX1yZXNldCgpe3RoaXMuX2xvYWREYXRhQXN5bmMhPW51bGwmJihjbGVhclRpbWVvdXQodGhpcy5fbG9hZERhdGFBc3luYyksdGhpcy5fbG9hZERhdGFBc3luYz1udWxsKSx0aGlzLl9jYW5jZWxsZXImJnRoaXMuX2NhbmNlbGxlci5jYW5jZWxBbGwoKSx0aGlzLl9kYXRhTG9hZFN0YXRlJiZ0aGlzLl9kYXRhTG9hZFN0YXRlLmNsZWFyKCksdGhpcy5faXNDb25uZWN0ZWQmJnRoaXMuX2xvYWREYXRhKCl9X2RhdGFUb0xvYWRDaGFuZ2VkKCl7dGhpcy5faXNDb25uZWN0ZWQmJnRoaXMuX2xvYWREYXRhKCl9ZGV0YWNoZWQoKXt0aGlzLl9sb2FkRGF0YUFzeW5jIT1udWxsJiYoY2xlYXJUaW1lb3V0KHRoaXMuX2xvYWREYXRhQXN5bmMpLHRoaXMuX2xvYWREYXRhQXN5bmM9bnVsbCl9X2xvYWREYXRhSWZBY3RpdmUoKXt0aGlzLmFjdGl2ZSYmdGhpcy5fbG9hZERhdGEoKX1fbG9hZERhdGFJbXBsKCl7IXRoaXMuYWN0aXZlfHwodGhpcy5fbG9hZERhdGFBc3luYyE9PW51bGwmJmNsZWFyVGltZW91dCh0aGlzLl9sb2FkRGF0YUFzeW5jKSx0aGlzLl9sb2FkRGF0YUFzeW5jPXNldFRpbWVvdXQodGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKHI9PntpZihyLmNhbmNlbGxlZClyZXR1cm47dGhpcy5kYXRhTG9hZGluZz0hMDtsZXQgbj10aGlzLmRhdGFUb0xvYWQuZmlsdGVyKGE9PntsZXQgcz10aGlzLmdldERhdGFMb2FkTmFtZShhKTtyZXR1cm4hdGhpcy5fZGF0YUxvYWRTdGF0ZS5oYXMocyl9KTtmb3IobGV0IGEgb2Ygbil7bGV0IHM9dGhpcy5nZXREYXRhTG9hZE5hbWUoYSk7dGhpcy5fZGF0YUxvYWRTdGF0ZS5zZXQocyx4NC5MT0FESU5HKX1sZXQgaT10aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUoYT0+e2lmKGEuY2FuY2VsbGVkKXJldHVybjtsZXR7aXRlbTpzLGRhdGE6bH09YS52YWx1ZSxjPXRoaXMuZ2V0RGF0YUxvYWROYW1lKHMpO3RoaXMuX2RhdGFMb2FkU3RhdGUuc2V0KGMseDQuTE9BREVEKSx0aGlzLmxvYWREYXRhQ2FsbGJhY2sodGhpcyxzLGwpfSksbz10aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUoYT0+e2lmKCFhLmNhbmNlbGxlZCl7bGV0IGw9YS52YWx1ZSxjPW5ldyBTZXQobi5tYXAoaD0+dGhpcy5nZXREYXRhTG9hZE5hbWUoaCkpKTt0aGlzLmRhdGFUb0xvYWQuc29tZShoPT5jLmhhcyh0aGlzLmdldERhdGFMb2FkTmFtZShoKSkpJiZ0aGlzLm9uTG9hZEZpbmlzaCgpLHRoaXMuX2xvYWREYXRhQXN5bmM9bnVsbCx0aGlzLmRhdGFMb2FkZWRBdExlYXN0T25jZT0hMH1BcnJheS5mcm9tKHRoaXMuX2RhdGFMb2FkU3RhdGUudmFsdWVzKCkpLmluY2x1ZGVzKHg0LkxPQURJTkcpfHwodGhpcy5kYXRhTG9hZGluZz0hMSl9KTt0aGlzLnJlcXVlc3REYXRhKG4saSwoKT0+byh2b2lkIDApKX0pKSl9fX12YXIgYnFlPUVlKE9lKCksMSksV289RWUoU2woKSwxKSxSUz1be2NoYXJhY3RlcjoiXHUyNUZDIixtZXRob2Q6V28uU3ltYm9sRmFjdG9yaWVzLnNxdWFyZX0se2NoYXJhY3RlcjoiXHUyNUM2IixtZXRob2Q6V28uU3ltYm9sRmFjdG9yaWVzLmRpYW1vbmR9LHtjaGFyYWN0ZXI6Ilx1MjVCMiIsbWV0aG9kOldvLlN5bWJvbEZhY3Rvcmllcy50cmlhbmdsZX0se2NoYXJhY3RlcjoiXHUyNjA1IixtZXRob2Q6V28uU3ltYm9sRmFjdG9yaWVzLnN0YXJ9LHtjaGFyYWN0ZXI6Ilx1MjcxQSIsbWV0aG9kOldvLlN5bWJvbEZhY3Rvcmllcy5jcm9zc31dLFRkOyhmdW5jdGlvbihlKXtlLlNURVA9InN0ZXAiLGUuUkVMQVRJVkU9InJlbGF0aXZlIixlLldBTExfVElNRT0id2FsbF90aW1lIn0pKFRkfHwoVGQ9e30pKTt2YXIgcjA9NCx3cWU9NCxtQj0zLGdCPTIwLF9CPTQsT0t0PTY7ZnVuY3Rpb24gV3UoZSl7cmV0dXJuIHQ9PntsZXQgcj1NYXRoLmFicyh0KTtyPDFlLTE1JiYocj0wKTtsZXQgbjtyZXR1cm4gcj49MWU0P249eG4oIi4iK2UrIn5lIik6cj4wJiZyPC4wMT9uPXhuKCIuIitlKyJ+ZSIpOm49eG4oIi4iK2UrIn5nIiksbih0KX19dmFyIGI0PXhuKGAuJHt3cWV9fnNgKTtmdW5jdGlvbiBYYXQoKXtsZXQgZT1uZXcgV28uU2NhbGVzLkxpbmVhcjtlLnRpY2tHZW5lcmF0b3IoV28uU2NhbGVzLlRpY2tHZW5lcmF0b3JzLmludGVnZXJUaWNrR2VuZXJhdG9yKCkpO2xldCB0PW5ldyBXby5BeGVzLk51bWVyaWMoZSwiYm90dG9tIik7cmV0dXJuIHQuZm9ybWF0dGVyKGI0KSx7c2NhbGU6ZSxheGlzOnQsYWNjZXNzb3I6cj0+ci5zdGVwfX12YXIgeUI9V28uRm9ybWF0dGVycy50aW1lKCIlYSAlYiAlZSwgJUg6JU06JVMiKTtmdW5jdGlvbiBTcWUoKXtsZXQgZT1uZXcgV28uU2NhbGVzLlRpbWU7cmV0dXJue3NjYWxlOmUsYXhpczpuZXcgV28uQXhlcy5UaW1lKGUsImJvdHRvbSIpLGFjY2Vzc29yOnQ9PnQud2FsbF90aW1lfX12YXIgbjA9KGUsdCxyKT0+e2lmKGUucmVsYXRpdmUhPW51bGwpcmV0dXJuIGUucmVsYXRpdmU7bGV0IG49ci5kYXRhKCksaT1uLmxlbmd0aD4wPytuWzBdLndhbGxfdGltZTowO3JldHVybigrZS53YWxsX3RpbWUtaSkvKDYwKjYwKjFlMyl9LHZCPWU9PntsZXQgdD0iIixyPU1hdGguZmxvb3IoZS8yNCk7ZS09cioyNCxyJiYodCs9cisiZCAiKTtsZXQgbj1NYXRoLmZsb29yKGUpO2UtPW4sZSo9NjAsKG58fHIpJiYodCs9bisiaCAiKTtsZXQgaT1NYXRoLmZsb29yKGUpO2UtPWksZSo9NjAsKGl8fG58fHIpJiYodCs9aSsibSAiKTtsZXQgbz1NYXRoLmZsb29yKGUpO3JldHVybiB0K28rInMifTtmdW5jdGlvbiBNcWUoKXtsZXQgZT1uZXcgV28uU2NhbGVzLkxpbmVhcjtyZXR1cm57c2NhbGU6ZSxheGlzOm5ldyBXby5BeGVzLk51bWVyaWMoZSwiYm90dG9tIiksYWNjZXNzb3I6bjB9fWZ1bmN0aW9uIHhCKGUpe3N3aXRjaChlKXtjYXNlIFRkLlNURVA6cmV0dXJuIFhhdCgpO2Nhc2UgVGQuV0FMTF9USU1FOnJldHVybiBTcWUoKTtjYXNlIFRkLlJFTEFUSVZFOnJldHVybiBNcWUoKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW52YWxpZCB4VHlwZTogIitlKX19dmFyIEZzPUVlKE9lKCksMSksTW49RWUoU2woKSwxKTt2YXIgeGE9RWUoU2woKSwxKTtmdW5jdGlvbiBFcWUoZSl7bGV0IHQ9W10scj1lO2Zvcig7ciYmciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50OylpZih0LnB1c2gociksci5hc3NpZ25lZFNsb3Qpcj1yLmFzc2lnbmVkU2xvdDtlbHNlIGlmKHIucGFyZW50RWxlbWVudClyPXIucGFyZW50RWxlbWVudDtlbHNle2xldCBuPXIucGFyZW50Tm9kZTtuIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudD9yPW4uaG9zdDpyPW4hPT1yP246bnVsbH1yZXR1cm4gdH12YXIgVHFlPVsxLDAsMCwxLDAsMF07ZnVuY3Rpb24gQ3FlKGUpe2xldCB0PUVxZShlKSxyPVRxZSxuPW51bGw7Zm9yKGxldCBpIG9mIHQpe2xldCBvPXhhLlV0aWxzLkRPTS5nZXRFbGVtZW50VHJhbnNmb3JtKGkpO2lmKG8hPW51bGwpe2xldCBsPWkuY2xpZW50V2lkdGgvMixjPWkuY2xpZW50SGVpZ2h0LzI7cj14YS5VdGlscy5NYXRoLm11bHRpcGx5VHJhbnNsYXRlKHIsW2wsY10pLHI9eGEuVXRpbHMuTWF0aC5tdWx0aXBseU1hdHJpeChyLHhhLlV0aWxzLk1hdGguaW52ZXJ0TWF0cml4KG8pKSxyPXhhLlV0aWxzLk1hdGgubXVsdGlwbHlUcmFuc2xhdGUocixbLWwsLWNdKX1sZXQgYT1pLnNjcm9sbExlZnQscz1pLnNjcm9sbFRvcDsobj09PW51bGx8fGk9PT1uKSYmKGEtPWkub2Zmc2V0TGVmdCtpLmNsaWVudExlZnQscy09aS5vZmZzZXRUb3AraS5jbGllbnRUb3Asbj1pLm9mZnNldFBhcmVudCkscj14YS5VdGlscy5NYXRoLm11bHRpcGx5VHJhbnNsYXRlKHIsW2Esc10pfXJldHVybiByfXZhciB3Qj1jbGFzcyBleHRlbmRzIHhhLlV0aWxzLlRyYW5zbGF0b3J7Y29tcHV0ZVBvc2l0aW9uKHQscil7bGV0IG49e3g6dCx5OnJ9LGk9Q3FlKHRoaXMuX3Jvb3RFbGVtZW50KTtyZXR1cm4gaT09bnVsbD9uOnhhLlV0aWxzLk1hdGguYXBwbHlUcmFuc2Zvcm0oaSxuKX19LHF2PWNsYXNzIGV4dGVuZHMgeGEuRGlzcGF0Y2hlcnMuTW91c2V7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5fZXZlbnRUYXJnZXQ9dC5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCksdGhpcy5fdHJhbnNsYXRvcj1uZXcgd0IodC5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCkpfXN0YXRpYyBnZXREaXNwYXRjaGVyKHQpe2xldCByPXQucm9vdCgpLnJvb3RFbGVtZW50KCksbj1yW3F2Ll9ESVNQQVRDSEVSX0tFWV07cmV0dXJuIG58fChuPW5ldyBxdih0KSxyW3F2Ll9ESVNQQVRDSEVSX0tFWV09biksbn19LEd2PWNsYXNzIGV4dGVuZHMgeGEuRGlzcGF0Y2hlcnMuVG91Y2h7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5fZXZlbnRUYXJnZXQ9dC5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCksdGhpcy5fdHJhbnNsYXRvcj1uZXcgd0IodC5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCkpfXN0YXRpYyBnZXREaXNwYXRjaGVyKHQpe2xldCByPXQucm9vdCgpLnJvb3RFbGVtZW50KCksbj1yW0d2Ll9ESVNQQVRDSEVSX0tFWV07cmV0dXJuIG58fChuPW5ldyBHdih0KSxyW0d2Ll9ESVNQQVRDSEVSX0tFWV09biksbn19O3hhLkludGVyYWN0aW9uLnByb3RvdHlwZS5faXNJbnNpZGVDb21wb25lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIDA8PWUueCYmMDw9ZS55JiZlLng8dGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby53aWR0aCgpJiZlLnk8dGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby5oZWlnaHQoKX07dmFyIFNCPWNsYXNzIGV4dGVuZHMgeGEuSW50ZXJhY3Rpb25zLlBvaW50ZXJ7X2FuY2hvcih0KXtsZXQgcj10aGlzO3IuX2lzQW5jaG9yZWQ9ITAsci5fbW91c2VEaXNwYXRjaGVyPXF2LmdldERpc3BhdGNoZXIoci5fY29tcG9uZW50QXR0YWNoZWRUbyksci5fbW91c2VEaXNwYXRjaGVyLm9uTW91c2VNb3ZlKHIuX21vdXNlTW92ZUNhbGxiYWNrKSxyLl90b3VjaERpc3BhdGNoZXI9R3YuZ2V0RGlzcGF0Y2hlcihyLl9jb21wb25lbnRBdHRhY2hlZFRvKSxyLl90b3VjaERpc3BhdGNoZXIub25Ub3VjaFN0YXJ0KHIuX3RvdWNoU3RhcnRDYWxsYmFjayl9fTt2YXIgekt0PUVlKE9lKCksMSk7dmFyIFd2OyhmdW5jdGlvbihlKXtlLkFVVE89ImF1dG8iLGUuQk9UVE9NPSJib3R0b20iLGUuUklHSFQ9InJpZ2h0In0pKFd2fHwoV3Y9e30pKTt2YXIgQXFlPXtib3hTaGFkb3c6IjAgMXB4IDRweCByZ2JhKDAsIDAsIDAsIC4zKSIsb3BhY2l0eTowLHBvc2l0aW9uOiJmaXhlZCIsd2lsbENoYW5nZToidHJhbnNmb3JtIix6SW5kZXg6NX0sdzQ9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucG9zaXRpb249V3YuQVVUTyx0aGlzLm1pbkRpc3RGcm9tRWRnZT0xNSx0aGlzLl9zdHlsZUNhY2hlPW51bGwsdGhpcy5fcmFmPW51bGwsdGhpcy5fdHVubmVsPW51bGx9cmVhZHkoKXt0aGlzLl9zdHlsZUNhY2hlPW51bGwsdGhpcy5fcmFmPW51bGwsdGhpcy5fdHVubmVsPW51bGx9YXR0YWNoZWQoKXt0aGlzLl90dW5uZWw9dGhpcy5fY3JlYXRlVHVubmVsKCksdGhpcy5faGlkZU9uQmx1cj0oKT0+e2RvY3VtZW50LmhpZGRlbiYmdGhpcy5oaWRlKCl9LHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIix0aGlzLl9oaWRlT25CbHVyKX1kZXRhY2hlZCgpe3RoaXMuaGlkZSgpLHRoaXMuX3JlbW92ZVR1bm5lbCh0aGlzLl90dW5uZWwpLHRoaXMuX3R1bm5lbD1udWxsLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIix0aGlzLl9oaWRlT25CbHVyKX1jb250ZW50KCl7cmV0dXJuIHRoaXMuX3R1bm5lbC5zaGFkb3dSb290fWhpZGUoKXt0aGlzLl9yYWYhPT1udWxsJiZ3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmFmKSx0aGlzLl9zdHlsZUNhY2hlPW51bGwsdGhpcy5fdHVubmVsLnN0eWxlLm9wYWNpdHk9MH11cGRhdGVBbmRQb3NpdGlvbih0KXt0aGlzLl9yYWYhPT1udWxsJiZ3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmFmKSx0aGlzLl9yYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+eyF0aGlzLmlzQXR0YWNoZWR8fHRoaXMuX3JlcG9zaXRpb25JbXBsKHQpfSl9X3JlcG9zaXRpb25JbXBsKHQpe2xldCByPXRoaXMuX3R1bm5lbCxuPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89d2luZG93LmlubmVySGVpZ2h0LGE9ZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCxzPW4udG9wLGw9cytuLmhlaWdodCxjPWkuaGVpZ2h0K2dCLHU9bnVsbCxoPU1hdGgubWF4KHRoaXMubWluRGlzdEZyb21FZGdlLG4ubGVmdCksZj1udWxsLHA9czt0aGlzLnBvc2l0aW9uPT1Xdi5SSUdIVD9oPW4ucmlnaHQ6KHA9bCtnQixhPGgraS53aWR0aCt0aGlzLm1pbkRpc3RGcm9tRWRnZSYmKGg9bnVsbCxmPXRoaXMubWluRGlzdEZyb21FZGdlKSksdGhpcy5wb3NpdGlvbj09V3YuQVVUTyYmbi50b3AtYz4wJiZvPG4udG9wK24uaGVpZ2h0K2MmJihwPW51bGwsdT1vLXMrZ0IpO2xldCBkPXtjb250YWluOiJjb250ZW50IixvcGFjaXR5OjEsbGVmdDpoP2Ake2h9cHhgOm51bGwscmlnaHQ6Zj9gJHtmfXB4YDpudWxsLHRvcDpwP2Ake3B9cHhgOm51bGwsYm90dG9tOnU/YCR7dX1weGA6bnVsbH07ekt0LmlzRXF1YWwodGhpcy5fc3R5bGVDYWNoZSxkKXx8KE9iamVjdC5hc3NpZ24oci5zdHlsZSxkKSx0aGlzLl9zdHlsZUNhY2hlPWQpfV9jcmVhdGVUdW5uZWwoKXtpZighdGhpcy5jb250ZW50Q29tcG9uZW50TmFtZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiUmVxdWlyZSBgY29udGVudENvbXBvbmVudE5hbWVgIHRvIGJlIGEgbmFtZSBvZiBhIFBvbHltZXIgY29tcG9uZW50Iik7bGV0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLmNvbnRlbnRDb21wb25lbnROYW1lKTtyZXR1cm4gT2JqZWN0LmFzc2lnbih0LnN0eWxlLEFxZSksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0KSx0fV9yZW1vdmVUdW5uZWwodCl7ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0KX19O0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHc0LnByb3RvdHlwZSwiY29udGVudENvbXBvbmVudE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sdzQucHJvdG90eXBlLCJwb3NpdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSx3NC5wcm90b3R5cGUsIm1pbkRpc3RGcm9tRWRnZSIsdm9pZCAwKTt3ND1FKFt5dCgidnotY2hhcnQtdG9vbHRpcCIpXSx3NCk7dmFyIE5TPUVlKFNsKCksMSk7dmFyIEhLdD0xZTQsVkt0PS4wMDEsVUt0PXhuKCIuMn5lIiksUHFlPXhuKCIuNH5yIiksRkt0PXhuKCIsfiIpO2Z1bmN0aW9uIEJLdChlKXtpZihlPT09MClyZXR1cm4iMCI7bGV0IHQ9TWF0aC5hYnMoZSk7cmV0dXJuIHQ+PUhLdHx8dDxWS3Q/VUt0KGUpOlBxZShlKX12YXIgS2F0PXtmb3JtYXRUaWNrOkJLdCxmb3JtYXRTaG9ydDpCS3QsZm9ybWF0UmVhZGFibGUoZSl7bGV0IHQ9TWF0aC5hYnMoZSk7cmV0dXJuIHQ+PUhLdHx8dDxWS3Q/VUt0KGUpOkZLdChlKX0sZm9ybWF0TG9uZzpGS3R9LGlXbj1uZXcgSW50bC5OdW1iZXJGb3JtYXQodm9pZCAwLHttYXhpbXVtRnJhY3Rpb25EaWdpdHM6NH0pO3ZhciBvV249eG4oIjAuM35zIiksYVduPXhuKCIsLjN+ZiIpO3ZhciBJcWU9MWUzLExxZT02MCpJcWUsa3FlPTYwKkxxZSxScWU9MjQqa3FlLHNXbj0zNjUqUnFlLGxXbj14bigiLjR+Iik7dmFyIE5xZT1ZYigpLnRpY2tGb3JtYXQoKSwkYXQscUt0PXtmb3JtYXRUaWNrKGUpe3JldHVybiBOcWUobmV3IERhdGUoZSkpfSxmb3JtYXRTaG9ydChlKXtyZXR1cm4gbmV3IERhdGUoZSkudG9Mb2NhbGVTdHJpbmcoJGF0LHt5ZWFyOiJudW1lcmljIixtb250aDoic2hvcnQiLGRheToibnVtZXJpYyIsaG91cjoibnVtZXJpYyIsbWludXRlOiJudW1lcmljIixzZWNvbmQ6Im51bWVyaWMifSl9LGZvcm1hdFJlYWRhYmxlKGUpe3JldHVybiBuZXcgRGF0ZShlKS50b0xvY2FsZVN0cmluZygkYXQse3llYXI6Im51bWVyaWMiLG1vbnRoOiJzaG9ydCIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsdGltZVpvbmVOYW1lOiJzaG9ydCJ9KX0sZm9ybWF0TG9uZyhlKXtyZXR1cm4gbmV3IERhdGUoZSkudG9Mb2NhbGVTdHJpbmcoJGF0LHt5ZWFyOiJudW1lcmljIixtb250aDoibG9uZyIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsdGltZVpvbmVOYW1lOiJzaG9ydCIsZnJhY3Rpb25hbFNlY29uZERpZ2l0czozfSl9fTt2YXIgQ2Q7KGZ1bmN0aW9uKGUpe2VbZS5MSU5FQVI9MF09IkxJTkVBUiIsZVtlLkxPRzEwPTFdPSJMT0cxMCIsZVtlLlRJTUU9Ml09IlRJTUUifSkoQ2R8fChDZD17fSkpO2Z1bmN0aW9uIEdLdChlKXtzd2l0Y2goZSl7Y2FzZSBDZC5MSU5FQVI6cmV0dXJuIG5ldyBaYXQ7Y2FzZSBDZC5MT0cxMDpyZXR1cm4gbmV3IEphdDtjYXNlIENkLlRJTUU6cmV0dXJuIG5ldyBRYXQ7ZGVmYXVsdDpsZXQgdD1lO3Rocm93IG5ldyBSYW5nZUVycm9yKGBTY2FsZVR5cGUgJHt0fSBub3Qgc3VwcG9ydGVkLmApfX12YXIgRHFlPS4wNSxaYXQ9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmRlZmF1bHRGb3JtYXR0ZXI9S2F0fXRyYW5zZm9ybSh0LHIsbil7bGV0W2ksb109dCxhPW8taSxbcyxsXT1yLGM9bC1zO3JldHVybiBhPT09MD9zOmMvYSoobi1pKStzfWZvcndhcmQodCxyLG4pe3JldHVybiB0aGlzLnRyYW5zZm9ybSh0LHIsbil9cmV2ZXJzZSh0LHIsbil7cmV0dXJuIHRoaXMudHJhbnNmb3JtKHIsdCxuKX1uaWNlRG9tYWluKHQpe2xldFtyLG5dPXQ7aWYobjxyKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2lmKG49PT1yKXJldHVybiByPT09MD9bLTEsMV06cjwwP1syKnIsMF06WzAsMipyXTtsZXQgaT16bigpLG89KG4tcitOdW1iZXIuRVBTSUxPTikqRHFlLFthLHNdPWkuZG9tYWluKFtyLW8sbitvXSkubmljZSgpLmRvbWFpbigpO3JldHVyblthLHNdfXRpY2tzKHQscil7cmV0dXJuIHpuKCkuZG9tYWluKHQpLnRpY2tzKHIpfWlzU2FmZU51bWJlcih0KXtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpfX0sSmF0PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5kZWZhdWx0Rm9ybWF0dGVyPUthdH10cmFuc2Zvcm0odCl7cmV0dXJuIE1hdGgubG9nMTAodD4wP3Q6TnVtYmVyLk1JTl9WQUxVRSl9dW50cmFuc2Zvcm0odCl7cmV0dXJuIE1hdGguZXhwKHQvTWF0aC5MT0cxMEUpfWZvcndhcmQodCxyLG4pe2lmKG48PTApcmV0dXJuIHJbMF07bGV0W2ksb109dCxbYSxzXT1yLGw9dGhpcy50cmFuc2Zvcm0oaSksdT10aGlzLnRyYW5zZm9ybShvKS1sLGg9cy1hO3JldHVybiBuPXRoaXMudHJhbnNmb3JtKG4pLGgvKHUrTnVtYmVyLkVQU0lMT04pKihuLWwpK2F9cmV2ZXJzZSh0LHIsbil7bGV0W2ksb109dCxbYSxzXT1yLGw9dGhpcy50cmFuc2Zvcm0oaSksdT10aGlzLnRyYW5zZm9ybShvKS1sLGg9cy1hLGY9dS8oaCtOdW1iZXIuRVBTSUxPTikqKG4tYSkrbDtyZXR1cm4gdGhpcy51bnRyYW5zZm9ybShmKX1uaWNlRG9tYWluKHQpe2xldFtyLG5dPXQ7aWYocj5uKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2xldCBpPU1hdGgubWF4KHIsTnVtYmVyLk1JTl9WQUxVRSksbz1NYXRoLm1heChuLE51bWJlci5NSU5fVkFMVUUpO3JldHVybiBuPD0wP1tOdW1iZXIuTUlOX1ZBTFVFLDFdOltNYXRoLm1heChOdW1iZXIuTUlOX1ZBTFVFLGkqLjUpLG8qMl19dGlja3ModCxyKXtsZXQgbj10WzBdPD0wP051bWJlci5NSU5fVkFMVUU6dFswXSxpPXRbMV08PTA/TnVtYmVyLk1JTl9WQUxVRTp0WzFdLG89Y2MoKS5kb21haW4oW24saV0pLnRpY2tzKHIpO3JldHVybiBvLmxlbmd0aD9vOnR9aXNTYWZlTnVtYmVyKHQpe3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCkmJnQ+MH19LFFhdD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuc2NhbGU9WWIoKSx0aGlzLmRlZmF1bHRGb3JtYXR0ZXI9cUt0fWZvcndhcmQodCxyLG4pe3JldHVybiB0aGlzLnNjYWxlLmRvbWFpbih0KS5yYW5nZShyKShuKX1yZXZlcnNlKHQscixuKXtyZXR1cm4gdGhpcy5zY2FsZS5kb21haW4odCkucmFuZ2UocikuaW52ZXJ0KG4pLmdldFRpbWUoKX1uaWNlRG9tYWluKHQpe2xldFtyLG5dPXRoaXMuc2NhbGUuZG9tYWluKHQpLm5pY2UoKS5kb21haW4oKTtyZXR1cm5bci5nZXRUaW1lKCksbi5nZXRUaW1lKCldfXRpY2tzKHQscil7cmV0dXJuIHRoaXMuc2NhbGUuZG9tYWluKHQpLnRpY2tzKHIpLm1hcChuPT5uLmdldFRpbWUoKSl9aXNTYWZlTnVtYmVyKHQpe3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCl9fTt2YXIgTUI9Y2xhc3MgZXh0ZW5kcyBOUy5TY2FsZXMuTGluZWFye2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9pZ25vcmVPdXRsaWVyPSExLHRoaXMucGFkUHJvcG9ydGlvbiguMil9c2V0VmFsdWVQcm92aWRlckZvckRvbWFpbih0KXtyZXR1cm4gdGhpcy5fdmFsdWVQcm92aWRlckZvckRvbWFpbj10LHRoaXN9X25pY2VEb21haW4odCxyKXtsZXRbbixpXT10O3JldHVybiBHS3QoQ2QuTElORUFSKS5uaWNlRG9tYWluKFtuLGldKX1fZ2V0VW5ib3VuZGVkRXh0ZW50KHQpe2xldCByPXRoaXMuX2dldEFsbEluY2x1ZGVkVmFsdWVzKHQpLG49dGhpcy5fZGVmYXVsdEV4dGVudCgpO2lmKHIubGVuZ3RoIT09MCl7bGV0IGk9W05TLlV0aWxzLk1hdGgubWluKHIsblswXSksTlMuVXRpbHMuTWF0aC5tYXgocixuWzFdKV07bj10aGlzLl9uaWNlRG9tYWluKGkpfXJldHVybiBufV9nZXRBbGxJbmNsdWRlZFZhbHVlcyh0PSExKXtsZXQgcj10aGlzLl92YWx1ZVByb3ZpZGVyRm9yRG9tYWluP3RoaXMuX3ZhbHVlUHJvdmlkZXJGb3JEb21haW4oKTpbXTtyZXR1cm4gdGhpcy5leHRlbnRPZlZhbHVlcyhyKX1leHRlbnRPZlZhbHVlcyh0KXtsZXQgcj10LmZpbHRlcihvPT5OUy5VdGlscy5NYXRoLmlzVmFsaWROdW1iZXIobykpLG49cjtpZih0aGlzLmlnbm9yZU91dGxpZXIoKSl7bGV0IG89ci5zb3J0KChsLGMpPT5sLWMpLGE9bGEobywuMDUpLHM9bGEobywuOTUpO249ci5maWx0ZXIobD0+bD49YSYmbDw9cyl9bGV0IGk9c2Eobik7cmV0dXJuIGlbMF09PW51bGx8fGlbMV09PW51bGw/W106aX1pZ25vcmVPdXRsaWVyKHQpe3JldHVybiB0eXBlb2YgdD09ImJvb2xlYW4iPyh0aGlzLl9pZ25vcmVPdXRsaWVyPXQsdGhpcyk6dGhpcy5faWdub3JlT3V0bGllcn19O3ZhciBDQj1FZShTbCgpLDEpO3ZhciBXS3Q9RWUoU2woKSwxKSxFQj1jbGFzcyBleHRlbmRzIFdLdC5RdWFudGl0YXRpdmVTY2FsZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5faWdub3JlT3V0bGllcj0hMX1zZXRWYWx1ZVByb3ZpZGVyRm9yRG9tYWluKHQpe3JldHVybiB0aGlzLl92YWx1ZVByb3ZpZGVyRm9yRG9tYWluPXQsdGhpc31pZ25vcmVPdXRsaWVyKHQpe3JldHVybiB0eXBlb2YgdD09ImJvb2xlYW4iPyh0aGlzLl9pZ25vcmVPdXRsaWVyPXQsdGhpcyk6dGhpcy5faWdub3JlT3V0bGllcn1fZ2V0QWxsSW5jbHVkZWRWYWx1ZXModD0hMSl7bGV0IHI9dGhpcy5fdmFsdWVQcm92aWRlckZvckRvbWFpbj90aGlzLl92YWx1ZVByb3ZpZGVyRm9yRG9tYWluKCk6W107cmV0dXJuIHRoaXMuZXh0ZW50T2ZWYWx1ZXMocil9fTt2YXIgVEI9TWF0aC5wb3coMiwtMTA3NCk7ZnVuY3Rpb24gUzQoZSl7cmV0dXJuIE1hdGgubG9nMTAoZSl9ZnVuY3Rpb24gdHN0KGUpe3JldHVybiBNYXRoLnBvdygxMCxlKX12YXIgQUI9Y2xhc3MgZXh0ZW5kcyBFQntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fZDNMb2dTY2FsZT1jYygpLHRoaXMucGFkUHJvcG9ydGlvbiguMil9c2NhbGUodCl7cmV0dXJuIHQ8PTA/TmFOOnRoaXMuX2QzTG9nU2NhbGUodCl9aW52ZXJ0KHQpe3JldHVybiB0aGlzLl9kM0xvZ1NjYWxlLmludmVydCh0KX1zY2FsZVRyYW5zZm9ybWF0aW9uKHQpe3JldHVybiB0aGlzLnNjYWxlKHQpfWludmVydGVkVHJhbnNmb3JtYXRpb24odCl7cmV0dXJuIHRoaXMuaW52ZXJ0KHQpfWdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCl7cmV0dXJuIHRoaXMuZG9tYWluKCl9c2V0VHJhbnNmb3JtYXRpb25Eb21haW4odCl7dGhpcy5kb21haW4odCl9Z2V0VHJhbnNmb3JtYXRpb25FeHRlbnQoKXtyZXR1cm4gdGhpcy5fZ2V0VW5ib3VuZGVkRXh0ZW50KCEwKX1fZ2V0RG9tYWluKCl7cmV0dXJuIHRoaXMuX3VudHJhbnNmb3JtZWREb21haW59X3NldERvbWFpbih0KXt0aGlzLl91bnRyYW5zZm9ybWVkRG9tYWluPXQ7bGV0W3Isbl09dDtzdXBlci5fc2V0RG9tYWluKFtNYXRoLm1heChUQixyKSxuXSl9X25pY2VEb21haW4odCxyKXtsZXRbbixpXT10LG89TWF0aC5tYXgoUzQoVEIpLFM0KG4pKSxhPVM0KGkpLHM9YS1vLGw9cz9zKnRoaXMucGFkUHJvcG9ydGlvbigpOjE7cmV0dXJuW3RzdChNYXRoLm1heChTNChUQiksby1sKSksdHN0KGErbCldfV9nZXRVbmJvdW5kZWRFeHRlbnQodCl7bGV0IHI9dGhpcy5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXModCksbj10aGlzLl9kZWZhdWx0RXh0ZW50KCk7aWYoci5sZW5ndGghPT0wKXtsZXQgaT1bQ0IuVXRpbHMuTWF0aC5taW4ocixuWzBdKSxDQi5VdGlscy5NYXRoLm1heChyLG5bMV0pXTtuPXRoaXMuX25pY2VEb21haW4oaSl9cmV0dXJuIG59X2dldEFsbEluY2x1ZGVkVmFsdWVzKHQ9ITEpe3JldHVybiBzdXBlci5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXMoKS5tYXAobj0+bj4wP246VEIpfV9kZWZhdWx0RXh0ZW50KCl7cmV0dXJuWzEsMTBdfV9iYWNraW5nU2NhbGVEb21haW4odCl7cmV0dXJuIHQ9PW51bGw/dGhpcy5fZDNMb2dTY2FsZS5kb21haW4oKToodGhpcy5fZDNMb2dTY2FsZS5kb21haW4odCksdGhpcyl9X2dldFJhbmdlKCl7cmV0dXJuIHRoaXMuX2QzTG9nU2NhbGUucmFuZ2UoKX1fc2V0UmFuZ2UodCl7dGhpcy5fZDNMb2dTY2FsZS5yYW5nZSh0KX1kZWZhdWx0VGlja3MoKXtyZXR1cm4gdGhpcy5fZDNMb2dTY2FsZS50aWNrcygxKX10aWNrcygpe3JldHVybiB0aGlzLl9kM0xvZ1NjYWxlLnRpY2tzKCl9ZXh0ZW50T2ZWYWx1ZXModCl7bGV0IHI9dC5maWx0ZXIobz0+Q0IuVXRpbHMuTWF0aC5pc1ZhbGlkTnVtYmVyKG8pJiZvPjApLG49cjtpZih0aGlzLmlnbm9yZU91dGxpZXIoKSl7bGV0IGE9ci5tYXAoUzQpLnNvcnQoKGMsdSk9PmMtdSkscz1sYShhLC4wNSksbD1sYShhLC45NSk7bj1hLmZpbHRlcihjPT5jPj1zJiZjPD1sKS5tYXAodHN0KX1sZXQgaT1zYShuKTtyZXR1cm4gaVswXT09bnVsbHx8aVsxXT09bnVsbD9bXTppfX07dmFyIEFkPUVlKFNsKCksMSk7dmFyIGkwPUVlKFNsKCksMSksUEI9Y2xhc3MgZXh0ZW5kcyBpMC5Db21wb25lbnRzLlNlbGVjdGlvbkJveExheWVye2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcigpLHRoaXMuZWFzZUZuPWJzLHRoaXMuX2FuaW1hdGlvblRpbWU9NzUwLHRoaXMueFNjYWxlKHQpLHRoaXMueVNjYWxlKHIpLHRoaXMuX2RyYWdJbnRlcmFjdGlvbj1uZXcgaTAuSW50ZXJhY3Rpb25zLkRyYWcsdGhpcy5fZG91YmxlQ2xpY2tJbnRlcmFjdGlvbj1uZXcgaTAuSW50ZXJhY3Rpb25zLkNsaWNrLHRoaXMuc2V0dXBDYWxsYmFja3MoKSx0aGlzLnVuem9vbU1ldGhvZD1uLHRoaXMub25EZXRhY2goKCk9Pnt0aGlzLl9kb3VibGVDbGlja0ludGVyYWN0aW9uLmRldGFjaEZyb20odGhpcyksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmRldGFjaEZyb20odGhpcyl9KSx0aGlzLm9uQW5jaG9yKCgpPT57dGhpcy5fZG91YmxlQ2xpY2tJbnRlcmFjdGlvbi5hdHRhY2hUbyh0aGlzKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24uYXR0YWNoVG8odGhpcyl9KX1pbnRlcmFjdGlvblN0YXJ0KHQpe3RoaXMub25TdGFydD10fWludGVyYWN0aW9uRW5kKHQpe3RoaXMub25FbmQ9dH1kcmFnSW50ZXJhY3Rpb24oKXtyZXR1cm4gdGhpcy5fZHJhZ0ludGVyYWN0aW9ufXNldHVwQ2FsbGJhY2tzKCl7bGV0IHQ9ITE7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZ1N0YXJ0KHI9Pnt0aGlzLmJvdW5kcyh7dG9wTGVmdDpyLGJvdHRvbVJpZ2h0OnJ9KSx0aGlzLm9uU3RhcnQoKX0pLHRoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWcoKHIsbik9Pnt0aGlzLmJvdW5kcyh7dG9wTGVmdDpyLGJvdHRvbVJpZ2h0Om59KSx0aGlzLmJveFZpc2libGUoITApLHQ9ITB9KSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnRW5kKChyLG4pPT57dGhpcy5ib3hWaXNpYmxlKCExKSx0aGlzLmJvdW5kcyh7dG9wTGVmdDpyLGJvdHRvbVJpZ2h0Om59KSx0P3RoaXMuem9vbSgpOnRoaXMub25FbmQoKSx0PSExfSksdGhpcy5fZG91YmxlQ2xpY2tJbnRlcmFjdGlvbi5vbkRvdWJsZUNsaWNrKHRoaXMudW56b29tLmJpbmQodGhpcykpfWFuaW1hdGlvblRpbWUodCl7aWYodD09bnVsbClyZXR1cm4gdGhpcy5fYW5pbWF0aW9uVGltZTtpZih0PDApdGhyb3cgbmV3IEVycm9yKCJhbmltYXRpb25UaW1lIGNhbm5vdCBiZSBuZWdhdGl2ZSIpO3JldHVybiB0aGlzLl9hbmltYXRpb25UaW1lPXQsdGhpc31lYXNlKHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiZWFzZSBmdW5jdGlvbiBtdXN0IGJlIGEgZnVuY3Rpb24iKTtyZXR1cm4odCgwKSE9PTB8fHQoMSkhPT0xKSYmaTAuVXRpbHMuV2luZG93Lndhcm4oIkVhc2luZyBmdW5jdGlvbiBkb2VzIG5vdCBtYWludGFpbiBpbnZhcmlhbnQgZigwKT09MCAmJiBmKDEpPT0xLiBCYWQgYmVoYXZpb3IgbWF5IHJlc3VsdC4iKSx0aGlzLmVhc2VGbj10LHRoaXN9em9vbSgpe2xldCB0PXRoaXMueEV4dGVudCgpWzBdLnZhbHVlT2YoKSxyPXRoaXMueEV4dGVudCgpWzFdLnZhbHVlT2YoKSxuPXRoaXMueUV4dGVudCgpWzFdLnZhbHVlT2YoKSxpPXRoaXMueUV4dGVudCgpWzBdLnZhbHVlT2YoKTt0PT09cnx8bj09PWl8fHRoaXMuaW50ZXJwb2xhdGVab29tKHQscixuLGkpfXVuem9vbSgpe2xldCB0PXRoaXMueFNjYWxlKCk7dC5fZG9tYWluTWluPW51bGwsdC5fZG9tYWluTWF4PW51bGw7bGV0IHI9dC5fZ2V0RXh0ZW50KCk7dGhpcy54U2NhbGUoKS5kb21haW4ociksdGhpcy51bnpvb21NZXRob2QoKX1pc1pvb21pbmcodCl7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLmVuYWJsZWQoIXQpLHRoaXMuX2RvdWJsZUNsaWNrSW50ZXJhY3Rpb24uZW5hYmxlZCghdCl9aW50ZXJwb2xhdGVab29tKHQscixuLGkpe2xldCBvPXRoaXMueFNjYWxlKCkuZG9tYWluKClbMF0udmFsdWVPZigpLGE9dGhpcy54U2NhbGUoKS5kb21haW4oKVsxXS52YWx1ZU9mKCkscz10aGlzLnlTY2FsZSgpLmRvbWFpbigpWzBdLnZhbHVlT2YoKSxsPXRoaXMueVNjYWxlKCkuZG9tYWluKClbMV0udmFsdWVPZigpLGM9dGhpcy5lYXNlRm4sdT0ocCxkLGcpPT56aShwLGQpKGMoZykpO3RoaXMuaXNab29taW5nKCEwKTtsZXQgaD1EYXRlLm5vdygpLGY9KCk9PntsZXQgZD1EYXRlLm5vdygpLWgsZz10aGlzLl9hbmltYXRpb25UaW1lPT09MD8xOk1hdGgubWluKDEsZC90aGlzLl9hbmltYXRpb25UaW1lKSxfPXUobyx0LGcpLHk9dShhLHIsZykseD11KHMsbixnKSxiPXUobCxpLGcpO3RoaXMueFNjYWxlKCkuZG9tYWluKFtfLHldKSx0aGlzLnlTY2FsZSgpLmRvbWFpbihbeCxiXSksZzwxP2kwLlV0aWxzLkRPTS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVQb2x5ZmlsbChmKToodGhpcy5vbkVuZCgpLHRoaXMuaXNab29taW5nKCExKSl9O2YoKX19O3ZhciBiYTsoZnVuY3Rpb24oZSl7ZVtlLk5PTkU9MF09Ik5PTkUiLGVbZS5EUkFHX1pPT01JTkc9MV09IkRSQUdfWk9PTUlORyIsZVtlLlBBTk5JTkc9Ml09IlBBTk5JTkcifSkoYmF8fChiYT17fSkpO3ZhciBGZj1jbGFzcyBleHRlbmRzIEFkLkNvbXBvbmVudHMuR3JvdXB7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKCksdGhpcy5zdGF0ZT1iYS5OT05FLHRoaXMucGFuU3RhcnRDYWxsYmFjaz1uZXcgQWQuVXRpbHMuQ2FsbGJhY2tTZXQsdGhpcy5wYW5FbmRDYWxsYmFjaz1uZXcgQWQuVXRpbHMuQ2FsbGJhY2tTZXQsdGhpcy5wYW5ab29tPW5ldyBBZC5JbnRlcmFjdGlvbnMuUGFuWm9vbSh0LHIpLHRoaXMucGFuWm9vbS5kcmFnSW50ZXJhY3Rpb24oKS5tb3VzZUZpbHRlcihvPT5GZi5pc1BhbktleShvKSYmby5idXR0b249PT0wKSx0aGlzLnBhblpvb20ud2hlZWxGaWx0ZXIodGhpcy5jYW5TY3JvbGxab29tKSx0aGlzLmRyYWdab29tTGF5ZXI9bmV3IFBCKHQscixuKSx0aGlzLmRyYWdab29tTGF5ZXIuZHJhZ0ludGVyYWN0aW9uKCkubW91c2VGaWx0ZXIobz0+IUZmLmlzUGFuS2V5KG8pJiZvLmJ1dHRvbj09PTApLHRoaXMuYXBwZW5kKHRoaXMuZHJhZ1pvb21MYXllcik7bGV0IGk9dGhpcy5vbldoZWVsLmJpbmQodGhpcyk7dGhpcy5vbkFuY2hvcigoKT0+e3RoaXMuX21vdXNlRGlzcGF0Y2hlcj1BZC5EaXNwYXRjaGVycy5Nb3VzZS5nZXREaXNwYXRjaGVyKHRoaXMpLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vbldoZWVsKGkpLHRoaXMucGFuWm9vbS5hdHRhY2hUbyh0aGlzKX0pLHRoaXMub25EZXRhY2goKCk9Pnt0aGlzLnBhblpvb20uZGV0YWNoRnJvbSh0aGlzKSx0aGlzLl9tb3VzZURpc3BhdGNoZXImJih0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmV2hlZWwoaSksdGhpcy5fbW91c2VEaXNwYXRjaGVyPW51bGwpfSksdGhpcy5wYW5ab29tLmRyYWdJbnRlcmFjdGlvbigpLm9uRHJhZ1N0YXJ0KCgpPT57dGhpcy5zdGF0ZT09YmEuTk9ORSYmdGhpcy5zZXRTdGF0ZShiYS5QQU5OSU5HKX0pLHRoaXMucGFuWm9vbS5kcmFnSW50ZXJhY3Rpb24oKS5vbkRyYWdFbmQoKCk9Pnt0aGlzLnN0YXRlPT1iYS5QQU5OSU5HJiZ0aGlzLnNldFN0YXRlKGJhLk5PTkUpfSksdGhpcy5kcmFnWm9vbUxheWVyLmRyYWdJbnRlcmFjdGlvbigpLm9uRHJhZ1N0YXJ0KCgpPT57dGhpcy5zdGF0ZT09YmEuTk9ORSYmdGhpcy5zZXRTdGF0ZShiYS5EUkFHX1pPT01JTkcpfSksdGhpcy5kcmFnWm9vbUxheWVyLmRyYWdJbnRlcmFjdGlvbigpLm9uRHJhZ0VuZCgoKT0+e3RoaXMuc3RhdGU9PWJhLkRSQUdfWk9PTUlORyYmdGhpcy5zZXRTdGF0ZShiYS5OT05FKX0pfW9uV2hlZWwodCxyKXtpZih0aGlzLmNhblNjcm9sbFpvb20ocikpcmV0dXJuO2xldCBuPXRoaXMuZWxlbWVudCgpO2lmKCFuLnNlbGVjdCgiLmhlbHAiKS5lbXB0eSgpKXJldHVybjtsZXQgaT1uLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgiaGVscCIsITApO2kuYXBwZW5kKCJzcGFuIikudGV4dCgiQWx0ICsgU2Nyb2xsIHRvIFpvb20iKSxpLm9uKCJhbmltYXRpb25lbmQiLCgpPT52b2lkIGkucmVtb3ZlKCkpfXN0YXRpYyBpc1BhbktleSh0KXtyZXR1cm4gQm9vbGVhbih0LmFsdEtleSl8fEJvb2xlYW4odC5zaGlmdEtleSl9Y2FuU2Nyb2xsWm9vbSh0KXtyZXR1cm4gdC5hbHRLZXl9c2V0U3RhdGUodCl7aWYodGhpcy5zdGF0ZT09dClyZXR1cm47bGV0IHI9dGhpcy5zdGF0ZTt0aGlzLnN0YXRlPXQsdGhpcy5yb290KCkucmVtb3ZlQ2xhc3ModGhpcy5zdGF0ZUNsYXNzTmFtZShyKSksdGhpcy5yb290KCkuYWRkQ2xhc3ModGhpcy5zdGF0ZUNsYXNzTmFtZSh0KSkscj09YmEuUEFOTklORyYmdGhpcy5wYW5FbmRDYWxsYmFjay5jYWxsQ2FsbGJhY2tzKCksdD09YmEuUEFOTklORyYmdGhpcy5wYW5TdGFydENhbGxiYWNrLmNhbGxDYWxsYmFja3MoKX1zdGF0ZUNsYXNzTmFtZSh0KXtzd2l0Y2godCl7Y2FzZSBiYS5QQU5OSU5HOnJldHVybiJwYW5uaW5nIjtjYXNlIGJhLkRSQUdfWk9PTUlORzpyZXR1cm4iZHJhZy16b29taW5nIjtjYXNlIGJhLk5PTkU6ZGVmYXVsdDpyZXR1cm4iIn19b25QYW5TdGFydCh0KXt0aGlzLnBhblN0YXJ0Q2FsbGJhY2suYWRkKHQpfW9uUGFuRW5kKHQpe3RoaXMucGFuRW5kQ2FsbGJhY2suYWRkKHQpfW9uU2Nyb2xsWm9vbSh0KXt0aGlzLnBhblpvb20ub25ab29tRW5kKHQpfW9uRHJhZ1pvb21TdGFydCh0KXt0aGlzLmRyYWdab29tTGF5ZXIuaW50ZXJhY3Rpb25TdGFydCh0KX1vbkRyYWdab29tRW5kKHQpe3RoaXMuZHJhZ1pvb21MYXllci5pbnRlcmFjdGlvbkVuZCh0KX19O3ZhciBJQjsoZnVuY3Rpb24oZSl7ZVtlLlRFWFQ9MF09IlRFWFQiLGVbZS5ET009MV09IkRPTSJ9KShJQnx8KElCPXt9KSk7dmFyIEJmOyhmdW5jdGlvbihlKXtlLkxPRz0ibG9nIixlLkxJTkVBUj0ibGluZWFyIn0pKEJmfHwoQmY9e30pKTt2YXIgWUt0PTIwLERTPWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGksbyxhLHMsbCxjLHUsaCl7dGhpcy5kaXJ0eURhdGFzZXRzPW5ldyBTZXQsdGhpcy5zZXJpZXNOYW1lcz1bXSx0aGlzLm5hbWUyZGF0YXNldHM9e30sdGhpcy5jb2xvclNjYWxlPWksdGhpcy50b29sdGlwPW8sdGhpcy5kYXRhc2V0cz1bXSx0aGlzLl9pZ25vcmVZT3V0bGllcnM9ITEsdGhpcy5sYXN0UG9pbnRzRGF0YXNldD1uZXcgTW4uRGF0YXNldCx0aGlzLm5hbkRhdGFzZXQ9bmV3IE1uLkRhdGFzZXQsdGhpcy55VmFsdWVBY2Nlc3Nvcj1yLHRoaXMuc3ltYm9sRnVuY3Rpb249dSx0aGlzLl9kZWZhdWx0WFJhbmdlPWwsdGhpcy5fZGVmYXVsdFlSYW5nZT1jLHRoaXMudG9vbHRpcENvbHVtbnM9YSx0aGlzLmJ1aWxkQ2hhcnQodCxyLG4scyxoKX1idWlsZENoYXJ0KHQscixuLGksbyl7dGhpcy5kZXN0cm95KCk7bGV0IGE9dCgpO3RoaXMueEFjY2Vzc29yPWEuYWNjZXNzb3IsdGhpcy54U2NhbGU9YS5zY2FsZSx0aGlzLnhBeGlzPWEuYXhpcyx0aGlzLnhBeGlzLm1hcmdpbigxKS50aWNrTGFiZWxQYWRkaW5nKDMpLG8mJnRoaXMueEF4aXMuZm9ybWF0dGVyKG8pLHRoaXMueVNjYWxlPURTLmdldFlTY2FsZUZyb21UeXBlKG4pLHRoaXMueVNjYWxlLnNldFZhbHVlUHJvdmlkZXJGb3JEb21haW4oKCk9PnRoaXMuZ2V0VmFsdWVzRm9yWUF4aXNEb21haW5Db21wdXRlKCkpLHRoaXMueUF4aXM9bmV3IE1uLkF4ZXMuTnVtZXJpYyh0aGlzLnlTY2FsZSwibGVmdCIpO2xldCBzPVd1KG1CKTt0aGlzLnlBeGlzLm1hcmdpbigwKS50aWNrTGFiZWxQYWRkaW5nKDUpLmZvcm1hdHRlcihzKSx0aGlzLnlBeGlzLnVzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uKCEwKSx0aGlzLmZpbGxBcmVhPWk7bGV0IGw9bmV3IEZmKHRoaXMueFNjYWxlLHRoaXMueVNjYWxlLCgpPT50aGlzLnJlc2V0RG9tYWluKCkpO3RoaXMudG9vbHRpcEludGVyYWN0aW9uPXRoaXMuY3JlYXRlVG9vbHRpcEludGVyYWN0aW9uKGwpLHRoaXMudG9vbHRpcFBvaW50c0NvbXBvbmVudD1uZXcgTW4uQ29tcG9uZW50O2xldCBjPXRoaXMuYnVpbGRQbG90KHRoaXMueFNjYWxlLHRoaXMueVNjYWxlLGkpO3RoaXMuZ3JpZGxpbmVzPW5ldyBNbi5Db21wb25lbnRzLkdyaWRsaW5lcyh0aGlzLnhTY2FsZSx0aGlzLnlTY2FsZSk7bGV0IHU9bnVsbDtuIT09QmYuTE9HJiYodT1uZXcgTW4uQ29tcG9uZW50cy5HdWlkZUxpbmVMYXllcigiaG9yaXpvbnRhbCIpLHUuc2NhbGUodGhpcy55U2NhbGUpLnZhbHVlKDApKTtsZXQgaD1uZXcgTW4uQ29tcG9uZW50cy5HdWlkZUxpbmVMYXllcigidmVydGljYWwiKTtoLnNjYWxlKHRoaXMueFNjYWxlKS52YWx1ZSgwKSx0aGlzLmNlbnRlcj1uZXcgTW4uQ29tcG9uZW50cy5Hcm91cChbdGhpcy5ncmlkbGluZXMsdSxoLGMsdGhpcy50b29sdGlwUG9pbnRzQ29tcG9uZW50LGxdKSx0aGlzLmNlbnRlci5hZGRDbGFzcygibWFpbiIpLHRoaXMub3V0ZXI9bmV3IE1uLkNvbXBvbmVudHMuVGFibGUoW1t0aGlzLnlBeGlzLHRoaXMuY2VudGVyXSxbbnVsbCx0aGlzLnhBeGlzXV0pfWJ1aWxkUGxvdCh0LHIsbil7biYmKHRoaXMubWFyZ2luQXJlYVBsb3Q9bmV3IE1uLlBsb3RzLkFyZWEsdGhpcy5tYXJnaW5BcmVhUGxvdC54KHRoaXMueEFjY2Vzc29yLHQpLHRoaXMubWFyZ2luQXJlYVBsb3QueShuLmhpZ2hlckFjY2Vzc29yLHIpLHRoaXMubWFyZ2luQXJlYVBsb3QueTAobi5sb3dlckFjY2Vzc29yKSx0aGlzLm1hcmdpbkFyZWFQbG90LmF0dHIoImZpbGwiLChjLHUsaCk9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShoLm1ldGFkYXRhKCkubmFtZSkpLHRoaXMubWFyZ2luQXJlYVBsb3QuYXR0cigiZmlsbC1vcGFjaXR5IiwuMyksdGhpcy5tYXJnaW5BcmVhUGxvdC5hdHRyKCJzdHJva2Utd2lkdGgiLDApKSx0aGlzLnNtb290aGVkQWNjZXNzb3I9Yz0+Yy5zbW9vdGhlZDtsZXQgaT1uZXcgTW4uUGxvdHMuTGluZTtpLngodGhpcy54QWNjZXNzb3IsdCksaS55KHRoaXMueVZhbHVlQWNjZXNzb3IsciksaS5hdHRyKCJzdHJva2UiLChjLHUsaCk9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShoLm1ldGFkYXRhKCkubmFtZSkpLHRoaXMubGluZVBsb3Q9aSx0aGlzLnNldHVwVG9vbHRpcHMoaSk7bGV0IG89bmV3IE1uLlBsb3RzLkxpbmU7aWYoby54KHRoaXMueEFjY2Vzc29yLHQpLG8ueSh0aGlzLnNtb290aGVkQWNjZXNzb3Isciksby5hdHRyKCJzdHJva2UiLChjLHUsaCk9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShoLm1ldGFkYXRhKCkubmFtZSkpLHRoaXMuc21vb3RoTGluZVBsb3Q9byx0aGlzLnN5bWJvbEZ1bmN0aW9uKXtsZXQgYz1uZXcgTW4uUGxvdHMuU2NhdHRlcjtjLngodGhpcy54QWNjZXNzb3IsdCksYy55KHRoaXMueVZhbHVlQWNjZXNzb3IsciksYy5hdHRyKCJmaWxsIiwodSxoLGYpPT50aGlzLmNvbG9yU2NhbGUuc2NhbGUoZi5tZXRhZGF0YSgpLm5hbWUpKSxjLmF0dHIoIm9wYWNpdHkiLDEpLGMuc2l6ZShfQioyKSxjLnN5bWJvbCgodSxoLGYpPT50aGlzLnN5bWJvbEZ1bmN0aW9uKGYubWV0YWRhdGEoKS5uYW1lKSksdGhpcy5tYXJrZXJzU2NhdHRlclBsb3Q9Y31sZXQgYT1uZXcgTW4uUGxvdHMuU2NhdHRlcjthLngodGhpcy54QWNjZXNzb3IsdCksYS55KHRoaXMueVZhbHVlQWNjZXNzb3IsciksYS5hdHRyKCJmaWxsIixjPT50aGlzLmNvbG9yU2NhbGUuc2NhbGUoYy5uYW1lKSksYS5hdHRyKCJvcGFjaXR5IiwxKSxhLnNpemUoX0IqMiksYS5kYXRhc2V0cyhbdGhpcy5sYXN0UG9pbnRzRGF0YXNldF0pLHRoaXMuc2NhdHRlclBsb3Q9YTtsZXQgcz1uZXcgTW4uUGxvdHMuU2NhdHRlcjtzLngodGhpcy54QWNjZXNzb3IsdCkscy55KGM9PmMuZGlzcGxheVkscikscy5hdHRyKCJmaWxsIixjPT50aGlzLmNvbG9yU2NhbGUuc2NhbGUoYy5uYW1lKSkscy5hdHRyKCJvcGFjaXR5IiwxKSxzLnNpemUoT0t0KjIpLHMuZGF0YXNldHMoW3RoaXMubmFuRGF0YXNldF0pLHMuc3ltYm9sKE1uLlN5bWJvbEZhY3Rvcmllcy50cmlhbmdsZSksdGhpcy5uYW5EaXNwbGF5PXM7bGV0IGw9W3MsYSxvLGldO3JldHVybiB0aGlzLm1hcmdpbkFyZWFQbG90JiZsLnB1c2godGhpcy5tYXJnaW5BcmVhUGxvdCksdGhpcy5tYXJrZXJzU2NhdHRlclBsb3QmJmwucHVzaCh0aGlzLm1hcmtlcnNTY2F0dGVyUGxvdCksbmV3IE1uLkNvbXBvbmVudHMuR3JvdXAobCl9aWdub3JlWU91dGxpZXJzKHQpe3QhPT10aGlzLl9pZ25vcmVZT3V0bGllcnMmJih0aGlzLl9pZ25vcmVZT3V0bGllcnM9dCx0aGlzLnVwZGF0ZVNwZWNpYWxEYXRhc2V0cygpLHRoaXMueVNjYWxlLmlnbm9yZU91dGxpZXIodCksdGhpcy5yZXNldFlEb21haW4oKSl9Z2V0VmFsdWVzRm9yWUF4aXNEb21haW5Db21wdXRlKCl7bGV0IHQ9dGhpcy5nZXRBY2Nlc3NvcnNGb3JDb21wdXRpbmdZUmFuZ2UoKSxyPW49PnQubWFwKGk9Pm4uZGF0YSgpLm1hcChvPT5pKG8sLTEsbikpKTtyZXR1cm4gRnMuZmxhdHRlbkRlZXAodGhpcy5kYXRhc2V0cy5tYXAocikpLmZpbHRlcihpc0Zpbml0ZSl9dXBkYXRlU3BlY2lhbERhdGFzZXRzKCl7bGV0IHQ9dGhpcy5nZXRZQXhpc0FjY2Vzc29yKCkscj10aGlzLmRhdGFzZXRzLm1hcChvPT57bGV0IGE9bnVsbCxzPW8uZGF0YSgpLmZpbHRlcihsPT4haXNOYU4odChsLC0xLG8pKSk7aWYocy5sZW5ndGg+MCl7bGV0IGw9cy5sZW5ndGgtMTthPXNbbF0sYS5uYW1lPW8ubWV0YWRhdGEoKS5uYW1lLGEucmVsYXRpdmU9bjAoYSwtMSxvKX1yZXR1cm4gYX0pLmZpbHRlcihvPT5vIT1udWxsKTt0aGlzLmxhc3RQb2ludHNEYXRhc2V0LmRhdGEociksdGhpcy5tYXJrZXJzU2NhdHRlclBsb3QmJnRoaXMubWFya2Vyc1NjYXR0ZXJQbG90LmRhdGFzZXRzKHRoaXMuZGF0YXNldHMubWFwKHRoaXMuY3JlYXRlU2FtcGxlZERhdGFzZXRGb3JNYXJrZXJzKSk7bGV0IG49bz0+e2xldCBhPW51bGwscz1vLmRhdGEoKSxsPTA7Zm9yKDtsPHMubGVuZ3RoJiZhPT1udWxsOylpc05hTih0KHNbbF0sLTEsbykpfHwoYT10KHNbbF0sLTEsbykpLGwrKzthPT1udWxsJiYoYT0wKTtsZXQgYz1bXTtmb3IobD0wO2w8cy5sZW5ndGg7bCsrKWlzTmFOKHQoc1tsXSwtMSxvKSk/KHNbbF0ubmFtZT1vLm1ldGFkYXRhKCkubmFtZSxzW2xdLmRpc3BsYXlZPWEsc1tsXS5yZWxhdGl2ZT1uMChzW2xdLC0xLG8pLGMucHVzaChzW2xdKSk6YT10KHNbbF0sLTEsbyk7cmV0dXJuIGN9LGk9RnMuZmxhdHRlbih0aGlzLmRhdGFzZXRzLm1hcChuKSk7dGhpcy5uYW5EYXRhc2V0LmRhdGEoaSl9cmVzZXREb21haW4oKXt0aGlzLnJlc2V0WERvbWFpbigpLHRoaXMucmVzZXRZRG9tYWluKCl9cmVzZXRYRG9tYWluKCl7bGV0IHQ7aWYodGhpcy5fZGVmYXVsdFhSYW5nZSE9bnVsbCl0PXRoaXMuX2RlZmF1bHRYUmFuZ2U7ZWxzZXtsZXQgcj10aGlzLnhTY2FsZTtyLl9kb21haW5NaW49bnVsbCxyLl9kb21haW5NYXg9bnVsbCx0PXIuX2dldEV4dGVudCgpfXRoaXMueFNjYWxlLmRvbWFpbih0KX1yZXNldFlEb21haW4oKXt0aGlzLl9kZWZhdWx0WVJhbmdlIT1udWxsP3RoaXMueVNjYWxlLmRvbWFpbih0aGlzLl9kZWZhdWx0WVJhbmdlKToodGhpcy55U2NhbGUuYXV0b0RvbWFpbigpLHRoaXMueVNjYWxlLmRvbWFpbih0aGlzLnlTY2FsZS5kb21haW4oKSkpfWdldEFjY2Vzc29yc0ZvckNvbXB1dGluZ1lSYW5nZSgpe2xldCB0PVt0aGlzLmdldFlBeGlzQWNjZXNzb3IoKV07cmV0dXJuIHRoaXMuZmlsbEFyZWEmJnQucHVzaCh0aGlzLmZpbGxBcmVhLmxvd2VyQWNjZXNzb3IsdGhpcy5maWxsQXJlYS5oaWdoZXJBY2Nlc3NvciksdH1nZXRZQXhpc0FjY2Vzc29yKCl7cmV0dXJuIHRoaXMuc21vb3RoaW5nRW5hYmxlZD90aGlzLnNtb290aGVkQWNjZXNzb3I6dGhpcy55VmFsdWVBY2Nlc3Nvcn1jcmVhdGVUb29sdGlwSW50ZXJhY3Rpb24odCl7bGV0IHI9bmV3IFNCLG49KCk9PntyLmVuYWJsZWQoITEpLHRoaXMuaGlkZVRvb2x0aXBzKCl9LGk9KCk9PnIuZW5hYmxlZCghMCk7cmV0dXJuIHQub25QYW5TdGFydChuKSx0Lm9uRHJhZ1pvb21TdGFydChuKSx0Lm9uUGFuRW5kKGkpLHQub25EcmFnWm9vbUVuZChpKSx0Lm9uU2Nyb2xsWm9vbSgoKT0+dGhpcy51cGRhdGVUb29sdGlwQ29udGVudCh0aGlzLl9sYXN0TW91c2VQb3NpdGlvbikpLHIub25Qb2ludGVyTW92ZShvPT57dGhpcy5fbGFzdE1vdXNlUG9zaXRpb249byx0aGlzLnVwZGF0ZVRvb2x0aXBDb250ZW50KG8pfSksci5vblBvaW50ZXJFeGl0KCgpPT50aGlzLmhpZGVUb29sdGlwcygpKSxyfXVwZGF0ZVRvb2x0aXBDb250ZW50KHQpeyF0aGlzLmxpbmVQbG90fHwod2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3Rvb2x0aXBVcGRhdGVBbmltYXRpb25GcmFtZSksdGhpcy5fdG9vbHRpcFVwZGF0ZUFuaW1hdGlvbkZyYW1lPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntsZXQgcj17eDp0LngseTp0Lnl9LG49dGhpcy5ncmlkbGluZXMuY29udGVudCgpLm5vZGUoKS5nZXRCQm94KCksaT10aGlzLmxpbmVQbG90LmRhdGFzZXRzKCkubWFwKGw9PnRoaXMuZmluZENsb3Nlc3RQb2ludChyLGwpKS5maWx0ZXIobD0+Qm9vbGVhbihsKSksbz1Nbi5VdGlscy5ET00uaW50ZXJzZWN0c0JCb3gsYT1pLmZpbHRlcihsPT5vKGwueCxsLnksbil8fGlzTmFOKHRoaXMueVZhbHVlQWNjZXNzb3IobC5kYXR1bSwwLGwuZGF0YXNldCkpKSxzPWEuZmlsdGVyKGw9PiFpc05hTih0aGlzLnlWYWx1ZUFjY2Vzc29yKGwuZGF0dW0sMCxsLmRhdGFzZXQpKSk7aWYoaS5sZW5ndGghPT0wKXt0aGlzLnNjYXR0ZXJQbG90LmF0dHIoImRpc3BsYXkiLCJub25lIik7bGV0IGw9dGhpcy50b29sdGlwUG9pbnRzQ29tcG9uZW50LmNvbnRlbnQoKS5zZWxlY3RBbGwoIi5wb2ludCIpLmRhdGEocyxjPT5jLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lKTtsLmVudGVyKCkuYXBwZW5kKCJjaXJjbGUiKS5jbGFzc2VkKCJwb2ludCIsITApLGwuYXR0cigiciIsX0IpLmF0dHIoImN4IixjPT5jLngpLmF0dHIoImN5IixjPT5jLnkpLnN0eWxlKCJzdHJva2UiLCJub25lIikuYXR0cigiZmlsbCIsYz0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKGMuZGF0YXNldC5tZXRhZGF0YSgpLm5hbWUpKSxsLmV4aXQoKS5yZW1vdmUoKSx0aGlzLmRyYXdUb29sdGlwcyhhLHIsdGhpcy50b29sdGlwQ29sdW1ucyl9ZWxzZSB0aGlzLmhpZGVUb29sdGlwcygpfSkpfWhpZGVUb29sdGlwcygpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl90b29sdGlwVXBkYXRlQW5pbWF0aW9uRnJhbWUpLHRoaXMudG9vbHRpcC5oaWRlKCksdGhpcy5zY2F0dGVyUGxvdC5hdHRyKCJkaXNwbGF5IiwiYmxvY2siKSx0aGlzLnRvb2x0aXBQb2ludHNDb21wb25lbnQuY29udGVudCgpLnNlbGVjdEFsbCgiLnBvaW50IikucmVtb3ZlKCl9c2V0dXBUb29sdGlwcyh0KXt0Lm9uRGV0YWNoKCgpPT57dGhpcy50b29sdGlwSW50ZXJhY3Rpb24uZGV0YWNoRnJvbSh0KSx0aGlzLnRvb2x0aXBJbnRlcmFjdGlvbi5lbmFibGVkKCExKX0pLHQub25BbmNob3IoKCk9Pnt0aGlzLnRvb2x0aXBJbnRlcmFjdGlvbi5hdHRhY2hUbyh0KSx0aGlzLnRvb2x0aXBJbnRlcmFjdGlvbi5lbmFibGVkKCEwKX0pfWRyYXdUb29sdGlwcyh0LHIsbil7aWYoIXQubGVuZ3RoKXt0aGlzLnRvb2x0aXAuaGlkZSgpO3JldHVybn1sZXR7Y29sb3JTY2FsZTppfT10aGlzO249W3t0aXRsZToiIixzdGF0aWM6ITEsZXZhbFR5cGU6SUIuRE9NLGV2YWx1YXRlKGQpe3JldHVybiBIdCh0aGlzKS5zZWxlY3QoInNwYW4iKS5zdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsKCk9Pmkuc2NhbGUoZC5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZSkpLCIifSxlbnRlcihkKXtIdCh0aGlzKS5hcHBlbmQoInNwYW4iKS5jbGFzc2VkKCJzd2F0Y2giLCEwKS5zdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsKCk9Pmkuc2NhbGUoZC5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZSkpfX0sLi4ubl07bGV0IGE9V3UocjApLHM9ZD0+TWF0aC5wb3coZC54LXIueCwyKStNYXRoLnBvdyhkLnktci55LDIpLGw9RnMubWluKHQubWFwKHMpKSxjPXRoaXMuc21vb3RoaW5nRW5hYmxlZD90aGlzLnNtb290aGVkQWNjZXNzb3I6dGhpcy55VmFsdWVBY2Nlc3Nvcjt0aGlzLnRvb2x0aXBTb3J0aW5nTWV0aG9kPT09ImFzY2VuZGluZyI/dD1Gcy5zb3J0QnkodCxkPT5jKGQuZGF0dW0sLTEsZC5kYXRhc2V0KSk6dGhpcy50b29sdGlwU29ydGluZ01ldGhvZD09PSJkZXNjZW5kaW5nIj90PUZzLnNvcnRCeSh0LGQ9PmMoZC5kYXR1bSwtMSxkLmRhdGFzZXQpKS5yZXZlcnNlKCk6dGhpcy50b29sdGlwU29ydGluZ01ldGhvZD09PSJuZWFyZXN0Ij90PUZzLnNvcnRCeSh0LHMpOnQ9dC5zbGljZSgwKS5yZXZlcnNlKCk7bGV0IHU9dGhpcyxoPUh0KHRoaXMudG9vbHRpcC5jb250ZW50KCkpLnNlbGVjdCgidGFibGUiKSxmPWguc2VsZWN0KCJ0aGVhZCIpLnNlbGVjdEFsbCgidGgiKS5kYXRhKG4sKGQsZyxfKT0+ZC50aXRsZSk7Zi5lbnRlcigpLmFwcGVuZCgidGgiKS50ZXh0KGQ9PmQudGl0bGUpLm5vZGVzKCksZi5leGl0KCkucmVtb3ZlKCk7bGV0IHA9aC5zZWxlY3QoInRib2R5Iikuc2VsZWN0QWxsKCJ0ciIpLmRhdGEodCwoZCxnLF8pPT5kLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lKTtwLmNsYXNzZWQoImRpc3RhbnQiLGQ9PntsZXQgZz1kLmRhdGFzZXQuZGF0YSgpWzBdLF89RnMubGFzdChkLmRhdGFzZXQuZGF0YSgpKSx5PXRoaXMueFNjYWxlLnNjYWxlKHRoaXMueEFjY2Vzc29yKGcsMCxkLmRhdGFzZXQpKSx4PXRoaXMueFNjYWxlLnNjYWxlKHRoaXMueEFjY2Vzc29yKF8sMCxkLmRhdGFzZXQpKSxiPXRoaXMuc21vb3RoaW5nRW5hYmxlZD9kLmRhdHVtLnNtb290aGVkOnRoaXMueVZhbHVlQWNjZXNzb3IoZC5kYXR1bSwwLGQuZGF0YXNldCk7cmV0dXJuIHIueDx5fHxyLng+eHx8aXNOYU4oYil9KS5jbGFzc2VkKCJjbG9zZXN0IixkPT5zKGQpPT09bCkuZWFjaChmdW5jdGlvbihkKXt1LmRyYXdUb29sdGlwUm93KHRoaXMsbixkKX0pLm9yZGVyKCkscC5leGl0KCkucmVtb3ZlKCkscC5lbnRlcigpLmFwcGVuZCgidHIiKS5lYWNoKGZ1bmN0aW9uKGQpe3UuZHJhd1Rvb2x0aXBSb3codGhpcyxuLGQpfSkubm9kZXMoKSx0aGlzLnRvb2x0aXAudXBkYXRlQW5kUG9zaXRpb24odGhpcy50YXJnZXRTVkcubm9kZSgpKX1kcmF3VG9vbHRpcFJvdyh0LHIsbil7bGV0IGk9dGhpcyxvPUh0KHQpLnNlbGVjdEFsbCgidGQiKS5kYXRhKHIpO28uZWFjaChmdW5jdGlvbihhKXthLnN0YXRpY3x8aS5kcmF3VG9vbHRpcENvbHVtbi5jYWxsKGksdGhpcyxhLG4pfSksby5leGl0KCkucmVtb3ZlKCksby5lbnRlcigpLmFwcGVuZCgidGQiKS5lYWNoKGZ1bmN0aW9uKGEpeyJlbnRlciJpbiBhJiZhLmVudGVyLmNhbGwodGhpcyxuKSxpLmRyYXdUb29sdGlwQ29sdW1uLmNhbGwoaSx0aGlzLGEsbil9KX1kcmF3VG9vbHRpcENvbHVtbih0LHIsbil7bGV0e3Ntb290aGluZ0VuYWJsZWQ6aX09dGhpczsiZXZhbFR5cGUiaW4gciYmci5ldmFsVHlwZT09SUIuRE9NP3IuZXZhbHVhdGUuY2FsbCh0LG4se3Ntb290aGluZ0VuYWJsZWQ6aX0pOkh0KHQpLnRleHQoci5ldmFsdWF0ZS5jYWxsKHQsbix7c21vb3RoaW5nRW5hYmxlZDppfSkpfWZpbmRDbG9zZXN0UG9pbnQodCxyKXtsZXQgbj1yLmRhdGEoKS5tYXAoKHMsbCk9PnRoaXMueFNjYWxlLnNjYWxlKHRoaXMueEFjY2Vzc29yKHMsbCxyKSkpLGk9RnMuc29ydGVkSW5kZXgobix0LngpO2lmKG4ubGVuZ3RoPT0wKXJldHVybiBudWxsO2lmKGk9PT1uLmxlbmd0aClpPWktMTtlbHNlIGlmKGkhPT0wKXtsZXQgcz1NYXRoLmFicyhuW2ktMV0tdC54KSxsPU1hdGguYWJzKG5baV0tdC54KTtpPXM8bD9pLTE6aX1sZXQgbz1yLmRhdGEoKVtpXSxhPXRoaXMuc21vb3RoaW5nRW5hYmxlZD90aGlzLnNtb290aGVkQWNjZXNzb3IobyxpLHIpOnRoaXMueVZhbHVlQWNjZXNzb3IobyxpLHIpO3JldHVybnt4Om5baV0seTp0aGlzLnlTY2FsZS5zY2FsZShhKSxkYXR1bTpvLGRhdGFzZXQ6cn19cmVzbW9vdGhEYXRhc2V0KHQpe2xldCByPXQuZGF0YSgpLG49dGhpcy5zbW9vdGhpbmdXZWlnaHQsaT1yLmxlbmd0aD4wPzA6TmFOLG89MCxhPXIubWFwKChsLGMpPT50aGlzLnlWYWx1ZUFjY2Vzc29yKGwsYyx0KSkscz1hLmV2ZXJ5KGw9Pmw9PWFbMF0pO3IuZm9yRWFjaCgobCxjKT0+e2xldCB1PWFbY107aWYoc3x8IU51bWJlci5pc0Zpbml0ZSh1KSlsLnNtb290aGVkPXU7ZWxzZXtpPWkqbisoMS1uKSp1LG8rKztsZXQgaD0xO24hPT0xJiYoaD0xLU1hdGgucG93KG4sbykpLGwuc21vb3RoZWQ9aS9ofX0pfWdldERhdGFzZXQodCl7cmV0dXJuIHRoaXMubmFtZTJkYXRhc2V0c1t0XT09PXZvaWQgMCYmKHRoaXMubmFtZTJkYXRhc2V0c1t0XT1uZXcgTW4uRGF0YXNldChbXSx7bmFtZTp0LG1ldGE6bnVsbH0pKSx0aGlzLm5hbWUyZGF0YXNldHNbdF19c3RhdGljIGdldFlTY2FsZUZyb21UeXBlKHQpe2lmKHQ9PT1CZi5MT0cpcmV0dXJuIG5ldyBBQjtpZih0PT09QmYuTElORUFSKXJldHVybiBuZXcgTUI7dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgeVNjYWxlIHR5cGUgIit0KX1zZXRWaXNpYmxlU2VyaWVzKHQpe3RoaXMuZGlzYWJsZUNoYW5nZXMoKSx0PXQuc29ydCgpLHQucmV2ZXJzZSgpLHRoaXMuc2VyaWVzTmFtZXM9dH1kaXNhYmxlQ2hhbmdlcygpe3RoaXMuZGlydHlEYXRhc2V0cy5zaXplfHwodGhpcy5saW5lUGxvdC5kYXRhc2V0cyhbXSksdGhpcy5zbW9vdGhMaW5lUGxvdCYmdGhpcy5zbW9vdGhMaW5lUGxvdC5kYXRhc2V0cyhbXSksdGhpcy5tYXJnaW5BcmVhUGxvdCYmdGhpcy5tYXJnaW5BcmVhUGxvdC5kYXRhc2V0cyhbXSkpfWNvbW1pdENoYW5nZXMoKXt0aGlzLmRhdGFzZXRzPXRoaXMuc2VyaWVzTmFtZXMubWFwKHQ9PnRoaXMuZ2V0RGF0YXNldCh0KSksWy4uLnRoaXMuZGlydHlEYXRhc2V0c10uZm9yRWFjaCh0PT57dGhpcy5zbW9vdGhpbmdFbmFibGVkJiZ0aGlzLnJlc21vb3RoRGF0YXNldCh0aGlzLmdldERhdGFzZXQodCkpfSksdGhpcy51cGRhdGVTcGVjaWFsRGF0YXNldHMoKSx0aGlzLmxpbmVQbG90LmRhdGFzZXRzKHRoaXMuZGF0YXNldHMpLHRoaXMuc21vb3RoaW5nRW5hYmxlZCYmdGhpcy5zbW9vdGhMaW5lUGxvdC5kYXRhc2V0cyh0aGlzLmRhdGFzZXRzKSx0aGlzLm1hcmdpbkFyZWFQbG90JiZ0aGlzLm1hcmdpbkFyZWFQbG90LmRhdGFzZXRzKHRoaXMuZGF0YXNldHMpLHRoaXMubWVhc3VyZUJCb3hBbmRNYXliZUludmFsaWRhdGVMYXlvdXRJblJhZigpLHRoaXMuZGlydHlEYXRhc2V0cy5jbGVhcigpfWNyZWF0ZVNhbXBsZWREYXRhc2V0Rm9yTWFya2Vycyh0KXtsZXQgcj10LmRhdGEoKTtpZihyLmxlbmd0aDw9WUt0KXJldHVybiB0O2xldCBuPU1hdGguY2VpbChyLmxlbmd0aC9ZS3QpLGk9bmV3IEFycmF5KE1hdGguZmxvb3Ioci5sZW5ndGgvbikpO2ZvcihsZXQgbz0wLGE9MDtvPGkubGVuZ3RoO28rKyxhKz1uKWlbb109clthXTtyZXR1cm4gbmV3IE1uLkRhdGFzZXQoaSx0Lm1ldGFkYXRhKCkpfXNldFNlcmllc0RhdGEodCxyKXt0aGlzLmRpc2FibGVDaGFuZ2VzKCksdGhpcy5nZXREYXRhc2V0KHQpLmRhdGEociksdGhpcy5kaXJ0eURhdGFzZXRzLmFkZCh0KX1zZXRTZXJpZXNNZXRhZGF0YSh0LHIpe3RoaXMuZGlzYWJsZUNoYW5nZXMoKSx0aGlzLmdldERhdGFzZXQodCkubWV0YWRhdGEoeWgoaWEoe30sdGhpcy5nZXREYXRhc2V0KHQpLm1ldGFkYXRhKCkpLHttZXRhOnJ9KSksdGhpcy5kaXJ0eURhdGFzZXRzLmFkZCh0KX1zbW9vdGhpbmdVcGRhdGUodCl7dGhpcy5zbW9vdGhpbmdXZWlnaHQ9dCx0aGlzLmRhdGFzZXRzLmZvckVhY2gocj0+dGhpcy5yZXNtb290aERhdGFzZXQocikpLHRoaXMuc21vb3RoaW5nRW5hYmxlZHx8KHRoaXMubGluZVBsb3QuYWRkQ2xhc3MoImdob3N0IiksdGhpcy5zY2F0dGVyUGxvdC55KHRoaXMuc21vb3RoZWRBY2Nlc3Nvcix0aGlzLnlTY2FsZSksdGhpcy5zbW9vdGhpbmdFbmFibGVkPSEwLHRoaXMuc21vb3RoTGluZVBsb3QuZGF0YXNldHModGhpcy5kYXRhc2V0cykpLHRoaXMubWFya2Vyc1NjYXR0ZXJQbG90JiZ0aGlzLm1hcmtlcnNTY2F0dGVyUGxvdC55KHRoaXMuZ2V0WUF4aXNBY2Nlc3NvcigpLHRoaXMueVNjYWxlKSx0aGlzLnVwZGF0ZVNwZWNpYWxEYXRhc2V0cygpfXNtb290aGluZ0Rpc2FibGUoKXt0aGlzLnNtb290aGluZ0VuYWJsZWQmJih0aGlzLmxpbmVQbG90LnJlbW92ZUNsYXNzKCJnaG9zdCIpLHRoaXMuc2NhdHRlclBsb3QueSh0aGlzLnlWYWx1ZUFjY2Vzc29yLHRoaXMueVNjYWxlKSx0aGlzLnNtb290aExpbmVQbG90LmRhdGFzZXRzKFtdKSx0aGlzLnNtb290aGluZ0VuYWJsZWQ9ITEsdGhpcy51cGRhdGVTcGVjaWFsRGF0YXNldHMoKSksdGhpcy5tYXJrZXJzU2NhdHRlclBsb3QmJnRoaXMubWFya2Vyc1NjYXR0ZXJQbG90LnkodGhpcy5nZXRZQXhpc0FjY2Vzc29yKCksdGhpcy55U2NhbGUpfXNldENvbG9yU2NhbGUodCl7dGhpcy5jb2xvclNjYWxlPXR9c2V0VG9vbHRpcENvbHVtbnModCl7dGhpcy50b29sdGlwQ29sdW1ucz10fXNldFRvb2x0aXBTb3J0aW5nTWV0aG9kKHQpe3RoaXMudG9vbHRpcFNvcnRpbmdNZXRob2Q9dH1yZW5kZXJUbyh0KXt0aGlzLnRhcmdldFNWRz10LHRoaXMub3V0ZXIucmVuZGVyVG8odCksdGhpcy5fZGVmYXVsdFhSYW5nZSE9bnVsbCYmdGhpcy5yZXNldFhEb21haW4oKSx0aGlzLl9kZWZhdWx0WVJhbmdlIT1udWxsJiZ0aGlzLnJlc2V0WURvbWFpbigpLHRoaXMubWVhc3VyZUJCb3hBbmRNYXliZUludmFsaWRhdGVMYXlvdXRJblJhZigpfXJlZHJhdygpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZWRyYXdSYWYpLHRoaXMuX3JlZHJhd1JhZj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5tZWFzdXJlQkJveEFuZE1heWJlSW52YWxpZGF0ZUxheW91dCgpLHRoaXMub3V0ZXIucmVkcmF3KCl9KX1tZWFzdXJlQkJveEFuZE1heWJlSW52YWxpZGF0ZUxheW91dEluUmFmKCl7d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX2ludmFsaWRhdGVMYXlvdXRSYWYpLHRoaXMuX2ludmFsaWRhdGVMYXlvdXRSYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMubWVhc3VyZUJCb3hBbmRNYXliZUludmFsaWRhdGVMYXlvdXQoKX0pfW1lYXN1cmVCQm94QW5kTWF5YmVJbnZhbGlkYXRlTGF5b3V0KCl7aWYodGhpcy5fbGFzdERyYXdCQm94KXtsZXR7d2lkdGg6dH09dGhpcy5fbGFzdERyYXdCQm94LHt3aWR0aDpyfT10aGlzLnRhcmdldFNWRy5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dD09MCYmdDxyJiZ0aGlzLm91dGVyLmludmFsaWRhdGVDYWNoZSgpfXRoaXMuX2xhc3REcmF3QkJveD10aGlzLnRhcmdldFNWRy5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9ZGVzdHJveSgpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZWRyYXdSYWYpLHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9pbnZhbGlkYXRlTGF5b3V0UmFmKSx0aGlzLm91dGVyJiZ0aGlzLm91dGVyLmRlc3Ryb3koKX1vbkFuY2hvcih0KXt0aGlzLm91dGVyJiZ0aGlzLm91dGVyLm9uQW5jaG9yKHQpfWlzRGF0YUZpdFRvRG9tYWluKCl7cmV0dXJuIHQodGhpcy54QXhpcy5nZXRTY2FsZSgpKSYmdCh0aGlzLnlBeGlzLmdldFNjYWxlKCkpO2Z1bmN0aW9uIHQocil7bGV0IG49ci5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpLGk9ci5nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudCgpO3JldHVybiBpWzBdPT09blswXSYmaVsxXT09PW5bMV19fX07dmFyIFhLdD1FZShPZSgpLDEpLG5zdD1FZShTbCgpLDEpO3lzKHttb2R1bGVOYW1lOiJwbG90dGFibGUtc3R5bGUiLHN0eWxlQ29udGVudDpgCiAgICAKLnBsb3R0YWJsZS1jb2xvcnMtMCB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzUyNzljNzsgLyogSU5ESUdPICovCn0KCi5wbG90dGFibGUtY29sb3JzLTEgewogIGJhY2tncm91bmQtY29sb3I6ICNmZDM3M2U7IC8qIENPUkFMX1JFRCAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy0yIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjNjMjYxOyAvKiBGRVJOICovCn0KCi5wbG90dGFibGUtY29sb3JzLTMgewogIGJhY2tncm91bmQtY29sb3I6ICNmYWQ0MTk7IC8qIEJSSUdIVF9TVU4gKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtNCB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzJjMmI2ZjsgLyogSkFDQVJUQSAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy01IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY3OTM5OyAvKiBCVVJOSU5HX09SQU5HRSAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy02IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGIyZTY1OyAvKiBDRVJJU0VfUkVEICovCn0KCi5wbG90dGFibGUtY29sb3JzLTcgewogIGJhY2tncm91bmQtY29sb3I6ICM5OWNlNTA7IC8qIENPTklGRVIgKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtOCB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzk2MjU2NTsgLyogUk9ZQUxfSEVBVEggKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtOSB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzA2Y2NjYzsgLyogUk9CSU5TX0VHR19CTFVFICovCn0KCi8qKgogKiBVc2VyLXN1cHBsaWVkIHJlbmRlclRvIGVsZW1lbnQuCiAqLwoucGxvdHRhYmxlIHsKICBkaXNwbGF5OiBibG9jazsgLyogbXVzdCBiZSBibG9jayBlbGVtZW50cyBmb3Igd2lkdGgvaGVpZ2h0IGNhbGN1bGF0aW9ucyB0byB3b3JrIGluIEZpcmVmb3guICovCiAgcG9pbnRlci1ldmVudHM6IHZpc2libGVGaWxsOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAvKioKICAgKiBQcmUgMy4wLCB1c2VycyBjb3VsZCBzZXQgdGhlIGRpbWVuc2lvbiBvZiB0aGUgcm9vdCBlbGVtZW50IGluIHR3byB3YXlzOiBlaXRoZXIgdXNpbmcgQ1NTCiAgICogKGlubGluZSBvciB0aHJvdWdoIGEgc3R5bGVzaGVldCksIG9yIHVzaW5nIHRoZSBTVkcgd2lkdGgvaGVpZ2h0IGF0dHJpYnV0ZXMuIEJ5IGRlZmF1bHQsIHdlCiAgICogc2V0IHRoZSBTVkcgd2lkdGgvaGVpZ2h0IGF0dHJpYnV0ZXMgdG8gMTAwJS4KICAgKgogICAqIFBvc3QgMy4wIHRoZSByb290IGVsZW1lbnQgaXMgYWx3YXlzIGEgbm9ybWFsIGRpdiBhbmQgdGhlIG9ubHkgd2F5IHRvIHNldCB0aGUgZGltZW5zaW9ucyBpcwogICAqIHRvIHVzZSBDU1MuIFRvIHJlcGxpY2F0ZSB0aGUgIjEwMCUtYnktZGVmYXVsdCIgYmVoYXZpb3IsIHdlIGFwcGx5IHdpZHRoL2hlaWdodCAxMDAlLgogICAqLwogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKfQoKLyoqCiAqIFRoZSBfZWxlbWVudCB0aGF0IHJvb3RzIGVhY2ggQ29tcG9uZW50J3MgRE9NLgogKi8KLnBsb3R0YWJsZSAuY29tcG9uZW50IHsKICAvKiBBbGxvdyBjb21wb25lbnRzIHRvIGJlIHBvc2l0aW9uZWQgd2l0aCBleHBsaWNpdCBsZWZ0L3RvcC93aWR0aC9oZWlnaHQgc3R5bGVzICovCiAgcG9zaXRpb246IGFic29sdXRlOwp9CgoucGxvdHRhYmxlIC5iYWNrZ3JvdW5kLWNvbnRhaW5lciwKLnBsb3R0YWJsZSAuY29udGVudCwKLnBsb3R0YWJsZSAuZm9yZWdyb3VuZC1jb250YWluZXIgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEwMCU7Cn0KCi8qKgogKiBEb24ndCBhbGxvdyBzdmcgZWxlbWVudHMgYWJvdmUgdGhlIGNvbnRlbnQgdG8gc3RlYWwgZXZlbnRzCiAqLwoucGxvdHRhYmxlIC5mb3JlZ3JvdW5kLWNvbnRhaW5lciB7CiAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCi5wbG90dGFibGUgLmNvbXBvbmVudC1vdmVyZmxvdy1oaWRkZW4gewogIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5wbG90dGFibGUgLmNvbXBvbmVudC1vdmVyZmxvdy12aXNpYmxlIHsKICBvdmVyZmxvdzogdmlzaWJsZTsKfQoKLnBsb3R0YWJsZSAucGxvdC1jYW52YXMtY29udGFpbmVyIHsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEwMCU7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLnBsb3R0YWJsZSAucGxvdC1jYW52YXMgewogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKICAvKioKICAgKiBQbGF5IHdlbGwgd2l0aCBkZWZlcnJlZCByZW5kZXJpbmcuCiAgICovCiAgdHJhbnNmb3JtLW9yaWdpbjogMHB4IDBweCAwcHg7Cn0KCi5wbG90dGFibGUgdGV4dCB7CiAgdGV4dC1yZW5kZXJpbmc6IGdlb21ldHJpY1ByZWNpc2lvbjsKfQoKLnBsb3R0YWJsZSAubGFiZWwgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKfQoKLnBsb3R0YWJsZSAuYmFyLWxhYmVsLXRleHQtYXJlYSB0ZXh0LAoucGxvdHRhYmxlIC5zY2F0dGVyLWxhYmVsLXRleHQtYXJlYSB0ZXh0IHsKICBmb250LXNpemU6IDEycHg7Cn0KCi5wbG90dGFibGUgLmxhYmVsLWFyZWEgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKICBmb250LXNpemU6IDE0cHg7Cn0KCi5wbG90dGFibGUgLmxpZ2h0LWxhYmVsIHRleHQgewogIGZpbGw6IHdoaXRlOwp9CgoucGxvdHRhYmxlIC5kYXJrLWxhYmVsIHRleHQgewogIGZpbGw6ICMzMjMxM0Y7Cn0KCi5wbG90dGFibGUgLm9mZi1iYXItbGFiZWwgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKfQoKLnBsb3R0YWJsZSAuc3RhY2tlZC1iYXItbGFiZWwgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKICBmb250LXN0eWxlOiBub3JtYWw7Cn0KCi5wbG90dGFibGUgLnN0YWNrZWQtYmFyLXBsb3QgLm9mZi1iYXItbGFiZWwgewogIC8qIEhBQ0tIQUNLICMyNzk1OiBjb3JyZWN0IG9mZi1iYXIgbGFiZWwgbG9naWMgdG8gYmUgaW1wbGVtZW50ZWQgb24gU3RhY2tlZEJhciAqLwogIHZpc2liaWxpdHk6IGhpZGRlbiAhaW1wb3J0YW50Owp9CgoucGxvdHRhYmxlIC5heGlzLWxhYmVsIHRleHQgewogIGZvbnQtc2l6ZTogMTBweDsKICBmb250LXdlaWdodDogYm9sZDsKICBsZXR0ZXItc3BhY2luZzogMXB4OwogIGxpbmUtaGVpZ2h0OiBub3JtYWw7CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKfQoKLnBsb3R0YWJsZSAudGl0bGUtbGFiZWwgdGV4dCB7CiAgZm9udC1zaXplOiAyMHB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgoucGxvdHRhYmxlIC5heGlzIGxpbmUuYmFzZWxpbmUgewogIHN0cm9rZTogI0NDQzsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoKLnBsb3R0YWJsZSAuYXhpcyBsaW5lLnRpY2stbWFyayB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgoucGxvdHRhYmxlIC5heGlzIHRleHQgewogIGZpbGw6ICMzMjMxM0Y7CiAgZm9udC1zaXplOiAxMnB4OwogIGZvbnQtd2VpZ2h0OiAyMDA7CiAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKfQoKLnBsb3R0YWJsZSAuYXhpcyAuYW5ub3RhdGlvbi1jaXJjbGUgewogIGZpbGw6IHdoaXRlOwogIHN0cm9rZS13aWR0aDogMXB4OwogIHN0cm9rZTogI0NDQzsKfQoKLnBsb3R0YWJsZSAuYXhpcyAuYW5ub3RhdGlvbi1saW5lIHsKICBzdHJva2U6ICNDQ0M7CiAgc3Ryb2tlLXdpZHRoOiAxcHg7Cn0KCi5wbG90dGFibGUgLmF4aXMgLmFubm90YXRpb24tcmVjdCB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4OwogIGZpbGw6IHdoaXRlOwp9CgoucGxvdHRhYmxlIC5iYXItcGxvdCAuYmFzZWxpbmUgewogIHN0cm9rZTogIzk5OTsKfQoKLnBsb3R0YWJsZSAuZ3JpZGxpbmVzIGxpbmUgewogIHN0cm9rZTogIzNDM0MzQzsgLyogaGFja2hhY2s6IGdyaWRsaW5lcyBzaG91bGQgYmUgc29saWQ7IHNlZSAjODIwICovCiAgb3BhY2l0eTogMC4yNTsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoKLnBsb3R0YWJsZSAuc2VsZWN0aW9uLWJveC1sYXllciAuc2VsZWN0aW9uLWFyZWEgewogIGZpbGw6IGJsYWNrOwogIGZpbGwtb3BhY2l0eTogMC4wMzsKICBzdHJva2U6ICNDQ0M7Cn0KLyogRHJhZ0JveExheWVyICovCi5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLngtcmVzaXphYmxlIC5kcmFnLWVkZ2UtbHIgewogIGN1cnNvcjogZXctcmVzaXplOwp9Ci5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLnktcmVzaXphYmxlIC5kcmFnLWVkZ2UtdGIgewogIGN1cnNvcjogbnMtcmVzaXplOwp9CgoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci54LXJlc2l6YWJsZS55LXJlc2l6YWJsZSAuZHJhZy1jb3JuZXItdGwgewogIGN1cnNvcjogbndzZS1yZXNpemU7Cn0KLnBsb3R0YWJsZSAuZHJhZy1ib3gtbGF5ZXIueC1yZXNpemFibGUueS1yZXNpemFibGUgLmRyYWctY29ybmVyLXRyIHsKICBjdXJzb3I6IG5lc3ctcmVzaXplOwp9Ci5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLngtcmVzaXphYmxlLnktcmVzaXphYmxlIC5kcmFnLWNvcm5lci1ibCB7CiAgY3Vyc29yOiBuZXN3LXJlc2l6ZTsKfQoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci54LXJlc2l6YWJsZS55LXJlc2l6YWJsZSAuZHJhZy1jb3JuZXItYnIgewogIGN1cnNvcjogbndzZS1yZXNpemU7Cn0KCi5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLm1vdmFibGUgLnNlbGVjdGlvbi1hcmVhIHsKICBjdXJzb3I6IG1vdmU7IC8qIElFIGZhbGxiYWNrICovCiAgY3Vyc29yOiAtbW96LWdyYWI7CiAgY3Vyc29yOiAtd2Via2l0LWdyYWI7CiAgY3Vyc29yOiBncmFiOwp9CgoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci5tb3ZhYmxlIC5zZWxlY3Rpb24tYXJlYTphY3RpdmUgewogIGN1cnNvcjogLW1vei1ncmFiYmluZzsKICBjdXJzb3I6IC13ZWJraXQtZ3JhYmJpbmc7CiAgY3Vyc29yOiBncmFiYmluZzsKfQovKiAvRHJhZ0JveExheWVyICovCgoucGxvdHRhYmxlIC5ndWlkZS1saW5lLWxheWVyIGxpbmUuZ3VpZGUtbGluZSB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgoucGxvdHRhYmxlIC5kcmFnLWxpbmUtbGF5ZXIuZW5hYmxlZC52ZXJ0aWNhbCBsaW5lLmRyYWctZWRnZSB7CiAgY3Vyc29yOiBldy1yZXNpemU7Cn0KCi5wbG90dGFibGUgLmRyYWctbGluZS1sYXllci5lbmFibGVkLmhvcml6b250YWwgbGluZS5kcmFnLWVkZ2UgewogIGN1cnNvcjogbnMtcmVzaXplOwp9CgoucGxvdHRhYmxlIC5sZWdlbmQgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKICBmb250LXNpemU6IDEycHg7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKfQoKLnBsb3R0YWJsZSAuaW50ZXJwb2xhdGVkLWNvbG9yLWxlZ2VuZCByZWN0LnN3YXRjaC1ib3VuZGluZy1ib3ggewogIGZpbGw6IG5vbmU7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4OwogIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgoucGxvdHRhYmxlIC53YXRlcmZhbGwtcGxvdCBsaW5lLmNvbm5lY3RvciB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgoucGxvdHRhYmxlIC5waWUtcGxvdCAuYXJjLm91dGxpbmUgewogIHN0cm9rZS1saW5lam9pbjogcm91bmQ7Cn0KCmB9KTt2YXIgbzA7KGZ1bmN0aW9uKGUpe2UuR1JPVVA9IkciLGUuRElWPSJESVYiLGUuU1ZHPSJTVkciLGUuVEVYVD0iVEVYVCJ9KShvMHx8KG8wPXt9KSk7dmFyIGVzdD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnVuaXF1ZUlkPTAsdGhpcy5yb290PXR9ZXhwb3J0QXNTdHJpbmcoKXtsZXQgdD10aGlzLmNvbnZlcnQodGhpcy5yb290KTtpZighdClyZXR1cm4iIjtsZXQgcj10aGlzLmNyZWF0ZVJvb3RTdmcoKTtyZXR1cm4gci5hcHBlbmRDaGlsZCh0KSxyLm91dGVySFRNTH1jcmVhdGVVbmlxdWVJZCh0KXtyZXR1cm5gJHt0fV8ke3RoaXMudW5pcXVlSWQrK31gfWdldFNpemUoKXtyZXR1cm4gdGhpcy5yb290LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfWNyZWF0ZVJvb3RTdmcoKXtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdmciKSxyPXRoaXMuZ2V0U2l6ZSgpO3JldHVybiB0LnNldEF0dHJpYnV0ZU5TKCJzdmciLCJ2aWV3Qm94IixgMCAwICR7ci53aWR0aH0gJHtyLmhlaWdodH1gKSx0LnNldEF0dHJpYnV0ZSgieG1sbnMiLCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIpLHR9Y3JlYXRlQ29udmVydGVkTm9kZSh0KXtsZXQgcj10Lm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk7aWYodC5ub2RlVHlwZT09Tm9kZS5FTEVNRU5UX05PREUmJihyPT1vMC5ESVZ8fHI9PW8wLlNWRykpe2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobzAuR1JPVVApLGk9d2luZG93LmdldENvbXB1dGVkU3R5bGUodCksbz1wYXJzZUludChpLmxlZnQsMTApLGE9cGFyc2VJbnQoaS50b3AsMTApO2lmKG98fGEpe2xldCBzPXRoaXMuY3JlYXRlVW5pcXVlSWQoImNsaXAiKTtuLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7b30sICR7YX0pYCksbi5zZXRBdHRyaWJ1dGUoImNsaXAtcGF0aCIsYHVybCgjJHtzfSlgKTtsZXQgbD1wYXJzZUludChpLndpZHRoLDEwKSxjPXBhcnNlSW50KGkuaGVpZ2h0LDEwKSx1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInJlY3QiKTt1LnNldEF0dHJpYnV0ZSgid2lkdGgiLFN0cmluZyhsKSksdS5zZXRBdHRyaWJ1dGUoImhlaWdodCIsU3RyaW5nKGMpKTtsZXQgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoInN2ZyIsImNsaXBQYXRoIik7aC5pZD1zLGguYXBwZW5kQ2hpbGQodSksbi5hcHBlbmRDaGlsZChoKX1yZXR1cm4gbn1lbHNlIHJldHVybiB0LmNsb25lTm9kZSgpfWNvbnZlcnQodCl7bGV0IHI9dGhpcy5jcmVhdGVDb252ZXJ0ZWROb2RlKHQpO3JldHVybiBBcnJheS5mcm9tKHQuY2hpbGROb2RlcykubWFwKGk9PnRoaXMuY29udmVydChpKSkuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goaT0+e3IuYXBwZW5kQ2hpbGQoaSl9KSxyLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk9PW8wLkdST1VQJiYhci5oYXNDaGlsZE5vZGVzKCl8fHRoaXMuc2hvdWxkT21pdE5vZGUodCk/bnVsbDp0aGlzLnN0cmlwQ2xhc3ModGhpcy50cmFuc2ZlclN0eWxlKHQscikpfXN0cmlwQ2xhc3ModCl7cmV0dXJuIHQubm9kZVR5cGU9PU5vZGUuRUxFTUVOVF9OT0RFJiZ0LnJlbW92ZUF0dHJpYnV0ZSgiY2xhc3MiKSx0fXRyYW5zZmVyU3R5bGUodCxyKXtpZihyLm5vZGVUeXBlIT1Ob2RlLkVMRU1FTlRfTk9ERSlyZXR1cm4gcjtsZXQgbj1yLGk9ci5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpLG89d2luZG93LmdldENvbXB1dGVkU3R5bGUodCk7cmV0dXJuIGk9PW8wLlRFWFQmJk9iamVjdC5hc3NpZ24obi5zdHlsZSx7Zm9udEZhbWlseTpvLmZvbnRGYW1pbHksZm9udFNpemU6by5mb250U2l6ZSxmb250V2VpZ2h0Om8uZm9udFdlaWdodH0pLGkhPW8wLkdST1VQJiYobi5zZXRBdHRyaWJ1dGUoImZpbGwiLG8uZmlsbCksbi5zZXRBdHRyaWJ1dGUoInN0cm9rZSIsby5zdHJva2UpLG4uc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLG8uc3Ryb2tlV2lkdGgpKSxvLm9wYWNpdHkhPSIxIiYmbi5zZXRBdHRyaWJ1dGUoIm9wYWNpdHkiLG8ub3BhY2l0eSkscn1zaG91bGRPbWl0Tm9kZSh0KXtyZXR1cm4hMX19LExCPWNsYXNzIGV4dGVuZHMgZXN0e3Nob3VsZE9taXROb2RlKHQpe3JldHVybiB0Lm5vZGVUeXBlPT1Ob2RlLkVMRU1FTlRfTk9ERT90LmNsYXNzTGlzdC5jb250YWlucygic2NhdHRlci1wbG90Iik6ITF9fTt5cyh7bW9kdWxlTmFtZToidnotcGFuLXpvb20tc3R5bGUiLHN0eWxlQ29udGVudDpgCiAgICAuaGVscCB7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIGFuaW1hdGlvbi1kZWxheTogMXM7CiAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMXM7CiAgICAgIGFuaW1hdGlvbi1uYW1lOiBmYWRlLW91dDsKICAgICAgYmFja2dyb3VuZDogcmdiYSgzMCwgMzAsIDMwLCAwLjYpOwogICAgICBib3R0b206IDA7CiAgICAgIGNvbG9yOiAjZmZmOwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgbGVmdDogMDsKICAgICAgb3BhY2l0eTogMTsKICAgICAgcGFkZGluZzogMjBweDsKICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgcmlnaHQ6IDA7CiAgICAgIHRvcDogMDsKICAgIH0KCiAgICAuaGVscCA+IHNwYW4gewogICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgfQoKICAgIEBrZXlmcmFtZXMgZmFkZS1vdXQgewogICAgICAwJSB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgMTAwJSB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQogICAgfQogIGB9KTt2YXIgT3FlPVd1KHIwKSxqS3Q9ZT0+aXNOYU4oZSk/Ik5hTiI6T3FlKGUpLGlzdD1be3RpdGxlOiJOYW1lIixldmFsdWF0ZTplPT5lLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lfSx7dGl0bGU6IlNtb290aGVkIixldmFsdWF0ZShlLHQpe2xldHtzbW9vdGhpbmdFbmFibGVkOnJ9PXQ7cmV0dXJuIGpLdChyP2UuZGF0dW0uc21vb3RoZWQ6ZS5kYXR1bS5zY2FsYXIpfX0se3RpdGxlOiJWYWx1ZSIsZXZhbHVhdGU6ZT0+akt0KGUuZGF0dW0uc2NhbGFyKX0se3RpdGxlOiJTdGVwIixldmFsdWF0ZTplPT5iNChlLmRhdHVtLnN0ZXApfSx7dGl0bGU6IlRpbWUiLGV2YWx1YXRlOmU9PnlCKGUuZGF0dW0ud2FsbF90aW1lKX0se3RpdGxlOiJSZWxhdGl2ZSIsZXZhbHVhdGU6ZT0+dkIobjAoZS5kYXR1bSwtMSxlLmRhdGFzZXQpKX1dLFpyPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvbG9yU2NhbGU9bmV3IG5zdC5TY2FsZXMuQ29sb3IoKS5yYW5nZShqYi5zbGljZSgwKSksdGhpcy5zbW9vdGhpbmdFbmFibGVkPSExLHRoaXMuc21vb3RoaW5nV2VpZ2h0PS42LHRoaXMueFR5cGU9bnVsbCx0aGlzLnhDb21wb25lbnRzQ3JlYXRpb25NZXRob2Q9bnVsbCx0aGlzLnlWYWx1ZUFjY2Vzc29yPXQ9PnQuc2NhbGFyLHRoaXMudG9vbHRpcENvbHVtbnM9aXN0LHRoaXMueVNjYWxlVHlwZT1CZi5MSU5FQVIsdGhpcy5pZ25vcmVZT3V0bGllcnM9ITEsdGhpcy50b29sdGlwU29ydGluZ01ldGhvZD0iZGVmYXVsdCIsdGhpcy50b29sdGlwUG9zaXRpb249V3YuQk9UVE9NLHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZT1bXSx0aGlzLl9zZXJpZXNEYXRhQ2FjaGU9e30sdGhpcy5fc2VyaWVzTWV0YWRhdGFDYWNoZT17fSx0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQ9bnVsbH1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5zY29wZVN1YnRyZWUodGhpcy4kLmNoYXJ0ZGl2LCEwKX1hdHRhY2hlZCgpe2xldCB0PXtjYXB0dXJlOiEwLHBhc3NpdmU6ITB9O3RoaXMuX2xpc3Rlbih0aGlzLCJtb3VzZWRvd24iLHRoaXMuX29uTW91c2VEb3duLmJpbmQodGhpcyksdCksdGhpcy5fbGlzdGVuKHRoaXMsIm1vdXNldXAiLHRoaXMuX29uTW91c2VVcC5iaW5kKHRoaXMpLHQpLHRoaXMuX2xpc3Rlbih3aW5kb3csImtleWRvd24iLHRoaXMuX29uS2V5RG93bi5iaW5kKHRoaXMpLHQpLHRoaXMuX2xpc3Rlbih3aW5kb3csImtleXVwIix0aGlzLl9vbktleVVwLmJpbmQodGhpcyksdCl9ZGV0YWNoZWQoKXt0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQhPT1udWxsJiYodGhpcy5jYW5jZWxBc3luYyh0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQpLHRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZD1udWxsKSx0aGlzLl9jaGFydCYmKHRoaXMuX2NoYXJ0LmRlc3Ryb3koKSx0aGlzLl9jaGFydD12b2lkIDApLHRoaXMuX2xpc3RlbmVycyYmKHRoaXMuX2xpc3RlbmVycy5mb3JFYWNoKCh7bm9kZTp0LGV2ZW50TmFtZTpyLGZ1bmM6bixvcHRpb246aX0pPT57dC5yZW1vdmVFdmVudExpc3RlbmVyKHIsbixpKX0pLHRoaXMuX2xpc3RlbmVycy5jbGVhcigpKX1fbGlzdGVuKHQscixuLGk9e30pe3RoaXMuX2xpc3RlbmVyc3x8KHRoaXMuX2xpc3RlbmVycz1uZXcgU2V0KSx0aGlzLl9saXN0ZW5lcnMuYWRkKHtub2RlOnQsZXZlbnROYW1lOnIsZnVuYzpuLG9wdGlvbjppfSksdC5hZGRFdmVudExpc3RlbmVyKHIsbixpKX1fb25LZXlEb3duKHQpe3RoaXMudG9nZ2xlQ2xhc3MoInBhbmtleSIsRmYuaXNQYW5LZXkodCkpfV9vbktleVVwKHQpe3RoaXMudG9nZ2xlQ2xhc3MoInBhbmtleSIsRmYuaXNQYW5LZXkodCkpfV9vbk1vdXNlRG93bih0KXt0aGlzLnRvZ2dsZUNsYXNzKCJtb3VzZWRvd24iLCEwKX1fb25Nb3VzZVVwKHQpe3RoaXMudG9nZ2xlQ2xhc3MoIm1vdXNlZG93biIsITEpfWlzRGF0YUZpdFRvRG9tYWluKCl7cmV0dXJuIHRoaXMuX2NoYXJ0P3RoaXMuX2NoYXJ0LmlzRGF0YUZpdFRvRG9tYWluKCk6ITB9c2V0VmlzaWJsZVNlcmllcyh0KXtYS3QuaXNFcXVhbCh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUsdCl8fCh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGU9dCl9c2V0U2VyaWVzRGF0YSh0LHIpe3RoaXMuX3Nlcmllc0RhdGFDYWNoZVt0XT1yLHRoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5zZXRTZXJpZXNEYXRhKHQscil9c2V0U2VyaWVzTWV0YWRhdGEodCxyKXt0aGlzLl9zZXJpZXNNZXRhZGF0YUNhY2hlW3RdPXIsdGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LnNldFNlcmllc01ldGFkYXRhKHQscil9Y29tbWl0Q2hhbmdlcygpeyF0aGlzLl9jaGFydHx8dGhpcy5fY2hhcnQuY29tbWl0Q2hhbmdlcygpfXJlc2V0RG9tYWluKCl7dGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LnJlc2V0RG9tYWluKCl9cmVkcmF3KCl7dGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LnJlZHJhdygpfV9tYWtlQ2hhcnQoKXt0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQhPT1udWxsJiYodGhpcy5jYW5jZWxBc3luYyh0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQpLHRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZD1udWxsKSx0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQ9dGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZD1udWxsO2xldCB0PXRoaXMueENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZDtpZighdGhpcy54VHlwZSYmIXQ/dD1YYXQ6dGhpcy54VHlwZSYmKHQ9KCk9PnhCKHRoaXMueFR5cGUpKSwhKCF0fHwhdGhpcy55VmFsdWVBY2Nlc3Nvcnx8IXRoaXMudG9vbHRpcENvbHVtbnMpKXt2YXIgcj1uZXcgRFModCx0aGlzLnlWYWx1ZUFjY2Vzc29yLHRoaXMueVNjYWxlVHlwZSx0aGlzLmNvbG9yU2NhbGUsdGhpcy4kLnRvb2x0aXAsdGhpcy50b29sdGlwQ29sdW1ucyx0aGlzLmZpbGxBcmVhLHRoaXMuZGVmYXVsdFhSYW5nZSx0aGlzLmRlZmF1bHRZUmFuZ2UsdGhpcy5zeW1ib2xGdW5jdGlvbix0aGlzLnhBeGlzRm9ybWF0dGVyKSxuPUh0KHRoaXMuJC5jaGFydGRpdik7ci5yZW5kZXJUbyhuKSx0aGlzLl9jaGFydCYmdGhpcy5fY2hhcnQuZGVzdHJveSgpLHRoaXMuX2NoYXJ0PXIsdGhpcy5fY2hhcnQub25BbmNob3IoKCk9PnRoaXMuZmlyZSgiY2hhcnQtYXR0YWNoZWQiKSl9fSwzNTApfV9yZWxvYWRGcm9tQ2FjaGUoKXshdGhpcy5fY2hhcnR8fCh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUuZm9yRWFjaCh0PT57dGhpcy5fY2hhcnQuc2V0U2VyaWVzRGF0YSh0LHRoaXMuX3Nlcmllc0RhdGFDYWNoZVt0XXx8W10pfSksdGhpcy5fdmlzaWJsZVNlcmllc0NhY2hlLmZpbHRlcih0PT50aGlzLl9zZXJpZXNNZXRhZGF0YUNhY2hlW3RdKS5mb3JFYWNoKHQ9Pnt0aGlzLl9jaGFydC5zZXRTZXJpZXNNZXRhZGF0YSh0LHRoaXMuX3Nlcmllc01ldGFkYXRhQ2FjaGVbdF0pfSksdGhpcy5fY2hhcnQuc2V0VmlzaWJsZVNlcmllcyh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUpLHRoaXMuX2NoYXJ0LmNvbW1pdENoYW5nZXMoKSl9X3Ntb290aGluZ0NoYW5nZWQoKXshdGhpcy5fY2hhcnR8fCh0aGlzLnNtb290aGluZ0VuYWJsZWQ/dGhpcy5fY2hhcnQuc21vb3RoaW5nVXBkYXRlKHRoaXMuc21vb3RoaW5nV2VpZ2h0KTp0aGlzLl9jaGFydC5zbW9vdGhpbmdEaXNhYmxlKCkpfV9vdXRsaWVyc0NoYW5nZWQoKXshdGhpcy5fY2hhcnR8fHRoaXMuX2NoYXJ0Lmlnbm9yZVlPdXRsaWVycyh0aGlzLmlnbm9yZVlPdXRsaWVycyl9X2NvbG9yU2NhbGVDaGFuZ2VkKCl7IXRoaXMuX2NoYXJ0fHwodGhpcy5fY2hhcnQuc2V0Q29sb3JTY2FsZSh0aGlzLmNvbG9yU2NhbGUpLHRoaXMuX2NoYXJ0LnJlZHJhdygpKX1fdG9vbHRpcENvbHVtbnNDaGFuZ2VkKCl7IXRoaXMuX2NoYXJ0fHx0aGlzLl9jaGFydC5zZXRUb29sdGlwQ29sdW1ucyh0aGlzLnRvb2x0aXBDb2x1bW5zKX1fdG9vbHRpcFNvcnRpbmdNZXRob2RDaGFuZ2VkKCl7IXRoaXMuX2NoYXJ0fHx0aGlzLl9jaGFydC5zZXRUb29sdGlwU29ydGluZ01ldGhvZCh0aGlzLnRvb2x0aXBTb3J0aW5nTWV0aG9kKX1nZXRFeHBvcnRlcigpe3JldHVybiBuZXcgTEIodGhpcy4kLmNoYXJ0ZGl2KX19O1pyLnRlbXBsYXRlPVFgCiAgICA8ZGl2IGlkPSJjaGFydGRpdiI+PC9kaXY+CiAgICA8dnotY2hhcnQtdG9vbHRpcAogICAgICBpZD0idG9vbHRpcCIKICAgICAgcG9zaXRpb249IltbdG9vbHRpcFBvc2l0aW9uXV0iCiAgICAgIGNvbnRlbnQtY29tcG9uZW50LW5hbWU9InZ6LWxpbmUtY2hhcnQtdG9vbHRpcCIKICAgID48L3Z6LWNoYXJ0LXRvb2x0aXA+CiAgICA8c3R5bGUgaW5jbHVkZT0icGxvdHRhYmxlLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlIGluY2x1ZGU9InZ6LXBhbi16b29tLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQogICAgICBkaXYgewogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgIH0KCiAgICAgICNjaGFydGRpdiAubWFpbiB7CiAgICAgICAgY29udGFpbjogc3RyaWN0OwogICAgICAgIGN1cnNvcjogY3Jvc3NoYWlyOwogICAgICB9CgogICAgICA6aG9zdCgucGFua2V5KSAjY2hhcnRkaXYgOm5vdCguZHJhZy16b29taW5nKSAubWFpbiB7CiAgICAgICAgY3Vyc29yOiAtd2Via2l0LWdyYWI7CiAgICAgICAgY3Vyc29yOiBncmFiOwogICAgICB9CgogICAgICA6aG9zdCgubW91c2Vkb3duKSAjY2hhcnRkaXYgLnBhbm5pbmcgLm1haW4gewogICAgICAgIGN1cnNvcjogLXdlYmtpdC1ncmFiYmluZzsKICAgICAgICBjdXJzb3I6IGdyYWJiaW5nOwogICAgICB9CgogICAgICAjY2hhcnRkaXYgewogICAgICAgIGNvbnRhaW46IHN0cmljdDsKICAgICAgfQoKICAgICAgI2NoYXJ0ZGl2IGxpbmUuZ3VpZGUtbGluZSB7CiAgICAgICAgc3Ryb2tlOiAjOTk5OwogICAgICAgIHN0cm9rZS13aWR0aDogMS41cHg7CiAgICAgIH0KICAgICAgI2NoYXJ0ZGl2OmhvdmVyIC5tYWluIHsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CgogICAgICAuZ2hvc3QgewogICAgICAgIG9wYWNpdHk6IDAuMjsKICAgICAgICBzdHJva2Utd2lkdGg6IDFweDsKICAgICAgfQoKICAgICAgLnBsb3R0YWJsZSAuYXhpcyB0ZXh0IHsKICAgICAgICBmaWxsOiBjdXJyZW50Q29sb3I7CiAgICAgIH0KCiAgICAgIC5wbG90dGFibGUgLmdyaWRsaW5lcyBsaW5lIHsKICAgICAgICBzdHJva2U6IHZhcigtLXRiLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLG5zdC5TY2FsZXMuQ29sb3IpXSxaci5wcm90b3R5cGUsImNvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxaci5wcm90b3R5cGUsInN5bWJvbEZ1bmN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFpyLnByb3RvdHlwZSwic21vb3RoaW5nRW5hYmxlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxaci5wcm90b3R5cGUsInNtb290aGluZ1dlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxaci5wcm90b3R5cGUsInhUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFpyLnByb3RvdHlwZSwieENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLFpyLnByb3RvdHlwZSwieEF4aXNGb3JtYXR0ZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxaci5wcm90b3R5cGUsInlWYWx1ZUFjY2Vzc29yIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxaci5wcm90b3R5cGUsInRvb2x0aXBDb2x1bW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFpyLnByb3RvdHlwZSwiZmlsbEFyZWEiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLFpyLnByb3RvdHlwZSwiZGVmYXVsdFhSYW5nZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sWnIucHJvdG90eXBlLCJkZWZhdWx0WVJhbmdlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFpyLnByb3RvdHlwZSwieVNjYWxlVHlwZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFpyLnByb3RvdHlwZSwiaWdub3JlWU91dGxpZXJzIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFpyLnByb3RvdHlwZSwidG9vbHRpcFNvcnRpbmdNZXRob2QiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sWnIucHJvdG90eXBlLCJ0b29sdGlwUG9zaXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sWnIucHJvdG90eXBlLCJfY2hhcnQiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLFpyLnByb3RvdHlwZSwiX3Zpc2libGVTZXJpZXNDYWNoZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxaci5wcm90b3R5cGUsIl9zZXJpZXNEYXRhQ2FjaGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sWnIucHJvdG90eXBlLCJfc2VyaWVzTWV0YWRhdGFDYWNoZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxaci5wcm90b3R5cGUsIl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQiLHZvaWQgMCk7RShbQnQoInhDb21wb25lbnRzQ3JlYXRpb25NZXRob2QiLCJ4VHlwZSIsInlWYWx1ZUFjY2Vzc29yIiwieVNjYWxlVHlwZSIsImlzQXR0YWNoZWQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX21ha2VDaGFydCIsbnVsbCk7RShbQnQoIl9jaGFydCIsIl92aXNpYmxlU2VyaWVzQ2FjaGUiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX3JlbG9hZEZyb21DYWNoZSIsbnVsbCk7RShbQnQoInNtb290aGluZ0VuYWJsZWQiLCJzbW9vdGhpbmdXZWlnaHQiLCJfY2hhcnQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX3Ntb290aGluZ0NoYW5nZWQiLG51bGwpO0UoW0J0KCJpZ25vcmVZT3V0bGllcnMiLCJfY2hhcnQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX291dGxpZXJzQ2hhbmdlZCIsbnVsbCk7RShbQnQoImNvbG9yU2NhbGUiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX2NvbG9yU2NhbGVDaGFuZ2VkIixudWxsKTtFKFtCdCgidG9vbHRpcENvbHVtbnMiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX3Rvb2x0aXBDb2x1bW5zQ2hhbmdlZCIsbnVsbCk7RShbQnQoInRvb2x0aXBTb3J0aW5nTWV0aG9kIiwiX2NoYXJ0IiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxaci5wcm90b3R5cGUsIl90b29sdGlwU29ydGluZ01ldGhvZENoYW5nZWQiLG51bGwpO1pyPUUoW3l0KCJ2ei1saW5lLWNoYXJ0MiIpXSxacik7dmFyIHJzdD1jbGFzcyBleHRlbmRzIG10e307cnN0LnRlbXBsYXRlPVFgCiAgICA8ZGl2IGNsYXNzPSJjb250ZW50Ij4KICAgICAgPHRhYmxlPgogICAgICAgIDx0aGVhZD48L3RoZWFkPgogICAgICAgIDx0Ym9keT48L3Rib2R5PgogICAgICA8L3RhYmxlPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgLmNvbnRlbnQgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC44KTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgdGFibGUgewogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBsaW5lLWhlaWdodDogMS40ZW07CiAgICAgICAgbWFyZ2luLXRvcDogMTBweDsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgIH0KCiAgICAgIHRoZWFkIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KCiAgICAgIHRib2R5IHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDIxcHg7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQoKICAgICAgdGQgewogICAgICAgIHBhZGRpbmc6IDAgNXB4OwogICAgICB9CgogICAgICAuc3dhdGNoIHsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxOHB4OwogICAgICAgIHdpZHRoOiAxOHB4OwogICAgICB9CgogICAgICAuY2xvc2VzdCAuc3dhdGNoIHsKICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAycHggI2ZmZjsKICAgICAgfQoKICAgICAgdGggewogICAgICAgIHBhZGRpbmc6IDAgNXB4OwogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KCiAgICAgIC5kaXN0YW50IHRkOm5vdCguc3dhdGNoKSB7CiAgICAgICAgb3BhY2l0eTogMC44OwogICAgICB9CgogICAgICAuZ2hvc3QgewogICAgICAgIG9wYWNpdHk6IDAuMjsKICAgICAgICBzdHJva2Utd2lkdGg6IDFweDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO3JzdD1FKFt5dCgidnotbGluZS1jaGFydC10b29sdGlwIildLHJzdCk7dmFyIG9zdD1bXSx6cWU9MCxGcWU9JEt0LnRocm90dGxlKGZ1bmN0aW9uIGUoKXtpZihvc3QubGVuZ3RoPT0wKXJldHVybjtsZXQgdD1vc3Quc2hpZnQoKTt0JiZ0LmFjdGl2ZSYmKHQucmVkcmF3KCksdC5fbWF5YmVSZW5kZXJlZEluQmFkU3RhdGU9ITEpLHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh6cWUpLHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSl9LDEwMCksVm49Y2xhc3MgZXh0ZW5kcyBrUyhHdChtdCkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9yZWRyYXdSYWY9bnVsbCx0aGlzLmFjdGl2ZT0hMSx0aGlzLmxvZ1NjYWxlQWN0aXZlPSExLHRoaXMuY29sb3JTY2FsZT17c2NhbGU6Zm59LHRoaXMuX3Jlc2V0RG9tYWluT25OZXh0TG9hZD0hMCx0aGlzLl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZT0hMX1vbkxvYWRGaW5pc2goKXt0aGlzLmNvbW1pdENoYW5nZXMoKSx0aGlzLmRhdGFUb0xvYWQubGVuZ3RoPjAmJnRoaXMuX3Jlc2V0RG9tYWluT25OZXh0TG9hZCYmKHRoaXMuX3Jlc2V0RG9tYWluT25OZXh0TG9hZD0hMSx0aGlzLmdldENoYXJ0KCkucmVzZXREb21haW4oKSksdGhpcy5yZWRyYXcoKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fcmVkcmF3UmFmIT09bnVsbCYmY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmVkcmF3UmFmKX1leHBvcnRBc1N2Z1N0cmluZygpe3JldHVybiB0aGlzLmdldENoYXJ0KCkuZ2V0RXhwb3J0ZXIoKS5leHBvcnRBc1N0cmluZygpfWdldENoYXJ0KCl7cmV0dXJuIHRoaXMuJC5jaGFydH1yZXNldERvbWFpbigpe3RoaXMuZ2V0Q2hhcnQoKS5yZXNldERvbWFpbigpfXNldFNlcmllc0RhdGEodCxyKXt0aGlzLmdldENoYXJ0KCkuc2V0U2VyaWVzRGF0YSh0LHIpfXNldFNlcmllc01ldGFkYXRhKHQscil7dGhpcy5nZXRDaGFydCgpLnNldFNlcmllc01ldGFkYXRhKHQscil9Y29tbWl0Q2hhbmdlcygpe3RoaXMuZ2V0Q2hhcnQoKS5jb21taXRDaGFuZ2VzKCl9cmVkcmF3KCl7dGhpcy5fcmVkcmF3UmFmIT09bnVsbCYmY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmVkcmF3UmFmKSx0aGlzLl9yZWRyYXdSYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuYWN0aXZlP3RoaXMuZ2V0Q2hhcnQoKS5yZWRyYXcoKTp0aGlzLl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZT0hMH0pfV9sb2FkS2V5Q2hhbmdlZCgpe3RoaXMucmVzZXQoKSx0aGlzLl9yZXNldERvbWFpbk9uTmV4dExvYWQ9ITB9X2RhdGFTZXJpZXNDaGFuZ2VkKCl7dGhpcy5nZXRDaGFydCgpLnNldFZpc2libGVTZXJpZXModGhpcy5kYXRhU2VyaWVzKX1fbG9nU2NhbGVDaGFuZ2VkKHQpe2xldCByPXRoaXMuZ2V0Q2hhcnQoKTtyLnlTY2FsZVR5cGU9dD9CZi5MT0c6QmYuTElORUFSLHRoaXMucmVkcmF3KCl9X2ZpeEJhZFN0YXRlV2hlbkFjdGl2ZSgpe3RoaXMuYWN0aXZlJiZ0aGlzLl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZSYmKG9zdC5wdXNoKHRoaXMpLEZxZSgpKX1fb25DaGFydEF0dGFjaGVkKCl7dGhpcy5hY3RpdmV8fCh0aGlzLl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZT0hMCl9fTtWbi50ZW1wbGF0ZT1RYAogICAgPGRpdiBpZD0iY2hhcnQtYW5kLXNwaW5uZXItY29udGFpbmVyIj4KICAgICAgPHZ6LWxpbmUtY2hhcnQyCiAgICAgICAgaWQ9ImNoYXJ0IgogICAgICAgIGRhdGEtbG9hZGluZyQ9IltbZGF0YUxvYWRpbmddXSIKICAgICAgICBkYXRhLWxvYWRlZC1vbmNlJD0iW1tkYXRhTG9hZGVkQXRMZWFzdE9uY2VdXSIKICAgICAgICBjb2xvci1zY2FsZT0iW1tjb2xvclNjYWxlXV0iCiAgICAgICAgZGVmYXVsdC14LXJhbmdlPSJbW2RlZmF1bHRYUmFuZ2VdXSIKICAgICAgICBkZWZhdWx0LXktcmFuZ2U9IltbZGVmYXVsdFlSYW5nZV1dIgogICAgICAgIGZpbGwtYXJlYT0iW1tmaWxsQXJlYV1dIgogICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW2lnbm9yZVlPdXRsaWVyc11dIgogICAgICAgIG9uLWNoYXJ0LWF0dGFjaGVkPSJfb25DaGFydEF0dGFjaGVkIgogICAgICAgIHNtb290aGluZy1lbmFibGVkPSJbW3Ntb290aGluZ0VuYWJsZWRdXSIKICAgICAgICBzbW9vdGhpbmctd2VpZ2h0PSJbW3Ntb290aGluZ1dlaWdodF1dIgogICAgICAgIHN5bWJvbC1mdW5jdGlvbj0iW1tzeW1ib2xGdW5jdGlvbl1dIgogICAgICAgIHRvb2x0aXAtY29sdW1ucz0iW1t0b29sdGlwQ29sdW1uc11dIgogICAgICAgIHRvb2x0aXAtcG9zaXRpb249IltbdG9vbHRpcFBvc2l0aW9uXV0iCiAgICAgICAgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgIHgtY29tcG9uZW50cy1jcmVhdGlvbi1tZXRob2Q9IltbeENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZF1dIgogICAgICAgIHgtdHlwZT0iW1t4VHlwZV1dIgogICAgICAgIHktdmFsdWUtYWNjZXNzb3I9IltbeVZhbHVlQWNjZXNzb3JdXSIKICAgICAgPjwvdnotbGluZS1jaGFydDI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tkYXRhTG9hZGluZ11dIj4KICAgICAgICA8ZGl2IGlkPSJsb2FkaW5nLXNwaW5uZXItY29udGFpbmVyIj4KICAgICAgICAgIDxwYXBlci1zcGlubmVyLWxpdGUgYWN0aXZlPSIiPjwvcGFwZXItc3Bpbm5lci1saXRlPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CgogICAgICA6aG9zdChbX21heWJlLXJlbmRlcmVkLWluLWJhZC1zdGF0ZV0pIHZ6LWxpbmUtY2hhcnQgewogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgfQoKICAgICAgI2NoYXJ0LWFuZC1zcGlubmVyLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAjbG9hZGluZy1zcGlubmVyLWNvbnRhaW5lciB7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIHRvcDogMDsKICAgICAgfQoKICAgICAgdnotbGluZS1jaGFydDIgewogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgfQoKICAgICAgdnotbGluZS1jaGFydDJbZGF0YS1sb2FkaW5nXSB7CiAgICAgICAgb3BhY2l0eTogMC4zOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfZml4QmFkU3RhdGVXaGVuQWN0aXZlIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sVm4ucHJvdG90eXBlLCJhY3RpdmUiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLFZuLnByb3RvdHlwZSwiZGF0YVNlcmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLFZuLnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfbG9nU2NhbGVDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sVm4ucHJvdG90eXBlLCJsb2dTY2FsZUFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxWbi5wcm90b3R5cGUsInhDb21wb25lbnRzQ3JlYXRpb25NZXRob2QiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sVm4ucHJvdG90eXBlLCJ4VHlwZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLFZuLnByb3RvdHlwZSwieVZhbHVlQWNjZXNzb3IiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sVm4ucHJvdG90eXBlLCJmaWxsQXJlYSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFZuLnByb3RvdHlwZSwic21vb3RoaW5nRW5hYmxlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxWbi5wcm90b3R5cGUsInNtb290aGluZ1dlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sVm4ucHJvdG90eXBlLCJ0b29sdGlwQ29sdW1ucyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxWbi5wcm90b3R5cGUsInRvb2x0aXBTb3J0aW5nTWV0aG9kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFZuLnByb3RvdHlwZSwidG9vbHRpcFBvc2l0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sVm4ucHJvdG90eXBlLCJpZ25vcmVZT3V0bGllcnMiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLFZuLnByb3RvdHlwZSwiZGVmYXVsdFhSYW5nZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sVm4ucHJvdG90eXBlLCJkZWZhdWx0WVJhbmdlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sVm4ucHJvdG90eXBlLCJzeW1ib2xGdW5jdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxWbi5wcm90b3R5cGUsImNvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxWbi5wcm90b3R5cGUsIl9yZXNldERvbWFpbk9uTmV4dExvYWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sVm4ucHJvdG90eXBlLCJfbWF5YmVSZW5kZXJlZEluQmFkU3RhdGUiLHZvaWQgMCk7RShbQnQoImxvYWRLZXkiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFZuLnByb3RvdHlwZSwiX2xvYWRLZXlDaGFuZ2VkIixudWxsKTtFKFtCdCgiZGF0YVNlcmllcy4qIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxWbi5wcm90b3R5cGUsIl9kYXRhU2VyaWVzQ2hhbmdlZCIsbnVsbCk7Vm49RShbeXQoInRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIiKV0sVm4pO3lzKHttb2R1bGVOYW1lOiJ0Zi1jdXN0b20tc2NhbGFyLWNhcmQtc3R5bGUiLHN0eWxlQ29udGVudDpgCiAgICA6aG9zdCB7CiAgICAgIG1hcmdpbjogNXB4IDEwcHg7CiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgd2lkdGg6IDMzMHB4OwogICAgICB2ZXJ0aWNhbC1hbGlnbjogdGV4dC10b3A7CiAgICB9CgogICAgOmhvc3QoW19leHBhbmRlZF0pIHsKICAgICAgd2lkdGg6IDEwMCU7CiAgICB9CgogICAgOmhvc3QoW19leHBhbmRlZF0pICN0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciB7CiAgICAgIGhlaWdodDogNDAwcHg7CiAgICB9CgogICAgaDEgewogICAgICBmb250LXNpemU6IDE5cHg7CiAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICB9CgogICAgI3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXItY29udGFpbmVyIHsKICAgICAgaGVpZ2h0OiAyMDBweDsKICAgICAgd2lkdGg6IDEwMCU7CiAgICB9CgogICAgI2J1dHRvbnMgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgfQoKICAgIHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgY29sb3I6ICMyMTk2ZjM7CiAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7CiAgICAgIHdpZHRoOiAzMnB4OwogICAgICBoZWlnaHQ6IDMycHg7CiAgICAgIHBhZGRpbmc6IDRweDsKICAgIH0KCiAgICBwYXBlci1pY29uLWJ1dHRvbltzZWxlY3RlZF0gewogICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgfQoKICAgIC5kb3dubG9hZC1saW5rcyB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGhlaWdodDogMzJweDsKICAgIH0KCiAgICAuZG93bmxvYWQtbGlua3MgYSB7CiAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgYWxpZ24tc2VsZjogY2VudGVyOwogICAgICBtYXJnaW46IDJweDsKICAgIH0KCiAgICAuZG93bmxvYWQtbGlua3MgcGFwZXItZHJvcGRvd24tbWVudSB7CiAgICAgIHdpZHRoOiAxMDBweDsKICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWw6IHsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgIH0KICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgIH0KICAgIH0KICBgfSk7dmFyIE9TPWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGksbyl7dGhpcy5ydW49dCx0aGlzLnRhZz1yLHRoaXMubmFtZT1uLHRoaXMuc2NhbGFyRGF0YT1pLHRoaXMuc3ltYm9sPW99Z2V0TmFtZSgpe3JldHVybiB0aGlzLm5hbWV9c2V0RGF0YSh0KXt0aGlzLnNjYWxhckRhdGE9dH1nZXREYXRhKCl7cmV0dXJuIHRoaXMuc2NhbGFyRGF0YX1nZXRSdW4oKXtyZXR1cm4gdGhpcy5ydW59Z2V0VGFnKCl7cmV0dXJuIHRoaXMudGFnfWdldFN5bWJvbCgpe3JldHVybiB0aGlzLnN5bWJvbH19O2Z1bmN0aW9uIGtCKGUsdCl7cmV0dXJuYCR7dH0gKCR7ZX0pYH12YXIgWXY9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5ydW5CYXNlZENvbG9yU2NhbGU9dH1zY2FsZSh0KXtyZXR1cm4gdGhpcy5ydW5CYXNlZENvbG9yU2NhbGUuc2NhbGUodGhpcy5wYXJzZVJ1bk5hbWUodCkpfXBhcnNlUnVuTmFtZSh0KXtsZXQgcj10Lm1hdGNoKC9cKCguKilcKSQvKTtyZXR1cm4gcj9yWzFdOiIifX07dmFyIEpyPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmFjdGl2ZT0hMCx0aGlzLl9jb2xvclNjYWxlPW5ldyBZdih7c2NhbGU6Zm59KSx0aGlzLl9uYW1lVG9EYXRhU2VyaWVzPXt9LHRoaXMuX2V4cGFuZGVkPSExLHRoaXMuX3JlcXVlc3REYXRhPSh0LHIsbik9PntsZXQgbz1fZSgpLnBsdWdpblJvdXRlKCJjdXN0b21fc2NhbGFycyIsIi9zY2FsYXJzIik7UHJvbWlzZS5hbGwodC5tYXAoYT0+e2xldCBzPWEsbD10aGlzLl90YWdGaWx0ZXIsYz1NaShvLHt0YWc6bCxydW46c30pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYykudGhlbih1PT52b2lkIHIoe2l0ZW06YSxkYXRhOnV9KSl9KSkuZmluYWxseSgoKT0+dm9pZCBuKCkpfSx0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleD17fSx0aGlzLl9tYXRjaGVzTGlzdE9wZW5lZD0hMSx0aGlzLl9maWxsQXJlYT17bG93ZXJBY2Nlc3Nvcjp0PT50Lmxvd2VyLGhpZ2hlckFjY2Vzc29yOnQ9PnQudXBwZXJ9LHRoaXMuX3Rvb2x0aXBDb2x1bW5zPSgoKT0+e2xldCB0PVd1KHIwKSxyPW49PmlzTmFOKG4pPyJOYU4iOnQobik7cmV0dXJuW3t0aXRsZToiTmFtZSIsZXZhbHVhdGU6bj0+bi5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZX0se3RpdGxlOiJWYWx1ZSIsZXZhbHVhdGU6bj0+cihuLmRhdHVtLnNjYWxhcil9LHt0aXRsZToiTG93ZXIgTWFyZ2luIixldmFsdWF0ZTpuPT5yKG4uZGF0dW0ubG93ZXIpfSx7dGl0bGU6IlVwcGVyIE1hcmdpbiIsZXZhbHVhdGU6bj0+cihuLmRhdHVtLnVwcGVyKX0se3RpdGxlOiJTdGVwIixldmFsdWF0ZTpuPT5iNChuLmRhdHVtLnN0ZXApfSx7dGl0bGU6IlRpbWUiLGV2YWx1YXRlOm49PnlCKG4uZGF0dW0ud2FsbF90aW1lKX0se3RpdGxlOiJSZWxhdGl2ZSIsZXZhbHVhdGU6bj0+dkIobjAobi5kYXR1bSwtMSxuLmRhdGFzZXQpKX1dfSkoKSx0aGlzLl9taXNzaW5nVGFncz1bXSx0aGlzLl9taXNzaW5nVGFnc0NvbGxhcHNpYmxlT3BlbmVkPSExfXJlbG9hZCgpe3RoaXMuJC5sb2FkZXIucmVsb2FkKCl9cmVkcmF3KCl7dGhpcy4kLmxvYWRlci5yZWRyYXcoKX1fdG9nZ2xlRXhwYW5kZWQodCl7dGhpcy5zZXQoIl9leHBhbmRlZCIsIXRoaXMuX2V4cGFuZGVkKSx0aGlzLnJlZHJhdygpfV90b2dnbGVMb2dTY2FsZSgpe3RoaXMuc2V0KCJfbG9nU2NhbGVBY3RpdmUiLCF0aGlzLl9sb2dTY2FsZUFjdGl2ZSl9X3Jlc2V0RG9tYWluKCl7bGV0IHQ9dGhpcy4kLmxvYWRlcjt0JiZ0LnJlc2V0RG9tYWluKCl9X2NzdlVybCh0LHIpe2lmKCFyKXJldHVybiIiO2xldCBuPXRoaXMuX2Rvd25sb2FkRGF0YVVybCh0LHIpO3JldHVybiBNaShuLHtmb3JtYXQ6ImNzdiJ9KX1fanNvblVybCh0LHIpe2lmKCFyKXJldHVybiIiO2xldCBuPXRoaXMuX2Rvd25sb2FkRGF0YVVybCh0LHIpO3JldHVybiBNaShuLHtmb3JtYXQ6Impzb24ifSl9X2Rvd25sb2FkRGF0YVVybCh0LHIpe2xldCBuPXRbcl0saT1uZXcgVVJMU2VhcmNoUGFyYW1zKHt0YWc6bi5nZXRUYWcoKSxydW46bi5nZXRSdW4oKX0pO3JldHVybiBfZSgpLnBsdWdpblJvdXRlRm9yU3JjKCJjdXN0b21fc2NhbGFycyIsIi9kb3dubG9hZF9kYXRhIixpKX1fY3JlYXRlUHJvY2Vzc0RhdGFGdW5jdGlvbih0KXtyZXR1cm4ocixuLGkpPT57aWYoIWkucmVnZXhfdmFsaWQpe3RoaXMuc2V0KCJfdGFnRmlsdGVySW52YWxpZCIsITApO3JldHVybn1sZXQgbz1Zby5jbG9uZSh0aGlzLl9uYW1lVG9EYXRhU2VyaWVzKSxhPVtdO1lvLmZvckVhY2godCxsPT57bGV0IGM9ITEsdT1pLnRhZ190b19ldmVudHNbbC52YWx1ZV0saD1pLnRhZ190b19ldmVudHNbbC5sb3dlcl0sZj1pLnRhZ190b19ldmVudHNbbC51cHBlcl07aWYoWW8uaXNVbmRlZmluZWQodSkmJihhLnB1c2gobC52YWx1ZSksYz0hMCksWW8uaXNVbmRlZmluZWQoaCkmJihhLnB1c2gobC5sb3dlciksYz0hMCksWW8uaXNVbmRlZmluZWQoZikmJihhLnB1c2gobC51cHBlciksYz0hMCksYylyZXR1cm47bGV0IHA9Yj0+YlsxXSxkPXRoaXMuX2ZpbmRTdGVwTWlzbWF0Y2gobCx1Lm1hcChwKSxoLm1hcChwKSxmLm1hcChwKSk7aWYoZCl7dGhpcy5zZXQoIl9zdGVwc01pc21hdGNoIixkKTtyZXR1cm59bGV0IGc9Yj0+YlsyXSxfPXUubWFwKChiLFMpPT4oe3dhbGxfdGltZTpuZXcgRGF0ZShiWzBdKjFlMyksc3RlcDpwKGIpLHNjYWxhcjpnKGIpLGxvd2VyOmcoaFtTXSksdXBwZXI6ZyhmW1NdKX0pKSx5PWtCKG4sbC52YWx1ZSkseD1vW3ldO2lmKHgpeC5zZXREYXRhKF8pO2Vsc2V7bGV0IGI9dGhpcy5fY3JlYXRlTmV3RGF0YVNlcmllcyhuLGwudmFsdWUseSxfKTtvW3ldPWJ9fSksdGhpcy5zZXQoIl9uYW1lVG9EYXRhU2VyaWVzIixvKTtsZXQgcz1Zby5maW5kSW5kZXgodGhpcy5fbWlzc2luZ1RhZ3MsbD0+bC5ydW49PT1uKTtpZihhLmxlbmd0aCYmYS5sZW5ndGghPTMpe2xldCBsPXtydW46bix0YWdzOmF9O3M+PTA/dGhpcy5zcGxpY2UoIl9taXNzaW5nVGFncyIscywxLGwpOnRoaXMucHVzaCgiX21pc3NpbmdUYWdzIixsKX1lbHNlIHM+PTAmJnRoaXMuc3BsaWNlKCJfbWlzc2luZ1RhZ3MiLHMsMSl9fV9maW5kU3RlcE1pc21hdGNoKHQscixuLGkpe3JldHVybiBZby5pc0VxdWFsKG4scikmJllvLmlzRXF1YWwoaSxyKT9udWxsOntzZXJpZXNPYmplY3Q6dCx2YWx1ZVN0ZXBzOnIsbG93ZXJTdGVwczpuLHVwcGVyU3RlcHM6aX19X2NyZWF0ZU5ld0RhdGFTZXJpZXModCxyLG4saSl7dGhpcy5fcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXhbdF18PTA7bGV0IG89UlNbdGhpcy5fcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXhbdF1dLGE9bmV3IE9TKHQscixuLGksbykscz1SUy5sZW5ndGg7cmV0dXJuIHRoaXMuX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4W3RdPSh0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFt0XSsxKSVzLGF9X3VwZGF0ZUNoYXJ0KCl7dmFyIHQ9dGhpcy5fbmFtZVRvRGF0YVNlcmllcztZby5mb3JPd24odCxyPT57dGhpcy4kLmxvYWRlci5zZXRTZXJpZXNEYXRhKHIuZ2V0TmFtZSgpLHIuZ2V0RGF0YSgpKX0pLHRoaXMuJC5sb2FkZXIuY29tbWl0Q2hhbmdlcygpfWdldCBfc2VyaWVzTmFtZXMoKXtsZXQgdD1uZXcgU2V0KHRoaXMucnVucyk7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuX25hbWVUb0RhdGFTZXJpZXMpLmZpbHRlcigoW3Isbl0pPT50LmhhcyhuLnJ1bikpLm1hcCgoW3JdKT0+cil9X2RldGVybWluZUNvbG9yKHQscil7cmV0dXJuIHQuc2NhbGUocil9X3JlZnJlc2hEYXRhU2VyaWVzKCl7dmFyIHQ9dGhpcy5fdGFnRmlsdGVyO3RoaXMuc2V0KCJfbmFtZVRvRGF0YVNlcmllcyIse30pfV9jcmVhdGVTeW1ib2xGdW5jdGlvbigpe3JldHVybiB0PT50aGlzLl9uYW1lVG9EYXRhU2VyaWVzW3RdLmdldFN5bWJvbCgpLm1ldGhvZCgpfV9kZXRlcm1pbmVTeW1ib2wodCxyKXtyZXR1cm4gdFtyXS5nZXRTeW1ib2woKS5jaGFyYWN0ZXJ9Z2V0IF90YWdGaWx0ZXIoKXt2YXIgdD10aGlzLm1hcmdpbkNoYXJ0U2VyaWVzO3JldHVybiBZby5mbGF0dGVuKHQubWFwKGk9PltpLnZhbHVlLGkubG93ZXIsaS51cHBlcl0pKS5tYXAoaT0+IigiK3RoaXMuX2VzY2FwZVJlZ2V4Q2hhcmFjdGVycyhpKSsiKSIpLmpvaW4oInwiKX1fZXNjYXBlUmVnZXhDaGFyYWN0ZXJzKHQpe3JldHVybiB0LnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXVxcXS9nLCJcXCQmIil9X2dldFRvZ2dsZUNvbGxhcHNpYmxlSWNvbih0KXtyZXR1cm4gdD8iZXhwYW5kLWxlc3MiOiJleHBhbmQtbW9yZSJ9X3RvZ2dsZU1hdGNoZXNPcGVuKCl7dGhpcy5zZXQoIl9tYXRjaGVzTGlzdE9wZW5lZCIsIXRoaXMuX21hdGNoZXNMaXN0T3BlbmVkKX1nZXQgX3RpdGxlRGlzcGxheVN0cmluZygpe3ZhciB0PXRoaXMudGl0bGU7cmV0dXJuIHR8fCJ1bnRpdGxlZCJ9X3NlcGFyYXRlV2l0aENvbW1hcyh0KXtyZXR1cm4gdC5qb2luKCIsICIpfV90b2dnbGVNaXNzaW5nVGFnc0NvbGxhcHNpYmxlT3Blbigpe3RoaXMuc2V0KCJfbWlzc2luZ1RhZ3NDb2xsYXBzaWJsZU9wZW5lZCIsIXRoaXMuX21pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuZWQpfV9tYXRjaExpc3RFbnRyeUNvbG9yVXBkYXRlZCgpe3ZhciByO2xldCB0PXRoaXMuJCQoIiNtYXRjaC1saXN0LXJlcGVhdCIpOyF0fHwocj10aGlzLnJvb3QpPT1udWxsfHxyLnF1ZXJ5U2VsZWN0b3JBbGwoIi5tYXRjaC1saXN0LWVudHJ5IikuZm9yRWFjaChuPT57bGV0IGk9dC5pdGVtRm9yRWxlbWVudChuKTtuLnN0eWxlLmNvbG9yPXRoaXMuX2RldGVybWluZUNvbG9yKHRoaXMuX2NvbG9yU2NhbGUsaSl9KX19O0pyLnRlbXBsYXRlPVFgCiAgICA8dGYtY2FyZC1oZWFkaW5nIGRpc3BsYXktbmFtZT0iW1tfdGl0bGVEaXNwbGF5U3RyaW5nXV0iPjwvdGYtY2FyZC1oZWFkaW5nPgogICAgPGRpdiBpZD0idGYtbGluZS1jaGFydC1kYXRhLWxvYWRlci1jb250YWluZXIiPgogICAgICA8dGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcgogICAgICAgIGlkPSJsb2FkZXIiCiAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgIGNvbG9yLXNjYWxlPSJbW19jb2xvclNjYWxlXV0iCiAgICAgICAgZGF0YS1zZXJpZXM9IltbX3Nlcmllc05hbWVzXV0iCiAgICAgICAgZmlsbC1hcmVhPSJbW19maWxsQXJlYV1dIgogICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW2lnbm9yZVlPdXRsaWVyc11dIgogICAgICAgIGxvYWQta2V5PSJbW190YWdGaWx0ZXJdXSIKICAgICAgICBkYXRhLXRvLWxvYWQ9IltbcnVuc11dIgogICAgICAgIHJlcXVlc3QtZGF0YT0iW1tfcmVxdWVzdERhdGFdXSIKICAgICAgICBsb2ctc2NhbGUtYWN0aXZlPSJbW19sb2dTY2FsZUFjdGl2ZV1dIgogICAgICAgIGxvYWQtZGF0YS1jYWxsYmFjaz0iW1tfY3JlYXRlUHJvY2Vzc0RhdGFGdW5jdGlvbihtYXJnaW5DaGFydFNlcmllcyldXSIKICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICBzeW1ib2wtZnVuY3Rpb249IltbX2NyZWF0ZVN5bWJvbEZ1bmN0aW9uKCldXSIKICAgICAgICB0b29sdGlwLWNvbHVtbnM9IltbX3Rvb2x0aXBDb2x1bW5zXV0iCiAgICAgICAgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgIHgtdHlwZT0iW1t4VHlwZV1dIgogICAgICA+CiAgICAgIDwvdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcj4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0iYnV0dG9ucyI+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfZXhwYW5kZWRdXSIKICAgICAgICBpY29uPSJmdWxsc2NyZWVuIgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUV4cGFuZGVkIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgc2VsZWN0ZWQkPSJbW19sb2dTY2FsZUFjdGl2ZV1dIgogICAgICAgIGljb249ImxpbmUtd2VpZ2h0IgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUxvZ1NjYWxlIgogICAgICAgIHRpdGxlPSJUb2dnbGUgeS1heGlzIGxvZyBzY2FsZSIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIGljb249InNldHRpbmdzLW92ZXJzY2FuIgogICAgICAgIG9uLXRhcD0iX3Jlc2V0RG9tYWluIgogICAgICAgIHRpdGxlPSJGaXQgZG9tYWluIHRvIGRhdGEiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8c3BhbiBzdHlsZT0iZmxleC1ncm93OiAxIj48L3NwYW4+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG93RG93bmxvYWRMaW5rc11dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJkb3dubG9hZC1saW5rcyI+CiAgICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgICAgICBuby1sYWJlbC1mbG9hdD0idHJ1ZSIKICAgICAgICAgICAgbGFiZWw9InNlcmllcyB0byBkb3dubG9hZCIKICAgICAgICAgICAgc2VsZWN0ZWQtaXRlbS1sYWJlbD0ie3tfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkfX0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDxwYXBlci1saXN0Ym94IGNsYXNzPSJkcm9wZG93bi1jb250ZW50IiBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgICAgaXRlbXM9IltbX3Nlcmllc05hbWVzXV0iCiAgICAgICAgICAgICAgICBhcz0iZGF0YVNlcmllc05hbWUiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gbm8tbGFiZWwtZmxvYXQ9InRydWUiCiAgICAgICAgICAgICAgICAgID5bW2RhdGFTZXJpZXNOYW1lXV08L3BhcGVyLWl0ZW0KICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICA8YQogICAgICAgICAgICBkb3dubG9hZD0iW1tfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkXV0uY3N2IgogICAgICAgICAgICBocmVmPSJbW19jc3ZVcmwoX25hbWVUb0RhdGFTZXJpZXMsIF9kYXRhU2VyaWVzTmFtZVRvRG93bmxvYWQpXV0iCiAgICAgICAgICAgID5DU1Y8L2EKICAgICAgICAgID4KICAgICAgICAgIDxhCiAgICAgICAgICAgIGRvd25sb2FkPSJbW19kYXRhU2VyaWVzTmFtZVRvRG93bmxvYWRdXS5qc29uIgogICAgICAgICAgICBocmVmPSJbW19qc29uVXJsKF9uYW1lVG9EYXRhU2VyaWVzLCBfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkKV1dIgogICAgICAgICAgICA+SlNPTjwvYQogICAgICAgICAgPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CgogICAgPCEtLSBoZXJlIC0tPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19taXNzaW5nVGFncy5sZW5ndGhdXSI+CiAgICAgIDxkaXYgY2xhc3M9ImNvbGxhcHNpYmxlLWxpc3QtdGl0bGUiPgogICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgICAgaWNvbj0iW1tfZ2V0VG9nZ2xlQ29sbGFwc2libGVJY29uKF9taXNzaW5nVGFnc0NvbGxhcHNpYmxlT3BlbmVkKV1dIgogICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVNaXNzaW5nVGFnc0NvbGxhcHNpYmxlT3BlbiIKICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtY29sbGFwc2libGUtYnV0dG9uIgogICAgICAgID4KICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgIDxzcGFuIGNsYXNzPSJjb2xsYXBzaWJsZS10aXRsZS10ZXh0Ij4KICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iaWNvbnM6ZXJyb3IiPjwvaXJvbi1pY29uPiBNaXNzaW5nIFRhZ3MKICAgICAgICA8L3NwYW4+CiAgICAgIDwvZGl2PgogICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9IltbX21pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuZWRdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZXJyb3ItY29udGVudCI+CiAgICAgICAgICA8aXJvbi1pY29uIGNsYXNzPSJlcnJvci1pY29uIiBpY29uPSJpY29uczplcnJvciI+PC9pcm9uLWljb24+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19taXNzaW5nVGFnc11dIiBhcz0ibWlzc2luZ0VudHJ5Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWlzc2luZy10YWdzLWZvci1ydW4tY29udGFpbmVyIj4KICAgICAgICAgICAgICBSdW4gIltbbWlzc2luZ0VudHJ5LnJ1bl1dIiBsYWNrcyBkYXRhIGZvciB0YWdzCiAgICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgICAgICBpdGVtcz0iW1ttaXNzaW5nRW50cnkudGFnc11dIgogICAgICAgICAgICAgICAgICBhcz0idGFnIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICA8bGk+W1t0YWddXTwvbGk+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9pcm9uLWNvbGxhcHNlPgogICAgPC90ZW1wbGF0ZT4KCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3RhZ0ZpbHRlckludmFsaWRdXSI+CiAgICAgIDxkaXYgY2xhc3M9ImVycm9yLWNvbnRlbnQiPgogICAgICAgIDxpcm9uLWljb24gY2xhc3M9ImVycm9yLWljb24iIGljb249Imljb25zOmVycm9yIj48L2lyb24taWNvbj4KICAgICAgICBUaGlzIHJlZ3VsYXIgZXhwcmVzaW9uIGlzIGludmFsaWQ6PGJyIC8+CiAgICAgICAgPHNwYW4gY2xhc3M9ImludmFsaWQtcmVnZXgiPltbX3RhZ0ZpbHRlcl1dPC9zcGFuPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zdGVwc01pc21hdGNoXV0iPgogICAgICA8ZGl2IGNsYXNzPSJlcnJvci1jb250ZW50Ij4KICAgICAgICA8aXJvbi1pY29uIGNsYXNzPSJlcnJvci1pY29uIiBpY29uPSJpY29uczplcnJvciI+PC9pcm9uLWljb24+CiAgICAgICAgVGhlIHN0ZXBzIGZvciB2YWx1ZSwgbG93ZXIsIGFuZCB1cHBlciB0YWdzIGRvIG5vdCBtYXRjaDoKICAgICAgICA8dWw+CiAgICAgICAgICA8bGk+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YWctbmFtZSI+W1tfc3RlcHNNaXNtYXRjaC5zZXJpZXNPYmplY3QudmFsdWVdXTwvc3Bhbj46CiAgICAgICAgICAgIFtbX3NlcGFyYXRlV2l0aENvbW1hcyhfc3RlcHNNaXNtYXRjaC52YWx1ZVN0ZXBzKV1dCiAgICAgICAgICA8L2xpPgogICAgICAgICAgPGxpPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGFnLW5hbWUiPltbX3N0ZXBzTWlzbWF0Y2guc2VyaWVzT2JqZWN0Lmxvd2VyXV08L3NwYW4+OgogICAgICAgICAgICBbW19zZXBhcmF0ZVdpdGhDb21tYXMoX3N0ZXBzTWlzbWF0Y2gubG93ZXJTdGVwcyldXQogICAgICAgICAgPC9saT4KICAgICAgICAgIDxsaT4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhZy1uYW1lIj5bW19zdGVwc01pc21hdGNoLnNlcmllc09iamVjdC51cHBlcl1dPC9zcGFuPjoKICAgICAgICAgICAgW1tfc2VwYXJhdGVXaXRoQ29tbWFzKF9zdGVwc01pc21hdGNoLnVwcGVyU3RlcHMpXV0KICAgICAgICAgIDwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgoKICAgIDxkaXYgaWQ9Im1hdGNoZXMtY29udGFpbmVyIj4KICAgICAgPGRpdiBjbGFzcz0iY29sbGFwc2libGUtbGlzdC10aXRsZSI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zZXJpZXNOYW1lcy5sZW5ndGhdXSI+CiAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgaWNvbj0iW1tfZ2V0VG9nZ2xlQ29sbGFwc2libGVJY29uKF9tYXRjaGVzTGlzdE9wZW5lZCldXSIKICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVNYXRjaGVzT3BlbiIKICAgICAgICAgICAgY2xhc3M9InRvZ2dsZS1tYXRjaGVzLWJ1dHRvbiIKICAgICAgICAgID4KICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgPHNwYW4gY2xhc3M9ImNvbGxhcHNpYmxlLXRpdGxlLXRleHQiPgogICAgICAgICAgTWF0Y2hlcyAoW1tfc2VyaWVzTmFtZXMubGVuZ3RoXV0pCiAgICAgICAgPC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zZXJpZXNOYW1lcy5sZW5ndGhdXSI+CiAgICAgICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJbW19tYXRjaGVzTGlzdE9wZW5lZF1dIj4KICAgICAgICAgIDxkaXYgaWQ9Im1hdGNoZXMtbGlzdCI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZQogICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgIGl0ZW1zPSJbW19zZXJpZXNOYW1lc11dIgogICAgICAgICAgICAgIGFzPSJzZXJpZXNOYW1lIgogICAgICAgICAgICAgIGlkPSJtYXRjaC1saXN0LXJlcGVhdCIKICAgICAgICAgICAgICBvbi1kb20tY2hhbmdlPSJfbWF0Y2hMaXN0RW50cnlDb2xvclVwZGF0ZWQiCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXRjaC1saXN0LWVudHJ5Ij4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtYXRjaC1lbnRyeS1zeW1ib2wiPgogICAgICAgICAgICAgICAgICBbW19kZXRlcm1pbmVTeW1ib2woX25hbWVUb0RhdGFTZXJpZXMsIHNlcmllc05hbWUpXV0KICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgIFtbc2VyaWVzTmFtZV1dCiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGUgaW5jbHVkZT0idGYtY3VzdG9tLXNjYWxhci1jYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAuZXJyb3ItY29udGVudCB7CiAgICAgICAgYmFja2dyb3VuZDogI2YwMDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgbWFyZ2luOiAxMHB4IDAgMCAwOwogICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5lcnJvci1pY29uIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmaWxsOiAjZmZmOwogICAgICAgIG1hcmdpbjogMCBhdXRvIDVweCBhdXRvOwogICAgICB9CgogICAgICAuaW52YWxpZC1yZWdleCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIH0KCiAgICAgIC5lcnJvci1jb250ZW50IHVsIHsKICAgICAgICBtYXJnaW46IDFweCAwIDAgMDsKICAgICAgICBwYWRkaW5nOiAwIDAgMCAxOXB4OwogICAgICB9CgogICAgICAudGFnLW5hbWUgewogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CgogICAgICAuY29sbGFwc2libGUtbGlzdC10aXRsZSB7CiAgICAgICAgbWFyZ2luOiAxMHB4IDAgNXB4IDA7CiAgICAgIH0KCiAgICAgIC5jb2xsYXBzaWJsZS10aXRsZS10ZXh0IHsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICB9CgogICAgICAjbWF0Y2hlcy1saXN0IHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAubWF0Y2gtbGlzdC1lbnRyeSB7CiAgICAgICAgbWFyZ2luOiAwIDAgNXB4IDA7CiAgICAgIH0KCiAgICAgIC5tYXRjaC1lbnRyeS1zeW1ib2wgewogICAgICAgIGZvbnQtZmFtaWx5OiBhcmlhbCwgc2Fucy1zZXJpZjsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5taXNzaW5nLXRhZ3MtZm9yLXJ1bi1jb250YWluZXIgewogICAgICAgIG1hcmdpbjogOHB4IDAgMCAwOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLEpyLnByb3RvdHlwZSwicnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxKci5wcm90b3R5cGUsInhUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSnIucHJvdG90eXBlLCJhY3RpdmUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSnIucHJvdG90eXBlLCJ0aXRsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sSnIucHJvdG90eXBlLCJtYXJnaW5DaGFydFNlcmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEpyLnByb3RvdHlwZSwiaWdub3JlWU91dGxpZXJzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEFlKV0sSnIucHJvdG90eXBlLCJyZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEpyLnByb3RvdHlwZSwic2hvd0Rvd25sb2FkTGlua3MiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSnIucHJvdG90eXBlLCJ0YWdNZXRhZGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxKci5wcm90b3R5cGUsInRvb2x0aXBTb3J0aW5nTWV0aG9kIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEpyLnByb3RvdHlwZSwiX2NvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxKci5wcm90b3R5cGUsIl90YWdGaWx0ZXJJbnZhbGlkIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEpyLnByb3RvdHlwZSwiX25hbWVUb0RhdGFTZXJpZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSnIucHJvdG90eXBlLCJfZXhwYW5kZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxKci5wcm90b3R5cGUsIl9sb2dTY2FsZUFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLEpyLnByb3RvdHlwZSwiX3JlcXVlc3REYXRhIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEpyLnByb3RvdHlwZSwiX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSnIucHJvdG90eXBlLCJfbWF0Y2hlc0xpc3RPcGVuZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSnIucHJvdG90eXBlLCJfZmlsbEFyZWEiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLEpyLnByb3RvdHlwZSwiX3Rvb2x0aXBDb2x1bW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxKci5wcm90b3R5cGUsIl9taXNzaW5nVGFncyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEpyLnByb3RvdHlwZSwiX21pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSnIucHJvdG90eXBlLCJfc3RlcHNNaXNtYXRjaCIsdm9pZCAwKTtFKFtCdCgiX25hbWVUb0RhdGFTZXJpZXMiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEpyLnByb3RvdHlwZSwiX3VwZGF0ZUNoYXJ0IixudWxsKTtFKFtSdCgiX25hbWVUb0RhdGFTZXJpZXMiLCJydW5zIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sSnIucHJvdG90eXBlLCJfc2VyaWVzTmFtZXMiLG51bGwpO0UoW0J0KCJfdGFnRmlsdGVyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxKci5wcm90b3R5cGUsIl9yZWZyZXNoRGF0YVNlcmllcyIsbnVsbCk7RShbUnQoIm1hcmdpbkNoYXJ0U2VyaWVzIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sSnIucHJvdG90eXBlLCJfdGFnRmlsdGVyIixudWxsKTtFKFtSdCgidGl0bGUiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxKci5wcm90b3R5cGUsIl90aXRsZURpc3BsYXlTdHJpbmciLG51bGwpO0pyPUUoW3l0KCJ0Zi1jdXN0b20tc2NhbGFyLW1hcmdpbi1jaGFydC1jYXJkIildLEpyKTt2YXIgYTA9RWUoT2UoKSwxKTt2YXIgUkI9e307WnMoUkIse0Jhc2VTdG9yZTooKT0+d3AsQ2FuY2VsbGVyOigpPT5hbixFbnZpcm9ubWVudFN0b3JlOigpPT5WOSxFeHBlcmltZW50c1N0b3JlOigpPT5yUixIdHRwTWV0aG9kVHlwZTooKT0+UG0sSW52YWxpZFJlcXVlc3RPcHRpb25zRXJyb3I6KCk9PlZ4LExpc3RlbktleTooKT0+SDksUmVxdWVzdENhbmNlbGxhdGlvbkVycm9yOigpPT5jOSxSZXF1ZXN0TWFuYWdlcjooKT0+QWUsUmVxdWVzdE5ldHdvcmtFcnJvcjooKT0+dUUsUmVxdWVzdE9wdGlvbnM6KCk9PlV4LFJ1bnNTdG9yZTooKT0+VTksVFlQRVM6KCk9Pk94ZSxhZGRQYXJhbXM6KCk9Pk1pLGNyZWF0ZVJvdXRlcjooKT0+Umd0LGNyZWF0ZVNlYXJjaFBhcmFtOigpPT5OZ3QsZW52aXJvbm1lbnRTdG9yZTooKT0+aWIsZXhwZXJpbWVudHNTdG9yZTooKT0+blIsZmlsdGVyVGFnczooKT0+RnhlLGdldFJvdXRlcjooKT0+X2UsZ2V0UnVuc05hbWVkOigpPT56eGUsZ2V0VGFnczooKT0+JGkscnVuc1N0b3JlOigpPT5TcH0pO3ZhciBFbj1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5hY3RpdmU9ITAsdGhpcy5fY29sb3JTY2FsZT1uZXcgWXYoe3NjYWxlOmZufSksdGhpcy5fbmFtZVRvRGF0YVNlcmllcz17fSx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9yZXF1ZXN0RGF0YT0odCxyLG4pPT57bGV0IG89X2UoKS5wbHVnaW5Sb3V0ZSgiY3VzdG9tX3NjYWxhcnMiLCIvc2NhbGFycyIpO1Byb21pc2UuYWxsKHQubWFwKGE9PntsZXQgcz1hLGw9dGhpcy5fdGFnRmlsdGVyLGM9TWkobyx7dGFnOmwscnVuOnN9KTtyZXR1cm4gdGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KGMpLnRoZW4odT0+dm9pZCByKHtpdGVtOmEsZGF0YTp1fSkpfSkpLmZpbmFsbHkoKCk9PnZvaWQgbigpKX0sdGhpcy5fcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXg9e30sdGhpcy5fbWF0Y2hlc0xpc3RPcGVuZWQ9ITF9cmVsb2FkKCl7dGhpcy4kLmxvYWRlci5yZWxvYWQoKX1yZWRyYXcoKXt0aGlzLiQubG9hZGVyLnJlZHJhdygpfV90b2dnbGVFeHBhbmRlZCh0KXt0aGlzLnNldCgiX2V4cGFuZGVkIiwhdGhpcy5fZXhwYW5kZWQpLHRoaXMucmVkcmF3KCl9X3RvZ2dsZUxvZ1NjYWxlKCl7dGhpcy5zZXQoIl9sb2dTY2FsZUFjdGl2ZSIsIXRoaXMuX2xvZ1NjYWxlQWN0aXZlKX1fcmVzZXREb21haW4oKXtsZXQgdD10aGlzLiQubG9hZGVyO3QmJnQucmVzZXREb21haW4oKX1fY3N2VXJsKHQscil7aWYoIXIpcmV0dXJuIiI7bGV0IG49dGhpcy5fZG93bmxvYWREYXRhVXJsKHQscik7cmV0dXJuIE1pKG4se2Zvcm1hdDoiY3N2In0pfV9qc29uVXJsKHQscil7aWYoIXIpcmV0dXJuIiI7bGV0IG49dGhpcy5fZG93bmxvYWREYXRhVXJsKHQscik7cmV0dXJuIE1pKG4se2Zvcm1hdDoianNvbiJ9KX1fZG93bmxvYWREYXRhVXJsKHQscil7bGV0IG49dFtyXSxpPW5ldyBVUkxTZWFyY2hQYXJhbXMoe3RhZzpuLmdldFRhZygpLHJ1bjpuLmdldFJ1bigpfSk7cmV0dXJuIF9lKCkucGx1Z2luUm91dGVGb3JTcmMoImN1c3RvbV9zY2FsYXJzIiwiL2Rvd25sb2FkX2RhdGEiLGkpfV9jcmVhdGVQcm9jZXNzRGF0YUZ1bmN0aW9uKCl7cmV0dXJuKHQscixuKT0+e2lmKG4ucmVnZXhfdmFsaWQpe2xldCBpPWEwLmNsb25lKHRoaXMuX25hbWVUb0RhdGFTZXJpZXMpO2EwLmZvck93bihuLnRhZ190b19ldmVudHMsKG8sYSk9PntsZXQgcz1vLm1hcCh1PT4oe3dhbGxfdGltZTpuZXcgRGF0ZSh1WzBdKjFlMyksc3RlcDp1WzFdLHNjYWxhcjp1WzJdfSkpLGw9a0IocixhKSxjPWlbbF07aWYoYyljLnNldERhdGEocyk7ZWxzZXthMC5pc1VuZGVmaW5lZCh0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtyXSkmJih0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtyXT0wKTtsZXQgdT1SU1t0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtyXV0saD1uZXcgT1MocixhLGwscyx1KTtpW2xdPWg7bGV0IGY9UlMubGVuZ3RoO3RoaXMuX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4W3JdPSh0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtyXSsxKSVmfX0pLHRoaXMuc2V0KCJfbmFtZVRvRGF0YVNlcmllcyIsaSl9fX1fdXBkYXRlQ2hhcnQoKXt2YXIgdD10aGlzLl9uYW1lVG9EYXRhU2VyaWVzO09iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKFtyLG5dKT0+e3RoaXMuJC5sb2FkZXIuc2V0U2VyaWVzRGF0YShyLG4uZ2V0RGF0YSgpKX0pLHRoaXMuJC5sb2FkZXIuY29tbWl0Q2hhbmdlcygpfV9jb21wdXRlU2VsZWN0ZWRSdW5zU2V0KHQpe2xldCByPXt9O3JldHVybiBhMC5mb3JFYWNoKHQsbj0+e3Jbbl09MX0pLHJ9Z2V0IF9zZXJpZXNOYW1lcygpe2xldCB0PW5ldyBTZXQodGhpcy5ydW5zKTtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5fbmFtZVRvRGF0YVNlcmllcykuZmlsdGVyKChbcixuXSk9PnQuaGFzKG4ucnVuKSkubWFwKChbcl0pPT5yKX1fZGV0ZXJtaW5lQ29sb3IodCxyKXtyZXR1cm4gdC5zY2FsZShyKX1fcmVmcmVzaERhdGFTZXJpZXMoKXt2YXIgdD10aGlzLl90YWdGaWx0ZXI7dGhpcy5zZXQoIl9uYW1lVG9EYXRhU2VyaWVzIix7fSl9X2NyZWF0ZVN5bWJvbEZ1bmN0aW9uKCl7cmV0dXJuIHQ9PnRoaXMuX25hbWVUb0RhdGFTZXJpZXNbdF0uZ2V0U3ltYm9sKCkubWV0aG9kKCl9X2RldGVybWluZVN5bWJvbCh0LHIpe3JldHVybiB0W3JdLmdldFN5bWJvbCgpLmNoYXJhY3Rlcn1nZXQgX3RhZ0ZpbHRlcigpe3ZhciB0PXRoaXMudGFnUmVnZXhlcztyZXR1cm4gdC5sZW5ndGg9PT0xP3RbMF06dC5tYXAocj0+IigiK3IrIikiKS5qb2luKCJ8Iil9X2dldFRvZ2dsZU1hdGNoZXNJY29uKHQpe3JldHVybiB0PyJleHBhbmQtbGVzcyI6ImV4cGFuZC1tb3JlIn1fdG9nZ2xlTWF0Y2hlc09wZW4oKXt0aGlzLnNldCgiX21hdGNoZXNMaXN0T3BlbmVkIiwhdGhpcy5fbWF0Y2hlc0xpc3RPcGVuZWQpfWdldCBfdGl0bGVEaXNwbGF5U3RyaW5nKCl7dmFyIHQ9dGhpcy50aXRsZTtyZXR1cm4gdHx8InVudGl0bGVkIn1fbWF0Y2hMaXN0RW50cnlDb2xvclVwZGF0ZWQodCl7dmFyIG47bGV0IHI9dGhpcy4kJCgiI21hdGNoLWxpc3QtcmVwZWF0Iik7IXJ8fChuPXRoaXMucm9vdCk9PW51bGx8fG4ucXVlcnlTZWxlY3RvckFsbCgiLm1hdGNoLWxpc3QtZW50cnkiKS5mb3JFYWNoKGk9PntsZXQgbz1yLml0ZW1Gb3JFbGVtZW50KGkpO2kuc3R5bGUuY29sb3I9dGhpcy5fZGV0ZXJtaW5lQ29sb3IodGhpcy5fY29sb3JTY2FsZSxvKX0pfX07RW4udGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcgZGlzcGxheS1uYW1lPSJbW190aXRsZURpc3BsYXlTdHJpbmddXSI+PC90Zi1jYXJkLWhlYWRpbmc+CiAgICA8ZGl2IGlkPSJ0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciI+CiAgICAgIDx0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyCiAgICAgICAgaWQ9ImxvYWRlciIKICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgY29sb3Itc2NhbGU9IltbX2NvbG9yU2NhbGVdXSIKICAgICAgICBkYXRhLXNlcmllcz0iW1tfc2VyaWVzTmFtZXNdXSIKICAgICAgICBpZ25vcmUteS1vdXRsaWVycz0iW1tpZ25vcmVZT3V0bGllcnNdXSIKICAgICAgICBsb2FkLWtleT0iW1tfdGFnRmlsdGVyXV0iCiAgICAgICAgZGF0YS10by1sb2FkPSJbW3J1bnNdXSIKICAgICAgICByZXF1ZXN0LWRhdGE9IltbX3JlcXVlc3REYXRhXV0iCiAgICAgICAgbG9nLXNjYWxlLWFjdGl2ZT0iW1tfbG9nU2NhbGVBY3RpdmVdXSIKICAgICAgICBsb2FkLWRhdGEtY2FsbGJhY2s9IltbX2NyZWF0ZVByb2Nlc3NEYXRhRnVuY3Rpb24oKV1dIgogICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tyZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgIHNtb290aGluZy1lbmFibGVkPSJbW3Ntb290aGluZ0VuYWJsZWRdXSIKICAgICAgICBzbW9vdGhpbmctd2VpZ2h0PSJbW3Ntb290aGluZ1dlaWdodF1dIgogICAgICAgIHN5bWJvbC1mdW5jdGlvbj0iW1tfY3JlYXRlU3ltYm9sRnVuY3Rpb24oKV1dIgogICAgICAgIHRvb2x0aXAtc29ydGluZy1tZXRob2Q9IltbdG9vbHRpcFNvcnRpbmdNZXRob2RdXSIKICAgICAgICB4LXR5cGU9IltbeFR5cGVdXSIKICAgICAgPgogICAgICA8L3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXI+CiAgICA8L2Rpdj4KICAgIDxkaXYgaWQ9ImJ1dHRvbnMiPgogICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICBzZWxlY3RlZCQ9IltbX2V4cGFuZGVkXV0iCiAgICAgICAgaWNvbj0iZnVsbHNjcmVlbiIKICAgICAgICBvbi10YXA9Il90b2dnbGVFeHBhbmRlZCIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfbG9nU2NhbGVBY3RpdmVdXSIKICAgICAgICBpY29uPSJsaW5lLXdlaWdodCIKICAgICAgICBvbi10YXA9Il90b2dnbGVMb2dTY2FsZSIKICAgICAgICB0aXRsZT0iVG9nZ2xlIHktYXhpcyBsb2cgc2NhbGUiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICBpY29uPSJzZXR0aW5ncy1vdmVyc2NhbiIKICAgICAgICBvbi10YXA9Il9yZXNldERvbWFpbiIKICAgICAgICB0aXRsZT0iRml0IGRvbWFpbiB0byBkYXRhIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHNwYW4gc3R5bGU9ImZsZXgtZ3JvdzogMSI+PC9zcGFuPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc2hvd0Rvd25sb2FkTGlua3NdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZG93bmxvYWQtbGlua3MiPgogICAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUKICAgICAgICAgICAgbm8tbGFiZWwtZmxvYXQ9InRydWUiCiAgICAgICAgICAgIGxhYmVsPSJzZXJpZXMgdG8gZG93bmxvYWQiCiAgICAgICAgICAgIHNlbGVjdGVkLWl0ZW0tbGFiZWw9Int7X2RhdGFTZXJpZXNOYW1lVG9Eb3dubG9hZH19IgogICAgICAgICAgPgogICAgICAgICAgICA8cGFwZXItbGlzdGJveCBjbGFzcz0iZHJvcGRvd24tY29udGVudCIgc2xvdD0iZHJvcGRvd24tY29udGVudCI+CiAgICAgICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgICAgICBpcz0iZG9tLXJlcGVhdCIKICAgICAgICAgICAgICAgIGl0ZW1zPSJbW19zZXJpZXNOYW1lc11dIgogICAgICAgICAgICAgICAgYXM9ImRhdGFTZXJpZXNOYW1lIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtIG5vLWxhYmVsLWZsb2F0PSJ0cnVlIgogICAgICAgICAgICAgICAgICA+W1tkYXRhU2VyaWVzTmFtZV1dPC9wYXBlci1pdGVtCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICAgICAgPGEKICAgICAgICAgICAgZG93bmxvYWQ9IltbX2RhdGFTZXJpZXNOYW1lVG9Eb3dubG9hZF1dLmNzdiIKICAgICAgICAgICAgaHJlZj0iW1tfY3N2VXJsKF9uYW1lVG9EYXRhU2VyaWVzLCBfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkKV1dIgogICAgICAgICAgICA+Q1NWPC9hCiAgICAgICAgICA+CiAgICAgICAgICA8YQogICAgICAgICAgICBkb3dubG9hZD0iW1tfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkXV0uanNvbiIKICAgICAgICAgICAgaHJlZj0iW1tfanNvblVybChfbmFtZVRvRGF0YVNlcmllcywgX2RhdGFTZXJpZXNOYW1lVG9Eb3dubG9hZCldXSIKICAgICAgICAgICAgPkpTT048L2EKICAgICAgICAgID4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0ibWF0Y2hlcy1jb250YWluZXIiPgogICAgICA8ZGl2IGlkPSJtYXRjaGVzLWxpc3QtdGl0bGUiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfc2VyaWVzTmFtZXMubGVuZ3RoXV0iPgogICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgIGljb249IltbX2dldFRvZ2dsZU1hdGNoZXNJY29uKF9tYXRjaGVzTGlzdE9wZW5lZCldXSIKICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVNYXRjaGVzT3BlbiIKICAgICAgICAgICAgY2xhc3M9InRvZ2dsZS1tYXRjaGVzLWJ1dHRvbiIKICAgICAgICAgID4KICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgPHNwYW4gY2xhc3M9Im1hdGNoZXMtdGV4dCI+IE1hdGNoZXMgKFtbX3Nlcmllc05hbWVzLmxlbmd0aF1dKSA8L3NwYW4+CiAgICAgIDwvZGl2PgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3Nlcmllc05hbWVzLmxlbmd0aF1dIj4KICAgICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9IltbX21hdGNoZXNMaXN0T3BlbmVkXV0iPgogICAgICAgICAgPGRpdiBpZD0ibWF0Y2hlcy1saXN0Ij4KICAgICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgICAgICAgaXRlbXM9IltbX3Nlcmllc05hbWVzXV0iCiAgICAgICAgICAgICAgYXM9InNlcmllc05hbWUiCiAgICAgICAgICAgICAgaWQ9Im1hdGNoLWxpc3QtcmVwZWF0IgogICAgICAgICAgICAgIG9uLWRvbS1jaGFuZ2U9Il9tYXRjaExpc3RFbnRyeUNvbG9yVXBkYXRlZCIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1hdGNoLWxpc3QtZW50cnkiPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im1hdGNoLWVudHJ5LXN5bWJvbCI+CiAgICAgICAgICAgICAgICAgIFtbX2RldGVybWluZVN5bWJvbChfbmFtZVRvRGF0YVNlcmllcywgc2VyaWVzTmFtZSldXQogICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgW1tzZXJpZXNOYW1lXV0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvZGl2PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJ0Zi1jdXN0b20tc2NhbGFyLWNhcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgICNtYXRjaGVzLWxpc3QtdGl0bGUgewogICAgICAgIG1hcmdpbjogMTBweCAwIDVweCAwOwogICAgICB9CgogICAgICAjbWF0Y2hlcy1saXN0IHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAubWF0Y2gtbGlzdC1lbnRyeSB7CiAgICAgICAgbWFyZ2luOiAwIDAgNXB4IDA7CiAgICAgIH0KCiAgICAgIC5tYXRjaC1lbnRyeS1zeW1ib2wgewogICAgICAgIGZvbnQtZmFtaWx5OiBhcmlhbCwgc2Fucy1zZXJpZjsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5tYXRjaGVzLXRleHQgewogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sRW4ucHJvdG90eXBlLCJydW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEVuLnByb3RvdHlwZSwieFR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsImFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxFbi5wcm90b3R5cGUsInRpdGxlIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxFbi5wcm90b3R5cGUsInRhZ1JlZ2V4ZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsImlnbm9yZVlPdXRsaWVycyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLEVuLnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsInNob3dEb3dubG9hZExpbmtzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sRW4ucHJvdG90eXBlLCJzbW9vdGhpbmdFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLEVuLnByb3RvdHlwZSwic21vb3RoaW5nV2VpZ2h0Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEVuLnByb3RvdHlwZSwidGFnTWV0YWRhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRW4ucHJvdG90eXBlLCJ0b29sdGlwU29ydGluZ01ldGhvZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixZdildLEVuLnByb3RvdHlwZSwiX2NvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRW4ucHJvdG90eXBlLCJfbmFtZVRvRGF0YVNlcmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEVuLnByb3RvdHlwZSwiX2xvZ1NjYWxlQWN0aXZlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sRW4ucHJvdG90eXBlLCJfcmVxdWVzdERhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRW4ucHJvdG90eXBlLCJfcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsIl9tYXRjaGVzTGlzdE9wZW5lZCIsdm9pZCAwKTtFKFtCdCgiX25hbWVUb0RhdGFTZXJpZXMiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEVuLnByb3RvdHlwZSwiX3VwZGF0ZUNoYXJ0IixudWxsKTtFKFtSdCgiX25hbWVUb0RhdGFTZXJpZXMiLCJydW5zIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sRW4ucHJvdG90eXBlLCJfc2VyaWVzTmFtZXMiLG51bGwpO0UoW0J0KCJfdGFnRmlsdGVyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxFbi5wcm90b3R5cGUsIl9yZWZyZXNoRGF0YVNlcmllcyIsbnVsbCk7RShbUnQoInRhZ1JlZ2V4ZXMiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxFbi5wcm90b3R5cGUsIl90YWdGaWx0ZXIiLG51bGwpO0UoW1J0KCJ0aXRsZSIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEVuLnByb3RvdHlwZSwiX3RpdGxlRGlzcGxheVN0cmluZyIsbnVsbCk7RW49RShbeXQoInRmLWN1c3RvbS1zY2FsYXItbXVsdGktbGluZS1jaGFydC1jYXJkIildLEVuKTt2YXIgam89Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlKDUwKSx0aGlzLl9jYW5jZWxsZXI9bmV3IGFuLHRoaXMuX3Nob3dEb3dubG9hZExpbmtzPXhwKCJfc2hvd0Rvd25sb2FkTGlua3MiLHtkZWZhdWx0VmFsdWU6ITEsdXNlTG9jYWxTdG9yYWdlOiEwfSkuY2FsbCh0aGlzKSx0aGlzLl9zbW9vdGhpbmdXZWlnaHQ9X0UoIl9zbW9vdGhpbmdXZWlnaHQiLHtkZWZhdWx0VmFsdWU6LjZ9KS5jYWxsKHRoaXMpLHRoaXMuX2lnbm9yZVlPdXRsaWVycz14cCgiX2lnbm9yZVlPdXRsaWVycyIse2RlZmF1bHRWYWx1ZTohMCx1c2VMb2NhbFN0b3JhZ2U6ITB9KS5jYWxsKHRoaXMpLHRoaXMuX3hUeXBlPSJzdGVwIix0aGlzLl9hY3RpdmU9ITAsdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX3Nob3dEb3dubG9hZExpbmtzT2JzZXJ2ZXI9YnAoIl9zaG93RG93bmxvYWRMaW5rcyIse2RlZmF1bHRWYWx1ZTohMSx1c2VMb2NhbFN0b3JhZ2U6ITB9KSx0aGlzLl9zbW9vdGhpbmdXZWlnaHRPYnNlcnZlcj15RSgiX3Ntb290aGluZ1dlaWdodCIse2RlZmF1bHRWYWx1ZTouNn0pLHRoaXMuX2lnbm9yZVlPdXRsaWVyc09ic2VydmVyPWJwKCJfaWdub3JlWU91dGxpZXJzIix7ZGVmYXVsdFZhbHVlOiEwLHVzZUxvY2FsU3RvcmFnZTohMH0pfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7bGV0IHQ9X2UoKS5wbHVnaW5zTGlzdGluZygpLHI9dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKG49PntuLmNhbmNlbGxlZHx8KHRoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIiwhbi52YWx1ZS5jdXN0b21fc2NhbGFycyksIXRoaXMuX2RhdGFOb3RGb3VuZCYmdGhpcy5fcmV0cmlldmVMYXlvdXRBbmREYXRhKCkpfSk7dGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHIpfV9yZWxvYWRDaGFydHMoKXt2YXIgcjtsZXQgdD0ocj10aGlzLnJvb3QpPT1udWxsP3ZvaWQgMDpyLnF1ZXJ5U2VsZWN0b3JBbGwoInRmLWN1c3RvbS1zY2FsYXItbWFyZ2luLWNoYXJ0LWNhcmQsIHRmLWN1c3RvbS1zY2FsYXItbXVsdGktbGluZS1jaGFydC1jYXJkIik7dD09bnVsbHx8dC5mb3JFYWNoKG49PntuLnJlbG9hZCgpfSl9X3JldHJpZXZlTGF5b3V0QW5kRGF0YSgpe2xldCB0PV9lKCkucGx1Z2luUm91dGUoImN1c3RvbV9zY2FsYXJzIiwiL2xheW91dCIpLHI9dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKG49PntuLmNhbmNlbGxlZHx8KHRoaXMuc2V0KCJfbGF5b3V0IixuLnZhbHVlKSx0aGlzLl9kYXRhTm90Rm91bmR8fHRoaXMuX3JlbG9hZENoYXJ0cygpKX0pO3RoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyKX1nZXQgX3Ntb290aGluZ0VuYWJsZWQoKXt2YXIgdD10aGlzLl9zbW9vdGhpbmdXZWlnaHQ7cmV0dXJuIHQ+MH1nZXQgX2NhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9sYXlvdXQ7aWYoIXQuY2F0ZWdvcnkpcmV0dXJuW107bGV0IHI9ITE7cmV0dXJuIHRoaXMuX29wZW5lZENhdGVnb3JpZXN8fChyPSEwLHRoaXMuX29wZW5lZENhdGVnb3JpZXM9e30pLHQuY2F0ZWdvcnkubWFwKGk9PihyJiYhaS5jbG9zZWQmJih0aGlzLl9vcGVuZWRDYXRlZ29yaWVzW2kudGl0bGVdPSEwKSx7bmFtZTppLnRpdGxlLGl0ZW1zOmkuY2hhcnQsbWV0YWRhdGE6e3R5cGU6RGEuUFJFRklYX0dST1VQLG9wZW5lZDohIXRoaXMuX29wZW5lZENhdGVnb3JpZXNbaS50aXRsZV19fSkpfV9jYXRlZ29yeU9wZW5lZFRvZ2dsZWQodCl7bGV0IHI9dC50YXJnZXQ7ci5vcGVuZWQ/dGhpcy5fb3BlbmVkQ2F0ZWdvcmllc1tyLmNhdGVnb3J5Lm5hbWVdPSEwOmRlbGV0ZSB0aGlzLl9vcGVuZWRDYXRlZ29yaWVzW3IuY2F0ZWdvcnkubmFtZV19fTtqby50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmUtaXRlbSI+CiAgICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNoZWNrZWQ9Int7X3Nob3dEb3dubG9hZExpbmtzfX0iCiAgICAgICAgICAgICAgICA+U2hvdyBkYXRhIGRvd25sb2FkIGxpbmtzPC9wYXBlci1jaGVja2JveAogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmUtaXRlbSI+CiAgICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNoZWNrZWQ9Int7X2lnbm9yZVlPdXRsaWVyc319IgogICAgICAgICAgICAgICAgPklnbm9yZSBvdXRsaWVycyBpbiBjaGFydCBzY2FsaW5nPC9wYXBlci1jaGVja2JveAogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgaWQ9InRvb2x0aXAtc29ydGluZyI+CiAgICAgICAgICAgICAgPGRpdiBpZD0idG9vbHRpcC1zb3J0aW5nLWxhYmVsIj5Ub29sdGlwIHNvcnRpbmcgbWV0aG9kOjwvZGl2PgogICAgICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51CiAgICAgICAgICAgICAgICBuby1sYWJlbC1mbG9hdD0iIgogICAgICAgICAgICAgICAgc2VsZWN0ZWQtaXRlbS1sYWJlbD0ie3tfdG9vbHRpcFNvcnRpbmdNZXRob2R9fSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8cGFwZXItbGlzdGJveAogICAgICAgICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ9IjAiCiAgICAgICAgICAgICAgICAgIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmRlZmF1bHQ8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmRlc2NlbmRpbmc8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmFzY2VuZGluZzwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+bmVhcmVzdDwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8dGYtc21vb3RoaW5nLWlucHV0CiAgICAgICAgICAgICAgd2VpZ2h0PSJ7e19zbW9vdGhpbmdXZWlnaHR9fSIKICAgICAgICAgICAgICBzdGVwPSIwLjAwMSIKICAgICAgICAgICAgICBtaW49IjAiCiAgICAgICAgICAgICAgbWF4PSIxIgogICAgICAgICAgICA+PC90Zi1zbW9vdGhpbmctaW5wdXQ+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDx0Zi1vcHRpb24tc2VsZWN0b3IKICAgICAgICAgICAgICBpZD0ieC10eXBlLXNlbGVjdG9yIgogICAgICAgICAgICAgIG5hbWU9Ikhvcml6b250YWwgQXhpcyIKICAgICAgICAgICAgICBzZWxlY3RlZC1pZD0ie3tfeFR5cGV9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InN0ZXAiPnN0ZXA8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID48IS0tCiAgICAgICAgICAgIC0tPjxwYXBlci1idXR0b24gaWQ9InJlbGF0aXZlIj5yZWxhdGl2ZTwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPjwhLS0KICAgICAgICAgICAgLS0+PHBhcGVyLWJ1dHRvbiBpZD0id2FsbF90aW1lIj53YWxsPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3Igc2VsZWN0ZWQtcnVucz0ie3tfc2VsZWN0ZWRSdW5zfX0iPgogICAgICAgICAgPC90Zi1ydW5zLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2VudGVyIiBzbG90PSJjZW50ZXIiIGlkPSJjYXRlZ29yaWVzLWNvbnRhaW5lciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+VGhlIGN1c3RvbSBzY2FsYXJzIGRhc2hib2FyZCBpcyBpbmFjdGl2ZS48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6PC9wPgogICAgICAgICAgICA8b2w+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbid0IGxhaWQgb3V0IHRoZSBkYXNoYm9hcmQuPC9saT4KICAgICAgICAgICAgICA8bGk+WW91IGhhdmVu4oCZdCB3cml0dGVuIGFueSBzY2FsYXIgZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvb2w+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBUbyBsYXkgb3V0IHRoZSBkYXNoYm9hcmQsIHBhc3MgYSA8Y29kZT5MYXlvdXQ8L2NvZGU+IHByb3RvYnVmZmVyCiAgICAgICAgICAgICAgdG8gdGhlIDxjb2RlPnNldF9sYXlvdXQ8L2NvZGU+IG1ldGhvZC4gRm9yIGV4YW1wbGUsCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgPHByZT4KZnJvbSB0ZW5zb3Jib2FyZCBpbXBvcnQgc3VtbWFyeQpmcm9tIHRlbnNvcmJvYXJkLnBsdWdpbnMuY3VzdG9tX3NjYWxhciBpbXBvcnQgbGF5b3V0X3BiMgouLi4KIyBUaGlzIGFjdGlvbiBkb2VzIG5vdCBoYXZlIHRvIGJlIHBlcmZvcm1lZCBhdCBldmVyeSBzdGVwLCBzbyB0aGUgYWN0aW9uIGlzIG5vdAojIHRha2VuIGNhcmUgb2YgYnkgYW4gb3AgaW4gdGhlIGdyYXBoLiBXZSBvbmx5IG5lZWQgdG8gc3BlY2lmeSB0aGUgbGF5b3V0IG9uY2UKIyAoaW5zdGVhZCBvZiBwZXIgc3RlcCkuCmxheW91dF9zdW1tYXJ5ID0gc3VtbWFyeV9saWIuY3VzdG9tX3NjYWxhcl9wYihsYXlvdXRfcGIyLkxheW91dCgKICBjYXRlZ29yeT1bCiAgICBsYXlvdXRfcGIyLkNhdGVnb3J5KAogICAgICB0aXRsZT0nbG9zc2VzJywKICAgICAgY2hhcnQ9WwogICAgICAgICAgbGF5b3V0X3BiMi5DaGFydCgKICAgICAgICAgICAgICB0aXRsZT0nbG9zc2VzJywKICAgICAgICAgICAgICBtdWx0aWxpbmU9bGF5b3V0X3BiMi5NdWx0aWxpbmVDaGFydENvbnRlbnQoCiAgICAgICAgICAgICAgICB0YWc9W3InbG9zcy4qJ10sCiAgICAgICAgICAgICAgKSksCiAgICAgICAgICBsYXlvdXRfcGIyLkNoYXJ0KAogICAgICAgICAgICAgIHRpdGxlPSdiYXonLAogICAgICAgICAgICAgIG1hcmdpbj1sYXlvdXRfcGIyLk1hcmdpbkNoYXJ0Q29udGVudCgKICAgICAgICAgICAgICAgIHNlcmllcz1bCiAgICAgICAgICAgICAgICAgIGxheW91dF9wYjIuTWFyZ2luQ2hhcnRDb250ZW50LlNlcmllcygKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0nbG9zcy9iYXovc2NhbGFyX3N1bW1hcnknLAogICAgICAgICAgICAgICAgICAgIGxvd2VyPSdiYXpfbG93ZXIvYmF6L3NjYWxhcl9zdW1tYXJ5JywKICAgICAgICAgICAgICAgICAgICB1cHBlcj0nYmF6X3VwcGVyL2Jhei9zY2FsYXJfc3VtbWFyeScpLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICApKSwKICAgICAgXSksCiAgICBsYXlvdXRfcGIyLkNhdGVnb3J5KAogICAgICB0aXRsZT0ndHJpZyBmdW5jdGlvbnMnLAogICAgICBjaGFydD1bCiAgICAgICAgICBsYXlvdXRfcGIyLkNoYXJ0KAogICAgICAgICAgICAgIHRpdGxlPSd3YXZlIHRyaWcgZnVuY3Rpb25zJywKICAgICAgICAgICAgICBtdWx0aWxpbmU9bGF5b3V0X3BiMi5NdWx0aWxpbmVDaGFydENvbnRlbnQoCiAgICAgICAgICAgICAgICB0YWc9W3IndHJpZ0Z1bmN0aW9ucy9jb3NpbmUnLCByJ3RyaWdGdW5jdGlvbnMvc2luZSddLAogICAgICAgICAgICAgICkpLAogICAgICAgICAgIyBUaGUgcmFuZ2Ugb2YgdGFuZ2VudCBpcyBkaWZmZXJlbnQuIExldCdzIGdpdmUgaXQgaXRzIG93biBjaGFydC4KICAgICAgICAgIGxheW91dF9wYjIuQ2hhcnQoCiAgICAgICAgICAgICAgdGl0bGU9J3RhbicsCiAgICAgICAgICAgICAgbXVsdGlsaW5lPWxheW91dF9wYjIuTXVsdGlsaW5lQ2hhcnRDb250ZW50KAogICAgICAgICAgICAgICAgdGFnPVtyJ3RyaWdGdW5jdGlvbnMvdGFuZ2VudCddLAogICAgICAgICAgICAgICkpLAogICAgICBdLAogICAgICAjIFRoaXMgY2F0ZWdvcnkgd2UgY2FyZSBsZXNzIGFib3V0LiBMZXQncyBtYWtlIGl0IGluaXRpYWxseSBjbG9zZWQuCiAgICAgIGNsb3NlZD1UcnVlKSwKICBdKSkKd3JpdGVyLmFkZF9zdW1tYXJ5KGxheW91dF9zdW1tYXJ5KQo8L3ByZQogICAgICAgICAgICA+CiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgYXM9ImNoYXJ0IgogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgZGlzYWJsZS1wYWdpbmF0aW9uCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbY2F0ZWdvcnkubWV0YWRhdGEub3BlbmVkXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbY2hhcnQubXVsdGlsaW5lXV0iPgogICAgICAgICAgICAgICAgICA8dGYtY3VzdG9tLXNjYWxhci1tdWx0aS1saW5lLWNoYXJ0LWNhcmQKICAgICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgICAgIHJ1bnM9IltbX3NlbGVjdGVkUnVuc11dIgogICAgICAgICAgICAgICAgICAgIHRpdGxlPSJbW2NoYXJ0LnRpdGxlXV0iCiAgICAgICAgICAgICAgICAgICAgeC10eXBlPSJbW194VHlwZV1dIgogICAgICAgICAgICAgICAgICAgIHNtb290aGluZy1lbmFibGVkPSJbW19zbW9vdGhpbmdFbmFibGVkXV0iCiAgICAgICAgICAgICAgICAgICAgc21vb3RoaW5nLXdlaWdodD0iW1tfc21vb3RoaW5nV2VpZ2h0XV0iCiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgICAgICAgICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW19pZ25vcmVZT3V0bGllcnNdXSIKICAgICAgICAgICAgICAgICAgICBzaG93LWRvd25sb2FkLWxpbmtzPSJbW19zaG93RG93bmxvYWRMaW5rc11dIgogICAgICAgICAgICAgICAgICAgIHRhZy1yZWdleGVzPSJbW2NoYXJ0Lm11bHRpbGluZS50YWddXSIKICAgICAgICAgICAgICAgICAgPjwvdGYtY3VzdG9tLXNjYWxhci1tdWx0aS1saW5lLWNoYXJ0LWNhcmQ+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2NoYXJ0Lm1hcmdpbl1dIj4KICAgICAgICAgICAgICAgICAgPHRmLWN1c3RvbS1zY2FsYXItbWFyZ2luLWNoYXJ0LWNhcmQKICAgICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgICAgIHJ1bnM9IltbX3NlbGVjdGVkUnVuc11dIgogICAgICAgICAgICAgICAgICAgIHRpdGxlPSJbW2NoYXJ0LnRpdGxlXV0iCiAgICAgICAgICAgICAgICAgICAgeC10eXBlPSJbW194VHlwZV1dIgogICAgICAgICAgICAgICAgICAgIHRvb2x0aXAtc29ydGluZy1tZXRob2Q9IltbdG9vbHRpcFNvcnRpbmdNZXRob2RdXSIKICAgICAgICAgICAgICAgICAgICBpZ25vcmUteS1vdXRsaWVycz0iW1tfaWdub3JlWU91dGxpZXJzXV0iCiAgICAgICAgICAgICAgICAgICAgc2hvdy1kb3dubG9hZC1saW5rcz0iW1tfc2hvd0Rvd25sb2FkTGlua3NdXSIKICAgICAgICAgICAgICAgICAgICBtYXJnaW4tY2hhcnQtc2VyaWVzPSJbW2NoYXJ0Lm1hcmdpbi5zZXJpZXNdXSIKICAgICAgICAgICAgICAgICAgPjwvdGYtY3VzdG9tLXNjYWxhci1tYXJnaW4tY2hhcnQtY2FyZD4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgI3Rvb2x0aXAtc29ydGluZyB7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBtYXJnaW4tdG9wOiAxNXB4OwogICAgICB9CiAgICAgICN0b29sdGlwLXNvcnRpbmcgcGFwZXItZHJvcGRvd24tbWVudSB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItZm9jdXMtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIHdpZHRoOiAxMDVweDsKICAgICAgfQogICAgICAubGluZS1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nLXRvcDogNXB4OwogICAgICB9CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxqby5wcm90b3R5cGUsIl9yZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixhbildLGpvLnByb3RvdHlwZSwiX2NhbmNlbGxlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sam8ucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITAsb2JzZXJ2ZXI6Il9zaG93RG93bmxvYWRMaW5rc09ic2VydmVyIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sam8ucHJvdG90eXBlLCJfc2hvd0Rvd25sb2FkTGlua3MiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsbm90aWZ5OiEwLG9ic2VydmVyOiJfc21vb3RoaW5nV2VpZ2h0T2JzZXJ2ZXIifSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLGpvLnByb3RvdHlwZSwiX3Ntb290aGluZ1dlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9pZ25vcmVZT3V0bGllcnNPYnNlcnZlciJ9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGpvLnByb3RvdHlwZSwiX2lnbm9yZVlPdXRsaWVycyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxqby5wcm90b3R5cGUsIl94VHlwZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxqby5wcm90b3R5cGUsIl9sYXlvdXQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxqby5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sam8ucHJvdG90eXBlLCJfb3BlbmVkQ2F0ZWdvcmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGpvLnByb3RvdHlwZSwiX2FjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGpvLnByb3RvdHlwZSwicmVsb2FkT25SZWFkeSIsdm9pZCAwKTtFKFtSdCgiX3Ntb290aGluZ1dlaWdodCIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxqby5wcm90b3R5cGUsIl9zbW9vdGhpbmdFbmFibGVkIixudWxsKTtFKFtSdCgiX2xheW91dCIpLHcoImRlc2lnbjp0eXBlIixBcnJheSksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sam8ucHJvdG90eXBlLCJfY2F0ZWdvcmllcyIsbnVsbCk7am89RShbeXQoInRmLWN1c3RvbS1zY2FsYXItZGFzaGJvYXJkIildLGpvKTt2YXIgREI9RWUoT2UoKSwxKTt2YXIgYXN0PUVlKE9lKCksMSksd2E9RWUoU2woKSwxKTt2YXIgTkI9Y2xhc3N7Y29uc3RydWN0b3IodCxyKXt0aGlzLnJ1bjJkYXRhc2V0cz17fSx0aGlzLmNvbG9yU2NhbGU9cix0aGlzLmJ1aWxkQ2hhcnQodCl9Z2V0RGF0YXNldCh0KXtyZXR1cm4gdGhpcy5ydW4yZGF0YXNldHNbdF09PT12b2lkIDAmJih0aGlzLnJ1bjJkYXRhc2V0c1t0XT1uZXcgd2EuRGF0YXNldChbXSx7cnVuOnR9KSksdGhpcy5ydW4yZGF0YXNldHNbdF19YnVpbGRDaGFydCh0KXt0aGlzLm91dGVyJiZ0aGlzLm91dGVyLmRlc3Ryb3koKTtsZXQgcj14Qih0KTt0aGlzLnhBY2Nlc3Nvcj1yLmFjY2Vzc29yLHRoaXMueFNjYWxlPXIuc2NhbGUsdGhpcy54QXhpcz1yLmF4aXMsdGhpcy54QXhpcy5tYXJnaW4oMCksdGhpcy54QXhpcy50aWNrTGFiZWxQYWRkaW5nKDMpLHRoaXMueVNjYWxlPW5ldyB3YS5TY2FsZXMuTGluZWFyLHRoaXMueUF4aXM9bmV3IHdhLkF4ZXMuTnVtZXJpYyh0aGlzLnlTY2FsZSwibGVmdCIpO2xldCBuPVd1KG1CKTt0aGlzLnlBeGlzLm1hcmdpbigwKS50aWNrTGFiZWxQYWRkaW5nKDUpLmZvcm1hdHRlcihuKSx0aGlzLnlBeGlzLnVzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uKCEwKTtsZXQgaT10aGlzLmJ1aWxkUGxvdCh0aGlzLnhBY2Nlc3Nvcix0aGlzLnhTY2FsZSx0aGlzLnlTY2FsZSk7dGhpcy5ncmlkbGluZXM9bmV3IHdhLkNvbXBvbmVudHMuR3JpZGxpbmVzKHRoaXMueFNjYWxlLHRoaXMueVNjYWxlKSx0aGlzLmNlbnRlcj1uZXcgd2EuQ29tcG9uZW50cy5Hcm91cChbdGhpcy5ncmlkbGluZXMsaV0pLHRoaXMub3V0ZXI9bmV3IHdhLkNvbXBvbmVudHMuVGFibGUoW1t0aGlzLnlBeGlzLHRoaXMuY2VudGVyXSxbbnVsbCx0aGlzLnhBeGlzXV0pfWJ1aWxkUGxvdCh0LHIsbil7bGV0IGk9WzAsMjI4LDE1ODcsMzA4NSw1ZTMsNjkxNSw4NDEzLDk3NzIsMWU0XSxvPWFzdC5yYW5nZShpLmxlbmd0aC0xKS5tYXAoaD0+KGlbaCsxXS1pW2hdKS8yNTAwKSxhPWkubWFwKChoLGYpPT5wPT5wW2ZdWzFdKSxzPTQsbD1hW3NdLGM9YXN0LnJhbmdlKGEubGVuZ3RoLTEpLm1hcChoPT57bGV0IGY9bmV3IHdhLlBsb3RzLkFyZWE7Zi54KHQscik7bGV0IHA9aD5zP2FbaF06YVtoKzFdLGQ9aD5zP2FbaCsxXTphW2hdO3JldHVybiBmLnkoZCxuKSxmLnkwKHApLGYuYXR0cigiZmlsbCIsKGcsXyx5KT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKHkubWV0YWRhdGEoKS5ydW4pKSxmLmF0dHIoInN0cm9rZSIsKGcsXyx5KT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKHkubWV0YWRhdGEoKS5ydW4pKSxmLmF0dHIoInN0cm9rZS13ZWlnaHQiLChnLF8seSk9PiIwLjVweCIpLGYuYXR0cigic3Ryb2tlLW9wYWNpdHkiLCgpPT5vW2hdKSxmLmF0dHIoImZpbGwtb3BhY2l0eSIsKCk9Pm9baF0pLGZ9KSx1PW5ldyB3YS5QbG90cy5MaW5lO3JldHVybiB1LngodCxyKSx1LnkobCxuKSx1LmF0dHIoInN0cm9rZSIsKGgsZixwKT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKHAucnVuKSksdGhpcy5wbG90cz1jLG5ldyB3YS5Db21wb25lbnRzLkdyb3VwKGMpfXNldFZpc2libGVTZXJpZXModCl7dGhpcy5ydW5zPXQ7bGV0IHI9dC5tYXAobj0+dGhpcy5nZXREYXRhc2V0KG4pKTt0aGlzLnBsb3RzLmZvckVhY2gobj0+bi5kYXRhc2V0cyhyKSl9c2V0U2VyaWVzRGF0YSh0LHIpe3RoaXMuZ2V0RGF0YXNldCh0KS5kYXRhKHIpfXJlbmRlclRvKHQpe3RoaXMudGFyZ2V0U1ZHPXQsdGhpcy5vdXRlci5yZW5kZXJUbyh0KX1yZWRyYXcoKXt0aGlzLm91dGVyLnJlZHJhdygpfWRlc3Ryb3koKXt0aGlzLm91dGVyLmRlc3Ryb3koKX19LEJjPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvbG9yU2NhbGU9bmV3IHdhLlNjYWxlcy5Db2xvcigpLnJhbmdlKGpiLnNsaWNlKCkpLHRoaXMueFR5cGU9InN0ZXAiLHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZT1bXSx0aGlzLl9zZXJpZXNEYXRhQ2FjaGU9e30sdGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkPW51bGx9c2V0VmlzaWJsZVNlcmllcyh0KXt0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGU9dCx0aGlzLl9jaGFydCYmKHRoaXMuX2NoYXJ0LnNldFZpc2libGVTZXJpZXModCksdGhpcy5yZWRyYXcoKSl9c2V0U2VyaWVzRGF0YSh0LHIpe3RoaXMuX3Nlcmllc0RhdGFDYWNoZVt0XT1yLHRoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5zZXRTZXJpZXNEYXRhKHQscil9cmVkcmF3KCl7dGhpcy5fY2hhcnQucmVkcmF3KCl9X21ha2VDaGFydCgpe3ZhciB0PXRoaXMueFR5cGUscj10aGlzLmNvbG9yU2NhbGUsbj10aGlzLl9hdHRhY2hlZDt0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQhPT1udWxsJiZ0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZCksdGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkPXRoaXMuYXN5bmMoZnVuY3Rpb24oKXtpZih0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQ9bnVsbCwhIW4pe3RoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5kZXN0cm95KCk7dmFyIGk9bmV3IE5CKHQsciksbz1IdCh0aGlzLiQuY2hhcnRkaXYpO2kucmVuZGVyVG8obyksdGhpcy5fY2hhcnQ9aX19LDM1MCl9X3JlbG9hZEZyb21DYWNoZSgpe3RoaXMuX2NoYXJ0JiYodGhpcy5fY2hhcnQuc2V0VmlzaWJsZVNlcmllcyh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUpLHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RoaXMuX2NoYXJ0LnNldFNlcmllc0RhdGEodCx0aGlzLl9zZXJpZXNEYXRhQ2FjaGVbdF18fFtdKX0uYmluZCh0aGlzKSkpfWF0dGFjaGVkKCl7dGhpcy5fYXR0YWNoZWQ9ITB9ZGV0YWNoZWQoKXt0aGlzLl9hdHRhY2hlZD0hMX19O0JjLnRlbXBsYXRlPVFgCiAgICA8c3R5bGUgaW5jbHVkZT0icGxvdHRhYmxlLXN0eWxlIj48L3N0eWxlPgogICAgPGRpdiBpZD0iY2hhcnRkaXYiPjwvZGl2PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CiAgICAgICNjaGFydGRpdiB7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgfQogICAgICAucGxvdHRhYmxlIC5heGlzIHRleHQgewogICAgICAgIGZpbGw6IGN1cnJlbnRDb2xvcjsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLHdhLlNjYWxlcy5Db2xvcildLEJjLnByb3RvdHlwZSwiY29sb3JTY2FsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxCYy5wcm90b3R5cGUsInhUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sQmMucHJvdG90eXBlLCJfYXR0YWNoZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsTkIpXSxCYy5wcm90b3R5cGUsIl9jaGFydCIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sQmMucHJvdG90eXBlLCJfdmlzaWJsZVNlcmllc0NhY2hlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEJjLnByb3RvdHlwZSwiX3Nlcmllc0RhdGFDYWNoZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxCYy5wcm90b3R5cGUsIl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQiLHZvaWQgMCk7RShbQnQoInhUeXBlIiwiY29sb3JTY2FsZSIsIl9hdHRhY2hlZCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sQmMucHJvdG90eXBlLCJfbWFrZUNoYXJ0IixudWxsKTtFKFtCdCgiX2NoYXJ0IiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxCYy5wcm90b3R5cGUsIl9yZWxvYWRGcm9tQ2FjaGUiLG51bGwpO0JjPUUoW3l0KCJ2ei1kaXN0cmlidXRpb24tY2hhcnQiKV0sQmMpO3ZhciBTYT1jbGFzcyBleHRlbmRzIGtTKEd0KG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZ2V0RGF0YUxvYWROYW1lPSh7cnVuOnR9KT0+dCx0aGlzLnJlcXVlc3REYXRhPSh0LHIsbik9PntsZXQgbz1fZSgpLnBsdWdpblJvdXRlKCJkaXN0cmlidXRpb25zIiwiL2Rpc3RyaWJ1dGlvbnMiKTtQcm9taXNlLmFsbCh0Lm1hcChhPT57bGV0IHM9TWkobyx7dGFnOmEudGFnLHJ1bjphLnJ1bn0pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QocykudGhlbihsPT52b2lkIHIoe2l0ZW06YSxkYXRhOmx9KSl9KSkuZmluYWxseSgoKT0+dm9pZCBuKCkpfSx0aGlzLmxvYWREYXRhQ2FsbGJhY2s9KHQscixuKT0+e2xldCBpPW4ubWFwKGE9PntsZXRbcyxsLGNdPWE7cmV0dXJuIGMud2FsbF90aW1lPW5ldyBEYXRlKHMqMWUzKSxjLnN0ZXA9bCxjfSksbz10aGlzLmdldERhdGFMb2FkTmFtZShyKTt0aGlzLiQuY2hhcnQuc2V0U2VyaWVzRGF0YShvLGkpLHRoaXMuJC5jaGFydC5zZXRWaXNpYmxlU2VyaWVzKFtvXSl9LHRoaXMuX2NvbG9yU2NhbGU9e3NjYWxlOmZufSx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9jYW5jZWxsZXI9bmV3IGFufV9yZWxvYWRPblJ1blRhZ0NoYW5nZSgpe3RoaXMucmVsb2FkKCl9X3VwZGF0ZURhdGFUb0xvYWQoKXt2YXIgdD10aGlzLnJ1bixyPXRoaXMudGFnO3RoaXMuZGF0YVRvTG9hZD1be3J1bjp0LHRhZzpyfV19Z2V0IF9ydW5Db2xvcigpe3ZhciB0PXRoaXMucnVuO3JldHVybiB0aGlzLl9jb2xvclNjYWxlLnNjYWxlKHQpfXJlZHJhdygpe3RoaXMuJC5jaGFydC5yZWRyYXcoKX1fdG9nZ2xlRXhwYW5kZWQodCl7dGhpcy5zZXQoIl9leHBhbmRlZCIsIXRoaXMuX2V4cGFuZGVkKSx0aGlzLnJlZHJhdygpfX07U2EudGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcKICAgICAgdGFnPSJbW3RhZ11dIgogICAgICBydW49IltbcnVuXV0iCiAgICAgIGRpc3BsYXktbmFtZT0iW1t0YWdNZXRhZGF0YS5kaXNwbGF5TmFtZV1dIgogICAgICBkZXNjcmlwdGlvbj0iW1t0YWdNZXRhZGF0YS5kZXNjcmlwdGlvbl1dIgogICAgICBjb2xvcj0iW1tfcnVuQ29sb3JdXSIKICAgID48L3RmLWNhcmQtaGVhZGluZz4KICAgIDwhLS0KICAgICAgVGhlIG1haW4gZGlzdHJpYnV0aW9uIHRoYXQgd2UgcmVuZGVyLiBEYXRhIGlzIHNldCBkaXJlY3RseSB3aXRoCiAgICAgIFxgc2V0U2VyaWVzRGF0YVxgLCBub3Qgd2l0aCBhIGJvdW5kIHByb3BlcnR5LgogICAgLS0+CiAgICA8dnotZGlzdHJpYnV0aW9uLWNoYXJ0CiAgICAgIGlkPSJjaGFydCIKICAgICAgeC10eXBlPSJbW3hUeXBlXV0iCiAgICAgIGNvbG9yLXNjYWxlPSJbW19jb2xvclNjYWxlXV0iCiAgICA+PC92ei1kaXN0cmlidXRpb24tY2hhcnQ+CiAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogcm93OyI+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfZXhwYW5kZWRdXSIKICAgICAgICBpY29uPSJmdWxsc2NyZWVuIgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUV4cGFuZGVkIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHdpZHRoOiAzMzBweDsKICAgICAgICBoZWlnaHQ6IDIzNXB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4OwogICAgICB9CiAgICAgIDpob3N0KFtfZXhwYW5kZWRdKSB7CiAgICAgICAgd2lkdGg6IDcwMHB4OwogICAgICAgIGhlaWdodDogNTAwcHg7CiAgICAgIH0KCiAgICAgIHZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzIHsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgICBjb2xvcjogIzIxOTZmMzsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KICAgICAgcGFwZXItaWNvbi1idXR0b25bc2VsZWN0ZWRdIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICB9CgogICAgICB0Zi1jYXJkLWhlYWRpbmcgewogICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxTYS5wcm90b3R5cGUsInJ1biIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxTYS5wcm90b3R5cGUsInRhZyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxTYS5wcm90b3R5cGUsInRhZ01ldGFkYXRhIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFNhLnByb3RvdHlwZSwieFR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sU2EucHJvdG90eXBlLCJnZXREYXRhTG9hZE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sU2EucHJvdG90eXBlLCJsb2FkRGF0YUNhbGxiYWNrIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFNhLnByb3RvdHlwZSwiX2NvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sU2EucHJvdG90eXBlLCJfZXhwYW5kZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxTYS5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGFuKV0sU2EucHJvdG90eXBlLCJfY2FuY2VsbGVyIix2b2lkIDApO0UoW0J0KCJydW4iLCJ0YWciKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFNhLnByb3RvdHlwZSwiX3JlbG9hZE9uUnVuVGFnQ2hhbmdlIixudWxsKTtFKFtCdCgicnVuIiwidGFnIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxTYS5wcm90b3R5cGUsIl91cGRhdGVEYXRhVG9Mb2FkIixudWxsKTtFKFtSdCgicnVuIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sU2EucHJvdG90eXBlLCJfcnVuQ29sb3IiLG51bGwpO1NhPUUoW3l0KCJ0Zi1kaXN0cmlidXRpb24tbG9hZGVyIildLFNhKTt2YXIgTWw9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucmVsb2FkT25SZWFkeT0hMCx0aGlzLl94VHlwZT0ic3RlcCIsdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKT0+e3RoaXMuX3JlbG9hZERpc3RyaWJ1dGlvbnMoKX0pfV9mZXRjaFRhZ3MoKXtsZXQgdD1fZSgpLnBsdWdpblJvdXRlKCJkaXN0cmlidXRpb25zIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntpZihEQi5pc0VxdWFsKHIsdGhpcy5fcnVuVG9UYWdJbmZvKSlyZXR1cm47bGV0IG49REIubWFwVmFsdWVzKHIsbz0+T2JqZWN0LmtleXMobykpLGk9JGkobik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLGkubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZyIsbiksdGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLHIpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSl9KX1fcmVsb2FkRGlzdHJpYnV0aW9ucygpe3ZhciB0Oyh0PXRoaXMucm9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtZGlzdHJpYnV0aW9uLWxvYWRlciIpLmZvckVhY2gocj0+e3IucmVsb2FkKCl9KX1fc2hvdWxkT3Blbih0KXtyZXR1cm4gdDw9Mn1nZXQgX2NhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9ydW5Ub1RhZyxyPXRoaXMuX3NlbGVjdGVkUnVucyxuPXRoaXMuX3RhZ0ZpbHRlcixpPXRoaXMuX2NhdGVnb3JpZXNEb21SZWFkeTtyZXR1cm4gUWwodCxyLG4pfV90YWdNZXRhZGF0YSh0LHIsbil7cmV0dXJuIHRbcl1bbl19fTtNbC50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDx0Zi1vcHRpb24tc2VsZWN0b3IKICAgICAgICAgICAgICBpZD0ieFR5cGVTZWxlY3RvciIKICAgICAgICAgICAgICBuYW1lPSJIb3Jpem9udGFsIGF4aXMiCiAgICAgICAgICAgICAgc2VsZWN0ZWQtaWQ9Int7X3hUeXBlfX0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJzdGVwIj5zdGVwPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0icmVsYXRpdmUiPnJlbGF0aXZlPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0id2FsbF90aW1lIj53YWxsPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3Igc2VsZWN0ZWQtcnVucz0ie3tfc2VsZWN0ZWRSdW5zfX0iPgogICAgICAgICAgPC90Zi1ydW5zLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBkaXN0cmlidXRpb24gZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgIFlvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgaGlzdG9ncmFtIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy4KICAgICAgICAgICAgICAgIChIaXN0b2dyYW1zIGFuZCBkaXN0cmlidXRpb25zIGJvdGggdXNlIHRoZSBoaXN0b2dyYW0gc3VtbWFyeQogICAgICAgICAgICAgICAgb3BlcmF0aW9uLikKICAgICAgICAgICAgICA8L2xpPgoKICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIgogICAgICAgICAgICAgICAgPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRmLXRhZy1maWx0ZXJlciB0YWctZmlsdGVyPSJ7e190YWdGaWx0ZXJ9fSI+PC90Zi10YWctZmlsdGVyZXI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldwogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtZGlzdHJpYnV0aW9uLWxvYWRlcgogICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgIHJ1bj0iW1tpdGVtLnJ1bl1dIgogICAgICAgICAgICAgICAgICB0YWc9IltbaXRlbS50YWddXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShfcnVuVG9UYWdJbmZvLCBpdGVtLnJ1biwgaXRlbS50YWcpXV0iCiAgICAgICAgICAgICAgICAgIHgtdHlwZT0iW1tfeFR5cGVdXSIKICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgPjwvdGYtZGlzdHJpYnV0aW9uLWxvYWRlcj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KCiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sTWwucHJvdG90eXBlLCJyZWxvYWRPblJlYWR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLE1sLnByb3RvdHlwZSwiX3hUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxNbC5wcm90b3R5cGUsIl9zZWxlY3RlZFJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTWwucHJvdG90eXBlLCJfcnVuVG9UYWciLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTWwucHJvdG90eXBlLCJfcnVuVG9UYWdJbmZvIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sTWwucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLE1sLnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLE1sLnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLE1sLnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW1J0KCJfcnVuVG9UYWciLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIsIl9jYXRlZ29yaWVzRG9tUmVhZHkiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLE1sLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpO01sPUUoW3l0KCJ0Zi1kaXN0cmlidXRpb24tZGFzaGJvYXJkIildLE1sKTt2YXIgT0I9e307WnMoT0Ise0RJU0FNQklHVUFUT1I6KCk9PnEwdCxMaXN0ZW5LZXk6KCk9Pm1FLGFkZEhhc2hMaXN0ZW5lcjooKT0+Z0UsYWRkU3RvcmFnZUxpc3RlbmVyOigpPT5UVyxkaXNwb3NlQm9vbGVhbkJpbmRpbmc6KCk9PnQyZSxkaXNwb3NlTnVtYmVyQmluZGluZzooKT0+ZTJlLGRpc3Bvc2VPYmplY3RCaW5kaW5nOigpPT5pMmUsZGlzcG9zZVN0cmluZ0JpbmRpbmc6KCk9PlpiZSxmaXJlU3RvcmFnZUNoYW5nZWQ6KCk9PkNXLGdldEJvb2xlYW46KCk9PkpiZSxnZXRCb29sZWFuSW5pdGlhbGl6ZXI6KCk9PnhwLGdldEJvb2xlYW5PYnNlcnZlcjooKT0+YnAsZ2V0TnVtYmVyOigpPT5OVyxnZXROdW1iZXJJbml0aWFsaXplcjooKT0+X0UsZ2V0TnVtYmVyT2JzZXJ2ZXI6KCk9PnlFLGdldE9iamVjdDooKT0+cjJlLGdldE9iamVjdEluaXRpYWxpemVyOigpPT5PVyxnZXRPYmplY3RPYnNlcnZlcjooKT0+elcsZ2V0U3RyaW5nOigpPT4kYmUsZ2V0U3RyaW5nSW5pdGlhbGl6ZXI6KCk9PnZfLGdldFN0cmluZ09ic2VydmVyOigpPT54XyxnZXRVcmxIYXNoRGljdDooKT0+QjB0LG1ha2VCaW5kaW5nczooKT0+dkUsbWlncmF0ZUxlZ2FjeVVSTFNjaGVtZTooKT0+bzJlLHJlbW92ZUhhc2hMaXN0ZW5lckJ5S2V5OigpPT5BVyxyZW1vdmVTdG9yYWdlTGlzdGVuZXJCeUtleTooKT0+UFcsc2V0Qm9vbGVhbjooKT0+UWJlLHNldE51bWJlcjooKT0+RFcsc2V0T2JqZWN0OigpPT5uMmUsc2V0U3RyaW5nOigpPT5LYmV9KTt2YXIgaWN0PUVlKE9lKCksMSk7dmFyIEtLdD0iR3JhcGggZGFzaGJvYXJkIGFjdGlvbnMiLFpLdD0iR3JhcGggZGFzaGJvYXJkIHRpbWluZ3MiLHNzdDsoZnVuY3Rpb24oZSl7ZS5GRVRDSF9QQlRYVF9CWVRFUz0iRkVUQ0hfUEJUWFRfQllURVMiLGUuRkVUQ0hfUEJUWFRfQllURVNfRlJPTV9GSUxFU1lTVEVNPSJGRVRDSF9QQlRYVF9CWVRFU19GUk9NX0ZJTEVTWVNURU0iLGUuRkVUQ0hfUEJUWFRfQllURVNfRlJPTV9TRVJWRVI9IkZFVENIX1BCVFhUX0JZVEVTX0ZST01fU0VSVkVSIixlLlBBUlNFX1BCVFhUX0lOVE9fT0JKRUNUPSJQQVJTRV9QQlRYVF9JTlRPX09CSkVDVCIsZS5GRVRDSF9NRVRBREFUQV9QQlRYVF9CWVRFUz0iRkVUQ0hfTUVUQURBVEFfUEJUWFRfQllURVMiLGUuUEFSU0VfTUVUQURBVEFfUEJUWFRfSU5UT19PQkpFQ1Q9IlBBUlNFX01FVEFEQVRBX1BCVFhUX0lOVE9fT0JKRUNUIixlLk5PUk1BTElaSU5HX05BTUVTPSJOT1JNQUxJWklOR19OQU1FUyIsZS5CVUlMRF9TTElNX0dSQVBIPSJCVUlMRF9TTElNX0dSQVBIIixlLkhJRVJBUkNIWV9BRERfTk9ERVM9IkhJRVJBUkNIWV9BRERfTk9ERVMiLGUuSElFUkFSQ0hZX0RFVEVDVF9TRVJJRVM9IkhJRVJBUkNIWV9ERVRFQ1RfU0VSSUVTIixlLkhJRVJBUkNIWV9BRERfRURHRVM9IkhJRVJBUkNIWV9BRERfRURHRVMiLGUuSElFUkFSQ0hZX0ZJTkRfU0lNSUxBUl9TVUJHUkFQSFM9IkhJRVJBUkNIWV9GSU5EX1NJTUlMQVJfU1VCR1JBUEhTIixlLlJFTkRFUl9CVUlMRF9ISUVSQVJDSFk9IlJFTkRFUl9CVUlMRF9ISUVSQVJDSFkiLGUuUkVOREVSX1NDRU5FX0xBWU9VVD0iUkVOREVSX1NDRU5FX0xBWU9VVCIsZS5SRU5ERVJfU0NFTkVfQlVJTERfU0NFTkU9IlJFTkRFUl9TQ0VORV9CVUlMRF9TQ0VORSIsZS5HUkFQSF9MT0FEX1NVQ0NFRURFRD0iR1JBUEhfTE9BRF9TVUNDRUVERUQiLGUuR1JBUEhfTE9BRF9GQUlMRUQ9IkdSQVBIX0xPQURfRkFJTEVEIn0pKHNzdHx8KHNzdD17fSkpO3ZhciBsc3Q7KGZ1bmN0aW9uKGUpe2UuTk9ERV9FWFBBTlNJT05fVE9HR0xFRD0iTk9ERV9FWFBBTlNJT05fVE9HR0xFRCIsZS5OT0RFX1NFQVJDSF9SRVNVTFRfRk9DVVNFRD0iTk9ERV9TRUFSQ0hfUkVTVUxUX0ZPQ1VTRUQiLGUuTk9ERV9BVVhJTElBUllfRVhUUkFDVElPTl9DSEFOR0VEPSJOT0RFX0FVWElMSUFSWV9FWFRSQUNUSU9OX0NIQU5HRUQiLGUuR1JBUEhfVFlQRV9DSEFOR0VEPSJHUkFQSF9UWVBFX0NIQU5HRUQiLGUuVFJBQ0VfSU5QVVRfTU9ERV9UT0dHTEVEPSJUUkFDRV9JTlBVVF9NT0RFX1RPR0dMRUQiLGUuTk9ERV9DT0xPUl9NT0RFX0NIQU5HRUQ9Ik5PREVfQ09MT1JfTU9ERV9DSEFOR0VEIixlLlVQTE9BREVEX0dSQVBIX0ZST01fRklMRVNZU1RFTT0iVVBMT0FERURfR1JBUEhfRlJPTV9GSUxFU1lTVEVNIn0pKGxzdHx8KGxzdD17fSkpO3ZhciBqcj1pYShpYSh7fSxzc3QpLGxzdCk7dmFyIG5sZT1FZShPbHQoKSwxKSxwbj1FZShPZSgpLDEpO3ZhciBCczsoZnVuY3Rpb24oZSl7ZS5PUF9HUkFQSD0ib3BfZ3JhcGgiLGUuQ09OQ0VQVFVBTF9HUkFQSD0iY29uY2VwdHVhbF9ncmFwaCIsZS5QUk9GSUxFPSJwcm9maWxlIn0pKEJzfHwoQnM9e30pKTt2YXIgdmU9e05vZGU6e0NPTlRBSU5FUjoibm9kZXMiLEdST1VQOiJub2RlIixTSEFQRToibm9kZXNoYXBlIixDT0xPUl9UQVJHRVQ6Im5vZGVjb2xvcnRhcmdldCIsTEFCRUw6Im5vZGVsYWJlbCIsQlVUVE9OX0NPTlRBSU5FUjoiYnV0dG9uY29udGFpbmVyIixCVVRUT05fQ0lSQ0xFOiJidXR0b25jaXJjbGUiLEVYUEFORF9CVVRUT046ImV4cGFuZGJ1dHRvbiIsQ09MTEFQU0VfQlVUVE9OOiJjb2xsYXBzZWJ1dHRvbiJ9LEVkZ2U6e0NPTlRBSU5FUjoiZWRnZXMiLEdST1VQOiJlZGdlIixMSU5FOiJlZGdlbGluZSIsUkVGRVJFTkNFX0VER0U6InJlZmVyZW5jZWVkZ2UiLFJFRl9MSU5FOiJyZWZsaW5lIixTRUxFQ1RBQkxFOiJzZWxlY3RhYmxlZWRnZSIsU0VMRUNURUQ6InNlbGVjdGVkZWRnZSIsU1RSVUNUVVJBTDoic3RydWN0dXJhbCJ9LEFubm90YXRpb246e09VVEJPWDoib3V0LWFubm90YXRpb25zIixJTkJPWDoiaW4tYW5ub3RhdGlvbnMiLEdST1VQOiJhbm5vdGF0aW9uIixOT0RFOiJhbm5vdGF0aW9uLW5vZGUiLEVER0U6ImFubm90YXRpb24tZWRnZSIsQ09OVFJPTF9FREdFOiJhbm5vdGF0aW9uLWNvbnRyb2wtZWRnZSIsTEFCRUw6ImFubm90YXRpb24tbGFiZWwiLEVMTElQU0lTOiJhbm5vdGF0aW9uLWVsbGlwc2lzIn0sU2NlbmU6e0dST1VQOiJzY2VuZSIsQ09SRToiY29yZSIsRlVOQ1RJT05fTElCUkFSWToiZnVuY3Rpb24tbGlicmFyeSIsSU5FWFRSQUNUOiJpbi1leHRyYWN0IixPVVRFWFRSQUNUOiJvdXQtZXh0cmFjdCJ9LFN1YnNjZW5lOntHUk9VUDoic3Vic2NlbmUifSxPUE5PREU6Im9wIixNRVRBTk9ERToibWV0YSIsU0VSSUVTTk9ERToic2VyaWVzIixCUklER0VOT0RFOiJicmlkZ2UiLEVMTElQU0lTTk9ERToiZWxsaXBzaXMifSxKND17RWRnZTp7TEFCRUw6My41fSxBbm5vdGF0aW9uOntMQUJFTDo1fSxOb2RlOntFWFBBTkRFRF9MQUJFTDo5LFNFUklFU19MQUJFTDo4LE9QX0xBQkVMOjYsSEVBTFRIX1BJTExfU1RBVF9MQUJFTDo0fX0sanU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjtmdW5jdGlvbiBnMChlLHQscil7bGV0IG49ZS5ub2RlKCkuY2hpbGROb2Rlcztmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKyl7bGV0IG89bltpXTtpZihvLnRhZ05hbWU9PT10KXtpZihyIGluc3RhbmNlb2YgQXJyYXkpe2xldCBhPSEwO2ZvcihsZXQgcz0wO3M8ci5sZW5ndGg7cysrKWE9YSYmby5jbGFzc0xpc3QuY29udGFpbnMocltzXSk7aWYoYSlyZXR1cm4gSHQobyl9ZWxzZSBpZighcnx8by5jbGFzc0xpc3QuY29udGFpbnMocikpcmV0dXJuIEh0KG8pfX1yZXR1cm4gSHQobnVsbCl9ZnVuY3Rpb24gQW4oZSx0LHIsbil7bGV0IGk9ZzAoZSx0LHIpO2lmKCFpLmVtcHR5KCkpcmV0dXJuIGk7bGV0IG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdCk7aWYociBpbnN0YW5jZW9mIEFycmF5KWZvcihsZXQgYT0wO2E8ci5sZW5ndGg7YSsrKW8uY2xhc3NMaXN0LmFkZChyW2FdKTtlbHNlIG8uY2xhc3NMaXN0LmFkZChyKTtyZXR1cm4gbj9lLm5vZGUoKS5pbnNlcnRCZWZvcmUobyxuKTplLm5vZGUoKS5hcHBlbmRDaGlsZChvKSxIdChvKS5kYXR1bShlLmRhdHVtKCkpfXZhciBLUz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnRvdGFsQnl0ZXM9MCx0aGlzLm91dHB1dFNpemU9dH1hZGRFeGVjdXRpb25UaW1lKHQscil7dGhpcy5zdGFydFRpbWUhPW51bGw/dGhpcy5zdGFydFRpbWU9TWF0aC5taW4odGhpcy5zdGFydFRpbWUsdCk6dGhpcy5zdGFydFRpbWU9dCx0aGlzLmVuZFRpbWUhPW51bGw/dGhpcy5lbmRUaW1lPU1hdGgubWF4KHRoaXMuZW5kVGltZSxyKTp0aGlzLmVuZFRpbWU9cn1hZGRCeXRlc0FsbG9jYXRpb24odCl7dGhpcy50b3RhbEJ5dGVzIT1udWxsP3RoaXMudG90YWxCeXRlcz1NYXRoLm1heCh0aGlzLnRvdGFsQnl0ZXMsdCk6dGhpcy50b3RhbEJ5dGVzPXR9Y29tYmluZSh0KXt0LnRvdGFsQnl0ZXMhPW51bGwmJih0aGlzLnRvdGFsQnl0ZXMrPXQudG90YWxCeXRlcyksdC5nZXRUb3RhbE1pY3JvcygpIT1udWxsJiZ0aGlzLmFkZEV4ZWN1dGlvblRpbWUodC5zdGFydFRpbWUsdC5lbmRUaW1lKX1nZXRUb3RhbE1pY3Jvcygpe3JldHVybiB0aGlzLnN0YXJ0VGltZT09bnVsbHx8dGhpcy5lbmRUaW1lPT1udWxsP251bGw6dGhpcy5lbmRUaW1lLXRoaXMuc3RhcnRUaW1lfX0sUTQ9Ljc1LHRQPTEyLHRjcj0uMyxlY3I9WzEsNWU2XSxYc2U9Wl8oKS5leHBvbmVudCh0Y3IpLmRvbWFpbihlY3IpLnJhbmdlKFtRNCx0UF0pLmNsYW1wKCEwKTt2YXIgWlM9RWUoT2UoKSwxKTt2YXIgS3NlPTIwO2Z1bmN0aW9uIHJjcihlKXtyZXR1cm4gZS5oYXNPd25Qcm9wZXJ0eSgidGltaW5nSWQiKX1mdW5jdGlvbiBQbyhlKXtyY3IoZSk/KFpLdCxlLnRpbWluZ0lkLGUuZXZlbnRWYWx1ZSx2b2lkIDApOihLS3QsZS5hY3Rpb25JZCxlLmV2ZW50TGFiZWwsdm9pZCAwKX1mdW5jdGlvbiBOZChlLHQscil7bGV0IG49RGF0ZS5ub3coKSxpPXQoKSxvPURhdGUubm93KCktbjtyZXR1cm4gY29uc29sZS5sb2coZSwiOiIsbywibXMiKSxyJiZQbyh7dGltaW5nSWQ6cixldmVudFZhbHVlOm99KSxpfWZ1bmN0aW9uIG5QKGUpe3JldHVybntzZXRNZXNzYWdlOmZ1bmN0aW9uKHQpe2Uuc2V0KCJwcm9ncmVzcyIse3ZhbHVlOmUucHJvZ3Jlc3MudmFsdWUsbXNnOnR9KX0sdXBkYXRlUHJvZ3Jlc3M6ZnVuY3Rpb24odCl7ZS5zZXQoInByb2dyZXNzIix7dmFsdWU6ZS5wcm9ncmVzcy52YWx1ZSt0LG1zZzplLnByb2dyZXNzLm1zZ30pfSxyZXBvcnRFcnJvcjpmdW5jdGlvbih0LHIpe2NvbnNvbGUuZXJyb3Ioci5zdGFjayksZS5zZXQoInByb2dyZXNzIix7dmFsdWU6ZS5wcm9ncmVzcy52YWx1ZSxtc2c6dCxlcnJvcjohMH0pfX19ZnVuY3Rpb24gSlMoZSx0LHIpe3JldHVybntzZXRNZXNzYWdlOmZ1bmN0aW9uKG4pe2Uuc2V0TWVzc2FnZShyKyI6ICIrbil9LHVwZGF0ZVByb2dyZXNzOmZ1bmN0aW9uKG4pe2UudXBkYXRlUHJvZ3Jlc3Mobip0LzEwMCl9LHJlcG9ydEVycm9yOmZ1bmN0aW9uKG4saSl7ZS5yZXBvcnRFcnJvcihyKyI6ICIrbixpKX19fWZ1bmN0aW9uIFpzZShlLHQscixuLGkpe24uc2V0TWVzc2FnZShlKTt0cnl7bGV0IG89TmQoZSxyLGkpO3JldHVybiBuLnVwZGF0ZVByb2dyZXNzKHQpLG99Y2F0Y2gobyl7cmV0dXJuIG4ucmVwb3J0RXJyb3IoIkZhaWxlZCAiK2UsbyksbnVsbH19ZnVuY3Rpb24gcjEoZSx0LHIsbixpKXtyZXR1cm4gbmV3IFByb21pc2UoKG8sYSk9PntuLnNldE1lc3NhZ2UoZSksc2V0VGltZW91dChmdW5jdGlvbigpe3RyeXtsZXQgcz1OZChlLHIsaSk7bi51cGRhdGVQcm9ncmVzcyh0KSxvKHMpfWNhdGNoKHMpe24ucmVwb3J0RXJyb3IoIkZhaWxlZCAiK2Uscyl9fSxLc2UpfSl9ZnVuY3Rpb24gbUgoZSx0LHIsbixpKXtyZXR1cm4gbmV3IFByb21pc2UoKG8sYSk9PntsZXQgcz1mdW5jdGlvbihsKXtuLnJlcG9ydEVycm9yKCJGYWlsZWQgIitlLGwpLGEobCl9O24uc2V0TWVzc2FnZShlKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dHJ5e2xldCBsPURhdGUubm93KCk7cigpLnRoZW4oZnVuY3Rpb24oYyl7bGV0IHU9RGF0ZS5ub3coKS1sO2NvbnNvbGUubG9nKGUsIjoiLHUsIm1zIiksbi51cGRhdGVQcm9ncmVzcyh0KSxQbyh7dGltaW5nSWQ6aSxldmVudFZhbHVlOnV9KSxvKGMpfSkuY2F0Y2gocyl9Y2F0Y2gobCl7cyhsKX19LEtzZSl9KX1mdW5jdGlvbiBKc2UoZSl7cmV0dXJuIGUucmVwbGFjZSgvKFs6LlxbXF0sL1xcXChcKV0pL2csIlxcJDEiKX12YXIgaVA9W3tzeW1ib2w6IkIifSx7c3ltYm9sOiJLQiIsbnVtVW5pdHM6MTAyNH0se3N5bWJvbDoiTUIiLG51bVVuaXRzOjEwMjR9LHtzeW1ib2w6IkdCIixudW1Vbml0czoxMDI0fSx7c3ltYm9sOiJUQiIsbnVtVW5pdHM6MTAyNH0se3N5bWJvbDoiUEIiLG51bVVuaXRzOjEwMjR9XSxvUD1be3N5bWJvbDoiXHhCNXMifSx7c3ltYm9sOiJtcyIsbnVtVW5pdHM6MWUzfSx7c3ltYm9sOiJzIixudW1Vbml0czoxZTN9LHtzeW1ib2w6Im1pbiIsbnVtVW5pdHM6NjB9LHtzeW1ib2w6ImhyIixudW1Vbml0czo2MH0se3N5bWJvbDoiZGF5cyIsbnVtVW5pdHM6MjR9XTtmdW5jdGlvbiBEZChlLHQscj0wKXtyZXR1cm4gcisxPHQubGVuZ3RoJiZlPj10W3IrMV0ubnVtVW5pdHM/RGQoZS90W3IrMV0ubnVtVW5pdHMsdCxyKzEpOk51bWJlcihlLnRvUHJlY2lzaW9uKDMpKSsiICIrdFtyXS5zeW1ib2x9ZnVuY3Rpb24gZ0goZSl7cmV0dXJuISEoZSYmKGUudG90YWxCeXRlcz4wfHxlLmdldFRvdGFsTWljcm9zKCk+MHx8ZS5vdXRwdXRTaXplKSl9ZnVuY3Rpb24gemx0KGUpe2lmKGUubGVuZ3RoPDIpcmV0dXJuIGU7bGV0IHQ9MCxyPTAsbj1aUy5taW4oWlMubWFwKGUsaT0+aS5sZW5ndGgpKTtmb3IoOzspe3QrKztsZXQgaT1aUy5tYXAoZSxhPT5hLnN1YnN0cmluZygwLHQpKTtpZihpLmV2ZXJ5KChhLHMpPT5zPT09MD8hMDphPT09aVtzLTFdKSl7aWYodD49bilyZXR1cm4gZTtyPXR9ZWxzZSBicmVha31yZXR1cm4gWlMubWFwKGUsaT0+aS5zdWJzdHJpbmcocikpfWZ1bmN0aW9uIFFzZShlKXt2YXIgdD0rbmV3IERhdGUtK25ldyBEYXRlKGUvMWUzKTtyZXR1cm4gdDwzZTQ/Imp1c3Qgbm93Ijp0PDZlND9NYXRoLmZsb29yKHQvMWUzKSsiIHNlY29uZHMgYWdvIjp0PDEyZTQ/ImEgbWludXRlIGFnbyI6dDwzNmU1P01hdGguZmxvb3IodC82ZTQpKyIgbWludXRlcyBhZ28iOk1hdGguZmxvb3IodC8zNmU1KT09MT8iYW4gaG91ciBhZ28iOnQ8ODY0ZTU/TWF0aC5mbG9vcih0LzM2ZTUpKyIgaG91cnMgYWdvIjp0PDE3MjhlNT8ieWVzdGVyZGF5IjpNYXRoLmZsb29yKHQvODY0ZTUpKyIgZGF5cyBhZ28ifXZhciBuY3I9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksclA9bmNyLmdldENvbnRleHQoIjJkIik7ZnVuY3Rpb24gJHNlKGUsdCl7cmV0dXJuIHJQJiYoclAuZm9udD1gJHt0fXB4IFJvYm90bywgc2Fucy1zZXJpZmApLHJQPT1udWxsP3ZvaWQgMDpyUC5tZWFzdXJlVGV4dChlKS53aWR0aH1mdW5jdGlvbiB0bGUoZSx0LHIpe2lmKCFlKXJldHVybiIiO2lmKCRzZShlLHQpPD1yKXJldHVybiBlO2xldCBuPTAsaT1lLmxlbmd0aDtmb3IoO248aTspe2xldCBvPW4rTWF0aC5yb3VuZCgoaS1uKS8yKSxhPWUuc2xpY2UoMCxvKSsiXHUyMDI2Ijskc2UoYSx0KTw9cj9uPW86aT1vLTF9cmV0dXJuIG49PT0wP2VbMF06ZS5zbGljZSgwLG4pKyJcdTIwMjYifXZhciBkSD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZXZlbnRUeXBlVG9MaXN0ZW5lcnM9bmV3IE1hcH1nZXRMaXN0ZW5lcnModCl7cmV0dXJuIHRoaXMuZXZlbnRUeXBlVG9MaXN0ZW5lcnMuaGFzKHQpfHx0aGlzLmV2ZW50VHlwZVRvTGlzdGVuZXJzLnNldCh0LFtdKSx0aGlzLmV2ZW50VHlwZVRvTGlzdGVuZXJzLmdldCh0KX1hZGRMaXN0ZW5lcih0LHIpe3ZhciBuOyhuPXRoaXMuZ2V0TGlzdGVuZXJzKHQpKT09bnVsbHx8bi5wdXNoKHIpfXJlbW92ZUxpc3RlbmVyKHQscil7dmFyIGk7bGV0IG49KGk9dGhpcy5nZXRMaXN0ZW5lcnModCkpPT1udWxsP3ZvaWQgMDppLmZpbHRlcihvPT5vIT09cik7dGhpcy5ldmVudFR5cGVUb0xpc3RlbmVycy5zZXQodCxuKX1kaXNwYXRjaEV2ZW50KHQscil7Zm9yKGxldCBuIG9mIHRoaXMuZ2V0TGlzdGVuZXJzKHQpKW4ocil9fTt2YXIgUGw9Ii8iLHFjPSJfX3Jvb3RfXyIsTWE9Il9fZnVuY3Rpb25fbGlicmFyeV9fIixpbGU9Il90b29fbGFyZ2VfYXR0cnMiO3ZhciBvbGU9Ii0tIixfMDsoZnVuY3Rpb24oZSl7ZVtlLkZVTEw9MF09IkZVTEwiLGVbZS5FTUJFRERFRD0xXT0iRU1CRURERUQiLGVbZS5NRVRBPTJdPSJNRVRBIixlW2UuU0VSSUVTPTNdPSJTRVJJRVMiLGVbZS5DT1JFPTRdPSJDT1JFIixlW2UuU0hBRE9XPTVdPSJTSEFET1ciLGVbZS5CUklER0U9Nl09IkJSSURHRSIsZVtlLkVER0U9N109IkVER0UifSkoXzB8fChfMD17fSkpO3ZhciBqdDsoZnVuY3Rpb24oZSl7ZVtlLk1FVEE9MF09Ik1FVEEiLGVbZS5PUD0xXT0iT1AiLGVbZS5TRVJJRVM9Ml09IlNFUklFUyIsZVtlLkJSSURHRT0zXT0iQlJJREdFIixlW2UuRUxMSVBTSVM9NF09IkVMTElQU0lTIn0pKGp0fHwoanQ9e30pKTt2YXIgdXI7KGZ1bmN0aW9uKGUpe2VbZS5JTkNMVURFPTBdPSJJTkNMVURFIixlW2UuRVhDTFVERT0xXT0iRVhDTFVERSIsZVtlLlVOU1BFQ0lGSUVEPTJdPSJVTlNQRUNJRklFRCJ9KSh1cnx8KHVyPXt9KSk7dmFyIG9zOyhmdW5jdGlvbihlKXtlW2UuR1JPVVA9MF09IkdST1VQIixlW2UuVU5HUk9VUD0xXT0iVU5HUk9VUCJ9KShvc3x8KG9zPXt9KSk7dmFyIGljcj0iX291dHB1dF9zaGFwZXMiLG9jcj0iX1hsYUNsdXN0ZXIiLFh1PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5ub2Rlcz17fSx0aGlzLmVkZ2VzPVtdfX0sX0g9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy50eXBlPWp0LkVMTElQU0lTLHRoaXMuaXNHcm91cE5vZGU9ITEsdGhpcy5jYXJkaW5hbGl0eT0xLHRoaXMucGFyZW50Tm9kZT1udWxsLHRoaXMuc3RhdHM9bnVsbCx0aGlzLnNldE51bU1vcmVOb2Rlcyh0KSx0aGlzLmluY2x1ZGU9dXIuVU5TUEVDSUZJRUR9c2V0TnVtTW9yZU5vZGVzKHQpe3RoaXMubnVtTW9yZU5vZGVzPXQsdGhpcy5uYW1lPSIuLi4gIit0KyIgbW9yZSJ9fSx5MD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLm9wPXQub3AsdGhpcy5uYW1lPXQubmFtZSx0aGlzLmRldmljZT10LmRldmljZSx0aGlzLmF0dHI9dC5hdHRyLHRoaXMuaW5wdXRzPWNjcih0LmlucHV0KSx0aGlzLm91dHB1dFNoYXBlcz1hY3IodC5hdHRyKSx0aGlzLnhsYUNsdXN0ZXI9c2NyKHQuYXR0ciksdGhpcy5jb21wYXRpYmxlPSExLHRoaXMudHlwZT1qdC5PUCx0aGlzLmlzR3JvdXBOb2RlPSExLHRoaXMuY2FyZGluYWxpdHk9MSx0aGlzLmluRW1iZWRkaW5ncz1bXSx0aGlzLm91dEVtYmVkZGluZ3M9W10sdGhpcy5wYXJlbnROb2RlPW51bGwsdGhpcy5pbmNsdWRlPXVyLlVOU1BFQ0lGSUVELHRoaXMub3duaW5nU2VyaWVzPW51bGx9fTtmdW5jdGlvbiBsUChlLHQ9e30pe3JldHVybiBuZXcgYVAoZSx0KX1mdW5jdGlvbiBhbGUoZSx0LHIpe3BuLmVhY2goZS5ub2RlcyxuPT57bi5zdGF0cz1udWxsfSkscG4uZWFjaCh0LmRldl9zdGF0cyxuPT57ciYmIXJbbi5kZXZpY2VdfHxwbi5lYWNoKG4ubm9kZV9zdGF0cyxpPT57bGV0IG89aS5ub2RlX25hbWUgaW4gZS5ub2Rlcz9pLm5vZGVfbmFtZTpzUChpLm5vZGVfbmFtZSk7aWYoIShvIGluIGUubm9kZXMpKXJldHVybjtsZXQgYT0wO2kubWVtb3J5JiZwbi5lYWNoKGkubWVtb3J5LGw9PntsLnRvdGFsX2J5dGVzJiYobC50b3RhbF9ieXRlcz4wP2ErPU51bWJlcihsLnRvdGFsX2J5dGVzKTpjb25zb2xlLmxvZygiaWdub3JpbmcgbmVnYXRpdmUgbWVtb3J5IGFsbG9jYXRpb24gZm9yICIrbykpfSk7bGV0IHM9bnVsbDtpLm91dHB1dCYmKHM9cG4ubWFwKGkub3V0cHV0LGw9PnBuLm1hcChsLnRlbnNvcl9kZXNjcmlwdGlvbi5zaGFwZS5kaW0sYz0+TnVtYmVyKGMuc2l6ZSkpKSksZS5ub2Rlc1tvXS5kZXZpY2U9bi5kZXZpY2UsZS5ub2Rlc1tvXS5zdGF0cz09bnVsbCYmKGUubm9kZXNbb10uc3RhdHM9bmV3IEtTKHMpKSxlLm5vZGVzW29dLnN0YXRzLmFkZEJ5dGVzQWxsb2NhdGlvbihhKSxpLmFsbF9lbmRfcmVsX21pY3JvcyYmKGkuYWxsX2VuZF9yZWxfbWljcm9zPjA/ZS5ub2Rlc1tvXS5zdGF0cy5hZGRFeGVjdXRpb25UaW1lKGkuYWxsX3N0YXJ0X21pY3JvcyxpLmFsbF9zdGFydF9taWNyb3MraS5hbGxfZW5kX3JlbF9taWNyb3MpOmNvbnNvbGUubG9nKCJpZ25vcmluZyBuZWdhdGl2ZSBydW50aW1lIGZvciAiK28pKX0pfSl9dmFyIGFQPWNsYXNze2NvbnN0cnVjdG9yKHQscj17fSl7dGhpcy5uYW1lPXQsdGhpcy50eXBlPWp0Lk1FVEEsdGhpcy5kZXB0aD0xLHRoaXMuaXNHcm91cE5vZGU9ITAsdGhpcy5jYXJkaW5hbGl0eT0wLHRoaXMubWV0YWdyYXBoPWUzKHQsXzAuTUVUQSxyKSx0aGlzLmJyaWRnZWdyYXBoPW51bGwsdGhpcy5vcEhpc3RvZ3JhbT17fSx0aGlzLmRldmljZUhpc3RvZ3JhbT17fSx0aGlzLnhsYUNsdXN0ZXJIaXN0b2dyYW09e30sdGhpcy5jb21wYXRpYmlsaXR5SGlzdG9ncmFtPXtjb21wYXRpYmxlOjAsaW5jb21wYXRpYmxlOjB9LHRoaXMudGVtcGxhdGVJZD1udWxsLHRoaXMucGFyZW50Tm9kZT1udWxsLHRoaXMuaGFzTm9uQ29udHJvbEVkZ2VzPSExLHRoaXMuaW5jbHVkZT11ci5VTlNQRUNJRklFRCx0aGlzLmFzc29jaWF0ZWRGdW5jdGlvbj0iIn1nZXRGaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMubWV0YWdyYXBoLm5vZGUodGhpcy5tZXRhZ3JhcGgubm9kZXMoKVswXSl9Z2V0Um9vdE9wKCl7bGV0IHQ9dGhpcy5uYW1lLnNwbGl0KCIvIikscj10aGlzLm5hbWUrIi8oIit0W3QubGVuZ3RoLTFdKyIpIjtyZXR1cm4gdGhpcy5tZXRhZ3JhcGgubm9kZShyKX1sZWF2ZXMoKXtsZXQgdD1bXSxyPVt0aGlzXSxuO2Zvcig7ci5sZW5ndGg7KXtsZXQgaT1yLnNoaWZ0KCk7aSE9bnVsbCYmaS5pc0dyb3VwTm9kZT8obj1pLm1ldGFncmFwaCxwbi5lYWNoKG4ubm9kZXMoKSxvPT5yLnB1c2gobi5ub2RlKG8pKSkpOnQucHVzaChpPT1udWxsP3ZvaWQgMDppLm5hbWUpfXJldHVybiB0fX07ZnVuY3Rpb24gSGx0KGUsdCl7cmV0dXJuIG5ldyBHZihlLHQpfXZhciBHZj1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIpe3RoaXMudj10LHRoaXMudz1yLHRoaXMuYmFzZUVkZ2VMaXN0PVtdLHRoaXMuaW5ib3VuZD1udWxsLHRoaXMubnVtUmVndWxhckVkZ2VzPTAsdGhpcy5udW1Db250cm9sRWRnZXM9MCx0aGlzLm51bVJlZkVkZ2VzPTAsdGhpcy50b3RhbFNpemU9MH1hZGRCYXNlRWRnZSh0LHIpe3RoaXMuYmFzZUVkZ2VMaXN0LnB1c2godCksdC5pc0NvbnRyb2xEZXBlbmRlbmN5P3RoaXMubnVtQ29udHJvbEVkZ2VzKz0xOnRoaXMubnVtUmVndWxhckVkZ2VzKz0xLHQuaXNSZWZlcmVuY2VFZGdlJiYodGhpcy5udW1SZWZFZGdlcys9MSksdGhpcy50b3RhbFNpemUrPUdmLmNvbXB1dGVTaXplT2ZFZGdlKHQsciksci5tYXhNZXRhRWRnZVNpemU9TWF0aC5tYXgoci5tYXhNZXRhRWRnZVNpemUsdGhpcy50b3RhbFNpemUpfXN0YXRpYyBjb21wdXRlU2l6ZU9mRWRnZSh0LHIpe2xldCBuPXIubm9kZSh0LnYpO2lmKCFuLm91dHB1dFNoYXBlcylyZXR1cm4gMTtyLmhhc1NoYXBlSW5mbz0hMDtsZXQgaT1PYmplY3Qua2V5cyhuLm91dHB1dFNoYXBlcykubWFwKG89Pm4ub3V0cHV0U2hhcGVzW29dKS5tYXAobz0+bz09bnVsbD8xOm8ucmVkdWNlKChhLHMpPT4ocz09PS0xJiYocz0xKSxhKnMpLDEpKTtyZXR1cm4gcG4uc3VtKGkpfX07ZnVuY3Rpb24gUVMoZSx0LHIsbixpLG8pe3JldHVybiBuZXcgQmx0KGUsdCxyLG4saSxvKX1mdW5jdGlvbiB0MyhlLHQscixuLGkpe2xldCBvPXR5cGVvZiBuIT0idW5kZWZpbmVkIiYmdHlwZW9mIGkhPSJ1bmRlZmluZWQiPyJbIituKyItIitpKyJdIjoiIyIsYT1lK28rdDtyZXR1cm4ocj9yKyIvIjoiIikrYX12YXIgQmx0PWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGksbyxhKXt0aGlzLm5hbWU9b3x8dDModCxyLG4pLHRoaXMudHlwZT1qdC5TRVJJRVMsdGhpcy5oYXNMb29wPSExLHRoaXMucHJlZml4PXQsdGhpcy5zdWZmaXg9cix0aGlzLmNsdXN0ZXJJZD1pLHRoaXMuaWRzPVtdLHRoaXMucGFyZW50PW4sdGhpcy5pc0dyb3VwTm9kZT0hMCx0aGlzLmNhcmRpbmFsaXR5PTAsdGhpcy5tZXRhZ3JhcGg9ZTMobyxfMC5TRVJJRVMsYSksdGhpcy5icmlkZ2VncmFwaD1udWxsLHRoaXMucGFyZW50Tm9kZT1udWxsLHRoaXMuZGV2aWNlSGlzdG9ncmFtPXt9LHRoaXMueGxhQ2x1c3Rlckhpc3RvZ3JhbT17fSx0aGlzLmNvbXBhdGliaWxpdHlIaXN0b2dyYW09e2NvbXBhdGlibGU6MCxpbmNvbXBhdGlibGU6MH0sdGhpcy5oYXNOb25Db250cm9sRWRnZXM9ITEsdGhpcy5pbmNsdWRlPXVyLlVOU1BFQ0lGSUVEfX07ZnVuY3Rpb24gYWNyKGUpe2xldCB0PW51bGw7aWYoIWUpcmV0dXJuIG51bGw7Zm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspe2xldHtrZXk6bix2YWx1ZTppfT1lW3JdO2lmKG49PT1pY3Ipe2lmKCFpLmxpc3R8fCFpLmxpc3Quc2hhcGUpcmV0dXJuIG51bGw7bGV0IG89aS5saXN0LnNoYXBlLm1hcChhPT5hLnVua25vd25fcmFuaz9udWxsOmEuZGltPT1udWxsfHxhLmRpbS5sZW5ndGg9PT0xJiZhLmRpbVswXS5zaXplPT1udWxsP1tdOmEuZGltLm1hcChzPT5zLnNpemV8fDApKTtyZXR1cm4gZS5zcGxpY2UociwxKSxvfX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBzY3IoZSl7aWYoIWUpcmV0dXJuIG51bGw7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspaWYoZVt0XS5rZXk9PT1vY3IpcmV0dXJuIGVbdF0udmFsdWUuc3x8bnVsbDtyZXR1cm4gbnVsbH12YXIgbGNyPS9eKFteOl0rKTooKFx3Kzp8KVxkKykkLztmdW5jdGlvbiBjY3IoZSl7bGV0IHQ9W10scj1udWxsO2ZvcihsZXQgbiBvZiBlfHxbXSl7bGV0IGk9bi5zdGFydHNXaXRoKCJeIik7aSYmKG49bi5zdWJzdHJpbmcoMSkpO2xldCBvPW4sYT0iMCIscz1uLmluY2x1ZGVzKCI6IikmJm4ubWF0Y2gobGNyKTtzJiYobz1zWzFdLGE9c1syXSksciE9PW8mJihyPW8sdC5wdXNoKHtuYW1lOm8sb3V0cHV0VGVuc29yS2V5OmEsaXNDb250cm9sRGVwZW5kZW5jeTppfSkpfXJldHVybiB0fWZ1bmN0aW9uIEZsdChlLHQscixuLGksbyl7aWYodD09PXIubmFtZSlyZXR1cm47bGV0IGE9aS5yZWZFZGdlc1tyLm9wKyIgIitvXT09PSEwO2UuZWRnZXMucHVzaCh7djp0LHc6ci5uYW1lLG91dHB1dFRlbnNvcktleTpuLm91dHB1dFRlbnNvcktleSxpc0NvbnRyb2xEZXBlbmRlbmN5Om4uaXNDb250cm9sRGVwZW5kZW5jeSxpc1JlZmVyZW5jZUVkZ2U6YX0pfXZhciBzbGU9e2VuYWJsZUVtYmVkZGluZzohMCxpbkVtYmVkZGluZ1R5cGVzOlsiQ29uc3QiXSxvdXRFbWJlZGRpbmdUeXBlczpbIl5bYS16QS1aXStTdW1tYXJ5JCJdLHJlZkVkZ2VzOnsiQXNzaWduIDAiOiEwLCJBc3NpZ25BZGQgMCI6ITAsIkFzc2lnblN1YiAwIjohMCwiYXNzaWduIDAiOiEwLCJhc3NpZ25fYWRkIDAiOiEwLCJhc3NpZ25fc3ViIDAiOiEwLCJjb3VudF91cF90byAwIjohMCwiU2NhdHRlckFkZCAwIjohMCwiU2NhdHRlclN1YiAwIjohMCwiU2NhdHRlclVwZGF0ZSAwIjohMCwic2NhdHRlcl9hZGQgMCI6ITAsInNjYXR0ZXJfc3ViIDAiOiEwLCJzY2F0dGVyX3VwZGF0ZSAwIjohMH19O2Z1bmN0aW9uIGxsZShlLHQscil7bGV0IG49e30saT17fSxvPXt9LGE9ZWxlKHQuaW5FbWJlZGRpbmdUeXBlcykscz1lbGUodC5vdXRFbWJlZGRpbmdUeXBlcyksbD1bXSxjPWUubm9kZSx1PW5ldyBBcnJheShjLmxlbmd0aCk7cmV0dXJuIHIxKCJOb3JtYWxpemluZyBuYW1lcyIsMzAsKCk9PntsZXQgaD1uZXcgQXJyYXkoYy5sZW5ndGgpLGY9MCxwPWc9PntsZXQgXz1uZXcgeTAoZyk7cmV0dXJuIGEoXyk/KGwucHVzaChfLm5hbWUpLG5bXy5uYW1lXT1fLF8pOnMoXyk/KGwucHVzaChfLm5hbWUpLGlbXy5uYW1lXT1fLHBuLmVhY2goXy5pbnB1dHMseT0+e2xldCB4PXkubmFtZTtvW3hdPW9beF18fFtdLG9beF0ucHVzaChfKX0pLF8pOihoW2ZdPV8sdVtmXT1fLm5hbWUsZisrLF8pfTtwbi5lYWNoKGMscCk7bGV0IGQ9Zz0+e2xldCBfPU1hK2cuc2lnbmF0dXJlLm5hbWU7aWYocCh7bmFtZTpfLGlucHV0OltdLGRldmljZToiIixvcDoiIixhdHRyOltdfSksZy5zaWduYXR1cmUuaW5wdXRfYXJnKXtsZXQgYj0wLFM9Qz0+e2xldCBQPXAoe25hbWU6XytQbCtDLm5hbWUsaW5wdXQ6W10sZGV2aWNlOiIiLG9wOiJpbnB1dF9hcmciLGF0dHI6W3trZXk6IlQiLHZhbHVlOnt0eXBlOkMudHlwZX19XX0pO1AuZnVuY3Rpb25JbnB1dEluZGV4PWIsYisrfTtnLnNpZ25hdHVyZS5pbnB1dF9hcmcubmFtZT9TKGcuc2lnbmF0dXJlLmlucHV0X2FyZyk6cG4uZWFjaChnLnNpZ25hdHVyZS5pbnB1dF9hcmcsUyl9bGV0IHk9MCx4PXt9O2lmKGcuc2lnbmF0dXJlLm91dHB1dF9hcmcpe2xldCBiPVM9Pnt4W18rUGwrUy5uYW1lXT15LHkrK307Zy5zaWduYXR1cmUub3V0cHV0X2FyZy5uYW1lP2IoZy5zaWduYXR1cmUub3V0cHV0X2FyZyk6cG4uZWFjaChnLnNpZ25hdHVyZS5vdXRwdXRfYXJnLGIpfXBuLmVhY2goZy5ub2RlX2RlZixiPT57Yi5uYW1lPV8rIi8iK2IubmFtZSx0eXBlb2YgYi5pbnB1dD09InN0cmluZyImJihiLmlucHV0PVtiLmlucHV0XSk7bGV0IFM9cChiKTtwbi5pc051bWJlcih4W2IubmFtZV0pJiYoUy5mdW5jdGlvbk91dHB1dEluZGV4PXhbYi5uYW1lXSkscG4uZWFjaChTLmlucHV0cyxDPT57Qy5uYW1lPV8rUGwrQy5uYW1lfSl9KX07cmV0dXJuIGUubGlicmFyeSYmZS5saWJyYXJ5LmZ1bmN0aW9uJiZwbi5lYWNoKGUubGlicmFyeS5mdW5jdGlvbixkKSxoLnNwbGljZShmKSx1LnNwbGljZShmKSxofSxyLGpyLk5PUk1BTElaSU5HX05BTUVTKS50aGVuKGg9PnIxKCJCdWlsZGluZyB0aGUgZGF0YSBzdHJ1Y3R1cmUiLDcwLCgpPT57bGV0IGY9dWNyKHUsbCkscD1uZXcgWHU7cmV0dXJuIHBuLmVhY2goaCxkPT57bGV0IGc9ZltkLm5hbWVdfHxkLm5hbWU7cC5ub2Rlc1tnXT1kLGQubmFtZSBpbiBvJiYoZC5vdXRFbWJlZGRpbmdzPW9bZC5uYW1lXSxwbi5lYWNoKGQub3V0RW1iZWRkaW5ncyxfPT57Xy5uYW1lPWZbXy5uYW1lXXx8Xy5uYW1lfSkpLGQubmFtZT1nfSkscG4uZWFjaChoLGQ9Pntwbi5lYWNoKGQuaW5wdXRzLChnLF8pPT57bGV0IHk9Zy5uYW1lO2lmKHkgaW4gbil7bGV0IHg9blt5XTtkLmluRW1iZWRkaW5ncy5wdXNoKHgpO2ZvcihsZXQgYiBvZiB4LmlucHV0cylGbHQocCxmW2IubmFtZV18fGIubmFtZSxkLGIsdCxfKX1lbHNlIGlmKHkgaW4gaSl7bGV0IHg9aVt5XTtmb3IobGV0IGIgb2YgeC5pbnB1dHMpRmx0KHAsZltiLm5hbWVdfHxiLm5hbWUsZCxnLHQsXyl9ZWxzZSBGbHQocCxmW3ldfHx5LGQsZyx0LF8pfSl9KSxwbi5lYWNoKG4sKGQsZyk9PntkLm5hbWU9ZltkLm5hbWVdfHxkLm5hbWV9KSxwfSxyLGpyLkJVSUxEX1NMSU1fR1JBUEgpKX1mdW5jdGlvbiBlMyhlLHQscj17fSl7bGV0IG49bmV3IG5sZS5ncmFwaGxpYi5HcmFwaChyKTtyZXR1cm4gbi5zZXRHcmFwaCh7bmFtZTplLHJhbmtkaXI6ci5yYW5rZGlyfHwiQlQiLHR5cGU6dH0pLG59ZnVuY3Rpb24gZWxlKGUpe3JldHVybiBmdW5jdGlvbih0KXtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7bGV0IG49bmV3IFJlZ0V4cChlW3JdKTtpZih0eXBlb2YgdC5vcD09InN0cmluZyImJnQub3AubWF0Y2gobikpcmV0dXJuITB9cmV0dXJuITF9fWZ1bmN0aW9uIHNQKGUpe2xldCB0PWUuc3BsaXQoUGwpO3JldHVybiBlK1BsKyIoIit0W3QubGVuZ3RoLTFdKyIpIn1mdW5jdGlvbiB1Y3IoZSx0KXtsZXQgcj17fSxuPXt9O2Uuc29ydCgpO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGgtMTsrK2kpe2xldCBvPWVbaV07cG4uZWFjaChjUChvKS5zbGljZSgwLC0xKSxhPT57blthXT0hMH0pO2ZvcihsZXQgYT1pKzE7YTxlLmxlbmd0aDsrK2Epe2xldCBzPWVbYV07aWYocG4uc3RhcnRzV2l0aChzLG8pKXtpZihzLmxlbmd0aD5vLmxlbmd0aCYmcy5jaGFyQXQoby5sZW5ndGgpPT09UGwpe3Jbb109c1Aobyk7YnJlYWt9fWVsc2UgYnJlYWt9fXJldHVybiBwbi5lYWNoKHQsaT0+e2kgaW4gbiYmKHJbaV09c1AoaSkpfSkscn1mdW5jdGlvbiBybGUoZSl7bGV0IHQ9ZS5ub2RlcygpLm1hcChmdW5jdGlvbihyKXt2YXIgbjtyZXR1cm4obj1lLm5laWdoYm9ycyhyKSk9PW51bGw/dm9pZCAwOm4ubGVuZ3RofSk7cmV0dXJuIHQuc29ydCgpLHR9ZnVuY3Rpb24gY2xlKGUsdCl7bGV0IHI9cmxlKGUpLG49cmxlKHQpO2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKWlmKHJbaV0hPT1uW2ldKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGNQKGUsdCl7bGV0IHI9W10sbj1lLmluZGV4T2YoUGwpO2Zvcig7bj49MDspci5wdXNoKGUuc3Vic3RyaW5nKDAsbikpLG49ZS5pbmRleE9mKFBsLG4rMSk7aWYodCl7bGV0IGk9dFtlXTtpJiZyLnB1c2goaSl9cmV0dXJuIHIucHVzaChlKSxyfWZ1bmN0aW9uIHlIKGUpe3JldHVybiBlPT09dXIuRVhDTFVERT8iQWRkIHRvIG1haW4gZ3JhcGgiOiJSZW1vdmUgZnJvbSBtYWluIGdyYXBoIn1mdW5jdGlvbiB1bGUoZSl7cmV0dXJuIGU9PT1vcy5HUk9VUD8iVW5ncm91cCB0aGlzIHNlcmllcyBvZiBub2RlcyI6Ikdyb3VwIHRoaXMgc2VyaWVzIG9mIG5vZGVzIn12YXIgSGU9RWUoT2UoKSwxKTt2YXIgbjE9RWUoT2UoKSwxKTtmdW5jdGlvbiBobGUoZSx0KXtsZXQgcj1mY3IoZSksbj1wY3Iocix0KTtyZXR1cm4gT2JqZWN0LmtleXMobikuc29ydChpPT5uW2ldLmxldmVsKS5yZWR1Y2UoKGksbyk9PihpW29dPW5bb10saSkse30pfWZ1bmN0aW9uIGhjcihlKXtsZXQgdD1uMS5tYXAoe2RlcHRoOmUuZGVwdGgsInxWfCI6ZS5tZXRhZ3JhcGgubm9kZXMoKS5sZW5ndGgsInxFfCI6ZS5tZXRhZ3JhcGguZWRnZXMoKS5sZW5ndGh9LGZ1bmN0aW9uKG4saSl7cmV0dXJuIGkrIj0iK259KS5qb2luKCIgIikscj1uMS5tYXAoZS5vcEhpc3RvZ3JhbSxmdW5jdGlvbihuLGkpe3JldHVybiBpKyI9IitufSkuam9pbigiLCIpO3JldHVybiB0KyIgW29wc10gIityfWZ1bmN0aW9uIGZjcihlKXtsZXQgdD1lLmdldE5vZGVNYXAoKSxyPU9iamVjdC5rZXlzKHQpLnJlZHVjZSgobixpKT0+e2xldCBvPXRbaV07aWYoby50eXBlIT09anQuTUVUQSlyZXR1cm4gbjtsZXQgYT1pLnNwbGl0KCIvIikubGVuZ3RoLTEscz1oY3IobyksbD1uW3NdfHx7bm9kZXM6W10sbGV2ZWw6YX07cmV0dXJuIG5bc109bCxsLm5vZGVzLnB1c2gobyksbC5sZXZlbD5hJiYobC5sZXZlbD1hKSxufSx7fSk7cmV0dXJuIE9iamVjdC5rZXlzKHIpLm1hcChuPT5bbixyW25dXSkuZmlsdGVyKChbbixpXSk9PntsZXR7bm9kZXM6b309aTtpZihvLmxlbmd0aD4xKXJldHVybiEwO2xldCBhPW9bMF07cmV0dXJuIGEudHlwZT09PWp0Lk1FVEEmJmEuYXNzb2NpYXRlZEZ1bmN0aW9ufSkuc29ydCgoW24saV0pPT5pLm5vZGVzWzBdLmRlcHRoKX1mdW5jdGlvbiBwY3IoZSx0KXtyZXR1cm4gbjEucmVkdWNlKGUsZnVuY3Rpb24obixpKXtsZXQgbz1pWzBdLGE9aVsxXS5ub2RlcyxzPVtdO3JldHVybiBhLmZvckVhY2goZnVuY3Rpb24obCl7Zm9yKGxldCBjPTA7YzxzLmxlbmd0aDtjKyspaWYoIXR8fGRjcihzW2NdLm1ldGFub2RlLm1ldGFncmFwaCxsLm1ldGFncmFwaCkpe2wudGVtcGxhdGVJZD1zW2NdLm1ldGFub2RlLnRlbXBsYXRlSWQsc1tjXS5tZW1iZXJzLnB1c2gobC5uYW1lKTtyZXR1cm59bC50ZW1wbGF0ZUlkPW8rIlsiK3MubGVuZ3RoKyJdIixzLnB1c2goe21ldGFub2RlOmwsbWVtYmVyczpbbC5uYW1lXX0pfSkscy5mb3JFYWNoKGZ1bmN0aW9uKGwpe25bbC5tZXRhbm9kZS50ZW1wbGF0ZUlkXT17bGV2ZWw6aVsxXS5sZXZlbCxub2RlczpsLm1lbWJlcnN9fSksbn0se30pfWZ1bmN0aW9uIHZIKGUsdCxyKXtyZXR1cm4gbjEuc29ydEJ5KGUsW249PnQubm9kZShuKS5vcCxuPT50Lm5vZGUobikudGVtcGxhdGVJZCxuPT57dmFyIGk7cmV0dXJuKGk9dC5uZWlnaGJvcnMobikpPT1udWxsP3ZvaWQgMDppLmxlbmd0aH0sbj0+e3ZhciBpO3JldHVybihpPXQucHJlZGVjZXNzb3JzKG4pKT09bnVsbD92b2lkIDA6aS5sZW5ndGh9LG49Pnt2YXIgaTtyZXR1cm4oaT10LnN1Y2Nlc3NvcnMobikpPT1udWxsP3ZvaWQgMDppLmxlbmd0aH0sbj0+bi5zdWJzdHIoci5sZW5ndGgpXSl9ZnVuY3Rpb24gZGNyKGUsdCl7aWYoIWNsZShlLHQpKXJldHVybiExO2xldCByPWUuZ3JhcGgoKS5uYW1lLG49dC5ncmFwaCgpLm5hbWUsaT17fSxvPXt9LGE9W107ZnVuY3Rpb24gcyh1LGgpe2xldCBmPXUuc3Vic3RyKHIubGVuZ3RoKSxwPWguc3Vic3RyKG4ubGVuZ3RoKTtyZXR1cm4gaVtmXV5vW3BdPyhjb25zb2xlLndhcm4oImRpZmZlcmVudCB2aXNpdCBwYXR0ZXJuIiwiWyIrcisiXSIsZiwiWyIrbisiXSIscCksITApOihpW2ZdfHwoaVtmXT1vW3BdPSEwLGEucHVzaCh7bjE6dSxuMjpofSkpLCExKX1sZXQgbD1lLnNvdXJjZXMoKSxjPXQuc291cmNlcygpO2lmKGwubGVuZ3RoIT09Yy5sZW5ndGgpcmV0dXJuIGNvbnNvbGUubG9nKCJkaWZmZXJlbnQgc291cmNlIGxlbmd0aCIpLCExO2w9dkgobCxlLHIpLGM9dkgoYyx0LG4pO2ZvcihsZXQgdT0wO3U8bC5sZW5ndGg7dSsrKWlmKHMobFt1XSxjW3VdKSlyZXR1cm4hMTtmb3IoO2EubGVuZ3RoPjA7KXtsZXQgdT1hLnBvcCgpO2lmKCFtY3IoZS5ub2RlKHU9PW51bGw/dm9pZCAwOnUubjEpLHQubm9kZSh1PT1udWxsP3ZvaWQgMDp1Lm4yKSkpcmV0dXJuITE7bGV0IGY9ZS5zdWNjZXNzb3JzKHU9PW51bGw/dm9pZCAwOnUubjEpLHA9dC5zdWNjZXNzb3JzKHU9PW51bGw/dm9pZCAwOnUubjIpO2lmKChmPT1udWxsP3ZvaWQgMDpmLmxlbmd0aCkhPT0ocD09bnVsbD92b2lkIDA6cC5sZW5ndGgpKXJldHVybiBjb25zb2xlLmxvZygiIyBvZiBzdWNjZXNzb3JzIG1pc21hdGNoIixmLHApLCExO2Y9dkgoZixlLHIpLHA9dkgocCx0LG4pO2ZvcihsZXQgZD0wO2Q8KGY9PW51bGw/dm9pZCAwOmYubGVuZ3RoKTtkKyspaWYocyhmPT1udWxsP3ZvaWQgMDpmW2RdLHA9PW51bGw/dm9pZCAwOnBbZF0pKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIG1jcihlLHQpe2lmKGUudHlwZT09PWp0Lk1FVEEpe2xldCByPWUsbj10O3JldHVybiEhci50ZW1wbGF0ZUlkJiYhIW4udGVtcGxhdGVJZCYmci50ZW1wbGF0ZUlkPT09bi50ZW1wbGF0ZUlkfWVsc2V7aWYoZS50eXBlPT09anQuT1AmJnQudHlwZT09PWp0Lk9QKXJldHVybiBlLm9wPT09dC5vcDtpZihlLnR5cGU9PT1qdC5TRVJJRVMmJnQudHlwZT09PWp0LlNFUklFUyl7bGV0IHI9ZSxuPXQsaT1yLm1ldGFncmFwaC5ub2RlQ291bnQoKTtyZXR1cm4gaT09PW4ubWV0YWdyYXBoLm5vZGVDb3VudCgpJiYoaT09PTB8fHIubWV0YWdyYXBoLm5vZGUoci5tZXRhZ3JhcGgubm9kZXMoKVswXSkub3A9PT1uLm1ldGFncmFwaC5ub2RlKG4ubWV0YWdyYXBoLm5vZGVzKClbMF0pLm9wKX19cmV0dXJuITF9dmFyIE9kOyhmdW5jdGlvbihlKXtlW2UuVEVNUExBVEVTX1VQREFURUQ9MF09IlRFTVBMQVRFU19VUERBVEVEIn0pKE9kfHwoT2Q9e30pKTt2YXIgYXM9Y2xhc3MgZXh0ZW5kcyBkSHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuaGFzU2hhcGVJbmZvPSExLHRoaXMubWF4TWV0YUVkZ2VTaXplPTEsdGhpcy5ncmFwaE9wdGlvbnM9e30sdGhpcy50ZW1wbGF0ZXM9bnVsbCx0aGlzLmdyYXBoT3B0aW9ucy5jb21wb3VuZD0hMCx0aGlzLmdyYXBoT3B0aW9ucy5yYW5rZGlyPXQucmFua0RpcmVjdGlvbix0aGlzLnJvb3Q9bFAocWMsdGhpcy5ncmFwaE9wdGlvbnMpLHRoaXMubGlicmFyeUZ1bmN0aW9ucz17fSx0aGlzLnNlcmllc0dyb3VwTWFwPW5ldyBNYXAodC5zZXJpZXNNYXApLHRoaXMuZGV2aWNlcz1udWxsLHRoaXMueGxhQ2x1c3RlcnM9bnVsbCx0aGlzLnZlcmlmeVRlbXBsYXRlPXQudmVyaWZ5VGVtcGxhdGUsdGhpcy5pbmRleD17fSx0aGlzLmluZGV4W3FjXT10aGlzLnJvb3QsdGhpcy5vcmRlcmluZ3M9e319Z2V0U2VyaWVzR3JvdXBUeXBlKHQpe3ZhciByO3JldHVybihyPXRoaXMuc2VyaWVzR3JvdXBNYXAuZ2V0KHQpKSE9bnVsbD9yOm9zLkdST1VQfXNldFNlcmllc0dyb3VwVHlwZSh0LHIpe3JldHVybiB0aGlzLnNlcmllc0dyb3VwTWFwLnNldCh0LHIpfWJ1aWxkU2VyaWVzR3JvdXBNYXBUb2dnbGVkKHQpe2xldCByPXRoaXMuZ2V0U2VyaWVzR3JvdXBUeXBlKHQpPT09b3MuR1JPVVA/b3MuVU5HUk9VUDpvcy5HUk9VUDtyZXR1cm4gbmV3IE1hcChbLi4udGhpcy5zZXJpZXNHcm91cE1hcCxbdCxyXV0pfWdldE5vZGVNYXAoKXtyZXR1cm4gdGhpcy5pbmRleH1ub2RlKHQpe3JldHVybiB0aGlzLmluZGV4W3RdfXNldE5vZGUodCxyKXt0aGlzLmluZGV4W3RdPXJ9Z2V0QnJpZGdlZ3JhcGgodCl7bGV0IHI9dGhpcy5pbmRleFt0XTtpZighcil0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgbm9kZSBpbiBoaWVyYXJjaHk6ICIrdCk7aWYoISgibWV0YWdyYXBoImluIHIpKXJldHVybiBudWxsO2xldCBuPXI7aWYobi5icmlkZ2VncmFwaClyZXR1cm4gbi5icmlkZ2VncmFwaDtsZXQgaT1uLmJyaWRnZWdyYXBoPWUzKCJCUklER0VHUkFQSCIsXzAuQlJJREdFLHRoaXMuZ3JhcGhPcHRpb25zKTtpZighci5wYXJlbnROb2RlfHwhKCJtZXRhZ3JhcGgiaW4gci5wYXJlbnROb2RlKSlyZXR1cm4gaTtsZXQgbz1yLnBhcmVudE5vZGUsYT1vLm1ldGFncmFwaCxzPXRoaXMuZ2V0QnJpZGdlZ3JhcGgoby5uYW1lKTtyZXR1cm4gSGUuZWFjaChbYSxzXSxsPT57bC5lZGdlcygpLmZpbHRlcihjPT5jLnY9PT10fHxjLnc9PT10KS5mb3JFYWNoKGM9PntsZXQgdT1jLnc9PT10LGg9bC5lZGdlKGMpO0hlLmVhY2goaC5iYXNlRWRnZUxpc3QsZj0+e2xldFtwLGRdPXU/W2YudyxjLnZdOltmLnYsYy53XSxnPXRoaXMuZ2V0Q2hpbGROYW1lKHQscCksXz17djp1P2Q6Zyx3OnU/ZzpkfSx5PWkuZWRnZShfKTt5fHwoeT1IbHQoXy52LF8udykseS5pbmJvdW5kPXUsaS5zZXRFZGdlKF8udixfLncseSkpLHkuYWRkQmFzZUVkZ2UoZix0aGlzKX0pfSl9KSxpfWdldENoaWxkTmFtZSh0LHIpe2xldCBuPXRoaXMuaW5kZXhbcl07Zm9yKDtuOyl7aWYobi5wYXJlbnROb2RlJiZuLnBhcmVudE5vZGUubmFtZT09PXQpcmV0dXJuIG4ubmFtZTtuPW4ucGFyZW50Tm9kZX10aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgaW1tZWRpYXRlIGNoaWxkIGZvciBkZXNjZW5kYW50OiAiK3IpfWdldFByZWRlY2Vzc29ycyh0KXtsZXQgcj10aGlzLmluZGV4W3RdO2lmKCFyKXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBub2RlIHdpdGggbmFtZTogIit0KTtsZXQgbj10aGlzLmdldE9uZVdheUVkZ2VzKHIsITApO3JldHVybiByLmlzR3JvdXBOb2RlfHxIZS5lYWNoKHIuaW5FbWJlZGRpbmdzLGk9PntIZS5lYWNoKHIuaW5wdXRzLG89PntpZihvLm5hbWU9PT1pLm5hbWUpe2xldCBhPW5ldyBHZihpLm5hbWUsdCk7YS5hZGRCYXNlRWRnZSh7aXNDb250cm9sRGVwZW5kZW5jeTpvLmlzQ29udHJvbERlcGVuZGVuY3ksb3V0cHV0VGVuc29yS2V5Om8ub3V0cHV0VGVuc29yS2V5LGlzUmVmZXJlbmNlRWRnZTohMSx2OmkubmFtZSx3OnR9LHRoaXMpLG4ucmVndWxhci5wdXNoKGEpfX0pfSksbn1nZXRTdWNjZXNzb3JzKHQpe2xldCByPXRoaXMuaW5kZXhbdF07aWYoIXIpdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIG5vZGUgd2l0aCBuYW1lOiAiK3QpO2xldCBuPXRoaXMuZ2V0T25lV2F5RWRnZXMociwhMSk7cmV0dXJuIHIuaXNHcm91cE5vZGV8fEhlLmVhY2goci5vdXRFbWJlZGRpbmdzLGk9PntIZS5lYWNoKGkuaW5wdXRzLG89PntpZihvLm5hbWU9PT10KXtsZXQgYT1uZXcgR2YodCxpLm5hbWUpO2EuYWRkQmFzZUVkZ2Uoe2lzQ29udHJvbERlcGVuZGVuY3k6by5pc0NvbnRyb2xEZXBlbmRlbmN5LG91dHB1dFRlbnNvcktleTpvLm91dHB1dFRlbnNvcktleSxpc1JlZmVyZW5jZUVkZ2U6ITEsdjp0LHc6aS5uYW1lfSx0aGlzKSxuLnJlZ3VsYXIucHVzaChhKX19KX0pLG59Z2V0T25lV2F5RWRnZXModCxyKXtsZXQgbj17Y29udHJvbDpbXSxyZWd1bGFyOltdfTtpZighdC5wYXJlbnROb2RlfHwhdC5wYXJlbnROb2RlLmlzR3JvdXBOb2RlKXJldHVybiBuO2xldCBpPXQucGFyZW50Tm9kZSxvPWkubWV0YWdyYXBoLGE9dGhpcy5nZXRCcmlkZ2VncmFwaChpLm5hbWUpO3JldHVybiBmbGUobyx0LHIsbiksZmxlKGEsdCxyLG4pLG59Z2V0VG9wb2xvZ2ljYWxPcmRlcmluZyh0KXtsZXQgcj10aGlzLmluZGV4W3RdO2lmKCFyKXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBub2RlIHdpdGggbmFtZTogIit0KTtpZighci5pc0dyb3VwTm9kZSlyZXR1cm4gbnVsbDtpZih0IGluIHRoaXMub3JkZXJpbmdzKXJldHVybiB0aGlzLm9yZGVyaW5nc1t0XTtsZXQgbj17fSxpPXt9LG89ci5tZXRhZ3JhcGg7SGUuZWFjaChvLmVkZ2VzKCksYz0+eyFvLmVkZ2UoYykubnVtUmVndWxhckVkZ2VzfHwoYy52IGluIG58fChuW2Mudl09W10pLG5bYy52XS5wdXNoKGMudyksaVtjLnddPSEwKX0pO2xldCBhPUhlLmRpZmZlcmVuY2UoSGUua2V5cyhuKSxIZS5rZXlzKGkpKSxzPXRoaXMub3JkZXJpbmdzW3RdPXt9LGw9MDtmb3IoO2EubGVuZ3RoOyl7bGV0IGM9YS5zaGlmdCgpO3NbY109bCsrLEhlLmVhY2gobltjXSx1PT5hLnB1c2godSkpLGRlbGV0ZSBuW2NdfXJldHVybiBzfWdldFRlbXBsYXRlSW5kZXgoKXtpZighdGhpcy50ZW1wbGF0ZXMpcmV0dXJuIG51bGw7bGV0IHQ9JEwodGhpcy50ZW1wbGF0ZXMpO2lmKCF0Lmxlbmd0aClyZXR1cm4gbnVsbDtsZXQgcj1ndSgpLmRvbWFpbih0KS5yYW5nZShJcigwLHQubGVuZ3RoKSk7cmV0dXJuIG49PnIobil9dXBkYXRlVGVtcGxhdGVzKCl7TmQoIkZpbmRpbmcgc2ltaWxhciBzdWJncmFwaHMiLCgpPT57dGhpcy50ZW1wbGF0ZXM9aGxlKHRoaXMsdGhpcy52ZXJpZnlUZW1wbGF0ZSksdGhpcy5kaXNwYXRjaEV2ZW50KE9kLlRFTVBMQVRFU19VUERBVEVEKX0sanIuSElFUkFSQ0hZX0ZJTkRfU0lNSUxBUl9TVUJHUkFQSFMpfX07ZnVuY3Rpb24gZmxlKGUsdCxyLG4pe2xldCBpPXI/ZS5pbkVkZ2VzKHQubmFtZSk6ZS5vdXRFZGdlcyh0Lm5hbWUpO0hlLmVhY2goaSxvPT57bGV0IGE9ZS5lZGdlKG8pOyhhLm51bVJlZ3VsYXJFZGdlcz9uLnJlZ3VsYXI6bi5jb250cm9sKS5wdXNoKGEpfSl9dmFyIHIzPXt2ZXJpZnlUZW1wbGF0ZTohMCxzZXJpZXNOb2RlTWluU2l6ZTo1LHNlcmllc01hcDpuZXcgTWFwLHJhbmtEaXJlY3Rpb246IkJUIix1c2VHZW5lcmFsaXplZFNlcmllc1BhdHRlcm5zOiExfTtmdW5jdGlvbiBiSChlLHQscil7bGV0IG49bmV3IGFzKHQpLGk9e307cmV0dXJuIHIxKCJBZGRpbmcgbm9kZXMiLDMwLCgpPT57bGV0IG89e30sYT17fTtIZS5lYWNoKGUubm9kZXMsKHMsbCk9PntzLmRldmljZSYmKG9bcy5kZXZpY2VdPSEwKSxzLnhsYUNsdXN0ZXImJihhW3MueGxhQ2x1c3Rlcl09ITApfSksbi5kZXZpY2VzPUhlLmtleXMobyksbi54bGFDbHVzdGVycz1IZS5rZXlzKGEpLF9jcihuLGUpfSxyLGpyLkhJRVJBUkNIWV9BRERfTk9ERVMpLnRoZW4oKCk9PnIxKCJEZXRlY3Qgc2VyaWVzIiwzMCwoKT0+e3Quc2VyaWVzTm9kZU1pblNpemU+MCYmbWxlKG4ucm9vdCxuLGksdC5zZXJpZXNOb2RlTWluU2l6ZSx0LnNlcmllc01hcCx0LnVzZUdlbmVyYWxpemVkU2VyaWVzUGF0dGVybnMpfSxyLGpyLkhJRVJBUkNIWV9ERVRFQ1RfU0VSSUVTKSkudGhlbigoKT0+cjEoIkFkZGluZyBlZGdlcyIsNDAsKCk9Pnt5Y3IobixlLGkpfSxyLGpyLkhJRVJBUkNIWV9BRERfRURHRVMpKS50aGVuKCgpPT5uKX1mdW5jdGlvbiBwbGUoZSx0KXtsZXQgcj17fSxuPXt9O0hlLmVhY2goZS5yb290LmxlYXZlcygpLGk9PntsZXQgbz1lLm5vZGUoaSk7by5kZXZpY2UhPW51bGwmJihyW28uZGV2aWNlXT0hMCksby54bGFDbHVzdGVyIT1udWxsJiYobltvLnhsYUNsdXN0ZXJdPSEwKX0pLGUuZGV2aWNlcz1IZS5rZXlzKHIpLGUueGxhQ2x1c3RlcnM9SGUua2V5cyhuKSxIZS5lYWNoKGUuZ2V0Tm9kZU1hcCgpLChpLG8pPT57aS5pc0dyb3VwTm9kZSYmKGkuc3RhdHM9bmV3IEtTKG51bGwpLGkuZGV2aWNlSGlzdG9ncmFtPXt9KX0pLEhlLmVhY2goZS5yb290LmxlYXZlcygpLGk9PntsZXQgbz1lLm5vZGUoaSksYT1vO2Zvcig7YS5wYXJlbnROb2RlIT1udWxsOyl7aWYoby5kZXZpY2UhPW51bGwpe2xldCBzPWEucGFyZW50Tm9kZS5kZXZpY2VIaXN0b2dyYW07c1tvLmRldmljZV09KHNbby5kZXZpY2VdfHwwKSsxfWlmKG8ueGxhQ2x1c3RlciE9bnVsbCl7bGV0IHM9YS5wYXJlbnROb2RlLnhsYUNsdXN0ZXJIaXN0b2dyYW07c1tvLnhsYUNsdXN0ZXJdPShzW28ueGxhQ2x1c3Rlcl18fDApKzF9by5zdGF0cyE9bnVsbCYmYS5wYXJlbnROb2RlLnN0YXRzLmNvbWJpbmUoby5zdGF0cyksYT1hLnBhcmVudE5vZGV9fSl9ZnVuY3Rpb24gZGxlKGUpe2xldCB0PVtdLHI9e307cmV0dXJuIEhlLmVhY2goZS5yb290LmxlYXZlcygpLG49PntsZXQgaT1lLm5vZGUobik7aWYoaS50eXBlPT1qdC5PUCl7bGV0IG89aTtpZighby5jb21wYXRpYmxlKWlmKG8ub3duaW5nU2VyaWVzKXtpZihlLmdldFNlcmllc0dyb3VwVHlwZShvLm93bmluZ1Nlcmllcyk9PT1vcy5VTkdST1VQKXQucHVzaChvKTtlbHNlIGlmKCFyW28ub3duaW5nU2VyaWVzXSl7bGV0IGE9ZS5ub2RlKG8ub3duaW5nU2VyaWVzKTthJiYocltvLm93bmluZ1Nlcmllc109YSx0LnB1c2goYSkpfX1lbHNlIHQucHVzaChvKTtIZS5lYWNoKG8uaW5FbWJlZGRpbmdzLGE9PnthLmNvbXBhdGlibGV8fHQucHVzaChhKX0pLEhlLmVhY2goby5vdXRFbWJlZGRpbmdzLGE9PnthLmNvbXBhdGlibGV8fHQucHVzaChhKX0pfX0pLHR9ZnVuY3Rpb24gX2NyKGUsdCl7bGV0IHI9e307SGUuZWFjaCh0Lm5vZGVzLChuLGkpPT57bGV0IG89Y1Aobi5uYW1lKSxhPWUucm9vdDthLmRlcHRoPU1hdGgubWF4KG8ubGVuZ3RoLGEuZGVwdGgpLHJbbi5vcF18fChyW24ub3BdPVtdKSxyW24ub3BdLnB1c2gobik7Zm9yKGxldCBzPTA7czxvLmxlbmd0aCYmKGEuZGVwdGg9TWF0aC5tYXgoYS5kZXB0aCxvLmxlbmd0aC1zKSxhLmNhcmRpbmFsaXR5Kz1uLmNhcmRpbmFsaXR5LGEub3BIaXN0b2dyYW1bbi5vcF09KGEub3BIaXN0b2dyYW1bbi5vcF18fDApKzEsbi5kZXZpY2UhPW51bGwmJihhLmRldmljZUhpc3RvZ3JhbVtuLmRldmljZV09KGEuZGV2aWNlSGlzdG9ncmFtW24uZGV2aWNlXXx8MCkrMSksbi54bGFDbHVzdGVyIT1udWxsJiYoYS54bGFDbHVzdGVySGlzdG9ncmFtW24ueGxhQ2x1c3Rlcl09KGEueGxhQ2x1c3Rlckhpc3RvZ3JhbVtuLnhsYUNsdXN0ZXJdfHwwKSsxKSxuLmNvbXBhdGlibGU/YS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGU9KGEuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlfHwwKSsxOmEuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU9KGEuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGV8fDApKzEsSGUuZWFjaChuLmluRW1iZWRkaW5ncyx1PT57dS5jb21wYXRpYmxlP2EuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlPShhLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZXx8MCkrMTphLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlPShhLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlfHwwKSsxfSksSGUuZWFjaChuLm91dEVtYmVkZGluZ3MsdT0+e3UuY29tcGF0aWJsZT9hLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZT0oYS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGV8fDApKzE6YS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZT0oYS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZXx8MCkrMX0pLHMhPT1vLmxlbmd0aC0xKTtzKyspe2xldCBsPW9bc10sYz1lLm5vZGUobCk7aWYoIWMmJihjPWxQKGwsZS5ncmFwaE9wdGlvbnMpLGMucGFyZW50Tm9kZT1hLGUuc2V0Tm9kZShsLGMpLGEubWV0YWdyYXBoLnNldE5vZGUobCxjKSxsLmluZGV4T2YoTWEpPT09MCYmYS5uYW1lPT09cWMpKXtsZXQgdT1sLnN1YnN0cmluZyhNYS5sZW5ndGgpO3JbdV18fChyW3VdPVtdKSxlLmxpYnJhcnlGdW5jdGlvbnNbdV09e25vZGU6Yyx1c2FnZXM6clt1XX0sYy5hc3NvY2lhdGVkRnVuY3Rpb249dX1hPWN9ZS5zZXROb2RlKG4ubmFtZSxuKSxuLnBhcmVudE5vZGU9YSxhLm1ldGFncmFwaC5zZXROb2RlKG4ubmFtZSxuKSxIZS5lYWNoKG4uaW5FbWJlZGRpbmdzLGZ1bmN0aW9uKHMpe2Uuc2V0Tm9kZShzLm5hbWUscykscy5wYXJlbnROb2RlPW59KSxIZS5lYWNoKG4ub3V0RW1iZWRkaW5ncyxmdW5jdGlvbihzKXtlLnNldE5vZGUocy5uYW1lLHMpLHMucGFyZW50Tm9kZT1ufSl9KX1mdW5jdGlvbiB5Y3IoZSx0LHIpe2xldCBuPWUuZ2V0Tm9kZU1hcCgpLGk9W10sbz1bXSxhPShzLGwpPT57bGV0IGM9MDtmb3IoO3M7KWxbYysrXT1zLm5hbWUscz1zLnBhcmVudE5vZGU7cmV0dXJuIGMtMX07SGUuZWFjaCh0LmVkZ2VzLHM9PntsZXQgbD1hKHQubm9kZXNbcy52XSxpKSxjPWEodC5ub2Rlc1tzLnddLG8pO2lmKGw9PT0tMXx8Yz09PS0xKXJldHVybjtmb3IoO2lbbF09PT1vW2NdOylpZihsLS0sYy0tLGw8MHx8YzwwKXRocm93IEVycm9yKCJObyBkaWZmZXJlbmNlIGZvdW5kIGJldHdlZW4gYW5jZXN0b3IgcGF0aHMuIik7bGV0IHU9bltpW2wrMV1dLGg9aVtsXSxmPW9bY10scD11Lm1ldGFncmFwaC5lZGdlKGgsZik7cHx8KHA9SGx0KGgsZiksdS5tZXRhZ3JhcGguc2V0RWRnZShoLGYscCkpLCF1Lmhhc05vbkNvbnRyb2xFZGdlcyYmIXMuaXNDb250cm9sRGVwZW5kZW5jeSYmKHUuaGFzTm9uQ29udHJvbEVkZ2VzPSEwKSxwLmFkZEJhc2VFZGdlKHMsZSl9KX1mdW5jdGlvbiBtbGUoZSx0LHIsbixpLG8pe2xldCBhPWUubWV0YWdyYXBoO0hlLmVhY2goYS5ub2RlcygpLHU9PntsZXQgaD1hLm5vZGUodSk7aC50eXBlPT09anQuTUVUQSYmbWxlKGgsdCxyLG4saSxvKX0pO2xldCBzPXZjcihhKSxjPShvP2Jjcjp4Y3IpKHMsYSx0LmdyYXBoT3B0aW9ucyk7SGUuZWFjaChjLGZ1bmN0aW9uKHUsaCl7bGV0IGY9dS5tZXRhZ3JhcGgubm9kZXMoKTtIZS5lYWNoKGYscD0+e2xldCBkPWEubm9kZShwKTtkLm93bmluZ1Nlcmllc3x8KGQub3duaW5nU2VyaWVzPWgpfSksZi5sZW5ndGg8biYmdC5nZXRTZXJpZXNHcm91cFR5cGUodS5uYW1lKT09PW9zLkdST1VQJiZ0LnNldFNlcmllc0dyb3VwVHlwZSh1Lm5hbWUsb3MuVU5HUk9VUCksdC5nZXRTZXJpZXNHcm91cFR5cGUodS5uYW1lKSE9PW9zLlVOR1JPVVAmJih0LnNldE5vZGUoaCx1KSxhLnNldE5vZGUoaCx1KSxIZS5lYWNoKGYscD0+e2xldCBkPWEubm9kZShwKTt1Lm1ldGFncmFwaC5zZXROb2RlKHAsZCksdS5wYXJlbnROb2RlPWQucGFyZW50Tm9kZSx1LmNhcmRpbmFsaXR5KyssZC5kZXZpY2UhPW51bGwmJih1LmRldmljZUhpc3RvZ3JhbVtkLmRldmljZV09KHUuZGV2aWNlSGlzdG9ncmFtW2QuZGV2aWNlXXx8MCkrMSksZC54bGFDbHVzdGVyIT1udWxsJiYodS54bGFDbHVzdGVySGlzdG9ncmFtW2QueGxhQ2x1c3Rlcl09KHUueGxhQ2x1c3Rlckhpc3RvZ3JhbVtkLnhsYUNsdXN0ZXJdfHwwKSsxKSxkLmNvbXBhdGlibGU/dS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGU9KHUuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlfHwwKSsxOnUuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU9KHUuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGV8fDApKzEsSGUuZWFjaChkLmluRW1iZWRkaW5ncyxnPT57Zy5jb21wYXRpYmxlP3UuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlPSh1LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZXx8MCkrMTp1LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlPSh1LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlfHwwKSsxfSksSGUuZWFjaChkLm91dEVtYmVkZGluZ3MsZz0+e2cuY29tcGF0aWJsZT91LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZT0odS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGV8fDApKzE6dS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZT0odS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZXx8MCkrMX0pLGQucGFyZW50Tm9kZT11LHJbcF09aCxhLnJlbW92ZU5vZGUocCl9KSl9KX1mdW5jdGlvbiB2Y3IoZSl7bGV0IHQ9e307cmV0dXJuIEhlLnJlZHVjZShlLm5vZGVzKCksKHIsbik9PntsZXQgaT1lLm5vZGUobik7aWYoaS50eXBlPT09anQuTUVUQSlyZXR1cm4gcjtsZXQgbz1pLm9wO3JldHVybiBvJiYocltvXT1yW29dfHxbXSxyW29dLnB1c2goaS5uYW1lKSkscn0sdCl9ZnVuY3Rpb24geGNyKGUsdCxyKXtsZXQgbj17fTtyZXR1cm4gSGUuZWFjaChlLGZ1bmN0aW9uKGksbyl7aWYoaS5sZW5ndGg8PTEpcmV0dXJuO2xldCBhPXt9O0hlLmVhY2goaSxmdW5jdGlvbihzKXtsZXQgbD1zLmNoYXJBdChzLmxlbmd0aC0xKT09PSIqIixjPXMuc3BsaXQoIi8iKSx1PWNbYy5sZW5ndGgtMV0saD1jLnNsaWNlKDAsYy5sZW5ndGgtMSkuam9pbigiLyIpLGY9dS5tYXRjaCgvXihcRCopKFxkKykkLykscCxkLGc9IiI7Zj8ocD1mWzFdLGQ9ZlsyXSk6KHA9bD91LnN1YnN0cigwLHUubGVuZ3RoLTEpOnUsZD0wLGc9bD8iKiI6IiIpO2xldCBfPXQzKHAsZyxoKTthW19dPWFbX118fFtdO2xldCB5PVFTKHAsZyxoLCtkLHMscik7YVtfXS5wdXNoKHkpfSksSGUuZWFjaChhLGZ1bmN0aW9uKHMsbCl7aWYocy5sZW5ndGg8MilyZXR1cm47cy5zb3J0KGZ1bmN0aW9uKHUsaCl7cmV0dXJuK3UuY2x1c3RlcklkLStoLmNsdXN0ZXJJZH0pO2xldCBjPVtzWzBdXTtmb3IobGV0IHU9MTt1PHMubGVuZ3RoO3UrKyl7bGV0IGg9c1t1XTtpZihoLmNsdXN0ZXJJZD09PWNbYy5sZW5ndGgtMV0uY2x1c3RlcklkKzEpe2MucHVzaChoKTtjb250aW51ZX14SChjLG4sK28sdCxyKSxjPVtoXX14SChjLG4sK28sdCxyKX0pfSksbn1mdW5jdGlvbiBiY3IoZSx0LHIpe2xldCBuPXt9O3JldHVybiBIZS5lYWNoKGUsZnVuY3Rpb24oaSxvKXtpZihpLmxlbmd0aDw9MSlyZXR1cm47bGV0IGE9e30scz17fTtIZS5lYWNoKGksZnVuY3Rpb24oYyl7bGV0IHU9Yy5jaGFyQXQoYy5sZW5ndGgtMSk9PT0iKiIsaD1jLnNwbGl0KCIvIiksZj1oW2gubGVuZ3RoLTFdLHA9aC5zbGljZSgwLGgubGVuZ3RoLTEpLmpvaW4oIi8iKSxkPS8oXGQrKS9nLGc9W10sXyx5LHgsYixTLEM9MDtmb3IoO189ZC5leGVjKGYpOykrK0MseT1mLnNsaWNlKDAsXy5pbmRleCkseD1fWzBdLGI9Zi5zbGljZShfLmluZGV4K19bMF0ubGVuZ3RoKSxTPXQzKHksYixwKSxhW1NdPWFbU10sYVtTXXx8KGFbU109UVMoeSxiLHAsK3gsYyxyKSksYVtTXS5pZHMucHVzaCh4KSxzW2NdPXNbY118fFtdLHNbY10ucHVzaChbUyx4XSk7QzwxJiYoeT11P2Yuc3Vic3RyKDAsZi5sZW5ndGgtMSk6Zix4PTAsYj11PyIqIjoiIixTPXQzKHksYixwKSxhW1NdPWFbU10sYVtTXXx8KGFbU109UVMoeSxiLHAsK3gsYyxyKSksYVtTXS5pZHMucHVzaCh4KSxzW2NdPXNbY118fFtdLHNbY10ucHVzaChbUyx4XSkpfSk7dmFyIGw9e307SGUuZWFjaChzLGZ1bmN0aW9uKGMsdSl7Yy5zb3J0KGZ1bmN0aW9uKHkseCl7cmV0dXJuIGFbeFswXV0uaWRzLmxlbmd0aC1hW3lbMF1dLmlkcy5sZW5ndGh9KTt2YXIgaD1jWzBdWzBdLGY9Y1swXVsxXTtsW2hdPWxbaF18fFtdO2xldCBwPXUuc3BsaXQoIi8iKSxkPXBbcC5sZW5ndGgtMV0sZz1wLnNsaWNlKDAscC5sZW5ndGgtMSkuam9pbigiLyIpO3ZhciBfPVFTKGFbaF0ucHJlZml4LGFbaF0uc3VmZml4LGcsK2YsdSxyKTtsW2hdLnB1c2goXyl9KSxIZS5lYWNoKGwsZnVuY3Rpb24oYyx1KXtpZihjLmxlbmd0aDwyKXJldHVybjtjLnNvcnQoZnVuY3Rpb24oZixwKXtyZXR1cm4rZi5jbHVzdGVySWQtK3AuY2x1c3RlcklkfSk7bGV0IGg9W2NbMF1dO2ZvcihsZXQgZj0xO2Y8Yy5sZW5ndGg7ZisrKXtsZXQgcD1jW2ZdO2lmKHAuY2x1c3RlcklkPT09aFtoLmxlbmd0aC0xXS5jbHVzdGVySWQrMSl7aC5wdXNoKHApO2NvbnRpbnVlfXhIKGgsbiwrbyx0LHIpLGg9W3BdfXhIKGgsbiwrbyx0LHIpfSl9KSxufWZ1bmN0aW9uIHhIKGUsdCxyLG4saSl7aWYoZS5sZW5ndGg+MSl7bGV0IG89dDMoZVswXS5wcmVmaXgsZVswXS5zdWZmaXgsZVswXS5wYXJlbnQsZVswXS5jbHVzdGVySWQsZVtlLmxlbmd0aC0xXS5jbHVzdGVySWQpLGE9UVMoZVswXS5wcmVmaXgsZVswXS5zdWZmaXgsZVswXS5wYXJlbnQscixvLGkpO0hlLmVhY2goZSxmdW5jdGlvbihzKXthLmlkcy5wdXNoKHMuY2x1c3RlcklkKSxhLm1ldGFncmFwaC5zZXROb2RlKHMubmFtZSxuLm5vZGUocy5uYW1lKSl9KSx0W29dPWF9fXZhciBtZT1FZShPZSgpLDEpO3ZhciB2MD17REVGQVVMVF9GSUxMOiIjZmZmZmZmIixERUZBVUxUX1NUUk9LRToiI2IyYjJiMiIsQ09NUEFUSUJMRToiIzBmOWQ1OCIsSU5DT01QQVRJQkxFOiIjZGI0NDM3In0sS3U9e0RFRkFVTFRfRklMTDoiI2Q5ZDlkOSIsREVGQVVMVF9TVFJPS0U6IiNhNmE2YTYiLFNBVFVSQVRJT046LjYsTElHSFRORVNTOi44NSxFWFBBTkRFRF9DT0xPUjoiI2YwZjBmMCIsSFVFUzpbMjIwLDEwMCwxODAsNDAsMjAsMzQwLDI2MCwzMDAsMTQwLDYwXSxTVFJVQ1RVUkVfUEFMRVRURShlLHQpe2xldCByPUt1LkhVRVMsbj1yLmxlbmd0aCxpPXJbZSVuXSxvPU1hdGguc2luKGkqTWF0aC5QSS8zNjApLGE9dD8zMDo5MC02MCpvLHM9dD85NTo4MDtyZXR1cm4gVW0oaSwuMDEqYSwuMDEqcykudG9TdHJpbmcoKX0sREVWSUNFX1BBTEVUVEUoZSl7cmV0dXJuIEt1LlNUUlVDVFVSRV9QQUxFVFRFKGUpfSxYTEFfQ0xVU1RFUl9QQUxFVFRFKGUpe3JldHVybiBLdS5TVFJVQ1RVUkVfUEFMRVRURShlKX0sVU5LTk9XTjoiI2VlZSIsR1JBRElFTlRfT1VUTElORToiIzg4OCJ9LFZsdD17REVGQVVMVF9GSUxMOiJ3aGl0ZSIsREVGQVVMVF9TVFJPS0U6IiNiMmIyYjIifSxYbz17bWluTm9kZUNvdW50Rm9yRXh0cmFjdGlvbjoxNSxtaW5EZWdyZWVGb3JFeHRyYWN0aW9uOjUsbWF4Q29udHJvbERlZ3JlZTo0LG1heEJyaWRnZVBhdGhEZWdyZWU6NCxvdXRFeHRyYWN0VHlwZXM6WyJOb09wIl0saW5FeHRyYWN0VHlwZXM6W10sZGV0YWNoQWxsRWRnZXNGb3JIaWdoRGVncmVlOiEwLGV4dHJhY3RJc29sYXRlZE5vZGVzV2l0aEFubm90YXRpb25zT25PbmVTaWRlOiEwLGVuYWJsZUJyaWRnZWdyYXBoOiEwLG1pbk1heENvbG9yczpbIiNmZmY1ZjAiLCIjZmI2YTRhIl0sbWF4QW5ub3RhdGlvbnM6NX0sd2NyPW5ldyBSZWdFeHAoIl4oPzoiK01hKyIpPyhcXHcrKV9bYS16MC05XXs4fSg/Ol9cXGQrKT8kIiksbG89Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3RoaXMuaGllcmFyY2h5PXQsdGhpcy5kaXNwbGF5aW5nU3RhdHM9cix0aGlzLmF1dG9FeHRyYWN0Tm9kZXM9bix0aGlzLmluZGV4PXt9LHRoaXMucmVuZGVyZWRPcE5hbWVzPVtdLHRoaXMuY29tcHV0ZVNjYWxlcygpLHRoaXMuaGFzU3ViaGllcmFyY2h5PXt9LHRoaXMucm9vdD1uZXcgU0godC5yb290LHQuZ3JhcGhPcHRpb25zKSx0aGlzLmluZGV4W3Qucm9vdC5uYW1lXT10aGlzLnJvb3QsdGhpcy5yZW5kZXJlZE9wTmFtZXMucHVzaCh0LnJvb3QubmFtZSksdGhpcy5idWlsZFN1YmhpZXJhcmNoeSh0LnJvb3QubmFtZSksdGhpcy5yb290LmV4cGFuZGVkPSEwLHRoaXMudHJhY2VJbnB1dHM9ITF9Y29tcHV0ZVNjYWxlcygpe3RoaXMuZGV2aWNlQ29sb3JNYXA9Z3UoKS5kb21haW4odGhpcy5oaWVyYXJjaHkuZGV2aWNlcykucmFuZ2UobWUubWFwKElyKHRoaXMuaGllcmFyY2h5LmRldmljZXMubGVuZ3RoKSxLdS5ERVZJQ0VfUEFMRVRURSkpLHRoaXMueGxhQ2x1c3RlckNvbG9yTWFwPWd1KCkuZG9tYWluKHRoaXMuaGllcmFyY2h5LnhsYUNsdXN0ZXJzKS5yYW5nZShtZS5tYXAoSXIodGhpcy5oaWVyYXJjaHkueGxhQ2x1c3RlcnMubGVuZ3RoKSxLdS5YTEFfQ0xVU1RFUl9QQUxFVFRFKSk7bGV0IHQ9dGhpcy5oaWVyYXJjaHkucm9vdC5tZXRhZ3JhcGgscj1sdSh0Lm5vZGVzKCksKGksbyk9PntsZXQgYT10Lm5vZGUoaSk7aWYoYS5zdGF0cyE9bnVsbClyZXR1cm4gYS5zdGF0cy50b3RhbEJ5dGVzfSk7dGhpcy5tZW1vcnlVc2FnZVNjYWxlPXpuKCkuZG9tYWluKFswLHJdKS5yYW5nZShYby5taW5NYXhDb2xvcnMpO2xldCBuPWx1KHQubm9kZXMoKSwoaSxvKT0+e2xldCBhPXQubm9kZShpKTtpZihhLnN0YXRzIT1udWxsKXJldHVybiBhLnN0YXRzLmdldFRvdGFsTWljcm9zKCl9KTt0aGlzLmNvbXB1dGVUaW1lU2NhbGU9em4oKS5kb21haW4oWzAsbl0pLnJhbmdlKFhvLm1pbk1heENvbG9ycyksdGhpcy5lZGdlV2lkdGhTaXplZEJhc2VkU2NhbGU9dGhpcy5oaWVyYXJjaHkuaGFzU2hhcGVJbmZvP1hzZTp6bigpLmRvbWFpbihbMSx0aGlzLmhpZXJhcmNoeS5tYXhNZXRhRWRnZVNpemVdKS5yYW5nZShbUTQsdFBdKX1nZXRSZW5kZXJOb2RlQnlOYW1lKHQpe3JldHVybiB0aGlzLmluZGV4W3RdfWdldE5vZGVCeU5hbWUodCl7cmV0dXJuIHRoaXMuaGllcmFyY2h5Lm5vZGUodCl9Y29sb3JIaXN0b2dyYW0odCxyKXtpZihPYmplY3Qua2V5cyh0KS5sZW5ndGg+MCl7bGV0IG49bWUuc3VtKE9iamVjdC5rZXlzKHQpLm1hcChpPT50W2ldKSk7cmV0dXJuIE9iamVjdC5rZXlzKHQpLm1hcChpPT4oe2NvbG9yOnIoaSkscHJvcG9ydGlvbjp0W2ldL259KSl9cmV0dXJuIG51bGx9Z2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQgaW4gdGhpcy5pbmRleClyZXR1cm4gdGhpcy5pbmRleFt0XTtsZXQgcj10aGlzLmhpZXJhcmNoeS5ub2RlKHQpO2lmKCFyKXJldHVybiBudWxsO2xldCBuPXIuaXNHcm91cE5vZGU/bmV3IFNIKHIsdGhpcy5oaWVyYXJjaHkuZ3JhcGhPcHRpb25zKTpuZXcgV2Yocik7dGhpcy5pbmRleFt0XT1uLHRoaXMucmVuZGVyZWRPcE5hbWVzLnB1c2godCksci5zdGF0cyYmKG4ubWVtb3J5Q29sb3I9dGhpcy5tZW1vcnlVc2FnZVNjYWxlKHIuc3RhdHMudG90YWxCeXRlcyksbi5jb21wdXRlVGltZUNvbG9yPXRoaXMuY29tcHV0ZVRpbWVTY2FsZShyLnN0YXRzLmdldFRvdGFsTWljcm9zKCkpKSxuLmlzRmFkZWRPdXQ9dGhpcy5kaXNwbGF5aW5nU3RhdHMmJiFnSChyLnN0YXRzKTt2YXIgaT1udWxsLG89bnVsbCxhPW51bGw7aWYoci5pc0dyb3VwTm9kZSl7aT1yLmRldmljZUhpc3RvZ3JhbSxvPXIueGxhQ2x1c3Rlckhpc3RvZ3JhbTtsZXQgcz1yLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZSxsPXIuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU7KHMhPTB8fGwhPTApJiYoYT1zLyhzK2wpKX1lbHNle2xldCBzPW4ubm9kZS5kZXZpY2U7cyYmKGk9e1tzXToxfSk7bGV0IGw9bi5ub2RlLnhsYUNsdXN0ZXI7bCYmKG89e1tsXToxfSksbi5ub2RlLnR5cGU9PT1qdC5PUCYmKGE9bi5ub2RlLmNvbXBhdGlibGU/MTowKX1yZXR1cm4gaSYmKG4uZGV2aWNlQ29sb3JzPXRoaXMuY29sb3JIaXN0b2dyYW0oaSx0aGlzLmRldmljZUNvbG9yTWFwKSksbyYmKG4ueGxhQ2x1c3RlckNvbG9ycz10aGlzLmNvbG9ySGlzdG9ncmFtKG8sdGhpcy54bGFDbHVzdGVyQ29sb3JNYXApKSxhIT1udWxsJiYobi5jb21wYXRpYmlsaXR5Q29sb3JzPVt7Y29sb3I6djAuQ09NUEFUSUJMRSxwcm9wb3J0aW9uOmF9LHtjb2xvcjp2MC5JTkNPTVBBVElCTEUscHJvcG9ydGlvbjoxLWF9XSksdGhpcy5pbmRleFt0XX1nZXROZWFyZXN0VmlzaWJsZUFuY2VzdG9yKHQpe2xldCByPWNQKHQpLG49MCxpPW51bGwsbz10O2Zvcig7bjxyLmxlbmd0aCYmKG89cltuXSxpPXRoaXMuZ2V0UmVuZGVyTm9kZUJ5TmFtZShvKSwhIWkuZXhwYW5kZWQpO24rKyk7aWYobj09ci5sZW5ndGgtMil7bGV0IGE9cltuKzFdO2lmKGkhPW51bGwmJmkuaW5Bbm5vdGF0aW9ucy5ub2RlTmFtZXNbYV18fGkhPW51bGwmJmkub3V0QW5ub3RhdGlvbnMubm9kZU5hbWVzW2FdKXJldHVybiBhfXJldHVybiBvfXNldERlcHRoKHQpe3lsZSh0aGlzLnJvb3QsK3QpfWlzTm9kZUF1eGlsaWFyeSh0KXtsZXQgcj10aGlzLmdldFJlbmRlck5vZGVCeU5hbWUodC5ub2RlLnBhcmVudE5vZGUubmFtZSksbj1tZS5maW5kKHIuaXNvbGF0ZWRJbkV4dHJhY3QsaT0+aS5ub2RlLm5hbWU9PT10Lm5vZGUubmFtZSk7cmV0dXJuIG4/ITA6KG49bWUuZmluZChyLmlzb2xhdGVkT3V0RXh0cmFjdCxpPT5pLm5vZGUubmFtZT09PXQubm9kZS5uYW1lKSwhIW4pfWdldE5hbWVzT2ZSZW5kZXJlZE9wcygpe3JldHVybiB0aGlzLnJlbmRlcmVkT3BOYW1lc31jbG9uZUFuZEFkZEZ1bmN0aW9uT3BOb2RlKHQscixuLGkpe2xldCBvPW4ubmFtZS5yZXBsYWNlKHIsaSksYT10Lm1ldGFncmFwaC5ub2RlKG8pO2lmKGEpcmV0dXJuIGE7YT1uZXcgeTAoe25hbWU6byxpbnB1dDpbXSxkZXZpY2U6bi5kZXZpY2Usb3A6bi5vcCxhdHRyOm1lLmNsb25lRGVlcChuLmF0dHIpfSksYS5jYXJkaW5hbGl0eT1uLmNhcmRpbmFsaXR5LGEuaW5jbHVkZT1uLmluY2x1ZGUsYS5vdXRwdXRTaGFwZXM9bWUuY2xvbmVEZWVwKG4ub3V0cHV0U2hhcGVzKSxhLnhsYUNsdXN0ZXI9bi54bGFDbHVzdGVyLGEuZnVuY3Rpb25JbnB1dEluZGV4PW4uZnVuY3Rpb25JbnB1dEluZGV4LGEuZnVuY3Rpb25PdXRwdXRJbmRleD1uLmZ1bmN0aW9uT3V0cHV0SW5kZXgsYS5pbnB1dHM9bi5pbnB1dHMubWFwKGw9PntsZXQgYz1tZS5jbG9uZShsKTtyZXR1cm4gYy5uYW1lPWwubmFtZS5yZXBsYWNlKHIsaSksY30pLGEucGFyZW50Tm9kZT10LHQubWV0YWdyYXBoLnNldE5vZGUoYS5uYW1lLGEpLHRoaXMuaGllcmFyY2h5LnNldE5vZGUoYS5uYW1lLGEpO2xldCBzPWw9PnRoaXMuY2xvbmVBbmRBZGRGdW5jdGlvbk9wTm9kZSh0LHIsbCxpKTtyZXR1cm4gYS5pbkVtYmVkZGluZ3M9bi5pbkVtYmVkZGluZ3MubWFwKHMpLGEub3V0RW1iZWRkaW5ncz1uLm91dEVtYmVkZGluZ3MubWFwKHMpLGF9Y2xvbmVGdW5jdGlvbkxpYnJhcnlNZXRhbm9kZSh0LHIsbixpLG8pe2xldCBhPXt9LHM9dGhpcy5jbG9uZUZ1bmN0aW9uTGlicmFyeU1ldGFub2RlSGVscGVyKHQscixuLGksbyxhKTtyZXR1cm4gbWUuaXNFbXB0eShhKXx8dGhpcy5wYXRjaEVkZ2VzRnJvbUZ1bmN0aW9uT3V0cHV0cyhyLGEpLHN9Y2xvbmVGdW5jdGlvbkxpYnJhcnlNZXRhbm9kZUhlbHBlcih0LHIsbixpLG8sYSl7bGV0IHM9bFAobi5uYW1lLnJlcGxhY2UoaSxvKSk7cmV0dXJuIHMuZGVwdGg9bi5kZXB0aCxzLmNhcmRpbmFsaXR5PW4uY2FyZGluYWxpdHkscy50ZW1wbGF0ZUlkPW4udGVtcGxhdGVJZCxzLm9wSGlzdG9ncmFtPW1lLmNsb25lKG4ub3BIaXN0b2dyYW0pLHMuZGV2aWNlSGlzdG9ncmFtPW1lLmNsb25lKG4uZGV2aWNlSGlzdG9ncmFtKSxzLnhsYUNsdXN0ZXJIaXN0b2dyYW09bWUuY2xvbmUobi54bGFDbHVzdGVySGlzdG9ncmFtKSxzLmhhc05vbkNvbnRyb2xFZGdlcz1uLmhhc05vbkNvbnRyb2xFZGdlcyxzLmluY2x1ZGU9bi5pbmNsdWRlLHMubm9kZUF0dHJpYnV0ZXM9bWUuY2xvbmUobi5ub2RlQXR0cmlidXRlcykscy5hc3NvY2lhdGVkRnVuY3Rpb249bi5hc3NvY2lhdGVkRnVuY3Rpb24sbWUuZWFjaChuLm1ldGFncmFwaC5ub2RlcygpLGw9PntsZXQgYz1uLm1ldGFncmFwaC5ub2RlKGwpO3N3aXRjaChjLnR5cGUpe2Nhc2UganQuTUVUQTpsZXQgdT10aGlzLmNsb25lRnVuY3Rpb25MaWJyYXJ5TWV0YW5vZGVIZWxwZXIodCxyLGMsaSxvLGEpO3UucGFyZW50Tm9kZT1zLHMubWV0YWdyYXBoLnNldE5vZGUodS5uYW1lLHUpLHRoaXMuaGllcmFyY2h5LnNldE5vZGUodS5uYW1lLHUpO2JyZWFrO2Nhc2UganQuT1A6bGV0IGg9dGhpcy5jbG9uZUFuZEFkZEZ1bmN0aW9uT3BOb2RlKHMsaSxjLG8pO21lLmlzTnVtYmVyKGguZnVuY3Rpb25JbnB1dEluZGV4KSYmdGhpcy5wYXRjaEVkZ2VzSW50b0Z1bmN0aW9uSW5wdXRzKHIsaCksbWUuaXNOdW1iZXIoaC5mdW5jdGlvbk91dHB1dEluZGV4KSYmKGFbaC5mdW5jdGlvbk91dHB1dEluZGV4XT1oKTticmVhaztkZWZhdWx0OmNvbnNvbGUud2FybihjLm5hbWUrIiBpcyBvZGRseSBuZWl0aGVyIGEgbWV0YW5vZGUgbm9yIGFuIG9wbm9kZS4iKX19KSx0aGlzLmNsb25lTGlicmFyeU1ldGFub2RlRWRnZXMobixzLGksbyksc31jbG9uZUxpYnJhcnlNZXRhbm9kZUVkZ2VzKHQscixuLGkpe21lLmVhY2godC5tZXRhZ3JhcGguZWRnZXMoKSxvPT57bGV0IGE9dC5tZXRhZ3JhcGguZWRnZShvKSxzPWEudi5yZXBsYWNlKG4saSksbD1hLncucmVwbGFjZShuLGkpLGM9bmV3IEdmKHMsbCk7Yy5pbmJvdW5kPWEuaW5ib3VuZCxjLm51bVJlZ3VsYXJFZGdlcz1hLm51bVJlZ3VsYXJFZGdlcyxjLm51bUNvbnRyb2xFZGdlcz1hLm51bUNvbnRyb2xFZGdlcyxjLm51bVJlZkVkZ2VzPWEubnVtUmVmRWRnZXMsYy50b3RhbFNpemU9YS50b3RhbFNpemUsYS5iYXNlRWRnZUxpc3QmJihjLmJhc2VFZGdlTGlzdD1hLmJhc2VFZGdlTGlzdC5tYXAodT0+e2xldCBoPW1lLmNsb25lKHUpO3JldHVybiBoLnY9dS52LnJlcGxhY2UobixpKSxoLnc9dS53LnJlcGxhY2UobixpKSxofSkpLHIubWV0YWdyYXBoLm5vZGUobCk/ci5tZXRhZ3JhcGguc2V0RWRnZShzLGwsYyk6ci5tZXRhZ3JhcGguc2V0RWRnZShsLHMsYyl9KX1wYXRjaEVkZ2VzSW50b0Z1bmN0aW9uSW5wdXRzKHQscil7bGV0IG49TWF0aC5taW4oci5mdW5jdGlvbklucHV0SW5kZXgsdC5pbnB1dHMubGVuZ3RoLTEpLGk9bWUuY2xvbmUodC5pbnB1dHNbbl0pO2Zvcig7aS5pc0NvbnRyb2xEZXBlbmRlbmN5OyluKyssaT10LmlucHV0c1tuXTtyLmlucHV0cy5wdXNoKGkpO2xldCBvPXRoaXMuaGllcmFyY2h5LmdldFByZWRlY2Vzc29ycyh0Lm5hbWUpLGEscz0wO21lLmVhY2goby5yZWd1bGFyLGw9PntpZihzKz1sLm51bVJlZ3VsYXJFZGdlcyxzPm4pcmV0dXJuIGE9bCwhMX0pLG1lLmVhY2goYS5iYXNlRWRnZUxpc3QsbD0+e2wudz09PXQubmFtZSYmKGwudz1yLm5hbWUpLGwudj09PXQubmFtZSYmKGwudj1yLm5hbWUpfSl9cGF0Y2hFZGdlc0Zyb21GdW5jdGlvbk91dHB1dHModCxyKXtsZXQgbj10aGlzLmhpZXJhcmNoeS5nZXRTdWNjZXNzb3JzKHQubmFtZSk7bWUuZWFjaChuLnJlZ3VsYXIsaT0+e21lLmVhY2goaS5iYXNlRWRnZUxpc3Qsbz0+e2xldCBhPXRoaXMuaGllcmFyY2h5Lm5vZGUoby53KTttZS5lYWNoKGEuaW5wdXRzLHM9PntpZihzLm5hbWU9PT10Lm5hbWUpe2xldCBsPXJbcy5vdXRwdXRUZW5zb3JLZXldO3MubmFtZT1sLm5hbWUscy5vdXRwdXRUZW5zb3JLZXk9by5vdXRwdXRUZW5zb3JLZXl9fSl9KSxtZS5lYWNoKGkuYmFzZUVkZ2VMaXN0LG89PntvLnY9cltvLm91dHB1dFRlbnNvcktleV0ubmFtZSxvLm91dHB1dFRlbnNvcktleT0iMCJ9KX0pfWJ1aWxkU3ViaGllcmFyY2h5KHQpe2lmKHQgaW4gdGhpcy5oYXNTdWJoaWVyYXJjaHkpcmV0dXJuO3RoaXMuaGFzU3ViaGllcmFyY2h5W3RdPSEwO2xldCByPXRoaXMuaW5kZXhbdF07aWYoci5ub2RlLnR5cGUhPT1qdC5NRVRBJiZyLm5vZGUudHlwZSE9PWp0LlNFUklFUylyZXR1cm47bGV0IG49cixpPW4ubm9kZS5tZXRhZ3JhcGgsbz1uLmNvcmVHcmFwaCxhPVtdLHM9W107bWUuaXNFbXB0eSh0aGlzLmhpZXJhcmNoeS5saWJyYXJ5RnVuY3Rpb25zKXx8KG1lLmVhY2goaS5ub2RlcygpLGQ9PntsZXQgZz1pLm5vZGUoZCksXz10aGlzLmhpZXJhcmNoeS5saWJyYXJ5RnVuY3Rpb25zW2cub3BdO2lmKCFffHxkLmluZGV4T2YoTWEpPT09MClyZXR1cm47bGV0IHk9dGhpcy5jbG9uZUZ1bmN0aW9uTGlicmFyeU1ldGFub2RlKGksZyxfLm5vZGUsXy5ub2RlLm5hbWUsZy5uYW1lKTthLnB1c2goZykscy5wdXNoKHkpfSksbWUuZWFjaChzLChkLGcpPT57bGV0IF89YVtnXTtkLnBhcmVudE5vZGU9Xy5wYXJlbnROb2RlLGkuc2V0Tm9kZShfLm5hbWUsZCksdGhpcy5oaWVyYXJjaHkuc2V0Tm9kZShfLm5hbWUsZCl9KSksbWUuZWFjaChpLm5vZGVzKCksZD0+e2xldCBnPXRoaXMuZ2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKGQpLF89Zy5ub2RlO28uc2V0Tm9kZShkLGcpLF8uaXNHcm91cE5vZGV8fChtZS5lYWNoKF8uaW5FbWJlZGRpbmdzLHk9PntsZXQgeD1uZXcgemQobnVsbCksYj1uZXcgV2YoeSk7Z2xlKGcseSxiLHgsZ2kuQ09OU1RBTlQpLHRoaXMuaW5kZXhbeS5uYW1lXT1ifSksbWUuZWFjaChfLm91dEVtYmVkZGluZ3MseT0+e2xldCB4PW5ldyB6ZChudWxsKSxiPW5ldyBXZih5KTtfbGUoZyx5LGIseCxnaS5TVU1NQVJZKSx0aGlzLmluZGV4W3kubmFtZV09Yn0pKX0pLG1lLmVhY2goaS5lZGdlcygpLGQ9PntsZXQgZz1pLmVkZ2UoZCksXz1uZXcgemQoZyk7Xy5pc0ZhZGVkT3V0PXRoaXMuaW5kZXhbZC52XS5pc0ZhZGVkT3V0fHx0aGlzLmluZGV4W2Qud10uaXNGYWRlZE91dCxvLnNldEVkZ2UoZC52LGQudyxfKX0pLG4ubm9kZS50eXBlPT09anQuTUVUQSYmUGNyKG4sdGhpcy5hdXRvRXh0cmFjdE5vZGVzKSxtZS5pc0VtcHR5KHRoaXMuaGllcmFyY2h5LmxpYnJhcnlGdW5jdGlvbnMpfHx0aGlzLmJ1aWxkU3ViaGllcmFyY2hpZXNGb3JOZWVkZWRGdW5jdGlvbnMoaSksdD09PXFjJiZtZS5mb3JPd24odGhpcy5oaWVyYXJjaHkubGlicmFyeUZ1bmN0aW9ucywoZCxnKT0+e2xldCBfPWQubm9kZSx5PXRoaXMuZ2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKF8ubmFtZSk7bi5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdC5wdXNoKHkpLHkubm9kZS5pbmNsdWRlPXVyLkVYQ0xVREUsby5yZW1vdmVOb2RlKF8ubmFtZSl9KTtsZXQgbD1uLm5vZGUucGFyZW50Tm9kZTtpZighbClyZXR1cm47bGV0IGM9dGhpcy5pbmRleFtsLm5hbWVdLHU9KGQsLi4uZyk9PmcuY29uY2F0KFtkPyJJTiI6Ik9VVCJdKS5qb2luKCJ+fiIpLGg9dGhpcy5oaWVyYXJjaHkuZ2V0QnJpZGdlZ3JhcGgodCksZj17aW46e30sb3V0Ont9LGNvbnRyb2w6e319O21lLmVhY2goaC5lZGdlcygpLGQ9PntsZXQgZz0hIWkubm9kZShkLncpLF89Zz9kLnY6ZC53O2guZWRnZShkKS5udW1SZWd1bGFyRWRnZXM/Zz9mLm91dFtfXT0oZi5vdXRbX118fDApKzE6Zi5pbltfXT0oZi5pbltfXXx8MCkrMTpmLmNvbnRyb2xbX109KGYuY29udHJvbFtfXXx8MCkrMX0pO2xldCBwPXRoaXMuaGllcmFyY2h5LmdldE5vZGVNYXAoKTttZS5lYWNoKGguZWRnZXMoKSxkPT57bGV0IGc9aC5lZGdlKGQpLF89ISFpLm5vZGUoZC53KSxbeSx4XT1fP1tkLncsZC52XTpbZC52LGQud10sYj10aGlzLmluZGV4W3ldLFM9dGhpcy5pbmRleFt4XSxDPVM/Uy5ub2RlOnBbeF0sUD0hZy5udW1SZWd1bGFyRWRnZXMmJmYuY29udHJvbFt4XT5Yby5tYXhDb250cm9sRGVncmVlLFssa109Xz9bci5pbkFubm90YXRpb25zLGIuaW5Bbm5vdGF0aW9uc106W3Iub3V0QW5ub3RhdGlvbnMsYi5vdXRBbm5vdGF0aW9uc10sRD0oXz9mLm91dDpmLmluKVt4XT5Yby5tYXhCcmlkZ2VQYXRoRGVncmVlLEI9bnVsbCxJPSExO2lmKFhvLmVuYWJsZUJyaWRnZWdyYXBoJiYhRCYmIVAmJmIuaXNJbkNvcmUoKSl7bGV0IFc9Wj0+e2xldCBydD1fP3t2Olosdzp0fTp7djp0LHc6Wn07cmV0dXJuIGMuY29yZUdyYXBoLmVkZ2UocnQpfTtCPVcoeCksQnx8KEI9Vyh1KF8seCxsLm5hbWUpKSksST0hIUJ9bGV0IEw9ITE7aWYoQiYmIWcubnVtUmVndWxhckVkZ2VzKXtsZXQgVz1CLFo9Yy5ub2RlO2Zvcig7Vy5hZGpvaW5pbmdNZXRhZWRnZTspVz1XLmFkam9pbmluZ01ldGFlZGdlLFo9Wi5wYXJlbnROb2RlO2xldCBydD10aGlzLmhpZXJhcmNoeS5nZXRUb3BvbG9naWNhbE9yZGVyaW5nKFoubmFtZSksb3Q9Vy5tZXRhZWRnZTtMPXJ0W290LnZdPnJ0W290LnddfWlmKEk9SSYmIUwsIUkpe2sucHVzaChuZXcgaTMoQyxTLG5ldyB6ZChnKSxnaS5TSE9SVENVVCxfKSk7cmV0dXJufWxldCBSPXUoXyx0KSxGPXUoXyx4LHQpLHo9by5ub2RlKEYpO2lmKCF6KXtsZXQgVz1vLm5vZGUoUik7aWYoIVcpe2xldCBydD17bmFtZTpSLHR5cGU6anQuQlJJREdFLGlzR3JvdXBOb2RlOiExLGNhcmRpbmFsaXR5OjAscGFyZW50Tm9kZTpudWxsLHN0YXRzOm51bGwsaW5jbHVkZTp1ci5VTlNQRUNJRklFRCxpbmJvdW5kOl8sbm9kZUF0dHJpYnV0ZXM6e319O1c9bmV3IFdmKHJ0KSx0aGlzLmluZGV4W1JdPVcsby5zZXROb2RlKFIsVyl9bGV0IFo9e25hbWU6Rix0eXBlOmp0LkJSSURHRSxpc0dyb3VwTm9kZTohMSxjYXJkaW5hbGl0eToxLHBhcmVudE5vZGU6bnVsbCxzdGF0czpudWxsLGluY2x1ZGU6dXIuVU5TUEVDSUZJRUQsaW5ib3VuZDpfLG5vZGVBdHRyaWJ1dGVzOnt9fTt6PW5ldyBXZihaKSx0aGlzLmluZGV4W0ZdPXosby5zZXROb2RlKEYseiksby5zZXRQYXJlbnQoRixSKSxXLm5vZGUuY2FyZGluYWxpdHkrK31sZXQgVT1uZXcgemQoZyk7VS5hZGpvaW5pbmdNZXRhZWRnZT1CLF8/by5zZXRFZGdlKEYseSxVKTpvLnNldEVkZ2UoeSxGLFUpfSksbWUuZWFjaChbITAsITFdLGQ9PntsZXQgZz11KGQsdCksXz1vLm5vZGUoZyk7IV98fG1lLmVhY2goby5ub2RlcygpLHk9Pnt2YXIgayxPO2lmKG8ubm9kZSh5KS5ub2RlLnR5cGU9PT1qdC5CUklER0V8fCEoZD8hKChrPW8ucHJlZGVjZXNzb3JzKHkpKSE9bnVsbCYmay5sZW5ndGgpOiEoKE89by5zdWNjZXNzb3JzKHkpKSE9bnVsbCYmTy5sZW5ndGgpKSlyZXR1cm47bGV0IFM9dShkLHQsIlNUUlVDVFVSQUxfVEFSR0VUIiksQz1vLm5vZGUoUyk7aWYoIUMpe2xldCBEPXtuYW1lOlMsdHlwZTpqdC5CUklER0UsaXNHcm91cE5vZGU6ITEsY2FyZGluYWxpdHk6MSxwYXJlbnROb2RlOm51bGwsc3RhdHM6bnVsbCxpbmNsdWRlOnVyLlVOU1BFQ0lGSUVELGluYm91bmQ6ZCxub2RlQXR0cmlidXRlczp7fX07Qz1uZXcgV2YoRCksQy5zdHJ1Y3R1cmFsPSEwLHRoaXMuaW5kZXhbU109QyxvLnNldE5vZGUoUyxDKSxfLm5vZGUuY2FyZGluYWxpdHkrKyxvLnNldFBhcmVudChTLGcpfWxldCBQPW5ldyB6ZChudWxsKTtQLnN0cnVjdHVyYWw9ITAsUC53ZWlnaHQtLSxkP28uc2V0RWRnZShTLHksUCk6by5zZXRFZGdlKHksUyxQKX0pfSl9YnVpbGRTdWJoaWVyYXJjaGllc0Zvck5lZWRlZEZ1bmN0aW9ucyh0KXttZS5lYWNoKHQuZWRnZXMoKSxyPT57bGV0IG49dC5lZGdlKHIpLGk9bmV3IHpkKG4pO21lLmZvckVhY2goaS5tZXRhZWRnZS5iYXNlRWRnZUxpc3Qsbz0+e2xldCBhPW8udi5zcGxpdChQbCk7Zm9yKGxldCBzPWEubGVuZ3RoO3M+PTA7cy0tKXtsZXQgbD1hLnNsaWNlKDAscyksYz10aGlzLmhpZXJhcmNoeS5ub2RlKGwuam9pbihQbCkpO2lmKGMpe2lmKGMudHlwZT09PWp0Lk9QJiZ0aGlzLmhpZXJhcmNoeS5saWJyYXJ5RnVuY3Rpb25zW2Mub3BdKWZvcihsZXQgdT0xO3U8bC5sZW5ndGg7dSsrKXtsZXQgaD1sLnNsaWNlKDAsdSkuam9pbihQbCk7IWh8fHRoaXMuYnVpbGRTdWJoaWVyYXJjaHkoaCl9YnJlYWt9fX0pfSl9fSxpMz1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpLG8pe3RoaXMubm9kZT10LHRoaXMucmVuZGVyTm9kZUluZm89cix0aGlzLnJlbmRlck1ldGFlZGdlSW5mbz1uLHRoaXMuYW5ub3RhdGlvblR5cGU9aSx0aGlzLmR4PTAsdGhpcy5keT0wLHRoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLG4mJm4ubWV0YWVkZ2UmJih0aGlzLnY9bi5tZXRhZWRnZS52LHRoaXMudz1uLm1ldGFlZGdlLncpLHRoaXMuaXNJbj1vLHRoaXMucG9pbnRzPVtdfX0sZ2k7KGZ1bmN0aW9uKGUpe2VbZS5TSE9SVENVVD0wXT0iU0hPUlRDVVQiLGVbZS5DT05TVEFOVD0xXT0iQ09OU1RBTlQiLGVbZS5TVU1NQVJZPTJdPSJTVU1NQVJZIixlW2UuRUxMSVBTSVM9M109IkVMTElQU0lTIn0pKGdpfHwoZ2k9e30pKTt2YXIgd0g9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmxpc3Q9W10sdGhpcy5ub2RlTmFtZXM9e319cHVzaCh0KXtpZih0Lm5vZGUubmFtZSBpbiB0aGlzLm5vZGVOYW1lcylyZXR1cm47aWYodGhpcy5ub2RlTmFtZXNbdC5ub2RlLm5hbWVdPSEwLHRoaXMubGlzdC5sZW5ndGg8WG8ubWF4QW5ub3RhdGlvbnMpe3RoaXMubGlzdC5wdXNoKHQpO3JldHVybn1sZXQgcj10aGlzLmxpc3RbdGhpcy5saXN0Lmxlbmd0aC0xXTtpZihyLmFubm90YXRpb25UeXBlPT09Z2kuRUxMSVBTSVMpe2xldCBpPXIubm9kZTtpLnNldE51bU1vcmVOb2RlcygrK2kubnVtTW9yZU5vZGVzKTtyZXR1cm59bGV0IG49bmV3IF9IKDEpO3RoaXMubGlzdC5wdXNoKG5ldyBpMyhuLG5ldyBXZihuKSxudWxsLGdpLkVMTElQU0lTLHQuaXNJbikpfX0sV2Y9Y2xhc3N7Y29uc3RydWN0b3IodCl7aWYodGhpcy5ub2RlPXQsdGhpcy5leHBhbmRlZD0hMSx0aGlzLmluQW5ub3RhdGlvbnM9bmV3IHdILHRoaXMub3V0QW5ub3RhdGlvbnM9bmV3IHdILHRoaXMueD0wLHRoaXMueT0wLHRoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLHRoaXMuaW5ib3hXaWR0aD0wLHRoaXMub3V0Ym94V2lkdGg9MCx0aGlzLmV4Y2x1ZGVkPSExLHRoaXMuc3RydWN0dXJhbD0hMSx0aGlzLmxhYmVsT2Zmc2V0PTAsdGhpcy5yYWRpdXM9MCx0aGlzLmxhYmVsSGVpZ2h0PTAsdGhpcy5wYWRkaW5nVG9wPTAsdGhpcy5wYWRkaW5nTGVmdD0wLHRoaXMucGFkZGluZ1JpZ2h0PTAsdGhpcy5wYWRkaW5nQm90dG9tPTAsdGhpcy5pc0luRXh0cmFjdD0hMSx0aGlzLmlzT3V0RXh0cmFjdD0hMSx0aGlzLmNvcmVCb3g9e3dpZHRoOjAsaGVpZ2h0OjB9LHRoaXMuaXNGYWRlZE91dD0hMSx0aGlzLmRpc3BsYXlOYW1lPXQubmFtZS5zdWJzdHJpbmcodC5uYW1lLmxhc3RJbmRleE9mKFBsKSsxKSx0LnR5cGU9PT1qdC5NRVRBJiZ0LmFzc29jaWF0ZWRGdW5jdGlvbil7bGV0IHI9dGhpcy5kaXNwbGF5TmFtZS5tYXRjaCh3Y3IpO3I/dGhpcy5kaXNwbGF5TmFtZT1yWzFdOm1lLnN0YXJ0c1dpdGgodGhpcy5kaXNwbGF5TmFtZSxNYSkmJih0aGlzLmRpc3BsYXlOYW1lPXRoaXMuZGlzcGxheU5hbWUuc3Vic3RyaW5nKE1hLmxlbmd0aCkpfX1pc0luQ29yZSgpe3JldHVybiF0aGlzLmlzSW5FeHRyYWN0JiYhdGhpcy5pc091dEV4dHJhY3QmJiF0aGlzLmlzTGlicmFyeUZ1bmN0aW9ufX0semQ9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5tZXRhZWRnZT10LHRoaXMuYWRqb2luaW5nTWV0YWVkZ2U9bnVsbCx0aGlzLnN0cnVjdHVyYWw9ITEsdGhpcy53ZWlnaHQ9MSx0aGlzLmlzRmFkZWRPdXQ9ITF9fTtmdW5jdGlvbiBnbGUoZSx0LHIsbixpKXtsZXQgbz1uZXcgaTModCxyLG4saSwhMCk7ZS5pbkFubm90YXRpb25zLnB1c2gobyl9ZnVuY3Rpb24gX2xlKGUsdCxyLG4saSl7bGV0IG89bmV3IGkzKHQscixuLGksITEpO2Uub3V0QW5ub3RhdGlvbnMucHVzaChvKX1mdW5jdGlvbiBTY3IoZSx0KXttZS5lYWNoKGUubm9kZXMoKSxyPT57bGV0IG49ZS5ub2RlKHIpO2lmKG4uZXhwYW5kZWQ9dD4xLHQ+MClzd2l0Y2gobi5ub2RlLnR5cGUpe2Nhc2UganQuTUVUQTpjYXNlIGp0LlNFUklFUzp5bGUobix0LTEpO2JyZWFrfX0pfXZhciBTSD1jbGFzcyBleHRlbmRzIFdme2NvbnN0cnVjdG9yKHQscil7c3VwZXIodCk7bGV0IGk9dC5tZXRhZ3JhcGguZ3JhcGgoKTt0aGlzLmNvcmVHcmFwaD1lMyhpLm5hbWUsXzAuQ09SRSxyKSx0aGlzLmluRXh0cmFjdEJveD17d2lkdGg6MCxoZWlnaHQ6MH0sdGhpcy5vdXRFeHRyYWN0Qm94PXt3aWR0aDowLGhlaWdodDowfSx0aGlzLmxpYnJhcnlGdW5jdGlvbnNCb3g9e3dpZHRoOjAsaGVpZ2h0OjB9LHRoaXMuaXNvbGF0ZWRJbkV4dHJhY3Q9W10sdGhpcy5pc29sYXRlZE91dEV4dHJhY3Q9W10sdGhpcy5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdD1bXX19O2Z1bmN0aW9uIHlsZShlLHQpe2UuY29yZUdyYXBoJiZTY3IoZS5jb3JlR3JhcGgsdCl9ZnVuY3Rpb24gdVAoZSx0LHIpe2xldCBuPWUubm9kZSh0KSxpPWUubm9kZShyKSxvPWUuZWRnZSh0LHIpOyhuLm5vZGUuaW5jbHVkZT09PXVyLklOQ0xVREV8fGkubm9kZS5pbmNsdWRlPT09dXIuSU5DTFVERSkmJm4ubm9kZS5pbmNsdWRlIT09dXIuRVhDTFVERSYmaS5ub2RlLmluY2x1ZGUhPT11ci5FWENMVURFfHwoX2xlKG4saS5ub2RlLGksbyxnaS5TSE9SVENVVCksZ2xlKGksbi5ub2RlLG4sbyxnaS5TSE9SVENVVCksZS5yZW1vdmVFZGdlKHQscikpfWZ1bmN0aW9uIFVsdChlLHQscil7dmFyIG87bGV0IG49ZS5jb3JlR3JhcGgsaT1uLm5vZGUodCk7aS5pc091dEV4dHJhY3Q9ITAsbWUuZWFjaChuLnByZWRlY2Vzc29ycyh0KSwoYSxzKT0+e3VQKG4sYSx0KX0pLChYby5kZXRhY2hBbGxFZGdlc0ZvckhpZ2hEZWdyZWV8fHIpJiZtZS5lYWNoKG4uc3VjY2Vzc29ycyh0KSwoYSxzKT0+e3VQKG4sdCxhKX0pLCgobz1uLm5laWdoYm9ycyh0KSk9PW51bGw/dm9pZCAwOm8ubGVuZ3RoKT09PTAmJihpLm5vZGUuaW5jbHVkZT11ci5FWENMVURFLGUuaXNvbGF0ZWRPdXRFeHRyYWN0LnB1c2goaSksbi5yZW1vdmVOb2RlKHQpKX1mdW5jdGlvbiBxbHQoZSx0LHIpe3ZhciBvO2xldCBuPWUuY29yZUdyYXBoLGk9bi5ub2RlKHQpO2kuaXNJbkV4dHJhY3Q9ITAsbWUuZWFjaChuLnN1Y2Nlc3NvcnModCksKGEscyk9Pnt1UChuLHQsYSl9KSwoWG8uZGV0YWNoQWxsRWRnZXNGb3JIaWdoRGVncmVlfHxyKSYmbWUuZWFjaChuLnByZWRlY2Vzc29ycyh0KSwoYSxzKT0+e3VQKG4sYSx0KX0pLCgobz1uLm5laWdoYm9ycyh0KSk9PW51bGw/dm9pZCAwOm8ubGVuZ3RoKT09PTAmJihpLm5vZGUuaW5jbHVkZT11ci5FWENMVURFLGUuaXNvbGF0ZWRJbkV4dHJhY3QucHVzaChpKSxuLnJlbW92ZU5vZGUodCkpfWZ1bmN0aW9uIHZsZShlLHQpe2lmKGUudHlwZT09PWp0Lk9QKXtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKylpZihlLm9wPT09dFtyXSlyZXR1cm4hMH1lbHNlIGlmKGUudHlwZT09PWp0Lk1FVEEpe2xldCByPWUuZ2V0Um9vdE9wKCk7aWYocil7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspaWYoci5vcD09PXRbbl0pcmV0dXJuITB9fXJldHVybiExfWZ1bmN0aW9uIE1jcihlKXtsZXQgdD1lLmNvcmVHcmFwaDttZS5lYWNoKHQubm9kZXMoKSxyPT57dmFyIGksbzt0Lm5vZGUocikubm9kZS5pbmNsdWRlPT09dXIuRVhDTFVERSYmIXIuc3RhcnRzV2l0aChNYSkmJigoKGk9ZS5jb3JlR3JhcGgub3V0RWRnZXMocikpPT1udWxsP3ZvaWQgMDppLmxlbmd0aCk+KChvPWUuY29yZUdyYXBoLmluRWRnZXMocikpPT1udWxsP3ZvaWQgMDpvLmxlbmd0aCk/VWx0KGUsciwhMCk6cWx0KGUsciwhMCkpfSl9ZnVuY3Rpb24gRWNyKGUpe2xldCB0PWUuY29yZUdyYXBoO21lLmVhY2godC5ub2RlcygpLHI9PntsZXQgbj10Lm5vZGUocik7bi5ub2RlLmluY2x1ZGU9PT11ci5VTlNQRUNJRklFRCYmdmxlKG4ubm9kZSxYby5vdXRFeHRyYWN0VHlwZXMpJiZVbHQoZSxyKX0pfWZ1bmN0aW9uIFRjcihlKXtsZXQgdD1lLmNvcmVHcmFwaDttZS5lYWNoKHQubm9kZXMoKSxyPT57bGV0IG49dC5ub2RlKHIpO24ubm9kZS5pbmNsdWRlPT09dXIuVU5TUEVDSUZJRUQmJnZsZShuLm5vZGUsWG8uaW5FeHRyYWN0VHlwZXMpJiZxbHQoZSxyKX0pfWZ1bmN0aW9uIENjcihlKXtsZXQgdD1lLmNvcmVHcmFwaCxyPXt9LG49e30saT0wO2lmKG1lLmVhY2godC5ub2RlcygpLF89Pnt2YXIgYixTLEMsUDtpZih0Lm5vZGUoXykubm9kZS5pbmNsdWRlIT09dXIuVU5TUEVDSUZJRUQpcmV0dXJuO2xldCB5PW1lLnJlZHVjZSh0LnByZWRlY2Vzc29ycyhfKSwoayxPKT0+e2xldCBEPXQuZWRnZShPLF8pLm1ldGFlZGdlO3JldHVybiBrKyhELm51bVJlZ3VsYXJFZGdlcz8xOjApfSwwKTt5PT09MCYmKChiPXQucHJlZGVjZXNzb3JzKF8pKT09bnVsbD92b2lkIDA6Yi5sZW5ndGgpPjAmJih5PShTPXQucHJlZGVjZXNzb3JzKF8pKT09bnVsbD92b2lkIDA6Uy5sZW5ndGgpO2xldCB4PW1lLnJlZHVjZSh0LnN1Y2Nlc3NvcnMoXyksKGssTyk9PntsZXQgRD10LmVkZ2UoXyxPKS5tZXRhZWRnZTtyZXR1cm4gaysoRC5udW1SZWd1bGFyRWRnZXM/MTowKX0sMCk7eD09PTAmJigoQz10LnN1Y2Nlc3NvcnMoXykpPT1udWxsP3ZvaWQgMDpDLmxlbmd0aCk+MCYmKHg9KFA9dC5zdWNjZXNzb3JzKF8pKT09bnVsbD92b2lkIDA6UC5sZW5ndGgpLHJbX109eSxuW19dPXgsaSsrfSksaTxYby5taW5Ob2RlQ291bnRGb3JFeHRyYWN0aW9uKXJldHVybjtsZXQgbz1Yby5taW5EZWdyZWVGb3JFeHRyYWN0aW9uLTEsYT1NYXRoLnJvdW5kKGkqLjc1KSxzPU1hdGgucm91bmQoaSouMjUpLGw9T2JqZWN0LmtleXMocikuc29ydCgoXyx5KT0+cltfXS1yW3ldKSxjPXJbbFthXV0sdT1yW2xbc11dLGg9YytjLXU7aD1NYXRoLm1heChoLG8pO2ZvcihsZXQgXz1pLTE7cltsW19dXT5oO18tLSlxbHQoZSxsW19dKTtsZXQgZj1PYmplY3Qua2V5cyhuKS5zb3J0KChfLHkpPT5uW19dLW5beV0pLHA9bltmW2FdXSxkPW5bZltzXV0sZz1wKyhwLWQpKjQ7Zz1NYXRoLm1heChnLG8pO2ZvcihsZXQgXz1pLTE7bltmW19dXT5nO18tLSl7bGV0IHk9dC5ub2RlKGZbX10pOyF5fHx5LmlzSW5FeHRyYWN0fHxVbHQoZSxmW19dKX19ZnVuY3Rpb24gQWNyKGUpe2xldCB0PWUuY29yZUdyYXBoLHI9e307bWUuZWFjaCh0LmVkZ2VzKCksbj0+e3QuZWRnZShuKS5tZXRhZWRnZS5udW1SZWd1bGFyRWRnZXN8fCgocltuLnZdPXJbbi52XXx8W10pLnB1c2gobiksKHJbbi53XT1yW24ud118fFtdKS5wdXNoKG4pKX0pLG1lLmVhY2gociwobixpKT0+e24ubGVuZ3RoPlhvLm1heENvbnRyb2xEZWdyZWUmJm1lLmVhY2gobixvPT51UCh0LG8udixvLncpKX0pfWZ1bmN0aW9uIFBjcihlLHQpe01jcihlKSxYby5vdXRFeHRyYWN0VHlwZXMubGVuZ3RoJiZFY3IoZSksWG8uaW5FeHRyYWN0VHlwZXMubGVuZ3RoJiZUY3IoZSksdCYmQ2NyKGUpLFhvLm1heENvbnRyb2xEZWdyZWUmJkFjcihlKTtsZXQgcj1lLmNvcmVHcmFwaDttZS5lYWNoKHIubm9kZXMoKSxuPT57dmFyIGE7bGV0IGk9ci5ub2RlKG4pLG89KGE9ci5uZWlnaGJvcnMobikpPT1udWxsP3ZvaWQgMDphLmxlbmd0aDtpZihpLm5vZGUuaW5jbHVkZT09PXVyLlVOU1BFQ0lGSUVEJiZvPT09MCl7bGV0IHM9aS5vdXRBbm5vdGF0aW9ucy5saXN0Lmxlbmd0aD4wLGw9aS5pbkFubm90YXRpb25zLmxpc3QubGVuZ3RoPjA7aS5pc0luRXh0cmFjdD8oZS5pc29sYXRlZEluRXh0cmFjdC5wdXNoKGkpLGkubm9kZS5pbmNsdWRlPXVyLkVYQ0xVREUsci5yZW1vdmVOb2RlKG4pKTppLmlzT3V0RXh0cmFjdD8oZS5pc29sYXRlZE91dEV4dHJhY3QucHVzaChpKSxpLm5vZGUuaW5jbHVkZT11ci5FWENMVURFLHIucmVtb3ZlTm9kZShuKSk6WG8uZXh0cmFjdElzb2xhdGVkTm9kZXNXaXRoQW5ub3RhdGlvbnNPbk9uZVNpZGUmJihzJiYhbD8oaS5pc0luRXh0cmFjdD0hMCxlLmlzb2xhdGVkSW5FeHRyYWN0LnB1c2goaSksaS5ub2RlLmluY2x1ZGU9dXIuRVhDTFVERSxyLnJlbW92ZU5vZGUobikpOmwmJiFzJiYoaS5pc091dEV4dHJhY3Q9ITAsZS5pc29sYXRlZE91dEV4dHJhY3QucHVzaChpKSxpLm5vZGUuaW5jbHVkZT11ci5FWENMVURFLHIucmVtb3ZlTm9kZShuKSkpfX0pfWZ1bmN0aW9uIHhsZShlLHQscil7bGV0IG49ci5zcGxpdCgiLyIpLGk9bltuLmxlbmd0aC0xXS5tYXRjaCgvKC4qKTpcdysvKTsoaT09bnVsbD92b2lkIDA6aS5sZW5ndGgpPT09MiYmKG5bbi5sZW5ndGgtMV09aT09bnVsbD92b2lkIDA6aVsxXSk7bGV0IG89blswXSxhPXQuZ2V0UmVuZGVyTm9kZUJ5TmFtZShvKTtmb3IobGV0IHM9MTtzPG4ubGVuZ3RoJiZhLm5vZGUudHlwZSE9PWp0Lk9QO3MrKyl0LmJ1aWxkU3ViaGllcmFyY2h5KG8pLGEuZXhwYW5kZWQ9ITAsZS5zZXROb2RlRXhwYW5kZWQoYSksbys9Ii8iK25bc10sYT10LmdldFJlbmRlck5vZGVCeU5hbWUobyk7cmV0dXJuIGEubm9kZS5uYW1lfXZhciBNbGU9RWUoT2x0KCksMSksWmU9RWUoT2UoKSwxKTt2YXIgVHI9e2FuaW1hdGlvbjp7ZHVyYXRpb246MjUwfSxncmFwaDp7bWV0YTp7bm9kZVNlcDo1LHJhbmtTZXA6MjUsZWRnZVNlcDo1fSxzZXJpZXM6e25vZGVTZXA6NSxyYW5rU2VwOjI1LGVkZ2VTZXA6NX0scGFkZGluZzp7cGFkZGluZ1RvcDo0MCxwYWRkaW5nTGVmdDoyMH19LHN1YnNjZW5lOnttZXRhOntwYWRkaW5nVG9wOjEwLHBhZGRpbmdCb3R0b206MTAscGFkZGluZ0xlZnQ6MTAscGFkZGluZ1JpZ2h0OjEwLGxhYmVsSGVpZ2h0OjIwLGV4dHJhY3RYT2Zmc2V0OjE1LGV4dHJhY3RZT2Zmc2V0OjIwfSxzZXJpZXM6e3BhZGRpbmdUb3A6MTAscGFkZGluZ0JvdHRvbToxMCxwYWRkaW5nTGVmdDoxMCxwYWRkaW5nUmlnaHQ6MTAsbGFiZWxIZWlnaHQ6MTB9fSxub2RlU2l6ZTp7bWV0YTp7cmFkaXVzOjUsd2lkdGg6NjAsbWF4TGFiZWxXaWR0aDo1MixoZWlnaHQ6em4oKS5kb21haW4oWzEsMjAwXSkucmFuZ2UoWzE1LDYwXSkuY2xhbXAoITApLGV4cGFuZEJ1dHRvblJhZGl1czozfSxvcDp7d2lkdGg6MTUsaGVpZ2h0OjYscmFkaXVzOjMsbGFiZWxPZmZzZXQ6LTgsbWF4TGFiZWxXaWR0aDozMH0sc2VyaWVzOntleHBhbmRlZDp7cmFkaXVzOjEwLGxhYmVsT2Zmc2V0OjB9LHZlcnRpY2FsOnt3aWR0aDoxNixoZWlnaHQ6MTMsbGFiZWxPZmZzZXQ6LTEzfSxob3Jpem9udGFsOnt3aWR0aDoyNCxoZWlnaHQ6OCxyYWRpdXM6MTAsbGFiZWxPZmZzZXQ6LTEwfX0sYnJpZGdlOnt3aWR0aDoyMCxoZWlnaHQ6MjAscmFkaXVzOjIsbGFiZWxPZmZzZXQ6MH19LHNob3J0Y3V0U2l6ZTp7b3A6e3dpZHRoOjEwLGhlaWdodDo0fSxtZXRhOnt3aWR0aDoxMixoZWlnaHQ6NCxyYWRpdXM6MX0sc2VyaWVzOnt3aWR0aDoxNCxoZWlnaHQ6NH19LGFubm90YXRpb25zOntpbmJveFdpZHRoOjUwLG91dGJveFdpZHRoOjUwLHhPZmZzZXQ6MTAseU9mZnNldDozLGxhYmVsT2Zmc2V0OjIsbWF4TGFiZWxXaWR0aDo0MH0sY29uc3RhbnQ6e3NpemU6e3dpZHRoOjQsaGVpZ2h0OjR9fSxzZXJpZXM6e21heFN0YWNrQ291bnQ6MyxwYXJhbGxlbFN0YWNrT2Zmc2V0UmF0aW86LjIsdG93ZXJTdGFja09mZnNldFJhdGlvOi41fSxtaW5pbWFwOntzaXplOjE1MH19LG8zPTE0MDtmdW5jdGlvbiBNSChlKXtlLm5vZGUuaXNHcm91cE5vZGUmJkxjcihlKSxlLm5vZGUudHlwZT09PWp0Lk1FVEE/a2NyKGUpOmUubm9kZS50eXBlPT09anQuU0VSSUVTJiZSY3IoZSl9ZnVuY3Rpb24gSWNyKGUpe2UuaW5ib3hXaWR0aD1lLmluQW5ub3RhdGlvbnMubGlzdC5sZW5ndGg+MD9Uci5hbm5vdGF0aW9ucy5pbmJveFdpZHRoOjAsZS5vdXRib3hXaWR0aD1lLm91dEFubm90YXRpb25zLmxpc3QubGVuZ3RoPjA/VHIuYW5ub3RhdGlvbnMub3V0Ym94V2lkdGg6MCxlLmNvcmVCb3gud2lkdGg9ZS53aWR0aCxlLmNvcmVCb3guaGVpZ2h0PWUuaGVpZ2h0O2xldCB0PWUuZGlzcGxheU5hbWUubGVuZ3RoLHI9MztlLndpZHRoPU1hdGgubWF4KGUuY29yZUJveC53aWR0aCtlLmluYm94V2lkdGgrZS5vdXRib3hXaWR0aCx0KnIpfWZ1bmN0aW9uIExjcihlKXtsZXQgdD1lLmNvcmVHcmFwaC5ub2RlcygpLm1hcChyPT5lLmNvcmVHcmFwaC5ub2RlKHIpKS5jb25jYXQoZS5pc29sYXRlZEluRXh0cmFjdCxlLmlzb2xhdGVkT3V0RXh0cmFjdCxlLmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0KTtaZS5lYWNoKHQscj0+e3N3aXRjaChyLm5vZGUudHlwZSl7Y2FzZSBqdC5PUDpaZS5leHRlbmQocixUci5ub2RlU2l6ZS5vcCk7YnJlYWs7Y2FzZSBqdC5CUklER0U6WmUuZXh0ZW5kKHIsVHIubm9kZVNpemUuYnJpZGdlKTticmVhaztjYXNlIGp0Lk1FVEE6ci5leHBhbmRlZD9NSChyKTooWmUuZXh0ZW5kKHIsVHIubm9kZVNpemUubWV0YSksci5oZWlnaHQ9VHIubm9kZVNpemUubWV0YS5oZWlnaHQoci5ub2RlLmNhcmRpbmFsaXR5KSk7YnJlYWs7Y2FzZSBqdC5TRVJJRVM6aWYoci5leHBhbmRlZClaZS5leHRlbmQocixUci5ub2RlU2l6ZS5zZXJpZXMuZXhwYW5kZWQpLE1IKHIpO2Vsc2V7bGV0IGk9ci5ub2RlLmhhc05vbkNvbnRyb2xFZGdlcz9Uci5ub2RlU2l6ZS5zZXJpZXMudmVydGljYWw6VHIubm9kZVNpemUuc2VyaWVzLmhvcml6b250YWw7WmUuZXh0ZW5kKHIsaSl9YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5yZWNvZ25pemVkIG5vZGUgdHlwZTogIityLm5vZGUudHlwZSl9ci5leHBhbmRlZHx8SWNyKHIpLE5jcihyKX0pfWZ1bmN0aW9uIEVsZShlLHQpe1plLmV4dGVuZChlLmdyYXBoKCkse25vZGVzZXA6dC5ub2RlU2VwLHJhbmtzZXA6dC5yYW5rU2VwLGVkZ2VzZXA6dC5lZGdlU2VwfSk7bGV0IHI9W10sbj1bXTtpZihaZS5lYWNoKGUubm9kZXMoKSxsPT57ZS5ub2RlKGwpLm5vZGUudHlwZT09PWp0LkJSSURHRT9yLnB1c2gobCk6bi5wdXNoKGwpfSksIW4ubGVuZ3RoKXJldHVybnt3aWR0aDowLGhlaWdodDowfTtNbGUubGF5b3V0KGUpO2xldCBpPTEvMCxvPTEvMCxhPS0xLzAscz0tMS8wO3JldHVybiBaZS5lYWNoKG4sbD0+e2xldCBjPWUubm9kZShsKSx1PS41KmMud2lkdGgsaD1jLngtdSxmPWMueCt1O2k9aDxpP2g6aSxhPWY+YT9mOmE7bGV0IHA9LjUqYy5oZWlnaHQsZD1jLnktcCxnPWMueStwO289ZDxvP2Q6byxzPWc+cz9nOnN9KSxaZS5lYWNoKGUuZWRnZXMoKSxsPT57bGV0IGM9ZS5lZGdlKGwpO2lmKGMuc3RydWN0dXJhbClyZXR1cm47bGV0IHU9ZS5ub2RlKGMubWV0YWVkZ2UudiksaD1lLm5vZGUoYy5tZXRhZWRnZS53KTtpZihjLnBvaW50cy5sZW5ndGg9PT0zJiZEY3IoYy5wb2ludHMpKXtpZih1IT1udWxsKXtsZXQgZD11LmV4cGFuZGVkP3UueDp4MCh1KTtjLnBvaW50c1swXS54PWR9aWYoaCE9bnVsbCl7bGV0IGQ9aC5leHBhbmRlZD9oLng6eDAoaCk7Yy5wb2ludHNbMl0ueD1kfWMucG9pbnRzPVtjLnBvaW50c1swXSxjLnBvaW50c1sxXV19bGV0IGY9Yy5wb2ludHNbYy5wb2ludHMubGVuZ3RoLTJdO2ghPW51bGwmJihjLnBvaW50c1tjLnBvaW50cy5sZW5ndGgtMV09U2xlKGYsaCkpO2xldCBwPWMucG9pbnRzWzFdO3UhPW51bGwmJihjLnBvaW50c1swXT1TbGUocCx1KSksWmUuZWFjaChjLnBvaW50cyxkPT57aT1kLng8aT9kLng6aSxhPWQueD5hP2QueDphLG89ZC55PG8/ZC55Om8scz1kLnk+cz9kLnk6c30pfSksWmUuZWFjaChlLm5vZGVzKCksbD0+e2xldCBjPWUubm9kZShsKTtjLngtPWksYy55LT1vfSksWmUuZWFjaChlLmVkZ2VzKCksbD0+e1plLmVhY2goZS5lZGdlKGwpLnBvaW50cyxjPT57Yy54LT1pLGMueS09b30pfSkse3dpZHRoOmEtaSxoZWlnaHQ6cy1vfX1mdW5jdGlvbiBrY3IoZSl7bGV0IHQ9VHIuc3Vic2NlbmUubWV0YTtaZS5leHRlbmQoZSx0KSxaZS5leHRlbmQoZS5jb3JlQm94LEVsZShlLmNvcmVHcmFwaCxUci5ncmFwaC5tZXRhKSk7bGV0IHI9ZS5pc29sYXRlZEluRXh0cmFjdC5sZW5ndGg/WmUubWF4QnkoZS5pc29sYXRlZEluRXh0cmFjdCxjPT5jLndpZHRoKS53aWR0aDpudWxsO2UuaW5FeHRyYWN0Qm94LndpZHRoPXIhPW51bGw/cjowLGUuaW5FeHRyYWN0Qm94LmhlaWdodD1aZS5yZWR1Y2UoZS5pc29sYXRlZEluRXh0cmFjdCwoYyx1LGgpPT57bGV0IGY9aD4wP3QuZXh0cmFjdFlPZmZzZXQ6MDtyZXR1cm4gdS54PTAsdS55PWMrZit1LmhlaWdodC8yLGMrZit1LmhlaWdodH0sMCk7bGV0IG49ZS5pc29sYXRlZE91dEV4dHJhY3QubGVuZ3RoP1plLm1heEJ5KGUuaXNvbGF0ZWRPdXRFeHRyYWN0LGM9PmMud2lkdGgpLndpZHRoOm51bGw7ZS5vdXRFeHRyYWN0Qm94LndpZHRoPW4hPW51bGw/bjowLGUub3V0RXh0cmFjdEJveC5oZWlnaHQ9WmUucmVkdWNlKGUuaXNvbGF0ZWRPdXRFeHRyYWN0LChjLHUsaCk9PntsZXQgZj1oPjA/dC5leHRyYWN0WU9mZnNldDowO3JldHVybiB1Lng9MCx1Lnk9YytmK3UuaGVpZ2h0LzIsYytmK3UuaGVpZ2h0fSwwKTtsZXQgaT1lLmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0Lmxlbmd0aD9aZS5tYXhCeShlLmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0LGM9PmMud2lkdGgpLndpZHRoOm51bGw7ZS5saWJyYXJ5RnVuY3Rpb25zQm94LndpZHRoPWkhPW51bGw/aTowLGUubGlicmFyeUZ1bmN0aW9uc0JveC5oZWlnaHQ9WmUucmVkdWNlKGUubGlicmFyeUZ1bmN0aW9uc0V4dHJhY3QsKGMsdSxoKT0+e2xldCBmPWg+MD90LmV4dHJhY3RZT2Zmc2V0OjA7cmV0dXJuIHUueD0wLHUueT1jK2YrdS5oZWlnaHQvMixjK2YrdS5oZWlnaHR9LDApO2xldCBvPTA7ZS5pc29sYXRlZEluRXh0cmFjdC5sZW5ndGg+MCYmbysrLGUuaXNvbGF0ZWRPdXRFeHRyYWN0Lmxlbmd0aD4wJiZvKyssZS5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdC5sZW5ndGg+MCYmbysrLGUuY29yZUdyYXBoLm5vZGVDb3VudCgpPjAmJm8rKztsZXQgYT1Uci5zdWJzY2VuZS5tZXRhLmV4dHJhY3RYT2Zmc2V0LHM9bzw9MT8wOm8qYSxsPU1hdGgubWF4KG8zLGUuaW5FeHRyYWN0Qm94LndpZHRoK2Uub3V0RXh0cmFjdEJveC53aWR0aCk7ZS5jb3JlQm94LndpZHRoKz1sK3MrZS5saWJyYXJ5RnVuY3Rpb25zQm94LndpZHRoK3MsZS5jb3JlQm94LmhlaWdodD10LmxhYmVsSGVpZ2h0K01hdGgubWF4KGUuaW5FeHRyYWN0Qm94LmhlaWdodCxlLmNvcmVCb3guaGVpZ2h0LGUubGlicmFyeUZ1bmN0aW9uc0JveC5oZWlnaHQsZS5vdXRFeHRyYWN0Qm94LmhlaWdodCksZS53aWR0aD1lLmNvcmVCb3gud2lkdGgrdC5wYWRkaW5nTGVmdCt0LnBhZGRpbmdSaWdodCxlLmhlaWdodD1lLnBhZGRpbmdUb3ArZS5jb3JlQm94LmhlaWdodCtlLnBhZGRpbmdCb3R0b219ZnVuY3Rpb24gUmNyKGUpe2xldCB0PWUuY29yZUdyYXBoLHI9VHIuc3Vic2NlbmUuc2VyaWVzO1plLmV4dGVuZChlLHIpLFplLmV4dGVuZChlLmNvcmVCb3gsRWxlKGUuY29yZUdyYXBoLFRyLmdyYXBoLnNlcmllcykpLFplLmVhY2godC5ub2RlcygpLG49Pnt0Lm5vZGUobikuZXhjbHVkZWQ9ITF9KSxlLndpZHRoPWUuY29yZUJveC53aWR0aCtyLnBhZGRpbmdMZWZ0K3IucGFkZGluZ1JpZ2h0LGUuaGVpZ2h0PWUuY29yZUJveC5oZWlnaHQrci5wYWRkaW5nVG9wK3IucGFkZGluZ0JvdHRvbX1mdW5jdGlvbiBOY3IoZSl7aWYoZS5leHBhbmRlZClyZXR1cm47bGV0IHQ9ZS5pbkFubm90YXRpb25zLmxpc3Qscj1lLm91dEFubm90YXRpb25zLmxpc3Q7WmUuZWFjaCh0LHU9PmJsZSh1KSksWmUuZWFjaChyLHU9PmJsZSh1KSk7bGV0IG49VHIuYW5ub3RhdGlvbnMsaT1aZS5yZWR1Y2UodCwodSxoLGYpPT57bGV0IHA9Zj4wP24ueU9mZnNldDowO3JldHVybiBoLmR4PS0oZS5jb3JlQm94LndpZHRoK2gud2lkdGgpLzItbi54T2Zmc2V0LGguZHk9dStwK2guaGVpZ2h0LzIsdStwK2guaGVpZ2h0fSwwKTtaZS5lYWNoKHQsdT0+e3UuZHktPWkvMix1LmxhYmVsT2Zmc2V0PW4ubGFiZWxPZmZzZXR9KTtsZXQgbz1aZS5yZWR1Y2UociwodSxoLGYpPT57bGV0IHA9Zj4wP24ueU9mZnNldDowO3JldHVybiBoLmR4PShlLmNvcmVCb3gud2lkdGgraC53aWR0aCkvMituLnhPZmZzZXQsaC5keT11K3AraC5oZWlnaHQvMix1K3AraC5oZWlnaHR9LDApO1plLmVhY2gocix1PT57dS5keS09by8yLHUubGFiZWxPZmZzZXQ9bi5sYWJlbE9mZnNldH0pO2xldCBhPU1hdGgubWluKGUuaGVpZ2h0LzItZS5yYWRpdXMsaS8yKTthPWE8MD8wOmE7bGV0IHM9em4oKS5kb21haW4oWzAsdC5sZW5ndGgtMV0pLnJhbmdlKFstYSxhXSk7WmUuZWFjaCh0LCh1LGgpPT57dS5wb2ludHM9W3tkeDp1LmR4K3Uud2lkdGgvMixkeTp1LmR5fSx7ZHg6LWUuY29yZUJveC53aWR0aC8yLGR5OnQubGVuZ3RoPjE/cyhoKTowfV19KTtsZXQgbD1NYXRoLm1pbihlLmhlaWdodC8yLWUucmFkaXVzLG8vMik7bD1sPDA/MDpsO2xldCBjPXpuKCkuZG9tYWluKFswLHIubGVuZ3RoLTFdKS5yYW5nZShbLWwsbF0pO1plLmVhY2gociwodSxoKT0+e3UucG9pbnRzPVt7ZHg6ZS5jb3JlQm94LndpZHRoLzIsZHk6ci5sZW5ndGg+MT9jKGgpOjB9LHtkeDp1LmR4LXUud2lkdGgvMixkeTp1LmR5fV19KSxlLmhlaWdodD1NYXRoLm1heChlLmhlaWdodCxpLG8pfWZ1bmN0aW9uIGJsZShlKXtzd2l0Y2goZS5hbm5vdGF0aW9uVHlwZSl7Y2FzZSBnaS5DT05TVEFOVDpaZS5leHRlbmQoZSxUci5jb25zdGFudC5zaXplKTticmVhaztjYXNlIGdpLlNIT1JUQ1VUOmlmKGUubm9kZS50eXBlPT09anQuT1ApWmUuZXh0ZW5kKGUsVHIuc2hvcnRjdXRTaXplLm9wKTtlbHNlIGlmKGUubm9kZS50eXBlPT09anQuTUVUQSlaZS5leHRlbmQoZSxUci5zaG9ydGN1dFNpemUubWV0YSk7ZWxzZSBpZihlLm5vZGUudHlwZT09PWp0LlNFUklFUylaZS5leHRlbmQoZSxUci5zaG9ydGN1dFNpemUuc2VyaWVzKTtlbHNlIHRocm93IEVycm9yKCJJbnZhbGlkIG5vZGUgdHlwZTogIitlLm5vZGUudHlwZSk7YnJlYWs7Y2FzZSBnaS5TVU1NQVJZOlplLmV4dGVuZChlLFRyLmNvbnN0YW50LnNpemUpO2JyZWFrfX1mdW5jdGlvbiB4MChlKXtpZihlLmV4cGFuZGVkKXJldHVybiBlLng7bGV0IHQ9ZS5pbkFubm90YXRpb25zLmxpc3QubGVuZ3RoP2UuaW5ib3hXaWR0aDowO3JldHVybiBlLngtZS53aWR0aC8yK3QrZS5jb3JlQm94LndpZHRoLzJ9ZnVuY3Rpb24gd2xlKGUsdCl7bGV0IHI9dC54LWUueCxuPXQueS1lLnk7cmV0dXJuIDE4MCpNYXRoLmF0YW4obi9yKS9NYXRoLlBJfWZ1bmN0aW9uIERjcihlKXtsZXQgdD13bGUoZVswXSxlWzFdKTtmb3IobGV0IHI9MTtyPGUubGVuZ3RoLTE7cisrKXtsZXQgbj13bGUoZVtyXSxlW3IrMV0pO2lmKE1hdGguYWJzKG4tdCk+MSlyZXR1cm4hMTt0PW59cmV0dXJuITB9ZnVuY3Rpb24gU2xlKGUsdCl7bGV0IHI9dC5leHBhbmRlZD90Lng6eDAodCksbj10LnksaT1lLngtcixvPWUueS1uLGE9dC5leHBhbmRlZD90LndpZHRoOnQuY29yZUJveC53aWR0aCxzPXQuZXhwYW5kZWQ/dC5oZWlnaHQ6dC5jb3JlQm94LmhlaWdodCxsLGM7cmV0dXJuIE1hdGguYWJzKG8pKmEvMj5NYXRoLmFicyhpKSpzLzI/KG88MCYmKHM9LXMpLGw9bz09PTA/MDpzLzIqaS9vLGM9cy8yKTooaTwwJiYoYT0tYSksbD1hLzIsYz1pPT09MD8wOmEvMipvL2kpLHt4OnIrbCx5Om4rY319dmFyIElsPWcwLEhpPXZlLE9jcj0zMjAsemNyPTE1MCxmUD1be2JhY2tncm91bmRfY29sb3I6IiNDQzJGMkMiLGxhYmVsOiJOYU4ifSx7YmFja2dyb3VuZF9jb2xvcjoiI0ZGOEQwMCIsbGFiZWw6Ii1cdTIyMUUifSx7YmFja2dyb3VuZF9jb2xvcjoiI0VBRUFFQSIsbGFiZWw6Ii0ifSx7YmFja2dyb3VuZF9jb2xvcjoiI0E1QTVBNSIsbGFiZWw6IjAifSx7YmFja2dyb3VuZF9jb2xvcjoiIzI2MjYyNiIsbGFiZWw6IisifSx7YmFja2dyb3VuZF9jb2xvcjoiIzAwM0VENCIsbGFiZWw6IitcdTIyMUUifV07ZnVuY3Rpb24gQ2xlKGUsdCxyLG4pe2xldCBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz1udWxsO3RyeXtpZihvPXQuZ2V0QkJveCgpLChvPT1udWxsP3ZvaWQgMDpvLndpZHRoKT09PTApcmV0dXJufWNhdGNoKGMpe3JldHVybn1sZXQgYT0uOSpNYXRoLm1pbihpLndpZHRoLyhvPT1udWxsP3ZvaWQgMDpvLndpZHRoKSxpLmhlaWdodC8obz09bnVsbD92b2lkIDA6by5oZWlnaHQpLDIpLHM9VHIuZ3JhcGgsbD0kaC5zY2FsZShhKS50cmFuc2xhdGUocy5wYWRkaW5nLnBhZGRpbmdMZWZ0LHMucGFkZGluZy5wYWRkaW5nVG9wKTtIdChlKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oNTAwKS5jYWxsKHIudHJhbnNmb3JtLGwpLm9uKCJlbmQuZml0dGVkIiwoKT0+e3Iub24oImVuZC5maXR0ZWQiLG51bGwpLG4oKX0pfWZ1bmN0aW9uIEFsZShlLHQscixuKXtsZXQgaT1IdCh0KS5zZWxlY3QoYFtkYXRhLW5hbWU9IiR7ZX0iXWApLm5vZGUoKTtpZighaSlyZXR1cm4gY29uc29sZS53YXJuKGBwYW5Ub05vZGUoKSBmYWlsZWQgZm9yIG5vZGUgbmFtZSAiJHtlfSJgKSwhMTtsZXQgbz1pLmdldEJCb3goKSxhPWkuZ2V0U2NyZWVuQ1RNKCkscz10LmNyZWF0ZVNWR1BvaW50KCksbD10LmNyZWF0ZVNWR1BvaW50KCk7cy54PW8ueCxzLnk9by55LGwueD1vLngrby53aWR0aCxsLnk9by55K28uaGVpZ2h0LHM9cy5tYXRyaXhUcmFuc2Zvcm0oYSksbD1sLm1hdHJpeFRyYW5zZm9ybShhKTtsZXQgYz0ocCxkLGcsXyk9PiEocD5nJiZkPF8pLHU9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxoPXUubGVmdCt1LndpZHRoLU9jcixmPXUudG9wK3UuaGVpZ2h0LXpjcjtpZihjKHMueCxsLngsdS5sZWZ0LGgpfHxjKHMueSxsLnksdS50b3AsZikpe2xldCBwPShzLngrbC54KS8yLGQ9KHMueStsLnkpLzIsZz11LmxlZnQrdS53aWR0aC8yLXAsXz11LnRvcCt1LmhlaWdodC8yLWQseT1pMih0KTtyZXR1cm4gSHQodCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKDUwMCkuY2FsbChuLnRyYW5zbGF0ZUJ5LGcveS5rLF8veS5rKSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBQbGUoZSx0KXtsZXQgcj10Lm5vZGUudHlwZT09PWp0LlNFUklFUz8wOlRyLnN1YnNjZW5lLm1ldGEubGFiZWxIZWlnaHQ7YTMoSWwoZSwiZyIsSGkuU2NlbmUuQ09SRSksMCxyKTtsZXQgbj10Lmlzb2xhdGVkSW5FeHRyYWN0Lmxlbmd0aD4wLGk9dC5pc29sYXRlZE91dEV4dHJhY3QubGVuZ3RoPjAsbz10LmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0Lmxlbmd0aD4wLGE9VHIuc3Vic2NlbmUubWV0YS5leHRyYWN0WE9mZnNldCxzPTA7aWYobiYmKHMrPXQub3V0RXh0cmFjdEJveC53aWR0aCksaSYmKHMrPXQub3V0RXh0cmFjdEJveC53aWR0aCksbil7bGV0IGw9dC5jb3JlQm94LndpZHRoO3M8bzM/bD1sLW8zK3QuaW5FeHRyYWN0Qm94LndpZHRoLzI6bD1sLXQuaW5FeHRyYWN0Qm94LndpZHRoLzItdC5vdXRFeHRyYWN0Qm94LndpZHRoLShpP2E6MCksbD1sLXQubGlicmFyeUZ1bmN0aW9uc0JveC53aWR0aC0obz9hOjApLGEzKElsKGUsImciLEhpLlNjZW5lLklORVhUUkFDVCksbCxyKX1pZihpKXtsZXQgbD10LmNvcmVCb3gud2lkdGg7czxvMz9sPWwtbzMrdC5vdXRFeHRyYWN0Qm94LndpZHRoLzI6bC09dC5vdXRFeHRyYWN0Qm94LndpZHRoLzIsbD1sLXQubGlicmFyeUZ1bmN0aW9uc0JveC53aWR0aC0obz9hOjApLGEzKElsKGUsImciLEhpLlNjZW5lLk9VVEVYVFJBQ1QpLGwscil9aWYobyl7bGV0IGw9dC5jb3JlQm94LndpZHRoLXQubGlicmFyeUZ1bmN0aW9uc0JveC53aWR0aC8yO2EzKElsKGUsImciLEhpLlNjZW5lLkZVTkNUSU9OX0xJQlJBUlkpLGwscil9fWZ1bmN0aW9uIElsZShlLHQpe0h0KGUpLm9uKCJjbGljayIsKCk9Pnt0LmZpcmUoImdyYXBoLXNlbGVjdCIpfSl9ZnVuY3Rpb24gYTMoZSx0LHIpe2UuYXR0cigidHJhbnNmb3JtIikhPW51bGwmJihlPWUudHJhbnNpdGlvbigicG9zaXRpb24iKSksZS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0KyIsIityKyIpIil9ZnVuY3Rpb24gRmQoZSx0LHIsbixpKXtlLnRyYW5zaXRpb24oKS5hdHRyKCJ4Iix0LW4vMikuYXR0cigieSIsci1pLzIpLmF0dHIoIndpZHRoIixuKS5hdHRyKCJoZWlnaHQiLGkpfWZ1bmN0aW9uIExsZShlLHQscixuLGkpe2xldCBvPWkvMixhPW4vMixzPVtbdCxyLW9dLFt0K2EscitvXSxbdC1hLHIrb11dO2UudHJhbnNpdGlvbigpLmF0dHIoInBvaW50cyIscy5tYXAobD0+bC5qb2luKCIsIikpLmpvaW4oIiAiKSl9ZnVuY3Rpb24ga2xlKGUsdCl7bGV0IHI9eDAodCksbj10LmV4cGFuZGVkP3Qud2lkdGg6dC5jb3JlQm94LndpZHRoLGk9dC5leHBhbmRlZD90LmhlaWdodDp0LmNvcmVCb3guaGVpZ2h0LG89cituLzItNixhPXQueS1pLzIrNjt0Lm5vZGUudHlwZT09PWp0LlNFUklFUyYmIXQuZXhwYW5kZWQmJihvKz0xMCxhLT0yKTtsZXQgcz0idHJhbnNsYXRlKCIrbysiLCIrYSsiKSI7ZS5zZWxlY3RBbGwoInBhdGgiKS50cmFuc2l0aW9uKCkuYXR0cigidHJhbnNmb3JtIixzKSxlLnNlbGVjdCgiY2lyY2xlIikudHJhbnNpdGlvbigpLmF0dHIoe2N4Om8sY3k6YSxyOlRyLm5vZGVTaXplLm1ldGEuZXhwYW5kQnV0dG9uUmFkaXVzfSl9ZnVuY3Rpb24gRUgoZSx0LHIsbixpKXtlLnRyYW5zaXRpb24oKS5hdHRyKCJjeCIsdCkuYXR0cigiY3kiLHIpLmF0dHIoInJ4IixuLzIpLmF0dHIoInJ5IixpLzIpfWZ1bmN0aW9uIFRsZShlLHQpe3JldHVybiB0P2UudG9GaXhlZCgwKTpNYXRoLmFicyhlKT49MT9lLnRvRml4ZWQoMSk6ZS50b0V4cG9uZW50aWFsKDEpfWZ1bmN0aW9uIEZjcihlLHQscixuKXtsZXQgaT0iRGV2aWNlOiAiK2UuZGV2aWNlX25hbWUrYApgO2krPSJkdHlwZTogIitlLmR0eXBlK2AKYDtsZXQgbz0iKHNjYWxhcikiO2Uuc2hhcGUubGVuZ3RoPjAmJihvPSIoIitlLnNoYXBlLmpvaW4oIiwiKSsiKSIpLGkrPWAKc2hhcGU6IGArbytgCgpgLGkrPSIjKGVsZW1lbnRzKTogIit0K2AKYDtsZXQgYT1bXTtmb3IobGV0IHM9MDtzPHIubGVuZ3RoO3MrKylyW3NdPjAmJmEucHVzaCgiIygiK2ZQW3NdLmxhYmVsKyIpOiAiK3Jbc10pO3JldHVybiBpKz1hLmpvaW4oIiwgIikrYAoKYCxuLm1heD49bi5taW4mJihpKz0ibWluOiAiK24ubWluKyIsIG1heDogIituLm1heCtgCmAsaSs9Im1lYW46ICIrbi5tZWFuKyIsIHN0ZGRldjogIituLnN0ZGRldiksaX1mdW5jdGlvbiBCY3IoZSx0LHIsbixpPTYwLG89MTAsYT0wLHMpe2lmKEh0KGUucGFyZW50Tm9kZSkuc2VsZWN0QWxsKCIuaGVhbHRoLXBpbGwiKS5yZW1vdmUoKSwhdClyZXR1cm47bGV0IGw9dC52YWx1ZSxjPWwuc2xpY2UoMiw4KSx1PWNbMF0saD1jWzFdLGY9Y1s1XSxwPWxbMV0sZD17bWluOmxbOF0sbWF4OmxbOV0sbWVhbjpsWzEwXSxzdGRkZXY6TWF0aC5zcXJ0KGxbMTFdKX07aT09bnVsbCYmKGk9NjApLG89PW51bGwmJihvPTEwKSxhPT1udWxsJiYoYT0wKSxyIT1udWxsJiZyLm5vZGUudHlwZT09PWp0Lk9QJiYoaS89MixvLz0yKTtsZXQgZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoanUsImciKTtnLmNsYXNzTGlzdC5hZGQoImhlYWx0aC1waWxsIik7bGV0IF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJkZWZzIik7Zy5hcHBlbmRDaGlsZChfKTtsZXQgeT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoanUsImxpbmVhckdyYWRpZW50IikseD0iaGVhbHRoLXBpbGwtZ3JhZGllbnQtIituO3kuc2V0QXR0cmlidXRlKCJpZCIseCk7bGV0IGI9MCxTPSIwJSI7Zm9yKGxldCBEPTA7RDxjLmxlbmd0aDtEKyspe2lmKCFjW0RdKWNvbnRpbnVlO2IrPWNbRF07bGV0IEI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJzdG9wIik7Qi5zZXRBdHRyaWJ1dGUoIm9mZnNldCIsUyksQi5zZXRBdHRyaWJ1dGUoInN0b3AtY29sb3IiLGZQW0RdLmJhY2tncm91bmRfY29sb3IpLHkuYXBwZW5kQ2hpbGQoQik7bGV0IEk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJzdG9wIiksTD1iKjEwMC9wKyIlIjtJLnNldEF0dHJpYnV0ZSgib2Zmc2V0IixMKSxJLnNldEF0dHJpYnV0ZSgic3RvcC1jb2xvciIsZlBbRF0uYmFja2dyb3VuZF9jb2xvcikseS5hcHBlbmRDaGlsZChJKSxTPUx9Xy5hcHBlbmRDaGlsZCh5KTtsZXQgQz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoanUsInJlY3QiKTtDLnNldEF0dHJpYnV0ZSgiZmlsbCIsInVybCgjIit4KyIpIiksQy5zZXRBdHRyaWJ1dGUoIndpZHRoIixTdHJpbmcoaSkpLEMuc2V0QXR0cmlidXRlKCJoZWlnaHQiLFN0cmluZyhvKSksQy5zZXRBdHRyaWJ1dGUoInkiLFN0cmluZyhhKSksZy5hcHBlbmRDaGlsZChDKTtsZXQgUD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoanUsInRpdGxlIik7UC50ZXh0Q29udGVudD1GY3IodCxwLGMsZCksZy5hcHBlbmRDaGlsZChQKTtsZXQgaz0hMTtpZihyIT1udWxsKXtsZXQgRD1yLngtaS8yLEI9ci55LW8tci5oZWlnaHQvMi0yO2lmKHIubGFiZWxPZmZzZXQ8MCYmKEIrPXIubGFiZWxPZmZzZXQpLGcuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitEKyIsICIrQisiKSIpLGNbMl18fGNbM118fGNbNF0pe2xldCBMPXIubm9kZS5hdHRyO2lmKEwmJkwubGVuZ3RoKXtmb3IobGV0IFI9MDtSPEwubGVuZ3RoO1IrKylpZihMW1JdLmtleT09PSJUIil7bGV0IEY9TFtSXS52YWx1ZS50eXBlO2s9RiYmL15EVF8oQk9PTHxJTlR8VUlOVCkvLnRlc3QoRik7YnJlYWt9fX19bGV0IE89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJ0ZXh0Iik7aWYoTnVtYmVyLmlzRmluaXRlKGQubWluKSYmTnVtYmVyLmlzRmluaXRlKGQubWF4KSl7bGV0IEQ9VGxlKGQubWluLGspLEI9VGxlKGQubWF4LGspO2lmKHA+MT9PLnRleHRDb250ZW50PUQrIiB+ICIrQjpPLnRleHRDb250ZW50PUQsdT4wfHxoPjB8fGY+MCl7Ty50ZXh0Q29udGVudCs9IiAoIjtsZXQgST1bXTt1PjAmJkkucHVzaChgTmFOXHhENyR7dX1gKSxoPjAmJkkucHVzaChgLVx1MjIxRVx4RDcke2h9YCksZj4wJiZJLnB1c2goYCtcdTIyMUVceEQ3JHtmfWApLE8udGV4dENvbnRlbnQrPUkuam9pbigiOyAiKSsiKSJ9fWVsc2UgTy50ZXh0Q29udGVudD0iKE5vIGZpbml0ZSBlbGVtZW50cykiO08uY2xhc3NMaXN0LmFkZCgiaGVhbHRoLXBpbGwtc3RhdHMiKSxzPT1udWxsJiYocz1pLzIpLE8uc2V0QXR0cmlidXRlKCJ4IixTdHJpbmcocykpLE8uc2V0QXR0cmlidXRlKCJ5IixTdHJpbmcoYS0yKSksZy5hcHBlbmRDaGlsZChPKSx6dChlLnBhcmVudE5vZGUpLmFwcGVuZENoaWxkKGcpfWZ1bmN0aW9uIFJsZShlLHQscil7aWYoIXQpcmV0dXJuO2xldCBuPTE7SHQoZSkuc2VsZWN0QWxsKCJnLm5vZGVzaGFwZSIpLmVhY2goZnVuY3Rpb24obyl7bGV0IGE9dFtvLm5vZGUubmFtZV0scz1hP2Fbcl06bnVsbDtCY3IodGhpcyxzLG8sbisrKX0pfXZhciBHbjsoZnVuY3Rpb24oZSl7ZS5OT05FPSJub25lIixlLkNPTVBVVEVfVElNRT0iY29tcHV0ZV90aW1lIixlLkRFVklDRT0iZGV2aWNlIixlLk1FTU9SWT0ibWVtb3J5IixlLk9QX0NPTVBBVElCSUxJVFk9Im9wX2NvbXBhdGliaWxpdHkiLGUuU1RSVUNUVVJFPSJzdHJ1Y3R1cmUiLGUuWExBX0NMVVNURVI9InhsYV9jbHVzdGVyIn0pKEdufHwoR249e30pKTt2YXIgbVA9RWUoT2UoKSwxKTt2YXIgVmk9RWUoT2UoKSwxKTtmdW5jdGlvbiBIY3IoZSl7bGV0IHQ9MCxyPTAsbj1lO2Zvcig7biYmbi5vZmZzZXRMZWZ0Pj0wJiZuLm9mZnNldFRvcD49MDspdCs9bi5vZmZzZXRMZWZ0LW4uc2Nyb2xsTGVmdCxyKz1uLm9mZnNldFRvcC1uLnNjcm9sbFRvcCxuPW4ub2Zmc2V0UGFyZW50O3JldHVybntsZWZ0OnQsdG9wOnJ9fWZ1bmN0aW9uIFdsdChlLHQpe2xldCByPWUuZ2V0Q29udGV4dE1lbnUoKSxuPUh0KGUuZ2V0Q29udGV4dE1lbnUoKSk7cmV0dXJuIGZ1bmN0aW9uKGksbyl7bGV0IGE9cXQscz1IY3IoZSk7bi5zdHlsZSgiZGlzcGxheSIsImJsb2NrIikuc3R5bGUoImxlZnQiLGEuY2xpZW50WC1zLmxlZnQrMSsicHgiKS5zdHlsZSgidG9wIixhLmNsaWVudFktcy50b3ArMSsicHgiKSxhLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKTtmdW5jdGlvbiBsKHUpe3UmJnUuY29tcG9zZWRQYXRoKCkuaW5jbHVkZXMocil8fChuLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpLGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixsLHtjYXB0dXJlOiEwfSkpfWRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixsLHtjYXB0dXJlOiEwfSksbi50ZXh0KCIiKSxuLmFwcGVuZCgidWwiKS5zZWxlY3RBbGwoImxpIikuZGF0YSh0KS5lbnRlcigpLmFwcGVuZCgibGkiKS5vbigiY2xpY2siLCh1LGgpPT57dS5hY3Rpb24odGhpcyxpLG8pLGwoKX0pLnRleHQoZnVuY3Rpb24odSl7cmV0dXJuIHUudGl0bGUoaSl9KX19dmFyIEFIPUVlKE9lKCksMSk7dmFyIFVjcj0iXHhENyIsTmxlPXFiKCkuZG9tYWluKFtRNCx0UF0pLnJhbmdlKFsic21hbGwiLCJtZWRpdW0iLCJsYXJnZSIsInhsYXJnZSJdKSxxY3I9Mi41O2Z1bmN0aW9uIHBQKGUpe3JldHVybiBlLnYrb2xlK2Uud31mdW5jdGlvbiB6bGUoZSx0LHIpe2xldCBuPXIsaT1bXTtpPUFILnJlZHVjZSh0LmVkZ2VzKCksKHMsbCk9PntsZXQgYz10LmVkZ2UobCk7cmV0dXJuIHMucHVzaCh7djpsLnYsdzpsLncsbGFiZWw6Y30pLHN9LGkpO2xldCBhPUFuKGUsImciLHZlLkVkZ2UuQ09OVEFJTkVSKS5zZWxlY3RBbGwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzfSkuZGF0YShpLHBQKTtyZXR1cm4gYS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIix2ZS5FZGdlLkdST1VQKS5hdHRyKCJkYXRhLWVkZ2UiLHBQKS5lYWNoKGZ1bmN0aW9uKHMpe2xldCBsPUh0KHRoaXMpO3MubGFiZWwuZWRnZUdyb3VwPWwsbi5fZWRnZUdyb3VwSW5kZXhbcFAocyldPWwsbi5oYW5kbGVFZGdlU2VsZWN0ZWQmJmwub24oImNsaWNrIixjPT57cXQuc3RvcFByb3BhZ2F0aW9uKCksbi5maXJlKCJlZGdlLXNlbGVjdCIse2VkZ2VEYXRhOmMsZWRnZUdyb3VwOmx9KX0pLFhsdChsLHMsbil9KS5tZXJnZShhKS5lYWNoKGZ1bmN0aW9uKCl7V2NyKHIsdGhpcyl9KS5lYWNoKGZ1bmN0aW9uKHMpe1ljcihIdCh0aGlzKSxzLG4pfSksYS5leGl0KCkuZWFjaChzPT57ZGVsZXRlIG4uX2VkZ2VHcm91cEluZGV4W3BQKHMpXX0pLnJlbW92ZSgpLGF9ZnVuY3Rpb24gWWx0KGUsdCl7bGV0IHI9dC5nZXROb2RlQnlOYW1lKGUudik7aWYoci5vdXRwdXRTaGFwZXM9PW51bGx8fEFILmlzRW1wdHkoci5vdXRwdXRTaGFwZXMpKXJldHVybiBudWxsO2xldCBuPXIub3V0cHV0U2hhcGVzW2Uub3V0cHV0VGVuc29yS2V5XTtyZXR1cm4gbj09bnVsbD9udWxsOm4ubGVuZ3RoPT09MD8ic2NhbGFyIjpuLm1hcChpPT5pPT09LTE/Ij8iOmkpLmpvaW4oVWNyKX1mdW5jdGlvbiBqbHQoZSx0KXtyZXR1cm4gdC5lZGdlTGFiZWxGdW5jdGlvbj90LmVkZ2VMYWJlbEZ1bmN0aW9uKGUsdCk6ZS5iYXNlRWRnZUxpc3QubGVuZ3RoPjE/ZS5iYXNlRWRnZUxpc3QubGVuZ3RoKyIgdGVuc29ycyI6WWx0KGUuYmFzZUVkZ2VMaXN0WzBdLHQpfWZ1bmN0aW9uIERsZShlLHQscil7bGV0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJwYXRoIik7Zm9yKGxldCBpPTE7aTxlLmxlbmd0aDtpKyspaWYobi5zZXRBdHRyaWJ1dGUoImQiLHIoZS5zbGljZSgwLGkpKSksbi5nZXRUb3RhbExlbmd0aCgpPnQpcmV0dXJuIGktMTtyZXR1cm4gZS5sZW5ndGgtMX1mdW5jdGlvbiBPbGUoZSx0LHIpe2xldCBuPXZ1KCkueCh1PT51LngpLnkodT0+dS55KSxpPUh0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJwYXRoIikpLmF0dHIoImQiLG4oZSkpLG89K3QuYXR0cigibWFya2VyV2lkdGgiKSxhPXQuYXR0cigidmlld0JveCIpLnNwbGl0KCIgIikubWFwKE51bWJlcikscz1hWzJdLWFbMF0sbD0rdC5hdHRyKCJyZWZYIiksYz1pLm5vZGUoKTtpZihyKXtsZXQgdT0xLWwvcyxoPW8qdSxmPWMuZ2V0UG9pbnRBdExlbmd0aChoKSxwPURsZShlLGgsbik7cmV0dXJuIGVbcC0xXT17eDpmLngseTpmLnl9LGUuc2xpY2UocC0xKX1lbHNle2xldCB1PTEtbC9zLGg9Yy5nZXRUb3RhbExlbmd0aCgpLW8qdSxmPWMuZ2V0UG9pbnRBdExlbmd0aChoKSxwPURsZShlLGgsbik7cmV0dXJuIGVbcF09e3g6Zi54LHk6Zi55fSxlLnNsaWNlKDAscCsxKX19ZnVuY3Rpb24gWGx0KGUsdCxyLG4pe249bnx8dmUuRWRnZS5MSU5FLHQubGFiZWwmJnQubGFiZWwuc3RydWN0dXJhbCYmKG4rPSIgIit2ZS5FZGdlLlNUUlVDVFVSQUwpLHQubGFiZWwmJnQubGFiZWwubWV0YWVkZ2UmJnQubGFiZWwubWV0YWVkZ2UubnVtUmVmRWRnZXMmJihuKz0iICIrdmUuRWRnZS5SRUZFUkVOQ0VfRURHRSksci5oYW5kbGVFZGdlU2VsZWN0ZWQmJihuKz0iICIrdmUuRWRnZS5TRUxFQ1RBQkxFKTtsZXQgaT0icGF0aF8iK3BQKHQpLG87aWYoci5yZW5kZXJIaWVyYXJjaHkuZWRnZVdpZHRoRnVuY3Rpb24pbz1yLnJlbmRlckhpZXJhcmNoeS5lZGdlV2lkdGhGdW5jdGlvbih0LG4pO2Vsc2V7bGV0IGM9MTt0LmxhYmVsIT1udWxsJiZ0LmxhYmVsLm1ldGFlZGdlIT1udWxsJiYoYz10LmxhYmVsLm1ldGFlZGdlLnRvdGFsU2l6ZSksbz1yLnJlbmRlckhpZXJhcmNoeS5lZGdlV2lkdGhTaXplZEJhc2VkU2NhbGUoYyl9bGV0IGE9ZS5hcHBlbmQoInBhdGgiKS5hdHRyKCJpZCIsaSkuYXR0cigiY2xhc3MiLG4pLnN0eWxlKCJzdHJva2Utd2lkdGgiLG8rInB4Iik7aWYodC5sYWJlbCYmdC5sYWJlbC5tZXRhZWRnZSlpZih0LmxhYmVsLm1ldGFlZGdlLm51bVJlZkVkZ2VzKXtsZXQgYz1gcmVmZXJlbmNlLWFycm93aGVhZC0ke05sZShvKX1gO2Euc3R5bGUoIm1hcmtlci1zdGFydCIsYHVybCgjJHtjfSlgKSx0LmxhYmVsLnN0YXJ0TWFya2VySWQ9Y31lbHNle2xldCBjPWBkYXRhZmxvdy1hcnJvd2hlYWQtJHtObGUobyl9YDthLnN0eWxlKCJtYXJrZXItZW5kIixgdXJsKCMke2N9KWApLHQubGFiZWwuZW5kTWFya2VySWQ9Y31pZih0LmxhYmVsPT1udWxsfHx0LmxhYmVsLm1ldGFlZGdlPT1udWxsKXJldHVybjtsZXQgcz1qbHQodC5sYWJlbC5tZXRhZWRnZSxyLnJlbmRlckhpZXJhcmNoeSk7aWYocz09bnVsbClyZXR1cm47bGV0IGw9bz5xY3I/ImNlbnRyYWwiOiJ0ZXh0LWFmdGVyLWVkZ2UiO2UuYXBwZW5kKCJ0ZXh0IikuYXBwZW5kKCJ0ZXh0UGF0aCIpLmF0dHIoInhsaW5rOmhyZWYiLCIjIitpKS5hdHRyKCJzdGFydE9mZnNldCIsIjUwJSIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikudGV4dChzKX12YXIgQ0g9dnUoKS5jdXJ2ZShXOCkueChlPT5lLngpLnkoZT0+ZS55KTtmdW5jdGlvbiBHY3IoZSx0LHIsbixpKXtsZXQgbz1yLmxhYmVsLGE9by5hZGpvaW5pbmdNZXRhZWRnZSxzPW8ucG9pbnRzLHtzaGFkb3dSb290Omx9PWU7aWYoci5sYWJlbC5zdGFydE1hcmtlcklkJiYocz1PbGUocyxIdChsPT1udWxsP3ZvaWQgMDpsLnF1ZXJ5U2VsZWN0b3IoIiMiK3IubGFiZWwuc3RhcnRNYXJrZXJJZCkpLCEwKSksci5sYWJlbC5lbmRNYXJrZXJJZCYmKHM9T2xlKHMsSHQobD09bnVsbD92b2lkIDA6bC5xdWVyeVNlbGVjdG9yKCIjIityLmxhYmVsLmVuZE1hcmtlcklkKSksITEpKSwhYSlyZXR1cm4gbmMoaSxDSChzKSk7bGV0IGM9YS5lZGdlR3JvdXAubm9kZSgpLmZpcnN0Q2hpbGQsdT1vLm1ldGFlZGdlLmluYm91bmQ7cmV0dXJuIGZ1bmN0aW9uKGgpe3ZhciBnO2xldCBmPWMuZ2V0UG9pbnRBdExlbmd0aCh1P2MuZ2V0VG90YWxMZW5ndGgoKTowKS5tYXRyaXhUcmFuc2Zvcm0oYy5nZXRDVE0oKSkubWF0cml4VHJhbnNmb3JtKChnPXQuZ2V0Q1RNKCkpPT1udWxsP3ZvaWQgMDpnLmludmVyc2UoKSkscD11PzA6cy5sZW5ndGgtMTtyZXR1cm4gc1twXS54PWYueCxzW3BdLnk9Zi55LENIKHMpfX1mdW5jdGlvbiBXY3IoZSx0KXtIdCh0KS5zZWxlY3QoInBhdGguIit2ZS5FZGdlLkxJTkUpLnRyYW5zaXRpb24oKS5hdHRyVHdlZW4oImQiLGZ1bmN0aW9uKHIsbixpKXtyZXR1cm4gR2NyKGUsdGhpcyxyLG4saSl9KX1mdW5jdGlvbiBZY3IoZSx0LHIpe2UuY2xhc3NlZCgiZmFkZWQiLHQubGFiZWwuaXNGYWRlZE91dCk7bGV0IG49dC5sYWJlbC5tZXRhZWRnZTtlLnNlbGVjdCgicGF0aC4iK3ZlLkVkZ2UuTElORSkuY2xhc3NlZCgiY29udHJvbC1kZXAiLG4mJiFuLm51bVJlZ3VsYXJFZGdlcyl9ZnVuY3Rpb24gUEgoZSx0LHIpe2xldCBpPUFuKGUsImciLHZlLk5vZGUuQ09OVEFJTkVSKS5zZWxlY3RBbGwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzfSkuZGF0YSh0LG89Pm8ubm9kZS5uYW1lKyI6IitvLm5vZGUudHlwZSk7cmV0dXJuIGkuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJkYXRhLW5hbWUiLG89Pm8ubm9kZS5uYW1lKS5lYWNoKGZ1bmN0aW9uKG8pe2xldCBhPUh0KHRoaXMpO3IuYWRkTm9kZUdyb3VwKG8ubm9kZS5uYW1lLGEpfSkubWVyZ2UoaSkuYXR0cigiY2xhc3MiLG89PnZlLk5vZGUuR1JPVVArIiAiK1dsZShvKSkuZWFjaChmdW5jdGlvbihvKXtsZXQgYT1IdCh0aGlzKSxzPUFuKGEsImciLHZlLkFubm90YXRpb24uSU5CT1gpO1ZsZShzLG8uaW5Bbm5vdGF0aW9ucyxvLHIpO2xldCBsPUFuKGEsImciLHZlLkFubm90YXRpb24uT1VUQk9YKTtWbGUobCxvLm91dEFubm90YXRpb25zLG8scik7bGV0IGM9R2xlKGEsbyx2ZS5Ob2RlLlNIQVBFKTtvLm5vZGUuaXNHcm91cE5vZGUmJlhjcihjLG8sciksSGxlKGMsbyxyKSxqY3IoYSxvLHIpO2xldCB1PUtjcihhLG8scik7SGxlKHUsbyxyLG8ubm9kZS50eXBlPT09anQuTUVUQSksczMoYSxvLHIpLEpjcihhLG8pfSksaS5leGl0KCkuZWFjaChmdW5jdGlvbihvKXtyLnJlbW92ZU5vZGVHcm91cChvLm5vZGUubmFtZSk7bGV0IGE9SHQodGhpcyk7by5pbkFubm90YXRpb25zLmxpc3QubGVuZ3RoPjAmJmEuc2VsZWN0KCIuIit2ZS5Bbm5vdGF0aW9uLklOQk9YKS5zZWxlY3RBbGwoIi4iK3ZlLkFubm90YXRpb24uR1JPVVApLmVhY2gocz0+e3IucmVtb3ZlQW5ub3RhdGlvbkdyb3VwKHMsbyl9KSxvLm91dEFubm90YXRpb25zLmxpc3QubGVuZ3RoPjAmJmEuc2VsZWN0KCIuIit2ZS5Bbm5vdGF0aW9uLk9VVEJPWCkuc2VsZWN0QWxsKCIuIit2ZS5Bbm5vdGF0aW9uLkdST1VQKS5lYWNoKHM9PntyLnJlbW92ZUFubm90YXRpb25Hcm91cChzLG8pfSl9KS5yZW1vdmUoKSxpfWZ1bmN0aW9uIGpjcihlLHQscil7aWYodC5ub2RlLmlzR3JvdXBOb2RlKXtpZih0LmV4cGFuZGVkKXJldHVybiBlY3QoZSx0LHIsdmUuU3Vic2NlbmUuR1JPVVApO0lsKGUsImciLHZlLlN1YnNjZW5lLkdST1VQKS5yZW1vdmUoKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBCbGUoZSx0KXtsZXQgcj10LngtdC53aWR0aC8yK3QucGFkZGluZ0xlZnQsbj10LnktdC5oZWlnaHQvMit0LnBhZGRpbmdUb3AsaT1JbChlLCJnIix2ZS5TdWJzY2VuZS5HUk9VUCk7YTMoaSxyLG4pfWZ1bmN0aW9uIFhjcihlLHQscil7bGV0IG49QW4oZSwiZyIsdmUuTm9kZS5CVVRUT05fQ09OVEFJTkVSKTtBbihuLCJjaXJjbGUiLHZlLk5vZGUuQlVUVE9OX0NJUkNMRSksQW4obiwicGF0aCIsdmUuTm9kZS5FWFBBTkRfQlVUVE9OKS5hdHRyKCJkIiwiTTAsLTIuMiBWMi4yIE0tMi4yLDAgSDIuMiIpLEFuKG4sInBhdGgiLHZlLk5vZGUuQ09MTEFQU0VfQlVUVE9OKS5hdHRyKCJkIiwiTS0yLjIsMCBIMi4yIiksbi5vbigiY2xpY2siLGk9PntxdC5zdG9wUHJvcGFnYXRpb24oKSxyLmZpcmUoIm5vZGUtdG9nZ2xlLWV4cGFuZCIse25hbWU6aS5ub2RlLm5hbWV9KX0pLGtsZShuLHQpfWZ1bmN0aW9uIEhsZShlLHQscixuKXtpZihuKXtlLmF0dHIoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpO3JldHVybn1sZXQgaT1XbHQocixVbGUodC5ub2RlLHIpKTtlLm9uKCJkYmxjbGljayIsbz0+e3IuZmlyZSgibm9kZS10b2dnbGUtZXhwYW5kIix7bmFtZTpvLm5vZGUubmFtZX0pfSkub24oIm1vdXNlb3ZlciIsbz0+e3IuaXNOb2RlRXhwYW5kZWQobyl8fHIuZmlyZSgibm9kZS1oaWdobGlnaHQiLHtuYW1lOm8ubm9kZS5uYW1lfSl9KS5vbigibW91c2VvdXQiLG89PntyLmlzTm9kZUV4cGFuZGVkKG8pfHxyLmZpcmUoIm5vZGUtdW5oaWdobGlnaHQiLHtuYW1lOm8ubm9kZS5uYW1lfSl9KS5vbigiY2xpY2siLG89PntxdC5zdG9wUHJvcGFnYXRpb24oKSxyLmZpcmUoIm5vZGUtc2VsZWN0Iix7bmFtZTpvLm5vZGUubmFtZX0pfSkub24oImNvbnRleHRtZW51IiwobyxhKT0+e3IuZmlyZSgibm9kZS1zZWxlY3QiLHtuYW1lOm8ubm9kZS5uYW1lfSksaS5jYWxsKG8sYSl9KX1mdW5jdGlvbiBVbGUoZSx0KXtsZXQgcj1be3RpdGxlOm49PnlIKGUuaW5jbHVkZSksYWN0aW9uOihuLGksbyk9Pnt0LmZpcmUoIm5vZGUtdG9nZ2xlLWV4dHJhY3QiLHtuYW1lOmUubmFtZX0pfX1dO3JldHVybiB0Lm5vZGVDb250ZXh0TWVudUl0ZW1zJiYocj1yLmNvbmNhdCh0Lm5vZGVDb250ZXh0TWVudUl0ZW1zKSksSmx0KGUpJiZyLnB1c2goe3RpdGxlOm49PlFsdChlKSxhY3Rpb246KG4saSxvKT0+e3QuZmlyZSgibm9kZS10b2dnbGUtc2VyaWVzZ3JvdXAiLHtuYW1lOklIKGUpfSl9fSkscn1mdW5jdGlvbiBKbHQoZSl7cmV0dXJuIElIKGUpIT09bnVsbH1mdW5jdGlvbiBJSChlKXtyZXR1cm4gZT9lLnR5cGU9PT1qdC5TRVJJRVM/ZS5uYW1lOmUudHlwZT09PWp0Lk9QP2Uub3duaW5nU2VyaWVzOm51bGw6bnVsbH1mdW5jdGlvbiAkY3IoZSl7bGV0IHQ9bnVsbDtpZihlKWUudHlwZT09PWp0LlNFUklFUz90PWU6ZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUudHlwZT09PWp0LlNFUklFUyYmKHQ9ZS5wYXJlbnROb2RlKTtlbHNlIHJldHVybiBudWxsO3JldHVybiB0fWZ1bmN0aW9uIFFsdChlKXtyZXR1cm4gdWxlKCRjcihlKSE9PW51bGw/b3MuR1JPVVA6b3MuVU5HUk9VUCl9ZnVuY3Rpb24gS2NyKGUsdCxyKXt2YXIgYztsZXQgbj10LmRpc3BsYXlOYW1lLGk9dC5ub2RlLnR5cGU9PT1qdC5NRVRBJiYhdC5leHBhbmRlZCxvPUFuKGUsInRleHQiLHZlLk5vZGUuTEFCRUwpLGE9by5ub2RlKCk7KGM9YS5wYXJlbnROb2RlKT09bnVsbHx8Yy5hcHBlbmRDaGlsZChhKSxvLmF0dHIoImR5IiwiLjM1ZW0iKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpO2xldCBzPTg7c3dpdGNoKHQubm9kZS50eXBlKXtjYXNlIGp0Lk1FVEE6cz10LmV4cGFuZGVkP0o0Lk5vZGUuRVhQQU5ERURfTEFCRUw6SjQuTm9kZS5TRVJJRVNfTEFCRUw7YnJlYWs7Y2FzZSBqdC5PUDpzPUo0Lk5vZGUuT1BfTEFCRUw7YnJlYWt9aWYoaSl7bi5sZW5ndGg+ci5tYXhNZXRhbm9kZUxhYmVsTGVuZ3RoJiYobj1uLnN1YnN0cigwLHIubWF4TWV0YW5vZGVMYWJlbExlbmd0aC0yKSsiXHUyMDI2Iik7bGV0IHU9WmNyKHIpO28uYXR0cigiZm9udC1zaXplIix1KG4ubGVuZ3RoKSsicHgiKSxzPXUobi5sZW5ndGgpfWxldCBsPW8udGV4dChuKTtyZXR1cm4gcWxlKGwsdC5ub2RlLnR5cGUscyx0KSxvfWZ1bmN0aW9uIHFsZShlLHQscixuKXtsZXQgaT1lLm5vZGUoKSxvPWkudGV4dENvbnRlbnQsYT1udWxsO3N3aXRjaCh0KXtjYXNlIGp0Lk1FVEE6biYmIW4uZXhwYW5kZWQmJihhPVRyLm5vZGVTaXplLm1ldGEubWF4TGFiZWxXaWR0aCk7YnJlYWs7Y2FzZSBqdC5PUDphPVRyLm5vZGVTaXplLm9wLm1heExhYmVsV2lkdGg7YnJlYWs7Y2FzZS0xOmE9VHIuYW5ub3RhdGlvbnMubWF4TGFiZWxXaWR0aDticmVhaztkZWZhdWx0OmJyZWFrfWlmKGEhPT1udWxsKXJldHVybiBpLnRleHRDb250ZW50PXRsZShpLnRleHRDb250ZW50LHIsYSksZS5hcHBlbmQoInRpdGxlIikudGV4dChvKX12YXIgJGx0PW51bGw7ZnVuY3Rpb24gWmNyKGUpe3JldHVybiAkbHR8fCgkbHQ9em4oKS5kb21haW4oW2UubWF4TWV0YW5vZGVMYWJlbExlbmd0aExhcmdlRm9udCxlLm1heE1ldGFub2RlTGFiZWxMZW5ndGhdKS5yYW5nZShbZS5tYXhNZXRhbm9kZUxhYmVsTGVuZ3RoRm9udFNpemUsZS5taW5NZXRhbm9kZUxhYmVsTGVuZ3RoRm9udFNpemVdKS5jbGFtcCghMCkpLCRsdH1mdW5jdGlvbiBkUChlLHQscixuKXtJbChlLCJ0ZXh0Iix2ZS5Ob2RlLkxBQkVMKS50cmFuc2l0aW9uKCkuYXR0cigieCIsdCkuYXR0cigieSIscituKX1mdW5jdGlvbiBHbGUoZSx0LHIpe2xldCBuPUFuKGUsImciLHIpO3N3aXRjaCh0Lm5vZGUudHlwZSl7Y2FzZSBqdC5PUDpsZXQgaT10Lm5vZGU7aWYoVmkuaXNOdW1iZXIoaS5mdW5jdGlvbklucHV0SW5kZXgpfHxWaS5pc051bWJlcihpLmZ1bmN0aW9uT3V0cHV0SW5kZXgpKXtBbihuLCJwb2x5Z29uIix2ZS5Ob2RlLkNPTE9SX1RBUkdFVCk7YnJlYWt9QW4obiwiZWxsaXBzZSIsdmUuTm9kZS5DT0xPUl9UQVJHRVQpO2JyZWFrO2Nhc2UganQuU0VSSUVTOmxldCBvPSJhbm5vdGF0aW9uIixhPXQ7YS5jb3JlR3JhcGgmJihvPWEubm9kZS5oYXNOb25Db250cm9sRWRnZXM/InZlcnRpY2FsIjoiaG9yaXpvbnRhbCIpO2xldCBzPVt2ZS5Ob2RlLkNPTE9SX1RBUkdFVF07YS5pc0ZhZGVkT3V0JiZzLnB1c2goImZhZGVkLWVsbGlwc2UiKSxBbihuLCJ1c2UiLHMpLmF0dHIoInhsaW5rOmhyZWYiLCIjb3Atc2VyaWVzLSIrbysiLXN0YW1wIiksQW4obiwicmVjdCIsdmUuTm9kZS5DT0xPUl9UQVJHRVQpLmF0dHIoInJ4Iix0LnJhZGl1cykuYXR0cigicnkiLHQucmFkaXVzKTticmVhaztjYXNlIGp0LkJSSURHRTpBbihuLCJyZWN0Iix2ZS5Ob2RlLkNPTE9SX1RBUkdFVCkuYXR0cigicngiLHQucmFkaXVzKS5hdHRyKCJyeSIsdC5yYWRpdXMpO2JyZWFrO2Nhc2UganQuTUVUQTpBbihuLCJyZWN0Iix2ZS5Ob2RlLkNPTE9SX1RBUkdFVCkuYXR0cigicngiLHQucmFkaXVzKS5hdHRyKCJyeSIsdC5yYWRpdXMpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIlVucmVjb2duaXplZCBub2RlIHR5cGU6ICIrdC5ub2RlLnR5cGUpfXJldHVybiBufWZ1bmN0aW9uIFdsZShlKXtzd2l0Y2goZS5ub2RlLnR5cGUpe2Nhc2UganQuT1A6cmV0dXJuIHZlLk9QTk9ERTtjYXNlIGp0Lk1FVEE6cmV0dXJuIHZlLk1FVEFOT0RFO2Nhc2UganQuU0VSSUVTOnJldHVybiB2ZS5TRVJJRVNOT0RFO2Nhc2UganQuQlJJREdFOnJldHVybiB2ZS5CUklER0VOT0RFO2Nhc2UganQuRUxMSVBTSVM6cmV0dXJuIHZlLkVMTElQU0lTTk9ERX10aHJvdyBFcnJvcigiVW5yZWNvZ25pemVkIG5vZGUgdHlwZTogIitlLm5vZGUudHlwZSl9ZnVuY3Rpb24gSmNyKGUsdCl7bGV0IHI9SWwoZSwiZyIsdmUuTm9kZS5TSEFQRSksbj14MCh0KTtzd2l0Y2godC5ub2RlLnR5cGUpe2Nhc2UganQuT1A6e2xldCBpPXQubm9kZTtpZihWaS5pc051bWJlcihpLmZ1bmN0aW9uSW5wdXRJbmRleCl8fFZpLmlzTnVtYmVyKGkuZnVuY3Rpb25PdXRwdXRJbmRleCkpe2xldCBvPUlsKHIsInBvbHlnb24iKTtMbGUobyx0LngsdC55LHQuY29yZUJveC53aWR0aCx0LmNvcmVCb3guaGVpZ2h0KX1lbHNle2xldCBvPUlsKHIsImVsbGlwc2UiKTtFSChvLG4sdC55LHQuY29yZUJveC53aWR0aCx0LmNvcmVCb3guaGVpZ2h0KX1kUChlLG4sdC55LHQubGFiZWxPZmZzZXQpO2JyZWFrfWNhc2UganQuTUVUQTp7bGV0IGk9ci5zZWxlY3RBbGwoInJlY3QiKTt0LmV4cGFuZGVkPyhGZChpLHQueCx0LnksdC53aWR0aCx0LmhlaWdodCksQmxlKGUsdCksZFAoZSxuLHQueSwtdC5oZWlnaHQvMit0LmxhYmVsSGVpZ2h0LzIpKTooRmQoaSxuLHQueSx0LmNvcmVCb3gud2lkdGgsdC5jb3JlQm94LmhlaWdodCksZFAoZSxuLHQueSwwKSk7YnJlYWt9Y2FzZSBqdC5TRVJJRVM6e2xldCBpPUlsKHIsInVzZSIpO3QuZXhwYW5kZWQ/KEZkKGksdC54LHQueSx0LndpZHRoLHQuaGVpZ2h0KSxCbGUoZSx0KSxkUChlLG4sdC55LC10LmhlaWdodC8yK3QubGFiZWxIZWlnaHQvMikpOihGZChpLG4sdC55LHQuY29yZUJveC53aWR0aCx0LmNvcmVCb3guaGVpZ2h0KSxkUChlLG4sdC55LHQubGFiZWxPZmZzZXQpKTticmVha31jYXNlIGp0LkJSSURHRTp7bGV0IGk9SWwociwicmVjdCIpO0ZkKGksdC54LHQueSx0LndpZHRoLHQuaGVpZ2h0KTticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnJlY29nbml6ZWQgbm9kZSB0eXBlOiAiK3Qubm9kZS50eXBlKX19ZnVuY3Rpb24gS2x0KGUsdCxyKXtsZXQgbj1Kc2UoZSk7aWYoIXIpcmV0dXJuYHVybCgjJHtufSlgO2xldCBpPUh0KHIpLG89aS5zZWxlY3QoImRlZnMjX2dyYXBoLWdyYWRpZW50cyIpO28uZW1wdHkoKSYmKG89aS5hcHBlbmQoImRlZnMiKS5hdHRyKCJpZCIsIl9ncmFwaC1ncmFkaWVudHMiKSk7bGV0IGE9by5zZWxlY3QoImxpbmVhckdyYWRpZW50IyIrbik7aWYoYS5lbXB0eSgpKXthPW8uYXBwZW5kKCJsaW5lYXJHcmFkaWVudCIpLmF0dHIoImlkIixlKSxhLnNlbGVjdEFsbCgiKiIpLnJlbW92ZSgpO2xldCBzPTA7VmkuZWFjaCh0LGw9PntsZXQgYz1sLmNvbG9yO2EuYXBwZW5kKCJzdG9wIikuYXR0cigib2Zmc2V0IixzKS5hdHRyKCJzdG9wLWNvbG9yIixjKSxhLmFwcGVuZCgic3RvcCIpLmF0dHIoIm9mZnNldCIscytsLnByb3BvcnRpb24pLmF0dHIoInN0b3AtY29sb3IiLGMpLHMrPWwucHJvcG9ydGlvbn0pfXJldHVybmB1cmwoIyR7bn0pYH1mdW5jdGlvbiBMSChlKXtIdChlKS5zZWxlY3QoImRlZnMjX2dyYXBoLWdyYWRpZW50cyIpLnJlbW92ZSgpfWZ1bmN0aW9uIGtIKGUsdCxyLG4saSl7bGV0IG89S3U7c3dpdGNoKGU9ZXx8KCgpPT4wKSx0KXtjYXNlIEduLk5PTkU6Y2FzZSBHbi5TVFJVQ1RVUkU6aWYoci5ub2RlLnR5cGU9PT1qdC5NRVRBKXtsZXQgYT1yLm5vZGUudGVtcGxhdGVJZDtyZXR1cm4gdD09PUduLlNUUlVDVFVSRSYmYSE9PW51bGw/by5TVFJVQ1RVUkVfUEFMRVRURShlKGEpLG4pOm8uVU5LTk9XTn1lbHNlIHJldHVybiByLm5vZGUudHlwZT09PWp0LlNFUklFUz9uP28uRVhQQU5ERURfQ09MT1I6IndoaXRlIjpyLm5vZGUudHlwZT09PWp0LkJSSURHRT9yLnN0cnVjdHVyYWw/IiNmMGUiOnIubm9kZS5pbmJvdW5kPyIjMGVmIjoiI2ZlMCI6VmkuaXNOdW1iZXIoci5ub2RlLmZ1bmN0aW9uSW5wdXRJbmRleCk/IiM3OTU1NDgiOlZpLmlzTnVtYmVyKHIubm9kZS5mdW5jdGlvbk91dHB1dEluZGV4KT8iIzAwOTY4OCI6IndoaXRlIjtjYXNlIEduLkRFVklDRTpyZXR1cm4gci5kZXZpY2VDb2xvcnM9PW51bGw/by5VTktOT1dOOm4/by5FWFBBTkRFRF9DT0xPUjpLbHQoImRldmljZS0iK3Iubm9kZS5uYW1lLHIuZGV2aWNlQ29sb3JzLGkpO2Nhc2UgR24uWExBX0NMVVNURVI6cmV0dXJuIHIueGxhQ2x1c3RlckNvbG9ycz09bnVsbD9vLlVOS05PV046bj9vLkVYUEFOREVEX0NPTE9SOktsdCgieGxhLSIrci5ub2RlLm5hbWUsci54bGFDbHVzdGVyQ29sb3JzLGkpO2Nhc2UgR24uQ09NUFVURV9USU1FOnJldHVybiBuP28uRVhQQU5ERURfQ09MT1I6ci5jb21wdXRlVGltZUNvbG9yfHxvLlVOS05PV047Y2FzZSBHbi5NRU1PUlk6cmV0dXJuIG4/by5FWFBBTkRFRF9DT0xPUjpyLm1lbW9yeUNvbG9yfHxvLlVOS05PV047Y2FzZSBHbi5PUF9DT01QQVRJQklMSVRZOnJldHVybiByLmNvbXBhdGliaWxpdHlDb2xvcnM9PW51bGw/by5VTktOT1dOOm4/by5FWFBBTkRFRF9DT0xPUjpLbHQoIm9wLWNvbXBhdC0iK3Iubm9kZS5uYW1lLHIuY29tcGF0aWJpbGl0eUNvbG9ycyxpKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBjYXNlIHRvIGNvbG9yIG5vZGVzIGJ5Iil9fWZ1bmN0aW9uIHMzKGUsdCxyLG4pe249bnx8dmUuTm9kZS5TSEFQRTtsZXQgaT1yLmlzTm9kZUhpZ2hsaWdodGVkKHQubm9kZS5uYW1lKSxvPXIuaXNOb2RlU2VsZWN0ZWQodC5ub2RlLm5hbWUpLGE9dC5pc0luRXh0cmFjdHx8dC5pc091dEV4dHJhY3R8fHQuaXNMaWJyYXJ5RnVuY3Rpb24scz10LmV4cGFuZGVkJiZuIT09dmUuQW5ub3RhdGlvbi5OT0RFLGw9dC5pc0ZhZGVkT3V0O2UuY2xhc3NlZCgiaGlnaGxpZ2h0ZWQiLGkpLGUuY2xhc3NlZCgic2VsZWN0ZWQiLG8pLGUuY2xhc3NlZCgiZXh0cmFjdCIsYSksZS5jbGFzc2VkKCJleHBhbmRlZCIscyksZS5jbGFzc2VkKCJmYWRlZCIsbCk7bGV0IGM9ZS5zZWxlY3QoIi4iK24rIiAuIit2ZS5Ob2RlLkNPTE9SX1RBUkdFVCksdT1rSChyLnRlbXBsYXRlSW5kZXgsci5jb2xvckJ5LHQscyxyLmdldEdyYXBoU3ZnUm9vdCgpKTtjLnN0eWxlKCJmaWxsIix1KSxjLnN0eWxlKCJzdHJva2UiLG8/bnVsbDp0Y3QodSkpfWZ1bmN0aW9uIHRjdChlKXtyZXR1cm4gZS5zdWJzdHJpbmcoMCwzKT09PSJ1cmwiP0t1LkdSQURJRU5UX09VVExJTkU6Y3UoZSkuZGFya2VyKCkudG9TdHJpbmcoKX1mdW5jdGlvbiBZbGUoZSx0LHIsbil7bGV0IGk9SHQoZSk7aWYoaS5zZWxlY3RBbGwoIi5pbnB1dC1oaWdobGlnaHQiKS5jbGFzc2VkKCJpbnB1dC1oaWdobGlnaHQiLCExKSxpLnNlbGVjdEFsbCgiLm5vbi1pbnB1dCIpLmNsYXNzZWQoIm5vbi1pbnB1dCIsITEpLGkuc2VsZWN0QWxsKCIuaW5wdXQtcGFyZW50IikuY2xhc3NlZCgiaW5wdXQtcGFyZW50IiwhMSksaS5zZWxlY3RBbGwoIi5pbnB1dC1jaGlsZCIpLmNsYXNzZWQoImlucHV0LWNoaWxkIiwhMSksaS5zZWxlY3RBbGwoIi5pbnB1dC1lZGdlLWhpZ2hsaWdodCIpLmNsYXNzZWQoImlucHV0LWVkZ2UtaGlnaGxpZ2h0IiwhMSksaS5zZWxlY3RBbGwoIi5ub24taW5wdXQtZWRnZS1oaWdobGlnaHQiKS5jbGFzc2VkKCJub24taW5wdXQtZWRnZS1oaWdobGlnaHQiLCExKSxpLnNlbGVjdEFsbCgiLmlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZCIpLmNsYXNzZWQoImlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZCIsITEpLCF0fHwhbnx8IXIpcmV0dXJuO2xldCBvPWpsZShyLHQpLGE9e307VmkuZWFjaChvLGZ1bmN0aW9uKGMpe2E9WGxlKGUsdCxjLGEpfSk7bGV0IHM9T2JqZWN0LmtleXMoYSksbD10dXIodCxzKTtldXIoZSxsKSxpLnNlbGVjdEFsbCgiZy5ub2RlOm5vdCguc2VsZWN0ZWQpOm5vdCguaW5wdXQtaGlnaGxpZ2h0KTpub3QoLmlucHV0LXBhcmVudCk6bm90KC5pbnB1dC1jaGlsZHJlbikiKS5jbGFzc2VkKCJub24taW5wdXQiLCEwKS5lYWNoKGZ1bmN0aW9uKGMpe2xldCB1PWMubm9kZS5uYW1lO2kuc2VsZWN0QWxsKGBbZGF0YS1uYW1lPSIke3V9Il1gKS5jbGFzc2VkKCJub24taW5wdXQiLCEwKX0pLGkuc2VsZWN0QWxsKCJnLmVkZ2U6bm90KC5pbnB1dC1lZGdlLWhpZ2hsaWdodCkiKS5jbGFzc2VkKCJub24taW5wdXQtZWRnZS1oaWdobGlnaHQiLCEwKX1mdW5jdGlvbiBqbGUoZSx0KXtsZXQgcj1bXSxuPXQuZ2V0Tm9kZUJ5TmFtZShlKTtpZihuIGluc3RhbmNlb2YgeTApcmV0dXJuW25dLmNvbmNhdChuLmluRW1iZWRkaW5ncyk7bGV0IGk9bi5tZXRhZ3JhcGgubm9kZXMoKTtyZXR1cm4gVmkuZWFjaChpLGZ1bmN0aW9uKG8pe3I9ci5jb25jYXQoamxlKG8sdCkpfSkscn1mdW5jdGlvbiBYbGUoZSx0LHIsbil7aWYobltyLm5hbWVdKXJldHVybiBuO25bci5uYW1lXT0hMDtsZXQgaT1yLmlucHV0cyxvPVpsdCh0LHIpO0h0KGUpLnNlbGVjdChgLm5vZGVbZGF0YS1uYW1lPSIke28ubmFtZX0iXWApLmNsYXNzZWQoImlucHV0LWhpZ2hsaWdodCIsITApO2xldCBhPXt9O1ZpLmVhY2goaSxmdW5jdGlvbih1KXtsZXQgaD10LmdldE5vZGVCeU5hbWUodS5uYW1lKTtpZihoPT09dm9pZCAwKXJldHVybjtpZihoIGluc3RhbmNlb2YgYVApe2xldCBkPXNQKGgubmFtZSk7aD10LmdldE5vZGVCeU5hbWUoZCl9bGV0IGY9Wmx0KHQsaCkscD1hW2YubmFtZV07cD9wLm9wTm9kZXMucHVzaChoKTphW2YubmFtZV09e3Zpc2libGVQYXJlbnQ6ZixvcE5vZGVzOltoXX19KTtsZXQgcz17fSxsPVtvXTtzW28ubmFtZV09e3RyYWNlZDohMSxpbmRleDowLGNvbm5lY3Rpb25FbmRwb2ludHM6W119O2xldCBjPW87Zm9yKGxldCB1PTE7Yy5uYW1lIT09cWM7dSsrKWM9Yy5wYXJlbnROb2RlLHNbYy5uYW1lXT17dHJhY2VkOiExLGluZGV4OnUsY29ubmVjdGlvbkVuZHBvaW50czpbXX0sbFt1XT1jO3JldHVybiBWaS5mb3JPd24oYSxmdW5jdGlvbih1LGgpe2xldCBmPXUudmlzaWJsZVBhcmVudDtWaS5lYWNoKHUub3BOb2RlcyxmdW5jdGlvbihwKXtuPVhsZShlLHQscCxuKX0pLGYubmFtZSE9PW8ubmFtZSYmUWNyKGUsZixzLGwpfSksbn1mdW5jdGlvbiBRY3IoZSx0LHIsbil7bGV0IGk9dCxvPXQsYT1bXTtmb3IoOyFyW2kubmFtZV07KW8ubmFtZSE9PWkubmFtZSYmYS5wdXNoKFtvLGldKSxvPWksaT1pLnBhcmVudE5vZGU7bGV0IHM9cltpLm5hbWVdLmluZGV4LGw9bltNYXRoLm1heChzLTEsMCldLm5hbWUsYz1sLHU9by5uYW1lLGg9by5uYW1lLGY9SHQoZSk7Zi5zZWxlY3RBbGwoYFtkYXRhLWVkZ2U9IiR7aH0tLSR7bH0iXWApLmNsYXNzZWQoImlucHV0LWVkZ2UtaGlnaGxpZ2h0IiwhMCksVmkuZWFjaChhLGZ1bmN0aW9uKHApe2xldCBkPXBbMF0sZz1wWzFdLF89YFtkYXRhLWVkZ2U9IiR7ZC5uYW1lfS0tJHtjfX5+JHtnLm5hbWV9fn5PVVQiXWA7Zi5zZWxlY3RBbGwoXykuY2xhc3NlZCgiaW5wdXQtZWRnZS1oaWdobGlnaHQiLCEwKX0pO2ZvcihsZXQgcD0xO3A8cztwKyspe2xldCBkPW5bcC0xXSxnPW5bcF0sXz1gW2RhdGEtZWRnZT0iJHt1fX5+JHtnLm5hbWV9fn5JTi0tJHtkLm5hbWV9Il1gO2Yuc2VsZWN0QWxsKF8pLmNsYXNzZWQoImlucHV0LWVkZ2UtaGlnaGxpZ2h0IiwhMCl9fWZ1bmN0aW9uIHR1cihlLHQpe2xldCByPXt9O3JldHVybiBWaS5lYWNoKHQsZnVuY3Rpb24obil7bGV0IGk9ZS5nZXROb2RlQnlOYW1lKG4pLG89Wmx0KGUsaSk7cltvLm5hbWVdPW99KSxyfWZ1bmN0aW9uIGV1cihlLHQpe1ZpLmZvck93bih0LGZ1bmN0aW9uKHIpe2xldCBuPXI7Zm9yKDtuLm5hbWUhPT1xYzspe2xldCBpPUh0KGUpLnNlbGVjdChgLm5vZGVbZGF0YS1uYW1lPSIke24ubmFtZX0iXWApO2kubm9kZXMoKS5sZW5ndGgmJiFpLmNsYXNzZWQoImlucHV0LWhpZ2hsaWdodCIpJiYhaS5jbGFzc2VkKCJzZWxlY3RlZCIpJiYhaS5jbGFzc2VkKCJvcCIpJiZpLmNsYXNzZWQoImlucHV0LXBhcmVudCIsITApLG49bi5wYXJlbnROb2RlfX0pfWZ1bmN0aW9uIFpsdChlLHQpe2xldCByPSExLG49dDtmb3IoOyFyOylpZih0PW4sbj10LnBhcmVudE5vZGUsbj09PXZvaWQgMClyPSEwO2Vsc2V7bGV0IGk9ZS5nZXRSZW5kZXJOb2RlQnlOYW1lKG4ubmFtZSk7aSYmKGkuZXhwYW5kZWR8fG4gaW5zdGFuY2VvZiB5MCkmJihyPSEwKX1yZXR1cm4gdH1mdW5jdGlvbiBWbGUoZSx0LHIsbil7bGV0IGk9ZS5zZWxlY3RBbGwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzfSkuZGF0YSh0Lmxpc3Qsbz0+by5ub2RlLm5hbWUpO3JldHVybiBpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiZGF0YS1uYW1lIixvPT5vLm5vZGUubmFtZSkuZWFjaChmdW5jdGlvbihvKXtsZXQgYT1IdCh0aGlzKTtuLmFkZEFubm90YXRpb25Hcm91cChvLHIsYSk7bGV0IHM9dmUuQW5ub3RhdGlvbi5FREdFLGw9by5yZW5kZXJNZXRhZWRnZUluZm8mJm8ucmVuZGVyTWV0YWVkZ2VJbmZvLm1ldGFlZGdlO2wmJiFsLm51bVJlZ3VsYXJFZGdlcyYmKHMrPSIgIit2ZS5Bbm5vdGF0aW9uLkNPTlRST0xfRURHRSksbCYmbC5udW1SZWZFZGdlcyYmKHMrPSIgIit2ZS5FZGdlLlJFRl9MSU5FKSxYbHQoYSxvLG4scyksby5hbm5vdGF0aW9uVHlwZSE9PWdpLkVMTElQU0lTPyhpdXIoYSxvKSxudXIoYSxvKSk6JGxlKGEsby5ub2RlLm5hbWUsbyx2ZS5Bbm5vdGF0aW9uLkVMTElQU0lTKX0pLm1lcmdlKGkpLmF0dHIoImNsYXNzIixvPT52ZS5Bbm5vdGF0aW9uLkdST1VQKyIgIitydXIoby5hbm5vdGF0aW9uVHlwZSkrIiAiK1dsZShvKSkuZWFjaChmdW5jdGlvbihvKXtsZXQgYT1IdCh0aGlzKTthdXIoYSxyLG8sbiksby5hbm5vdGF0aW9uVHlwZSE9PWdpLkVMTElQU0lTJiZvdXIoYSxyLG8sbil9KSxpLmV4aXQoKS5lYWNoKGZ1bmN0aW9uKG8pe24ucmVtb3ZlQW5ub3RhdGlvbkdyb3VwKG8scil9KS5yZW1vdmUoKSxpfWZ1bmN0aW9uIHJ1cihlKXtyZXR1cm4oZ2lbZV18fCIiKS50b0xvd2VyQ2FzZSgpfHxudWxsfWZ1bmN0aW9uIG51cihlLHQpe2lmKHQuYW5ub3RhdGlvblR5cGU9PT1naS5TVU1NQVJZKUFuKGUsInVzZSIpLmF0dHIoImNsYXNzIiwic3VtbWFyeSIpLmF0dHIoInhsaW5rOmhyZWYiLCIjc3VtbWFyeS1pY29uIikuYXR0cigiY3Vyc29yIiwicG9pbnRlciIpO2Vsc2V7bGV0IHI9R2xlKGUsdCx2ZS5Bbm5vdGF0aW9uLk5PREUpO0FuKHIsInRpdGxlIikudGV4dCh0Lm5vZGUubmFtZSl9fWZ1bmN0aW9uIGl1cihlLHQpe2xldCByPXQubm9kZS5uYW1lLnNwbGl0KCIvIiksbj1yW3IubGVuZ3RoLTFdO3JldHVybiAkbGUoZSxuLHQsbnVsbCl9ZnVuY3Rpb24gJGxlKGUsdCxyLG4pe2xldCBpPXZlLkFubm90YXRpb24uTEFCRUw7biYmKGkrPSIgIituKTtsZXQgbz1lLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIixpKS5hdHRyKCJkeSIsIi4zNWVtIikuYXR0cigidGV4dC1hbmNob3IiLHIuaXNJbj8iZW5kIjoic3RhcnQiKS50ZXh0KHQpO3JldHVybiBxbGUobywtMSxKNC5Bbm5vdGF0aW9uLkxBQkVMKX1mdW5jdGlvbiBvdXIoZSx0LHIsbil7ZS5vbigibW91c2VvdmVyIixpPT57bi5maXJlKCJhbm5vdGF0aW9uLWhpZ2hsaWdodCIse25hbWU6aS5ub2RlLm5hbWUsaG9zdE5hbWU6dC5ub2RlLm5hbWV9KX0pLm9uKCJtb3VzZW91dCIsaT0+e24uZmlyZSgiYW5ub3RhdGlvbi11bmhpZ2hsaWdodCIse25hbWU6aS5ub2RlLm5hbWUsaG9zdE5hbWU6dC5ub2RlLm5hbWV9KX0pLm9uKCJjbGljayIsaT0+e3F0LnN0b3BQcm9wYWdhdGlvbigpLG4uZmlyZSgiYW5ub3RhdGlvbi1zZWxlY3QiLHtuYW1lOmkubm9kZS5uYW1lLGhvc3ROYW1lOnQubm9kZS5uYW1lfSl9KSxyLmFubm90YXRpb25UeXBlIT09Z2kuU1VNTUFSWSYmci5hbm5vdGF0aW9uVHlwZSE9PWdpLkNPTlNUQU5UJiZlLm9uKCJjb250ZXh0bWVudSIsV2x0KG4sVWxlKHIubm9kZSxuKSkpfWZ1bmN0aW9uIGF1cihlLHQscixuKXtsZXQgaT14MCh0KTtyLnJlbmRlck5vZGVJbmZvJiZyLmFubm90YXRpb25UeXBlIT09Z2kuRUxMSVBTSVMmJnMzKGUsci5yZW5kZXJOb2RlSW5mbyxuLHZlLkFubm90YXRpb24uTk9ERSksci5hbm5vdGF0aW9uVHlwZT09PWdpLlNVTU1BUlkmJihyLndpZHRoKz0xMCksZS5zZWxlY3QoInRleHQuIit2ZS5Bbm5vdGF0aW9uLkxBQkVMKS50cmFuc2l0aW9uKCkuYXR0cigieCIsaStyLmR4KyhyLmlzSW4/LTE6MSkqKHIud2lkdGgvMityLmxhYmVsT2Zmc2V0KSkuYXR0cigieSIsdC55K3IuZHkpLGUuc2VsZWN0KCJ1c2Uuc3VtbWFyeSIpLnRyYW5zaXRpb24oKS5hdHRyKCJ4IixpK3IuZHgtMykuYXR0cigieSIsdC55K3IuZHktNiksRUgoZS5zZWxlY3QoIi4iK3ZlLkFubm90YXRpb24uTk9ERSsiIGVsbGlwc2UiKSxpK3IuZHgsdC55K3IuZHksci53aWR0aCxyLmhlaWdodCksRmQoZS5zZWxlY3QoIi4iK3ZlLkFubm90YXRpb24uTk9ERSsiIHJlY3QiKSxpK3IuZHgsdC55K3IuZHksci53aWR0aCxyLmhlaWdodCksRmQoZS5zZWxlY3QoIi4iK3ZlLkFubm90YXRpb24uTk9ERSsiIHVzZSIpLGkrci5keCx0Lnkrci5keSxyLndpZHRoLHIuaGVpZ2h0KSxlLnNlbGVjdCgicGF0aC4iK3ZlLkFubm90YXRpb24uRURHRSkudHJhbnNpdGlvbigpLmF0dHIoImQiLG89PntsZXQgYT1vLnBvaW50cy5tYXAocz0+KHt4OnMuZHgraSx5OnMuZHkrdC55fSkpO3JldHVybiBDSChhKX0pfWZ1bmN0aW9uIGVjdChlLHQscixuKXtuPW58fHZlLlNjZW5lLkdST1VQO2xldCBpPWcwKGUsImciLG4pLmVtcHR5KCksbz1BbihlLCJnIixuKSxhPUFuKG8sImciLHZlLlNjZW5lLkNPUkUpLHM9VmkucmVkdWNlKHQuY29yZUdyYXBoLm5vZGVzKCksKGwsYyk9PntsZXQgdT10LmNvcmVHcmFwaC5ub2RlKGMpO3JldHVybiB1LmV4Y2x1ZGVkfHxsLnB1c2godSksbH0sQXJyYXkoKSk7aWYodC5ub2RlLnR5cGU9PT1qdC5TRVJJRVMmJnMucmV2ZXJzZSgpLHpsZShhLHQuY29yZUdyYXBoLHIpLFBIKGEscyxyKSx0Lmlzb2xhdGVkSW5FeHRyYWN0Lmxlbmd0aD4wKXtsZXQgbD1BbihvLCJnIix2ZS5TY2VuZS5JTkVYVFJBQ1QpO1BIKGwsdC5pc29sYXRlZEluRXh0cmFjdCxyKX1lbHNlIGcwKG8sImciLHZlLlNjZW5lLklORVhUUkFDVCkucmVtb3ZlKCk7aWYodC5pc29sYXRlZE91dEV4dHJhY3QubGVuZ3RoPjApe2xldCBsPUFuKG8sImciLHZlLlNjZW5lLk9VVEVYVFJBQ1QpO1BIKGwsdC5pc29sYXRlZE91dEV4dHJhY3Qscil9ZWxzZSBnMChvLCJnIix2ZS5TY2VuZS5PVVRFWFRSQUNUKS5yZW1vdmUoKTtpZih0LmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0Lmxlbmd0aD4wKXtsZXQgbD1BbihvLCJnIix2ZS5TY2VuZS5GVU5DVElPTl9MSUJSQVJZKTtQSChsLHQubGlicmFyeUZ1bmN0aW9uc0V4dHJhY3Qscil9ZWxzZSBnMChvLCJnIix2ZS5TY2VuZS5GVU5DVElPTl9MSUJSQVJZKS5yZW1vdmUoKTtyZXR1cm4gUGxlKG8sdCksaSYmby5hdHRyKCJvcGFjaXR5IiwwKS50cmFuc2l0aW9uKCkuYXR0cigib3BhY2l0eSIsMSksb312YXIgc3VyPS44LFJIPWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGksbyxhKXt0aGlzLnN2Zz10LHRoaXMubGFiZWxQYWRkaW5nPWEsdGhpcy56b29tRz1yLHRoaXMubWFpblpvb209bix0aGlzLm1heFdhbmRIPW87bGV0IHM9SHQoaS5zaGFkb3dSb290KSxsPXMuc2VsZWN0KCJzdmciKSxjPWwuc2VsZWN0KCJyZWN0IiksdT1mPT57dGhpcy52aWV3cG9pbnRDb29yZC54PXF0LngsdGhpcy52aWV3cG9pbnRDb29yZC55PXF0LnksdGhpcy51cGRhdGVWaWV3cG9pbnQoKX07dGhpcy52aWV3cG9pbnRDb29yZD17eDowLHk6MH07bGV0IGg9cGIoKS5zdWJqZWN0KE9iamVjdCkub24oImRyYWciLHUpO2MuZGF0dW0odGhpcy52aWV3cG9pbnRDb29yZCkuY2FsbChoKSxsLm9uKCJjbGljayIsKCk9PntpZihxdC5kZWZhdWx0UHJldmVudGVkKXJldHVybjtsZXQgZj1OdW1iZXIoYy5hdHRyKCJ3aWR0aCIpKSxwPU51bWJlcihjLmF0dHIoImhlaWdodCIpKSxkPXpvKGwubm9kZSgpKTt0aGlzLnZpZXdwb2ludENvb3JkLng9ZFswXS1mLzIsdGhpcy52aWV3cG9pbnRDb29yZC55PWRbMV0tcC8yLHRoaXMudXBkYXRlVmlld3BvaW50KCl9KSx0aGlzLnZpZXdwb2ludD1jLm5vZGUoKSx0aGlzLm1pbmltYXBTdmc9bC5ub2RlKCksdGhpcy5taW5pbWFwPWksdGhpcy5jYW52YXM9cy5zZWxlY3QoImNhbnZhcy5maXJzdCIpLm5vZGUoKSx0aGlzLmNhbnZhc0J1ZmZlcj1zLnNlbGVjdCgiY2FudmFzLnNlY29uZCIpLm5vZGUoKSx0aGlzLmRvd25sb2FkQ2FudmFzPXMuc2VsZWN0KCJjYW52YXMuZG93bmxvYWQiKS5ub2RlKCksSHQodGhpcy5kb3dubG9hZENhbnZhcykuc3R5bGUoImRpc3BsYXkiLCJub25lIiksdGhpcy51cGRhdGUoKX11cGRhdGVWaWV3cG9pbnQoKXtIdCh0aGlzLnZpZXdwb2ludCkuYXR0cigieCIsdGhpcy52aWV3cG9pbnRDb29yZC54KS5hdHRyKCJ5Iix0aGlzLnZpZXdwb2ludENvb3JkLnkpO2xldCB0PS10aGlzLnZpZXdwb2ludENvb3JkLngqdGhpcy5zY2FsZU1haW4vdGhpcy5zY2FsZU1pbmltYXAscj0tdGhpcy52aWV3cG9pbnRDb29yZC55KnRoaXMuc2NhbGVNYWluL3RoaXMuc2NhbGVNaW5pbWFwO0h0KHRoaXMuc3ZnKS5jYWxsKHRoaXMubWFpblpvb20udHJhbnNmb3JtLCRoLnRyYW5zbGF0ZSh0LHIpLnNjYWxlKHRoaXMuc2NhbGVNYWluKSl9Z2V0SW1hZ2VCbG9iKCl7cmV0dXJuIG5ldyBQcm9taXNlKHQ9Pnt0aGlzLmRvd25sb2FkQ2FudmFzLnRvQmxvYihyPT57dChyKX0sImltYWdlL3BuZyIpfSl9dXBkYXRlKCl7bGV0IHQ9bnVsbDt0cnl7aWYodD10aGlzLnpvb21HLmdldEJCb3goKSx0LndpZHRoPT09MClyZXR1cm59Y2F0Y2gocCl7cmV0dXJufWxldCByPUh0KHRoaXMuc3ZnKSxuPSIiLGk9dGhpcy5zdmcsYT0oaS5nZXRSb290Tm9kZT9pLmdldFJvb3ROb2RlKCk6dGhpcy5zdmcucGFyZW50Tm9kZSkuc3R5bGVTaGVldHM7Zm9yKGxldCBwPTA7cDxhLmxlbmd0aDtwKyspdHJ5e2xldCBkPWFbcF0uY3NzUnVsZXN8fGFbcF0ucnVsZXM7aWYoZD09bnVsbCljb250aW51ZTtmb3IobGV0IGc9MDtnPGQubGVuZ3RoO2crKyluKz1kW2ddLmNzc1RleHQucmVwbGFjZSgvID90Zi1bXHctXSsgPy9nLCIiKStgCmB9Y2F0Y2goZCl7aWYoZC5uYW1lIT09IlNlY3VyaXR5RXJyb3IiKXRocm93IGR9bGV0IHM9ci5hcHBlbmQoInN0eWxlIik7cy50ZXh0KG4pO2xldCBsPUh0KHRoaXMuem9vbUcpLGM9bC5hdHRyKCJ0cmFuc2Zvcm0iKTtsLmF0dHIoInRyYW5zZm9ybSIsbnVsbCksdC5oZWlnaHQrPXQueSx0LndpZHRoKz10LngsdC5oZWlnaHQrPXRoaXMubGFiZWxQYWRkaW5nKjIsdC53aWR0aCs9dGhpcy5sYWJlbFBhZGRpbmcqMixyLmF0dHIoIndpZHRoIix0LndpZHRoKS5hdHRyKCJoZWlnaHQiLHQuaGVpZ2h0KSx0aGlzLnNjYWxlTWluaW1hcD10aGlzLm1heFdhbmRIL01hdGgubWF4KHQud2lkdGgsdC5oZWlnaHQpLHRoaXMubWluaW1hcFNpemU9e3dpZHRoOnQud2lkdGgqdGhpcy5zY2FsZU1pbmltYXAsaGVpZ2h0OnQuaGVpZ2h0KnRoaXMuc2NhbGVNaW5pbWFwfSxIdCh0aGlzLm1pbmltYXBTdmcpLmF0dHIodGhpcy5taW5pbWFwU2l6ZSksSHQodGhpcy5jYW52YXNCdWZmZXIpLmF0dHIodGhpcy5taW5pbWFwU2l6ZSk7bGV0IHU9SHQodGhpcy5kb3dubG9hZENhbnZhcyk7dS5zdHlsZSgid2lkdGgiLHQud2lkdGgpLHUuc3R5bGUoImhlaWdodCIsdC5oZWlnaHQpLHUuYXR0cigid2lkdGgiLDMqdC53aWR0aCksdS5hdHRyKCJoZWlnaHQiLDMqdC5oZWlnaHQpLHRoaXMudHJhbnNsYXRlIT1udWxsJiZ0aGlzLnpvb20hPW51bGwmJnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+dGhpcy56b29tKCkpO2xldCBoPW5ldyBYTUxTZXJpYWxpemVyKCkuc2VyaWFsaXplVG9TdHJpbmcodGhpcy5zdmcpO3MucmVtb3ZlKCksci5hdHRyKCJ3aWR0aCIsbnVsbCkuYXR0cigiaGVpZ2h0IixudWxsKSxsLmF0dHIoInRyYW5zZm9ybSIsYyk7bGV0IGY9bmV3IEltYWdlO2Yub25sb2FkPSgpPT57bGV0IHA9dGhpcy5jYW52YXNCdWZmZXIuZ2V0Q29udGV4dCgiMmQiKTtwPT1udWxsfHxwLmNsZWFyUmVjdCgwLDAsdGhpcy5jYW52YXNCdWZmZXIud2lkdGgsdGhpcy5jYW52YXNCdWZmZXIuaGVpZ2h0KSxwPT1udWxsfHxwLmRyYXdJbWFnZShmLDAsMCx0aGlzLm1pbmltYXBTaXplLndpZHRoLHRoaXMubWluaW1hcFNpemUuaGVpZ2h0KSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntIdCh0aGlzLmNhbnZhc0J1ZmZlcikuc3R5bGUoImRpc3BsYXkiLG51bGwpLEh0KHRoaXMuY2FudmFzKS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKSxbdGhpcy5jYW52YXMsdGhpcy5jYW52YXNCdWZmZXJdPVt0aGlzLmNhbnZhc0J1ZmZlcix0aGlzLmNhbnZhc119KTtsZXQgZD10aGlzLmRvd25sb2FkQ2FudmFzLmdldENvbnRleHQoIjJkIik7ZD09bnVsbHx8ZC5jbGVhclJlY3QoMCwwLHRoaXMuZG93bmxvYWRDYW52YXMud2lkdGgsdGhpcy5kb3dubG9hZENhbnZhcy5oZWlnaHQpLGQ9PW51bGx8fGQuZHJhd0ltYWdlKGYsMCwwLHRoaXMuZG93bmxvYWRDYW52YXMud2lkdGgsdGhpcy5kb3dubG9hZENhbnZhcy5oZWlnaHQpfSxmLm9uZXJyb3I9KCk9PntsZXQgcD1uZXcgQmxvYihbaF0se3R5cGU6ImltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCJ9KTtmLnNyYz1VUkwuY3JlYXRlT2JqZWN0VVJMKHApfSxmLnNyYz0iZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsIitlbmNvZGVVUklDb21wb25lbnQoaCl9em9vbSh0KXtpZih0aGlzLnNjYWxlTWluaW1hcD09bnVsbClyZXR1cm47dCYmKHRoaXMudHJhbnNsYXRlPVt0LngsdC55XSx0aGlzLnNjYWxlTWFpbj10LmspO2xldCByPXRoaXMuc3ZnLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49SHQodGhpcy52aWV3cG9pbnQpO3RoaXMudmlld3BvaW50Q29vcmQueD0tdGhpcy50cmFuc2xhdGVbMF0qdGhpcy5zY2FsZU1pbmltYXAvdGhpcy5zY2FsZU1haW4sdGhpcy52aWV3cG9pbnRDb29yZC55PS10aGlzLnRyYW5zbGF0ZVsxXSp0aGlzLnNjYWxlTWluaW1hcC90aGlzLnNjYWxlTWFpbjtsZXQgaT1yLndpZHRoKnRoaXMuc2NhbGVNaW5pbWFwL3RoaXMuc2NhbGVNYWluLG89ci5oZWlnaHQqdGhpcy5zY2FsZU1pbmltYXAvdGhpcy5zY2FsZU1haW47bi5hdHRyKCJ4Iix0aGlzLnZpZXdwb2ludENvb3JkLngpLmF0dHIoInkiLHRoaXMudmlld3BvaW50Q29vcmQueSkuYXR0cigid2lkdGgiLGkpLmF0dHIoImhlaWdodCIsbyk7bGV0IGE9dGhpcy5taW5pbWFwU2l6ZS53aWR0aCxzPXRoaXMubWluaW1hcFNpemUuaGVpZ2h0LGw9dGhpcy52aWV3cG9pbnRDb29yZC54LGM9dGhpcy52aWV3cG9pbnRDb29yZC55LHU9TWF0aC5taW4oTWF0aC5tYXgoMCxsK2kpLGEpLU1hdGgubWluKE1hdGgubWF4KDAsbCksYSksaD1NYXRoLm1pbihNYXRoLm1heCgwLGMrbykscyktTWF0aC5taW4oTWF0aC5tYXgoMCxjKSxzKTt1KmgvKGEqcyk8c3VyP3RoaXMubWluaW1hcC5jbGFzc0xpc3QucmVtb3ZlKCJoaWRkZW4iKTp0aGlzLm1pbmltYXAuY2xhc3NMaXN0LmFkZCgiaGlkZGVuIil9fTt2YXIgbmN0PWNsYXNzIGV4dGVuZHMgbXR7aW5pdCh0LHIsbixpLG8pe3JldHVybiBuZXcgUkgodCxyLG4sdGhpcyxpLG8pfX07bmN0LnRlbXBsYXRlPVFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3MgbGluZWFyOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdCguaGlkZGVuKSB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgY2FudmFzIHsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjOTk5OwogICAgICB9CgogICAgICByZWN0IHsKICAgICAgICBmaWxsOiB3aGl0ZTsKICAgICAgICBzdHJva2U6ICMxMTExMTE7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgICAgICAgZmlsbC1vcGFjaXR5OiAwOwogICAgICAgIGZpbHRlcjogdXJsKCNtaW5pbWFwRHJvcFNoYWRvdyk7CiAgICAgICAgY3Vyc29yOiBtb3ZlOwogICAgICB9CgogICAgICBzdmcgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxzdmc+CiAgICAgIDxkZWZzPgogICAgICAgIDxmaWx0ZXIKICAgICAgICAgIGlkPSJtaW5pbWFwRHJvcFNoYWRvdyIKICAgICAgICAgIHg9Ii0yMCUiCiAgICAgICAgICB5PSItMjAlIgogICAgICAgICAgd2lkdGg9IjE1MCUiCiAgICAgICAgICBoZWlnaHQ9IjE1MCUiCiAgICAgICAgPgogICAgICAgICAgPGZlT2Zmc2V0IHJlc3VsdD0ib2ZmT3V0IiBpbj0iU291cmNlR3JhcGhpYyIgZHg9IjEiIGR5PSIxIj48L2ZlT2Zmc2V0PgogICAgICAgICAgPGZlQ29sb3JNYXRyaXgKICAgICAgICAgICAgcmVzdWx0PSJtYXRyaXhPdXQiCiAgICAgICAgICAgIGluPSJvZmZPdXQiCiAgICAgICAgICAgIHR5cGU9Im1hdHJpeCIKICAgICAgICAgICAgdmFsdWVzPSIwLjEgMCAwIDAgMCAwIDAuMSAwIDAgMCAwIDAgMC4xIDAgMCAwIDAgMCAwLjUgMCIKICAgICAgICAgID48L2ZlQ29sb3JNYXRyaXg+CiAgICAgICAgICA8ZmVHYXVzc2lhbkJsdXIKICAgICAgICAgICAgcmVzdWx0PSJibHVyT3V0IgogICAgICAgICAgICBpbj0ibWF0cml4T3V0IgogICAgICAgICAgICBzdGREZXZpYXRpb249IjIiCiAgICAgICAgICA+PC9mZUdhdXNzaWFuQmx1cj4KICAgICAgICAgIDxmZUJsZW5kIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9ImJsdXJPdXQiIG1vZGU9Im5vcm1hbCI+PC9mZUJsZW5kPgogICAgICAgIDwvZmlsdGVyPgogICAgICA8L2RlZnM+CiAgICAgIDxyZWN0PjwvcmVjdD4KICAgIDwvc3ZnPgogICAgPGNhbnZhcyBjbGFzcz0iZmlyc3QiPjwvY2FudmFzPgogICAgPCEtLSBBZGRpdGlvbmFsIGNhbnZhcyB0byB1c2UgYXMgYnVmZmVyIHRvIGF2b2lkIGZsaWNrZXJpbmcgYmV0d2VlbiB1cGRhdGVzIC0tPgogICAgPGNhbnZhcyBjbGFzcz0ic2Vjb25kIj48L2NhbnZhcz4KICAgIDxjYW52YXMgY2xhc3M9ImRvd25sb2FkIj48L2NhbnZhcz4KICBgO25jdD1FKFt5dCgidGYtZ3JhcGgtbWluaW1hcCIpXSxuY3QpO3ZhciBLbGU9UWAKICA8c3R5bGU+CiAgICA6aG9zdCguZGFyay1tb2RlKSB7CiAgICAgIGZpbHRlcjogaW52ZXJ0KDEpOwogICAgfQoKICAgIDpob3N0IHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgfQoKICAgICNzdmcgewogICAgICBmbGV4OiAxOwogICAgICBmb250LWZhbWlseTogUm9ib3RvLCBzYW5zLXNlcmlmOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIHdpZHRoOiAxMDAlOwogICAgfQoKICAgICNoaWRkZW4gewogICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgIHRvcDogMHB4OwogICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICB9CgogICAgdGV4dCB7CiAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgfQoKICAgIC8qIC0tLSBOb2RlIGFuZCBhbm5vdGF0aW9uLW5vZGUgZm9yIE1ldGFub2RlIC0tLSAqLwoKICAgIC5tZXRhID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAubWV0YSA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBmaWxsOiBoc2woMCwgMCUsIDcwJSk7CiAgICB9CiAgICAubm9kZS5tZXRhLmhpZ2hsaWdodGVkID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAubm9kZS5tZXRhLmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CiAgICAuYW5ub3RhdGlvbi5tZXRhLmhpZ2hsaWdodGVkID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAuYW5ub3RhdGlvbi5tZXRhLmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2Utd2lkdGg6IDE7CiAgICB9CiAgICAubWV0YS5zZWxlY3RlZCA+IC5ub2Rlc2hhcGUgPiByZWN0LAogICAgLm1ldGEuc2VsZWN0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CiAgICAubm9kZS5tZXRhLnNlbGVjdGVkLmV4cGFuZGVkID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAubm9kZS5tZXRhLnNlbGVjdGVkLmV4cGFuZGVkID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2U6IHJlZDsKICAgICAgc3Ryb2tlLXdpZHRoOiAzOwogICAgfQogICAgLmFubm90YXRpb24ubWV0YS5zZWxlY3RlZCA+IC5ub2Rlc2hhcGUgPiByZWN0LAogICAgLmFubm90YXRpb24ubWV0YS5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgc3Ryb2tlOiByZWQ7CiAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgIH0KICAgIC5ub2RlLm1ldGEuc2VsZWN0ZWQuZXhwYW5kZWQuaGlnaGxpZ2h0ZWQgPiAubm9kZXNoYXBlID4gcmVjdCwKICAgIC5ub2RlLm1ldGEuc2VsZWN0ZWQuZXhwYW5kZWQuaGlnaGxpZ2h0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDQ7CiAgICB9CgogICAgLmZhZGVkLAogICAgLmZhZGVkIHJlY3QsCiAgICAuZmFkZWQgZWxsaXBzZSwKICAgIC5mYWRlZCBwYXRoLAogICAgLmZhZGVkIHVzZSwKICAgICNyZWN0SGF0Y2ggbGluZSwKICAgICNlbGxpcHNlSGF0Y2ggbGluZSB7CiAgICAgIGNvbG9yOiAjZTBkNGIzICFpbXBvcnRhbnQ7CiAgICAgIGZpbGw6IHdoaXRlOwogICAgICBzdHJva2U6ICNlMGQ0YjMgIWltcG9ydGFudDsKICAgIH0KCiAgICAuZmFkZWQgcGF0aCB7CiAgICAgIHN0cm9rZS13aWR0aDogMXB4ICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLmZhZGVkIHJlY3QgewogICAgICBmaWxsOiB1cmwoI3JlY3RIYXRjaCkgIWltcG9ydGFudDsKICAgIH0KCiAgICAuZmFkZWQgZWxsaXBzZSwKICAgIC5mYWRlZCB1c2UgewogICAgICBmaWxsOiB1cmwoI2VsbGlwc2VIYXRjaCkgIWltcG9ydGFudDsKICAgIH0KCiAgICAuZmFkZWQgdGV4dCB7CiAgICAgIG9wYWNpdHk6IDA7CiAgICB9CgogICAgLyogUnVsZXMgdXNlZCBmb3IgaW5wdXQtdHJhY2luZy4gKi8KICAgIC5pbnB1dC1oaWdobGlnaHQgPiAqID4gcmVjdCwKICAgIC5pbnB1dC1oaWdobGlnaHQgPiAqID4gZWxsaXBzZSwKICAgIC5pbnB1dC1oaWdobGlnaHQgPiAqID4gdXNlIHsKICAgICAgZmlsbDogd2hpdGU7CiAgICAgIHN0cm9rZTogI2ZmOTgwMCAhaW1wb3J0YW50OwogICAgfQoKICAgIC8qICAtIEZhZGVkIG5vbi1pbnB1dCBzdHlsaW5nICovCiAgICAubm9uLWlucHV0ID4gKiA+IHJlY3QsCi5ub24taW5wdXQgPiAqID4gZWxsaXBzZSwKLm5vbi1pbnB1dCA+ICogPiB1c2UsCi8qIEZvciBDb25zdCBub2Rlcy4gKi8KLm5vbi1pbnB1dCA+ICogPiAuY29uc3RhbnQ6bm90KFtjbGFzcyo9ImlucHV0LWhpZ2hsaWdodCJdKSA+CiAgLmFubm90YXRpb24tbm9kZSA+IGVsbGlwc2UsCi8qIEZvciBzdHlsaW5nIG9mIGFubm90YXRpb24gbm9kZXMgb2Ygbm9uLWlucHV0IG5vZGVzLiAqLwoubm9uLWlucHV0ID4gZyA+IC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2U6ICNlMGQ0YjMgIWltcG9ydGFudDsKICAgICAgc3Ryb2tlLXdpZHRoOiBpbmhlcml0OwogICAgICBzdHJva2UtZGFzaGFycmF5OiBpbmhlcml0OwogICAgfQoKICAgIC5ub24taW5wdXQgcGF0aCB7CiAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgIH0KCiAgICAubm9uLWlucHV0ID4gLm5vZGVzaGFwZSA+IHJlY3QsCi5ub24taW5wdXQgPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCwKLyogRm9yIHN0eWxpbmcgb2YgYW5ub3RhdGlvbiBub2RlcyBvZiBub24taW5wdXQgbm9kZXMuICovCi5ub24taW5wdXQgPiBnID4gLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgIGZpbGw6IHVybCgjcmVjdEhhdGNoKSAhaW1wb3J0YW50OwogICAgfQoKICAgIC5ub24taW5wdXQgZWxsaXBzZSwKICAgIC5ub24taW5wdXQgdXNlIHsKICAgICAgZmlsbDogdXJsKCNlbGxpcHNlSGF0Y2gpICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLm5vbi1pbnB1dCA+IHRleHQgewogICAgICBvcGFjaXR5OiAwOwogICAgfQoKICAgIC5ub24taW5wdXQgLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1lZGdlIHsKICAgICAgbWFya2VyLWVuZDogdXJsKCNhbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCk7CiAgICB9CgogICAgLm5vbi1pbnB1dCAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UucmVmbGluZSB7CiAgICAgIG1hcmtlci1zdGFydDogdXJsKCNyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQpOwogICAgfQoKICAgIC8qIElucHV0IGVkZ2VzLiAqLwogICAgLmlucHV0LWVkZ2UtaGlnaGxpZ2h0ID4gdGV4dCB7CiAgICAgIGZpbGw6IGJsYWNrICFpbXBvcnRhbnQ7CiAgICB9CiAgICAuaW5wdXQtaGlnaGxpZ2h0ID4gLmluLWFubm90YXRpb25zID4gLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1lZGdlLAogICAgLmlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZAogICAgICA+IC5pbi1hbm5vdGF0aW9ucwogICAgICA+IC5hbm5vdGF0aW9uCiAgICAgID4gLmFubm90YXRpb24tZWRnZSB7CiAgICAgIHN0cm9rZTogIzk5OSAhaW1wb3J0YW50OwogICAgfQoKICAgIC8qIE5vbi1pbnB1dCBlZGdlcy4gKi8KICAgIC5ub24taW5wdXQtZWRnZS1oaWdobGlnaHQsCi5ub24taW5wdXQgPiBnID4gLmFubm90YXRpb24gPiBwYXRoLAovKiBBbm5vdGF0aW9uIHN0eWxlcyAobGFiZWwgYW5kIGVkZ2VzIHJlc3BlY3RpdmVseSkuICovCi5ub24taW5wdXQgPiBnID4KLmFubm90YXRpb246bm90KC5pbnB1dC1oaWdobGlnaHQpOm5vdCguaW5wdXQtaGlnaGxpZ2h0LXNlbGVjdGVkKSA+Ci5hbm5vdGF0aW9uLWxhYmVsCi8qLmFubm90YXRpb24tZWRnZSovIHsKICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgfQoKICAgIC8qIC0tLSBPcCBOb2RlIC0tLSAqLwoKICAgIC5vcCA+IC5ub2Rlc2hhcGUgPiAubm9kZWNvbG9ydGFyZ2V0LAogICAgLm9wID4gLmFubm90YXRpb24tbm9kZSA+IC5ub2RlY29sb3J0YXJnZXQgewogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIGZpbGw6ICNmZmY7CiAgICAgIHN0cm9rZTogI2NjYzsKICAgIH0KCiAgICAub3Auc2VsZWN0ZWQgPiAubm9kZXNoYXBlID4gLm5vZGVjb2xvcnRhcmdldCwKICAgIC5vcC5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiAubm9kZWNvbG9ydGFyZ2V0IHsKICAgICAgc3Ryb2tlOiByZWQ7CiAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgIH0KCiAgICAub3AuaGlnaGxpZ2h0ZWQgPiAubm9kZXNoYXBlID4gLm5vZGVjb2xvcnRhcmdldCwKICAgIC5vcC5oaWdobGlnaHRlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiAubm9kZWNvbG9ydGFyZ2V0IHsKICAgICAgc3Ryb2tlLXdpZHRoOiAyOwogICAgfQoKICAgIC8qIC0tLSBTZXJpZXMgTm9kZSAtLS0gKi8KCiAgICAvKiBCeSBkZWZhdWx0LCBkb24ndCBzaG93IHRoZSBzZXJpZXMgYmFja2dyb3VuZCA8cmVjdD4uICovCiAgICAuc2VyaWVzID4gLm5vZGVzaGFwZSA+IHJlY3QgewogICAgICBmaWxsOiBoc2woMCwgMCUsIDcwJSk7CiAgICAgIGZpbGwtb3BhY2l0eTogMDsKICAgICAgc3Ryb2tlLWRhc2hhcnJheTogNSwgNTsKICAgICAgc3Ryb2tlLW9wYWNpdHk6IDA7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIH0KCiAgICAvKiBPbmNlIGV4cGFuZGVkLCBzaG93IHRoZSBzZXJpZXMgYmFja2dyb3VuZCA8cmVjdD4gYW5kIGhpZGUgdGhlIDx1c2U+LiAqLwogICAgLnNlcmllcy5leHBhbmRlZCA+IC5ub2Rlc2hhcGUgPiByZWN0IHsKICAgICAgZmlsbC1vcGFjaXR5OiAwLjE1OwogICAgICBzdHJva2U6IGhzbCgwLCAwJSwgNzAlKTsKICAgICAgc3Ryb2tlLW9wYWNpdHk6IDE7CiAgICB9CiAgICAuc2VyaWVzLmV4cGFuZGVkID4gLm5vZGVzaGFwZSA+IHVzZSB7CiAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgIH0KCiAgICAvKioKICogVE9ETzogU2ltcGxpZnkgdGhpcyBieSBhcHBseWluZyBhIHN0YWJsZSBjbGFzcyBuYW1lIHRvIGFsbCA8Zz4KICogZWxlbWVudHMgdGhhdCBjdXJyZW50bHkgaGF2ZSBlaXRoZXIgdGhlIG5vZGVzaGFwZSBvciBhbm5vdGF0aW9uLW5vZGUgY2xhc3Nlcy4KICovCiAgICAuc2VyaWVzID4gLm5vZGVzaGFwZSA+IHVzZSwKICAgIC5zZXJpZXMgPiAuYW5ub3RhdGlvbi1ub2RlID4gdXNlIHsKICAgICAgc3Ryb2tlOiAjY2NjOwogICAgfQogICAgLnNlcmllcy5oaWdobGlnaHRlZCA+IC5ub2Rlc2hhcGUgPiB1c2UsCiAgICAuc2VyaWVzLmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IHVzZSB7CiAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgIH0KICAgIC5zZXJpZXMuc2VsZWN0ZWQgPiAubm9kZXNoYXBlID4gdXNlLAogICAgLnNlcmllcy5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiB1c2UgewogICAgICBzdHJva2U6IHJlZDsKICAgICAgc3Ryb2tlLXdpZHRoOiAyOwogICAgfQoKICAgIC5zZXJpZXMuc2VsZWN0ZWQgPiAubm9kZXNoYXBlID4gcmVjdCB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CgogICAgLmFubm90YXRpb24uc2VyaWVzLnNlbGVjdGVkID4gLmFubm90YXRpb24tbm9kZSA+IHVzZSB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CgogICAgLyogLS0tIEJyaWRnZSBOb2RlIC0tLSAqLwogICAgLmJyaWRnZSA+IC5ub2Rlc2hhcGUgPiByZWN0IHsKICAgICAgc3Ryb2tlOiAjZjBmOwogICAgICBvcGFjaXR5OiAwLjI7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgLyogLS0tIFN0cnVjdHVyYWwgRWxlbWVudHMgLS0tICovCiAgICAuZWRnZSA+IHBhdGguZWRnZWxpbmUuc3RydWN0dXJhbCB7CiAgICAgIHN0cm9rZTogI2YwZjsKICAgICAgb3BhY2l0eTogMC4yOwogICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC8qIFJlZmVyZW5jZSBFZGdlICovCiAgICAuZWRnZSA+IHBhdGguZWRnZWxpbmUucmVmZXJlbmNlZWRnZSB7CiAgICAgIHN0cm9rZTogI2ZmYjc0ZDsKICAgICAgb3BhY2l0eTogMTsKICAgIH0KCiAgICAvKiAtLS0gU2VyaWVzIE5vZGVzIC0tLSAqLwoKICAgIC8qIEhpZGUgdGhlIHJlY3QgZm9yIGEgc2VyaWVzJyBhbm5vdGF0aW9uLiAqLwogICAgLnNlcmllcyA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAvKiAtLS0gTm9kZSBsYWJlbCAtLS0gKi8KCiAgICAubm9kZSB7CiAgICAgIC8qIFByb3ZpZGUgYSBoaW50IHRvIGJyb3dzZXJzIHRvIGF2b2lkIHVzaW5nIHRoZWlyIHN0YXRpYyByYXN0ZXJpemF0aW9uCiAgICAgIGF0IGluaXRpYWwgc2NhbGUsIHdoaWNoIGxvb2tzIHZlcnkgcGl4ZWxhdGVkIG9uIENocm9taXVtIHdoZW4gem9vbWVkIGluLgogICAgICBOb3RlIHRoYXQgd2UgaW50ZW50aW9uYWxseSBkbyAqbm90KiB1c2UgJ3dpbGwtY2hhbmdlOiB0cmFuc2Zvcm0nIGFuZAogICAgICAndHJhbnNsYXRlWigwKSBoZXJlLCB3aGljaCBpbnRyb2R1Y2UgYmx1cnJpbmVzcyBvbiBGaXJlZm94LgogICAgICBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvaXNzdWVzLzQ3NDQgKi8KICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDFweCk7CiAgICB9CgogICAgLm5vZGUgPiB0ZXh0Lm5vZGVsYWJlbCB7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgZmlsbDogIzQ0NDsKICAgIH0KCiAgICAubWV0YS5leHBhbmRlZCA+IHRleHQubm9kZWxhYmVsIHsKICAgICAgZm9udC1zaXplOiA5cHg7CiAgICB9CgogICAgLnNlcmllcyA+IHRleHQubm9kZWxhYmVsIHsKICAgICAgZm9udC1zaXplOiA4cHg7CiAgICB9CgogICAgLm9wID4gdGV4dC5ub2RlbGFiZWwgewogICAgICBmb250LXNpemU6IDZweDsKICAgIH0KCiAgICAuYnJpZGdlID4gdGV4dC5ub2RlbGFiZWwgewogICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC5ub2RlLm1ldGEuZXhwYW5kZWQgPiB0ZXh0Lm5vZGVsYWJlbCB7CiAgICAgIGN1cnNvcjogbm9ybWFsOwogICAgfQoKICAgIC5hbm5vdGF0aW9uLm1ldGEuaGlnaGxpZ2h0ZWQgPiB0ZXh0LmFubm90YXRpb24tbGFiZWwgewogICAgICBmaWxsOiAjNTBhM2Y3OwogICAgfQoKICAgIC5hbm5vdGF0aW9uLm1ldGEuc2VsZWN0ZWQgPiB0ZXh0LmFubm90YXRpb24tbGFiZWwgewogICAgICBmaWxsOiAjNDI4NWY0OwogICAgfQoKICAgIC8qIC0tLSBBbm5vdGF0aW9uIC0tLSAqLwoKICAgIC8qIG9ubHkgYXBwbGllZCBmb3IgYW5ub3RhdGlvbnMgdGhhdCBhcmUgbm90IHN1bW1hcnkgb3IgY29uc3RhbnQuCiguc3VtbWFyeSwgLmNvbnN0YW50IGdldHMgb3ZlcnJpZGRlbiBiZWxvdykgKi8KICAgIC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tbm9kZSA+ICogewogICAgICBzdHJva2Utd2lkdGg6IDAuNTsKICAgICAgc3Ryb2tlLWRhc2hhcnJheTogMSwgMTsKICAgIH0KCiAgICAuYW5ub3RhdGlvbi5zdW1tYXJ5ID4gLmFubm90YXRpb24tbm9kZSA+ICosCiAgICAuYW5ub3RhdGlvbi5jb25zdGFudCA+IC5hbm5vdGF0aW9uLW5vZGUgPiAqIHsKICAgICAgc3Ryb2tlLXdpZHRoOiAxOwogICAgICBzdHJva2UtZGFzaGFycmF5OiBub25lOwogICAgfQoKICAgIC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tZWRnZSB7CiAgICAgIGZpbGw6IG5vbmU7CiAgICAgIHN0cm9rZTogI2FhYTsKICAgICAgc3Ryb2tlLXdpZHRoOiAwLjU7CiAgICAgIG1hcmtlci1lbmQ6IHVybCgjYW5ub3RhdGlvbi1hcnJvd2hlYWQpOwogICAgfQoKICAgIC5mYWRlZCAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UgewogICAgICBtYXJrZXItZW5kOiB1cmwoI2Fubm90YXRpb24tYXJyb3doZWFkLWZhZGVkKTsKICAgIH0KCiAgICAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UucmVmbGluZSB7CiAgICAgIG1hcmtlci1zdGFydDogdXJsKCNyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQpOwogICAgfQoKICAgIC5mYWRlZCAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UucmVmbGluZSB7CiAgICAgIG1hcmtlci1zdGFydDogdXJsKCNyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQpOwogICAgfQoKICAgIC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tY29udHJvbC1lZGdlIHsKICAgICAgc3Ryb2tlLWRhc2hhcnJheTogMSwgMTsKICAgIH0KCiAgICAjYW5ub3RhdGlvbi1hcnJvd2hlYWQgewogICAgICBmaWxsOiAjYWFhOwogICAgfQoKICAgICNhbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCB7CiAgICAgIGZpbGw6ICNlMGQ0YjM7CiAgICB9CgogICAgI3JlZi1hbm5vdGF0aW9uLWFycm93aGVhZCB7CiAgICAgIGZpbGw6ICNhYWE7CiAgICB9CgogICAgI3JlZi1hbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCB7CiAgICAgIGZpbGw6ICNlMGQ0YjM7CiAgICB9CgogICAgLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1sYWJlbCB7CiAgICAgIGZvbnQtc2l6ZTogNXB4OwogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB9CiAgICAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWxhYmVsLmFubm90YXRpb24tZWxsaXBzaXMgewogICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICB9CgogICAgLyogSGlkZSBhbm5vdGF0aW9ucyBvbiBleHBhbmRlZCBtZXRhIG5vZGVzIHNpbmNlIHRoZXkncmUgcmVkdW5kYW50LiAqLwogICAgLmV4cGFuZGVkID4gLmluLWFubm90YXRpb25zLAogICAgLmV4cGFuZGVkID4gLm91dC1hbm5vdGF0aW9ucyB7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgLyogLS0tIEFubm90YXRpb246IENvbnN0YW50IC0tLSAqLwoKICAgIC5jb25zdGFudCA+IC5hbm5vdGF0aW9uLW5vZGUgPiBlbGxpcHNlIHsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBmaWxsOiB3aGl0ZTsKICAgICAgc3Ryb2tlOiAjODQ4NDg0OwogICAgfQoKICAgIC5jb25zdGFudC5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiBlbGxpcHNlIHsKICAgICAgZmlsbDogd2hpdGU7CiAgICAgIHN0cm9rZTogcmVkOwogICAgfQoKICAgIC5jb25zdGFudC5oaWdobGlnaHRlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiBlbGxpcHNlIHsKICAgICAgc3Ryb2tlLXdpZHRoOiAxLjU7CiAgICB9CgogICAgLyogLS0tIEFubm90YXRpb246IFN1bW1hcnkgLS0tICovCgogICAgLnN1bW1hcnkgPiAuYW5ub3RhdGlvbi1ub2RlID4gZWxsaXBzZSB7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgZmlsbDogI2RiNDQzNzsKICAgICAgc3Ryb2tlOiAjZGI0NDM3OwogICAgfQoKICAgIC5zdW1tYXJ5LnNlbGVjdGVkID4gLmFubm90YXRpb24tbm9kZSA+IGVsbGlwc2UgewogICAgICBmaWxsOiAjYTUyNzE0OwogICAgICBzdHJva2U6ICNhNTI3MTQ7CiAgICB9CgogICAgLnN1bW1hcnkuaGlnaGxpZ2h0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gZWxsaXBzZSB7CiAgICAgIHN0cm9rZS13aWR0aDogMS41OwogICAgfQoKICAgIC8qIC0tLSBFZGdlIC0tLSAqLwoKICAgIC5lZGdlID4gcGF0aC5lZGdlbGluZSB7CiAgICAgIGZpbGw6IG5vbmU7CiAgICAgIHN0cm9rZTogI2JiYjsKICAgICAgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kOwogICAgICBzdHJva2Utd2lkdGg6IDAuNzU7CiAgICB9CgogICAgLmVkZ2UgLnNlbGVjdGFibGVlZGdlIHsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgfQoKICAgIC5zZWxlY3RlZGVkZ2UgPiBwYXRoLmVkZ2VsaW5lIHsKICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICBzdHJva2U6ICNmMDA7CiAgICB9CgogICAgLmVkZ2Uuc2VsZWN0ZWRlZGdlIHRleHQgewogICAgICBmaWxsOiAjMDAwOwogICAgfQoKICAgIC8qIExhYmVscyBzaG93aW5nIHRlbnNvciBzaGFwZXMgb24gZWRnZXMgKi8KICAgIC5lZGdlID4gdGV4dCB7CiAgICAgIGZvbnQtc2l6ZTogMy41cHg7CiAgICAgIGZpbGw6ICM2NjY7CiAgICB9CgogICAgLmRhdGFmbG93LWFycm93aGVhZCB7CiAgICAgIGZpbGw6ICNiYmI7CiAgICB9CgogICAgLnJlZmVyZW5jZS1hcnJvd2hlYWQgewogICAgICBmaWxsOiAjZmZiNzRkOwogICAgfQoKICAgIC5zZWxlY3RlZC1hcnJvd2hlYWQgewogICAgICBmaWxsOiAjZjAwOwogICAgfQoKICAgIC5lZGdlIC5jb250cm9sLWRlcCB7CiAgICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDI7CiAgICB9CgogICAgLyogLS0tIEdyb3VwIG5vZGUgZXhwYW5kL2NvbGxhcHNlIGJ1dHRvbiAtLS0gKi8KCiAgICAvKiBIaWRlcyBleHBhbmQvY29sbGFwc2UgYnV0dG9ucyB3aGVuIGEgbm9kZSBpc24ndCBleHBhbmRlZCBvciBoaWdobGlnaHRlZC4gVXNpbmcKICAgaW5jcmVkaWJseSBzbWFsbCBvcGFjaXR5IHNvIHRoYXQgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgPGc+IHBhcmVudCBzdGlsbCB0YWtlcwogICB0aGlzIGNvbnRhaW5lciBpbnRvIGFjY291bnQgZXZlbiB3aGVuIGl0IGlzbid0IHZpc2libGUgKi8KICAgIC5ub2RlOm5vdCguaGlnaGxpZ2h0ZWQpOm5vdCguZXhwYW5kZWQpID4gLm5vZGVzaGFwZSA+IC5idXR0b25jb250YWluZXIgewogICAgICBvcGFjaXR5OiAwLjAxOwogICAgfQogICAgLm5vZGUuaGlnaGxpZ2h0ZWQgPiAubm9kZXNoYXBlID4gLmJ1dHRvbmNvbnRhaW5lciB7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIH0KICAgIC5idXR0b25jaXJjbGUgewogICAgICBmaWxsOiAjZTc4MTFkOwogICAgfQogICAgLmJ1dHRvbmNpcmNsZTpob3ZlciB7CiAgICAgIGZpbGw6ICNiOTY3MTc7CiAgICB9CiAgICAuZXhwYW5kYnV0dG9uLAogICAgLmNvbGxhcHNlYnV0dG9uIHsKICAgICAgc3Ryb2tlOiAjNDQ0OwogICAgfQogICAgLyogRG8gbm90IGxldCB0aGUgcGF0aCBlbGVtZW50cyBpbiB0aGUgYnV0dG9uIHRha2UgcG9pbnRlciBmb2N1cyAqLwogICAgLm5vZGUgPiAubm9kZXNoYXBlID4gLmJ1dHRvbmNvbnRhaW5lciA+IC5leHBhbmRidXR0b24sCiAgICAubm9kZSA+IC5ub2Rlc2hhcGUgPiAuYnV0dG9uY29udGFpbmVyID4gLmNvbGxhcHNlYnV0dG9uIHsKICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB9CiAgICAvKiBPbmx5IHNob3cgdGhlIGV4cGFuZCBidXR0b24gd2hlbiBhIG5vZGUgaXMgY29sbGFwc2VkIGFuZCBvbmx5IHNob3cgdGhlCiAgIGNvbGxhcHNlIGJ1dHRvbiB3aGVuIGEgbm9kZSBpcyBleHBhbmRlZC4gKi8KICAgIC5ub2RlLmV4cGFuZGVkID4gLm5vZGVzaGFwZSA+IC5idXR0b25jb250YWluZXIgPiAuZXhwYW5kYnV0dG9uIHsKICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KICAgIC5ub2RlOm5vdCguZXhwYW5kZWQpID4gLm5vZGVzaGFwZSA+IC5idXR0b25jb250YWluZXIgPiAuY29sbGFwc2VidXR0b24gewogICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC5oZWFsdGgtcGlsbC1zdGF0cyB7CiAgICAgIGZvbnQtc2l6ZTogNHB4OwogICAgICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogICAgfQoKICAgIC5oZWFsdGgtcGlsbCByZWN0IHsKICAgICAgZmlsdGVyOiB1cmwoI2hlYWx0aC1waWxsLXNoYWRvdyk7CiAgICAgIHJ4OiAzOwogICAgICByeTogMzsKICAgIH0KCiAgICAudGl0bGVDb250YWluZXIgewogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIHRvcDogMjBweDsKICAgIH0KCiAgICAudGl0bGUsCiAgICAuYXV4VGl0bGUsCiAgICAuZnVuY3Rpb25MaWJyYXJ5VGl0bGUgewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB9CgogICAgI21pbmltYXAgewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHJpZ2h0OiAyMHB4OwogICAgICBib3R0b206IDIwcHg7CiAgICB9CgogICAgLmNvbnRleHQtbWVudSB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2UyZTJlMjsKICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIG1pbi13aWR0aDogMTUwcHg7CiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNkNGQ0ZDQ7CiAgICB9CgogICAgLmNvbnRleHQtbWVudSB1bCB7CiAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKICAgICAgbWFyZ2luOiAwOwogICAgICBwYWRkaW5nOiAwOwogICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICB9CgogICAgLmNvbnRleHQtbWVudSB1bCBsaSB7CiAgICAgIHBhZGRpbmc6IDRweCAxNnB4OwogICAgfQoKICAgIC5jb250ZXh0LW1lbnUgdWwgbGk6aG92ZXIgewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjM5MTNlOwogICAgICBjb2xvcjogd2hpdGU7CiAgICB9CiAgPC9zdHlsZT4KICA8ZGl2IGNsYXNzPSJ0aXRsZUNvbnRhaW5lciI+CiAgICA8ZGl2IGlkPSJ0aXRsZSIgY2xhc3M9InRpdGxlIj5NYWluIEdyYXBoPC9kaXY+CiAgICA8ZGl2IGlkPSJhdXhUaXRsZSIgY2xhc3M9ImF1eFRpdGxlIj5BdXhpbGlhcnkgTm9kZXM8L2Rpdj4KICAgIDxkaXYgaWQ9ImZ1bmN0aW9uTGlicmFyeVRpdGxlIiBjbGFzcz0iZnVuY3Rpb25MaWJyYXJ5VGl0bGUiPkZ1bmN0aW9uczwvZGl2PgogIDwvZGl2PgogIDxzdmcgaWQ9InN2ZyI+CiAgICA8ZGVmcz4KICAgICAgPCEtLSBBcnJvdyBoZWFkcyBmb3IgcmVmZXJlbmNlIGVkZ2UgcGF0aHMgb2YgZGlmZmVyZW50IHByZWRlZmluZWQgc2l6ZXMgcGVyIGNvbG9yLiAtLT4KICAgICAgPHBhdGgKICAgICAgICBpZD0icmVmZXJlbmNlLWFycm93aGVhZC1wYXRoIgogICAgICAgIGQ9Ik0gMCwwIEwgMTAsNSBMIDAsMTAgQyAzLDcgMywzIDAsMCIKICAgICAgPjwvcGF0aD4KICAgICAgPG1hcmtlcgogICAgICAgIGNsYXNzPSJyZWZlcmVuY2UtYXJyb3doZWFkIgogICAgICAgIGlkPSJyZWZlcmVuY2UtYXJyb3doZWFkLXNtYWxsIgogICAgICAgIHZpZXdCb3g9IjAgMCAxMCAxMCIKICAgICAgICBtYXJrZXJXaWR0aD0iNSIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjUiCiAgICAgICAgcmVmWD0iMiIKICAgICAgICByZWZZPSI1IgogICAgICAgIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIgogICAgICAgIG1hcmtlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI3JlZmVyZW5jZS1hcnJvd2hlYWQtcGF0aCI+PC91c2U+CiAgICAgIDwvbWFya2VyPgogICAgICA8bWFya2VyCiAgICAgICAgY2xhc3M9InJlZmVyZW5jZS1hcnJvd2hlYWQiCiAgICAgICAgaWQ9InJlZmVyZW5jZS1hcnJvd2hlYWQtbWVkaXVtIgogICAgICAgIHZpZXdCb3g9IjAgMCAxMCAxMCIKICAgICAgICBtYXJrZXJXaWR0aD0iMTMiCiAgICAgICAgbWFya2VySGVpZ2h0PSIxMyIKICAgICAgICByZWZYPSIyIgogICAgICAgIHJlZlk9IjUiCiAgICAgICAgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiCiAgICAgICAgbWFya2VyVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICA+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjcmVmZXJlbmNlLWFycm93aGVhZC1wYXRoIj48L3VzZT4KICAgICAgPC9tYXJrZXI+CiAgICAgIDxtYXJrZXIKICAgICAgICBjbGFzcz0icmVmZXJlbmNlLWFycm93aGVhZCIKICAgICAgICBpZD0icmVmZXJlbmNlLWFycm93aGVhZC1sYXJnZSIKICAgICAgICB2aWV3Qm94PSIwIDAgMTAgMTAiCiAgICAgICAgbWFya2VyV2lkdGg9IjE2IgogICAgICAgIG1hcmtlckhlaWdodD0iMTYiCiAgICAgICAgcmVmWD0iMiIKICAgICAgICByZWZZPSI1IgogICAgICAgIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIgogICAgICAgIG1hcmtlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI3JlZmVyZW5jZS1hcnJvd2hlYWQtcGF0aCI+PC91c2U+CiAgICAgIDwvbWFya2VyPgogICAgICA8bWFya2VyCiAgICAgICAgY2xhc3M9InJlZmVyZW5jZS1hcnJvd2hlYWQiCiAgICAgICAgaWQ9InJlZmVyZW5jZS1hcnJvd2hlYWQteGxhcmdlIgogICAgICAgIHZpZXdCb3g9IjAgMCAxMCAxMCIKICAgICAgICBtYXJrZXJXaWR0aD0iMjAiCiAgICAgICAgbWFya2VySGVpZ2h0PSIyMCIKICAgICAgICByZWZYPSIyIgogICAgICAgIHJlZlk9IjUiCiAgICAgICAgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiCiAgICAgICAgbWFya2VyVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICA+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjcmVmZXJlbmNlLWFycm93aGVhZC1wYXRoIj48L3VzZT4KICAgICAgPC9tYXJrZXI+CgogICAgICA8IS0tIEFycm93IGhlYWRzIGZvciBkYXRhZmxvdyBlZGdlIHBhdGhzIG9mIGRpZmZlcmVudCBwcmVkZWZpbmVkIHNpemVzIHBlciBjb2xvci4gLS0+CiAgICAgIDxwYXRoCiAgICAgICAgaWQ9ImRhdGFmbG93LWFycm93aGVhZC1wYXRoIgogICAgICAgIGQ9Ik0gMCwwIEwgMTAsNSBMIDAsMTAgQyAzLDcgMywzIDAsMCIKICAgICAgPjwvcGF0aD4KICAgICAgPG1hcmtlcgogICAgICAgIGNsYXNzPSJkYXRhZmxvdy1hcnJvd2hlYWQiCiAgICAgICAgaWQ9ImRhdGFmbG93LWFycm93aGVhZC1zbWFsbCIKICAgICAgICB2aWV3Qm94PSIwIDAgMTAgMTAiCiAgICAgICAgbWFya2VyV2lkdGg9IjUiCiAgICAgICAgbWFya2VySGVpZ2h0PSI1IgogICAgICAgIHJlZlg9IjIiCiAgICAgICAgcmVmWT0iNSIKICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNkYXRhZmxvdy1hcnJvd2hlYWQtcGF0aCI+PC91c2U+CiAgICAgIDwvbWFya2VyPgogICAgICA8bWFya2VyCiAgICAgICAgY2xhc3M9ImRhdGFmbG93LWFycm93aGVhZCIKICAgICAgICBpZD0iZGF0YWZsb3ctYXJyb3doZWFkLW1lZGl1bSIKICAgICAgICB2aWV3Qm94PSIwIDAgMTAgMTAiCiAgICAgICAgbWFya2VyV2lkdGg9IjEzIgogICAgICAgIG1hcmtlckhlaWdodD0iMTMiCiAgICAgICAgcmVmWD0iMiIKICAgICAgICByZWZZPSI1IgogICAgICAgIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIgogICAgICAgIG1hcmtlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI2RhdGFmbG93LWFycm93aGVhZC1wYXRoIj48L3VzZT4KICAgICAgPC9tYXJrZXI+CiAgICAgIDxtYXJrZXIKICAgICAgICBjbGFzcz0iZGF0YWZsb3ctYXJyb3doZWFkIgogICAgICAgIGlkPSJkYXRhZmxvdy1hcnJvd2hlYWQtbGFyZ2UiCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSIxNiIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjE2IgogICAgICAgIHJlZlg9IjIiCiAgICAgICAgcmVmWT0iNSIKICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNkYXRhZmxvdy1hcnJvd2hlYWQtcGF0aCI+PC91c2U+CiAgICAgIDwvbWFya2VyPgogICAgICA8bWFya2VyCiAgICAgICAgY2xhc3M9ImRhdGFmbG93LWFycm93aGVhZCIKICAgICAgICBpZD0iZGF0YWZsb3ctYXJyb3doZWFkLXhsYXJnZSIKICAgICAgICB2aWV3Qm94PSIwIDAgMTAgMTAiCiAgICAgICAgbWFya2VyV2lkdGg9IjIwIgogICAgICAgIG1hcmtlckhlaWdodD0iMjAiCiAgICAgICAgcmVmWD0iMiIKICAgICAgICByZWZZPSI1IgogICAgICAgIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIgogICAgICAgIG1hcmtlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI2RhdGFmbG93LWFycm93aGVhZC1wYXRoIj48L3VzZT4KICAgICAgPC9tYXJrZXI+CgogICAgICA8IS0tIEFycm93IGhlYWQgZm9yIGFubm90YXRpb24gZWRnZSBwYXRocy4gLS0+CiAgICAgIDxtYXJrZXIKICAgICAgICBpZD0iYW5ub3RhdGlvbi1hcnJvd2hlYWQiCiAgICAgICAgbWFya2VyV2lkdGg9IjUiCiAgICAgICAgbWFya2VySGVpZ2h0PSI1IgogICAgICAgIHJlZlg9IjUiCiAgICAgICAgcmVmWT0iMi41IgogICAgICAgIG9yaWVudD0iYXV0byIKICAgICAgPgogICAgICAgIDxwYXRoIGQ9Ik0gMCwwIEwgNSwyLjUgTCAwLDUgTCAwLDAiPjwvcGF0aD4KICAgICAgPC9tYXJrZXI+CiAgICAgIDxtYXJrZXIKICAgICAgICBpZD0iYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQiCiAgICAgICAgbWFya2VyV2lkdGg9IjUiCiAgICAgICAgbWFya2VySGVpZ2h0PSI1IgogICAgICAgIHJlZlg9IjUiCiAgICAgICAgcmVmWT0iMi41IgogICAgICAgIG9yaWVudD0iYXV0byIKICAgICAgPgogICAgICAgIDxwYXRoIGQ9Ik0gMCwwIEwgNSwyLjUgTCAwLDUgTCAwLDAiPjwvcGF0aD4KICAgICAgPC9tYXJrZXI+CiAgICAgIDxtYXJrZXIKICAgICAgICBpZD0icmVmLWFubm90YXRpb24tYXJyb3doZWFkIgogICAgICAgIG1hcmtlcldpZHRoPSI1IgogICAgICAgIG1hcmtlckhlaWdodD0iNSIKICAgICAgICByZWZYPSIwIgogICAgICAgIHJlZlk9IjIuNSIKICAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgID4KICAgICAgICA8cGF0aCBkPSJNIDUsMCBMIDAsMi41IEwgNSw1IEwgNSwwIj48L3BhdGg+CiAgICAgIDwvbWFya2VyPgogICAgICA8bWFya2VyCiAgICAgICAgaWQ9InJlZi1hbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCIKICAgICAgICBtYXJrZXJXaWR0aD0iNSIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjUiCiAgICAgICAgcmVmWD0iMCIKICAgICAgICByZWZZPSIyLjUiCiAgICAgICAgb3JpZW50PSJhdXRvIgogICAgICA+CiAgICAgICAgPHBhdGggZD0iTSA1LDAgTCAwLDIuNSBMIDUsNSBMIDUsMCI+PC9wYXRoPgogICAgICA8L21hcmtlcj4KICAgICAgPCEtLSBUZW1wbGF0ZSBmb3IgYW4gT3Agbm9kZSBlbGxpcHNlLiAtLT4KICAgICAgPGVsbGlwc2UKICAgICAgICBpZD0ib3Atbm9kZS1zdGFtcCIKICAgICAgICByeD0iNy41IgogICAgICAgIHJ5PSIzIgogICAgICAgIHN0cm9rZT0iaW5oZXJpdCIKICAgICAgICBmaWxsPSJpbmhlcml0IgogICAgICA+PC9lbGxpcHNlPgogICAgICA8IS0tIFRlbXBsYXRlIGZvciBhbiBPcCBub2RlIGFubm90YXRpb24gZWxsaXBzZSAoc21hbGxlcikuIC0tPgogICAgICA8ZWxsaXBzZQogICAgICAgIGlkPSJvcC1ub2RlLWFubm90YXRpb24tc3RhbXAiCiAgICAgICAgcng9IjUiCiAgICAgICAgcnk9IjIiCiAgICAgICAgc3Ryb2tlPSJpbmhlcml0IgogICAgICAgIGZpbGw9ImluaGVyaXQiCiAgICAgID48L2VsbGlwc2U+CiAgICAgIDwhLS0gVmVydGljYWxseSBzdGFja2VkIHNlcmllcyBvZiBPcCBub2RlcyB3aGVuIHVuZXhwYW5kZWQuIC0tPgogICAgICA8ZyBpZD0ib3Atc2VyaWVzLXZlcnRpY2FsLXN0YW1wIj4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSI4IiB5PSI5Ij48L3VzZT4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSI4IiB5PSI2Ij48L3VzZT4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSI4IiB5PSIzIj48L3VzZT4KICAgICAgPC9nPgogICAgICA8IS0tIEhvcml6b250YWxseSBzdGFja2VkIHNlcmllcyBvZiBPcCBub2RlcyB3aGVuIHVuZXhwYW5kZWQuIC0tPgogICAgICA8ZyBpZD0ib3Atc2VyaWVzLWhvcml6b250YWwtc3RhbXAiPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjE2IiB5PSI0Ij48L3VzZT4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSIxMiIgeT0iNCI+PC91c2U+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iNCI+PC91c2U+CiAgICAgIDwvZz4KICAgICAgPCEtLSBIb3Jpem9udGFsbHkgc3RhY2tlZCBzZXJpZXMgb2YgT3Agbm9kZXMgZm9yIGFubm90YXRpb24uIC0tPgogICAgICA8ZyBpZD0ib3Atc2VyaWVzLWFubm90YXRpb24tc3RhbXAiPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtYW5ub3RhdGlvbi1zdGFtcCIgeD0iOSIgeT0iMiI+PC91c2U+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1hbm5vdGF0aW9uLXN0YW1wIiB4PSI3IiB5PSIyIj48L3VzZT4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLWFubm90YXRpb24tc3RhbXAiIHg9IjUiIHk9IjIiPjwvdXNlPgogICAgICA8L2c+CiAgICAgIDxzdmcKICAgICAgICBpZD0ic3VtbWFyeS1pY29uIgogICAgICAgIGZpbGw9IiM4NDg0ODQiCiAgICAgICAgaGVpZ2h0PSIxMiIKICAgICAgICB2aWV3Qm94PSIwIDAgMjQgMjQiCiAgICAgICAgd2lkdGg9IjEyIgogICAgICA+CiAgICAgICAgPHBhdGgKICAgICAgICAgIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnpNOSAxN0g3di03aDJ2N3ptNCAwaC0yVjdoMnYxMHptNCAwaC0ydi00aDJ2NHoiCiAgICAgICAgPjwvcGF0aD4KICAgICAgPC9zdmc+CgogICAgICA8IS0tIEhhdGNoIHBhdHRlcm5zIGZvciBmYWRlZCBvdXQgbm9kZXMuIC0tPgogICAgICA8cGF0dGVybgogICAgICAgIGlkPSJyZWN0SGF0Y2giCiAgICAgICAgcGF0dGVyblRyYW5zZm9ybT0icm90YXRlKDQ1IDAgMCkiCiAgICAgICAgd2lkdGg9IjUiCiAgICAgICAgaGVpZ2h0PSI1IgogICAgICAgIHBhdHRlcm5Vbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8bGluZSB4MT0iMCIgeTE9IjAiIHgyPSIwIiB5Mj0iNSIgc3R5bGU9InN0cm9rZS13aWR0aDogMSI+PC9saW5lPgogICAgICA8L3BhdHRlcm4+CiAgICAgIDxwYXR0ZXJuCiAgICAgICAgaWQ9ImVsbGlwc2VIYXRjaCIKICAgICAgICBwYXR0ZXJuVHJhbnNmb3JtPSJyb3RhdGUoNDUgMCAwKSIKICAgICAgICB3aWR0aD0iMiIKICAgICAgICBoZWlnaHQ9IjIiCiAgICAgICAgcGF0dGVyblVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgPgogICAgICAgIDxsaW5lIHgxPSIwIiB5MT0iMCIgeDI9IjAiIHkyPSIyIiBzdHlsZT0ic3Ryb2tlLXdpZHRoOiAxIj48L2xpbmU+CiAgICAgIDwvcGF0dGVybj4KCiAgICAgIDwhLS0gQSBzaGFkb3cgZm9yIGhlYWx0aCBwaWxscy4gLS0+CiAgICAgIDxmaWx0ZXIKICAgICAgICBpZD0iaGVhbHRoLXBpbGwtc2hhZG93IgogICAgICAgIHg9Ii00MCUiCiAgICAgICAgeT0iLTQwJSIKICAgICAgICB3aWR0aD0iMTgwJSIKICAgICAgICBoZWlnaHQ9IjE4MCUiCiAgICAgID4KICAgICAgICA8ZmVHYXVzc2lhbkJsdXIgaW49IlNvdXJjZUFscGhhIiBzdGREZXZpYXRpb249IjAuOCI+PC9mZUdhdXNzaWFuQmx1cj4KICAgICAgICA8ZmVPZmZzZXQgZHg9IjAiIGR5PSIwIiByZXN1bHQ9Im9mZnNldGJsdXIiPjwvZmVPZmZzZXQ+CiAgICAgICAgPGZlRmxvb2QgZmxvb2QtY29sb3I9IiMwMDAwMDAiPjwvZmVGbG9vZD4KICAgICAgICA8ZmVDb21wb3NpdGUgaW4yPSJvZmZzZXRibHVyIiBvcGVyYXRvcj0iaW4iPjwvZmVDb21wb3NpdGU+CiAgICAgICAgPGZlTWVyZ2U+CiAgICAgICAgICA8ZmVNZXJnZU5vZGU+PC9mZU1lcmdlTm9kZT4KICAgICAgICAgIDxmZU1lcmdlTm9kZSBpbj0iU291cmNlR3JhcGhpYyI+PC9mZU1lcmdlTm9kZT4KICAgICAgICA8L2ZlTWVyZ2U+CiAgICAgIDwvZmlsdGVyPgogICAgPC9kZWZzPgogICAgPCEtLSBNYWtlIGEgbGFyZ2UgcmVjdGFuZ2xlIHRoYXQgZmlsbHMgdGhlIHN2ZyBzcGFjZSBzbyB0aGF0CiAgem9vbSBldmVudHMgZ2V0IGNhcHR1cmVkIG9uIHNhZmFyaSAtLT4KICAgIDxyZWN0IGZpbGw9IndoaXRlIiB3aWR0aD0iMTAwMDAiIGhlaWdodD0iMTAwMDAiPjwvcmVjdD4KICAgIDxnIGlkPSJyb290Ij48L2c+CiAgPC9zdmc+CiAgPHRmLWdyYXBoLW1pbmltYXAgaWQ9Im1pbmltYXAiPjwvdGYtZ3JhcGgtbWluaW1hcD4KICA8ZGl2IGlkPSJjb250ZXh0TWVudSIgY2xhc3M9ImNvbnRleHQtbWVudSI+PC9kaXY+CmA7dmFyIExyPWNsYXNzIGV4dGVuZHMgR3QoX28obXQpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fem9vbWVkPSExLHRoaXMuX3pvb21TdGFydENvb3Jkcz1udWxsLHRoaXMuX3pvb21UcmFuc2Zvcm09bnVsbCx0aGlzLl9tYXhab29tRGlzdGFuY2VGb3JDbGljaz0yMCx0aGlzLl9ub2RlR3JvdXBJbmRleD17fSx0aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleD17fSx0aGlzLl9lZGdlR3JvdXBJbmRleD17fSx0aGlzLm1heE1ldGFub2RlTGFiZWxMZW5ndGhGb250U2l6ZT05LHRoaXMubWluTWV0YW5vZGVMYWJlbExlbmd0aEZvbnRTaXplPTYsdGhpcy5tYXhNZXRhbm9kZUxhYmVsTGVuZ3RoTGFyZ2VGb250PTExLHRoaXMubWF4TWV0YW5vZGVMYWJlbExlbmd0aD0xOH1nZXROb2RlKHQpe3JldHVybiB0aGlzLnJlbmRlckhpZXJhcmNoeS5nZXRSZW5kZXJOb2RlQnlOYW1lKHQpfWlzTm9kZUV4cGFuZGVkKHQpe3JldHVybiB0LmV4cGFuZGVkfXNldE5vZGVFeHBhbmRlZCh0KXt0aGlzLl9idWlsZCh0aGlzLnJlbmRlckhpZXJhcmNoeSksdGhpcy5fdXBkYXRlTGFiZWxzKCF0aGlzLl96b29tZWQpfXBhblRvTm9kZSh0KXtBbGUodCx0aGlzLiQuc3ZnLHRoaXMuJC5yb290LHRoaXMuX3pvb20pJiYodGhpcy5fem9vbWVkPSEwKX1nZXRHcmFwaFN2Z1Jvb3QoKXtyZXR1cm4gdGhpcy4kLnN2Z31nZXRDb250ZXh0TWVudSgpe3JldHVybiB0aGlzLiQuY29udGV4dE1lbnV9X3Jlc2V0U3RhdGUoKXt0aGlzLl9ub2RlR3JvdXBJbmRleD17fSx0aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleD17fSx0aGlzLl9lZGdlR3JvdXBJbmRleD17fSx0aGlzLl91cGRhdGVMYWJlbHMoITEpLEh0KHRoaXMuJC5zdmcpLnNlbGVjdCgiI3Jvb3QiKS5zZWxlY3RBbGwoIioiKS5yZW1vdmUoKSxMSCh0aGlzLiQuc3ZnKX1fYnVpbGQodCl7dGhpcy50ZW1wbGF0ZUluZGV4PXQuaGllcmFyY2h5LmdldFRlbXBsYXRlSW5kZXgoKSxOZCgidGYtZ3JhcGgtc2NlbmUgKGxheW91dCk6IixmdW5jdGlvbigpe01IKHQucm9vdCl9LmJpbmQodGhpcyksanIuUkVOREVSX1NDRU5FX0xBWU9VVCksTmQoInRmLWdyYXBoLXNjZW5lIChidWlsZCBzY2VuZSk6IixmdW5jdGlvbigpe2VjdChIdCh0aGlzLiQucm9vdCksdC5yb290LHRoaXMpLElsZSh0aGlzLiQuc3ZnLHRoaXMpLHRoaXMuX3VwZGF0ZUlucHV0VHJhY2UoKX0uYmluZCh0aGlzKSxqci5SRU5ERVJfU0NFTkVfQlVJTERfU0NFTkUpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVIZWFsdGhQaWxscyh0aGlzLm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMsdGhpcy5oZWFsdGhQaWxsU3RlcEluZGV4KSx0aGlzLm1pbmltYXAudXBkYXRlKCl9LmJpbmQodGhpcyksVHIuYW5pbWF0aW9uLmR1cmF0aW9uKX1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5fem9vbT1lUigpLm9uKCJlbmQiLGZ1bmN0aW9uKCl7aWYodGhpcy5fem9vbVN0YXJ0Q29vcmRzKXt2YXIgdD1NYXRoLnNxcnQoTWF0aC5wb3codGhpcy5fem9vbVN0YXJ0Q29vcmRzLngtdGhpcy5fem9vbVRyYW5zZm9ybS54LDIpK01hdGgucG93KHRoaXMuX3pvb21TdGFydENvb3Jkcy55LXRoaXMuX3pvb21UcmFuc2Zvcm0ueSwyKSk7dDx0aGlzLl9tYXhab29tRGlzdGFuY2VGb3JDbGljaz90aGlzLl9maXJlRW5hYmxlQ2xpY2soKTpzZXRUaW1lb3V0KHRoaXMuX2ZpcmVFbmFibGVDbGljay5iaW5kKHRoaXMpLDUwKX10aGlzLl96b29tU3RhcnRDb29yZHM9bnVsbH0uYmluZCh0aGlzKSkub24oInpvb20iLGZ1bmN0aW9uKCl7dGhpcy5fem9vbVRyYW5zZm9ybT1xdC50cmFuc2Zvcm0sdGhpcy5fem9vbVN0YXJ0Q29vcmRzfHwodGhpcy5fem9vbVN0YXJ0Q29vcmRzPXRoaXMuX3pvb21UcmFuc2Zvcm0sdGhpcy5maXJlKCJkaXNhYmxlLWNsaWNrIikpLHRoaXMuX3pvb21lZD0hMCxIdCh0aGlzLiQucm9vdCkuYXR0cigidHJhbnNmb3JtIixxdC50cmFuc2Zvcm0pLHRoaXMubWluaW1hcC56b29tKHF0LnRyYW5zZm9ybSl9LmJpbmQodGhpcykpLEh0KHRoaXMuJC5zdmcpLmNhbGwodGhpcy5fem9vbSkub24oImRibGNsaWNrLnpvb20iLG51bGwpLEh0KHdpbmRvdykub24oInJlc2l6ZSIsZnVuY3Rpb24oKXt0aGlzLm1pbmltYXAuem9vbSgpfS5iaW5kKHRoaXMpKSx0aGlzLm1pbmltYXA9dGhpcy4kLm1pbmltYXAuaW5pdCh0aGlzLiQuc3ZnLHRoaXMuJC5yb290LHRoaXMuX3pvb20sVHIubWluaW1hcC5zaXplLFRyLnN1YnNjZW5lLm1ldGEubGFiZWxIZWlnaHQpfWF0dGFjaGVkKCl7dGhpcy5zZXQoIl9pc0F0dGFjaGVkIiwhMCl9ZGV0YWNoZWQoKXt0aGlzLnNldCgiX2lzQXR0YWNoZWQiLCExKX1fcmVuZGVySGllcmFyY2h5Q2hhbmdlZCgpe3ZhciB0PXRoaXMucmVuZGVySGllcmFyY2h5O3RoaXMuX2hhc1JlbmRlckhpZXJhcmNoeUJlZW5GaXRPbmNlPSExLHRoaXMuX3Jlc2V0U3RhdGUoKSx0aGlzLl9idWlsZCh0KX1fYW5pbWF0ZUFuZEZpdCgpe3ZhciB0PXRoaXMuX2lzQXR0YWNoZWQ7dGhpcy5faGFzUmVuZGVySGllcmFyY2h5QmVlbkZpdE9uY2V8fCF0fHxzZXRUaW1lb3V0KHRoaXMuZml0LmJpbmQodGhpcyksVHIuYW5pbWF0aW9uLmR1cmF0aW9uKX1fdXBkYXRlTGFiZWxzKHQpe3ZhciByPXRoaXMuJCQoIi50aXRsZSIpLG49ci5zdHlsZSxpPXRoaXMuJCQoIi5hdXhUaXRsZSIpLG89aS5zdHlsZSxhPXRoaXMuJCQoIi5mdW5jdGlvbkxpYnJhcnlUaXRsZSIpLnN0eWxlO2xldCBzPUh0KHRoaXMuJC5zdmcpO3ZhciBsPXMuc2VsZWN0KCIuIitIaS5TY2VuZS5HUk9VUCsiPi4iK0hpLlNjZW5lLkNPUkUpLm5vZGUoKTtpZih0JiZsJiZ0aGlzLnByb2dyZXNzJiZ0aGlzLnByb2dyZXNzLnZhbHVlPT09MTAwKXt2YXIgYz1zLnNlbGVjdCgiLiIrSGkuU2NlbmUuR1JPVVArIj4uIitIaS5TY2VuZS5JTkVYVFJBQ1QpLm5vZGUoKXx8cy5zZWxlY3QoIi4iK0hpLlNjZW5lLkdST1VQKyI+LiIrSGkuU2NlbmUuT1VURVhUUkFDVCkubm9kZSgpLHU9bC5nZXRDVE0oKS5lLGg9Yz9jLmdldENUTSgpLmU6bnVsbDtuLmRpc3BsYXk9ImlubGluZSIsbi5sZWZ0PXUrInB4IixoIT09bnVsbCYmaCE9PXU/KG8uZGlzcGxheT0iaW5saW5lIixoPU1hdGgubWF4KHUrci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCxoKSxvLmxlZnQ9aCsicHgiKTpvLmRpc3BsYXk9Im5vbmUiO2xldCBmPXMuc2VsZWN0KCIuIitIaS5TY2VuZS5HUk9VUCsiPi4iK0hpLlNjZW5lLkZVTkNUSU9OX0xJQlJBUlkpLm5vZGUoKSxwPWY/Zi5nZXRDVE0oKS5lOm51bGw7cCE9PW51bGwmJnAhPT1oPyhhLmRpc3BsYXk9ImlubGluZSIscD1NYXRoLm1heChoK2kuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgscCksYS5sZWZ0PXArInB4Iik6YS5kaXNwbGF5PSJub25lIn1lbHNlIG4uZGlzcGxheT0ibm9uZSIsby5kaXNwbGF5PSJub25lIixhLmRpc3BsYXk9Im5vbmUifW5vZGVDb2xvcnNDaGFuZ2VkKCl7dGhpcy5yZW5kZXJIaWVyYXJjaHkhPW51bGwmJih0aGlzLnRlbXBsYXRlSW5kZXg9dGhpcy5yZW5kZXJIaWVyYXJjaHkuaGllcmFyY2h5LmdldFRlbXBsYXRlSW5kZXgoKSxtUC5lYWNoKHRoaXMuX25vZGVHcm91cEluZGV4LCh0LHIpPT57dGhpcy5fdXBkYXRlTm9kZVN0YXRlKHIpfSksdGhpcy5taW5pbWFwLnVwZGF0ZSgpKX1maXQoKXt0aGlzLl9oYXNSZW5kZXJIaWVyYXJjaHlCZWVuRml0T25jZT0hMCxDbGUodGhpcy4kLnN2Zyx0aGlzLiQucm9vdCx0aGlzLl96b29tLGZ1bmN0aW9uKCl7dGhpcy5fem9vbWVkPSExfS5iaW5kKHRoaXMpKX1nZXRJbWFnZUJsb2IoKXtyZXR1cm4gdGhpcy5taW5pbWFwLmdldEltYWdlQmxvYigpfWlzTm9kZVNlbGVjdGVkKHQpe3JldHVybiB0PT09dGhpcy5zZWxlY3RlZE5vZGV9aXNOb2RlSGlnaGxpZ2h0ZWQodCl7cmV0dXJuIHQ9PT10aGlzLmhpZ2hsaWdodGVkTm9kZX1hZGRBbm5vdGF0aW9uR3JvdXAodCxyLG4pe3ZhciBpPXQubm9kZS5uYW1lO3RoaXMuX2Fubm90YXRpb25Hcm91cEluZGV4W2ldPXRoaXMuX2Fubm90YXRpb25Hcm91cEluZGV4W2ldfHx7fSx0aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleFtpXVtyLm5vZGUubmFtZV09bn1nZXRBbm5vdGF0aW9uR3JvdXBzSW5kZXgodCl7cmV0dXJuIHRoaXMuX2Fubm90YXRpb25Hcm91cEluZGV4W3RdfXJlbW92ZUFubm90YXRpb25Hcm91cCh0LHIpe2RlbGV0ZSB0aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleFt0Lm5vZGUubmFtZV1bci5ub2RlLm5hbWVdfWFkZE5vZGVHcm91cCh0LHIpe3RoaXMuX25vZGVHcm91cEluZGV4W3RdPXJ9Z2V0Tm9kZUdyb3VwKHQpe3JldHVybiB0aGlzLl9ub2RlR3JvdXBJbmRleFt0XX1yZW1vdmVOb2RlR3JvdXAodCl7ZGVsZXRlIHRoaXMuX25vZGVHcm91cEluZGV4W3RdfWFkZEVkZ2VHcm91cCh0LHIpe3RoaXMuX2VkZ2VHcm91cEluZGV4W3RdPXJ9Z2V0RWRnZUdyb3VwKHQpe3JldHVybiB0aGlzLl9lZGdlR3JvdXBJbmRleFt0XX1fdXBkYXRlSGVhbHRoUGlsbHMoKXt2YXIgdD10aGlzLm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMscj10aGlzLmhlYWx0aFBpbGxTdGVwSW5kZXg7UmxlKHRoaXMuJC5zdmcsdCxyKX1fdXBkYXRlTm9kZVN0YXRlKHQpe3ZhciByPXRoaXMuZ2V0Tm9kZSh0KSxuPXRoaXMuZ2V0Tm9kZUdyb3VwKHQpO2lmKG4mJnMzKG4scix0aGlzKSxyLm5vZGUudHlwZT09PWp0Lk1FVEEmJnIubm9kZS5hc3NvY2lhdGVkRnVuY3Rpb24mJiFyLmlzTGlicmFyeUZ1bmN0aW9uKXt2YXIgaT1NYStyLm5vZGUuYXNzb2NpYXRlZEZ1bmN0aW9uLG89SHQoIi4iK0hpLlNjZW5lLkdST1VQKyI+LiIrSGkuU2NlbmUuRlVOQ1RJT05fTElCUkFSWSsnIGdbZGF0YS1uYW1lPSInK2krJyJdJyk7czMobyxyLHRoaXMpfXZhciBhPXRoaXMuZ2V0QW5ub3RhdGlvbkdyb3Vwc0luZGV4KHQpO21QLmVhY2goYSwocyxsKT0+e3MzKHMscix0aGlzLEhpLkFubm90YXRpb24uTk9ERSl9KX1fc2VsZWN0ZWROb2RlQ2hhbmdlZCh0LHIpe2lmKHQhPT1yJiYociYmdGhpcy5fdXBkYXRlTm9kZVN0YXRlKHIpLCEhdCkpe3RoaXMubWluaW1hcC51cGRhdGUoKTtmb3IodmFyIG49dGhpcy5yZW5kZXJIaWVyYXJjaHkuaGllcmFyY2h5Lm5vZGUodCksaT1bXTtuLnBhcmVudE5vZGUhPW51bGwmJm4ucGFyZW50Tm9kZS5uYW1lIT1xYzspbj1uLnBhcmVudE5vZGUsaS5wdXNoKG4ubmFtZSk7dmFyIG87bVAuZm9yRWFjaFJpZ2h0KGksYT0+e3RoaXMucmVuZGVySGllcmFyY2h5LmJ1aWxkU3ViaGllcmFyY2h5KGEpO3ZhciBzPXRoaXMucmVuZGVySGllcmFyY2h5LmdldFJlbmRlck5vZGVCeU5hbWUoYSk7cy5ub2RlLmlzR3JvdXBOb2RlJiYhcy5leHBhbmRlZCYmKHMuZXhwYW5kZWQ9ITAsb3x8KG89cykpfSksbyYmKHRoaXMuc2V0Tm9kZUV4cGFuZGVkKG8pLHRoaXMuX3pvb21lZD0hMCksdCYmdGhpcy5fdXBkYXRlTm9kZVN0YXRlKHQpLHNldFRpbWVvdXQoKCk9Pnt0aGlzLnBhblRvTm9kZSh0KX0sVHIuYW5pbWF0aW9uLmR1cmF0aW9uKX19X2hpZ2hsaWdodGVkTm9kZUNoYW5nZWQodCxyKXt0IT09ciYmKHQmJnRoaXMuX3VwZGF0ZU5vZGVTdGF0ZSh0KSxyJiZ0aGlzLl91cGRhdGVOb2RlU3RhdGUocikpfV9vblpvb21DaGFuZ2VkKCl7dGhpcy5fdXBkYXRlTGFiZWxzKCF0aGlzLl96b29tZWQpfV9maXJlRW5hYmxlQ2xpY2soKXt0aGlzLmZpcmUoImVuYWJsZS1jbGljayIpfV91cGRhdGVJbnB1dFRyYWNlKCl7WWxlKHRoaXMuZ2V0R3JhcGhTdmdSb290KCksdGhpcy5yZW5kZXJIaWVyYXJjaHksdGhpcy5zZWxlY3RlZE5vZGUsdGhpcy50cmFjZUlucHV0cyl9fTtMci50ZW1wbGF0ZT1LbGU7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsbG8pXSxMci5wcm90b3R5cGUsInJlbmRlckhpZXJhcmNoeSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxMci5wcm90b3R5cGUsIm5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTHIucHJvdG90eXBlLCJjb2xvckJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sTHIucHJvdG90eXBlLCJ0cmFjZUlucHV0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLExyLnByb3RvdHlwZSwiX2hhc1JlbmRlckhpZXJhcmNoeUJlZW5GaXRPbmNlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sTHIucHJvdG90eXBlLCJfaXNBdHRhY2hlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMci5wcm90b3R5cGUsIl96b29tIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfaGlnaGxpZ2h0ZWROb2RlQ2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTHIucHJvdG90eXBlLCJoaWdobGlnaHRlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsb2JzZXJ2ZXI6Il9zZWxlY3RlZE5vZGVDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxMci5wcm90b3R5cGUsInNlbGVjdGVkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMci5wcm90b3R5cGUsImhhbmRsZUVkZ2VTZWxlY3RlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9vblpvb21DaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sTHIucHJvdG90eXBlLCJfem9vbWVkIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLExyLnByb3RvdHlwZSwiX3pvb21TdGFydENvb3JkcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMci5wcm90b3R5cGUsIl96b29tVHJhbnNmb3JtIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLExyLnByb3RvdHlwZSwiX21heFpvb21EaXN0YW5jZUZvckNsaWNrIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sTHIucHJvdG90eXBlLCJ0ZW1wbGF0ZUluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLExyLnByb3RvdHlwZSwiX25vZGVHcm91cEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLExyLnByb3RvdHlwZSwiX2Fubm90YXRpb25Hcm91cEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLExyLnByb3RvdHlwZSwiX2VkZ2VHcm91cEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLExyLnByb3RvdHlwZSwibWF4TWV0YW5vZGVMYWJlbExlbmd0aEZvbnRTaXplIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLExyLnByb3RvdHlwZSwibWluTWV0YW5vZGVMYWJlbExlbmd0aEZvbnRTaXplIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLExyLnByb3RvdHlwZSwibWF4TWV0YW5vZGVMYWJlbExlbmd0aExhcmdlRm9udCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxMci5wcm90b3R5cGUsIm1heE1ldGFub2RlTGFiZWxMZW5ndGgiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTHIucHJvdG90eXBlLCJwcm9ncmVzcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sTHIucHJvdG90eXBlLCJub2RlQ29udGV4dE1lbnVJdGVtcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMci5wcm90b3R5cGUsIm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sTHIucHJvdG90eXBlLCJoZWFsdGhQaWxsU3RlcEluZGV4Iix2b2lkIDApO0UoW0J0KCJyZW5kZXJIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLExyLnByb3RvdHlwZSwiX3JlbmRlckhpZXJhcmNoeUNoYW5nZWQiLG51bGwpO0UoW0J0KCJfaXNBdHRhY2hlZCIsInJlbmRlckhpZXJhcmNoeSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sTHIucHJvdG90eXBlLCJfYW5pbWF0ZUFuZEZpdCIsbnVsbCk7RShbQnQoImNvbG9yQnkiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLExyLnByb3RvdHlwZSwibm9kZUNvbG9yc0NoYW5nZWQiLG51bGwpO0UoW0J0KCJub2RlTmFtZXNUb0hlYWx0aFBpbGxzIiwiaGVhbHRoUGlsbFN0ZXBJbmRleCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sTHIucHJvdG90eXBlLCJfdXBkYXRlSGVhbHRoUGlsbHMiLG51bGwpO0UoW0J0KCJ0cmFjZUlucHV0cyIsInNlbGVjdGVkTm9kZSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sTHIucHJvdG90eXBlLCJfdXBkYXRlSW5wdXRUcmFjZSIsbnVsbCk7THI9RShbeXQoInRmLWdyYXBoLXNjZW5lIildLExyKTt2YXIgRHI9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3JlbmRlckRlcHRoPTEsdGhpcy5fYWxsb3dHcmFwaFNlbGVjdD0hMCx0aGlzLmVkZ2VXaWR0aEZ1bmN0aW9uPSIiLHRoaXMuaGFuZGxlTm9kZVNlbGVjdGVkPSIiLHRoaXMuZWRnZUxhYmVsRnVuY3Rpb249IiIsdGhpcy5oYW5kbGVFZGdlU2VsZWN0ZWQ9IiJ9cGFuVG9Ob2RlKHQpe3RoaXMuJCQoInRmLWdyYXBoLXNjZW5lIikucGFuVG9Ob2RlKHQpfV9hdXRvRXh0cmFjdE5vZGVzQ2hhbmdlZCgpe3ZhciB0PXRoaXMuZ3JhcGhIaWVyYXJjaHk7aWYoISF0KXtmb3IobGV0IHIgb2YgT2JqZWN0LnZhbHVlcyh0LmdldE5vZGVNYXAoKSkpci5pbmNsdWRlPXVyLlVOU1BFQ0lGSUVEO3RoaXMuX2J1aWxkUmVuZGVySGllcmFyY2h5KHQpfX1fYnVpbGROZXdSZW5kZXJIaWVyYXJjaHkoKXt2YXIgdD10aGlzLmdyYXBoSGllcmFyY2h5OyF0fHx0aGlzLl9idWlsZFJlbmRlckhpZXJhcmNoeSh0KX1fc3RhdHNDaGFuZ2VkKCl7dmFyIHQ9dGhpcy5zdGF0cyxyPXRoaXMuZGV2aWNlc0ZvclN0YXRzO3RoaXMuZ3JhcGhIaWVyYXJjaHkmJih0JiZyJiYoYWxlKHRoaXMuYmFzaWNHcmFwaCx0LHIpLHBsZSh0aGlzLmdyYXBoSGllcmFyY2h5LHQpKSx0aGlzLl9idWlsZFJlbmRlckhpZXJhcmNoeSh0aGlzLmdyYXBoSGllcmFyY2h5KSl9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZ3JhcGgtc2VsZWN0Iix0aGlzLl9ncmFwaFNlbGVjdGVkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZGlzYWJsZS1jbGljayIsdGhpcy5fZGlzYWJsZUNsaWNrLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZW5hYmxlLWNsaWNrIix0aGlzLl9lbmFibGVDbGljay5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIm5vZGUtdG9nZ2xlLWV4cGFuZCIsdGhpcy5fbm9kZVRvZ2dsZUV4cGFuZC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIm5vZGUtc2VsZWN0Iix0aGlzLl9ub2RlU2VsZWN0ZWQuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLWhpZ2hsaWdodCIsdGhpcy5fbm9kZUhpZ2hsaWdodGVkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS11bmhpZ2hsaWdodCIsdGhpcy5fbm9kZVVuaGlnaGxpZ2h0ZWQuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLXRvZ2dsZS1leHRyYWN0Iix0aGlzLl9ub2RlVG9nZ2xlRXh0cmFjdC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIm5vZGUtdG9nZ2xlLXNlcmllc2dyb3VwIix0aGlzLl9ub2RlVG9nZ2xlU2VyaWVzR3JvdXAuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJlZGdlLXNlbGVjdCIsdGhpcy5fZWRnZVNlbGVjdGVkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiYW5ub3RhdGlvbi1zZWxlY3QiLHRoaXMuX25vZGVTZWxlY3RlZC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImFubm90YXRpb24taGlnaGxpZ2h0Iix0aGlzLl9ub2RlSGlnaGxpZ2h0ZWQuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJhbm5vdGF0aW9uLXVuaGlnaGxpZ2h0Iix0aGlzLl9ub2RlVW5oaWdobGlnaHRlZC5iaW5kKHRoaXMpKX1fYnVpbGRSZW5kZXJIaWVyYXJjaHkodCl7aWYodC5yb290LnR5cGUhPT1qdC5NRVRBKXJldHVybjtsZXQgcj10aGlzLG49TmQoIm5ldyB0Zl9ncmFwaF9yZW5kZXIuSGllcmFyY2h5IiwoKT0+e2xldCBpPW5ldyBsbyh0LCEhdGhpcy5zdGF0cyx0aGlzLmF1dG9FeHRyYWN0Tm9kZXMpO2kuZWRnZUxhYmVsRnVuY3Rpb249dGhpcy5lZGdlTGFiZWxGdW5jdGlvbixpLmVkZ2VXaWR0aEZ1bmN0aW9uPXRoaXMuZWRnZVdpZHRoRnVuY3Rpb247ZnVuY3Rpb24gbyhhKXtyZXR1cm57bWluVmFsdWU6YS5kb21haW4oKVswXSxtYXhWYWx1ZTphLmRvbWFpbigpWzFdLHN0YXJ0Q29sb3I6YS5yYW5nZSgpWzBdLGVuZENvbG9yOmEucmFuZ2UoKVsxXX19cmV0dXJuIHIuX3NldENvbG9yQnlQYXJhbXMoe2NvbXB1dGVfdGltZTpvKGkuY29tcHV0ZVRpbWVTY2FsZSksbWVtb3J5Om8oaS5tZW1vcnlVc2FnZVNjYWxlKSxkZXZpY2U6aWN0Lm1hcChpLmRldmljZUNvbG9yTWFwLmRvbWFpbigpLGZ1bmN0aW9uKGEpe3JldHVybntkZXZpY2U6YSxjb2xvcjppLmRldmljZUNvbG9yTWFwKGEpfX0pLHhsYV9jbHVzdGVyOmljdC5tYXAoaS54bGFDbHVzdGVyQ29sb3JNYXAuZG9tYWluKCksZnVuY3Rpb24oYSl7cmV0dXJue3hsYV9jbHVzdGVyOmEsY29sb3I6aS54bGFDbHVzdGVyQ29sb3JNYXAoYSl9fSl9KSxpfSxqci5SRU5ERVJfQlVJTERfSElFUkFSQ0hZKTtyLl9zZXRSZW5kZXJIaWVyYXJjaHkobil9X2dldFZpc2libGUodCl7cmV0dXJuIHQmJnRoaXMucmVuZGVySGllcmFyY2h5LmdldE5lYXJlc3RWaXNpYmxlQW5jZXN0b3IodCl9Zml0KCl7dGhpcy4kLnNjZW5lLmZpdCgpfWdldEltYWdlQmxvYigpe3JldHVybiB0aGlzLiQuc2NlbmUuZ2V0SW1hZ2VCbG9iKCl9X2dyYXBoQ2hhbmdlZCgpeyF0aGlzLmdyYXBoSGllcmFyY2h5fHwodGhpcy5ncmFwaEhpZXJhcmNoeS5hZGRMaXN0ZW5lcihPZC5URU1QTEFURVNfVVBEQVRFRCwoKT0+e3RoaXMuJC5zY2VuZS5ub2RlQ29sb3JzQ2hhbmdlZCgpfSksdGhpcy5maXJlKCJncmFwaC1zZWxlY3QiKSl9X2dyYXBoU2VsZWN0ZWQodCl7dGhpcy5fYWxsb3dHcmFwaFNlbGVjdCYmKHRoaXMuc2V0KCJzZWxlY3RlZE5vZGUiLG51bGwpLHRoaXMuc2V0KCJzZWxlY3RlZEVkZ2UiLG51bGwpKSx0aGlzLl9hbGxvd0dyYXBoU2VsZWN0PSEwfV9kaXNhYmxlQ2xpY2sodCl7dGhpcy5fYWxsb3dHcmFwaFNlbGVjdD0hMX1fZW5hYmxlQ2xpY2sodCl7dGhpcy5fYWxsb3dHcmFwaFNlbGVjdD0hMH1fc2VsZWN0ZWROb2RlQ2hhbmdlZCgpe3ZhciB0PXRoaXMuc2VsZWN0ZWROb2RlO3RoaXMuaGFuZGxlTm9kZVNlbGVjdGVkJiZ0aGlzLmhhbmRsZU5vZGVTZWxlY3RlZCh0KX1fc2VsZWN0ZWRFZGdlQ2hhbmdlZCgpe3ZhciB0PXRoaXMuc2VsZWN0ZWRFZGdlO3RoaXMuX2Rlc2VsZWN0UHJldmlvdXNFZGdlKCksdCYmKHRoaXMuX2xhc3RTZWxlY3RlZEVkZ2VHcm91cC5jbGFzc2VkKEhpLkVkZ2UuU0VMRUNURUQsITApLHRoaXMuX3VwZGF0ZU1hcmtlck9mU2VsZWN0ZWRFZGdlKHQpKSx0aGlzLmhhbmRsZUVkZ2VTZWxlY3RlZCYmdGhpcy5oYW5kbGVFZGdlU2VsZWN0ZWQodCl9X25vZGVTZWxlY3RlZCh0KXt0aGlzLl9hbGxvd0dyYXBoU2VsZWN0JiZ0aGlzLnNldCgic2VsZWN0ZWROb2RlIix0LmRldGFpbC5uYW1lKSx0aGlzLl9hbGxvd0dyYXBoU2VsZWN0PSEwfV9lZGdlU2VsZWN0ZWQodCl7dGhpcy5fYWxsb3dHcmFwaFNlbGVjdCYmKHRoaXMuc2V0KCJfbGFzdFNlbGVjdGVkRWRnZUdyb3VwIix0LmRldGFpbC5lZGdlR3JvdXApLHRoaXMuc2V0KCJzZWxlY3RlZEVkZ2UiLHQuZGV0YWlsLmVkZ2VEYXRhKSksdGhpcy5fYWxsb3dHcmFwaFNlbGVjdD0hMH1fbm9kZUhpZ2hsaWdodGVkKHQpe3RoaXMuc2V0KCJoaWdobGlnaHRlZE5vZGUiLHQuZGV0YWlsLm5hbWUpfV9ub2RlVW5oaWdobGlnaHRlZCh0KXt0aGlzLnNldCgiaGlnaGxpZ2h0ZWROb2RlIixudWxsKX1fbm9kZVRvZ2dsZUV4cGFuZCh0KXt0aGlzLl9ub2RlU2VsZWN0ZWQodCk7dmFyIHI9dC5kZXRhaWwubmFtZSxuPXRoaXMucmVuZGVySGllcmFyY2h5LmdldFJlbmRlck5vZGVCeU5hbWUocik7bi5ub2RlLnR5cGUhPT1qdC5PUCYmKHRoaXMucmVuZGVySGllcmFyY2h5LmJ1aWxkU3ViaGllcmFyY2h5KHIpLG4uZXhwYW5kZWQ9IW4uZXhwYW5kZWQsdGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMuJC5zY2VuZS5zZXROb2RlRXhwYW5kZWQobil9LDc1KSxQbyh7YWN0aW9uSWQ6anIuTk9ERV9FWFBBTlNJT05fVE9HR0xFRCxldmVudExhYmVsOm4uZXhwYW5kZWQ/ImV4cGFuZGVkIjoiY29sbGFwc2VkIn0pKX1fbm9kZVRvZ2dsZUV4dHJhY3QodCl7dmFyIHI9dC5kZXRhaWwubmFtZTt0aGlzLm5vZGVUb2dnbGVFeHRyYWN0KHIpfW5vZGVUb2dnbGVFeHRyYWN0KHQpe2xldCByPXRoaXMucmVuZGVySGllcmFyY2h5LmdldFJlbmRlck5vZGVCeU5hbWUodCk7ci5ub2RlLmluY2x1ZGU9PXVyLklOQ0xVREU/ci5ub2RlLmluY2x1ZGU9dXIuRVhDTFVERTpyLm5vZGUuaW5jbHVkZT09dXIuRVhDTFVERT9yLm5vZGUuaW5jbHVkZT11ci5JTkNMVURFOnIubm9kZS5pbmNsdWRlPXRoaXMucmVuZGVySGllcmFyY2h5LmlzTm9kZUF1eGlsaWFyeShyKT91ci5JTkNMVURFOnVyLkVYQ0xVREUsdGhpcy5fYnVpbGRSZW5kZXJIaWVyYXJjaHkodGhpcy5ncmFwaEhpZXJhcmNoeSksUG8oe2FjdGlvbklkOmpyLk5PREVfQVVYSUxJQVJZX0VYVFJBQ1RJT05fQ0hBTkdFRCxldmVudExhYmVsOnIubm9kZS5pbmNsdWRlPT09dXIuSU5DTFVERT8iQXV4aWxpYXJ5IHRvIE1haW4iOiJNYWluIHRvIEF1eGlsaWFyeSJ9KX1fbm9kZVRvZ2dsZVNlcmllc0dyb3VwKHQpe3ZhciByPXQuZGV0YWlsLm5hbWU7dGhpcy5ub2RlVG9nZ2xlU2VyaWVzR3JvdXAocil9bm9kZVRvZ2dsZVNlcmllc0dyb3VwKHQpe3RoaXMuc2V0KCJwcm9ncmVzcyIse3ZhbHVlOjAsbXNnOiIifSk7dmFyIHI9blAodGhpcyksbj1KUyhyLDEwMCwiTmFtZXNwYWNlIGhpZXJhcmNoeSIpO2xldCBpPXloKGlhKHt9LHRoaXMuaGllcmFyY2h5UGFyYW1zKSx7c2VyaWVzTWFwOnRoaXMuZ3JhcGhIaWVyYXJjaHkuYnVpbGRTZXJpZXNHcm91cE1hcFRvZ2dsZWQodCl9KTtiSCh0aGlzLmJhc2ljR3JhcGgsaSxuKS50aGVuKGZ1bmN0aW9uKG8pe3RoaXMuc2V0KCJncmFwaEhpZXJhcmNoeSIsbyksdGhpcy5fYnVpbGRSZW5kZXJIaWVyYXJjaHkodGhpcy5ncmFwaEhpZXJhcmNoeSl9LmJpbmQodGhpcykpfV9kZXNlbGVjdFByZXZpb3VzRWRnZSgpe2xldCB0PSIuIitIaS5FZGdlLlNFTEVDVEVEO0h0KHQpLmNsYXNzZWQoSGkuRWRnZS5TRUxFQ1RFRCwhMSkuZWFjaCgocixuKT0+e2lmKHIubGFiZWwpe2xldCBpPUh0KHRoaXMpLnNlbGVjdEFsbCgicGF0aC5lZGdlbGluZSIpO3IubGFiZWwuc3RhcnRNYXJrZXJJZCYmaS5zdHlsZSgibWFya2VyLXN0YXJ0IixgdXJsKCMke3IubGFiZWwuc3RhcnRNYXJrZXJJZH0pYCksci5sYWJlbC5lbmRNYXJrZXJJZCYmaS5zdHlsZSgibWFya2VyLWVuZCIsYHVybCgjJHtyLmxhYmVsLmVuZE1hcmtlcklkfSlgKX19KX1fdXBkYXRlTWFya2VyT2ZTZWxlY3RlZEVkZ2UodCl7dmFyIHI7aWYodC5sYWJlbCl7bGV0IG49dC5sYWJlbC5zdGFydE1hcmtlcklkfHx0LmxhYmVsLmVuZE1hcmtlcklkO2lmKG4pe2xldCBpPW4ucmVwbGFjZSgiZGF0YWZsb3ctIiwic2VsZWN0ZWQtIiksbz10aGlzLiQkKCIjIitpKTtpZighbyl7bGV0IHM9dGhpcy4kLnNjZW5lLnF1ZXJ5U2VsZWN0b3IoIiMiK24pO289cz09bnVsbD92b2lkIDA6cy5jbG9uZU5vZGUoITApLG8uc2V0QXR0cmlidXRlKCJpZCIsaSksby5jbGFzc0xpc3QuYWRkKCJzZWxlY3RlZC1hcnJvd2hlYWQiKSwocj1zPT1udWxsP3ZvaWQgMDpzLnBhcmVudE5vZGUpPT1udWxsfHxyLmFwcGVuZENoaWxkKG8pfWxldCBhPXQubGFiZWwuc3RhcnRNYXJrZXJJZD8ibWFya2VyLXN0YXJ0IjoibWFya2VyLWVuZCI7dGhpcy5fbGFzdFNlbGVjdGVkRWRnZUdyb3VwLnNlbGVjdEFsbCgicGF0aC5lZGdlbGluZSIpLnN0eWxlKGEsYHVybCgjJHtpfSlgKX19fW5vdCh0KXtyZXR1cm4hdH19O0RyLnRlbXBsYXRlPVFgCiAgICA8c3R5bGU+CiAgICAgIC5jb250YWluZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCA1cHggcmdiYSgwLCAwLCAwLCAwLjIpOwogICAgICB9CgogICAgICAudmVydGljYWwgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtdmVydGljYWw7CiAgICAgIH0KCiAgICAgIC5hdXRvIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZmxleC1hdXRvOwogICAgICAgIEBhcHBseSAtLWxheW91dC12ZXJ0aWNhbDsKICAgICAgfQoKICAgICAgaDIgewogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgfQoKICAgICAgcGFwZXItYnV0dG9uIHsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgICAgIDxkaXYgY2xhc3M9InZlcnRpY2FsIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbdGl0bGVdXSI+CiAgICAgICAgICA8aDI+W1t0aXRsZV1dPC9oMj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0Zi1ncmFwaC1zY2VuZQogICAgICAgICAgaWQ9InNjZW5lIgogICAgICAgICAgY2xhc3M9ImF1dG8iCiAgICAgICAgICByZW5kZXItaGllcmFyY2h5PSJbW3JlbmRlckhpZXJhcmNoeV1dIgogICAgICAgICAgaGlnaGxpZ2h0ZWQtbm9kZT0iW1tfZ2V0VmlzaWJsZShoaWdobGlnaHRlZE5vZGUpXV0iCiAgICAgICAgICBzZWxlY3RlZC1ub2RlPSJ7e3NlbGVjdGVkTm9kZX19IgogICAgICAgICAgc2VsZWN0ZWQtZWRnZT0ie3tzZWxlY3RlZEVkZ2V9fSIKICAgICAgICAgIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIKICAgICAgICAgIHByb2dyZXNzPSJbW3Byb2dyZXNzXV0iCiAgICAgICAgICBub2RlLWNvbnRleHQtbWVudS1pdGVtcz0iW1tub2RlQ29udGV4dE1lbnVJdGVtc11dIgogICAgICAgICAgbm9kZS1uYW1lcy10by1oZWFsdGgtcGlsbHM9Iltbbm9kZU5hbWVzVG9IZWFsdGhQaWxsc11dIgogICAgICAgICAgaGVhbHRoLXBpbGwtc3RlcC1pbmRleD0ie3toZWFsdGhQaWxsU3RlcEluZGV4fX0iCiAgICAgICAgICBoYW5kbGUtZWRnZS1zZWxlY3RlZD0iW1toYW5kbGVFZGdlU2VsZWN0ZWRdXSIKICAgICAgICAgIHRyYWNlLWlucHV0cz0iW1t0cmFjZUlucHV0c11dIgogICAgICAgID48L3RmLWdyYXBoLXNjZW5lPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIGA7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLG9ic2VydmVyOiJfZ3JhcGhDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixhcyldLERyLnByb3RvdHlwZSwiZ3JhcGhIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsWHUpXSxEci5wcm90b3R5cGUsImJhc2ljR3JhcGgiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRHIucHJvdG90eXBlLCJzdGF0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxEci5wcm90b3R5cGUsImRldmljZXNGb3JTdGF0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxEci5wcm90b3R5cGUsImhpZXJhcmNoeVBhcmFtcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRHIucHJvdG90eXBlLCJwcm9ncmVzcyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxEci5wcm90b3R5cGUsInRpdGxlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxEci5wcm90b3R5cGUsInNlbGVjdGVkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRHIucHJvdG90eXBlLCJzZWxlY3RlZEVkZ2UiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRHIucHJvdG90eXBlLCJfbGFzdFNlbGVjdGVkRWRnZUdyb3VwIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxEci5wcm90b3R5cGUsImhpZ2hsaWdodGVkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxEci5wcm90b3R5cGUsImNvbG9yQnkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLHJlYWRPbmx5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwiY29sb3JCeVBhcmFtcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxyZWFkT25seTohMCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsbG8pXSxEci5wcm90b3R5cGUsInJlbmRlckhpZXJhcmNoeSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLERyLnByb3RvdHlwZSwidHJhY2VJbnB1dHMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxEci5wcm90b3R5cGUsImF1dG9FeHRyYWN0Tm9kZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLERyLnByb3RvdHlwZSwibm9kZUNvbnRleHRNZW51SXRlbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sRHIucHJvdG90eXBlLCJfcmVuZGVyRGVwdGgiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxEci5wcm90b3R5cGUsIl9hbGxvd0dyYXBoU2VsZWN0Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxEci5wcm90b3R5cGUsImhlYWx0aFBpbGxTdGVwSW5kZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRHIucHJvdG90eXBlLCJlZGdlV2lkdGhGdW5jdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxEci5wcm90b3R5cGUsImhhbmRsZU5vZGVTZWxlY3RlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxEci5wcm90b3R5cGUsImVkZ2VMYWJlbEZ1bmN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwiaGFuZGxlRWRnZVNlbGVjdGVkIix2b2lkIDApO0UoW0J0KCJhdXRvRXh0cmFjdE5vZGVzIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxEci5wcm90b3R5cGUsIl9hdXRvRXh0cmFjdE5vZGVzQ2hhbmdlZCIsbnVsbCk7RShbQnQoImdyYXBoSGllcmFyY2h5IiwiZWRnZVdpZHRoRnVuY3Rpb24iLCJoYW5kbGVOb2RlU2VsZWN0ZWQiLCJlZGdlTGFiZWxGdW5jdGlvbiIsImhhbmRsZUVkZ2VTZWxlY3RlZCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sRHIucHJvdG90eXBlLCJfYnVpbGROZXdSZW5kZXJIaWVyYXJjaHkiLG51bGwpO0UoW0J0KCJzdGF0cyIsImRldmljZXNGb3JTdGF0cyIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sRHIucHJvdG90eXBlLCJfc3RhdHNDaGFuZ2VkIixudWxsKTtFKFtCdCgic2VsZWN0ZWROb2RlIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxEci5wcm90b3R5cGUsIl9zZWxlY3RlZE5vZGVDaGFuZ2VkIixudWxsKTtFKFtCdCgic2VsZWN0ZWRFZGdlIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxEci5wcm90b3R5cGUsIl9zZWxlY3RlZEVkZ2VDaGFuZ2VkIixudWxsKTtEcj1FKFt5dCgidGYtZ3JhcGgiKV0sRHIpO3ZhciBjbz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5zcGVjaWZpY0hlYWx0aFBpbGxTdGVwPTAsdGhpcy5oZWFsdGhQaWxsRW50cmllcz1mUH1yZWFkeSgpe3N1cGVyLnJlYWR5KCk7dmFyIHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1haW5Db250YWluZXIiKSxyPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInRmLWRhc2hib2FyZC1sYXlvdXQgLnNjcm9sbGJhciIpO3QmJnImJih0LnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iLHIuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIpfV9oZWFsdGhQaWxsc0F2YWlsYWJsZSh0LHIpe3JldHVybiB0JiZyfV9jb21wdXRlVGVuc29yQ291bnRTdHJpbmcodCxyKXtyZXR1cm4gdD90W3JdLnRvRml4ZWQoMCk6IiJ9Z2V0IGhlYWx0aFBpbGxWYWx1ZXNGb3JTZWxlY3RlZE5vZGUoKXt2YXIgdD10aGlzLm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMscj10aGlzLmhlYWx0aFBpbGxTdGVwSW5kZXgsbj10aGlzLnNlbGVjdGVkTm9kZSxpPXRoaXMuYWxsU3RlcHNNb2RlRW5hYmxlZCxvPXRoaXMuYXJlSGVhbHRoUGlsbHNMb2FkaW5nO2lmKG98fCFuKXJldHVybiBudWxsO2xldCBhPXRbbl07aWYoIWEpcmV0dXJuIG51bGw7bGV0IHM9YVtpPzA6cl07cmV0dXJuIHM/cy52YWx1ZS5zbGljZSgyLDgpOm51bGx9Z2V0IF9jdXJyZW50U3RlcERpc3BsYXlWYWx1ZSgpe3ZhciB0PXRoaXMubm9kZU5hbWVzVG9IZWFsdGhQaWxscyxyPXRoaXMuaGVhbHRoUGlsbFN0ZXBJbmRleCxuPXRoaXMuYWxsU3RlcHNNb2RlRW5hYmxlZCxpPXRoaXMuc3BlY2lmaWNIZWFsdGhQaWxsU3RlcCxvPXRoaXMuYXJlSGVhbHRoUGlsbHNMb2FkaW5nO2lmKG4pcmV0dXJuIGkudG9GaXhlZCgwKTtpZihvKXJldHVybiAwO2ZvcihsZXQgYSBpbiB0KXJldHVybiB0W2FdW3JdLnN0ZXAudG9GaXhlZCgwKTtyZXR1cm4gMH1nZXQgX2JpZ2dlc3RTdGVwRXZlclNlZW4oKXt2YXIgdD10aGlzLm5vZGVOYW1lc1RvSGVhbHRoUGlsbHM7Zm9yKGxldCBuIGluIHQpe3ZhciByPXRbbl07cmV0dXJuIE1hdGgubWF4KHRoaXMuX2JpZ2dlc3RTdGVwRXZlclNlZW4scltyLmxlbmd0aC0xXS5zdGVwKX1yZXR1cm4gdGhpcy5fYmlnZ2VzdFN0ZXBFdmVyU2Vlbnx8MH1nZXQgX21heFN0ZXBJbmRleCgpe3ZhciB0PXRoaXMubm9kZU5hbWVzVG9IZWFsdGhQaWxscztmb3IobGV0IHIgaW4gdClyZXR1cm4gdFtyXS5sZW5ndGgtMTtyZXR1cm4gMH1faGFzRGVidWdnZXJOdW1lcmljQWxlcnRzKHQpe3JldHVybiB0JiZ0Lmxlbmd0aH1fdXBkYXRlQWxlcnRzTGlzdCgpe3ZhciB0PXRoaXMuZGVidWdnZXJOdW1lcmljQWxlcnRzLHI9dGhpcy4kJCgiI251bWVyaWMtYWxlcnRzLWJvZHkiKTtpZighIXIpe3IuaW5uZXJUZXh0PSIiO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dLG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKSxhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7YS5pbm5lclRleHQ9UXNlKGkuZmlyc3RfdGltZXN0YW1wKSxhLmNsYXNzTGlzdC5hZGQoImZpcnN0LW9mZmVuc2UtdGQiKSxvLmFwcGVuZENoaWxkKGEpO3ZhciBzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7cy5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3ItZGV2aWNlLXRkIik7dmFyIGw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7bC5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3Itc2VjdGlvbi13aXRoaW4tdGFibGUiKSxsLmlubmVyVGV4dD1pLnRlbnNvcl9uYW1lLHRoaXMuX2FkZE9wRXhwYW5zaW9uTGlzdGVuZXIobCxpLnRlbnNvcl9uYW1lKSxzLmFwcGVuZENoaWxkKGwpO3ZhciBjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2MuY2xhc3NMaXN0LmFkZCgiZGV2aWNlLXNlY3Rpb24td2l0aGluLXRhYmxlIiksYy5pbm5lclRleHQ9IigiK2kuZGV2aWNlX25hbWUrIikiLHMuYXBwZW5kQ2hpbGQoYyksby5hcHBlbmRDaGlsZChzKTt2YXIgdT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt1LmNsYXNzTGlzdC5hZGQoIm1pbmktaGVhbHRoLXBpbGwiKTt2YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpO2lmKGguY2xhc3NMaXN0LmFkZCgibWluaS1oZWFsdGgtcGlsbC10ZCIpLGguYXBwZW5kQ2hpbGQodSksby5hcHBlbmRDaGlsZChoKSxpLm5lZ19pbmZfZXZlbnRfY291bnQpe3ZhciBmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2YuY2xhc3NMaXN0LmFkZCgibmVnYXRpdmUtaW5mLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiIpLGYuaW5uZXJUZXh0PWkubmVnX2luZl9ldmVudF9jb3VudCxmLnNldEF0dHJpYnV0ZSgidGl0bGUiLGkubmVnX2luZl9ldmVudF9jb3VudCsiIGV2ZW50cyB3aXRoIC1cdTIyMUUiKSx1LmFwcGVuZENoaWxkKGYpfWlmKGkucG9zX2luZl9ldmVudF9jb3VudCl7dmFyIHA9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cC5jbGFzc0xpc3QuYWRkKCJwb3NpdGl2ZS1pbmYtbWluaS1oZWFsdGgtcGlsbC1zZWN0aW9uIikscC5pbm5lclRleHQ9aS5wb3NfaW5mX2V2ZW50X2NvdW50LHAuc2V0QXR0cmlidXRlKCJ0aXRsZSIsaS5wb3NfaW5mX2V2ZW50X2NvdW50KyIgZXZlbnRzIHdpdGggK1x1MjIxRSIpLHUuYXBwZW5kQ2hpbGQocCl9aWYoaS5uYW5fZXZlbnRfY291bnQpe3ZhciBkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2QuY2xhc3NMaXN0LmFkZCgibmFuLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiIpLGQuaW5uZXJUZXh0PWkubmFuX2V2ZW50X2NvdW50LGQuc2V0QXR0cmlidXRlKCJ0aXRsZSIsaS5uYW5fZXZlbnRfY291bnQrIiBldmVudHMgd2l0aCBOYU4iKSx1LmFwcGVuZENoaWxkKGQpfXp0KHIpLmFwcGVuZENoaWxkKG8pfX19X2FkZE9wRXhwYW5zaW9uTGlzdGVuZXIodCxyKXt0LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+e3ZhciBuPXhsZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2NlbmUiKSx0aGlzLnJlbmRlckhpZXJhcmNoeSxyKSxpLG89ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigidGYtZ3JhcGgtaW5mbyNncmFwaC1pbmZvIik7byYmKGk9by5zY3JvbGxIZWlnaHQtby5zY3JvbGxUb3ApO3ZhciBhPXRoaXMuc2VsZWN0ZWROb2RlO3RoaXMuc2V0KCJzZWxlY3RlZE5vZGUiLG4pO3ZhciBzPSgpPT57by5zY3JvbGxUb3A9by5zY3JvbGxIZWlnaHQtaX07byYmKGE/cygpOndpbmRvdy5zZXRUaW1lb3V0KHMsMjApKX0pfX07Y28udGVtcGxhdGU9UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgaDIgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgfQoKICAgICAgLmhlYWx0aC1waWxsLWxlZ2VuZCB7CiAgICAgICAgcGFkZGluZzogMTVweDsKICAgICAgfQoKICAgICAgLmhlYWx0aC1waWxsLWxlZ2VuZCBoMiB7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgfQoKICAgICAgLmhlYWx0aC1waWxsLWVudHJ5IHsKICAgICAgICBtYXJnaW46IDEwcHggMTBweCAxMHB4IDA7CiAgICAgIH0KCiAgICAgIC5oZWFsdGgtcGlsbC1lbnRyeSAuY29sb3ItcHJldmlldyB7CiAgICAgICAgd2lkdGg6IDI2cHg7CiAgICAgICAgaGVpZ2h0OiAyNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgbWFyZ2luOiAwIDEwcHggMCAwOwogICAgICB9CgogICAgICAuaGVhbHRoLXBpbGwtZW50cnkgLmNvbG9yLWxhYmVsLAogICAgICAuaGVhbHRoLXBpbGwtZW50cnkgLnRlbnNvci1jb3VudCB7CiAgICAgICAgY29sb3I6ICM3Nzc7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGhlaWdodDogMjZweDsKICAgICAgICBmb250LXNpemU6IDIycHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI2cHg7CiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDsKICAgICAgfQoKICAgICAgLmhlYWx0aC1waWxsLWVudHJ5IC50ZW5zb3ItY291bnQgewogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgfQoKICAgICAgI2hlYWx0aC1waWxsLXN0ZXAtc2xpZGVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBtYXJnaW46IDAgMCAwIC0xNXB4OwogICAgICAgIC8qIDMxIGNvbWVzIGZyb20gYWRkaW5nIGEgcGFkZGluZyBvZiAxNXB4IGZyb20gYm90aCBzaWRlcyBvZiB0aGUgcGFwZXItc2xpZGVyLCBzdWJ0cmFjdGluZwogICAqIDFweCBzbyB0aGF0IHRoZSBzbGlkZXIgd2lkdGggYWxpZ25zIHdpdGggdGhlIGltYWdlICh0aGUgbGFzdCBzbGlkZXIgbWFya2VyIHRha2VzIHVwIDFweCksCiAgICogYW5kIGFkZGluZyAycHggdG8gYWNjb3VudCBmb3IgYSBib3JkZXIgb2YgMXB4IG9uIGJvdGggc2lkZXMgb2YgdGhlIGltYWdlLiAzMCAtIDEgKyAyLgogICAqIEFwcGFyZW50bHksIHRoZSBwYXBlci1zbGlkZXIgbGFja3MgYSBtaXhpbiBmb3IgdGhvc2UgcGFkZGluZyB2YWx1ZXMuICovCiAgICAgICAgd2lkdGg6IGNhbGMoMTAwJSArIDMxcHgpOwogICAgICB9CgogICAgICAjaGVhbHRoLXBpbGxzLWxvYWRpbmctc3Bpbm5lciB7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICAgIH0KCiAgICAgICNoZWFsdGgtcGlsbC1zdGVwLW51bWJlci1pbnB1dCB7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICAgIH0KCiAgICAgICNudW1lcmljLWFsZXJ0cy10YWJsZS1jb250YWluZXIgewogICAgICAgIG1heC1oZWlnaHQ6IDQwMHB4OwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAjbnVtZXJpYy1hbGVydHMtdGFibGUgewogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KCiAgICAgICNudW1lcmljLWFsZXJ0cy10YWJsZSB0ZCB7CiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDsKICAgICAgfQoKICAgICAgI251bWVyaWMtYWxlcnRzLXRhYmxlIC5maXJzdC1vZmZlbnNlLXRkIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIC5maXJzdC1vZmZlbnNlLXRkIHsKICAgICAgICB3aWR0aDogODBweDsKICAgICAgfQoKICAgICAgLnRlbnNvci1kZXZpY2UtdGQgewogICAgICAgIG1heC13aWR0aDogMTQwcHg7CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICB9CgogICAgICAudGVuc29yLXNlY3Rpb24td2l0aGluLXRhYmxlIHsKICAgICAgICBjb2xvcjogIzI2NjIzNjsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgb3BhY2l0eTogMC44OwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICB9CgogICAgICAudGVuc29yLXNlY3Rpb24td2l0aGluLXRhYmxlOmhvdmVyIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAuZGV2aWNlLXNlY3Rpb24td2l0aGluLXRhYmxlIHsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgfQoKICAgICAgLm1pbmktaGVhbHRoLXBpbGwgewogICAgICAgIHdpZHRoOiAxMzBweDsKICAgICAgfQoKICAgICAgLm1pbmktaGVhbHRoLXBpbGwgPiBkaXYgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB3aWR0aDogNjBweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIH0KCiAgICAgICNldmVudC1jb3VudHMtdGggewogICAgICAgIHBhZGRpbmc6IDAgMCAwIDEwcHg7CiAgICAgIH0KCiAgICAgIC5uZWdhdGl2ZS1pbmYtbWluaS1oZWFsdGgtcGlsbC1zZWN0aW9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2IoMjU1LCAxNDEsIDApOwogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICB9CgogICAgICAucG9zaXRpdmUtaW5mLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiKDAsIDYyLCAyMTIpOwogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICB9CgogICAgICAubmFuLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiKDIwNCwgNDcsIDQ0KTsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgfQoKICAgICAgLm5lZ2F0aXZlLWluZi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24sCiAgICAgIC5wb3NpdGl2ZS1pbmYtbWluaS1oZWFsdGgtcGlsbC1zZWN0aW9uLAogICAgICAubmFuLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiB7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgICBtYXJnaW46IDAgMCAwIDEwcHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICB9CgogICAgICAubm8tbnVtZXJpYy1hbGVydHMtbm90aWZpY2F0aW9uIHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8cGFwZXItbWF0ZXJpYWwgZWxldmF0aW9uPSIxIiBjbGFzcz0iY2FyZCBoZWFsdGgtcGlsbC1sZWdlbmQiPgogICAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+CiAgICAgICAgRW5hYmxlIGFsbCAobm90IGp1c3Qgc2FtcGxlZCkgc3RlcHMuIFJlcXVpcmVzIHNsb3cgZGlzayByZWFkLgogICAgICA8L2Rpdj4KICAgICAgPHBhcGVyLXRvZ2dsZS1idXR0b24KICAgICAgICBpZD0iZW5hYmxlQWxsU3RlcHNNb2RlVG9nZ2xlIgogICAgICAgIGNoZWNrZWQ9Int7YWxsU3RlcHNNb2RlRW5hYmxlZH19IgogICAgICA+CiAgICAgIDwvcGFwZXItdG9nZ2xlLWJ1dHRvbj4KICAgICAgPGgyPgogICAgICAgIFN0ZXAgb2YgSGVhbHRoIFBpbGxzOgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1thbGxTdGVwc01vZGVFbmFibGVkXV0iPgogICAgICAgICAgPGlucHV0CiAgICAgICAgICAgIHR5cGU9Im51bWJlciIKICAgICAgICAgICAgaWQ9ImhlYWx0aC1waWxsLXN0ZXAtbnVtYmVyLWlucHV0IgogICAgICAgICAgICBtaW49IjAiCiAgICAgICAgICAgIG1heD0iW1tfYmlnZ2VzdFN0ZXBFdmVyU2Vlbl1dIgogICAgICAgICAgICB2YWx1ZT0ie3tzcGVjaWZpY0hlYWx0aFBpbGxTdGVwOjppbnB1dH19IgogICAgICAgICAgLz4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shYWxsU3RlcHNNb2RlRW5hYmxlZF1dIj4KICAgICAgICAgIFtbX2N1cnJlbnRTdGVwRGlzcGxheVZhbHVlXV0KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDxwYXBlci1zcGlubmVyLWxpdGUKICAgICAgICAgIGFjdGl2ZQogICAgICAgICAgaGlkZGVuJD0iW1shYXJlSGVhbHRoUGlsbHNMb2FkaW5nXV0iCiAgICAgICAgICBpZD0iaGVhbHRoLXBpbGxzLWxvYWRpbmctc3Bpbm5lciIKICAgICAgICA+PC9wYXBlci1zcGlubmVyLWxpdGU+CiAgICAgIDwvaDI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1thbGxTdGVwc01vZGVFbmFibGVkXV0iPgogICAgICAgIDxwYXBlci1zbGlkZXIKICAgICAgICAgIGlkPSJoZWFsdGgtcGlsbC1zdGVwLXNsaWRlciIKICAgICAgICAgIGltbWVkaWF0ZS12YWx1ZT0ie3tzcGVjaWZpY0hlYWx0aFBpbGxTdGVwfX0iCiAgICAgICAgICBtYXg9IltbX2JpZ2dlc3RTdGVwRXZlclNlZW5dXSIKICAgICAgICAgIHNuYXBzCiAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgdmFsdWU9Int7c3BlY2lmaWNIZWFsdGhQaWxsU3RlcH19IgogICAgICAgID48L3BhcGVyLXNsaWRlcj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFhbGxTdGVwc01vZGVFbmFibGVkXV0iPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfbWF4U3RlcEluZGV4XV0iPgogICAgICAgICAgPHBhcGVyLXNsaWRlcgogICAgICAgICAgICBpZD0iaGVhbHRoLXBpbGwtc3RlcC1zbGlkZXIiCiAgICAgICAgICAgIGltbWVkaWF0ZS12YWx1ZT0ie3toZWFsdGhQaWxsU3RlcEluZGV4fX0iCiAgICAgICAgICAgIG1heD0iW1tfbWF4U3RlcEluZGV4XV0iCiAgICAgICAgICAgIHNuYXBzCiAgICAgICAgICAgIHN0ZXA9IjEiCiAgICAgICAgICAgIHZhbHVlPSJ7e2hlYWx0aFBpbGxTdGVwSW5kZXh9fSIKICAgICAgICAgID48L3BhcGVyLXNsaWRlcj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L3RlbXBsYXRlPgogICAgICA8aDI+CiAgICAgICAgSGVhbHRoIFBpbGwKICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbaGVhbHRoUGlsbFZhbHVlc0ZvclNlbGVjdGVkTm9kZV1dIj4KICAgICAgICAgIENvdW50cyBmb3IgU2VsZWN0ZWQgTm9kZQogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFoZWFsdGhQaWxsVmFsdWVzRm9yU2VsZWN0ZWROb2RlXV0iPgogICAgICAgICAgTGVnZW5kCiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9oMj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1toZWFsdGhQaWxsRW50cmllc11dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFsdGgtcGlsbC1lbnRyeSI+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJjb2xvci1wcmV2aWV3IgogICAgICAgICAgICBzdHlsZT0iYmFja2dyb3VuZDpbW2l0ZW0uYmFja2dyb3VuZF9jb2xvcl1dIgogICAgICAgICAgPjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGFiZWwiPltbaXRlbS5sYWJlbF1dPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ZW5zb3ItY291bnQiPgogICAgICAgICAgICBbW19jb21wdXRlVGVuc29yQ291bnRTdHJpbmcoaGVhbHRoUGlsbFZhbHVlc0ZvclNlbGVjdGVkTm9kZSwKICAgICAgICAgICAgaW5kZXgpXV0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgICA8ZGl2IGhpZGRlbiQ9IltbIV9oYXNEZWJ1Z2dlck51bWVyaWNBbGVydHMoZGVidWdnZXJOdW1lcmljQWxlcnRzKV1dIj4KICAgICAgICA8aDIgaWQ9Im51bWVyaWMtYWxlcnRzLWhlYWRlciI+TnVtZXJpYyBBbGVydHM8L2gyPgogICAgICAgIDxwPkFsZXJ0cyBhcmUgc29ydGVkIGZyb20gdG9wIHRvIGJvdHRvbSBieSBpbmNyZWFzaW5nIHRpbWVzdGFtcC48L3A+CiAgICAgICAgPGRpdiBpZD0ibnVtZXJpYy1hbGVydHMtdGFibGUtY29udGFpbmVyIj4KICAgICAgICAgIDx0YWJsZSBpZD0ibnVtZXJpYy1hbGVydHMtdGFibGUiPgogICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRoPkZpcnN0IE9mZmVuc2U8L3RoPgogICAgICAgICAgICAgICAgPHRoPlRlbnNvciAoRGV2aWNlKTwvdGg+CiAgICAgICAgICAgICAgICA8dGggaWQ9ImV2ZW50LWNvdW50cy10aCI+RXZlbnQgQ291bnRzPC90aD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICA8dGJvZHkgaWQ9Im51bWVyaWMtYWxlcnRzLWJvZHkiPjwvdGJvZHk+CiAgICAgICAgICA8L3RhYmxlPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPHRlbXBsYXRlCiAgICAgICAgaXM9ImRvbS1pZiIKICAgICAgICBpZj0iW1shX2hhc0RlYnVnZ2VyTnVtZXJpY0FsZXJ0cyhkZWJ1Z2dlck51bWVyaWNBbGVydHMpXV0iCiAgICAgID4KICAgICAgICA8cCBjbGFzcz0ibm8tbnVtZXJpYy1hbGVydHMtbm90aWZpY2F0aW9uIj4KICAgICAgICAgIE5vIG51bWVyaWMgYWxlcnRzIHNvIGZhci4gVGhhdCBpcyBsaWtlbHkgZ29vZC4gQWxlcnRzIGluZGljYXRlIHRoZQogICAgICAgICAgcHJlc2VuY2Ugb2YgTmFOIG9yICgrLy0pIEluZmluaXR5IHZhbHVlcywgd2hpY2ggbWF5IGJlIGNvbmNlcm5pbmcuCiAgICAgICAgPC9wPgogICAgICA8L3RlbXBsYXRlPgogICAgPC9wYXBlci1tYXRlcmlhbD4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGxvKV0sY28ucHJvdG90eXBlLCJyZW5kZXJIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheSxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sY28ucHJvdG90eXBlLCJkZWJ1Z2dlck51bWVyaWNBbGVydHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sY28ucHJvdG90eXBlLCJub2RlTmFtZXNUb0hlYWx0aFBpbGxzIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxjby5wcm90b3R5cGUsImhlYWx0aFBpbGxTdGVwSW5kZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLGNvLnByb3RvdHlwZSwic3BlY2lmaWNIZWFsdGhQaWxsU3RlcCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sY28ucHJvdG90eXBlLCJzZWxlY3RlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGNvLnByb3RvdHlwZSwiaGlnaGxpZ2h0ZWROb2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxjby5wcm90b3R5cGUsInNlbGVjdGVkTm9kZUluY2x1ZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGNvLnByb3RvdHlwZSwiYXJlSGVhbHRoUGlsbHNMb2FkaW5nIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxjby5wcm90b3R5cGUsImhlYWx0aFBpbGxFbnRyaWVzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sY28ucHJvdG90eXBlLCJhbGxTdGVwc01vZGVFbmFibGVkIix2b2lkIDApO0UoW1J0KCJub2RlTmFtZXNUb0hlYWx0aFBpbGxzIiwiaGVhbHRoUGlsbFN0ZXBJbmRleCIsInNlbGVjdGVkTm9kZSIsImFsbFN0ZXBzTW9kZUVuYWJsZWQiLCJhcmVIZWFsdGhQaWxsc0xvYWRpbmciKSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxjby5wcm90b3R5cGUsImhlYWx0aFBpbGxWYWx1ZXNGb3JTZWxlY3RlZE5vZGUiLG51bGwpO0UoW1J0KCJub2RlTmFtZXNUb0hlYWx0aFBpbGxzIiwiaGVhbHRoUGlsbFN0ZXBJbmRleCIsImFsbFN0ZXBzTW9kZUVuYWJsZWQiLCJzcGVjaWZpY0hlYWx0aFBpbGxTdGVwIiwiYXJlSGVhbHRoUGlsbHNMb2FkaW5nIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sY28ucHJvdG90eXBlLCJfY3VycmVudFN0ZXBEaXNwbGF5VmFsdWUiLG51bGwpO0UoW1J0KCJub2RlTmFtZXNUb0hlYWx0aFBpbGxzIiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sY28ucHJvdG90eXBlLCJfYmlnZ2VzdFN0ZXBFdmVyU2VlbiIsbnVsbCk7RShbUnQoIm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMiKSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxjby5wcm90b3R5cGUsIl9tYXhTdGVwSW5kZXgiLG51bGwpO0UoW0J0KCJkZWJ1Z2dlck51bWVyaWNBbGVydHMiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGNvLnByb3RvdHlwZSwiX3VwZGF0ZUFsZXJ0c0xpc3QiLG51bGwpO2NvPUUoW3l0KCJ0Zi1ncmFwaC1kZWJ1Z2dlci1kYXRhLWNhcmQiKV0sY28pO3ZhciBvY3Q9e307WnMob2N0LHtHcmFwaEljb25UeXBlOigpPT5pMX0pO3ZhciBpMTsoZnVuY3Rpb24oZSl7ZS5DT05TVD0iQ09OU1QiLGUuTUVUQT0iTUVUQSIsZS5PUD0iT1AiLGUuU0VSSUVTPSJTRVJJRVMiLGUuU1VNTUFSWT0iU1VNTUFSWSJ9KShpMXx8KGkxPXt9KSk7dmFyIFp1PWNsYXNzIGV4dGVuZHMgR3QoX28obXQpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy52ZXJ0aWNhbD0hMSx0aGlzLmZpbGxPdmVycmlkZT1udWxsLHRoaXMuc3Ryb2tlT3ZlcnJpZGU9bnVsbCx0aGlzLmhlaWdodD0yMCx0aGlzLmZhZGVkPSExfWdldFN2Z0RlZmluYWJsZUVsZW1lbnQoKXtyZXR1cm4gdGhpcy4kLnN2Z0RlZnN9Z2V0IF9maWxsKCl7dmFyIHQ9dGhpcy50eXBlLHI9dGhpcy5maWxsT3ZlcnJpZGU7aWYociE9bnVsbClyZXR1cm4gcjtzd2l0Y2godCl7Y2FzZSBpMS5NRVRBOnJldHVybiBLdS5ERUZBVUxUX0ZJTEw7Y2FzZSBpMS5TRVJJRVM6cmV0dXJuIFZsdC5ERUZBVUxUX0ZJTEw7ZGVmYXVsdDpyZXR1cm4gdjAuREVGQVVMVF9GSUxMfX1nZXQgX3N0cm9rZSgpe3ZhciB0PXRoaXMudHlwZSxyPXRoaXMuc3Ryb2tlT3ZlcnJpZGU7aWYociE9bnVsbClyZXR1cm4gcjtzd2l0Y2godCl7Y2FzZSBpMS5NRVRBOnJldHVybiBLdS5ERUZBVUxUX1NUUk9LRTtjYXNlIGkxLlNFUklFUzpyZXR1cm4gVmx0LkRFRkFVTFRfU1RST0tFO2RlZmF1bHQ6cmV0dXJuIHYwLkRFRkFVTFRfU1RST0tFfX1faXNUeXBlKHQscil7cmV0dXJuIHQ9PT1yfV9mYWRlZENsYXNzKHQscil7cmV0dXJuIHQ/ImZhZGVkLSIrcjoiIn19O1p1LnRlbXBsYXRlPVFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBmb250LXNpemU6IDA7CiAgICAgIH0KCiAgICAgIDpob3N0KC5kYXJrLW1vZGUpIHN2ZyB7CiAgICAgICAgZmlsdGVyOiBpbnZlcnQoMSk7CiAgICAgIH0KCiAgICAgIC5mYWRlZC1yZWN0IHsKICAgICAgICBmaWxsOiB1cmwoI3JlY3RIYXRjaCk7CiAgICAgIH0KCiAgICAgIC5mYWRlZC1lbGxpcHNlIHsKICAgICAgICBmaWxsOiB1cmwoI2VsbGlwc2VIYXRjaCk7CiAgICAgIH0KCiAgICAgIC5mYWRlZC1yZWN0LAogICAgICAuZmFkZWQtZWxsaXBzZSwKICAgICAgLmZhZGVkLXNlcmllcyB7CiAgICAgICAgc3Ryb2tlOiB2YXIoLS10Yi1ncmFwaC1mYWRlZCkgIWltcG9ydGFudDsKICAgICAgfQogICAgICAjcmVjdEhhdGNoIGxpbmUsCiAgICAgICNlbGxpcHNlSGF0Y2ggbGluZSB7CiAgICAgICAgY29sb3I6ICNlMGQ0YjMgIWltcG9ydGFudDsKICAgICAgICBmaWxsOiB3aGl0ZTsKICAgICAgICBzdHJva2U6ICNlMGQ0YjMgIWltcG9ydGFudDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDwhLS0gU1ZHIGZvciBkZWZpbml0aW9ucyAtLT4KICAgIDxzdmcgaGVpZ2h0PSIwIiB3aWR0aD0iMCIgaWQ9InN2Z0RlZnMiPgogICAgICA8ZGVmcz4KICAgICAgICA8IS0tIEhhdGNoIHBhdHRlcm5zIGZvciBmYWRlZCBvdXQgbm9kZXMuIC0tPgogICAgICAgIDxwYXR0ZXJuCiAgICAgICAgICBpZD0icmVjdEhhdGNoIgogICAgICAgICAgcGF0dGVyblRyYW5zZm9ybT0icm90YXRlKDQ1IDAgMCkiCiAgICAgICAgICB3aWR0aD0iNSIKICAgICAgICAgIGhlaWdodD0iNSIKICAgICAgICAgIHBhdHRlcm5Vbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICAgPgogICAgICAgICAgPGxpbmUgeDE9IjAiIHkxPSIwIiB4Mj0iMCIgeTI9IjUiIHN0eWxlPSJzdHJva2Utd2lkdGg6IDEiPjwvbGluZT4KICAgICAgICA8L3BhdHRlcm4+CiAgICAgICAgPHBhdHRlcm4KICAgICAgICAgIGlkPSJlbGxpcHNlSGF0Y2giCiAgICAgICAgICBwYXR0ZXJuVHJhbnNmb3JtPSJyb3RhdGUoNDUgMCAwKSIKICAgICAgICAgIHdpZHRoPSIyIgogICAgICAgICAgaGVpZ2h0PSIyIgogICAgICAgICAgcGF0dGVyblVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgICA+CiAgICAgICAgICA8bGluZSB4MT0iMCIgeTE9IjAiIHgyPSIwIiB5Mj0iMiIgc3R5bGU9InN0cm9rZS13aWR0aDogMSI+PC9saW5lPgogICAgICAgIDwvcGF0dGVybj4KICAgICAgICA8IS0tIFRlbXBsYXRlIGZvciBhbiBPcCBub2RlIGVsbGlwc2UuIC0tPgogICAgICAgIDxlbGxpcHNlCiAgICAgICAgICBpZD0ib3Atbm9kZS1zdGFtcCIKICAgICAgICAgIHJ4PSI3LjUiCiAgICAgICAgICByeT0iMyIKICAgICAgICAgIHN0cm9rZT0iaW5oZXJpdCIKICAgICAgICAgIGZpbGw9ImluaGVyaXQiCiAgICAgICAgPjwvZWxsaXBzZT4KICAgICAgICA8IS0tIFRlbXBsYXRlIGZvciBhbiBPcCBub2RlIGFubm90YXRpb24gZWxsaXBzZSAoc21hbGxlcikuIC0tPgogICAgICAgIDxlbGxpcHNlCiAgICAgICAgICBpZD0ib3Atbm9kZS1hbm5vdGF0aW9uLXN0YW1wIgogICAgICAgICAgcng9IjUiCiAgICAgICAgICByeT0iMiIKICAgICAgICAgIHN0cm9rZT0iaW5oZXJpdCIKICAgICAgICAgIGZpbGw9ImluaGVyaXQiCiAgICAgICAgPjwvZWxsaXBzZT4KICAgICAgICA8IS0tIFZlcnRpY2FsbHkgc3RhY2tlZCBzZXJpZXMgb2YgT3Agbm9kZXMgd2hlbiB1bmV4cGFuZGVkLiAtLT4KICAgICAgICA8ZyBpZD0ib3Atc2VyaWVzLXZlcnRpY2FsLXN0YW1wIj4KICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjgiIHk9IjkiPjwvdXNlPgogICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iNiI+PC91c2U+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSI4IiB5PSIzIj48L3VzZT4KICAgICAgICA8L2c+CiAgICAgICAgPGcgaWQ9Im9wLXNlcmllcy1ob3Jpem9udGFsLXN0YW1wIj4KICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjE2IiB5PSI0Ij48L3VzZT4KICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjEyIiB5PSI0Ij48L3VzZT4KICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjgiIHk9IjQiPjwvdXNlPgogICAgICAgIDwvZz4KICAgICAgICA8ZwogICAgICAgICAgaWQ9InN1bW1hcnktaWNvbiIKICAgICAgICAgIGZpbGw9IiM4NDg0ODQiCiAgICAgICAgICBoZWlnaHQ9IjEyIgogICAgICAgICAgdmlld0JveD0iMCAwIDI0IDI0IgogICAgICAgICAgd2lkdGg9IjEyIgogICAgICAgID4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnpNOSAxN0g3di03aDJ2N3ptNCAwaC0yVjdoMnYxMHptNCAwaC0ydi00aDJ2NHoiCiAgICAgICAgICA+PC9wYXRoPgogICAgICAgIDwvZz4KICAgICAgPC9kZWZzPgogICAgPC9zdmc+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzVHlwZSh0eXBlLCAnQ09OU1QnKV1dIj4KICAgICAgPHN2ZwogICAgICAgIGhlaWdodCQ9IltbaGVpZ2h0XV0iCiAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pbllNaWQgbWVldCIKICAgICAgICB2aWV3Qm94PSIwIDAgMTAgMTAiCiAgICAgID4KICAgICAgICA8Y2lyY2xlCiAgICAgICAgICBjeD0iNSIKICAgICAgICAgIGN5PSI1IgogICAgICAgICAgcj0iMyIKICAgICAgICAgIGZpbGwkPSJbW19maWxsXV0iCiAgICAgICAgICBzdHJva2UkPSJbW19zdHJva2VdXSIKICAgICAgICA+PC9jaXJjbGU+CiAgICAgIDwvc3ZnPgogICAgPC90ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNUeXBlKHR5cGUsICdTVU1NQVJZJyldXSI+CiAgICAgIDxzdmcKICAgICAgICB3aWR0aCQ9IltbaGVpZ2h0XV0iCiAgICAgICAgaGVpZ2h0JD0iW1toZWlnaHRdXSIKICAgICAgICB2aWV3Qm94PSIwIDAgMjQgMjQiCiAgICAgICAgZmlsbD0iIzg0ODQ4NCIKICAgICAgPgogICAgICAgIDxwYXRoCiAgICAgICAgICBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6TTkgMTdIN3YtN2gydjd6bTQgMGgtMlY3aDJ2MTB6bTQgMGgtMnYtNGgydjR6IgogICAgICAgID48L3BhdGg+CiAgICAgIDwvc3ZnPgogICAgPC90ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNUeXBlKHR5cGUsICdPUCcpXV0iPgogICAgICA8c3ZnCiAgICAgICAgaGVpZ2h0JD0iW1toZWlnaHRdXSIKICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pZCBtZWV0IgogICAgICAgIHZpZXdCb3g9IjAgMCAxNiA4IgogICAgICA+CiAgICAgICAgPHVzZQogICAgICAgICAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiCiAgICAgICAgICB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIKICAgICAgICAgIGZpbGwkPSJbW19maWxsXV0iCiAgICAgICAgICBzdHJva2UkPSJbW19zdHJva2VdXSIKICAgICAgICAgIGNsYXNzJD0ie3tfZmFkZWRDbGFzcyhmYWRlZCwgJ2VsbGlwc2UnKX19IgogICAgICAgICAgeD0iOCIKICAgICAgICAgIHk9IjQiCiAgICAgICAgPjwvdXNlPgogICAgICA8L3N2Zz4KICAgIDwvdGVtcGxhdGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzVHlwZSh0eXBlLCAnTUVUQScpXV0iPgogICAgICA8c3ZnCiAgICAgICAgaGVpZ2h0JD0iW1toZWlnaHRdXSIKICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pZCBtZWV0IgogICAgICAgIHZpZXdCb3g9IjAgMCAzNyAxNiIKICAgICAgPgogICAgICAgIDxyZWN0CiAgICAgICAgICB4PSIxIgogICAgICAgICAgeT0iMSIKICAgICAgICAgIGZpbGwkPSJbW19maWxsXV0iCiAgICAgICAgICBzdHJva2UkPSJbW19zdHJva2VdXSIKICAgICAgICAgIGNsYXNzJD0ie3tfZmFkZWRDbGFzcyhmYWRlZCwgJ3JlY3QnKX19IgogICAgICAgICAgc3Ryb2tlLXdpZHRoPSIycHgiCiAgICAgICAgICBoZWlnaHQ9IjE0IgogICAgICAgICAgd2lkdGg9IjM1IgogICAgICAgICAgcng9IjUiCiAgICAgICAgICByeT0iNSIKICAgICAgICA+PC9yZWN0PgogICAgICA8L3N2Zz4KICAgIDwvdGVtcGxhdGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzVHlwZSh0eXBlLCAnU0VSSUVTJyldXSI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1t2ZXJ0aWNhbF1dIj4KICAgICAgICA8c3ZnCiAgICAgICAgICBoZWlnaHQkPSJbW2hlaWdodF1dIgogICAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pbllNaWQgbWVldCIKICAgICAgICAgIHZpZXdCb3g9IjAgMCAxNiAxNSIKICAgICAgICA+CiAgICAgICAgICA8dXNlCiAgICAgICAgICAgIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgogICAgICAgICAgICB4bGluazpocmVmPSIjb3Atc2VyaWVzLXZlcnRpY2FsLXN0YW1wIgogICAgICAgICAgICBmaWxsJD0iW1tfZmlsbF1dIgogICAgICAgICAgICBzdHJva2UkPSJbW19zdHJva2VdXSIKICAgICAgICAgICAgY2xhc3MkPSJ7e19mYWRlZENsYXNzKGZhZGVkLCAnc2VyaWVzJyl9fSIKICAgICAgICAgICAgeD0iMCIKICAgICAgICAgICAgeT0iMiIKICAgICAgICAgID48L3VzZT4KICAgICAgICA8L3N2Zz4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyF2ZXJ0aWNhbF1dIj4KICAgICAgICA8c3ZnCiAgICAgICAgICBoZWlnaHQkPSJbW2hlaWdodF1dIgogICAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pbllNaWQgbWVldCIKICAgICAgICAgIHZpZXdCb3g9IjAgMCAyNCAxMCIKICAgICAgICA+CiAgICAgICAgICA8dXNlCiAgICAgICAgICAgIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgogICAgICAgICAgICB4bGluazpocmVmPSIjb3Atc2VyaWVzLWhvcml6b250YWwtc3RhbXAiCiAgICAgICAgICAgIGZpbGwkPSJbW19maWxsXV0iCiAgICAgICAgICAgIHN0cm9rZSQ9IltbX3N0cm9rZV1dIgogICAgICAgICAgICBjbGFzcyQ9Int7X2ZhZGVkQ2xhc3MoZmFkZWQsICdzZXJpZXMnKX19IgogICAgICAgICAgICB4PSIwIgogICAgICAgICAgICB5PSIxIgogICAgICAgICAgPjwvdXNlPgogICAgICAgIDwvc3ZnPgogICAgICA8L3RlbXBsYXRlPgogICAgPC90ZW1wbGF0ZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFp1LnByb3RvdHlwZSwidHlwZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFp1LnByb3RvdHlwZSwidmVydGljYWwiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sWnUucHJvdG90eXBlLCJmaWxsT3ZlcnJpZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sWnUucHJvdG90eXBlLCJzdHJva2VPdmVycmlkZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxadS5wcm90b3R5cGUsImhlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFp1LnByb3RvdHlwZSwiZmFkZWQiLHZvaWQgMCk7RShbUnQoInR5cGUiLCJmaWxsT3ZlcnJpZGUiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxadS5wcm90b3R5cGUsIl9maWxsIixudWxsKTtFKFtSdCgidHlwZSIsInN0cm9rZU92ZXJyaWRlIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sWnUucHJvdG90eXBlLCJfc3Ryb2tlIixudWxsKTtadT1FKFt5dCgidGYtZ3JhcGgtaWNvbiIpXSxadSk7dmFyIEhzPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLm5vZGU9bnVsbCx0aGlzLnJlbmRlckluZm89bnVsbCx0aGlzLmNvbG9yQnk9R24uU1RSVUNUVVJFLHRoaXMudGVtcGxhdGVJbmRleD1udWxsLHRoaXMudHlwZT1udWxsLHRoaXMudmVydGljYWw9ITEsdGhpcy5jb25zdD0hMSx0aGlzLnN1bW1hcnk9ITEsdGhpcy5maWxsPW51bGwsdGhpcy5oZWlnaHQ9MjB9X2NvbXB1dGVGaWxsT3ZlcnJpZGUodCxyLG4saSxvKXtyZXR1cm4gdCYmciYmaT9rSChpLG4sciwhMSk6b31fZ2V0U3Ryb2tlT3ZlcnJpZGUodCl7cmV0dXJuIHQ/dGN0KHQpOm51bGx9X2dldFR5cGUodCxyLG4saSl7bGV0e0dyYXBoSWNvblR5cGU6b309b2N0O2lmKHQpc3dpdGNoKHQudHlwZSl7Y2FzZSBqdC5PUDp7bGV0IGE9dC5vcDtyZXR1cm4gdHlwZW9mIGEhPSJzdHJpbmciP28uT1A6YT09PSJDb25zdCJ8fG4/by5DT05TVDphLmVuZHNXaXRoKCJTdW1tYXJ5Iil8fHI/by5TVU1NQVJZOm8uT1B9Y2FzZSBqdC5NRVRBOnJldHVybiBvLk1FVEE7Y2FzZSBqdC5TRVJJRVM6cmV0dXJuIG8uU0VSSUVTfXJldHVybiBpfV9pc1ZlcnRpY2FsKHQscil7cmV0dXJuIHQ/dC5oYXNOb25Db250cm9sRWRnZXM6ISFyfV9nZXRGYWRlZCh0KXtyZXR1cm4gdCYmdC5pc0ZhZGVkT3V0fV9vbkZpbGxPdmVycmlkZUNoYW5nZWQodCxyKXtsZXR7bm9kZTpuLHJlbmRlckluZm86aSxjb2xvckJ5Om8sdGVtcGxhdGVJbmRleDphfT10aGlzO3QhPT1yJiZMSCh0aGlzLiQuaWNvbi5nZXRTdmdEZWZpbmFibGVFbGVtZW50KCkpLG4mJmkmJmEmJmtIKGEsbyxpLCExLHRoaXMuJC5pY29uLmdldFN2Z0RlZmluYWJsZUVsZW1lbnQoKSl9fTtIcy50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICB0Zi1ncmFwaC1pY29uIHsKICAgICAgICAtLXRiLWdyYXBoLWZhZGVkOiB2YXIoLS10Yi1ncmFwaC1mYWRlZCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8dGYtZ3JhcGgtaWNvbgogICAgICBpZD0iaWNvbiIKICAgICAgdHlwZT0iW1tfZ2V0VHlwZShub2RlLCBzdW1tYXJ5LCBjb25zdCwgdHlwZSldXSIKICAgICAgaGVpZ2h0PSJbW2hlaWdodF1dIgogICAgICBmaWxsLW92ZXJyaWRlPSJbW19maWxsT3ZlcnJpZGVdXSIKICAgICAgc3Ryb2tlLW92ZXJyaWRlPSJbW19nZXRTdHJva2VPdmVycmlkZShfZmlsbE92ZXJyaWRlKV1dIgogICAgICBmYWRlZD0iW1tfZ2V0RmFkZWQocmVuZGVySW5mbyldXSIKICAgICAgdmVydGljYWw9IltbX2lzVmVydGljYWwobm9kZSwgdmVydGljYWwpXV0iCiAgICA+PC90Zi1ncmFwaC1pY29uPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSHMucHJvdG90eXBlLCJub2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhzLnByb3RvdHlwZSwicmVuZGVySW5mbyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxIcy5wcm90b3R5cGUsImNvbG9yQnkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSHMucHJvdG90eXBlLCJ0ZW1wbGF0ZUluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhzLnByb3RvdHlwZSwidHlwZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEhzLnByb3RvdHlwZSwidmVydGljYWwiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxIcy5wcm90b3R5cGUsImNvbnN0Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSHMucHJvdG90eXBlLCJzdW1tYXJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhzLnByb3RvdHlwZSwiZmlsbCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxIcy5wcm90b3R5cGUsImhlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVGaWxsT3ZlcnJpZGUobm9kZSwgcmVuZGVySW5mbywgY29sb3JCeSwgdGVtcGxhdGVJbmRleCwgZmlsbCkiLG9ic2VydmVyOiJfb25GaWxsT3ZlcnJpZGVDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxIcy5wcm90b3R5cGUsIl9maWxsT3ZlcnJpZGUiLHZvaWQgMCk7SHM9RShbeXQoInRmLW5vZGUtaWNvbiIpXSxIcyk7dmFyIEdjPWNsYXNzIGV4dGVuZHMgR3QobXQpe19pdGVtVHlwZUNoYW5nZWQoKXt0aGlzLml0ZW1UeXBlIT09InN1Ym5vZGUiP3RoaXMuJFsibGlzdC1pdGVtIl0uY2xhc3NMaXN0LmFkZCgiY2xpY2thYmxlIik6dGhpcy4kWyJsaXN0LWl0ZW0iXS5jbGFzc0xpc3QucmVtb3ZlKCJjbGlja2FibGUiKX1fbm9kZUxpc3RlbmVyKHQpe3RoaXMuZmlyZSgibm9kZS1saXN0LWl0ZW0tIit0LnR5cGUse25vZGVOYW1lOnRoaXMubmFtZSx0eXBlOnRoaXMuaXRlbVR5cGV9KX1fZmFkZWRDbGFzcyh0KXtyZXR1cm4gdCYmdC5pc0ZhZGVkT3V0PyJmYWRlZCI6IiJ9fTtHYy50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICAjbGlzdC1pdGVtIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIGZvbnQtc2l6ZTogMTFwdDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgICNsaXN0LWl0ZW06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWdvb2dsZS15ZWxsb3ctMTAwKTsKICAgICAgfQoKICAgICAgLmNsaWNrYWJsZSB7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CgogICAgICAjbGlzdC1pdGVtIHNwYW4gewogICAgICAgIG1hcmdpbi1sZWZ0OiA0MHB4OwogICAgICB9CgogICAgICAjbGlzdC1pdGVtLmV4Y2x1ZGVkIHNwYW4gewogICAgICAgIGNvbG9yOiAjOTk5OwogICAgICB9CgogICAgICAjbGlzdC1pdGVtIHNwYW4uZWRnZS1sYWJlbCB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBtYXJnaW4tbGVmdDogM3B4OwogICAgICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgICB9CgogICAgICAubm9kZS1pY29uIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAxcHg7CiAgICAgICAgbGVmdDogMnB4OwogICAgICB9CgogICAgICAuZmFkZWQgc3BhbiB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWdyYXBoLWZhZGVkKTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2CiAgICAgIGlkPSJsaXN0LWl0ZW0iCiAgICAgIG9uLW1vdXNlb3Zlcj0iX25vZGVMaXN0ZW5lciIKICAgICAgb24tbW91c2VvdXQ9Il9ub2RlTGlzdGVuZXIiCiAgICAgIG9uLWNsaWNrPSJfbm9kZUxpc3RlbmVyIgogICAgPgogICAgICA8ZGl2IGNsYXNzJD0ie3tfZmFkZWRDbGFzcyhpdGVtUmVuZGVySW5mbyl9fSI+CiAgICAgICAgPHRmLW5vZGUtaWNvbgogICAgICAgICAgY2xhc3M9Im5vZGUtaWNvbiIKICAgICAgICAgIGhlaWdodD0iMTIiCiAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgICBjb2xvci1ieS1wYXJhbXM9IltbY29sb3JCeVBhcmFtc11dIgogICAgICAgICAgbm9kZT0iW1tpdGVtTm9kZV1dIgogICAgICAgICAgcmVuZGVyLWluZm89IltbaXRlbVJlbmRlckluZm9dXSIKICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW3RlbXBsYXRlSW5kZXhdXSIKICAgICAgICA+CiAgICAgICAgPC90Zi1ub2RlLWljb24+CiAgICAgICAgPHNwYW4gdGl0bGUkPSJbW25hbWVdXSI+W1tuYW1lXV08L3NwYW4+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxHYy5wcm90b3R5cGUsImNhcmROb2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEdjLnByb3RvdHlwZSwiaXRlbU5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sR2MucHJvdG90eXBlLCJlZGdlTGFiZWwiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sR2MucHJvdG90eXBlLCJpdGVtUmVuZGVySW5mbyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxHYy5wcm90b3R5cGUsIm5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsb2JzZXJ2ZXI6Il9pdGVtVHlwZUNoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEdjLnByb3RvdHlwZSwiaXRlbVR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sR2MucHJvdG90eXBlLCJjb2xvckJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEdjLnByb3RvdHlwZSwiY29sb3JCeVBhcmFtcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLEdjLnByb3RvdHlwZSwidGVtcGxhdGVJbmRleCIsdm9pZCAwKTtHYz1FKFt5dCgidGYtZ3JhcGgtb3AtY29tcGF0LWxpc3QtaXRlbSIpXSxHYyk7dmFyIHNzPWNsYXNzIGV4dGVuZHMgR3QoX28obXQpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fZXhwYW5kZWQ9ITAsdGhpcy5fb3BDb21wYXRDb2xvcj12MC5DT01QQVRJQkxFLHRoaXMuX29wSW5jb21wYXRDb2xvcj12MC5JTkNPTVBBVElCTEUsdGhpcy5fdGVtcGxhdGVJbmRleD1udWxsfV9nZXROb2RlKHQscil7cmV0dXJuIHIubm9kZSh0KX1fZ2V0UmVuZGVySW5mbyh0LHIpe3JldHVybiB0aGlzLnJlbmRlckhpZXJhcmNoeS5nZXRPckNyZWF0ZVJlbmRlck5vZGVCeU5hbWUodCl9X3RvZ2dsZUV4cGFuZGVkKCl7dGhpcy5fZXhwYW5kZWQ9IXRoaXMuX2V4cGFuZGVkfV9nZXRUb2dnbGVJY29uKHQpe3JldHVybiB0PyJleHBhbmQtbGVzcyI6ImV4cGFuZC1tb3JlIn1fcmVzaXplTGlzdCh0KXt2YXIgcj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQpO3ImJnIuZmlyZSgiaXJvbi1yZXNpemUiKX1nZXQgX2luY29tcGF0aWJsZU9wTm9kZXMoKXtsZXQgdD10aGlzLmdyYXBoSGllcmFyY2h5O3JldHVybiF0fHwhdC5yb290P1tdOih0aGlzLmFzeW5jKHRoaXMuX3Jlc2l6ZUxpc3QuYmluZCh0aGlzLCIjaW5jb21wYXRpYmxlT3BzTGlzdCIpKSxkbGUodCkpfWdldCBfb3BDb21wYXRTY29yZSgpe3ZhciB0PXRoaXMuZ3JhcGhIaWVyYXJjaHk7aWYodCYmdC5yb290KXt2YXIgcj10LnJvb3Qsbj1yLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZSxpPXIuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU7aWYobj09MCYmaT09MClyZXR1cm4gMDt2YXIgbz1uK2k7cmV0dXJuIE1hdGguZmxvb3IoMTAwKm4vbykvMTAwfXJldHVybiAwfWdldCBfb3BDb21wYXRTY29yZUxhYmVsKCl7dmFyIHQ9dGhpcy5fb3BDb21wYXRTY29yZTtyZXR1cm4geG4oIi4wJSIpKHQpfWdldCBfdG90YWxJbmNvbXBhdE9wcygpe3ZhciB0PXRoaXMuZ3JhcGhIaWVyYXJjaHk7cmV0dXJuIHQmJnQucm9vdD90LnJvb3QuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU6MH1fZ3JhcGhIaWVyYXJjaHlDaGFuZ2VkKCl7dGhpcy5fdGVtcGxhdGVJbmRleD10aGlzLmdyYXBoSGllcmFyY2h5LmdldFRlbXBsYXRlSW5kZXgoKSx0aGlzLmdyYXBoSGllcmFyY2h5LmFkZExpc3RlbmVyKE9kLlRFTVBMQVRFU19VUERBVEVELCgpPT57dGhpcy5fdGVtcGxhdGVJbmRleD10aGlzLmdyYXBoSGllcmFyY2h5LmdldFRlbXBsYXRlSW5kZXgoKX0pfX07c3MudGVtcGxhdGU9UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIG1heC1oZWlnaHQ6IDUwMHB4OwogICAgICB9CgogICAgICAuaW5jb21wYXRpYmxlLW9wcy1saXN0IHsKICAgICAgICBoZWlnaHQ6IDM1MHB4OwogICAgICAgIG1heC1oZWlnaHQ6IDQwMHB4OwogICAgICAgIG92ZXJmbG93LXk6IHNjcm9sbDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIH0KCiAgICAgIGlyb24tbGlzdCB7CiAgICAgICAgZmxleDogMSAxIGF1dG87CiAgICAgIH0KCiAgICAgIHBhcGVyLWl0ZW0gewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc2Vjb25kYXJ5LWJhY2tncm91bmQtY29sb3IpOwogICAgICB9CgogICAgICBwYXBlci1pdGVtLWJvZHlbdHdvLWxpbmVdIHsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4IDRweDsKICAgICAgfQoKICAgICAgLmV4cGFuZGVkSW5mbyB7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBmb250LXNpemU6IDEycHQ7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5ub2RlLW5hbWUgewogICAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICAgIGZvbnQtc2l6ZTogMTRwdDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CgogICAgICAuc3VidGl0bGUgewogICAgICAgIGNvbG9yOiB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgZm9udC1zaXplOiAxMnB0OwogICAgICB9CgogICAgICAudG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIG1heC1oZWlnaHQ6IDIwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAyMHB4OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC5ub24tY29udHJvbC1saXN0LWl0ZW0gewogICAgICAgIHBhZGRpbmctbGVmdDogMTBweDsKICAgICAgfQoKICAgICAgZGl2Lm9wLWNvbXBhdC1kaXNwbGF5IHsKICAgICAgICBtYXJnaW4tdG9wOiAxMHB4OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFNhZGx5LCBiZWNhdXNlIHRoZSB3aG9sZSBib2R5IGlzIGludmVydGVkIGluIGNvbG9yLCBsZWdlbmRzIGFsc28gbmVlZAogICAgICAgKiB0byBiZSBpbnZlcnRlZC4KICAgICAgICoqLwogICAgICA6aG9zdCguZGFyay1tb2RlKSBkaXYub3AtY29tcGF0LWRpc3BsYXkgewogICAgICAgIGZpbHRlcjogaW52ZXJ0KDEpOwogICAgICB9CgogICAgICBzdmcub3AtY29tcGF0IHsKICAgICAgICB3aWR0aDogMjUwcHg7CiAgICAgICAgaGVpZ2h0OiAyNXB4OwogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICB9CgogICAgICBkaXYub3AtY29tcGF0LXZhbHVlIHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogYmxhY2s7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHBhcGVyLWl0ZW0+CiAgICAgIDxwYXBlci1pdGVtLWJvZHkgdHdvLWxpbmU+CiAgICAgICAgPGRpdj4KICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgICAgICBpY29uPSJ7e19nZXRUb2dnbGVJY29uKF9leHBhbmRlZCl9fSIKICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVFeHBhbmRlZCIKICAgICAgICAgICAgY2xhc3M9InRvZ2dsZS1idXR0b24iCiAgICAgICAgICA+CiAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgPGRpdiBjbGFzcz0ibm9kZS1uYW1lIiBpZD0ibm9kZXRpdGxlIj5bW25vZGVUaXRsZV1dPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBzZWNvbmRhcnk+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWJ0aXRsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im9wLWNvbXBhdC1kaXNwbGF5Ij4KICAgICAgICAgICAgICA8c3ZnCiAgICAgICAgICAgICAgICBjbGFzcz0ib3AtY29tcGF0IgogICAgICAgICAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pbllNaWQgbWVldCIKICAgICAgICAgICAgICAgIHZpZXdCb3g9IjAgMCAyNTAgMjUiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPGRlZnM+CiAgICAgICAgICAgICAgICAgIDxsaW5lYXJHcmFkaWVudCBpZD0ib3AtY29tcGF0LWZpbGwiPgogICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvciQ9IltbX29wQ29tcGF0Q29sb3JdXSI+PC9zdG9wPgogICAgICAgICAgICAgICAgICAgIDxzdG9wCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQkPSJbW19vcENvbXBhdFNjb3JlXV0iCiAgICAgICAgICAgICAgICAgICAgICBzdG9wLWNvbG9yJD0iW1tfb3BDb21wYXRDb2xvcl1dIgogICAgICAgICAgICAgICAgICAgID48L3N0b3A+CiAgICAgICAgICAgICAgICAgICAgPHN0b3AKICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCQ9IltbX29wQ29tcGF0U2NvcmVdXSIKICAgICAgICAgICAgICAgICAgICAgIHN0b3AtY29sb3IkPSJbW19vcEluY29tcGF0Q29sb3JdXSIKICAgICAgICAgICAgICAgICAgICA+PC9zdG9wPgogICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvciQ9IltbX29wSW5jb21wYXRDb2xvciBdXSI+PC9zdG9wPgogICAgICAgICAgICAgICAgICA8L2xpbmVhckdyYWRpZW50PgogICAgICAgICAgICAgICAgPC9kZWZzPgogICAgICAgICAgICAgICAgPHJlY3QKICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIyNSIKICAgICAgICAgICAgICAgICAgd2lkdGg9IjI1MCIKICAgICAgICAgICAgICAgICAgcng9IjUiCiAgICAgICAgICAgICAgICAgIHJ5PSI1IgogICAgICAgICAgICAgICAgICBzdHlsZT0iZmlsbDogdXJsKCcjb3AtY29tcGF0LWZpbGwnKTsiCiAgICAgICAgICAgICAgICA+PC9yZWN0PgogICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im9wLWNvbXBhdC12YWx1ZSI+W1tfb3BDb21wYXRTY29yZUxhYmVsXV08L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9wYXBlci1pdGVtLWJvZHk+CiAgICA8L3BhcGVyLWl0ZW0+CgogICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJ7e19leHBhbmRlZH19Ij4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJ7e19leHBhbmRlZH19IiByZXN0YW1wPSJ0cnVlIj4KICAgICAgICA8ZGl2IGNsYXNzPSJleHBhbmRlZEluZm8iPgogICAgICAgICAgSW5jb21wYXRpYmxlIE9wZXJhdGlvbnM6ICg8c3Bhbj5bW190b3RhbEluY29tcGF0T3BzXV08L3NwYW4+KQogICAgICAgICAgPGlyb24tbGlzdAogICAgICAgICAgICBjbGFzcz0iaW5jb21wYXRpYmxlLW9wcy1saXN0IgogICAgICAgICAgICBpZD0iaW5jb21wYXRpYmxlT3BzTGlzdCIKICAgICAgICAgICAgaXRlbXM9IltbX2luY29tcGF0aWJsZU9wTm9kZXNdXSIKICAgICAgICAgID4KICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgIDx0Zi1ncmFwaC1vcC1jb21wYXQtbGlzdC1pdGVtCiAgICAgICAgICAgICAgICBjbGFzcz0ibm9uLWNvbnRyb2wtbGlzdC1pdGVtIgogICAgICAgICAgICAgICAgaXRlbS1ub2RlPSJbW2l0ZW1dXSIKICAgICAgICAgICAgICAgIGl0ZW0tcmVuZGVyLWluZm89IltbX2dldFJlbmRlckluZm8oaXRlbS5uYW1lLCByZW5kZXJIaWVyYXJjaHkpXV0iCiAgICAgICAgICAgICAgICBuYW1lPSJbW2l0ZW0ubmFtZV1dIgogICAgICAgICAgICAgICAgdGVtcGxhdGUtaW5kZXg9IltbX3RlbXBsYXRlSW5kZXhdXSIKICAgICAgICAgICAgICAgIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIKICAgICAgICAgICAgICAgIGl0ZW0tdHlwZT0iaW5jb21wYXRpYmxlLW9wcyIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC90Zi1ncmFwaC1vcC1jb21wYXQtbGlzdC1pdGVtPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2lyb24tY29sbGFwc2U+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixhcyldLHNzLnByb3RvdHlwZSwiZ3JhcGhIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsbG8pXSxzcy5wcm90b3R5cGUsInJlbmRlckhpZXJhcmNoeSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxzcy5wcm90b3R5cGUsIm5vZGVUaXRsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHNzLnByb3RvdHlwZSwiX2V4cGFuZGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHNzLnByb3RvdHlwZSwiX29wQ29tcGF0Q29sb3IiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sc3MucHJvdG90eXBlLCJfb3BJbmNvbXBhdENvbG9yIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHNzLnByb3RvdHlwZSwiX3RlbXBsYXRlSW5kZXgiLHZvaWQgMCk7RShbUnQoImdyYXBoSGllcmFyY2h5IiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxzcy5wcm90b3R5cGUsIl9pbmNvbXBhdGlibGVPcE5vZGVzIixudWxsKTtFKFtSdCgiZ3JhcGhIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxzcy5wcm90b3R5cGUsIl9vcENvbXBhdFNjb3JlIixudWxsKTtFKFtSdCgiX29wQ29tcGF0U2NvcmUiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxzcy5wcm90b3R5cGUsIl9vcENvbXBhdFNjb3JlTGFiZWwiLG51bGwpO0UoW1J0KCJncmFwaEhpZXJhcmNoeSIpLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLHNzLnByb3RvdHlwZSwiX3RvdGFsSW5jb21wYXRPcHMiLG51bGwpO0UoW0J0KCJncmFwaEhpZXJhcmNoeSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sc3MucHJvdG90eXBlLCJfZ3JhcGhIaWVyYXJjaHlDaGFuZ2VkIixudWxsKTtzcz1FKFt5dCgidGYtZ3JhcGgtb3AtY29tcGF0LWNhcmQiKV0sc3MpO3ZhciBsMz1FZShPZSgpLDEpO3ZhciBXYz1jbGFzcyBleHRlbmRzIEd0KF9vKG10KSl7X2l0ZW1UeXBlQ2hhbmdlZCgpe3RoaXMuaXRlbVR5cGUhPT0ic3Vibm9kZSI/dGhpcy4kWyJsaXN0LWl0ZW0iXS5jbGFzc0xpc3QuYWRkKCJjbGlja2FibGUiKTp0aGlzLiRbImxpc3QtaXRlbSJdLmNsYXNzTGlzdC5yZW1vdmUoImNsaWNrYWJsZSIpfV9ub2RlTGlzdGVuZXIodCl7dGhpcy5maXJlKCJub2RlLWxpc3QtaXRlbS0iK3QudHlwZSx7Y2FyZE5vZGU6dGhpcy5jYXJkTm9kZS5uYW1lLG5vZGVOYW1lOnRoaXMubmFtZSx0eXBlOnRoaXMuaXRlbVR5cGV9KX1fZmFkZWRDbGFzcyh0KXtyZXR1cm4gdCYmdC5pc0ZhZGVkT3V0PyJmYWRlZCI6IiJ9fTtXYy50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICAjbGlzdC1pdGVtIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIGZvbnQtc2l6ZTogMTFwdDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgICNsaXN0LWl0ZW06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWdvb2dsZS15ZWxsb3ctMTAwKTsKICAgICAgfQoKICAgICAgOmhvc3QoLmRhcmstbW9kZSkgI2xpc3QtaXRlbTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXIteWVsbG93LTkwMCk7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgIH0KCiAgICAgIC5jbGlja2FibGUgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgI2xpc3QtaXRlbSBzcGFuIHsKICAgICAgICBtYXJnaW4tbGVmdDogNDBweDsKICAgICAgfQoKICAgICAgI2xpc3QtaXRlbS5leGNsdWRlZCBzcGFuIHsKICAgICAgICBjb2xvcjogIzk5OTsKICAgICAgfQoKICAgICAgI2xpc3QtaXRlbSBzcGFuLmVkZ2UtbGFiZWwgewogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDNweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDVweDsKICAgICAgfQoKICAgICAgLm5vZGUtaWNvbiB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMXB4OwogICAgICAgIGxlZnQ6IDJweDsKICAgICAgfQoKICAgICAgLmZhZGVkIHNwYW4gewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1ncmFwaC1mYWRlZCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2CiAgICAgIGlkPSJsaXN0LWl0ZW0iCiAgICAgIG9uLW1vdXNlb3Zlcj0iX25vZGVMaXN0ZW5lciIKICAgICAgb24tbW91c2VvdXQ9Il9ub2RlTGlzdGVuZXIiCiAgICAgIG9uLWNsaWNrPSJfbm9kZUxpc3RlbmVyIgogICAgPgogICAgICA8ZGl2IGNsYXNzJD0ie3tfZmFkZWRDbGFzcyhpdGVtUmVuZGVySW5mbyl9fSI+CiAgICAgICAgPHRmLW5vZGUtaWNvbgogICAgICAgICAgY2xhc3M9Im5vZGUtaWNvbiIKICAgICAgICAgIGhlaWdodD0iMTIiCiAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgICBjb2xvci1ieS1wYXJhbXM9IltbY29sb3JCeVBhcmFtc11dIgogICAgICAgICAgbm9kZT0iW1tpdGVtTm9kZV1dIgogICAgICAgICAgcmVuZGVyLWluZm89IltbaXRlbVJlbmRlckluZm9dXSIKICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW3RlbXBsYXRlSW5kZXhdXSIKICAgICAgICA+PC90Zi1ub2RlLWljb24+CiAgICAgICAgPHNwYW4gdGl0bGUkPSJbW25hbWVdXSI+W1tuYW1lXV08L3NwYW4+CiAgICAgICAgPHNwYW4gY2xhc3M9ImVkZ2UtbGFiZWwiPltbZWRnZUxhYmVsXV08L3NwYW4+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxXYy5wcm90b3R5cGUsImNhcmROb2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFdjLnByb3RvdHlwZSwiaXRlbU5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sV2MucHJvdG90eXBlLCJlZGdlTGFiZWwiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sV2MucHJvdG90eXBlLCJpdGVtUmVuZGVySW5mbyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxXYy5wcm90b3R5cGUsIm5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsb2JzZXJ2ZXI6Il9pdGVtVHlwZUNoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFdjLnByb3RvdHlwZSwiaXRlbVR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sV2MucHJvdG90eXBlLCJjb2xvckJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFdjLnByb3RvdHlwZSwiY29sb3JCeVBhcmFtcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxXYy5wcm90b3R5cGUsInRlbXBsYXRlSW5kZXgiLHZvaWQgMCk7V2M9RShbeXQoInRmLW5vZGUtbGlzdC1pdGVtIildLFdjKTt2YXIgZG49Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2V4cGFuZGVkPSEwLHRoaXMuX29wZW5lZENvbnRyb2xQcmVkPSExLHRoaXMuX29wZW5lZENvbnRyb2xTdWNjPSExLHRoaXMuX3RlbXBsYXRlSW5kZXg9bnVsbH1leHBhbmROb2RlKCl7dGhpcy5maXJlKCJfbm9kZS5leHBhbmQiLHRoaXMubm9kZSl9X2dldE5vZGUodCxyKXtyZXR1cm4gci5ub2RlKHQpfV9nZXROb2RlU3RhdHModCxyKXt2YXIgbj10aGlzLl9nZXROb2RlKHQscik7cmV0dXJuIG4/bi5zdGF0czpudWxsfV9nZXRUb3RhbE1pY3Jvcyh0KXtyZXR1cm4gdD90LmdldFRvdGFsTWljcm9zKCk6MH1nZXQgX2hhc0Rpc3BsYXlhYmxlTm9kZVN0YXRzKCl7dmFyIHQ9dGhpcy5fbm9kZVN0YXRzO3JldHVybiBnSCh0KX1nZXQgX25vZGVTdGF0c0Zvcm1hdHRlZEJ5dGVzKCl7dmFyIHQ9dGhpcy5fbm9kZVN0YXRzO2lmKCEoIXR8fCF0LnRvdGFsQnl0ZXMpKXJldHVybiBEZCh0LnRvdGFsQnl0ZXMsaVApfWdldCBfbm9kZVN0YXRzRm9ybWF0dGVkQ29tcHV0ZVRpbWUoKXt2YXIgdD10aGlzLl9ub2RlU3RhdHM7aWYoISghdHx8IXQuZ2V0VG90YWxNaWNyb3MoKSkpcmV0dXJuIERkKHQuZ2V0VG90YWxNaWNyb3MoKSxvUCl9Z2V0IF9ub2RlU3RhdHNGb3JtYXR0ZWRPdXRwdXRTaXplcygpe3ZhciB0PXRoaXMuX25vZGVTdGF0cztpZighKCF0fHwhdC5vdXRwdXRTaXplfHwhdC5vdXRwdXRTaXplLmxlbmd0aCkpcmV0dXJuIGwzLm1hcCh0Lm91dHB1dFNpemUsZnVuY3Rpb24ocil7cmV0dXJuIHIubGVuZ3RoPT09MD8ic2NhbGFyIjoiWyIrci5qb2luKCIsICIpKyJdIn0pfV9nZXRSZW5kZXJJbmZvKHQscil7cmV0dXJuIHRoaXMucmVuZGVySGllcmFyY2h5LmdldE9yQ3JlYXRlUmVuZGVyTm9kZUJ5TmFtZSh0KX1nZXQgX2F0dHJpYnV0ZXMoKXt2YXIgdD10aGlzLl9ub2RlO2lmKHRoaXMuYXN5bmModGhpcy5fcmVzaXplTGlzdC5iaW5kKHRoaXMsIiNhdHRyaWJ1dGVzTGlzdCIpKSwhdHx8IXQuYXR0cilyZXR1cm5bXTt2YXIgcj1bXTtyZXR1cm4gbDMuZWFjaCh0LmF0dHIsZnVuY3Rpb24obil7bi5rZXk9PT1pbGU/cj1yLmNvbmNhdChuLnZhbHVlLmxpc3Qucy5tYXAoZnVuY3Rpb24oaSl7cmV0dXJue2tleTppLHZhbHVlOiJUb28gbGFyZ2UgdG8gc2hvdy4uLiJ9fSkpOnIucHVzaCh7a2V5Om4ua2V5LHZhbHVlOkpTT04uc3RyaW5naWZ5KG4udmFsdWUpfSl9KSxyfWdldCBfZGV2aWNlKCl7dmFyIHQ9dGhpcy5fbm9kZTtyZXR1cm4gdD90LmRldmljZTpudWxsfWdldCBfc3VjY2Vzc29ycygpe3ZhciB0PXRoaXMuX25vZGUscj10aGlzLmdyYXBoSGllcmFyY2h5O3JldHVybiB0aGlzLl9yZWZyZXNoTm9kZUl0ZW1MaXN0KCJpbnB1dHNMaXN0IiksdD90aGlzLl9jb252ZXJ0RWRnZUxpc3RUb0VkZ2VJbmZvTGlzdChyLmdldFN1Y2Nlc3NvcnModC5uYW1lKSwhMSx0LmlzR3JvdXBOb2RlKTp7cmVndWxhcjpbXSxjb250cm9sOltdfX1nZXQgX3ByZWRlY2Vzc29ycygpe3ZhciB0PXRoaXMuX25vZGUscj10aGlzLmdyYXBoSGllcmFyY2h5O3JldHVybiB0aGlzLl9yZWZyZXNoTm9kZUl0ZW1MaXN0KCJvdXRwdXRzTGlzdCIpLHQ/dGhpcy5fY29udmVydEVkZ2VMaXN0VG9FZGdlSW5mb0xpc3Qoci5nZXRQcmVkZWNlc3NvcnModC5uYW1lKSwhMCx0LmlzR3JvdXBOb2RlKTp7cmVndWxhcjpbXSxjb250cm9sOltdfX1nZXQgX2Z1bmN0aW9uVXNhZ2VzKCl7dmFyIHQ9dGhpcy5fbm9kZSxyPXRoaXMuZ3JhcGhIaWVyYXJjaHk7aWYodGhpcy5fcmVmcmVzaE5vZGVJdGVtTGlzdCgiZnVuY3Rpb25Vc2FnZXNMaXN0IiksIXR8fHQudHlwZSE9PWp0Lk1FVEEpcmV0dXJuW107bGV0IG49ci5saWJyYXJ5RnVuY3Rpb25zW3QuYXNzb2NpYXRlZEZ1bmN0aW9uXTtyZXR1cm4gbj9uLnVzYWdlczpbXX1fcmVmcmVzaE5vZGVJdGVtTGlzdCh0KXt0aGlzLmFzeW5jKHRoaXMuX3Jlc2l6ZUxpc3QuYmluZCh0aGlzLGAjJHt0fWApKX1fY29udmVydEVkZ2VMaXN0VG9FZGdlSW5mb0xpc3QodCxyLG4pe3ZhciBpPWE9PmwzLm1hcChhLmJhc2VFZGdlTGlzdCxzPT57dmFyIGw9cj9zLnY6cy53O3JldHVybntuYW1lOmwsbm9kZTp0aGlzLl9nZXROb2RlKGwsdGhpcy5ncmFwaEhpZXJhcmNoeSksZWRnZUxhYmVsOllsdChzLHRoaXMucmVuZGVySGllcmFyY2h5KSxyZW5kZXJJbmZvOnRoaXMuX2dldFJlbmRlckluZm8obCx0aGlzLnJlbmRlckhpZXJhcmNoeSl9fSksbz1mdW5jdGlvbihhKXt2YXIgcz1bXTtyZXR1cm4gbDMuZWFjaChhLGw9Pnt2YXIgYz1yP2wudjpsLnc7IW58fGwuYmFzZUVkZ2VMaXN0Lmxlbmd0aD09MT9zPXMuY29uY2F0KGkobCkpOnMucHVzaCh7bmFtZTpjLG5vZGU6dGhpcy5fZ2V0Tm9kZShjLHRoaXMuZ3JhcGhIaWVyYXJjaHkpLGVkZ2VMYWJlbDpqbHQobCx0aGlzLnJlbmRlckhpZXJhcmNoeSkscmVuZGVySW5mbzp0aGlzLl9nZXRSZW5kZXJJbmZvKGMsdGhpcy5yZW5kZXJIaWVyYXJjaHkpfSl9KSxzfS5iaW5kKHRoaXMpO3JldHVybntyZWd1bGFyOm8odC5yZWd1bGFyKSxjb250cm9sOm8odC5jb250cm9sKX19Z2V0IF9zdWJub2Rlcygpe3ZhciB0PXRoaXMuX25vZGU7cmV0dXJuIHQmJnQubWV0YWdyYXBoP3QubWV0YWdyYXBoLm5vZGVzKCk6bnVsbH1nZXQgX3RvdGFsUHJlZGVjZXNzb3JzKCl7dmFyIHQ9dGhpcy5fcHJlZGVjZXNzb3JzO3JldHVybiB0LnJlZ3VsYXIubGVuZ3RoK3QuY29udHJvbC5sZW5ndGh9Z2V0IF90b3RhbFN1Y2Nlc3NvcnMoKXt2YXIgdD10aGlzLl9zdWNjZXNzb3JzO3JldHVybiB0LnJlZ3VsYXIubGVuZ3RoK3QuY29udHJvbC5sZW5ndGh9X3RvZ2dsZUNvbnRyb2xQcmVkKCl7dGhpcy5fb3BlbmVkQ29udHJvbFByZWQ9IXRoaXMuX29wZW5lZENvbnRyb2xQcmVkfV90b2dnbGVDb250cm9sU3VjYygpe3RoaXMuX29wZW5lZENvbnRyb2xTdWNjPSF0aGlzLl9vcGVuZWRDb250cm9sU3VjY31fdG9nZ2xlRXhwYW5kZWQoKXt0aGlzLl9leHBhbmRlZD0hdGhpcy5fZXhwYW5kZWR9X2dldFRvZ2dsZUljb24odCl7cmV0dXJuIHQ/ImV4cGFuZC1sZXNzIjoiZXhwYW5kLW1vcmUifV9yZXNldFN0YXRlKCl7dGhpcy5fb3BlbmVkQ29udHJvbFByZWQ9ITEsdGhpcy5fb3BlbmVkQ29udHJvbFN1Y2M9ITEsdGhpcy5zZXQoIl9ncm91cEJ1dHRvblRleHQiLFFsdCh0aGlzLl9ub2RlKSl9X3Jlc2l6ZUxpc3QodCl7dmFyIHI9ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KTtyJiZyLmZpcmUoImlyb24tcmVzaXplIil9X3RvZ2dsZUluY2x1ZGUoKXt0aGlzLmZpcmUoIm5vZGUtdG9nZ2xlLWluY2x1c2lvbiIse25hbWU6dGhpcy5ncmFwaE5vZGVOYW1lfSl9X25vZGVJbmNsdWRlU3RhdGVDaGFuZ2VkKHQscil7dGhpcy5zZXQoIl9hdXhCdXR0b25UZXh0Iix5SCh0KSl9X3RvZ2dsZUdyb3VwKCl7dmFyIHQ9SUgodGhpcy5fbm9kZSk7dGhpcy5maXJlKCJub2RlLXRvZ2dsZS1zZXJpZXNncm91cCIse25hbWU6dH0pfV9pc0xpYnJhcnlGdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5uYW1lLnN0YXJ0c1dpdGgoTWEpfV9pc0luU2VyaWVzKHQpe3JldHVybiBKbHQodCl9X2dyYXBoSGllcmFyY2h5Q2hhbmdlZCgpe3RoaXMuX3RlbXBsYXRlSW5kZXg9dGhpcy5ncmFwaEhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCksdGhpcy5ncmFwaEhpZXJhcmNoeS5hZGRMaXN0ZW5lcihPZC5URU1QTEFURVNfVVBEQVRFRCwoKT0+e3RoaXMuX3RlbXBsYXRlSW5kZXg9dGhpcy5ncmFwaEhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCl9KX19O2RuLnRlbXBsYXRlPVFgCiAgICA8c3R5bGU+CiAgICAgIC5zdWItbGlzdC1ncm91cCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBmb250LXNpemU6IDEycHQ7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDhweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLnN1Yi1saXN0IHsKICAgICAgICBtYXgtaGVpZ2h0OiAzMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7CiAgICAgIH0KCiAgICAgIC5hdHRyLWxlZnQgewogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICAgIHdpZHRoOiAzMCU7CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICAgIGNvbG9yOiB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgZm9udC1zaXplOiAxMXB0OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgIH0KCiAgICAgIC5hdHRyLXJpZ2h0IHsKICAgICAgICBtYXJnaW4tbGVmdDogMzAlOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgIH0KCiAgICAgIC5zdWItbGlzdC10YWJsZSB7CiAgICAgICAgZGlzcGxheTogdGFibGU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5zdWItbGlzdC10YWJsZS1yb3cgewogICAgICAgIGRpc3BsYXk6IHRhYmxlLXJvdzsKICAgICAgfQoKICAgICAgLnN1Yi1saXN0LXRhYmxlLXJvdyAuc3ViLWxpc3QtdGFibGUtY2VsbDpsYXN0LWNoaWxkIHsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICAgfQoKICAgICAgLnN1Yi1saXN0LXRhYmxlLWNlbGwgewogICAgICAgIGNvbG9yOiB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgZGlzcGxheTogdGFibGUtY2VsbDsKICAgICAgICBmb250LXNpemU6IDExcHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBtYXgtd2lkdGg6IDIwMHB4OwogICAgICAgIHBhZGRpbmc6IDAgNHB4OwogICAgICB9CgogICAgICBwYXBlci1pdGVtIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXByaW1hcnktYmFja2dyb3VuZC1jb2xvcik7CiAgICAgIH0KCiAgICAgIHBhcGVyLWl0ZW0tYm9keVt0d28tbGluZV0gewogICAgICAgIG1pbi1oZWlnaHQ6IDA7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHggNHB4OwogICAgICB9CgogICAgICAuZXhwYW5kZWRJbmZvIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgfQoKICAgICAgLmNvbnRyb2xEZXBzIHsKICAgICAgICBwYWRkaW5nOiAwIDAgMCA4cHg7CiAgICAgIH0KCiAgICAgIC5ub2RlLW5hbWUgewogICAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICAgIGZvbnQtc2l6ZTogMTRwdDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CgogICAgICAubm9kZS1pY29uIHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgIH0KCiAgICAgIC5zdWJ0aXRsZSB7CiAgICAgICAgY29sb3I6IHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICBmb250LXNpemU6IDEycHQ7CiAgICAgIH0KCiAgICAgIC5jb250cm9sTGluZSB7CiAgICAgICAgZm9udC1zaXplOiAxMXB0OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtYnV0dG9uIHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgICAgbWF4LWhlaWdodDogMjBweDsKICAgICAgICBtYXgtd2lkdGg6IDIwcHg7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLmNvbnRyb2wtdG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgZmxvYXQ6IGxlZnQ7CiAgICAgICAgbWF4LWhlaWdodDogMjBweDsKICAgICAgICBtYXgtd2lkdGg6IDIwcHg7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1pbmNsdWRlLWdyb3VwIHsKICAgICAgICBwYWRkaW5nLXRvcDogNHB4OwogICAgICB9CgogICAgICAudG9nZ2xlLWluY2x1ZGUgewogICAgICAgIG1hcmdpbjogNXB4IDZweDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICBwYWRkaW5nOiA0cHggNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTBwdDsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFmYWZhOwogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICB9CgogICAgICAudG9nZ2xlLWluY2x1ZGU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWdvb2dsZS15ZWxsb3ctMTAwKTsKICAgICAgfQoKICAgICAgLm5vbi1jb250cm9sLWxpc3QtaXRlbSB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAxMHB4OwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHBhcGVyLWl0ZW0+CiAgICAgIDxwYXBlci1pdGVtLWJvZHkgdHdvLWxpbmU+CiAgICAgICAgPGRpdj4KICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgICAgICBpY29uPSJ7e19nZXRUb2dnbGVJY29uKF9leHBhbmRlZCl9fSIKICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVFeHBhbmRlZCIKICAgICAgICAgICAgY2xhc3M9InRvZ2dsZS1idXR0b24iCiAgICAgICAgICA+CiAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgPGRpdiBjbGFzcz0ibm9kZS1uYW1lIj4KICAgICAgICAgICAgPHRmLXdici1zdHJpbmcgdmFsdWU9IltbX25vZGUubmFtZV1dIiBkZWxpbWl0ZXItcGF0dGVybj0iLyI+CiAgICAgICAgICAgIDwvdGYtd2JyLXN0cmluZz4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgc2Vjb25kYXJ5PgogICAgICAgICAgPHRmLW5vZGUtaWNvbgogICAgICAgICAgICBjbGFzcz0ibm9kZS1pY29uIgogICAgICAgICAgICBub2RlPSJbW19ub2RlXV0iCiAgICAgICAgICAgIHJlbmRlci1pbmZvPSJbW19nZXRSZW5kZXJJbmZvKGdyYXBoTm9kZU5hbWUsIHJlbmRlckhpZXJhcmNoeSldXSIKICAgICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgICB0ZW1wbGF0ZS1pbmRleD0iW1tfdGVtcGxhdGVJbmRleF1dIgogICAgICAgICAgPjwvdGYtbm9kZS1pY29uPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJ7e19ub2RlLm9wfX0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWJ0aXRsZSI+CiAgICAgICAgICAgICAgT3BlcmF0aW9uOgogICAgICAgICAgICAgIDxzcGFuPltbX25vZGUub3BdXTwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJ7e19ub2RlLm1ldGFncmFwaH19Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3VidGl0bGUiPgogICAgICAgICAgICAgIFN1YmdyYXBoOgogICAgICAgICAgICAgIDxzcGFuPltbX25vZGUuY2FyZGluYWxpdHldXTwvc3Bhbj4gbm9kZXMKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvZGl2PgogICAgICA8L3BhcGVyLWl0ZW0tYm9keT4KICAgIDwvcGFwZXItaXRlbT4KICAgIDxpcm9uLWNvbGxhcHNlIG9wZW5lZD0ie3tfZXhwYW5kZWR9fSI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfZXhwYW5kZWR9fSIgcmVzdGFtcD0idHJ1ZSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZXhwYW5kZWRJbmZvIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LWdyb3VwIGF0dHJpYnV0ZXMiPgogICAgICAgICAgICBBdHRyaWJ1dGVzICg8c3Bhbj5bW19hdHRyaWJ1dGVzLmxlbmd0aF1dPC9zcGFuPikKICAgICAgICAgICAgPGlyb24tbGlzdAogICAgICAgICAgICAgIGNsYXNzPSJzdWItbGlzdCIKICAgICAgICAgICAgICBpZD0iYXR0cmlidXRlc0xpc3QiCiAgICAgICAgICAgICAgaXRlbXM9IltbX2F0dHJpYnV0ZXNdXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImF0dHItbGVmdCI+W1tpdGVtLmtleV1dPC9kaXY+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImF0dHItcmlnaHQiPltbaXRlbS52YWx1ZV1dPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L2lyb24tbGlzdD4KICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfZGV2aWNlfX0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC1ncm91cCBkZXZpY2UiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImF0dHItbGVmdCI+RGV2aWNlPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYXR0ci1yaWdodCI+W1tfZGV2aWNlXV08L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgoKICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LWdyb3VwIHByZWRlY2Vzc29ycyI+CiAgICAgICAgICAgIElucHV0cyAoPHNwYW4+W1tfdG90YWxQcmVkZWNlc3NvcnNdXTwvc3Bhbj4pCiAgICAgICAgICAgIDxpcm9uLWxpc3QKICAgICAgICAgICAgICBjbGFzcz0ic3ViLWxpc3QiCiAgICAgICAgICAgICAgaWQ9ImlucHV0c0xpc3QiCiAgICAgICAgICAgICAgaXRlbXM9IltbX3ByZWRlY2Vzc29ycy5yZWd1bGFyXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtbm9kZS1saXN0LWl0ZW0KICAgICAgICAgICAgICAgICAgY2xhc3M9Im5vbi1jb250cm9sLWxpc3QtaXRlbSIKICAgICAgICAgICAgICAgICAgY2FyZC1ub2RlPSJbW19ub2RlXV0iCiAgICAgICAgICAgICAgICAgIGl0ZW0tbm9kZT0iW1tpdGVtLm5vZGVdXSIKICAgICAgICAgICAgICAgICAgZWRnZS1sYWJlbD0iW1tpdGVtLmVkZ2VMYWJlbF1dIgogICAgICAgICAgICAgICAgICBpdGVtLXJlbmRlci1pbmZvPSJbW2l0ZW0ucmVuZGVySW5mb11dIgogICAgICAgICAgICAgICAgICBuYW1lPSJbW2l0ZW0ubmFtZV1dIgogICAgICAgICAgICAgICAgICBpdGVtLXR5cGU9InByZWRlY2Vzc29ycyIKICAgICAgICAgICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgICAgICAgICB0ZW1wbGF0ZS1pbmRleD0iW1tfdGVtcGxhdGVJbmRleF1dIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPC90Zi1ub2RlLWxpc3QtaXRlbT4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L2lyb24tbGlzdD4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19wcmVkZWNlc3NvcnMuY29udHJvbC5sZW5ndGhdXSI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbERlcHMiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbExpbmUiPgogICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgICAgICAgICBpY29uPSJ7e19nZXRUb2dnbGVJY29uKF9vcGVuZWRDb250cm9sUHJlZCl9fSIKICAgICAgICAgICAgICAgICAgICBvbi1jbGljaz0iX3RvZ2dsZUNvbnRyb2xQcmVkIgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJjb250cm9sLXRvZ2dsZS1idXR0b24iCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgQ29udHJvbCBkZXBlbmRlbmNpZXMKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJ7e19vcGVuZWRDb250cm9sUHJlZH19IiBuby1hbmltYXRpb24+CiAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZQogICAgICAgICAgICAgICAgICAgIGlzPSJkb20taWYiCiAgICAgICAgICAgICAgICAgICAgaWY9Int7X29wZW5lZENvbnRyb2xQcmVkfX0iCiAgICAgICAgICAgICAgICAgICAgcmVzdGFtcD0idHJ1ZSIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgIDxpcm9uLWxpc3QKICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzdWItbGlzdCIKICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zPSJbW19wcmVkZWNlc3NvcnMuY29udHJvbF1dIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRmLW5vZGUtbGlzdC1pdGVtCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC1ub2RlPSJbW19ub2RlXV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS1ub2RlPSJbW2l0ZW0ubm9kZV1dIgogICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tcmVuZGVyLWluZm89IltbaXRlbS5yZW5kZXJJbmZvXV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtLm5hbWVdXSIKICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLXR5cGU9InByZWRlY2Vzc29ycyIKICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGUtaW5kZXg9IltbX3RlbXBsYXRlSW5kZXhdXSIKICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RmLW5vZGUtbGlzdC1pdGVtPgogICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICA8L2lyb24tbGlzdD4KICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LWdyb3VwIHN1Y2Nlc3NvcnMiPgogICAgICAgICAgICBPdXRwdXRzICg8c3Bhbj5bW190b3RhbFN1Y2Nlc3NvcnNdXTwvc3Bhbj4pCiAgICAgICAgICAgIDxpcm9uLWxpc3QKICAgICAgICAgICAgICBjbGFzcz0ic3ViLWxpc3QiCiAgICAgICAgICAgICAgaWQ9Im91dHB1dHNMaXN0IgogICAgICAgICAgICAgIGl0ZW1zPSJbW19zdWNjZXNzb3JzLnJlZ3VsYXJdXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1ub2RlLWxpc3QtaXRlbQogICAgICAgICAgICAgICAgICBjbGFzcz0ibm9uLWNvbnRyb2wtbGlzdC1pdGVtIgogICAgICAgICAgICAgICAgICBjYXJkLW5vZGU9IltbX25vZGVdXSIKICAgICAgICAgICAgICAgICAgaXRlbS1ub2RlPSJbW2l0ZW0ubm9kZV1dIgogICAgICAgICAgICAgICAgICBlZGdlLWxhYmVsPSJbW2l0ZW0uZWRnZUxhYmVsXV0iCiAgICAgICAgICAgICAgICAgIGl0ZW0tcmVuZGVyLWluZm89IltbaXRlbS5yZW5kZXJJbmZvXV0iCiAgICAgICAgICAgICAgICAgIG5hbWU9IltbaXRlbS5uYW1lXV0iCiAgICAgICAgICAgICAgICAgIGl0ZW0tdHlwZT0ic3VjY2Vzc29yIgogICAgICAgICAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8L3RmLW5vZGUtbGlzdC1pdGVtPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvaXJvbi1saXN0PgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3N1Y2Nlc3NvcnMuY29udHJvbC5sZW5ndGhdXSI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbERlcHMiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbExpbmUiPgogICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgICAgICAgICBpY29uPSJ7e19nZXRUb2dnbGVJY29uKF9vcGVuZWRDb250cm9sU3VjYyl9fSIKICAgICAgICAgICAgICAgICAgICBvbi1jbGljaz0iX3RvZ2dsZUNvbnRyb2xTdWNjIgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJjb250cm9sLXRvZ2dsZS1idXR0b24iCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgQ29udHJvbCBkZXBlbmRlbmNpZXMKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJ7e19vcGVuZWRDb250cm9sU3VjY319IiBuby1hbmltYXRpb24+CiAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZQogICAgICAgICAgICAgICAgICAgIGlzPSJkb20taWYiCiAgICAgICAgICAgICAgICAgICAgaWY9Int7X29wZW5lZENvbnRyb2xTdWNjfX0iCiAgICAgICAgICAgICAgICAgICAgcmVzdGFtcD0idHJ1ZSIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgIDxpcm9uLWxpc3QgY2xhc3M9InN1Yi1saXN0IiBpdGVtcz0iW1tfc3VjY2Vzc29ycy5jb250cm9sXV0iPgogICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgICAgICA8dGYtbm9kZS1saXN0LWl0ZW0KICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJkLW5vZGU9IltbX25vZGVdXSIKICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLW5vZGU9IltbaXRlbS5ub2RlXV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS1yZW5kZXItaW5mbz0iW1tpdGVtLnJlbmRlckluZm9dXSIKICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJbW2l0ZW0ubmFtZV1dIgogICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tdHlwZT0ic3VjY2Vzc29ycyIKICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGUtaW5kZXg9IltbX3RlbXBsYXRlSW5kZXhdXSIKICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RmLW5vZGUtbGlzdC1pdGVtPgogICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICA8L2lyb24tbGlzdD4KICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJ7e19oYXNEaXNwbGF5YWJsZU5vZGVTdGF0c319Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtZ3JvdXAgbm9kZS1zdGF0cyI+CiAgICAgICAgICAgICAgTm9kZSBTdGF0cwogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlIj4KICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfbm9kZVN0YXRzLnRvdGFsQnl0ZXN9fSI+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLXJvdyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtdGFibGUtY2VsbCI+TWVtb3J5PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtdGFibGUtY2VsbCI+CiAgICAgICAgICAgICAgICAgICAgICBbW19ub2RlU3RhdHNGb3JtYXR0ZWRCeXRlc11dCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfZ2V0VG90YWxNaWNyb3MoX25vZGVTdGF0cyl9fSI+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLXJvdyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtdGFibGUtY2VsbCI+Q29tcHV0ZSBUaW1lPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtdGFibGUtY2VsbCI+CiAgICAgICAgICAgICAgICAgICAgICBbW19ub2RlU3RhdHNGb3JtYXR0ZWRDb21wdXRlVGltZV1dCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfbm9kZVN0YXRzLm91dHB1dFNpemV9fSI+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLXJvdyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtdGFibGUtY2VsbCI+VGVuc29yIE91dHB1dCBTaXplczwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPgogICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgICAgICAgICAgICBpdGVtcz0ie3tfbm9kZVN0YXRzRm9ybWF0dGVkT3V0cHV0U2l6ZXN9fSIKICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgW1tpdGVtXV0gPGJyIC8+CiAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2Z1bmN0aW9uVXNhZ2VzLmxlbmd0aF1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtZ3JvdXAgcHJlZGVjZXNzb3JzIj4KICAgICAgICAgICAgICBVc2FnZXMgb2YgdGhlIEZ1bmN0aW9uICg8c3Bhbj5bW19mdW5jdGlvblVzYWdlcy5sZW5ndGhdXTwvc3Bhbj4pCiAgICAgICAgICAgICAgPGlyb24tbGlzdAogICAgICAgICAgICAgICAgY2xhc3M9InN1Yi1saXN0IgogICAgICAgICAgICAgICAgaWQ9ImZ1bmN0aW9uVXNhZ2VzTGlzdCIKICAgICAgICAgICAgICAgIGl0ZW1zPSJbW19mdW5jdGlvblVzYWdlc11dIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgPHRmLW5vZGUtbGlzdC1pdGVtCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im5vbi1jb250cm9sLWxpc3QtaXRlbSIKICAgICAgICAgICAgICAgICAgICBjYXJkLW5vZGU9IltbX25vZGVdXSIKICAgICAgICAgICAgICAgICAgICBpdGVtLW5vZGU9IltbaXRlbV1dIgogICAgICAgICAgICAgICAgICAgIG5hbWU9IltbaXRlbS5uYW1lXV0iCiAgICAgICAgICAgICAgICAgICAgaXRlbS10eXBlPSJmdW5jdGlvblVzYWdlcyIKICAgICAgICAgICAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGUtaW5kZXg9IltbX3RlbXBsYXRlSW5kZXhdXSIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICA8L3RmLW5vZGUtbGlzdC1pdGVtPgogICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8L2lyb24tbGlzdD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgoKICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2lzTGlicmFyeUZ1bmN0aW9uKF9ub2RlKV1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9nZ2xlLWluY2x1ZGUtZ3JvdXAiPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24KICAgICAgICAgICAgICAgIHJhaXNlZAogICAgICAgICAgICAgICAgY2xhc3M9InRvZ2dsZS1pbmNsdWRlIgogICAgICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVJbmNsdWRlIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxzcGFuPltbX2F1eEJ1dHRvblRleHRdXTwvc3Bhbj4KICAgICAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgoKICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfaXNJblNlcmllcyhfbm9kZSl9fSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvZ2dsZS1pbmNsdWRlLWdyb3VwIj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgICByYWlzZWQKICAgICAgICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtaW5jbHVkZSIKICAgICAgICAgICAgICAgIG9uLWNsaWNrPSJfdG9nZ2xlR3JvdXAiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPHNwYW4+W1tfZ3JvdXBCdXR0b25UZXh0XV08L3NwYW4+CiAgICAgICAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvaXJvbi1jb2xsYXBzZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGRuLnByb3RvdHlwZSwiZ3JhcGhOb2RlTmFtZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixhcyldLGRuLnByb3RvdHlwZSwiZ3JhcGhIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZG4ucHJvdG90eXBlLCJyZW5kZXJIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZG4ucHJvdG90eXBlLCJjb2xvckJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LGNvbXB1dGVkOiJfZ2V0Tm9kZShncmFwaE5vZGVOYW1lLCBncmFwaEhpZXJhcmNoeSkiLG9ic2VydmVyOiJfcmVzZXRTdGF0ZSJ9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZG4ucHJvdG90eXBlLCJfbm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxjb21wdXRlZDoiX2dldE5vZGVTdGF0cyhncmFwaE5vZGVOYW1lLCBncmFwaEhpZXJhcmNoeSkiLG9ic2VydmVyOiJfcmVzZXRTdGF0ZSJ9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZG4ucHJvdG90eXBlLCJfbm9kZVN0YXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLG9ic2VydmVyOiJfbm9kZUluY2x1ZGVTdGF0ZUNoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLGRuLnByb3RvdHlwZSwibm9kZUluY2x1ZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxkbi5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGRuLnByb3RvdHlwZSwiX29wZW5lZENvbnRyb2xQcmVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sZG4ucHJvdG90eXBlLCJfb3BlbmVkQ29udHJvbFN1Y2MiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZG4ucHJvdG90eXBlLCJfYXV4QnV0dG9uVGV4dCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxkbi5wcm90b3R5cGUsIl9ncm91cEJ1dHRvblRleHQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxkbi5wcm90b3R5cGUsIl90ZW1wbGF0ZUluZGV4Iix2b2lkIDApO0UoW1J0KCJfbm9kZVN0YXRzIiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGRuLnByb3RvdHlwZSwiX2hhc0Rpc3BsYXlhYmxlTm9kZVN0YXRzIixudWxsKTtFKFtSdCgiX25vZGVTdGF0cyIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGRuLnByb3RvdHlwZSwiX25vZGVTdGF0c0Zvcm1hdHRlZEJ5dGVzIixudWxsKTtFKFtSdCgiX25vZGVTdGF0cyIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGRuLnByb3RvdHlwZSwiX25vZGVTdGF0c0Zvcm1hdHRlZENvbXB1dGVUaW1lIixudWxsKTtFKFtSdCgiX25vZGVTdGF0cyIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGRuLnByb3RvdHlwZSwiX25vZGVTdGF0c0Zvcm1hdHRlZE91dHB1dFNpemVzIixudWxsKTtFKFtSdCgiX25vZGUiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGRuLnByb3RvdHlwZSwiX2F0dHJpYnV0ZXMiLG51bGwpO0UoW1J0KCJfbm9kZSIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGRuLnByb3RvdHlwZSwiX2RldmljZSIsbnVsbCk7RShbUnQoIl9ub2RlIiwiZ3JhcGhIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9zdWNjZXNzb3JzIixudWxsKTtFKFtSdCgiX25vZGUiLCJncmFwaEhpZXJhcmNoeSIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGRuLnByb3RvdHlwZSwiX3ByZWRlY2Vzc29ycyIsbnVsbCk7RShbUnQoIl9ub2RlIiwiZ3JhcGhIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGRuLnByb3RvdHlwZSwiX2Z1bmN0aW9uVXNhZ2VzIixudWxsKTtFKFtSdCgiX25vZGUiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGRuLnByb3RvdHlwZSwiX3N1Ym5vZGVzIixudWxsKTtFKFtSdCgiX3ByZWRlY2Vzc29ycyIpLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGRuLnByb3RvdHlwZSwiX3RvdGFsUHJlZGVjZXNzb3JzIixudWxsKTtFKFtSdCgiX3N1Y2Nlc3NvcnMiKSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl90b3RhbFN1Y2Nlc3NvcnMiLG51bGwpO0UoW0J0KCJncmFwaEhpZXJhcmNoeSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sZG4ucHJvdG90eXBlLCJfZ3JhcGhIaWVyYXJjaHlDaGFuZ2VkIixudWxsKTtkbj1FKFt5dCgidGYtbm9kZS1pbmZvIildLGRuKTt2YXIgbHM9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS1saXN0LWl0ZW0tY2xpY2siLHRoaXMuX25vZGVMaXN0SXRlbUNsaWNrZWQuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLWxpc3QtaXRlbS1tb3VzZW92ZXIiLHRoaXMuX25vZGVMaXN0SXRlbU1vdXNlb3Zlci5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIm5vZGUtbGlzdC1pdGVtLW1vdXNlb3V0Iix0aGlzLl9ub2RlTGlzdEl0ZW1Nb3VzZW91dC5iaW5kKHRoaXMpKX1fbm9kZUxpc3RJdGVtQ2xpY2tlZCh0KXt0aGlzLnNlbGVjdGVkTm9kZT10LmRldGFpbC5ub2RlTmFtZX1fbm9kZUxpc3RJdGVtTW91c2VvdmVyKHQpe3RoaXMuaGlnaGxpZ2h0ZWROb2RlPXQuZGV0YWlsLm5vZGVOYW1lfV9ub2RlTGlzdEl0ZW1Nb3VzZW91dCgpe3RoaXMuaGlnaGxpZ2h0ZWROb2RlPW51bGx9X2hlYWx0aFBpbGxzQXZhaWxhYmxlKHQscil7cmV0dXJuIHQmJnImJk9iamVjdC5rZXlzKHIpLmxlbmd0aD4wfV9lcXVhbHModCxyKXtyZXR1cm4gdD09PXJ9fTtscy50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc2Vjb25kYXJ5LWJhY2tncm91bmQtY29sb3IpOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXgtaGVpZ2h0OiA2NTBweDsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQoKICAgICAgaDIgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tzZWxlY3RlZE5vZGV9fSI+CiAgICAgIDxwYXBlci1tYXRlcmlhbCBlbGV2YXRpb249IjEiIGNsYXNzPSJjYXJkIj4KICAgICAgICA8dGYtbm9kZS1pbmZvCiAgICAgICAgICBncmFwaC1oaWVyYXJjaHk9IltbZ3JhcGhIaWVyYXJjaHldXSIKICAgICAgICAgIHJlbmRlci1oaWVyYXJjaHk9IltbcmVuZGVySGllcmFyY2h5XV0iCiAgICAgICAgICBmbGF0LWdyYXBoPSJbW2dyYXBoXV0iCiAgICAgICAgICBncmFwaC1ub2RlLW5hbWU9Iltbc2VsZWN0ZWROb2RlXV0iCiAgICAgICAgICBub2RlLWluY2x1ZGU9Iltbc2VsZWN0ZWROb2RlSW5jbHVkZV1dIgogICAgICAgICAgaGlnaGxpZ2h0ZWQtbm9kZT0ie3toaWdobGlnaHRlZE5vZGV9fSIKICAgICAgICAgIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIKICAgICAgICA+CiAgICAgICAgPC90Zi1ub2RlLWluZm8+CiAgICAgIDwvcGFwZXItbWF0ZXJpYWw+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19lcXVhbHMoY29sb3JCeSwgJ29wX2NvbXBhdGliaWxpdHknKV1dIj4KICAgICAgPHRmLWdyYXBoLW9wLWNvbXBhdC1jYXJkCiAgICAgICAgZ3JhcGgtaGllcmFyY2h5PSJbW2dyYXBoSGllcmFyY2h5XV0iCiAgICAgICAgcmVuZGVyLWhpZXJhcmNoeT0iW1tyZW5kZXJIaWVyYXJjaHldXSIKICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgbm9kZS10aXRsZT0iW1tjb21wYXROb2RlVGl0bGVdXSIKICAgICAgPgogICAgICA8L3RmLWdyYXBoLW9wLWNvbXBhdC1jYXJkPgogICAgPC90ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZQogICAgICBpcz0iZG9tLWlmIgogICAgICBpZj0iW1tfaGVhbHRoUGlsbHNBdmFpbGFibGUoZGVidWdnZXJEYXRhRW5hYmxlZCwgbm9kZU5hbWVzVG9IZWFsdGhQaWxscyldXSIKICAgID4KICAgICAgPHRmLWdyYXBoLWRlYnVnZ2VyLWRhdGEtY2FyZAogICAgICAgIHJlbmRlci1oaWVyYXJjaHk9IltbcmVuZGVySGllcmFyY2h5XV0iCiAgICAgICAgZGVidWdnZXItbnVtZXJpYy1hbGVydHM9IltbZGVidWdnZXJOdW1lcmljQWxlcnRzXV0iCiAgICAgICAgbm9kZS1uYW1lcy10by1oZWFsdGgtcGlsbHM9Iltbbm9kZU5hbWVzVG9IZWFsdGhQaWxsc11dIgogICAgICAgIHNlbGVjdGVkLW5vZGU9Int7c2VsZWN0ZWROb2RlfX0iCiAgICAgICAgaGlnaGxpZ2h0ZWQtbm9kZT0ie3toaWdobGlnaHRlZE5vZGV9fSIKICAgICAgICBhcmUtaGVhbHRoLXBpbGxzLWxvYWRpbmc9IltbYXJlSGVhbHRoUGlsbHNMb2FkaW5nXV0iCiAgICAgICAgYWxsLXN0ZXBzLW1vZGUtZW5hYmxlZD0ie3thbGxTdGVwc01vZGVFbmFibGVkfX0iCiAgICAgICAgc3BlY2lmaWMtaGVhbHRoLXBpbGwtc3RlcD0ie3tzcGVjaWZpY0hlYWx0aFBpbGxTdGVwfX0iCiAgICAgICAgaGVhbHRoLXBpbGwtc3RlcC1pbmRleD0ie3toZWFsdGhQaWxsU3RlcEluZGV4fX0iCiAgICAgID4KICAgICAgPC90Zi1ncmFwaC1kZWJ1Z2dlci1kYXRhLWNhcmQ+CiAgICA8L3RlbXBsYXRlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbHMucHJvdG90eXBlLCJ0aXRsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixhcyldLGxzLnByb3RvdHlwZSwiZ3JhcGhIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsWHUpXSxscy5wcm90b3R5cGUsImdyYXBoIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGxvKV0sbHMucHJvdG90eXBlLCJyZW5kZXJIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sbHMucHJvdG90eXBlLCJub2RlTmFtZXNUb0hlYWx0aFBpbGxzIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxscy5wcm90b3R5cGUsImhlYWx0aFBpbGxTdGVwSW5kZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbHMucHJvdG90eXBlLCJjb2xvckJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGxzLnByb3RvdHlwZSwiY29tcGF0Tm9kZVRpdGxlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxscy5wcm90b3R5cGUsInNlbGVjdGVkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbHMucHJvdG90eXBlLCJoaWdobGlnaHRlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLGxzLnByb3RvdHlwZSwic2VsZWN0ZWROb2RlSW5jbHVkZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGxzLnByb3RvdHlwZSwiZGVidWdnZXJEYXRhRW5hYmxlZCIsdm9pZCAwKTtscz1FKFt5dCgidGYtZ3JhcGgtaW5mbyIpXSxscyk7dmFyIGN1cj17TUFYX05PREVfQ09VTlQ6MWU0LE1BWF9FREdFX0NPVU5UOjFlNH0sdG49Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuaGllcmFyY2h5UGFyYW1zPXIzLHRoaXMuYWxsU3RlcHNNb2RlRW5hYmxlZD0hMSx0aGlzLnNwZWNpZmljSGVhbHRoUGlsbFN0ZXA9MCx0aGlzLmNvbXBhdE5vZGVUaXRsZT0iVFBVIENvbXBhdGliaWxpdHkifWZpdCgpe3RoaXMuJC5ncmFwaC5maXQoKX1kb3dubG9hZEFzSW1hZ2UodCl7cmV0dXJuIFJpKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtsZXQgcj15aWVsZCB0aGlzLiQuZ3JhcGguZ2V0SW1hZ2VCbG9iKCksbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7bi5ocmVmPVVSTC5jcmVhdGVPYmplY3RVUkwociksbi5kb3dubG9hZD10LG4uY2xpY2soKSxVUkwucmV2b2tlT2JqZWN0VVJMKG4uaHJlZil9KX1faXNOb3RDb21wbGV0ZSh0KXtyZXR1cm4gdC52YWx1ZTwxMDB9X2dldENvbnRhaW5lckNsYXNzKHQpe3ZhciByPSJjb250YWluZXIiO3JldHVybiB0LmVycm9yJiYocis9IiBlcnJvciIpLHRoaXMuX2lzTm90Q29tcGxldGUodCkmJihyKz0iIGxvYWRpbmciKSxyfV9vbk5vZGVJbmNsdXNpb25Ub2dnbGVkKHQpe3RoaXMuJC5ncmFwaC5ub2RlVG9nZ2xlRXh0cmFjdCh0LmRldGFpbC5uYW1lKX1fb25Ob2RlU2VyaWVzR3JvdXBUb2dnbGVkKHQpe3RoaXMuJC5ncmFwaC5ub2RlVG9nZ2xlU2VyaWVzR3JvdXAodC5kZXRhaWwubmFtZSl9X3VwZGF0ZU5vZGVJbmNsdWRlKCl7bGV0IHQ9dGhpcy5yZW5kZXJIaWVyYXJjaHk/dGhpcy5yZW5kZXJIaWVyYXJjaHkuZ2V0Tm9kZUJ5TmFtZSh0aGlzLnNlbGVjdGVkTm9kZSk6bnVsbDt0aGlzLl9zZWxlY3RlZE5vZGVJbmNsdWRlPXQ/dC5pbmNsdWRlOnVyLlVOU1BFQ0lGSUVEfV9zbGltR3JhcGhDaGFuZ2VkKCl7aWYoIXRoaXMuZ3JhcGgpcmV0dXJuO2xldHtNQVhfTk9ERV9DT1VOVDp0LE1BWF9FREdFX0NPVU5UOnJ9PWN1cjtPYmplY3Qua2V5cyh0aGlzLmdyYXBoLm5vZGVzKS5sZW5ndGg+dCYmdGhpcy5ncmFwaC5lZGdlcy5sZW5ndGg+ciYmdGhpcy5jb2xvckJ5PT09R24uU1RSVUNUVVJFJiYodGhpcy5jb2xvckJ5PUduLk5PTkUpfV9lbnN1cmVUZW1wbGF0ZXMoKXshdGhpcy5ncmFwaEhpZXJhcmNoeXx8dGhpcy5jb2xvckJ5IT09R24uU1RSVUNUVVJFfHx0aGlzLmdyYXBoSGllcmFyY2h5LmdldFRlbXBsYXRlSW5kZXgoKXx8dGhpcy5ncmFwaEhpZXJhcmNoeS51cGRhdGVUZW1wbGF0ZXMoKX19O3RuLnRlbXBsYXRlPVFgCiAgICA8c3R5bGU+CiAgICAgIDo6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIC9kZWVwLyAuY2xvc2UgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgbGVmdDogMTVweDsKICAgICAgICBib3R0b206IDE1cHg7CiAgICAgIH0KCiAgICAgIC5jb250YWluZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAuY29udGFpbmVyLmxvYWRpbmcgewogICAgICAgIGN1cnNvcjogcHJvZ3Jlc3M7CiAgICAgICAgb3BhY2l0eTogMC4xOwogICAgICB9CgogICAgICAuY29udGFpbmVyLmxvYWRpbmcuZXJyb3IgewogICAgICAgIGN1cnNvcjogYXV0bzsKICAgICAgfQoKICAgICAgI2luZm8gewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogNXB4OwogICAgICAgIHRvcDogNXB4OwogICAgICAgIHBhZGRpbmc6IDBweDsKICAgICAgICBtYXgtd2lkdGg6IDM4MHB4OwogICAgICAgIG1pbi13aWR0aDogMzIwcHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwogICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMmRwOwogICAgICB9CgogICAgICAjbWFpbiB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAjcHJvZ3Jlc3MtYmFyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiA0MHB4OwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICB9CgogICAgICAjcHJvZ3Jlc3MtbXNnIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgICAgIHdpZHRoOiA0MDBweDsKICAgICAgfQoKICAgICAgcGFwZXItcHJvZ3Jlc3MgewogICAgICAgIHdpZHRoOiA0MDBweDsKICAgICAgICAtLXBhcGVyLXByb2dyZXNzLWhlaWdodDogNnB4OwogICAgICAgIC0tcGFwZXItcHJvZ3Jlc3MtYWN0aXZlLWNvbG9yOiAjZjM5MTNlOwogICAgICB9CgogICAgICAuY29udGV4dC1tZW51IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTJlMmUyOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbWluLXdpZHRoOiAxNTBweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZDRkNGQ0OwogICAgICB9CgogICAgICAvZGVlcC8gLmNvbnRleHQtbWVudSB1bCB7CiAgICAgICAgbGlzdC1zdHlsZS10eXBlOiBub25lOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgfQoKICAgICAgL2RlZXAvIC5jb250ZXh0LW1lbnUgdWwgbGkgewogICAgICAgIHBhZGRpbmc6IDRweCAxNnB4OwogICAgICB9CgogICAgICAvZGVlcC8gLmNvbnRleHQtbWVudSB1bCBsaTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YzOTEzZTsKICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzTm90Q29tcGxldGUocHJvZ3Jlc3MpXV0iPgogICAgICA8ZGl2IGlkPSJwcm9ncmVzcy1iYXIiPgogICAgICAgIDxkaXYgaWQ9InByb2dyZXNzLW1zZyI+W1twcm9ncmVzcy5tc2ddXTwvZGl2PgogICAgICAgIDxwYXBlci1wcm9ncmVzcyB2YWx1ZT0iW1twcm9ncmVzcy52YWx1ZV1dIj48L3BhcGVyLXByb2dyZXNzPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CiAgICA8ZGl2IGNsYXNzJD0iW1tfZ2V0Q29udGFpbmVyQ2xhc3MocHJvZ3Jlc3MpXV0iPgogICAgICA8ZGl2IGlkPSJtYWluIj4KICAgICAgICA8dGYtZ3JhcGgKICAgICAgICAgIGlkPSJncmFwaCIKICAgICAgICAgIGdyYXBoLWhpZXJhcmNoeT0ie3tncmFwaEhpZXJhcmNoeX19IgogICAgICAgICAgYmFzaWMtZ3JhcGg9IltbZ3JhcGhdXSIKICAgICAgICAgIGhpZXJhcmNoeS1wYXJhbXM9IltbaGllcmFyY2h5UGFyYW1zXV0iCiAgICAgICAgICByZW5kZXItaGllcmFyY2h5PSJ7e3JlbmRlckhpZXJhcmNoeX19IgogICAgICAgICAgZGV2aWNlcy1mb3Itc3RhdHM9IltbZGV2aWNlc0ZvclN0YXRzXV0iCiAgICAgICAgICBzdGF0cz0iW1tzdGF0c11dIgogICAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tzZWxlY3RlZE5vZGV9fSIKICAgICAgICAgIGhpZ2hsaWdodGVkLW5vZGU9Int7X2hpZ2hsaWdodGVkTm9kZX19IgogICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgY29sb3ItYnktcGFyYW1zPSJ7e2NvbG9yQnlQYXJhbXN9fSIKICAgICAgICAgIHByb2dyZXNzPSJ7e3Byb2dyZXNzfX0iCiAgICAgICAgICBlZGdlLWxhYmVsLWZ1bmN0aW9uPSJbW2VkZ2VMYWJlbEZ1bmN0aW9uXV0iCiAgICAgICAgICBlZGdlLXdpZHRoLWZ1bmN0aW9uPSJbW2VkZ2VXaWR0aEZ1bmN0aW9uXV0iCiAgICAgICAgICBub2RlLW5hbWVzLXRvLWhlYWx0aC1waWxscz0iW1tub2RlTmFtZXNUb0hlYWx0aFBpbGxzXV0iCiAgICAgICAgICBoZWFsdGgtcGlsbC1zdGVwLWluZGV4PSJbW2hlYWx0aFBpbGxTdGVwSW5kZXhdXSIKICAgICAgICAgIGhhbmRsZS1ub2RlLXNlbGVjdGVkPSJbW2hhbmRsZU5vZGVTZWxlY3RlZF1dIgogICAgICAgICAgaGFuZGxlLWVkZ2Utc2VsZWN0ZWQ9IltbaGFuZGxlRWRnZVNlbGVjdGVkXV0iCiAgICAgICAgICB0cmFjZS1pbnB1dHM9IltbdHJhY2VJbnB1dHNdXSIKICAgICAgICAgIGF1dG8tZXh0cmFjdC1ub2Rlcz0iW1thdXRvRXh0cmFjdE5vZGVzXV0iCiAgICAgICAgPjwvdGYtZ3JhcGg+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGlkPSJpbmZvIj4KICAgICAgICA8dGYtZ3JhcGgtaW5mbwogICAgICAgICAgaWQ9ImdyYXBoLWluZm8iCiAgICAgICAgICB0aXRsZT0ic2VsZWN0ZWQiCiAgICAgICAgICBncmFwaC1oaWVyYXJjaHk9IltbZ3JhcGhIaWVyYXJjaHldXSIKICAgICAgICAgIHJlbmRlci1oaWVyYXJjaHk9IltbcmVuZGVySGllcmFyY2h5XV0iCiAgICAgICAgICBncmFwaD0iW1tncmFwaF1dIgogICAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tzZWxlY3RlZE5vZGV9fSIKICAgICAgICAgIHNlbGVjdGVkLW5vZGUtaW5jbHVkZT0ie3tfc2VsZWN0ZWROb2RlSW5jbHVkZX19IgogICAgICAgICAgaGlnaGxpZ2h0ZWQtbm9kZT0ie3tfaGlnaGxpZ2h0ZWROb2RlfX0iCiAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgICBjb2xvci1ieS1wYXJhbXM9IltbY29sb3JCeVBhcmFtc11dIgogICAgICAgICAgZGVidWdnZXItZGF0YS1lbmFibGVkPSJbW2RlYnVnZ2VyRGF0YUVuYWJsZWRdXSIKICAgICAgICAgIGFyZS1oZWFsdGgtcGlsbHMtbG9hZGluZz0iW1thcmVIZWFsdGhQaWxsc0xvYWRpbmddXSIKICAgICAgICAgIGRlYnVnZ2VyLW51bWVyaWMtYWxlcnRzPSJbW2RlYnVnZ2VyTnVtZXJpY0FsZXJ0c11dIgogICAgICAgICAgbm9kZS1uYW1lcy10by1oZWFsdGgtcGlsbHM9Iltbbm9kZU5hbWVzVG9IZWFsdGhQaWxsc11dIgogICAgICAgICAgYWxsLXN0ZXBzLW1vZGUtZW5hYmxlZD0ie3thbGxTdGVwc01vZGVFbmFibGVkfX0iCiAgICAgICAgICBzcGVjaWZpYy1oZWFsdGgtcGlsbC1zdGVwPSJ7e3NwZWNpZmljSGVhbHRoUGlsbFN0ZXB9fSIKICAgICAgICAgIGhlYWx0aC1waWxsLXN0ZXAtaW5kZXg9Int7aGVhbHRoUGlsbFN0ZXBJbmRleH19IgogICAgICAgICAgY29tcGF0LW5vZGUtdGl0bGU9IltbY29tcGF0Tm9kZVRpdGxlXV0iCiAgICAgICAgICBvbi1ub2RlLXRvZ2dsZS1pbmNsdXNpb249Il9vbk5vZGVJbmNsdXNpb25Ub2dnbGVkIgogICAgICAgICAgb24tbm9kZS10b2dnbGUtc2VyaWVzZ3JvdXA9Il9vbk5vZGVTZXJpZXNHcm91cFRvZ2dsZWQiCiAgICAgICAgPjwvdGYtZ3JhcGgtaW5mbz4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGFzKV0sdG4ucHJvdG90eXBlLCJncmFwaEhpZXJhcmNoeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixYdSldLHRuLnByb3RvdHlwZSwiZ3JhcGgiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdG4ucHJvdG90eXBlLCJoaWVyYXJjaHlQYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdG4ucHJvdG90eXBlLCJzdGF0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSx0bi5wcm90b3R5cGUsInByb2dyZXNzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdG4ucHJvdG90eXBlLCJ0cmFjZUlucHV0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHRuLnByb3RvdHlwZSwiYXV0b0V4dHJhY3ROb2RlcyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sdG4ucHJvdG90eXBlLCJjb2xvckJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSx0bi5wcm90b3R5cGUsImNvbG9yQnlQYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLGxvKV0sdG4ucHJvdG90eXBlLCJyZW5kZXJIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSx0bi5wcm90b3R5cGUsImRlYnVnZ2VyRGF0YUVuYWJsZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSx0bi5wcm90b3R5cGUsImFyZUhlYWx0aFBpbGxzTG9hZGluZyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLHRuLnByb3RvdHlwZSwiZGVidWdnZXJOdW1lcmljQWxlcnRzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRuLnByb3RvdHlwZSwibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSx0bi5wcm90b3R5cGUsImFsbFN0ZXBzTW9kZUVuYWJsZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLHRuLnByb3RvdHlwZSwic3BlY2lmaWNIZWFsdGhQaWxsU3RlcCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSx0bi5wcm90b3R5cGUsImhlYWx0aFBpbGxTdGVwSW5kZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHRuLnByb3RvdHlwZSwic2VsZWN0ZWROb2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHRuLnByb3RvdHlwZSwiY29tcGF0Tm9kZVRpdGxlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRuLnByb3RvdHlwZSwiZWRnZVdpZHRoRnVuY3Rpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sdG4ucHJvdG90eXBlLCJfc2VsZWN0ZWROb2RlSW5jbHVkZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx0bi5wcm90b3R5cGUsIl9oaWdobGlnaHRlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdG4ucHJvdG90eXBlLCJoYW5kbGVOb2RlU2VsZWN0ZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdG4ucHJvdG90eXBlLCJlZGdlTGFiZWxGdW5jdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSx0bi5wcm90b3R5cGUsImhhbmRsZUVkZ2VTZWxlY3RlZCIsdm9pZCAwKTtFKFtCdCgic2VsZWN0ZWROb2RlIiwicmVuZGVySGllcmFyY2h5IiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSx0bi5wcm90b3R5cGUsIl91cGRhdGVOb2RlSW5jbHVkZSIsbnVsbCk7RShbQnQoImdyYXBoIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSx0bi5wcm90b3R5cGUsIl9zbGltR3JhcGhDaGFuZ2VkIixudWxsKTtFKFtCdCgiY29sb3JCeSIsImdyYXBoSGllcmFyY2h5IiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSx0bi5wcm90b3R5cGUsIl9lbnN1cmVUZW1wbGF0ZXMiLG51bGwpO3RuPUUoW3l0KCJ0Zi1ncmFwaC1ib2FyZCIpXSx0bik7dmFyIGMzPUVlKE9lKCksMSk7dmFyIEp1PWNsYXNze2lzTm90VHB1T3AodCl7cmV0dXJuIHQudG9Mb3dlckNhc2UoKS5zZWFyY2goImNwdToiKSE9LTF8fHQudG9Mb3dlckNhc2UoKS5zZWFyY2goImdwdToiKSE9LTE/ITA6dC50b0xvd2VyQ2FzZSgpLnNlYXJjaCgidHB1Iik9PS0xfW9wVmFsaWQodCl7cmV0dXJuIHQubmFtZS5zZWFyY2goTWEpPT0wfHwhdC5vcHx8dC5kZXZpY2UmJnRoaXMuaXNOb3RUcHVPcCh0LmRldmljZSl8fHQuZGV2aWNlJiZ0LmRldmljZS5zZWFyY2goIlRQVV9TWVNURU0iKSE9LTE/ITA6YzMuaW5jbHVkZXMoSnUuV0hJVEVMSVNULHQub3ApfX07SnUuV0hJVEVMSVNUPVsiQWJzIiwiQWNvcyIsIkFjb3NoIiwiQWRkIiwiQWRkTiIsIkFkZFYyIiwiQWRqdXN0Q29udHJhc3R2MiIsIkFkanVzdEh1ZSIsIkFkanVzdFNhdHVyYXRpb24iLCJBbGwiLCJBbGxUb0FsbCIsIkFuZ2xlIiwiQW55IiwiQXBwcm94aW1hdGVFcXVhbCIsIkFyZ01heCIsIkFyZ01pbiIsIkFzaW4iLCJBc2luaCIsIkFzc2VydCIsIkFzc2lnbkFkZFZhcmlhYmxlT3AiLCJBc3NpZ25TdWJWYXJpYWJsZU9wIiwiQXNzaWduVmFyaWFibGVPcCIsIkF0YW4iLCJBdGFuMiIsIkF0YW5oIiwiQXZnUG9vbCIsIkF2Z1Bvb2wzRCIsIkF2Z1Bvb2wzREdyYWQiLCJBdmdQb29sR3JhZCIsIkJhdGNoTWF0TXVsIiwiQmF0Y2hNYXRNdWxWMiIsIkJhdGNoVG9TcGFjZSIsIkJhdGNoVG9TcGFjZU5EIiwiQmVzc2VsSTBlIiwiQmVzc2VsSTFlIiwiQmV0YWluYyIsIkJpYXNBZGQiLCJCaWFzQWRkR3JhZCIsIkJpYXNBZGRWMSIsIkJpdGNhc3QiLCJCaXR3aXNlQW5kIiwiQml0d2lzZU9yIiwiQml0d2lzZVhvciIsIkJyb2FkY2FzdEFyZ3MiLCJCcm9hZGNhc3RHcmFkaWVudEFyZ3MiLCJCcm9hZGNhc3RUbyIsIkJ1Y2tldGl6ZSIsIkNhc2UiLCJDYXN0IiwiQ2VpbCIsIkNoZWNrTnVtZXJpY3MiLCJDaG9sZXNreSIsIkNsaXBCeVZhbHVlIiwiQ29sbGVjdGl2ZVBlcm11dGUiLCJDb2xsZWN0aXZlUmVkdWNlVjIiLCJDb21wbGV4IiwiQ29tcGxleEFicyIsIkNvbmNhdCIsIkNvbmNhdE9mZnNldCIsIkNvbmNhdFYyIiwiQ29uaiIsIkNvbmp1Z2F0ZVRyYW5zcG9zZSIsIkNvbnN0IiwiQ29udHJvbFRyaWdnZXIiLCJDb252MkQiLCJDb252MkRCYWNrcHJvcEZpbHRlciIsIkNvbnYyREJhY2twcm9wSW5wdXQiLCJDb252M0QiLCJDb252M0RCYWNrcHJvcEZpbHRlclYyIiwiQ29udjNEQmFja3Byb3BJbnB1dFYyIiwiQ29zIiwiQ29zaCIsIkNyb3NzIiwiQ3Jvc3NSZXBsaWNhU3VtIiwiQ3VtcHJvZCIsIkN1bXN1bSIsIkRhdGFGb3JtYXREaW1NYXAiLCJEYXRhRm9ybWF0VmVjUGVybXV0ZSIsIkRlcHRoVG9TcGFjZSIsIkRlcHRod2lzZUNvbnYyZE5hdGl2ZSIsIkRlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wRmlsdGVyIiwiRGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BJbnB1dCIsIkRlcXVhbnRpemUiLCJEZXZpY2VJbmRleCIsIkRpYWciLCJEaWFnUGFydCIsIkRpZ2FtbWEiLCJEaXYiLCJEaXZOb05hbiIsIkR5bmFtaWNTdGl0Y2giLCJFaW5zdW0iLCJFbHUiLCJFbHVHcmFkIiwiRW1wdHkiLCJFbXB0eVRlbnNvckxpc3QiLCJFbnN1cmVTaGFwZSIsIkVxdWFsIiwiRXJmIiwiRXJmYyIsIkVyZmludiIsIkV4cCIsIkV4cGFuZERpbXMiLCJFeHBtMSIsIkV4dHJhY3RJbWFnZVBhdGNoZXMiLCJGRlQiLCJGRlQyRCIsIkZGVDNEIiwiRmFrZVBhcmFtIiwiRmFrZVF1YW50V2l0aE1pbk1heEFyZ3MiLCJGYWtlUXVhbnRXaXRoTWluTWF4QXJnc0dyYWRpZW50IiwiRmFrZVF1YW50V2l0aE1pbk1heFZhcnMiLCJGYWtlUXVhbnRXaXRoTWluTWF4VmFyc0dyYWRpZW50IiwiRmlsbCIsIkZsb29yIiwiRmxvb3JEaXYiLCJGbG9vck1vZCIsIkZ1c2VkQmF0Y2hOb3JtIiwiRnVzZWRCYXRjaE5vcm1HcmFkIiwiRnVzZWRCYXRjaE5vcm1HcmFkVjIiLCJGdXNlZEJhdGNoTm9ybUdyYWRWMyIsIkZ1c2VkQmF0Y2hOb3JtVjIiLCJGdXNlZEJhdGNoTm9ybVYzIiwiR2F0aGVyIiwiR2F0aGVyTmQiLCJHYXRoZXJWMiIsIkdldEl0ZW0iLCJHcmVhdGVyIiwiR3JlYXRlckVxdWFsIiwiSFNWVG9SR0IiLCJJRkZUIiwiSUZGVDJEIiwiSUZGVDNEIiwiSVJGRlQiLCJJUkZGVDJEIiwiSVJGRlQzRCIsIklkZW50aXR5IiwiSWRlbnRpdHlOIiwiSWYiLCJJZ2FtbWEiLCJJZ2FtbWFHcmFkQSIsIklnYW1tYWMiLCJJbWFnIiwiSW5Ub3BLVjIiLCJJbmZlZWREZXF1ZXVlIiwiSW5mZWVkRGVxdWV1ZVR1cGxlIiwiSW5wbGFjZUFkZCIsIklucGxhY2VVcGRhdGUiLCJJbnYiLCJJbnZlcnQiLCJJbnZlcnRQZXJtdXRhdGlvbiIsIklzRmluaXRlIiwiSXNJbmYiLCJJc05hbiIsIkt0aE9yZGVyU3RhdGlzdGljIiwiTDJMb3NzIiwiTFJOIiwiTFJOR3JhZCIsIkxlYWt5UmVsdSIsIkxlYWt5UmVsdUdyYWQiLCJMZWZ0U2hpZnQiLCJMZXNzIiwiTGVzc0VxdWFsIiwiTGdhbW1hIiwiTGluU3BhY2UiLCJMaXN0RGlmZiIsIkxvZyIsIkxvZzFwIiwiTG9nU29mdG1heCIsIkxvZ2ljYWxBbmQiLCJMb2dpY2FsTm90IiwiTG9naWNhbE9yIiwiTG93ZXJCb3VuZCIsIk1ha2VVbmlxdWUiLCJNYXRNdWwiLCJNYXRyaXhCYW5kUGFydCIsIk1hdHJpeERpYWciLCJNYXRyaXhEaWFnUGFydCIsIk1hdHJpeERpYWdQYXJ0VjIiLCJNYXRyaXhEaWFnUGFydFYzIiwiTWF0cml4RGlhZ1YyIiwiTWF0cml4RGlhZ1YzIiwiTWF0cml4SW52ZXJzZSIsIk1hdHJpeFNldERpYWciLCJNYXRyaXhTZXREaWFnVjIiLCJNYXRyaXhTZXREaWFnVjMiLCJNYXRyaXhTb2x2ZSIsIk1hdHJpeFRyaWFuZ3VsYXJTb2x2ZSIsIk1heCIsIk1heFBvb2wiLCJNYXhQb29sM0QiLCJNYXhQb29sM0RHcmFkIiwiTWF4UG9vbDNER3JhZEdyYWQiLCJNYXhQb29sR3JhZCIsIk1heFBvb2xHcmFkR3JhZCIsIk1heFBvb2xHcmFkR3JhZFYyIiwiTWF4UG9vbEdyYWRWMiIsIk1heFBvb2xWMiIsIk1heGltdW0iLCJNZWFuIiwiTWluIiwiTWluaW11bSIsIk1pcnJvclBhZCIsIk1pcnJvclBhZEdyYWQiLCJNb2QiLCJNdWwiLCJNdWxOb05hbiIsIk11bHRpbm9taWFsIiwiTmR0cmkiLCJOZWciLCJOZXh0QWZ0ZXIiLCJOb09wIiwiTm9uTWF4U3VwcHJlc3Npb25WNCIsIk5vdEVxdWFsIiwiT25lSG90IiwiT25lc0xpa2UiLCJPdXRmZWVkRW5xdWV1ZSIsIk91dGZlZWRFbnF1ZXVlVHVwbGUiLCJQYWNrIiwiUGFkIiwiUGFkVjIiLCJQYXJhbGxlbER5bmFtaWNTdGl0Y2giLCJQYXJhbWV0ZXJpemVkVHJ1bmNhdGVkTm9ybWFsIiwiUGFydGl0aW9uZWRDYWxsIiwiUGxhY2Vob2xkZXJXaXRoRGVmYXVsdCIsIlBvbHlnYW1tYSIsIlBvcHVsYXRpb25Db3VudCIsIlBvdyIsIlByZXZlbnRHcmFkaWVudCIsIlByb2QiLCJRciIsIlF1YW50aXplQW5kRGVxdWFudGl6ZVYyIiwiUXVhbnRpemVBbmREZXF1YW50aXplVjMiLCJSRkZUIiwiUkZGVDJEIiwiUkZGVDNEIiwiUkdCVG9IU1YiLCJSYW5kb21HYW1tYUdyYWQiLCJSYW5kb21TaHVmZmxlIiwiUmFuZG9tU3RhbmRhcmROb3JtYWwiLCJSYW5kb21Vbmlmb3JtIiwiUmFuZG9tVW5pZm9ybUludCIsIlJhbmdlIiwiUmFuayIsIlJlYWRWYXJpYWJsZU9wIiwiUmVhbCIsIlJlYWxEaXYiLCJSZWNpcHJvY2FsIiwiUmVjaXByb2NhbEdyYWQiLCJSZWx1IiwiUmVsdTYiLCJSZWx1NkdyYWQiLCJSZWx1R3JhZCIsIlJlc2hhcGUiLCJSZXNpemVCaWxpbmVhciIsIlJlc2l6ZUJpbGluZWFyR3JhZCIsIlJlc2l6ZU5lYXJlc3ROZWlnaGJvciIsIlJlc2l6ZU5lYXJlc3ROZWlnaGJvckdyYWQiLCJSZXNvdXJjZUFwcGx5QWRhTWF4IiwiUmVzb3VyY2VBcHBseUFkYWRlbHRhIiwiUmVzb3VyY2VBcHBseUFkYWdyYWQiLCJSZXNvdXJjZUFwcGx5QWRhZ3JhZERBIiwiUmVzb3VyY2VBcHBseUFkYWdyYWRWMiIsIlJlc291cmNlQXBwbHlBZGFtIiwiUmVzb3VyY2VBcHBseUFkZFNpZ24iLCJSZXNvdXJjZUFwcGx5Q2VudGVyZWRSTVNQcm9wIiwiUmVzb3VyY2VBcHBseUZ0cmwiLCJSZXNvdXJjZUFwcGx5RnRybFYyIiwiUmVzb3VyY2VBcHBseUdyYWRpZW50RGVzY2VudCIsIlJlc291cmNlQXBwbHlLZXJhc01vbWVudHVtIiwiUmVzb3VyY2VBcHBseU1vbWVudHVtIiwiUmVzb3VyY2VBcHBseVBvd2VyU2lnbiIsIlJlc291cmNlQXBwbHlQcm94aW1hbEFkYWdyYWQiLCJSZXNvdXJjZUFwcGx5UHJveGltYWxHcmFkaWVudERlc2NlbnQiLCJSZXNvdXJjZUFwcGx5Uk1TUHJvcCIsIlJlc291cmNlR2F0aGVyIiwiUmVzb3VyY2VTY2F0dGVyQWRkIiwiUmVzb3VyY2VTY2F0dGVyRGl2IiwiUmVzb3VyY2VTY2F0dGVyTWF4IiwiUmVzb3VyY2VTY2F0dGVyTWluIiwiUmVzb3VyY2VTY2F0dGVyTXVsIiwiUmVzb3VyY2VTY2F0dGVyTmRBZGQiLCJSZXNvdXJjZVNjYXR0ZXJOZFN1YiIsIlJlc291cmNlU2NhdHRlck5kVXBkYXRlIiwiUmVzb3VyY2VTY2F0dGVyU3ViIiwiUmVzb3VyY2VTY2F0dGVyVXBkYXRlIiwiUmVzb3VyY2VTdHJpZGVkU2xpY2VBc3NpZ24iLCJSZXZlcnNlIiwiUmV2ZXJzZVNlcXVlbmNlIiwiUmV2ZXJzZVYyIiwiUmlnaHRTaGlmdCIsIlJpbnQiLCJSbmdSZWFkQW5kU2tpcCIsIlJuZ1NraXAiLCJSb2xsIiwiUm91bmQiLCJSc3FydCIsIlJzcXJ0R3JhZCIsIlNjYXR0ZXJOZCIsIlNlbGVjdCIsIlNlbGVjdFYyIiwiU2VsZkFkam9pbnRFaWdWMiIsIlNlbHUiLCJTZWx1R3JhZCIsIlNoYXBlIiwiU2hhcGVOIiwiU2lnbW9pZCIsIlNpZ21vaWRHcmFkIiwiU2lnbiIsIlNpbiIsIlNpbmgiLCJTaXplIiwiU2xpY2UiLCJTbmFwc2hvdCIsIlNvZnRtYXgiLCJTb2Z0bWF4Q3Jvc3NFbnRyb3B5V2l0aExvZ2l0cyIsIlNvZnRwbHVzIiwiU29mdHBsdXNHcmFkIiwiU29mdHNpZ24iLCJTb2Z0c2lnbkdyYWQiLCJTcGFjZVRvQmF0Y2giLCJTcGFjZVRvQmF0Y2hORCIsIlNwYWNlVG9EZXB0aCIsIlNwYXJzZU1hdE11bCIsIlNwYXJzZVNvZnRtYXhDcm9zc0VudHJvcHlXaXRoTG9naXRzIiwiU3BhcnNlVG9EZW5zZSIsIlNwbGl0IiwiU3BsaXRWIiwiU3FydCIsIlNxcnRHcmFkIiwiU3F1YXJlIiwiU3F1YXJlZERpZmZlcmVuY2UiLCJTcXVlZXplIiwiU3RhY2tDbG9zZVYyIiwiU3RhY2tQb3BWMiIsIlN0YWNrUHVzaFYyIiwiU3RhY2tWMiIsIlN0YXRlZnVsUGFydGl0aW9uZWRDYWxsIiwiU3RhdGVmdWxTdGFuZGFyZE5vcm1hbFYyIiwiU3RhdGVmdWxUcnVuY2F0ZWROb3JtYWwiLCJTdGF0ZWZ1bFVuaWZvcm0iLCJTdGF0ZWZ1bFVuaWZvcm1GdWxsSW50IiwiU3RhdGVmdWxVbmlmb3JtSW50IiwiU3RhdGVsZXNzQ2FzZSIsIlN0YXRlbGVzc0lmIiwiU3RhdGVsZXNzTXVsdGlub21pYWwiLCJTdGF0ZWxlc3NSYW5kb21HZXRBbGciLCJTdGF0ZWxlc3NSYW5kb21HZXRLZXlDb3VudGVyIiwiU3RhdGVsZXNzUmFuZG9tR2V0S2V5Q291bnRlckFsZyIsIlN0YXRlbGVzc1JhbmRvbU5vcm1hbCIsIlN0YXRlbGVzc1JhbmRvbU5vcm1hbFYyIiwiU3RhdGVsZXNzUmFuZG9tVW5pZm9ybSIsIlN0YXRlbGVzc1JhbmRvbVVuaWZvcm1GdWxsSW50IiwiU3RhdGVsZXNzUmFuZG9tVW5pZm9ybUZ1bGxJbnRWMiIsIlN0YXRlbGVzc1JhbmRvbVVuaWZvcm1JbnQiLCJTdGF0ZWxlc3NSYW5kb21Vbmlmb3JtSW50VjIiLCJTdGF0ZWxlc3NSYW5kb21Vbmlmb3JtVjIiLCJTdGF0ZWxlc3NUcnVuY2F0ZWROb3JtYWwiLCJTdGF0ZWxlc3NUcnVuY2F0ZWROb3JtYWxWMiIsIlN0YXRlbGVzc1doaWxlIiwiU3RvcEdyYWRpZW50IiwiU3RyaWRlZFNsaWNlIiwiU3RyaWRlZFNsaWNlR3JhZCIsIlN1YiIsIlN1bSIsIlN2ZCIsIlN5bWJvbGljR3JhZGllbnQiLCJUUFVFbWJlZGRpbmdBY3RpdmF0aW9ucyIsIlRhbiIsIlRhbmgiLCJUYW5oR3JhZCIsIlRlbnNvckFycmF5Q2xvc2VWMyIsIlRlbnNvckFycmF5Q29uY2F0VjMiLCJUZW5zb3JBcnJheUdhdGhlclYzIiwiVGVuc29yQXJyYXlHcmFkVjMiLCJUZW5zb3JBcnJheVJlYWRWMyIsIlRlbnNvckFycmF5U2NhdHRlclYzIiwiVGVuc29yQXJyYXlTaXplVjMiLCJUZW5zb3JBcnJheVNwbGl0VjMiLCJUZW5zb3JBcnJheVYzIiwiVGVuc29yQXJyYXlXcml0ZVYzIiwiVGVuc29yTGlzdENvbmNhdFYyIiwiVGVuc29yTGlzdEVsZW1lbnRTaGFwZSIsIlRlbnNvckxpc3RGcm9tVGVuc29yIiwiVGVuc29yTGlzdEdhdGhlciIsIlRlbnNvckxpc3RHZXRJdGVtIiwiVGVuc29yTGlzdExlbmd0aCIsIlRlbnNvckxpc3RQb3BCYWNrIiwiVGVuc29yTGlzdFB1c2hCYWNrIiwiVGVuc29yTGlzdFJlc2VydmUiLCJUZW5zb3JMaXN0U2V0SXRlbSIsIlRlbnNvckxpc3RTcGxpdCIsIlRlbnNvckxpc3RTdGFjayIsIlRlbnNvclNjYXR0ZXJBZGQiLCJUZW5zb3JTY2F0dGVyTWF4IiwiVGVuc29yU2NhdHRlck1pbiIsIlRlbnNvclNjYXR0ZXJTdWIiLCJUZW5zb3JTY2F0dGVyVXBkYXRlIiwiVGVuc29yU3RyaWRlZFNsaWNlVXBkYXRlIiwiVGlsZSIsIlRvcEtVbmlxdWUiLCJUb3BLVjIiLCJUb3BLV2l0aFVuaXF1ZSIsIlRyYW5zcG9zZSIsIlRyaWRpYWdvbmFsU29sdmUiLCJUcnVuY2F0ZURpdiIsIlRydW5jYXRlTW9kIiwiVHJ1bmNhdGVkTm9ybWFsIiwiVW5pcXVlIiwiVW5wYWNrIiwiVW5zb3J0ZWRTZWdtZW50TWF4IiwiVW5zb3J0ZWRTZWdtZW50TWluIiwiVW5zb3J0ZWRTZWdtZW50UHJvZCIsIlVuc29ydGVkU2VnbWVudFN1bSIsIlVwcGVyQm91bmQiLCJWYXJJc0luaXRpYWxpemVkT3AiLCJWYXJpYWJsZVNoYXBlIiwiV2hlcmUiLCJXaGlsZSIsIlhkaXZ5IiwiWGxhQnJvYWRjYXN0SGVscGVyIiwiWGxhQ29udiIsIlhsYUNvbnZWMiIsIlhsYURlcXVhbnRpemUiLCJYbGFEb3QiLCJYbGFEb3RWMiIsIlhsYUR5bmFtaWNTbGljZSIsIlhsYUR5bmFtaWNVcGRhdGVTbGljZSIsIlhsYUVpbnN1bSIsIlhsYUdhdGhlciIsIlhsYUhvc3RDb21wdXRlIiwiWGxhSWYiLCJYbGFLZXlWYWx1ZVNvcnQiLCJYbGFQYWQiLCJYbGFSZWN2IiwiWGxhUmVjdkZyb21Ib3N0IiwiWGxhUmVkdWNlIiwiWGxhUmVkdWNlV2luZG93IiwiWGxhUmVwbGljYUlkIiwiWGxhU2NhdHRlciIsIlhsYVNlbGVjdEFuZFNjYXR0ZXIiLCJYbGFTZWxmQWRqb2ludEVpZyIsIlhsYVNlbmQiLCJYbGFTZW5kVG9Ib3N0IiwiWGxhU2V0Qm91bmQiLCJYbGFTZXREeW5hbWljRGltZW5zaW9uU2l6ZSIsIlhsYVNoYXJkaW5nIiwiWGxhU29ydCIsIlhsYVNwbWRGdWxsVG9TaGFyZFNoYXBlIiwiWGxhU3BtZFNoYXJkVG9GdWxsU2hhcGUiLCJYbGFTdmQiLCJYbGFWYXJpYWRpY1JlZHVjZSIsIlhsYVZhcmlhZGljU29ydCIsIlhsYVdoaWxlIiwiWGxvZzFweSIsIlhsb2d5IiwiWmVyb3NMaWtlIiwiWmV0YSIsIkVudGVyIiwiRXhpdCIsIkxvb3BDb25kIiwiTWVyZ2UiLCJOZXh0SXRlcmF0aW9uIiwiU3dpdGNoIiwiX0FyZyIsIl9BcnJheVRvTGlzdCIsIl9GdXNlZEJhdGNoTm9ybUV4IiwiX0xpc3RUb0FycmF5IiwiX1BhcmFsbGVsQ29uY2F0VXBkYXRlIiwiX1JlY3ZUUFVFbWJlZGRpbmdBY3RpdmF0aW9ucyIsIl9SZWN2VFBVRW1iZWRkaW5nRGVkdXBsaWNhdGlvbkRhdGEiLCJfUmV0dmFsIiwiX1NlbmRUUFVFbWJlZGRpbmdHcmFkaWVudHMiLCJfVFBVQ29tcGlsZSIsIl9UUFVFeGVjdXRlIiwiX1VuYXJ5T3BzQ29tcG9zaXRpb24iLCJUUFVDb21waWxhdGlvblJlc3VsdCIsIlRQVVJlcGxpY2F0ZWRJbnB1dCIsIlRQVVJlcGxpY2F0ZWRPdXRwdXQiLCJUUFVSZXBsaWNhdGVNZXRhZGF0YSIsIk1lcmdlVjJDaGVja3BvaW50cyIsIlJlc3RvcmVWMiIsIlNhdmVWMiIsIkFib3J0IiwiQXNzZXJ0IiwiQXNzaWduIiwiUGxhY2Vob2xkZXIiLCJQbGFjZWhvbGRlclYyIiwiU2hhcmRlZEZpbGVuYW1lIiwiU3RyaW5nSm9pbiIsIlZhcmlhYmxlIiwiVmFyaWFibGVWMiIsIlZhckhhbmRsZU9wIiwiQXVkaW9TdW1tYXJ5IiwiQXVkaW9TdW1tYXJ5VjIiLCJEZWJ1Z051bWVyaWNTdW1tYXJ5IiwiSGlzdG9ncmFtU3VtbWFyeSIsIkltYWdlU3VtbWFyeSIsIk1lcmdlU3VtbWFyeSIsIlNjYWxhclN1bW1hcnkiLCJTdGF0c0FnZ3JlZ2F0b3JTdW1tYXJ5Il07ZnVuY3Rpb24gWmxlKGUsdCl7aWYodD09PW51bGwpdGhyb3cgbmV3IEVycm9yKCJDb21wYXRpYmlsaXR5IHByb3ZpZGVyIHJlcXVpcmVkLCBidXQgZ290OiAiK3QpO2MzLmVhY2goZS5ub2RlcyxyPT57ci5jb21wYXRpYmxlPXQub3BWYWxpZChyKSxjMy5lYWNoKHIuaW5FbWJlZGRpbmdzLG49PntuLmNvbXBhdGlibGU9dC5vcFZhbGlkKG4pfSksYzMuZWFjaChyLm91dEVtYmVkZGluZ3Msbj0+e24uY29tcGF0aWJsZT10Lm9wVmFsaWQobil9KX0pfXZhciBnUD1FZShPZSgpLDEpO3ZhciBKbGU9RWUoT2UoKSwxKTt2YXIgTGw9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3Jhd1JlZ2V4SW5wdXQ9IiIsdGhpcy5fcHJldmlvdXNSZWdleElucHV0PSIiLHRoaXMuX3NlYXJjaFRpbWVvdXREZWxheT0xNTAsdGhpcy5fbWF4UmVnZXhSZXN1bHRzPTQyfWdldCBfcmVnZXhJbnB1dCgpe3ZhciB0PXRoaXMucmVuZGVySGllcmFyY2h5LHI9dGhpcy5fcmF3UmVnZXhJbnB1dDtyZXR1cm4gci50cmltKCl9X3JlZ2V4SW5wdXRDaGFuZ2VkKCl7dmFyIHQ9dGhpcy5fcmVnZXhJbnB1dDt0aGlzLl9yZXF1ZXN0U2VhcmNoKCl9X2NsZWFyU2VhcmNoUmVzdWx0cygpe3RoaXMuc2V0KCJfcmVnZXhNYXRjaGVzIixbXSl9X3JlcXVlc3RTZWFyY2goKXtpZighdGhpcy5fc2VhcmNoUGVuZGluZyl7aWYodGhpcy5fcmVnZXhJbnB1dD09PXRoaXMuX3ByZXZpb3VzUmVnZXhJbnB1dCl7dGhpcy5fc2VhcmNoUGVuZGluZz0hMTtyZXR1cm59dGhpcy5fc2VhcmNoUGVuZGluZz0hMCx0aGlzLl9leGVjdXRlU2VhcmNoKCksdGhpcy5hc3luYygoKT0+e3RoaXMuX3NlYXJjaFBlbmRpbmc9ITEsdGhpcy5fcmVxdWVzdFNlYXJjaCgpfSx0aGlzLl9zZWFyY2hUaW1lb3V0RGVsYXkpfX1fZXhlY3V0ZVNlYXJjaCgpe2lmKHRoaXMuX3ByZXZpb3VzUmVnZXhJbnB1dD10aGlzLl9yZWdleElucHV0LCF0aGlzLl9yZWdleElucHV0KXt0aGlzLl9jbGVhclNlYXJjaFJlc3VsdHMoKTtyZXR1cm59dHJ5e3ZhciB0PW5ldyBSZWdFeHAodGhpcy5fcmVnZXhJbnB1dCl9Y2F0Y2goaSl7dGhpcy5fY2xlYXJTZWFyY2hSZXN1bHRzKCk7cmV0dXJufWxldCByPVtdLG49dGhpcy5yZW5kZXJIaWVyYXJjaHkuaGllcmFyY2h5LmdldE5vZGVNYXAoKTtKbGUuZWFjaChuLChpLG8pPT57aWYoci5sZW5ndGg+PXRoaXMuX21heFJlZ2V4UmVzdWx0cylyZXR1cm4hMTshdC50ZXN0KG8pfHxyLnB1c2gobyl9KSx0aGlzLnNldCgiX3JlZ2V4TWF0Y2hlcyIscil9X21hdGNoQ2xpY2tlZCh0KXtsZXQgcj10Lm1vZGVsLml0ZW07dGhpcy5zZXQoInNlbGVjdGVkTm9kZSIsciksUG8oe2FjdGlvbklkOmpyLk5PREVfU0VBUkNIX1JFU1VMVF9GT0NVU0VEfSl9fTtMbC50ZW1wbGF0ZT1RYAogICAgPGRpdiBpZD0ic2VhcmNoLWNvbnRhaW5lciI+CiAgICAgIDxwYXBlci1pbnB1dAogICAgICAgIGlkPSJydW5zLXJlZ2V4IgogICAgICAgIGxhYmVsPSJTZWFyY2ggbm9kZXMgKHJlZ2V4KSIKICAgICAgICB2YWx1ZT0ie3tfcmF3UmVnZXhJbnB1dH19IgogICAgICA+CiAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgIDxkaXYgaWQ9InNlYXJjaC1yZXN1bHRzLWFuY2hvciI+CiAgICAgICAgPGRpdiBpZD0ic2VhcmNoLXJlc3VsdHMiPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfcmVnZXhNYXRjaGVzXV0iPgogICAgICAgICAgICA8ZGl2IGlkPSJzZWFyY2gtbWF0Y2giIG9uLWNsaWNrPSJfbWF0Y2hDbGlja2VkIj5bW2l0ZW1dXTwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxzdHlsZT4KICAgICAgI3NlYXJjaC1jb250YWluZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgICB9CgogICAgICAjcnVucy1yZWdleCB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgICNzZWFyY2gtcmVzdWx0cy1hbmNob3IgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgI3NlYXJjaC1yZXN1bHRzIHsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbWF4LWhlaWdodDogMjAwcHg7CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgICNzZWFyY2gtbWF0Y2ggewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIHBhZGRpbmc6IDNweDsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBkaXJlY3Rpb246IHJ0bDsKICAgICAgfQoKICAgICAgI3NlYXJjaC1tYXRjaDpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tdGItb3JhbmdlLXdlYWspOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLExsLnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxMbC5wcm90b3R5cGUsInNlbGVjdGVkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxMbC5wcm90b3R5cGUsIl9yYXdSZWdleElucHV0Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLExsLnByb3RvdHlwZSwiX3ByZXZpb3VzUmVnZXhJbnB1dCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxMbC5wcm90b3R5cGUsIl9zZWFyY2hUaW1lb3V0RGVsYXkiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxMbC5wcm90b3R5cGUsIl9zZWFyY2hQZW5kaW5nIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLExsLnByb3RvdHlwZSwiX21heFJlZ2V4UmVzdWx0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sTGwucHJvdG90eXBlLCJfcmVnZXhNYXRjaGVzIix2b2lkIDApO0UoW1J0KCJyZW5kZXJIaWVyYXJjaHkiLCJfcmF3UmVnZXhJbnB1dCIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLExsLnByb3RvdHlwZSwiX3JlZ2V4SW5wdXQiLG51bGwpO0UoW0J0KCJfcmVnZXhJbnB1dCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sTGwucHJvdG90eXBlLCJfcmVnZXhJbnB1dENoYW5nZWQiLG51bGwpO0xsPUUoW3l0KCJ0Zi1ncmFwaC1ub2RlLXNlYXJjaCIpXSxMbCk7dmFyIGxjdD0vZGV2aWNlOihbXjpdKzpbMC05XSspJC8sc2N0PVt7cmVnZXg6bGN0fV0sUWxlPVtdLHV1cj1uZXcgU2V0KFtHbi5DT01QVVRFX1RJTUUsR24uTUVNT1JZXSksUG49Y2xhc3MgZXh0ZW5kcyBHdChfbyhtdCkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLkNvbG9yQnk9R24sdGhpcy5zdGF0cz1udWxsLHRoaXMuZGV2aWNlc0ZvclN0YXRzPW51bGwsdGhpcy5jb2xvckJ5PUduLlNUUlVDVFVSRSx0aGlzLmRhdGFzZXRzPVtdLHRoaXMuX3NlbGVjdGVkUnVuSW5kZXg9MCx0aGlzLnRyYWNlSW5wdXRzPSExLHRoaXMuYXV0b0V4dHJhY3ROb2Rlcz0hMCx0aGlzLl9zZWxlY3RlZFRhZ0luZGV4PTAsdGhpcy5fc2VsZWN0ZWRHcmFwaFR5cGU9QnMuT1BfR1JBUEgsdGhpcy5zaG93U2Vzc2lvblJ1bnNEcm9wZG93bj0hMCx0aGlzLnNob3dVcGxvYWRCdXR0b249ITAsdGhpcy5fbGVnZW5kT3BlbmVkPSEwLHRoaXMuX2Rvd25sb2FkRmlsZW5hbWU9ImdyYXBoLnBuZyJ9X29uR3JhcGhUeXBlQ2hhbmdlZEJ5VXNlckdlc3R1cmUoKXtQbyh7YWN0aW9uSWQ6anIuR1JBUEhfVFlQRV9DSEFOR0VELGV2ZW50TGFiZWw6dGhpcy5fc2VsZWN0ZWRHcmFwaFR5cGV9KX1fb25Db2xvckJ5Q2hhbmdlZEJ5VXNlckdlc3R1cmUoKXtQbyh7YWN0aW9uSWQ6anIuTk9ERV9DT0xPUl9NT0RFX0NIQU5HRUQsZXZlbnRMYWJlbDp0aGlzLmNvbG9yQnl9KX1fb25UcmFjZUlucHV0c0NoYW5nZWRCeVVzZXJHZXN0dXJlKCl7UG8oe2FjdGlvbklkOmpyLlRSQUNFX0lOUFVUX01PREVfVE9HR0xFRH0pfV94bGFDbHVzdGVyc1Byb3ZpZGVkKHQpe3JldHVybiB0JiZ0LmhpZXJhcmNoeSYmdC5oaWVyYXJjaHkueGxhQ2x1c3RlcnMubGVuZ3RoPjB9X3N0YXRzQ2hhbmdlZCh0KXtpZih0IT1udWxsKXt2YXIgcj17fSxuPWdQLmVhY2godC5kZXZfc3RhdHMsZnVuY3Rpb24oaSl7dmFyIG89Z1Auc29tZShzY3QsZnVuY3Rpb24ocyl7cmV0dXJuIHMucmVnZXgudGVzdChpLmRldmljZSl9KSxhPWdQLnNvbWUoUWxlLGZ1bmN0aW9uKHMpe3JldHVybiBzLnJlZ2V4LnRlc3QoaS5kZXZpY2UpfSk7byYmIWEmJihyW2kuZGV2aWNlXT0hMCl9KTt0aGlzLnNldCgiZGV2aWNlc0ZvclN0YXRzIixyKX19Z2V0IF9jdXJyZW50RGV2aWNlcygpe3ZhciB0PXRoaXMuZGV2aWNlc0ZvclN0YXRzO2xldCByPXRoaXMuc3RhdHMsbz0ocj9yLmRldl9zdGF0czpbXSkubWFwKHM9PnMuZGV2aWNlKS5maWx0ZXIocz0+c2N0LnNvbWUobD0+bC5yZWdleC50ZXN0KHMpKSksYT16bHQobyk7aWYoYS5sZW5ndGg9PTEpe2xldCBzPWFbMF0ubWF0Y2gobGN0KTtzJiYoYVswXT1zWzFdKX1yZXR1cm4gby5tYXAoKHMsbCk9PntsZXQgYz1udWxsO3JldHVybiBRbGUuZm9yRWFjaCh1PT57dS5yZWdleC50ZXN0KHMpJiYoYz11Lm1zZyl9KSx7ZGV2aWNlOnMsc3VmZml4OmFbbF0sdXNlZDp0PT1udWxsP3ZvaWQgMDp0W3NdLGlnbm9yZWRNc2c6Y319KX1fZGV2aWNlQ2hlY2tib3hDbGlja2VkKHQpe2xldCByPXQudGFyZ2V0LG49T2JqZWN0LmFzc2lnbih7fSx0aGlzLmRldmljZXNGb3JTdGF0cyksaT1yLnZhbHVlO3IuY2hlY2tlZD9uW2ldPSEwOmRlbGV0ZSBuW2ldLHRoaXMuc2V0KCJkZXZpY2VzRm9yU3RhdHMiLG4pfV9udW1UYWdzKHQscil7cmV0dXJuIHRoaXMuX2dldFRhZ3ModCxyKS5sZW5ndGh9X2dldFRhZ3ModCxyKXtyZXR1cm4hdHx8IXRbcl0/W106dFtyXS50YWdzfV9maXQoKXt0aGlzLmZpcmUoImZpdC10YXAiKX1faXNHcmFkaWVudENvbG9yaW5nKHQscil7cmV0dXJuIHV1ci5oYXMocikmJnQhPW51bGx9X2VxdWFscyh0LHIpe3JldHVybiB0PT09cn1nZXQgX2N1cnJlbnREZXZpY2VQYXJhbXMoKXt2YXIgdD10aGlzLmNvbG9yQnlQYXJhbXM7bGV0IHI9dC5kZXZpY2UuZmlsdGVyKG89PnNjdC5zb21lKGE9PmEucmVnZXgudGVzdChvLmRldmljZSkpKSxuPXpsdChyLm1hcChvPT5vLmRldmljZSkpO2lmKG4ubGVuZ3RoPT0xKXt2YXIgaT1uWzBdLm1hdGNoKGxjdCk7aSYmKG5bMF09aVsxXSl9cmV0dXJuIHIubWFwKChvLGEpPT4oe2RldmljZTpuW2FdLGNvbG9yOm8uY29sb3J9KSl9Z2V0IF9jdXJyZW50WGxhQ2x1c3RlclBhcmFtcygpe3ZhciB0PXRoaXMuY29sb3JCeVBhcmFtcztyZXR1cm4gdC54bGFfY2x1c3Rlcn1nZXQgX2N1cnJlbnRHcmFkaWVudFBhcmFtcygpe3ZhciB0PXRoaXMuY29sb3JCeVBhcmFtcyxyPXRoaXMuY29sb3JCeTtpZighdGhpcy5faXNHcmFkaWVudENvbG9yaW5nKHRoaXMuc3RhdHMscikpcmV0dXJuIG51bGw7bGV0IG49dFtyXSxpPW4ubWluVmFsdWUsbz1uLm1heFZhbHVlO3JldHVybiByPT09R24uTUVNT1JZPyhpPURkKGksaVApLG89RGQobyxpUCkpOnI9PT1Hbi5DT01QVVRFX1RJTUUmJihpPURkKGksb1ApLG89RGQobyxvUCkpLHttaW5WYWx1ZTppLG1heFZhbHVlOm8sc3RhcnRDb2xvcjpuLnN0YXJ0Q29sb3IsZW5kQ29sb3I6bi5lbmRDb2xvcn19ZG93bmxvYWQoKXt0aGlzLmZpcmUoImRvd25sb2FkLWltYWdlLXJlcXVlc3RlZCIsdGhpcy5fZG93bmxvYWRGaWxlbmFtZSl9X3VwZGF0ZUZpbGVJbnB1dCh0KXt2YXIgYTtsZXQgcj0oYT10LnRhcmdldC5maWxlcyk9PW51bGw/dm9pZCAwOmFbMF07aWYoIXIpcmV0dXJuO2xldCBuPXIubmFtZSxpPW4ubGFzdEluZGV4T2YoIi4iKTtpPj0wJiYobj1uLnN1YnN0cmluZygwLGkpKTtsZXQgbz1uLmxhc3RJbmRleE9mKCIvIik7bz49MCYmKG49bi5zdWJzdHJpbmcobysxKSksdGhpcy5fc2V0RG93bmxvYWRGaWxlbmFtZShuKSx0aGlzLnNldCgic2VsZWN0ZWRGaWxlIix0KSxQbyh7YWN0aW9uSWQ6anIuVVBMT0FERURfR1JBUEhfRlJPTV9GSUxFU1lTVEVNfSl9X2RhdGFzZXRzQ2hhbmdlZCh0LHIpe3ZhciBuO3IhPW51bGwmJih0aGlzLl9zZWxlY3RlZFJ1bkluZGV4PTApLHRoaXMuX3NldERvd25sb2FkRmlsZW5hbWUoKG49dGhpcy5kYXRhc2V0c1t0aGlzLl9zZWxlY3RlZFJ1bkluZGV4XSk9PW51bGw/dm9pZCAwOm4ubmFtZSl9X2NvbXB1dGVTZWxlY3Rpb24odCxyLG4saSl7cmV0dXJuIXRbcl18fCF0W3JdLnRhZ3Nbbl0/bnVsbDp7cnVuOnRbcl0ubmFtZSx0YWc6dFtyXS50YWdzW25dLnRhZyx0eXBlOml9fV9zZWxlY3RlZFJ1bkluZGV4Q2hhbmdlZCh0KXt2YXIgcjshdGhpcy5kYXRhc2V0c3x8KHRoaXMuY29sb3JCeT1Hbi5TVFJVQ1RVUkUsdGhpcy5fc2VsZWN0ZWRUYWdJbmRleD0wLHRoaXMuX3NlbGVjdGVkR3JhcGhUeXBlPXRoaXMuX2dldERlZmF1bHRTZWxlY3Rpb25UeXBlKCksdGhpcy50cmFjZUlucHV0cz0hMSx0aGlzLl9zZXREb3dubG9hZEZpbGVuYW1lKChyPXRoaXMuZGF0YXNldHNbdF0pPT1udWxsP3ZvaWQgMDpyLm5hbWUpKX1fc2VsZWN0ZWRUYWdJbmRleENoYW5nZWQoKXt0aGlzLl9zZWxlY3RlZEdyYXBoVHlwZT10aGlzLl9nZXREZWZhdWx0U2VsZWN0aW9uVHlwZSgpfV9nZXREZWZhdWx0U2VsZWN0aW9uVHlwZSgpe2xldHtkYXRhc2V0czp0LF9zZWxlY3RlZFJ1bkluZGV4OnIsX3NlbGVjdGVkVGFnSW5kZXg6bn09dGhpcztpZighdHx8IXRbcl18fCF0W3JdLnRhZ3Nbbl18fHRbcl0udGFnc1tuXS5vcEdyYXBoKXJldHVybiBCcy5PUF9HUkFQSDtsZXQgaT10W3JdO3JldHVybiBpLnRhZ3Nbbl0ucHJvZmlsZT9Ccy5QUk9GSUxFOmkudGFnc1tuXS5jb25jZXB0dWFsR3JhcGg/QnMuQ09OQ0VQVFVBTF9HUkFQSDpCcy5PUF9HUkFQSH1fZ2V0RmlsZSgpe3RoaXMuJCQoIiNmaWxlIikuY2xpY2soKX1fc2V0RG93bmxvYWRGaWxlbmFtZSh0KXt0aGlzLl9kb3dubG9hZEZpbGVuYW1lPSh0fHwiZ3JhcGgiKSsiLnBuZyJ9X3N0YXRzTm90TnVsbCh0KXtyZXR1cm4gdCE9PW51bGx9X3RvZ2dsZUxlZ2VuZE9wZW4oKXt0aGlzLnNldCgiX2xlZ2VuZE9wZW5lZCIsIXRoaXMuX2xlZ2VuZE9wZW5lZCl9X2dldFRvZ2dsZUxlZ2VuZEljb24odCl7cmV0dXJuIHQ/ImV4cGFuZC1tb3JlIjoiZXhwYW5kLWxlc3MifV9nZXRTZWxlY3Rpb25PcEdyYXBoRGlzYWJsZWQodCxyLG4pe3JldHVybiF0W3JdfHwhdFtyXS50YWdzW25dfHwhdFtyXS50YWdzW25dLm9wR3JhcGh9X2dldFNlbGVjdGlvblByb2ZpbGVEaXNhYmxlZCh0LHIsbil7cmV0dXJuIXRbcl18fCF0W3JdLnRhZ3Nbbl18fCF0W3JdLnRhZ3Nbbl0ucHJvZmlsZX1fZ2V0U2VsZWN0aW9uQ29uY2VwdHVhbEdyYXBoRGlzYWJsZWQodCxyLG4pe3JldHVybiF0W3JdfHwhdFtyXS50YWdzW25dfHwhdFtyXS50YWdzW25dLmNvbmNlcHR1YWxHcmFwaH19O1BuLnRlbXBsYXRlPVFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBjb2xvcjogIzU1NTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIC0tdGItZ3JhcGgtY29udHJvbHMtdGl0bGUtY29sb3I6ICMwMDA7CiAgICAgICAgLS10Yi1ncmFwaC1jb250cm9scy1sZWdlbmQtdGV4dC1jb2xvcjogIzAwMDsKICAgICAgICAtLXRiLWdyYXBoLWNvbnRyb2xzLXRleHQtY29sb3I6ICM1NTU7CiAgICAgICAgLS10Yi1ncmFwaC1jb250cm9scy10aXRsZS1mb250LXNpemU6IDE0cHg7CiAgICAgICAgLS10Yi1ncmFwaC1jb250cm9scy1zdWJ0aXRsZS1mb250LXNpemU6IDE0cHg7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItc2hhcmVkLWlucHV0LXN0eWxlXy1fZm9udC1zaXplOiAxNHB4OwogICAgICAgIC0tcGFwZXItZm9udC1zdWJoZWFkXy1fZm9udC1zaXplOiAxNHB4OwogICAgICB9CgogICAgICA6aG9zdCguZGFyay1tb2RlKSB7CiAgICAgICAgLS10Yi1ncmFwaC1jb250cm9scy10aXRsZS1jb2xvcjogI2ZmZjsKICAgICAgICAtLXRiLWdyYXBoLWNvbnRyb2xzLWxlZ2VuZC10ZXh0LWNvbG9yOiAjZjNmM2YzOwogICAgICAgIC0tdGItZ3JhcGgtY29udHJvbHMtdGV4dC1jb2xvcjogI2VlZTsKICAgICAgfQoKICAgICAgcGFwZXItZHJvcGRvd24tbWVudSB7CiAgICAgICAgLS1wYXBlci1kcm9wZG93bi1tZW51LWlucHV0OiB7CiAgICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgICAgY29sb3I6IGdyYXk7CiAgICAgICAgfQogICAgICAgIC0taXJvbi1pY29uLXdpZHRoOiAxNXB4OwogICAgICAgIC0taXJvbi1pY29uLWhlaWdodDogMTVweDsKICAgICAgICAtLXByaW1hcnktdGV4dC1jb2xvcjogZ3JheTsKICAgICAgICAtLXBhcGVyLWl0ZW0tbWluLWhlaWdodDogMzBweDsKICAgICAgfQoKICAgICAgcGFwZXItYnV0dG9uW3JhaXNlZF0ua2V5Ym9hcmQtZm9jdXMgewogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgIH0KCiAgICAgIC5ydW4tZHJvcGRvd24gewogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyOiB7CiAgICAgICAgICBwYWRkaW5nOiA1cHggMCA1cHggNXB4OwogICAgICAgIH0KICAgICAgfQoKICAgICAgdGFibGUgewogICAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CiAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDA7CiAgICAgIH0KCiAgICAgIHRhYmxlIHRyIHsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgIH0KCiAgICAgIHRhYmxlIHRkIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgfQoKICAgICAgLmFsbGNvbnRyb2xzIHsKICAgICAgICBwYWRkaW5nOiAwIDIwcHggMjBweDsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQoKICAgICAgLmxlZ2VuZC1ob2xkZXIgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXNlY29uZGFyeS1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1ncmFwaC1jb250cm9scy10ZXh0LWNvbG9yKTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLmxlZ2VuZC10b29sYmFyIHsKICAgICAgICBhcHBlYXJhbmNlOiBub25lOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IGluaGVyaXQ7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNjY2M7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNjY2M7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiBub25lOwogICAgICAgIGJvcmRlci1sZWZ0OiBub25lOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBjb2xvcjogdmFyKC0tdGItZ3JhcGgtY29udHJvbHMtbGVnZW5kLXRleHQtY29sb3IpOwogICAgICAgIGZvbnQ6IGluaGVyaXQ7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLmxlZ2VuZC10b29sYmFyLAogICAgICAubGVnZW5kLWNvbnRlbnQgewogICAgICAgIHBhZGRpbmc6IDhweCAyMHB4OwogICAgICB9CgogICAgICAudG9nZ2xlLWxlZ2VuZC1idXR0b24gewogICAgICAgIG1heC1oZWlnaHQ6IDIwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAyMHB4OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtbGVnZW5kLXRleHQgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdGItZ3JhcGgtY29udHJvbHMtc3VidGl0bGUtZm9udC1zaXplKTsKICAgICAgfQoKICAgICAgcGFwZXItcmFkaW8tYnV0dG9uIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nOiA1cHg7CiAgICAgIH0KICAgICAgc3ZnLmljb24sCiAgICAgIHRmLWdyYXBoLWljb24gewogICAgICAgIHdpZHRoOiA2MHB4OwogICAgICAgIGhlaWdodDogMThweDsKICAgICAgfQogICAgICAuZG9tYWluVmFsdWVzIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OwogICAgICAgIHdpZHRoOiAxNjVweDsKICAgICAgfQogICAgICAuZG9tYWluU3RhcnQgewogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICB9CiAgICAgIC5kb21haW5FbmQgewogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgfQogICAgICAuY29sb3JCb3ggewogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICB9CgogICAgICAuaW1hZ2UtaWNvbiB7CiAgICAgICAgd2lkdGg6IDI0cHg7CiAgICAgICAgaGVpZ2h0OiAyNHB4OwogICAgICB9CgogICAgICAuaGVscC1pY29uIHsKICAgICAgICBoZWlnaHQ6IDE1cHg7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC5ncmF5IHsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgfQoKICAgICAgLnRpdGxlIHsKICAgICAgICBmb250LXNpemU6IHZhcigtLXRiLWdyYXBoLWNvbnRyb2xzLXRpdGxlLWZvbnQtc2l6ZSk7CiAgICAgICAgbWFyZ2luOiA4cHggNXB4IDhweCAwOwogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1ncmFwaC1jb250cm9scy10aXRsZS1jb2xvcik7CiAgICAgIH0KICAgICAgLnRpdGxlIHNtYWxsIHsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICB9CiAgICAgIC5kZXZpY2VMaXN0LAogICAgICAueGxhQ2x1c3Rlckxpc3QgewogICAgICAgIG1heC1oZWlnaHQ6IDIwMHB4OwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgIH0KCiAgICAgICNmaWxlIHsKICAgICAgICBwYWRkaW5nOiA4cHggMDsKICAgICAgfQoKICAgICAgLmNvbG9yLWxlZ2VuZC1yb3cgewogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgY2xlYXI6IGJvdGg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgbWFyZ2luLXRvcDogNXB4OwogICAgICB9CgogICAgICAuY29sb3ItbGVnZW5kLXJvdyAubGFiZWwsCiAgICAgIC5jb2xvci1sZWdlbmQtcm93IHN2ZywKICAgICAgLmNvbG9yLWxlZ2VuZC1yb3cgdGYtZ3JhcGgtaWNvbiB7CiAgICAgICAgZmxleDogMCAwIDQwcHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAyMHB4OwogICAgICB9CgogICAgICAuZGV2aWNlcy1jaGVja2JveCBpbnB1dCB7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICB9CgogICAgICAuY29udHJvbC1ob2xkZXIgLmljb24tYnV0dG9uIHsKICAgICAgICBmb250LXNpemU6IHZhcigtLXRiLWdyYXBoLWNvbnRyb2xzLXN1YnRpdGxlLWZvbnQtc2l6ZSk7CiAgICAgICAgbWFyZ2luOiAwIC01cHg7CiAgICAgICAgcGFkZGluZzogNXB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1ncmFwaC1jb250cm9scy10ZXh0LWNvbG9yKTsKICAgICAgfQoKICAgICAgLmJ1dHRvbi10ZXh0IHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7CiAgICAgIH0KCiAgICAgIC51cGxvYWQtYnV0dG9uIHsKICAgICAgICB3aWR0aDogMTY1cHg7CiAgICAgICAgaGVpZ2h0OiAyNXB4OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiBub25lOwogICAgICAgIG1hcmdpbi10b3A6IDRweDsKICAgICAgfQoKICAgICAgLmJ1dHRvbi1pY29uIHsKICAgICAgICB3aWR0aDogMjZweDsKICAgICAgICBoZWlnaHQ6IDI2cHg7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS01MDApOwogICAgICB9CgogICAgICAuaGlkZGVuLWlucHV0IHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAuYWxsY29udHJvbHMgLmNvbnRyb2wtaG9sZGVyIHsKICAgICAgICBjbGVhcjogYm90aDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgfQoKICAgICAgLmFsbGNvbnRyb2xzIC5jb250cm9sLWhvbGRlci5jb250cm9sLW9wdGlvbnMgewogICAgICAgIHBhZGRpbmc6IDAgMCAxNXB4IDE1cHg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgfQoKICAgICAgLmFsbGNvbnRyb2xzIC5jb250cm9sLWhvbGRlciBwYXBlci10b2dnbGUtYnV0dG9uIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICAgIH0KCiAgICAgIHNwYW4uY291bnRlciB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS10Yi1ncmFwaC1jb250cm9scy1zdWJ0aXRsZS1mb250LXNpemUpOwogICAgICAgIGNvbG9yOiBncmF5OwogICAgICAgIG1hcmdpbi1sZWZ0OiA0cHg7CiAgICAgIH0KCiAgICAgIC5ydW5zLXJvdyAudGl0bGUsCiAgICAgIC50YWdzLXJvdyAudGl0bGUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICB9CgogICAgICAucnVucy1yb3cgcGFwZXItaXRlbSwKICAgICAgLnRhZ3Mtcm93IHBhcGVyLWl0ZW0gewogICAgICAgIC0tcGFwZXItaXRlbTogewogICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHRhYmxlLmNvbnRyb2wtaG9sZGVyIHsKICAgICAgICBib3JkZXI6IDA7CiAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKICAgICAgfQoKICAgICAgdGFibGUudGYtZ3JhcGgtY29udHJvbHMgdGQuaW5wdXQtZWxlbWVudC10YWJsZS1kYXRhIHsKICAgICAgICBwYWRkaW5nOiAwIDAgMCAyMHB4OwogICAgICB9CgogICAgICAuc3BhY2VyIHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgIH0KCiAgICAgIC5jb2xvci10ZXh0IHsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAuY29sb3ItdGV4dC5ncmFkaWVudC1jb250YWluZXIgewogICAgICAgIG1hcmdpbjogMCA1cHg7CiAgICAgIH0KCiAgICAgIC8qKiBPdmVycmlkZSBpbmxpbmUgc3R5bGVzIHRoYXQgc3VwcHJlc3MgcG9pbnRlciBldmVudHMgZm9yIGRpc2FibGVkIGJ1dHRvbnMuIE90aGVyd2lzZSwgdGhlICovCiAgICAgIC8qICB0b29sdGlwcyBkbyBub3QgYXBwZWFyLiAqLwogICAgICBwYXBlci1yYWRpby1ncm91cCBwYXBlci1yYWRpby1idXR0b24gewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC5sZWdlbmQtY2xhcmlmaWVyIHsKICAgICAgICBjb2xvcjogdmFyKC0tdGItZ3JhcGgtY29udHJvbHMtdGV4dC1jb2xvcik7CiAgICAgICAgY3Vyc29yOiBoZWxwOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgfQoKICAgICAgLmxlZ2VuZC1jbGFyaWZpZXIgcGFwZXItdG9vbHRpcCB7CiAgICAgICAgd2lkdGg6IDE1MHB4OwogICAgICB9CgogICAgICAvKiogT3RoZXJ3aXNlLCBwb2x5bWVyIFVJIGNvbnRyb2xzIGFwcGVhciBhdG9wIG5vZGUgc2VhcmNoLiAqLwogICAgICB0Zi1ncmFwaC1ub2RlLXNlYXJjaCB7CiAgICAgICAgei1pbmRleDogMTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgcGFwZXItZHJvcGRvd24tbWVudSB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgY2xhc3M9ImFsbGNvbnRyb2xzIj4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIiPgogICAgICAgIDx0Zi1ncmFwaC1ub2RlLXNlYXJjaAogICAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tzZWxlY3RlZE5vZGV9fSIKICAgICAgICAgIHJlbmRlci1oaWVyYXJjaHk9IltbcmVuZGVySGllcmFyY2h5XV0iCiAgICAgICAgPjwvdGYtZ3JhcGgtbm9kZS1zZWFyY2g+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciI+CiAgICAgICAgPHBhcGVyLWJ1dHRvbiBjbGFzcz0iaWNvbi1idXR0b24iIG9uLXRhcD0iX2ZpdCIgYWx0PSJGaXQgdG8gc2NyZWVuIj4KICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iYXNwZWN0LXJhdGlvIiBjbGFzcz0iYnV0dG9uLWljb24iPjwvaXJvbi1pY29uPgogICAgICAgICAgPHNwYW4gY2xhc3M9ImJ1dHRvbi10ZXh0Ij5GaXQgdG8gc2NyZWVuPC9zcGFuPgogICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIiPgogICAgICAgIDxwYXBlci1idXR0b24KICAgICAgICAgIGNsYXNzPSJpY29uLWJ1dHRvbiIKICAgICAgICAgIG9uLWNsaWNrPSJkb3dubG9hZCIKICAgICAgICAgIGFsdD0iRG93bmxvYWQgUE5HIgogICAgICAgID4KICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iZmlsZS1kb3dubG9hZCIgY2xhc3M9ImJ1dHRvbi1pY29uIj48L2lyb24taWNvbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJidXR0b24tdGV4dCI+RG93bmxvYWQgUE5HPC9zcGFuPgogICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3Nob3dVcGxvYWRCdXR0b25dXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIiPgogICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICBjbGFzcz0iaWNvbi1idXR0b24iCiAgICAgICAgICAgIG9uLWNsaWNrPSJfZ2V0RmlsZSIKICAgICAgICAgICAgYWx0PSJVcGxvYWQgZmlsZSIKICAgICAgICAgICAgdGl0bGU9IlVwbG9hZCBhIHBidHh0IGZpbGUgdG8gdmlldyBhIGdyYXBoIGZyb20gdGhlIGxvY2FsIGZpbGVzeXN0ZW0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iZmlsZS11cGxvYWQiIGNsYXNzPSJidXR0b24taWNvbiI+PC9pcm9uLWljb24+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJidXR0b24tdGV4dCI+VXBsb2FkIGZpbGU8L3NwYW4+CiAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJoaWRkZW4taW5wdXQiPgogICAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgICB0eXBlPSJmaWxlIgogICAgICAgICAgICAgIGlkPSJmaWxlIgogICAgICAgICAgICAgIG5hbWU9ImZpbGUiCiAgICAgICAgICAgICAgb24tY2hhbmdlPSJfdXBkYXRlRmlsZUlucHV0IgogICAgICAgICAgICAgIGFjY2VwdD0iLnBidHh0IgogICAgICAgICAgICAvPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtaG9sZGVyIHJ1bnMtcm93Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+CiAgICAgICAgICBSdW4gPHNwYW4gY2xhc3M9ImNvdW50ZXIiPihbW2RhdGFzZXRzLmxlbmd0aF1dKTwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgICAgbm8tbGFiZWwtZmxvYXQKICAgICAgICAgIG5vLWFuaW1hdGlvbnMKICAgICAgICAgIG5vaW5rCiAgICAgICAgICBob3Jpem9udGFsLWFsaWduPSJsZWZ0IgogICAgICAgICAgY2xhc3M9InJ1bi1kcm9wZG93biIKICAgICAgICA+CiAgICAgICAgICA8cGFwZXItbGlzdGJveAogICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgc2VsZWN0ZWQ9Int7X3NlbGVjdGVkUnVuSW5kZXh9fSIKICAgICAgICAgICAgc2xvdD0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgID4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tkYXRhc2V0c11dIj4KICAgICAgICAgICAgICA8cGFwZXItaXRlbT5bW2l0ZW0ubmFtZV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgPC9kaXY+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG93U2Vzc2lvblJ1bnNEcm9wZG93bl1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciB0YWdzLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+CiAgICAgICAgICAgIFRhZwogICAgICAgICAgICA8c3BhbiBjbGFzcz0iY291bnRlciIKICAgICAgICAgICAgICA+KFtbX251bVRhZ3MoZGF0YXNldHMsIF9zZWxlY3RlZFJ1bkluZGV4KV1dKTwvc3BhbgogICAgICAgICAgICA+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51CiAgICAgICAgICAgIG5vLWxhYmVsLWZsb2F0CiAgICAgICAgICAgIG5vLWFuaW1hdGlvbnMKICAgICAgICAgICAgaG9yaXpvbnRhbC1hbGlnbj0ibGVmdCIKICAgICAgICAgICAgbm9pbmsKICAgICAgICAgICAgY2xhc3M9InJ1bi1kcm9wZG93biIKICAgICAgICAgID4KICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3gKICAgICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgICBzZWxlY3RlZD0ie3tfc2VsZWN0ZWRUYWdJbmRleH19IgogICAgICAgICAgICAgIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgICAgaXRlbXM9IltbX2dldFRhZ3MoZGF0YXNldHMsIF9zZWxlY3RlZFJ1bkluZGV4KV1dIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPltbaXRlbS5kaXNwbGF5TmFtZV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPkdyYXBoIHR5cGU8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIgY29udHJvbC1vcHRpb25zIj4KICAgICAgICA8cGFwZXItcmFkaW8tZ3JvdXAKICAgICAgICAgIHNlbGVjdGVkPSJ7e19zZWxlY3RlZEdyYXBoVHlwZX19IgogICAgICAgICAgb24tcGFwZXItcmFkaW8tZ3JvdXAtY2hhbmdlZD0iX29uR3JhcGhUeXBlQ2hhbmdlZEJ5VXNlckdlc3R1cmUiCiAgICAgICAgPgogICAgICAgICAgPCEtLSBOb3RlIHRoYXQgdGhlIG5hbWUgaGFzIHRvIG1hdGNoIHRoYXQgb2YgdGZfZ3JhcGhfY29tbW9uLlNlbGVjdGlvblR5cGUuIC0tPgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBuYW1lPSJvcF9ncmFwaCIKICAgICAgICAgICAgZGlzYWJsZWQ9IltbX2dldFNlbGVjdGlvbk9wR3JhcGhEaXNhYmxlZChkYXRhc2V0cywgX3NlbGVjdGVkUnVuSW5kZXgsIF9zZWxlY3RlZFRhZ0luZGV4KV1dIgogICAgICAgICAgICA+T3AgZ3JhcGg8L3BhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgPgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBuYW1lPSJjb25jZXB0dWFsX2dyYXBoIgogICAgICAgICAgICBkaXNhYmxlZD0iW1tfZ2V0U2VsZWN0aW9uQ29uY2VwdHVhbEdyYXBoRGlzYWJsZWQoZGF0YXNldHMsIF9zZWxlY3RlZFJ1bkluZGV4LCBfc2VsZWN0ZWRUYWdJbmRleCldXSIKICAgICAgICAgICAgPkNvbmNlcHR1YWwgZ3JhcGg8L3BhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgPgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBuYW1lPSJwcm9maWxlIgogICAgICAgICAgICBkaXNhYmxlZD0iW1tfZ2V0U2VsZWN0aW9uUHJvZmlsZURpc2FibGVkKGRhdGFzZXRzLCBfc2VsZWN0ZWRSdW5JbmRleCwgX3NlbGVjdGVkVGFnSW5kZXgpXV0iCiAgICAgICAgICAgID5Qcm9maWxlPC9wYXBlci1yYWRpby1idXR0b24KICAgICAgICAgID4KICAgICAgICA8L3BhcGVyLXJhZGlvLWdyb3VwPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPk5vZGUgb3B0aW9uczwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciBjb250cm9sLW9wdGlvbnMiPgogICAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uCiAgICAgICAgICBjaGVja2VkPSJ7e3RyYWNlSW5wdXRzfX0iCiAgICAgICAgICBvbi1jaGFuZ2U9Il9vblRyYWNlSW5wdXRzQ2hhbmdlZEJ5VXNlckdlc3R1cmUiCiAgICAgICAgPgogICAgICAgICAgVHJhY2UgaW5wdXRzCiAgICAgICAgPC9wYXBlci10b2dnbGUtYnV0dG9uPgogICAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uIGNoZWNrZWQ9Int7YXV0b0V4dHJhY3ROb2Rlc319Ij4KICAgICAgICAgIEF1dG8tZXh0cmFjdCBoaWdoLWRlZ3JlZSBub2RlcwogICAgICAgIDwvcGFwZXItdG9nZ2xlLWJ1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1toZWFsdGhQaWxsc0ZlYXR1cmVFbmFibGVkXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtaG9sZGVyIj4KICAgICAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uIGNoZWNrZWQ9Int7aGVhbHRoUGlsbHNUb2dnbGVkT259fSIKICAgICAgICAgICAgPlNob3cgaGVhbHRoIHBpbGxzPC9wYXBlci10b2dnbGUtYnV0dG9uCiAgICAgICAgICA+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDxkaXYgY2xhc3M9InRpdGxlIj5Db2xvciBieTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciBjb250cm9sLW9wdGlvbnMiPgogICAgICAgIDxwYXBlci1yYWRpby1ncm91cAogICAgICAgICAgc2VsZWN0ZWQ9Int7Y29sb3JCeX19IgogICAgICAgICAgb24tcGFwZXItcmFkaW8tZ3JvdXAtY2hhbmdlZD0iX29uQ29sb3JCeUNoYW5nZWRCeVVzZXJHZXN0dXJlIgogICAgICAgID4KICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gbmFtZT0iW1tDb2xvckJ5Lk5PTkVdXSI+Tm9uZTwvcGFwZXItcmFkaW8tYnV0dG9uPgoKICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gbmFtZT0iW1tDb2xvckJ5LlNUUlVDVFVSRV1dIgogICAgICAgICAgICA+U3RydWN0dXJlPC9wYXBlci1yYWRpby1idXR0b24KICAgICAgICAgID4KCiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9IltbQ29sb3JCeS5ERVZJQ0VdXSIKICAgICAgICAgICAgPkRldmljZTwvcGFwZXItcmFkaW8tYnV0dG9uCiAgICAgICAgICA+CgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBpZD0ieGxhLWNsdXN0ZXItcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBuYW1lPSJbW0NvbG9yQnkuWExBX0NMVVNURVJdXSIKICAgICAgICAgICAgZGlzYWJsZWQ9IltbIV94bGFDbHVzdGVyc1Byb3ZpZGVkKHJlbmRlckhpZXJhcmNoeSldXSIKICAgICAgICAgID4KICAgICAgICAgICAgWExBIGNsdXN0ZXIKICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICBmb3I9InhsYS1jbHVzdGVyLXJhZGlvLWJ1dHRvbiIKICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICA+CiAgICAgICAgICAgIENvbG9yaW5nIGJ5IFhMQSBjbHVzdGVyIGlzIG9ubHkgZW5hYmxlZCBpZiBhdCBsZWFzdCAxIG9wIHNwZWNpZmllcwogICAgICAgICAgICBhbiBYTEEgY2x1c3Rlci4KICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KCiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uCiAgICAgICAgICAgIGlkPSJjb21wdXRlLXRpbWUtcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBuYW1lPSJbW0NvbG9yQnkuQ09NUFVURV9USU1FXV0iCiAgICAgICAgICAgIGRpc2FibGVkPSJbWyFzdGF0c11dIgogICAgICAgICAgPgogICAgICAgICAgICBDb21wdXRlIHRpbWUKICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICBmb3I9ImNvbXB1dGUtdGltZS1yYWRpby1idXR0b24iCiAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgPgogICAgICAgICAgICBDb2xvcmluZyBieSBjb21wdXRlIHRpbWUgaXMgb25seSBlbmFibGVkIGlmIHRoZSBSdW5NZXRhZGF0YSBwcm90byBpcwogICAgICAgICAgICBwYXNzZWQgdG8gdGhlIEZpbGVXcml0ZXIgd2hlbiBhIHNwZWNpZmljIHNlc3Npb24gaXMgcnVuLgogICAgICAgICAgPC9wYXBlci10b29sdGlwPgoKICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24KICAgICAgICAgICAgaWQ9Im1lbW9yeS1yYWRpby1idXR0b24iCiAgICAgICAgICAgIG5hbWU9IltbQ29sb3JCeS5NRU1PUlldXSIKICAgICAgICAgICAgZGlzYWJsZWQ9IltbIXN0YXRzXV0iCiAgICAgICAgICA+CiAgICAgICAgICAgIE1lbW9yeQogICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgIGZvcj0ibWVtb3J5LXJhZGlvLWJ1dHRvbiIKICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICA+CiAgICAgICAgICAgIENvbG9yaW5nIGJ5IG1lbW9yeSBpcyBvbmx5IGVuYWJsZWQgaWYgdGhlIFJ1bk1ldGFkYXRhIHByb3RvIGlzCiAgICAgICAgICAgIHBhc3NlZCB0byB0aGUgRmlsZVdyaXRlciB3aGVuIGEgc3BlY2lmaWMgc2Vzc2lvbiBpcyBydW4uCiAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBpZD0idHB1LWNvbXBhdGliaWxpdHktcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBuYW1lPSJbW0NvbG9yQnkuT1BfQ09NUEFUSUJJTElUWV1dIgogICAgICAgICAgPgogICAgICAgICAgICBUUFUgY29tcGF0aWJpbGl0eQogICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgIGZvcj0idHB1LWNvbXBhdGliaWxpdHktcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgID4KICAgICAgICAgICAgQ29sb3JpbmcgYnkgd2hldGhlciBhbiBvcGVyYXRpb24gaXMgY29tcGF0aWJsZSBmb3IgdGhlIFRQVSBkZXZpY2UuCiAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgPC9wYXBlci1yYWRpby1ncm91cD4KICAgICAgICA8c3BhbiBjbGFzcz0ic3BhY2VyIj48L3NwYW4+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtaG9sZGVyIj4KICAgICAgPGJ1dHRvbiBjbGFzcz0ibGVnZW5kLXRvb2xiYXIiIG9uLWNsaWNrPSJfdG9nZ2xlTGVnZW5kT3BlbiI+CiAgICAgICAgPHNwYW4gY2xhc3M9InRvZ2dsZS1sZWdlbmQtdGV4dCI+TGVnZW5kPC9zcGFuPgogICAgICAgIDxpcm9uLWljb24KICAgICAgICAgIGljb249IltbX2dldFRvZ2dsZUxlZ2VuZEljb24oX2xlZ2VuZE9wZW5lZCldXSIKICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtbGVnZW5kLWJ1dHRvbiIKICAgICAgICA+CiAgICAgICAgPC9pcm9uLWljb24+CiAgICAgIDwvYnV0dG9uPgogICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9IltbX2xlZ2VuZE9wZW5lZF1dIiBjbGFzcz0ibGVnZW5kLWNvbnRlbnQiPgogICAgICAgIDwhLS0gQ29sb3ItbW9kZS1zcGVjaWZpYyBsZWdlbmQgaXRlbXMgLS0+CiAgICAgICAgPGRpdj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNHcmFkaWVudENvbG9yaW5nKHN0YXRzLCBjb2xvckJ5KV1dIj4KICAgICAgICAgICAgPHN2ZyB3aWR0aD0iMTQwIiBoZWlnaHQ9IjIwIiBjbGFzcz0iY29sb3ItdGV4dCBncmFkaWVudC1jb250YWluZXIiPgogICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgPGxpbmVhckdyYWRpZW50CiAgICAgICAgICAgICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudCIKICAgICAgICAgICAgICAgICAgeDE9IjAlIgogICAgICAgICAgICAgICAgICB5MT0iMCUiCiAgICAgICAgICAgICAgICAgIHgyPSIxMDAlIgogICAgICAgICAgICAgICAgICB5Mj0iMCUiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDxzdG9wCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InN0YXJ0IgogICAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCUiCiAgICAgICAgICAgICAgICAgICAgc3RvcC1jb2xvciQ9IltbX2N1cnJlbnRHcmFkaWVudFBhcmFtcy5zdGFydENvbG9yXV0iCiAgICAgICAgICAgICAgICAgID48L3N0b3A+CiAgICAgICAgICAgICAgICAgIDxzdG9wCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImVuZCIKICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjEwMCUiCiAgICAgICAgICAgICAgICAgICAgc3RvcC1jb2xvciQ9IltbX2N1cnJlbnRHcmFkaWVudFBhcmFtcy5lbmRDb2xvcl1dIgogICAgICAgICAgICAgICAgICA+PC9zdG9wPgogICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD4KICAgICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgICAgPHJlY3QKICAgICAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgICAgd2lkdGg9IjEzNSIKICAgICAgICAgICAgICAgIGhlaWdodD0iMjAiCiAgICAgICAgICAgICAgICBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50KSIKICAgICAgICAgICAgICAgIHN0cm9rZT0iYmxhY2siCiAgICAgICAgICAgICAgPjwvcmVjdD4KICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRvbWFpblZhbHVlcyBjb2xvci10ZXh0Ij4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkb21haW5TdGFydCI+W1tfY3VycmVudEdyYWRpZW50UGFyYW1zLm1pblZhbHVlXV08L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkb21haW5FbmQiPltbX2N1cnJlbnRHcmFkaWVudFBhcmFtcy5tYXhWYWx1ZV1dPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8YnIgc3R5bGU9ImNsZWFyOiBib3RoIiAvPgogICAgICAgICAgICA8ZGl2PkRldmljZXMgaW5jbHVkZWQgaW4gc3RhdHM6PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRldmljZUxpc3QiPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2N1cnJlbnREZXZpY2VzXV0iPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyBkZXZpY2VzLWNoZWNrYm94Ij4KICAgICAgICAgICAgICAgICAgPHNwYW4KICAgICAgICAgICAgICAgICAgICA+PGlucHV0CiAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJjaGVja2JveCIKICAgICAgICAgICAgICAgICAgICAgIHZhbHVlJD0iW1tpdGVtLmRldmljZV1dIgogICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCQ9IltbaXRlbS51c2VkXV0iCiAgICAgICAgICAgICAgICAgICAgICBvbi1jbGljaz0iX2RldmljZUNoZWNrYm94Q2xpY2tlZCIKICAgICAgICAgICAgICAgICAgLz48L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxzcGFuPltbaXRlbS5zdWZmaXhdXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2l0ZW0uaWdub3JlZE1zZ11dIj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgICAgICAgICAgIGljb249ImhlbHAiCiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaGVscC1pY29uIgogICAgICAgICAgICAgICAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICA+W1tpdGVtLmlnbm9yZWRNc2ddXTwvcGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZXF1YWxzKGNvbG9yQnksICdzdHJ1Y3R1cmUnKV1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItdGV4dCI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGFiZWwiPiBjb2xvcnMgPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+c2FtZSBzdWJzdHJ1Y3R1cmU8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbgogICAgICAgICAgICAgICAgICB0eXBlPSJNRVRBIgogICAgICAgICAgICAgICAgICBoZWlnaHQ9IjE2IgogICAgICAgICAgICAgICAgICBmaWxsLW92ZXJyaWRlPSIjZWVlIgogICAgICAgICAgICAgICAgICBzdHJva2Utb3ZlcnJpZGU9IiNhNmE2YTYiCiAgICAgICAgICAgICAgICA+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+dW5pcXVlIHN1YnN0cnVjdHVyZTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19lcXVhbHMoY29sb3JCeSwgJ2RldmljZScpXV0iPgogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2N1cnJlbnREZXZpY2VQYXJhbXNdXSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93Ij4KICAgICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24KICAgICAgICAgICAgICAgICAgICB0eXBlPSJNRVRBIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTYiCiAgICAgICAgICAgICAgICAgICAgZmlsbC1vdmVycmlkZT0iW1tpdGVtLmNvbG9yXV0iCiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLW92ZXJyaWRlPSIjYTZhNmE2IgogICAgICAgICAgICAgICAgICA+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29sb3ItbGVnZW5kLXZhbHVlIj5bW2l0ZW0uZGV2aWNlXV08L3NwYW4+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxlZ2VuZC1yb3ciPgogICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24KICAgICAgICAgICAgICAgICAgdHlwZT0iTUVUQSIKICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNiIKICAgICAgICAgICAgICAgICAgZmlsbC1vdmVycmlkZT0iI2VlZSIKICAgICAgICAgICAgICAgICAgc3Ryb2tlLW92ZXJyaWRlPSIjYTZhNmE2IgogICAgICAgICAgICAgICAgPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPnVua25vd24gZGV2aWNlPC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2VxdWFscyhjb2xvckJ5LCAneGxhX2NsdXN0ZXInKV1dIj4KICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jdXJyZW50WGxhQ2x1c3RlclBhcmFtc11dIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxlZ2VuZC1yb3ciPgogICAgICAgICAgICAgICAgICA8c3ZnPgogICAgICAgICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICAgICAgIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgogICAgICAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI3VuZmlsbGVkLXJlY3QiCiAgICAgICAgICAgICAgICAgICAgICB4PSIwIgogICAgICAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSJmaWxsOltbaXRlbS5jb2xvcl1dIgogICAgICAgICAgICAgICAgICAgID48L3VzZT4KICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPltbaXRlbS54bGFfY2x1c3Rlcl1dPC9zcGFuPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93Ij4KICAgICAgICAgICAgICAgIDxzdmc+CiAgICAgICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICAgICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjZ3JleS1yZWN0IgogICAgICAgICAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICAgPjwvdXNlPgogICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29sb3ItbGVnZW5kLXZhbHVlIj51bmtub3duIFhMQSBjbHVzdGVyPC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2VxdWFscyhjb2xvckJ5LCAnb3BfY29tcGF0aWJpbGl0eScpXV0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci10ZXh0Ij4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93Ij4KICAgICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uCiAgICAgICAgICAgICAgICAgIHR5cGU9Ik9QIgogICAgICAgICAgICAgICAgICBoZWlnaHQ9IjE2IgogICAgICAgICAgICAgICAgICBmaWxsLW92ZXJyaWRlPSIjMGY5ZDU4IgogICAgICAgICAgICAgICAgICBzdHJva2Utb3ZlcnJpZGU9IiNjY2MiCiAgICAgICAgICAgICAgICA+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+VmFsaWQgT3A8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbgogICAgICAgICAgICAgICAgICB0eXBlPSJPUCIKICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNiIKICAgICAgICAgICAgICAgICAgZmlsbC1vdmVycmlkZT0iI2RiNDQzNyIKICAgICAgICAgICAgICAgICAgc3Ryb2tlLW92ZXJyaWRlPSIjY2NjIgogICAgICAgICAgICAgICAgPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPkludmFsaWQgT3A8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfc3RhdHNOb3ROdWxsKHN0YXRzKV1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24gdHlwZT0iTUVUQSIgaGVpZ2h0PSIxNiIgZmFkZWQ+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPnVudXNlZCBzdWJzdHJ1Y3R1cmU8L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPCEtLSBDb21tb24gbGVnZW5kIGl0ZW1zIC0tPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8dGFibGU+CiAgICAgICAgICAgIDx0Ym9keT4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQ+PC90ZD4KICAgICAgICAgICAgICAgIDx0ZD4oKiA9IGV4cGFuZGFibGUpPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24KICAgICAgICAgICAgICAgICAgICB0eXBlPSJNRVRBIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTYiCiAgICAgICAgICAgICAgICAgICAgZmlsbC1vdmVycmlkZT0iI2Q5ZDlkOSIKICAgICAgICAgICAgICAgICAgICBzdHJva2Utb3ZlcnJpZGU9IiNjY2MiCiAgICAgICAgICAgICAgICAgID48L3RmLWdyYXBoLWljb24+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBOYW1lc3BhY2U8c3BhbiBjbGFzcz0iZ3JheSI+Kjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIEVuY2Fwc3VsYXRlcyBhIHNldCBvZiBub2Rlcy4gTmFtZXNwYWNlIGlzIGhpZXJhcmNoaWNhbCBhbmQKICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIHNjb3BlLgogICAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbiB0eXBlPSJPUCIgaGVpZ2h0PSIxNiI+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgT3BOb2RlCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1jbGFyaWZpZXIiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPj88L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbi1kZWxheT0iMCIKICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICBOb2RlIHRoYXQgcGVyZm9ybXMgYW4gb3BlcmF0aW9uLiBUaGVzZSBub2RlcyBjYW5ub3QKICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZC4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24gdHlwZT0iU0VSSUVTIiBoZWlnaHQ9IjE2Ij48L3RmLWdyYXBoLWljb24+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBVbmNvbm5lY3RlZCBzZXJpZXM8c3BhbiBjbGFzcz0iZ3JheSI+Kjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIFNlcXVlbmNlIG9mIG51bWJlcmVkIG5vZGVzIHRoYXQgYXJlIG5vdCBjb25uZWN0ZWQgdG8gZWFjaAogICAgICAgICAgICAgICAgICAgICAgb3RoZXIuCiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uCiAgICAgICAgICAgICAgICAgICAgdHlwZT0iU0VSSUVTIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTYiCiAgICAgICAgICAgICAgICAgICAgdmVydGljYWwKICAgICAgICAgICAgICAgICAgPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIENvbm5lY3RlZCBzZXJpZXM8c3BhbiBjbGFzcz0iZ3JheSI+Kjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIFNlcXVlbmNlIG9mIG51bWJlcmVkIG5vZGVzIHRoYXQgYXJlIGNvbm5lY3RlZCB0byBlYWNoCiAgICAgICAgICAgICAgICAgICAgICBvdGhlci4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0iaWNvbiI+CiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZQogICAgICAgICAgICAgICAgICAgICAgZmlsbD0id2hpdGUiCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9IiM4NDg0ODQiCiAgICAgICAgICAgICAgICAgICAgICBjeD0iMTAiCiAgICAgICAgICAgICAgICAgICAgICBjeT0iMTAiCiAgICAgICAgICAgICAgICAgICAgICByPSI1IgogICAgICAgICAgICAgICAgICAgID48L2NpcmNsZT4KICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBDb25zdGFudAogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgTm9kZSB0aGF0IG91dHB1dHMgYSBjb25zdGFudCB2YWx1ZS4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24gdHlwZT0iU1VNTUFSWSIgaGVpZ2h0PSIyMCI+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgU3VtbWFyeQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgTm9kZSB0aGF0IGNvbGxlY3RzIGRhdGEgZm9yIHZpc3VhbGl6YXRpb24gd2l0aGluCiAgICAgICAgICAgICAgICAgICAgICBUZW5zb3JCb2FyZC4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHN2ZwogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpY29uIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTVweCIKICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pZCBtZWV0IgogICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9IjAgMCAxNSAxNSIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgICAgICAgPG1hcmtlcgogICAgICAgICAgICAgICAgICAgICAgICBpZD0iZGF0YWZsb3ctYXJyb3doZWFkLWxlZ2VuZCIKICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD0iI2JiYiIKICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyV2lkdGg9IjEwIgogICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJIZWlnaHQ9IjEwIgogICAgICAgICAgICAgICAgICAgICAgICByZWZYPSI5IgogICAgICAgICAgICAgICAgICAgICAgICByZWZZPSI1IgogICAgICAgICAgICAgICAgICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTSAwLDAgTCAxMCw1IEwgMCwxMCBDIDMsNyAzLDMgMCwwIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgICA8L21hcmtlcj4KICAgICAgICAgICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgICAgICAgIG1hcmtlci1lbmQ9InVybCgjZGF0YWZsb3ctYXJyb3doZWFkLWxlZ2VuZCkiCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9IiNiYmIiCiAgICAgICAgICAgICAgICAgICAgICBkPSJNMiA5IGwgMjkgMCIKICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIKICAgICAgICAgICAgICAgICAgICA+PC9wYXRoPgogICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIERhdGFmbG93IGVkZ2UKICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIEVkZ2Ugc2hvd2luZyB0aGUgZGF0YSBmbG93IGJldHdlZW4gb3BlcmF0aW9ucy4gRWRnZXMgZmxvdwogICAgICAgICAgICAgICAgICAgICAgdXB3YXJkcyB1bmxlc3MgYXJyb3doZWFkcyBzcGVjaWZ5IG90aGVyd2lzZS4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHN2ZwogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpY29uIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTVweCIKICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pZCBtZWV0IgogICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9IjAgMCAxNSAxNSIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9IiNiYmIiCiAgICAgICAgICAgICAgICAgICAgICBkPSJNMiA5IGwgMjkgMCIKICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIKICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1kYXNoYXJyYXk9IjIsIDIiCiAgICAgICAgICAgICAgICAgICAgPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBDb250cm9sIGRlcGVuZGVuY3kgZWRnZQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgRWRnZSBzaG93aW5nIHRoZSBjb250cm9sIGRlcGVuZGVuY3kgYmV0d2VlbiBvcGVyYXRpb25zLgogICAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICA8c3ZnCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9Imljb24iCiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNXB4IgogICAgICAgICAgICAgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgICAgICAgICAgICAgdmlld0JveD0iMCAwIDE1IDE1IgogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgPGRlZnM+CiAgICAgICAgICAgICAgICAgICAgICA8bWFya2VyCiAgICAgICAgICAgICAgICAgICAgICAgIGlkPSJyZWZlcmVuY2UtYXJyb3doZWFkLWxlZ2VuZCIKICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD0iI0ZGQjc0RCIKICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyV2lkdGg9IjEwIgogICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJIZWlnaHQ9IjEwIgogICAgICAgICAgICAgICAgICAgICAgICByZWZYPSI5IgogICAgICAgICAgICAgICAgICAgICAgICByZWZZPSI1IgogICAgICAgICAgICAgICAgICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTSAwLDAgTCAxMCw1IEwgMCwxMCBDIDMsNyAzLDMgMCwwIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgICA8L21hcmtlcj4KICAgICAgICAgICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgICAgICAgIG1hcmtlci1lbmQ9InVybCgjcmVmZXJlbmNlLWFycm93aGVhZC1sZWdlbmQpIgogICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPSIjRkZCNzREIgogICAgICAgICAgICAgICAgICAgICAgZD0iTTIgOSBsIDI5IDAiCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD0icm91bmQiCiAgICAgICAgICAgICAgICAgICAgPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBSZWZlcmVuY2UgZWRnZQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgRWRnZSBzaG93aW5nIHRoYXQgdGhlIG91dGdvaW5nIG9wZXJhdGlvbiBub2RlIGNhbiBtdXRhdGUKICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbmNvbWluZyB0ZW5zb3IuCiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgIDwvZGl2PgogIGA7RShbQSh7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il9zdGF0c0NoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFBuLnByb3RvdHlwZSwic3RhdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFBuLnByb3RvdHlwZSwiZGV2aWNlc0ZvclN0YXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxQbi5wcm90b3R5cGUsImNvbG9yQnkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFBuLnByb3RvdHlwZSwiY29sb3JCeVBhcmFtcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5LG9ic2VydmVyOiJfZGF0YXNldHNDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxQbi5wcm90b3R5cGUsImRhdGFzZXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGxvKV0sUG4ucHJvdG90eXBlLCJyZW5kZXJIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLHJlYWRPbmx5OiEwLGNvbXB1dGVkOiJfY29tcHV0ZVNlbGVjdGlvbihkYXRhc2V0cywgX3NlbGVjdGVkUnVuSW5kZXgsIF9zZWxlY3RlZFRhZ0luZGV4LCBfc2VsZWN0ZWRHcmFwaFR5cGUpIn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxQbi5wcm90b3R5cGUsInNlbGVjdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUG4ucHJvdG90eXBlLCJzZWxlY3RlZEZpbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsb2JzZXJ2ZXI6Il9zZWxlY3RlZFJ1bkluZGV4Q2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sUG4ucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5JbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxQbi5wcm90b3R5cGUsInRyYWNlSW5wdXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFBuLnByb3RvdHlwZSwiYXV0b0V4dHJhY3ROb2RlcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixvYnNlcnZlcjoiX3NlbGVjdGVkVGFnSW5kZXhDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxQbi5wcm90b3R5cGUsIl9zZWxlY3RlZFRhZ0luZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFBuLnByb3RvdHlwZSwiX3NlbGVjdGVkR3JhcGhUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxQbi5wcm90b3R5cGUsInNlbGVjdGVkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFBuLnByb3RvdHlwZSwic2hvd1Nlc3Npb25SdW5zRHJvcGRvd24iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxQbi5wcm90b3R5cGUsInNob3dVcGxvYWRCdXR0b24iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxQbi5wcm90b3R5cGUsImhlYWx0aFBpbGxzRmVhdHVyZUVuYWJsZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sUG4ucHJvdG90eXBlLCJoZWFsdGhQaWxsc1RvZ2dsZWRPbiIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFBuLnByb3RvdHlwZSwiX2xlZ2VuZE9wZW5lZCIsdm9pZCAwKTtFKFtSdCgiZGV2aWNlc0ZvclN0YXRzIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxQbi5wcm90b3R5cGUsIl9jdXJyZW50RGV2aWNlcyIsbnVsbCk7RShbUnQoImNvbG9yQnlQYXJhbXMiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFBuLnByb3RvdHlwZSwiX2N1cnJlbnREZXZpY2VQYXJhbXMiLG51bGwpO0UoW1J0KCJjb2xvckJ5UGFyYW1zIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxQbi5wcm90b3R5cGUsIl9jdXJyZW50WGxhQ2x1c3RlclBhcmFtcyIsbnVsbCk7RShbUnQoImNvbG9yQnlQYXJhbXMiLCJjb2xvckJ5IiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sUG4ucHJvdG90eXBlLCJfY3VycmVudEdyYWRpZW50UGFyYW1zIixudWxsKTtQbj1FKFt5dCgidGYtZ3JhcGgtY29udHJvbHMiKV0sUG4pO2Z1bmN0aW9uIGh1cihlKXtpZihlPT09InRydWUiKXJldHVybiEwO2lmKGU9PT0iZmFsc2UiKXJldHVybiExO2lmKGVbMF09PT0nIicpcmV0dXJuIGUuc3Vic3RyaW5nKDEsZS5sZW5ndGgtMSk7bGV0IHI9cGFyc2VGbG9hdChlKTtyZXR1cm4gaXNOYU4ocik/ZTpyfWZ1bmN0aW9uIHRjZShlKXtyZXR1cm4gbmV3IFByb21pc2UoKHQscik9PntmZXRjaChlKS50aGVuKG49PntuLm9rP24uYXJyYXlCdWZmZXIoKS50aGVuKHQscik6bi50ZXh0KCkudGhlbihyLHIpfSl9KX1mdW5jdGlvbiBlY2UoZSx0KXtyZXR1cm4gWnNlKCJSZWFkaW5nIG1ldGFkYXRhIHBidHh0Iiw0MCwoKT0+ZT09bnVsbD9Qcm9taXNlLnJlc29sdmUobnVsbCk6dGNlKGUpLHQsanIuRkVUQ0hfTUVUQURBVEFfUEJUWFRfQllURVMpLnRoZW4ocj0+bUgoIlBhcnNpbmcgbWV0YWRhdGEucGJ0eHQiLDYwLCgpPT5yIT1udWxsP2d1cihyKTpQcm9taXNlLnJlc29sdmUobnVsbCksdCxqci5QQVJTRV9NRVRBREFUQV9QQlRYVF9JTlRPX09CSkVDVCkpfWZ1bmN0aW9uIHJjZShlLHQscil7cmV0dXJuIG1IKCJSZWFkaW5nIGdyYXBoIHBidHh0Iiw0MCwoKT0+UmkodGhpcyxudWxsLGZ1bmN0aW9uKigpe2xldCBuPURhdGUubm93KCk7aWYodCl7bGV0IG89eWllbGQgbmV3IFByb21pc2UoZnVuY3Rpb24oYSxzKXtsZXQgbD1uZXcgRmlsZVJlYWRlcjtsLm9ubG9hZD0oKT0+YShsLnJlc3VsdCksbC5vbmVycm9yPSgpPT5zKGwuZXJyb3IpLGwucmVhZEFzQXJyYXlCdWZmZXIodCl9KTtyZXR1cm4gUG8oe3RpbWluZ0lkOmpyLkZFVENIX1BCVFhUX0JZVEVTX0ZST01fRklMRVNZU1RFTSxldmVudFZhbHVlOkRhdGUubm93KCktbn0pLG99bGV0IGk9eWllbGQgdGNlKGUpO3JldHVybiBQbyh7dGltaW5nSWQ6anIuRkVUQ0hfUEJUWFRfQllURVNfRlJPTV9TRVJWRVIsZXZlbnRWYWx1ZTpEYXRlLm5vdygpLW59KSxpfSkscixqci5GRVRDSF9QQlRYVF9CWVRFUykudGhlbihuPT5tSCgiUGFyc2luZyBncmFwaC5wYnR4dCIsNjAsKCk9Pm11cihuKSxyLGpyLlBBUlNFX1BCVFhUX0lOVE9fT0JKRUNUKSl9ZnVuY3Rpb24gZnVyKGUsdCxyPTFlNixuPWAKYCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGksbyl7ZnVuY3Rpb24gYShzLGwsYyl7bGV0IHU9Yz49ZS5ieXRlTGVuZ3RoLGg9bC5zcGxpdChuKTtoWzBdPXMraFswXTtsZXQgZj11PyIiOmgucG9wKCk7Zm9yKGxldCBnIG9mIGgpdHJ5e3QoZyl9Y2F0Y2goXyl7byhfKTtyZXR1cm59aWYodSl7aSghMCk7cmV0dXJufWxldCBwPW5ldyBCbG9iKFtlLnNsaWNlKGMsYytyKV0pLGQ9bmV3IEZpbGVSZWFkZXI7ZC5vbmxvYWQ9ZnVuY3Rpb24oZyl7YShmLGcudGFyZ2V0LnJlc3VsdCxjK3IpfSxkLnJlYWRBc1RleHQocCl9YSgiIiwiIiwwKX0pfXZhciBwdXI9eyJsaWJyYXJ5LmZ1bmN0aW9uIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZiI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuaW5wdXQiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUubGlzdC5iIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QuZiI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5saXN0LmZ1bmMiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUubGlzdC5pIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QucyI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5saXN0LnNoYXBlIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3Quc2hhcGUuZGltIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QudGVuc29yIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QudHlwZSI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5zaGFwZS5kaW0iOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUudGVuc29yLnN0cmluZ192YWwiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUudGVuc29yLnRlbnNvcl9zaGFwZS5kaW0iOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLnNpZ25hdHVyZS5pbnB1dF9hcmciOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLnNpZ25hdHVyZS5vdXRwdXRfYXJnIjohMCwibGlicmFyeS52ZXJzaW9ucyI6ITAsbm9kZTohMCwibm9kZS5pbnB1dCI6ITAsIm5vZGUuYXR0ciI6ITAsIm5vZGUuYXR0ci52YWx1ZS5saXN0LmIiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC5mIjohMCwibm9kZS5hdHRyLnZhbHVlLmxpc3QuZnVuYyI6ITAsIm5vZGUuYXR0ci52YWx1ZS5saXN0LmkiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC5zIjohMCwibm9kZS5hdHRyLnZhbHVlLmxpc3Quc2hhcGUiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC5zaGFwZS5kaW0iOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC50ZW5zb3IiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC50eXBlIjohMCwibm9kZS5hdHRyLnZhbHVlLnNoYXBlLmRpbSI6ITAsIm5vZGUuYXR0ci52YWx1ZS50ZW5zb3Iuc3RyaW5nX3ZhbCI6ITAsIm5vZGUuYXR0ci52YWx1ZS50ZW5zb3IudGVuc29yX3NoYXBlLmRpbSI6ITB9LGR1cj17InN0ZXBfc3RhdHMuZGV2X3N0YXRzIjohMCwic3RlcF9zdGF0cy5kZXZfc3RhdHMubm9kZV9zdGF0cyI6ITAsInN0ZXBfc3RhdHMuZGV2X3N0YXRzLm5vZGVfc3RhdHMub3V0cHV0IjohMCwic3RlcF9zdGF0cy5kZXZfc3RhdHMubm9kZV9zdGF0cy5tZW1vcnkiOiEwLCJzdGVwX3N0YXRzLmRldl9zdGF0cy5ub2RlX3N0YXRzLm91dHB1dC50ZW5zb3JfZGVzY3JpcHRpb24uc2hhcGUuZGltIjohMH07ZnVuY3Rpb24gbXVyKGUpe3JldHVybiBuY2UoZSxwdXIpfWZ1bmN0aW9uIGd1cihlKXtyZXR1cm4gbmNlKGUsZHVyKS50aGVuKHQ9PnQuc3RlcF9zdGF0cyl9ZnVuY3Rpb24gbmNlKGUsdCl7bGV0IHI9e30sbj1bXSxpPVtdLG89cjtmdW5jdGlvbiBhKGwpe2xldCBjPWwuaW5kZXhPZigiOiIpLHU9bC5zdWJzdHJpbmcoMCxjKS50cmltKCksaD1odXIobC5zdWJzdHJpbmcoYysyKS50cmltKCkpO3JldHVybntuYW1lOnUsdmFsdWU6aH19ZnVuY3Rpb24gcyhsLGMsdSxoKXtsZXQgZj1sW2NdO2Y9PW51bGw/bFtjXT1oLmpvaW4oIi4iKWluIHQ/W3VdOnU6QXJyYXkuaXNBcnJheShmKT9mLnB1c2godSk6bFtjXT1bZix1XX1yZXR1cm4gZnVyKGUsZnVuY3Rpb24obCl7aWYobD1sLnRyaW0oKSwhIWwpc3dpdGNoKGxbbC5sZW5ndGgtMV0pe2Nhc2UieyI6bGV0IGM9bC5zdWJzdHJpbmcoMCxsLmxlbmd0aC0yKS50cmltKCksdT17fTtuLnB1c2gobyksaS5wdXNoKGMpLHMobyxjLHUsaSksbz11O2JyZWFrO2Nhc2UifSI6bz1uLnBvcCgpLGkucG9wKCk7YnJlYWs7ZGVmYXVsdDpsZXQgaD1hKGwpO3MobyxoLm5hbWUsaC52YWx1ZSxpLmNvbmNhdChoLm5hbWUpKTticmVha319KS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KX1mdW5jdGlvbiBvY2UoZSx0LHIsbj1uZXcgSnUsaT1yMyl7bGV0IG89SlMoZSwzMCwiRGF0YSIpLGE9SlMoZSwyMCwiR3JhcGgiKSxzPUpTKGUsNTAsIk5hbWVzcGFjZSBoaWVyYXJjaHkiKSxsPURhdGUubm93KCk7cmV0dXJuIHJjZSh0LHIsbykudGhlbihmdW5jdGlvbihjKXtpZighYy5ub2RlKXRocm93IG5ldyBFcnJvcigiVGhlIGdyYXBoIGlzIGVtcHR5LiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBUZW5zb3JGbG93IGNvdWxkIG5vdCB0cmFjZSBhbnkgZ3JhcGguIFBsZWFzZSByZWZlciB0byBodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9pc3N1ZXMvMTk2MSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iKTtyZXR1cm4gbGxlKGMsc2xlLGEpfSwoKT0+e3Rocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIEdyYXBoRGVmLiBUaGlzIGNhbiBzb21ldGltZXMgYmUgY2F1c2VkIGJ5IGEgYmFkIG5ldHdvcmsgY29ubmVjdGlvbiBvciBkaWZmaWN1bHR5IHJlY29uY2lsaW5nIG11bHRpcGxlIEdyYXBoRGVmczsgZm9yIHRoZSBsYXR0ZXIgY2FzZSwgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2lzc3Vlcy8xOTI5LiIpfSkudGhlbihjPT5SaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7WmxlKGMsbik7bGV0IHU9eWllbGQgYkgoYyxpLHMpO3JldHVybiBQbyh7dGltaW5nSWQ6anIuR1JBUEhfTE9BRF9TVUNDRUVERUQsZXZlbnRWYWx1ZTpEYXRlLm5vdygpLWx9KSx7Z3JhcGg6YyxncmFwaEhpZXJhcmNoeTp1fX0pKS5jYXRjaChjPT57bGV0IHU9YEdyYXBoIHZpc3VhbGl6YXRpb24gZmFpbGVkLgoKJHtjfWA7dGhyb3cgZS5yZXBvcnRFcnJvcih1LGMpLFBvKHt0aW1pbmdJZDpqci5HUkFQSF9MT0FEX0ZBSUxFRCxldmVudFZhbHVlOkRhdGUubm93KCktbH0pLGN9KX12YXIgVnM9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29tcGF0aWJpbGl0eVByb3ZpZGVyPW5ldyBKdSx0aGlzLmhpZXJhcmNoeVBhcmFtcz1yMyx0aGlzLl90ZW1wbGF0ZT1udWxsfV9zZWxlY3Rpb25DaGFuZ2VkKCl7IXRoaXMuc2VsZWN0aW9ufHx0aGlzLmRlYm91bmNlKCJzZWxlY3Rpb25jaGFuZ2UiLCgpPT57dGhpcy5fbG9hZCh0aGlzLnNlbGVjdGlvbil9KX1fbG9hZCh0KXtsZXR7cnVuOnIsdGFnOm4sdHlwZTppfT10O3N3aXRjaChpKXtjYXNlIEJzLk9QX0dSQVBIOmNhc2UgQnMuQ09OQ0VQVFVBTF9HUkFQSDp7KGZ1bmN0aW9uKCl7dGhpcy5fc2V0T3V0U3RhdHMobnVsbCl9KS5iaW5kKHRoaXMpKCk7bGV0IG89bmV3IFVSTFNlYXJjaFBhcmFtcztvLnNldCgicnVuIixyKSxvLnNldCgiY29uY2VwdHVhbCIsU3RyaW5nKGk9PT1Ccy5DT05DRVBUVUFMX0dSQVBIKSksbiYmby5zZXQoInRhZyIsbik7bGV0IGE9X2UoKS5wbHVnaW5Sb3V0ZUZvclNyYygiZ3JhcGhzIiwiL2dyYXBoIixvKTtyZXR1cm4gdGhpcy5fZmV0Y2hBbmRDb25zdHJ1Y3RIaWVyYXJjaGljYWxHcmFwaChhKS50aGVuKCgpPT57dGhpcy5fZ3JhcGhSdW5UYWc9e3J1bjpyLHRhZzpufX0pfWNhc2UgQnMuUFJPRklMRTp7bGV0e3RhZ3M6b309dGhpcy5kYXRhc2V0cy5maW5kKCh7bmFtZTpmfSk9PmY9PT1yKSxzPW8uZmluZChmPT5mLnRhZz09PW4pLm9wR3JhcGg/bjpudWxsO2NvbnNvbGUuYXNzZXJ0KG8uZmluZChmPT5mLnRhZz09PXMpLGBSZXF1aXJlZCB0YWcgKCR7c30pIGlzIG1pc3NpbmcuYCk7bGV0IGM9IXRoaXMuX2dyYXBoUnVuVGFnfHx0aGlzLl9ncmFwaFJ1blRhZy5ydW4hPT1yfHx0aGlzLl9ncmFwaFJ1blRhZy50YWchPT1zP3RoaXMuX2xvYWQoe3J1bjpyLHRhZzpzLHR5cGU6QnMuT1BfR1JBUEh9KTpQcm9taXNlLnJlc29sdmUoKSx1PW5ldyBVUkxTZWFyY2hQYXJhbXM7dS5zZXQoInRhZyIsbiksdS5zZXQoInJ1biIscik7bGV0IGg9X2UoKS5wbHVnaW5Sb3V0ZUZvclNyYygiZ3JhcGhzIiwiL3J1bl9tZXRhZGF0YSIsdSk7cmV0dXJuIGMudGhlbigoKT0+dGhpcy5fcmVhZEFuZFBhcnNlTWV0YWRhdGEoaCkpfWRlZmF1bHQ6cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgVW5rbm93biBzZWxlY3Rpb24gdHlwZTogJHtpfWApKX19X3JlYWRBbmRQYXJzZU1ldGFkYXRhKHQpe3RoaXMuc2V0KCJwcm9ncmVzcyIse3ZhbHVlOjAsbXNnOiIifSk7dmFyIHI9blAodGhpcyk7ZWNlKHQscikudGhlbihmdW5jdGlvbihuKXt0aGlzLl9zZXRPdXRTdGF0cyhuKX0uYmluZCh0aGlzKSl9X2ZldGNoQW5kQ29uc3RydWN0SGllcmFyY2hpY2FsR3JhcGgodCxyKXt0aGlzLnNldCgicHJvZ3Jlc3MiLHt2YWx1ZTowLG1zZzoiIn0pO2xldCBuPW5QKHRoaXMpO3JldHVybiBvY2Uobix0LHIhPT12b2lkIDA/cjpudWxsLHRoaXMuY29tcGF0aWJpbGl0eVByb3ZpZGVyLHRoaXMuaGllcmFyY2h5UGFyYW1zKS50aGVuKGZ1bmN0aW9uKHtncmFwaDppLGdyYXBoSGllcmFyY2h5Om99KXt0aGlzLl9zZXRPdXRHcmFwaChpKSx0aGlzLl9zZXRPdXRHcmFwaEhpZXJhcmNoeShvKX0uYmluZCh0aGlzKSl9X3NlbGVjdGVkRmlsZUNoYW5nZWQoKXt2YXIgaTt2YXIgdD10aGlzLnNlbGVjdGVkRmlsZTtpZighdClyZXR1cm47bGV0IHI9dC50YXJnZXQsbj0oaT1yLmZpbGVzKT09bnVsbD92b2lkIDA6aVswXTshbnx8KHIudmFsdWU9IiIsdGhpcy5fZmV0Y2hBbmRDb25zdHJ1Y3RIaWVyYXJjaGljYWxHcmFwaChudWxsLG4pKX19O0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxWcy5wcm90b3R5cGUsImRhdGFzZXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxWcy5wcm90b3R5cGUsInByb2dyZXNzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFZzLnByb3RvdHlwZSwic2VsZWN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFZzLnByb3RvdHlwZSwic2VsZWN0ZWRGaWxlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFZzLnByb3RvdHlwZSwiY29tcGF0aWJpbGl0eVByb3ZpZGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFZzLnByb3RvdHlwZSwiaGllcmFyY2h5UGFyYW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LHJlYWRPbmx5OiEwLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixhcyldLFZzLnByb3RvdHlwZSwib3V0R3JhcGhIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3QscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLFh1KV0sVnMucHJvdG90eXBlLCJvdXRHcmFwaCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxyZWFkT25seTohMCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sVnMucHJvdG90eXBlLCJvdXRTdGF0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxWcy5wcm90b3R5cGUsIl9ncmFwaFJ1blRhZyIsdm9pZCAwKTtFKFtCdCgic2VsZWN0aW9uIiwiY29tcGF0aWJpbGl0eVByb3ZpZGVyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxWcy5wcm90b3R5cGUsIl9zZWxlY3Rpb25DaGFuZ2VkIixudWxsKTtFKFtCdCgic2VsZWN0ZWRGaWxlIiwiY29tcGF0aWJpbGl0eVByb3ZpZGVyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxWcy5wcm90b3R5cGUsIl9zZWxlY3RlZEZpbGVDaGFuZ2VkIixudWxsKTtWcz1FKFt5dCgidGYtZ3JhcGgtZGFzaGJvYXJkLWxvYWRlciIpXSxWcyk7dmFyIGFjZT0icnVuIjt2YXIgT3I9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2RhdGFzZXRzPVtdLHRoaXMuX2RhdGFzZXRzRmV0Y2hlZD0hMSx0aGlzLl9zZWxlY3RlZERhdGFzZXQ9MCx0aGlzLl9yZXF1ZXN0TWFuYWdlcj1uZXcgQWUsdGhpcy5fY2FuY2VsbGVyPW5ldyBhbix0aGlzLnNwZWNpZmljSGVhbHRoUGlsbFN0ZXA9MCx0aGlzLmhlYWx0aFBpbGxzVG9nZ2xlZE9uPSExLHRoaXMuX2RlYnVnZ2VyTnVtZXJpY0FsZXJ0cz1bXSx0aGlzLl9ub2RlTmFtZXNUb0hlYWx0aFBpbGxzPXt9LHRoaXMuX2hlYWx0aFBpbGxSZXF1ZXN0SWQ9MSx0aGlzLl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lckRlbGF5PTUwMCx0aGlzLnJ1bj12XyhhY2Use2RlZmF1bHRWYWx1ZToiIix1c2VMb2NhbFN0b3JhZ2U6ITF9KS5jYWxsKHRoaXMpLHRoaXMuX3J1bk9ic2VydmVyPXhfKGFjZSx7ZGVmYXVsdFZhbHVlOiIiLHBvbHltZXJQcm9wZXJ0eToicnVuIix1c2VMb2NhbFN0b3JhZ2U6ITF9KX1hdHRhY2hlZCgpe3RoaXMuc2V0KCJfaXNBdHRhY2hlZCIsITApfWRldGFjaGVkKCl7dGhpcy5zZXQoIl9pc0F0dGFjaGVkIiwhMSl9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS10b2dnbGUtZXhwYW5kIix0aGlzLl9oYW5kbGVOb2RlVG9nZ2xlRXhwYW5kLmJpbmQodGhpcykpfXJlbG9hZCgpe3RoaXMuX2RlYnVnZ2VyRGF0YUVuYWJsZWR8fHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoX2UoKS5wbHVnaW5zTGlzdGluZygpKS50aGVuKHRoaXMuX2NhbmNlbGxlci5jYW5jZWxsYWJsZSh0PT57dC5jYW5jZWxsZWR8fHQudmFsdWUuZGVidWdnZXImJnRoaXMuc2V0KCJfZGVidWdnZXJEYXRhRW5hYmxlZCIsITApfSkpLHRoaXMuX21heWJlRmV0Y2hIZWFsdGhQaWxscygpfV9maXQoKXt0aGlzLiQkKCIjZ3JhcGhib2FyZCIpLmZpdCgpfV9vbkRvd25sb2FkSW1hZ2VSZXF1ZXN0ZWQodCl7dGhpcy4kJCgiI2dyYXBoYm9hcmQiKS5kb3dubG9hZEFzSW1hZ2UodC5kZXRhaWwpfV9nZXRHcmFwaERpc3BsYXlDbGFzc05hbWUodCxyKXtyZXR1cm4gdHx8ci5sZW5ndGg/IiI6Im5vLWdyYXBoIn1fZmV0Y2hEYXRhc2V0KCl7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoX2UoKS5wbHVnaW5Sb3V0ZSgiZ3JhcGhzIiwiL2luZm8iKSl9X2ZldGNoSGVhbHRoUGlsbHModCxyKXtsZXQgbj17bm9kZV9uYW1lczpKU09OLnN0cmluZ2lmeSh0KSxydW46Il9fZGVidWdnZXJfZGF0YV9fIn07ciE9PXZvaWQgMCYmKG4uc3RlcD1yKTtsZXQgaT1fZSgpLnBsdWdpblJvdXRlKCJkZWJ1Z2dlciIsIi9oZWFsdGhfcGlsbHMiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChpLG4pfV9mZXRjaERlYnVnZ2VyTnVtZXJpY3NBbGVydHMoKXtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChfZSgpLnBsdWdpblJvdXRlKCJkZWJ1Z2dlciIsIi9udW1lcmljc19hbGVydF9yZXBvcnQiKSl9X2dyYXBoVXJsKHQscixuKXtyZXR1cm4gX2UoKS5wbHVnaW5Sb3V0ZUZvclNyYygiZ3JhcGhzIiwiL2dyYXBoIixuZXcgVVJMU2VhcmNoUGFyYW1zKHtydW46dCxsaW1pdF9hdHRyX3NpemU6cixsYXJnZV9hdHRyc19rZXk6bn0pKX1fc2hvdWxkUmVxdWVzdEhlYWx0aFBpbGxzKCl7cmV0dXJuIHRoaXMuX2RlYnVnZ2VyRGF0YUVuYWJsZWQmJnRoaXMuaGVhbHRoUGlsbHNUb2dnbGVkT24mJnRoaXMuX3JlbmRlckhpZXJhcmNoeSYmdGhpcy5fZGF0YXNldHNTdGF0ZSh0aGlzLl9kYXRhc2V0c0ZldGNoZWQsdGhpcy5fZGF0YXNldHMsIlBSRVNFTlQiKX1fbWF5YmVJbml0aWFsaXplRGFzaGJvYXJkKCl7dmFyIHQ9dGhpcy5faXNBdHRhY2hlZDt0aGlzLl9pbml0aWFsaXplZHx8IXR8fCh0aGlzLnNldCgiX2NvbXBhdGliaWxpdHlQcm92aWRlciIsbmV3IEp1KSx0aGlzLl9pbml0aWFsaXplZD0hMCx0aGlzLl9mZXRjaERhdGFzZXQoKS50aGVuKHI9PntsZXQgbj1PYmplY3Qua2V5cyhyKTt0aGlzLl9kYXRhc2V0cz1uLnNvcnQoYmgpLm1hcChpPT57bGV0IG89cltpXSxzPU9iamVjdC5rZXlzKG8udGFncykuc29ydChiaCkubWFwKGM9Pm8udGFnc1tjXSkubWFwKCh7dGFnOmMsY29uY2VwdHVhbF9ncmFwaDp1LG9wX2dyYXBoOmgscHJvZmlsZTpmfSk9Pih7dGFnOmMsZGlzcGxheU5hbWU6Yyxjb25jZXB0dWFsR3JhcGg6dSxvcEdyYXBoOmgscHJvZmlsZTpmfSkpLGw9by5ydW5fZ3JhcGg/W3t0YWc6bnVsbCxkaXNwbGF5TmFtZToiRGVmYXVsdCIsY29uY2VwdHVhbEdyYXBoOiExLG9wR3JhcGg6ITAscHJvZmlsZTohMX0sLi4uc106cztyZXR1cm57bmFtZTppLHRhZ3M6bH19KSx0aGlzLl9kYXRhc2V0c0ZldGNoZWQ9ITB9KSl9X2RldGVybWluZVNlbGVjdGVkRGF0YXNldCgpe3ZhciB0PXRoaXMuX2RhdGFzZXRzRmV0Y2hlZCxyPXRoaXMuX2RhdGFzZXRzLG49dGhpcy5ydW47aWYoIW4pe3RoaXMuc2V0KCJfc2VsZWN0ZWREYXRhc2V0IiwwKTtyZXR1cm59bGV0IGk9ci5maW5kSW5kZXgobz0+by5uYW1lPT09bik7aWYoaT09PS0xKXtpZih0KXtsZXQgbz10aGlzLiQkKCIjZXJyb3ItZGlhbG9nIik7by50ZXh0Q29udGVudD1gTm8gZGF0YXNldCBuYW1lZCAiJHtufSIgY291bGQgYmUgZm91bmQuYCxvLm9wZW4oKX1yZXR1cm59dGhpcy5zZXQoIl9zZWxlY3RlZERhdGFzZXQiLGkpfV91cGRhdGVTZWxlY3RlZERhdGFzZXROYW1lKCl7dmFyIHQ9dGhpcy5fZGF0YXNldHNGZXRjaGVkLHI9dGhpcy5fZGF0YXNldHMsbj10aGlzLl9zZWxlY3RlZERhdGFzZXQ7IXR8fHIubGVuZ3RoPD1ufHx0aGlzLnNldCgicnVuIixyW25dLm5hbWUpfV9yZXF1ZXN0SGVhbHRoUGlsbHMoKXt0aGlzLnNldCgiX2FyZUhlYWx0aFBpbGxzTG9hZGluZyIsITApO3ZhciB0PSsrdGhpcy5faGVhbHRoUGlsbFJlcXVlc3RJZDt0aGlzLl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lcklkIT09bnVsbCYmKHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZCksdGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZD1udWxsKSx0aGlzLmFsbFN0ZXBzTW9kZUVuYWJsZWQ/dGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZD1udWxsLHRoaXMuX2luaXRpYXRlTmV0d29ya1JlcXVlc3RGb3JIZWFsdGhQaWxscyh0KX0uYmluZCh0aGlzKSx0aGlzLl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lckRlbGF5KTp0aGlzLl9pbml0aWF0ZU5ldHdvcmtSZXF1ZXN0Rm9ySGVhbHRoUGlsbHModCl9X2luaXRpYXRlTmV0d29ya1JlcXVlc3RGb3JIZWFsdGhQaWxscyh0KXtpZih0aGlzLl9oZWFsdGhQaWxsUmVxdWVzdElkIT09dClyZXR1cm47bGV0IHI9dGhpcy5hbGxTdGVwc01vZGVFbmFibGVkP3RoaXMuc3BlY2lmaWNIZWFsdGhQaWxsU3RlcDp2b2lkIDAsbj10aGlzLl9mZXRjaEhlYWx0aFBpbGxzKHRoaXMuX3JlbmRlckhpZXJhcmNoeS5nZXROYW1lc09mUmVuZGVyZWRPcHMoKSxyKSxpPXRoaXMuX2ZldGNoRGVidWdnZXJOdW1lcmljc0FsZXJ0cygpO1Byb21pc2UuYWxsKFtuLGldKS50aGVuKGZ1bmN0aW9uKG8pe3ZhciBhPW9bMF0scz1vWzFdO2lmKCEhdGhpcy5oZWFsdGhQaWxsc1RvZ2dsZWRPbiYmdD09PXRoaXMuX2hlYWx0aFBpbGxSZXF1ZXN0SWQpe2Zvcih2YXIgbCBpbiBhKXt0aGlzLnNldCgiX2hlYWx0aFBpbGxTdGVwSW5kZXgiLGFbbF0ubGVuZ3RoLTEpO2JyZWFrfXRoaXMuc2V0KCJfZGVidWdnZXJOdW1lcmljQWxlcnRzIixzKSx0aGlzLnNldCgiX25vZGVOYW1lc1RvSGVhbHRoUGlsbHMiLGEpLHRoaXMuc2V0KCJfYXJlSGVhbHRoUGlsbHNMb2FkaW5nIiwhMSksdGhpcy5zZXQoIl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lcklkIixudWxsKX19LmJpbmQodGhpcykpfV9kYXRhc2V0c1N0YXRlKHQscixuKXtyZXR1cm4gdD8hcnx8IXIubGVuZ3RoP249PT0iRU1QVFkiOm49PT0iUFJFU0VOVCI6bj09PSJOT1RfTE9BREVEIn1fcmVuZGVySGllcmFyY2h5Q2hhbmdlZCh0KXt0aGlzLnJlbG9hZCgpfV9oYW5kbGVOb2RlVG9nZ2xlRXhwYW5kKCl7dGhpcy5fbWF5YmVGZXRjaEhlYWx0aFBpbGxzKCl9X2hlYWx0aFBpbGxzVG9nZ2xlZE9uQ2hhbmdlZCh0KXt0P3RoaXMucmVsb2FkKCk6dGhpcy5zZXQoIl9ub2RlTmFtZXNUb0hlYWx0aFBpbGxzIix7fSl9X21heWJlRmV0Y2hIZWFsdGhQaWxscygpeyF0aGlzLl9zaG91bGRSZXF1ZXN0SGVhbHRoUGlsbHMoKXx8dGhpcy5fcmVxdWVzdEhlYWx0aFBpbGxzKCl9fTtPci50ZW1wbGF0ZT1RYAogICAgPHBhcGVyLWRpYWxvZyBpZD0iZXJyb3ItZGlhbG9nIiB3aXRoLWJhY2tkcm9wPjwvcGFwZXItZGlhbG9nPgogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDx0Zi1ncmFwaC1jb250cm9scwogICAgICAgIGlkPSJjb250cm9scyIKICAgICAgICBjbGFzcz0ic2lkZWJhciIKICAgICAgICBzbG90PSJzaWRlYmFyIgogICAgICAgIGRldmljZXMtZm9yLXN0YXRzPSJ7e19kZXZpY2VzRm9yU3RhdHN9fSIKICAgICAgICBjb2xvci1ieS1wYXJhbXM9IltbX2NvbG9yQnlQYXJhbXNdXSIKICAgICAgICBzdGF0cz0iW1tfc3RhdHNdXSIKICAgICAgICBjb2xvci1ieT0ie3tfY29sb3JCeX19IgogICAgICAgIGRhdGFzZXRzPSJbW19kYXRhc2V0c11dIgogICAgICAgIHJlbmRlci1oaWVyYXJjaHk9IltbX3JlbmRlckhpZXJhcmNoeV1dIgogICAgICAgIHNlbGVjdGlvbj0ie3tfc2VsZWN0aW9ufX0iCiAgICAgICAgc2VsZWN0ZWQtZmlsZT0ie3tfc2VsZWN0ZWRGaWxlfX0iCiAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tfc2VsZWN0ZWROb2RlfX0iCiAgICAgICAgaGVhbHRoLXBpbGxzLWZlYXR1cmUtZW5hYmxlZD0iW1tfZGVidWdnZXJEYXRhRW5hYmxlZF1dIgogICAgICAgIGhlYWx0aC1waWxscy10b2dnbGVkLW9uPSJ7e2hlYWx0aFBpbGxzVG9nZ2xlZE9ufX0iCiAgICAgICAgb24tZml0LXRhcD0iX2ZpdCIKICAgICAgICB0cmFjZS1pbnB1dHM9Int7X3RyYWNlSW5wdXRzfX0iCiAgICAgICAgYXV0by1leHRyYWN0LW5vZGVzPSJ7e19hdXRvRXh0cmFjdE5vZGVzfX0iCiAgICAgICAgb24tZG93bmxvYWQtaW1hZ2UtcmVxdWVzdGVkPSJfb25Eb3dubG9hZEltYWdlUmVxdWVzdGVkIgogICAgICA+PC90Zi1ncmFwaC1jb250cm9scz4KICAgICAgPGRpdgogICAgICAgIGNsYXNzJD0iY2VudGVyIFtbX2dldEdyYXBoRGlzcGxheUNsYXNzTmFtZShfc2VsZWN0ZWRGaWxlLCBfZGF0YXNldHMpXV0iCiAgICAgICAgc2xvdD0iY2VudGVyIgogICAgICA+CiAgICAgICAgPHRmLWdyYXBoLWRhc2hib2FyZC1sb2FkZXIKICAgICAgICAgIGlkPSJsb2FkZXIiCiAgICAgICAgICBkYXRhc2V0cz0iW1tfZGF0YXNldHNdXSIKICAgICAgICAgIHNlbGVjdGlvbj0iW1tfc2VsZWN0aW9uXV0iCiAgICAgICAgICBzZWxlY3RlZC1maWxlPSJbW19zZWxlY3RlZEZpbGVdXSIKICAgICAgICAgIG91dC1ncmFwaC1oaWVyYXJjaHk9Int7X2dyYXBoSGllcmFyY2h5fX0iCiAgICAgICAgICBvdXQtZ3JhcGg9Int7X2dyYXBofX0iCiAgICAgICAgICBvdXQtc3RhdHM9Int7X3N0YXRzfX0iCiAgICAgICAgICBwcm9ncmVzcz0ie3tfcHJvZ3Jlc3N9fSIKICAgICAgICAgIGhpZXJhcmNoeS1wYXJhbXM9IltbX2hpZXJhcmNoeVBhcmFtc11dIgogICAgICAgICAgY29tcGF0aWJpbGl0eS1wcm92aWRlcj0iW1tfY29tcGF0aWJpbGl0eVByb3ZpZGVyXV0iCiAgICAgICAgPjwvdGYtZ3JhcGgtZGFzaGJvYXJkLWxvYWRlcj4KICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLW1lc3NhZ2UiPgogICAgICAgICAgPGgzPk5vIGdyYXBoIGRlZmluaXRpb24gZmlsZXMgd2VyZSBmb3VuZC48L2gzPgogICAgICAgICAgPHA+CiAgICAgICAgICAgIFRvIHN0b3JlIGEgZ3JhcGgsIGNyZWF0ZSBhCiAgICAgICAgICAgIDxjb2RlPnRmLnN1bW1hcnkuRmlsZVdyaXRlcjwvY29kZT4KICAgICAgICAgICAgYW5kIHBhc3MgdGhlIGdyYXBoIGVpdGhlciB2aWEgdGhlIGNvbnN0cnVjdG9yLCBvciBieSBjYWxsaW5nIGl0cwogICAgICAgICAgICA8Y29kZT5hZGRfZ3JhcGgoKTwvY29kZT4gbWV0aG9kLiBZb3UgbWF5IHdhbnQgdG8gY2hlY2sgb3V0IHRoZQogICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy90ZW5zb3Jib2FyZC9ncmFwaHMiCiAgICAgICAgICAgICAgPmV4YW1pbmluZyB0aGUgVGVuc29yRmxvdyBncmFwaCB0dXRvcmlhbDwvYQogICAgICAgICAgICA+LgogICAgICAgICAgPC9wPgoKICAgICAgICAgIDxwPgogICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0byBhZGQKICAgICAgICAgICAgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgPGEKICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiCiAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICA+CiAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICA8YQogICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hCiAgICAgICAgICAgID4uCiAgICAgICAgICA8L3A+CgogICAgICAgICAgPHA+CiAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyIKICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICA+CiAgICAgICAgICAgIGFuZCBjb25zaWRlciBmaWxpbmcgYW4gaXNzdWUgb24gR2l0SHViLgogICAgICAgICAgPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImdyYXBoYm9hcmQiPgogICAgICAgICAgPHRmLWdyYXBoLWJvYXJkCiAgICAgICAgICAgIGlkPSJncmFwaGJvYXJkIgogICAgICAgICAgICBkZXZpY2VzLWZvci1zdGF0cz0iW1tfZGV2aWNlc0ZvclN0YXRzXV0iCiAgICAgICAgICAgIGNvbG9yLWJ5PSJ7e19jb2xvckJ5fX0iCiAgICAgICAgICAgIGNvbG9yLWJ5LXBhcmFtcz0ie3tfY29sb3JCeVBhcmFtc319IgogICAgICAgICAgICBncmFwaC1oaWVyYXJjaHk9IltbX2dyYXBoSGllcmFyY2h5XV0iCiAgICAgICAgICAgIGdyYXBoPSJbW19ncmFwaF1dIgogICAgICAgICAgICBoaWVyYXJjaHktcGFyYW1zPSJbW19oaWVyYXJjaHlQYXJhbXNdXSIKICAgICAgICAgICAgcHJvZ3Jlc3M9IltbX3Byb2dyZXNzXV0iCiAgICAgICAgICAgIGRlYnVnZ2VyLWRhdGEtZW5hYmxlZD0iW1tfZGVidWdnZXJEYXRhRW5hYmxlZF1dIgogICAgICAgICAgICBhcmUtaGVhbHRoLXBpbGxzLWxvYWRpbmc9IltbX2FyZUhlYWx0aFBpbGxzTG9hZGluZ11dIgogICAgICAgICAgICBkZWJ1Z2dlci1udW1lcmljLWFsZXJ0cz0iW1tfZGVidWdnZXJOdW1lcmljQWxlcnRzXV0iCiAgICAgICAgICAgIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW19ub2RlTmFtZXNUb0hlYWx0aFBpbGxzXV0iCiAgICAgICAgICAgIGFsbC1zdGVwcy1tb2RlLWVuYWJsZWQ9Int7YWxsU3RlcHNNb2RlRW5hYmxlZH19IgogICAgICAgICAgICBzcGVjaWZpYy1oZWFsdGgtcGlsbC1zdGVwPSJ7e3NwZWNpZmljSGVhbHRoUGlsbFN0ZXB9fSIKICAgICAgICAgICAgaGVhbHRoLXBpbGwtc3RlcC1pbmRleD0iW1tfaGVhbHRoUGlsbFN0ZXBJbmRleF1dIgogICAgICAgICAgICByZW5kZXItaGllcmFyY2h5PSJ7e19yZW5kZXJIaWVyYXJjaHl9fSIKICAgICAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tfc2VsZWN0ZWROb2RlfX0iCiAgICAgICAgICAgIHN0YXRzPSJbW19zdGF0c11dIgogICAgICAgICAgICB0cmFjZS1pbnB1dHM9IltbX3RyYWNlSW5wdXRzXV0iCiAgICAgICAgICAgIGF1dG8tZXh0cmFjdC1ub2Rlcz0iW1tfYXV0b0V4dHJhY3ROb2Rlc11dIgogICAgICAgICAgPjwvdGYtZ3JhcGgtYm9hcmQ+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgPHN0eWxlPgogICAgICA6aG9zdCAvZGVlcC8gewogICAgICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvJywgc2Fucy1zZXJpZjsKICAgICAgfQoKICAgICAgLnNpZGViYXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAuY2VudGVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICBwYXBlci1kaWFsb2cgewogICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5uby1kYXRhLW1lc3NhZ2UgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CgogICAgICAuZ3JhcGhib2FyZCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAubm8tZ3JhcGggLmdyYXBoYm9hcmQgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5jZW50ZXI6bm90KC5uby1ncmFwaCkgLm5vLWRhdGEtbWVzc2FnZSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgYSB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWxpbmspOwogICAgICB9CgogICAgICBhOnZpc2l0ZWQgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1saW5rLXZpc2l0ZWQpOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLE9yLnByb3RvdHlwZSwiX2RhdGFzZXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sT3IucHJvdG90eXBlLCJfZGF0YXNldHNGZXRjaGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLE9yLnByb3RvdHlwZSwiX3NlbGVjdGVkRGF0YXNldCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxvYnNlcnZlcjoiX3JlbmRlckhpZXJhcmNoeUNoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLGxvKV0sT3IucHJvdG90eXBlLCJfcmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEFlKV0sT3IucHJvdG90eXBlLCJfcmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsYW4pXSxPci5wcm90b3R5cGUsIl9jYW5jZWxsZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxPci5wcm90b3R5cGUsIl9kZWJ1Z2dlckRhdGFFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sT3IucHJvdG90eXBlLCJhbGxTdGVwc01vZGVFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLE9yLnByb3RvdHlwZSwic3BlY2lmaWNIZWFsdGhQaWxsU3RlcCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9oZWFsdGhQaWxsc1RvZ2dsZWRPbkNoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxPci5wcm90b3R5cGUsImhlYWx0aFBpbGxzVG9nZ2xlZE9uIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxPci5wcm90b3R5cGUsInNlbGVjdGVkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLE9yLnByb3RvdHlwZSwiX2lzQXR0YWNoZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxPci5wcm90b3R5cGUsIl9pbml0aWFsaXplZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLE9yLnByb3RvdHlwZSwiX2FyZUhlYWx0aFBpbGxzTG9hZGluZyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLE9yLnByb3RvdHlwZSwiX2RlYnVnZ2VyTnVtZXJpY0FsZXJ0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPci5wcm90b3R5cGUsIl9ub2RlTmFtZXNUb0hlYWx0aFBpbGxzIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLE9yLnByb3RvdHlwZSwiX2hlYWx0aFBpbGxTdGVwSW5kZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sT3IucHJvdG90eXBlLCJfaGVhbHRoUGlsbFJlcXVlc3RJZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPci5wcm90b3R5cGUsIl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lcklkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLE9yLnByb3RvdHlwZSwiX2hlYWx0aFBpbGxTdGVwUmVxdWVzdFRpbWVyRGVsYXkiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLE9yLnByb3RvdHlwZSwicnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9ydW5PYnNlcnZlciJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sT3IucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT3IucHJvdG90eXBlLCJfc2VsZWN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLE9yLnByb3RvdHlwZSwiX2NvbXBhdGliaWxpdHlQcm92aWRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLE9yLnByb3RvdHlwZSwiX3RyYWNlSW5wdXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sT3IucHJvdG90eXBlLCJfYXV0b0V4dHJhY3ROb2RlcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPci5wcm90b3R5cGUsIl9zZWxlY3RlZEZpbGUiLHZvaWQgMCk7RShbQnQoIl9pc0F0dGFjaGVkIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxPci5wcm90b3R5cGUsIl9tYXliZUluaXRpYWxpemVEYXNoYm9hcmQiLG51bGwpO0UoW0J0KCJfZGF0YXNldHNGZXRjaGVkIiwiX2RhdGFzZXRzIiwicnVuIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxPci5wcm90b3R5cGUsIl9kZXRlcm1pbmVTZWxlY3RlZERhdGFzZXQiLG51bGwpO0UoW0J0KCJfZGF0YXNldHNGZXRjaGVkIiwiX2RhdGFzZXRzIiwiX3NlbGVjdGVkRGF0YXNldCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sT3IucHJvdG90eXBlLCJfdXBkYXRlU2VsZWN0ZWREYXRhc2V0TmFtZSIsbnVsbCk7T3I9RShbeXQoInRmLWdyYXBoLWRhc2hib2FyZCIpXSxPcik7dmFyIE5IPUVlKE9lKCksMSk7dmFyIGtyPVZyLEVhPWNsYXNzIGV4dGVuZHMgR3QoX28obXQpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5tb2RlPSJvZmZzZXQiLHRoaXMudGltZVByb3BlcnR5PSJzdGVwIix0aGlzLmJpbnM9ImJpbnMiLHRoaXMueD0ieCIsdGhpcy5keD0iZHgiLHRoaXMueT0ieSIsdGhpcy5jb2xvclNjYWxlPWtyLnNjYWxlT3JkaW5hbChrci5zY2hlbWVDYXRlZ29yeTEwKSx0aGlzLm1vZGVUcmFuc2l0aW9uRHVyYXRpb249NTAwLHRoaXMuX25hbWU9bnVsbCx0aGlzLl9kYXRhPW51bGx9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuc2NvcGVTdWJ0cmVlKHRoaXMuJC5zdmcsITApfWF0dGFjaGVkKCl7dGhpcy5fYXR0YWNoZWQ9ITB9ZGV0YWNoZWQoKXt0aGlzLl9hdHRhY2hlZD0hMX1zZXRTZXJpZXNEYXRhKHQscil7dGhpcy5fbmFtZT10LHRoaXMuX2RhdGE9cix0aGlzLnJlZHJhdygpfV9yZWRyYXdPbkNoYW5nZSgpe3RoaXMucmVkcmF3KCl9cmVkcmF3KCl7dGhpcy5fZHJhdygwKX1fbW9kZVJlZHJhdygpe3RoaXMuX2RyYXcodGhpcy5tb2RlVHJhbnNpdGlvbkR1cmF0aW9uKX1fZHJhdyh0KXtpZighdGhpcy5fYXR0YWNoZWR8fCF0aGlzLl9kYXRhKXJldHVybjtpZih0PT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigidnotaGlzdG9ncmFtLXRpbWVzZXJpZXMgX2RyYXcgbmVlZHMgZHVyYXRpb24iKTtpZih0aGlzLl9kYXRhLmxlbmd0aDw9MCl0aHJvdyBuZXcgRXJyb3IoIk5vdCBlbm91Z2ggc3RlcHMgaW4gdGhlIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXS5oYXNPd25Qcm9wZXJ0eSh0aGlzLmJpbnMpKXRocm93IG5ldyBFcnJvcigiTm8gYmlucyBwcm9wZXJ0eSBvZiAnIit0aGlzLmJpbnMrIicgaW4gZGF0YSIpO2lmKHRoaXMuX2RhdGFbMF1bdGhpcy5iaW5zXS5sZW5ndGg8PTApdGhyb3cgbmV3IEVycm9yKCJNdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGJpbiBpbiBiaW5zIGluIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXVt0aGlzLmJpbnNdWzBdLmhhc093blByb3BlcnR5KHRoaXMueCkpdGhyb3cgbmV3IEVycm9yKCJObyB4IHByb3BlcnR5ICciK3RoaXMueCsiJyBvbiBiaW5zIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXVt0aGlzLmJpbnNdWzBdLmhhc093blByb3BlcnR5KHRoaXMuZHgpKXRocm93IG5ldyBFcnJvcigiTm8gZHggcHJvcGVydHkgJyIrdGhpcy5keCsiJyBvbiBiaW5zIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXVt0aGlzLmJpbnNdWzBdLmhhc093blByb3BlcnR5KHRoaXMueSkpdGhyb3cgbmV3IEVycm9yKCJObyB5IHByb3BlcnR5ICciK3RoaXMueSsiJyBvbiBiaW5zIGRhdGEiKTt2YXIgcj10aGlzLnRpbWVQcm9wZXJ0eSxuPXRoaXMueCxpPXRoaXMuYmlucyxvPXRoaXMuZHgsYT10aGlzLnkscz10aGlzLl9kYXRhLGw9dGhpcy5fbmFtZSxjPXRoaXMubW9kZSx1PWtyLmhjbCh0aGlzLmNvbG9yU2NhbGUobCkpLGg9a3Iuc2VsZWN0KHRoaXMuJC50b29sdGlwKSxmPWZ1bmN0aW9uKE50KXtyZXR1cm4gTnRbbl19LHA9ZnVuY3Rpb24oTnQpe3JldHVybiBOdFthXX0sZD1mdW5jdGlvbihOdCl7cmV0dXJuIE50W29dfSxnPWZ1bmN0aW9uKE50KXtyZXR1cm4gTnRbbl0rTnRbb119LF89ZnVuY3Rpb24oTnQpe3JldHVybiBOdFtyXX07cj09PSJyZWxhdGl2ZSImJihfPWZ1bmN0aW9uKE50KXtyZXR1cm4gTnQud2FsbF90aW1lLXNbMF0ud2FsbF90aW1lfSk7dmFyIHk9dGhpcy4kLnN2Zy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx4PXkud2lkdGgsYj15LmhlaWdodCxTLEM9e3RvcDo1LHJpZ2h0OjYwLGJvdHRvbToyMCxsZWZ0OjI0fTtjPT09Im9mZnNldCI/KFM9Yi8yLjUsQy50b3A9Uys1KTpTPWItQy50b3AtQy5ib3R0b207dmFyIFA9eC1DLmxlZnQtQy5yaWdodCxrPWItQy50b3AtQy5ib3R0b20sTz1rci5taW4ocyxmKSxEPWtyLm1heChzLGcpLEI9a3IuZm9ybWF0KCIuM24iKSxJPWtyLmZvcm1hdCgiLjBmIik7cj09PSJ3YWxsX3RpbWUiP0k9a3IudGltZUZvcm1hdCgiJW0vJWQgJVgiKTpyPT09InJlbGF0aXZlIiYmKEk9ZnVuY3Rpb24oTnQpe3JldHVybiBrci5mb3JtYXQoIi4xciIpKE50LzM2ZTUpKyJoIn0pO3ZhciBMPXMubWFwKGZ1bmN0aW9uKE50LHplKXtyZXR1cm5ba3IubWluKE50W2ldLGYpLGtyLm1heChOdFtpXSxnKV19KSxSPXMubWFwKGZ1bmN0aW9uKE50KXtyZXR1cm4ga3IuZXh0ZW50KE50W2ldLHApfSksRj01MDAsej1rci5leHRlbnQocyxfKSxVPShyPT09IndhbGxfdGltZSI/a3Iuc2NhbGVUaW1lKCk6a3Iuc2NhbGVMaW5lYXIoKSkuZG9tYWluKHopLnJhbmdlKFswLGM9PT0ib2Zmc2V0Ij9rOjBdKSxXPWtyLnNjYWxlTGluZWFyKCkuZG9tYWluKFswLGtyLm1heChzLGZ1bmN0aW9uKE50LHplKXtyZXR1cm4gUlt6ZV1bMV19KV0pLnJhbmdlKFtTLDBdKSxaPWtyLnNjYWxlTGluZWFyKCkuZG9tYWluKFcuZG9tYWluKCkpLnJhbmdlKFtGLDBdKSxydD1rci5zY2FsZUxpbmVhcigpLmRvbWFpbihba3IubWluKHMsZnVuY3Rpb24oTnQsemUpe3JldHVybiBMW3plXVswXX0pLGtyLm1heChzLGZ1bmN0aW9uKE50LHplKXtyZXR1cm4gTFt6ZV1bMV19KV0pLm5pY2UoKS5yYW5nZShbMCxQXSksb3Q9a3Iuc2NhbGVMaW5lYXIoKS5kb21haW4ocnQuZG9tYWluKCkpLnJhbmdlKFswLEZdKTtsZXQgc3Q9a3Iuc2NhbGVMaW5lYXIoKS5kb21haW4oa3IuZXh0ZW50KHMsXykpLnJhbmdlKFt1LmJyaWdodGVyKCksdS5kYXJrZXIoKV0pLmludGVycG9sYXRlKGtyLmludGVycG9sYXRlSGNsKTt2YXIgU3Q9a3IuYXhpc0JvdHRvbShydCkudGlja3MoTWF0aC5tYXgoMixQLzIwKSksYnQ9a3IuYXhpc1JpZ2h0KFUpLnRpY2tzKE1hdGgubWF4KDIsay8xNSkpLnRpY2tGb3JtYXQoSSksTXQ9a3IuYXhpc1JpZ2h0KFcpLnRpY2tzKE1hdGgubWF4KDIsay8xNSkpLnRpY2tTaXplKFArNSkudGlja0Zvcm1hdChCKSxsdD1mdW5jdGlvbihOdCl7cmV0dXJuIE50W25dK050W29dLzJ9LEt0PWtyLmxpbmUoKS54KGZ1bmN0aW9uKE50KXtyZXR1cm4gb3QobHQoTnQpKX0pLnkoZnVuY3Rpb24oTnQpe3JldHVybiBaKE50W2FdKX0pLF90PWZ1bmN0aW9uKE50KXtyZXR1cm4iTSIrb3QobHQoTnRbMF0pKSsiLCIrWigwKSsiTCIrS3QoTnQpLnNsaWNlKDEpKyJMIitvdChsdChOdFtOdC5sZW5ndGgtMV0pKSsiLCIrWigwKX0sY3Q9dGhpcy4kLnN2ZyxYPWtyLnNlbGVjdChjdCksZXQ9WC50cmFuc2l0aW9uKCkuZHVyYXRpb24odCksZHQ9WC5zZWxlY3QoImciKS5jbGFzc2VkKCJzbWFsbCIsZnVuY3Rpb24oKXtyZXR1cm4gUD4wJiZQPD0xNTB9KS5jbGFzc2VkKCJtZWRpdW0iLGZ1bmN0aW9uKCl7cmV0dXJuIFA+MTUwJiZQPD0zMDB9KS5jbGFzc2VkKCJsYXJnZSIsZnVuY3Rpb24oKXtyZXR1cm4gUD4zMDB9KSxxPWV0LnNlbGVjdCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK0MubGVmdCsiLCIrQy50b3ArIikiKSxwdD1rci5iaXNlY3RvcihnKS5sZWZ0LGh0PWR0LnNlbGVjdCgiLnN0YWdlIikub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXtUdC5zdHlsZSgib3BhY2l0eSIsMSksQ3Quc3R5bGUoIm9wYWNpdHkiLDEpLGF0LnN0eWxlKCJvcGFjaXR5IiwxKSxDZS5zdHlsZSgib3BhY2l0eSIsMSksaC5zdHlsZSgib3BhY2l0eSIsMSl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKCl7VHQuc3R5bGUoIm9wYWNpdHkiLDApLEN0LnN0eWxlKCJvcGFjaXR5IiwwKSxhdC5zdHlsZSgib3BhY2l0eSIsMCksQ2Uuc3R5bGUoIm9wYWNpdHkiLDApLFR0LmNsYXNzZWQoImhvdmVyLWNsb3Nlc3QiLCExKSxJdC5jbGFzc2VkKCJvdXRsaW5lLWhvdmVyIiwhMSksaC5zdHlsZSgib3BhY2l0eSIsMCl9KS5vbigibW91c2Vtb3ZlIixQdCksd3Q9aHQuc2VsZWN0KCIuYmFja2dyb3VuZCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1DLmxlZnQrIiwiKy1DLnRvcCsiKSIpLmF0dHIoIndpZHRoIix4KS5hdHRyKCJoZWlnaHQiLGIpLGt0PWh0LnNlbGVjdEFsbCgiLmhpc3RvZ3JhbSIpLmRhdGEocyksaWU9a3QuZXhpdCgpLnJlbW92ZSgpLGVlPWt0LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJoaXN0b2dyYW0iKSxMZT1lZS5tZXJnZShrdCkuc29ydChmdW5jdGlvbihOdCx6ZSl7cmV0dXJuIF8oTnQpLV8oemUpfSksYXI9cS5zZWxlY3RBbGwoIi5oaXN0b2dyYW0iKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKE50KXtyZXR1cm4idHJhbnNsYXRlKDAsICIrKGM9PT0ib2Zmc2V0Ij9VKF8oTnQpKS1TOjApKyIpIn0pLGZyPWVlLmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIiwiYmFzZWxpbmUiKSx0dD1hci5zZWxlY3QoIi5iYXNlbGluZSIpLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsZnVuY3Rpb24oTnQpe3JldHVybiBjPT09Im9mZnNldCI/LjE6MH0pLmF0dHIoInkxIixTKS5hdHRyKCJ5MiIsUykuYXR0cigieDIiLFApLCQ9ZWUuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJvdXRsaW5lIiksSXQ9TGUuc2VsZWN0KCIub3V0bGluZSIpLmF0dHIoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5hdHRyKCJkIixmdW5jdGlvbihOdCl7cmV0dXJuIF90KE50W2ldKX0pLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLCR0PWFyLnNlbGVjdCgiLm91dGxpbmUiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSgiK1AvRisiLCAiK1MvRisiKSIpLnN0eWxlKCJzdHJva2UiLGZ1bmN0aW9uKE50KXtyZXR1cm4gYz09PSJvZmZzZXQiPyIiOnN0KF8oTnQpKX0pLnN0eWxlKCJmaWxsLW9wYWNpdHkiLGZ1bmN0aW9uKE50KXtyZXR1cm4gYz09PSJvZmZzZXQiPzE6MH0pLnN0eWxlKCJmaWxsIixmdW5jdGlvbihOdCl7cmV0dXJuIHN0KF8oTnQpKX0pLGhlPWVlLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiaG92ZXIiKSxUdD1MZS5zZWxlY3QoIi5ob3ZlciIpLnN0eWxlKCJmaWxsIixmdW5jdGlvbihOdCl7cmV0dXJuIHN0KF8oTnQpKX0pO2hlLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiciIsMiksaGUuYXBwZW5kKCJ0ZXh0Iikuc3R5bGUoImRpc3BsYXkiLCJub25lIikuYXR0cigiZHgiLDQpO3ZhciBiZT1kdC5zZWxlY3QoIi54LWF4aXMtaG92ZXIiKS5zZWxlY3RBbGwoIi5sYWJlbCIpLmRhdGEoWyJ4Il0pLG50PWJlLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLEN0PWJlLm1lcmdlKG50KTtudC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtMjApLmF0dHIoInkiLDYpLmF0dHIoIndpZHRoIiw0MCkuYXR0cigiaGVpZ2h0IiwxNCksbnQuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLDApLmF0dHIoIngyIiwwKS5hdHRyKCJ5MSIsMCkuYXR0cigieTIiLDYpLG50LmFwcGVuZCgidGV4dCIpLmF0dHIoImR5IiwxOCk7dmFyIFd0PWR0LnNlbGVjdCgiLnktYXhpcy1ob3ZlciIpLnNlbGVjdEFsbCgiLmxhYmVsIikuZGF0YShbInkiXSksZmU9V3QuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIiksYXQ9V3QubWVyZ2UoZmUpO2ZlLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDgpLmF0dHIoInkiLC02KS5hdHRyKCJ3aWR0aCIsNDApLmF0dHIoImhlaWdodCIsMTQpLGZlLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIiwwKS5hdHRyKCJ4MiIsNikuYXR0cigieTEiLDApLmF0dHIoInkyIiwwKSxmZS5hcHBlbmQoInRleHQiKS5hdHRyKCJkeCIsOCkuYXR0cigiZHkiLDQpO3ZhciBzZT1kdC5zZWxlY3QoIi55LXNsaWNlLWF4aXMtaG92ZXIiKS5zZWxlY3RBbGwoIi5sYWJlbCIpLmRhdGEoWyJ5Il0pLFF0PXNlLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLENlPXNlLm1lcmdlKFF0KTtRdC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4Iiw4KS5hdHRyKCJ5IiwtNikuYXR0cigid2lkdGgiLDQwKS5hdHRyKCJoZWlnaHQiLDE0KSxRdC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsMCkuYXR0cigieDIiLDYpLmF0dHIoInkxIiwwKS5hdHRyKCJ5MiIsMCksUXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZHgiLDgpLmF0dHIoImR5Iiw0KSxxLnNlbGVjdCgiLnkuYXhpcy5zbGljZSIpLnN0eWxlKCJvcGFjaXR5IixjPT09Im9mZnNldCI/MDoxKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwgIisoYz09PSJvZmZzZXQiPy1TOjApKyIpIikuY2FsbChNdCkscS5zZWxlY3QoIi54LmF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwgIitrKyIpIikuY2FsbChTdCkscS5zZWxlY3QoIi55LmF4aXMiKS5zdHlsZSgib3BhY2l0eSIsYz09PSJvZmZzZXQiPzE6MCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrUCsiLCAiKyhjPT09Im9mZnNldCI/MDprKSsiKSIpLmNhbGwoYnQpLHEuc2VsZWN0QWxsKCIudGljayB0ZXh0IikuYXR0cigiZmlsbCIsIiNhYWEiKSxxLnNlbGVjdEFsbCgiLmF4aXMgcGF0aC5kb21haW4iKS5hdHRyKCJzdHJva2UiLCJub25lIik7ZnVuY3Rpb24gUHQoKXt2YXIgTnQ9a3IubW91c2UodGhpcyksemU9cnQuaW52ZXJ0KE50WzBdKSx5bj1VLmludmVydChOdFsxXSk7ZnVuY3Rpb24gV2koY24pe3JldHVybiBNYXRoLm1pbihjbltpXS5sZW5ndGgtMSxwdChjbltpXSx6ZSkpfXZhciBBcixJYT0xLzAsaG87VHQuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihjbix1eCl7dmFyIG5wPVdpKGNuKTtobz1jbjt2YXIgSz1ydChjbltpXVtucF1bbl0rY25baV1bbnBdW29dLzIpLGd0PVcoY25baV1bbnBdW2FdKSxFdD1jPT09Im9mZnNldCI/VShfKGNuKSktKFMtZ3QpOmd0LHh0PU1hdGguYWJzKE50WzFdLUV0KTtyZXR1cm4geHQ8SWEmJihJYT14dCxBcj1jbiksInRyYW5zbGF0ZSgiK0srIiwiK2d0KyIpIn0pLFR0LnNlbGVjdCgidGV4dCIpLnRleHQoZnVuY3Rpb24oY24pe3ZhciB1eD1XaShjbik7cmV0dXJuIGNuW2ldW3V4XVthXX0pLFR0LmNsYXNzZWQoImhvdmVyLWNsb3Nlc3QiLGZ1bmN0aW9uKGNuKXtyZXR1cm4gY249PT1Bcn0pLEl0LmNsYXNzZWQoIm91dGxpbmUtaG92ZXIiLGZ1bmN0aW9uKGNuKXtyZXR1cm4gY249PT1Bcn0pO3ZhciBMYT1XaShobyk7Q3QuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihjbil7cmV0dXJuInRyYW5zbGF0ZSgiK3J0KGhvW2ldW0xhXVtuXStob1tpXVtMYV1bb10vMikrIiwgIitrKyIpIn0pLnNlbGVjdCgidGV4dCIpLnRleHQoZnVuY3Rpb24oY24pe3JldHVybiBCKGhvW2ldW0xhXVtuXStob1tpXVtMYV1bb10vMil9KTt2YXIgY3g9YnQudGlja0Zvcm1hdCgpO2F0LmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oY24pe3JldHVybiJ0cmFuc2xhdGUoIitQKyIsICIrKGM9PT0ib2Zmc2V0Ij9VKF8oQXIpKTowKSsiKSJ9KS5zdHlsZSgiZGlzcGxheSIsYz09PSJvZmZzZXQiPyIiOiJub25lIikuc2VsZWN0KCJ0ZXh0IikudGV4dChmdW5jdGlvbihjbil7cmV0dXJuIGN4KF8oQXIpKX0pO3ZhciB1bT1NdC50aWNrRm9ybWF0KCk7Q2UuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihjbil7cmV0dXJuInRyYW5zbGF0ZSgiK1ArIiwgIisoYz09PSJvZmZzZXQiPzA6VyhBcltpXVtMYV1bYV0pKSsiKSJ9KS5zdHlsZSgiZGlzcGxheSIsYz09PSJvZmZzZXQiPyJub25lIjoiIikuc2VsZWN0KCJ0ZXh0IikudGV4dChmdW5jdGlvbihjbil7cmV0dXJuIHVtKEFyW2ldW0xhXVthXSl9KTt2YXIgUTA9a3IubW91c2UoY3QpO2guc3R5bGUoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhRMFswXSsxNSkrInB4LCIrKFEwWzFdLTE1KSsicHgpIikuc2VsZWN0KCJzcGFuIikudGV4dChjPT09Im9mZnNldCI/dW0oQXJbaV1bTGFdW2FdKToocj09PSJzdGVwIj8ic3RlcCAiOiIiKStjeChfKEFyKSkpfX19O0VhLnRlbXBsYXRlPVFgCiAgICA8ZGl2IGlkPSJ0b29sdGlwIj48c3Bhbj48L3NwYW4+PC9kaXY+CiAgICA8c3ZnIGlkPSJzdmciPgogICAgICA8Zz4KICAgICAgICA8ZyBjbGFzcz0iYXhpcyB4Ij48L2c+CiAgICAgICAgPGcgY2xhc3M9ImF4aXMgeSI+PC9nPgogICAgICAgIDxnIGNsYXNzPSJheGlzIHkgc2xpY2UiPjwvZz4KICAgICAgICA8ZyBjbGFzcz0ic3RhZ2UiPgogICAgICAgICAgPHJlY3QgY2xhc3M9ImJhY2tncm91bmQiPjwvcmVjdD4KICAgICAgICA8L2c+CiAgICAgICAgPGcgY2xhc3M9IngtYXhpcy1ob3ZlciI+PC9nPgogICAgICAgIDxnIGNsYXNzPSJ5LWF4aXMtaG92ZXIiPjwvZz4KICAgICAgICA8ZyBjbGFzcz0ieS1zbGljZS1heGlzLWhvdmVyIj48L2c+CiAgICAgIDwvZz4KICAgIDwvc3ZnPgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGNvbG9yOiAjYWFhOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItYmctY29sb3I6ICNmZmY7CiAgICAgICAgLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1vdXRsaW5lLWNvbG9yOiAjZmZmOwogICAgICAgIC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItb3V0bGluZS1jb2xvcjogIzAwMDsKICAgICAgfQoKICAgICAgOmhvc3QoLmRhcmstbW9kZSkgewogICAgICAgIC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItYmctY29sb3I6IHZhcigKICAgICAgICAgIC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yCiAgICAgICAgKTsKICAgICAgICAtLXZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzLW91dGxpbmUtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNjAwKTsKICAgICAgICAtLXZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzLWhvdmVyLW91dGxpbmUtY29sb3I6ICNmZmY7CiAgICAgIH0KCiAgICAgIHN2ZyB7CiAgICAgICAgZm9udC1mYW1pbHk6IHJvYm90bywgc2Fucy1zZXJpZjsKICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgIH0KCiAgICAgIHRleHQgewogICAgICAgIGZpbGw6IGN1cnJlbnRDb2xvcjsKICAgICAgfQoKICAgICAgI3Rvb2x0aXAgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgfQoKICAgICAgLmJhY2tncm91bmQgewogICAgICAgIGZpbGwtb3BhY2l0eTogMDsKICAgICAgICBmaWxsOiByZWQ7CiAgICAgIH0KCiAgICAgIC5oaXN0b2dyYW0gewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAuaG92ZXIgewogICAgICAgIGZvbnQtc2l6ZTogOXB4OwogICAgICAgIGRvbWluYW50LWJhc2VsaW5lOiBtaWRkbGU7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQoKICAgICAgLmhvdmVyIGNpcmNsZSB7CiAgICAgICAgc3Ryb2tlOiB3aGl0ZTsKICAgICAgICBzdHJva2Utb3BhY2l0eTogMC41OwogICAgICAgIHN0cm9rZS13aWR0aDogMXB4OwogICAgICB9CgogICAgICAuaG92ZXIgdGV4dCB7CiAgICAgICAgZmlsbDogYmxhY2s7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQoKICAgICAgLmhvdmVyLmhvdmVyLWNsb3Nlc3QgY2lyY2xlIHsKICAgICAgICBmaWxsOiB2YXIoLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1ob3Zlci1vdXRsaW5lLWNvbG9yKSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuaG92ZXIuaG92ZXItY2xvc2VzdCB0ZXh0IHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAuYmFzZWxpbmUgewogICAgICAgIHN0cm9rZTogYmxhY2s7CiAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDAuMTsKICAgICAgfQoKICAgICAgLm91dGxpbmUgewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlOiB2YXIoLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1vdXRsaW5lLWNvbG9yKTsKICAgICAgICBzdHJva2Utb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAub3V0bGluZS5vdXRsaW5lLWhvdmVyIHsKICAgICAgICBzdHJva2U6IHZhcigtLXZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzLWhvdmVyLW91dGxpbmUtY29sb3IpICFpbXBvcnRhbnQ7CiAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC54LWF4aXMtaG92ZXIsCiAgICAgIC55LWF4aXMtaG92ZXIsCiAgICAgIC55LXNsaWNlLWF4aXMtaG92ZXIgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAueC1heGlzLWhvdmVyIC5sYWJlbCwKICAgICAgLnktYXhpcy1ob3ZlciAubGFiZWwsCiAgICAgIC55LXNsaWNlLWF4aXMtaG92ZXIgLmxhYmVsIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICB0ZXh0LWFuY2hvcjogZW5kOwogICAgICB9CgogICAgICAueC1heGlzLWhvdmVyIHRleHQgewogICAgICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICAgIH0KCiAgICAgIC55LWF4aXMtaG92ZXIgdGV4dCwKICAgICAgLnktc2xpY2UtYXhpcy1ob3ZlciB0ZXh0IHsKICAgICAgICB0ZXh0LWFuY2hvcjogc3RhcnQ7CiAgICAgIH0KCiAgICAgIC54LWF4aXMtaG92ZXIgbGluZSwKICAgICAgLnktYXhpcy1ob3ZlciBsaW5lLAogICAgICAueS1zbGljZS1heGlzLWhvdmVyIGxpbmUgewogICAgICAgIHN0cm9rZTogY3VycmVudENvbG9yOwogICAgICB9CgogICAgICAueC1heGlzLWhvdmVyIHJlY3QsCiAgICAgIC55LWF4aXMtaG92ZXIgcmVjdCwKICAgICAgLnktc2xpY2UtYXhpcy1ob3ZlciByZWN0IHsKICAgICAgICBmaWxsOiB2YXIoLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1ob3Zlci1iZy1jb2xvcik7CiAgICAgIH0KCiAgICAgICN0b29sdGlwLAogICAgICAueC1heGlzLWhvdmVyIHRleHQsCiAgICAgIC55LWF4aXMtaG92ZXIgdGV4dCwKICAgICAgLnktc2xpY2UtYXhpcy1ob3ZlciB0ZXh0IHsKICAgICAgICBjb2xvcjogdmFyKC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItb3V0bGluZS1jb2xvcik7CiAgICAgIH0KCiAgICAgIC5heGlzIHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgIH0KCiAgICAgIC5heGlzIHBhdGguZG9tYWluIHsKICAgICAgICBmaWxsOiBub25lOwogICAgICB9CgogICAgICAuYXhpcyAudGljayBsaW5lIHsKICAgICAgICBzdHJva2U6ICNkZGQ7CiAgICAgIH0KCiAgICAgIC5heGlzLnNsaWNlIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICB9CgogICAgICAuYXhpcy5zbGljZSAudGljayBsaW5lIHsKICAgICAgICBzdHJva2UtZGFzaGFycmF5OiAyOwogICAgICB9CgogICAgICAuc21hbGwgLmF4aXMgdGV4dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgICAuc21hbGwgLmF4aXMgLnRpY2s6Zmlyc3Qtb2YtdHlwZSB0ZXh0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICAuc21hbGwgLmF4aXMgLnRpY2s6bGFzdC1vZi10eXBlIHRleHQgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5tZWRpdW0gLmF4aXMgdGV4dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgICAubWVkaXVtIC5heGlzIC50aWNrOm50aC1jaGlsZCgybiArIDEpIHRleHQgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5sYXJnZSAuYXhpcyB0ZXh0IHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CiAgICAgIC5sYXJnZSAuYXhpcyAudGljazpudGgtY2hpbGQoMm4gKyAxKSB0ZXh0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEVhLnByb3RvdHlwZSwibW9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxFYS5wcm90b3R5cGUsInRpbWVQcm9wZXJ0eSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxFYS5wcm90b3R5cGUsImJpbnMiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRWEucHJvdG90eXBlLCJ4Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEVhLnByb3RvdHlwZSwiZHgiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRWEucHJvdG90eXBlLCJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEVhLnByb3RvdHlwZSwiY29sb3JTY2FsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxFYS5wcm90b3R5cGUsIm1vZGVUcmFuc2l0aW9uRHVyYXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFYS5wcm90b3R5cGUsIl9hdHRhY2hlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxFYS5wcm90b3R5cGUsIl9uYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRWEucHJvdG90eXBlLCJfZGF0YSIsdm9pZCAwKTtFKFtCdCgidGltZVByb3BlcnR5IiwiY29sb3JTY2FsZSIsIl9hdHRhY2hlZCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sRWEucHJvdG90eXBlLCJfcmVkcmF3T25DaGFuZ2UiLG51bGwpO0UoW0J0KCJtb2RlIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxFYS5wcm90b3R5cGUsIl9tb2RlUmVkcmF3IixudWxsKTtFYT1FKFt5dCgidnotaGlzdG9ncmFtLXRpbWVzZXJpZXMiKV0sRWEpO2Z1bmN0aW9uIHl1cihlKXtsZXRbdCxyLG5dPWU7cmV0dXJue3dhbGxfdGltZTp0LHN0ZXA6cixtaW46a20obi5tYXAoKFtpLCxdKT0+aSkpLG1heDpsdShuLm1hcCgoWyxpXSk9PmkpKSxidWNrZXRzOm4ubWFwKChbaSxvLGFdKT0+KHtsZWZ0OmkscmlnaHQ6byxjb3VudDphfSkpfX1mdW5jdGlvbiB2dXIoZSx0LHIsbj0zMCl7KHQ9PT12b2lkIDB8fHI9PW51bGwpJiYodD0wLHI9MCkscj09PXQmJihyPXQqMS4xKzEsdD10LzEuMS0xKTtsZXQgaT0oci10KS9uLG89MCxhPVtdO2ZvcihsZXQgcz0wO3M8bjtzKyspe2xldCBsPXQrcyppLGM9bCtpLHU9MDtmb3IoO288ZS5idWNrZXRzLmxlbmd0aDspe2xldCBoPU1hdGgubWluKHIsZS5idWNrZXRzW29dLnJpZ2h0KSxmPU1hdGgubWF4KHQsZS5idWNrZXRzW29dLmxlZnQpO2lmKGgtZj4wKXtsZXQgZD1NYXRoLm1pbihoLGMpLU1hdGgubWF4KGYsbCksZz1kLyhoLWYpKmUuYnVja2V0c1tvXS5jb3VudDt1Kz1kPjA/ZzowfWVsc2V7bGV0IGQ9Yz49cjt1Kz1sPD1mJiYoZD9oPD1jOmg8Yyk/ZS5idWNrZXRzW29dLmNvdW50OjB9aWYoaD5jKWJyZWFrO28rK31hLnB1c2goe3g6bCxkeDppLHk6dX0pfXJldHVybiBhfWZ1bmN0aW9uIHNjZShlKXtsZXQgdD1lLm1hcCh5dXIpLHI9a20odCxpPT5pLm1pbiksbj1sdSh0LGk9PmkubWF4KTtyZXR1cm4gdC5tYXAoaT0+KHt3YWxsX3RpbWU6aS53YWxsX3RpbWUsc3RlcDppLnN0ZXAsYmluczp2dXIoaSxyLG4pfSkpfXZhciBUYT1jbGFzcyBleHRlbmRzIGtTKEd0KG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZ2V0RGF0YUxvYWROYW1lPSh7cnVuOnR9KT0+dCx0aGlzLnJlcXVlc3REYXRhPSh0LHIsbik9PntsZXQgbz1fZSgpLnBsdWdpblJvdXRlKCJoaXN0b2dyYW1zIiwiL2hpc3RvZ3JhbXMiKTtQcm9taXNlLmFsbCh0Lm1hcChhPT57bGV0IHM9TWkobyx7dGFnOmEudGFnLHJ1bjphLnJ1bn0pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QocykudGhlbihsPT52b2lkIHIoe2l0ZW06YSxkYXRhOmx9KSl9KSkuZmluYWxseSgoKT0+dm9pZCBuKCkpfSx0aGlzLmxvYWREYXRhQ2FsbGJhY2s9KHQscixuKT0+e2xldCBpPXNjZShuKSxvPXRoaXMuZ2V0RGF0YUxvYWROYW1lKHIpO3RoaXMuJC5jaGFydC5zZXRTZXJpZXNEYXRhKG8saSl9LHRoaXMuX2NvbG9yU2NhbGVGdW5jdGlvbj1mbix0aGlzLl9leHBhbmRlZD0hMX1fcmVsb2FkT25SdW5UYWdSZXF1ZXN0TWFuYWdlckNoYW5nZSgpe3RoaXMucmVsb2FkKCl9X3VwZGF0ZURhdGFUb0xvYWQoKXt2YXIgdD10aGlzLnJ1bixyPXRoaXMudGFnO3RoaXMuZGF0YVRvTG9hZD1be3J1bjp0LHRhZzpyfV19Z2V0IF9ydW5Db2xvcigpe3ZhciB0PXRoaXMucnVuO3JldHVybiB0aGlzLl9jb2xvclNjYWxlRnVuY3Rpb24odCl9cmVkcmF3KCl7dGhpcy4kLmNoYXJ0LnJlZHJhdygpfV90b2dnbGVFeHBhbmRlZCh0KXt0aGlzLnNldCgiX2V4cGFuZGVkIiwhdGhpcy5fZXhwYW5kZWQpLHRoaXMucmVkcmF3KCl9fTtUYS50ZW1wbGF0ZT1RYAogICAgPHRmLWNhcmQtaGVhZGluZwogICAgICB0YWc9IltbdGFnXV0iCiAgICAgIHJ1bj0iW1tydW5dXSIKICAgICAgZGlzcGxheS1uYW1lPSJbW3RhZ01ldGFkYXRhLmRpc3BsYXlOYW1lXV0iCiAgICAgIGRlc2NyaXB0aW9uPSJbW3RhZ01ldGFkYXRhLmRlc2NyaXB0aW9uXV0iCiAgICAgIGNvbG9yPSJbW19ydW5Db2xvcl1dIgogICAgPjwvdGYtY2FyZC1oZWFkaW5nPgogICAgPCEtLQogICAgICBUaGUgbWFpbiBoaXN0b2dyYW0gdGhhdCB3ZSByZW5kZXIuIERhdGEgaXMgc2V0IGRpcmVjdGx5IHdpdGgKICAgICAgXGBzZXRTZXJpZXNEYXRhXGAsIG5vdCB3aXRoIGEgYm91bmQgcHJvcGVydHkuCiAgICAtLT4KICAgIDx2ei1oaXN0b2dyYW0tdGltZXNlcmllcwogICAgICBpZD0iY2hhcnQiCiAgICAgIHRpbWUtcHJvcGVydHk9IltbdGltZVByb3BlcnR5XV0iCiAgICAgIG1vZGU9IltbaGlzdG9ncmFtTW9kZV1dIgogICAgICBjb2xvci1zY2FsZT0iW1tfY29sb3JTY2FsZUZ1bmN0aW9uXV0iCiAgICA+PC92ei1oaXN0b2dyYW0tdGltZXNlcmllcz4KICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiByb3c7Ij4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgc2VsZWN0ZWQkPSJbW19leHBhbmRlZF1dIgogICAgICAgIGljb249ImZ1bGxzY3JlZW4iCiAgICAgICAgb24tdGFwPSJfdG9nZ2xlRXhwYW5kZWQiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgd2lkdGg6IDMzMHB4OwogICAgICAgIGhlaWdodDogMjM1cHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICAgIH0KICAgICAgOmhvc3QoW19leHBhbmRlZF0pIHsKICAgICAgICB3aWR0aDogNzAwcHg7CiAgICAgICAgaGVpZ2h0OiA1MDBweDsKICAgICAgfQoKICAgICAgdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMgewogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbiB7CiAgICAgICAgY29sb3I6ICMyMTk2ZjM7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbltzZWxlY3RlZF0gewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRiLXVpLWxpZ2h0LWFjY2VudCk7CiAgICAgIH0KCiAgICAgIHRmLWNhcmQtaGVhZGluZyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgICB3aWR0aDogOTAlOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sVGEucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sVGEucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sVGEucHJvdG90eXBlLCJnZXREYXRhTG9hZE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxUYS5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFRhLnByb3RvdHlwZSwibG9hZERhdGFDYWxsYmFjayIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxUYS5wcm90b3R5cGUsInRhZ01ldGFkYXRhIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFRhLnByb3RvdHlwZSwidGltZVByb3BlcnR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFRhLnByb3RvdHlwZSwiaGlzdG9ncmFtTW9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLFRhLnByb3RvdHlwZSwiX2NvbG9yU2NhbGVGdW5jdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxUYS5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKTtFKFtCdCgicnVuIiwidGFnIiwicmVxdWVzdE1hbmFnZXIiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFRhLnByb3RvdHlwZSwiX3JlbG9hZE9uUnVuVGFnUmVxdWVzdE1hbmFnZXJDaGFuZ2UiLG51bGwpO0UoW0J0KCJydW4iLCJ0YWciKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFRhLnByb3RvdHlwZSwiX3VwZGF0ZURhdGFUb0xvYWQiLG51bGwpO0UoW1J0KCJydW4iKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxUYS5wcm90b3R5cGUsIl9ydW5Db2xvciIsbnVsbCk7VGE9RShbeXQoInRmLWhpc3RvZ3JhbS1sb2FkZXIiKV0sVGEpO3ZhciBjcz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX2hpc3RvZ3JhbU1vZGU9Im9mZnNldCIsdGhpcy5fdGltZVByb3BlcnR5PSJzdGVwIix0aGlzLl9yZXN0YW1wPSExLHRoaXMuX3JlcXVlc3RNYW5hZ2VyPW5ldyBBZX1fcmVkcmF3Q2F0ZWdvcnlQYW5lKHQscil7IXJ8fHQudGFyZ2V0LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLWhpc3RvZ3JhbS1sb2FkZXIiKS5mb3JFYWNoKG49Pm4ucmVkcmF3KCkpfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKT0+e3RoaXMuX3JlbG9hZEhpc3RvZ3JhbXMoKX0pfV9mZXRjaFRhZ3MoKXtsZXQgdD1fZSgpLnBsdWdpblJvdXRlKCJoaXN0b2dyYW1zIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntpZihOSC5pc0VxdWFsKHIsdGhpcy5fcnVuVG9UYWdJbmZvKSlyZXR1cm47bGV0IG49TkgubWFwVmFsdWVzKHIsbz0+T2JqZWN0LmtleXMobykpLGk9JGkobik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLGkubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZyIsbiksdGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLHIpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSl9KX1fcmVsb2FkSGlzdG9ncmFtcygpe3ZhciB0Oyh0PXRoaXMucm9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtaGlzdG9ncmFtLWxvYWRlciIpLmZvckVhY2gocj0+e3IucmVsb2FkKCl9KX1fc2hvdWxkT3Blbih0KXtyZXR1cm4gdDw9Mn1nZXQgX2NhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9ydW5Ub1RhZyxyPXRoaXMuX3NlbGVjdGVkUnVucyxuPXRoaXMuX3RhZ0ZpbHRlcixpPXRoaXMuX2NhdGVnb3JpZXNEb21SZWFkeTtyZXR1cm4gUWwodCxyLG4pfV90YWdNZXRhZGF0YSh0LHIsbil7cmV0dXJuIHRbcl1bbl19fTtjcy50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgc2xvdD0ic2lkZWJhciI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3MiPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPHRmLW9wdGlvbi1zZWxlY3RvcgogICAgICAgICAgICAgIGlkPSJoaXN0b2dyYW1Nb2RlU2VsZWN0b3IiCiAgICAgICAgICAgICAgbmFtZT0iSGlzdG9ncmFtIG1vZGUiCiAgICAgICAgICAgICAgc2VsZWN0ZWQtaWQ9Int7X2hpc3RvZ3JhbU1vZGV9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9Im92ZXJsYXkiPm92ZXJsYXk8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJvZmZzZXQiPm9mZnNldDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICA8L3RmLW9wdGlvbi1zZWxlY3Rvcj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPHRmLW9wdGlvbi1zZWxlY3RvcgogICAgICAgICAgICAgIGlkPSJ0aW1lUHJvcGVydHlTZWxlY3RvciIKICAgICAgICAgICAgICBuYW1lPSJPZmZzZXQgdGltZSBheGlzIgogICAgICAgICAgICAgIHNlbGVjdGVkLWlkPSJ7e190aW1lUHJvcGVydHl9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InN0ZXAiPnN0ZXA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJyZWxhdGl2ZSI+cmVsYXRpdmU8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJ3YWxsX3RpbWUiPndhbGw8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgPC90Zi1vcHRpb24tc2VsZWN0b3I+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24gcnVucy1zZWxlY3RvciI+CiAgICAgICAgICA8dGYtcnVucy1zZWxlY3RvciBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSI+CiAgICAgICAgICA8L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gaGlzdG9ncmFtIGRhdGEgd2FzIGZvdW5kLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczo8L3A+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICBZb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IGhpc3RvZ3JhbSBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuCiAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIgogICAgICAgICAgICAgICAgPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRmLXRhZy1maWx0ZXJlciB0YWctZmlsdGVyPSJ7e190YWdGaWx0ZXJ9fSI+PC90Zi10YWctZmlsdGVyZXI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldwogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtaGlzdG9ncmFtLWxvYWRlcgogICAgICAgICAgICAgICAgICBydW49IltbaXRlbS5ydW5dXSIKICAgICAgICAgICAgICAgICAgdGFnPSJbW2l0ZW0udGFnXV0iCiAgICAgICAgICAgICAgICAgIGFjdGl2ZT0iW1thY3RpdmVdXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShfcnVuVG9UYWdJbmZvLCBpdGVtLnJ1biwgaXRlbS50YWcpXV0iCiAgICAgICAgICAgICAgICAgIHRpbWUtcHJvcGVydHk9IltbX3RpbWVQcm9wZXJ0eV1dIgogICAgICAgICAgICAgICAgICBoaXN0b2dyYW0tbW9kZT0iW1tfaGlzdG9ncmFtTW9kZV1dIgogICAgICAgICAgICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgICAgICAgICA+PC90Zi1oaXN0b2dyYW0tbG9hZGVyPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXc+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxjcy5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sY3MucHJvdG90eXBlLCJfaGlzdG9ncmFtTW9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxjcy5wcm90b3R5cGUsIl90aW1lUHJvcGVydHkiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLGNzLnByb3RvdHlwZSwiX3NlbGVjdGVkUnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxjcy5wcm90b3R5cGUsIl9ydW5Ub1RhZyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxjcy5wcm90b3R5cGUsIl9ydW5Ub1RhZ0luZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxjcy5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sY3MucHJvdG90eXBlLCJfdGFnRmlsdGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sY3MucHJvdG90eXBlLCJfcmVzdGFtcCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGNzLnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLGNzLnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW1J0KCJfcnVuVG9UYWciLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIsIl9jYXRlZ29yaWVzRG9tUmVhZHkiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGNzLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpO2NzPUUoW3l0KCJ0Zi1oaXN0b2dyYW0tZGFzaGJvYXJkIildLGNzKTt2YXIgdTM9Y2xhc3N7Y29uc3RydWN0b3IodCxyPSEwKXt0aGlzLl9yZXF1ZXN0TWFuYWdlcj10LHRoaXMuX3VzZUh0dHBHZXQ9cn1nZXRFeHBlcmltZW50KHQpe3JldHVybiB0aGlzLl9zZW5kUmVxdWVzdCgiL2V4cGVyaW1lbnQiLHQpfWdldERvd25sb2FkVXJsKHQscixuKXtyZXR1cm4gX2UoKS5wbHVnaW5Sb3V0ZUZvclNyYygiaHBhcmFtcyIsIi9kb3dubG9hZF9kYXRhIixuZXcgVVJMU2VhcmNoUGFyYW1zKHtmb3JtYXQ6dCxjb2x1bW5zVmlzaWJpbGl0eTpKU09OLnN0cmluZ2lmeShuKSxyZXF1ZXN0OkpTT04uc3RyaW5naWZ5KHIpfSkpfWxpc3RTZXNzaW9uR3JvdXBzKHQpe3JldHVybiB0aGlzLl9zZW5kUmVxdWVzdCgiL3Nlc3Npb25fZ3JvdXBzIix0KX1saXN0TWV0cmljRXZhbHModCl7cmV0dXJuIHRoaXMuX3NlbmRSZXF1ZXN0KCIvbWV0cmljX2V2YWxzIix0KX1fc2VuZFJlcXVlc3QodCxyKXtpZih0aGlzLl91c2VIdHRwR2V0KXtsZXQgbz1fZSgpLnBsdWdpblJvdXRlKCJocGFyYW1zIix0LG5ldyBVUkxTZWFyY2hQYXJhbXMoe3JlcXVlc3Q6SlNPTi5zdHJpbmdpZnkocil9KSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3Qobyl9bGV0IG49bmV3IFV4O24ud2l0aENyZWRlbnRpYWxzPSEwLG4ubWV0aG9kVHlwZT1QbS5QT1NULG4uY29udGVudFR5cGU9InRleHQvcGxhaW4iLG4uYm9keT1KU09OLnN0cmluZ2lmeShyKTtsZXQgaT1fZSgpLnBsdWdpblJvdXRlKCJocGFyYW1zIix0KTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdFdpdGhPcHRpb25zKGksbil9fTt2YXIgX2NlPUVlKE9lKCksMSk7dmFyIERIPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMub3JpZW50YXRpb249Imhvcml6b250YWwifX07REgudGVtcGxhdGU9UWAKICAgIDxzbG90IG5hbWU9ImNvbnRlbnQiPjwvc2xvdD4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgOmhvc3Qgc2xvdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIDpob3N0IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgZmxleDogMCAwIGF1dG87CiAgICAgIH0KCiAgICAgIDpob3N0KFtvcmllbnRhdGlvbj0naG9yaXpvbnRhbCddKSBzbG90IHsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgIH0KCiAgICAgIDpob3N0KFtvcmllbnRhdGlvbj0ndmVydGljYWwnXSkgc2xvdCB7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdCA6OnNsb3R0ZWQoKjpub3QoOmxhc3QtY2hpbGQpKSB7CiAgICAgICAgYm9yZGVyOiAwIHNvbGlkIHZhcigtLWRpdmlkZXItY29sb3IsICNjY2MpOwogICAgICB9CgogICAgICA6aG9zdChbb3JpZW50YXRpb249J3ZlcnRpY2FsJ10pIDo6c2xvdHRlZCgqOm5vdCg6bGFzdC1jaGlsZCkpIHsKICAgICAgICBib3JkZXItYm90dG9tLXdpZHRoOiA1cHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtvcmllbnRhdGlvbj0naG9yaXpvbnRhbCddKSA6OnNsb3R0ZWQoKjpub3QoOmxhc3QtY2hpbGQpKSB7CiAgICAgICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiA1cHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZyxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sREgucHJvdG90eXBlLCJvcmllbnRhdGlvbiIsdm9pZCAwKTtESD1FKFt5dCgiaHBhcmFtcy1zcGxpdC1sYXlvdXQiKV0sREgpO3ZhciB1cz17fTtacyh1cyx7Y29sdW1uVmFsdWVCeUluZGV4OigpPT5iMCxjb2x1bW5WYWx1ZUJ5VmlzaWJsZUluZGV4OigpPT5CSCxldWNsaWRlYW5EaXN0OigpPT5oMyxmaWx0ZXJTZXQ6KCk9PlB1cixnZXRBYnNvbHV0ZUNvbHVtbkluZGV4OigpPT56SCxoYXNoT2ZTdHJpbmc6KCk9PmRjdCxocGFyYW1OYW1lOigpPT5CZCxocGFyYW1WYWx1ZUJ5SW5kZXg6KCk9PmhjZSxocGFyYW1WYWx1ZUJ5TmFtZTooKT0+dWNlLGhwYXJhbVZhbHVlQnlWaXNpYmxlSW5kZXg6KCk9Pm1jZSxpc051bGxPclVuZGVmaW5lZDooKT0+VHVyLGwyTm9ybVNxdWFyZWQ6KCk9PnAzLG1ldHJpY05hbWU6KCk9PlF1LG1ldHJpY1ZhbHVlQnlJbmRleDooKT0+ZmNlLG1ldHJpY1ZhbHVlQnlOYW1lOigpPT5mMyxtZXRyaWNWYWx1ZUJ5VmlzaWJsZUluZGV4OigpPT5GSCxudW1Db2x1bW5zOigpPT51Y3QsbnVtSFBhcmFtczooKT0+bGNlLG51bU1ldHJpY3M6KCk9PmNjZSxudW1WaXNpYmxlQ29sdW1uczooKT0+d3VyLG51bVZpc2libGVIUGFyYW1zOigpPT5wY2UsbnVtVmlzaWJsZU1ldHJpY3M6KCk9PmRjZSxudW1lcmljQ29sdW1uRXh0ZW50OigpPT5oY3QscG9pbnRUb1JlY3RhbmdsZURpc3Q6KCk9PmdjZSxwcmV0dHlQcmludDooKT0+dzAscHJldHR5UHJpbnRIUGFyYW1WYWx1ZUJ5TmFtZTooKT0+U3VyLHByZXR0eVByaW50TWV0cmljVmFsdWVCeU5hbWU6KCk9Pk11cixxdWFkVHJlZVZpc2l0UG9pbnRzSW5EaXNrOigpPT5BdXIscXVhZFRyZWVWaXNpdFBvaW50c0luUmVjdDooKT0+Q3VyLHJvdGF0ZVN0cjooKT0+RXVyLHNjaGVtYUNvbHVtbk5hbWU6KCk9PmNjdCxzY2hlbWFWaXNpYmxlQ29sdW1uTmFtZTooKT0+YnVyLHNlc3Npb25Hcm91cFdpdGhOYW1lOigpPT5mY3Qsc2V0QXJyYXlPYnNlcnZhYmx5OigpPT5wY3QsdHJhbnNsYXRlU3RyOigpPT55UCx2aXNpYmxlTnVtZXJpY0NvbHVtbkV4dGVudDooKT0+X1B9KTt2YXIgT0g9RWUoT2UoKSwxKTtmdW5jdGlvbiBCZChlKXtyZXR1cm4gZS5kaXNwbGF5TmFtZSE9PSIiJiZlLmRpc3BsYXlOYW1lIT09dm9pZCAwP2UuZGlzcGxheU5hbWU6ZS5uYW1lfWZ1bmN0aW9uIFF1KGUpe2lmKGUuZGlzcGxheU5hbWUhPT0iIiYmZS5kaXNwbGF5TmFtZSE9PXZvaWQgMClyZXR1cm4gZS5kaXNwbGF5TmFtZTtsZXQgdD1lLm5hbWUuZ3JvdXAscj1lLm5hbWUudGFnO3JldHVybiB0PT09dm9pZCAwJiYodD0iIikscj09PXZvaWQgMCYmKHI9IiIpLHQ9PT0iInx8dD09PSIuIj9yOnQrIi4iK3J9ZnVuY3Rpb24gY2N0KGUsdCl7aWYodDxlLmhwYXJhbUNvbHVtbnMubGVuZ3RoKXJldHVybiBCZChlLmhwYXJhbUNvbHVtbnNbdF0uaHBhcmFtSW5mbyk7bGV0IHI9dC1lLmhwYXJhbUNvbHVtbnMubGVuZ3RoO3JldHVybiBRdShlLm1ldHJpY0NvbHVtbnNbcl0ubWV0cmljSW5mbyl9ZnVuY3Rpb24gbGNlKGUpe3JldHVybiBlLmhwYXJhbUNvbHVtbnMubGVuZ3RofWZ1bmN0aW9uIGNjZShlKXtyZXR1cm4gZS5tZXRyaWNDb2x1bW5zLmxlbmd0aH1mdW5jdGlvbiB1Y3QoZSl7cmV0dXJuIGxjZShlKStjY2UoZSl9ZnVuY3Rpb24gdWNlKGUsdCl7cmV0dXJuIGVbdF19ZnVuY3Rpb24gZjMoZSx0KXtyZXR1cm4gZS5maW5kKHI9Pk9ILmlzRXF1YWwoci5uYW1lLHQpKX1mdW5jdGlvbiBoY2UoZSx0LHIpe3JldHVybiB0LmhwYXJhbXNbZS5ocGFyYW1Db2x1bW5zW3JdLmhwYXJhbUluZm8ubmFtZV19ZnVuY3Rpb24gZmNlKGUsdCxyKXtsZXQgbj1lLm1ldHJpY0NvbHVtbnNbcl0ubWV0cmljSW5mby5uYW1lLGk9ZjModC5tZXRyaWNWYWx1ZXMsbik7cmV0dXJuIGk9PT12b2lkIDB8fGkudmFsdWU9PT0iTmFOIj92b2lkIDA6aS52YWx1ZX1mdW5jdGlvbiBiMChlLHQscil7cmV0dXJuIHI8ZS5ocGFyYW1Db2x1bW5zLmxlbmd0aD9oY2UoZSx0LHIpOmZjZShlLHQsci1lLmhwYXJhbUNvbHVtbnMubGVuZ3RoKX1mdW5jdGlvbiBoY3QoZSx0LHIpe3JldHVybiBzYSh0LG49PmIwKGUsbixyKSl9ZnVuY3Rpb24gekgoZSx0LHIpe2xldCBuO2lmKHI8dC5ocGFyYW1JbmZvcy5sZW5ndGgpbj1lLmhwYXJhbUNvbHVtbnMuZmluZEluZGV4KGk9PmkuaHBhcmFtSW5mby5uYW1lPT09dC5ocGFyYW1JbmZvc1tyXS5uYW1lKTtlbHNle2xldCBpPXItdC5ocGFyYW1JbmZvcy5sZW5ndGgsbz10Lm1ldHJpY0luZm9zW2ldLm5hbWU7bj1lLmhwYXJhbUNvbHVtbnMubGVuZ3RoK2UubWV0cmljQ29sdW1ucy5maW5kSW5kZXgoYT0+YS5tZXRyaWNJbmZvLm5hbWU9PT1vKX1yZXR1cm4gY29uc29sZS5hc3NlcnQobiE9PS0xKSxufWZ1bmN0aW9uIGJ1cihlLHQpe2lmKHQ8ZS5ocGFyYW1JbmZvcy5sZW5ndGgpcmV0dXJuIEJkKGUuaHBhcmFtSW5mb3NbdF0pO2xldCByPXQtZS5ocGFyYW1JbmZvcy5sZW5ndGg7cmV0dXJuIFF1KGUubWV0cmljSW5mb3Nbcl0pfWZ1bmN0aW9uIHBjZShlKXtyZXR1cm4gZS5ocGFyYW1JbmZvcy5sZW5ndGh9ZnVuY3Rpb24gZGNlKGUpe3JldHVybiBlLm1ldHJpY0luZm9zLmxlbmd0aH1mdW5jdGlvbiB3dXIoZSl7cmV0dXJuIHBjZShlKStkY2UoZSl9ZnVuY3Rpb24gX1AoZSx0LHIpe3JldHVybiBzYSh0LG49PkJIKGUsbixyKSl9ZnVuY3Rpb24gU3VyKGUsdCl7cmV0dXJuIHcwKHVjZShlLHQpKX1mdW5jdGlvbiBNdXIoZSx0KXtyZXR1cm4gdzAoZjMoZSx0KSl9ZnVuY3Rpb24gZmN0KGUsdCl7cmV0dXJuIGUuZmluZChyPT5yLm5hbWU9PT10KX1mdW5jdGlvbiBtY2UoZSx0LHIpe3JldHVybiB0LmhwYXJhbXNbZS5ocGFyYW1JbmZvc1tyXS5uYW1lXX1mdW5jdGlvbiBGSChlLHQscil7bGV0IG49ZS5tZXRyaWNJbmZvc1tyXS5uYW1lLGk9ZjModC5tZXRyaWNWYWx1ZXMsbik7cmV0dXJuIGk9PT12b2lkIDB8fGkudmFsdWU9PT0iTmFOIj92b2lkIDA6aS52YWx1ZX1mdW5jdGlvbiBCSChlLHQscil7cmV0dXJuIHI8ZS5ocGFyYW1JbmZvcy5sZW5ndGg/bWNlKGUsdCxyKTpGSChlLHQsci1lLmhwYXJhbUluZm9zLmxlbmd0aCl9ZnVuY3Rpb24gdzAoZSl7cmV0dXJuIE9ILmlzTnVtYmVyKGUpP2UudG9QcmVjaXNpb24oNSk6ZT09bnVsbD8iIjplLnRvU3RyaW5nKCl9ZnVuY3Rpb24gcDMoZSx0KXtyZXR1cm4gZSplK3QqdH1mdW5jdGlvbiBoMyhlLHQscixuKXtyZXR1cm4gTWF0aC5zcXJ0KHAzKGUtcix0LW4pKX1mdW5jdGlvbiBnY2UoZSx0LHIsbixpLG8pe2lmKGU8ciYmdDxuKXJldHVybiBoMyhlLHQscixuKTtpZihyPD1lJiZlPGkmJnQ8bilyZXR1cm4gbi10O2lmKGk8PWUmJnQ8bilyZXR1cm4gaDMoZSx0LGksbik7aWYoZTxyJiZuPD10JiZ0PG8pcmV0dXJuIHItZTtpZihyPD1lJiZlPGkmJm48PXQmJnQ8bylyZXR1cm4gMDtpZihpPD1lJiZuPD10JiZ0PG8pcmV0dXJuIGUtaTtpZihlPHImJm88PXQpcmV0dXJuIGgzKGUsdCxyLG8pO2lmKHI8PWUmJmU8aSYmbzw9dClyZXR1cm4gdC1vO2lmKGk8PWUmJm88PXQpcmV0dXJuIGgzKGUsdCxpLG8pO3Rocm93IlBvaW50ICh4LHkpIG11c3QgYmUgaW4gb25lIG9mIHRoZSByZWdpb25zIGRlZmluZWQgYWJvdmUuIn1mdW5jdGlvbiB5UChlLHQpe3JldHVybiB0PT09dm9pZCAwPyJ0cmFuc2xhdGUoIitlKyIpIjoidHJhbnNsYXRlKCIrZSsiLCIrdCsiKSJ9ZnVuY3Rpb24gRXVyKGUsdCxyKXtsZXQgbj0icm90YXRlKCIrZTtyZXR1cm4gdCE9PXZvaWQgMCYmciE9PXZvaWQgMCYmKG49bisiLCIrdCsiLCIrciksbj1uKyIpIixufWZ1bmN0aW9uIFR1cihlKXtyZXR1cm4gZT09bnVsbH1mdW5jdGlvbiBDdXIoZSx0LHIsbixpLG8pe2UudmlzaXQoKGEscyxsLGMsdSk9PntpZihhLmxlbmd0aD09PXZvaWQgMCl7ZG97bGV0IGg9ZS54KCkoYS5kYXRhKSxmPWUueSgpKGEuZGF0YSk7dDw9aCYmaDxuJiZyPD1mJiZmPGkmJm8oYS5kYXRhKX13aGlsZShhPWEubmV4dCk7cmV0dXJuITB9cmV0dXJuIHM+PW58fGM8PXR8fGw+PWl8fHU8PXJ9KX1mdW5jdGlvbiBBdXIoZSx0LHIsbixpKXtlLnZpc2l0KChvLGEscyxsLGMpPT57aWYoby5sZW5ndGg9PT12b2lkIDApe2Rve2xldCB1PWUueCgpKG8uZGF0YSksaD1lLnkoKShvLmRhdGEpLGY9aDModCxyLHUsaCk7Zjw9biYmaShvLmRhdGEsZil9d2hpbGUobz1vLm5leHQpO3JldHVybiEwfXJldHVybiBnY2UodCxyLGEscyxsLGMpPm59KX1mdW5jdGlvbiBQdXIoZSx0KXtsZXQgcj1uZXcgU2V0O3JldHVybiBlLmZvckVhY2gobj0+e3QobikmJnIuYWRkKG4pfSkscn1mdW5jdGlvbiBwY3QoZSx0LHIpe2xldCBuPWUuZ2V0KHQsZSk7aWYoIUFycmF5LmlzQXJyYXkobikpe2Uuc2V0KHQscik7cmV0dXJufWUuc3BsaWNlLmFwcGx5KGUsW3QsMCxuLmxlbmd0aF0uY29uY2F0KHIpKX1mdW5jdGlvbiBkY3QoZSl7bGV0IHQ9MDtmb3IobGV0IHI9MDtyPGUubGVuZ3RoOysrcil0PXQqMzErZS5jaGFyQ29kZUF0KHIpJjQyOTQ5NjcyOTU7cmV0dXJuIHQrVEkoMiwzMSl9dmFyIEl1cj0xMCxJbj1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb25maWd1cmF0aW9uPXtzY2hlbWE6e2hwYXJhbUNvbHVtbnM6QXJyYXkoKSxtZXRyaWNDb2x1bW5zOkFycmF5KCl9LGNvbHVtbnNWaXNpYmlsaXR5OkFycmF5KCksdmlzaWJsZVNjaGVtYTp7aHBhcmFtSW5mb3M6QXJyYXkoKSxtZXRyaWNJbmZvczpBcnJheSgpfX0sdGhpcy5zZXNzaW9uR3JvdXBzPVtdLHRoaXMuZGF0YUxvYWRlZFdpdGhOb25FbXB0eUhwYXJhbXM9ITEsdGhpcy5kYXRhTG9hZGVkV2l0aEVtcHR5SHBhcmFtcz0hMSx0aGlzLl9tYXhOdW1IcGFyYW1zVG9Mb2FkPTFlMyx0aGlzLl90b29NYW55SHBhcmFtcz0hMSx0aGlzLl9zdGF0dXNlcz1be3ZhbHVlOiJTVEFUVVNfVU5LTk9XTiIsZGlzcGxheU5hbWU6IlVua25vd24iLGFsbG93ZWQ6ITB9LHt2YWx1ZToiU1RBVFVTX1NVQ0NFU1MiLGRpc3BsYXlOYW1lOiJTdWNjZXNzIixhbGxvd2VkOiEwfSx7dmFsdWU6IlNUQVRVU19GQUlMVVJFIixkaXNwbGF5TmFtZToiRmFpbHVyZSIsYWxsb3dlZDohMH0se3ZhbHVlOiJTVEFUVVNfUlVOTklORyIsZGlzcGxheU5hbWU6IlJ1bm5pbmciLGFsbG93ZWQ6ITB9XSx0aGlzLl9nZXRFeHBlcmltZW50UmVzb2x2ZWQ9bmV3IFByb21pc2UodD0+e3RoaXMuX3Jlc29sdmVHZXRFeHBlcmltZW50PXR9KSx0aGlzLl9saXN0U2Vzc2lvbkdyb3Vwc0NhbmNlbGxlcj1uZXcgYW4sdGhpcy5fcGFnZVNpemVJbnB1dD17dmFsdWU6IjEwMCIsaW52YWxpZDohMX0sdGhpcy5fcGFnZU51bWJlcklucHV0PXt2YWx1ZToiMSIsaW52YWxpZDohMX0sdGhpcy5fcGFnZUNvdW50U3RyPSI/Iix0aGlzLl9ocGFyYW1OYW1lPUJkLHRoaXMuX21ldHJpY05hbWU9UXUsdGhpcy5fcHJldHR5UHJpbnQ9dzB9cmVsb2FkKCl7dGhpcy5fcXVlcnlTZXJ2ZXIoKX1fY3N2VXJsKHQscil7cmV0dXJuIHRoaXMuX2Rvd25sb2FkRGF0YVVybCh0LHIsImNzdiIpfV9qc29uVXJsKHQscil7cmV0dXJuIHRoaXMuX2Rvd25sb2FkRGF0YVVybCh0LHIsImpzb24iKX1fbGF0ZXhVcmwodCxyKXtyZXR1cm4gdGhpcy5fZG93bmxvYWREYXRhVXJsKHQsciwibGF0ZXgiKX1fZG93bmxvYWREYXRhVXJsKHQscixuKXtsZXQgaT1yLmNvbHVtbnNWaXNpYmlsaXR5O3JldHVybiB0aGlzLmJhY2tlbmQuZ2V0RG93bmxvYWRVcmwobix0LGkpfV9jb21wdXRlRXhwZXJpbWVudEFuZFJlbGF0ZWRQcm9wcygpe2xldCB0PXVzO2lmKHQuaXNOdWxsT3JVbmRlZmluZWQodGhpcy5iYWNrZW5kKXx8dC5pc051bGxPclVuZGVmaW5lZCh0aGlzLmV4cGVyaW1lbnROYW1lKSlyZXR1cm47bGV0IHI9e2V4cGVyaW1lbnROYW1lOnRoaXMuZXhwZXJpbWVudE5hbWUsaHBhcmFtc0xpbWl0OnRoaXMuX21heE51bUhwYXJhbXNUb0xvYWR9O3RoaXMuYmFja2VuZC5nZXRFeHBlcmltZW50KHIpLnRoZW4obj0+e19jZS5pc0VxdWFsKG4sdGhpcy5fZXhwZXJpbWVudCl8fCh0aGlzLnNldCgiX2V4cGVyaW1lbnQiLG4pLHRoaXMuX2NvbXB1dGVIUGFyYW1zKCksdGhpcy5fY29tcHV0ZU1ldHJpY3MoKSx0aGlzLl9xdWVyeVNlcnZlcigpLHRoaXMuX3Jlc29sdmVHZXRFeHBlcmltZW50KCkpfSkuZmluYWxseSgoKT0+e3RoaXMuX2NvbXB1dGVEYXRhRm91bmQoKX0pfV9jb21wdXRlRGF0YUZvdW5kKCl7bGV0IHQ9Qm9vbGVhbih0aGlzLl9leHBlcmltZW50JiZ0aGlzLl9leHBlcmltZW50LmhwYXJhbUluZm9zJiZ0aGlzLl9leHBlcmltZW50LmhwYXJhbUluZm9zLmxlbmd0aD4wKTt0aGlzLnNldCgiZGF0YUxvYWRlZFdpdGhOb25FbXB0eUhwYXJhbXMiLHQpLHRoaXMuc2V0KCJkYXRhTG9hZGVkV2l0aEVtcHR5SHBhcmFtcyIsIXQpfV9jb21wdXRlSFBhcmFtcygpe2xldCB0PVtdO3RoaXMuX2V4cGVyaW1lbnQuaHBhcmFtSW5mb3MuZm9yRWFjaChpPT57bGV0IG89e2luZm86aSxkaXNwbGF5ZWQ6ITEsZmlsdGVyOnt9fTtvLmluZm8uaGFzT3duUHJvcGVydHkoImRvbWFpbkRpc2NyZXRlIik/by5pbmZvLmRvbWFpbkRpc2NyZXRlLmxlbmd0aDxJdXI/KG8uZmlsdGVyLmRvbWFpbkRpc2NyZXRlPVtdLG8uaW5mby5kb21haW5EaXNjcmV0ZS5mb3JFYWNoKGE9PntvLmZpbHRlci5kb21haW5EaXNjcmV0ZS5wdXNoKHt2YWx1ZTphLGNoZWNrZWQ6ITB9KX0pKTpvLmZpbHRlci5yZWdleHA9IiI6by5pbmZvLnR5cGU9PT0iREFUQV9UWVBFX0ZMT0FUNjQiP28uZmlsdGVyLmludGVydmFsPXttaW46e3ZhbHVlOiIiLGludmFsaWQ6ITF9LG1heDp7dmFsdWU6IiIsaW52YWxpZDohMX19OmNvbnNvbGUud2FybigiY2Fubm90IHByb2Nlc3MgZG9tYWluIHR5cGUgJXMgd2l0aG91dCBkaXNjcmV0ZSBkb21haW4gdmFsdWVzIixvLmluZm8udHlwZSksdC5wdXNoKG8pfSksdC5zb3J0KChpLG8pPT5pLmluZm8uZGlmZmVycz09PW8uaW5mby5kaWZmZXJzPzA6aS5pbmZvLmRpZmZlcnM/LTE6MSk7bGV0IG49TWF0aC5taW4oNSx0Lmxlbmd0aCk7Zm9yKGxldCBpPTA7aTxuO2krKyl0W2ldLmRpc3BsYXllZD0hMDt0aGlzLnNldCgiX2hwYXJhbXMiLHQpLHRoaXMuc2V0KCJfVG9vTWFueUhwYXJhbXMiLHQubGVuZ3RoPj10aGlzLl9tYXhOdW1IcGFyYW1zVG9Mb2FkKX1fY29tcHV0ZU1ldHJpY3MoKXtsZXQgdD1bXTt0aGlzLl9leHBlcmltZW50Lm1ldHJpY0luZm9zLmZvckVhY2goKG4saSk9PntsZXQgbz17aW5mbzpuLGZpbHRlcjp7aW50ZXJ2YWw6e21pbjp7dmFsdWU6IiIsaW52YWxpZDohMX0sbWF4Ont2YWx1ZToiIixpbnZhbGlkOiExfX19LGRpc3BsYXllZDppPDV9O3QucHVzaChvKX0pLHRoaXMuc2V0KCJfbWV0cmljcyIsdCl9X2NvbXB1dGVTY2hlbWEoKXtyZXR1cm4hdGhpcy5faHBhcmFtc3x8IXRoaXMuX21ldHJpY3M/e2hwYXJhbUNvbHVtbnM6W10sbWV0cmljQ29sdW1uczpbXX06e2hwYXJhbUNvbHVtbnM6dGhpcy5faHBhcmFtcy5tYXAodD0+KHtocGFyYW1JbmZvOnQuaW5mb30pKSxtZXRyaWNDb2x1bW5zOnRoaXMuX21ldHJpY3MubWFwKHQ9Pih7bWV0cmljSW5mbzp0LmluZm99KSl9fV91cGRhdGVDb25maWd1cmF0aW9uKCl7dGhpcy5kZWJvdW5jZSgiX3VwZGF0ZUNvbmZpZ3VyYXRpb24iLCgpPT57dGhpcy5jb25maWd1cmF0aW9uPXtzY2hlbWE6dGhpcy5fY29tcHV0ZVNjaGVtYSgpLGNvbHVtbnNWaXNpYmlsaXR5OnRoaXMuX2NvbXB1dGVDb2x1bW5zVmlzaWJpbGl0eSgpLHZpc2libGVTY2hlbWE6dGhpcy5fY29tcHV0ZVZpc2libGVTY2hlbWEoKX19KX1fY29tcHV0ZUNvbHVtbnNWaXNpYmlsaXR5KCl7cmV0dXJuIXRoaXMuX2hwYXJhbXN8fCF0aGlzLl9tZXRyaWNzP1tdOnRoaXMuX2hwYXJhbXMubWFwKHQ9PnQuZGlzcGxheWVkKS5jb25jYXQodGhpcy5fbWV0cmljcy5tYXAodD0+dC5kaXNwbGF5ZWQpKX1fY29tcHV0ZVZpc2libGVTY2hlbWEoKXtpZighdGhpcy5faHBhcmFtc3x8IXRoaXMuX21ldHJpY3MpcmV0dXJue2hwYXJhbUluZm9zOltdLG1ldHJpY0luZm9zOltdfTtsZXQgdD10aGlzLl9ocGFyYW1zLmZpbHRlcihuPT5uLmRpc3BsYXllZCkubWFwKG49Pm4uaW5mbykscj10aGlzLl9tZXRyaWNzLmZpbHRlcihuPT5uLmRpc3BsYXllZCkubWFwKG49Pm4uaW5mbyk7cmV0dXJue2hwYXJhbUluZm9zOnQsbWV0cmljSW5mb3M6cn19X2hhc1JlZ2V4cEZpbHRlcih0KXtyZXR1cm4gdC5maWx0ZXIucmVnZXhwIT09dm9pZCAwfV9xdWVyeVNlcnZlcigpe3RoaXMuZGVib3VuY2UoInF1ZXJ5U2VydmVyIiwoKT0+dGhpcy5fcXVlcnlTZXJ2ZXJOb0RlYm91bmNlKCksMTAwKX1fcXVlcnlTZXJ2ZXJOb0RlYm91bmNlKCl7aWYoISghdGhpcy5faHBhcmFtc3x8IXRoaXMuX21ldHJpY3MpKXJldHVybiB0aGlzLl9zZW5kTGlzdFNlc3Npb25Hcm91cHNSZXF1ZXN0KCkudGhlbih0aGlzLl9saXN0U2Vzc2lvbkdyb3Vwc0NhbmNlbGxlci5jYW5jZWxsYWJsZSgoe3ZhbHVlOnQsY2FuY2VsbGVkOnJ9KT0+e2lmKCFyKXtpZih0LnRvdGFsU2l6ZT49MCl7bGV0IG49K3RoaXMuX3BhZ2VTaXplSW5wdXQudmFsdWU7dGhpcy5zZXQoIl9wYWdlQ291bnRTdHIiLFN0cmluZyhNYXRoLmNlaWwodC50b3RhbFNpemUvbikpKSx0aGlzLnNldCgiX3RvdGFsU2Vzc2lvbkdyb3Vwc0NvdW50U3RyIix0LnRvdGFsU2l6ZSl9ZWxzZSB0aGlzLnNldCgiX3BhZ2VDb3VudFN0ciIsIj8iKSx0aGlzLnNldCgiX3RvdGFsU2Vzc2lvbkdyb3Vwc0NvdW50U3RyIiwiVW5rbm93biIpO3BjdCh0aGlzLCJzZXNzaW9uR3JvdXBzIix0LnNlc3Npb25Hcm91cHMpfX0pKX1fc2VuZExpc3RTZXNzaW9uR3JvdXBzUmVxdWVzdCgpe2xldCB0PXRoaXMuX2J1aWxkTGlzdFNlc3Npb25Hcm91cHNSZXF1ZXN0KCk7aWYodCE9PW51bGwpcmV0dXJuIHRoaXMuc2V0KCJfc2Vzc2lvbkdyb3Vwc1JlcXVlc3QiLHQpLHRoaXMuX2xpc3RTZXNzaW9uR3JvdXBzQ2FuY2VsbGVyLmNhbmNlbEFsbCgpLHRoaXMuYmFja2VuZC5saXN0U2Vzc2lvbkdyb3Vwcyh0KX1fYnVpbGRMaXN0U2Vzc2lvbkdyb3Vwc1JlcXVlc3QoKXtsZXQgdD10aGlzLHI9ITA7ZnVuY3Rpb24gbihoKXtyZXR1cm4gaC5taW4udmFsdWUhPT0iInx8aC5tYXgudmFsdWUhPT0iIn1mdW5jdGlvbiBpKGgpe2xldCBmPXQuZ2V0KGgrIi5taW4udmFsdWUiKTtjb25zb2xlLmFzc2VydChmIT09dm9pZCAwKTtsZXQgcD1mPT09IiI/Ii1JbmZpbml0eSI6K2YsZD1pc05hTihwKTt0LnNldChoKyIubWluLmludmFsaWQiLGQpLHI9ciYmIWQ7bGV0IGc9dC5nZXQoaCsiLm1heC52YWx1ZSIpO2NvbnNvbGUuYXNzZXJ0KGchPT12b2lkIDApO2xldCBfPWc9PT0iIj8iSW5maW5pdHkiOitnLHk9aXNOYU4oXyk7cmV0dXJuIHQuc2V0KGgrIi5tYXguaW52YWxpZCIseSkscj1yJiYheSxkfHx5P251bGw6e21pblZhbHVlOnAsbWF4VmFsdWU6X319ZnVuY3Rpb24gbyhoKXtsZXQgZj10LmdldChoKyIudmFsdWUiKTtjb25zb2xlLmFzc2VydChmIT09dm9pZCAwKTtsZXQgcD0rZixkPU51bWJlci5pc0ludGVnZXIocCkmJnA+MDtyZXR1cm4gdC5zZXQoaCsiLmludmFsaWQiLCFkKSxyPXImJmQsZD9wOm51bGx9bGV0IGE9dGhpcy5fc3RhdHVzZXMuZmlsdGVyKGg9PmguYWxsb3dlZCkubWFwKGg9PmgudmFsdWUpLHM9W107aWYodGhpcy5faHBhcmFtcy5mb3JFYWNoKChoLGYpPT57bGV0IHA9e2hwYXJhbTpoLmluZm8ubmFtZSxpbmNsdWRlSW5SZXN1bHQ6ITB9O2guZmlsdGVyLmRvbWFpbkRpc2NyZXRlP2guZmlsdGVyLmRvbWFpbkRpc2NyZXRlLmV2ZXJ5KGc9PmcuY2hlY2tlZCl8fChwLmZpbHRlckRpc2NyZXRlPVtdLGguZmlsdGVyLmRvbWFpbkRpc2NyZXRlLmZvckVhY2goZz0+e2cuY2hlY2tlZCYmcC5maWx0ZXJEaXNjcmV0ZS5wdXNoKGcudmFsdWUpfSkpOmguZmlsdGVyLmludGVydmFsP24oaC5maWx0ZXIuaW50ZXJ2YWwpJiYocC5maWx0ZXJJbnRlcnZhbD1pKCJfaHBhcmFtcy4iK2YrIi5maWx0ZXIuaW50ZXJ2YWwiKSk6aC5maWx0ZXIucmVnZXhwJiYocC5maWx0ZXJSZWdleHA9aC5maWx0ZXIucmVnZXhwKSxzLnB1c2gocCl9KSx0aGlzLl9tZXRyaWNzLmZvckVhY2goKGgsZik9PntsZXQgcD17bWV0cmljOmguaW5mby5uYW1lLGluY2x1ZGVJblJlc3VsdDohMH07bihoLmZpbHRlci5pbnRlcnZhbCkmJihwLmZpbHRlckludGVydmFsPWkoIl9tZXRyaWNzLiIrZisiLmZpbHRlci5pbnRlcnZhbCIpKSxzLnB1c2gocCl9KSx0aGlzLl9zb3J0QnlJbmRleCE9PXZvaWQgMCYmdGhpcy5fc29ydERpcmVjdGlvbiE9PXZvaWQgMCl7aWYoISh0aGlzLl9zb3J0QnlJbmRleCBpbiBzKSlyZXR1cm4gY29uc29sZS5lcnJvcigiTm8gY29sdW1uIGluIGNvbFBhcmFtcyB3aXRoIGluZGV4IHNvcnRCeUluZGV4OiAlcyIsdGhpcy5fc29ydEJ5SW5kZXgpLG51bGw7c1t0aGlzLl9zb3J0QnlJbmRleF0ub3JkZXI9dGhpcy5fc29ydERpcmVjdGlvbj09PTA/Ik9SREVSX0FTQyI6Ik9SREVSX0RFU0MifWxldCBsPW8oIl9wYWdlTnVtYmVySW5wdXQiKXx8MCxjPW8oIl9wYWdlU2l6ZUlucHV0Iil8fDA7aWYoIXIpcmV0dXJuIG51bGw7bGV0IHU9YyoobC0xKTtyZXR1cm57ZXhwZXJpbWVudE5hbWU6dGhpcy5leHBlcmltZW50TmFtZSxhbGxvd2VkU3RhdHVzZXM6YSxjb2xQYXJhbXM6cyxzdGFydEluZGV4OnUsc2xpY2VTaXplOmN9fV9tZXRyaWNTb3J0QnlJbmRleCh0KXtyZXR1cm4gdCt0aGlzLl9ocGFyYW1zLmxlbmd0aH19O0luLnRlbXBsYXRlPVFgCiAgICA8aHBhcmFtcy1zcGxpdC1sYXlvdXQgb3JpZW50YXRpb249InZlcnRpY2FsIj4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBjbGFzcz0ic2VjdGlvbiBoeXBlcnBhcmFtZXRlcnMiPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPkh5cGVycGFyYW1ldGVyczwvZGl2PgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfVG9vTWFueUhwYXJhbXNdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b28tbWFueS1ocGFyYW1zIj4KICAgICAgICAgICAgV2FybmluZzogVGhlcmUgd2VyZSB0b28gbWFueSBocGFyYW1zIHRvIGxvYWQgYWxsIG9mIHRoZW0KICAgICAgICAgICAgZWZmaWNpZW50bHkuIE9ubHkgW1tfbWF4TnVtSHBhcmFtc1RvTG9hZF1dIHdlcmUgbG9hZGVkLgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJ7e19ocGFyYW1zfX0iIGFzPSJocGFyYW0iPgogICAgICAgICAgPGRpdiBjbGFzcz0iaHBhcmFtIj4KICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94CiAgICAgICAgICAgICAgY2hlY2tlZD0ie3tocGFyYW0uZGlzcGxheWVkfX0iCiAgICAgICAgICAgICAgY2xhc3M9ImhwYXJhbS1jaGVja2JveCIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIFtbX2hwYXJhbU5hbWUoaHBhcmFtLmluZm8pXV0KICAgICAgICAgICAgPC9wYXBlci1jaGVja2JveD4KICAgICAgICAgICAgPCEtLSBQcmVjaXNlbHkgb25lIG9mIHRoZSB0ZW1wbGF0ZXMgYmVsb3cgd2lsbCBiZSBzdGFtcGVkLi0tPgogICAgICAgICAgICA8IS0tIDEuIEEgbGlzdCBvZiBjaGVja2JveGVzIC0tPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbaHBhcmFtLmZpbHRlci5kb21haW5EaXNjcmV0ZV1dIj4KICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgICAgaXRlbXM9IltbaHBhcmFtLmZpbHRlci5kb21haW5EaXNjcmV0ZV1dIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxwYXBlci1jaGVja2JveAogICAgICAgICAgICAgICAgICBjaGVja2VkPSJ7e2l0ZW0uY2hlY2tlZH19IgogICAgICAgICAgICAgICAgICBjbGFzcz0iZGlzY3JldGUtdmFsdWUtY2hlY2tib3giCiAgICAgICAgICAgICAgICAgIG9uLWNoYW5nZT0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICBbW19wcmV0dHlQcmludChpdGVtLnZhbHVlKV1dCiAgICAgICAgICAgICAgICA8L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwhLS0gMi4gQSBudW1lcmljIGludGVydmFsIC0tPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbaHBhcmFtLmZpbHRlci5pbnRlcnZhbF1dIj4KICAgICAgICAgICAgICA8cGFwZXItaW5wdXQKICAgICAgICAgICAgICAgIGxhYmVsPSJNaW4iCiAgICAgICAgICAgICAgICB2YWx1ZT0ie3tocGFyYW0uZmlsdGVyLmludGVydmFsLm1pbi52YWx1ZX19IgogICAgICAgICAgICAgICAgYWxsb3dlZF9wYXR0ZXJuPSJbMC05LmVcXC1dIgogICAgICAgICAgICAgICAgb24tdmFsdWUtY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgICAgICAgZXJyb3ItbWVzc2FnZT0iSW52YWxpZCBpbnB1dCIKICAgICAgICAgICAgICAgIGludmFsaWQ9IltbaHBhcmFtLmZpbHRlci5pbnRlcnZhbC5taW4uaW52YWxpZF1dIgogICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Ii1pbmZpbml0eSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgICA8cGFwZXItaW5wdXQKICAgICAgICAgICAgICAgIGxhYmVsPSJNYXgiCiAgICAgICAgICAgICAgICB2YWx1ZT0ie3tocGFyYW0uZmlsdGVyLmludGVydmFsLm1heC52YWx1ZX19IgogICAgICAgICAgICAgICAgYWxsb3dlZF9wYXR0ZXJuPSJbMC05LmVcXC1dIgogICAgICAgICAgICAgICAgb24tdmFsdWUtY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgICAgICAgZXJyb3ItbWVzc2FnZT0iSW52YWxpZCBpbnB1dCIKICAgICAgICAgICAgICAgIGludmFsaWQ9IltbaHBhcmFtLmZpbHRlci5pbnRlcnZhbC5tYXguaW52YWxpZF1dIgogICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9IitpbmZpbml0eSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPCEtLSAzLiBBIHJlZ2V4cCAtLT4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNSZWdleHBGaWx0ZXIoaHBhcmFtKV1dIj4KICAgICAgICAgICAgICA8cGFwZXItaW5wdXQKICAgICAgICAgICAgICAgIGxhYmVsPSJSZWd1bGFyIGV4cHJlc3Npb24iCiAgICAgICAgICAgICAgICB2YWx1ZT0ie3tocGFyYW0uZmlsdGVyLnJlZ2V4cH19IgogICAgICAgICAgICAgICAgb24tdmFsdWUtY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgc2xvdD0iY29udGVudCIgY2xhc3M9InNlY3Rpb24gbWV0cmljcyI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+TWV0cmljczwvZGl2PgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Int7X21ldHJpY3N9fSIgYXM9Im1ldHJpYyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJtZXRyaWMiPgogICAgICAgICAgICA8IS0tIFRPRE8oZXJleik6IE1ha2UgaXQgZWFzaWVyIHRvIGhhbmRsZSBhIGxhcmdlIG51bWJlciBvZgogICAgICAgICAgICAgICAgICBtZXRyaWNzOgogICAgICAgICAgICAgICAgICAxLiBBZGQgYW4gJ2lzb2xhdG9yJyByYWRpby1idXR0b24gdG8gc2VsZWN0IGp1c3Qgb25lCiAgICAgICAgICAgICAgICAgIG1ldHJpYyBhbmQKICAgICAgICAgICAgICAgICAgaGlkZSBhbGwgdGhlIHJlc3QKICAgICAgICAgICAgICAgICAgMi4gQWRkIGEgJ3RvZ2dsZS1hbGwnIGJ1dHRvbiB0aGF0IHdpbGwgaGlkZS91bmhpZGUKICAgICAgICAgICAgICAgICAgICBhbGwgdGhlCiAgICAgICAgICAgICAgICAgIG1ldHJpY3MuCiAgICAgICAgICAgICAgICAgIFVzZSBzaW1pbGFyIGxvZ2ljL2FwcGVhcmFuY2UgdG8gdGhlIHJ1bi1zZWxlY3RvciBvZgogICAgICAgICAgICAgICAgICBzY2FsYXJzLi0tPgogICAgICAgICAgICA8cGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICBjaGVja2VkPSJ7e21ldHJpYy5kaXNwbGF5ZWR9fSIKICAgICAgICAgICAgICBjbGFzcz0ibWV0cmljLWNoZWNrYm94IgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgW1tfbWV0cmljTmFtZShtZXRyaWMuaW5mbyldXQogICAgICAgICAgICA8L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmxpbmUtZWxlbWVudCI+CiAgICAgICAgICAgICAgPHBhcGVyLWlucHV0CiAgICAgICAgICAgICAgICBsYWJlbD0iTWluIgogICAgICAgICAgICAgICAgdmFsdWU9Int7bWV0cmljLmZpbHRlci5pbnRlcnZhbC5taW4udmFsdWV9fSIKICAgICAgICAgICAgICAgIGFsbG93ZWQtcGF0dGVybj0iWzAtOS5lXFwtXSIKICAgICAgICAgICAgICAgIG9uLXZhbHVlLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIKICAgICAgICAgICAgICAgIGVycm9yLW1lc3NhZ2U9IkludmFsaWQgaW5wdXQiCiAgICAgICAgICAgICAgICBpbnZhbGlkPSJ7e21ldHJpYy5maWx0ZXIuaW50ZXJ2YWwubWluLmludmFsaWR9fSIKICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSItaW5maW5pdHkiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmxpbmUtZWxlbWVudCI+CiAgICAgICAgICAgICAgPHBhcGVyLWlucHV0CiAgICAgICAgICAgICAgICBsYWJlbD0iTWF4IgogICAgICAgICAgICAgICAgYWxsb3dlZC1wYXR0ZXJuPSJbMC05LmVcXC1dIgogICAgICAgICAgICAgICAgdmFsdWU9Int7bWV0cmljLmZpbHRlci5pbnRlcnZhbC5tYXgudmFsdWV9fSIKICAgICAgICAgICAgICAgIG9uLXZhbHVlLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIKICAgICAgICAgICAgICAgIGVycm9yLW1lc3NhZ2U9IkludmFsaWQgaW5wdXQiCiAgICAgICAgICAgICAgICBpbnZhbGlkPSJ7e21ldHJpYy5maWx0ZXIuaW50ZXJ2YWwubWF4LmludmFsaWR9fSIKICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSIraW5maW5pdHkiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgc2xvdD0iY29udGVudCIgY2xhc3M9InNlY3Rpb24gc3RhdHVzIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5TdGF0dXM8L2Rpdj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19zdGF0dXNlc11dIiBhcz0ic3RhdHVzIj4KICAgICAgICAgIDxwYXBlci1jaGVja2JveCBjaGVja2VkPSJ7e3N0YXR1cy5hbGxvd2VkfX0iIG9uLWNoYW5nZT0iX3F1ZXJ5U2VydmVyIj4KICAgICAgICAgICAgW1tzdGF0dXMuZGlzcGxheU5hbWVdXQogICAgICAgICAgPC9wYXBlci1jaGVja2JveD4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBjbGFzcz0ic2VjdGlvbiBzb3J0aW5nIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5Tb3J0aW5nPC9kaXY+CiAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUKICAgICAgICAgIGxhYmVsPSJTb3J0IGJ5IgogICAgICAgICAgb24tc2VsZWN0ZWQtaXRlbS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiCiAgICAgICAgICBob3Jpem9udGFsLWFsaWduPSJsZWZ0IgogICAgICAgID4KICAgICAgICAgIDxwYXBlci1saXN0Ym94CiAgICAgICAgICAgIGNsYXNzPSJkcm9wZG93bi1jb250ZW50IgogICAgICAgICAgICBzbG90PSJkcm9wZG93bi1jb250ZW50IgogICAgICAgICAgICBzZWxlY3RlZD0ie3tfc29ydEJ5SW5kZXh9fSIKICAgICAgICAgICAgb24tc2VsZWN0ZWQtaXRlbS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiCiAgICAgICAgICA+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2hwYXJhbXNdXSIgYXM9ImhwYXJhbSI+CiAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+IFtbX2hwYXJhbU5hbWUoaHBhcmFtLmluZm8pXV0gPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19tZXRyaWNzXV0iIGFzPSJtZXRyaWMiPgogICAgICAgICAgICAgIDxwYXBlci1pdGVtPiBbW19tZXRyaWNOYW1lKG1ldHJpYy5pbmZvKV1dIDwvcGFwZXItaXRlbT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUKICAgICAgICAgIGxhYmVsPSJEaXJlY3Rpb24iCiAgICAgICAgICBvbi1zZWxlY3RlZC1pdGVtLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIKICAgICAgICAgIGhvcml6b250YWwtYWxpZ249ImxlZnQiCiAgICAgICAgPgogICAgICAgICAgPHBhcGVyLWxpc3Rib3gKICAgICAgICAgICAgY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgIHNlbGVjdGVkPSJ7e19zb3J0RGlyZWN0aW9ufX0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDxwYXBlci1pdGVtPkFzY2VuZGluZzwvcGFwZXItaXRlbT4KICAgICAgICAgICAgPHBhcGVyLWl0ZW0+RGVzY2VuZGluZzwvcGFwZXItaXRlbT4KICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IHNsb3Q9ImNvbnRlbnQiIGNsYXNzPSJzZWN0aW9uIHBhZ2luZyI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+UGFnaW5nPC9kaXY+CiAgICAgICAgPGRpdj4KICAgICAgICAgIE51bWJlciBvZiBtYXRjaGluZyBzZXNzaW9uIGdyb3VwczogW1tfdG90YWxTZXNzaW9uR3JvdXBzQ291bnRTdHJdXQogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImlubGluZS1lbGVtZW50IHBhZ2UtbnVtYmVyLWlucHV0Ij4KICAgICAgICAgIDxwYXBlci1pbnB1dAogICAgICAgICAgICBsYWJlbD0iUGFnZSAjIgogICAgICAgICAgICB2YWx1ZT0ie3tfcGFnZU51bWJlcklucHV0LnZhbHVlfX0iCiAgICAgICAgICAgIGFsbG93ZWQtcGF0dGVybj0iWzAtOV0iCiAgICAgICAgICAgIGVycm9yLW1lc3NhZ2U9IkludmFsaWQgaW5wdXQiCiAgICAgICAgICAgIGludmFsaWQ9IltbX3BhZ2VOdW1iZXJJbnB1dC5pbnZhbGlkXV0iCiAgICAgICAgICAgIG9uLXZhbHVlLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIKICAgICAgICAgID4KICAgICAgICAgICAgPGRpdiBzbG90PSJzdWZmaXgiIGNsYXNzPSJwYWdlLXN1ZmZpeCI+LyBbW19wYWdlQ291bnRTdHJdXTwvZGl2PgogICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJpbmxpbmUtZWxlbWVudCBwYWdlLXNpemUtaW5wdXQiPgogICAgICAgICAgPHBhcGVyLWlucHV0CiAgICAgICAgICAgIGxhYmVsPSJNYXggIyBvZiBzZXNzaW9uIGdyb3VwcyBwZXIgcGFnZToiCiAgICAgICAgICAgIHZhbHVlPSJ7e19wYWdlU2l6ZUlucHV0LnZhbHVlfX0iCiAgICAgICAgICAgIGFsbG93ZWQtcGF0dGVybj0iWzAtOV0iCiAgICAgICAgICAgIGVycm9yLW1lc3NhZ2U9IkludmFsaWQgaW5wdXQiCiAgICAgICAgICAgIGludmFsaWQ9IltbX3BhZ2VTaXplSW5wdXQuaW52YWxpZF1dIgogICAgICAgICAgICBvbi12YWx1ZS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiCiAgICAgICAgICA+CiAgICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBjbGFzcz0ic2VjdGlvbiBkb3dubG9hZCI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zZXNzaW9uR3JvdXBzUmVxdWVzdF1dIj4KICAgICAgICAgIERvd25sb2FkIGRhdGEgYXMKICAgICAgICAgIDxzcGFuPgogICAgICAgICAgICA8YQogICAgICAgICAgICAgIGlkPSJjc3ZMaW5rIgogICAgICAgICAgICAgIGRvd25sb2FkPSJocGFyYW1zX3RhYmxlLmNzdiIKICAgICAgICAgICAgICBocmVmPSJbW19jc3ZVcmwoX3Nlc3Npb25Hcm91cHNSZXF1ZXN0LCBjb25maWd1cmF0aW9uKV1dIgogICAgICAgICAgICAgID5DU1Y8L2EKICAgICAgICAgICAgPgogICAgICAgICAgICA8YQogICAgICAgICAgICAgIGlkPSJqc29uTGluayIKICAgICAgICAgICAgICBkb3dubG9hZD0iaHBhcmFtc190YWJsZS5qc29uIgogICAgICAgICAgICAgIGhyZWY9IltbX2pzb25VcmwoX3Nlc3Npb25Hcm91cHNSZXF1ZXN0LCBjb25maWd1cmF0aW9uKV1dIgogICAgICAgICAgICAgID5KU09OPC9hCiAgICAgICAgICAgID4KICAgICAgICAgICAgPGEKICAgICAgICAgICAgICBpZD0ibGF0ZXhMaW5rIgogICAgICAgICAgICAgIGRvd25sb2FkPSJocGFyYW1zX3RhYmxlLnRleCIKICAgICAgICAgICAgICBocmVmPSJbW19sYXRleFVybChfc2Vzc2lvbkdyb3Vwc1JlcXVlc3QsIGNvbmZpZ3VyYXRpb24pXV0iCiAgICAgICAgICAgICAgPkxhVGVYPC9hCiAgICAgICAgICAgID4KICAgICAgICAgIDwvc3Bhbj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvaHBhcmFtcy1zcGxpdC1sYXlvdXQ+CiAgICA8c3R5bGU+CiAgICAgIC5zZWN0aW9uIHsKICAgICAgICBwYWRkaW5nOiAxMHB4OwogICAgICB9CiAgICAgIC5zZWN0aW9uLXRpdGxlIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgICBtYXJnaW4tYm90dG9tOiA3cHg7CiAgICAgIH0KICAgICAgLnRvby1tYW55LWhwYXJhbXMgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1vcmFuZ2UtZGFyayk7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICBtYXJnaW46IDEycHggMDsKICAgICAgfQogICAgICAuZGlzY3JldGUtdmFsdWUtY2hlY2tib3gsCiAgICAgIC5tZXRyaWMtY2hlY2tib3gsCiAgICAgIC5ocGFyYW0tY2hlY2tib3ggewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5kaXNjcmV0ZS12YWx1ZS1jaGVja2JveCB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDIwcHg7CiAgICAgIH0KICAgICAgLmhwYXJhbSwKICAgICAgLm1ldHJpYyB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgICAgLmlubGluZS1lbGVtZW50IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgd2lkdGg6IDQwJTsKICAgICAgICBtYXJnaW4tbGVmdDogMTBweDsKICAgICAgfQogICAgICAucGFnZS1udW1iZXItaW5wdXQgewogICAgICAgIHdpZHRoOiAyMCU7CiAgICAgIH0KICAgICAgLnBhZ2Utc2l6ZS1pbnB1dCB7CiAgICAgICAgd2lkdGg6IDYwJTsKICAgICAgfQogICAgICB2YWFkaW4tc3BsaXQtbGF5b3V0IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgcGFwZXItbGlzdGJveCB7CiAgICAgICAgbWF4LWhlaWdodDogMTVlbTsKICAgICAgfQogICAgICAucGFnZS1zdWZmaXggewogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxJbi5wcm90b3R5cGUsImV4cGVyaW1lbnROYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxJbi5wcm90b3R5cGUsImNvbmZpZ3VyYXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheSxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSW4ucHJvdG90eXBlLCJzZXNzaW9uR3JvdXBzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEluLnByb3RvdHlwZSwiZGF0YUxvYWRlZFdpdGhOb25FbXB0eUhwYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSW4ucHJvdG90eXBlLCJkYXRhTG9hZGVkV2l0aEVtcHR5SHBhcmFtcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxJbi5wcm90b3R5cGUsIl9leHBlcmltZW50Iix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxJbi5wcm90b3R5cGUsIl9ocGFyYW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLEluLnByb3RvdHlwZSwiX21heE51bUhwYXJhbXNUb0xvYWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxJbi5wcm90b3R5cGUsIl90b29NYW55SHBhcmFtcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sSW4ucHJvdG90eXBlLCJfbWV0cmljcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEluLnByb3RvdHlwZSwiX3N0YXR1c2VzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEluLnByb3RvdHlwZSwiX2dldEV4cGVyaW1lbnRSZXNvbHZlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLEluLnByb3RvdHlwZSwiX3Jlc29sdmVHZXRFeHBlcmltZW50Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEluLnByb3RvdHlwZSwiX2xpc3RTZXNzaW9uR3JvdXBzQ2FuY2VsbGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLEluLnByb3RvdHlwZSwiX3NvcnRCeUluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLEluLnByb3RvdHlwZSwiX3NvcnREaXJlY3Rpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSW4ucHJvdG90eXBlLCJfcGFnZVNpemVJbnB1dCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxJbi5wcm90b3R5cGUsIl9wYWdlTnVtYmVySW5wdXQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSW4ucHJvdG90eXBlLCJfcGFnZUNvdW50U3RyIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEluLnByb3RvdHlwZSwiX3RvdGFsU2Vzc2lvbkdyb3Vwc0NvdW50U3RyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEluLnByb3RvdHlwZSwiX3Nlc3Npb25Hcm91cHNSZXF1ZXN0Iix2b2lkIDApO0UoW0J0KCJiYWNrZW5kIiwiZXhwZXJpbWVudE5hbWUiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEluLnByb3RvdHlwZSwiX2NvbXB1dGVFeHBlcmltZW50QW5kUmVsYXRlZFByb3BzIixudWxsKTtFKFtCdCgiX2hwYXJhbXMuKiIsIl9tZXRyaWNzLioiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEluLnByb3RvdHlwZSwiX3VwZGF0ZUNvbmZpZ3VyYXRpb24iLG51bGwpO0luPUUoW3l0KCJ0Zi1ocGFyYW1zLXF1ZXJ5LXBhbmUiKV0sSW4pO3ZhciBVY3Q9RWUoT2UoKSwxKTt2YXIgbWN0PXR5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiJiZ3aW5kb3cuY3VzdG9tRWxlbWVudHMhPW51bGwmJndpbmRvdy5jdXN0b21FbGVtZW50cy5wb2x5ZmlsbFdyYXBGbHVzaENhbGxiYWNrIT09dm9pZCAwO3ZhciBvMT0oZSx0LHI9bnVsbCk9Pntmb3IoO3QhPT1yOyl7bGV0IG49dC5uZXh0U2libGluZztlLnJlbW92ZUNoaWxkKHQpLHQ9bn19O3ZhciBZYz1ge3tsaXQtJHtTdHJpbmcoTWF0aC5yYW5kb20oKSkuc2xpY2UoMil9fX1gLGdjdD1gPCEtLSR7WWN9LS0+YCx5Y2U9bmV3IFJlZ0V4cChgJHtZY318JHtnY3R9YCksZDM9IiRsaXQkIixhMT1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIpe3RoaXMucGFydHM9W10sdGhpcy5lbGVtZW50PXI7bGV0IG49W10saT1bXSxvPWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoci5jb250ZW50LDEzMyxudWxsLCExKSxhPTAscz0tMSxsPTAse3N0cmluZ3M6Yyx2YWx1ZXM6e2xlbmd0aDp1fX09dDtmb3IoO2w8dTspe2xldCBoPW8ubmV4dE5vZGUoKTtpZihoPT09bnVsbCl7by5jdXJyZW50Tm9kZT1pLnBvcCgpO2NvbnRpbnVlfWlmKHMrKyxoLm5vZGVUeXBlPT09MSl7aWYoaC5oYXNBdHRyaWJ1dGVzKCkpe2xldCBmPWguYXR0cmlidXRlcyx7bGVuZ3RoOnB9PWYsZD0wO2ZvcihsZXQgZz0wO2c8cDtnKyspdmNlKGZbZ10ubmFtZSxkMykmJmQrKztmb3IoO2QtLSA+MDspe2xldCBnPWNbbF0sXz1ISC5leGVjKGcpWzJdLHk9Xy50b0xvd2VyQ2FzZSgpK2QzLHg9aC5nZXRBdHRyaWJ1dGUoeSk7aC5yZW1vdmVBdHRyaWJ1dGUoeSk7bGV0IGI9eC5zcGxpdCh5Y2UpO3RoaXMucGFydHMucHVzaCh7dHlwZToiYXR0cmlidXRlIixpbmRleDpzLG5hbWU6XyxzdHJpbmdzOmJ9KSxsKz1iLmxlbmd0aC0xfX1oLnRhZ05hbWU9PT0iVEVNUExBVEUiJiYoaS5wdXNoKGgpLG8uY3VycmVudE5vZGU9aC5jb250ZW50KX1lbHNlIGlmKGgubm9kZVR5cGU9PT0zKXtsZXQgZj1oLmRhdGE7aWYoZi5pbmRleE9mKFljKT49MCl7bGV0IHA9aC5wYXJlbnROb2RlLGQ9Zi5zcGxpdCh5Y2UpLGc9ZC5sZW5ndGgtMTtmb3IobGV0IF89MDtfPGc7XysrKXtsZXQgeSx4PWRbX107aWYoeD09PSIiKXk9amYoKTtlbHNle2xldCBiPUhILmV4ZWMoeCk7YiE9PW51bGwmJnZjZShiWzJdLGQzKSYmKHg9eC5zbGljZSgwLGIuaW5kZXgpK2JbMV0rYlsyXS5zbGljZSgwLC1kMy5sZW5ndGgpK2JbM10pLHk9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoeCl9cC5pbnNlcnRCZWZvcmUoeSxoKSx0aGlzLnBhcnRzLnB1c2goe3R5cGU6Im5vZGUiLGluZGV4Oisrc30pfWRbZ109PT0iIj8ocC5pbnNlcnRCZWZvcmUoamYoKSxoKSxuLnB1c2goaCkpOmguZGF0YT1kW2ddLGwrPWd9fWVsc2UgaWYoaC5ub2RlVHlwZT09PTgpaWYoaC5kYXRhPT09WWMpe2xldCBmPWgucGFyZW50Tm9kZTsoaC5wcmV2aW91c1NpYmxpbmc9PT1udWxsfHxzPT09YSkmJihzKyssZi5pbnNlcnRCZWZvcmUoamYoKSxoKSksYT1zLHRoaXMucGFydHMucHVzaCh7dHlwZToibm9kZSIsaW5kZXg6c30pLGgubmV4dFNpYmxpbmc9PT1udWxsP2guZGF0YT0iIjoobi5wdXNoKGgpLHMtLSksbCsrfWVsc2V7bGV0IGY9LTE7Zm9yKDsoZj1oLmRhdGEuaW5kZXhPZihZYyxmKzEpKSE9PS0xOyl0aGlzLnBhcnRzLnB1c2goe3R5cGU6Im5vZGUiLGluZGV4Oi0xfSksbCsrfX1mb3IobGV0IGggb2YgbiloLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaCl9fSx2Y2U9KGUsdCk9PntsZXQgcj1lLmxlbmd0aC10Lmxlbmd0aDtyZXR1cm4gcj49MCYmZS5zbGljZShyKT09PXR9LHZQPWU9PmUuaW5kZXghPT0tMSxqZj0oKT0+ZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgiIiksSEg9LyhbIFx4MDlceDBhXHgwY1x4MGRdKShbXlwwLVx4MUZceDdGLVx4OUYgIic+PS9dKykoWyBceDA5XHgwYVx4MGNceDBkXSo9WyBceDA5XHgwYVx4MGNceDBkXSooPzpbXiBceDA5XHgwYVx4MGNceDBkIidgPD49XSp8IlteIl0qfCdbXiddKikpJC87dmFyIF9jdD0xMzM7ZnVuY3Rpb24geWN0KGUsdCl7bGV0e2VsZW1lbnQ6e2NvbnRlbnQ6cn0scGFydHM6bn09ZSxpPWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIocixfY3QsbnVsbCwhMSksbz14UChuKSxhPW5bb10scz0tMSxsPTAsYz1bXSx1PW51bGw7Zm9yKDtpLm5leHROb2RlKCk7KXtzKys7bGV0IGg9aS5jdXJyZW50Tm9kZTtmb3IoaC5wcmV2aW91c1NpYmxpbmc9PT11JiYodT1udWxsKSx0LmhhcyhoKSYmKGMucHVzaChoKSx1PT09bnVsbCYmKHU9aCkpLHUhPT1udWxsJiZsKys7YSE9PXZvaWQgMCYmYS5pbmRleD09PXM7KWEuaW5kZXg9dSE9PW51bGw/LTE6YS5pbmRleC1sLG89eFAobixvKSxhPW5bb119Yy5mb3JFYWNoKGg9PmgucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChoKSl9dmFyIEx1cj1lPT57bGV0IHQ9ZS5ub2RlVHlwZT09PTExPzA6MSxyPWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoZSxfY3QsbnVsbCwhMSk7Zm9yKDtyLm5leHROb2RlKCk7KXQrKztyZXR1cm4gdH0seFA9KGUsdD0tMSk9Pntmb3IobGV0IHI9dCsxO3I8ZS5sZW5ndGg7cisrKXtsZXQgbj1lW3JdO2lmKHZQKG4pKXJldHVybiByfXJldHVybi0xfTtmdW5jdGlvbiB4Y2UoZSx0LHI9bnVsbCl7bGV0e2VsZW1lbnQ6e2NvbnRlbnQ6bn0scGFydHM6aX09ZTtpZihyPT1udWxsKXtuLmFwcGVuZENoaWxkKHQpO3JldHVybn1sZXQgbz1kb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKG4sX2N0LG51bGwsITEpLGE9eFAoaSkscz0wLGw9LTE7Zm9yKDtvLm5leHROb2RlKCk7KWZvcihsKyssby5jdXJyZW50Tm9kZT09PXImJihzPUx1cih0KSxyLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHQscikpO2EhPT0tMSYmaVthXS5pbmRleD09PWw7KXtpZihzPjApe2Zvcig7YSE9PS0xOylpW2FdLmluZGV4Kz1zLGE9eFAoaSxhKTtyZXR1cm59YT14UChpLGEpfX12YXIga3VyPW5ldyBXZWFrTWFwO3ZhciBzMT1lPT50eXBlb2YgZT09ImZ1bmN0aW9uIiYma3VyLmhhcyhlKTt2YXIga2w9e30sVkg9e307dmFyIFMwPWNsYXNze2NvbnN0cnVjdG9yKHQscixuKXt0aGlzLl9fcGFydHM9W10sdGhpcy50ZW1wbGF0ZT10LHRoaXMucHJvY2Vzc29yPXIsdGhpcy5vcHRpb25zPW59dXBkYXRlKHQpe2xldCByPTA7Zm9yKGxldCBuIG9mIHRoaXMuX19wYXJ0cyluIT09dm9pZCAwJiZuLnNldFZhbHVlKHRbcl0pLHIrKztmb3IobGV0IG4gb2YgdGhpcy5fX3BhcnRzKW4hPT12b2lkIDAmJm4uY29tbWl0KCl9X2Nsb25lKCl7bGV0IHQ9bWN0P3RoaXMudGVtcGxhdGUuZWxlbWVudC5jb250ZW50LmNsb25lTm9kZSghMCk6ZG9jdW1lbnQuaW1wb3J0Tm9kZSh0aGlzLnRlbXBsYXRlLmVsZW1lbnQuY29udGVudCwhMCkscj1bXSxuPXRoaXMudGVtcGxhdGUucGFydHMsaT1kb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKHQsMTMzLG51bGwsITEpLG89MCxhPTAscyxsPWkubmV4dE5vZGUoKTtmb3IoO288bi5sZW5ndGg7KXtpZihzPW5bb10sIXZQKHMpKXt0aGlzLl9fcGFydHMucHVzaCh2b2lkIDApLG8rKztjb250aW51ZX1mb3IoO2E8cy5pbmRleDspYSsrLGwubm9kZU5hbWU9PT0iVEVNUExBVEUiJiYoci5wdXNoKGwpLGkuY3VycmVudE5vZGU9bC5jb250ZW50KSwobD1pLm5leHROb2RlKCkpPT09bnVsbCYmKGkuY3VycmVudE5vZGU9ci5wb3AoKSxsPWkubmV4dE5vZGUoKSk7aWYocy50eXBlPT09Im5vZGUiKXtsZXQgYz10aGlzLnByb2Nlc3Nvci5oYW5kbGVUZXh0RXhwcmVzc2lvbih0aGlzLm9wdGlvbnMpO2MuaW5zZXJ0QWZ0ZXJOb2RlKGwucHJldmlvdXNTaWJsaW5nKSx0aGlzLl9fcGFydHMucHVzaChjKX1lbHNlIHRoaXMuX19wYXJ0cy5wdXNoKC4uLnRoaXMucHJvY2Vzc29yLmhhbmRsZUF0dHJpYnV0ZUV4cHJlc3Npb25zKGwscy5uYW1lLHMuc3RyaW5ncyx0aGlzLm9wdGlvbnMpKTtvKyt9cmV0dXJuIG1jdCYmKGRvY3VtZW50LmFkb3B0Tm9kZSh0KSxjdXN0b21FbGVtZW50cy51cGdyYWRlKHQpKSx0fX07dmFyIGJjZT13aW5kb3cudHJ1c3RlZFR5cGVzJiZ0cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KCJsaXQtaHRtbCIse2NyZWF0ZUhUTUw6ZT0+ZX0pLE51cj1gICR7WWN9IGAsTTA9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4saSl7dGhpcy5zdHJpbmdzPXQsdGhpcy52YWx1ZXM9cix0aGlzLnR5cGU9bix0aGlzLnByb2Nlc3Nvcj1pfWdldEhUTUwoKXtsZXQgdD10aGlzLnN0cmluZ3MubGVuZ3RoLTEscj0iIixuPSExO2ZvcihsZXQgaT0wO2k8dDtpKyspe2xldCBvPXRoaXMuc3RyaW5nc1tpXSxhPW8ubGFzdEluZGV4T2YoIjwhLS0iKTtuPShhPi0xfHxuKSYmby5pbmRleE9mKCItLT4iLGErMSk9PT0tMTtsZXQgcz1ISC5leGVjKG8pO3M9PT1udWxsP3IrPW8rKG4/TnVyOmdjdCk6cis9by5zdWJzdHIoMCxzLmluZGV4KStzWzFdK3NbMl0rZDMrc1szXStZY31yZXR1cm4gcis9dGhpcy5zdHJpbmdzW3RdLHJ9Z2V0VGVtcGxhdGVFbGVtZW50KCl7bGV0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKSxyPXRoaXMuZ2V0SFRNTCgpO3JldHVybiBiY2UhPT12b2lkIDAmJihyPWJjZS5jcmVhdGVIVE1MKHIpKSx0LmlubmVySFRNTD1yLHR9fTt2YXIgR0g9ZT0+ZT09PW51bGx8fCEodHlwZW9mIGU9PSJvYmplY3QifHx0eXBlb2YgZT09ImZ1bmN0aW9uIiksVUg9ZT0+QXJyYXkuaXNBcnJheShlKXx8ISEoZSYmZVtTeW1ib2wuaXRlcmF0b3JdKSxtMz1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbil7dGhpcy5kaXJ0eT0hMCx0aGlzLmVsZW1lbnQ9dCx0aGlzLm5hbWU9cix0aGlzLnN0cmluZ3M9bix0aGlzLnBhcnRzPVtdO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGgtMTtpKyspdGhpcy5wYXJ0c1tpXT10aGlzLl9jcmVhdGVQYXJ0KCl9X2NyZWF0ZVBhcnQoKXtyZXR1cm4gbmV3IGJQKHRoaXMpfV9nZXRWYWx1ZSgpe2xldCB0PXRoaXMuc3RyaW5ncyxyPXQubGVuZ3RoLTEsbj10aGlzLnBhcnRzO2lmKHI9PT0xJiZ0WzBdPT09IiImJnRbMV09PT0iIil7bGV0IG89blswXS52YWx1ZTtpZih0eXBlb2Ygbz09InN5bWJvbCIpcmV0dXJuIFN0cmluZyhvKTtpZih0eXBlb2Ygbz09InN0cmluZyJ8fCFVSChvKSlyZXR1cm4gb31sZXQgaT0iIjtmb3IobGV0IG89MDtvPHI7bysrKXtpKz10W29dO2xldCBhPW5bb107aWYoYSE9PXZvaWQgMCl7bGV0IHM9YS52YWx1ZTtpZihHSChzKXx8IVVIKHMpKWkrPXR5cGVvZiBzPT0ic3RyaW5nIj9zOlN0cmluZyhzKTtlbHNlIGZvcihsZXQgbCBvZiBzKWkrPXR5cGVvZiBsPT0ic3RyaW5nIj9sOlN0cmluZyhsKX19cmV0dXJuIGkrPXRbcl0saX1jb21taXQoKXt0aGlzLmRpcnR5JiYodGhpcy5kaXJ0eT0hMSx0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKHRoaXMubmFtZSx0aGlzLl9nZXRWYWx1ZSgpKSl9fSxiUD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnZhbHVlPXZvaWQgMCx0aGlzLmNvbW1pdHRlcj10fXNldFZhbHVlKHQpe3QhPT1rbCYmKCFHSCh0KXx8dCE9PXRoaXMudmFsdWUpJiYodGhpcy52YWx1ZT10LHMxKHQpfHwodGhpcy5jb21taXR0ZXIuZGlydHk9ITApKX1jb21taXQoKXtmb3IoO3MxKHRoaXMudmFsdWUpOyl7bGV0IHQ9dGhpcy52YWx1ZTt0aGlzLnZhbHVlPWtsLHQodGhpcyl9dGhpcy52YWx1ZSE9PWtsJiZ0aGlzLmNvbW1pdHRlci5jb21taXQoKX19LEhkPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMudmFsdWU9dm9pZCAwLHRoaXMuX19wZW5kaW5nVmFsdWU9dm9pZCAwLHRoaXMub3B0aW9ucz10fWFwcGVuZEludG8odCl7dGhpcy5zdGFydE5vZGU9dC5hcHBlbmRDaGlsZChqZigpKSx0aGlzLmVuZE5vZGU9dC5hcHBlbmRDaGlsZChqZigpKX1pbnNlcnRBZnRlck5vZGUodCl7dGhpcy5zdGFydE5vZGU9dCx0aGlzLmVuZE5vZGU9dC5uZXh0U2libGluZ31hcHBlbmRJbnRvUGFydCh0KXt0Ll9faW5zZXJ0KHRoaXMuc3RhcnROb2RlPWpmKCkpLHQuX19pbnNlcnQodGhpcy5lbmROb2RlPWpmKCkpfWluc2VydEFmdGVyUGFydCh0KXt0Ll9faW5zZXJ0KHRoaXMuc3RhcnROb2RlPWpmKCkpLHRoaXMuZW5kTm9kZT10LmVuZE5vZGUsdC5lbmROb2RlPXRoaXMuc3RhcnROb2RlfXNldFZhbHVlKHQpe3RoaXMuX19wZW5kaW5nVmFsdWU9dH1jb21taXQoKXtpZih0aGlzLnN0YXJ0Tm9kZS5wYXJlbnROb2RlPT09bnVsbClyZXR1cm47Zm9yKDtzMSh0aGlzLl9fcGVuZGluZ1ZhbHVlKTspe2xldCByPXRoaXMuX19wZW5kaW5nVmFsdWU7dGhpcy5fX3BlbmRpbmdWYWx1ZT1rbCxyKHRoaXMpfWxldCB0PXRoaXMuX19wZW5kaW5nVmFsdWU7dCE9PWtsJiYoR0godCk/dCE9PXRoaXMudmFsdWUmJnRoaXMuX19jb21taXRUZXh0KHQpOnQgaW5zdGFuY2VvZiBNMD90aGlzLl9fY29tbWl0VGVtcGxhdGVSZXN1bHQodCk6dCBpbnN0YW5jZW9mIE5vZGU/dGhpcy5fX2NvbW1pdE5vZGUodCk6VUgodCk/dGhpcy5fX2NvbW1pdEl0ZXJhYmxlKHQpOnQ9PT1WSD8odGhpcy52YWx1ZT1WSCx0aGlzLmNsZWFyKCkpOnRoaXMuX19jb21taXRUZXh0KHQpKX1fX2luc2VydCh0KXt0aGlzLmVuZE5vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodCx0aGlzLmVuZE5vZGUpfV9fY29tbWl0Tm9kZSh0KXt0aGlzLnZhbHVlIT09dCYmKHRoaXMuY2xlYXIoKSx0aGlzLl9faW5zZXJ0KHQpLHRoaXMudmFsdWU9dCl9X19jb21taXRUZXh0KHQpe2xldCByPXRoaXMuc3RhcnROb2RlLm5leHRTaWJsaW5nO3Q9dD09bnVsbD8iIjp0O2xldCBuPXR5cGVvZiB0PT0ic3RyaW5nIj90OlN0cmluZyh0KTtyPT09dGhpcy5lbmROb2RlLnByZXZpb3VzU2libGluZyYmci5ub2RlVHlwZT09PTM/ci5kYXRhPW46dGhpcy5fX2NvbW1pdE5vZGUoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobikpLHRoaXMudmFsdWU9dH1fX2NvbW1pdFRlbXBsYXRlUmVzdWx0KHQpe2xldCByPXRoaXMub3B0aW9ucy50ZW1wbGF0ZUZhY3RvcnkodCk7aWYodGhpcy52YWx1ZSBpbnN0YW5jZW9mIFMwJiZ0aGlzLnZhbHVlLnRlbXBsYXRlPT09cil0aGlzLnZhbHVlLnVwZGF0ZSh0LnZhbHVlcyk7ZWxzZXtsZXQgbj1uZXcgUzAocix0LnByb2Nlc3Nvcix0aGlzLm9wdGlvbnMpLGk9bi5fY2xvbmUoKTtuLnVwZGF0ZSh0LnZhbHVlcyksdGhpcy5fX2NvbW1pdE5vZGUoaSksdGhpcy52YWx1ZT1ufX1fX2NvbW1pdEl0ZXJhYmxlKHQpe0FycmF5LmlzQXJyYXkodGhpcy52YWx1ZSl8fCh0aGlzLnZhbHVlPVtdLHRoaXMuY2xlYXIoKSk7bGV0IHI9dGhpcy52YWx1ZSxuPTAsaTtmb3IobGV0IG8gb2YgdClpPXJbbl0saT09PXZvaWQgMCYmKGk9bmV3IEhkKHRoaXMub3B0aW9ucyksci5wdXNoKGkpLG49PT0wP2kuYXBwZW5kSW50b1BhcnQodGhpcyk6aS5pbnNlcnRBZnRlclBhcnQocltuLTFdKSksaS5zZXRWYWx1ZShvKSxpLmNvbW1pdCgpLG4rKztuPHIubGVuZ3RoJiYoci5sZW5ndGg9bix0aGlzLmNsZWFyKGkmJmkuZW5kTm9kZSkpfWNsZWFyKHQ9dGhpcy5zdGFydE5vZGUpe28xKHRoaXMuc3RhcnROb2RlLnBhcmVudE5vZGUsdC5uZXh0U2libGluZyx0aGlzLmVuZE5vZGUpfX0sd1A9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe2lmKHRoaXMudmFsdWU9dm9pZCAwLHRoaXMuX19wZW5kaW5nVmFsdWU9dm9pZCAwLG4ubGVuZ3RoIT09Mnx8blswXSE9PSIifHxuWzFdIT09IiIpdGhyb3cgbmV3IEVycm9yKCJCb29sZWFuIGF0dHJpYnV0ZXMgY2FuIG9ubHkgY29udGFpbiBhIHNpbmdsZSBleHByZXNzaW9uIik7dGhpcy5lbGVtZW50PXQsdGhpcy5uYW1lPXIsdGhpcy5zdHJpbmdzPW59c2V0VmFsdWUodCl7dGhpcy5fX3BlbmRpbmdWYWx1ZT10fWNvbW1pdCgpe2Zvcig7czEodGhpcy5fX3BlbmRpbmdWYWx1ZSk7KXtsZXQgcj10aGlzLl9fcGVuZGluZ1ZhbHVlO3RoaXMuX19wZW5kaW5nVmFsdWU9a2wscih0aGlzKX1pZih0aGlzLl9fcGVuZGluZ1ZhbHVlPT09a2wpcmV0dXJuO2xldCB0PSEhdGhpcy5fX3BlbmRpbmdWYWx1ZTt0aGlzLnZhbHVlIT09dCYmKHQ/dGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSh0aGlzLm5hbWUsIiIpOnRoaXMuZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUodGhpcy5uYW1lKSx0aGlzLnZhbHVlPXQpLHRoaXMuX19wZW5kaW5nVmFsdWU9a2x9fSxTUD1jbGFzcyBleHRlbmRzIG0ze2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcih0LHIsbiksdGhpcy5zaW5nbGU9bi5sZW5ndGg9PT0yJiZuWzBdPT09IiImJm5bMV09PT0iIn1fY3JlYXRlUGFydCgpe3JldHVybiBuZXcgcUgodGhpcyl9X2dldFZhbHVlKCl7cmV0dXJuIHRoaXMuc2luZ2xlP3RoaXMucGFydHNbMF0udmFsdWU6c3VwZXIuX2dldFZhbHVlKCl9Y29tbWl0KCl7dGhpcy5kaXJ0eSYmKHRoaXMuZGlydHk9ITEsdGhpcy5lbGVtZW50W3RoaXMubmFtZV09dGhpcy5fZ2V0VmFsdWUoKSl9fSxxSD1jbGFzcyBleHRlbmRzIGJQe30sd2NlPSExOygoKT0+e3RyeXtsZXQgZT17Z2V0IGNhcHR1cmUoKXtyZXR1cm4gd2NlPSEwLCExfX07d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLGUsZSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRlc3QiLGUsZSl9Y2F0Y2goZSl7fX0pKCk7dmFyIE1QPWNsYXNze2NvbnN0cnVjdG9yKHQscixuKXt0aGlzLnZhbHVlPXZvaWQgMCx0aGlzLl9fcGVuZGluZ1ZhbHVlPXZvaWQgMCx0aGlzLmVsZW1lbnQ9dCx0aGlzLmV2ZW50TmFtZT1yLHRoaXMuZXZlbnRDb250ZXh0PW4sdGhpcy5fX2JvdW5kSGFuZGxlRXZlbnQ9aT0+dGhpcy5oYW5kbGVFdmVudChpKX1zZXRWYWx1ZSh0KXt0aGlzLl9fcGVuZGluZ1ZhbHVlPXR9Y29tbWl0KCl7Zm9yKDtzMSh0aGlzLl9fcGVuZGluZ1ZhbHVlKTspe2xldCBvPXRoaXMuX19wZW5kaW5nVmFsdWU7dGhpcy5fX3BlbmRpbmdWYWx1ZT1rbCxvKHRoaXMpfWlmKHRoaXMuX19wZW5kaW5nVmFsdWU9PT1rbClyZXR1cm47bGV0IHQ9dGhpcy5fX3BlbmRpbmdWYWx1ZSxyPXRoaXMudmFsdWUsbj10PT1udWxsfHxyIT1udWxsJiYodC5jYXB0dXJlIT09ci5jYXB0dXJlfHx0Lm9uY2UhPT1yLm9uY2V8fHQucGFzc2l2ZSE9PXIucGFzc2l2ZSksaT10IT1udWxsJiYocj09bnVsbHx8bik7biYmdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy5ldmVudE5hbWUsdGhpcy5fX2JvdW5kSGFuZGxlRXZlbnQsdGhpcy5fX29wdGlvbnMpLGkmJih0aGlzLl9fb3B0aW9ucz1EdXIodCksdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodGhpcy5ldmVudE5hbWUsdGhpcy5fX2JvdW5kSGFuZGxlRXZlbnQsdGhpcy5fX29wdGlvbnMpKSx0aGlzLnZhbHVlPXQsdGhpcy5fX3BlbmRpbmdWYWx1ZT1rbH1oYW5kbGVFdmVudCh0KXt0eXBlb2YgdGhpcy52YWx1ZT09ImZ1bmN0aW9uIj90aGlzLnZhbHVlLmNhbGwodGhpcy5ldmVudENvbnRleHR8fHRoaXMuZWxlbWVudCx0KTp0aGlzLnZhbHVlLmhhbmRsZUV2ZW50KHQpfX0sRHVyPWU9PmUmJih3Y2U/e2NhcHR1cmU6ZS5jYXB0dXJlLHBhc3NpdmU6ZS5wYXNzaXZlLG9uY2U6ZS5vbmNlfTplLmNhcHR1cmUpO2Z1bmN0aW9uIHZjdChlKXtsZXQgdD1sMS5nZXQoZS50eXBlKTt0PT09dm9pZCAwJiYodD17c3RyaW5nc0FycmF5Om5ldyBXZWFrTWFwLGtleVN0cmluZzpuZXcgTWFwfSxsMS5zZXQoZS50eXBlLHQpKTtsZXQgcj10LnN0cmluZ3NBcnJheS5nZXQoZS5zdHJpbmdzKTtpZihyIT09dm9pZCAwKXJldHVybiByO2xldCBuPWUuc3RyaW5ncy5qb2luKFljKTtyZXR1cm4gcj10LmtleVN0cmluZy5nZXQobikscj09PXZvaWQgMCYmKHI9bmV3IGExKGUsZS5nZXRUZW1wbGF0ZUVsZW1lbnQoKSksdC5rZXlTdHJpbmcuc2V0KG4scikpLHQuc3RyaW5nc0FycmF5LnNldChlLnN0cmluZ3Mscikscn12YXIgbDE9bmV3IE1hcDt2YXIgRTA9bmV3IFdlYWtNYXAseGN0PShlLHQscik9PntsZXQgbj1FMC5nZXQodCk7bj09PXZvaWQgMCYmKG8xKHQsdC5maXJzdENoaWxkKSxFMC5zZXQodCxuPW5ldyBIZChPYmplY3QuYXNzaWduKHt0ZW1wbGF0ZUZhY3Rvcnk6dmN0fSxyKSkpLG4uYXBwZW5kSW50byh0KSksbi5zZXRWYWx1ZShlKSxuLmNvbW1pdCgpfTt2YXIgV0g9Y2xhc3N7aGFuZGxlQXR0cmlidXRlRXhwcmVzc2lvbnModCxyLG4saSl7bGV0IG89clswXTtyZXR1cm4gbz09PSIuIj9uZXcgU1AodCxyLnNsaWNlKDEpLG4pLnBhcnRzOm89PT0iQCI/W25ldyBNUCh0LHIuc2xpY2UoMSksaS5ldmVudENvbnRleHQpXTpvPT09Ij8iP1tuZXcgd1AodCxyLnNsaWNlKDEpLG4pXTpuZXcgbTModCxyLG4pLnBhcnRzfWhhbmRsZVRleHRFeHByZXNzaW9uKHQpe3JldHVybiBuZXcgSGQodCl9fSxTY2U9bmV3IFdIO3R5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiJiYod2luZG93LmxpdEh0bWxWZXJzaW9uc3x8KHdpbmRvdy5saXRIdG1sVmVyc2lvbnM9W10pKS5wdXNoKCIxLjQuMSIpO3ZhciBFY2U9KGUsdCk9PmAke2V9LS0ke3R9YCxZSD0hMDt0eXBlb2Ygd2luZG93LlNoYWR5Q1NTPT0idW5kZWZpbmVkIj9ZSD0hMTp0eXBlb2Ygd2luZG93LlNoYWR5Q1NTLnByZXBhcmVUZW1wbGF0ZURvbT09InVuZGVmaW5lZCImJihjb25zb2xlLndhcm4oIkluY29tcGF0aWJsZSBTaGFkeUNTUyB2ZXJzaW9uIGRldGVjdGVkLiBQbGVhc2UgdXBkYXRlIHRvIGF0IGxlYXN0IEB3ZWJjb21wb25lbnRzL3dlYmNvbXBvbmVudHNqc0AyLjAuMiBhbmQgQHdlYmNvbXBvbmVudHMvc2hhZHljc3NAMS4zLjEuIiksWUg9ITEpO3ZhciBGdXI9ZT0+dD0+e2xldCByPUVjZSh0LnR5cGUsZSksbj1sMS5nZXQocik7bj09PXZvaWQgMCYmKG49e3N0cmluZ3NBcnJheTpuZXcgV2Vha01hcCxrZXlTdHJpbmc6bmV3IE1hcH0sbDEuc2V0KHIsbikpO2xldCBpPW4uc3RyaW5nc0FycmF5LmdldCh0LnN0cmluZ3MpO2lmKGkhPT12b2lkIDApcmV0dXJuIGk7bGV0IG89dC5zdHJpbmdzLmpvaW4oWWMpO2lmKGk9bi5rZXlTdHJpbmcuZ2V0KG8pLGk9PT12b2lkIDApe2xldCBhPXQuZ2V0VGVtcGxhdGVFbGVtZW50KCk7WUgmJndpbmRvdy5TaGFkeUNTUy5wcmVwYXJlVGVtcGxhdGVEb20oYSxlKSxpPW5ldyBhMSh0LGEpLG4ua2V5U3RyaW5nLnNldChvLGkpfXJldHVybiBuLnN0cmluZ3NBcnJheS5zZXQodC5zdHJpbmdzLGkpLGl9LEJ1cj1bImh0bWwiLCJzdmciXSxIdXI9ZT0+e0J1ci5mb3JFYWNoKHQ9PntsZXQgcj1sMS5nZXQoRWNlKHQsZSkpO3IhPT12b2lkIDAmJnIua2V5U3RyaW5nLmZvckVhY2gobj0+e2xldHtlbGVtZW50Ontjb250ZW50Oml9fT1uLG89bmV3IFNldDtBcnJheS5mcm9tKGkucXVlcnlTZWxlY3RvckFsbCgic3R5bGUiKSkuZm9yRWFjaChhPT57by5hZGQoYSl9KSx5Y3QobixvKX0pfSl9LFRjZT1uZXcgU2V0LFZ1cj0oZSx0LHIpPT57VGNlLmFkZChlKTtsZXQgbj1yP3IuZWxlbWVudDpkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpLGk9dC5xdWVyeVNlbGVjdG9yQWxsKCJzdHlsZSIpLHtsZW5ndGg6b309aTtpZihvPT09MCl7d2luZG93LlNoYWR5Q1NTLnByZXBhcmVUZW1wbGF0ZVN0eWxlcyhuLGUpO3JldHVybn1sZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2ZvcihsZXQgYz0wO2M8bztjKyspe2xldCB1PWlbY107dS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHUpLGEudGV4dENvbnRlbnQrPXUudGV4dENvbnRlbnR9SHVyKGUpO2xldCBzPW4uY29udGVudDtyP3hjZShyLGEscy5maXJzdENoaWxkKTpzLmluc2VydEJlZm9yZShhLHMuZmlyc3RDaGlsZCksd2luZG93LlNoYWR5Q1NTLnByZXBhcmVUZW1wbGF0ZVN0eWxlcyhuLGUpO2xldCBsPXMucXVlcnlTZWxlY3Rvcigic3R5bGUiKTtpZih3aW5kb3cuU2hhZHlDU1MubmF0aXZlU2hhZG93JiZsIT09bnVsbCl0Lmluc2VydEJlZm9yZShsLmNsb25lTm9kZSghMCksdC5maXJzdENoaWxkKTtlbHNlIGlmKHIpe3MuaW5zZXJ0QmVmb3JlKGEscy5maXJzdENoaWxkKTtsZXQgYz1uZXcgU2V0O2MuYWRkKGEpLHljdChyLGMpfX0sQ2NlPShlLHQscik9PntpZighcnx8dHlwZW9mIHIhPSJvYmplY3QifHwhci5zY29wZU5hbWUpdGhyb3cgbmV3IEVycm9yKCJUaGUgYHNjb3BlTmFtZWAgb3B0aW9uIGlzIHJlcXVpcmVkLiIpO2xldCBuPXIuc2NvcGVOYW1lLGk9RTAuaGFzKHQpLG89WUgmJnQubm9kZVR5cGU9PT0xMSYmISF0Lmhvc3QsYT1vJiYhVGNlLmhhcyhuKSxzPWE/ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOnQ7aWYoeGN0KGUscyxPYmplY3QuYXNzaWduKHt0ZW1wbGF0ZUZhY3Rvcnk6RnVyKG4pfSxyKSksYSl7bGV0IGw9RTAuZ2V0KHMpO0UwLmRlbGV0ZShzKTtsZXQgYz1sLnZhbHVlIGluc3RhbmNlb2YgUzA/bC52YWx1ZS50ZW1wbGF0ZTp2b2lkIDA7VnVyKG4scyxjKSxvMSh0LHQuZmlyc3RDaGlsZCksdC5hcHBlbmRDaGlsZChzKSxFMC5zZXQodCxsKX0haSYmbyYmd2luZG93LlNoYWR5Q1NTLnN0eWxlRWxlbWVudCh0Lmhvc3QpfTt2YXIgQWNlO3dpbmRvdy5KU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5PShlLHQpPT5lO3ZhciBUY3Q9e3RvQXR0cmlidXRlKGUsdCl7c3dpdGNoKHQpe2Nhc2UgQm9vbGVhbjpyZXR1cm4gZT8iIjpudWxsO2Nhc2UgT2JqZWN0OmNhc2UgQXJyYXk6cmV0dXJuIGU9PW51bGw/ZTpKU09OLnN0cmluZ2lmeShlKX1yZXR1cm4gZX0sZnJvbUF0dHJpYnV0ZShlLHQpe3N3aXRjaCh0KXtjYXNlIEJvb2xlYW46cmV0dXJuIGUhPT1udWxsO2Nhc2UgTnVtYmVyOnJldHVybiBlPT09bnVsbD9udWxsOk51bWJlcihlKTtjYXNlIE9iamVjdDpjYXNlIEFycmF5OnJldHVybiBKU09OLnBhcnNlKGUpfXJldHVybiBlfX0sUGNlPShlLHQpPT50IT09ZSYmKHQ9PT10fHxlPT09ZSksYmN0PXthdHRyaWJ1dGU6ITAsdHlwZTpTdHJpbmcsY29udmVydGVyOlRjdCxyZWZsZWN0OiExLGhhc0NoYW5nZWQ6UGNlfSx3Y3Q9MSxTY3Q9MTw8MixNY3Q9MTw8MyxFY3Q9MTw8NCxDY3Q9ImZpbmFsaXplZCIsZzM9Y2xhc3MgZXh0ZW5kcyBIVE1MRWxlbWVudHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5pbml0aWFsaXplKCl9c3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKXt0aGlzLmZpbmFsaXplKCk7bGV0IHQ9W107cmV0dXJuIHRoaXMuX2NsYXNzUHJvcGVydGllcy5mb3JFYWNoKChyLG4pPT57bGV0IGk9dGhpcy5fYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KG4scik7aSE9PXZvaWQgMCYmKHRoaXMuX2F0dHJpYnV0ZVRvUHJvcGVydHlNYXAuc2V0KGksbiksdC5wdXNoKGkpKX0pLHR9c3RhdGljIF9lbnN1cmVDbGFzc1Byb3BlcnRpZXMoKXtpZighdGhpcy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfY2xhc3NQcm9wZXJ0aWVzIix0aGlzKSkpe3RoaXMuX2NsYXNzUHJvcGVydGllcz1uZXcgTWFwO2xldCB0PU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5fY2xhc3NQcm9wZXJ0aWVzO3QhPT12b2lkIDAmJnQuZm9yRWFjaCgocixuKT0+dGhpcy5fY2xhc3NQcm9wZXJ0aWVzLnNldChuLHIpKX19c3RhdGljIGNyZWF0ZVByb3BlcnR5KHQscj1iY3Qpe2lmKHRoaXMuX2Vuc3VyZUNsYXNzUHJvcGVydGllcygpLHRoaXMuX2NsYXNzUHJvcGVydGllcy5zZXQodCxyKSxyLm5vQWNjZXNzb3J8fHRoaXMucHJvdG90eXBlLmhhc093blByb3BlcnR5KHQpKXJldHVybjtsZXQgbj10eXBlb2YgdD09InN5bWJvbCI/U3ltYm9sKCk6YF9fJHt0fWAsaT10aGlzLmdldFByb3BlcnR5RGVzY3JpcHRvcih0LG4scik7aSE9PXZvaWQgMCYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMucHJvdG90eXBlLHQsaSl9c3RhdGljIGdldFByb3BlcnR5RGVzY3JpcHRvcih0LHIsbil7cmV0dXJue2dldCgpe3JldHVybiB0aGlzW3JdfSxzZXQoaSl7bGV0IG89dGhpc1t0XTt0aGlzW3JdPWksdGhpcy5yZXF1ZXN0VXBkYXRlSW50ZXJuYWwodCxvLG4pfSxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMH19c3RhdGljIGdldFByb3BlcnR5T3B0aW9ucyh0KXtyZXR1cm4gdGhpcy5fY2xhc3NQcm9wZXJ0aWVzJiZ0aGlzLl9jbGFzc1Byb3BlcnRpZXMuZ2V0KHQpfHxiY3R9c3RhdGljIGZpbmFsaXplKCl7bGV0IHQ9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpO2lmKHQuaGFzT3duUHJvcGVydHkoQ2N0KXx8dC5maW5hbGl6ZSgpLHRoaXNbQ2N0XT0hMCx0aGlzLl9lbnN1cmVDbGFzc1Byb3BlcnRpZXMoKSx0aGlzLl9hdHRyaWJ1dGVUb1Byb3BlcnR5TWFwPW5ldyBNYXAsdGhpcy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJwcm9wZXJ0aWVzIix0aGlzKSkpe2xldCByPXRoaXMucHJvcGVydGllcyxuPVsuLi5PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhyKSwuLi50eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz09ImZ1bmN0aW9uIj9PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHIpOltdXTtmb3IobGV0IGkgb2Ygbil0aGlzLmNyZWF0ZVByb3BlcnR5KGkscltpXSl9fXN0YXRpYyBfYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KHQscil7bGV0IG49ci5hdHRyaWJ1dGU7cmV0dXJuIG49PT0hMT92b2lkIDA6dHlwZW9mIG49PSJzdHJpbmciP246dHlwZW9mIHQ9PSJzdHJpbmciP3QudG9Mb3dlckNhc2UoKTp2b2lkIDB9c3RhdGljIF92YWx1ZUhhc0NoYW5nZWQodCxyLG49UGNlKXtyZXR1cm4gbih0LHIpfXN0YXRpYyBfcHJvcGVydHlWYWx1ZUZyb21BdHRyaWJ1dGUodCxyKXtsZXQgbj1yLnR5cGUsaT1yLmNvbnZlcnRlcnx8VGN0LG89dHlwZW9mIGk9PSJmdW5jdGlvbiI/aTppLmZyb21BdHRyaWJ1dGU7cmV0dXJuIG8/byh0LG4pOnR9c3RhdGljIF9wcm9wZXJ0eVZhbHVlVG9BdHRyaWJ1dGUodCxyKXtpZihyLnJlZmxlY3Q9PT12b2lkIDApcmV0dXJuO2xldCBuPXIudHlwZSxpPXIuY29udmVydGVyO3JldHVybihpJiZpLnRvQXR0cmlidXRlfHxUY3QudG9BdHRyaWJ1dGUpKHQsbil9aW5pdGlhbGl6ZSgpe3RoaXMuX3VwZGF0ZVN0YXRlPTAsdGhpcy5fdXBkYXRlUHJvbWlzZT1uZXcgUHJvbWlzZSh0PT50aGlzLl9lbmFibGVVcGRhdGluZ1Jlc29sdmVyPXQpLHRoaXMuX2NoYW5nZWRQcm9wZXJ0aWVzPW5ldyBNYXAsdGhpcy5fc2F2ZUluc3RhbmNlUHJvcGVydGllcygpLHRoaXMucmVxdWVzdFVwZGF0ZUludGVybmFsKCl9X3NhdmVJbnN0YW5jZVByb3BlcnRpZXMoKXt0aGlzLmNvbnN0cnVjdG9yLl9jbGFzc1Byb3BlcnRpZXMuZm9yRWFjaCgodCxyKT0+e2lmKHRoaXMuaGFzT3duUHJvcGVydHkocikpe2xldCBuPXRoaXNbcl07ZGVsZXRlIHRoaXNbcl0sdGhpcy5faW5zdGFuY2VQcm9wZXJ0aWVzfHwodGhpcy5faW5zdGFuY2VQcm9wZXJ0aWVzPW5ldyBNYXApLHRoaXMuX2luc3RhbmNlUHJvcGVydGllcy5zZXQocixuKX19KX1fYXBwbHlJbnN0YW5jZVByb3BlcnRpZXMoKXt0aGlzLl9pbnN0YW5jZVByb3BlcnRpZXMuZm9yRWFjaCgodCxyKT0+dGhpc1tyXT10KSx0aGlzLl9pbnN0YW5jZVByb3BlcnRpZXM9dm9pZCAwfWNvbm5lY3RlZENhbGxiYWNrKCl7dGhpcy5lbmFibGVVcGRhdGluZygpfWVuYWJsZVVwZGF0aW5nKCl7dGhpcy5fZW5hYmxlVXBkYXRpbmdSZXNvbHZlciE9PXZvaWQgMCYmKHRoaXMuX2VuYWJsZVVwZGF0aW5nUmVzb2x2ZXIoKSx0aGlzLl9lbmFibGVVcGRhdGluZ1Jlc29sdmVyPXZvaWQgMCl9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXt9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHQscixuKXtyIT09biYmdGhpcy5fYXR0cmlidXRlVG9Qcm9wZXJ0eSh0LG4pfV9wcm9wZXJ0eVRvQXR0cmlidXRlKHQscixuPWJjdCl7bGV0IGk9dGhpcy5jb25zdHJ1Y3RvcixvPWkuX2F0dHJpYnV0ZU5hbWVGb3JQcm9wZXJ0eSh0LG4pO2lmKG8hPT12b2lkIDApe2xldCBhPWkuX3Byb3BlcnR5VmFsdWVUb0F0dHJpYnV0ZShyLG4pO2lmKGE9PT12b2lkIDApcmV0dXJuO3RoaXMuX3VwZGF0ZVN0YXRlPXRoaXMuX3VwZGF0ZVN0YXRlfE1jdCxhPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKG8pOnRoaXMuc2V0QXR0cmlidXRlKG8sYSksdGhpcy5fdXBkYXRlU3RhdGU9dGhpcy5fdXBkYXRlU3RhdGUmfk1jdH19X2F0dHJpYnV0ZVRvUHJvcGVydHkodCxyKXtpZih0aGlzLl91cGRhdGVTdGF0ZSZNY3QpcmV0dXJuO2xldCBuPXRoaXMuY29uc3RydWN0b3IsaT1uLl9hdHRyaWJ1dGVUb1Byb3BlcnR5TWFwLmdldCh0KTtpZihpIT09dm9pZCAwKXtsZXQgbz1uLmdldFByb3BlcnR5T3B0aW9ucyhpKTt0aGlzLl91cGRhdGVTdGF0ZT10aGlzLl91cGRhdGVTdGF0ZXxFY3QsdGhpc1tpXT1uLl9wcm9wZXJ0eVZhbHVlRnJvbUF0dHJpYnV0ZShyLG8pLHRoaXMuX3VwZGF0ZVN0YXRlPXRoaXMuX3VwZGF0ZVN0YXRlJn5FY3R9fXJlcXVlc3RVcGRhdGVJbnRlcm5hbCh0LHIsbil7bGV0IGk9ITA7aWYodCE9PXZvaWQgMCl7bGV0IG89dGhpcy5jb25zdHJ1Y3RvcjtuPW58fG8uZ2V0UHJvcGVydHlPcHRpb25zKHQpLG8uX3ZhbHVlSGFzQ2hhbmdlZCh0aGlzW3RdLHIsbi5oYXNDaGFuZ2VkKT8odGhpcy5fY2hhbmdlZFByb3BlcnRpZXMuaGFzKHQpfHx0aGlzLl9jaGFuZ2VkUHJvcGVydGllcy5zZXQodCxyKSxuLnJlZmxlY3Q9PT0hMCYmISh0aGlzLl91cGRhdGVTdGF0ZSZFY3QpJiYodGhpcy5fcmVmbGVjdGluZ1Byb3BlcnRpZXM9PT12b2lkIDAmJih0aGlzLl9yZWZsZWN0aW5nUHJvcGVydGllcz1uZXcgTWFwKSx0aGlzLl9yZWZsZWN0aW5nUHJvcGVydGllcy5zZXQodCxuKSkpOmk9ITF9IXRoaXMuX2hhc1JlcXVlc3RlZFVwZGF0ZSYmaSYmKHRoaXMuX3VwZGF0ZVByb21pc2U9dGhpcy5fZW5xdWV1ZVVwZGF0ZSgpKX1yZXF1ZXN0VXBkYXRlKHQscil7cmV0dXJuIHRoaXMucmVxdWVzdFVwZGF0ZUludGVybmFsKHQsciksdGhpcy51cGRhdGVDb21wbGV0ZX1fZW5xdWV1ZVVwZGF0ZSgpe3JldHVybiBSaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7dGhpcy5fdXBkYXRlU3RhdGU9dGhpcy5fdXBkYXRlU3RhdGV8U2N0O3RyeXt5aWVsZCB0aGlzLl91cGRhdGVQcm9taXNlfWNhdGNoKHIpe31sZXQgdD10aGlzLnBlcmZvcm1VcGRhdGUoKTtyZXR1cm4gdCE9bnVsbCYmKHlpZWxkIHQpLCF0aGlzLl9oYXNSZXF1ZXN0ZWRVcGRhdGV9KX1nZXQgX2hhc1JlcXVlc3RlZFVwZGF0ZSgpe3JldHVybiB0aGlzLl91cGRhdGVTdGF0ZSZTY3R9Z2V0IGhhc1VwZGF0ZWQoKXtyZXR1cm4gdGhpcy5fdXBkYXRlU3RhdGUmd2N0fXBlcmZvcm1VcGRhdGUoKXtpZighdGhpcy5faGFzUmVxdWVzdGVkVXBkYXRlKXJldHVybjt0aGlzLl9pbnN0YW5jZVByb3BlcnRpZXMmJnRoaXMuX2FwcGx5SW5zdGFuY2VQcm9wZXJ0aWVzKCk7bGV0IHQ9ITEscj10aGlzLl9jaGFuZ2VkUHJvcGVydGllczt0cnl7dD10aGlzLnNob3VsZFVwZGF0ZShyKSx0P3RoaXMudXBkYXRlKHIpOnRoaXMuX21hcmtVcGRhdGVkKCl9Y2F0Y2gobil7dGhyb3cgdD0hMSx0aGlzLl9tYXJrVXBkYXRlZCgpLG59dCYmKHRoaXMuX3VwZGF0ZVN0YXRlJndjdHx8KHRoaXMuX3VwZGF0ZVN0YXRlPXRoaXMuX3VwZGF0ZVN0YXRlfHdjdCx0aGlzLmZpcnN0VXBkYXRlZChyKSksdGhpcy51cGRhdGVkKHIpKX1fbWFya1VwZGF0ZWQoKXt0aGlzLl9jaGFuZ2VkUHJvcGVydGllcz1uZXcgTWFwLHRoaXMuX3VwZGF0ZVN0YXRlPXRoaXMuX3VwZGF0ZVN0YXRlJn5TY3R9Z2V0IHVwZGF0ZUNvbXBsZXRlKCl7cmV0dXJuIHRoaXMuX2dldFVwZGF0ZUNvbXBsZXRlKCl9X2dldFVwZGF0ZUNvbXBsZXRlKCl7cmV0dXJuIHRoaXMuZ2V0VXBkYXRlQ29tcGxldGUoKX1nZXRVcGRhdGVDb21wbGV0ZSgpe3JldHVybiB0aGlzLl91cGRhdGVQcm9taXNlfXNob3VsZFVwZGF0ZSh0KXtyZXR1cm4hMH11cGRhdGUodCl7dGhpcy5fcmVmbGVjdGluZ1Byb3BlcnRpZXMhPT12b2lkIDAmJnRoaXMuX3JlZmxlY3RpbmdQcm9wZXJ0aWVzLnNpemU+MCYmKHRoaXMuX3JlZmxlY3RpbmdQcm9wZXJ0aWVzLmZvckVhY2goKHIsbik9PnRoaXMuX3Byb3BlcnR5VG9BdHRyaWJ1dGUobix0aGlzW25dLHIpKSx0aGlzLl9yZWZsZWN0aW5nUHJvcGVydGllcz12b2lkIDApLHRoaXMuX21hcmtVcGRhdGVkKCl9dXBkYXRlZCh0KXt9Zmlyc3RVcGRhdGVkKHQpe319O0FjZT1DY3Q7ZzNbQWNlXT0hMDt2YXIgSWNlPUVsZW1lbnQucHJvdG90eXBlLElpaT1JY2UubXNNYXRjaGVzU2VsZWN0b3J8fEljZS53ZWJraXRNYXRjaGVzU2VsZWN0b3I7dmFyIGpIPXdpbmRvdy5TaGFkb3dSb290JiYod2luZG93LlNoYWR5Q1NTPT09dm9pZCAwfHx3aW5kb3cuU2hhZHlDU1MubmF0aXZlU2hhZG93KSYmImFkb3B0ZWRTdHlsZVNoZWV0cyJpbiBEb2N1bWVudC5wcm90b3R5cGUmJiJyZXBsYWNlImluIENTU1N0eWxlU2hlZXQucHJvdG90eXBlLEFjdD1TeW1ib2woKSxjMT1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIpe2lmKHIhPT1BY3QpdGhyb3cgbmV3IEVycm9yKCJDU1NSZXN1bHQgaXMgbm90IGNvbnN0cnVjdGFibGUuIFVzZSBgdW5zYWZlQ1NTYCBvciBgY3NzYCBpbnN0ZWFkLiIpO3RoaXMuY3NzVGV4dD10fWdldCBzdHlsZVNoZWV0KCl7cmV0dXJuIHRoaXMuX3N0eWxlU2hlZXQ9PT12b2lkIDAmJihqSD8odGhpcy5fc3R5bGVTaGVldD1uZXcgQ1NTU3R5bGVTaGVldCx0aGlzLl9zdHlsZVNoZWV0LnJlcGxhY2VTeW5jKHRoaXMuY3NzVGV4dCkpOnRoaXMuX3N0eWxlU2hlZXQ9bnVsbCksdGhpcy5fc3R5bGVTaGVldH10b1N0cmluZygpe3JldHVybiB0aGlzLmNzc1RleHR9fSxQY3Q9ZT0+bmV3IGMxKFN0cmluZyhlKSxBY3QpLFV1cj1lPT57aWYoZSBpbnN0YW5jZW9mIGMxKXJldHVybiBlLmNzc1RleHQ7aWYodHlwZW9mIGU9PSJudW1iZXIiKXJldHVybiBlO3Rocm93IG5ldyBFcnJvcihgVmFsdWUgcGFzc2VkIHRvICdjc3MnIGZ1bmN0aW9uIG11c3QgYmUgYSAnY3NzJyBmdW5jdGlvbiByZXN1bHQ6ICR7ZX0uIFVzZSAndW5zYWZlQ1NTJyB0byBwYXNzIG5vbi1saXRlcmFsIHZhbHVlcywgYnV0CiAgICAgICAgICAgIHRha2UgY2FyZSB0byBlbnN1cmUgcGFnZSBzZWN1cml0eS5gKX0sQ2k9KGUsLi4udCk9PntsZXQgcj10LnJlZHVjZSgobixpLG8pPT5uK1V1cihpKStlW28rMV0sZVswXSk7cmV0dXJuIG5ldyBjMShyLEFjdCl9Oyh3aW5kb3cubGl0RWxlbWVudFZlcnNpb25zfHwod2luZG93LmxpdEVsZW1lbnRWZXJzaW9ucz1bXSkpLnB1c2goIjIuNS4xIik7dmFyIExjZT17fSxFUD1jbGFzcyBleHRlbmRzIGcze3N0YXRpYyBnZXRTdHlsZXMoKXtyZXR1cm4gdGhpcy5zdHlsZXN9c3RhdGljIF9nZXRVbmlxdWVTdHlsZXMoKXtpZih0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9zdHlsZXMiLHRoaXMpKSlyZXR1cm47bGV0IHQ9dGhpcy5nZXRTdHlsZXMoKTtpZihBcnJheS5pc0FycmF5KHQpKXtsZXQgcj0obyxhKT0+by5yZWR1Y2VSaWdodCgocyxsKT0+QXJyYXkuaXNBcnJheShsKT9yKGwscyk6KHMuYWRkKGwpLHMpLGEpLG49cih0LG5ldyBTZXQpLGk9W107bi5mb3JFYWNoKG89PmkudW5zaGlmdChvKSksdGhpcy5fc3R5bGVzPWl9ZWxzZSB0aGlzLl9zdHlsZXM9dD09PXZvaWQgMD9bXTpbdF07dGhpcy5fc3R5bGVzPXRoaXMuX3N0eWxlcy5tYXAocj0+e2lmKHIgaW5zdGFuY2VvZiBDU1NTdHlsZVNoZWV0JiYhakgpe2xldCBuPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHIuY3NzUnVsZXMpLnJlZHVjZSgoaSxvKT0+aStvLmNzc1RleHQsIiIpO3JldHVybiBQY3Qobil9cmV0dXJuIHJ9KX1pbml0aWFsaXplKCl7c3VwZXIuaW5pdGlhbGl6ZSgpLHRoaXMuY29uc3RydWN0b3IuX2dldFVuaXF1ZVN0eWxlcygpLHRoaXMucmVuZGVyUm9vdD10aGlzLmNyZWF0ZVJlbmRlclJvb3QoKSx3aW5kb3cuU2hhZG93Um9vdCYmdGhpcy5yZW5kZXJSb290IGluc3RhbmNlb2Ygd2luZG93LlNoYWRvd1Jvb3QmJnRoaXMuYWRvcHRTdHlsZXMoKX1jcmVhdGVSZW5kZXJSb290KCl7cmV0dXJuIHRoaXMuYXR0YWNoU2hhZG93KHRoaXMuY29uc3RydWN0b3Iuc2hhZG93Um9vdE9wdGlvbnMpfWFkb3B0U3R5bGVzKCl7bGV0IHQ9dGhpcy5jb25zdHJ1Y3Rvci5fc3R5bGVzO3QubGVuZ3RoIT09MCYmKHdpbmRvdy5TaGFkeUNTUyE9PXZvaWQgMCYmIXdpbmRvdy5TaGFkeUNTUy5uYXRpdmVTaGFkb3c/d2luZG93LlNoYWR5Q1NTLlNjb3BpbmdTaGltLnByZXBhcmVBZG9wdGVkQ3NzVGV4dCh0Lm1hcChyPT5yLmNzc1RleHQpLHRoaXMubG9jYWxOYW1lKTpqSD90aGlzLnJlbmRlclJvb3QuYWRvcHRlZFN0eWxlU2hlZXRzPXQubWFwKHI9PnIgaW5zdGFuY2VvZiBDU1NTdHlsZVNoZWV0P3I6ci5zdHlsZVNoZWV0KTp0aGlzLl9uZWVkc1NoaW1BZG9wdGVkU3R5bGVTaGVldHM9ITApfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmhhc1VwZGF0ZWQmJndpbmRvdy5TaGFkeUNTUyE9PXZvaWQgMCYmd2luZG93LlNoYWR5Q1NTLnN0eWxlRWxlbWVudCh0aGlzKX11cGRhdGUodCl7bGV0IHI9dGhpcy5yZW5kZXIoKTtzdXBlci51cGRhdGUodCksciE9PUxjZSYmdGhpcy5jb25zdHJ1Y3Rvci5yZW5kZXIocix0aGlzLnJlbmRlclJvb3Qse3Njb3BlTmFtZTp0aGlzLmxvY2FsTmFtZSxldmVudENvbnRleHQ6dGhpc30pLHRoaXMuX25lZWRzU2hpbUFkb3B0ZWRTdHlsZVNoZWV0cyYmKHRoaXMuX25lZWRzU2hpbUFkb3B0ZWRTdHlsZVNoZWV0cz0hMSx0aGlzLmNvbnN0cnVjdG9yLl9zdHlsZXMuZm9yRWFjaChuPT57bGV0IGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtpLnRleHRDb250ZW50PW4uY3NzVGV4dCx0aGlzLnJlbmRlclJvb3QuYXBwZW5kQ2hpbGQoaSl9KSl9cmVuZGVyKCl7cmV0dXJuIExjZX19O0VQLmZpbmFsaXplZD0hMDtFUC5yZW5kZXI9Q2NlO0VQLnNoYWRvd1Jvb3RPcHRpb25zPXttb2RlOiJvcGVuIn07dmFyIGtjZT0wLEljdD17fSxqYz0oZSx0LHIpPT57bGV0IG49ciYmci5tb2R1bGVJZHx8YGN1c3RvbS1zdHlsZS1tb2R1bGUtJHtrY2UrK31gO0FycmF5LmlzQXJyYXkodCl8fCh0PXQ/W3RdOltdKSx0LmZvckVhY2goYT0+e2lmKCEoYSBpbnN0YW5jZW9mIGMxKSl0aHJvdyBuZXcgRXJyb3IoIkFuIGl0ZW0gaW4gc3R5bGVzIGlzIG5vdCBvZiB0eXBlIENTU1Jlc3VsdC4gVXNlIGB1bnNhZmVDU1NgIG9yIGBjc3NgLiIpO2lmKCFJY3RbYV0pe2xldCBzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRvbS1tb2R1bGUiKTtzLmlubmVySFRNTD1gCiAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgPHN0eWxlPiR7YS50b1N0cmluZygpfTwvc3R5bGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgYDtsZXQgbD1gY3VzdG9tLXN0eWxlLW1vZHVsZS0ke2tjZSsrfWA7cy5yZWdpc3RlcihsKSxJY3RbYV09bH19KTtsZXQgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkb20tbW9kdWxlIik7aWYoZSl7bGV0IGE9Y3VzdG9tRWxlbWVudHMuZ2V0KGUpO2EmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLCJfX2ZpbmFsaXplZCIpJiZjb25zb2xlLndhcm4oYFRoZSBjdXN0b20gZWxlbWVudCBkZWZpbml0aW9uIGZvciAiJHtlfSIKICAgICAgd2FzIGZpbmFsaXplZCBiZWZvcmUgYSBzdHlsZSBtb2R1bGUgd2FzIHJlZ2lzdGVyZWQuCiAgICAgIE1ha2Ugc3VyZSB0byBhZGQgY29tcG9uZW50IHNwZWNpZmljIHN0eWxlIG1vZHVsZXMgYmVmb3JlCiAgICAgIGltcG9ydGluZyB0aGUgY29ycmVzcG9uZGluZyBjdXN0b20gZWxlbWVudC5gKSxpLnNldEF0dHJpYnV0ZSgidGhlbWUtZm9yIixlKX1sZXQgbz1yJiZyLmluY2x1ZGV8fFtdO2kuaW5uZXJIVE1MPWAKICAgIDx0ZW1wbGF0ZT4KICAgICAgJHtvLm1hcChhPT5gPHN0eWxlIGluY2x1ZGU9JHthfT48L3N0eWxlPmApfQogICAgICAke3QubWFwKGE9PmA8c3R5bGUgaW5jbHVkZT0ke0ljdFthXX0+PC9zdHlsZT5gKX0KICAgIDwvdGVtcGxhdGU+CiAgYCxpLnJlZ2lzdGVyKG4pfTt2YXIgTGN0PWNsYXNzIGV4dGVuZHMgSFRNTEVsZW1lbnR7c3RhdGljIGdldCB2ZXJzaW9uKCl7cmV0dXJuIjIwLjAuMiJ9fTtjdXN0b21FbGVtZW50cy5kZWZpbmUoInZhYWRpbi1sdW1vLXN0eWxlcyIsTGN0KTt2YXIgcXVyPUNpYAogIDpob3N0IHsKICAgIC8qIEJhc2UgKGJhY2tncm91bmQpICovCiAgICAtLWx1bW8tYmFzZS1jb2xvcjogI2ZmZjsKCiAgICAvKiBUaW50ICovCiAgICAtLWx1bW8tdGludC01cGN0OiBoc2xhKDAsIDAlLCAxMDAlLCAwLjMpOwogICAgLS1sdW1vLXRpbnQtMTBwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuMzcpOwogICAgLS1sdW1vLXRpbnQtMjBwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuNDQpOwogICAgLS1sdW1vLXRpbnQtMzBwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuNSk7CiAgICAtLWx1bW8tdGludC00MHBjdDogaHNsYSgwLCAwJSwgMTAwJSwgMC41Nyk7CiAgICAtLWx1bW8tdGludC01MHBjdDogaHNsYSgwLCAwJSwgMTAwJSwgMC42NCk7CiAgICAtLWx1bW8tdGludC02MHBjdDogaHNsYSgwLCAwJSwgMTAwJSwgMC43KTsKICAgIC0tbHVtby10aW50LTcwcGN0OiBoc2xhKDAsIDAlLCAxMDAlLCAwLjc3KTsKICAgIC0tbHVtby10aW50LTgwcGN0OiBoc2xhKDAsIDAlLCAxMDAlLCAwLjg0KTsKICAgIC0tbHVtby10aW50LTkwcGN0OiBoc2xhKDAsIDAlLCAxMDAlLCAwLjkpOwogICAgLS1sdW1vLXRpbnQ6ICNmZmY7CgogICAgLyogU2hhZGUgKi8KICAgIC0tbHVtby1zaGFkZS01cGN0OiBoc2xhKDIxNCwgNjElLCAyNSUsIDAuMDUpOwogICAgLS1sdW1vLXNoYWRlLTEwcGN0OiBoc2xhKDIxNCwgNTclLCAyNCUsIDAuMSk7CiAgICAtLWx1bW8tc2hhZGUtMjBwY3Q6IGhzbGEoMjE0LCA1MyUsIDIzJSwgMC4xNik7CiAgICAtLWx1bW8tc2hhZGUtMzBwY3Q6IGhzbGEoMjE0LCA1MCUsIDIyJSwgMC4yNik7CiAgICAtLWx1bW8tc2hhZGUtNDBwY3Q6IGhzbGEoMjE0LCA0NyUsIDIxJSwgMC4zOCk7CiAgICAtLWx1bW8tc2hhZGUtNTBwY3Q6IGhzbGEoMjE0LCA0NSUsIDIwJSwgMC41KTsKICAgIC0tbHVtby1zaGFkZS02MHBjdDogaHNsYSgyMTQsIDQzJSwgMTklLCAwLjYxKTsKICAgIC0tbHVtby1zaGFkZS03MHBjdDogaHNsYSgyMTQsIDQyJSwgMTglLCAwLjcyKTsKICAgIC0tbHVtby1zaGFkZS04MHBjdDogaHNsYSgyMTQsIDQxJSwgMTclLCAwLjgzKTsKICAgIC0tbHVtby1zaGFkZS05MHBjdDogaHNsYSgyMTQsIDQwJSwgMTYlLCAwLjk0KTsKICAgIC0tbHVtby1zaGFkZTogaHNsKDIxNCwgMzUlLCAxNSUpOwoKICAgIC8qIENvbnRyYXN0ICovCiAgICAtLWx1bW8tY29udHJhc3QtNXBjdDogdmFyKC0tbHVtby1zaGFkZS01cGN0KTsKICAgIC0tbHVtby1jb250cmFzdC0xMHBjdDogdmFyKC0tbHVtby1zaGFkZS0xMHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtMjBwY3Q6IHZhcigtLWx1bW8tc2hhZGUtMjBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTMwcGN0OiB2YXIoLS1sdW1vLXNoYWRlLTMwcGN0KTsKICAgIC0tbHVtby1jb250cmFzdC00MHBjdDogdmFyKC0tbHVtby1zaGFkZS00MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtNTBwY3Q6IHZhcigtLWx1bW8tc2hhZGUtNTBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTYwcGN0OiB2YXIoLS1sdW1vLXNoYWRlLTYwcGN0KTsKICAgIC0tbHVtby1jb250cmFzdC03MHBjdDogdmFyKC0tbHVtby1zaGFkZS03MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtODBwY3Q6IHZhcigtLWx1bW8tc2hhZGUtODBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTkwcGN0OiB2YXIoLS1sdW1vLXNoYWRlLTkwcGN0KTsKICAgIC0tbHVtby1jb250cmFzdDogdmFyKC0tbHVtby1zaGFkZSk7CgogICAgLyogVGV4dCAqLwogICAgLS1sdW1vLWhlYWRlci10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0KTsKICAgIC0tbHVtby1ib2R5LXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtOTBwY3QpOwogICAgLS1sdW1vLXNlY29uZGFyeS10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTcwcGN0KTsKICAgIC0tbHVtby10ZXJ0aWFyeS10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTUwcGN0KTsKICAgIC0tbHVtby1kaXNhYmxlZC10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTMwcGN0KTsKCiAgICAvKiBQcmltYXJ5ICovCiAgICAtLWx1bW8tcHJpbWFyeS1jb2xvcjogaHNsKDIxNCwgOTAlLCA1MiUpOwogICAgLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3Q6IGhzbGEoMjE0LCA5MCUsIDUyJSwgMC41KTsKICAgIC0tbHVtby1wcmltYXJ5LWNvbG9yLTEwcGN0OiBoc2xhKDIxNCwgOTAlLCA1MiUsIDAuMSk7CiAgICAtLWx1bW8tcHJpbWFyeS10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLXByaW1hcnktY29sb3IpOwogICAgLS1sdW1vLXByaW1hcnktY29udHJhc3QtY29sb3I6ICNmZmY7CgogICAgLyogRXJyb3IgKi8KICAgIC0tbHVtby1lcnJvci1jb2xvcjogaHNsKDMsIDEwMCUsIDYxJSk7CiAgICAtLWx1bW8tZXJyb3ItY29sb3ItNTBwY3Q6IGhzbGEoMywgMTAwJSwgNjAlLCAwLjUpOwogICAgLS1sdW1vLWVycm9yLWNvbG9yLTEwcGN0OiBoc2xhKDMsIDEwMCUsIDYwJSwgMC4xKTsKICAgIC0tbHVtby1lcnJvci10ZXh0LWNvbG9yOiBoc2woMywgOTIlLCA1MyUpOwogICAgLS1sdW1vLWVycm9yLWNvbnRyYXN0LWNvbG9yOiAjZmZmOwoKICAgIC8qIFN1Y2Nlc3MgKi8KICAgIC0tbHVtby1zdWNjZXNzLWNvbG9yOiBoc2woMTQ1LCA4MCUsIDQyJSk7IC8qIGhzbCgxNDQsODIlLDM3JSk7ICovCiAgICAtLWx1bW8tc3VjY2Vzcy1jb2xvci01MHBjdDogaHNsYSgxNDUsIDc2JSwgNDQlLCAwLjU1KTsKICAgIC0tbHVtby1zdWNjZXNzLWNvbG9yLTEwcGN0OiBoc2xhKDE0NSwgNzYlLCA0NCUsIDAuMTIpOwogICAgLS1sdW1vLXN1Y2Nlc3MtdGV4dC1jb2xvcjogaHNsKDE0NSwgMTAwJSwgMzIlKTsKICAgIC0tbHVtby1zdWNjZXNzLWNvbnRyYXN0LWNvbG9yOiAjZmZmOwogIH0KYCxSY2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtSY2UuaW5uZXJIVE1MPWA8c3R5bGU+JHtxdXIudG9TdHJpbmcoKS5yZXBsYWNlKCI6aG9zdCIsImh0bWwiKX08L3N0eWxlPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChSY2UuY29udGVudCk7dmFyIEd1cj1DaWAKICBbdGhlbWV+PSdkYXJrJ10gewogICAgLyogQmFzZSAoYmFja2dyb3VuZCkgKi8KICAgIC0tbHVtby1iYXNlLWNvbG9yOiBoc2woMjE0LCAzNSUsIDIxJSk7CgogICAgLyogVGludCAqLwogICAgLS1sdW1vLXRpbnQtNXBjdDogaHNsYSgyMTQsIDY1JSwgODUlLCAwLjA2KTsKICAgIC0tbHVtby10aW50LTEwcGN0OiBoc2xhKDIxNCwgNjAlLCA4MCUsIDAuMTQpOwogICAgLS1sdW1vLXRpbnQtMjBwY3Q6IGhzbGEoMjE0LCA2NCUsIDgyJSwgMC4yMyk7CiAgICAtLWx1bW8tdGludC0zMHBjdDogaHNsYSgyMTQsIDY5JSwgODQlLCAwLjMyKTsKICAgIC0tbHVtby10aW50LTQwcGN0OiBoc2xhKDIxNCwgNzMlLCA4NiUsIDAuNDEpOwogICAgLS1sdW1vLXRpbnQtNTBwY3Q6IGhzbGEoMjE0LCA3OCUsIDg4JSwgMC41KTsKICAgIC0tbHVtby10aW50LTYwcGN0OiBoc2xhKDIxNCwgODIlLCA5MCUsIDAuNik7CiAgICAtLWx1bW8tdGludC03MHBjdDogaHNsYSgyMTQsIDg3JSwgOTIlLCAwLjcpOwogICAgLS1sdW1vLXRpbnQtODBwY3Q6IGhzbGEoMjE0LCA5MSUsIDk0JSwgMC44KTsKICAgIC0tbHVtby10aW50LTkwcGN0OiBoc2xhKDIxNCwgOTYlLCA5NiUsIDAuOSk7CiAgICAtLWx1bW8tdGludDogaHNsKDIxNCwgMTAwJSwgOTglKTsKCiAgICAvKiBTaGFkZSAqLwogICAgLS1sdW1vLXNoYWRlLTVwY3Q6IGhzbGEoMjE0LCAwJSwgMCUsIDAuMDcpOwogICAgLS1sdW1vLXNoYWRlLTEwcGN0OiBoc2xhKDIxNCwgNCUsIDIlLCAwLjE1KTsKICAgIC0tbHVtby1zaGFkZS0yMHBjdDogaHNsYSgyMTQsIDglLCA0JSwgMC4yMyk7CiAgICAtLWx1bW8tc2hhZGUtMzBwY3Q6IGhzbGEoMjE0LCAxMiUsIDYlLCAwLjMyKTsKICAgIC0tbHVtby1zaGFkZS00MHBjdDogaHNsYSgyMTQsIDE2JSwgOCUsIDAuNDEpOwogICAgLS1sdW1vLXNoYWRlLTUwcGN0OiBoc2xhKDIxNCwgMjAlLCAxMCUsIDAuNSk7CiAgICAtLWx1bW8tc2hhZGUtNjBwY3Q6IGhzbGEoMjE0LCAyNCUsIDEyJSwgMC42KTsKICAgIC0tbHVtby1zaGFkZS03MHBjdDogaHNsYSgyMTQsIDI4JSwgMTMlLCAwLjcpOwogICAgLS1sdW1vLXNoYWRlLTgwcGN0OiBoc2xhKDIxNCwgMzIlLCAxMyUsIDAuOCk7CiAgICAtLWx1bW8tc2hhZGUtOTBwY3Q6IGhzbGEoMjE0LCAzMyUsIDEzJSwgMC45KTsKICAgIC0tbHVtby1zaGFkZTogaHNsKDIxNCwgMzMlLCAxMyUpOwoKICAgIC8qIENvbnRyYXN0ICovCiAgICAtLWx1bW8tY29udHJhc3QtNXBjdDogdmFyKC0tbHVtby10aW50LTVwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTEwcGN0OiB2YXIoLS1sdW1vLXRpbnQtMTBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTIwcGN0OiB2YXIoLS1sdW1vLXRpbnQtMjBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTMwcGN0OiB2YXIoLS1sdW1vLXRpbnQtMzBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTQwcGN0OiB2YXIoLS1sdW1vLXRpbnQtNDBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTUwcGN0OiB2YXIoLS1sdW1vLXRpbnQtNTBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTYwcGN0OiB2YXIoLS1sdW1vLXRpbnQtNjBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTcwcGN0OiB2YXIoLS1sdW1vLXRpbnQtNzBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTgwcGN0OiB2YXIoLS1sdW1vLXRpbnQtODBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTkwcGN0OiB2YXIoLS1sdW1vLXRpbnQtOTBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0OiB2YXIoLS1sdW1vLXRpbnQpOwoKICAgIC8qIFRleHQgKi8KICAgIC0tbHVtby1oZWFkZXItdGV4dC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdCk7CiAgICAtLWx1bW8tYm9keS10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTkwcGN0KTsKICAgIC0tbHVtby1zZWNvbmRhcnktdGV4dC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC03MHBjdCk7CiAgICAtLWx1bW8tdGVydGlhcnktdGV4dC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC01MHBjdCk7CiAgICAtLWx1bW8tZGlzYWJsZWQtdGV4dC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC0zMHBjdCk7CgogICAgLyogUHJpbWFyeSAqLwogICAgLS1sdW1vLXByaW1hcnktY29sb3I6IGhzbCgyMTQsIDg2JSwgNTUlKTsKICAgIC0tbHVtby1wcmltYXJ5LWNvbG9yLTUwcGN0OiBoc2xhKDIxNCwgODYlLCA1NSUsIDAuNSk7CiAgICAtLWx1bW8tcHJpbWFyeS1jb2xvci0xMHBjdDogaHNsYSgyMTQsIDkwJSwgNjMlLCAwLjEpOwogICAgLS1sdW1vLXByaW1hcnktdGV4dC1jb2xvcjogaHNsKDIxNCwgMTAwJSwgNzAlKTsKICAgIC0tbHVtby1wcmltYXJ5LWNvbnRyYXN0LWNvbG9yOiAjZmZmOwoKICAgIC8qIEVycm9yICovCiAgICAtLWx1bW8tZXJyb3ItY29sb3I6IGhzbCgzLCA5MCUsIDYzJSk7CiAgICAtLWx1bW8tZXJyb3ItY29sb3ItNTBwY3Q6IGhzbGEoMywgOTAlLCA2MyUsIDAuNSk7CiAgICAtLWx1bW8tZXJyb3ItY29sb3ItMTBwY3Q6IGhzbGEoMywgOTAlLCA2MyUsIDAuMSk7CiAgICAtLWx1bW8tZXJyb3ItdGV4dC1jb2xvcjogaHNsKDMsIDEwMCUsIDY3JSk7CgogICAgLyogU3VjY2VzcyAqLwogICAgLS1sdW1vLXN1Y2Nlc3MtY29sb3I6IGhzbCgxNDUsIDY1JSwgNDIlKTsKICAgIC0tbHVtby1zdWNjZXNzLWNvbG9yLTUwcGN0OiBoc2xhKDE0NSwgNjUlLCA0MiUsIDAuNSk7CiAgICAtLWx1bW8tc3VjY2Vzcy1jb2xvci0xMHBjdDogaHNsYSgxNDUsIDY1JSwgNDIlLCAwLjEpOwogICAgLS1sdW1vLXN1Y2Nlc3MtdGV4dC1jb2xvcjogaHNsKDE0NSwgODUlLCA0NyUpOwogIH0KCiAgaHRtbCB7CiAgICBjb2xvcjogdmFyKC0tbHVtby1ib2R5LXRleHQtY29sb3IpOwogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1iYXNlLWNvbG9yKTsKICB9CgogIFt0aGVtZX49J2RhcmsnXSB7CiAgICBjb2xvcjogdmFyKC0tbHVtby1ib2R5LXRleHQtY29sb3IpOwogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1iYXNlLWNvbG9yKTsKICB9CgogIGgxLAogIGgyLAogIGgzLAogIGg0LAogIGg1LAogIGg2IHsKICAgIGNvbG9yOiB2YXIoLS1sdW1vLWhlYWRlci10ZXh0LWNvbG9yKTsKICB9CgogIGEgewogICAgY29sb3I6IHZhcigtLWx1bW8tcHJpbWFyeS10ZXh0LWNvbG9yKTsKICB9CgogIGJsb2NrcXVvdGUgewogICAgY29sb3I6IHZhcigtLWx1bW8tc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogIH0KCiAgY29kZSwKICBwcmUgewogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC0xMHBjdCk7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtbSk7CiAgfQpgO2pjKCIiLEd1cix7bW9kdWxlSWQ6Imx1bW8tY29sb3IifSk7dmFyIFd1cj1DaWAKICA6aG9zdCB7CiAgICBjb2xvcjogdmFyKC0tbHVtby1ib2R5LXRleHQtY29sb3IpICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWJhc2UtY29sb3IpICFpbXBvcnRhbnQ7CiAgfQpgO2pjKCIiLFd1cix7bW9kdWxlSWQ6Imx1bW8tY29sb3ItbGVnYWN5IixpbmNsdWRlOlsibHVtby1jb2xvciJdfSk7dmFyIE5jZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO05jZS5pbm5lckhUTUw9YAogIDxzdHlsZT4KICAgIEBmb250LWZhY2UgewogICAgICBmb250LWZhbWlseTogJ2x1bW8taWNvbnMnOwogICAgICBzcmM6IHVybChkYXRhOmFwcGxpY2F0aW9uL2ZvbnQtd29mZjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxkMDlHUmdBQkFBQUFBQkVjQUFzQUFBQUFJaXdBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkhVMVZDQUFBQkNBQUFBRHNBQUFCVUlJc2xlazlUTHpJQUFBRkVBQUFBUXdBQUFGWkFJVXVLWTIxaGNBQUFBWWdBQUFENEFBQURyc0NVOGQ1bmJIbG1BQUFDZ0FBQUMyTUFBQmQ0aDlUbzJXaGxZV1FBQUEza0FBQUFNQUFBQURaYS82U3NhR2hsWVFBQURoUUFBQUFkQUFBQUpBYnBBMzVvYlhSNEFBQU9OQUFBQUJBQUFBQ3NwQkFBQUd4dlkyRUFBQTVFQUFBQVdBQUFBRmg1NUlBc2JXRjRjQUFBRHB3QUFBQWZBQUFBSUFGS0FYQnVZVzFsQUFBT3ZBQUFBVEVBQUFJdVVVSlpDSEJ2YzNRQUFBL3dBQUFCS3dBQUFlbG04U3pWZUp4allHUmdZT0JpTUdDd1kyQnljZk1KWWVETFNTekpZNUJpWUdHQUFKQThNcHN4SnpNOWtZRUR4Z1BLc1lCcERpQm1nNGdDQUNZN0JVZ0FlSnhqWUdTK3lEaUJnWldCZ2FtS2FROERBME1QaEdaOHdHREl5QVFVWldCbFpzQUtBdEpjVXhnY1hqRyswbUlPK3AvRkVNVWN4REFOS013SWtnTUFCbjhNTFFCNG5PM1NXVzZETUFCRjBVdHdDRW5JUE0vemhMSzhMcWhmWFJ5YlNQMTRYVVl0SFY5aEdZUXdRQk5JbzNjVUlQa2hRZU03cmliMWVrcW5YZzk4MVh1QzFxdnk4NGx6b2psZWgzcHV4TDBoUGpHalJVNDczdGVsb0VlZkFVTkdqSmt3WmNhY0JVdFdyTm13WmNlZUEwZE9uTGx3NWNhZEIwOWVsUEdoR2YrajBOVEkvNjVLZlhlclQ2SmhxS25wUkt0Z09wdXFhVHJ0S2pQVWxxSG1odG8yMUk3cEw2aTZobHFZM3E3cUdXcmZVQWVHT2pUVWthR09EWFZpcUZORG5SbnEzRkFYaHJvMDFKV2hyZzExWTZoYlE5MFo2dDVRRDRaNk5OU1RvWjROOVdLb1YwTzlHZXJkVUIrRytqVFVsNkdXUnZrTDI0QmtFWGljdFZoOWJGdlZGYi9ueHZieis3UmYvTjZ6SGNkMmJDZlArV2djMVo5TjBqcE5uRUw2a2JSVlM2SEEyaFFZR2g5VEdSMUNiQ3FhMnJYcldPa1FFL3NITkpnbXRadm9WTlpxRTFCMUROSHh6VFF4Q2VoVVRZaUpUUXlFTnVpMHFTTGV6cjNQZHV5UWZnbVJXT2ZkZTgrOTU1MXo3cm5uL080akxvSi9iUlAwVWFLUU1MRkpqcEJBdnBoTFpDM0RrMG9rN1dCelIyL3VwSnM3Unl3L25mRmJsbi91dU4vYXBDdndyS0xyU3ZVcVJ1ZmJtNXBuMGZzMHc0Z1l4bkdWUDZxSG5PNGJXaURRR1Fnd3RTNmxtM2xCM1FvWDFNMnZ3RW11emlyRjM5eStFczIrREo4ZDFwa3lxQklxb3plM0QxK1p6NERyRm9henhJOGRXd01yRGxaMkRNcVFBUjlBUk9zSlUrMmNtbFRQYXpUY281MkYxeFRhMmEyK0s4dnZxOTJkVkhtdExvUGVRWC9BWlBSWUd0aERZT2VaakJqS29Gc1ZHdWxSM2xXVTk1V2VDSzQ0cUhVN01oV1VHVUtaRFQzb0tVY0cyR1d1aCtFRERmVVlBL2poQWhsMFRPc0pOWVNFdTdtUW1pM1V6Zlh3WktBNEJzVnNITFhRWUdnUlc5NXVFdHBKMVZmbjlYaUxyaVJCbEZFcXhzRGpBMDl5Q05Vb1F4eHdkN0tXU1R0MnkzR1RLaWZscUhSU29XWmMzbTExV2EvZkpkRmdYRDRzU1lmbGVKQktkOEdNejdKOGRabi9jR1JDY0tHRG5BMkdlM2ZLemN2bG5URE50aEdXTFh6WC9XYVh0VUFtUmdlTGxIU3IzMHIwRzlVVFhNYjBBdG13ek9veTczZmtTbEhaa2R1dy9UWXVVOWNBRDRZdXRQb3hUVHNBMzc5N3dWcjRaLzFOQzV6QVJIcjR2dHhKanhJZmlaTWhNa2JXaysxNEJuSlpLd3FHWndEZnN3THl4V0RTZzExckZMSkY3Tm9weGpkMWgxL1FPVCtvZXpnZnUzWXErSGsrZHVmNXgrNDBvMUdUa2FJZ2lrSy9JRW5DNmFZeENVQmFaSlNONFhUWUZqVS9ZTU5JS3FKd2hER09DQ0k4RkRYblhtWGp0R2hHSnlTaHFqQU9uQk9rVzJKRzlTN0dnWWVNV0FVNUp6aG5XbUJPYU9NK0NLRVBvcVNmRkRDMlVucStETGxVZ1VWVUZGTFpHSmc2anRsb2pzZHNhOGtQT2JQdUpkaTVkbkJkQnNMSk1HVFdEYTR0Mkp2dHd1UG85cytZODZzdXYvVzMzUUcxckFhT0FVVit2eDRLNmYyRDA0UFZLbEM3V0xTclp6QWk0NVpWNmxJQzdXb1hxbVJ5dlVxb1Z3cnpVb1ZzSWplVFhXUXYrUkg1R1RsQlhpQi9JbjhsbjBJYkJDQUZPYWpBSnJnWll5T0hXcU9mVWUvYUhqSTEyUjZPUW8xakNndDIxNWwrNGY2WFBiKzBNTm91MFYrNDNuMkY3N3RTZlJiMjRkN3ppdGduS212WUhzNjl6dWdhUHZCd3Y2aW9Ya2IyTGRMNjVBdHc1MXVMa1hsdTFiaE1NUmNYU1BjWW9xS0lSbGgzNGxRUDgvNUpidVVGeWU0dnhENi82TXhGRjExQzB1VkxyOVVsZ3c0NHRTM3BNVmlOTFVFeGJ5Y0ZnTEljdCtRRE1pYlJpbXgxeWRVejhGWFppdU9JREJPTVZYMm5VWmMraHVORTVYVUo4MXVpSm9pYWJ3cWFWRjB1YWNLYmF1L3BsNFIyVlcwWFhsSnJhNmJvVnJZRzY0NlRGNU5Zend5NHZqRU5WckRsY05wWlBsOERINlhYOFhXQ3gwbXZXVlpZNktGTHJ2c1k2Ni96UGljdDVGbnhhTlVSL2p1dlpDTTNUdkQ2MEUyVzF0Wml6YlhUUER1YWJjbTBuYmJ6cFdLcG1BMWF5QlE4Z2llZExVTStBMGtOakJqUWptdVl6N1lyZ0lYWXZtRjYzWkxCd1NYcnBuOVRiOXd3ZGQvVTFIMFBNUUszWGNPOHVsM1dUN1B5UFBkcHkwVGVtS3hOUmNKTmF1aVhKbm5VRHBVcHBRV3M0U25VSXkwRUVTR1lxSllRTEdIeHphR1d3VklhUzZZN21RRk04WmpZRFEzYXhqZjYxU1dqVTMzSndPWkExcHdhRzFMOW16ZjcxYUhSZFgxSkh3NkZwMGFYaE53YnF5ZUdOZzROYmR6R0NCeG96NFpYank0TnU2OVpyNnNEWTZ2TXJMVTVuQTFQOEprYmRXWEo2RVJmTXJ5dk5oMUpmUTkrVDRkSWhHdks5dzNkeGpCQnphdHNRL01sT0hWSURuWXBEejZvZEFYbFEwMXQyUGE1SWFmZDhNTXB4QWVES1AwQzZDamdWTFQ1b3NCNmljVXgwMWxXalh4elQvR3lSRjJ3ZWxFTTVaLzdqRzNWalExU3JObjVJYnl6T0c1ZG9iQjMvUUh4eVp2c1hjb3o4SW9Fd1M3cGxDZyt6eEhRazQyNHE5QmZFcGtFU0piRkhRdXNEQlNXRmt1QmtvUE8wa0xLd1JWWWp4R1hsSFRjVERRTUovSDZUWDlhZmtPN21ucmFUTzFmZVRuWkFYTHU0Y3A3SEFYTW1ORzF5ZUZrOVRnUy9OSGhaUi80UW9CVHIvWkIrNmhDZ3lsMTVOcTFVYk42bkUxL1puUDFVMmNpekNCcHZzOGNKUVpKNExrWXg1Ti95WlBBVVpOUVEwVjRmM0JRbGxXckszWVJ6bDMwZE9UNlJWbjJ1cE51cjZ3b1NhOENxcGRUL2FLbkJNNG8zak51cjlkOXhxdFVUNnZlQkV0OUNhOWF0K0VSekVFaFVrUjhzYTVtUTRhVnZKb1ZlRUE4ekk0ZWk1bVVMWEZHeVU3ei82VEFlWUxWY3B6U1daWThQWVlGNXlyVFY2MHNUMCtYVjE0MXZYKytXZjE2VjJiRmVHVlBaWHhGcGt2eWVLVFdMbHpmVzBtbkt4c1k2WTMyOTQvMDk5OFNDZlgxYmxtNXBiY3ZGR2xxL3IwN01SQU1oWUlEaVc1SkZLV1czdmRyRXBDc1pTSkcrb203WnUvUFNTY1pKaE5rTGJtVzVXc3IxMnBXcVc1ekt0bHdSUzRiRk94VXcxN21Denk2bHNrQ0RsMVdZT0dXRFlyQURyTUE3QkREd2VXV05kNWtvaUpuUjFkeit5dExQMnEwU3FQQjFsbksyY2NCN1JZZTRGU29Qa3MzaUIzdDR0eFRTSGN0YjJzeTFpdmswcHZIdUNObTZ3MWY2d3h2MytPQ2dONzhMcWRRblVWaDdSMG9UQXAwek9mMnJiVzc3MFZ1NUMyZEl5R2RUbkhvOHpTamk3ZHBwajBVU29WQ3orbGhSTVRoNTNUZXE5VmJHZmJqdVNiQW9vU2RYYXlZNFBZSGczNzRDNmY3Z2wxQi9EWHVKNC9RWHhPQmRKRkpzcEZzSTNlZ3BvV1VVQ2psVElGbk5ZTmwrWnlaS21CZVlLR0hrRDFReURsaGFLYkt3S2NJSnFKNFRMSjJPbWRZL0pXWGFlNERkR0J3OEhaN2VYY2dGRjJ6cjJTb2FsRHJ5NWlLcW9hMFB1aGUzaFBRMnMzZWxUWU0rTUkrbjNySzBLZ0w3L0xhM0dlTUx0Nm03dTkxMnZHbnZ0T1JpSWEwcUJtaHFWaStYVzlYTkJtcWI4ZVZnS3pJSGZHSTViTm9HN1gwVUN6ZUlTbXFJY08vblk4Rkg3VThhdlg5ZngvU1QraHgwc2V6UHc5UXk4TXVtM0dXZjJONFV5L3lJWUdWQlhiSkhXSVpwN2RmVGNwdGRNVHI5UW1xN0RhaUsvdWtxQ0w0a3Q0UlVmUzVYUG5NdG1UMjIvbVFGcUY3ZW1TcXRybHU4U1ZFbHhEUkpyWk9Ea3B1d2UwVmZUZmpkRXAxZjdBN3YrZm96TkJYVUovNldUdUsyVHRGbHBGVlpBWjNMY0Z2VWkxWjJwMllUK0VNQWtHSlZTdE96TFRBUGc0SXFXSUFselJTak9Ca2wyenhqM1RLeWNwelQvTW52WDN1YVNNV00rZ1UwcmtYam9oaGVmVlJNYXBzMy9rTE1TS3YyM2xUMjN1eFFya1FqeU9KbGVNRHNkaEFuRDZaR0VsV1o1TWpDWHpDRS9oa1dYK1dGNGtuekdoVk95SzJlUVpla1YzZXlvMHpMOGt1WVdDbkRDdmpqaEFrY1RQT0JEWFZkb2F2M0hWY0ZuUWpMdnRWOVMycDB6QTZKZWdQd01ReHQreUZiM2xsOXpHbHEvNWRSS2IzY0V5UVlvYU5ZcGhhcko3eENCN0FXeHNMWTNqalpYWTBYc1pqMFdqd2M5STZQUC9kS0FCbkNaYXFIcGFaRUFDeGs0WmVMWlNLTmdaQUJsK2xZUVgxc0pRT1NYM242cjQxMGV2Y291ZDVKZUFHVVhWUDlIMXRaT0tlalRxNE9ubzB6MGVycm8xRnJuT3BvaHZhMWQvaFRkdFZzUWRLTjVXOVJsVDNOakQwbnpueUtOVGdLQU1mV05XY3lvZFYwSUdMUElIT0YwbzRKeXF1ZmFLNHo2V0lJenVHaDNkOGM4Y3dRZzhFUitPVnh5cmpkbTh2TnVodHM0TG9PaWhHeElNdVVkZ3p3aVlON3hoaDErb1puSk51VEc3Z1FadnU0WFdaOUdBWlpqR0V1YndlUHFZaHRLRFRIKzlWUWtsMTcvaUd5YnNuSis4K3NLdHlQcmNsbDl0eTY1WnNkc3QvOWlxcEVLaDdNNVZkQnhoM2NzT2ROYzZ0VzNJMXV5TTFQek9YZWdTT3JMRnNGTkkyTzI3TStURjJBcG5OOU1VdjV1ZDZManhJdkVRbkhSenhJdTRJc0E5TUxGa0puMnRjWm9aN09ON2RYZTd1anJjOEhydXNQS2FtbHFYd2Q3N2xRVXVMcGlsYXU0UFVNYXB1ZUJiN2lyVTRSb1VYRVlYdVZ1SUdsUkdtT3ArMmxOa2FSUFZ6aU9xbWxhWnZhcUc0ZEZnU2owanhFSldydjEySVVXbnRtdytyZlFhclJFMEFwaDRvY0k2bmxVbEdxcyt1My8rVC9ldGhXNjJQcEhwMmVIYlpzdG5oL3dPTzk1eURBSGljWTJCa1lHQUE0cG1KNlFIeC9EWmZHYmlaWHdCRkdHcFVOelFpNlArdm1hY3kzUUp5T1JpWVFLSUFOb1VMVlhpY1kyQmtZR0FPK3A4RkpGOHdBQUh6VkFaR0JsU2dEUUJXOWdOdkFBQUFlSnhqWUdCZ1lINHhOREFBendRbWp3QUFBQUFBVGdDYUFPZ0JDZ0VzQVU0QmNBR2FBY1FCN2dJYUFwd0M2QVNhQkx3RTFnVHlCUTRGS2dWNkJkQUYvZ1pFQm1ZR3RnY1lCNUFJR0FoU0NHb0kvZ2xHQ2I0SjJnb0VDandLZ2dxNEN2QUxVQXVXQzd4NG5HTmdaR0JnMEdaTVlSQmxBQUVtSU9ZQ1FnYUcvMkErQXdBWWxBRzhBSGljYlpFOVRzTXdHSWJmOUEvUlNnZ0VZbUh4QWd0cStqTjJaR2ozRHQzVDFHbFRPWEhrdUJXOUF5ZmdFQnlDZ1ROd0NBN0JXL05KbFZCdHlkL2p4KzhYS3dtQWEzd2h3bkZFNkliMU9CcTQ0TzZQbTZRYjRSYjVRYmlOSGg2Rk8vUkQ0UzZlTVJIdTRSYWFUNGhhbHpSM2VCVnU0QXB2d2szNmQrRVcrVU80alh0OENuZm92NFc3V09CSHVJZW42TVhzQ3R2UFUxdldjNzNlbWNTZHhJa1cydFc1TGRVb0hwN2tUSmZhSlY2djFQS2c2djE2N0gybU1tY0xOYldsMThaWVZUbTcxYW1QTjk1WGs4RWdFeCtudG9EQkRnVXMrc2lSc3Bhb01lZjdydWtORXJpemlYTnV3UzdIbW9lOXdnZ3h2K2U1NUl6Sk1xUVRlTllWMDBzY3VOYlk4K1l4clVmR2ZjYU1aYi9DTlBRZTA0YlQwbFRoYkV1VDBzZlloSzZLLzIzQW1mM0x4K0gyNGhjajRHU2NBQUFBZUp4dGp0bHVnekFRUmJrSlVFSkl1dS83dnFSOGxHTlBBY1d4MFlBYjVlL0xrbFI5NkVnZW5TdWZHWTAzOFBxS3ZmOXJoZ0dHOEJFZ3hBNGlqQkJqakFRVFRMR0xQZXpqQUljNHdqRk9jSW96bk9NQ2w3akNOVzV3aXp2YzR3R1BlTUl6WHZDS043empBek44ZW9uUVJXWlNTYVltanZ1ZzZhc2U5OGhGbHRleE1KbW1WTm1WMldCdmROZ1pVYyt1akFXelhXM1VEbnUxdzQzYXNTdEhjOEdwekFYWC9weTBqcVRRWkpUZ2tjeEpMcGFDRjBsRDMyeE50KzQzdEFzbjI5RGZ0MDJ1REtTMmNqR1VOZ3NrMjZxSzJsRnRoWW9VMjdJTlBxbWlEcWc1Z29lMHBxUjVxU29xTWRlay9DVVpGeXdMNDZyRXNpSW1sZXFpcW9NeXQ0YmFYbHUvMUdMZE5GZjV6YmNObWRyMVlVV0NaZTQ3byt6VW1iL0RvU3RidzNjVnNlZjlBTGpqaVBRQSkgZm9ybWF0KCd3b2ZmJyk7CiAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgIGZvbnQtc3R5bGU6IG5vcm1hbDsKICAgIH0KCiAgICBodG1sIHsKICAgICAgLS1sdW1vLWljb25zLWFsaWduLWNlbnRlcjogIlxcZWEwMSI7CiAgICAgIC0tbHVtby1pY29ucy1hbGlnbi1sZWZ0OiAiXFxlYTAyIjsKICAgICAgLS1sdW1vLWljb25zLWFsaWduLXJpZ2h0OiAiXFxlYTAzIjsKICAgICAgLS1sdW1vLWljb25zLWFuZ2xlLWRvd246ICJcXGVhMDQiOwogICAgICAtLWx1bW8taWNvbnMtYW5nbGUtbGVmdDogIlxcZWEwNSI7CiAgICAgIC0tbHVtby1pY29ucy1hbmdsZS1yaWdodDogIlxcZWEwNiI7CiAgICAgIC0tbHVtby1pY29ucy1hbmdsZS11cDogIlxcZWEwNyI7CiAgICAgIC0tbHVtby1pY29ucy1hcnJvdy1kb3duOiAiXFxlYTA4IjsKICAgICAgLS1sdW1vLWljb25zLWFycm93LWxlZnQ6ICJcXGVhMDkiOwogICAgICAtLWx1bW8taWNvbnMtYXJyb3ctcmlnaHQ6ICJcXGVhMGEiOwogICAgICAtLWx1bW8taWNvbnMtYXJyb3ctdXA6ICJcXGVhMGIiOwogICAgICAtLWx1bW8taWNvbnMtYmFyLWNoYXJ0OiAiXFxlYTBjIjsKICAgICAgLS1sdW1vLWljb25zLWJlbGw6ICJcXGVhMGQiOwogICAgICAtLWx1bW8taWNvbnMtY2FsZW5kYXI6ICJcXGVhMGUiOwogICAgICAtLWx1bW8taWNvbnMtY2hlY2ttYXJrOiAiXFxlYTBmIjsKICAgICAgLS1sdW1vLWljb25zLWNoZXZyb24tZG93bjogIlxcZWExMCI7CiAgICAgIC0tbHVtby1pY29ucy1jaGV2cm9uLWxlZnQ6ICJcXGVhMTEiOwogICAgICAtLWx1bW8taWNvbnMtY2hldnJvbi1yaWdodDogIlxcZWExMiI7CiAgICAgIC0tbHVtby1pY29ucy1jaGV2cm9uLXVwOiAiXFxlYTEzIjsKICAgICAgLS1sdW1vLWljb25zLWNsb2NrOiAiXFxlYTE0IjsKICAgICAgLS1sdW1vLWljb25zLWNvZzogIlxcZWExNSI7CiAgICAgIC0tbHVtby1pY29ucy1jcm9zczogIlxcZWExNiI7CiAgICAgIC0tbHVtby1pY29ucy1kb3dubG9hZDogIlxcZWExNyI7CiAgICAgIC0tbHVtby1pY29ucy1kcm9wZG93bjogIlxcZWExOCI7CiAgICAgIC0tbHVtby1pY29ucy1lZGl0OiAiXFxlYTE5IjsKICAgICAgLS1sdW1vLWljb25zLWVycm9yOiAiXFxlYTFhIjsKICAgICAgLS1sdW1vLWljb25zLWV5ZTogIlxcZWExYiI7CiAgICAgIC0tbHVtby1pY29ucy1leWUtZGlzYWJsZWQ6ICJcXGVhMWMiOwogICAgICAtLWx1bW8taWNvbnMtbWVudTogIlxcZWExZCI7CiAgICAgIC0tbHVtby1pY29ucy1taW51czogIlxcZWExZSI7CiAgICAgIC0tbHVtby1pY29ucy1vcmRlcmVkLWxpc3Q6ICJcXGVhMWYiOwogICAgICAtLWx1bW8taWNvbnMtcGhvbmU6ICJcXGVhMjAiOwogICAgICAtLWx1bW8taWNvbnMtcGhvdG86ICJcXGVhMjEiOwogICAgICAtLWx1bW8taWNvbnMtcGxheTogIlxcZWEyMiI7CiAgICAgIC0tbHVtby1pY29ucy1wbHVzOiAiXFxlYTIzIjsKICAgICAgLS1sdW1vLWljb25zLXJlZG86ICJcXGVhMjQiOwogICAgICAtLWx1bW8taWNvbnMtcmVsb2FkOiAiXFxlYTI1IjsKICAgICAgLS1sdW1vLWljb25zLXNlYXJjaDogIlxcZWEyNiI7CiAgICAgIC0tbHVtby1pY29ucy11bmRvOiAiXFxlYTI3IjsKICAgICAgLS1sdW1vLWljb25zLXVub3JkZXJlZC1saXN0OiAiXFxlYTI4IjsKICAgICAgLS1sdW1vLWljb25zLXVwbG9hZDogIlxcZWEyOSI7CiAgICAgIC0tbHVtby1pY29ucy11c2VyOiAiXFxlYTJhIjsKICAgIH0KICA8L3N0eWxlPgpgO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoTmNlLmNvbnRlbnQpO3ZhciBZdXI9Q2lgCiAgOmhvc3QgewogICAgLS1sdW1vLXNpemUteHM6IDEuNjI1cmVtOwogICAgLS1sdW1vLXNpemUtczogMS44NzVyZW07CiAgICAtLWx1bW8tc2l6ZS1tOiAyLjI1cmVtOwogICAgLS1sdW1vLXNpemUtbDogMi43NXJlbTsKICAgIC0tbHVtby1zaXplLXhsOiAzLjVyZW07CgogICAgLyogSWNvbnMgKi8KICAgIC0tbHVtby1pY29uLXNpemUtczogMS4yNWVtOwogICAgLS1sdW1vLWljb24tc2l6ZS1tOiAxLjVlbTsKICAgIC0tbHVtby1pY29uLXNpemUtbDogMi4yNWVtOwogICAgLyogRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCiAgICAtLWx1bW8taWNvbi1zaXplOiB2YXIoLS1sdW1vLWljb24tc2l6ZS1tKTsKICB9CmAsRGNlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7RGNlLmlubmVySFRNTD1gPHN0eWxlPiR7WXVyLnRvU3RyaW5nKCkucmVwbGFjZSgiOmhvc3QiLCJodG1sIil9PC9zdHlsZT5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoRGNlLmNvbnRlbnQpO3ZhciBqdXI9Q2lgCiAgOmhvc3QgewogICAgLyogU3F1YXJlICovCiAgICAtLWx1bW8tc3BhY2UteHM6IDAuMjVyZW07CiAgICAtLWx1bW8tc3BhY2UtczogMC41cmVtOwogICAgLS1sdW1vLXNwYWNlLW06IDFyZW07CiAgICAtLWx1bW8tc3BhY2UtbDogMS41cmVtOwogICAgLS1sdW1vLXNwYWNlLXhsOiAyLjVyZW07CgogICAgLyogV2lkZSAqLwogICAgLS1sdW1vLXNwYWNlLXdpZGUteHM6IGNhbGModmFyKC0tbHVtby1zcGFjZS14cykgLyAyKSB2YXIoLS1sdW1vLXNwYWNlLXhzKTsKICAgIC0tbHVtby1zcGFjZS13aWRlLXM6IGNhbGModmFyKC0tbHVtby1zcGFjZS1zKSAvIDIpIHZhcigtLWx1bW8tc3BhY2Utcyk7CiAgICAtLWx1bW8tc3BhY2Utd2lkZS1tOiBjYWxjKHZhcigtLWx1bW8tc3BhY2UtbSkgLyAyKSB2YXIoLS1sdW1vLXNwYWNlLW0pOwogICAgLS1sdW1vLXNwYWNlLXdpZGUtbDogY2FsYyh2YXIoLS1sdW1vLXNwYWNlLWwpIC8gMikgdmFyKC0tbHVtby1zcGFjZS1sKTsKICAgIC0tbHVtby1zcGFjZS13aWRlLXhsOiBjYWxjKHZhcigtLWx1bW8tc3BhY2UteGwpIC8gMikgdmFyKC0tbHVtby1zcGFjZS14bCk7CgogICAgLyogVGFsbCAqLwogICAgLS1sdW1vLXNwYWNlLXRhbGwteHM6IHZhcigtLWx1bW8tc3BhY2UteHMpIGNhbGModmFyKC0tbHVtby1zcGFjZS14cykgLyAyKTsKICAgIC0tbHVtby1zcGFjZS10YWxsLXM6IHZhcigtLWx1bW8tc3BhY2UtcykgY2FsYyh2YXIoLS1sdW1vLXNwYWNlLXMpIC8gMik7CiAgICAtLWx1bW8tc3BhY2UtdGFsbC1tOiB2YXIoLS1sdW1vLXNwYWNlLW0pIGNhbGModmFyKC0tbHVtby1zcGFjZS1tKSAvIDIpOwogICAgLS1sdW1vLXNwYWNlLXRhbGwtbDogdmFyKC0tbHVtby1zcGFjZS1sKSBjYWxjKHZhcigtLWx1bW8tc3BhY2UtbCkgLyAyKTsKICAgIC0tbHVtby1zcGFjZS10YWxsLXhsOiB2YXIoLS1sdW1vLXNwYWNlLXhsKSBjYWxjKHZhcigtLWx1bW8tc3BhY2UteGwpIC8gMik7CiAgfQpgLE9jZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO09jZS5pbm5lckhUTUw9YDxzdHlsZT4ke2p1ci50b1N0cmluZygpLnJlcGxhY2UoIjpob3N0IiwiaHRtbCIpfTwvc3R5bGU+YDtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKE9jZS5jb250ZW50KTt2YXIgWHVyPUNpYAogIDpob3N0IHsKICAgIC8qIEJvcmRlciByYWRpdXMgKi8KICAgIC0tbHVtby1ib3JkZXItcmFkaXVzLXM6IDAuMjVlbTsgLyogQ2hlY2tib3gsIGJhZGdlLCBkYXRlLXBpY2tlciB5ZWFyIGluZGljYXRvciwgZXRjICovCiAgICAtLWx1bW8tYm9yZGVyLXJhZGl1cy1tOiB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMsIDAuMjVlbSk7IC8qIEJ1dHRvbiwgdGV4dCBmaWVsZCwgbWVudSBvdmVybGF5LCBldGMgKi8KICAgIC0tbHVtby1ib3JkZXItcmFkaXVzLWw6IDAuNWVtOyAvKiBEaWFsb2csIG5vdGlmaWNhdGlvbiwgZXRjICovCiAgICAtLWx1bW8tYm9yZGVyLXJhZGl1czogMC4yNWVtOyAvKiBEZXByZWNhdGVkICovCgogICAgLyogU2hhZG93ICovCiAgICAtLWx1bW8tYm94LXNoYWRvdy14czogMCAxcHggNHB4IC0xcHggdmFyKC0tbHVtby1zaGFkZS01MHBjdCk7CiAgICAtLWx1bW8tYm94LXNoYWRvdy1zOiAwIDJweCA0cHggLTFweCB2YXIoLS1sdW1vLXNoYWRlLTIwcGN0KSwgMCAzcHggMTJweCAtMXB4IHZhcigtLWx1bW8tc2hhZGUtMzBwY3QpOwogICAgLS1sdW1vLWJveC1zaGFkb3ctbTogMCAycHggNnB4IC0xcHggdmFyKC0tbHVtby1zaGFkZS0yMHBjdCksIDAgOHB4IDI0cHggLTRweCB2YXIoLS1sdW1vLXNoYWRlLTQwcGN0KTsKICAgIC0tbHVtby1ib3gtc2hhZG93LWw6IDAgM3B4IDE4cHggLTJweCB2YXIoLS1sdW1vLXNoYWRlLTIwcGN0KSwgMCAxMnB4IDQ4cHggLTZweCB2YXIoLS1sdW1vLXNoYWRlLTQwcGN0KTsKICAgIC0tbHVtby1ib3gtc2hhZG93LXhsOiAwIDRweCAyNHB4IC0zcHggdmFyKC0tbHVtby1zaGFkZS0yMHBjdCksIDAgMThweCA2NHB4IC04cHggdmFyKC0tbHVtby1zaGFkZS00MHBjdCk7CgogICAgLyogQ2xpY2thYmxlIGVsZW1lbnQgY3Vyc29yICovCiAgICAtLWx1bW8tY2xpY2thYmxlLWN1cnNvcjogZGVmYXVsdDsKICB9CmAsemNlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7emNlLmlubmVySFRNTD1gPHN0eWxlPiR7WHVyLnRvU3RyaW5nKCkucmVwbGFjZSgiOmhvc3QiLCJodG1sIil9PC9zdHlsZT5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoemNlLmNvbnRlbnQpO3ZhciAkdXI9Q2lgCiAgOmhvc3QgewogICAgLyogcHJldHRpZXItaWdub3JlICovCiAgICAtLWx1bW8tZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1JvYm90bycsICdTZWdvZSBVSScsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWYsICdBcHBsZSBDb2xvciBFbW9qaScsICdTZWdvZSBVSSBFbW9qaScsICdTZWdvZSBVSSBTeW1ib2wnOwoKICAgIC8qIEZvbnQgc2l6ZXMgKi8KICAgIC0tbHVtby1mb250LXNpemUteHhzOiAwLjc1cmVtOwogICAgLS1sdW1vLWZvbnQtc2l6ZS14czogMC44MTI1cmVtOwogICAgLS1sdW1vLWZvbnQtc2l6ZS1zOiAwLjg3NXJlbTsKICAgIC0tbHVtby1mb250LXNpemUtbTogMXJlbTsKICAgIC0tbHVtby1mb250LXNpemUtbDogMS4xMjVyZW07CiAgICAtLWx1bW8tZm9udC1zaXplLXhsOiAxLjM3NXJlbTsKICAgIC0tbHVtby1mb250LXNpemUteHhsOiAxLjc1cmVtOwogICAgLS1sdW1vLWZvbnQtc2l6ZS14eHhsOiAyLjVyZW07CgogICAgLyogTGluZSBoZWlnaHRzICovCiAgICAtLWx1bW8tbGluZS1oZWlnaHQteHM6IDEuMjU7CiAgICAtLWx1bW8tbGluZS1oZWlnaHQtczogMS4zNzU7CiAgICAtLWx1bW8tbGluZS1oZWlnaHQtbTogMS42MjU7CiAgfQpgLEZjZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO0ZjZS5pbm5lckhUTUw9YDxzdHlsZT4keyR1ci50b1N0cmluZygpLnJlcGxhY2UoIjpob3N0IiwiaHRtbCIpfTwvc3R5bGU+YDtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKEZjZS5jb250ZW50KTt2YXIgS3VyPUNpYAogIGh0bWwgewogICAgZm9udC1mYW1pbHk6IHZhcigtLWx1bW8tZm9udC1mYW1pbHkpOwogICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZSwgdmFyKC0tbHVtby1mb250LXNpemUtbSkpOwogICAgbGluZS1oZWlnaHQ6IHZhcigtLWx1bW8tbGluZS1oZWlnaHQtbSk7CiAgICAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7CiAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7CiAgfQoKICAvKiBDYW7igJl0IGNvbWJpbmUgd2l0aCB0aGUgYWJvdmUgc2VsZWN0b3IgYmVjYXVzZSB0aGF0IGRvZXNu4oCZdCB3b3JrIGluIGJyb3dzZXJzIHdpdGhvdXQgbmF0aXZlIHNoYWRvdyBkb20gKi8KICA6aG9zdCB7CiAgICBmb250LWZhbWlseTogdmFyKC0tbHVtby1mb250LWZhbWlseSk7CiAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLCB2YXIoLS1sdW1vLWZvbnQtc2l6ZS1tKSk7CiAgICBsaW5lLWhlaWdodDogdmFyKC0tbHVtby1saW5lLWhlaWdodC1tKTsKICAgIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsKICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwogICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTsKICB9CgogIHNtYWxsLAogIFt0aGVtZX49J2ZvbnQtc2l6ZS1zJ10gewogICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS1zKTsKICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1sdW1vLWxpbmUtaGVpZ2h0LXMpOwogIH0KCiAgW3RoZW1lfj0nZm9udC1zaXplLXhzJ10gewogICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS14cyk7CiAgICBsaW5lLWhlaWdodDogdmFyKC0tbHVtby1saW5lLWhlaWdodC14cyk7CiAgfQoKICBoMSwKICBoMiwKICBoMywKICBoNCwKICBoNSwKICBoNiB7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgbGluZS1oZWlnaHQ6IHZhcigtLWx1bW8tbGluZS1oZWlnaHQteHMpOwogICAgbWFyZ2luLXRvcDogMS4yNWVtOwogIH0KCiAgaDEgewogICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS14eHhsKTsKICAgIG1hcmdpbi1ib3R0b206IDAuNzVlbTsKICB9CgogIGgyIHsKICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUteHhsKTsKICAgIG1hcmdpbi1ib3R0b206IDAuNWVtOwogIH0KCiAgaDMgewogICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS14bCk7CiAgICBtYXJnaW4tYm90dG9tOiAwLjVlbTsKICB9CgogIGg0IHsKICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUtbCk7CiAgICBtYXJnaW4tYm90dG9tOiAwLjVlbTsKICB9CgogIGg1IHsKICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUtbSk7CiAgICBtYXJnaW4tYm90dG9tOiAwLjI1ZW07CiAgfQoKICBoNiB7CiAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXhzKTsKICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMDNlbTsKICB9CgogIHAsCiAgYmxvY2txdW90ZSB7CiAgICBtYXJnaW4tdG9wOiAwLjVlbTsKICAgIG1hcmdpbi1ib3R0b206IDAuNzVlbTsKICB9CgogIGEgewogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogIH0KCiAgYTpob3ZlciB7CiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICB9CgogIGhyIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgYWxpZ24tc2VsZjogc3RyZXRjaDsKICAgIGhlaWdodDogMXB4OwogICAgYm9yZGVyOiAwOwogICAgcGFkZGluZzogMDsKICAgIG1hcmdpbjogdmFyKC0tbHVtby1zcGFjZS1zKSBjYWxjKHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1tKSAvIDIpOwogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC0xMHBjdCk7CiAgfQoKICBibG9ja3F1b3RlIHsKICAgIGJvcmRlci1sZWZ0OiAycHggc29saWQgdmFyKC0tbHVtby1jb250cmFzdC0zMHBjdCk7CiAgfQoKICBiLAogIHN0cm9uZyB7CiAgICBmb250LXdlaWdodDogNjAwOwogIH0KCiAgLyogUlRMIHNwZWNpZmljIHN0eWxlcyAqLwoKICBibG9ja3F1b3RlW2Rpcj0ncnRsJ10gewogICAgYm9yZGVyLWxlZnQ6IG5vbmU7CiAgICBib3JkZXItcmlnaHQ6IDJweCBzb2xpZCB2YXIoLS1sdW1vLWNvbnRyYXN0LTMwcGN0KTsKICB9CmA7amMoIiIsS3VyLHttb2R1bGVJZDoibHVtby10eXBvZ3JhcGh5In0pO2pjKCJ2YWFkaW4tY2hlY2tib3giLENpYAogICAgOmhvc3QgewogICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwogICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICBvdXRsaW5lOiBub25lOwogICAgfQoKICAgIFtwYXJ0PSdsYWJlbCddOm5vdChbZW1wdHldKSB7CiAgICAgIG1hcmdpbjogMC4xODc1ZW0gMC44NzVlbSAwLjE4NzVlbSAwLjM3NWVtOwogICAgfQoKICAgIFtwYXJ0PSdjaGVja2JveCddIHsKICAgICAgd2lkdGg6IGNhbGMoMWVtICsgMnB4KTsKICAgICAgaGVpZ2h0OiBjYWxjKDFlbSArIDJweCk7CiAgICAgIG1hcmdpbjogMC4xODc1ZW07CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLXMpOwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTIwcGN0KTsKICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgY3ViaWMtYmV6aWVyKDAuMTIsIDAuMzIsIDAuNTQsIDIpLCBiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzOwogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgbGluZS1oZWlnaHQ6IDEuMjsKICAgIH0KCiAgICA6aG9zdChbaW5kZXRlcm1pbmF0ZV0pIFtwYXJ0PSdjaGVja2JveCddLAogICAgOmhvc3QoW2NoZWNrZWRdKSBbcGFydD0nY2hlY2tib3gnXSB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tcHJpbWFyeS1jb2xvcik7CiAgICB9CgogICAgLyogTmVlZGVkIHRvIGFsaWduIHRoZSBjaGVja2JveCBuaWNlbHkgb24gdGhlIGJhc2VsaW5lICovCiAgICBbcGFydD0nY2hlY2tib3gnXTo6YmVmb3JlIHsKICAgICAgY29udGVudDogJ1xcMjAwMyc7CiAgICB9CgogICAgLyogQ2hlY2ttYXJrICovCiAgICBbcGFydD0nY2hlY2tib3gnXTo6YWZ0ZXIgewogICAgICBjb250ZW50OiAnJzsKICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB3aWR0aDogMDsKICAgICAgaGVpZ2h0OiAwOwogICAgICBib3JkZXI6IDAgc29saWQgdmFyKC0tbHVtby1wcmltYXJ5LWNvbnRyYXN0LWNvbG9yKTsKICAgICAgYm9yZGVyLXdpZHRoOiAwLjE4NzVlbSAwIDAgMC4xODc1ZW07CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDAgMDsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDAuODEyNWVtOwogICAgICBsZWZ0OiAwLjVlbTsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjU1KSByb3RhdGUoLTEzNWRlZyk7CiAgICAgIG9wYWNpdHk6IDA7CiAgICB9CgogICAgOmhvc3QoW2NoZWNrZWRdKSBbcGFydD0nY2hlY2tib3gnXTo6YWZ0ZXIgewogICAgICBvcGFjaXR5OiAxOwogICAgICB3aWR0aDogMC42MjVlbTsKICAgICAgaGVpZ2h0OiAxLjA2MjVlbTsKICAgIH0KCiAgICAvKiBJbmRldGVybWluYXRlIGNoZWNrbWFyayAqLwogICAgOmhvc3QoW2luZGV0ZXJtaW5hdGVdKSBbcGFydD0nY2hlY2tib3gnXTo6YWZ0ZXIgewogICAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICAgIG9wYWNpdHk6IDE7CiAgICAgIHRvcDogNDUlOwogICAgICBoZWlnaHQ6IDEwJTsKICAgICAgbGVmdDogMjIlOwogICAgICByaWdodDogMjIlOwogICAgICB3aWR0aDogYXV0bzsKICAgICAgYm9yZGVyOiAwOwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLXByaW1hcnktY29udHJhc3QtY29sb3IpOwogICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMjVzOwogICAgfQoKICAgIC8qIEZvY3VzIHJpbmcgKi8KICAgIDpob3N0KFtmb2N1cy1yaW5nXSkgW3BhcnQ9J2NoZWNrYm94J10gewogICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggdmFyKC0tbHVtby1wcmltYXJ5LWNvbG9yLTUwcGN0KTsKICAgIH0KCiAgICAvKiBEaXNhYmxlZCAqLwogICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgY29sb3I6IHZhcigtLWx1bW8tZGlzYWJsZWQtdGV4dC1jb2xvcik7CiAgICB9CgogICAgOmhvc3QoW2Rpc2FibGVkXSkgW3BhcnQ9J2xhYmVsJ10gOjpzbG90dGVkKCopIHsKICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICB9CgogICAgOmhvc3QoW2Rpc2FibGVkXSkgW3BhcnQ9J2NoZWNrYm94J10gewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTEwcGN0KTsKICAgIH0KCiAgICA6aG9zdChbZGlzYWJsZWRdKSBbcGFydD0nY2hlY2tib3gnXTo6YWZ0ZXIgewogICAgICBib3JkZXItY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMzBwY3QpOwogICAgfQoKICAgIDpob3N0KFtpbmRldGVybWluYXRlXVtkaXNhYmxlZF0pIFtwYXJ0PSdjaGVja2JveCddOjphZnRlciB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMzBwY3QpOwogICAgfQoKICAgIC8qIFJUTCBzcGVjaWZpYyBzdHlsZXMgKi8KICAgIDpob3N0KFtkaXI9J3J0bCddKSBbcGFydD0nbGFiZWwnXTpub3QoW2VtcHR5XSkgewogICAgICBtYXJnaW46IDAuMTg3NWVtIDAuMzc1ZW0gMC4xODc1ZW0gMC44NzVlbTsKICAgIH0KCiAgICAvKiBUcmFuc2l0aW9uIHRoZSBjaGVja21hcmsgaWYgYWN0aXZhdGVkIHdpdGggdGhlIG1vdXNlIChkaXNhYmxlZCBmb3IgZ3JpZCBzZWxlY3QtYWxsIHRoaXMgd2F5KSAqLwogICAgOmhvc3QoOmhvdmVyKSBbcGFydD0nY2hlY2tib3gnXTo6YWZ0ZXIgewogICAgICB0cmFuc2l0aW9uOiB3aWR0aCAwLjFzLCBoZWlnaHQgMC4yNXM7CiAgICB9CgogICAgLyogVXNlZCBmb3IgYWN0aXZhdGlvbiAiaGFsbyIgKi8KICAgIFtwYXJ0PSdjaGVja2JveCddOjpiZWZvcmUgewogICAgICBjb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgYm9yZGVyLXJhZGl1czogaW5oZXJpdDsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjQpOwogICAgICBvcGFjaXR5OiAwOwogICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4xcywgb3BhY2l0eSAwLjhzOwogICAgfQoKICAgIC8qIEhvdmVyICovCiAgICA6aG9zdCg6bm90KFtjaGVja2VkXSk6bm90KFtpbmRldGVybWluYXRlXSk6bm90KFtkaXNhYmxlZF0pOmhvdmVyKSBbcGFydD0nY2hlY2tib3gnXSB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMzBwY3QpOwogICAgfQoKICAgIC8qIERpc2FibGUgaG92ZXIgZm9yIHRvdWNoIGRldmljZXMgKi8KICAgIEBtZWRpYSAocG9pbnRlcjogY29hcnNlKSB7CiAgICAgIDpob3N0KDpub3QoW2NoZWNrZWRdKTpub3QoW2luZGV0ZXJtaW5hdGVdKTpub3QoW2Rpc2FibGVkXSk6aG92ZXIpIFtwYXJ0PSdjaGVja2JveCddIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTIwcGN0KTsKICAgICAgfQogICAgfQoKICAgIC8qIEFjdGl2ZSAqLwogICAgOmhvc3QoW2FjdGl2ZV0pIFtwYXJ0PSdjaGVja2JveCddIHsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjkpOwogICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjA1czsKICAgIH0KCiAgICA6aG9zdChbYWN0aXZlXVtjaGVja2VkXSkgW3BhcnQ9J2NoZWNrYm94J10gewogICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMSk7CiAgICB9CgogICAgOmhvc3QoW2FjdGl2ZV06bm90KFtjaGVja2VkXSkpIFtwYXJ0PSdjaGVja2JveCddOjpiZWZvcmUgewogICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjAxcywgMC4wMXM7CiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7CiAgICAgIG9wYWNpdHk6IDAuNDsKICAgIH0KICBgLHttb2R1bGVJZDoibHVtby1jaGVja2JveCJ9KTt2YXIgQmNlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57dGhlbWU6e3R5cGU6U3RyaW5nLHJlYWRPbmx5OiEwfX19YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHIsbixpKXtzdXBlci5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2socixuLGkpLHI9PT0idGhlbWUiJiZ0aGlzLl9zZXRUaGVtZShpKX19O3ZhciBYSD1lPT5jbGFzcyBleHRlbmRzIEJjZShlKXtzdGF0aWMgZmluYWxpemUoKXtzdXBlci5maW5hbGl6ZSgpO2xldCByPXRoaXMucHJvdG90eXBlLl90ZW1wbGF0ZSxuPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzLnByb3RvdHlwZSkuX3RlbXBsYXRlO24mJkFycmF5LmZyb20obi5jb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoInN0eWxlW2luY2x1ZGVdIikpLmZvckVhY2goaT0+e3RoaXMuX2luY2x1ZGVTdHlsZShpLmdldEF0dHJpYnV0ZSgiaW5jbHVkZSIpLHIpfSksdGhpcy5faW5jbHVkZU1hdGNoaW5nVGhlbWVzKHIpfXN0YXRpYyBfaW5jbHVkZU1hdGNoaW5nVGhlbWVzKHIpe2xldCBpPW91LnByb3RvdHlwZS5tb2R1bGVzLG89ITEsYT10aGlzLmlzKyItZGVmYXVsdC10aGVtZSI7T2JqZWN0LmtleXMoaSkuc29ydCgocyxsKT0+e2xldCBjPXMuaW5kZXhPZigidmFhZGluLSIpPT09MCx1PWwuaW5kZXhPZigidmFhZGluLSIpPT09MCxoPVsibHVtby0iLCJtYXRlcmlhbC0iXSxmPWguZmlsdGVyKGQ9PnMuaW5kZXhPZihkKT09PTApLmxlbmd0aD4wLHA9aC5maWx0ZXIoZD0+bC5pbmRleE9mKGQpPT09MCkubGVuZ3RoPjA7cmV0dXJuIGMhPT11P2M/LTE6MTpmIT09cD9mPy0xOjE6MH0pLmZvckVhY2gocz0+e2lmKHMhPT1hKXtsZXQgbD1pW3NdLmdldEF0dHJpYnV0ZSgidGhlbWUtZm9yIik7bCYmbC5zcGxpdCgiICIpLmZvckVhY2goYz0+e25ldyBSZWdFeHAoIl4iK2Muc3BsaXQoIioiKS5qb2luKCIuKiIpKyIkIikudGVzdCh0aGlzLmlzKSYmKG89ITAsdGhpcy5faW5jbHVkZVN0eWxlKHMscikpfSl9fSksIW8mJmlbYV0mJnRoaXMuX2luY2x1ZGVTdHlsZShhLHIpfXN0YXRpYyBfaW5jbHVkZVN0eWxlKHIsbil7aWYobiYmIW4uY29udGVudC5xdWVyeVNlbGVjdG9yKGBzdHlsZVtpbmNsdWRlPSIke3J9Il1gKSl7bGV0IGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtpLnNldEF0dHJpYnV0ZSgiaW5jbHVkZSIsciksbi5jb250ZW50LmFwcGVuZENoaWxkKGkpfX19O3ZhciBrY3Q9ITE7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCgpPT57a2N0PSEwfSx7Y2FwdHVyZTohMH0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCgpPT57a2N0PSExfSx7Y2FwdHVyZTohMH0pO3ZhciBadXI9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnt0YWJpbmRleDp7dHlwZTpOdW1iZXIsdmFsdWU6MCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsb2JzZXJ2ZXI6Il90YWJpbmRleENoYW5nZWQifX19fSxIY2U9ZT0+Y2xhc3MgZXh0ZW5kcyBadXIoZSl7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2F1dG9mb2N1czp7dHlwZTpCb29sZWFufSxfcHJldmlvdXNUYWJJbmRleDp7dHlwZTpOdW1iZXJ9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9kaXNhYmxlZENoYW5nZWQiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sX2lzU2hpZnRUYWJiaW5nOnt0eXBlOkJvb2xlYW59fX1yZWFkeSgpe3RoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIscj0+e3IuY29tcG9zZWRQYXRoKClbMF09PT10aGlzP3RoaXMuY29udGFpbnMoci5yZWxhdGVkVGFyZ2V0KXx8dGhpcy5fZm9jdXMoKTpyLmNvbXBvc2VkUGF0aCgpLmluZGV4T2YodGhpcy5mb2N1c0VsZW1lbnQpIT09LTEmJiF0aGlzLmRpc2FibGVkJiZ0aGlzLl9zZXRGb2N1c2VkKCEwKX0pLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNvdXQiLCgpPT50aGlzLl9zZXRGb2N1c2VkKCExKSksc3VwZXIucmVhZHkoKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHI9Pnshci5kZWZhdWx0UHJldmVudGVkJiZyLmtleUNvZGU9PT05JiZyLnNoaWZ0S2V5JiYodGhpcy5faXNTaGlmdFRhYmJpbmc9ITAsSFRNTEVsZW1lbnQucHJvdG90eXBlLmZvY3VzLmFwcGx5KHRoaXMpLHRoaXMuX3NldEZvY3VzZWQoITEpLHNldFRpbWVvdXQoKCk9PnRoaXMuX2lzU2hpZnRUYWJiaW5nPSExLDApKX0pLHRoaXMuYXV0b2ZvY3VzJiYhdGhpcy5kaXNhYmxlZCYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuX2ZvY3VzKCksdGhpcy5fc2V0Rm9jdXNlZCghMCksdGhpcy5zZXRBdHRyaWJ1dGUoImZvY3VzLXJpbmciLCIiKX0pfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmhhc0F0dHJpYnV0ZSgiZm9jdXNlZCIpJiZ0aGlzLl9zZXRGb2N1c2VkKCExKX1fc2V0Rm9jdXNlZChyKXtyP3RoaXMuc2V0QXR0cmlidXRlKCJmb2N1c2VkIiwiIik6dGhpcy5yZW1vdmVBdHRyaWJ1dGUoImZvY3VzZWQiKSxyJiZrY3Q/dGhpcy5zZXRBdHRyaWJ1dGUoImZvY3VzLXJpbmciLCIiKTp0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiZm9jdXMtcmluZyIpfWdldCBmb2N1c0VsZW1lbnQoKXtyZXR1cm4gd2luZG93LmNvbnNvbGUud2FybihgUGxlYXNlIGltcGxlbWVudCB0aGUgJ2ZvY3VzRWxlbWVudCcgcHJvcGVydHkgaW4gPCR7dGhpcy5sb2NhbE5hbWV9PmApLHRoaXN9X2ZvY3VzKCl7IXRoaXMuZm9jdXNFbGVtZW50fHx0aGlzLl9pc1NoaWZ0VGFiYmluZ3x8KHRoaXMuZm9jdXNFbGVtZW50LmZvY3VzKCksdGhpcy5fc2V0Rm9jdXNlZCghMCkpfWZvY3VzKCl7IXRoaXMuZm9jdXNFbGVtZW50fHx0aGlzLmRpc2FibGVkfHwodGhpcy5mb2N1c0VsZW1lbnQuZm9jdXMoKSx0aGlzLl9zZXRGb2N1c2VkKCEwKSl9Ymx1cigpeyF0aGlzLmZvY3VzRWxlbWVudHx8KHRoaXMuZm9jdXNFbGVtZW50LmJsdXIoKSx0aGlzLl9zZXRGb2N1c2VkKCExKSl9X2Rpc2FibGVkQ2hhbmdlZChyKXt0aGlzLmZvY3VzRWxlbWVudC5kaXNhYmxlZD1yLHI/KHRoaXMuYmx1cigpLHRoaXMuX3ByZXZpb3VzVGFiSW5kZXg9dGhpcy50YWJpbmRleCx0aGlzLnRhYmluZGV4PS0xLHRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWRpc2FibGVkIiwidHJ1ZSIpKToodHlwZW9mIHRoaXMuX3ByZXZpb3VzVGFiSW5kZXghPSJ1bmRlZmluZWQiJiYodGhpcy50YWJpbmRleD10aGlzLl9wcmV2aW91c1RhYkluZGV4KSx0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1kaXNhYmxlZCIpKX1fdGFiaW5kZXhDaGFuZ2VkKHIpe3IhPT12b2lkIDAmJih0aGlzLmZvY3VzRWxlbWVudC50YWJJbmRleD1yKSx0aGlzLmRpc2FibGVkJiZ0aGlzLnRhYmluZGV4JiYodGhpcy50YWJpbmRleCE9PS0xJiYodGhpcy5fcHJldmlvdXNUYWJJbmRleD10aGlzLnRhYmluZGV4KSx0aGlzLnRhYmluZGV4PXI9dm9pZCAwKX1jbGljaygpe3RoaXMuZGlzYWJsZWR8fHN1cGVyLmNsaWNrKCl9fTt2YXIgSnVyPS9cL1wqXCpccyt2YWFkaW4tZGV2LW1vZGU6c3RhcnQoW1xzXFNdKil2YWFkaW4tZGV2LW1vZGU6ZW5kXHMrXCpcKlwvL2ksJEg9d2luZG93LlZhYWRpbiYmd2luZG93LlZhYWRpbi5GbG93JiZ3aW5kb3cuVmFhZGluLkZsb3cuY2xpZW50cztmdW5jdGlvbiBRdXIoKXtmdW5jdGlvbiBlKCl7cmV0dXJuITB9cmV0dXJuIFZjZShlKX1mdW5jdGlvbiB0aHIoKXt0cnl7cmV0dXJuIGVocigpPyEwOnJocigpPyRIPyFuaHIoKTohUXVyKCk6ITF9Y2F0Y2goZSl7cmV0dXJuITF9fWZ1bmN0aW9uIGVocigpe3JldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidmFhZGluLmRldmVsb3BtZW50bW9kZS5mb3JjZSIpfWZ1bmN0aW9uIHJocigpe3JldHVyblsibG9jYWxob3N0IiwiMTI3LjAuMC4xIl0uaW5kZXhPZih3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUpPj0wfWZ1bmN0aW9uIG5ocigpe3JldHVybiEhKCRIJiZPYmplY3Qua2V5cygkSCkubWFwKHQ9PiRIW3RdKS5maWx0ZXIodD0+dC5wcm9kdWN0aW9uTW9kZSkubGVuZ3RoPjApfWZ1bmN0aW9uIFZjZShlLHQpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXJldHVybjtsZXQgcj1KdXIuZXhlYyhlLnRvU3RyaW5nKCkpO2lmKHIpdHJ5e2U9bmV3IEZ1bmN0aW9uKHJbMV0pfWNhdGNoKG4pe2NvbnNvbGUubG9nKCJ2YWFkaW4tZGV2ZWxvcG1lbnQtbW9kZS1kZXRlY3RvcjogdW5jb21tZW50QW5kUnVuKCkgZmFpbGVkIixuKX1yZXR1cm4gZSh0KX13aW5kb3cuVmFhZGluPXdpbmRvdy5WYWFkaW58fHt9O3ZhciBSY3Q9ZnVuY3Rpb24oZSx0KXtpZih3aW5kb3cuVmFhZGluLmRldmVsb3BtZW50TW9kZSlyZXR1cm4gVmNlKGUsdCl9O3dpbmRvdy5WYWFkaW4uZGV2ZWxvcG1lbnRNb2RlPT09dm9pZCAwJiYod2luZG93LlZhYWRpbi5kZXZlbG9wbWVudE1vZGU9dGhyKCkpO2Z1bmN0aW9uIGlocigpe312YXIgVWNlPWZ1bmN0aW9uKCl7aWYodHlwZW9mIFJjdD09ImZ1bmN0aW9uIilyZXR1cm4gUmN0KGlocil9O3ZhciBfMz1jbGFzc3tzdGF0aWMgZGV0ZWN0U2Nyb2xsVHlwZSgpe2xldCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3QudGV4dENvbnRlbnQ9IkFCQ0QiLHQuZGlyPSJydGwiLHQuc3R5bGUuZm9udFNpemU9IjE0cHgiLHQuc3R5bGUud2lkdGg9IjRweCIsdC5zdHlsZS5oZWlnaHQ9IjFweCIsdC5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHQuc3R5bGUudG9wPSItMTAwMHB4Iix0LnN0eWxlLm92ZXJmbG93PSJzY3JvbGwiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodCk7bGV0IHI9InJldmVyc2UiO3JldHVybiB0LnNjcm9sbExlZnQ+MD9yPSJkZWZhdWx0IjoodC5zY3JvbGxMZWZ0PTIsdC5zY3JvbGxMZWZ0PDImJihyPSJuZWdhdGl2ZSIpKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHQpLHJ9c3RhdGljIGdldE5vcm1hbGl6ZWRTY3JvbGxMZWZ0KHQscixuKXtsZXR7c2Nyb2xsTGVmdDppfT1uO2lmKHIhPT0icnRsInx8IXQpcmV0dXJuIGk7c3dpdGNoKHQpe2Nhc2UibmVnYXRpdmUiOnJldHVybiBuLnNjcm9sbFdpZHRoLW4uY2xpZW50V2lkdGgraTtjYXNlInJldmVyc2UiOnJldHVybiBuLnNjcm9sbFdpZHRoLW4uY2xpZW50V2lkdGgtaX1yZXR1cm4gaX1zdGF0aWMgc2V0Tm9ybWFsaXplZFNjcm9sbExlZnQodCxyLG4saSl7aWYociE9PSJydGwifHwhdCl7bi5zY3JvbGxMZWZ0PWk7cmV0dXJufXN3aXRjaCh0KXtjYXNlIm5lZ2F0aXZlIjpuLnNjcm9sbExlZnQ9bi5jbGllbnRXaWR0aC1uLnNjcm9sbFdpZHRoK2k7YnJlYWs7Y2FzZSJyZXZlcnNlIjpuLnNjcm9sbExlZnQ9bi5zY3JvbGxXaWR0aC1uLmNsaWVudFdpZHRoLWk7YnJlYWs7ZGVmYXVsdDpuLnNjcm9sbExlZnQ9aTticmVha319fTt2YXIgVDA9W10sb2hyPWZ1bmN0aW9uKCl7bGV0IGU9RGN0KCk7VDAuZm9yRWFjaCh0PT57TmN0KHQsZSl9KX0sS0gsYWhyPW5ldyBNdXRhdGlvbk9ic2VydmVyKG9ocik7YWhyLm9ic2VydmUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHthdHRyaWJ1dGVzOiEwLGF0dHJpYnV0ZUZpbHRlcjpbImRpciJdfSk7dmFyIE5jdD1mdW5jdGlvbihlLHQscj1lLmdldEF0dHJpYnV0ZSgiZGlyIikpe3Q/ZS5zZXRBdHRyaWJ1dGUoImRpciIsdCk6ciE9bnVsbCYmZS5yZW1vdmVBdHRyaWJ1dGUoImRpciIpfSxEY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGlyIil9LFpIPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57ZGlyOnt0eXBlOlN0cmluZyx2YWx1ZToiIixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9fX1zdGF0aWMgZmluYWxpemUoKXtzdXBlci5maW5hbGl6ZSgpLEtIfHwoS0g9XzMuZGV0ZWN0U2Nyb2xsVHlwZSgpKX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5oYXNBdHRyaWJ1dGUoImRpciIpfHwodGhpcy5fX3N1YnNjcmliZSgpLE5jdCh0aGlzLERjdCgpLG51bGwpKX1hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2socixuLGkpe2lmKHN1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhyLG4saSksciE9PSJkaXIiKXJldHVybjtsZXQgbz1EY3QoKSxhPWk9PT1vJiZUMC5pbmRleE9mKHRoaXMpPT09LTEscz0haSYmbiYmVDAuaW5kZXhPZih0aGlzKT09PS0xO2F8fHM/KHRoaXMuX19zdWJzY3JpYmUoKSxOY3QodGhpcyxvLGkpKTppIT09byYmbj09PW8mJnRoaXMuX19zdWJzY3JpYmUoITEpfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9fc3Vic2NyaWJlKCExKSx0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiZGlyIil9X3ZhbHVlVG9Ob2RlQXR0cmlidXRlKHIsbixpKXtpPT09ImRpciImJm49PT0iIiYmIXIuaGFzQXR0cmlidXRlKCJkaXIiKXx8c3VwZXIuX3ZhbHVlVG9Ob2RlQXR0cmlidXRlKHIsbixpKX1fYXR0cmlidXRlVG9Qcm9wZXJ0eShyLG4saSl7cj09PSJkaXIiJiYhbj90aGlzLmRpcj0iIjpzdXBlci5fYXR0cmlidXRlVG9Qcm9wZXJ0eShyLG4saSl9X19zdWJzY3JpYmUocj0hMCl7cj9UMC5pbmRleE9mKHRoaXMpPT09LTEmJlQwLnB1c2godGhpcyk6VDAuaW5kZXhPZih0aGlzKT4tMSYmVDAuc3BsaWNlKFQwLmluZGV4T2YodGhpcyksMSl9X19nZXROb3JtYWxpemVkU2Nyb2xsTGVmdChyKXtyZXR1cm4gXzMuZ2V0Tm9ybWFsaXplZFNjcm9sbExlZnQoS0gsdGhpcy5nZXRBdHRyaWJ1dGUoImRpciIpfHwibHRyIixyKX1fX3NldE5vcm1hbGl6ZWRTY3JvbGxMZWZ0KHIsbil7cmV0dXJuIF8zLnNldE5vcm1hbGl6ZWRTY3JvbGxMZWZ0KEtILHRoaXMuZ2V0QXR0cmlidXRlKCJkaXIiKXx8Imx0ciIscixuKX19O3dpbmRvdy5WYWFkaW49d2luZG93LlZhYWRpbnx8e307d2luZG93LlZhYWRpbi5yZWdpc3RyYXRpb25zPXdpbmRvdy5WYWFkaW4ucmVnaXN0cmF0aW9uc3x8W107d2luZG93LlZhYWRpbi5kZXZlbG9wbWVudE1vZGVDYWxsYmFjaz13aW5kb3cuVmFhZGluLmRldmVsb3BtZW50TW9kZUNhbGxiYWNrfHx7fTt3aW5kb3cuVmFhZGluLmRldmVsb3BtZW50TW9kZUNhbGxiYWNrWyJ2YWFkaW4tdXNhZ2Utc3RhdGlzdGljcyJdPWZ1bmN0aW9uKCl7VWNlKCl9O3ZhciBPY3QscWNlPW5ldyBTZXQsSkg9ZT0+Y2xhc3MgZXh0ZW5kcyBaSChlKXtzdGF0aWMgZmluYWxpemUoKXtzdXBlci5maW5hbGl6ZSgpO2xldHtpczpyfT10aGlzO3ImJiFxY2UuaGFzKHIpJiYod2luZG93LlZhYWRpbi5yZWdpc3RyYXRpb25zLnB1c2godGhpcykscWNlLmFkZChyKSx3aW5kb3cuVmFhZGluLmRldmVsb3BtZW50TW9kZUNhbGxiYWNrJiYoT2N0PXNyLmRlYm91bmNlKE9jdCxreCwoKT0+e3dpbmRvdy5WYWFkaW4uZGV2ZWxvcG1lbnRNb2RlQ2FsbGJhY2tbInZhYWRpbi11c2FnZS1zdGF0aXN0aWNzIl0oKX0pLEpsKE9jdCkpKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksZG9jdW1lbnQuZG9jdHlwZT09PW51bGwmJmNvbnNvbGUud2FybignVmFhZGluIGNvbXBvbmVudHMgcmVxdWlyZSB0aGUgInN0YW5kYXJkcyBtb2RlIiBkZWNsYXJhdGlvbi4gUGxlYXNlIGFkZCA8IURPQ1RZUEUgaHRtbD4gdG8gdGhlIEhUTUwgZG9jdW1lbnQuJyl9fTt2YXIgUUg9Y2xhc3MgZXh0ZW5kcyBKSChIY2UoWEgodmgobXQpKSkpe3N0YXRpYyBnZXQgdGVtcGxhdGUoKXtyZXR1cm4gUWAKICAgICAgPHN0eWxlPgogICAgICAgIDpob3N0IHsKICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB9CgogICAgICAgIDpob3N0KFtoaWRkZW5dKSB7CiAgICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgICAgfQoKICAgICAgICBsYWJlbCB7CiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgfQoKICAgICAgICBbcGFydD0nY2hlY2tib3gnXSB7CiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgICBmbGV4OiBub25lOwogICAgICAgIH0KCiAgICAgICAgaW5wdXRbdHlwZT0nY2hlY2tib3gnXSB7CiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgICB0b3A6IDA7CiAgICAgICAgICBsZWZ0OiAwOwogICAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgICBjdXJzb3I6IGluaGVyaXQ7CiAgICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgfQoKICAgICAgICA6aG9zdChbZGlzYWJsZWRdKSB7CiAgICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KCiAgICAgIDxsYWJlbD4KICAgICAgICA8c3BhbiBwYXJ0PSJjaGVja2JveCI+CiAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgdHlwZT0iY2hlY2tib3giCiAgICAgICAgICAgIGNoZWNrZWQ9Int7Y2hlY2tlZDo6Y2hhbmdlfX0iCiAgICAgICAgICAgIGRpc2FibGVkJD0iW1tkaXNhYmxlZF1dIgogICAgICAgICAgICBpbmRldGVybWluYXRlPSJ7e2luZGV0ZXJtaW5hdGU6OmNoYW5nZX19IgogICAgICAgICAgICByb2xlPSJwcmVzZW50YXRpb24iCiAgICAgICAgICAgIHRhYmluZGV4PSItMSIKICAgICAgICAgIC8+CiAgICAgICAgPC9zcGFuPgoKICAgICAgICA8c3BhbiBwYXJ0PSJsYWJlbCI+CiAgICAgICAgICA8c2xvdD48L3Nsb3Q+CiAgICAgICAgPC9zcGFuPgogICAgICA8L2xhYmVsPgogICAgYH1zdGF0aWMgZ2V0IGlzKCl7cmV0dXJuInZhYWRpbi1jaGVja2JveCJ9c3RhdGljIGdldCB2ZXJzaW9uKCl7cmV0dXJuIjIwLjAuMiJ9c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2NoZWNrZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9jaGVja2VkQ2hhbmdlZCIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxpbmRldGVybWluYXRlOnt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwLG9ic2VydmVyOiJfaW5kZXRlcm1pbmF0ZUNoYW5nZWQiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCx2YWx1ZTohMX0sdmFsdWU6e3R5cGU6U3RyaW5nLHZhbHVlOiJvbiJ9LF9uYXRpdmVDaGVja2JveDp7dHlwZTpPYmplY3R9fX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5uYW1lfWdldCBuYW1lKCl7cmV0dXJuIHRoaXMuY2hlY2tlZD90aGlzLl9zdG9yZWROYW1lOiIifXNldCBuYW1lKHQpe3RoaXMuX3N0b3JlZE5hbWU9dH1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5zZXRBdHRyaWJ1dGUoInJvbGUiLCJjaGVja2JveCIpLHRoaXMuX25hdGl2ZUNoZWNrYm94PXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPSJjaGVja2JveCJdJyksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5faGFuZGxlQ2xpY2suYmluZCh0aGlzKSksdGhpcy5fYWRkQWN0aXZlTGlzdGVuZXJzKCk7bGV0IHQ9dGhpcy5nZXRBdHRyaWJ1dGUoIm5hbWUiKTt0JiYodGhpcy5uYW1lPXQpLHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdbcGFydH49ImxhYmVsIl0nKS5xdWVyeVNlbGVjdG9yKCJzbG90IikuYWRkRXZlbnRMaXN0ZW5lcigic2xvdGNoYW5nZSIsdGhpcy5fdXBkYXRlTGFiZWxBdHRyaWJ1dGUuYmluZCh0aGlzKSksdGhpcy5fdXBkYXRlTGFiZWxBdHRyaWJ1dGUoKX1fdXBkYXRlTGFiZWxBdHRyaWJ1dGUoKXtsZXQgdD10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignW3BhcnR+PSJsYWJlbCJdJykscj10LmZpcnN0RWxlbWVudENoaWxkLmFzc2lnbmVkTm9kZXMoKTt0aGlzLl9pc0Fzc2lnbmVkTm9kZXNFbXB0eShyKT90LnNldEF0dHJpYnV0ZSgiZW1wdHkiLCIiKTp0LnJlbW92ZUF0dHJpYnV0ZSgiZW1wdHkiKX1faXNBc3NpZ25lZE5vZGVzRW1wdHkodCl7cmV0dXJuIHQubGVuZ3RoPT09MHx8dC5sZW5ndGg9PTEmJnRbMF0ubm9kZVR5cGU9PU5vZGUuVEVYVF9OT0RFJiZ0WzBdLnRleHRDb250ZW50LnRyaW0oKT09PSIifV9jaGVja2VkQ2hhbmdlZCh0KXt0aGlzLmluZGV0ZXJtaW5hdGU/dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtY2hlY2tlZCIsIm1peGVkIik6dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtY2hlY2tlZCIsQm9vbGVhbih0KSl9X2luZGV0ZXJtaW5hdGVDaGFuZ2VkKHQpe3Q/dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtY2hlY2tlZCIsIm1peGVkIik6dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtY2hlY2tlZCIsdGhpcy5jaGVja2VkKX1fYWRkQWN0aXZlTGlzdGVuZXJzKCl7dGhpcy5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZSh0aGlzLCJkb3duIix0PT57dGhpcy5fX2ludGVyYWN0aW9uc0FsbG93ZWQodCkmJnRoaXMuc2V0QXR0cmlidXRlKCJhY3RpdmUiLCIiKX0pLHRoaXMuX2FkZEV2ZW50TGlzdGVuZXJUb05vZGUodGhpcywidXAiLCgpPT50aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYWN0aXZlIikpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdD0+e3RoaXMuX19pbnRlcmFjdGlvbnNBbGxvd2VkKHQpJiZ0LmtleUNvZGU9PT0zMiYmKHQucHJldmVudERlZmF1bHQoKSx0aGlzLnNldEF0dHJpYnV0ZSgiYWN0aXZlIiwiIikpfSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsdD0+e3RoaXMuX19pbnRlcmFjdGlvbnNBbGxvd2VkKHQpJiZ0LmtleUNvZGU9PT0zMiYmKHQucHJldmVudERlZmF1bHQoKSx0aGlzLl90b2dnbGVDaGVja2VkKCksdGhpcy5yZW1vdmVBdHRyaWJ1dGUoImFjdGl2ZSIpLHRoaXMuaW5kZXRlcm1pbmF0ZSYmKHRoaXMuaW5kZXRlcm1pbmF0ZT0hMSkpfSl9Z2V0IGZvY3VzRWxlbWVudCgpe3JldHVybiB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiaW5wdXQiKX1fX2ludGVyYWN0aW9uc0FsbG93ZWQodCl7cmV0dXJuISh0aGlzLmRpc2FibGVkfHx0LnRhcmdldC5sb2NhbE5hbWU9PT0iYSIpfV9oYW5kbGVDbGljayh0KXt0aGlzLl9faW50ZXJhY3Rpb25zQWxsb3dlZCh0KSYmKHRoaXMuaW5kZXRlcm1pbmF0ZT8odGhpcy5pbmRldGVybWluYXRlPSExLHQucHJldmVudERlZmF1bHQoKSx0aGlzLl90b2dnbGVDaGVja2VkKCkpOnQuY29tcG9zZWRQYXRoKClbMF0hPT10aGlzLl9uYXRpdmVDaGVja2JveCYmKHQucHJldmVudERlZmF1bHQoKSx0aGlzLl90b2dnbGVDaGVja2VkKCkpKX1fdG9nZ2xlQ2hlY2tlZCgpe3RoaXMuY2hlY2tlZD0hdGhpcy5jaGVja2VkLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNoYW5nZSIse2NvbXBvc2VkOiExLGJ1YmJsZXM6ITB9KSl9fTtjdXN0b21FbGVtZW50cy5kZWZpbmUoUUguaXMsUUgpO2pjKCJ2YWFkaW4tZ3JpZCIsQ2lgCiAgICA6aG9zdCB7CiAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1sdW1vLWZvbnQtZmFtaWx5KTsKICAgICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS1tKTsKICAgICAgbGluZS1oZWlnaHQ6IHZhcigtLWx1bW8tbGluZS1oZWlnaHQtcyk7CiAgICAgIGNvbG9yOiB2YXIoLS1sdW1vLWJvZHktdGV4dC1jb2xvcik7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tYmFzZS1jb2xvcik7CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsKICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CiAgICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7CgogICAgICAvKiBGb3IgaW50ZXJuYWwgdXNlIG9ubHkgKi8KICAgICAgLS1fbHVtby1ncmlkLWJvcmRlci1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC0yMHBjdCk7CiAgICAgIC0tX2x1bW8tZ3JpZC1zZWNvbmRhcnktYm9yZGVyLWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTEwcGN0KTsKICAgICAgLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aDogMXB4OwogICAgICAtLV9sdW1vLWdyaWQtc2VsZWN0ZWQtcm93LWNvbG9yOiB2YXIoLS1sdW1vLXByaW1hcnktY29sb3ItMTBwY3QpOwogICAgfQoKICAgIC8qIE5vIChvdXRlcikgYm9yZGVyICovCgogICAgOmhvc3QoOm5vdChbdGhlbWV+PSduby1ib3JkZXInXSkpIHsKICAgICAgYm9yZGVyOiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItY29sb3IpOwogICAgfQoKICAgIC8qIENlbGwgc3R5bGVzICovCgogICAgW3BhcnR+PSdjZWxsJ10gewogICAgICBtaW4taGVpZ2h0OiB2YXIoLS1sdW1vLXNpemUtbSk7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tYmFzZS1jb2xvcik7CiAgICB9CgogICAgW3BhcnR+PSdjZWxsJ10gOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIHBhZGRpbmc6IHZhcigtLWx1bW8tc3BhY2UteHMpIHZhcigtLWx1bW8tc3BhY2UtbSk7CiAgICB9CgogICAgLyogQXBwbHkgcm93IGJvcmRlcnMgYnkgZGVmYXVsdCBhbmQgaW50cm9kdWNlIHRoZSAibm8tcm93LWJvcmRlcnMiIHZhcmlhbnQgKi8KICAgIDpob3N0KDpub3QoW3RoZW1lfj0nbm8tcm93LWJvcmRlcnMnXSkpIFtwYXJ0fj0nY2VsbCddOm5vdChbcGFydH49J2RldGFpbHMtY2VsbCddKSB7CiAgICAgIGJvcmRlci10b3A6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1fbHVtby1ncmlkLXNlY29uZGFyeS1ib3JkZXItY29sb3IpOwogICAgfQoKICAgIC8qIEhpZGUgZmlyc3QgYm9keSByb3cgdG9wIGJvcmRlciAqLwogICAgOmhvc3QoOm5vdChbdGhlbWV+PSduby1yb3ctYm9yZGVycyddKSkgW3BhcnQ9J3JvdyddW2ZpcnN0XSBbcGFydH49J2NlbGwnXTpub3QoW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSkgewogICAgICBib3JkZXItdG9wOiAwOwogICAgICBtaW4taGVpZ2h0OiBjYWxjKHZhcigtLWx1bW8tc2l6ZS1tKSAtIHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSk7CiAgICB9CgogICAgLyogRm9jdXMtcmluZyAqLwoKICAgIFtwYXJ0fj0nY2VsbCddOmZvY3VzIHsKICAgICAgb3V0bGluZTogbm9uZTsKICAgIH0KCiAgICA6aG9zdChbbmF2aWdhdGluZ10pIFtwYXJ0fj0nY2VsbCddOmZvY3VzOjpiZWZvcmUgewogICAgICBjb250ZW50OiAnJzsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIHJpZ2h0OiAwOwogICAgICBib3R0b206IDA7CiAgICAgIGxlZnQ6IDA7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAycHggdmFyKC0tbHVtby1wcmltYXJ5LWNvbG9yLTUwcGN0KTsKICAgIH0KCiAgICAvKiBEcmFnIGFuZCBEcm9wIHN0eWxlcyAqLwogICAgOmhvc3QoW2RyYWdvdmVyXSk6OmFmdGVyIHsKICAgICAgY29udGVudDogJyc7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgei1pbmRleDogMTAwOwogICAgICB0b3A6IDA7CiAgICAgIHJpZ2h0OiAwOwogICAgICBib3R0b206IDA7CiAgICAgIGxlZnQ6IDA7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAycHggdmFyKC0tbHVtby1wcmltYXJ5LWNvbG9yLTUwcGN0KTsKICAgIH0KCiAgICBbcGFydH49J3JvdyddW2RyYWdvdmVyXSB7CiAgICAgIHotaW5kZXg6IDEwMCAhaW1wb3J0YW50OwogICAgfQoKICAgIFtwYXJ0fj0ncm93J11bZHJhZ292ZXJdIFtwYXJ0fj0nY2VsbCddIHsKICAgICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkcmFnb3Zlcl0gW3BhcnR+PSdjZWxsJ106OmFmdGVyIHsKICAgICAgY29udGVudDogJyc7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiAwOwogICAgICByaWdodDogMDsKICAgICAgYm90dG9tOiAwOwogICAgICBsZWZ0OiAwOwogICAgICBoZWlnaHQ6IGNhbGModmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpICsgMnB4KTsKICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWx1bW8tcHJpbWFyeS1jb2xvci01MHBjdCk7CiAgICB9CgogICAgOmhvc3QoW3RoZW1lfj0nbm8tcm93LWJvcmRlcnMnXSkgW2RyYWdvdmVyXSBbcGFydH49J2NlbGwnXTo6YWZ0ZXIgewogICAgICBoZWlnaHQ6IDJweDsKICAgIH0KCiAgICBbcGFydH49J3JvdyddW2RyYWdvdmVyPSdiZWxvdyddIFtwYXJ0fj0nY2VsbCddOjphZnRlciB7CiAgICAgIHRvcDogMTAwJTsKICAgICAgYm90dG9tOiBhdXRvOwogICAgICBtYXJnaW4tdG9wOiAtMXB4OwogICAgfQoKICAgIFtwYXJ0fj0ncm93J11bZHJhZ292ZXI9J2Fib3ZlJ10gW3BhcnR+PSdjZWxsJ106OmFmdGVyIHsKICAgICAgdG9wOiBhdXRvOwogICAgICBib3R0b206IDEwMCU7CiAgICAgIG1hcmdpbi1ib3R0b206IC0xcHg7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkZXRhaWxzLW9wZW5lZF1bZHJhZ292ZXI9J2JlbG93J10gW3BhcnR+PSdjZWxsJ106bm90KFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10pOjphZnRlciwKICAgIFtwYXJ0fj0ncm93J11bZGV0YWlscy1vcGVuZWRdW2RyYWdvdmVyPSdhYm92ZSddIFtwYXJ0fj0nZGV0YWlscy1jZWxsJ106OmFmdGVyIHsKICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICBbcGFydH49J3JvdyddW2RyYWdvdmVyXVtkcmFnb3Zlcj0nb24tdG9wJ10gW3BhcnR+PSdjZWxsJ106OmFmdGVyIHsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgfQoKICAgIFtwYXJ0fj0ncm93J11bZHJhZ3N0YXJ0XSB7CiAgICAgIC8qIEFkZCBib3R0b20tc3BhY2UgdG8gdGhlIHJvdyBzbyB0aGUgZHJhZyBudW1iZXIgZG9lc24ndCBnZXQgY2xpcHBlZC4gTmVlZGVkIGZvciBJRS9FZGdlICovCiAgICAgIGJvcmRlci1ib3R0b206IDEwMHB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICB6LWluZGV4OiAxMDAgIWltcG9ydGFudDsKICAgICAgb3BhY2l0eTogMC45OwogICAgfQoKICAgIFtwYXJ0fj0ncm93J11bZHJhZ3N0YXJ0XSBbcGFydH49J2NlbGwnXSB7CiAgICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50OwogICAgICBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkcmFnc3RhcnRdIFtwYXJ0fj0nY2VsbCddW2xhc3QtY29sdW1uXSB7CiAgICAgIGJvcmRlci1yYWRpdXM6IDAgdmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLXMpIHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1zKSAwOwogICAgfQoKICAgIFtwYXJ0fj0ncm93J11bZHJhZ3N0YXJ0XSBbcGFydH49J2NlbGwnXVtmaXJzdC1jb2x1bW5dIHsKICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLXMpIDAgMCB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcyk7CiAgICB9CgogICAgW2lvc10gW3BhcnR+PSdyb3cnXVtkcmFnc3RhcnRdIFtwYXJ0fj0nY2VsbCddIHsKICAgICAgYmFja2dyb3VuZDogdmFyKC0tbHVtby1wcmltYXJ5LWNvbG9yLTUwcGN0KTsKICAgIH0KCiAgICAjc2Nyb2xsZXI6bm90KFtpb3NdKSBbcGFydH49J3JvdyddW2RyYWdzdGFydF06bm90KFtkcmFnc3RhcnQ9JyddKTo6YWZ0ZXIgewogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICBsZWZ0OiB2YXIoLS1fZ3JpZC1kcmFnLXN0YXJ0LXgpOwogICAgICB0b3A6IHZhcigtLV9ncmlkLWRyYWctc3RhcnQteSk7CiAgICAgIHotaW5kZXg6IDEwMDsKICAgICAgY29udGVudDogYXR0cihkcmFnc3RhcnQpOwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgcGFkZGluZzogY2FsYyh2YXIoLS1sdW1vLXNwYWNlLXhzKSAqIDAuOCk7CiAgICAgIGNvbG9yOiB2YXIoLS1sdW1vLWVycm9yLWNvbnRyYXN0LWNvbG9yKTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1lcnJvci1jb2xvcik7CiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1tKTsKICAgICAgZm9udC1mYW1pbHk6IHZhcigtLWx1bW8tZm9udC1mYW1pbHkpOwogICAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXh4cyk7CiAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB0ZXh0LXRyYW5zZm9ybTogaW5pdGlhbDsKICAgICAgbGV0dGVyLXNwYWNpbmc6IGluaXRpYWw7CiAgICAgIG1pbi13aWR0aDogY2FsYyh2YXIoLS1sdW1vLXNpemUtcykgKiAwLjcpOwogICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICB9CgogICAgLyogSGVhZGVycyBhbmQgZm9vdGVycyAqLwoKICAgIFtwYXJ0fj0naGVhZGVyLWNlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSwKICAgIFtwYXJ0fj0nZm9vdGVyLWNlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSwKICAgIFtwYXJ0fj0ncmVvcmRlci1naG9zdCddIHsKICAgICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS1zKTsKICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgIH0KCiAgICBbcGFydH49J2Zvb3Rlci1jZWxsJ10gOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICBmb250LXdlaWdodDogNDAwOwogICAgfQoKICAgIFtwYXJ0PSdyb3cnXTpvbmx5LWNoaWxkIFtwYXJ0fj0naGVhZGVyLWNlbGwnXSB7CiAgICAgIG1pbi1oZWlnaHQ6IHZhcigtLWx1bW8tc2l6ZS14bCk7CiAgICB9CgogICAgLyogSGVhZGVyIGJvcmRlcnMgKi8KCiAgICAvKiBIaWRlIGZpcnN0IGhlYWRlciByb3cgdG9wIGJvcmRlciAqLwogICAgOmhvc3QoOm5vdChbdGhlbWV+PSduby1yb3ctYm9yZGVycyddKSkgW3BhcnQ9J3JvdyddOmZpcnN0LWNoaWxkIFtwYXJ0fj0naGVhZGVyLWNlbGwnXSB7CiAgICAgIGJvcmRlci10b3A6IDA7CiAgICB9CgogICAgW3BhcnQ9J3JvdyddOmxhc3QtY2hpbGQgW3BhcnR+PSdoZWFkZXItY2VsbCddIHsKICAgICAgYm9yZGVyLWJvdHRvbTogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpIHNvbGlkIHRyYW5zcGFyZW50OwogICAgfQoKICAgIDpob3N0KDpub3QoW3RoZW1lfj0nbm8tcm93LWJvcmRlcnMnXSkpIFtwYXJ0PSdyb3cnXTpsYXN0LWNoaWxkIFtwYXJ0fj0naGVhZGVyLWNlbGwnXSB7CiAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6IHZhcigtLV9sdW1vLWdyaWQtc2Vjb25kYXJ5LWJvcmRlci1jb2xvcik7CiAgICB9CgogICAgLyogT3ZlcmZsb3cgdXNlcyBhIHN0cm9uZ2VyIGJvcmRlciBjb2xvciAqLwogICAgOmhvc3QoW292ZXJmbG93fj0ndG9wJ10pIFtwYXJ0PSdyb3cnXTpsYXN0LWNoaWxkIFtwYXJ0fj0naGVhZGVyLWNlbGwnXSB7CiAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICAvKiBGb290ZXIgYm9yZGVycyAqLwoKICAgIFtwYXJ0PSdyb3cnXTpmaXJzdC1jaGlsZCBbcGFydH49J2Zvb3Rlci1jZWxsJ10gewogICAgICBib3JkZXItdG9wOiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgc29saWQgdHJhbnNwYXJlbnQ7CiAgICB9CgogICAgOmhvc3QoOm5vdChbdGhlbWV+PSduby1yb3ctYm9yZGVycyddKSkgW3BhcnQ9J3JvdyddOmZpcnN0LWNoaWxkIFtwYXJ0fj0nZm9vdGVyLWNlbGwnXSB7CiAgICAgIGJvcmRlci10b3AtY29sb3I6IHZhcigtLV9sdW1vLWdyaWQtc2Vjb25kYXJ5LWJvcmRlci1jb2xvcik7CiAgICB9CgogICAgLyogT3ZlcmZsb3cgdXNlcyBhIHN0cm9uZ2VyIGJvcmRlciBjb2xvciAqLwogICAgOmhvc3QoW292ZXJmbG93fj0nYm90dG9tJ10pIFtwYXJ0PSdyb3cnXTpmaXJzdC1jaGlsZCBbcGFydH49J2Zvb3Rlci1jZWxsJ10gewogICAgICBib3JkZXItdG9wLWNvbG9yOiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci1jb2xvcik7CiAgICB9CgogICAgLyogQ29sdW1uIHJlb3JkZXJpbmcgKi8KCiAgICA6aG9zdChbcmVvcmRlcmluZ10pIFtwYXJ0fj0nY2VsbCddIHsKICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHZhcigtLWx1bW8tc2hhZGUtMjBwY3QpLCB2YXIoLS1sdW1vLXNoYWRlLTIwcGN0KSkgdmFyKC0tbHVtby1iYXNlLWNvbG9yKTsKICAgIH0KCiAgICA6aG9zdChbcmVvcmRlcmluZ10pIFtwYXJ0fj0nY2VsbCddW3Jlb3JkZXItc3RhdHVzPSdhbGxvd2VkJ10gewogICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1sdW1vLWJhc2UtY29sb3IpOwogICAgfQoKICAgIDpob3N0KFtyZW9yZGVyaW5nXSkgW3BhcnR+PSdjZWxsJ11bcmVvcmRlci1zdGF0dXM9J2RyYWdnaW5nJ10gewogICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodmFyKC0tbHVtby1jb250cmFzdC01cGN0KSwgdmFyKC0tbHVtby1jb250cmFzdC01cGN0KSkgdmFyKC0tbHVtby1iYXNlLWNvbG9yKTsKICAgIH0KCiAgICBbcGFydH49J3Jlb3JkZXItZ2hvc3QnXSB7CiAgICAgIG9wYWNpdHk6IDAuODU7CiAgICAgIGJveC1zaGFkb3c6IHZhcigtLWx1bW8tYm94LXNoYWRvdy1zKTsKICAgICAgLyogVE9ETyBVc2UgdGhlIHNhbWUgc3R5bGVzIGFzIGZvciB0aGUgY2VsbCBlbGVtZW50IChyZW9yZGVyLWdob3N0IGNvcGllcyBzdHlsZXMgZnJvbSB0aGUgY2VsbCBlbGVtZW50KSAqLwogICAgICBwYWRkaW5nOiB2YXIoLS1sdW1vLXNwYWNlLXMpIHZhcigtLWx1bW8tc3BhY2UtbSkgIWltcG9ydGFudDsKICAgIH0KCiAgICAvKiBDb2x1bW4gcmVzaXppbmcgKi8KCiAgICBbcGFydD0ncmVzaXplLWhhbmRsZSddIHsKICAgICAgd2lkdGg6IDNweDsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1wcmltYXJ5LWNvbG9yLTUwcGN0KTsKICAgICAgb3BhY2l0eTogMDsKICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzOwogICAgfQoKICAgIDpob3N0KDpub3QoW3Jlb3JkZXJpbmddKSkgKjpub3QoW2NvbHVtbi1yZXNpemluZ10pIFtwYXJ0fj0nY2VsbCddOmhvdmVyIFtwYXJ0PSdyZXNpemUtaGFuZGxlJ10sCiAgICBbcGFydD0ncmVzaXplLWhhbmRsZSddOmFjdGl2ZSB7CiAgICAgIG9wYWNpdHk6IDE7CiAgICAgIHRyYW5zaXRpb24tZGVsYXk6IDAuMTVzOwogICAgfQoKICAgIC8qIENvbHVtbiBib3JkZXJzICovCgogICAgOmhvc3QoW3RoZW1lfj0nY29sdW1uLWJvcmRlcnMnXSkgW3BhcnR+PSdjZWxsJ106bm90KFtsYXN0LWNvbHVtbl0pOm5vdChbcGFydH49J2RldGFpbHMtY2VsbCddKSB7CiAgICAgIGJvcmRlci1yaWdodDogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLV9sdW1vLWdyaWQtc2Vjb25kYXJ5LWJvcmRlci1jb2xvcik7CiAgICB9CgogICAgLyogRnJvemVuIGNvbHVtbnMgKi8KCiAgICBbbGFzdC1mcm96ZW5dIHsKICAgICAgYm9yZGVyLXJpZ2h0OiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB9CgogICAgOmhvc3QoW292ZXJmbG93fj0nbGVmdCddKSBbcGFydH49J2NlbGwnXVtsYXN0LWZyb3plbl06bm90KFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10pIHsKICAgICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci1jb2xvcik7CiAgICB9CgogICAgLyogUm93IHN0cmlwZXMgKi8KCiAgICA6aG9zdChbdGhlbWV+PSdyb3ctc3RyaXBlcyddKSBbcGFydH49J3JvdyddOm5vdChbb2RkXSkgW3BhcnR+PSdib2R5LWNlbGwnXSwKICAgIDpob3N0KFt0aGVtZX49J3Jvdy1zdHJpcGVzJ10pIFtwYXJ0fj0ncm93J106bm90KFtvZGRdKSBbcGFydH49J2RldGFpbHMtY2VsbCddIHsKICAgICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHZhcigtLWx1bW8tY29udHJhc3QtNXBjdCksIHZhcigtLWx1bW8tY29udHJhc3QtNXBjdCkpOwogICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7CiAgICB9CgogICAgLyogU2VsZWN0ZWQgcm93ICovCgogICAgLyogUmFpc2UgdGhlIHNlbGVjdGVkIHJvd3MgYWJvdmUgdW5zZWxlY3RlZCByb3dzIChzbyB0aGF0IGJveC1zaGFkb3cgY2FuIGNvdmVyIHVuc2VsZWN0ZWQgcm93cykgKi8KICAgIDpob3N0KDpub3QoW3Jlb3JkZXJpbmddKSkgW3BhcnR+PSdyb3cnXVtzZWxlY3RlZF0gewogICAgICB6LWluZGV4OiAxOwogICAgfQoKICAgIDpob3N0KDpub3QoW3Jlb3JkZXJpbmddKSkgW3BhcnR+PSdyb3cnXVtzZWxlY3RlZF0gW3BhcnR+PSdib2R5LWNlbGwnXTpub3QoW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSkgewogICAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodmFyKC0tX2x1bW8tZ3JpZC1zZWxlY3RlZC1yb3ctY29sb3IpLCB2YXIoLS1fbHVtby1ncmlkLXNlbGVjdGVkLXJvdy1jb2xvcikpOwogICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0OwogICAgfQoKICAgIC8qIENvdmVyIHRoZSBib3JkZXIgb2YgYW4gdW5zZWxlY3RlZCByb3cgKi8KICAgIDpob3N0KDpub3QoW3RoZW1lfj0nbm8tcm93LWJvcmRlcnMnXSkpIFtwYXJ0fj0ncm93J11bc2VsZWN0ZWRdIFtwYXJ0fj0nY2VsbCddOm5vdChbcGFydH49J2RldGFpbHMtY2VsbCddKSB7CiAgICAgIGJveC1zaGFkb3c6IDAgdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpIDAgMCB2YXIoLS1fbHVtby1ncmlkLXNlbGVjdGVkLXJvdy1jb2xvcik7CiAgICB9CgogICAgLyogQ29tcGFjdCAqLwoKICAgIDpob3N0KFt0aGVtZX49J2NvbXBhY3QnXSkgW3BhcnQ9J3JvdyddOm9ubHktY2hpbGQgW3BhcnR+PSdoZWFkZXItY2VsbCddIHsKICAgICAgbWluLWhlaWdodDogdmFyKC0tbHVtby1zaXplLW0pOwogICAgfQoKICAgIDpob3N0KFt0aGVtZX49J2NvbXBhY3QnXSkgW3BhcnR+PSdjZWxsJ10gewogICAgICBtaW4taGVpZ2h0OiB2YXIoLS1sdW1vLXNpemUtcyk7CiAgICB9CgogICAgOmhvc3QoW3RoZW1lfj0nY29tcGFjdCddKSBbcGFydD0ncm93J11bZmlyc3RdIFtwYXJ0fj0nY2VsbCddOm5vdChbcGFydH49J2RldGFpbHMtY2VsbCddKSB7CiAgICAgIG1pbi1oZWlnaHQ6IGNhbGModmFyKC0tbHVtby1zaXplLXMpIC0gdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpKTsKICAgIH0KCiAgICA6aG9zdChbdGhlbWV+PSdjb21wYWN0J10pIFtwYXJ0fj0nY2VsbCddIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgcGFkZGluZzogdmFyKC0tbHVtby1zcGFjZS14cykgdmFyKC0tbHVtby1zcGFjZS1zKTsKICAgIH0KCiAgICAvKiBXcmFwIGNlbGwgY29udGVudHMgKi8KCiAgICA6aG9zdChbdGhlbWV+PSd3cmFwLWNlbGwtY29udGVudCddKSBbcGFydH49J2NlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICB9CgogICAgLyogUlRMIHNwZWNpZmljIHN0eWxlcyAqLwoKICAgIDpob3N0KFtkaXI9J3J0bCddKSBbcGFydH49J3JvdyddW2RyYWdzdGFydF0gW3BhcnR+PSdjZWxsJ11bbGFzdC1jb2x1bW5dIHsKICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLXMpIDAgMCB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcyk7CiAgICB9CgogICAgOmhvc3QoW2Rpcj0ncnRsJ10pIFtwYXJ0fj0ncm93J11bZHJhZ3N0YXJ0XSBbcGFydH49J2NlbGwnXVtmaXJzdC1jb2x1bW5dIHsKICAgICAgYm9yZGVyLXJhZGl1czogMCB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcykgdmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLXMpIDA7CiAgICB9CgogICAgOmhvc3QoW2Rpcj0ncnRsJ11bdGhlbWV+PSdjb2x1bW4tYm9yZGVycyddKSBbcGFydH49J2NlbGwnXTpub3QoW2xhc3QtY29sdW1uXSk6bm90KFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10pIHsKICAgICAgYm9yZGVyLXJpZ2h0OiBub25lOwogICAgICBib3JkZXItbGVmdDogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLV9sdW1vLWdyaWQtc2Vjb25kYXJ5LWJvcmRlci1jb2xvcik7CiAgICB9CgogICAgOmhvc3QoW2Rpcj0ncnRsJ10pIFtsYXN0LWZyb3plbl0gewogICAgICBib3JkZXItcmlnaHQ6IG5vbmU7CiAgICAgIGJvcmRlci1sZWZ0OiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgc29saWQgdHJhbnNwYXJlbnQ7CiAgICB9CgogICAgOmhvc3QoW2Rpcj0ncnRsJ11bb3ZlcmZsb3d+PSdyaWdodCddKSBbcGFydH49J2NlbGwnXVtsYXN0LWZyb3plbl06bm90KFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10pIHsKICAgICAgYm9yZGVyLWxlZnQtY29sb3I6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLWNvbG9yKTsKICAgIH0KICBgLHttb2R1bGVJZDoibHVtby1ncmlkIn0pO2pjKCJ2YWFkaW4tY2hlY2tib3giLENpYAogICAgOmhvc3QoLnZhYWRpbi1ncmlkLXNlbGVjdC1hbGwtY2hlY2tib3gpIHsKICAgICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS1tKTsKICAgIH0KICBgLHttb2R1bGVJZDoidmFhZGluLWdyaWQtc2VsZWN0LWFsbC1jaGVja2JveC1sdW1vIn0pO3ZhciBHY2U9bmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVAoPzpob25lfGFkOyg/OiBVOyk/IENQVSkgT1MgKFxkKykvKSxzaHI9R2NlJiZHY2VbMV0+PTgsV2NlPTMsWWNlPWg5KHtiZWhhdmlvcnM6W1FzLHY5XSxfcmF0aW86LjUsX3Njcm9sbGVyUGFkZGluZ1RvcDowLF9zY3JvbGxQb3NpdGlvbjowLF9waHlzaWNhbFNpemU6MCxfcGh5c2ljYWxBdmVyYWdlOjAsX3BoeXNpY2FsQXZlcmFnZUNvdW50OjAsX3BoeXNpY2FsVG9wOjAsX3ZpcnR1YWxDb3VudDowLF9lc3RTY3JvbGxIZWlnaHQ6MCxfc2Nyb2xsSGVpZ2h0OjAsX3ZpZXdwb3J0SGVpZ2h0OjAsX3ZpZXdwb3J0V2lkdGg6MCxfcGh5c2ljYWxJdGVtczpudWxsLF9waHlzaWNhbFNpemVzOm51bGwsX2ZpcnN0VmlzaWJsZUluZGV4VmFsOm51bGwsX2xhc3RWaXNpYmxlSW5kZXhWYWw6bnVsbCxfbWF4UGFnZXM6MixfZm9jdXNlZFZpcnR1YWxJbmRleDotMSxfdGVtcGxhdGVDb3N0OjAsZ2V0IF9waHlzaWNhbEJvdHRvbSgpe3JldHVybiB0aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9waHlzaWNhbFNpemV9LGdldCBfc2Nyb2xsQm90dG9tKCl7cmV0dXJuIHRoaXMuX3Njcm9sbFBvc2l0aW9uK3RoaXMuX3ZpZXdwb3J0SGVpZ2h0fSxnZXQgX3ZpcnR1YWxFbmQoKXtyZXR1cm4gdGhpcy5fdmlydHVhbFN0YXJ0K3RoaXMuX3BoeXNpY2FsQ291bnQtMX0sZ2V0IF9oaWRkZW5Db250ZW50U2l6ZSgpe3JldHVybiB0aGlzLl9waHlzaWNhbFNpemUtdGhpcy5fdmlld3BvcnRIZWlnaHR9LGdldCBfbWF4U2Nyb2xsVG9wKCl7cmV0dXJuIHRoaXMuX2VzdFNjcm9sbEhlaWdodC10aGlzLl92aWV3cG9ydEhlaWdodCt0aGlzLl9zY3JvbGxPZmZzZXR9LGdldCBfbWF4VmlydHVhbFN0YXJ0KCl7cmV0dXJuIE1hdGgubWF4KDAsdGhpcy5fdmlydHVhbENvdW50LXRoaXMuX3BoeXNpY2FsQ291bnQpfSxzZXQgX3ZpcnR1YWxTdGFydChlKXtlPXRoaXMuX2NsYW1wKGUsMCx0aGlzLl9tYXhWaXJ0dWFsU3RhcnQpLHRoaXMuX3ZpcnR1YWxTdGFydFZhbD1lfSxnZXQgX3ZpcnR1YWxTdGFydCgpe3JldHVybiB0aGlzLl92aXJ0dWFsU3RhcnRWYWx8fDB9LHNldCBfcGh5c2ljYWxTdGFydChlKXtlPWUldGhpcy5fcGh5c2ljYWxDb3VudCxlPDAmJihlPXRoaXMuX3BoeXNpY2FsQ291bnQrZSksdGhpcy5fcGh5c2ljYWxTdGFydFZhbD1lfSxnZXQgX3BoeXNpY2FsU3RhcnQoKXtyZXR1cm4gdGhpcy5fcGh5c2ljYWxTdGFydFZhbHx8MH0sZ2V0IF9waHlzaWNhbEVuZCgpe3JldHVybih0aGlzLl9waHlzaWNhbFN0YXJ0K3RoaXMuX3BoeXNpY2FsQ291bnQtMSkldGhpcy5fcGh5c2ljYWxDb3VudH0sc2V0IF9waHlzaWNhbENvdW50KGUpe3RoaXMuX3BoeXNpY2FsQ291bnRWYWw9ZX0sZ2V0IF9waHlzaWNhbENvdW50KCl7cmV0dXJuIHRoaXMuX3BoeXNpY2FsQ291bnRWYWx8fDB9LGdldCBfb3B0UGh5c2ljYWxTaXplKCl7cmV0dXJuIHRoaXMuX3ZpZXdwb3J0SGVpZ2h0PT09MD8xLzA6dGhpcy5fdmlld3BvcnRIZWlnaHQqdGhpcy5fbWF4UGFnZXN9LGdldCBfaXNWaXNpYmxlKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5vZmZzZXRXaWR0aHx8dGhpcy5vZmZzZXRIZWlnaHQpfSxnZXQgZmlyc3RWaXNpYmxlSW5kZXgoKXtsZXQgZT10aGlzLl9maXJzdFZpc2libGVJbmRleFZhbDtpZihlPT1udWxsKXtsZXQgdD10aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9zY3JvbGxPZmZzZXQ7ZT10aGlzLl9pdGVyYXRlSXRlbXMoZnVuY3Rpb24ocixuKXtpZih0Kz10aGlzLl9waHlzaWNhbFNpemVzW3JdLHQ+dGhpcy5fc2Nyb2xsUG9zaXRpb24pcmV0dXJuIG59KXx8MCx0aGlzLl9maXJzdFZpc2libGVJbmRleFZhbD1lfXJldHVybiBlfSxnZXQgbGFzdFZpc2libGVJbmRleCgpe2xldCBlPXRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw7aWYoZT09bnVsbCl7bGV0IHQ9dGhpcy5fcGh5c2ljYWxUb3ArdGhpcy5fc2Nyb2xsT2Zmc2V0O3RoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihyLG4pe3Q8dGhpcy5fc2Nyb2xsQm90dG9tJiYoZT1uKSx0Kz10aGlzLl9waHlzaWNhbFNpemVzW3JdfSksdGhpcy5fbGFzdFZpc2libGVJbmRleFZhbD1lfXJldHVybiBlfSxnZXQgX3Njcm9sbE9mZnNldCgpe3JldHVybiB0aGlzLl9zY3JvbGxlclBhZGRpbmdUb3B9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fZGVib3VuY2UoIl9yZW5kZXIiLHRoaXMuX3JlbmRlcixOaSksdGhpcy5saXN0ZW4odGhpcywiaXJvbi1yZXNpemUiLCJfcmVzaXplSGFuZGxlciIpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMudW5saXN0ZW4odGhpcywiaXJvbi1yZXNpemUiLCJfcmVzaXplSGFuZGxlciIpfSx1cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXM6ZnVuY3Rpb24oKXtsZXQgZT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKTt0aGlzLl9zY3JvbGxlclBhZGRpbmdUb3A9dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzPzA6cGFyc2VJbnQoZVsicGFkZGluZy10b3AiXSwxMCksdGhpcy5faXNSVEw9Qm9vbGVhbihlLmRpcmVjdGlvbj09PSJydGwiKSx0aGlzLl92aWV3cG9ydFdpZHRoPXRoaXMuJC5pdGVtcy5vZmZzZXRXaWR0aCx0aGlzLl92aWV3cG9ydEhlaWdodD10aGlzLl9zY3JvbGxUYXJnZXRIZWlnaHR9LF9zY3JvbGxIYW5kbGVyOmZ1bmN0aW9uKCl7bGV0IGU9TWF0aC5tYXgoMCxNYXRoLm1pbih0aGlzLl9tYXhTY3JvbGxUb3AsdGhpcy5fc2Nyb2xsVG9wKSksdD1lLXRoaXMuX3Njcm9sbFBvc2l0aW9uLHI9dD49MDtpZih0aGlzLl9zY3JvbGxQb3NpdGlvbj1lLHRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fbGFzdFZpc2libGVJbmRleFZhbD1udWxsLE1hdGguYWJzKHQpPnRoaXMuX3BoeXNpY2FsU2l6ZSYmdGhpcy5fcGh5c2ljYWxTaXplPjApe3Q9dC10aGlzLl9zY3JvbGxPZmZzZXQ7bGV0IG49TWF0aC5yb3VuZCh0L3RoaXMuX3BoeXNpY2FsQXZlcmFnZSk7dGhpcy5fdmlydHVhbFN0YXJ0PXRoaXMuX3ZpcnR1YWxTdGFydCtuLHRoaXMuX3BoeXNpY2FsU3RhcnQ9dGhpcy5fcGh5c2ljYWxTdGFydCtuLHRoaXMuX3BoeXNpY2FsVG9wPU1hdGguZmxvb3IodGhpcy5fdmlydHVhbFN0YXJ0KSp0aGlzLl9waHlzaWNhbEF2ZXJhZ2UsdGhpcy5fdXBkYXRlKCl9ZWxzZSBpZih0aGlzLl9waHlzaWNhbENvdW50PjApe2xldHtwaHlzaWNhbFRvcDpuLGluZGV4ZXM6aX09dGhpcy5fZ2V0UmV1c2FibGVzKHIpO3I/KHRoaXMuX3BoeXNpY2FsVG9wPW4sdGhpcy5fdmlydHVhbFN0YXJ0PXRoaXMuX3ZpcnR1YWxTdGFydCtpLmxlbmd0aCx0aGlzLl9waHlzaWNhbFN0YXJ0PXRoaXMuX3BoeXNpY2FsU3RhcnQraS5sZW5ndGgpOih0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0LWkubGVuZ3RoLHRoaXMuX3BoeXNpY2FsU3RhcnQ9dGhpcy5fcGh5c2ljYWxTdGFydC1pLmxlbmd0aCksdGhpcy5fdXBkYXRlKGkscj9udWxsOmkpLHRoaXMuX2RlYm91bmNlKCJfaW5jcmVhc2VQb29sSWZOZWVkZWQiLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkLmJpbmQodGhpcywwKSxsaSl9fSxfZ2V0UmV1c2FibGVzOmZ1bmN0aW9uKGUpe2xldCB0LHIsbixpPVtdLG89dGhpcy5faGlkZGVuQ29udGVudFNpemUqdGhpcy5fcmF0aW8sYT10aGlzLl92aXJ0dWFsU3RhcnQscz10aGlzLl92aXJ0dWFsRW5kLGw9dGhpcy5fcGh5c2ljYWxDb3VudCxjPXRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldCx1PXRoaXMuX3BoeXNpY2FsQm90dG9tK3RoaXMuX3Njcm9sbE9mZnNldCxoPXRoaXMuX3Njcm9sbFRvcCxmPXRoaXMuX3Njcm9sbEJvdHRvbTtmb3IoZT8odD10aGlzLl9waHlzaWNhbFN0YXJ0LHI9aC1jKToodD10aGlzLl9waHlzaWNhbEVuZCxyPXUtZik7bj10aGlzLl9waHlzaWNhbFNpemVzW3RdLHI9ci1uLCEoaS5sZW5ndGg+PWx8fHI8PW8pOylpZihlKXtpZihzK2kubGVuZ3RoKzE+PXRoaXMuX3ZpcnR1YWxDb3VudHx8YytuPj1oLXRoaXMuX3Njcm9sbE9mZnNldClicmVhaztpLnB1c2godCksYz1jK24sdD0odCsxKSVsfWVsc2V7aWYoYS1pLmxlbmd0aDw9MHx8Yyt0aGlzLl9waHlzaWNhbFNpemUtbjw9ZilicmVhaztpLnB1c2godCksYz1jLW4sdD10PT09MD9sLTE6dC0xfXJldHVybntpbmRleGVzOmkscGh5c2ljYWxUb3A6Yy10aGlzLl9zY3JvbGxPZmZzZXR9fSxfdXBkYXRlOmZ1bmN0aW9uKGUsdCl7aWYoIShlJiZlLmxlbmd0aD09PTB8fHRoaXMuX3BoeXNpY2FsQ291bnQ9PT0wKSl7aWYodGhpcy5fYXNzaWduTW9kZWxzKGUpLHRoaXMuX3VwZGF0ZU1ldHJpY3MoZSksdClmb3IoO3QubGVuZ3RoOyl7bGV0IHI9dC5wb3AoKTt0aGlzLl9waHlzaWNhbFRvcC09dGhpcy5fcGh5c2ljYWxTaXplc1tyXX10aGlzLl9wb3NpdGlvbkl0ZW1zKCksdGhpcy5fdXBkYXRlU2Nyb2xsZXJTaXplKCl9fSxfaXNDbGllbnRGdWxsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Njcm9sbEJvdHRvbSE9MCYmdGhpcy5fcGh5c2ljYWxCb3R0b20tMT49dGhpcy5fc2Nyb2xsQm90dG9tJiZ0aGlzLl9waHlzaWNhbFRvcDw9dGhpcy5fc2Nyb2xsUG9zaXRpb259LF9pbmNyZWFzZVBvb2xJZk5lZWRlZDpmdW5jdGlvbihlKXtsZXQgcj10aGlzLl9jbGFtcCh0aGlzLl9waHlzaWNhbENvdW50K2UsV2NlLHRoaXMuX3ZpcnR1YWxDb3VudC10aGlzLl92aXJ0dWFsU3RhcnQpLXRoaXMuX3BoeXNpY2FsQ291bnQsbj1NYXRoLnJvdW5kKHRoaXMuX3BoeXNpY2FsQ291bnQqLjUpO2lmKCEocjwwKSl7aWYocj4wKXtsZXQgaT13aW5kb3cucGVyZm9ybWFuY2Uubm93KCk7W10ucHVzaC5hcHBseSh0aGlzLl9waHlzaWNhbEl0ZW1zLHRoaXMuX2NyZWF0ZVBvb2wocikpO2ZvcihsZXQgbz0wO288cjtvKyspdGhpcy5fcGh5c2ljYWxTaXplcy5wdXNoKDApO3RoaXMuX3BoeXNpY2FsQ291bnQ9dGhpcy5fcGh5c2ljYWxDb3VudCtyLHRoaXMuX3BoeXNpY2FsU3RhcnQ+dGhpcy5fcGh5c2ljYWxFbmQmJnRoaXMuX2lzSW5kZXhSZW5kZXJlZCh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4KSYmdGhpcy5fZ2V0UGh5c2ljYWxJbmRleCh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4KTx0aGlzLl9waHlzaWNhbEVuZCYmKHRoaXMuX3BoeXNpY2FsU3RhcnQ9dGhpcy5fcGh5c2ljYWxTdGFydCtyKSx0aGlzLl91cGRhdGUoKSx0aGlzLl90ZW1wbGF0ZUNvc3Q9KHdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKS1pKS9yLG49TWF0aC5yb3VuZCh0aGlzLl9waHlzaWNhbENvdW50Ki41KX10aGlzLl92aXJ0dWFsRW5kPj10aGlzLl92aXJ0dWFsQ291bnQtMXx8bj09PTB8fCh0aGlzLl9pc0NsaWVudEZ1bGwoKT90aGlzLl9waHlzaWNhbFNpemU8dGhpcy5fb3B0UGh5c2ljYWxTaXplJiZ0aGlzLl9kZWJvdW5jZSgiX2luY3JlYXNlUG9vbElmTmVlZGVkIix0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZC5iaW5kKHRoaXMsdGhpcy5fY2xhbXAoTWF0aC5yb3VuZCg1MC90aGlzLl90ZW1wbGF0ZUNvc3QpLDEsbikpLGt4KTp0aGlzLl9kZWJvdW5jZSgiX2luY3JlYXNlUG9vbElmTmVlZGVkIix0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZC5iaW5kKHRoaXMsbiksbGkpKX19LF9yZW5kZXI6ZnVuY3Rpb24oKXtpZighKCF0aGlzLmlzQXR0YWNoZWR8fCF0aGlzLl9pc1Zpc2libGUpKWlmKHRoaXMuX3BoeXNpY2FsQ291bnQhPT0wKXtsZXR7cGh5c2ljYWxUb3A6ZSxpbmRleGVzOnR9PXRoaXMuX2dldFJldXNhYmxlcyghMCk7dGhpcy5fcGh5c2ljYWxUb3A9ZSx0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0K3QubGVuZ3RoLHRoaXMuX3BoeXNpY2FsU3RhcnQ9dGhpcy5fcGh5c2ljYWxTdGFydCt0Lmxlbmd0aCx0aGlzLl91cGRhdGUodCksdGhpcy5fdXBkYXRlKCksdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQoMCl9ZWxzZSB0aGlzLl92aXJ0dWFsQ291bnQ+MCYmKHRoaXMudXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzKCksdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQoV2NlKSl9LF9pdGVtc0NoYW5nZWQ6ZnVuY3Rpb24oZSl7ZS5wYXRoPT09Iml0ZW1zIiYmKHRoaXMuX3ZpcnR1YWxTdGFydD0wLHRoaXMuX3BoeXNpY2FsVG9wPTAsdGhpcy5fdmlydHVhbENvdW50PXRoaXMuaXRlbXM/dGhpcy5pdGVtcy5sZW5ndGg6MCx0aGlzLl9waHlzaWNhbEluZGV4Rm9yS2V5PXt9LHRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fbGFzdFZpc2libGVJbmRleFZhbD1udWxsLHRoaXMuX3BoeXNpY2FsQ291bnQ9dGhpcy5fcGh5c2ljYWxDb3VudHx8MCx0aGlzLl9waHlzaWNhbEl0ZW1zPXRoaXMuX3BoeXNpY2FsSXRlbXN8fFtdLHRoaXMuX3BoeXNpY2FsU2l6ZXM9dGhpcy5fcGh5c2ljYWxTaXplc3x8W10sdGhpcy5fcGh5c2ljYWxTdGFydD0wLHRoaXMuX3Njcm9sbFRvcD50aGlzLl9zY3JvbGxPZmZzZXQmJnRoaXMuX3Jlc2V0U2Nyb2xsUG9zaXRpb24oMCksdGhpcy5fZGVib3VuY2UoIl9yZW5kZXIiLHRoaXMuX3JlbmRlcixOaSkpfSxfaXRlcmF0ZUl0ZW1zOmZ1bmN0aW9uKGUsdCl7bGV0IHIsbixpLG87aWYoYXJndW1lbnRzLmxlbmd0aD09PTImJnQpe2ZvcihvPTA7bzx0Lmxlbmd0aDtvKyspaWYocj10W29dLG49dGhpcy5fY29tcHV0ZVZpZHgociksKGk9ZS5jYWxsKHRoaXMscixuKSkhPW51bGwpcmV0dXJuIGl9ZWxzZXtmb3Iocj10aGlzLl9waHlzaWNhbFN0YXJ0LG49dGhpcy5fdmlydHVhbFN0YXJ0O3I8dGhpcy5fcGh5c2ljYWxDb3VudDtyKyssbisrKWlmKChpPWUuY2FsbCh0aGlzLHIsbikpIT1udWxsKXJldHVybiBpO2ZvcihyPTA7cjx0aGlzLl9waHlzaWNhbFN0YXJ0O3IrKyxuKyspaWYoKGk9ZS5jYWxsKHRoaXMscixuKSkhPW51bGwpcmV0dXJuIGl9fSxfY29tcHV0ZVZpZHg6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PXRoaXMuX3BoeXNpY2FsU3RhcnQ/dGhpcy5fdmlydHVhbFN0YXJ0KyhlLXRoaXMuX3BoeXNpY2FsU3RhcnQpOnRoaXMuX3ZpcnR1YWxTdGFydCsodGhpcy5fcGh5c2ljYWxDb3VudC10aGlzLl9waHlzaWNhbFN0YXJ0KStlfSxfdXBkYXRlTWV0cmljczpmdW5jdGlvbihlKXtpZighdGhpcy5faXNWaXNpYmxlKXJldHVybjtjaSgpO2xldCB0PTAscj0wLG49dGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQsaT10aGlzLl9waHlzaWNhbEF2ZXJhZ2U7dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKG8pe3IrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbb10sdGhpcy5fcGh5c2ljYWxTaXplc1tvXT10aGlzLl9waHlzaWNhbEl0ZW1zW29dLm9mZnNldEhlaWdodCx0Kz10aGlzLl9waHlzaWNhbFNpemVzW29dLHRoaXMuX3BoeXNpY2FsQXZlcmFnZUNvdW50Kz10aGlzLl9waHlzaWNhbFNpemVzW29dPzE6MH0sZSksdGhpcy5fcGh5c2ljYWxTaXplPXRoaXMuX3BoeXNpY2FsU2l6ZSt0LXIsdGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQhPT1uJiYodGhpcy5fcGh5c2ljYWxBdmVyYWdlPU1hdGgucm91bmQoKGkqbit0KS90aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCkpfSxfcG9zaXRpb25JdGVtczpmdW5jdGlvbigpe3RoaXMuX2FkanVzdFNjcm9sbFBvc2l0aW9uKCk7bGV0IGU9dGhpcy5fcGh5c2ljYWxUb3A7dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKHQpe3RoaXMudHJhbnNsYXRlM2QoMCxlKyJweCIsMCx0aGlzLl9waHlzaWNhbEl0ZW1zW3RdKSxlKz10aGlzLl9waHlzaWNhbFNpemVzW3RdfSl9LF9hZGp1c3RTY3JvbGxQb3NpdGlvbjpmdW5jdGlvbigpe2xldCBlPXRoaXMuX3ZpcnR1YWxTdGFydD09PTA/dGhpcy5fcGh5c2ljYWxUb3A6TWF0aC5taW4odGhpcy5fc2Nyb2xsUG9zaXRpb24rdGhpcy5fcGh5c2ljYWxUb3AsMCk7aWYoZSE9PTApe3RoaXMuX3BoeXNpY2FsVG9wPXRoaXMuX3BoeXNpY2FsVG9wLWU7bGV0IHQ9dGhpcy5fc2Nyb2xsVG9wOyFzaHImJnQ+MCYmdGhpcy5fcmVzZXRTY3JvbGxQb3NpdGlvbih0LWUpfX0sX3Jlc2V0U2Nyb2xsUG9zaXRpb246ZnVuY3Rpb24oZSl7dGhpcy5zY3JvbGxUYXJnZXQmJmU+PTAmJih0aGlzLl9zY3JvbGxUb3A9ZSx0aGlzLl9zY3JvbGxQb3NpdGlvbj10aGlzLl9zY3JvbGxUb3ApfSxfdXBkYXRlU2Nyb2xsZXJTaXplOmZ1bmN0aW9uKGUpe3RoaXMuX2VzdFNjcm9sbEhlaWdodD10aGlzLl9waHlzaWNhbEJvdHRvbStNYXRoLm1heCh0aGlzLl92aXJ0dWFsQ291bnQtdGhpcy5fcGh5c2ljYWxDb3VudC10aGlzLl92aXJ0dWFsU3RhcnQsMCkqdGhpcy5fcGh5c2ljYWxBdmVyYWdlLGU9ZXx8dGhpcy5fc2Nyb2xsSGVpZ2h0PT09MCxlPWV8fHRoaXMuX3Njcm9sbFBvc2l0aW9uPj10aGlzLl9lc3RTY3JvbGxIZWlnaHQtdGhpcy5fcGh5c2ljYWxTaXplLChlfHxNYXRoLmFicyh0aGlzLl9lc3RTY3JvbGxIZWlnaHQtdGhpcy5fc2Nyb2xsSGVpZ2h0KT49dGhpcy5fdmlld3BvcnRIZWlnaHQpJiYodGhpcy4kLml0ZW1zLnN0eWxlLmhlaWdodD10aGlzLl9lc3RTY3JvbGxIZWlnaHQrInB4Iix0aGlzLl9zY3JvbGxIZWlnaHQ9dGhpcy5fZXN0U2Nyb2xsSGVpZ2h0KX0sc2Nyb2xsVG9JbmRleDpmdW5jdGlvbihlKXtpZih0eXBlb2YgZSE9Im51bWJlciJ8fGU8MHx8ZT50aGlzLml0ZW1zLmxlbmd0aC0xfHwoY2koKSx0aGlzLl9waHlzaWNhbENvdW50PT09MCkpcmV0dXJuO2U9dGhpcy5fY2xhbXAoZSwwLHRoaXMuX3ZpcnR1YWxDb3VudC0xKSwoIXRoaXMuX2lzSW5kZXhSZW5kZXJlZChlKXx8ZT49dGhpcy5fbWF4VmlydHVhbFN0YXJ0KSYmKHRoaXMuX3ZpcnR1YWxTdGFydD1lLTEpLHRoaXMuX2Fzc2lnbk1vZGVscygpLHRoaXMuX3VwZGF0ZU1ldHJpY3MoKSx0aGlzLl9waHlzaWNhbFRvcD1NYXRoLmZsb29yKHRoaXMuX3ZpcnR1YWxTdGFydCkqdGhpcy5fcGh5c2ljYWxBdmVyYWdlO2xldCB0PXRoaXMuX3BoeXNpY2FsU3RhcnQscj10aGlzLl92aXJ0dWFsU3RhcnQsbj0wLGk9dGhpcy5faGlkZGVuQ29udGVudFNpemU7Zm9yKDtyPGUmJm48PWk7KW49bit0aGlzLl9waHlzaWNhbFNpemVzW3RdLHQ9KHQrMSkldGhpcy5fcGh5c2ljYWxDb3VudCxyKys7dGhpcy5fdXBkYXRlU2Nyb2xsZXJTaXplKCEwKSx0aGlzLl9wb3NpdGlvbkl0ZW1zKCksdGhpcy5fcmVzZXRTY3JvbGxQb3NpdGlvbih0aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9zY3JvbGxPZmZzZXQrbiksdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQoMCksdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGx9LF9yZXNldEF2ZXJhZ2U6ZnVuY3Rpb24oKXt0aGlzLl9waHlzaWNhbEF2ZXJhZ2U9MCx0aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudD0wfSxfcmVzaXplSGFuZGxlcjpmdW5jdGlvbigpe3RoaXMuX2RlYm91bmNlKCJfcmVuZGVyIixmdW5jdGlvbigpe3RoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fbGFzdFZpc2libGVJbmRleFZhbD1udWxsLHRoaXMudXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzKCksdGhpcy5faXNWaXNpYmxlPyh0aGlzLnRvZ2dsZVNjcm9sbExpc3RlbmVyKCEwKSx0aGlzLl9yZXNldEF2ZXJhZ2UoKSx0aGlzLl9yZW5kZXIoKSk6dGhpcy50b2dnbGVTY3JvbGxMaXN0ZW5lcighMSl9LE5pKX0sX2lzSW5kZXhSZW5kZXJlZDpmdW5jdGlvbihlKXtyZXR1cm4gZT49dGhpcy5fdmlydHVhbFN0YXJ0JiZlPD10aGlzLl92aXJ0dWFsRW5kfSxfZ2V0UGh5c2ljYWxJbmRleDpmdW5jdGlvbihlKXtyZXR1cm4odGhpcy5fcGh5c2ljYWxTdGFydCsoZS10aGlzLl92aXJ0dWFsU3RhcnQpKSV0aGlzLl9waHlzaWNhbENvdW50fSxfY2xhbXA6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBNYXRoLm1pbihyLE1hdGgubWF4KHQsZSkpfSxfZGVib3VuY2U6ZnVuY3Rpb24oZSx0LHIpe3RoaXMuX2RlYm91bmNlcnM9dGhpcy5fZGVib3VuY2Vyc3x8e30sdGhpcy5fZGVib3VuY2Vyc1tlXT1zci5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZXJzW2VdLHIsdC5iaW5kKHRoaXMpKSxKbCh0aGlzLl9kZWJvdW5jZXJzW2VdKX19KTt2YXIgdFY9Y2xhc3MgZXh0ZW5kcyBZY2V7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue3NpemU6e3R5cGU6TnVtYmVyLG5vdGlmeTohMH0sX3ZpZHhPZmZzZXQ6e3R5cGU6TnVtYmVyLHZhbHVlOjB9fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX2VmZmVjdGl2ZVNpemVDaGFuZ2VkKF9lZmZlY3RpdmVTaXplKSJdfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9zY3JvbGxIYW5kbGVyKCl9X3VwZGF0ZVNjcm9sbGVySXRlbSgpe31fYWZ0ZXJTY3JvbGwoKXt9X2dldFJvd1RhcmdldCgpe31fY3JlYXRlU2Nyb2xsZXJSb3dzKCl7fV9jYW5Qb3B1bGF0ZSgpe31zY3JvbGxUb0luZGV4KHQpe3RoaXMuX3dhcm5Qcml2YXRlQVBJQWNjZXNzKCJzY3JvbGxUb0luZGV4IiksdGhpcy5fc2Nyb2xsaW5nVG9JbmRleD0hMCx0PU1hdGgubWluKE1hdGgubWF4KHQsMCksdGhpcy5fZWZmZWN0aXZlU2l6ZS0xKSx0aGlzLiQudGFibGUuc2Nyb2xsVG9wPXQvdGhpcy5fZWZmZWN0aXZlU2l6ZSoodGhpcy4kLnRhYmxlLnNjcm9sbEhlaWdodC10aGlzLiQudGFibGUub2Zmc2V0SGVpZ2h0KSx0aGlzLl9zY3JvbGxIYW5kbGVyKCksdGhpcy5fYWNjZXNzSXJvbkxpc3RBUEkoKCk9PnRoaXMuX21heFNjcm9sbFRvcCkmJnRoaXMuX3ZpcnR1YWxDb3VudDx0aGlzLl9lZmZlY3RpdmVTaXplJiZ0aGlzLl9hZGp1c3RWaXJ0dWFsSW5kZXhPZmZzZXQoMWU2KSx0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKT0+c3VwZXIuc2Nyb2xsVG9JbmRleCh0LXRoaXMuX3ZpZHhPZmZzZXQpKSx0aGlzLl9zY3JvbGxIYW5kbGVyKCk7bGV0IHI9QXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZpbHRlcihuPT5uLmluZGV4PT09dClbMF07aWYocil7bGV0IG49ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AtdGhpcy4kLmhlYWRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b207TWF0aC5hYnMobik+MSYmKHRoaXMuJC50YWJsZS5zY3JvbGxUb3ArPW4sdGhpcy5fc2Nyb2xsSGFuZGxlcigpKX10aGlzLl9zY3JvbGxpbmdUb0luZGV4PSExfV9lZmZlY3RpdmVTaXplQ2hhbmdlZCh0KXtsZXQgcixuPTA7dGhpcy5faXRlcmF0ZUl0ZW1zKChpLG8pPT57aWYobz09PXRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4KXtsZXQgYT10aGlzLl9waHlzaWNhbEl0ZW1zW2ldO3I9YS5pbmRleCxuPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wfX0pLHRoaXMuaXRlbXMmJnQ8dGhpcy5pdGVtcy5sZW5ndGgmJih0aGlzLl9zY3JvbGxUb3A9MCksQXJyYXkuaXNBcnJheSh0aGlzLml0ZW1zKXx8KHRoaXMuaXRlbXM9e2xlbmd0aDpNYXRoLm1pbih0LDFlNSl9KSx0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKT0+c3VwZXIuX2l0ZW1zQ2hhbmdlZCh7cGF0aDoiaXRlbXMifSkpLHRoaXMuX3ZpcnR1YWxDb3VudD1NYXRoLm1pbih0aGlzLml0ZW1zLmxlbmd0aCx0KXx8MCx0aGlzLl9zY3JvbGxUb3A9PT0wJiYodGhpcy5fYWNjZXNzSXJvbkxpc3RBUEkoKCk9PnRoaXMuX3Njcm9sbFRvSW5kZXgoTWF0aC5taW4odC0xLHIpKSksdGhpcy5faXRlcmF0ZUl0ZW1zKGk9PntsZXQgbz10aGlzLl9waHlzaWNhbEl0ZW1zW2ldO2lmKG8uaW5kZXg9PT1yJiYodGhpcy4kLnRhYmxlLnNjcm9sbFRvcCs9TWF0aC5yb3VuZChvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcC1uKSksby5pbmRleD09PXRoaXMuX2ZvY3VzZWRJdGVtSW5kZXgmJnRoaXMuX2l0ZW1zRm9jdXNhYmxlJiZ0aGlzLiQuaXRlbXMuY29udGFpbnModGhpcy5zaGFkb3dSb290LmFjdGl2ZUVsZW1lbnQpKXtsZXQgYT1BcnJheS5mcm9tKHRoaXMuX2l0ZW1zRm9jdXNhYmxlLnBhcmVudEVsZW1lbnQuY2hpbGRyZW4pLmluZGV4T2YodGhpcy5faXRlbXNGb2N1c2FibGUpO28uY2hpbGRyZW5bYV0uZm9jdXMoKX19KSksdGhpcy5fYXNzaWduTW9kZWxzKCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLl91cGRhdGUoKSksdGhpcy5fX3VwZGF0ZUZvb3RlclBvc2l0aW9uaW5nKCl9X3Bvc2l0aW9uSXRlbXMoKXt0aGlzLl9hZGp1c3RTY3JvbGxQb3NpdGlvbigpO2xldCB0O2lzTmFOKHRoaXMuX3BoeXNpY2FsVG9wKSYmKHQ9ITAsdGhpcy5fcGh5c2ljYWxUb3A9MCk7bGV0IHI9dGhpcy5fcGh5c2ljYWxUb3A7dGhpcy5faXRlcmF0ZUl0ZW1zKG49Pnt0aGlzLl9waHlzaWNhbEl0ZW1zW25dLnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlWSgke3J9cHgpYCxyKz10aGlzLl9waHlzaWNhbFNpemVzW25dfSksdCYmdGhpcy5fc2Nyb2xsVG9JbmRleCgwKX1faW5jcmVhc2VQb29sSWZOZWVkZWQodCl7dD09PTAmJnRoaXMuX3Njcm9sbGluZ1RvSW5kZXh8fCF0aGlzLl9jYW5Qb3B1bGF0ZSgpfHwhdGhpcy5fZWZmZWN0aXZlU2l6ZXx8KHRoaXMuX2luaXRpYWxQb29sQ3JlYXRlZD90aGlzLl9vcHRQaHlzaWNhbFNpemUhPT0xLzAmJih0aGlzLl9kZWJvdW5jZUluY3JlYXNlUG9vbD1zci5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZUluY3JlYXNlUG9vbCxOaSwoKT0+e3RoaXMuX3VwZGF0ZU1ldHJpY3MoKTtsZXQgcj10aGlzLl9vcHRQaHlzaWNhbFNpemUtdGhpcy5fcGh5c2ljYWxTaXplLG49TWF0aC5jZWlsKHIvdGhpcy5fcGh5c2ljYWxBdmVyYWdlKTt0aGlzLl9waHlzaWNhbENvdW50K24+dGhpcy5fZWZmZWN0aXZlU2l6ZSYmKG49TWF0aC5tYXgoMCx0aGlzLl9lZmZlY3RpdmVTaXplLXRoaXMuX3BoeXNpY2FsQ291bnQpKSx0aGlzLl9waHlzaWNhbFNpemUmJm4+MCYmdGhpcy5fb3B0UGh5c2ljYWxTaXplIT09MS8wJiYoc3VwZXIuX2luY3JlYXNlUG9vbElmTmVlZGVkKG4pLHRoaXMuX19yZW9yZGVyQ2hpbGROb2RlcygpKX0pKToodGhpcy5faW5pdGlhbFBvb2xDcmVhdGVkPSEwLHN1cGVyLl9pbmNyZWFzZVBvb2xJZk5lZWRlZCgyNSkpKX1fX3Jlb3JkZXJDaGlsZE5vZGVzKCl7bGV0IHQ9QXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGROb2Rlcyk7ISF0LnJlZHVjZSgobixpLG8sYSk9PntpZihvPT09MHx8YVtvLTFdLmluZGV4PT09aS5pbmRleC0xKXJldHVybiBufSwhMCl8fHQuc29ydCgobixpKT0+bi5pbmRleC1pLmluZGV4KS5mb3JFYWNoKG49PnRoaXMuJC5pdGVtcy5hcHBlbmRDaGlsZChuKSl9X2NyZWF0ZVBvb2wodCl7bGV0IHI9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLG49dGhpcy5fY3JlYXRlU2Nyb2xsZXJSb3dzKHQpO24uZm9yRWFjaChvPT5yLmFwcGVuZENoaWxkKG8pKSx0aGlzLl9nZXRSb3dUYXJnZXQoKS5hcHBlbmRDaGlsZChyKTtsZXQgaT10aGlzLnF1ZXJ5U2VsZWN0b3IoIltzbG90XSIpO2lmKGkpe2xldCBvPWkuZ2V0QXR0cmlidXRlKCJzbG90Iik7aS5zZXRBdHRyaWJ1dGUoInNsb3QiLCJmb28tYmFyIiksaS5zZXRBdHRyaWJ1dGUoInNsb3QiLG8pfXJldHVybiBDbSh0aGlzLCgpPT50aGlzLm5vdGlmeVJlc2l6ZSgpKSxufV9hc3NpZ25Nb2RlbHModCl7dGhpcy5faXRlcmF0ZUl0ZW1zKChyLG4pPT57bGV0IGk9dGhpcy5fcGh5c2ljYWxJdGVtc1tyXTt0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImhpZGRlbiIsbj49dGhpcy5fZWZmZWN0aXZlU2l6ZSxpKSx0aGlzLl91cGRhdGVTY3JvbGxlckl0ZW0oaSxuKyh0aGlzLl92aWR4T2Zmc2V0fHwwKSl9LHQpfV9zY3JvbGxIYW5kbGVyKCl7bGV0IHQ9dGhpcy4kLnRhYmxlLnNjcm9sbFRvcC10aGlzLl9zY3JvbGxQb3NpdGlvbjt0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSShzdXBlci5fc2Nyb2xsSGFuZGxlcik7bGV0IHI9dGhpcy5fdmlkeE9mZnNldDt0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKT0+dGhpcy5fbWF4U2Nyb2xsVG9wKSYmdGhpcy5fdmlydHVhbENvdW50PHRoaXMuX2VmZmVjdGl2ZVNpemU/dGhpcy5fYWRqdXN0VmlydHVhbEluZGV4T2Zmc2V0KHQpOnRoaXMuX3ZpZHhPZmZzZXQ9MCx0aGlzLl92aWR4T2Zmc2V0IT09ciYmdGhpcy5fdXBkYXRlKCksdGhpcy5fYWZ0ZXJTY3JvbGwoKX1fYWRqdXN0VmlydHVhbEluZGV4T2Zmc2V0KHQpe2lmKE1hdGguYWJzKHQpPjFlNCl7aWYodGhpcy5fbm9TY2FsZSl7dGhpcy5fbm9TY2FsZT0hMTtyZXR1cm59bGV0IHI9dGhpcy4kLnRhYmxlLnNjcm9sbFRvcC8odGhpcy4kLnRhYmxlLnNjcm9sbEhlaWdodC10aGlzLiQudGFibGUub2Zmc2V0SGVpZ2h0KSxuPXIqdGhpcy5fZWZmZWN0aXZlU2l6ZTt0aGlzLl92aWR4T2Zmc2V0PU1hdGgucm91bmQobi1yKnRoaXMuX3ZpcnR1YWxDb3VudCl9ZWxzZXtsZXQgcj10aGlzLl92aWR4T2Zmc2V0fHwwLG49MWUzLGk9MTAwO3RoaXMuX3Njcm9sbFRvcD09PTA/KHRoaXMuX3ZpZHhPZmZzZXQ9MCxyIT09dGhpcy5fdmlkeE9mZnNldCYmc3VwZXIuc2Nyb2xsVG9JbmRleCgwKSk6dGhpcy5maXJzdFZpc2libGVJbmRleDxuJiZ0aGlzLl92aWR4T2Zmc2V0PjAmJih0aGlzLl92aWR4T2Zmc2V0LT1NYXRoLm1pbih0aGlzLl92aWR4T2Zmc2V0LGkpLHIhPT10aGlzLl92aWR4T2Zmc2V0JiZzdXBlci5zY3JvbGxUb0luZGV4KHRoaXMuZmlyc3RWaXNpYmxlSW5kZXgrKHItdGhpcy5fdmlkeE9mZnNldCkpLHRoaXMuX25vU2NhbGU9ITApO2xldCBvPXRoaXMuX2VmZmVjdGl2ZVNpemUtdGhpcy5fdmlydHVhbENvdW50O3RoaXMuX3Njcm9sbFRvcD49dGhpcy5fbWF4U2Nyb2xsVG9wJiZ0aGlzLl9tYXhTY3JvbGxUb3A+MD8odGhpcy5fdmlkeE9mZnNldD1vLHIhPT10aGlzLl92aWR4T2Zmc2V0JiZzdXBlci5zY3JvbGxUb0luZGV4KHRoaXMuX3ZpcnR1YWxDb3VudCkpOnRoaXMuZmlyc3RWaXNpYmxlSW5kZXg+dGhpcy5fdmlydHVhbENvdW50LW4mJnRoaXMuX3ZpZHhPZmZzZXQ8byYmKHRoaXMuX3ZpZHhPZmZzZXQrPU1hdGgubWluKG8tdGhpcy5fdmlkeE9mZnNldCxpKSxyIT09dGhpcy5fdmlkeE9mZnNldCYmc3VwZXIuc2Nyb2xsVG9JbmRleCh0aGlzLmZpcnN0VmlzaWJsZUluZGV4LSh0aGlzLl92aWR4T2Zmc2V0LXIpKSx0aGlzLl9ub1NjYWxlPSEwKX19X2FjY2Vzc0lyb25MaXN0QVBJKHQpe3RoaXMuX3dhcm5Qcml2YXRlQVBJQWNjZXNzQXN5bmNFbmFibGVkPSExO2xldCByPXQuYXBwbHkodGhpcyk7cmV0dXJuIHRoaXMuX2RlYm91bmNlcldhcm5Qcml2YXRlQVBJQWNjZXNzPXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlcldhcm5Qcml2YXRlQVBJQWNjZXNzLE5pLCgpPT50aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2Vzc0FzeW5jRW5hYmxlZD0hMCkscn1fZGVib3VuY2VSZW5kZXIodCxyKXtzdXBlci5fZGVib3VuY2VSZW5kZXIoKCk9PnRoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKHQpLHIpfV93YXJuUHJpdmF0ZUFQSUFjY2Vzcyh0KXt0aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2Vzc0FzeW5jRW5hYmxlZCYmY29uc29sZS53YXJuKGBBY2Nlc3NpbmcgcHJpdmF0ZSBBUEkgKCR7dH0pIWApfV9yZW5kZXIoKXt0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSShzdXBlci5fcmVuZGVyKX1faXRlbXNDaGFuZ2VkKCl7fWdldCBfZmlyc3RWaXNpYmxlSW5kZXgoKXtyZXR1cm4gdGhpcy5fYWNjZXNzSXJvbkxpc3RBUEkoKCk9PnN1cGVyLmZpcnN0VmlzaWJsZUluZGV4KX1nZXQgX2xhc3RWaXNpYmxlSW5kZXgoKXtyZXR1cm4gdGhpcy5fYWNjZXNzSXJvbkxpc3RBUEkoKCk9PnN1cGVyLmxhc3RWaXNpYmxlSW5kZXgpfV9zY3JvbGxUb0luZGV4KHQpe3RoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKCgpPT50aGlzLnNjcm9sbFRvSW5kZXgodCkpfWdldCBmaXJzdFZpc2libGVJbmRleCgpe3JldHVybiB0aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2VzcygiZmlyc3RWaXNpYmxlSW5kZXgiKSxzdXBlci5maXJzdFZpc2libGVJbmRleH1zZXQgZmlyc3RWaXNpYmxlSW5kZXgodCl7dGhpcy5fd2FyblByaXZhdGVBUElBY2Nlc3MoImZpcnN0VmlzaWJsZUluZGV4Iiksc3VwZXIuZmlyc3RWaXNpYmxlSW5kZXg9dH1nZXQgbGFzdFZpc2libGVJbmRleCgpe3JldHVybiB0aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2VzcygibGFzdFZpc2libGVJbmRleCIpLHN1cGVyLmxhc3RWaXNpYmxlSW5kZXh9c2V0IGxhc3RWaXNpYmxlSW5kZXgodCl7dGhpcy5fd2FyblByaXZhdGVBUElBY2Nlc3MoImxhc3RWaXNpYmxlSW5kZXgiKSxzdXBlci5sYXN0VmlzaWJsZUluZGV4PXR9dXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzKCl7dGhpcy5fd2FyblByaXZhdGVBUElBY2Nlc3MoInVwZGF0ZVZpZXdwb3J0Qm91bmRhcmllcyIpLHN1cGVyLnVwZGF0ZVZpZXdwb3J0Qm91bmRhcmllcy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9X3Jlc2l6ZUhhbmRsZXIoKXtzdXBlci5fcmVzaXplSGFuZGxlcigpLGNpKCl9fTt2YXIgamNlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX2ExMXlVcGRhdGVHcmlkU2l6ZShzaXplLCBfY29sdW1uVHJlZSwgX2NvbHVtblRyZWUuKikiXX1fYTExeUdldEhlYWRlclJvd0NvdW50KHIpe3JldHVybiByLmZpbHRlcihuPT5uLnNvbWUoaT0+aS5faGVhZGVyVGVtcGxhdGV8fGkuaGVhZGVyUmVuZGVyZXJ8fGkucGF0aHx8aS5oZWFkZXIpKS5sZW5ndGh9X2ExMXlHZXRGb290ZXJSb3dDb3VudChyKXtyZXR1cm4gci5maWx0ZXIobj0+bi5zb21lKGk9PmkuX2hlYWRlclRlbXBsYXRlfHxpLmhlYWRlclJlbmRlcmVyKSkubGVuZ3RofV9hMTF5VXBkYXRlR3JpZFNpemUocixuKXtpZihyPT09dm9pZCAwfHxuPT09dm9pZCAwKXJldHVybjtsZXQgaT1uW24ubGVuZ3RoLTFdO3RoaXMuJC50YWJsZS5zZXRBdHRyaWJ1dGUoImFyaWEtcm93Y291bnQiLHIrdGhpcy5fYTExeUdldEhlYWRlclJvd0NvdW50KG4pK3RoaXMuX2ExMXlHZXRGb290ZXJSb3dDb3VudChuKSksdGhpcy4kLnRhYmxlLnNldEF0dHJpYnV0ZSgiYXJpYS1jb2xjb3VudCIsaSYmaS5sZW5ndGh8fDApLHRoaXMuX2ExMXlVcGRhdGVIZWFkZXJSb3dzKCksdGhpcy5fYTExeVVwZGF0ZUZvb3RlclJvd3MoKX1fYTExeVVwZGF0ZUhlYWRlclJvd3MoKXtBcnJheS5mcm9tKHRoaXMuJC5oZWFkZXIuY2hpbGRyZW4pLmZvckVhY2goKHIsbik9PnIuc2V0QXR0cmlidXRlKCJhcmlhLXJvd2luZGV4IixuKzEpKX1fYTExeVVwZGF0ZUZvb3RlclJvd3MoKXtBcnJheS5mcm9tKHRoaXMuJC5mb290ZXIuY2hpbGRyZW4pLmZvckVhY2goKHIsbik9PnIuc2V0QXR0cmlidXRlKCJhcmlhLXJvd2luZGV4Iix0aGlzLl9hMTF5R2V0SGVhZGVyUm93Q291bnQodGhpcy5fY29sdW1uVHJlZSkrdGhpcy5zaXplK24rMSkpfV9hMTF5VXBkYXRlUm93Um93aW5kZXgocixuKXtyLnNldEF0dHJpYnV0ZSgiYXJpYS1yb3dpbmRleCIsbit0aGlzLl9hMTF5R2V0SGVhZGVyUm93Q291bnQodGhpcy5fY29sdW1uVHJlZSkrMSl9X2ExMXlVcGRhdGVSb3dTZWxlY3RlZChyLG4pe3Iuc2V0QXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIixCb29sZWFuKG4pKSxBcnJheS5mcm9tKHIuY2hpbGRyZW4pLmZvckVhY2goaT0+aS5zZXRBdHRyaWJ1dGUoImFyaWEtc2VsZWN0ZWQiLEJvb2xlYW4obikpKX1fYTExeVVwZGF0ZVJvd0xldmVsKHIsbil7ci5zZXRBdHRyaWJ1dGUoImFyaWEtbGV2ZWwiLG4rMSl9X2ExMXlVcGRhdGVSb3dEZXRhaWxzT3BlbmVkKHIsbil7QXJyYXkuZnJvbShyLmNoaWxkcmVuKS5mb3JFYWNoKGk9Pnt0eXBlb2Ygbj09ImJvb2xlYW4iP2kuc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIixuKTppLmhhc0F0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIpJiZpLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIpfSl9X2ExMXlTZXRSb3dEZXRhaWxzQ2VsbChyLG4pe0FycmF5LmZyb20oci5jaGlsZHJlbikuZm9yRWFjaChpPT57aSE9PW4mJmkuc2V0QXR0cmlidXRlKCJhcmlhLWNvbnRyb2xzIixuLmlkKX0pfV9hMTF5VXBkYXRlQ2VsbENvbHNwYW4ocixuKXtyLnNldEF0dHJpYnV0ZSgiYXJpYS1jb2xzcGFuIixOdW1iZXIobikpfV9hMTF5VXBkYXRlU29ydGVycygpe0FycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsKCJ2YWFkaW4tZ3JpZC1zb3J0ZXIiKSkuZm9yRWFjaChyPT57bGV0IG49ci5wYXJlbnROb2RlO2Zvcig7biYmbi5sb2NhbE5hbWUhPT0idmFhZGluLWdyaWQtY2VsbC1jb250ZW50Ijspbj1uLnBhcmVudE5vZGU7biYmbi5hc3NpZ25lZFNsb3QmJm4uYXNzaWduZWRTbG90LnBhcmVudE5vZGUuc2V0QXR0cmlidXRlKCJhcmlhLXNvcnQiLHthc2M6ImFzY2VuZGluZyIsZGVzYzoiZGVzY2VuZGluZyJ9W1N0cmluZyhyLmRpcmVjdGlvbildfHwibm9uZSIpfSl9fTt2YXIgWGNlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57YWN0aXZlSXRlbTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLHZhbHVlOm51bGx9fX1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy4kLnNjcm9sbGVyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl9vbkNsaWNrLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiY2VsbC1hY3RpdmF0ZSIsdGhpcy5fYWN0aXZhdGVJdGVtLmJpbmQodGhpcykpfV9hY3RpdmF0ZUl0ZW0ocil7bGV0IG49ci5kZXRhaWwubW9kZWwsaT1uP24uaXRlbTpudWxsO2kmJih0aGlzLmFjdGl2ZUl0ZW09dGhpcy5faXRlbXNFcXVhbCh0aGlzLmFjdGl2ZUl0ZW0saSk/bnVsbDppKX1fb25DbGljayhyKXtpZihyLmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO2xldCBuPXIuY29tcG9zZWRQYXRoKCksaT1uW24uaW5kZXhPZih0aGlzLiQudGFibGUpLTNdO2lmKCFpfHxpLmdldEF0dHJpYnV0ZSgicGFydCIpLmluZGV4T2YoImRldGFpbHMtY2VsbCIpPi0xKXJldHVybjtsZXQgbz1pLl9jb250ZW50LGE9dGhpcy5nZXRSb290Tm9kZSgpLmFjdGl2ZUVsZW1lbnQ7IW8uY29udGFpbnMoYSkmJiF0aGlzLl9pc0ZvY3VzYWJsZShyLnRhcmdldCkmJnRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNlbGwtYWN0aXZhdGUiLHtkZXRhaWw6e21vZGVsOnRoaXMuX19nZXRSb3dNb2RlbChpLnBhcmVudEVsZW1lbnQpfX0pKX1faXNGb2N1c2FibGUocil7cmV0dXJuIGxocihyKX19LGxocj1lPT57aWYoIWUucGFyZW50Tm9kZSlyZXR1cm4hMTtsZXQgcj1BcnJheS5mcm9tKGUucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCJbdGFiaW5kZXhdLCBidXR0b24sIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBvYmplY3QsIGlmcmFtZSwgbGFiZWwsIGFbaHJlZl0sIGFyZWFbaHJlZl0iKSkuZmlsdGVyKG49Pm4uZ2V0QXR0cmlidXRlKCJwYXJ0IikhPT0iY2VsbCBib2R5LWNlbGwiKS5pbmRleE9mKGUpIT09LTE7cmV0dXJuIWUuZGlzYWJsZWQmJnJ9O3ZhciAkY2U9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntpdGVtczpBcnJheX19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9pdGVtc0NoYW5nZWQoaXRlbXMsIGl0ZW1zLiosIGlzQXR0YWNoZWQpIl19X2l0ZW1zQ2hhbmdlZChyLG4saSl7aWYoISFpKXtpZighQXJyYXkuaXNBcnJheShyKSl7cj09bnVsbCYmKHRoaXMuc2l6ZT0wKSx0aGlzLmRhdGFQcm92aWRlcj09PXRoaXMuX2FycmF5RGF0YVByb3ZpZGVyJiYodGhpcy5kYXRhUHJvdmlkZXI9dm9pZCAwKTtyZXR1cm59dGhpcy5zaXplPXIubGVuZ3RoLHRoaXMuZGF0YVByb3ZpZGVyPXRoaXMuZGF0YVByb3ZpZGVyfHx0aGlzLl9hcnJheURhdGFQcm92aWRlcix0aGlzLmNsZWFyQ2FjaGUoKSx0aGlzLl9lbnN1cmVGaXJzdFBhZ2VMb2FkZWQoKX19X2FycmF5RGF0YVByb3ZpZGVyKHIsbil7bGV0IGk9KEFycmF5LmlzQXJyYXkodGhpcy5pdGVtcyk/dGhpcy5pdGVtczpbXSkuc2xpY2UoMCk7dGhpcy5fZmlsdGVycyYmdGhpcy5fY2hlY2tQYXRocyh0aGlzLl9maWx0ZXJzLCJmaWx0ZXJpbmciLGkpJiYoaT10aGlzLl9maWx0ZXIoaSkpLHRoaXMuc2l6ZT1pLmxlbmd0aCxyLnNvcnRPcmRlcnMubGVuZ3RoJiZ0aGlzLl9jaGVja1BhdGhzKHRoaXMuX3NvcnRlcnMsInNvcnRpbmciLGkpJiYoaT1pLnNvcnQodGhpcy5fbXVsdGlTb3J0LmJpbmQodGhpcykpKTtsZXQgbz1yLnBhZ2Uqci5wYWdlU2l6ZSxhPW8rci5wYWdlU2l6ZSxzPWkuc2xpY2UobyxhKTtuKHMsaS5sZW5ndGgpfV9jaGVja1BhdGhzKHIsbixpKXtpZighaS5sZW5ndGgpcmV0dXJuITE7bGV0IG89ITA7Zm9yKGxldCBhIGluIHIpe2xldCBzPXJbYV0ucGF0aDtpZighc3x8cy5pbmRleE9mKCIuIik9PT0tMSljb250aW51ZTtsZXQgbD1zLnJlcGxhY2UoL1wuW14uXSokLywiIik7T2EuZ2V0KGwsaVswXSk9PT12b2lkIDAmJihjb25zb2xlLndhcm4oYFBhdGggIiR7c30iIHVzZWQgZm9yICR7bn0gZG9lcyBub3QgZXhpc3QgaW4gYWxsIG9mIHRoZSBpdGVtcywgJHtufSBpcyBkaXNhYmxlZC5gKSxvPSExKX1yZXR1cm4gb31fbXVsdGlTb3J0KHIsbil7cmV0dXJuIHRoaXMuX3NvcnRlcnMubWFwKGk9PmkuZGlyZWN0aW9uPT09ImFzYyI/dGhpcy5fY29tcGFyZShPYS5nZXQoaS5wYXRoLHIpLE9hLmdldChpLnBhdGgsbikpOmkuZGlyZWN0aW9uPT09ImRlc2MiP3RoaXMuX2NvbXBhcmUoT2EuZ2V0KGkucGF0aCxuKSxPYS5nZXQoaS5wYXRoLHIpKTowKS5yZWR1Y2UoKGksbyk9Pml8fG8sMCl9X25vcm1hbGl6ZUVtcHR5VmFsdWUocil7cmV0dXJuW3ZvaWQgMCxudWxsXS5pbmRleE9mKHIpPj0wPyIiOmlzTmFOKHIpP3IudG9TdHJpbmcoKTpyfV9jb21wYXJlKHIsbil7cmV0dXJuIHI9dGhpcy5fbm9ybWFsaXplRW1wdHlWYWx1ZShyKSxuPXRoaXMuX25vcm1hbGl6ZUVtcHR5VmFsdWUobikscjxuPy0xOnI+bj8xOjB9X2ZpbHRlcihyKXtyZXR1cm4gci5maWx0ZXIobj0+dGhpcy5fZmlsdGVycy5maWx0ZXIoaT0+e2xldCBvPXRoaXMuX25vcm1hbGl6ZUVtcHR5VmFsdWUoT2EuZ2V0KGkucGF0aCxuKSksYT10aGlzLl9ub3JtYWxpemVFbXB0eVZhbHVlKGkudmFsdWUpLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTtyZXR1cm4gby50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihhKT09PS0xfSkubGVuZ3RoPT09MCl9fTt2YXIgS2NlPWU9PmNsYXNzIGV4dGVuZHMgdmgoZSl7cmVhZHkoKXtzdXBlci5yZWFkeSgpO2xldCByPXRoaXMuJC5zY3JvbGxlcjtUbShyLCJ0cmFjayIsdGhpcy5fb25IZWFkZXJUcmFjay5iaW5kKHRoaXMpKSxyLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsbj0+ci5oYXNBdHRyaWJ1dGUoImNvbHVtbi1yZXNpemluZyIpJiZuLnByZXZlbnREZWZhdWx0KCkpLHIuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLG49Pm4udGFyZ2V0LmdldEF0dHJpYnV0ZSgicGFydCIpPT0icmVzaXplLWhhbmRsZSImJm4ucHJldmVudERlZmF1bHQoKSksci5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLG49Pm4udGFyZ2V0LmdldEF0dHJpYnV0ZSgicGFydCIpPT09InJlc2l6ZS1oYW5kbGUiJiZuLnByZXZlbnREZWZhdWx0KCkpfV9vbkhlYWRlclRyYWNrKHIpe2xldCBuPXIudGFyZ2V0O2lmKG4uZ2V0QXR0cmlidXRlKCJwYXJ0Iik9PT0icmVzaXplLWhhbmRsZSIpe2xldCBvPW4ucGFyZW50RWxlbWVudC5fY29sdW1uO2Zvcih0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImNvbHVtbi1yZXNpemluZyIsITAsdGhpcy4kLnNjcm9sbGVyKTtvLmxvY2FsTmFtZT09PSJ2YWFkaW4tZ3JpZC1jb2x1bW4tZ3JvdXAiOylvPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG8uX2NoaWxkQ29sdW1ucywwKS5zb3J0KGZ1bmN0aW9uKGwsYyl7cmV0dXJuIGwuX29yZGVyLWMuX29yZGVyfSkuZmlsdGVyKGZ1bmN0aW9uKGwpe3JldHVybiFsLmhpZGRlbn0pLnBvcCgpO2xldCBhPUFycmF5LmZyb20odGhpcy4kLmhlYWRlci5xdWVyeVNlbGVjdG9yQWxsKCdbcGFydH49InJvdyJdOmxhc3QtY2hpbGQgW3BhcnR+PSJjZWxsIl0nKSkscz1hLmZpbHRlcihsPT5sLl9jb2x1bW49PT1vKVswXTtpZihzLm9mZnNldFdpZHRoKXtsZXQgbD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShzKSxjPTEwK3BhcnNlSW50KGwucGFkZGluZ0xlZnQpK3BhcnNlSW50KGwucGFkZGluZ1JpZ2h0KStwYXJzZUludChsLmJvcmRlckxlZnRXaWR0aCkrcGFyc2VJbnQobC5ib3JkZXJSaWdodFdpZHRoKStwYXJzZUludChsLm1hcmdpbkxlZnQpK3BhcnNlSW50KGwubWFyZ2luUmlnaHQpLHU9cy5vZmZzZXRXaWR0aCsodGhpcy5fX2lzUlRMP3MuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdC1yLmRldGFpbC54OnIuZGV0YWlsLngtcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodCk7by53aWR0aD1NYXRoLm1heChjLHUpKyJweCIsby5mbGV4R3Jvdz0wfWEuc29ydChmdW5jdGlvbihsLGMpe3JldHVybiBsLl9jb2x1bW4uX29yZGVyLWMuX2NvbHVtbi5fb3JkZXJ9KS5mb3JFYWNoKGZ1bmN0aW9uKGwsYyx1KXtjPHUuaW5kZXhPZihzKSYmKGwuX2NvbHVtbi53aWR0aD1sLm9mZnNldFdpZHRoKyJweCIsbC5fY29sdW1uLmZsZXhHcm93PTApfSksci5kZXRhaWwuc3RhdGU9PT0iZW5kIiYmKHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiY29sdW1uLXJlc2l6aW5nIiwhMSx0aGlzLiQuc2Nyb2xsZXIpLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNvbHVtbi1yZXNpemUiLHtkZXRhaWw6e3Jlc2l6ZWRDb2x1bW46b319KSkpLHRoaXMuX3Jlc2l6ZUhhbmRsZXIoKX19fTt2YXIgWmNlPWNsYXNzIEpjZXtjb25zdHJ1Y3Rvcih0LHIsbil7dGhpcy5ncmlkPXQsdGhpcy5wYXJlbnRDYWNoZT1yLHRoaXMucGFyZW50SXRlbT1uLHRoaXMuaXRlbUNhY2hlcz17fSx0aGlzLml0ZW1zPXt9LHRoaXMuZWZmZWN0aXZlU2l6ZT0wLHRoaXMuc2l6ZT0wLHRoaXMucGVuZGluZ1JlcXVlc3RzPXt9fWlzTG9hZGluZygpe3JldHVybiBCb29sZWFuKE9iamVjdC5rZXlzKHRoaXMucGVuZGluZ1JlcXVlc3RzKS5sZW5ndGh8fE9iamVjdC5rZXlzKHRoaXMuaXRlbUNhY2hlcykuZmlsdGVyKHQ9PnRoaXMuaXRlbUNhY2hlc1t0XS5pc0xvYWRpbmcoKSlbMF0pfWdldEl0ZW1Gb3JJbmRleCh0KXtsZXR7Y2FjaGU6cixzY2FsZWRJbmRleDpufT10aGlzLmdldENhY2hlQW5kSW5kZXgodCk7cmV0dXJuIHIuaXRlbXNbbl19dXBkYXRlU2l6ZSgpe3RoaXMuZWZmZWN0aXZlU2l6ZT0hdGhpcy5wYXJlbnRJdGVtfHx0aGlzLmdyaWQuX2lzRXhwYW5kZWQodGhpcy5wYXJlbnRJdGVtKT90aGlzLnNpemUrT2JqZWN0LmtleXModGhpcy5pdGVtQ2FjaGVzKS5yZWR1Y2UoKHQscik9PntsZXQgbj10aGlzLml0ZW1DYWNoZXNbcl07cmV0dXJuIG4udXBkYXRlU2l6ZSgpLHQrbi5lZmZlY3RpdmVTaXplfSwwKTowfWVuc3VyZVN1YkNhY2hlRm9yU2NhbGVkSW5kZXgodCl7aWYoIXRoaXMuaXRlbUNhY2hlc1t0XSl7bGV0IHI9bmV3IEpjZSh0aGlzLmdyaWQsdGhpcyx0aGlzLml0ZW1zW3RdKTt0aGlzLml0ZW1DYWNoZXNbdF09cix0aGlzLmdyaWQuX2xvYWRQYWdlKDAscil9fWdldENhY2hlQW5kSW5kZXgodCl7bGV0IHI9dCxuPU9iamVjdC5rZXlzKHRoaXMuaXRlbUNhY2hlcyk7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspe2xldCBvPU51bWJlcihuW2ldKSxhPXRoaXMuaXRlbUNhY2hlc1tvXTtpZihyPD1vKXJldHVybntjYWNoZTp0aGlzLHNjYWxlZEluZGV4OnJ9O2lmKHI8PW8rYS5lZmZlY3RpdmVTaXplKXJldHVybiBhLmdldENhY2hlQW5kSW5kZXgoci1vLTEpO3ItPWEuZWZmZWN0aXZlU2l6ZX1yZXR1cm57Y2FjaGU6dGhpcyxzY2FsZWRJbmRleDpyfX19LFFjZT1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue3BhZ2VTaXplOnt0eXBlOk51bWJlcix2YWx1ZTo1MCxvYnNlcnZlcjoiX3BhZ2VTaXplQ2hhbmdlZCJ9LGRhdGFQcm92aWRlcjp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLG9ic2VydmVyOiJfZGF0YVByb3ZpZGVyQ2hhbmdlZCJ9LGxvYWRpbmc6e3R5cGU6Qm9vbGVhbixub3RpZnk6ITAscmVhZE9ubHk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxfY2FjaGU6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBaY2UodGhpcyl9fSxpdGVtSWRQYXRoOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxleHBhbmRlZEl0ZW1zOnt0eXBlOk9iamVjdCxub3RpZnk6ITAsdmFsdWU6KCk9PltdfX19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9zaXplQ2hhbmdlZChzaXplKSIsIl9pdGVtSWRQYXRoQ2hhbmdlZChpdGVtSWRQYXRoKSIsIl9leHBhbmRlZEl0ZW1zQ2hhbmdlZChleHBhbmRlZEl0ZW1zLiopIl19X3NpemVDaGFuZ2VkKHIpe2xldCBuPXItdGhpcy5fY2FjaGUuc2l6ZTt0aGlzLl9jYWNoZS5zaXplKz1uLHRoaXMuX2NhY2hlLmVmZmVjdGl2ZVNpemUrPW4sdGhpcy5fZWZmZWN0aXZlU2l6ZT10aGlzLl9jYWNoZS5lZmZlY3RpdmVTaXplLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkKDApLHRoaXMuX2RlYm91bmNlSW5jcmVhc2VQb29sJiZ0aGlzLl9kZWJvdW5jZUluY3JlYXNlUG9vbC5mbHVzaCgpfV9nZXRJdGVtKHIsbil7aWYocj49dGhpcy5fZWZmZWN0aXZlU2l6ZSlyZXR1cm47bi5pbmRleD1yO2xldHtjYWNoZTppLHNjYWxlZEluZGV4Om99PXRoaXMuX2NhY2hlLmdldENhY2hlQW5kSW5kZXgociksYT1pLml0ZW1zW29dO2E/KHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibG9hZGluZyIsITEsbiksdGhpcy5fdXBkYXRlSXRlbShuLGEpLHRoaXMuX2lzRXhwYW5kZWQoYSkmJmkuZW5zdXJlU3ViQ2FjaGVGb3JTY2FsZWRJbmRleChvKSk6KHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibG9hZGluZyIsITAsbiksdGhpcy5fbG9hZFBhZ2UodGhpcy5fZ2V0UGFnZUZvckluZGV4KG8pLGkpKX1fZXhwYW5kZWRJbnN0YW5jZUNoYW5nZWRDYWxsYmFjayhyLG4pe3IuaXRlbSE9PXZvaWQgMCYmKG4/dGhpcy5leHBhbmRJdGVtKHIuaXRlbSk6dGhpcy5jb2xsYXBzZUl0ZW0oci5pdGVtKSl9Z2V0SXRlbUlkKHIpe3JldHVybiB0aGlzLml0ZW1JZFBhdGg/dGhpcy5nZXQodGhpcy5pdGVtSWRQYXRoLHIpOnJ9X2lzRXhwYW5kZWQocil7cmV0dXJuIHRoaXMuX19leHBhbmRlZEtleXMuaGFzKHRoaXMuZ2V0SXRlbUlkKHIpKX1fZXhwYW5kZWRJdGVtc0NoYW5nZWQoKXt0aGlzLl9fY2FjaGVFeHBhbmRlZEtleXMoKSx0aGlzLl9jYWNoZS51cGRhdGVTaXplKCksdGhpcy5fZWZmZWN0aXZlU2l6ZT10aGlzLl9jYWNoZS5lZmZlY3RpdmVTaXplLHRoaXMuX2Fzc2lnbk1vZGVscygpfV9pdGVtSWRQYXRoQ2hhbmdlZCgpe3RoaXMuX19jYWNoZUV4cGFuZGVkS2V5cygpfV9fY2FjaGVFeHBhbmRlZEtleXMoKXt0aGlzLmV4cGFuZGVkSXRlbXMmJih0aGlzLl9fZXhwYW5kZWRLZXlzPW5ldyBTZXQsdGhpcy5leHBhbmRlZEl0ZW1zLmZvckVhY2gocj0+e3RoaXMuX19leHBhbmRlZEtleXMuYWRkKHRoaXMuZ2V0SXRlbUlkKHIpKX0pKX1leHBhbmRJdGVtKHIpe3RoaXMuX2lzRXhwYW5kZWQocil8fCh0aGlzLmV4cGFuZGVkSXRlbXM9Wy4uLnRoaXMuZXhwYW5kZWRJdGVtcyxyXSl9Y29sbGFwc2VJdGVtKHIpe3RoaXMuX2lzRXhwYW5kZWQocikmJih0aGlzLmV4cGFuZGVkSXRlbXM9dGhpcy5leHBhbmRlZEl0ZW1zLmZpbHRlcihuPT4hdGhpcy5faXRlbXNFcXVhbChuLHIpKSl9X2dldEluZGV4TGV2ZWwocil7bGV0e2NhY2hlOm59PXRoaXMuX2NhY2hlLmdldENhY2hlQW5kSW5kZXgociksaT0wO2Zvcig7bi5wYXJlbnRDYWNoZTspbj1uLnBhcmVudENhY2hlLGkrKztyZXR1cm4gaX1fY2FuUG9wdWxhdGUoKXtyZXR1cm4gQm9vbGVhbih0aGlzLl9oYXNEYXRhJiZ0aGlzLl9jb2x1bW5UcmVlKX1fbG9hZFBhZ2UocixuKXtpZighbi5wZW5kaW5nUmVxdWVzdHNbcl0mJnRoaXMuZGF0YVByb3ZpZGVyKXt0aGlzLl9zZXRMb2FkaW5nKCEwKSxuLnBlbmRpbmdSZXF1ZXN0c1tyXT0hMDtsZXQgaT17cGFnZTpyLHBhZ2VTaXplOnRoaXMucGFnZVNpemUsc29ydE9yZGVyczp0aGlzLl9tYXBTb3J0ZXJzKCksZmlsdGVyczp0aGlzLl9tYXBGaWx0ZXJzKCkscGFyZW50SXRlbTpuLnBhcmVudEl0ZW19O3RoaXMuX2RlYm91bmNlSW5jcmVhc2VQb29sJiZ0aGlzLl9kZWJvdW5jZUluY3JlYXNlUG9vbC5mbHVzaCgpLHRoaXMuZGF0YVByb3ZpZGVyKGksKG8sYSk9PnthIT09dm9pZCAwP24uc2l6ZT1hOmkucGFyZW50SXRlbSYmKG4uc2l6ZT1vLmxlbmd0aCk7bGV0IHM9QXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLm1hcChsPT5sLl9pdGVtKTtvLmZvckVhY2goKGwsYyk9PntsZXQgdT1yKnRoaXMucGFnZVNpemUrYztuLml0ZW1zW3VdPWwsdGhpcy5faXNFeHBhbmRlZChsKSYmcy5pbmRleE9mKGwpPi0xJiZuLmVuc3VyZVN1YkNhY2hlRm9yU2NhbGVkSW5kZXgodSl9KSx0aGlzLl9oYXNEYXRhPSEwLGRlbGV0ZSBuLnBlbmRpbmdSZXF1ZXN0c1tyXSx0aGlzLl9kZWJvdW5jZXJBcHBseUNhY2hlZERhdGE9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VyQXBwbHlDYWNoZWREYXRhLG1vLmFmdGVyKDApLCgpPT57dGhpcy5fc2V0TG9hZGluZyghMSksdGhpcy5fY2FjaGUudXBkYXRlU2l6ZSgpLHRoaXMuX2VmZmVjdGl2ZVNpemU9dGhpcy5fY2FjaGUuZWZmZWN0aXZlU2l6ZSxBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKGw9PiFsLmhpZGRlbikuZm9yRWFjaChsPT57dGhpcy5fY2FjaGUuZ2V0SXRlbUZvckluZGV4KGwuaW5kZXgpJiZ0aGlzLl9nZXRJdGVtKGwuaW5kZXgsbCl9KSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZCgwKSx0aGlzLl9fc2Nyb2xsVG9QZW5kaW5nSW5kZXgoKX0pLHRoaXMuX2NhY2hlLmlzTG9hZGluZygpfHx0aGlzLl9kZWJvdW5jZXJBcHBseUNhY2hlZERhdGEuZmx1c2goKSx0aGlzLl9faXRlbXNSZWNlaXZlZCgpfSl9fV9nZXRQYWdlRm9ySW5kZXgocil7cmV0dXJuIE1hdGguZmxvb3Ioci90aGlzLnBhZ2VTaXplKX1jbGVhckNhY2hlKCl7dGhpcy5fY2FjaGU9bmV3IFpjZSh0aGlzKSxBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZm9yRWFjaChyPT57QXJyYXkuZnJvbShyLmNoaWxkcmVuKS5mb3JFYWNoKG49PntuLl9pbnN0YW5jZSYmbi5faW5zdGFuY2UuX3NldFBlbmRpbmdQcm9wZXJ0eSgiaXRlbSIse30sITEpfSl9KSx0aGlzLl9jYWNoZS5zaXplPXRoaXMuc2l6ZXx8MCx0aGlzLl9jYWNoZS51cGRhdGVTaXplKCksdGhpcy5faGFzRGF0YT0hMSx0aGlzLl9hc3NpZ25Nb2RlbHMoKSwoIXRoaXMuX2VmZmVjdGl2ZVNpemV8fCF0aGlzLl9pbml0aWFsUG9vbENyZWF0ZWQpJiZ0aGlzLl9sb2FkUGFnZSgwLHRoaXMuX2NhY2hlKX1fcGFnZVNpemVDaGFuZ2VkKHIsbil7biE9PXZvaWQgMCYmciE9PW4mJnRoaXMuY2xlYXJDYWNoZSgpfV9jaGVja1NpemUoKXt0aGlzLnNpemU9PT12b2lkIDAmJnRoaXMuX2VmZmVjdGl2ZVNpemU9PT0wJiZjb25zb2xlLndhcm4oIlRoZSA8dmFhZGluLWdyaWQ+IG5lZWRzIHRoZSB0b3RhbCBudW1iZXIgb2YgaXRlbXMgaW4gb3JkZXIgdG8gZGlzcGxheSByb3dzLiBTZXQgdGhlIHRvdGFsIG51bWJlciBvZiBpdGVtcyB0byB0aGUgYHNpemVgIHByb3BlcnR5LCBvciBwcm92aWRlIHRoZSB0b3RhbCBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIHNlY29uZCBhcmd1bWVudCBvZiB0aGUgYGRhdGFQcm92aWRlcmBcdTIwMTlzIGBjYWxsYmFja2AgY2FsbC4iKX1fZGF0YVByb3ZpZGVyQ2hhbmdlZChyLG4pe24hPT12b2lkIDAmJnRoaXMuY2xlYXJDYWNoZSgpLHImJnRoaXMuaXRlbXMmJnRoaXMuaXRlbXMubGVuZ3RoJiZ0aGlzLl9zY3JvbGxUb0luZGV4KHRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4KSx0aGlzLl9lbnN1cmVGaXJzdFBhZ2VMb2FkZWQoKSx0aGlzLl9kZWJvdW5jZXJDaGVja1NpemU9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VyQ2hlY2tTaXplLG1vLmFmdGVyKDJlMyksdGhpcy5fY2hlY2tTaXplLmJpbmQodGhpcykpLHRoaXMuX3Njcm9sbEhhbmRsZXIoKX1fZW5zdXJlRmlyc3RQYWdlTG9hZGVkKCl7dGhpcy5faGFzRGF0YXx8dGhpcy5fbG9hZFBhZ2UoMCx0aGlzLl9jYWNoZSl9X2l0ZW1zRXF1YWwocixuKXtyZXR1cm4gdGhpcy5nZXRJdGVtSWQocik9PT10aGlzLmdldEl0ZW1JZChuKX1fZ2V0SXRlbUluZGV4SW5BcnJheShyLG4pe2xldCBpPS0xO3JldHVybiBuLmZvckVhY2goKG8sYSk9Pnt0aGlzLl9pdGVtc0VxdWFsKG8scikmJihpPWEpfSksaX1zY3JvbGxUb0luZGV4KHIpe3N1cGVyLnNjcm9sbFRvSW5kZXgociksIWlzTmFOKHIpJiYodGhpcy5fY2FjaGUuaXNMb2FkaW5nKCl8fCF0aGlzLmNsaWVudEhlaWdodCkmJih0aGlzLl9fcGVuZGluZ1Njcm9sbFRvSW5kZXg9cil9X19zY3JvbGxUb1BlbmRpbmdJbmRleCgpe2lmKHRoaXMuX19wZW5kaW5nU2Nyb2xsVG9JbmRleCYmdGhpcy4kLml0ZW1zLmNoaWxkcmVuLmxlbmd0aCl7bGV0IHI9dGhpcy5fX3BlbmRpbmdTY3JvbGxUb0luZGV4O2RlbGV0ZSB0aGlzLl9fcGVuZGluZ1Njcm9sbFRvSW5kZXgsdGhpcy5fZGVib3VuY2VJbmNyZWFzZVBvb2wmJnRoaXMuX2RlYm91bmNlSW5jcmVhc2VQb29sLmZsdXNoKCksdGhpcy5zY3JvbGxUb0luZGV4KHIpfX19O3ZhciB0dWU9ZT0+Y2xhc3MgZXh0ZW5kcyBle3JlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLl9hZGROb2RlT2JzZXJ2ZXIoKX1faGFzQ29sdW1uR3JvdXBzKHIpe2ZvcihsZXQgbj0wO248ci5sZW5ndGg7bisrKWlmKHJbbl0ubG9jYWxOYW1lPT09InZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCIpcmV0dXJuITA7cmV0dXJuITF9X2dldENoaWxkQ29sdW1ucyhyKXtyZXR1cm4geGguZ2V0RmxhdHRlbmVkTm9kZXMocikuZmlsdGVyKHRoaXMuX2lzQ29sdW1uRWxlbWVudCl9X2ZsYXR0ZW5Db2x1bW5Hcm91cHMocil7cmV0dXJuIHIubWFwKG49Pm4ubG9jYWxOYW1lPT09InZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCI/dGhpcy5fZ2V0Q2hpbGRDb2x1bW5zKG4pOltuXSkucmVkdWNlKChuLGkpPT5uLmNvbmNhdChpKSxbXSl9X2dldENvbHVtblRyZWUoKXtsZXQgcj14aC5nZXRGbGF0dGVuZWROb2Rlcyh0aGlzKS5maWx0ZXIodGhpcy5faXNDb2x1bW5FbGVtZW50KSxuPVtdO2ZvcihsZXQgaT1yO24ucHVzaChpKSwhIXRoaXMuX2hhc0NvbHVtbkdyb3VwcyhpKTspaT10aGlzLl9mbGF0dGVuQ29sdW1uR3JvdXBzKGkpO3JldHVybiBufV91cGRhdGVDb2x1bW5UcmVlKCl7bGV0IHI9dGhpcy5fZ2V0Q29sdW1uVHJlZSgpO3RoaXMuX2FycmF5RXF1YWxzKHIsdGhpcy5fY29sdW1uVHJlZSl8fCh0aGlzLl9jb2x1bW5UcmVlPXIpfV9hZGROb2RlT2JzZXJ2ZXIoKXt0aGlzLl9vYnNlcnZlcj1uZXcgeGgodGhpcyxyPT57bGV0IG49ci5hZGRlZE5vZGVzLmZpbHRlcihvPT5vLmxvY2FsTmFtZT09PSJ0ZW1wbGF0ZSImJm8uY2xhc3NMaXN0LmNvbnRhaW5zKCJyb3ctZGV0YWlscyIpKVswXTtuJiZ0aGlzLl9yb3dEZXRhaWxzVGVtcGxhdGUhPT1uJiYodGhpcy5fcm93RGV0YWlsc1RlbXBsYXRlPW4pO2xldCBpPW89Pm8uZmlsdGVyKHRoaXMuX2lzQ29sdW1uRWxlbWVudCkubGVuZ3RoPjA7aWYoaShyLmFkZGVkTm9kZXMpfHxpKHIucmVtb3ZlZE5vZGVzKSl7bGV0IG89ci5yZW1vdmVkTm9kZXMuZmxhdE1hcChzPT5zLl9hbGxDZWxscyksYT1zPT5vLmZpbHRlcihsPT5sLl9jb250ZW50LmNvbnRhaW5zKHMpKS5sZW5ndGg7dGhpcy5fX3JlbW92ZVNvcnRlcnModGhpcy5fc29ydGVycy5maWx0ZXIoYSkpLHRoaXMuX19yZW1vdmVGaWx0ZXJzKHRoaXMuX2ZpbHRlcnMuZmlsdGVyKGEpKSx0aGlzLl91cGRhdGVDb2x1bW5UcmVlKCl9dGhpcy5fZGVib3VuY2VyQ2hlY2tJbXBvcnRzPXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlckNoZWNrSW1wb3J0cyxtby5hZnRlcigyZTMpLHRoaXMuX2NoZWNrSW1wb3J0cy5iaW5kKHRoaXMpKSx0aGlzLl9lbnN1cmVGaXJzdFBhZ2VMb2FkZWQoKX0pfV9hcnJheUVxdWFscyhyLG4pe2lmKCFyfHwhbnx8ci5sZW5ndGghPW4ubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgaT0wLG89ci5sZW5ndGg7aTxvO2krKylpZihyW2ldaW5zdGFuY2VvZiBBcnJheSYmbltpXWluc3RhbmNlb2YgQXJyYXkpe2lmKCF0aGlzLl9hcnJheUVxdWFscyhyW2ldLG5baV0pKXJldHVybiExfWVsc2UgaWYocltpXSE9bltpXSlyZXR1cm4hMTtyZXR1cm4hMH1fY2hlY2tJbXBvcnRzKCl7WyJ2YWFkaW4tZ3JpZC1jb2x1bW4tZ3JvdXAiLCJ2YWFkaW4tZ3JpZC1maWx0ZXIiLCJ2YWFkaW4tZ3JpZC1maWx0ZXItY29sdW1uIiwidmFhZGluLWdyaWQtdHJlZS10b2dnbGUiLCJ2YWFkaW4tZ3JpZC1zZWxlY3Rpb24tY29sdW1uIiwidmFhZGluLWdyaWQtc29ydC1jb2x1bW4iLCJ2YWFkaW4tZ3JpZC1zb3J0ZXIiXS5mb3JFYWNoKHI9PntsZXQgbj10aGlzLnF1ZXJ5U2VsZWN0b3Iocik7biYmIShuIGluc3RhbmNlb2YgbXQpJiZjb25zb2xlLndhcm4oYE1ha2Ugc3VyZSB5b3UgaGF2ZSBpbXBvcnRlZCB0aGUgcmVxdWlyZWQgbW9kdWxlIGZvciA8JHtyfT4gZWxlbWVudC5gKX0pfV91cGRhdGVGaXJzdEFuZExhc3RDb2x1bW4oKXtBcnJheS5mcm9tKHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCJ0ciIpKS5mb3JFYWNoKHI9PnRoaXMuX3VwZGF0ZUZpcnN0QW5kTGFzdENvbHVtbkZvclJvdyhyKSl9X3VwZGF0ZUZpcnN0QW5kTGFzdENvbHVtbkZvclJvdyhyKXtBcnJheS5mcm9tKHIucXVlcnlTZWxlY3RvckFsbCgnW3BhcnR+PSJjZWxsIl06bm90KFtwYXJ0fj0iZGV0YWlscy1jZWxsIl0pJykpLnNvcnQoKG4saSk9Pm4uX2NvbHVtbi5fb3JkZXItaS5fY29sdW1uLl9vcmRlcikuZm9yRWFjaCgobixpLG8pPT57dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJmaXJzdC1jb2x1bW4iLGk9PT0wLG4pLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibGFzdC1jb2x1bW4iLGk9PT1vLmxlbmd0aC0xLG4pfSl9X2lzQ29sdW1uRWxlbWVudChyKXtyZXR1cm4gci5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiYvXGJjb2x1bW5cYi8udGVzdChyLmxvY2FsTmFtZSl9fTt2YXIgZXVlPWU9PmNsYXNzIGV4dGVuZHMgZXtnZXRFdmVudENvbnRleHQocil7bGV0IG49e30saT1yLmNvbXBvc2VkUGF0aCgpLG89aVtpLmluZGV4T2YodGhpcy4kLnRhYmxlKS0zXTtyZXR1cm4gbyYmKG4uc2VjdGlvbj1bImJvZHkiLCJoZWFkZXIiLCJmb290ZXIiLCJkZXRhaWxzIl0uZmlsdGVyKGE9Pm8uZ2V0QXR0cmlidXRlKCJwYXJ0IikuaW5kZXhPZihhKT4tMSlbMF0sby5fY29sdW1uJiYobi5jb2x1bW49by5fY29sdW1uKSwobi5zZWN0aW9uPT09ImJvZHkifHxuLnNlY3Rpb249PT0iZGV0YWlscyIpJiZPYmplY3QuYXNzaWduKG4sdGhpcy5fX2dldFJvd01vZGVsKG8ucGFyZW50RWxlbWVudCkpKSxufX07dmFyIHJ1ZT1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue19maWx0ZXJzOnt0eXBlOkFycmF5LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW119fX19cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZmlsdGVyLWNoYW5nZWQiLHRoaXMuX2ZpbHRlckNoYW5nZWQuYmluZCh0aGlzKSl9X2ZpbHRlckNoYW5nZWQocil7ci5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLl9fYWRkRmlsdGVyKHIudGFyZ2V0KSx0aGlzLl9fYXBwbHlGaWx0ZXJzKCl9X19yZW1vdmVGaWx0ZXJzKHIpe3IubGVuZ3RoIT0wJiYodGhpcy5fZmlsdGVycz10aGlzLl9maWx0ZXJzLmZpbHRlcihuPT5yLmluZGV4T2Yobik8MCksdGhpcy5fX2FwcGx5RmlsdGVycygpKX1fX2FkZEZpbHRlcihyKXt0aGlzLl9maWx0ZXJzLmluZGV4T2Yocik9PT0tMSYmdGhpcy5fZmlsdGVycy5wdXNoKHIpfV9fYXBwbHlGaWx0ZXJzKCl7dGhpcy5kYXRhUHJvdmlkZXImJnRoaXMuaXNBdHRhY2hlZCYmdGhpcy5jbGVhckNhY2hlKCl9X21hcEZpbHRlcnMoKXtyZXR1cm4gdGhpcy5fZmlsdGVycy5tYXAocj0+KHtwYXRoOnIucGF0aCx2YWx1ZTpyLnZhbHVlfSkpfX07dmFyIEMwPWNsYXNzIGV4dGVuZHMgbXR7c3RhdGljIGdldCBpcygpe3JldHVybiJ2YWFkaW4tZ3JpZC10ZW1wbGF0aXplciJ9c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2RhdGFIb3N0Ok9iamVjdCx0ZW1wbGF0ZTpPYmplY3QsX3RlbXBsYXRlSW5zdGFuY2VzOnt0eXBlOkFycmF5LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW119fSxfcGFyZW50UGF0aFZhbHVlczp7dmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57fX19LF9ncmlkOk9iamVjdH19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl90ZW1wbGF0ZUluc3RhbmNlc0NoYW5nZWQoX3RlbXBsYXRlSW5zdGFuY2VzLiosIF9wYXJlbnRQYXRoVmFsdWVzLiopIl19Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX2luc3RhbmNlUHJvcHM9e2RldGFpbHNPcGVuZWQ6ITAsaW5kZXg6ITAsaXRlbTohMCxzZWxlY3RlZDohMCxleHBhbmRlZDohMCxsZXZlbDohMH19Y3JlYXRlSW5zdGFuY2UoKXt0aGlzLl9lbnN1cmVUZW1wbGF0aXplZCgpO2xldCB0PW5ldyB0aGlzLl9UZW1wbGF0ZUNsYXNzKHt9KTtyZXR1cm4gdGhpcy5hZGRJbnN0YW5jZSh0KSx0fWFkZEluc3RhbmNlKHQpe3RoaXMuX3RlbXBsYXRlSW5zdGFuY2VzLmluZGV4T2YodCk9PT0tMSYmKHRoaXMuX3RlbXBsYXRlSW5zdGFuY2VzLnB1c2godCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLm5vdGlmeVBhdGgoIl90ZW1wbGF0ZUluc3RhbmNlcy4qIix0aGlzLl90ZW1wbGF0ZUluc3RhbmNlcykpKX1yZW1vdmVJbnN0YW5jZSh0KXtsZXQgcj10aGlzLl90ZW1wbGF0ZUluc3RhbmNlcy5pbmRleE9mKHQpO3RoaXMuc3BsaWNlKCJfdGVtcGxhdGVJbnN0YW5jZXMiLHIsMSl9X2Vuc3VyZVRlbXBsYXRpemVkKCl7dGhpcy5fVGVtcGxhdGVDbGFzc3x8KHRoaXMuX1RlbXBsYXRlQ2xhc3M9dGModGhpcy50ZW1wbGF0ZSx0aGlzLHtpbnN0YW5jZVByb3BzOnRoaXMuX2luc3RhbmNlUHJvcHMscGFyZW50TW9kZWw6ITAsZm9yd2FyZEhvc3RQcm9wOmZ1bmN0aW9uKHQscil7dGhpcy5fZm9yd2FyZFBhcmVudFByb3AodCxyKSx0aGlzLl90ZW1wbGF0ZUluc3RhbmNlcyYmdGhpcy5fdGVtcGxhdGVJbnN0YW5jZXMuZm9yRWFjaChuPT5uLm5vdGlmeVBhdGgodCxyKSl9LG5vdGlmeUluc3RhbmNlUHJvcDpmdW5jdGlvbih0LHIsbil7aWYocj09PSJpbmRleCJ8fHI9PT0iaXRlbSIpcmV0dXJuO2xldCBpPWBfXyR7cn1fX2A7aWYodFtpXT09PW4pcmV0dXJuO3RbaV09bjtsZXQgbz1BcnJheS5mcm9tKHRoaXMuX2dyaWQuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKGw9PnRoaXMuX2dyaWQuX2l0ZW1zRXF1YWwobC5faXRlbSx0Lml0ZW0pKVswXTtvJiZBcnJheS5mcm9tKG8uY2hpbGRyZW4pLmZvckVhY2gobD0+e2wuX2luc3RhbmNlJiYobC5faW5zdGFuY2VbaV09bixsLl9pbnN0YW5jZS5ub3RpZnlQYXRoKHIsbikpfSk7bGV0IGE9Iml0ZW0uIjtpZihBcnJheS5pc0FycmF5KHRoaXMuX2dyaWQuaXRlbXMpJiZyLmluZGV4T2YoYSk9PT0wKXtsZXQgbD10aGlzLl9ncmlkLml0ZW1zLmluZGV4T2YodC5pdGVtKSxjPXIuc2xpY2UoYS5sZW5ndGgpO3RoaXMuX2dyaWQubm90aWZ5UGF0aChgaXRlbXMuJHtsfS4ke2N9YCxuKX1sZXQgcz1gXyR7cn1JbnN0YW5jZUNoYW5nZWRDYWxsYmFja2A7dGhpcy5fZ3JpZCYmdGhpcy5fZ3JpZFtzXSYmdGhpcy5fZ3JpZFtzXSh0LG4pfX0pKX1fZm9yd2FyZFBhcmVudFByb3AodCxyKXt0aGlzLl9wYXJlbnRQYXRoVmFsdWVzW3RdPXIsdGhpcy5fdGVtcGxhdGVJbnN0YW5jZXMuZm9yRWFjaChuPT5uLm5vdGlmeVBhdGgodCxyKSl9X3RlbXBsYXRlSW5zdGFuY2VzQ2hhbmdlZCh0KXtsZXQgcixuO2lmKHQucGF0aD09PSJfdGVtcGxhdGVJbnN0YW5jZXMiKXI9MCxuPXRoaXMuX3RlbXBsYXRlSW5zdGFuY2VzLmxlbmd0aDtlbHNlIGlmKHQucGF0aD09PSJfdGVtcGxhdGVJbnN0YW5jZXMuc3BsaWNlcyIpcj10LnZhbHVlLmluZGV4LG49dC52YWx1ZS5hZGRlZENvdW50O2Vsc2UgcmV0dXJuO09iamVjdC5rZXlzKHRoaXMuX3BhcmVudFBhdGhWYWx1ZXN8fHt9KS5mb3JFYWNoKGk9Pntmb3IobGV0IG89cjtvPHIrbjtvKyspdGhpcy5fdGVtcGxhdGVJbnN0YW5jZXNbb10uc2V0KGksdGhpcy5fcGFyZW50UGF0aFZhbHVlc1tpXSl9KX19O2N1c3RvbUVsZW1lbnRzLmRlZmluZShDMC5pcyxDMCk7dmFyIG51ZT1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2RldGFpbHNPcGVuZWRJdGVtczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sX3Jvd0RldGFpbHNUZW1wbGF0ZTpPYmplY3Qscm93RGV0YWlsc1JlbmRlcmVyOkZ1bmN0aW9uLF9kZXRhaWxzQ2VsbHM6e3R5cGU6QXJyYXl9fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX2RldGFpbHNPcGVuZWRJdGVtc0NoYW5nZWQoZGV0YWlsc09wZW5lZEl0ZW1zLiosIF9yb3dEZXRhaWxzVGVtcGxhdGUsIHJvd0RldGFpbHNSZW5kZXJlcikiLCJfcm93RGV0YWlsc1RlbXBsYXRlT3JSZW5kZXJlckNoYW5nZWQoX3Jvd0RldGFpbHNUZW1wbGF0ZSwgcm93RGV0YWlsc1JlbmRlcmVyKSJdfV9yb3dEZXRhaWxzVGVtcGxhdGVPclJlbmRlcmVyQ2hhbmdlZChyLG4pe2lmKHImJm4pdGhyb3cgbmV3IEVycm9yKCJZb3Ugc2hvdWxkIG9ubHkgdXNlIGVpdGhlciBhIHJlbmRlcmVyIG9yIGEgdGVtcGxhdGUgZm9yIHJvdyBkZXRhaWxzIik7aWYocnx8bil7aWYociYmIXIudGVtcGxhdGl6ZXIpe2xldCBpPW5ldyBDMDtpLl9ncmlkPXRoaXMsaS5kYXRhSG9zdD10aGlzLmRhdGFIb3N0LGkudGVtcGxhdGU9cixyLnRlbXBsYXRpemVyPWl9dGhpcy5fY29sdW1uVHJlZSYmQXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZvckVhY2goaT0+e2kucXVlcnlTZWxlY3RvcigiW3BhcnR+PWRldGFpbHMtY2VsbF0iKXx8KHRoaXMuX3VwZGF0ZVJvdyhpLHRoaXMuX2NvbHVtblRyZWVbdGhpcy5fY29sdW1uVHJlZS5sZW5ndGgtMV0pLHRoaXMuX2ExMXlVcGRhdGVSb3dEZXRhaWxzT3BlbmVkKGksITEpKSxkZWxldGUgaS5xdWVyeVNlbGVjdG9yKCJbcGFydH49ZGV0YWlscy1jZWxsXSIpLl9pbnN0YW5jZX0pLHRoaXMuZGV0YWlsc09wZW5lZEl0ZW1zLmxlbmd0aCYmKEFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5mb3JFYWNoKHRoaXMuX3RvZ2dsZURldGFpbHNDZWxsLHRoaXMpLHRoaXMuX3VwZGF0ZSgpKX19X2RldGFpbHNPcGVuZWRJdGVtc0NoYW5nZWQocil7ci5wYXRoPT09ImRldGFpbHNPcGVuZWRJdGVtcy5sZW5ndGgifHwhci52YWx1ZXx8QXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZvckVhY2gobj0+e3RoaXMuX3RvZ2dsZURldGFpbHNDZWxsKG4sbi5faXRlbSksdGhpcy5fYTExeVVwZGF0ZVJvd0RldGFpbHNPcGVuZWQobix0aGlzLl9pc0RldGFpbHNPcGVuZWQobi5faXRlbSkpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiZGV0YWlscy1vcGVuZWQiLHRoaXMuX2lzRGV0YWlsc09wZW5lZChuLl9pdGVtKSxuKX0pfV9jb25maWd1cmVEZXRhaWxzQ2VsbChyKXtyLnNldEF0dHJpYnV0ZSgicGFydCIsImNlbGwgZGV0YWlscy1jZWxsIiksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJmcm96ZW4iLCEwLHIpfV90b2dnbGVEZXRhaWxzQ2VsbChyLG4pe2xldCBpPXIucXVlcnlTZWxlY3RvcignW3BhcnR+PSJkZXRhaWxzLWNlbGwiXScpO2lmKCFpKXJldHVybjtsZXQgbz0hdGhpcy5faXNEZXRhaWxzT3BlbmVkKG4pLGE9ISFpLmhpZGRlbiE9PW87KCFpLl9pbnN0YW5jZSYmIWkuX3JlbmRlcmVyfHxpLmhpZGRlbiE9PW8pJiYoaS5oaWRkZW49byxvP3Iuc3R5bGUucmVtb3ZlUHJvcGVydHkoInBhZGRpbmctYm90dG9tIik6KHRoaXMucm93RGV0YWlsc1JlbmRlcmVyPyhpLl9yZW5kZXJlcj10aGlzLnJvd0RldGFpbHNSZW5kZXJlcixpLl9yZW5kZXJlci5jYWxsKHRoaXMsaS5fY29udGVudCx0aGlzLHtpbmRleDpyLmluZGV4LGl0ZW06bn0pKTp0aGlzLl9yb3dEZXRhaWxzVGVtcGxhdGUmJiFpLl9pbnN0YW5jZSYmKGkuX2luc3RhbmNlPXRoaXMuX3Jvd0RldGFpbHNUZW1wbGF0ZS50ZW1wbGF0aXplci5jcmVhdGVJbnN0YW5jZSgpLGkuX2NvbnRlbnQuaW5uZXJIVE1MPSIiLGkuX2NvbnRlbnQuYXBwZW5kQ2hpbGQoaS5faW5zdGFuY2Uucm9vdCksdGhpcy5fdXBkYXRlSXRlbShyLG4pKSxjaSgpLHIuc3R5bGUuc2V0UHJvcGVydHkoInBhZGRpbmctYm90dG9tIixgJHtpLm9mZnNldEhlaWdodH1weGApLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+dGhpcy5ub3RpZnlSZXNpemUoKSkpKSxhJiYodGhpcy5fdXBkYXRlTWV0cmljcygpLHRoaXMuX3Bvc2l0aW9uSXRlbXMoKSl9X3VwZGF0ZURldGFpbHNDZWxsSGVpZ2h0cygpe0FycmF5LmZyb20odGhpcy4kLml0ZW1zLnF1ZXJ5U2VsZWN0b3JBbGwoJ1twYXJ0fj0iZGV0YWlscy1jZWxsIl06bm90KFtoaWRkZW5dKScpKS5mb3JFYWNoKHI9PntyLnBhcmVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoInBhZGRpbmctYm90dG9tIixgJHtyLm9mZnNldEhlaWdodH1weGApfSl9X2lzRGV0YWlsc09wZW5lZChyKXtyZXR1cm4gdGhpcy5kZXRhaWxzT3BlbmVkSXRlbXMmJnRoaXMuX2dldEl0ZW1JbmRleEluQXJyYXkocix0aGlzLmRldGFpbHNPcGVuZWRJdGVtcykhPT0tMX1vcGVuSXRlbURldGFpbHMocil7dGhpcy5faXNEZXRhaWxzT3BlbmVkKHIpfHwodGhpcy5kZXRhaWxzT3BlbmVkSXRlbXM9Wy4uLnRoaXMuZGV0YWlsc09wZW5lZEl0ZW1zLHJdKX1jbG9zZUl0ZW1EZXRhaWxzKHIpe3RoaXMuX2lzRGV0YWlsc09wZW5lZChyKSYmKHRoaXMuZGV0YWlsc09wZW5lZEl0ZW1zPXRoaXMuZGV0YWlsc09wZW5lZEl0ZW1zLmZpbHRlcihuPT4hdGhpcy5faXRlbXNFcXVhbChuLHIpKSl9X2RldGFpbHNPcGVuZWRJbnN0YW5jZUNoYW5nZWRDYWxsYmFjayhyLG4pe24/dGhpcy5vcGVuSXRlbURldGFpbHMoci5pdGVtKTp0aGlzLmNsb3NlSXRlbURldGFpbHMoci5pdGVtKX19O3ZhciB6Y3Q9e1NDUk9MTElORzo1MDAsSUdOT1JFX1dIRUVMOjUwMH0saXVlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57X2Zyb3plbkNlbGxzOnt0eXBlOkFycmF5LHZhbHVlOigpPT5bXX0sX3Jvd1dpdGhGb2N1c2VkRWxlbWVudDpFbGVtZW50LF9kZWx0YVlBY2M6e3R5cGU6TnVtYmVyLHZhbHVlOjB9LF91c2VTdGlja3k6e3R5cGU6Qm9vbGVhbix2YWx1ZTp3aW5kb3cuQ1NTJiZ3aW5kb3cuQ1NTLnN1cHBvcnRzJiYod2luZG93LkNTUy5zdXBwb3J0cygicG9zaXRpb24iLCJzdGlja3kiKXx8d2luZG93LkNTUy5zdXBwb3J0cygicG9zaXRpb24iLCItd2Via2l0LXN0aWNreSIpKX19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfc2Nyb2xsVmlld3BvcnRIZWlnaHRVcGRhdGVkKF92aWV3cG9ydEhlaWdodCkiXX1zZXQgX3Njcm9sbFRvcChyKXt0aGlzLiQudGFibGUuc2Nyb2xsVG9wPXJ9Z2V0IF9zY3JvbGxUb3AoKXtyZXR1cm4gdGhpcy4kLnRhYmxlLnNjcm9sbFRvcH1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fc2Nyb2xsTGluZUhlaWdodD10aGlzLl9nZXRTY3JvbGxMaW5lSGVpZ2h0KCl9X2dldFNjcm9sbExpbmVIZWlnaHQoKXtsZXQgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyLnN0eWxlLmZvbnRTaXplPSJpbml0aWFsIixyLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocik7bGV0IG49d2luZG93LmdldENvbXB1dGVkU3R5bGUocikuZm9udFNpemU7cmV0dXJuIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQociksbj93aW5kb3cucGFyc2VJbnQobik6dm9pZCAwfV9zY3JvbGxWaWV3cG9ydEhlaWdodFVwZGF0ZWQocil7dGhpcy5fc2Nyb2xsUGFnZUhlaWdodD1yLXRoaXMuJC5oZWFkZXIuY2xpZW50SGVpZ2h0LXRoaXMuJC5mb290ZXIuY2xpZW50SGVpZ2h0LXRoaXMuX3Njcm9sbExpbmVIZWlnaHR9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuJC5vdXRlcnNjcm9sbGVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuc2Nyb2xsVGFyZ2V0PXRoaXMuJC50YWJsZSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIix0aGlzLl9vbldoZWVsKSx0aGlzLiQuaXRlbXMuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIscj0+e2xldCBuPXIuY29tcG9zZWRQYXRoKCkuaW5kZXhPZih0aGlzLiQuaXRlbXMpO3RoaXMuX3Jvd1dpdGhGb2N1c2VkRWxlbWVudD1yLmNvbXBvc2VkUGF0aCgpW24tMV19KSx0aGlzLiQuaXRlbXMuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNvdXQiLCgpPT50aGlzLl9yb3dXaXRoRm9jdXNlZEVsZW1lbnQ9dm9pZCAwKSx0aGlzLnNjcm9sbFRhcmdldC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCgpPT50aGlzLl9fbW91c2VEb3duPSEwKSx0aGlzLnNjcm9sbFRhcmdldC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwoKT0+e3RoaXMuX19tb3VzZURvd249ITEsdGhpcy5fX3BlbmRpbmdSZW9yZGVyJiYodGhpcy5fX3BlbmRpbmdSZW9yZGVyPSExLHNldFRpbWVvdXQoKCk9PnRoaXMuX3Jlb3JkZXJSb3dzKCksemN0LlNDUk9MTElORykpfSl9c2Nyb2xsVG9JbmRleChyKXt0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKT0+c3VwZXIuc2Nyb2xsVG9JbmRleChyKSl9X29uV2hlZWwocil7aWYoci5jdHJsS2V5fHx0aGlzLl9oYXNTY3JvbGxlZEFuY2VzdG9yKHIudGFyZ2V0LHIuZGVsdGFYLHIuZGVsdGFZKSlyZXR1cm47bGV0IG49dGhpcy4kLnRhYmxlLGk9ci5kZWx0YVk7aWYoci5kZWx0YU1vZGU9PT1XaGVlbEV2ZW50LkRPTV9ERUxUQV9MSU5FP2kqPXRoaXMuX3Njcm9sbExpbmVIZWlnaHQ6ci5kZWx0YU1vZGU9PT1XaGVlbEV2ZW50LkRPTV9ERUxUQV9QQUdFJiYoaSo9dGhpcy5fc2Nyb2xsUGFnZUhlaWdodCksdGhpcy5fd2hlZWxBbmltYXRpb25GcmFtZSl7dGhpcy5fZGVsdGFZQWNjKz1pLHIucHJldmVudERlZmF1bHQoKTtyZXR1cm59aSs9dGhpcy5fZGVsdGFZQWNjLHRoaXMuX2RlbHRhWUFjYz0wLHRoaXMuX3doZWVsQW5pbWF0aW9uRnJhbWU9ITAsdGhpcy5fZGVib3VuY2VyV2hlZWxBbmltYXRpb25GcmFtZT1zci5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZXJXaGVlbEFuaW1hdGlvbkZyYW1lLE5pLCgpPT50aGlzLl93aGVlbEFuaW1hdGlvbkZyYW1lPSExKTtsZXQgbz1NYXRoLmFicyhyLmRlbHRhWCkrTWF0aC5hYnMoaSk7dGhpcy5fY2FuU2Nyb2xsKG4sci5kZWx0YVgsaSk/KHIucHJldmVudERlZmF1bHQoKSxuLnNjcm9sbFRvcCs9aSxuLnNjcm9sbExlZnQrPXIuZGVsdGFYLHRoaXMuX3Njcm9sbEhhbmRsZXIoKSx0aGlzLl9oYXNSZXNpZHVhbE1vbWVudHVtPSEwLHRoaXMuX2lnbm9yZU5ld1doZWVsPSEwLHRoaXMuX2RlYm91bmNlcklnbm9yZU5ld1doZWVsPXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlcklnbm9yZU5ld1doZWVsLG1vLmFmdGVyKHpjdC5JR05PUkVfV0hFRUwpLCgpPT50aGlzLl9pZ25vcmVOZXdXaGVlbD0hMSkpOnRoaXMuX2hhc1Jlc2lkdWFsTW9tZW50dW0mJm88PXRoaXMuX3ByZXZpb3VzTW9tZW50dW18fHRoaXMuX2lnbm9yZU5ld1doZWVsP3IucHJldmVudERlZmF1bHQoKTpvPnRoaXMuX3ByZXZpb3VzTW9tZW50dW0mJih0aGlzLl9oYXNSZXNpZHVhbE1vbWVudHVtPSExKSx0aGlzLl9wcmV2aW91c01vbWVudHVtPW99X2hhc1Njcm9sbGVkQW5jZXN0b3IocixuLGkpe2lmKHIubG9jYWxOYW1lPT09InZhYWRpbi1ncmlkLWNlbGwtY29udGVudCIpcmV0dXJuITE7aWYodGhpcy5fY2FuU2Nyb2xsKHIsbixpKSYmWyJhdXRvIiwic2Nyb2xsIl0uaW5kZXhPZihnZXRDb21wdXRlZFN0eWxlKHIpLm92ZXJmbG93KSE9PS0xKXJldHVybiEwO2lmKHIhPT10aGlzJiZyLnBhcmVudEVsZW1lbnQpcmV0dXJuIHRoaXMuX2hhc1Njcm9sbGVkQW5jZXN0b3Ioci5wYXJlbnRFbGVtZW50LG4saSl9X2NhblNjcm9sbChyLG4saSl7cmV0dXJuIGk+MCYmci5zY3JvbGxUb3A8ci5zY3JvbGxIZWlnaHQtci5vZmZzZXRIZWlnaHR8fGk8MCYmci5zY3JvbGxUb3A+MHx8bj4wJiZyLnNjcm9sbExlZnQ8ci5zY3JvbGxXaWR0aC1yLm9mZnNldFdpZHRofHxuPDAmJnIuc2Nyb2xsTGVmdD4wfV9zY2hlZHVsZVNjcm9sbGluZygpe3RoaXMuX3Njcm9sbGluZ0ZyYW1lfHwodGhpcy5fc2Nyb2xsaW5nRnJhbWU9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLl90b2dnbGVBdHRyaWJ1dGUoInNjcm9sbGluZyIsITAsdGhpcy4kLnNjcm9sbGVyKSkpLHRoaXMuX2RlYm91bmNlU2Nyb2xsaW5nPXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlU2Nyb2xsaW5nLG1vLmFmdGVyKHpjdC5TQ1JPTExJTkcpLCgpPT57Y2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fc2Nyb2xsaW5nRnJhbWUpLGRlbGV0ZSB0aGlzLl9zY3JvbGxpbmdGcmFtZSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoInNjcm9sbGluZyIsITEsdGhpcy4kLnNjcm9sbGVyKSx0aGlzLl9yZW9yZGVyUm93cygpfSl9X2FmdGVyU2Nyb2xsKCl7dGhpcy5fdHJhbnNsYXRlU3RhdGlvbmFyeUVsZW1lbnRzKCksdGhpcy5oYXNBdHRyaWJ1dGUoInJlb3JkZXJpbmciKXx8dGhpcy5fc2NoZWR1bGVTY3JvbGxpbmcoKSx0aGlzLl91cGRhdGVPdmVyZmxvdygpfV91cGRhdGVPdmVyZmxvdygpe2xldCByPSIiLG49dGhpcy4kLnRhYmxlO24uc2Nyb2xsVG9wPG4uc2Nyb2xsSGVpZ2h0LW4uY2xpZW50SGVpZ2h0JiYocis9IiBib3R0b20iKSxuLnNjcm9sbFRvcD4wJiYocis9IiB0b3AiKSxuLnNjcm9sbExlZnQ8bi5zY3JvbGxXaWR0aC1uLmNsaWVudFdpZHRoJiYocis9IiByaWdodCIpLG4uc2Nyb2xsTGVmdD4wJiYocis9IiBsZWZ0IiksdGhpcy5fZGVib3VuY2VPdmVyZmxvdz1zci5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZU92ZXJmbG93LE5pLCgpPT57bGV0IGk9ci50cmltKCk7aS5sZW5ndGg+MCYmdGhpcy5nZXRBdHRyaWJ1dGUoIm92ZXJmbG93IikhPT1pP3RoaXMuc2V0QXR0cmlidXRlKCJvdmVyZmxvdyIsaSk6aS5sZW5ndGg9PTAmJnRoaXMuaGFzQXR0cmlidXRlKCJvdmVyZmxvdyIpJiZ0aGlzLnJlbW92ZUF0dHJpYnV0ZSgib3ZlcmZsb3ciKX0pfV9yZW9yZGVyUm93cygpe2lmKHRoaXMuX19tb3VzZURvd24pe3RoaXMuX19wZW5kaW5nUmVvcmRlcj0hMDtyZXR1cm59bGV0IHI9dGhpcy4kLml0ZW1zLG49ci5xdWVyeVNlbGVjdG9yQWxsKCJ0ciIpO2lmKCFuLmxlbmd0aClyZXR1cm47bGV0IGk9dGhpcy5fdmlydHVhbFN0YXJ0K3RoaXMuX3ZpZHhPZmZzZXQsbz10aGlzLl9yb3dXaXRoRm9jdXNlZEVsZW1lbnR8fEFycmF5LmZyb20obikuZmlsdGVyKGw9PiFsLmhpZGRlbilbMF07aWYoIW8pcmV0dXJuO2xldCBhPW8uaW5kZXgtaSxzPUFycmF5LmZyb20obikuaW5kZXhPZihvKS1hO2lmKHM+MClmb3IobGV0IGw9MDtsPHM7bCsrKXIuYXBwZW5kQ2hpbGQobltsXSk7ZWxzZSBpZihzPDApZm9yKGxldCBsPW4ubGVuZ3RoK3M7bDxuLmxlbmd0aDtsKyspci5pbnNlcnRCZWZvcmUobltsXSxuWzBdKTtpZih0aGlzLl9zYWZhcmkpe2xldHt0cmFuc2Zvcm06bH09dGhpcy4kLmhlYWRlci5zdHlsZTt0aGlzLiQuaGVhZGVyLnN0eWxlLnRyYW5zZm9ybT0iIixzZXRUaW1lb3V0KCgpPT50aGlzLiQuaGVhZGVyLnN0eWxlLnRyYW5zZm9ybT1sKX19X2Zyb3plbkNlbGxzQ2hhbmdlZCgpe3RoaXMuX2RlYm91bmNlckNhY2hlRWxlbWVudHM9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VyQ2FjaGVFbGVtZW50cyxsaSwoKT0+e0FycmF5LmZyb20odGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ1twYXJ0fj0iY2VsbCJdJykpLmZvckVhY2goZnVuY3Rpb24ocil7ci5zdHlsZS50cmFuc2Zvcm09IiJ9KSx0aGlzLl9mcm96ZW5DZWxscz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLiQudGFibGUucXVlcnlTZWxlY3RvckFsbCgiW2Zyb3plbl0iKSksdGhpcy5fdXBkYXRlU2Nyb2xsZXJNZWFzdXJlbWVudHMoKSx0aGlzLl90cmFuc2xhdGVTdGF0aW9uYXJ5RWxlbWVudHMoKX0pLHRoaXMuX3VwZGF0ZUxhc3RGcm96ZW4oKX1fdXBkYXRlU2Nyb2xsZXJNZWFzdXJlbWVudHMoKXt0aGlzLl9mcm96ZW5DZWxscy5sZW5ndGg+MCYmdGhpcy5fX2lzUlRMJiYodGhpcy5fX3Njcm9sbGVyTWV0cmljcz17c2Nyb2xsV2lkdGg6dGhpcy4kLnRhYmxlLnNjcm9sbFdpZHRoLGNsaWVudFdpZHRoOnRoaXMuJC50YWJsZS5jbGllbnRXaWR0aH0pfV91cGRhdGVMYXN0RnJvemVuKCl7aWYoIXRoaXMuX2NvbHVtblRyZWUpcmV0dXJuO2xldCByPXRoaXMuX2NvbHVtblRyZWVbdGhpcy5fY29sdW1uVHJlZS5sZW5ndGgtMV0uc2xpY2UoMCk7ci5zb3J0KChpLG8pPT5pLl9vcmRlci1vLl9vcmRlcik7bGV0IG49ci5yZWR1Y2UoKGksbyxhKT0+KG8uX2xhc3RGcm96ZW49ITEsby5mcm96ZW4mJiFvLmhpZGRlbj9hOmkpLHZvaWQgMCk7biE9PXZvaWQgMCYmKHJbbl0uX2xhc3RGcm96ZW49ITApfV90cmFuc2xhdGVTdGF0aW9uYXJ5RWxlbWVudHMoKXtsZXQgcj1NYXRoLm1heCgwLHRoaXMuX3Njcm9sbExlZnQpLG49TWF0aC5tYXgoMCx0aGlzLl9zY3JvbGxUb3ApLGk9MCxvPTAsYT0wO2lmKHRoaXMuX3VzZVN0aWNreXx8KGk9cixvPW4sYT10aGlzLiQudGFibGUuY2xpZW50SGVpZ2h0LXRoaXMuJC5mb290ZXIub2Zmc2V0SGVpZ2h0LXRoaXMuJC5mb290ZXIub2Zmc2V0VG9wKSx0aGlzLiQuaGVhZGVyLnN0eWxlLnRyYW5zZm9ybT10aGlzLl9nZXRUcmFuc2xhdGUoLXIraSxvKSx0aGlzLiQuZm9vdGVyLnN0eWxlLnRyYW5zZm9ybT10aGlzLl9nZXRUcmFuc2xhdGUoLXIraSxvK2EpLHRoaXMuJC5pdGVtcy5zdHlsZS50cmFuc2Zvcm09dGhpcy5fZ2V0VHJhbnNsYXRlKC1yK2ksMCksdGhpcy5fZnJvemVuQ2VsbHMubGVuZ3RoPjApe2xldCBzPXRoaXMuX19pc1JUTD90aGlzLl9fZ2V0Tm9ybWFsaXplZFNjcm9sbExlZnQodGhpcy4kLnRhYmxlKSt0aGlzLl9fc2Nyb2xsZXJNZXRyaWNzLmNsaWVudFdpZHRoLXRoaXMuX19zY3JvbGxlck1ldHJpY3Muc2Nyb2xsV2lkdGg6dGhpcy5fc2Nyb2xsTGVmdCxsPXRoaXMuX2dldFRyYW5zbGF0ZShzLDApO2ZvcihsZXQgYz0wO2M8dGhpcy5fZnJvemVuQ2VsbHMubGVuZ3RoO2MrKyl0aGlzLl9mcm96ZW5DZWxsc1tjXS5zdHlsZS50cmFuc2Zvcm09bH19X2dldFRyYW5zbGF0ZShyLG4pe3JldHVybmB0cmFuc2xhdGUoJHtyfXB4LCAke259cHgpYH19O3ZhciBvdWU9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntzZWxlY3RlZEl0ZW1zOnt0eXBlOk9iamVjdCxub3RpZnk6ITAsdmFsdWU6KCk9PltdfX19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9zZWxlY3RlZEl0ZW1zQ2hhbmdlZChzZWxlY3RlZEl0ZW1zLiopIl19X2lzU2VsZWN0ZWQocil7cmV0dXJuIHRoaXMuc2VsZWN0ZWRJdGVtcyYmdGhpcy5fZ2V0SXRlbUluZGV4SW5BcnJheShyLHRoaXMuc2VsZWN0ZWRJdGVtcyk+LTF9c2VsZWN0SXRlbShyKXt0aGlzLl9pc1NlbGVjdGVkKHIpfHwodGhpcy5zZWxlY3RlZEl0ZW1zPVsuLi50aGlzLnNlbGVjdGVkSXRlbXMscl0pfWRlc2VsZWN0SXRlbShyKXt0aGlzLl9pc1NlbGVjdGVkKHIpJiYodGhpcy5zZWxlY3RlZEl0ZW1zPXRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIobj0+IXRoaXMuX2l0ZW1zRXF1YWwobixyKSkpfV90b2dnbGVJdGVtKHIpe3RoaXMuX2dldEl0ZW1JbmRleEluQXJyYXkocix0aGlzLnNlbGVjdGVkSXRlbXMpPT09LTE/dGhpcy5zZWxlY3RJdGVtKHIpOnRoaXMuZGVzZWxlY3RJdGVtKHIpfV9zZWxlY3RlZEl0ZW1zQ2hhbmdlZChyKXt0aGlzLiQuaXRlbXMuY2hpbGRyZW4ubGVuZ3RoJiYoci5wYXRoPT09InNlbGVjdGVkSXRlbXMifHxyLnBhdGg9PT0ic2VsZWN0ZWRJdGVtcy5zcGxpY2VzIikmJkFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5mb3JFYWNoKG49Pnt0aGlzLl91cGRhdGVJdGVtKG4sbi5faXRlbSl9KX1fc2VsZWN0ZWRJbnN0YW5jZUNoYW5nZWRDYWxsYmFjayhyLG4pe24/dGhpcy5zZWxlY3RJdGVtKHIuaXRlbSk6dGhpcy5kZXNlbGVjdEl0ZW0oci5pdGVtKX19O3ZhciBhdWU9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnttdWx0aVNvcnQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX3NvcnRlcnM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LF9wcmV2aW91c1NvcnRlcnM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fX1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJzb3J0ZXItY2hhbmdlZCIsdGhpcy5fb25Tb3J0ZXJDaGFuZ2VkKX1fb25Tb3J0ZXJDaGFuZ2VkKHIpe2xldCBuPXIudGFyZ2V0O3Iuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5fX3VwZGF0ZVNvcnRlcihuKSx0aGlzLl9fYXBwbHlTb3J0ZXJzKCl9X19yZW1vdmVTb3J0ZXJzKHIpe3IubGVuZ3RoIT0wJiYodGhpcy5fc29ydGVycz10aGlzLl9zb3J0ZXJzLmZpbHRlcihuPT5yLmluZGV4T2Yobik8MCksdGhpcy5tdWx0aVNvcnQmJnRoaXMuX191cGRhdGVTb3J0T3JkZXJzKCksdGhpcy5fX2FwcGx5U29ydGVycygpKX1fX3VwZGF0ZVNvcnRPcmRlcnMoKXt0aGlzLl9zb3J0ZXJzLmZvckVhY2goKHIsbik9PnIuX29yZGVyPXRoaXMuX3NvcnRlcnMubGVuZ3RoPjE/bjpudWxsLHRoaXMpfV9fdXBkYXRlU29ydGVyKHIpe2lmKCEoIXIuZGlyZWN0aW9uJiZ0aGlzLl9zb3J0ZXJzLmluZGV4T2Yocik9PT0tMSkpe2lmKHIuX29yZGVyPW51bGwsdGhpcy5tdWx0aVNvcnQpdGhpcy5fcmVtb3ZlQXJyYXlJdGVtKHRoaXMuX3NvcnRlcnMsciksci5kaXJlY3Rpb24mJnRoaXMuX3NvcnRlcnMudW5zaGlmdChyKSx0aGlzLl9fdXBkYXRlU29ydE9yZGVycygpO2Vsc2UgaWYoci5kaXJlY3Rpb24pe2xldCBuPXRoaXMuX3NvcnRlcnMuZmlsdGVyKGk9PmkhPXIpO3RoaXMuX3NvcnRlcnM9W3JdLG4uZm9yRWFjaChpPT57aS5fb3JkZXI9bnVsbCxpLmRpcmVjdGlvbj1udWxsfSl9fX1fX2FwcGx5U29ydGVycygpe3RoaXMuZGF0YVByb3ZpZGVyJiZ0aGlzLmlzQXR0YWNoZWQmJkpTT04uc3RyaW5naWZ5KHRoaXMuX3ByZXZpb3VzU29ydGVycykhPT1KU09OLnN0cmluZ2lmeSh0aGlzLl9tYXBTb3J0ZXJzKCkpJiZ0aGlzLmNsZWFyQ2FjaGUoKSx0aGlzLl9hMTF5VXBkYXRlU29ydGVycygpLHRoaXMuX3ByZXZpb3VzU29ydGVycz10aGlzLl9tYXBTb3J0ZXJzKCl9X21hcFNvcnRlcnMoKXtyZXR1cm4gdGhpcy5fc29ydGVycy5tYXAocj0+KHtwYXRoOnIucGF0aCxkaXJlY3Rpb246ci5kaXJlY3Rpb259KSl9X3JlbW92ZUFycmF5SXRlbShyLG4pe2xldCBpPXIuaW5kZXhPZihuKTtpPi0xJiZyLnNwbGljZShpLDEpfX07dmFyIHN1ZT1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2NlbGxDbGFzc05hbWVHZW5lcmF0b3I6RnVuY3Rpb259fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfX2NlbGxDbGFzc05hbWVHZW5lcmF0b3JDaGFuZ2VkKGNlbGxDbGFzc05hbWVHZW5lcmF0b3IpIl19X19jZWxsQ2xhc3NOYW1lR2VuZXJhdG9yQ2hhbmdlZCgpe3RoaXMuZ2VuZXJhdGVDZWxsQ2xhc3NOYW1lcygpfWdlbmVyYXRlQ2VsbENsYXNzTmFtZXMoKXtBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKHI9PiFyLmhpZGRlbikuZm9yRWFjaChyPT50aGlzLl9nZW5lcmF0ZUNlbGxDbGFzc05hbWVzKHIsdGhpcy5fX2dldFJvd01vZGVsKHIpKSl9X2dlbmVyYXRlQ2VsbENsYXNzTmFtZXMocixuKXtBcnJheS5mcm9tKHIuY2hpbGRyZW4pLmZvckVhY2goaT0+e2lmKGkuX19nZW5lcmF0ZWRDbGFzc2VzJiZpLl9fZ2VuZXJhdGVkQ2xhc3Nlcy5mb3JFYWNoKG89PmkuY2xhc3NMaXN0LnJlbW92ZShvKSksdGhpcy5jZWxsQ2xhc3NOYW1lR2VuZXJhdG9yKXtsZXQgbz10aGlzLmNlbGxDbGFzc05hbWVHZW5lcmF0b3IoaS5fY29sdW1uLG4pO2kuX19nZW5lcmF0ZWRDbGFzc2VzPW8mJm8uc3BsaXQoIiAiKS5maWx0ZXIoYT0+YS5sZW5ndGg+MCksaS5fX2dlbmVyYXRlZENsYXNzZXMmJmkuX19nZW5lcmF0ZWRDbGFzc2VzLmZvckVhY2goYT0+aS5jbGFzc0xpc3QuYWRkKGEpKX19KX19O3ZhciBUUD17QkVUV0VFTjoiYmV0d2VlbiIsT05fVE9QOiJvbi10b3AiLE9OX1RPUF9PUl9CRVRXRUVOOiJvbi10b3Atb3ItYmV0d2VlbiIsT05fR1JJRDoib24tZ3JpZCJ9LEEwPXtPTl9UT1A6Im9uLXRvcCIsQUJPVkU6ImFib3ZlIixCRUxPVzoiYmVsb3ciLEVNUFRZOiJlbXB0eSJ9LGx1ZT1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2Ryb3BNb2RlOlN0cmluZyxyb3dzRHJhZ2dhYmxlOkJvb2xlYW4sZHJhZ0ZpbHRlcjpGdW5jdGlvbixkcm9wRmlsdGVyOkZ1bmN0aW9uLF9fZG5kQXV0b1Njcm9sbFRocmVzaG9sZDp7dmFsdWU6NTB9fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX2RyYWdEcm9wQWNjZXNzQ2hhbmdlZChyb3dzRHJhZ2dhYmxlLCBkcm9wTW9kZSwgZHJhZ0ZpbHRlciwgZHJvcEZpbHRlcikiXX1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy4kLnRhYmxlLmFkZEV2ZW50TGlzdGVuZXIoImRyYWdzdGFydCIsdGhpcy5fb25EcmFnU3RhcnQuYmluZCh0aGlzKSksdGhpcy4kLnRhYmxlLmFkZEV2ZW50TGlzdGVuZXIoImRyYWdlbmQiLHRoaXMuX29uRHJhZ0VuZC5iaW5kKHRoaXMpKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ292ZXIiLHRoaXMuX29uRHJhZ092ZXIuYmluZCh0aGlzKSksdGhpcy4kLnRhYmxlLmFkZEV2ZW50TGlzdGVuZXIoImRyYWdsZWF2ZSIsdGhpcy5fb25EcmFnTGVhdmUuYmluZCh0aGlzKSksdGhpcy4kLnRhYmxlLmFkZEV2ZW50TGlzdGVuZXIoImRyb3AiLHRoaXMuX29uRHJvcC5iaW5kKHRoaXMpKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ2VudGVyIixyPT57dGhpcy5kcm9wTW9kZSYmKHIucHJldmVudERlZmF1bHQoKSxyLnN0b3BQcm9wYWdhdGlvbigpKX0pfV9vbkRyYWdTdGFydChyKXtpZih0aGlzLnJvd3NEcmFnZ2FibGUpe2xldCBuPXIudGFyZ2V0O2lmKG4ubG9jYWxOYW1lPT09InZhYWRpbi1ncmlkLWNlbGwtY29udGVudCImJihuPW4uYXNzaWduZWRTbG90LnBhcmVudE5vZGUucGFyZW50Tm9kZSksbi5wYXJlbnROb2RlIT09dGhpcy4kLml0ZW1zKXJldHVybjtpZihyLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiZHJhZ2dpbmctcm93cyIsITAsdGhpcyksdGhpcy5fc2FmYXJpKXtsZXQgcz1uLnN0eWxlLnRyYW5zZm9ybTtuLnN0eWxlLnRvcD0vdHJhbnNsYXRlWVwoKC4qKVwpLy5leGVjKHMpWzFdLG4uc3R5bGUudHJhbnNmb3JtPSJub25lIixyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntuLnN0eWxlLnRvcD0iIixuLnN0eWxlLnRyYW5zZm9ybT1zfSl9bGV0IGk9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLl9pb3M/ci5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlKG4pOnIuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZShuLHIuY2xpZW50WC1pLmxlZnQsci5jbGllbnRZLWkudG9wKTtsZXQgbz1bbl07dGhpcy5faXNTZWxlY3RlZChuLl9pdGVtKSYmKG89dGhpcy5fX2dldFZpZXdwb3J0Um93cygpLmZpbHRlcihzPT50aGlzLl9pc1NlbGVjdGVkKHMuX2l0ZW0pKS5maWx0ZXIocz0+IXRoaXMuZHJhZ0ZpbHRlcnx8dGhpcy5kcmFnRmlsdGVyKHRoaXMuX19nZXRSb3dNb2RlbChzKSkpKSxyLmRhdGFUcmFuc2Zlci5zZXREYXRhKCJ0ZXh0Iix0aGlzLl9fZm9ybWF0RGVmYXVsdFRyYW5zZmVyRGF0YShvKSksbi5zZXRBdHRyaWJ1dGUoImRyYWdzdGFydCIsby5sZW5ndGg+MT9vLmxlbmd0aDoiIiksdGhpcy51cGRhdGVTdHlsZXMoeyItLV9ncmlkLWRyYWctc3RhcnQteCI6YCR7ci5jbGllbnRYLWkubGVmdCsyMH1weGAsIi0tX2dyaWQtZHJhZy1zdGFydC15IjpgJHtyLmNsaWVudFktaS50b3ArMTB9cHhgfSkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57bi5yZW1vdmVBdHRyaWJ1dGUoImRyYWdzdGFydCIpLHRoaXMudXBkYXRlU3R5bGVzKHsiLS1fZ3JpZC1kcmFnLXN0YXJ0LXgiOiIiLCItLV9ncmlkLWRyYWctc3RhcnQteSI6IiJ9KX0pO2xldCBhPW5ldyBDdXN0b21FdmVudCgiZ3JpZC1kcmFnc3RhcnQiLHtkZXRhaWw6e2RyYWdnZWRJdGVtczpvLm1hcChzPT5zLl9pdGVtKSxzZXREcmFnRGF0YToocyxsKT0+ci5kYXRhVHJhbnNmZXIuc2V0RGF0YShzLGwpLHNldERyYWdnZWRJdGVtc0NvdW50OnM9Pm4uc2V0QXR0cmlidXRlKCJkcmFnc3RhcnQiLHMpfX0pO2Eub3JpZ2luYWxFdmVudD1yLHRoaXMuZGlzcGF0Y2hFdmVudChhKX19X29uRHJhZ0VuZChyKXt0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImRyYWdnaW5nLXJvd3MiLCExLHRoaXMpLHIuc3RvcFByb3BhZ2F0aW9uKCk7bGV0IG49bmV3IEN1c3RvbUV2ZW50KCJncmlkLWRyYWdlbmQiKTtuLm9yaWdpbmFsRXZlbnQ9cix0aGlzLmRpc3BhdGNoRXZlbnQobil9X29uRHJhZ0xlYXZlKHIpe3Iuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5fY2xlYXJEcmFnU3R5bGVzKCl9X29uRHJhZ092ZXIocil7aWYodGhpcy5kcm9wTW9kZSl7aWYodGhpcy5fZHJvcExvY2F0aW9uPXZvaWQgMCx0aGlzLl9kcmFnT3Zlckl0ZW09dm9pZCAwLHRoaXMuX19kbmRBdXRvU2Nyb2xsKHIuY2xpZW50WSkpe3RoaXMuX2NsZWFyRHJhZ1N0eWxlcygpO3JldHVybn1sZXQgbj1yLmNvbXBvc2VkUGF0aCgpLmZpbHRlcihpPT5pLmxvY2FsTmFtZT09PSJ0ciIpWzBdO2lmKCF0aGlzLl9lZmZlY3RpdmVTaXplfHx0aGlzLmRyb3BNb2RlPT09VFAuT05fR1JJRCl0aGlzLl9kcm9wTG9jYXRpb249QTAuRU1QVFk7ZWxzZSBpZighbnx8bi5wYXJlbnROb2RlIT09dGhpcy4kLml0ZW1zKXtpZihuKXJldHVybjtpZih0aGlzLmRyb3BNb2RlPT09VFAuQkVUV0VFTnx8dGhpcy5kcm9wTW9kZT09PVRQLk9OX1RPUF9PUl9CRVRXRUVOKW49QXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZpbHRlcihpPT4haS5oaWRkZW4pLnBvcCgpLHRoaXMuX2Ryb3BMb2NhdGlvbj1BMC5CRUxPVztlbHNlIHJldHVybn1lbHNle2xldCBpPW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYodGhpcy5fZHJvcExvY2F0aW9uPUEwLk9OX1RPUCx0aGlzLmRyb3BNb2RlPT09VFAuQkVUV0VFTil7bGV0IG89ci5jbGllbnRZLWkudG9wPGkuYm90dG9tLXIuY2xpZW50WTt0aGlzLl9kcm9wTG9jYXRpb249bz9BMC5BQk9WRTpBMC5CRUxPV31lbHNlIHRoaXMuZHJvcE1vZGU9PT1UUC5PTl9UT1BfT1JfQkVUV0VFTiYmKHIuY2xpZW50WS1pLnRvcDxpLmhlaWdodC8zP3RoaXMuX2Ryb3BMb2NhdGlvbj1BMC5BQk9WRTpyLmNsaWVudFktaS50b3A+aS5oZWlnaHQvMyoyJiYodGhpcy5fZHJvcExvY2F0aW9uPUEwLkJFTE9XKSl9aWYobiYmbi5oYXNBdHRyaWJ1dGUoImRyb3AtZGlzYWJsZWQiKSl7dGhpcy5fZHJvcExvY2F0aW9uPXZvaWQgMDtyZXR1cm59ci5zdG9wUHJvcGFnYXRpb24oKSxyLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZHJvcExvY2F0aW9uPT09QTAuRU1QVFk/dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJkcmFnb3ZlciIsITAsdGhpcyk6bj8odGhpcy5fZHJhZ092ZXJJdGVtPW4uX2l0ZW0sbi5nZXRBdHRyaWJ1dGUoImRyYWdvdmVyIikhPT10aGlzLl9kcm9wTG9jYXRpb24mJm4uc2V0QXR0cmlidXRlKCJkcmFnb3ZlciIsdGhpcy5fZHJvcExvY2F0aW9uKSk6dGhpcy5fY2xlYXJEcmFnU3R5bGVzKCl9fV9fZG5kQXV0b1Njcm9sbChyKXtpZih0aGlzLl9fZG5kQXV0b1Njcm9sbGluZylyZXR1cm4hMDtsZXQgbj10aGlzLiQuaGVhZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSxpPXRoaXMuJC5mb290ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLG89bi1yK3RoaXMuX19kbmRBdXRvU2Nyb2xsVGhyZXNob2xkLGE9ci1pK3RoaXMuX19kbmRBdXRvU2Nyb2xsVGhyZXNob2xkLHM9MDtpZihhPjA/cz1hKjI6bz4wJiYocz0tbyoyKSxzKXtsZXQgbD10aGlzLiQudGFibGUuc2Nyb2xsVG9wO2lmKHRoaXMuJC50YWJsZS5zY3JvbGxUb3ArPXMsbCE9PXRoaXMuJC50YWJsZS5zY3JvbGxUb3ApcmV0dXJuIHRoaXMuX19kbmRBdXRvU2Nyb2xsaW5nPSEwLHNldFRpbWVvdXQoKCk9PnRoaXMuX19kbmRBdXRvU2Nyb2xsaW5nPSExLDIwKSx0aGlzLl9zY3JvbGxIYW5kbGVyKCksITB9fV9fZ2V0Vmlld3BvcnRSb3dzKCl7bGV0IHI9dGhpcy4kLmhlYWRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b20sbj10aGlzLiQuZm9vdGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZpbHRlcihpPT57bGV0IG89aS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gby5ib3R0b20+ciYmby50b3A8bn0pfV9jbGVhckRyYWdTdHlsZXMoKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiZHJhZ292ZXIiKSxBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZm9yRWFjaChyPT5yLnJlbW92ZUF0dHJpYnV0ZSgiZHJhZ292ZXIiKSl9X29uRHJvcChyKXtpZih0aGlzLmRyb3BNb2RlKXtyLnN0b3BQcm9wYWdhdGlvbigpLHIucHJldmVudERlZmF1bHQoKTtsZXQgbj1yLmRhdGFUcmFuc2Zlci50eXBlcyYmQXJyYXkuZnJvbShyLmRhdGFUcmFuc2Zlci50eXBlcykubWFwKG89Pih7dHlwZTpvLGRhdGE6ci5kYXRhVHJhbnNmZXIuZ2V0RGF0YShvKX0pKTt0aGlzLl9jbGVhckRyYWdTdHlsZXMoKTtsZXQgaT1uZXcgQ3VzdG9tRXZlbnQoImdyaWQtZHJvcCIse2J1YmJsZXM6ci5idWJibGVzLGNhbmNlbGFibGU6ci5jYW5jZWxhYmxlLGRldGFpbDp7ZHJvcFRhcmdldEl0ZW06dGhpcy5fZHJhZ092ZXJJdGVtLGRyb3BMb2NhdGlvbjp0aGlzLl9kcm9wTG9jYXRpb24sZHJhZ0RhdGE6bn19KTtpLm9yaWdpbmFsRXZlbnQ9cix0aGlzLmRpc3BhdGNoRXZlbnQoaSl9fV9fZm9ybWF0RGVmYXVsdFRyYW5zZmVyRGF0YShyKXtyZXR1cm4gci5tYXAobj0+QXJyYXkuZnJvbShuLmNoaWxkcmVuKS5maWx0ZXIoaT0+IWkuaGlkZGVuJiZpLmdldEF0dHJpYnV0ZSgicGFydCIpLmluZGV4T2YoImRldGFpbHMtY2VsbCIpPT09LTEpLnNvcnQoKGksbyk9PmkuX2NvbHVtbi5fb3JkZXI+by5fY29sdW1uLl9vcmRlcj8xOi0xKS5tYXAoaT0+aS5fY29udGVudC50ZXh0Q29udGVudC50cmltKCkpLmZpbHRlcihpPT5pKS5qb2luKCIJIikpLmpvaW4oYApgKX1fZHJhZ0Ryb3BBY2Nlc3NDaGFuZ2VkKCl7dGhpcy5maWx0ZXJEcmFnQW5kRHJvcCgpfWZpbHRlckRyYWdBbmREcm9wKCl7QXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZpbHRlcihyPT4hci5oaWRkZW4pLmZvckVhY2gocj0+e3RoaXMuX2ZpbHRlckRyYWdBbmREcm9wKHIsdGhpcy5fX2dldFJvd01vZGVsKHIpKX0pfV9maWx0ZXJEcmFnQW5kRHJvcChyLG4pe2xldCBpPSF0aGlzLnJvd3NEcmFnZ2FibGV8fHRoaXMuZHJhZ0ZpbHRlciYmIXRoaXMuZHJhZ0ZpbHRlcihuKSxvPSF0aGlzLmRyb3BNb2RlfHx0aGlzLmRyb3BGaWx0ZXImJiF0aGlzLmRyb3BGaWx0ZXIobik7QXJyYXkuZnJvbShyLmNoaWxkcmVuKS5tYXAocz0+cy5fY29udGVudCkuZm9yRWFjaChzPT57aT9zLnJlbW92ZUF0dHJpYnV0ZSgiZHJhZ2dhYmxlIik6cy5zZXRBdHRyaWJ1dGUoImRyYWdnYWJsZSIsITApfSksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJkcmFnLWRpc2FibGVkIixpLHIpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiZHJvcC1kaXNhYmxlZCIsbyxyKX19O3ZhciBjdWU9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntfaGVhZGVyRm9jdXNhYmxlOnt0eXBlOk9iamVjdCxvYnNlcnZlcjoiX2ZvY3VzYWJsZUNoYW5nZWQifSxfaXRlbXNGb2N1c2FibGU6e3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfZm9jdXNhYmxlQ2hhbmdlZCJ9LF9mb290ZXJGb2N1c2FibGU6e3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfZm9jdXNhYmxlQ2hhbmdlZCJ9LF9uYXZpZ2F0aW5nSXNIaWRkZW46Qm9vbGVhbixfZm9jdXNlZEl0ZW1JbmRleDp7dHlwZTpOdW1iZXIsdmFsdWU6MH0sX2ZvY3VzZWRDb2x1bW5PcmRlcjpOdW1iZXIsaW50ZXJhY3Rpbmc6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITAscmVhZE9ubHk6ITAsb2JzZXJ2ZXI6Il9pbnRlcmFjdGluZ0NoYW5nZWQifX19cmVhZHkoKXtzdXBlci5yZWFkeSgpLCEodGhpcy5faW9zfHx0aGlzLl9hbmRyb2lkKSYmKHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5fb25LZXlEb3duKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIix0aGlzLl9vbktleVVwKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzaW4iLHRoaXMuX29uRm9jdXNJbiksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJmb2N1c291dCIsdGhpcy5fb25Gb2N1c091dCksdGhpcy4kLnRhYmxlLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzaW4iLHRoaXMuX29uQ2VsbEZvY3VzSW4uYmluZCh0aGlzKSksdGhpcy4kLnRhYmxlLmFkZEV2ZW50TGlzdGVuZXIoImZvY3Vzb3V0Iix0aGlzLl9vbkNlbGxGb2N1c091dC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsKCk9Pnt0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm5hdmlnYXRpbmciLCExLHRoaXMpLHRoaXMuX2lzTW91c2Vkb3duPSEwfSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwoKT0+dGhpcy5faXNNb3VzZWRvd249ITEpKX1fZm9jdXNhYmxlQ2hhbmdlZChyLG4pe24mJm4uc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIiksciYmdGhpcy5fdXBkYXRlR3JpZFNlY3Rpb25Gb2N1c1RhcmdldChyKX1faW50ZXJhY3RpbmdDaGFuZ2VkKCl7dGhpcy5fdXBkYXRlR3JpZFNlY3Rpb25Gb2N1c1RhcmdldCh0aGlzLl9oZWFkZXJGb2N1c2FibGUpLHRoaXMuX3VwZGF0ZUdyaWRTZWN0aW9uRm9jdXNUYXJnZXQodGhpcy5faXRlbXNGb2N1c2FibGUpLHRoaXMuX3VwZGF0ZUdyaWRTZWN0aW9uRm9jdXNUYXJnZXQodGhpcy5fZm9vdGVyRm9jdXNhYmxlKX1fb25LZXlEb3duKHIpe2xldCBuPXIua2V5LGk7c3dpdGNoKG4pe2Nhc2UiQXJyb3dVcCI6Y2FzZSJBcnJvd0Rvd24iOmNhc2UiQXJyb3dMZWZ0IjpjYXNlIkFycm93UmlnaHQiOmNhc2UiUGFnZVVwIjpjYXNlIlBhZ2VEb3duIjpjYXNlIkhvbWUiOmNhc2UiRW5kIjppPSJOYXZpZ2F0aW9uIjticmVhaztjYXNlIkVudGVyIjpjYXNlIkVzY2FwZSI6Y2FzZSJGMiI6aT0iSW50ZXJhY3Rpb24iO2JyZWFrO2Nhc2UiVGFiIjppPSJUYWIiO2JyZWFrO2Nhc2UiICI6aT0iU3BhY2UiO2JyZWFrfXRoaXMuX2RldGVjdEludGVyYWN0aW5nKHIpLHRoaXMuaW50ZXJhY3RpbmcmJmkhPT0iSW50ZXJhY3Rpb24iJiYoaT12b2lkIDApLGkmJnRoaXNbYF9vbiR7aX1LZXlEb3duYF0ocixuKX1fZW5zdXJlU2Nyb2xsZWRUb0luZGV4KHIpe0FycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5maWx0ZXIoaT0+aS5pbmRleD09PXIpWzBdfHx0aGlzLl9zY3JvbGxUb0luZGV4KHIpfV9vbk5hdmlnYXRpb25LZXlEb3duKHIsbil7dGhpcy5fc2Nyb2xsSGFuZGxlcigpLHIucHJldmVudERlZmF1bHQoKTtmdW5jdGlvbiBpKEIpe3JldHVybiBBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKEIucGFyZW50Tm9kZS5jaGlsZHJlbixCKX1sZXQgbz10aGlzLl9sYXN0VmlzaWJsZUluZGV4LXRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4LTEsYT0wLHM9MDtzd2l0Y2gobil7Y2FzZSJBcnJvd1JpZ2h0IjphPXRoaXMuX19pc1JUTD8tMToxO2JyZWFrO2Nhc2UiQXJyb3dMZWZ0IjphPXRoaXMuX19pc1JUTD8xOi0xO2JyZWFrO2Nhc2UiSG9tZSI6YT0tMS8wLHIuY3RybEtleSYmKHM9LTEvMCk7YnJlYWs7Y2FzZSJFbmQiOmE9MS8wLHIuY3RybEtleSYmKHM9MS8wKTticmVhaztjYXNlIkFycm93RG93biI6cz0xO2JyZWFrO2Nhc2UiQXJyb3dVcCI6cz0tMTticmVhaztjYXNlIlBhZ2VEb3duIjpzPW87YnJlYWs7Y2FzZSJQYWdlVXAiOnM9LW87YnJlYWt9bGV0IGw9ci5jb21wb3NlZFBhdGgoKVswXSxjPWkobCksdT10aGlzLl9lbGVtZW50TWF0Y2hlcyhsLCdbcGFydH49ImRldGFpbHMtY2VsbCJdJyksaD1sLnBhcmVudE5vZGUsZj1oLnBhcmVudE5vZGUscD0oZj09PXRoaXMuJC5pdGVtcz90aGlzLl9lZmZlY3RpdmVTaXplOmYuY2hpbGRyZW4ubGVuZ3RoKS0xLGQ9Zj09PXRoaXMuJC5pdGVtcz90aGlzLl9mb2N1c2VkSXRlbUluZGV4IT09dm9pZCAwP3RoaXMuX2ZvY3VzZWRJdGVtSW5kZXg6aC5pbmRleDppKGgpLGc9TWF0aC5tYXgoMCxNYXRoLm1pbihkK3MscCkpLF89ITE7aWYoZj09PXRoaXMuJC5pdGVtcyl7bGV0IEI9aC5faXRlbSxJPXRoaXMuX2NhY2hlLmdldEl0ZW1Gb3JJbmRleChnKTt1P189cz09PTA6Xz1zPT09MSYmdGhpcy5faXNEZXRhaWxzT3BlbmVkKEIpfHxzPT09LTEmJmchPT1kJiZ0aGlzLl9pc0RldGFpbHNPcGVuZWQoSSksXyE9PXUmJihzPT09MSYmX3x8cz09PS0xJiYhXykmJihnPWQpfWlmKGYhPT10aGlzLiQuaXRlbXMpe2lmKGc+ZClmb3IoO2c8cCYmZi5jaGlsZHJlbltnXS5oaWRkZW47KWcrKztlbHNlIGlmKGc8ZClmb3IoO2c+MCYmZi5jaGlsZHJlbltnXS5oaWRkZW47KWctLX10aGlzLl9mb2N1c2VkQ29sdW1uT3JkZXI9PT12b2lkIDAmJih1P3RoaXMuX2ZvY3VzZWRDb2x1bW5PcmRlcj0wOnRoaXMuX2ZvY3VzZWRDb2x1bW5PcmRlcj10aGlzLl9nZXRDb2x1bW5zKGYsZCkuZmlsdGVyKEI9PiFCLmhpZGRlbilbY10uX29yZGVyKTtsZXQgeT10aGlzLl9nZXRDb2x1bW5zKGYsZykuZmlsdGVyKEI9PiFCLmhpZGRlbikseD15Lm1hcChCPT5CLl9vcmRlcikuc29ydCgoQixJKT0+Qi1JKSxiPXgubGVuZ3RoLTEsUz14LmluZGV4T2YoeC5zbGljZSgwKS5zb3J0KChCLEkpPT5NYXRoLmFicyhCLXRoaXMuX2ZvY3VzZWRDb2x1bW5PcmRlciktTWF0aC5hYnMoSS10aGlzLl9mb2N1c2VkQ29sdW1uT3JkZXIpKVswXSksQz1zPT09MCYmdT9TOk1hdGgubWF4KDAsTWF0aC5taW4oUythLGIpKTtDIT09UyYmKHRoaXMuX2ZvY3VzZWRDb2x1bW5PcmRlcj12b2lkIDApLGY9PT10aGlzLiQuaXRlbXMmJnRoaXMuX2Vuc3VyZVNjcm9sbGVkVG9JbmRleChnKSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm5hdmlnYXRpbmciLCEwLHRoaXMpO2xldCBrPXkucmVkdWNlKChCLEksTCk9PihCW0kuX29yZGVyXT1MLEIpLHt9KVt4W0NdXSxPPWY9PT10aGlzLiQuaXRlbXM/QXJyYXkuZnJvbShmLmNoaWxkcmVuKS5maWx0ZXIoQj0+Qi5pbmRleD09PWcpWzBdOmYuY2hpbGRyZW5bZ107aWYoIU8pcmV0dXJuO2xldCBEPV8/QXJyYXkuZnJvbShPLmNoaWxkcmVuKS5maWx0ZXIoQj0+dGhpcy5fZWxlbWVudE1hdGNoZXMoQiwnW3BhcnR+PSJkZXRhaWxzLWNlbGwiXScpKVswXTpPLmNoaWxkcmVuW2tdO2lmKHRoaXMuX3Njcm9sbEhvcml6b250YWxseVRvQ2VsbChEKSxmPT09dGhpcy4kLml0ZW1zJiYodGhpcy5fZm9jdXNlZEl0ZW1JbmRleD1nKSxmPT09dGhpcy4kLml0ZW1zKXtsZXQgQj1ELmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEk9dGhpcy4kLmZvb3Rlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AsTD10aGlzLiQuaGVhZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbTtCLmJvdHRvbT5JPyh0aGlzLiQudGFibGUuc2Nyb2xsVG9wKz1CLmJvdHRvbS1JLHRoaXMuX3Njcm9sbEhhbmRsZXIoKSk6Qi50b3A8TCYmKHRoaXMuJC50YWJsZS5zY3JvbGxUb3AtPUwtQi50b3AsdGhpcy5fc2Nyb2xsSGFuZGxlcigpKX1ELmZvY3VzKCl9X29uSW50ZXJhY3Rpb25LZXlEb3duKHIsbil7bGV0IGk9ci5jb21wb3NlZFBhdGgoKVswXSxvPWkubG9jYWxOYW1lPT09ImlucHV0IiYmIS9eKGJ1dHRvbnxjaGVja2JveHxjb2xvcnxmaWxlfGltYWdlfHJhZGlvfHJhbmdlfHJlc2V0fHN1Ym1pdCkkL2kudGVzdChpLnR5cGUpLGE7c3dpdGNoKG4pe2Nhc2UiRW50ZXIiOmE9dGhpcy5pbnRlcmFjdGluZz8hbzohMDticmVhaztjYXNlIkVzY2FwZSI6YT0hMTticmVhaztjYXNlIkYyIjphPSF0aGlzLmludGVyYWN0aW5nO2JyZWFrfWxldHtjZWxsOnN9PXRoaXMuX2dldEdyaWRFdmVudExvY2F0aW9uKHIpO2lmKHRoaXMuaW50ZXJhY3RpbmchPT1hJiZzIT09bnVsbClpZihhKXtsZXQgbD1zLl9jb250ZW50LnF1ZXJ5U2VsZWN0b3IoIltmb2N1cy10YXJnZXRdIil8fHMuX2NvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQ7bCYmKHIucHJldmVudERlZmF1bHQoKSxsLmZvY3VzKCksdGhpcy5fc2V0SW50ZXJhY3RpbmcoITApLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITEsdGhpcykpfWVsc2Ugci5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRDb2x1bW5PcmRlcj12b2lkIDAscy5mb2N1cygpLHRoaXMuX3NldEludGVyYWN0aW5nKCExKSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm5hdmlnYXRpbmciLCEwLHRoaXMpfV9wcmVkaWN0Rm9jdXNTdGVwVGFyZ2V0KHIsbil7bGV0IGk9W3RoaXMuJC50YWJsZSx0aGlzLl9oZWFkZXJGb2N1c2FibGUsdGhpcy5faXRlbXNGb2N1c2FibGUsdGhpcy5fZm9vdGVyRm9jdXNhYmxlLHRoaXMuJC5mb2N1c2V4aXRdLG89aS5pbmRleE9mKHIpO2ZvcihvKz1uO28+PTAmJm88PWkubGVuZ3RoLTEmJighaVtvXXx8aVtvXS5wYXJlbnROb2RlLmhpZGRlbik7KW8rPW47cmV0dXJuIGlbb119X29uVGFiS2V5RG93bihyKXtsZXQgbj10aGlzLl9wcmVkaWN0Rm9jdXNTdGVwVGFyZ2V0KHIuY29tcG9zZWRQYXRoKClbMF0sci5zaGlmdEtleT8tMToxKTtpZihuPT09dGhpcy4kLnRhYmxlKXRoaXMuJC50YWJsZS5mb2N1cygpO2Vsc2UgaWYobj09PXRoaXMuJC5mb2N1c2V4aXQpdGhpcy4kLmZvY3VzZXhpdC5mb2N1cygpO2Vsc2UgaWYobj09PXRoaXMuX2l0ZW1zRm9jdXNhYmxlKXtsZXQgaT1uLG89dGhpcy5faXRlbXNGb2N1c2FibGUucGFyZW50Tm9kZTtpZih0aGlzLl9lbnN1cmVTY3JvbGxlZFRvSW5kZXgodGhpcy5fZm9jdXNlZEl0ZW1JbmRleCksby5pbmRleCE9PXRoaXMuX2ZvY3VzZWRJdGVtSW5kZXgpe2xldCBhPUFycmF5LmZyb20oby5jaGlsZHJlbikuaW5kZXhPZih0aGlzLl9pdGVtc0ZvY3VzYWJsZSkscz1BcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKGw9PmwuaW5kZXg9PT10aGlzLl9mb2N1c2VkSXRlbUluZGV4KVswXTtzJiYoaT1zLmNoaWxkcmVuW2FdKX1yLnByZXZlbnREZWZhdWx0KCksaS5mb2N1cygpfWVsc2Ugci5wcmV2ZW50RGVmYXVsdCgpLG4uZm9jdXMoKTt0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm5hdmlnYXRpbmciLCEwLHRoaXMpfV9vblNwYWNlS2V5RG93bihyKXtyLnByZXZlbnREZWZhdWx0KCk7bGV0IG49ci5jb21wb3NlZFBhdGgoKVswXTsoIW4uX2NvbnRlbnR8fCFuLl9jb250ZW50LmZpcnN0RWxlbWVudENoaWxkKSYmdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY2VsbC1hY3RpdmF0ZSIse2RldGFpbDp7bW9kZWw6dGhpcy5fX2dldFJvd01vZGVsKG4ucGFyZW50RWxlbWVudCl9fSkpfV9vbktleVVwKHIpe2lmKCEvXiggfFNwYWNlQmFyKSQvLnRlc3Qoci5rZXkpKXJldHVybjtyLnByZXZlbnREZWZhdWx0KCk7bGV0IG49ci5jb21wb3NlZFBhdGgoKVswXTtpZihuLl9jb250ZW50JiZuLl9jb250ZW50LmZpcnN0RWxlbWVudENoaWxkKXtsZXQgaT10aGlzLmhhc0F0dHJpYnV0ZSgibmF2aWdhdGluZyIpO24uX2NvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQuY2xpY2soKSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm5hdmlnYXRpbmciLGksdGhpcyl9fV9vbkZvY3VzSW4ocil7dGhpcy5faXNNb3VzZWRvd258fHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITAsdGhpcyk7bGV0IG49ci5jb21wb3NlZFBhdGgoKVswXTtuPT09dGhpcy4kLnRhYmxlfHxuPT09dGhpcy4kLmZvY3VzZXhpdD8odGhpcy5fcHJlZGljdEZvY3VzU3RlcFRhcmdldChuLG49PT10aGlzLiQudGFibGU/MTotMSkuZm9jdXMoKSx0aGlzLl9zZXRJbnRlcmFjdGluZyghMSkpOnRoaXMuX2RldGVjdEludGVyYWN0aW5nKHIpfV9vbkZvY3VzT3V0KHIpe3RoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITEsdGhpcyksdGhpcy5fZGV0ZWN0SW50ZXJhY3Rpbmcocil9X29uQ2VsbEZvY3VzSW4ocil7bGV0e3NlY3Rpb246bixjZWxsOml9PXRoaXMuX2dldEdyaWRFdmVudExvY2F0aW9uKHIpO3RoaXMuX2RldGVjdEludGVyYWN0aW5nKHIpLG4mJmkmJih0aGlzLl9hY3RpdmVSb3dHcm91cD1uLHRoaXMuJC5oZWFkZXI9PT1uP3RoaXMuX2hlYWRlckZvY3VzYWJsZT1pOnRoaXMuJC5pdGVtcz09PW4/dGhpcy5faXRlbXNGb2N1c2FibGU9aTp0aGlzLiQuZm9vdGVyPT09biYmKHRoaXMuX2Zvb3RlckZvY3VzYWJsZT1pKSxpLl9jb250ZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjZWxsLWZvY3VzaW4iLHtidWJibGVzOiExfSkpLGkuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNlbGwtZm9jdXMiLHtidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpKSx0aGlzLl9kZXRlY3RGb2N1c2VkSXRlbUluZGV4KHIpfV9vbkNlbGxGb2N1c091dChyKXtyLmNvbXBvc2VkUGF0aCgpLmluZGV4T2YodGhpcy4kLnRhYmxlKT09PTMmJnIuY29tcG9zZWRQYXRoKClbMF0uX2NvbnRlbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNlbGwtZm9jdXNvdXQiLHtidWJibGVzOiExfSkpfV9kZXRlY3RJbnRlcmFjdGluZyhyKXtsZXQgbj1yLmNvbXBvc2VkUGF0aCgpLnNvbWUoaT0+aS5sb2NhbE5hbWU9PT0idmFhZGluLWdyaWQtY2VsbC1jb250ZW50Iik7dGhpcy5fc2V0SW50ZXJhY3Rpbmcobil9X2RldGVjdEZvY3VzZWRJdGVtSW5kZXgocil7bGV0e3NlY3Rpb246bixyb3c6aX09dGhpcy5fZ2V0R3JpZEV2ZW50TG9jYXRpb24ocik7bj09PXRoaXMuJC5pdGVtcyYmKHRoaXMuX2ZvY3VzZWRJdGVtSW5kZXg9aS5pbmRleCl9X3VwZGF0ZUdyaWRTZWN0aW9uRm9jdXNUYXJnZXQocil7aWYoIXIpcmV0dXJuO2xldCBuPXRoaXMuX2dldEdyaWRTZWN0aW9uRnJvbUZvY3VzVGFyZ2V0KHIpLGk9dGhpcy5pbnRlcmFjdGluZyYmbj09PXRoaXMuX2FjdGl2ZVJvd0dyb3VwO3IudGFiSW5kZXg9aT8tMTowfV9wcmV2ZW50U2Nyb2xsZXJSb3RhdGluZ0NlbGxGb2N1cyhyLG4pe3IuaW5kZXg9PT10aGlzLl9mb2N1c2VkSXRlbUluZGV4JiZ0aGlzLmhhc0F0dHJpYnV0ZSgibmF2aWdhdGluZyIpJiZ0aGlzLl9hY3RpdmVSb3dHcm91cD09PXRoaXMuJC5pdGVtcyYmKHRoaXMuX25hdmlnYXRpbmdJc0hpZGRlbj0hMCx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm5hdmlnYXRpbmciLCExLHRoaXMpKSxuPT09dGhpcy5fZm9jdXNlZEl0ZW1JbmRleCYmdGhpcy5fbmF2aWdhdGluZ0lzSGlkZGVuJiYodGhpcy5fbmF2aWdhdGluZ0lzSGlkZGVuPSExLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITAsdGhpcykpfV9nZXRDb2x1bW5zKHIsbil7bGV0IGk9dGhpcy5fY29sdW1uVHJlZS5sZW5ndGgtMTtyZXR1cm4gcj09PXRoaXMuJC5oZWFkZXI/aT1uOnI9PT10aGlzLiQuZm9vdGVyJiYoaT10aGlzLl9jb2x1bW5UcmVlLmxlbmd0aC0xLW4pLHRoaXMuX2NvbHVtblRyZWVbaV19X3Jlc2V0S2V5Ym9hcmROYXZpZ2F0aW9uKCl7aWYodGhpcy4kLmhlYWRlci5maXJzdEVsZW1lbnRDaGlsZCYmKHRoaXMuX2hlYWRlckZvY3VzYWJsZT1BcnJheS5mcm9tKHRoaXMuJC5oZWFkZXIuZmlyc3RFbGVtZW50Q2hpbGQuY2hpbGRyZW4pLmZpbHRlcihyPT4hci5oaWRkZW4pWzBdKSx0aGlzLiQuaXRlbXMuZmlyc3RFbGVtZW50Q2hpbGQpe2xldCByPXRoaXMuX2l0ZXJhdGVJdGVtcygobixpKT0+e2lmKHRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4PT09aSlyZXR1cm4gdGhpcy4kLml0ZW1zLmNoaWxkcmVuW25dfSk7ciYmKHRoaXMuX2l0ZW1zRm9jdXNhYmxlPUFycmF5LmZyb20oci5jaGlsZHJlbikuZmlsdGVyKG49PiFuLmhpZGRlbilbMF0pfXRoaXMuJC5mb290ZXIuZmlyc3RFbGVtZW50Q2hpbGQmJih0aGlzLl9mb290ZXJGb2N1c2FibGU9QXJyYXkuZnJvbSh0aGlzLiQuZm9vdGVyLmZpcnN0RWxlbWVudENoaWxkLmNoaWxkcmVuKS5maWx0ZXIocj0+IXIuaGlkZGVuKVswXSl9X3Njcm9sbEhvcml6b250YWxseVRvQ2VsbChyKXtpZihyLmhhc0F0dHJpYnV0ZSgiZnJvemVuIil8fHRoaXMuX2VsZW1lbnRNYXRjaGVzKHIsJ1twYXJ0fj0iZGV0YWlscy1jZWxsIl0nKSlyZXR1cm47bGV0IG49ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPXIucGFyZW50Tm9kZSxvPUFycmF5LmZyb20oaS5jaGlsZHJlbikuaW5kZXhPZihyKSxhPXRoaXMuJC50YWJsZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxzPWEubGVmdCxsPWEucmlnaHQ7Zm9yKGxldCBjPW8tMTtjPj0wO2MtLSl7bGV0IHU9aS5jaGlsZHJlbltjXTtpZighKHUuaGFzQXR0cmlidXRlKCJoaWRkZW4iKXx8dGhpcy5fZWxlbWVudE1hdGNoZXModSwnW3BhcnR+PSJkZXRhaWxzLWNlbGwiXScpKSYmdS5oYXNBdHRyaWJ1dGUoImZyb3plbiIpKXtzPXUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQ7YnJlYWt9fWZvcihsZXQgYz1vKzE7YzxpLmNoaWxkcmVuLmxlbmd0aDtjKyspe2xldCB1PWkuY2hpbGRyZW5bY107aWYoISh1Lmhhc0F0dHJpYnV0ZSgiaGlkZGVuIil8fHRoaXMuX2VsZW1lbnRNYXRjaGVzKHUsJ1twYXJ0fj0iZGV0YWlscy1jZWxsIl0nKSkmJnUuaGFzQXR0cmlidXRlKCJmcm96ZW4iKSl7bD11LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7YnJlYWt9fW4ubGVmdDxzJiYodGhpcy4kLnRhYmxlLnNjcm9sbExlZnQrPU1hdGgucm91bmQobi5sZWZ0LXMpKSxuLnJpZ2h0PmwmJih0aGlzLiQudGFibGUuc2Nyb2xsTGVmdCs9TWF0aC5yb3VuZChuLnJpZ2h0LWwpKX1fZWxlbWVudE1hdGNoZXMocixuKXtyZXR1cm4gci5tYXRjaGVzP3IubWF0Y2hlcyhuKTpBcnJheS5mcm9tKHIucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKG4pKS5pbmRleE9mKHIpIT09LTF9X2dldEdyaWRFdmVudExvY2F0aW9uKHIpe2xldCBuPXIuY29tcG9zZWRQYXRoKCksaT1uLmluZGV4T2YodGhpcy4kLnRhYmxlKSxvPWk+PTE/bltpLTFdOm51bGwsYT1pPj0yP25baS0yXTpudWxsLHM9aT49Mz9uW2ktM106bnVsbDtyZXR1cm57c2VjdGlvbjpvLHJvdzphLGNlbGw6c319X2dldEdyaWRTZWN0aW9uRnJvbUZvY3VzVGFyZ2V0KHIpe3JldHVybiByPT09dGhpcy5faGVhZGVyRm9jdXNhYmxlP3RoaXMuJC5oZWFkZXI6cj09PXRoaXMuX2l0ZW1zRm9jdXNhYmxlP3RoaXMuJC5pdGVtczpyPT09dGhpcy5fZm9vdGVyRm9jdXNhYmxlP3RoaXMuJC5mb290ZXI6bnVsbH19O2Z1bmN0aW9uIHV1ZShlLHQscil7bGV0IG49MTtlLmZvckVhY2goaT0+e24lMTA9PT0wJiZuKyssaS5fb3JkZXI9cituKnQsbisrfSl9dmFyIGh1ZT1lPT5jbGFzcyBleHRlbmRzIHZoKGUpe3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntjb2x1bW5SZW9yZGVyaW5nQWxsb3dlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfb3JkZXJCYXNlU2NvcGU6e3R5cGU6TnVtYmVyLHZhbHVlOjFlN319fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfdXBkYXRlT3JkZXJzKF9jb2x1bW5UcmVlLCBfY29sdW1uVHJlZS4qKSJdfXJlYWR5KCl7c3VwZXIucmVhZHkoKSxUbSh0aGlzLCJ0cmFjayIsdGhpcy5fb25UcmFja0V2ZW50KSx0aGlzLl9yZW9yZGVyR2hvc3Q9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ1twYXJ0PSJyZW9yZGVyLWdob3N0Il0nKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX29uVG91Y2hTdGFydC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsdGhpcy5fb25Ub3VjaE1vdmUuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsdGhpcy5fb25Ub3VjaEVuZC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51Iix0aGlzLl9vbkNvbnRleHRNZW51LmJpbmQodGhpcykpfV9vbkNvbnRleHRNZW51KHIpe3RoaXMuaGFzQXR0cmlidXRlKCJyZW9yZGVyaW5nIikmJnIucHJldmVudERlZmF1bHQoKX1fb25Ub3VjaFN0YXJ0KHIpe3RoaXMuX3N0YXJ0VG91Y2hSZW9yZGVyVGltZW91dD1zZXRUaW1lb3V0KCgpPT57dGhpcy5fb25UcmFja1N0YXJ0KHtkZXRhaWw6e3g6ci50b3VjaGVzWzBdLmNsaWVudFgseTpyLnRvdWNoZXNbMF0uY2xpZW50WX19KX0sMTAwKX1fb25Ub3VjaE1vdmUocil7dGhpcy5fZHJhZ2dlZENvbHVtbiYmci5wcmV2ZW50RGVmYXVsdCgpLGNsZWFyVGltZW91dCh0aGlzLl9zdGFydFRvdWNoUmVvcmRlclRpbWVvdXQpfV9vblRvdWNoRW5kKCl7Y2xlYXJUaW1lb3V0KHRoaXMuX3N0YXJ0VG91Y2hSZW9yZGVyVGltZW91dCksdGhpcy5fb25UcmFja0VuZCgpfV9vblRyYWNrRXZlbnQocil7aWYoci5kZXRhaWwuc3RhdGU9PT0ic3RhcnQiKXtsZXQgbj1yLmNvbXBvc2VkUGF0aCgpLGk9bltuLmluZGV4T2YodGhpcy4kLmhlYWRlciktMl07aWYoIWl8fCFpLl9jb250ZW50fHxpLl9jb250ZW50LmNvbnRhaW5zKHRoaXMuZ2V0Um9vdE5vZGUoKS5hY3RpdmVFbGVtZW50KXx8dGhpcy4kLnNjcm9sbGVyLmhhc0F0dHJpYnV0ZSgiY29sdW1uLXJlc2l6aW5nIikpcmV0dXJuO3RoaXMuX3RvdWNoRGV2aWNlfHx0aGlzLl9vblRyYWNrU3RhcnQocil9ZWxzZSByLmRldGFpbC5zdGF0ZT09PSJ0cmFjayI/dGhpcy5fb25UcmFjayhyKTpyLmRldGFpbC5zdGF0ZT09PSJlbmQiJiZ0aGlzLl9vblRyYWNrRW5kKHIpfV9vblRyYWNrU3RhcnQocil7aWYoIXRoaXMuY29sdW1uUmVvcmRlcmluZ0FsbG93ZWQpcmV0dXJuO2xldCBuPXIuY29tcG9zZWRQYXRoJiZyLmNvbXBvc2VkUGF0aCgpO2lmKG4mJm4uZmlsdGVyKG89Pm8uaGFzQXR0cmlidXRlJiZvLmhhc0F0dHJpYnV0ZSgiZHJhZ2dhYmxlIikpWzBdKXJldHVybjtsZXQgaT10aGlzLl9jZWxsRnJvbVBvaW50KHIuZGV0YWlsLngsci5kZXRhaWwueSk7aWYoISghaXx8aS5nZXRBdHRyaWJ1dGUoInBhcnQiKS5pbmRleE9mKCJoZWFkZXItY2VsbCIpPT09LTEpKXtmb3IodGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJyZW9yZGVyaW5nIiwhMCx0aGlzKSx0aGlzLl9kcmFnZ2VkQ29sdW1uPWkuX2NvbHVtbjt0aGlzLl9kcmFnZ2VkQ29sdW1uLnBhcmVudEVsZW1lbnQuY2hpbGRFbGVtZW50Q291bnQ9PT0xOyl0aGlzLl9kcmFnZ2VkQ29sdW1uPXRoaXMuX2RyYWdnZWRDb2x1bW4ucGFyZW50RWxlbWVudDt0aGlzLl9zZXRTaWJsaW5nc1Jlb3JkZXJTdGF0dXModGhpcy5fZHJhZ2dlZENvbHVtbiwiYWxsb3dlZCIpLHRoaXMuX2RyYWdnZWRDb2x1bW4uX3Jlb3JkZXJTdGF0dXM9ImRyYWdnaW5nIix0aGlzLl91cGRhdGVHaG9zdChpKSx0aGlzLl9yZW9yZGVyR2hvc3Quc3R5bGUudmlzaWJpbGl0eT0idmlzaWJsZSIsdGhpcy5fdXBkYXRlR2hvc3RQb3NpdGlvbihyLmRldGFpbC54LHRoaXMuX3RvdWNoRGV2aWNlP3IuZGV0YWlsLnktNTA6ci5kZXRhaWwueSksdGhpcy5fYXV0b1Njcm9sbGVyKCl9fV9vblRyYWNrKHIpe2lmKCF0aGlzLl9kcmFnZ2VkQ29sdW1uKXJldHVybjtsZXQgbj10aGlzLl9jZWxsRnJvbVBvaW50KHIuZGV0YWlsLngsci5kZXRhaWwueSk7aWYoIW4pcmV0dXJuO2xldCBpPXRoaXMuX2dldFRhcmdldENvbHVtbihuLHRoaXMuX2RyYWdnZWRDb2x1bW4pO3RoaXMuX2lzU3dhcEFsbG93ZWQodGhpcy5fZHJhZ2dlZENvbHVtbixpKSYmdGhpcy5faXNTd2FwcGFibGVCeVBvc2l0aW9uKGksci5kZXRhaWwueCkmJnRoaXMuX3N3YXBDb2x1bW5PcmRlcnModGhpcy5fZHJhZ2dlZENvbHVtbixpKSx0aGlzLl91cGRhdGVHaG9zdFBvc2l0aW9uKHIuZGV0YWlsLngsdGhpcy5fdG91Y2hEZXZpY2U/ci5kZXRhaWwueS01MDpyLmRldGFpbC55KSx0aGlzLl9sYXN0RHJhZ0NsaWVudFg9ci5kZXRhaWwueH1fb25UcmFja0VuZCgpeyF0aGlzLl9kcmFnZ2VkQ29sdW1ufHwodGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJyZW9yZGVyaW5nIiwhMSx0aGlzKSx0aGlzLl9kcmFnZ2VkQ29sdW1uLl9yZW9yZGVyU3RhdHVzPSIiLHRoaXMuX3NldFNpYmxpbmdzUmVvcmRlclN0YXR1cyh0aGlzLl9kcmFnZ2VkQ29sdW1uLCIiKSx0aGlzLl9kcmFnZ2VkQ29sdW1uPW51bGwsdGhpcy5fbGFzdERyYWdDbGllbnRYPW51bGwsdGhpcy5fcmVvcmRlckdob3N0LnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIsdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY29sdW1uLXJlb3JkZXIiLHtkZXRhaWw6e2NvbHVtbnM6dGhpcy5fZ2V0Q29sdW1uc0luT3JkZXIoKX19KSkpfV9nZXRDb2x1bW5zSW5PcmRlcigpe3JldHVybiB0aGlzLl9jb2x1bW5UcmVlLnNsaWNlKDApLnBvcCgpLmZpbHRlcihyPT4hci5oaWRkZW4pLnNvcnQoKHIsbik9PnIuX29yZGVyLW4uX29yZGVyKX1fY2VsbEZyb21Qb2ludChyLG4pe3I9cnx8MCxuPW58fDAsdGhpcy5fZHJhZ2dlZENvbHVtbnx8dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuby1jb250ZW50LXBvaW50ZXItZXZlbnRzIiwhMCx0aGlzLiQuc2Nyb2xsZXIpO2xldCBpPXRoaXMuc2hhZG93Um9vdC5lbGVtZW50RnJvbVBvaW50KHIsbik7aWYodGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuby1jb250ZW50LXBvaW50ZXItZXZlbnRzIiwhMSx0aGlzLiQuc2Nyb2xsZXIpLGkmJmkuX2NvbHVtbilyZXR1cm4gaX1fdXBkYXRlR2hvc3RQb3NpdGlvbihyLG4pe2xldCBpPXRoaXMuX3Jlb3JkZXJHaG9zdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPXItaS53aWR0aC8yLGE9bi1pLmhlaWdodC8yLHM9cGFyc2VJbnQodGhpcy5fcmVvcmRlckdob3N0Ll9sZWZ0fHwwKSxsPXBhcnNlSW50KHRoaXMuX3Jlb3JkZXJHaG9zdC5fdG9wfHwwKTt0aGlzLl9yZW9yZGVyR2hvc3QuX2xlZnQ9cy0oaS5sZWZ0LW8pLHRoaXMuX3Jlb3JkZXJHaG9zdC5fdG9wPWwtKGkudG9wLWEpLHRoaXMuX3Jlb3JkZXJHaG9zdC5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZSgke3RoaXMuX3Jlb3JkZXJHaG9zdC5fbGVmdH1weCwgJHt0aGlzLl9yZW9yZGVyR2hvc3QuX3RvcH1weClgfV91cGRhdGVHaG9zdChyKXtsZXQgbj10aGlzLl9yZW9yZGVyR2hvc3Q7bi50ZXh0Q29udGVudD1yLl9jb250ZW50LmlubmVyVGV4dDtsZXQgaT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShyKTtyZXR1cm5bImJveFNpemluZyIsImRpc3BsYXkiLCJ3aWR0aCIsImhlaWdodCIsImJhY2tncm91bmQiLCJhbGlnbkl0ZW1zIiwicGFkZGluZyIsImJvcmRlciIsImZsZXgtZGlyZWN0aW9uIiwib3ZlcmZsb3ciXS5mb3JFYWNoKG89Pm4uc3R5bGVbb109aVtvXSksbn1fdXBkYXRlT3JkZXJzKHIsbil7cj09PXZvaWQgMHx8bj09PXZvaWQgMHx8KHJbMF0uZm9yRWFjaChpPT5pLl9vcmRlcj0wKSx1dWUoclswXSx0aGlzLl9vcmRlckJhc2VTY29wZSwwKSl9X3NldFNpYmxpbmdzUmVvcmRlclN0YXR1cyhyLG4pe0FycmF5LmZyb20oci5wYXJlbnROb2RlLmNoaWxkcmVuKS5maWx0ZXIoaT0+L2NvbHVtbi8udGVzdChpLmxvY2FsTmFtZSkmJnRoaXMuX2lzU3dhcEFsbG93ZWQoaSxyKSkuZm9yRWFjaChpPT5pLl9yZW9yZGVyU3RhdHVzPW4pfV9hdXRvU2Nyb2xsZXIoKXtpZih0aGlzLl9sYXN0RHJhZ0NsaWVudFgpe2xldCByPXRoaXMuX2xhc3REcmFnQ2xpZW50WC10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0KzUwLG49dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LXRoaXMuX2xhc3REcmFnQ2xpZW50WCs1MDtyPjA/dGhpcy4kLnRhYmxlLnNjcm9sbExlZnQrPXIvMTA6bj4wJiYodGhpcy4kLnRhYmxlLnNjcm9sbExlZnQtPW4vMTApLHRoaXMuX3Njcm9sbEhhbmRsZXIoKX10aGlzLl9kcmFnZ2VkQ29sdW1uJiZ0aGlzLmFzeW5jKHRoaXMuX2F1dG9TY3JvbGxlciwxMCl9X2lzU3dhcEFsbG93ZWQocixuKXtpZihyJiZuKXtsZXQgaT1yIT09bixvPXIucGFyZW50RWxlbWVudD09PW4ucGFyZW50RWxlbWVudCxhPXIuZnJvemVuPT09bi5mcm96ZW47cmV0dXJuIGkmJm8mJmF9fV9pc1N3YXBwYWJsZUJ5UG9zaXRpb24ocixuKXtsZXQgaT1BcnJheS5mcm9tKHRoaXMuJC5oZWFkZXIucXVlcnlTZWxlY3RvckFsbCgndHI6bm90KFtoaWRkZW5dKSBbcGFydH49ImNlbGwiXScpKS5maWx0ZXIocz0+ci5jb250YWlucyhzLl9jb2x1bW4pKVswXSxvPXRoaXMuJC5oZWFkZXIucXVlcnlTZWxlY3RvcigidHI6bm90KFtoaWRkZW5dKSBbcmVvcmRlci1zdGF0dXM9ZHJhZ2dpbmddIikuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYT1pLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiBhLmxlZnQ+by5sZWZ0P24+YS5yaWdodC1vLndpZHRoOm48YS5sZWZ0K28ud2lkdGh9X3N3YXBDb2x1bW5PcmRlcnMocixuKXtsZXQgaT1yLl9vcmRlcjtyLl9vcmRlcj1uLl9vcmRlcixuLl9vcmRlcj1pLHRoaXMuX3VwZGF0ZUxhc3RGcm96ZW4oKSx0aGlzLl91cGRhdGVGaXJzdEFuZExhc3RDb2x1bW4oKX1fZ2V0VGFyZ2V0Q29sdW1uKHIsbil7aWYociYmbil7bGV0IGk9ci5fY29sdW1uO2Zvcig7aS5wYXJlbnRFbGVtZW50IT09bi5wYXJlbnRFbGVtZW50JiZpIT09dGhpczspaT1pLnBhcmVudEVsZW1lbnQ7cmV0dXJuIGkucGFyZW50RWxlbWVudD09PW4ucGFyZW50RWxlbWVudD9pOnIuX2NvbHVtbn19fTt2YXIgY2hyPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57cmVzaXphYmxlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLmxvY2FsTmFtZT09PSJ2YWFkaW4tZ3JpZC1jb2x1bW4tZ3JvdXAiKXJldHVybjtsZXQgcj10aGlzLnBhcmVudE5vZGU7cmV0dXJuIHImJnIubG9jYWxOYW1lPT09InZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCImJnIucmVzaXphYmxlfHwhMX19LF9oZWFkZXJUZW1wbGF0ZTp7dHlwZTpPYmplY3R9LF9mb290ZXJUZW1wbGF0ZTp7dHlwZTpPYmplY3R9LGZyb3plbjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxoaWRkZW46e3R5cGU6Qm9vbGVhbn0saGVhZGVyOnt0eXBlOlN0cmluZ30sdGV4dEFsaWduOnt0eXBlOlN0cmluZ30sX2xhc3RGcm96ZW46e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX29yZGVyOk51bWJlcixfcmVvcmRlclN0YXR1czpCb29sZWFuLF9lbXB0eUNlbGxzOkFycmF5LF9oZWFkZXJDZWxsOk9iamVjdCxfZm9vdGVyQ2VsbDpPYmplY3QsX2dyaWQ6T2JqZWN0LGhlYWRlclJlbmRlcmVyOkZ1bmN0aW9uLGZvb3RlclJlbmRlcmVyOkZ1bmN0aW9ufX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX3dpZHRoQ2hhbmdlZCh3aWR0aCwgX2hlYWRlckNlbGwsIF9mb290ZXJDZWxsLCBfY2VsbHMuKikiLCJfZnJvemVuQ2hhbmdlZChmcm96ZW4sIF9oZWFkZXJDZWxsLCBfZm9vdGVyQ2VsbCwgX2NlbGxzLiopIiwiX2ZsZXhHcm93Q2hhbmdlZChmbGV4R3JvdywgX2hlYWRlckNlbGwsIF9mb290ZXJDZWxsLCBfY2VsbHMuKikiLCJfcGF0aE9ySGVhZGVyQ2hhbmdlZChwYXRoLCBoZWFkZXIsIF9oZWFkZXJDZWxsLCBfZm9vdGVyQ2VsbCwgX2NlbGxzLiosIHJlbmRlcmVyLCBoZWFkZXJSZW5kZXJlciwgX2JvZHlUZW1wbGF0ZSwgX2hlYWRlclRlbXBsYXRlKSIsIl90ZXh0QWxpZ25DaGFuZ2VkKHRleHRBbGlnbiwgX2NlbGxzLiosIF9oZWFkZXJDZWxsLCBfZm9vdGVyQ2VsbCkiLCJfb3JkZXJDaGFuZ2VkKF9vcmRlciwgX2hlYWRlckNlbGwsIF9mb290ZXJDZWxsLCBfY2VsbHMuKikiLCJfbGFzdEZyb3plbkNoYW5nZWQoX2xhc3RGcm96ZW4pIiwiX3NldEJvZHlUZW1wbGF0ZU9yUmVuZGVyZXIoX2JvZHlUZW1wbGF0ZSwgcmVuZGVyZXIsIF9jZWxscywgX2NlbGxzLiopIiwiX3NldEhlYWRlclRlbXBsYXRlT3JSZW5kZXJlcihfaGVhZGVyVGVtcGxhdGUsIGhlYWRlclJlbmRlcmVyLCBfaGVhZGVyQ2VsbCkiLCJfc2V0Rm9vdGVyVGVtcGxhdGVPclJlbmRlcmVyKF9mb290ZXJUZW1wbGF0ZSwgZm9vdGVyUmVuZGVyZXIsIF9mb290ZXJDZWxsKSIsIl9yZXNpemFibGVDaGFuZ2VkKHJlc2l6YWJsZSwgX2hlYWRlckNlbGwpIiwiX3Jlb3JkZXJTdGF0dXNDaGFuZ2VkKF9yZW9yZGVyU3RhdHVzLCBfaGVhZGVyQ2VsbCwgX2Zvb3RlckNlbGwsIF9jZWxscy4qKSIsIl9oaWRkZW5DaGFuZ2VkKGhpZGRlbiwgX2hlYWRlckNlbGwsIF9mb290ZXJDZWxsLCBfY2VsbHMuKikiXX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fYm9keVRlbXBsYXRlJiYodGhpcy5fYm9keVRlbXBsYXRlLnRlbXBsYXRpemVyLl9ncmlkPXRoaXMuX2dyaWQpLHRoaXMuX2hlYWRlclRlbXBsYXRlJiYodGhpcy5faGVhZGVyVGVtcGxhdGUudGVtcGxhdGl6ZXIuX2dyaWQ9dGhpcy5fZ3JpZCksdGhpcy5fZm9vdGVyVGVtcGxhdGUmJih0aGlzLl9mb290ZXJUZW1wbGF0ZS50ZW1wbGF0aXplci5fZ3JpZD10aGlzLl9ncmlkKSx0aGlzLl90ZW1wbGF0ZU9ic2VydmVyLmZsdXNoKCksdGhpcy5fYm9keVRlbXBsYXRlfHx0aGlzLl90ZW1wbGF0ZU9ic2VydmVyLmNhbGxiYWNrKCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5fYWxsQ2VsbHMuZm9yRWFjaChyPT57ci5fY29udGVudC5wYXJlbnROb2RlfHx0aGlzLl9ncmlkJiZ0aGlzLl9ncmlkLmFwcGVuZENoaWxkKHIuX2NvbnRlbnQpfSl9KX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5fZmluZEhvc3RHcmlkKCl8fHRoaXMuX2FsbENlbGxzLmZvckVhY2gocj0+e3IuX2NvbnRlbnQucGFyZW50Tm9kZSYmci5fY29udGVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHIuX2NvbnRlbnQpfSl9KSx0aGlzLl9ncmlkVmFsdWU9dm9pZCAwfV9maW5kSG9zdEdyaWQoKXtsZXQgcj10aGlzO2Zvcig7ciYmIS9edmFhZGluLipncmlkKC1wcm8pPyQvLnRlc3Qoci5sb2NhbE5hbWUpOylyPXIuYXNzaWduZWRTbG90P3IuYXNzaWduZWRTbG90LnBhcmVudE5vZGU6ci5wYXJlbnROb2RlO3JldHVybiByfHx2b2lkIDB9Z2V0IF9ncmlkKCl7cmV0dXJuIHRoaXMuX2dyaWRWYWx1ZXx8KHRoaXMuX2dyaWRWYWx1ZT10aGlzLl9maW5kSG9zdEdyaWQoKSksdGhpcy5fZ3JpZFZhbHVlfWdldCBfYWxsQ2VsbHMoKXtyZXR1cm5bXS5jb25jYXQodGhpcy5fY2VsbHN8fFtdKS5jb25jYXQodGhpcy5fZW1wdHlDZWxsc3x8W10pLmNvbmNhdCh0aGlzLl9oZWFkZXJDZWxsKS5jb25jYXQodGhpcy5fZm9vdGVyQ2VsbCkuZmlsdGVyKHI9PnIpfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl90ZW1wbGF0ZU9ic2VydmVyPW5ldyB4aCh0aGlzLCgpPT57dGhpcy5faGVhZGVyVGVtcGxhdGU9dGhpcy5fcHJlcGFyZUhlYWRlclRlbXBsYXRlKCksdGhpcy5fZm9vdGVyVGVtcGxhdGU9dGhpcy5fcHJlcGFyZUZvb3RlclRlbXBsYXRlKCksdGhpcy5fYm9keVRlbXBsYXRlPXRoaXMuX3ByZXBhcmVCb2R5VGVtcGxhdGUoKX0pfV9wcmVwYXJlSGVhZGVyVGVtcGxhdGUoKXtyZXR1cm4gdGhpcy5fcHJlcGFyZVRlbXBsYXRpemVyKHRoaXMuX2ZpbmRUZW1wbGF0ZSghMCl8fG51bGwse30pfV9wcmVwYXJlRm9vdGVyVGVtcGxhdGUoKXtyZXR1cm4gdGhpcy5fcHJlcGFyZVRlbXBsYXRpemVyKHRoaXMuX2ZpbmRUZW1wbGF0ZSghMSwhMCl8fG51bGwse30pfV9wcmVwYXJlQm9keVRlbXBsYXRlKCl7cmV0dXJuIHRoaXMuX3ByZXBhcmVUZW1wbGF0aXplcih0aGlzLl9maW5kVGVtcGxhdGUoKXx8bnVsbCl9X3ByZXBhcmVUZW1wbGF0aXplcihyLG4pe2lmKHImJiFyLnRlbXBsYXRpemVyKXtsZXQgaT1uZXcgQzA7aS5fZ3JpZD10aGlzLl9ncmlkLGkuZGF0YUhvc3Q9dGhpcy5kYXRhSG9zdCxpLl9pbnN0YW5jZVByb3BzPW58fGkuX2luc3RhbmNlUHJvcHMsaS50ZW1wbGF0ZT1yLHIudGVtcGxhdGl6ZXI9aX1yZXR1cm4gcn1fcmVuZGVySGVhZGVyQW5kRm9vdGVyKCl7dGhpcy5oZWFkZXJSZW5kZXJlciYmdGhpcy5faGVhZGVyQ2VsbCYmdGhpcy5fX3J1blJlbmRlcmVyKHRoaXMuaGVhZGVyUmVuZGVyZXIsdGhpcy5faGVhZGVyQ2VsbCksdGhpcy5mb290ZXJSZW5kZXJlciYmdGhpcy5fZm9vdGVyQ2VsbCYmdGhpcy5fX3J1blJlbmRlcmVyKHRoaXMuZm9vdGVyUmVuZGVyZXIsdGhpcy5fZm9vdGVyQ2VsbCl9X19ydW5SZW5kZXJlcihyLG4saSl7bGV0IG89W24uX2NvbnRlbnQsdGhpc107aSYmaS5pdGVtJiZvLnB1c2goaSksci5hcHBseSh0aGlzLG8pfV9fc2V0Q29sdW1uVGVtcGxhdGVPclJlbmRlcmVyKHIsbixpKXtpZighdGhpcy5oaWRkZW4pe2lmKHImJm4pdGhyb3cgbmV3IEVycm9yKCJZb3Ugc2hvdWxkIG9ubHkgdXNlIGVpdGhlciBhIHJlbmRlcmVyIG9yIGEgdGVtcGxhdGUiKTtpLmZvckVhY2gobz0+e2xldCBhPXRoaXMuX2dyaWQuX19nZXRSb3dNb2RlbChvLnBhcmVudEVsZW1lbnQpO2lmKG4pby5fcmVuZGVyZXI9biwoYS5pdGVtfHxuPT09dGhpcy5oZWFkZXJSZW5kZXJlcnx8bj09PXRoaXMuZm9vdGVyUmVuZGVyZXIpJiZ0aGlzLl9fcnVuUmVuZGVyZXIobixvLGEpO2Vsc2UgaWYoby5fdGVtcGxhdGUhPT1yKXtvLl90ZW1wbGF0ZT1yLG8uX2NvbnRlbnQuaW5uZXJIVE1MPSIiLHIudGVtcGxhdGl6ZXIuX2dyaWQ9ci50ZW1wbGF0aXplci5fZ3JpZHx8dGhpcy5fZ3JpZDtsZXQgcz1yLnRlbXBsYXRpemVyLmNyZWF0ZUluc3RhbmNlKCk7by5fY29udGVudC5hcHBlbmRDaGlsZChzLnJvb3QpLG8uX2luc3RhbmNlPXMsYS5pdGVtJiZvLl9pbnN0YW5jZS5zZXRQcm9wZXJ0aWVzKGEpfX0pfX1fc2V0Qm9keVRlbXBsYXRlT3JSZW5kZXJlcihyLG4saSl7KHJ8fG4pJiZpJiZ0aGlzLl9fc2V0Q29sdW1uVGVtcGxhdGVPclJlbmRlcmVyKHIsbixpKX1fc2V0SGVhZGVyVGVtcGxhdGVPclJlbmRlcmVyKHIsbixpKXsocnx8bikmJmkmJnRoaXMuX19zZXRDb2x1bW5UZW1wbGF0ZU9yUmVuZGVyZXIocixuLFtpXSl9X3NldEZvb3RlclRlbXBsYXRlT3JSZW5kZXJlcihyLG4saSl7KHJ8fG4pJiZpJiYodGhpcy5fX3NldENvbHVtblRlbXBsYXRlT3JSZW5kZXJlcihyLG4sW2ldKSx0aGlzLl9ncmlkLl9fdXBkYXRlSGVhZGVyRm9vdGVyUm93VmlzaWJpbGl0eShpLnBhcmVudEVsZW1lbnQpKX1fc2VsZWN0Rmlyc3RUZW1wbGF0ZShyPSExLG49ITEpe3JldHVybiB4aC5nZXRGbGF0dGVuZWROb2Rlcyh0aGlzKS5maWx0ZXIoaT0+aS5sb2NhbE5hbWU9PT0idGVtcGxhdGUiJiZpLmNsYXNzTGlzdC5jb250YWlucygiaGVhZGVyIik9PT1yJiZpLmNsYXNzTGlzdC5jb250YWlucygiZm9vdGVyIik9PT1uKVswXX1fZmluZFRlbXBsYXRlKHIsbil7bGV0IGk9dGhpcy5fc2VsZWN0Rmlyc3RUZW1wbGF0ZShyLG4pO3JldHVybiBpJiZ0aGlzLmRhdGFIb3N0JiYoaS5fcm9vdERhdGFIb3N0PXRoaXMuZGF0YUhvc3QuX3Jvb3REYXRhSG9zdHx8dGhpcy5kYXRhSG9zdCksaX1fZmxleEdyb3dDaGFuZ2VkKHIpe3RoaXMucGFyZW50RWxlbWVudCYmdGhpcy5wYXJlbnRFbGVtZW50Ll9jb2x1bW5Qcm9wQ2hhbmdlZCYmdGhpcy5wYXJlbnRFbGVtZW50Ll9jb2x1bW5Qcm9wQ2hhbmdlZCgiZmxleEdyb3ciKSx0aGlzLl9hbGxDZWxscy5mb3JFYWNoKG49Pm4uc3R5bGUuZmxleEdyb3c9cil9X29yZGVyQ2hhbmdlZChyKXt0aGlzLl9hbGxDZWxscy5mb3JFYWNoKG49Pm4uc3R5bGUub3JkZXI9cil9X3dpZHRoQ2hhbmdlZChyKXt0aGlzLnBhcmVudEVsZW1lbnQmJnRoaXMucGFyZW50RWxlbWVudC5fY29sdW1uUHJvcENoYW5nZWQmJnRoaXMucGFyZW50RWxlbWVudC5fY29sdW1uUHJvcENoYW5nZWQoIndpZHRoIiksdGhpcy5fYWxsQ2VsbHMuZm9yRWFjaChuPT5uLnN0eWxlLndpZHRoPXIpLHRoaXMuX2dyaWQmJnRoaXMuX2dyaWQuX19mb3JjZVJlZmxvdyYmdGhpcy5fZ3JpZC5fX2ZvcmNlUmVmbG93KCl9X2Zyb3plbkNoYW5nZWQocil7dGhpcy5wYXJlbnRFbGVtZW50JiZ0aGlzLnBhcmVudEVsZW1lbnQuX2NvbHVtblByb3BDaGFuZ2VkJiZ0aGlzLnBhcmVudEVsZW1lbnQuX2NvbHVtblByb3BDaGFuZ2VkKCJmcm96ZW4iLHIpLHRoaXMuX2FsbENlbGxzLmZvckVhY2gobj0+dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJmcm96ZW4iLHIsbikpLHRoaXMuX2dyaWQmJnRoaXMuX2dyaWQuX2Zyb3plbkNlbGxzQ2hhbmdlZCYmdGhpcy5fZ3JpZC5fZnJvemVuQ2VsbHNDaGFuZ2VkKCl9X2xhc3RGcm96ZW5DaGFuZ2VkKHIpe3RoaXMuX2FsbENlbGxzLmZvckVhY2gobj0+dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJsYXN0LWZyb3plbiIscixuKSksdGhpcy5wYXJlbnRFbGVtZW50JiZ0aGlzLnBhcmVudEVsZW1lbnQuX2NvbHVtblByb3BDaGFuZ2VkJiYodGhpcy5wYXJlbnRFbGVtZW50Ll9sYXN0RnJvemVuPXIpfV9wYXRoT3JIZWFkZXJDaGFuZ2VkKHIsbixpLG8sYSxzLGwsYyx1KXtsZXQgaD1uIT09dm9pZCAwO2lmKCFsJiYhdSYmaCYmaSYmdGhpcy5fX3NldFRleHRDb250ZW50KGkuX2NvbnRlbnQsbiksciYmYS52YWx1ZSl7aWYoIXMmJiFjKXtsZXQgZj0ocCxkLHtpdGVtOmd9KT0+dGhpcy5fX3NldFRleHRDb250ZW50KHAsdGhpcy5nZXQocixnKSk7dGhpcy5fX3NldENvbHVtblRlbXBsYXRlT3JSZW5kZXJlcih2b2lkIDAsZixhLnZhbHVlKX0hbCYmIXUmJiFoJiZpJiZuIT09bnVsbCYmdGhpcy5fX3NldFRleHRDb250ZW50KGkuX2NvbnRlbnQsdGhpcy5fZ2VuZXJhdGVIZWFkZXIocikpfWkmJnRoaXMuX2dyaWQuX191cGRhdGVIZWFkZXJGb290ZXJSb3dWaXNpYmlsaXR5KGkucGFyZW50RWxlbWVudCl9X19zZXRUZXh0Q29udGVudChyLG4pe3IudGV4dENvbnRlbnQhPT1uJiYoci50ZXh0Q29udGVudD1uKX1fZ2VuZXJhdGVIZWFkZXIocil7cmV0dXJuIHIuc3Vic3RyKHIubGFzdEluZGV4T2YoIi4iKSsxKS5yZXBsYWNlKC8oW0EtWl0pL2csIi0kMSIpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvLS9nLCIgIikucmVwbGFjZSgvXi4vLG49Pm4udG9VcHBlckNhc2UoKSl9X3RvZ2dsZUF0dHJpYnV0ZShyLG4saSl7aS5oYXNBdHRyaWJ1dGUocik9PT0hbiYmKG4/aS5zZXRBdHRyaWJ1dGUociwiIik6aS5yZW1vdmVBdHRyaWJ1dGUocikpfV9yZW9yZGVyU3RhdHVzQ2hhbmdlZChyKXt0aGlzLl9hbGxDZWxscy5mb3JFYWNoKG49Pm4uc2V0QXR0cmlidXRlKCJyZW9yZGVyLXN0YXR1cyIscikpfV9yZXNpemFibGVDaGFuZ2VkKHIsbil7cj09PXZvaWQgMHx8bj09PXZvaWQgMHx8biYmW25dLmNvbmNhdCh0aGlzLl9lbXB0eUNlbGxzKS5mb3JFYWNoKGk9PntpZihpKXtsZXQgbz1pLnF1ZXJ5U2VsZWN0b3IoJ1twYXJ0fj0icmVzaXplLWhhbmRsZSJdJyk7aWYobyYmaS5yZW1vdmVDaGlsZChvKSxyKXtsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTthLnNldEF0dHJpYnV0ZSgicGFydCIsInJlc2l6ZS1oYW5kbGUiKSxpLmFwcGVuZENoaWxkKGEpfX19KX1fdGV4dEFsaWduQ2hhbmdlZChyKXtpZihyPT09dm9pZCAwKXJldHVybjtpZihbInN0YXJ0IiwiZW5kIiwiY2VudGVyIl0uaW5kZXhPZihyKT09PS0xKXtjb25zb2xlLndhcm4oJ3RleHRBbGlnbiBjYW4gb25seSBiZSBzZXQgYXMgInN0YXJ0IiwgImVuZCIgb3IgImNlbnRlciInKTtyZXR1cm59bGV0IG47Z2V0Q29tcHV0ZWRTdHlsZSh0aGlzLl9ncmlkKS5kaXJlY3Rpb249PT0ibHRyIj9yPT09InN0YXJ0Ij9uPSJsZWZ0IjpyPT09ImVuZCImJihuPSJyaWdodCIpOnI9PT0ic3RhcnQiP249InJpZ2h0IjpyPT09ImVuZCImJihuPSJsZWZ0IiksdGhpcy5fYWxsQ2VsbHMuZm9yRWFjaChpPT57aS5fY29udGVudC5zdHlsZS50ZXh0QWxpZ249cixnZXRDb21wdXRlZFN0eWxlKGkuX2NvbnRlbnQpLnRleHRBbGlnbiE9PXImJihpLl9jb250ZW50LnN0eWxlLnRleHRBbGlnbj1uKX0pfV9oaWRkZW5DaGFuZ2VkKHIpe3RoaXMucGFyZW50RWxlbWVudCYmdGhpcy5wYXJlbnRFbGVtZW50Ll9jb2x1bW5Qcm9wQ2hhbmdlZCYmdGhpcy5wYXJlbnRFbGVtZW50Ll9jb2x1bW5Qcm9wQ2hhbmdlZCgiaGlkZGVuIixyKSwhIXIhPSEhdGhpcy5fcHJldmlvdXNIaWRkZW4mJnRoaXMuX2dyaWQmJihyPT09ITAmJnRoaXMuX2FsbENlbGxzLmZvckVhY2gobj0+e24uX2NvbnRlbnQucGFyZW50Tm9kZSYmbi5fY29udGVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG4uX2NvbnRlbnQpfSksdGhpcy5fZ3JpZC5fZGVib3VuY2VySGlkZGVuQ2hhbmdlZD1zci5kZWJvdW5jZSh0aGlzLl9ncmlkLl9kZWJvdW5jZXJIaWRkZW5DaGFuZ2VkLE5pLCgpPT57dGhpcy5fZ3JpZCYmdGhpcy5fZ3JpZC5fcmVuZGVyQ29sdW1uVHJlZSYmdGhpcy5fZ3JpZC5fcmVuZGVyQ29sdW1uVHJlZSh0aGlzLl9ncmlkLl9jb2x1bW5UcmVlKX0pLHRoaXMuX2dyaWQuX3VwZGF0ZUxhc3RGcm96ZW4mJnRoaXMuX2dyaWQuX3VwZGF0ZUxhc3RGcm96ZW4oKSx0aGlzLl9ncmlkLm5vdGlmeVJlc2l6ZSYmdGhpcy5fZ3JpZC5ub3RpZnlSZXNpemUoKSx0aGlzLl9ncmlkLl9yZXNldEtleWJvYXJkTmF2aWdhdGlvbiYmdGhpcy5fZ3JpZC5fcmVzZXRLZXlib2FyZE5hdmlnYXRpb24oKSksdGhpcy5fcHJldmlvdXNIaWRkZW49cn19LGVWPWNsYXNzIGV4dGVuZHMgY2hyKFpIKG10KSl7c3RhdGljIGdldCBpcygpe3JldHVybiJ2YWFkaW4tZ3JpZC1jb2x1bW4ifXN0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnt3aWR0aDp7dHlwZTpTdHJpbmcsdmFsdWU6IjEwMHB4In0sZmxleEdyb3c6e3R5cGU6TnVtYmVyLHZhbHVlOjF9LHJlbmRlcmVyOkZ1bmN0aW9uLHBhdGg6e3R5cGU6U3RyaW5nfSxhdXRvV2lkdGg6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX2JvZHlUZW1wbGF0ZTp7dHlwZTpPYmplY3R9LF9jZWxsczpBcnJheX19fTtjdXN0b21FbGVtZW50cy5kZWZpbmUoZVYuaXMsZVYpO2pjKCJ2YWFkaW4tZ3JpZCIsQ2lgCiAgICBAa2V5ZnJhbWVzIHZhYWRpbi1ncmlkLWFwcGVhciB7CiAgICAgIHRvIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CiAgICB9CgogICAgOmhvc3QgewogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgYW5pbWF0aW9uOiAxbXMgdmFhZGluLWdyaWQtYXBwZWFyOwogICAgICBoZWlnaHQ6IDQwMHB4OwogICAgICBmbGV4OiAxIDEgYXV0bzsKICAgICAgYWxpZ24tc2VsZjogc3RyZXRjaDsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgfQoKICAgIDpob3N0KFtoaWRkZW5dKSB7CiAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KCiAgICAjc2Nyb2xsZXIgewogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICB3aWR0aDogYXV0bzsKICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogMDsKICAgICAgcmlnaHQ6IDA7CiAgICAgIGJvdHRvbTogMDsKICAgICAgbGVmdDogMDsKICAgIH0KCiAgICA6aG9zdChbaGVpZ2h0LWJ5LXJvd3NdKSB7CiAgICAgIGhlaWdodDogYXV0bzsKICAgICAgYWxpZ24tc2VsZjogZmxleC1zdGFydDsKICAgICAgZmxleC1ncm93OiAwOwogICAgICB3aWR0aDogMTAwJTsKICAgIH0KCiAgICA6aG9zdChbaGVpZ2h0LWJ5LXJvd3NdKSAjc2Nyb2xsZXIgewogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB9CgogICAgI3RhYmxlIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgLyogV29ya2Fyb3VuZCBmb3IgYSBEZXNrdG9wIFNhZmFyaSBidWc6IG5ldyBzdGFja2luZyBjb250ZXh0IGhlcmUgcHJldmVudHMgdGhlIHNjcm9sbGJhciBmcm9tIGdldHRpbmcgaGlkZGVuICovCiAgICAgIHotaW5kZXg6IDA7CiAgICB9CgogICAgI2hlYWRlciwKICAgICNmb290ZXIgewogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgcG9zaXRpb246IC13ZWJraXQtc3RpY2t5OwogICAgICBwb3NpdGlvbjogc3RpY2t5OwogICAgICBsZWZ0OiAwOwogICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIHotaW5kZXg6IDE7CiAgICB9CgogICAgI2hlYWRlciB7CiAgICAgIHRvcDogMDsKICAgIH0KCiAgICB0aCB7CiAgICAgIHRleHQtYWxpZ246IGluaGVyaXQ7CiAgICB9CgogICAgLyogU2FmYXJpIGRvZXNuJ3Qgd29yayB3aXRoICJpbmhlcml0IiAqLwogICAgW3NhZmFyaV0gdGggewogICAgICB0ZXh0LWFsaWduOiBpbml0aWFsOwogICAgfQoKICAgICNmb290ZXIgewogICAgICBib3R0b206IDA7CiAgICB9CgogICAgI2l0ZW1zIHsKICAgICAgZmxleC1ncm93OiAxOwogICAgICBmbGV4LXNocmluazogMDsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIHBvc2l0aW9uOiAtd2Via2l0LXN0aWNreTsKICAgICAgcG9zaXRpb246IHN0aWNreTsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGxlZnQ6IDA7CiAgICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgfQoKICAgIFtwYXJ0fj0ncm93J10gewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB3aWR0aDogMTAwJTsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgbWFyZ2luOiAwOwogICAgfQoKICAgIFtwYXJ0fj0ncm93J11bbG9hZGluZ10gW3BhcnR+PSdib2R5LWNlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgIG9wYWNpdHk6IDA7CiAgICB9CgogICAgI2l0ZW1zIFtwYXJ0fj0ncm93J10gewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB9CgogICAgI2l0ZW1zIFtwYXJ0fj0ncm93J106ZW1wdHkgewogICAgICBoZWlnaHQ6IDFlbTsKICAgIH0KCiAgICBbcGFydH49J2NlbGwnXTpub3QoW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSkgewogICAgICBmbGV4LXNocmluazogMDsKICAgICAgZmxleC1ncm93OiAxOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB3aWR0aDogMTAwJTsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBwYWRkaW5nOiAwOwogICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgfQoKICAgIFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10gewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIGJvdHRvbTogMDsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIHBhZGRpbmc6IDA7CiAgICB9CgogICAgW3BhcnR+PSdjZWxsJ10gOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgfQoKICAgIFtoaWRkZW5dIHsKICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQoKICAgIFtmcm96ZW5dIHsKICAgICAgei1pbmRleDogMjsKICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgIH0KCiAgICBbbm8tc2Nyb2xsYmFyc11bc2FmYXJpXSAjdGFibGUsCiAgICBbbm8tc2Nyb2xsYmFyc11bZmlyZWZveF0gI3RhYmxlIHsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIH0KCiAgICAvKiBSZW9yZGVyaW5nIHN0eWxlcyAqLwogICAgOmhvc3QoW3Jlb3JkZXJpbmddKSBbcGFydH49J2NlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSwKICAgIDpob3N0KFtyZW9yZGVyaW5nXSkgW3BhcnR+PSdyZXNpemUtaGFuZGxlJ10sCiAgICAjc2Nyb2xsZXJbbm8tY29udGVudC1wb2ludGVyLWV2ZW50c10gW3BhcnR+PSdjZWxsJ10gOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIH0KCiAgICBbcGFydH49J3Jlb3JkZXItZ2hvc3QnXSB7CiAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgb3BhY2l0eTogMC41OwoKICAgICAgLyogUHJldmVudCBvdmVyZmxvd2luZyB0aGUgZ3JpZCBpbiBGaXJlZm94ICovCiAgICAgIHRvcDogMDsKICAgICAgbGVmdDogMDsKICAgIH0KCiAgICA6aG9zdChbcmVvcmRlcmluZ10pIHsKICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICB9CgogICAgLyogUmVzaXppbmcgc3R5bGVzICovCiAgICBbcGFydH49J3Jlc2l6ZS1oYW5kbGUnXSB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiAwOwogICAgICByaWdodDogMDsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBjdXJzb3I6IGNvbC1yZXNpemU7CiAgICAgIHotaW5kZXg6IDE7CiAgICB9CgogICAgW3BhcnR+PSdyZXNpemUtaGFuZGxlJ106OmJlZm9yZSB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgY29udGVudDogJyc7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgd2lkdGg6IDM1cHg7CiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsKICAgIH0KCiAgICBbbGFzdC1jb2x1bW5dIFtwYXJ0fj0ncmVzaXplLWhhbmRsZSddOjpiZWZvcmUsCiAgICBbbGFzdC1mcm96ZW5dIFtwYXJ0fj0ncmVzaXplLWhhbmRsZSddOjpiZWZvcmUgewogICAgICB3aWR0aDogMThweDsKICAgICAgdHJhbnNmb3JtOiBub25lOwogICAgICByaWdodDogMDsKICAgIH0KCiAgICAjc2Nyb2xsZXJbY29sdW1uLXJlc2l6aW5nXSB7CiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICB9CgogICAgLyogU2l6ZXIgc3R5bGVzICovCiAgICAjc2l6ZXIgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgIH0KCiAgICAjc2l6ZXIgW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSB7CiAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KCiAgICAjc2l6ZXIgW3BhcnR+PSdjZWxsJ11baGlkZGVuXSB7CiAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KCiAgICAjc2l6ZXIgW3BhcnR+PSdjZWxsJ10gewogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIGxpbmUtaGVpZ2h0OiAwOwogICAgICBoZWlnaHQ6IDAgIWltcG9ydGFudDsKICAgICAgbWluLWhlaWdodDogMCAhaW1wb3J0YW50OwogICAgICBtYXgtaGVpZ2h0OiAwICFpbXBvcnRhbnQ7CiAgICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICAgICAgYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7CiAgICB9CgogICAgI3NpemVyIFtwYXJ0fj0nY2VsbCddOjpiZWZvcmUgewogICAgICBjb250ZW50OiAnLSc7CiAgICB9CgogICAgI3NpemVyIFtwYXJ0fj0nY2VsbCddIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQoKICAgIC8qIFJUTCBzcGVjaWZpYyBzdHlsZXMgKi8KCiAgICA6aG9zdChbZGlyPSdydGwnXSkgI2l0ZW1zLAogICAgOmhvc3QoW2Rpcj0ncnRsJ10pICNoZWFkZXIsCiAgICA6aG9zdChbZGlyPSdydGwnXSkgI2Zvb3RlciB7CiAgICAgIGxlZnQ6IGF1dG87CiAgICB9CgogICAgOmhvc3QoW2Rpcj0ncnRsJ10pIFtwYXJ0fj0ncmVvcmRlci1naG9zdCddIHsKICAgICAgbGVmdDogYXV0bzsKICAgICAgcmlnaHQ6IDA7CiAgICB9CgogICAgOmhvc3QoW2Rpcj0ncnRsJ10pIFtwYXJ0fj0ncmVzaXplLWhhbmRsZSddIHsKICAgICAgbGVmdDogMDsKICAgICAgcmlnaHQ6IGF1dG87CiAgICB9CgogICAgOmhvc3QoW2Rpcj0ncnRsJ10pIFtwYXJ0fj0ncmVzaXplLWhhbmRsZSddOjpiZWZvcmUgewogICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoNTAlKTsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW2xhc3QtY29sdW1uXSBbcGFydH49J3Jlc2l6ZS1oYW5kbGUnXTo6YmVmb3JlLAogICAgOmhvc3QoW2Rpcj0ncnRsJ10pIFtsYXN0LWZyb3plbl0gW3BhcnR+PSdyZXNpemUtaGFuZGxlJ106OmJlZm9yZSB7CiAgICAgIGxlZnQ6IDA7CiAgICAgIHJpZ2h0OiBhdXRvOwogICAgfQogIGAse21vZHVsZUlkOiJ2YWFkaW4tZ3JpZC1zdHlsZXMifSk7dmFyIHVocj0oKCk9Pnt0cnl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUV2ZW50KCJUb3VjaEV2ZW50IiksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSkoKSxyVj1jbGFzcyBleHRlbmRzIEpIKFhIKFFjZSgkY2UodHVlKFhjZShpdWUob3VlKGF1ZShudWUoY3VlKGpjZShydWUoaHVlKEtjZShldWUobHVlKHN1ZSh0VikpKSkpKSkpKSkpKSkpKSkpKXtzdGF0aWMgZ2V0IHRlbXBsYXRlKCl7cmV0dXJuIFFgCiAgICAgIDxkaXYKICAgICAgICBpZD0ic2Nyb2xsZXIiCiAgICAgICAgc2FmYXJpJD0iW1tfc2FmYXJpXV0iCiAgICAgICAgaW9zJD0iW1tfaW9zXV0iCiAgICAgICAgbG9hZGluZyQ9IltbbG9hZGluZ11dIgogICAgICAgIGNvbHVtbi1yZW9yZGVyaW5nLWFsbG93ZWQkPSJbW2NvbHVtblJlb3JkZXJpbmdBbGxvd2VkXV0iCiAgICAgID4KICAgICAgICA8dGFibGUgaWQ9InRhYmxlIiByb2xlPSJncmlkIiBhcmlhLW11bHRpc2VsZWN0YWJsZT0idHJ1ZSIgdGFiaW5kZXg9IjAiPgogICAgICAgICAgPGNhcHRpb24gaWQ9InNpemVyIiBwYXJ0PSJyb3ciPjwvY2FwdGlvbj4KICAgICAgICAgIDx0aGVhZCBpZD0iaGVhZGVyIiByb2xlPSJyb3dncm91cCI+PC90aGVhZD4KICAgICAgICAgIDx0Ym9keSBpZD0iaXRlbXMiIHJvbGU9InJvd2dyb3VwIj48L3Rib2R5PgogICAgICAgICAgPHRmb290IGlkPSJmb290ZXIiIHJvbGU9InJvd2dyb3VwIj48L3Rmb290PgogICAgICAgIDwvdGFibGU+CgogICAgICAgIDxkaXYgcGFydD0icmVvcmRlci1naG9zdCI+PC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBpZD0iZm9jdXNleGl0IiB0YWJpbmRleD0iMCI+PC9kaXY+CiAgICBgfXN0YXRpYyBnZXQgaXMoKXtyZXR1cm4idmFhZGluLWdyaWQifXN0YXRpYyBnZXQgdmVyc2lvbigpe3JldHVybiIyMC4wLjIifXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfY29sdW1uVHJlZUNoYW5nZWQoX2NvbHVtblRyZWUsIF9jb2x1bW5UcmVlLiopIl19c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue19zYWZhcmk6e3R5cGU6Qm9vbGVhbix2YWx1ZTovXigoPyFjaHJvbWV8YW5kcm9pZCkuKSpzYWZhcmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpfSxfaW9zOnt0eXBlOkJvb2xlYW4sdmFsdWU6L2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiF3aW5kb3cuTVNTdHJlYW18fG5hdmlnYXRvci5wbGF0Zm9ybT09PSJNYWNJbnRlbCImJm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cz4xfSxfZmlyZWZveDp7dHlwZTpCb29sZWFuLHZhbHVlOm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCJmaXJlZm94Iik+LTF9LF9hbmRyb2lkOnt0eXBlOkJvb2xlYW4sdmFsdWU6L2FuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpfSxfdG91Y2hEZXZpY2U6e3R5cGU6Qm9vbGVhbix2YWx1ZTp1aHJ9LGhlaWdodEJ5Um93czp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxvYnNlcnZlcjoiX2hlaWdodEJ5Um93c0NoYW5nZWQifSxfcmVjYWxjdWxhdGVDb2x1bW5XaWR0aE9uY2VMb2FkaW5nRmluaXNoZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH19fWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImFuaW1hdGlvbmVuZCIsdGhpcy5fb25BbmltYXRpb25FbmQpfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLnJlY2FsY3VsYXRlQ29sdW1uV2lkdGhzKCl9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHQscixuKXtzdXBlci5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodCxyLG4pLHQ9PT0iZGlyIiYmKHRoaXMuX19pc1JUTD1uPT09InJ0bCIsdGhpcy5fdXBkYXRlU2Nyb2xsZXJNZWFzdXJlbWVudHMoKSl9X19oYXNSb3dzV2l0aENsaWVudEhlaWdodCgpe3JldHVybiEhQXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZpbHRlcih0PT50LmNsaWVudEhlaWdodCkubGVuZ3RofV9faXRlbXNSZWNlaXZlZCgpe3RoaXMuX3JlY2FsY3VsYXRlQ29sdW1uV2lkdGhPbmNlTG9hZGluZ0ZpbmlzaGVkJiYhdGhpcy5fY2FjaGUuaXNMb2FkaW5nKCkmJnRoaXMuX19oYXNSb3dzV2l0aENsaWVudEhlaWdodCgpJiYodGhpcy5fcmVjYWxjdWxhdGVDb2x1bW5XaWR0aE9uY2VMb2FkaW5nRmluaXNoZWQ9ITEsdGhpcy5yZWNhbGN1bGF0ZUNvbHVtbldpZHRocygpKX1fcmVjYWxjdWxhdGVDb2x1bW5XaWR0aHModCl7dC5mb3JFYWNoKHI9PntyLndpZHRoPSJhdXRvIixyLl9vcmlnRmxleEdyb3c9ci5mbGV4R3JvdyxyLmZsZXhHcm93PTB9KSx0LmZvckVhY2gocj0+e3IuX2N1cnJlbnRXaWR0aD0wLHIuX2FsbENlbGxzLmZvckVhY2gobj0+e2xldCBpPW4ub2Zmc2V0V2lkdGgrMTtyLl9jdXJyZW50V2lkdGg9TWF0aC5tYXgoci5fY3VycmVudFdpZHRoLGkpfSl9KSx0LmZvckVhY2gocj0+e3Iud2lkdGg9YCR7ci5fY3VycmVudFdpZHRofXB4YCxyLmZsZXhHcm93PXIuX29yaWdGbGV4R3JvdyxyLl9jdXJyZW50V2lkdGg9dm9pZCAwLHIuX29yaWdGbGV4R3Jvdz12b2lkIDB9KX1yZWNhbGN1bGF0ZUNvbHVtbldpZHRocygpe2lmKCEhdGhpcy5fY29sdW1uVHJlZSlpZih0aGlzLl9jYWNoZS5pc0xvYWRpbmcoKSl0aGlzLl9yZWNhbGN1bGF0ZUNvbHVtbldpZHRoT25jZUxvYWRpbmdGaW5pc2hlZD0hMDtlbHNle2xldCB0PXRoaXMuX2dldENvbHVtbnMoKS5maWx0ZXIocj0+IXIuaGlkZGVuJiZyLmF1dG9XaWR0aCk7dGhpcy5fcmVjYWxjdWxhdGVDb2x1bW5XaWR0aHModCl9fV9jcmVhdGVTY3JvbGxlclJvd3ModCl7bGV0IHI9W107Zm9yKGxldCBuPTA7bjx0O24rKyl7bGV0IGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTtpLnNldEF0dHJpYnV0ZSgicGFydCIsInJvdyIpLGkuc2V0QXR0cmlidXRlKCJyb2xlIiwicm93IiksdGhpcy5fY29sdW1uVHJlZSYmdGhpcy5fdXBkYXRlUm93KGksdGhpcy5fY29sdW1uVHJlZVt0aGlzLl9jb2x1bW5UcmVlLmxlbmd0aC0xXSwiYm9keSIsITEsITApLHIucHVzaChpKX1yZXR1cm4gdGhpcy5fY29sdW1uVHJlZSYmdGhpcy5fY29sdW1uVHJlZVt0aGlzLl9jb2x1bW5UcmVlLmxlbmd0aC0xXS5mb3JFYWNoKG49Pm4uaXNDb25uZWN0ZWQmJm4ubm90aWZ5UGF0aCYmbi5ub3RpZnlQYXRoKCJfY2VsbHMuKiIsbi5fY2VsbHMpKSx2Z3QodGhpcywoKT0+e3RoaXMuX3VwZGF0ZUZpcnN0QW5kTGFzdENvbHVtbigpLHRoaXMuX3Jlc2V0S2V5Ym9hcmROYXZpZ2F0aW9uKCl9KSxyfV9nZXRSb3dUYXJnZXQoKXtyZXR1cm4gdGhpcy4kLml0ZW1zfV9jcmVhdGVDZWxsKHQpe2xldCByPXRoaXMuX2NvbnRlbnRJbmRleD10aGlzLl9jb250ZW50SW5kZXgrMXx8MCxuPSJ2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQtIityLGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidmFhZGluLWdyaWQtY2VsbC1jb250ZW50Iik7aS5zZXRBdHRyaWJ1dGUoInNsb3QiLG4pO2xldCBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodCk7by5pZD1uLnJlcGxhY2UoIi1jb250ZW50LSIsIi0iKSxvLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCItMSIpLG8uc2V0QXR0cmlidXRlKCJyb2xlIix0PT09InRkIj8iZ3JpZGNlbGwiOiJjb2x1bW5oZWFkZXIiKTtsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzbG90Iik7cmV0dXJuIGEuc2V0QXR0cmlidXRlKCJuYW1lIixuKSxvLmFwcGVuZENoaWxkKGEpLG8uX2NvbnRlbnQ9aSxpLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsKCk9PntpZih3aW5kb3cuY2hyb21lKXtsZXQgcz0oKT0+e2kuY29udGFpbnModGhpcy5nZXRSb290Tm9kZSgpLmFjdGl2ZUVsZW1lbnQpfHxvLmZvY3VzKCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIscywhMCl9O2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHMsITApfWVsc2Ugc2V0VGltZW91dCgoKT0+e2kuY29udGFpbnModGhpcy5nZXRSb290Tm9kZSgpLmFjdGl2ZUVsZW1lbnQpfHxvLmZvY3VzKCl9KX0pLG99X3VwZGF0ZVJvdyh0LHIsbixpLG8pe249bnx8ImJvZHkiO2xldCBhPWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtBcnJheS5mcm9tKHQuY2hpbGRyZW4pLmZvckVhY2gocz0+cy5fdmFjYW50PSEwKSx0LmlubmVySFRNTD0iIix0LmlkIT09InNpemVyIiYmKHQuaGlkZGVuPSEwKSxyLmZpbHRlcihzPT4hcy5oaWRkZW4pLmZvckVhY2goKHMsbCxjKT0+e2xldCB1O2lmKG49PT0iYm9keSIpe2lmKHMuX2NlbGxzPXMuX2NlbGxzfHxbXSx1PXMuX2NlbGxzLmZpbHRlcihoPT5oLl92YWNhbnQpWzBdLHV8fCh1PXRoaXMuX2NyZWF0ZUNlbGwoInRkIikscy5fY2VsbHMucHVzaCh1KSksdS5zZXRBdHRyaWJ1dGUoInBhcnQiLCJjZWxsIGJvZHktY2VsbCIpLHQuYXBwZW5kQ2hpbGQodSksbD09PWMubGVuZ3RoLTEmJih0aGlzLl9yb3dEZXRhaWxzVGVtcGxhdGV8fHRoaXMucm93RGV0YWlsc1JlbmRlcmVyKSl7dGhpcy5fZGV0YWlsc0NlbGxzPXRoaXMuX2RldGFpbHNDZWxsc3x8W107bGV0IGg9dGhpcy5fZGV0YWlsc0NlbGxzLmZpbHRlcihmPT5mLl92YWNhbnQpWzBdfHx0aGlzLl9jcmVhdGVDZWxsKCJ0ZCIpO3RoaXMuX2RldGFpbHNDZWxscy5pbmRleE9mKGgpPT09LTEmJnRoaXMuX2RldGFpbHNDZWxscy5wdXNoKGgpLGguX2NvbnRlbnQucGFyZW50RWxlbWVudHx8YS5hcHBlbmRDaGlsZChoLl9jb250ZW50KSx0aGlzLl9jb25maWd1cmVEZXRhaWxzQ2VsbChoKSx0LmFwcGVuZENoaWxkKGgpLHRoaXMuX2ExMXlTZXRSb3dEZXRhaWxzQ2VsbCh0LGgpLGguX3ZhY2FudD0hMX1zLm5vdGlmeVBhdGgmJiFvJiZzLm5vdGlmeVBhdGgoIl9jZWxscy4qIixzLl9jZWxscyl9ZWxzZXtsZXQgaD1uPT09ImhlYWRlciI/InRoIjoidGQiO2l8fHMubG9jYWxOYW1lPT09InZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCI/KHU9c1tgXyR7bn1DZWxsYF18fHRoaXMuX2NyZWF0ZUNlbGwoaCksdS5fY29sdW1uPXMsdC5hcHBlbmRDaGlsZCh1KSxzW2BfJHtufUNlbGxgXT11KToocy5fZW1wdHlDZWxscz1zLl9lbXB0eUNlbGxzfHxbXSx1PXMuX2VtcHR5Q2VsbHMuZmlsdGVyKGY9PmYuX3ZhY2FudClbMF18fHRoaXMuX2NyZWF0ZUNlbGwoaCksdS5fY29sdW1uPXMsdC5hcHBlbmRDaGlsZCh1KSxzLl9lbXB0eUNlbGxzLmluZGV4T2YodSk9PT0tMSYmcy5fZW1wdHlDZWxscy5wdXNoKHUpKSx1LnNldEF0dHJpYnV0ZSgicGFydCIsYGNlbGwgJHtufS1jZWxsYCksdGhpcy5fX3VwZGF0ZUhlYWRlckZvb3RlclJvd1Zpc2liaWxpdHkodCl9dS5fY29udGVudC5wYXJlbnRFbGVtZW50fHxhLmFwcGVuZENoaWxkKHUuX2NvbnRlbnQpLHUuX3ZhY2FudD0hMSx1Ll9jb2x1bW49c30pLHRoaXMuYXBwZW5kQ2hpbGQoYSksdGhpcy5fZnJvemVuQ2VsbHNDaGFuZ2VkKCksdGhpcy5fdXBkYXRlRmlyc3RBbmRMYXN0Q29sdW1uRm9yUm93KHQpfV9fdXBkYXRlSGVhZGVyRm9vdGVyUm93VmlzaWJpbGl0eSh0KXtpZighdClyZXR1cm47bGV0IHI9QXJyYXkuZnJvbSh0LmNoaWxkcmVuKS5maWx0ZXIobj0+e2xldCBpPW4uX2NvbHVtbjtpZihpLl9lbXB0eUNlbGxzJiZpLl9lbXB0eUNlbGxzLmluZGV4T2Yobik+LTEpcmV0dXJuITE7aWYodC5wYXJlbnRFbGVtZW50PT09dGhpcy4kLmhlYWRlcil7aWYoaS5oZWFkZXJSZW5kZXJlcnx8aS5faGVhZGVyVGVtcGxhdGUpcmV0dXJuITA7aWYoaS5oZWFkZXI9PT1udWxsKXJldHVybiExO2lmKGkucGF0aHx8aS5oZWFkZXIhPT12b2lkIDApcmV0dXJuITB9ZWxzZSBpZihpLmZvb3RlclJlbmRlcmVyfHxpLl9mb290ZXJUZW1wbGF0ZSlyZXR1cm4hMH0pO3QuaGlkZGVuIT09IXIubGVuZ3RoJiYodC5oaWRkZW49IXIubGVuZ3RoLHRoaXMubm90aWZ5UmVzaXplKCkpfV91cGRhdGVTY3JvbGxlckl0ZW0odCxyKXt0aGlzLl9wcmV2ZW50U2Nyb2xsZXJSb3RhdGluZ0NlbGxGb2N1cyh0LHIpLHRoaXMuX2NvbHVtblRyZWUmJih0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImZpcnN0IixyPT09MCx0KSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm9kZCIsciUyLHQpLHRoaXMuX2ExMXlVcGRhdGVSb3dSb3dpbmRleCh0LHIpLHRoaXMuX2dldEl0ZW0ocix0KSl9X2NvbHVtblRyZWVDaGFuZ2VkKHQpe3RoaXMuX3JlbmRlckNvbHVtblRyZWUodCksdGhpcy5yZWNhbGN1bGF0ZUNvbHVtbldpZHRocygpfV9yZW5kZXJDb2x1bW5UcmVlKHQpe2ZvcihBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZm9yRWFjaChyPT50aGlzLl91cGRhdGVSb3cocix0W3QubGVuZ3RoLTFdLG51bGwsITEsITApKTt0aGlzLiQuaGVhZGVyLmNoaWxkcmVuLmxlbmd0aDx0Lmxlbmd0aDspe2xldCByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7ci5zZXRBdHRyaWJ1dGUoInBhcnQiLCJyb3ciKSxyLnNldEF0dHJpYnV0ZSgicm9sZSIsInJvdyIpLHRoaXMuJC5oZWFkZXIuYXBwZW5kQ2hpbGQocik7bGV0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTtuLnNldEF0dHJpYnV0ZSgicGFydCIsInJvdyIpLG4uc2V0QXR0cmlidXRlKCJyb2xlIiwicm93IiksdGhpcy4kLmZvb3Rlci5hcHBlbmRDaGlsZChuKX1mb3IoO3RoaXMuJC5oZWFkZXIuY2hpbGRyZW4ubGVuZ3RoPnQubGVuZ3RoOyl0aGlzLiQuaGVhZGVyLnJlbW92ZUNoaWxkKHRoaXMuJC5oZWFkZXIuZmlyc3RFbGVtZW50Q2hpbGQpLHRoaXMuJC5mb290ZXIucmVtb3ZlQ2hpbGQodGhpcy4kLmZvb3Rlci5maXJzdEVsZW1lbnRDaGlsZCk7QXJyYXkuZnJvbSh0aGlzLiQuaGVhZGVyLmNoaWxkcmVuKS5mb3JFYWNoKChyLG4pPT50aGlzLl91cGRhdGVSb3cocix0W25dLCJoZWFkZXIiLG49PT10Lmxlbmd0aC0xKSksQXJyYXkuZnJvbSh0aGlzLiQuZm9vdGVyLmNoaWxkcmVuKS5mb3JFYWNoKChyLG4pPT50aGlzLl91cGRhdGVSb3cocix0W3QubGVuZ3RoLTEtbl0sImZvb3RlciIsbj09PTApKSx0aGlzLl91cGRhdGVSb3codGhpcy4kLnNpemVyLHRbdC5sZW5ndGgtMV0pLHRoaXMuX3Jlc2l6ZUhhbmRsZXIoKSx0aGlzLl9mcm96ZW5DZWxsc0NoYW5nZWQoKSx0aGlzLl91cGRhdGVGaXJzdEFuZExhc3RDb2x1bW4oKSx0aGlzLl9yZXNldEtleWJvYXJkTmF2aWdhdGlvbigpLHRoaXMuX2ExMXlVcGRhdGVIZWFkZXJSb3dzKCksdGhpcy5fYTExeVVwZGF0ZUZvb3RlclJvd3MoKSx0aGlzLl9fdXBkYXRlRm9vdGVyUG9zaXRpb25pbmcoKX1fX3VwZGF0ZUZvb3RlclBvc2l0aW9uaW5nKCl7dGhpcy5fZmlyZWZveCYmKHRoaXMuJC5pdGVtcy5zdHlsZS5wYWRkaW5nQm90dG9tPTAsdGhpcy5oZWlnaHRCeVJvd3N8fCh0aGlzLiQuaXRlbXMuc3R5bGUucGFkZGluZ0JvdHRvbT1gJHt0aGlzLiQuZm9vdGVyLm9mZnNldEhlaWdodH1weGApKSx0aGlzLl9pb3MmJiF3aW5kb3cuQ1NTLnN1cHBvcnRzKCJwb3NpdGlvbiIsInN0aWNreSIpJiYodGhpcy4kLnRhYmxlLnN0eWxlLmhlaWdodD0iIix0aGlzLiQudGFibGUuc3R5bGUubWluSGVpZ2h0PSIxMDAlIix0aGlzLiQudGFibGUuc3R5bGUubWF4SGVpZ2h0PSIxMDAlIixzZXRUaW1lb3V0KCgpPT50aGlzLiQudGFibGUuc3R5bGUuaGVpZ2h0PWAke3RoaXMuJC5zY3JvbGxlci5vZmZzZXRIZWlnaHR9cHhgKSl9X3VwZGF0ZUl0ZW0odCxyKXt0Ll9pdGVtPXI7bGV0IG49dGhpcy5fX2dldFJvd01vZGVsKHQpO3RoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgic2VsZWN0ZWQiLG4uc2VsZWN0ZWQsdCksdGhpcy5fYTExeVVwZGF0ZVJvd1NlbGVjdGVkKHQsbi5zZWxlY3RlZCksdGhpcy5fYTExeVVwZGF0ZVJvd0xldmVsKHQsbi5sZXZlbCksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJleHBhbmRlZCIsbi5leHBhbmRlZCx0KSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImRldGFpbHMtb3BlbmVkIix0aGlzLl9pc0RldGFpbHNPcGVuZWQociksdCksKHRoaXMuX3Jvd0RldGFpbHNUZW1wbGF0ZXx8dGhpcy5yb3dEZXRhaWxzUmVuZGVyZXIpJiZ0aGlzLl90b2dnbGVEZXRhaWxzQ2VsbCh0LHIpLHRoaXMuX2dlbmVyYXRlQ2VsbENsYXNzTmFtZXModCxuKSx0aGlzLl9maWx0ZXJEcmFnQW5kRHJvcCh0LG4pLEFycmF5LmZyb20odC5jaGlsZHJlbikuZm9yRWFjaChpPT57aWYoaS5fcmVuZGVyZXIpe2xldCBvPWkuX2NvbHVtbnx8dGhpcztpLl9yZW5kZXJlci5jYWxsKG8saS5fY29udGVudCxvLG4pfWVsc2UgaS5faW5zdGFuY2UmJihpLl9pbnN0YW5jZS5fX2RldGFpbHNPcGVuZWRfXz1uLmRldGFpbHNPcGVuZWQsaS5faW5zdGFuY2UuX19zZWxlY3RlZF9fPW4uc2VsZWN0ZWQsaS5faW5zdGFuY2UuX19sZXZlbF9fPW4ubGV2ZWwsaS5faW5zdGFuY2UuX19leHBhbmRlZF9fPW4uZXhwYW5kZWQsaS5faW5zdGFuY2Uuc2V0UHJvcGVydGllcyhuKSl9KSx0aGlzLl9kZWJvdW5jZXJVcGRhdGVIZWlnaHRzPXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlclVwZGF0ZUhlaWdodHMsbW8uYWZ0ZXIoMSksKCk9Pnt0aGlzLl91cGRhdGVNZXRyaWNzKCksdGhpcy5fcG9zaXRpb25JdGVtcygpLHRoaXMuX3VwZGF0ZVNjcm9sbGVyU2l6ZSgpfSl9X3Jlc2l6ZUhhbmRsZXIoKXt0aGlzLl91cGRhdGVEZXRhaWxzQ2VsbEhlaWdodHMoKSx0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSShzdXBlci5fcmVzaXplSGFuZGxlciwhMCksdGhpcy5fdXBkYXRlU2Nyb2xsZXJNZWFzdXJlbWVudHMoKSx0aGlzLl9fdXBkYXRlRm9vdGVyUG9zaXRpb25pbmcoKX1fb25BbmltYXRpb25FbmQodCl7dC5hbmltYXRpb25OYW1lLmluZGV4T2YoInZhYWRpbi1ncmlkLWFwcGVhciIpPT09MCYmKHRoaXMuX3JlbmRlcigpLHQuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5ub3RpZnlSZXNpemUoKSx0aGlzLl9faXRlbXNSZWNlaXZlZCgpLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuX19zY3JvbGxUb1BlbmRpbmdJbmRleCgpLHRoaXMuJC50YWJsZS5zdHlsZS53ZWJraXRPdmVyZmxvd1Njcm9sbGluZz0idG91Y2gifSkpfV90b2dnbGVBdHRyaWJ1dGUodCxyLG4pe24uaGFzQXR0cmlidXRlKHQpPT09IXImJihyP24uc2V0QXR0cmlidXRlKHQsIiIpOm4ucmVtb3ZlQXR0cmlidXRlKHQpKX1fX2dldFJvd01vZGVsKHQpe3JldHVybntpbmRleDp0LmluZGV4LGl0ZW06dC5faXRlbSxsZXZlbDp0aGlzLl9nZXRJbmRleExldmVsKHQuaW5kZXgpLGV4cGFuZGVkOnRoaXMuX2lzRXhwYW5kZWQodC5faXRlbSksc2VsZWN0ZWQ6dGhpcy5faXNTZWxlY3RlZCh0Ll9pdGVtKSxkZXRhaWxzT3BlbmVkOiEhKHRoaXMuX3Jvd0RldGFpbHNUZW1wbGF0ZXx8dGhpcy5yb3dEZXRhaWxzUmVuZGVyZXIpJiZ0aGlzLl9pc0RldGFpbHNPcGVuZWQodC5faXRlbSl9fXJlbmRlcigpe3RoaXMuX2NvbHVtblRyZWUmJih0aGlzLl9jb2x1bW5UcmVlLmZvckVhY2godD0+e3QuZm9yRWFjaChyPT5yLl9yZW5kZXJIZWFkZXJBbmRGb290ZXIoKSl9KSx0aGlzLl91cGRhdGUoKSl9bm90aWZ5UmVzaXplKCl7c3VwZXIubm90aWZ5UmVzaXplKCl9X2hlaWdodEJ5Um93c0NoYW5nZWQodCxyKXsodHx8cikmJnRoaXMubm90aWZ5UmVzaXplKCl9X19mb3JjZVJlZmxvdygpe3RoaXMuX2RlYm91bmNlckZvcmNlUmVmbG93PXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlckZvcmNlUmVmbG93LE5pLCgpPT57dGhpcy4kLnNjcm9sbGVyLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iLHNldFRpbWVvdXQoKCk9PnRoaXMuJC5zY3JvbGxlci5zdHlsZS5vdmVyZmxvdz0iIil9KX19O2N1c3RvbUVsZW1lbnRzLmRlZmluZShyVi5pcyxyVik7ZnVuY3Rpb24gZnVlKGUsdCl7cmV0dXJuIEJndChlLHQpfXZhciB1MT1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9ydW49IiJ9X2NzdlVybCh0LHIsbil7cmV0dXJuIHI/TWkobih0LHIpLHtmb3JtYXQ6ImNzdiJ9KToiIn1fanNvblVybCh0LHIsbil7cmV0dXJuIHI/bih0LHIpOiIifV9jc3ZOYW1lKHQscil7cmV0dXJuIHI/YHJ1bi0ke3J9LXRhZy0ke3R9LmNzdmA6IiJ9X2pzb25OYW1lKHQscil7cmV0dXJuIHI/YHJ1bi0ke3J9LXRhZy0ke3R9Lmpzb25gOiIifX07dTEudGVtcGxhdGU9UWAKICAgIDxwYXBlci1kcm9wZG93bi1tZW51CiAgICAgIG5vLWxhYmVsLWZsb2F0PSJ0cnVlIgogICAgICBsYWJlbD0icnVuIHRvIGRvd25sb2FkIgogICAgICBzZWxlY3RlZC1pdGVtLWxhYmVsPSJ7e19ydW59fSIKICAgID4KICAgICAgPHBhcGVyLWxpc3Rib3ggc2xvdD0iZHJvcGRvd24tY29udGVudCI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tydW5zXV0iPgogICAgICAgICAgPHBhcGVyLWl0ZW0gbm8tbGFiZWwtZmxvYXQ9InRydWUiPltbaXRlbV1dPC9wYXBlci1pdGVtPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfcnVuXV0iPgogICAgICA8YSBkb3dubG9hZD0iW1tfY3N2TmFtZSh0YWcsIF9ydW4pXV0iIGhyZWY9IltbX2NzdlVybCh0YWcsIF9ydW4sIHVybEZuKV1dIgogICAgICAgID5DU1Y8L2EKICAgICAgPjwhLS0KICAgICAgLS0+PGEKICAgICAgICBkb3dubG9hZD0iW1tfanNvbk5hbWUodGFnLCBfcnVuKV1dIgogICAgICAgIGhyZWY9IltbX2pzb25VcmwodGFnLCBfcnVuLCB1cmxGbildXSIKICAgICAgICA+SlNPTjwvYQogICAgICA+CiAgICA8L3RlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgfQogICAgICBwYXBlci1kcm9wZG93bi1tZW51IHsKICAgICAgICB3aWR0aDogMTAwcHg7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWw6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICB9CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICB9CiAgICAgIH0KICAgICAgYSB7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIG1hcmdpbjogMCAwLjJlbTsKICAgICAgfQogICAgICBwYXBlci1pbnB1dCB7CiAgICAgICAgZm9udC1zaXplOiAyMnB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sdTEucHJvdG90eXBlLCJfcnVuIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSx1MS5wcm90b3R5cGUsInJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sdTEucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdTEucHJvdG90eXBlLCJ1cmxGbiIsdm9pZCAwKTt1MT1FKFt5dCgidGYtZG93bmxvYWRlciIpXSx1MSk7dmFyIGhocj02NCxFbGk9bmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKSxXbj1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvbG9yU2NhbGU9bnVsbCx0aGlzLl9sb2FkRGF0YUNhbGxiYWNrPSh0LHIsbik9PntpZihuPT1udWxsKXtjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gbG9hZCBkYXRhIGZvcjoiLHIpO3JldHVybn1sZXQgaT1uLm1hcChhPT4oe3dhbGxfdGltZTpuZXcgRGF0ZShhWzBdKjFlMyksc3RlcDphWzFdLHNjYWxhcjphWzJdfSkpLG89dGhpcy5fZ2V0U2VyaWVzTmFtZUZyb21EYXR1bShyKTt0LnNldFNlcmllc01ldGFkYXRhKG8sciksdC5zZXRTZXJpZXNEYXRhKG8saSl9LHRoaXMuZ2V0RGF0YUxvYWRVcmw9KHt0YWc6dCxydW46cn0pPT5fZSgpLnBsdWdpblJvdXRlRm9yU3JjKCJzY2FsYXJzIiwiL3NjYWxhcnMiLG5ldyBVUkxTZWFyY2hQYXJhbXMoe3RhZzp0LHJ1bjpyfSkpLHRoaXMuX2Rvd25sb2FkVXJsRm49KHQscik9PnRoaXMuZ2V0RGF0YUxvYWRVcmwoe3RhZzp0LHJ1bjpyfSksdGhpcy5yZXF1ZXN0RGF0YT0odCxyLG4pPT50aGlzLmluQ29sYWI/dGhpcy5fcmVxdWVzdERhdGFHZXQodCxyLG4pOnRoaXMuX3JlcXVlc3REYXRhUG9zdCh0LHIsbiksdGhpcy5fcmVxdWVzdERhdGFHZXQ9KHQscixuKT0+e2xldCBvPV9lKCkucGx1Z2luUm91dGUoInNjYWxhcnMiLCIvc2NhbGFycyIpO1Byb21pc2UuYWxsKHQubWFwKGE9PntsZXQgcz1NaShvLHt0YWc6YS50YWcscnVuOmEucnVufSk7cmV0dXJuIHRoaXMucmVxdWVzdE1hbmFnZXIucmVxdWVzdChzKS50aGVuKGw9PnZvaWQgcih7aXRlbTphLGRhdGE6bH0pKX0pKS5maW5hbGx5KCgpPT52b2lkIG4oKSl9LHRoaXMuX3JlcXVlc3REYXRhUG9zdD0odCxyLG4pPT57dmFyIGM7bGV0IG89X2UoKS5wbHVnaW5Sb3V0ZSgic2NhbGFycyIsIi9zY2FsYXJzX211bHRpcnVuIiksYT1uZXcgTWFwO2ZvcihsZXR7dGFnOnUscnVuOmh9b2YgdCl7bGV0IGY9YS5nZXQodSk7Zj09bnVsbCYmYS5zZXQodSxmPVtdKSxmLnB1c2goaCl9bGV0IHM9KGM9dGhpcy5iYXRjaFNpemUpIT1udWxsP2M6aGhyLGw9W107Zm9yKGxldFt1LGhdb2YgYSlmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrPXMpbC5wdXNoKHt0YWc6dSxydW5zOmguc2xpY2UoZixmK3MpfSk7UHJvbWlzZS5hbGwobC5tYXAoKHt0YWc6dSxydW5zOmh9KT0+dGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KG8se3RhZzp1LHJ1bnM6aH0pLnRoZW4oZj0+e2ZvcihsZXQgcCBvZiBoKXtsZXQgZD17dGFnOnUscnVuOnB9O09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChmLHApP3Ioe2l0ZW06ZCxkYXRhOmZbcF19KTpyKHtpdGVtOmQsZGF0YTpudWxsfSl9fSkpKS5maW5hbGx5KCgpPT52b2lkIG4oKSl9LHRoaXMuX2dldERhdGFMb2FkTmFtZT10PT50aGlzLl9nZXRTZXJpZXNOYW1lRnJvbURhdHVtKHQpLHRoaXMuX2V4cGFuZGVkPSExLHRoaXMuX3Rvb2x0aXBDb2x1bW5zPSgoKT0+e2xldCB0PWlzdC5zbGljZSgpLHI9dC5maW5kSW5kZXgobj0+bi50aXRsZT09Ik5hbWUiKTtyZXR1cm4gdC5zcGxpY2UociwxLHt0aXRsZToiTmFtZSIsZXZhbHVhdGU6bj0+e2xldCBpPW4uZGF0YXNldC5tZXRhZGF0YSgpLm1ldGE7cmV0dXJuIHRoaXMuX2dldFNlcmllc0Rpc3BsYXlOYW1lRnJvbURhdHVtKGkpfX0pLHR9KSgpfV9nZXRDaGFydERhdGFMb2FkZXIoKXt2YXIgdDtyZXR1cm4odD10aGlzLnNoYWRvd1Jvb3QpPT1udWxsP3ZvaWQgMDp0LnF1ZXJ5U2VsZWN0b3IoInRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIiKX1yZWxvYWQoKXt0aGlzLl9nZXRDaGFydERhdGFMb2FkZXIoKS5yZWxvYWQoKX1yZWRyYXcoKXt0aGlzLl9nZXRDaGFydERhdGFMb2FkZXIoKS5yZWRyYXcoKX1fdG9nZ2xlRXhwYW5kZWQodCl7dGhpcy5zZXQoIl9leHBhbmRlZCIsIXRoaXMuX2V4cGFuZGVkKSx0aGlzLnJlZHJhdygpfV90b2dnbGVMb2dTY2FsZSgpe3RoaXMuc2V0KCJfbG9nU2NhbGVBY3RpdmUiLCF0aGlzLl9sb2dTY2FsZUFjdGl2ZSl9X3Jlc2V0RG9tYWluKCl7bGV0IHQ9dGhpcy5fZ2V0Q2hhcnREYXRhTG9hZGVyKCk7dCYmdC5yZXNldERvbWFpbigpfV91cGRhdGVEb3dubG9hZExpbmsoKXt2YXIgbjtsZXQgdD10aGlzLl9nZXRDaGFydERhdGFMb2FkZXIoKS5leHBvcnRBc1N2Z1N0cmluZygpLHI9KG49dGhpcy5zaGFkb3dSb290KT09bnVsbD92b2lkIDA6bi5xdWVyeVNlbGVjdG9yKCIjc3ZnTGluayIpO3IuaHJlZj1gZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCwke2J0b2EodCl9YH1fcnVuc0Zyb21EYXRhKHQpe3JldHVybiB0Lm1hcChyPT5yLnJ1bil9X2dldERhdGFTZXJpZXMoKXtyZXR1cm4gdGhpcy5kYXRhVG9Mb2FkLm1hcCh0PT50aGlzLl9nZXRTZXJpZXNOYW1lRnJvbURhdHVtKHQpKX1fZ2V0U2VyaWVzTmFtZUZyb21EYXR1bSh7cnVuOnQsZXhwZXJpbWVudDpyPXtuYW1lOiJfZGVmYXVsdCJ9fSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KFtyLm5hbWUsdF0pfV9nZXRTZXJpZXNEaXNwbGF5TmFtZUZyb21EYXR1bSh0KXtyZXR1cm4gdC5ydW59X2dldENvbG9yU2NhbGUoKXtyZXR1cm4gdGhpcy5jb2xvclNjYWxlIT09bnVsbD90aGlzLmNvbG9yU2NhbGU6e3NjYWxlOnQ9PntsZXRbLHJdPUpTT04ucGFyc2UodCk7cmV0dXJuIGZuKHIpfX19fTtXbi50ZW1wbGF0ZT1RYAogICAgPHRmLWNhcmQtaGVhZGluZwogICAgICB0YWc9IltbdGFnXV0iCiAgICAgIGRpc3BsYXktbmFtZT0iW1t0YWdNZXRhZGF0YS5kaXNwbGF5TmFtZV1dIgogICAgICBkZXNjcmlwdGlvbj0iW1t0YWdNZXRhZGF0YS5kZXNjcmlwdGlvbl1dIgogICAgPjwvdGYtY2FyZC1oZWFkaW5nPgogICAgPGRpdiBpZD0idGYtbGluZS1jaGFydC1kYXRhLWxvYWRlci1jb250YWluZXIiPgogICAgICA8dGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcgogICAgICAgIGFjdGl2ZT0iW1thY3RpdmVdXSIKICAgICAgICBjb2xvci1zY2FsZT0iW1tfZ2V0Q29sb3JTY2FsZShjb2xvclNjYWxlKV1dIgogICAgICAgIGRhdGEtc2VyaWVzPSJbW19nZXREYXRhU2VyaWVzKGRhdGFUb0xvYWQuKildXSIKICAgICAgICBkYXRhLXRvLWxvYWQ9IltbZGF0YVRvTG9hZF1dIgogICAgICAgIGdldC1kYXRhLWxvYWQtbmFtZT0iW1tfZ2V0RGF0YUxvYWROYW1lXV0iCiAgICAgICAgZ2V0LWRhdGEtbG9hZC11cmw9IltbZ2V0RGF0YUxvYWRVcmxdXSIKICAgICAgICByZXF1ZXN0LWRhdGE9IltbcmVxdWVzdERhdGFdXSIKICAgICAgICBpZ25vcmUteS1vdXRsaWVycz0iW1tpZ25vcmVZT3V0bGllcnNdXSIKICAgICAgICBsb2FkLWRhdGEtY2FsbGJhY2s9IltbX2xvYWREYXRhQ2FsbGJhY2tdXSIKICAgICAgICBsb2FkLWtleT0iW1t0YWddXSIKICAgICAgICBsb2ctc2NhbGUtYWN0aXZlPSJbW19sb2dTY2FsZUFjdGl2ZV1dIgogICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tyZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgIHNtb290aGluZy1lbmFibGVkPSJbW3Ntb290aGluZ0VuYWJsZWRdXSIKICAgICAgICBzbW9vdGhpbmctd2VpZ2h0PSJbW3Ntb290aGluZ1dlaWdodF1dIgogICAgICAgIHRhZy1tZXRhZGF0YT0iW1t0YWdNZXRhZGF0YV1dIgogICAgICAgIHRvb2x0aXAtY29sdW1ucz0iW1tfdG9vbHRpcENvbHVtbnNdXSIKICAgICAgICB0b29sdGlwLXBvc2l0aW9uPSJhdXRvIgogICAgICAgIHRvb2x0aXAtc29ydGluZy1tZXRob2Q9IltbdG9vbHRpcFNvcnRpbmdNZXRob2RdXSIKICAgICAgICB4LXR5cGU9IltbeFR5cGVdXSIKICAgICAgPgogICAgICA8L3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXI+CiAgICA8L2Rpdj4KICAgIDxkaXYgaWQ9ImJ1dHRvbnMiPgogICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICBzZWxlY3RlZCQ9IltbX2V4cGFuZGVkXV0iCiAgICAgICAgaWNvbj0iZnVsbHNjcmVlbiIKICAgICAgICBvbi10YXA9Il90b2dnbGVFeHBhbmRlZCIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfbG9nU2NhbGVBY3RpdmVdXSIKICAgICAgICBpY29uPSJsaW5lLXdlaWdodCIKICAgICAgICBvbi10YXA9Il90b2dnbGVMb2dTY2FsZSIKICAgICAgICB0aXRsZT0iVG9nZ2xlIHktYXhpcyBsb2cgc2NhbGUiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICBpY29uPSJzZXR0aW5ncy1vdmVyc2NhbiIKICAgICAgICBvbi10YXA9Il9yZXNldERvbWFpbiIKICAgICAgICB0aXRsZT0iRml0IGRvbWFpbiB0byBkYXRhIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3Nob3dEb3dubG9hZExpbmtzXV0iPgogICAgICAgIDxwYXBlci1tZW51LWJ1dHRvbiBvbi1wYXBlci1kcm9wZG93bi1vcGVuPSJfdXBkYXRlRG93bmxvYWRMaW5rIj4KICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tdHJpZ2dlciIKICAgICAgICAgICAgc2xvdD0iZHJvcGRvd24tdHJpZ2dlciIKICAgICAgICAgICAgaWNvbj0iZmlsZS1kb3dubG9hZCIKICAgICAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgPHBhcGVyLWxpc3Rib3ggY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiPgogICAgICAgICAgICA8cGFwZXItaXRlbT4KICAgICAgICAgICAgICA8YSBpZD0ic3ZnTGluayIgZG93bmxvYWQ9IltbdGFnXV0uc3ZnIj4KICAgICAgICAgICAgICAgIERvd25sb2FkIEN1cnJlbnQgQ2hhcnQgYXMgU1ZHCiAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8L3BhcGVyLWl0ZW0+CiAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgPC9wYXBlci1tZW51LWJ1dHRvbj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHNwYW4gc3R5bGU9ImZsZXgtZ3JvdzogMSI+PC9zcGFuPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc2hvd0Rvd25sb2FkTGlua3NdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZG93bmxvYWQtbGlua3MiPgogICAgICAgICAgPHRmLWRvd25sb2FkZXIKICAgICAgICAgICAgcnVucz0iW1tfcnVuc0Zyb21EYXRhKGRhdGFUb0xvYWQpXV0iCiAgICAgICAgICAgIHRhZz0iW1t0YWddXSIKICAgICAgICAgICAgdXJsLWZuPSJbW19kb3dubG9hZFVybEZuXV0iCiAgICAgICAgICA+PC90Zi1kb3dubG9hZGVyPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBtYXJnaW46IDVweDsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMzMwcHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtfZXhwYW5kZWRdKSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtfZXhwYW5kZWRdKSAjdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlci1jb250YWluZXIgewogICAgICAgIGhlaWdodDogNDAwcHg7CiAgICAgIH0KCiAgICAgICN0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciB7CiAgICAgICAgaGVpZ2h0OiAyMDBweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgdGYtY2FyZC1oZWFkaW5nIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OwogICAgICB9CgogICAgICAjYnV0dG9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbiB7CiAgICAgICAgY29sb3I6ICMyMTk2ZjM7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbltzZWxlY3RlZF0gewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRiLXVpLWxpZ2h0LWFjY2VudCk7CiAgICAgIH0KCiAgICAgIC5kb3dubG9hZC1saW5rcyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgIH0KCiAgICAgIC5kb3dubG9hZC1saW5rcyBhIHsKICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIG1hcmdpbjogMnB4OwogICAgICB9CgogICAgICAuZG93bmxvYWQtbGlua3MgcGFwZXItZHJvcGRvd24tbWVudSB7CiAgICAgICAgd2lkdGg6IDEwMHB4OwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsOiB7CiAgICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgfQogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0OiB7CiAgICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgfQogICAgICB9CgogICAgICBwYXBlci1tZW51LWJ1dHRvbiB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQogICAgICBwYXBlci1pdGVtIGEgewogICAgICAgIGNvbG9yOiBpbmhlcml0OwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sV24ucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLFduLnByb3RvdHlwZSwiZGF0YVRvTG9hZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxXbi5wcm90b3R5cGUsInhUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sV24ucHJvdG90eXBlLCJhY3RpdmUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxXbi5wcm90b3R5cGUsImlnbm9yZVlPdXRsaWVycyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLFduLnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxXbi5wcm90b3R5cGUsInNob3dEb3duTGlua3MiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxXbi5wcm90b3R5cGUsInNtb290aGluZ0VuYWJsZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sV24ucHJvdG90eXBlLCJzbW9vdGhpbmdXZWlnaHQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sV24ucHJvdG90eXBlLCJ0YWdNZXRhZGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxXbi5wcm90b3R5cGUsImNvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sV24ucHJvdG90eXBlLCJ0b29sdGlwU29ydGluZ01ldGhvZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxXbi5wcm90b3R5cGUsImJhdGNoU2l6ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sV24ucHJvdG90eXBlLCJpbkNvbGFiIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFduLnByb3RvdHlwZSwiX2xvYWREYXRhQ2FsbGJhY2siLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxXbi5wcm90b3R5cGUsImdldERhdGFMb2FkVXJsIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFduLnByb3RvdHlwZSwiX2Rvd25sb2FkVXJsRm4iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxXbi5wcm90b3R5cGUsInJlcXVlc3REYXRhIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFduLnByb3RvdHlwZSwiX2dldERhdGFMb2FkTmFtZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxXbi5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFduLnByb3RvdHlwZSwiX2xvZ1NjYWxlQWN0aXZlIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxXbi5wcm90b3R5cGUsIl90b29sdGlwQ29sdW1ucyIsdm9pZCAwKTtXbj1FKFt5dCgidGYtc2NhbGFyLWNhcmQiKV0sV24pO3ZhciBVcz1jbGFzcyBleHRlbmRzIGZ1ZShbY1ddLG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5zZXNzaW9uR3JvdXA9bnVsbCx0aGlzLl94VHlwZT1UZC5TVEVQLHRoaXMuX25vTXVsdGlFeHBlcmltZW50cz0hMSx0aGlzLl9yZXF1ZXN0RGF0YT0odCxyLG4pPT57UHJvbWlzZS5hbGwodC5tYXAoaT0+e2xldCBvPXtleHBlcmltZW50TmFtZTp0aGlzLmV4cGVyaW1lbnROYW1lLHNlc3Npb25OYW1lOmkucnVuLG1ldHJpY05hbWU6aS50YWd9O3JldHVybiB0aGlzLmJhY2tlbmQubGlzdE1ldHJpY0V2YWxzKG8pLnRoZW4oYT0+dm9pZCByKHtpdGVtOmksZGF0YTphfSkpfSkpLmZpbmFsbHkoKCk9PnZvaWQgbigpKX0sdGhpcy5fY29sb3JTY2FsZT17c2NhbGU6dD0+e2xldCByPUpTT04ucGFyc2UodClbMV0sbj10aGlzLl9pbmRleE9mU2Vzc2lvbi5nZXQociksaT1pUjtyZXR1cm4gaVsodGhpcy5fc2Vzc2lvbkdyb3VwTmFtZUhhc2grbiklaS5sZW5ndGhdfX19Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiaXJvbi1yZXNpemUiLHRoaXMucmVkcmF3LmJpbmQodGhpcykpfXJlZHJhdygpe3ZhciB0Oyh0PXRoaXMuc2hhZG93Um9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtc2NhbGFyLWNhcmQiKS5mb3JFYWNoKHI9PntyLnJlZHJhdygpfSl9X3Nlc3Npb25Hcm91cENoYW5nZWQoKXt2YXIgdDshdGhpcy5zZXNzaW9uR3JvdXB8fE9iamVjdC5rZXlzKHRoaXMuc2Vzc2lvbkdyb3VwKS5sZW5ndGg9PTA/KHRoaXMuX2luZGV4T2ZTZXNzaW9uPW5ldyBNYXAsdGhpcy5fc2Vzc2lvbkdyb3VwTmFtZUhhc2g9MCk6KHRoaXMuX2luZGV4T2ZTZXNzaW9uPW5ldyBNYXAodGhpcy5zZXNzaW9uR3JvdXAuc2Vzc2lvbnMubWFwKChyLG4pPT5bci5uYW1lLG5dKSksdGhpcy5fc2Vzc2lvbkdyb3VwTmFtZUhhc2g9ZGN0KHRoaXMuc2Vzc2lvbkdyb3VwLm5hbWUpKSwodD10aGlzLnNoYWRvd1Jvb3QpPT1udWxsfHx0LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLXNjYWxhci1jYXJkIikuZm9yRWFjaChyPT57bGV0IG49cixpPW4uZ2V0KCJ0YWciKTtuLnNldCgidGFnIiwiIiksbi5zZXQoInRhZyIsaSl9KX1faGF2ZU1ldHJpY3MoKXtyZXR1cm4gdGhpcy52aXNpYmxlU2NoZW1hJiZBcnJheS5pc0FycmF5KHRoaXMudmlzaWJsZVNjaGVtYS5tZXRyaWNJbmZvcykmJnRoaXMudmlzaWJsZVNjaGVtYS5tZXRyaWNJbmZvcy5sZW5ndGg+MH1faGF2ZU1ldHJpY3NBbmRTZXNzaW9uR3JvdXAoKXtyZXR1cm4gdGhpcy5zZXNzaW9uR3JvdXAmJnRoaXMuX2hhdmVNZXRyaWNzKCl9X2NvbXB1dGVTZXJpZXNGb3JTZXNzaW9uR3JvdXBNZXRyaWModCxyKXtyZXR1cm4gdD09PW51bGx8fE9iamVjdC5rZXlzKHQpLmxlbmd0aD09MHx8cj09PW51bGw/W106dC5zZXNzaW9ucy5maWx0ZXIobj0+ZjMobi5tZXRyaWNWYWx1ZXMsci5uYW1lKSE9PXZvaWQgMCkubWFwKG49Pih7dGFnOnIubmFtZSxydW46bi5uYW1lfSkpfV9jb21wdXRlVGFnTWV0YWRhdGEodCl7cmV0dXJue2Rpc3BsYXlOYW1lOlF1KHQpLGRlc2NyaXB0aW9uOnQuZGVzY3JpcHRpb258fCIifX19O1VzLnRlbXBsYXRlPVFgCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIXNlc3Npb25Hcm91cF1dIj4KICAgICAgPGRpdj4KICAgICAgICA8aDM+Tm8gc2Vzc2lvbiBncm91cCBzZWxlY3RlZDwvaDM+CiAgICAgICAgPHA+UGxlYXNlIHNlbGVjdCBhIHNlc3Npb24gZ3JvdXAgdG8gc2VlIGl0cyBtZXRyaWMtZ3JhcGhzIGhlcmUuPC9wPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9oYXZlTWV0cmljcyh2aXNpYmxlU2NoZW1hLiopXV0iPgogICAgICA8ZGl2PgogICAgICAgIDxoMz5ObyBtZXRyaWNzIGFyZSBlbmFibGVkPC9oMz4KICAgICAgICA8cD5QbGVhc2UgZW5hYmxlIHNvbWUgbWV0cmljcyB0byBzZWUgY29udGVudCBoZXJlLjwvcD4KICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgogICAgPGRpdiBjbGFzcz0ibGF5b3V0IGhvcml6b250YWwgd3JhcCBzZXNzaW9uLWdyb3VwLWRldGFpbHMiPgogICAgICA8dGVtcGxhdGUKICAgICAgICBpcz0iZG9tLWlmIgogICAgICAgIGlmPSJbW19oYXZlTWV0cmljc0FuZFNlc3Npb25Hcm91cCh2aXNpYmxlU2NoZW1hLiosIHNlc3Npb25Hcm91cCldXSIKICAgICAgPgogICAgICAgIDx0ZW1wbGF0ZQogICAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgICBpdGVtcz0iW1t2aXNpYmxlU2NoZW1hLm1ldHJpY0luZm9zXV0iCiAgICAgICAgICBhcz0ibWV0cmljSW5mbyIKICAgICAgICA+CiAgICAgICAgICA8IS0tIE5vdGUgdGhhdCB3ZSBkbyBub3QgcHJvdmlkZSBhIHJlcXVlc3QtbWFuYWdlciBhdHRyaWJ1dGUgc2luY2UKICAgICAgICAgICAgICAgd2UgcHJvdmlkZSBhIGZ1bmN0aW9uIGluIHJlcXVlc3QtZGF0YSBmb3IgY2FsbGluZyB0aGUgYmFja2VuZAogICAgICAgICAgICAgICB0byBnZXQgdGhlIG1ldHJpY3MgZGF0YS4KICAgICAgICAgICAgLS0+CiAgICAgICAgICA8dGYtc2NhbGFyLWNhcmQKICAgICAgICAgICAgY2xhc3M9InNjYWxhci1jYXJkIgogICAgICAgICAgICBjb2xvci1zY2FsZT0iW1tfY29sb3JTY2FsZV1dIgogICAgICAgICAgICBkYXRhLXRvLWxvYWQ9IltbX2NvbXB1dGVTZXJpZXNGb3JTZXNzaW9uR3JvdXBNZXRyaWMoc2Vzc2lvbkdyb3VwLCBtZXRyaWNJbmZvKV1dIgogICAgICAgICAgICB0YWc9IltbbWV0cmljSW5mby5uYW1lLnRhZ11dIgogICAgICAgICAgICB0YWctbWV0YWRhdGE9IltbX2NvbXB1dGVUYWdNZXRhZGF0YShtZXRyaWNJbmZvKV1dIgogICAgICAgICAgICB4LXR5cGU9IltbX3hUeXBlXV0iCiAgICAgICAgICAgIG11bHRpLWV4cGVyaW1lbnRzPSJbW19ub011bHRpRXhwZXJpbWVudHNdXSIKICAgICAgICAgICAgcmVxdWVzdC1kYXRhPSJbW19yZXF1ZXN0RGF0YV1dIgogICAgICAgICAgICBhY3RpdmUKICAgICAgICAgID4KICAgICAgICAgIDwvdGYtc2NhbGFyLWNhcmQ+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvZGl2PgogICAgPCEtLSAiaXJvbi1mbGV4IiBpcyBuZWVkZWQgdG8gdXNlIHRoZSBsYXlvdXQgY2xhc3NlcyBpbiB0aGUgZGl2IGFib3ZlIC0tPgogICAgPHN0eWxlIGluY2x1ZGU9Imlyb24tZmxleCI+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFVzLnByb3RvdHlwZSwiYmFja2VuZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxVcy5wcm90b3R5cGUsImV4cGVyaW1lbnROYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFVzLnByb3RvdHlwZSwidmlzaWJsZVNjaGVtYSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxVcy5wcm90b3R5cGUsInNlc3Npb25Hcm91cCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxVcy5wcm90b3R5cGUsIl94VHlwZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFVzLnByb3RvdHlwZSwiX25vTXVsdGlFeHBlcmltZW50cyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxVcy5wcm90b3R5cGUsIl9pbmRleE9mU2Vzc2lvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxVcy5wcm90b3R5cGUsIl9zZXNzaW9uR3JvdXBOYW1lSGFzaCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLFVzLnByb3RvdHlwZSwiX3JlcXVlc3REYXRhIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFVzLnByb3RvdHlwZSwiX2NvbG9yU2NhbGUiLHZvaWQgMCk7RShbQnQoInNlc3Npb25Hcm91cC4qIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxVcy5wcm90b3R5cGUsIl9zZXNzaW9uR3JvdXBDaGFuZ2VkIixudWxsKTtVcz1FKFt5dCgidGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHMiKV0sVXMpO3ZhciBWZD1jbGFzcyBleHRlbmRzIEd0KF9vKG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2hwYXJhbU5hbWU9QmQsdGhpcy5fbWV0cmljTmFtZT1RdX1fdmlzaWJsZVNjaGVtYU9yU2Vzc2lvbkdyb3Vwc0NoYW5nZWQoKXtsZXQgdD10aGlzLiQuc2Vzc2lvbkdyb3Vwc1RhYmxlLmdldCgiZGV0YWlsc09wZW5lZEl0ZW1zIik7dGhpcy4kLnNlc3Npb25Hcm91cHNUYWJsZS5zZXQoImRldGFpbHNPcGVuZWRJdGVtcyIsW10pLGNpKCk7bGV0IHI9bmV3IE1hcDt0aGlzLnNlc3Npb25Hcm91cHMuZm9yRWFjaChuPT57ci5zZXQobi5uYW1lLG4pfSksdGhpcy4kLnNlc3Npb25Hcm91cHNUYWJsZS5zZXQoImRldGFpbHNPcGVuZWRJdGVtcyIsdC5tYXAobj0+ci5nZXQobi5uYW1lKSkuZmlsdGVyKEJvb2xlYW4pKX1fc2Vzc2lvbkdyb3VwSFBhcmFtKHQscil7cmV0dXJuIHQ9PW51bGx8fE9iamVjdC5rZXlzKHQpLmxlbmd0aD09MHx8IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LmhwYXJhbXMscik/IiI6dzAodC5ocGFyYW1zW3JdKX1fc2Vzc2lvbkdyb3VwTWV0cmljKHQscil7aWYodD09bnVsbHx8T2JqZWN0LmtleXModCkubGVuZ3RoPT0wKXJldHVybiIiO2ZvcihsZXQgbj0wO248dC5tZXRyaWNWYWx1ZXMubGVuZ3RoOysrbil7bGV0IGk9dC5tZXRyaWNWYWx1ZXNbbl07aWYoaS5uYW1lLmdyb3VwPT09ci5ncm91cCYmaS5uYW1lLnRhZz09ci50YWcpcmV0dXJuIHcwKGkudmFsdWUpfXJldHVybiIifV9yb3dOdW1iZXIodCl7cmV0dXJuIHQrMX19O1ZkLnRlbXBsYXRlPVFgCiAgICA8dmFhZGluLWdyaWQKICAgICAgY2xhc3M9InNlc3Npb24tZ3JvdXAtdGFibGUiCiAgICAgIGlkPSJzZXNzaW9uR3JvdXBzVGFibGUiCiAgICAgIGNvbHVtbi1yZW9yZGVyaW5nLWFsbG93ZWQ9IiIKICAgICAgaXRlbXM9Iltbc2Vzc2lvbkdyb3Vwc11dIgogICAgPgogICAgICA8dmFhZGluLWdyaWQtY29sdW1uIGZsZXgtZ3Jvdz0iMCIgd2lkdGg9IjEwZW0iIHJlc2l6YWJsZT0iIj4KICAgICAgICA8dGVtcGxhdGUgY2xhc3M9ImhlYWRlciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1oZWFkZXIgdGFibGUtY2VsbCI+VHJpYWwgSUQ8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlLWNlbGwiPltbaXRlbS5uYW1lXV08L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L3ZhYWRpbi1ncmlkLWNvbHVtbj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2VuYWJsZVNob3dNZXRyaWNzXV0iPgogICAgICAgIDx2YWFkaW4tZ3JpZC1jb2x1bW4gZmxleC1ncm93PSIwIiBhdXRvV2lkdGg9IiIgcmVzaXphYmxlPSIiPgogICAgICAgICAgPHRlbXBsYXRlIGNsYXNzPSJoZWFkZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1oZWFkZXIgdGFibGUtY2VsbCI+U2hvdyBNZXRyaWNzPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICA8cGFwZXItY2hlY2tib3ggY2xhc3M9InRhYmxlLWNlbGwiIGNoZWNrZWQ9Int7ZGV0YWlsc09wZW5lZH19Ij4KICAgICAgICAgICAgPC9wYXBlci1jaGVja2JveD4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC92YWFkaW4tZ3JpZC1jb2x1bW4+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZQogICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgIGl0ZW1zPSJbW3Zpc2libGVTY2hlbWEuaHBhcmFtSW5mb3NdXSIKICAgICAgICBhcz0iaHBhcmFtSW5mbyIKICAgICAgICBpbmRleC1hcz0iaHBhcmFtSW5kZXgiCiAgICAgID4KICAgICAgICA8dmFhZGluLWdyaWQtY29sdW1uIGZsZXgtZ3Jvdz0iMiIgd2lkdGg9IjEwZW0iIHJlc2l6YWJsZT0iIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBjbGFzcz0iaGVhZGVyIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFibGUtaGVhZGVyIHRhYmxlLWNlbGwiPgogICAgICAgICAgICAgIFtbX2hwYXJhbU5hbWUoaHBhcmFtSW5mbyldXQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlLWNlbGwiPgogICAgICAgICAgICAgIFtbX3Nlc3Npb25Hcm91cEhQYXJhbShpdGVtLCBocGFyYW1JbmZvLm5hbWUpXV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdmFhZGluLWdyaWQtY29sdW1uPgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUKICAgICAgICBpcz0iZG9tLXJlcGVhdCIKICAgICAgICBpdGVtcz0ie3t2aXNpYmxlU2NoZW1hLm1ldHJpY0luZm9zfX0iCiAgICAgICAgYXM9Im1ldHJpY0luZm8iCiAgICAgICAgaW5kZXgtYXM9Im1ldHJpY0luZGV4IgogICAgICA+CiAgICAgICAgPHZhYWRpbi1ncmlkLWNvbHVtbiBmbGV4LWdyb3c9IjIiIHdpZHRoPSIxMGVtIiByZXNpemFibGU9IiI+CiAgICAgICAgICA8dGVtcGxhdGUgY2xhc3M9ImhlYWRlciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlLWhlYWRlciB0YWJsZS1jZWxsIj4KICAgICAgICAgICAgICBbW19tZXRyaWNOYW1lKG1ldHJpY0luZm8pXV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1jZWxsIj4KICAgICAgICAgICAgICBbW19zZXNzaW9uR3JvdXBNZXRyaWMoaXRlbSwgbWV0cmljSW5mby5uYW1lKV1dCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3ZhYWRpbi1ncmlkLWNvbHVtbj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGNsYXNzPSJyb3ctZGV0YWlscyI+CiAgICAgICAgPHRmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC1kZXRhaWxzCiAgICAgICAgICBiYWNrZW5kPSJbW2JhY2tlbmRdXSIKICAgICAgICAgIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIgogICAgICAgICAgc2Vzc2lvbi1ncm91cD0iW1tpdGVtXV0iCiAgICAgICAgICB2aXNpYmxlLXNjaGVtYT0iW1t2aXNpYmxlU2NoZW1hXV0iCiAgICAgICAgICBjbGFzcz0ic2Vzc2lvbi1ncm91cC1kZXRhaWxzIgogICAgICAgID4KICAgICAgICA8L3RmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC1kZXRhaWxzPgogICAgICA8L3RlbXBsYXRlPgogICAgPC92YWFkaW4tZ3JpZD4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KC5kYXJrLW1vZGUpIHsKICAgICAgICAtLWx1bW8tYmFzZS1jb2xvcjogIzMwMzAzMDsKICAgICAgICAtLWx1bW8tYm9keS10ZXh0LWNvbG9yOiAjZmZmOwogICAgICB9CgogICAgICA6aG9zdCguZGFyay1tb2RlKSB2YWFkaW4tZ3JpZCB7CiAgICAgICAgLS1fbHVtby1ncmlkLXNlY29uZGFyeS1ib3JkZXItY29sb3I6ICM1MDUwNTA7CiAgICAgIH0KCiAgICAgIC50YWJsZS1jZWxsIHsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KICAgICAgLnRhYmxlLWhlYWRlciB7CiAgICAgICAgLyogbGluZS1icmVhayBvdmVyZmxvd2luZyBjb2x1bW4gaGVhZGVycyAqLwogICAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICAgICAgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKICAgICAgfQogICAgICAuc2Vzc2lvbi1ncm91cC10YWJsZSB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICAgIC5zZXNzaW9uLWdyb3VwLWRldGFpbHMgewogICAgICAgIGhlaWdodDogMzYwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFZkLnByb3RvdHlwZSwidmlzaWJsZVNjaGVtYSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sVmQucHJvdG90eXBlLCJzZXNzaW9uR3JvdXBzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sVmQucHJvdG90eXBlLCJlbmFibGVTaG93TWV0cmljcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxWZC5wcm90b3R5cGUsImJhY2tlbmQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sVmQucHJvdG90eXBlLCJleHBlcmltZW50TmFtZSIsdm9pZCAwKTtFKFtCdCgidmlzaWJsZVNjaGVtYS4qIiwic2Vzc2lvbkdyb3Vwcy4qIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxWZC5wcm90b3R5cGUsIl92aXNpYmxlU2NoZW1hT3JTZXNzaW9uR3JvdXBzQ2hhbmdlZCIsbnVsbCk7VmQ9RShbeXQoInRmLWhwYXJhbXMtdGFibGUtdmlldyIpXSxWZCk7dmFyIENQPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuc2Vzc2lvbkdyb3VwPW51bGwsdGhpcy52aXNpYmxlU2NoZW1hPW51bGx9X3Byb3BlcnRpZXNBcmVQb3B1bGF0ZWQodCxyKXtyZXR1cm4gdCE9bnVsbCYmciE9PXZvaWQgMCYmciE9PW51bGx9X3NpbmdsZXRvblNlc3Npb25Hcm91cHModCl7cmV0dXJuIHQ9PW51bGw/W106W3RdfX07Q1AudGVtcGxhdGU9UWAKICAgIDwhLS0gSWYgc2Vzc2lvbkdyb3VwIG9yIHZpc2libGVTY2hlbWEgYXJlIG5vdCBwb3B1bGF0ZWQsIGRvIG5vdCBkaXNwbGF5CiAgICAgICAgIGFueXRoaW5nLgogICAgICAtLT4KICAgIDx0ZW1wbGF0ZQogICAgICBpcz0iZG9tLWlmIgogICAgICBpZj0iW1tfcHJvcGVydGllc0FyZVBvcHVsYXRlZCh2aXNpYmxlU2NoZW1hLCBzZXNzaW9uR3JvdXApXV0iCiAgICA+CiAgICAgIDwhLS0gRGlzcGxheSBvbmUgcm93IHdpdGhvdXQgYSAic2hvdy1tZXRyaWNzIiBjb2x1bW4gLS0+CiAgICAgIDx0Zi1ocGFyYW1zLXRhYmxlLXZpZXcKICAgICAgICB2aXNpYmxlLXNjaGVtYT0iW1t2aXNpYmxlU2NoZW1hXV0iCiAgICAgICAgc2Vzc2lvbi1ncm91cHM9IltbX3NpbmdsZXRvblNlc3Npb25Hcm91cHMoc2Vzc2lvbkdyb3VwKV1dIgogICAgICA+CiAgICAgIDwvdGYtaHBhcmFtcy10YWJsZS12aWV3PgogICAgPC90ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZQogICAgICBpcz0iZG9tLWlmIgogICAgICBpZj0iW1shX3Byb3BlcnRpZXNBcmVQb3B1bGF0ZWQodmlzaWJsZVNjaGVtYSwgc2Vzc2lvbkdyb3VwKV1dIgogICAgPgogICAgICA8ZGl2PkNsaWNrIG9yIGhvdmVyIG92ZXIgYSBzZXNzaW9uIGdyb3VwIHRvIGRpc3BsYXkgaXRzIHZhbHVlcyBoZXJlLjwvZGl2PgogICAgPC90ZW1wbGF0ZT4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLENQLnByb3RvdHlwZSwic2Vzc2lvbkdyb3VwIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLENQLnByb3RvdHlwZSwidmlzaWJsZVNjaGVtYSIsdm9pZCAwKTtDUD1FKFt5dCgidGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLXZhbHVlcyIpXSxDUCk7dmFyIEFQPUVlKE9lKCksMSk7ZnVuY3Rpb24gcHVlKGUsdCxyLG4pe2lmKHQubGVuZ3RoPDIpcmV0dXJuIGNvbnNvbGUuZXJyb3IoIkxlc3MgdGhhbiB0d28gYXhlcyBpbiBwYXJhbGxlbCBjb29yZGluYXRlcyBwbG90LiIpLG51bGw7bGV0IGk9clswXSxvPXJbMV07aWYoaTw9dFswXXx8aT49dFt0Lmxlbmd0aC0xXSlyZXR1cm4gbnVsbDtsZXQgYT1BUC5zb3J0ZWRJbmRleCh0LGkpO2NvbnNvbGUuYXNzZXJ0KGE+MCksY29uc29sZS5hc3NlcnQoYTx0Lmxlbmd0aCk7bGV0IHM9YS0xO2Z1bmN0aW9uIGwoaCxmLHAsZCl7bGV0IGc9aC1wLF89Zi1kLHk9aS1wLHg9by1kLGI9KGcqeStfKngpLyhnKmcrXypfKTtpZihiPD0wKXJldHVybiBwMyh5LHgpO2lmKGI+PTEpe2xldCBTPWgtaSxDPWYtbztyZXR1cm4gcDMoUyxDKX1yZXR1cm4gcDMoeS1iKmcseC1iKl8pfWxldCBjPW51bGwsdT1udWxsO3JldHVybiBlLmZvckVhY2goaD0+e2xldCBmPWwoaC5jb250cm9sUG9pbnRzW3NdWzBdLGguY29udHJvbFBvaW50c1tzXVsxXSxoLmNvbnRyb2xQb2ludHNbYV1bMF0saC5jb250cm9sUG9pbnRzW2FdWzFdKTtmPm58fChjPT09bnVsbHx8ZjxjKSYmKGM9Zix1PWgpfSksdX1mdW5jdGlvbiBkdWUoZSx0LHIpe3JldHVybiBlLmRvbWFpbigpLmZpbHRlcihuPT57bGV0IGk9ZShuKTtyZXR1cm4gdDw9aSYmaTw9cn0pfWZ1bmN0aW9uIG11ZShlLHQscil7bGV0IG49ZS5yYW5nZSgpLGk9bi5maWx0ZXIobz0+dDw9byYmbzw9cikubWFwKG89PntsZXQgYT1lLmludmVydEV4dGVudChvKTtyZXR1cm4gbz09PW5bbi5sZW5ndGgtMV0/W2FbMF0sYVsxXSsxXTphfSk7cmV0dXJuIGkubGVuZ3RoPT0wP1swLDBdOnNhKExtKGkpKX1mdW5jdGlvbiBndWUoZSx0LHIpe3JldHVybltlLmludmVydCh0KSxlLmludmVydChyKV0uc29ydCgobixpKT0+bi1pKX1mdW5jdGlvbiBGY3QoZSx0LHIpe2Z1bmN0aW9uIG4oKXtpZihlLmxlbmd0aD09PTApcmV0dXJuWzEsMl07bGV0W2ksb109c2EoZSk7cmV0dXJuIGkhPT1vP1tpLG9dOmk+MD9baSouNSxpKjEuNV06aTwwP1tpKjEuNSxpKi41XTpbLTEsMV19aWYocj09PSJMSU5FQVIiKXJldHVybiB6bigpLmRvbWFpbihuKCkpLnJhbmdlKFt0LDBdKTtpZihyPT09IkxPRyIpe2xldCBpPW4oKTtyZXR1cm4gaVswXTw9MCYmaVsxXT49MD9GY3QoZSx0LCJMSU5FQVIiKTpjYygpLmRvbWFpbihpKS5yYW5nZShbdCwwXSl9ZWxzZSBpZihyPT09IlFVQU5USUxFIil7bGV0IG89SXIoMjApLm1hcChhPT50LWEqdC8xOSk7cmV0dXJuIGUubGVuZ3RoPT09MCYmKGU9WzFdKSxyZygpLmRvbWFpbihBUC51bmlxKGUpKS5yYW5nZShvKX1lbHNle2lmKHI9PT0iTk9OX05VTUVSSUMiKXJldHVybiBlZygpLmRvbWFpbihBUC51bmlxKGUuc29ydCgpKSkucmFuZ2UoW3QsMF0pLnBhZGRpbmcoLjEpO3Rocm93IFJhbmdlRXJyb3IoIlVua25vd24gc2NhbGU6ICIrcil9fXZhciBoMTsoZnVuY3Rpb24oZSl7ZS5MSU5FQVI9IkxJTkVBUiIsZS5MT0c9IkxPRyIsZS5RVUFOVElMRT0iUVVBTlRJTEUiLGUuTk9OX05VTUVSSUM9Ik5PTl9OVU1FUklDIn0pKGgxfHwoaDE9e30pKTt2YXIgUFA9Y2xhc3N7aXNQYXNzaW5nKHQpe3JldHVybiEwfX0sblY9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4saSl7dGhpcy5fbG93ZXI9dCx0aGlzLl91cHBlcj1yLHRoaXMuX2xvd2VyT3Blbj1uLHRoaXMuX3VwcGVyT3Blbj1pfWlzUGFzc2luZyh0KXtsZXQgcj10O3JldHVybiB0aGlzLl9iZWZvcmUodGhpcy5fbG93ZXIsciwhdGhpcy5fbG93ZXJPcGVuKSYmdGhpcy5fYmVmb3JlKHIsdGhpcy5fdXBwZXIsIXRoaXMuX3VwcGVyT3Blbil9X2JlZm9yZSh0LHIsbil7cmV0dXJuIG4/dDw9cjp0PHJ9fSxIY3Q9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fZG9tYWluU2V0PXR9aXNQYXNzaW5nKHQpe3JldHVybiB0aGlzLl9kb21haW5TZXQuZmluZEluZGV4KHI9PnI9PT10KSE9PS0xfX0sVmN0PWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGkpe3RoaXMuX3N2Z1Byb3BzPXQsdGhpcy5fc2NoZW1hPXIsdGhpcy5faW50ZXJhY3Rpb25NYW5hZ2VyPW4sdGhpcy5fY29sSW5kZXg9aSx0aGlzLl9pc0Rpc3BsYXllZD0hMSx0aGlzLl95U2NhbGU9bnVsbCx0aGlzLl9zY2FsZVR5cGU9bnVsbCx0aGlzLnNldEJydXNoU2VsZWN0aW9uKG51bGwpfWNvbEluZGV4KCl7cmV0dXJuIHRoaXMuX2NvbEluZGV4fXlTY2FsZSgpe3JldHVybiB0aGlzLl95U2NhbGV9c2NhbGVUeXBlKCl7cmV0dXJuIHRoaXMuX3NjYWxlVHlwZX1icnVzaFNlbGVjdGlvbigpe3JldHVybiB0aGlzLl9icnVzaFNlbGVjdGlvbn1pc0Rpc3BsYXllZCgpe3JldHVybiB0aGlzLl9pc0Rpc3BsYXllZH1zZXRCcnVzaFNlbGVjdGlvbih0KXt0aGlzLl9icnVzaFNlbGVjdGlvbj10LHRoaXMuX2JydXNoRmlsdGVyPXRoaXMuX2J1aWxkQnJ1c2hGaWx0ZXIodGhpcy5icnVzaFNlbGVjdGlvbigpLHRoaXMuc2NhbGVUeXBlKCksdGhpcy55U2NhbGUoKSl9c2V0RG9tYWluQW5kU2NhbGUodCxyKXt0aGlzLl9zY2FsZVR5cGU9cix0aGlzLl95U2NhbGU9RmN0KHQuc2xpY2UoKSx0aGlzLl9zdmdQcm9wcy5oZWlnaHQsdGhpcy5zY2FsZVR5cGUoKSksdGhpcy5fYnJ1c2hGaWx0ZXI9dGhpcy5fYnVpbGRCcnVzaEZpbHRlcih0aGlzLmJydXNoU2VsZWN0aW9uKCksdGhpcy5zY2FsZVR5cGUoKSx0aGlzLnlTY2FsZSgpKX1icnVzaEZpbHRlcigpe3JldHVybiB0aGlzLl9icnVzaEZpbHRlcn11cGRhdGVET00odCl7bGV0IHI9bGIodGhpcy55U2NhbGUoKSk7dGhpcy5zY2FsZVR5cGUoKT09PWgxLlFVQU5USUxFJiYocj1yLnRpY2tWYWx1ZXModGhpcy55U2NhbGUoKS5xdWFudGlsZXMoKSkudGlja0Zvcm1hdCh4bigiLS42ZyIpKSk7bGV0IG49SHQodCk7bi5zZWxlY3RBbGwoImciKS5yZW1vdmUoKSxuLmFwcGVuZCgiZyIpLmNsYXNzZWQoImF4aXMiLCEwKS5jYWxsKHIpLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoImF4aXMtdGl0bGUiLCEwKS5zdHlsZSgiY3Vyc29yIiwibW92ZSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoInkiLC05KS50ZXh0KGE9PmNjdCh0aGlzLl9zY2hlbWEsYSkpLG4uY2FsbChwYigpLm9uKCJzdGFydCIsKCk9Pnt0LnNldEF0dHJpYnV0ZSgiaXMtZHJhZ2dpbmciLCIiKSx0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXIub25EcmFnU3RhcnQodGhpcy5jb2xJbmRleCgpKX0pLm9uKCJkcmFnIiwoKT0+dGhpcy5faW50ZXJhY3Rpb25NYW5hZ2VyLm9uRHJhZyhxdC54KSkub24oImVuZCIsKCk9Pnt0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXIub25EcmFnRW5kKCksdC5yZW1vdmVBdHRyaWJ1dGUoImlzLWRyYWdnaW5nIil9KSk7bGV0IGk9cUwoKS5leHRlbnQoW1stOCwwXSxbOCx0aGlzLl9zdmdQcm9wcy5oZWlnaHQrMV1dKS5vbigic3RhcnQiLCgpPT57IUJjdChxdCl8fCh0LnNldEF0dHJpYnV0ZSgiaXMtYnJ1c2hpbmciLCIiKSx0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXIub25CcnVzaENoYW5nZWQodGhpcy5jb2xJbmRleCgpLHF0LnNlbGVjdGlvbikpfSkub24oImJydXNoIiwoKT0+eyFCY3QocXQpfHx0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXIub25CcnVzaENoYW5nZWQodGhpcy5jb2xJbmRleCgpLHF0LnNlbGVjdGlvbil9KS5vbigiZW5kIiwoKT0+eyFCY3QocXQpfHwodGhpcy5faW50ZXJhY3Rpb25NYW5hZ2VyLm9uQnJ1c2hDaGFuZ2VkKHRoaXMuY29sSW5kZXgoKSxxdC5zZWxlY3Rpb24pLHQucmVtb3ZlQXR0cmlidXRlKCJpcy1icnVzaGluZyIpKX0pLG89SHQodCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiYnJ1c2giLCEwKTtvLmNhbGwoaSksaS5tb3ZlKG8sdGhpcy5icnVzaFNlbGVjdGlvbigpKX1zZXREaXNwbGF5ZWQodCl7dGhpcy5faXNEaXNwbGF5ZWQ9dH1fYnVpbGRCcnVzaEZpbHRlcih0LHIsbil7aWYodD09PW51bGwpcmV0dXJuIG5ldyBQUDtpZihyPT09bnVsbClyZXR1cm4gY29uc29sZS5lcnJvcigiU2NhbGUgdHlwZSBpcyBudWxsLCBidXQgYnJ1c2hTZWxlY3Rpb24gaXNuJ3Q6ICIsdCksbmV3IFBQO3N3aXRjaChyKXtjYXNlIGgxLkxJTkVBUjpjYXNlIGgxLkxPRzp7bGV0W2ksb109Z3VlKG4sdFswXSx0WzFdKTtyZXR1cm4gbmV3IG5WKGksbywhMSwhMSl9Y2FzZSBoMS5RVUFOVElMRTp7bGV0W2ksb109bXVlKG4sdFswXSx0WzFdKTtyZXR1cm4gbmV3IG5WKGksbywhMSwhMCl9Y2FzZSBoMS5OT05fTlVNRVJJQzpyZXR1cm4gbmV3IEhjdChkdWUobix0WzBdLHRbMV0pKX1yZXR1cm4gY29uc29sZS5lcnJvcigiVW5rbm93biBzY2FsZSB0eXBlOiAiLHIpLG5ldyBQUH19LGlWPWNsYXNze2NvbnN0cnVjdG9yKHQscixuKXt0aGlzLl9zdmdQcm9wcz10LHRoaXMuX3NjaGVtYT1yLHRoaXMuX2F4ZXM9dGhpcy5fY3JlYXRlQXhlcyhuKSx0aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucz1lZygpLnJhbmdlKFsxLHRoaXMuX3N2Z1Byb3BzLndpZHRoLTFdKS5wYWRkaW5nKC41KSx0aGlzLl9kcmFnZ2VkQXhpcz1udWxsLHRoaXMuX3N2Z1Byb3BzLnN2Z0cuc2VsZWN0QWxsKCJnLmF4aXMtcGFyZW50IikucmVtb3ZlKCksdGhpcy5fcGFyZW50c1NlbD10aGlzLl9zdmdQcm9wcy5zdmdHLnNlbGVjdEFsbCgiLmF4aXMtcGFyZW50Iil9dXBkYXRlQXhlcyh0LHIpe2NvbnNvbGUuYXNzZXJ0KCF0aGlzLmlzQXhpc0RyYWdnaW5nKCkpO2xldCBuPW5ldyBTZXQ7dC5jb2x1bW5zLmZvckVhY2gobz0+e2xldCBhPW8uYWJzb2x1dGVJbmRleCxzPXRoaXMuX2F4ZXNbYV07cy5zZXREaXNwbGF5ZWQoITApO2xldCBsPXIubWFwKGM9PmIwKHRoaXMuX3NjaGVtYSxjLGEpKTtzLnNldERvbWFpbkFuZFNjYWxlKGwsby5zY2FsZSksbi5hZGQoYSl9KSx0aGlzLl9heGVzLmZvckVhY2gobz0+e24uaGFzKG8uY29sSW5kZXgoKSl8fG8uc2V0RGlzcGxheWVkKCExKX0pLHRoaXMuX3VwZGF0ZVN0YXRpb25hcnlBeGVzUG9zaXRpb25zKG4pLHRoaXMuX3BhcmVudHNTZWw9dGhpcy5fcGFyZW50c1NlbC5kYXRhKEFycmF5LmZyb20obiksbz0+byksdGhpcy5fcGFyZW50c1NlbC5leGl0KCkucmVtb3ZlKCksdGhpcy5fcGFyZW50c1NlbD10aGlzLl9wYXJlbnRzU2VsLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiYXhpcy1wYXJlbnQiLCEwKS5tZXJnZSh0aGlzLl9wYXJlbnRzU2VsKTtsZXQgaT10aGlzO3RoaXMuX3BhcmVudHNTZWwuY2FsbChvPT50aGlzLl91cGRhdGVBeGVzUG9zaXRpb25zSW5ET00obykpLmVhY2goZnVuY3Rpb24obyl7aS5fYXhlc1tvXS51cGRhdGVET00odGhpcyl9KX1tYXBWaXNpYmxlQXhlcyh0KXtyZXR1cm4gdGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnMuZG9tYWluKCkubWFwKHI9PnQodGhpcy5nZXRBeGlzUG9zaXRpb24ociksdGhpcy5fYXhlc1tyXSkpfWFsbFZpc2libGVBeGVzU2F0aXNmeSh0KXtyZXR1cm4gdGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnMuZG9tYWluKCkuZXZlcnkocj0+dCh0aGlzLmdldEF4aXNQb3NpdGlvbihyKSx0aGlzLl9heGVzW3JdKSl9Z2V0QXhpc0ZvckNvbEluZGV4KHQpe3JldHVybiB0aGlzLl9heGVzW3RdfWRyYWdTdGFydCh0KXtjb25zb2xlLmFzc2VydCghdGhpcy5pc0F4aXNEcmFnZ2luZygpKSxjb25zb2xlLmFzc2VydCh0aGlzLl9heGVzW3RdLmlzRGlzcGxheWVkKCkpLHRoaXMuX2RyYWdnZWRBeGlzPXRoaXMuX2F4ZXNbdF0sdGhpcy5fZHJhZ2dlZEF4aXNQb3NpdGlvbj10aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucyh0KX1kcmFnKHQpe3Q9TWF0aC5taW4oTWF0aC5tYXgodCwwKSx0aGlzLl9zdmdQcm9wcy53aWR0aCksdGhpcy5fZHJhZ2dlZEF4aXNQb3NpdGlvbj10O2xldCByPXRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zLmRvbWFpbigpO3Iuc29ydCgobixpKT0+dGhpcy5nZXRBeGlzUG9zaXRpb24obiktdGhpcy5nZXRBeGlzUG9zaXRpb24oaSkpLHRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zLmRvbWFpbihyKSx0aGlzLl91cGRhdGVBeGVzUG9zaXRpb25zSW5ET00odGhpcy5fcGFyZW50c1NlbCl9ZHJhZ0VuZCh0KXtjb25zb2xlLmFzc2VydCh0aGlzLmlzQXhpc0RyYWdnaW5nKCkpLHRoaXMuX2RyYWdnZWRBeGlzUG9zaXRpb249bnVsbCx0aGlzLl9kcmFnZ2VkQXhpcz1udWxsLHRoaXMuX3VwZGF0ZUF4ZXNQb3NpdGlvbnNJbkRPTSh0aGlzLl9wYXJlbnRzU2VsLnRyYW5zaXRpb24oKS5kdXJhdGlvbih0KSl9aXNBeGlzRHJhZ2dpbmcoKXtyZXR1cm4gdGhpcy5fZHJhZ2dlZEF4aXMhPT1udWxsfWdldEF4aXNQb3NpdGlvbih0KXtyZXR1cm4gdGhpcy5fZHJhZ2dlZEF4aXMhPT1udWxsJiZ0aGlzLl9kcmFnZ2VkQXhpcy5jb2xJbmRleCgpPT09dD90aGlzLl9kcmFnZ2VkQXhpc1Bvc2l0aW9uOnRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zKHQpfV91cGRhdGVTdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucyh0KXtsZXQgcj10aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucy5kb21haW4oKS5maWx0ZXIoaT0+dC5oYXMoaSkpLG49QXJyYXkuZnJvbShuZXcgU2V0KFsuLi5yLC4uLkFycmF5LmZyb20odCldKSk7dGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnMuZG9tYWluKG4pfV91cGRhdGVBeGVzUG9zaXRpb25zSW5ET00odCl7dC5hdHRyKCJ0cmFuc2Zvcm0iLHI9PnlQKHRoaXMuZ2V0QXhpc1Bvc2l0aW9uKHIpKSl9X2NyZWF0ZUF4ZXModCl7cmV0dXJuIElyKHVjdCh0aGlzLl9zY2hlbWEpKS5tYXAocj0+bmV3IFZjdCh0aGlzLl9zdmdQcm9wcyx0aGlzLl9zY2hlbWEsdCxyKSl9fTtmdW5jdGlvbiBCY3QoZSl7cmV0dXJuIGUuc291cmNlRXZlbnQhPT1udWxsfXZhciBYZjsoZnVuY3Rpb24oZSl7ZVtlLkZPUkVHUk9VTkQ9MF09IkZPUkVHUk9VTkQiLGVbZS5CQUNLR1JPVU5EPTFdPSJCQUNLR1JPVU5EIn0pKFhmfHwoWGY9e30pKTt2YXIgdGg9Y2xhc3N7Y29uc3RydWN0b3IodCl7dD09PXZvaWQgMCYmKHQ9VHAobnVsbCkpLGNvbnNvbGUuYXNzZXJ0KHQuc2l6ZSgpPD0xKSx0aGlzLl9zZXNzaW9uR3JvdXBTZWw9dH1zZXNzaW9uR3JvdXAoKXtyZXR1cm4gdGhpcy5fc2Vzc2lvbkdyb3VwU2VsLnNpemUoKT09PTE/dGhpcy5fc2Vzc2lvbkdyb3VwU2VsLmRhdHVtKCk6bnVsbH1pc051bGwoKXtyZXR1cm4gdGhpcy5zZXNzaW9uR3JvdXAoKT09PW51bGx9c2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuX3Nlc3Npb25Hcm91cFNlbH1lcXVhbHNUbyh0KXt2YXIgcixuO3JldHVybiB0aGlzLmlzTnVsbCgpP3QuaXNOdWxsKCk6dC5pc051bGwoKT8hMTooKHI9dC5zZXNzaW9uR3JvdXAoKSk9PW51bGw/dm9pZCAwOnIubmFtZSk9PSgobj10aGlzLnNlc3Npb25Hcm91cCgpKT09bnVsbD92b2lkIDA6bi5uYW1lKX19LG9WPWNsYXNze2NvbnN0cnVjdG9yKHQscixuKXt0aGlzLl9zdmdQcm9wcz10LHRoaXMuX3NjaGVtYT1yLHRoaXMuX2F4ZXNDb2xsZWN0aW9uPW4sdGhpcy5fc2Vzc2lvbkdyb3Vwcz1bXSx0aGlzLl9zdmdQcm9wcy5zdmdHLnNlbGVjdEFsbCgiZy5iYWNrZ3JvdW5kIikucmVtb3ZlKCksdGhpcy5fc3ZnUHJvcHMuc3ZnRy5zZWxlY3RBbGwoImcuZm9yZWdyb3VuZCIpLnJlbW92ZSgpLHRoaXMuX2JnUGF0aHNTZWw9dGhpcy5fc3ZnUHJvcHMuc3ZnRy5hcHBlbmQoImciKS5jbGFzc2VkKCJiYWNrZ3JvdW5kIiwhMCkuc2VsZWN0QWxsKCJwYXRoIiksdGhpcy5fZmdQYXRoc1NlbD10aGlzLl9zdmdQcm9wcy5zdmdHLmFwcGVuZCgiZyIpLmNsYXNzZWQoImZvcmVncm91bmQiLCEwKS5zZWxlY3RBbGwoInBhdGgiKSx0aGlzLl91cGRhdGVWaXNpYmxlRmdQYXRoc1NlbCgpLHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cEhhbmRsZT1uZXcgdGgsdGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGU9bmV3IHRoLHRoaXMuX2QzbGluZT12dSgpLmN1cnZlKGpoKX1nZXRTZXNzaW9uR3JvdXBIYW5kbGUodCl7cmV0dXJuIHQ9PW51bGw/bmV3IHRoOm5ldyB0aCh0aGlzLl9mZ1BhdGhzU2VsLmZpbHRlcihyPT5yLm5hbWU9PT10Lm5hbWUpKX1oaWRlQmFja2dyb3VuZExpbmVzKCl7dGhpcy5fYmdQYXRoc1NlbC5hdHRyKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIil9c2hvd0JhY2tncm91bmRMaW5lcygpe3RoaXMuX2JnUGF0aHNTZWwuYXR0cigidmlzaWJpbGl0eSIsbnVsbCl9cGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlKCl7cmV0dXJuIHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cEhhbmRsZX1zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZSgpe3JldHVybiB0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZX1yZWNvbXB1dGVDb250cm9sUG9pbnRzKHQscj0wKXsodD09PVhmLkZPUkVHUk9VTkQ/dGhpcy5fZmdQYXRoc1NlbDp0aGlzLl9iZ1BhdGhzU2VsKS50cmFuc2l0aW9uKCkuZHVyYXRpb24ocikuYXR0cigiZCIsaT0+dGhpcy5fcGF0aERBdHRyaWJ1dGUoaSkpLHQ9PT1YZi5GT1JFR1JPVU5EJiZ3aW5kb3cuc2V0VGltZW91dCgoKT0+e2xldCBpPXRoaXM7dGhpcy5fZmdQYXRoc1NlbC5lYWNoKGZ1bmN0aW9uKG8pe2kuX3NldENvbnRyb2xQb2ludHNQcm9wZXJ0eSh0aGlzLG8pfSl9KX1yZWNvbXB1dGVGb3JlZ3JvdW5kTGluZXNWaXNpYmlsaXR5KCl7dGhpcy5fZmdQYXRoc1NlbC5jbGFzc2VkKCJpbnZpc2libGUtcGF0aCIsdD0+IXRoaXMuX2F4ZXNDb2xsZWN0aW9uLmFsbFZpc2libGVBeGVzU2F0aXNmeSgocixuKT0+bi5icnVzaEZpbHRlcigpLmlzUGFzc2luZyhiMCh0aGlzLl9zY2hlbWEsdCxuLmNvbEluZGV4KCkpKSkpLHRoaXMuX3VwZGF0ZVZpc2libGVGZ1BhdGhzU2VsKCl9c2V0Rm9yZWdyb3VuZExpbmVzQ29sb3IodCxyLG4pe2xldCBpPXRoaXMuX2NyZWF0ZUxpbmVDb2xvckZ1bmN0aW9uKHQscixuKTt0aGlzLl9mZ1BhdGhzU2VsLmF0dHIoInN0cm9rZSIsaSl9cmVkcmF3KHQscixuLGkpe2xldCBvPXRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cEhhbmRsZS5zZXNzaW9uR3JvdXAoKSxhPXRoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlLnNlc3Npb25Hcm91cCgpO3RoaXMuX3Nlc3Npb25Hcm91cHM9dCx0aGlzLl9mZ1BhdGhzU2VsPXRoaXMuX3JlY29tcHV0ZVBhdGhTZWxlY3Rpb24odGhpcy5fZmdQYXRoc1NlbCksdGhpcy5fYmdQYXRoc1NlbD10aGlzLl9yZWNvbXB1dGVQYXRoU2VsZWN0aW9uKHRoaXMuX2JnUGF0aHNTZWwpLHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cEhhbmRsZT10aGlzLmdldFNlc3Npb25Hcm91cEhhbmRsZShvKSx0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZT10aGlzLmdldFNlc3Npb25Hcm91cEhhbmRsZShhKSx0aGlzLnJlY29tcHV0ZUNvbnRyb2xQb2ludHMoWGYuRk9SRUdST1VORCksdGhpcy5yZWNvbXB1dGVDb250cm9sUG9pbnRzKFhmLkJBQ0tHUk9VTkQpLHRoaXMucmVjb21wdXRlRm9yZWdyb3VuZExpbmVzVmlzaWJpbGl0eSgpLHRoaXMuc2V0Rm9yZWdyb3VuZExpbmVzQ29sb3IocixuLGkpfXVwZGF0ZVBlYWtlZFNlc3Npb25Hcm91cCh0KXt0aGlzLl9wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUuc2VsZWN0aW9uKCkuY2xhc3NlZCgicGVha2VkLXBhdGgiLCExKSx0aGlzLl9wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGU9dCx0aGlzLl9wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUuc2VsZWN0aW9uKCkuY2xhc3NlZCgicGVha2VkLXBhdGgiLCEwKX1jbGVhclBlYWtlZFNlc3Npb25Hcm91cCgpe3RoaXMudXBkYXRlUGVha2VkU2Vzc2lvbkdyb3VwKG5ldyB0aCl9dXBkYXRlU2VsZWN0ZWRTZXNzaW9uR3JvdXAodCl7dGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGUuc2VsZWN0aW9uKCkuY2xhc3NlZCgic2VsZWN0ZWQtcGF0aCIsITEpLHRoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlPXQsdGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGUuc2VsZWN0aW9uKCkuY2xhc3NlZCgic2VsZWN0ZWQtcGF0aCIsITApfWZpbmRDbG9zZXN0U2Vzc2lvbkdyb3VwKHQscil7bGV0IG49dGhpcy5fYXhlc0NvbGxlY3Rpb24ubWFwVmlzaWJsZUF4ZXMoKG8sYSk9Pm8pLGk9cHVlKHRoaXMuX3Zpc2libGVGZ1BhdGhzU2VsLm5vZGVzKCksbixbdCxyXSwxMDApO3JldHVybiBpPT09bnVsbD9uZXcgdGg6bmV3IHRoKEh0KGkpKX1fY3JlYXRlTGluZUNvbG9yRnVuY3Rpb24odCxyLG4pe2lmKHQ9PT1udWxsKXJldHVybigpPT4icmVkIjtsZXQgaT16bigpLmRvbWFpbihoY3QodGhpcy5fc2NoZW1hLHRoaXMuX3Nlc3Npb25Hcm91cHMsdCkpLnJhbmdlKFtyLG5dKS5pbnRlcnBvbGF0ZShFXyk7cmV0dXJuIG89PmkoYjAodGhpcy5fc2NoZW1hLG8sdCkpfV9yZWNvbXB1dGVQYXRoU2VsZWN0aW9uKHQpe3JldHVybiB0PXQuZGF0YSh0aGlzLl9zZXNzaW9uR3JvdXBzLHI9PnIubmFtZSksdC5leGl0KCkucmVtb3ZlKCksdC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLm1lcmdlKHQpfV9zZXRDb250cm9sUG9pbnRzUHJvcGVydHkodCxyKXt0LmNvbnRyb2xQb2ludHM9dGhpcy5fY29tcHV0ZUNvbnRyb2xQb2ludHMocil9X2NvbXB1dGVDb250cm9sUG9pbnRzKHQpe3JldHVybiB0aGlzLl9heGVzQ29sbGVjdGlvbi5tYXBWaXNpYmxlQXhlcygocixuKT0+W3Isbi55U2NhbGUoKShiMCh0aGlzLl9zY2hlbWEsdCxuLmNvbEluZGV4KCkpKV0pfV9wYXRoREF0dHJpYnV0ZSh0KXtyZXR1cm4gdGhpcy5fZDNsaW5lKHRoaXMuX2NvbXB1dGVDb250cm9sUG9pbnRzKHQpKX1fdXBkYXRlVmlzaWJsZUZnUGF0aHNTZWwoKXt0aGlzLl92aXNpYmxlRmdQYXRoc1NlbD10aGlzLl9mZ1BhdGhzU2VsLmZpbHRlcigiOm5vdCguaW52aXNpYmxlLXBhdGgpIil9fTt2YXIgYVY9Y2xhc3N7Y29uc3RydWN0b3IodCxyKXt0aGlzLnN2Zz1IdCh0KTtsZXQgbj17dG9wOjMwLHJpZ2h0OjEwLGJvdHRvbToxMCxsZWZ0OjEwfSxpPTEwMCxvPTIwMCxhPXIqaStuLmxlZnQrbi5yaWdodCxzPW8rbi50b3Arbi5ib3R0b207dGhpcy5zdmcuYXR0cigidmlld0JveCIsYDAgMCAke2F9ICR7c31gKSx0aGlzLnN2Zy5hdHRyKCJwcmVzZXJ2ZUFzcGVjdFJhdGlvIiwieE1pZFlNaWQiKSx0aGlzLnN2Zy5zdHlsZSgibWluLXdpZHRoIixhKyJweCIpLHRoaXMuc3ZnLnN0eWxlKCJtaW4taGVpZ2h0IixzKyJweCIpLHRoaXMud2lkdGg9YS1uLmxlZnQtbi5yaWdodCx0aGlzLmhlaWdodD1zLW4udG9wLW4uYm90dG9tLHRoaXMuc3ZnRz10aGlzLnN2Zy5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLHlQKG4ubGVmdCxuLnRvcCkpfX0sc1Y9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4saSl7dGhpcy5fc3ZnUHJvcHM9dCx0aGlzLl9zY2hlbWE9cix0aGlzLl9wZWFrZWRTZXNzaW9uR3JvdXBDaGFuZ2VkQ0I9bix0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cENoYW5nZWRDQj1pLHRoaXMuX2F4ZXNDb2xsZWN0aW9uPW5ldyBpVih0LHIsdGhpcyksdGhpcy5fbGluZXNDb2xsZWN0aW9uPW5ldyBvVih0LHIsdGhpcy5fYXhlc0NvbGxlY3Rpb24pLHRoaXMuX3N2Z1Byb3BzLnN2Zy5vbigiY2xpY2siLCgpPT50aGlzLm9uQ2xpY2soKSkub24oIm1vdXNlbW92ZSBtb3VzZWVudGVyIiwoKT0+e2xldFtvLGFdPXpvKHRoaXMuX3N2Z1Byb3BzLnN2Z0cubm9kZSgpKTt0aGlzLm9uTW91c2VNb3ZlZChvLGEpfSkub24oIm1vdXNlbGVhdmUiLCgpPT50aGlzLm9uTW91c2VMZWF2ZSgpKX1vbkRyYWdTdGFydCh0KXt0aGlzLl9heGVzQ29sbGVjdGlvbi5kcmFnU3RhcnQodCksdGhpcy5fbGluZXNDb2xsZWN0aW9uLmhpZGVCYWNrZ3JvdW5kTGluZXMoKX1vbkRyYWcodCl7dGhpcy5fYXhlc0NvbGxlY3Rpb24uZHJhZyh0KSx0aGlzLl9saW5lc0NvbGxlY3Rpb24ucmVjb21wdXRlQ29udHJvbFBvaW50cyhYZi5GT1JFR1JPVU5EKX1vbkRyYWdFbmQoKXt0aGlzLl9heGVzQ29sbGVjdGlvbi5kcmFnRW5kKDUwMCksdGhpcy5fbGluZXNDb2xsZWN0aW9uLnJlY29tcHV0ZUNvbnRyb2xQb2ludHMoWGYuRk9SRUdST1VORCw1MDApLHdpbmRvdy5zZXRUaW1lb3V0KCgpPT57dGhpcy5fbGluZXNDb2xsZWN0aW9uLnJlY29tcHV0ZUNvbnRyb2xQb2ludHMoWGYuQkFDS0dST1VORCksdGhpcy5fbGluZXNDb2xsZWN0aW9uLnNob3dCYWNrZ3JvdW5kTGluZXMoKX0sNTAwKX1vbkJydXNoQ2hhbmdlZCh0LHIpe3RoaXMuX2F4ZXNDb2xsZWN0aW9uLmdldEF4aXNGb3JDb2xJbmRleCh0KS5zZXRCcnVzaFNlbGVjdGlvbihyKSx0aGlzLl9saW5lc0NvbGxlY3Rpb24ucmVjb21wdXRlRm9yZWdyb3VuZExpbmVzVmlzaWJpbGl0eSgpfW9uTW91c2VNb3ZlZCh0LHIpe3RoaXMuX2xpbmVzQ29sbGVjdGlvbi51cGRhdGVQZWFrZWRTZXNzaW9uR3JvdXAodGhpcy5fbGluZXNDb2xsZWN0aW9uLmZpbmRDbG9zZXN0U2Vzc2lvbkdyb3VwKHQscikpLHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cENoYW5nZWRDQih0aGlzLl9saW5lc0NvbGxlY3Rpb24ucGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlKCkuc2Vzc2lvbkdyb3VwKCkpfW9uTW91c2VMZWF2ZSgpe3RoaXMuX2xpbmVzQ29sbGVjdGlvbi5wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKS5pc051bGwoKXx8KHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5jbGVhclBlYWtlZFNlc3Npb25Hcm91cCgpLHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cENoYW5nZWRDQihudWxsKSl9b25DbGljaygpe3RoaXMuX2xpbmVzQ29sbGVjdGlvbi5wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKS5zZXNzaW9uR3JvdXAoKT09PXRoaXMuX2xpbmVzQ29sbGVjdGlvbi5zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZSgpLnNlc3Npb25Hcm91cCgpP3RoaXMuX2xpbmVzQ29sbGVjdGlvbi51cGRhdGVTZWxlY3RlZFNlc3Npb25Hcm91cChuZXcgdGgpOnRoaXMuX2xpbmVzQ29sbGVjdGlvbi51cGRhdGVTZWxlY3RlZFNlc3Npb25Hcm91cCh0aGlzLl9saW5lc0NvbGxlY3Rpb24ucGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlKCkpLHRoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZSgpLnNlc3Npb25Hcm91cCgpKX1vbk9wdGlvbnNPclNlc3Npb25Hcm91cHNDaGFuZ2VkKHQscil7dGhpcy5fYXhlc0NvbGxlY3Rpb24udXBkYXRlQXhlcyh0LHIpO2xldCBuPXRoaXMuX2xpbmVzQ29sbGVjdGlvbi5wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKSxpPXRoaXMuX2xpbmVzQ29sbGVjdGlvbi5zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZSgpO3RoaXMuX2xpbmVzQ29sbGVjdGlvbi5yZWRyYXcocix0LmNvbG9yQnlDb2x1bW5JbmRleCE9PXZvaWQgMD90LmNvbHVtbnNbdC5jb2xvckJ5Q29sdW1uSW5kZXhdLmFic29sdXRlSW5kZXg6bnVsbCx0Lm1pbkNvbG9yLHQubWF4Q29sb3IpLG4uZXF1YWxzVG8odGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpKXx8dGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKS5zZXNzaW9uR3JvdXAoKSksaS5lcXVhbHNUbyh0aGlzLl9saW5lc0NvbGxlY3Rpb24uc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGUoKSl8fHRoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZSgpLnNlc3Npb25Hcm91cCgpKX1zY2hlbWEoKXtyZXR1cm4gdGhpcy5fc2NoZW1hfX07dmFyIGVoPWNsYXNzIGV4dGVuZHMgR3QoX28obXQpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cD1udWxsLHRoaXMuY2xvc2VzdFNlc3Npb25Hcm91cD1udWxsLHRoaXMucmVkcmF3Q291bnQ9MH1fb3B0aW9uc09yU2Vzc2lvbkdyb3Vwc0NoYW5nZWQoKXt2YXIgbjtpZighdGhpcy5vcHRpb25zKXJldHVybjtsZXR7Y29uZmlndXJhdGlvbjp0fT0obj10aGlzLl9wcmV2T3B0aW9ucykhPW51bGw/bjp7fSx7Y29uZmlndXJhdGlvbjpyfT10aGlzLm9wdGlvbnM7aWYodGhpcy5faW50ZXJhY3Rpb25NYW5hZ2VyPT09dm9pZCAwfHwhVWN0LmlzRXF1YWwodD09bnVsbD92b2lkIDA6dC5zY2hlbWEsci5zY2hlbWEpfHwhVWN0LmlzRXF1YWwodD09bnVsbD92b2lkIDA6dC5jb2x1bW5zVmlzaWJpbGl0eSxyLmNvbHVtbnNWaXNpYmlsaXR5KSl7SHQodGhpcy4kLnN2Zykuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCk7bGV0IGk9bmV3IGFWKHRoaXMuJC5zdmcsci5jb2x1bW5zVmlzaWJpbGl0eS5maWx0ZXIoQm9vbGVhbikubGVuZ3RoKTt0aGlzLnNjb3BlU3VidHJlZSh0aGlzLiQuc3ZnLCEwKSx0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXI9bmV3IHNWKGksci5zY2hlbWEsbz0+dGhpcy5jbG9zZXN0U2Vzc2lvbkdyb3VwQ2hhbmdlZChvKSxvPT50aGlzLnNlbGVjdGVkU2Vzc2lvbkdyb3VwQ2hhbmdlZChvKSl9dGhpcy5fY29tcHV0ZVZhbGlkU2Vzc2lvbkdyb3VwcygpLHRoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbk9wdGlvbnNPclNlc3Npb25Hcm91cHNDaGFuZ2VkKHRoaXMub3B0aW9ucyx0aGlzLl92YWxpZFNlc3Npb25Hcm91cHMpLHRoaXMucmVkcmF3Q291bnQrKyx0aGlzLl9wcmV2T3B0aW9ucz10aGlzLm9wdGlvbnN9Y2xvc2VzdFNlc3Npb25Hcm91cENoYW5nZWQodCl7dGhpcy5jbG9zZXN0U2Vzc2lvbkdyb3VwPXR9c2VsZWN0ZWRTZXNzaW9uR3JvdXBDaGFuZ2VkKHQpe3RoaXMuc2VsZWN0ZWRTZXNzaW9uR3JvdXA9dH1fY29tcHV0ZVZhbGlkU2Vzc2lvbkdyb3Vwcygpe2xldCB0PXVzO2lmKHRoaXMuc2Vzc2lvbkdyb3Vwcz09PXZvaWQgMCl7dGhpcy5fdmFsaWRTZXNzaW9uR3JvdXBzPXZvaWQgMDtyZXR1cm59bGV0IHI9dGhpcy5vcHRpb25zLmNvbmZpZ3VyYXRpb24uc2NoZW1hO3RoaXMuX3ZhbGlkU2Vzc2lvbkdyb3Vwcz10aGlzLnNlc3Npb25Hcm91cHMuZmlsdGVyKG49Pntmb3IobGV0IGk9MDtpPHQubnVtQ29sdW1ucyhyKTsrK2kpe2lmKCF0aGlzLm9wdGlvbnMuY29uZmlndXJhdGlvbi5jb2x1bW5zVmlzaWJpbGl0eVtpXSljb250aW51ZTtsZXQgbz10LmNvbHVtblZhbHVlQnlJbmRleChyLG4saSk7aWYobz09PXZvaWQgMHx8bz09PSJOYU4iKXJldHVybiExfXJldHVybiEwfSl9fTtlaC50ZW1wbGF0ZT1RYAogICAgPGRpdiBpZD0iY29udGFpbmVyIj4KICAgICAgPHN2ZyBpZD0ic3ZnIj48L3N2Zz4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgLS10Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy1wbG90LWF4aXMtc2hhZG93OiAwIDFweCAwICNmZmYsCiAgICAgICAgICAxcHggMCAwICNmZmYsIDAgLTFweCAwICNmZmYsIC0xcHggMCAwICNmZmY7CiAgICAgIH0KICAgICAgOmhvc3QoLmRhcmstbW9kZSkgewogICAgICAgIC0tdGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtcGxvdC1heGlzLXNoYWRvdzogMCAxcHggMCAjMDAwLAogICAgICAgICAgMXB4IDAgMCAjMDAwLCAwIC0xcHggMCAjMDAwLCAtMXB4IDAgMCAjMDAwOwogICAgICB9CiAgICAgIHN2ZyB7CiAgICAgICAgZm9udDogMTBweCBzYW5zLXNlcmlmOwogICAgICB9CgogICAgICAuYmFja2dyb3VuZCBwYXRoIHsKICAgICAgICBmaWxsOiBub25lOwogICAgICAgIHN0cm9rZTogI2RkZDsKICAgICAgICBzaGFwZS1yZW5kZXJpbmc6IGNyaXNwRWRnZXM7CiAgICAgIH0KCiAgICAgIC5mb3JlZ3JvdW5kIHBhdGggewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDAuNzsKICAgICAgICBzdHJva2Utd2lkdGg6IDE7CiAgICAgIH0KCiAgICAgIC8qIFdpbGwgYmUgc2V0IG9uIGZvcmVncm91bmQgcGF0aHMgdGhhdCBhcmUgbm90ICJjb250YWluZWQiIGluIHRoZSBjdXJyZW50CiAgICAgICAgIGF4ZXMgYnJ1c2hlcy4gSWYgbm8gYnJ1c2hlcyBhcmUgc2V0LCBubyBwYXRoIHdpbGwgaGF2ZSB0aGlzIGNsYXNzLiAqLwogICAgICAuZm9yZWdyb3VuZCAuaW52aXNpYmxlLXBhdGggewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIFN0eWxlIGZvciB0aGUgcGF0aCBjbG9zZXN0IHRvIHRoZSBtb3VzZSBwb2ludGVyICh0eXBpY2FsbHkgd2lsbCBiZWNvbWUKICAgICAgdGhlIHNlbGVjdGVkIHBhdGggd2hlbiB0aGUgdXNlciBjbGlja3MpLiAqLwogICAgICAuZm9yZWdyb3VuZCAucGVha2VkLXBhdGggewogICAgICAgIHN0cm9rZS13aWR0aDogMzsKICAgICAgfQoKICAgICAgLyogVGhlIGN1cnJlbnRseSBzZWxlY3RlZCBwYXRoIGNsYXNzLiBXZSB1c2UgIWltcG9ydGFudCB0byBvdmVycmlkZSB0aGUKICAgICAgICAgaW5saW5lIHN0eWxlIHRoYXQgc2V0cyB0aGUgcmVndWxhciBjb2xvciBvZiBhIHBhdGguICovCiAgICAgIC5mb3JlZ3JvdW5kIC5zZWxlY3RlZC1wYXRoIHsKICAgICAgICBzdHJva2Utd2lkdGg6IDMgIWltcG9ydGFudDsKICAgICAgICBzdHJva2U6ICMwZjAgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgI2NvbnRhaW5lciB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICBzdmcgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLmF4aXMgdGV4dCB7CiAgICAgICAgdGV4dC1zaGFkb3c6IHZhcigtLXRmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXBsb3QtYXhpcy1zaGFkb3cpOwogICAgICAgIGZpbGw6IGN1cnJlbnRDb2xvcjsKICAgICAgICBjdXJzb3I6IG1vdmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sZWgucHJvdG90eXBlLCJzZXNzaW9uR3JvdXBzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGVoLnByb3RvdHlwZSwib3B0aW9ucyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZWgucHJvdG90eXBlLCJzZWxlY3RlZFNlc3Npb25Hcm91cCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZWgucHJvdG90eXBlLCJjbG9zZXN0U2Vzc2lvbkdyb3VwIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLGVoLnByb3RvdHlwZSwicmVkcmF3Q291bnQiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxlaC5wcm90b3R5cGUsIl92YWxpZFNlc3Npb25Hcm91cHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZWgucHJvdG90eXBlLCJfaW50ZXJhY3Rpb25NYW5hZ2VyIix2b2lkIDApO0UoW0J0KCJvcHRpb25zLioiLCJzZXNzaW9uR3JvdXBzLioiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGVoLnByb3RvdHlwZSwiX29wdGlvbnNPclNlc3Npb25Hcm91cHNDaGFuZ2VkIixudWxsKTtlaD1FKFt5dCgidGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtcGxvdCIpXSxlaCk7dmFyIFAwPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMub3B0aW9ucz1udWxsfV9jb25maWd1cmF0aW9uQ2hhbmdlZCgpe2xldCB0PXRoaXMuY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hLHI9dGhpcy5jb25maWd1cmF0aW9uLnNjaGVtYSxuPShhLHMpPT4oe25hbWU6QmQoYSksaW5kZXg6cyxhYnNvbHV0ZUluZGV4OnpIKHIsdCxzKSxzY2FsZTp0aGlzLl9pc051bWVyaWNDb2x1bW4ocyk/IkxJTkVBUiI6Ik5PTl9OVU1FUklDIn0pLGk9KGEscyk9PntsZXQgbD1zK3QuaHBhcmFtSW5mb3MubGVuZ3RoO3JldHVybntzY2FsZToiTElORUFSIixuYW1lOlF1KGEpLGluZGV4OmwsYWJzb2x1dGVJbmRleDp6SChyLHQsbCl9fSxvPXtjb2x1bW5zOnQuaHBhcmFtSW5mb3MubWFwKG4pLmNvbmNhdCh0Lm1ldHJpY0luZm9zLm1hcChpKSksbWluQ29sb3I6IiMwMDAwRkYiLG1heENvbG9yOiIjRkYwMDAwIixjb25maWd1cmF0aW9uOnRoaXMuY29uZmlndXJhdGlvbn07dGhpcy5zZXQoIm9wdGlvbnMiLG8pLGNpKCksdGhpcy5zZXQoIm9wdGlvbnMuY29sb3JCeUNvbHVtbkluZGV4Iix0aGlzLl9kZWZhdWx0Q29sb3JCeUNvbHVtbkluZGV4KCkpfV91bnNlbGVjdERpc2FibGVkTG9nU2NhbGVzKCl7dGhpcy5vcHRpb25zIT09bnVsbCYmdGhpcy5vcHRpb25zLmNvbHVtbnMuZm9yRWFjaCh0PT57bGV0IHI9Im9wdGlvbnMuY29sdW1ucy4iK3QuaW5kZXg7IXRoaXMuX2FsbG93TG9nU2NhbGUodCkmJnQuc2NhbGU9PT0iTE9HIiYmdGhpcy5zZXQocisiLnNjYWxlIiwiTElORUFSIil9KX1fYWxsb3dMb2dTY2FsZSh0KXtpZighdGhpcy5faXNOdW1lcmljQ29sdW1uKHQuaW5kZXgpfHwhdGhpcy5zZXNzaW9uR3JvdXBzKXJldHVybiExO2xldFtyLG5dPV9QKHRoaXMuY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hLHRoaXMuc2Vzc2lvbkdyb3Vwcyx0LmluZGV4KTtyZXR1cm4gcj4wfHxuPDB9X2lzTnVtZXJpY0NvbHVtbih0KXtyZXR1cm4gdD49dGhpcy5jb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWEuaHBhcmFtSW5mb3MubGVuZ3RofHx0aGlzLmNvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYS5ocGFyYW1JbmZvc1t0XS50eXBlPT09IkRBVEFfVFlQRV9GTE9BVDY0In1fZGVmYXVsdENvbG9yQnlDb2x1bW5JbmRleCgpe2lmKHRoaXMuY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hLm1ldHJpY0luZm9zLmxlbmd0aD4wKXJldHVybiB0aGlzLmNvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYS5ocGFyYW1JbmZvcy5sZW5ndGg7bGV0IHQ9dGhpcy5jb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWEuaHBhcmFtSW5mb3MuZmluZEluZGV4KHI9PnIudHlwZT09PSJEQVRBX1RZUEVfRkxPQVQ2NCIpO2lmKHQhPT0tMSlyZXR1cm4gdH19O1AwLnRlbXBsYXRlPVFgCiAgICA8ZGl2IGNsYXNzPSJjb250cm9sLXBhbmVsIj4KICAgICAgPCEtLSAnQ29sb3IgYnknIGRyb3AgZG93biBtZW51IC0tPgogICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgIGxhYmVsPSJDb2xvciBieSIKICAgICAgICBpZD0iY29sb3JCeURyb3BEb3duTWVudSIKICAgICAgICBob3Jpem9udGFsLWFsaWduPSJsZWZ0IgogICAgICA+CiAgICAgICAgPHBhcGVyLWxpc3Rib3gKICAgICAgICAgIGNsYXNzPSJkcm9wZG93bi1jb250ZW50IgogICAgICAgICAgc2xvdD0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgIHNlbGVjdGVkPSJ7e29wdGlvbnMuY29sb3JCeUNvbHVtbkluZGV4fX0iCiAgICAgICAgICBpZD0iY29sb3JCeUxpc3RCb3giCiAgICAgICAgPgogICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICBpdGVtcz0iW1tvcHRpb25zLmNvbHVtbnNdXSIKICAgICAgICAgICAgYXM9ImNvbHVtbiIKICAgICAgICAgICAgaWQ9ImNvbG9yQnlDb2x1bW5UZW1wbGF0ZSIKICAgICAgICAgID4KICAgICAgICAgICAgPHBhcGVyLWl0ZW0gZGlzYWJsZWQ9IltbIV9pc051bWVyaWNDb2x1bW4oY29sdW1uLmluZGV4KV1dIj4KICAgICAgICAgICAgICBbW2NvbHVtbi5uYW1lXV0KICAgICAgICAgICAgPC9wYXBlci1pdGVtPgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KCiAgICAgIDwhLS0gQ29sdW1ucyBzY2FsZXMgLS0+CiAgICAgIDxkaXYgY2xhc3M9ImNvbHVtbnMtY29udGFpbmVyIj4KICAgICAgICA8IS0tIFNjYWxlIG9wdGlvbnMgZm9yIGVhY2ggbnVtZXJpYyBmZWF0dXJlIC0tPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Int7b3B0aW9ucy5jb2x1bW5zfX0iIGFzPSJjb2x1bW4iPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc051bWVyaWNDb2x1bW4oY29sdW1uLmluZGV4KV1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sdW1uIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2x1bW4tdGl0bGUiPltbY29sdW1uLm5hbWVdXTwvZGl2PgogICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tZ3JvdXAKICAgICAgICAgICAgICAgICAgY2xhc3M9InNjYWxlLXJhZGlvLWdyb3VwIgogICAgICAgICAgICAgICAgICBzZWxlY3RlZD0ie3tjb2x1bW4uc2NhbGV9fSIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBuYW1lPSJMSU5FQVIiPgogICAgICAgICAgICAgICAgICAgIExpbmVhcgogICAgICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgPCEtLSBUaGUgaWQgaGVyZSBpcyB1c2VkIHRvIGFjY2VzcyB0aGlzIGJ1dHRvbiBpbiB1bml0CiAgICAgICAgICAgICAgICAgICAgICAgdGVzdHMuLS0+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24KICAgICAgICAgICAgICAgICAgICBpZD0ibG9nU2NhbGVCdXR0b25fW1tjb2x1bW4ubmFtZV1dIgogICAgICAgICAgICAgICAgICAgIG5hbWU9IkxPRyIKICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD0iW1shX2FsbG93TG9nU2NhbGUoY29sdW1uLCBzZXNzaW9uR3JvdXBzLiopXV0iCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICBMb2dhcml0aG1pYwogICAgICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBuYW1lPSJRVUFOVElMRSI+CiAgICAgICAgICAgICAgICAgICAgUXVhbnRpbGUKICAgICAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWdyb3VwPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICAuY29udHJvbC1wYW5lbCB7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH0KICAgICAgLmNvbHVtbiB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgICAgIGJvcmRlcjogc29saWQgMXB4IGRhcmtncmF5OwogICAgICAgIHBhZGRpbmc6IDNweDsKICAgICAgfQogICAgICAuY29sdW1uLXRpdGxlIHsKICAgICAgICAvKiBGaXQgZXZlcnkgdGl0bGUgaW4gb25lIGxpbmUgc28gdGhlIHJhZGlvIGJveGVzIGFsaWduIHZlcnRpY2FsbHkuICovCiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgfQogICAgICAuY29sdW1ucy1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgfQogICAgICAuc2NhbGUtcmFkaW8tZ3JvdXAgcGFwZXItcmFkaW8tYnV0dG9uIHsKICAgICAgICBwYWRkaW5nOiAycHg7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgICAgcGFwZXItbGlzdGJveCB7CiAgICAgICAgbWF4LWhlaWdodDogMTVlbTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFAwLnByb3RvdHlwZSwiY29uZmlndXJhdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sUDAucHJvdG90eXBlLCJzZXNzaW9uR3JvdXBzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxQMC5wcm90b3R5cGUsIm9wdGlvbnMiLHZvaWQgMCk7RShbQnQoImNvbmZpZ3VyYXRpb24uKiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sUDAucHJvdG90eXBlLCJfY29uZmlndXJhdGlvbkNoYW5nZWQiLG51bGwpO0UoW0J0KCJzZXNzaW9uR3JvdXBzLioiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFAwLnByb3RvdHlwZSwiX3Vuc2VsZWN0RGlzYWJsZWRMb2dTY2FsZXMiLG51bGwpO1AwPUUoW3l0KCJ0Zi1ocGFyYW1zLXNjYWxlLWFuZC1jb2xvci1jb250cm9scyIpXSxQMCk7dmFyIGYxPWNsYXNzIGV4dGVuZHMgbXR7X2Nsb3Nlc3RPclNlbGVjdGVkKHQscil7cmV0dXJuIHQhPT1udWxsP3Q6cn19O2YxLnRlbXBsYXRlPVFgCiAgICA8IS0tIENvbnRyb2xzIGJlaGF2aW9yIG9mIHBhcmFsbGVsIGNvb3JkaW5hdGVzIHBsb3QKICAgICAgICAgb3V0cHV0cyBzZXQgb3B0aW9ucyB0byB0aGUgX29wdGlvbnMgcHJvcGVydHkuCiAgICAgIC0tPgogICAgPGhwYXJhbXMtc3BsaXQtbGF5b3V0IG9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCI+CiAgICAgIDwhLS0gVGhlIHNjYWxlIGFuZCBjb2xvciBjb250cm9scy4gLS0+CiAgICAgIDx0Zi1ocGFyYW1zLXNjYWxlLWFuZC1jb2xvci1jb250cm9scwogICAgICAgIGlkPSJjb250cm9scyIKICAgICAgICBzbG90PSJjb250ZW50IgogICAgICAgIGNsYXNzPSJzZWN0aW9uIgogICAgICAgIGNvbmZpZ3VyYXRpb249IltbY29uZmlndXJhdGlvbl1dIgogICAgICAgIHNlc3Npb24tZ3JvdXBzPSJbW3Nlc3Npb25Hcm91cHNdXSIKICAgICAgICBvcHRpb25zPSJ7e19vcHRpb25zfX0iCiAgICAgID4KICAgICAgPC90Zi1ocGFyYW1zLXNjYWxlLWFuZC1jb2xvci1jb250cm9scz4KICAgICAgPCEtLSBUaGUgYWN0dWFsIHBhcmFsbGVsIGNvb3JkaW5hdGVzIHBsb3QgLS0+CiAgICAgIDx0Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy1wbG90CiAgICAgICAgaWQ9InBsb3QiCiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICBzZXNzaW9uLWdyb3Vwcz0iW1tzZXNzaW9uR3JvdXBzXV0iCiAgICAgICAgc2VsZWN0ZWQtc2Vzc2lvbi1ncm91cD0ie3tfc2VsZWN0ZWRHcm91cH19IgogICAgICAgIGNsb3Nlc3Qtc2Vzc2lvbi1ncm91cD0ie3tfY2xvc2VzdEdyb3VwfX0iCiAgICAgICAgb3B0aW9ucz0iW1tfb3B0aW9uc11dIgogICAgICA+CiAgICAgIDwvdGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtcGxvdD4KICAgICAgPHRmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC12YWx1ZXMKICAgICAgICBpZD0idmFsdWVzIgogICAgICAgIHNsb3Q9ImNvbnRlbnQiCiAgICAgICAgY2xhc3M9InNlY3Rpb24iCiAgICAgICAgdmlzaWJsZS1zY2hlbWE9IltbY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hXV0iCiAgICAgICAgc2Vzc2lvbi1ncm91cD0iW1tfY2xvc2VzdE9yU2VsZWN0ZWQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Nsb3Nlc3RHcm91cCwgX3NlbGVjdGVkR3JvdXApXV0iCiAgICAgID4KICAgICAgPC90Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtdmFsdWVzPgogICAgICA8dGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHMKICAgICAgICBpZD0iZGV0YWlscyIKICAgICAgICBzbG90PSJjb250ZW50IgogICAgICAgIGNsYXNzPSJzZWN0aW9uIgogICAgICAgIGJhY2tlbmQ9IltbYmFja2VuZF1dIgogICAgICAgIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIgogICAgICAgIHNlc3Npb24tZ3JvdXA9IltbX3NlbGVjdGVkR3JvdXBdXSIKICAgICAgICB2aXNpYmxlLXNjaGVtYT0iW1tjb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWFdXSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC1kZXRhaWxzPgogICAgPC9ocGFyYW1zLXNwbGl0LWxheW91dD4KCiAgICA8c3R5bGU+CiAgICAgIC5zZWN0aW9uIHsKICAgICAgICBwYWRkaW5nOiAxMHB4OwogICAgICB9CiAgICAgICN2YWx1ZXMgewogICAgICAgIGhlaWdodDogMTE1cHg7CiAgICAgIH0KICAgICAgI2RldGFpbHMgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBtYXgtaGVpZ2h0OiBmaXQtY29udGVudDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGYxLnByb3RvdHlwZSwiYmFja2VuZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxmMS5wcm90b3R5cGUsImV4cGVyaW1lbnROYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGYxLnByb3RvdHlwZSwiY29uZmlndXJhdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sZjEucHJvdG90eXBlLCJzZXNzaW9uR3JvdXBzIix2b2lkIDApO2YxPUUoW3l0KCJ0Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy12aWV3IildLGYxKTt2YXIgeTM9RWUoT2UoKSwxKTt2YXIgJG89Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuc2VsZWN0ZWRTZXNzaW9uR3JvdXA9bnVsbCx0aGlzLmNsb3Nlc3RTZXNzaW9uR3JvdXA9bnVsbCx0aGlzLl9jb250YWluZXI9bnVsbCx0aGlzLl9zdmc9bnVsbCx0aGlzLndpZHRoPTAsdGhpcy5oZWlnaHQ9MCx0aGlzLl9icnVzaGVkQ2VsbEluZGV4PW51bGwsdGhpcy5fYnJ1c2hTZWxlY3Rpb249bnVsbH1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5fY29udGFpbmVyPXRoaXMuJC5jb250YWluZXIsdGhpcy5fc3ZnPUh0KHRoaXMuJC5zdmcpLHRoaXMuX3JlZHJhdygpfV9zZXNzaW9uR3JvdXBzQ2hhbmdlZCgpe3RoaXMuc2VsZWN0ZWRTZXNzaW9uR3JvdXAhPT1udWxsJiYodGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cD1mY3QodGhpcy5zZXNzaW9uR3JvdXBzLHRoaXMuc2VsZWN0ZWRTZXNzaW9uR3JvdXAubmFtZSl8fG51bGwpLHRoaXMuX3JlZHJhdygpfV92aXNpYmxlU2NoZW1hQ2hhbmdlZCgpe3RoaXMuX2JydXNoZWRDZWxsSW5kZXg9bnVsbCx0aGlzLl9icnVzaFNlbGVjdGlvbj1udWxsLHRoaXMuX3JlZHJhdygpfV9yZWRyYXcoKXt0aGlzLmRlYm91bmNlKCJfcmVkcmF3IiwoKT0+e2xldCB0PXVzLHI9MTIwMCxuPS40KnIsaT0xNTAsbz0uNzUqaTt0aGlzLndpZHRoPU1hdGgubWF4KGkqdC5udW1WaXNpYmxlQ29sdW1ucyh0aGlzLnZpc2libGVTY2hlbWEpLHIpLHRoaXMuaGVpZ2h0PU1hdGgubWF4KG8qdC5udW1WaXNpYmxlTWV0cmljcyh0aGlzLnZpc2libGVTY2hlbWEpLG4pLHRoaXMuX2NvbnRhaW5lci5zdHlsZS53aWR0aD10aGlzLndpZHRoKyJweCIsdGhpcy5fY29udGFpbmVyLnN0eWxlLmhlaWdodD10aGlzLmhlaWdodCsicHgiLHRoaXMuX3N2Zy5hdHRyKCJ3aWR0aCIsdGhpcy53aWR0aCkuYXR0cigiaGVpZ2h0Iix0aGlzLmhlaWdodCksdGhpcy5fc3ZnLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpLHRoaXMuX2RyYXcoKX0sMTAwKX1fZHJhdygpe2xldCB0PXVzLHI9dGhpcztpZighdGhpcy5zZXNzaW9uR3JvdXBzfHx0aGlzLnNlc3Npb25Hcm91cHMubGVuZ3RoPT0wfHwhdGhpcy52aXNpYmxlU2NoZW1hfHx0aGlzLnZpc2libGVTY2hlbWEubWV0cmljSW5mb3MubGVuZ3RoPT0wKXJldHVybjtsZXQgbj1Jcih0Lm51bVZpc2libGVDb2x1bW5zKHIudmlzaWJsZVNjaGVtYSkpLGk9SXIodC5udW1WaXNpYmxlTWV0cmljcyhyLnZpc2libGVTY2hlbWEpKSxvPTgwLGE9NTAscz01LGw9dGcoKS5kb21haW4obikucmFuZ2UoW28rcyx0aGlzLndpZHRoLTEtc10pLnBhZGRpbmdJbm5lciguMSksYz10ZygpLmRvbWFpbihpKS5yYW5nZShbdGhpcy5oZWlnaHQtMS1zLWEsc10pLnBhZGRpbmdJbm5lciguMSksdT1sLmJhbmR3aWR0aCgpLGg9Yy5iYW5kd2lkdGgoKSxmPW4ubWFwKGN0PT5yLl9jZWxsU2NhbGUoY3QsWzAsdS0xXSkpLHA9aS5tYXAoY3Q9PnIuX2NlbGxTY2FsZShjdCt0Lm51bVZpc2libGVIUGFyYW1zKHIudmlzaWJsZVNjaGVtYSksW2gtMSwwXSkpLGQ9dGhpcy5fc3ZnLnNlbGVjdEFsbCgiLngtYXhpcyIpLmRhdGEobikuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ4LWF4aXMiLCEwKS5hdHRyKCJ0cmFuc2Zvcm0iLGN0PT50LnRyYW5zbGF0ZVN0cihsKGN0KSwwKSk7ZnVuY3Rpb24gZyhjdCl7cmV0dXJuIngtYXhpcy1jbGlwLXBhdGgtIitjdH1mdW5jdGlvbiBfKGN0KXtyZXR1cm4ieC1sYWJlbC1jbGlwLXBhdGgtIitjdH1kLmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsZykuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsLXMpLmF0dHIoInkiLDApLmF0dHIoIndpZHRoIix1KzIqcykuYXR0cigiaGVpZ2h0IixyLmhlaWdodC1hLzIpLGQuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIixfKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IixyLmhlaWdodC1hLzIpLmF0dHIoIndpZHRoIix1KS5hdHRyKCJoZWlnaHQiLGEvMiksZC5hcHBlbmQoImciKS5hdHRyKCJjbGlwLXBhdGgiLGN0PT4idXJsKCMiK2coY3QpKyIpIikuZWFjaChmdW5jdGlvbihjdCl7SHQodGhpcykuY2FsbChTLFo5KGZbY3RdKS50aWNrU2l6ZShyLmhlaWdodC1hKSx1LDQwLHIub3B0aW9ucy5jb2x1bW5zW2N0XS5zY2FsZSl9KSxkLmFwcGVuZCgiZyIpLmNsYXNzZWQoIngtYXhpcy1sYWJlbCIsITApLmF0dHIoImNsaXAtcGF0aCIsY3Q9PiJ1cmwoIyIrXyhjdCkrIikiKS5hcHBlbmQoInRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoIngiLHUvMikuYXR0cigieSIsci5oZWlnaHQtMS1hLzQpLnRleHQoY3Q9PnQuc2NoZW1hVmlzaWJsZUNvbHVtbk5hbWUoci52aXNpYmxlU2NoZW1hLGN0KSkuYXBwZW5kKCJ0aXRsZSIpLnRleHQoY3Q9PnQuc2NoZW1hVmlzaWJsZUNvbHVtbk5hbWUoci52aXNpYmxlU2NoZW1hLGN0KSk7bGV0IHk9dGhpcy5fc3ZnLnNlbGVjdEFsbCgiLnktYXhpcyIpLmRhdGEoaSkuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ5LWF4aXMiLCEwKS5hdHRyKCJ0cmFuc2Zvcm0iLGN0PT50LnRyYW5zbGF0ZVN0cihyLndpZHRoLTEsYyhjdCkpKTtmdW5jdGlvbiB4KGN0KXtyZXR1cm4ieS1heGlzLWNsaXAtcGF0aC0iK2N0fWZ1bmN0aW9uIGIoY3Qpe3JldHVybiJ5LWxhYmVsLWNsaXAtcGF0aC0iK2N0fXkuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIix4KS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtKHIud2lkdGgtby8yLTEpKS5hdHRyKCJ5IiwtcykuYXR0cigid2lkdGgiLHIud2lkdGgtby8yKS5hdHRyKCJoZWlnaHQiLGgrMipzKSx5LmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsYikuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsLShyLndpZHRoLTEpKS5hdHRyKCJ5IiwwKS5hdHRyKCJ3aWR0aCIsby8yKS5hdHRyKCJoZWlnaHQiLGgpLHkuYXBwZW5kKCJnIikuYXR0cigiY2xpcC1wYXRoIixjdD0+InVybCgjIit4KGN0KSsiKSIpLmVhY2goZnVuY3Rpb24oY3Qpe0h0KHRoaXMpLmNhbGwoUyxsYihwW2N0XSkudGlja1NpemUoci53aWR0aC1vKSxoLDIwLHIub3B0aW9ucy5jb2x1bW5zW2N0K3QubnVtVmlzaWJsZUhQYXJhbXMoci52aXNpYmxlU2NoZW1hKV0uc2NhbGUpfSkseS5hcHBlbmQoImciKS5jbGFzc2VkKCJ5LWF4aXMtbGFiZWwiLCEwKS5hdHRyKCJjbGlwLXBhdGgiLGN0PT4idXJsKCMiK2IoY3QpKyIpIikuYXBwZW5kKCJ0ZXh0IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJ4IiwtKHIud2lkdGgtby80LTEpKS5hdHRyKCJ5IixoLzIpLmF0dHIoInRyYW5zZm9ybSIsdC5yb3RhdGVTdHIoOTAsLShyLndpZHRoLW8vNC0xKSxoLzIpKS50ZXh0KGN0PT50Lm1ldHJpY05hbWUoci52aXNpYmxlU2NoZW1hLm1ldHJpY0luZm9zW2N0XSkpLmFwcGVuZCgidGl0bGUiKS50ZXh0KGN0PT50Lm1ldHJpY05hbWUoci52aXNpYmxlU2NoZW1hLm1ldHJpY0luZm9zW2N0XSkpO2Z1bmN0aW9uIFMoY3QsWCxldCxkdCxxKXtsZXQgcHQ9TWF0aC5mbG9vcihldC9kdCksaHQ9WC5zY2FsZSgpO2lmKHE9PT0iUVVBTlRJTEUiKXtsZXQgd3Q9aHQucXVhbnRpbGVzKCksa3Q9TWF0aC5jZWlsKHd0Lmxlbmd0aC9wdCk7d3Q9SXIoMCx3dC5sZW5ndGgsa3QpLm1hcChpZT0+d3RbaWVdKSxYLnRpY2tWYWx1ZXMod3QpLnRpY2tGb3JtYXQoeG4oIi0uMmciKSl9KHE9PT0iTElORUFSInx8cT09PSJMT0ciKSYmWC50aWNrcyhwdCksY3QuY2FsbChYKSxjdC5zZWxlY3RBbGwoIi5kb21haW4iKS5yZW1vdmUoKSxjdC5zZWxlY3RBbGwoIi50aWNrIGxpbmUiKS5hdHRyKCJzdHJva2UiLCIjZGRkIil9bGV0IEM9dGhpcy5fc3ZnLnNlbGVjdEFsbCgiLmNlbGwiKS5kYXRhKHE5KG4saSkpLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiY2VsbCIsITApLmF0dHIoInRyYW5zZm9ybSIsKFtjdCxYXSk9PnQudHJhbnNsYXRlU3RyKGwoY3QpLGMoWCkpKSxQPUMuYXBwZW5kKCJnIikuY2xhc3NlZCgiZnJhbWUiLCEwKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtcykuYXR0cigieSIsLXMpLmF0dHIoIndpZHRoIix1KzIqcykuYXR0cigiaGVpZ2h0IixoKzIqcykuYXR0cigic3Ryb2tlIiwiIzAwMCIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpLGs9bnVsbDtyLm9wdGlvbnMuY29sb3JCeUNvbHVtbkluZGV4IT09dm9pZCAwJiYoaz16bigpLmRvbWFpbih0aGlzLl9jb2xFeHRlbnQodGhpcy5vcHRpb25zLmNvbG9yQnlDb2x1bW5JbmRleCkpLnJhbmdlKFt0aGlzLm9wdGlvbnMubWluQ29sb3IsdGhpcy5vcHRpb25zLm1heENvbG9yXSkuaW50ZXJwb2xhdGUoRV8pKTtsZXQgTz1yLm9wdGlvbnMuY29sb3JCeUNvbHVtbkluZGV4PT09dm9pZCAwPygpPT4icmVkIjooe3Nlc3Npb25Hcm91cDpjdH0pPT5rKHRoaXMuX2NvbFZhbHVlKGN0LHIub3B0aW9ucy5jb2xvckJ5Q29sdW1uSW5kZXgpKTtmdW5jdGlvbiBEKGN0LFgpe3JldHVybiBmW1hdKHIuX2NvbFZhbHVlKGN0LFgpKX1mdW5jdGlvbiBCKGN0LFgpe3JldHVybiBwW1hdKHIuX21ldHJpY1ZhbHVlKGN0LFgpKX1mdW5jdGlvbiBJKGN0LFgpe2xldCBldD1jdC5zZWxlY3RBbGwoIi5kYXRhLW1hcmtlciIpLmRhdGEoKFtwdCxodF0pPT5yLnNlc3Npb25Hcm91cHMuZmlsdGVyKHd0PT5yLl9jb2xWYWx1ZSh3dCxwdCkhPT12b2lkIDAmJnIuX21ldHJpY1ZhbHVlKHd0LGh0KSE9PXZvaWQgMCkubWFwKHd0PT4oe2NvbDpwdCxtZXRyaWM6aHQsc2Vzc2lvbkdyb3VwOnd0LHg6RCh3dCxwdCkseTpCKHd0LGh0KSxzZXNzaW9uR3JvdXBNYXJrZXJzOm51bGx9KSkpLmVudGVyKCkuYXBwZW5kKCJjaXJjbGUiKS5jbGFzc2VkKCJkYXRhLW1hcmtlciIsITApLmF0dHIoImN4Iiwoe3g6cHR9KT0+cHQpLmF0dHIoImN5Iiwoe3k6cHR9KT0+cHQpLmF0dHIoInIiLDIpLmF0dHIoImZpbGwiLFgpLGR0PW5ldyBNYXA7ci5zZXNzaW9uR3JvdXBzLmZvckVhY2gocHQ9PntkdC5zZXQocHQsW10pfSksZXQuZWFjaChmdW5jdGlvbihwdCl7dmFyIGh0OyhodD1kdC5nZXQocHQuc2Vzc2lvbkdyb3VwKSk9PW51bGx8fGh0LnB1c2godGhpcyl9KSxldC5lYWNoKHB0PT57bGV0IGh0PWR0LmdldChwdC5zZXNzaW9uR3JvdXApO3B0LnNlc3Npb25Hcm91cE1hcmtlcnM9bmV3IFNldChodCl9KTtsZXQgcT1uLm1hcChwdD0+aS5tYXAoaHQ9PmV0LmZpbHRlcih3dD0+d3QuY29sPT1wdCYmd3QubWV0cmljPT1odCkpKTtyZXR1cm5bZXQscSxkdF19bGV0W0wsUixGXT1JKEMuYXBwZW5kKCJnIiksTyk7ZnVuY3Rpb24geihjdCxYKXtsZXQgZXQ9W107cmV0dXJuIFJbY3RdW1hdLmVhY2goZnVuY3Rpb24oKXtldC5wdXNoKHRoaXMpfSksRmgoKS54KGR0PT5IdChkdCkuZGF0dW0oKS54KS55KGR0PT5IdChkdCkuZGF0dW0oKS55KS5hZGRBbGwoZXQpfWxldCBVPW4ubWFwKGN0PT5pLm1hcChYPT56KGN0LFgpKSksVz1udWxsO2J0KCkmJihXPUMuZmlsdGVyKGN0PT55My5pc0VxdWFsKGN0LHIuX2JydXNoZWRDZWxsSW5kZXgpKSxjb25zb2xlLmFzc2VydChXLnNpemUoKT09MSxXKSk7bGV0IFo9bmV3IFNldChMLm5vZGVzKCkpO3J0KCk7ZnVuY3Rpb24gcnQoKXtsZXQgY3Q9bmV3IFNldChMLm5vZGVzKCkpO010KCl8fChjdD1vdChyLl9icnVzaGVkQ2VsbEluZGV4LHIuX2JydXNoU2VsZWN0aW9uKSksVHAoQXJyYXkuZnJvbSh0LmZpbHRlclNldChjdCxYPT4hWi5oYXMoWCkpKSkuYXR0cigiZmlsbCIsTyksVHAoQXJyYXkuZnJvbSh0LmZpbHRlclNldChaLFg9PiFjdC5oYXMoWCkpKSkuYXR0cigiZmlsbCIsIiNkZGQiKSxaPWN0fWZ1bmN0aW9uIG90KGN0LFgpe2NvbnNvbGUuYXNzZXJ0KGN0IT09bnVsbCksY29uc29sZS5hc3NlcnQoWCE9PW51bGwpO2xldFtldCxkdF09Y3QscT1uZXcgU2V0O3JldHVybiB0LnF1YWRUcmVlVmlzaXRQb2ludHNJblJlY3QoVVtldF1bZHRdLFhbMF1bMF0sWFswXVsxXSxYWzFdWzBdLFhbMV1bMV0scHQ9PntIdChwdCkuZGF0dW0oKS5zZXNzaW9uR3JvdXBNYXJrZXJzLmZvckVhY2god3Q9PntxLmFkZCh3dCl9KX0pLHF9bGV0IHN0PUdMKCkuZXh0ZW50KFtbLXMrMSwtcysxXSxbdS0xK3MtMSxoLTErcy0xXV0pLm9uKCJzdGFydCIsZnVuY3Rpb24oKXtidCgpJiZXLm5vZGUoKSE9dGhpcyYmc3QubW92ZShXLG51bGwpLFN0KHRoaXMpfSkub24oImJydXNoIixmdW5jdGlvbigpe1N0KHRoaXMpfSkub24oImVuZCIsZnVuY3Rpb24oKXtTdCh0aGlzKX0pO2Z1bmN0aW9uIFN0KGN0KXtsZXQgWD1VTChjdCk7IWJ0KCkmJlg9PT1udWxsfHxidCgpJiZjdD09PVcubm9kZSgpJiZ5My5pc0VxdWFsKFgsci5fYnJ1c2hTZWxlY3Rpb24pfHwoci5fYnJ1c2hTZWxlY3Rpb249WCxYIT09bnVsbD8oVz1IdChjdCksci5fYnJ1c2hlZENlbGxJbmRleD1XLmRhdHVtKCkpOihXPW51bGwsci5fYnJ1c2hlZENlbGxJbmRleD1udWxsKSxydCgpKX1mdW5jdGlvbiBidCgpe3JldHVybiByLl9icnVzaGVkQ2VsbEluZGV4IT09bnVsbCYmci5fYnJ1c2hTZWxlY3Rpb24hPT1udWxsfWZ1bmN0aW9uIE10KCl7cmV0dXJuIWJ0KCl8fHIuX2JydXNoU2VsZWN0aW9uWzBdWzBdPT09ci5fYnJ1c2hTZWxlY3Rpb25bMV1bMF18fHIuX2JydXNoU2VsZWN0aW9uWzBdWzFdPT09ci5fYnJ1c2hTZWxlY3Rpb25bMV1bMV19Qy5jYWxsKHN0KSxidCgpJiZzdC5tb3ZlKFcsci5fYnJ1c2hTZWxlY3Rpb24pO2xldCBsdD1udWxsLEt0PW51bGw7dGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cCE9PW51bGwmJihLdD1UcChGLmdldCh0aGlzLnNlbGVjdGVkU2Vzc2lvbkdyb3VwKSkuY2xhc3NlZCgic2VsZWN0ZWQtbWFya2VyIiwhMCkpLEMub24oImNsaWNrIixmdW5jdGlvbigpe2xldCBjdD1sdD09PUt0P251bGw6bHQ7aWYoY3Q9PT1LdClyZXR1cm47S3QhPT1udWxsJiZLdC5jbGFzc2VkKCJzZWxlY3RlZC1tYXJrZXIiLCExKSxLdD1jdCxLdCE9PW51bGwmJkt0LmNsYXNzZWQoInNlbGVjdGVkLW1hcmtlciIsITApO2xldCBYPUt0PT09bnVsbD9udWxsOkt0LmRhdHVtKCkuc2Vzc2lvbkdyb3VwO3Iuc2VsZWN0ZWRTZXNzaW9uR3JvdXA9WH0pLm9uKCJtb3VzZW1vdmUgbW91c2VlbnRlciIsZnVuY3Rpb24oW2N0LFhdKXtsZXRbZXQsZHRdPXpvKHRoaXMpLHE9X3QoY3QsWCxldCxkdCwyMCk7bHQhPT1xJiYobHQhPT1udWxsJiZsdC5jbGFzc2VkKCJjbG9zZXN0LW1hcmtlciIsITEpLGx0PXEsbHQhPT1udWxsPyhsdC5jbGFzc2VkKCJjbG9zZXN0LW1hcmtlciIsITApLHIuY2xvc2VzdFNlc3Npb25Hcm91cD1sdC5kYXR1bSgpLnNlc3Npb25Hcm91cCk6ci5jbG9zZXN0U2Vzc2lvbkdyb3VwPW51bGwpfSkub24oIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKFtjdCxYXSl7bHQhPT1udWxsJiYobHQuY2xhc3NlZCgiY2xvc2VzdC1tYXJrZXIiLCExKSxsdD1udWxsLHIuY2xvc2VzdFNlc3Npb25Hcm91cD1udWxsKX0pO2Z1bmN0aW9uIF90KGN0LFgsZXQsZHQscSl7bGV0IHB0PTEvMCxodD1udWxsO3JldHVybiB0LnF1YWRUcmVlVmlzaXRQb2ludHNJbkRpc2soVVtjdF1bWF0sZXQsZHQscSwod3Qsa3QpPT57aWYoWi5oYXMod3QpJiZrdDxwdCl7bGV0IGllPUh0KHd0KS5kYXR1bSgpO3B0PWt0LGh0PWllLnNlc3Npb25Hcm91cH19KSxodD09PW51bGw/bnVsbDpUcChGLmdldChodCkpfXRoaXMuX3N2Zy5zZWxlY3RBbGwoIioiKS5jbGFzc2VkKCJ0Zi1ocGFyYW1zLXNjYXR0ZXItcGxvdC1tYXRyaXgtcGxvdCIsITApfV9jZWxsU2NhbGUodCxyKXtsZXQgbj10aGlzLl9jb2xFeHRlbnQodCksaT16bigpLmRvbWFpbihuKS5yYW5nZShyKTtpZih0aGlzLm9wdGlvbnMuY29sdW1uc1t0XS5zY2FsZT09PSJMSU5FQVIiKXJldHVybiBpO2lmKHRoaXMub3B0aW9ucy5jb2x1bW5zW3RdLnNjYWxlPT09IkxPRyIpcmV0dXJuIG5bMF08PTAmJm5bMV0+PTA/aTpjYygpLmRvbWFpbihuKS5yYW5nZShyKTtpZih0aGlzLm9wdGlvbnMuY29sdW1uc1t0XS5zY2FsZT09PSJRVUFOVElMRSIpe2xldCBvPShyWzFdLXJbMF0pLzE5LGE9SXIoMjApLm1hcChzPT5yWzBdK28qcyk7cmV0dXJuIHJnKCkuZG9tYWluKHkzLnVuaXEodGhpcy5zZXNzaW9uR3JvdXBzLm1hcChzPT50aGlzLl9jb2xWYWx1ZShzLHQpKSkpLnJhbmdlKGEpfWVsc2V7aWYodGhpcy5vcHRpb25zLmNvbHVtbnNbdF0uc2NhbGU9PT0iTk9OX05VTUVSSUMiKXJldHVybiBlZygpLmRvbWFpbih5My51bmlxKHRoaXMuc2Vzc2lvbkdyb3Vwcy5tYXAobz0+dGhpcy5fY29sVmFsdWUobyx0KSkuc29ydCgpKSkucmFuZ2UocikucGFkZGluZyguMSk7dGhyb3ciVW5rbm93biBzY2FsZSBmb3IgY29sdW1uOiAiK3QrIi4gb3B0aW9uczogIit0aGlzLm9wdGlvbnN9fV9jb2xWYWx1ZSh0LHIpe3JldHVybiBCSCh0aGlzLnZpc2libGVTY2hlbWEsdCxyKX1fbWV0cmljVmFsdWUodCxyKXtyZXR1cm4gRkgodGhpcy52aXNpYmxlU2NoZW1hLHQscil9X2NvbEV4dGVudCh0KXtyZXR1cm4gX1AodGhpcy52aXNpYmxlU2NoZW1hLHRoaXMuc2Vzc2lvbkdyb3Vwcyx0KX19OyRvLnRlbXBsYXRlPVFgCiAgICA8ZGl2IGlkPSJjb250YWluZXIiPgogICAgICA8c3ZnIGlkPSJzdmciPjwvc3ZnPgogICAgPC9kaXY+CgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgICAgc3ZnIHsKICAgICAgICBmb250OiAxMHB4IHNhbnMtc2VyaWY7CiAgICAgIH0KCiAgICAgIHRleHQgewogICAgICAgIGZpbGw6IGN1cnJlbnRDb2xvcjsKICAgICAgfQoKICAgICAgLmZyYW1lIHJlY3QgewogICAgICAgIHN0cm9rZTogY3VycmVudENvbG9yOwogICAgICB9CgogICAgICAvKiBUaGUgY2xvc2VzdCBkYXRhIHBvaW50IG1hcmtlciB0byB0aGUgbW91c2UgcG9pbnRlci4gV2UgdXNlICFpbXBvcnRhbnQKICAgICAgICAgdG8gb3ZlcnJpZGUgdGhlIGlubGluZSBzdHlsZSB0aGF0IHNldHMgdGhlIHJlZ3VsYXIgc3R5bGUgb2YgYSBtYXJrZXIuCiAgICAgICovCiAgICAgIC5jbG9zZXN0LW1hcmtlciB7CiAgICAgICAgcjogNiAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAvKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIGRhdGEgcG9pbnQgbWFya2VyLiBXZSB1c2UgIWltcG9ydGFudCB0bwogICAgICAgICBvdmVycmlkZSB0aGUgaW5saW5lIHN0eWxlIHRoYXQgc2V0cyB0aGUgcmVndWxhciBzdHlsZSBvZiBhIG1hcmtlci4gKi8KICAgICAgLnNlbGVjdGVkLW1hcmtlciB7CiAgICAgICAgcjogNiAhaW1wb3J0YW50OwogICAgICAgIGZpbGw6ICMwZjAgIWltcG9ydGFudDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLCRvLnByb3RvdHlwZSwidmlzaWJsZVNjaGVtYSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sJG8ucHJvdG90eXBlLCJzZXNzaW9uR3JvdXBzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLCRvLnByb3RvdHlwZSwib3B0aW9ucyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJG8ucHJvdG90eXBlLCJzZWxlY3RlZFNlc3Npb25Hcm91cCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJG8ucHJvdG90eXBlLCJjbG9zZXN0U2Vzc2lvbkdyb3VwIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEhUTUxFbGVtZW50KV0sJG8ucHJvdG90eXBlLCJfY29udGFpbmVyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLCRvLnByb3RvdHlwZSwiX3N2ZyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSwkby5wcm90b3R5cGUsIndpZHRoIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLCRvLnByb3RvdHlwZSwiaGVpZ2h0Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLCRvLnByb3RvdHlwZSwiX2JydXNoZWRDZWxsSW5kZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJG8ucHJvdG90eXBlLCJfYnJ1c2hTZWxlY3Rpb24iLHZvaWQgMCk7RShbQnQoInNlc3Npb25Hcm91cHMuKiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sJG8ucHJvdG90eXBlLCJfc2Vzc2lvbkdyb3Vwc0NoYW5nZWQiLG51bGwpO0UoW0J0KCJ2aXNpYmxlU2NoZW1hLioiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLCRvLnByb3RvdHlwZSwiX3Zpc2libGVTY2hlbWFDaGFuZ2VkIixudWxsKTtFKFtCdCgib3B0aW9ucy4qIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSwkby5wcm90b3R5cGUsIl9yZWRyYXciLG51bGwpOyRvPUUoW3l0KCJ0Zi1ocGFyYW1zLXNjYXR0ZXItcGxvdC1tYXRyaXgtcGxvdCIpXSwkbyk7dmFyIHAxPWNsYXNzIGV4dGVuZHMgbXR7X2Nsb3Nlc3RPclNlbGVjdGVkKHQscil7cmV0dXJuIHQhPT1udWxsP3Q6cn19O3AxLnRlbXBsYXRlPVFgCiAgICA8aHBhcmFtcy1zcGxpdC1sYXlvdXQgb3JpZW50YXRpb249InZlcnRpY2FsIj4KICAgICAgPCEtLSBDb250cm9scyBiZWhhdmlvciBvZiB0aGUgc2NhdHRlciBwbG90IG1hdHJpeAogICAgICAgICAgICAgb3V0cHV0cyB0aGUgY29uZmlndXJlZCBvcHRpb25zIHRvIHRoZSBfb3B0aW9ucyBwcm9wZXJ0eS4gLS0+CiAgICAgIDx0Zi1ocGFyYW1zLXNjYWxlLWFuZC1jb2xvci1jb250cm9scwogICAgICAgIHNsb3Q9ImNvbnRlbnQiCiAgICAgICAgY2xhc3M9InNlY3Rpb24iCiAgICAgICAgaWQ9ImNvbnRyb2xzIgogICAgICAgIGNvbmZpZ3VyYXRpb249IltbY29uZmlndXJhdGlvbl1dIgogICAgICAgIHNlc3Npb24tZ3JvdXBzPSJbW3Nlc3Npb25Hcm91cHNdXSIKICAgICAgICBvcHRpb25zPSJ7e19vcHRpb25zfX0iCiAgICAgID4KICAgICAgPC90Zi1ocGFyYW1zLXNjYWxlLWFuZC1jb2xvci1jb250cm9scz4KICAgICAgPCEtLSBUaGUgYWN0dWFsIHNjYXR0ZXIgcGxvdCBtYXRyaXggLS0+CiAgICAgIDx0Zi1ocGFyYW1zLXNjYXR0ZXItcGxvdC1tYXRyaXgtcGxvdAogICAgICAgIHNsb3Q9ImNvbnRlbnQiCiAgICAgICAgY2xhc3M9InNlY3Rpb24iCiAgICAgICAgaWQ9InBsb3QiCiAgICAgICAgdmlzaWJsZS1zY2hlbWE9IltbY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hXV0iCiAgICAgICAgc2Vzc2lvbi1ncm91cHM9Iltbc2Vzc2lvbkdyb3Vwc11dIgogICAgICAgIHNlbGVjdGVkLXNlc3Npb24tZ3JvdXA9Int7X3NlbGVjdGVkR3JvdXB9fSIKICAgICAgICBjbG9zZXN0LXNlc3Npb24tZ3JvdXA9Int7X2Nsb3Nlc3RHcm91cH19IgogICAgICAgIG9wdGlvbnM9IltbX29wdGlvbnNdXSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC1wbG90PgogICAgICA8dGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLXZhbHVlcwogICAgICAgIHNsb3Q9ImNvbnRlbnQiCiAgICAgICAgY2xhc3M9InNlY3Rpb24iCiAgICAgICAgaWQ9InZhbHVlcyIKICAgICAgICB2aXNpYmxlLXNjaGVtYT0iW1tjb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWFdXSIKICAgICAgICBzZXNzaW9uLWdyb3VwPSJbW19jbG9zZXN0T3JTZWxlY3RlZCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Nsb3Nlc3RHcm91cCwgX3NlbGVjdGVkR3JvdXApXV0iCiAgICAgID4KICAgICAgPC90Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtdmFsdWVzPgogICAgICA8IS0tIFNob3dzIHNlc3Npb24gZ3JvdXAgZGV0YWlscyBmb3IgdGhlIGNsaWNrZWQgbWFya2VyLiAtLT4KICAgICAgPHRmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC1kZXRhaWxzCiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICBpZD0iZGV0YWlscyIKICAgICAgICBiYWNrZW5kPSJbW2JhY2tlbmRdXSIKICAgICAgICBleHBlcmltZW50LW5hbWU9IltbZXhwZXJpbWVudE5hbWVdXSIKICAgICAgICBzZXNzaW9uLWdyb3VwPSJbW19zZWxlY3RlZEdyb3VwXV0iCiAgICAgICAgdmlzaWJsZS1zY2hlbWE9IltbY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hXV0iCiAgICAgID4KICAgICAgPC90Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtZGV0YWlscz4KICAgIDwvaHBhcmFtcy1zcGxpdC1sYXlvdXQ+CiAgICA8c3R5bGU+CiAgICAgIC5zZWN0aW9uIHsKICAgICAgICBwYWRkaW5nOiAxMHB4OwogICAgICB9CiAgICAgICNjb250cm9scyB7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgbWF4LWhlaWdodDogZml0LWNvbnRlbnQ7CiAgICAgIH0KICAgICAgI3Bsb3QgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBmbGV4LWJhc2lzOiBhdXRvOwogICAgICAgIGhlaWdodDogYXV0bzsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG1heC1oZWlnaHQ6IGZpdC1jb250ZW50OwogICAgICB9CiAgICAgICN2YWx1ZXMgewogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBmbGV4LWJhc2lzOiBhdXRvOwogICAgICAgIGhlaWdodDogMTE1cHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBtYXgtaGVpZ2h0OiBmaXQtY29udGVudDsKICAgICAgfQogICAgICAjZGV0YWlscyB7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIGZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgbWF4LWhlaWdodDogZml0LWNvbnRlbnQ7CiAgICAgIH0KICAgICAgdmFhZGluLXNwbGl0LWxheW91dCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0scDEucHJvdG90eXBlLCJiYWNrZW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHAxLnByb3RvdHlwZSwiZXhwZXJpbWVudE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0scDEucHJvdG90eXBlLCJjb25maWd1cmF0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxwMS5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCk7cDE9RShbeXQoInRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC12aWV3IildLHAxKTt2YXIgJGY9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fc2VsZWN0ZWRUYWI9MCx0aGlzLl90YWJsZVRhYkNsaWNrZWQ9KCk9Pnt0aGlzLmxvZ0FjdGlvbigiVGFiIENsaWNrZWQiLCJUYWJsZSIpfSx0aGlzLl9wYXJhbGxlbENvb3Jkc1RhYkNsaWNrZWQ9KCk9Pnt0aGlzLmxvZ0FjdGlvbigiVGFiIENsaWNrZWQiLCJQYXJhbGxlbCBDb29yZHMiKX0sdGhpcy5fc2NhdHRlclBsb3RNYXRyaXhUYWJDbGlja2VkPSgpPT57dGhpcy5sb2dBY3Rpb24oIlRhYiBDbGlja2VkIiwiU2NhdHRlciBQbG90IE1hdHJpeCIpfSx0aGlzLmxvZ0FjdGlvbj0odCxyKT0+e2xldCBuPXdpbmRvdy5kYXRhTGF5ZXJ8fFtdO2Z1bmN0aW9uIGkoKXtuLnB1c2goYXJndW1lbnRzKX1pKCJldmVudCIsdCx7ZXZlbnRfY2F0ZWdvcnk6IkhQYXJhbXMiLGV2ZW50X2xhYmVsOnJ9KX0sdGhpcy5sb2dBY3Rpb24oIlBsdWdpbiBMb2FkIil9fTskZi50ZW1wbGF0ZT1RYAogICAgPHBhcGVyLWhlYWRlci1wYW5lbD4KICAgICAgPHBhcGVyLXRvb2xiYXIgc2xvdD0iaGVhZGVyIiBjbGFzcz0idGFiLWJhciI+CiAgICAgICAgPHBhcGVyLXRhYnMgc2VsZWN0ZWQ9Int7X3NlbGVjdGVkVGFifX0iIHNsb3Q9InRvcCI+CiAgICAgICAgICA8IS0tIHZpZXctaWQgY2FuIGJlIHVzZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMgdG8gbG9jYXRlIGEgdGFiLgogICAgICAgICAgICAgICBJdCBzaG91bGQgYmUgdGhlIG5hbWUgb2YgdGhlIHJvb3QgZWxlbWVudCBpbXBsZW1lbnRpbmcgdGhlIHZpZXcKICAgICAgICAgICAgICAgd2l0aG91dCB0aGUgJ3RmLWhwYXJhbXMtJyBwcmVmaXguIC0tPgogICAgICAgICAgPHBhcGVyLXRhYiBvbi1jbGljaz0iX3RhYmxlVGFiQ2xpY2tlZCIgdmlldy1pZD0idGFibGUtdmlldyI+CiAgICAgICAgICAgIFRBQkxFIFZJRVcKICAgICAgICAgIDwvcGFwZXItdGFiPgogICAgICAgICAgPHBhcGVyLXRhYgogICAgICAgICAgICBvbi1jbGljaz0iX3BhcmFsbGVsQ29vcmRzVGFiQ2xpY2tlZCIKICAgICAgICAgICAgdmlldy1pZD0icGFyYWxsZWwtY29vcmRzLXZpZXciCiAgICAgICAgICA+CiAgICAgICAgICAgIFBBUkFMTEVMIENPT1JESU5BVEVTIFZJRVcKICAgICAgICAgIDwvcGFwZXItdGFiPgogICAgICAgICAgPHBhcGVyLXRhYgogICAgICAgICAgICBvbi1jbGljaz0iX3NjYXR0ZXJQbG90TWF0cml4VGFiQ2xpY2tlZCIKICAgICAgICAgICAgdmlldy1pZD0ic2NhdHRlci1wbG90LW1hdHJpeC12aWV3IgogICAgICAgICAgPgogICAgICAgICAgICBTQ0FUVEVSIFBMT1QgTUFUUklYIFZJRVcKICAgICAgICAgIDwvcGFwZXItdGFiPgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVscC1hbmQtZmVlZGJhY2siPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbYnVnUmVwb3J0VXJsXV0iPgogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmJD0iW1tidWdSZXBvcnRVcmxdXSIKICAgICAgICAgICAgICAgIHRhcmdldD0iX2JsYW5rIgogICAgICAgICAgICAgICAgcmVsPSJub29wZW5lciBub3JlZmVycmVyIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxwYXBlci1idXR0b24KICAgICAgICAgICAgICAgICAgaWQ9ImJ1Zy1yZXBvcnQiCiAgICAgICAgICAgICAgICAgIHJhaXNlZAogICAgICAgICAgICAgICAgICB0aXRsZT0iU2VuZCBhIGJ1ZyByZXBvcnQgb3IgZmVhdHVyZSByZXF1ZXN0IgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICBCdWcgUmVwb3J0IC8gRmVhdHVyZSBSZXF1ZXN0CiAgICAgICAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1toZWxwVXJsXV0iPgogICAgICAgICAgICAgIDxhIGhyZWYkPSJbW2hlbHBVcmxdXSIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciI+CiAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgICAgICAgaWNvbj0iaGVscC1vdXRsaW5lIgogICAgICAgICAgICAgICAgICB0aXRsZT0iVmlldyBkb2N1bWVudGF0aW9uIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3BhcGVyLXRhYnM+CiAgICAgIDwvcGFwZXItdG9vbGJhcj4KICAgICAgPGlyb24tcGFnZXMgc2VsZWN0ZWQ9IltbX3NlbGVjdGVkVGFiXV0iIGNsYXNzPSJmaXQgdGFiLXZpZXciPgogICAgICAgIDxkaXYgaWQ9IjAiIGNsYXNzPSJ0YWIiPgogICAgICAgICAgPHRmLWhwYXJhbXMtdGFibGUtdmlldwogICAgICAgICAgICBiYWNrZW5kPSJbW2JhY2tlbmRdXSIKICAgICAgICAgICAgZXhwZXJpbWVudC1uYW1lPSJbW2V4cGVyaW1lbnROYW1lXV0iCiAgICAgICAgICAgIHZpc2libGUtc2NoZW1hPSJbW2NvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYV1dIgogICAgICAgICAgICBzZXNzaW9uLWdyb3Vwcz0iW1tzZXNzaW9uR3JvdXBzXV0iCiAgICAgICAgICAgIGVuYWJsZS1zaG93LW1ldHJpY3MKICAgICAgICAgID4KICAgICAgICAgIDwvdGYtaHBhcmFtcy10YWJsZS12aWV3PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgaWQ9IjEiIGNsYXNzPSJ0YWIiPgogICAgICAgICAgPHRmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXZpZXcKICAgICAgICAgICAgYmFja2VuZD0iW1tiYWNrZW5kXV0iCiAgICAgICAgICAgIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIgogICAgICAgICAgICBjb25maWd1cmF0aW9uPSJbW2NvbmZpZ3VyYXRpb25dXSIKICAgICAgICAgICAgc2Vzc2lvbi1ncm91cHM9Iltbc2Vzc2lvbkdyb3Vwc11dIgogICAgICAgICAgPgogICAgICAgICAgPC90Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy12aWV3PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgaWQ9IjIiIGNsYXNzPSJ0YWIiPgogICAgICAgICAgPHRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC12aWV3CiAgICAgICAgICAgIGJhY2tlbmQ9IltbYmFja2VuZF1dIgogICAgICAgICAgICBleHBlcmltZW50LW5hbWU9IltbZXhwZXJpbWVudE5hbWVdXSIKICAgICAgICAgICAgY29uZmlndXJhdGlvbj0iW1tjb25maWd1cmF0aW9uXV0iCiAgICAgICAgICAgIHNlc3Npb24tZ3JvdXBzPSJbW3Nlc3Npb25Hcm91cHNdXSIKICAgICAgICAgID4KICAgICAgICAgIDwvdGYtaHBhcmFtcy1zY2F0dGVyLXBsb3QtbWF0cml4LXZpZXc+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvaXJvbi1wYWdlcz4KICAgIDwvcGFwZXItaGVhZGVyLXBhbmVsPgoKICAgIDxzdHlsZT4KICAgICAgLnRhYi12aWV3IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgLnRhYi1iYXIgewogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigKICAgICAgICAgIC0tdGItdG9vbGJhci1iYWNrZ3JvdW5kLWNvbG9yLAogICAgICAgICAgdmFyKC0tdGItb3JhbmdlLXN0cm9uZykKICAgICAgICApOwogICAgICB9CiAgICAgIC50YWIgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgICBwYXBlci10YWJzIHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIC0tcGFwZXItdGFicy1zZWxlY3Rpb24tYmFyLWNvbG9yOiB3aGl0ZTsKICAgICAgICAtLXBhcGVyLXRhYnMtY29udGVudDogewogICAgICAgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIHRmLWhwYXJhbXMtdGFibGUtdmlldyB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICAgIC5oZWxwLWFuZC1mZWVkYmFjayB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7IC8qIEVuc3VyZSB0aGF0IGljb25zIHN0YXkgYWxpZ25lZCAqLwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgIH0KICAgICAgI2J1Zy1yZXBvcnQgewogICAgICAgIGJvcmRlcjogc29saWQgYmxhY2s7CiAgICAgICAgYmFja2dyb3VuZDogcmVkOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICAgICAgd29yZC1icmVhazogYnJlYWstd29yZHM7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIG1heC13aWR0aDogMTUwcHg7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgfQogICAgICAuaGVscC1hbmQtZmVlZGJhY2sgYSB7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLCRmLnByb3RvdHlwZSwiYmFja2VuZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSwkZi5wcm90b3R5cGUsImhlbHBVcmwiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sJGYucHJvdG90eXBlLCJidWdSZXBvcnRVcmwiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sJGYucHJvdG90eXBlLCJleHBlcmltZW50TmFtZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSwkZi5wcm90b3R5cGUsImNvbmZpZ3VyYXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLCRmLnByb3RvdHlwZSwic2Vzc2lvbkdyb3VwcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSwkZi5wcm90b3R5cGUsIl9zZWxlY3RlZFRhYiIsdm9pZCAwKTskZj1FKFt5dCgidGYtaHBhcmFtcy1zZXNzaW9ucy1wYW5lIiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sJGYpO3ZhciByaD1jbGFzcyBleHRlbmRzIEd0KG10KXtyZWxvYWQoKXt0aGlzLiRbInF1ZXJ5LXBhbmUiXS5yZWxvYWQoKX19O3JoLnRlbXBsYXRlPVFgCiAgICA8aHBhcmFtcy1zcGxpdC1sYXlvdXQ+CiAgICAgIDxkaXYgc2xvdD0iY29udGVudCIgY2xhc3M9InNpZGViYXIiPgogICAgICAgIDx0Zi1ocGFyYW1zLXF1ZXJ5LXBhbmUKICAgICAgICAgIGlkPSJxdWVyeS1wYW5lIgogICAgICAgICAgYmFja2VuZD0iW1tiYWNrZW5kXV0iCiAgICAgICAgICBleHBlcmltZW50LW5hbWU9IltbZXhwZXJpbWVudE5hbWVdXSIKICAgICAgICAgIGNvbmZpZ3VyYXRpb249Int7X2NvbmZpZ3VyYXRpb259fSIKICAgICAgICAgIHNlc3Npb24tZ3JvdXBzPSJ7e19zZXNzaW9uR3JvdXBzfX0iCiAgICAgICAgICBkYXRhLWxvYWRlZC13aXRoLW5vbi1lbXB0eS1ocGFyYW1zPSJ7e19kYXRhTG9hZGVkV2l0aE5vbkVtcHR5SHBhcmFtc319IgogICAgICAgICAgZGF0YS1sb2FkZWQtd2l0aC1lbXB0eS1ocGFyYW1zPSJ7e19kYXRhTG9hZGVkV2l0aEVtcHR5SHBhcmFtc319IgogICAgICAgID4KICAgICAgICA8L3RmLWhwYXJhbXMtcXVlcnktcGFuZT4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgc2xvdD0iY29udGVudCIgY2xhc3M9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTG9hZGVkV2l0aEVtcHR5SHBhcmFtc11dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBocGFyYW1zIGRhdGEgd2FzIGZvdW5kLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczo8L3A+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+WW91IGhhdmVu4oCZdCB3cml0dGVuIGFueSBocGFyYW1zIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgIEV2ZW50IGZpbGVzIGFyZSBzdGlsbCBiZWluZyBsb2FkZWQgKHRyeSByZWxvYWRpbmcgdGhpcyBwYWdlKS4KICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTG9hZGVkV2l0aE5vbkVtcHR5SHBhcmFtc11dIj4KICAgICAgICAgIDx0Zi1ocGFyYW1zLXNlc3Npb25zLXBhbmUKICAgICAgICAgICAgaWQ9InNlc3Npb25zLXBhbmUiCiAgICAgICAgICAgIGJhY2tlbmQ9IltbYmFja2VuZF1dIgogICAgICAgICAgICBoZWxwLXVybD0iW1toZWxwVXJsXV0iCiAgICAgICAgICAgIGJ1Zy1yZXBvcnQtdXJsPSJbW2J1Z1JlcG9ydFVybF1dIgogICAgICAgICAgICBleHBlcmltZW50LW5hbWU9IltbZXhwZXJpbWVudE5hbWVdXSIKICAgICAgICAgICAgY29uZmlndXJhdGlvbj0iW1tfY29uZmlndXJhdGlvbl1dIgogICAgICAgICAgICBzZXNzaW9uLWdyb3Vwcz0iW1tfc2Vzc2lvbkdyb3Vwc11dIgogICAgICAgICAgPgogICAgICAgICAgPC90Zi1ocGFyYW1zLXNlc3Npb25zLXBhbmU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L2hwYXJhbXMtc3BsaXQtbGF5b3V0PgogICAgPHN0eWxlPgogICAgICBocGFyYW1zLXNwbGl0LWxheW91dCB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyIHsKICAgICAgICB3aWR0aDogMjAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgbWluLXdpZHRoOiAxMCU7CiAgICAgIH0KCiAgICAgIC5jZW50ZXIgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICB3aWR0aDogODAlOwogICAgICB9CgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLm5vLWRhdGEtd2FybmluZyB7CiAgICAgICAgbWF4LXdpZHRoOiA1NDBweDsKICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgIH0KCiAgICAgIGEgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1saW5rKTsKICAgICAgfQoKICAgICAgYTp2aXNpdGVkIHsKICAgICAgICBjb2xvcjogdmFyKC0tdGItbGluay12aXNpdGVkKTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLHUzKV0scmgucHJvdG90eXBlLCJiYWNrZW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHJoLnByb3RvdHlwZSwiZXhwZXJpbWVudE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0scmgucHJvdG90eXBlLCJoZWxwVXJsIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHJoLnByb3RvdHlwZSwiYnVnUmVwb3J0VXJsIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHJoLnByb3RvdHlwZSwiX2NvbmZpZ3VyYXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLHJoLnByb3RvdHlwZSwiX3Nlc3Npb25Hcm91cHMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxyaC5wcm90b3R5cGUsIl9kYXRhTG9hZGVkV2l0aE5vbkVtcHR5SHBhcmFtcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHJoLnByb3RvdHlwZSwiX2RhdGFMb2FkZWRXaXRoRW1wdHlIcGFyYW1zIix2b2lkIDApO3JoPUUoW3l0KCJ0Zi1ocGFyYW1zLW1haW4iKV0scmgpO3ZhciBwaHI9bmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5nZXQoInRlbnNvcmJvYXJkQ29sYWIiKT09PSJ0cnVlIixsVj1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fYmFja2VuZD1uZXcgdTMobmV3IEFlLHBocil9cmVsb2FkKCl7dGhpcy4kWyJocGFyYW1zLW1haW4iXS5yZWxvYWQoKX19O2xWLnRlbXBsYXRlPVFgCiAgICA8IS0tIFRlbnNvckJvYXJkIGRvZXMgbm90IHNwZWNpZnkgYW4gZXhwZXJpbWVudE5hbWUuIEN1cnJlbnRseSBpdCBvbmx5CiAgICAgICAgIHN1cHBvcnRzIG9uZSBleHBlcmltZW50IHBlciBpbnZvY2F0aW9uLiAtLT4KICAgIDx0Zi1ocGFyYW1zLW1haW4KICAgICAgaWQ9ImhwYXJhbXMtbWFpbiIKICAgICAgYmFja2VuZD0iW1tfYmFja2VuZF1dIgogICAgICBleHBlcmltZW50LW5hbWU9IiIKICAgID4KICAgIDwvdGYtaHBhcmFtcy1tYWluPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sbFYucHJvdG90eXBlLCJfYmFja2VuZCIsdm9pZCAwKTtsVj1FKFt5dCgidGYtaHBhcmFtcy1kYXNoYm9hcmQiKV0sbFYpO3ZhciBkMT1FZShPZSgpLDEpO3ZhciBfbj1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5hY3R1YWxTaXplPSExLHRoaXMuYnJpZ2h0bmVzc0FkanVzdG1lbnQ9LjUsdGhpcy5jb250cmFzdFBlcmNlbnRhZ2U9MCx0aGlzLl9tZXRhZGF0YUNhbmNlbGxlcj1uZXcgYW4sdGhpcy5faW1hZ2VDYW5jZWxsZXI9bmV3IGFuLHRoaXMuX3N0ZXBzPVtdLHRoaXMuX2lzSW1hZ2VMb2FkaW5nPSExfWdldCBfcnVuQ29sb3IoKXt2YXIgdD10aGlzLnJ1bjtyZXR1cm4gZm4odCl9Z2V0IF9oYXNBdExlYXN0T25lU3RlcCgpe3ZhciB0PXRoaXMuX3N0ZXBzO3JldHVybiEhdCYmdC5sZW5ndGg+MH1nZXQgX2hhc011bHRpcGxlU3RlcHMoKXt2YXIgdD10aGlzLl9zdGVwcztyZXR1cm4hIXQmJnQubGVuZ3RoPjF9Z2V0IF9jdXJyZW50U3RlcCgpe3ZhciB0PXRoaXMuX3N0ZXBzLHI9dGhpcy5fc3RlcEluZGV4O3JldHVybiB0W3JdfHxudWxsfWdldCBfc3RlcFZhbHVlKCl7dmFyIHQ9dGhpcy5fY3VycmVudFN0ZXA7cmV0dXJuIHQ/dC5zdGVwOjB9Z2V0IF9jdXJyZW50V2FsbFRpbWUoKXt2YXIgdD10aGlzLl9jdXJyZW50U3RlcDtyZXR1cm4gdD9zMih0LndhbGxfdGltZSk6IiJ9Z2V0IF9tYXhTdGVwSW5kZXgoKXt2YXIgdD10aGlzLl9zdGVwcztyZXR1cm4gdC5sZW5ndGgtMX1nZXQgX3NhbXBsZVRleHQoKXt2YXIgdD10aGlzLnNhbXBsZTtyZXR1cm5gJHt0KzF9YH1nZXQgX2hhc011bHRpcGxlU2FtcGxlcygpe3ZhciB0PXRoaXMub2ZTYW1wbGVzO3JldHVybiB0PjF9X2dldEFyaWFFeHBhbmRlZCgpe3JldHVybiB0aGlzLmFjdHVhbFNpemU/InRydWUiOiJmYWxzZSJ9YXR0YWNoZWQoKXt0aGlzLnJlbG9hZCgpfXJlbG9hZCgpe2lmKCF0aGlzLmlzQXR0YWNoZWQpcmV0dXJuO3RoaXMuX21ldGFkYXRhQ2FuY2VsbGVyLmNhbmNlbEFsbCgpO2xldCB0PW5ldyBVUkxTZWFyY2hQYXJhbXMoe3RhZzp0aGlzLnRhZyxydW46dGhpcy5ydW4sc2FtcGxlOnRoaXMuc2FtcGxlfSkscj1fZSgpLnBsdWdpblJvdXRlKCJpbWFnZXMiLCIvaW1hZ2VzIix0KSxuPXRoaXMuX21ldGFkYXRhQ2FuY2VsbGVyLmNhbmNlbGxhYmxlKGk9PntpZihpLmNhbmNlbGxlZClyZXR1cm47bGV0IGE9aS52YWx1ZS5tYXAodGhpcy5fY3JlYXRlU3RlcERhdHVtLmJpbmQodGhpcykpO3RoaXMuc2V0KCJfc3RlcHMiLGEpLHRoaXMuc2V0KCJfc3RlcEluZGV4IixhLmxlbmd0aC0xKX0pO3RoaXMucmVxdWVzdE1hbmFnZXIucmVxdWVzdChyKS50aGVuKG4pfV9jcmVhdGVTdGVwRGF0dW0odCl7bGV0IHI9bmV3IFVSTFNlYXJjaFBhcmFtcyh0LnF1ZXJ5KTtyLmFwcGVuZCgidHMiLHQud2FsbF90aW1lKTtsZXQgbj1fZSgpLnBsdWdpblJvdXRlRm9yU3JjKCJpbWFnZXMiLCIvaW5kaXZpZHVhbEltYWdlIixyKTtyZXR1cm57d2FsbF90aW1lOm5ldyBEYXRlKHQud2FsbF90aW1lKjFlMyksc3RlcDp0LnN0ZXAsdXJsOm59fV91cGRhdGVJbWFnZVVybCgpe3ZhciB0PXRoaXMuX2N1cnJlbnRTdGVwLHI9dGhpcy5icmlnaHRuZXNzQWRqdXN0bWVudCxuPXRoaXMuY29udHJhc3RQZXJjZW50YWdlO2lmKCF0KXJldHVybjtsZXQgaT1uZXcgSW1hZ2U7dGhpcy5faW1hZ2VDYW5jZWxsZXIuY2FuY2VsQWxsKCksaS5vbmxvYWQ9aS5vbmVycm9yPXRoaXMuX2ltYWdlQ2FuY2VsbGVyLmNhbmNlbGxhYmxlKG89PntpZihvLmNhbmNlbGxlZClyZXR1cm47bGV0IGE9dGhpcy4kJCgiI21haW4taW1hZ2UtY29udGFpbmVyIik7YSYmKGEudGV4dENvbnRlbnQ9IiIsenQoYSkuYXBwZW5kQ2hpbGQoaSkpLHRoaXMuc2V0KCJfaXNJbWFnZUxvYWRpbmciLCExKX0pLmJpbmQodGhpcyksaS5zdHlsZS5maWx0ZXI9YGNvbnRyYXN0KCR7bn0lKSBgLGkuc3R5bGUuZmlsdGVyKz1gYnJpZ2h0bmVzcygke3J9KWAsdGhpcy5zZXQoIl9pc0ltYWdlTG9hZGluZyIsITApLGkuc3JjPXQudXJsfV9oYW5kbGVUYXAodCl7dGhpcy5zZXQoImFjdHVhbFNpemUiLCF0aGlzLmFjdHVhbFNpemUpfV90b0xvY2FsZVN0cmluZyh0KXtyZXR1cm4gdC50b0xvY2FsZVN0cmluZygpfX07X24udGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcKICAgICAgdGFnPSJbW3RhZ11dIgogICAgICBydW49IltbcnVuXV0iCiAgICAgIGRpc3BsYXktbmFtZT0iW1t0YWdNZXRhZGF0YS5kaXNwbGF5TmFtZV1dIgogICAgICBkZXNjcmlwdGlvbj0iW1t0YWdNZXRhZGF0YS5kZXNjcmlwdGlvbl1dIgogICAgICBjb2xvcj0iW1tfcnVuQ29sb3JdXSIKICAgID4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZVNhbXBsZXNdXSI+CiAgICAgICAgPGRpdj5zYW1wbGU6IFtbX3NhbXBsZVRleHRdXSBvZiBbW29mU2FtcGxlc11dPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzQXRMZWFzdE9uZVN0ZXBdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1sYWJlbCI+CiAgICAgICAgICAgIHN0ZXAKICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkIgogICAgICAgICAgICAgID5bW190b0xvY2FsZVN0cmluZyhfc3RlcFZhbHVlKV1dPC9zcGFuCiAgICAgICAgICAgID4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1sYWJlbCBoZWFkaW5nLXJpZ2h0IGRhdGV0aW1lIj4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19jdXJyZW50V2FsbFRpbWVdXSI+CiAgICAgICAgICAgICAgW1tfY3VycmVudFdhbGxUaW1lXV0KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibGFiZWwgcmlnaHQiPgogICAgICAgICAgICA8cGFwZXItc3Bpbm5lci1saXRlIGFjdGl2ZSBoaWRkZW4kPSJbWyFfaXNJbWFnZUxvYWRpbmddXSI+CiAgICAgICAgICAgIDwvcGFwZXItc3Bpbm5lci1saXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzTXVsdGlwbGVTdGVwc11dIj4KICAgICAgICA8ZGl2PgogICAgICAgICAgPHBhcGVyLXNsaWRlcgogICAgICAgICAgICBpZD0ic3RlcHMiCiAgICAgICAgICAgIGltbWVkaWF0ZS12YWx1ZT0ie3tfc3RlcEluZGV4fX0iCiAgICAgICAgICAgIG1heD0iW1tfbWF4U3RlcEluZGV4XV0iCiAgICAgICAgICAgIG1heC1tYXJrZXJzPSJbW19tYXhTdGVwSW5kZXhdXSIKICAgICAgICAgICAgc25hcHMKICAgICAgICAgICAgc3RlcD0iMSIKICAgICAgICAgICAgdmFsdWU9Int7X3N0ZXBJbmRleH19IgogICAgICAgICAgPjwvcGFwZXItc2xpZGVyPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC90Zi1jYXJkLWhlYWRpbmc+CgogICAgPCEtLSBTZW1hbnRpY2FsbHkgYSBidXR0b24gYnV0IDxpbWc+IGluc2lkZSBhIDxidXR0b24+IGRpc2FsbG93cyB1c2VyIHRvIGRvCiAgICBhbiBpbnRlcmVzdGluZyBvcGVyYXRpb24gbGlrZSAiQ29weSBJbWFnZSIgaW4gbm9uLUNocm9taXVtIGJyb3dzZXJzLiAtLT4KICAgIDxhCiAgICAgIGlkPSJtYWluLWltYWdlLWNvbnRhaW5lciIKICAgICAgcm9sZT0iYnV0dG9uIgogICAgICBhcmlhLWxhYmVsPSJUb2dnbGUgYWN0dWFsIHNpemUiCiAgICAgIGFyaWEtZXhwYW5kZWQkPSJbW19nZXRBcmlhRXhwYW5kZWQoYWN0dWFsU2l6ZSldXSIKICAgICAgb24tdGFwPSJfaGFuZGxlVGFwIgogICAgPjwvYT4KCiAgICA8c3R5bGUgaW5jbHVkZT0idGYtY2FyZC1oZWFkaW5nLXN0eWxlIj4KICAgICAgLyoqIE1ha2UgYnV0dG9uIGEgZGl2LiAqLwogICAgICBidXR0b24gewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICAgICAgYm9yZGVyOiAwOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC8qKiBGaXJlZm94OiBHZXQgcmlkIG9mIGRvdHRlZCBsaW5lIGluc2lkZSBidXR0b24uICovCiAgICAgIGJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciB7CiAgICAgICAgYm9yZGVyOiAwOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC8qKiBGaXJlZm94OiBTaW11bGF0ZSBDaHJvbWUncyBvdXRlciBnbG93IG9uIGJ1dHRvbiB3aGVuIGZvY3VzZWQuICovCiAgICAgIGJ1dHRvbjotbW96LWZvY3VzcmluZyB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBib3gtc2hhZG93OiAwcHggMHB4IDFweCAycHggSGlnaGxpZ2h0OwogICAgICB9CgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgd2lkdGg6IDM1MHB4OwogICAgICAgIGhlaWdodDogYXV0bzsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWFyZ2luOiAwIDE1cHggNDBweCAwOwogICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgIH0KCiAgICAgIC8qKiBXaGVuIGFjdHVhbCBzaXplIHNob3duIGlzIG9uLCB1c2UgdGhlIGFjdHVhbCBpbWFnZSB3aWR0aC4gKi8KICAgICAgOmhvc3QoW2FjdHVhbC1zaXplXSkgewogICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICB3aWR0aDogYXV0bzsKICAgICAgfQoKICAgICAgOmhvc3QoW2FjdHVhbC1zaXplXSkgI21haW4taW1hZ2UtY29udGFpbmVyIHsKICAgICAgICBtYXgtaGVpZ2h0OiBub25lOwogICAgICAgIHdpZHRoOiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdChbYWN0dWFsLXNpemVdKSAjbWFpbi1pbWFnZS1jb250YWluZXIgaW1nIHsKICAgICAgICB3aWR0aDogYXV0bzsKICAgICAgfQoKICAgICAgcGFwZXItc3Bpbm5lci1saXRlIHsKICAgICAgICB3aWR0aDogMTRweDsKICAgICAgICBoZWlnaHQ6IDE0cHg7CiAgICAgICAgdmVydGljYWwtYWxpZ246IHRleHQtYm90dG9tOwogICAgICAgIC0tcGFwZXItc3Bpbm5lci1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgIH0KCiAgICAgICNzdGVwcyB7CiAgICAgICAgaGVpZ2h0OiAxNXB4OwogICAgICAgIG1hcmdpbjogMCAwIDAgLTE1cHg7CiAgICAgICAgLyoKICAgICAgICAgKiAzMSBjb21lcyBmcm9tIGFkZGluZyBhIHBhZGRpbmcgb2YgMTVweCBmcm9tIGJvdGggc2lkZXMgb2YgdGhlCiAgICAgICAgICogcGFwZXItc2xpZGVyLCBzdWJ0cmFjdGluZyAxcHggc28gdGhhdCB0aGUgc2xpZGVyIHdpZHRoIGFsaWducwogICAgICAgICAqIHdpdGggdGhlIGltYWdlICh0aGUgbGFzdCBzbGlkZXIgbWFya2VyIHRha2VzIHVwIDFweCksIGFuZAogICAgICAgICAqIGFkZGluZyAycHggdG8gYWNjb3VudCBmb3IgYSBib3JkZXIgb2YgMXB4IG9uIGJvdGggc2lkZXMgb2YKICAgICAgICAgKiB0aGUgaW1hZ2UuIDMwIC0gMSArIDIuCiAgICAgICAgICovCiAgICAgICAgd2lkdGg6IGNhbGMoMTAwJSArIDMxcHgpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWFjdGl2ZS1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1ib3JkZXItY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLW1hcmtlcnMtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLXBpbi1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItcGluLXN0YXJ0LWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgfQoKICAgICAgI21haW4taW1hZ2UtY29udGFpbmVyIHsKICAgICAgICBtYXgtaGVpZ2h0OiAxMDI0cHg7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH0KCiAgICAgICNtYWluLWltYWdlLWNvbnRhaW5lciBpbWcgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBpbWFnZS1yZW5kZXJpbmc6IC1tb3otY3Jpc3AtZWRnZXM7CiAgICAgICAgaW1hZ2UtcmVuZGVyaW5nOiBwaXhlbGF0ZWQ7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbiB7CiAgICAgICAgY29sb3I6ICMyMTk2ZjM7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICB9CiAgICAgIHBhcGVyLWljb24tYnV0dG9uW3NlbGVjdGVkXSB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgfQogICAgICBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLF9uLnByb3RvdHlwZSwicnVuIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLF9uLnByb3RvdHlwZSwidGFnIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLF9uLnByb3RvdHlwZSwic2FtcGxlIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLF9uLnByb3RvdHlwZSwib2ZTYW1wbGVzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLF9uLnByb3RvdHlwZSwidGFnTWV0YWRhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sX24ucHJvdG90eXBlLCJhY3R1YWxTaXplIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLF9uLnByb3RvdHlwZSwiYnJpZ2h0bmVzc0FkanVzdG1lbnQiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sX24ucHJvdG90eXBlLCJjb250cmFzdFBlcmNlbnRhZ2UiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxfbi5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLF9uLnByb3RvdHlwZSwiX21ldGFkYXRhQ2FuY2VsbGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLF9uLnByb3RvdHlwZSwiX2ltYWdlQ2FuY2VsbGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXksbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sX24ucHJvdG90eXBlLCJfc3RlcHMiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLF9uLnByb3RvdHlwZSwiX3N0ZXBJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLF9uLnByb3RvdHlwZSwiX2lzSW1hZ2VMb2FkaW5nIix2b2lkIDApO0UoW1J0KCJydW4iKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxfbi5wcm90b3R5cGUsIl9ydW5Db2xvciIsbnVsbCk7RShbUnQoIl9zdGVwcyIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxfbi5wcm90b3R5cGUsIl9oYXNBdExlYXN0T25lU3RlcCIsbnVsbCk7RShbUnQoIl9zdGVwcyIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxfbi5wcm90b3R5cGUsIl9oYXNNdWx0aXBsZVN0ZXBzIixudWxsKTtFKFtSdCgiX3N0ZXBzIiwiX3N0ZXBJbmRleCIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLF9uLnByb3RvdHlwZSwiX2N1cnJlbnRTdGVwIixudWxsKTtFKFtSdCgiX2N1cnJlbnRTdGVwIiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sX24ucHJvdG90eXBlLCJfc3RlcFZhbHVlIixudWxsKTtFKFtSdCgiX2N1cnJlbnRTdGVwIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sX24ucHJvdG90eXBlLCJfY3VycmVudFdhbGxUaW1lIixudWxsKTtFKFtSdCgiX3N0ZXBzIiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sX24ucHJvdG90eXBlLCJfbWF4U3RlcEluZGV4IixudWxsKTtFKFtSdCgic2FtcGxlIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sX24ucHJvdG90eXBlLCJfc2FtcGxlVGV4dCIsbnVsbCk7RShbUnQoIm9mU2FtcGxlcyIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxfbi5wcm90b3R5cGUsIl9oYXNNdWx0aXBsZVNhbXBsZXMiLG51bGwpO0UoW0J0KCJydW4iLCJ0YWciKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLF9uLnByb3RvdHlwZSwicmVsb2FkIixudWxsKTtFKFtCdCgiX2N1cnJlbnRTdGVwIiwiYnJpZ2h0bmVzc0FkanVzdG1lbnQiLCJjb250cmFzdFBlcmNlbnRhZ2UiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLF9uLnByb3RvdHlwZSwiX3VwZGF0ZUltYWdlVXJsIixudWxsKTtfbj1FKFt5dCgidGYtaW1hZ2UtbG9hZGVyIildLF9uKTt2YXIgSW89Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucmVsb2FkT25SZWFkeT0hMCx0aGlzLl9kZWZhdWx0QnJpZ2h0bmVzc0FkanVzdG1lbnQ9MSx0aGlzLl9kZWZhdWx0Q29udHJhc3RQZXJjZW50YWdlPTEwMCx0aGlzLl9icmlnaHRuZXNzQWRqdXN0bWVudD0xLHRoaXMuX2NvbnRyYXN0UGVyY2VudGFnZT0xMDAsdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKT0+e3RoaXMuX3JlbG9hZEltYWdlcygpfSl9X2ZldGNoVGFncygpe2xldCB0PV9lKCkucGx1Z2luUm91dGUoImltYWdlcyIsIi90YWdzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyPT57aWYoZDEuaXNFcXVhbChyLHRoaXMuX3J1blRvVGFnSW5mbykpcmV0dXJuO2xldCBuPWQxLm1hcFZhbHVlcyhyLG89Pk9iamVjdC5rZXlzKG8pKSxpPSRpKG4pO3RoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIixpLmxlbmd0aD09PTApLHRoaXMuc2V0KCJfcnVuVG9UYWdJbmZvIixyKSx0aGlzLmFzeW5jKCgpPT57dGhpcy5zZXQoIl9jYXRlZ29yaWVzRG9tUmVhZHkiLCEwKX0pfSl9X3JlbG9hZEltYWdlcygpe3ZhciB0Oyh0PXRoaXMucm9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtaW1hZ2UtbG9hZGVyIikuZm9yRWFjaChyPT57ci5yZWxvYWQoKX0pfV9zaG91bGRPcGVuKHQpe3JldHVybiB0PD0yfV9yZXNldEJyaWdodG5lc3MoKXt0aGlzLl9icmlnaHRuZXNzQWRqdXN0bWVudD10aGlzLl9kZWZhdWx0QnJpZ2h0bmVzc0FkanVzdG1lbnR9X3Jlc2V0Q29udHJhc3QoKXt0aGlzLl9jb250cmFzdFBlcmNlbnRhZ2U9dGhpcy5fZGVmYXVsdENvbnRyYXN0UGVyY2VudGFnZX1nZXQgX2JyaWdodG5lc3NJc0RlZmF1bHQoKXt2YXIgdD10aGlzLl9icmlnaHRuZXNzQWRqdXN0bWVudDtyZXR1cm4gdD09PXRoaXMuX2RlZmF1bHRCcmlnaHRuZXNzQWRqdXN0bWVudH1nZXQgX2NvbnRyYXN0SXNEZWZhdWx0KCl7dmFyIHQ9dGhpcy5fY29udHJhc3RQZXJjZW50YWdlO3JldHVybiB0PT09dGhpcy5fZGVmYXVsdENvbnRyYXN0UGVyY2VudGFnZX1nZXQgX2NhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9ydW5Ub1RhZ0luZm8scj10aGlzLl9zZWxlY3RlZFJ1bnMsbj10aGlzLl90YWdGaWx0ZXIsaT10aGlzLl9jYXRlZ29yaWVzRG9tUmVhZHk7bGV0IG89ZDEubWFwVmFsdWVzKHQsYz0+T2JqZWN0LmtleXMoYykpLGE9UWwobyxyLG4pO2Z1bmN0aW9uIHMoYyl7bGV0IHU9dFtjLnJ1bl1bYy50YWddLnNhbXBsZXM7cmV0dXJuIGQxLnJhbmdlKHUpLm1hcChoPT5PYmplY3QuYXNzaWduKHt9LGMse3NhbXBsZTpoLG9mU2FtcGxlczp1fSkpfXJldHVybiBhLm1hcChjPT5PYmplY3QuYXNzaWduKHt9LGMse2l0ZW1zOltdLmNvbmNhdC5hcHBseShbXSxjLml0ZW1zLm1hcChzKSl9KSl9X3RhZ01ldGFkYXRhKHQscixuKXtyZXR1cm4gdFtyXVtuXX19O0lvLnRlbXBsYXRlPVFgCiAgICA8dGYtZGFzaGJvYXJkLWxheW91dD4KICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhciIgc2xvdD0ic2lkZWJhciI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3MiPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGluZS1pdGVtIj4KICAgICAgICAgICAgICA8cGFwZXItY2hlY2tib3ggY2hlY2tlZD0ie3tfYWN0dWFsU2l6ZX19IgogICAgICAgICAgICAgICAgPlNob3cgYWN0dWFsIGltYWdlIHNpemU8L3BhcGVyLWNoZWNrYm94CiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPGgzIGNsYXNzPSJ0b29sdGlwLWNvbnRhaW5lciI+QnJpZ2h0bmVzcyBhZGp1c3RtZW50PC9oMz4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icmVzZXR0YWJsZS1zbGlkZXItY29udGFpbmVyIj4KICAgICAgICAgICAgICA8cGFwZXItc2xpZGVyCiAgICAgICAgICAgICAgICBtaW49IjAiCiAgICAgICAgICAgICAgICBtYXg9IjIiCiAgICAgICAgICAgICAgICBzbmFwcwogICAgICAgICAgICAgICAgcGluCiAgICAgICAgICAgICAgICBzdGVwPSIwLjAxIgogICAgICAgICAgICAgICAgdmFsdWU9Int7X2JyaWdodG5lc3NBZGp1c3RtZW50fX0iCiAgICAgICAgICAgICAgICBpbW1lZGlhdGUtdmFsdWU9Int7X2JyaWdodG5lc3NBZGp1c3RtZW50fX0iCiAgICAgICAgICAgICAgPjwvcGFwZXItc2xpZGVyPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24KICAgICAgICAgICAgICAgIGNsYXNzPSJ4LWJ1dHRvbiIKICAgICAgICAgICAgICAgIG9uLXRhcD0iX3Jlc2V0QnJpZ2h0bmVzcyIKICAgICAgICAgICAgICAgIGRpc2FibGVkPSJbW19icmlnaHRuZXNzSXNEZWZhdWx0XV0iCiAgICAgICAgICAgICAgICA+UmVzZXQ8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDxoMyBjbGFzcz0idG9vbHRpcC1jb250YWluZXIiPkNvbnRyYXN0IGFkanVzdG1lbnQ8L2gzPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyZXNldHRhYmxlLXNsaWRlci1jb250YWluZXIiPgogICAgICAgICAgICAgIDxwYXBlci1zbGlkZXIKICAgICAgICAgICAgICAgIG1pbj0iMCIKICAgICAgICAgICAgICAgIG1heD0iNTAwIgogICAgICAgICAgICAgICAgc25hcHMKICAgICAgICAgICAgICAgIHBpbgogICAgICAgICAgICAgICAgc3RlcD0iMSIKICAgICAgICAgICAgICAgIHZhbHVlPSJ7e19jb250cmFzdFBlcmNlbnRhZ2V9fSIKICAgICAgICAgICAgICAgIGltbWVkaWF0ZS12YWx1ZT0ie3tfY29udHJhc3RQZXJjZW50YWdlfX0iCiAgICAgICAgICAgICAgPjwvcGFwZXItc2xpZGVyPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24KICAgICAgICAgICAgICAgIGNsYXNzPSJ4LWJ1dHRvbiIKICAgICAgICAgICAgICAgIG9uLXRhcD0iX3Jlc2V0Q29udHJhc3QiCiAgICAgICAgICAgICAgICBkaXNhYmxlZD0iW1tfY29udHJhc3RJc0RlZmF1bHRdXSIKICAgICAgICAgICAgICAgID5SZXNldDwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiBydW5zLXNlbGVjdG9yIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yCiAgICAgICAgICAgIGlkPSJydW5zLXNlbGVjdG9yIgogICAgICAgICAgICBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSIKICAgICAgICAgID48L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjZW50ZXIiIHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gaW1hZ2UgZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT5Zb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IGltYWdlIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1pbWFnZS1sb2FkZXIKICAgICAgICAgICAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgICAgICAgICAgICBydW49IltbaXRlbS5ydW5dXSIKICAgICAgICAgICAgICAgICAgdGFnPSJbW2l0ZW0udGFnXV0iCiAgICAgICAgICAgICAgICAgIHNhbXBsZT0iW1tpdGVtLnNhbXBsZV1dIgogICAgICAgICAgICAgICAgICBvZi1zYW1wbGVzPSJbW2l0ZW0ub2ZTYW1wbGVzXV0iCiAgICAgICAgICAgICAgICAgIHRhZy1tZXRhZGF0YT0iW1tfdGFnTWV0YWRhdGEoX3J1blRvVGFnSW5mbywgaXRlbS5ydW4sIGl0ZW0udGFnKV1dIgogICAgICAgICAgICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgICAgICAgICAgIGFjdHVhbC1zaXplPSJbW19hY3R1YWxTaXplXV0iCiAgICAgICAgICAgICAgICAgIGJyaWdodG5lc3MtYWRqdXN0bWVudD0iW1tfYnJpZ2h0bmVzc0FkanVzdG1lbnRdXSIKICAgICAgICAgICAgICAgICAgY29udHJhc3QtcGVyY2VudGFnZT0iW1tfY29udHJhc3RQZXJjZW50YWdlXV0iCiAgICAgICAgICAgICAgICA+PC90Zi1pbWFnZS1sb2FkZXI+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAucmVzZXR0YWJsZS1zbGlkZXItY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB9CiAgICAgIC5yZXNldHRhYmxlLXNsaWRlci1jb250YWluZXIgcGFwZXItc2xpZGVyIHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgIH0KICAgICAgLnJlc2V0dGFibGUtc2xpZGVyLWNvbnRhaW5lciBwYXBlci1idXR0b24gewogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgfQogICAgICAucmVzZXR0YWJsZS1zbGlkZXItY29udGFpbmVyIHBhcGVyLWJ1dHRvbltkaXNhYmxlZF0gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHVuc2V0OwogICAgICB9CiAgICAgIC54LWJ1dHRvbiB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXRiLXVpLWxpZ2h0LWFjY2VudCk7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTsKICAgICAgfQogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQogICAgICBwYXBlci1zbGlkZXIgewogICAgICAgIC0tcGFwZXItc2xpZGVyLWFjdGl2ZS1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1ib3JkZXItY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLW1hcmtlcnMtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLXBpbi1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItcGluLXN0YXJ0LWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSW8ucHJvdG90eXBlLCJyZWxvYWRPblJlYWR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxJby5wcm90b3R5cGUsIl9zZWxlY3RlZFJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSW8ucHJvdG90eXBlLCJfcnVuVG9UYWdJbmZvIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSW8ucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSW8ucHJvdG90eXBlLCJfYWN0dWFsU2l6ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxJby5wcm90b3R5cGUsIl9kZWZhdWx0QnJpZ2h0bmVzc0FkanVzdG1lbnQiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sSW8ucHJvdG90eXBlLCJfZGVmYXVsdENvbnRyYXN0UGVyY2VudGFnZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxJby5wcm90b3R5cGUsIl9icmlnaHRuZXNzQWRqdXN0bWVudCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxJby5wcm90b3R5cGUsIl9jb250cmFzdFBlcmNlbnRhZ2UiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSW8ucHJvdG90eXBlLCJfdGFnRmlsdGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSW8ucHJvdG90eXBlLCJfY2F0ZWdvcmllc0RvbVJlYWR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLElvLnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW1J0KCJfYnJpZ2h0bmVzc0FkanVzdG1lbnQiKSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sSW8ucHJvdG90eXBlLCJfYnJpZ2h0bmVzc0lzRGVmYXVsdCIsbnVsbCk7RShbUnQoIl9jb250cmFzdFBlcmNlbnRhZ2UiKSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sSW8ucHJvdG90eXBlLCJfY29udHJhc3RJc0RlZmF1bHQiLG51bGwpO0UoW1J0KCJfcnVuVG9UYWdJbmZvIiwiX3NlbGVjdGVkUnVucyIsIl90YWdGaWx0ZXIiLCJfY2F0ZWdvcmllc0RvbVJlYWR5IiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxJby5wcm90b3R5cGUsIl9jYXRlZ29yaWVzIixudWxsKTtJbz1FKFt5dCgidGYtaW1hZ2UtZGFzaGJvYXJkIildLElvKTt2YXIgbHg9RWUoT2UoKSwxKTt2YXIgbTE7KGZ1bmN0aW9uKGUpe2VbZS5DQU5DRUxMRUQ9MV09IkNBTkNFTExFRCJ9KShtMXx8KG0xPXt9KSk7dmFyIGNWOyhmdW5jdGlvbihlKXtlW2UuVkVSVEVYPTFdPSJWRVJURVgiLGVbZS5GQUNFPTJdPSJGQUNFIixlW2UuQ09MT1I9M109IkNPTE9SIn0pKGNWfHwoY1Y9e30pKTt2YXIgcWN0OyhmdW5jdGlvbihlKXtlLlZFUlRFWD0iZmxvYXQzMiIsZS5GQUNFPSJpbnQzMiIsZS5DT0xPUj0idWludDgifSkocWN0fHwocWN0PXt9KSk7dmFyIElQPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX2NhbmNlbGxlcj1uZXcgYW4sdGhpcy5fcmVxdWVzdE1hbmFnZXI9dH1yZWxvYWQodCxyLG4pe3JldHVybiB0aGlzLl9jYW5jZWxsZXIuY2FuY2VsQWxsKCksdGhpcy5fZmV0Y2hNZXRhZGF0YSh0LHIsbil9X2ZldGNoRGF0YUJ5U3RlcCh0LHIsbixpLG8sYSl7bGV0IHM9X2UoKS5wbHVnaW5Sb3V0ZSgibWVzaCIsIi9kYXRhIixuZXcgVVJMU2VhcmNoUGFyYW1zKHt0YWc6cixydW46dCxjb250ZW50X3R5cGU6bixzYW1wbGU6U3RyaW5nKGkpLHN0ZXA6U3RyaW5nKG8pfSkpLGw9ZnVuY3Rpb24odSl7bGV0IGY9W107Zm9yKGxldCBwPTA7cDx1Lmxlbmd0aC8zO3ArKyl7bGV0IGQ9W107Zm9yKGxldCBnPTA7ZzwzO2crKylkLnB1c2godVtwKjMrZ10pO2YucHVzaChkKX1yZXR1cm4gZn0sYz10aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUodT0+e2lmKHUuY2FuY2VsbGVkKXJldHVybiBQcm9taXNlLnJlamVjdCh7Y29kZTptMS5DQU5DRUxMRUQsbWVzc2FnZToiUmVzcG9uc2Ugd2FzIGludmFsaWRhdGVkLiJ9KTtsZXQgaD11LnZhbHVlO3N3aXRjaChuKXtjYXNlIlZFUlRFWCI6YS52ZXJ0aWNlcz1sKG5ldyBGbG9hdDMyQXJyYXkoaCkpO2JyZWFrO2Nhc2UiRkFDRSI6YS5mYWNlcz1sKG5ldyBJbnQzMkFycmF5KGgpKTticmVhaztjYXNlIkNPTE9SIjphLmNvbG9ycz1sKG5ldyBVaW50OEFycmF5KGgpKTticmVha31yZXR1cm4gYX0pO3JldHVybiB0aGlzLl9yZXF1ZXN0TWFuYWdlci5mZXRjaChzLHttZXRob2Q6IkdFVCIsaGVhZGVyczp7cmVzcG9uc2VUeXBlOiJhcnJheWJ1ZmZlciIsY29udGVudFR5cGU6cWN0W25dfX0pLnRoZW4odT0+dS5hcnJheUJ1ZmZlcigpKS50aGVuKGMpfWZldGNoRGF0YSh0LHIsbixpKXtsZXQgbz1bXSxhPW5ldyBNYXA7cmV0dXJuIE9iamVjdC5rZXlzKGNWKS5mb3JFYWNoKHM9PntsZXQgbD0xPDxjVltzXTt0LmNvbXBvbmVudHMmbCYmby5wdXNoKHRoaXMuX2ZldGNoRGF0YUJ5U3RlcChyLG4scyxpLHQuc3RlcCxhKSl9KSxQcm9taXNlLmFsbChvKX1fZmV0Y2hNZXRhZGF0YSh0LHIsbil7dGhpcy5fY2FuY2VsbGVyLmNhbmNlbEFsbCgpO2xldCBpPV9lKCkucGx1Z2luUm91dGUoIm1lc2giLCIvbWVzaGVzIixuZXcgVVJMU2VhcmNoUGFyYW1zKHt0YWc6cixydW46dCxzYW1wbGU6bn0pKSxvPXRoaXMuX2NhbmNlbGxlci5jYW5jZWxsYWJsZShhPT5hLmNhbmNlbGxlZD9Qcm9taXNlLnJlamVjdCh7Y29kZTptMS5DQU5DRUxMRUQsbWVzc2FnZToiUmVzcG9uc2Ugd2FzIGludmFsaWRhdGVkLiJ9KTphLnZhbHVlKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIuZmV0Y2goaSkudGhlbihhPT5hLmpzb24oKSkudGhlbihvKS50aGVuKHRoaXMuX3Byb2Nlc3NNZXRhZGF0YS5iaW5kKHRoaXMpKX1fcHJvY2Vzc01ldGFkYXRhKHQpe2lmKCF0KXJldHVybjtsZXQgcj1uZXcgTWFwO2ZvcihsZXQgaT0wO2k8dC5sZW5ndGg7aSsrKXtsZXQgbz10W2ldO3IuaGFzKG8uc3RlcCl8fHIuc2V0KG8uc3RlcCxbXSksci5nZXQoby5zdGVwKS5wdXNoKG8pfWxldCBuPVtdO3JldHVybiByLmZvckVhY2goaT0+e2xldCBvPXRoaXMuX2NyZWF0ZVN0ZXBEYXR1bShpWzBdKTtuLnB1c2gobyl9KSxufV9jcmVhdGVTdGVwRGF0dW0odCl7cmV0dXJue3dhbGxfdGltZTpuZXcgRGF0ZSh0LndhbGxfdGltZSoxZTMpLHN0ZXA6dC5zdGVwLGNvbmZpZzp0LmNvbmZpZyxjb250ZW50X3R5cGU6dC5jb250ZW50X3R5cGUsY29tcG9uZW50czp0LmNvbXBvbmVudHN9fX07dmFyIHdNPXt9O1pzKHdNLHtBQ0VTRmlsbWljVG9uZU1hcHBpbmc6KCk9PnBmZSxBZGRFcXVhdGlvbjooKT0+RTEsQWRkT3BlcmF0aW9uOigpPT5jZmUsQWRkaXRpdmVBbmltYXRpb25CbGVuZE1vZGU6KCk9PmtodCxBZGRpdGl2ZUJsZW5kaW5nOigpPT5NdXQsQWxwaGFGb3JtYXQ6KCk9PnhmZSxBbHdheXNEZXB0aDooKT0+cmZlLEFsd2F5c1N0ZW5jaWxGdW5jOigpPT5PZmUsQW1iaWVudExpZ2h0OigpPT5MNixBbWJpZW50TGlnaHRQcm9iZTooKT0+elUsQW5pbWF0aW9uQ2xpcDooKT0+dHgsQW5pbWF0aW9uTG9hZGVyOigpPT5vaHQsQW5pbWF0aW9uTWl4ZXI6KCk9PlZVLEFuaW1hdGlvbk9iamVjdEdyb3VwOigpPT5IVSxBbmltYXRpb25VdGlsczooKT0+am4sQXJjQ3VydmU6KCk9Pmw2LEFycmF5Q2FtZXJhOigpPT5uNixBcnJvd0hlbHBlcjooKT0+TWh0LEF1ZGlvOigpPT5ENixBdWRpb0FuYWx5c2VyOigpPT5GVSxBdWRpb0NvbnRleHQ6KCk9PnpodCxBdWRpb0xpc3RlbmVyOigpPT5jaHQsQXVkaW9Mb2FkZXI6KCk9PkRVLEF4ZXNIZWxwZXI6KCk9PnZNLEF4aXNIZWxwZXI6KCk9PkswcixCYWNrU2lkZTooKT0+SWksQmFzaWNEZXB0aFBhY2tpbmc6KCk9PlJmZSxCYXNpY1NoYWRvd01hcDooKT0+bWhyLEJpbmFyeVRleHR1cmVMb2FkZXI6KCk9PmVfcixCb25lOigpPT5zTSxCb29sZWFuS2V5ZnJhbWVUcmFjazooKT0+c20sQm91bmRpbmdCb3hIZWxwZXI6KCk9PlowcixCb3gyOigpPT5LMCxCb3gzOigpPT50YSxCb3gzSGVscGVyOigpPT53aHQsQm94QnVmZmVyR2VvbWV0cnk6KCk9PnRwLEJveEdlb21ldHJ5OigpPT50cCxCb3hIZWxwZXI6KCk9PnlNLEJ1ZmZlckF0dHJpYnV0ZTooKT0+SmUsQnVmZmVyR2VvbWV0cnk6KCk9PlBlLEJ1ZmZlckdlb21ldHJ5TG9hZGVyOigpPT5SVSxCeXRlVHlwZTooKT0+bWZlLENhY2hlOigpPT5leCxDYW1lcmE6KCk9Pk4xLENhbWVyYUhlbHBlcjooKT0+Ymh0LENhbnZhc1JlbmRlcmVyOigpPT5uX3IsQ2FudmFzVGV4dHVyZTooKT0+eFUsQ2F0bXVsbFJvbUN1cnZlMzooKT0+YzYsQ2luZW9uVG9uZU1hcHBpbmc6KCk9PmZmZSxDaXJjbGVCdWZmZXJHZW9tZXRyeTooKT0+QjEsQ2lyY2xlR2VvbWV0cnk6KCk9PkIxLENsYW1wVG9FZGdlV3JhcHBpbmc6KCk9PkpvLENsb2NrOigpPT5tTSxDb2xvcjooKT0+bmUsQ29sb3JLZXlmcmFtZVRyYWNrOigpPT5NNixDb21wcmVzc2VkVGV4dHVyZTooKT0+YTYsQ29tcHJlc3NlZFRleHR1cmVMb2FkZXI6KCk9PmFodCxDb25lQnVmZmVyR2VvbWV0cnk6KCk9PkgxLENvbmVHZW9tZXRyeTooKT0+SDEsQ3ViZUNhbWVyYTooKT0+SjMsQ3ViZVJlZmxlY3Rpb25NYXBwaW5nOigpPT5peCxDdWJlUmVmcmFjdGlvbk1hcHBpbmc6KCk9Pm94LEN1YmVUZXh0dXJlOigpPT5WMCxDdWJlVGV4dHVyZUxvYWRlcjooKT0+VFUsQ3ViZVVWUmVmbGVjdGlvbk1hcHBpbmc6KCk9PnhNLEN1YmVVVlJlZnJhY3Rpb25NYXBwaW5nOigpPT56NixDdWJpY0JlemllckN1cnZlOigpPT5jTSxDdWJpY0JlemllckN1cnZlMzooKT0+dTYsQ3ViaWNJbnRlcnBvbGFudDooKT0+U1UsQ3VsbEZhY2VCYWNrOigpPT5TdXQsQ3VsbEZhY2VGcm9udDooKT0+VmhlLEN1bGxGYWNlRnJvbnRCYWNrOigpPT5kaHIsQ3VsbEZhY2VOb25lOigpPT5IaGUsQ3VydmU6KCk9PnBzLEN1cnZlUGF0aDooKT0+d1UsQ3VzdG9tQmxlbmRpbmc6KCk9PnFoZSxDdXN0b21Ub25lTWFwcGluZzooKT0+ZGZlLEN5bGluZGVyQnVmZmVyR2VvbWV0cnk6KCk9PmFtLEN5bGluZGVyR2VvbWV0cnk6KCk9PmFtLEN5bGluZHJpY2FsOigpPT5taHQsRGF0YVRleHR1cmU6KCk9PlFkLERhdGFUZXh0dXJlMkRBcnJheTooKT0+dE0sRGF0YVRleHR1cmUzRDooKT0+cjYsRGF0YVRleHR1cmVMb2FkZXI6KCk9PkNVLERhdGFVdGlsczooKT0+VGh0LERlY3JlbWVudFN0ZW5jaWxPcDooKT0+VGhyLERlY3JlbWVudFdyYXBTdGVuY2lsT3A6KCk9PkFocixEZWZhdWx0TG9hZGluZ01hbmFnZXI6KCk9PmlwZSxEZXB0aEZvcm1hdDooKT0+RjAsRGVwdGhTdGVuY2lsRm9ybWF0OigpPT5SMSxEZXB0aFRleHR1cmU6KCk9Pm5NLERpcmVjdGlvbmFsTGlnaHQ6KCk9Pkk2LERpcmVjdGlvbmFsTGlnaHRIZWxwZXI6KCk9PnhodCxEaXNjcmV0ZUludGVycG9sYW50OigpPT5NVSxEb2RlY2FoZWRyb25CdWZmZXJHZW9tZXRyeTooKT0+VjEsRG9kZWNhaGVkcm9uR2VvbWV0cnk6KCk9PlYxLERvdWJsZVNpZGU6KCk9PmsxLERzdEFscGhhRmFjdG9yOigpPT5LaGUsRHN0Q29sb3JGYWN0b3I6KCk9PkpoZSxEeW5hbWljQnVmZmVyQXR0cmlidXRlOigpPT5IMHIsRHluYW1pY0NvcHlVc2FnZTooKT0+VWhyLER5bmFtaWNEcmF3VXNhZ2U6KCk9PlkzLER5bmFtaWNSZWFkVXNhZ2U6KCk9PkJocixFZGdlc0dlb21ldHJ5OigpPT5zNixFZGdlc0hlbHBlcjooKT0+SjByLEVsbGlwc2VDdXJ2ZTooKT0+VTEsRXF1YWxEZXB0aDooKT0+aWZlLEVxdWFsU3RlbmNpbEZ1bmM6KCk9PmtocixFcXVpcmVjdGFuZ3VsYXJSZWZsZWN0aW9uTWFwcGluZzooKT0+WVAsRXF1aXJlY3Rhbmd1bGFyUmVmcmFjdGlvbk1hcHBpbmc6KCk9PmpQLEV1bGVyOigpPT5lbSxFdmVudERpc3BhdGNoZXI6KCk9PnFzLEV4dHJ1ZGVCdWZmZXJHZW9tZXRyeTooKT0+aGgsRXh0cnVkZUdlb21ldHJ5OigpPT5oaCxGYWNlQ29sb3JzOigpPT5QMHIsRmlsZUxvYWRlcjooKT0+SmMsRmxhdFNoYWRpbmc6KCk9PkFodCxGbG9hdDE2QnVmZmVyQXR0cmlidXRlOigpPT5kVSxGbG9hdDMyQXR0cmlidXRlOigpPT5YMHIsRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZTooKT0+eGUsRmxvYXQ2NEF0dHJpYnV0ZTooKT0+JDByLEZsb2F0NjRCdWZmZXJBdHRyaWJ1dGU6KCk9Pm1VLEZsb2F0VHlwZTooKT0+WGQsRm9nOigpPT5GMSxGb2dFeHAyOigpPT56MSxGb250OigpPT51X3IsRm9udExvYWRlcjooKT0+Y19yLEZyYW1lYnVmZmVyVGV4dHVyZTooKT0+dlUsRnJvbnRTaWRlOigpPT5MMSxGcnVzdHVtOigpPT5EMSxHTEJ1ZmZlckF0dHJpYnV0ZTooKT0+cVUsR0xTTDE6KCk9PkdocixHTFNMMzooKT0+S3V0LEdyZWF0ZXJEZXB0aDooKT0+YWZlLEdyZWF0ZXJFcXVhbERlcHRoOigpPT5vZmUsR3JlYXRlckVxdWFsU3RlbmNpbEZ1bmM6KCk9Pk9ocixHcmVhdGVyU3RlbmNpbEZ1bmM6KCk9Pk5ocixHcmlkSGVscGVyOigpPT5ZVSxHcm91cDooKT0+JGQsSGFsZkZsb2F0VHlwZTooKT0+QTEsSGVtaXNwaGVyZUxpZ2h0OigpPT5UNixIZW1pc3BoZXJlTGlnaHRIZWxwZXI6KCk9PnlodCxIZW1pc3BoZXJlTGlnaHRQcm9iZTooKT0+T1UsSWNvc2FoZWRyb25CdWZmZXJHZW9tZXRyeTooKT0+VzEsSWNvc2FoZWRyb25HZW9tZXRyeTooKT0+VzEsSW1hZ2VCaXRtYXBMb2FkZXI6KCk9Pk5VLEltYWdlTG9hZGVyOigpPT5yeCxJbWFnZVV0aWxzOigpPT5aZixJbW1lZGlhdGVSZW5kZXJPYmplY3Q6KCk9PmhfcixJbmNyZW1lbnRTdGVuY2lsT3A6KCk9PkVocixJbmNyZW1lbnRXcmFwU3RlbmNpbE9wOigpPT5DaHIsSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlOigpPT5ubSxJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeTooKT0+TjYsSW5zdGFuY2VkSW50ZXJsZWF2ZWRCdWZmZXI6KCk9PlVVLEluc3RhbmNlZE1lc2g6KCk9Pmk2LEludDE2QXR0cmlidXRlOigpPT5HMHIsSW50MTZCdWZmZXJBdHRyaWJ1dGU6KCk9PmZVLEludDMyQXR0cmlidXRlOigpPT5ZMHIsSW50MzJCdWZmZXJBdHRyaWJ1dGU6KCk9PnBVLEludDhBdHRyaWJ1dGU6KCk9PlYwcixJbnQ4QnVmZmVyQXR0cmlidXRlOigpPT5jVSxJbnRUeXBlOigpPT5fZmUsSW50ZXJsZWF2ZWRCdWZmZXI6KCk9PnJtLEludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlOigpPT5lcCxJbnRlcnBvbGFudDooKT0+ZmgsSW50ZXJwb2xhdGVEaXNjcmV0ZTooKT0+S1AsSW50ZXJwb2xhdGVMaW5lYXI6KCk9PlpQLEludGVycG9sYXRlU21vb3RoOigpPT5yVSxJbnZlcnRTdGVuY2lsT3A6KCk9PlBocixKU09OTG9hZGVyOigpPT5pX3IsS2VlcFN0ZW5jaWxPcDooKT0+blUsS2V5ZnJhbWVUcmFjazooKT0+T2wsTE9EOigpPT5fVSxMYXRoZUJ1ZmZlckdlb21ldHJ5OigpPT5ZMSxMYXRoZUdlb21ldHJ5OigpPT5ZMSxMYXllcnM6KCk9PlgzLExlbnNGbGFyZTooKT0+YV9yLExlc3NEZXB0aDooKT0+bmZlLExlc3NFcXVhbERlcHRoOigpPT5pVSxMZXNzRXF1YWxTdGVuY2lsRnVuYzooKT0+UmhyLExlc3NTdGVuY2lsRnVuYzooKT0+TGhyLExpZ2h0OigpPT56bCxMaWdodFByb2JlOigpPT5ueCxMaW5lOigpPT5jaCxMaW5lMzooKT0+R1UsTGluZUJhc2ljTWF0ZXJpYWw6KCk9PkdpLExpbmVDdXJ2ZTooKT0+cTEsTGluZUN1cnZlMzooKT0+YlUsTGluZURhc2hlZE1hdGVyaWFsOigpPT53NixMaW5lTG9vcDooKT0+bzYsTGluZVBpZWNlczooKT0+QzByLExpbmVTZWdtZW50czooKT0+UGEsTGluZVN0cmlwOigpPT5UMHIsTGluZWFyRW5jb2Rpbmc6KCk9PnRtLExpbmVhckZpbHRlcjooKT0+aWksTGluZWFySW50ZXJwb2xhbnQ6KCk9PlM2LExpbmVhck1pcE1hcExpbmVhckZpbHRlcjooKT0+eGhyLExpbmVhck1pcE1hcE5lYXJlc3RGaWx0ZXI6KCk9PnZocixMaW5lYXJNaXBtYXBMaW5lYXJGaWx0ZXI6KCk9PmF4LExpbmVhck1pcG1hcE5lYXJlc3RGaWx0ZXI6KCk9PkxodCxMaW5lYXJUb25lTWFwcGluZzooKT0+dWZlLExvYWRlcjooKT0+ZWEsTG9hZGVyVXRpbHM6KCk9PmRNLExvYWRpbmdNYW5hZ2VyOigpPT5FNixMb29wT25jZTooKT0+UGZlLExvb3BQaW5nUG9uZzooKT0+TGZlLExvb3BSZXBlYXQ6KCk9PklmZSxMdW1pbmFuY2VBbHBoYUZvcm1hdDooKT0+d2ZlLEx1bWluYW5jZUZvcm1hdDooKT0+YmZlLE1PVVNFOigpPT5aMCxNYXRlcmlhbDooKT0+cWksTWF0ZXJpYWxMb2FkZXI6KCk9PmtVLE1hdGg6KCk9PmlmcixNYXRoVXRpbHM6KCk9PmlmcixNYXRyaXgzOigpPT5raSxNYXRyaXg0OigpPT5NZSxNYXhFcXVhdGlvbjooKT0+QXV0LE1lc2g6KCk9PnRpLE1lc2hCYXNpY01hdGVyaWFsOigpPT5zaCxNZXNoRGVwdGhNYXRlcmlhbDooKT0+ZU0sTWVzaERpc3RhbmNlTWF0ZXJpYWw6KCk9PnJNLE1lc2hGYWNlTWF0ZXJpYWw6KCk9PkwwcixNZXNoTGFtYmVydE1hdGVyaWFsOigpPT54NixNZXNoTWF0Y2FwTWF0ZXJpYWw6KCk9PmI2LE1lc2hOb3JtYWxNYXRlcmlhbDooKT0+djYsTWVzaFBob25nTWF0ZXJpYWw6KCk9Pl82LE1lc2hQaHlzaWNhbE1hdGVyaWFsOigpPT5nNixNZXNoU3RhbmRhcmRNYXRlcmlhbDooKT0+cE0sTWVzaFRvb25NYXRlcmlhbDooKT0+eTYsTWluRXF1YXRpb246KCk9PkN1dCxNaXJyb3JlZFJlcGVhdFdyYXBwaW5nOigpPT4kUCxNaXhPcGVyYXRpb246KCk9PmxmZSxNdWx0aU1hdGVyaWFsOigpPT5rMHIsTXVsdGlwbHlCbGVuZGluZzooKT0+VHV0LE11bHRpcGx5T3BlcmF0aW9uOigpPT5PNixOZWFyZXN0RmlsdGVyOigpPT5MaSxOZWFyZXN0TWlwTWFwTGluZWFyRmlsdGVyOigpPT55aHIsTmVhcmVzdE1pcE1hcE5lYXJlc3RGaWx0ZXI6KCk9Pl9ocixOZWFyZXN0TWlwbWFwTGluZWFyRmlsdGVyOigpPT5hVSxOZWFyZXN0TWlwbWFwTmVhcmVzdEZpbHRlcjooKT0+b1UsTmV2ZXJEZXB0aDooKT0+ZWZlLE5ldmVyU3RlbmNpbEZ1bmM6KCk9PklocixOb0JsZW5kaW5nOigpPT5LZCxOb0NvbG9yczooKT0+QTByLE5vVG9uZU1hcHBpbmc6KCk9PlpkLE5vcm1hbEFuaW1hdGlvbkJsZW5kTW9kZTooKT0+JFUsTm9ybWFsQmxlbmRpbmc6KCk9PlYzLE5vdEVxdWFsRGVwdGg6KCk9PnNmZSxOb3RFcXVhbFN0ZW5jaWxGdW5jOigpPT5EaHIsTnVtYmVyS2V5ZnJhbWVUcmFjazooKT0+SjEsT2JqZWN0M0Q6KCk9Pm9yLE9iamVjdExvYWRlcjooKT0+c2h0LE9iamVjdFNwYWNlTm9ybWFsTWFwOigpPT5EZmUsT2N0YWhlZHJvbkJ1ZmZlckdlb21ldHJ5OigpPT5ZMCxPY3RhaGVkcm9uR2VvbWV0cnk6KCk9PlkwLE9uZUZhY3RvcjooKT0+amhlLE9uZU1pbnVzRHN0QWxwaGFGYWN0b3I6KCk9PlpoZSxPbmVNaW51c0RzdENvbG9yRmFjdG9yOigpPT5RaGUsT25lTWludXNTcmNBbHBoYUZhY3RvcjooKT0+SWh0LE9uZU1pbnVzU3JjQ29sb3JGYWN0b3I6KCk9PiRoZSxPcnRob2dyYXBoaWNDYW1lcmE6KCk9Pk8xLFBDRlNoYWRvd01hcDooKT0+Q2h0LFBDRlNvZnRTaGFkb3dNYXA6KCk9PlVoZSxQTVJFTUdlbmVyYXRvcjooKT0+ZTYsUGFyYW1ldHJpY0dlb21ldHJ5OigpPT5zX3IsUGFydGljbGU6KCk9Pk4wcixQYXJ0aWNsZUJhc2ljTWF0ZXJpYWw6KCk9PnowcixQYXJ0aWNsZVN5c3RlbTooKT0+RDByLFBhcnRpY2xlU3lzdGVtTWF0ZXJpYWw6KCk9PkYwcixQYXRoOigpPT5HMSxQZXJzcGVjdGl2ZUNhbWVyYTooKT0+VWksUGxhbmU6KCk9PiRjLFBsYW5lQnVmZmVyR2VvbWV0cnk6KCk9PlUwLFBsYW5lR2VvbWV0cnk6KCk9PlUwLFBsYW5lSGVscGVyOigpPT5TaHQsUG9pbnRDbG91ZDooKT0+UjByLFBvaW50Q2xvdWRNYXRlcmlhbDooKT0+TzByLFBvaW50TGlnaHQ6KCk9PlA2LFBvaW50TGlnaHRIZWxwZXI6KCk9Pl9odCxQb2ludHM6KCk9Pm9tLFBvaW50c01hdGVyaWFsOigpPT5pbSxQb2xhckdyaWRIZWxwZXI6KCk9PnZodCxQb2x5aGVkcm9uQnVmZmVyR2VvbWV0cnk6KCk9PnVoLFBvbHloZWRyb25HZW9tZXRyeTooKT0+dWgsUG9zaXRpb25hbEF1ZGlvOigpPT51aHQsUHJvcGVydHlCaW5kaW5nOigpPT5DcixQcm9wZXJ0eU1peGVyOigpPT5CVSxRdWFkcmF0aWNCZXppZXJDdXJ2ZTooKT0+dU0sUXVhZHJhdGljQmV6aWVyQ3VydmUzOigpPT5oTSxRdWF0ZXJuaW9uOigpPT55aSxRdWF0ZXJuaW9uS2V5ZnJhbWVUcmFjazooKT0+JDAsUXVhdGVybmlvbkxpbmVhckludGVycG9sYW50OigpPT5FVSxSRVZJU0lPTjooKT0+alUsUkdCQURlcHRoUGFja2luZzooKT0+TmZlLFJHQkFGb3JtYXQ6KCk9PlFvLFJHQkFJbnRlZ2VyRm9ybWF0OigpPT5DZmUsUkdCQV9BU1RDXzEweDEwX0Zvcm1hdDooKT0+WXV0LFJHQkFfQVNUQ18xMHg1X0Zvcm1hdDooKT0+cXV0LFJHQkFfQVNUQ18xMHg2X0Zvcm1hdDooKT0+R3V0LFJHQkFfQVNUQ18xMHg4X0Zvcm1hdDooKT0+V3V0LFJHQkFfQVNUQ18xMngxMF9Gb3JtYXQ6KCk9Pmp1dCxSR0JBX0FTVENfMTJ4MTJfRm9ybWF0OigpPT5YdXQsUkdCQV9BU1RDXzR4NF9Gb3JtYXQ6KCk9PkR1dCxSR0JBX0FTVENfNXg0X0Zvcm1hdDooKT0+T3V0LFJHQkFfQVNUQ181eDVfRm9ybWF0OigpPT56dXQsUkdCQV9BU1RDXzZ4NV9Gb3JtYXQ6KCk9PkZ1dCxSR0JBX0FTVENfNng2X0Zvcm1hdDooKT0+QnV0LFJHQkFfQVNUQ184eDVfRm9ybWF0OigpPT5IdXQsUkdCQV9BU1RDXzh4Nl9Gb3JtYXQ6KCk9PlZ1dCxSR0JBX0FTVENfOHg4X0Zvcm1hdDooKT0+VXV0LFJHQkFfQlBUQ19Gb3JtYXQ6KCk9PiR1dCxSR0JBX0VUQzJfRUFDX0Zvcm1hdDooKT0+TnV0LFJHQkFfUFZSVENfMkJQUFYxX0Zvcm1hdDooKT0+a3V0LFJHQkFfUFZSVENfNEJQUFYxX0Zvcm1hdDooKT0+THV0LFJHQkFfUzNUQ19EWFQxX0Zvcm1hdDooKT0+UVYsUkdCQV9TM1RDX0RYVDNfRm9ybWF0OigpPT50VSxSR0JBX1MzVENfRFhUNV9Gb3JtYXQ6KCk9PmVVLFJHQl9FVEMxX0Zvcm1hdDooKT0+QWZlLFJHQl9FVEMyX0Zvcm1hdDooKT0+UnV0LFJHQl9QVlJUQ18yQlBQVjFfRm9ybWF0OigpPT5JdXQsUkdCX1BWUlRDXzRCUFBWMV9Gb3JtYXQ6KCk9PlB1dCxSR0JfUzNUQ19EWFQxX0Zvcm1hdDooKT0+SlYsUkdGb3JtYXQ6KCk9PkVmZSxSR0ludGVnZXJGb3JtYXQ6KCk9PlRmZSxSYXdTaGFkZXJNYXRlcmlhbDooKT0+cTAsUmF5OigpPT5RZixSYXljYXN0ZXI6KCk9PnBodCxSZWN0QXJlYUxpZ2h0OigpPT5rNixSZWRGb3JtYXQ6KCk9PlNmZSxSZWRJbnRlZ2VyRm9ybWF0OigpPT5NZmUsUmVpbmhhcmRUb25lTWFwcGluZzooKT0+aGZlLFJlcGVhdFdyYXBwaW5nOigpPT5YUCxSZXBsYWNlU3RlbmNpbE9wOigpPT5NaHIsUmV2ZXJzZVN1YnRyYWN0RXF1YXRpb246KCk9PldoZSxSaW5nQnVmZmVyR2VvbWV0cnk6KCk9PmoxLFJpbmdHZW9tZXRyeTooKT0+ajEsU2NlbmU6KCk9PkcwLFNjZW5lVXRpbHM6KCk9Pm9fcixTaGFkZXJDaHVuazooKT0+aHIsU2hhZGVyTGliOigpPT5haCxTaGFkZXJNYXRlcmlhbDooKT0+bGgsU2hhZG93TWF0ZXJpYWw6KCk9Pm02LFNoYXBlOigpPT5LYyxTaGFwZUJ1ZmZlckdlb21ldHJ5OigpPT5qMCxTaGFwZUdlb21ldHJ5OigpPT5qMCxTaGFwZVBhdGg6KCk9PkVodCxTaGFwZVV0aWxzOigpPT5aYyxTaG9ydFR5cGU6KCk9PmdmZSxTa2VsZXRvbjooKT0+bE0sU2tlbGV0b25IZWxwZXI6KCk9PldVLFNraW5uZWRNZXNoOigpPT5hTSxTbW9vdGhTaGFkaW5nOigpPT5naHIsU3BoZXJlOigpPT5KZixTcGhlcmVCdWZmZXJHZW9tZXRyeTooKT0+WDAsU3BoZXJlR2VvbWV0cnk6KCk9PlgwLFNwaGVyaWNhbDooKT0+X00sU3BoZXJpY2FsSGFybW9uaWNzMzooKT0+UjYsU3BsaW5lQ3VydmU6KCk9PmZNLFNwb3RMaWdodDooKT0+QTYsU3BvdExpZ2h0SGVscGVyOigpPT5naHQsU3ByaXRlOigpPT5vTSxTcHJpdGVNYXRlcmlhbDooKT0+aU0sU3JjQWxwaGFGYWN0b3I6KCk9PlBodCxTcmNBbHBoYVNhdHVyYXRlRmFjdG9yOigpPT50ZmUsU3JjQ29sb3JGYWN0b3I6KCk9PlhoZSxTdGF0aWNDb3B5VXNhZ2U6KCk9PlZocixTdGF0aWNEcmF3VXNhZ2U6KCk9PlczLFN0YXRpY1JlYWRVc2FnZTooKT0+RmhyLFN0ZXJlb0NhbWVyYTooKT0+bGh0LFN0cmVhbUNvcHlVc2FnZTooKT0+cWhyLFN0cmVhbURyYXdVc2FnZTooKT0+emhyLFN0cmVhbVJlYWRVc2FnZTooKT0+SGhyLFN0cmluZ0tleWZyYW1lVHJhY2s6KCk9PmxtLFN1YnRyYWN0RXF1YXRpb246KCk9PkdoZSxTdWJ0cmFjdGl2ZUJsZW5kaW5nOigpPT5FdXQsVE9VQ0g6KCk9PkowLFRhbmdlbnRTcGFjZU5vcm1hbE1hcDooKT0+c3gsVGV0cmFoZWRyb25CdWZmZXJHZW9tZXRyeTooKT0+WDEsVGV0cmFoZWRyb25HZW9tZXRyeTooKT0+WDEsVGV4dEdlb21ldHJ5OigpPT5sX3IsVGV4dHVyZTooKT0+dmksVGV4dHVyZUxvYWRlcjooKT0+QVUsVG9ydXNCdWZmZXJHZW9tZXRyeTooKT0+JDEsVG9ydXNHZW9tZXRyeTooKT0+JDEsVG9ydXNLbm90QnVmZmVyR2VvbWV0cnk6KCk9PksxLFRvcnVzS25vdEdlb21ldHJ5OigpPT5LMSxUcmlhbmdsZTooKT0+b2ksVHJpYW5nbGVGYW5EcmF3TW9kZTooKT0+d2hyLFRyaWFuZ2xlU3RyaXBEcmF3TW9kZTooKT0+YmhyLFRyaWFuZ2xlc0RyYXdNb2RlOigpPT5rZmUsVHViZUJ1ZmZlckdlb21ldHJ5OigpPT5aMSxUdWJlR2VvbWV0cnk6KCk9PloxLFVWTWFwcGluZzooKT0+WFUsVWludDE2QXR0cmlidXRlOigpPT5XMHIsVWludDE2QnVmZmVyQXR0cmlidXRlOigpPT4kMyxVaW50MzJBdHRyaWJ1dGU6KCk9PmowcixVaW50MzJCdWZmZXJBdHRyaWJ1dGU6KCk9PkszLFVpbnQ4QXR0cmlidXRlOigpPT5VMHIsVWludDhCdWZmZXJBdHRyaWJ1dGU6KCk9PnVVLFVpbnQ4Q2xhbXBlZEF0dHJpYnV0ZTooKT0+cTByLFVpbnQ4Q2xhbXBlZEJ1ZmZlckF0dHJpYnV0ZTooKT0+aFUsVW5pZm9ybTooKT0+Z00sVW5pZm9ybXNMaWI6KCk9PnJlLFVuaWZvcm1zVXRpbHM6KCk9PlZmZSxVbnNpZ25lZEJ5dGVUeXBlOigpPT5KZCxVbnNpZ25lZEludDI0OFR5cGU6KCk9PlAxLFVuc2lnbmVkSW50VHlwZTooKT0+VlAsVW5zaWduZWRTaG9ydDQ0NDRUeXBlOigpPT55ZmUsVW5zaWduZWRTaG9ydDU1NTFUeXBlOigpPT52ZmUsVW5zaWduZWRTaG9ydFR5cGU6KCk9PkczLFZTTVNoYWRvd01hcDooKT0+RjMsVmVjdG9yMjooKT0+THQsVmVjdG9yMzooKT0+aixWZWN0b3I0OigpPT5lbixWZWN0b3JLZXlmcmFtZVRyYWNrOigpPT5RMSxWZXJ0ZXg6KCk9PkIwcixWZXJ0ZXhDb2xvcnM6KCk9PkkwcixWaWRlb1RleHR1cmU6KCk9PnlVLFdlYkdMMVJlbmRlcmVyOigpPT5nVSxXZWJHTEN1YmVSZW5kZXJUYXJnZXQ6KCk9PlEzLFdlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzOigpPT5sVSxXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0OigpPT5qMyxXZWJHTFJlbmRlclRhcmdldDooKT0+aHMsV2ViR0xSZW5kZXJUYXJnZXRDdWJlOigpPT5yX3IsV2ViR0xSZW5kZXJlcjooKT0+cm4sV2ViR0xVdGlsczooKT0+UWZlLFdpcmVmcmFtZUdlb21ldHJ5OigpPT5kNixXaXJlZnJhbWVIZWxwZXI6KCk9PlEwcixXcmFwQXJvdW5kRW5kaW5nOigpPT5KUCxYSFJMb2FkZXI6KCk9PnRfcixaZXJvQ3VydmF0dXJlRW5kaW5nOigpPT5UMSxaZXJvRmFjdG9yOigpPT5ZaGUsWmVyb1Nsb3BlRW5kaW5nOigpPT5DMSxaZXJvU3RlbmNpbE9wOigpPT5TaHIsX1NSR0JBRm9ybWF0OigpPT5zVSxzUkdCRW5jb2Rpbmc6KCk9PllufSk7dmFyIGpVPSIxMzciLFowPXtMRUZUOjAsTUlERExFOjEsUklHSFQ6MixST1RBVEU6MCxET0xMWToxLFBBTjoyfSxKMD17Uk9UQVRFOjAsUEFOOjEsRE9MTFlfUEFOOjIsRE9MTFlfUk9UQVRFOjN9LEhoZT0wLFN1dD0xLFZoZT0yLGRocj0zLG1ocj0wLENodD0xLFVoZT0yLEYzPTMsTDE9MCxJaT0xLGsxPTIsQWh0PTEsZ2hyPTIsS2Q9MCxWMz0xLE11dD0yLEV1dD0zLFR1dD00LHFoZT01LEUxPTEwMCxHaGU9MTAxLFdoZT0xMDIsQ3V0PTEwMyxBdXQ9MTA0LFloZT0yMDAsamhlPTIwMSxYaGU9MjAyLCRoZT0yMDMsUGh0PTIwNCxJaHQ9MjA1LEtoZT0yMDYsWmhlPTIwNyxKaGU9MjA4LFFoZT0yMDksdGZlPTIxMCxlZmU9MCxyZmU9MSxuZmU9MixpVT0zLGlmZT00LG9mZT01LGFmZT02LHNmZT03LE82PTAsbGZlPTEsY2ZlPTIsWmQ9MCx1ZmU9MSxoZmU9MixmZmU9MyxwZmU9NCxkZmU9NSxYVT0zMDAsaXg9MzAxLG94PTMwMixZUD0zMDMsalA9MzA0LHhNPTMwNix6Nj0zMDcsWFA9MWUzLEpvPTEwMDEsJFA9MTAwMixMaT0xMDAzLG9VPTEwMDQsX2hyPTEwMDQsYVU9MTAwNSx5aHI9MTAwNSxpaT0xMDA2LExodD0xMDA3LHZocj0xMDA3LGF4PTEwMDgseGhyPTEwMDgsSmQ9MTAwOSxtZmU9MTAxMCxnZmU9MTAxMSxHMz0xMDEyLF9mZT0xMDEzLFZQPTEwMTQsWGQ9MTAxNSxBMT0xMDE2LHlmZT0xMDE3LHZmZT0xMDE4LFAxPTEwMjAseGZlPTEwMjEsUW89MTAyMyxiZmU9MTAyNCx3ZmU9MTAyNSxGMD0xMDI2LFIxPTEwMjcsU2ZlPTEwMjgsTWZlPTEwMjksRWZlPTEwMzAsVGZlPTEwMzEsQ2ZlPTEwMzMsSlY9MzM3NzYsUVY9MzM3NzcsdFU9MzM3NzgsZVU9MzM3NzksUHV0PTM1ODQwLEl1dD0zNTg0MSxMdXQ9MzU4NDIsa3V0PTM1ODQzLEFmZT0zNjE5NixSdXQ9Mzc0OTIsTnV0PTM3NDk2LER1dD0zNzgwOCxPdXQ9Mzc4MDksenV0PTM3ODEwLEZ1dD0zNzgxMSxCdXQ9Mzc4MTIsSHV0PTM3ODEzLFZ1dD0zNzgxNCxVdXQ9Mzc4MTUscXV0PTM3ODE2LEd1dD0zNzgxNyxXdXQ9Mzc4MTgsWXV0PTM3ODE5LGp1dD0zNzgyMCxYdXQ9Mzc4MjEsJHV0PTM2NDkyLFBmZT0yMjAwLElmZT0yMjAxLExmZT0yMjAyLEtQPTIzMDAsWlA9MjMwMSxyVT0yMzAyLFQxPTI0MDAsQzE9MjQwMSxKUD0yNDAyLCRVPTI1MDAsa2h0PTI1MDEsa2ZlPTAsYmhyPTEsd2hyPTIsdG09M2UzLFluPTMwMDEsUmZlPTMyMDAsTmZlPTMyMDEsc3g9MCxEZmU9MSxTaHI9MCxuVT03NjgwLE1ocj03NjgxLEVocj03NjgyLFRocj03NjgzLENocj0zNDA1NSxBaHI9MzQwNTYsUGhyPTUzODYsSWhyPTUxMixMaHI9NTEzLGtocj01MTQsUmhyPTUxNSxOaHI9NTE2LERocj01MTcsT2hyPTUxOCxPZmU9NTE5LFczPTM1MDQ0LFkzPTM1MDQ4LHpocj0zNTA0MCxGaHI9MzUwNDUsQmhyPTM1MDQ5LEhocj0zNTA0MSxWaHI9MzUwNDYsVWhyPTM1MDUwLHFocj0zNTA0MixHaHI9IjEwMCIsS3V0PSIzMDAgZXMiLHNVPTEwMzUscXM9Y2xhc3N7YWRkRXZlbnRMaXN0ZW5lcih0LHIpe3RoaXMuX2xpc3RlbmVycz09PXZvaWQgMCYmKHRoaXMuX2xpc3RlbmVycz17fSk7bGV0IG49dGhpcy5fbGlzdGVuZXJzO25bdF09PT12b2lkIDAmJihuW3RdPVtdKSxuW3RdLmluZGV4T2Yocik9PT0tMSYmblt0XS5wdXNoKHIpfWhhc0V2ZW50TGlzdGVuZXIodCxyKXtpZih0aGlzLl9saXN0ZW5lcnM9PT12b2lkIDApcmV0dXJuITE7bGV0IG49dGhpcy5fbGlzdGVuZXJzO3JldHVybiBuW3RdIT09dm9pZCAwJiZuW3RdLmluZGV4T2YocikhPT0tMX1yZW1vdmVFdmVudExpc3RlbmVyKHQscil7aWYodGhpcy5fbGlzdGVuZXJzPT09dm9pZCAwKXJldHVybjtsZXQgaT10aGlzLl9saXN0ZW5lcnNbdF07aWYoaSE9PXZvaWQgMCl7bGV0IG89aS5pbmRleE9mKHIpO28hPT0tMSYmaS5zcGxpY2UobywxKX19ZGlzcGF0Y2hFdmVudCh0KXtpZih0aGlzLl9saXN0ZW5lcnM9PT12b2lkIDApcmV0dXJuO2xldCBuPXRoaXMuX2xpc3RlbmVyc1t0LnR5cGVdO2lmKG4hPT12b2lkIDApe3QudGFyZ2V0PXRoaXM7bGV0IGk9bi5zbGljZSgwKTtmb3IobGV0IG89MCxhPWkubGVuZ3RoO288YTtvKyspaVtvXS5jYWxsKHRoaXMsdCk7dC50YXJnZXQ9bnVsbH19fSxLbz1bXTtmb3IobGV0IGU9MDtlPDI1NjtlKyspS29bZV09KGU8MTY/IjAiOiIiKStlLnRvU3RyaW5nKDE2KTt2YXIgdVY9MTIzNDU2NyxJMT1NYXRoLlBJLzE4MCxRUD0xODAvTWF0aC5QSTtmdW5jdGlvbiBEbCgpe2xldCBlPU1hdGgucmFuZG9tKCkqNDI5NDk2NzI5NXwwLHQ9TWF0aC5yYW5kb20oKSo0Mjk0OTY3Mjk1fDAscj1NYXRoLnJhbmRvbSgpKjQyOTQ5NjcyOTV8MCxuPU1hdGgucmFuZG9tKCkqNDI5NDk2NzI5NXwwO3JldHVybihLb1tlJjI1NV0rS29bZT4+OCYyNTVdK0tvW2U+PjE2JjI1NV0rS29bZT4+MjQmMjU1XSsiLSIrS29bdCYyNTVdK0tvW3Q+PjgmMjU1XSsiLSIrS29bdD4+MTYmMTV8NjRdK0tvW3Q+PjI0JjI1NV0rIi0iK0tvW3ImNjN8MTI4XStLb1tyPj44JjI1NV0rIi0iK0tvW3I+PjE2JjI1NV0rS29bcj4+MjQmMjU1XStLb1tuJjI1NV0rS29bbj4+OCYyNTVdK0tvW24+PjE2JjI1NV0rS29bbj4+MjQmMjU1XSkudG9VcHBlckNhc2UoKX1mdW5jdGlvbiBabyhlLHQscil7cmV0dXJuIE1hdGgubWF4KHQsTWF0aC5taW4ocixlKSl9ZnVuY3Rpb24gUmh0KGUsdCl7cmV0dXJuKGUldCt0KSV0fWZ1bmN0aW9uIFdocihlLHQscixuLGkpe3JldHVybiBuKyhlLXQpKihpLW4pLyhyLXQpfWZ1bmN0aW9uIFlocihlLHQscil7cmV0dXJuIGUhPT10PyhyLWUpLyh0LWUpOjB9ZnVuY3Rpb24gVVAoZSx0LHIpe3JldHVybigxLXIpKmUrcip0fWZ1bmN0aW9uIGpocihlLHQscixuKXtyZXR1cm4gVVAoZSx0LDEtTWF0aC5leHAoLXIqbikpfWZ1bmN0aW9uIFhocihlLHQ9MSl7cmV0dXJuIHQtTWF0aC5hYnMoUmh0KGUsdCoyKS10KX1mdW5jdGlvbiAkaHIoZSx0LHIpe3JldHVybiBlPD10PzA6ZT49cj8xOihlPShlLXQpLyhyLXQpLGUqZSooMy0yKmUpKX1mdW5jdGlvbiBLaHIoZSx0LHIpe3JldHVybiBlPD10PzA6ZT49cj8xOihlPShlLXQpLyhyLXQpLGUqZSplKihlKihlKjYtMTUpKzEwKSl9ZnVuY3Rpb24gWmhyKGUsdCl7cmV0dXJuIGUrTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKih0LWUrMSkpfWZ1bmN0aW9uIEpocihlLHQpe3JldHVybiBlK01hdGgucmFuZG9tKCkqKHQtZSl9ZnVuY3Rpb24gUWhyKGUpe3JldHVybiBlKiguNS1NYXRoLnJhbmRvbSgpKX1mdW5jdGlvbiB0ZnIoZSl7cmV0dXJuIGUhPT12b2lkIDAmJih1Vj1lJTIxNDc0ODM2NDcpLHVWPXVWKjE2ODA3JTIxNDc0ODM2NDcsKHVWLTEpLzIxNDc0ODM2NDZ9ZnVuY3Rpb24gZWZyKGUpe3JldHVybiBlKkkxfWZ1bmN0aW9uIHJmcihlKXtyZXR1cm4gZSpRUH1mdW5jdGlvbiBadXQoZSl7cmV0dXJuKGUmZS0xKT09PTAmJmUhPT0wfWZ1bmN0aW9uIHpmZShlKXtyZXR1cm4gTWF0aC5wb3coMixNYXRoLmNlaWwoTWF0aC5sb2coZSkvTWF0aC5MTjIpKX1mdW5jdGlvbiBGZmUoZSl7cmV0dXJuIE1hdGgucG93KDIsTWF0aC5mbG9vcihNYXRoLmxvZyhlKS9NYXRoLkxOMikpfWZ1bmN0aW9uIG5mcihlLHQscixuLGkpe2xldCBvPU1hdGguY29zLGE9TWF0aC5zaW4scz1vKHIvMiksbD1hKHIvMiksYz1vKCh0K24pLzIpLHU9YSgodCtuKS8yKSxoPW8oKHQtbikvMiksZj1hKCh0LW4pLzIpLHA9bygobi10KS8yKSxkPWEoKG4tdCkvMik7c3dpdGNoKGkpe2Nhc2UiWFlYIjplLnNldChzKnUsbCpoLGwqZixzKmMpO2JyZWFrO2Nhc2UiWVpZIjplLnNldChsKmYscyp1LGwqaCxzKmMpO2JyZWFrO2Nhc2UiWlhaIjplLnNldChsKmgsbCpmLHMqdSxzKmMpO2JyZWFrO2Nhc2UiWFpYIjplLnNldChzKnUsbCpkLGwqcCxzKmMpO2JyZWFrO2Nhc2UiWVhZIjplLnNldChsKnAscyp1LGwqZCxzKmMpO2JyZWFrO2Nhc2UiWllaIjplLnNldChsKmQsbCpwLHMqdSxzKmMpO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCJUSFJFRS5NYXRoVXRpbHM6IC5zZXRRdWF0ZXJuaW9uRnJvbVByb3BlckV1bGVyKCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogIitpKX19dmFyIGlmcj1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxERUcyUkFEOkkxLFJBRDJERUc6UVAsZ2VuZXJhdGVVVUlEOkRsLGNsYW1wOlpvLGV1Y2xpZGVhbk1vZHVsbzpSaHQsbWFwTGluZWFyOldocixpbnZlcnNlTGVycDpZaHIsbGVycDpVUCxkYW1wOmpocixwaW5ncG9uZzpYaHIsc21vb3Roc3RlcDokaHIsc21vb3RoZXJzdGVwOktocixyYW5kSW50OlpocixyYW5kRmxvYXQ6SmhyLHJhbmRGbG9hdFNwcmVhZDpRaHIsc2VlZGVkUmFuZG9tOnRmcixkZWdUb1JhZDplZnIscmFkVG9EZWc6cmZyLGlzUG93ZXJPZlR3bzpadXQsY2VpbFBvd2VyT2ZUd286emZlLGZsb29yUG93ZXJPZlR3bzpGZmUsc2V0UXVhdGVybmlvbkZyb21Qcm9wZXJFdWxlcjpuZnJ9KSxMdD1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAscj0wKXt0aGlzLng9dCx0aGlzLnk9cn1nZXQgd2lkdGgoKXtyZXR1cm4gdGhpcy54fXNldCB3aWR0aCh0KXt0aGlzLng9dH1nZXQgaGVpZ2h0KCl7cmV0dXJuIHRoaXMueX1zZXQgaGVpZ2h0KHQpe3RoaXMueT10fXNldCh0LHIpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9cix0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXQsdGhpc31zZXRYKHQpe3JldHVybiB0aGlzLng9dCx0aGlzfXNldFkodCl7cmV0dXJuIHRoaXMueT10LHRoaXN9c2V0Q29tcG9uZW50KHQscil7c3dpdGNoKHQpe2Nhc2UgMDp0aGlzLng9cjticmVhaztjYXNlIDE6dGhpcy55PXI7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX1yZXR1cm4gdGhpc31nZXRDb21wb25lbnQodCl7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnkpfWNvcHkodCl7cmV0dXJuIHRoaXMueD10LngsdGhpcy55PXQueSx0aGlzfWFkZCh0LHIpe3JldHVybiByIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnModCxyKSk6KHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXMpfWFkZFNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kz10LHRoaXMueSs9dCx0aGlzfWFkZFZlY3RvcnModCxyKXtyZXR1cm4gdGhpcy54PXQueCtyLngsdGhpcy55PXQueStyLnksdGhpc31hZGRTY2FsZWRWZWN0b3IodCxyKXtyZXR1cm4gdGhpcy54Kz10Lngqcix0aGlzLnkrPXQueSpyLHRoaXN9c3ViKHQscil7cmV0dXJuIHIhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuc3ViVmVjdG9ycyh0LHIpKToodGhpcy54LT10LngsdGhpcy55LT10LnksdGhpcyl9c3ViU2NhbGFyKHQpe3JldHVybiB0aGlzLngtPXQsdGhpcy55LT10LHRoaXN9c3ViVmVjdG9ycyh0LHIpe3JldHVybiB0aGlzLng9dC54LXIueCx0aGlzLnk9dC55LXIueSx0aGlzfW11bHRpcGx5KHQpe3JldHVybiB0aGlzLngqPXQueCx0aGlzLnkqPXQueSx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLngqPXQsdGhpcy55Kj10LHRoaXN9ZGl2aWRlKHQpe3JldHVybiB0aGlzLngvPXQueCx0aGlzLnkvPXQueSx0aGlzfWRpdmlkZVNjYWxhcih0KXtyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhcigxL3QpfWFwcGx5TWF0cml4Myh0KXtsZXQgcj10aGlzLngsbj10aGlzLnksaT10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9aVswXSpyK2lbM10qbitpWzZdLHRoaXMueT1pWzFdKnIraVs0XSpuK2lbN10sdGhpc31taW4odCl7cmV0dXJuIHRoaXMueD1NYXRoLm1pbih0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5taW4odGhpcy55LHQueSksdGhpc31tYXgodCl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5tYXgodGhpcy55LHQueSksdGhpc31jbGFtcCh0LHIpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodC54LE1hdGgubWluKHIueCx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodC55LE1hdGgubWluKHIueSx0aGlzLnkpKSx0aGlzfWNsYW1wU2NhbGFyKHQscil7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LE1hdGgubWluKHIsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQsTWF0aC5taW4ocix0aGlzLnkpKSx0aGlzfWNsYW1wTGVuZ3RoKHQscil7bGV0IG49dGhpcy5sZW5ndGgoKTtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIobnx8MSkubXVsdGlwbHlTY2FsYXIoTWF0aC5tYXgodCxNYXRoLm1pbihyLG4pKSl9Zmxvb3IoKXtyZXR1cm4gdGhpcy54PU1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpLHRoaXN9Y2VpbCgpe3JldHVybiB0aGlzLng9TWF0aC5jZWlsKHRoaXMueCksdGhpcy55PU1hdGguY2VpbCh0aGlzLnkpLHRoaXN9cm91bmQoKXtyZXR1cm4gdGhpcy54PU1hdGgucm91bmQodGhpcy54KSx0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpLHRoaXN9cm91bmRUb1plcm8oKXtyZXR1cm4gdGhpcy54PXRoaXMueDwwP01hdGguY2VpbCh0aGlzLngpOk1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9dGhpcy55PDA/TWF0aC5jZWlsKHRoaXMueSk6TWF0aC5mbG9vcih0aGlzLnkpLHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMueD0tdGhpcy54LHRoaXMueT0tdGhpcy55LHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLngqdC54K3RoaXMueSp0Lnl9Y3Jvc3ModCl7cmV0dXJuIHRoaXMueCp0LnktdGhpcy55KnQueH1sZW5ndGhTcSgpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnl9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkpfW1hbmhhdHRhbkxlbmd0aCgpe3JldHVybiBNYXRoLmFicyh0aGlzLngpK01hdGguYWJzKHRoaXMueSl9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCl8fDEpfWFuZ2xlKCl7cmV0dXJuIE1hdGguYXRhbjIoLXRoaXMueSwtdGhpcy54KStNYXRoLlBJfWRpc3RhbmNlVG8odCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RhbmNlVG9TcXVhcmVkKHQpKX1kaXN0YW5jZVRvU3F1YXJlZCh0KXtsZXQgcj10aGlzLngtdC54LG49dGhpcy55LXQueTtyZXR1cm4gcipyK24qbn1tYW5oYXR0YW5EaXN0YW5jZVRvKHQpe3JldHVybiBNYXRoLmFicyh0aGlzLngtdC54KStNYXRoLmFicyh0aGlzLnktdC55KX1zZXRMZW5ndGgodCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIodCl9bGVycCh0LHIpe3JldHVybiB0aGlzLngrPSh0LngtdGhpcy54KSpyLHRoaXMueSs9KHQueS10aGlzLnkpKnIsdGhpc31sZXJwVmVjdG9ycyh0LHIsbil7cmV0dXJuIHRoaXMueD10LngrKHIueC10LngpKm4sdGhpcy55PXQueSsoci55LXQueSkqbix0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC54PT09dGhpcy54JiZ0Lnk9PT10aGlzLnl9ZnJvbUFycmF5KHQscj0wKXtyZXR1cm4gdGhpcy54PXRbcl0sdGhpcy55PXRbcisxXSx0aGlzfXRvQXJyYXkodD1bXSxyPTApe3JldHVybiB0W3JdPXRoaXMueCx0W3IrMV09dGhpcy55LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LHIsbil7cmV0dXJuIG4hPT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMueD10LmdldFgociksdGhpcy55PXQuZ2V0WShyKSx0aGlzfXJvdGF0ZUFyb3VuZCh0LHIpe2xldCBuPU1hdGguY29zKHIpLGk9TWF0aC5zaW4ociksbz10aGlzLngtdC54LGE9dGhpcy55LXQueTtyZXR1cm4gdGhpcy54PW8qbi1hKmkrdC54LHRoaXMueT1vKmkrYSpuK3QueSx0aGlzfXJhbmRvbSgpe3JldHVybiB0aGlzLng9TWF0aC5yYW5kb20oKSx0aGlzLnk9TWF0aC5yYW5kb20oKSx0aGlzfSpbU3ltYm9sLml0ZXJhdG9yXSgpe3lpZWxkIHRoaXMueCx5aWVsZCB0aGlzLnl9fTtMdC5wcm90b3R5cGUuaXNWZWN0b3IyPSEwO3ZhciBraT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZWxlbWVudHM9WzEsMCwwLDAsMSwwLDAsMCwxXSxhcmd1bWVudHMubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDM6IHRoZSBjb25zdHJ1Y3RvciBubyBsb25nZXIgcmVhZHMgYXJndW1lbnRzLiB1c2UgLnNldCgpIGluc3RlYWQuIil9c2V0KHQscixuLGksbyxhLHMsbCxjKXtsZXQgdT10aGlzLmVsZW1lbnRzO3JldHVybiB1WzBdPXQsdVsxXT1pLHVbMl09cyx1WzNdPXIsdVs0XT1vLHVbNV09bCx1WzZdPW4sdVs3XT1hLHVbOF09Yyx0aGlzfWlkZW50aXR5KCl7cmV0dXJuIHRoaXMuc2V0KDEsMCwwLDAsMSwwLDAsMCwxKSx0aGlzfWNvcHkodCl7bGV0IHI9dGhpcy5lbGVtZW50cyxuPXQuZWxlbWVudHM7cmV0dXJuIHJbMF09blswXSxyWzFdPW5bMV0sclsyXT1uWzJdLHJbM109blszXSxyWzRdPW5bNF0scls1XT1uWzVdLHJbNl09bls2XSxyWzddPW5bN10scls4XT1uWzhdLHRoaXN9ZXh0cmFjdEJhc2lzKHQscixuKXtyZXR1cm4gdC5zZXRGcm9tTWF0cml4M0NvbHVtbih0aGlzLDApLHIuc2V0RnJvbU1hdHJpeDNDb2x1bW4odGhpcywxKSxuLnNldEZyb21NYXRyaXgzQ29sdW1uKHRoaXMsMiksdGhpc31zZXRGcm9tTWF0cml4NCh0KXtsZXQgcj10LmVsZW1lbnRzO3JldHVybiB0aGlzLnNldChyWzBdLHJbNF0scls4XSxyWzFdLHJbNV0scls5XSxyWzJdLHJbNl0sclsxMF0pLHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0aGlzLHQpfXByZW11bHRpcGx5KHQpe3JldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXModCx0aGlzKX1tdWx0aXBseU1hdHJpY2VzKHQscil7bGV0IG49dC5lbGVtZW50cyxpPXIuZWxlbWVudHMsbz10aGlzLmVsZW1lbnRzLGE9blswXSxzPW5bM10sbD1uWzZdLGM9blsxXSx1PW5bNF0saD1uWzddLGY9blsyXSxwPW5bNV0sZD1uWzhdLGc9aVswXSxfPWlbM10seT1pWzZdLHg9aVsxXSxiPWlbNF0sUz1pWzddLEM9aVsyXSxQPWlbNV0saz1pWzhdO3JldHVybiBvWzBdPWEqZytzKngrbCpDLG9bM109YSpfK3MqYitsKlAsb1s2XT1hKnkrcypTK2wqayxvWzFdPWMqZyt1KngraCpDLG9bNF09YypfK3UqYitoKlAsb1s3XT1jKnkrdSpTK2gqayxvWzJdPWYqZytwKngrZCpDLG9bNV09ZipfK3AqYitkKlAsb1s4XT1mKnkrcCpTK2Qqayx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe2xldCByPXRoaXMuZWxlbWVudHM7cmV0dXJuIHJbMF0qPXQsclszXSo9dCxyWzZdKj10LHJbMV0qPXQscls0XSo9dCxyWzddKj10LHJbMl0qPXQscls1XSo9dCxyWzhdKj10LHRoaXN9ZGV0ZXJtaW5hbnQoKXtsZXQgdD10aGlzLmVsZW1lbnRzLHI9dFswXSxuPXRbMV0saT10WzJdLG89dFszXSxhPXRbNF0scz10WzVdLGw9dFs2XSxjPXRbN10sdT10WzhdO3JldHVybiByKmEqdS1yKnMqYy1uKm8qdStuKnMqbCtpKm8qYy1pKmEqbH1pbnZlcnQoKXtsZXQgdD10aGlzLmVsZW1lbnRzLHI9dFswXSxuPXRbMV0saT10WzJdLG89dFszXSxhPXRbNF0scz10WzVdLGw9dFs2XSxjPXRbN10sdT10WzhdLGg9dSphLXMqYyxmPXMqbC11Km8scD1jKm8tYSpsLGQ9cipoK24qZitpKnA7aWYoZD09PTApcmV0dXJuIHRoaXMuc2V0KDAsMCwwLDAsMCwwLDAsMCwwKTtsZXQgZz0xL2Q7cmV0dXJuIHRbMF09aCpnLHRbMV09KGkqYy11Km4pKmcsdFsyXT0ocypuLWkqYSkqZyx0WzNdPWYqZyx0WzRdPSh1KnItaSpsKSpnLHRbNV09KGkqby1zKnIpKmcsdFs2XT1wKmcsdFs3XT0obipsLWMqcikqZyx0WzhdPShhKnItbipvKSpnLHRoaXN9dHJhbnNwb3NlKCl7bGV0IHQscj10aGlzLmVsZW1lbnRzO3JldHVybiB0PXJbMV0sclsxXT1yWzNdLHJbM109dCx0PXJbMl0sclsyXT1yWzZdLHJbNl09dCx0PXJbNV0scls1XT1yWzddLHJbN109dCx0aGlzfWdldE5vcm1hbE1hdHJpeCh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tTWF0cml4NCh0KS5pbnZlcnQoKS50cmFuc3Bvc2UoKX10cmFuc3Bvc2VJbnRvQXJyYXkodCl7bGV0IHI9dGhpcy5lbGVtZW50cztyZXR1cm4gdFswXT1yWzBdLHRbMV09clszXSx0WzJdPXJbNl0sdFszXT1yWzFdLHRbNF09cls0XSx0WzVdPXJbN10sdFs2XT1yWzJdLHRbN109cls1XSx0WzhdPXJbOF0sdGhpc31zZXRVdlRyYW5zZm9ybSh0LHIsbixpLG8sYSxzKXtsZXQgbD1NYXRoLmNvcyhvKSxjPU1hdGguc2luKG8pO3JldHVybiB0aGlzLnNldChuKmwsbipjLC1uKihsKmErYypzKSthK3QsLWkqYyxpKmwsLWkqKC1jKmErbCpzKStzK3IsMCwwLDEpLHRoaXN9c2NhbGUodCxyKXtsZXQgbj10aGlzLmVsZW1lbnRzO3JldHVybiBuWzBdKj10LG5bM10qPXQsbls2XSo9dCxuWzFdKj1yLG5bNF0qPXIsbls3XSo9cix0aGlzfXJvdGF0ZSh0KXtsZXQgcj1NYXRoLmNvcyh0KSxuPU1hdGguc2luKHQpLGk9dGhpcy5lbGVtZW50cyxvPWlbMF0sYT1pWzNdLHM9aVs2XSxsPWlbMV0sYz1pWzRdLHU9aVs3XTtyZXR1cm4gaVswXT1yKm8rbipsLGlbM109ciphK24qYyxpWzZdPXIqcytuKnUsaVsxXT0tbipvK3IqbCxpWzRdPS1uKmErcipjLGlbN109LW4qcytyKnUsdGhpc310cmFuc2xhdGUodCxyKXtsZXQgbj10aGlzLmVsZW1lbnRzO3JldHVybiBuWzBdKz10Km5bMl0sblszXSs9dCpuWzVdLG5bNl0rPXQqbls4XSxuWzFdKz1yKm5bMl0sbls0XSs9cipuWzVdLG5bN10rPXIqbls4XSx0aGlzfWVxdWFscyh0KXtsZXQgcj10aGlzLmVsZW1lbnRzLG49dC5lbGVtZW50cztmb3IobGV0IGk9MDtpPDk7aSsrKWlmKHJbaV0hPT1uW2ldKXJldHVybiExO3JldHVybiEwfWZyb21BcnJheSh0LHI9MCl7Zm9yKGxldCBuPTA7bjw5O24rKyl0aGlzLmVsZW1lbnRzW25dPXRbbityXTtyZXR1cm4gdGhpc310b0FycmF5KHQ9W10scj0wKXtsZXQgbj10aGlzLmVsZW1lbnRzO3JldHVybiB0W3JdPW5bMF0sdFtyKzFdPW5bMV0sdFtyKzJdPW5bMl0sdFtyKzNdPW5bM10sdFtyKzRdPW5bNF0sdFtyKzVdPW5bNV0sdFtyKzZdPW5bNl0sdFtyKzddPW5bN10sdFtyKzhdPW5bOF0sdH1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmZyb21BcnJheSh0aGlzLmVsZW1lbnRzKX19O2tpLnByb3RvdHlwZS5pc01hdHJpeDM9ITA7ZnVuY3Rpb24gQmZlKGUpe2ZvcihsZXQgdD1lLmxlbmd0aC0xO3Q+PTA7LS10KWlmKGVbdF0+NjU1MzUpcmV0dXJuITA7cmV0dXJuITF9dmFyIG9mcj17SW50OEFycmF5LFVpbnQ4QXJyYXksVWludDhDbGFtcGVkQXJyYXksSW50MTZBcnJheSxVaW50MTZBcnJheSxJbnQzMkFycmF5LFVpbnQzMkFycmF5LEZsb2F0MzJBcnJheSxGbG9hdDY0QXJyYXl9O2Z1bmN0aW9uIEIzKGUsdCl7cmV0dXJuIG5ldyBvZnJbZV0odCl9ZnVuY3Rpb24gdDYoZSl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsZSl9dmFyIEhmZT17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fSxuaD17aDowLHM6MCxsOjB9LGhWPXtoOjAsczowLGw6MH07ZnVuY3Rpb24gR2N0KGUsdCxyKXtyZXR1cm4gcjwwJiYocis9MSkscj4xJiYoci09MSkscjwxLzY/ZSsodC1lKSo2KnI6cjwxLzI/dDpyPDIvMz9lKyh0LWUpKjYqKDIvMy1yKTplfWZ1bmN0aW9uIFUzKGUpe3JldHVybiBlPC4wNDA0NT9lKi4wNzczOTkzODA4Ok1hdGgucG93KGUqLjk0Nzg2NzI5ODYrLjA1MjEzMjcwMTQsMi40KX1mdW5jdGlvbiBXY3QoZSl7cmV0dXJuIGU8LjAwMzEzMDg/ZSoxMi45MjoxLjA1NSpNYXRoLnBvdyhlLC40MTY2NiktLjA1NX12YXIgbmU9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3JldHVybiByPT09dm9pZCAwJiZuPT09dm9pZCAwP3RoaXMuc2V0KHQpOnRoaXMuc2V0UkdCKHQscixuKX1zZXQodCl7cmV0dXJuIHQmJnQuaXNDb2xvcj90aGlzLmNvcHkodCk6dHlwZW9mIHQ9PSJudW1iZXIiP3RoaXMuc2V0SGV4KHQpOnR5cGVvZiB0PT0ic3RyaW5nIiYmdGhpcy5zZXRTdHlsZSh0KSx0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy5yPXQsdGhpcy5nPXQsdGhpcy5iPXQsdGhpc31zZXRIZXgodCl7cmV0dXJuIHQ9TWF0aC5mbG9vcih0KSx0aGlzLnI9KHQ+PjE2JjI1NSkvMjU1LHRoaXMuZz0odD4+OCYyNTUpLzI1NSx0aGlzLmI9KHQmMjU1KS8yNTUsdGhpc31zZXRSR0IodCxyLG4pe3JldHVybiB0aGlzLnI9dCx0aGlzLmc9cix0aGlzLmI9bix0aGlzfXNldEhTTCh0LHIsbil7aWYodD1SaHQodCwxKSxyPVpvKHIsMCwxKSxuPVpvKG4sMCwxKSxyPT09MCl0aGlzLnI9dGhpcy5nPXRoaXMuYj1uO2Vsc2V7bGV0IGk9bjw9LjU/biooMStyKTpuK3ItbipyLG89MipuLWk7dGhpcy5yPUdjdChvLGksdCsxLzMpLHRoaXMuZz1HY3QobyxpLHQpLHRoaXMuYj1HY3QobyxpLHQtMS8zKX1yZXR1cm4gdGhpc31zZXRTdHlsZSh0KXtmdW5jdGlvbiByKGkpe2khPT12b2lkIDAmJnBhcnNlRmxvYXQoaSk8MSYmY29uc29sZS53YXJuKCJUSFJFRS5Db2xvcjogQWxwaGEgY29tcG9uZW50IG9mICIrdCsiIHdpbGwgYmUgaWdub3JlZC4iKX1sZXQgbjtpZihuPS9eKCg/OnJnYnxoc2wpYT8pXCgoW15cKV0qKVwpLy5leGVjKHQpKXtsZXQgaSxvPW5bMV0sYT1uWzJdO3N3aXRjaChvKXtjYXNlInJnYiI6Y2FzZSJyZ2JhIjppZihpPS9eXHMqKFxkKylccyosXHMqKFxkKylccyosXHMqKFxkKylccyooPzosXHMqKFxkKlwuP1xkKylccyopPyQvLmV4ZWMoYSkpcmV0dXJuIHRoaXMucj1NYXRoLm1pbigyNTUscGFyc2VJbnQoaVsxXSwxMCkpLzI1NSx0aGlzLmc9TWF0aC5taW4oMjU1LHBhcnNlSW50KGlbMl0sMTApKS8yNTUsdGhpcy5iPU1hdGgubWluKDI1NSxwYXJzZUludChpWzNdLDEwKSkvMjU1LHIoaVs0XSksdGhpcztpZihpPS9eXHMqKFxkKylcJVxzKixccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyooPzosXHMqKFxkKlwuP1xkKylccyopPyQvLmV4ZWMoYSkpcmV0dXJuIHRoaXMucj1NYXRoLm1pbigxMDAscGFyc2VJbnQoaVsxXSwxMCkpLzEwMCx0aGlzLmc9TWF0aC5taW4oMTAwLHBhcnNlSW50KGlbMl0sMTApKS8xMDAsdGhpcy5iPU1hdGgubWluKDEwMCxwYXJzZUludChpWzNdLDEwKSkvMTAwLHIoaVs0XSksdGhpczticmVhaztjYXNlImhzbCI6Y2FzZSJoc2xhIjppZihpPS9eXHMqKFxkKlwuP1xkKylccyosXHMqKFxkKylcJVxzKixccyooXGQrKVwlXHMqKD86LFxzKihcZCpcLj9cZCspXHMqKT8kLy5leGVjKGEpKXtsZXQgcz1wYXJzZUZsb2F0KGlbMV0pLzM2MCxsPXBhcnNlSW50KGlbMl0sMTApLzEwMCxjPXBhcnNlSW50KGlbM10sMTApLzEwMDtyZXR1cm4gcihpWzRdKSx0aGlzLnNldEhTTChzLGwsYyl9YnJlYWt9fWVsc2UgaWYobj0vXlwjKFtBLUZhLWZcZF0rKSQvLmV4ZWModCkpe2xldCBpPW5bMV0sbz1pLmxlbmd0aDtpZihvPT09MylyZXR1cm4gdGhpcy5yPXBhcnNlSW50KGkuY2hhckF0KDApK2kuY2hhckF0KDApLDE2KS8yNTUsdGhpcy5nPXBhcnNlSW50KGkuY2hhckF0KDEpK2kuY2hhckF0KDEpLDE2KS8yNTUsdGhpcy5iPXBhcnNlSW50KGkuY2hhckF0KDIpK2kuY2hhckF0KDIpLDE2KS8yNTUsdGhpcztpZihvPT09NilyZXR1cm4gdGhpcy5yPXBhcnNlSW50KGkuY2hhckF0KDApK2kuY2hhckF0KDEpLDE2KS8yNTUsdGhpcy5nPXBhcnNlSW50KGkuY2hhckF0KDIpK2kuY2hhckF0KDMpLDE2KS8yNTUsdGhpcy5iPXBhcnNlSW50KGkuY2hhckF0KDQpK2kuY2hhckF0KDUpLDE2KS8yNTUsdGhpc31yZXR1cm4gdCYmdC5sZW5ndGg+MD90aGlzLnNldENvbG9yTmFtZSh0KTp0aGlzfXNldENvbG9yTmFtZSh0KXtsZXQgcj1IZmVbdC50b0xvd2VyQ2FzZSgpXTtyZXR1cm4gciE9PXZvaWQgMD90aGlzLnNldEhleChyKTpjb25zb2xlLndhcm4oIlRIUkVFLkNvbG9yOiBVbmtub3duIGNvbG9yICIrdCksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLnIsdGhpcy5nLHRoaXMuYil9Y29weSh0KXtyZXR1cm4gdGhpcy5yPXQucix0aGlzLmc9dC5nLHRoaXMuYj10LmIsdGhpc31jb3B5U1JHQlRvTGluZWFyKHQpe3JldHVybiB0aGlzLnI9VTModC5yKSx0aGlzLmc9VTModC5nKSx0aGlzLmI9VTModC5iKSx0aGlzfWNvcHlMaW5lYXJUb1NSR0IodCl7cmV0dXJuIHRoaXMucj1XY3QodC5yKSx0aGlzLmc9V2N0KHQuZyksdGhpcy5iPVdjdCh0LmIpLHRoaXN9Y29udmVydFNSR0JUb0xpbmVhcigpe3JldHVybiB0aGlzLmNvcHlTUkdCVG9MaW5lYXIodGhpcyksdGhpc31jb252ZXJ0TGluZWFyVG9TUkdCKCl7cmV0dXJuIHRoaXMuY29weUxpbmVhclRvU1JHQih0aGlzKSx0aGlzfWdldEhleCgpe3JldHVybiB0aGlzLnIqMjU1PDwxNl50aGlzLmcqMjU1PDw4XnRoaXMuYioyNTU8PDB9Z2V0SGV4U3RyaW5nKCl7cmV0dXJuKCIwMDAwMDAiK3RoaXMuZ2V0SGV4KCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNil9Z2V0SFNMKHQpe2xldCByPXRoaXMucixuPXRoaXMuZyxpPXRoaXMuYixvPU1hdGgubWF4KHIsbixpKSxhPU1hdGgubWluKHIsbixpKSxzLGwsYz0oYStvKS8yO2lmKGE9PT1vKXM9MCxsPTA7ZWxzZXtsZXQgdT1vLWE7c3dpdGNoKGw9Yzw9LjU/dS8obythKTp1LygyLW8tYSksbyl7Y2FzZSByOnM9KG4taSkvdSsobjxpPzY6MCk7YnJlYWs7Y2FzZSBuOnM9KGktcikvdSsyO2JyZWFrO2Nhc2UgaTpzPShyLW4pL3UrNDticmVha31zLz02fXJldHVybiB0Lmg9cyx0LnM9bCx0Lmw9Yyx0fWdldFN0eWxlKCl7cmV0dXJuInJnYigiKyh0aGlzLnIqMjU1fDApKyIsIisodGhpcy5nKjI1NXwwKSsiLCIrKHRoaXMuYioyNTV8MCkrIikifW9mZnNldEhTTCh0LHIsbil7cmV0dXJuIHRoaXMuZ2V0SFNMKG5oKSxuaC5oKz10LG5oLnMrPXIsbmgubCs9bix0aGlzLnNldEhTTChuaC5oLG5oLnMsbmgubCksdGhpc31hZGQodCl7cmV0dXJuIHRoaXMucis9dC5yLHRoaXMuZys9dC5nLHRoaXMuYis9dC5iLHRoaXN9YWRkQ29sb3JzKHQscil7cmV0dXJuIHRoaXMucj10LnIrci5yLHRoaXMuZz10Lmcrci5nLHRoaXMuYj10LmIrci5iLHRoaXN9YWRkU2NhbGFyKHQpe3JldHVybiB0aGlzLnIrPXQsdGhpcy5nKz10LHRoaXMuYis9dCx0aGlzfXN1Yih0KXtyZXR1cm4gdGhpcy5yPU1hdGgubWF4KDAsdGhpcy5yLXQuciksdGhpcy5nPU1hdGgubWF4KDAsdGhpcy5nLXQuZyksdGhpcy5iPU1hdGgubWF4KDAsdGhpcy5iLXQuYiksdGhpc31tdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5yKj10LnIsdGhpcy5nKj10LmcsdGhpcy5iKj10LmIsdGhpc31tdWx0aXBseVNjYWxhcih0KXtyZXR1cm4gdGhpcy5yKj10LHRoaXMuZyo9dCx0aGlzLmIqPXQsdGhpc31sZXJwKHQscil7cmV0dXJuIHRoaXMucis9KHQuci10aGlzLnIpKnIsdGhpcy5nKz0odC5nLXRoaXMuZykqcix0aGlzLmIrPSh0LmItdGhpcy5iKSpyLHRoaXN9bGVycENvbG9ycyh0LHIsbil7cmV0dXJuIHRoaXMucj10LnIrKHIuci10LnIpKm4sdGhpcy5nPXQuZysoci5nLXQuZykqbix0aGlzLmI9dC5iKyhyLmItdC5iKSpuLHRoaXN9bGVycEhTTCh0LHIpe3RoaXMuZ2V0SFNMKG5oKSx0LmdldEhTTChoVik7bGV0IG49VVAobmguaCxoVi5oLHIpLGk9VVAobmgucyxoVi5zLHIpLG89VVAobmgubCxoVi5sLHIpO3JldHVybiB0aGlzLnNldEhTTChuLGksbyksdGhpc31lcXVhbHModCl7cmV0dXJuIHQucj09PXRoaXMuciYmdC5nPT09dGhpcy5nJiZ0LmI9PT10aGlzLmJ9ZnJvbUFycmF5KHQscj0wKXtyZXR1cm4gdGhpcy5yPXRbcl0sdGhpcy5nPXRbcisxXSx0aGlzLmI9dFtyKzJdLHRoaXN9dG9BcnJheSh0PVtdLHI9MCl7cmV0dXJuIHRbcl09dGhpcy5yLHRbcisxXT10aGlzLmcsdFtyKzJdPXRoaXMuYix0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxyKXtyZXR1cm4gdGhpcy5yPXQuZ2V0WChyKSx0aGlzLmc9dC5nZXRZKHIpLHRoaXMuYj10LmdldFoociksdC5ub3JtYWxpemVkPT09ITAmJih0aGlzLnIvPTI1NSx0aGlzLmcvPTI1NSx0aGlzLmIvPTI1NSksdGhpc310b0pTT04oKXtyZXR1cm4gdGhpcy5nZXRIZXgoKX19O25lLk5BTUVTPUhmZTtuZS5wcm90b3R5cGUuaXNDb2xvcj0hMDtuZS5wcm90b3R5cGUucj0xO25lLnByb3RvdHlwZS5nPTE7bmUucHJvdG90eXBlLmI9MTt2YXIgdjMsWmY9Y2xhc3N7c3RhdGljIGdldERhdGFVUkwodCl7aWYoL15kYXRhOi9pLnRlc3QodC5zcmMpfHx0eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQ9PSJ1bmRlZmluZWQiKXJldHVybiB0LnNyYztsZXQgcjtpZih0IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQpcj10O2Vsc2V7djM9PT12b2lkIDAmJih2Mz10NigiY2FudmFzIikpLHYzLndpZHRoPXQud2lkdGgsdjMuaGVpZ2h0PXQuaGVpZ2h0O2xldCBuPXYzLmdldENvbnRleHQoIjJkIik7dCBpbnN0YW5jZW9mIEltYWdlRGF0YT9uLnB1dEltYWdlRGF0YSh0LDAsMCk6bi5kcmF3SW1hZ2UodCwwLDAsdC53aWR0aCx0LmhlaWdodCkscj12M31yZXR1cm4gci53aWR0aD4yMDQ4fHxyLmhlaWdodD4yMDQ4Pyhjb25zb2xlLndhcm4oIlRIUkVFLkltYWdlVXRpbHMuZ2V0RGF0YVVSTDogSW1hZ2UgY29udmVydGVkIHRvIGpwZyBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyIsdCksci50b0RhdGFVUkwoImltYWdlL2pwZWciLC42KSk6ci50b0RhdGFVUkwoImltYWdlL3BuZyIpfXN0YXRpYyBzUkdCVG9MaW5lYXIodCl7aWYodHlwZW9mIEhUTUxJbWFnZUVsZW1lbnQhPSJ1bmRlZmluZWQiJiZ0IGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudHx8dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50IT0idW5kZWZpbmVkIiYmdCBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50fHx0eXBlb2YgSW1hZ2VCaXRtYXAhPSJ1bmRlZmluZWQiJiZ0IGluc3RhbmNlb2YgSW1hZ2VCaXRtYXApe2xldCByPXQ2KCJjYW52YXMiKTtyLndpZHRoPXQud2lkdGgsci5oZWlnaHQ9dC5oZWlnaHQ7bGV0IG49ci5nZXRDb250ZXh0KCIyZCIpO24uZHJhd0ltYWdlKHQsMCwwLHQud2lkdGgsdC5oZWlnaHQpO2xldCBpPW4uZ2V0SW1hZ2VEYXRhKDAsMCx0LndpZHRoLHQuaGVpZ2h0KSxvPWkuZGF0YTtmb3IobGV0IGE9MDthPG8ubGVuZ3RoO2ErKylvW2FdPVUzKG9bYV0vMjU1KSoyNTU7cmV0dXJuIG4ucHV0SW1hZ2VEYXRhKGksMCwwKSxyfWVsc2UgaWYodC5kYXRhKXtsZXQgcj10LmRhdGEuc2xpY2UoMCk7Zm9yKGxldCBuPTA7bjxyLmxlbmd0aDtuKyspciBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fHIgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheT9yW25dPU1hdGguZmxvb3IoVTMocltuXS8yNTUpKjI1NSk6cltuXT1VMyhyW25dKTtyZXR1cm57ZGF0YTpyLHdpZHRoOnQud2lkdGgsaGVpZ2h0OnQuaGVpZ2h0fX1lbHNlIHJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkltYWdlVXRpbHMuc1JHQlRvTGluZWFyKCk6IFVuc3VwcG9ydGVkIGltYWdlIHR5cGUuIE5vIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gYXBwbGllZC4iKSx0fX0sYWZyPTAsdmk9Y2xhc3MgZXh0ZW5kcyBxc3tjb25zdHJ1Y3Rvcih0PXZpLkRFRkFVTFRfSU1BR0Uscj12aS5ERUZBVUxUX01BUFBJTkcsbj1KbyxpPUpvLG89aWksYT1heCxzPVFvLGw9SmQsYz0xLHU9dG0pe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6YWZyKyt9KSx0aGlzLnV1aWQ9RGwoKSx0aGlzLm5hbWU9IiIsdGhpcy5pbWFnZT10LHRoaXMubWlwbWFwcz1bXSx0aGlzLm1hcHBpbmc9cix0aGlzLndyYXBTPW4sdGhpcy53cmFwVD1pLHRoaXMubWFnRmlsdGVyPW8sdGhpcy5taW5GaWx0ZXI9YSx0aGlzLmFuaXNvdHJvcHk9Yyx0aGlzLmZvcm1hdD1zLHRoaXMuaW50ZXJuYWxGb3JtYXQ9bnVsbCx0aGlzLnR5cGU9bCx0aGlzLm9mZnNldD1uZXcgTHQoMCwwKSx0aGlzLnJlcGVhdD1uZXcgTHQoMSwxKSx0aGlzLmNlbnRlcj1uZXcgTHQoMCwwKSx0aGlzLnJvdGF0aW9uPTAsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSEwLHRoaXMubWF0cml4PW5ldyBraSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMCx0aGlzLnByZW11bHRpcGx5QWxwaGE9ITEsdGhpcy5mbGlwWT0hMCx0aGlzLnVucGFja0FsaWdubWVudD00LHRoaXMuZW5jb2Rpbmc9dSx0aGlzLnVzZXJEYXRhPXt9LHRoaXMudmVyc2lvbj0wLHRoaXMub25VcGRhdGU9bnVsbCx0aGlzLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT0hMSx0aGlzLm5lZWRzUE1SRU1VcGRhdGU9ITF9dXBkYXRlTWF0cml4KCl7dGhpcy5tYXRyaXguc2V0VXZUcmFuc2Zvcm0odGhpcy5vZmZzZXQueCx0aGlzLm9mZnNldC55LHRoaXMucmVwZWF0LngsdGhpcy5yZXBlYXQueSx0aGlzLnJvdGF0aW9uLHRoaXMuY2VudGVyLngsdGhpcy5jZW50ZXIueSl9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMubmFtZT10Lm5hbWUsdGhpcy5pbWFnZT10LmltYWdlLHRoaXMubWlwbWFwcz10Lm1pcG1hcHMuc2xpY2UoMCksdGhpcy5tYXBwaW5nPXQubWFwcGluZyx0aGlzLndyYXBTPXQud3JhcFMsdGhpcy53cmFwVD10LndyYXBULHRoaXMubWFnRmlsdGVyPXQubWFnRmlsdGVyLHRoaXMubWluRmlsdGVyPXQubWluRmlsdGVyLHRoaXMuYW5pc290cm9weT10LmFuaXNvdHJvcHksdGhpcy5mb3JtYXQ9dC5mb3JtYXQsdGhpcy5pbnRlcm5hbEZvcm1hdD10LmludGVybmFsRm9ybWF0LHRoaXMudHlwZT10LnR5cGUsdGhpcy5vZmZzZXQuY29weSh0Lm9mZnNldCksdGhpcy5yZXBlYXQuY29weSh0LnJlcGVhdCksdGhpcy5jZW50ZXIuY29weSh0LmNlbnRlciksdGhpcy5yb3RhdGlvbj10LnJvdGF0aW9uLHRoaXMubWF0cml4QXV0b1VwZGF0ZT10Lm1hdHJpeEF1dG9VcGRhdGUsdGhpcy5tYXRyaXguY29weSh0Lm1hdHJpeCksdGhpcy5nZW5lcmF0ZU1pcG1hcHM9dC5nZW5lcmF0ZU1pcG1hcHMsdGhpcy5wcmVtdWx0aXBseUFscGhhPXQucHJlbXVsdGlwbHlBbHBoYSx0aGlzLmZsaXBZPXQuZmxpcFksdGhpcy51bnBhY2tBbGlnbm1lbnQ9dC51bnBhY2tBbGlnbm1lbnQsdGhpcy5lbmNvZGluZz10LmVuY29kaW5nLHRoaXMudXNlckRhdGE9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0LnVzZXJEYXRhKSksdGhpc310b0pTT04odCl7bGV0IHI9dD09PXZvaWQgMHx8dHlwZW9mIHQ9PSJzdHJpbmciO2lmKCFyJiZ0LnRleHR1cmVzW3RoaXMudXVpZF0hPT12b2lkIDApcmV0dXJuIHQudGV4dHVyZXNbdGhpcy51dWlkXTtsZXQgbj17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IlRleHR1cmUiLGdlbmVyYXRvcjoiVGV4dHVyZS50b0pTT04ifSx1dWlkOnRoaXMudXVpZCxuYW1lOnRoaXMubmFtZSxtYXBwaW5nOnRoaXMubWFwcGluZyxyZXBlYXQ6W3RoaXMucmVwZWF0LngsdGhpcy5yZXBlYXQueV0sb2Zmc2V0Olt0aGlzLm9mZnNldC54LHRoaXMub2Zmc2V0LnldLGNlbnRlcjpbdGhpcy5jZW50ZXIueCx0aGlzLmNlbnRlci55XSxyb3RhdGlvbjp0aGlzLnJvdGF0aW9uLHdyYXA6W3RoaXMud3JhcFMsdGhpcy53cmFwVF0sZm9ybWF0OnRoaXMuZm9ybWF0LHR5cGU6dGhpcy50eXBlLGVuY29kaW5nOnRoaXMuZW5jb2RpbmcsbWluRmlsdGVyOnRoaXMubWluRmlsdGVyLG1hZ0ZpbHRlcjp0aGlzLm1hZ0ZpbHRlcixhbmlzb3Ryb3B5OnRoaXMuYW5pc290cm9weSxmbGlwWTp0aGlzLmZsaXBZLHByZW11bHRpcGx5QWxwaGE6dGhpcy5wcmVtdWx0aXBseUFscGhhLHVucGFja0FsaWdubWVudDp0aGlzLnVucGFja0FsaWdubWVudH07aWYodGhpcy5pbWFnZSE9PXZvaWQgMCl7bGV0IGk9dGhpcy5pbWFnZTtpZihpLnV1aWQ9PT12b2lkIDAmJihpLnV1aWQ9RGwoKSksIXImJnQuaW1hZ2VzW2kudXVpZF09PT12b2lkIDApe2xldCBvO2lmKEFycmF5LmlzQXJyYXkoaSkpe289W107Zm9yKGxldCBhPTAscz1pLmxlbmd0aDthPHM7YSsrKWlbYV0uaXNEYXRhVGV4dHVyZT9vLnB1c2goWWN0KGlbYV0uaW1hZ2UpKTpvLnB1c2goWWN0KGlbYV0pKX1lbHNlIG89WWN0KGkpO3QuaW1hZ2VzW2kudXVpZF09e3V1aWQ6aS51dWlkLHVybDpvfX1uLmltYWdlPWkudXVpZH1yZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy51c2VyRGF0YSkhPT0ie30iJiYobi51c2VyRGF0YT10aGlzLnVzZXJEYXRhKSxyfHwodC50ZXh0dXJlc1t0aGlzLnV1aWRdPW4pLG59ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX10cmFuc2Zvcm1Vdih0KXtpZih0aGlzLm1hcHBpbmchPT1YVSlyZXR1cm4gdDtpZih0LmFwcGx5TWF0cml4Myh0aGlzLm1hdHJpeCksdC54PDB8fHQueD4xKXN3aXRjaCh0aGlzLndyYXBTKXtjYXNlIFhQOnQueD10LngtTWF0aC5mbG9vcih0LngpO2JyZWFrO2Nhc2UgSm86dC54PXQueDwwPzA6MTticmVhaztjYXNlICRQOk1hdGguYWJzKE1hdGguZmxvb3IodC54KSUyKT09PTE/dC54PU1hdGguY2VpbCh0LngpLXQueDp0Lng9dC54LU1hdGguZmxvb3IodC54KTticmVha31pZih0Lnk8MHx8dC55PjEpc3dpdGNoKHRoaXMud3JhcFQpe2Nhc2UgWFA6dC55PXQueS1NYXRoLmZsb29yKHQueSk7YnJlYWs7Y2FzZSBKbzp0Lnk9dC55PDA/MDoxO2JyZWFrO2Nhc2UgJFA6TWF0aC5hYnMoTWF0aC5mbG9vcih0LnkpJTIpPT09MT90Lnk9TWF0aC5jZWlsKHQueSktdC55OnQueT10LnktTWF0aC5mbG9vcih0LnkpO2JyZWFrfXJldHVybiB0aGlzLmZsaXBZJiYodC55PTEtdC55KSx0fXNldCBuZWVkc1VwZGF0ZSh0KXt0PT09ITAmJnRoaXMudmVyc2lvbisrfX07dmkuREVGQVVMVF9JTUFHRT12b2lkIDA7dmkuREVGQVVMVF9NQVBQSU5HPVhVO3ZpLnByb3RvdHlwZS5pc1RleHR1cmU9ITA7ZnVuY3Rpb24gWWN0KGUpe3JldHVybiB0eXBlb2YgSFRNTEltYWdlRWxlbWVudCE9InVuZGVmaW5lZCImJmUgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50fHx0eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQhPSJ1bmRlZmluZWQiJiZlIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnR8fHR5cGVvZiBJbWFnZUJpdG1hcCE9InVuZGVmaW5lZCImJmUgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcD9aZi5nZXREYXRhVVJMKGUpOmUuZGF0YT97ZGF0YTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLmRhdGEpLHdpZHRoOmUud2lkdGgsaGVpZ2h0OmUuaGVpZ2h0LHR5cGU6ZS5kYXRhLmNvbnN0cnVjdG9yLm5hbWV9Oihjb25zb2xlLndhcm4oIlRIUkVFLlRleHR1cmU6IFVuYWJsZSB0byBzZXJpYWxpemUgVGV4dHVyZS4iKSx7fSl9dmFyIGVuPWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxyPTAsbj0wLGk9MSl7dGhpcy54PXQsdGhpcy55PXIsdGhpcy56PW4sdGhpcy53PWl9Z2V0IHdpZHRoKCl7cmV0dXJuIHRoaXMuen1zZXQgd2lkdGgodCl7dGhpcy56PXR9Z2V0IGhlaWdodCgpe3JldHVybiB0aGlzLnd9c2V0IGhlaWdodCh0KXt0aGlzLnc9dH1zZXQodCxyLG4saSl7cmV0dXJuIHRoaXMueD10LHRoaXMueT1yLHRoaXMuej1uLHRoaXMudz1pLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9dCx0aGlzLno9dCx0aGlzLnc9dCx0aGlzfXNldFgodCl7cmV0dXJuIHRoaXMueD10LHRoaXN9c2V0WSh0KXtyZXR1cm4gdGhpcy55PXQsdGhpc31zZXRaKHQpe3JldHVybiB0aGlzLno9dCx0aGlzfXNldFcodCl7cmV0dXJuIHRoaXMudz10LHRoaXN9c2V0Q29tcG9uZW50KHQscil7c3dpdGNoKHQpe2Nhc2UgMDp0aGlzLng9cjticmVhaztjYXNlIDE6dGhpcy55PXI7YnJlYWs7Y2FzZSAyOnRoaXMuej1yO2JyZWFrO2Nhc2UgMzp0aGlzLnc9cjticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfXJldHVybiB0aGlzfWdldENvbXBvbmVudCh0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLng7Y2FzZSAxOnJldHVybiB0aGlzLnk7Y2FzZSAyOnJldHVybiB0aGlzLno7Y2FzZSAzOnJldHVybiB0aGlzLnc7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX19Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSx0aGlzLnosdGhpcy53KX1jb3B5KHQpe3JldHVybiB0aGlzLng9dC54LHRoaXMueT10LnksdGhpcy56PXQueix0aGlzLnc9dC53IT09dm9pZCAwP3QudzoxLHRoaXN9YWRkKHQscil7cmV0dXJuIHIhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuYWRkVmVjdG9ycyh0LHIpKToodGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpcy56Kz10LnosdGhpcy53Kz10LncsdGhpcyl9YWRkU2NhbGFyKHQpe3JldHVybiB0aGlzLngrPXQsdGhpcy55Kz10LHRoaXMueis9dCx0aGlzLncrPXQsdGhpc31hZGRWZWN0b3JzKHQscil7cmV0dXJuIHRoaXMueD10Lngrci54LHRoaXMueT10Lnkrci55LHRoaXMuej10Lnorci56LHRoaXMudz10Lncrci53LHRoaXN9YWRkU2NhbGVkVmVjdG9yKHQscil7cmV0dXJuIHRoaXMueCs9dC54KnIsdGhpcy55Kz10Lnkqcix0aGlzLnorPXQueipyLHRoaXMudys9dC53KnIsdGhpc31zdWIodCxyKXtyZXR1cm4gciE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKHQscikpOih0aGlzLngtPXQueCx0aGlzLnktPXQueSx0aGlzLnotPXQueix0aGlzLnctPXQudyx0aGlzKX1zdWJTY2FsYXIodCl7cmV0dXJuIHRoaXMueC09dCx0aGlzLnktPXQsdGhpcy56LT10LHRoaXMudy09dCx0aGlzfXN1YlZlY3RvcnModCxyKXtyZXR1cm4gdGhpcy54PXQueC1yLngsdGhpcy55PXQueS1yLnksdGhpcy56PXQuei1yLnosdGhpcy53PXQudy1yLncsdGhpc31tdWx0aXBseSh0KXtyZXR1cm4gdGhpcy54Kj10LngsdGhpcy55Kj10LnksdGhpcy56Kj10LnosdGhpcy53Kj10LncsdGhpc31tdWx0aXBseVNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kj10LHRoaXMueSo9dCx0aGlzLnoqPXQsdGhpcy53Kj10LHRoaXN9YXBwbHlNYXRyaXg0KHQpe2xldCByPXRoaXMueCxuPXRoaXMueSxpPXRoaXMueixvPXRoaXMudyxhPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1hWzBdKnIrYVs0XSpuK2FbOF0qaSthWzEyXSpvLHRoaXMueT1hWzFdKnIrYVs1XSpuK2FbOV0qaSthWzEzXSpvLHRoaXMuej1hWzJdKnIrYVs2XSpuK2FbMTBdKmkrYVsxNF0qbyx0aGlzLnc9YVszXSpyK2FbN10qbithWzExXSppK2FbMTVdKm8sdGhpc31kaXZpZGVTY2FsYXIodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoMS90KX1zZXRBeGlzQW5nbGVGcm9tUXVhdGVybmlvbih0KXt0aGlzLnc9MipNYXRoLmFjb3ModC53KTtsZXQgcj1NYXRoLnNxcnQoMS10LncqdC53KTtyZXR1cm4gcjwxZS00Pyh0aGlzLng9MSx0aGlzLnk9MCx0aGlzLno9MCk6KHRoaXMueD10Lngvcix0aGlzLnk9dC55L3IsdGhpcy56PXQuei9yKSx0aGlzfXNldEF4aXNBbmdsZUZyb21Sb3RhdGlvbk1hdHJpeCh0KXtsZXQgcixuLGksbyxsPXQuZWxlbWVudHMsYz1sWzBdLHU9bFs0XSxoPWxbOF0sZj1sWzFdLHA9bFs1XSxkPWxbOV0sZz1sWzJdLF89bFs2XSx5PWxbMTBdO2lmKE1hdGguYWJzKHUtZik8LjAxJiZNYXRoLmFicyhoLWcpPC4wMSYmTWF0aC5hYnMoZC1fKTwuMDEpe2lmKE1hdGguYWJzKHUrZik8LjEmJk1hdGguYWJzKGgrZyk8LjEmJk1hdGguYWJzKGQrXyk8LjEmJk1hdGguYWJzKGMrcCt5LTMpPC4xKXJldHVybiB0aGlzLnNldCgxLDAsMCwwKSx0aGlzO3I9TWF0aC5QSTtsZXQgYj0oYysxKS8yLFM9KHArMSkvMixDPSh5KzEpLzIsUD0odStmKS80LGs9KGgrZykvNCxPPShkK18pLzQ7cmV0dXJuIGI+UyYmYj5DP2I8LjAxPyhuPTAsaT0uNzA3MTA2NzgxLG89LjcwNzEwNjc4MSk6KG49TWF0aC5zcXJ0KGIpLGk9UC9uLG89ay9uKTpTPkM/UzwuMDE/KG49LjcwNzEwNjc4MSxpPTAsbz0uNzA3MTA2NzgxKTooaT1NYXRoLnNxcnQoUyksbj1QL2ksbz1PL2kpOkM8LjAxPyhuPS43MDcxMDY3ODEsaT0uNzA3MTA2NzgxLG89MCk6KG89TWF0aC5zcXJ0KEMpLG49ay9vLGk9Ty9vKSx0aGlzLnNldChuLGksbyxyKSx0aGlzfWxldCB4PU1hdGguc3FydCgoXy1kKSooXy1kKSsoaC1nKSooaC1nKSsoZi11KSooZi11KSk7cmV0dXJuIE1hdGguYWJzKHgpPC4wMDEmJih4PTEpLHRoaXMueD0oXy1kKS94LHRoaXMueT0oaC1nKS94LHRoaXMuej0oZi11KS94LHRoaXMudz1NYXRoLmFjb3MoKGMrcCt5LTEpLzIpLHRoaXN9bWluKHQpe3JldHVybiB0aGlzLng9TWF0aC5taW4odGhpcy54LHQueCksdGhpcy55PU1hdGgubWluKHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1pbih0aGlzLnosdC56KSx0aGlzLnc9TWF0aC5taW4odGhpcy53LHQudyksdGhpc31tYXgodCl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5tYXgodGhpcy55LHQueSksdGhpcy56PU1hdGgubWF4KHRoaXMueix0LnopLHRoaXMudz1NYXRoLm1heCh0aGlzLncsdC53KSx0aGlzfWNsYW1wKHQscil7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LngsTWF0aC5taW4oci54LHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LnksTWF0aC5taW4oci55LHRoaXMueSkpLHRoaXMuej1NYXRoLm1heCh0LnosTWF0aC5taW4oci56LHRoaXMueikpLHRoaXMudz1NYXRoLm1heCh0LncsTWF0aC5taW4oci53LHRoaXMudykpLHRoaXN9Y2xhbXBTY2FsYXIodCxyKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQsTWF0aC5taW4ocix0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodCxNYXRoLm1pbihyLHRoaXMueSkpLHRoaXMuej1NYXRoLm1heCh0LE1hdGgubWluKHIsdGhpcy56KSksdGhpcy53PU1hdGgubWF4KHQsTWF0aC5taW4ocix0aGlzLncpKSx0aGlzfWNsYW1wTGVuZ3RoKHQscil7bGV0IG49dGhpcy5sZW5ndGgoKTtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIobnx8MSkubXVsdGlwbHlTY2FsYXIoTWF0aC5tYXgodCxNYXRoLm1pbihyLG4pKSl9Zmxvb3IoKXtyZXR1cm4gdGhpcy54PU1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpLHRoaXMuej1NYXRoLmZsb29yKHRoaXMueiksdGhpcy53PU1hdGguZmxvb3IodGhpcy53KSx0aGlzfWNlaWwoKXtyZXR1cm4gdGhpcy54PU1hdGguY2VpbCh0aGlzLngpLHRoaXMueT1NYXRoLmNlaWwodGhpcy55KSx0aGlzLno9TWF0aC5jZWlsKHRoaXMueiksdGhpcy53PU1hdGguY2VpbCh0aGlzLncpLHRoaXN9cm91bmQoKXtyZXR1cm4gdGhpcy54PU1hdGgucm91bmQodGhpcy54KSx0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpLHRoaXMuej1NYXRoLnJvdW5kKHRoaXMueiksdGhpcy53PU1hdGgucm91bmQodGhpcy53KSx0aGlzfXJvdW5kVG9aZXJvKCl7cmV0dXJuIHRoaXMueD10aGlzLng8MD9NYXRoLmNlaWwodGhpcy54KTpNYXRoLmZsb29yKHRoaXMueCksdGhpcy55PXRoaXMueTwwP01hdGguY2VpbCh0aGlzLnkpOk1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9dGhpcy56PDA/TWF0aC5jZWlsKHRoaXMueik6TWF0aC5mbG9vcih0aGlzLnopLHRoaXMudz10aGlzLnc8MD9NYXRoLmNlaWwodGhpcy53KTpNYXRoLmZsb29yKHRoaXMudyksdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy54PS10aGlzLngsdGhpcy55PS10aGlzLnksdGhpcy56PS10aGlzLnosdGhpcy53PS10aGlzLncsdGhpc31kb3QodCl7cmV0dXJuIHRoaXMueCp0LngrdGhpcy55KnQueSt0aGlzLnoqdC56K3RoaXMudyp0Lnd9bGVuZ3RoU3EoKXtyZXR1cm4gdGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnordGhpcy53KnRoaXMud31sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56K3RoaXMudyp0aGlzLncpfW1hbmhhdHRhbkxlbmd0aCgpe3JldHVybiBNYXRoLmFicyh0aGlzLngpK01hdGguYWJzKHRoaXMueSkrTWF0aC5hYnModGhpcy56KStNYXRoLmFicyh0aGlzLncpfW5vcm1hbGl6ZSgpe3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcih0aGlzLmxlbmd0aCgpfHwxKX1zZXRMZW5ndGgodCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIodCl9bGVycCh0LHIpe3JldHVybiB0aGlzLngrPSh0LngtdGhpcy54KSpyLHRoaXMueSs9KHQueS10aGlzLnkpKnIsdGhpcy56Kz0odC56LXRoaXMueikqcix0aGlzLncrPSh0LnctdGhpcy53KSpyLHRoaXN9bGVycFZlY3RvcnModCxyLG4pe3JldHVybiB0aGlzLng9dC54KyhyLngtdC54KSpuLHRoaXMueT10LnkrKHIueS10LnkpKm4sdGhpcy56PXQueisoci56LXQueikqbix0aGlzLnc9dC53KyhyLnctdC53KSpuLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lng9PT10aGlzLngmJnQueT09PXRoaXMueSYmdC56PT09dGhpcy56JiZ0Lnc9PT10aGlzLnd9ZnJvbUFycmF5KHQscj0wKXtyZXR1cm4gdGhpcy54PXRbcl0sdGhpcy55PXRbcisxXSx0aGlzLno9dFtyKzJdLHRoaXMudz10W3IrM10sdGhpc310b0FycmF5KHQ9W10scj0wKXtyZXR1cm4gdFtyXT10aGlzLngsdFtyKzFdPXRoaXMueSx0W3IrMl09dGhpcy56LHRbciszXT10aGlzLncsdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQscixuKXtyZXR1cm4gbiE9PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy54PXQuZ2V0WChyKSx0aGlzLnk9dC5nZXRZKHIpLHRoaXMuej10LmdldFoociksdGhpcy53PXQuZ2V0VyhyKSx0aGlzfXJhbmRvbSgpe3JldHVybiB0aGlzLng9TWF0aC5yYW5kb20oKSx0aGlzLnk9TWF0aC5yYW5kb20oKSx0aGlzLno9TWF0aC5yYW5kb20oKSx0aGlzLnc9TWF0aC5yYW5kb20oKSx0aGlzfSpbU3ltYm9sLml0ZXJhdG9yXSgpe3lpZWxkIHRoaXMueCx5aWVsZCB0aGlzLnkseWllbGQgdGhpcy56LHlpZWxkIHRoaXMud319O2VuLnByb3RvdHlwZS5pc1ZlY3RvcjQ9ITA7dmFyIGhzPWNsYXNzIGV4dGVuZHMgcXN7Y29uc3RydWN0b3IodCxyLG49e30pe3N1cGVyKCksdGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PXIsdGhpcy5kZXB0aD0xLHRoaXMuc2Npc3Nvcj1uZXcgZW4oMCwwLHQsciksdGhpcy5zY2lzc29yVGVzdD0hMSx0aGlzLnZpZXdwb3J0PW5ldyBlbigwLDAsdCxyKSx0aGlzLnRleHR1cmU9bmV3IHZpKHZvaWQgMCxuLm1hcHBpbmcsbi53cmFwUyxuLndyYXBULG4ubWFnRmlsdGVyLG4ubWluRmlsdGVyLG4uZm9ybWF0LG4udHlwZSxuLmFuaXNvdHJvcHksbi5lbmNvZGluZyksdGhpcy50ZXh0dXJlLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT0hMCx0aGlzLnRleHR1cmUuaW1hZ2U9e3dpZHRoOnQsaGVpZ2h0OnIsZGVwdGg6MX0sdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1uLmdlbmVyYXRlTWlwbWFwcyE9PXZvaWQgMD9uLmdlbmVyYXRlTWlwbWFwczohMSx0aGlzLnRleHR1cmUuaW50ZXJuYWxGb3JtYXQ9bi5pbnRlcm5hbEZvcm1hdCE9PXZvaWQgMD9uLmludGVybmFsRm9ybWF0Om51bGwsdGhpcy50ZXh0dXJlLm1pbkZpbHRlcj1uLm1pbkZpbHRlciE9PXZvaWQgMD9uLm1pbkZpbHRlcjppaSx0aGlzLmRlcHRoQnVmZmVyPW4uZGVwdGhCdWZmZXIhPT12b2lkIDA/bi5kZXB0aEJ1ZmZlcjohMCx0aGlzLnN0ZW5jaWxCdWZmZXI9bi5zdGVuY2lsQnVmZmVyIT09dm9pZCAwP24uc3RlbmNpbEJ1ZmZlcjohMSx0aGlzLmRlcHRoVGV4dHVyZT1uLmRlcHRoVGV4dHVyZSE9PXZvaWQgMD9uLmRlcHRoVGV4dHVyZTpudWxsfXNldFRleHR1cmUodCl7dC5pbWFnZT17d2lkdGg6dGhpcy53aWR0aCxoZWlnaHQ6dGhpcy5oZWlnaHQsZGVwdGg6dGhpcy5kZXB0aH0sdGhpcy50ZXh0dXJlPXR9c2V0U2l6ZSh0LHIsbj0xKXsodGhpcy53aWR0aCE9PXR8fHRoaXMuaGVpZ2h0IT09cnx8dGhpcy5kZXB0aCE9PW4pJiYodGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PXIsdGhpcy5kZXB0aD1uLHRoaXMudGV4dHVyZS5pbWFnZS53aWR0aD10LHRoaXMudGV4dHVyZS5pbWFnZS5oZWlnaHQ9cix0aGlzLnRleHR1cmUuaW1hZ2UuZGVwdGg9bix0aGlzLmRpc3Bvc2UoKSksdGhpcy52aWV3cG9ydC5zZXQoMCwwLHQsciksdGhpcy5zY2lzc29yLnNldCgwLDAsdCxyKX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy53aWR0aD10LndpZHRoLHRoaXMuaGVpZ2h0PXQuaGVpZ2h0LHRoaXMuZGVwdGg9dC5kZXB0aCx0aGlzLnZpZXdwb3J0LmNvcHkodC52aWV3cG9ydCksdGhpcy50ZXh0dXJlPXQudGV4dHVyZS5jbG9uZSgpLHRoaXMudGV4dHVyZS5pbWFnZT1PYmplY3QuYXNzaWduKHt9LHQudGV4dHVyZS5pbWFnZSksdGhpcy5kZXB0aEJ1ZmZlcj10LmRlcHRoQnVmZmVyLHRoaXMuc3RlbmNpbEJ1ZmZlcj10LnN0ZW5jaWxCdWZmZXIsdGhpcy5kZXB0aFRleHR1cmU9dC5kZXB0aFRleHR1cmUsdGhpc31kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfX07aHMucHJvdG90eXBlLmlzV2ViR0xSZW5kZXJUYXJnZXQ9ITA7dmFyIGxVPWNsYXNzIGV4dGVuZHMgaHN7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKHQscik7bGV0IGk9dGhpcy50ZXh0dXJlO3RoaXMudGV4dHVyZT1bXTtmb3IobGV0IG89MDtvPG47bysrKXRoaXMudGV4dHVyZVtvXT1pLmNsb25lKCl9c2V0U2l6ZSh0LHIsbj0xKXtpZih0aGlzLndpZHRoIT09dHx8dGhpcy5oZWlnaHQhPT1yfHx0aGlzLmRlcHRoIT09bil7dGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PXIsdGhpcy5kZXB0aD1uO2ZvcihsZXQgaT0wLG89dGhpcy50ZXh0dXJlLmxlbmd0aDtpPG87aSsrKXRoaXMudGV4dHVyZVtpXS5pbWFnZS53aWR0aD10LHRoaXMudGV4dHVyZVtpXS5pbWFnZS5oZWlnaHQ9cix0aGlzLnRleHR1cmVbaV0uaW1hZ2UuZGVwdGg9bjt0aGlzLmRpc3Bvc2UoKX1yZXR1cm4gdGhpcy52aWV3cG9ydC5zZXQoMCwwLHQsciksdGhpcy5zY2lzc29yLnNldCgwLDAsdCxyKSx0aGlzfWNvcHkodCl7dGhpcy5kaXNwb3NlKCksdGhpcy53aWR0aD10LndpZHRoLHRoaXMuaGVpZ2h0PXQuaGVpZ2h0LHRoaXMuZGVwdGg9dC5kZXB0aCx0aGlzLnZpZXdwb3J0LnNldCgwLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodCksdGhpcy5zY2lzc29yLnNldCgwLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodCksdGhpcy5kZXB0aEJ1ZmZlcj10LmRlcHRoQnVmZmVyLHRoaXMuc3RlbmNpbEJ1ZmZlcj10LnN0ZW5jaWxCdWZmZXIsdGhpcy5kZXB0aFRleHR1cmU9dC5kZXB0aFRleHR1cmUsdGhpcy50ZXh0dXJlLmxlbmd0aD0wO2ZvcihsZXQgcj0wLG49dC50ZXh0dXJlLmxlbmd0aDtyPG47cisrKXRoaXMudGV4dHVyZVtyXT10LnRleHR1cmVbcl0uY2xvbmUoKTtyZXR1cm4gdGhpc319O2xVLnByb3RvdHlwZS5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzPSEwO3ZhciBqMz1jbGFzcyBleHRlbmRzIGhze2NvbnN0cnVjdG9yKHQscixuPXt9KXtzdXBlcih0LHIsbiksdGhpcy5zYW1wbGVzPTQsdGhpcy5pZ25vcmVEZXB0aEZvck11bHRpc2FtcGxlQ29weT1uLmlnbm9yZURlcHRoIT09dm9pZCAwP24uaWdub3JlRGVwdGg6ITAsdGhpcy51c2VSZW5kZXJUb1RleHR1cmU9bi51c2VSZW5kZXJUb1RleHR1cmUhPT12b2lkIDA/bi51c2VSZW5kZXJUb1RleHR1cmU6ITEsdGhpcy51c2VSZW5kZXJidWZmZXI9dGhpcy51c2VSZW5kZXJUb1RleHR1cmU9PT0hMX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLnNhbXBsZXM9dC5zYW1wbGVzLHRoaXMudXNlUmVuZGVyVG9UZXh0dXJlPXQudXNlUmVuZGVyVG9UZXh0dXJlLHRoaXMudXNlUmVuZGVyYnVmZmVyPXQudXNlUmVuZGVyYnVmZmVyLHRoaXN9fTtqMy5wcm90b3R5cGUuaXNXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0PSEwO3ZhciB5aT1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAscj0wLG49MCxpPTEpe3RoaXMuX3g9dCx0aGlzLl95PXIsdGhpcy5fej1uLHRoaXMuX3c9aX1zdGF0aWMgc2xlcnAodCxyLG4saSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogU3RhdGljIC5zbGVycCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBxbS5zbGVycFF1YXRlcm5pb25zKCBxYSwgcWIsIHQgKSBpbnN0ZWFkLiIpLG4uc2xlcnBRdWF0ZXJuaW9ucyh0LHIsaSl9c3RhdGljIHNsZXJwRmxhdCh0LHIsbixpLG8sYSxzKXtsZXQgbD1uW2krMF0sYz1uW2krMV0sdT1uW2krMl0saD1uW2krM10sZj1vW2ErMF0scD1vW2ErMV0sZD1vW2ErMl0sZz1vW2ErM107aWYocz09PTApe3RbciswXT1sLHRbcisxXT1jLHRbcisyXT11LHRbciszXT1oO3JldHVybn1pZihzPT09MSl7dFtyKzBdPWYsdFtyKzFdPXAsdFtyKzJdPWQsdFtyKzNdPWc7cmV0dXJufWlmKGghPT1nfHxsIT09Znx8YyE9PXB8fHUhPT1kKXtsZXQgXz0xLXMseT1sKmYrYypwK3UqZCtoKmcseD15Pj0wPzE6LTEsYj0xLXkqeTtpZihiPk51bWJlci5FUFNJTE9OKXtsZXQgQz1NYXRoLnNxcnQoYiksUD1NYXRoLmF0YW4yKEMseSp4KTtfPU1hdGguc2luKF8qUCkvQyxzPU1hdGguc2luKHMqUCkvQ31sZXQgUz1zKng7aWYobD1sKl8rZipTLGM9YypfK3AqUyx1PXUqXytkKlMsaD1oKl8rZypTLF89PT0xLXMpe2xldCBDPTEvTWF0aC5zcXJ0KGwqbCtjKmMrdSp1K2gqaCk7bCo9QyxjKj1DLHUqPUMsaCo9Q319dFtyXT1sLHRbcisxXT1jLHRbcisyXT11LHRbciszXT1ofXN0YXRpYyBtdWx0aXBseVF1YXRlcm5pb25zRmxhdCh0LHIsbixpLG8sYSl7bGV0IHM9bltpXSxsPW5baSsxXSxjPW5baSsyXSx1PW5baSszXSxoPW9bYV0sZj1vW2ErMV0scD1vW2ErMl0sZD1vW2ErM107cmV0dXJuIHRbcl09cypkK3UqaCtsKnAtYypmLHRbcisxXT1sKmQrdSpmK2MqaC1zKnAsdFtyKzJdPWMqZCt1KnArcypmLWwqaCx0W3IrM109dSpkLXMqaC1sKmYtYypwLHR9Z2V0IHgoKXtyZXR1cm4gdGhpcy5feH1zZXQgeCh0KXt0aGlzLl94PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB5KCl7cmV0dXJuIHRoaXMuX3l9c2V0IHkodCl7dGhpcy5feT10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgeigpe3JldHVybiB0aGlzLl96fXNldCB6KHQpe3RoaXMuX3o9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHcoKXtyZXR1cm4gdGhpcy5fd31zZXQgdyh0KXt0aGlzLl93PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfXNldCh0LHIsbixpKXtyZXR1cm4gdGhpcy5feD10LHRoaXMuX3k9cix0aGlzLl96PW4sdGhpcy5fdz1pLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuX3gsdGhpcy5feSx0aGlzLl96LHRoaXMuX3cpfWNvcHkodCl7cmV0dXJuIHRoaXMuX3g9dC54LHRoaXMuX3k9dC55LHRoaXMuX3o9dC56LHRoaXMuX3c9dC53LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21FdWxlcih0LHIpe2lmKCEodCYmdC5pc0V1bGVyKSl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLlF1YXRlcm5pb246IC5zZXRGcm9tRXVsZXIoKSBub3cgZXhwZWN0cyBhbiBFdWxlciByb3RhdGlvbiByYXRoZXIgdGhhbiBhIFZlY3RvcjMgYW5kIG9yZGVyLiIpO2xldCBuPXQuX3gsaT10Ll95LG89dC5feixhPXQuX29yZGVyLHM9TWF0aC5jb3MsbD1NYXRoLnNpbixjPXMobi8yKSx1PXMoaS8yKSxoPXMoby8yKSxmPWwobi8yKSxwPWwoaS8yKSxkPWwoby8yKTtzd2l0Y2goYSl7Y2FzZSJYWVoiOnRoaXMuX3g9Zip1KmgrYypwKmQsdGhpcy5feT1jKnAqaC1mKnUqZCx0aGlzLl96PWMqdSpkK2YqcCpoLHRoaXMuX3c9Yyp1KmgtZipwKmQ7YnJlYWs7Y2FzZSJZWFoiOnRoaXMuX3g9Zip1KmgrYypwKmQsdGhpcy5feT1jKnAqaC1mKnUqZCx0aGlzLl96PWMqdSpkLWYqcCpoLHRoaXMuX3c9Yyp1KmgrZipwKmQ7YnJlYWs7Y2FzZSJaWFkiOnRoaXMuX3g9Zip1KmgtYypwKmQsdGhpcy5feT1jKnAqaCtmKnUqZCx0aGlzLl96PWMqdSpkK2YqcCpoLHRoaXMuX3c9Yyp1KmgtZipwKmQ7YnJlYWs7Y2FzZSJaWVgiOnRoaXMuX3g9Zip1KmgtYypwKmQsdGhpcy5feT1jKnAqaCtmKnUqZCx0aGlzLl96PWMqdSpkLWYqcCpoLHRoaXMuX3c9Yyp1KmgrZipwKmQ7YnJlYWs7Y2FzZSJZWlgiOnRoaXMuX3g9Zip1KmgrYypwKmQsdGhpcy5feT1jKnAqaCtmKnUqZCx0aGlzLl96PWMqdSpkLWYqcCpoLHRoaXMuX3c9Yyp1KmgtZipwKmQ7YnJlYWs7Y2FzZSJYWlkiOnRoaXMuX3g9Zip1KmgtYypwKmQsdGhpcy5feT1jKnAqaC1mKnUqZCx0aGlzLl96PWMqdSpkK2YqcCpoLHRoaXMuX3c9Yyp1KmgrZipwKmQ7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5zZXRGcm9tRXVsZXIoKSBlbmNvdW50ZXJlZCBhbiB1bmtub3duIG9yZGVyOiAiK2EpfXJldHVybiByIT09ITEmJnRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21BeGlzQW5nbGUodCxyKXtsZXQgbj1yLzIsaT1NYXRoLnNpbihuKTtyZXR1cm4gdGhpcy5feD10LngqaSx0aGlzLl95PXQueSppLHRoaXMuX3o9dC56KmksdGhpcy5fdz1NYXRoLmNvcyhuKSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tUm90YXRpb25NYXRyaXgodCl7bGV0IHI9dC5lbGVtZW50cyxuPXJbMF0saT1yWzRdLG89cls4XSxhPXJbMV0scz1yWzVdLGw9cls5XSxjPXJbMl0sdT1yWzZdLGg9clsxMF0sZj1uK3MraDtpZihmPjApe2xldCBwPS41L01hdGguc3FydChmKzEpO3RoaXMuX3c9LjI1L3AsdGhpcy5feD0odS1sKSpwLHRoaXMuX3k9KG8tYykqcCx0aGlzLl96PShhLWkpKnB9ZWxzZSBpZihuPnMmJm4+aCl7bGV0IHA9MipNYXRoLnNxcnQoMStuLXMtaCk7dGhpcy5fdz0odS1sKS9wLHRoaXMuX3g9LjI1KnAsdGhpcy5feT0oaSthKS9wLHRoaXMuX3o9KG8rYykvcH1lbHNlIGlmKHM+aCl7bGV0IHA9MipNYXRoLnNxcnQoMStzLW4taCk7dGhpcy5fdz0oby1jKS9wLHRoaXMuX3g9KGkrYSkvcCx0aGlzLl95PS4yNSpwLHRoaXMuX3o9KGwrdSkvcH1lbHNle2xldCBwPTIqTWF0aC5zcXJ0KDEraC1uLXMpO3RoaXMuX3c9KGEtaSkvcCx0aGlzLl94PShvK2MpL3AsdGhpcy5feT0obCt1KS9wLHRoaXMuX3o9LjI1KnB9cmV0dXJuIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21Vbml0VmVjdG9ycyh0LHIpe2xldCBuPXQuZG90KHIpKzE7cmV0dXJuIG48TnVtYmVyLkVQU0lMT04/KG49MCxNYXRoLmFicyh0LngpPk1hdGguYWJzKHQueik/KHRoaXMuX3g9LXQueSx0aGlzLl95PXQueCx0aGlzLl96PTAsdGhpcy5fdz1uKToodGhpcy5feD0wLHRoaXMuX3k9LXQueix0aGlzLl96PXQueSx0aGlzLl93PW4pKToodGhpcy5feD10Lnkqci56LXQueipyLnksdGhpcy5feT10Lnoqci54LXQueCpyLnosdGhpcy5fej10Lngqci55LXQueSpyLngsdGhpcy5fdz1uKSx0aGlzLm5vcm1hbGl6ZSgpfWFuZ2xlVG8odCl7cmV0dXJuIDIqTWF0aC5hY29zKE1hdGguYWJzKFpvKHRoaXMuZG90KHQpLC0xLDEpKSl9cm90YXRlVG93YXJkcyh0LHIpe2xldCBuPXRoaXMuYW5nbGVUbyh0KTtpZihuPT09MClyZXR1cm4gdGhpcztsZXQgaT1NYXRoLm1pbigxLHIvbik7cmV0dXJuIHRoaXMuc2xlcnAodCxpKSx0aGlzfWlkZW50aXR5KCl7cmV0dXJuIHRoaXMuc2V0KDAsMCwwLDEpfWludmVydCgpe3JldHVybiB0aGlzLmNvbmp1Z2F0ZSgpfWNvbmp1Z2F0ZSgpe3JldHVybiB0aGlzLl94Kj0tMSx0aGlzLl95Kj0tMSx0aGlzLl96Kj0tMSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31kb3QodCl7cmV0dXJuIHRoaXMuX3gqdC5feCt0aGlzLl95KnQuX3krdGhpcy5feip0Ll96K3RoaXMuX3cqdC5fd31sZW5ndGhTcSgpe3JldHVybiB0aGlzLl94KnRoaXMuX3grdGhpcy5feSp0aGlzLl95K3RoaXMuX3oqdGhpcy5feit0aGlzLl93KnRoaXMuX3d9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLl94KnRoaXMuX3grdGhpcy5feSp0aGlzLl95K3RoaXMuX3oqdGhpcy5feit0aGlzLl93KnRoaXMuX3cpfW5vcm1hbGl6ZSgpe2xldCB0PXRoaXMubGVuZ3RoKCk7cmV0dXJuIHQ9PT0wPyh0aGlzLl94PTAsdGhpcy5feT0wLHRoaXMuX3o9MCx0aGlzLl93PTEpOih0PTEvdCx0aGlzLl94PXRoaXMuX3gqdCx0aGlzLl95PXRoaXMuX3kqdCx0aGlzLl96PXRoaXMuX3oqdCx0aGlzLl93PXRoaXMuX3cqdCksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9bXVsdGlwbHkodCxyKXtyZXR1cm4gciE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseVF1YXRlcm5pb25zKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLm11bHRpcGx5UXVhdGVybmlvbnModCxyKSk6dGhpcy5tdWx0aXBseVF1YXRlcm5pb25zKHRoaXMsdCl9cHJlbXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyh0LHRoaXMpfW11bHRpcGx5UXVhdGVybmlvbnModCxyKXtsZXQgbj10Ll94LGk9dC5feSxvPXQuX3osYT10Ll93LHM9ci5feCxsPXIuX3ksYz1yLl96LHU9ci5fdztyZXR1cm4gdGhpcy5feD1uKnUrYSpzK2kqYy1vKmwsdGhpcy5feT1pKnUrYSpsK28qcy1uKmMsdGhpcy5fej1vKnUrYSpjK24qbC1pKnMsdGhpcy5fdz1hKnUtbipzLWkqbC1vKmMsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2xlcnAodCxyKXtpZihyPT09MClyZXR1cm4gdGhpcztpZihyPT09MSlyZXR1cm4gdGhpcy5jb3B5KHQpO2xldCBuPXRoaXMuX3gsaT10aGlzLl95LG89dGhpcy5feixhPXRoaXMuX3cscz1hKnQuX3crbip0Ll94K2kqdC5feStvKnQuX3o7aWYoczwwPyh0aGlzLl93PS10Ll93LHRoaXMuX3g9LXQuX3gsdGhpcy5feT0tdC5feSx0aGlzLl96PS10Ll96LHM9LXMpOnRoaXMuY29weSh0KSxzPj0xKXJldHVybiB0aGlzLl93PWEsdGhpcy5feD1uLHRoaXMuX3k9aSx0aGlzLl96PW8sdGhpcztsZXQgbD0xLXMqcztpZihsPD1OdW1iZXIuRVBTSUxPTil7bGV0IHA9MS1yO3JldHVybiB0aGlzLl93PXAqYStyKnRoaXMuX3csdGhpcy5feD1wKm4rcip0aGlzLl94LHRoaXMuX3k9cCppK3IqdGhpcy5feSx0aGlzLl96PXAqbytyKnRoaXMuX3osdGhpcy5ub3JtYWxpemUoKSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31sZXQgYz1NYXRoLnNxcnQobCksdT1NYXRoLmF0YW4yKGMscyksaD1NYXRoLnNpbigoMS1yKSp1KS9jLGY9TWF0aC5zaW4ocip1KS9jO3JldHVybiB0aGlzLl93PWEqaCt0aGlzLl93KmYsdGhpcy5feD1uKmgrdGhpcy5feCpmLHRoaXMuX3k9aSpoK3RoaXMuX3kqZix0aGlzLl96PW8qaCt0aGlzLl96KmYsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2xlcnBRdWF0ZXJuaW9ucyh0LHIsbil7cmV0dXJuIHRoaXMuY29weSh0KS5zbGVycChyLG4pfXJhbmRvbSgpe2xldCB0PU1hdGgucmFuZG9tKCkscj1NYXRoLnNxcnQoMS10KSxuPU1hdGguc3FydCh0KSxpPTIqTWF0aC5QSSpNYXRoLnJhbmRvbSgpLG89MipNYXRoLlBJKk1hdGgucmFuZG9tKCk7cmV0dXJuIHRoaXMuc2V0KHIqTWF0aC5jb3MoaSksbipNYXRoLnNpbihvKSxuKk1hdGguY29zKG8pLHIqTWF0aC5zaW4oaSkpfWVxdWFscyh0KXtyZXR1cm4gdC5feD09PXRoaXMuX3gmJnQuX3k9PT10aGlzLl95JiZ0Ll96PT09dGhpcy5feiYmdC5fdz09PXRoaXMuX3d9ZnJvbUFycmF5KHQscj0wKXtyZXR1cm4gdGhpcy5feD10W3JdLHRoaXMuX3k9dFtyKzFdLHRoaXMuX3o9dFtyKzJdLHRoaXMuX3c9dFtyKzNdLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXRvQXJyYXkodD1bXSxyPTApe3JldHVybiB0W3JdPXRoaXMuX3gsdFtyKzFdPXRoaXMuX3ksdFtyKzJdPXRoaXMuX3osdFtyKzNdPXRoaXMuX3csdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQscil7cmV0dXJuIHRoaXMuX3g9dC5nZXRYKHIpLHRoaXMuX3k9dC5nZXRZKHIpLHRoaXMuX3o9dC5nZXRaKHIpLHRoaXMuX3c9dC5nZXRXKHIpLHRoaXN9X29uQ2hhbmdlKHQpe3JldHVybiB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrPXQsdGhpc31fb25DaGFuZ2VDYWxsYmFjaygpe319O3lpLnByb3RvdHlwZS5pc1F1YXRlcm5pb249ITA7dmFyIGo9Y2xhc3N7Y29uc3RydWN0b3IodD0wLHI9MCxuPTApe3RoaXMueD10LHRoaXMueT1yLHRoaXMuej1ufXNldCh0LHIsbil7cmV0dXJuIG49PT12b2lkIDAmJihuPXRoaXMueiksdGhpcy54PXQsdGhpcy55PXIsdGhpcy56PW4sdGhpc31zZXRTY2FsYXIodCl7cmV0dXJuIHRoaXMueD10LHRoaXMueT10LHRoaXMuej10LHRoaXN9c2V0WCh0KXtyZXR1cm4gdGhpcy54PXQsdGhpc31zZXRZKHQpe3JldHVybiB0aGlzLnk9dCx0aGlzfXNldFoodCl7cmV0dXJuIHRoaXMuej10LHRoaXN9c2V0Q29tcG9uZW50KHQscil7c3dpdGNoKHQpe2Nhc2UgMDp0aGlzLng9cjticmVhaztjYXNlIDE6dGhpcy55PXI7YnJlYWs7Y2FzZSAyOnRoaXMuej1yO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9cmV0dXJuIHRoaXN9Z2V0Q29tcG9uZW50KHQpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIHRoaXMueDtjYXNlIDE6cmV0dXJuIHRoaXMueTtjYXNlIDI6cmV0dXJuIHRoaXMuejtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLngsdGhpcy55LHRoaXMueil9Y29weSh0KXtyZXR1cm4gdGhpcy54PXQueCx0aGlzLnk9dC55LHRoaXMuej10LnosdGhpc31hZGQodCxyKXtyZXR1cm4gciE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuYWRkKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuYWRkVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5hZGRWZWN0b3JzKHQscikpOih0aGlzLngrPXQueCx0aGlzLnkrPXQueSx0aGlzLnorPXQueix0aGlzKX1hZGRTY2FsYXIodCl7cmV0dXJuIHRoaXMueCs9dCx0aGlzLnkrPXQsdGhpcy56Kz10LHRoaXN9YWRkVmVjdG9ycyh0LHIpe3JldHVybiB0aGlzLng9dC54K3IueCx0aGlzLnk9dC55K3IueSx0aGlzLno9dC56K3Iueix0aGlzfWFkZFNjYWxlZFZlY3Rvcih0LHIpe3JldHVybiB0aGlzLngrPXQueCpyLHRoaXMueSs9dC55KnIsdGhpcy56Kz10Lnoqcix0aGlzfXN1Yih0LHIpe3JldHVybiByIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5zdWIoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5zdWJWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLnN1YlZlY3RvcnModCxyKSk6KHRoaXMueC09dC54LHRoaXMueS09dC55LHRoaXMuei09dC56LHRoaXMpfXN1YlNjYWxhcih0KXtyZXR1cm4gdGhpcy54LT10LHRoaXMueS09dCx0aGlzLnotPXQsdGhpc31zdWJWZWN0b3JzKHQscil7cmV0dXJuIHRoaXMueD10Lngtci54LHRoaXMueT10Lnktci55LHRoaXMuej10Lnotci56LHRoaXN9bXVsdGlwbHkodCxyKXtyZXR1cm4gciE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseVZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMubXVsdGlwbHlWZWN0b3JzKHQscikpOih0aGlzLngqPXQueCx0aGlzLnkqPXQueSx0aGlzLnoqPXQueix0aGlzKX1tdWx0aXBseVNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kj10LHRoaXMueSo9dCx0aGlzLnoqPXQsdGhpc31tdWx0aXBseVZlY3RvcnModCxyKXtyZXR1cm4gdGhpcy54PXQueCpyLngsdGhpcy55PXQueSpyLnksdGhpcy56PXQueipyLnosdGhpc31hcHBseUV1bGVyKHQpe3JldHVybiB0JiZ0LmlzRXVsZXJ8fGNvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjM6IC5hcHBseUV1bGVyKCkgbm93IGV4cGVjdHMgYW4gRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4iKSx0aGlzLmFwcGx5UXVhdGVybmlvbih5dWUuc2V0RnJvbUV1bGVyKHQpKX1hcHBseUF4aXNBbmdsZSh0LHIpe3JldHVybiB0aGlzLmFwcGx5UXVhdGVybmlvbih5dWUuc2V0RnJvbUF4aXNBbmdsZSh0LHIpKX1hcHBseU1hdHJpeDModCl7bGV0IHI9dGhpcy54LG49dGhpcy55LGk9dGhpcy56LG89dC5lbGVtZW50cztyZXR1cm4gdGhpcy54PW9bMF0qcitvWzNdKm4rb1s2XSppLHRoaXMueT1vWzFdKnIrb1s0XSpuK29bN10qaSx0aGlzLno9b1syXSpyK29bNV0qbitvWzhdKmksdGhpc31hcHBseU5vcm1hbE1hdHJpeCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDModCkubm9ybWFsaXplKCl9YXBwbHlNYXRyaXg0KHQpe2xldCByPXRoaXMueCxuPXRoaXMueSxpPXRoaXMueixvPXQuZWxlbWVudHMsYT0xLyhvWzNdKnIrb1s3XSpuK29bMTFdKmkrb1sxNV0pO3JldHVybiB0aGlzLng9KG9bMF0qcitvWzRdKm4rb1s4XSppK29bMTJdKSphLHRoaXMueT0ob1sxXSpyK29bNV0qbitvWzldKmkrb1sxM10pKmEsdGhpcy56PShvWzJdKnIrb1s2XSpuK29bMTBdKmkrb1sxNF0pKmEsdGhpc31hcHBseVF1YXRlcm5pb24odCl7bGV0IHI9dGhpcy54LG49dGhpcy55LGk9dGhpcy56LG89dC54LGE9dC55LHM9dC56LGw9dC53LGM9bCpyK2EqaS1zKm4sdT1sKm4rcypyLW8qaSxoPWwqaStvKm4tYSpyLGY9LW8qci1hKm4tcyppO3JldHVybiB0aGlzLng9YypsK2YqLW8rdSotcy1oKi1hLHRoaXMueT11KmwrZiotYStoKi1vLWMqLXMsdGhpcy56PWgqbCtmKi1zK2MqLWEtdSotbyx0aGlzfXByb2plY3QodCl7cmV0dXJuIHRoaXMuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGRJbnZlcnNlKS5hcHBseU1hdHJpeDQodC5wcm9qZWN0aW9uTWF0cml4KX11bnByb2plY3QodCl7cmV0dXJuIHRoaXMuYXBwbHlNYXRyaXg0KHQucHJvamVjdGlvbk1hdHJpeEludmVyc2UpLmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKX10cmFuc2Zvcm1EaXJlY3Rpb24odCl7bGV0IHI9dGhpcy54LG49dGhpcy55LGk9dGhpcy56LG89dC5lbGVtZW50cztyZXR1cm4gdGhpcy54PW9bMF0qcitvWzRdKm4rb1s4XSppLHRoaXMueT1vWzFdKnIrb1s1XSpuK29bOV0qaSx0aGlzLno9b1syXSpyK29bNl0qbitvWzEwXSppLHRoaXMubm9ybWFsaXplKCl9ZGl2aWRlKHQpe3JldHVybiB0aGlzLngvPXQueCx0aGlzLnkvPXQueSx0aGlzLnovPXQueix0aGlzfWRpdmlkZVNjYWxhcih0KXtyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhcigxL3QpfW1pbih0KXtyZXR1cm4gdGhpcy54PU1hdGgubWluKHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1pbih0aGlzLnksdC55KSx0aGlzLno9TWF0aC5taW4odGhpcy56LHQueiksdGhpc31tYXgodCl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5tYXgodGhpcy55LHQueSksdGhpcy56PU1hdGgubWF4KHRoaXMueix0LnopLHRoaXN9Y2xhbXAodCxyKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQueCxNYXRoLm1pbihyLngsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQueSxNYXRoLm1pbihyLnksdGhpcy55KSksdGhpcy56PU1hdGgubWF4KHQueixNYXRoLm1pbihyLnosdGhpcy56KSksdGhpc31jbGFtcFNjYWxhcih0LHIpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodCxNYXRoLm1pbihyLHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LE1hdGgubWluKHIsdGhpcy55KSksdGhpcy56PU1hdGgubWF4KHQsTWF0aC5taW4ocix0aGlzLnopKSx0aGlzfWNsYW1wTGVuZ3RoKHQscil7bGV0IG49dGhpcy5sZW5ndGgoKTtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIobnx8MSkubXVsdGlwbHlTY2FsYXIoTWF0aC5tYXgodCxNYXRoLm1pbihyLG4pKSl9Zmxvb3IoKXtyZXR1cm4gdGhpcy54PU1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpLHRoaXMuej1NYXRoLmZsb29yKHRoaXMueiksdGhpc31jZWlsKCl7cmV0dXJuIHRoaXMueD1NYXRoLmNlaWwodGhpcy54KSx0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSksdGhpcy56PU1hdGguY2VpbCh0aGlzLnopLHRoaXN9cm91bmQoKXtyZXR1cm4gdGhpcy54PU1hdGgucm91bmQodGhpcy54KSx0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpLHRoaXMuej1NYXRoLnJvdW5kKHRoaXMueiksdGhpc31yb3VuZFRvWmVybygpe3JldHVybiB0aGlzLng9dGhpcy54PDA/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT10aGlzLnk8MD9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSksdGhpcy56PXRoaXMuejwwP01hdGguY2VpbCh0aGlzLnopOk1hdGguZmxvb3IodGhpcy56KSx0aGlzfW5lZ2F0ZSgpe3JldHVybiB0aGlzLng9LXRoaXMueCx0aGlzLnk9LXRoaXMueSx0aGlzLno9LXRoaXMueix0aGlzfWRvdCh0KXtyZXR1cm4gdGhpcy54KnQueCt0aGlzLnkqdC55K3RoaXMueip0Lnp9bGVuZ3RoU3EoKXtyZXR1cm4gdGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnp9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMueil9bWFuaGF0dGFuTGVuZ3RoKCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueCkrTWF0aC5hYnModGhpcy55KStNYXRoLmFicyh0aGlzLnopfW5vcm1hbGl6ZSgpe3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcih0aGlzLmxlbmd0aCgpfHwxKX1zZXRMZW5ndGgodCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIodCl9bGVycCh0LHIpe3JldHVybiB0aGlzLngrPSh0LngtdGhpcy54KSpyLHRoaXMueSs9KHQueS10aGlzLnkpKnIsdGhpcy56Kz0odC56LXRoaXMueikqcix0aGlzfWxlcnBWZWN0b3JzKHQscixuKXtyZXR1cm4gdGhpcy54PXQueCsoci54LXQueCkqbix0aGlzLnk9dC55KyhyLnktdC55KSpuLHRoaXMuej10LnorKHIuei10LnopKm4sdGhpc31jcm9zcyh0LHIpe3JldHVybiByIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5jcm9zcygpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmNyb3NzVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5jcm9zc1ZlY3RvcnModCxyKSk6dGhpcy5jcm9zc1ZlY3RvcnModGhpcyx0KX1jcm9zc1ZlY3RvcnModCxyKXtsZXQgbj10LngsaT10Lnksbz10LnosYT1yLngscz1yLnksbD1yLno7cmV0dXJuIHRoaXMueD1pKmwtbypzLHRoaXMueT1vKmEtbipsLHRoaXMuej1uKnMtaSphLHRoaXN9cHJvamVjdE9uVmVjdG9yKHQpe2xldCByPXQubGVuZ3RoU3EoKTtpZihyPT09MClyZXR1cm4gdGhpcy5zZXQoMCwwLDApO2xldCBuPXQuZG90KHRoaXMpL3I7cmV0dXJuIHRoaXMuY29weSh0KS5tdWx0aXBseVNjYWxhcihuKX1wcm9qZWN0T25QbGFuZSh0KXtyZXR1cm4gamN0LmNvcHkodGhpcykucHJvamVjdE9uVmVjdG9yKHQpLHRoaXMuc3ViKGpjdCl9cmVmbGVjdCh0KXtyZXR1cm4gdGhpcy5zdWIoamN0LmNvcHkodCkubXVsdGlwbHlTY2FsYXIoMip0aGlzLmRvdCh0KSkpfWFuZ2xlVG8odCl7bGV0IHI9TWF0aC5zcXJ0KHRoaXMubGVuZ3RoU3EoKSp0Lmxlbmd0aFNxKCkpO2lmKHI9PT0wKXJldHVybiBNYXRoLlBJLzI7bGV0IG49dGhpcy5kb3QodCkvcjtyZXR1cm4gTWF0aC5hY29zKFpvKG4sLTEsMSkpfWRpc3RhbmNlVG8odCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RhbmNlVG9TcXVhcmVkKHQpKX1kaXN0YW5jZVRvU3F1YXJlZCh0KXtsZXQgcj10aGlzLngtdC54LG49dGhpcy55LXQueSxpPXRoaXMuei10Lno7cmV0dXJuIHIqcituKm4raSppfW1hbmhhdHRhbkRpc3RhbmNlVG8odCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueC10LngpK01hdGguYWJzKHRoaXMueS10LnkpK01hdGguYWJzKHRoaXMuei10LnopfXNldEZyb21TcGhlcmljYWwodCl7cmV0dXJuIHRoaXMuc2V0RnJvbVNwaGVyaWNhbENvb3Jkcyh0LnJhZGl1cyx0LnBoaSx0LnRoZXRhKX1zZXRGcm9tU3BoZXJpY2FsQ29vcmRzKHQscixuKXtsZXQgaT1NYXRoLnNpbihyKSp0O3JldHVybiB0aGlzLng9aSpNYXRoLnNpbihuKSx0aGlzLnk9TWF0aC5jb3MocikqdCx0aGlzLno9aSpNYXRoLmNvcyhuKSx0aGlzfXNldEZyb21DeWxpbmRyaWNhbCh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tQ3lsaW5kcmljYWxDb29yZHModC5yYWRpdXMsdC50aGV0YSx0LnkpfXNldEZyb21DeWxpbmRyaWNhbENvb3Jkcyh0LHIsbil7cmV0dXJuIHRoaXMueD10Kk1hdGguc2luKHIpLHRoaXMueT1uLHRoaXMuej10Kk1hdGguY29zKHIpLHRoaXN9c2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQpe2xldCByPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1yWzEyXSx0aGlzLnk9clsxM10sdGhpcy56PXJbMTRdLHRoaXN9c2V0RnJvbU1hdHJpeFNjYWxlKHQpe2xldCByPXRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LDApLmxlbmd0aCgpLG49dGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMSkubGVuZ3RoKCksaT10aGlzLnNldEZyb21NYXRyaXhDb2x1bW4odCwyKS5sZW5ndGgoKTtyZXR1cm4gdGhpcy54PXIsdGhpcy55PW4sdGhpcy56PWksdGhpc31zZXRGcm9tTWF0cml4Q29sdW1uKHQscil7cmV0dXJuIHRoaXMuZnJvbUFycmF5KHQuZWxlbWVudHMscio0KX1zZXRGcm9tTWF0cml4M0NvbHVtbih0LHIpe3JldHVybiB0aGlzLmZyb21BcnJheSh0LmVsZW1lbnRzLHIqMyl9ZXF1YWxzKHQpe3JldHVybiB0Lng9PT10aGlzLngmJnQueT09PXRoaXMueSYmdC56PT09dGhpcy56fWZyb21BcnJheSh0LHI9MCl7cmV0dXJuIHRoaXMueD10W3JdLHRoaXMueT10W3IrMV0sdGhpcy56PXRbcisyXSx0aGlzfXRvQXJyYXkodD1bXSxyPTApe3JldHVybiB0W3JdPXRoaXMueCx0W3IrMV09dGhpcy55LHRbcisyXT10aGlzLnosdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQscixuKXtyZXR1cm4gbiE9PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy54PXQuZ2V0WChyKSx0aGlzLnk9dC5nZXRZKHIpLHRoaXMuej10LmdldFoociksdGhpc31yYW5kb20oKXtyZXR1cm4gdGhpcy54PU1hdGgucmFuZG9tKCksdGhpcy55PU1hdGgucmFuZG9tKCksdGhpcy56PU1hdGgucmFuZG9tKCksdGhpc31yYW5kb21EaXJlY3Rpb24oKXtsZXQgdD0oTWF0aC5yYW5kb20oKS0uNSkqMixyPU1hdGgucmFuZG9tKCkqTWF0aC5QSSoyLG49TWF0aC5zcXJ0KDEtVEkodCwyKSk7cmV0dXJuIHRoaXMueD1uKk1hdGguY29zKHIpLHRoaXMueT1uKk1hdGguc2luKHIpLHRoaXMuej10LHRoaXN9KltTeW1ib2wuaXRlcmF0b3JdKCl7eWllbGQgdGhpcy54LHlpZWxkIHRoaXMueSx5aWVsZCB0aGlzLnp9fTtqLnByb3RvdHlwZS5pc1ZlY3RvcjM9ITA7dmFyIGpjdD1uZXcgaix5dWU9bmV3IHlpLHRhPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IGooMS8wLDEvMCwxLzApLHI9bmV3IGooLTEvMCwtMS8wLC0xLzApKXt0aGlzLm1pbj10LHRoaXMubWF4PXJ9c2V0KHQscil7cmV0dXJuIHRoaXMubWluLmNvcHkodCksdGhpcy5tYXguY29weShyKSx0aGlzfXNldEZyb21BcnJheSh0KXtsZXQgcj0xLzAsbj0xLzAsaT0xLzAsbz0tMS8wLGE9LTEvMCxzPS0xLzA7Zm9yKGxldCBsPTAsYz10Lmxlbmd0aDtsPGM7bCs9Myl7bGV0IHU9dFtsXSxoPXRbbCsxXSxmPXRbbCsyXTt1PHImJihyPXUpLGg8biYmKG49aCksZjxpJiYoaT1mKSx1Pm8mJihvPXUpLGg+YSYmKGE9aCksZj5zJiYocz1mKX1yZXR1cm4gdGhpcy5taW4uc2V0KHIsbixpKSx0aGlzLm1heC5zZXQobyxhLHMpLHRoaXN9c2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZSh0KXtsZXQgcj0xLzAsbj0xLzAsaT0xLzAsbz0tMS8wLGE9LTEvMCxzPS0xLzA7Zm9yKGxldCBsPTAsYz10LmNvdW50O2w8YztsKyspe2xldCB1PXQuZ2V0WChsKSxoPXQuZ2V0WShsKSxmPXQuZ2V0WihsKTt1PHImJihyPXUpLGg8biYmKG49aCksZjxpJiYoaT1mKSx1Pm8mJihvPXUpLGg+YSYmKGE9aCksZj5zJiYocz1mKX1yZXR1cm4gdGhpcy5taW4uc2V0KHIsbixpKSx0aGlzLm1heC5zZXQobyxhLHMpLHRoaXN9c2V0RnJvbVBvaW50cyh0KXt0aGlzLm1ha2VFbXB0eSgpO2ZvcihsZXQgcj0wLG49dC5sZW5ndGg7cjxuO3IrKyl0aGlzLmV4cGFuZEJ5UG9pbnQodFtyXSk7cmV0dXJuIHRoaXN9c2V0RnJvbUNlbnRlckFuZFNpemUodCxyKXtsZXQgbj1nMS5jb3B5KHIpLm11bHRpcGx5U2NhbGFyKC41KTtyZXR1cm4gdGhpcy5taW4uY29weSh0KS5zdWIobiksdGhpcy5tYXguY29weSh0KS5hZGQobiksdGhpc31zZXRGcm9tT2JqZWN0KHQscj0hMSl7cmV0dXJuIHRoaXMubWFrZUVtcHR5KCksdGhpcy5leHBhbmRCeU9iamVjdCh0LHIpfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQubWluKSx0aGlzLm1heC5jb3B5KHQubWF4KSx0aGlzfW1ha2VFbXB0eSgpe3JldHVybiB0aGlzLm1pbi54PXRoaXMubWluLnk9dGhpcy5taW4uej0xLzAsdGhpcy5tYXgueD10aGlzLm1heC55PXRoaXMubWF4Lno9LTEvMCx0aGlzfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5tYXgueDx0aGlzLm1pbi54fHx0aGlzLm1heC55PHRoaXMubWluLnl8fHRoaXMubWF4Lno8dGhpcy5taW4uen1nZXRDZW50ZXIodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCwwKTp0LmFkZFZlY3RvcnModGhpcy5taW4sdGhpcy5tYXgpLm11bHRpcGx5U2NhbGFyKC41KX1nZXRTaXplKHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90LnNldCgwLDAsMCk6dC5zdWJWZWN0b3JzKHRoaXMubWF4LHRoaXMubWluKX1leHBhbmRCeVBvaW50KHQpe3JldHVybiB0aGlzLm1pbi5taW4odCksdGhpcy5tYXgubWF4KHQpLHRoaXN9ZXhwYW5kQnlWZWN0b3IodCl7cmV0dXJuIHRoaXMubWluLnN1Yih0KSx0aGlzLm1heC5hZGQodCksdGhpc31leHBhbmRCeVNjYWxhcih0KXtyZXR1cm4gdGhpcy5taW4uYWRkU2NhbGFyKC10KSx0aGlzLm1heC5hZGRTY2FsYXIodCksdGhpc31leHBhbmRCeU9iamVjdCh0LHI9ITEpe3QudXBkYXRlV29ybGRNYXRyaXgoITEsITEpO2xldCBuPXQuZ2VvbWV0cnk7aWYobiE9PXZvaWQgMClpZihyJiZuLmF0dHJpYnV0ZXMhPW51bGwmJm4uYXR0cmlidXRlcy5wb3NpdGlvbiE9PXZvaWQgMCl7bGV0IG89bi5hdHRyaWJ1dGVzLnBvc2l0aW9uO2ZvcihsZXQgYT0wLHM9by5jb3VudDthPHM7YSsrKWcxLmZyb21CdWZmZXJBdHRyaWJ1dGUobyxhKS5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy5leHBhbmRCeVBvaW50KGcxKX1lbHNlIG4uYm91bmRpbmdCb3g9PT1udWxsJiZuLmNvbXB1dGVCb3VuZGluZ0JveCgpLFhjdC5jb3B5KG4uYm91bmRpbmdCb3gpLFhjdC5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy51bmlvbihYY3QpO2xldCBpPXQuY2hpbGRyZW47Zm9yKGxldCBvPTAsYT1pLmxlbmd0aDtvPGE7bysrKXRoaXMuZXhwYW5kQnlPYmplY3QoaVtvXSxyKTtyZXR1cm4gdGhpc31jb250YWluc1BvaW50KHQpe3JldHVybiEodC54PHRoaXMubWluLnh8fHQueD50aGlzLm1heC54fHx0Lnk8dGhpcy5taW4ueXx8dC55PnRoaXMubWF4Lnl8fHQuejx0aGlzLm1pbi56fHx0Lno+dGhpcy5tYXgueil9Y29udGFpbnNCb3godCl7cmV0dXJuIHRoaXMubWluLng8PXQubWluLngmJnQubWF4Lng8PXRoaXMubWF4LngmJnRoaXMubWluLnk8PXQubWluLnkmJnQubWF4Lnk8PXRoaXMubWF4LnkmJnRoaXMubWluLno8PXQubWluLnomJnQubWF4Lno8PXRoaXMubWF4Lnp9Z2V0UGFyYW1ldGVyKHQscil7cmV0dXJuIHIuc2V0KCh0LngtdGhpcy5taW4ueCkvKHRoaXMubWF4LngtdGhpcy5taW4ueCksKHQueS10aGlzLm1pbi55KS8odGhpcy5tYXgueS10aGlzLm1pbi55KSwodC56LXRoaXMubWluLnopLyh0aGlzLm1heC56LXRoaXMubWluLnopKX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiEodC5tYXgueDx0aGlzLm1pbi54fHx0Lm1pbi54PnRoaXMubWF4Lnh8fHQubWF4Lnk8dGhpcy5taW4ueXx8dC5taW4ueT50aGlzLm1heC55fHx0Lm1heC56PHRoaXMubWluLnp8fHQubWluLno+dGhpcy5tYXgueil9aW50ZXJzZWN0c1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5jbGFtcFBvaW50KHQuY2VudGVyLGcxKSxnMS5kaXN0YW5jZVRvU3F1YXJlZCh0LmNlbnRlcik8PXQucmFkaXVzKnQucmFkaXVzfWludGVyc2VjdHNQbGFuZSh0KXtsZXQgcixuO3JldHVybiB0Lm5vcm1hbC54PjA/KHI9dC5ub3JtYWwueCp0aGlzLm1pbi54LG49dC5ub3JtYWwueCp0aGlzLm1heC54KToocj10Lm5vcm1hbC54KnRoaXMubWF4Lngsbj10Lm5vcm1hbC54KnRoaXMubWluLngpLHQubm9ybWFsLnk+MD8ocis9dC5ub3JtYWwueSp0aGlzLm1pbi55LG4rPXQubm9ybWFsLnkqdGhpcy5tYXgueSk6KHIrPXQubm9ybWFsLnkqdGhpcy5tYXgueSxuKz10Lm5vcm1hbC55KnRoaXMubWluLnkpLHQubm9ybWFsLno+MD8ocis9dC5ub3JtYWwueip0aGlzLm1pbi56LG4rPXQubm9ybWFsLnoqdGhpcy5tYXgueik6KHIrPXQubm9ybWFsLnoqdGhpcy5tYXgueixuKz10Lm5vcm1hbC56KnRoaXMubWluLnopLHI8PS10LmNvbnN0YW50JiZuPj0tdC5jb25zdGFudH1pbnRlcnNlY3RzVHJpYW5nbGUodCl7aWYodGhpcy5pc0VtcHR5KCkpcmV0dXJuITE7dGhpcy5nZXRDZW50ZXIoTFApLGZWLnN1YlZlY3RvcnModGhpcy5tYXgsTFApLHgzLnN1YlZlY3RvcnModC5hLExQKSxiMy5zdWJWZWN0b3JzKHQuYixMUCksdzMuc3ViVmVjdG9ycyh0LmMsTFApLEkwLnN1YlZlY3RvcnMoYjMseDMpLEwwLnN1YlZlY3RvcnModzMsYjMpLF8xLnN1YlZlY3RvcnMoeDMsdzMpO2xldCByPVswLC1JMC56LEkwLnksMCwtTDAueixMMC55LDAsLV8xLnosXzEueSxJMC56LDAsLUkwLngsTDAueiwwLC1MMC54LF8xLnosMCwtXzEueCwtSTAueSxJMC54LDAsLUwwLnksTDAueCwwLC1fMS55LF8xLngsMF07cmV0dXJuISRjdChyLHgzLGIzLHczLGZWKXx8KHI9WzEsMCwwLDAsMSwwLDAsMCwxXSwhJGN0KHIseDMsYjMsdzMsZlYpKT8hMToocFYuY3Jvc3NWZWN0b3JzKEkwLEwwKSxyPVtwVi54LHBWLnkscFYuel0sJGN0KHIseDMsYjMsdzMsZlYpKX1jbGFtcFBvaW50KHQscil7cmV0dXJuIHIuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCl9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiBnMS5jb3B5KHQpLmNsYW1wKHRoaXMubWluLHRoaXMubWF4KS5zdWIodCkubGVuZ3RoKCl9Z2V0Qm91bmRpbmdTcGhlcmUodCl7cmV0dXJuIHRoaXMuZ2V0Q2VudGVyKHQuY2VudGVyKSx0LnJhZGl1cz10aGlzLmdldFNpemUoZzEpLmxlbmd0aCgpKi41LHR9aW50ZXJzZWN0KHQpe3JldHVybiB0aGlzLm1pbi5tYXgodC5taW4pLHRoaXMubWF4Lm1pbih0Lm1heCksdGhpcy5pc0VtcHR5KCkmJnRoaXMubWFrZUVtcHR5KCksdGhpc311bmlvbih0KXtyZXR1cm4gdGhpcy5taW4ubWluKHQubWluKSx0aGlzLm1heC5tYXgodC5tYXgpLHRoaXN9YXBwbHlNYXRyaXg0KHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90aGlzOihVZFswXS5zZXQodGhpcy5taW4ueCx0aGlzLm1pbi55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxVZFsxXS5zZXQodGhpcy5taW4ueCx0aGlzLm1pbi55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxVZFsyXS5zZXQodGhpcy5taW4ueCx0aGlzLm1heC55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxVZFszXS5zZXQodGhpcy5taW4ueCx0aGlzLm1heC55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxVZFs0XS5zZXQodGhpcy5tYXgueCx0aGlzLm1pbi55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxVZFs1XS5zZXQodGhpcy5tYXgueCx0aGlzLm1pbi55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxVZFs2XS5zZXQodGhpcy5tYXgueCx0aGlzLm1heC55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxVZFs3XS5zZXQodGhpcy5tYXgueCx0aGlzLm1heC55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSx0aGlzLnNldEZyb21Qb2ludHMoVWQpLHRoaXMpfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5taW4uYWRkKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5taW4uZXF1YWxzKHRoaXMubWluKSYmdC5tYXguZXF1YWxzKHRoaXMubWF4KX19O3RhLnByb3RvdHlwZS5pc0JveDM9ITA7dmFyIFVkPVtuZXcgaixuZXcgaixuZXcgaixuZXcgaixuZXcgaixuZXcgaixuZXcgaixuZXcgal0sZzE9bmV3IGosWGN0PW5ldyB0YSx4Mz1uZXcgaixiMz1uZXcgaix3Mz1uZXcgaixJMD1uZXcgaixMMD1uZXcgaixfMT1uZXcgaixMUD1uZXcgaixmVj1uZXcgaixwVj1uZXcgaix5MT1uZXcgajtmdW5jdGlvbiAkY3QoZSx0LHIsbixpKXtmb3IobGV0IG89MCxhPWUubGVuZ3RoLTM7bzw9YTtvKz0zKXt5MS5mcm9tQXJyYXkoZSxvKTtsZXQgcz1pLngqTWF0aC5hYnMoeTEueCkraS55Kk1hdGguYWJzKHkxLnkpK2kueipNYXRoLmFicyh5MS56KSxsPXQuZG90KHkxKSxjPXIuZG90KHkxKSx1PW4uZG90KHkxKTtpZihNYXRoLm1heCgtTWF0aC5tYXgobCxjLHUpLE1hdGgubWluKGwsYyx1KSk+cylyZXR1cm4hMX1yZXR1cm4hMH12YXIgc2ZyPW5ldyB0YSx2dWU9bmV3IGosZFY9bmV3IGosS2N0PW5ldyBqLEpmPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IGoscj0tMSl7dGhpcy5jZW50ZXI9dCx0aGlzLnJhZGl1cz1yfXNldCh0LHIpe3JldHVybiB0aGlzLmNlbnRlci5jb3B5KHQpLHRoaXMucmFkaXVzPXIsdGhpc31zZXRGcm9tUG9pbnRzKHQscil7bGV0IG49dGhpcy5jZW50ZXI7ciE9PXZvaWQgMD9uLmNvcHkocik6c2ZyLnNldEZyb21Qb2ludHModCkuZ2V0Q2VudGVyKG4pO2xldCBpPTA7Zm9yKGxldCBvPTAsYT10Lmxlbmd0aDtvPGE7bysrKWk9TWF0aC5tYXgoaSxuLmRpc3RhbmNlVG9TcXVhcmVkKHRbb10pKTtyZXR1cm4gdGhpcy5yYWRpdXM9TWF0aC5zcXJ0KGkpLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuY29weSh0LmNlbnRlciksdGhpcy5yYWRpdXM9dC5yYWRpdXMsdGhpc31pc0VtcHR5KCl7cmV0dXJuIHRoaXMucmFkaXVzPDB9bWFrZUVtcHR5KCl7cmV0dXJuIHRoaXMuY2VudGVyLnNldCgwLDAsMCksdGhpcy5yYWRpdXM9LTEsdGhpc31jb250YWluc1BvaW50KHQpe3JldHVybiB0LmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuY2VudGVyKTw9dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXN9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiB0LmRpc3RhbmNlVG8odGhpcy5jZW50ZXIpLXRoaXMucmFkaXVzfWludGVyc2VjdHNTcGhlcmUodCl7bGV0IHI9dGhpcy5yYWRpdXMrdC5yYWRpdXM7cmV0dXJuIHQuY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuY2VudGVyKTw9cipyfWludGVyc2VjdHNCb3godCl7cmV0dXJuIHQuaW50ZXJzZWN0c1NwaGVyZSh0aGlzKX1pbnRlcnNlY3RzUGxhbmUodCl7cmV0dXJuIE1hdGguYWJzKHQuZGlzdGFuY2VUb1BvaW50KHRoaXMuY2VudGVyKSk8PXRoaXMucmFkaXVzfWNsYW1wUG9pbnQodCxyKXtsZXQgbj10aGlzLmNlbnRlci5kaXN0YW5jZVRvU3F1YXJlZCh0KTtyZXR1cm4gci5jb3B5KHQpLG4+dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXMmJihyLnN1Yih0aGlzLmNlbnRlcikubm9ybWFsaXplKCksci5tdWx0aXBseVNjYWxhcih0aGlzLnJhZGl1cykuYWRkKHRoaXMuY2VudGVyKSkscn1nZXRCb3VuZGluZ0JveCh0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/KHQubWFrZUVtcHR5KCksdCk6KHQuc2V0KHRoaXMuY2VudGVyLHRoaXMuY2VudGVyKSx0LmV4cGFuZEJ5U2NhbGFyKHRoaXMucmFkaXVzKSx0KX1hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMuY2VudGVyLmFwcGx5TWF0cml4NCh0KSx0aGlzLnJhZGl1cz10aGlzLnJhZGl1cyp0LmdldE1heFNjYWxlT25BeGlzKCksdGhpc310cmFuc2xhdGUodCl7cmV0dXJuIHRoaXMuY2VudGVyLmFkZCh0KSx0aGlzfWV4cGFuZEJ5UG9pbnQodCl7S2N0LnN1YlZlY3RvcnModCx0aGlzLmNlbnRlcik7bGV0IHI9S2N0Lmxlbmd0aFNxKCk7aWYocj50aGlzLnJhZGl1cyp0aGlzLnJhZGl1cyl7bGV0IG49TWF0aC5zcXJ0KHIpLGk9KG4tdGhpcy5yYWRpdXMpKi41O3RoaXMuY2VudGVyLmFkZChLY3QubXVsdGlwbHlTY2FsYXIoaS9uKSksdGhpcy5yYWRpdXMrPWl9cmV0dXJuIHRoaXN9dW5pb24odCl7cmV0dXJuIHRoaXMuY2VudGVyLmVxdWFscyh0LmNlbnRlcik9PT0hMD9kVi5zZXQoMCwwLDEpLm11bHRpcGx5U2NhbGFyKHQucmFkaXVzKTpkVi5zdWJWZWN0b3JzKHQuY2VudGVyLHRoaXMuY2VudGVyKS5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0LnJhZGl1cyksdGhpcy5leHBhbmRCeVBvaW50KHZ1ZS5jb3B5KHQuY2VudGVyKS5hZGQoZFYpKSx0aGlzLmV4cGFuZEJ5UG9pbnQodnVlLmNvcHkodC5jZW50ZXIpLnN1YihkVikpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0LmNlbnRlci5lcXVhbHModGhpcy5jZW50ZXIpJiZ0LnJhZGl1cz09PXRoaXMucmFkaXVzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX19LHFkPW5ldyBqLFpjdD1uZXcgaixtVj1uZXcgaixrMD1uZXcgaixKY3Q9bmV3IGosZ1Y9bmV3IGosUWN0PW5ldyBqLFFmPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IGoscj1uZXcgaigwLDAsLTEpKXt0aGlzLm9yaWdpbj10LHRoaXMuZGlyZWN0aW9uPXJ9c2V0KHQscil7cmV0dXJuIHRoaXMub3JpZ2luLmNvcHkodCksdGhpcy5kaXJlY3Rpb24uY29weShyKSx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMub3JpZ2luLmNvcHkodC5vcmlnaW4pLHRoaXMuZGlyZWN0aW9uLmNvcHkodC5kaXJlY3Rpb24pLHRoaXN9YXQodCxyKXtyZXR1cm4gci5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcih0KS5hZGQodGhpcy5vcmlnaW4pfWxvb2tBdCh0KXtyZXR1cm4gdGhpcy5kaXJlY3Rpb24uY29weSh0KS5zdWIodGhpcy5vcmlnaW4pLm5vcm1hbGl6ZSgpLHRoaXN9cmVjYXN0KHQpe3JldHVybiB0aGlzLm9yaWdpbi5jb3B5KHRoaXMuYXQodCxxZCkpLHRoaXN9Y2xvc2VzdFBvaW50VG9Qb2ludCh0LHIpe3Iuc3ViVmVjdG9ycyh0LHRoaXMub3JpZ2luKTtsZXQgbj1yLmRvdCh0aGlzLmRpcmVjdGlvbik7cmV0dXJuIG48MD9yLmNvcHkodGhpcy5vcmlnaW4pOnIuY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIobikuYWRkKHRoaXMub3JpZ2luKX1kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RhbmNlU3FUb1BvaW50KHQpKX1kaXN0YW5jZVNxVG9Qb2ludCh0KXtsZXQgcj1xZC5zdWJWZWN0b3JzKHQsdGhpcy5vcmlnaW4pLmRvdCh0aGlzLmRpcmVjdGlvbik7cmV0dXJuIHI8MD90aGlzLm9yaWdpbi5kaXN0YW5jZVRvU3F1YXJlZCh0KToocWQuY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIocikuYWRkKHRoaXMub3JpZ2luKSxxZC5kaXN0YW5jZVRvU3F1YXJlZCh0KSl9ZGlzdGFuY2VTcVRvU2VnbWVudCh0LHIsbixpKXtaY3QuY29weSh0KS5hZGQocikubXVsdGlwbHlTY2FsYXIoLjUpLG1WLmNvcHkocikuc3ViKHQpLm5vcm1hbGl6ZSgpLGswLmNvcHkodGhpcy5vcmlnaW4pLnN1YihaY3QpO2xldCBvPXQuZGlzdGFuY2VUbyhyKSouNSxhPS10aGlzLmRpcmVjdGlvbi5kb3QobVYpLHM9azAuZG90KHRoaXMuZGlyZWN0aW9uKSxsPS1rMC5kb3QobVYpLGM9azAubGVuZ3RoU3EoKSx1PU1hdGguYWJzKDEtYSphKSxoLGYscCxkO2lmKHU+MClpZihoPWEqbC1zLGY9YSpzLWwsZD1vKnUsaD49MClpZihmPj0tZClpZihmPD1kKXtsZXQgZz0xL3U7aCo9ZyxmKj1nLHA9aCooaCthKmYrMipzKStmKihhKmgrZisyKmwpK2N9ZWxzZSBmPW8saD1NYXRoLm1heCgwLC0oYSpmK3MpKSxwPS1oKmgrZiooZisyKmwpK2M7ZWxzZSBmPS1vLGg9TWF0aC5tYXgoMCwtKGEqZitzKSkscD0taCpoK2YqKGYrMipsKStjO2Vsc2UgZjw9LWQ/KGg9TWF0aC5tYXgoMCwtKC1hKm8rcykpLGY9aD4wPy1vOk1hdGgubWluKE1hdGgubWF4KC1vLC1sKSxvKSxwPS1oKmgrZiooZisyKmwpK2MpOmY8PWQ/KGg9MCxmPU1hdGgubWluKE1hdGgubWF4KC1vLC1sKSxvKSxwPWYqKGYrMipsKStjKTooaD1NYXRoLm1heCgwLC0oYSpvK3MpKSxmPWg+MD9vOk1hdGgubWluKE1hdGgubWF4KC1vLC1sKSxvKSxwPS1oKmgrZiooZisyKmwpK2MpO2Vsc2UgZj1hPjA/LW86byxoPU1hdGgubWF4KDAsLShhKmYrcykpLHA9LWgqaCtmKihmKzIqbCkrYztyZXR1cm4gbiYmbi5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihoKS5hZGQodGhpcy5vcmlnaW4pLGkmJmkuY29weShtVikubXVsdGlwbHlTY2FsYXIoZikuYWRkKFpjdCkscH1pbnRlcnNlY3RTcGhlcmUodCxyKXtxZC5zdWJWZWN0b3JzKHQuY2VudGVyLHRoaXMub3JpZ2luKTtsZXQgbj1xZC5kb3QodGhpcy5kaXJlY3Rpb24pLGk9cWQuZG90KHFkKS1uKm4sbz10LnJhZGl1cyp0LnJhZGl1cztpZihpPm8pcmV0dXJuIG51bGw7bGV0IGE9TWF0aC5zcXJ0KG8taSkscz1uLWEsbD1uK2E7cmV0dXJuIHM8MCYmbDwwP251bGw6czwwP3RoaXMuYXQobCxyKTp0aGlzLmF0KHMscil9aW50ZXJzZWN0c1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5kaXN0YW5jZVNxVG9Qb2ludCh0LmNlbnRlcik8PXQucmFkaXVzKnQucmFkaXVzfWRpc3RhbmNlVG9QbGFuZSh0KXtsZXQgcj10Lm5vcm1hbC5kb3QodGhpcy5kaXJlY3Rpb24pO2lmKHI9PT0wKXJldHVybiB0LmRpc3RhbmNlVG9Qb2ludCh0aGlzLm9yaWdpbik9PT0wPzA6bnVsbDtsZXQgbj0tKHRoaXMub3JpZ2luLmRvdCh0Lm5vcm1hbCkrdC5jb25zdGFudCkvcjtyZXR1cm4gbj49MD9uOm51bGx9aW50ZXJzZWN0UGxhbmUodCxyKXtsZXQgbj10aGlzLmRpc3RhbmNlVG9QbGFuZSh0KTtyZXR1cm4gbj09PW51bGw/bnVsbDp0aGlzLmF0KG4scil9aW50ZXJzZWN0c1BsYW5lKHQpe2xldCByPXQuZGlzdGFuY2VUb1BvaW50KHRoaXMub3JpZ2luKTtyZXR1cm4gcj09PTB8fHQubm9ybWFsLmRvdCh0aGlzLmRpcmVjdGlvbikqcjwwfWludGVyc2VjdEJveCh0LHIpe2xldCBuLGksbyxhLHMsbCxjPTEvdGhpcy5kaXJlY3Rpb24ueCx1PTEvdGhpcy5kaXJlY3Rpb24ueSxoPTEvdGhpcy5kaXJlY3Rpb24ueixmPXRoaXMub3JpZ2luO3JldHVybiBjPj0wPyhuPSh0Lm1pbi54LWYueCkqYyxpPSh0Lm1heC54LWYueCkqYyk6KG49KHQubWF4LngtZi54KSpjLGk9KHQubWluLngtZi54KSpjKSx1Pj0wPyhvPSh0Lm1pbi55LWYueSkqdSxhPSh0Lm1heC55LWYueSkqdSk6KG89KHQubWF4LnktZi55KSp1LGE9KHQubWluLnktZi55KSp1KSxuPmF8fG8+aXx8KChvPm58fG4hPT1uKSYmKG49byksKGE8aXx8aSE9PWkpJiYoaT1hKSxoPj0wPyhzPSh0Lm1pbi56LWYueikqaCxsPSh0Lm1heC56LWYueikqaCk6KHM9KHQubWF4LnotZi56KSpoLGw9KHQubWluLnotZi56KSpoKSxuPmx8fHM+aSl8fCgocz5ufHxuIT09bikmJihuPXMpLChsPGl8fGkhPT1pKSYmKGk9bCksaTwwKT9udWxsOnRoaXMuYXQobj49MD9uOmkscil9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdGhpcy5pbnRlcnNlY3RCb3godCxxZCkhPT1udWxsfWludGVyc2VjdFRyaWFuZ2xlKHQscixuLGksbyl7SmN0LnN1YlZlY3RvcnMocix0KSxnVi5zdWJWZWN0b3JzKG4sdCksUWN0LmNyb3NzVmVjdG9ycyhKY3QsZ1YpO2xldCBhPXRoaXMuZGlyZWN0aW9uLmRvdChRY3QpLHM7aWYoYT4wKXtpZihpKXJldHVybiBudWxsO3M9MX1lbHNlIGlmKGE8MClzPS0xLGE9LWE7ZWxzZSByZXR1cm4gbnVsbDtrMC5zdWJWZWN0b3JzKHRoaXMub3JpZ2luLHQpO2xldCBsPXMqdGhpcy5kaXJlY3Rpb24uZG90KGdWLmNyb3NzVmVjdG9ycyhrMCxnVikpO2lmKGw8MClyZXR1cm4gbnVsbDtsZXQgYz1zKnRoaXMuZGlyZWN0aW9uLmRvdChKY3QuY3Jvc3MoazApKTtpZihjPDB8fGwrYz5hKXJldHVybiBudWxsO2xldCB1PS1zKmswLmRvdChRY3QpO3JldHVybiB1PDA/bnVsbDp0aGlzLmF0KHUvYSxvKX1hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMub3JpZ2luLmFwcGx5TWF0cml4NCh0KSx0aGlzLmRpcmVjdGlvbi50cmFuc2Zvcm1EaXJlY3Rpb24odCksdGhpc31lcXVhbHModCl7cmV0dXJuIHQub3JpZ2luLmVxdWFscyh0aGlzLm9yaWdpbikmJnQuZGlyZWN0aW9uLmVxdWFscyh0aGlzLmRpcmVjdGlvbil9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfX0sTWU9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmVsZW1lbnRzPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSxhcmd1bWVudHMubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IHRoZSBjb25zdHJ1Y3RvciBubyBsb25nZXIgcmVhZHMgYXJndW1lbnRzLiB1c2UgLnNldCgpIGluc3RlYWQuIil9c2V0KHQscixuLGksbyxhLHMsbCxjLHUsaCxmLHAsZCxnLF8pe2xldCB5PXRoaXMuZWxlbWVudHM7cmV0dXJuIHlbMF09dCx5WzRdPXIseVs4XT1uLHlbMTJdPWkseVsxXT1vLHlbNV09YSx5WzldPXMseVsxM109bCx5WzJdPWMseVs2XT11LHlbMTBdPWgseVsxNF09Zix5WzNdPXAseVs3XT1kLHlbMTFdPWcseVsxNV09Xyx0aGlzfWlkZW50aXR5KCl7cmV0dXJuIHRoaXMuc2V0KDEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDEpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IE1lKCkuZnJvbUFycmF5KHRoaXMuZWxlbWVudHMpfWNvcHkodCl7bGV0IHI9dGhpcy5lbGVtZW50cyxuPXQuZWxlbWVudHM7cmV0dXJuIHJbMF09blswXSxyWzFdPW5bMV0sclsyXT1uWzJdLHJbM109blszXSxyWzRdPW5bNF0scls1XT1uWzVdLHJbNl09bls2XSxyWzddPW5bN10scls4XT1uWzhdLHJbOV09bls5XSxyWzEwXT1uWzEwXSxyWzExXT1uWzExXSxyWzEyXT1uWzEyXSxyWzEzXT1uWzEzXSxyWzE0XT1uWzE0XSxyWzE1XT1uWzE1XSx0aGlzfWNvcHlQb3NpdGlvbih0KXtsZXQgcj10aGlzLmVsZW1lbnRzLG49dC5lbGVtZW50cztyZXR1cm4gclsxMl09blsxMl0sclsxM109blsxM10sclsxNF09blsxNF0sdGhpc31zZXRGcm9tTWF0cml4Myh0KXtsZXQgcj10LmVsZW1lbnRzO3JldHVybiB0aGlzLnNldChyWzBdLHJbM10scls2XSwwLHJbMV0scls0XSxyWzddLDAsclsyXSxyWzVdLHJbOF0sMCwwLDAsMCwxKSx0aGlzfWV4dHJhY3RCYXNpcyh0LHIsbil7cmV0dXJuIHQuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDApLHIuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDEpLG4uc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDIpLHRoaXN9bWFrZUJhc2lzKHQscixuKXtyZXR1cm4gdGhpcy5zZXQodC54LHIueCxuLngsMCx0Lnksci55LG4ueSwwLHQueixyLnosbi56LDAsMCwwLDAsMSksdGhpc31leHRyYWN0Um90YXRpb24odCl7bGV0IHI9dGhpcy5lbGVtZW50cyxuPXQuZWxlbWVudHMsaT0xL1MzLnNldEZyb21NYXRyaXhDb2x1bW4odCwwKS5sZW5ndGgoKSxvPTEvUzMuc2V0RnJvbU1hdHJpeENvbHVtbih0LDEpLmxlbmd0aCgpLGE9MS9TMy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMikubGVuZ3RoKCk7cmV0dXJuIHJbMF09blswXSppLHJbMV09blsxXSppLHJbMl09blsyXSppLHJbM109MCxyWzRdPW5bNF0qbyxyWzVdPW5bNV0qbyxyWzZdPW5bNl0qbyxyWzddPTAscls4XT1uWzhdKmEscls5XT1uWzldKmEsclsxMF09blsxMF0qYSxyWzExXT0wLHJbMTJdPTAsclsxM109MCxyWzE0XT0wLHJbMTVdPTEsdGhpc31tYWtlUm90YXRpb25Gcm9tRXVsZXIodCl7dCYmdC5pc0V1bGVyfHxjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAubWFrZVJvdGF0aW9uRnJvbUV1bGVyKCkgbm93IGV4cGVjdHMgYSBFdWxlciByb3RhdGlvbiByYXRoZXIgdGhhbiBhIFZlY3RvcjMgYW5kIG9yZGVyLiIpO2xldCByPXRoaXMuZWxlbWVudHMsbj10LngsaT10Lnksbz10LnosYT1NYXRoLmNvcyhuKSxzPU1hdGguc2luKG4pLGw9TWF0aC5jb3MoaSksYz1NYXRoLnNpbihpKSx1PU1hdGguY29zKG8pLGg9TWF0aC5zaW4obyk7aWYodC5vcmRlcj09PSJYWVoiKXtsZXQgZj1hKnUscD1hKmgsZD1zKnUsZz1zKmg7clswXT1sKnUscls0XT0tbCpoLHJbOF09YyxyWzFdPXArZCpjLHJbNV09Zi1nKmMscls5XT0tcypsLHJbMl09Zy1mKmMscls2XT1kK3AqYyxyWzEwXT1hKmx9ZWxzZSBpZih0Lm9yZGVyPT09IllYWiIpe2xldCBmPWwqdSxwPWwqaCxkPWMqdSxnPWMqaDtyWzBdPWYrZypzLHJbNF09ZCpzLXAscls4XT1hKmMsclsxXT1hKmgscls1XT1hKnUscls5XT0tcyxyWzJdPXAqcy1kLHJbNl09ZytmKnMsclsxMF09YSpsfWVsc2UgaWYodC5vcmRlcj09PSJaWFkiKXtsZXQgZj1sKnUscD1sKmgsZD1jKnUsZz1jKmg7clswXT1mLWcqcyxyWzRdPS1hKmgscls4XT1kK3AqcyxyWzFdPXArZCpzLHJbNV09YSp1LHJbOV09Zy1mKnMsclsyXT0tYSpjLHJbNl09cyxyWzEwXT1hKmx9ZWxzZSBpZih0Lm9yZGVyPT09IlpZWCIpe2xldCBmPWEqdSxwPWEqaCxkPXMqdSxnPXMqaDtyWzBdPWwqdSxyWzRdPWQqYy1wLHJbOF09ZipjK2csclsxXT1sKmgscls1XT1nKmMrZixyWzldPXAqYy1kLHJbMl09LWMscls2XT1zKmwsclsxMF09YSpsfWVsc2UgaWYodC5vcmRlcj09PSJZWlgiKXtsZXQgZj1hKmwscD1hKmMsZD1zKmwsZz1zKmM7clswXT1sKnUscls0XT1nLWYqaCxyWzhdPWQqaCtwLHJbMV09aCxyWzVdPWEqdSxyWzldPS1zKnUsclsyXT0tYyp1LHJbNl09cCpoK2QsclsxMF09Zi1nKmh9ZWxzZSBpZih0Lm9yZGVyPT09IlhaWSIpe2xldCBmPWEqbCxwPWEqYyxkPXMqbCxnPXMqYztyWzBdPWwqdSxyWzRdPS1oLHJbOF09Yyp1LHJbMV09ZipoK2cscls1XT1hKnUscls5XT1wKmgtZCxyWzJdPWQqaC1wLHJbNl09cyp1LHJbMTBdPWcqaCtmfXJldHVybiByWzNdPTAscls3XT0wLHJbMTFdPTAsclsxMl09MCxyWzEzXT0wLHJbMTRdPTAsclsxNV09MSx0aGlzfW1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHQpe3JldHVybiB0aGlzLmNvbXBvc2UobGZyLHQsY2ZyKX1sb29rQXQodCxyLG4pe2xldCBpPXRoaXMuZWxlbWVudHM7cmV0dXJuIFJsLnN1YlZlY3RvcnModCxyKSxSbC5sZW5ndGhTcSgpPT09MCYmKFJsLno9MSksUmwubm9ybWFsaXplKCksUjAuY3Jvc3NWZWN0b3JzKG4sUmwpLFIwLmxlbmd0aFNxKCk9PT0wJiYoTWF0aC5hYnMobi56KT09PTE/UmwueCs9MWUtNDpSbC56Kz0xZS00LFJsLm5vcm1hbGl6ZSgpLFIwLmNyb3NzVmVjdG9ycyhuLFJsKSksUjAubm9ybWFsaXplKCksX1YuY3Jvc3NWZWN0b3JzKFJsLFIwKSxpWzBdPVIwLngsaVs0XT1fVi54LGlbOF09UmwueCxpWzFdPVIwLnksaVs1XT1fVi55LGlbOV09UmwueSxpWzJdPVIwLnosaVs2XT1fVi56LGlbMTBdPVJsLnosdGhpc31tdWx0aXBseSh0LHIpe3JldHVybiByIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5TWF0cmljZXMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0LHIpKTp0aGlzLm11bHRpcGx5TWF0cmljZXModGhpcyx0KX1wcmVtdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKHQsdGhpcyl9bXVsdGlwbHlNYXRyaWNlcyh0LHIpe2xldCBuPXQuZWxlbWVudHMsaT1yLmVsZW1lbnRzLG89dGhpcy5lbGVtZW50cyxhPW5bMF0scz1uWzRdLGw9bls4XSxjPW5bMTJdLHU9blsxXSxoPW5bNV0sZj1uWzldLHA9blsxM10sZD1uWzJdLGc9bls2XSxfPW5bMTBdLHk9blsxNF0seD1uWzNdLGI9bls3XSxTPW5bMTFdLEM9blsxNV0sUD1pWzBdLGs9aVs0XSxPPWlbOF0sRD1pWzEyXSxCPWlbMV0sST1pWzVdLEw9aVs5XSxSPWlbMTNdLEY9aVsyXSx6PWlbNl0sVT1pWzEwXSxXPWlbMTRdLFo9aVszXSxydD1pWzddLG90PWlbMTFdLHN0PWlbMTVdO3JldHVybiBvWzBdPWEqUCtzKkIrbCpGK2MqWixvWzRdPWEqaytzKkkrbCp6K2MqcnQsb1s4XT1hKk8rcypMK2wqVStjKm90LG9bMTJdPWEqRCtzKlIrbCpXK2Mqc3Qsb1sxXT11KlAraCpCK2YqRitwKlosb1s1XT11KmsraCpJK2YqeitwKnJ0LG9bOV09dSpPK2gqTCtmKlUrcCpvdCxvWzEzXT11KkQraCpSK2YqVytwKnN0LG9bMl09ZCpQK2cqQitfKkYreSpaLG9bNl09ZCprK2cqSStfKnoreSpydCxvWzEwXT1kKk8rZypMK18qVSt5Km90LG9bMTRdPWQqRCtnKlIrXypXK3kqc3Qsb1szXT14KlArYipCK1MqRitDKlosb1s3XT14KmsrYipJK1MqeitDKnJ0LG9bMTFdPXgqTytiKkwrUypVK0Mqb3Qsb1sxNV09eCpEK2IqUitTKlcrQypzdCx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe2xldCByPXRoaXMuZWxlbWVudHM7cmV0dXJuIHJbMF0qPXQscls0XSo9dCxyWzhdKj10LHJbMTJdKj10LHJbMV0qPXQscls1XSo9dCxyWzldKj10LHJbMTNdKj10LHJbMl0qPXQscls2XSo9dCxyWzEwXSo9dCxyWzE0XSo9dCxyWzNdKj10LHJbN10qPXQsclsxMV0qPXQsclsxNV0qPXQsdGhpc31kZXRlcm1pbmFudCgpe2xldCB0PXRoaXMuZWxlbWVudHMscj10WzBdLG49dFs0XSxpPXRbOF0sbz10WzEyXSxhPXRbMV0scz10WzVdLGw9dFs5XSxjPXRbMTNdLHU9dFsyXSxoPXRbNl0sZj10WzEwXSxwPXRbMTRdLGQ9dFszXSxnPXRbN10sXz10WzExXSx5PXRbMTVdO3JldHVybiBkKigrbypsKmgtaSpjKmgtbypzKmYrbipjKmYraSpzKnAtbipsKnApK2cqKCtyKmwqcC1yKmMqZitvKmEqZi1pKmEqcCtpKmMqdS1vKmwqdSkrXyooK3IqYypoLXIqcypwLW8qYSpoK24qYSpwK28qcyp1LW4qYyp1KSt5KigtaSpzKnUtcipsKmgrcipzKmYraSphKmgtbiphKmYrbipsKnUpfXRyYW5zcG9zZSgpe2xldCB0PXRoaXMuZWxlbWVudHMscjtyZXR1cm4gcj10WzFdLHRbMV09dFs0XSx0WzRdPXIscj10WzJdLHRbMl09dFs4XSx0WzhdPXIscj10WzZdLHRbNl09dFs5XSx0WzldPXIscj10WzNdLHRbM109dFsxMl0sdFsxMl09cixyPXRbN10sdFs3XT10WzEzXSx0WzEzXT1yLHI9dFsxMV0sdFsxMV09dFsxNF0sdFsxNF09cix0aGlzfXNldFBvc2l0aW9uKHQscixuKXtsZXQgaT10aGlzLmVsZW1lbnRzO3JldHVybiB0LmlzVmVjdG9yMz8oaVsxMl09dC54LGlbMTNdPXQueSxpWzE0XT10LnopOihpWzEyXT10LGlbMTNdPXIsaVsxNF09biksdGhpc31pbnZlcnQoKXtsZXQgdD10aGlzLmVsZW1lbnRzLHI9dFswXSxuPXRbMV0saT10WzJdLG89dFszXSxhPXRbNF0scz10WzVdLGw9dFs2XSxjPXRbN10sdT10WzhdLGg9dFs5XSxmPXRbMTBdLHA9dFsxMV0sZD10WzEyXSxnPXRbMTNdLF89dFsxNF0seT10WzE1XSx4PWgqXypjLWcqZipjK2cqbCpwLXMqXypwLWgqbCp5K3MqZip5LGI9ZCpmKmMtdSpfKmMtZCpsKnArYSpfKnArdSpsKnktYSpmKnksUz11KmcqYy1kKmgqYytkKnMqcC1hKmcqcC11KnMqeSthKmgqeSxDPWQqaCpsLXUqZypsLWQqcypmK2EqZypmK3UqcypfLWEqaCpfLFA9cip4K24qYitpKlMrbypDO2lmKFA9PT0wKXJldHVybiB0aGlzLnNldCgwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwKTtsZXQgaz0xL1A7cmV0dXJuIHRbMF09eCprLHRbMV09KGcqZipvLWgqXypvLWcqaSpwK24qXypwK2gqaSp5LW4qZip5KSprLHRbMl09KHMqXypvLWcqbCpvK2cqaSpjLW4qXypjLXMqaSp5K24qbCp5KSprLHRbM109KGgqbCpvLXMqZipvLWgqaSpjK24qZipjK3MqaSpwLW4qbCpwKSprLHRbNF09YiprLHRbNV09KHUqXypvLWQqZipvK2QqaSpwLXIqXypwLXUqaSp5K3IqZip5KSprLHRbNl09KGQqbCpvLWEqXypvLWQqaSpjK3IqXypjK2EqaSp5LXIqbCp5KSprLHRbN109KGEqZipvLXUqbCpvK3UqaSpjLXIqZipjLWEqaSpwK3IqbCpwKSprLHRbOF09UyprLHRbOV09KGQqaCpvLXUqZypvLWQqbipwK3IqZypwK3Uqbip5LXIqaCp5KSprLHRbMTBdPShhKmcqby1kKnMqbytkKm4qYy1yKmcqYy1hKm4qeStyKnMqeSkqayx0WzExXT0odSpzKm8tYSpoKm8tdSpuKmMrcipoKmMrYSpuKnAtcipzKnApKmssdFsxMl09QyprLHRbMTNdPSh1KmcqaS1kKmgqaStkKm4qZi1yKmcqZi11Km4qXytyKmgqXykqayx0WzE0XT0oZCpzKmktYSpnKmktZCpuKmwrcipnKmwrYSpuKl8tcipzKl8pKmssdFsxNV09KGEqaCppLXUqcyppK3UqbipsLXIqaCpsLWEqbipmK3IqcypmKSprLHRoaXN9c2NhbGUodCl7bGV0IHI9dGhpcy5lbGVtZW50cyxuPXQueCxpPXQueSxvPXQuejtyZXR1cm4gclswXSo9bixyWzRdKj1pLHJbOF0qPW8sclsxXSo9bixyWzVdKj1pLHJbOV0qPW8sclsyXSo9bixyWzZdKj1pLHJbMTBdKj1vLHJbM10qPW4scls3XSo9aSxyWzExXSo9byx0aGlzfWdldE1heFNjYWxlT25BeGlzKCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxyPXRbMF0qdFswXSt0WzFdKnRbMV0rdFsyXSp0WzJdLG49dFs0XSp0WzRdK3RbNV0qdFs1XSt0WzZdKnRbNl0saT10WzhdKnRbOF0rdFs5XSp0WzldK3RbMTBdKnRbMTBdO3JldHVybiBNYXRoLnNxcnQoTWF0aC5tYXgocixuLGkpKX1tYWtlVHJhbnNsYXRpb24odCxyLG4pe3JldHVybiB0aGlzLnNldCgxLDAsMCx0LDAsMSwwLHIsMCwwLDEsbiwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvblgodCl7bGV0IHI9TWF0aC5jb3ModCksbj1NYXRoLnNpbih0KTtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwwLHIsLW4sMCwwLG4sciwwLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uWSh0KXtsZXQgcj1NYXRoLmNvcyh0KSxuPU1hdGguc2luKHQpO3JldHVybiB0aGlzLnNldChyLDAsbiwwLDAsMSwwLDAsLW4sMCxyLDAsMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25aKHQpe2xldCByPU1hdGguY29zKHQpLG49TWF0aC5zaW4odCk7cmV0dXJuIHRoaXMuc2V0KHIsLW4sMCwwLG4sciwwLDAsMCwwLDEsMCwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvbkF4aXModCxyKXtsZXQgbj1NYXRoLmNvcyhyKSxpPU1hdGguc2luKHIpLG89MS1uLGE9dC54LHM9dC55LGw9dC56LGM9byphLHU9bypzO3JldHVybiB0aGlzLnNldChjKmErbixjKnMtaSpsLGMqbCtpKnMsMCxjKnMraSpsLHUqcytuLHUqbC1pKmEsMCxjKmwtaSpzLHUqbCtpKmEsbypsKmwrbiwwLDAsMCwwLDEpLHRoaXN9bWFrZVNjYWxlKHQscixuKXtyZXR1cm4gdGhpcy5zZXQodCwwLDAsMCwwLHIsMCwwLDAsMCxuLDAsMCwwLDAsMSksdGhpc31tYWtlU2hlYXIodCxyLG4saSxvLGEpe3JldHVybiB0aGlzLnNldCgxLG4sbywwLHQsMSxhLDAscixpLDEsMCwwLDAsMCwxKSx0aGlzfWNvbXBvc2UodCxyLG4pe2xldCBpPXRoaXMuZWxlbWVudHMsbz1yLl94LGE9ci5feSxzPXIuX3osbD1yLl93LGM9bytvLHU9YSthLGg9cytzLGY9bypjLHA9byp1LGQ9bypoLGc9YSp1LF89YSpoLHk9cypoLHg9bCpjLGI9bCp1LFM9bCpoLEM9bi54LFA9bi55LGs9bi56O3JldHVybiBpWzBdPSgxLShnK3kpKSpDLGlbMV09KHArUykqQyxpWzJdPShkLWIpKkMsaVszXT0wLGlbNF09KHAtUykqUCxpWzVdPSgxLShmK3kpKSpQLGlbNl09KF8reCkqUCxpWzddPTAsaVs4XT0oZCtiKSprLGlbOV09KF8teCkqayxpWzEwXT0oMS0oZitnKSkqayxpWzExXT0wLGlbMTJdPXQueCxpWzEzXT10LnksaVsxNF09dC56LGlbMTVdPTEsdGhpc31kZWNvbXBvc2UodCxyLG4pe2xldCBpPXRoaXMuZWxlbWVudHMsbz1TMy5zZXQoaVswXSxpWzFdLGlbMl0pLmxlbmd0aCgpLGE9UzMuc2V0KGlbNF0saVs1XSxpWzZdKS5sZW5ndGgoKSxzPVMzLnNldChpWzhdLGlbOV0saVsxMF0pLmxlbmd0aCgpO3RoaXMuZGV0ZXJtaW5hbnQoKTwwJiYobz0tbyksdC54PWlbMTJdLHQueT1pWzEzXSx0Lno9aVsxNF0saWguY29weSh0aGlzKTtsZXQgYz0xL28sdT0xL2EsaD0xL3M7cmV0dXJuIGloLmVsZW1lbnRzWzBdKj1jLGloLmVsZW1lbnRzWzFdKj1jLGloLmVsZW1lbnRzWzJdKj1jLGloLmVsZW1lbnRzWzRdKj11LGloLmVsZW1lbnRzWzVdKj11LGloLmVsZW1lbnRzWzZdKj11LGloLmVsZW1lbnRzWzhdKj1oLGloLmVsZW1lbnRzWzldKj1oLGloLmVsZW1lbnRzWzEwXSo9aCxyLnNldEZyb21Sb3RhdGlvbk1hdHJpeChpaCksbi54PW8sbi55PWEsbi56PXMsdGhpc31tYWtlUGVyc3BlY3RpdmUodCxyLG4saSxvLGEpe2E9PT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm1ha2VQZXJzcGVjdGl2ZSgpIGhhcyBiZWVuIHJlZGVmaW5lZCBhbmQgaGFzIGEgbmV3IHNpZ25hdHVyZS4gUGxlYXNlIGNoZWNrIHRoZSBkb2NzLiIpO2xldCBzPXRoaXMuZWxlbWVudHMsbD0yKm8vKHItdCksYz0yKm8vKG4taSksdT0ocit0KS8oci10KSxoPShuK2kpLyhuLWkpLGY9LShhK28pLyhhLW8pLHA9LTIqYSpvLyhhLW8pO3JldHVybiBzWzBdPWwsc1s0XT0wLHNbOF09dSxzWzEyXT0wLHNbMV09MCxzWzVdPWMsc1s5XT1oLHNbMTNdPTAsc1syXT0wLHNbNl09MCxzWzEwXT1mLHNbMTRdPXAsc1szXT0wLHNbN109MCxzWzExXT0tMSxzWzE1XT0wLHRoaXN9bWFrZU9ydGhvZ3JhcGhpYyh0LHIsbixpLG8sYSl7bGV0IHM9dGhpcy5lbGVtZW50cyxsPTEvKHItdCksYz0xLyhuLWkpLHU9MS8oYS1vKSxoPShyK3QpKmwsZj0obitpKSpjLHA9KGErbykqdTtyZXR1cm4gc1swXT0yKmwsc1s0XT0wLHNbOF09MCxzWzEyXT0taCxzWzFdPTAsc1s1XT0yKmMsc1s5XT0wLHNbMTNdPS1mLHNbMl09MCxzWzZdPTAsc1sxMF09LTIqdSxzWzE0XT0tcCxzWzNdPTAsc1s3XT0wLHNbMTFdPTAsc1sxNV09MSx0aGlzfWVxdWFscyh0KXtsZXQgcj10aGlzLmVsZW1lbnRzLG49dC5lbGVtZW50cztmb3IobGV0IGk9MDtpPDE2O2krKylpZihyW2ldIT09bltpXSlyZXR1cm4hMTtyZXR1cm4hMH1mcm9tQXJyYXkodCxyPTApe2ZvcihsZXQgbj0wO248MTY7bisrKXRoaXMuZWxlbWVudHNbbl09dFtuK3JdO3JldHVybiB0aGlzfXRvQXJyYXkodD1bXSxyPTApe2xldCBuPXRoaXMuZWxlbWVudHM7cmV0dXJuIHRbcl09blswXSx0W3IrMV09blsxXSx0W3IrMl09blsyXSx0W3IrM109blszXSx0W3IrNF09bls0XSx0W3IrNV09bls1XSx0W3IrNl09bls2XSx0W3IrN109bls3XSx0W3IrOF09bls4XSx0W3IrOV09bls5XSx0W3IrMTBdPW5bMTBdLHRbcisxMV09blsxMV0sdFtyKzEyXT1uWzEyXSx0W3IrMTNdPW5bMTNdLHRbcisxNF09blsxNF0sdFtyKzE1XT1uWzE1XSx0fX07TWUucHJvdG90eXBlLmlzTWF0cml4ND0hMDt2YXIgUzM9bmV3IGosaWg9bmV3IE1lLGxmcj1uZXcgaigwLDAsMCksY2ZyPW5ldyBqKDEsMSwxKSxSMD1uZXcgaixfVj1uZXcgaixSbD1uZXcgaix4dWU9bmV3IE1lLGJ1ZT1uZXcgeWksZW09Y2xhc3N7Y29uc3RydWN0b3IodD0wLHI9MCxuPTAsaT1lbS5EZWZhdWx0T3JkZXIpe3RoaXMuX3g9dCx0aGlzLl95PXIsdGhpcy5fej1uLHRoaXMuX29yZGVyPWl9Z2V0IHgoKXtyZXR1cm4gdGhpcy5feH1zZXQgeCh0KXt0aGlzLl94PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB5KCl7cmV0dXJuIHRoaXMuX3l9c2V0IHkodCl7dGhpcy5feT10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgeigpe3JldHVybiB0aGlzLl96fXNldCB6KHQpe3RoaXMuX3o9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IG9yZGVyKCl7cmV0dXJuIHRoaXMuX29yZGVyfXNldCBvcmRlcih0KXt0aGlzLl9vcmRlcj10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1zZXQodCxyLG4saT10aGlzLl9vcmRlcil7cmV0dXJuIHRoaXMuX3g9dCx0aGlzLl95PXIsdGhpcy5fej1uLHRoaXMuX29yZGVyPWksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5feCx0aGlzLl95LHRoaXMuX3osdGhpcy5fb3JkZXIpfWNvcHkodCl7cmV0dXJuIHRoaXMuX3g9dC5feCx0aGlzLl95PXQuX3ksdGhpcy5fej10Ll96LHRoaXMuX29yZGVyPXQuX29yZGVyLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21Sb3RhdGlvbk1hdHJpeCh0LHI9dGhpcy5fb3JkZXIsbj0hMCl7bGV0IGk9dC5lbGVtZW50cyxvPWlbMF0sYT1pWzRdLHM9aVs4XSxsPWlbMV0sYz1pWzVdLHU9aVs5XSxoPWlbMl0sZj1pWzZdLHA9aVsxMF07c3dpdGNoKHIpe2Nhc2UiWFlaIjp0aGlzLl95PU1hdGguYXNpbihabyhzLC0xLDEpKSxNYXRoLmFicyhzKTwuOTk5OTk5OT8odGhpcy5feD1NYXRoLmF0YW4yKC11LHApLHRoaXMuX3o9TWF0aC5hdGFuMigtYSxvKSk6KHRoaXMuX3g9TWF0aC5hdGFuMihmLGMpLHRoaXMuX3o9MCk7YnJlYWs7Y2FzZSJZWFoiOnRoaXMuX3g9TWF0aC5hc2luKC1abyh1LC0xLDEpKSxNYXRoLmFicyh1KTwuOTk5OTk5OT8odGhpcy5feT1NYXRoLmF0YW4yKHMscCksdGhpcy5fej1NYXRoLmF0YW4yKGwsYykpOih0aGlzLl95PU1hdGguYXRhbjIoLWgsbyksdGhpcy5fej0wKTticmVhaztjYXNlIlpYWSI6dGhpcy5feD1NYXRoLmFzaW4oWm8oZiwtMSwxKSksTWF0aC5hYnMoZik8Ljk5OTk5OTk/KHRoaXMuX3k9TWF0aC5hdGFuMigtaCxwKSx0aGlzLl96PU1hdGguYXRhbjIoLWEsYykpOih0aGlzLl95PTAsdGhpcy5fej1NYXRoLmF0YW4yKGwsbykpO2JyZWFrO2Nhc2UiWllYIjp0aGlzLl95PU1hdGguYXNpbigtWm8oaCwtMSwxKSksTWF0aC5hYnMoaCk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMihmLHApLHRoaXMuX3o9TWF0aC5hdGFuMihsLG8pKToodGhpcy5feD0wLHRoaXMuX3o9TWF0aC5hdGFuMigtYSxjKSk7YnJlYWs7Y2FzZSJZWlgiOnRoaXMuX3o9TWF0aC5hc2luKFpvKGwsLTEsMSkpLE1hdGguYWJzKGwpPC45OTk5OTk5Pyh0aGlzLl94PU1hdGguYXRhbjIoLXUsYyksdGhpcy5feT1NYXRoLmF0YW4yKC1oLG8pKToodGhpcy5feD0wLHRoaXMuX3k9TWF0aC5hdGFuMihzLHApKTticmVhaztjYXNlIlhaWSI6dGhpcy5fej1NYXRoLmFzaW4oLVpvKGEsLTEsMSkpLE1hdGguYWJzKGEpPC45OTk5OTk5Pyh0aGlzLl94PU1hdGguYXRhbjIoZixjKSx0aGlzLl95PU1hdGguYXRhbjIocyxvKSk6KHRoaXMuX3g9TWF0aC5hdGFuMigtdSxwKSx0aGlzLl95PTApO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCJUSFJFRS5FdWxlcjogLnNldEZyb21Sb3RhdGlvbk1hdHJpeCgpIGVuY291bnRlcmVkIGFuIHVua25vd24gb3JkZXI6ICIrcil9cmV0dXJuIHRoaXMuX29yZGVyPXIsbj09PSEwJiZ0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tUXVhdGVybmlvbih0LHIsbil7cmV0dXJuIHh1ZS5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbih0KSx0aGlzLnNldEZyb21Sb3RhdGlvbk1hdHJpeCh4dWUscixuKX1zZXRGcm9tVmVjdG9yMyh0LHI9dGhpcy5fb3JkZXIpe3JldHVybiB0aGlzLnNldCh0LngsdC55LHQueixyKX1yZW9yZGVyKHQpe3JldHVybiBidWUuc2V0RnJvbUV1bGVyKHRoaXMpLHRoaXMuc2V0RnJvbVF1YXRlcm5pb24oYnVlLHQpfWVxdWFscyh0KXtyZXR1cm4gdC5feD09PXRoaXMuX3gmJnQuX3k9PT10aGlzLl95JiZ0Ll96PT09dGhpcy5feiYmdC5fb3JkZXI9PT10aGlzLl9vcmRlcn1mcm9tQXJyYXkodCl7cmV0dXJuIHRoaXMuX3g9dFswXSx0aGlzLl95PXRbMV0sdGhpcy5fej10WzJdLHRbM10hPT12b2lkIDAmJih0aGlzLl9vcmRlcj10WzNdKSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc310b0FycmF5KHQ9W10scj0wKXtyZXR1cm4gdFtyXT10aGlzLl94LHRbcisxXT10aGlzLl95LHRbcisyXT10aGlzLl96LHRbciszXT10aGlzLl9vcmRlcix0fXRvVmVjdG9yMyh0KXtyZXR1cm4gdD90LnNldCh0aGlzLl94LHRoaXMuX3ksdGhpcy5feik6bmV3IGoodGhpcy5feCx0aGlzLl95LHRoaXMuX3opfV9vbkNoYW5nZSh0KXtyZXR1cm4gdGhpcy5fb25DaGFuZ2VDYWxsYmFjaz10LHRoaXN9X29uQ2hhbmdlQ2FsbGJhY2soKXt9fTtlbS5wcm90b3R5cGUuaXNFdWxlcj0hMDtlbS5EZWZhdWx0T3JkZXI9IlhZWiI7ZW0uUm90YXRpb25PcmRlcnM9WyJYWVoiLCJZWlgiLCJaWFkiLCJYWlkiLCJZWFoiLCJaWVgiXTt2YXIgWDM9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLm1hc2s9MX1zZXQodCl7dGhpcy5tYXNrPSgxPDx0fDApPj4+MH1lbmFibGUodCl7dGhpcy5tYXNrfD0xPDx0fDB9ZW5hYmxlQWxsKCl7dGhpcy5tYXNrPS0xfXRvZ2dsZSh0KXt0aGlzLm1hc2tePTE8PHR8MH1kaXNhYmxlKHQpe3RoaXMubWFzayY9figxPDx0fDApfWRpc2FibGVBbGwoKXt0aGlzLm1hc2s9MH10ZXN0KHQpe3JldHVybih0aGlzLm1hc2smdC5tYXNrKSE9PTB9aXNFbmFibGVkKHQpe3JldHVybih0aGlzLm1hc2smKDE8PHR8MCkpIT09MH19LHVmcj0wLHd1ZT1uZXcgaixNMz1uZXcgeWksR2Q9bmV3IE1lLHlWPW5ldyBqLGtQPW5ldyBqLGhmcj1uZXcgaixmZnI9bmV3IHlpLFN1ZT1uZXcgaigxLDAsMCksTXVlPW5ldyBqKDAsMSwwKSxFdWU9bmV3IGooMCwwLDEpLHBmcj17dHlwZToiYWRkZWQifSxUdWU9e3R5cGU6InJlbW92ZWQifSxvcj1jbGFzcyBleHRlbmRzIHFze2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTp1ZnIrK30pLHRoaXMudXVpZD1EbCgpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9Ik9iamVjdDNEIix0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49W10sdGhpcy51cD1vci5EZWZhdWx0VXAuY2xvbmUoKTtsZXQgdD1uZXcgaixyPW5ldyBlbSxuPW5ldyB5aSxpPW5ldyBqKDEsMSwxKTtmdW5jdGlvbiBvKCl7bi5zZXRGcm9tRXVsZXIociwhMSl9ZnVuY3Rpb24gYSgpe3Iuc2V0RnJvbVF1YXRlcm5pb24obix2b2lkIDAsITEpfXIuX29uQ2hhbmdlKG8pLG4uX29uQ2hhbmdlKGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse3Bvc2l0aW9uOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTp0fSxyb3RhdGlvbjp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6cn0scXVhdGVybmlvbjp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6bn0sc2NhbGU6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOml9LG1vZGVsVmlld01hdHJpeDp7dmFsdWU6bmV3IE1lfSxub3JtYWxNYXRyaXg6e3ZhbHVlOm5ldyBraX19KSx0aGlzLm1hdHJpeD1uZXcgTWUsdGhpcy5tYXRyaXhXb3JsZD1uZXcgTWUsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPW9yLkRlZmF1bHRNYXRyaXhBdXRvVXBkYXRlLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMSx0aGlzLmxheWVycz1uZXcgWDMsdGhpcy52aXNpYmxlPSEwLHRoaXMuY2FzdFNoYWRvdz0hMSx0aGlzLnJlY2VpdmVTaGFkb3c9ITEsdGhpcy5mcnVzdHVtQ3VsbGVkPSEwLHRoaXMucmVuZGVyT3JkZXI9MCx0aGlzLmFuaW1hdGlvbnM9W10sdGhpcy51c2VyRGF0YT17fX1vbkJlZm9yZVJlbmRlcigpe31vbkFmdGVyUmVuZGVyKCl7fWFwcGx5TWF0cml4NCh0KXt0aGlzLm1hdHJpeEF1dG9VcGRhdGUmJnRoaXMudXBkYXRlTWF0cml4KCksdGhpcy5tYXRyaXgucHJlbXVsdGlwbHkodCksdGhpcy5tYXRyaXguZGVjb21wb3NlKHRoaXMucG9zaXRpb24sdGhpcy5xdWF0ZXJuaW9uLHRoaXMuc2NhbGUpfWFwcGx5UXVhdGVybmlvbih0KXtyZXR1cm4gdGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KHQpLHRoaXN9c2V0Um90YXRpb25Gcm9tQXhpc0FuZ2xlKHQscil7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21BeGlzQW5nbGUodCxyKX1zZXRSb3RhdGlvbkZyb21FdWxlcih0KXt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbUV1bGVyKHQsITApfXNldFJvdGF0aW9uRnJvbU1hdHJpeCh0KXt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbVJvdGF0aW9uTWF0cml4KHQpfXNldFJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCl7dGhpcy5xdWF0ZXJuaW9uLmNvcHkodCl9cm90YXRlT25BeGlzKHQscil7cmV0dXJuIE0zLnNldEZyb21BeGlzQW5nbGUodCxyKSx0aGlzLnF1YXRlcm5pb24ubXVsdGlwbHkoTTMpLHRoaXN9cm90YXRlT25Xb3JsZEF4aXModCxyKXtyZXR1cm4gTTMuc2V0RnJvbUF4aXNBbmdsZSh0LHIpLHRoaXMucXVhdGVybmlvbi5wcmVtdWx0aXBseShNMyksdGhpc31yb3RhdGVYKHQpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyhTdWUsdCl9cm90YXRlWSh0KXtyZXR1cm4gdGhpcy5yb3RhdGVPbkF4aXMoTXVlLHQpfXJvdGF0ZVoodCl7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKEV1ZSx0KX10cmFuc2xhdGVPbkF4aXModCxyKXtyZXR1cm4gd3VlLmNvcHkodCkuYXBwbHlRdWF0ZXJuaW9uKHRoaXMucXVhdGVybmlvbiksdGhpcy5wb3NpdGlvbi5hZGQod3VlLm11bHRpcGx5U2NhbGFyKHIpKSx0aGlzfXRyYW5zbGF0ZVgodCl7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKFN1ZSx0KX10cmFuc2xhdGVZKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyhNdWUsdCl9dHJhbnNsYXRlWih0KXtyZXR1cm4gdGhpcy50cmFuc2xhdGVPbkF4aXMoRXVlLHQpfWxvY2FsVG9Xb3JsZCh0KXtyZXR1cm4gdC5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCl9d29ybGRUb0xvY2FsKHQpe3JldHVybiB0LmFwcGx5TWF0cml4NChHZC5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpKX1sb29rQXQodCxyLG4pe3QuaXNWZWN0b3IzP3lWLmNvcHkodCk6eVYuc2V0KHQscixuKTtsZXQgaT10aGlzLnBhcmVudDt0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSxrUC5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCksdGhpcy5pc0NhbWVyYXx8dGhpcy5pc0xpZ2h0P0dkLmxvb2tBdChrUCx5Vix0aGlzLnVwKTpHZC5sb29rQXQoeVYsa1AsdGhpcy51cCksdGhpcy5xdWF0ZXJuaW9uLnNldEZyb21Sb3RhdGlvbk1hdHJpeChHZCksaSYmKEdkLmV4dHJhY3RSb3RhdGlvbihpLm1hdHJpeFdvcmxkKSxNMy5zZXRGcm9tUm90YXRpb25NYXRyaXgoR2QpLHRoaXMucXVhdGVybmlvbi5wcmVtdWx0aXBseShNMy5pbnZlcnQoKSkpfWFkZCh0KXtpZihhcmd1bWVudHMubGVuZ3RoPjEpe2ZvcihsZXQgcj0wO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspdGhpcy5hZGQoYXJndW1lbnRzW3JdKTtyZXR1cm4gdGhpc31yZXR1cm4gdD09PXRoaXM/KGNvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdDNELmFkZDogb2JqZWN0IGNhbid0IGJlIGFkZGVkIGFzIGEgY2hpbGQgb2YgaXRzZWxmLiIsdCksdGhpcyk6KHQmJnQuaXNPYmplY3QzRD8odC5wYXJlbnQhPT1udWxsJiZ0LnBhcmVudC5yZW1vdmUodCksdC5wYXJlbnQ9dGhpcyx0aGlzLmNoaWxkcmVuLnB1c2godCksdC5kaXNwYXRjaEV2ZW50KHBmcikpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdDNELmFkZDogb2JqZWN0IG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5PYmplY3QzRC4iLHQpLHRoaXMpfXJlbW92ZSh0KXtpZihhcmd1bWVudHMubGVuZ3RoPjEpe2ZvcihsZXQgbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspdGhpcy5yZW1vdmUoYXJndW1lbnRzW25dKTtyZXR1cm4gdGhpc31sZXQgcj10aGlzLmNoaWxkcmVuLmluZGV4T2YodCk7cmV0dXJuIHIhPT0tMSYmKHQucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbi5zcGxpY2UociwxKSx0LmRpc3BhdGNoRXZlbnQoVHVlKSksdGhpc31yZW1vdmVGcm9tUGFyZW50KCl7bGV0IHQ9dGhpcy5wYXJlbnQ7cmV0dXJuIHQhPT1udWxsJiZ0LnJlbW92ZSh0aGlzKSx0aGlzfWNsZWFyKCl7Zm9yKGxldCB0PTA7dDx0aGlzLmNoaWxkcmVuLmxlbmd0aDt0Kyspe2xldCByPXRoaXMuY2hpbGRyZW5bdF07ci5wYXJlbnQ9bnVsbCxyLmRpc3BhdGNoRXZlbnQoVHVlKX1yZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGg9MCx0aGlzfWF0dGFjaCh0KXtyZXR1cm4gdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksR2QuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKSx0LnBhcmVudCE9PW51bGwmJih0LnBhcmVudC51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksR2QubXVsdGlwbHkodC5wYXJlbnQubWF0cml4V29ybGQpKSx0LmFwcGx5TWF0cml4NChHZCksdGhpcy5hZGQodCksdC51cGRhdGVXb3JsZE1hdHJpeCghMSwhMCksdGhpc31nZXRPYmplY3RCeUlkKHQpe3JldHVybiB0aGlzLmdldE9iamVjdEJ5UHJvcGVydHkoImlkIix0KX1nZXRPYmplY3RCeU5hbWUodCl7cmV0dXJuIHRoaXMuZ2V0T2JqZWN0QnlQcm9wZXJ0eSgibmFtZSIsdCl9Z2V0T2JqZWN0QnlQcm9wZXJ0eSh0LHIpe2lmKHRoaXNbdF09PT1yKXJldHVybiB0aGlzO2ZvcihsZXQgbj0wLGk9dGhpcy5jaGlsZHJlbi5sZW5ndGg7bjxpO24rKyl7bGV0IGE9dGhpcy5jaGlsZHJlbltuXS5nZXRPYmplY3RCeVByb3BlcnR5KHQscik7aWYoYSE9PXZvaWQgMClyZXR1cm4gYX19Z2V0V29ybGRQb3NpdGlvbih0KXtyZXR1cm4gdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdC5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCl9Z2V0V29ybGRRdWF0ZXJuaW9uKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShrUCx0LGhmciksdH1nZXRXb3JsZFNjYWxlKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShrUCxmZnIsdCksdH1nZXRXb3JsZERpcmVjdGlvbih0KXt0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKTtsZXQgcj10aGlzLm1hdHJpeFdvcmxkLmVsZW1lbnRzO3JldHVybiB0LnNldChyWzhdLHJbOV0sclsxMF0pLm5vcm1hbGl6ZSgpfXJheWNhc3QoKXt9dHJhdmVyc2UodCl7dCh0aGlzKTtsZXQgcj10aGlzLmNoaWxkcmVuO2ZvcihsZXQgbj0wLGk9ci5sZW5ndGg7bjxpO24rKylyW25dLnRyYXZlcnNlKHQpfXRyYXZlcnNlVmlzaWJsZSh0KXtpZih0aGlzLnZpc2libGU9PT0hMSlyZXR1cm47dCh0aGlzKTtsZXQgcj10aGlzLmNoaWxkcmVuO2ZvcihsZXQgbj0wLGk9ci5sZW5ndGg7bjxpO24rKylyW25dLnRyYXZlcnNlVmlzaWJsZSh0KX10cmF2ZXJzZUFuY2VzdG9ycyh0KXtsZXQgcj10aGlzLnBhcmVudDtyIT09bnVsbCYmKHQociksci50cmF2ZXJzZUFuY2VzdG9ycyh0KSl9dXBkYXRlTWF0cml4KCl7dGhpcy5tYXRyaXguY29tcG9zZSh0aGlzLnBvc2l0aW9uLHRoaXMucXVhdGVybmlvbix0aGlzLnNjYWxlKSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9dXBkYXRlTWF0cml4V29ybGQodCl7dGhpcy5tYXRyaXhBdXRvVXBkYXRlJiZ0aGlzLnVwZGF0ZU1hdHJpeCgpLCh0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGV8fHQpJiYodGhpcy5wYXJlbnQ9PT1udWxsP3RoaXMubWF0cml4V29ybGQuY29weSh0aGlzLm1hdHJpeCk6dGhpcy5tYXRyaXhXb3JsZC5tdWx0aXBseU1hdHJpY2VzKHRoaXMucGFyZW50Lm1hdHJpeFdvcmxkLHRoaXMubWF0cml4KSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITEsdD0hMCk7bGV0IHI9dGhpcy5jaGlsZHJlbjtmb3IobGV0IG49MCxpPXIubGVuZ3RoO248aTtuKyspcltuXS51cGRhdGVNYXRyaXhXb3JsZCh0KX11cGRhdGVXb3JsZE1hdHJpeCh0LHIpe2xldCBuPXRoaXMucGFyZW50O2lmKHQ9PT0hMCYmbiE9PW51bGwmJm4udXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHRoaXMubWF0cml4QXV0b1VwZGF0ZSYmdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLnBhcmVudD09PW51bGw/dGhpcy5tYXRyaXhXb3JsZC5jb3B5KHRoaXMubWF0cml4KTp0aGlzLm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXModGhpcy5wYXJlbnQubWF0cml4V29ybGQsdGhpcy5tYXRyaXgpLHI9PT0hMCl7bGV0IGk9dGhpcy5jaGlsZHJlbjtmb3IobGV0IG89MCxhPWkubGVuZ3RoO288YTtvKyspaVtvXS51cGRhdGVXb3JsZE1hdHJpeCghMSwhMCl9fXRvSlNPTih0KXtsZXQgcj10PT09dm9pZCAwfHx0eXBlb2YgdD09InN0cmluZyIsbj17fTtyJiYodD17Z2VvbWV0cmllczp7fSxtYXRlcmlhbHM6e30sdGV4dHVyZXM6e30saW1hZ2VzOnt9LHNoYXBlczp7fSxza2VsZXRvbnM6e30sYW5pbWF0aW9uczp7fX0sbi5tZXRhZGF0YT17dmVyc2lvbjo0LjUsdHlwZToiT2JqZWN0IixnZW5lcmF0b3I6Ik9iamVjdDNELnRvSlNPTiJ9KTtsZXQgaT17fTtpLnV1aWQ9dGhpcy51dWlkLGkudHlwZT10aGlzLnR5cGUsdGhpcy5uYW1lIT09IiImJihpLm5hbWU9dGhpcy5uYW1lKSx0aGlzLmNhc3RTaGFkb3c9PT0hMCYmKGkuY2FzdFNoYWRvdz0hMCksdGhpcy5yZWNlaXZlU2hhZG93PT09ITAmJihpLnJlY2VpdmVTaGFkb3c9ITApLHRoaXMudmlzaWJsZT09PSExJiYoaS52aXNpYmxlPSExKSx0aGlzLmZydXN0dW1DdWxsZWQ9PT0hMSYmKGkuZnJ1c3R1bUN1bGxlZD0hMSksdGhpcy5yZW5kZXJPcmRlciE9PTAmJihpLnJlbmRlck9yZGVyPXRoaXMucmVuZGVyT3JkZXIpLEpTT04uc3RyaW5naWZ5KHRoaXMudXNlckRhdGEpIT09Int9IiYmKGkudXNlckRhdGE9dGhpcy51c2VyRGF0YSksaS5sYXllcnM9dGhpcy5sYXllcnMubWFzayxpLm1hdHJpeD10aGlzLm1hdHJpeC50b0FycmF5KCksdGhpcy5tYXRyaXhBdXRvVXBkYXRlPT09ITEmJihpLm1hdHJpeEF1dG9VcGRhdGU9ITEpLHRoaXMuaXNJbnN0YW5jZWRNZXNoJiYoaS50eXBlPSJJbnN0YW5jZWRNZXNoIixpLmNvdW50PXRoaXMuY291bnQsaS5pbnN0YW5jZU1hdHJpeD10aGlzLmluc3RhbmNlTWF0cml4LnRvSlNPTigpLHRoaXMuaW5zdGFuY2VDb2xvciE9PW51bGwmJihpLmluc3RhbmNlQ29sb3I9dGhpcy5pbnN0YW5jZUNvbG9yLnRvSlNPTigpKSk7ZnVuY3Rpb24gbyhzLGwpe3JldHVybiBzW2wudXVpZF09PT12b2lkIDAmJihzW2wudXVpZF09bC50b0pTT04odCkpLGwudXVpZH1pZih0aGlzLmlzU2NlbmUpdGhpcy5iYWNrZ3JvdW5kJiYodGhpcy5iYWNrZ3JvdW5kLmlzQ29sb3I/aS5iYWNrZ3JvdW5kPXRoaXMuYmFja2dyb3VuZC50b0pTT04oKTp0aGlzLmJhY2tncm91bmQuaXNUZXh0dXJlJiYoaS5iYWNrZ3JvdW5kPXRoaXMuYmFja2dyb3VuZC50b0pTT04odCkudXVpZCkpLHRoaXMuZW52aXJvbm1lbnQmJnRoaXMuZW52aXJvbm1lbnQuaXNUZXh0dXJlJiYoaS5lbnZpcm9ubWVudD10aGlzLmVudmlyb25tZW50LnRvSlNPTih0KS51dWlkKTtlbHNlIGlmKHRoaXMuaXNNZXNofHx0aGlzLmlzTGluZXx8dGhpcy5pc1BvaW50cyl7aS5nZW9tZXRyeT1vKHQuZ2VvbWV0cmllcyx0aGlzLmdlb21ldHJ5KTtsZXQgcz10aGlzLmdlb21ldHJ5LnBhcmFtZXRlcnM7aWYocyE9PXZvaWQgMCYmcy5zaGFwZXMhPT12b2lkIDApe2xldCBsPXMuc2hhcGVzO2lmKEFycmF5LmlzQXJyYXkobCkpZm9yKGxldCBjPTAsdT1sLmxlbmd0aDtjPHU7YysrKXtsZXQgaD1sW2NdO28odC5zaGFwZXMsaCl9ZWxzZSBvKHQuc2hhcGVzLGwpfX1pZih0aGlzLmlzU2tpbm5lZE1lc2gmJihpLmJpbmRNb2RlPXRoaXMuYmluZE1vZGUsaS5iaW5kTWF0cml4PXRoaXMuYmluZE1hdHJpeC50b0FycmF5KCksdGhpcy5za2VsZXRvbiE9PXZvaWQgMCYmKG8odC5za2VsZXRvbnMsdGhpcy5za2VsZXRvbiksaS5za2VsZXRvbj10aGlzLnNrZWxldG9uLnV1aWQpKSx0aGlzLm1hdGVyaWFsIT09dm9pZCAwKWlmKEFycmF5LmlzQXJyYXkodGhpcy5tYXRlcmlhbCkpe2xldCBzPVtdO2ZvcihsZXQgbD0wLGM9dGhpcy5tYXRlcmlhbC5sZW5ndGg7bDxjO2wrKylzLnB1c2gobyh0Lm1hdGVyaWFscyx0aGlzLm1hdGVyaWFsW2xdKSk7aS5tYXRlcmlhbD1zfWVsc2UgaS5tYXRlcmlhbD1vKHQubWF0ZXJpYWxzLHRoaXMubWF0ZXJpYWwpO2lmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoPjApe2kuY2hpbGRyZW49W107Zm9yKGxldCBzPTA7czx0aGlzLmNoaWxkcmVuLmxlbmd0aDtzKyspaS5jaGlsZHJlbi5wdXNoKHRoaXMuY2hpbGRyZW5bc10udG9KU09OKHQpLm9iamVjdCl9aWYodGhpcy5hbmltYXRpb25zLmxlbmd0aD4wKXtpLmFuaW1hdGlvbnM9W107Zm9yKGxldCBzPTA7czx0aGlzLmFuaW1hdGlvbnMubGVuZ3RoO3MrKyl7bGV0IGw9dGhpcy5hbmltYXRpb25zW3NdO2kuYW5pbWF0aW9ucy5wdXNoKG8odC5hbmltYXRpb25zLGwpKX19aWYocil7bGV0IHM9YSh0Lmdlb21ldHJpZXMpLGw9YSh0Lm1hdGVyaWFscyksYz1hKHQudGV4dHVyZXMpLHU9YSh0LmltYWdlcyksaD1hKHQuc2hhcGVzKSxmPWEodC5za2VsZXRvbnMpLHA9YSh0LmFuaW1hdGlvbnMpO3MubGVuZ3RoPjAmJihuLmdlb21ldHJpZXM9cyksbC5sZW5ndGg+MCYmKG4ubWF0ZXJpYWxzPWwpLGMubGVuZ3RoPjAmJihuLnRleHR1cmVzPWMpLHUubGVuZ3RoPjAmJihuLmltYWdlcz11KSxoLmxlbmd0aD4wJiYobi5zaGFwZXM9aCksZi5sZW5ndGg+MCYmKG4uc2tlbGV0b25zPWYpLHAubGVuZ3RoPjAmJihuLmFuaW1hdGlvbnM9cCl9cmV0dXJuIG4ub2JqZWN0PWksbjtmdW5jdGlvbiBhKHMpe2xldCBsPVtdO2ZvcihsZXQgYyBpbiBzKXtsZXQgdT1zW2NdO2RlbGV0ZSB1Lm1ldGFkYXRhLGwucHVzaCh1KX1yZXR1cm4gbH19Y2xvbmUodCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzLHQpfWNvcHkodCxyPSEwKXtpZih0aGlzLm5hbWU9dC5uYW1lLHRoaXMudXAuY29weSh0LnVwKSx0aGlzLnBvc2l0aW9uLmNvcHkodC5wb3NpdGlvbiksdGhpcy5yb3RhdGlvbi5vcmRlcj10LnJvdGF0aW9uLm9yZGVyLHRoaXMucXVhdGVybmlvbi5jb3B5KHQucXVhdGVybmlvbiksdGhpcy5zY2FsZS5jb3B5KHQuc2NhbGUpLHRoaXMubWF0cml4LmNvcHkodC5tYXRyaXgpLHRoaXMubWF0cml4V29ybGQuY29weSh0Lm1hdHJpeFdvcmxkKSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT10Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGUsdGhpcy5sYXllcnMubWFzaz10LmxheWVycy5tYXNrLHRoaXMudmlzaWJsZT10LnZpc2libGUsdGhpcy5jYXN0U2hhZG93PXQuY2FzdFNoYWRvdyx0aGlzLnJlY2VpdmVTaGFkb3c9dC5yZWNlaXZlU2hhZG93LHRoaXMuZnJ1c3R1bUN1bGxlZD10LmZydXN0dW1DdWxsZWQsdGhpcy5yZW5kZXJPcmRlcj10LnJlbmRlck9yZGVyLHRoaXMudXNlckRhdGE9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0LnVzZXJEYXRhKSkscj09PSEwKWZvcihsZXQgbj0wO248dC5jaGlsZHJlbi5sZW5ndGg7bisrKXtsZXQgaT10LmNoaWxkcmVuW25dO3RoaXMuYWRkKGkuY2xvbmUoKSl9cmV0dXJuIHRoaXN9fTtvci5EZWZhdWx0VXA9bmV3IGooMCwxLDApO29yLkRlZmF1bHRNYXRyaXhBdXRvVXBkYXRlPSEwO29yLnByb3RvdHlwZS5pc09iamVjdDNEPSEwO3ZhciBvaD1uZXcgaixXZD1uZXcgaix0dXQ9bmV3IGosWWQ9bmV3IGosRTM9bmV3IGosVDM9bmV3IGosQ3VlPW5ldyBqLGV1dD1uZXcgaixydXQ9bmV3IGosbnV0PW5ldyBqLG9pPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IGoscj1uZXcgaixuPW5ldyBqKXt0aGlzLmE9dCx0aGlzLmI9cix0aGlzLmM9bn1zdGF0aWMgZ2V0Tm9ybWFsKHQscixuLGkpe2kuc3ViVmVjdG9ycyhuLHIpLG9oLnN1YlZlY3RvcnModCxyKSxpLmNyb3NzKG9oKTtsZXQgbz1pLmxlbmd0aFNxKCk7cmV0dXJuIG8+MD9pLm11bHRpcGx5U2NhbGFyKDEvTWF0aC5zcXJ0KG8pKTppLnNldCgwLDAsMCl9c3RhdGljIGdldEJhcnljb29yZCh0LHIsbixpLG8pe29oLnN1YlZlY3RvcnMoaSxyKSxXZC5zdWJWZWN0b3JzKG4sciksdHV0LnN1YlZlY3RvcnModCxyKTtsZXQgYT1vaC5kb3Qob2gpLHM9b2guZG90KFdkKSxsPW9oLmRvdCh0dXQpLGM9V2QuZG90KFdkKSx1PVdkLmRvdCh0dXQpLGg9YSpjLXMqcztpZihoPT09MClyZXR1cm4gby5zZXQoLTIsLTEsLTEpO2xldCBmPTEvaCxwPShjKmwtcyp1KSpmLGQ9KGEqdS1zKmwpKmY7cmV0dXJuIG8uc2V0KDEtcC1kLGQscCl9c3RhdGljIGNvbnRhaW5zUG9pbnQodCxyLG4saSl7cmV0dXJuIHRoaXMuZ2V0QmFyeWNvb3JkKHQscixuLGksWWQpLFlkLng+PTAmJllkLnk+PTAmJllkLngrWWQueTw9MX1zdGF0aWMgZ2V0VVYodCxyLG4saSxvLGEscyxsKXtyZXR1cm4gdGhpcy5nZXRCYXJ5Y29vcmQodCxyLG4saSxZZCksbC5zZXQoMCwwKSxsLmFkZFNjYWxlZFZlY3RvcihvLFlkLngpLGwuYWRkU2NhbGVkVmVjdG9yKGEsWWQueSksbC5hZGRTY2FsZWRWZWN0b3IocyxZZC56KSxsfXN0YXRpYyBpc0Zyb250RmFjaW5nKHQscixuLGkpe3JldHVybiBvaC5zdWJWZWN0b3JzKG4sciksV2Quc3ViVmVjdG9ycyh0LHIpLG9oLmNyb3NzKFdkKS5kb3QoaSk8MH1zZXQodCxyLG4pe3JldHVybiB0aGlzLmEuY29weSh0KSx0aGlzLmIuY29weShyKSx0aGlzLmMuY29weShuKSx0aGlzfXNldEZyb21Qb2ludHNBbmRJbmRpY2VzKHQscixuLGkpe3JldHVybiB0aGlzLmEuY29weSh0W3JdKSx0aGlzLmIuY29weSh0W25dKSx0aGlzLmMuY29weSh0W2ldKSx0aGlzfXNldEZyb21BdHRyaWJ1dGVBbmRJbmRpY2VzKHQscixuLGkpe3JldHVybiB0aGlzLmEuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LHIpLHRoaXMuYi5mcm9tQnVmZmVyQXR0cmlidXRlKHQsbiksdGhpcy5jLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxpKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLmEuY29weSh0LmEpLHRoaXMuYi5jb3B5KHQuYiksdGhpcy5jLmNvcHkodC5jKSx0aGlzfWdldEFyZWEoKXtyZXR1cm4gb2guc3ViVmVjdG9ycyh0aGlzLmMsdGhpcy5iKSxXZC5zdWJWZWN0b3JzKHRoaXMuYSx0aGlzLmIpLG9oLmNyb3NzKFdkKS5sZW5ndGgoKSouNX1nZXRNaWRwb2ludCh0KXtyZXR1cm4gdC5hZGRWZWN0b3JzKHRoaXMuYSx0aGlzLmIpLmFkZCh0aGlzLmMpLm11bHRpcGx5U2NhbGFyKDEvMyl9Z2V0Tm9ybWFsKHQpe3JldHVybiBvaS5nZXROb3JtYWwodGhpcy5hLHRoaXMuYix0aGlzLmMsdCl9Z2V0UGxhbmUodCl7cmV0dXJuIHQuc2V0RnJvbUNvcGxhbmFyUG9pbnRzKHRoaXMuYSx0aGlzLmIsdGhpcy5jKX1nZXRCYXJ5Y29vcmQodCxyKXtyZXR1cm4gb2kuZ2V0QmFyeWNvb3JkKHQsdGhpcy5hLHRoaXMuYix0aGlzLmMscil9Z2V0VVYodCxyLG4saSxvKXtyZXR1cm4gb2kuZ2V0VVYodCx0aGlzLmEsdGhpcy5iLHRoaXMuYyxyLG4saSxvKX1jb250YWluc1BvaW50KHQpe3JldHVybiBvaS5jb250YWluc1BvaW50KHQsdGhpcy5hLHRoaXMuYix0aGlzLmMpfWlzRnJvbnRGYWNpbmcodCl7cmV0dXJuIG9pLmlzRnJvbnRGYWNpbmcodGhpcy5hLHRoaXMuYix0aGlzLmMsdCl9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzVHJpYW5nbGUodGhpcyl9Y2xvc2VzdFBvaW50VG9Qb2ludCh0LHIpe2xldCBuPXRoaXMuYSxpPXRoaXMuYixvPXRoaXMuYyxhLHM7RTMuc3ViVmVjdG9ycyhpLG4pLFQzLnN1YlZlY3RvcnMobyxuKSxldXQuc3ViVmVjdG9ycyh0LG4pO2xldCBsPUUzLmRvdChldXQpLGM9VDMuZG90KGV1dCk7aWYobDw9MCYmYzw9MClyZXR1cm4gci5jb3B5KG4pO3J1dC5zdWJWZWN0b3JzKHQsaSk7bGV0IHU9RTMuZG90KHJ1dCksaD1UMy5kb3QocnV0KTtpZih1Pj0wJiZoPD11KXJldHVybiByLmNvcHkoaSk7bGV0IGY9bCpoLXUqYztpZihmPD0wJiZsPj0wJiZ1PD0wKXJldHVybiBhPWwvKGwtdSksci5jb3B5KG4pLmFkZFNjYWxlZFZlY3RvcihFMyxhKTtudXQuc3ViVmVjdG9ycyh0LG8pO2xldCBwPUUzLmRvdChudXQpLGQ9VDMuZG90KG51dCk7aWYoZD49MCYmcDw9ZClyZXR1cm4gci5jb3B5KG8pO2xldCBnPXAqYy1sKmQ7aWYoZzw9MCYmYz49MCYmZDw9MClyZXR1cm4gcz1jLyhjLWQpLHIuY29weShuKS5hZGRTY2FsZWRWZWN0b3IoVDMscyk7bGV0IF89dSpkLXAqaDtpZihfPD0wJiZoLXU+PTAmJnAtZD49MClyZXR1cm4gQ3VlLnN1YlZlY3RvcnMobyxpKSxzPShoLXUpLyhoLXUrKHAtZCkpLHIuY29weShpKS5hZGRTY2FsZWRWZWN0b3IoQ3VlLHMpO2xldCB5PTEvKF8rZytmKTtyZXR1cm4gYT1nKnkscz1mKnksci5jb3B5KG4pLmFkZFNjYWxlZFZlY3RvcihFMyxhKS5hZGRTY2FsZWRWZWN0b3IoVDMscyl9ZXF1YWxzKHQpe3JldHVybiB0LmEuZXF1YWxzKHRoaXMuYSkmJnQuYi5lcXVhbHModGhpcy5iKSYmdC5jLmVxdWFscyh0aGlzLmMpfX0sZGZyPTAscWk9Y2xhc3MgZXh0ZW5kcyBxc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6ZGZyKyt9KSx0aGlzLnV1aWQ9RGwoKSx0aGlzLm5hbWU9IiIsdGhpcy50eXBlPSJNYXRlcmlhbCIsdGhpcy5mb2c9ITAsdGhpcy5ibGVuZGluZz1WMyx0aGlzLnNpZGU9TDEsdGhpcy52ZXJ0ZXhDb2xvcnM9ITEsdGhpcy5vcGFjaXR5PTEsdGhpcy50cmFuc3BhcmVudD0hMSx0aGlzLmJsZW5kU3JjPVBodCx0aGlzLmJsZW5kRHN0PUlodCx0aGlzLmJsZW5kRXF1YXRpb249RTEsdGhpcy5ibGVuZFNyY0FscGhhPW51bGwsdGhpcy5ibGVuZERzdEFscGhhPW51bGwsdGhpcy5ibGVuZEVxdWF0aW9uQWxwaGE9bnVsbCx0aGlzLmRlcHRoRnVuYz1pVSx0aGlzLmRlcHRoVGVzdD0hMCx0aGlzLmRlcHRoV3JpdGU9ITAsdGhpcy5zdGVuY2lsV3JpdGVNYXNrPTI1NSx0aGlzLnN0ZW5jaWxGdW5jPU9mZSx0aGlzLnN0ZW5jaWxSZWY9MCx0aGlzLnN0ZW5jaWxGdW5jTWFzaz0yNTUsdGhpcy5zdGVuY2lsRmFpbD1uVSx0aGlzLnN0ZW5jaWxaRmFpbD1uVSx0aGlzLnN0ZW5jaWxaUGFzcz1uVSx0aGlzLnN0ZW5jaWxXcml0ZT0hMSx0aGlzLmNsaXBwaW5nUGxhbmVzPW51bGwsdGhpcy5jbGlwSW50ZXJzZWN0aW9uPSExLHRoaXMuY2xpcFNoYWRvd3M9ITEsdGhpcy5zaGFkb3dTaWRlPW51bGwsdGhpcy5jb2xvcldyaXRlPSEwLHRoaXMuYWxwaGFXcml0ZT0hMCx0aGlzLnByZWNpc2lvbj1udWxsLHRoaXMucG9seWdvbk9mZnNldD0hMSx0aGlzLnBvbHlnb25PZmZzZXRGYWN0b3I9MCx0aGlzLnBvbHlnb25PZmZzZXRVbml0cz0wLHRoaXMuZGl0aGVyaW5nPSExLHRoaXMuYWxwaGFUb0NvdmVyYWdlPSExLHRoaXMucHJlbXVsdGlwbGllZEFscGhhPSExLHRoaXMudmlzaWJsZT0hMCx0aGlzLnRvbmVNYXBwZWQ9ITAsdGhpcy51c2VyRGF0YT17fSx0aGlzLnZlcnNpb249MCx0aGlzLl9hbHBoYVRlc3Q9MH1nZXQgYWxwaGFUZXN0KCl7cmV0dXJuIHRoaXMuX2FscGhhVGVzdH1zZXQgYWxwaGFUZXN0KHQpe3RoaXMuX2FscGhhVGVzdD4wIT10PjAmJnRoaXMudmVyc2lvbisrLHRoaXMuX2FscGhhVGVzdD10fW9uQnVpbGQoKXt9b25CZWZvcmVSZW5kZXIoKXt9b25CZWZvcmVDb21waWxlKCl7fWN1c3RvbVByb2dyYW1DYWNoZUtleSgpe3JldHVybiB0aGlzLm9uQmVmb3JlQ29tcGlsZS50b1N0cmluZygpfXNldFZhbHVlcyh0KXtpZih0IT09dm9pZCAwKWZvcihsZXQgciBpbiB0KXtsZXQgbj10W3JdO2lmKG49PT12b2lkIDApe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6ICciK3IrIicgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZC4iKTtjb250aW51ZX1pZihyPT09InNoYWRpbmciKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKSx0aGlzLmZsYXRTaGFkaW5nPW49PT1BaHQ7Y29udGludWV9bGV0IGk9dGhpc1tyXTtpZihpPT09dm9pZCAwKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6ICciK3IrIicgaXMgbm90IGEgcHJvcGVydHkgb2YgdGhpcyBtYXRlcmlhbC4iKTtjb250aW51ZX1pJiZpLmlzQ29sb3I/aS5zZXQobik6aSYmaS5pc1ZlY3RvcjMmJm4mJm4uaXNWZWN0b3IzP2kuY29weShuKTp0aGlzW3JdPW59fXRvSlNPTih0KXtsZXQgcj10PT09dm9pZCAwfHx0eXBlb2YgdD09InN0cmluZyI7ciYmKHQ9e3RleHR1cmVzOnt9LGltYWdlczp7fX0pO2xldCBuPXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiTWF0ZXJpYWwiLGdlbmVyYXRvcjoiTWF0ZXJpYWwudG9KU09OIn19O24udXVpZD10aGlzLnV1aWQsbi50eXBlPXRoaXMudHlwZSx0aGlzLm5hbWUhPT0iIiYmKG4ubmFtZT10aGlzLm5hbWUpLHRoaXMuY29sb3ImJnRoaXMuY29sb3IuaXNDb2xvciYmKG4uY29sb3I9dGhpcy5jb2xvci5nZXRIZXgoKSksdGhpcy5yb3VnaG5lc3MhPT12b2lkIDAmJihuLnJvdWdobmVzcz10aGlzLnJvdWdobmVzcyksdGhpcy5tZXRhbG5lc3MhPT12b2lkIDAmJihuLm1ldGFsbmVzcz10aGlzLm1ldGFsbmVzcyksdGhpcy5zaGVlbiE9PXZvaWQgMCYmKG4uc2hlZW49dGhpcy5zaGVlbiksdGhpcy5zaGVlbkNvbG9yJiZ0aGlzLnNoZWVuQ29sb3IuaXNDb2xvciYmKG4uc2hlZW5Db2xvcj10aGlzLnNoZWVuQ29sb3IuZ2V0SGV4KCkpLHRoaXMuc2hlZW5Sb3VnaG5lc3MhPT12b2lkIDAmJihuLnNoZWVuUm91Z2huZXNzPXRoaXMuc2hlZW5Sb3VnaG5lc3MpLHRoaXMuZW1pc3NpdmUmJnRoaXMuZW1pc3NpdmUuaXNDb2xvciYmKG4uZW1pc3NpdmU9dGhpcy5lbWlzc2l2ZS5nZXRIZXgoKSksdGhpcy5lbWlzc2l2ZUludGVuc2l0eSYmdGhpcy5lbWlzc2l2ZUludGVuc2l0eSE9PTEmJihuLmVtaXNzaXZlSW50ZW5zaXR5PXRoaXMuZW1pc3NpdmVJbnRlbnNpdHkpLHRoaXMuc3BlY3VsYXImJnRoaXMuc3BlY3VsYXIuaXNDb2xvciYmKG4uc3BlY3VsYXI9dGhpcy5zcGVjdWxhci5nZXRIZXgoKSksdGhpcy5zcGVjdWxhckludGVuc2l0eSE9PXZvaWQgMCYmKG4uc3BlY3VsYXJJbnRlbnNpdHk9dGhpcy5zcGVjdWxhckludGVuc2l0eSksdGhpcy5zcGVjdWxhckNvbG9yJiZ0aGlzLnNwZWN1bGFyQ29sb3IuaXNDb2xvciYmKG4uc3BlY3VsYXJDb2xvcj10aGlzLnNwZWN1bGFyQ29sb3IuZ2V0SGV4KCkpLHRoaXMuc2hpbmluZXNzIT09dm9pZCAwJiYobi5zaGluaW5lc3M9dGhpcy5zaGluaW5lc3MpLHRoaXMuY2xlYXJjb2F0IT09dm9pZCAwJiYobi5jbGVhcmNvYXQ9dGhpcy5jbGVhcmNvYXQpLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzIT09dm9pZCAwJiYobi5jbGVhcmNvYXRSb3VnaG5lc3M9dGhpcy5jbGVhcmNvYXRSb3VnaG5lc3MpLHRoaXMuY2xlYXJjb2F0TWFwJiZ0aGlzLmNsZWFyY29hdE1hcC5pc1RleHR1cmUmJihuLmNsZWFyY29hdE1hcD10aGlzLmNsZWFyY29hdE1hcC50b0pTT04odCkudXVpZCksdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAmJnRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwLmlzVGV4dHVyZSYmKG4uY2xlYXJjb2F0Um91Z2huZXNzTWFwPXRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmNsZWFyY29hdE5vcm1hbE1hcCYmdGhpcy5jbGVhcmNvYXROb3JtYWxNYXAuaXNUZXh0dXJlJiYobi5jbGVhcmNvYXROb3JtYWxNYXA9dGhpcy5jbGVhcmNvYXROb3JtYWxNYXAudG9KU09OKHQpLnV1aWQsbi5jbGVhcmNvYXROb3JtYWxTY2FsZT10aGlzLmNsZWFyY29hdE5vcm1hbFNjYWxlLnRvQXJyYXkoKSksdGhpcy5tYXAmJnRoaXMubWFwLmlzVGV4dHVyZSYmKG4ubWFwPXRoaXMubWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLm1hdGNhcCYmdGhpcy5tYXRjYXAuaXNUZXh0dXJlJiYobi5tYXRjYXA9dGhpcy5tYXRjYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuYWxwaGFNYXAmJnRoaXMuYWxwaGFNYXAuaXNUZXh0dXJlJiYobi5hbHBoYU1hcD10aGlzLmFscGhhTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmxpZ2h0TWFwJiZ0aGlzLmxpZ2h0TWFwLmlzVGV4dHVyZSYmKG4ubGlnaHRNYXA9dGhpcy5saWdodE1hcC50b0pTT04odCkudXVpZCxuLmxpZ2h0TWFwSW50ZW5zaXR5PXRoaXMubGlnaHRNYXBJbnRlbnNpdHkpLHRoaXMuYW9NYXAmJnRoaXMuYW9NYXAuaXNUZXh0dXJlJiYobi5hb01hcD10aGlzLmFvTWFwLnRvSlNPTih0KS51dWlkLG4uYW9NYXBJbnRlbnNpdHk9dGhpcy5hb01hcEludGVuc2l0eSksdGhpcy5idW1wTWFwJiZ0aGlzLmJ1bXBNYXAuaXNUZXh0dXJlJiYobi5idW1wTWFwPXRoaXMuYnVtcE1hcC50b0pTT04odCkudXVpZCxuLmJ1bXBTY2FsZT10aGlzLmJ1bXBTY2FsZSksdGhpcy5ub3JtYWxNYXAmJnRoaXMubm9ybWFsTWFwLmlzVGV4dHVyZSYmKG4ubm9ybWFsTWFwPXRoaXMubm9ybWFsTWFwLnRvSlNPTih0KS51dWlkLG4ubm9ybWFsTWFwVHlwZT10aGlzLm5vcm1hbE1hcFR5cGUsbi5ub3JtYWxTY2FsZT10aGlzLm5vcm1hbFNjYWxlLnRvQXJyYXkoKSksdGhpcy5kaXNwbGFjZW1lbnRNYXAmJnRoaXMuZGlzcGxhY2VtZW50TWFwLmlzVGV4dHVyZSYmKG4uZGlzcGxhY2VtZW50TWFwPXRoaXMuZGlzcGxhY2VtZW50TWFwLnRvSlNPTih0KS51dWlkLG4uZGlzcGxhY2VtZW50U2NhbGU9dGhpcy5kaXNwbGFjZW1lbnRTY2FsZSxuLmRpc3BsYWNlbWVudEJpYXM9dGhpcy5kaXNwbGFjZW1lbnRCaWFzKSx0aGlzLnJvdWdobmVzc01hcCYmdGhpcy5yb3VnaG5lc3NNYXAuaXNUZXh0dXJlJiYobi5yb3VnaG5lc3NNYXA9dGhpcy5yb3VnaG5lc3NNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMubWV0YWxuZXNzTWFwJiZ0aGlzLm1ldGFsbmVzc01hcC5pc1RleHR1cmUmJihuLm1ldGFsbmVzc01hcD10aGlzLm1ldGFsbmVzc01hcC50b0pTT04odCkudXVpZCksdGhpcy5lbWlzc2l2ZU1hcCYmdGhpcy5lbWlzc2l2ZU1hcC5pc1RleHR1cmUmJihuLmVtaXNzaXZlTWFwPXRoaXMuZW1pc3NpdmVNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuc3BlY3VsYXJNYXAmJnRoaXMuc3BlY3VsYXJNYXAuaXNUZXh0dXJlJiYobi5zcGVjdWxhck1hcD10aGlzLnNwZWN1bGFyTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwJiZ0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwLmlzVGV4dHVyZSYmKG4uc3BlY3VsYXJJbnRlbnNpdHlNYXA9dGhpcy5zcGVjdWxhckludGVuc2l0eU1hcC50b0pTT04odCkudXVpZCksdGhpcy5zcGVjdWxhckNvbG9yTWFwJiZ0aGlzLnNwZWN1bGFyQ29sb3JNYXAuaXNUZXh0dXJlJiYobi5zcGVjdWxhckNvbG9yTWFwPXRoaXMuc3BlY3VsYXJDb2xvck1hcC50b0pTT04odCkudXVpZCksdGhpcy5lbnZNYXAmJnRoaXMuZW52TWFwLmlzVGV4dHVyZSYmKG4uZW52TWFwPXRoaXMuZW52TWFwLnRvSlNPTih0KS51dWlkLHRoaXMuY29tYmluZSE9PXZvaWQgMCYmKG4uY29tYmluZT10aGlzLmNvbWJpbmUpKSx0aGlzLmVudk1hcEludGVuc2l0eSE9PXZvaWQgMCYmKG4uZW52TWFwSW50ZW5zaXR5PXRoaXMuZW52TWFwSW50ZW5zaXR5KSx0aGlzLnJlZmxlY3Rpdml0eSE9PXZvaWQgMCYmKG4ucmVmbGVjdGl2aXR5PXRoaXMucmVmbGVjdGl2aXR5KSx0aGlzLnJlZnJhY3Rpb25SYXRpbyE9PXZvaWQgMCYmKG4ucmVmcmFjdGlvblJhdGlvPXRoaXMucmVmcmFjdGlvblJhdGlvKSx0aGlzLmdyYWRpZW50TWFwJiZ0aGlzLmdyYWRpZW50TWFwLmlzVGV4dHVyZSYmKG4uZ3JhZGllbnRNYXA9dGhpcy5ncmFkaWVudE1hcC50b0pTT04odCkudXVpZCksdGhpcy50cmFuc21pc3Npb24hPT12b2lkIDAmJihuLnRyYW5zbWlzc2lvbj10aGlzLnRyYW5zbWlzc2lvbiksdGhpcy50cmFuc21pc3Npb25NYXAmJnRoaXMudHJhbnNtaXNzaW9uTWFwLmlzVGV4dHVyZSYmKG4udHJhbnNtaXNzaW9uTWFwPXRoaXMudHJhbnNtaXNzaW9uTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLnRoaWNrbmVzcyE9PXZvaWQgMCYmKG4udGhpY2tuZXNzPXRoaXMudGhpY2tuZXNzKSx0aGlzLnRoaWNrbmVzc01hcCYmdGhpcy50aGlja25lc3NNYXAuaXNUZXh0dXJlJiYobi50aGlja25lc3NNYXA9dGhpcy50aGlja25lc3NNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZSE9PXZvaWQgMCYmKG4uYXR0ZW51YXRpb25EaXN0YW5jZT10aGlzLmF0dGVudWF0aW9uRGlzdGFuY2UpLHRoaXMuYXR0ZW51YXRpb25Db2xvciE9PXZvaWQgMCYmKG4uYXR0ZW51YXRpb25Db2xvcj10aGlzLmF0dGVudWF0aW9uQ29sb3IuZ2V0SGV4KCkpLHRoaXMuc2l6ZSE9PXZvaWQgMCYmKG4uc2l6ZT10aGlzLnNpemUpLHRoaXMuc2hhZG93U2lkZSE9PW51bGwmJihuLnNoYWRvd1NpZGU9dGhpcy5zaGFkb3dTaWRlKSx0aGlzLnNpemVBdHRlbnVhdGlvbiE9PXZvaWQgMCYmKG4uc2l6ZUF0dGVudWF0aW9uPXRoaXMuc2l6ZUF0dGVudWF0aW9uKSx0aGlzLmJsZW5kaW5nIT09VjMmJihuLmJsZW5kaW5nPXRoaXMuYmxlbmRpbmcpLHRoaXMuc2lkZSE9PUwxJiYobi5zaWRlPXRoaXMuc2lkZSksdGhpcy52ZXJ0ZXhDb2xvcnMmJihuLnZlcnRleENvbG9ycz0hMCksdGhpcy5vcGFjaXR5PDEmJihuLm9wYWNpdHk9dGhpcy5vcGFjaXR5KSx0aGlzLnRyYW5zcGFyZW50PT09ITAmJihuLnRyYW5zcGFyZW50PXRoaXMudHJhbnNwYXJlbnQpLG4uZGVwdGhGdW5jPXRoaXMuZGVwdGhGdW5jLG4uZGVwdGhUZXN0PXRoaXMuZGVwdGhUZXN0LG4uZGVwdGhXcml0ZT10aGlzLmRlcHRoV3JpdGUsbi5jb2xvcldyaXRlPXRoaXMuY29sb3JXcml0ZSxuLmFscGhhV3JpdGU9dGhpcy5hbHBoYVdyaXRlLG4uc3RlbmNpbFdyaXRlPXRoaXMuc3RlbmNpbFdyaXRlLG4uc3RlbmNpbFdyaXRlTWFzaz10aGlzLnN0ZW5jaWxXcml0ZU1hc2ssbi5zdGVuY2lsRnVuYz10aGlzLnN0ZW5jaWxGdW5jLG4uc3RlbmNpbFJlZj10aGlzLnN0ZW5jaWxSZWYsbi5zdGVuY2lsRnVuY01hc2s9dGhpcy5zdGVuY2lsRnVuY01hc2ssbi5zdGVuY2lsRmFpbD10aGlzLnN0ZW5jaWxGYWlsLG4uc3RlbmNpbFpGYWlsPXRoaXMuc3RlbmNpbFpGYWlsLG4uc3RlbmNpbFpQYXNzPXRoaXMuc3RlbmNpbFpQYXNzLHRoaXMucm90YXRpb24mJnRoaXMucm90YXRpb24hPT0wJiYobi5yb3RhdGlvbj10aGlzLnJvdGF0aW9uKSx0aGlzLnBvbHlnb25PZmZzZXQ9PT0hMCYmKG4ucG9seWdvbk9mZnNldD0hMCksdGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yIT09MCYmKG4ucG9seWdvbk9mZnNldEZhY3Rvcj10aGlzLnBvbHlnb25PZmZzZXRGYWN0b3IpLHRoaXMucG9seWdvbk9mZnNldFVuaXRzIT09MCYmKG4ucG9seWdvbk9mZnNldFVuaXRzPXRoaXMucG9seWdvbk9mZnNldFVuaXRzKSx0aGlzLmxpbmV3aWR0aCYmdGhpcy5saW5ld2lkdGghPT0xJiYobi5saW5ld2lkdGg9dGhpcy5saW5ld2lkdGgpLHRoaXMuZGFzaFNpemUhPT12b2lkIDAmJihuLmRhc2hTaXplPXRoaXMuZGFzaFNpemUpLHRoaXMuZ2FwU2l6ZSE9PXZvaWQgMCYmKG4uZ2FwU2l6ZT10aGlzLmdhcFNpemUpLHRoaXMuc2NhbGUhPT12b2lkIDAmJihuLnNjYWxlPXRoaXMuc2NhbGUpLHRoaXMuZGl0aGVyaW5nPT09ITAmJihuLmRpdGhlcmluZz0hMCksdGhpcy5hbHBoYVRlc3Q+MCYmKG4uYWxwaGFUZXN0PXRoaXMuYWxwaGFUZXN0KSx0aGlzLmFscGhhVG9Db3ZlcmFnZT09PSEwJiYobi5hbHBoYVRvQ292ZXJhZ2U9dGhpcy5hbHBoYVRvQ292ZXJhZ2UpLHRoaXMucHJlbXVsdGlwbGllZEFscGhhPT09ITAmJihuLnByZW11bHRpcGxpZWRBbHBoYT10aGlzLnByZW11bHRpcGxpZWRBbHBoYSksdGhpcy53aXJlZnJhbWU9PT0hMCYmKG4ud2lyZWZyYW1lPXRoaXMud2lyZWZyYW1lKSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD4xJiYobi53aXJlZnJhbWVMaW5ld2lkdGg9dGhpcy53aXJlZnJhbWVMaW5ld2lkdGgpLHRoaXMud2lyZWZyYW1lTGluZWNhcCE9PSJyb3VuZCImJihuLndpcmVmcmFtZUxpbmVjYXA9dGhpcy53aXJlZnJhbWVMaW5lY2FwKSx0aGlzLndpcmVmcmFtZUxpbmVqb2luIT09InJvdW5kIiYmKG4ud2lyZWZyYW1lTGluZWpvaW49dGhpcy53aXJlZnJhbWVMaW5lam9pbiksdGhpcy5mbGF0U2hhZGluZz09PSEwJiYobi5mbGF0U2hhZGluZz10aGlzLmZsYXRTaGFkaW5nKSx0aGlzLnZpc2libGU9PT0hMSYmKG4udmlzaWJsZT0hMSksdGhpcy50b25lTWFwcGVkPT09ITEmJihuLnRvbmVNYXBwZWQ9ITEpLEpTT04uc3RyaW5naWZ5KHRoaXMudXNlckRhdGEpIT09Int9IiYmKG4udXNlckRhdGE9dGhpcy51c2VyRGF0YSk7ZnVuY3Rpb24gaShvKXtsZXQgYT1bXTtmb3IobGV0IHMgaW4gbyl7bGV0IGw9b1tzXTtkZWxldGUgbC5tZXRhZGF0YSxhLnB1c2gobCl9cmV0dXJuIGF9aWYocil7bGV0IG89aSh0LnRleHR1cmVzKSxhPWkodC5pbWFnZXMpO28ubGVuZ3RoPjAmJihuLnRleHR1cmVzPW8pLGEubGVuZ3RoPjAmJihuLmltYWdlcz1hKX1yZXR1cm4gbn1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9Y29weSh0KXt0aGlzLm5hbWU9dC5uYW1lLHRoaXMuZm9nPXQuZm9nLHRoaXMuYmxlbmRpbmc9dC5ibGVuZGluZyx0aGlzLnNpZGU9dC5zaWRlLHRoaXMudmVydGV4Q29sb3JzPXQudmVydGV4Q29sb3JzLHRoaXMub3BhY2l0eT10Lm9wYWNpdHksdGhpcy50cmFuc3BhcmVudD10LnRyYW5zcGFyZW50LHRoaXMuYmxlbmRTcmM9dC5ibGVuZFNyYyx0aGlzLmJsZW5kRHN0PXQuYmxlbmREc3QsdGhpcy5ibGVuZEVxdWF0aW9uPXQuYmxlbmRFcXVhdGlvbix0aGlzLmJsZW5kU3JjQWxwaGE9dC5ibGVuZFNyY0FscGhhLHRoaXMuYmxlbmREc3RBbHBoYT10LmJsZW5kRHN0QWxwaGEsdGhpcy5ibGVuZEVxdWF0aW9uQWxwaGE9dC5ibGVuZEVxdWF0aW9uQWxwaGEsdGhpcy5kZXB0aEZ1bmM9dC5kZXB0aEZ1bmMsdGhpcy5kZXB0aFRlc3Q9dC5kZXB0aFRlc3QsdGhpcy5kZXB0aFdyaXRlPXQuZGVwdGhXcml0ZSx0aGlzLnN0ZW5jaWxXcml0ZU1hc2s9dC5zdGVuY2lsV3JpdGVNYXNrLHRoaXMuc3RlbmNpbEZ1bmM9dC5zdGVuY2lsRnVuYyx0aGlzLnN0ZW5jaWxSZWY9dC5zdGVuY2lsUmVmLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPXQuc3RlbmNpbEZ1bmNNYXNrLHRoaXMuc3RlbmNpbEZhaWw9dC5zdGVuY2lsRmFpbCx0aGlzLnN0ZW5jaWxaRmFpbD10LnN0ZW5jaWxaRmFpbCx0aGlzLnN0ZW5jaWxaUGFzcz10LnN0ZW5jaWxaUGFzcyx0aGlzLnN0ZW5jaWxXcml0ZT10LnN0ZW5jaWxXcml0ZTtsZXQgcj10LmNsaXBwaW5nUGxhbmVzLG49bnVsbDtpZihyIT09bnVsbCl7bGV0IGk9ci5sZW5ndGg7bj1uZXcgQXJyYXkoaSk7Zm9yKGxldCBvPTA7byE9PWk7KytvKW5bb109cltvXS5jbG9uZSgpfXJldHVybiB0aGlzLmNsaXBwaW5nUGxhbmVzPW4sdGhpcy5jbGlwSW50ZXJzZWN0aW9uPXQuY2xpcEludGVyc2VjdGlvbix0aGlzLmNsaXBTaGFkb3dzPXQuY2xpcFNoYWRvd3MsdGhpcy5zaGFkb3dTaWRlPXQuc2hhZG93U2lkZSx0aGlzLmNvbG9yV3JpdGU9dC5jb2xvcldyaXRlLHRoaXMuYWxwaGFXcml0ZT10LmFscGhhV3JpdGUsdGhpcy5wcmVjaXNpb249dC5wcmVjaXNpb24sdGhpcy5wb2x5Z29uT2Zmc2V0PXQucG9seWdvbk9mZnNldCx0aGlzLnBvbHlnb25PZmZzZXRGYWN0b3I9dC5wb2x5Z29uT2Zmc2V0RmFjdG9yLHRoaXMucG9seWdvbk9mZnNldFVuaXRzPXQucG9seWdvbk9mZnNldFVuaXRzLHRoaXMuZGl0aGVyaW5nPXQuZGl0aGVyaW5nLHRoaXMuYWxwaGFUZXN0PXQuYWxwaGFUZXN0LHRoaXMuYWxwaGFUb0NvdmVyYWdlPXQuYWxwaGFUb0NvdmVyYWdlLHRoaXMucHJlbXVsdGlwbGllZEFscGhhPXQucHJlbXVsdGlwbGllZEFscGhhLHRoaXMudmlzaWJsZT10LnZpc2libGUsdGhpcy50b25lTWFwcGVkPXQudG9uZU1hcHBlZCx0aGlzLnVzZXJEYXRhPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodC51c2VyRGF0YSkpLHRoaXN9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX1zZXQgbmVlZHNVcGRhdGUodCl7dD09PSEwJiZ0aGlzLnZlcnNpb24rK319O3FpLnByb3RvdHlwZS5pc01hdGVyaWFsPSEwO3ZhciBzaD1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoQmFzaWNNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgbmUoMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuc3BlY3VsYXJNYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5lbnZNYXA9bnVsbCx0aGlzLmNvbWJpbmU9TzYsdGhpcy5yZWZsZWN0aXZpdHk9MSx0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTgsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5saWdodE1hcD10LmxpZ2h0TWFwLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSx0aGlzLmFvTWFwPXQuYW9NYXAsdGhpcy5hb01hcEludGVuc2l0eT10LmFvTWFwSW50ZW5zaXR5LHRoaXMuc3BlY3VsYXJNYXA9dC5zcGVjdWxhck1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5lbnZNYXA9dC5lbnZNYXAsdGhpcy5jb21iaW5lPXQuY29tYmluZSx0aGlzLnJlZmxlY3Rpdml0eT10LnJlZmxlY3Rpdml0eSx0aGlzLnJlZnJhY3Rpb25SYXRpbz10LnJlZnJhY3Rpb25SYXRpbyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzfX07c2gucHJvdG90eXBlLmlzTWVzaEJhc2ljTWF0ZXJpYWw9ITA7dmFyIExuPW5ldyBqLHZWPW5ldyBMdCxKZT1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbil7aWYoQXJyYXkuaXNBcnJheSh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IGFycmF5IHNob3VsZCBiZSBhIFR5cGVkIEFycmF5LiIpO3RoaXMubmFtZT0iIix0aGlzLmFycmF5PXQsdGhpcy5pdGVtU2l6ZT1yLHRoaXMuY291bnQ9dCE9PXZvaWQgMD90Lmxlbmd0aC9yOjAsdGhpcy5ub3JtYWxpemVkPW49PT0hMCx0aGlzLnVzYWdlPVczLHRoaXMudXBkYXRlUmFuZ2U9e29mZnNldDowLGNvdW50Oi0xfSx0aGlzLnZlcnNpb249MH1vblVwbG9hZENhbGxiYWNrKCl7fXNldCBuZWVkc1VwZGF0ZSh0KXt0PT09ITAmJnRoaXMudmVyc2lvbisrfXNldFVzYWdlKHQpe3JldHVybiB0aGlzLnVzYWdlPXQsdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLm5hbWU9dC5uYW1lLHRoaXMuYXJyYXk9bmV3IHQuYXJyYXkuY29uc3RydWN0b3IodC5hcnJheSksdGhpcy5pdGVtU2l6ZT10Lml0ZW1TaXplLHRoaXMuY291bnQ9dC5jb3VudCx0aGlzLm5vcm1hbGl6ZWQ9dC5ub3JtYWxpemVkLHRoaXMudXNhZ2U9dC51c2FnZSx0aGlzfWNvcHlBdCh0LHIsbil7dCo9dGhpcy5pdGVtU2l6ZSxuKj1yLml0ZW1TaXplO2ZvcihsZXQgaT0wLG89dGhpcy5pdGVtU2l6ZTtpPG87aSsrKXRoaXMuYXJyYXlbdCtpXT1yLmFycmF5W24raV07cmV0dXJuIHRoaXN9Y29weUFycmF5KHQpe3JldHVybiB0aGlzLmFycmF5LnNldCh0KSx0aGlzfWNvcHlDb2xvcnNBcnJheSh0KXtsZXQgcj10aGlzLmFycmF5LG49MDtmb3IobGV0IGk9MCxvPXQubGVuZ3RoO2k8bztpKyspe2xldCBhPXRbaV07YT09PXZvaWQgMCYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlDb2xvcnNBcnJheSgpOiBjb2xvciBpcyB1bmRlZmluZWQiLGkpLGE9bmV3IG5lKSxyW24rK109YS5yLHJbbisrXT1hLmcscltuKytdPWEuYn1yZXR1cm4gdGhpc31jb3B5VmVjdG9yMnNBcnJheSh0KXtsZXQgcj10aGlzLmFycmF5LG49MDtmb3IobGV0IGk9MCxvPXQubGVuZ3RoO2k8bztpKyspe2xldCBhPXRbaV07YT09PXZvaWQgMCYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Iyc0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLGkpLGE9bmV3IEx0KSxyW24rK109YS54LHJbbisrXT1hLnl9cmV0dXJuIHRoaXN9Y29weVZlY3RvcjNzQXJyYXkodCl7bGV0IHI9dGhpcy5hcnJheSxuPTA7Zm9yKGxldCBpPTAsbz10Lmxlbmd0aDtpPG87aSsrKXtsZXQgYT10W2ldO2E9PT12b2lkIDAmJihjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZS5jb3B5VmVjdG9yM3NBcnJheSgpOiB2ZWN0b3IgaXMgdW5kZWZpbmVkIixpKSxhPW5ldyBqKSxyW24rK109YS54LHJbbisrXT1hLnkscltuKytdPWEuen1yZXR1cm4gdGhpc31jb3B5VmVjdG9yNHNBcnJheSh0KXtsZXQgcj10aGlzLmFycmF5LG49MDtmb3IobGV0IGk9MCxvPXQubGVuZ3RoO2k8bztpKyspe2xldCBhPXRbaV07YT09PXZvaWQgMCYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3I0c0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLGkpLGE9bmV3IGVuKSxyW24rK109YS54LHJbbisrXT1hLnkscltuKytdPWEueixyW24rK109YS53fXJldHVybiB0aGlzfWFwcGx5TWF0cml4Myh0KXtpZih0aGlzLml0ZW1TaXplPT09Milmb3IobGV0IHI9MCxuPXRoaXMuY291bnQ7cjxuO3IrKyl2Vi5mcm9tQnVmZmVyQXR0cmlidXRlKHRoaXMsciksdlYuYXBwbHlNYXRyaXgzKHQpLHRoaXMuc2V0WFkocix2Vi54LHZWLnkpO2Vsc2UgaWYodGhpcy5pdGVtU2l6ZT09PTMpZm9yKGxldCByPTAsbj10aGlzLmNvdW50O3I8bjtyKyspTG4uZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0aGlzLHIpLExuLmFwcGx5TWF0cml4Myh0KSx0aGlzLnNldFhZWihyLExuLngsTG4ueSxMbi56KTtyZXR1cm4gdGhpc31hcHBseU1hdHJpeDQodCl7Zm9yKGxldCByPTAsbj10aGlzLmNvdW50O3I8bjtyKyspTG4ueD10aGlzLmdldFgociksTG4ueT10aGlzLmdldFkociksTG4uej10aGlzLmdldFoociksTG4uYXBwbHlNYXRyaXg0KHQpLHRoaXMuc2V0WFlaKHIsTG4ueCxMbi55LExuLnopO3JldHVybiB0aGlzfWFwcGx5Tm9ybWFsTWF0cml4KHQpe2ZvcihsZXQgcj0wLG49dGhpcy5jb3VudDtyPG47cisrKUxuLng9dGhpcy5nZXRYKHIpLExuLnk9dGhpcy5nZXRZKHIpLExuLno9dGhpcy5nZXRaKHIpLExuLmFwcGx5Tm9ybWFsTWF0cml4KHQpLHRoaXMuc2V0WFlaKHIsTG4ueCxMbi55LExuLnopO3JldHVybiB0aGlzfXRyYW5zZm9ybURpcmVjdGlvbih0KXtmb3IobGV0IHI9MCxuPXRoaXMuY291bnQ7cjxuO3IrKylMbi54PXRoaXMuZ2V0WChyKSxMbi55PXRoaXMuZ2V0WShyKSxMbi56PXRoaXMuZ2V0WihyKSxMbi50cmFuc2Zvcm1EaXJlY3Rpb24odCksdGhpcy5zZXRYWVoocixMbi54LExuLnksTG4ueik7cmV0dXJuIHRoaXN9c2V0KHQscj0wKXtyZXR1cm4gdGhpcy5hcnJheS5zZXQodCxyKSx0aGlzfWdldFgodCl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplXX1zZXRYKHQscil7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplXT1yLHRoaXN9Z2V0WSh0KXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemUrMV19c2V0WSh0LHIpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsxXT1yLHRoaXN9Z2V0Wih0KXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemUrMl19c2V0Wih0LHIpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsyXT1yLHRoaXN9Z2V0Vyh0KXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemUrM119c2V0Vyh0LHIpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSszXT1yLHRoaXN9c2V0WFkodCxyLG4pe3JldHVybiB0Kj10aGlzLml0ZW1TaXplLHRoaXMuYXJyYXlbdCswXT1yLHRoaXMuYXJyYXlbdCsxXT1uLHRoaXN9c2V0WFlaKHQscixuLGkpe3JldHVybiB0Kj10aGlzLml0ZW1TaXplLHRoaXMuYXJyYXlbdCswXT1yLHRoaXMuYXJyYXlbdCsxXT1uLHRoaXMuYXJyYXlbdCsyXT1pLHRoaXN9c2V0WFlaVyh0LHIsbixpLG8pe3JldHVybiB0Kj10aGlzLml0ZW1TaXplLHRoaXMuYXJyYXlbdCswXT1yLHRoaXMuYXJyYXlbdCsxXT1uLHRoaXMuYXJyYXlbdCsyXT1pLHRoaXMuYXJyYXlbdCszXT1vLHRoaXN9b25VcGxvYWQodCl7cmV0dXJuIHRoaXMub25VcGxvYWRDYWxsYmFjaz10LHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5hcnJheSx0aGlzLml0ZW1TaXplKS5jb3B5KHRoaXMpfXRvSlNPTigpe2xldCB0PXtpdGVtU2l6ZTp0aGlzLml0ZW1TaXplLHR5cGU6dGhpcy5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLGFycmF5OkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpLG5vcm1hbGl6ZWQ6dGhpcy5ub3JtYWxpemVkfTtyZXR1cm4gdGhpcy5uYW1lIT09IiImJih0Lm5hbWU9dGhpcy5uYW1lKSx0aGlzLnVzYWdlIT09VzMmJih0LnVzYWdlPXRoaXMudXNhZ2UpLCh0aGlzLnVwZGF0ZVJhbmdlLm9mZnNldCE9PTB8fHRoaXMudXBkYXRlUmFuZ2UuY291bnQhPT0tMSkmJih0LnVwZGF0ZVJhbmdlPXRoaXMudXBkYXRlUmFuZ2UpLHR9fTtKZS5wcm90b3R5cGUuaXNCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIGNVPWNsYXNzIGV4dGVuZHMgSmV7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKG5ldyBJbnQ4QXJyYXkodCkscixuKX19LHVVPWNsYXNzIGV4dGVuZHMgSmV7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKG5ldyBVaW50OEFycmF5KHQpLHIsbil9fSxoVT1jbGFzcyBleHRlbmRzIEple2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcihuZXcgVWludDhDbGFtcGVkQXJyYXkodCkscixuKX19LGZVPWNsYXNzIGV4dGVuZHMgSmV7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKG5ldyBJbnQxNkFycmF5KHQpLHIsbil9fSwkMz1jbGFzcyBleHRlbmRzIEple2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcihuZXcgVWludDE2QXJyYXkodCkscixuKX19LHBVPWNsYXNzIGV4dGVuZHMgSmV7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKG5ldyBJbnQzMkFycmF5KHQpLHIsbil9fSxLMz1jbGFzcyBleHRlbmRzIEple2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcihuZXcgVWludDMyQXJyYXkodCkscixuKX19LGRVPWNsYXNzIGV4dGVuZHMgSmV7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKG5ldyBVaW50MTZBcnJheSh0KSxyLG4pfX07ZFUucHJvdG90eXBlLmlzRmxvYXQxNkJ1ZmZlckF0dHJpYnV0ZT0hMDt2YXIgeGU9Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIobmV3IEZsb2F0MzJBcnJheSh0KSxyLG4pfX0sbVU9Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIobmV3IEZsb2F0NjRBcnJheSh0KSxyLG4pfX0sbWZyPTAsWGM9bmV3IE1lLGl1dD1uZXcgb3IsQzM9bmV3IGosTmw9bmV3IHRhLFJQPW5ldyB0YSxMbz1uZXcgaixQZT1jbGFzcyBleHRlbmRzIHFze2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTptZnIrK30pLHRoaXMudXVpZD1EbCgpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9IkJ1ZmZlckdlb21ldHJ5Iix0aGlzLmluZGV4PW51bGwsdGhpcy5hdHRyaWJ1dGVzPXt9LHRoaXMubW9ycGhBdHRyaWJ1dGVzPXt9LHRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU9ITEsdGhpcy5ncm91cHM9W10sdGhpcy5ib3VuZGluZ0JveD1udWxsLHRoaXMuYm91bmRpbmdTcGhlcmU9bnVsbCx0aGlzLmRyYXdSYW5nZT17c3RhcnQ6MCxjb3VudDoxLzB9LHRoaXMudXNlckRhdGE9e319Z2V0SW5kZXgoKXtyZXR1cm4gdGhpcy5pbmRleH1zZXRJbmRleCh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90aGlzLmluZGV4PW5ldyhCZmUodCk/SzM6JDMpKHQsMSk6dGhpcy5pbmRleD10LHRoaXN9Z2V0QXR0cmlidXRlKHQpe3JldHVybiB0aGlzLmF0dHJpYnV0ZXNbdF19c2V0QXR0cmlidXRlKHQscil7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1t0XT1yLHRoaXN9ZGVsZXRlQXR0cmlidXRlKHQpe3JldHVybiBkZWxldGUgdGhpcy5hdHRyaWJ1dGVzW3RdLHRoaXN9aGFzQXR0cmlidXRlKHQpe3JldHVybiB0aGlzLmF0dHJpYnV0ZXNbdF0hPT12b2lkIDB9YWRkR3JvdXAodCxyLG49MCl7dGhpcy5ncm91cHMucHVzaCh7c3RhcnQ6dCxjb3VudDpyLG1hdGVyaWFsSW5kZXg6bn0pfWNsZWFyR3JvdXBzKCl7dGhpcy5ncm91cHM9W119c2V0RHJhd1JhbmdlKHQscil7dGhpcy5kcmF3UmFuZ2Uuc3RhcnQ9dCx0aGlzLmRyYXdSYW5nZS5jb3VudD1yfWFwcGx5TWF0cml4NCh0KXtsZXQgcj10aGlzLmF0dHJpYnV0ZXMucG9zaXRpb247ciE9PXZvaWQgMCYmKHIuYXBwbHlNYXRyaXg0KHQpLHIubmVlZHNVcGRhdGU9ITApO2xldCBuPXRoaXMuYXR0cmlidXRlcy5ub3JtYWw7aWYobiE9PXZvaWQgMCl7bGV0IG89bmV3IGtpKCkuZ2V0Tm9ybWFsTWF0cml4KHQpO24uYXBwbHlOb3JtYWxNYXRyaXgobyksbi5uZWVkc1VwZGF0ZT0hMH1sZXQgaT10aGlzLmF0dHJpYnV0ZXMudGFuZ2VudDtyZXR1cm4gaSE9PXZvaWQgMCYmKGkudHJhbnNmb3JtRGlyZWN0aW9uKHQpLGkubmVlZHNVcGRhdGU9ITApLHRoaXMuYm91bmRpbmdCb3ghPT1udWxsJiZ0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpLHRoaXMuYm91bmRpbmdTcGhlcmUhPT1udWxsJiZ0aGlzLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLHRoaXN9YXBwbHlRdWF0ZXJuaW9uKHQpe3JldHVybiBYYy5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbih0KSx0aGlzLmFwcGx5TWF0cml4NChYYyksdGhpc31yb3RhdGVYKHQpe3JldHVybiBYYy5tYWtlUm90YXRpb25YKHQpLHRoaXMuYXBwbHlNYXRyaXg0KFhjKSx0aGlzfXJvdGF0ZVkodCl7cmV0dXJuIFhjLm1ha2VSb3RhdGlvblkodCksdGhpcy5hcHBseU1hdHJpeDQoWGMpLHRoaXN9cm90YXRlWih0KXtyZXR1cm4gWGMubWFrZVJvdGF0aW9uWih0KSx0aGlzLmFwcGx5TWF0cml4NChYYyksdGhpc310cmFuc2xhdGUodCxyLG4pe3JldHVybiBYYy5tYWtlVHJhbnNsYXRpb24odCxyLG4pLHRoaXMuYXBwbHlNYXRyaXg0KFhjKSx0aGlzfXNjYWxlKHQscixuKXtyZXR1cm4gWGMubWFrZVNjYWxlKHQscixuKSx0aGlzLmFwcGx5TWF0cml4NChYYyksdGhpc31sb29rQXQodCl7cmV0dXJuIGl1dC5sb29rQXQodCksaXV0LnVwZGF0ZU1hdHJpeCgpLHRoaXMuYXBwbHlNYXRyaXg0KGl1dC5tYXRyaXgpLHRoaXN9Y2VudGVyKCl7cmV0dXJuIHRoaXMuY29tcHV0ZUJvdW5kaW5nQm94KCksdGhpcy5ib3VuZGluZ0JveC5nZXRDZW50ZXIoQzMpLm5lZ2F0ZSgpLHRoaXMudHJhbnNsYXRlKEMzLngsQzMueSxDMy56KSx0aGlzfXNldEZyb21Qb2ludHModCl7bGV0IHI9W107Zm9yKGxldCBuPTAsaT10Lmxlbmd0aDtuPGk7bisrKXtsZXQgbz10W25dO3IucHVzaChvLngsby55LG8uenx8MCl9cmV0dXJuIHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKHIsMykpLHRoaXN9Y29tcHV0ZUJvdW5kaW5nQm94KCl7dGhpcy5ib3VuZGluZ0JveD09PW51bGwmJih0aGlzLmJvdW5kaW5nQm94PW5ldyB0YSk7bGV0IHQ9dGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uLHI9dGhpcy5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb247aWYodCYmdC5pc0dMQnVmZmVyQXR0cmlidXRlKXtjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdCb3goKTogR0xCdWZmZXJBdHRyaWJ1dGUgcmVxdWlyZXMgYSBtYW51YWwgYm91bmRpbmcgYm94LiBBbHRlcm5hdGl2ZWx5IHNldCAibWVzaC5mcnVzdHVtQ3VsbGVkIiB0byAiZmFsc2UiLicsdGhpcyksdGhpcy5ib3VuZGluZ0JveC5zZXQobmV3IGooLTEvMCwtMS8wLC0xLzApLG5ldyBqKDEvMCwxLzAsMS8wKSk7cmV0dXJufWlmKHQhPT12b2lkIDApe2lmKHRoaXMuYm91bmRpbmdCb3guc2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZSh0KSxyKWZvcihsZXQgbj0wLGk9ci5sZW5ndGg7bjxpO24rKyl7bGV0IG89cltuXTtObC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKG8pLHRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU/KExvLmFkZFZlY3RvcnModGhpcy5ib3VuZGluZ0JveC5taW4sTmwubWluKSx0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoTG8pLExvLmFkZFZlY3RvcnModGhpcy5ib3VuZGluZ0JveC5tYXgsTmwubWF4KSx0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoTG8pKToodGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KE5sLm1pbiksdGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KE5sLm1heCkpfX1lbHNlIHRoaXMuYm91bmRpbmdCb3gubWFrZUVtcHR5KCk7KGlzTmFOKHRoaXMuYm91bmRpbmdCb3gubWluLngpfHxpc05hTih0aGlzLmJvdW5kaW5nQm94Lm1pbi55KXx8aXNOYU4odGhpcy5ib3VuZGluZ0JveC5taW4ueikpJiZjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdCb3goKTogQ29tcHV0ZWQgbWluL21heCBoYXZlIE5hTiB2YWx1ZXMuIFRoZSAicG9zaXRpb24iIGF0dHJpYnV0ZSBpcyBsaWtlbHkgdG8gaGF2ZSBOYU4gdmFsdWVzLicsdGhpcyl9Y29tcHV0ZUJvdW5kaW5nU3BoZXJlKCl7dGhpcy5ib3VuZGluZ1NwaGVyZT09PW51bGwmJih0aGlzLmJvdW5kaW5nU3BoZXJlPW5ldyBKZik7bGV0IHQ9dGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uLHI9dGhpcy5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb247aWYodCYmdC5pc0dMQnVmZmVyQXR0cmlidXRlKXtjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTogR0xCdWZmZXJBdHRyaWJ1dGUgcmVxdWlyZXMgYSBtYW51YWwgYm91bmRpbmcgc3BoZXJlLiBBbHRlcm5hdGl2ZWx5IHNldCAibWVzaC5mcnVzdHVtQ3VsbGVkIiB0byAiZmFsc2UiLicsdGhpcyksdGhpcy5ib3VuZGluZ1NwaGVyZS5zZXQobmV3IGosMS8wKTtyZXR1cm59aWYodCl7bGV0IG49dGhpcy5ib3VuZGluZ1NwaGVyZS5jZW50ZXI7aWYoTmwuc2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZSh0KSxyKWZvcihsZXQgbz0wLGE9ci5sZW5ndGg7bzxhO28rKyl7bGV0IHM9cltvXTtSUC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHMpLHRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU/KExvLmFkZFZlY3RvcnMoTmwubWluLFJQLm1pbiksTmwuZXhwYW5kQnlQb2ludChMbyksTG8uYWRkVmVjdG9ycyhObC5tYXgsUlAubWF4KSxObC5leHBhbmRCeVBvaW50KExvKSk6KE5sLmV4cGFuZEJ5UG9pbnQoUlAubWluKSxObC5leHBhbmRCeVBvaW50KFJQLm1heCkpfU5sLmdldENlbnRlcihuKTtsZXQgaT0wO2ZvcihsZXQgbz0wLGE9dC5jb3VudDtvPGE7bysrKUxvLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxvKSxpPU1hdGgubWF4KGksbi5kaXN0YW5jZVRvU3F1YXJlZChMbykpO2lmKHIpZm9yKGxldCBvPTAsYT1yLmxlbmd0aDtvPGE7bysrKXtsZXQgcz1yW29dLGw9dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZTtmb3IobGV0IGM9MCx1PXMuY291bnQ7Yzx1O2MrKylMby5mcm9tQnVmZmVyQXR0cmlidXRlKHMsYyksbCYmKEMzLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxjKSxMby5hZGQoQzMpKSxpPU1hdGgubWF4KGksbi5kaXN0YW5jZVRvU3F1YXJlZChMbykpfXRoaXMuYm91bmRpbmdTcGhlcmUucmFkaXVzPU1hdGguc3FydChpKSxpc05hTih0aGlzLmJvdW5kaW5nU3BoZXJlLnJhZGl1cykmJmNvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpOiBDb21wdXRlZCByYWRpdXMgaXMgTmFOLiBUaGUgInBvc2l0aW9uIiBhdHRyaWJ1dGUgaXMgbGlrZWx5IHRvIGhhdmUgTmFOIHZhbHVlcy4nLHRoaXMpfX1jb21wdXRlVGFuZ2VudHMoKXtsZXQgdD10aGlzLmluZGV4LHI9dGhpcy5hdHRyaWJ1dGVzO2lmKHQ9PT1udWxsfHxyLnBvc2l0aW9uPT09dm9pZCAwfHxyLm5vcm1hbD09PXZvaWQgMHx8ci51dj09PXZvaWQgMCl7Y29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5jb21wdXRlVGFuZ2VudHMoKSBmYWlsZWQuIE1pc3NpbmcgcmVxdWlyZWQgYXR0cmlidXRlcyAoaW5kZXgsIHBvc2l0aW9uLCBub3JtYWwgb3IgdXYpIik7cmV0dXJufWxldCBuPXQuYXJyYXksaT1yLnBvc2l0aW9uLmFycmF5LG89ci5ub3JtYWwuYXJyYXksYT1yLnV2LmFycmF5LHM9aS5sZW5ndGgvMztyLnRhbmdlbnQ9PT12b2lkIDAmJnRoaXMuc2V0QXR0cmlidXRlKCJ0YW5nZW50IixuZXcgSmUobmV3IEZsb2F0MzJBcnJheSg0KnMpLDQpKTtsZXQgbD1yLnRhbmdlbnQuYXJyYXksYz1bXSx1PVtdO2ZvcihsZXQgQj0wO0I8cztCKyspY1tCXT1uZXcgaix1W0JdPW5ldyBqO2xldCBoPW5ldyBqLGY9bmV3IGoscD1uZXcgaixkPW5ldyBMdCxnPW5ldyBMdCxfPW5ldyBMdCx5PW5ldyBqLHg9bmV3IGo7ZnVuY3Rpb24gYihCLEksTCl7aC5mcm9tQXJyYXkoaSxCKjMpLGYuZnJvbUFycmF5KGksSSozKSxwLmZyb21BcnJheShpLEwqMyksZC5mcm9tQXJyYXkoYSxCKjIpLGcuZnJvbUFycmF5KGEsSSoyKSxfLmZyb21BcnJheShhLEwqMiksZi5zdWIoaCkscC5zdWIoaCksZy5zdWIoZCksXy5zdWIoZCk7bGV0IFI9MS8oZy54Kl8ueS1fLngqZy55KTshaXNGaW5pdGUoUil8fCh5LmNvcHkoZikubXVsdGlwbHlTY2FsYXIoXy55KS5hZGRTY2FsZWRWZWN0b3IocCwtZy55KS5tdWx0aXBseVNjYWxhcihSKSx4LmNvcHkocCkubXVsdGlwbHlTY2FsYXIoZy54KS5hZGRTY2FsZWRWZWN0b3IoZiwtXy54KS5tdWx0aXBseVNjYWxhcihSKSxjW0JdLmFkZCh5KSxjW0ldLmFkZCh5KSxjW0xdLmFkZCh5KSx1W0JdLmFkZCh4KSx1W0ldLmFkZCh4KSx1W0xdLmFkZCh4KSl9bGV0IFM9dGhpcy5ncm91cHM7Uy5sZW5ndGg9PT0wJiYoUz1be3N0YXJ0OjAsY291bnQ6bi5sZW5ndGh9XSk7Zm9yKGxldCBCPTAsST1TLmxlbmd0aDtCPEk7KytCKXtsZXQgTD1TW0JdLFI9TC5zdGFydCxGPUwuY291bnQ7Zm9yKGxldCB6PVIsVT1SK0Y7ejxVO3orPTMpYihuW3orMF0sblt6KzFdLG5beisyXSl9bGV0IEM9bmV3IGosUD1uZXcgaixrPW5ldyBqLE89bmV3IGo7ZnVuY3Rpb24gRChCKXtrLmZyb21BcnJheShvLEIqMyksTy5jb3B5KGspO2xldCBJPWNbQl07Qy5jb3B5KEkpLEMuc3ViKGsubXVsdGlwbHlTY2FsYXIoay5kb3QoSSkpKS5ub3JtYWxpemUoKSxQLmNyb3NzVmVjdG9ycyhPLEkpO2xldCBSPVAuZG90KHVbQl0pPDA/LTE6MTtsW0IqNF09Qy54LGxbQio0KzFdPUMueSxsW0IqNCsyXT1DLnosbFtCKjQrM109Un1mb3IobGV0IEI9MCxJPVMubGVuZ3RoO0I8STsrK0Ipe2xldCBMPVNbQl0sUj1MLnN0YXJ0LEY9TC5jb3VudDtmb3IobGV0IHo9UixVPVIrRjt6PFU7eis9MylEKG5beiswXSksRChuW3orMV0pLEQoblt6KzJdKX19Y29tcHV0ZVZlcnRleE5vcm1hbHMoKXtsZXQgdD10aGlzLmluZGV4LHI9dGhpcy5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIik7aWYociE9PXZvaWQgMCl7bGV0IG49dGhpcy5nZXRBdHRyaWJ1dGUoIm5vcm1hbCIpO2lmKG49PT12b2lkIDApbj1uZXcgSmUobmV3IEZsb2F0MzJBcnJheShyLmNvdW50KjMpLDMpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG4pO2Vsc2UgZm9yKGxldCBmPTAscD1uLmNvdW50O2Y8cDtmKyspbi5zZXRYWVooZiwwLDAsMCk7bGV0IGk9bmV3IGosbz1uZXcgaixhPW5ldyBqLHM9bmV3IGosbD1uZXcgaixjPW5ldyBqLHU9bmV3IGosaD1uZXcgajtpZih0KWZvcihsZXQgZj0wLHA9dC5jb3VudDtmPHA7Zis9Myl7bGV0IGQ9dC5nZXRYKGYrMCksZz10LmdldFgoZisxKSxfPXQuZ2V0WChmKzIpO2kuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLGQpLG8uZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLGcpLGEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLF8pLHUuc3ViVmVjdG9ycyhhLG8pLGguc3ViVmVjdG9ycyhpLG8pLHUuY3Jvc3MoaCkscy5mcm9tQnVmZmVyQXR0cmlidXRlKG4sZCksbC5mcm9tQnVmZmVyQXR0cmlidXRlKG4sZyksYy5mcm9tQnVmZmVyQXR0cmlidXRlKG4sXykscy5hZGQodSksbC5hZGQodSksYy5hZGQodSksbi5zZXRYWVooZCxzLngscy55LHMueiksbi5zZXRYWVooZyxsLngsbC55LGwueiksbi5zZXRYWVooXyxjLngsYy55LGMueil9ZWxzZSBmb3IobGV0IGY9MCxwPXIuY291bnQ7ZjxwO2YrPTMpaS5mcm9tQnVmZmVyQXR0cmlidXRlKHIsZiswKSxvLmZyb21CdWZmZXJBdHRyaWJ1dGUocixmKzEpLGEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLGYrMiksdS5zdWJWZWN0b3JzKGEsbyksaC5zdWJWZWN0b3JzKGksbyksdS5jcm9zcyhoKSxuLnNldFhZWihmKzAsdS54LHUueSx1LnopLG4uc2V0WFlaKGYrMSx1LngsdS55LHUueiksbi5zZXRYWVooZisyLHUueCx1LnksdS56KTt0aGlzLm5vcm1hbGl6ZU5vcm1hbHMoKSxuLm5lZWRzVXBkYXRlPSEwfX1tZXJnZSh0LHIpe2lmKCEodCYmdC5pc0J1ZmZlckdlb21ldHJ5KSl7Y29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnkubWVyZ2UoKTogZ2VvbWV0cnkgbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLkJ1ZmZlckdlb21ldHJ5LiIsdCk7cmV0dXJufXI9PT12b2lkIDAmJihyPTAsY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS5tZXJnZSgpOiBPdmVyd3JpdGluZyBvcmlnaW5hbCBnZW9tZXRyeSwgc3RhcnRpbmcgYXQgb2Zmc2V0PTAuIFVzZSBCdWZmZXJHZW9tZXRyeVV0aWxzLm1lcmdlQnVmZmVyR2VvbWV0cmllcygpIGZvciBsb3NzbGVzcyBtZXJnZS4iKSk7bGV0IG49dGhpcy5hdHRyaWJ1dGVzO2ZvcihsZXQgaSBpbiBuKXtpZih0LmF0dHJpYnV0ZXNbaV09PT12b2lkIDApY29udGludWU7bGV0IGE9bltpXS5hcnJheSxzPXQuYXR0cmlidXRlc1tpXSxsPXMuYXJyYXksYz1zLml0ZW1TaXplKnIsdT1NYXRoLm1pbihsLmxlbmd0aCxhLmxlbmd0aC1jKTtmb3IobGV0IGg9MCxmPWM7aDx1O2grKyxmKyspYVtmXT1sW2hdfXJldHVybiB0aGlzfW5vcm1hbGl6ZU5vcm1hbHMoKXtsZXQgdD10aGlzLmF0dHJpYnV0ZXMubm9ybWFsO2ZvcihsZXQgcj0wLG49dC5jb3VudDtyPG47cisrKUxvLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxyKSxMby5ub3JtYWxpemUoKSx0LnNldFhZWihyLExvLngsTG8ueSxMby56KX10b05vbkluZGV4ZWQoKXtmdW5jdGlvbiB0KHMsbCl7bGV0IGM9cy5hcnJheSx1PXMuaXRlbVNpemUsaD1zLm5vcm1hbGl6ZWQsZj1uZXcgYy5jb25zdHJ1Y3RvcihsLmxlbmd0aCp1KSxwPTAsZD0wO2ZvcihsZXQgZz0wLF89bC5sZW5ndGg7ZzxfO2crKyl7cy5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlP3A9bFtnXSpzLmRhdGEuc3RyaWRlK3Mub2Zmc2V0OnA9bFtnXSp1O2ZvcihsZXQgeT0wO3k8dTt5KyspZltkKytdPWNbcCsrXX1yZXR1cm4gbmV3IEplKGYsdSxoKX1pZih0aGlzLmluZGV4PT09bnVsbClyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS50b05vbkluZGV4ZWQoKTogQnVmZmVyR2VvbWV0cnkgaXMgYWxyZWFkeSBub24taW5kZXhlZC4iKSx0aGlzO2xldCByPW5ldyBQZSxuPXRoaXMuaW5kZXguYXJyYXksaT10aGlzLmF0dHJpYnV0ZXM7Zm9yKGxldCBzIGluIGkpe2xldCBsPWlbc10sYz10KGwsbik7ci5zZXRBdHRyaWJ1dGUocyxjKX1sZXQgbz10aGlzLm1vcnBoQXR0cmlidXRlcztmb3IobGV0IHMgaW4gbyl7bGV0IGw9W10sYz1vW3NdO2ZvcihsZXQgdT0wLGg9Yy5sZW5ndGg7dTxoO3UrKyl7bGV0IGY9Y1t1XSxwPXQoZixuKTtsLnB1c2gocCl9ci5tb3JwaEF0dHJpYnV0ZXNbc109bH1yLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPXRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU7bGV0IGE9dGhpcy5ncm91cHM7Zm9yKGxldCBzPTAsbD1hLmxlbmd0aDtzPGw7cysrKXtsZXQgYz1hW3NdO3IuYWRkR3JvdXAoYy5zdGFydCxjLmNvdW50LGMubWF0ZXJpYWxJbmRleCl9cmV0dXJuIHJ9dG9KU09OKCl7bGV0IHQ9e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJCdWZmZXJHZW9tZXRyeSIsZ2VuZXJhdG9yOiJCdWZmZXJHZW9tZXRyeS50b0pTT04ifX07aWYodC51dWlkPXRoaXMudXVpZCx0LnR5cGU9dGhpcy50eXBlLHRoaXMubmFtZSE9PSIiJiYodC5uYW1lPXRoaXMubmFtZSksT2JqZWN0LmtleXModGhpcy51c2VyRGF0YSkubGVuZ3RoPjAmJih0LnVzZXJEYXRhPXRoaXMudXNlckRhdGEpLHRoaXMucGFyYW1ldGVycyE9PXZvaWQgMCl7bGV0IGw9dGhpcy5wYXJhbWV0ZXJzO2ZvcihsZXQgYyBpbiBsKWxbY10hPT12b2lkIDAmJih0W2NdPWxbY10pO3JldHVybiB0fXQuZGF0YT17YXR0cmlidXRlczp7fX07bGV0IHI9dGhpcy5pbmRleDtyIT09bnVsbCYmKHQuZGF0YS5pbmRleD17dHlwZTpyLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoci5hcnJheSl9KTtsZXQgbj10aGlzLmF0dHJpYnV0ZXM7Zm9yKGxldCBsIGluIG4pe2xldCBjPW5bbF07dC5kYXRhLmF0dHJpYnV0ZXNbbF09Yy50b0pTT04odC5kYXRhKX1sZXQgaT17fSxvPSExO2ZvcihsZXQgbCBpbiB0aGlzLm1vcnBoQXR0cmlidXRlcyl7bGV0IGM9dGhpcy5tb3JwaEF0dHJpYnV0ZXNbbF0sdT1bXTtmb3IobGV0IGg9MCxmPWMubGVuZ3RoO2g8ZjtoKyspe2xldCBwPWNbaF07dS5wdXNoKHAudG9KU09OKHQuZGF0YSkpfXUubGVuZ3RoPjAmJihpW2xdPXUsbz0hMCl9byYmKHQuZGF0YS5tb3JwaEF0dHJpYnV0ZXM9aSx0LmRhdGEubW9ycGhUYXJnZXRzUmVsYXRpdmU9dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZSk7bGV0IGE9dGhpcy5ncm91cHM7YS5sZW5ndGg+MCYmKHQuZGF0YS5ncm91cHM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShhKSkpO2xldCBzPXRoaXMuYm91bmRpbmdTcGhlcmU7cmV0dXJuIHMhPT1udWxsJiYodC5kYXRhLmJvdW5kaW5nU3BoZXJlPXtjZW50ZXI6cy5jZW50ZXIudG9BcnJheSgpLHJhZGl1czpzLnJhZGl1c30pLHR9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7dGhpcy5pbmRleD1udWxsLHRoaXMuYXR0cmlidXRlcz17fSx0aGlzLm1vcnBoQXR0cmlidXRlcz17fSx0aGlzLmdyb3Vwcz1bXSx0aGlzLmJvdW5kaW5nQm94PW51bGwsdGhpcy5ib3VuZGluZ1NwaGVyZT1udWxsO2xldCByPXt9O3RoaXMubmFtZT10Lm5hbWU7bGV0IG49dC5pbmRleDtuIT09bnVsbCYmdGhpcy5zZXRJbmRleChuLmNsb25lKHIpKTtsZXQgaT10LmF0dHJpYnV0ZXM7Zm9yKGxldCBjIGluIGkpe2xldCB1PWlbY107dGhpcy5zZXRBdHRyaWJ1dGUoYyx1LmNsb25lKHIpKX1sZXQgbz10Lm1vcnBoQXR0cmlidXRlcztmb3IobGV0IGMgaW4gbyl7bGV0IHU9W10saD1vW2NdO2ZvcihsZXQgZj0wLHA9aC5sZW5ndGg7ZjxwO2YrKyl1LnB1c2goaFtmXS5jbG9uZShyKSk7dGhpcy5tb3JwaEF0dHJpYnV0ZXNbY109dX10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPXQubW9ycGhUYXJnZXRzUmVsYXRpdmU7bGV0IGE9dC5ncm91cHM7Zm9yKGxldCBjPTAsdT1hLmxlbmd0aDtjPHU7YysrKXtsZXQgaD1hW2NdO3RoaXMuYWRkR3JvdXAoaC5zdGFydCxoLmNvdW50LGgubWF0ZXJpYWxJbmRleCl9bGV0IHM9dC5ib3VuZGluZ0JveDtzIT09bnVsbCYmKHRoaXMuYm91bmRpbmdCb3g9cy5jbG9uZSgpKTtsZXQgbD10LmJvdW5kaW5nU3BoZXJlO3JldHVybiBsIT09bnVsbCYmKHRoaXMuYm91bmRpbmdTcGhlcmU9bC5jbG9uZSgpKSx0aGlzLmRyYXdSYW5nZS5zdGFydD10LmRyYXdSYW5nZS5zdGFydCx0aGlzLmRyYXdSYW5nZS5jb3VudD10LmRyYXdSYW5nZS5jb3VudCx0aGlzLnVzZXJEYXRhPXQudXNlckRhdGEsdC5wYXJhbWV0ZXJzIT09dm9pZCAwJiYodGhpcy5wYXJhbWV0ZXJzPU9iamVjdC5hc3NpZ24oe30sdC5wYXJhbWV0ZXJzKSksdGhpc31kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfX07UGUucHJvdG90eXBlLmlzQnVmZmVyR2VvbWV0cnk9ITA7dmFyIEF1ZT1uZXcgTWUsQTM9bmV3IFFmLG91dD1uZXcgSmYsTjA9bmV3IGosRDA9bmV3IGosTzA9bmV3IGosYXV0PW5ldyBqLHN1dD1uZXcgaixsdXQ9bmV3IGoseFY9bmV3IGosYlY9bmV3IGosd1Y9bmV3IGosU1Y9bmV3IEx0LE1WPW5ldyBMdCxFVj1uZXcgTHQsY3V0PW5ldyBqLFRWPW5ldyBqLHRpPWNsYXNzIGV4dGVuZHMgb3J7Y29uc3RydWN0b3IodD1uZXcgUGUscj1uZXcgc2gpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoIix0aGlzLmdlb21ldHJ5PXQsdGhpcy5tYXRlcmlhbD1yLHRoaXMudXBkYXRlTW9ycGhUYXJnZXRzKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0Lm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyE9PXZvaWQgMCYmKHRoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPXQubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnNsaWNlKCkpLHQubW9ycGhUYXJnZXREaWN0aW9uYXJ5IT09dm9pZCAwJiYodGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9T2JqZWN0LmFzc2lnbih7fSx0Lm1vcnBoVGFyZ2V0RGljdGlvbmFyeSkpLHRoaXMubWF0ZXJpYWw9dC5tYXRlcmlhbCx0aGlzLmdlb21ldHJ5PXQuZ2VvbWV0cnksdGhpc311cGRhdGVNb3JwaFRhcmdldHMoKXtsZXQgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSl7bGV0IHI9dC5tb3JwaEF0dHJpYnV0ZXMsbj1PYmplY3Qua2V5cyhyKTtpZihuLmxlbmd0aD4wKXtsZXQgaT1yW25bMF1dO2lmKGkhPT12b2lkIDApe3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPVtdLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5PXt9O2ZvcihsZXQgbz0wLGE9aS5sZW5ndGg7bzxhO28rKyl7bGV0IHM9aVtvXS5uYW1lfHxTdHJpbmcobyk7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMucHVzaCgwKSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtzXT1vfX19fWVsc2V7bGV0IHI9dC5tb3JwaFRhcmdldHM7ciE9PXZvaWQgMCYmci5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTWVzaC51cGRhdGVNb3JwaFRhcmdldHMoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfX1yYXljYXN0KHQscil7bGV0IG49dGhpcy5nZW9tZXRyeSxpPXRoaXMubWF0ZXJpYWwsbz10aGlzLm1hdHJpeFdvcmxkO2lmKGk9PT12b2lkIDB8fChuLmJvdW5kaW5nU3BoZXJlPT09bnVsbCYmbi5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSxvdXQuY29weShuLmJvdW5kaW5nU3BoZXJlKSxvdXQuYXBwbHlNYXRyaXg0KG8pLHQucmF5LmludGVyc2VjdHNTcGhlcmUob3V0KT09PSExKXx8KEF1ZS5jb3B5KG8pLmludmVydCgpLEEzLmNvcHkodC5yYXkpLmFwcGx5TWF0cml4NChBdWUpLG4uYm91bmRpbmdCb3ghPT1udWxsJiZBMy5pbnRlcnNlY3RzQm94KG4uYm91bmRpbmdCb3gpPT09ITEpKXJldHVybjtsZXQgYTtpZihuLmlzQnVmZmVyR2VvbWV0cnkpe2xldCBzPW4uaW5kZXgsbD1uLmF0dHJpYnV0ZXMucG9zaXRpb24sYz1uLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbix1PW4ubW9ycGhUYXJnZXRzUmVsYXRpdmUsaD1uLmF0dHJpYnV0ZXMudXYsZj1uLmF0dHJpYnV0ZXMudXYyLHA9bi5ncm91cHMsZD1uLmRyYXdSYW5nZTtpZihzIT09bnVsbClpZihBcnJheS5pc0FycmF5KGkpKWZvcihsZXQgZz0wLF89cC5sZW5ndGg7ZzxfO2crKyl7bGV0IHk9cFtnXSx4PWlbeS5tYXRlcmlhbEluZGV4XSxiPU1hdGgubWF4KHkuc3RhcnQsZC5zdGFydCksUz1NYXRoLm1pbihzLmNvdW50LE1hdGgubWluKHkuc3RhcnQreS5jb3VudCxkLnN0YXJ0K2QuY291bnQpKTtmb3IobGV0IEM9YixQPVM7QzxQO0MrPTMpe2xldCBrPXMuZ2V0WChDKSxPPXMuZ2V0WChDKzEpLEQ9cy5nZXRYKEMrMik7YT1DVih0aGlzLHgsdCxBMyxsLGMsdSxoLGYsayxPLEQpLGEmJihhLmZhY2VJbmRleD1NYXRoLmZsb29yKEMvMyksYS5mYWNlLm1hdGVyaWFsSW5kZXg9eS5tYXRlcmlhbEluZGV4LHIucHVzaChhKSl9fWVsc2V7bGV0IGc9TWF0aC5tYXgoMCxkLnN0YXJ0KSxfPU1hdGgubWluKHMuY291bnQsZC5zdGFydCtkLmNvdW50KTtmb3IobGV0IHk9Zyx4PV87eTx4O3krPTMpe2xldCBiPXMuZ2V0WCh5KSxTPXMuZ2V0WCh5KzEpLEM9cy5nZXRYKHkrMik7YT1DVih0aGlzLGksdCxBMyxsLGMsdSxoLGYsYixTLEMpLGEmJihhLmZhY2VJbmRleD1NYXRoLmZsb29yKHkvMyksci5wdXNoKGEpKX19ZWxzZSBpZihsIT09dm9pZCAwKWlmKEFycmF5LmlzQXJyYXkoaSkpZm9yKGxldCBnPTAsXz1wLmxlbmd0aDtnPF87ZysrKXtsZXQgeT1wW2ddLHg9aVt5Lm1hdGVyaWFsSW5kZXhdLGI9TWF0aC5tYXgoeS5zdGFydCxkLnN0YXJ0KSxTPU1hdGgubWluKGwuY291bnQsTWF0aC5taW4oeS5zdGFydCt5LmNvdW50LGQuc3RhcnQrZC5jb3VudCkpO2ZvcihsZXQgQz1iLFA9UztDPFA7Qys9Myl7bGV0IGs9QyxPPUMrMSxEPUMrMjthPUNWKHRoaXMseCx0LEEzLGwsYyx1LGgsZixrLE8sRCksYSYmKGEuZmFjZUluZGV4PU1hdGguZmxvb3IoQy8zKSxhLmZhY2UubWF0ZXJpYWxJbmRleD15Lm1hdGVyaWFsSW5kZXgsci5wdXNoKGEpKX19ZWxzZXtsZXQgZz1NYXRoLm1heCgwLGQuc3RhcnQpLF89TWF0aC5taW4obC5jb3VudCxkLnN0YXJ0K2QuY291bnQpO2ZvcihsZXQgeT1nLHg9Xzt5PHg7eSs9Myl7bGV0IGI9eSxTPXkrMSxDPXkrMjthPUNWKHRoaXMsaSx0LEEzLGwsYyx1LGgsZixiLFMsQyksYSYmKGEuZmFjZUluZGV4PU1hdGguZmxvb3IoeS8zKSxyLnB1c2goYSkpfX19ZWxzZSBuLmlzR2VvbWV0cnkmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2gucmF5Y2FzdCgpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9fTt0aS5wcm90b3R5cGUuaXNNZXNoPSEwO2Z1bmN0aW9uIGdmcihlLHQscixuLGksbyxhLHMpe2xldCBsO2lmKHQuc2lkZT09PUlpP2w9bi5pbnRlcnNlY3RUcmlhbmdsZShhLG8saSwhMCxzKTpsPW4uaW50ZXJzZWN0VHJpYW5nbGUoaSxvLGEsdC5zaWRlIT09azEscyksbD09PW51bGwpcmV0dXJuIG51bGw7VFYuY29weShzKSxUVi5hcHBseU1hdHJpeDQoZS5tYXRyaXhXb3JsZCk7bGV0IGM9ci5yYXkub3JpZ2luLmRpc3RhbmNlVG8oVFYpO3JldHVybiBjPHIubmVhcnx8Yz5yLmZhcj9udWxsOntkaXN0YW5jZTpjLHBvaW50OlRWLmNsb25lKCksb2JqZWN0OmV9fWZ1bmN0aW9uIENWKGUsdCxyLG4saSxvLGEscyxsLGMsdSxoKXtOMC5mcm9tQnVmZmVyQXR0cmlidXRlKGksYyksRDAuZnJvbUJ1ZmZlckF0dHJpYnV0ZShpLHUpLE8wLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSxoKTtsZXQgZj1lLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztpZihvJiZmKXt4Vi5zZXQoMCwwLDApLGJWLnNldCgwLDAsMCksd1Yuc2V0KDAsMCwwKTtmb3IobGV0IGQ9MCxnPW8ubGVuZ3RoO2Q8ZztkKyspe2xldCBfPWZbZF0seT1vW2RdO18hPT0wJiYoYXV0LmZyb21CdWZmZXJBdHRyaWJ1dGUoeSxjKSxzdXQuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh5LHUpLGx1dC5mcm9tQnVmZmVyQXR0cmlidXRlKHksaCksYT8oeFYuYWRkU2NhbGVkVmVjdG9yKGF1dCxfKSxiVi5hZGRTY2FsZWRWZWN0b3Ioc3V0LF8pLHdWLmFkZFNjYWxlZFZlY3RvcihsdXQsXykpOih4Vi5hZGRTY2FsZWRWZWN0b3IoYXV0LnN1YihOMCksXyksYlYuYWRkU2NhbGVkVmVjdG9yKHN1dC5zdWIoRDApLF8pLHdWLmFkZFNjYWxlZFZlY3RvcihsdXQuc3ViKE8wKSxfKSkpfU4wLmFkZCh4ViksRDAuYWRkKGJWKSxPMC5hZGQod1YpfWUuaXNTa2lubmVkTWVzaCYmKGUuYm9uZVRyYW5zZm9ybShjLE4wKSxlLmJvbmVUcmFuc2Zvcm0odSxEMCksZS5ib25lVHJhbnNmb3JtKGgsTzApKTtsZXQgcD1nZnIoZSx0LHIsbixOMCxEMCxPMCxjdXQpO2lmKHApe3MmJihTVi5mcm9tQnVmZmVyQXR0cmlidXRlKHMsYyksTVYuZnJvbUJ1ZmZlckF0dHJpYnV0ZShzLHUpLEVWLmZyb21CdWZmZXJBdHRyaWJ1dGUocyxoKSxwLnV2PW9pLmdldFVWKGN1dCxOMCxEMCxPMCxTVixNVixFVixuZXcgTHQpKSxsJiYoU1YuZnJvbUJ1ZmZlckF0dHJpYnV0ZShsLGMpLE1WLmZyb21CdWZmZXJBdHRyaWJ1dGUobCx1KSxFVi5mcm9tQnVmZmVyQXR0cmlidXRlKGwsaCkscC51djI9b2kuZ2V0VVYoY3V0LE4wLEQwLE8wLFNWLE1WLEVWLG5ldyBMdCkpO2xldCBkPXthOmMsYjp1LGM6aCxub3JtYWw6bmV3IGosbWF0ZXJpYWxJbmRleDowfTtvaS5nZXROb3JtYWwoTjAsRDAsTzAsZC5ub3JtYWwpLHAuZmFjZT1kfXJldHVybiBwfXZhciB0cD1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9MSxyPTEsbj0xLGk9MSxvPTEsYT0xKXtzdXBlcigpLHRoaXMudHlwZT0iQm94R2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17d2lkdGg6dCxoZWlnaHQ6cixkZXB0aDpuLHdpZHRoU2VnbWVudHM6aSxoZWlnaHRTZWdtZW50czpvLGRlcHRoU2VnbWVudHM6YX07bGV0IHM9dGhpcztpPU1hdGguZmxvb3IoaSksbz1NYXRoLmZsb29yKG8pLGE9TWF0aC5mbG9vcihhKTtsZXQgbD1bXSxjPVtdLHU9W10saD1bXSxmPTAscD0wO2QoInoiLCJ5IiwieCIsLTEsLTEsbixyLHQsYSxvLDApLGQoInoiLCJ5IiwieCIsMSwtMSxuLHIsLXQsYSxvLDEpLGQoIngiLCJ6IiwieSIsMSwxLHQsbixyLGksYSwyKSxkKCJ4IiwieiIsInkiLDEsLTEsdCxuLC1yLGksYSwzKSxkKCJ4IiwieSIsInoiLDEsLTEsdCxyLG4saSxvLDQpLGQoIngiLCJ5IiwieiIsLTEsLTEsdCxyLC1uLGksbyw1KSx0aGlzLnNldEluZGV4KGwpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKGMsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyB4ZSh1LDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyB4ZShoLDIpKTtmdW5jdGlvbiBkKGcsXyx5LHgsYixTLEMsUCxrLE8sRCl7bGV0IEI9Uy9rLEk9Qy9PLEw9Uy8yLFI9Qy8yLEY9UC8yLHo9aysxLFU9TysxLFc9MCxaPTAscnQ9bmV3IGo7Zm9yKGxldCBvdD0wO290PFU7b3QrKyl7bGV0IHN0PW90KkktUjtmb3IobGV0IFN0PTA7U3Q8ejtTdCsrKXtsZXQgYnQ9U3QqQi1MO3J0W2ddPWJ0KngscnRbX109c3QqYixydFt5XT1GLGMucHVzaChydC54LHJ0LnkscnQueikscnRbZ109MCxydFtfXT0wLHJ0W3ldPVA+MD8xOi0xLHUucHVzaChydC54LHJ0LnkscnQueiksaC5wdXNoKFN0L2spLGgucHVzaCgxLW90L08pLFcrPTF9fWZvcihsZXQgb3Q9MDtvdDxPO290KyspZm9yKGxldCBzdD0wO3N0PGs7c3QrKyl7bGV0IFN0PWYrc3QreipvdCxidD1mK3N0K3oqKG90KzEpLE10PWYrKHN0KzEpK3oqKG90KzEpLGx0PWYrKHN0KzEpK3oqb3Q7bC5wdXNoKFN0LGJ0LGx0KSxsLnB1c2goYnQsTXQsbHQpLForPTZ9cy5hZGRHcm91cChwLFosRCkscCs9WixmKz1XfX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyB0cCh0LndpZHRoLHQuaGVpZ2h0LHQuZGVwdGgsdC53aWR0aFNlZ21lbnRzLHQuaGVpZ2h0U2VnbWVudHMsdC5kZXB0aFNlZ21lbnRzKX19O2Z1bmN0aW9uIFozKGUpe2xldCB0PXt9O2ZvcihsZXQgciBpbiBlKXt0W3JdPXt9O2ZvcihsZXQgbiBpbiBlW3JdKXtsZXQgaT1lW3JdW25dO2kmJihpLmlzQ29sb3J8fGkuaXNNYXRyaXgzfHxpLmlzTWF0cml4NHx8aS5pc1ZlY3RvcjJ8fGkuaXNWZWN0b3IzfHxpLmlzVmVjdG9yNHx8aS5pc1RleHR1cmV8fGkuaXNRdWF0ZXJuaW9uKT90W3JdW25dPWkuY2xvbmUoKTpBcnJheS5pc0FycmF5KGkpP3Rbcl1bbl09aS5zbGljZSgpOnRbcl1bbl09aX19cmV0dXJuIHR9ZnVuY3Rpb24gQ2EoZSl7bGV0IHQ9e307Zm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspe2xldCBuPVozKGVbcl0pO2ZvcihsZXQgaSBpbiBuKXRbaV09bltpXX1yZXR1cm4gdH12YXIgVmZlPXtjbG9uZTpaMyxtZXJnZTpDYX0sX2ZyPWB2b2lkIG1haW4oKSB7CglnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7Cn1gLHlmcj1gdm9pZCBtYWluKCkgewoJZ2xfRnJhZ0NvbG9yID0gdmVjNCggMS4wLCAwLjAsIDAuMCwgMS4wICk7Cn1gLGxoPWNsYXNzIGV4dGVuZHMgcWl7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlNoYWRlck1hdGVyaWFsIix0aGlzLmRlZmluZXM9e30sdGhpcy51bmlmb3Jtcz17fSx0aGlzLnZlcnRleFNoYWRlcj1fZnIsdGhpcy5mcmFnbWVudFNoYWRlcj15ZnIsdGhpcy5saW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMuZm9nPSExLHRoaXMubGlnaHRzPSExLHRoaXMuY2xpcHBpbmc9ITEsdGhpcy5leHRlbnNpb25zPXtkZXJpdmF0aXZlczohMSxmcmFnRGVwdGg6ITEsZHJhd0J1ZmZlcnM6ITEsc2hhZGVyVGV4dHVyZUxPRDohMX0sdGhpcy5kZWZhdWx0QXR0cmlidXRlVmFsdWVzPXtjb2xvcjpbMSwxLDFdLHV2OlswLDBdLHV2MjpbMCwwXX0sdGhpcy5pbmRleDBBdHRyaWJ1dGVOYW1lPXZvaWQgMCx0aGlzLnVuaWZvcm1zTmVlZFVwZGF0ZT0hMSx0aGlzLmdsc2xWZXJzaW9uPW51bGwsdCE9PXZvaWQgMCYmKHQuYXR0cmlidXRlcyE9PXZvaWQgMCYmY29uc29sZS5lcnJvcigiVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IGF0dHJpYnV0ZXMgc2hvdWxkIG5vdyBiZSBkZWZpbmVkIGluIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIiksdGhpcy5zZXRWYWx1ZXModCkpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5mcmFnbWVudFNoYWRlcj10LmZyYWdtZW50U2hhZGVyLHRoaXMudmVydGV4U2hhZGVyPXQudmVydGV4U2hhZGVyLHRoaXMudW5pZm9ybXM9WjModC51bmlmb3JtcyksdGhpcy5kZWZpbmVzPU9iamVjdC5hc3NpZ24oe30sdC5kZWZpbmVzKSx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLmxpZ2h0cz10LmxpZ2h0cyx0aGlzLmNsaXBwaW5nPXQuY2xpcHBpbmcsdGhpcy5leHRlbnNpb25zPU9iamVjdC5hc3NpZ24oe30sdC5leHRlbnNpb25zKSx0aGlzLmdsc2xWZXJzaW9uPXQuZ2xzbFZlcnNpb24sdGhpc310b0pTT04odCl7bGV0IHI9c3VwZXIudG9KU09OKHQpO3IuZ2xzbFZlcnNpb249dGhpcy5nbHNsVmVyc2lvbixyLnVuaWZvcm1zPXt9O2ZvcihsZXQgaSBpbiB0aGlzLnVuaWZvcm1zKXtsZXQgYT10aGlzLnVuaWZvcm1zW2ldLnZhbHVlO2EmJmEuaXNUZXh0dXJlP3IudW5pZm9ybXNbaV09e3R5cGU6InQiLHZhbHVlOmEudG9KU09OKHQpLnV1aWR9OmEmJmEuaXNDb2xvcj9yLnVuaWZvcm1zW2ldPXt0eXBlOiJjIix2YWx1ZTphLmdldEhleCgpfTphJiZhLmlzVmVjdG9yMj9yLnVuaWZvcm1zW2ldPXt0eXBlOiJ2MiIsdmFsdWU6YS50b0FycmF5KCl9OmEmJmEuaXNWZWN0b3IzP3IudW5pZm9ybXNbaV09e3R5cGU6InYzIix2YWx1ZTphLnRvQXJyYXkoKX06YSYmYS5pc1ZlY3RvcjQ/ci51bmlmb3Jtc1tpXT17dHlwZToidjQiLHZhbHVlOmEudG9BcnJheSgpfTphJiZhLmlzTWF0cml4Mz9yLnVuaWZvcm1zW2ldPXt0eXBlOiJtMyIsdmFsdWU6YS50b0FycmF5KCl9OmEmJmEuaXNNYXRyaXg0P3IudW5pZm9ybXNbaV09e3R5cGU6Im00Iix2YWx1ZTphLnRvQXJyYXkoKX06ci51bmlmb3Jtc1tpXT17dmFsdWU6YX19T2JqZWN0LmtleXModGhpcy5kZWZpbmVzKS5sZW5ndGg+MCYmKHIuZGVmaW5lcz10aGlzLmRlZmluZXMpLHIudmVydGV4U2hhZGVyPXRoaXMudmVydGV4U2hhZGVyLHIuZnJhZ21lbnRTaGFkZXI9dGhpcy5mcmFnbWVudFNoYWRlcjtsZXQgbj17fTtmb3IobGV0IGkgaW4gdGhpcy5leHRlbnNpb25zKXRoaXMuZXh0ZW5zaW9uc1tpXT09PSEwJiYobltpXT0hMCk7cmV0dXJuIE9iamVjdC5rZXlzKG4pLmxlbmd0aD4wJiYoci5leHRlbnNpb25zPW4pLHJ9fTtsaC5wcm90b3R5cGUuaXNTaGFkZXJNYXRlcmlhbD0hMDt2YXIgTjE9Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJDYW1lcmEiLHRoaXMubWF0cml4V29ybGRJbnZlcnNlPW5ldyBNZSx0aGlzLnByb2plY3Rpb25NYXRyaXg9bmV3IE1lLHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2U9bmV3IE1lfWNvcHkodCxyKXtyZXR1cm4gc3VwZXIuY29weSh0LHIpLHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodC5tYXRyaXhXb3JsZEludmVyc2UpLHRoaXMucHJvamVjdGlvbk1hdHJpeC5jb3B5KHQucHJvamVjdGlvbk1hdHJpeCksdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHQucHJvamVjdGlvbk1hdHJpeEludmVyc2UpLHRoaXN9Z2V0V29ybGREaXJlY3Rpb24odCl7dGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSk7bGV0IHI9dGhpcy5tYXRyaXhXb3JsZC5lbGVtZW50cztyZXR1cm4gdC5zZXQoLXJbOF0sLXJbOV0sLXJbMTBdKS5ub3JtYWxpemUoKX11cGRhdGVNYXRyaXhXb3JsZCh0KXtzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KSx0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpfXVwZGF0ZVdvcmxkTWF0cml4KHQscil7c3VwZXIudXBkYXRlV29ybGRNYXRyaXgodCxyKSx0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX19O04xLnByb3RvdHlwZS5pc0NhbWVyYT0hMDt2YXIgVWk9Y2xhc3MgZXh0ZW5kcyBOMXtjb25zdHJ1Y3Rvcih0PTUwLHI9MSxuPS4xLGk9MmUzKXtzdXBlcigpLHRoaXMudHlwZT0iUGVyc3BlY3RpdmVDYW1lcmEiLHRoaXMuZm92PXQsdGhpcy56b29tPTEsdGhpcy5uZWFyPW4sdGhpcy5mYXI9aSx0aGlzLmZvY3VzPTEwLHRoaXMuYXNwZWN0PXIsdGhpcy52aWV3PW51bGwsdGhpcy5maWxtR2F1Z2U9MzUsdGhpcy5maWxtT2Zmc2V0PTAsdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y29weSh0LHIpe3JldHVybiBzdXBlci5jb3B5KHQsciksdGhpcy5mb3Y9dC5mb3YsdGhpcy56b29tPXQuem9vbSx0aGlzLm5lYXI9dC5uZWFyLHRoaXMuZmFyPXQuZmFyLHRoaXMuZm9jdXM9dC5mb2N1cyx0aGlzLmFzcGVjdD10LmFzcGVjdCx0aGlzLnZpZXc9dC52aWV3PT09bnVsbD9udWxsOk9iamVjdC5hc3NpZ24oe30sdC52aWV3KSx0aGlzLmZpbG1HYXVnZT10LmZpbG1HYXVnZSx0aGlzLmZpbG1PZmZzZXQ9dC5maWxtT2Zmc2V0LHRoaXN9c2V0Rm9jYWxMZW5ndGgodCl7bGV0IHI9LjUqdGhpcy5nZXRGaWxtSGVpZ2h0KCkvdDt0aGlzLmZvdj1RUCoyKk1hdGguYXRhbihyKSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1nZXRGb2NhbExlbmd0aCgpe2xldCB0PU1hdGgudGFuKEkxKi41KnRoaXMuZm92KTtyZXR1cm4gLjUqdGhpcy5nZXRGaWxtSGVpZ2h0KCkvdH1nZXRFZmZlY3RpdmVGT1YoKXtyZXR1cm4gUVAqMipNYXRoLmF0YW4oTWF0aC50YW4oSTEqLjUqdGhpcy5mb3YpL3RoaXMuem9vbSl9Z2V0RmlsbVdpZHRoKCl7cmV0dXJuIHRoaXMuZmlsbUdhdWdlKk1hdGgubWluKHRoaXMuYXNwZWN0LDEpfWdldEZpbG1IZWlnaHQoKXtyZXR1cm4gdGhpcy5maWxtR2F1Z2UvTWF0aC5tYXgodGhpcy5hc3BlY3QsMSl9c2V0Vmlld09mZnNldCh0LHIsbixpLG8sYSl7dGhpcy5hc3BlY3Q9dC9yLHRoaXMudmlldz09PW51bGwmJih0aGlzLnZpZXc9e2VuYWJsZWQ6ITAsZnVsbFdpZHRoOjEsZnVsbEhlaWdodDoxLG9mZnNldFg6MCxvZmZzZXRZOjAsd2lkdGg6MSxoZWlnaHQ6MX0pLHRoaXMudmlldy5lbmFibGVkPSEwLHRoaXMudmlldy5mdWxsV2lkdGg9dCx0aGlzLnZpZXcuZnVsbEhlaWdodD1yLHRoaXMudmlldy5vZmZzZXRYPW4sdGhpcy52aWV3Lm9mZnNldFk9aSx0aGlzLnZpZXcud2lkdGg9byx0aGlzLnZpZXcuaGVpZ2h0PWEsdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y2xlYXJWaWV3T2Zmc2V0KCl7dGhpcy52aWV3IT09bnVsbCYmKHRoaXMudmlldy5lbmFibGVkPSExKSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX11cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl7bGV0IHQ9dGhpcy5uZWFyLHI9dCpNYXRoLnRhbihJMSouNSp0aGlzLmZvdikvdGhpcy56b29tLG49MipyLGk9dGhpcy5hc3BlY3QqbixvPS0uNSppLGE9dGhpcy52aWV3O2lmKHRoaXMudmlldyE9PW51bGwmJnRoaXMudmlldy5lbmFibGVkKXtsZXQgbD1hLmZ1bGxXaWR0aCxjPWEuZnVsbEhlaWdodDtvKz1hLm9mZnNldFgqaS9sLHItPWEub2Zmc2V0WSpuL2MsaSo9YS53aWR0aC9sLG4qPWEuaGVpZ2h0L2N9bGV0IHM9dGhpcy5maWxtT2Zmc2V0O3MhPT0wJiYobys9dCpzL3RoaXMuZ2V0RmlsbVdpZHRoKCkpLHRoaXMucHJvamVjdGlvbk1hdHJpeC5tYWtlUGVyc3BlY3RpdmUobyxvK2kscixyLW4sdCx0aGlzLmZhciksdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMucHJvamVjdGlvbk1hdHJpeCkuaW52ZXJ0KCl9dG9KU09OKHQpe2xldCByPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gci5vYmplY3QuZm92PXRoaXMuZm92LHIub2JqZWN0Lnpvb209dGhpcy56b29tLHIub2JqZWN0Lm5lYXI9dGhpcy5uZWFyLHIub2JqZWN0LmZhcj10aGlzLmZhcixyLm9iamVjdC5mb2N1cz10aGlzLmZvY3VzLHIub2JqZWN0LmFzcGVjdD10aGlzLmFzcGVjdCx0aGlzLnZpZXchPT1udWxsJiYoci5vYmplY3Qudmlldz1PYmplY3QuYXNzaWduKHt9LHRoaXMudmlldykpLHIub2JqZWN0LmZpbG1HYXVnZT10aGlzLmZpbG1HYXVnZSxyLm9iamVjdC5maWxtT2Zmc2V0PXRoaXMuZmlsbU9mZnNldCxyfX07VWkucHJvdG90eXBlLmlzUGVyc3BlY3RpdmVDYW1lcmE9ITA7dmFyIFAzPTkwLEkzPTEsSjM9Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcih0LHIsbil7aWYoc3VwZXIoKSx0aGlzLnR5cGU9IkN1YmVDYW1lcmEiLG4uaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQhPT0hMCl7Y29uc29sZS5lcnJvcigiVEhSRUUuQ3ViZUNhbWVyYTogVGhlIGNvbnN0cnVjdG9yIG5vdyBleHBlY3RzIGFuIGluc3RhbmNlIG9mIFdlYkdMQ3ViZVJlbmRlclRhcmdldCBhcyB0aGlyZCBwYXJhbWV0ZXIuIik7cmV0dXJufXRoaXMucmVuZGVyVGFyZ2V0PW47bGV0IGk9bmV3IFVpKFAzLEkzLHQscik7aS5sYXllcnM9dGhpcy5sYXllcnMsaS51cC5zZXQoMCwtMSwwKSxpLmxvb2tBdChuZXcgaigxLDAsMCkpLHRoaXMuYWRkKGkpO2xldCBvPW5ldyBVaShQMyxJMyx0LHIpO28ubGF5ZXJzPXRoaXMubGF5ZXJzLG8udXAuc2V0KDAsLTEsMCksby5sb29rQXQobmV3IGooLTEsMCwwKSksdGhpcy5hZGQobyk7bGV0IGE9bmV3IFVpKFAzLEkzLHQscik7YS5sYXllcnM9dGhpcy5sYXllcnMsYS51cC5zZXQoMCwwLDEpLGEubG9va0F0KG5ldyBqKDAsMSwwKSksdGhpcy5hZGQoYSk7bGV0IHM9bmV3IFVpKFAzLEkzLHQscik7cy5sYXllcnM9dGhpcy5sYXllcnMscy51cC5zZXQoMCwwLC0xKSxzLmxvb2tBdChuZXcgaigwLC0xLDApKSx0aGlzLmFkZChzKTtsZXQgbD1uZXcgVWkoUDMsSTMsdCxyKTtsLmxheWVycz10aGlzLmxheWVycyxsLnVwLnNldCgwLC0xLDApLGwubG9va0F0KG5ldyBqKDAsMCwxKSksdGhpcy5hZGQobCk7bGV0IGM9bmV3IFVpKFAzLEkzLHQscik7Yy5sYXllcnM9dGhpcy5sYXllcnMsYy51cC5zZXQoMCwtMSwwKSxjLmxvb2tBdChuZXcgaigwLDAsLTEpKSx0aGlzLmFkZChjKX11cGRhdGUodCxyKXt0aGlzLnBhcmVudD09PW51bGwmJnRoaXMudXBkYXRlTWF0cml4V29ybGQoKTtsZXQgbj10aGlzLnJlbmRlclRhcmdldCxbaSxvLGEscyxsLGNdPXRoaXMuY2hpbGRyZW4sdT10LnhyLmVuYWJsZWQsaD10LmdldFJlbmRlclRhcmdldCgpO3QueHIuZW5hYmxlZD0hMTtsZXQgZj1uLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzO24udGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ITEsdC5zZXRSZW5kZXJUYXJnZXQobiwwKSx0LnJlbmRlcihyLGkpLHQuc2V0UmVuZGVyVGFyZ2V0KG4sMSksdC5yZW5kZXIocixvKSx0LnNldFJlbmRlclRhcmdldChuLDIpLHQucmVuZGVyKHIsYSksdC5zZXRSZW5kZXJUYXJnZXQobiwzKSx0LnJlbmRlcihyLHMpLHQuc2V0UmVuZGVyVGFyZ2V0KG4sNCksdC5yZW5kZXIocixsKSxuLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPWYsdC5zZXRSZW5kZXJUYXJnZXQobiw1KSx0LnJlbmRlcihyLGMpLHQuc2V0UmVuZGVyVGFyZ2V0KGgpLHQueHIuZW5hYmxlZD11LG4udGV4dHVyZS5uZWVkc1BNUkVNVXBkYXRlPSEwfX0sVjA9Y2xhc3MgZXh0ZW5kcyB2aXtjb25zdHJ1Y3Rvcih0LHIsbixpLG8sYSxzLGwsYyx1KXt0PXQhPT12b2lkIDA/dDpbXSxyPXIhPT12b2lkIDA/cjppeCxzdXBlcih0LHIsbixpLG8sYSxzLGwsYyx1KSx0aGlzLmZsaXBZPSExfWdldCBpbWFnZXMoKXtyZXR1cm4gdGhpcy5pbWFnZX1zZXQgaW1hZ2VzKHQpe3RoaXMuaW1hZ2U9dH19O1YwLnByb3RvdHlwZS5pc0N1YmVUZXh0dXJlPSEwO3ZhciBRMz1jbGFzcyBleHRlbmRzIGhze2NvbnN0cnVjdG9yKHQscixuKXtOdW1iZXIuaXNJbnRlZ2VyKHIpJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTEN1YmVSZW5kZXJUYXJnZXQ6IGNvbnN0cnVjdG9yIHNpZ25hdHVyZSBpcyBub3cgV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KCBzaXplLCBvcHRpb25zICkiKSxyPW4pLHN1cGVyKHQsdCxyKSxyPXJ8fHt9LHRoaXMudGV4dHVyZT1uZXcgVjAodm9pZCAwLHIubWFwcGluZyxyLndyYXBTLHIud3JhcFQsci5tYWdGaWx0ZXIsci5taW5GaWx0ZXIsci5mb3JtYXQsci50eXBlLHIuYW5pc290cm9weSxyLmVuY29kaW5nKSx0aGlzLnRleHR1cmUuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPSEwLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ci5nZW5lcmF0ZU1pcG1hcHMhPT12b2lkIDA/ci5nZW5lcmF0ZU1pcG1hcHM6ITEsdGhpcy50ZXh0dXJlLm1pbkZpbHRlcj1yLm1pbkZpbHRlciE9PXZvaWQgMD9yLm1pbkZpbHRlcjppaX1mcm9tRXF1aXJlY3Rhbmd1bGFyVGV4dHVyZSh0LHIpe3RoaXMudGV4dHVyZS50eXBlPXIudHlwZSx0aGlzLnRleHR1cmUuZm9ybWF0PVFvLHRoaXMudGV4dHVyZS5lbmNvZGluZz1yLmVuY29kaW5nLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ci5nZW5lcmF0ZU1pcG1hcHMsdGhpcy50ZXh0dXJlLm1pbkZpbHRlcj1yLm1pbkZpbHRlcix0aGlzLnRleHR1cmUubWFnRmlsdGVyPXIubWFnRmlsdGVyO2xldCBuPXt1bmlmb3Jtczp7dEVxdWlyZWN0Ont2YWx1ZTpudWxsfX0sdmVydGV4U2hhZGVyOmAKCgkJCQl2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uOwoKCQkJCXZlYzMgdHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7CgoJCQkJCXJldHVybiBub3JtYWxpemUoICggbWF0cml4ICogdmVjNCggZGlyLCAwLjAgKSApLnh5eiApOwoKCQkJCX0KCgkJCQl2b2lkIG1haW4oKSB7CgoJCQkJCXZXb3JsZERpcmVjdGlvbiA9IHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7CgoJCQkJCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkJCQkJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoKCQkJCX0KCQkJYCxmcmFnbWVudFNoYWRlcjpgCgoJCQkJdW5pZm9ybSBzYW1wbGVyMkQgdEVxdWlyZWN0OwoKCQkJCXZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247CgoJCQkJI2luY2x1ZGUgPGNvbW1vbj4KCgkJCQl2b2lkIG1haW4oKSB7CgoJCQkJCXZlYzMgZGlyZWN0aW9uID0gbm9ybWFsaXplKCB2V29ybGREaXJlY3Rpb24gKTsKCgkJCQkJdmVjMiBzYW1wbGVVViA9IGVxdWlyZWN0VXYoIGRpcmVjdGlvbiApOwoKCQkJCQlnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQoIHRFcXVpcmVjdCwgc2FtcGxlVVYgKTsKCgkJCQl9CgkJCWB9LGk9bmV3IHRwKDUsNSw1KSxvPW5ldyBsaCh7bmFtZToiQ3ViZW1hcEZyb21FcXVpcmVjdCIsdW5pZm9ybXM6WjMobi51bmlmb3JtcyksdmVydGV4U2hhZGVyOm4udmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOm4uZnJhZ21lbnRTaGFkZXIsc2lkZTpJaSxibGVuZGluZzpLZH0pO28udW5pZm9ybXMudEVxdWlyZWN0LnZhbHVlPXI7bGV0IGE9bmV3IHRpKGksbykscz1yLm1pbkZpbHRlcjtyZXR1cm4gci5taW5GaWx0ZXI9PT1heCYmKHIubWluRmlsdGVyPWlpKSxuZXcgSjMoMSwxMCx0aGlzKS51cGRhdGUodCxhKSxyLm1pbkZpbHRlcj1zLGEuZ2VvbWV0cnkuZGlzcG9zZSgpLGEubWF0ZXJpYWwuZGlzcG9zZSgpLHRoaXN9Y2xlYXIodCxyLG4saSl7bGV0IG89dC5nZXRSZW5kZXJUYXJnZXQoKTtmb3IobGV0IGE9MDthPDY7YSsrKXQuc2V0UmVuZGVyVGFyZ2V0KHRoaXMsYSksdC5jbGVhcihyLG4saSk7dC5zZXRSZW5kZXJUYXJnZXQobyl9fTtRMy5wcm90b3R5cGUuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ9ITA7dmFyIHV1dD1uZXcgaix2ZnI9bmV3IGoseGZyPW5ldyBraSwkYz1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBqKDEsMCwwKSxyPTApe3RoaXMubm9ybWFsPXQsdGhpcy5jb25zdGFudD1yfXNldCh0LHIpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQpLHRoaXMuY29uc3RhbnQ9cix0aGlzfXNldENvbXBvbmVudHModCxyLG4saSl7cmV0dXJuIHRoaXMubm9ybWFsLnNldCh0LHIsbiksdGhpcy5jb25zdGFudD1pLHRoaXN9c2V0RnJvbU5vcm1hbEFuZENvcGxhbmFyUG9pbnQodCxyKXtyZXR1cm4gdGhpcy5ub3JtYWwuY29weSh0KSx0aGlzLmNvbnN0YW50PS1yLmRvdCh0aGlzLm5vcm1hbCksdGhpc31zZXRGcm9tQ29wbGFuYXJQb2ludHModCxyLG4pe2xldCBpPXV1dC5zdWJWZWN0b3JzKG4scikuY3Jvc3ModmZyLnN1YlZlY3RvcnModCxyKSkubm9ybWFsaXplKCk7cmV0dXJuIHRoaXMuc2V0RnJvbU5vcm1hbEFuZENvcGxhbmFyUG9pbnQoaSx0KSx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMubm9ybWFsLmNvcHkodC5ub3JtYWwpLHRoaXMuY29uc3RhbnQ9dC5jb25zdGFudCx0aGlzfW5vcm1hbGl6ZSgpe2xldCB0PTEvdGhpcy5ub3JtYWwubGVuZ3RoKCk7cmV0dXJuIHRoaXMubm9ybWFsLm11bHRpcGx5U2NhbGFyKHQpLHRoaXMuY29uc3RhbnQqPXQsdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy5jb25zdGFudCo9LTEsdGhpcy5ub3JtYWwubmVnYXRlKCksdGhpc31kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIHRoaXMubm9ybWFsLmRvdCh0KSt0aGlzLmNvbnN0YW50fWRpc3RhbmNlVG9TcGhlcmUodCl7cmV0dXJuIHRoaXMuZGlzdGFuY2VUb1BvaW50KHQuY2VudGVyKS10LnJhZGl1c31wcm9qZWN0UG9pbnQodCxyKXtyZXR1cm4gci5jb3B5KHRoaXMubm9ybWFsKS5tdWx0aXBseVNjYWxhcigtdGhpcy5kaXN0YW5jZVRvUG9pbnQodCkpLmFkZCh0KX1pbnRlcnNlY3RMaW5lKHQscil7bGV0IG49dC5kZWx0YSh1dXQpLGk9dGhpcy5ub3JtYWwuZG90KG4pO2lmKGk9PT0wKXJldHVybiB0aGlzLmRpc3RhbmNlVG9Qb2ludCh0LnN0YXJ0KT09PTA/ci5jb3B5KHQuc3RhcnQpOm51bGw7bGV0IG89LSh0LnN0YXJ0LmRvdCh0aGlzLm5vcm1hbCkrdGhpcy5jb25zdGFudCkvaTtyZXR1cm4gbzwwfHxvPjE/bnVsbDpyLmNvcHkobikubXVsdGlwbHlTY2FsYXIobykuYWRkKHQuc3RhcnQpfWludGVyc2VjdHNMaW5lKHQpe2xldCByPXRoaXMuZGlzdGFuY2VUb1BvaW50KHQuc3RhcnQpLG49dGhpcy5kaXN0YW5jZVRvUG9pbnQodC5lbmQpO3JldHVybiByPDAmJm4+MHx8bjwwJiZyPjB9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzUGxhbmUodGhpcyl9aW50ZXJzZWN0c1NwaGVyZSh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzUGxhbmUodGhpcyl9Y29wbGFuYXJQb2ludCh0KXtyZXR1cm4gdC5jb3B5KHRoaXMubm9ybWFsKS5tdWx0aXBseVNjYWxhcigtdGhpcy5jb25zdGFudCl9YXBwbHlNYXRyaXg0KHQscil7bGV0IG49cnx8eGZyLmdldE5vcm1hbE1hdHJpeCh0KSxpPXRoaXMuY29wbGFuYXJQb2ludCh1dXQpLmFwcGx5TWF0cml4NCh0KSxvPXRoaXMubm9ybWFsLmFwcGx5TWF0cml4MyhuKS5ub3JtYWxpemUoKTtyZXR1cm4gdGhpcy5jb25zdGFudD0taS5kb3QobyksdGhpc310cmFuc2xhdGUodCl7cmV0dXJuIHRoaXMuY29uc3RhbnQtPXQuZG90KHRoaXMubm9ybWFsKSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5ub3JtYWwuZXF1YWxzKHRoaXMubm9ybWFsKSYmdC5jb25zdGFudD09PXRoaXMuY29uc3RhbnR9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfX07JGMucHJvdG90eXBlLmlzUGxhbmU9ITA7dmFyIEwzPW5ldyBKZixBVj1uZXcgaixEMT1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyAkYyxyPW5ldyAkYyxuPW5ldyAkYyxpPW5ldyAkYyxvPW5ldyAkYyxhPW5ldyAkYyl7dGhpcy5wbGFuZXM9W3QscixuLGksbyxhXX1zZXQodCxyLG4saSxvLGEpe2xldCBzPXRoaXMucGxhbmVzO3JldHVybiBzWzBdLmNvcHkodCksc1sxXS5jb3B5KHIpLHNbMl0uY29weShuKSxzWzNdLmNvcHkoaSksc1s0XS5jb3B5KG8pLHNbNV0uY29weShhKSx0aGlzfWNvcHkodCl7bGV0IHI9dGhpcy5wbGFuZXM7Zm9yKGxldCBuPTA7bjw2O24rKylyW25dLmNvcHkodC5wbGFuZXNbbl0pO3JldHVybiB0aGlzfXNldEZyb21Qcm9qZWN0aW9uTWF0cml4KHQpe2xldCByPXRoaXMucGxhbmVzLG49dC5lbGVtZW50cyxpPW5bMF0sbz1uWzFdLGE9blsyXSxzPW5bM10sbD1uWzRdLGM9bls1XSx1PW5bNl0saD1uWzddLGY9bls4XSxwPW5bOV0sZD1uWzEwXSxnPW5bMTFdLF89blsxMl0seT1uWzEzXSx4PW5bMTRdLGI9blsxNV07cmV0dXJuIHJbMF0uc2V0Q29tcG9uZW50cyhzLWksaC1sLGctZixiLV8pLm5vcm1hbGl6ZSgpLHJbMV0uc2V0Q29tcG9uZW50cyhzK2ksaCtsLGcrZixiK18pLm5vcm1hbGl6ZSgpLHJbMl0uc2V0Q29tcG9uZW50cyhzK28saCtjLGcrcCxiK3kpLm5vcm1hbGl6ZSgpLHJbM10uc2V0Q29tcG9uZW50cyhzLW8saC1jLGctcCxiLXkpLm5vcm1hbGl6ZSgpLHJbNF0uc2V0Q29tcG9uZW50cyhzLWEsaC11LGctZCxiLXgpLm5vcm1hbGl6ZSgpLHJbNV0uc2V0Q29tcG9uZW50cyhzK2EsaCt1LGcrZCxiK3gpLm5vcm1hbGl6ZSgpLHRoaXN9aW50ZXJzZWN0c09iamVjdCh0KXtsZXQgcj10Lmdlb21ldHJ5O3JldHVybiByLmJvdW5kaW5nU3BoZXJlPT09bnVsbCYmci5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSxMMy5jb3B5KHIuYm91bmRpbmdTcGhlcmUpLmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKSx0aGlzLmludGVyc2VjdHNTcGhlcmUoTDMpfWludGVyc2VjdHNTcHJpdGUodCl7cmV0dXJuIEwzLmNlbnRlci5zZXQoMCwwLDApLEwzLnJhZGl1cz0uNzA3MTA2NzgxMTg2NTQ3NixMMy5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKEwzKX1pbnRlcnNlY3RzU3BoZXJlKHQpe2xldCByPXRoaXMucGxhbmVzLG49dC5jZW50ZXIsaT0tdC5yYWRpdXM7Zm9yKGxldCBvPTA7bzw2O28rKylpZihyW29dLmRpc3RhbmNlVG9Qb2ludChuKTxpKXJldHVybiExO3JldHVybiEwfWludGVyc2VjdHNCb3godCl7bGV0IHI9dGhpcy5wbGFuZXM7Zm9yKGxldCBuPTA7bjw2O24rKyl7bGV0IGk9cltuXTtpZihBVi54PWkubm9ybWFsLng+MD90Lm1heC54OnQubWluLngsQVYueT1pLm5vcm1hbC55PjA/dC5tYXgueTp0Lm1pbi55LEFWLno9aS5ub3JtYWwuej4wP3QubWF4Lno6dC5taW4ueixpLmRpc3RhbmNlVG9Qb2ludChBVik8MClyZXR1cm4hMX1yZXR1cm4hMH1jb250YWluc1BvaW50KHQpe2xldCByPXRoaXMucGxhbmVzO2ZvcihsZXQgbj0wO248NjtuKyspaWYocltuXS5kaXN0YW5jZVRvUG9pbnQodCk8MClyZXR1cm4hMTtyZXR1cm4hMH1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fTtmdW5jdGlvbiBVZmUoKXtsZXQgZT1udWxsLHQ9ITEscj1udWxsLG49bnVsbDtmdW5jdGlvbiBpKG8sYSl7cihvLGEpLG49ZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoaSl9cmV0dXJue3N0YXJ0OmZ1bmN0aW9uKCl7dCE9PSEwJiZyIT09bnVsbCYmKG49ZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoaSksdD0hMCl9LHN0b3A6ZnVuY3Rpb24oKXtlLmNhbmNlbEFuaW1hdGlvbkZyYW1lKG4pLHQ9ITF9LHNldEFuaW1hdGlvbkxvb3A6ZnVuY3Rpb24obyl7cj1vfSxzZXRDb250ZXh0OmZ1bmN0aW9uKG8pe2U9b319fWZ1bmN0aW9uIGJmcihlLHQpe2xldCByPXQuaXNXZWJHTDIsbj1uZXcgV2Vha01hcDtmdW5jdGlvbiBpKGMsdSl7bGV0IGg9Yy5hcnJheSxmPWMudXNhZ2UscD1lLmNyZWF0ZUJ1ZmZlcigpO2UuYmluZEJ1ZmZlcih1LHApLGUuYnVmZmVyRGF0YSh1LGgsZiksYy5vblVwbG9hZENhbGxiYWNrKCk7bGV0IGQ9NTEyNjtyZXR1cm4gaCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheT9kPTUxMjY6aCBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheT9jb25zb2xlLndhcm4oIlRIUkVFLldlYkdMQXR0cmlidXRlczogVW5zdXBwb3J0ZWQgZGF0YSBidWZmZXIgZm9ybWF0OiBGbG9hdDY0QXJyYXkuIik6aCBpbnN0YW5jZW9mIFVpbnQxNkFycmF5P2MuaXNGbG9hdDE2QnVmZmVyQXR0cmlidXRlP3I/ZD01MTMxOmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xBdHRyaWJ1dGVzOiBVc2FnZSBvZiBGbG9hdDE2QnVmZmVyQXR0cmlidXRlIHJlcXVpcmVzIFdlYkdMMi4iKTpkPTUxMjM6aCBpbnN0YW5jZW9mIEludDE2QXJyYXk/ZD01MTIyOmggaW5zdGFuY2VvZiBVaW50MzJBcnJheT9kPTUxMjU6aCBpbnN0YW5jZW9mIEludDMyQXJyYXk/ZD01MTI0OmggaW5zdGFuY2VvZiBJbnQ4QXJyYXk/ZD01MTIwOihoIGluc3RhbmNlb2YgVWludDhBcnJheXx8aCBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KSYmKGQ9NTEyMSkse2J1ZmZlcjpwLHR5cGU6ZCxieXRlc1BlckVsZW1lbnQ6aC5CWVRFU19QRVJfRUxFTUVOVCx2ZXJzaW9uOmMudmVyc2lvbn19ZnVuY3Rpb24gbyhjLHUsaCl7bGV0IGY9dS5hcnJheSxwPXUudXBkYXRlUmFuZ2U7ZS5iaW5kQnVmZmVyKGgsYykscC5jb3VudD09PS0xP2UuYnVmZmVyU3ViRGF0YShoLDAsZik6KHI/ZS5idWZmZXJTdWJEYXRhKGgscC5vZmZzZXQqZi5CWVRFU19QRVJfRUxFTUVOVCxmLHAub2Zmc2V0LHAuY291bnQpOmUuYnVmZmVyU3ViRGF0YShoLHAub2Zmc2V0KmYuQllURVNfUEVSX0VMRU1FTlQsZi5zdWJhcnJheShwLm9mZnNldCxwLm9mZnNldCtwLmNvdW50KSkscC5jb3VudD0tMSl9ZnVuY3Rpb24gYShjKXtyZXR1cm4gYy5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlJiYoYz1jLmRhdGEpLG4uZ2V0KGMpfWZ1bmN0aW9uIHMoYyl7Yy5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlJiYoYz1jLmRhdGEpO2xldCB1PW4uZ2V0KGMpO3UmJihlLmRlbGV0ZUJ1ZmZlcih1LmJ1ZmZlciksbi5kZWxldGUoYykpfWZ1bmN0aW9uIGwoYyx1KXtpZihjLmlzR0xCdWZmZXJBdHRyaWJ1dGUpe2xldCBmPW4uZ2V0KGMpOyghZnx8Zi52ZXJzaW9uPGMudmVyc2lvbikmJm4uc2V0KGMse2J1ZmZlcjpjLmJ1ZmZlcix0eXBlOmMudHlwZSxieXRlc1BlckVsZW1lbnQ6Yy5lbGVtZW50U2l6ZSx2ZXJzaW9uOmMudmVyc2lvbn0pO3JldHVybn1jLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSk7bGV0IGg9bi5nZXQoYyk7aD09PXZvaWQgMD9uLnNldChjLGkoYyx1KSk6aC52ZXJzaW9uPGMudmVyc2lvbiYmKG8oaC5idWZmZXIsYyx1KSxoLnZlcnNpb249Yy52ZXJzaW9uKX1yZXR1cm57Z2V0OmEscmVtb3ZlOnMsdXBkYXRlOmx9fXZhciBVMD1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9MSxyPTEsbj0xLGk9MSl7c3VwZXIoKSx0aGlzLnR5cGU9IlBsYW5lR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17d2lkdGg6dCxoZWlnaHQ6cix3aWR0aFNlZ21lbnRzOm4saGVpZ2h0U2VnbWVudHM6aX07bGV0IG89dC8yLGE9ci8yLHM9TWF0aC5mbG9vcihuKSxsPU1hdGguZmxvb3IoaSksYz1zKzEsdT1sKzEsaD10L3MsZj1yL2wscD1bXSxkPVtdLGc9W10sXz1bXTtmb3IobGV0IHk9MDt5PHU7eSsrKXtsZXQgeD15KmYtYTtmb3IobGV0IGI9MDtiPGM7YisrKXtsZXQgUz1iKmgtbztkLnB1c2goUywteCwwKSxnLnB1c2goMCwwLDEpLF8ucHVzaChiL3MpLF8ucHVzaCgxLXkvbCl9fWZvcihsZXQgeT0wO3k8bDt5KyspZm9yKGxldCB4PTA7eDxzO3grKyl7bGV0IGI9eCtjKnksUz14K2MqKHkrMSksQz14KzErYyooeSsxKSxQPXgrMStjKnk7cC5wdXNoKGIsUyxQKSxwLnB1c2goUyxDLFApfXRoaXMuc2V0SW5kZXgocCksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoZCwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IHhlKGcsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKF8sMikpfXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IFUwKHQud2lkdGgsdC5oZWlnaHQsdC53aWR0aFNlZ21lbnRzLHQuaGVpZ2h0U2VnbWVudHMpfX0sd2ZyPWAjaWZkZWYgVVNFX0FMUEhBTUFQCglkaWZmdXNlQ29sb3IuYSAqPSB0ZXh0dXJlMkQoIGFscGhhTWFwLCB2VXYgKS5nOwojZW5kaWZgLFNmcj1gI2lmZGVmIFVTRV9BTFBIQU1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgYWxwaGFNYXA7CiNlbmRpZmAsTWZyPWAjaWZkZWYgVVNFX0FMUEhBVEVTVAoJaWYgKCBkaWZmdXNlQ29sb3IuYSA8IGFscGhhVGVzdCApIGRpc2NhcmQ7CiNlbmRpZmAsRWZyPWAjaWZkZWYgVVNFX0FMUEhBVEVTVAoJdW5pZm9ybSBmbG9hdCBhbHBoYVRlc3Q7CiNlbmRpZmAsVGZyPWAjaWZkZWYgVVNFX0FPTUFQCglmbG9hdCBhbWJpZW50T2NjbHVzaW9uID0gKCB0ZXh0dXJlMkQoIGFvTWFwLCB2VXYyICkuciAtIDEuMCApICogYW9NYXBJbnRlbnNpdHkgKyAxLjA7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKj0gYW1iaWVudE9jY2x1c2lvbjsKCSNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggU1RBTkRBUkQgKQoJCWZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTsKCQlyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICo9IGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggZG90TlYsIGFtYmllbnRPY2NsdXNpb24sIG1hdGVyaWFsLnJvdWdobmVzcyApOwoJI2VuZGlmCiNlbmRpZmAsQ2ZyPWAjaWZkZWYgVVNFX0FPTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBhb01hcDsKCXVuaWZvcm0gZmxvYXQgYW9NYXBJbnRlbnNpdHk7CiNlbmRpZmAsQWZyPSJ2ZWMzIHRyYW5zZm9ybWVkID0gdmVjMyggcG9zaXRpb24gKTsiLFBmcj1gdmVjMyBvYmplY3ROb3JtYWwgPSB2ZWMzKCBub3JtYWwgKTsKI2lmZGVmIFVTRV9UQU5HRU5UCgl2ZWMzIG9iamVjdFRhbmdlbnQgPSB2ZWMzKCB0YW5nZW50Lnh5eiApOwojZW5kaWZgLElmcj1gdmVjMyBCUkRGX0xhbWJlcnQoIGNvbnN0IGluIHZlYzMgZGlmZnVzZUNvbG9yICkgewoJcmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiBkaWZmdXNlQ29sb3I7Cn0KdmVjMyBGX1NjaGxpY2soIGNvbnN0IGluIHZlYzMgZjAsIGNvbnN0IGluIGZsb2F0IGY5MCwgY29uc3QgaW4gZmxvYXQgZG90VkggKSB7CglmbG9hdCBmcmVzbmVsID0gZXhwMiggKCAtIDUuNTU0NzMgKiBkb3RWSCAtIDYuOTgzMTYgKSAqIGRvdFZIICk7CglyZXR1cm4gZjAgKiAoIDEuMCAtIGZyZXNuZWwgKSArICggZjkwICogZnJlc25lbCApOwp9CmZsb2F0IFZfR0dYX1NtaXRoQ29ycmVsYXRlZCggY29uc3QgaW4gZmxvYXQgYWxwaGEsIGNvbnN0IGluIGZsb2F0IGRvdE5MLCBjb25zdCBpbiBmbG9hdCBkb3ROViApIHsKCWZsb2F0IGEyID0gcG93MiggYWxwaGEgKTsKCWZsb2F0IGd2ID0gZG90TkwgKiBzcXJ0KCBhMiArICggMS4wIC0gYTIgKSAqIHBvdzIoIGRvdE5WICkgKTsKCWZsb2F0IGdsID0gZG90TlYgKiBzcXJ0KCBhMiArICggMS4wIC0gYTIgKSAqIHBvdzIoIGRvdE5MICkgKTsKCXJldHVybiAwLjUgLyBtYXgoIGd2ICsgZ2wsIEVQU0lMT04gKTsKfQpmbG9hdCBEX0dHWCggY29uc3QgaW4gZmxvYXQgYWxwaGEsIGNvbnN0IGluIGZsb2F0IGRvdE5IICkgewoJZmxvYXQgYTIgPSBwb3cyKCBhbHBoYSApOwoJZmxvYXQgZGVub20gPSBwb3cyKCBkb3ROSCApICogKCBhMiAtIDEuMCApICsgMS4wOwoJcmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiBhMiAvIHBvdzIoIGRlbm9tICk7Cn0KdmVjMyBCUkRGX0dHWCggY29uc3QgaW4gdmVjMyBsaWdodERpciwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyBmMCwgY29uc3QgaW4gZmxvYXQgZjkwLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7CglmbG9hdCBhbHBoYSA9IHBvdzIoIHJvdWdobmVzcyApOwoJdmVjMyBoYWxmRGlyID0gbm9ybWFsaXplKCBsaWdodERpciArIHZpZXdEaXIgKTsKCWZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBsaWdodERpciApICk7CglmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7CglmbG9hdCBkb3ROSCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7CglmbG9hdCBkb3RWSCA9IHNhdHVyYXRlKCBkb3QoIHZpZXdEaXIsIGhhbGZEaXIgKSApOwoJdmVjMyBGID0gRl9TY2hsaWNrKCBmMCwgZjkwLCBkb3RWSCApOwoJZmxvYXQgViA9IFZfR0dYX1NtaXRoQ29ycmVsYXRlZCggYWxwaGEsIGRvdE5MLCBkb3ROViApOwoJZmxvYXQgRCA9IERfR0dYKCBhbHBoYSwgZG90TkggKTsKCXJldHVybiBGICogKCBWICogRCApOwp9CnZlYzIgTFRDX1V2KCBjb25zdCBpbiB2ZWMzIE4sIGNvbnN0IGluIHZlYzMgViwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkgewoJY29uc3QgZmxvYXQgTFVUX1NJWkUgPSA2NC4wOwoJY29uc3QgZmxvYXQgTFVUX1NDQUxFID0gKCBMVVRfU0laRSAtIDEuMCApIC8gTFVUX1NJWkU7Cgljb25zdCBmbG9hdCBMVVRfQklBUyA9IDAuNSAvIExVVF9TSVpFOwoJZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBOLCBWICkgKTsKCXZlYzIgdXYgPSB2ZWMyKCByb3VnaG5lc3MsIHNxcnQoIDEuMCAtIGRvdE5WICkgKTsKCXV2ID0gdXYgKiBMVVRfU0NBTEUgKyBMVVRfQklBUzsKCXJldHVybiB1djsKfQpmbG9hdCBMVENfQ2xpcHBlZFNwaGVyZUZvcm1GYWN0b3IoIGNvbnN0IGluIHZlYzMgZiApIHsKCWZsb2F0IGwgPSBsZW5ndGgoIGYgKTsKCXJldHVybiBtYXgoICggbCAqIGwgKyBmLnogKSAvICggbCArIDEuMCApLCAwLjAgKTsKfQp2ZWMzIExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29uc3QgaW4gdmVjMyB2MSwgY29uc3QgaW4gdmVjMyB2MiApIHsKCWZsb2F0IHggPSBkb3QoIHYxLCB2MiApOwoJZmxvYXQgeSA9IGFicyggeCApOwoJZmxvYXQgYSA9IDAuODU0Mzk4NSArICggMC40OTY1MTU1ICsgMC4wMTQ1MjA2ICogeSApICogeTsKCWZsb2F0IGIgPSAzLjQxNzU5NDAgKyAoIDQuMTYxNjcyNCArIHkgKSAqIHk7CglmbG9hdCB2ID0gYSAvIGI7CglmbG9hdCB0aGV0YV9zaW50aGV0YSA9ICggeCA+IDAuMCApID8gdiA6IDAuNSAqIGludmVyc2VzcXJ0KCBtYXgoIDEuMCAtIHggKiB4LCAxZS03ICkgKSAtIHY7CglyZXR1cm4gY3Jvc3MoIHYxLCB2MiApICogdGhldGFfc2ludGhldGE7Cn0KdmVjMyBMVENfRXZhbHVhdGUoIGNvbnN0IGluIHZlYzMgTiwgY29uc3QgaW4gdmVjMyBWLCBjb25zdCBpbiB2ZWMzIFAsIGNvbnN0IGluIG1hdDMgbUludiwgY29uc3QgaW4gdmVjMyByZWN0Q29vcmRzWyA0IF0gKSB7Cgl2ZWMzIHYxID0gcmVjdENvb3Jkc1sgMSBdIC0gcmVjdENvb3Jkc1sgMCBdOwoJdmVjMyB2MiA9IHJlY3RDb29yZHNbIDMgXSAtIHJlY3RDb29yZHNbIDAgXTsKCXZlYzMgbGlnaHROb3JtYWwgPSBjcm9zcyggdjEsIHYyICk7CglpZiggZG90KCBsaWdodE5vcm1hbCwgUCAtIHJlY3RDb29yZHNbIDAgXSApIDwgMC4wICkgcmV0dXJuIHZlYzMoIDAuMCApOwoJdmVjMyBUMSwgVDI7CglUMSA9IG5vcm1hbGl6ZSggViAtIE4gKiBkb3QoIFYsIE4gKSApOwoJVDIgPSAtIGNyb3NzKCBOLCBUMSApOwoJbWF0MyBtYXQgPSBtSW52ICogdHJhbnNwb3NlTWF0MyggbWF0MyggVDEsIFQyLCBOICkgKTsKCXZlYzMgY29vcmRzWyA0IF07Cgljb29yZHNbIDAgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMCBdIC0gUCApOwoJY29vcmRzWyAxIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDEgXSAtIFAgKTsKCWNvb3Jkc1sgMiBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAyIF0gLSBQICk7Cgljb29yZHNbIDMgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMyBdIC0gUCApOwoJY29vcmRzWyAwIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMCBdICk7Cgljb29yZHNbIDEgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAxIF0gKTsKCWNvb3Jkc1sgMiBdID0gbm9ybWFsaXplKCBjb29yZHNbIDIgXSApOwoJY29vcmRzWyAzIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMyBdICk7Cgl2ZWMzIHZlY3RvckZvcm1GYWN0b3IgPSB2ZWMzKCAwLjAgKTsKCXZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDAgXSwgY29vcmRzWyAxIF0gKTsKCXZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDEgXSwgY29vcmRzWyAyIF0gKTsKCXZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDIgXSwgY29vcmRzWyAzIF0gKTsKCXZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDMgXSwgY29vcmRzWyAwIF0gKTsKCWZsb2F0IHJlc3VsdCA9IExUQ19DbGlwcGVkU3BoZXJlRm9ybUZhY3RvciggdmVjdG9yRm9ybUZhY3RvciApOwoJcmV0dXJuIHZlYzMoIHJlc3VsdCApOwp9CmZsb2F0IEdfQmxpbm5QaG9uZ19JbXBsaWNpdCggKSB7CglyZXR1cm4gMC4yNTsKfQpmbG9hdCBEX0JsaW5uUGhvbmcoIGNvbnN0IGluIGZsb2F0IHNoaW5pbmVzcywgY29uc3QgaW4gZmxvYXQgZG90TkggKSB7CglyZXR1cm4gUkVDSVBST0NBTF9QSSAqICggc2hpbmluZXNzICogMC41ICsgMS4wICkgKiBwb3coIGRvdE5ILCBzaGluaW5lc3MgKTsKfQp2ZWMzIEJSREZfQmxpbm5QaG9uZyggY29uc3QgaW4gdmVjMyBsaWdodERpciwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyBzcGVjdWxhckNvbG9yLCBjb25zdCBpbiBmbG9hdCBzaGluaW5lc3MgKSB7Cgl2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApOwoJZmxvYXQgZG90TkggPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGhhbGZEaXIgKSApOwoJZmxvYXQgZG90VkggPSBzYXR1cmF0ZSggZG90KCB2aWV3RGlyLCBoYWxmRGlyICkgKTsKCXZlYzMgRiA9IEZfU2NobGljayggc3BlY3VsYXJDb2xvciwgMS4wLCBkb3RWSCApOwoJZmxvYXQgRyA9IEdfQmxpbm5QaG9uZ19JbXBsaWNpdCggKTsKCWZsb2F0IEQgPSBEX0JsaW5uUGhvbmcoIHNoaW5pbmVzcywgZG90TkggKTsKCXJldHVybiBGICogKCBHICogRCApOwp9CiNpZiBkZWZpbmVkKCBVU0VfU0hFRU4gKQpmbG9hdCBEX0NoYXJsaWUoIGZsb2F0IHJvdWdobmVzcywgZmxvYXQgZG90TkggKSB7CglmbG9hdCBhbHBoYSA9IHBvdzIoIHJvdWdobmVzcyApOwoJZmxvYXQgaW52QWxwaGEgPSAxLjAgLyBhbHBoYTsKCWZsb2F0IGNvczJoID0gZG90TkggKiBkb3ROSDsKCWZsb2F0IHNpbjJoID0gbWF4KCAxLjAgLSBjb3MyaCwgMC4wMDc4MTI1ICk7CglyZXR1cm4gKCAyLjAgKyBpbnZBbHBoYSApICogcG93KCBzaW4yaCwgaW52QWxwaGEgKiAwLjUgKSAvICggMi4wICogUEkgKTsKfQpmbG9hdCBWX05ldWJlbHQoIGZsb2F0IGRvdE5WLCBmbG9hdCBkb3ROTCApIHsKCXJldHVybiBzYXR1cmF0ZSggMS4wIC8gKCA0LjAgKiAoIGRvdE5MICsgZG90TlYgLSBkb3ROTCAqIGRvdE5WICkgKSApOwp9CnZlYzMgQlJERl9TaGVlbiggY29uc3QgaW4gdmVjMyBsaWdodERpciwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgdmVjMyBzaGVlbkNvbG9yLCBjb25zdCBpbiBmbG9hdCBzaGVlblJvdWdobmVzcyApIHsKCXZlYzMgaGFsZkRpciA9IG5vcm1hbGl6ZSggbGlnaHREaXIgKyB2aWV3RGlyICk7CglmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgbGlnaHREaXIgKSApOwoJZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApOwoJZmxvYXQgZG90TkggPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGhhbGZEaXIgKSApOwoJZmxvYXQgRCA9IERfQ2hhcmxpZSggc2hlZW5Sb3VnaG5lc3MsIGRvdE5IICk7CglmbG9hdCBWID0gVl9OZXViZWx0KCBkb3ROViwgZG90TkwgKTsKCXJldHVybiBzaGVlbkNvbG9yICogKCBEICogViApOwp9CiNlbmRpZmAsTGZyPWAjaWZkZWYgVVNFX0JVTVBNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGJ1bXBNYXA7Cgl1bmlmb3JtIGZsb2F0IGJ1bXBTY2FsZTsKCXZlYzIgZEhkeHlfZndkKCkgewoJCXZlYzIgZFNUZHggPSBkRmR4KCB2VXYgKTsKCQl2ZWMyIGRTVGR5ID0gZEZkeSggdlV2ICk7CgkJZmxvYXQgSGxsID0gYnVtcFNjYWxlICogdGV4dHVyZTJEKCBidW1wTWFwLCB2VXYgKS54OwoJCWZsb2F0IGRCeCA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICsgZFNUZHggKS54IC0gSGxsOwoJCWZsb2F0IGRCeSA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICsgZFNUZHkgKS54IC0gSGxsOwoJCXJldHVybiB2ZWMyKCBkQngsIGRCeSApOwoJfQoJdmVjMyBwZXJ0dXJiTm9ybWFsQXJiKCB2ZWMzIHN1cmZfcG9zLCB2ZWMzIHN1cmZfbm9ybSwgdmVjMiBkSGR4eSwgZmxvYXQgZmFjZURpcmVjdGlvbiApIHsKCQl2ZWMzIHZTaWdtYVggPSB2ZWMzKCBkRmR4KCBzdXJmX3Bvcy54ICksIGRGZHgoIHN1cmZfcG9zLnkgKSwgZEZkeCggc3VyZl9wb3MueiApICk7CgkJdmVjMyB2U2lnbWFZID0gdmVjMyggZEZkeSggc3VyZl9wb3MueCApLCBkRmR5KCBzdXJmX3Bvcy55ICksIGRGZHkoIHN1cmZfcG9zLnogKSApOwoJCXZlYzMgdk4gPSBzdXJmX25vcm07CgkJdmVjMyBSMSA9IGNyb3NzKCB2U2lnbWFZLCB2TiApOwoJCXZlYzMgUjIgPSBjcm9zcyggdk4sIHZTaWdtYVggKTsKCQlmbG9hdCBmRGV0ID0gZG90KCB2U2lnbWFYLCBSMSApICogZmFjZURpcmVjdGlvbjsKCQl2ZWMzIHZHcmFkID0gc2lnbiggZkRldCApICogKCBkSGR4eS54ICogUjEgKyBkSGR4eS55ICogUjIgKTsKCQlyZXR1cm4gbm9ybWFsaXplKCBhYnMoIGZEZXQgKSAqIHN1cmZfbm9ybSAtIHZHcmFkICk7Cgl9CiNlbmRpZmAsa2ZyPWAjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDAKCXZlYzQgcGxhbmU7CgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBVTklPTl9DTElQUElOR19QTEFORVM7IGkgKysgKSB7CgkJcGxhbmUgPSBjbGlwcGluZ1BsYW5lc1sgaSBdOwoJCWlmICggZG90KCB2Q2xpcFBvc2l0aW9uLCBwbGFuZS54eXogKSA+IHBsYW5lLncgKSBkaXNjYXJkOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNpZiBVTklPTl9DTElQUElOR19QTEFORVMgPCBOVU1fQ0xJUFBJTkdfUExBTkVTCgkJYm9vbCBjbGlwcGVkID0gdHJ1ZTsKCQkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0CgkJZm9yICggaW50IGkgPSBVTklPTl9DTElQUElOR19QTEFORVM7IGkgPCBOVU1fQ0xJUFBJTkdfUExBTkVTOyBpICsrICkgewoJCQlwbGFuZSA9IGNsaXBwaW5nUGxhbmVzWyBpIF07CgkJCWNsaXBwZWQgPSAoIGRvdCggdkNsaXBQb3NpdGlvbiwgcGxhbmUueHl6ICkgPiBwbGFuZS53ICkgJiYgY2xpcHBlZDsKCQl9CgkJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCQlpZiAoIGNsaXBwZWQgKSBkaXNjYXJkOwoJI2VuZGlmCiNlbmRpZmAsUmZyPWAjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDAKCXZhcnlpbmcgdmVjMyB2Q2xpcFBvc2l0aW9uOwoJdW5pZm9ybSB2ZWM0IGNsaXBwaW5nUGxhbmVzWyBOVU1fQ0xJUFBJTkdfUExBTkVTIF07CiNlbmRpZmAsTmZyPWAjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDAKCXZhcnlpbmcgdmVjMyB2Q2xpcFBvc2l0aW9uOwojZW5kaWZgLERmcj1gI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwCgl2Q2xpcFBvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKI2VuZGlmYCxPZnI9YCNpZiBkZWZpbmVkKCBVU0VfQ09MT1JfQUxQSEEgKQoJZGlmZnVzZUNvbG9yICo9IHZDb2xvcjsKI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SICkKCWRpZmZ1c2VDb2xvci5yZ2IgKj0gdkNvbG9yOwojZW5kaWZgLHpmcj1gI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApCgl2YXJ5aW5nIHZlYzQgdkNvbG9yOwojZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKQoJdmFyeWluZyB2ZWMzIHZDb2xvcjsKI2VuZGlmYCxGZnI9YCNpZiBkZWZpbmVkKCBVU0VfQ09MT1JfQUxQSEEgKQoJdmFyeWluZyB2ZWM0IHZDb2xvcjsKI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SICkgfHwgZGVmaW5lZCggVVNFX0lOU1RBTkNJTkdfQ09MT1IgKQoJdmFyeWluZyB2ZWMzIHZDb2xvcjsKI2VuZGlmYCxCZnI9YCNpZiBkZWZpbmVkKCBVU0VfQ09MT1JfQUxQSEEgKQoJdkNvbG9yID0gdmVjNCggMS4wICk7CiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApIHx8IGRlZmluZWQoIFVTRV9JTlNUQU5DSU5HX0NPTE9SICkKCXZDb2xvciA9IHZlYzMoIDEuMCApOwojZW5kaWYKI2lmZGVmIFVTRV9DT0xPUgoJdkNvbG9yICo9IGNvbG9yOwojZW5kaWYKI2lmZGVmIFVTRV9JTlNUQU5DSU5HX0NPTE9SCgl2Q29sb3IueHl6ICo9IGluc3RhbmNlQ29sb3IueHl6OwojZW5kaWZgLEhmcj1gI2RlZmluZSBQSSAzLjE0MTU5MjY1MzU4OTc5MwojZGVmaW5lIFBJMiA2LjI4MzE4NTMwNzE3OTU4NgojZGVmaW5lIFBJX0hBTEYgMS41NzA3OTYzMjY3OTQ4OTY2CiNkZWZpbmUgUkVDSVBST0NBTF9QSSAwLjMxODMwOTg4NjE4Mzc5MDcKI2RlZmluZSBSRUNJUFJPQ0FMX1BJMiAwLjE1OTE1NDk0MzA5MTg5NTM1CiNkZWZpbmUgRVBTSUxPTiAxZS02CiNpZm5kZWYgc2F0dXJhdGUKI2RlZmluZSBzYXR1cmF0ZSggYSApIGNsYW1wKCBhLCAwLjAsIDEuMCApCiNlbmRpZgojZGVmaW5lIHdoaXRlQ29tcGxlbWVudCggYSApICggMS4wIC0gc2F0dXJhdGUoIGEgKSApCmZsb2F0IHBvdzIoIGNvbnN0IGluIGZsb2F0IHggKSB7IHJldHVybiB4Kng7IH0KZmxvYXQgcG93MyggY29uc3QgaW4gZmxvYXQgeCApIHsgcmV0dXJuIHgqeCp4OyB9CmZsb2F0IHBvdzQoIGNvbnN0IGluIGZsb2F0IHggKSB7IGZsb2F0IHgyID0geCp4OyByZXR1cm4geDIqeDI7IH0KZmxvYXQgbWF4MyggY29uc3QgaW4gdmVjMyB2ICkgeyByZXR1cm4gbWF4KCBtYXgoIHYueCwgdi55ICksIHYueiApOyB9CmZsb2F0IGF2ZXJhZ2UoIGNvbnN0IGluIHZlYzMgY29sb3IgKSB7IHJldHVybiBkb3QoIGNvbG9yLCB2ZWMzKCAwLjMzMzMgKSApOyB9CmhpZ2hwIGZsb2F0IHJhbmQoIGNvbnN0IGluIHZlYzIgdXYgKSB7Cgljb25zdCBoaWdocCBmbG9hdCBhID0gMTIuOTg5OCwgYiA9IDc4LjIzMywgYyA9IDQzNzU4LjU0NTM7CgloaWdocCBmbG9hdCBkdCA9IGRvdCggdXYueHksIHZlYzIoIGEsYiApICksIHNuID0gbW9kKCBkdCwgUEkgKTsKCXJldHVybiBmcmFjdCggc2luKCBzbiApICogYyApOwp9CiNpZmRlZiBISUdIX1BSRUNJU0lPTgoJZmxvYXQgcHJlY2lzaW9uU2FmZUxlbmd0aCggdmVjMyB2ICkgeyByZXR1cm4gbGVuZ3RoKCB2ICk7IH0KI2Vsc2UKCWZsb2F0IHByZWNpc2lvblNhZmVMZW5ndGgoIHZlYzMgdiApIHsKCQlmbG9hdCBtYXhDb21wb25lbnQgPSBtYXgzKCBhYnMoIHYgKSApOwoJCXJldHVybiBsZW5ndGgoIHYgLyBtYXhDb21wb25lbnQgKSAqIG1heENvbXBvbmVudDsKCX0KI2VuZGlmCnN0cnVjdCBJbmNpZGVudExpZ2h0IHsKCXZlYzMgY29sb3I7Cgl2ZWMzIGRpcmVjdGlvbjsKCWJvb2wgdmlzaWJsZTsKfTsKc3RydWN0IFJlZmxlY3RlZExpZ2h0IHsKCXZlYzMgZGlyZWN0RGlmZnVzZTsKCXZlYzMgZGlyZWN0U3BlY3VsYXI7Cgl2ZWMzIGluZGlyZWN0RGlmZnVzZTsKCXZlYzMgaW5kaXJlY3RTcGVjdWxhcjsKfTsKc3RydWN0IEdlb21ldHJpY0NvbnRleHQgewoJdmVjMyBwb3NpdGlvbjsKCXZlYzMgbm9ybWFsOwoJdmVjMyB2aWV3RGlyOwojaWZkZWYgVVNFX0NMRUFSQ09BVAoJdmVjMyBjbGVhcmNvYXROb3JtYWw7CiNlbmRpZgp9Owp2ZWMzIHRyYW5zZm9ybURpcmVjdGlvbiggaW4gdmVjMyBkaXIsIGluIG1hdDQgbWF0cml4ICkgewoJcmV0dXJuIG5vcm1hbGl6ZSggKCBtYXRyaXggKiB2ZWM0KCBkaXIsIDAuMCApICkueHl6ICk7Cn0KdmVjMyBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7CglyZXR1cm4gbm9ybWFsaXplKCAoIHZlYzQoIGRpciwgMC4wICkgKiBtYXRyaXggKS54eXogKTsKfQptYXQzIHRyYW5zcG9zZU1hdDMoIGNvbnN0IGluIG1hdDMgbSApIHsKCW1hdDMgdG1wOwoJdG1wWyAwIF0gPSB2ZWMzKCBtWyAwIF0ueCwgbVsgMSBdLngsIG1bIDIgXS54ICk7Cgl0bXBbIDEgXSA9IHZlYzMoIG1bIDAgXS55LCBtWyAxIF0ueSwgbVsgMiBdLnkgKTsKCXRtcFsgMiBdID0gdmVjMyggbVsgMCBdLnosIG1bIDEgXS56LCBtWyAyIF0ueiApOwoJcmV0dXJuIHRtcDsKfQpmbG9hdCBsaW5lYXJUb1JlbGF0aXZlTHVtaW5hbmNlKCBjb25zdCBpbiB2ZWMzIGNvbG9yICkgewoJdmVjMyB3ZWlnaHRzID0gdmVjMyggMC4yMTI2LCAwLjcxNTIsIDAuMDcyMiApOwoJcmV0dXJuIGRvdCggd2VpZ2h0cywgY29sb3IucmdiICk7Cn0KYm9vbCBpc1BlcnNwZWN0aXZlTWF0cml4KCBtYXQ0IG0gKSB7CglyZXR1cm4gbVsgMiBdWyAzIF0gPT0gLSAxLjA7Cn0KdmVjMiBlcXVpcmVjdFV2KCBpbiB2ZWMzIGRpciApIHsKCWZsb2F0IHUgPSBhdGFuKCBkaXIueiwgZGlyLnggKSAqIFJFQ0lQUk9DQUxfUEkyICsgMC41OwoJZmxvYXQgdiA9IGFzaW4oIGNsYW1wKCBkaXIueSwgLSAxLjAsIDEuMCApICkgKiBSRUNJUFJPQ0FMX1BJICsgMC41OwoJcmV0dXJuIHZlYzIoIHUsIHYgKTsKfWAsVmZyPWAjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRV9VVgoJI2RlZmluZSBjdWJlVVZfbWF4TWlwTGV2ZWwgOC4wCgkjZGVmaW5lIGN1YmVVVl9taW5NaXBMZXZlbCA0LjAKCSNkZWZpbmUgY3ViZVVWX21heFRpbGVTaXplIDI1Ni4wCgkjZGVmaW5lIGN1YmVVVl9taW5UaWxlU2l6ZSAxNi4wCglmbG9hdCBnZXRGYWNlKCB2ZWMzIGRpcmVjdGlvbiApIHsKCQl2ZWMzIGFic0RpcmVjdGlvbiA9IGFicyggZGlyZWN0aW9uICk7CgkJZmxvYXQgZmFjZSA9IC0gMS4wOwoJCWlmICggYWJzRGlyZWN0aW9uLnggPiBhYnNEaXJlY3Rpb24ueiApIHsKCQkJaWYgKCBhYnNEaXJlY3Rpb24ueCA+IGFic0RpcmVjdGlvbi55ICkKCQkJCWZhY2UgPSBkaXJlY3Rpb24ueCA+IDAuMCA/IDAuMCA6IDMuMDsKCQkJZWxzZQoJCQkJZmFjZSA9IGRpcmVjdGlvbi55ID4gMC4wID8gMS4wIDogNC4wOwoJCX0gZWxzZSB7CgkJCWlmICggYWJzRGlyZWN0aW9uLnogPiBhYnNEaXJlY3Rpb24ueSApCgkJCQlmYWNlID0gZGlyZWN0aW9uLnogPiAwLjAgPyAyLjAgOiA1LjA7CgkJCWVsc2UKCQkJCWZhY2UgPSBkaXJlY3Rpb24ueSA+IDAuMCA/IDEuMCA6IDQuMDsKCQl9CgkJcmV0dXJuIGZhY2U7Cgl9Cgl2ZWMyIGdldFVWKCB2ZWMzIGRpcmVjdGlvbiwgZmxvYXQgZmFjZSApIHsKCQl2ZWMyIHV2OwoJCWlmICggZmFjZSA9PSAwLjAgKSB7CgkJCXV2ID0gdmVjMiggZGlyZWN0aW9uLnosIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi54ICk7CgkJfSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7CgkJCXV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueCwgLSBkaXJlY3Rpb24ueiApIC8gYWJzKCBkaXJlY3Rpb24ueSApOwoJCX0gZWxzZSBpZiAoIGZhY2UgPT0gMi4wICkgewoJCQl1diA9IHZlYzIoIC0gZGlyZWN0aW9uLngsIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi56ICk7CgkJfSBlbHNlIGlmICggZmFjZSA9PSAzLjAgKSB7CgkJCXV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnggKTsKCQl9IGVsc2UgaWYgKCBmYWNlID09IDQuMCApIHsKCQkJdXYgPSB2ZWMyKCAtIGRpcmVjdGlvbi54LCBkaXJlY3Rpb24ueiApIC8gYWJzKCBkaXJlY3Rpb24ueSApOwoJCX0gZWxzZSB7CgkJCXV2ID0gdmVjMiggZGlyZWN0aW9uLngsIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi56ICk7CgkJfQoJCXJldHVybiAwLjUgKiAoIHV2ICsgMS4wICk7Cgl9Cgl2ZWMzIGJpbGluZWFyQ3ViZVVWKCBzYW1wbGVyMkQgZW52TWFwLCB2ZWMzIGRpcmVjdGlvbiwgZmxvYXQgbWlwSW50ICkgewoJCWZsb2F0IGZhY2UgPSBnZXRGYWNlKCBkaXJlY3Rpb24gKTsKCQlmbG9hdCBmaWx0ZXJJbnQgPSBtYXgoIGN1YmVVVl9taW5NaXBMZXZlbCAtIG1pcEludCwgMC4wICk7CgkJbWlwSW50ID0gbWF4KCBtaXBJbnQsIGN1YmVVVl9taW5NaXBMZXZlbCApOwoJCWZsb2F0IGZhY2VTaXplID0gZXhwMiggbWlwSW50ICk7CgkJZmxvYXQgdGV4ZWxTaXplID0gMS4wIC8gKCAzLjAgKiBjdWJlVVZfbWF4VGlsZVNpemUgKTsKCQl2ZWMyIHV2ID0gZ2V0VVYoIGRpcmVjdGlvbiwgZmFjZSApICogKCBmYWNlU2l6ZSAtIDEuMCApICsgMC41OwoJCWlmICggZmFjZSA+IDIuMCApIHsKCQkJdXYueSArPSBmYWNlU2l6ZTsKCQkJZmFjZSAtPSAzLjA7CgkJfQoJCXV2LnggKz0gZmFjZSAqIGZhY2VTaXplOwoJCWlmICggbWlwSW50IDwgY3ViZVVWX21heE1pcExldmVsICkgewoJCQl1di55ICs9IDIuMCAqIGN1YmVVVl9tYXhUaWxlU2l6ZTsKCQl9CgkJdXYueSArPSBmaWx0ZXJJbnQgKiAyLjAgKiBjdWJlVVZfbWluVGlsZVNpemU7CgkJdXYueCArPSAzLjAgKiBtYXgoIDAuMCwgY3ViZVVWX21heFRpbGVTaXplIC0gMi4wICogZmFjZVNpemUgKTsKCQl1diAqPSB0ZXhlbFNpemU7CgkJcmV0dXJuIHRleHR1cmUyRCggZW52TWFwLCB1diApLnJnYjsKCX0KCSNkZWZpbmUgcjAgMS4wCgkjZGVmaW5lIHYwIDAuMzM5CgkjZGVmaW5lIG0wIC0gMi4wCgkjZGVmaW5lIHIxIDAuOAoJI2RlZmluZSB2MSAwLjI3NgoJI2RlZmluZSBtMSAtIDEuMAoJI2RlZmluZSByNCAwLjQKCSNkZWZpbmUgdjQgMC4wNDYKCSNkZWZpbmUgbTQgMi4wCgkjZGVmaW5lIHI1IDAuMzA1CgkjZGVmaW5lIHY1IDAuMDE2CgkjZGVmaW5lIG01IDMuMAoJI2RlZmluZSByNiAwLjIxCgkjZGVmaW5lIHY2IDAuMDAzOAoJI2RlZmluZSBtNiA0LjAKCWZsb2F0IHJvdWdobmVzc1RvTWlwKCBmbG9hdCByb3VnaG5lc3MgKSB7CgkJZmxvYXQgbWlwID0gMC4wOwoJCWlmICggcm91Z2huZXNzID49IHIxICkgewoJCQltaXAgPSAoIHIwIC0gcm91Z2huZXNzICkgKiAoIG0xIC0gbTAgKSAvICggcjAgLSByMSApICsgbTA7CgkJfSBlbHNlIGlmICggcm91Z2huZXNzID49IHI0ICkgewoJCQltaXAgPSAoIHIxIC0gcm91Z2huZXNzICkgKiAoIG00IC0gbTEgKSAvICggcjEgLSByNCApICsgbTE7CgkJfSBlbHNlIGlmICggcm91Z2huZXNzID49IHI1ICkgewoJCQltaXAgPSAoIHI0IC0gcm91Z2huZXNzICkgKiAoIG01IC0gbTQgKSAvICggcjQgLSByNSApICsgbTQ7CgkJfSBlbHNlIGlmICggcm91Z2huZXNzID49IHI2ICkgewoJCQltaXAgPSAoIHI1IC0gcm91Z2huZXNzICkgKiAoIG02IC0gbTUgKSAvICggcjUgLSByNiApICsgbTU7CgkJfSBlbHNlIHsKCQkJbWlwID0gLSAyLjAgKiBsb2cyKCAxLjE2ICogcm91Z2huZXNzICk7CQl9CgkJcmV0dXJuIG1pcDsKCX0KCXZlYzQgdGV4dHVyZUN1YmVVViggc2FtcGxlcjJEIGVudk1hcCwgdmVjMyBzYW1wbGVEaXIsIGZsb2F0IHJvdWdobmVzcyApIHsKCQlmbG9hdCBtaXAgPSBjbGFtcCggcm91Z2huZXNzVG9NaXAoIHJvdWdobmVzcyApLCBtMCwgY3ViZVVWX21heE1pcExldmVsICk7CgkJZmxvYXQgbWlwRiA9IGZyYWN0KCBtaXAgKTsKCQlmbG9hdCBtaXBJbnQgPSBmbG9vciggbWlwICk7CgkJdmVjMyBjb2xvcjAgPSBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXIsIG1pcEludCApOwoJCWlmICggbWlwRiA9PSAwLjAgKSB7CgkJCXJldHVybiB2ZWM0KCBjb2xvcjAsIDEuMCApOwoJCX0gZWxzZSB7CgkJCXZlYzMgY29sb3IxID0gYmlsaW5lYXJDdWJlVVYoIGVudk1hcCwgc2FtcGxlRGlyLCBtaXBJbnQgKyAxLjAgKTsKCQkJcmV0dXJuIHZlYzQoIG1peCggY29sb3IwLCBjb2xvcjEsIG1pcEYgKSwgMS4wICk7CgkJfQoJfQojZW5kaWZgLFVmcj1gdmVjMyB0cmFuc2Zvcm1lZE5vcm1hbCA9IG9iamVjdE5vcm1hbDsKI2lmZGVmIFVTRV9JTlNUQU5DSU5HCgltYXQzIG0gPSBtYXQzKCBpbnN0YW5jZU1hdHJpeCApOwoJdHJhbnNmb3JtZWROb3JtYWwgLz0gdmVjMyggZG90KCBtWyAwIF0sIG1bIDAgXSApLCBkb3QoIG1bIDEgXSwgbVsgMSBdICksIGRvdCggbVsgMiBdLCBtWyAyIF0gKSApOwoJdHJhbnNmb3JtZWROb3JtYWwgPSBtICogdHJhbnNmb3JtZWROb3JtYWw7CiNlbmRpZgp0cmFuc2Zvcm1lZE5vcm1hbCA9IG5vcm1hbE1hdHJpeCAqIHRyYW5zZm9ybWVkTm9ybWFsOwojaWZkZWYgRkxJUF9TSURFRAoJdHJhbnNmb3JtZWROb3JtYWwgPSAtIHRyYW5zZm9ybWVkTm9ybWFsOwojZW5kaWYKI2lmZGVmIFVTRV9UQU5HRU5UCgl2ZWMzIHRyYW5zZm9ybWVkVGFuZ2VudCA9ICggbW9kZWxWaWV3TWF0cml4ICogdmVjNCggb2JqZWN0VGFuZ2VudCwgMC4wICkgKS54eXo7CgkjaWZkZWYgRkxJUF9TSURFRAoJCXRyYW5zZm9ybWVkVGFuZ2VudCA9IC0gdHJhbnNmb3JtZWRUYW5nZW50OwoJI2VuZGlmCiNlbmRpZmAscWZyPWAjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgZGlzcGxhY2VtZW50TWFwOwoJdW5pZm9ybSBmbG9hdCBkaXNwbGFjZW1lbnRTY2FsZTsKCXVuaWZvcm0gZmxvYXQgZGlzcGxhY2VtZW50QmlhczsKI2VuZGlmYCxHZnI9YCNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQCgl0cmFuc2Zvcm1lZCArPSBub3JtYWxpemUoIG9iamVjdE5vcm1hbCApICogKCB0ZXh0dXJlMkQoIGRpc3BsYWNlbWVudE1hcCwgdlV2ICkueCAqIGRpc3BsYWNlbWVudFNjYWxlICsgZGlzcGxhY2VtZW50QmlhcyApOwojZW5kaWZgLFdmcj1gI2lmZGVmIFVTRV9FTUlTU0lWRU1BUAoJdmVjNCBlbWlzc2l2ZUNvbG9yID0gdGV4dHVyZTJEKCBlbWlzc2l2ZU1hcCwgdlV2ICk7Cgl0b3RhbEVtaXNzaXZlUmFkaWFuY2UgKj0gZW1pc3NpdmVDb2xvci5yZ2I7CiNlbmRpZmAsWWZyPWAjaWZkZWYgVVNFX0VNSVNTSVZFTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBlbWlzc2l2ZU1hcDsKI2VuZGlmYCxqZnI9ImdsX0ZyYWdDb2xvciA9IGxpbmVhclRvT3V0cHV0VGV4ZWwoIGdsX0ZyYWdDb2xvciApOyIsWGZyPWB2ZWM0IExpbmVhclRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlICkgewoJcmV0dXJuIHZhbHVlOwp9CnZlYzQgTGluZWFyVG9zUkdCKCBpbiB2ZWM0IHZhbHVlICkgewoJcmV0dXJuIHZlYzQoIG1peCggcG93KCB2YWx1ZS5yZ2IsIHZlYzMoIDAuNDE2NjYgKSApICogMS4wNTUgLSB2ZWMzKCAwLjA1NSApLCB2YWx1ZS5yZ2IgKiAxMi45MiwgdmVjMyggbGVzc1RoYW5FcXVhbCggdmFsdWUucmdiLCB2ZWMzKCAwLjAwMzEzMDggKSApICkgKSwgdmFsdWUuYSApOwp9YCwkZnI9YCNpZmRlZiBVU0VfRU5WTUFQCgkjaWZkZWYgRU5WX1dPUkxEUE9TCgkJdmVjMyBjYW1lcmFUb0ZyYWc7CgkJaWYgKCBpc09ydGhvZ3JhcGhpYyApIHsKCQkJY2FtZXJhVG9GcmFnID0gbm9ybWFsaXplKCB2ZWMzKCAtIHZpZXdNYXRyaXhbIDAgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDEgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDIgXVsgMiBdICkgKTsKCQl9IGVsc2UgewoJCQljYW1lcmFUb0ZyYWcgPSBub3JtYWxpemUoIHZXb3JsZFBvc2l0aW9uIC0gY2FtZXJhUG9zaXRpb24gKTsKCQl9CgkJdmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApOwoJCSNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OCgkJCXZlYzMgcmVmbGVjdFZlYyA9IHJlZmxlY3QoIGNhbWVyYVRvRnJhZywgd29ybGROb3JtYWwgKTsKCQkjZWxzZQoJCQl2ZWMzIHJlZmxlY3RWZWMgPSByZWZyYWN0KCBjYW1lcmFUb0ZyYWcsIHdvcmxkTm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTsKCQkjZW5kaWYKCSNlbHNlCgkJdmVjMyByZWZsZWN0VmVjID0gdlJlZmxlY3Q7CgkjZW5kaWYKCSNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFCgkJdmVjNCBlbnZDb2xvciA9IHRleHR1cmVDdWJlKCBlbnZNYXAsIHZlYzMoIGZsaXBFbnZNYXAgKiByZWZsZWN0VmVjLngsIHJlZmxlY3RWZWMueXogKSApOwoJI2VsaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApCgkJdmVjNCBlbnZDb2xvciA9IHRleHR1cmVDdWJlVVYoIGVudk1hcCwgcmVmbGVjdFZlYywgMC4wICk7CgkjZWxzZQoJCXZlYzQgZW52Q29sb3IgPSB2ZWM0KCAwLjAgKTsKCSNlbmRpZgoJI2lmZGVmIEVOVk1BUF9CTEVORElOR19NVUxUSVBMWQoJCW91dGdvaW5nTGlnaHQgPSBtaXgoIG91dGdvaW5nTGlnaHQsIG91dGdvaW5nTGlnaHQgKiBlbnZDb2xvci54eXosIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0aXZpdHkgKTsKCSNlbGlmIGRlZmluZWQoIEVOVk1BUF9CTEVORElOR19NSVggKQoJCW91dGdvaW5nTGlnaHQgPSBtaXgoIG91dGdvaW5nTGlnaHQsIGVudkNvbG9yLnh5eiwgc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eSApOwoJI2VsaWYgZGVmaW5lZCggRU5WTUFQX0JMRU5ESU5HX0FERCApCgkJb3V0Z29pbmdMaWdodCArPSBlbnZDb2xvci54eXogKiBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5OwoJI2VuZGlmCiNlbmRpZmAsS2ZyPWAjaWZkZWYgVVNFX0VOVk1BUAoJdW5pZm9ybSBmbG9hdCBlbnZNYXBJbnRlbnNpdHk7Cgl1bmlmb3JtIGZsb2F0IGZsaXBFbnZNYXA7CgkjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRQoJCXVuaWZvcm0gc2FtcGxlckN1YmUgZW52TWFwOwoJI2Vsc2UKCQl1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7CgkjZW5kaWYKCQojZW5kaWZgLFpmcj1gI2lmZGVmIFVTRV9FTlZNQVAKCXVuaWZvcm0gZmxvYXQgcmVmbGVjdGl2aXR5OwoJI2lmIGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQoIFBIT05HICkKCQkjZGVmaW5lIEVOVl9XT1JMRFBPUwoJI2VuZGlmCgkjaWZkZWYgRU5WX1dPUkxEUE9TCgkJdmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uOwoJCXVuaWZvcm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvOwoJI2Vsc2UKCQl2YXJ5aW5nIHZlYzMgdlJlZmxlY3Q7CgkjZW5kaWYKI2VuZGlmYCxKZnI9YCNpZmRlZiBVU0VfRU5WTUFQCgkjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHxkZWZpbmVkKCBQSE9ORyApCgkJI2RlZmluZSBFTlZfV09STERQT1MKCSNlbmRpZgoJI2lmZGVmIEVOVl9XT1JMRFBPUwoJCQoJCXZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjsKCSNlbHNlCgkJdmFyeWluZyB2ZWMzIHZSZWZsZWN0OwoJCXVuaWZvcm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvOwoJI2VuZGlmCiNlbmRpZmAsUWZyPWAjaWZkZWYgVVNFX0VOVk1BUAoJI2lmZGVmIEVOVl9XT1JMRFBPUwoJCXZXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7CgkjZWxzZQoJCXZlYzMgY2FtZXJhVG9WZXJ0ZXg7CgkJaWYgKCBpc09ydGhvZ3JhcGhpYyApIHsKCQkJY2FtZXJhVG9WZXJ0ZXggPSBub3JtYWxpemUoIHZlYzMoIC0gdmlld01hdHJpeFsgMCBdWyAyIF0sIC0gdmlld01hdHJpeFsgMSBdWyAyIF0sIC0gdmlld01hdHJpeFsgMiBdWyAyIF0gKSApOwoJCX0gZWxzZSB7CgkJCWNhbWVyYVRvVmVydGV4ID0gbm9ybWFsaXplKCB3b3JsZFBvc2l0aW9uLnh5eiAtIGNhbWVyYVBvc2l0aW9uICk7CgkJfQoJCXZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCB0cmFuc2Zvcm1lZE5vcm1hbCwgdmlld01hdHJpeCApOwoJCSNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OCgkJCXZSZWZsZWN0ID0gcmVmbGVjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsICk7CgkJI2Vsc2UKCQkJdlJlZmxlY3QgPSByZWZyYWN0KCBjYW1lcmFUb1ZlcnRleCwgd29ybGROb3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApOwoJCSNlbmRpZgoJI2VuZGlmCiNlbmRpZmAsdHByPWAjaWZkZWYgVVNFX0ZPRwoJdkZvZ0RlcHRoID0gLSBtdlBvc2l0aW9uLno7CiNlbmRpZmAsZXByPWAjaWZkZWYgVVNFX0ZPRwoJdmFyeWluZyBmbG9hdCB2Rm9nRGVwdGg7CiNlbmRpZmAscnByPWAjaWZkZWYgVVNFX0ZPRwoJI2lmZGVmIEZPR19FWFAyCgkJZmxvYXQgZm9nRmFjdG9yID0gMS4wIC0gZXhwKCAtIGZvZ0RlbnNpdHkgKiBmb2dEZW5zaXR5ICogdkZvZ0RlcHRoICogdkZvZ0RlcHRoICk7CgkjZWxzZQoJCWZsb2F0IGZvZ0ZhY3RvciA9IHNtb290aHN0ZXAoIGZvZ05lYXIsIGZvZ0ZhciwgdkZvZ0RlcHRoICk7CgkjZW5kaWYKCWdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoIGdsX0ZyYWdDb2xvci5yZ2IsIGZvZ0NvbG9yLCBmb2dGYWN0b3IgKTsKI2VuZGlmYCxucHI9YCNpZmRlZiBVU0VfRk9HCgl1bmlmb3JtIHZlYzMgZm9nQ29sb3I7Cgl2YXJ5aW5nIGZsb2F0IHZGb2dEZXB0aDsKCSNpZmRlZiBGT0dfRVhQMgoJCXVuaWZvcm0gZmxvYXQgZm9nRGVuc2l0eTsKCSNlbHNlCgkJdW5pZm9ybSBmbG9hdCBmb2dOZWFyOwoJCXVuaWZvcm0gZmxvYXQgZm9nRmFyOwoJI2VuZGlmCiNlbmRpZmAsaXByPWAjaWZkZWYgVVNFX0dSQURJRU5UTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBncmFkaWVudE1hcDsKI2VuZGlmCnZlYzMgZ2V0R3JhZGllbnRJcnJhZGlhbmNlKCB2ZWMzIG5vcm1hbCwgdmVjMyBsaWdodERpcmVjdGlvbiApIHsKCWZsb2F0IGRvdE5MID0gZG90KCBub3JtYWwsIGxpZ2h0RGlyZWN0aW9uICk7Cgl2ZWMyIGNvb3JkID0gdmVjMiggZG90TkwgKiAwLjUgKyAwLjUsIDAuMCApOwoJI2lmZGVmIFVTRV9HUkFESUVOVE1BUAoJCXJldHVybiB2ZWMzKCB0ZXh0dXJlMkQoIGdyYWRpZW50TWFwLCBjb29yZCApLnIgKTsKCSNlbHNlCgkJcmV0dXJuICggY29vcmQueCA8IDAuNyApID8gdmVjMyggMC43ICkgOiB2ZWMzKCAxLjAgKTsKCSNlbmRpZgp9YCxvcHI9YCNpZmRlZiBVU0VfTElHSFRNQVAKCXZlYzQgbGlnaHRNYXBUZXhlbCA9IHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKTsKCXZlYzMgbGlnaHRNYXBJcnJhZGlhbmNlID0gbGlnaHRNYXBUZXhlbC5yZ2IgKiBsaWdodE1hcEludGVuc2l0eTsKCSNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUUwoJCWxpZ2h0TWFwSXJyYWRpYW5jZSAqPSBQSTsKCSNlbmRpZgoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGxpZ2h0TWFwSXJyYWRpYW5jZTsKI2VuZGlmYCxhcHI9YCNpZmRlZiBVU0VfTElHSFRNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGxpZ2h0TWFwOwoJdW5pZm9ybSBmbG9hdCBsaWdodE1hcEludGVuc2l0eTsKI2VuZGlmYCxzcHI9YHZlYzMgZGlmZnVzZSA9IHZlYzMoIDEuMCApOwpHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5OwpnZW9tZXRyeS5wb3NpdGlvbiA9IG12UG9zaXRpb24ueHl6OwpnZW9tZXRyeS5ub3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7Cmdlb21ldHJ5LnZpZXdEaXIgPSAoIGlzT3J0aG9ncmFwaGljICkgPyB2ZWMzKCAwLCAwLCAxICkgOiBub3JtYWxpemUoIC1tdlBvc2l0aW9uLnh5eiApOwpHZW9tZXRyaWNDb250ZXh0IGJhY2tHZW9tZXRyeTsKYmFja0dlb21ldHJ5LnBvc2l0aW9uID0gZ2VvbWV0cnkucG9zaXRpb247CmJhY2tHZW9tZXRyeS5ub3JtYWwgPSAtZ2VvbWV0cnkubm9ybWFsOwpiYWNrR2VvbWV0cnkudmlld0RpciA9IGdlb21ldHJ5LnZpZXdEaXI7CnZMaWdodEZyb250ID0gdmVjMyggMC4wICk7CnZJbmRpcmVjdEZyb250ID0gdmVjMyggMC4wICk7CiNpZmRlZiBET1VCTEVfU0lERUQKCXZMaWdodEJhY2sgPSB2ZWMzKCAwLjAgKTsKCXZJbmRpcmVjdEJhY2sgPSB2ZWMzKCAwLjAgKTsKI2VuZGlmCkluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQ7CmZsb2F0IGRvdE5MOwp2ZWMzIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTsKdkluZGlyZWN0RnJvbnQgKz0gZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggYW1iaWVudExpZ2h0Q29sb3IgKTsKdkluZGlyZWN0RnJvbnQgKz0gZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGxpZ2h0UHJvYmUsIGdlb21ldHJ5Lm5vcm1hbCApOwojaWZkZWYgRE9VQkxFX1NJREVECgl2SW5kaXJlY3RCYWNrICs9IGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoIGFtYmllbnRMaWdodENvbG9yICk7Cgl2SW5kaXJlY3RCYWNrICs9IGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBsaWdodFByb2JlLCBiYWNrR2VvbWV0cnkubm9ybWFsICk7CiNlbmRpZgojaWYgTlVNX1BPSU5UX0xJR0hUUyA+IDAKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVFM7IGkgKysgKSB7CgkJZ2V0UG9pbnRMaWdodEluZm8oIHBvaW50TGlnaHRzWyBpIF0sIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApOwoJCWRvdE5MID0gZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApOwoJCWRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZSA9IGRpcmVjdExpZ2h0LmNvbG9yOwoJCXZMaWdodEZyb250ICs9IHNhdHVyYXRlKCBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlOwoJCSNpZmRlZiBET1VCTEVfU0lERUQKCQkJdkxpZ2h0QmFjayArPSBzYXR1cmF0ZSggLSBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlOwoJCSNlbmRpZgoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmCiNpZiBOVU1fU1BPVF9MSUdIVFMgPiAwCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVFM7IGkgKysgKSB7CgkJZ2V0U3BvdExpZ2h0SW5mbyggc3BvdExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTsKCQlkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTsKCQlkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjsKCQl2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTsKCQkjaWZkZWYgRE9VQkxFX1NJREVECgkJCXZMaWdodEJhY2sgKz0gc2F0dXJhdGUoIC0gZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTsKCQkjZW5kaWYKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZgojaWYgTlVNX0RJUl9MSUdIVFMgPiAwCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUUzsgaSArKyApIHsKCQlnZXREaXJlY3Rpb25hbExpZ2h0SW5mbyggZGlyZWN0aW9uYWxMaWdodHNbIGkgXSwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7CgkJZG90TkwgPSBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICk7CgkJZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlID0gZGlyZWN0TGlnaHQuY29sb3I7CgkJdkxpZ2h0RnJvbnQgKz0gc2F0dXJhdGUoIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7CgkJI2lmZGVmIERPVUJMRV9TSURFRAoJCQl2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7CgkJI2VuZGlmCgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWYKI2lmIE5VTV9IRU1JX0xJR0hUUyA+IDAKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9IRU1JX0xJR0hUUzsgaSArKyApIHsKCQl2SW5kaXJlY3RGcm9udCArPSBnZXRIZW1pc3BoZXJlTGlnaHRJcnJhZGlhbmNlKCBoZW1pc3BoZXJlTGlnaHRzWyBpIF0sIGdlb21ldHJ5Lm5vcm1hbCApOwoJCSNpZmRlZiBET1VCTEVfU0lERUQKCQkJdkluZGlyZWN0QmFjayArPSBnZXRIZW1pc3BoZXJlTGlnaHRJcnJhZGlhbmNlKCBoZW1pc3BoZXJlTGlnaHRzWyBpIF0sIGJhY2tHZW9tZXRyeS5ub3JtYWwgKTsKCQkjZW5kaWYKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZmAsbHByPWB1bmlmb3JtIGJvb2wgcmVjZWl2ZVNoYWRvdzsKdW5pZm9ybSB2ZWMzIGFtYmllbnRMaWdodENvbG9yOwp1bmlmb3JtIHZlYzMgbGlnaHRQcm9iZVsgOSBdOwp2ZWMzIHNoR2V0SXJyYWRpYW5jZUF0KCBpbiB2ZWMzIG5vcm1hbCwgaW4gdmVjMyBzaENvZWZmaWNpZW50c1sgOSBdICkgewoJZmxvYXQgeCA9IG5vcm1hbC54LCB5ID0gbm9ybWFsLnksIHogPSBub3JtYWwuejsKCXZlYzMgcmVzdWx0ID0gc2hDb2VmZmljaWVudHNbIDAgXSAqIDAuODg2MjI3OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyAxIF0gKiAyLjAgKiAwLjUxMTY2NCAqIHk7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDIgXSAqIDIuMCAqIDAuNTExNjY0ICogejsKCXJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMyBdICogMi4wICogMC41MTE2NjQgKiB4OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA0IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHggKiB5OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA1IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHkgKiB6OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA2IF0gKiAoIDAuNzQzMTI1ICogeiAqIHogLSAwLjI0NzcwOCApOwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA3IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHggKiB6OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA4IF0gKiAwLjQyOTA0MyAqICggeCAqIHggLSB5ICogeSApOwoJcmV0dXJuIHJlc3VsdDsKfQp2ZWMzIGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIGxpZ2h0UHJvYmVbIDkgXSwgY29uc3QgaW4gdmVjMyBub3JtYWwgKSB7Cgl2ZWMzIHdvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7Cgl2ZWMzIGlycmFkaWFuY2UgPSBzaEdldElycmFkaWFuY2VBdCggd29ybGROb3JtYWwsIGxpZ2h0UHJvYmUgKTsKCXJldHVybiBpcnJhZGlhbmNlOwp9CnZlYzMgZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggY29uc3QgaW4gdmVjMyBhbWJpZW50TGlnaHRDb2xvciApIHsKCXZlYzMgaXJyYWRpYW5jZSA9IGFtYmllbnRMaWdodENvbG9yOwoJcmV0dXJuIGlycmFkaWFuY2U7Cn0KZmxvYXQgZ2V0RGlzdGFuY2VBdHRlbnVhdGlvbiggY29uc3QgaW4gZmxvYXQgbGlnaHREaXN0YW5jZSwgY29uc3QgaW4gZmxvYXQgY3V0b2ZmRGlzdGFuY2UsIGNvbnN0IGluIGZsb2F0IGRlY2F5RXhwb25lbnQgKSB7CgkjaWYgZGVmaW5lZCAoIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFMgKQoJCWZsb2F0IGRpc3RhbmNlRmFsbG9mZiA9IDEuMCAvIG1heCggcG93KCBsaWdodERpc3RhbmNlLCBkZWNheUV4cG9uZW50ICksIDAuMDEgKTsKCQlpZiAoIGN1dG9mZkRpc3RhbmNlID4gMC4wICkgewoJCQlkaXN0YW5jZUZhbGxvZmYgKj0gcG93Miggc2F0dXJhdGUoIDEuMCAtIHBvdzQoIGxpZ2h0RGlzdGFuY2UgLyBjdXRvZmZEaXN0YW5jZSApICkgKTsKCQl9CgkJcmV0dXJuIGRpc3RhbmNlRmFsbG9mZjsKCSNlbHNlCgkJaWYgKCBjdXRvZmZEaXN0YW5jZSA+IDAuMCAmJiBkZWNheUV4cG9uZW50ID4gMC4wICkgewoJCQlyZXR1cm4gcG93KCBzYXR1cmF0ZSggLSBsaWdodERpc3RhbmNlIC8gY3V0b2ZmRGlzdGFuY2UgKyAxLjAgKSwgZGVjYXlFeHBvbmVudCApOwoJCX0KCQlyZXR1cm4gMS4wOwoJI2VuZGlmCn0KZmxvYXQgZ2V0U3BvdEF0dGVudWF0aW9uKCBjb25zdCBpbiBmbG9hdCBjb25lQ29zaW5lLCBjb25zdCBpbiBmbG9hdCBwZW51bWJyYUNvc2luZSwgY29uc3QgaW4gZmxvYXQgYW5nbGVDb3NpbmUgKSB7CglyZXR1cm4gc21vb3Roc3RlcCggY29uZUNvc2luZSwgcGVudW1icmFDb3NpbmUsIGFuZ2xlQ29zaW5lICk7Cn0KI2lmIE5VTV9ESVJfTElHSFRTID4gMAoJc3RydWN0IERpcmVjdGlvbmFsTGlnaHQgewoJCXZlYzMgZGlyZWN0aW9uOwoJCXZlYzMgY29sb3I7Cgl9OwoJdW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHRzWyBOVU1fRElSX0xJR0hUUyBdOwoJdm9pZCBnZXREaXJlY3Rpb25hbExpZ2h0SW5mbyggY29uc3QgaW4gRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBsaWdodCApIHsKCQlsaWdodC5jb2xvciA9IGRpcmVjdGlvbmFsTGlnaHQuY29sb3I7CgkJbGlnaHQuZGlyZWN0aW9uID0gZGlyZWN0aW9uYWxMaWdodC5kaXJlY3Rpb247CgkJbGlnaHQudmlzaWJsZSA9IHRydWU7Cgl9CiNlbmRpZgojaWYgTlVNX1BPSU5UX0xJR0hUUyA+IDAKCXN0cnVjdCBQb2ludExpZ2h0IHsKCQl2ZWMzIHBvc2l0aW9uOwoJCXZlYzMgY29sb3I7CgkJZmxvYXQgZGlzdGFuY2U7CgkJZmxvYXQgZGVjYXk7Cgl9OwoJdW5pZm9ybSBQb2ludExpZ2h0IHBvaW50TGlnaHRzWyBOVU1fUE9JTlRfTElHSFRTIF07Cgl2b2lkIGdldFBvaW50TGlnaHRJbmZvKCBjb25zdCBpbiBQb2ludExpZ2h0IHBvaW50TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGxpZ2h0ICkgewoJCXZlYzMgbFZlY3RvciA9IHBvaW50TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjsKCQlsaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTsKCQlmbG9hdCBsaWdodERpc3RhbmNlID0gbGVuZ3RoKCBsVmVjdG9yICk7CgkJbGlnaHQuY29sb3IgPSBwb2ludExpZ2h0LmNvbG9yOwoJCWxpZ2h0LmNvbG9yICo9IGdldERpc3RhbmNlQXR0ZW51YXRpb24oIGxpZ2h0RGlzdGFuY2UsIHBvaW50TGlnaHQuZGlzdGFuY2UsIHBvaW50TGlnaHQuZGVjYXkgKTsKCQlsaWdodC52aXNpYmxlID0gKCBsaWdodC5jb2xvciAhPSB2ZWMzKCAwLjAgKSApOwoJfQojZW5kaWYKI2lmIE5VTV9TUE9UX0xJR0hUUyA+IDAKCXN0cnVjdCBTcG90TGlnaHQgewoJCXZlYzMgcG9zaXRpb247CgkJdmVjMyBkaXJlY3Rpb247CgkJdmVjMyBjb2xvcjsKCQlmbG9hdCBkaXN0YW5jZTsKCQlmbG9hdCBkZWNheTsKCQlmbG9hdCBjb25lQ29zOwoJCWZsb2F0IHBlbnVtYnJhQ29zOwoJfTsKCXVuaWZvcm0gU3BvdExpZ2h0IHNwb3RMaWdodHNbIE5VTV9TUE9UX0xJR0hUUyBdOwoJdm9pZCBnZXRTcG90TGlnaHRJbmZvKCBjb25zdCBpbiBTcG90TGlnaHQgc3BvdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBsaWdodCApIHsKCQl2ZWMzIGxWZWN0b3IgPSBzcG90TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjsKCQlsaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTsKCQlmbG9hdCBhbmdsZUNvcyA9IGRvdCggbGlnaHQuZGlyZWN0aW9uLCBzcG90TGlnaHQuZGlyZWN0aW9uICk7CgkJZmxvYXQgc3BvdEF0dGVudWF0aW9uID0gZ2V0U3BvdEF0dGVudWF0aW9uKCBzcG90TGlnaHQuY29uZUNvcywgc3BvdExpZ2h0LnBlbnVtYnJhQ29zLCBhbmdsZUNvcyApOwoJCWlmICggc3BvdEF0dGVudWF0aW9uID4gMC4wICkgewoJCQlmbG9hdCBsaWdodERpc3RhbmNlID0gbGVuZ3RoKCBsVmVjdG9yICk7CgkJCWxpZ2h0LmNvbG9yID0gc3BvdExpZ2h0LmNvbG9yICogc3BvdEF0dGVudWF0aW9uOwoJCQlsaWdodC5jb2xvciAqPSBnZXREaXN0YW5jZUF0dGVudWF0aW9uKCBsaWdodERpc3RhbmNlLCBzcG90TGlnaHQuZGlzdGFuY2UsIHNwb3RMaWdodC5kZWNheSApOwoJCQlsaWdodC52aXNpYmxlID0gKCBsaWdodC5jb2xvciAhPSB2ZWMzKCAwLjAgKSApOwoJCX0gZWxzZSB7CgkJCWxpZ2h0LmNvbG9yID0gdmVjMyggMC4wICk7CgkJCWxpZ2h0LnZpc2libGUgPSBmYWxzZTsKCQl9Cgl9CiNlbmRpZgojaWYgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwCglzdHJ1Y3QgUmVjdEFyZWFMaWdodCB7CgkJdmVjMyBjb2xvcjsKCQl2ZWMzIHBvc2l0aW9uOwoJCXZlYzMgaGFsZldpZHRoOwoJCXZlYzMgaGFsZkhlaWdodDsKCX07Cgl1bmlmb3JtIHNhbXBsZXIyRCBsdGNfMTsJdW5pZm9ybSBzYW1wbGVyMkQgbHRjXzI7Cgl1bmlmb3JtIFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodHNbIE5VTV9SRUNUX0FSRUFfTElHSFRTIF07CiNlbmRpZgojaWYgTlVNX0hFTUlfTElHSFRTID4gMAoJc3RydWN0IEhlbWlzcGhlcmVMaWdodCB7CgkJdmVjMyBkaXJlY3Rpb247CgkJdmVjMyBza3lDb2xvcjsKCQl2ZWMzIGdyb3VuZENvbG9yOwoJfTsKCXVuaWZvcm0gSGVtaXNwaGVyZUxpZ2h0IGhlbWlzcGhlcmVMaWdodHNbIE5VTV9IRU1JX0xJR0hUUyBdOwoJdmVjMyBnZXRIZW1pc3BoZXJlTGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiBIZW1pc3BoZXJlTGlnaHQgaGVtaUxpZ2h0LCBjb25zdCBpbiB2ZWMzIG5vcm1hbCApIHsKCQlmbG9hdCBkb3ROTCA9IGRvdCggbm9ybWFsLCBoZW1pTGlnaHQuZGlyZWN0aW9uICk7CgkJZmxvYXQgaGVtaURpZmZ1c2VXZWlnaHQgPSAwLjUgKiBkb3ROTCArIDAuNTsKCQl2ZWMzIGlycmFkaWFuY2UgPSBtaXgoIGhlbWlMaWdodC5ncm91bmRDb2xvciwgaGVtaUxpZ2h0LnNreUNvbG9yLCBoZW1pRGlmZnVzZVdlaWdodCApOwoJCXJldHVybiBpcnJhZGlhbmNlOwoJfQojZW5kaWZgLGNwcj1gI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKQoJI2lmZGVmIEVOVk1BUF9NT0RFX1JFRlJBQ1RJT04KCQl1bmlmb3JtIGZsb2F0IHJlZnJhY3Rpb25SYXRpbzsKCSNlbmRpZgoJdmVjMyBnZXRJQkxJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCApIHsKCQkjaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApCgkJCXZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTsKCQkJdmVjNCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlVVYoIGVudk1hcCwgd29ybGROb3JtYWwsIDEuMCApOwoJCQlyZXR1cm4gUEkgKiBlbnZNYXBDb2xvci5yZ2IgKiBlbnZNYXBJbnRlbnNpdHk7CgkJI2Vsc2UKCQkJcmV0dXJuIHZlYzMoIDAuMCApOwoJCSNlbmRpZgoJfQoJdmVjMyBnZXRJQkxSYWRpYW5jZSggY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkgewoJCSNpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWICkKCQkJdmVjMyByZWZsZWN0VmVjOwoJCQkjaWZkZWYgRU5WTUFQX01PREVfUkVGTEVDVElPTgoJCQkJcmVmbGVjdFZlYyA9IHJlZmxlY3QoIC0gdmlld0Rpciwgbm9ybWFsICk7CgkJCQlyZWZsZWN0VmVjID0gbm9ybWFsaXplKCBtaXgoIHJlZmxlY3RWZWMsIG5vcm1hbCwgcm91Z2huZXNzICogcm91Z2huZXNzKSApOwoJCQkjZWxzZQoJCQkJcmVmbGVjdFZlYyA9IHJlZnJhY3QoIC0gdmlld0Rpciwgbm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTsKCQkJI2VuZGlmCgkJCXJlZmxlY3RWZWMgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCByZWZsZWN0VmVjLCB2aWV3TWF0cml4ICk7CgkJCXZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlQ3ViZVVWKCBlbnZNYXAsIHJlZmxlY3RWZWMsIHJvdWdobmVzcyApOwoJCQlyZXR1cm4gZW52TWFwQ29sb3IucmdiICogZW52TWFwSW50ZW5zaXR5OwoJCSNlbHNlCgkJCXJldHVybiB2ZWMzKCAwLjAgKTsKCQkjZW5kaWYKCX0KI2VuZGlmYCx1cHI9YFRvb25NYXRlcmlhbCBtYXRlcmlhbDsKbWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gZGlmZnVzZUNvbG9yLnJnYjtgLGhwcj1gdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CnN0cnVjdCBUb29uTWF0ZXJpYWwgewoJdmVjMyBkaWZmdXNlQ29sb3I7Cn07CnZvaWQgUkVfRGlyZWN0X1Rvb24oIGNvbnN0IGluIEluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFRvb25NYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7Cgl2ZWMzIGlycmFkaWFuY2UgPSBnZXRHcmFkaWVudElycmFkaWFuY2UoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKiBkaXJlY3RMaWdodC5jb2xvcjsKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0Kdm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfVG9vbiggY29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBUb29uTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkgewoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApOwp9CiNkZWZpbmUgUkVfRGlyZWN0CQkJCVJFX0RpcmVjdF9Ub29uCiNkZWZpbmUgUkVfSW5kaXJlY3REaWZmdXNlCQlSRV9JbmRpcmVjdERpZmZ1c2VfVG9vbgojZGVmaW5lIE1hdGVyaWFsX0xpZ2h0UHJvYmVMT0QoIG1hdGVyaWFsICkJKDApYCxmcHI9YEJsaW5uUGhvbmdNYXRlcmlhbCBtYXRlcmlhbDsKbWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gZGlmZnVzZUNvbG9yLnJnYjsKbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciA9IHNwZWN1bGFyOwptYXRlcmlhbC5zcGVjdWxhclNoaW5pbmVzcyA9IHNoaW5pbmVzczsKbWF0ZXJpYWwuc3BlY3VsYXJTdHJlbmd0aCA9IHNwZWN1bGFyU3RyZW5ndGg7YCxwcHI9YHZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwpzdHJ1Y3QgQmxpbm5QaG9uZ01hdGVyaWFsIHsKCXZlYzMgZGlmZnVzZUNvbG9yOwoJdmVjMyBzcGVjdWxhckNvbG9yOwoJZmxvYXQgc3BlY3VsYXJTaGluaW5lc3M7CglmbG9hdCBzcGVjdWxhclN0cmVuZ3RoOwp9Owp2b2lkIFJFX0RpcmVjdF9CbGlublBob25nKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBCbGlublBob25nTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkgewoJZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7Cgl2ZWMzIGlycmFkaWFuY2UgPSBkb3ROTCAqIGRpcmVjdExpZ2h0LmNvbG9yOwoJcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTsKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX0JsaW5uUGhvbmcoIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkubm9ybWFsLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhclNoaW5pbmVzcyApICogbWF0ZXJpYWwuc3BlY3VsYXJTdHJlbmd0aDsKfQp2b2lkIFJFX0luZGlyZWN0RGlmZnVzZV9CbGlublBob25nKCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIEJsaW5uUGhvbmdNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0KI2RlZmluZSBSRV9EaXJlY3QJCQkJUkVfRGlyZWN0X0JsaW5uUGhvbmcKI2RlZmluZSBSRV9JbmRpcmVjdERpZmZ1c2UJCVJFX0luZGlyZWN0RGlmZnVzZV9CbGlublBob25nCiNkZWZpbmUgTWF0ZXJpYWxfTGlnaHRQcm9iZUxPRCggbWF0ZXJpYWwgKQkoMClgLGRwcj1gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbDsKbWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gZGlmZnVzZUNvbG9yLnJnYiAqICggMS4wIC0gbWV0YWxuZXNzRmFjdG9yICk7CnZlYzMgZHh5ID0gbWF4KCBhYnMoIGRGZHgoIGdlb21ldHJ5Tm9ybWFsICkgKSwgYWJzKCBkRmR5KCBnZW9tZXRyeU5vcm1hbCApICkgKTsKZmxvYXQgZ2VvbWV0cnlSb3VnaG5lc3MgPSBtYXgoIG1heCggZHh5LngsIGR4eS55ICksIGR4eS56ICk7Cm1hdGVyaWFsLnJvdWdobmVzcyA9IG1heCggcm91Z2huZXNzRmFjdG9yLCAwLjA1MjUgKTttYXRlcmlhbC5yb3VnaG5lc3MgKz0gZ2VvbWV0cnlSb3VnaG5lc3M7Cm1hdGVyaWFsLnJvdWdobmVzcyA9IG1pbiggbWF0ZXJpYWwucm91Z2huZXNzLCAxLjAgKTsKI2lmZGVmIElPUgoJI2lmZGVmIFNQRUNVTEFSCgkJZmxvYXQgc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IgPSBzcGVjdWxhckludGVuc2l0eTsKCQl2ZWMzIHNwZWN1bGFyQ29sb3JGYWN0b3IgPSBzcGVjdWxhckNvbG9yOwoJCSNpZmRlZiBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVAKCQkJc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IgKj0gdGV4dHVyZTJEKCBzcGVjdWxhckludGVuc2l0eU1hcCwgdlV2ICkuYTsKCQkjZW5kaWYKCQkjaWZkZWYgVVNFX1NQRUNVTEFSQ09MT1JNQVAKCQkJc3BlY3VsYXJDb2xvckZhY3RvciAqPSB0ZXh0dXJlMkQoIHNwZWN1bGFyQ29sb3JNYXAsIHZVdiApLnJnYjsKCQkjZW5kaWYKCQltYXRlcmlhbC5zcGVjdWxhckY5MCA9IG1peCggc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IsIDEuMCwgbWV0YWxuZXNzRmFjdG9yICk7CgkjZWxzZQoJCWZsb2F0IHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yID0gMS4wOwoJCXZlYzMgc3BlY3VsYXJDb2xvckZhY3RvciA9IHZlYzMoIDEuMCApOwoJCW1hdGVyaWFsLnNwZWN1bGFyRjkwID0gMS4wOwoJI2VuZGlmCgltYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gbWl4KCBtaW4oIHBvdzIoICggaW9yIC0gMS4wICkgLyAoIGlvciArIDEuMCApICkgKiBzcGVjdWxhckNvbG9yRmFjdG9yLCB2ZWMzKCAxLjAgKSApICogc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IsIGRpZmZ1c2VDb2xvci5yZ2IsIG1ldGFsbmVzc0ZhY3RvciApOwojZWxzZQoJbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciA9IG1peCggdmVjMyggMC4wNCApLCBkaWZmdXNlQ29sb3IucmdiLCBtZXRhbG5lc3NGYWN0b3IgKTsKCW1hdGVyaWFsLnNwZWN1bGFyRjkwID0gMS4wOwojZW5kaWYKI2lmZGVmIFVTRV9DTEVBUkNPQVQKCW1hdGVyaWFsLmNsZWFyY29hdCA9IGNsZWFyY29hdDsKCW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IGNsZWFyY29hdFJvdWdobmVzczsKCW1hdGVyaWFsLmNsZWFyY29hdEYwID0gdmVjMyggMC4wNCApOwoJbWF0ZXJpYWwuY2xlYXJjb2F0RjkwID0gMS4wOwoJI2lmZGVmIFVTRV9DTEVBUkNPQVRNQVAKCQltYXRlcmlhbC5jbGVhcmNvYXQgKj0gdGV4dHVyZTJEKCBjbGVhcmNvYXRNYXAsIHZVdiApLng7CgkjZW5kaWYKCSNpZmRlZiBVU0VfQ0xFQVJDT0FUX1JPVUdITkVTU01BUAoJCW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyAqPSB0ZXh0dXJlMkQoIGNsZWFyY29hdFJvdWdobmVzc01hcCwgdlV2ICkueTsKCSNlbmRpZgoJbWF0ZXJpYWwuY2xlYXJjb2F0ID0gc2F0dXJhdGUoIG1hdGVyaWFsLmNsZWFyY29hdCApOwltYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgPSBtYXgoIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcywgMC4wNTI1ICk7CgltYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKz0gZ2VvbWV0cnlSb3VnaG5lc3M7CgltYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgPSBtaW4oIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcywgMS4wICk7CiNlbmRpZgojaWZkZWYgVVNFX1NIRUVOCgltYXRlcmlhbC5zaGVlbkNvbG9yID0gc2hlZW5Db2xvcjsKCSNpZmRlZiBVU0VfU0hFRU5DT0xPUk1BUAoJCW1hdGVyaWFsLnNoZWVuQ29sb3IgKj0gdGV4dHVyZTJEKCBzaGVlbkNvbG9yTWFwLCB2VXYgKS5yZ2I7CgkjZW5kaWYKCW1hdGVyaWFsLnNoZWVuUm91Z2huZXNzID0gY2xhbXAoIHNoZWVuUm91Z2huZXNzLCAwLjA3LCAxLjAgKTsKCSNpZmRlZiBVU0VfU0hFRU5ST1VHSE5FU1NNQVAKCQltYXRlcmlhbC5zaGVlblJvdWdobmVzcyAqPSB0ZXh0dXJlMkQoIHNoZWVuUm91Z2huZXNzTWFwLCB2VXYgKS5hOwoJI2VuZGlmCiNlbmRpZmAsbXByPWBzdHJ1Y3QgUGh5c2ljYWxNYXRlcmlhbCB7Cgl2ZWMzIGRpZmZ1c2VDb2xvcjsKCWZsb2F0IHJvdWdobmVzczsKCXZlYzMgc3BlY3VsYXJDb2xvcjsKCWZsb2F0IHNwZWN1bGFyRjkwOwoJI2lmZGVmIFVTRV9DTEVBUkNPQVQKCQlmbG9hdCBjbGVhcmNvYXQ7CgkJZmxvYXQgY2xlYXJjb2F0Um91Z2huZXNzOwoJCXZlYzMgY2xlYXJjb2F0RjA7CgkJZmxvYXQgY2xlYXJjb2F0RjkwOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1NIRUVOCgkJdmVjMyBzaGVlbkNvbG9yOwoJCWZsb2F0IHNoZWVuUm91Z2huZXNzOwoJI2VuZGlmCn07CnZlYzMgY2xlYXJjb2F0U3BlY3VsYXIgPSB2ZWMzKCAwLjAgKTsKdmVjMyBzaGVlblNwZWN1bGFyID0gdmVjMyggMC4wICk7CmZsb2F0IElCTFNoZWVuQlJERiggY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzKSB7CglmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7CglmbG9hdCByMiA9IHJvdWdobmVzcyAqIHJvdWdobmVzczsKCWZsb2F0IGEgPSByb3VnaG5lc3MgPCAwLjI1ID8gLTMzOS4yICogcjIgKyAxNjEuNCAqIHJvdWdobmVzcyAtIDI1LjkgOiAtOC40OCAqIHIyICsgMTQuMyAqIHJvdWdobmVzcyAtIDkuOTU7CglmbG9hdCBiID0gcm91Z2huZXNzIDwgMC4yNSA/IDQ0LjAgKiByMiAtIDIzLjcgKiByb3VnaG5lc3MgKyAzLjI2IDogMS45NyAqIHIyIC0gMy4yNyAqIHJvdWdobmVzcyArIDAuNzI7CglmbG9hdCBERyA9IGV4cCggYSAqIGRvdE5WICsgYiApICsgKCByb3VnaG5lc3MgPCAwLjI1ID8gMC4wIDogMC4xICogKCByb3VnaG5lc3MgLSAwLjI1ICkgKTsKCXJldHVybiBzYXR1cmF0ZSggREcgKiBSRUNJUFJPQ0FMX1BJICk7Cn0KdmVjMiBERkdBcHByb3goIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHsKCWZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTsKCWNvbnN0IHZlYzQgYzAgPSB2ZWM0KCAtIDEsIC0gMC4wMjc1LCAtIDAuNTcyLCAwLjAyMiApOwoJY29uc3QgdmVjNCBjMSA9IHZlYzQoIDEsIDAuMDQyNSwgMS4wNCwgLSAwLjA0ICk7Cgl2ZWM0IHIgPSByb3VnaG5lc3MgKiBjMCArIGMxOwoJZmxvYXQgYTAwNCA9IG1pbiggci54ICogci54LCBleHAyKCAtIDkuMjggKiBkb3ROViApICkgKiByLnggKyByLnk7Cgl2ZWMyIGZhYiA9IHZlYzIoIC0gMS4wNCwgMS4wNCApICogYTAwNCArIHIuenc7CglyZXR1cm4gZmFiOwp9CnZlYzMgRW52aXJvbm1lbnRCUkRGKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNwZWN1bGFyRjkwLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7Cgl2ZWMyIGZhYiA9IERGR0FwcHJveCggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTsKCXJldHVybiBzcGVjdWxhckNvbG9yICogZmFiLnggKyBzcGVjdWxhckY5MCAqIGZhYi55Owp9CnZvaWQgY29tcHV0ZU11bHRpc2NhdHRlcmluZyggY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gdmVjMyBzcGVjdWxhckNvbG9yLCBjb25zdCBpbiBmbG9hdCBzcGVjdWxhckY5MCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBpbm91dCB2ZWMzIHNpbmdsZVNjYXR0ZXIsIGlub3V0IHZlYzMgbXVsdGlTY2F0dGVyICkgewoJdmVjMiBmYWIgPSBERkdBcHByb3goIG5vcm1hbCwgdmlld0Rpciwgcm91Z2huZXNzICk7Cgl2ZWMzIEZzc0VzcyA9IHNwZWN1bGFyQ29sb3IgKiBmYWIueCArIHNwZWN1bGFyRjkwICogZmFiLnk7CglmbG9hdCBFc3MgPSBmYWIueCArIGZhYi55OwoJZmxvYXQgRW1zID0gMS4wIC0gRXNzOwoJdmVjMyBGYXZnID0gc3BlY3VsYXJDb2xvciArICggMS4wIC0gc3BlY3VsYXJDb2xvciApICogMC4wNDc2MTk7CXZlYzMgRm1zID0gRnNzRXNzICogRmF2ZyAvICggMS4wIC0gRW1zICogRmF2ZyApOwoJc2luZ2xlU2NhdHRlciArPSBGc3NFc3M7CgltdWx0aVNjYXR0ZXIgKz0gRm1zICogRW1zOwp9CiNpZiBOVU1fUkVDVF9BUkVBX0xJR0hUUyA+IDAKCXZvaWQgUkVfRGlyZWN0X1JlY3RBcmVhX1BoeXNpY2FsKCBjb25zdCBpbiBSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkgewoJCXZlYzMgbm9ybWFsID0gZ2VvbWV0cnkubm9ybWFsOwoJCXZlYzMgdmlld0RpciA9IGdlb21ldHJ5LnZpZXdEaXI7CgkJdmVjMyBwb3NpdGlvbiA9IGdlb21ldHJ5LnBvc2l0aW9uOwoJCXZlYzMgbGlnaHRQb3MgPSByZWN0QXJlYUxpZ2h0LnBvc2l0aW9uOwoJCXZlYzMgaGFsZldpZHRoID0gcmVjdEFyZWFMaWdodC5oYWxmV2lkdGg7CgkJdmVjMyBoYWxmSGVpZ2h0ID0gcmVjdEFyZWFMaWdodC5oYWxmSGVpZ2h0OwoJCXZlYzMgbGlnaHRDb2xvciA9IHJlY3RBcmVhTGlnaHQuY29sb3I7CgkJZmxvYXQgcm91Z2huZXNzID0gbWF0ZXJpYWwucm91Z2huZXNzOwoJCXZlYzMgcmVjdENvb3Jkc1sgNCBdOwoJCXJlY3RDb29yZHNbIDAgXSA9IGxpZ2h0UG9zICsgaGFsZldpZHRoIC0gaGFsZkhlaWdodDsJCXJlY3RDb29yZHNbIDEgXSA9IGxpZ2h0UG9zIC0gaGFsZldpZHRoIC0gaGFsZkhlaWdodDsKCQlyZWN0Q29vcmRzWyAyIF0gPSBsaWdodFBvcyAtIGhhbGZXaWR0aCArIGhhbGZIZWlnaHQ7CgkJcmVjdENvb3Jkc1sgMyBdID0gbGlnaHRQb3MgKyBoYWxmV2lkdGggKyBoYWxmSGVpZ2h0OwoJCXZlYzIgdXYgPSBMVENfVXYoIG5vcm1hbCwgdmlld0Rpciwgcm91Z2huZXNzICk7CgkJdmVjNCB0MSA9IHRleHR1cmUyRCggbHRjXzEsIHV2ICk7CgkJdmVjNCB0MiA9IHRleHR1cmUyRCggbHRjXzIsIHV2ICk7CgkJbWF0MyBtSW52ID0gbWF0MygKCQkJdmVjMyggdDEueCwgMCwgdDEueSApLAoJCQl2ZWMzKCAgICAwLCAxLCAgICAwICksCgkJCXZlYzMoIHQxLnosIDAsIHQxLncgKQoJCSk7CgkJdmVjMyBmcmVzbmVsID0gKCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yICogdDIueCArICggdmVjMyggMS4wICkgLSBtYXRlcmlhbC5zcGVjdWxhckNvbG9yICkgKiB0Mi55ICk7CgkJcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz0gbGlnaHRDb2xvciAqIGZyZXNuZWwgKiBMVENfRXZhbHVhdGUoIG5vcm1hbCwgdmlld0RpciwgcG9zaXRpb24sIG1JbnYsIHJlY3RDb29yZHMgKTsKCQlyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICs9IGxpZ2h0Q29sb3IgKiBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKiBMVENfRXZhbHVhdGUoIG5vcm1hbCwgdmlld0RpciwgcG9zaXRpb24sIG1hdDMoIDEuMCApLCByZWN0Q29vcmRzICk7Cgl9CiNlbmRpZgp2b2lkIFJFX0RpcmVjdF9QaHlzaWNhbCggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CglmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKTsKCXZlYzMgaXJyYWRpYW5jZSA9IGRvdE5MICogZGlyZWN0TGlnaHQuY29sb3I7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWZsb2F0IGRvdE5MY2MgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7CgkJdmVjMyBjY0lycmFkaWFuY2UgPSBkb3ROTGNjICogZGlyZWN0TGlnaHQuY29sb3I7CgkJY2xlYXJjb2F0U3BlY3VsYXIgKz0gY2NJcnJhZGlhbmNlICogQlJERl9HR1goIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBtYXRlcmlhbC5jbGVhcmNvYXRGMCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjkwLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKTsKCSNlbmRpZgoJI2lmZGVmIFVTRV9TSEVFTgoJCXNoZWVuU3BlY3VsYXIgKz0gaXJyYWRpYW5jZSAqIEJSREZfU2hlZW4oIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkubm9ybWFsLCBtYXRlcmlhbC5zaGVlbkNvbG9yLCBtYXRlcmlhbC5zaGVlblJvdWdobmVzcyApOwoJI2VuZGlmCglyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBpcnJhZGlhbmNlICogQlJERl9HR1goIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkubm9ybWFsLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCwgbWF0ZXJpYWwucm91Z2huZXNzICk7CglyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApOwp9CnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX1BoeXNpY2FsKCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkgewoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApOwp9CnZvaWQgUkVfSW5kaXJlY3RTcGVjdWxhcl9QaHlzaWNhbCggY29uc3QgaW4gdmVjMyByYWRpYW5jZSwgY29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBpbiB2ZWMzIGNsZWFyY29hdFJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCkgewoJI2lmZGVmIFVTRV9DTEVBUkNPQVQKCQljbGVhcmNvYXRTcGVjdWxhciArPSBjbGVhcmNvYXRSYWRpYW5jZSAqIEVudmlyb25tZW50QlJERiggZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5jbGVhcmNvYXRGMCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjkwLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKTsKCSNlbmRpZgoJI2lmZGVmIFVTRV9TSEVFTgoJCXNoZWVuU3BlY3VsYXIgKz0gaXJyYWRpYW5jZSAqIG1hdGVyaWFsLnNoZWVuQ29sb3IgKiBJQkxTaGVlbkJSREYoIGdlb21ldHJ5Lm5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciwgbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgKTsKCSNlbmRpZgoJdmVjMyBzaW5nbGVTY2F0dGVyaW5nID0gdmVjMyggMC4wICk7Cgl2ZWMzIG11bHRpU2NhdHRlcmluZyA9IHZlYzMoIDAuMCApOwoJdmVjMyBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2UgPSBpcnJhZGlhbmNlICogUkVDSVBST0NBTF9QSTsKCWNvbXB1dGVNdWx0aXNjYXR0ZXJpbmcoIGdlb21ldHJ5Lm5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJGOTAsIG1hdGVyaWFsLnJvdWdobmVzcywgc2luZ2xlU2NhdHRlcmluZywgbXVsdGlTY2F0dGVyaW5nICk7Cgl2ZWMzIGRpZmZ1c2UgPSBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKiAoIDEuMCAtICggc2luZ2xlU2NhdHRlcmluZyArIG11bHRpU2NhdHRlcmluZyApICk7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICs9IHJhZGlhbmNlICogc2luZ2xlU2NhdHRlcmluZzsKCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKz0gbXVsdGlTY2F0dGVyaW5nICogY29zaW5lV2VpZ2h0ZWRJcnJhZGlhbmNlOwoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGRpZmZ1c2UgKiBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2U7Cn0KI2RlZmluZSBSRV9EaXJlY3QJCQkJUkVfRGlyZWN0X1BoeXNpY2FsCiNkZWZpbmUgUkVfRGlyZWN0X1JlY3RBcmVhCQlSRV9EaXJlY3RfUmVjdEFyZWFfUGh5c2ljYWwKI2RlZmluZSBSRV9JbmRpcmVjdERpZmZ1c2UJCVJFX0luZGlyZWN0RGlmZnVzZV9QaHlzaWNhbAojZGVmaW5lIFJFX0luZGlyZWN0U3BlY3VsYXIJCVJFX0luZGlyZWN0U3BlY3VsYXJfUGh5c2ljYWwKZmxvYXQgY29tcHV0ZVNwZWN1bGFyT2NjbHVzaW9uKCBjb25zdCBpbiBmbG9hdCBkb3ROViwgY29uc3QgaW4gZmxvYXQgYW1iaWVudE9jY2x1c2lvbiwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkgewoJcmV0dXJuIHNhdHVyYXRlKCBwb3coIGRvdE5WICsgYW1iaWVudE9jY2x1c2lvbiwgZXhwMiggLSAxNi4wICogcm91Z2huZXNzIC0gMS4wICkgKSAtIDEuMCArIGFtYmllbnRPY2NsdXNpb24gKTsKfWAsZ3ByPWAKR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeTsKZ2VvbWV0cnkucG9zaXRpb24gPSAtIHZWaWV3UG9zaXRpb247Cmdlb21ldHJ5Lm5vcm1hbCA9IG5vcm1hbDsKZ2VvbWV0cnkudmlld0RpciA9ICggaXNPcnRob2dyYXBoaWMgKSA/IHZlYzMoIDAsIDAsIDEgKSA6IG5vcm1hbGl6ZSggdlZpZXdQb3NpdGlvbiApOwojaWZkZWYgVVNFX0NMRUFSQ09BVAoJZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsID0gY2xlYXJjb2F0Tm9ybWFsOwojZW5kaWYKSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodDsKI2lmICggTlVNX1BPSU5UX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKQoJUG9pbnRMaWdodCBwb2ludExpZ2h0OwoJI2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDAKCVBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodFNoYWRvdzsKCSNlbmRpZgoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUUzsgaSArKyApIHsKCQlwb2ludExpZ2h0ID0gcG9pbnRMaWdodHNbIGkgXTsKCQlnZXRQb2ludExpZ2h0SW5mbyggcG9pbnRMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7CgkJI2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiAoIFVOUk9MTEVEX0xPT1BfSU5ERVggPCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyApCgkJcG9pbnRMaWdodFNoYWRvdyA9IHBvaW50TGlnaHRTaGFkb3dzWyBpIF07CgkJZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggZGlyZWN0TGlnaHQudmlzaWJsZSwgcmVjZWl2ZVNoYWRvdyApICkgPyBnZXRQb2ludFNoYWRvdyggcG9pbnRTaGFkb3dNYXBbIGkgXSwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dNYXBTaXplLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0JpYXMsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93UmFkaXVzLCB2UG9pbnRTaGFkb3dDb29yZFsgaSBdLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYU5lYXIsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93Q2FtZXJhRmFyICkgOiAxLjA7CgkJI2VuZGlmCgkJUkVfRGlyZWN0KCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmCiNpZiAoIE5VTV9TUE9UX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKQoJU3BvdExpZ2h0IHNwb3RMaWdodDsKCSNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDAKCVNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHRTaGFkb3c7CgkjZW5kaWYKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUUzsgaSArKyApIHsKCQlzcG90TGlnaHQgPSBzcG90TGlnaHRzWyBpIF07CgkJZ2V0U3BvdExpZ2h0SW5mbyggc3BvdExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTsKCQkjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmICggVU5ST0xMRURfTE9PUF9JTkRFWCA8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgKQoJCXNwb3RMaWdodFNoYWRvdyA9IHNwb3RMaWdodFNoYWRvd3NbIGkgXTsKCQlkaXJlY3RMaWdodC5jb2xvciAqPSBhbGwoIGJ2ZWMyKCBkaXJlY3RMaWdodC52aXNpYmxlLCByZWNlaXZlU2hhZG93ICkgKSA/IGdldFNoYWRvdyggc3BvdFNoYWRvd01hcFsgaSBdLCBzcG90TGlnaHRTaGFkb3cuc2hhZG93TWFwU2l6ZSwgc3BvdExpZ2h0U2hhZG93LnNoYWRvd0JpYXMsIHNwb3RMaWdodFNoYWRvdy5zaGFkb3dSYWRpdXMsIHZTcG90U2hhZG93Q29vcmRbIGkgXSApIDogMS4wOwoJCSNlbmRpZgoJCVJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZgojaWYgKCBOVU1fRElSX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKQoJRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0OwoJI2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwCglEaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3c7CgkjZW5kaWYKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRTOyBpICsrICkgewoJCWRpcmVjdGlvbmFsTGlnaHQgPSBkaXJlY3Rpb25hbExpZ2h0c1sgaSBdOwoJCWdldERpcmVjdGlvbmFsTGlnaHRJbmZvKCBkaXJlY3Rpb25hbExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTsKCQkjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmICggVU5ST0xMRURfTE9PUF9JTkRFWCA8IE5VTV9ESVJfTElHSFRfU0hBRE9XUyApCgkJZGlyZWN0aW9uYWxMaWdodFNoYWRvdyA9IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBpIF07CgkJZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggZGlyZWN0TGlnaHQudmlzaWJsZSwgcmVjZWl2ZVNoYWRvdyApICkgPyBnZXRTaGFkb3coIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBpIF0sIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3cuc2hhZG93TWFwU2l6ZSwgZGlyZWN0aW9uYWxMaWdodFNoYWRvdy5zaGFkb3dCaWFzLCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93LnNoYWRvd1JhZGl1cywgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIGkgXSApIDogMS4wOwoJCSNlbmRpZgoJCVJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZgojaWYgKCBOVU1fUkVDVF9BUkVBX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3RfUmVjdEFyZWEgKQoJUmVjdEFyZWFMaWdodCByZWN0QXJlYUxpZ2h0OwoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1JFQ1RfQVJFQV9MSUdIVFM7IGkgKysgKSB7CgkJcmVjdEFyZWFMaWdodCA9IHJlY3RBcmVhTGlnaHRzWyBpIF07CgkJUkVfRGlyZWN0X1JlY3RBcmVhKCByZWN0QXJlYUxpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWYKI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApCgl2ZWMzIGlibElycmFkaWFuY2UgPSB2ZWMzKCAwLjAgKTsKCXZlYzMgaXJyYWRpYW5jZSA9IGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoIGFtYmllbnRMaWdodENvbG9yICk7CglpcnJhZGlhbmNlICs9IGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBsaWdodFByb2JlLCBnZW9tZXRyeS5ub3JtYWwgKTsKCSNpZiAoIE5VTV9IRU1JX0xJR0hUUyA+IDAgKQoJCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCQlmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fSEVNSV9MSUdIVFM7IGkgKysgKSB7CgkJCWlycmFkaWFuY2UgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sgaSBdLCBnZW9tZXRyeS5ub3JtYWwgKTsKCQl9CgkJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNlbmRpZgojZW5kaWYKI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKQoJdmVjMyByYWRpYW5jZSA9IHZlYzMoIDAuMCApOwoJdmVjMyBjbGVhcmNvYXRSYWRpYW5jZSA9IHZlYzMoIDAuMCApOwojZW5kaWZgLF9wcj1gI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApCgkjaWZkZWYgVVNFX0xJR0hUTUFQCgkJdmVjNCBsaWdodE1hcFRleGVsID0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApOwoJCXZlYzMgbGlnaHRNYXBJcnJhZGlhbmNlID0gbGlnaHRNYXBUZXhlbC5yZ2IgKiBsaWdodE1hcEludGVuc2l0eTsKCQkjaWZuZGVmIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFMKCQkJbGlnaHRNYXBJcnJhZGlhbmNlICo9IFBJOwoJCSNlbmRpZgoJCWlycmFkaWFuY2UgKz0gbGlnaHRNYXBJcnJhZGlhbmNlOwoJI2VuZGlmCgkjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFNUQU5EQVJEICkgJiYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApCgkJaWJsSXJyYWRpYW5jZSArPSBnZXRJQkxJcnJhZGlhbmNlKCBnZW9tZXRyeS5ub3JtYWwgKTsKCSNlbmRpZgojZW5kaWYKI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSAmJiBkZWZpbmVkKCBSRV9JbmRpcmVjdFNwZWN1bGFyICkKCXJhZGlhbmNlICs9IGdldElCTFJhZGlhbmNlKCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnJvdWdobmVzcyApOwoJI2lmZGVmIFVTRV9DTEVBUkNPQVQKCQljbGVhcmNvYXRSYWRpYW5jZSArPSBnZXRJQkxSYWRpYW5jZSggZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKTsKCSNlbmRpZgojZW5kaWZgLHlwcj1gI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApCglSRV9JbmRpcmVjdERpZmZ1c2UoIGlycmFkaWFuY2UsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTsKI2VuZGlmCiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdFNwZWN1bGFyICkKCVJFX0luZGlyZWN0U3BlY3VsYXIoIHJhZGlhbmNlLCBpYmxJcnJhZGlhbmNlLCBjbGVhcmNvYXRSYWRpYW5jZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApOwojZW5kaWZgLHZwcj1gI2lmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRiApICYmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRl9FWFQgKQoJZ2xfRnJhZ0RlcHRoRVhUID0gdklzUGVyc3BlY3RpdmUgPT0gMC4wID8gZ2xfRnJhZ0Nvb3JkLnogOiBsb2cyKCB2RnJhZ0RlcHRoICkgKiBsb2dEZXB0aEJ1ZkZDICogMC41OwojZW5kaWZgLHhwcj1gI2lmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRiApICYmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRl9FWFQgKQoJdW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDOwoJdmFyeWluZyBmbG9hdCB2RnJhZ0RlcHRoOwoJdmFyeWluZyBmbG9hdCB2SXNQZXJzcGVjdGl2ZTsKI2VuZGlmYCxicHI9YCNpZmRlZiBVU0VfTE9HREVQVEhCVUYKCSNpZmRlZiBVU0VfTE9HREVQVEhCVUZfRVhUCgkJdmFyeWluZyBmbG9hdCB2RnJhZ0RlcHRoOwoJCXZhcnlpbmcgZmxvYXQgdklzUGVyc3BlY3RpdmU7CgkjZWxzZQoJCXVuaWZvcm0gZmxvYXQgbG9nRGVwdGhCdWZGQzsKCSNlbmRpZgojZW5kaWZgLHdwcj1gI2lmZGVmIFVTRV9MT0dERVBUSEJVRgoJI2lmZGVmIFVTRV9MT0dERVBUSEJVRl9FWFQKCQl2RnJhZ0RlcHRoID0gMS4wICsgZ2xfUG9zaXRpb24udzsKCQl2SXNQZXJzcGVjdGl2ZSA9IGZsb2F0KCBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICkgKTsKCSNlbHNlCgkJaWYgKCBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICkgKSB7CgkJCWdsX1Bvc2l0aW9uLnogPSBsb2cyKCBtYXgoIEVQU0lMT04sIGdsX1Bvc2l0aW9uLncgKyAxLjAgKSApICogbG9nRGVwdGhCdWZGQyAtIDEuMDsKCQkJZ2xfUG9zaXRpb24ueiAqPSBnbF9Qb3NpdGlvbi53OwoJCX0KCSNlbmRpZgojZW5kaWZgLFNwcj1gI2lmZGVmIFVTRV9NQVAKCXZlYzQgc2FtcGxlZERpZmZ1c2VDb2xvciA9IHRleHR1cmUyRCggbWFwLCB2VXYgKTsKCSNpZmRlZiBERUNPREVfVklERU9fVEVYVFVSRQoJCXNhbXBsZWREaWZmdXNlQ29sb3IgPSB2ZWM0KCBtaXgoIHBvdyggc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IgKiAwLjk0Nzg2NzI5ODYgKyB2ZWMzKCAwLjA1MjEzMjcwMTQgKSwgdmVjMyggMi40ICkgKSwgc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IgKiAwLjA3NzM5OTM4MDgsIHZlYzMoIGxlc3NUaGFuRXF1YWwoIHNhbXBsZWREaWZmdXNlQ29sb3IucmdiLCB2ZWMzKCAwLjA0MDQ1ICkgKSApICksIHNhbXBsZWREaWZmdXNlQ29sb3IudyApOwoJI2VuZGlmCglkaWZmdXNlQ29sb3IgKj0gc2FtcGxlZERpZmZ1c2VDb2xvcjsKI2VuZGlmYCxNcHI9YCNpZmRlZiBVU0VfTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBtYXA7CiNlbmRpZmAsRXByPWAjaWYgZGVmaW5lZCggVVNFX01BUCApIHx8IGRlZmluZWQoIFVTRV9BTFBIQU1BUCApCgl2ZWMyIHV2ID0gKCB1dlRyYW5zZm9ybSAqIHZlYzMoIGdsX1BvaW50Q29vcmQueCwgMS4wIC0gZ2xfUG9pbnRDb29yZC55LCAxICkgKS54eTsKI2VuZGlmCiNpZmRlZiBVU0VfTUFQCglkaWZmdXNlQ29sb3IgKj0gdGV4dHVyZTJEKCBtYXAsIHV2ICk7CiNlbmRpZgojaWZkZWYgVVNFX0FMUEhBTUFQCglkaWZmdXNlQ29sb3IuYSAqPSB0ZXh0dXJlMkQoIGFscGhhTWFwLCB1diApLmc7CiNlbmRpZmAsVHByPWAjaWYgZGVmaW5lZCggVVNFX01BUCApIHx8IGRlZmluZWQoIFVTRV9BTFBIQU1BUCApCgl1bmlmb3JtIG1hdDMgdXZUcmFuc2Zvcm07CiNlbmRpZgojaWZkZWYgVVNFX01BUAoJdW5pZm9ybSBzYW1wbGVyMkQgbWFwOwojZW5kaWYKI2lmZGVmIFVTRV9BTFBIQU1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgYWxwaGFNYXA7CiNlbmRpZmAsQ3ByPWBmbG9hdCBtZXRhbG5lc3NGYWN0b3IgPSBtZXRhbG5lc3M7CiNpZmRlZiBVU0VfTUVUQUxORVNTTUFQCgl2ZWM0IHRleGVsTWV0YWxuZXNzID0gdGV4dHVyZTJEKCBtZXRhbG5lc3NNYXAsIHZVdiApOwoJbWV0YWxuZXNzRmFjdG9yICo9IHRleGVsTWV0YWxuZXNzLmI7CiNlbmRpZmAsQXByPWAjaWZkZWYgVVNFX01FVEFMTkVTU01BUAoJdW5pZm9ybSBzYW1wbGVyMkQgbWV0YWxuZXNzTWFwOwojZW5kaWZgLFBwcj1gI2lmZGVmIFVTRV9NT1JQSE5PUk1BTFMKCW9iamVjdE5vcm1hbCAqPSBtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2U7CgkjaWZkZWYgTU9SUEhUQVJHRVRTX1RFWFRVUkUKCQlmb3IgKCBpbnQgaSA9IDA7IGkgPCBNT1JQSFRBUkdFVFNfQ09VTlQ7IGkgKysgKSB7CgkJCWlmICggbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gIT0gMC4wICkgb2JqZWN0Tm9ybWFsICs9IGdldE1vcnBoKCBnbF9WZXJ0ZXhJRCwgaSwgMSwgMiApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF07CgkJfQoJI2Vsc2UKCQlvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwwICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAwIF07CgkJb2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMSBdOwoJCW9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDIgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDIgXTsKCQlvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwzICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAzIF07CgkjZW5kaWYKI2VuZGlmYCxJcHI9YCNpZmRlZiBVU0VfTU9SUEhUQVJHRVRTCgl1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTsKCSNpZmRlZiBNT1JQSFRBUkdFVFNfVEVYVFVSRQoJCXVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBNT1JQSFRBUkdFVFNfQ09VTlQgXTsKCQl1bmlmb3JtIHNhbXBsZXIyREFycmF5IG1vcnBoVGFyZ2V0c1RleHR1cmU7CgkJdW5pZm9ybSB2ZWMyIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplOwoJCXZlYzMgZ2V0TW9ycGgoIGNvbnN0IGluIGludCB2ZXJ0ZXhJbmRleCwgY29uc3QgaW4gaW50IG1vcnBoVGFyZ2V0SW5kZXgsIGNvbnN0IGluIGludCBvZmZzZXQsIGNvbnN0IGluIGludCBzdHJpZGUgKSB7CgkJCWZsb2F0IHRleGVsSW5kZXggPSBmbG9hdCggdmVydGV4SW5kZXggKiBzdHJpZGUgKyBvZmZzZXQgKTsKCQkJZmxvYXQgeSA9IGZsb29yKCB0ZXhlbEluZGV4IC8gbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueCApOwoJCQlmbG9hdCB4ID0gdGV4ZWxJbmRleCAtIHkgKiBtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZS54OwoJCQl2ZWMzIG1vcnBoVVYgPSB2ZWMzKCAoIHggKyAwLjUgKSAvIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLngsIHkgLyBtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZS55LCBtb3JwaFRhcmdldEluZGV4ICk7CgkJCXJldHVybiB0ZXh0dXJlKCBtb3JwaFRhcmdldHNUZXh0dXJlLCBtb3JwaFVWICkueHl6OwoJCX0KCSNlbHNlCgkJI2lmbmRlZiBVU0VfTU9SUEhOT1JNQUxTCgkJCXVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA4IF07CgkJI2Vsc2UKCQkJdW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDQgXTsKCQkjZW5kaWYKCSNlbmRpZgojZW5kaWZgLExwcj1gI2lmZGVmIFVTRV9NT1JQSFRBUkdFVFMKCXRyYW5zZm9ybWVkICo9IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTsKCSNpZmRlZiBNT1JQSFRBUkdFVFNfVEVYVFVSRQoJCWZvciAoIGludCBpID0gMDsgaSA8IE1PUlBIVEFSR0VUU19DT1VOVDsgaSArKyApIHsKCQkJI2lmbmRlZiBVU0VfTU9SUEhOT1JNQUxTCgkJCQlpZiAoIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdICE9IDAuMCApIHRyYW5zZm9ybWVkICs9IGdldE1vcnBoKCBnbF9WZXJ0ZXhJRCwgaSwgMCwgMSApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF07CgkJCSNlbHNlCgkJCQlpZiAoIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdICE9IDAuMCApIHRyYW5zZm9ybWVkICs9IGdldE1vcnBoKCBnbF9WZXJ0ZXhJRCwgaSwgMCwgMiApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF07CgkJCSNlbmRpZgoJCX0KCSNlbHNlCgkJdHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQwICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAwIF07CgkJdHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQxICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAxIF07CgkJdHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQyICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAyIF07CgkJdHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQzICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAzIF07CgkJI2lmbmRlZiBVU0VfTU9SUEhOT1JNQUxTCgkJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NCAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNCBdOwoJCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDUgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDUgXTsKCQkJdHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ2ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA2IF07CgkJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NyAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNyBdOwoJCSNlbmRpZgoJI2VuZGlmCiNlbmRpZmAsa3ByPWBmbG9hdCBmYWNlRGlyZWN0aW9uID0gZ2xfRnJvbnRGYWNpbmcgPyAxLjAgOiAtIDEuMDsKI2lmZGVmIEZMQVRfU0hBREVECgl2ZWMzIGZkeCA9IHZlYzMoIGRGZHgoIHZWaWV3UG9zaXRpb24ueCApLCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnkgKSwgZEZkeCggdlZpZXdQb3NpdGlvbi56ICkgKTsKCXZlYzMgZmR5ID0gdmVjMyggZEZkeSggdlZpZXdQb3NpdGlvbi54ICksIGRGZHkoIHZWaWV3UG9zaXRpb24ueSApLCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnogKSApOwoJdmVjMyBub3JtYWwgPSBub3JtYWxpemUoIGNyb3NzKCBmZHgsIGZkeSApICk7CiNlbHNlCgl2ZWMzIG5vcm1hbCA9IG5vcm1hbGl6ZSggdk5vcm1hbCApOwoJI2lmZGVmIERPVUJMRV9TSURFRAoJCW5vcm1hbCA9IG5vcm1hbCAqIGZhY2VEaXJlY3Rpb247CgkjZW5kaWYKCSNpZmRlZiBVU0VfVEFOR0VOVAoJCXZlYzMgdGFuZ2VudCA9IG5vcm1hbGl6ZSggdlRhbmdlbnQgKTsKCQl2ZWMzIGJpdGFuZ2VudCA9IG5vcm1hbGl6ZSggdkJpdGFuZ2VudCApOwoJCSNpZmRlZiBET1VCTEVfU0lERUQKCQkJdGFuZ2VudCA9IHRhbmdlbnQgKiBmYWNlRGlyZWN0aW9uOwoJCQliaXRhbmdlbnQgPSBiaXRhbmdlbnQgKiBmYWNlRGlyZWN0aW9uOwoJCSNlbmRpZgoJCSNpZiBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAgKQoJCQltYXQzIHZUQk4gPSBtYXQzKCB0YW5nZW50LCBiaXRhbmdlbnQsIG5vcm1hbCApOwoJCSNlbmRpZgoJI2VuZGlmCiNlbmRpZgp2ZWMzIGdlb21ldHJ5Tm9ybWFsID0gbm9ybWFsO2AsUnByPWAjaWZkZWYgT0JKRUNUU1BBQ0VfTk9STUFMTUFQCglub3JtYWwgPSB0ZXh0dXJlMkQoIG5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wOwoJI2lmZGVmIEZMSVBfU0lERUQKCQlub3JtYWwgPSAtIG5vcm1hbDsKCSNlbmRpZgoJI2lmZGVmIERPVUJMRV9TSURFRAoJCW5vcm1hbCA9IG5vcm1hbCAqIGZhY2VEaXJlY3Rpb247CgkjZW5kaWYKCW5vcm1hbCA9IG5vcm1hbGl6ZSggbm9ybWFsTWF0cml4ICogbm9ybWFsICk7CiNlbGlmIGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKQoJdmVjMyBtYXBOID0gdGV4dHVyZTJEKCBub3JtYWxNYXAsIHZVdiApLnh5eiAqIDIuMCAtIDEuMDsKCW1hcE4ueHkgKj0gbm9ybWFsU2NhbGU7CgkjaWZkZWYgVVNFX1RBTkdFTlQKCQlub3JtYWwgPSBub3JtYWxpemUoIHZUQk4gKiBtYXBOICk7CgkjZWxzZQoJCW5vcm1hbCA9IHBlcnR1cmJOb3JtYWwyQXJiKCAtIHZWaWV3UG9zaXRpb24sIG5vcm1hbCwgbWFwTiwgZmFjZURpcmVjdGlvbiApOwoJI2VuZGlmCiNlbGlmIGRlZmluZWQoIFVTRV9CVU1QTUFQICkKCW5vcm1hbCA9IHBlcnR1cmJOb3JtYWxBcmIoIC0gdlZpZXdQb3NpdGlvbiwgbm9ybWFsLCBkSGR4eV9md2QoKSwgZmFjZURpcmVjdGlvbiApOwojZW5kaWZgLE5wcj1gI2lmbmRlZiBGTEFUX1NIQURFRAoJdmFyeWluZyB2ZWMzIHZOb3JtYWw7CgkjaWZkZWYgVVNFX1RBTkdFTlQKCQl2YXJ5aW5nIHZlYzMgdlRhbmdlbnQ7CgkJdmFyeWluZyB2ZWMzIHZCaXRhbmdlbnQ7CgkjZW5kaWYKI2VuZGlmYCxEcHI9YCNpZm5kZWYgRkxBVF9TSEFERUQKCXZhcnlpbmcgdmVjMyB2Tm9ybWFsOwoJI2lmZGVmIFVTRV9UQU5HRU5UCgkJdmFyeWluZyB2ZWMzIHZUYW5nZW50OwoJCXZhcnlpbmcgdmVjMyB2Qml0YW5nZW50OwoJI2VuZGlmCiNlbmRpZmAsT3ByPWAjaWZuZGVmIEZMQVRfU0hBREVECgl2Tm9ybWFsID0gbm9ybWFsaXplKCB0cmFuc2Zvcm1lZE5vcm1hbCApOwoJI2lmZGVmIFVTRV9UQU5HRU5UCgkJdlRhbmdlbnQgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkVGFuZ2VudCApOwoJCXZCaXRhbmdlbnQgPSBub3JtYWxpemUoIGNyb3NzKCB2Tm9ybWFsLCB2VGFuZ2VudCApICogdGFuZ2VudC53ICk7CgkjZW5kaWYKI2VuZGlmYCx6cHI9YCNpZmRlZiBVU0VfTk9STUFMTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBub3JtYWxNYXA7Cgl1bmlmb3JtIHZlYzIgbm9ybWFsU2NhbGU7CiNlbmRpZgojaWZkZWYgT0JKRUNUU1BBQ0VfTk9STUFMTUFQCgl1bmlmb3JtIG1hdDMgbm9ybWFsTWF0cml4OwojZW5kaWYKI2lmICEgZGVmaW5lZCAoIFVTRV9UQU5HRU5UICkgJiYgKCBkZWZpbmVkICggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQgKCBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUCApICkKCXZlYzMgcGVydHVyYk5vcm1hbDJBcmIoIHZlYzMgZXllX3BvcywgdmVjMyBzdXJmX25vcm0sIHZlYzMgbWFwTiwgZmxvYXQgZmFjZURpcmVjdGlvbiApIHsKCQl2ZWMzIHEwID0gdmVjMyggZEZkeCggZXllX3Bvcy54ICksIGRGZHgoIGV5ZV9wb3MueSApLCBkRmR4KCBleWVfcG9zLnogKSApOwoJCXZlYzMgcTEgPSB2ZWMzKCBkRmR5KCBleWVfcG9zLnggKSwgZEZkeSggZXllX3Bvcy55ICksIGRGZHkoIGV5ZV9wb3MueiApICk7CgkJdmVjMiBzdDAgPSBkRmR4KCB2VXYuc3QgKTsKCQl2ZWMyIHN0MSA9IGRGZHkoIHZVdi5zdCApOwoJCXZlYzMgTiA9IHN1cmZfbm9ybTsKCQl2ZWMzIHExcGVycCA9IGNyb3NzKCBxMSwgTiApOwoJCXZlYzMgcTBwZXJwID0gY3Jvc3MoIE4sIHEwICk7CgkJdmVjMyBUID0gcTFwZXJwICogc3QwLnggKyBxMHBlcnAgKiBzdDEueDsKCQl2ZWMzIEIgPSBxMXBlcnAgKiBzdDAueSArIHEwcGVycCAqIHN0MS55OwoJCWZsb2F0IGRldCA9IG1heCggZG90KCBULCBUICksIGRvdCggQiwgQiApICk7CgkJZmxvYXQgc2NhbGUgPSAoIGRldCA9PSAwLjAgKSA/IDAuMCA6IGZhY2VEaXJlY3Rpb24gKiBpbnZlcnNlc3FydCggZGV0ICk7CgkJcmV0dXJuIG5vcm1hbGl6ZSggVCAqICggbWFwTi54ICogc2NhbGUgKSArIEIgKiAoIG1hcE4ueSAqIHNjYWxlICkgKyBOICogbWFwTi56ICk7Cgl9CiNlbmRpZmAsRnByPWAjaWZkZWYgVVNFX0NMRUFSQ09BVAoJdmVjMyBjbGVhcmNvYXROb3JtYWwgPSBnZW9tZXRyeU5vcm1hbDsKI2VuZGlmYCxCcHI9YCNpZmRlZiBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUAoJdmVjMyBjbGVhcmNvYXRNYXBOID0gdGV4dHVyZTJEKCBjbGVhcmNvYXROb3JtYWxNYXAsIHZVdiApLnh5eiAqIDIuMCAtIDEuMDsKCWNsZWFyY29hdE1hcE4ueHkgKj0gY2xlYXJjb2F0Tm9ybWFsU2NhbGU7CgkjaWZkZWYgVVNFX1RBTkdFTlQKCQljbGVhcmNvYXROb3JtYWwgPSBub3JtYWxpemUoIHZUQk4gKiBjbGVhcmNvYXRNYXBOICk7CgkjZWxzZQoJCWNsZWFyY29hdE5vcm1hbCA9IHBlcnR1cmJOb3JtYWwyQXJiKCAtIHZWaWV3UG9zaXRpb24sIGNsZWFyY29hdE5vcm1hbCwgY2xlYXJjb2F0TWFwTiwgZmFjZURpcmVjdGlvbiApOwoJI2VuZGlmCiNlbmRpZmAsSHByPWAjaWZkZWYgVVNFX0NMRUFSQ09BVE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgY2xlYXJjb2F0TWFwOwojZW5kaWYKI2lmZGVmIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBjbGVhcmNvYXRSb3VnaG5lc3NNYXA7CiNlbmRpZgojaWZkZWYgVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdE5vcm1hbE1hcDsKCXVuaWZvcm0gdmVjMiBjbGVhcmNvYXROb3JtYWxTY2FsZTsKI2VuZGlmYCxWcHI9YCNpZmRlZiBPUEFRVUUKZGlmZnVzZUNvbG9yLmEgPSAxLjA7CiNlbmRpZgojaWZkZWYgVVNFX1RSQU5TTUlTU0lPTgpkaWZmdXNlQ29sb3IuYSAqPSB0cmFuc21pc3Npb25BbHBoYSArIDAuMTsKI2VuZGlmCmdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7YCxVcHI9YHZlYzMgcGFja05vcm1hbFRvUkdCKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCApIHsKCXJldHVybiBub3JtYWxpemUoIG5vcm1hbCApICogMC41ICsgMC41Owp9CnZlYzMgdW5wYWNrUkdCVG9Ob3JtYWwoIGNvbnN0IGluIHZlYzMgcmdiICkgewoJcmV0dXJuIDIuMCAqIHJnYi54eXogLSAxLjA7Cn0KY29uc3QgZmxvYXQgUGFja1Vwc2NhbGUgPSAyNTYuIC8gMjU1Ljtjb25zdCBmbG9hdCBVbnBhY2tEb3duc2NhbGUgPSAyNTUuIC8gMjU2LjsKY29uc3QgdmVjMyBQYWNrRmFjdG9ycyA9IHZlYzMoIDI1Ni4gKiAyNTYuICogMjU2LiwgMjU2LiAqIDI1Ni4sIDI1Ni4gKTsKY29uc3QgdmVjNCBVbnBhY2tGYWN0b3JzID0gVW5wYWNrRG93bnNjYWxlIC8gdmVjNCggUGFja0ZhY3RvcnMsIDEuICk7CmNvbnN0IGZsb2F0IFNoaWZ0UmlnaHQ4ID0gMS4gLyAyNTYuOwp2ZWM0IHBhY2tEZXB0aFRvUkdCQSggY29uc3QgaW4gZmxvYXQgdiApIHsKCXZlYzQgciA9IHZlYzQoIGZyYWN0KCB2ICogUGFja0ZhY3RvcnMgKSwgdiApOwoJci55encgLT0gci54eXogKiBTaGlmdFJpZ2h0ODsJcmV0dXJuIHIgKiBQYWNrVXBzY2FsZTsKfQpmbG9hdCB1bnBhY2tSR0JBVG9EZXB0aCggY29uc3QgaW4gdmVjNCB2ICkgewoJcmV0dXJuIGRvdCggdiwgVW5wYWNrRmFjdG9ycyApOwp9CnZlYzQgcGFjazJIYWxmVG9SR0JBKCB2ZWMyIHYgKSB7Cgl2ZWM0IHIgPSB2ZWM0KCB2LngsIGZyYWN0KCB2LnggKiAyNTUuMCApLCB2LnksIGZyYWN0KCB2LnkgKiAyNTUuMCApICk7CglyZXR1cm4gdmVjNCggci54IC0gci55IC8gMjU1LjAsIHIueSwgci56IC0gci53IC8gMjU1LjAsIHIudyApOwp9CnZlYzIgdW5wYWNrUkdCQVRvMkhhbGYoIHZlYzQgdiApIHsKCXJldHVybiB2ZWMyKCB2LnggKyAoIHYueSAvIDI1NS4wICksIHYueiArICggdi53IC8gMjU1LjAgKSApOwp9CmZsb2F0IHZpZXdaVG9PcnRob2dyYXBoaWNEZXB0aCggY29uc3QgaW4gZmxvYXQgdmlld1osIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHsKCXJldHVybiAoIHZpZXdaICsgbmVhciApIC8gKCBuZWFyIC0gZmFyICk7Cn0KZmxvYXQgb3J0aG9ncmFwaGljRGVwdGhUb1ZpZXdaKCBjb25zdCBpbiBmbG9hdCBsaW5lYXJDbGlwWiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkgewoJcmV0dXJuIGxpbmVhckNsaXBaICogKCBuZWFyIC0gZmFyICkgLSBuZWFyOwp9CmZsb2F0IHZpZXdaVG9QZXJzcGVjdGl2ZURlcHRoKCBjb25zdCBpbiBmbG9hdCB2aWV3WiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkgewoJcmV0dXJuICggKCBuZWFyICsgdmlld1ogKSAqIGZhciApIC8gKCAoIGZhciAtIG5lYXIgKSAqIHZpZXdaICk7Cn0KZmxvYXQgcGVyc3BlY3RpdmVEZXB0aFRvVmlld1ooIGNvbnN0IGluIGZsb2F0IGludkNsaXBaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7CglyZXR1cm4gKCBuZWFyICogZmFyICkgLyAoICggZmFyIC0gbmVhciApICogaW52Q2xpcFogLSBmYXIgKTsKfWAscXByPWAjaWZkZWYgUFJFTVVMVElQTElFRF9BTFBIQQoJZ2xfRnJhZ0NvbG9yLnJnYiAqPSBnbF9GcmFnQ29sb3IuYTsKI2VuZGlmYCxHcHI9YHZlYzQgbXZQb3NpdGlvbiA9IHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTsKI2lmZGVmIFVTRV9JTlNUQU5DSU5HCgltdlBvc2l0aW9uID0gaW5zdGFuY2VNYXRyaXggKiBtdlBvc2l0aW9uOwojZW5kaWYKbXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIG12UG9zaXRpb247CmdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG12UG9zaXRpb247YCxXcHI9YCNpZmRlZiBESVRIRVJJTkcKCWdsX0ZyYWdDb2xvci5yZ2IgPSBkaXRoZXJpbmcoIGdsX0ZyYWdDb2xvci5yZ2IgKTsKI2VuZGlmYCxZcHI9YCNpZmRlZiBESVRIRVJJTkcKCXZlYzMgZGl0aGVyaW5nKCB2ZWMzIGNvbG9yICkgewoJCWZsb2F0IGdyaWRfcG9zaXRpb24gPSByYW5kKCBnbF9GcmFnQ29vcmQueHkgKTsKCQl2ZWMzIGRpdGhlcl9zaGlmdF9SR0IgPSB2ZWMzKCAwLjI1IC8gMjU1LjAsIC0wLjI1IC8gMjU1LjAsIDAuMjUgLyAyNTUuMCApOwoJCWRpdGhlcl9zaGlmdF9SR0IgPSBtaXgoIDIuMCAqIGRpdGhlcl9zaGlmdF9SR0IsIC0yLjAgKiBkaXRoZXJfc2hpZnRfUkdCLCBncmlkX3Bvc2l0aW9uICk7CgkJcmV0dXJuIGNvbG9yICsgZGl0aGVyX3NoaWZ0X1JHQjsKCX0KI2VuZGlmYCxqcHI9YGZsb2F0IHJvdWdobmVzc0ZhY3RvciA9IHJvdWdobmVzczsKI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVAKCXZlYzQgdGV4ZWxSb3VnaG5lc3MgPSB0ZXh0dXJlMkQoIHJvdWdobmVzc01hcCwgdlV2ICk7Cglyb3VnaG5lc3NGYWN0b3IgKj0gdGV4ZWxSb3VnaG5lc3MuZzsKI2VuZGlmYCxYcHI9YCNpZmRlZiBVU0VfUk9VR0hORVNTTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCByb3VnaG5lc3NNYXA7CiNlbmRpZmAsJHByPWAjaWZkZWYgVVNFX1NIQURPV01BUAoJI2lmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDAKCQl1bmlmb3JtIHNhbXBsZXIyRCBkaXJlY3Rpb25hbFNoYWRvd01hcFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07CgkJdmFyeWluZyB2ZWM0IHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTsKCQlzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodFNoYWRvdyB7CgkJCWZsb2F0IHNoYWRvd0JpYXM7CgkJCWZsb2F0IHNoYWRvd05vcm1hbEJpYXM7CgkJCWZsb2F0IHNoYWRvd1JhZGl1czsKCQkJdmVjMiBzaGFkb3dNYXBTaXplOwoJCX07CgkJdW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTsKCSNlbmRpZgoJI2lmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwCgkJdW5pZm9ybSBzYW1wbGVyMkQgc3BvdFNoYWRvd01hcFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdOwoJCXZhcnlpbmcgdmVjNCB2U3BvdFNoYWRvd0Nvb3JkWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07CgkJc3RydWN0IFNwb3RMaWdodFNoYWRvdyB7CgkJCWZsb2F0IHNoYWRvd0JpYXM7CgkJCWZsb2F0IHNoYWRvd05vcm1hbEJpYXM7CgkJCWZsb2F0IHNoYWRvd1JhZGl1czsKCQkJdmVjMiBzaGFkb3dNYXBTaXplOwoJCX07CgkJdW5pZm9ybSBTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0U2hhZG93c1sgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCgkjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwCgkJdW5pZm9ybSBzYW1wbGVyMkQgcG9pbnRTaGFkb3dNYXBbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07CgkJdmFyeWluZyB2ZWM0IHZQb2ludFNoYWRvd0Nvb3JkWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdOwoJCXN0cnVjdCBQb2ludExpZ2h0U2hhZG93IHsKCQkJZmxvYXQgc2hhZG93QmlhczsKCQkJZmxvYXQgc2hhZG93Tm9ybWFsQmlhczsKCQkJZmxvYXQgc2hhZG93UmFkaXVzOwoJCQl2ZWMyIHNoYWRvd01hcFNpemU7CgkJCWZsb2F0IHNoYWRvd0NhbWVyYU5lYXI7CgkJCWZsb2F0IHNoYWRvd0NhbWVyYUZhcjsKCQl9OwoJCXVuaWZvcm0gUG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0U2hhZG93c1sgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTsKCSNlbmRpZgoJZmxvYXQgdGV4dHVyZTJEQ29tcGFyZSggc2FtcGxlcjJEIGRlcHRocywgdmVjMiB1diwgZmxvYXQgY29tcGFyZSApIHsKCQlyZXR1cm4gc3RlcCggY29tcGFyZSwgdW5wYWNrUkdCQVRvRGVwdGgoIHRleHR1cmUyRCggZGVwdGhzLCB1diApICkgKTsKCX0KCXZlYzIgdGV4dHVyZTJERGlzdHJpYnV0aW9uKCBzYW1wbGVyMkQgc2hhZG93LCB2ZWMyIHV2ICkgewoJCXJldHVybiB1bnBhY2tSR0JBVG8ySGFsZiggdGV4dHVyZTJEKCBzaGFkb3csIHV2ICkgKTsKCX0KCWZsb2F0IFZTTVNoYWRvdyAoc2FtcGxlcjJEIHNoYWRvdywgdmVjMiB1diwgZmxvYXQgY29tcGFyZSApewoJCWZsb2F0IG9jY2x1c2lvbiA9IDEuMDsKCQl2ZWMyIGRpc3RyaWJ1dGlvbiA9IHRleHR1cmUyRERpc3RyaWJ1dGlvbiggc2hhZG93LCB1diApOwoJCWZsb2F0IGhhcmRfc2hhZG93ID0gc3RlcCggY29tcGFyZSAsIGRpc3RyaWJ1dGlvbi54ICk7CgkJaWYgKGhhcmRfc2hhZG93ICE9IDEuMCApIHsKCQkJZmxvYXQgZGlzdGFuY2UgPSBjb21wYXJlIC0gZGlzdHJpYnV0aW9uLnggOwoJCQlmbG9hdCB2YXJpYW5jZSA9IG1heCggMC4wMDAwMCwgZGlzdHJpYnV0aW9uLnkgKiBkaXN0cmlidXRpb24ueSApOwoJCQlmbG9hdCBzb2Z0bmVzc19wcm9iYWJpbGl0eSA9IHZhcmlhbmNlIC8gKHZhcmlhbmNlICsgZGlzdGFuY2UgKiBkaXN0YW5jZSApOwkJCXNvZnRuZXNzX3Byb2JhYmlsaXR5ID0gY2xhbXAoICggc29mdG5lc3NfcHJvYmFiaWxpdHkgLSAwLjMgKSAvICggMC45NSAtIDAuMyApLCAwLjAsIDEuMCApOwkJCW9jY2x1c2lvbiA9IGNsYW1wKCBtYXgoIGhhcmRfc2hhZG93LCBzb2Z0bmVzc19wcm9iYWJpbGl0eSApLCAwLjAsIDEuMCApOwoJCX0KCQlyZXR1cm4gb2NjbHVzaW9uOwoJfQoJZmxvYXQgZ2V0U2hhZG93KCBzYW1wbGVyMkQgc2hhZG93TWFwLCB2ZWMyIHNoYWRvd01hcFNpemUsIGZsb2F0IHNoYWRvd0JpYXMsIGZsb2F0IHNoYWRvd1JhZGl1cywgdmVjNCBzaGFkb3dDb29yZCApIHsKCQlmbG9hdCBzaGFkb3cgPSAxLjA7CgkJc2hhZG93Q29vcmQueHl6IC89IHNoYWRvd0Nvb3JkLnc7CgkJc2hhZG93Q29vcmQueiArPSBzaGFkb3dCaWFzOwoJCWJ2ZWM0IGluRnJ1c3R1bVZlYyA9IGJ2ZWM0ICggc2hhZG93Q29vcmQueCA+PSAwLjAsIHNoYWRvd0Nvb3JkLnggPD0gMS4wLCBzaGFkb3dDb29yZC55ID49IDAuMCwgc2hhZG93Q29vcmQueSA8PSAxLjAgKTsKCQlib29sIGluRnJ1c3R1bSA9IGFsbCggaW5GcnVzdHVtVmVjICk7CgkJYnZlYzIgZnJ1c3R1bVRlc3RWZWMgPSBidmVjMiggaW5GcnVzdHVtLCBzaGFkb3dDb29yZC56IDw9IDEuMCApOwoJCWJvb2wgZnJ1c3R1bVRlc3QgPSBhbGwoIGZydXN0dW1UZXN0VmVjICk7CgkJaWYgKCBmcnVzdHVtVGVzdCApIHsKCQkjaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGICkKCQkJdmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvIHNoYWRvd01hcFNpemU7CgkJCWZsb2F0IGR4MCA9IC0gdGV4ZWxTaXplLnggKiBzaGFkb3dSYWRpdXM7CgkJCWZsb2F0IGR5MCA9IC0gdGV4ZWxTaXplLnkgKiBzaGFkb3dSYWRpdXM7CgkJCWZsb2F0IGR4MSA9ICsgdGV4ZWxTaXplLnggKiBzaGFkb3dSYWRpdXM7CgkJCWZsb2F0IGR5MSA9ICsgdGV4ZWxTaXplLnkgKiBzaGFkb3dSYWRpdXM7CgkJCWZsb2F0IGR4MiA9IGR4MCAvIDIuMDsKCQkJZmxvYXQgZHkyID0gZHkwIC8gMi4wOwoJCQlmbG9hdCBkeDMgPSBkeDEgLyAyLjA7CgkJCWZsb2F0IGR5MyA9IGR5MSAvIDIuMDsKCQkJc2hhZG93ID0gKAoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MCwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MiwgZHkyICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTIgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDMsIGR5MiApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgzLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MiwgZHkzICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTMgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDMsIGR5MyApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MCwgZHkxICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTEgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIGR5MSApLCBzaGFkb3dDb29yZC56ICkKCQkJKSAqICggMS4wIC8gMTcuMCApOwoJCSNlbGlmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRl9TT0ZUICkKCQkJdmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvIHNoYWRvd01hcFNpemU7CgkJCWZsb2F0IGR4ID0gdGV4ZWxTaXplLng7CgkJCWZsb2F0IGR5ID0gdGV4ZWxTaXplLnk7CgkJCXZlYzIgdXYgPSBzaGFkb3dDb29yZC54eTsKCQkJdmVjMiBmID0gZnJhY3QoIHV2ICogc2hhZG93TWFwU2l6ZSArIDAuNSApOwoJCQl1diAtPSBmICogdGV4ZWxTaXplOwoJCQlzaGFkb3cgPSAoCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2LCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAwLjAsIGR5ICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdGV4ZWxTaXplLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApLCAKCQkJCQkgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApLAoJCQkJCSBmLnggKSArCgkJCQltaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwgCgkJCQkJIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgZHkgKSwgc2hhZG93Q29vcmQueiApLAoJCQkJCSBmLnggKSArCgkJCQltaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAwLjAsIC1keSApLCBzaGFkb3dDb29yZC56ICksIAoJCQkJCSB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMC4wLCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksCgkJCQkJIGYueSApICsKCQkJCW1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAtZHkgKSwgc2hhZG93Q29vcmQueiApLCAKCQkJCQkgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksCgkJCQkJIGYueSApICsKCQkJCW1peCggbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCAtZHkgKSwgc2hhZG93Q29vcmQueiApLCAKCQkJCQkJICB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIC1keSApLCBzaGFkb3dDb29yZC56ICksCgkJCQkJCSAgZi54ICksCgkJCQkJIG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLCAKCQkJCQkJICB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwKCQkJCQkJICBmLnggKSwKCQkJCQkgZi55ICkKCQkJKSAqICggMS4wIC8gOS4wICk7CgkJI2VsaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfVlNNICkKCQkJc2hhZG93ID0gVlNNU2hhZG93KCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5LCBzaGFkb3dDb29yZC56ICk7CgkJI2Vsc2UKCQkJc2hhZG93ID0gdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApOwoJCSNlbmRpZgoJCX0KCQlyZXR1cm4gc2hhZG93OwoJfQoJdmVjMiBjdWJlVG9VViggdmVjMyB2LCBmbG9hdCB0ZXhlbFNpemVZICkgewoJCXZlYzMgYWJzViA9IGFicyggdiApOwoJCWZsb2F0IHNjYWxlVG9DdWJlID0gMS4wIC8gbWF4KCBhYnNWLngsIG1heCggYWJzVi55LCBhYnNWLnogKSApOwoJCWFic1YgKj0gc2NhbGVUb0N1YmU7CgkJdiAqPSBzY2FsZVRvQ3ViZSAqICggMS4wIC0gMi4wICogdGV4ZWxTaXplWSApOwoJCXZlYzIgcGxhbmFyID0gdi54eTsKCQlmbG9hdCBhbG1vc3RBVGV4ZWwgPSAxLjUgKiB0ZXhlbFNpemVZOwoJCWZsb2F0IGFsbW9zdE9uZSA9IDEuMCAtIGFsbW9zdEFUZXhlbDsKCQlpZiAoIGFic1YueiA+PSBhbG1vc3RPbmUgKSB7CgkJCWlmICggdi56ID4gMC4wICkKCQkJCXBsYW5hci54ID0gNC4wIC0gdi54OwoJCX0gZWxzZSBpZiAoIGFic1YueCA+PSBhbG1vc3RPbmUgKSB7CgkJCWZsb2F0IHNpZ25YID0gc2lnbiggdi54ICk7CgkJCXBsYW5hci54ID0gdi56ICogc2lnblggKyAyLjAgKiBzaWduWDsKCQl9IGVsc2UgaWYgKCBhYnNWLnkgPj0gYWxtb3N0T25lICkgewoJCQlmbG9hdCBzaWduWSA9IHNpZ24oIHYueSApOwoJCQlwbGFuYXIueCA9IHYueCArIDIuMCAqIHNpZ25ZICsgMi4wOwoJCQlwbGFuYXIueSA9IHYueiAqIHNpZ25ZIC0gMi4wOwoJCX0KCQlyZXR1cm4gdmVjMiggMC4xMjUsIDAuMjUgKSAqIHBsYW5hciArIHZlYzIoIDAuMzc1LCAwLjc1ICk7Cgl9CglmbG9hdCBnZXRQb2ludFNoYWRvdyggc2FtcGxlcjJEIHNoYWRvd01hcCwgdmVjMiBzaGFkb3dNYXBTaXplLCBmbG9hdCBzaGFkb3dCaWFzLCBmbG9hdCBzaGFkb3dSYWRpdXMsIHZlYzQgc2hhZG93Q29vcmQsIGZsb2F0IHNoYWRvd0NhbWVyYU5lYXIsIGZsb2F0IHNoYWRvd0NhbWVyYUZhciApIHsKCQl2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gKCBzaGFkb3dNYXBTaXplICogdmVjMiggNC4wLCAyLjAgKSApOwoJCXZlYzMgbGlnaHRUb1Bvc2l0aW9uID0gc2hhZG93Q29vcmQueHl6OwoJCWZsb2F0IGRwID0gKCBsZW5ndGgoIGxpZ2h0VG9Qb3NpdGlvbiApIC0gc2hhZG93Q2FtZXJhTmVhciApIC8gKCBzaGFkb3dDYW1lcmFGYXIgLSBzaGFkb3dDYW1lcmFOZWFyICk7CQlkcCArPSBzaGFkb3dCaWFzOwoJCXZlYzMgYmQzRCA9IG5vcm1hbGl6ZSggbGlnaHRUb1Bvc2l0aW9uICk7CgkJI2lmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRiApIHx8IGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRl9TT0ZUICkgfHwgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfVlNNICkKCQkJdmVjMiBvZmZzZXQgPSB2ZWMyKCAtIDEsIDEgKSAqIHNoYWRvd1JhZGl1cyAqIHRleGVsU2l6ZS55OwoJCQlyZXR1cm4gKAoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eXksIHRleGVsU2l6ZS55ICksIGRwICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eXksIHRleGVsU2l6ZS55ICksIGRwICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eXgsIHRleGVsU2l6ZS55ICksIGRwICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eXgsIHRleGVsU2l6ZS55ICksIGRwICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh4eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl4eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh4eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl4eCwgdGV4ZWxTaXplLnkgKSwgZHAgKQoJCQkpICogKCAxLjAgLyA5LjAgKTsKCQkjZWxzZQoJCQlyZXR1cm4gdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCwgdGV4ZWxTaXplLnkgKSwgZHAgKTsKCQkjZW5kaWYKCX0KI2VuZGlmYCxLcHI9YCNpZmRlZiBVU0VfU0hBRE9XTUFQCgkjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMAoJCXVuaWZvcm0gbWF0NCBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07CgkJdmFyeWluZyB2ZWM0IHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTsKCQlzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodFNoYWRvdyB7CgkJCWZsb2F0IHNoYWRvd0JpYXM7CgkJCWZsb2F0IHNoYWRvd05vcm1hbEJpYXM7CgkJCWZsb2F0IHNoYWRvd1JhZGl1czsKCQkJdmVjMiBzaGFkb3dNYXBTaXplOwoJCX07CgkJdW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTsKCSNlbmRpZgoJI2lmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwCgkJdW5pZm9ybSBtYXQ0IHNwb3RTaGFkb3dNYXRyaXhbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdlNwb3RTaGFkb3dDb29yZFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdOwoJCXN0cnVjdCBTcG90TGlnaHRTaGFkb3cgewoJCQlmbG9hdCBzaGFkb3dCaWFzOwoJCQlmbG9hdCBzaGFkb3dOb3JtYWxCaWFzOwoJCQlmbG9hdCBzaGFkb3dSYWRpdXM7CgkJCXZlYzIgc2hhZG93TWFwU2l6ZTsKCQl9OwoJCXVuaWZvcm0gU3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodFNoYWRvd3NbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTsKCSNlbmRpZgoJI2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMAoJCXVuaWZvcm0gbWF0NCBwb2ludFNoYWRvd01hdHJpeFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdlBvaW50U2hhZG93Q29vcmRbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07CgkJc3RydWN0IFBvaW50TGlnaHRTaGFkb3cgewoJCQlmbG9hdCBzaGFkb3dCaWFzOwoJCQlmbG9hdCBzaGFkb3dOb3JtYWxCaWFzOwoJCQlmbG9hdCBzaGFkb3dSYWRpdXM7CgkJCXZlYzIgc2hhZG93TWFwU2l6ZTsKCQkJZmxvYXQgc2hhZG93Q2FtZXJhTmVhcjsKCQkJZmxvYXQgc2hhZG93Q2FtZXJhRmFyOwoJCX07CgkJdW5pZm9ybSBQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHRTaGFkb3dzWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCiNlbmRpZmAsWnByPWAjaWZkZWYgVVNFX1NIQURPV01BUAoJI2lmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDAgfHwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDAgfHwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwCgkJdmVjMyBzaGFkb3dXb3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHRyYW5zZm9ybWVkTm9ybWFsLCB2aWV3TWF0cml4ICk7CgkJdmVjNCBzaGFkb3dXb3JsZFBvc2l0aW9uOwoJI2VuZGlmCgkjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVF9TSEFET1dTOyBpICsrICkgewoJCXNoYWRvd1dvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uICsgdmVjNCggc2hhZG93V29ybGROb3JtYWwgKiBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgaSBdLnNoYWRvd05vcm1hbEJpYXMsIDAgKTsKCQl2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdID0gZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbIGkgXSAqIHNoYWRvd1dvcmxkUG9zaXRpb247Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJI2VuZGlmCgkjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDAKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJc2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIHNwb3RMaWdodFNoYWRvd3NbIGkgXS5zaGFkb3dOb3JtYWxCaWFzLCAwICk7CgkJdlNwb3RTaGFkb3dDb29yZFsgaSBdID0gc3BvdFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKCSNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDAKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTOyBpICsrICkgewoJCXNoYWRvd1dvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uICsgdmVjNCggc2hhZG93V29ybGROb3JtYWwgKiBwb2ludExpZ2h0U2hhZG93c1sgaSBdLnNoYWRvd05vcm1hbEJpYXMsIDAgKTsKCQl2UG9pbnRTaGFkb3dDb29yZFsgaSBdID0gcG9pbnRTaGFkb3dNYXRyaXhbIGkgXSAqIHNoYWRvd1dvcmxkUG9zaXRpb247Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJI2VuZGlmCiNlbmRpZmAsSnByPWBmbG9hdCBnZXRTaGFkb3dNYXNrKCkgewoJZmxvYXQgc2hhZG93ID0gMS4wOwoJI2lmZGVmIFVTRV9TSEFET1dNQVAKCSNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwCglEaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHQ7CgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJZGlyZWN0aW9uYWxMaWdodCA9IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBpIF07CgkJc2hhZG93ICo9IHJlY2VpdmVTaGFkb3cgPyBnZXRTaGFkb3coIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBpIF0sIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93TWFwU2l6ZSwgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dCaWFzLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd1JhZGl1cywgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIGkgXSApIDogMS4wOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNlbmRpZgoJI2lmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwCglTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0OwoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUzsgaSArKyApIHsKCQlzcG90TGlnaHQgPSBzcG90TGlnaHRTaGFkb3dzWyBpIF07CgkJc2hhZG93ICo9IHJlY2VpdmVTaGFkb3cgPyBnZXRTaGFkb3coIHNwb3RTaGFkb3dNYXBbIGkgXSwgc3BvdExpZ2h0LnNoYWRvd01hcFNpemUsIHNwb3RMaWdodC5zaGFkb3dCaWFzLCBzcG90TGlnaHQuc2hhZG93UmFkaXVzLCB2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKCSNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDAKCVBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodDsKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTOyBpICsrICkgewoJCXBvaW50TGlnaHQgPSBwb2ludExpZ2h0U2hhZG93c1sgaSBdOwoJCXNoYWRvdyAqPSByZWNlaXZlU2hhZG93ID8gZ2V0UG9pbnRTaGFkb3coIHBvaW50U2hhZG93TWFwWyBpIF0sIHBvaW50TGlnaHQuc2hhZG93TWFwU2l6ZSwgcG9pbnRMaWdodC5zaGFkb3dCaWFzLCBwb2ludExpZ2h0LnNoYWRvd1JhZGl1cywgdlBvaW50U2hhZG93Q29vcmRbIGkgXSwgcG9pbnRMaWdodC5zaGFkb3dDYW1lcmFOZWFyLCBwb2ludExpZ2h0LnNoYWRvd0NhbWVyYUZhciApIDogMS4wOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNlbmRpZgoJI2VuZGlmCglyZXR1cm4gc2hhZG93Owp9YCxRcHI9YCNpZmRlZiBVU0VfU0tJTk5JTkcKCW1hdDQgYm9uZU1hdFggPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueCApOwoJbWF0NCBib25lTWF0WSA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC55ICk7CgltYXQ0IGJvbmVNYXRaID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnogKTsKCW1hdDQgYm9uZU1hdFcgPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgudyApOwojZW5kaWZgLHRkcj1gI2lmZGVmIFVTRV9TS0lOTklORwoJdW5pZm9ybSBtYXQ0IGJpbmRNYXRyaXg7Cgl1bmlmb3JtIG1hdDQgYmluZE1hdHJpeEludmVyc2U7CgkjaWZkZWYgQk9ORV9URVhUVVJFCgkJdW5pZm9ybSBoaWdocCBzYW1wbGVyMkQgYm9uZVRleHR1cmU7CgkJdW5pZm9ybSBpbnQgYm9uZVRleHR1cmVTaXplOwoJCW1hdDQgZ2V0Qm9uZU1hdHJpeCggY29uc3QgaW4gZmxvYXQgaSApIHsKCQkJZmxvYXQgaiA9IGkgKiA0LjA7CgkJCWZsb2F0IHggPSBtb2QoIGosIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKSApOwoJCQlmbG9hdCB5ID0gZmxvb3IoIGogLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICkgKTsKCQkJZmxvYXQgZHggPSAxLjAgLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICk7CgkJCWZsb2F0IGR5ID0gMS4wIC8gZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApOwoJCQl5ID0gZHkgKiAoIHkgKyAwLjUgKTsKCQkJdmVjNCB2MSA9IHRleHR1cmUyRCggYm9uZVRleHR1cmUsIHZlYzIoIGR4ICogKCB4ICsgMC41ICksIHkgKSApOwoJCQl2ZWM0IHYyID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAxLjUgKSwgeSApICk7CgkJCXZlYzQgdjMgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDIuNSApLCB5ICkgKTsKCQkJdmVjNCB2NCA9IHRleHR1cmUyRCggYm9uZVRleHR1cmUsIHZlYzIoIGR4ICogKCB4ICsgMy41ICksIHkgKSApOwoJCQltYXQ0IGJvbmUgPSBtYXQ0KCB2MSwgdjIsIHYzLCB2NCApOwoJCQlyZXR1cm4gYm9uZTsKCQl9CgkjZWxzZQoJCXVuaWZvcm0gbWF0NCBib25lTWF0cmljZXNbIE1BWF9CT05FUyBdOwoJCW1hdDQgZ2V0Qm9uZU1hdHJpeCggY29uc3QgaW4gZmxvYXQgaSApIHsKCQkJbWF0NCBib25lID0gYm9uZU1hdHJpY2VzWyBpbnQoaSkgXTsKCQkJcmV0dXJuIGJvbmU7CgkJfQoJI2VuZGlmCiNlbmRpZmAsZWRyPWAjaWZkZWYgVVNFX1NLSU5OSU5HCgl2ZWM0IHNraW5WZXJ0ZXggPSBiaW5kTWF0cml4ICogdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApOwoJdmVjNCBza2lubmVkID0gdmVjNCggMC4wICk7Cglza2lubmVkICs9IGJvbmVNYXRYICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQueDsKCXNraW5uZWQgKz0gYm9uZU1hdFkgKiBza2luVmVydGV4ICogc2tpbldlaWdodC55OwoJc2tpbm5lZCArPSBib25lTWF0WiAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lno7Cglza2lubmVkICs9IGJvbmVNYXRXICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQudzsKCXRyYW5zZm9ybWVkID0gKCBiaW5kTWF0cml4SW52ZXJzZSAqIHNraW5uZWQgKS54eXo7CiNlbmRpZmAscmRyPWAjaWZkZWYgVVNFX1NLSU5OSU5HCgltYXQ0IHNraW5NYXRyaXggPSBtYXQ0KCAwLjAgKTsKCXNraW5NYXRyaXggKz0gc2tpbldlaWdodC54ICogYm9uZU1hdFg7Cglza2luTWF0cml4ICs9IHNraW5XZWlnaHQueSAqIGJvbmVNYXRZOwoJc2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnogKiBib25lTWF0WjsKCXNraW5NYXRyaXggKz0gc2tpbldlaWdodC53ICogYm9uZU1hdFc7Cglza2luTWF0cml4ID0gYmluZE1hdHJpeEludmVyc2UgKiBza2luTWF0cml4ICogYmluZE1hdHJpeDsKCW9iamVjdE5vcm1hbCA9IHZlYzQoIHNraW5NYXRyaXggKiB2ZWM0KCBvYmplY3ROb3JtYWwsIDAuMCApICkueHl6OwoJI2lmZGVmIFVTRV9UQU5HRU5UCgkJb2JqZWN0VGFuZ2VudCA9IHZlYzQoIHNraW5NYXRyaXggKiB2ZWM0KCBvYmplY3RUYW5nZW50LCAwLjAgKSApLnh5ejsKCSNlbmRpZgojZW5kaWZgLG5kcj1gZmxvYXQgc3BlY3VsYXJTdHJlbmd0aDsKI2lmZGVmIFVTRV9TUEVDVUxBUk1BUAoJdmVjNCB0ZXhlbFNwZWN1bGFyID0gdGV4dHVyZTJEKCBzcGVjdWxhck1hcCwgdlV2ICk7CglzcGVjdWxhclN0cmVuZ3RoID0gdGV4ZWxTcGVjdWxhci5yOwojZWxzZQoJc3BlY3VsYXJTdHJlbmd0aCA9IDEuMDsKI2VuZGlmYCxpZHI9YCNpZmRlZiBVU0VfU1BFQ1VMQVJNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFyTWFwOwojZW5kaWZgLG9kcj1gI2lmIGRlZmluZWQoIFRPTkVfTUFQUElORyApCglnbF9GcmFnQ29sb3IucmdiID0gdG9uZU1hcHBpbmcoIGdsX0ZyYWdDb2xvci5yZ2IgKTsKI2VuZGlmYCxhZHI9YCNpZm5kZWYgc2F0dXJhdGUKI2RlZmluZSBzYXR1cmF0ZSggYSApIGNsYW1wKCBhLCAwLjAsIDEuMCApCiNlbmRpZgp1bmlmb3JtIGZsb2F0IHRvbmVNYXBwaW5nRXhwb3N1cmU7CnZlYzMgTGluZWFyVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7CglyZXR1cm4gdG9uZU1hcHBpbmdFeHBvc3VyZSAqIGNvbG9yOwp9CnZlYzMgUmVpbmhhcmRUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHsKCWNvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmU7CglyZXR1cm4gc2F0dXJhdGUoIGNvbG9yIC8gKCB2ZWMzKCAxLjAgKSArIGNvbG9yICkgKTsKfQp2ZWMzIE9wdGltaXplZENpbmVvblRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkgewoJY29sb3IgKj0gdG9uZU1hcHBpbmdFeHBvc3VyZTsKCWNvbG9yID0gbWF4KCB2ZWMzKCAwLjAgKSwgY29sb3IgLSAwLjAwNCApOwoJcmV0dXJuIHBvdyggKCBjb2xvciAqICggNi4yICogY29sb3IgKyAwLjUgKSApIC8gKCBjb2xvciAqICggNi4yICogY29sb3IgKyAxLjcgKSArIDAuMDYgKSwgdmVjMyggMi4yICkgKTsKfQp2ZWMzIFJSVEFuZE9EVEZpdCggdmVjMyB2ICkgewoJdmVjMyBhID0gdiAqICggdiArIDAuMDI0NTc4NiApIC0gMC4wMDAwOTA1Mzc7Cgl2ZWMzIGIgPSB2ICogKCAwLjk4MzcyOSAqIHYgKyAwLjQzMjk1MTAgKSArIDAuMjM4MDgxOwoJcmV0dXJuIGEgLyBiOwp9CnZlYzMgQUNFU0ZpbG1pY1RvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkgewoJY29uc3QgbWF0MyBBQ0VTSW5wdXRNYXQgPSBtYXQzKAoJCXZlYzMoIDAuNTk3MTksIDAuMDc2MDAsIDAuMDI4NDAgKSwJCXZlYzMoIDAuMzU0NTgsIDAuOTA4MzQsIDAuMTMzODMgKSwKCQl2ZWMzKCAwLjA0ODIzLCAwLjAxNTY2LCAwLjgzNzc3ICkKCSk7Cgljb25zdCBtYXQzIEFDRVNPdXRwdXRNYXQgPSBtYXQzKAoJCXZlYzMoICAxLjYwNDc1LCAtMC4xMDIwOCwgLTAuMDAzMjcgKSwJCXZlYzMoIC0wLjUzMTA4LCAgMS4xMDgxMywgLTAuMDcyNzYgKSwKCQl2ZWMzKCAtMC4wNzM2NywgLTAuMDA2MDUsICAxLjA3NjAyICkKCSk7Cgljb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlIC8gMC42OwoJY29sb3IgPSBBQ0VTSW5wdXRNYXQgKiBjb2xvcjsKCWNvbG9yID0gUlJUQW5kT0RURml0KCBjb2xvciApOwoJY29sb3IgPSBBQ0VTT3V0cHV0TWF0ICogY29sb3I7CglyZXR1cm4gc2F0dXJhdGUoIGNvbG9yICk7Cn0KdmVjMyBDdXN0b21Ub25lTWFwcGluZyggdmVjMyBjb2xvciApIHsgcmV0dXJuIGNvbG9yOyB9YCxzZHI9YCNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OCglmbG9hdCB0cmFuc21pc3Npb25BbHBoYSA9IDEuMDsKCWZsb2F0IHRyYW5zbWlzc2lvbkZhY3RvciA9IHRyYW5zbWlzc2lvbjsKCWZsb2F0IHRoaWNrbmVzc0ZhY3RvciA9IHRoaWNrbmVzczsKCSNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OTUFQCgkJdHJhbnNtaXNzaW9uRmFjdG9yICo9IHRleHR1cmUyRCggdHJhbnNtaXNzaW9uTWFwLCB2VXYgKS5yOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1RISUNLTkVTU01BUAoJCXRoaWNrbmVzc0ZhY3RvciAqPSB0ZXh0dXJlMkQoIHRoaWNrbmVzc01hcCwgdlV2ICkuZzsKCSNlbmRpZgoJdmVjMyBwb3MgPSB2V29ybGRQb3NpdGlvbjsKCXZlYzMgdiA9IG5vcm1hbGl6ZSggY2FtZXJhUG9zaXRpb24gLSBwb3MgKTsKCXZlYzMgbiA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApOwoJdmVjNCB0cmFuc21pc3Npb24gPSBnZXRJQkxWb2x1bWVSZWZyYWN0aW9uKAoJCW4sIHYsIHJvdWdobmVzc0ZhY3RvciwgbWF0ZXJpYWwuZGlmZnVzZUNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCwKCQlwb3MsIG1vZGVsTWF0cml4LCB2aWV3TWF0cml4LCBwcm9qZWN0aW9uTWF0cml4LCBpb3IsIHRoaWNrbmVzc0ZhY3RvciwKCQlhdHRlbnVhdGlvbkNvbG9yLCBhdHRlbnVhdGlvbkRpc3RhbmNlICk7Cgl0b3RhbERpZmZ1c2UgPSBtaXgoIHRvdGFsRGlmZnVzZSwgdHJhbnNtaXNzaW9uLnJnYiwgdHJhbnNtaXNzaW9uRmFjdG9yICk7Cgl0cmFuc21pc3Npb25BbHBoYSA9IG1peCggdHJhbnNtaXNzaW9uQWxwaGEsIHRyYW5zbWlzc2lvbi5hLCB0cmFuc21pc3Npb25GYWN0b3IgKTsKI2VuZGlmYCxsZHI9YCNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OCgl1bmlmb3JtIGZsb2F0IHRyYW5zbWlzc2lvbjsKCXVuaWZvcm0gZmxvYXQgdGhpY2tuZXNzOwoJdW5pZm9ybSBmbG9hdCBhdHRlbnVhdGlvbkRpc3RhbmNlOwoJdW5pZm9ybSB2ZWMzIGF0dGVudWF0aW9uQ29sb3I7CgkjaWZkZWYgVVNFX1RSQU5TTUlTU0lPTk1BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHRyYW5zbWlzc2lvbk1hcDsKCSNlbmRpZgoJI2lmZGVmIFVTRV9USElDS05FU1NNQVAKCQl1bmlmb3JtIHNhbXBsZXIyRCB0aGlja25lc3NNYXA7CgkjZW5kaWYKCXVuaWZvcm0gdmVjMiB0cmFuc21pc3Npb25TYW1wbGVyU2l6ZTsKCXVuaWZvcm0gc2FtcGxlcjJEIHRyYW5zbWlzc2lvblNhbXBsZXJNYXA7Cgl1bmlmb3JtIG1hdDQgbW9kZWxNYXRyaXg7Cgl1bmlmb3JtIG1hdDQgcHJvamVjdGlvbk1hdHJpeDsKCXZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjsKCXZlYzMgZ2V0Vm9sdW1lVHJhbnNtaXNzaW9uUmF5KCBjb25zdCBpbiB2ZWMzIG4sIGNvbnN0IGluIHZlYzMgdiwgY29uc3QgaW4gZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBpbiBmbG9hdCBpb3IsIGNvbnN0IGluIG1hdDQgbW9kZWxNYXRyaXggKSB7CgkJdmVjMyByZWZyYWN0aW9uVmVjdG9yID0gcmVmcmFjdCggLSB2LCBub3JtYWxpemUoIG4gKSwgMS4wIC8gaW9yICk7CgkJdmVjMyBtb2RlbFNjYWxlOwoJCW1vZGVsU2NhbGUueCA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDAgXS54eXogKSApOwoJCW1vZGVsU2NhbGUueSA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDEgXS54eXogKSApOwoJCW1vZGVsU2NhbGUueiA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDIgXS54eXogKSApOwoJCXJldHVybiBub3JtYWxpemUoIHJlZnJhY3Rpb25WZWN0b3IgKSAqIHRoaWNrbmVzcyAqIG1vZGVsU2NhbGU7Cgl9CglmbG9hdCBhcHBseUlvclRvUm91Z2huZXNzKCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIGZsb2F0IGlvciApIHsKCQlyZXR1cm4gcm91Z2huZXNzICogY2xhbXAoIGlvciAqIDIuMCAtIDIuMCwgMC4wLCAxLjAgKTsKCX0KCXZlYzQgZ2V0VHJhbnNtaXNzaW9uU2FtcGxlKCBjb25zdCBpbiB2ZWMyIGZyYWdDb29yZCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBjb25zdCBpbiBmbG9hdCBpb3IgKSB7CgkJZmxvYXQgZnJhbWVidWZmZXJMb2QgPSBsb2cyKCB0cmFuc21pc3Npb25TYW1wbGVyU2l6ZS54ICkgKiBhcHBseUlvclRvUm91Z2huZXNzKCByb3VnaG5lc3MsIGlvciApOwoJCSNpZmRlZiBURVhUVVJFX0xPRF9FWFQKCQkJcmV0dXJuIHRleHR1cmUyRExvZEVYVCggdHJhbnNtaXNzaW9uU2FtcGxlck1hcCwgZnJhZ0Nvb3JkLnh5LCBmcmFtZWJ1ZmZlckxvZCApOwoJCSNlbHNlCgkJCXJldHVybiB0ZXh0dXJlMkQoIHRyYW5zbWlzc2lvblNhbXBsZXJNYXAsIGZyYWdDb29yZC54eSwgZnJhbWVidWZmZXJMb2QgKTsKCQkjZW5kaWYKCX0KCXZlYzMgYXBwbHlWb2x1bWVBdHRlbnVhdGlvbiggY29uc3QgaW4gdmVjMyByYWRpYW5jZSwgY29uc3QgaW4gZmxvYXQgdHJhbnNtaXNzaW9uRGlzdGFuY2UsIGNvbnN0IGluIHZlYzMgYXR0ZW51YXRpb25Db2xvciwgY29uc3QgaW4gZmxvYXQgYXR0ZW51YXRpb25EaXN0YW5jZSApIHsKCQlpZiAoIGF0dGVudWF0aW9uRGlzdGFuY2UgPT0gMC4wICkgewoJCQlyZXR1cm4gcmFkaWFuY2U7CgkJfSBlbHNlIHsKCQkJdmVjMyBhdHRlbnVhdGlvbkNvZWZmaWNpZW50ID0gLWxvZyggYXR0ZW51YXRpb25Db2xvciApIC8gYXR0ZW51YXRpb25EaXN0YW5jZTsKCQkJdmVjMyB0cmFuc21pdHRhbmNlID0gZXhwKCAtIGF0dGVudWF0aW9uQ29lZmZpY2llbnQgKiB0cmFuc21pc3Npb25EaXN0YW5jZSApOwkJCXJldHVybiB0cmFuc21pdHRhbmNlICogcmFkaWFuY2U7CgkJfQoJfQoJdmVjNCBnZXRJQkxWb2x1bWVSZWZyYWN0aW9uKCBjb25zdCBpbiB2ZWMzIG4sIGNvbnN0IGluIHZlYzMgdiwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBjb25zdCBpbiB2ZWMzIGRpZmZ1c2VDb2xvciwKCQljb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNwZWN1bGFyRjkwLCBjb25zdCBpbiB2ZWMzIHBvc2l0aW9uLCBjb25zdCBpbiBtYXQ0IG1vZGVsTWF0cml4LAoJCWNvbnN0IGluIG1hdDQgdmlld01hdHJpeCwgY29uc3QgaW4gbWF0NCBwcm9qTWF0cml4LCBjb25zdCBpbiBmbG9hdCBpb3IsIGNvbnN0IGluIGZsb2F0IHRoaWNrbmVzcywKCQljb25zdCBpbiB2ZWMzIGF0dGVudWF0aW9uQ29sb3IsIGNvbnN0IGluIGZsb2F0IGF0dGVudWF0aW9uRGlzdGFuY2UgKSB7CgkJdmVjMyB0cmFuc21pc3Npb25SYXkgPSBnZXRWb2x1bWVUcmFuc21pc3Npb25SYXkoIG4sIHYsIHRoaWNrbmVzcywgaW9yLCBtb2RlbE1hdHJpeCApOwoJCXZlYzMgcmVmcmFjdGVkUmF5RXhpdCA9IHBvc2l0aW9uICsgdHJhbnNtaXNzaW9uUmF5OwoJCXZlYzQgbmRjUG9zID0gcHJvak1hdHJpeCAqIHZpZXdNYXRyaXggKiB2ZWM0KCByZWZyYWN0ZWRSYXlFeGl0LCAxLjAgKTsKCQl2ZWMyIHJlZnJhY3Rpb25Db29yZHMgPSBuZGNQb3MueHkgLyBuZGNQb3MudzsKCQlyZWZyYWN0aW9uQ29vcmRzICs9IDEuMDsKCQlyZWZyYWN0aW9uQ29vcmRzIC89IDIuMDsKCQl2ZWM0IHRyYW5zbWl0dGVkTGlnaHQgPSBnZXRUcmFuc21pc3Npb25TYW1wbGUoIHJlZnJhY3Rpb25Db29yZHMsIHJvdWdobmVzcywgaW9yICk7CgkJdmVjMyBhdHRlbnVhdGVkQ29sb3IgPSBhcHBseVZvbHVtZUF0dGVudWF0aW9uKCB0cmFuc21pdHRlZExpZ2h0LnJnYiwgbGVuZ3RoKCB0cmFuc21pc3Npb25SYXkgKSwgYXR0ZW51YXRpb25Db2xvciwgYXR0ZW51YXRpb25EaXN0YW5jZSApOwoJCXZlYzMgRiA9IEVudmlyb25tZW50QlJERiggbiwgdiwgc3BlY3VsYXJDb2xvciwgc3BlY3VsYXJGOTAsIHJvdWdobmVzcyApOwoJCXJldHVybiB2ZWM0KCAoIDEuMCAtIEYgKSAqIGF0dGVudWF0ZWRDb2xvciAqIGRpZmZ1c2VDb2xvciwgdHJhbnNtaXR0ZWRMaWdodC5hICk7Cgl9CiNlbmRpZmAsY2RyPWAjaWYgKCBkZWZpbmVkKCBVU0VfVVYgKSAmJiAhIGRlZmluZWQoIFVWU19WRVJURVhfT05MWSApICkKCXZhcnlpbmcgdmVjMiB2VXY7CiNlbmRpZmAsdWRyPWAjaWZkZWYgVVNFX1VWCgkjaWZkZWYgVVZTX1ZFUlRFWF9PTkxZCgkJdmVjMiB2VXY7CgkjZWxzZQoJCXZhcnlpbmcgdmVjMiB2VXY7CgkjZW5kaWYKCXVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTsKI2VuZGlmYCxoZHI9YCNpZmRlZiBVU0VfVVYKCXZVdiA9ICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCB1diwgMSApICkueHk7CiNlbmRpZmAsZmRyPWAjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQICkKCXZhcnlpbmcgdmVjMiB2VXYyOwojZW5kaWZgLHBkcj1gI2lmIGRlZmluZWQoIFVTRV9MSUdIVE1BUCApIHx8IGRlZmluZWQoIFVTRV9BT01BUCApCglhdHRyaWJ1dGUgdmVjMiB1djI7Cgl2YXJ5aW5nIHZlYzIgdlV2MjsKCXVuaWZvcm0gbWF0MyB1djJUcmFuc2Zvcm07CiNlbmRpZmAsZGRyPWAjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQICkKCXZVdjIgPSAoIHV2MlRyYW5zZm9ybSAqIHZlYzMoIHV2MiwgMSApICkueHk7CiNlbmRpZmAsbWRyPWAjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApIHx8IGRlZmluZWQoIERJU1RBTkNFICkgfHwgZGVmaW5lZCAoIFVTRV9TSEFET1dNQVAgKSB8fCBkZWZpbmVkICggVVNFX1RSQU5TTUlTU0lPTiApCgl2ZWM0IHdvcmxkUG9zaXRpb24gPSB2ZWM0KCB0cmFuc2Zvcm1lZCwgMS4wICk7CgkjaWZkZWYgVVNFX0lOU1RBTkNJTkcKCQl3b3JsZFBvc2l0aW9uID0gaW5zdGFuY2VNYXRyaXggKiB3b3JsZFBvc2l0aW9uOwoJI2VuZGlmCgl3b3JsZFBvc2l0aW9uID0gbW9kZWxNYXRyaXggKiB3b3JsZFBvc2l0aW9uOwojZW5kaWZgLGdkcj1gdmFyeWluZyB2ZWMyIHZVdjsKdW5pZm9ybSBtYXQzIHV2VHJhbnNmb3JtOwp2b2lkIG1haW4oKSB7Cgl2VXYgPSAoIHV2VHJhbnNmb3JtICogdmVjMyggdXYsIDEgKSApLnh5OwoJZ2xfUG9zaXRpb24gPSB2ZWM0KCBwb3NpdGlvbi54eSwgMS4wLCAxLjAgKTsKfWAsX2RyPWB1bmlmb3JtIHNhbXBsZXIyRCB0MkQ7CnZhcnlpbmcgdmVjMiB2VXY7CnZvaWQgbWFpbigpIHsKCWdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCggdDJELCB2VXYgKTsKCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+Cn1gLHlkcj1gdmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4Kdm9pZCBtYWluKCkgewoJdldvcmxkRGlyZWN0aW9uID0gdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTsKCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CglnbF9Qb3NpdGlvbi56ID0gZ2xfUG9zaXRpb24udzsKfWAsdmRyPWAjaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50Pgp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CnZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247CiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCXZlYzMgdlJlZmxlY3QgPSB2V29ybGREaXJlY3Rpb247CgkjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PgoJZ2xfRnJhZ0NvbG9yID0gZW52Q29sb3I7CglnbF9GcmFnQ29sb3IuYSAqPSBvcGFjaXR5OwoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KfWAseGRyPWAjaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+CnZhcnlpbmcgdmVjMiB2SGlnaFByZWNpc2lvblpXOwp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQCgkJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCQkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNlbmRpZgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+Cgl2SGlnaFByZWNpc2lvblpXID0gZ2xfUG9zaXRpb24uenc7Cn1gLGJkcj1gI2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMAoJdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojZW5kaWYKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZhcnlpbmcgdmVjMiB2SGlnaFByZWNpc2lvblpXOwp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCAxLjAgKTsKCSNpZiBERVBUSF9QQUNLSU5HID09IDMyMDAKCQlkaWZmdXNlQ29sb3IuYSA9IG9wYWNpdHk7CgkjZW5kaWYKCSNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJZmxvYXQgZnJhZ0Nvb3JkWiA9IDAuNSAqIHZIaWdoUHJlY2lzaW9uWldbMF0gLyB2SGlnaFByZWNpc2lvblpXWzFdICsgMC41OwoJI2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMAoJCWdsX0ZyYWdDb2xvciA9IHZlYzQoIHZlYzMoIDEuMCAtIGZyYWdDb29yZFogKSwgb3BhY2l0eSApOwoJI2VsaWYgREVQVEhfUEFDS0lORyA9PSAzMjAxCgkJZ2xfRnJhZ0NvbG9yID0gcGFja0RlcHRoVG9SR0JBKCBmcmFnQ29vcmRaICk7CgkjZW5kaWYKfWAsd2RyPWAjZGVmaW5lIERJU1RBTkNFCnZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUAoJCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkJI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD4KCQkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkjZW5kaWYKCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJdldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejsKfWAsU2RyPWAjZGVmaW5lIERJU1RBTkNFCnVuaWZvcm0gdmVjMyByZWZlcmVuY2VQb3NpdGlvbjsKdW5pZm9ybSBmbG9hdCBuZWFyRGlzdGFuY2U7CnVuaWZvcm0gZmxvYXQgZmFyRGlzdGFuY2U7CnZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluICgpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIDEuMCApOwoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CglmbG9hdCBkaXN0ID0gbGVuZ3RoKCB2V29ybGRQb3NpdGlvbiAtIHJlZmVyZW5jZVBvc2l0aW9uICk7CglkaXN0ID0gKCBkaXN0IC0gbmVhckRpc3RhbmNlICkgLyAoIGZhckRpc3RhbmNlIC0gbmVhckRpc3RhbmNlICk7CglkaXN0ID0gc2F0dXJhdGUoIGRpc3QgKTsKCWdsX0ZyYWdDb2xvciA9IHBhY2tEZXB0aFRvUkdCQSggZGlzdCApOwp9YCxNZHI9YHZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247CiNpbmNsdWRlIDxjb21tb24+CnZvaWQgbWFpbigpIHsKCXZXb3JsZERpcmVjdGlvbiA9IHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7CgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4Pgp9YCxFZHI9YHVuaWZvcm0gc2FtcGxlcjJEIHRFcXVpcmVjdDsKdmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4Kdm9pZCBtYWluKCkgewoJdmVjMyBkaXJlY3Rpb24gPSBub3JtYWxpemUoIHZXb3JsZERpcmVjdGlvbiApOwoJdmVjMiBzYW1wbGVVViA9IGVxdWlyZWN0VXYoIGRpcmVjdGlvbiApOwoJZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKCB0RXF1aXJlY3QsIHNhbXBsZVVWICk7CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50Pgp9YCxUZHI9YHVuaWZvcm0gZmxvYXQgc2NhbGU7CmF0dHJpYnV0ZSBmbG9hdCBsaW5lRGlzdGFuY2U7CnZhcnlpbmcgZmxvYXQgdkxpbmVEaXN0YW5jZTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJdkxpbmVEaXN0YW5jZSA9IHNjYWxlICogbGluZURpc3RhbmNlOwoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLENkcj1gdW5pZm9ybSB2ZWMzIGRpZmZ1c2U7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKdW5pZm9ybSBmbG9hdCBkYXNoU2l6ZTsKdW5pZm9ybSBmbG9hdCB0b3RhbFNpemU7CnZhcnlpbmcgZmxvYXQgdkxpbmVEaXN0YW5jZTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCWlmICggbW9kKCB2TGluZURpc3RhbmNlLCB0b3RhbFNpemUgKSA+IGRhc2hTaXplICkgewoJCWRpc2NhcmQ7Cgl9Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSB2ZWMzKCAwLjAgKTsKCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PgoJb3V0Z29pbmdMaWdodCA9IGRpZmZ1c2VDb2xvci5yZ2I7CgkjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KCSNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD4KfWAsQWRyPWAjaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDx1djJfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpZiBkZWZpbmVkICggVVNFX0VOVk1BUCApIHx8IGRlZmluZWQgKCBVU0VfU0tJTk5JTkcgKQoJCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkJI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD4KCQkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCQkjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+CgkjZW5kaWYKCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxmb2dfdmVydGV4Pgp9YCxQZHI9YHVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNpZm5kZWYgRkxBVF9TSEFERUQKCXZhcnlpbmcgdmVjMyB2Tm9ybWFsOwojZW5kaWYKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+CglSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApOwoJI2lmZGVmIFVTRV9MSUdIVE1BUAoJCXZlYzQgbGlnaHRNYXBUZXhlbD0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApOwoJCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBsaWdodE1hcFRleGVsLnJnYiAqIGxpZ2h0TWFwSW50ZW5zaXR5OwoJI2Vsc2UKCQlyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gdmVjMyggMS4wICk7CgkjZW5kaWYKCSNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD4KCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBkaWZmdXNlQ29sb3IucmdiOwoJdmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlOwoJI2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD4KfWAsSWRyPWAjZGVmaW5lIExBTUJFUlQKdmFyeWluZyB2ZWMzIHZMaWdodEZyb250Owp2YXJ5aW5nIHZlYzMgdkluZGlyZWN0RnJvbnQ7CiNpZmRlZiBET1VCTEVfU0lERUQKCXZhcnlpbmcgdmVjMyB2TGlnaHRCYWNrOwoJdmFyeWluZyB2ZWMzIHZJbmRpcmVjdEJhY2s7CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxic2Rmcz4KI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPgojaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDx1dl92ZXJ0ZXg+CgkjaW5jbHVkZSA8dXYyX3ZlcnRleD4KCSNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bGlnaHRzX2xhbWJlcnRfdmVydGV4PgoJI2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KfWAsTGRyPWB1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSB2ZWMzIGVtaXNzaXZlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CnZhcnlpbmcgdmVjMyB2TGlnaHRGcm9udDsKdmFyeWluZyB2ZWMzIHZJbmRpcmVjdEZyb250OwojaWZkZWYgRE9VQkxFX1NJREVECgl2YXJ5aW5nIHZlYzMgdkxpZ2h0QmFjazsKCXZhcnlpbmcgdmVjMyB2SW5kaXJlY3RCYWNrOwojZW5kaWYKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PgojaW5jbHVkZSA8YnNkZnM+CiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzaGFkb3dtYXNrX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CglSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApOwoJdmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHNwZWN1bGFybWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PgoJI2lmZGVmIERPVUJMRV9TSURFRAoJCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSAoIGdsX0Zyb250RmFjaW5nICkgPyB2SW5kaXJlY3RGcm9udCA6IHZJbmRpcmVjdEJhY2s7CgkjZWxzZQoJCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSB2SW5kaXJlY3RGcm9udDsKCSNlbmRpZgoJI2luY2x1ZGUgPGxpZ2h0bWFwX2ZyYWdtZW50PgoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICo9IEJSREZfTGFtYmVydCggZGlmZnVzZUNvbG9yLnJnYiApOwoJI2lmZGVmIERPVUJMRV9TSURFRAoJCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgPSAoIGdsX0Zyb250RmFjaW5nICkgPyB2TGlnaHRGcm9udCA6IHZMaWdodEJhY2s7CgkjZWxzZQoJCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgPSB2TGlnaHRGcm9udDsKCSNlbmRpZgoJcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSAqPSBCUkRGX0xhbWJlcnQoIGRpZmZ1c2VDb2xvci5yZ2IgKSAqIGdldFNoYWRvd01hc2soKTsKCSNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7CgkjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Pgp9YCxrZHI9YCNkZWZpbmUgTUFUQ0FQCnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cgl2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKfWAsUmRyPWAjZGVmaW5lIE1BVENBUAp1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5Owp1bmlmb3JtIHNhbXBsZXIyRCBtYXRjYXA7CnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+Cgl2ZWMzIHZpZXdEaXIgPSBub3JtYWxpemUoIHZWaWV3UG9zaXRpb24gKTsKCXZlYzMgeCA9IG5vcm1hbGl6ZSggdmVjMyggdmlld0Rpci56LCAwLjAsIC0gdmlld0Rpci54ICkgKTsKCXZlYzMgeSA9IGNyb3NzKCB2aWV3RGlyLCB4ICk7Cgl2ZWMyIHV2ID0gdmVjMiggZG90KCB4LCBub3JtYWwgKSwgZG90KCB5LCBub3JtYWwgKSApICogMC40OTUgKyAwLjU7CgkjaWZkZWYgVVNFX01BVENBUAoJCXZlYzQgbWF0Y2FwQ29sb3IgPSB0ZXh0dXJlMkQoIG1hdGNhcCwgdXYgKTsKCSNlbHNlCgkJdmVjNCBtYXRjYXBDb2xvciA9IHZlYzQoIHZlYzMoIG1peCggMC4yLCAwLjgsIHV2LnkgKSApLCAxLjAgKTsKCSNlbmRpZgoJdmVjMyBvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYiAqIG1hdGNhcENvbG9yLnJnYjsKCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD4KfWAsTmRyPWAjZGVmaW5lIE5PUk1BTAojaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKQoJdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxub3JtYWxfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDx1dl92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgojaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKQoJdlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7CiNlbmRpZgp9YCxEZHI9YCNkZWZpbmUgTk9STUFMCnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkKCXZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojZW5kaWYKI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+CglnbF9GcmFnQ29sb3IgPSB2ZWM0KCBwYWNrTm9ybWFsVG9SR0IoIG5vcm1hbCApLCBvcGFjaXR5ICk7Cn1gLE9kcj1gI2RlZmluZSBQSE9ORwp2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8ZW52bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxub3JtYWxfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDx1dl92ZXJ0ZXg+CgkjaW5jbHVkZSA8dXYyX3ZlcnRleD4KCSNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJdlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxmb2dfdmVydGV4Pgp9YCx6ZHI9YCNkZWZpbmUgUEhPTkcKdW5pZm9ybSB2ZWMzIGRpZmZ1c2U7CnVuaWZvcm0gdmVjMyBlbWlzc2l2ZTsKdW5pZm9ybSB2ZWMzIHNwZWN1bGFyOwp1bmlmb3JtIGZsb2F0IHNoaW5pbmVzczsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW52bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxpZ2h0c19waG9uZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTsKCVJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7Cgl2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X2JlZ2luPgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPgoJI2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGxpZ2h0c19waG9uZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD4KCSNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7CgkjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Pgp9YCxGZHI9YCNkZWZpbmUgU1RBTkRBUkQKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OCgl2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDx1djJfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+Cgl2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxmb2dfdmVydGV4PgojaWZkZWYgVVNFX1RSQU5TTUlTU0lPTgoJdldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejsKI2VuZGlmCn1gLEJkcj1gI2RlZmluZSBTVEFOREFSRAojaWZkZWYgUEhZU0lDQUwKCSNkZWZpbmUgSU9SCgkjZGVmaW5lIFNQRUNVTEFSCiNlbmRpZgp1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSB2ZWMzIGVtaXNzaXZlOwp1bmlmb3JtIGZsb2F0IHJvdWdobmVzczsKdW5pZm9ybSBmbG9hdCBtZXRhbG5lc3M7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2lmZGVmIElPUgoJdW5pZm9ybSBmbG9hdCBpb3I7CiNlbmRpZgojaWZkZWYgU1BFQ1VMQVIKCXVuaWZvcm0gZmxvYXQgc3BlY3VsYXJJbnRlbnNpdHk7Cgl1bmlmb3JtIHZlYzMgc3BlY3VsYXJDb2xvcjsKCSNpZmRlZiBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVAKCQl1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhckludGVuc2l0eU1hcDsKCSNlbmRpZgoJI2lmZGVmIFVTRV9TUEVDVUxBUkNPTE9STUFQCgkJdW5pZm9ybSBzYW1wbGVyMkQgc3BlY3VsYXJDb2xvck1hcDsKCSNlbmRpZgojZW5kaWYKI2lmZGVmIFVTRV9DTEVBUkNPQVQKCXVuaWZvcm0gZmxvYXQgY2xlYXJjb2F0OwoJdW5pZm9ybSBmbG9hdCBjbGVhcmNvYXRSb3VnaG5lc3M7CiNlbmRpZgojaWZkZWYgVVNFX1NIRUVOCgl1bmlmb3JtIHZlYzMgc2hlZW5Db2xvcjsKCXVuaWZvcm0gZmxvYXQgc2hlZW5Sb3VnaG5lc3M7CgkjaWZkZWYgVVNFX1NIRUVOQ09MT1JNQVAKCQl1bmlmb3JtIHNhbXBsZXIyRCBzaGVlbkNvbG9yTWFwOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1NIRUVOUk9VR0hORVNTTUFQCgkJdW5pZm9ybSBzYW1wbGVyMkQgc2hlZW5Sb3VnaG5lc3NNYXA7CgkjZW5kaWYKI2VuZGlmCnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YnNkZnM+CiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfcGh5c2ljYWxfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dHJhbnNtaXNzaW9uX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xlYXJjb2F0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxyb3VnaG5lc3NtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1ldGFsbmVzc21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CglSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApOwoJdmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHJvdWdobmVzc21hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxtZXRhbG5lc3NtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X2JlZ2luPgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPgoJI2luY2x1ZGUgPGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8Y2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9tYXBzPgoJI2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGxpZ2h0c19waHlzaWNhbF9mcmFnbWVudD4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD4KCSNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD4KCXZlYzMgdG90YWxEaWZmdXNlID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZTsKCXZlYzMgdG90YWxTcGVjdWxhciA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhcjsKCSNpbmNsdWRlIDx0cmFuc21pc3Npb25fZnJhZ21lbnQ+Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSB0b3RhbERpZmZ1c2UgKyB0b3RhbFNwZWN1bGFyICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlOwoJI2lmZGVmIFVTRV9TSEVFTgoJCWZsb2F0IHNoZWVuRW5lcmd5Q29tcCA9IDEuMCAtIDAuMTU3ICogbWF4MyggbWF0ZXJpYWwuc2hlZW5Db2xvciApOwoJCW91dGdvaW5nTGlnaHQgPSBvdXRnb2luZ0xpZ2h0ICogc2hlZW5FbmVyZ3lDb21wICsgc2hlZW5TcGVjdWxhcjsKCSNlbmRpZgoJI2lmZGVmIFVTRV9DTEVBUkNPQVQKCQlmbG9hdCBkb3ROVmNjID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTsKCQl2ZWMzIEZjYyA9IEZfU2NobGljayggbWF0ZXJpYWwuY2xlYXJjb2F0RjAsIG1hdGVyaWFsLmNsZWFyY29hdEY5MCwgZG90TlZjYyApOwoJCW91dGdvaW5nTGlnaHQgPSBvdXRnb2luZ0xpZ2h0ICogKCAxLjAgLSBtYXRlcmlhbC5jbGVhcmNvYXQgKiBGY2MgKSArIGNsZWFyY29hdFNwZWN1bGFyICogbWF0ZXJpYWwuY2xlYXJjb2F0OwoJI2VuZGlmCgkjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KCSNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD4KCSNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+Cn1gLEhkcj1gI2RlZmluZSBUT09OCnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDx1djJfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+Cgl2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxmb2dfdmVydGV4Pgp9YCxWZHI9YCNkZWZpbmUgVE9PTgp1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSB2ZWMzIGVtaXNzaXZlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxwYWNraW5nPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxncmFkaWVudG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxic2Rmcz4KI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTsKCXZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX3Rvb25fZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2JlZ2luPgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9tYXBzPgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9lbmQ+CgkjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlOwoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Pgp9YCxVZHI9YHVuaWZvcm0gZmxvYXQgc2l6ZTsKdW5pZm9ybSBmbG9hdCBzY2FsZTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJZ2xfUG9pbnRTaXplID0gc2l6ZTsKCSNpZmRlZiBVU0VfU0laRUFUVEVOVUFUSU9OCgkJYm9vbCBpc1BlcnNwZWN0aXZlID0gaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApOwoJCWlmICggaXNQZXJzcGVjdGl2ZSApIGdsX1BvaW50U2l6ZSAqPSAoIHNjYWxlIC8gLSBtdlBvc2l0aW9uLnogKTsKCSNlbmRpZgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJI2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD4KCSNpbmNsdWRlIDxmb2dfdmVydGV4Pgp9YCxxZHI9YHVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnRpY2xlX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJdmVjMyBvdXRnb2luZ0xpZ2h0ID0gdmVjMyggMC4wICk7Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxtYXBfcGFydGljbGVfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PgoJb3V0Z29pbmdMaWdodCA9IGRpZmZ1c2VDb2xvci5yZ2I7CgkjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KCSNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD4KfWAsR2RyPWAjaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD4KCSNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLFdkcj1gdW5pZm9ybSB2ZWMzIGNvbG9yOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxwYWNraW5nPgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxic2Rmcz4KI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPgojaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzaGFkb3dtYXNrX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCWdsX0ZyYWdDb2xvciA9IHZlYzQoIGNvbG9yLCBvcGFjaXR5ICogKCAxLjAgLSBnZXRTaGFkb3dNYXNrKCkgKSApOwoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KCSNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+Cn1gLFlkcj1gdW5pZm9ybSBmbG9hdCByb3RhdGlvbjsKdW5pZm9ybSB2ZWMyIGNlbnRlcjsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDx1dl92ZXJ0ZXg+Cgl2ZWM0IG12UG9zaXRpb24gPSBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCAwLjAsIDAuMCwgMC4wLCAxLjAgKTsKCXZlYzIgc2NhbGU7CglzY2FsZS54ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMCBdLngsIG1vZGVsTWF0cml4WyAwIF0ueSwgbW9kZWxNYXRyaXhbIDAgXS56ICkgKTsKCXNjYWxlLnkgPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAxIF0ueCwgbW9kZWxNYXRyaXhbIDEgXS55LCBtb2RlbE1hdHJpeFsgMSBdLnogKSApOwoJI2lmbmRlZiBVU0VfU0laRUFUVEVOVUFUSU9OCgkJYm9vbCBpc1BlcnNwZWN0aXZlID0gaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApOwoJCWlmICggaXNQZXJzcGVjdGl2ZSApIHNjYWxlICo9IC0gbXZQb3NpdGlvbi56OwoJI2VuZGlmCgl2ZWMyIGFsaWduZWRQb3NpdGlvbiA9ICggcG9zaXRpb24ueHkgLSAoIGNlbnRlciAtIHZlYzIoIDAuNSApICkgKSAqIHNjYWxlOwoJdmVjMiByb3RhdGVkUG9zaXRpb247Cglyb3RhdGVkUG9zaXRpb24ueCA9IGNvcyggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi54IC0gc2luKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnk7Cglyb3RhdGVkUG9zaXRpb24ueSA9IHNpbiggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi54ICsgY29zKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnk7CgltdlBvc2l0aW9uLnh5ICs9IHJvdGF0ZWRQb3NpdGlvbjsKCWdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG12UG9zaXRpb247CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KfWAsamRyPWB1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSB2ZWMzKCAwLjAgKTsKCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CglvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjsKCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KfWAsaHI9e2FscGhhbWFwX2ZyYWdtZW50OndmcixhbHBoYW1hcF9wYXJzX2ZyYWdtZW50OlNmcixhbHBoYXRlc3RfZnJhZ21lbnQ6TWZyLGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50OkVmcixhb21hcF9mcmFnbWVudDpUZnIsYW9tYXBfcGFyc19mcmFnbWVudDpDZnIsYmVnaW5fdmVydGV4OkFmcixiZWdpbm5vcm1hbF92ZXJ0ZXg6UGZyLGJzZGZzOklmcixidW1wbWFwX3BhcnNfZnJhZ21lbnQ6TGZyLGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudDprZnIsY2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ6UmZyLGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleDpOZnIsY2xpcHBpbmdfcGxhbmVzX3ZlcnRleDpEZnIsY29sb3JfZnJhZ21lbnQ6T2ZyLGNvbG9yX3BhcnNfZnJhZ21lbnQ6emZyLGNvbG9yX3BhcnNfdmVydGV4OkZmcixjb2xvcl92ZXJ0ZXg6QmZyLGNvbW1vbjpIZnIsY3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50OlZmcixkZWZhdWx0bm9ybWFsX3ZlcnRleDpVZnIsZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4OnFmcixkaXNwbGFjZW1lbnRtYXBfdmVydGV4OkdmcixlbWlzc2l2ZW1hcF9mcmFnbWVudDpXZnIsZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudDpZZnIsZW5jb2RpbmdzX2ZyYWdtZW50OmpmcixlbmNvZGluZ3NfcGFyc19mcmFnbWVudDpYZnIsZW52bWFwX2ZyYWdtZW50OiRmcixlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ6S2ZyLGVudm1hcF9wYXJzX2ZyYWdtZW50OlpmcixlbnZtYXBfcGFyc192ZXJ0ZXg6SmZyLGVudm1hcF9waHlzaWNhbF9wYXJzX2ZyYWdtZW50OmNwcixlbnZtYXBfdmVydGV4OlFmcixmb2dfdmVydGV4OnRwcixmb2dfcGFyc192ZXJ0ZXg6ZXByLGZvZ19mcmFnbWVudDpycHIsZm9nX3BhcnNfZnJhZ21lbnQ6bnByLGdyYWRpZW50bWFwX3BhcnNfZnJhZ21lbnQ6aXByLGxpZ2h0bWFwX2ZyYWdtZW50Om9wcixsaWdodG1hcF9wYXJzX2ZyYWdtZW50OmFwcixsaWdodHNfbGFtYmVydF92ZXJ0ZXg6c3ByLGxpZ2h0c19wYXJzX2JlZ2luOmxwcixsaWdodHNfdG9vbl9mcmFnbWVudDp1cHIsbGlnaHRzX3Rvb25fcGFyc19mcmFnbWVudDpocHIsbGlnaHRzX3Bob25nX2ZyYWdtZW50OmZwcixsaWdodHNfcGhvbmdfcGFyc19mcmFnbWVudDpwcHIsbGlnaHRzX3BoeXNpY2FsX2ZyYWdtZW50OmRwcixsaWdodHNfcGh5c2ljYWxfcGFyc19mcmFnbWVudDptcHIsbGlnaHRzX2ZyYWdtZW50X2JlZ2luOmdwcixsaWdodHNfZnJhZ21lbnRfbWFwczpfcHIsbGlnaHRzX2ZyYWdtZW50X2VuZDp5cHIsbG9nZGVwdGhidWZfZnJhZ21lbnQ6dnByLGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ6eHByLGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4OmJwcixsb2dkZXB0aGJ1Zl92ZXJ0ZXg6d3ByLG1hcF9mcmFnbWVudDpTcHIsbWFwX3BhcnNfZnJhZ21lbnQ6TXByLG1hcF9wYXJ0aWNsZV9mcmFnbWVudDpFcHIsbWFwX3BhcnRpY2xlX3BhcnNfZnJhZ21lbnQ6VHByLG1ldGFsbmVzc21hcF9mcmFnbWVudDpDcHIsbWV0YWxuZXNzbWFwX3BhcnNfZnJhZ21lbnQ6QXByLG1vcnBobm9ybWFsX3ZlcnRleDpQcHIsbW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg6SXByLG1vcnBodGFyZ2V0X3ZlcnRleDpMcHIsbm9ybWFsX2ZyYWdtZW50X2JlZ2luOmtwcixub3JtYWxfZnJhZ21lbnRfbWFwczpScHIsbm9ybWFsX3BhcnNfZnJhZ21lbnQ6TnByLG5vcm1hbF9wYXJzX3ZlcnRleDpEcHIsbm9ybWFsX3ZlcnRleDpPcHIsbm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ6enByLGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfYmVnaW46RnByLGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfbWFwczpCcHIsY2xlYXJjb2F0X3BhcnNfZnJhZ21lbnQ6SHByLG91dHB1dF9mcmFnbWVudDpWcHIscGFja2luZzpVcHIscHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudDpxcHIscHJvamVjdF92ZXJ0ZXg6R3ByLGRpdGhlcmluZ19mcmFnbWVudDpXcHIsZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ6WXByLHJvdWdobmVzc21hcF9mcmFnbWVudDpqcHIscm91Z2huZXNzbWFwX3BhcnNfZnJhZ21lbnQ6WHByLHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50OiRwcixzaGFkb3dtYXBfcGFyc192ZXJ0ZXg6S3ByLHNoYWRvd21hcF92ZXJ0ZXg6WnByLHNoYWRvd21hc2tfcGFyc19mcmFnbWVudDpKcHIsc2tpbmJhc2VfdmVydGV4OlFwcixza2lubmluZ19wYXJzX3ZlcnRleDp0ZHIsc2tpbm5pbmdfdmVydGV4OmVkcixza2lubm9ybWFsX3ZlcnRleDpyZHIsc3BlY3VsYXJtYXBfZnJhZ21lbnQ6bmRyLHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ6aWRyLHRvbmVtYXBwaW5nX2ZyYWdtZW50Om9kcix0b25lbWFwcGluZ19wYXJzX2ZyYWdtZW50OmFkcix0cmFuc21pc3Npb25fZnJhZ21lbnQ6c2RyLHRyYW5zbWlzc2lvbl9wYXJzX2ZyYWdtZW50Omxkcix1dl9wYXJzX2ZyYWdtZW50OmNkcix1dl9wYXJzX3ZlcnRleDp1ZHIsdXZfdmVydGV4Omhkcix1djJfcGFyc19mcmFnbWVudDpmZHIsdXYyX3BhcnNfdmVydGV4OnBkcix1djJfdmVydGV4OmRkcix3b3JsZHBvc192ZXJ0ZXg6bWRyLGJhY2tncm91bmRfdmVydDpnZHIsYmFja2dyb3VuZF9mcmFnOl9kcixjdWJlX3ZlcnQ6eWRyLGN1YmVfZnJhZzp2ZHIsZGVwdGhfdmVydDp4ZHIsZGVwdGhfZnJhZzpiZHIsZGlzdGFuY2VSR0JBX3ZlcnQ6d2RyLGRpc3RhbmNlUkdCQV9mcmFnOlNkcixlcXVpcmVjdF92ZXJ0Ok1kcixlcXVpcmVjdF9mcmFnOkVkcixsaW5lZGFzaGVkX3ZlcnQ6VGRyLGxpbmVkYXNoZWRfZnJhZzpDZHIsbWVzaGJhc2ljX3ZlcnQ6QWRyLG1lc2hiYXNpY19mcmFnOlBkcixtZXNobGFtYmVydF92ZXJ0OklkcixtZXNobGFtYmVydF9mcmFnOkxkcixtZXNobWF0Y2FwX3ZlcnQ6a2RyLG1lc2htYXRjYXBfZnJhZzpSZHIsbWVzaG5vcm1hbF92ZXJ0Ok5kcixtZXNobm9ybWFsX2ZyYWc6RGRyLG1lc2hwaG9uZ192ZXJ0Ok9kcixtZXNocGhvbmdfZnJhZzp6ZHIsbWVzaHBoeXNpY2FsX3ZlcnQ6RmRyLG1lc2hwaHlzaWNhbF9mcmFnOkJkcixtZXNodG9vbl92ZXJ0OkhkcixtZXNodG9vbl9mcmFnOlZkcixwb2ludHNfdmVydDpVZHIscG9pbnRzX2ZyYWc6cWRyLHNoYWRvd192ZXJ0OkdkcixzaGFkb3dfZnJhZzpXZHIsc3ByaXRlX3ZlcnQ6WWRyLHNwcml0ZV9mcmFnOmpkcn0scmU9e2NvbW1vbjp7ZGlmZnVzZTp7dmFsdWU6bmV3IG5lKDE2Nzc3MjE1KX0sb3BhY2l0eTp7dmFsdWU6MX0sbWFwOnt2YWx1ZTpudWxsfSx1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IGtpfSx1djJUcmFuc2Zvcm06e3ZhbHVlOm5ldyBraX0sYWxwaGFNYXA6e3ZhbHVlOm51bGx9LGFscGhhVGVzdDp7dmFsdWU6MH19LHNwZWN1bGFybWFwOntzcGVjdWxhck1hcDp7dmFsdWU6bnVsbH19LGVudm1hcDp7ZW52TWFwOnt2YWx1ZTpudWxsfSxmbGlwRW52TWFwOnt2YWx1ZTotMX0scmVmbGVjdGl2aXR5Ont2YWx1ZToxfSxpb3I6e3ZhbHVlOjEuNX0scmVmcmFjdGlvblJhdGlvOnt2YWx1ZTouOTh9fSxhb21hcDp7YW9NYXA6e3ZhbHVlOm51bGx9LGFvTWFwSW50ZW5zaXR5Ont2YWx1ZToxfX0sbGlnaHRtYXA6e2xpZ2h0TWFwOnt2YWx1ZTpudWxsfSxsaWdodE1hcEludGVuc2l0eTp7dmFsdWU6MX19LGVtaXNzaXZlbWFwOntlbWlzc2l2ZU1hcDp7dmFsdWU6bnVsbH19LGJ1bXBtYXA6e2J1bXBNYXA6e3ZhbHVlOm51bGx9LGJ1bXBTY2FsZTp7dmFsdWU6MX19LG5vcm1hbG1hcDp7bm9ybWFsTWFwOnt2YWx1ZTpudWxsfSxub3JtYWxTY2FsZTp7dmFsdWU6bmV3IEx0KDEsMSl9fSxkaXNwbGFjZW1lbnRtYXA6e2Rpc3BsYWNlbWVudE1hcDp7dmFsdWU6bnVsbH0sZGlzcGxhY2VtZW50U2NhbGU6e3ZhbHVlOjF9LGRpc3BsYWNlbWVudEJpYXM6e3ZhbHVlOjB9fSxyb3VnaG5lc3NtYXA6e3JvdWdobmVzc01hcDp7dmFsdWU6bnVsbH19LG1ldGFsbmVzc21hcDp7bWV0YWxuZXNzTWFwOnt2YWx1ZTpudWxsfX0sZ3JhZGllbnRtYXA6e2dyYWRpZW50TWFwOnt2YWx1ZTpudWxsfX0sZm9nOntmb2dEZW5zaXR5Ont2YWx1ZToyNWUtNX0sZm9nTmVhcjp7dmFsdWU6MX0sZm9nRmFyOnt2YWx1ZToyZTN9LGZvZ0NvbG9yOnt2YWx1ZTpuZXcgbmUoMTY3NzcyMTUpfX0sbGlnaHRzOnthbWJpZW50TGlnaHRDb2xvcjp7dmFsdWU6W119LGxpZ2h0UHJvYmU6e3ZhbHVlOltdfSxkaXJlY3Rpb25hbExpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7ZGlyZWN0aW9uOnt9LGNvbG9yOnt9fX0sZGlyZWN0aW9uYWxMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fX19LGRpcmVjdGlvbmFsU2hhZG93TWFwOnt2YWx1ZTpbXX0sZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxzcG90TGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntjb2xvcjp7fSxwb3NpdGlvbjp7fSxkaXJlY3Rpb246e30sZGlzdGFuY2U6e30sY29uZUNvczp7fSxwZW51bWJyYUNvczp7fSxkZWNheTp7fX19LHNwb3RMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fX19LHNwb3RTaGFkb3dNYXA6e3ZhbHVlOltdfSxzcG90U2hhZG93TWF0cml4Ont2YWx1ZTpbXX0scG9pbnRMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2NvbG9yOnt9LHBvc2l0aW9uOnt9LGRlY2F5Ont9LGRpc3RhbmNlOnt9fX0scG9pbnRMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fSxzaGFkb3dDYW1lcmFOZWFyOnt9LHNoYWRvd0NhbWVyYUZhcjp7fX19LHBvaW50U2hhZG93TWFwOnt2YWx1ZTpbXX0scG9pbnRTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxoZW1pc3BoZXJlTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntkaXJlY3Rpb246e30sc2t5Q29sb3I6e30sZ3JvdW5kQ29sb3I6e319fSxyZWN0QXJlYUxpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7Y29sb3I6e30scG9zaXRpb246e30sd2lkdGg6e30saGVpZ2h0Ont9fX0sbHRjXzE6e3ZhbHVlOm51bGx9LGx0Y18yOnt2YWx1ZTpudWxsfX0scG9pbnRzOntkaWZmdXNlOnt2YWx1ZTpuZXcgbmUoMTY3NzcyMTUpfSxvcGFjaXR5Ont2YWx1ZToxfSxzaXplOnt2YWx1ZToxfSxzY2FsZTp7dmFsdWU6MX0sbWFwOnt2YWx1ZTpudWxsfSxhbHBoYU1hcDp7dmFsdWU6bnVsbH0sYWxwaGFUZXN0Ont2YWx1ZTowfSx1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IGtpfX0sc3ByaXRlOntkaWZmdXNlOnt2YWx1ZTpuZXcgbmUoMTY3NzcyMTUpfSxvcGFjaXR5Ont2YWx1ZToxfSxjZW50ZXI6e3ZhbHVlOm5ldyBMdCguNSwuNSl9LHJvdGF0aW9uOnt2YWx1ZTowfSxtYXA6e3ZhbHVlOm51bGx9LGFscGhhTWFwOnt2YWx1ZTpudWxsfSxhbHBoYVRlc3Q6e3ZhbHVlOjB9LHV2VHJhbnNmb3JtOnt2YWx1ZTpuZXcga2l9fX0sYWg9e2Jhc2ljOnt1bmlmb3JtczpDYShbcmUuY29tbW9uLHJlLnNwZWN1bGFybWFwLHJlLmVudm1hcCxyZS5hb21hcCxyZS5saWdodG1hcCxyZS5mb2ddKSx2ZXJ0ZXhTaGFkZXI6aHIubWVzaGJhc2ljX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIubWVzaGJhc2ljX2ZyYWd9LGxhbWJlcnQ6e3VuaWZvcm1zOkNhKFtyZS5jb21tb24scmUuc3BlY3VsYXJtYXAscmUuZW52bWFwLHJlLmFvbWFwLHJlLmxpZ2h0bWFwLHJlLmVtaXNzaXZlbWFwLHJlLmZvZyxyZS5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgbmUoMCl9fV0pLHZlcnRleFNoYWRlcjpoci5tZXNobGFtYmVydF92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLm1lc2hsYW1iZXJ0X2ZyYWd9LHBob25nOnt1bmlmb3JtczpDYShbcmUuY29tbW9uLHJlLnNwZWN1bGFybWFwLHJlLmVudm1hcCxyZS5hb21hcCxyZS5saWdodG1hcCxyZS5lbWlzc2l2ZW1hcCxyZS5idW1wbWFwLHJlLm5vcm1hbG1hcCxyZS5kaXNwbGFjZW1lbnRtYXAscmUuZm9nLHJlLmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyBuZSgwKX0sc3BlY3VsYXI6e3ZhbHVlOm5ldyBuZSgxMTE4NDgxKX0sc2hpbmluZXNzOnt2YWx1ZTozMH19XSksdmVydGV4U2hhZGVyOmhyLm1lc2hwaG9uZ192ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLm1lc2hwaG9uZ19mcmFnfSxzdGFuZGFyZDp7dW5pZm9ybXM6Q2EoW3JlLmNvbW1vbixyZS5lbnZtYXAscmUuYW9tYXAscmUubGlnaHRtYXAscmUuZW1pc3NpdmVtYXAscmUuYnVtcG1hcCxyZS5ub3JtYWxtYXAscmUuZGlzcGxhY2VtZW50bWFwLHJlLnJvdWdobmVzc21hcCxyZS5tZXRhbG5lc3NtYXAscmUuZm9nLHJlLmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyBuZSgwKX0scm91Z2huZXNzOnt2YWx1ZToxfSxtZXRhbG5lc3M6e3ZhbHVlOjB9LGVudk1hcEludGVuc2l0eTp7dmFsdWU6MX19XSksdmVydGV4U2hhZGVyOmhyLm1lc2hwaHlzaWNhbF92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLm1lc2hwaHlzaWNhbF9mcmFnfSx0b29uOnt1bmlmb3JtczpDYShbcmUuY29tbW9uLHJlLmFvbWFwLHJlLmxpZ2h0bWFwLHJlLmVtaXNzaXZlbWFwLHJlLmJ1bXBtYXAscmUubm9ybWFsbWFwLHJlLmRpc3BsYWNlbWVudG1hcCxyZS5ncmFkaWVudG1hcCxyZS5mb2cscmUubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IG5lKDApfX1dKSx2ZXJ0ZXhTaGFkZXI6aHIubWVzaHRvb25fdmVydCxmcmFnbWVudFNoYWRlcjpoci5tZXNodG9vbl9mcmFnfSxtYXRjYXA6e3VuaWZvcm1zOkNhKFtyZS5jb21tb24scmUuYnVtcG1hcCxyZS5ub3JtYWxtYXAscmUuZGlzcGxhY2VtZW50bWFwLHJlLmZvZyx7bWF0Y2FwOnt2YWx1ZTpudWxsfX1dKSx2ZXJ0ZXhTaGFkZXI6aHIubWVzaG1hdGNhcF92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLm1lc2htYXRjYXBfZnJhZ30scG9pbnRzOnt1bmlmb3JtczpDYShbcmUucG9pbnRzLHJlLmZvZ10pLHZlcnRleFNoYWRlcjpoci5wb2ludHNfdmVydCxmcmFnbWVudFNoYWRlcjpoci5wb2ludHNfZnJhZ30sZGFzaGVkOnt1bmlmb3JtczpDYShbcmUuY29tbW9uLHJlLmZvZyx7c2NhbGU6e3ZhbHVlOjF9LGRhc2hTaXplOnt2YWx1ZToxfSx0b3RhbFNpemU6e3ZhbHVlOjJ9fV0pLHZlcnRleFNoYWRlcjpoci5saW5lZGFzaGVkX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIubGluZWRhc2hlZF9mcmFnfSxkZXB0aDp7dW5pZm9ybXM6Q2EoW3JlLmNvbW1vbixyZS5kaXNwbGFjZW1lbnRtYXBdKSx2ZXJ0ZXhTaGFkZXI6aHIuZGVwdGhfdmVydCxmcmFnbWVudFNoYWRlcjpoci5kZXB0aF9mcmFnfSxub3JtYWw6e3VuaWZvcm1zOkNhKFtyZS5jb21tb24scmUuYnVtcG1hcCxyZS5ub3JtYWxtYXAscmUuZGlzcGxhY2VtZW50bWFwLHtvcGFjaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6aHIubWVzaG5vcm1hbF92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLm1lc2hub3JtYWxfZnJhZ30sc3ByaXRlOnt1bmlmb3JtczpDYShbcmUuc3ByaXRlLHJlLmZvZ10pLHZlcnRleFNoYWRlcjpoci5zcHJpdGVfdmVydCxmcmFnbWVudFNoYWRlcjpoci5zcHJpdGVfZnJhZ30sYmFja2dyb3VuZDp7dW5pZm9ybXM6e3V2VHJhbnNmb3JtOnt2YWx1ZTpuZXcga2l9LHQyRDp7dmFsdWU6bnVsbH19LHZlcnRleFNoYWRlcjpoci5iYWNrZ3JvdW5kX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIuYmFja2dyb3VuZF9mcmFnfSxjdWJlOnt1bmlmb3JtczpDYShbcmUuZW52bWFwLHtvcGFjaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6aHIuY3ViZV92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLmN1YmVfZnJhZ30sZXF1aXJlY3Q6e3VuaWZvcm1zOnt0RXF1aXJlY3Q6e3ZhbHVlOm51bGx9fSx2ZXJ0ZXhTaGFkZXI6aHIuZXF1aXJlY3RfdmVydCxmcmFnbWVudFNoYWRlcjpoci5lcXVpcmVjdF9mcmFnfSxkaXN0YW5jZVJHQkE6e3VuaWZvcm1zOkNhKFtyZS5jb21tb24scmUuZGlzcGxhY2VtZW50bWFwLHtyZWZlcmVuY2VQb3NpdGlvbjp7dmFsdWU6bmV3IGp9LG5lYXJEaXN0YW5jZTp7dmFsdWU6MX0sZmFyRGlzdGFuY2U6e3ZhbHVlOjFlM319XSksdmVydGV4U2hhZGVyOmhyLmRpc3RhbmNlUkdCQV92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLmRpc3RhbmNlUkdCQV9mcmFnfSxzaGFkb3c6e3VuaWZvcm1zOkNhKFtyZS5saWdodHMscmUuZm9nLHtjb2xvcjp7dmFsdWU6bmV3IG5lKDApfSxvcGFjaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6aHIuc2hhZG93X3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIuc2hhZG93X2ZyYWd9fTthaC5waHlzaWNhbD17dW5pZm9ybXM6Q2EoW2FoLnN0YW5kYXJkLnVuaWZvcm1zLHtjbGVhcmNvYXQ6e3ZhbHVlOjB9LGNsZWFyY29hdE1hcDp7dmFsdWU6bnVsbH0sY2xlYXJjb2F0Um91Z2huZXNzOnt2YWx1ZTowfSxjbGVhcmNvYXRSb3VnaG5lc3NNYXA6e3ZhbHVlOm51bGx9LGNsZWFyY29hdE5vcm1hbFNjYWxlOnt2YWx1ZTpuZXcgTHQoMSwxKX0sY2xlYXJjb2F0Tm9ybWFsTWFwOnt2YWx1ZTpudWxsfSxzaGVlbjp7dmFsdWU6MH0sc2hlZW5Db2xvcjp7dmFsdWU6bmV3IG5lKDApfSxzaGVlbkNvbG9yTWFwOnt2YWx1ZTpudWxsfSxzaGVlblJvdWdobmVzczp7dmFsdWU6MX0sc2hlZW5Sb3VnaG5lc3NNYXA6e3ZhbHVlOm51bGx9LHRyYW5zbWlzc2lvbjp7dmFsdWU6MH0sdHJhbnNtaXNzaW9uTWFwOnt2YWx1ZTpudWxsfSx0cmFuc21pc3Npb25TYW1wbGVyU2l6ZTp7dmFsdWU6bmV3IEx0fSx0cmFuc21pc3Npb25TYW1wbGVyTWFwOnt2YWx1ZTpudWxsfSx0aGlja25lc3M6e3ZhbHVlOjB9LHRoaWNrbmVzc01hcDp7dmFsdWU6bnVsbH0sYXR0ZW51YXRpb25EaXN0YW5jZTp7dmFsdWU6MH0sYXR0ZW51YXRpb25Db2xvcjp7dmFsdWU6bmV3IG5lKDApfSxzcGVjdWxhckludGVuc2l0eTp7dmFsdWU6MX0sc3BlY3VsYXJJbnRlbnNpdHlNYXA6e3ZhbHVlOm51bGx9LHNwZWN1bGFyQ29sb3I6e3ZhbHVlOm5ldyBuZSgxLDEsMSl9LHNwZWN1bGFyQ29sb3JNYXA6e3ZhbHVlOm51bGx9fV0pLHZlcnRleFNoYWRlcjpoci5tZXNocGh5c2ljYWxfdmVydCxmcmFnbWVudFNoYWRlcjpoci5tZXNocGh5c2ljYWxfZnJhZ307ZnVuY3Rpb24gWGRyKGUsdCxyLG4saSxvKXtsZXQgYT1uZXcgbmUoMCkscz1pPT09ITA/MDoxLGwsYyx1PW51bGwsaD0wLGY9bnVsbDtmdW5jdGlvbiBwKGcsXyl7bGV0IHk9ITEseD1fLmlzU2NlbmU9PT0hMD9fLmJhY2tncm91bmQ6bnVsbDt4JiZ4LmlzVGV4dHVyZSYmKHg9dC5nZXQoeCkpO2xldCBiPWUueHIsUz1iLmdldFNlc3Npb24mJmIuZ2V0U2Vzc2lvbigpO1MmJlMuZW52aXJvbm1lbnRCbGVuZE1vZGU9PT0iYWRkaXRpdmUiJiYoeD1udWxsKSx4PT09bnVsbD9kKGEscyk6eCYmeC5pc0NvbG9yJiYoZCh4LDEpLHk9ITApLChlLmF1dG9DbGVhcnx8eSkmJmUuY2xlYXIoZS5hdXRvQ2xlYXJDb2xvcixlLmF1dG9DbGVhckRlcHRoLGUuYXV0b0NsZWFyU3RlbmNpbCkseCYmKHguaXNDdWJlVGV4dHVyZXx8eC5tYXBwaW5nPT09eE0pPyhjPT09dm9pZCAwJiYoYz1uZXcgdGkobmV3IHRwKDEsMSwxKSxuZXcgbGgoe25hbWU6IkJhY2tncm91bmRDdWJlTWF0ZXJpYWwiLHVuaWZvcm1zOlozKGFoLmN1YmUudW5pZm9ybXMpLHZlcnRleFNoYWRlcjphaC5jdWJlLnZlcnRleFNoYWRlcixmcmFnbWVudFNoYWRlcjphaC5jdWJlLmZyYWdtZW50U2hhZGVyLHNpZGU6SWksZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITEsZm9nOiExfSkpLGMuZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCJub3JtYWwiKSxjLmdlb21ldHJ5LmRlbGV0ZUF0dHJpYnV0ZSgidXYiKSxjLm9uQmVmb3JlUmVuZGVyPWZ1bmN0aW9uKEMsUCxrKXt0aGlzLm1hdHJpeFdvcmxkLmNvcHlQb3NpdGlvbihrLm1hdHJpeFdvcmxkKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGMubWF0ZXJpYWwsImVudk1hcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVuaWZvcm1zLmVudk1hcC52YWx1ZX19KSxuLnVwZGF0ZShjKSksYy5tYXRlcmlhbC51bmlmb3Jtcy5lbnZNYXAudmFsdWU9eCxjLm1hdGVyaWFsLnVuaWZvcm1zLmZsaXBFbnZNYXAudmFsdWU9eC5pc0N1YmVUZXh0dXJlJiZ4LmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT09PSExPy0xOjEsKHUhPT14fHxoIT09eC52ZXJzaW9ufHxmIT09ZS50b25lTWFwcGluZykmJihjLm1hdGVyaWFsLm5lZWRzVXBkYXRlPSEwLHU9eCxoPXgudmVyc2lvbixmPWUudG9uZU1hcHBpbmcpLGcudW5zaGlmdChjLGMuZ2VvbWV0cnksYy5tYXRlcmlhbCwwLDAsbnVsbCkpOngmJnguaXNUZXh0dXJlJiYobD09PXZvaWQgMCYmKGw9bmV3IHRpKG5ldyBVMCgyLDIpLG5ldyBsaCh7bmFtZToiQmFja2dyb3VuZE1hdGVyaWFsIix1bmlmb3JtczpaMyhhaC5iYWNrZ3JvdW5kLnVuaWZvcm1zKSx2ZXJ0ZXhTaGFkZXI6YWguYmFja2dyb3VuZC52ZXJ0ZXhTaGFkZXIsZnJhZ21lbnRTaGFkZXI6YWguYmFja2dyb3VuZC5mcmFnbWVudFNoYWRlcixzaWRlOkwxLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExLGZvZzohMX0pKSxsLmdlb21ldHJ5LmRlbGV0ZUF0dHJpYnV0ZSgibm9ybWFsIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwubWF0ZXJpYWwsIm1hcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVuaWZvcm1zLnQyRC52YWx1ZX19KSxuLnVwZGF0ZShsKSksbC5tYXRlcmlhbC51bmlmb3Jtcy50MkQudmFsdWU9eCx4Lm1hdHJpeEF1dG9VcGRhdGU9PT0hMCYmeC51cGRhdGVNYXRyaXgoKSxsLm1hdGVyaWFsLnVuaWZvcm1zLnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoeC5tYXRyaXgpLCh1IT09eHx8aCE9PXgudmVyc2lvbnx8ZiE9PWUudG9uZU1hcHBpbmcpJiYobC5tYXRlcmlhbC5uZWVkc1VwZGF0ZT0hMCx1PXgsaD14LnZlcnNpb24sZj1lLnRvbmVNYXBwaW5nKSxnLnVuc2hpZnQobCxsLmdlb21ldHJ5LGwubWF0ZXJpYWwsMCwwLG51bGwpKX1mdW5jdGlvbiBkKGcsXyl7ci5idWZmZXJzLmNvbG9yLnNldENsZWFyKGcucixnLmcsZy5iLF8sbyl9cmV0dXJue2dldENsZWFyQ29sb3I6ZnVuY3Rpb24oKXtyZXR1cm4gYX0sc2V0Q2xlYXJDb2xvcjpmdW5jdGlvbihnLF89MSl7YS5zZXQoZykscz1fLGQoYSxzKX0sZ2V0Q2xlYXJBbHBoYTpmdW5jdGlvbigpe3JldHVybiBzfSxzZXRDbGVhckFscGhhOmZ1bmN0aW9uKGcpe3M9ZyxkKGEscyl9LHJlbmRlcjpwfX1mdW5jdGlvbiAkZHIoZSx0LHIsbil7bGV0IGk9ZS5nZXRQYXJhbWV0ZXIoMzQ5MjEpLG89bi5pc1dlYkdMMj9udWxsOnQuZ2V0KCJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpLGE9bi5pc1dlYkdMMnx8byE9PW51bGwscz17fSxsPWcobnVsbCksYz1sO2Z1bmN0aW9uIHUoUixGLHosVSxXKXtsZXQgWj0hMTtpZihhKXtsZXQgcnQ9ZChVLHosRik7YyE9PXJ0JiYoYz1ydCxmKGMub2JqZWN0KSksWj1fKFUsVyksWiYmeShVLFcpfWVsc2V7bGV0IHJ0PUYud2lyZWZyYW1lPT09ITA7KGMuZ2VvbWV0cnkhPT1VLmlkfHxjLnByb2dyYW0hPT16LmlkfHxjLndpcmVmcmFtZSE9PXJ0KSYmKGMuZ2VvbWV0cnk9VS5pZCxjLnByb2dyYW09ei5pZCxjLndpcmVmcmFtZT1ydCxaPSEwKX1SLmlzSW5zdGFuY2VkTWVzaD09PSEwJiYoWj0hMCksVyE9PW51bGwmJnIudXBkYXRlKFcsMzQ5NjMpLFomJihrKFIsRix6LFUpLFchPT1udWxsJiZlLmJpbmRCdWZmZXIoMzQ5NjMsci5nZXQoVykuYnVmZmVyKSl9ZnVuY3Rpb24gaCgpe3JldHVybiBuLmlzV2ViR0wyP2UuY3JlYXRlVmVydGV4QXJyYXkoKTpvLmNyZWF0ZVZlcnRleEFycmF5T0VTKCl9ZnVuY3Rpb24gZihSKXtyZXR1cm4gbi5pc1dlYkdMMj9lLmJpbmRWZXJ0ZXhBcnJheShSKTpvLmJpbmRWZXJ0ZXhBcnJheU9FUyhSKX1mdW5jdGlvbiBwKFIpe3JldHVybiBuLmlzV2ViR0wyP2UuZGVsZXRlVmVydGV4QXJyYXkoUik6by5kZWxldGVWZXJ0ZXhBcnJheU9FUyhSKX1mdW5jdGlvbiBkKFIsRix6KXtsZXQgVT16LndpcmVmcmFtZT09PSEwLFc9c1tSLmlkXTtXPT09dm9pZCAwJiYoVz17fSxzW1IuaWRdPVcpO2xldCBaPVdbRi5pZF07Wj09PXZvaWQgMCYmKFo9e30sV1tGLmlkXT1aKTtsZXQgcnQ9WltVXTtyZXR1cm4gcnQ9PT12b2lkIDAmJihydD1nKGgoKSksWltVXT1ydCkscnR9ZnVuY3Rpb24gZyhSKXtsZXQgRj1bXSx6PVtdLFU9W107Zm9yKGxldCBXPTA7VzxpO1crKylGW1ddPTAseltXXT0wLFVbV109MDtyZXR1cm57Z2VvbWV0cnk6bnVsbCxwcm9ncmFtOm51bGwsd2lyZWZyYW1lOiExLG5ld0F0dHJpYnV0ZXM6RixlbmFibGVkQXR0cmlidXRlczp6LGF0dHJpYnV0ZURpdmlzb3JzOlUsb2JqZWN0OlIsYXR0cmlidXRlczp7fSxpbmRleDpudWxsfX1mdW5jdGlvbiBfKFIsRil7bGV0IHo9Yy5hdHRyaWJ1dGVzLFU9Ui5hdHRyaWJ1dGVzLFc9MDtmb3IobGV0IFogaW4gVSl7bGV0IHJ0PXpbWl0sb3Q9VVtaXTtpZihydD09PXZvaWQgMHx8cnQuYXR0cmlidXRlIT09b3R8fHJ0LmRhdGEhPT1vdC5kYXRhKXJldHVybiEwO1crK31yZXR1cm4gYy5hdHRyaWJ1dGVzTnVtIT09V3x8Yy5pbmRleCE9PUZ9ZnVuY3Rpb24geShSLEYpe2xldCB6PXt9LFU9Ui5hdHRyaWJ1dGVzLFc9MDtmb3IobGV0IFogaW4gVSl7bGV0IHJ0PVVbWl0sb3Q9e307b3QuYXR0cmlidXRlPXJ0LHJ0LmRhdGEmJihvdC5kYXRhPXJ0LmRhdGEpLHpbWl09b3QsVysrfWMuYXR0cmlidXRlcz16LGMuYXR0cmlidXRlc051bT1XLGMuaW5kZXg9Rn1mdW5jdGlvbiB4KCl7bGV0IFI9Yy5uZXdBdHRyaWJ1dGVzO2ZvcihsZXQgRj0wLHo9Ui5sZW5ndGg7Rjx6O0YrKylSW0ZdPTB9ZnVuY3Rpb24gYihSKXtTKFIsMCl9ZnVuY3Rpb24gUyhSLEYpe2xldCB6PWMubmV3QXR0cmlidXRlcyxVPWMuZW5hYmxlZEF0dHJpYnV0ZXMsVz1jLmF0dHJpYnV0ZURpdmlzb3JzO3pbUl09MSxVW1JdPT09MCYmKGUuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoUiksVVtSXT0xKSxXW1JdIT09RiYmKChuLmlzV2ViR0wyP2U6dC5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSlbbi5pc1dlYkdMMj8idmVydGV4QXR0cmliRGl2aXNvciI6InZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRSJdKFIsRiksV1tSXT1GKX1mdW5jdGlvbiBDKCl7bGV0IFI9Yy5uZXdBdHRyaWJ1dGVzLEY9Yy5lbmFibGVkQXR0cmlidXRlcztmb3IobGV0IHo9MCxVPUYubGVuZ3RoO3o8VTt6KyspRlt6XSE9PVJbel0mJihlLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSh6KSxGW3pdPTApfWZ1bmN0aW9uIFAoUixGLHosVSxXLFope24uaXNXZWJHTDI9PT0hMCYmKHo9PT01MTI0fHx6PT09NTEyNSk/ZS52ZXJ0ZXhBdHRyaWJJUG9pbnRlcihSLEYseixXLFopOmUudmVydGV4QXR0cmliUG9pbnRlcihSLEYseixVLFcsWil9ZnVuY3Rpb24gayhSLEYseixVKXtpZihuLmlzV2ViR0wyPT09ITEmJihSLmlzSW5zdGFuY2VkTWVzaHx8VS5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5KSYmdC5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKT09PW51bGwpcmV0dXJuO3goKTtsZXQgVz1VLmF0dHJpYnV0ZXMsWj16LmdldEF0dHJpYnV0ZXMoKSxydD1GLmRlZmF1bHRBdHRyaWJ1dGVWYWx1ZXM7Zm9yKGxldCBvdCBpbiBaKXtsZXQgc3Q9WltvdF07aWYoc3QubG9jYXRpb24+PTApe2xldCBTdD1XW290XTtpZihTdD09PXZvaWQgMCYmKG90PT09Imluc3RhbmNlTWF0cml4IiYmUi5pbnN0YW5jZU1hdHJpeCYmKFN0PVIuaW5zdGFuY2VNYXRyaXgpLG90PT09Imluc3RhbmNlQ29sb3IiJiZSLmluc3RhbmNlQ29sb3ImJihTdD1SLmluc3RhbmNlQ29sb3IpKSxTdCE9PXZvaWQgMCl7bGV0IGJ0PVN0Lm5vcm1hbGl6ZWQsTXQ9U3QuaXRlbVNpemUsbHQ9ci5nZXQoU3QpO2lmKGx0PT09dm9pZCAwKWNvbnRpbnVlO2xldCBLdD1sdC5idWZmZXIsX3Q9bHQudHlwZSxjdD1sdC5ieXRlc1BlckVsZW1lbnQ7aWYoU3QuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSl7bGV0IFg9U3QuZGF0YSxldD1YLnN0cmlkZSxkdD1TdC5vZmZzZXQ7aWYoWCYmWC5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyKXtmb3IobGV0IHE9MDtxPHN0LmxvY2F0aW9uU2l6ZTtxKyspUyhzdC5sb2NhdGlvbitxLFgubWVzaFBlckF0dHJpYnV0ZSk7Ui5pc0luc3RhbmNlZE1lc2ghPT0hMCYmVS5fbWF4SW5zdGFuY2VDb3VudD09PXZvaWQgMCYmKFUuX21heEluc3RhbmNlQ291bnQ9WC5tZXNoUGVyQXR0cmlidXRlKlguY291bnQpfWVsc2UgZm9yKGxldCBxPTA7cTxzdC5sb2NhdGlvblNpemU7cSsrKWIoc3QubG9jYXRpb24rcSk7ZS5iaW5kQnVmZmVyKDM0OTYyLEt0KTtmb3IobGV0IHE9MDtxPHN0LmxvY2F0aW9uU2l6ZTtxKyspUChzdC5sb2NhdGlvbitxLE10L3N0LmxvY2F0aW9uU2l6ZSxfdCxidCxldCpjdCwoZHQrTXQvc3QubG9jYXRpb25TaXplKnEpKmN0KX1lbHNle2lmKFN0LmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlKXtmb3IobGV0IFg9MDtYPHN0LmxvY2F0aW9uU2l6ZTtYKyspUyhzdC5sb2NhdGlvbitYLFN0Lm1lc2hQZXJBdHRyaWJ1dGUpO1IuaXNJbnN0YW5jZWRNZXNoIT09ITAmJlUuX21heEluc3RhbmNlQ291bnQ9PT12b2lkIDAmJihVLl9tYXhJbnN0YW5jZUNvdW50PVN0Lm1lc2hQZXJBdHRyaWJ1dGUqU3QuY291bnQpfWVsc2UgZm9yKGxldCBYPTA7WDxzdC5sb2NhdGlvblNpemU7WCsrKWIoc3QubG9jYXRpb24rWCk7ZS5iaW5kQnVmZmVyKDM0OTYyLEt0KTtmb3IobGV0IFg9MDtYPHN0LmxvY2F0aW9uU2l6ZTtYKyspUChzdC5sb2NhdGlvbitYLE10L3N0LmxvY2F0aW9uU2l6ZSxfdCxidCxNdCpjdCxNdC9zdC5sb2NhdGlvblNpemUqWCpjdCl9fWVsc2UgaWYocnQhPT12b2lkIDApe2xldCBidD1ydFtvdF07aWYoYnQhPT12b2lkIDApc3dpdGNoKGJ0Lmxlbmd0aCl7Y2FzZSAyOmUudmVydGV4QXR0cmliMmZ2KHN0LmxvY2F0aW9uLGJ0KTticmVhaztjYXNlIDM6ZS52ZXJ0ZXhBdHRyaWIzZnYoc3QubG9jYXRpb24sYnQpO2JyZWFrO2Nhc2UgNDplLnZlcnRleEF0dHJpYjRmdihzdC5sb2NhdGlvbixidCk7YnJlYWs7ZGVmYXVsdDplLnZlcnRleEF0dHJpYjFmdihzdC5sb2NhdGlvbixidCl9fX19QygpfWZ1bmN0aW9uIE8oKXtJKCk7Zm9yKGxldCBSIGluIHMpe2xldCBGPXNbUl07Zm9yKGxldCB6IGluIEYpe2xldCBVPUZbel07Zm9yKGxldCBXIGluIFUpcChVW1ddLm9iamVjdCksZGVsZXRlIFVbV107ZGVsZXRlIEZbel19ZGVsZXRlIHNbUl19fWZ1bmN0aW9uIEQoUil7aWYoc1tSLmlkXT09PXZvaWQgMClyZXR1cm47bGV0IEY9c1tSLmlkXTtmb3IobGV0IHogaW4gRil7bGV0IFU9Rlt6XTtmb3IobGV0IFcgaW4gVSlwKFVbV10ub2JqZWN0KSxkZWxldGUgVVtXXTtkZWxldGUgRlt6XX1kZWxldGUgc1tSLmlkXX1mdW5jdGlvbiBCKFIpe2ZvcihsZXQgRiBpbiBzKXtsZXQgej1zW0ZdO2lmKHpbUi5pZF09PT12b2lkIDApY29udGludWU7bGV0IFU9eltSLmlkXTtmb3IobGV0IFcgaW4gVSlwKFVbV10ub2JqZWN0KSxkZWxldGUgVVtXXTtkZWxldGUgeltSLmlkXX19ZnVuY3Rpb24gSSgpe0woKSxjIT09bCYmKGM9bCxmKGMub2JqZWN0KSl9ZnVuY3Rpb24gTCgpe2wuZ2VvbWV0cnk9bnVsbCxsLnByb2dyYW09bnVsbCxsLndpcmVmcmFtZT0hMX1yZXR1cm57c2V0dXA6dSxyZXNldDpJLHJlc2V0RGVmYXVsdFN0YXRlOkwsZGlzcG9zZTpPLHJlbGVhc2VTdGF0ZXNPZkdlb21ldHJ5OkQscmVsZWFzZVN0YXRlc09mUHJvZ3JhbTpCLGluaXRBdHRyaWJ1dGVzOngsZW5hYmxlQXR0cmlidXRlOmIsZGlzYWJsZVVudXNlZEF0dHJpYnV0ZXM6Q319ZnVuY3Rpb24gS2RyKGUsdCxyLG4pe2xldCBpPW4uaXNXZWJHTDIsbztmdW5jdGlvbiBhKGMpe289Y31mdW5jdGlvbiBzKGMsdSl7ZS5kcmF3QXJyYXlzKG8sYyx1KSxyLnVwZGF0ZSh1LG8sMSl9ZnVuY3Rpb24gbChjLHUsaCl7aWYoaD09PTApcmV0dXJuO2xldCBmLHA7aWYoaSlmPWUscD0iZHJhd0FycmF5c0luc3RhbmNlZCI7ZWxzZSBpZihmPXQuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIikscD0iZHJhd0FycmF5c0luc3RhbmNlZEFOR0xFIixmPT09bnVsbCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xCdWZmZXJSZW5kZXJlcjogdXNpbmcgVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgYnV0IGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgZXh0ZW5zaW9uIEFOR0xFX2luc3RhbmNlZF9hcnJheXMuIik7cmV0dXJufWZbcF0obyxjLHUsaCksci51cGRhdGUodSxvLGgpfXRoaXMuc2V0TW9kZT1hLHRoaXMucmVuZGVyPXMsdGhpcy5yZW5kZXJJbnN0YW5jZXM9bH1mdW5jdGlvbiBaZHIoZSx0LHIpe2xldCBuO2Z1bmN0aW9uIGkoKXtpZihuIT09dm9pZCAwKXJldHVybiBuO2lmKHQuaGFzKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKT09PSEwKXtsZXQgaz10LmdldCgiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7bj1lLmdldFBhcmFtZXRlcihrLk1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCl9ZWxzZSBuPTA7cmV0dXJuIG59ZnVuY3Rpb24gbyhrKXtpZihrPT09ImhpZ2hwIil7aWYoZS5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoMzU2MzMsMzYzMzgpLnByZWNpc2lvbj4wJiZlLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMiwzNjMzOCkucHJlY2lzaW9uPjApcmV0dXJuImhpZ2hwIjtrPSJtZWRpdW1wIn1yZXR1cm4gaz09PSJtZWRpdW1wIiYmZS5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoMzU2MzMsMzYzMzcpLnByZWNpc2lvbj4wJiZlLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMiwzNjMzNykucHJlY2lzaW9uPjA/Im1lZGl1bXAiOiJsb3dwIn1sZXQgYT10eXBlb2YgV2ViR0wyUmVuZGVyaW5nQ29udGV4dCE9InVuZGVmaW5lZCImJmUgaW5zdGFuY2VvZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0fHx0eXBlb2YgV2ViR0wyQ29tcHV0ZVJlbmRlcmluZ0NvbnRleHQhPSJ1bmRlZmluZWQiJiZlIGluc3RhbmNlb2YgV2ViR0wyQ29tcHV0ZVJlbmRlcmluZ0NvbnRleHQscz1yLnByZWNpc2lvbiE9PXZvaWQgMD9yLnByZWNpc2lvbjoiaGlnaHAiLGw9byhzKTtsIT09cyYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjoiLHMsIm5vdCBzdXBwb3J0ZWQsIHVzaW5nIixsLCJpbnN0ZWFkLiIpLHM9bCk7bGV0IGM9YXx8dC5oYXMoIldFQkdMX2RyYXdfYnVmZmVycyIpLHU9ci5sb2dhcml0aG1pY0RlcHRoQnVmZmVyPT09ITAsaD1lLmdldFBhcmFtZXRlcigzNDkzMCksZj1lLmdldFBhcmFtZXRlcigzNTY2MCkscD1lLmdldFBhcmFtZXRlcigzMzc5KSxkPWUuZ2V0UGFyYW1ldGVyKDM0MDc2KSxnPWUuZ2V0UGFyYW1ldGVyKDM0OTIxKSxfPWUuZ2V0UGFyYW1ldGVyKDM2MzQ3KSx5PWUuZ2V0UGFyYW1ldGVyKDM2MzQ4KSx4PWUuZ2V0UGFyYW1ldGVyKDM2MzQ5KSxiPWY+MCxTPWF8fHQuaGFzKCJPRVNfdGV4dHVyZV9mbG9hdCIpLEM9YiYmUyxQPWE/ZS5nZXRQYXJhbWV0ZXIoMzYxODMpOjA7cmV0dXJue2lzV2ViR0wyOmEsZHJhd0J1ZmZlcnM6YyxnZXRNYXhBbmlzb3Ryb3B5OmksZ2V0TWF4UHJlY2lzaW9uOm8scHJlY2lzaW9uOnMsbG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcjp1LG1heFRleHR1cmVzOmgsbWF4VmVydGV4VGV4dHVyZXM6ZixtYXhUZXh0dXJlU2l6ZTpwLG1heEN1YmVtYXBTaXplOmQsbWF4QXR0cmlidXRlczpnLG1heFZlcnRleFVuaWZvcm1zOl8sbWF4VmFyeWluZ3M6eSxtYXhGcmFnbWVudFVuaWZvcm1zOngsdmVydGV4VGV4dHVyZXM6YixmbG9hdEZyYWdtZW50VGV4dHVyZXM6UyxmbG9hdFZlcnRleFRleHR1cmVzOkMsbWF4U2FtcGxlczpQfX1mdW5jdGlvbiBKZHIoZSl7bGV0IHQ9dGhpcyxyPW51bGwsbj0wLGk9ITEsbz0hMSxhPW5ldyAkYyxzPW5ldyBraSxsPXt2YWx1ZTpudWxsLG5lZWRzVXBkYXRlOiExfTt0aGlzLnVuaWZvcm09bCx0aGlzLm51bVBsYW5lcz0wLHRoaXMubnVtSW50ZXJzZWN0aW9uPTAsdGhpcy5pbml0PWZ1bmN0aW9uKGgsZixwKXtsZXQgZD1oLmxlbmd0aCE9PTB8fGZ8fG4hPT0wfHxpO3JldHVybiBpPWYscj11KGgscCwwKSxuPWgubGVuZ3RoLGR9LHRoaXMuYmVnaW5TaGFkb3dzPWZ1bmN0aW9uKCl7bz0hMCx1KG51bGwpfSx0aGlzLmVuZFNoYWRvd3M9ZnVuY3Rpb24oKXtvPSExLGMoKX0sdGhpcy5zZXRTdGF0ZT1mdW5jdGlvbihoLGYscCl7bGV0IGQ9aC5jbGlwcGluZ1BsYW5lcyxnPWguY2xpcEludGVyc2VjdGlvbixfPWguY2xpcFNoYWRvd3MseT1lLmdldChoKTtpZighaXx8ZD09PW51bGx8fGQubGVuZ3RoPT09MHx8byYmIV8pbz91KG51bGwpOmMoKTtlbHNle2xldCB4PW8/MDpuLGI9eCo0LFM9eS5jbGlwcGluZ1N0YXRlfHxudWxsO2wudmFsdWU9UyxTPXUoZCxmLGIscCk7Zm9yKGxldCBDPTA7QyE9PWI7KytDKVNbQ109cltDXTt5LmNsaXBwaW5nU3RhdGU9Uyx0aGlzLm51bUludGVyc2VjdGlvbj1nP3RoaXMubnVtUGxhbmVzOjAsdGhpcy5udW1QbGFuZXMrPXh9fTtmdW5jdGlvbiBjKCl7bC52YWx1ZSE9PXImJihsLnZhbHVlPXIsbC5uZWVkc1VwZGF0ZT1uPjApLHQubnVtUGxhbmVzPW4sdC5udW1JbnRlcnNlY3Rpb249MH1mdW5jdGlvbiB1KGgsZixwLGQpe2xldCBnPWghPT1udWxsP2gubGVuZ3RoOjAsXz1udWxsO2lmKGchPT0wKXtpZihfPWwudmFsdWUsZCE9PSEwfHxfPT09bnVsbCl7bGV0IHk9cCtnKjQseD1mLm1hdHJpeFdvcmxkSW52ZXJzZTtzLmdldE5vcm1hbE1hdHJpeCh4KSwoXz09PW51bGx8fF8ubGVuZ3RoPHkpJiYoXz1uZXcgRmxvYXQzMkFycmF5KHkpKTtmb3IobGV0IGI9MCxTPXA7YiE9PWc7KytiLFMrPTQpYS5jb3B5KGhbYl0pLmFwcGx5TWF0cml4NCh4LHMpLGEubm9ybWFsLnRvQXJyYXkoXyxTKSxfW1MrM109YS5jb25zdGFudH1sLnZhbHVlPV8sbC5uZWVkc1VwZGF0ZT0hMH1yZXR1cm4gdC5udW1QbGFuZXM9Zyx0Lm51bUludGVyc2VjdGlvbj0wLF99fWZ1bmN0aW9uIFFkcihlKXtsZXQgdD1uZXcgV2Vha01hcDtmdW5jdGlvbiByKGEscyl7cmV0dXJuIHM9PT1ZUD9hLm1hcHBpbmc9aXg6cz09PWpQJiYoYS5tYXBwaW5nPW94KSxhfWZ1bmN0aW9uIG4oYSl7aWYoYSYmYS5pc1RleHR1cmUmJmEuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPT09ITEpe2xldCBzPWEubWFwcGluZztpZihzPT09WVB8fHM9PT1qUClpZih0LmhhcyhhKSl7bGV0IGw9dC5nZXQoYSkudGV4dHVyZTtyZXR1cm4gcihsLGEubWFwcGluZyl9ZWxzZXtsZXQgbD1hLmltYWdlO2lmKGwmJmwuaGVpZ2h0PjApe2xldCBjPW5ldyBRMyhsLmhlaWdodC8yKTtyZXR1cm4gYy5mcm9tRXF1aXJlY3Rhbmd1bGFyVGV4dHVyZShlLGEpLHQuc2V0KGEsYyksYS5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixpKSxyKGMudGV4dHVyZSxhLm1hcHBpbmcpfWVsc2UgcmV0dXJuIG51bGx9fXJldHVybiBhfWZ1bmN0aW9uIGkoYSl7bGV0IHM9YS50YXJnZXQ7cy5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixpKTtsZXQgbD10LmdldChzKTtsIT09dm9pZCAwJiYodC5kZWxldGUocyksbC5kaXNwb3NlKCkpfWZ1bmN0aW9uIG8oKXt0PW5ldyBXZWFrTWFwfXJldHVybntnZXQ6bixkaXNwb3NlOm99fXZhciBPMT1jbGFzcyBleHRlbmRzIE4xe2NvbnN0cnVjdG9yKHQ9LTEscj0xLG49MSxpPS0xLG89LjEsYT0yZTMpe3N1cGVyKCksdGhpcy50eXBlPSJPcnRob2dyYXBoaWNDYW1lcmEiLHRoaXMuem9vbT0xLHRoaXMudmlldz1udWxsLHRoaXMubGVmdD10LHRoaXMucmlnaHQ9cix0aGlzLnRvcD1uLHRoaXMuYm90dG9tPWksdGhpcy5uZWFyPW8sdGhpcy5mYXI9YSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jb3B5KHQscil7cmV0dXJuIHN1cGVyLmNvcHkodCxyKSx0aGlzLmxlZnQ9dC5sZWZ0LHRoaXMucmlnaHQ9dC5yaWdodCx0aGlzLnRvcD10LnRvcCx0aGlzLmJvdHRvbT10LmJvdHRvbSx0aGlzLm5lYXI9dC5uZWFyLHRoaXMuZmFyPXQuZmFyLHRoaXMuem9vbT10Lnpvb20sdGhpcy52aWV3PXQudmlldz09PW51bGw/bnVsbDpPYmplY3QuYXNzaWduKHt9LHQudmlldyksdGhpc31zZXRWaWV3T2Zmc2V0KHQscixuLGksbyxhKXt0aGlzLnZpZXc9PT1udWxsJiYodGhpcy52aWV3PXtlbmFibGVkOiEwLGZ1bGxXaWR0aDoxLGZ1bGxIZWlnaHQ6MSxvZmZzZXRYOjAsb2Zmc2V0WTowLHdpZHRoOjEsaGVpZ2h0OjF9KSx0aGlzLnZpZXcuZW5hYmxlZD0hMCx0aGlzLnZpZXcuZnVsbFdpZHRoPXQsdGhpcy52aWV3LmZ1bGxIZWlnaHQ9cix0aGlzLnZpZXcub2Zmc2V0WD1uLHRoaXMudmlldy5vZmZzZXRZPWksdGhpcy52aWV3LndpZHRoPW8sdGhpcy52aWV3LmhlaWdodD1hLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWNsZWFyVmlld09mZnNldCgpe3RoaXMudmlldyE9PW51bGwmJih0aGlzLnZpZXcuZW5hYmxlZD0hMSksdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9dXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpe2xldCB0PSh0aGlzLnJpZ2h0LXRoaXMubGVmdCkvKDIqdGhpcy56b29tKSxyPSh0aGlzLnRvcC10aGlzLmJvdHRvbSkvKDIqdGhpcy56b29tKSxuPSh0aGlzLnJpZ2h0K3RoaXMubGVmdCkvMixpPSh0aGlzLnRvcCt0aGlzLmJvdHRvbSkvMixvPW4tdCxhPW4rdCxzPWkrcixsPWktcjtpZih0aGlzLnZpZXchPT1udWxsJiZ0aGlzLnZpZXcuZW5hYmxlZCl7bGV0IGM9KHRoaXMucmlnaHQtdGhpcy5sZWZ0KS90aGlzLnZpZXcuZnVsbFdpZHRoL3RoaXMuem9vbSx1PSh0aGlzLnRvcC10aGlzLmJvdHRvbSkvdGhpcy52aWV3LmZ1bGxIZWlnaHQvdGhpcy56b29tO28rPWMqdGhpcy52aWV3Lm9mZnNldFgsYT1vK2MqdGhpcy52aWV3LndpZHRoLHMtPXUqdGhpcy52aWV3Lm9mZnNldFksbD1zLXUqdGhpcy52aWV3LmhlaWdodH10aGlzLnByb2plY3Rpb25NYXRyaXgubWFrZU9ydGhvZ3JhcGhpYyhvLGEscyxsLHRoaXMubmVhcix0aGlzLmZhciksdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMucHJvamVjdGlvbk1hdHJpeCkuaW52ZXJ0KCl9dG9KU09OKHQpe2xldCByPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gci5vYmplY3Quem9vbT10aGlzLnpvb20sci5vYmplY3QubGVmdD10aGlzLmxlZnQsci5vYmplY3QucmlnaHQ9dGhpcy5yaWdodCxyLm9iamVjdC50b3A9dGhpcy50b3Asci5vYmplY3QuYm90dG9tPXRoaXMuYm90dG9tLHIub2JqZWN0Lm5lYXI9dGhpcy5uZWFyLHIub2JqZWN0LmZhcj10aGlzLmZhcix0aGlzLnZpZXchPT1udWxsJiYoci5vYmplY3Qudmlldz1PYmplY3QuYXNzaWduKHt9LHRoaXMudmlldykpLHJ9fTtPMS5wcm90b3R5cGUuaXNPcnRob2dyYXBoaWNDYW1lcmE9ITA7dmFyIHEwPWNsYXNzIGV4dGVuZHMgbGh7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy50eXBlPSJSYXdTaGFkZXJNYXRlcmlhbCJ9fTtxMC5wcm90b3R5cGUuaXNSYXdTaGFkZXJNYXRlcmlhbD0hMDt2YXIgcTM9NCxCMD04LEtmPU1hdGgucG93KDIsQjApLHFmZT1bLjEyNSwuMjE1LC4zNSwuNDQ2LC41MjYsLjU4Ml0sR2ZlPUIwLXEzKzErcWZlLmxlbmd0aCxrMz0yMCxodXQ9bmV3IE8xLHtfbG9kUGxhbmVzOk5QLF9zaXplTG9kczpQdWUsX3NpZ21hczpQVn09dG1yKCksSXVlPW5ldyBuZSxmdXQ9bnVsbCxNMT0oMStNYXRoLnNxcnQoNSkpLzIsUjM9MS9NMSxMdWU9W25ldyBqKDEsMSwxKSxuZXcgaigtMSwxLDEpLG5ldyBqKDEsMSwtMSksbmV3IGooLTEsMSwtMSksbmV3IGooMCxNMSxSMyksbmV3IGooMCxNMSwtUjMpLG5ldyBqKFIzLDAsTTEpLG5ldyBqKC1SMywwLE0xKSxuZXcgaihNMSxSMywwKSxuZXcgaigtTTEsUjMsMCldLGU2PWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX3JlbmRlcmVyPXQsdGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ9bnVsbCx0aGlzLl9ibHVyTWF0ZXJpYWw9ZW1yKGszKSx0aGlzLl9lcXVpcmVjdFNoYWRlcj1udWxsLHRoaXMuX2N1YmVtYXBTaGFkZXI9bnVsbCx0aGlzLl9jb21waWxlTWF0ZXJpYWwodGhpcy5fYmx1ck1hdGVyaWFsKX1mcm9tU2NlbmUodCxyPTAsbj0uMSxpPTEwMCl7ZnV0PXRoaXMuX3JlbmRlcmVyLmdldFJlbmRlclRhcmdldCgpO2xldCBvPXRoaXMuX2FsbG9jYXRlVGFyZ2V0cygpO3JldHVybiB0aGlzLl9zY2VuZVRvQ3ViZVVWKHQsbixpLG8pLHI+MCYmdGhpcy5fYmx1cihvLDAsMCxyKSx0aGlzLl9hcHBseVBNUkVNKG8pLHRoaXMuX2NsZWFudXAobyksb31mcm9tRXF1aXJlY3Rhbmd1bGFyKHQscj1udWxsKXtyZXR1cm4gdGhpcy5fZnJvbVRleHR1cmUodCxyKX1mcm9tQ3ViZW1hcCh0LHI9bnVsbCl7cmV0dXJuIHRoaXMuX2Zyb21UZXh0dXJlKHQscil9Y29tcGlsZUN1YmVtYXBTaGFkZXIoKXt0aGlzLl9jdWJlbWFwU2hhZGVyPT09bnVsbCYmKHRoaXMuX2N1YmVtYXBTaGFkZXI9TnVlKCksdGhpcy5fY29tcGlsZU1hdGVyaWFsKHRoaXMuX2N1YmVtYXBTaGFkZXIpKX1jb21waWxlRXF1aXJlY3Rhbmd1bGFyU2hhZGVyKCl7dGhpcy5fZXF1aXJlY3RTaGFkZXI9PT1udWxsJiYodGhpcy5fZXF1aXJlY3RTaGFkZXI9UnVlKCksdGhpcy5fY29tcGlsZU1hdGVyaWFsKHRoaXMuX2VxdWlyZWN0U2hhZGVyKSl9ZGlzcG9zZSgpe3RoaXMuX2JsdXJNYXRlcmlhbC5kaXNwb3NlKCksdGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQhPT1udWxsJiZ0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldC5kaXNwb3NlKCksdGhpcy5fY3ViZW1hcFNoYWRlciE9PW51bGwmJnRoaXMuX2N1YmVtYXBTaGFkZXIuZGlzcG9zZSgpLHRoaXMuX2VxdWlyZWN0U2hhZGVyIT09bnVsbCYmdGhpcy5fZXF1aXJlY3RTaGFkZXIuZGlzcG9zZSgpO2ZvcihsZXQgdD0wO3Q8TlAubGVuZ3RoO3QrKylOUFt0XS5kaXNwb3NlKCl9X2NsZWFudXAodCl7dGhpcy5fcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KGZ1dCksdC5zY2lzc29yVGVzdD0hMSxJVih0LDAsMCx0LndpZHRoLHQuaGVpZ2h0KX1fZnJvbVRleHR1cmUodCxyKXtmdXQ9dGhpcy5fcmVuZGVyZXIuZ2V0UmVuZGVyVGFyZ2V0KCk7bGV0IG49cnx8dGhpcy5fYWxsb2NhdGVUYXJnZXRzKHQpO3JldHVybiB0aGlzLl90ZXh0dXJlVG9DdWJlVVYodCxuKSx0aGlzLl9hcHBseVBNUkVNKG4pLHRoaXMuX2NsZWFudXAobiksbn1fYWxsb2NhdGVUYXJnZXRzKHQpe2xldCByPXttYWdGaWx0ZXI6aWksbWluRmlsdGVyOmlpLGdlbmVyYXRlTWlwbWFwczohMSx0eXBlOkExLGZvcm1hdDpRbyxlbmNvZGluZzp0bSxkZXB0aEJ1ZmZlcjohMX0sbj1rdWUocik7cmV0dXJuIG4uZGVwdGhCdWZmZXI9IXQsdGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ9PT1udWxsJiYodGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ9a3VlKHIpKSxufV9jb21waWxlTWF0ZXJpYWwodCl7bGV0IHI9bmV3IHRpKE5QWzBdLHQpO3RoaXMuX3JlbmRlcmVyLmNvbXBpbGUocixodXQpfV9zY2VuZVRvQ3ViZVVWKHQscixuLGkpe2xldCBzPW5ldyBVaSg5MCwxLHIsbiksbD1bMSwtMSwxLDEsMSwxXSxjPVsxLDEsMSwtMSwtMSwtMV0sdT10aGlzLl9yZW5kZXJlcixoPXUuYXV0b0NsZWFyLGY9dS50b25lTWFwcGluZzt1LmdldENsZWFyQ29sb3IoSXVlKSx1LnRvbmVNYXBwaW5nPVpkLHUuYXV0b0NsZWFyPSExO2xldCBwPW5ldyBzaCh7bmFtZToiUE1SRU0uQmFja2dyb3VuZCIsc2lkZTpJaSxkZXB0aFdyaXRlOiExLGRlcHRoVGVzdDohMX0pLGQ9bmV3IHRpKG5ldyB0cCxwKSxnPSExLF89dC5iYWNrZ3JvdW5kO18/Xy5pc0NvbG9yJiYocC5jb2xvci5jb3B5KF8pLHQuYmFja2dyb3VuZD1udWxsLGc9ITApOihwLmNvbG9yLmNvcHkoSXVlKSxnPSEwKTtmb3IobGV0IHk9MDt5PDY7eSsrKXtsZXQgeD15JTM7eD09PTA/KHMudXAuc2V0KDAsbFt5XSwwKSxzLmxvb2tBdChjW3ldLDAsMCkpOng9PT0xPyhzLnVwLnNldCgwLDAsbFt5XSkscy5sb29rQXQoMCxjW3ldLDApKToocy51cC5zZXQoMCxsW3ldLDApLHMubG9va0F0KDAsMCxjW3ldKSksSVYoaSx4KktmLHk+Mj9LZjowLEtmLEtmKSx1LnNldFJlbmRlclRhcmdldChpKSxnJiZ1LnJlbmRlcihkLHMpLHUucmVuZGVyKHQscyl9ZC5nZW9tZXRyeS5kaXNwb3NlKCksZC5tYXRlcmlhbC5kaXNwb3NlKCksdS50b25lTWFwcGluZz1mLHUuYXV0b0NsZWFyPWgsdC5iYWNrZ3JvdW5kPV99X3RleHR1cmVUb0N1YmVVVih0LHIpe2xldCBuPXRoaXMuX3JlbmRlcmVyLGk9dC5tYXBwaW5nPT09aXh8fHQubWFwcGluZz09PW94O2k/KHRoaXMuX2N1YmVtYXBTaGFkZXI9PT1udWxsJiYodGhpcy5fY3ViZW1hcFNoYWRlcj1OdWUoKSksdGhpcy5fY3ViZW1hcFNoYWRlci51bmlmb3Jtcy5mbGlwRW52TWFwLnZhbHVlPXQuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPT09ITE/LTE6MSk6dGhpcy5fZXF1aXJlY3RTaGFkZXI9PT1udWxsJiYodGhpcy5fZXF1aXJlY3RTaGFkZXI9UnVlKCkpO2xldCBvPWk/dGhpcy5fY3ViZW1hcFNoYWRlcjp0aGlzLl9lcXVpcmVjdFNoYWRlcixhPW5ldyB0aShOUFswXSxvKSxzPW8udW5pZm9ybXM7cy5lbnZNYXAudmFsdWU9dCxpfHxzLnRleGVsU2l6ZS52YWx1ZS5zZXQoMS90LmltYWdlLndpZHRoLDEvdC5pbWFnZS5oZWlnaHQpLElWKHIsMCwwLDMqS2YsMipLZiksbi5zZXRSZW5kZXJUYXJnZXQociksbi5yZW5kZXIoYSxodXQpfV9hcHBseVBNUkVNKHQpe2xldCByPXRoaXMuX3JlbmRlcmVyLG49ci5hdXRvQ2xlYXI7ci5hdXRvQ2xlYXI9ITE7Zm9yKGxldCBpPTE7aTxHZmU7aSsrKXtsZXQgbz1NYXRoLnNxcnQoUFZbaV0qUFZbaV0tUFZbaS0xXSpQVltpLTFdKSxhPUx1ZVsoaS0xKSVMdWUubGVuZ3RoXTt0aGlzLl9ibHVyKHQsaS0xLGksbyxhKX1yLmF1dG9DbGVhcj1ufV9ibHVyKHQscixuLGksbyl7bGV0IGE9dGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ7dGhpcy5faGFsZkJsdXIodCxhLHIsbixpLCJsYXRpdHVkaW5hbCIsbyksdGhpcy5faGFsZkJsdXIoYSx0LG4sbixpLCJsb25naXR1ZGluYWwiLG8pfV9oYWxmQmx1cih0LHIsbixpLG8sYSxzKXtsZXQgbD10aGlzLl9yZW5kZXJlcixjPXRoaXMuX2JsdXJNYXRlcmlhbDthIT09ImxhdGl0dWRpbmFsIiYmYSE9PSJsb25naXR1ZGluYWwiJiZjb25zb2xlLmVycm9yKCJibHVyIGRpcmVjdGlvbiBtdXN0IGJlIGVpdGhlciBsYXRpdHVkaW5hbCBvciBsb25naXR1ZGluYWwhIik7bGV0IHU9MyxoPW5ldyB0aShOUFtpXSxjKSxmPWMudW5pZm9ybXMscD1QdWVbbl0tMSxkPWlzRmluaXRlKG8pP01hdGguUEkvKDIqcCk6MipNYXRoLlBJLygyKmszLTEpLGc9by9kLF89aXNGaW5pdGUobyk/MStNYXRoLmZsb29yKHUqZyk6azM7Xz5rMyYmY29uc29sZS53YXJuKGBzaWdtYVJhZGlhbnMsICR7b30sIGlzIHRvbyBsYXJnZSBhbmQgd2lsbCBjbGlwLCBhcyBpdCByZXF1ZXN0ZWQgJHtffSBzYW1wbGVzIHdoZW4gdGhlIG1heGltdW0gaXMgc2V0IHRvICR7azN9YCk7bGV0IHk9W10seD0wO2ZvcihsZXQgUD0wO1A8azM7KytQKXtsZXQgaz1QL2csTz1NYXRoLmV4cCgtayprLzIpO3kucHVzaChPKSxQPT09MD94Kz1POlA8XyYmKHgrPTIqTyl9Zm9yKGxldCBQPTA7UDx5Lmxlbmd0aDtQKyspeVtQXT15W1BdL3g7Zi5lbnZNYXAudmFsdWU9dC50ZXh0dXJlLGYuc2FtcGxlcy52YWx1ZT1fLGYud2VpZ2h0cy52YWx1ZT15LGYubGF0aXR1ZGluYWwudmFsdWU9YT09PSJsYXRpdHVkaW5hbCIscyYmKGYucG9sZUF4aXMudmFsdWU9cyksZi5kVGhldGEudmFsdWU9ZCxmLm1pcEludC52YWx1ZT1CMC1uO2xldCBiPVB1ZVtpXSxTPTMqTWF0aC5tYXgoMCxLZi0yKmIpLEM9KGk9PT0wPzA6MipLZikrMipiKihpPkIwLXEzP2ktQjArcTM6MCk7SVYocixTLEMsMypiLDIqYiksbC5zZXRSZW5kZXJUYXJnZXQociksbC5yZW5kZXIoaCxodXQpfX07ZnVuY3Rpb24gdG1yKCl7bGV0IGU9W10sdD1bXSxyPVtdLG49QjA7Zm9yKGxldCBpPTA7aTxHZmU7aSsrKXtsZXQgbz1NYXRoLnBvdygyLG4pO3QucHVzaChvKTtsZXQgYT0xL287aT5CMC1xMz9hPXFmZVtpLUIwK3EzLTFdOmk9PT0wJiYoYT0wKSxyLnB1c2goYSk7bGV0IHM9MS8oby0xKSxsPS1zLzIsYz0xK3MvMix1PVtsLGwsYyxsLGMsYyxsLGwsYyxjLGwsY10saD02LGY9NixwPTMsZD0yLGc9MSxfPW5ldyBGbG9hdDMyQXJyYXkocCpmKmgpLHk9bmV3IEZsb2F0MzJBcnJheShkKmYqaCkseD1uZXcgRmxvYXQzMkFycmF5KGcqZipoKTtmb3IobGV0IFM9MDtTPGg7UysrKXtsZXQgQz1TJTMqMi8zLTEsUD1TPjI/MDotMSxrPVtDLFAsMCxDKzIvMyxQLDAsQysyLzMsUCsxLDAsQyxQLDAsQysyLzMsUCsxLDAsQyxQKzEsMF07Xy5zZXQoayxwKmYqUykseS5zZXQodSxkKmYqUyk7bGV0IE89W1MsUyxTLFMsUyxTXTt4LnNldChPLGcqZipTKX1sZXQgYj1uZXcgUGU7Yi5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgSmUoXyxwKSksYi5zZXRBdHRyaWJ1dGUoInV2IixuZXcgSmUoeSxkKSksYi5zZXRBdHRyaWJ1dGUoImZhY2VJbmRleCIsbmV3IEplKHgsZykpLGUucHVzaChiKSxuPnEzJiZuLS19cmV0dXJue19sb2RQbGFuZXM6ZSxfc2l6ZUxvZHM6dCxfc2lnbWFzOnJ9fWZ1bmN0aW9uIGt1ZShlKXtsZXQgdD1uZXcgaHMoMypLZiwzKktmLGUpO3JldHVybiB0LnRleHR1cmUubWFwcGluZz14TSx0LnRleHR1cmUubmFtZT0iUE1SRU0uY3ViZVV2Iix0LnNjaXNzb3JUZXN0PSEwLHR9ZnVuY3Rpb24gSVYoZSx0LHIsbixpKXtlLnZpZXdwb3J0LnNldCh0LHIsbixpKSxlLnNjaXNzb3Iuc2V0KHQscixuLGkpfWZ1bmN0aW9uIGVtcihlKXtsZXQgdD1uZXcgRmxvYXQzMkFycmF5KGUpLHI9bmV3IGooMCwxLDApO3JldHVybiBuZXcgcTAoe25hbWU6IlNwaGVyaWNhbEdhdXNzaWFuQmx1ciIsZGVmaW5lczp7bjplfSx1bmlmb3Jtczp7ZW52TWFwOnt2YWx1ZTpudWxsfSxzYW1wbGVzOnt2YWx1ZToxfSx3ZWlnaHRzOnt2YWx1ZTp0fSxsYXRpdHVkaW5hbDp7dmFsdWU6ITF9LGRUaGV0YTp7dmFsdWU6MH0sbWlwSW50Ont2YWx1ZTowfSxwb2xlQXhpczp7dmFsdWU6cn19LHZlcnRleFNoYWRlcjpOaHQoKSxmcmFnbWVudFNoYWRlcjpgCgoJCQlwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCQkJcHJlY2lzaW9uIG1lZGl1bXAgaW50OwoKCQkJdmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247CgoJCQl1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7CgkJCXVuaWZvcm0gaW50IHNhbXBsZXM7CgkJCXVuaWZvcm0gZmxvYXQgd2VpZ2h0c1sgbiBdOwoJCQl1bmlmb3JtIGJvb2wgbGF0aXR1ZGluYWw7CgkJCXVuaWZvcm0gZmxvYXQgZFRoZXRhOwoJCQl1bmlmb3JtIGZsb2F0IG1pcEludDsKCQkJdW5pZm9ybSB2ZWMzIHBvbGVBeGlzOwoKCQkJI2RlZmluZSBFTlZNQVBfVFlQRV9DVUJFX1VWCgkJCSNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+CgoJCQl2ZWMzIGdldFNhbXBsZSggZmxvYXQgdGhldGEsIHZlYzMgYXhpcyApIHsKCgkJCQlmbG9hdCBjb3NUaGV0YSA9IGNvcyggdGhldGEgKTsKCQkJCS8vIFJvZHJpZ3VlcycgYXhpcy1hbmdsZSByb3RhdGlvbgoJCQkJdmVjMyBzYW1wbGVEaXJlY3Rpb24gPSB2T3V0cHV0RGlyZWN0aW9uICogY29zVGhldGEKCQkJCQkrIGNyb3NzKCBheGlzLCB2T3V0cHV0RGlyZWN0aW9uICkgKiBzaW4oIHRoZXRhICkKCQkJCQkrIGF4aXMgKiBkb3QoIGF4aXMsIHZPdXRwdXREaXJlY3Rpb24gKSAqICggMS4wIC0gY29zVGhldGEgKTsKCgkJCQlyZXR1cm4gYmlsaW5lYXJDdWJlVVYoIGVudk1hcCwgc2FtcGxlRGlyZWN0aW9uLCBtaXBJbnQgKTsKCgkJCX0KCgkJCXZvaWQgbWFpbigpIHsKCgkJCQl2ZWMzIGF4aXMgPSBsYXRpdHVkaW5hbCA/IHBvbGVBeGlzIDogY3Jvc3MoIHBvbGVBeGlzLCB2T3V0cHV0RGlyZWN0aW9uICk7CgoJCQkJaWYgKCBhbGwoIGVxdWFsKCBheGlzLCB2ZWMzKCAwLjAgKSApICkgKSB7CgoJCQkJCWF4aXMgPSB2ZWMzKCB2T3V0cHV0RGlyZWN0aW9uLnosIDAuMCwgLSB2T3V0cHV0RGlyZWN0aW9uLnggKTsKCgkJCQl9CgoJCQkJYXhpcyA9IG5vcm1hbGl6ZSggYXhpcyApOwoKCQkJCWdsX0ZyYWdDb2xvciA9IHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApOwoJCQkJZ2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyAwIF0gKiBnZXRTYW1wbGUoIDAuMCwgYXhpcyApOwoKCQkJCWZvciAoIGludCBpID0gMTsgaSA8IG47IGkrKyApIHsKCgkJCQkJaWYgKCBpID49IHNhbXBsZXMgKSB7CgoJCQkJCQlicmVhazsKCgkJCQkJfQoKCQkJCQlmbG9hdCB0aGV0YSA9IGRUaGV0YSAqIGZsb2F0KCBpICk7CgkJCQkJZ2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyBpIF0gKiBnZXRTYW1wbGUoIC0xLjAgKiB0aGV0YSwgYXhpcyApOwoJCQkJCWdsX0ZyYWdDb2xvci5yZ2IgKz0gd2VpZ2h0c1sgaSBdICogZ2V0U2FtcGxlKCB0aGV0YSwgYXhpcyApOwoKCQkJCX0KCgkJCX0KCQlgLGJsZW5kaW5nOktkLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExfSl9ZnVuY3Rpb24gUnVlKCl7bGV0IGU9bmV3IEx0KDEsMSk7cmV0dXJuIG5ldyBxMCh7bmFtZToiRXF1aXJlY3Rhbmd1bGFyVG9DdWJlVVYiLHVuaWZvcm1zOntlbnZNYXA6e3ZhbHVlOm51bGx9LHRleGVsU2l6ZTp7dmFsdWU6ZX19LHZlcnRleFNoYWRlcjpOaHQoKSxmcmFnbWVudFNoYWRlcjpgCgoJCQlwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCQkJcHJlY2lzaW9uIG1lZGl1bXAgaW50OwoKCQkJdmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247CgoJCQl1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7CgkJCXVuaWZvcm0gdmVjMiB0ZXhlbFNpemU7CgoJCQkjaW5jbHVkZSA8Y29tbW9uPgoKCQkJdm9pZCBtYWluKCkgewoKCQkJCWdsX0ZyYWdDb2xvciA9IHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApOwoKCQkJCXZlYzMgb3V0cHV0RGlyZWN0aW9uID0gbm9ybWFsaXplKCB2T3V0cHV0RGlyZWN0aW9uICk7CgkJCQl2ZWMyIHV2ID0gZXF1aXJlY3RVdiggb3V0cHV0RGlyZWN0aW9uICk7CgoJCQkJdmVjMiBmID0gZnJhY3QoIHV2IC8gdGV4ZWxTaXplIC0gMC41ICk7CgkJCQl1diAtPSBmICogdGV4ZWxTaXplOwoJCQkJdmVjMyB0bCA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7CgkJCQl1di54ICs9IHRleGVsU2l6ZS54OwoJCQkJdmVjMyB0ciA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7CgkJCQl1di55ICs9IHRleGVsU2l6ZS55OwoJCQkJdmVjMyBiciA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7CgkJCQl1di54IC09IHRleGVsU2l6ZS54OwoJCQkJdmVjMyBibCA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7CgoJCQkJdmVjMyB0bSA9IG1peCggdGwsIHRyLCBmLnggKTsKCQkJCXZlYzMgYm0gPSBtaXgoIGJsLCBiciwgZi54ICk7CgkJCQlnbF9GcmFnQ29sb3IucmdiID0gbWl4KCB0bSwgYm0sIGYueSApOwoKCQkJfQoJCWAsYmxlbmRpbmc6S2QsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITF9KX1mdW5jdGlvbiBOdWUoKXtyZXR1cm4gbmV3IHEwKHtuYW1lOiJDdWJlbWFwVG9DdWJlVVYiLHVuaWZvcm1zOntlbnZNYXA6e3ZhbHVlOm51bGx9LGZsaXBFbnZNYXA6e3ZhbHVlOi0xfX0sdmVydGV4U2hhZGVyOk5odCgpLGZyYWdtZW50U2hhZGVyOmAKCgkJCXByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoJCQlwcmVjaXNpb24gbWVkaXVtcCBpbnQ7CgoJCQl1bmlmb3JtIGZsb2F0IGZsaXBFbnZNYXA7CgoJCQl2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjsKCgkJCXVuaWZvcm0gc2FtcGxlckN1YmUgZW52TWFwOwoKCQkJdm9pZCBtYWluKCkgewoKCQkJCWdsX0ZyYWdDb2xvciA9IHRleHR1cmVDdWJlKCBlbnZNYXAsIHZlYzMoIGZsaXBFbnZNYXAgKiB2T3V0cHV0RGlyZWN0aW9uLngsIHZPdXRwdXREaXJlY3Rpb24ueXogKSApOwoKCQkJfQoJCWAsYmxlbmRpbmc6S2QsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITF9KX1mdW5jdGlvbiBOaHQoKXtyZXR1cm5gCgoJCXByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoJCXByZWNpc2lvbiBtZWRpdW1wIGludDsKCgkJYXR0cmlidXRlIHZlYzMgcG9zaXRpb247CgkJYXR0cmlidXRlIHZlYzIgdXY7CgkJYXR0cmlidXRlIGZsb2F0IGZhY2VJbmRleDsKCgkJdmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247CgoJCS8vIFJIIGNvb3JkaW5hdGUgc3lzdGVtOyBQTVJFTSBmYWNlLWluZGV4aW5nIGNvbnZlbnRpb24KCQl2ZWMzIGdldERpcmVjdGlvbiggdmVjMiB1diwgZmxvYXQgZmFjZSApIHsKCgkJCXV2ID0gMi4wICogdXYgLSAxLjA7CgoJCQl2ZWMzIGRpcmVjdGlvbiA9IHZlYzMoIHV2LCAxLjAgKTsKCgkJCWlmICggZmFjZSA9PSAwLjAgKSB7CgoJCQkJZGlyZWN0aW9uID0gZGlyZWN0aW9uLnp5eDsgLy8gKCAxLCB2LCB1ICkgcG9zIHgKCgkJCX0gZWxzZSBpZiAoIGZhY2UgPT0gMS4wICkgewoKCQkJCWRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7CgkJCQlkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtdSwgMSwgLXYgKSBwb3MgeQoKCQkJfSBlbHNlIGlmICggZmFjZSA9PSAyLjAgKSB7CgoJCQkJZGlyZWN0aW9uLnggKj0gLTEuMDsgLy8gKCAtdSwgdiwgMSApIHBvcyB6CgoJCQl9IGVsc2UgaWYgKCBmYWNlID09IDMuMCApIHsKCgkJCQlkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4OwoJCQkJZGlyZWN0aW9uLnh6ICo9IC0xLjA7IC8vICggLTEsIHYsIC11ICkgbmVnIHgKCgkJCX0gZWxzZSBpZiAoIGZhY2UgPT0gNC4wICkgewoKCQkJCWRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7CgkJCQlkaXJlY3Rpb24ueHkgKj0gLTEuMDsgLy8gKCAtdSwgLTEsIHYgKSBuZWcgeQoKCQkJfSBlbHNlIGlmICggZmFjZSA9PSA1LjAgKSB7CgoJCQkJZGlyZWN0aW9uLnogKj0gLTEuMDsgLy8gKCB1LCB2LCAtMSApIG5lZyB6CgoJCQl9CgoJCQlyZXR1cm4gZGlyZWN0aW9uOwoKCQl9CgoJCXZvaWQgbWFpbigpIHsKCgkJCXZPdXRwdXREaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oIHV2LCBmYWNlSW5kZXggKTsKCQkJZ2xfUG9zaXRpb24gPSB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7CgoJCX0KCWB9ZnVuY3Rpb24gcm1yKGUpe2xldCB0PW5ldyBXZWFrTWFwLHI9bnVsbDtmdW5jdGlvbiBuKHMpe2lmKHMmJnMuaXNUZXh0dXJlKXtsZXQgbD1zLm1hcHBpbmcsYz1sPT09WVB8fGw9PT1qUCx1PWw9PT1peHx8bD09PW94O2lmKGN8fHUpaWYocy5pc1JlbmRlclRhcmdldFRleHR1cmUmJnMubmVlZHNQTVJFTVVwZGF0ZT09PSEwKXtzLm5lZWRzUE1SRU1VcGRhdGU9ITE7bGV0IGg9dC5nZXQocyk7cmV0dXJuIHI9PT1udWxsJiYocj1uZXcgZTYoZSkpLGg9Yz9yLmZyb21FcXVpcmVjdGFuZ3VsYXIocyxoKTpyLmZyb21DdWJlbWFwKHMsaCksdC5zZXQocyxoKSxoLnRleHR1cmV9ZWxzZXtpZih0LmhhcyhzKSlyZXR1cm4gdC5nZXQocykudGV4dHVyZTt7bGV0IGg9cy5pbWFnZTtpZihjJiZoJiZoLmhlaWdodD4wfHx1JiZoJiZpKGgpKXtyPT09bnVsbCYmKHI9bmV3IGU2KGUpKTtsZXQgZj1jP3IuZnJvbUVxdWlyZWN0YW5ndWxhcihzKTpyLmZyb21DdWJlbWFwKHMpO3JldHVybiB0LnNldChzLGYpLHMuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsbyksZi50ZXh0dXJlfWVsc2UgcmV0dXJuIG51bGx9fX1yZXR1cm4gc31mdW5jdGlvbiBpKHMpe2xldCBsPTAsYz02O2ZvcihsZXQgdT0wO3U8Yzt1Kyspc1t1XSE9PXZvaWQgMCYmbCsrO3JldHVybiBsPT09Y31mdW5jdGlvbiBvKHMpe2xldCBsPXMudGFyZ2V0O2wucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsbyk7bGV0IGM9dC5nZXQobCk7YyE9PXZvaWQgMCYmKHQuZGVsZXRlKGwpLGMuZGlzcG9zZSgpKX1mdW5jdGlvbiBhKCl7dD1uZXcgV2Vha01hcCxyIT09bnVsbCYmKHIuZGlzcG9zZSgpLHI9bnVsbCl9cmV0dXJue2dldDpuLGRpc3Bvc2U6YX19ZnVuY3Rpb24gbm1yKGUpe2xldCB0PXt9O2Z1bmN0aW9uIHIobil7aWYodFtuXSE9PXZvaWQgMClyZXR1cm4gdFtuXTtsZXQgaTtzd2l0Y2gobil7Y2FzZSJXRUJHTF9kZXB0aF90ZXh0dXJlIjppPWUuZ2V0RXh0ZW5zaW9uKCJXRUJHTF9kZXB0aF90ZXh0dXJlIil8fGUuZ2V0RXh0ZW5zaW9uKCJNT1pfV0VCR0xfZGVwdGhfdGV4dHVyZSIpfHxlLmdldEV4dGVuc2lvbigiV0VCS0lUX1dFQkdMX2RlcHRoX3RleHR1cmUiKTticmVhaztjYXNlIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyI6aT1lLmdldEV4dGVuc2lvbigiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIil8fGUuZ2V0RXh0ZW5zaW9uKCJNT1pfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIil8fGUuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7YnJlYWs7Y2FzZSJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyI6aT1lLmdldEV4dGVuc2lvbigiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKXx8ZS5nZXRFeHRlbnNpb24oIk1PWl9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpfHxlLmdldEV4dGVuc2lvbigiV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIik7YnJlYWs7Y2FzZSJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiOmk9ZS5nZXRFeHRlbnNpb24oIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpfHxlLmdldEV4dGVuc2lvbigiV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpO2JyZWFrO2RlZmF1bHQ6aT1lLmdldEV4dGVuc2lvbihuKX1yZXR1cm4gdFtuXT1pLGl9cmV0dXJue2hhczpmdW5jdGlvbihuKXtyZXR1cm4gcihuKSE9PW51bGx9LGluaXQ6ZnVuY3Rpb24obil7bi5pc1dlYkdMMj9yKCJFWFRfY29sb3JfYnVmZmVyX2Zsb2F0Iik6KHIoIldFQkdMX2RlcHRoX3RleHR1cmUiKSxyKCJPRVNfdGV4dHVyZV9mbG9hdCIpLHIoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKSxyKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpLHIoIk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpLHIoIk9FU19lbGVtZW50X2luZGV4X3VpbnQiKSxyKCJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpLHIoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSkscigiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIikscigiRVhUX2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0IikscigiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIil9LGdldDpmdW5jdGlvbihuKXtsZXQgaT1yKG4pO3JldHVybiBpPT09bnVsbCYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAiK24rIiBleHRlbnNpb24gbm90IHN1cHBvcnRlZC4iKSxpfX19ZnVuY3Rpb24gaW1yKGUsdCxyLG4pe2xldCBpPXt9LG89bmV3IFdlYWtNYXA7ZnVuY3Rpb24gYShoKXtsZXQgZj1oLnRhcmdldDtmLmluZGV4IT09bnVsbCYmdC5yZW1vdmUoZi5pbmRleCk7Zm9yKGxldCBkIGluIGYuYXR0cmlidXRlcyl0LnJlbW92ZShmLmF0dHJpYnV0ZXNbZF0pO2YucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsYSksZGVsZXRlIGlbZi5pZF07bGV0IHA9by5nZXQoZik7cCYmKHQucmVtb3ZlKHApLG8uZGVsZXRlKGYpKSxuLnJlbGVhc2VTdGF0ZXNPZkdlb21ldHJ5KGYpLGYuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeT09PSEwJiZkZWxldGUgZi5fbWF4SW5zdGFuY2VDb3VudCxyLm1lbW9yeS5nZW9tZXRyaWVzLS19ZnVuY3Rpb24gcyhoLGYpe3JldHVybiBpW2YuaWRdPT09ITB8fChmLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGEpLGlbZi5pZF09ITAsci5tZW1vcnkuZ2VvbWV0cmllcysrKSxmfWZ1bmN0aW9uIGwoaCl7bGV0IGY9aC5hdHRyaWJ1dGVzO2ZvcihsZXQgZCBpbiBmKXQudXBkYXRlKGZbZF0sMzQ5NjIpO2xldCBwPWgubW9ycGhBdHRyaWJ1dGVzO2ZvcihsZXQgZCBpbiBwKXtsZXQgZz1wW2RdO2ZvcihsZXQgXz0wLHk9Zy5sZW5ndGg7Xzx5O18rKyl0LnVwZGF0ZShnW19dLDM0OTYyKX19ZnVuY3Rpb24gYyhoKXtsZXQgZj1bXSxwPWguaW5kZXgsZD1oLmF0dHJpYnV0ZXMucG9zaXRpb24sZz0wO2lmKHAhPT1udWxsKXtsZXQgeD1wLmFycmF5O2c9cC52ZXJzaW9uO2ZvcihsZXQgYj0wLFM9eC5sZW5ndGg7YjxTO2IrPTMpe2xldCBDPXhbYiswXSxQPXhbYisxXSxrPXhbYisyXTtmLnB1c2goQyxQLFAsayxrLEMpfX1lbHNle2xldCB4PWQuYXJyYXk7Zz1kLnZlcnNpb247Zm9yKGxldCBiPTAsUz14Lmxlbmd0aC8zLTE7YjxTO2IrPTMpe2xldCBDPWIrMCxQPWIrMSxrPWIrMjtmLnB1c2goQyxQLFAsayxrLEMpfX1sZXQgXz1uZXcoQmZlKGYpP0szOiQzKShmLDEpO18udmVyc2lvbj1nO2xldCB5PW8uZ2V0KGgpO3kmJnQucmVtb3ZlKHkpLG8uc2V0KGgsXyl9ZnVuY3Rpb24gdShoKXtsZXQgZj1vLmdldChoKTtpZihmKXtsZXQgcD1oLmluZGV4O3AhPT1udWxsJiZmLnZlcnNpb248cC52ZXJzaW9uJiZjKGgpfWVsc2UgYyhoKTtyZXR1cm4gby5nZXQoaCl9cmV0dXJue2dldDpzLHVwZGF0ZTpsLGdldFdpcmVmcmFtZUF0dHJpYnV0ZTp1fX1mdW5jdGlvbiBvbXIoZSx0LHIsbil7bGV0IGk9bi5pc1dlYkdMMixvO2Z1bmN0aW9uIGEoZil7bz1mfWxldCBzLGw7ZnVuY3Rpb24gYyhmKXtzPWYudHlwZSxsPWYuYnl0ZXNQZXJFbGVtZW50fWZ1bmN0aW9uIHUoZixwKXtlLmRyYXdFbGVtZW50cyhvLHAscyxmKmwpLHIudXBkYXRlKHAsbywxKX1mdW5jdGlvbiBoKGYscCxkKXtpZihkPT09MClyZXR1cm47bGV0IGcsXztpZihpKWc9ZSxfPSJkcmF3RWxlbWVudHNJbnN0YW5jZWQiO2Vsc2UgaWYoZz10LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpLF89ImRyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFIixnPT09bnVsbCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xJbmRleGVkQnVmZmVyUmVuZGVyZXI6IHVzaW5nIFRIUkVFLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5IGJ1dCBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dGVuc2lvbiBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzLiIpO3JldHVybn1nW19dKG8scCxzLGYqbCxkKSxyLnVwZGF0ZShwLG8sZCl9dGhpcy5zZXRNb2RlPWEsdGhpcy5zZXRJbmRleD1jLHRoaXMucmVuZGVyPXUsdGhpcy5yZW5kZXJJbnN0YW5jZXM9aH1mdW5jdGlvbiBhbXIoZSl7bGV0IHQ9e2dlb21ldHJpZXM6MCx0ZXh0dXJlczowfSxyPXtmcmFtZTowLGNhbGxzOjAsdHJpYW5nbGVzOjAscG9pbnRzOjAsbGluZXM6MH07ZnVuY3Rpb24gbihvLGEscyl7c3dpdGNoKHIuY2FsbHMrKyxhKXtjYXNlIDQ6ci50cmlhbmdsZXMrPXMqKG8vMyk7YnJlYWs7Y2FzZSAxOnIubGluZXMrPXMqKG8vMik7YnJlYWs7Y2FzZSAzOnIubGluZXMrPXMqKG8tMSk7YnJlYWs7Y2FzZSAyOnIubGluZXMrPXMqbzticmVhaztjYXNlIDA6ci5wb2ludHMrPXMqbzticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMSW5mbzogVW5rbm93biBkcmF3IG1vZGU6IixhKTticmVha319ZnVuY3Rpb24gaSgpe3IuZnJhbWUrKyxyLmNhbGxzPTAsci50cmlhbmdsZXM9MCxyLnBvaW50cz0wLHIubGluZXM9MH1yZXR1cm57bWVtb3J5OnQscmVuZGVyOnIscHJvZ3JhbXM6bnVsbCxhdXRvUmVzZXQ6ITAscmVzZXQ6aSx1cGRhdGU6bn19dmFyIHRNPWNsYXNzIGV4dGVuZHMgdml7Y29uc3RydWN0b3IodD1udWxsLHI9MSxuPTEsaT0xKXtzdXBlcihudWxsKSx0aGlzLmltYWdlPXtkYXRhOnQsd2lkdGg6cixoZWlnaHQ6bixkZXB0aDppfSx0aGlzLm1hZ0ZpbHRlcj1MaSx0aGlzLm1pbkZpbHRlcj1MaSx0aGlzLndyYXBSPUpvLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMuZmxpcFk9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MX19O3RNLnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlMkRBcnJheT0hMDtmdW5jdGlvbiBzbXIoZSx0KXtyZXR1cm4gZVswXS10WzBdfWZ1bmN0aW9uIGxtcihlLHQpe3JldHVybiBNYXRoLmFicyh0WzFdKS1NYXRoLmFicyhlWzFdKX1mdW5jdGlvbiBEdWUoZSx0KXtsZXQgcj0xLG49dC5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlP3QuZGF0YS5hcnJheTp0LmFycmF5O24gaW5zdGFuY2VvZiBJbnQ4QXJyYXk/cj0xMjc6biBpbnN0YW5jZW9mIEludDE2QXJyYXk/cj0zMjc2NzpuIGluc3RhbmNlb2YgSW50MzJBcnJheT9yPTIxNDc0ODM2NDc6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xNb3JwaHRhcmdldHM6IFVuc3VwcG9ydGVkIG1vcnBoIGF0dHJpYnV0ZSBkYXRhIHR5cGU6ICIsbiksZS5kaXZpZGVTY2FsYXIocil9ZnVuY3Rpb24gY21yKGUsdCxyKXtsZXQgbj17fSxpPW5ldyBGbG9hdDMyQXJyYXkoOCksbz1uZXcgV2Vha01hcCxhPW5ldyBqLHM9W107Zm9yKGxldCBjPTA7Yzw4O2MrKylzW2NdPVtjLDBdO2Z1bmN0aW9uIGwoYyx1LGgsZil7bGV0IHA9Yy5tb3JwaFRhcmdldEluZmx1ZW5jZXM7aWYodC5pc1dlYkdMMj09PSEwKXtsZXQgZD11Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbi5sZW5ndGgsZz1vLmdldCh1KTtpZihnPT09dm9pZCAwfHxnLmNvdW50IT09ZCl7bGV0IEw9ZnVuY3Rpb24oKXtCLmRpc3Bvc2UoKSxvLmRlbGV0ZSh1KSx1LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLEwpfTtnIT09dm9pZCAwJiZnLnRleHR1cmUuZGlzcG9zZSgpO2xldCB4PXUubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCE9PXZvaWQgMCxiPXUubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLFM9dS5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsfHxbXSxDPXUuYXR0cmlidXRlcy5wb3NpdGlvbi5jb3VudCxQPXg9PT0hMD8yOjEsaz1DKlAsTz0xO2s+dC5tYXhUZXh0dXJlU2l6ZSYmKE89TWF0aC5jZWlsKGsvdC5tYXhUZXh0dXJlU2l6ZSksaz10Lm1heFRleHR1cmVTaXplKTtsZXQgRD1uZXcgRmxvYXQzMkFycmF5KGsqTyo0KmQpLEI9bmV3IHRNKEQsayxPLGQpO0IuZm9ybWF0PVFvLEIudHlwZT1YZCxCLm5lZWRzVXBkYXRlPSEwO2xldCBJPVAqNDtmb3IobGV0IFI9MDtSPGQ7UisrKXtsZXQgRj1iW1JdLHo9U1tSXSxVPWsqTyo0KlI7Zm9yKGxldCBXPTA7VzxGLmNvdW50O1crKyl7YS5mcm9tQnVmZmVyQXR0cmlidXRlKEYsVyksRi5ub3JtYWxpemVkPT09ITAmJkR1ZShhLEYpO2xldCBaPVcqSTtEW1UrWiswXT1hLngsRFtVK1orMV09YS55LERbVStaKzJdPWEueixEW1UrWiszXT0wLHg9PT0hMCYmKGEuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh6LFcpLHoubm9ybWFsaXplZD09PSEwJiZEdWUoYSx6KSxEW1UrWis0XT1hLngsRFtVK1orNV09YS55LERbVStaKzZdPWEueixEW1UrWis3XT0wKX19Zz17Y291bnQ6ZCx0ZXh0dXJlOkIsc2l6ZTpuZXcgTHQoayxPKX0sby5zZXQodSxnKSx1LmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLEwpfWxldCBfPTA7Zm9yKGxldCB4PTA7eDxwLmxlbmd0aDt4KyspXys9cFt4XTtsZXQgeT11Lm1vcnBoVGFyZ2V0c1JlbGF0aXZlPzE6MS1fO2YuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShlLCJtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2UiLHkpLGYuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShlLCJtb3JwaFRhcmdldEluZmx1ZW5jZXMiLHApLGYuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShlLCJtb3JwaFRhcmdldHNUZXh0dXJlIixnLnRleHR1cmUsciksZi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKGUsIm1vcnBoVGFyZ2V0c1RleHR1cmVTaXplIixnLnNpemUpfWVsc2V7bGV0IGQ9cD09PXZvaWQgMD8wOnAubGVuZ3RoLGc9blt1LmlkXTtpZihnPT09dm9pZCAwfHxnLmxlbmd0aCE9PWQpe2c9W107Zm9yKGxldCBTPTA7UzxkO1MrKylnW1NdPVtTLDBdO25bdS5pZF09Z31mb3IobGV0IFM9MDtTPGQ7UysrKXtsZXQgQz1nW1NdO0NbMF09UyxDWzFdPXBbU119Zy5zb3J0KGxtcik7Zm9yKGxldCBTPTA7Uzw4O1MrKylTPGQmJmdbU11bMV0/KHNbU11bMF09Z1tTXVswXSxzW1NdWzFdPWdbU11bMV0pOihzW1NdWzBdPU51bWJlci5NQVhfU0FGRV9JTlRFR0VSLHNbU11bMV09MCk7cy5zb3J0KHNtcik7bGV0IF89dS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24seT11Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWwseD0wO2ZvcihsZXQgUz0wO1M8ODtTKyspe2xldCBDPXNbU10sUD1DWzBdLGs9Q1sxXTtQIT09TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVImJms/KF8mJnUuZ2V0QXR0cmlidXRlKCJtb3JwaFRhcmdldCIrUykhPT1fW1BdJiZ1LnNldEF0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK1MsX1tQXSkseSYmdS5nZXRBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIitTKSE9PXlbUF0mJnUuc2V0QXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrUyx5W1BdKSxpW1NdPWsseCs9ayk6KF8mJnUuaGFzQXR0cmlidXRlKCJtb3JwaFRhcmdldCIrUyk9PT0hMCYmdS5kZWxldGVBdHRyaWJ1dGUoIm1vcnBoVGFyZ2V0IitTKSx5JiZ1Lmhhc0F0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK1MpPT09ITAmJnUuZGVsZXRlQXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrUyksaVtTXT0wKX1sZXQgYj11Lm1vcnBoVGFyZ2V0c1JlbGF0aXZlPzE6MS14O2YuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShlLCJtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2UiLGIpLGYuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShlLCJtb3JwaFRhcmdldEluZmx1ZW5jZXMiLGkpfX1yZXR1cm57dXBkYXRlOmx9fWZ1bmN0aW9uIHVtcihlLHQscixuKXtsZXQgaT1uZXcgV2Vha01hcDtmdW5jdGlvbiBvKGwpe2xldCBjPW4ucmVuZGVyLmZyYW1lLHU9bC5nZW9tZXRyeSxoPXQuZ2V0KGwsdSk7cmV0dXJuIGkuZ2V0KGgpIT09YyYmKHQudXBkYXRlKGgpLGkuc2V0KGgsYykpLGwuaXNJbnN0YW5jZWRNZXNoJiYobC5oYXNFdmVudExpc3RlbmVyKCJkaXNwb3NlIixzKT09PSExJiZsLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHMpLHIudXBkYXRlKGwuaW5zdGFuY2VNYXRyaXgsMzQ5NjIpLGwuaW5zdGFuY2VDb2xvciE9PW51bGwmJnIudXBkYXRlKGwuaW5zdGFuY2VDb2xvciwzNDk2MikpLGh9ZnVuY3Rpb24gYSgpe2k9bmV3IFdlYWtNYXB9ZnVuY3Rpb24gcyhsKXtsZXQgYz1sLnRhcmdldDtjLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHMpLHIucmVtb3ZlKGMuaW5zdGFuY2VNYXRyaXgpLGMuaW5zdGFuY2VDb2xvciE9PW51bGwmJnIucmVtb3ZlKGMuaW5zdGFuY2VDb2xvcil9cmV0dXJue3VwZGF0ZTpvLGRpc3Bvc2U6YX19dmFyIHI2PWNsYXNzIGV4dGVuZHMgdml7Y29uc3RydWN0b3IodD1udWxsLHI9MSxuPTEsaT0xKXtzdXBlcihudWxsKSx0aGlzLmltYWdlPXtkYXRhOnQsd2lkdGg6cixoZWlnaHQ6bixkZXB0aDppfSx0aGlzLm1hZ0ZpbHRlcj1MaSx0aGlzLm1pbkZpbHRlcj1MaSx0aGlzLndyYXBSPUpvLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMuZmxpcFk9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MX19O3I2LnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlM0Q9ITA7dmFyIFdmZT1uZXcgdmksWWZlPW5ldyB0TSxqZmU9bmV3IHI2LFhmZT1uZXcgVjAsT3VlPVtdLHp1ZT1bXSxGdWU9bmV3IEZsb2F0MzJBcnJheSgxNiksQnVlPW5ldyBGbG9hdDMyQXJyYXkoOSksSHVlPW5ldyBGbG9hdDMyQXJyYXkoNCk7ZnVuY3Rpb24gYk0oZSx0LHIpe2xldCBuPWVbMF07aWYobjw9MHx8bj4wKXJldHVybiBlO2xldCBpPXQqcixvPU91ZVtpXTtpZihvPT09dm9pZCAwJiYobz1uZXcgRmxvYXQzMkFycmF5KGkpLE91ZVtpXT1vKSx0IT09MCl7bi50b0FycmF5KG8sMCk7Zm9yKGxldCBhPTEscz0wO2EhPT10OysrYSlzKz1yLGVbYV0udG9BcnJheShvLHMpfXJldHVybiBvfWZ1bmN0aW9uIGZzKGUsdCl7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IHI9MCxuPWUubGVuZ3RoO3I8bjtyKyspaWYoZVtyXSE9PXRbcl0pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gQWEoZSx0KXtmb3IobGV0IHI9MCxuPXQubGVuZ3RoO3I8bjtyKyspZVtyXT10W3JdfWZ1bmN0aW9uIEtVKGUsdCl7bGV0IHI9enVlW3RdO3I9PT12b2lkIDAmJihyPW5ldyBJbnQzMkFycmF5KHQpLHp1ZVt0XT1yKTtmb3IobGV0IG49MDtuIT09dDsrK24pcltuXT1lLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtyZXR1cm4gcn1mdW5jdGlvbiBobXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO3JbMF0hPT10JiYoZS51bmlmb3JtMWYodGhpcy5hZGRyLHQpLHJbMF09dCl9ZnVuY3Rpb24gZm1yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZTtpZih0LnghPT12b2lkIDApKHJbMF0hPT10Lnh8fHJbMV0hPT10LnkpJiYoZS51bmlmb3JtMmYodGhpcy5hZGRyLHQueCx0LnkpLHJbMF09dC54LHJbMV09dC55KTtlbHNle2lmKGZzKHIsdCkpcmV0dXJuO2UudW5pZm9ybTJmdih0aGlzLmFkZHIsdCksQWEocix0KX19ZnVuY3Rpb24gcG1yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZTtpZih0LnghPT12b2lkIDApKHJbMF0hPT10Lnh8fHJbMV0hPT10Lnl8fHJbMl0hPT10LnopJiYoZS51bmlmb3JtM2YodGhpcy5hZGRyLHQueCx0LnksdC56KSxyWzBdPXQueCxyWzFdPXQueSxyWzJdPXQueik7ZWxzZSBpZih0LnIhPT12b2lkIDApKHJbMF0hPT10LnJ8fHJbMV0hPT10Lmd8fHJbMl0hPT10LmIpJiYoZS51bmlmb3JtM2YodGhpcy5hZGRyLHQucix0LmcsdC5iKSxyWzBdPXQucixyWzFdPXQuZyxyWzJdPXQuYik7ZWxzZXtpZihmcyhyLHQpKXJldHVybjtlLnVuaWZvcm0zZnYodGhpcy5hZGRyLHQpLEFhKHIsdCl9fWZ1bmN0aW9uIGRtcihlLHQpe2xldCByPXRoaXMuY2FjaGU7aWYodC54IT09dm9pZCAwKShyWzBdIT09dC54fHxyWzFdIT09dC55fHxyWzJdIT09dC56fHxyWzNdIT09dC53KSYmKGUudW5pZm9ybTRmKHRoaXMuYWRkcix0LngsdC55LHQueix0LncpLHJbMF09dC54LHJbMV09dC55LHJbMl09dC56LHJbM109dC53KTtlbHNle2lmKGZzKHIsdCkpcmV0dXJuO2UudW5pZm9ybTRmdih0aGlzLmFkZHIsdCksQWEocix0KX19ZnVuY3Rpb24gbW1yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZSxuPXQuZWxlbWVudHM7aWYobj09PXZvaWQgMCl7aWYoZnMocix0KSlyZXR1cm47ZS51bmlmb3JtTWF0cml4MmZ2KHRoaXMuYWRkciwhMSx0KSxBYShyLHQpfWVsc2V7aWYoZnMocixuKSlyZXR1cm47SHVlLnNldChuKSxlLnVuaWZvcm1NYXRyaXgyZnYodGhpcy5hZGRyLCExLEh1ZSksQWEocixuKX19ZnVuY3Rpb24gZ21yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZSxuPXQuZWxlbWVudHM7aWYobj09PXZvaWQgMCl7aWYoZnMocix0KSlyZXR1cm47ZS51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwhMSx0KSxBYShyLHQpfWVsc2V7aWYoZnMocixuKSlyZXR1cm47QnVlLnNldChuKSxlLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5hZGRyLCExLEJ1ZSksQWEocixuKX19ZnVuY3Rpb24gX21yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZSxuPXQuZWxlbWVudHM7aWYobj09PXZvaWQgMCl7aWYoZnMocix0KSlyZXR1cm47ZS51bmlmb3JtTWF0cml4NGZ2KHRoaXMuYWRkciwhMSx0KSxBYShyLHQpfWVsc2V7aWYoZnMocixuKSlyZXR1cm47RnVlLnNldChuKSxlLnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5hZGRyLCExLEZ1ZSksQWEocixuKX19ZnVuY3Rpb24geW1yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZTtyWzBdIT09dCYmKGUudW5pZm9ybTFpKHRoaXMuYWRkcix0KSxyWzBdPXQpfWZ1bmN0aW9uIHZtcihlLHQpe2xldCByPXRoaXMuY2FjaGU7ZnMocix0KXx8KGUudW5pZm9ybTJpdih0aGlzLmFkZHIsdCksQWEocix0KSl9ZnVuY3Rpb24geG1yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZTtmcyhyLHQpfHwoZS51bmlmb3JtM2l2KHRoaXMuYWRkcix0KSxBYShyLHQpKX1mdW5jdGlvbiBibXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO2ZzKHIsdCl8fChlLnVuaWZvcm00aXYodGhpcy5hZGRyLHQpLEFhKHIsdCkpfWZ1bmN0aW9uIHdtcihlLHQpe2xldCByPXRoaXMuY2FjaGU7clswXSE9PXQmJihlLnVuaWZvcm0xdWkodGhpcy5hZGRyLHQpLHJbMF09dCl9ZnVuY3Rpb24gU21yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZTtmcyhyLHQpfHwoZS51bmlmb3JtMnVpdih0aGlzLmFkZHIsdCksQWEocix0KSl9ZnVuY3Rpb24gTW1yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZTtmcyhyLHQpfHwoZS51bmlmb3JtM3Vpdih0aGlzLmFkZHIsdCksQWEocix0KSl9ZnVuY3Rpb24gRW1yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZTtmcyhyLHQpfHwoZS51bmlmb3JtNHVpdih0aGlzLmFkZHIsdCksQWEocix0KSl9ZnVuY3Rpb24gVG1yKGUsdCxyKXtsZXQgbj10aGlzLmNhY2hlLGk9ci5hbGxvY2F0ZVRleHR1cmVVbml0KCk7blswXSE9PWkmJihlLnVuaWZvcm0xaSh0aGlzLmFkZHIsaSksblswXT1pKSxyLnNhZmVTZXRUZXh0dXJlMkQodHx8V2ZlLGkpfWZ1bmN0aW9uIENtcihlLHQscil7bGV0IG49dGhpcy5jYWNoZSxpPXIuYWxsb2NhdGVUZXh0dXJlVW5pdCgpO25bMF0hPT1pJiYoZS51bmlmb3JtMWkodGhpcy5hZGRyLGkpLG5bMF09aSksci5zZXRUZXh0dXJlM0QodHx8amZlLGkpfWZ1bmN0aW9uIEFtcihlLHQscil7bGV0IG49dGhpcy5jYWNoZSxpPXIuYWxsb2NhdGVUZXh0dXJlVW5pdCgpO25bMF0hPT1pJiYoZS51bmlmb3JtMWkodGhpcy5hZGRyLGkpLG5bMF09aSksci5zYWZlU2V0VGV4dHVyZUN1YmUodHx8WGZlLGkpfWZ1bmN0aW9uIFBtcihlLHQscil7bGV0IG49dGhpcy5jYWNoZSxpPXIuYWxsb2NhdGVUZXh0dXJlVW5pdCgpO25bMF0hPT1pJiYoZS51bmlmb3JtMWkodGhpcy5hZGRyLGkpLG5bMF09aSksci5zZXRUZXh0dXJlMkRBcnJheSh0fHxZZmUsaSl9ZnVuY3Rpb24gSW1yKGUpe3N3aXRjaChlKXtjYXNlIDUxMjY6cmV0dXJuIGhtcjtjYXNlIDM1NjY0OnJldHVybiBmbXI7Y2FzZSAzNTY2NTpyZXR1cm4gcG1yO2Nhc2UgMzU2NjY6cmV0dXJuIGRtcjtjYXNlIDM1Njc0OnJldHVybiBtbXI7Y2FzZSAzNTY3NTpyZXR1cm4gZ21yO2Nhc2UgMzU2NzY6cmV0dXJuIF9tcjtjYXNlIDUxMjQ6Y2FzZSAzNTY3MDpyZXR1cm4geW1yO2Nhc2UgMzU2Njc6Y2FzZSAzNTY3MTpyZXR1cm4gdm1yO2Nhc2UgMzU2Njg6Y2FzZSAzNTY3MjpyZXR1cm4geG1yO2Nhc2UgMzU2Njk6Y2FzZSAzNTY3MzpyZXR1cm4gYm1yO2Nhc2UgNTEyNTpyZXR1cm4gd21yO2Nhc2UgMzYyOTQ6cmV0dXJuIFNtcjtjYXNlIDM2Mjk1OnJldHVybiBNbXI7Y2FzZSAzNjI5NjpyZXR1cm4gRW1yO2Nhc2UgMzU2Nzg6Y2FzZSAzNjE5ODpjYXNlIDM2Mjk4OmNhc2UgMzYzMDY6Y2FzZSAzNTY4MjpyZXR1cm4gVG1yO2Nhc2UgMzU2Nzk6Y2FzZSAzNjI5OTpjYXNlIDM2MzA3OnJldHVybiBDbXI7Y2FzZSAzNTY4MDpjYXNlIDM2MzAwOmNhc2UgMzYzMDg6Y2FzZSAzNjI5MzpyZXR1cm4gQW1yO2Nhc2UgMzYyODk6Y2FzZSAzNjMwMzpjYXNlIDM2MzExOmNhc2UgMzYyOTI6cmV0dXJuIFBtcn19ZnVuY3Rpb24gTG1yKGUsdCl7ZS51bmlmb3JtMWZ2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBrbXIoZSx0KXtsZXQgcj1iTSh0LHRoaXMuc2l6ZSwyKTtlLnVuaWZvcm0yZnYodGhpcy5hZGRyLHIpfWZ1bmN0aW9uIFJtcihlLHQpe2xldCByPWJNKHQsdGhpcy5zaXplLDMpO2UudW5pZm9ybTNmdih0aGlzLmFkZHIscil9ZnVuY3Rpb24gTm1yKGUsdCl7bGV0IHI9Yk0odCx0aGlzLnNpemUsNCk7ZS51bmlmb3JtNGZ2KHRoaXMuYWRkcixyKX1mdW5jdGlvbiBEbXIoZSx0KXtsZXQgcj1iTSh0LHRoaXMuc2l6ZSw0KTtlLnVuaWZvcm1NYXRyaXgyZnYodGhpcy5hZGRyLCExLHIpfWZ1bmN0aW9uIE9tcihlLHQpe2xldCByPWJNKHQsdGhpcy5zaXplLDkpO2UudW5pZm9ybU1hdHJpeDNmdih0aGlzLmFkZHIsITEscil9ZnVuY3Rpb24gem1yKGUsdCl7bGV0IHI9Yk0odCx0aGlzLnNpemUsMTYpO2UudW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEscil9ZnVuY3Rpb24gRm1yKGUsdCl7ZS51bmlmb3JtMWl2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBCbXIoZSx0KXtlLnVuaWZvcm0yaXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIEhtcihlLHQpe2UudW5pZm9ybTNpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gVm1yKGUsdCl7ZS51bmlmb3JtNGl2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBVbXIoZSx0KXtlLnVuaWZvcm0xdWl2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBxbXIoZSx0KXtlLnVuaWZvcm0ydWl2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBHbXIoZSx0KXtlLnVuaWZvcm0zdWl2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBXbXIoZSx0KXtlLnVuaWZvcm00dWl2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBZbXIoZSx0LHIpe2xldCBuPXQubGVuZ3RoLGk9S1UocixuKTtlLnVuaWZvcm0xaXYodGhpcy5hZGRyLGkpO2ZvcihsZXQgbz0wO28hPT1uOysrbylyLnNhZmVTZXRUZXh0dXJlMkQodFtvXXx8V2ZlLGlbb10pfWZ1bmN0aW9uIGptcihlLHQscil7bGV0IG49dC5sZW5ndGgsaT1LVShyLG4pO2UudW5pZm9ybTFpdih0aGlzLmFkZHIsaSk7Zm9yKGxldCBvPTA7byE9PW47KytvKXIuc2V0VGV4dHVyZTNEKHRbb118fGpmZSxpW29dKX1mdW5jdGlvbiBYbXIoZSx0LHIpe2xldCBuPXQubGVuZ3RoLGk9S1UocixuKTtlLnVuaWZvcm0xaXYodGhpcy5hZGRyLGkpO2ZvcihsZXQgbz0wO28hPT1uOysrbylyLnNhZmVTZXRUZXh0dXJlQ3ViZSh0W29dfHxYZmUsaVtvXSl9ZnVuY3Rpb24gJG1yKGUsdCxyKXtsZXQgbj10Lmxlbmd0aCxpPUtVKHIsbik7ZS51bmlmb3JtMWl2KHRoaXMuYWRkcixpKTtmb3IobGV0IG89MDtvIT09bjsrK28pci5zZXRUZXh0dXJlMkRBcnJheSh0W29dfHxZZmUsaVtvXSl9ZnVuY3Rpb24gS21yKGUpe3N3aXRjaChlKXtjYXNlIDUxMjY6cmV0dXJuIExtcjtjYXNlIDM1NjY0OnJldHVybiBrbXI7Y2FzZSAzNTY2NTpyZXR1cm4gUm1yO2Nhc2UgMzU2NjY6cmV0dXJuIE5tcjtjYXNlIDM1Njc0OnJldHVybiBEbXI7Y2FzZSAzNTY3NTpyZXR1cm4gT21yO2Nhc2UgMzU2NzY6cmV0dXJuIHptcjtjYXNlIDUxMjQ6Y2FzZSAzNTY3MDpyZXR1cm4gRm1yO2Nhc2UgMzU2Njc6Y2FzZSAzNTY3MTpyZXR1cm4gQm1yO2Nhc2UgMzU2Njg6Y2FzZSAzNTY3MjpyZXR1cm4gSG1yO2Nhc2UgMzU2Njk6Y2FzZSAzNTY3MzpyZXR1cm4gVm1yO2Nhc2UgNTEyNTpyZXR1cm4gVW1yO2Nhc2UgMzYyOTQ6cmV0dXJuIHFtcjtjYXNlIDM2Mjk1OnJldHVybiBHbXI7Y2FzZSAzNjI5NjpyZXR1cm4gV21yO2Nhc2UgMzU2Nzg6Y2FzZSAzNjE5ODpjYXNlIDM2Mjk4OmNhc2UgMzYzMDY6Y2FzZSAzNTY4MjpyZXR1cm4gWW1yO2Nhc2UgMzU2Nzk6Y2FzZSAzNjI5OTpjYXNlIDM2MzA3OnJldHVybiBqbXI7Y2FzZSAzNTY4MDpjYXNlIDM2MzAwOmNhc2UgMzYzMDg6Y2FzZSAzNjI5MzpyZXR1cm4gWG1yO2Nhc2UgMzYyODk6Y2FzZSAzNjMwMzpjYXNlIDM2MzExOmNhc2UgMzYyOTI6cmV0dXJuICRtcn19ZnVuY3Rpb24gWm1yKGUsdCxyKXt0aGlzLmlkPWUsdGhpcy5hZGRyPXIsdGhpcy5jYWNoZT1bXSx0aGlzLnNldFZhbHVlPUltcih0LnR5cGUpfWZ1bmN0aW9uICRmZShlLHQscil7dGhpcy5pZD1lLHRoaXMuYWRkcj1yLHRoaXMuY2FjaGU9W10sdGhpcy5zaXplPXQuc2l6ZSx0aGlzLnNldFZhbHVlPUttcih0LnR5cGUpfSRmZS5wcm90b3R5cGUudXBkYXRlQ2FjaGU9ZnVuY3Rpb24oZSl7bGV0IHQ9dGhpcy5jYWNoZTtlIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5JiZ0Lmxlbmd0aCE9PWUubGVuZ3RoJiYodGhpcy5jYWNoZT1uZXcgRmxvYXQzMkFycmF5KGUubGVuZ3RoKSksQWEodCxlKX07ZnVuY3Rpb24gS2ZlKGUpe3RoaXMuaWQ9ZSx0aGlzLnNlcT1bXSx0aGlzLm1hcD17fX1LZmUucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKGUsdCxyKXtsZXQgbj10aGlzLnNlcTtmb3IobGV0IGk9MCxvPW4ubGVuZ3RoO2khPT1vOysraSl7bGV0IGE9bltpXTthLnNldFZhbHVlKGUsdFthLmlkXSxyKX19O3ZhciBwdXQ9LyhcdyspKFxdKT8oXFt8XC4pPy9nO2Z1bmN0aW9uIFZ1ZShlLHQpe2Uuc2VxLnB1c2godCksZS5tYXBbdC5pZF09dH1mdW5jdGlvbiBKbXIoZSx0LHIpe2xldCBuPWUubmFtZSxpPW4ubGVuZ3RoO2ZvcihwdXQubGFzdEluZGV4PTA7Oyl7bGV0IG89cHV0LmV4ZWMobiksYT1wdXQubGFzdEluZGV4LHM9b1sxXSxsPW9bMl09PT0iXSIsYz1vWzNdO2lmKGwmJihzPXN8MCksYz09PXZvaWQgMHx8Yz09PSJbIiYmYSsyPT09aSl7VnVlKHIsYz09PXZvaWQgMD9uZXcgWm1yKHMsZSx0KTpuZXcgJGZlKHMsZSx0KSk7YnJlYWt9ZWxzZXtsZXQgaD1yLm1hcFtzXTtoPT09dm9pZCAwJiYoaD1uZXcgS2ZlKHMpLFZ1ZShyLGgpKSxyPWh9fX1mdW5jdGlvbiBIMChlLHQpe3RoaXMuc2VxPVtdLHRoaXMubWFwPXt9O2xldCByPWUuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0LDM1NzE4KTtmb3IobGV0IG49MDtuPHI7KytuKXtsZXQgaT1lLmdldEFjdGl2ZVVuaWZvcm0odCxuKSxvPWUuZ2V0VW5pZm9ybUxvY2F0aW9uKHQsaS5uYW1lKTtKbXIoaSxvLHRoaXMpfX1IMC5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24oZSx0LHIsbil7bGV0IGk9dGhpcy5tYXBbdF07aSE9PXZvaWQgMCYmaS5zZXRWYWx1ZShlLHIsbil9O0gwLnByb3RvdHlwZS5zZXRPcHRpb25hbD1mdW5jdGlvbihlLHQscil7bGV0IG49dFtyXTtuIT09dm9pZCAwJiZ0aGlzLnNldFZhbHVlKGUscixuKX07SDAudXBsb2FkPWZ1bmN0aW9uKGUsdCxyLG4pe2ZvcihsZXQgaT0wLG89dC5sZW5ndGg7aSE9PW87KytpKXtsZXQgYT10W2ldLHM9clthLmlkXTtzLm5lZWRzVXBkYXRlIT09ITEmJmEuc2V0VmFsdWUoZSxzLnZhbHVlLG4pfX07SDAuc2VxV2l0aFZhbHVlPWZ1bmN0aW9uKGUsdCl7bGV0IHI9W107Zm9yKGxldCBuPTAsaT1lLmxlbmd0aDtuIT09aTsrK24pe2xldCBvPWVbbl07by5pZCBpbiB0JiZyLnB1c2gobyl9cmV0dXJuIHJ9O2Z1bmN0aW9uIFV1ZShlLHQscil7bGV0IG49ZS5jcmVhdGVTaGFkZXIodCk7cmV0dXJuIGUuc2hhZGVyU291cmNlKG4sciksZS5jb21waWxlU2hhZGVyKG4pLG59dmFyIFFtcj0wO2Z1bmN0aW9uIHRncihlKXtsZXQgdD1lLnNwbGl0KGAKYCk7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspdFtyXT1yKzErIjogIit0W3JdO3JldHVybiB0LmpvaW4oYApgKX1mdW5jdGlvbiBlZ3IoZSl7c3dpdGNoKGUpe2Nhc2UgdG06cmV0dXJuWyJMaW5lYXIiLCIoIHZhbHVlICkiXTtjYXNlIFluOnJldHVyblsic1JHQiIsIiggdmFsdWUgKSJdO2RlZmF1bHQ6cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtOiBVbnN1cHBvcnRlZCBlbmNvZGluZzoiLGUpLFsiTGluZWFyIiwiKCB2YWx1ZSApIl19fWZ1bmN0aW9uIHF1ZShlLHQscil7bGV0IG49ZS5nZXRTaGFkZXJQYXJhbWV0ZXIodCwzNTcxMyksaT1lLmdldFNoYWRlckluZm9Mb2codCkudHJpbSgpO3JldHVybiBuJiZpPT09IiI/IiI6ci50b1VwcGVyQ2FzZSgpK2AKCmAraStgCgpgK3RncihlLmdldFNoYWRlclNvdXJjZSh0KSl9ZnVuY3Rpb24gcmdyKGUsdCl7bGV0IHI9ZWdyKHQpO3JldHVybiJ2ZWM0ICIrZSsiKCB2ZWM0IHZhbHVlICkgeyByZXR1cm4gTGluZWFyVG8iK3JbMF0rclsxXSsiOyB9In1mdW5jdGlvbiBuZ3IoZSx0KXtsZXQgcjtzd2l0Y2godCl7Y2FzZSB1ZmU6cj0iTGluZWFyIjticmVhaztjYXNlIGhmZTpyPSJSZWluaGFyZCI7YnJlYWs7Y2FzZSBmZmU6cj0iT3B0aW1pemVkQ2luZW9uIjticmVhaztjYXNlIHBmZTpyPSJBQ0VTRmlsbWljIjticmVhaztjYXNlIGRmZTpyPSJDdXN0b20iO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IFVuc3VwcG9ydGVkIHRvbmVNYXBwaW5nOiIsdCkscj0iTGluZWFyIn1yZXR1cm4idmVjMyAiK2UrIiggdmVjMyBjb2xvciApIHsgcmV0dXJuICIrcisiVG9uZU1hcHBpbmcoIGNvbG9yICk7IH0ifWZ1bmN0aW9uIGlncihlKXtyZXR1cm5bZS5leHRlbnNpb25EZXJpdmF0aXZlc3x8ZS5lbnZNYXBDdWJlVVZ8fGUuYnVtcE1hcHx8ZS50YW5nZW50U3BhY2VOb3JtYWxNYXB8fGUuY2xlYXJjb2F0Tm9ybWFsTWFwfHxlLmZsYXRTaGFkaW5nfHxlLnNoYWRlcklEPT09InBoeXNpY2FsIj8iI2V4dGVuc2lvbiBHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgOiBlbmFibGUiOiIiLChlLmV4dGVuc2lvbkZyYWdEZXB0aHx8ZS5sb2dhcml0aG1pY0RlcHRoQnVmZmVyKSYmZS5yZW5kZXJlckV4dGVuc2lvbkZyYWdEZXB0aD8iI2V4dGVuc2lvbiBHTF9FWFRfZnJhZ19kZXB0aCA6IGVuYWJsZSI6IiIsZS5leHRlbnNpb25EcmF3QnVmZmVycyYmZS5yZW5kZXJlckV4dGVuc2lvbkRyYXdCdWZmZXJzPyIjZXh0ZW5zaW9uIEdMX0VYVF9kcmF3X2J1ZmZlcnMgOiByZXF1aXJlIjoiIiwoZS5leHRlbnNpb25TaGFkZXJUZXh0dXJlTE9EfHxlLmVudk1hcHx8ZS50cmFuc21pc3Npb24pJiZlLnJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZD8iI2V4dGVuc2lvbiBHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9kIDogZW5hYmxlIjoiIl0uZmlsdGVyKEhQKS5qb2luKGAKYCl9ZnVuY3Rpb24gb2dyKGUpe2xldCB0PVtdO2ZvcihsZXQgciBpbiBlKXtsZXQgbj1lW3JdO24hPT0hMSYmdC5wdXNoKCIjZGVmaW5lICIrcisiICIrbil9cmV0dXJuIHQuam9pbihgCmApfWZ1bmN0aW9uIGFncihlLHQpe2xldCByPXt9LG49ZS5nZXRQcm9ncmFtUGFyYW1ldGVyKHQsMzU3MjEpO2ZvcihsZXQgaT0wO2k8bjtpKyspe2xldCBvPWUuZ2V0QWN0aXZlQXR0cmliKHQsaSksYT1vLm5hbWUscz0xO28udHlwZT09PTM1Njc0JiYocz0yKSxvLnR5cGU9PT0zNTY3NSYmKHM9Myksby50eXBlPT09MzU2NzYmJihzPTQpLHJbYV09e3R5cGU6by50eXBlLGxvY2F0aW9uOmUuZ2V0QXR0cmliTG9jYXRpb24odCxhKSxsb2NhdGlvblNpemU6c319cmV0dXJuIHJ9ZnVuY3Rpb24gSFAoZSl7cmV0dXJuIGUhPT0iIn1mdW5jdGlvbiBHdWUoZSx0KXtyZXR1cm4gZS5yZXBsYWNlKC9OVU1fRElSX0xJR0hUUy9nLHQubnVtRGlyTGlnaHRzKS5yZXBsYWNlKC9OVU1fU1BPVF9MSUdIVFMvZyx0Lm51bVNwb3RMaWdodHMpLnJlcGxhY2UoL05VTV9SRUNUX0FSRUFfTElHSFRTL2csdC5udW1SZWN0QXJlYUxpZ2h0cykucmVwbGFjZSgvTlVNX1BPSU5UX0xJR0hUUy9nLHQubnVtUG9pbnRMaWdodHMpLnJlcGxhY2UoL05VTV9IRU1JX0xJR0hUUy9nLHQubnVtSGVtaUxpZ2h0cykucmVwbGFjZSgvTlVNX0RJUl9MSUdIVF9TSEFET1dTL2csdC5udW1EaXJMaWdodFNoYWRvd3MpLnJlcGxhY2UoL05VTV9TUE9UX0xJR0hUX1NIQURPV1MvZyx0Lm51bVNwb3RMaWdodFNoYWRvd3MpLnJlcGxhY2UoL05VTV9QT0lOVF9MSUdIVF9TSEFET1dTL2csdC5udW1Qb2ludExpZ2h0U2hhZG93cyl9ZnVuY3Rpb24gV3VlKGUsdCl7cmV0dXJuIGUucmVwbGFjZSgvTlVNX0NMSVBQSU5HX1BMQU5FUy9nLHQubnVtQ2xpcHBpbmdQbGFuZXMpLnJlcGxhY2UoL1VOSU9OX0NMSVBQSU5HX1BMQU5FUy9nLHQubnVtQ2xpcHBpbmdQbGFuZXMtdC5udW1DbGlwSW50ZXJzZWN0aW9uKX12YXIgc2dyPS9eWyBcdF0qI2luY2x1ZGUgKzwoW1x3XGQuL10rKT4vZ207ZnVuY3Rpb24gSnV0KGUpe3JldHVybiBlLnJlcGxhY2Uoc2dyLGxncil9ZnVuY3Rpb24gbGdyKGUsdCl7bGV0IHI9aHJbdF07aWYocj09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIkNhbiBub3QgcmVzb2x2ZSAjaW5jbHVkZSA8Iit0KyI+Iik7cmV0dXJuIEp1dChyKX12YXIgY2dyPS8jcHJhZ21hIHVucm9sbF9sb29wW1xzXSs/Zm9yIFwoIGludCBpIFw9IChcZCspXDsgaSA8IChcZCspXDsgaSBcK1wrIFwpIFx7KFtcc1xTXSs/KSg/PVx9KVx9L2csdWdyPS8jcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XHMrZm9yXHMqXChccyppbnRccytpXHMqPVxzKihcZCspXHMqO1xzKmlccyo8XHMqKFxkKylccyo7XHMqaVxzKlwrXCtccypcKVxzKnsoW1xzXFNdKz8pfVxzKyNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kL2c7ZnVuY3Rpb24gWXVlKGUpe3JldHVybiBlLnJlcGxhY2UodWdyLFpmZSkucmVwbGFjZShjZ3IsaGdyKX1mdW5jdGlvbiBoZ3IoZSx0LHIsbil7cmV0dXJuIGNvbnNvbGUud2FybigiV2ViR0xQcm9ncmFtOiAjcHJhZ21hIHVucm9sbF9sb29wIHNoYWRlciBzeW50YXggaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSAjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0IHN5bnRheCBpbnN0ZWFkLiIpLFpmZShlLHQscixuKX1mdW5jdGlvbiBaZmUoZSx0LHIsbil7bGV0IGk9IiI7Zm9yKGxldCBvPXBhcnNlSW50KHQpO288cGFyc2VJbnQocik7bysrKWkrPW4ucmVwbGFjZSgvXFtccyppXHMqXF0vZywiWyAiK28rIiBdIikucmVwbGFjZSgvVU5ST0xMRURfTE9PUF9JTkRFWC9nLG8pO3JldHVybiBpfWZ1bmN0aW9uIGp1ZShlKXtsZXQgdD0icHJlY2lzaW9uICIrZS5wcmVjaXNpb24rYCBmbG9hdDsKcHJlY2lzaW9uIGArZS5wcmVjaXNpb24rIiBpbnQ7IjtyZXR1cm4gZS5wcmVjaXNpb249PT0iaGlnaHAiP3QrPWAKI2RlZmluZSBISUdIX1BSRUNJU0lPTmA6ZS5wcmVjaXNpb249PT0ibWVkaXVtcCI/dCs9YAojZGVmaW5lIE1FRElVTV9QUkVDSVNJT05gOmUucHJlY2lzaW9uPT09Imxvd3AiJiYodCs9YAojZGVmaW5lIExPV19QUkVDSVNJT05gKSx0fWZ1bmN0aW9uIGZncihlKXtsZXQgdD0iU0hBRE9XTUFQX1RZUEVfQkFTSUMiO3JldHVybiBlLnNoYWRvd01hcFR5cGU9PT1DaHQ/dD0iU0hBRE9XTUFQX1RZUEVfUENGIjplLnNoYWRvd01hcFR5cGU9PT1VaGU/dD0iU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQiOmUuc2hhZG93TWFwVHlwZT09PUYzJiYodD0iU0hBRE9XTUFQX1RZUEVfVlNNIiksdH1mdW5jdGlvbiBwZ3IoZSl7bGV0IHQ9IkVOVk1BUF9UWVBFX0NVQkUiO2lmKGUuZW52TWFwKXN3aXRjaChlLmVudk1hcE1vZGUpe2Nhc2UgaXg6Y2FzZSBveDp0PSJFTlZNQVBfVFlQRV9DVUJFIjticmVhaztjYXNlIHhNOmNhc2UgejY6dD0iRU5WTUFQX1RZUEVfQ1VCRV9VViI7YnJlYWt9cmV0dXJuIHR9ZnVuY3Rpb24gZGdyKGUpe2xldCB0PSJFTlZNQVBfTU9ERV9SRUZMRUNUSU9OIjtpZihlLmVudk1hcClzd2l0Y2goZS5lbnZNYXBNb2RlKXtjYXNlIG94OmNhc2UgejY6dD0iRU5WTUFQX01PREVfUkVGUkFDVElPTiI7YnJlYWt9cmV0dXJuIHR9ZnVuY3Rpb24gbWdyKGUpe2xldCB0PSJFTlZNQVBfQkxFTkRJTkdfTk9ORSI7aWYoZS5lbnZNYXApc3dpdGNoKGUuY29tYmluZSl7Y2FzZSBPNjp0PSJFTlZNQVBfQkxFTkRJTkdfTVVMVElQTFkiO2JyZWFrO2Nhc2UgbGZlOnQ9IkVOVk1BUF9CTEVORElOR19NSVgiO2JyZWFrO2Nhc2UgY2ZlOnQ9IkVOVk1BUF9CTEVORElOR19BREQiO2JyZWFrfXJldHVybiB0fWZ1bmN0aW9uIGdncihlLHQscixuKXtsZXQgaT1lLmdldENvbnRleHQoKSxvPXIuZGVmaW5lcyxhPXIudmVydGV4U2hhZGVyLHM9ci5mcmFnbWVudFNoYWRlcixsPWZncihyKSxjPXBncihyKSx1PWRncihyKSxoPW1ncihyKSxmPXIuaXNXZWJHTDI/IiI6aWdyKHIpLHA9b2dyKG8pLGQ9aS5jcmVhdGVQcm9ncmFtKCksZyxfLHk9ci5nbHNsVmVyc2lvbj8iI3ZlcnNpb24gIityLmdsc2xWZXJzaW9uK2AKYDoiIjtyLmlzUmF3U2hhZGVyTWF0ZXJpYWw/KGc9W3BdLmZpbHRlcihIUCkuam9pbihgCmApLGcubGVuZ3RoPjAmJihnKz1gCmApLF89W2YscF0uZmlsdGVyKEhQKS5qb2luKGAKYCksXy5sZW5ndGg+MCYmKF8rPWAKYCkpOihnPVtqdWUociksIiNkZWZpbmUgU0hBREVSX05BTUUgIityLnNoYWRlck5hbWUscCxyLmluc3RhbmNpbmc/IiNkZWZpbmUgVVNFX0lOU1RBTkNJTkciOiIiLHIuaW5zdGFuY2luZ0NvbG9yPyIjZGVmaW5lIFVTRV9JTlNUQU5DSU5HX0NPTE9SIjoiIixyLnN1cHBvcnRzVmVydGV4VGV4dHVyZXM/IiNkZWZpbmUgVkVSVEVYX1RFWFRVUkVTIjoiIiwiI2RlZmluZSBNQVhfQk9ORVMgIityLm1heEJvbmVzLHIudXNlRm9nJiZyLmZvZz8iI2RlZmluZSBVU0VfRk9HIjoiIixyLnVzZUZvZyYmci5mb2dFeHAyPyIjZGVmaW5lIEZPR19FWFAyIjoiIixyLm1hcD8iI2RlZmluZSBVU0VfTUFQIjoiIixyLmVudk1hcD8iI2RlZmluZSBVU0VfRU5WTUFQIjoiIixyLmVudk1hcD8iI2RlZmluZSAiK3U6IiIsci5saWdodE1hcD8iI2RlZmluZSBVU0VfTElHSFRNQVAiOiIiLHIuYW9NYXA/IiNkZWZpbmUgVVNFX0FPTUFQIjoiIixyLmVtaXNzaXZlTWFwPyIjZGVmaW5lIFVTRV9FTUlTU0lWRU1BUCI6IiIsci5idW1wTWFwPyIjZGVmaW5lIFVTRV9CVU1QTUFQIjoiIixyLm5vcm1hbE1hcD8iI2RlZmluZSBVU0VfTk9STUFMTUFQIjoiIixyLm5vcm1hbE1hcCYmci5vYmplY3RTcGFjZU5vcm1hbE1hcD8iI2RlZmluZSBPQkpFQ1RTUEFDRV9OT1JNQUxNQVAiOiIiLHIubm9ybWFsTWFwJiZyLnRhbmdlbnRTcGFjZU5vcm1hbE1hcD8iI2RlZmluZSBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIjoiIixyLmNsZWFyY29hdE1hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUTUFQIjoiIixyLmNsZWFyY29hdFJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUX1JPVUdITkVTU01BUCI6IiIsci5jbGVhcmNvYXROb3JtYWxNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAiOiIiLHIuZGlzcGxhY2VtZW50TWFwJiZyLnN1cHBvcnRzVmVydGV4VGV4dHVyZXM/IiNkZWZpbmUgVVNFX0RJU1BMQUNFTUVOVE1BUCI6IiIsci5zcGVjdWxhck1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJNQVAiOiIiLHIuc3BlY3VsYXJJbnRlbnNpdHlNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSSU5URU5TSVRZTUFQIjoiIixyLnNwZWN1bGFyQ29sb3JNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSQ09MT1JNQVAiOiIiLHIucm91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9ST1VHSE5FU1NNQVAiOiIiLHIubWV0YWxuZXNzTWFwPyIjZGVmaW5lIFVTRV9NRVRBTE5FU1NNQVAiOiIiLHIuYWxwaGFNYXA/IiNkZWZpbmUgVVNFX0FMUEhBTUFQIjoiIixyLnRyYW5zbWlzc2lvbj8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OIjoiIixyLnRyYW5zbWlzc2lvbk1hcD8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OTUFQIjoiIixyLnRoaWNrbmVzc01hcD8iI2RlZmluZSBVU0VfVEhJQ0tORVNTTUFQIjoiIixyLnNoZWVuQ29sb3JNYXA/IiNkZWZpbmUgVVNFX1NIRUVOQ09MT1JNQVAiOiIiLHIuc2hlZW5Sb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1NIRUVOUk9VR0hORVNTTUFQIjoiIixyLnZlcnRleFRhbmdlbnRzPyIjZGVmaW5lIFVTRV9UQU5HRU5UIjoiIixyLnZlcnRleENvbG9ycz8iI2RlZmluZSBVU0VfQ09MT1IiOiIiLHIudmVydGV4QWxwaGFzPyIjZGVmaW5lIFVTRV9DT0xPUl9BTFBIQSI6IiIsci52ZXJ0ZXhVdnM/IiNkZWZpbmUgVVNFX1VWIjoiIixyLnV2c1ZlcnRleE9ubHk/IiNkZWZpbmUgVVZTX1ZFUlRFWF9PTkxZIjoiIixyLmZsYXRTaGFkaW5nPyIjZGVmaW5lIEZMQVRfU0hBREVEIjoiIixyLnNraW5uaW5nPyIjZGVmaW5lIFVTRV9TS0lOTklORyI6IiIsci51c2VWZXJ0ZXhUZXh0dXJlPyIjZGVmaW5lIEJPTkVfVEVYVFVSRSI6IiIsci5tb3JwaFRhcmdldHM/IiNkZWZpbmUgVVNFX01PUlBIVEFSR0VUUyI6IiIsci5tb3JwaE5vcm1hbHMmJnIuZmxhdFNoYWRpbmc9PT0hMT8iI2RlZmluZSBVU0VfTU9SUEhOT1JNQUxTIjoiIixyLm1vcnBoVGFyZ2V0cyYmci5pc1dlYkdMMj8iI2RlZmluZSBNT1JQSFRBUkdFVFNfVEVYVFVSRSI6IiIsci5tb3JwaFRhcmdldHMmJnIuaXNXZWJHTDI/IiNkZWZpbmUgTU9SUEhUQVJHRVRTX0NPVU5UICIrci5tb3JwaFRhcmdldHNDb3VudDoiIixyLmRvdWJsZVNpZGVkPyIjZGVmaW5lIERPVUJMRV9TSURFRCI6IiIsci5mbGlwU2lkZWQ/IiNkZWZpbmUgRkxJUF9TSURFRCI6IiIsci5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lIFVTRV9TSEFET1dNQVAiOiIiLHIuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSAiK2w6IiIsci5zaXplQXR0ZW51YXRpb24/IiNkZWZpbmUgVVNFX1NJWkVBVFRFTlVBVElPTiI6IiIsci5sb2dhcml0aG1pY0RlcHRoQnVmZmVyPyIjZGVmaW5lIFVTRV9MT0dERVBUSEJVRiI6IiIsci5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiZyLnJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoPyIjZGVmaW5lIFVTRV9MT0dERVBUSEJVRl9FWFQiOiIiLCJ1bmlmb3JtIG1hdDQgbW9kZWxNYXRyaXg7IiwidW5pZm9ybSBtYXQ0IG1vZGVsVmlld01hdHJpeDsiLCJ1bmlmb3JtIG1hdDQgcHJvamVjdGlvbk1hdHJpeDsiLCJ1bmlmb3JtIG1hdDQgdmlld01hdHJpeDsiLCJ1bmlmb3JtIG1hdDMgbm9ybWFsTWF0cml4OyIsInVuaWZvcm0gdmVjMyBjYW1lcmFQb3NpdGlvbjsiLCJ1bmlmb3JtIGJvb2wgaXNPcnRob2dyYXBoaWM7IiwiI2lmZGVmIFVTRV9JTlNUQU5DSU5HIiwiCWF0dHJpYnV0ZSBtYXQ0IGluc3RhbmNlTWF0cml4OyIsIiNlbmRpZiIsIiNpZmRlZiBVU0VfSU5TVEFOQ0lOR19DT0xPUiIsIglhdHRyaWJ1dGUgdmVjMyBpbnN0YW5jZUNvbG9yOyIsIiNlbmRpZiIsImF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uOyIsImF0dHJpYnV0ZSB2ZWMzIG5vcm1hbDsiLCJhdHRyaWJ1dGUgdmVjMiB1djsiLCIjaWZkZWYgVVNFX1RBTkdFTlQiLCIJYXR0cmlidXRlIHZlYzQgdGFuZ2VudDsiLCIjZW5kaWYiLCIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBICkiLCIJYXR0cmlidXRlIHZlYzQgY29sb3I7IiwiI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SICkiLCIJYXR0cmlidXRlIHZlYzMgY29sb3I7IiwiI2VuZGlmIiwiI2lmICggZGVmaW5lZCggVVNFX01PUlBIVEFSR0VUUyApICYmICEgZGVmaW5lZCggTU9SUEhUQVJHRVRTX1RFWFRVUkUgKSApIiwiCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0MDsiLCIJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQxOyIsIglhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDI7IiwiCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0MzsiLCIJI2lmZGVmIFVTRV9NT1JQSE5PUk1BTFMiLCIJCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMDsiLCIJCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMTsiLCIJCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMjsiLCIJCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMzsiLCIJI2Vsc2UiLCIJCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NDsiLCIJCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NTsiLCIJCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NjsiLCIJCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NzsiLCIJI2VuZGlmIiwiI2VuZGlmIiwiI2lmZGVmIFVTRV9TS0lOTklORyIsIglhdHRyaWJ1dGUgdmVjNCBza2luSW5kZXg7IiwiCWF0dHJpYnV0ZSB2ZWM0IHNraW5XZWlnaHQ7IiwiI2VuZGlmIixgCmBdLmZpbHRlcihIUCkuam9pbihgCmApLF89W2YsanVlKHIpLCIjZGVmaW5lIFNIQURFUl9OQU1FICIrci5zaGFkZXJOYW1lLHAsci51c2VGb2cmJnIuZm9nPyIjZGVmaW5lIFVTRV9GT0ciOiIiLHIudXNlRm9nJiZyLmZvZ0V4cDI/IiNkZWZpbmUgRk9HX0VYUDIiOiIiLHIubWFwPyIjZGVmaW5lIFVTRV9NQVAiOiIiLHIubWF0Y2FwPyIjZGVmaW5lIFVTRV9NQVRDQVAiOiIiLHIuZW52TWFwPyIjZGVmaW5lIFVTRV9FTlZNQVAiOiIiLHIuZW52TWFwPyIjZGVmaW5lICIrYzoiIixyLmVudk1hcD8iI2RlZmluZSAiK3U6IiIsci5lbnZNYXA/IiNkZWZpbmUgIitoOiIiLHIubGlnaHRNYXA/IiNkZWZpbmUgVVNFX0xJR0hUTUFQIjoiIixyLmFvTWFwPyIjZGVmaW5lIFVTRV9BT01BUCI6IiIsci5lbWlzc2l2ZU1hcD8iI2RlZmluZSBVU0VfRU1JU1NJVkVNQVAiOiIiLHIuYnVtcE1hcD8iI2RlZmluZSBVU0VfQlVNUE1BUCI6IiIsci5ub3JtYWxNYXA/IiNkZWZpbmUgVVNFX05PUk1BTE1BUCI6IiIsci5ub3JtYWxNYXAmJnIub2JqZWN0U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgT0JKRUNUU1BBQ0VfTk9STUFMTUFQIjoiIixyLm5vcm1hbE1hcCYmci50YW5nZW50U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgVEFOR0VOVFNQQUNFX05PUk1BTE1BUCI6IiIsci5jbGVhcmNvYXQ/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVCI6IiIsci5jbGVhcmNvYXRNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVE1BUCI6IiIsci5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVAiOiIiLHIuY2xlYXJjb2F0Tm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQIjoiIixyLnNwZWN1bGFyTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUk1BUCI6IiIsci5zcGVjdWxhckludGVuc2l0eU1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVAiOiIiLHIuc3BlY3VsYXJDb2xvck1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJDT0xPUk1BUCI6IiIsci5yb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1JPVUdITkVTU01BUCI6IiIsci5tZXRhbG5lc3NNYXA/IiNkZWZpbmUgVVNFX01FVEFMTkVTU01BUCI6IiIsci5hbHBoYU1hcD8iI2RlZmluZSBVU0VfQUxQSEFNQVAiOiIiLHIuYWxwaGFUZXN0PyIjZGVmaW5lIFVTRV9BTFBIQVRFU1QiOiIiLHIuc2hlZW4/IiNkZWZpbmUgVVNFX1NIRUVOIjoiIixyLnNoZWVuQ29sb3JNYXA/IiNkZWZpbmUgVVNFX1NIRUVOQ09MT1JNQVAiOiIiLHIuc2hlZW5Sb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1NIRUVOUk9VR0hORVNTTUFQIjoiIixyLnRyYW5zbWlzc2lvbj8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OIjoiIixyLnRyYW5zbWlzc2lvbk1hcD8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OTUFQIjoiIixyLnRoaWNrbmVzc01hcD8iI2RlZmluZSBVU0VfVEhJQ0tORVNTTUFQIjoiIixyLmRlY29kZVZpZGVvVGV4dHVyZT8iI2RlZmluZSBERUNPREVfVklERU9fVEVYVFVSRSI6IiIsci52ZXJ0ZXhUYW5nZW50cz8iI2RlZmluZSBVU0VfVEFOR0VOVCI6IiIsci52ZXJ0ZXhDb2xvcnN8fHIuaW5zdGFuY2luZ0NvbG9yPyIjZGVmaW5lIFVTRV9DT0xPUiI6IiIsci52ZXJ0ZXhBbHBoYXM/IiNkZWZpbmUgVVNFX0NPTE9SX0FMUEhBIjoiIixyLnZlcnRleFV2cz8iI2RlZmluZSBVU0VfVVYiOiIiLHIudXZzVmVydGV4T25seT8iI2RlZmluZSBVVlNfVkVSVEVYX09OTFkiOiIiLHIuZ3JhZGllbnRNYXA/IiNkZWZpbmUgVVNFX0dSQURJRU5UTUFQIjoiIixyLmZsYXRTaGFkaW5nPyIjZGVmaW5lIEZMQVRfU0hBREVEIjoiIixyLmRvdWJsZVNpZGVkPyIjZGVmaW5lIERPVUJMRV9TSURFRCI6IiIsci5mbGlwU2lkZWQ/IiNkZWZpbmUgRkxJUF9TSURFRCI6IiIsci5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lIFVTRV9TSEFET1dNQVAiOiIiLHIuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSAiK2w6IiIsci5wcmVtdWx0aXBsaWVkQWxwaGE/IiNkZWZpbmUgUFJFTVVMVElQTElFRF9BTFBIQSI6IiIsci5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cz8iI2RlZmluZSBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTIjoiIixyLmxvZ2FyaXRobWljRGVwdGhCdWZmZXI/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGIjoiIixyLmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJnIucmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGX0VYVCI6IiIsKHIuZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRHx8ci5lbnZNYXApJiZyLnJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZD8iI2RlZmluZSBURVhUVVJFX0xPRF9FWFQiOiIiLCJ1bmlmb3JtIG1hdDQgdmlld01hdHJpeDsiLCJ1bmlmb3JtIHZlYzMgY2FtZXJhUG9zaXRpb247IiwidW5pZm9ybSBib29sIGlzT3J0aG9ncmFwaGljOyIsci50b25lTWFwcGluZyE9PVpkPyIjZGVmaW5lIFRPTkVfTUFQUElORyI6IiIsci50b25lTWFwcGluZyE9PVpkP2hyLnRvbmVtYXBwaW5nX3BhcnNfZnJhZ21lbnQ6IiIsci50b25lTWFwcGluZyE9PVpkP25ncigidG9uZU1hcHBpbmciLHIudG9uZU1hcHBpbmcpOiIiLHIuZGl0aGVyaW5nPyIjZGVmaW5lIERJVEhFUklORyI6IiIsci5hbHBoYVdyaXRlPyIiOiIjZGVmaW5lIE9QQVFVRSIsaHIuZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQscmdyKCJsaW5lYXJUb091dHB1dFRleGVsIixyLm91dHB1dEVuY29kaW5nKSxyLmRlcHRoUGFja2luZz8iI2RlZmluZSBERVBUSF9QQUNLSU5HICIrci5kZXB0aFBhY2tpbmc6IiIsYApgXS5maWx0ZXIoSFApLmpvaW4oYApgKSksYT1KdXQoYSksYT1HdWUoYSxyKSxhPVd1ZShhLHIpLHM9SnV0KHMpLHM9R3VlKHMscikscz1XdWUocyxyKSxhPVl1ZShhKSxzPVl1ZShzKSxyLmlzV2ViR0wyJiZyLmlzUmF3U2hhZGVyTWF0ZXJpYWwhPT0hMCYmKHk9YCN2ZXJzaW9uIDMwMCBlcwpgLGc9WyJwcmVjaXNpb24gbWVkaXVtcCBzYW1wbGVyMkRBcnJheTsiLCIjZGVmaW5lIGF0dHJpYnV0ZSBpbiIsIiNkZWZpbmUgdmFyeWluZyBvdXQiLCIjZGVmaW5lIHRleHR1cmUyRCB0ZXh0dXJlIl0uam9pbihgCmApK2AKYCtnLF89WyIjZGVmaW5lIHZhcnlpbmcgaW4iLHIuZ2xzbFZlcnNpb249PT1LdXQ/IiI6ImxheW91dChsb2NhdGlvbiA9IDApIG91dCBoaWdocCB2ZWM0IHBjX2ZyYWdDb2xvcjsiLHIuZ2xzbFZlcnNpb249PT1LdXQ/IiI6IiNkZWZpbmUgZ2xfRnJhZ0NvbG9yIHBjX2ZyYWdDb2xvciIsIiNkZWZpbmUgZ2xfRnJhZ0RlcHRoRVhUIGdsX0ZyYWdEZXB0aCIsIiNkZWZpbmUgdGV4dHVyZTJEIHRleHR1cmUiLCIjZGVmaW5lIHRleHR1cmVDdWJlIHRleHR1cmUiLCIjZGVmaW5lIHRleHR1cmUyRFByb2ogdGV4dHVyZVByb2oiLCIjZGVmaW5lIHRleHR1cmUyRExvZEVYVCB0ZXh0dXJlTG9kIiwiI2RlZmluZSB0ZXh0dXJlMkRQcm9qTG9kRVhUIHRleHR1cmVQcm9qTG9kIiwiI2RlZmluZSB0ZXh0dXJlQ3ViZUxvZEVYVCB0ZXh0dXJlTG9kIiwiI2RlZmluZSB0ZXh0dXJlMkRHcmFkRVhUIHRleHR1cmVHcmFkIiwiI2RlZmluZSB0ZXh0dXJlMkRQcm9qR3JhZEVYVCB0ZXh0dXJlUHJvakdyYWQiLCIjZGVmaW5lIHRleHR1cmVDdWJlR3JhZEVYVCB0ZXh0dXJlR3JhZCJdLmpvaW4oYApgKStgCmArXyk7bGV0IHg9eStnK2EsYj15K18rcyxTPVV1ZShpLDM1NjMzLHgpLEM9VXVlKGksMzU2MzIsYik7aWYoaS5hdHRhY2hTaGFkZXIoZCxTKSxpLmF0dGFjaFNoYWRlcihkLEMpLHIuaW5kZXgwQXR0cmlidXRlTmFtZSE9PXZvaWQgMD9pLmJpbmRBdHRyaWJMb2NhdGlvbihkLDAsci5pbmRleDBBdHRyaWJ1dGVOYW1lKTpyLm1vcnBoVGFyZ2V0cz09PSEwJiZpLmJpbmRBdHRyaWJMb2NhdGlvbihkLDAsInBvc2l0aW9uIiksaS5saW5rUHJvZ3JhbShkKSxlLmRlYnVnLmNoZWNrU2hhZGVyRXJyb3JzKXtsZXQgTz1pLmdldFByb2dyYW1JbmZvTG9nKGQpLnRyaW0oKSxEPWkuZ2V0U2hhZGVySW5mb0xvZyhTKS50cmltKCksQj1pLmdldFNoYWRlckluZm9Mb2coQykudHJpbSgpLEk9ITAsTD0hMDtpZihpLmdldFByb2dyYW1QYXJhbWV0ZXIoZCwzNTcxNCk9PT0hMSl7ST0hMTtsZXQgUj1xdWUoaSxTLCJ2ZXJ0ZXgiKSxGPXF1ZShpLEMsImZyYWdtZW50Iik7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xQcm9ncmFtOiBTaGFkZXIgRXJyb3IgIitpLmdldEVycm9yKCkrIiAtIFZBTElEQVRFX1NUQVRVUyAiK2kuZ2V0UHJvZ3JhbVBhcmFtZXRlcihkLDM1NzE1KStgCgpQcm9ncmFtIEluZm8gTG9nOiBgK08rYApgK1IrYApgK0YpfWVsc2UgTyE9PSIiP2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtOiBQcm9ncmFtIEluZm8gTG9nOiIsTyk6KEQ9PT0iInx8Qj09PSIiKSYmKEw9ITEpO0wmJih0aGlzLmRpYWdub3N0aWNzPXtydW5uYWJsZTpJLHByb2dyYW1Mb2c6Tyx2ZXJ0ZXhTaGFkZXI6e2xvZzpELHByZWZpeDpnfSxmcmFnbWVudFNoYWRlcjp7bG9nOkIscHJlZml4Ol99fSl9aS5kZWxldGVTaGFkZXIoUyksaS5kZWxldGVTaGFkZXIoQyk7bGV0IFA7dGhpcy5nZXRVbmlmb3Jtcz1mdW5jdGlvbigpe3JldHVybiBQPT09dm9pZCAwJiYoUD1uZXcgSDAoaSxkKSksUH07bGV0IGs7cmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlcz1mdW5jdGlvbigpe3JldHVybiBrPT09dm9pZCAwJiYoaz1hZ3IoaSxkKSksa30sdGhpcy5kZXN0cm95PWZ1bmN0aW9uKCl7bi5yZWxlYXNlU3RhdGVzT2ZQcm9ncmFtKHRoaXMpLGkuZGVsZXRlUHJvZ3JhbShkKSx0aGlzLnByb2dyYW09dm9pZCAwfSx0aGlzLm5hbWU9ci5zaGFkZXJOYW1lLHRoaXMuaWQ9UW1yKyssdGhpcy5jYWNoZUtleT10LHRoaXMudXNlZFRpbWVzPTEsdGhpcy5wcm9ncmFtPWQsdGhpcy52ZXJ0ZXhTaGFkZXI9Uyx0aGlzLmZyYWdtZW50U2hhZGVyPUMsdGhpc312YXIgX2dyPTAsUXV0PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zaGFkZXJDYWNoZT1uZXcgTWFwLHRoaXMubWF0ZXJpYWxDYWNoZT1uZXcgTWFwfXVwZGF0ZSh0KXtsZXQgcj10LnZlcnRleFNoYWRlcixuPXQuZnJhZ21lbnRTaGFkZXIsaT10aGlzLl9nZXRTaGFkZXJTdGFnZShyKSxvPXRoaXMuX2dldFNoYWRlclN0YWdlKG4pLGE9dGhpcy5fZ2V0U2hhZGVyQ2FjaGVGb3JNYXRlcmlhbCh0KTtyZXR1cm4gYS5oYXMoaSk9PT0hMSYmKGEuYWRkKGkpLGkudXNlZFRpbWVzKyspLGEuaGFzKG8pPT09ITEmJihhLmFkZChvKSxvLnVzZWRUaW1lcysrKSx0aGlzfXJlbW92ZSh0KXtsZXQgcj10aGlzLm1hdGVyaWFsQ2FjaGUuZ2V0KHQpO2ZvcihsZXQgbiBvZiByKW4udXNlZFRpbWVzLS0sbi51c2VkVGltZXM9PT0wJiZ0aGlzLnNoYWRlckNhY2hlLmRlbGV0ZShuKTtyZXR1cm4gdGhpcy5tYXRlcmlhbENhY2hlLmRlbGV0ZSh0KSx0aGlzfWdldFZlcnRleFNoYWRlcklEKHQpe3JldHVybiB0aGlzLl9nZXRTaGFkZXJTdGFnZSh0LnZlcnRleFNoYWRlcikuaWR9Z2V0RnJhZ21lbnRTaGFkZXJJRCh0KXtyZXR1cm4gdGhpcy5fZ2V0U2hhZGVyU3RhZ2UodC5mcmFnbWVudFNoYWRlcikuaWR9ZGlzcG9zZSgpe3RoaXMuc2hhZGVyQ2FjaGUuY2xlYXIoKSx0aGlzLm1hdGVyaWFsQ2FjaGUuY2xlYXIoKX1fZ2V0U2hhZGVyQ2FjaGVGb3JNYXRlcmlhbCh0KXtsZXQgcj10aGlzLm1hdGVyaWFsQ2FjaGU7cmV0dXJuIHIuaGFzKHQpPT09ITEmJnIuc2V0KHQsbmV3IFNldCksci5nZXQodCl9X2dldFNoYWRlclN0YWdlKHQpe2xldCByPXRoaXMuc2hhZGVyQ2FjaGU7aWYoci5oYXModCk9PT0hMSl7bGV0IG49bmV3IHRodDtyLnNldCh0LG4pfXJldHVybiByLmdldCh0KX19LHRodD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuaWQ9X2dyKyssdGhpcy51c2VkVGltZXM9MH19O2Z1bmN0aW9uIHlncihlLHQscixuLGksbyxhKXtsZXQgcz1uZXcgWDMsbD1uZXcgUXV0LGM9W10sdT1pLmlzV2ViR0wyLGg9aS5sb2dhcml0aG1pY0RlcHRoQnVmZmVyLGY9aS5mbG9hdFZlcnRleFRleHR1cmVzLHA9aS5tYXhWZXJ0ZXhVbmlmb3JtcyxkPWkudmVydGV4VGV4dHVyZXMsZz1pLnByZWNpc2lvbixfPXtNZXNoRGVwdGhNYXRlcmlhbDoiZGVwdGgiLE1lc2hEaXN0YW5jZU1hdGVyaWFsOiJkaXN0YW5jZVJHQkEiLE1lc2hOb3JtYWxNYXRlcmlhbDoibm9ybWFsIixNZXNoQmFzaWNNYXRlcmlhbDoiYmFzaWMiLE1lc2hMYW1iZXJ0TWF0ZXJpYWw6ImxhbWJlcnQiLE1lc2hQaG9uZ01hdGVyaWFsOiJwaG9uZyIsTWVzaFRvb25NYXRlcmlhbDoidG9vbiIsTWVzaFN0YW5kYXJkTWF0ZXJpYWw6InBoeXNpY2FsIixNZXNoUGh5c2ljYWxNYXRlcmlhbDoicGh5c2ljYWwiLE1lc2hNYXRjYXBNYXRlcmlhbDoibWF0Y2FwIixMaW5lQmFzaWNNYXRlcmlhbDoiYmFzaWMiLExpbmVEYXNoZWRNYXRlcmlhbDoiZGFzaGVkIixQb2ludHNNYXRlcmlhbDoicG9pbnRzIixTaGFkb3dNYXRlcmlhbDoic2hhZG93IixTcHJpdGVNYXRlcmlhbDoic3ByaXRlIn07ZnVuY3Rpb24geShJKXtsZXQgUj1JLnNrZWxldG9uLmJvbmVzO2lmKGYpcmV0dXJuIDEwMjQ7e2xldCB6PU1hdGguZmxvb3IoKHAtMjApLzQpLFU9TWF0aC5taW4oeixSLmxlbmd0aCk7cmV0dXJuIFU8Ui5sZW5ndGg/KGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogU2tlbGV0b24gaGFzICIrUi5sZW5ndGgrIiBib25lcy4gVGhpcyBHUFUgc3VwcG9ydHMgIitVKyIuIiksMCk6VX19ZnVuY3Rpb24geChJLEwsUixGLHope2xldCBVPUYuZm9nLFc9SS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP0YuZW52aXJvbm1lbnQ6bnVsbCxaPShJLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/cjp0KS5nZXQoSS5lbnZNYXB8fFcpLHJ0PV9bSS50eXBlXSxvdD16LmlzU2tpbm5lZE1lc2g/eSh6KTowO0kucHJlY2lzaW9uIT09bnVsbCYmKGc9aS5nZXRNYXhQcmVjaXNpb24oSS5wcmVjaXNpb24pLGchPT1JLnByZWNpc2lvbiYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW0uZ2V0UGFyYW1ldGVyczoiLEkucHJlY2lzaW9uLCJub3Qgc3VwcG9ydGVkLCB1c2luZyIsZywiaW5zdGVhZC4iKSk7bGV0IHN0LFN0LGJ0LE10O2lmKHJ0KXtsZXQgWD1haFtydF07c3Q9WC52ZXJ0ZXhTaGFkZXIsU3Q9WC5mcmFnbWVudFNoYWRlcn1lbHNlIHN0PUkudmVydGV4U2hhZGVyLFN0PUkuZnJhZ21lbnRTaGFkZXIsbC51cGRhdGUoSSksYnQ9bC5nZXRWZXJ0ZXhTaGFkZXJJRChJKSxNdD1sLmdldEZyYWdtZW50U2hhZGVySUQoSSk7bGV0IGx0PWUuZ2V0UmVuZGVyVGFyZ2V0KCksS3Q9SS5hbHBoYVRlc3Q+MCxfdD1JLmNsZWFyY29hdD4wO3JldHVybntpc1dlYkdMMjp1LHNoYWRlcklEOnJ0LHNoYWRlck5hbWU6SS50eXBlLHZlcnRleFNoYWRlcjpzdCxmcmFnbWVudFNoYWRlcjpTdCxkZWZpbmVzOkkuZGVmaW5lcyxjdXN0b21WZXJ0ZXhTaGFkZXJJRDpidCxjdXN0b21GcmFnbWVudFNoYWRlcklEOk10LGlzUmF3U2hhZGVyTWF0ZXJpYWw6SS5pc1Jhd1NoYWRlck1hdGVyaWFsPT09ITAsZ2xzbFZlcnNpb246SS5nbHNsVmVyc2lvbixwcmVjaXNpb246ZyxpbnN0YW5jaW5nOnouaXNJbnN0YW5jZWRNZXNoPT09ITAsaW5zdGFuY2luZ0NvbG9yOnouaXNJbnN0YW5jZWRNZXNoPT09ITAmJnouaW5zdGFuY2VDb2xvciE9PW51bGwsc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlczpkLG91dHB1dEVuY29kaW5nOmx0PT09bnVsbD9lLm91dHB1dEVuY29kaW5nOmx0LmlzWFJSZW5kZXJUYXJnZXQ9PT0hMD9sdC50ZXh0dXJlLmVuY29kaW5nOnRtLG1hcDohIUkubWFwLG1hdGNhcDohIUkubWF0Y2FwLGVudk1hcDohIVosZW52TWFwTW9kZTpaJiZaLm1hcHBpbmcsZW52TWFwQ3ViZVVWOiEhWiYmKFoubWFwcGluZz09PXhNfHxaLm1hcHBpbmc9PT16NiksbGlnaHRNYXA6ISFJLmxpZ2h0TWFwLGFvTWFwOiEhSS5hb01hcCxlbWlzc2l2ZU1hcDohIUkuZW1pc3NpdmVNYXAsYnVtcE1hcDohIUkuYnVtcE1hcCxub3JtYWxNYXA6ISFJLm5vcm1hbE1hcCxvYmplY3RTcGFjZU5vcm1hbE1hcDpJLm5vcm1hbE1hcFR5cGU9PT1EZmUsdGFuZ2VudFNwYWNlTm9ybWFsTWFwOkkubm9ybWFsTWFwVHlwZT09PXN4LGRlY29kZVZpZGVvVGV4dHVyZTohIUkubWFwJiZJLm1hcC5pc1ZpZGVvVGV4dHVyZT09PSEwJiZJLm1hcC5lbmNvZGluZz09PVluLGNsZWFyY29hdDpfdCxjbGVhcmNvYXRNYXA6X3QmJiEhSS5jbGVhcmNvYXRNYXAsY2xlYXJjb2F0Um91Z2huZXNzTWFwOl90JiYhIUkuY2xlYXJjb2F0Um91Z2huZXNzTWFwLGNsZWFyY29hdE5vcm1hbE1hcDpfdCYmISFJLmNsZWFyY29hdE5vcm1hbE1hcCxkaXNwbGFjZW1lbnRNYXA6ISFJLmRpc3BsYWNlbWVudE1hcCxyb3VnaG5lc3NNYXA6ISFJLnJvdWdobmVzc01hcCxtZXRhbG5lc3NNYXA6ISFJLm1ldGFsbmVzc01hcCxzcGVjdWxhck1hcDohIUkuc3BlY3VsYXJNYXAsc3BlY3VsYXJJbnRlbnNpdHlNYXA6ISFJLnNwZWN1bGFySW50ZW5zaXR5TWFwLHNwZWN1bGFyQ29sb3JNYXA6ISFJLnNwZWN1bGFyQ29sb3JNYXAsYWxwaGFNYXA6ISFJLmFscGhhTWFwLGFscGhhVGVzdDpLdCxhbHBoYVdyaXRlOkkuYWxwaGFXcml0ZXx8SS50cmFuc3BhcmVudCxncmFkaWVudE1hcDohIUkuZ3JhZGllbnRNYXAsc2hlZW46SS5zaGVlbj4wLHNoZWVuQ29sb3JNYXA6ISFJLnNoZWVuQ29sb3JNYXAsc2hlZW5Sb3VnaG5lc3NNYXA6ISFJLnNoZWVuUm91Z2huZXNzTWFwLHRyYW5zbWlzc2lvbjpJLnRyYW5zbWlzc2lvbj4wLHRyYW5zbWlzc2lvbk1hcDohIUkudHJhbnNtaXNzaW9uTWFwLHRoaWNrbmVzc01hcDohIUkudGhpY2tuZXNzTWFwLGNvbWJpbmU6SS5jb21iaW5lLHZlcnRleFRhbmdlbnRzOiEhSS5ub3JtYWxNYXAmJiEhei5nZW9tZXRyeSYmISF6Lmdlb21ldHJ5LmF0dHJpYnV0ZXMudGFuZ2VudCx2ZXJ0ZXhDb2xvcnM6SS52ZXJ0ZXhDb2xvcnMsdmVydGV4QWxwaGFzOkkudmVydGV4Q29sb3JzPT09ITAmJiEhei5nZW9tZXRyeSYmISF6Lmdlb21ldHJ5LmF0dHJpYnV0ZXMuY29sb3ImJnouZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvci5pdGVtU2l6ZT09PTQsdmVydGV4VXZzOiEhSS5tYXB8fCEhSS5idW1wTWFwfHwhIUkubm9ybWFsTWFwfHwhIUkuc3BlY3VsYXJNYXB8fCEhSS5hbHBoYU1hcHx8ISFJLmVtaXNzaXZlTWFwfHwhIUkucm91Z2huZXNzTWFwfHwhIUkubWV0YWxuZXNzTWFwfHwhIUkuY2xlYXJjb2F0TWFwfHwhIUkuY2xlYXJjb2F0Um91Z2huZXNzTWFwfHwhIUkuY2xlYXJjb2F0Tm9ybWFsTWFwfHwhIUkuZGlzcGxhY2VtZW50TWFwfHwhIUkudHJhbnNtaXNzaW9uTWFwfHwhIUkudGhpY2tuZXNzTWFwfHwhIUkuc3BlY3VsYXJJbnRlbnNpdHlNYXB8fCEhSS5zcGVjdWxhckNvbG9yTWFwfHwhIUkuc2hlZW5Db2xvck1hcHx8ISFJLnNoZWVuUm91Z2huZXNzTWFwLHV2c1ZlcnRleE9ubHk6ISghIUkubWFwfHwhIUkuYnVtcE1hcHx8ISFJLm5vcm1hbE1hcHx8ISFJLnNwZWN1bGFyTWFwfHwhIUkuYWxwaGFNYXB8fCEhSS5lbWlzc2l2ZU1hcHx8ISFJLnJvdWdobmVzc01hcHx8ISFJLm1ldGFsbmVzc01hcHx8ISFJLmNsZWFyY29hdE5vcm1hbE1hcHx8SS50cmFuc21pc3Npb24+MHx8ISFJLnRyYW5zbWlzc2lvbk1hcHx8ISFJLnRoaWNrbmVzc01hcHx8ISFJLnNwZWN1bGFySW50ZW5zaXR5TWFwfHwhIUkuc3BlY3VsYXJDb2xvck1hcHx8SS5zaGVlbj4wfHwhIUkuc2hlZW5Db2xvck1hcHx8ISFJLnNoZWVuUm91Z2huZXNzTWFwKSYmISFJLmRpc3BsYWNlbWVudE1hcCxmb2c6ISFVLHVzZUZvZzpJLmZvZyxmb2dFeHAyOlUmJlUuaXNGb2dFeHAyLGZsYXRTaGFkaW5nOiEhSS5mbGF0U2hhZGluZyxzaXplQXR0ZW51YXRpb246SS5zaXplQXR0ZW51YXRpb24sbG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcjpoLHNraW5uaW5nOnouaXNTa2lubmVkTWVzaD09PSEwJiZvdD4wLG1heEJvbmVzOm90LHVzZVZlcnRleFRleHR1cmU6Zixtb3JwaFRhcmdldHM6ISF6Lmdlb21ldHJ5JiYhIXouZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLG1vcnBoTm9ybWFsczohIXouZ2VvbWV0cnkmJiEhei5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsLG1vcnBoVGFyZ2V0c0NvdW50OiEhei5nZW9tZXRyeSYmISF6Lmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbj96Lmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbi5sZW5ndGg6MCxudW1EaXJMaWdodHM6TC5kaXJlY3Rpb25hbC5sZW5ndGgsbnVtUG9pbnRMaWdodHM6TC5wb2ludC5sZW5ndGgsbnVtU3BvdExpZ2h0czpMLnNwb3QubGVuZ3RoLG51bVJlY3RBcmVhTGlnaHRzOkwucmVjdEFyZWEubGVuZ3RoLG51bUhlbWlMaWdodHM6TC5oZW1pLmxlbmd0aCxudW1EaXJMaWdodFNoYWRvd3M6TC5kaXJlY3Rpb25hbFNoYWRvd01hcC5sZW5ndGgsbnVtUG9pbnRMaWdodFNoYWRvd3M6TC5wb2ludFNoYWRvd01hcC5sZW5ndGgsbnVtU3BvdExpZ2h0U2hhZG93czpMLnNwb3RTaGFkb3dNYXAubGVuZ3RoLG51bUNsaXBwaW5nUGxhbmVzOmEubnVtUGxhbmVzLG51bUNsaXBJbnRlcnNlY3Rpb246YS5udW1JbnRlcnNlY3Rpb24sZGl0aGVyaW5nOkkuZGl0aGVyaW5nLHNoYWRvd01hcEVuYWJsZWQ6ZS5zaGFkb3dNYXAuZW5hYmxlZCYmUi5sZW5ndGg+MCxzaGFkb3dNYXBUeXBlOmUuc2hhZG93TWFwLnR5cGUsdG9uZU1hcHBpbmc6SS50b25lTWFwcGVkP2UudG9uZU1hcHBpbmc6WmQscGh5c2ljYWxseUNvcnJlY3RMaWdodHM6ZS5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyxwcmVtdWx0aXBsaWVkQWxwaGE6SS5wcmVtdWx0aXBsaWVkQWxwaGEsZG91YmxlU2lkZWQ6SS5zaWRlPT09azEsZmxpcFNpZGVkOkkuc2lkZT09PUlpLGRlcHRoUGFja2luZzpJLmRlcHRoUGFja2luZyE9PXZvaWQgMD9JLmRlcHRoUGFja2luZzohMSxpbmRleDBBdHRyaWJ1dGVOYW1lOkkuaW5kZXgwQXR0cmlidXRlTmFtZSxleHRlbnNpb25EZXJpdmF0aXZlczpJLmV4dGVuc2lvbnMmJkkuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcyxleHRlbnNpb25GcmFnRGVwdGg6SS5leHRlbnNpb25zJiZJLmV4dGVuc2lvbnMuZnJhZ0RlcHRoLGV4dGVuc2lvbkRyYXdCdWZmZXJzOkkuZXh0ZW5zaW9ucyYmSS5leHRlbnNpb25zLmRyYXdCdWZmZXJzLGV4dGVuc2lvblNoYWRlclRleHR1cmVMT0Q6SS5leHRlbnNpb25zJiZJLmV4dGVuc2lvbnMuc2hhZGVyVGV4dHVyZUxPRCxyZW5kZXJlckV4dGVuc2lvbkZyYWdEZXB0aDp1fHxuLmhhcygiRVhUX2ZyYWdfZGVwdGgiKSxyZW5kZXJlckV4dGVuc2lvbkRyYXdCdWZmZXJzOnV8fG4uaGFzKCJXRUJHTF9kcmF3X2J1ZmZlcnMiKSxyZW5kZXJlckV4dGVuc2lvblNoYWRlclRleHR1cmVMb2Q6dXx8bi5oYXMoIkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKSxjdXN0b21Qcm9ncmFtQ2FjaGVLZXk6SS5jdXN0b21Qcm9ncmFtQ2FjaGVLZXkoKX19ZnVuY3Rpb24gYihJKXtsZXQgTD1bXTtpZihJLnNoYWRlcklEP0wucHVzaChJLnNoYWRlcklEKTooTC5wdXNoKEkuY3VzdG9tVmVydGV4U2hhZGVySUQpLEwucHVzaChJLmN1c3RvbUZyYWdtZW50U2hhZGVySUQpKSxJLmRlZmluZXMhPT12b2lkIDApZm9yKGxldCBSIGluIEkuZGVmaW5lcylMLnB1c2goUiksTC5wdXNoKEkuZGVmaW5lc1tSXSk7cmV0dXJuIEkuaXNSYXdTaGFkZXJNYXRlcmlhbD09PSExJiYoUyhMLEkpLEMoTCxJKSxMLnB1c2goZS5vdXRwdXRFbmNvZGluZykpLEwucHVzaChJLmN1c3RvbVByb2dyYW1DYWNoZUtleSksTC5qb2luKCl9ZnVuY3Rpb24gUyhJLEwpe0kucHVzaChMLnByZWNpc2lvbiksSS5wdXNoKEwub3V0cHV0RW5jb2RpbmcpLEkucHVzaChMLmVudk1hcE1vZGUpLEkucHVzaChMLmNvbWJpbmUpLEkucHVzaChMLnZlcnRleFV2cyksSS5wdXNoKEwuZm9nRXhwMiksSS5wdXNoKEwuc2l6ZUF0dGVudWF0aW9uKSxJLnB1c2goTC5tYXhCb25lcyksSS5wdXNoKEwubW9ycGhUYXJnZXRzQ291bnQpLEkucHVzaChMLm51bURpckxpZ2h0cyksSS5wdXNoKEwubnVtUG9pbnRMaWdodHMpLEkucHVzaChMLm51bVNwb3RMaWdodHMpLEkucHVzaChMLm51bUhlbWlMaWdodHMpLEkucHVzaChMLm51bVJlY3RBcmVhTGlnaHRzKSxJLnB1c2goTC5udW1EaXJMaWdodFNoYWRvd3MpLEkucHVzaChMLm51bVBvaW50TGlnaHRTaGFkb3dzKSxJLnB1c2goTC5udW1TcG90TGlnaHRTaGFkb3dzKSxJLnB1c2goTC5zaGFkb3dNYXBUeXBlKSxJLnB1c2goTC50b25lTWFwcGluZyksSS5wdXNoKEwubnVtQ2xpcHBpbmdQbGFuZXMpLEkucHVzaChMLm51bUNsaXBJbnRlcnNlY3Rpb24pLEkucHVzaChMLmFscGhhV3JpdGUpfWZ1bmN0aW9uIEMoSSxMKXtzLmRpc2FibGVBbGwoKSxMLmlzV2ViR0wyJiZzLmVuYWJsZSgwKSxMLnN1cHBvcnRzVmVydGV4VGV4dHVyZXMmJnMuZW5hYmxlKDEpLEwuaW5zdGFuY2luZyYmcy5lbmFibGUoMiksTC5pbnN0YW5jaW5nQ29sb3ImJnMuZW5hYmxlKDMpLEwubWFwJiZzLmVuYWJsZSg0KSxMLm1hdGNhcCYmcy5lbmFibGUoNSksTC5lbnZNYXAmJnMuZW5hYmxlKDYpLEwuZW52TWFwQ3ViZVVWJiZzLmVuYWJsZSg3KSxMLmxpZ2h0TWFwJiZzLmVuYWJsZSg4KSxMLmFvTWFwJiZzLmVuYWJsZSg5KSxMLmVtaXNzaXZlTWFwJiZzLmVuYWJsZSgxMCksTC5idW1wTWFwJiZzLmVuYWJsZSgxMSksTC5ub3JtYWxNYXAmJnMuZW5hYmxlKDEyKSxMLm9iamVjdFNwYWNlTm9ybWFsTWFwJiZzLmVuYWJsZSgxMyksTC50YW5nZW50U3BhY2VOb3JtYWxNYXAmJnMuZW5hYmxlKDE0KSxMLmNsZWFyY29hdCYmcy5lbmFibGUoMTUpLEwuY2xlYXJjb2F0TWFwJiZzLmVuYWJsZSgxNiksTC5jbGVhcmNvYXRSb3VnaG5lc3NNYXAmJnMuZW5hYmxlKDE3KSxMLmNsZWFyY29hdE5vcm1hbE1hcCYmcy5lbmFibGUoMTgpLEwuZGlzcGxhY2VtZW50TWFwJiZzLmVuYWJsZSgxOSksTC5zcGVjdWxhck1hcCYmcy5lbmFibGUoMjApLEwucm91Z2huZXNzTWFwJiZzLmVuYWJsZSgyMSksTC5tZXRhbG5lc3NNYXAmJnMuZW5hYmxlKDIyKSxMLmdyYWRpZW50TWFwJiZzLmVuYWJsZSgyMyksTC5hbHBoYU1hcCYmcy5lbmFibGUoMjQpLEwuYWxwaGFUZXN0JiZzLmVuYWJsZSgyNSksTC52ZXJ0ZXhDb2xvcnMmJnMuZW5hYmxlKDI2KSxMLnZlcnRleEFscGhhcyYmcy5lbmFibGUoMjcpLEwudmVydGV4VXZzJiZzLmVuYWJsZSgyOCksTC52ZXJ0ZXhUYW5nZW50cyYmcy5lbmFibGUoMjkpLEwudXZzVmVydGV4T25seSYmcy5lbmFibGUoMzApLEwuZm9nJiZzLmVuYWJsZSgzMSksSS5wdXNoKHMubWFzaykscy5kaXNhYmxlQWxsKCksTC51c2VGb2cmJnMuZW5hYmxlKDApLEwuZmxhdFNoYWRpbmcmJnMuZW5hYmxlKDEpLEwubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmcy5lbmFibGUoMiksTC5za2lubmluZyYmcy5lbmFibGUoMyksTC51c2VWZXJ0ZXhUZXh0dXJlJiZzLmVuYWJsZSg0KSxMLm1vcnBoVGFyZ2V0cyYmcy5lbmFibGUoNSksTC5tb3JwaE5vcm1hbHMmJnMuZW5hYmxlKDYpLEwucHJlbXVsdGlwbGllZEFscGhhJiZzLmVuYWJsZSg3KSxMLnNoYWRvd01hcEVuYWJsZWQmJnMuZW5hYmxlKDgpLEwucGh5c2ljYWxseUNvcnJlY3RMaWdodHMmJnMuZW5hYmxlKDkpLEwuZG91YmxlU2lkZWQmJnMuZW5hYmxlKDEwKSxMLmZsaXBTaWRlZCYmcy5lbmFibGUoMTEpLEwuZGVwdGhQYWNraW5nJiZzLmVuYWJsZSgxMiksTC5kaXRoZXJpbmcmJnMuZW5hYmxlKDEzKSxMLnNwZWN1bGFySW50ZW5zaXR5TWFwJiZzLmVuYWJsZSgxNCksTC5zcGVjdWxhckNvbG9yTWFwJiZzLmVuYWJsZSgxNSksTC50cmFuc21pc3Npb24mJnMuZW5hYmxlKDE2KSxMLnRyYW5zbWlzc2lvbk1hcCYmcy5lbmFibGUoMTcpLEwudGhpY2tuZXNzTWFwJiZzLmVuYWJsZSgxOCksTC5zaGVlbiYmcy5lbmFibGUoMTkpLEwuc2hlZW5Db2xvck1hcCYmcy5lbmFibGUoMjApLEwuc2hlZW5Sb3VnaG5lc3NNYXAmJnMuZW5hYmxlKDIxKSxMLmRlY29kZVZpZGVvVGV4dHVyZSYmcy5lbmFibGUoMjIpLEkucHVzaChzLm1hc2spfWZ1bmN0aW9uIFAoSSl7bGV0IEw9X1tJLnR5cGVdLFI7aWYoTCl7bGV0IEY9YWhbTF07Uj1WZmUuY2xvbmUoRi51bmlmb3Jtcyl9ZWxzZSBSPUkudW5pZm9ybXM7cmV0dXJuIFJ9ZnVuY3Rpb24gayhJLEwpe2xldCBSO2ZvcihsZXQgRj0wLHo9Yy5sZW5ndGg7Rjx6O0YrKyl7bGV0IFU9Y1tGXTtpZihVLmNhY2hlS2V5PT09TCl7Uj1VLCsrUi51c2VkVGltZXM7YnJlYWt9fXJldHVybiBSPT09dm9pZCAwJiYoUj1uZXcgZ2dyKGUsTCxJLG8pLGMucHVzaChSKSksUn1mdW5jdGlvbiBPKEkpe2lmKC0tSS51c2VkVGltZXM9PT0wKXtsZXQgTD1jLmluZGV4T2YoSSk7Y1tMXT1jW2MubGVuZ3RoLTFdLGMucG9wKCksSS5kZXN0cm95KCl9fWZ1bmN0aW9uIEQoSSl7bC5yZW1vdmUoSSl9ZnVuY3Rpb24gQigpe2wuZGlzcG9zZSgpfXJldHVybntnZXRQYXJhbWV0ZXJzOngsZ2V0UHJvZ3JhbUNhY2hlS2V5OmIsZ2V0VW5pZm9ybXM6UCxhY3F1aXJlUHJvZ3JhbTprLHJlbGVhc2VQcm9ncmFtOk8scmVsZWFzZVNoYWRlckNhY2hlOkQscHJvZ3JhbXM6YyxkaXNwb3NlOkJ9fWZ1bmN0aW9uIHZncigpe2xldCBlPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHQobyl7bGV0IGE9ZS5nZXQobyk7cmV0dXJuIGE9PT12b2lkIDAmJihhPXt9LGUuc2V0KG8sYSkpLGF9ZnVuY3Rpb24gcihvKXtlLmRlbGV0ZShvKX1mdW5jdGlvbiBuKG8sYSxzKXtlLmdldChvKVthXT1zfWZ1bmN0aW9uIGkoKXtlPW5ldyBXZWFrTWFwfXJldHVybntnZXQ6dCxyZW1vdmU6cix1cGRhdGU6bixkaXNwb3NlOml9fWZ1bmN0aW9uIHhncihlLHQpe3JldHVybiBlLmdyb3VwT3JkZXIhPT10Lmdyb3VwT3JkZXI/ZS5ncm91cE9yZGVyLXQuZ3JvdXBPcmRlcjplLnJlbmRlck9yZGVyIT09dC5yZW5kZXJPcmRlcj9lLnJlbmRlck9yZGVyLXQucmVuZGVyT3JkZXI6ZS5tYXRlcmlhbC5pZCE9PXQubWF0ZXJpYWwuaWQ/ZS5tYXRlcmlhbC5pZC10Lm1hdGVyaWFsLmlkOmUueiE9PXQuej9lLnotdC56OmUuaWQtdC5pZH1mdW5jdGlvbiBYdWUoZSx0KXtyZXR1cm4gZS5ncm91cE9yZGVyIT09dC5ncm91cE9yZGVyP2UuZ3JvdXBPcmRlci10Lmdyb3VwT3JkZXI6ZS5yZW5kZXJPcmRlciE9PXQucmVuZGVyT3JkZXI/ZS5yZW5kZXJPcmRlci10LnJlbmRlck9yZGVyOmUueiE9PXQuej90LnotZS56OmUuaWQtdC5pZH1mdW5jdGlvbiAkdWUoKXtsZXQgZT1bXSx0PTAscj1bXSxuPVtdLGk9W107ZnVuY3Rpb24gbygpe3Q9MCxyLmxlbmd0aD0wLG4ubGVuZ3RoPTAsaS5sZW5ndGg9MH1mdW5jdGlvbiBhKGgsZixwLGQsZyxfKXtsZXQgeT1lW3RdO3JldHVybiB5PT09dm9pZCAwPyh5PXtpZDpoLmlkLG9iamVjdDpoLGdlb21ldHJ5OmYsbWF0ZXJpYWw6cCxncm91cE9yZGVyOmQscmVuZGVyT3JkZXI6aC5yZW5kZXJPcmRlcix6OmcsZ3JvdXA6X30sZVt0XT15KTooeS5pZD1oLmlkLHkub2JqZWN0PWgseS5nZW9tZXRyeT1mLHkubWF0ZXJpYWw9cCx5Lmdyb3VwT3JkZXI9ZCx5LnJlbmRlck9yZGVyPWgucmVuZGVyT3JkZXIseS56PWcseS5ncm91cD1fKSx0KysseX1mdW5jdGlvbiBzKGgsZixwLGQsZyxfKXtsZXQgeT1hKGgsZixwLGQsZyxfKTtwLnRyYW5zbWlzc2lvbj4wP24ucHVzaCh5KTpwLnRyYW5zcGFyZW50PT09ITA/aS5wdXNoKHkpOnIucHVzaCh5KX1mdW5jdGlvbiBsKGgsZixwLGQsZyxfKXtsZXQgeT1hKGgsZixwLGQsZyxfKTtwLnRyYW5zbWlzc2lvbj4wP24udW5zaGlmdCh5KTpwLnRyYW5zcGFyZW50PT09ITA/aS51bnNoaWZ0KHkpOnIudW5zaGlmdCh5KX1mdW5jdGlvbiBjKGgsZil7ci5sZW5ndGg+MSYmci5zb3J0KGh8fHhnciksbi5sZW5ndGg+MSYmbi5zb3J0KGZ8fFh1ZSksaS5sZW5ndGg+MSYmaS5zb3J0KGZ8fFh1ZSl9ZnVuY3Rpb24gdSgpe2ZvcihsZXQgaD10LGY9ZS5sZW5ndGg7aDxmO2grKyl7bGV0IHA9ZVtoXTtpZihwLmlkPT09bnVsbClicmVhaztwLmlkPW51bGwscC5vYmplY3Q9bnVsbCxwLmdlb21ldHJ5PW51bGwscC5tYXRlcmlhbD1udWxsLHAuZ3JvdXA9bnVsbH19cmV0dXJue29wYXF1ZTpyLHRyYW5zbWlzc2l2ZTpuLHRyYW5zcGFyZW50OmksaW5pdDpvLHB1c2g6cyx1bnNoaWZ0OmwsZmluaXNoOnUsc29ydDpjfX1mdW5jdGlvbiBiZ3IoKXtsZXQgZT1uZXcgV2Vha01hcDtmdW5jdGlvbiB0KG4saSl7bGV0IG87cmV0dXJuIGUuaGFzKG4pPT09ITE/KG89bmV3ICR1ZSxlLnNldChuLFtvXSkpOmk+PWUuZ2V0KG4pLmxlbmd0aD8obz1uZXcgJHVlLGUuZ2V0KG4pLnB1c2gobykpOm89ZS5nZXQobilbaV0sb31mdW5jdGlvbiByKCl7ZT1uZXcgV2Vha01hcH1yZXR1cm57Z2V0OnQsZGlzcG9zZTpyfX1mdW5jdGlvbiB3Z3IoKXtsZXQgZT17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKHQpe2lmKGVbdC5pZF0hPT12b2lkIDApcmV0dXJuIGVbdC5pZF07bGV0IHI7c3dpdGNoKHQudHlwZSl7Y2FzZSJEaXJlY3Rpb25hbExpZ2h0IjpyPXtkaXJlY3Rpb246bmV3IGosY29sb3I6bmV3IG5lfTticmVhaztjYXNlIlNwb3RMaWdodCI6cj17cG9zaXRpb246bmV3IGosZGlyZWN0aW9uOm5ldyBqLGNvbG9yOm5ldyBuZSxkaXN0YW5jZTowLGNvbmVDb3M6MCxwZW51bWJyYUNvczowLGRlY2F5OjB9O2JyZWFrO2Nhc2UiUG9pbnRMaWdodCI6cj17cG9zaXRpb246bmV3IGosY29sb3I6bmV3IG5lLGRpc3RhbmNlOjAsZGVjYXk6MH07YnJlYWs7Y2FzZSJIZW1pc3BoZXJlTGlnaHQiOnI9e2RpcmVjdGlvbjpuZXcgaixza3lDb2xvcjpuZXcgbmUsZ3JvdW5kQ29sb3I6bmV3IG5lfTticmVhaztjYXNlIlJlY3RBcmVhTGlnaHQiOnI9e2NvbG9yOm5ldyBuZSxwb3NpdGlvbjpuZXcgaixoYWxmV2lkdGg6bmV3IGosaGFsZkhlaWdodDpuZXcgan07YnJlYWt9cmV0dXJuIGVbdC5pZF09cixyfX19ZnVuY3Rpb24gU2dyKCl7bGV0IGU9e307cmV0dXJue2dldDpmdW5jdGlvbih0KXtpZihlW3QuaWRdIT09dm9pZCAwKXJldHVybiBlW3QuaWRdO2xldCByO3N3aXRjaCh0LnR5cGUpe2Nhc2UiRGlyZWN0aW9uYWxMaWdodCI6cj17c2hhZG93QmlhczowLHNoYWRvd05vcm1hbEJpYXM6MCxzaGFkb3dSYWRpdXM6MSxzaGFkb3dNYXBTaXplOm5ldyBMdH07YnJlYWs7Y2FzZSJTcG90TGlnaHQiOnI9e3NoYWRvd0JpYXM6MCxzaGFkb3dOb3JtYWxCaWFzOjAsc2hhZG93UmFkaXVzOjEsc2hhZG93TWFwU2l6ZTpuZXcgTHR9O2JyZWFrO2Nhc2UiUG9pbnRMaWdodCI6cj17c2hhZG93QmlhczowLHNoYWRvd05vcm1hbEJpYXM6MCxzaGFkb3dSYWRpdXM6MSxzaGFkb3dNYXBTaXplOm5ldyBMdCxzaGFkb3dDYW1lcmFOZWFyOjEsc2hhZG93Q2FtZXJhRmFyOjFlM307YnJlYWt9cmV0dXJuIGVbdC5pZF09cixyfX19dmFyIE1ncj0wO2Z1bmN0aW9uIEVncihlLHQpe3JldHVybih0LmNhc3RTaGFkb3c/MTowKS0oZS5jYXN0U2hhZG93PzE6MCl9ZnVuY3Rpb24gVGdyKGUsdCl7bGV0IHI9bmV3IHdncixuPVNncigpLGk9e3ZlcnNpb246MCxoYXNoOntkaXJlY3Rpb25hbExlbmd0aDotMSxwb2ludExlbmd0aDotMSxzcG90TGVuZ3RoOi0xLHJlY3RBcmVhTGVuZ3RoOi0xLGhlbWlMZW5ndGg6LTEsbnVtRGlyZWN0aW9uYWxTaGFkb3dzOi0xLG51bVBvaW50U2hhZG93czotMSxudW1TcG90U2hhZG93czotMX0sYW1iaWVudDpbMCwwLDBdLHByb2JlOltdLGRpcmVjdGlvbmFsOltdLGRpcmVjdGlvbmFsU2hhZG93OltdLGRpcmVjdGlvbmFsU2hhZG93TWFwOltdLGRpcmVjdGlvbmFsU2hhZG93TWF0cml4OltdLHNwb3Q6W10sc3BvdFNoYWRvdzpbXSxzcG90U2hhZG93TWFwOltdLHNwb3RTaGFkb3dNYXRyaXg6W10scmVjdEFyZWE6W10scmVjdEFyZWFMVEMxOm51bGwscmVjdEFyZWFMVEMyOm51bGwscG9pbnQ6W10scG9pbnRTaGFkb3c6W10scG9pbnRTaGFkb3dNYXA6W10scG9pbnRTaGFkb3dNYXRyaXg6W10saGVtaTpbXX07Zm9yKGxldCB1PTA7dTw5O3UrKylpLnByb2JlLnB1c2gobmV3IGopO2xldCBvPW5ldyBqLGE9bmV3IE1lLHM9bmV3IE1lO2Z1bmN0aW9uIGwodSxoKXtsZXQgZj0wLHA9MCxkPTA7Zm9yKGxldCBEPTA7RDw5O0QrKylpLnByb2JlW0RdLnNldCgwLDAsMCk7bGV0IGc9MCxfPTAseT0wLHg9MCxiPTAsUz0wLEM9MCxQPTA7dS5zb3J0KEVncik7bGV0IGs9aCE9PSEwP01hdGguUEk6MTtmb3IobGV0IEQ9MCxCPXUubGVuZ3RoO0Q8QjtEKyspe2xldCBJPXVbRF0sTD1JLmNvbG9yLFI9SS5pbnRlbnNpdHksRj1JLmRpc3RhbmNlLHo9SS5zaGFkb3cmJkkuc2hhZG93Lm1hcD9JLnNoYWRvdy5tYXAudGV4dHVyZTpudWxsO2lmKEkuaXNBbWJpZW50TGlnaHQpZis9TC5yKlIqayxwKz1MLmcqUiprLGQrPUwuYipSKms7ZWxzZSBpZihJLmlzTGlnaHRQcm9iZSlmb3IobGV0IFU9MDtVPDk7VSsrKWkucHJvYmVbVV0uYWRkU2NhbGVkVmVjdG9yKEkuc2guY29lZmZpY2llbnRzW1VdLFIpO2Vsc2UgaWYoSS5pc0RpcmVjdGlvbmFsTGlnaHQpe2xldCBVPXIuZ2V0KEkpO2lmKFUuY29sb3IuY29weShJLmNvbG9yKS5tdWx0aXBseVNjYWxhcihJLmludGVuc2l0eSprKSxJLmNhc3RTaGFkb3cpe2xldCBXPUkuc2hhZG93LFo9bi5nZXQoSSk7Wi5zaGFkb3dCaWFzPVcuYmlhcyxaLnNoYWRvd05vcm1hbEJpYXM9Vy5ub3JtYWxCaWFzLFouc2hhZG93UmFkaXVzPVcucmFkaXVzLFouc2hhZG93TWFwU2l6ZT1XLm1hcFNpemUsaS5kaXJlY3Rpb25hbFNoYWRvd1tnXT1aLGkuZGlyZWN0aW9uYWxTaGFkb3dNYXBbZ109eixpLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4W2ddPUkuc2hhZG93Lm1hdHJpeCxTKyt9aS5kaXJlY3Rpb25hbFtnXT1VLGcrK31lbHNlIGlmKEkuaXNTcG90TGlnaHQpe2xldCBVPXIuZ2V0KEkpO2lmKFUucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKEkubWF0cml4V29ybGQpLFUuY29sb3IuY29weShMKS5tdWx0aXBseVNjYWxhcihSKmspLFUuZGlzdGFuY2U9RixVLmNvbmVDb3M9TWF0aC5jb3MoSS5hbmdsZSksVS5wZW51bWJyYUNvcz1NYXRoLmNvcyhJLmFuZ2xlKigxLUkucGVudW1icmEpKSxVLmRlY2F5PUkuZGVjYXksSS5jYXN0U2hhZG93KXtsZXQgVz1JLnNoYWRvdyxaPW4uZ2V0KEkpO1ouc2hhZG93Qmlhcz1XLmJpYXMsWi5zaGFkb3dOb3JtYWxCaWFzPVcubm9ybWFsQmlhcyxaLnNoYWRvd1JhZGl1cz1XLnJhZGl1cyxaLnNoYWRvd01hcFNpemU9Vy5tYXBTaXplLGkuc3BvdFNoYWRvd1t5XT1aLGkuc3BvdFNoYWRvd01hcFt5XT16LGkuc3BvdFNoYWRvd01hdHJpeFt5XT1JLnNoYWRvdy5tYXRyaXgsUCsrfWkuc3BvdFt5XT1VLHkrK31lbHNlIGlmKEkuaXNSZWN0QXJlYUxpZ2h0KXtsZXQgVT1yLmdldChJKTtVLmNvbG9yLmNvcHkoTCkubXVsdGlwbHlTY2FsYXIoUiksVS5oYWxmV2lkdGguc2V0KEkud2lkdGgqLjUsMCwwKSxVLmhhbGZIZWlnaHQuc2V0KDAsSS5oZWlnaHQqLjUsMCksaS5yZWN0QXJlYVt4XT1VLHgrK31lbHNlIGlmKEkuaXNQb2ludExpZ2h0KXtsZXQgVT1yLmdldChJKTtpZihVLmNvbG9yLmNvcHkoSS5jb2xvcikubXVsdGlwbHlTY2FsYXIoSS5pbnRlbnNpdHkqayksVS5kaXN0YW5jZT1JLmRpc3RhbmNlLFUuZGVjYXk9SS5kZWNheSxJLmNhc3RTaGFkb3cpe2xldCBXPUkuc2hhZG93LFo9bi5nZXQoSSk7Wi5zaGFkb3dCaWFzPVcuYmlhcyxaLnNoYWRvd05vcm1hbEJpYXM9Vy5ub3JtYWxCaWFzLFouc2hhZG93UmFkaXVzPVcucmFkaXVzLFouc2hhZG93TWFwU2l6ZT1XLm1hcFNpemUsWi5zaGFkb3dDYW1lcmFOZWFyPVcuY2FtZXJhLm5lYXIsWi5zaGFkb3dDYW1lcmFGYXI9Vy5jYW1lcmEuZmFyLGkucG9pbnRTaGFkb3dbX109WixpLnBvaW50U2hhZG93TWFwW19dPXosaS5wb2ludFNoYWRvd01hdHJpeFtfXT1JLnNoYWRvdy5tYXRyaXgsQysrfWkucG9pbnRbX109VSxfKyt9ZWxzZSBpZihJLmlzSGVtaXNwaGVyZUxpZ2h0KXtsZXQgVT1yLmdldChJKTtVLnNreUNvbG9yLmNvcHkoSS5jb2xvcikubXVsdGlwbHlTY2FsYXIoUiprKSxVLmdyb3VuZENvbG9yLmNvcHkoSS5ncm91bmRDb2xvcikubXVsdGlwbHlTY2FsYXIoUiprKSxpLmhlbWlbYl09VSxiKyt9fXg+MCYmKHQuaXNXZWJHTDJ8fGUuaGFzKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKT09PSEwPyhpLnJlY3RBcmVhTFRDMT1yZS5MVENfRkxPQVRfMSxpLnJlY3RBcmVhTFRDMj1yZS5MVENfRkxPQVRfMik6ZS5oYXMoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIik9PT0hMD8oaS5yZWN0QXJlYUxUQzE9cmUuTFRDX0hBTEZfMSxpLnJlY3RBcmVhTFRDMj1yZS5MVENfSEFMRl8yKTpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBVbmFibGUgdG8gdXNlIFJlY3RBcmVhTGlnaHQuIE1pc3NpbmcgV2ViR0wgZXh0ZW5zaW9ucy4iKSksaS5hbWJpZW50WzBdPWYsaS5hbWJpZW50WzFdPXAsaS5hbWJpZW50WzJdPWQ7bGV0IE89aS5oYXNoOyhPLmRpcmVjdGlvbmFsTGVuZ3RoIT09Z3x8Ty5wb2ludExlbmd0aCE9PV98fE8uc3BvdExlbmd0aCE9PXl8fE8ucmVjdEFyZWFMZW5ndGghPT14fHxPLmhlbWlMZW5ndGghPT1ifHxPLm51bURpcmVjdGlvbmFsU2hhZG93cyE9PVN8fE8ubnVtUG9pbnRTaGFkb3dzIT09Q3x8Ty5udW1TcG90U2hhZG93cyE9PVApJiYoaS5kaXJlY3Rpb25hbC5sZW5ndGg9ZyxpLnNwb3QubGVuZ3RoPXksaS5yZWN0QXJlYS5sZW5ndGg9eCxpLnBvaW50Lmxlbmd0aD1fLGkuaGVtaS5sZW5ndGg9YixpLmRpcmVjdGlvbmFsU2hhZG93Lmxlbmd0aD1TLGkuZGlyZWN0aW9uYWxTaGFkb3dNYXAubGVuZ3RoPVMsaS5wb2ludFNoYWRvdy5sZW5ndGg9QyxpLnBvaW50U2hhZG93TWFwLmxlbmd0aD1DLGkuc3BvdFNoYWRvdy5sZW5ndGg9UCxpLnNwb3RTaGFkb3dNYXAubGVuZ3RoPVAsaS5kaXJlY3Rpb25hbFNoYWRvd01hdHJpeC5sZW5ndGg9UyxpLnBvaW50U2hhZG93TWF0cml4Lmxlbmd0aD1DLGkuc3BvdFNoYWRvd01hdHJpeC5sZW5ndGg9UCxPLmRpcmVjdGlvbmFsTGVuZ3RoPWcsTy5wb2ludExlbmd0aD1fLE8uc3BvdExlbmd0aD15LE8ucmVjdEFyZWFMZW5ndGg9eCxPLmhlbWlMZW5ndGg9YixPLm51bURpcmVjdGlvbmFsU2hhZG93cz1TLE8ubnVtUG9pbnRTaGFkb3dzPUMsTy5udW1TcG90U2hhZG93cz1QLGkudmVyc2lvbj1NZ3IrKyl9ZnVuY3Rpb24gYyh1LGgpe2xldCBmPTAscD0wLGQ9MCxnPTAsXz0wLHk9aC5tYXRyaXhXb3JsZEludmVyc2U7Zm9yKGxldCB4PTAsYj11Lmxlbmd0aDt4PGI7eCsrKXtsZXQgUz11W3hdO2lmKFMuaXNEaXJlY3Rpb25hbExpZ2h0KXtsZXQgQz1pLmRpcmVjdGlvbmFsW2ZdO0MuZGlyZWN0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihTLm1hdHJpeFdvcmxkKSxvLnNldEZyb21NYXRyaXhQb3NpdGlvbihTLnRhcmdldC5tYXRyaXhXb3JsZCksQy5kaXJlY3Rpb24uc3ViKG8pLEMuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbih5KSxmKyt9ZWxzZSBpZihTLmlzU3BvdExpZ2h0KXtsZXQgQz1pLnNwb3RbZF07Qy5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oUy5tYXRyaXhXb3JsZCksQy5wb3NpdGlvbi5hcHBseU1hdHJpeDQoeSksQy5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFMubWF0cml4V29ybGQpLG8uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFMudGFyZ2V0Lm1hdHJpeFdvcmxkKSxDLmRpcmVjdGlvbi5zdWIobyksQy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHkpLGQrK31lbHNlIGlmKFMuaXNSZWN0QXJlYUxpZ2h0KXtsZXQgQz1pLnJlY3RBcmVhW2ddO0MucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFMubWF0cml4V29ybGQpLEMucG9zaXRpb24uYXBwbHlNYXRyaXg0KHkpLHMuaWRlbnRpdHkoKSxhLmNvcHkoUy5tYXRyaXhXb3JsZCksYS5wcmVtdWx0aXBseSh5KSxzLmV4dHJhY3RSb3RhdGlvbihhKSxDLmhhbGZXaWR0aC5zZXQoUy53aWR0aCouNSwwLDApLEMuaGFsZkhlaWdodC5zZXQoMCxTLmhlaWdodCouNSwwKSxDLmhhbGZXaWR0aC5hcHBseU1hdHJpeDQocyksQy5oYWxmSGVpZ2h0LmFwcGx5TWF0cml4NChzKSxnKyt9ZWxzZSBpZihTLmlzUG9pbnRMaWdodCl7bGV0IEM9aS5wb2ludFtwXTtDLnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihTLm1hdHJpeFdvcmxkKSxDLnBvc2l0aW9uLmFwcGx5TWF0cml4NCh5KSxwKyt9ZWxzZSBpZihTLmlzSGVtaXNwaGVyZUxpZ2h0KXtsZXQgQz1pLmhlbWlbX107Qy5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFMubWF0cml4V29ybGQpLEMuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbih5KSxDLmRpcmVjdGlvbi5ub3JtYWxpemUoKSxfKyt9fX1yZXR1cm57c2V0dXA6bCxzZXR1cFZpZXc6YyxzdGF0ZTppfX1mdW5jdGlvbiBLdWUoZSx0KXtsZXQgcj1uZXcgVGdyKGUsdCksbj1bXSxpPVtdO2Z1bmN0aW9uIG8oKXtuLmxlbmd0aD0wLGkubGVuZ3RoPTB9ZnVuY3Rpb24gYShoKXtuLnB1c2goaCl9ZnVuY3Rpb24gcyhoKXtpLnB1c2goaCl9ZnVuY3Rpb24gbChoKXtyLnNldHVwKG4saCl9ZnVuY3Rpb24gYyhoKXtyLnNldHVwVmlldyhuLGgpfXJldHVybntpbml0Om8sc3RhdGU6e2xpZ2h0c0FycmF5Om4sc2hhZG93c0FycmF5OmksbGlnaHRzOnJ9LHNldHVwTGlnaHRzOmwsc2V0dXBMaWdodHNWaWV3OmMscHVzaExpZ2h0OmEscHVzaFNoYWRvdzpzfX1mdW5jdGlvbiBDZ3IoZSx0KXtsZXQgcj1uZXcgV2Vha01hcDtmdW5jdGlvbiBuKG8sYT0wKXtsZXQgcztyZXR1cm4gci5oYXMobyk9PT0hMT8ocz1uZXcgS3VlKGUsdCksci5zZXQobyxbc10pKTphPj1yLmdldChvKS5sZW5ndGg/KHM9bmV3IEt1ZShlLHQpLHIuZ2V0KG8pLnB1c2gocykpOnM9ci5nZXQobylbYV0sc31mdW5jdGlvbiBpKCl7cj1uZXcgV2Vha01hcH1yZXR1cm57Z2V0Om4sZGlzcG9zZTppfX12YXIgZU09Y2xhc3MgZXh0ZW5kcyBxaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaERlcHRoTWF0ZXJpYWwiLHRoaXMuZGVwdGhQYWNraW5nPVJmZSx0aGlzLm1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMuZm9nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZXB0aFBhY2tpbmc9dC5kZXB0aFBhY2tpbmcsdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXN9fTtlTS5wcm90b3R5cGUuaXNNZXNoRGVwdGhNYXRlcmlhbD0hMDt2YXIgck09Y2xhc3MgZXh0ZW5kcyBxaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaERpc3RhbmNlTWF0ZXJpYWwiLHRoaXMucmVmZXJlbmNlUG9zaXRpb249bmV3IGosdGhpcy5uZWFyRGlzdGFuY2U9MSx0aGlzLmZhckRpc3RhbmNlPTFlMyx0aGlzLm1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLmZvZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMucmVmZXJlbmNlUG9zaXRpb24uY29weSh0LnJlZmVyZW5jZVBvc2l0aW9uKSx0aGlzLm5lYXJEaXN0YW5jZT10Lm5lYXJEaXN0YW5jZSx0aGlzLmZhckRpc3RhbmNlPXQuZmFyRGlzdGFuY2UsdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXN9fTtyTS5wcm90b3R5cGUuaXNNZXNoRGlzdGFuY2VNYXRlcmlhbD0hMDt2YXIgQWdyPWB2b2lkIG1haW4oKSB7CglnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLCAxLjAgKTsKfWAsUGdyPWB1bmlmb3JtIHNhbXBsZXIyRCBzaGFkb3dfcGFzczsKdW5pZm9ybSB2ZWMyIHJlc29sdXRpb247CnVuaWZvcm0gZmxvYXQgcmFkaXVzOwojaW5jbHVkZSA8cGFja2luZz4Kdm9pZCBtYWluKCkgewoJY29uc3QgZmxvYXQgc2FtcGxlcyA9IGZsb2F0KCBWU01fU0FNUExFUyApOwoJZmxvYXQgbWVhbiA9IDAuMDsKCWZsb2F0IHNxdWFyZWRfbWVhbiA9IDAuMDsKCWZsb2F0IHV2U3RyaWRlID0gc2FtcGxlcyA8PSAxLjAgPyAwLjAgOiAyLjAgLyAoIHNhbXBsZXMgLSAxLjAgKTsKCWZsb2F0IHV2U3RhcnQgPSBzYW1wbGVzIDw9IDEuMCA/IDAuMCA6IC0gMS4wOwoJZm9yICggZmxvYXQgaSA9IDAuMDsgaSA8IHNhbXBsZXM7IGkgKysgKSB7CgkJZmxvYXQgdXZPZmZzZXQgPSB1dlN0YXJ0ICsgaSAqIHV2U3RyaWRlOwoJCSNpZmRlZiBIT1JJWk9OVEFMX1BBU1MKCQkJdmVjMiBkaXN0cmlidXRpb24gPSB1bnBhY2tSR0JBVG8ySGFsZiggdGV4dHVyZTJEKCBzaGFkb3dfcGFzcywgKCBnbF9GcmFnQ29vcmQueHkgKyB2ZWMyKCB1dk9mZnNldCwgMC4wICkgKiByYWRpdXMgKSAvIHJlc29sdXRpb24gKSApOwoJCQltZWFuICs9IGRpc3RyaWJ1dGlvbi54OwoJCQlzcXVhcmVkX21lYW4gKz0gZGlzdHJpYnV0aW9uLnkgKiBkaXN0cmlidXRpb24ueSArIGRpc3RyaWJ1dGlvbi54ICogZGlzdHJpYnV0aW9uLng7CgkJI2Vsc2UKCQkJZmxvYXQgZGVwdGggPSB1bnBhY2tSR0JBVG9EZXB0aCggdGV4dHVyZTJEKCBzaGFkb3dfcGFzcywgKCBnbF9GcmFnQ29vcmQueHkgKyB2ZWMyKCAwLjAsIHV2T2Zmc2V0ICkgKiByYWRpdXMgKSAvIHJlc29sdXRpb24gKSApOwoJCQltZWFuICs9IGRlcHRoOwoJCQlzcXVhcmVkX21lYW4gKz0gZGVwdGggKiBkZXB0aDsKCQkjZW5kaWYKCX0KCW1lYW4gPSBtZWFuIC8gc2FtcGxlczsKCXNxdWFyZWRfbWVhbiA9IHNxdWFyZWRfbWVhbiAvIHNhbXBsZXM7CglmbG9hdCBzdGRfZGV2ID0gc3FydCggc3F1YXJlZF9tZWFuIC0gbWVhbiAqIG1lYW4gKTsKCWdsX0ZyYWdDb2xvciA9IHBhY2sySGFsZlRvUkdCQSggdmVjMiggbWVhbiwgc3RkX2RldiApICk7Cn1gO2Z1bmN0aW9uIEpmZShlLHQscil7bGV0IG49bmV3IEQxLGk9bmV3IEx0LG89bmV3IEx0LGE9bmV3IGVuLHM9bmV3IGVNKHtkZXB0aFBhY2tpbmc6TmZlfSksbD1uZXcgck0sYz17fSx1PXIubWF4VGV4dHVyZVNpemUsaD17MDpJaSwxOkwxLDI6azF9LGY9bmV3IGxoKHtkZWZpbmVzOntWU01fU0FNUExFUzo4fSx1bmlmb3Jtczp7c2hhZG93X3Bhc3M6e3ZhbHVlOm51bGx9LHJlc29sdXRpb246e3ZhbHVlOm5ldyBMdH0scmFkaXVzOnt2YWx1ZTo0fX0sdmVydGV4U2hhZGVyOkFncixmcmFnbWVudFNoYWRlcjpQZ3J9KSxwPWYuY2xvbmUoKTtwLmRlZmluZXMuSE9SSVpPTlRBTF9QQVNTPTE7bGV0IGQ9bmV3IFBlO2Quc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEplKG5ldyBGbG9hdDMyQXJyYXkoWy0xLC0xLC41LDMsLTEsLjUsLTEsMywuNV0pLDMpKTtsZXQgZz1uZXcgdGkoZCxmKSxfPXRoaXM7dGhpcy5lbmFibGVkPSExLHRoaXMuYXV0b1VwZGF0ZT0hMCx0aGlzLm5lZWRzVXBkYXRlPSExLHRoaXMudHlwZT1DaHQsdGhpcy5yZW5kZXI9ZnVuY3Rpb24oUyxDLFApe2lmKF8uZW5hYmxlZD09PSExfHxfLmF1dG9VcGRhdGU9PT0hMSYmXy5uZWVkc1VwZGF0ZT09PSExfHxTLmxlbmd0aD09PTApcmV0dXJuO2xldCBrPWUuZ2V0UmVuZGVyVGFyZ2V0KCksTz1lLmdldEFjdGl2ZUN1YmVGYWNlKCksRD1lLmdldEFjdGl2ZU1pcG1hcExldmVsKCksQj1lLnN0YXRlO0Iuc2V0QmxlbmRpbmcoS2QpLEIuYnVmZmVycy5jb2xvci5zZXRDbGVhcigxLDEsMSwxKSxCLmJ1ZmZlcnMuZGVwdGguc2V0VGVzdCghMCksQi5zZXRTY2lzc29yVGVzdCghMSk7Zm9yKGxldCBJPTAsTD1TLmxlbmd0aDtJPEw7SSsrKXtsZXQgUj1TW0ldLEY9Ui5zaGFkb3c7aWYoRj09PXZvaWQgMCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFNoYWRvd01hcDoiLFIsImhhcyBubyBzaGFkb3cuIik7Y29udGludWV9aWYoRi5hdXRvVXBkYXRlPT09ITEmJkYubmVlZHNVcGRhdGU9PT0hMSljb250aW51ZTtpLmNvcHkoRi5tYXBTaXplKTtsZXQgej1GLmdldEZyYW1lRXh0ZW50cygpO2lmKGkubXVsdGlwbHkoeiksby5jb3B5KEYubWFwU2l6ZSksKGkueD51fHxpLnk+dSkmJihpLng+dSYmKG8ueD1NYXRoLmZsb29yKHUvei54KSxpLng9by54KnoueCxGLm1hcFNpemUueD1vLngpLGkueT51JiYoby55PU1hdGguZmxvb3IodS96LnkpLGkueT1vLnkqei55LEYubWFwU2l6ZS55PW8ueSkpLEYubWFwPT09bnVsbCYmIUYuaXNQb2ludExpZ2h0U2hhZG93JiZ0aGlzLnR5cGU9PT1GMyl7bGV0IFc9e21pbkZpbHRlcjppaSxtYWdGaWx0ZXI6aWksZm9ybWF0OlFvfTtGLm1hcD1uZXcgaHMoaS54LGkueSxXKSxGLm1hcC50ZXh0dXJlLm5hbWU9Ui5uYW1lKyIuc2hhZG93TWFwIixGLm1hcFBhc3M9bmV3IGhzKGkueCxpLnksVyksRi5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWlmKEYubWFwPT09bnVsbCl7bGV0IFc9e21pbkZpbHRlcjpMaSxtYWdGaWx0ZXI6TGksZm9ybWF0OlFvfTtGLm1hcD1uZXcgaHMoaS54LGkueSxXKSxGLm1hcC50ZXh0dXJlLm5hbWU9Ui5uYW1lKyIuc2hhZG93TWFwIixGLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9ZS5zZXRSZW5kZXJUYXJnZXQoRi5tYXApLGUuY2xlYXIoKTtsZXQgVT1GLmdldFZpZXdwb3J0Q291bnQoKTtmb3IobGV0IFc9MDtXPFU7VysrKXtsZXQgWj1GLmdldFZpZXdwb3J0KFcpO2Euc2V0KG8ueCpaLngsby55KloueSxvLngqWi56LG8ueSpaLncpLEIudmlld3BvcnQoYSksRi51cGRhdGVNYXRyaWNlcyhSLFcpLG49Ri5nZXRGcnVzdHVtKCksYihDLFAsRi5jYW1lcmEsUix0aGlzLnR5cGUpfSFGLmlzUG9pbnRMaWdodFNoYWRvdyYmdGhpcy50eXBlPT09RjMmJnkoRixQKSxGLm5lZWRzVXBkYXRlPSExfV8ubmVlZHNVcGRhdGU9ITEsZS5zZXRSZW5kZXJUYXJnZXQoayxPLEQpfTtmdW5jdGlvbiB5KFMsQyl7bGV0IFA9dC51cGRhdGUoZyk7Zi5kZWZpbmVzLlZTTV9TQU1QTEVTIT09Uy5ibHVyU2FtcGxlcyYmKGYuZGVmaW5lcy5WU01fU0FNUExFUz1TLmJsdXJTYW1wbGVzLHAuZGVmaW5lcy5WU01fU0FNUExFUz1TLmJsdXJTYW1wbGVzLGYubmVlZHNVcGRhdGU9ITAscC5uZWVkc1VwZGF0ZT0hMCksZi51bmlmb3Jtcy5zaGFkb3dfcGFzcy52YWx1ZT1TLm1hcC50ZXh0dXJlLGYudW5pZm9ybXMucmVzb2x1dGlvbi52YWx1ZT1TLm1hcFNpemUsZi51bmlmb3Jtcy5yYWRpdXMudmFsdWU9Uy5yYWRpdXMsZS5zZXRSZW5kZXJUYXJnZXQoUy5tYXBQYXNzKSxlLmNsZWFyKCksZS5yZW5kZXJCdWZmZXJEaXJlY3QoQyxudWxsLFAsZixnLG51bGwpLHAudW5pZm9ybXMuc2hhZG93X3Bhc3MudmFsdWU9Uy5tYXBQYXNzLnRleHR1cmUscC51bmlmb3Jtcy5yZXNvbHV0aW9uLnZhbHVlPVMubWFwU2l6ZSxwLnVuaWZvcm1zLnJhZGl1cy52YWx1ZT1TLnJhZGl1cyxlLnNldFJlbmRlclRhcmdldChTLm1hcCksZS5jbGVhcigpLGUucmVuZGVyQnVmZmVyRGlyZWN0KEMsbnVsbCxQLHAsZyxudWxsKX1mdW5jdGlvbiB4KFMsQyxQLGssTyxELEIpe2xldCBJPW51bGwsTD1rLmlzUG9pbnRMaWdodD09PSEwP1MuY3VzdG9tRGlzdGFuY2VNYXRlcmlhbDpTLmN1c3RvbURlcHRoTWF0ZXJpYWw7aWYoTCE9PXZvaWQgMD9JPUw6ST1rLmlzUG9pbnRMaWdodD09PSEwP2w6cyxlLmxvY2FsQ2xpcHBpbmdFbmFibGVkJiZQLmNsaXBTaGFkb3dzPT09ITAmJlAuY2xpcHBpbmdQbGFuZXMubGVuZ3RoIT09MHx8UC5kaXNwbGFjZW1lbnRNYXAmJlAuZGlzcGxhY2VtZW50U2NhbGUhPT0wfHxQLmFscGhhTWFwJiZQLmFscGhhVGVzdD4wKXtsZXQgUj1JLnV1aWQsRj1QLnV1aWQsej1jW1JdO3o9PT12b2lkIDAmJih6PXt9LGNbUl09eik7bGV0IFU9eltGXTtVPT09dm9pZCAwJiYoVT1JLmNsb25lKCkseltGXT1VKSxJPVV9cmV0dXJuIEkudmlzaWJsZT1QLnZpc2libGUsSS53aXJlZnJhbWU9UC53aXJlZnJhbWUsQj09PUYzP0kuc2lkZT1QLnNoYWRvd1NpZGUhPT1udWxsP1Auc2hhZG93U2lkZTpQLnNpZGU6SS5zaWRlPVAuc2hhZG93U2lkZSE9PW51bGw/UC5zaGFkb3dTaWRlOmhbUC5zaWRlXSxJLmFscGhhTWFwPVAuYWxwaGFNYXAsSS5hbHBoYVRlc3Q9UC5hbHBoYVRlc3QsSS5jbGlwU2hhZG93cz1QLmNsaXBTaGFkb3dzLEkuY2xpcHBpbmdQbGFuZXM9UC5jbGlwcGluZ1BsYW5lcyxJLmNsaXBJbnRlcnNlY3Rpb249UC5jbGlwSW50ZXJzZWN0aW9uLEkuZGlzcGxhY2VtZW50TWFwPVAuZGlzcGxhY2VtZW50TWFwLEkuZGlzcGxhY2VtZW50U2NhbGU9UC5kaXNwbGFjZW1lbnRTY2FsZSxJLmRpc3BsYWNlbWVudEJpYXM9UC5kaXNwbGFjZW1lbnRCaWFzLEkud2lyZWZyYW1lTGluZXdpZHRoPVAud2lyZWZyYW1lTGluZXdpZHRoLEkubGluZXdpZHRoPVAubGluZXdpZHRoLGsuaXNQb2ludExpZ2h0PT09ITAmJkkuaXNNZXNoRGlzdGFuY2VNYXRlcmlhbD09PSEwJiYoSS5yZWZlcmVuY2VQb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oay5tYXRyaXhXb3JsZCksSS5uZWFyRGlzdGFuY2U9TyxJLmZhckRpc3RhbmNlPUQpLEl9ZnVuY3Rpb24gYihTLEMsUCxrLE8pe2lmKFMudmlzaWJsZT09PSExKXJldHVybjtpZihTLmxheWVycy50ZXN0KEMubGF5ZXJzKSYmKFMuaXNNZXNofHxTLmlzTGluZXx8Uy5pc1BvaW50cykmJihTLmNhc3RTaGFkb3d8fFMucmVjZWl2ZVNoYWRvdyYmTz09PUYzKSYmKCFTLmZydXN0dW1DdWxsZWR8fG4uaW50ZXJzZWN0c09iamVjdChTKSkpe1MubW9kZWxWaWV3TWF0cml4Lm11bHRpcGx5TWF0cmljZXMoUC5tYXRyaXhXb3JsZEludmVyc2UsUy5tYXRyaXhXb3JsZCk7bGV0IEk9dC51cGRhdGUoUyksTD1TLm1hdGVyaWFsO2lmKEFycmF5LmlzQXJyYXkoTCkpe2xldCBSPUkuZ3JvdXBzO2ZvcihsZXQgRj0wLHo9Ui5sZW5ndGg7Rjx6O0YrKyl7bGV0IFU9UltGXSxXPUxbVS5tYXRlcmlhbEluZGV4XTtpZihXJiZXLnZpc2libGUpe2xldCBaPXgoUyxJLFcsayxQLm5lYXIsUC5mYXIsTyk7ZS5yZW5kZXJCdWZmZXJEaXJlY3QoUCxudWxsLEksWixTLFUpfX19ZWxzZSBpZihMLnZpc2libGUpe2xldCBSPXgoUyxJLEwsayxQLm5lYXIsUC5mYXIsTyk7ZS5yZW5kZXJCdWZmZXJEaXJlY3QoUCxudWxsLEksUixTLG51bGwpfX1sZXQgQj1TLmNoaWxkcmVuO2ZvcihsZXQgST0wLEw9Qi5sZW5ndGg7STxMO0krKyliKEJbSV0sQyxQLGssTyl9fWZ1bmN0aW9uIElncihlLHQscil7bGV0IG49ci5pc1dlYkdMMjtmdW5jdGlvbiBpKCl7bGV0IGF0PSExLHNlPW5ldyBlbixRdD1udWxsLENlPW5ldyBlbigwLDAsMCwwKTtyZXR1cm57c2V0TWFzazpmdW5jdGlvbihQdCl7UXQhPT1QdCYmIWF0JiYoZS5jb2xvck1hc2soUHQsUHQsUHQsUHQpLFF0PVB0KX0sc2V0TG9ja2VkOmZ1bmN0aW9uKFB0KXthdD1QdH0sc2V0Q2xlYXI6ZnVuY3Rpb24oUHQsTnQsemUseW4sV2kpe1dpPT09ITAmJihQdCo9eW4sTnQqPXluLHplKj15biksc2Uuc2V0KFB0LE50LHplLHluKSxDZS5lcXVhbHMoc2UpPT09ITEmJihlLmNsZWFyQ29sb3IoUHQsTnQsemUseW4pLENlLmNvcHkoc2UpKX0scmVzZXQ6ZnVuY3Rpb24oKXthdD0hMSxRdD1udWxsLENlLnNldCgtMSwwLDAsMCl9fX1mdW5jdGlvbiBvKCl7bGV0IGF0PSExLHNlPW51bGwsUXQ9bnVsbCxDZT1udWxsO3JldHVybntzZXRUZXN0OmZ1bmN0aW9uKFB0KXtQdD9sdCgyOTI5KTpLdCgyOTI5KX0sc2V0TWFzazpmdW5jdGlvbihQdCl7c2UhPT1QdCYmIWF0JiYoZS5kZXB0aE1hc2soUHQpLHNlPVB0KX0sc2V0RnVuYzpmdW5jdGlvbihQdCl7aWYoUXQhPT1QdCl7aWYoUHQpc3dpdGNoKFB0KXtjYXNlIGVmZTplLmRlcHRoRnVuYyg1MTIpO2JyZWFrO2Nhc2UgcmZlOmUuZGVwdGhGdW5jKDUxOSk7YnJlYWs7Y2FzZSBuZmU6ZS5kZXB0aEZ1bmMoNTEzKTticmVhaztjYXNlIGlVOmUuZGVwdGhGdW5jKDUxNSk7YnJlYWs7Y2FzZSBpZmU6ZS5kZXB0aEZ1bmMoNTE0KTticmVhaztjYXNlIG9mZTplLmRlcHRoRnVuYyg1MTgpO2JyZWFrO2Nhc2UgYWZlOmUuZGVwdGhGdW5jKDUxNik7YnJlYWs7Y2FzZSBzZmU6ZS5kZXB0aEZ1bmMoNTE3KTticmVhaztkZWZhdWx0OmUuZGVwdGhGdW5jKDUxNSl9ZWxzZSBlLmRlcHRoRnVuYyg1MTUpO1F0PVB0fX0sc2V0TG9ja2VkOmZ1bmN0aW9uKFB0KXthdD1QdH0sc2V0Q2xlYXI6ZnVuY3Rpb24oUHQpe0NlIT09UHQmJihlLmNsZWFyRGVwdGgoUHQpLENlPVB0KX0scmVzZXQ6ZnVuY3Rpb24oKXthdD0hMSxzZT1udWxsLFF0PW51bGwsQ2U9bnVsbH19fWZ1bmN0aW9uIGEoKXtsZXQgYXQ9ITEsc2U9bnVsbCxRdD1udWxsLENlPW51bGwsUHQ9bnVsbCxOdD1udWxsLHplPW51bGwseW49bnVsbCxXaT1udWxsO3JldHVybntzZXRUZXN0OmZ1bmN0aW9uKEFyKXthdHx8KEFyP2x0KDI5NjApOkt0KDI5NjApKX0sc2V0TWFzazpmdW5jdGlvbihBcil7c2UhPT1BciYmIWF0JiYoZS5zdGVuY2lsTWFzayhBciksc2U9QXIpfSxzZXRGdW5jOmZ1bmN0aW9uKEFyLElhLGhvKXsoUXQhPT1Bcnx8Q2UhPT1JYXx8UHQhPT1obykmJihlLnN0ZW5jaWxGdW5jKEFyLElhLGhvKSxRdD1BcixDZT1JYSxQdD1obyl9LHNldE9wOmZ1bmN0aW9uKEFyLElhLGhvKXsoTnQhPT1Bcnx8emUhPT1JYXx8eW4hPT1obykmJihlLnN0ZW5jaWxPcChBcixJYSxobyksTnQ9QXIsemU9SWEseW49aG8pfSxzZXRMb2NrZWQ6ZnVuY3Rpb24oQXIpe2F0PUFyfSxzZXRDbGVhcjpmdW5jdGlvbihBcil7V2khPT1BciYmKGUuY2xlYXJTdGVuY2lsKEFyKSxXaT1Bcil9LHJlc2V0OmZ1bmN0aW9uKCl7YXQ9ITEsc2U9bnVsbCxRdD1udWxsLENlPW51bGwsUHQ9bnVsbCxOdD1udWxsLHplPW51bGwseW49bnVsbCxXaT1udWxsfX19bGV0IHM9bmV3IGksbD1uZXcgbyxjPW5ldyBhLHU9e30saD17fSxmPW5ldyBXZWFrTWFwLHA9W10sZD1udWxsLGc9ITEsXz1udWxsLHk9bnVsbCx4PW51bGwsYj1udWxsLFM9bnVsbCxDPW51bGwsUD1udWxsLGs9ITEsTz1udWxsLEQ9bnVsbCxCPW51bGwsST1udWxsLEw9bnVsbCxSPWUuZ2V0UGFyYW1ldGVyKDM1NjYxKSxGPSExLHo9MCxVPWUuZ2V0UGFyYW1ldGVyKDc5MzgpO1UuaW5kZXhPZigiV2ViR0wiKSE9PS0xPyh6PXBhcnNlRmxvYXQoL15XZWJHTCAoXGQpLy5leGVjKFUpWzFdKSxGPXo+PTEpOlUuaW5kZXhPZigiT3BlbkdMIEVTIikhPT0tMSYmKHo9cGFyc2VGbG9hdCgvXk9wZW5HTCBFUyAoXGQpLy5leGVjKFUpWzFdKSxGPXo+PTIpO2xldCBXPW51bGwsWj17fSxydD1lLmdldFBhcmFtZXRlcigzMDg4KSxvdD1lLmdldFBhcmFtZXRlcigyOTc4KSxzdD1uZXcgZW4oKS5mcm9tQXJyYXkocnQpLFN0PW5ldyBlbigpLmZyb21BcnJheShvdCk7ZnVuY3Rpb24gYnQoYXQsc2UsUXQpe2xldCBDZT1uZXcgVWludDhBcnJheSg0KSxQdD1lLmNyZWF0ZVRleHR1cmUoKTtlLmJpbmRUZXh0dXJlKGF0LFB0KSxlLnRleFBhcmFtZXRlcmkoYXQsMTAyNDEsOTcyOCksZS50ZXhQYXJhbWV0ZXJpKGF0LDEwMjQwLDk3MjgpO2ZvcihsZXQgTnQ9MDtOdDxRdDtOdCsrKWUudGV4SW1hZ2UyRChzZStOdCwwLDY0MDgsMSwxLDAsNjQwOCw1MTIxLENlKTtyZXR1cm4gUHR9bGV0IE10PXt9O010WzM1NTNdPWJ0KDM1NTMsMzU1MywxKSxNdFszNDA2N109YnQoMzQwNjcsMzQwNjksNikscy5zZXRDbGVhcigwLDAsMCwxKSxsLnNldENsZWFyKDEpLGMuc2V0Q2xlYXIoMCksbHQoMjkyOSksbC5zZXRGdW5jKGlVKSxodCghMSksd3QoU3V0KSxsdCgyODg0KSxxKEtkKTtmdW5jdGlvbiBsdChhdCl7dVthdF0hPT0hMCYmKGUuZW5hYmxlKGF0KSx1W2F0XT0hMCl9ZnVuY3Rpb24gS3QoYXQpe3VbYXRdIT09ITEmJihlLmRpc2FibGUoYXQpLHVbYXRdPSExKX1mdW5jdGlvbiBfdChhdCxzZSl7cmV0dXJuIGhbYXRdIT09c2U/KGUuYmluZEZyYW1lYnVmZmVyKGF0LHNlKSxoW2F0XT1zZSxuJiYoYXQ9PT0zNjAwOSYmKGhbMzYxNjBdPXNlKSxhdD09PTM2MTYwJiYoaFszNjAwOV09c2UpKSwhMCk6ITF9ZnVuY3Rpb24gY3QoYXQsc2Upe2xldCBRdD1wLENlPSExO2lmKGF0KWlmKFF0PWYuZ2V0KHNlKSxRdD09PXZvaWQgMCYmKFF0PVtdLGYuc2V0KHNlLFF0KSksYXQuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyl7bGV0IFB0PWF0LnRleHR1cmU7aWYoUXQubGVuZ3RoIT09UHQubGVuZ3RofHxRdFswXSE9PTM2MDY0KXtmb3IobGV0IE50PTAsemU9UHQubGVuZ3RoO050PHplO050KyspUXRbTnRdPTM2MDY0K050O1F0Lmxlbmd0aD1QdC5sZW5ndGgsQ2U9ITB9fWVsc2UgUXRbMF0hPT0zNjA2NCYmKFF0WzBdPTM2MDY0LENlPSEwKTtlbHNlIFF0WzBdIT09MTAyOSYmKFF0WzBdPTEwMjksQ2U9ITApO0NlJiYoci5pc1dlYkdMMj9lLmRyYXdCdWZmZXJzKFF0KTp0LmdldCgiV0VCR0xfZHJhd19idWZmZXJzIikuZHJhd0J1ZmZlcnNXRUJHTChRdCkpfWZ1bmN0aW9uIFgoYXQpe3JldHVybiBkIT09YXQ/KGUudXNlUHJvZ3JhbShhdCksZD1hdCwhMCk6ITF9bGV0IGV0PXtbRTFdOjMyNzc0LFtHaGVdOjMyNzc4LFtXaGVdOjMyNzc5fTtpZihuKWV0W0N1dF09MzI3NzUsZXRbQXV0XT0zMjc3NjtlbHNle2xldCBhdD10LmdldCgiRVhUX2JsZW5kX21pbm1heCIpO2F0IT09bnVsbCYmKGV0W0N1dF09YXQuTUlOX0VYVCxldFtBdXRdPWF0Lk1BWF9FWFQpfWxldCBkdD17W1loZV06MCxbamhlXToxLFtYaGVdOjc2OCxbUGh0XTo3NzAsW3RmZV06Nzc2LFtKaGVdOjc3NCxbS2hlXTo3NzIsWyRoZV06NzY5LFtJaHRdOjc3MSxbUWhlXTo3NzUsW1poZV06NzczfTtmdW5jdGlvbiBxKGF0LHNlLFF0LENlLFB0LE50LHplLHluKXtpZihhdD09PUtkKXtnPT09ITAmJihLdCgzMDQyKSxnPSExKTtyZXR1cm59aWYoZz09PSExJiYobHQoMzA0MiksZz0hMCksYXQhPT1xaGUpe2lmKGF0IT09X3x8eW4hPT1rKXtpZigoeSE9PUUxfHxTIT09RTEpJiYoZS5ibGVuZEVxdWF0aW9uKDMyNzc0KSx5PUUxLFM9RTEpLHluKXN3aXRjaChhdCl7Y2FzZSBWMzplLmJsZW5kRnVuY1NlcGFyYXRlKDEsNzcxLDEsNzcxKTticmVhaztjYXNlIE11dDplLmJsZW5kRnVuYygxLDEpO2JyZWFrO2Nhc2UgRXV0OmUuYmxlbmRGdW5jU2VwYXJhdGUoMCw3NjksMCwxKTticmVhaztjYXNlIFR1dDplLmJsZW5kRnVuY1NlcGFyYXRlKDAsNzY4LDAsNzcwKTticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IEludmFsaWQgYmxlbmRpbmc6ICIsYXQpO2JyZWFrfWVsc2Ugc3dpdGNoKGF0KXtjYXNlIFYzOmUuYmxlbmRGdW5jU2VwYXJhdGUoNzcwLDc3MSwxLDc3MSk7YnJlYWs7Y2FzZSBNdXQ6ZS5ibGVuZEZ1bmMoNzcwLDEpO2JyZWFrO2Nhc2UgRXV0OmUuYmxlbmRGdW5jU2VwYXJhdGUoMCw3NjksMCwxKTticmVhaztjYXNlIFR1dDplLmJsZW5kRnVuYygwLDc2OCk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiBJbnZhbGlkIGJsZW5kaW5nOiAiLGF0KTticmVha314PW51bGwsYj1udWxsLEM9bnVsbCxQPW51bGwsXz1hdCxrPXlufXJldHVybn1QdD1QdHx8c2UsTnQ9TnR8fFF0LHplPXplfHxDZSwoc2UhPT15fHxQdCE9PVMpJiYoZS5ibGVuZEVxdWF0aW9uU2VwYXJhdGUoZXRbc2VdLGV0W1B0XSkseT1zZSxTPVB0KSwoUXQhPT14fHxDZSE9PWJ8fE50IT09Q3x8emUhPT1QKSYmKGUuYmxlbmRGdW5jU2VwYXJhdGUoZHRbUXRdLGR0W0NlXSxkdFtOdF0sZHRbemVdKSx4PVF0LGI9Q2UsQz1OdCxQPXplKSxfPWF0LGs9bnVsbH1mdW5jdGlvbiBwdChhdCxzZSl7YXQuc2lkZT09PWsxP0t0KDI4ODQpOmx0KDI4ODQpO2xldCBRdD1hdC5zaWRlPT09SWk7c2UmJihRdD0hUXQpLGh0KFF0KSxhdC5ibGVuZGluZz09PVYzJiZhdC50cmFuc3BhcmVudD09PSExP3EoS2QpOnEoYXQuYmxlbmRpbmcsYXQuYmxlbmRFcXVhdGlvbixhdC5ibGVuZFNyYyxhdC5ibGVuZERzdCxhdC5ibGVuZEVxdWF0aW9uQWxwaGEsYXQuYmxlbmRTcmNBbHBoYSxhdC5ibGVuZERzdEFscGhhLGF0LnByZW11bHRpcGxpZWRBbHBoYSksbC5zZXRGdW5jKGF0LmRlcHRoRnVuYyksbC5zZXRUZXN0KGF0LmRlcHRoVGVzdCksbC5zZXRNYXNrKGF0LmRlcHRoV3JpdGUpLHMuc2V0TWFzayhhdC5jb2xvcldyaXRlKTtsZXQgQ2U9YXQuc3RlbmNpbFdyaXRlO2Muc2V0VGVzdChDZSksQ2UmJihjLnNldE1hc2soYXQuc3RlbmNpbFdyaXRlTWFzayksYy5zZXRGdW5jKGF0LnN0ZW5jaWxGdW5jLGF0LnN0ZW5jaWxSZWYsYXQuc3RlbmNpbEZ1bmNNYXNrKSxjLnNldE9wKGF0LnN0ZW5jaWxGYWlsLGF0LnN0ZW5jaWxaRmFpbCxhdC5zdGVuY2lsWlBhc3MpKSxpZShhdC5wb2x5Z29uT2Zmc2V0LGF0LnBvbHlnb25PZmZzZXRGYWN0b3IsYXQucG9seWdvbk9mZnNldFVuaXRzKSxhdC5hbHBoYVRvQ292ZXJhZ2U9PT0hMD9sdCgzMjkyNik6S3QoMzI5MjYpfWZ1bmN0aW9uIGh0KGF0KXtPIT09YXQmJihhdD9lLmZyb250RmFjZSgyMzA0KTplLmZyb250RmFjZSgyMzA1KSxPPWF0KX1mdW5jdGlvbiB3dChhdCl7YXQhPT1IaGU/KGx0KDI4ODQpLGF0IT09RCYmKGF0PT09U3V0P2UuY3VsbEZhY2UoMTAyOSk6YXQ9PT1WaGU/ZS5jdWxsRmFjZSgxMDI4KTplLmN1bGxGYWNlKDEwMzIpKSk6S3QoMjg4NCksRD1hdH1mdW5jdGlvbiBrdChhdCl7YXQhPT1CJiYoRiYmZS5saW5lV2lkdGgoYXQpLEI9YXQpfWZ1bmN0aW9uIGllKGF0LHNlLFF0KXthdD8obHQoMzI4MjMpLChJIT09c2V8fEwhPT1RdCkmJihlLnBvbHlnb25PZmZzZXQoc2UsUXQpLEk9c2UsTD1RdCkpOkt0KDMyODIzKX1mdW5jdGlvbiBlZShhdCl7YXQ/bHQoMzA4OSk6S3QoMzA4OSl9ZnVuY3Rpb24gTGUoYXQpe2F0PT09dm9pZCAwJiYoYXQ9MzM5ODQrUi0xKSxXIT09YXQmJihlLmFjdGl2ZVRleHR1cmUoYXQpLFc9YXQpfWZ1bmN0aW9uIGFyKGF0LHNlKXtXPT09bnVsbCYmTGUoKTtsZXQgUXQ9WltXXTtRdD09PXZvaWQgMCYmKFF0PXt0eXBlOnZvaWQgMCx0ZXh0dXJlOnZvaWQgMH0sWltXXT1RdCksKFF0LnR5cGUhPT1hdHx8UXQudGV4dHVyZSE9PXNlKSYmKGUuYmluZFRleHR1cmUoYXQsc2V8fE10W2F0XSksUXQudHlwZT1hdCxRdC50ZXh0dXJlPXNlKX1mdW5jdGlvbiBmcigpe2xldCBhdD1aW1ddO2F0IT09dm9pZCAwJiZhdC50eXBlIT09dm9pZCAwJiYoZS5iaW5kVGV4dHVyZShhdC50eXBlLG51bGwpLGF0LnR5cGU9dm9pZCAwLGF0LnRleHR1cmU9dm9pZCAwKX1mdW5jdGlvbiB0dCgpe3RyeXtlLmNvbXByZXNzZWRUZXhJbWFnZTJELmFwcGx5KGUsYXJndW1lbnRzKX1jYXRjaChhdCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLGF0KX19ZnVuY3Rpb24gJCgpe3RyeXtlLnRleFN1YkltYWdlMkQuYXBwbHkoZSxhcmd1bWVudHMpfWNhdGNoKGF0KXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsYXQpfX1mdW5jdGlvbiBJdCgpe3RyeXtlLnRleFN1YkltYWdlM0QuYXBwbHkoZSxhcmd1bWVudHMpfWNhdGNoKGF0KXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsYXQpfX1mdW5jdGlvbiAkdCgpe3RyeXtlLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJELmFwcGx5KGUsYXJndW1lbnRzKX1jYXRjaChhdCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLGF0KX19ZnVuY3Rpb24gaGUoKXt0cnl7ZS50ZXhTdG9yYWdlMkQuYXBwbHkoZSxhcmd1bWVudHMpfWNhdGNoKGF0KXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsYXQpfX1mdW5jdGlvbiBUdCgpe3RyeXtlLnRleFN0b3JhZ2UzRC5hcHBseShlLGFyZ3VtZW50cyl9Y2F0Y2goYXQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixhdCl9fWZ1bmN0aW9uIGJlKCl7dHJ5e2UudGV4SW1hZ2UyRC5hcHBseShlLGFyZ3VtZW50cyl9Y2F0Y2goYXQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixhdCl9fWZ1bmN0aW9uIG50KCl7dHJ5e2UudGV4SW1hZ2UzRC5hcHBseShlLGFyZ3VtZW50cyl9Y2F0Y2goYXQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixhdCl9fWZ1bmN0aW9uIEN0KGF0KXtzdC5lcXVhbHMoYXQpPT09ITEmJihlLnNjaXNzb3IoYXQueCxhdC55LGF0LnosYXQudyksc3QuY29weShhdCkpfWZ1bmN0aW9uIFd0KGF0KXtTdC5lcXVhbHMoYXQpPT09ITEmJihlLnZpZXdwb3J0KGF0LngsYXQueSxhdC56LGF0LncpLFN0LmNvcHkoYXQpKX1mdW5jdGlvbiBmZSgpe2UuZGlzYWJsZSgzMDQyKSxlLmRpc2FibGUoMjg4NCksZS5kaXNhYmxlKDI5MjkpLGUuZGlzYWJsZSgzMjgyMyksZS5kaXNhYmxlKDMwODkpLGUuZGlzYWJsZSgyOTYwKSxlLmRpc2FibGUoMzI5MjYpLGUuYmxlbmRFcXVhdGlvbigzMjc3NCksZS5ibGVuZEZ1bmMoMSwwKSxlLmJsZW5kRnVuY1NlcGFyYXRlKDEsMCwxLDApLGUuY29sb3JNYXNrKCEwLCEwLCEwLCEwKSxlLmNsZWFyQ29sb3IoMCwwLDAsMCksZS5kZXB0aE1hc2soITApLGUuZGVwdGhGdW5jKDUxMyksZS5jbGVhckRlcHRoKDEpLGUuc3RlbmNpbE1hc2soNDI5NDk2NzI5NSksZS5zdGVuY2lsRnVuYyg1MTksMCw0Mjk0OTY3Mjk1KSxlLnN0ZW5jaWxPcCg3NjgwLDc2ODAsNzY4MCksZS5jbGVhclN0ZW5jaWwoMCksZS5jdWxsRmFjZSgxMDI5KSxlLmZyb250RmFjZSgyMzA1KSxlLnBvbHlnb25PZmZzZXQoMCwwKSxlLmFjdGl2ZVRleHR1cmUoMzM5ODQpLGUuYmluZEZyYW1lYnVmZmVyKDM2MTYwLG51bGwpLG49PT0hMCYmKGUuYmluZEZyYW1lYnVmZmVyKDM2MDA5LG51bGwpLGUuYmluZEZyYW1lYnVmZmVyKDM2MDA4LG51bGwpKSxlLnVzZVByb2dyYW0obnVsbCksZS5saW5lV2lkdGgoMSksZS5zY2lzc29yKDAsMCxlLmNhbnZhcy53aWR0aCxlLmNhbnZhcy5oZWlnaHQpLGUudmlld3BvcnQoMCwwLGUuY2FudmFzLndpZHRoLGUuY2FudmFzLmhlaWdodCksdT17fSxXPW51bGwsWj17fSxoPXt9LGY9bmV3IFdlYWtNYXAscD1bXSxkPW51bGwsZz0hMSxfPW51bGwseT1udWxsLHg9bnVsbCxiPW51bGwsUz1udWxsLEM9bnVsbCxQPW51bGwsaz0hMSxPPW51bGwsRD1udWxsLEI9bnVsbCxJPW51bGwsTD1udWxsLHN0LnNldCgwLDAsZS5jYW52YXMud2lkdGgsZS5jYW52YXMuaGVpZ2h0KSxTdC5zZXQoMCwwLGUuY2FudmFzLndpZHRoLGUuY2FudmFzLmhlaWdodCkscy5yZXNldCgpLGwucmVzZXQoKSxjLnJlc2V0KCl9cmV0dXJue2J1ZmZlcnM6e2NvbG9yOnMsZGVwdGg6bCxzdGVuY2lsOmN9LGVuYWJsZTpsdCxkaXNhYmxlOkt0LGJpbmRGcmFtZWJ1ZmZlcjpfdCxkcmF3QnVmZmVyczpjdCx1c2VQcm9ncmFtOlgsc2V0QmxlbmRpbmc6cSxzZXRNYXRlcmlhbDpwdCxzZXRGbGlwU2lkZWQ6aHQsc2V0Q3VsbEZhY2U6d3Qsc2V0TGluZVdpZHRoOmt0LHNldFBvbHlnb25PZmZzZXQ6aWUsc2V0U2Npc3NvclRlc3Q6ZWUsYWN0aXZlVGV4dHVyZTpMZSxiaW5kVGV4dHVyZTphcix1bmJpbmRUZXh0dXJlOmZyLGNvbXByZXNzZWRUZXhJbWFnZTJEOnR0LHRleEltYWdlMkQ6YmUsdGV4SW1hZ2UzRDpudCx0ZXhTdG9yYWdlMkQ6aGUsdGV4U3RvcmFnZTNEOlR0LHRleFN1YkltYWdlMkQ6JCx0ZXhTdWJJbWFnZTNEOkl0LGNvbXByZXNzZWRUZXhTdWJJbWFnZTJEOiR0LHNjaXNzb3I6Q3Qsdmlld3BvcnQ6V3QscmVzZXQ6ZmV9fWZ1bmN0aW9uIExncihlLHQscixuLGksbyxhKXtsZXQgcz1pLmlzV2ViR0wyLGw9aS5tYXhUZXh0dXJlcyxjPWkubWF4Q3ViZW1hcFNpemUsdT1pLm1heFRleHR1cmVTaXplLGg9aS5tYXhTYW1wbGVzLHA9dC5oYXMoIldFQkdMX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSIpP3QuZ2V0KCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKTp2b2lkIDAsZD1uZXcgV2Vha01hcCxnLF89ITE7dHJ5e189dHlwZW9mIE9mZnNjcmVlbkNhbnZhcyE9InVuZGVmaW5lZCImJm5ldyBPZmZzY3JlZW5DYW52YXMoMSwxKS5nZXRDb250ZXh0KCIyZCIpIT09bnVsbH1jYXRjaCh0dCl7fWZ1bmN0aW9uIHkodHQsJCl7cmV0dXJuIF8/bmV3IE9mZnNjcmVlbkNhbnZhcyh0dCwkKTp0NigiY2FudmFzIil9ZnVuY3Rpb24geCh0dCwkLEl0LCR0KXtsZXQgaGU9MTtpZigodHQud2lkdGg+JHR8fHR0LmhlaWdodD4kdCkmJihoZT0kdC9NYXRoLm1heCh0dC53aWR0aCx0dC5oZWlnaHQpKSxoZTwxfHwkPT09ITApaWYodHlwZW9mIEhUTUxJbWFnZUVsZW1lbnQhPSJ1bmRlZmluZWQiJiZ0dCBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCE9InVuZGVmaW5lZCImJnR0IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnR8fHR5cGVvZiBJbWFnZUJpdG1hcCE9InVuZGVmaW5lZCImJnR0IGluc3RhbmNlb2YgSW1hZ2VCaXRtYXApe2xldCBUdD0kP0ZmZTpNYXRoLmZsb29yLGJlPVR0KGhlKnR0LndpZHRoKSxudD1UdChoZSp0dC5oZWlnaHQpO2c9PT12b2lkIDAmJihnPXkoYmUsbnQpKTtsZXQgQ3Q9SXQ/eShiZSxudCk6ZztyZXR1cm4gQ3Qud2lkdGg9YmUsQ3QuaGVpZ2h0PW50LEN0LmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKHR0LDAsMCxiZSxudCksY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIGhhcyBiZWVuIHJlc2l6ZWQgZnJvbSAoIit0dC53aWR0aCsieCIrdHQuaGVpZ2h0KyIpIHRvICgiK2JlKyJ4IitudCsiKS4iKSxDdH1lbHNlIHJldHVybiJkYXRhImluIHR0JiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEltYWdlIGluIERhdGFUZXh0dXJlIGlzIHRvbyBiaWcgKCIrdHQud2lkdGgrIngiK3R0LmhlaWdodCsiKS4iKSx0dDtyZXR1cm4gdHR9ZnVuY3Rpb24gYih0dCl7cmV0dXJuIFp1dCh0dC53aWR0aCkmJlp1dCh0dC5oZWlnaHQpfWZ1bmN0aW9uIFModHQpe3JldHVybiBzPyExOnR0LndyYXBTIT09Sm98fHR0LndyYXBUIT09Sm98fHR0Lm1pbkZpbHRlciE9PUxpJiZ0dC5taW5GaWx0ZXIhPT1paX1mdW5jdGlvbiBDKHR0LCQpe3JldHVybiB0dC5nZW5lcmF0ZU1pcG1hcHMmJiQmJnR0Lm1pbkZpbHRlciE9PUxpJiZ0dC5taW5GaWx0ZXIhPT1paX1mdW5jdGlvbiBQKHR0KXtlLmdlbmVyYXRlTWlwbWFwKHR0KX1mdW5jdGlvbiBrKHR0LCQsSXQsJHQsaGU9ITEpe2lmKHM9PT0hMSlyZXR1cm4gJDtpZih0dCE9PW51bGwpe2lmKGVbdHRdIT09dm9pZCAwKXJldHVybiBlW3R0XTtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gdXNlIG5vbi1leGlzdGluZyBXZWJHTCBpbnRlcm5hbCBmb3JtYXQgJyIrdHQrIiciKX1sZXQgVHQ9JDtyZXR1cm4gJD09PTY0MDMmJihJdD09PTUxMjYmJihUdD0zMzMyNiksSXQ9PT01MTMxJiYoVHQ9MzMzMjUpLEl0PT09NTEyMSYmKFR0PTMzMzIxKSksJD09PTMzMzE5JiYoSXQ9PT01MTI2JiYoVHQ9MzMzMjgpLEl0PT09NTEzMSYmKFR0PTMzMzI3KSxJdD09PTUxMjEmJihUdD0zMzMyMykpLCQ9PT02NDA4JiYoSXQ9PT01MTI2JiYoVHQ9MzQ4MzYpLEl0PT09NTEzMSYmKFR0PTM0ODQyKSxJdD09PTUxMjEmJihUdD0kdD09PVluJiZoZT09PSExPzM1OTA3OjMyODU2KSxJdD09PTMyODE5JiYoVHQ9MzI4NTQpLEl0PT09MzI4MjAmJihUdD0zMjg1NSkpLChUdD09PTMzMzI1fHxUdD09PTMzMzI2fHxUdD09PTMzMzI3fHxUdD09PTMzMzI4fHxUdD09PTM0ODQyfHxUdD09PTM0ODM2KSYmdC5nZXQoIkVYVF9jb2xvcl9idWZmZXJfZmxvYXQiKSxUdH1mdW5jdGlvbiBPKHR0LCQsSXQpe3JldHVybiBDKHR0LEl0KT09PSEwfHx0dC5pc0ZyYW1lYnVmZmVyVGV4dHVyZSYmdHQubWluRmlsdGVyIT09TGkmJnR0Lm1pbkZpbHRlciE9PWlpP01hdGgubG9nMihNYXRoLm1heCgkLndpZHRoLCQuaGVpZ2h0KSkrMTp0dC5taXBtYXBzIT09dm9pZCAwJiZ0dC5taXBtYXBzLmxlbmd0aD4wP3R0Lm1pcG1hcHMubGVuZ3RoOnR0LmlzQ29tcHJlc3NlZFRleHR1cmUmJkFycmF5LmlzQXJyYXkodHQuaW1hZ2UpPyQubWlwbWFwcy5sZW5ndGg6MX1mdW5jdGlvbiBEKHR0KXtyZXR1cm4gdHQ9PT1MaXx8dHQ9PT1vVXx8dHQ9PT1hVT85NzI4Ojk3Mjl9ZnVuY3Rpb24gQih0dCl7bGV0ICQ9dHQudGFyZ2V0OyQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsQiksTCgkKSwkLmlzVmlkZW9UZXh0dXJlJiZkLmRlbGV0ZSgkKSxhLm1lbW9yeS50ZXh0dXJlcy0tfWZ1bmN0aW9uIEkodHQpe2xldCAkPXR0LnRhcmdldDskLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLEkpLFIoJCl9ZnVuY3Rpb24gTCh0dCl7bGV0ICQ9bi5nZXQodHQpOyQuX193ZWJnbEluaXQhPT12b2lkIDAmJihlLmRlbGV0ZVRleHR1cmUoJC5fX3dlYmdsVGV4dHVyZSksbi5yZW1vdmUodHQpKX1mdW5jdGlvbiBSKHR0KXtsZXQgJD10dC50ZXh0dXJlLEl0PW4uZ2V0KHR0KSwkdD1uLmdldCgkKTtpZighIXR0KXtpZigkdC5fX3dlYmdsVGV4dHVyZSE9PXZvaWQgMCYmKGUuZGVsZXRlVGV4dHVyZSgkdC5fX3dlYmdsVGV4dHVyZSksYS5tZW1vcnkudGV4dHVyZXMtLSksdHQuZGVwdGhUZXh0dXJlJiZ0dC5kZXB0aFRleHR1cmUuZGlzcG9zZSgpLHR0LmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KWZvcihsZXQgaGU9MDtoZTw2O2hlKyspZS5kZWxldGVGcmFtZWJ1ZmZlcihJdC5fX3dlYmdsRnJhbWVidWZmZXJbaGVdKSxJdC5fX3dlYmdsRGVwdGhidWZmZXImJmUuZGVsZXRlUmVuZGVyYnVmZmVyKEl0Ll9fd2ViZ2xEZXB0aGJ1ZmZlcltoZV0pO2Vsc2UgZS5kZWxldGVGcmFtZWJ1ZmZlcihJdC5fX3dlYmdsRnJhbWVidWZmZXIpLEl0Ll9fd2ViZ2xEZXB0aGJ1ZmZlciYmZS5kZWxldGVSZW5kZXJidWZmZXIoSXQuX193ZWJnbERlcHRoYnVmZmVyKSxJdC5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXImJmUuZGVsZXRlRnJhbWVidWZmZXIoSXQuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKSxJdC5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXImJmUuZGVsZXRlUmVuZGVyYnVmZmVyKEl0Ll9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciksSXQuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyJiZlLmRlbGV0ZVJlbmRlcmJ1ZmZlcihJdC5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXIpO2lmKHR0LmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMpZm9yKGxldCBoZT0wLFR0PSQubGVuZ3RoO2hlPFR0O2hlKyspe2xldCBiZT1uLmdldCgkW2hlXSk7YmUuX193ZWJnbFRleHR1cmUmJihlLmRlbGV0ZVRleHR1cmUoYmUuX193ZWJnbFRleHR1cmUpLGEubWVtb3J5LnRleHR1cmVzLS0pLG4ucmVtb3ZlKCRbaGVdKX1uLnJlbW92ZSgkKSxuLnJlbW92ZSh0dCl9fWxldCBGPTA7ZnVuY3Rpb24geigpe0Y9MH1mdW5jdGlvbiBVKCl7bGV0IHR0PUY7cmV0dXJuIHR0Pj1sJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXM6IFRyeWluZyB0byB1c2UgIit0dCsiIHRleHR1cmUgdW5pdHMgd2hpbGUgdGhpcyBHUFUgc3VwcG9ydHMgb25seSAiK2wpLEYrPTEsdHR9ZnVuY3Rpb24gVyh0dCwkKXtsZXQgSXQ9bi5nZXQodHQpO2lmKHR0LmlzVmlkZW9UZXh0dXJlJiZrdCh0dCksdHQudmVyc2lvbj4wJiZJdC5fX3ZlcnNpb24hPT10dC52ZXJzaW9uKXtsZXQgJHQ9dHQuaW1hZ2U7aWYoJHQ9PT12b2lkIDApY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIG1hcmtlZCBmb3IgdXBkYXRlIGJ1dCBpbWFnZSBpcyB1bmRlZmluZWQiKTtlbHNlIGlmKCR0LmNvbXBsZXRlPT09ITEpY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIG1hcmtlZCBmb3IgdXBkYXRlIGJ1dCBpbWFnZSBpcyBpbmNvbXBsZXRlIik7ZWxzZXtsdChJdCx0dCwkKTtyZXR1cm59fXIuYWN0aXZlVGV4dHVyZSgzMzk4NCskKSxyLmJpbmRUZXh0dXJlKDM1NTMsSXQuX193ZWJnbFRleHR1cmUpfWZ1bmN0aW9uIFoodHQsJCl7bGV0IEl0PW4uZ2V0KHR0KTtpZih0dC52ZXJzaW9uPjAmJkl0Ll9fdmVyc2lvbiE9PXR0LnZlcnNpb24pe2x0KEl0LHR0LCQpO3JldHVybn1yLmFjdGl2ZVRleHR1cmUoMzM5ODQrJCksci5iaW5kVGV4dHVyZSgzNTg2NixJdC5fX3dlYmdsVGV4dHVyZSl9ZnVuY3Rpb24gcnQodHQsJCl7bGV0IEl0PW4uZ2V0KHR0KTtpZih0dC52ZXJzaW9uPjAmJkl0Ll9fdmVyc2lvbiE9PXR0LnZlcnNpb24pe2x0KEl0LHR0LCQpO3JldHVybn1yLmFjdGl2ZVRleHR1cmUoMzM5ODQrJCksci5iaW5kVGV4dHVyZSgzMjg3OSxJdC5fX3dlYmdsVGV4dHVyZSl9ZnVuY3Rpb24gb3QodHQsJCl7bGV0IEl0PW4uZ2V0KHR0KTtpZih0dC52ZXJzaW9uPjAmJkl0Ll9fdmVyc2lvbiE9PXR0LnZlcnNpb24pe0t0KEl0LHR0LCQpO3JldHVybn1yLmFjdGl2ZVRleHR1cmUoMzM5ODQrJCksci5iaW5kVGV4dHVyZSgzNDA2NyxJdC5fX3dlYmdsVGV4dHVyZSl9bGV0IHN0PXtbWFBdOjEwNDk3LFtKb106MzMwNzEsWyRQXTozMzY0OH0sU3Q9e1tMaV06OTcyOCxbb1VdOjk5ODQsW2FVXTo5OTg2LFtpaV06OTcyOSxbTGh0XTo5OTg1LFtheF06OTk4N307ZnVuY3Rpb24gYnQodHQsJCxJdCl7aWYoSXQ/KGUudGV4UGFyYW1ldGVyaSh0dCwxMDI0MixzdFskLndyYXBTXSksZS50ZXhQYXJhbWV0ZXJpKHR0LDEwMjQzLHN0WyQud3JhcFRdKSwodHQ9PT0zMjg3OXx8dHQ9PT0zNTg2NikmJmUudGV4UGFyYW1ldGVyaSh0dCwzMjg4MixzdFskLndyYXBSXSksZS50ZXhQYXJhbWV0ZXJpKHR0LDEwMjQwLFN0WyQubWFnRmlsdGVyXSksZS50ZXhQYXJhbWV0ZXJpKHR0LDEwMjQxLFN0WyQubWluRmlsdGVyXSkpOihlLnRleFBhcmFtZXRlcmkodHQsMTAyNDIsMzMwNzEpLGUudGV4UGFyYW1ldGVyaSh0dCwxMDI0MywzMzA3MSksKHR0PT09MzI4Nzl8fHR0PT09MzU4NjYpJiZlLnRleFBhcmFtZXRlcmkodHQsMzI4ODIsMzMwNzEpLCgkLndyYXBTIT09Sm98fCQud3JhcFQhPT1KbykmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBpcyBub3QgcG93ZXIgb2YgdHdvLiBUZXh0dXJlLndyYXBTIGFuZCBUZXh0dXJlLndyYXBUIHNob3VsZCBiZSBzZXQgdG8gVEhSRUUuQ2xhbXBUb0VkZ2VXcmFwcGluZy4iKSxlLnRleFBhcmFtZXRlcmkodHQsMTAyNDAsRCgkLm1hZ0ZpbHRlcikpLGUudGV4UGFyYW1ldGVyaSh0dCwxMDI0MSxEKCQubWluRmlsdGVyKSksJC5taW5GaWx0ZXIhPT1MaSYmJC5taW5GaWx0ZXIhPT1paSYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIGlzIG5vdCBwb3dlciBvZiB0d28uIFRleHR1cmUubWluRmlsdGVyIHNob3VsZCBiZSBzZXQgdG8gVEhSRUUuTmVhcmVzdEZpbHRlciBvciBUSFJFRS5MaW5lYXJGaWx0ZXIuIikpLHQuaGFzKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKT09PSEwKXtsZXQgJHQ9dC5nZXQoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpO2lmKCQudHlwZT09PVhkJiZ0LmhhcygiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIik9PT0hMXx8cz09PSExJiYkLnR5cGU9PT1BMSYmdC5oYXMoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIik9PT0hMSlyZXR1cm47KCQuYW5pc290cm9weT4xfHxuLmdldCgkKS5fX2N1cnJlbnRBbmlzb3Ryb3B5KSYmKGUudGV4UGFyYW1ldGVyZih0dCwkdC5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCxNYXRoLm1pbigkLmFuaXNvdHJvcHksaS5nZXRNYXhBbmlzb3Ryb3B5KCkpKSxuLmdldCgkKS5fX2N1cnJlbnRBbmlzb3Ryb3B5PSQuYW5pc290cm9weSl9fWZ1bmN0aW9uIE10KHR0LCQpe3R0Ll9fd2ViZ2xJbml0PT09dm9pZCAwJiYodHQuX193ZWJnbEluaXQ9ITAsJC5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixCKSx0dC5fX3dlYmdsVGV4dHVyZT1lLmNyZWF0ZVRleHR1cmUoKSxhLm1lbW9yeS50ZXh0dXJlcysrKX1mdW5jdGlvbiBsdCh0dCwkLEl0KXtsZXQgJHQ9MzU1MzskLmlzRGF0YVRleHR1cmUyREFycmF5JiYoJHQ9MzU4NjYpLCQuaXNEYXRhVGV4dHVyZTNEJiYoJHQ9MzI4NzkpLE10KHR0LCQpLHIuYWN0aXZlVGV4dHVyZSgzMzk4NCtJdCksci5iaW5kVGV4dHVyZSgkdCx0dC5fX3dlYmdsVGV4dHVyZSksZS5waXhlbFN0b3JlaSgzNzQ0MCwkLmZsaXBZKSxlLnBpeGVsU3RvcmVpKDM3NDQxLCQucHJlbXVsdGlwbHlBbHBoYSksZS5waXhlbFN0b3JlaSgzMzE3LCQudW5wYWNrQWxpZ25tZW50KSxlLnBpeGVsU3RvcmVpKDM3NDQzLDApO2xldCBoZT1TKCQpJiZiKCQuaW1hZ2UpPT09ITEsVHQ9eCgkLmltYWdlLGhlLCExLHUpO1R0PWllKCQsVHQpO2xldCBiZT1iKFR0KXx8cyxudD1vLmNvbnZlcnQoJC5mb3JtYXQsJC5lbmNvZGluZyksQ3Q9by5jb252ZXJ0KCQudHlwZSksV3Q9aygkLmludGVybmFsRm9ybWF0LG50LEN0LCQuZW5jb2RpbmcsJC5pc1ZpZGVvVGV4dHVyZSk7YnQoJHQsJCxiZSk7bGV0IGZlLGF0PSQubWlwbWFwcyxzZT1zJiYkLmlzVmlkZW9UZXh0dXJlIT09ITAsUXQ9dHQuX192ZXJzaW9uPT09dm9pZCAwLENlPU8oJCxUdCxiZSk7aWYoJC5pc0RlcHRoVGV4dHVyZSlXdD02NDAyLHM/JC50eXBlPT09WGQ/V3Q9MzYwMTI6JC50eXBlPT09VlA/V3Q9MzMxOTA6JC50eXBlPT09UDE/V3Q9MzUwNTY6V3Q9MzMxODk6JC50eXBlPT09WGQmJmNvbnNvbGUuZXJyb3IoIldlYkdMUmVuZGVyZXI6IEZsb2F0aW5nIHBvaW50IGRlcHRoIHRleHR1cmUgcmVxdWlyZXMgV2ViR0wyLiIpLCQuZm9ybWF0PT09RjAmJld0PT09NjQwMiYmJC50eXBlIT09RzMmJiQudHlwZSE9PVZQJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBVc2UgVW5zaWduZWRTaG9ydFR5cGUgb3IgVW5zaWduZWRJbnRUeXBlIGZvciBEZXB0aEZvcm1hdCBEZXB0aFRleHR1cmUuIiksJC50eXBlPUczLEN0PW8uY29udmVydCgkLnR5cGUpKSwkLmZvcm1hdD09PVIxJiZXdD09PTY0MDImJihXdD0zNDA0MSwkLnR5cGUhPT1QMSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVXNlIFVuc2lnbmVkSW50MjQ4VHlwZSBmb3IgRGVwdGhTdGVuY2lsRm9ybWF0IERlcHRoVGV4dHVyZS4iKSwkLnR5cGU9UDEsQ3Q9by5jb252ZXJ0KCQudHlwZSkpKSxzZSYmUXQ/ci50ZXhTdG9yYWdlMkQoMzU1MywxLFd0LFR0LndpZHRoLFR0LmhlaWdodCk6ci50ZXhJbWFnZTJEKDM1NTMsMCxXdCxUdC53aWR0aCxUdC5oZWlnaHQsMCxudCxDdCxudWxsKTtlbHNlIGlmKCQuaXNEYXRhVGV4dHVyZSlpZihhdC5sZW5ndGg+MCYmYmUpe3NlJiZRdCYmci50ZXhTdG9yYWdlMkQoMzU1MyxDZSxXdCxhdFswXS53aWR0aCxhdFswXS5oZWlnaHQpO2ZvcihsZXQgUHQ9MCxOdD1hdC5sZW5ndGg7UHQ8TnQ7UHQrKylmZT1hdFtQdF0sc2U/ci50ZXhTdWJJbWFnZTJEKDM1NTMsMCwwLDAsZmUud2lkdGgsZmUuaGVpZ2h0LG50LEN0LGZlLmRhdGEpOnIudGV4SW1hZ2UyRCgzNTUzLFB0LFd0LGZlLndpZHRoLGZlLmhlaWdodCwwLG50LEN0LGZlLmRhdGEpOyQuZ2VuZXJhdGVNaXBtYXBzPSExfWVsc2Ugc2U/KFF0JiZyLnRleFN0b3JhZ2UyRCgzNTUzLENlLFd0LFR0LndpZHRoLFR0LmhlaWdodCksci50ZXhTdWJJbWFnZTJEKDM1NTMsMCwwLDAsVHQud2lkdGgsVHQuaGVpZ2h0LG50LEN0LFR0LmRhdGEpKTpyLnRleEltYWdlMkQoMzU1MywwLFd0LFR0LndpZHRoLFR0LmhlaWdodCwwLG50LEN0LFR0LmRhdGEpO2Vsc2UgaWYoJC5pc0NvbXByZXNzZWRUZXh0dXJlKXtzZSYmUXQmJnIudGV4U3RvcmFnZTJEKDM1NTMsQ2UsV3QsYXRbMF0ud2lkdGgsYXRbMF0uaGVpZ2h0KTtmb3IobGV0IFB0PTAsTnQ9YXQubGVuZ3RoO1B0PE50O1B0KyspZmU9YXRbUHRdLCQuZm9ybWF0IT09UW8/bnQhPT1udWxsP3NlP3IuY29tcHJlc3NlZFRleFN1YkltYWdlMkQoMzU1MyxQdCwwLDAsZmUud2lkdGgsZmUuaGVpZ2h0LG50LGZlLmRhdGEpOnIuY29tcHJlc3NlZFRleEltYWdlMkQoMzU1MyxQdCxXdCxmZS53aWR0aCxmZS5oZWlnaHQsMCxmZS5kYXRhKTpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gbG9hZCB1bnN1cHBvcnRlZCBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0IGluIC51cGxvYWRUZXh0dXJlKCkiKTpzZT9yLnRleFN1YkltYWdlMkQoMzU1MyxQdCwwLDAsZmUud2lkdGgsZmUuaGVpZ2h0LG50LEN0LGZlLmRhdGEpOnIudGV4SW1hZ2UyRCgzNTUzLFB0LFd0LGZlLndpZHRoLGZlLmhlaWdodCwwLG50LEN0LGZlLmRhdGEpfWVsc2UgaWYoJC5pc0RhdGFUZXh0dXJlMkRBcnJheSlzZT8oUXQmJnIudGV4U3RvcmFnZTNEKDM1ODY2LENlLFd0LFR0LndpZHRoLFR0LmhlaWdodCxUdC5kZXB0aCksci50ZXhTdWJJbWFnZTNEKDM1ODY2LDAsMCwwLDAsVHQud2lkdGgsVHQuaGVpZ2h0LFR0LmRlcHRoLG50LEN0LFR0LmRhdGEpKTpyLnRleEltYWdlM0QoMzU4NjYsMCxXdCxUdC53aWR0aCxUdC5oZWlnaHQsVHQuZGVwdGgsMCxudCxDdCxUdC5kYXRhKTtlbHNlIGlmKCQuaXNEYXRhVGV4dHVyZTNEKXNlPyhRdCYmci50ZXhTdG9yYWdlM0QoMzI4NzksQ2UsV3QsVHQud2lkdGgsVHQuaGVpZ2h0LFR0LmRlcHRoKSxyLnRleFN1YkltYWdlM0QoMzI4NzksMCwwLDAsMCxUdC53aWR0aCxUdC5oZWlnaHQsVHQuZGVwdGgsbnQsQ3QsVHQuZGF0YSkpOnIudGV4SW1hZ2UzRCgzMjg3OSwwLFd0LFR0LndpZHRoLFR0LmhlaWdodCxUdC5kZXB0aCwwLG50LEN0LFR0LmRhdGEpO2Vsc2UgaWYoJC5pc0ZyYW1lYnVmZmVyVGV4dHVyZSlzZSYmUXQ/ci50ZXhTdG9yYWdlMkQoMzU1MyxDZSxXdCxUdC53aWR0aCxUdC5oZWlnaHQpOnIudGV4SW1hZ2UyRCgzNTUzLDAsV3QsVHQud2lkdGgsVHQuaGVpZ2h0LDAsbnQsQ3QsbnVsbCk7ZWxzZSBpZihhdC5sZW5ndGg+MCYmYmUpe3NlJiZRdCYmci50ZXhTdG9yYWdlMkQoMzU1MyxDZSxXdCxhdFswXS53aWR0aCxhdFswXS5oZWlnaHQpO2ZvcihsZXQgUHQ9MCxOdD1hdC5sZW5ndGg7UHQ8TnQ7UHQrKylmZT1hdFtQdF0sc2U/ci50ZXhTdWJJbWFnZTJEKDM1NTMsUHQsMCwwLG50LEN0LGZlKTpyLnRleEltYWdlMkQoMzU1MyxQdCxXdCxudCxDdCxmZSk7JC5nZW5lcmF0ZU1pcG1hcHM9ITF9ZWxzZSBzZT8oUXQmJnIudGV4U3RvcmFnZTJEKDM1NTMsQ2UsV3QsVHQud2lkdGgsVHQuaGVpZ2h0KSxyLnRleFN1YkltYWdlMkQoMzU1MywwLDAsMCxudCxDdCxUdCkpOnIudGV4SW1hZ2UyRCgzNTUzLDAsV3QsbnQsQ3QsVHQpO0MoJCxiZSkmJlAoJHQpLHR0Ll9fdmVyc2lvbj0kLnZlcnNpb24sJC5vblVwZGF0ZSYmJC5vblVwZGF0ZSgkKX1mdW5jdGlvbiBLdCh0dCwkLEl0KXtpZigkLmltYWdlLmxlbmd0aCE9PTYpcmV0dXJuO010KHR0LCQpLHIuYWN0aXZlVGV4dHVyZSgzMzk4NCtJdCksci5iaW5kVGV4dHVyZSgzNDA2Nyx0dC5fX3dlYmdsVGV4dHVyZSksZS5waXhlbFN0b3JlaSgzNzQ0MCwkLmZsaXBZKSxlLnBpeGVsU3RvcmVpKDM3NDQxLCQucHJlbXVsdGlwbHlBbHBoYSksZS5waXhlbFN0b3JlaSgzMzE3LCQudW5wYWNrQWxpZ25tZW50KSxlLnBpeGVsU3RvcmVpKDM3NDQzLDApO2xldCAkdD0kJiYoJC5pc0NvbXByZXNzZWRUZXh0dXJlfHwkLmltYWdlWzBdLmlzQ29tcHJlc3NlZFRleHR1cmUpLGhlPSQuaW1hZ2VbMF0mJiQuaW1hZ2VbMF0uaXNEYXRhVGV4dHVyZSxUdD1bXTtmb3IobGV0IFB0PTA7UHQ8NjtQdCsrKSEkdCYmIWhlP1R0W1B0XT14KCQuaW1hZ2VbUHRdLCExLCEwLGMpOlR0W1B0XT1oZT8kLmltYWdlW1B0XS5pbWFnZTokLmltYWdlW1B0XSxUdFtQdF09aWUoJCxUdFtQdF0pO2xldCBiZT1UdFswXSxudD1iKGJlKXx8cyxDdD1vLmNvbnZlcnQoJC5mb3JtYXQsJC5lbmNvZGluZyksV3Q9by5jb252ZXJ0KCQudHlwZSksZmU9aygkLmludGVybmFsRm9ybWF0LEN0LFd0LCQuZW5jb2RpbmcpLGF0PXMmJiQuaXNWaWRlb1RleHR1cmUhPT0hMCxzZT10dC5fX3ZlcnNpb249PT12b2lkIDAsUXQ9TygkLGJlLG50KTtidCgzNDA2NywkLG50KTtsZXQgQ2U7aWYoJHQpe2F0JiZzZSYmci50ZXhTdG9yYWdlMkQoMzQwNjcsUXQsZmUsYmUud2lkdGgsYmUuaGVpZ2h0KTtmb3IobGV0IFB0PTA7UHQ8NjtQdCsrKXtDZT1UdFtQdF0ubWlwbWFwcztmb3IobGV0IE50PTA7TnQ8Q2UubGVuZ3RoO050Kyspe2xldCB6ZT1DZVtOdF07JC5mb3JtYXQhPT1Rbz9DdCE9PW51bGw/YXQ/ci5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCgzNDA2OStQdCxOdCwwLDAsemUud2lkdGgsemUuaGVpZ2h0LEN0LHplLmRhdGEpOnIuY29tcHJlc3NlZFRleEltYWdlMkQoMzQwNjkrUHQsTnQsZmUsemUud2lkdGgsemUuaGVpZ2h0LDAsemUuZGF0YSk6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBBdHRlbXB0IHRvIGxvYWQgdW5zdXBwb3J0ZWQgY29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1hdCBpbiAuc2V0VGV4dHVyZUN1YmUoKSIpOmF0P3IudGV4U3ViSW1hZ2UyRCgzNDA2OStQdCxOdCwwLDAsemUud2lkdGgsemUuaGVpZ2h0LEN0LFd0LHplLmRhdGEpOnIudGV4SW1hZ2UyRCgzNDA2OStQdCxOdCxmZSx6ZS53aWR0aCx6ZS5oZWlnaHQsMCxDdCxXdCx6ZS5kYXRhKX19fWVsc2V7Q2U9JC5taXBtYXBzLGF0JiZzZSYmKENlLmxlbmd0aD4wJiZRdCsrLHIudGV4U3RvcmFnZTJEKDM0MDY3LFF0LGZlLFR0WzBdLndpZHRoLFR0WzBdLmhlaWdodCkpO2ZvcihsZXQgUHQ9MDtQdDw2O1B0KyspaWYoaGUpe2F0P3IudGV4U3ViSW1hZ2UyRCgzNDA2OStQdCwwLDAsMCxUdFtQdF0ud2lkdGgsVHRbUHRdLmhlaWdodCxDdCxXdCxUdFtQdF0uZGF0YSk6ci50ZXhJbWFnZTJEKDM0MDY5K1B0LDAsZmUsVHRbUHRdLndpZHRoLFR0W1B0XS5oZWlnaHQsMCxDdCxXdCxUdFtQdF0uZGF0YSk7Zm9yKGxldCBOdD0wO050PENlLmxlbmd0aDtOdCsrKXtsZXQgeW49Q2VbTnRdLmltYWdlW1B0XS5pbWFnZTthdD9yLnRleFN1YkltYWdlMkQoMzQwNjkrUHQsTnQrMSwwLDAseW4ud2lkdGgseW4uaGVpZ2h0LEN0LFd0LHluLmRhdGEpOnIudGV4SW1hZ2UyRCgzNDA2OStQdCxOdCsxLGZlLHluLndpZHRoLHluLmhlaWdodCwwLEN0LFd0LHluLmRhdGEpfX1lbHNle2F0P3IudGV4U3ViSW1hZ2UyRCgzNDA2OStQdCwwLDAsMCxDdCxXdCxUdFtQdF0pOnIudGV4SW1hZ2UyRCgzNDA2OStQdCwwLGZlLEN0LFd0LFR0W1B0XSk7Zm9yKGxldCBOdD0wO050PENlLmxlbmd0aDtOdCsrKXtsZXQgemU9Q2VbTnRdO2F0P3IudGV4U3ViSW1hZ2UyRCgzNDA2OStQdCxOdCsxLDAsMCxDdCxXdCx6ZS5pbWFnZVtQdF0pOnIudGV4SW1hZ2UyRCgzNDA2OStQdCxOdCsxLGZlLEN0LFd0LHplLmltYWdlW1B0XSl9fX1DKCQsbnQpJiZQKDM0MDY3KSx0dC5fX3ZlcnNpb249JC52ZXJzaW9uLCQub25VcGRhdGUmJiQub25VcGRhdGUoJCl9ZnVuY3Rpb24gX3QodHQsJCxJdCwkdCxoZSl7bGV0IFR0PW8uY29udmVydChJdC5mb3JtYXQsSXQuZW5jb2RpbmcpLGJlPW8uY29udmVydChJdC50eXBlKSxudD1rKEl0LmludGVybmFsRm9ybWF0LFR0LGJlLEl0LmVuY29kaW5nKTtuLmdldCgkKS5fX2hhc0V4dGVybmFsVGV4dHVyZXN8fChoZT09PTMyODc5fHxoZT09PTM1ODY2P3IudGV4SW1hZ2UzRChoZSwwLG50LCQud2lkdGgsJC5oZWlnaHQsJC5kZXB0aCwwLFR0LGJlLG51bGwpOnIudGV4SW1hZ2UyRChoZSwwLG50LCQud2lkdGgsJC5oZWlnaHQsMCxUdCxiZSxudWxsKSksci5iaW5kRnJhbWVidWZmZXIoMzYxNjAsdHQpLCQudXNlUmVuZGVyVG9UZXh0dXJlP3AuZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUVYVCgzNjE2MCwkdCxoZSxuLmdldChJdCkuX193ZWJnbFRleHR1cmUsMCx3dCgkKSk6ZS5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwkdCxoZSxuLmdldChJdCkuX193ZWJnbFRleHR1cmUsMCksci5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9ZnVuY3Rpb24gY3QodHQsJCxJdCl7aWYoZS5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLHR0KSwkLmRlcHRoQnVmZmVyJiYhJC5zdGVuY2lsQnVmZmVyKXtsZXQgJHQ9MzMxODk7aWYoSXR8fCQudXNlUmVuZGVyVG9UZXh0dXJlKXtsZXQgaGU9JC5kZXB0aFRleHR1cmU7aGUmJmhlLmlzRGVwdGhUZXh0dXJlJiYoaGUudHlwZT09PVhkPyR0PTM2MDEyOmhlLnR5cGU9PT1WUCYmKCR0PTMzMTkwKSk7bGV0IFR0PXd0KCQpOyQudXNlUmVuZGVyVG9UZXh0dXJlP3AucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKDM2MTYxLFR0LCR0LCQud2lkdGgsJC5oZWlnaHQpOmUucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLFR0LCR0LCQud2lkdGgsJC5oZWlnaHQpfWVsc2UgZS5yZW5kZXJidWZmZXJTdG9yYWdlKDM2MTYxLCR0LCQud2lkdGgsJC5oZWlnaHQpO2UuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoMzYxNjAsMzYwOTYsMzYxNjEsdHQpfWVsc2UgaWYoJC5kZXB0aEJ1ZmZlciYmJC5zdGVuY2lsQnVmZmVyKXtsZXQgJHQ9d3QoJCk7SXQmJiQudXNlUmVuZGVyYnVmZmVyP2UucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLCR0LDM1MDU2LCQud2lkdGgsJC5oZWlnaHQpOiQudXNlUmVuZGVyVG9UZXh0dXJlP3AucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKDM2MTYxLCR0LDM1MDU2LCQud2lkdGgsJC5oZWlnaHQpOmUucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSwzNDA0MSwkLndpZHRoLCQuaGVpZ2h0KSxlLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKDM2MTYwLDMzMzA2LDM2MTYxLHR0KX1lbHNle2xldCAkdD0kLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHM9PT0hMD8kLnRleHR1cmVbMF06JC50ZXh0dXJlLGhlPW8uY29udmVydCgkdC5mb3JtYXQsJHQuZW5jb2RpbmcpLFR0PW8uY29udmVydCgkdC50eXBlKSxiZT1rKCR0LmludGVybmFsRm9ybWF0LGhlLFR0LCR0LmVuY29kaW5nKSxudD13dCgkKTtJdCYmJC51c2VSZW5kZXJidWZmZXI/ZS5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEsbnQsYmUsJC53aWR0aCwkLmhlaWdodCk6JC51c2VSZW5kZXJUb1RleHR1cmU/cC5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoMzYxNjEsbnQsYmUsJC53aWR0aCwkLmhlaWdodCk6ZS5yZW5kZXJidWZmZXJTdG9yYWdlKDM2MTYxLGJlLCQud2lkdGgsJC5oZWlnaHQpfWUuYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxudWxsKX1mdW5jdGlvbiBYKHR0LCQpe2lmKCQmJiQuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQpdGhyb3cgbmV3IEVycm9yKCJEZXB0aCBUZXh0dXJlIHdpdGggY3ViZSByZW5kZXIgdGFyZ2V0cyBpcyBub3Qgc3VwcG9ydGVkIik7aWYoci5iaW5kRnJhbWVidWZmZXIoMzYxNjAsdHQpLCEoJC5kZXB0aFRleHR1cmUmJiQuZGVwdGhUZXh0dXJlLmlzRGVwdGhUZXh0dXJlKSl0aHJvdyBuZXcgRXJyb3IoInJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBUSFJFRS5EZXB0aFRleHR1cmUiKTsoIW4uZ2V0KCQuZGVwdGhUZXh0dXJlKS5fX3dlYmdsVGV4dHVyZXx8JC5kZXB0aFRleHR1cmUuaW1hZ2Uud2lkdGghPT0kLndpZHRofHwkLmRlcHRoVGV4dHVyZS5pbWFnZS5oZWlnaHQhPT0kLmhlaWdodCkmJigkLmRlcHRoVGV4dHVyZS5pbWFnZS53aWR0aD0kLndpZHRoLCQuZGVwdGhUZXh0dXJlLmltYWdlLmhlaWdodD0kLmhlaWdodCwkLmRlcHRoVGV4dHVyZS5uZWVkc1VwZGF0ZT0hMCksVygkLmRlcHRoVGV4dHVyZSwwKTtsZXQgJHQ9bi5nZXQoJC5kZXB0aFRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlLGhlPXd0KCQpO2lmKCQuZGVwdGhUZXh0dXJlLmZvcm1hdD09PUYwKSQudXNlUmVuZGVyVG9UZXh0dXJlP3AuZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUVYVCgzNjE2MCwzNjA5NiwzNTUzLCR0LDAsaGUpOmUuZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzYwOTYsMzU1MywkdCwwKTtlbHNlIGlmKCQuZGVwdGhUZXh0dXJlLmZvcm1hdD09PVIxKSQudXNlUmVuZGVyVG9UZXh0dXJlP3AuZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUVYVCgzNjE2MCwzMzMwNiwzNTUzLCR0LDAsaGUpOmUuZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzMzMDYsMzU1MywkdCwwKTtlbHNlIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBkZXB0aFRleHR1cmUgZm9ybWF0Iil9ZnVuY3Rpb24gZXQodHQpe2xldCAkPW4uZ2V0KHR0KSxJdD10dC5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldD09PSEwO2lmKHR0LmRlcHRoVGV4dHVyZSYmISQuX19hdXRvQWxsb2NhdGVEZXB0aEJ1ZmZlcil7aWYoSXQpdGhyb3cgbmV3IEVycm9yKCJ0YXJnZXQuZGVwdGhUZXh0dXJlIG5vdCBzdXBwb3J0ZWQgaW4gQ3ViZSByZW5kZXIgdGFyZ2V0cyIpO1goJC5fX3dlYmdsRnJhbWVidWZmZXIsdHQpfWVsc2UgaWYoSXQpeyQuX193ZWJnbERlcHRoYnVmZmVyPVtdO2ZvcihsZXQgJHQ9MDskdDw2OyR0Kyspci5iaW5kRnJhbWVidWZmZXIoMzYxNjAsJC5fX3dlYmdsRnJhbWVidWZmZXJbJHRdKSwkLl9fd2ViZ2xEZXB0aGJ1ZmZlclskdF09ZS5jcmVhdGVSZW5kZXJidWZmZXIoKSxjdCgkLl9fd2ViZ2xEZXB0aGJ1ZmZlclskdF0sdHQsITEpfWVsc2Ugci5iaW5kRnJhbWVidWZmZXIoMzYxNjAsJC5fX3dlYmdsRnJhbWVidWZmZXIpLCQuX193ZWJnbERlcHRoYnVmZmVyPWUuY3JlYXRlUmVuZGVyYnVmZmVyKCksY3QoJC5fX3dlYmdsRGVwdGhidWZmZXIsdHQsITEpO3IuYmluZEZyYW1lYnVmZmVyKDM2MTYwLG51bGwpfWZ1bmN0aW9uIGR0KHR0LCQsSXQpe2xldCAkdD1uLmdldCh0dCk7JCE9PXZvaWQgMCYmX3QoJHQuX193ZWJnbEZyYW1lYnVmZmVyLHR0LHR0LnRleHR1cmUsMzYwNjQsMzU1MyksSXQhPT12b2lkIDAmJmV0KHR0KX1mdW5jdGlvbiBxKHR0KXtsZXQgJD10dC50ZXh0dXJlLEl0PW4uZ2V0KHR0KSwkdD1uLmdldCgkKTt0dC5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixJKSx0dC5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzIT09ITAmJigkdC5fX3dlYmdsVGV4dHVyZT09PXZvaWQgMCYmKCR0Ll9fd2ViZ2xUZXh0dXJlPWUuY3JlYXRlVGV4dHVyZSgpKSwkdC5fX3ZlcnNpb249JC52ZXJzaW9uLGEubWVtb3J5LnRleHR1cmVzKyspO2xldCBoZT10dC5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldD09PSEwLFR0PXR0LmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHM9PT0hMCxiZT0kLmlzRGF0YVRleHR1cmUzRHx8JC5pc0RhdGFUZXh0dXJlMkRBcnJheSxudD1iKHR0KXx8cztpZihoZSl7SXQuX193ZWJnbEZyYW1lYnVmZmVyPVtdO2ZvcihsZXQgQ3Q9MDtDdDw2O0N0KyspSXQuX193ZWJnbEZyYW1lYnVmZmVyW0N0XT1lLmNyZWF0ZUZyYW1lYnVmZmVyKCl9ZWxzZSBpZihJdC5fX3dlYmdsRnJhbWVidWZmZXI9ZS5jcmVhdGVGcmFtZWJ1ZmZlcigpLFR0KWlmKGkuZHJhd0J1ZmZlcnMpe2xldCBDdD10dC50ZXh0dXJlO2ZvcihsZXQgV3Q9MCxmZT1DdC5sZW5ndGg7V3Q8ZmU7V3QrKyl7bGV0IGF0PW4uZ2V0KEN0W1d0XSk7YXQuX193ZWJnbFRleHR1cmU9PT12b2lkIDAmJihhdC5fX3dlYmdsVGV4dHVyZT1lLmNyZWF0ZVRleHR1cmUoKSxhLm1lbW9yeS50ZXh0dXJlcysrKX19ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFdlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIgb3IgV0VCR0xfZHJhd19idWZmZXJzIGV4dGVuc2lvbi4iKTtlbHNlIGlmKHR0LnVzZVJlbmRlcmJ1ZmZlcilpZihzKXtJdC5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXI9ZS5jcmVhdGVGcmFtZWJ1ZmZlcigpLEl0Ll9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlcj1lLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLGUuYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxJdC5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXIpO2xldCBDdD1vLmNvbnZlcnQoJC5mb3JtYXQsJC5lbmNvZGluZyksV3Q9by5jb252ZXJ0KCQudHlwZSksZmU9aygkLmludGVybmFsRm9ybWF0LEN0LFd0LCQuZW5jb2RpbmcpLGF0PXd0KHR0KTtlLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSgzNjE2MSxhdCxmZSx0dC53aWR0aCx0dC5oZWlnaHQpLHIuYmluZEZyYW1lYnVmZmVyKDM2MTYwLEl0Ll9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciksZS5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCwzNjA2NCwzNjE2MSxJdC5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXIpLGUuYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxudWxsKSx0dC5kZXB0aEJ1ZmZlciYmKEl0Ll9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlcj1lLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLGN0KEl0Ll9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlcix0dCwhMCkpLHIuYmluZEZyYW1lYnVmZmVyKDM2MTYwLG51bGwpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIik7aWYoaGUpe3IuYmluZFRleHR1cmUoMzQwNjcsJHQuX193ZWJnbFRleHR1cmUpLGJ0KDM0MDY3LCQsbnQpO2ZvcihsZXQgQ3Q9MDtDdDw2O0N0KyspX3QoSXQuX193ZWJnbEZyYW1lYnVmZmVyW0N0XSx0dCwkLDM2MDY0LDM0MDY5K0N0KTtDKCQsbnQpJiZQKDM0MDY3KSxyLnVuYmluZFRleHR1cmUoKX1lbHNlIGlmKFR0KXtsZXQgQ3Q9dHQudGV4dHVyZTtmb3IobGV0IFd0PTAsZmU9Q3QubGVuZ3RoO1d0PGZlO1d0Kyspe2xldCBhdD1DdFtXdF0sc2U9bi5nZXQoYXQpO3IuYmluZFRleHR1cmUoMzU1MyxzZS5fX3dlYmdsVGV4dHVyZSksYnQoMzU1MyxhdCxudCksX3QoSXQuX193ZWJnbEZyYW1lYnVmZmVyLHR0LGF0LDM2MDY0K1d0LDM1NTMpLEMoYXQsbnQpJiZQKDM1NTMpfXIudW5iaW5kVGV4dHVyZSgpfWVsc2V7bGV0IEN0PTM1NTM7YmUmJihzP0N0PSQuaXNEYXRhVGV4dHVyZTNEPzMyODc5OjM1ODY2OmNvbnNvbGUud2FybigiVEhSRUUuRGF0YVRleHR1cmUzRCBhbmQgVEhSRUUuRGF0YVRleHR1cmUyREFycmF5IG9ubHkgc3VwcG9ydGVkIHdpdGggV2ViR0wyLiIpKSxyLmJpbmRUZXh0dXJlKEN0LCR0Ll9fd2ViZ2xUZXh0dXJlKSxidChDdCwkLG50KSxfdChJdC5fX3dlYmdsRnJhbWVidWZmZXIsdHQsJCwzNjA2NCxDdCksQygkLG50KSYmUChDdCksci51bmJpbmRUZXh0dXJlKCl9dHQuZGVwdGhCdWZmZXImJmV0KHR0KX1mdW5jdGlvbiBwdCh0dCl7bGV0ICQ9Yih0dCl8fHMsSXQ9dHQuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cz09PSEwP3R0LnRleHR1cmU6W3R0LnRleHR1cmVdO2ZvcihsZXQgJHQ9MCxoZT1JdC5sZW5ndGg7JHQ8aGU7JHQrKyl7bGV0IFR0PUl0WyR0XTtpZihDKFR0LCQpKXtsZXQgYmU9dHQuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ/MzQwNjc6MzU1MyxudD1uLmdldChUdCkuX193ZWJnbFRleHR1cmU7ci5iaW5kVGV4dHVyZShiZSxudCksUChiZSksci51bmJpbmRUZXh0dXJlKCl9fX1mdW5jdGlvbiBodCh0dCl7aWYodHQudXNlUmVuZGVyYnVmZmVyKWlmKHMpe2xldCAkPXR0LndpZHRoLEl0PXR0LmhlaWdodCwkdD0xNjM4NCxoZT1bMzYwNjRdLFR0PXR0LnN0ZW5jaWxCdWZmZXI/MzMzMDY6MzYwOTY7dHQuZGVwdGhCdWZmZXImJmhlLnB1c2goVHQpLHR0Lmlnbm9yZURlcHRoRm9yTXVsdGlzYW1wbGVDb3B5fHwodHQuZGVwdGhCdWZmZXImJigkdHw9MjU2KSx0dC5zdGVuY2lsQnVmZmVyJiYoJHR8PTEwMjQpKTtsZXQgYmU9bi5nZXQodHQpO3IuYmluZEZyYW1lYnVmZmVyKDM2MDA4LGJlLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciksci5iaW5kRnJhbWVidWZmZXIoMzYwMDksYmUuX193ZWJnbEZyYW1lYnVmZmVyKSx0dC5pZ25vcmVEZXB0aEZvck11bHRpc2FtcGxlQ29weSYmKGUuaW52YWxpZGF0ZUZyYW1lYnVmZmVyKDM2MDA4LFtUdF0pLGUuaW52YWxpZGF0ZUZyYW1lYnVmZmVyKDM2MDA5LFtUdF0pKSxlLmJsaXRGcmFtZWJ1ZmZlcigwLDAsJCxJdCwwLDAsJCxJdCwkdCw5NzI4KSxlLmludmFsaWRhdGVGcmFtZWJ1ZmZlcigzNjAwOCxoZSksci5iaW5kRnJhbWVidWZmZXIoMzYwMDgsbnVsbCksci5iaW5kRnJhbWVidWZmZXIoMzYwMDksYmUuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldCBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyLiIpfWZ1bmN0aW9uIHd0KHR0KXtyZXR1cm4gcyYmKHR0LnVzZVJlbmRlcmJ1ZmZlcnx8dHQudXNlUmVuZGVyVG9UZXh0dXJlKT9NYXRoLm1pbihoLHR0LnNhbXBsZXMpOjB9ZnVuY3Rpb24ga3QodHQpe2xldCAkPWEucmVuZGVyLmZyYW1lO2QuZ2V0KHR0KSE9PSQmJihkLnNldCh0dCwkKSx0dC51cGRhdGUoKSl9ZnVuY3Rpb24gaWUodHQsJCl7bGV0IEl0PXR0LmVuY29kaW5nLCR0PXR0LmZvcm1hdCxoZT10dC50eXBlO3JldHVybiB0dC5pc0NvbXByZXNzZWRUZXh0dXJlPT09ITB8fHR0LmlzVmlkZW9UZXh0dXJlPT09ITB8fHR0LmZvcm1hdD09PXNVfHxJdCE9PXRtJiYoSXQ9PT1Zbj9zPT09ITE/dC5oYXMoIkVYVF9zUkdCIik9PT0hMCYmJHQ9PT1Rbz8odHQuZm9ybWF0PXNVLHR0Lm1pbkZpbHRlcj1paSx0dC5nZW5lcmF0ZU1pcG1hcHM9ITEpOiQ9WmYuc1JHQlRvTGluZWFyKCQpOigkdCE9PVFvfHxoZSE9PUpkKSYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFRleHR1cmVzOiBzUkdCIGVuY29kZWQgdGV4dHVyZXMgaGF2ZSB0byB1c2UgUkdCQUZvcm1hdCBhbmQgVW5zaWduZWRCeXRlVHlwZS4iKTpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFRleHR1cmVzOiBVbnN1cHBvcnRlZCB0ZXh0dXJlIGVuY29kaW5nOiIsSXQpKSwkfWxldCBlZT0hMSxMZT0hMTtmdW5jdGlvbiBhcih0dCwkKXt0dCYmdHQuaXNXZWJHTFJlbmRlclRhcmdldCYmKGVlPT09ITEmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXMuc2FmZVNldFRleHR1cmUyRDogZG9uJ3QgdXNlIHJlbmRlciB0YXJnZXRzIGFzIHRleHR1cmVzLiBVc2UgdGhlaXIgLnRleHR1cmUgcHJvcGVydHkgaW5zdGVhZC4iKSxlZT0hMCksdHQ9dHQudGV4dHVyZSksVyh0dCwkKX1mdW5jdGlvbiBmcih0dCwkKXt0dCYmdHQuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQmJihMZT09PSExJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFRleHR1cmVzLnNhZmVTZXRUZXh0dXJlQ3ViZTogZG9uJ3QgdXNlIGN1YmUgcmVuZGVyIHRhcmdldHMgYXMgdGV4dHVyZXMuIFVzZSB0aGVpciAudGV4dHVyZSBwcm9wZXJ0eSBpbnN0ZWFkLiIpLExlPSEwKSx0dD10dC50ZXh0dXJlKSxvdCh0dCwkKX10aGlzLmFsbG9jYXRlVGV4dHVyZVVuaXQ9VSx0aGlzLnJlc2V0VGV4dHVyZVVuaXRzPXosdGhpcy5zZXRUZXh0dXJlMkQ9Vyx0aGlzLnNldFRleHR1cmUyREFycmF5PVosdGhpcy5zZXRUZXh0dXJlM0Q9cnQsdGhpcy5zZXRUZXh0dXJlQ3ViZT1vdCx0aGlzLnJlYmluZFRleHR1cmVzPWR0LHRoaXMuc2V0dXBSZW5kZXJUYXJnZXQ9cSx0aGlzLnVwZGF0ZVJlbmRlclRhcmdldE1pcG1hcD1wdCx0aGlzLnVwZGF0ZU11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0PWh0LHRoaXMuc2V0dXBEZXB0aFJlbmRlcmJ1ZmZlcj1ldCx0aGlzLnNldHVwRnJhbWVCdWZmZXJUZXh0dXJlPV90LHRoaXMuc2FmZVNldFRleHR1cmUyRD1hcix0aGlzLnNhZmVTZXRUZXh0dXJlQ3ViZT1mcn1mdW5jdGlvbiBRZmUoZSx0LHIpe2xldCBuPXIuaXNXZWJHTDI7ZnVuY3Rpb24gaShvLGE9bnVsbCl7bGV0IHM7aWYobz09PUpkKXJldHVybiA1MTIxO2lmKG89PT15ZmUpcmV0dXJuIDMyODE5O2lmKG89PT12ZmUpcmV0dXJuIDMyODIwO2lmKG89PT1tZmUpcmV0dXJuIDUxMjA7aWYobz09PWdmZSlyZXR1cm4gNTEyMjtpZihvPT09RzMpcmV0dXJuIDUxMjM7aWYobz09PV9mZSlyZXR1cm4gNTEyNDtpZihvPT09VlApcmV0dXJuIDUxMjU7aWYobz09PVhkKXJldHVybiA1MTI2O2lmKG89PT1BMSlyZXR1cm4gbj81MTMxOihzPXQuZ2V0KCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IikscyE9PW51bGw/cy5IQUxGX0ZMT0FUX09FUzpudWxsKTtpZihvPT09eGZlKXJldHVybiA2NDA2O2lmKG89PT1RbylyZXR1cm4gNjQwODtpZihvPT09YmZlKXJldHVybiA2NDA5O2lmKG89PT13ZmUpcmV0dXJuIDY0MTA7aWYobz09PUYwKXJldHVybiA2NDAyO2lmKG89PT1SMSlyZXR1cm4gMzQwNDE7aWYobz09PVNmZSlyZXR1cm4gNjQwMztpZihvPT09c1UpcmV0dXJuIHM9dC5nZXQoIkVYVF9zUkdCIikscyE9PW51bGw/cy5TUkdCX0FMUEhBX0VYVDpudWxsO2lmKG89PT1NZmUpcmV0dXJuIDM2MjQ0O2lmKG89PT1FZmUpcmV0dXJuIDMzMzE5O2lmKG89PT1UZmUpcmV0dXJuIDMzMzIwO2lmKG89PT1DZmUpcmV0dXJuIDM2MjQ5O2lmKG89PT1KVnx8bz09PVFWfHxvPT09dFV8fG89PT1lVSlpZihhPT09WW4paWYocz10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGNfc3JnYiIpLHMhPT1udWxsKXtpZihvPT09SlYpcmV0dXJuIHMuQ09NUFJFU1NFRF9TUkdCX1MzVENfRFhUMV9FWFQ7aWYobz09PVFWKXJldHVybiBzLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9TM1RDX0RYVDFfRVhUO2lmKG89PT10VSlyZXR1cm4gcy5DT01QUkVTU0VEX1NSR0JfQUxQSEFfUzNUQ19EWFQzX0VYVDtpZihvPT09ZVUpcmV0dXJuIHMuQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUNV9FWFR9ZWxzZSByZXR1cm4gbnVsbDtlbHNlIGlmKHM9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIikscyE9PW51bGwpe2lmKG89PT1KVilyZXR1cm4gcy5DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUO2lmKG89PT1RVilyZXR1cm4gcy5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDtpZihvPT09dFUpcmV0dXJuIHMuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQ7aWYobz09PWVVKXJldHVybiBzLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUfWVsc2UgcmV0dXJuIG51bGw7aWYobz09PVB1dHx8bz09PUl1dHx8bz09PUx1dHx8bz09PWt1dClpZihzPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKSxzIT09bnVsbCl7aWYobz09PVB1dClyZXR1cm4gcy5DT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HO2lmKG89PT1JdXQpcmV0dXJuIHMuQ09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRztpZihvPT09THV0KXJldHVybiBzLkNPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HO2lmKG89PT1rdXQpcmV0dXJuIHMuQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUd9ZWxzZSByZXR1cm4gbnVsbDtpZihvPT09QWZlKXJldHVybiBzPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfZXRjMSIpLHMhPT1udWxsP3MuQ09NUFJFU1NFRF9SR0JfRVRDMV9XRUJHTDpudWxsO2lmKG89PT1SdXR8fG89PT1OdXQpaWYocz10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YyIpLHMhPT1udWxsKXtpZihvPT09UnV0KXJldHVybiBhPT09WW4/cy5DT01QUkVTU0VEX1NSR0I4X0VUQzI6cy5DT01QUkVTU0VEX1JHQjhfRVRDMjtpZihvPT09TnV0KXJldHVybiBhPT09WW4/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VBQzpzLkNPTVBSRVNTRURfUkdCQThfRVRDMl9FQUN9ZWxzZSByZXR1cm4gbnVsbDtpZihvPT09RHV0fHxvPT09T3V0fHxvPT09enV0fHxvPT09RnV0fHxvPT09QnV0fHxvPT09SHV0fHxvPT09VnV0fHxvPT09VXV0fHxvPT09cXV0fHxvPT09R3V0fHxvPT09V3V0fHxvPT09WXV0fHxvPT09anV0fHxvPT09WHV0KWlmKHM9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9hc3RjIikscyE9PW51bGwpe2lmKG89PT1EdXQpcmV0dXJuIGE9PT1Zbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNHg0X0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzR4NF9LSFI7aWYobz09PU91dClyZXR1cm4gYT09PVluP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDRfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfNXg0X0tIUjtpZihvPT09enV0KXJldHVybiBhPT09WW4/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NV9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ181eDVfS0hSO2lmKG89PT1GdXQpcmV0dXJuIGE9PT1Zbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng1X0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzZ4NV9LSFI7aWYobz09PUJ1dClyZXR1cm4gYT09PVluP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDZfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfNng2X0tIUjtpZihvPT09SHV0KXJldHVybiBhPT09WW4/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4NV9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ184eDVfS0hSO2lmKG89PT1WdXQpcmV0dXJuIGE9PT1Zbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg2X0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4Nl9LSFI7aWYobz09PVV1dClyZXR1cm4gYT09PVluP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDhfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg4X0tIUjtpZihvPT09cXV0KXJldHVybiBhPT09WW4/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDVfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4NV9LSFI7aWYobz09PUd1dClyZXR1cm4gYT09PVluP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg2X0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDZfS0hSO2lmKG89PT1XdXQpcmV0dXJuIGE9PT1Zbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4OF9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg4X0tIUjtpZihvPT09WXV0KXJldHVybiBhPT09WW4/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDEwX0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDEwX0tIUjtpZihvPT09anV0KXJldHVybiBhPT09WW4/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEwX0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEwX0tIUjtpZihvPT09WHV0KXJldHVybiBhPT09WW4/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEyX0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEyX0tIUn1lbHNlIHJldHVybiBudWxsO2lmKG89PT0kdXQpaWYocz10LmdldCgiRVhUX3RleHR1cmVfY29tcHJlc3Npb25fYnB0YyIpLHMhPT1udWxsKXtpZihvPT09JHV0KXJldHVybiBhPT09WW4/cy5DT01QUkVTU0VEX1NSR0JfQUxQSEFfQlBUQ19VTk9STV9FWFQ6cy5DT01QUkVTU0VEX1JHQkFfQlBUQ19VTk9STV9FWFR9ZWxzZSByZXR1cm4gbnVsbDtpZihvPT09UDEpcmV0dXJuIG4/MzQwNDI6KHM9dC5nZXQoIldFQkdMX2RlcHRoX3RleHR1cmUiKSxzIT09bnVsbD9zLlVOU0lHTkVEX0lOVF8yNF84X1dFQkdMOm51bGwpfXJldHVybntjb252ZXJ0Oml9fXZhciBuNj1jbGFzcyBleHRlbmRzIFVpe2NvbnN0cnVjdG9yKHQ9W10pe3N1cGVyKCksdGhpcy5jYW1lcmFzPXR9fTtuNi5wcm90b3R5cGUuaXNBcnJheUNhbWVyYT0hMDt2YXIgJGQ9Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJHcm91cCJ9fTskZC5wcm90b3R5cGUuaXNHcm91cD0hMDt2YXIga2dyPXt0eXBlOiJtb3ZlIn0scVA9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl90YXJnZXRSYXk9bnVsbCx0aGlzLl9ncmlwPW51bGwsdGhpcy5faGFuZD1udWxsfWdldEhhbmRTcGFjZSgpe3JldHVybiB0aGlzLl9oYW5kPT09bnVsbCYmKHRoaXMuX2hhbmQ9bmV3ICRkLHRoaXMuX2hhbmQubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLl9oYW5kLnZpc2libGU9ITEsdGhpcy5faGFuZC5qb2ludHM9e30sdGhpcy5faGFuZC5pbnB1dFN0YXRlPXtwaW5jaGluZzohMX0pLHRoaXMuX2hhbmR9Z2V0VGFyZ2V0UmF5U3BhY2UoKXtyZXR1cm4gdGhpcy5fdGFyZ2V0UmF5PT09bnVsbCYmKHRoaXMuX3RhcmdldFJheT1uZXcgJGQsdGhpcy5fdGFyZ2V0UmF5Lm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5fdGFyZ2V0UmF5LnZpc2libGU9ITEsdGhpcy5fdGFyZ2V0UmF5Lmhhc0xpbmVhclZlbG9jaXR5PSExLHRoaXMuX3RhcmdldFJheS5saW5lYXJWZWxvY2l0eT1uZXcgaix0aGlzLl90YXJnZXRSYXkuaGFzQW5ndWxhclZlbG9jaXR5PSExLHRoaXMuX3RhcmdldFJheS5hbmd1bGFyVmVsb2NpdHk9bmV3IGopLHRoaXMuX3RhcmdldFJheX1nZXRHcmlwU3BhY2UoKXtyZXR1cm4gdGhpcy5fZ3JpcD09PW51bGwmJih0aGlzLl9ncmlwPW5ldyAkZCx0aGlzLl9ncmlwLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5fZ3JpcC52aXNpYmxlPSExLHRoaXMuX2dyaXAuaGFzTGluZWFyVmVsb2NpdHk9ITEsdGhpcy5fZ3JpcC5saW5lYXJWZWxvY2l0eT1uZXcgaix0aGlzLl9ncmlwLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMSx0aGlzLl9ncmlwLmFuZ3VsYXJWZWxvY2l0eT1uZXcgaiksdGhpcy5fZ3JpcH1kaXNwYXRjaEV2ZW50KHQpe3JldHVybiB0aGlzLl90YXJnZXRSYXkhPT1udWxsJiZ0aGlzLl90YXJnZXRSYXkuZGlzcGF0Y2hFdmVudCh0KSx0aGlzLl9ncmlwIT09bnVsbCYmdGhpcy5fZ3JpcC5kaXNwYXRjaEV2ZW50KHQpLHRoaXMuX2hhbmQhPT1udWxsJiZ0aGlzLl9oYW5kLmRpc3BhdGNoRXZlbnQodCksdGhpc31kaXNjb25uZWN0KHQpe3JldHVybiB0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc2Nvbm5lY3RlZCIsZGF0YTp0fSksdGhpcy5fdGFyZ2V0UmF5IT09bnVsbCYmKHRoaXMuX3RhcmdldFJheS52aXNpYmxlPSExKSx0aGlzLl9ncmlwIT09bnVsbCYmKHRoaXMuX2dyaXAudmlzaWJsZT0hMSksdGhpcy5faGFuZCE9PW51bGwmJih0aGlzLl9oYW5kLnZpc2libGU9ITEpLHRoaXN9dXBkYXRlKHQscixuKXtsZXQgaT1udWxsLG89bnVsbCxhPW51bGwscz10aGlzLl90YXJnZXRSYXksbD10aGlzLl9ncmlwLGM9dGhpcy5faGFuZDtpZih0JiZyLnNlc3Npb24udmlzaWJpbGl0eVN0YXRlIT09InZpc2libGUtYmx1cnJlZCIpaWYocyE9PW51bGwmJihpPXIuZ2V0UG9zZSh0LnRhcmdldFJheVNwYWNlLG4pLGkhPT1udWxsJiYocy5tYXRyaXguZnJvbUFycmF5KGkudHJhbnNmb3JtLm1hdHJpeCkscy5tYXRyaXguZGVjb21wb3NlKHMucG9zaXRpb24scy5yb3RhdGlvbixzLnNjYWxlKSxpLmxpbmVhclZlbG9jaXR5PyhzLmhhc0xpbmVhclZlbG9jaXR5PSEwLHMubGluZWFyVmVsb2NpdHkuY29weShpLmxpbmVhclZlbG9jaXR5KSk6cy5oYXNMaW5lYXJWZWxvY2l0eT0hMSxpLmFuZ3VsYXJWZWxvY2l0eT8ocy5oYXNBbmd1bGFyVmVsb2NpdHk9ITAscy5hbmd1bGFyVmVsb2NpdHkuY29weShpLmFuZ3VsYXJWZWxvY2l0eSkpOnMuaGFzQW5ndWxhclZlbG9jaXR5PSExLHRoaXMuZGlzcGF0Y2hFdmVudChrZ3IpKSksYyYmdC5oYW5kKXthPSEwO2ZvcihsZXQgZyBvZiB0LmhhbmQudmFsdWVzKCkpe2xldCBfPXIuZ2V0Sm9pbnRQb3NlKGcsbik7aWYoYy5qb2ludHNbZy5qb2ludE5hbWVdPT09dm9pZCAwKXtsZXQgeD1uZXcgJGQ7eC5tYXRyaXhBdXRvVXBkYXRlPSExLHgudmlzaWJsZT0hMSxjLmpvaW50c1tnLmpvaW50TmFtZV09eCxjLmFkZCh4KX1sZXQgeT1jLmpvaW50c1tnLmpvaW50TmFtZV07XyE9PW51bGwmJih5Lm1hdHJpeC5mcm9tQXJyYXkoXy50cmFuc2Zvcm0ubWF0cml4KSx5Lm1hdHJpeC5kZWNvbXBvc2UoeS5wb3NpdGlvbix5LnJvdGF0aW9uLHkuc2NhbGUpLHkuam9pbnRSYWRpdXM9Xy5yYWRpdXMpLHkudmlzaWJsZT1fIT09bnVsbH1sZXQgdT1jLmpvaW50c1siaW5kZXgtZmluZ2VyLXRpcCJdLGg9Yy5qb2ludHNbInRodW1iLXRpcCJdLGY9dS5wb3NpdGlvbi5kaXN0YW5jZVRvKGgucG9zaXRpb24pLHA9LjAyLGQ9LjAwNTtjLmlucHV0U3RhdGUucGluY2hpbmcmJmY+cCtkPyhjLmlucHV0U3RhdGUucGluY2hpbmc9ITEsdGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJwaW5jaGVuZCIsaGFuZGVkbmVzczp0LmhhbmRlZG5lc3MsdGFyZ2V0OnRoaXN9KSk6IWMuaW5wdXRTdGF0ZS5waW5jaGluZyYmZjw9cC1kJiYoYy5pbnB1dFN0YXRlLnBpbmNoaW5nPSEwLHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToicGluY2hzdGFydCIsaGFuZGVkbmVzczp0LmhhbmRlZG5lc3MsdGFyZ2V0OnRoaXN9KSl9ZWxzZSBsIT09bnVsbCYmdC5ncmlwU3BhY2UmJihvPXIuZ2V0UG9zZSh0LmdyaXBTcGFjZSxuKSxvIT09bnVsbCYmKGwubWF0cml4LmZyb21BcnJheShvLnRyYW5zZm9ybS5tYXRyaXgpLGwubWF0cml4LmRlY29tcG9zZShsLnBvc2l0aW9uLGwucm90YXRpb24sbC5zY2FsZSksby5saW5lYXJWZWxvY2l0eT8obC5oYXNMaW5lYXJWZWxvY2l0eT0hMCxsLmxpbmVhclZlbG9jaXR5LmNvcHkoby5saW5lYXJWZWxvY2l0eSkpOmwuaGFzTGluZWFyVmVsb2NpdHk9ITEsby5hbmd1bGFyVmVsb2NpdHk/KGwuaGFzQW5ndWxhclZlbG9jaXR5PSEwLGwuYW5ndWxhclZlbG9jaXR5LmNvcHkoby5hbmd1bGFyVmVsb2NpdHkpKTpsLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMSkpO3JldHVybiBzIT09bnVsbCYmKHMudmlzaWJsZT1pIT09bnVsbCksbCE9PW51bGwmJihsLnZpc2libGU9byE9PW51bGwpLGMhPT1udWxsJiYoYy52aXNpYmxlPWEhPT1udWxsKSx0aGlzfX0sbk09Y2xhc3MgZXh0ZW5kcyB2aXtjb25zdHJ1Y3Rvcih0LHIsbixpLG8sYSxzLGwsYyx1KXtpZih1PXUhPT12b2lkIDA/dTpGMCx1IT09RjAmJnUhPT1SMSl0aHJvdyBuZXcgRXJyb3IoIkRlcHRoVGV4dHVyZSBmb3JtYXQgbXVzdCBiZSBlaXRoZXIgVEhSRUUuRGVwdGhGb3JtYXQgb3IgVEhSRUUuRGVwdGhTdGVuY2lsRm9ybWF0Iik7bj09PXZvaWQgMCYmdT09PUYwJiYobj1HMyksbj09PXZvaWQgMCYmdT09PVIxJiYobj1QMSksc3VwZXIobnVsbCxpLG8sYSxzLGwsdSxuLGMpLHRoaXMuaW1hZ2U9e3dpZHRoOnQsaGVpZ2h0OnJ9LHRoaXMubWFnRmlsdGVyPXMhPT12b2lkIDA/czpMaSx0aGlzLm1pbkZpbHRlcj1sIT09dm9pZCAwP2w6TGksdGhpcy5mbGlwWT0hMSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMX19O25NLnByb3RvdHlwZS5pc0RlcHRoVGV4dHVyZT0hMDt2YXIgZWh0PWNsYXNzIGV4dGVuZHMgcXN7Y29uc3RydWN0b3IodCxyKXtzdXBlcigpO2xldCBuPXRoaXMsaT1udWxsLG89MSxhPW51bGwscz0ibG9jYWwtZmxvb3IiLGw9dC5leHRlbnNpb25zLmhhcygiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIiksYz1udWxsLHU9bnVsbCxoPW51bGwsZj1udWxsLHA9ITEsZD1udWxsLGc9ci5nZXRDb250ZXh0QXR0cmlidXRlcygpLF89bnVsbCx5PW51bGwseD1bXSxiPW5ldyBNYXAsUz1uZXcgVWk7Uy5sYXllcnMuZW5hYmxlKDEpLFMudmlld3BvcnQ9bmV3IGVuO2xldCBDPW5ldyBVaTtDLmxheWVycy5lbmFibGUoMiksQy52aWV3cG9ydD1uZXcgZW47bGV0IFA9W1MsQ10saz1uZXcgbjY7ay5sYXllcnMuZW5hYmxlKDEpLGsubGF5ZXJzLmVuYWJsZSgyKTtsZXQgTz1udWxsLEQ9bnVsbDt0aGlzLmNhbWVyYUF1dG9VcGRhdGU9ITAsdGhpcy5lbmFibGVkPSExLHRoaXMuaXNQcmVzZW50aW5nPSExLHRoaXMuZ2V0Q29udHJvbGxlcj1mdW5jdGlvbihvdCl7bGV0IHN0PXhbb3RdO3JldHVybiBzdD09PXZvaWQgMCYmKHN0PW5ldyBxUCx4W290XT1zdCksc3QuZ2V0VGFyZ2V0UmF5U3BhY2UoKX0sdGhpcy5nZXRDb250cm9sbGVyR3JpcD1mdW5jdGlvbihvdCl7bGV0IHN0PXhbb3RdO3JldHVybiBzdD09PXZvaWQgMCYmKHN0PW5ldyBxUCx4W290XT1zdCksc3QuZ2V0R3JpcFNwYWNlKCl9LHRoaXMuZ2V0SGFuZD1mdW5jdGlvbihvdCl7bGV0IHN0PXhbb3RdO3JldHVybiBzdD09PXZvaWQgMCYmKHN0PW5ldyBxUCx4W290XT1zdCksc3QuZ2V0SGFuZFNwYWNlKCl9O2Z1bmN0aW9uIEIob3Qpe2xldCBzdD1iLmdldChvdC5pbnB1dFNvdXJjZSk7c3QmJnN0LmRpc3BhdGNoRXZlbnQoe3R5cGU6b3QudHlwZSxkYXRhOm90LmlucHV0U291cmNlfSl9ZnVuY3Rpb24gSSgpe2IuZm9yRWFjaChmdW5jdGlvbihvdCxzdCl7b3QuZGlzY29ubmVjdChzdCl9KSxiLmNsZWFyKCksTz1udWxsLEQ9bnVsbCx0LnNldFJlbmRlclRhcmdldChfKSxmPW51bGwsaD1udWxsLHU9bnVsbCxpPW51bGwseT1udWxsLHJ0LnN0b3AoKSxuLmlzUHJlc2VudGluZz0hMSxuLmRpc3BhdGNoRXZlbnQoe3R5cGU6InNlc3Npb25lbmQifSl9dGhpcy5zZXRGcmFtZWJ1ZmZlclNjYWxlRmFjdG9yPWZ1bmN0aW9uKG90KXtvPW90LG4uaXNQcmVzZW50aW5nPT09ITAmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViWFJNYW5hZ2VyOiBDYW5ub3QgY2hhbmdlIGZyYW1lYnVmZmVyIHNjYWxlIHdoaWxlIHByZXNlbnRpbmcuIil9LHRoaXMuc2V0UmVmZXJlbmNlU3BhY2VUeXBlPWZ1bmN0aW9uKG90KXtzPW90LG4uaXNQcmVzZW50aW5nPT09ITAmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViWFJNYW5hZ2VyOiBDYW5ub3QgY2hhbmdlIHJlZmVyZW5jZSBzcGFjZSB0eXBlIHdoaWxlIHByZXNlbnRpbmcuIil9LHRoaXMuZ2V0UmVmZXJlbmNlU3BhY2U9ZnVuY3Rpb24oKXtyZXR1cm4gYX0sdGhpcy5nZXRCYXNlTGF5ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gaCE9PW51bGw/aDpmfSx0aGlzLmdldEJpbmRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdX0sdGhpcy5nZXRGcmFtZT1mdW5jdGlvbigpe3JldHVybiBkfSx0aGlzLmdldFNlc3Npb249ZnVuY3Rpb24oKXtyZXR1cm4gaX0sdGhpcy5zZXRTZXNzaW9uPWZ1bmN0aW9uKG90KXtyZXR1cm4gUmkodGhpcyxudWxsLGZ1bmN0aW9uKigpe2lmKGk9b3QsaSE9PW51bGwpe2lmKF89dC5nZXRSZW5kZXJUYXJnZXQoKSxpLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdCIsQiksaS5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RzdGFydCIsQiksaS5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RlbmQiLEIpLGkuYWRkRXZlbnRMaXN0ZW5lcigic3F1ZWV6ZSIsQiksaS5hZGRFdmVudExpc3RlbmVyKCJzcXVlZXplc3RhcnQiLEIpLGkuYWRkRXZlbnRMaXN0ZW5lcigic3F1ZWV6ZWVuZCIsQiksaS5hZGRFdmVudExpc3RlbmVyKCJlbmQiLEkpLGkuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXRzb3VyY2VzY2hhbmdlIixMKSxnLnhyQ29tcGF0aWJsZSE9PSEwJiYoeWllbGQgci5tYWtlWFJDb21wYXRpYmxlKCkpLGkucmVuZGVyU3RhdGUubGF5ZXJzPT09dm9pZCAwfHx0LmNhcGFiaWxpdGllcy5pc1dlYkdMMj09PSExKXtsZXQgc3Q9e2FudGlhbGlhczppLnJlbmRlclN0YXRlLmxheWVycz09PXZvaWQgMD9nLmFudGlhbGlhczohMCxhbHBoYTpnLmFscGhhLGRlcHRoOmcuZGVwdGgsc3RlbmNpbDpnLnN0ZW5jaWwsZnJhbWVidWZmZXJTY2FsZUZhY3RvcjpvfTtmPW5ldyBYUldlYkdMTGF5ZXIoaSxyLHN0KSxpLnVwZGF0ZVJlbmRlclN0YXRlKHtiYXNlTGF5ZXI6Zn0pLHk9bmV3IGhzKGYuZnJhbWVidWZmZXJXaWR0aCxmLmZyYW1lYnVmZmVySGVpZ2h0LHtmb3JtYXQ6UW8sdHlwZTpKZCxlbmNvZGluZzp0Lm91dHB1dEVuY29kaW5nfSl9ZWxzZXtwPWcuYW50aWFsaWFzO2xldCBzdD1udWxsLFN0PW51bGwsYnQ9bnVsbDtnLmRlcHRoJiYoYnQ9Zy5zdGVuY2lsPzM1MDU2OjMzMTkwLHN0PWcuc3RlbmNpbD9SMTpGMCxTdD1nLnN0ZW5jaWw/UDE6RzMpO2xldCBNdD17Y29sb3JGb3JtYXQ6dC5vdXRwdXRFbmNvZGluZz09PVluPzM1OTA3OjMyODU2LGRlcHRoRm9ybWF0OmJ0LHNjYWxlRmFjdG9yOm99O3U9bmV3IFhSV2ViR0xCaW5kaW5nKGksciksaD11LmNyZWF0ZVByb2plY3Rpb25MYXllcihNdCksaS51cGRhdGVSZW5kZXJTdGF0ZSh7bGF5ZXJzOltoXX0pLHA/eT1uZXcgajMoaC50ZXh0dXJlV2lkdGgsaC50ZXh0dXJlSGVpZ2h0LHtmb3JtYXQ6UW8sdHlwZTpKZCxkZXB0aFRleHR1cmU6bmV3IG5NKGgudGV4dHVyZVdpZHRoLGgudGV4dHVyZUhlaWdodCxTdCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCxzdCksc3RlbmNpbEJ1ZmZlcjpnLnN0ZW5jaWwsaWdub3JlRGVwdGg6aC5pZ25vcmVEZXB0aFZhbHVlcyx1c2VSZW5kZXJUb1RleHR1cmU6bCxlbmNvZGluZzp0Lm91dHB1dEVuY29kaW5nfSk6eT1uZXcgaHMoaC50ZXh0dXJlV2lkdGgsaC50ZXh0dXJlSGVpZ2h0LHtmb3JtYXQ6UW8sdHlwZTpKZCxkZXB0aFRleHR1cmU6bmV3IG5NKGgudGV4dHVyZVdpZHRoLGgudGV4dHVyZUhlaWdodCxTdCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCxzdCksc3RlbmNpbEJ1ZmZlcjpnLnN0ZW5jaWwsaWdub3JlRGVwdGg6aC5pZ25vcmVEZXB0aFZhbHVlcyxlbmNvZGluZzp0Lm91dHB1dEVuY29kaW5nfSl9eS5pc1hSUmVuZGVyVGFyZ2V0PSEwLHRoaXMuc2V0Rm92ZWF0aW9uKDEpLGE9eWllbGQgaS5yZXF1ZXN0UmVmZXJlbmNlU3BhY2UocykscnQuc2V0Q29udGV4dChpKSxydC5zdGFydCgpLG4uaXNQcmVzZW50aW5nPSEwLG4uZGlzcGF0Y2hFdmVudCh7dHlwZToic2Vzc2lvbnN0YXJ0In0pfX0pfTtmdW5jdGlvbiBMKG90KXtsZXQgc3Q9aS5pbnB1dFNvdXJjZXM7Zm9yKGxldCBTdD0wO1N0PHgubGVuZ3RoO1N0KyspYi5zZXQoc3RbU3RdLHhbU3RdKTtmb3IobGV0IFN0PTA7U3Q8b3QucmVtb3ZlZC5sZW5ndGg7U3QrKyl7bGV0IGJ0PW90LnJlbW92ZWRbU3RdLE10PWIuZ2V0KGJ0KTtNdCYmKE10LmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc2Nvbm5lY3RlZCIsZGF0YTpidH0pLGIuZGVsZXRlKGJ0KSl9Zm9yKGxldCBTdD0wO1N0PG90LmFkZGVkLmxlbmd0aDtTdCsrKXtsZXQgYnQ9b3QuYWRkZWRbU3RdLE10PWIuZ2V0KGJ0KTtNdCYmTXQuZGlzcGF0Y2hFdmVudCh7dHlwZToiY29ubmVjdGVkIixkYXRhOmJ0fSl9fWxldCBSPW5ldyBqLEY9bmV3IGo7ZnVuY3Rpb24geihvdCxzdCxTdCl7Ui5zZXRGcm9tTWF0cml4UG9zaXRpb24oc3QubWF0cml4V29ybGQpLEYuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFN0Lm1hdHJpeFdvcmxkKTtsZXQgYnQ9Ui5kaXN0YW5jZVRvKEYpLE10PXN0LnByb2plY3Rpb25NYXRyaXguZWxlbWVudHMsbHQ9U3QucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50cyxLdD1NdFsxNF0vKE10WzEwXS0xKSxfdD1NdFsxNF0vKE10WzEwXSsxKSxjdD0oTXRbOV0rMSkvTXRbNV0sWD0oTXRbOV0tMSkvTXRbNV0sZXQ9KE10WzhdLTEpL010WzBdLGR0PShsdFs4XSsxKS9sdFswXSxxPUt0KmV0LHB0PUt0KmR0LGh0PWJ0LygtZXQrZHQpLHd0PWh0Ki1ldDtzdC5tYXRyaXhXb3JsZC5kZWNvbXBvc2Uob3QucG9zaXRpb24sb3QucXVhdGVybmlvbixvdC5zY2FsZSksb3QudHJhbnNsYXRlWCh3dCksb3QudHJhbnNsYXRlWihodCksb3QubWF0cml4V29ybGQuY29tcG9zZShvdC5wb3NpdGlvbixvdC5xdWF0ZXJuaW9uLG90LnNjYWxlKSxvdC5tYXRyaXhXb3JsZEludmVyc2UuY29weShvdC5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk7bGV0IGt0PUt0K2h0LGllPV90K2h0LGVlPXEtd3QsTGU9cHQrKGJ0LXd0KSxhcj1jdCpfdC9pZSprdCxmcj1YKl90L2llKmt0O290LnByb2plY3Rpb25NYXRyaXgubWFrZVBlcnNwZWN0aXZlKGVlLExlLGFyLGZyLGt0LGllKX1mdW5jdGlvbiBVKG90LHN0KXtzdD09PW51bGw/b3QubWF0cml4V29ybGQuY29weShvdC5tYXRyaXgpOm90Lm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXMoc3QubWF0cml4V29ybGQsb3QubWF0cml4KSxvdC5tYXRyaXhXb3JsZEludmVyc2UuY29weShvdC5tYXRyaXhXb3JsZCkuaW52ZXJ0KCl9dGhpcy51cGRhdGVDYW1lcmE9ZnVuY3Rpb24ob3Qpe2lmKGk9PT1udWxsKXJldHVybjtrLm5lYXI9Qy5uZWFyPVMubmVhcj1vdC5uZWFyLGsuZmFyPUMuZmFyPVMuZmFyPW90LmZhciwoTyE9PWsubmVhcnx8RCE9PWsuZmFyKSYmKGkudXBkYXRlUmVuZGVyU3RhdGUoe2RlcHRoTmVhcjprLm5lYXIsZGVwdGhGYXI6ay5mYXJ9KSxPPWsubmVhcixEPWsuZmFyKTtsZXQgc3Q9b3QucGFyZW50LFN0PWsuY2FtZXJhcztVKGssc3QpO2ZvcihsZXQgTXQ9MDtNdDxTdC5sZW5ndGg7TXQrKylVKFN0W010XSxzdCk7ay5tYXRyaXhXb3JsZC5kZWNvbXBvc2Uoay5wb3NpdGlvbixrLnF1YXRlcm5pb24say5zY2FsZSksb3QucG9zaXRpb24uY29weShrLnBvc2l0aW9uKSxvdC5xdWF0ZXJuaW9uLmNvcHkoay5xdWF0ZXJuaW9uKSxvdC5zY2FsZS5jb3B5KGsuc2NhbGUpLG90Lm1hdHJpeC5jb3B5KGsubWF0cml4KSxvdC5tYXRyaXhXb3JsZC5jb3B5KGsubWF0cml4V29ybGQpO2xldCBidD1vdC5jaGlsZHJlbjtmb3IobGV0IE10PTAsbHQ9YnQubGVuZ3RoO010PGx0O010KyspYnRbTXRdLnVwZGF0ZU1hdHJpeFdvcmxkKCEwKTtTdC5sZW5ndGg9PT0yP3ooayxTLEMpOmsucHJvamVjdGlvbk1hdHJpeC5jb3B5KFMucHJvamVjdGlvbk1hdHJpeCl9LHRoaXMuZ2V0Q2FtZXJhPWZ1bmN0aW9uKCl7cmV0dXJuIGt9LHRoaXMuZ2V0Rm92ZWF0aW9uPWZ1bmN0aW9uKCl7aWYoaCE9PW51bGwpcmV0dXJuIGguZml4ZWRGb3ZlYXRpb247aWYoZiE9PW51bGwpcmV0dXJuIGYuZml4ZWRGb3ZlYXRpb259LHRoaXMuc2V0Rm92ZWF0aW9uPWZ1bmN0aW9uKG90KXtoIT09bnVsbCYmKGguZml4ZWRGb3ZlYXRpb249b3QpLGYhPT1udWxsJiZmLmZpeGVkRm92ZWF0aW9uIT09dm9pZCAwJiYoZi5maXhlZEZvdmVhdGlvbj1vdCl9O2xldCBXPW51bGw7ZnVuY3Rpb24gWihvdCxzdCl7aWYoYz1zdC5nZXRWaWV3ZXJQb3NlKGEpLGQ9c3QsYyE9PW51bGwpe2xldCBidD1jLnZpZXdzO2YhPT1udWxsJiYodC5zZXRSZW5kZXJUYXJnZXRGcmFtZWJ1ZmZlcih5LGYuZnJhbWVidWZmZXIpLHQuc2V0UmVuZGVyVGFyZ2V0KHkpKTtsZXQgTXQ9ITE7YnQubGVuZ3RoIT09ay5jYW1lcmFzLmxlbmd0aCYmKGsuY2FtZXJhcy5sZW5ndGg9MCxNdD0hMCk7Zm9yKGxldCBsdD0wO2x0PGJ0Lmxlbmd0aDtsdCsrKXtsZXQgS3Q9YnRbbHRdLF90PW51bGw7aWYoZiE9PW51bGwpX3Q9Zi5nZXRWaWV3cG9ydChLdCk7ZWxzZXtsZXQgWD11LmdldFZpZXdTdWJJbWFnZShoLEt0KTtfdD1YLnZpZXdwb3J0LGx0PT09MCYmKHQuc2V0UmVuZGVyVGFyZ2V0VGV4dHVyZXMoeSxYLmNvbG9yVGV4dHVyZSxoLmlnbm9yZURlcHRoVmFsdWVzP3ZvaWQgMDpYLmRlcHRoU3RlbmNpbFRleHR1cmUpLHQuc2V0UmVuZGVyVGFyZ2V0KHkpKX1sZXQgY3Q9UFtsdF07Y3QubWF0cml4LmZyb21BcnJheShLdC50cmFuc2Zvcm0ubWF0cml4KSxjdC5wcm9qZWN0aW9uTWF0cml4LmZyb21BcnJheShLdC5wcm9qZWN0aW9uTWF0cml4KSxjdC52aWV3cG9ydC5zZXQoX3QueCxfdC55LF90LndpZHRoLF90LmhlaWdodCksbHQ9PT0wJiZrLm1hdHJpeC5jb3B5KGN0Lm1hdHJpeCksTXQ9PT0hMCYmay5jYW1lcmFzLnB1c2goY3QpfX1sZXQgU3Q9aS5pbnB1dFNvdXJjZXM7Zm9yKGxldCBidD0wO2J0PHgubGVuZ3RoO2J0Kyspe2xldCBNdD14W2J0XSxsdD1TdFtidF07TXQudXBkYXRlKGx0LHN0LGEpfVcmJlcob3Qsc3QpLGQ9bnVsbH1sZXQgcnQ9bmV3IFVmZTtydC5zZXRBbmltYXRpb25Mb29wKFopLHRoaXMuc2V0QW5pbWF0aW9uTG9vcD1mdW5jdGlvbihvdCl7Vz1vdH0sdGhpcy5kaXNwb3NlPWZ1bmN0aW9uKCl7fX19O2Z1bmN0aW9uIFJncihlKXtmdW5jdGlvbiB0KHkseCl7eS5mb2dDb2xvci52YWx1ZS5jb3B5KHguY29sb3IpLHguaXNGb2c/KHkuZm9nTmVhci52YWx1ZT14Lm5lYXIseS5mb2dGYXIudmFsdWU9eC5mYXIpOnguaXNGb2dFeHAyJiYoeS5mb2dEZW5zaXR5LnZhbHVlPXguZGVuc2l0eSl9ZnVuY3Rpb24gcih5LHgsYixTLEMpe3guaXNNZXNoQmFzaWNNYXRlcmlhbD9uKHkseCk6eC5pc01lc2hMYW1iZXJ0TWF0ZXJpYWw/KG4oeSx4KSxsKHkseCkpOnguaXNNZXNoVG9vbk1hdGVyaWFsPyhuKHkseCksdSh5LHgpKTp4LmlzTWVzaFBob25nTWF0ZXJpYWw/KG4oeSx4KSxjKHkseCkpOnguaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD8obih5LHgpLHguaXNNZXNoUGh5c2ljYWxNYXRlcmlhbD9mKHkseCxDKTpoKHkseCkpOnguaXNNZXNoTWF0Y2FwTWF0ZXJpYWw/KG4oeSx4KSxwKHkseCkpOnguaXNNZXNoRGVwdGhNYXRlcmlhbD8obih5LHgpLGQoeSx4KSk6eC5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPyhuKHkseCksZyh5LHgpKTp4LmlzTWVzaE5vcm1hbE1hdGVyaWFsPyhuKHkseCksXyh5LHgpKTp4LmlzTGluZUJhc2ljTWF0ZXJpYWw/KGkoeSx4KSx4LmlzTGluZURhc2hlZE1hdGVyaWFsJiZvKHkseCkpOnguaXNQb2ludHNNYXRlcmlhbD9hKHkseCxiLFMpOnguaXNTcHJpdGVNYXRlcmlhbD9zKHkseCk6eC5pc1NoYWRvd01hdGVyaWFsPyh5LmNvbG9yLnZhbHVlLmNvcHkoeC5jb2xvcikseS5vcGFjaXR5LnZhbHVlPXgub3BhY2l0eSk6eC5pc1NoYWRlck1hdGVyaWFsJiYoeC51bmlmb3Jtc05lZWRVcGRhdGU9ITEpfWZ1bmN0aW9uIG4oeSx4KXt5Lm9wYWNpdHkudmFsdWU9eC5vcGFjaXR5LHguY29sb3ImJnkuZGlmZnVzZS52YWx1ZS5jb3B5KHguY29sb3IpLHguZW1pc3NpdmUmJnkuZW1pc3NpdmUudmFsdWUuY29weSh4LmVtaXNzaXZlKS5tdWx0aXBseVNjYWxhcih4LmVtaXNzaXZlSW50ZW5zaXR5KSx4Lm1hcCYmKHkubWFwLnZhbHVlPXgubWFwKSx4LmFscGhhTWFwJiYoeS5hbHBoYU1hcC52YWx1ZT14LmFscGhhTWFwKSx4LnNwZWN1bGFyTWFwJiYoeS5zcGVjdWxhck1hcC52YWx1ZT14LnNwZWN1bGFyTWFwKSx4LmFscGhhVGVzdD4wJiYoeS5hbHBoYVRlc3QudmFsdWU9eC5hbHBoYVRlc3QpO2xldCBiPWUuZ2V0KHgpLmVudk1hcDtiJiYoeS5lbnZNYXAudmFsdWU9Yix5LmZsaXBFbnZNYXAudmFsdWU9Yi5pc0N1YmVUZXh0dXJlJiZiLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT09PSExPy0xOjEseS5yZWZsZWN0aXZpdHkudmFsdWU9eC5yZWZsZWN0aXZpdHkseS5pb3IudmFsdWU9eC5pb3IseS5yZWZyYWN0aW9uUmF0aW8udmFsdWU9eC5yZWZyYWN0aW9uUmF0aW8pLHgubGlnaHRNYXAmJih5LmxpZ2h0TWFwLnZhbHVlPXgubGlnaHRNYXAseS5saWdodE1hcEludGVuc2l0eS52YWx1ZT14LmxpZ2h0TWFwSW50ZW5zaXR5KSx4LmFvTWFwJiYoeS5hb01hcC52YWx1ZT14LmFvTWFwLHkuYW9NYXBJbnRlbnNpdHkudmFsdWU9eC5hb01hcEludGVuc2l0eSk7bGV0IFM7eC5tYXA/Uz14Lm1hcDp4LnNwZWN1bGFyTWFwP1M9eC5zcGVjdWxhck1hcDp4LmRpc3BsYWNlbWVudE1hcD9TPXguZGlzcGxhY2VtZW50TWFwOngubm9ybWFsTWFwP1M9eC5ub3JtYWxNYXA6eC5idW1wTWFwP1M9eC5idW1wTWFwOngucm91Z2huZXNzTWFwP1M9eC5yb3VnaG5lc3NNYXA6eC5tZXRhbG5lc3NNYXA/Uz14Lm1ldGFsbmVzc01hcDp4LmFscGhhTWFwP1M9eC5hbHBoYU1hcDp4LmVtaXNzaXZlTWFwP1M9eC5lbWlzc2l2ZU1hcDp4LmNsZWFyY29hdE1hcD9TPXguY2xlYXJjb2F0TWFwOnguY2xlYXJjb2F0Tm9ybWFsTWFwP1M9eC5jbGVhcmNvYXROb3JtYWxNYXA6eC5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/Uz14LmNsZWFyY29hdFJvdWdobmVzc01hcDp4LnNwZWN1bGFySW50ZW5zaXR5TWFwP1M9eC5zcGVjdWxhckludGVuc2l0eU1hcDp4LnNwZWN1bGFyQ29sb3JNYXA/Uz14LnNwZWN1bGFyQ29sb3JNYXA6eC50cmFuc21pc3Npb25NYXA/Uz14LnRyYW5zbWlzc2lvbk1hcDp4LnRoaWNrbmVzc01hcD9TPXgudGhpY2tuZXNzTWFwOnguc2hlZW5Db2xvck1hcD9TPXguc2hlZW5Db2xvck1hcDp4LnNoZWVuUm91Z2huZXNzTWFwJiYoUz14LnNoZWVuUm91Z2huZXNzTWFwKSxTIT09dm9pZCAwJiYoUy5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYoUz1TLnRleHR1cmUpLFMubWF0cml4QXV0b1VwZGF0ZT09PSEwJiZTLnVwZGF0ZU1hdHJpeCgpLHkudXZUcmFuc2Zvcm0udmFsdWUuY29weShTLm1hdHJpeCkpO2xldCBDO3guYW9NYXA/Qz14LmFvTWFwOngubGlnaHRNYXAmJihDPXgubGlnaHRNYXApLEMhPT12b2lkIDAmJihDLmlzV2ViR0xSZW5kZXJUYXJnZXQmJihDPUMudGV4dHVyZSksQy5tYXRyaXhBdXRvVXBkYXRlPT09ITAmJkMudXBkYXRlTWF0cml4KCkseS51djJUcmFuc2Zvcm0udmFsdWUuY29weShDLm1hdHJpeCkpfWZ1bmN0aW9uIGkoeSx4KXt5LmRpZmZ1c2UudmFsdWUuY29weSh4LmNvbG9yKSx5Lm9wYWNpdHkudmFsdWU9eC5vcGFjaXR5fWZ1bmN0aW9uIG8oeSx4KXt5LmRhc2hTaXplLnZhbHVlPXguZGFzaFNpemUseS50b3RhbFNpemUudmFsdWU9eC5kYXNoU2l6ZSt4LmdhcFNpemUseS5zY2FsZS52YWx1ZT14LnNjYWxlfWZ1bmN0aW9uIGEoeSx4LGIsUyl7eS5kaWZmdXNlLnZhbHVlLmNvcHkoeC5jb2xvcikseS5vcGFjaXR5LnZhbHVlPXgub3BhY2l0eSx5LnNpemUudmFsdWU9eC5zaXplKmIseS5zY2FsZS52YWx1ZT1TKi41LHgubWFwJiYoeS5tYXAudmFsdWU9eC5tYXApLHguYWxwaGFNYXAmJih5LmFscGhhTWFwLnZhbHVlPXguYWxwaGFNYXApLHguYWxwaGFUZXN0PjAmJih5LmFscGhhVGVzdC52YWx1ZT14LmFscGhhVGVzdCk7bGV0IEM7eC5tYXA/Qz14Lm1hcDp4LmFscGhhTWFwJiYoQz14LmFscGhhTWFwKSxDIT09dm9pZCAwJiYoQy5tYXRyaXhBdXRvVXBkYXRlPT09ITAmJkMudXBkYXRlTWF0cml4KCkseS51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KEMubWF0cml4KSl9ZnVuY3Rpb24gcyh5LHgpe3kuZGlmZnVzZS52YWx1ZS5jb3B5KHguY29sb3IpLHkub3BhY2l0eS52YWx1ZT14Lm9wYWNpdHkseS5yb3RhdGlvbi52YWx1ZT14LnJvdGF0aW9uLHgubWFwJiYoeS5tYXAudmFsdWU9eC5tYXApLHguYWxwaGFNYXAmJih5LmFscGhhTWFwLnZhbHVlPXguYWxwaGFNYXApLHguYWxwaGFUZXN0PjAmJih5LmFscGhhVGVzdC52YWx1ZT14LmFscGhhVGVzdCk7bGV0IGI7eC5tYXA/Yj14Lm1hcDp4LmFscGhhTWFwJiYoYj14LmFscGhhTWFwKSxiIT09dm9pZCAwJiYoYi5tYXRyaXhBdXRvVXBkYXRlPT09ITAmJmIudXBkYXRlTWF0cml4KCkseS51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KGIubWF0cml4KSl9ZnVuY3Rpb24gbCh5LHgpe3guZW1pc3NpdmVNYXAmJih5LmVtaXNzaXZlTWFwLnZhbHVlPXguZW1pc3NpdmVNYXApfWZ1bmN0aW9uIGMoeSx4KXt5LnNwZWN1bGFyLnZhbHVlLmNvcHkoeC5zcGVjdWxhcikseS5zaGluaW5lc3MudmFsdWU9TWF0aC5tYXgoeC5zaGluaW5lc3MsMWUtNCkseC5lbWlzc2l2ZU1hcCYmKHkuZW1pc3NpdmVNYXAudmFsdWU9eC5lbWlzc2l2ZU1hcCkseC5idW1wTWFwJiYoeS5idW1wTWFwLnZhbHVlPXguYnVtcE1hcCx5LmJ1bXBTY2FsZS52YWx1ZT14LmJ1bXBTY2FsZSx4LnNpZGU9PT1JaSYmKHkuYnVtcFNjYWxlLnZhbHVlKj0tMSkpLHgubm9ybWFsTWFwJiYoeS5ub3JtYWxNYXAudmFsdWU9eC5ub3JtYWxNYXAseS5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KHgubm9ybWFsU2NhbGUpLHguc2lkZT09PUlpJiZ5Lm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSx4LmRpc3BsYWNlbWVudE1hcCYmKHkuZGlzcGxhY2VtZW50TWFwLnZhbHVlPXguZGlzcGxhY2VtZW50TWFwLHkuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eC5kaXNwbGFjZW1lbnRTY2FsZSx5LmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eC5kaXNwbGFjZW1lbnRCaWFzKX1mdW5jdGlvbiB1KHkseCl7eC5ncmFkaWVudE1hcCYmKHkuZ3JhZGllbnRNYXAudmFsdWU9eC5ncmFkaWVudE1hcCkseC5lbWlzc2l2ZU1hcCYmKHkuZW1pc3NpdmVNYXAudmFsdWU9eC5lbWlzc2l2ZU1hcCkseC5idW1wTWFwJiYoeS5idW1wTWFwLnZhbHVlPXguYnVtcE1hcCx5LmJ1bXBTY2FsZS52YWx1ZT14LmJ1bXBTY2FsZSx4LnNpZGU9PT1JaSYmKHkuYnVtcFNjYWxlLnZhbHVlKj0tMSkpLHgubm9ybWFsTWFwJiYoeS5ub3JtYWxNYXAudmFsdWU9eC5ub3JtYWxNYXAseS5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KHgubm9ybWFsU2NhbGUpLHguc2lkZT09PUlpJiZ5Lm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSx4LmRpc3BsYWNlbWVudE1hcCYmKHkuZGlzcGxhY2VtZW50TWFwLnZhbHVlPXguZGlzcGxhY2VtZW50TWFwLHkuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eC5kaXNwbGFjZW1lbnRTY2FsZSx5LmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eC5kaXNwbGFjZW1lbnRCaWFzKX1mdW5jdGlvbiBoKHkseCl7eS5yb3VnaG5lc3MudmFsdWU9eC5yb3VnaG5lc3MseS5tZXRhbG5lc3MudmFsdWU9eC5tZXRhbG5lc3MseC5yb3VnaG5lc3NNYXAmJih5LnJvdWdobmVzc01hcC52YWx1ZT14LnJvdWdobmVzc01hcCkseC5tZXRhbG5lc3NNYXAmJih5Lm1ldGFsbmVzc01hcC52YWx1ZT14Lm1ldGFsbmVzc01hcCkseC5lbWlzc2l2ZU1hcCYmKHkuZW1pc3NpdmVNYXAudmFsdWU9eC5lbWlzc2l2ZU1hcCkseC5idW1wTWFwJiYoeS5idW1wTWFwLnZhbHVlPXguYnVtcE1hcCx5LmJ1bXBTY2FsZS52YWx1ZT14LmJ1bXBTY2FsZSx4LnNpZGU9PT1JaSYmKHkuYnVtcFNjYWxlLnZhbHVlKj0tMSkpLHgubm9ybWFsTWFwJiYoeS5ub3JtYWxNYXAudmFsdWU9eC5ub3JtYWxNYXAseS5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KHgubm9ybWFsU2NhbGUpLHguc2lkZT09PUlpJiZ5Lm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSx4LmRpc3BsYWNlbWVudE1hcCYmKHkuZGlzcGxhY2VtZW50TWFwLnZhbHVlPXguZGlzcGxhY2VtZW50TWFwLHkuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eC5kaXNwbGFjZW1lbnRTY2FsZSx5LmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eC5kaXNwbGFjZW1lbnRCaWFzKSxlLmdldCh4KS5lbnZNYXAmJih5LmVudk1hcEludGVuc2l0eS52YWx1ZT14LmVudk1hcEludGVuc2l0eSl9ZnVuY3Rpb24gZih5LHgsYil7aCh5LHgpLHkuaW9yLnZhbHVlPXguaW9yLHguc2hlZW4+MCYmKHkuc2hlZW5Db2xvci52YWx1ZS5jb3B5KHguc2hlZW5Db2xvcikubXVsdGlwbHlTY2FsYXIoeC5zaGVlbikseS5zaGVlblJvdWdobmVzcy52YWx1ZT14LnNoZWVuUm91Z2huZXNzLHguc2hlZW5Db2xvck1hcCYmKHkuc2hlZW5Db2xvck1hcC52YWx1ZT14LnNoZWVuQ29sb3JNYXApLHguc2hlZW5Sb3VnaG5lc3NNYXAmJih5LnNoZWVuUm91Z2huZXNzTWFwLnZhbHVlPXguc2hlZW5Sb3VnaG5lc3NNYXApKSx4LmNsZWFyY29hdD4wJiYoeS5jbGVhcmNvYXQudmFsdWU9eC5jbGVhcmNvYXQseS5jbGVhcmNvYXRSb3VnaG5lc3MudmFsdWU9eC5jbGVhcmNvYXRSb3VnaG5lc3MseC5jbGVhcmNvYXRNYXAmJih5LmNsZWFyY29hdE1hcC52YWx1ZT14LmNsZWFyY29hdE1hcCkseC5jbGVhcmNvYXRSb3VnaG5lc3NNYXAmJih5LmNsZWFyY29hdFJvdWdobmVzc01hcC52YWx1ZT14LmNsZWFyY29hdFJvdWdobmVzc01hcCkseC5jbGVhcmNvYXROb3JtYWxNYXAmJih5LmNsZWFyY29hdE5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5jbGVhcmNvYXROb3JtYWxTY2FsZSkseS5jbGVhcmNvYXROb3JtYWxNYXAudmFsdWU9eC5jbGVhcmNvYXROb3JtYWxNYXAseC5zaWRlPT09SWkmJnkuY2xlYXJjb2F0Tm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpKSx4LnRyYW5zbWlzc2lvbj4wJiYoeS50cmFuc21pc3Npb24udmFsdWU9eC50cmFuc21pc3Npb24seS50cmFuc21pc3Npb25TYW1wbGVyTWFwLnZhbHVlPWIudGV4dHVyZSx5LnRyYW5zbWlzc2lvblNhbXBsZXJTaXplLnZhbHVlLnNldChiLndpZHRoLGIuaGVpZ2h0KSx4LnRyYW5zbWlzc2lvbk1hcCYmKHkudHJhbnNtaXNzaW9uTWFwLnZhbHVlPXgudHJhbnNtaXNzaW9uTWFwKSx5LnRoaWNrbmVzcy52YWx1ZT14LnRoaWNrbmVzcyx4LnRoaWNrbmVzc01hcCYmKHkudGhpY2tuZXNzTWFwLnZhbHVlPXgudGhpY2tuZXNzTWFwKSx5LmF0dGVudWF0aW9uRGlzdGFuY2UudmFsdWU9eC5hdHRlbnVhdGlvbkRpc3RhbmNlLHkuYXR0ZW51YXRpb25Db2xvci52YWx1ZS5jb3B5KHguYXR0ZW51YXRpb25Db2xvcikpLHkuc3BlY3VsYXJJbnRlbnNpdHkudmFsdWU9eC5zcGVjdWxhckludGVuc2l0eSx5LnNwZWN1bGFyQ29sb3IudmFsdWUuY29weSh4LnNwZWN1bGFyQ29sb3IpLHguc3BlY3VsYXJJbnRlbnNpdHlNYXAmJih5LnNwZWN1bGFySW50ZW5zaXR5TWFwLnZhbHVlPXguc3BlY3VsYXJJbnRlbnNpdHlNYXApLHguc3BlY3VsYXJDb2xvck1hcCYmKHkuc3BlY3VsYXJDb2xvck1hcC52YWx1ZT14LnNwZWN1bGFyQ29sb3JNYXApfWZ1bmN0aW9uIHAoeSx4KXt4Lm1hdGNhcCYmKHkubWF0Y2FwLnZhbHVlPXgubWF0Y2FwKSx4LmJ1bXBNYXAmJih5LmJ1bXBNYXAudmFsdWU9eC5idW1wTWFwLHkuYnVtcFNjYWxlLnZhbHVlPXguYnVtcFNjYWxlLHguc2lkZT09PUlpJiYoeS5idW1wU2NhbGUudmFsdWUqPS0xKSkseC5ub3JtYWxNYXAmJih5Lm5vcm1hbE1hcC52YWx1ZT14Lm5vcm1hbE1hcCx5Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5ub3JtYWxTY2FsZSkseC5zaWRlPT09SWkmJnkubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHguZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpfWZ1bmN0aW9uIGQoeSx4KXt4LmRpc3BsYWNlbWVudE1hcCYmKHkuZGlzcGxhY2VtZW50TWFwLnZhbHVlPXguZGlzcGxhY2VtZW50TWFwLHkuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eC5kaXNwbGFjZW1lbnRTY2FsZSx5LmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eC5kaXNwbGFjZW1lbnRCaWFzKX1mdW5jdGlvbiBnKHkseCl7eC5kaXNwbGFjZW1lbnRNYXAmJih5LmRpc3BsYWNlbWVudE1hcC52YWx1ZT14LmRpc3BsYWNlbWVudE1hcCx5LmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXguZGlzcGxhY2VtZW50U2NhbGUseS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXguZGlzcGxhY2VtZW50QmlhcykseS5yZWZlcmVuY2VQb3NpdGlvbi52YWx1ZS5jb3B5KHgucmVmZXJlbmNlUG9zaXRpb24pLHkubmVhckRpc3RhbmNlLnZhbHVlPXgubmVhckRpc3RhbmNlLHkuZmFyRGlzdGFuY2UudmFsdWU9eC5mYXJEaXN0YW5jZX1mdW5jdGlvbiBfKHkseCl7eC5idW1wTWFwJiYoeS5idW1wTWFwLnZhbHVlPXguYnVtcE1hcCx5LmJ1bXBTY2FsZS52YWx1ZT14LmJ1bXBTY2FsZSx4LnNpZGU9PT1JaSYmKHkuYnVtcFNjYWxlLnZhbHVlKj0tMSkpLHgubm9ybWFsTWFwJiYoeS5ub3JtYWxNYXAudmFsdWU9eC5ub3JtYWxNYXAseS5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KHgubm9ybWFsU2NhbGUpLHguc2lkZT09PUlpJiZ5Lm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSx4LmRpc3BsYWNlbWVudE1hcCYmKHkuZGlzcGxhY2VtZW50TWFwLnZhbHVlPXguZGlzcGxhY2VtZW50TWFwLHkuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eC5kaXNwbGFjZW1lbnRTY2FsZSx5LmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eC5kaXNwbGFjZW1lbnRCaWFzKX1yZXR1cm57cmVmcmVzaEZvZ1VuaWZvcm1zOnQscmVmcmVzaE1hdGVyaWFsVW5pZm9ybXM6cn19ZnVuY3Rpb24gTmdyKCl7bGV0IGU9dDYoImNhbnZhcyIpO3JldHVybiBlLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixlfWZ1bmN0aW9uIHJuKGU9e30pe2xldCB0PWUuY2FudmFzIT09dm9pZCAwP2UuY2FudmFzOk5ncigpLHI9ZS5jb250ZXh0IT09dm9pZCAwP2UuY29udGV4dDpudWxsLG49ZS5hbHBoYSE9PXZvaWQgMD9lLmFscGhhOiExLGk9ZS5kZXB0aCE9PXZvaWQgMD9lLmRlcHRoOiEwLG89ZS5zdGVuY2lsIT09dm9pZCAwP2Uuc3RlbmNpbDohMCxhPWUuYW50aWFsaWFzIT09dm9pZCAwP2UuYW50aWFsaWFzOiExLHM9ZS5wcmVtdWx0aXBsaWVkQWxwaGEhPT12b2lkIDA/ZS5wcmVtdWx0aXBsaWVkQWxwaGE6ITAsbD1lLnByZXNlcnZlRHJhd2luZ0J1ZmZlciE9PXZvaWQgMD9lLnByZXNlcnZlRHJhd2luZ0J1ZmZlcjohMSxjPWUucG93ZXJQcmVmZXJlbmNlIT09dm9pZCAwP2UucG93ZXJQcmVmZXJlbmNlOiJkZWZhdWx0Iix1PWUuZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCE9PXZvaWQgMD9lLmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ6ITEsaD1udWxsLGY9bnVsbCxwPVtdLGQ9W107dGhpcy5kb21FbGVtZW50PXQsdGhpcy5kZWJ1Zz17Y2hlY2tTaGFkZXJFcnJvcnM6ITB9LHRoaXMuYXV0b0NsZWFyPSEwLHRoaXMuYXV0b0NsZWFyQ29sb3I9ITAsdGhpcy5hdXRvQ2xlYXJEZXB0aD0hMCx0aGlzLmF1dG9DbGVhclN0ZW5jaWw9ITAsdGhpcy5zb3J0T2JqZWN0cz0hMCx0aGlzLmNsaXBwaW5nUGxhbmVzPVtdLHRoaXMubG9jYWxDbGlwcGluZ0VuYWJsZWQ9ITEsdGhpcy5vdXRwdXRFbmNvZGluZz10bSx0aGlzLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzPSExLHRoaXMudG9uZU1hcHBpbmc9WmQsdGhpcy50b25lTWFwcGluZ0V4cG9zdXJlPTE7bGV0IGc9dGhpcyxfPSExLHk9MCx4PTAsYj1udWxsLFM9LTEsQz1udWxsLFA9bmV3IGVuLGs9bmV3IGVuLE89bnVsbCxEPXQud2lkdGgsQj10LmhlaWdodCxJPTEsTD1udWxsLFI9bnVsbCxGPW5ldyBlbigwLDAsRCxCKSx6PW5ldyBlbigwLDAsRCxCKSxVPSExLFc9bmV3IEQxLFo9ITEscnQ9ITEsb3Q9bnVsbCxzdD1uZXcgTWUsU3Q9bmV3IGosYnQ9e2JhY2tncm91bmQ6bnVsbCxmb2c6bnVsbCxlbnZpcm9ubWVudDpudWxsLG92ZXJyaWRlTWF0ZXJpYWw6bnVsbCxpc1NjZW5lOiEwfTtmdW5jdGlvbiBNdCgpe3JldHVybiBiPT09bnVsbD9JOjF9bGV0IGx0PXI7ZnVuY3Rpb24gS3QoSyxndCl7Zm9yKGxldCBFdD0wO0V0PEsubGVuZ3RoO0V0Kyspe2xldCB4dD1LW0V0XSxGdD10LmdldENvbnRleHQoeHQsZ3QpO2lmKEZ0IT09bnVsbClyZXR1cm4gRnR9cmV0dXJuIG51bGx9dHJ5e2xldCBLPXthbHBoYTohMCxkZXB0aDppLHN0ZW5jaWw6byxhbnRpYWxpYXM6YSxwcmVtdWx0aXBsaWVkQWxwaGE6cyxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6bCxwb3dlclByZWZlcmVuY2U6YyxmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0OnV9O2lmKCJzZXRBdHRyaWJ1dGUiaW4gdCYmdC5zZXRBdHRyaWJ1dGUoImRhdGEtZW5naW5lIixgdGhyZWUuanMgciR7alV9YCksdC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixmZSwhMSksdC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsYXQsITEpLGx0PT09bnVsbCl7bGV0IGd0PVsid2ViZ2wyIiwid2ViZ2wiLCJleHBlcmltZW50YWwtd2ViZ2wiXTtpZihnLmlzV2ViR0wxUmVuZGVyZXI9PT0hMCYmZ3Quc2hpZnQoKSxsdD1LdChndCxLKSxsdD09PW51bGwpdGhyb3cgS3QoZ3QpP25ldyBFcnJvcigiRXJyb3IgY3JlYXRpbmcgV2ViR0wgY29udGV4dCB3aXRoIHlvdXIgc2VsZWN0ZWQgYXR0cmlidXRlcy4iKTpuZXcgRXJyb3IoIkVycm9yIGNyZWF0aW5nIFdlYkdMIGNvbnRleHQuIil9bHQuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0PT09dm9pZCAwJiYobHQuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0PWZ1bmN0aW9uKCl7cmV0dXJue3JhbmdlTWluOjEscmFuZ2VNYXg6MSxwcmVjaXNpb246MX19KX1jYXRjaChLKXt0aHJvdyBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAiK0subWVzc2FnZSksS31sZXQgX3QsY3QsWCxldCxkdCxxLHB0LGh0LHd0LGt0LGllLGVlLExlLGFyLGZyLHR0LCQsSXQsJHQsaGUsVHQsYmUsbnQ7ZnVuY3Rpb24gQ3QoKXtfdD1uZXcgbm1yKGx0KSxjdD1uZXcgWmRyKGx0LF90LGUpLF90LmluaXQoY3QpLGJlPW5ldyBRZmUobHQsX3QsY3QpLFg9bmV3IElncihsdCxfdCxjdCksZXQ9bmV3IGFtcihsdCksZHQ9bmV3IHZncixxPW5ldyBMZ3IobHQsX3QsWCxkdCxjdCxiZSxldCkscHQ9bmV3IFFkcihnKSxodD1uZXcgcm1yKGcpLHd0PW5ldyBiZnIobHQsY3QpLG50PW5ldyAkZHIobHQsX3Qsd3QsY3QpLGt0PW5ldyBpbXIobHQsd3QsZXQsbnQpLGllPW5ldyB1bXIobHQsa3Qsd3QsZXQpLCR0PW5ldyBjbXIobHQsY3QscSksdHQ9bmV3IEpkcihkdCksZWU9bmV3IHlncihnLHB0LGh0LF90LGN0LG50LHR0KSxMZT1uZXcgUmdyKGR0KSxhcj1uZXcgYmdyLGZyPW5ldyBDZ3IoX3QsY3QpLEl0PW5ldyBYZHIoZyxwdCxYLGllLG4scyksJD1uZXcgSmZlKGcsaWUsY3QpLGhlPW5ldyBLZHIobHQsX3QsZXQsY3QpLFR0PW5ldyBvbXIobHQsX3QsZXQsY3QpLGV0LnByb2dyYW1zPWVlLnByb2dyYW1zLGcuY2FwYWJpbGl0aWVzPWN0LGcuZXh0ZW5zaW9ucz1fdCxnLnByb3BlcnRpZXM9ZHQsZy5yZW5kZXJMaXN0cz1hcixnLnNoYWRvd01hcD0kLGcuc3RhdGU9WCxnLmluZm89ZXR9Q3QoKTtsZXQgV3Q9bmV3IGVodChnLGx0KTt0aGlzLnhyPVd0LHRoaXMuZ2V0Q29udGV4dD1mdW5jdGlvbigpe3JldHVybiBsdH0sdGhpcy5nZXRDb250ZXh0QXR0cmlidXRlcz1mdW5jdGlvbigpe3JldHVybiBsdC5nZXRDb250ZXh0QXR0cmlidXRlcygpfSx0aGlzLmZvcmNlQ29udGV4dExvc3M9ZnVuY3Rpb24oKXtsZXQgSz1fdC5nZXQoIldFQkdMX2xvc2VfY29udGV4dCIpO0smJksubG9zZUNvbnRleHQoKX0sdGhpcy5mb3JjZUNvbnRleHRSZXN0b3JlPWZ1bmN0aW9uKCl7bGV0IEs9X3QuZ2V0KCJXRUJHTF9sb3NlX2NvbnRleHQiKTtLJiZLLnJlc3RvcmVDb250ZXh0KCl9LHRoaXMuZ2V0UGl4ZWxSYXRpbz1mdW5jdGlvbigpe3JldHVybiBJfSx0aGlzLnNldFBpeGVsUmF0aW89ZnVuY3Rpb24oSyl7SyE9PXZvaWQgMCYmKEk9Syx0aGlzLnNldFNpemUoRCxCLCExKSl9LHRoaXMuZ2V0U2l6ZT1mdW5jdGlvbihLKXtyZXR1cm4gSy5zZXQoRCxCKX0sdGhpcy5zZXRTaXplPWZ1bmN0aW9uKEssZ3QsRXQpe2lmKFd0LmlzUHJlc2VudGluZyl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBDYW4ndCBjaGFuZ2Ugc2l6ZSB3aGlsZSBWUiBkZXZpY2UgaXMgcHJlc2VudGluZy4iKTtyZXR1cm59RD1LLEI9Z3QsdC53aWR0aD1NYXRoLmZsb29yKEsqSSksdC5oZWlnaHQ9TWF0aC5mbG9vcihndCpJKSxFdCE9PSExJiYodC5zdHlsZS53aWR0aD1LKyJweCIsdC5zdHlsZS5oZWlnaHQ9Z3QrInB4IiksdGhpcy5zZXRWaWV3cG9ydCgwLDAsSyxndCl9LHRoaXMuZ2V0RHJhd2luZ0J1ZmZlclNpemU9ZnVuY3Rpb24oSyl7cmV0dXJuIEsuc2V0KEQqSSxCKkkpLmZsb29yKCl9LHRoaXMuc2V0RHJhd2luZ0J1ZmZlclNpemU9ZnVuY3Rpb24oSyxndCxFdCl7RD1LLEI9Z3QsST1FdCx0LndpZHRoPU1hdGguZmxvb3IoSypFdCksdC5oZWlnaHQ9TWF0aC5mbG9vcihndCpFdCksdGhpcy5zZXRWaWV3cG9ydCgwLDAsSyxndCl9LHRoaXMuZ2V0Q3VycmVudFZpZXdwb3J0PWZ1bmN0aW9uKEspe3JldHVybiBLLmNvcHkoUCl9LHRoaXMuZ2V0Vmlld3BvcnQ9ZnVuY3Rpb24oSyl7cmV0dXJuIEsuY29weShGKX0sdGhpcy5zZXRWaWV3cG9ydD1mdW5jdGlvbihLLGd0LEV0LHh0KXtLLmlzVmVjdG9yND9GLnNldChLLngsSy55LEsueixLLncpOkYuc2V0KEssZ3QsRXQseHQpLFgudmlld3BvcnQoUC5jb3B5KEYpLm11bHRpcGx5U2NhbGFyKEkpLmZsb29yKCkpfSx0aGlzLmdldFNjaXNzb3I9ZnVuY3Rpb24oSyl7cmV0dXJuIEsuY29weSh6KX0sdGhpcy5zZXRTY2lzc29yPWZ1bmN0aW9uKEssZ3QsRXQseHQpe0suaXNWZWN0b3I0P3ouc2V0KEsueCxLLnksSy56LEsudyk6ei5zZXQoSyxndCxFdCx4dCksWC5zY2lzc29yKGsuY29weSh6KS5tdWx0aXBseVNjYWxhcihJKS5mbG9vcigpKX0sdGhpcy5nZXRTY2lzc29yVGVzdD1mdW5jdGlvbigpe3JldHVybiBVfSx0aGlzLnNldFNjaXNzb3JUZXN0PWZ1bmN0aW9uKEspe1guc2V0U2Npc3NvclRlc3QoVT1LKX0sdGhpcy5zZXRPcGFxdWVTb3J0PWZ1bmN0aW9uKEspe0w9S30sdGhpcy5zZXRUcmFuc3BhcmVudFNvcnQ9ZnVuY3Rpb24oSyl7Uj1LfSx0aGlzLmdldENsZWFyQ29sb3I9ZnVuY3Rpb24oSyl7cmV0dXJuIEsuY29weShJdC5nZXRDbGVhckNvbG9yKCkpfSx0aGlzLnNldENsZWFyQ29sb3I9ZnVuY3Rpb24oKXtJdC5zZXRDbGVhckNvbG9yLmFwcGx5KEl0LGFyZ3VtZW50cyl9LHRoaXMuZ2V0Q2xlYXJBbHBoYT1mdW5jdGlvbigpe3JldHVybiBJdC5nZXRDbGVhckFscGhhKCl9LHRoaXMuc2V0Q2xlYXJBbHBoYT1mdW5jdGlvbigpe0l0LnNldENsZWFyQWxwaGEuYXBwbHkoSXQsYXJndW1lbnRzKX0sdGhpcy5jbGVhcj1mdW5jdGlvbihLLGd0LEV0KXtsZXQgeHQ9MDsoSz09PXZvaWQgMHx8SykmJih4dHw9MTYzODQpLChndD09PXZvaWQgMHx8Z3QpJiYoeHR8PTI1NiksKEV0PT09dm9pZCAwfHxFdCkmJih4dHw9MTAyNCksbHQuY2xlYXIoeHQpfSx0aGlzLmNsZWFyQ29sb3I9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCEwLCExLCExKX0sdGhpcy5jbGVhckRlcHRoPWZ1bmN0aW9uKCl7dGhpcy5jbGVhcighMSwhMCwhMSl9LHRoaXMuY2xlYXJTdGVuY2lsPWZ1bmN0aW9uKCl7dGhpcy5jbGVhcighMSwhMSwhMCl9LHRoaXMuZGlzcG9zZT1mdW5jdGlvbigpe3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsZmUsITEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0cmVzdG9yZWQiLGF0LCExKSxhci5kaXNwb3NlKCksZnIuZGlzcG9zZSgpLGR0LmRpc3Bvc2UoKSxwdC5kaXNwb3NlKCksaHQuZGlzcG9zZSgpLGllLmRpc3Bvc2UoKSxudC5kaXNwb3NlKCksZWUuZGlzcG9zZSgpLFd0LmRpc3Bvc2UoKSxXdC5yZW1vdmVFdmVudExpc3RlbmVyKCJzZXNzaW9uc3RhcnQiLHplKSxXdC5yZW1vdmVFdmVudExpc3RlbmVyKCJzZXNzaW9uZW5kIix5biksb3QmJihvdC5kaXNwb3NlKCksb3Q9bnVsbCksV2kuc3RvcCgpfTtmdW5jdGlvbiBmZShLKXtLLnByZXZlbnREZWZhdWx0KCksY29uc29sZS5sb2coIlRIUkVFLldlYkdMUmVuZGVyZXI6IENvbnRleHQgTG9zdC4iKSxfPSEwfWZ1bmN0aW9uIGF0KCl7Y29uc29sZS5sb2coIlRIUkVFLldlYkdMUmVuZGVyZXI6IENvbnRleHQgUmVzdG9yZWQuIiksXz0hMTtsZXQgSz1ldC5hdXRvUmVzZXQsZ3Q9JC5lbmFibGVkLEV0PSQuYXV0b1VwZGF0ZSx4dD0kLm5lZWRzVXBkYXRlLEZ0PSQudHlwZTtDdCgpLGV0LmF1dG9SZXNldD1LLCQuZW5hYmxlZD1ndCwkLmF1dG9VcGRhdGU9RXQsJC5uZWVkc1VwZGF0ZT14dCwkLnR5cGU9RnR9ZnVuY3Rpb24gc2UoSyl7bGV0IGd0PUsudGFyZ2V0O2d0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHNlKSxRdChndCl9ZnVuY3Rpb24gUXQoSyl7Q2UoSyksZHQucmVtb3ZlKEspfWZ1bmN0aW9uIENlKEspe2xldCBndD1kdC5nZXQoSykucHJvZ3JhbXM7Z3QhPT12b2lkIDAmJihndC5mb3JFYWNoKGZ1bmN0aW9uKEV0KXtlZS5yZWxlYXNlUHJvZ3JhbShFdCl9KSxLLmlzU2hhZGVyTWF0ZXJpYWwmJmVlLnJlbGVhc2VTaGFkZXJDYWNoZShLKSl9dGhpcy5yZW5kZXJCdWZmZXJEaXJlY3Q9ZnVuY3Rpb24oSyxndCxFdCx4dCxGdCxWZSl7Z3Q9PT1udWxsJiYoZ3Q9YnQpO2xldCBVZT1GdC5pc01lc2gmJkZ0Lm1hdHJpeFdvcmxkLmRldGVybWluYW50KCk8MCx0cj1jbihLLGd0LEV0LHh0LEZ0KTtYLnNldE1hdGVyaWFsKHh0LFVlKTtsZXQgS2U9RXQuaW5kZXgsWHI9RXQuYXR0cmlidXRlcy5wb3NpdGlvbjtpZihLZT09PW51bGwpe2lmKFhyPT09dm9pZCAwfHxYci5jb3VudD09PTApcmV0dXJufWVsc2UgaWYoS2UuY291bnQ9PT0wKXJldHVybjtsZXQgX3I9MTt4dC53aXJlZnJhbWU9PT0hMCYmKEtlPWt0LmdldFdpcmVmcmFtZUF0dHJpYnV0ZShFdCksX3I9MiksbnQuc2V0dXAoRnQseHQsdHIsRXQsS2UpO2xldCBQcixYbj1oZTtLZSE9PW51bGwmJihQcj13dC5nZXQoS2UpLFhuPVR0LFhuLnNldEluZGV4KFByKSk7bGV0IGlwPUtlIT09bnVsbD9LZS5jb3VudDpYci5jb3VudCxobT1FdC5kcmF3UmFuZ2Uuc3RhcnQqX3IsbXI9RXQuZHJhd1JhbmdlLmNvdW50Kl9yLEJsPVZlIT09bnVsbD9WZS5zdGFydCpfcjowLCRuPVZlIT09bnVsbD9WZS5jb3VudCpfcjoxLzAsSGw9TWF0aC5tYXgoaG0sQmwpLGh4PU1hdGgubWluKGlwLGhtK21yLEJsKyRuKS0xLFZsPU1hdGgubWF4KDAsaHgtSGwrMSk7aWYoVmwhPT0wKXtpZihGdC5pc01lc2gpeHQud2lyZWZyYW1lPT09ITA/KFguc2V0TGluZVdpZHRoKHh0LndpcmVmcmFtZUxpbmV3aWR0aCpNdCgpKSxYbi5zZXRNb2RlKDEpKTpYbi5zZXRNb2RlKDQpO2Vsc2UgaWYoRnQuaXNMaW5lKXtsZXQgVWw9eHQubGluZXdpZHRoO1VsPT09dm9pZCAwJiYoVWw9MSksWC5zZXRMaW5lV2lkdGgoVWwqTXQoKSksRnQuaXNMaW5lU2VnbWVudHM/WG4uc2V0TW9kZSgxKTpGdC5pc0xpbmVMb29wP1huLnNldE1vZGUoMik6WG4uc2V0TW9kZSgzKX1lbHNlIEZ0LmlzUG9pbnRzP1huLnNldE1vZGUoMCk6RnQuaXNTcHJpdGUmJlhuLnNldE1vZGUoNCk7aWYoRnQuaXNJbnN0YW5jZWRNZXNoKVhuLnJlbmRlckluc3RhbmNlcyhIbCxWbCxGdC5jb3VudCk7ZWxzZSBpZihFdC5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5KXtsZXQgVWw9TWF0aC5taW4oRXQuaW5zdGFuY2VDb3VudCxFdC5fbWF4SW5zdGFuY2VDb3VudCk7WG4ucmVuZGVySW5zdGFuY2VzKEhsLFZsLFVsKX1lbHNlIFhuLnJlbmRlcihIbCxWbCl9fSx0aGlzLmNvbXBpbGU9ZnVuY3Rpb24oSyxndCl7Zj1mci5nZXQoSyksZi5pbml0KCksZC5wdXNoKGYpLEsudHJhdmVyc2VWaXNpYmxlKGZ1bmN0aW9uKEV0KXtFdC5pc0xpZ2h0JiZFdC5sYXllcnMudGVzdChndC5sYXllcnMpJiYoZi5wdXNoTGlnaHQoRXQpLEV0LmNhc3RTaGFkb3cmJmYucHVzaFNoYWRvdyhFdCkpfSksZi5zZXR1cExpZ2h0cyhnLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzKSxLLnRyYXZlcnNlKGZ1bmN0aW9uKEV0KXtsZXQgeHQ9RXQubWF0ZXJpYWw7aWYoeHQpaWYoQXJyYXkuaXNBcnJheSh4dCkpZm9yKGxldCBGdD0wO0Z0PHh0Lmxlbmd0aDtGdCsrKXtsZXQgVmU9eHRbRnRdO3VtKFZlLEssRXQpfWVsc2UgdW0oeHQsSyxFdCl9KSxkLnBvcCgpLGY9bnVsbH07bGV0IFB0PW51bGw7ZnVuY3Rpb24gTnQoSyl7UHQmJlB0KEspfWZ1bmN0aW9uIHplKCl7V2kuc3RvcCgpfWZ1bmN0aW9uIHluKCl7V2kuc3RhcnQoKX1sZXQgV2k9bmV3IFVmZTtXaS5zZXRBbmltYXRpb25Mb29wKE50KSx0eXBlb2Ygd2luZG93IT0idW5kZWZpbmVkIiYmV2kuc2V0Q29udGV4dCh3aW5kb3cpLHRoaXMuc2V0QW5pbWF0aW9uTG9vcD1mdW5jdGlvbihLKXtQdD1LLFd0LnNldEFuaW1hdGlvbkxvb3AoSyksSz09PW51bGw/V2kuc3RvcCgpOldpLnN0YXJ0KCl9LFd0LmFkZEV2ZW50TGlzdGVuZXIoInNlc3Npb25zdGFydCIsemUpLFd0LmFkZEV2ZW50TGlzdGVuZXIoInNlc3Npb25lbmQiLHluKSx0aGlzLnJlbmRlcj1mdW5jdGlvbihLLGd0KXtpZihndCE9PXZvaWQgMCYmZ3QuaXNDYW1lcmEhPT0hMCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZW5kZXI6IGNhbWVyYSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuQ2FtZXJhLiIpO3JldHVybn1pZihfPT09ITApcmV0dXJuO0suYXV0b1VwZGF0ZT09PSEwJiZLLnVwZGF0ZU1hdHJpeFdvcmxkKCksZ3QucGFyZW50PT09bnVsbCYmZ3QudXBkYXRlTWF0cml4V29ybGQoKSxXdC5lbmFibGVkPT09ITAmJld0LmlzUHJlc2VudGluZz09PSEwJiYoV3QuY2FtZXJhQXV0b1VwZGF0ZT09PSEwJiZXdC51cGRhdGVDYW1lcmEoZ3QpLGd0PVd0LmdldENhbWVyYSgpKSxLLmlzU2NlbmU9PT0hMCYmSy5vbkJlZm9yZVJlbmRlcihnLEssZ3QsYiksZj1mci5nZXQoSyxkLmxlbmd0aCksZi5pbml0KCksZC5wdXNoKGYpLHN0Lm11bHRpcGx5TWF0cmljZXMoZ3QucHJvamVjdGlvbk1hdHJpeCxndC5tYXRyaXhXb3JsZEludmVyc2UpLFcuc2V0RnJvbVByb2plY3Rpb25NYXRyaXgoc3QpLHJ0PXRoaXMubG9jYWxDbGlwcGluZ0VuYWJsZWQsWj10dC5pbml0KHRoaXMuY2xpcHBpbmdQbGFuZXMscnQsZ3QpLGg9YXIuZ2V0KEsscC5sZW5ndGgpLGguaW5pdCgpLHAucHVzaChoKSxBcihLLGd0LDAsZy5zb3J0T2JqZWN0cyksaC5maW5pc2goKSxnLnNvcnRPYmplY3RzPT09ITAmJmguc29ydChMLFIpLFo9PT0hMCYmdHQuYmVnaW5TaGFkb3dzKCk7bGV0IEV0PWYuc3RhdGUuc2hhZG93c0FycmF5O2lmKCQucmVuZGVyKEV0LEssZ3QpLFo9PT0hMCYmdHQuZW5kU2hhZG93cygpLHRoaXMuaW5mby5hdXRvUmVzZXQ9PT0hMCYmdGhpcy5pbmZvLnJlc2V0KCksSXQucmVuZGVyKGgsSyksZi5zZXR1cExpZ2h0cyhnLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzKSxndC5pc0FycmF5Q2FtZXJhKXtsZXQgeHQ9Z3QuY2FtZXJhcztmb3IobGV0IEZ0PTAsVmU9eHQubGVuZ3RoO0Z0PFZlO0Z0Kyspe2xldCBVZT14dFtGdF07SWEoaCxLLFVlLFVlLnZpZXdwb3J0KX19ZWxzZSBJYShoLEssZ3QpO2IhPT1udWxsJiYocS51cGRhdGVNdWx0aXNhbXBsZVJlbmRlclRhcmdldChiKSxxLnVwZGF0ZVJlbmRlclRhcmdldE1pcG1hcChiKSksSy5pc1NjZW5lPT09ITAmJksub25BZnRlclJlbmRlcihnLEssZ3QpLFguYnVmZmVycy5kZXB0aC5zZXRUZXN0KCEwKSxYLmJ1ZmZlcnMuZGVwdGguc2V0TWFzayghMCksWC5idWZmZXJzLmNvbG9yLnNldE1hc2soITApLFguc2V0UG9seWdvbk9mZnNldCghMSksbnQucmVzZXREZWZhdWx0U3RhdGUoKSxTPS0xLEM9bnVsbCxkLnBvcCgpLGQubGVuZ3RoPjA/Zj1kW2QubGVuZ3RoLTFdOmY9bnVsbCxwLnBvcCgpLHAubGVuZ3RoPjA/aD1wW3AubGVuZ3RoLTFdOmg9bnVsbH07ZnVuY3Rpb24gQXIoSyxndCxFdCx4dCl7aWYoSy52aXNpYmxlPT09ITEpcmV0dXJuO2lmKEsubGF5ZXJzLnRlc3QoZ3QubGF5ZXJzKSl7aWYoSy5pc0dyb3VwKUV0PUsucmVuZGVyT3JkZXI7ZWxzZSBpZihLLmlzTE9EKUsuYXV0b1VwZGF0ZT09PSEwJiZLLnVwZGF0ZShndCk7ZWxzZSBpZihLLmlzTGlnaHQpZi5wdXNoTGlnaHQoSyksSy5jYXN0U2hhZG93JiZmLnB1c2hTaGFkb3coSyk7ZWxzZSBpZihLLmlzU3ByaXRlKXtpZighSy5mcnVzdHVtQ3VsbGVkfHxXLmludGVyc2VjdHNTcHJpdGUoSykpe3h0JiZTdC5zZXRGcm9tTWF0cml4UG9zaXRpb24oSy5tYXRyaXhXb3JsZCkuYXBwbHlNYXRyaXg0KHN0KTtsZXQgVWU9aWUudXBkYXRlKEspLHRyPUsubWF0ZXJpYWw7dHIudmlzaWJsZSYmaC5wdXNoKEssVWUsdHIsRXQsU3QueixudWxsKX19ZWxzZSBpZigoSy5pc01lc2h8fEsuaXNMaW5lfHxLLmlzUG9pbnRzKSYmKEsuaXNTa2lubmVkTWVzaCYmSy5za2VsZXRvbi5mcmFtZSE9PWV0LnJlbmRlci5mcmFtZSYmKEsuc2tlbGV0b24udXBkYXRlKCksSy5za2VsZXRvbi5mcmFtZT1ldC5yZW5kZXIuZnJhbWUpLCFLLmZydXN0dW1DdWxsZWR8fFcuaW50ZXJzZWN0c09iamVjdChLKSkpe3h0JiZTdC5zZXRGcm9tTWF0cml4UG9zaXRpb24oSy5tYXRyaXhXb3JsZCkuYXBwbHlNYXRyaXg0KHN0KTtsZXQgVWU9aWUudXBkYXRlKEspLHRyPUsubWF0ZXJpYWw7aWYoQXJyYXkuaXNBcnJheSh0cikpe2xldCBLZT1VZS5ncm91cHM7Zm9yKGxldCBYcj0wLF9yPUtlLmxlbmd0aDtYcjxfcjtYcisrKXtsZXQgUHI9S2VbWHJdLFhuPXRyW1ByLm1hdGVyaWFsSW5kZXhdO1huJiZYbi52aXNpYmxlJiZoLnB1c2goSyxVZSxYbixFdCxTdC56LFByKX19ZWxzZSB0ci52aXNpYmxlJiZoLnB1c2goSyxVZSx0cixFdCxTdC56LG51bGwpfX1sZXQgVmU9Sy5jaGlsZHJlbjtmb3IobGV0IFVlPTAsdHI9VmUubGVuZ3RoO1VlPHRyO1VlKyspQXIoVmVbVWVdLGd0LEV0LHh0KX1mdW5jdGlvbiBJYShLLGd0LEV0LHh0KXtsZXQgRnQ9Sy5vcGFxdWUsVmU9Sy50cmFuc21pc3NpdmUsVWU9Sy50cmFuc3BhcmVudDtmLnNldHVwTGlnaHRzVmlldyhFdCksVmUubGVuZ3RoPjAmJmhvKEZ0LGd0LEV0KSx4dCYmWC52aWV3cG9ydChQLmNvcHkoeHQpKSxGdC5sZW5ndGg+MCYmTGEoRnQsZ3QsRXQpLFZlLmxlbmd0aD4wJiZMYShWZSxndCxFdCksVWUubGVuZ3RoPjAmJkxhKFVlLGd0LEV0KX1mdW5jdGlvbiBobyhLLGd0LEV0KXtpZihvdD09PW51bGwpe2xldCBVZT1hPT09ITAmJmN0LmlzV2ViR0wyPT09ITA/ajM6aHM7b3Q9bmV3IFVlKDEwMjQsMTAyNCx7Z2VuZXJhdGVNaXBtYXBzOiEwLHR5cGU6YmUuY29udmVydChBMSkhPT1udWxsP0ExOkpkLG1pbkZpbHRlcjpheCxtYWdGaWx0ZXI6TGksd3JhcFM6Sm8sd3JhcFQ6Sm8sdXNlUmVuZGVyVG9UZXh0dXJlOl90LmhhcygiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIil9KX1sZXQgeHQ9Zy5nZXRSZW5kZXJUYXJnZXQoKTtnLnNldFJlbmRlclRhcmdldChvdCksZy5jbGVhcigpO2xldCBGdD1nLnRvbmVNYXBwaW5nO2cudG9uZU1hcHBpbmc9WmQsTGEoSyxndCxFdCksZy50b25lTWFwcGluZz1GdCxxLnVwZGF0ZU11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0KG90KSxxLnVwZGF0ZVJlbmRlclRhcmdldE1pcG1hcChvdCksZy5zZXRSZW5kZXJUYXJnZXQoeHQpfWZ1bmN0aW9uIExhKEssZ3QsRXQpe2xldCB4dD1ndC5pc1NjZW5lPT09ITA/Z3Qub3ZlcnJpZGVNYXRlcmlhbDpudWxsO2ZvcihsZXQgRnQ9MCxWZT1LLmxlbmd0aDtGdDxWZTtGdCsrKXtsZXQgVWU9S1tGdF0sdHI9VWUub2JqZWN0LEtlPVVlLmdlb21ldHJ5LFhyPXh0PT09bnVsbD9VZS5tYXRlcmlhbDp4dCxfcj1VZS5ncm91cDt0ci5sYXllcnMudGVzdChFdC5sYXllcnMpJiZjeCh0cixndCxFdCxLZSxYcixfcil9fWZ1bmN0aW9uIGN4KEssZ3QsRXQseHQsRnQsVmUpe0sub25CZWZvcmVSZW5kZXIoZyxndCxFdCx4dCxGdCxWZSksSy5tb2RlbFZpZXdNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyhFdC5tYXRyaXhXb3JsZEludmVyc2UsSy5tYXRyaXhXb3JsZCksSy5ub3JtYWxNYXRyaXguZ2V0Tm9ybWFsTWF0cml4KEsubW9kZWxWaWV3TWF0cml4KSxGdC5vbkJlZm9yZVJlbmRlcihnLGd0LEV0LHh0LEssVmUpLEZ0LnRyYW5zcGFyZW50PT09ITAmJkZ0LnNpZGU9PT1rMT8oRnQuc2lkZT1JaSxGdC5uZWVkc1VwZGF0ZT0hMCxnLnJlbmRlckJ1ZmZlckRpcmVjdChFdCxndCx4dCxGdCxLLFZlKSxGdC5zaWRlPUwxLEZ0Lm5lZWRzVXBkYXRlPSEwLGcucmVuZGVyQnVmZmVyRGlyZWN0KEV0LGd0LHh0LEZ0LEssVmUpLEZ0LnNpZGU9azEpOmcucmVuZGVyQnVmZmVyRGlyZWN0KEV0LGd0LHh0LEZ0LEssVmUpLEsub25BZnRlclJlbmRlcihnLGd0LEV0LHh0LEZ0LFZlKX1mdW5jdGlvbiB1bShLLGd0LEV0KXtndC5pc1NjZW5lIT09ITAmJihndD1idCk7bGV0IHh0PWR0LmdldChLKSxGdD1mLnN0YXRlLmxpZ2h0cyxWZT1mLnN0YXRlLnNoYWRvd3NBcnJheSxVZT1GdC5zdGF0ZS52ZXJzaW9uLHRyPWVlLmdldFBhcmFtZXRlcnMoSyxGdC5zdGF0ZSxWZSxndCxFdCksS2U9ZWUuZ2V0UHJvZ3JhbUNhY2hlS2V5KHRyKSxYcj14dC5wcm9ncmFtczt4dC5lbnZpcm9ubWVudD1LLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/Z3QuZW52aXJvbm1lbnQ6bnVsbCx4dC5mb2c9Z3QuZm9nLHh0LmVudk1hcD0oSy5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP2h0OnB0KS5nZXQoSy5lbnZNYXB8fHh0LmVudmlyb25tZW50KSxYcj09PXZvaWQgMCYmKEsuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsc2UpLFhyPW5ldyBNYXAseHQucHJvZ3JhbXM9WHIpO2xldCBfcj1Yci5nZXQoS2UpO2lmKF9yIT09dm9pZCAwKXtpZih4dC5jdXJyZW50UHJvZ3JhbT09PV9yJiZ4dC5saWdodHNTdGF0ZVZlcnNpb249PT1VZSlyZXR1cm4gUTAoSyx0ciksX3J9ZWxzZSB0ci51bmlmb3Jtcz1lZS5nZXRVbmlmb3JtcyhLKSxLLm9uQnVpbGQoRXQsdHIsZyksSy5vbkJlZm9yZUNvbXBpbGUodHIsZyksX3I9ZWUuYWNxdWlyZVByb2dyYW0odHIsS2UpLFhyLnNldChLZSxfcikseHQudW5pZm9ybXM9dHIudW5pZm9ybXM7bGV0IFByPXh0LnVuaWZvcm1zOyghSy5pc1NoYWRlck1hdGVyaWFsJiYhSy5pc1Jhd1NoYWRlck1hdGVyaWFsfHxLLmNsaXBwaW5nPT09ITApJiYoUHIuY2xpcHBpbmdQbGFuZXM9dHQudW5pZm9ybSksUTAoSyx0cikseHQubmVlZHNMaWdodHM9bnAoSykseHQubGlnaHRzU3RhdGVWZXJzaW9uPVVlLHh0Lm5lZWRzTGlnaHRzJiYoUHIuYW1iaWVudExpZ2h0Q29sb3IudmFsdWU9RnQuc3RhdGUuYW1iaWVudCxQci5saWdodFByb2JlLnZhbHVlPUZ0LnN0YXRlLnByb2JlLFByLmRpcmVjdGlvbmFsTGlnaHRzLnZhbHVlPUZ0LnN0YXRlLmRpcmVjdGlvbmFsLFByLmRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzLnZhbHVlPUZ0LnN0YXRlLmRpcmVjdGlvbmFsU2hhZG93LFByLnNwb3RMaWdodHMudmFsdWU9RnQuc3RhdGUuc3BvdCxQci5zcG90TGlnaHRTaGFkb3dzLnZhbHVlPUZ0LnN0YXRlLnNwb3RTaGFkb3csUHIucmVjdEFyZWFMaWdodHMudmFsdWU9RnQuc3RhdGUucmVjdEFyZWEsUHIubHRjXzEudmFsdWU9RnQuc3RhdGUucmVjdEFyZWFMVEMxLFByLmx0Y18yLnZhbHVlPUZ0LnN0YXRlLnJlY3RBcmVhTFRDMixQci5wb2ludExpZ2h0cy52YWx1ZT1GdC5zdGF0ZS5wb2ludCxQci5wb2ludExpZ2h0U2hhZG93cy52YWx1ZT1GdC5zdGF0ZS5wb2ludFNoYWRvdyxQci5oZW1pc3BoZXJlTGlnaHRzLnZhbHVlPUZ0LnN0YXRlLmhlbWksUHIuZGlyZWN0aW9uYWxTaGFkb3dNYXAudmFsdWU9RnQuc3RhdGUuZGlyZWN0aW9uYWxTaGFkb3dNYXAsUHIuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgudmFsdWU9RnQuc3RhdGUuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgsUHIuc3BvdFNoYWRvd01hcC52YWx1ZT1GdC5zdGF0ZS5zcG90U2hhZG93TWFwLFByLnNwb3RTaGFkb3dNYXRyaXgudmFsdWU9RnQuc3RhdGUuc3BvdFNoYWRvd01hdHJpeCxQci5wb2ludFNoYWRvd01hcC52YWx1ZT1GdC5zdGF0ZS5wb2ludFNoYWRvd01hcCxQci5wb2ludFNoYWRvd01hdHJpeC52YWx1ZT1GdC5zdGF0ZS5wb2ludFNoYWRvd01hdHJpeCk7bGV0IFhuPV9yLmdldFVuaWZvcm1zKCksaXA9SDAuc2VxV2l0aFZhbHVlKFhuLnNlcSxQcik7cmV0dXJuIHh0LmN1cnJlbnRQcm9ncmFtPV9yLHh0LnVuaWZvcm1zTGlzdD1pcCxfcn1mdW5jdGlvbiBRMChLLGd0KXtsZXQgRXQ9ZHQuZ2V0KEspO0V0Lm91dHB1dEVuY29kaW5nPWd0Lm91dHB1dEVuY29kaW5nLEV0Lmluc3RhbmNpbmc9Z3QuaW5zdGFuY2luZyxFdC5za2lubmluZz1ndC5za2lubmluZyxFdC5tb3JwaFRhcmdldHM9Z3QubW9ycGhUYXJnZXRzLEV0Lm1vcnBoTm9ybWFscz1ndC5tb3JwaE5vcm1hbHMsRXQubW9ycGhUYXJnZXRzQ291bnQ9Z3QubW9ycGhUYXJnZXRzQ291bnQsRXQubnVtQ2xpcHBpbmdQbGFuZXM9Z3QubnVtQ2xpcHBpbmdQbGFuZXMsRXQubnVtSW50ZXJzZWN0aW9uPWd0Lm51bUNsaXBJbnRlcnNlY3Rpb24sRXQudmVydGV4QWxwaGFzPWd0LnZlcnRleEFscGhhcyxFdC52ZXJ0ZXhUYW5nZW50cz1ndC52ZXJ0ZXhUYW5nZW50cyxFdC50b25lTWFwcGluZz1ndC50b25lTWFwcGluZ31mdW5jdGlvbiBjbihLLGd0LEV0LHh0LEZ0KXtndC5pc1NjZW5lIT09ITAmJihndD1idCkscS5yZXNldFRleHR1cmVVbml0cygpO2xldCBWZT1ndC5mb2csVWU9eHQuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9ndC5lbnZpcm9ubWVudDpudWxsLHRyPWI9PT1udWxsP2cub3V0cHV0RW5jb2Rpbmc6Yi5pc1hSUmVuZGVyVGFyZ2V0PT09ITA/Yi50ZXh0dXJlLmVuY29kaW5nOnRtLEtlPSh4dC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP2h0OnB0KS5nZXQoeHQuZW52TWFwfHxVZSksWHI9eHQudmVydGV4Q29sb3JzPT09ITAmJiEhRXQuYXR0cmlidXRlcy5jb2xvciYmRXQuYXR0cmlidXRlcy5jb2xvci5pdGVtU2l6ZT09PTQsX3I9ISF4dC5ub3JtYWxNYXAmJiEhRXQuYXR0cmlidXRlcy50YW5nZW50LFByPSEhRXQubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLFhuPSEhRXQubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCxpcD1FdC5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24/RXQubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLmxlbmd0aDowLGhtPXh0LnRvbmVNYXBwZWQ/Zy50b25lTWFwcGluZzpaZCxtcj1kdC5nZXQoeHQpLEJsPWYuc3RhdGUubGlnaHRzO2lmKFo9PT0hMCYmKHJ0PT09ITB8fEshPT1DKSl7bGV0IEdzPUs9PT1DJiZ4dC5pZD09PVM7dHQuc2V0U3RhdGUoeHQsSyxHcyl9bGV0ICRuPSExO3h0LnZlcnNpb249PT1tci5fX3ZlcnNpb24/KG1yLm5lZWRzTGlnaHRzJiZtci5saWdodHNTdGF0ZVZlcnNpb24hPT1CbC5zdGF0ZS52ZXJzaW9ufHxtci5vdXRwdXRFbmNvZGluZyE9PXRyfHxGdC5pc0luc3RhbmNlZE1lc2gmJm1yLmluc3RhbmNpbmc9PT0hMXx8IUZ0LmlzSW5zdGFuY2VkTWVzaCYmbXIuaW5zdGFuY2luZz09PSEwfHxGdC5pc1NraW5uZWRNZXNoJiZtci5za2lubmluZz09PSExfHwhRnQuaXNTa2lubmVkTWVzaCYmbXIuc2tpbm5pbmc9PT0hMHx8bXIuZW52TWFwIT09S2V8fHh0LmZvZyYmbXIuZm9nIT09VmV8fG1yLm51bUNsaXBwaW5nUGxhbmVzIT09dm9pZCAwJiYobXIubnVtQ2xpcHBpbmdQbGFuZXMhPT10dC5udW1QbGFuZXN8fG1yLm51bUludGVyc2VjdGlvbiE9PXR0Lm51bUludGVyc2VjdGlvbil8fG1yLnZlcnRleEFscGhhcyE9PVhyfHxtci52ZXJ0ZXhUYW5nZW50cyE9PV9yfHxtci5tb3JwaFRhcmdldHMhPT1Qcnx8bXIubW9ycGhOb3JtYWxzIT09WG58fG1yLnRvbmVNYXBwaW5nIT09aG18fGN0LmlzV2ViR0wyPT09ITAmJm1yLm1vcnBoVGFyZ2V0c0NvdW50IT09aXApJiYoJG49ITApOigkbj0hMCxtci5fX3ZlcnNpb249eHQudmVyc2lvbik7bGV0IEhsPW1yLmN1cnJlbnRQcm9ncmFtOyRuPT09ITAmJihIbD11bSh4dCxndCxGdCkpO2xldCBoeD0hMSxWbD0hMSxVbD0hMSxZaT1IbC5nZXRVbmlmb3JtcygpLGZtPW1yLnVuaWZvcm1zO2lmKFgudXNlUHJvZ3JhbShIbC5wcm9ncmFtKSYmKGh4PSEwLFZsPSEwLFVsPSEwKSx4dC5pZCE9PVMmJihTPXh0LmlkLFZsPSEwKSxoeHx8QyE9PUspe2lmKFlpLnNldFZhbHVlKGx0LCJwcm9qZWN0aW9uTWF0cml4IixLLnByb2plY3Rpb25NYXRyaXgpLGN0LmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJllpLnNldFZhbHVlKGx0LCJsb2dEZXB0aEJ1ZkZDIiwyLyhNYXRoLmxvZyhLLmZhcisxKS9NYXRoLkxOMikpLEMhPT1LJiYoQz1LLFZsPSEwLFVsPSEwKSx4dC5pc1NoYWRlck1hdGVyaWFsfHx4dC5pc01lc2hQaG9uZ01hdGVyaWFsfHx4dC5pc01lc2hUb29uTWF0ZXJpYWx8fHh0LmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fHh0LmVudk1hcCl7bGV0IEdzPVlpLm1hcC5jYW1lcmFQb3NpdGlvbjtHcyE9PXZvaWQgMCYmR3Muc2V0VmFsdWUobHQsU3Quc2V0RnJvbU1hdHJpeFBvc2l0aW9uKEsubWF0cml4V29ybGQpKX0oeHQuaXNNZXNoUGhvbmdNYXRlcmlhbHx8eHQuaXNNZXNoVG9vbk1hdGVyaWFsfHx4dC5pc01lc2hMYW1iZXJ0TWF0ZXJpYWx8fHh0LmlzTWVzaEJhc2ljTWF0ZXJpYWx8fHh0LmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fHh0LmlzU2hhZGVyTWF0ZXJpYWwpJiZZaS5zZXRWYWx1ZShsdCwiaXNPcnRob2dyYXBoaWMiLEsuaXNPcnRob2dyYXBoaWNDYW1lcmE9PT0hMCksKHh0LmlzTWVzaFBob25nTWF0ZXJpYWx8fHh0LmlzTWVzaFRvb25NYXRlcmlhbHx8eHQuaXNNZXNoTGFtYmVydE1hdGVyaWFsfHx4dC5pc01lc2hCYXNpY01hdGVyaWFsfHx4dC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsfHx4dC5pc1NoYWRlck1hdGVyaWFsfHx4dC5pc1NoYWRvd01hdGVyaWFsfHxGdC5pc1NraW5uZWRNZXNoKSYmWWkuc2V0VmFsdWUobHQsInZpZXdNYXRyaXgiLEsubWF0cml4V29ybGRJbnZlcnNlKX1pZihGdC5pc1NraW5uZWRNZXNoKXtZaS5zZXRPcHRpb25hbChsdCxGdCwiYmluZE1hdHJpeCIpLFlpLnNldE9wdGlvbmFsKGx0LEZ0LCJiaW5kTWF0cml4SW52ZXJzZSIpO2xldCBHcz1GdC5za2VsZXRvbjtHcyYmKGN0LmZsb2F0VmVydGV4VGV4dHVyZXM/KEdzLmJvbmVUZXh0dXJlPT09bnVsbCYmR3MuY29tcHV0ZUJvbmVUZXh0dXJlKCksWWkuc2V0VmFsdWUobHQsImJvbmVUZXh0dXJlIixHcy5ib25lVGV4dHVyZSxxKSxZaS5zZXRWYWx1ZShsdCwiYm9uZVRleHR1cmVTaXplIixHcy5ib25lVGV4dHVyZVNpemUpKTpZaS5zZXRPcHRpb25hbChsdCxHcywiYm9uZU1hdHJpY2VzIikpfXJldHVybiEhRXQmJihFdC5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24hPT12b2lkIDB8fEV0Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWwhPT12b2lkIDApJiYkdC51cGRhdGUoRnQsRXQseHQsSGwpLChWbHx8bXIucmVjZWl2ZVNoYWRvdyE9PUZ0LnJlY2VpdmVTaGFkb3cpJiYobXIucmVjZWl2ZVNoYWRvdz1GdC5yZWNlaXZlU2hhZG93LFlpLnNldFZhbHVlKGx0LCJyZWNlaXZlU2hhZG93IixGdC5yZWNlaXZlU2hhZG93KSksVmwmJihZaS5zZXRWYWx1ZShsdCwidG9uZU1hcHBpbmdFeHBvc3VyZSIsZy50b25lTWFwcGluZ0V4cG9zdXJlKSxtci5uZWVkc0xpZ2h0cyYmdXgoZm0sVWwpLFZlJiZ4dC5mb2cmJkxlLnJlZnJlc2hGb2dVbmlmb3JtcyhmbSxWZSksTGUucmVmcmVzaE1hdGVyaWFsVW5pZm9ybXMoZm0seHQsSSxCLG90KSxIMC51cGxvYWQobHQsbXIudW5pZm9ybXNMaXN0LGZtLHEpKSx4dC5pc1NoYWRlck1hdGVyaWFsJiZ4dC51bmlmb3Jtc05lZWRVcGRhdGU9PT0hMCYmKEgwLnVwbG9hZChsdCxtci51bmlmb3Jtc0xpc3QsZm0scSkseHQudW5pZm9ybXNOZWVkVXBkYXRlPSExKSx4dC5pc1Nwcml0ZU1hdGVyaWFsJiZZaS5zZXRWYWx1ZShsdCwiY2VudGVyIixGdC5jZW50ZXIpLFlpLnNldFZhbHVlKGx0LCJtb2RlbFZpZXdNYXRyaXgiLEZ0Lm1vZGVsVmlld01hdHJpeCksWWkuc2V0VmFsdWUobHQsIm5vcm1hbE1hdHJpeCIsRnQubm9ybWFsTWF0cml4KSxZaS5zZXRWYWx1ZShsdCwibW9kZWxNYXRyaXgiLEZ0Lm1hdHJpeFdvcmxkKSxIbH1mdW5jdGlvbiB1eChLLGd0KXtLLmFtYmllbnRMaWdodENvbG9yLm5lZWRzVXBkYXRlPWd0LEsubGlnaHRQcm9iZS5uZWVkc1VwZGF0ZT1ndCxLLmRpcmVjdGlvbmFsTGlnaHRzLm5lZWRzVXBkYXRlPWd0LEsuZGlyZWN0aW9uYWxMaWdodFNoYWRvd3MubmVlZHNVcGRhdGU9Z3QsSy5wb2ludExpZ2h0cy5uZWVkc1VwZGF0ZT1ndCxLLnBvaW50TGlnaHRTaGFkb3dzLm5lZWRzVXBkYXRlPWd0LEsuc3BvdExpZ2h0cy5uZWVkc1VwZGF0ZT1ndCxLLnNwb3RMaWdodFNoYWRvd3MubmVlZHNVcGRhdGU9Z3QsSy5yZWN0QXJlYUxpZ2h0cy5uZWVkc1VwZGF0ZT1ndCxLLmhlbWlzcGhlcmVMaWdodHMubmVlZHNVcGRhdGU9Z3R9ZnVuY3Rpb24gbnAoSyl7cmV0dXJuIEsuaXNNZXNoTGFtYmVydE1hdGVyaWFsfHxLLmlzTWVzaFRvb25NYXRlcmlhbHx8Sy5pc01lc2hQaG9uZ01hdGVyaWFsfHxLLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fEsuaXNTaGFkb3dNYXRlcmlhbHx8Sy5pc1NoYWRlck1hdGVyaWFsJiZLLmxpZ2h0cz09PSEwfXRoaXMuZ2V0QWN0aXZlQ3ViZUZhY2U9ZnVuY3Rpb24oKXtyZXR1cm4geX0sdGhpcy5nZXRBY3RpdmVNaXBtYXBMZXZlbD1mdW5jdGlvbigpe3JldHVybiB4fSx0aGlzLmdldFJlbmRlclRhcmdldD1mdW5jdGlvbigpe3JldHVybiBifSx0aGlzLnNldFJlbmRlclRhcmdldFRleHR1cmVzPWZ1bmN0aW9uKEssZ3QsRXQpe2R0LmdldChLLnRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlPWd0LGR0LmdldChLLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmU9RXQ7bGV0IHh0PWR0LmdldChLKTt4dC5fX2hhc0V4dGVybmFsVGV4dHVyZXM9ITAseHQuX19oYXNFeHRlcm5hbFRleHR1cmVzJiYoeHQuX19hdXRvQWxsb2NhdGVEZXB0aEJ1ZmZlcj1FdD09PXZvaWQgMCx4dC5fX2F1dG9BbGxvY2F0ZURlcHRoQnVmZmVyfHxLLnVzZVJlbmRlclRvVGV4dHVyZSYmKGNvbnNvbGUud2FybigicmVuZGVyLXRvLXRleHR1cmUgZXh0ZW5zaW9uIHdhcyBkaXNhYmxlZCBiZWNhdXNlIGFuIGV4dGVybmFsIHRleHR1cmUgd2FzIHByb3ZpZGVkIiksSy51c2VSZW5kZXJUb1RleHR1cmU9ITEsSy51c2VSZW5kZXJidWZmZXI9ITApKX0sdGhpcy5zZXRSZW5kZXJUYXJnZXRGcmFtZWJ1ZmZlcj1mdW5jdGlvbihLLGd0KXtsZXQgRXQ9ZHQuZ2V0KEspO0V0Ll9fd2ViZ2xGcmFtZWJ1ZmZlcj1ndCxFdC5fX3VzZURlZmF1bHRGcmFtZWJ1ZmZlcj1ndD09PXZvaWQgMH0sdGhpcy5zZXRSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oSyxndD0wLEV0PTApe2I9Syx5PWd0LHg9RXQ7bGV0IHh0PSEwO2lmKEspe2xldCBLZT1kdC5nZXQoSyk7S2UuX191c2VEZWZhdWx0RnJhbWVidWZmZXIhPT12b2lkIDA/KFguYmluZEZyYW1lYnVmZmVyKDM2MTYwLG51bGwpLHh0PSExKTpLZS5fX3dlYmdsRnJhbWVidWZmZXI9PT12b2lkIDA/cS5zZXR1cFJlbmRlclRhcmdldChLKTpLZS5fX2hhc0V4dGVybmFsVGV4dHVyZXMmJnEucmViaW5kVGV4dHVyZXMoSyxkdC5nZXQoSy50ZXh0dXJlKS5fX3dlYmdsVGV4dHVyZSxkdC5nZXQoSy5kZXB0aFRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlKX1sZXQgRnQ9bnVsbCxWZT0hMSxVZT0hMTtpZihLKXtsZXQgS2U9Sy50ZXh0dXJlOyhLZS5pc0RhdGFUZXh0dXJlM0R8fEtlLmlzRGF0YVRleHR1cmUyREFycmF5KSYmKFVlPSEwKTtsZXQgWHI9ZHQuZ2V0KEspLl9fd2ViZ2xGcmFtZWJ1ZmZlcjtLLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0PyhGdD1YcltndF0sVmU9ITApOksudXNlUmVuZGVyYnVmZmVyP0Z0PWR0LmdldChLKS5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXI6RnQ9WHIsUC5jb3B5KEsudmlld3BvcnQpLGsuY29weShLLnNjaXNzb3IpLE89Sy5zY2lzc29yVGVzdH1lbHNlIFAuY29weShGKS5tdWx0aXBseVNjYWxhcihJKS5mbG9vcigpLGsuY29weSh6KS5tdWx0aXBseVNjYWxhcihJKS5mbG9vcigpLE89VTtpZihYLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxGdCkmJmN0LmRyYXdCdWZmZXJzJiZ4dCYmWC5kcmF3QnVmZmVycyhLLEZ0KSxYLnZpZXdwb3J0KFApLFguc2Npc3NvcihrKSxYLnNldFNjaXNzb3JUZXN0KE8pLFZlKXtsZXQgS2U9ZHQuZ2V0KEsudGV4dHVyZSk7bHQuZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzYwNjQsMzQwNjkrZ3QsS2UuX193ZWJnbFRleHR1cmUsRXQpfWVsc2UgaWYoVWUpe2xldCBLZT1kdC5nZXQoSy50ZXh0dXJlKSxYcj1ndHx8MDtsdC5mcmFtZWJ1ZmZlclRleHR1cmVMYXllcigzNjE2MCwzNjA2NCxLZS5fX3dlYmdsVGV4dHVyZSxFdHx8MCxYcil9Uz0tMX0sdGhpcy5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzPWZ1bmN0aW9uKEssZ3QsRXQseHQsRnQsVmUsVWUpe2lmKCEoSyYmSy5pc1dlYkdMUmVuZGVyVGFyZ2V0KSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IFRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0LiIpO3JldHVybn1sZXQgdHI9ZHQuZ2V0KEspLl9fd2ViZ2xGcmFtZWJ1ZmZlcjtpZihLLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0JiZVZSE9PXZvaWQgMCYmKHRyPXRyW1VlXSksdHIpe1guYmluZEZyYW1lYnVmZmVyKDM2MTYwLHRyKTt0cnl7bGV0IEtlPUsudGV4dHVyZSxYcj1LZS5mb3JtYXQsX3I9S2UudHlwZTtpZihYciE9PVFvJiZiZS5jb252ZXJ0KFhyKSE9PWx0LmdldFBhcmFtZXRlcigzNTczOSkpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVuZGVyVGFyZ2V0IGlzIG5vdCBpbiBSR0JBIG9yIGltcGxlbWVudGF0aW9uIGRlZmluZWQgZm9ybWF0LiIpO3JldHVybn1sZXQgUHI9X3I9PT1BMSYmKF90LmhhcygiRVhUX2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0Iil8fGN0LmlzV2ViR0wyJiZfdC5oYXMoIkVYVF9jb2xvcl9idWZmZXJfZmxvYXQiKSk7aWYoX3IhPT1KZCYmYmUuY29udmVydChfcikhPT1sdC5nZXRQYXJhbWV0ZXIoMzU3MzgpJiYhKF9yPT09WGQmJihjdC5pc1dlYkdMMnx8X3QuaGFzKCJPRVNfdGV4dHVyZV9mbG9hdCIpfHxfdC5oYXMoIldFQkdMX2NvbG9yX2J1ZmZlcl9mbG9hdCIpKSkmJiFQcil7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IGluIFVuc2lnbmVkQnl0ZVR5cGUgb3IgaW1wbGVtZW50YXRpb24gZGVmaW5lZCB0eXBlLiIpO3JldHVybn1sdC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKDM2MTYwKT09PTM2MDUzP2d0Pj0wJiZndDw9Sy53aWR0aC14dCYmRXQ+PTAmJkV0PD1LLmhlaWdodC1GdCYmbHQucmVhZFBpeGVscyhndCxFdCx4dCxGdCxiZS5jb252ZXJ0KFhyKSxiZS5jb252ZXJ0KF9yKSxWZSk6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZWFkUGl4ZWxzIGZyb20gcmVuZGVyVGFyZ2V0IGZhaWxlZC4gRnJhbWVidWZmZXIgbm90IGNvbXBsZXRlLiIpfWZpbmFsbHl7bGV0IEtlPWIhPT1udWxsP2R0LmdldChiKS5fX3dlYmdsRnJhbWVidWZmZXI6bnVsbDtYLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxLZSl9fX0sdGhpcy5jb3B5RnJhbWVidWZmZXJUb1RleHR1cmU9ZnVuY3Rpb24oSyxndCxFdD0wKXtpZihndC5pc0ZyYW1lYnVmZmVyVGV4dHVyZSE9PSEwKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBjb3B5RnJhbWVidWZmZXJUb1RleHR1cmUoKSBjYW4gb25seSBiZSB1c2VkIHdpdGggRnJhbWVidWZmZXJUZXh0dXJlLiIpO3JldHVybn1sZXQgeHQ9TWF0aC5wb3coMiwtRXQpLEZ0PU1hdGguZmxvb3IoZ3QuaW1hZ2Uud2lkdGgqeHQpLFZlPU1hdGguZmxvb3IoZ3QuaW1hZ2UuaGVpZ2h0Knh0KTtxLnNldFRleHR1cmUyRChndCwwKSxsdC5jb3B5VGV4U3ViSW1hZ2UyRCgzNTUzLEV0LDAsMCxLLngsSy55LEZ0LFZlKSxYLnVuYmluZFRleHR1cmUoKX0sdGhpcy5jb3B5VGV4dHVyZVRvVGV4dHVyZT1mdW5jdGlvbihLLGd0LEV0LHh0PTApe2xldCBGdD1ndC5pbWFnZS53aWR0aCxWZT1ndC5pbWFnZS5oZWlnaHQsVWU9YmUuY29udmVydChFdC5mb3JtYXQpLHRyPWJlLmNvbnZlcnQoRXQudHlwZSk7cS5zZXRUZXh0dXJlMkQoRXQsMCksbHQucGl4ZWxTdG9yZWkoMzc0NDAsRXQuZmxpcFkpLGx0LnBpeGVsU3RvcmVpKDM3NDQxLEV0LnByZW11bHRpcGx5QWxwaGEpLGx0LnBpeGVsU3RvcmVpKDMzMTcsRXQudW5wYWNrQWxpZ25tZW50KSxndC5pc0RhdGFUZXh0dXJlP2x0LnRleFN1YkltYWdlMkQoMzU1Myx4dCxLLngsSy55LEZ0LFZlLFVlLHRyLGd0LmltYWdlLmRhdGEpOmd0LmlzQ29tcHJlc3NlZFRleHR1cmU/bHQuY29tcHJlc3NlZFRleFN1YkltYWdlMkQoMzU1Myx4dCxLLngsSy55LGd0Lm1pcG1hcHNbMF0ud2lkdGgsZ3QubWlwbWFwc1swXS5oZWlnaHQsVWUsZ3QubWlwbWFwc1swXS5kYXRhKTpsdC50ZXhTdWJJbWFnZTJEKDM1NTMseHQsSy54LEsueSxVZSx0cixndC5pbWFnZSkseHQ9PT0wJiZFdC5nZW5lcmF0ZU1pcG1hcHMmJmx0LmdlbmVyYXRlTWlwbWFwKDM1NTMpLFgudW5iaW5kVGV4dHVyZSgpfSx0aGlzLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q9ZnVuY3Rpb24oSyxndCxFdCx4dCxGdD0wKXtpZihnLmlzV2ViR0wxUmVuZGVyZXIpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlci5jb3B5VGV4dHVyZVRvVGV4dHVyZTNEOiBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyLiIpO3JldHVybn1sZXQgVmU9Sy5tYXgueC1LLm1pbi54KzEsVWU9Sy5tYXgueS1LLm1pbi55KzEsdHI9Sy5tYXguei1LLm1pbi56KzEsS2U9YmUuY29udmVydCh4dC5mb3JtYXQpLFhyPWJlLmNvbnZlcnQoeHQudHlwZSksX3I7aWYoeHQuaXNEYXRhVGV4dHVyZTNEKXEuc2V0VGV4dHVyZTNEKHh0LDApLF9yPTMyODc5O2Vsc2UgaWYoeHQuaXNEYXRhVGV4dHVyZTJEQXJyYXkpcS5zZXRUZXh0dXJlMkRBcnJheSh4dCwwKSxfcj0zNTg2NjtlbHNle2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlci5jb3B5VGV4dHVyZVRvVGV4dHVyZTNEOiBvbmx5IHN1cHBvcnRzIFRIUkVFLkRhdGFUZXh0dXJlM0QgYW5kIFRIUkVFLkRhdGFUZXh0dXJlMkRBcnJheS4iKTtyZXR1cm59bHQucGl4ZWxTdG9yZWkoMzc0NDAseHQuZmxpcFkpLGx0LnBpeGVsU3RvcmVpKDM3NDQxLHh0LnByZW11bHRpcGx5QWxwaGEpLGx0LnBpeGVsU3RvcmVpKDMzMTcseHQudW5wYWNrQWxpZ25tZW50KTtsZXQgUHI9bHQuZ2V0UGFyYW1ldGVyKDMzMTQpLFhuPWx0LmdldFBhcmFtZXRlcigzMjg3OCksaXA9bHQuZ2V0UGFyYW1ldGVyKDMzMTYpLGhtPWx0LmdldFBhcmFtZXRlcigzMzE1KSxtcj1sdC5nZXRQYXJhbWV0ZXIoMzI4NzcpLEJsPUV0LmlzQ29tcHJlc3NlZFRleHR1cmU/RXQubWlwbWFwc1swXTpFdC5pbWFnZTtsdC5waXhlbFN0b3JlaSgzMzE0LEJsLndpZHRoKSxsdC5waXhlbFN0b3JlaSgzMjg3OCxCbC5oZWlnaHQpLGx0LnBpeGVsU3RvcmVpKDMzMTYsSy5taW4ueCksbHQucGl4ZWxTdG9yZWkoMzMxNSxLLm1pbi55KSxsdC5waXhlbFN0b3JlaSgzMjg3NyxLLm1pbi56KSxFdC5pc0RhdGFUZXh0dXJlfHxFdC5pc0RhdGFUZXh0dXJlM0Q/bHQudGV4U3ViSW1hZ2UzRChfcixGdCxndC54LGd0LnksZ3QueixWZSxVZSx0cixLZSxYcixCbC5kYXRhKTpFdC5pc0NvbXByZXNzZWRUZXh0dXJlPyhjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXIuY29weVRleHR1cmVUb1RleHR1cmUzRDogdW50ZXN0ZWQgc3VwcG9ydCBmb3IgY29tcHJlc3NlZCBzcmNUZXh0dXJlLiIpLGx0LmNvbXByZXNzZWRUZXhTdWJJbWFnZTNEKF9yLEZ0LGd0LngsZ3QueSxndC56LFZlLFVlLHRyLEtlLEJsLmRhdGEpKTpsdC50ZXhTdWJJbWFnZTNEKF9yLEZ0LGd0LngsZ3QueSxndC56LFZlLFVlLHRyLEtlLFhyLEJsKSxsdC5waXhlbFN0b3JlaSgzMzE0LFByKSxsdC5waXhlbFN0b3JlaSgzMjg3OCxYbiksbHQucGl4ZWxTdG9yZWkoMzMxNixpcCksbHQucGl4ZWxTdG9yZWkoMzMxNSxobSksbHQucGl4ZWxTdG9yZWkoMzI4NzcsbXIpLEZ0PT09MCYmeHQuZ2VuZXJhdGVNaXBtYXBzJiZsdC5nZW5lcmF0ZU1pcG1hcChfciksWC51bmJpbmRUZXh0dXJlKCl9LHRoaXMuaW5pdFRleHR1cmU9ZnVuY3Rpb24oSyl7cS5zZXRUZXh0dXJlMkQoSywwKSxYLnVuYmluZFRleHR1cmUoKX0sdGhpcy5yZXNldFN0YXRlPWZ1bmN0aW9uKCl7eT0wLHg9MCxiPW51bGwsWC5yZXNldCgpLG50LnJlc2V0KCl9LHR5cGVvZiBfX1RIUkVFX0RFVlRPT0xTX18hPSJ1bmRlZmluZWQiJiZfX1RIUkVFX0RFVlRPT0xTX18uZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIm9ic2VydmUiLHtkZXRhaWw6dGhpc30pKX1ybi5wcm90b3R5cGUuaXNXZWJHTFJlbmRlcmVyPSEwO3ZhciBnVT1jbGFzcyBleHRlbmRzIHJue307Z1UucHJvdG90eXBlLmlzV2ViR0wxUmVuZGVyZXI9ITA7dmFyIHoxPWNsYXNze2NvbnN0cnVjdG9yKHQscj0yNWUtNSl7dGhpcy5uYW1lPSIiLHRoaXMuY29sb3I9bmV3IG5lKHQpLHRoaXMuZGVuc2l0eT1yfWNsb25lKCl7cmV0dXJuIG5ldyB6MSh0aGlzLmNvbG9yLHRoaXMuZGVuc2l0eSl9dG9KU09OKCl7cmV0dXJue3R5cGU6IkZvZ0V4cDIiLGNvbG9yOnRoaXMuY29sb3IuZ2V0SGV4KCksZGVuc2l0eTp0aGlzLmRlbnNpdHl9fX07ejEucHJvdG90eXBlLmlzRm9nRXhwMj0hMDt2YXIgRjE9Y2xhc3N7Y29uc3RydWN0b3IodCxyPTEsbj0xZTMpe3RoaXMubmFtZT0iIix0aGlzLmNvbG9yPW5ldyBuZSh0KSx0aGlzLm5lYXI9cix0aGlzLmZhcj1ufWNsb25lKCl7cmV0dXJuIG5ldyBGMSh0aGlzLmNvbG9yLHRoaXMubmVhcix0aGlzLmZhcil9dG9KU09OKCl7cmV0dXJue3R5cGU6IkZvZyIsY29sb3I6dGhpcy5jb2xvci5nZXRIZXgoKSxuZWFyOnRoaXMubmVhcixmYXI6dGhpcy5mYXJ9fX07RjEucHJvdG90eXBlLmlzRm9nPSEwO3ZhciBHMD1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IlNjZW5lIix0aGlzLmJhY2tncm91bmQ9bnVsbCx0aGlzLmVudmlyb25tZW50PW51bGwsdGhpcy5mb2c9bnVsbCx0aGlzLm92ZXJyaWRlTWF0ZXJpYWw9bnVsbCx0aGlzLmF1dG9VcGRhdGU9ITAsdHlwZW9mIF9fVEhSRUVfREVWVE9PTFNfXyE9InVuZGVmaW5lZCImJl9fVEhSRUVfREVWVE9PTFNfXy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgib2JzZXJ2ZSIse2RldGFpbDp0aGlzfSkpfWNvcHkodCxyKXtyZXR1cm4gc3VwZXIuY29weSh0LHIpLHQuYmFja2dyb3VuZCE9PW51bGwmJih0aGlzLmJhY2tncm91bmQ9dC5iYWNrZ3JvdW5kLmNsb25lKCkpLHQuZW52aXJvbm1lbnQhPT1udWxsJiYodGhpcy5lbnZpcm9ubWVudD10LmVudmlyb25tZW50LmNsb25lKCkpLHQuZm9nIT09bnVsbCYmKHRoaXMuZm9nPXQuZm9nLmNsb25lKCkpLHQub3ZlcnJpZGVNYXRlcmlhbCE9PW51bGwmJih0aGlzLm92ZXJyaWRlTWF0ZXJpYWw9dC5vdmVycmlkZU1hdGVyaWFsLmNsb25lKCkpLHRoaXMuYXV0b1VwZGF0ZT10LmF1dG9VcGRhdGUsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPXQubWF0cml4QXV0b1VwZGF0ZSx0aGlzfXRvSlNPTih0KXtsZXQgcj1zdXBlci50b0pTT04odCk7cmV0dXJuIHRoaXMuZm9nIT09bnVsbCYmKHIub2JqZWN0LmZvZz10aGlzLmZvZy50b0pTT04oKSkscn19O0cwLnByb3RvdHlwZS5pc1NjZW5lPSEwO3ZhciBybT1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIpe3RoaXMuYXJyYXk9dCx0aGlzLnN0cmlkZT1yLHRoaXMuY291bnQ9dCE9PXZvaWQgMD90Lmxlbmd0aC9yOjAsdGhpcy51c2FnZT1XMyx0aGlzLnVwZGF0ZVJhbmdlPXtvZmZzZXQ6MCxjb3VudDotMX0sdGhpcy52ZXJzaW9uPTAsdGhpcy51dWlkPURsKCl9b25VcGxvYWRDYWxsYmFjaygpe31zZXQgbmVlZHNVcGRhdGUodCl7dD09PSEwJiZ0aGlzLnZlcnNpb24rK31zZXRVc2FnZSh0KXtyZXR1cm4gdGhpcy51c2FnZT10LHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5hcnJheT1uZXcgdC5hcnJheS5jb25zdHJ1Y3Rvcih0LmFycmF5KSx0aGlzLmNvdW50PXQuY291bnQsdGhpcy5zdHJpZGU9dC5zdHJpZGUsdGhpcy51c2FnZT10LnVzYWdlLHRoaXN9Y29weUF0KHQscixuKXt0Kj10aGlzLnN0cmlkZSxuKj1yLnN0cmlkZTtmb3IobGV0IGk9MCxvPXRoaXMuc3RyaWRlO2k8bztpKyspdGhpcy5hcnJheVt0K2ldPXIuYXJyYXlbbitpXTtyZXR1cm4gdGhpc31zZXQodCxyPTApe3JldHVybiB0aGlzLmFycmF5LnNldCh0LHIpLHRoaXN9Y2xvbmUodCl7dC5hcnJheUJ1ZmZlcnM9PT12b2lkIDAmJih0LmFycmF5QnVmZmVycz17fSksdGhpcy5hcnJheS5idWZmZXIuX3V1aWQ9PT12b2lkIDAmJih0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZD1EbCgpKSx0LmFycmF5QnVmZmVyc1t0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZF09PT12b2lkIDAmJih0LmFycmF5QnVmZmVyc1t0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZF09dGhpcy5hcnJheS5zbGljZSgwKS5idWZmZXIpO2xldCByPW5ldyB0aGlzLmFycmF5LmNvbnN0cnVjdG9yKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXSksbj1uZXcgdGhpcy5jb25zdHJ1Y3RvcihyLHRoaXMuc3RyaWRlKTtyZXR1cm4gbi5zZXRVc2FnZSh0aGlzLnVzYWdlKSxufW9uVXBsb2FkKHQpe3JldHVybiB0aGlzLm9uVXBsb2FkQ2FsbGJhY2s9dCx0aGlzfXRvSlNPTih0KXtyZXR1cm4gdC5hcnJheUJ1ZmZlcnM9PT12b2lkIDAmJih0LmFycmF5QnVmZmVycz17fSksdGhpcy5hcnJheS5idWZmZXIuX3V1aWQ9PT12b2lkIDAmJih0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZD1EbCgpKSx0LmFycmF5QnVmZmVyc1t0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZF09PT12b2lkIDAmJih0LmFycmF5QnVmZmVyc1t0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZF09QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobmV3IFVpbnQzMkFycmF5KHRoaXMuYXJyYXkuYnVmZmVyKSkpLHt1dWlkOnRoaXMudXVpZCxidWZmZXI6dGhpcy5hcnJheS5idWZmZXIuX3V1aWQsdHlwZTp0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsc3RyaWRlOnRoaXMuc3RyaWRlfX19O3JtLnByb3RvdHlwZS5pc0ludGVybGVhdmVkQnVmZmVyPSEwO3ZhciBBaT1uZXcgaixlcD1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpPSExKXt0aGlzLm5hbWU9IiIsdGhpcy5kYXRhPXQsdGhpcy5pdGVtU2l6ZT1yLHRoaXMub2Zmc2V0PW4sdGhpcy5ub3JtYWxpemVkPWk9PT0hMH1nZXQgY291bnQoKXtyZXR1cm4gdGhpcy5kYXRhLmNvdW50fWdldCBhcnJheSgpe3JldHVybiB0aGlzLmRhdGEuYXJyYXl9c2V0IG5lZWRzVXBkYXRlKHQpe3RoaXMuZGF0YS5uZWVkc1VwZGF0ZT10fWFwcGx5TWF0cml4NCh0KXtmb3IobGV0IHI9MCxuPXRoaXMuZGF0YS5jb3VudDtyPG47cisrKUFpLng9dGhpcy5nZXRYKHIpLEFpLnk9dGhpcy5nZXRZKHIpLEFpLno9dGhpcy5nZXRaKHIpLEFpLmFwcGx5TWF0cml4NCh0KSx0aGlzLnNldFhZWihyLEFpLngsQWkueSxBaS56KTtyZXR1cm4gdGhpc31hcHBseU5vcm1hbE1hdHJpeCh0KXtmb3IobGV0IHI9MCxuPXRoaXMuY291bnQ7cjxuO3IrKylBaS54PXRoaXMuZ2V0WChyKSxBaS55PXRoaXMuZ2V0WShyKSxBaS56PXRoaXMuZ2V0WihyKSxBaS5hcHBseU5vcm1hbE1hdHJpeCh0KSx0aGlzLnNldFhZWihyLEFpLngsQWkueSxBaS56KTtyZXR1cm4gdGhpc310cmFuc2Zvcm1EaXJlY3Rpb24odCl7Zm9yKGxldCByPTAsbj10aGlzLmNvdW50O3I8bjtyKyspQWkueD10aGlzLmdldFgociksQWkueT10aGlzLmdldFkociksQWkuej10aGlzLmdldFoociksQWkudHJhbnNmb3JtRGlyZWN0aW9uKHQpLHRoaXMuc2V0WFlaKHIsQWkueCxBaS55LEFpLnopO3JldHVybiB0aGlzfXNldFgodCxyKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldF09cix0aGlzfXNldFkodCxyKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsxXT1yLHRoaXN9c2V0Wih0LHIpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzJdPXIsdGhpc31zZXRXKHQscil7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrM109cix0aGlzfWdldFgodCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXRdfWdldFkodCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMV19Z2V0Wih0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsyXX1nZXRXKHQpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzNdfXNldFhZKHQscixuKXtyZXR1cm4gdD10KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQsdGhpcy5kYXRhLmFycmF5W3QrMF09cix0aGlzLmRhdGEuYXJyYXlbdCsxXT1uLHRoaXN9c2V0WFlaKHQscixuLGkpe3JldHVybiB0PXQqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCx0aGlzLmRhdGEuYXJyYXlbdCswXT1yLHRoaXMuZGF0YS5hcnJheVt0KzFdPW4sdGhpcy5kYXRhLmFycmF5W3QrMl09aSx0aGlzfXNldFhZWlcodCxyLG4saSxvKXtyZXR1cm4gdD10KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQsdGhpcy5kYXRhLmFycmF5W3QrMF09cix0aGlzLmRhdGEuYXJyYXlbdCsxXT1uLHRoaXMuZGF0YS5hcnJheVt0KzJdPWksdGhpcy5kYXRhLmFycmF5W3QrM109byx0aGlzfWNsb25lKHQpe2lmKHQ9PT12b2lkIDApe2NvbnNvbGUubG9nKCJUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZS5jbG9uZSgpOiBDbG9uaW5nIGFuIGludGVybGF2ZWQgYnVmZmVyIGF0dHJpYnV0ZSB3aWxsIGRlaW50ZXJsZWF2ZSBidWZmZXIgZGF0YS4iKTtsZXQgcj1bXTtmb3IobGV0IG49MDtuPHRoaXMuY291bnQ7bisrKXtsZXQgaT1uKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQ7Zm9yKGxldCBvPTA7bzx0aGlzLml0ZW1TaXplO28rKylyLnB1c2godGhpcy5kYXRhLmFycmF5W2krb10pfXJldHVybiBuZXcgSmUobmV3IHRoaXMuYXJyYXkuY29uc3RydWN0b3IociksdGhpcy5pdGVtU2l6ZSx0aGlzLm5vcm1hbGl6ZWQpfWVsc2UgcmV0dXJuIHQuaW50ZXJsZWF2ZWRCdWZmZXJzPT09dm9pZCAwJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnM9e30pLHQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXT09PXZvaWQgMCYmKHQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXT10aGlzLmRhdGEuY2xvbmUodCkpLG5ldyBlcCh0LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF0sdGhpcy5pdGVtU2l6ZSx0aGlzLm9mZnNldCx0aGlzLm5vcm1hbGl6ZWQpfXRvSlNPTih0KXtpZih0PT09dm9pZCAwKXtjb25zb2xlLmxvZygiVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUudG9KU09OKCk6IFNlcmlhbGl6aW5nIGFuIGludGVybGF2ZWQgYnVmZmVyIGF0dHJpYnV0ZSB3aWxsIGRlaW50ZXJsZWF2ZSBidWZmZXIgZGF0YS4iKTtsZXQgcj1bXTtmb3IobGV0IG49MDtuPHRoaXMuY291bnQ7bisrKXtsZXQgaT1uKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQ7Zm9yKGxldCBvPTA7bzx0aGlzLml0ZW1TaXplO28rKylyLnB1c2godGhpcy5kYXRhLmFycmF5W2krb10pfXJldHVybntpdGVtU2l6ZTp0aGlzLml0ZW1TaXplLHR5cGU6dGhpcy5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLGFycmF5OnIsbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9fWVsc2UgcmV0dXJuIHQuaW50ZXJsZWF2ZWRCdWZmZXJzPT09dm9pZCAwJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnM9e30pLHQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXT09PXZvaWQgMCYmKHQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXT10aGlzLmRhdGEudG9KU09OKHQpKSx7aXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZTohMCxpdGVtU2l6ZTp0aGlzLml0ZW1TaXplLGRhdGE6dGhpcy5kYXRhLnV1aWQsb2Zmc2V0OnRoaXMub2Zmc2V0LG5vcm1hbGl6ZWQ6dGhpcy5ub3JtYWxpemVkfX19O2VwLnByb3RvdHlwZS5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlPSEwO3ZhciBpTT1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJTcHJpdGVNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgbmUoMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMucm90YXRpb249MCx0aGlzLnNpemVBdHRlbnVhdGlvbj0hMCx0aGlzLnRyYW5zcGFyZW50PSEwLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLnJvdGF0aW9uPXQucm90YXRpb24sdGhpcy5zaXplQXR0ZW51YXRpb249dC5zaXplQXR0ZW51YXRpb24sdGhpc319O2lNLnByb3RvdHlwZS5pc1Nwcml0ZU1hdGVyaWFsPSEwO3ZhciBOMyxEUD1uZXcgaixEMz1uZXcgaixPMz1uZXcgaix6Mz1uZXcgTHQsT1A9bmV3IEx0LHRwZT1uZXcgTWUsTFY9bmV3IGoselA9bmV3IGosa1Y9bmV3IGosWnVlPW5ldyBMdCxkdXQ9bmV3IEx0LEp1ZT1uZXcgTHQsb009Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcih0KXtpZihzdXBlcigpLHRoaXMudHlwZT0iU3ByaXRlIixOMz09PXZvaWQgMCl7TjM9bmV3IFBlO2xldCByPW5ldyBGbG9hdDMyQXJyYXkoWy0uNSwtLjUsMCwwLDAsLjUsLS41LDAsMSwwLC41LC41LDAsMSwxLC0uNSwuNSwwLDAsMV0pLG49bmV3IHJtKHIsNSk7TjMuc2V0SW5kZXgoWzAsMSwyLDAsMiwzXSksTjMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGVwKG4sMywwLCExKSksTjMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IGVwKG4sMiwzLCExKSl9dGhpcy5nZW9tZXRyeT1OMyx0aGlzLm1hdGVyaWFsPXQhPT12b2lkIDA/dDpuZXcgaU0sdGhpcy5jZW50ZXI9bmV3IEx0KC41LC41KX1yYXljYXN0KHQscil7dC5jYW1lcmE9PT1udWxsJiZjb25zb2xlLmVycm9yKCdUSFJFRS5TcHJpdGU6ICJSYXljYXN0ZXIuY2FtZXJhIiBuZWVkcyB0byBiZSBzZXQgaW4gb3JkZXIgdG8gcmF5Y2FzdCBhZ2FpbnN0IHNwcml0ZXMuJyksRDMuc2V0RnJvbU1hdHJpeFNjYWxlKHRoaXMubWF0cml4V29ybGQpLHRwZS5jb3B5KHQuY2FtZXJhLm1hdHJpeFdvcmxkKSx0aGlzLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKHQuY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSx0aGlzLm1hdHJpeFdvcmxkKSxPMy5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tb2RlbFZpZXdNYXRyaXgpLHQuY2FtZXJhLmlzUGVyc3BlY3RpdmVDYW1lcmEmJnRoaXMubWF0ZXJpYWwuc2l6ZUF0dGVudWF0aW9uPT09ITEmJkQzLm11bHRpcGx5U2NhbGFyKC1PMy56KTtsZXQgbj10aGlzLm1hdGVyaWFsLnJvdGF0aW9uLGksbztuIT09MCYmKG89TWF0aC5jb3MobiksaT1NYXRoLnNpbihuKSk7bGV0IGE9dGhpcy5jZW50ZXI7UlYoTFYuc2V0KC0uNSwtLjUsMCksTzMsYSxEMyxpLG8pLFJWKHpQLnNldCguNSwtLjUsMCksTzMsYSxEMyxpLG8pLFJWKGtWLnNldCguNSwuNSwwKSxPMyxhLEQzLGksbyksWnVlLnNldCgwLDApLGR1dC5zZXQoMSwwKSxKdWUuc2V0KDEsMSk7bGV0IHM9dC5yYXkuaW50ZXJzZWN0VHJpYW5nbGUoTFYselAsa1YsITEsRFApO2lmKHM9PT1udWxsJiYoUlYoelAuc2V0KC0uNSwuNSwwKSxPMyxhLEQzLGksbyksZHV0LnNldCgwLDEpLHM9dC5yYXkuaW50ZXJzZWN0VHJpYW5nbGUoTFYsa1YselAsITEsRFApLHM9PT1udWxsKSlyZXR1cm47bGV0IGw9dC5yYXkub3JpZ2luLmRpc3RhbmNlVG8oRFApO2w8dC5uZWFyfHxsPnQuZmFyfHxyLnB1c2goe2Rpc3RhbmNlOmwscG9pbnQ6RFAuY2xvbmUoKSx1djpvaS5nZXRVVihEUCxMVix6UCxrVixadWUsZHV0LEp1ZSxuZXcgTHQpLGZhY2U6bnVsbCxvYmplY3Q6dGhpc30pfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdC5jZW50ZXIhPT12b2lkIDAmJnRoaXMuY2VudGVyLmNvcHkodC5jZW50ZXIpLHRoaXMubWF0ZXJpYWw9dC5tYXRlcmlhbCx0aGlzfX07b00ucHJvdG90eXBlLmlzU3ByaXRlPSEwO2Z1bmN0aW9uIFJWKGUsdCxyLG4saSxvKXt6My5zdWJWZWN0b3JzKGUscikuYWRkU2NhbGFyKC41KS5tdWx0aXBseShuKSxpIT09dm9pZCAwPyhPUC54PW8qejMueC1pKnozLnksT1AueT1pKnozLngrbyp6My55KTpPUC5jb3B5KHozKSxlLmNvcHkodCksZS54Kz1PUC54LGUueSs9T1AueSxlLmFwcGx5TWF0cml4NCh0cGUpfXZhciBOVj1uZXcgaixRdWU9bmV3IGosX1U9Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fY3VycmVudExldmVsPTAsdGhpcy50eXBlPSJMT0QiLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse2xldmVsczp7ZW51bWVyYWJsZTohMCx2YWx1ZTpbXX0saXNMT0Q6e3ZhbHVlOiEwfX0pLHRoaXMuYXV0b1VwZGF0ZT0hMH1jb3B5KHQpe3N1cGVyLmNvcHkodCwhMSk7bGV0IHI9dC5sZXZlbHM7Zm9yKGxldCBuPTAsaT1yLmxlbmd0aDtuPGk7bisrKXtsZXQgbz1yW25dO3RoaXMuYWRkTGV2ZWwoby5vYmplY3QuY2xvbmUoKSxvLmRpc3RhbmNlKX1yZXR1cm4gdGhpcy5hdXRvVXBkYXRlPXQuYXV0b1VwZGF0ZSx0aGlzfWFkZExldmVsKHQscj0wKXtyPU1hdGguYWJzKHIpO2xldCBuPXRoaXMubGV2ZWxzLGk7Zm9yKGk9MDtpPG4ubGVuZ3RoJiYhKHI8bltpXS5kaXN0YW5jZSk7aSsrKTtyZXR1cm4gbi5zcGxpY2UoaSwwLHtkaXN0YW5jZTpyLG9iamVjdDp0fSksdGhpcy5hZGQodCksdGhpc31nZXRDdXJyZW50TGV2ZWwoKXtyZXR1cm4gdGhpcy5fY3VycmVudExldmVsfWdldE9iamVjdEZvckRpc3RhbmNlKHQpe2xldCByPXRoaXMubGV2ZWxzO2lmKHIubGVuZ3RoPjApe2xldCBuLGk7Zm9yKG49MSxpPXIubGVuZ3RoO248aSYmISh0PHJbbl0uZGlzdGFuY2UpO24rKyk7cmV0dXJuIHJbbi0xXS5vYmplY3R9cmV0dXJuIG51bGx9cmF5Y2FzdCh0LHIpe2lmKHRoaXMubGV2ZWxzLmxlbmd0aD4wKXtOVi5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCk7bGV0IGk9dC5yYXkub3JpZ2luLmRpc3RhbmNlVG8oTlYpO3RoaXMuZ2V0T2JqZWN0Rm9yRGlzdGFuY2UoaSkucmF5Y2FzdCh0LHIpfX11cGRhdGUodCl7bGV0IHI9dGhpcy5sZXZlbHM7aWYoci5sZW5ndGg+MSl7TlYuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQubWF0cml4V29ybGQpLFF1ZS5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCk7bGV0IG49TlYuZGlzdGFuY2VUbyhRdWUpL3Quem9vbTtyWzBdLm9iamVjdC52aXNpYmxlPSEwO2xldCBpLG87Zm9yKGk9MSxvPXIubGVuZ3RoO2k8byYmbj49cltpXS5kaXN0YW5jZTtpKyspcltpLTFdLm9iamVjdC52aXNpYmxlPSExLHJbaV0ub2JqZWN0LnZpc2libGU9ITA7Zm9yKHRoaXMuX2N1cnJlbnRMZXZlbD1pLTE7aTxvO2krKylyW2ldLm9iamVjdC52aXNpYmxlPSExfX10b0pTT04odCl7bGV0IHI9c3VwZXIudG9KU09OKHQpO3RoaXMuYXV0b1VwZGF0ZT09PSExJiYoci5vYmplY3QuYXV0b1VwZGF0ZT0hMSksci5vYmplY3QubGV2ZWxzPVtdO2xldCBuPXRoaXMubGV2ZWxzO2ZvcihsZXQgaT0wLG89bi5sZW5ndGg7aTxvO2krKyl7bGV0IGE9bltpXTtyLm9iamVjdC5sZXZlbHMucHVzaCh7b2JqZWN0OmEub2JqZWN0LnV1aWQsZGlzdGFuY2U6YS5kaXN0YW5jZX0pfXJldHVybiByfX0sdGhlPW5ldyBqLGVoZT1uZXcgZW4scmhlPW5ldyBlbixEZ3I9bmV3IGosbmhlPW5ldyBNZSxhTT1jbGFzcyBleHRlbmRzIHRpe2NvbnN0cnVjdG9yKHQscil7c3VwZXIodCxyKSx0aGlzLnR5cGU9IlNraW5uZWRNZXNoIix0aGlzLmJpbmRNb2RlPSJhdHRhY2hlZCIsdGhpcy5iaW5kTWF0cml4PW5ldyBNZSx0aGlzLmJpbmRNYXRyaXhJbnZlcnNlPW5ldyBNZX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuYmluZE1vZGU9dC5iaW5kTW9kZSx0aGlzLmJpbmRNYXRyaXguY29weSh0LmJpbmRNYXRyaXgpLHRoaXMuYmluZE1hdHJpeEludmVyc2UuY29weSh0LmJpbmRNYXRyaXhJbnZlcnNlKSx0aGlzLnNrZWxldG9uPXQuc2tlbGV0b24sdGhpc31iaW5kKHQscil7dGhpcy5za2VsZXRvbj10LHI9PT12b2lkIDAmJih0aGlzLnVwZGF0ZU1hdHJpeFdvcmxkKCEwKSx0aGlzLnNrZWxldG9uLmNhbGN1bGF0ZUludmVyc2VzKCkscj10aGlzLm1hdHJpeFdvcmxkKSx0aGlzLmJpbmRNYXRyaXguY29weShyKSx0aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkocikuaW52ZXJ0KCl9cG9zZSgpe3RoaXMuc2tlbGV0b24ucG9zZSgpfW5vcm1hbGl6ZVNraW5XZWlnaHRzKCl7bGV0IHQ9bmV3IGVuLHI9dGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnNraW5XZWlnaHQ7Zm9yKGxldCBuPTAsaT1yLmNvdW50O248aTtuKyspe3QueD1yLmdldFgobiksdC55PXIuZ2V0WShuKSx0Lno9ci5nZXRaKG4pLHQudz1yLmdldFcobik7bGV0IG89MS90Lm1hbmhhdHRhbkxlbmd0aCgpO28hPT0xLzA/dC5tdWx0aXBseVNjYWxhcihvKTp0LnNldCgxLDAsMCwwKSxyLnNldFhZWlcobix0LngsdC55LHQueix0LncpfX11cGRhdGVNYXRyaXhXb3JsZCh0KXtzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KSx0aGlzLmJpbmRNb2RlPT09ImF0dGFjaGVkIj90aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk6dGhpcy5iaW5kTW9kZT09PSJkZXRhY2hlZCI/dGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMuYmluZE1hdHJpeCkuaW52ZXJ0KCk6Y29uc29sZS53YXJuKCJUSFJFRS5Ta2lubmVkTWVzaDogVW5yZWNvZ25pemVkIGJpbmRNb2RlOiAiK3RoaXMuYmluZE1vZGUpfWJvbmVUcmFuc2Zvcm0odCxyKXtsZXQgbj10aGlzLnNrZWxldG9uLGk9dGhpcy5nZW9tZXRyeTtlaGUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShpLmF0dHJpYnV0ZXMuc2tpbkluZGV4LHQpLHJoZS5mcm9tQnVmZmVyQXR0cmlidXRlKGkuYXR0cmlidXRlcy5za2luV2VpZ2h0LHQpLHRoZS5jb3B5KHIpLmFwcGx5TWF0cml4NCh0aGlzLmJpbmRNYXRyaXgpLHIuc2V0KDAsMCwwKTtmb3IobGV0IG89MDtvPDQ7bysrKXtsZXQgYT1yaGUuZ2V0Q29tcG9uZW50KG8pO2lmKGEhPT0wKXtsZXQgcz1laGUuZ2V0Q29tcG9uZW50KG8pO25oZS5tdWx0aXBseU1hdHJpY2VzKG4uYm9uZXNbc10ubWF0cml4V29ybGQsbi5ib25lSW52ZXJzZXNbc10pLHIuYWRkU2NhbGVkVmVjdG9yKERnci5jb3B5KHRoZSkuYXBwbHlNYXRyaXg0KG5oZSksYSl9fXJldHVybiByLmFwcGx5TWF0cml4NCh0aGlzLmJpbmRNYXRyaXhJbnZlcnNlKX19O2FNLnByb3RvdHlwZS5pc1NraW5uZWRNZXNoPSEwO3ZhciBzTT1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkJvbmUifX07c00ucHJvdG90eXBlLmlzQm9uZT0hMDt2YXIgUWQ9Y2xhc3MgZXh0ZW5kcyB2aXtjb25zdHJ1Y3Rvcih0PW51bGwscj0xLG49MSxpLG8sYSxzLGwsYz1MaSx1PUxpLGgsZil7c3VwZXIobnVsbCxhLHMsbCxjLHUsaSxvLGgsZiksdGhpcy5pbWFnZT17ZGF0YTp0LHdpZHRoOnIsaGVpZ2h0Om59LHRoaXMubWFnRmlsdGVyPWMsdGhpcy5taW5GaWx0ZXI9dSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMSx0aGlzLmZsaXBZPSExLHRoaXMudW5wYWNrQWxpZ25tZW50PTF9fTtRZC5wcm90b3R5cGUuaXNEYXRhVGV4dHVyZT0hMDt2YXIgaWhlPW5ldyBNZSxPZ3I9bmV3IE1lLGxNPWNsYXNze2NvbnN0cnVjdG9yKHQ9W10scj1bXSl7dGhpcy51dWlkPURsKCksdGhpcy5ib25lcz10LnNsaWNlKDApLHRoaXMuYm9uZUludmVyc2VzPXIsdGhpcy5ib25lTWF0cmljZXM9bnVsbCx0aGlzLmJvbmVUZXh0dXJlPW51bGwsdGhpcy5ib25lVGV4dHVyZVNpemU9MCx0aGlzLmZyYW1lPS0xLHRoaXMuaW5pdCgpfWluaXQoKXtsZXQgdD10aGlzLmJvbmVzLHI9dGhpcy5ib25lSW52ZXJzZXM7aWYodGhpcy5ib25lTWF0cmljZXM9bmV3IEZsb2F0MzJBcnJheSh0Lmxlbmd0aCoxNiksci5sZW5ndGg9PT0wKXRoaXMuY2FsY3VsYXRlSW52ZXJzZXMoKTtlbHNlIGlmKHQubGVuZ3RoIT09ci5sZW5ndGgpe2NvbnNvbGUud2FybigiVEhSRUUuU2tlbGV0b246IE51bWJlciBvZiBpbnZlcnNlIGJvbmUgbWF0cmljZXMgZG9lcyBub3QgbWF0Y2ggYW1vdW50IG9mIGJvbmVzLiIpLHRoaXMuYm9uZUludmVyc2VzPVtdO2ZvcihsZXQgbj0wLGk9dGhpcy5ib25lcy5sZW5ndGg7bjxpO24rKyl0aGlzLmJvbmVJbnZlcnNlcy5wdXNoKG5ldyBNZSl9fWNhbGN1bGF0ZUludmVyc2VzKCl7dGhpcy5ib25lSW52ZXJzZXMubGVuZ3RoPTA7Zm9yKGxldCB0PTAscj10aGlzLmJvbmVzLmxlbmd0aDt0PHI7dCsrKXtsZXQgbj1uZXcgTWU7dGhpcy5ib25lc1t0XSYmbi5jb3B5KHRoaXMuYm9uZXNbdF0ubWF0cml4V29ybGQpLmludmVydCgpLHRoaXMuYm9uZUludmVyc2VzLnB1c2gobil9fXBvc2UoKXtmb3IobGV0IHQ9MCxyPXRoaXMuYm9uZXMubGVuZ3RoO3Q8cjt0Kyspe2xldCBuPXRoaXMuYm9uZXNbdF07biYmbi5tYXRyaXhXb3JsZC5jb3B5KHRoaXMuYm9uZUludmVyc2VzW3RdKS5pbnZlcnQoKX1mb3IobGV0IHQ9MCxyPXRoaXMuYm9uZXMubGVuZ3RoO3Q8cjt0Kyspe2xldCBuPXRoaXMuYm9uZXNbdF07biYmKG4ucGFyZW50JiZuLnBhcmVudC5pc0JvbmU/KG4ubWF0cml4LmNvcHkobi5wYXJlbnQubWF0cml4V29ybGQpLmludmVydCgpLG4ubWF0cml4Lm11bHRpcGx5KG4ubWF0cml4V29ybGQpKTpuLm1hdHJpeC5jb3B5KG4ubWF0cml4V29ybGQpLG4ubWF0cml4LmRlY29tcG9zZShuLnBvc2l0aW9uLG4ucXVhdGVybmlvbixuLnNjYWxlKSl9fXVwZGF0ZSgpe2xldCB0PXRoaXMuYm9uZXMscj10aGlzLmJvbmVJbnZlcnNlcyxuPXRoaXMuYm9uZU1hdHJpY2VzLGk9dGhpcy5ib25lVGV4dHVyZTtmb3IobGV0IG89MCxhPXQubGVuZ3RoO288YTtvKyspe2xldCBzPXRbb10/dFtvXS5tYXRyaXhXb3JsZDpPZ3I7aWhlLm11bHRpcGx5TWF0cmljZXMocyxyW29dKSxpaGUudG9BcnJheShuLG8qMTYpfWkhPT1udWxsJiYoaS5uZWVkc1VwZGF0ZT0hMCl9Y2xvbmUoKXtyZXR1cm4gbmV3IGxNKHRoaXMuYm9uZXMsdGhpcy5ib25lSW52ZXJzZXMpfWNvbXB1dGVCb25lVGV4dHVyZSgpe2xldCB0PU1hdGguc3FydCh0aGlzLmJvbmVzLmxlbmd0aCo0KTt0PXpmZSh0KSx0PU1hdGgubWF4KHQsNCk7bGV0IHI9bmV3IEZsb2F0MzJBcnJheSh0KnQqNCk7ci5zZXQodGhpcy5ib25lTWF0cmljZXMpO2xldCBuPW5ldyBRZChyLHQsdCxRbyxYZCk7cmV0dXJuIG4ubmVlZHNVcGRhdGU9ITAsdGhpcy5ib25lTWF0cmljZXM9cix0aGlzLmJvbmVUZXh0dXJlPW4sdGhpcy5ib25lVGV4dHVyZVNpemU9dCx0aGlzfWdldEJvbmVCeU5hbWUodCl7Zm9yKGxldCByPTAsbj10aGlzLmJvbmVzLmxlbmd0aDtyPG47cisrKXtsZXQgaT10aGlzLmJvbmVzW3JdO2lmKGkubmFtZT09PXQpcmV0dXJuIGl9fWRpc3Bvc2UoKXt0aGlzLmJvbmVUZXh0dXJlIT09bnVsbCYmKHRoaXMuYm9uZVRleHR1cmUuZGlzcG9zZSgpLHRoaXMuYm9uZVRleHR1cmU9bnVsbCl9ZnJvbUpTT04odCxyKXt0aGlzLnV1aWQ9dC51dWlkO2ZvcihsZXQgbj0wLGk9dC5ib25lcy5sZW5ndGg7bjxpO24rKyl7bGV0IG89dC5ib25lc1tuXSxhPXJbb107YT09PXZvaWQgMCYmKGNvbnNvbGUud2FybigiVEhSRUUuU2tlbGV0b246IE5vIGJvbmUgZm91bmQgd2l0aCBVVUlEOiIsbyksYT1uZXcgc00pLHRoaXMuYm9uZXMucHVzaChhKSx0aGlzLmJvbmVJbnZlcnNlcy5wdXNoKG5ldyBNZSgpLmZyb21BcnJheSh0LmJvbmVJbnZlcnNlc1tuXSkpfXJldHVybiB0aGlzLmluaXQoKSx0aGlzfXRvSlNPTigpe2xldCB0PXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiU2tlbGV0b24iLGdlbmVyYXRvcjoiU2tlbGV0b24udG9KU09OIn0sYm9uZXM6W10sYm9uZUludmVyc2VzOltdfTt0LnV1aWQ9dGhpcy51dWlkO2xldCByPXRoaXMuYm9uZXMsbj10aGlzLmJvbmVJbnZlcnNlcztmb3IobGV0IGk9MCxvPXIubGVuZ3RoO2k8bztpKyspe2xldCBhPXJbaV07dC5ib25lcy5wdXNoKGEudXVpZCk7bGV0IHM9bltpXTt0LmJvbmVJbnZlcnNlcy5wdXNoKHMudG9BcnJheSgpKX1yZXR1cm4gdH19LG5tPWNsYXNzIGV4dGVuZHMgSmV7Y29uc3RydWN0b3IodCxyLG4saT0xKXt0eXBlb2Ygbj09Im51bWJlciImJihpPW4sbj0hMSxjb25zb2xlLmVycm9yKCJUSFJFRS5JbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU6IFRoZSBjb25zdHJ1Y3RvciBub3cgZXhwZWN0cyBub3JtYWxpemVkIGFzIHRoZSB0aGlyZCBhcmd1bWVudC4iKSksc3VwZXIodCxyLG4pLHRoaXMubWVzaFBlckF0dHJpYnV0ZT1pfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5tZXNoUGVyQXR0cmlidXRlPXQubWVzaFBlckF0dHJpYnV0ZSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0Lm1lc2hQZXJBdHRyaWJ1dGU9dGhpcy5tZXNoUGVyQXR0cmlidXRlLHQuaXNJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU9ITAsdH19O25tLnByb3RvdHlwZS5pc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZT0hMDt2YXIgb2hlPW5ldyBNZSxhaGU9bmV3IE1lLERWPVtdLEZQPW5ldyB0aSxpNj1jbGFzcyBleHRlbmRzIHRpe2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcih0LHIpLHRoaXMuaW5zdGFuY2VNYXRyaXg9bmV3IG5tKG5ldyBGbG9hdDMyQXJyYXkobioxNiksMTYpLHRoaXMuaW5zdGFuY2VDb2xvcj1udWxsLHRoaXMuY291bnQ9bix0aGlzLmZydXN0dW1DdWxsZWQ9ITF9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmluc3RhbmNlTWF0cml4LmNvcHkodC5pbnN0YW5jZU1hdHJpeCksdC5pbnN0YW5jZUNvbG9yIT09bnVsbCYmKHRoaXMuaW5zdGFuY2VDb2xvcj10Lmluc3RhbmNlQ29sb3IuY2xvbmUoKSksdGhpcy5jb3VudD10LmNvdW50LHRoaXN9Z2V0Q29sb3JBdCh0LHIpe3IuZnJvbUFycmF5KHRoaXMuaW5zdGFuY2VDb2xvci5hcnJheSx0KjMpfWdldE1hdHJpeEF0KHQscil7ci5mcm9tQXJyYXkodGhpcy5pbnN0YW5jZU1hdHJpeC5hcnJheSx0KjE2KX1yYXljYXN0KHQscil7bGV0IG49dGhpcy5tYXRyaXhXb3JsZCxpPXRoaXMuY291bnQ7aWYoRlAuZ2VvbWV0cnk9dGhpcy5nZW9tZXRyeSxGUC5tYXRlcmlhbD10aGlzLm1hdGVyaWFsLEZQLm1hdGVyaWFsIT09dm9pZCAwKWZvcihsZXQgbz0wO288aTtvKyspe3RoaXMuZ2V0TWF0cml4QXQobyxvaGUpLGFoZS5tdWx0aXBseU1hdHJpY2VzKG4sb2hlKSxGUC5tYXRyaXhXb3JsZD1haGUsRlAucmF5Y2FzdCh0LERWKTtmb3IobGV0IGE9MCxzPURWLmxlbmd0aDthPHM7YSsrKXtsZXQgbD1EVlthXTtsLmluc3RhbmNlSWQ9byxsLm9iamVjdD10aGlzLHIucHVzaChsKX1EVi5sZW5ndGg9MH19c2V0Q29sb3JBdCh0LHIpe3RoaXMuaW5zdGFuY2VDb2xvcj09PW51bGwmJih0aGlzLmluc3RhbmNlQ29sb3I9bmV3IG5tKG5ldyBGbG9hdDMyQXJyYXkodGhpcy5pbnN0YW5jZU1hdHJpeC5jb3VudCozKSwzKSksci50b0FycmF5KHRoaXMuaW5zdGFuY2VDb2xvci5hcnJheSx0KjMpfXNldE1hdHJpeEF0KHQscil7ci50b0FycmF5KHRoaXMuaW5zdGFuY2VNYXRyaXguYXJyYXksdCoxNil9dXBkYXRlTW9ycGhUYXJnZXRzKCl7fWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fTtpNi5wcm90b3R5cGUuaXNJbnN0YW5jZWRNZXNoPSEwO3ZhciBHaT1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJMaW5lQmFzaWNNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgbmUoMTY3NzcyMTUpLHRoaXMubGluZXdpZHRoPTEsdGhpcy5saW5lY2FwPSJyb3VuZCIsdGhpcy5saW5lam9pbj0icm91bmQiLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubGluZXdpZHRoPXQubGluZXdpZHRoLHRoaXMubGluZWNhcD10LmxpbmVjYXAsdGhpcy5saW5lam9pbj10LmxpbmVqb2luLHRoaXN9fTtHaS5wcm90b3R5cGUuaXNMaW5lQmFzaWNNYXRlcmlhbD0hMDt2YXIgc2hlPW5ldyBqLGxoZT1uZXcgaixjaGU9bmV3IE1lLG11dD1uZXcgUWYsT1Y9bmV3IEpmLGNoPWNsYXNzIGV4dGVuZHMgb3J7Y29uc3RydWN0b3IodD1uZXcgUGUscj1uZXcgR2kpe3N1cGVyKCksdGhpcy50eXBlPSJMaW5lIix0aGlzLmdlb21ldHJ5PXQsdGhpcy5tYXRlcmlhbD1yLHRoaXMudXBkYXRlTW9ycGhUYXJnZXRzKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLm1hdGVyaWFsPXQubWF0ZXJpYWwsdGhpcy5nZW9tZXRyeT10Lmdlb21ldHJ5LHRoaXN9Y29tcHV0ZUxpbmVEaXN0YW5jZXMoKXtsZXQgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSlpZih0LmluZGV4PT09bnVsbCl7bGV0IHI9dC5hdHRyaWJ1dGVzLnBvc2l0aW9uLG49WzBdO2ZvcihsZXQgaT0xLG89ci5jb3VudDtpPG87aSsrKXNoZS5mcm9tQnVmZmVyQXR0cmlidXRlKHIsaS0xKSxsaGUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLGkpLG5baV09bltpLTFdLG5baV0rPXNoZS5kaXN0YW5jZVRvKGxoZSk7dC5zZXRBdHRyaWJ1dGUoImxpbmVEaXN0YW5jZSIsbmV3IHhlKG4sMSkpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5MaW5lLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCk6IENvbXB1dGF0aW9uIG9ubHkgcG9zc2libGUgd2l0aCBub24taW5kZXhlZCBCdWZmZXJHZW9tZXRyeS4iKTtlbHNlIHQuaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZS5jb21wdXRlTGluZURpc3RhbmNlcygpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIik7cmV0dXJuIHRoaXN9cmF5Y2FzdCh0LHIpe2xldCBuPXRoaXMuZ2VvbWV0cnksaT10aGlzLm1hdHJpeFdvcmxkLG89dC5wYXJhbXMuTGluZS50aHJlc2hvbGQsYT1uLmRyYXdSYW5nZTtpZihuLmJvdW5kaW5nU3BoZXJlPT09bnVsbCYmbi5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSxPVi5jb3B5KG4uYm91bmRpbmdTcGhlcmUpLE9WLmFwcGx5TWF0cml4NChpKSxPVi5yYWRpdXMrPW8sdC5yYXkuaW50ZXJzZWN0c1NwaGVyZShPVik9PT0hMSlyZXR1cm47Y2hlLmNvcHkoaSkuaW52ZXJ0KCksbXV0LmNvcHkodC5yYXkpLmFwcGx5TWF0cml4NChjaGUpO2xldCBzPW8vKCh0aGlzLnNjYWxlLngrdGhpcy5zY2FsZS55K3RoaXMuc2NhbGUueikvMyksbD1zKnMsYz1uZXcgaix1PW5ldyBqLGg9bmV3IGosZj1uZXcgaixwPXRoaXMuaXNMaW5lU2VnbWVudHM/MjoxO2lmKG4uaXNCdWZmZXJHZW9tZXRyeSl7bGV0IGQ9bi5pbmRleCxfPW4uYXR0cmlidXRlcy5wb3NpdGlvbjtpZihkIT09bnVsbCl7bGV0IHk9TWF0aC5tYXgoMCxhLnN0YXJ0KSx4PU1hdGgubWluKGQuY291bnQsYS5zdGFydCthLmNvdW50KTtmb3IobGV0IGI9eSxTPXgtMTtiPFM7Yis9cCl7bGV0IEM9ZC5nZXRYKGIpLFA9ZC5nZXRYKGIrMSk7aWYoYy5mcm9tQnVmZmVyQXR0cmlidXRlKF8sQyksdS5mcm9tQnVmZmVyQXR0cmlidXRlKF8sUCksbXV0LmRpc3RhbmNlU3FUb1NlZ21lbnQoYyx1LGYsaCk+bCljb250aW51ZTtmLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKTtsZXQgTz10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhmKTtPPHQubmVhcnx8Tz50LmZhcnx8ci5wdXNoKHtkaXN0YW5jZTpPLHBvaW50OmguY2xvbmUoKS5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCksaW5kZXg6YixmYWNlOm51bGwsZmFjZUluZGV4Om51bGwsb2JqZWN0OnRoaXN9KX19ZWxzZXtsZXQgeT1NYXRoLm1heCgwLGEuc3RhcnQpLHg9TWF0aC5taW4oXy5jb3VudCxhLnN0YXJ0K2EuY291bnQpO2ZvcihsZXQgYj15LFM9eC0xO2I8UztiKz1wKXtpZihjLmZyb21CdWZmZXJBdHRyaWJ1dGUoXyxiKSx1LmZyb21CdWZmZXJBdHRyaWJ1dGUoXyxiKzEpLG11dC5kaXN0YW5jZVNxVG9TZWdtZW50KGMsdSxmLGgpPmwpY29udGludWU7Zi5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCk7bGV0IFA9dC5yYXkub3JpZ2luLmRpc3RhbmNlVG8oZik7UDx0Lm5lYXJ8fFA+dC5mYXJ8fHIucHVzaCh7ZGlzdGFuY2U6UCxwb2ludDpoLmNsb25lKCkuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpLGluZGV4OmIsZmFjZTpudWxsLGZhY2VJbmRleDpudWxsLG9iamVjdDp0aGlzfSl9fX1lbHNlIG4uaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZS5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX11cGRhdGVNb3JwaFRhcmdldHMoKXtsZXQgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSl7bGV0IHI9dC5tb3JwaEF0dHJpYnV0ZXMsbj1PYmplY3Qua2V5cyhyKTtpZihuLmxlbmd0aD4wKXtsZXQgaT1yW25bMF1dO2lmKGkhPT12b2lkIDApe3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPVtdLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5PXt9O2ZvcihsZXQgbz0wLGE9aS5sZW5ndGg7bzxhO28rKyl7bGV0IHM9aVtvXS5uYW1lfHxTdHJpbmcobyk7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMucHVzaCgwKSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtzXT1vfX19fWVsc2V7bGV0IHI9dC5tb3JwaFRhcmdldHM7ciE9PXZvaWQgMCYmci5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZS51cGRhdGVNb3JwaFRhcmdldHMoKSBkb2VzIG5vdCBzdXBwb3J0IFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19fTtjaC5wcm90b3R5cGUuaXNMaW5lPSEwO3ZhciB1aGU9bmV3IGosaGhlPW5ldyBqLFBhPWNsYXNzIGV4dGVuZHMgY2h7Y29uc3RydWN0b3IodCxyKXtzdXBlcih0LHIpLHRoaXMudHlwZT0iTGluZVNlZ21lbnRzIn1jb21wdXRlTGluZURpc3RhbmNlcygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KWlmKHQuaW5kZXg9PT1udWxsKXtsZXQgcj10LmF0dHJpYnV0ZXMucG9zaXRpb24sbj1bXTtmb3IobGV0IGk9MCxvPXIuY291bnQ7aTxvO2krPTIpdWhlLmZyb21CdWZmZXJBdHRyaWJ1dGUocixpKSxoaGUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLGkrMSksbltpXT1pPT09MD8wOm5baS0xXSxuW2krMV09bltpXSt1aGUuZGlzdGFuY2VUbyhoaGUpO3Quc2V0QXR0cmlidXRlKCJsaW5lRGlzdGFuY2UiLG5ldyB4ZShuLDEpKX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuTGluZVNlZ21lbnRzLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCk6IENvbXB1dGF0aW9uIG9ubHkgcG9zc2libGUgd2l0aCBub24taW5kZXhlZCBCdWZmZXJHZW9tZXRyeS4iKTtlbHNlIHQuaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZVNlZ21lbnRzLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKTtyZXR1cm4gdGhpc319O1BhLnByb3RvdHlwZS5pc0xpbmVTZWdtZW50cz0hMDt2YXIgbzY9Y2xhc3MgZXh0ZW5kcyBjaHtjb25zdHJ1Y3Rvcih0LHIpe3N1cGVyKHQsciksdGhpcy50eXBlPSJMaW5lTG9vcCJ9fTtvNi5wcm90b3R5cGUuaXNMaW5lTG9vcD0hMDt2YXIgaW09Y2xhc3MgZXh0ZW5kcyBxaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iUG9pbnRzTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IG5lKDE2Nzc3MjE1KSx0aGlzLm1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLnNpemU9MSx0aGlzLnNpemVBdHRlbnVhdGlvbj0hMCx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5zaXplPXQuc2l6ZSx0aGlzLnNpemVBdHRlbnVhdGlvbj10LnNpemVBdHRlbnVhdGlvbix0aGlzfX07aW0ucHJvdG90eXBlLmlzUG9pbnRzTWF0ZXJpYWw9ITA7dmFyIGZoZT1uZXcgTWUscmh0PW5ldyBRZix6Vj1uZXcgSmYsRlY9bmV3IGosb209Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcih0PW5ldyBQZSxyPW5ldyBpbSl7c3VwZXIoKSx0aGlzLnR5cGU9IlBvaW50cyIsdGhpcy5nZW9tZXRyeT10LHRoaXMubWF0ZXJpYWw9cix0aGlzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXMuZ2VvbWV0cnk9dC5nZW9tZXRyeSx0aGlzfXJheWNhc3QodCxyKXtsZXQgbj10aGlzLmdlb21ldHJ5LGk9dGhpcy5tYXRyaXhXb3JsZCxvPXQucGFyYW1zLlBvaW50cy50aHJlc2hvbGQsYT1uLmRyYXdSYW5nZTtpZihuLmJvdW5kaW5nU3BoZXJlPT09bnVsbCYmbi5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSx6Vi5jb3B5KG4uYm91bmRpbmdTcGhlcmUpLHpWLmFwcGx5TWF0cml4NChpKSx6Vi5yYWRpdXMrPW8sdC5yYXkuaW50ZXJzZWN0c1NwaGVyZSh6Vik9PT0hMSlyZXR1cm47ZmhlLmNvcHkoaSkuaW52ZXJ0KCkscmh0LmNvcHkodC5yYXkpLmFwcGx5TWF0cml4NChmaGUpO2xldCBzPW8vKCh0aGlzLnNjYWxlLngrdGhpcy5zY2FsZS55K3RoaXMuc2NhbGUueikvMyksbD1zKnM7aWYobi5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgYz1uLmluZGV4LGg9bi5hdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKGMhPT1udWxsKXtsZXQgZj1NYXRoLm1heCgwLGEuc3RhcnQpLHA9TWF0aC5taW4oYy5jb3VudCxhLnN0YXJ0K2EuY291bnQpO2ZvcihsZXQgZD1mLGc9cDtkPGc7ZCsrKXtsZXQgXz1jLmdldFgoZCk7RlYuZnJvbUJ1ZmZlckF0dHJpYnV0ZShoLF8pLHBoZShGVixfLGwsaSx0LHIsdGhpcyl9fWVsc2V7bGV0IGY9TWF0aC5tYXgoMCxhLnN0YXJ0KSxwPU1hdGgubWluKGguY291bnQsYS5zdGFydCthLmNvdW50KTtmb3IobGV0IGQ9ZixnPXA7ZDxnO2QrKylGVi5mcm9tQnVmZmVyQXR0cmlidXRlKGgsZCkscGhlKEZWLGQsbCxpLHQscix0aGlzKX19ZWxzZSBjb25zb2xlLmVycm9yKCJUSFJFRS5Qb2ludHMucmF5Y2FzdCgpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9dXBkYXRlTW9ycGhUYXJnZXRzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpe2xldCByPXQubW9ycGhBdHRyaWJ1dGVzLG49T2JqZWN0LmtleXMocik7aWYobi5sZW5ndGg+MCl7bGV0IGk9cltuWzBdXTtpZihpIT09dm9pZCAwKXt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcz1bXSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT17fTtmb3IobGV0IG89MCxhPWkubGVuZ3RoO288YTtvKyspe2xldCBzPWlbb10ubmFtZXx8U3RyaW5nKG8pO3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnB1c2goMCksdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnlbc109b319fX1lbHNle2xldCByPXQubW9ycGhUYXJnZXRzO3IhPT12b2lkIDAmJnIubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLlBvaW50cy51cGRhdGVNb3JwaFRhcmdldHMoKSBkb2VzIG5vdCBzdXBwb3J0IFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19fTtvbS5wcm90b3R5cGUuaXNQb2ludHM9ITA7ZnVuY3Rpb24gcGhlKGUsdCxyLG4saSxvLGEpe2xldCBzPXJodC5kaXN0YW5jZVNxVG9Qb2ludChlKTtpZihzPHIpe2xldCBsPW5ldyBqO3JodC5jbG9zZXN0UG9pbnRUb1BvaW50KGUsbCksbC5hcHBseU1hdHJpeDQobik7bGV0IGM9aS5yYXkub3JpZ2luLmRpc3RhbmNlVG8obCk7aWYoYzxpLm5lYXJ8fGM+aS5mYXIpcmV0dXJuO28ucHVzaCh7ZGlzdGFuY2U6YyxkaXN0YW5jZVRvUmF5Ok1hdGguc3FydChzKSxwb2ludDpsLGluZGV4OnQsZmFjZTpudWxsLG9iamVjdDphfSl9fXZhciB5VT1jbGFzcyBleHRlbmRzIHZpe2NvbnN0cnVjdG9yKHQscixuLGksbyxhLHMsbCxjKXtzdXBlcih0LHIsbixpLG8sYSxzLGwsYyksdGhpcy5taW5GaWx0ZXI9YSE9PXZvaWQgMD9hOmlpLHRoaXMubWFnRmlsdGVyPW8hPT12b2lkIDA/bzppaSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMTtsZXQgdT10aGlzO2Z1bmN0aW9uIGgoKXt1Lm5lZWRzVXBkYXRlPSEwLHQucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayhoKX0icmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayJpbiB0JiZ0LnJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2soaCl9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5pbWFnZSkuY29weSh0aGlzKX11cGRhdGUoKXtsZXQgdD10aGlzLmltYWdlOyJyZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrImluIHQ9PT0hMSYmdC5yZWFkeVN0YXRlPj10LkhBVkVfQ1VSUkVOVF9EQVRBJiYodGhpcy5uZWVkc1VwZGF0ZT0hMCl9fTt5VS5wcm90b3R5cGUuaXNWaWRlb1RleHR1cmU9ITA7dmFyIHZVPWNsYXNzIGV4dGVuZHMgdml7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKHt3aWR0aDp0LGhlaWdodDpyfSksdGhpcy5mb3JtYXQ9bix0aGlzLm1hZ0ZpbHRlcj1MaSx0aGlzLm1pbkZpbHRlcj1MaSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMSx0aGlzLm5lZWRzVXBkYXRlPSEwfX07dlUucHJvdG90eXBlLmlzRnJhbWVidWZmZXJUZXh0dXJlPSEwO3ZhciBhNj1jbGFzcyBleHRlbmRzIHZpe2NvbnN0cnVjdG9yKHQscixuLGksbyxhLHMsbCxjLHUsaCxmKXtzdXBlcihudWxsLGEscyxsLGMsdSxpLG8saCxmKSx0aGlzLmltYWdlPXt3aWR0aDpyLGhlaWdodDpufSx0aGlzLm1pcG1hcHM9dCx0aGlzLmZsaXBZPSExLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExfX07YTYucHJvdG90eXBlLmlzQ29tcHJlc3NlZFRleHR1cmU9ITA7dmFyIHhVPWNsYXNzIGV4dGVuZHMgdml7Y29uc3RydWN0b3IodCxyLG4saSxvLGEscyxsLGMpe3N1cGVyKHQscixuLGksbyxhLHMsbCxjKSx0aGlzLm5lZWRzVXBkYXRlPSEwfX07eFUucHJvdG90eXBlLmlzQ2FudmFzVGV4dHVyZT0hMDt2YXIgQjE9Y2xhc3MgZXh0ZW5kcyBQZXtjb25zdHJ1Y3Rvcih0PTEscj04LG49MCxpPU1hdGguUEkqMil7c3VwZXIoKSx0aGlzLnR5cGU9IkNpcmNsZUdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czp0LHNlZ21lbnRzOnIsdGhldGFTdGFydDpuLHRoZXRhTGVuZ3RoOml9LHI9TWF0aC5tYXgoMyxyKTtsZXQgbz1bXSxhPVtdLHM9W10sbD1bXSxjPW5ldyBqLHU9bmV3IEx0O2EucHVzaCgwLDAsMCkscy5wdXNoKDAsMCwxKSxsLnB1c2goLjUsLjUpO2ZvcihsZXQgaD0wLGY9MztoPD1yO2grKyxmKz0zKXtsZXQgcD1uK2gvcippO2MueD10Kk1hdGguY29zKHApLGMueT10Kk1hdGguc2luKHApLGEucHVzaChjLngsYy55LGMueikscy5wdXNoKDAsMCwxKSx1Lng9KGFbZl0vdCsxKS8yLHUueT0oYVtmKzFdL3QrMSkvMixsLnB1c2godS54LHUueSl9Zm9yKGxldCBoPTE7aDw9cjtoKyspby5wdXNoKGgsaCsxLDApO3RoaXMuc2V0SW5kZXgobyksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoYSwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IHhlKHMsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKGwsMikpfXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IEIxKHQucmFkaXVzLHQuc2VnbWVudHMsdC50aGV0YVN0YXJ0LHQudGhldGFMZW5ndGgpfX0sYW09Y2xhc3MgZXh0ZW5kcyBQZXtjb25zdHJ1Y3Rvcih0PTEscj0xLG49MSxpPTgsbz0xLGE9ITEscz0wLGw9TWF0aC5QSSoyKXtzdXBlcigpLHRoaXMudHlwZT0iQ3lsaW5kZXJHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXNUb3A6dCxyYWRpdXNCb3R0b206cixoZWlnaHQ6bixyYWRpYWxTZWdtZW50czppLGhlaWdodFNlZ21lbnRzOm8sb3BlbkVuZGVkOmEsdGhldGFTdGFydDpzLHRoZXRhTGVuZ3RoOmx9O2xldCBjPXRoaXM7aT1NYXRoLmZsb29yKGkpLG89TWF0aC5mbG9vcihvKTtsZXQgdT1bXSxoPVtdLGY9W10scD1bXSxkPTAsZz1bXSxfPW4vMix5PTA7eCgpLGE9PT0hMSYmKHQ+MCYmYighMCkscj4wJiZiKCExKSksdGhpcy5zZXRJbmRleCh1KSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShoLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgeGUoZiwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgeGUocCwyKSk7ZnVuY3Rpb24geCgpe2xldCBTPW5ldyBqLEM9bmV3IGosUD0wLGs9KHItdCkvbjtmb3IobGV0IE89MDtPPD1vO08rKyl7bGV0IEQ9W10sQj1PL28sST1CKihyLXQpK3Q7Zm9yKGxldCBMPTA7TDw9aTtMKyspe2xldCBSPUwvaSxGPVIqbCtzLHo9TWF0aC5zaW4oRiksVT1NYXRoLmNvcyhGKTtDLng9SSp6LEMueT0tQipuK18sQy56PUkqVSxoLnB1c2goQy54LEMueSxDLnopLFMuc2V0KHosayxVKS5ub3JtYWxpemUoKSxmLnB1c2goUy54LFMueSxTLnopLHAucHVzaChSLDEtQiksRC5wdXNoKGQrKyl9Zy5wdXNoKEQpfWZvcihsZXQgTz0wO088aTtPKyspZm9yKGxldCBEPTA7RDxvO0QrKyl7bGV0IEI9Z1tEXVtPXSxJPWdbRCsxXVtPXSxMPWdbRCsxXVtPKzFdLFI9Z1tEXVtPKzFdO3UucHVzaChCLEksUiksdS5wdXNoKEksTCxSKSxQKz02fWMuYWRkR3JvdXAoeSxQLDApLHkrPVB9ZnVuY3Rpb24gYihTKXtsZXQgQz1kLFA9bmV3IEx0LGs9bmV3IGosTz0wLEQ9Uz09PSEwP3Q6cixCPVM9PT0hMD8xOi0xO2ZvcihsZXQgTD0xO0w8PWk7TCsrKWgucHVzaCgwLF8qQiwwKSxmLnB1c2goMCxCLDApLHAucHVzaCguNSwuNSksZCsrO2xldCBJPWQ7Zm9yKGxldCBMPTA7TDw9aTtMKyspe2xldCBGPUwvaSpsK3Msej1NYXRoLmNvcyhGKSxVPU1hdGguc2luKEYpO2sueD1EKlUsay55PV8qQixrLno9RCp6LGgucHVzaChrLngsay55LGsueiksZi5wdXNoKDAsQiwwKSxQLng9eiouNSsuNSxQLnk9VSouNSpCKy41LHAucHVzaChQLngsUC55KSxkKyt9Zm9yKGxldCBMPTA7TDxpO0wrKyl7bGV0IFI9QytMLEY9SStMO1M9PT0hMD91LnB1c2goRixGKzEsUik6dS5wdXNoKEYrMSxGLFIpLE8rPTN9Yy5hZGRHcm91cCh5LE8sUz09PSEwPzE6MikseSs9T319c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgYW0odC5yYWRpdXNUb3AsdC5yYWRpdXNCb3R0b20sdC5oZWlnaHQsdC5yYWRpYWxTZWdtZW50cyx0LmhlaWdodFNlZ21lbnRzLHQub3BlbkVuZGVkLHQudGhldGFTdGFydCx0LnRoZXRhTGVuZ3RoKX19LEgxPWNsYXNzIGV4dGVuZHMgYW17Y29uc3RydWN0b3IodD0xLHI9MSxuPTgsaT0xLG89ITEsYT0wLHM9TWF0aC5QSSoyKXtzdXBlcigwLHQscixuLGksbyxhLHMpLHRoaXMudHlwZT0iQ29uZUdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czp0LGhlaWdodDpyLHJhZGlhbFNlZ21lbnRzOm4saGVpZ2h0U2VnbWVudHM6aSxvcGVuRW5kZWQ6byx0aGV0YVN0YXJ0OmEsdGhldGFMZW5ndGg6c319c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgSDEodC5yYWRpdXMsdC5oZWlnaHQsdC5yYWRpYWxTZWdtZW50cyx0LmhlaWdodFNlZ21lbnRzLHQub3BlbkVuZGVkLHQudGhldGFTdGFydCx0LnRoZXRhTGVuZ3RoKX19LHVoPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD1bXSxyPVtdLG49MSxpPTApe3N1cGVyKCksdGhpcy50eXBlPSJQb2x5aGVkcm9uR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17dmVydGljZXM6dCxpbmRpY2VzOnIscmFkaXVzOm4sZGV0YWlsOml9O2xldCBvPVtdLGE9W107cyhpKSxjKG4pLHUoKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShvLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgeGUoby5zbGljZSgpLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyB4ZShhLDIpKSxpPT09MD90aGlzLmNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCk6dGhpcy5ub3JtYWxpemVOb3JtYWxzKCk7ZnVuY3Rpb24gcyh4KXtsZXQgYj1uZXcgaixTPW5ldyBqLEM9bmV3IGo7Zm9yKGxldCBQPTA7UDxyLmxlbmd0aDtQKz0zKXAocltQKzBdLGIpLHAocltQKzFdLFMpLHAocltQKzJdLEMpLGwoYixTLEMseCl9ZnVuY3Rpb24gbCh4LGIsUyxDKXtsZXQgUD1DKzEsaz1bXTtmb3IobGV0IE89MDtPPD1QO08rKyl7a1tPXT1bXTtsZXQgRD14LmNsb25lKCkubGVycChTLE8vUCksQj1iLmNsb25lKCkubGVycChTLE8vUCksST1QLU87Zm9yKGxldCBMPTA7TDw9STtMKyspTD09PTAmJk89PT1QP2tbT11bTF09RDprW09dW0xdPUQuY2xvbmUoKS5sZXJwKEIsTC9JKX1mb3IobGV0IE89MDtPPFA7TysrKWZvcihsZXQgRD0wO0Q8MiooUC1PKS0xO0QrKyl7bGV0IEI9TWF0aC5mbG9vcihELzIpO0QlMj09PTA/KGYoa1tPXVtCKzFdKSxmKGtbTysxXVtCXSksZihrW09dW0JdKSk6KGYoa1tPXVtCKzFdKSxmKGtbTysxXVtCKzFdKSxmKGtbTysxXVtCXSkpfX1mdW5jdGlvbiBjKHgpe2xldCBiPW5ldyBqO2ZvcihsZXQgUz0wO1M8by5sZW5ndGg7Uys9MyliLng9b1tTKzBdLGIueT1vW1MrMV0sYi56PW9bUysyXSxiLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHgpLG9bUyswXT1iLngsb1tTKzFdPWIueSxvW1MrMl09Yi56fWZ1bmN0aW9uIHUoKXtsZXQgeD1uZXcgajtmb3IobGV0IGI9MDtiPG8ubGVuZ3RoO2IrPTMpe3gueD1vW2IrMF0seC55PW9bYisxXSx4Lno9b1tiKzJdO2xldCBTPV8oeCkvMi9NYXRoLlBJKy41LEM9eSh4KS9NYXRoLlBJKy41O2EucHVzaChTLDEtQyl9ZCgpLGgoKX1mdW5jdGlvbiBoKCl7Zm9yKGxldCB4PTA7eDxhLmxlbmd0aDt4Kz02KXtsZXQgYj1hW3grMF0sUz1hW3grMl0sQz1hW3grNF0sUD1NYXRoLm1heChiLFMsQyksaz1NYXRoLm1pbihiLFMsQyk7UD4uOSYmazwuMSYmKGI8LjImJihhW3grMF0rPTEpLFM8LjImJihhW3grMl0rPTEpLEM8LjImJihhW3grNF0rPTEpKX19ZnVuY3Rpb24gZih4KXtvLnB1c2goeC54LHgueSx4LnopfWZ1bmN0aW9uIHAoeCxiKXtsZXQgUz14KjM7Yi54PXRbUyswXSxiLnk9dFtTKzFdLGIuej10W1MrMl19ZnVuY3Rpb24gZCgpe2xldCB4PW5ldyBqLGI9bmV3IGosUz1uZXcgaixDPW5ldyBqLFA9bmV3IEx0LGs9bmV3IEx0LE89bmV3IEx0O2ZvcihsZXQgRD0wLEI9MDtEPG8ubGVuZ3RoO0QrPTksQis9Nil7eC5zZXQob1tEKzBdLG9bRCsxXSxvW0QrMl0pLGIuc2V0KG9bRCszXSxvW0QrNF0sb1tEKzVdKSxTLnNldChvW0QrNl0sb1tEKzddLG9bRCs4XSksUC5zZXQoYVtCKzBdLGFbQisxXSksay5zZXQoYVtCKzJdLGFbQiszXSksTy5zZXQoYVtCKzRdLGFbQis1XSksQy5jb3B5KHgpLmFkZChiKS5hZGQoUykuZGl2aWRlU2NhbGFyKDMpO2xldCBJPV8oQyk7ZyhQLEIrMCx4LEkpLGcoayxCKzIsYixJKSxnKE8sQis0LFMsSSl9fWZ1bmN0aW9uIGcoeCxiLFMsQyl7QzwwJiZ4Lng9PT0xJiYoYVtiXT14LngtMSksUy54PT09MCYmUy56PT09MCYmKGFbYl09Qy8yL01hdGguUEkrLjUpfWZ1bmN0aW9uIF8oeCl7cmV0dXJuIE1hdGguYXRhbjIoeC56LC14LngpfWZ1bmN0aW9uIHkoeCl7cmV0dXJuIE1hdGguYXRhbjIoLXgueSxNYXRoLnNxcnQoeC54KngueCt4LnoqeC56KSl9fXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IHVoKHQudmVydGljZXMsdC5pbmRpY2VzLHQucmFkaXVzLHQuZGV0YWlscyl9fSxWMT1jbGFzcyBleHRlbmRzIHVoe2NvbnN0cnVjdG9yKHQ9MSxyPTApe2xldCBuPSgxK01hdGguc3FydCg1KSkvMixpPTEvbixvPVstMSwtMSwtMSwtMSwtMSwxLC0xLDEsLTEsLTEsMSwxLDEsLTEsLTEsMSwtMSwxLDEsMSwtMSwxLDEsMSwwLC1pLC1uLDAsLWksbiwwLGksLW4sMCxpLG4sLWksLW4sMCwtaSxuLDAsaSwtbiwwLGksbiwwLC1uLDAsLWksbiwwLC1pLC1uLDAsaSxuLDAsaV0sYT1bMywxMSw3LDMsNywxNSwzLDE1LDEzLDcsMTksMTcsNywxNyw2LDcsNiwxNSwxNyw0LDgsMTcsOCwxMCwxNywxMCw2LDgsMCwxNiw4LDE2LDIsOCwyLDEwLDAsMTIsMSwwLDEsMTgsMCwxOCwxNiw2LDEwLDIsNiwyLDEzLDYsMTMsMTUsMiwxNiwxOCwyLDE4LDMsMiwzLDEzLDE4LDEsOSwxOCw5LDExLDE4LDExLDMsNCwxNCwxMiw0LDEyLDAsNCwwLDgsMTEsOSw1LDExLDUsMTksMTEsMTksNywxOSw1LDE0LDE5LDE0LDQsMTksNCwxNywxLDEyLDE0LDEsMTQsNSwxLDUsOV07c3VwZXIobyxhLHQsciksdGhpcy50eXBlPSJEb2RlY2FoZWRyb25HZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6dCxkZXRhaWw6cn19c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgVjEodC5yYWRpdXMsdC5kZXRhaWwpfX0sQlY9bmV3IGosSFY9bmV3IGosZ3V0PW5ldyBqLFZWPW5ldyBvaSxzNj1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9bnVsbCxyPTEpe2lmKHN1cGVyKCksdGhpcy50eXBlPSJFZGdlc0dlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e2dlb21ldHJ5OnQsdGhyZXNob2xkQW5nbGU6cn0sdCE9PW51bGwpe2xldCBpPU1hdGgucG93KDEwLDQpLG89TWF0aC5jb3MoSTEqciksYT10LmdldEluZGV4KCkscz10LmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKSxsPWE/YS5jb3VudDpzLmNvdW50LGM9WzAsMCwwXSx1PVsiYSIsImIiLCJjIl0saD1uZXcgQXJyYXkoMyksZj17fSxwPVtdO2ZvcihsZXQgZD0wO2Q8bDtkKz0zKXthPyhjWzBdPWEuZ2V0WChkKSxjWzFdPWEuZ2V0WChkKzEpLGNbMl09YS5nZXRYKGQrMikpOihjWzBdPWQsY1sxXT1kKzEsY1syXT1kKzIpO2xldHthOmcsYjpfLGM6eX09VlY7aWYoZy5mcm9tQnVmZmVyQXR0cmlidXRlKHMsY1swXSksXy5mcm9tQnVmZmVyQXR0cmlidXRlKHMsY1sxXSkseS5mcm9tQnVmZmVyQXR0cmlidXRlKHMsY1syXSksVlYuZ2V0Tm9ybWFsKGd1dCksaFswXT1gJHtNYXRoLnJvdW5kKGcueCppKX0sJHtNYXRoLnJvdW5kKGcueSppKX0sJHtNYXRoLnJvdW5kKGcueippKX1gLGhbMV09YCR7TWF0aC5yb3VuZChfLngqaSl9LCR7TWF0aC5yb3VuZChfLnkqaSl9LCR7TWF0aC5yb3VuZChfLnoqaSl9YCxoWzJdPWAke01hdGgucm91bmQoeS54KmkpfSwke01hdGgucm91bmQoeS55KmkpfSwke01hdGgucm91bmQoeS56KmkpfWAsIShoWzBdPT09aFsxXXx8aFsxXT09PWhbMl18fGhbMl09PT1oWzBdKSlmb3IobGV0IHg9MDt4PDM7eCsrKXtsZXQgYj0oeCsxKSUzLFM9aFt4XSxDPWhbYl0sUD1WVlt1W3hdXSxrPVZWW3VbYl1dLE89YCR7U31fJHtDfWAsRD1gJHtDfV8ke1N9YDtEIGluIGYmJmZbRF0/KGd1dC5kb3QoZltEXS5ub3JtYWwpPD1vJiYocC5wdXNoKFAueCxQLnksUC56KSxwLnB1c2goay54LGsueSxrLnopKSxmW0RdPW51bGwpOk8gaW4gZnx8KGZbT109e2luZGV4MDpjW3hdLGluZGV4MTpjW2JdLG5vcm1hbDpndXQuY2xvbmUoKX0pfX1mb3IobGV0IGQgaW4gZilpZihmW2RdKXtsZXR7aW5kZXgwOmcsaW5kZXgxOl99PWZbZF07QlYuZnJvbUJ1ZmZlckF0dHJpYnV0ZShzLGcpLEhWLmZyb21CdWZmZXJBdHRyaWJ1dGUocyxfKSxwLnB1c2goQlYueCxCVi55LEJWLnopLHAucHVzaChIVi54LEhWLnksSFYueil9dGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUocCwzKSl9fX0scHM9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnR5cGU9IkN1cnZlIix0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz0yMDB9Z2V0UG9pbnQoKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5DdXJ2ZTogLmdldFBvaW50KCkgbm90IGltcGxlbWVudGVkLiIpLG51bGx9Z2V0UG9pbnRBdCh0LHIpe2xldCBuPXRoaXMuZ2V0VXRvVG1hcHBpbmcodCk7cmV0dXJuIHRoaXMuZ2V0UG9pbnQobixyKX1nZXRQb2ludHModD01KXtsZXQgcj1bXTtmb3IobGV0IG49MDtuPD10O24rKylyLnB1c2godGhpcy5nZXRQb2ludChuL3QpKTtyZXR1cm4gcn1nZXRTcGFjZWRQb2ludHModD01KXtsZXQgcj1bXTtmb3IobGV0IG49MDtuPD10O24rKylyLnB1c2godGhpcy5nZXRQb2ludEF0KG4vdCkpO3JldHVybiByfWdldExlbmd0aCgpe2xldCB0PXRoaXMuZ2V0TGVuZ3RocygpO3JldHVybiB0W3QubGVuZ3RoLTFdfWdldExlbmd0aHModD10aGlzLmFyY0xlbmd0aERpdmlzaW9ucyl7aWYodGhpcy5jYWNoZUFyY0xlbmd0aHMmJnRoaXMuY2FjaGVBcmNMZW5ndGhzLmxlbmd0aD09PXQrMSYmIXRoaXMubmVlZHNVcGRhdGUpcmV0dXJuIHRoaXMuY2FjaGVBcmNMZW5ndGhzO3RoaXMubmVlZHNVcGRhdGU9ITE7bGV0IHI9W10sbixpPXRoaXMuZ2V0UG9pbnQoMCksbz0wO3IucHVzaCgwKTtmb3IobGV0IGE9MTthPD10O2ErKyluPXRoaXMuZ2V0UG9pbnQoYS90KSxvKz1uLmRpc3RhbmNlVG8oaSksci5wdXNoKG8pLGk9bjtyZXR1cm4gdGhpcy5jYWNoZUFyY0xlbmd0aHM9cixyfXVwZGF0ZUFyY0xlbmd0aHMoKXt0aGlzLm5lZWRzVXBkYXRlPSEwLHRoaXMuZ2V0TGVuZ3RocygpfWdldFV0b1RtYXBwaW5nKHQscil7bGV0IG49dGhpcy5nZXRMZW5ndGhzKCksaT0wLG89bi5sZW5ndGgsYTtyP2E9cjphPXQqbltvLTFdO2xldCBzPTAsbD1vLTEsYztmb3IoO3M8PWw7KWlmKGk9TWF0aC5mbG9vcihzKyhsLXMpLzIpLGM9bltpXS1hLGM8MClzPWkrMTtlbHNlIGlmKGM+MClsPWktMTtlbHNle2w9aTticmVha31pZihpPWwsbltpXT09PWEpcmV0dXJuIGkvKG8tMSk7bGV0IHU9bltpXSxmPW5baSsxXS11LHA9KGEtdSkvZjtyZXR1cm4oaStwKS8oby0xKX1nZXRUYW5nZW50KHQscil7bGV0IGk9dC0xZS00LG89dCsxZS00O2k8MCYmKGk9MCksbz4xJiYobz0xKTtsZXQgYT10aGlzLmdldFBvaW50KGkpLHM9dGhpcy5nZXRQb2ludChvKSxsPXJ8fChhLmlzVmVjdG9yMj9uZXcgTHQ6bmV3IGopO3JldHVybiBsLmNvcHkocykuc3ViKGEpLm5vcm1hbGl6ZSgpLGx9Z2V0VGFuZ2VudEF0KHQscil7bGV0IG49dGhpcy5nZXRVdG9UbWFwcGluZyh0KTtyZXR1cm4gdGhpcy5nZXRUYW5nZW50KG4scil9Y29tcHV0ZUZyZW5ldEZyYW1lcyh0LHIpe2xldCBuPW5ldyBqLGk9W10sbz1bXSxhPVtdLHM9bmV3IGosbD1uZXcgTWU7Zm9yKGxldCBwPTA7cDw9dDtwKyspe2xldCBkPXAvdDtpW3BdPXRoaXMuZ2V0VGFuZ2VudEF0KGQsbmV3IGopfW9bMF09bmV3IGosYVswXT1uZXcgajtsZXQgYz1OdW1iZXIuTUFYX1ZBTFVFLHU9TWF0aC5hYnMoaVswXS54KSxoPU1hdGguYWJzKGlbMF0ueSksZj1NYXRoLmFicyhpWzBdLnopO3U8PWMmJihjPXUsbi5zZXQoMSwwLDApKSxoPD1jJiYoYz1oLG4uc2V0KDAsMSwwKSksZjw9YyYmbi5zZXQoMCwwLDEpLHMuY3Jvc3NWZWN0b3JzKGlbMF0sbikubm9ybWFsaXplKCksb1swXS5jcm9zc1ZlY3RvcnMoaVswXSxzKSxhWzBdLmNyb3NzVmVjdG9ycyhpWzBdLG9bMF0pO2ZvcihsZXQgcD0xO3A8PXQ7cCsrKXtpZihvW3BdPW9bcC0xXS5jbG9uZSgpLGFbcF09YVtwLTFdLmNsb25lKCkscy5jcm9zc1ZlY3RvcnMoaVtwLTFdLGlbcF0pLHMubGVuZ3RoKCk+TnVtYmVyLkVQU0lMT04pe3Mubm9ybWFsaXplKCk7bGV0IGQ9TWF0aC5hY29zKFpvKGlbcC0xXS5kb3QoaVtwXSksLTEsMSkpO29bcF0uYXBwbHlNYXRyaXg0KGwubWFrZVJvdGF0aW9uQXhpcyhzLGQpKX1hW3BdLmNyb3NzVmVjdG9ycyhpW3BdLG9bcF0pfWlmKHI9PT0hMCl7bGV0IHA9TWF0aC5hY29zKFpvKG9bMF0uZG90KG9bdF0pLC0xLDEpKTtwLz10LGlbMF0uZG90KHMuY3Jvc3NWZWN0b3JzKG9bMF0sb1t0XSkpPjAmJihwPS1wKTtmb3IobGV0IGQ9MTtkPD10O2QrKylvW2RdLmFwcGx5TWF0cml4NChsLm1ha2VSb3RhdGlvbkF4aXMoaVtkXSxwKmQpKSxhW2RdLmNyb3NzVmVjdG9ycyhpW2RdLG9bZF0pfXJldHVybnt0YW5nZW50czppLG5vcm1hbHM6byxiaW5vcm1hbHM6YX19Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPXQuYXJjTGVuZ3RoRGl2aXNpb25zLHRoaXN9dG9KU09OKCl7bGV0IHQ9e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJDdXJ2ZSIsZ2VuZXJhdG9yOiJDdXJ2ZS50b0pTT04ifX07cmV0dXJuIHQuYXJjTGVuZ3RoRGl2aXNpb25zPXRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zLHQudHlwZT10aGlzLnR5cGUsdH1mcm9tSlNPTih0KXtyZXR1cm4gdGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9dC5hcmNMZW5ndGhEaXZpc2lvbnMsdGhpc319LFUxPWNsYXNzIGV4dGVuZHMgcHN7Y29uc3RydWN0b3IodD0wLHI9MCxuPTEsaT0xLG89MCxhPU1hdGguUEkqMixzPSExLGw9MCl7c3VwZXIoKSx0aGlzLnR5cGU9IkVsbGlwc2VDdXJ2ZSIsdGhpcy5hWD10LHRoaXMuYVk9cix0aGlzLnhSYWRpdXM9bix0aGlzLnlSYWRpdXM9aSx0aGlzLmFTdGFydEFuZ2xlPW8sdGhpcy5hRW5kQW5nbGU9YSx0aGlzLmFDbG9ja3dpc2U9cyx0aGlzLmFSb3RhdGlvbj1sfWdldFBvaW50KHQscil7bGV0IG49cnx8bmV3IEx0LGk9TWF0aC5QSSoyLG89dGhpcy5hRW5kQW5nbGUtdGhpcy5hU3RhcnRBbmdsZSxhPU1hdGguYWJzKG8pPE51bWJlci5FUFNJTE9OO2Zvcig7bzwwOylvKz1pO2Zvcig7bz5pOylvLT1pO288TnVtYmVyLkVQU0lMT04mJihhP289MDpvPWkpLHRoaXMuYUNsb2Nrd2lzZT09PSEwJiYhYSYmKG89PT1pP289LWk6bz1vLWkpO2xldCBzPXRoaXMuYVN0YXJ0QW5nbGUrdCpvLGw9dGhpcy5hWCt0aGlzLnhSYWRpdXMqTWF0aC5jb3MocyksYz10aGlzLmFZK3RoaXMueVJhZGl1cypNYXRoLnNpbihzKTtpZih0aGlzLmFSb3RhdGlvbiE9PTApe2xldCB1PU1hdGguY29zKHRoaXMuYVJvdGF0aW9uKSxoPU1hdGguc2luKHRoaXMuYVJvdGF0aW9uKSxmPWwtdGhpcy5hWCxwPWMtdGhpcy5hWTtsPWYqdS1wKmgrdGhpcy5hWCxjPWYqaCtwKnUrdGhpcy5hWX1yZXR1cm4gbi5zZXQobCxjKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuYVg9dC5hWCx0aGlzLmFZPXQuYVksdGhpcy54UmFkaXVzPXQueFJhZGl1cyx0aGlzLnlSYWRpdXM9dC55UmFkaXVzLHRoaXMuYVN0YXJ0QW5nbGU9dC5hU3RhcnRBbmdsZSx0aGlzLmFFbmRBbmdsZT10LmFFbmRBbmdsZSx0aGlzLmFDbG9ja3dpc2U9dC5hQ2xvY2t3aXNlLHRoaXMuYVJvdGF0aW9uPXQuYVJvdGF0aW9uLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQuYVg9dGhpcy5hWCx0LmFZPXRoaXMuYVksdC54UmFkaXVzPXRoaXMueFJhZGl1cyx0LnlSYWRpdXM9dGhpcy55UmFkaXVzLHQuYVN0YXJ0QW5nbGU9dGhpcy5hU3RhcnRBbmdsZSx0LmFFbmRBbmdsZT10aGlzLmFFbmRBbmdsZSx0LmFDbG9ja3dpc2U9dGhpcy5hQ2xvY2t3aXNlLHQuYVJvdGF0aW9uPXRoaXMuYVJvdGF0aW9uLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMuYVg9dC5hWCx0aGlzLmFZPXQuYVksdGhpcy54UmFkaXVzPXQueFJhZGl1cyx0aGlzLnlSYWRpdXM9dC55UmFkaXVzLHRoaXMuYVN0YXJ0QW5nbGU9dC5hU3RhcnRBbmdsZSx0aGlzLmFFbmRBbmdsZT10LmFFbmRBbmdsZSx0aGlzLmFDbG9ja3dpc2U9dC5hQ2xvY2t3aXNlLHRoaXMuYVJvdGF0aW9uPXQuYVJvdGF0aW9uLHRoaXN9fTtVMS5wcm90b3R5cGUuaXNFbGxpcHNlQ3VydmU9ITA7dmFyIGw2PWNsYXNzIGV4dGVuZHMgVTF7Y29uc3RydWN0b3IodCxyLG4saSxvLGEpe3N1cGVyKHQscixuLG4saSxvLGEpLHRoaXMudHlwZT0iQXJjQ3VydmUifX07bDYucHJvdG90eXBlLmlzQXJjQ3VydmU9ITA7ZnVuY3Rpb24gRGh0KCl7bGV0IGU9MCx0PTAscj0wLG49MDtmdW5jdGlvbiBpKG8sYSxzLGwpe2U9byx0PXMscj0tMypvKzMqYS0yKnMtbCxuPTIqby0yKmErcytsfXJldHVybntpbml0Q2F0bXVsbFJvbTpmdW5jdGlvbihvLGEscyxsLGMpe2koYSxzLGMqKHMtbyksYyoobC1hKSl9LGluaXROb251bmlmb3JtQ2F0bXVsbFJvbTpmdW5jdGlvbihvLGEscyxsLGMsdSxoKXtsZXQgZj0oYS1vKS9jLShzLW8pLyhjK3UpKyhzLWEpL3UscD0ocy1hKS91LShsLWEpLyh1K2gpKyhsLXMpL2g7Zio9dSxwKj11LGkoYSxzLGYscCl9LGNhbGM6ZnVuY3Rpb24obyl7bGV0IGE9bypvLHM9YSpvO3JldHVybiBlK3QqbytyKmErbipzfX19dmFyIFVWPW5ldyBqLF91dD1uZXcgRGh0LHl1dD1uZXcgRGh0LHZ1dD1uZXcgRGh0LGM2PWNsYXNzIGV4dGVuZHMgcHN7Y29uc3RydWN0b3IodD1bXSxyPSExLG49ImNlbnRyaXBldGFsIixpPS41KXtzdXBlcigpLHRoaXMudHlwZT0iQ2F0bXVsbFJvbUN1cnZlMyIsdGhpcy5wb2ludHM9dCx0aGlzLmNsb3NlZD1yLHRoaXMuY3VydmVUeXBlPW4sdGhpcy50ZW5zaW9uPWl9Z2V0UG9pbnQodCxyPW5ldyBqKXtsZXQgbj1yLGk9dGhpcy5wb2ludHMsbz1pLmxlbmd0aCxhPShvLSh0aGlzLmNsb3NlZD8wOjEpKSp0LHM9TWF0aC5mbG9vcihhKSxsPWEtczt0aGlzLmNsb3NlZD9zKz1zPjA/MDooTWF0aC5mbG9vcihNYXRoLmFicyhzKS9vKSsxKSpvOmw9PT0wJiZzPT09by0xJiYocz1vLTIsbD0xKTtsZXQgYyx1O3RoaXMuY2xvc2VkfHxzPjA/Yz1pWyhzLTEpJW9dOihVVi5zdWJWZWN0b3JzKGlbMF0saVsxXSkuYWRkKGlbMF0pLGM9VVYpO2xldCBoPWlbcyVvXSxmPWlbKHMrMSklb107aWYodGhpcy5jbG9zZWR8fHMrMjxvP3U9aVsocysyKSVvXTooVVYuc3ViVmVjdG9ycyhpW28tMV0saVtvLTJdKS5hZGQoaVtvLTFdKSx1PVVWKSx0aGlzLmN1cnZlVHlwZT09PSJjZW50cmlwZXRhbCJ8fHRoaXMuY3VydmVUeXBlPT09ImNob3JkYWwiKXtsZXQgcD10aGlzLmN1cnZlVHlwZT09PSJjaG9yZGFsIj8uNTouMjUsZD1NYXRoLnBvdyhjLmRpc3RhbmNlVG9TcXVhcmVkKGgpLHApLGc9TWF0aC5wb3coaC5kaXN0YW5jZVRvU3F1YXJlZChmKSxwKSxfPU1hdGgucG93KGYuZGlzdGFuY2VUb1NxdWFyZWQodSkscCk7ZzwxZS00JiYoZz0xKSxkPDFlLTQmJihkPWcpLF88MWUtNCYmKF89ZyksX3V0LmluaXROb251bmlmb3JtQ2F0bXVsbFJvbShjLngsaC54LGYueCx1LngsZCxnLF8pLHl1dC5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYy55LGgueSxmLnksdS55LGQsZyxfKSx2dXQuaW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tKGMueixoLnosZi56LHUueixkLGcsXyl9ZWxzZSB0aGlzLmN1cnZlVHlwZT09PSJjYXRtdWxscm9tIiYmKF91dC5pbml0Q2F0bXVsbFJvbShjLngsaC54LGYueCx1LngsdGhpcy50ZW5zaW9uKSx5dXQuaW5pdENhdG11bGxSb20oYy55LGgueSxmLnksdS55LHRoaXMudGVuc2lvbiksdnV0LmluaXRDYXRtdWxsUm9tKGMueixoLnosZi56LHUueix0aGlzLnRlbnNpb24pKTtyZXR1cm4gbi5zZXQoX3V0LmNhbGMobCkseXV0LmNhbGMobCksdnV0LmNhbGMobCkpLG59Y29weSh0KXtzdXBlci5jb3B5KHQpLHRoaXMucG9pbnRzPVtdO2ZvcihsZXQgcj0wLG49dC5wb2ludHMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXQucG9pbnRzW3JdO3RoaXMucG9pbnRzLnB1c2goaS5jbG9uZSgpKX1yZXR1cm4gdGhpcy5jbG9zZWQ9dC5jbG9zZWQsdGhpcy5jdXJ2ZVR5cGU9dC5jdXJ2ZVR5cGUsdGhpcy50ZW5zaW9uPXQudGVuc2lvbix0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3QucG9pbnRzPVtdO2ZvcihsZXQgcj0wLG49dGhpcy5wb2ludHMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXRoaXMucG9pbnRzW3JdO3QucG9pbnRzLnB1c2goaS50b0FycmF5KCkpfXJldHVybiB0LmNsb3NlZD10aGlzLmNsb3NlZCx0LmN1cnZlVHlwZT10aGlzLmN1cnZlVHlwZSx0LnRlbnNpb249dGhpcy50ZW5zaW9uLHR9ZnJvbUpTT04odCl7c3VwZXIuZnJvbUpTT04odCksdGhpcy5wb2ludHM9W107Zm9yKGxldCByPTAsbj10LnBvaW50cy5sZW5ndGg7cjxuO3IrKyl7bGV0IGk9dC5wb2ludHNbcl07dGhpcy5wb2ludHMucHVzaChuZXcgaigpLmZyb21BcnJheShpKSl9cmV0dXJuIHRoaXMuY2xvc2VkPXQuY2xvc2VkLHRoaXMuY3VydmVUeXBlPXQuY3VydmVUeXBlLHRoaXMudGVuc2lvbj10LnRlbnNpb24sdGhpc319O2M2LnByb3RvdHlwZS5pc0NhdG11bGxSb21DdXJ2ZTM9ITA7ZnVuY3Rpb24gZGhlKGUsdCxyLG4saSl7bGV0IG89KG4tdCkqLjUsYT0oaS1yKSouNSxzPWUqZSxsPWUqcztyZXR1cm4oMipyLTIqbitvK2EpKmwrKC0zKnIrMypuLTIqby1hKSpzK28qZStyfWZ1bmN0aW9uIHpncihlLHQpe2xldCByPTEtZTtyZXR1cm4gcipyKnR9ZnVuY3Rpb24gRmdyKGUsdCl7cmV0dXJuIDIqKDEtZSkqZSp0fWZ1bmN0aW9uIEJncihlLHQpe3JldHVybiBlKmUqdH1mdW5jdGlvbiBHUChlLHQscixuKXtyZXR1cm4gemdyKGUsdCkrRmdyKGUscikrQmdyKGUsbil9ZnVuY3Rpb24gSGdyKGUsdCl7bGV0IHI9MS1lO3JldHVybiByKnIqcip0fWZ1bmN0aW9uIFZncihlLHQpe2xldCByPTEtZTtyZXR1cm4gMypyKnIqZSp0fWZ1bmN0aW9uIFVncihlLHQpe3JldHVybiAzKigxLWUpKmUqZSp0fWZ1bmN0aW9uIHFncihlLHQpe3JldHVybiBlKmUqZSp0fWZ1bmN0aW9uIFdQKGUsdCxyLG4saSl7cmV0dXJuIEhncihlLHQpK1ZncihlLHIpK1VncihlLG4pK3FncihlLGkpfXZhciBjTT1jbGFzcyBleHRlbmRzIHBze2NvbnN0cnVjdG9yKHQ9bmV3IEx0LHI9bmV3IEx0LG49bmV3IEx0LGk9bmV3IEx0KXtzdXBlcigpLHRoaXMudHlwZT0iQ3ViaWNCZXppZXJDdXJ2ZSIsdGhpcy52MD10LHRoaXMudjE9cix0aGlzLnYyPW4sdGhpcy52Mz1pfWdldFBvaW50KHQscj1uZXcgTHQpe2xldCBuPXIsaT10aGlzLnYwLG89dGhpcy52MSxhPXRoaXMudjIscz10aGlzLnYzO3JldHVybiBuLnNldChXUCh0LGkueCxvLngsYS54LHMueCksV1AodCxpLnksby55LGEueSxzLnkpKSxufWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MC5jb3B5KHQudjApLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpcy52My5jb3B5KHQudjMpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjA9dGhpcy52MC50b0FycmF5KCksdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHQudjM9dGhpcy52My50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MC5mcm9tQXJyYXkodC52MCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpcy52My5mcm9tQXJyYXkodC52MyksdGhpc319O2NNLnByb3RvdHlwZS5pc0N1YmljQmV6aWVyQ3VydmU9ITA7dmFyIHU2PWNsYXNzIGV4dGVuZHMgcHN7Y29uc3RydWN0b3IodD1uZXcgaixyPW5ldyBqLG49bmV3IGosaT1uZXcgail7c3VwZXIoKSx0aGlzLnR5cGU9IkN1YmljQmV6aWVyQ3VydmUzIix0aGlzLnYwPXQsdGhpcy52MT1yLHRoaXMudjI9bix0aGlzLnYzPWl9Z2V0UG9pbnQodCxyPW5ldyBqKXtsZXQgbj1yLGk9dGhpcy52MCxvPXRoaXMudjEsYT10aGlzLnYyLHM9dGhpcy52MztyZXR1cm4gbi5zZXQoV1AodCxpLngsby54LGEueCxzLngpLFdQKHQsaS55LG8ueSxhLnkscy55KSxXUCh0LGkueixvLnosYS56LHMueikpLG59Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzLnYzLmNvcHkodC52MyksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MD10aGlzLnYwLnRvQXJyYXkoKSx0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdC52Mz10aGlzLnYzLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzLnYzLmZyb21BcnJheSh0LnYzKSx0aGlzfX07dTYucHJvdG90eXBlLmlzQ3ViaWNCZXppZXJDdXJ2ZTM9ITA7dmFyIHExPWNsYXNzIGV4dGVuZHMgcHN7Y29uc3RydWN0b3IodD1uZXcgTHQscj1uZXcgTHQpe3N1cGVyKCksdGhpcy50eXBlPSJMaW5lQ3VydmUiLHRoaXMudjE9dCx0aGlzLnYyPXJ9Z2V0UG9pbnQodCxyPW5ldyBMdCl7bGV0IG49cjtyZXR1cm4gdD09PTE/bi5jb3B5KHRoaXMudjIpOihuLmNvcHkodGhpcy52Mikuc3ViKHRoaXMudjEpLG4ubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMudjEpKSxufWdldFBvaW50QXQodCxyKXtyZXR1cm4gdGhpcy5nZXRQb2ludCh0LHIpfWdldFRhbmdlbnQodCxyKXtsZXQgbj1yfHxuZXcgTHQ7cmV0dXJuIG4uY29weSh0aGlzLnYyKS5zdWIodGhpcy52MSkubm9ybWFsaXplKCksbn1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXN9fTtxMS5wcm90b3R5cGUuaXNMaW5lQ3VydmU9ITA7dmFyIGJVPWNsYXNzIGV4dGVuZHMgcHN7Y29uc3RydWN0b3IodD1uZXcgaixyPW5ldyBqKXtzdXBlcigpLHRoaXMudHlwZT0iTGluZUN1cnZlMyIsdGhpcy5pc0xpbmVDdXJ2ZTM9ITAsdGhpcy52MT10LHRoaXMudjI9cn1nZXRQb2ludCh0LHI9bmV3IGope2xldCBuPXI7cmV0dXJuIHQ9PT0xP24uY29weSh0aGlzLnYyKToobi5jb3B5KHRoaXMudjIpLnN1Yih0aGlzLnYxKSxuLm11bHRpcGx5U2NhbGFyKHQpLmFkZCh0aGlzLnYxKSksbn1nZXRQb2ludEF0KHQscil7cmV0dXJuIHRoaXMuZ2V0UG9pbnQodCxyKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXN9fSx1TT1jbGFzcyBleHRlbmRzIHBze2NvbnN0cnVjdG9yKHQ9bmV3IEx0LHI9bmV3IEx0LG49bmV3IEx0KXtzdXBlcigpLHRoaXMudHlwZT0iUXVhZHJhdGljQmV6aWVyQ3VydmUiLHRoaXMudjA9dCx0aGlzLnYxPXIsdGhpcy52Mj1ufWdldFBvaW50KHQscj1uZXcgTHQpe2xldCBuPXIsaT10aGlzLnYwLG89dGhpcy52MSxhPXRoaXMudjI7cmV0dXJuIG4uc2V0KEdQKHQsaS54LG8ueCxhLngpLEdQKHQsaS55LG8ueSxhLnkpKSxufWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MC5jb3B5KHQudjApLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MD10aGlzLnYwLnRvQXJyYXkoKSx0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MC5mcm9tQXJyYXkodC52MCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319O3VNLnByb3RvdHlwZS5pc1F1YWRyYXRpY0JlemllckN1cnZlPSEwO3ZhciBoTT1jbGFzcyBleHRlbmRzIHBze2NvbnN0cnVjdG9yKHQ9bmV3IGoscj1uZXcgaixuPW5ldyBqKXtzdXBlcigpLHRoaXMudHlwZT0iUXVhZHJhdGljQmV6aWVyQ3VydmUzIix0aGlzLnYwPXQsdGhpcy52MT1yLHRoaXMudjI9bn1nZXRQb2ludCh0LHI9bmV3IGope2xldCBuPXIsaT10aGlzLnYwLG89dGhpcy52MSxhPXRoaXMudjI7cmV0dXJuIG4uc2V0KEdQKHQsaS54LG8ueCxhLngpLEdQKHQsaS55LG8ueSxhLnkpLEdQKHQsaS56LG8ueixhLnopKSxufWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MC5jb3B5KHQudjApLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MD10aGlzLnYwLnRvQXJyYXkoKSx0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MC5mcm9tQXJyYXkodC52MCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319O2hNLnByb3RvdHlwZS5pc1F1YWRyYXRpY0JlemllckN1cnZlMz0hMDt2YXIgZk09Y2xhc3MgZXh0ZW5kcyBwc3tjb25zdHJ1Y3Rvcih0PVtdKXtzdXBlcigpLHRoaXMudHlwZT0iU3BsaW5lQ3VydmUiLHRoaXMucG9pbnRzPXR9Z2V0UG9pbnQodCxyPW5ldyBMdCl7bGV0IG49cixpPXRoaXMucG9pbnRzLG89KGkubGVuZ3RoLTEpKnQsYT1NYXRoLmZsb29yKG8pLHM9by1hLGw9aVthPT09MD9hOmEtMV0sYz1pW2FdLHU9aVthPmkubGVuZ3RoLTI/aS5sZW5ndGgtMTphKzFdLGg9aVthPmkubGVuZ3RoLTM/aS5sZW5ndGgtMTphKzJdO3JldHVybiBuLnNldChkaGUocyxsLngsYy54LHUueCxoLngpLGRoZShzLGwueSxjLnksdS55LGgueSkpLG59Y29weSh0KXtzdXBlci5jb3B5KHQpLHRoaXMucG9pbnRzPVtdO2ZvcihsZXQgcj0wLG49dC5wb2ludHMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXQucG9pbnRzW3JdO3RoaXMucG9pbnRzLnB1c2goaS5jbG9uZSgpKX1yZXR1cm4gdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LnBvaW50cz1bXTtmb3IobGV0IHI9MCxuPXRoaXMucG9pbnRzLmxlbmd0aDtyPG47cisrKXtsZXQgaT10aGlzLnBvaW50c1tyXTt0LnBvaW50cy5wdXNoKGkudG9BcnJheSgpKX1yZXR1cm4gdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IHI9MCxuPXQucG9pbnRzLmxlbmd0aDtyPG47cisrKXtsZXQgaT10LnBvaW50c1tyXTt0aGlzLnBvaW50cy5wdXNoKG5ldyBMdCgpLmZyb21BcnJheShpKSl9cmV0dXJuIHRoaXN9fTtmTS5wcm90b3R5cGUuaXNTcGxpbmVDdXJ2ZT0hMDt2YXIgT2h0PU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLEFyY0N1cnZlOmw2LENhdG11bGxSb21DdXJ2ZTM6YzYsQ3ViaWNCZXppZXJDdXJ2ZTpjTSxDdWJpY0JlemllckN1cnZlMzp1NixFbGxpcHNlQ3VydmU6VTEsTGluZUN1cnZlOnExLExpbmVDdXJ2ZTM6YlUsUXVhZHJhdGljQmV6aWVyQ3VydmU6dU0sUXVhZHJhdGljQmV6aWVyQ3VydmUzOmhNLFNwbGluZUN1cnZlOmZNfSksd1U9Y2xhc3MgZXh0ZW5kcyBwc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJDdXJ2ZVBhdGgiLHRoaXMuY3VydmVzPVtdLHRoaXMuYXV0b0Nsb3NlPSExfWFkZCh0KXt0aGlzLmN1cnZlcy5wdXNoKHQpfWNsb3NlUGF0aCgpe2xldCB0PXRoaXMuY3VydmVzWzBdLmdldFBvaW50KDApLHI9dGhpcy5jdXJ2ZXNbdGhpcy5jdXJ2ZXMubGVuZ3RoLTFdLmdldFBvaW50KDEpO3QuZXF1YWxzKHIpfHx0aGlzLmN1cnZlcy5wdXNoKG5ldyBxMShyLHQpKX1nZXRQb2ludCh0LHIpe2xldCBuPXQqdGhpcy5nZXRMZW5ndGgoKSxpPXRoaXMuZ2V0Q3VydmVMZW5ndGhzKCksbz0wO2Zvcig7bzxpLmxlbmd0aDspe2lmKGlbb10+PW4pe2xldCBhPWlbb10tbixzPXRoaXMuY3VydmVzW29dLGw9cy5nZXRMZW5ndGgoKSxjPWw9PT0wPzA6MS1hL2w7cmV0dXJuIHMuZ2V0UG9pbnRBdChjLHIpfW8rK31yZXR1cm4gbnVsbH1nZXRMZW5ndGgoKXtsZXQgdD10aGlzLmdldEN1cnZlTGVuZ3RocygpO3JldHVybiB0W3QubGVuZ3RoLTFdfXVwZGF0ZUFyY0xlbmd0aHMoKXt0aGlzLm5lZWRzVXBkYXRlPSEwLHRoaXMuY2FjaGVMZW5ndGhzPW51bGwsdGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKX1nZXRDdXJ2ZUxlbmd0aHMoKXtpZih0aGlzLmNhY2hlTGVuZ3RocyYmdGhpcy5jYWNoZUxlbmd0aHMubGVuZ3RoPT09dGhpcy5jdXJ2ZXMubGVuZ3RoKXJldHVybiB0aGlzLmNhY2hlTGVuZ3RocztsZXQgdD1bXSxyPTA7Zm9yKGxldCBuPTAsaT10aGlzLmN1cnZlcy5sZW5ndGg7bjxpO24rKylyKz10aGlzLmN1cnZlc1tuXS5nZXRMZW5ndGgoKSx0LnB1c2gocik7cmV0dXJuIHRoaXMuY2FjaGVMZW5ndGhzPXQsdH1nZXRTcGFjZWRQb2ludHModD00MCl7bGV0IHI9W107Zm9yKGxldCBuPTA7bjw9dDtuKyspci5wdXNoKHRoaXMuZ2V0UG9pbnQobi90KSk7cmV0dXJuIHRoaXMuYXV0b0Nsb3NlJiZyLnB1c2goclswXSkscn1nZXRQb2ludHModD0xMil7bGV0IHI9W10sbjtmb3IobGV0IGk9MCxvPXRoaXMuY3VydmVzO2k8by5sZW5ndGg7aSsrKXtsZXQgYT1vW2ldLHM9YSYmYS5pc0VsbGlwc2VDdXJ2ZT90KjI6YSYmKGEuaXNMaW5lQ3VydmV8fGEuaXNMaW5lQ3VydmUzKT8xOmEmJmEuaXNTcGxpbmVDdXJ2ZT90KmEucG9pbnRzLmxlbmd0aDp0LGw9YS5nZXRQb2ludHMocyk7Zm9yKGxldCBjPTA7YzxsLmxlbmd0aDtjKyspe2xldCB1PWxbY107biYmbi5lcXVhbHModSl8fChyLnB1c2godSksbj11KX19cmV0dXJuIHRoaXMuYXV0b0Nsb3NlJiZyLmxlbmd0aD4xJiYhcltyLmxlbmd0aC0xXS5lcXVhbHMoclswXSkmJnIucHVzaChyWzBdKSxyfWNvcHkodCl7c3VwZXIuY29weSh0KSx0aGlzLmN1cnZlcz1bXTtmb3IobGV0IHI9MCxuPXQuY3VydmVzLmxlbmd0aDtyPG47cisrKXtsZXQgaT10LmN1cnZlc1tyXTt0aGlzLmN1cnZlcy5wdXNoKGkuY2xvbmUoKSl9cmV0dXJuIHRoaXMuYXV0b0Nsb3NlPXQuYXV0b0Nsb3NlLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7dC5hdXRvQ2xvc2U9dGhpcy5hdXRvQ2xvc2UsdC5jdXJ2ZXM9W107Zm9yKGxldCByPTAsbj10aGlzLmN1cnZlcy5sZW5ndGg7cjxuO3IrKyl7bGV0IGk9dGhpcy5jdXJ2ZXNbcl07dC5jdXJ2ZXMucHVzaChpLnRvSlNPTigpKX1yZXR1cm4gdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLmF1dG9DbG9zZT10LmF1dG9DbG9zZSx0aGlzLmN1cnZlcz1bXTtmb3IobGV0IHI9MCxuPXQuY3VydmVzLmxlbmd0aDtyPG47cisrKXtsZXQgaT10LmN1cnZlc1tyXTt0aGlzLmN1cnZlcy5wdXNoKG5ldyBPaHRbaS50eXBlXSgpLmZyb21KU09OKGkpKX1yZXR1cm4gdGhpc319LEcxPWNsYXNzIGV4dGVuZHMgd1V7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlBhdGgiLHRoaXMuY3VycmVudFBvaW50PW5ldyBMdCx0JiZ0aGlzLnNldEZyb21Qb2ludHModCl9c2V0RnJvbVBvaW50cyh0KXt0aGlzLm1vdmVUbyh0WzBdLngsdFswXS55KTtmb3IobGV0IHI9MSxuPXQubGVuZ3RoO3I8bjtyKyspdGhpcy5saW5lVG8odFtyXS54LHRbcl0ueSk7cmV0dXJuIHRoaXN9bW92ZVRvKHQscil7cmV0dXJuIHRoaXMuY3VycmVudFBvaW50LnNldCh0LHIpLHRoaXN9bGluZVRvKHQscil7bGV0IG49bmV3IHExKHRoaXMuY3VycmVudFBvaW50LmNsb25lKCksbmV3IEx0KHQscikpO3JldHVybiB0aGlzLmN1cnZlcy5wdXNoKG4pLHRoaXMuY3VycmVudFBvaW50LnNldCh0LHIpLHRoaXN9cXVhZHJhdGljQ3VydmVUbyh0LHIsbixpKXtsZXQgbz1uZXcgdU0odGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgTHQodCxyKSxuZXcgTHQobixpKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2gobyksdGhpcy5jdXJyZW50UG9pbnQuc2V0KG4saSksdGhpc31iZXppZXJDdXJ2ZVRvKHQscixuLGksbyxhKXtsZXQgcz1uZXcgY00odGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgTHQodCxyKSxuZXcgTHQobixpKSxuZXcgTHQobyxhKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2gocyksdGhpcy5jdXJyZW50UG9pbnQuc2V0KG8sYSksdGhpc31zcGxpbmVUaHJ1KHQpe2xldCByPVt0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpXS5jb25jYXQodCksbj1uZXcgZk0ocik7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2gobiksdGhpcy5jdXJyZW50UG9pbnQuY29weSh0W3QubGVuZ3RoLTFdKSx0aGlzfWFyYyh0LHIsbixpLG8sYSl7bGV0IHM9dGhpcy5jdXJyZW50UG9pbnQueCxsPXRoaXMuY3VycmVudFBvaW50Lnk7cmV0dXJuIHRoaXMuYWJzYXJjKHQrcyxyK2wsbixpLG8sYSksdGhpc31hYnNhcmModCxyLG4saSxvLGEpe3JldHVybiB0aGlzLmFic2VsbGlwc2UodCxyLG4sbixpLG8sYSksdGhpc31lbGxpcHNlKHQscixuLGksbyxhLHMsbCl7bGV0IGM9dGhpcy5jdXJyZW50UG9pbnQueCx1PXRoaXMuY3VycmVudFBvaW50Lnk7cmV0dXJuIHRoaXMuYWJzZWxsaXBzZSh0K2Mscit1LG4saSxvLGEscyxsKSx0aGlzfWFic2VsbGlwc2UodCxyLG4saSxvLGEscyxsKXtsZXQgYz1uZXcgVTEodCxyLG4saSxvLGEscyxsKTtpZih0aGlzLmN1cnZlcy5sZW5ndGg+MCl7bGV0IGg9Yy5nZXRQb2ludCgwKTtoLmVxdWFscyh0aGlzLmN1cnJlbnRQb2ludCl8fHRoaXMubGluZVRvKGgueCxoLnkpfXRoaXMuY3VydmVzLnB1c2goYyk7bGV0IHU9Yy5nZXRQb2ludCgxKTtyZXR1cm4gdGhpcy5jdXJyZW50UG9pbnQuY29weSh1KSx0aGlzfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jdXJyZW50UG9pbnQuY29weSh0LmN1cnJlbnRQb2ludCksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC5jdXJyZW50UG9pbnQ9dGhpcy5jdXJyZW50UG9pbnQudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMuY3VycmVudFBvaW50LmZyb21BcnJheSh0LmN1cnJlbnRQb2ludCksdGhpc319LEtjPWNsYXNzIGV4dGVuZHMgRzF7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy51dWlkPURsKCksdGhpcy50eXBlPSJTaGFwZSIsdGhpcy5ob2xlcz1bXX1nZXRQb2ludHNIb2xlcyh0KXtsZXQgcj1bXTtmb3IobGV0IG49MCxpPXRoaXMuaG9sZXMubGVuZ3RoO248aTtuKyspcltuXT10aGlzLmhvbGVzW25dLmdldFBvaW50cyh0KTtyZXR1cm4gcn1leHRyYWN0UG9pbnRzKHQpe3JldHVybntzaGFwZTp0aGlzLmdldFBvaW50cyh0KSxob2xlczp0aGlzLmdldFBvaW50c0hvbGVzKHQpfX1jb3B5KHQpe3N1cGVyLmNvcHkodCksdGhpcy5ob2xlcz1bXTtmb3IobGV0IHI9MCxuPXQuaG9sZXMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXQuaG9sZXNbcl07dGhpcy5ob2xlcy5wdXNoKGkuY2xvbmUoKSl9cmV0dXJuIHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7dC51dWlkPXRoaXMudXVpZCx0LmhvbGVzPVtdO2ZvcihsZXQgcj0wLG49dGhpcy5ob2xlcy5sZW5ndGg7cjxuO3IrKyl7bGV0IGk9dGhpcy5ob2xlc1tyXTt0LmhvbGVzLnB1c2goaS50b0pTT04oKSl9cmV0dXJuIHR9ZnJvbUpTT04odCl7c3VwZXIuZnJvbUpTT04odCksdGhpcy51dWlkPXQudXVpZCx0aGlzLmhvbGVzPVtdO2ZvcihsZXQgcj0wLG49dC5ob2xlcy5sZW5ndGg7cjxuO3IrKyl7bGV0IGk9dC5ob2xlc1tyXTt0aGlzLmhvbGVzLnB1c2gobmV3IEcxKCkuZnJvbUpTT04oaSkpfXJldHVybiB0aGlzfX0sR2dyPXt0cmlhbmd1bGF0ZTpmdW5jdGlvbihlLHQscj0yKXtsZXQgbj10JiZ0Lmxlbmd0aCxpPW4/dFswXSpyOmUubGVuZ3RoLG89ZXBlKGUsMCxpLHIsITApLGE9W107aWYoIW98fG8ubmV4dD09PW8ucHJldilyZXR1cm4gYTtsZXQgcyxsLGMsdSxoLGYscDtpZihuJiYobz0kZ3IoZSx0LG8scikpLGUubGVuZ3RoPjgwKnIpe3M9Yz1lWzBdLGw9dT1lWzFdO2ZvcihsZXQgZD1yO2Q8aTtkKz1yKWg9ZVtkXSxmPWVbZCsxXSxoPHMmJihzPWgpLGY8bCYmKGw9ZiksaD5jJiYoYz1oKSxmPnUmJih1PWYpO3A9TWF0aC5tYXgoYy1zLHUtbCkscD1wIT09MD8xL3A6MH1yZXR1cm4gaDYobyxhLHIscyxsLHApLGF9fTtmdW5jdGlvbiBlcGUoZSx0LHIsbixpKXtsZXQgbyxhO2lmKGk9PT1hMHIoZSx0LHIsbik+MClmb3Iobz10O288cjtvKz1uKWE9bWhlKG8sZVtvXSxlW28rMV0sYSk7ZWxzZSBmb3Iobz1yLW47bz49dDtvLT1uKWE9bWhlKG8sZVtvXSxlW28rMV0sYSk7cmV0dXJuIGEmJlpVKGEsYS5uZXh0KSYmKHA2KGEpLGE9YS5uZXh0KSxhfWZ1bmN0aW9uIFcwKGUsdCl7aWYoIWUpcmV0dXJuIGU7dHx8KHQ9ZSk7bGV0IHI9ZSxuO2RvIGlmKG49ITEsIXIuc3RlaW5lciYmKFpVKHIsci5uZXh0KXx8YWkoci5wcmV2LHIsci5uZXh0KT09PTApKXtpZihwNihyKSxyPXQ9ci5wcmV2LHI9PT1yLm5leHQpYnJlYWs7bj0hMH1lbHNlIHI9ci5uZXh0O3doaWxlKG58fHIhPT10KTtyZXR1cm4gdH1mdW5jdGlvbiBoNihlLHQscixuLGksbyxhKXtpZighZSlyZXR1cm47IWEmJm8mJnQwcihlLG4saSxvKTtsZXQgcz1lLGwsYztmb3IoO2UucHJldiE9PWUubmV4dDspe2lmKGw9ZS5wcmV2LGM9ZS5uZXh0LG8/WWdyKGUsbixpLG8pOldncihlKSl7dC5wdXNoKGwuaS9yKSx0LnB1c2goZS5pL3IpLHQucHVzaChjLmkvcikscDYoZSksZT1jLm5leHQscz1jLm5leHQ7Y29udGludWV9aWYoZT1jLGU9PT1zKXthP2E9PT0xPyhlPWpncihXMChlKSx0LHIpLGg2KGUsdCxyLG4saSxvLDIpKTphPT09MiYmWGdyKGUsdCxyLG4saSxvKTpoNihXMChlKSx0LHIsbixpLG8sMSk7YnJlYWt9fX1mdW5jdGlvbiBXZ3IoZSl7bGV0IHQ9ZS5wcmV2LHI9ZSxuPWUubmV4dDtpZihhaSh0LHIsbik+PTApcmV0dXJuITE7bGV0IGk9ZS5uZXh0Lm5leHQ7Zm9yKDtpIT09ZS5wcmV2Oyl7aWYoSDModC54LHQueSxyLngsci55LG4ueCxuLnksaS54LGkueSkmJmFpKGkucHJldixpLGkubmV4dCk+PTApcmV0dXJuITE7aT1pLm5leHR9cmV0dXJuITB9ZnVuY3Rpb24gWWdyKGUsdCxyLG4pe2xldCBpPWUucHJldixvPWUsYT1lLm5leHQ7aWYoYWkoaSxvLGEpPj0wKXJldHVybiExO2xldCBzPWkueDxvLng/aS54PGEueD9pLng6YS54Om8ueDxhLng/by54OmEueCxsPWkueTxvLnk/aS55PGEueT9pLnk6YS55Om8ueTxhLnk/by55OmEueSxjPWkueD5vLng/aS54PmEueD9pLng6YS54Om8ueD5hLng/by54OmEueCx1PWkueT5vLnk/aS55PmEueT9pLnk6YS55Om8ueT5hLnk/by55OmEueSxoPW5odChzLGwsdCxyLG4pLGY9bmh0KGMsdSx0LHIsbikscD1lLnByZXZaLGQ9ZS5uZXh0Wjtmb3IoO3AmJnAuej49aCYmZCYmZC56PD1mOyl7aWYocCE9PWUucHJldiYmcCE9PWUubmV4dCYmSDMoaS54LGkueSxvLngsby55LGEueCxhLnkscC54LHAueSkmJmFpKHAucHJldixwLHAubmV4dCk+PTB8fChwPXAucHJldlosZCE9PWUucHJldiYmZCE9PWUubmV4dCYmSDMoaS54LGkueSxvLngsby55LGEueCxhLnksZC54LGQueSkmJmFpKGQucHJldixkLGQubmV4dCk+PTApKXJldHVybiExO2Q9ZC5uZXh0Wn1mb3IoO3AmJnAuej49aDspe2lmKHAhPT1lLnByZXYmJnAhPT1lLm5leHQmJkgzKGkueCxpLnksby54LG8ueSxhLngsYS55LHAueCxwLnkpJiZhaShwLnByZXYscCxwLm5leHQpPj0wKXJldHVybiExO3A9cC5wcmV2Wn1mb3IoO2QmJmQuejw9Zjspe2lmKGQhPT1lLnByZXYmJmQhPT1lLm5leHQmJkgzKGkueCxpLnksby54LG8ueSxhLngsYS55LGQueCxkLnkpJiZhaShkLnByZXYsZCxkLm5leHQpPj0wKXJldHVybiExO2Q9ZC5uZXh0Wn1yZXR1cm4hMH1mdW5jdGlvbiBqZ3IoZSx0LHIpe2xldCBuPWU7ZG97bGV0IGk9bi5wcmV2LG89bi5uZXh0Lm5leHQ7IVpVKGksbykmJnJwZShpLG4sbi5uZXh0LG8pJiZmNihpLG8pJiZmNihvLGkpJiYodC5wdXNoKGkuaS9yKSx0LnB1c2gobi5pL3IpLHQucHVzaChvLmkvcikscDYobikscDYobi5uZXh0KSxuPWU9byksbj1uLm5leHR9d2hpbGUobiE9PWUpO3JldHVybiBXMChuKX1mdW5jdGlvbiBYZ3IoZSx0LHIsbixpLG8pe2xldCBhPWU7ZG97bGV0IHM9YS5uZXh0Lm5leHQ7Zm9yKDtzIT09YS5wcmV2Oyl7aWYoYS5pIT09cy5pJiZuMHIoYSxzKSl7bGV0IGw9bnBlKGEscyk7YT1XMChhLGEubmV4dCksbD1XMChsLGwubmV4dCksaDYoYSx0LHIsbixpLG8pLGg2KGwsdCxyLG4saSxvKTtyZXR1cm59cz1zLm5leHR9YT1hLm5leHR9d2hpbGUoYSE9PWUpfWZ1bmN0aW9uICRncihlLHQscixuKXtsZXQgaT1bXSxvLGEscyxsLGM7Zm9yKG89MCxhPXQubGVuZ3RoO288YTtvKyspcz10W29dKm4sbD1vPGEtMT90W28rMV0qbjplLmxlbmd0aCxjPWVwZShlLHMsbCxuLCExKSxjPT09Yy5uZXh0JiYoYy5zdGVpbmVyPSEwKSxpLnB1c2gocjByKGMpKTtmb3IoaS5zb3J0KEtnciksbz0wO288aS5sZW5ndGg7bysrKVpncihpW29dLHIpLHI9VzAocixyLm5leHQpO3JldHVybiByfWZ1bmN0aW9uIEtncihlLHQpe3JldHVybiBlLngtdC54fWZ1bmN0aW9uIFpncihlLHQpe2lmKHQ9SmdyKGUsdCksdCl7bGV0IHI9bnBlKHQsZSk7VzAodCx0Lm5leHQpLFcwKHIsci5uZXh0KX19ZnVuY3Rpb24gSmdyKGUsdCl7bGV0IHI9dCxuPWUueCxpPWUueSxvPS0xLzAsYTtkb3tpZihpPD1yLnkmJmk+PXIubmV4dC55JiZyLm5leHQueSE9PXIueSl7bGV0IGY9ci54KyhpLXIueSkqKHIubmV4dC54LXIueCkvKHIubmV4dC55LXIueSk7aWYoZjw9biYmZj5vKXtpZihvPWYsZj09PW4pe2lmKGk9PT1yLnkpcmV0dXJuIHI7aWYoaT09PXIubmV4dC55KXJldHVybiByLm5leHR9YT1yLng8ci5uZXh0Lng/cjpyLm5leHR9fXI9ci5uZXh0fXdoaWxlKHIhPT10KTtpZighYSlyZXR1cm4gbnVsbDtpZihuPT09bylyZXR1cm4gYTtsZXQgcz1hLGw9YS54LGM9YS55LHU9MS8wLGg7cj1hO2RvIG4+PXIueCYmci54Pj1sJiZuIT09ci54JiZIMyhpPGM/bjpvLGksbCxjLGk8Yz9vOm4saSxyLngsci55KSYmKGg9TWF0aC5hYnMoaS1yLnkpLyhuLXIueCksZjYocixlKSYmKGg8dXx8aD09PXUmJihyLng+YS54fHxyLng9PT1hLngmJlFncihhLHIpKSkmJihhPXIsdT1oKSkscj1yLm5leHQ7d2hpbGUociE9PXMpO3JldHVybiBhfWZ1bmN0aW9uIFFncihlLHQpe3JldHVybiBhaShlLnByZXYsZSx0LnByZXYpPDAmJmFpKHQubmV4dCxlLGUubmV4dCk8MH1mdW5jdGlvbiB0MHIoZSx0LHIsbil7bGV0IGk9ZTtkbyBpLno9PT1udWxsJiYoaS56PW5odChpLngsaS55LHQscixuKSksaS5wcmV2Wj1pLnByZXYsaS5uZXh0Wj1pLm5leHQsaT1pLm5leHQ7d2hpbGUoaSE9PWUpO2kucHJldloubmV4dFo9bnVsbCxpLnByZXZaPW51bGwsZTByKGkpfWZ1bmN0aW9uIGUwcihlKXtsZXQgdCxyLG4saSxvLGEscyxsLGM9MTtkb3tmb3Iocj1lLGU9bnVsbCxvPW51bGwsYT0wO3I7KXtmb3IoYSsrLG49cixzPTAsdD0wO3Q8YyYmKHMrKyxuPW4ubmV4dFosISFuKTt0KyspO2ZvcihsPWM7cz4wfHxsPjAmJm47KXMhPT0wJiYobD09PTB8fCFufHxyLno8PW4ueik/KGk9cixyPXIubmV4dFoscy0tKTooaT1uLG49bi5uZXh0WixsLS0pLG8/by5uZXh0Wj1pOmU9aSxpLnByZXZaPW8sbz1pO3I9bn1vLm5leHRaPW51bGwsYyo9Mn13aGlsZShhPjEpO3JldHVybiBlfWZ1bmN0aW9uIG5odChlLHQscixuLGkpe3JldHVybiBlPTMyNzY3KihlLXIpKmksdD0zMjc2NyoodC1uKSppLGU9KGV8ZTw8OCkmMTY3MTE5MzUsZT0oZXxlPDw0KSYyNTI2NDUxMzUsZT0oZXxlPDwyKSY4NTg5OTM0NTksZT0oZXxlPDwxKSYxNDMxNjU1NzY1LHQ9KHR8dDw8OCkmMTY3MTE5MzUsdD0odHx0PDw0KSYyNTI2NDUxMzUsdD0odHx0PDwyKSY4NTg5OTM0NTksdD0odHx0PDwxKSYxNDMxNjU1NzY1LGV8dDw8MX1mdW5jdGlvbiByMHIoZSl7bGV0IHQ9ZSxyPWU7ZG8odC54PHIueHx8dC54PT09ci54JiZ0Lnk8ci55KSYmKHI9dCksdD10Lm5leHQ7d2hpbGUodCE9PWUpO3JldHVybiByfWZ1bmN0aW9uIEgzKGUsdCxyLG4saSxvLGEscyl7cmV0dXJuKGktYSkqKHQtcyktKGUtYSkqKG8tcyk+PTAmJihlLWEpKihuLXMpLShyLWEpKih0LXMpPj0wJiYoci1hKSooby1zKS0oaS1hKSoobi1zKT49MH1mdW5jdGlvbiBuMHIoZSx0KXtyZXR1cm4gZS5uZXh0LmkhPT10LmkmJmUucHJldi5pIT09dC5pJiYhaTByKGUsdCkmJihmNihlLHQpJiZmNih0LGUpJiZvMHIoZSx0KSYmKGFpKGUucHJldixlLHQucHJldil8fGFpKGUsdC5wcmV2LHQpKXx8WlUoZSx0KSYmYWkoZS5wcmV2LGUsZS5uZXh0KT4wJiZhaSh0LnByZXYsdCx0Lm5leHQpPjApfWZ1bmN0aW9uIGFpKGUsdCxyKXtyZXR1cm4odC55LWUueSkqKHIueC10LngpLSh0LngtZS54KSooci55LXQueSl9ZnVuY3Rpb24gWlUoZSx0KXtyZXR1cm4gZS54PT09dC54JiZlLnk9PT10Lnl9ZnVuY3Rpb24gcnBlKGUsdCxyLG4pe2xldCBpPUdWKGFpKGUsdCxyKSksbz1HVihhaShlLHQsbikpLGE9R1YoYWkocixuLGUpKSxzPUdWKGFpKHIsbix0KSk7cmV0dXJuISEoaSE9PW8mJmEhPT1zfHxpPT09MCYmcVYoZSxyLHQpfHxvPT09MCYmcVYoZSxuLHQpfHxhPT09MCYmcVYocixlLG4pfHxzPT09MCYmcVYocix0LG4pKX1mdW5jdGlvbiBxVihlLHQscil7cmV0dXJuIHQueDw9TWF0aC5tYXgoZS54LHIueCkmJnQueD49TWF0aC5taW4oZS54LHIueCkmJnQueTw9TWF0aC5tYXgoZS55LHIueSkmJnQueT49TWF0aC5taW4oZS55LHIueSl9ZnVuY3Rpb24gR1YoZSl7cmV0dXJuIGU+MD8xOmU8MD8tMTowfWZ1bmN0aW9uIGkwcihlLHQpe2xldCByPWU7ZG97aWYoci5pIT09ZS5pJiZyLm5leHQuaSE9PWUuaSYmci5pIT09dC5pJiZyLm5leHQuaSE9PXQuaSYmcnBlKHIsci5uZXh0LGUsdCkpcmV0dXJuITA7cj1yLm5leHR9d2hpbGUociE9PWUpO3JldHVybiExfWZ1bmN0aW9uIGY2KGUsdCl7cmV0dXJuIGFpKGUucHJldixlLGUubmV4dCk8MD9haShlLHQsZS5uZXh0KT49MCYmYWkoZSxlLnByZXYsdCk+PTA6YWkoZSx0LGUucHJldik8MHx8YWkoZSxlLm5leHQsdCk8MH1mdW5jdGlvbiBvMHIoZSx0KXtsZXQgcj1lLG49ITEsaT0oZS54K3QueCkvMixvPShlLnkrdC55KS8yO2RvIHIueT5vIT1yLm5leHQueT5vJiZyLm5leHQueSE9PXIueSYmaTwoci5uZXh0Lngtci54KSooby1yLnkpLyhyLm5leHQueS1yLnkpK3IueCYmKG49IW4pLHI9ci5uZXh0O3doaWxlKHIhPT1lKTtyZXR1cm4gbn1mdW5jdGlvbiBucGUoZSx0KXtsZXQgcj1uZXcgaWh0KGUuaSxlLngsZS55KSxuPW5ldyBpaHQodC5pLHQueCx0LnkpLGk9ZS5uZXh0LG89dC5wcmV2O3JldHVybiBlLm5leHQ9dCx0LnByZXY9ZSxyLm5leHQ9aSxpLnByZXY9cixuLm5leHQ9cixyLnByZXY9bixvLm5leHQ9bixuLnByZXY9byxufWZ1bmN0aW9uIG1oZShlLHQscixuKXtsZXQgaT1uZXcgaWh0KGUsdCxyKTtyZXR1cm4gbj8oaS5uZXh0PW4ubmV4dCxpLnByZXY9bixuLm5leHQucHJldj1pLG4ubmV4dD1pKTooaS5wcmV2PWksaS5uZXh0PWkpLGl9ZnVuY3Rpb24gcDYoZSl7ZS5uZXh0LnByZXY9ZS5wcmV2LGUucHJldi5uZXh0PWUubmV4dCxlLnByZXZaJiYoZS5wcmV2Wi5uZXh0Wj1lLm5leHRaKSxlLm5leHRaJiYoZS5uZXh0Wi5wcmV2Wj1lLnByZXZaKX1mdW5jdGlvbiBpaHQoZSx0LHIpe3RoaXMuaT1lLHRoaXMueD10LHRoaXMueT1yLHRoaXMucHJldj1udWxsLHRoaXMubmV4dD1udWxsLHRoaXMuej1udWxsLHRoaXMucHJldlo9bnVsbCx0aGlzLm5leHRaPW51bGwsdGhpcy5zdGVpbmVyPSExfWZ1bmN0aW9uIGEwcihlLHQscixuKXtsZXQgaT0wO2ZvcihsZXQgbz10LGE9ci1uO288cjtvKz1uKWkrPShlW2FdLWVbb10pKihlW28rMV0rZVthKzFdKSxhPW87cmV0dXJuIGl9dmFyIFpjPWNsYXNze3N0YXRpYyBhcmVhKHQpe2xldCByPXQubGVuZ3RoLG49MDtmb3IobGV0IGk9ci0xLG89MDtvPHI7aT1vKyspbis9dFtpXS54KnRbb10ueS10W29dLngqdFtpXS55O3JldHVybiBuKi41fXN0YXRpYyBpc0Nsb2NrV2lzZSh0KXtyZXR1cm4gWmMuYXJlYSh0KTwwfXN0YXRpYyB0cmlhbmd1bGF0ZVNoYXBlKHQscil7bGV0IG49W10saT1bXSxvPVtdO2doZSh0KSxfaGUobix0KTtsZXQgYT10Lmxlbmd0aDtyLmZvckVhY2goZ2hlKTtmb3IobGV0IGw9MDtsPHIubGVuZ3RoO2wrKylpLnB1c2goYSksYSs9cltsXS5sZW5ndGgsX2hlKG4scltsXSk7bGV0IHM9R2dyLnRyaWFuZ3VsYXRlKG4saSk7Zm9yKGxldCBsPTA7bDxzLmxlbmd0aDtsKz0zKW8ucHVzaChzLnNsaWNlKGwsbCszKSk7cmV0dXJuIG99fTtmdW5jdGlvbiBnaGUoZSl7bGV0IHQ9ZS5sZW5ndGg7dD4yJiZlW3QtMV0uZXF1YWxzKGVbMF0pJiZlLnBvcCgpfWZ1bmN0aW9uIF9oZShlLHQpe2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKWUucHVzaCh0W3JdLngpLGUucHVzaCh0W3JdLnkpfXZhciBoaD1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9bmV3IEtjKFtuZXcgTHQoLjUsLjUpLG5ldyBMdCgtLjUsLjUpLG5ldyBMdCgtLjUsLS41KSxuZXcgTHQoLjUsLS41KV0pLHI9e30pe3N1cGVyKCksdGhpcy50eXBlPSJFeHRydWRlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17c2hhcGVzOnQsb3B0aW9uczpyfSx0PUFycmF5LmlzQXJyYXkodCk/dDpbdF07bGV0IG49dGhpcyxpPVtdLG89W107Zm9yKGxldCBzPTAsbD10Lmxlbmd0aDtzPGw7cysrKXtsZXQgYz10W3NdO2EoYyl9dGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoaSwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgeGUobywyKSksdGhpcy5jb21wdXRlVmVydGV4Tm9ybWFscygpO2Z1bmN0aW9uIGEocyl7bGV0IGw9W10sYz1yLmN1cnZlU2VnbWVudHMhPT12b2lkIDA/ci5jdXJ2ZVNlZ21lbnRzOjEyLHU9ci5zdGVwcyE9PXZvaWQgMD9yLnN0ZXBzOjEsaD1yLmRlcHRoIT09dm9pZCAwP3IuZGVwdGg6MSxmPXIuYmV2ZWxFbmFibGVkIT09dm9pZCAwP3IuYmV2ZWxFbmFibGVkOiEwLHA9ci5iZXZlbFRoaWNrbmVzcyE9PXZvaWQgMD9yLmJldmVsVGhpY2tuZXNzOi4yLGQ9ci5iZXZlbFNpemUhPT12b2lkIDA/ci5iZXZlbFNpemU6cC0uMSxnPXIuYmV2ZWxPZmZzZXQhPT12b2lkIDA/ci5iZXZlbE9mZnNldDowLF89ci5iZXZlbFNlZ21lbnRzIT09dm9pZCAwP3IuYmV2ZWxTZWdtZW50czozLHk9ci5leHRydWRlUGF0aCx4PXIuVVZHZW5lcmF0b3IhPT12b2lkIDA/ci5VVkdlbmVyYXRvcjpzMHI7ci5hbW91bnQhPT12b2lkIDAmJihjb25zb2xlLndhcm4oIlRIUkVFLkV4dHJ1ZGVCdWZmZXJHZW9tZXRyeTogYW1vdW50IGhhcyBiZWVuIHJlbmFtZWQgdG8gZGVwdGguIiksaD1yLmFtb3VudCk7bGV0IGIsUz0hMSxDLFAsayxPO3kmJihiPXkuZ2V0U3BhY2VkUG9pbnRzKHUpLFM9ITAsZj0hMSxDPXkuY29tcHV0ZUZyZW5ldEZyYW1lcyh1LCExKSxQPW5ldyBqLGs9bmV3IGosTz1uZXcgaiksZnx8KF89MCxwPTAsZD0wLGc9MCk7bGV0IEQ9cy5leHRyYWN0UG9pbnRzKGMpLEI9RC5zaGFwZSxJPUQuaG9sZXM7aWYoIVpjLmlzQ2xvY2tXaXNlKEIpKXtCPUIucmV2ZXJzZSgpO2ZvcihsZXQgcT0wLHB0PUkubGVuZ3RoO3E8cHQ7cSsrKXtsZXQgaHQ9SVtxXTtaYy5pc0Nsb2NrV2lzZShodCkmJihJW3FdPWh0LnJldmVyc2UoKSl9fWxldCBSPVpjLnRyaWFuZ3VsYXRlU2hhcGUoQixJKSxGPUI7Zm9yKGxldCBxPTAscHQ9SS5sZW5ndGg7cTxwdDtxKyspe2xldCBodD1JW3FdO0I9Qi5jb25jYXQoaHQpfWZ1bmN0aW9uIHoocSxwdCxodCl7cmV0dXJuIHB0fHxjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IHZlYyBkb2VzIG5vdCBleGlzdCIpLHB0LmNsb25lKCkubXVsdGlwbHlTY2FsYXIoaHQpLmFkZChxKX1sZXQgVT1CLmxlbmd0aCxXPVIubGVuZ3RoO2Z1bmN0aW9uIFoocSxwdCxodCl7bGV0IHd0LGt0LGllLGVlPXEueC1wdC54LExlPXEueS1wdC55LGFyPWh0LngtcS54LGZyPWh0LnktcS55LHR0PWVlKmVlK0xlKkxlLCQ9ZWUqZnItTGUqYXI7aWYoTWF0aC5hYnMoJCk+TnVtYmVyLkVQU0lMT04pe2xldCBJdD1NYXRoLnNxcnQodHQpLCR0PU1hdGguc3FydChhciphcitmcipmciksaGU9cHQueC1MZS9JdCxUdD1wdC55K2VlL0l0LGJlPWh0LngtZnIvJHQsbnQ9aHQueSthci8kdCxDdD0oKGJlLWhlKSpmci0obnQtVHQpKmFyKS8oZWUqZnItTGUqYXIpO3d0PWhlK2VlKkN0LXEueCxrdD1UdCtMZSpDdC1xLnk7bGV0IFd0PXd0Knd0K2t0Kmt0O2lmKFd0PD0yKXJldHVybiBuZXcgTHQod3Qsa3QpO2llPU1hdGguc3FydChXdC8yKX1lbHNle2xldCBJdD0hMTtlZT5OdW1iZXIuRVBTSUxPTj9hcj5OdW1iZXIuRVBTSUxPTiYmKEl0PSEwKTplZTwtTnVtYmVyLkVQU0lMT04/YXI8LU51bWJlci5FUFNJTE9OJiYoSXQ9ITApOk1hdGguc2lnbihMZSk9PT1NYXRoLnNpZ24oZnIpJiYoSXQ9ITApLEl0Pyh3dD0tTGUsa3Q9ZWUsaWU9TWF0aC5zcXJ0KHR0KSk6KHd0PWVlLGt0PUxlLGllPU1hdGguc3FydCh0dC8yKSl9cmV0dXJuIG5ldyBMdCh3dC9pZSxrdC9pZSl9bGV0IHJ0PVtdO2ZvcihsZXQgcT0wLHB0PUYubGVuZ3RoLGh0PXB0LTEsd3Q9cSsxO3E8cHQ7cSsrLGh0Kyssd3QrKylodD09PXB0JiYoaHQ9MCksd3Q9PT1wdCYmKHd0PTApLHJ0W3FdPVooRltxXSxGW2h0XSxGW3d0XSk7bGV0IG90PVtdLHN0LFN0PXJ0LmNvbmNhdCgpO2ZvcihsZXQgcT0wLHB0PUkubGVuZ3RoO3E8cHQ7cSsrKXtsZXQgaHQ9SVtxXTtzdD1bXTtmb3IobGV0IHd0PTAsa3Q9aHQubGVuZ3RoLGllPWt0LTEsZWU9d3QrMTt3dDxrdDt3dCsrLGllKyssZWUrKylpZT09PWt0JiYoaWU9MCksZWU9PT1rdCYmKGVlPTApLHN0W3d0XT1aKGh0W3d0XSxodFtpZV0saHRbZWVdKTtvdC5wdXNoKHN0KSxTdD1TdC5jb25jYXQoc3QpfWZvcihsZXQgcT0wO3E8XztxKyspe2xldCBwdD1xL18saHQ9cCpNYXRoLmNvcyhwdCpNYXRoLlBJLzIpLHd0PWQqTWF0aC5zaW4ocHQqTWF0aC5QSS8yKStnO2ZvcihsZXQga3Q9MCxpZT1GLmxlbmd0aDtrdDxpZTtrdCsrKXtsZXQgZWU9eihGW2t0XSxydFtrdF0sd3QpO190KGVlLngsZWUueSwtaHQpfWZvcihsZXQga3Q9MCxpZT1JLmxlbmd0aDtrdDxpZTtrdCsrKXtsZXQgZWU9SVtrdF07c3Q9b3Rba3RdO2ZvcihsZXQgTGU9MCxhcj1lZS5sZW5ndGg7TGU8YXI7TGUrKyl7bGV0IGZyPXooZWVbTGVdLHN0W0xlXSx3dCk7X3QoZnIueCxmci55LC1odCl9fX1sZXQgYnQ9ZCtnO2ZvcihsZXQgcT0wO3E8VTtxKyspe2xldCBwdD1mP3ooQltxXSxTdFtxXSxidCk6QltxXTtTPyhrLmNvcHkoQy5ub3JtYWxzWzBdKS5tdWx0aXBseVNjYWxhcihwdC54KSxQLmNvcHkoQy5iaW5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKHB0LnkpLE8uY29weShiWzBdKS5hZGQoaykuYWRkKFApLF90KE8ueCxPLnksTy56KSk6X3QocHQueCxwdC55LDApfWZvcihsZXQgcT0xO3E8PXU7cSsrKWZvcihsZXQgcHQ9MDtwdDxVO3B0Kyspe2xldCBodD1mP3ooQltwdF0sU3RbcHRdLGJ0KTpCW3B0XTtTPyhrLmNvcHkoQy5ub3JtYWxzW3FdKS5tdWx0aXBseVNjYWxhcihodC54KSxQLmNvcHkoQy5iaW5vcm1hbHNbcV0pLm11bHRpcGx5U2NhbGFyKGh0LnkpLE8uY29weShiW3FdKS5hZGQoaykuYWRkKFApLF90KE8ueCxPLnksTy56KSk6X3QoaHQueCxodC55LGgvdSpxKX1mb3IobGV0IHE9Xy0xO3E+PTA7cS0tKXtsZXQgcHQ9cS9fLGh0PXAqTWF0aC5jb3MocHQqTWF0aC5QSS8yKSx3dD1kKk1hdGguc2luKHB0Kk1hdGguUEkvMikrZztmb3IobGV0IGt0PTAsaWU9Ri5sZW5ndGg7a3Q8aWU7a3QrKyl7bGV0IGVlPXooRltrdF0scnRba3RdLHd0KTtfdChlZS54LGVlLnksaCtodCl9Zm9yKGxldCBrdD0wLGllPUkubGVuZ3RoO2t0PGllO2t0Kyspe2xldCBlZT1JW2t0XTtzdD1vdFtrdF07Zm9yKGxldCBMZT0wLGFyPWVlLmxlbmd0aDtMZTxhcjtMZSsrKXtsZXQgZnI9eihlZVtMZV0sc3RbTGVdLHd0KTtTP190KGZyLngsZnIueStiW3UtMV0ueSxiW3UtMV0ueCtodCk6X3QoZnIueCxmci55LGgraHQpfX19TXQoKSxsdCgpO2Z1bmN0aW9uIE10KCl7bGV0IHE9aS5sZW5ndGgvMztpZihmKXtsZXQgcHQ9MCxodD1VKnB0O2ZvcihsZXQgd3Q9MDt3dDxXO3d0Kyspe2xldCBrdD1SW3d0XTtjdChrdFsyXStodCxrdFsxXStodCxrdFswXStodCl9cHQ9dStfKjIsaHQ9VSpwdDtmb3IobGV0IHd0PTA7d3Q8Vzt3dCsrKXtsZXQga3Q9Ult3dF07Y3Qoa3RbMF0raHQsa3RbMV0raHQsa3RbMl0raHQpfX1lbHNle2ZvcihsZXQgcHQ9MDtwdDxXO3B0Kyspe2xldCBodD1SW3B0XTtjdChodFsyXSxodFsxXSxodFswXSl9Zm9yKGxldCBwdD0wO3B0PFc7cHQrKyl7bGV0IGh0PVJbcHRdO2N0KGh0WzBdK1UqdSxodFsxXStVKnUsaHRbMl0rVSp1KX19bi5hZGRHcm91cChxLGkubGVuZ3RoLzMtcSwwKX1mdW5jdGlvbiBsdCgpe2xldCBxPWkubGVuZ3RoLzMscHQ9MDtLdChGLHB0KSxwdCs9Ri5sZW5ndGg7Zm9yKGxldCBodD0wLHd0PUkubGVuZ3RoO2h0PHd0O2h0Kyspe2xldCBrdD1JW2h0XTtLdChrdCxwdCkscHQrPWt0Lmxlbmd0aH1uLmFkZEdyb3VwKHEsaS5sZW5ndGgvMy1xLDEpfWZ1bmN0aW9uIEt0KHEscHQpe2xldCBodD1xLmxlbmd0aDtmb3IoOy0taHQ+PTA7KXtsZXQgd3Q9aHQsa3Q9aHQtMTtrdDwwJiYoa3Q9cS5sZW5ndGgtMSk7Zm9yKGxldCBpZT0wLGVlPXUrXyoyO2llPGVlO2llKyspe2xldCBMZT1VKmllLGFyPVUqKGllKzEpLGZyPXB0K3d0K0xlLHR0PXB0K2t0K0xlLCQ9cHQra3QrYXIsSXQ9cHQrd3QrYXI7WChmcix0dCwkLEl0KX19fWZ1bmN0aW9uIF90KHEscHQsaHQpe2wucHVzaChxKSxsLnB1c2gocHQpLGwucHVzaChodCl9ZnVuY3Rpb24gY3QocSxwdCxodCl7ZXQocSksZXQocHQpLGV0KGh0KTtsZXQgd3Q9aS5sZW5ndGgvMyxrdD14LmdlbmVyYXRlVG9wVVYobixpLHd0LTMsd3QtMix3dC0xKTtkdChrdFswXSksZHQoa3RbMV0pLGR0KGt0WzJdKX1mdW5jdGlvbiBYKHEscHQsaHQsd3Qpe2V0KHEpLGV0KHB0KSxldCh3dCksZXQocHQpLGV0KGh0KSxldCh3dCk7bGV0IGt0PWkubGVuZ3RoLzMsaWU9eC5nZW5lcmF0ZVNpZGVXYWxsVVYobixpLGt0LTYsa3QtMyxrdC0yLGt0LTEpO2R0KGllWzBdKSxkdChpZVsxXSksZHQoaWVbM10pLGR0KGllWzFdKSxkdChpZVsyXSksZHQoaWVbM10pfWZ1bmN0aW9uIGV0KHEpe2kucHVzaChsW3EqMyswXSksaS5wdXNoKGxbcSozKzFdKSxpLnB1c2gobFtxKjMrMl0pfWZ1bmN0aW9uIGR0KHEpe28ucHVzaChxLngpLG8ucHVzaChxLnkpfX19dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCkscj10aGlzLnBhcmFtZXRlcnMuc2hhcGVzLG49dGhpcy5wYXJhbWV0ZXJzLm9wdGlvbnM7cmV0dXJuIGwwcihyLG4sdCl9c3RhdGljIGZyb21KU09OKHQscil7bGV0IG49W107Zm9yKGxldCBvPTAsYT10LnNoYXBlcy5sZW5ndGg7bzxhO28rKyl7bGV0IHM9clt0LnNoYXBlc1tvXV07bi5wdXNoKHMpfWxldCBpPXQub3B0aW9ucy5leHRydWRlUGF0aDtyZXR1cm4gaSE9PXZvaWQgMCYmKHQub3B0aW9ucy5leHRydWRlUGF0aD1uZXcgT2h0W2kudHlwZV0oKS5mcm9tSlNPTihpKSksbmV3IGhoKG4sdC5vcHRpb25zKX19LHMwcj17Z2VuZXJhdGVUb3BVVjpmdW5jdGlvbihlLHQscixuLGkpe2xldCBvPXRbciozXSxhPXRbciozKzFdLHM9dFtuKjNdLGw9dFtuKjMrMV0sYz10W2kqM10sdT10W2kqMysxXTtyZXR1cm5bbmV3IEx0KG8sYSksbmV3IEx0KHMsbCksbmV3IEx0KGMsdSldfSxnZW5lcmF0ZVNpZGVXYWxsVVY6ZnVuY3Rpb24oZSx0LHIsbixpLG8pe2xldCBhPXRbciozXSxzPXRbciozKzFdLGw9dFtyKjMrMl0sYz10W24qM10sdT10W24qMysxXSxoPXRbbiozKzJdLGY9dFtpKjNdLHA9dFtpKjMrMV0sZD10W2kqMysyXSxnPXRbbyozXSxfPXRbbyozKzFdLHk9dFtvKjMrMl07cmV0dXJuIE1hdGguYWJzKHMtdSk8TWF0aC5hYnMoYS1jKT9bbmV3IEx0KGEsMS1sKSxuZXcgTHQoYywxLWgpLG5ldyBMdChmLDEtZCksbmV3IEx0KGcsMS15KV06W25ldyBMdChzLDEtbCksbmV3IEx0KHUsMS1oKSxuZXcgTHQocCwxLWQpLG5ldyBMdChfLDEteSldfX07ZnVuY3Rpb24gbDByKGUsdCxyKXtpZihyLnNoYXBlcz1bXSxBcnJheS5pc0FycmF5KGUpKWZvcihsZXQgbj0wLGk9ZS5sZW5ndGg7bjxpO24rKyl7bGV0IG89ZVtuXTtyLnNoYXBlcy5wdXNoKG8udXVpZCl9ZWxzZSByLnNoYXBlcy5wdXNoKGUudXVpZCk7cmV0dXJuIHQuZXh0cnVkZVBhdGghPT12b2lkIDAmJihyLm9wdGlvbnMuZXh0cnVkZVBhdGg9dC5leHRydWRlUGF0aC50b0pTT04oKSkscn12YXIgVzE9Y2xhc3MgZXh0ZW5kcyB1aHtjb25zdHJ1Y3Rvcih0PTEscj0wKXtsZXQgbj0oMStNYXRoLnNxcnQoNSkpLzIsaT1bLTEsbiwwLDEsbiwwLC0xLC1uLDAsMSwtbiwwLDAsLTEsbiwwLDEsbiwwLC0xLC1uLDAsMSwtbixuLDAsLTEsbiwwLDEsLW4sMCwtMSwtbiwwLDFdLG89WzAsMTEsNSwwLDUsMSwwLDEsNywwLDcsMTAsMCwxMCwxMSwxLDUsOSw1LDExLDQsMTEsMTAsMiwxMCw3LDYsNywxLDgsMyw5LDQsMyw0LDIsMywyLDYsMyw2LDgsMyw4LDksNCw5LDUsMiw0LDExLDYsMiwxMCw4LDYsNyw5LDgsMV07c3VwZXIoaSxvLHQsciksdGhpcy50eXBlPSJJY29zYWhlZHJvbkdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czp0LGRldGFpbDpyfX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBXMSh0LnJhZGl1cyx0LmRldGFpbCl9fSxZMT1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9W25ldyBMdCgwLC41KSxuZXcgTHQoLjUsMCksbmV3IEx0KDAsLS41KV0scj0xMixuPTAsaT1NYXRoLlBJKjIpe3N1cGVyKCksdGhpcy50eXBlPSJMYXRoZUdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3BvaW50czp0LHNlZ21lbnRzOnIscGhpU3RhcnQ6bixwaGlMZW5ndGg6aX0scj1NYXRoLmZsb29yKHIpLGk9Wm8oaSwwLE1hdGguUEkqMik7bGV0IG89W10sYT1bXSxzPVtdLGw9W10sYz1bXSx1PTEvcixoPW5ldyBqLGY9bmV3IEx0LHA9bmV3IGosZD1uZXcgaixnPW5ldyBqLF89MCx5PTA7Zm9yKGxldCB4PTA7eDw9dC5sZW5ndGgtMTt4Kyspc3dpdGNoKHgpe2Nhc2UgMDpfPXRbeCsxXS54LXRbeF0ueCx5PXRbeCsxXS55LXRbeF0ueSxwLng9eSoxLHAueT0tXyxwLno9eSowLGcuY29weShwKSxwLm5vcm1hbGl6ZSgpLGwucHVzaChwLngscC55LHAueik7YnJlYWs7Y2FzZSB0Lmxlbmd0aC0xOmwucHVzaChnLngsZy55LGcueik7YnJlYWs7ZGVmYXVsdDpfPXRbeCsxXS54LXRbeF0ueCx5PXRbeCsxXS55LXRbeF0ueSxwLng9eSoxLHAueT0tXyxwLno9eSowLGQuY29weShwKSxwLngrPWcueCxwLnkrPWcueSxwLnorPWcueixwLm5vcm1hbGl6ZSgpLGwucHVzaChwLngscC55LHAueiksZy5jb3B5KGQpfWZvcihsZXQgeD0wO3g8PXI7eCsrKXtsZXQgYj1uK3gqdSppLFM9TWF0aC5zaW4oYiksQz1NYXRoLmNvcyhiKTtmb3IobGV0IFA9MDtQPD10Lmxlbmd0aC0xO1ArKyl7aC54PXRbUF0ueCpTLGgueT10W1BdLnksaC56PXRbUF0ueCpDLGEucHVzaChoLngsaC55LGgueiksZi54PXgvcixmLnk9UC8odC5sZW5ndGgtMSkscy5wdXNoKGYueCxmLnkpO2xldCBrPWxbMypQKzBdKlMsTz1sWzMqUCsxXSxEPWxbMypQKzBdKkM7Yy5wdXNoKGssTyxEKX19Zm9yKGxldCB4PTA7eDxyO3grKylmb3IobGV0IGI9MDtiPHQubGVuZ3RoLTE7YisrKXtsZXQgUz1iK3gqdC5sZW5ndGgsQz1TLFA9Uyt0Lmxlbmd0aCxrPVMrdC5sZW5ndGgrMSxPPVMrMTtvLnB1c2goQyxQLE8pLG8ucHVzaChrLE8sUCl9dGhpcy5zZXRJbmRleChvKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShhLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyB4ZShzLDIpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgeGUoYywzKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgWTEodC5wb2ludHMsdC5zZWdtZW50cyx0LnBoaVN0YXJ0LHQucGhpTGVuZ3RoKX19LFkwPWNsYXNzIGV4dGVuZHMgdWh7Y29uc3RydWN0b3IodD0xLHI9MCl7bGV0IG49WzEsMCwwLC0xLDAsMCwwLDEsMCwwLC0xLDAsMCwwLDEsMCwwLC0xXSxpPVswLDIsNCwwLDQsMywwLDMsNSwwLDUsMiwxLDIsNSwxLDUsMywxLDMsNCwxLDQsMl07c3VwZXIobixpLHQsciksdGhpcy50eXBlPSJPY3RhaGVkcm9uR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsZGV0YWlsOnJ9fXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IFkwKHQucmFkaXVzLHQuZGV0YWlsKX19LGoxPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD0uNSxyPTEsbj04LGk9MSxvPTAsYT1NYXRoLlBJKjIpe3N1cGVyKCksdGhpcy50eXBlPSJSaW5nR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17aW5uZXJSYWRpdXM6dCxvdXRlclJhZGl1czpyLHRoZXRhU2VnbWVudHM6bixwaGlTZWdtZW50czppLHRoZXRhU3RhcnQ6byx0aGV0YUxlbmd0aDphfSxuPU1hdGgubWF4KDMsbiksaT1NYXRoLm1heCgxLGkpO2xldCBzPVtdLGw9W10sYz1bXSx1PVtdLGg9dCxmPShyLXQpL2kscD1uZXcgaixkPW5ldyBMdDtmb3IobGV0IGc9MDtnPD1pO2crKyl7Zm9yKGxldCBfPTA7Xzw9bjtfKyspe2xldCB5PW8rXy9uKmE7cC54PWgqTWF0aC5jb3MoeSkscC55PWgqTWF0aC5zaW4oeSksbC5wdXNoKHAueCxwLnkscC56KSxjLnB1c2goMCwwLDEpLGQueD0ocC54L3IrMSkvMixkLnk9KHAueS9yKzEpLzIsdS5wdXNoKGQueCxkLnkpfWgrPWZ9Zm9yKGxldCBnPTA7ZzxpO2crKyl7bGV0IF89ZyoobisxKTtmb3IobGV0IHk9MDt5PG47eSsrKXtsZXQgeD15K18sYj14LFM9eCtuKzEsQz14K24rMixQPXgrMTtzLnB1c2goYixTLFApLHMucHVzaChTLEMsUCl9fXRoaXMuc2V0SW5kZXgocyksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUobCwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IHhlKGMsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKHUsMikpfXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IGoxKHQuaW5uZXJSYWRpdXMsdC5vdXRlclJhZGl1cyx0LnRoZXRhU2VnbWVudHMsdC5waGlTZWdtZW50cyx0LnRoZXRhU3RhcnQsdC50aGV0YUxlbmd0aCl9fSxqMD1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9bmV3IEtjKFtuZXcgTHQoMCwuNSksbmV3IEx0KC0uNSwtLjUpLG5ldyBMdCguNSwtLjUpXSkscj0xMil7c3VwZXIoKSx0aGlzLnR5cGU9IlNoYXBlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17c2hhcGVzOnQsY3VydmVTZWdtZW50czpyfTtsZXQgbj1bXSxpPVtdLG89W10sYT1bXSxzPTAsbD0wO2lmKEFycmF5LmlzQXJyYXkodCk9PT0hMSljKHQpO2Vsc2UgZm9yKGxldCB1PTA7dTx0Lmxlbmd0aDt1KyspYyh0W3VdKSx0aGlzLmFkZEdyb3VwKHMsbCx1KSxzKz1sLGw9MDt0aGlzLnNldEluZGV4KG4pLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKGksMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyB4ZShvLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyB4ZShhLDIpKTtmdW5jdGlvbiBjKHUpe2xldCBoPWkubGVuZ3RoLzMsZj11LmV4dHJhY3RQb2ludHMocikscD1mLnNoYXBlLGQ9Zi5ob2xlcztaYy5pc0Nsb2NrV2lzZShwKT09PSExJiYocD1wLnJldmVyc2UoKSk7Zm9yKGxldCBfPTAseT1kLmxlbmd0aDtfPHk7XysrKXtsZXQgeD1kW19dO1pjLmlzQ2xvY2tXaXNlKHgpPT09ITAmJihkW19dPXgucmV2ZXJzZSgpKX1sZXQgZz1aYy50cmlhbmd1bGF0ZVNoYXBlKHAsZCk7Zm9yKGxldCBfPTAseT1kLmxlbmd0aDtfPHk7XysrKXtsZXQgeD1kW19dO3A9cC5jb25jYXQoeCl9Zm9yKGxldCBfPTAseT1wLmxlbmd0aDtfPHk7XysrKXtsZXQgeD1wW19dO2kucHVzaCh4LngseC55LDApLG8ucHVzaCgwLDAsMSksYS5wdXNoKHgueCx4LnkpfWZvcihsZXQgXz0wLHk9Zy5sZW5ndGg7Xzx5O18rKyl7bGV0IHg9Z1tfXSxiPXhbMF0raCxTPXhbMV0raCxDPXhbMl0raDtuLnB1c2goYixTLEMpLGwrPTN9fX10b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKSxyPXRoaXMucGFyYW1ldGVycy5zaGFwZXM7cmV0dXJuIGMwcihyLHQpfXN0YXRpYyBmcm9tSlNPTih0LHIpe2xldCBuPVtdO2ZvcihsZXQgaT0wLG89dC5zaGFwZXMubGVuZ3RoO2k8bztpKyspe2xldCBhPXJbdC5zaGFwZXNbaV1dO24ucHVzaChhKX1yZXR1cm4gbmV3IGowKG4sdC5jdXJ2ZVNlZ21lbnRzKX19O2Z1bmN0aW9uIGMwcihlLHQpe2lmKHQuc2hhcGVzPVtdLEFycmF5LmlzQXJyYXkoZSkpZm9yKGxldCByPTAsbj1lLmxlbmd0aDtyPG47cisrKXtsZXQgaT1lW3JdO3Quc2hhcGVzLnB1c2goaS51dWlkKX1lbHNlIHQuc2hhcGVzLnB1c2goZS51dWlkKTtyZXR1cm4gdH12YXIgWDA9Y2xhc3MgZXh0ZW5kcyBQZXtjb25zdHJ1Y3Rvcih0PTEscj0zMixuPTE2LGk9MCxvPU1hdGguUEkqMixhPTAscz1NYXRoLlBJKXtzdXBlcigpLHRoaXMudHlwZT0iU3BoZXJlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsd2lkdGhTZWdtZW50czpyLGhlaWdodFNlZ21lbnRzOm4scGhpU3RhcnQ6aSxwaGlMZW5ndGg6byx0aGV0YVN0YXJ0OmEsdGhldGFMZW5ndGg6c30scj1NYXRoLm1heCgzLE1hdGguZmxvb3IocikpLG49TWF0aC5tYXgoMixNYXRoLmZsb29yKG4pKTtsZXQgbD1NYXRoLm1pbihhK3MsTWF0aC5QSSksYz0wLHU9W10saD1uZXcgaixmPW5ldyBqLHA9W10sZD1bXSxnPVtdLF89W107Zm9yKGxldCB5PTA7eTw9bjt5Kyspe2xldCB4PVtdLGI9eS9uLFM9MDt5PT0wJiZhPT0wP1M9LjUvcjp5PT1uJiZsPT1NYXRoLlBJJiYoUz0tLjUvcik7Zm9yKGxldCBDPTA7Qzw9cjtDKyspe2xldCBQPUMvcjtoLng9LXQqTWF0aC5jb3MoaStQKm8pKk1hdGguc2luKGErYipzKSxoLnk9dCpNYXRoLmNvcyhhK2IqcyksaC56PXQqTWF0aC5zaW4oaStQKm8pKk1hdGguc2luKGErYipzKSxkLnB1c2goaC54LGgueSxoLnopLGYuY29weShoKS5ub3JtYWxpemUoKSxnLnB1c2goZi54LGYueSxmLnopLF8ucHVzaChQK1MsMS1iKSx4LnB1c2goYysrKX11LnB1c2goeCl9Zm9yKGxldCB5PTA7eTxuO3krKylmb3IobGV0IHg9MDt4PHI7eCsrKXtsZXQgYj11W3ldW3grMV0sUz11W3ldW3hdLEM9dVt5KzFdW3hdLFA9dVt5KzFdW3grMV07KHkhPT0wfHxhPjApJiZwLnB1c2goYixTLFApLCh5IT09bi0xfHxsPE1hdGguUEkpJiZwLnB1c2goUyxDLFApfXRoaXMuc2V0SW5kZXgocCksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoZCwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IHhlKGcsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKF8sMikpfXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IFgwKHQucmFkaXVzLHQud2lkdGhTZWdtZW50cyx0LmhlaWdodFNlZ21lbnRzLHQucGhpU3RhcnQsdC5waGlMZW5ndGgsdC50aGV0YVN0YXJ0LHQudGhldGFMZW5ndGgpfX0sWDE9Y2xhc3MgZXh0ZW5kcyB1aHtjb25zdHJ1Y3Rvcih0PTEscj0wKXtsZXQgbj1bMSwxLDEsLTEsLTEsMSwtMSwxLC0xLDEsLTEsLTFdLGk9WzIsMSwwLDAsMywyLDEsMywwLDIsMywxXTtzdXBlcihuLGksdCxyKSx0aGlzLnR5cGU9IlRldHJhaGVkcm9uR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsZGV0YWlsOnJ9fXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IFgxKHQucmFkaXVzLHQuZGV0YWlsKX19LCQxPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD0xLHI9LjQsbj04LGk9NixvPU1hdGguUEkqMil7c3VwZXIoKSx0aGlzLnR5cGU9IlRvcnVzR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsdHViZTpyLHJhZGlhbFNlZ21lbnRzOm4sdHVidWxhclNlZ21lbnRzOmksYXJjOm99LG49TWF0aC5mbG9vcihuKSxpPU1hdGguZmxvb3IoaSk7bGV0IGE9W10scz1bXSxsPVtdLGM9W10sdT1uZXcgaixoPW5ldyBqLGY9bmV3IGo7Zm9yKGxldCBwPTA7cDw9bjtwKyspZm9yKGxldCBkPTA7ZDw9aTtkKyspe2xldCBnPWQvaSpvLF89cC9uKk1hdGguUEkqMjtoLng9KHQrcipNYXRoLmNvcyhfKSkqTWF0aC5jb3MoZyksaC55PSh0K3IqTWF0aC5jb3MoXykpKk1hdGguc2luKGcpLGguej1yKk1hdGguc2luKF8pLHMucHVzaChoLngsaC55LGgueiksdS54PXQqTWF0aC5jb3MoZyksdS55PXQqTWF0aC5zaW4oZyksZi5zdWJWZWN0b3JzKGgsdSkubm9ybWFsaXplKCksbC5wdXNoKGYueCxmLnksZi56KSxjLnB1c2goZC9pKSxjLnB1c2gocC9uKX1mb3IobGV0IHA9MTtwPD1uO3ArKylmb3IobGV0IGQ9MTtkPD1pO2QrKyl7bGV0IGc9KGkrMSkqcCtkLTEsXz0oaSsxKSoocC0xKStkLTEseT0oaSsxKSoocC0xKStkLHg9KGkrMSkqcCtkO2EucHVzaChnLF8seCksYS5wdXNoKF8seSx4KX10aGlzLnNldEluZGV4KGEpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKHMsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyB4ZShsLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyB4ZShjLDIpKX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyAkMSh0LnJhZGl1cyx0LnR1YmUsdC5yYWRpYWxTZWdtZW50cyx0LnR1YnVsYXJTZWdtZW50cyx0LmFyYyl9fSxLMT1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9MSxyPS40LG49NjQsaT04LG89MixhPTMpe3N1cGVyKCksdGhpcy50eXBlPSJUb3J1c0tub3RHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6dCx0dWJlOnIsdHVidWxhclNlZ21lbnRzOm4scmFkaWFsU2VnbWVudHM6aSxwOm8scTphfSxuPU1hdGguZmxvb3IobiksaT1NYXRoLmZsb29yKGkpO2xldCBzPVtdLGw9W10sYz1bXSx1PVtdLGg9bmV3IGosZj1uZXcgaixwPW5ldyBqLGQ9bmV3IGosZz1uZXcgaixfPW5ldyBqLHk9bmV3IGo7Zm9yKGxldCBiPTA7Yjw9bjsrK2Ipe2xldCBTPWIvbipvKk1hdGguUEkqMjt4KFMsbyxhLHQscCkseChTKy4wMSxvLGEsdCxkKSxfLnN1YlZlY3RvcnMoZCxwKSx5LmFkZFZlY3RvcnMoZCxwKSxnLmNyb3NzVmVjdG9ycyhfLHkpLHkuY3Jvc3NWZWN0b3JzKGcsXyksZy5ub3JtYWxpemUoKSx5Lm5vcm1hbGl6ZSgpO2ZvcihsZXQgQz0wO0M8PWk7KytDKXtsZXQgUD1DL2kqTWF0aC5QSSoyLGs9LXIqTWF0aC5jb3MoUCksTz1yKk1hdGguc2luKFApO2gueD1wLngrKGsqeS54K08qZy54KSxoLnk9cC55KyhrKnkueStPKmcueSksaC56PXAueisoayp5LnorTypnLnopLGwucHVzaChoLngsaC55LGgueiksZi5zdWJWZWN0b3JzKGgscCkubm9ybWFsaXplKCksYy5wdXNoKGYueCxmLnksZi56KSx1LnB1c2goYi9uKSx1LnB1c2goQy9pKX19Zm9yKGxldCBiPTE7Yjw9bjtiKyspZm9yKGxldCBTPTE7Uzw9aTtTKyspe2xldCBDPShpKzEpKihiLTEpKyhTLTEpLFA9KGkrMSkqYisoUy0xKSxrPShpKzEpKmIrUyxPPShpKzEpKihiLTEpK1M7cy5wdXNoKEMsUCxPKSxzLnB1c2goUCxrLE8pfXRoaXMuc2V0SW5kZXgocyksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUobCwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IHhlKGMsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKHUsMikpO2Z1bmN0aW9uIHgoYixTLEMsUCxrKXtsZXQgTz1NYXRoLmNvcyhiKSxEPU1hdGguc2luKGIpLEI9Qy9TKmIsST1NYXRoLmNvcyhCKTtrLng9UCooMitJKSouNSpPLGsueT1QKigyK0kpKkQqLjUsay56PVAqTWF0aC5zaW4oQikqLjV9fXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IEsxKHQucmFkaXVzLHQudHViZSx0LnR1YnVsYXJTZWdtZW50cyx0LnJhZGlhbFNlZ21lbnRzLHQucCx0LnEpfX0sWjE9Y2xhc3MgZXh0ZW5kcyBQZXtjb25zdHJ1Y3Rvcih0PW5ldyBoTShuZXcgaigtMSwtMSwwKSxuZXcgaigtMSwxLDApLG5ldyBqKDEsMSwwKSkscj02NCxuPTEsaT04LG89ITEpe3N1cGVyKCksdGhpcy50eXBlPSJUdWJlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cGF0aDp0LHR1YnVsYXJTZWdtZW50czpyLHJhZGl1czpuLHJhZGlhbFNlZ21lbnRzOmksY2xvc2VkOm99O2xldCBhPXQuY29tcHV0ZUZyZW5ldEZyYW1lcyhyLG8pO3RoaXMudGFuZ2VudHM9YS50YW5nZW50cyx0aGlzLm5vcm1hbHM9YS5ub3JtYWxzLHRoaXMuYmlub3JtYWxzPWEuYmlub3JtYWxzO2xldCBzPW5ldyBqLGw9bmV3IGosYz1uZXcgTHQsdT1uZXcgaixoPVtdLGY9W10scD1bXSxkPVtdO2coKSx0aGlzLnNldEluZGV4KGQpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKGgsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyB4ZShmLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyB4ZShwLDIpKTtmdW5jdGlvbiBnKCl7Zm9yKGxldCBiPTA7YjxyO2IrKylfKGIpO18obz09PSExP3I6MCkseCgpLHkoKX1mdW5jdGlvbiBfKGIpe3U9dC5nZXRQb2ludEF0KGIvcix1KTtsZXQgUz1hLm5vcm1hbHNbYl0sQz1hLmJpbm9ybWFsc1tiXTtmb3IobGV0IFA9MDtQPD1pO1ArKyl7bGV0IGs9UC9pKk1hdGguUEkqMixPPU1hdGguc2luKGspLEQ9LU1hdGguY29zKGspO2wueD1EKlMueCtPKkMueCxsLnk9RCpTLnkrTypDLnksbC56PUQqUy56K08qQy56LGwubm9ybWFsaXplKCksZi5wdXNoKGwueCxsLnksbC56KSxzLng9dS54K24qbC54LHMueT11LnkrbipsLnkscy56PXUueituKmwueixoLnB1c2gocy54LHMueSxzLnopfX1mdW5jdGlvbiB5KCl7Zm9yKGxldCBiPTE7Yjw9cjtiKyspZm9yKGxldCBTPTE7Uzw9aTtTKyspe2xldCBDPShpKzEpKihiLTEpKyhTLTEpLFA9KGkrMSkqYisoUy0xKSxrPShpKzEpKmIrUyxPPShpKzEpKihiLTEpK1M7ZC5wdXNoKEMsUCxPKSxkLnB1c2goUCxrLE8pfX1mdW5jdGlvbiB4KCl7Zm9yKGxldCBiPTA7Yjw9cjtiKyspZm9yKGxldCBTPTA7Uzw9aTtTKyspYy54PWIvcixjLnk9Uy9pLHAucHVzaChjLngsYy55KX19dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQucGF0aD10aGlzLnBhcmFtZXRlcnMucGF0aC50b0pTT04oKSx0fXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IFoxKG5ldyBPaHRbdC5wYXRoLnR5cGVdKCkuZnJvbUpTT04odC5wYXRoKSx0LnR1YnVsYXJTZWdtZW50cyx0LnJhZGl1cyx0LnJhZGlhbFNlZ21lbnRzLHQuY2xvc2VkKX19LGQ2PWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD1udWxsKXtpZihzdXBlcigpLHRoaXMudHlwZT0iV2lyZWZyYW1lR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17Z2VvbWV0cnk6dH0sdCE9PW51bGwpe2xldCByPVtdLG49bmV3IFNldCxpPW5ldyBqLG89bmV3IGo7aWYodC5pbmRleCE9PW51bGwpe2xldCBhPXQuYXR0cmlidXRlcy5wb3NpdGlvbixzPXQuaW5kZXgsbD10Lmdyb3VwcztsLmxlbmd0aD09PTAmJihsPVt7c3RhcnQ6MCxjb3VudDpzLmNvdW50LG1hdGVyaWFsSW5kZXg6MH1dKTtmb3IobGV0IGM9MCx1PWwubGVuZ3RoO2M8dTsrK2Mpe2xldCBoPWxbY10sZj1oLnN0YXJ0LHA9aC5jb3VudDtmb3IobGV0IGQ9ZixnPWYrcDtkPGc7ZCs9Mylmb3IobGV0IF89MDtfPDM7XysrKXtsZXQgeT1zLmdldFgoZCtfKSx4PXMuZ2V0WChkKyhfKzEpJTMpO2kuZnJvbUJ1ZmZlckF0dHJpYnV0ZShhLHkpLG8uZnJvbUJ1ZmZlckF0dHJpYnV0ZShhLHgpLHloZShpLG8sbik9PT0hMCYmKHIucHVzaChpLngsaS55LGkueiksci5wdXNoKG8ueCxvLnksby56KSl9fX1lbHNle2xldCBhPXQuYXR0cmlidXRlcy5wb3NpdGlvbjtmb3IobGV0IHM9MCxsPWEuY291bnQvMztzPGw7cysrKWZvcihsZXQgYz0wO2M8MztjKyspe2xldCB1PTMqcytjLGg9MypzKyhjKzEpJTM7aS5mcm9tQnVmZmVyQXR0cmlidXRlKGEsdSksby5mcm9tQnVmZmVyQXR0cmlidXRlKGEsaCkseWhlKGksbyxuKT09PSEwJiYoci5wdXNoKGkueCxpLnksaS56KSxyLnB1c2goby54LG8ueSxvLnopKX19dGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUociwzKSl9fX07ZnVuY3Rpb24geWhlKGUsdCxyKXtsZXQgbj1gJHtlLnh9LCR7ZS55fSwke2Uuen0tJHt0Lnh9LCR7dC55fSwke3Quen1gLGk9YCR7dC54fSwke3QueX0sJHt0Lnp9LSR7ZS54fSwke2UueX0sJHtlLnp9YDtyZXR1cm4gci5oYXMobik9PT0hMHx8ci5oYXMoaSk9PT0hMD8hMTooci5hZGQobixpKSwhMCl9dmFyIHZoZT1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxCb3hHZW9tZXRyeTp0cCxCb3hCdWZmZXJHZW9tZXRyeTp0cCxDaXJjbGVHZW9tZXRyeTpCMSxDaXJjbGVCdWZmZXJHZW9tZXRyeTpCMSxDb25lR2VvbWV0cnk6SDEsQ29uZUJ1ZmZlckdlb21ldHJ5OkgxLEN5bGluZGVyR2VvbWV0cnk6YW0sQ3lsaW5kZXJCdWZmZXJHZW9tZXRyeTphbSxEb2RlY2FoZWRyb25HZW9tZXRyeTpWMSxEb2RlY2FoZWRyb25CdWZmZXJHZW9tZXRyeTpWMSxFZGdlc0dlb21ldHJ5OnM2LEV4dHJ1ZGVHZW9tZXRyeTpoaCxFeHRydWRlQnVmZmVyR2VvbWV0cnk6aGgsSWNvc2FoZWRyb25HZW9tZXRyeTpXMSxJY29zYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OlcxLExhdGhlR2VvbWV0cnk6WTEsTGF0aGVCdWZmZXJHZW9tZXRyeTpZMSxPY3RhaGVkcm9uR2VvbWV0cnk6WTAsT2N0YWhlZHJvbkJ1ZmZlckdlb21ldHJ5OlkwLFBsYW5lR2VvbWV0cnk6VTAsUGxhbmVCdWZmZXJHZW9tZXRyeTpVMCxQb2x5aGVkcm9uR2VvbWV0cnk6dWgsUG9seWhlZHJvbkJ1ZmZlckdlb21ldHJ5OnVoLFJpbmdHZW9tZXRyeTpqMSxSaW5nQnVmZmVyR2VvbWV0cnk6ajEsU2hhcGVHZW9tZXRyeTpqMCxTaGFwZUJ1ZmZlckdlb21ldHJ5OmowLFNwaGVyZUdlb21ldHJ5OlgwLFNwaGVyZUJ1ZmZlckdlb21ldHJ5OlgwLFRldHJhaGVkcm9uR2VvbWV0cnk6WDEsVGV0cmFoZWRyb25CdWZmZXJHZW9tZXRyeTpYMSxUb3J1c0dlb21ldHJ5OiQxLFRvcnVzQnVmZmVyR2VvbWV0cnk6JDEsVG9ydXNLbm90R2VvbWV0cnk6SzEsVG9ydXNLbm90QnVmZmVyR2VvbWV0cnk6SzEsVHViZUdlb21ldHJ5OloxLFR1YmVCdWZmZXJHZW9tZXRyeTpaMSxXaXJlZnJhbWVHZW9tZXRyeTpkNn0pLG02PWNsYXNzIGV4dGVuZHMgcWl7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlNoYWRvd01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgwKSx0aGlzLnRyYW5zcGFyZW50PSEwLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXN9fTttNi5wcm90b3R5cGUuaXNTaGFkb3dNYXRlcmlhbD0hMDt2YXIgcE09Y2xhc3MgZXh0ZW5kcyBxaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiJ9LHRoaXMudHlwZT0iTWVzaFN0YW5kYXJkTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IG5lKDE2Nzc3MjE1KSx0aGlzLnJvdWdobmVzcz0xLHRoaXMubWV0YWxuZXNzPTAsdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZT1uZXcgbmUoMCksdGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmVNYXA9bnVsbCx0aGlzLmJ1bXBNYXA9bnVsbCx0aGlzLmJ1bXBTY2FsZT0xLHRoaXMubm9ybWFsTWFwPW51bGwsdGhpcy5ub3JtYWxNYXBUeXBlPXN4LHRoaXMubm9ybWFsU2NhbGU9bmV3IEx0KDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5yb3VnaG5lc3NNYXA9bnVsbCx0aGlzLm1ldGFsbmVzc01hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuZW52TWFwSW50ZW5zaXR5PTEsdGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4LHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuZmxhdFNoYWRpbmc9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRlZmluZXM9e1NUQU5EQVJEOiIifSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5yb3VnaG5lc3M9dC5yb3VnaG5lc3MsdGhpcy5tZXRhbG5lc3M9dC5tZXRhbG5lc3MsdGhpcy5tYXA9dC5tYXAsdGhpcy5saWdodE1hcD10LmxpZ2h0TWFwLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSx0aGlzLmFvTWFwPXQuYW9NYXAsdGhpcy5hb01hcEludGVuc2l0eT10LmFvTWFwSW50ZW5zaXR5LHRoaXMuZW1pc3NpdmUuY29weSh0LmVtaXNzaXZlKSx0aGlzLmVtaXNzaXZlTWFwPXQuZW1pc3NpdmVNYXAsdGhpcy5lbWlzc2l2ZUludGVuc2l0eT10LmVtaXNzaXZlSW50ZW5zaXR5LHRoaXMuYnVtcE1hcD10LmJ1bXBNYXAsdGhpcy5idW1wU2NhbGU9dC5idW1wU2NhbGUsdGhpcy5ub3JtYWxNYXA9dC5ub3JtYWxNYXAsdGhpcy5ub3JtYWxNYXBUeXBlPXQubm9ybWFsTWFwVHlwZSx0aGlzLm5vcm1hbFNjYWxlLmNvcHkodC5ub3JtYWxTY2FsZSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy5yb3VnaG5lc3NNYXA9dC5yb3VnaG5lc3NNYXAsdGhpcy5tZXRhbG5lc3NNYXA9dC5tZXRhbG5lc3NNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuZW52TWFwSW50ZW5zaXR5PXQuZW52TWFwSW50ZW5zaXR5LHRoaXMucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXMuZmxhdFNoYWRpbmc9dC5mbGF0U2hhZGluZyx0aGlzfX07cE0ucHJvdG90eXBlLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw9ITA7dmFyIGc2PWNsYXNzIGV4dGVuZHMgcE17Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmRlZmluZXM9e1NUQU5EQVJEOiIiLFBIWVNJQ0FMOiIifSx0aGlzLnR5cGU9Ik1lc2hQaHlzaWNhbE1hdGVyaWFsIix0aGlzLmNsZWFyY29hdE1hcD1udWxsLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzPTAsdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXA9bnVsbCx0aGlzLmNsZWFyY29hdE5vcm1hbFNjYWxlPW5ldyBMdCgxLDEpLHRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwPW51bGwsdGhpcy5pb3I9MS41LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJyZWZsZWN0aXZpdHkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gWm8oMi41Kih0aGlzLmlvci0xKS8odGhpcy5pb3IrMSksMCwxKX0sc2V0OmZ1bmN0aW9uKHIpe3RoaXMuaW9yPSgxKy40KnIpLygxLS40KnIpfX0pLHRoaXMuc2hlZW5Db2xvcj1uZXcgbmUoMCksdGhpcy5zaGVlbkNvbG9yTWFwPW51bGwsdGhpcy5zaGVlblJvdWdobmVzcz0xLHRoaXMuc2hlZW5Sb3VnaG5lc3NNYXA9bnVsbCx0aGlzLnRyYW5zbWlzc2lvbk1hcD1udWxsLHRoaXMudGhpY2tuZXNzPTAsdGhpcy50aGlja25lc3NNYXA9bnVsbCx0aGlzLmF0dGVudWF0aW9uRGlzdGFuY2U9MCx0aGlzLmF0dGVudWF0aW9uQ29sb3I9bmV3IG5lKDEsMSwxKSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5PTEsdGhpcy5zcGVjdWxhckludGVuc2l0eU1hcD1udWxsLHRoaXMuc3BlY3VsYXJDb2xvcj1uZXcgbmUoMSwxLDEpLHRoaXMuc3BlY3VsYXJDb2xvck1hcD1udWxsLHRoaXMuX3NoZWVuPTAsdGhpcy5fY2xlYXJjb2F0PTAsdGhpcy5fdHJhbnNtaXNzaW9uPTAsdGhpcy5zZXRWYWx1ZXModCl9Z2V0IHNoZWVuKCl7cmV0dXJuIHRoaXMuX3NoZWVufXNldCBzaGVlbih0KXt0aGlzLl9zaGVlbj4wIT10PjAmJnRoaXMudmVyc2lvbisrLHRoaXMuX3NoZWVuPXR9Z2V0IGNsZWFyY29hdCgpe3JldHVybiB0aGlzLl9jbGVhcmNvYXR9c2V0IGNsZWFyY29hdCh0KXt0aGlzLl9jbGVhcmNvYXQ+MCE9dD4wJiZ0aGlzLnZlcnNpb24rKyx0aGlzLl9jbGVhcmNvYXQ9dH1nZXQgdHJhbnNtaXNzaW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zbWlzc2lvbn1zZXQgdHJhbnNtaXNzaW9uKHQpe3RoaXMuX3RyYW5zbWlzc2lvbj4wIT10PjAmJnRoaXMudmVyc2lvbisrLHRoaXMuX3RyYW5zbWlzc2lvbj10fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIixQSFlTSUNBTDoiIn0sdGhpcy5jbGVhcmNvYXQ9dC5jbGVhcmNvYXQsdGhpcy5jbGVhcmNvYXRNYXA9dC5jbGVhcmNvYXRNYXAsdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3M9dC5jbGVhcmNvYXRSb3VnaG5lc3MsdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXA9dC5jbGVhcmNvYXRSb3VnaG5lc3NNYXAsdGhpcy5jbGVhcmNvYXROb3JtYWxNYXA9dC5jbGVhcmNvYXROb3JtYWxNYXAsdGhpcy5jbGVhcmNvYXROb3JtYWxTY2FsZS5jb3B5KHQuY2xlYXJjb2F0Tm9ybWFsU2NhbGUpLHRoaXMuaW9yPXQuaW9yLHRoaXMuc2hlZW49dC5zaGVlbix0aGlzLnNoZWVuQ29sb3IuY29weSh0LnNoZWVuQ29sb3IpLHRoaXMuc2hlZW5Db2xvck1hcD10LnNoZWVuQ29sb3JNYXAsdGhpcy5zaGVlblJvdWdobmVzcz10LnNoZWVuUm91Z2huZXNzLHRoaXMuc2hlZW5Sb3VnaG5lc3NNYXA9dC5zaGVlblJvdWdobmVzc01hcCx0aGlzLnRyYW5zbWlzc2lvbj10LnRyYW5zbWlzc2lvbix0aGlzLnRyYW5zbWlzc2lvbk1hcD10LnRyYW5zbWlzc2lvbk1hcCx0aGlzLnRoaWNrbmVzcz10LnRoaWNrbmVzcyx0aGlzLnRoaWNrbmVzc01hcD10LnRoaWNrbmVzc01hcCx0aGlzLmF0dGVudWF0aW9uRGlzdGFuY2U9dC5hdHRlbnVhdGlvbkRpc3RhbmNlLHRoaXMuYXR0ZW51YXRpb25Db2xvci5jb3B5KHQuYXR0ZW51YXRpb25Db2xvciksdGhpcy5zcGVjdWxhckludGVuc2l0eT10LnNwZWN1bGFySW50ZW5zaXR5LHRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXA9dC5zcGVjdWxhckludGVuc2l0eU1hcCx0aGlzLnNwZWN1bGFyQ29sb3IuY29weSh0LnNwZWN1bGFyQ29sb3IpLHRoaXMuc3BlY3VsYXJDb2xvck1hcD10LnNwZWN1bGFyQ29sb3JNYXAsdGhpc319O2c2LnByb3RvdHlwZS5pc01lc2hQaHlzaWNhbE1hdGVyaWFsPSEwO3ZhciBfNj1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoUGhvbmdNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgbmUoMTY3NzcyMTUpLHRoaXMuc3BlY3VsYXI9bmV3IG5lKDExMTg0ODEpLHRoaXMuc2hpbmluZXNzPTMwLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IG5lKDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT1zeCx0aGlzLm5vcm1hbFNjYWxlPW5ldyBMdCgxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuc3BlY3VsYXJNYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5lbnZNYXA9bnVsbCx0aGlzLmNvbWJpbmU9TzYsdGhpcy5yZWZsZWN0aXZpdHk9MSx0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTgsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5mbGF0U2hhZGluZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLnNwZWN1bGFyLmNvcHkodC5zcGVjdWxhciksdGhpcy5zaGluaW5lc3M9dC5zaGluaW5lc3MsdGhpcy5tYXA9dC5tYXAsdGhpcy5saWdodE1hcD10LmxpZ2h0TWFwLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSx0aGlzLmFvTWFwPXQuYW9NYXAsdGhpcy5hb01hcEludGVuc2l0eT10LmFvTWFwSW50ZW5zaXR5LHRoaXMuZW1pc3NpdmUuY29weSh0LmVtaXNzaXZlKSx0aGlzLmVtaXNzaXZlTWFwPXQuZW1pc3NpdmVNYXAsdGhpcy5lbWlzc2l2ZUludGVuc2l0eT10LmVtaXNzaXZlSW50ZW5zaXR5LHRoaXMuYnVtcE1hcD10LmJ1bXBNYXAsdGhpcy5idW1wU2NhbGU9dC5idW1wU2NhbGUsdGhpcy5ub3JtYWxNYXA9dC5ub3JtYWxNYXAsdGhpcy5ub3JtYWxNYXBUeXBlPXQubm9ybWFsTWFwVHlwZSx0aGlzLm5vcm1hbFNjYWxlLmNvcHkodC5ub3JtYWxTY2FsZSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy5zcGVjdWxhck1hcD10LnNwZWN1bGFyTWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmVudk1hcD10LmVudk1hcCx0aGlzLmNvbWJpbmU9dC5jb21iaW5lLHRoaXMucmVmbGVjdGl2aXR5PXQucmVmbGVjdGl2aXR5LHRoaXMucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXMuZmxhdFNoYWRpbmc9dC5mbGF0U2hhZGluZyx0aGlzfX07XzYucHJvdG90eXBlLmlzTWVzaFBob25nTWF0ZXJpYWw9ITA7dmFyIHk2PWNsYXNzIGV4dGVuZHMgcWl7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmRlZmluZXM9e1RPT046IiJ9LHRoaXMudHlwZT0iTWVzaFRvb25NYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgbmUoMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5ncmFkaWVudE1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlPW5ldyBuZSgwKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZU1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9c3gsdGhpcy5ub3JtYWxTY2FsZT1uZXcgTHQoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5ncmFkaWVudE1hcD10LmdyYWRpZW50TWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzfX07eTYucHJvdG90eXBlLmlzTWVzaFRvb25NYXRlcmlhbD0hMDt2YXIgdjY9Y2xhc3MgZXh0ZW5kcyBxaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaE5vcm1hbE1hdGVyaWFsIix0aGlzLmJ1bXBNYXA9bnVsbCx0aGlzLmJ1bXBTY2FsZT0xLHRoaXMubm9ybWFsTWFwPW51bGwsdGhpcy5ub3JtYWxNYXBUeXBlPXN4LHRoaXMubm9ybWFsU2NhbGU9bmV3IEx0KDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLmZvZz0hMSx0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319O3Y2LnByb3RvdHlwZS5pc01lc2hOb3JtYWxNYXRlcmlhbD0hMDt2YXIgeDY9Y2xhc3MgZXh0ZW5kcyBxaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaExhbWJlcnRNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgbmUoMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IG5lKDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5zcGVjdWxhck1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuY29tYmluZT1PNix0aGlzLnJlZmxlY3Rpdml0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5zcGVjdWxhck1hcD10LnNwZWN1bGFyTWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmVudk1hcD10LmVudk1hcCx0aGlzLmNvbWJpbmU9dC5jb21iaW5lLHRoaXMucmVmbGVjdGl2aXR5PXQucmVmbGVjdGl2aXR5LHRoaXMucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXN9fTt4Ni5wcm90b3R5cGUuaXNNZXNoTGFtYmVydE1hdGVyaWFsPSEwO3ZhciBiNj1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtNQVRDQVA6IiJ9LHRoaXMudHlwZT0iTWVzaE1hdGNhcE1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgxNjc3NzIxNSksdGhpcy5tYXRjYXA9bnVsbCx0aGlzLm1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9c3gsdGhpcy5ub3JtYWxTY2FsZT1uZXcgTHQoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5mbGF0U2hhZGluZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZGVmaW5lcz17TUFUQ0FQOiIifSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXRjYXA9dC5tYXRjYXAsdGhpcy5tYXA9dC5tYXAsdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5mbGF0U2hhZGluZz10LmZsYXRTaGFkaW5nLHRoaXN9fTtiNi5wcm90b3R5cGUuaXNNZXNoTWF0Y2FwTWF0ZXJpYWw9ITA7dmFyIHc2PWNsYXNzIGV4dGVuZHMgR2l7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmVEYXNoZWRNYXRlcmlhbCIsdGhpcy5zY2FsZT0xLHRoaXMuZGFzaFNpemU9Myx0aGlzLmdhcFNpemU9MSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuc2NhbGU9dC5zY2FsZSx0aGlzLmRhc2hTaXplPXQuZGFzaFNpemUsdGhpcy5nYXBTaXplPXQuZ2FwU2l6ZSx0aGlzfX07dzYucHJvdG90eXBlLmlzTGluZURhc2hlZE1hdGVyaWFsPSEwO3ZhciB1MHI9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsU2hhZG93TWF0ZXJpYWw6bTYsU3ByaXRlTWF0ZXJpYWw6aU0sUmF3U2hhZGVyTWF0ZXJpYWw6cTAsU2hhZGVyTWF0ZXJpYWw6bGgsUG9pbnRzTWF0ZXJpYWw6aW0sTWVzaFBoeXNpY2FsTWF0ZXJpYWw6ZzYsTWVzaFN0YW5kYXJkTWF0ZXJpYWw6cE0sTWVzaFBob25nTWF0ZXJpYWw6XzYsTWVzaFRvb25NYXRlcmlhbDp5NixNZXNoTm9ybWFsTWF0ZXJpYWw6djYsTWVzaExhbWJlcnRNYXRlcmlhbDp4NixNZXNoRGVwdGhNYXRlcmlhbDplTSxNZXNoRGlzdGFuY2VNYXRlcmlhbDpyTSxNZXNoQmFzaWNNYXRlcmlhbDpzaCxNZXNoTWF0Y2FwTWF0ZXJpYWw6YjYsTGluZURhc2hlZE1hdGVyaWFsOnc2LExpbmVCYXNpY01hdGVyaWFsOkdpLE1hdGVyaWFsOnFpfSksam49e2FycmF5U2xpY2U6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBqbi5pc1R5cGVkQXJyYXkoZSk/bmV3IGUuY29uc3RydWN0b3IoZS5zdWJhcnJheSh0LHIhPT12b2lkIDA/cjplLmxlbmd0aCkpOmUuc2xpY2UodCxyKX0sY29udmVydEFycmF5OmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4hZXx8IXImJmUuY29uc3RydWN0b3I9PT10P2U6dHlwZW9mIHQuQllURVNfUEVSX0VMRU1FTlQ9PSJudW1iZXIiP25ldyB0KGUpOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGUpfSxpc1R5cGVkQXJyYXk6ZnVuY3Rpb24oZSl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhlKSYmIShlIGluc3RhbmNlb2YgRGF0YVZpZXcpfSxnZXRLZXlmcmFtZU9yZGVyOmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxvKXtyZXR1cm4gZVtpXS1lW29dfWxldCByPWUubGVuZ3RoLG49bmV3IEFycmF5KHIpO2ZvcihsZXQgaT0wO2khPT1yOysraSluW2ldPWk7cmV0dXJuIG4uc29ydCh0KSxufSxzb3J0ZWRBcnJheTpmdW5jdGlvbihlLHQscil7bGV0IG49ZS5sZW5ndGgsaT1uZXcgZS5jb25zdHJ1Y3RvcihuKTtmb3IobGV0IG89MCxhPTA7YSE9PW47KytvKXtsZXQgcz1yW29dKnQ7Zm9yKGxldCBsPTA7bCE9PXQ7KytsKWlbYSsrXT1lW3MrbF19cmV0dXJuIGl9LGZsYXR0ZW5KU09OOmZ1bmN0aW9uKGUsdCxyLG4pe2xldCBpPTEsbz1lWzBdO2Zvcig7byE9PXZvaWQgMCYmb1tuXT09PXZvaWQgMDspbz1lW2krK107aWYobz09PXZvaWQgMClyZXR1cm47bGV0IGE9b1tuXTtpZihhIT09dm9pZCAwKWlmKEFycmF5LmlzQXJyYXkoYSkpZG8gYT1vW25dLGEhPT12b2lkIDAmJih0LnB1c2goby50aW1lKSxyLnB1c2guYXBwbHkocixhKSksbz1lW2krK107d2hpbGUobyE9PXZvaWQgMCk7ZWxzZSBpZihhLnRvQXJyYXkhPT12b2lkIDApZG8gYT1vW25dLGEhPT12b2lkIDAmJih0LnB1c2goby50aW1lKSxhLnRvQXJyYXkocixyLmxlbmd0aCkpLG89ZVtpKytdO3doaWxlKG8hPT12b2lkIDApO2Vsc2UgZG8gYT1vW25dLGEhPT12b2lkIDAmJih0LnB1c2goby50aW1lKSxyLnB1c2goYSkpLG89ZVtpKytdO3doaWxlKG8hPT12b2lkIDApfSxzdWJjbGlwOmZ1bmN0aW9uKGUsdCxyLG4saT0zMCl7bGV0IG89ZS5jbG9uZSgpO28ubmFtZT10O2xldCBhPVtdO2ZvcihsZXQgbD0wO2w8by50cmFja3MubGVuZ3RoOysrbCl7bGV0IGM9by50cmFja3NbbF0sdT1jLmdldFZhbHVlU2l6ZSgpLGg9W10sZj1bXTtmb3IobGV0IHA9MDtwPGMudGltZXMubGVuZ3RoOysrcCl7bGV0IGQ9Yy50aW1lc1twXSppO2lmKCEoZDxyfHxkPj1uKSl7aC5wdXNoKGMudGltZXNbcF0pO2ZvcihsZXQgZz0wO2c8dTsrK2cpZi5wdXNoKGMudmFsdWVzW3AqdStnXSl9fWgubGVuZ3RoIT09MCYmKGMudGltZXM9am4uY29udmVydEFycmF5KGgsYy50aW1lcy5jb25zdHJ1Y3RvciksYy52YWx1ZXM9am4uY29udmVydEFycmF5KGYsYy52YWx1ZXMuY29uc3RydWN0b3IpLGEucHVzaChjKSl9by50cmFja3M9YTtsZXQgcz0xLzA7Zm9yKGxldCBsPTA7bDxvLnRyYWNrcy5sZW5ndGg7KytsKXM+by50cmFja3NbbF0udGltZXNbMF0mJihzPW8udHJhY2tzW2xdLnRpbWVzWzBdKTtmb3IobGV0IGw9MDtsPG8udHJhY2tzLmxlbmd0aDsrK2wpby50cmFja3NbbF0uc2hpZnQoLTEqcyk7cmV0dXJuIG8ucmVzZXREdXJhdGlvbigpLG99LG1ha2VDbGlwQWRkaXRpdmU6ZnVuY3Rpb24oZSx0PTAscj1lLG49MzApe248PTAmJihuPTMwKTtsZXQgaT1yLnRyYWNrcy5sZW5ndGgsbz10L247Zm9yKGxldCBhPTA7YTxpOysrYSl7bGV0IHM9ci50cmFja3NbYV0sbD1zLlZhbHVlVHlwZU5hbWU7aWYobD09PSJib29sInx8bD09PSJzdHJpbmciKWNvbnRpbnVlO2xldCBjPWUudHJhY2tzLmZpbmQoZnVuY3Rpb24oeSl7cmV0dXJuIHkubmFtZT09PXMubmFtZSYmeS5WYWx1ZVR5cGVOYW1lPT09bH0pO2lmKGM9PT12b2lkIDApY29udGludWU7bGV0IHU9MCxoPXMuZ2V0VmFsdWVTaXplKCk7cy5jcmVhdGVJbnRlcnBvbGFudC5pc0ludGVycG9sYW50RmFjdG9yeU1ldGhvZEdMVEZDdWJpY1NwbGluZSYmKHU9aC8zKTtsZXQgZj0wLHA9Yy5nZXRWYWx1ZVNpemUoKTtjLmNyZWF0ZUludGVycG9sYW50LmlzSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kR0xURkN1YmljU3BsaW5lJiYoZj1wLzMpO2xldCBkPXMudGltZXMubGVuZ3RoLTEsZztpZihvPD1zLnRpbWVzWzBdKXtsZXQgeT11LHg9aC11O2c9am4uYXJyYXlTbGljZShzLnZhbHVlcyx5LHgpfWVsc2UgaWYobz49cy50aW1lc1tkXSl7bGV0IHk9ZCpoK3UseD15K2gtdTtnPWpuLmFycmF5U2xpY2Uocy52YWx1ZXMseSx4KX1lbHNle2xldCB5PXMuY3JlYXRlSW50ZXJwb2xhbnQoKSx4PXUsYj1oLXU7eS5ldmFsdWF0ZShvKSxnPWpuLmFycmF5U2xpY2UoeS5yZXN1bHRCdWZmZXIseCxiKX1sPT09InF1YXRlcm5pb24iJiZuZXcgeWkoKS5mcm9tQXJyYXkoZykubm9ybWFsaXplKCkuY29uanVnYXRlKCkudG9BcnJheShnKTtsZXQgXz1jLnRpbWVzLmxlbmd0aDtmb3IobGV0IHk9MDt5PF87Kyt5KXtsZXQgeD15KnArZjtpZihsPT09InF1YXRlcm5pb24iKXlpLm11bHRpcGx5UXVhdGVybmlvbnNGbGF0KGMudmFsdWVzLHgsZywwLGMudmFsdWVzLHgpO2Vsc2V7bGV0IGI9cC1mKjI7Zm9yKGxldCBTPTA7UzxiOysrUyljLnZhbHVlc1t4K1NdLT1nW1NdfX19cmV0dXJuIGUuYmxlbmRNb2RlPWtodCxlfX0sZmg9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4saSl7dGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnM9dCx0aGlzLl9jYWNoZWRJbmRleD0wLHRoaXMucmVzdWx0QnVmZmVyPWkhPT12b2lkIDA/aTpuZXcgci5jb25zdHJ1Y3RvcihuKSx0aGlzLnNhbXBsZVZhbHVlcz1yLHRoaXMudmFsdWVTaXplPW4sdGhpcy5zZXR0aW5ncz1udWxsLHRoaXMuRGVmYXVsdFNldHRpbmdzXz17fX1ldmFsdWF0ZSh0KXtsZXQgcj10aGlzLnBhcmFtZXRlclBvc2l0aW9ucyxuPXRoaXMuX2NhY2hlZEluZGV4LGk9cltuXSxvPXJbbi0xXTt0OntlOntsZXQgYTtyOntuOmlmKCEodDxpKSl7Zm9yKGxldCBzPW4rMjs7KXtpZihpPT09dm9pZCAwKXtpZih0PG8pYnJlYWsgbjtyZXR1cm4gbj1yLmxlbmd0aCx0aGlzLl9jYWNoZWRJbmRleD1uLHRoaXMuYWZ0ZXJFbmRfKG4tMSx0LG8pfWlmKG49PT1zKWJyZWFrO2lmKG89aSxpPXJbKytuXSx0PGkpYnJlYWsgZX1hPXIubGVuZ3RoO2JyZWFrIHJ9aWYoISh0Pj1vKSl7bGV0IHM9clsxXTt0PHMmJihuPTIsbz1zKTtmb3IobGV0IGw9bi0yOzspe2lmKG89PT12b2lkIDApcmV0dXJuIHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5iZWZvcmVTdGFydF8oMCx0LGkpO2lmKG49PT1sKWJyZWFrO2lmKGk9byxvPXJbLS1uLTFdLHQ+PW8pYnJlYWsgZX1hPW4sbj0wO2JyZWFrIHJ9YnJlYWsgdH1mb3IoO248YTspe2xldCBzPW4rYT4+PjE7dDxyW3NdP2E9czpuPXMrMX1pZihpPXJbbl0sbz1yW24tMV0sbz09PXZvaWQgMClyZXR1cm4gdGhpcy5fY2FjaGVkSW5kZXg9MCx0aGlzLmJlZm9yZVN0YXJ0XygwLHQsaSk7aWYoaT09PXZvaWQgMClyZXR1cm4gbj1yLmxlbmd0aCx0aGlzLl9jYWNoZWRJbmRleD1uLHRoaXMuYWZ0ZXJFbmRfKG4tMSxvLHQpfXRoaXMuX2NhY2hlZEluZGV4PW4sdGhpcy5pbnRlcnZhbENoYW5nZWRfKG4sbyxpKX1yZXR1cm4gdGhpcy5pbnRlcnBvbGF0ZV8obixvLHQsaSl9Z2V0U2V0dGluZ3NfKCl7cmV0dXJuIHRoaXMuc2V0dGluZ3N8fHRoaXMuRGVmYXVsdFNldHRpbmdzX31jb3B5U2FtcGxlVmFsdWVfKHQpe2xldCByPXRoaXMucmVzdWx0QnVmZmVyLG49dGhpcy5zYW1wbGVWYWx1ZXMsaT10aGlzLnZhbHVlU2l6ZSxvPXQqaTtmb3IobGV0IGE9MDthIT09aTsrK2EpclthXT1uW28rYV07cmV0dXJuIHJ9aW50ZXJwb2xhdGVfKCl7dGhyb3cgbmV3IEVycm9yKCJjYWxsIHRvIGFic3RyYWN0IG1ldGhvZCIpfWludGVydmFsQ2hhbmdlZF8oKXt9fTtmaC5wcm90b3R5cGUuYmVmb3JlU3RhcnRfPWZoLnByb3RvdHlwZS5jb3B5U2FtcGxlVmFsdWVfO2ZoLnByb3RvdHlwZS5hZnRlckVuZF89ZmgucHJvdG90eXBlLmNvcHlTYW1wbGVWYWx1ZV87dmFyIFNVPWNsYXNzIGV4dGVuZHMgZmh7Y29uc3RydWN0b3IodCxyLG4saSl7c3VwZXIodCxyLG4saSksdGhpcy5fd2VpZ2h0UHJldj0tMCx0aGlzLl9vZmZzZXRQcmV2PS0wLHRoaXMuX3dlaWdodE5leHQ9LTAsdGhpcy5fb2Zmc2V0TmV4dD0tMCx0aGlzLkRlZmF1bHRTZXR0aW5nc189e2VuZGluZ1N0YXJ0OlQxLGVuZGluZ0VuZDpUMX19aW50ZXJ2YWxDaGFuZ2VkXyh0LHIsbil7bGV0IGk9dGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnMsbz10LTIsYT10KzEscz1pW29dLGw9aVthXTtpZihzPT09dm9pZCAwKXN3aXRjaCh0aGlzLmdldFNldHRpbmdzXygpLmVuZGluZ1N0YXJ0KXtjYXNlIEMxOm89dCxzPTIqci1uO2JyZWFrO2Nhc2UgSlA6bz1pLmxlbmd0aC0yLHM9citpW29dLWlbbysxXTticmVhaztkZWZhdWx0Om89dCxzPW59aWYobD09PXZvaWQgMClzd2l0Y2godGhpcy5nZXRTZXR0aW5nc18oKS5lbmRpbmdFbmQpe2Nhc2UgQzE6YT10LGw9MipuLXI7YnJlYWs7Y2FzZSBKUDphPTEsbD1uK2lbMV0taVswXTticmVhaztkZWZhdWx0OmE9dC0xLGw9cn1sZXQgYz0obi1yKSouNSx1PXRoaXMudmFsdWVTaXplO3RoaXMuX3dlaWdodFByZXY9Yy8oci1zKSx0aGlzLl93ZWlnaHROZXh0PWMvKGwtbiksdGhpcy5fb2Zmc2V0UHJldj1vKnUsdGhpcy5fb2Zmc2V0TmV4dD1hKnV9aW50ZXJwb2xhdGVfKHQscixuLGkpe2xldCBvPXRoaXMucmVzdWx0QnVmZmVyLGE9dGhpcy5zYW1wbGVWYWx1ZXMscz10aGlzLnZhbHVlU2l6ZSxsPXQqcyxjPWwtcyx1PXRoaXMuX29mZnNldFByZXYsaD10aGlzLl9vZmZzZXROZXh0LGY9dGhpcy5fd2VpZ2h0UHJldixwPXRoaXMuX3dlaWdodE5leHQsZD0obi1yKS8oaS1yKSxnPWQqZCxfPWcqZCx5PS1mKl8rMipmKmctZipkLHg9KDErZikqXysoLTEuNS0yKmYpKmcrKC0uNStmKSpkKzEsYj0oLTEtcCkqXysoMS41K3ApKmcrLjUqZCxTPXAqXy1wKmc7Zm9yKGxldCBDPTA7QyE9PXM7KytDKW9bQ109eSphW3UrQ10reCphW2MrQ10rYiphW2wrQ10rUyphW2grQ107cmV0dXJuIG99fSxTNj1jbGFzcyBleHRlbmRzIGZoe2NvbnN0cnVjdG9yKHQscixuLGkpe3N1cGVyKHQscixuLGkpfWludGVycG9sYXRlXyh0LHIsbixpKXtsZXQgbz10aGlzLnJlc3VsdEJ1ZmZlcixhPXRoaXMuc2FtcGxlVmFsdWVzLHM9dGhpcy52YWx1ZVNpemUsbD10KnMsYz1sLXMsdT0obi1yKS8oaS1yKSxoPTEtdTtmb3IobGV0IGY9MDtmIT09czsrK2Ypb1tmXT1hW2MrZl0qaCthW2wrZl0qdTtyZXR1cm4gb319LE1VPWNsYXNzIGV4dGVuZHMgZmh7Y29uc3RydWN0b3IodCxyLG4saSl7c3VwZXIodCxyLG4saSl9aW50ZXJwb2xhdGVfKHQpe3JldHVybiB0aGlzLmNvcHlTYW1wbGVWYWx1ZV8odC0xKX19LE9sPWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGkpe2lmKHQ9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiB0cmFjayBuYW1lIGlzIHVuZGVmaW5lZCIpO2lmKHI9PT12b2lkIDB8fHIubGVuZ3RoPT09MCl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IG5vIGtleWZyYW1lcyBpbiB0cmFjayBuYW1lZCAiK3QpO3RoaXMubmFtZT10LHRoaXMudGltZXM9am4uY29udmVydEFycmF5KHIsdGhpcy5UaW1lQnVmZmVyVHlwZSksdGhpcy52YWx1ZXM9am4uY29udmVydEFycmF5KG4sdGhpcy5WYWx1ZUJ1ZmZlclR5cGUpLHRoaXMuc2V0SW50ZXJwb2xhdGlvbihpfHx0aGlzLkRlZmF1bHRJbnRlcnBvbGF0aW9uKX1zdGF0aWMgdG9KU09OKHQpe2xldCByPXQuY29uc3RydWN0b3IsbjtpZihyLnRvSlNPTiE9PXRoaXMudG9KU09OKW49ci50b0pTT04odCk7ZWxzZXtuPXtuYW1lOnQubmFtZSx0aW1lczpqbi5jb252ZXJ0QXJyYXkodC50aW1lcyxBcnJheSksdmFsdWVzOmpuLmNvbnZlcnRBcnJheSh0LnZhbHVlcyxBcnJheSl9O2xldCBpPXQuZ2V0SW50ZXJwb2xhdGlvbigpO2khPT10LkRlZmF1bHRJbnRlcnBvbGF0aW9uJiYobi5pbnRlcnBvbGF0aW9uPWkpfXJldHVybiBuLnR5cGU9dC5WYWx1ZVR5cGVOYW1lLG59SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGUodCl7cmV0dXJuIG5ldyBNVSh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyKHQpe3JldHVybiBuZXcgUzYodGhpcy50aW1lcyx0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLHQpfUludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aCh0KXtyZXR1cm4gbmV3IFNVKHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSx0KX1zZXRJbnRlcnBvbGF0aW9uKHQpe2xldCByO3N3aXRjaCh0KXtjYXNlIEtQOnI9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZTticmVhaztjYXNlIFpQOnI9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI7YnJlYWs7Y2FzZSByVTpyPXRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoO2JyZWFrfWlmKHI9PT12b2lkIDApe2xldCBuPSJ1bnN1cHBvcnRlZCBpbnRlcnBvbGF0aW9uIGZvciAiK3RoaXMuVmFsdWVUeXBlTmFtZSsiIGtleWZyYW1lIHRyYWNrIG5hbWVkICIrdGhpcy5uYW1lO2lmKHRoaXMuY3JlYXRlSW50ZXJwb2xhbnQ9PT12b2lkIDApaWYodCE9PXRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pdGhpcy5zZXRJbnRlcnBvbGF0aW9uKHRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pO2Vsc2UgdGhyb3cgbmV3IEVycm9yKG4pO3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLktleWZyYW1lVHJhY2s6IixuKSx0aGlzfXJldHVybiB0aGlzLmNyZWF0ZUludGVycG9sYW50PXIsdGhpc31nZXRJbnRlcnBvbGF0aW9uKCl7c3dpdGNoKHRoaXMuY3JlYXRlSW50ZXJwb2xhbnQpe2Nhc2UgdGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZTpyZXR1cm4gS1A7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcjpyZXR1cm4gWlA7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDpyZXR1cm4gclV9fWdldFZhbHVlU2l6ZSgpe3JldHVybiB0aGlzLnZhbHVlcy5sZW5ndGgvdGhpcy50aW1lcy5sZW5ndGh9c2hpZnQodCl7aWYodCE9PTApe2xldCByPXRoaXMudGltZXM7Zm9yKGxldCBuPTAsaT1yLmxlbmd0aDtuIT09aTsrK24pcltuXSs9dH1yZXR1cm4gdGhpc31zY2FsZSh0KXtpZih0IT09MSl7bGV0IHI9dGhpcy50aW1lcztmb3IobGV0IG49MCxpPXIubGVuZ3RoO24hPT1pOysrbilyW25dKj10fXJldHVybiB0aGlzfXRyaW0odCxyKXtsZXQgbj10aGlzLnRpbWVzLGk9bi5sZW5ndGgsbz0wLGE9aS0xO2Zvcig7byE9PWkmJm5bb108dDspKytvO2Zvcig7YSE9PS0xJiZuW2FdPnI7KS0tYTtpZigrK2EsbyE9PTB8fGEhPT1pKXtvPj1hJiYoYT1NYXRoLm1heChhLDEpLG89YS0xKTtsZXQgcz10aGlzLmdldFZhbHVlU2l6ZSgpO3RoaXMudGltZXM9am4uYXJyYXlTbGljZShuLG8sYSksdGhpcy52YWx1ZXM9am4uYXJyYXlTbGljZSh0aGlzLnZhbHVlcyxvKnMsYSpzKX1yZXR1cm4gdGhpc312YWxpZGF0ZSgpe2xldCB0PSEwLHI9dGhpcy5nZXRWYWx1ZVNpemUoKTtyLU1hdGguZmxvb3IocikhPT0wJiYoY29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogSW52YWxpZCB2YWx1ZSBzaXplIGluIHRyYWNrLiIsdGhpcyksdD0hMSk7bGV0IG49dGhpcy50aW1lcyxpPXRoaXMudmFsdWVzLG89bi5sZW5ndGg7bz09PTAmJihjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBUcmFjayBpcyBlbXB0eS4iLHRoaXMpLHQ9ITEpO2xldCBhPW51bGw7Zm9yKGxldCBzPTA7cyE9PW87cysrKXtsZXQgbD1uW3NdO2lmKHR5cGVvZiBsPT0ibnVtYmVyIiYmaXNOYU4obCkpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFRpbWUgaXMgbm90IGEgdmFsaWQgbnVtYmVyLiIsdGhpcyxzLGwpLHQ9ITE7YnJlYWt9aWYoYSE9PW51bGwmJmE+bCl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogT3V0IG9mIG9yZGVyIGtleXMuIix0aGlzLHMsbCxhKSx0PSExO2JyZWFrfWE9bH1pZihpIT09dm9pZCAwJiZqbi5pc1R5cGVkQXJyYXkoaSkpZm9yKGxldCBzPTAsbD1pLmxlbmd0aDtzIT09bDsrK3Mpe2xldCBjPWlbc107aWYoaXNOYU4oYykpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFZhbHVlIGlzIG5vdCBhIHZhbGlkIG51bWJlci4iLHRoaXMscyxjKSx0PSExO2JyZWFrfX1yZXR1cm4gdH1vcHRpbWl6ZSgpe2xldCB0PWpuLmFycmF5U2xpY2UodGhpcy50aW1lcykscj1qbi5hcnJheVNsaWNlKHRoaXMudmFsdWVzKSxuPXRoaXMuZ2V0VmFsdWVTaXplKCksaT10aGlzLmdldEludGVycG9sYXRpb24oKT09PXJVLG89dC5sZW5ndGgtMSxhPTE7Zm9yKGxldCBzPTE7czxvOysrcyl7bGV0IGw9ITEsYz10W3NdLHU9dFtzKzFdO2lmKGMhPT11JiYocyE9PTF8fGMhPT10WzBdKSlpZihpKWw9ITA7ZWxzZXtsZXQgaD1zKm4sZj1oLW4scD1oK247Zm9yKGxldCBkPTA7ZCE9PW47KytkKXtsZXQgZz1yW2grZF07aWYoZyE9PXJbZitkXXx8ZyE9PXJbcCtkXSl7bD0hMDticmVha319fWlmKGwpe2lmKHMhPT1hKXt0W2FdPXRbc107bGV0IGg9cypuLGY9YSpuO2ZvcihsZXQgcD0wO3AhPT1uOysrcClyW2YrcF09cltoK3BdfSsrYX19aWYobz4wKXt0W2FdPXRbb107Zm9yKGxldCBzPW8qbixsPWEqbixjPTA7YyE9PW47KytjKXJbbCtjXT1yW3MrY107KythfXJldHVybiBhIT09dC5sZW5ndGg/KHRoaXMudGltZXM9am4uYXJyYXlTbGljZSh0LDAsYSksdGhpcy52YWx1ZXM9am4uYXJyYXlTbGljZShyLDAsYSpuKSk6KHRoaXMudGltZXM9dCx0aGlzLnZhbHVlcz1yKSx0aGlzfWNsb25lKCl7bGV0IHQ9am4uYXJyYXlTbGljZSh0aGlzLnRpbWVzLDApLHI9am4uYXJyYXlTbGljZSh0aGlzLnZhbHVlcywwKSxuPXRoaXMuY29uc3RydWN0b3IsaT1uZXcgbih0aGlzLm5hbWUsdCxyKTtyZXR1cm4gaS5jcmVhdGVJbnRlcnBvbGFudD10aGlzLmNyZWF0ZUludGVycG9sYW50LGl9fTtPbC5wcm90b3R5cGUuVGltZUJ1ZmZlclR5cGU9RmxvYXQzMkFycmF5O09sLnByb3RvdHlwZS5WYWx1ZUJ1ZmZlclR5cGU9RmxvYXQzMkFycmF5O09sLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj1aUDt2YXIgc209Y2xhc3MgZXh0ZW5kcyBPbHt9O3NtLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJib29sIjtzbS5wcm90b3R5cGUuVmFsdWVCdWZmZXJUeXBlPUFycmF5O3NtLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj1LUDtzbS5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyPXZvaWQgMDtzbS5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoPXZvaWQgMDt2YXIgTTY9Y2xhc3MgZXh0ZW5kcyBPbHt9O002LnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJjb2xvciI7dmFyIEoxPWNsYXNzIGV4dGVuZHMgT2x7fTtKMS5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0ibnVtYmVyIjt2YXIgRVU9Y2xhc3MgZXh0ZW5kcyBmaHtjb25zdHJ1Y3Rvcih0LHIsbixpKXtzdXBlcih0LHIsbixpKX1pbnRlcnBvbGF0ZV8odCxyLG4saSl7bGV0IG89dGhpcy5yZXN1bHRCdWZmZXIsYT10aGlzLnNhbXBsZVZhbHVlcyxzPXRoaXMudmFsdWVTaXplLGw9KG4tcikvKGktciksYz10KnM7Zm9yKGxldCB1PWMrcztjIT09dTtjKz00KXlpLnNsZXJwRmxhdChvLDAsYSxjLXMsYSxjLGwpO3JldHVybiBvfX0sJDA9Y2xhc3MgZXh0ZW5kcyBPbHtJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXIodCl7cmV0dXJuIG5ldyBFVSh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9fTskMC5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0icXVhdGVybmlvbiI7JDAucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uPVpQOyQwLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg9dm9pZCAwO3ZhciBsbT1jbGFzcyBleHRlbmRzIE9se307bG0ucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9InN0cmluZyI7bG0ucHJvdG90eXBlLlZhbHVlQnVmZmVyVHlwZT1BcnJheTtsbS5wcm90b3R5cGUuRGVmYXVsdEludGVycG9sYXRpb249S1A7bG0ucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcj12b2lkIDA7bG0ucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aD12b2lkIDA7dmFyIFExPWNsYXNzIGV4dGVuZHMgT2x7fTtRMS5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0idmVjdG9yIjt2YXIgdHg9Y2xhc3N7Y29uc3RydWN0b3IodCxyPS0xLG4saT0kVSl7dGhpcy5uYW1lPXQsdGhpcy50cmFja3M9bix0aGlzLmR1cmF0aW9uPXIsdGhpcy5ibGVuZE1vZGU9aSx0aGlzLnV1aWQ9RGwoKSx0aGlzLmR1cmF0aW9uPDAmJnRoaXMucmVzZXREdXJhdGlvbigpfXN0YXRpYyBwYXJzZSh0KXtsZXQgcj1bXSxuPXQudHJhY2tzLGk9MS8odC5mcHN8fDEpO2ZvcihsZXQgYT0wLHM9bi5sZW5ndGg7YSE9PXM7KythKXIucHVzaChmMHIoblthXSkuc2NhbGUoaSkpO2xldCBvPW5ldyB0aGlzKHQubmFtZSx0LmR1cmF0aW9uLHIsdC5ibGVuZE1vZGUpO3JldHVybiBvLnV1aWQ9dC51dWlkLG99c3RhdGljIHRvSlNPTih0KXtsZXQgcj1bXSxuPXQudHJhY2tzLGk9e25hbWU6dC5uYW1lLGR1cmF0aW9uOnQuZHVyYXRpb24sdHJhY2tzOnIsdXVpZDp0LnV1aWQsYmxlbmRNb2RlOnQuYmxlbmRNb2RlfTtmb3IobGV0IG89MCxhPW4ubGVuZ3RoO28hPT1hOysrbylyLnB1c2goT2wudG9KU09OKG5bb10pKTtyZXR1cm4gaX1zdGF0aWMgQ3JlYXRlRnJvbU1vcnBoVGFyZ2V0U2VxdWVuY2UodCxyLG4saSl7bGV0IG89ci5sZW5ndGgsYT1bXTtmb3IobGV0IHM9MDtzPG87cysrKXtsZXQgbD1bXSxjPVtdO2wucHVzaCgocytvLTEpJW8scywocysxKSVvKSxjLnB1c2goMCwxLDApO2xldCB1PWpuLmdldEtleWZyYW1lT3JkZXIobCk7bD1qbi5zb3J0ZWRBcnJheShsLDEsdSksYz1qbi5zb3J0ZWRBcnJheShjLDEsdSksIWkmJmxbMF09PT0wJiYobC5wdXNoKG8pLGMucHVzaChjWzBdKSksYS5wdXNoKG5ldyBKMSgiLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1siK3Jbc10ubmFtZSsiXSIsbCxjKS5zY2FsZSgxL24pKX1yZXR1cm4gbmV3IHRoaXModCwtMSxhKX1zdGF0aWMgZmluZEJ5TmFtZSh0LHIpe2xldCBuPXQ7aWYoIUFycmF5LmlzQXJyYXkodCkpe2xldCBpPXQ7bj1pLmdlb21ldHJ5JiZpLmdlb21ldHJ5LmFuaW1hdGlvbnN8fGkuYW5pbWF0aW9uc31mb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKylpZihuW2ldLm5hbWU9PT1yKXJldHVybiBuW2ldO3JldHVybiBudWxsfXN0YXRpYyBDcmVhdGVDbGlwc0Zyb21Nb3JwaFRhcmdldFNlcXVlbmNlcyh0LHIsbil7bGV0IGk9e30sbz0vXihbXHctXSo/KShbXGRdKykkLztmb3IobGV0IHM9MCxsPXQubGVuZ3RoO3M8bDtzKyspe2xldCBjPXRbc10sdT1jLm5hbWUubWF0Y2gobyk7aWYodSYmdS5sZW5ndGg+MSl7bGV0IGg9dVsxXSxmPWlbaF07Znx8KGlbaF09Zj1bXSksZi5wdXNoKGMpfX1sZXQgYT1bXTtmb3IobGV0IHMgaW4gaSlhLnB1c2godGhpcy5DcmVhdGVGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZShzLGlbc10scixuKSk7cmV0dXJuIGF9c3RhdGljIHBhcnNlQW5pbWF0aW9uKHQscil7aWYoIXQpcmV0dXJuIGNvbnNvbGUuZXJyb3IoIlRIUkVFLkFuaW1hdGlvbkNsaXA6IE5vIGFuaW1hdGlvbiBpbiBKU09OTG9hZGVyIGRhdGEuIiksbnVsbDtsZXQgbj1mdW5jdGlvbihoLGYscCxkLGcpe2lmKHAubGVuZ3RoIT09MCl7bGV0IF89W10seT1bXTtqbi5mbGF0dGVuSlNPTihwLF8seSxkKSxfLmxlbmd0aCE9PTAmJmcucHVzaChuZXcgaChmLF8seSkpfX0saT1bXSxvPXQubmFtZXx8ImRlZmF1bHQiLGE9dC5mcHN8fDMwLHM9dC5ibGVuZE1vZGUsbD10Lmxlbmd0aHx8LTEsYz10LmhpZXJhcmNoeXx8W107Zm9yKGxldCBoPTA7aDxjLmxlbmd0aDtoKyspe2xldCBmPWNbaF0ua2V5cztpZighKCFmfHxmLmxlbmd0aD09PTApKWlmKGZbMF0ubW9ycGhUYXJnZXRzKXtsZXQgcD17fSxkO2ZvcihkPTA7ZDxmLmxlbmd0aDtkKyspaWYoZltkXS5tb3JwaFRhcmdldHMpZm9yKGxldCBnPTA7ZzxmW2RdLm1vcnBoVGFyZ2V0cy5sZW5ndGg7ZysrKXBbZltkXS5tb3JwaFRhcmdldHNbZ11dPS0xO2ZvcihsZXQgZyBpbiBwKXtsZXQgXz1bXSx5PVtdO2ZvcihsZXQgeD0wO3ghPT1mW2RdLm1vcnBoVGFyZ2V0cy5sZW5ndGg7Kyt4KXtsZXQgYj1mW2RdO18ucHVzaChiLnRpbWUpLHkucHVzaChiLm1vcnBoVGFyZ2V0PT09Zz8xOjApfWkucHVzaChuZXcgSjEoIi5tb3JwaFRhcmdldEluZmx1ZW5jZVsiK2crIl0iLF8seSkpfWw9cC5sZW5ndGgqKGF8fDEpfWVsc2V7bGV0IHA9Ii5ib25lc1siK3JbaF0ubmFtZSsiXSI7bihRMSxwKyIucG9zaXRpb24iLGYsInBvcyIsaSksbigkMCxwKyIucXVhdGVybmlvbiIsZiwicm90IixpKSxuKFExLHArIi5zY2FsZSIsZiwic2NsIixpKX19cmV0dXJuIGkubGVuZ3RoPT09MD9udWxsOm5ldyB0aGlzKG8sbCxpLHMpfXJlc2V0RHVyYXRpb24oKXtsZXQgdD10aGlzLnRyYWNrcyxyPTA7Zm9yKGxldCBuPTAsaT10Lmxlbmd0aDtuIT09aTsrK24pe2xldCBvPXRoaXMudHJhY2tzW25dO3I9TWF0aC5tYXgocixvLnRpbWVzW28udGltZXMubGVuZ3RoLTFdKX1yZXR1cm4gdGhpcy5kdXJhdGlvbj1yLHRoaXN9dHJpbSgpe2ZvcihsZXQgdD0wO3Q8dGhpcy50cmFja3MubGVuZ3RoO3QrKyl0aGlzLnRyYWNrc1t0XS50cmltKDAsdGhpcy5kdXJhdGlvbik7cmV0dXJuIHRoaXN9dmFsaWRhdGUoKXtsZXQgdD0hMDtmb3IobGV0IHI9MDtyPHRoaXMudHJhY2tzLmxlbmd0aDtyKyspdD10JiZ0aGlzLnRyYWNrc1tyXS52YWxpZGF0ZSgpO3JldHVybiB0fW9wdGltaXplKCl7Zm9yKGxldCB0PTA7dDx0aGlzLnRyYWNrcy5sZW5ndGg7dCsrKXRoaXMudHJhY2tzW3RdLm9wdGltaXplKCk7cmV0dXJuIHRoaXN9Y2xvbmUoKXtsZXQgdD1bXTtmb3IobGV0IHI9MDtyPHRoaXMudHJhY2tzLmxlbmd0aDtyKyspdC5wdXNoKHRoaXMudHJhY2tzW3JdLmNsb25lKCkpO3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLm5hbWUsdGhpcy5kdXJhdGlvbix0LHRoaXMuYmxlbmRNb2RlKX10b0pTT04oKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b0pTT04odGhpcyl9fTtmdW5jdGlvbiBoMHIoZSl7c3dpdGNoKGUudG9Mb3dlckNhc2UoKSl7Y2FzZSJzY2FsYXIiOmNhc2UiZG91YmxlIjpjYXNlImZsb2F0IjpjYXNlIm51bWJlciI6Y2FzZSJpbnRlZ2VyIjpyZXR1cm4gSjE7Y2FzZSJ2ZWN0b3IiOmNhc2UidmVjdG9yMiI6Y2FzZSJ2ZWN0b3IzIjpjYXNlInZlY3RvcjQiOnJldHVybiBRMTtjYXNlImNvbG9yIjpyZXR1cm4gTTY7Y2FzZSJxdWF0ZXJuaW9uIjpyZXR1cm4gJDA7Y2FzZSJib29sIjpjYXNlImJvb2xlYW4iOnJldHVybiBzbTtjYXNlInN0cmluZyI6cmV0dXJuIGxtfXRocm93IG5ldyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogVW5zdXBwb3J0ZWQgdHlwZU5hbWU6ICIrZSl9ZnVuY3Rpb24gZjByKGUpe2lmKGUudHlwZT09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IHRyYWNrIHR5cGUgdW5kZWZpbmVkLCBjYW4gbm90IHBhcnNlIik7bGV0IHQ9aDByKGUudHlwZSk7aWYoZS50aW1lcz09PXZvaWQgMCl7bGV0IHI9W10sbj1bXTtqbi5mbGF0dGVuSlNPTihlLmtleXMscixuLCJ2YWx1ZSIpLGUudGltZXM9cixlLnZhbHVlcz1ufXJldHVybiB0LnBhcnNlIT09dm9pZCAwP3QucGFyc2UoZSk6bmV3IHQoZS5uYW1lLGUudGltZXMsZS52YWx1ZXMsZS5pbnRlcnBvbGF0aW9uKX12YXIgZXg9e2VuYWJsZWQ6ITEsZmlsZXM6e30sYWRkOmZ1bmN0aW9uKGUsdCl7dGhpcy5lbmFibGVkIT09ITEmJih0aGlzLmZpbGVzW2VdPXQpfSxnZXQ6ZnVuY3Rpb24oZSl7aWYodGhpcy5lbmFibGVkIT09ITEpcmV0dXJuIHRoaXMuZmlsZXNbZV19LHJlbW92ZTpmdW5jdGlvbihlKXtkZWxldGUgdGhpcy5maWxlc1tlXX0sY2xlYXI6ZnVuY3Rpb24oKXt0aGlzLmZpbGVzPXt9fX0sRTY9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe2xldCBpPXRoaXMsbz0hMSxhPTAscz0wLGwsYz1bXTt0aGlzLm9uU3RhcnQ9dm9pZCAwLHRoaXMub25Mb2FkPXQsdGhpcy5vblByb2dyZXNzPXIsdGhpcy5vbkVycm9yPW4sdGhpcy5pdGVtU3RhcnQ9ZnVuY3Rpb24odSl7cysrLG89PT0hMSYmaS5vblN0YXJ0IT09dm9pZCAwJiZpLm9uU3RhcnQodSxhLHMpLG89ITB9LHRoaXMuaXRlbUVuZD1mdW5jdGlvbih1KXthKyssaS5vblByb2dyZXNzIT09dm9pZCAwJiZpLm9uUHJvZ3Jlc3ModSxhLHMpLGE9PT1zJiYobz0hMSxpLm9uTG9hZCE9PXZvaWQgMCYmaS5vbkxvYWQoKSl9LHRoaXMuaXRlbUVycm9yPWZ1bmN0aW9uKHUpe2kub25FcnJvciE9PXZvaWQgMCYmaS5vbkVycm9yKHUpfSx0aGlzLnJlc29sdmVVUkw9ZnVuY3Rpb24odSl7cmV0dXJuIGw/bCh1KTp1fSx0aGlzLnNldFVSTE1vZGlmaWVyPWZ1bmN0aW9uKHUpe3JldHVybiBsPXUsdGhpc30sdGhpcy5hZGRIYW5kbGVyPWZ1bmN0aW9uKHUsaCl7cmV0dXJuIGMucHVzaCh1LGgpLHRoaXN9LHRoaXMucmVtb3ZlSGFuZGxlcj1mdW5jdGlvbih1KXtsZXQgaD1jLmluZGV4T2YodSk7cmV0dXJuIGghPT0tMSYmYy5zcGxpY2UoaCwyKSx0aGlzfSx0aGlzLmdldEhhbmRsZXI9ZnVuY3Rpb24odSl7Zm9yKGxldCBoPTAsZj1jLmxlbmd0aDtoPGY7aCs9Mil7bGV0IHA9Y1toXSxkPWNbaCsxXTtpZihwLmdsb2JhbCYmKHAubGFzdEluZGV4PTApLHAudGVzdCh1KSlyZXR1cm4gZH1yZXR1cm4gbnVsbH19fSxpcGU9bmV3IEU2LGVhPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMubWFuYWdlcj10IT09dm9pZCAwP3Q6aXBlLHRoaXMuY3Jvc3NPcmlnaW49ImFub255bW91cyIsdGhpcy53aXRoQ3JlZGVudGlhbHM9ITEsdGhpcy5wYXRoPSIiLHRoaXMucmVzb3VyY2VQYXRoPSIiLHRoaXMucmVxdWVzdEhlYWRlcj17fX1sb2FkKCl7fWxvYWRBc3luYyh0LHIpe2xldCBuPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGksbyl7bi5sb2FkKHQsaSxyLG8pfSl9cGFyc2UoKXt9c2V0Q3Jvc3NPcmlnaW4odCl7cmV0dXJuIHRoaXMuY3Jvc3NPcmlnaW49dCx0aGlzfXNldFdpdGhDcmVkZW50aWFscyh0KXtyZXR1cm4gdGhpcy53aXRoQ3JlZGVudGlhbHM9dCx0aGlzfXNldFBhdGgodCl7cmV0dXJuIHRoaXMucGF0aD10LHRoaXN9c2V0UmVzb3VyY2VQYXRoKHQpe3JldHVybiB0aGlzLnJlc291cmNlUGF0aD10LHRoaXN9c2V0UmVxdWVzdEhlYWRlcih0KXtyZXR1cm4gdGhpcy5yZXF1ZXN0SGVhZGVyPXQsdGhpc319LGpkPXt9LEpjPWNsYXNzIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LHIsbixpKXt0PT09dm9pZCAwJiYodD0iIiksdGhpcy5wYXRoIT09dm9pZCAwJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtsZXQgbz1leC5nZXQodCk7aWYobyE9PXZvaWQgMClyZXR1cm4gdGhpcy5tYW5hZ2VyLml0ZW1TdGFydCh0KSxzZXRUaW1lb3V0KCgpPT57ciYmcihvKSx0aGlzLm1hbmFnZXIuaXRlbUVuZCh0KX0sMCksbztpZihqZFt0XSE9PXZvaWQgMCl7amRbdF0ucHVzaCh7b25Mb2FkOnIsb25Qcm9ncmVzczpuLG9uRXJyb3I6aX0pO3JldHVybn1qZFt0XT1bXSxqZFt0XS5wdXNoKHtvbkxvYWQ6cixvblByb2dyZXNzOm4sb25FcnJvcjppfSk7bGV0IGE9bmV3IFJlcXVlc3QodCx7aGVhZGVyczpuZXcgSGVhZGVycyh0aGlzLnJlcXVlc3RIZWFkZXIpLGNyZWRlbnRpYWxzOnRoaXMud2l0aENyZWRlbnRpYWxzPyJpbmNsdWRlIjoic2FtZS1vcmlnaW4ifSkscz10aGlzLm1pbWVUeXBlLGw9dGhpcy5yZXNwb25zZVR5cGU7ZmV0Y2goYSkudGhlbihjPT57aWYoYy5zdGF0dXM9PT0yMDB8fGMuc3RhdHVzPT09MCl7aWYoYy5zdGF0dXM9PT0wJiZjb25zb2xlLndhcm4oIlRIUkVFLkZpbGVMb2FkZXI6IEhUVFAgU3RhdHVzIDAgcmVjZWl2ZWQuIiksdHlwZW9mIFJlYWRhYmxlU3RyZWFtPT0idW5kZWZpbmVkInx8Yy5ib2R5LmdldFJlYWRlcj09PXZvaWQgMClyZXR1cm4gYztsZXQgdT1qZFt0XSxoPWMuYm9keS5nZXRSZWFkZXIoKSxmPWMuaGVhZGVycy5nZXQoIkNvbnRlbnQtTGVuZ3RoIikscD1mP3BhcnNlSW50KGYpOjAsZD1wIT09MCxnPTAsXz1uZXcgUmVhZGFibGVTdHJlYW0oe3N0YXJ0KHkpe3goKTtmdW5jdGlvbiB4KCl7aC5yZWFkKCkudGhlbigoe2RvbmU6Yix2YWx1ZTpTfSk9PntpZihiKXkuY2xvc2UoKTtlbHNle2crPVMuYnl0ZUxlbmd0aDtsZXQgQz1uZXcgUHJvZ3Jlc3NFdmVudCgicHJvZ3Jlc3MiLHtsZW5ndGhDb21wdXRhYmxlOmQsbG9hZGVkOmcsdG90YWw6cH0pO2ZvcihsZXQgUD0wLGs9dS5sZW5ndGg7UDxrO1ArKyl7bGV0IE89dVtQXTtPLm9uUHJvZ3Jlc3MmJk8ub25Qcm9ncmVzcyhDKX15LmVucXVldWUoUykseCgpfX0pfX19KTtyZXR1cm4gbmV3IFJlc3BvbnNlKF8pfWVsc2UgdGhyb3cgRXJyb3IoYGZldGNoIGZvciAiJHtjLnVybH0iIHJlc3BvbmRlZCB3aXRoICR7Yy5zdGF0dXN9OiAke2Muc3RhdHVzVGV4dH1gKX0pLnRoZW4oYz0+e3N3aXRjaChsKXtjYXNlImFycmF5YnVmZmVyIjpyZXR1cm4gYy5hcnJheUJ1ZmZlcigpO2Nhc2UiYmxvYiI6cmV0dXJuIGMuYmxvYigpO2Nhc2UiZG9jdW1lbnQiOnJldHVybiBjLnRleHQoKS50aGVuKHU9Pm5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcodSxzKSk7Y2FzZSJqc29uIjpyZXR1cm4gYy5qc29uKCk7ZGVmYXVsdDppZihzPT09dm9pZCAwKXJldHVybiBjLnRleHQoKTt7bGV0IGg9L2NoYXJzZXQ9Ij8oW147IlxzXSopIj8vaS5leGVjKHMpLGY9aCYmaFsxXT9oWzFdLnRvTG93ZXJDYXNlKCk6dm9pZCAwLHA9bmV3IFRleHREZWNvZGVyKGYpO3JldHVybiBjLmFycmF5QnVmZmVyKCkudGhlbihkPT5wLmRlY29kZShkKSl9fX0pLnRoZW4oYz0+e2V4LmFkZCh0LGMpO2xldCB1PWpkW3RdO2RlbGV0ZSBqZFt0XTtmb3IobGV0IGg9MCxmPXUubGVuZ3RoO2g8ZjtoKyspe2xldCBwPXVbaF07cC5vbkxvYWQmJnAub25Mb2FkKGMpfX0pLmNhdGNoKGM9PntsZXQgdT1qZFt0XTtpZih1PT09dm9pZCAwKXRocm93IHRoaXMubWFuYWdlci5pdGVtRXJyb3IodCksYztkZWxldGUgamRbdF07Zm9yKGxldCBoPTAsZj11Lmxlbmd0aDtoPGY7aCsrKXtsZXQgcD11W2hdO3Aub25FcnJvciYmcC5vbkVycm9yKGMpfXRoaXMubWFuYWdlci5pdGVtRXJyb3IodCl9KS5maW5hbGx5KCgpPT57dGhpcy5tYW5hZ2VyLml0ZW1FbmQodCl9KSx0aGlzLm1hbmFnZXIuaXRlbVN0YXJ0KHQpfXNldFJlc3BvbnNlVHlwZSh0KXtyZXR1cm4gdGhpcy5yZXNwb25zZVR5cGU9dCx0aGlzfXNldE1pbWVUeXBlKHQpe3JldHVybiB0aGlzLm1pbWVUeXBlPXQsdGhpc319LG9odD1jbGFzcyBleHRlbmRzIGVhe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxyLG4saSl7bGV0IG89dGhpcyxhPW5ldyBKYyh0aGlzLm1hbmFnZXIpO2Euc2V0UGF0aCh0aGlzLnBhdGgpLGEuc2V0UmVxdWVzdEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXIpLGEuc2V0V2l0aENyZWRlbnRpYWxzKHRoaXMud2l0aENyZWRlbnRpYWxzKSxhLmxvYWQodCxmdW5jdGlvbihzKXt0cnl7cihvLnBhcnNlKEpTT04ucGFyc2UocykpKX1jYXRjaChsKXtpP2kobCk6Y29uc29sZS5lcnJvcihsKSxvLm1hbmFnZXIuaXRlbUVycm9yKHQpfX0sbixpKX1wYXJzZSh0KXtsZXQgcj1bXTtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKyl7bGV0IGk9dHgucGFyc2UodFtuXSk7ci5wdXNoKGkpfXJldHVybiByfX0sYWh0PWNsYXNzIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LHIsbixpKXtsZXQgbz10aGlzLGE9W10scz1uZXcgYTYsbD1uZXcgSmModGhpcy5tYW5hZ2VyKTtsLnNldFBhdGgodGhpcy5wYXRoKSxsLnNldFJlc3BvbnNlVHlwZSgiYXJyYXlidWZmZXIiKSxsLnNldFJlcXVlc3RIZWFkZXIodGhpcy5yZXF1ZXN0SGVhZGVyKSxsLnNldFdpdGhDcmVkZW50aWFscyhvLndpdGhDcmVkZW50aWFscyk7bGV0IGM9MDtmdW5jdGlvbiB1KGgpe2wubG9hZCh0W2hdLGZ1bmN0aW9uKGYpe2xldCBwPW8ucGFyc2UoZiwhMCk7YVtoXT17d2lkdGg6cC53aWR0aCxoZWlnaHQ6cC5oZWlnaHQsZm9ybWF0OnAuZm9ybWF0LG1pcG1hcHM6cC5taXBtYXBzfSxjKz0xLGM9PT02JiYocC5taXBtYXBDb3VudD09PTEmJihzLm1pbkZpbHRlcj1paSkscy5pbWFnZT1hLHMuZm9ybWF0PXAuZm9ybWF0LHMubmVlZHNVcGRhdGU9ITAsciYmcihzKSl9LG4saSl9aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IobGV0IGg9MCxmPXQubGVuZ3RoO2g8ZjsrK2gpdShoKTtlbHNlIGwubG9hZCh0LGZ1bmN0aW9uKGgpe2xldCBmPW8ucGFyc2UoaCwhMCk7aWYoZi5pc0N1YmVtYXApe2xldCBwPWYubWlwbWFwcy5sZW5ndGgvZi5taXBtYXBDb3VudDtmb3IobGV0IGQ9MDtkPHA7ZCsrKXthW2RdPXttaXBtYXBzOltdfTtmb3IobGV0IGc9MDtnPGYubWlwbWFwQ291bnQ7ZysrKWFbZF0ubWlwbWFwcy5wdXNoKGYubWlwbWFwc1tkKmYubWlwbWFwQ291bnQrZ10pLGFbZF0uZm9ybWF0PWYuZm9ybWF0LGFbZF0ud2lkdGg9Zi53aWR0aCxhW2RdLmhlaWdodD1mLmhlaWdodH1zLmltYWdlPWF9ZWxzZSBzLmltYWdlLndpZHRoPWYud2lkdGgscy5pbWFnZS5oZWlnaHQ9Zi5oZWlnaHQscy5taXBtYXBzPWYubWlwbWFwcztmLm1pcG1hcENvdW50PT09MSYmKHMubWluRmlsdGVyPWlpKSxzLmZvcm1hdD1mLmZvcm1hdCxzLm5lZWRzVXBkYXRlPSEwLHImJnIocyl9LG4saSk7cmV0dXJuIHN9fSxyeD1jbGFzcyBleHRlbmRzIGVhe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxyLG4saSl7dGhpcy5wYXRoIT09dm9pZCAwJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtsZXQgbz10aGlzLGE9ZXguZ2V0KHQpO2lmKGEhPT12b2lkIDApcmV0dXJuIG8ubWFuYWdlci5pdGVtU3RhcnQodCksc2V0VGltZW91dChmdW5jdGlvbigpe3ImJnIoYSksby5tYW5hZ2VyLml0ZW1FbmQodCl9LDApLGE7bGV0IHM9dDYoImltZyIpO2Z1bmN0aW9uIGwoKXt1KCksZXguYWRkKHQsdGhpcyksciYmcih0aGlzKSxvLm1hbmFnZXIuaXRlbUVuZCh0KX1mdW5jdGlvbiBjKGgpe3UoKSxpJiZpKGgpLG8ubWFuYWdlci5pdGVtRXJyb3IodCksby5tYW5hZ2VyLml0ZW1FbmQodCl9ZnVuY3Rpb24gdSgpe3MucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsbCwhMSkscy5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsYywhMSl9cmV0dXJuIHMuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsbCwhMSkscy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsYywhMSksdC5zdWJzdHIoMCw1KSE9PSJkYXRhOiImJnRoaXMuY3Jvc3NPcmlnaW4hPT12b2lkIDAmJihzLmNyb3NzT3JpZ2luPXRoaXMuY3Jvc3NPcmlnaW4pLG8ubWFuYWdlci5pdGVtU3RhcnQodCkscy5zcmM9dCxzfX0sVFU9Y2xhc3MgZXh0ZW5kcyBlYXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQscixuLGkpe2xldCBvPW5ldyBWMCxhPW5ldyByeCh0aGlzLm1hbmFnZXIpO2Euc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbiksYS5zZXRQYXRoKHRoaXMucGF0aCk7bGV0IHM9MDtmdW5jdGlvbiBsKGMpe2EubG9hZCh0W2NdLGZ1bmN0aW9uKHUpe28uaW1hZ2VzW2NdPXUscysrLHM9PT02JiYoby5uZWVkc1VwZGF0ZT0hMCxyJiZyKG8pKX0sdm9pZCAwLGkpfWZvcihsZXQgYz0wO2M8dC5sZW5ndGg7KytjKWwoYyk7cmV0dXJuIG99fSxDVT1jbGFzcyBleHRlbmRzIGVhe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxyLG4saSl7bGV0IG89dGhpcyxhPW5ldyBRZCxzPW5ldyBKYyh0aGlzLm1hbmFnZXIpO3JldHVybiBzLnNldFJlc3BvbnNlVHlwZSgiYXJyYXlidWZmZXIiKSxzLnNldFJlcXVlc3RIZWFkZXIodGhpcy5yZXF1ZXN0SGVhZGVyKSxzLnNldFBhdGgodGhpcy5wYXRoKSxzLnNldFdpdGhDcmVkZW50aWFscyhvLndpdGhDcmVkZW50aWFscykscy5sb2FkKHQsZnVuY3Rpb24obCl7bGV0IGM9by5wYXJzZShsKTshY3x8KGMuaW1hZ2UhPT12b2lkIDA/YS5pbWFnZT1jLmltYWdlOmMuZGF0YSE9PXZvaWQgMCYmKGEuaW1hZ2Uud2lkdGg9Yy53aWR0aCxhLmltYWdlLmhlaWdodD1jLmhlaWdodCxhLmltYWdlLmRhdGE9Yy5kYXRhKSxhLndyYXBTPWMud3JhcFMhPT12b2lkIDA/Yy53cmFwUzpKbyxhLndyYXBUPWMud3JhcFQhPT12b2lkIDA/Yy53cmFwVDpKbyxhLm1hZ0ZpbHRlcj1jLm1hZ0ZpbHRlciE9PXZvaWQgMD9jLm1hZ0ZpbHRlcjppaSxhLm1pbkZpbHRlcj1jLm1pbkZpbHRlciE9PXZvaWQgMD9jLm1pbkZpbHRlcjppaSxhLmFuaXNvdHJvcHk9Yy5hbmlzb3Ryb3B5IT09dm9pZCAwP2MuYW5pc290cm9weToxLGMuZW5jb2RpbmchPT12b2lkIDAmJihhLmVuY29kaW5nPWMuZW5jb2RpbmcpLGMuZmxpcFkhPT12b2lkIDAmJihhLmZsaXBZPWMuZmxpcFkpLGMuZm9ybWF0IT09dm9pZCAwJiYoYS5mb3JtYXQ9Yy5mb3JtYXQpLGMudHlwZSE9PXZvaWQgMCYmKGEudHlwZT1jLnR5cGUpLGMubWlwbWFwcyE9PXZvaWQgMCYmKGEubWlwbWFwcz1jLm1pcG1hcHMsYS5taW5GaWx0ZXI9YXgpLGMubWlwbWFwQ291bnQ9PT0xJiYoYS5taW5GaWx0ZXI9aWkpLGMuZ2VuZXJhdGVNaXBtYXBzIT09dm9pZCAwJiYoYS5nZW5lcmF0ZU1pcG1hcHM9Yy5nZW5lcmF0ZU1pcG1hcHMpLGEubmVlZHNVcGRhdGU9ITAsciYmcihhLGMpKX0sbixpKSxhfX0sQVU9Y2xhc3MgZXh0ZW5kcyBlYXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQscixuLGkpe2xldCBvPW5ldyB2aSxhPW5ldyByeCh0aGlzLm1hbmFnZXIpO3JldHVybiBhLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pLGEuc2V0UGF0aCh0aGlzLnBhdGgpLGEubG9hZCh0LGZ1bmN0aW9uKHMpe28uaW1hZ2U9cyxvLm5lZWRzVXBkYXRlPSEwLHIhPT12b2lkIDAmJnIobyl9LG4saSksb319LHpsPWNsYXNzIGV4dGVuZHMgb3J7Y29uc3RydWN0b3IodCxyPTEpe3N1cGVyKCksdGhpcy50eXBlPSJMaWdodCIsdGhpcy5jb2xvcj1uZXcgbmUodCksdGhpcy5pbnRlbnNpdHk9cn1kaXNwb3NlKCl7fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMuaW50ZW5zaXR5PXQuaW50ZW5zaXR5LHRoaXN9dG9KU09OKHQpe2xldCByPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gci5vYmplY3QuY29sb3I9dGhpcy5jb2xvci5nZXRIZXgoKSxyLm9iamVjdC5pbnRlbnNpdHk9dGhpcy5pbnRlbnNpdHksdGhpcy5ncm91bmRDb2xvciE9PXZvaWQgMCYmKHIub2JqZWN0Lmdyb3VuZENvbG9yPXRoaXMuZ3JvdW5kQ29sb3IuZ2V0SGV4KCkpLHRoaXMuZGlzdGFuY2UhPT12b2lkIDAmJihyLm9iamVjdC5kaXN0YW5jZT10aGlzLmRpc3RhbmNlKSx0aGlzLmFuZ2xlIT09dm9pZCAwJiYoci5vYmplY3QuYW5nbGU9dGhpcy5hbmdsZSksdGhpcy5kZWNheSE9PXZvaWQgMCYmKHIub2JqZWN0LmRlY2F5PXRoaXMuZGVjYXkpLHRoaXMucGVudW1icmEhPT12b2lkIDAmJihyLm9iamVjdC5wZW51bWJyYT10aGlzLnBlbnVtYnJhKSx0aGlzLnNoYWRvdyE9PXZvaWQgMCYmKHIub2JqZWN0LnNoYWRvdz10aGlzLnNoYWRvdy50b0pTT04oKSkscn19O3psLnByb3RvdHlwZS5pc0xpZ2h0PSEwO3ZhciBUNj1jbGFzcyBleHRlbmRzIHpse2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcih0LG4pLHRoaXMudHlwZT0iSGVtaXNwaGVyZUxpZ2h0Iix0aGlzLnBvc2l0aW9uLmNvcHkob3IuRGVmYXVsdFVwKSx0aGlzLnVwZGF0ZU1hdHJpeCgpLHRoaXMuZ3JvdW5kQ29sb3I9bmV3IG5lKHIpfWNvcHkodCl7cmV0dXJuIHpsLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLmdyb3VuZENvbG9yLmNvcHkodC5ncm91bmRDb2xvciksdGhpc319O1Q2LnByb3RvdHlwZS5pc0hlbWlzcGhlcmVMaWdodD0hMDt2YXIgeGhlPW5ldyBNZSxiaGU9bmV3IGosd2hlPW5ldyBqLEM2PWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuY2FtZXJhPXQsdGhpcy5iaWFzPTAsdGhpcy5ub3JtYWxCaWFzPTAsdGhpcy5yYWRpdXM9MSx0aGlzLmJsdXJTYW1wbGVzPTgsdGhpcy5tYXBTaXplPW5ldyBMdCg1MTIsNTEyKSx0aGlzLm1hcD1udWxsLHRoaXMubWFwUGFzcz1udWxsLHRoaXMubWF0cml4PW5ldyBNZSx0aGlzLmF1dG9VcGRhdGU9ITAsdGhpcy5uZWVkc1VwZGF0ZT0hMSx0aGlzLl9mcnVzdHVtPW5ldyBEMSx0aGlzLl9mcmFtZUV4dGVudHM9bmV3IEx0KDEsMSksdGhpcy5fdmlld3BvcnRDb3VudD0xLHRoaXMuX3ZpZXdwb3J0cz1bbmV3IGVuKDAsMCwxLDEpXX1nZXRWaWV3cG9ydENvdW50KCl7cmV0dXJuIHRoaXMuX3ZpZXdwb3J0Q291bnR9Z2V0RnJ1c3R1bSgpe3JldHVybiB0aGlzLl9mcnVzdHVtfXVwZGF0ZU1hdHJpY2VzKHQpe2xldCByPXRoaXMuY2FtZXJhLG49dGhpcy5tYXRyaXg7YmhlLnNldEZyb21NYXRyaXhQb3NpdGlvbih0Lm1hdHJpeFdvcmxkKSxyLnBvc2l0aW9uLmNvcHkoYmhlKSx3aGUuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQudGFyZ2V0Lm1hdHJpeFdvcmxkKSxyLmxvb2tBdCh3aGUpLHIudXBkYXRlTWF0cml4V29ybGQoKSx4aGUubXVsdGlwbHlNYXRyaWNlcyhyLnByb2plY3Rpb25NYXRyaXgsci5tYXRyaXhXb3JsZEludmVyc2UpLHRoaXMuX2ZydXN0dW0uc2V0RnJvbVByb2plY3Rpb25NYXRyaXgoeGhlKSxuLnNldCguNSwwLDAsLjUsMCwuNSwwLC41LDAsMCwuNSwuNSwwLDAsMCwxKSxuLm11bHRpcGx5KHIucHJvamVjdGlvbk1hdHJpeCksbi5tdWx0aXBseShyLm1hdHJpeFdvcmxkSW52ZXJzZSl9Z2V0Vmlld3BvcnQodCl7cmV0dXJuIHRoaXMuX3ZpZXdwb3J0c1t0XX1nZXRGcmFtZUV4dGVudHMoKXtyZXR1cm4gdGhpcy5fZnJhbWVFeHRlbnRzfWRpc3Bvc2UoKXt0aGlzLm1hcCYmdGhpcy5tYXAuZGlzcG9zZSgpLHRoaXMubWFwUGFzcyYmdGhpcy5tYXBQYXNzLmRpc3Bvc2UoKX1jb3B5KHQpe3JldHVybiB0aGlzLmNhbWVyYT10LmNhbWVyYS5jbG9uZSgpLHRoaXMuYmlhcz10LmJpYXMsdGhpcy5yYWRpdXM9dC5yYWRpdXMsdGhpcy5tYXBTaXplLmNvcHkodC5tYXBTaXplKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX10b0pTT04oKXtsZXQgdD17fTtyZXR1cm4gdGhpcy5iaWFzIT09MCYmKHQuYmlhcz10aGlzLmJpYXMpLHRoaXMubm9ybWFsQmlhcyE9PTAmJih0Lm5vcm1hbEJpYXM9dGhpcy5ub3JtYWxCaWFzKSx0aGlzLnJhZGl1cyE9PTEmJih0LnJhZGl1cz10aGlzLnJhZGl1cyksKHRoaXMubWFwU2l6ZS54IT09NTEyfHx0aGlzLm1hcFNpemUueSE9PTUxMikmJih0Lm1hcFNpemU9dGhpcy5tYXBTaXplLnRvQXJyYXkoKSksdC5jYW1lcmE9dGhpcy5jYW1lcmEudG9KU09OKCExKS5vYmplY3QsZGVsZXRlIHQuY2FtZXJhLm1hdHJpeCx0fX0sUFU9Y2xhc3MgZXh0ZW5kcyBDNntjb25zdHJ1Y3Rvcigpe3N1cGVyKG5ldyBVaSg1MCwxLC41LDUwMCkpLHRoaXMuZm9jdXM9MX11cGRhdGVNYXRyaWNlcyh0KXtsZXQgcj10aGlzLmNhbWVyYSxuPVFQKjIqdC5hbmdsZSp0aGlzLmZvY3VzLGk9dGhpcy5tYXBTaXplLndpZHRoL3RoaXMubWFwU2l6ZS5oZWlnaHQsbz10LmRpc3RhbmNlfHxyLmZhcjsobiE9PXIuZm92fHxpIT09ci5hc3BlY3R8fG8hPT1yLmZhcikmJihyLmZvdj1uLHIuYXNwZWN0PWksci5mYXI9byxyLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSksc3VwZXIudXBkYXRlTWF0cmljZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmZvY3VzPXQuZm9jdXMsdGhpc319O1BVLnByb3RvdHlwZS5pc1Nwb3RMaWdodFNoYWRvdz0hMDt2YXIgQTY9Y2xhc3MgZXh0ZW5kcyB6bHtjb25zdHJ1Y3Rvcih0LHIsbj0wLGk9TWF0aC5QSS8zLG89MCxhPTEpe3N1cGVyKHQsciksdGhpcy50eXBlPSJTcG90TGlnaHQiLHRoaXMucG9zaXRpb24uY29weShvci5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy50YXJnZXQ9bmV3IG9yLHRoaXMuZGlzdGFuY2U9bix0aGlzLmFuZ2xlPWksdGhpcy5wZW51bWJyYT1vLHRoaXMuZGVjYXk9YSx0aGlzLnNoYWRvdz1uZXcgUFV9Z2V0IHBvd2VyKCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5Kk1hdGguUEl9c2V0IHBvd2VyKHQpe3RoaXMuaW50ZW5zaXR5PXQvTWF0aC5QSX1kaXNwb3NlKCl7dGhpcy5zaGFkb3cuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kaXN0YW5jZT10LmRpc3RhbmNlLHRoaXMuYW5nbGU9dC5hbmdsZSx0aGlzLnBlbnVtYnJhPXQucGVudW1icmEsdGhpcy5kZWNheT10LmRlY2F5LHRoaXMudGFyZ2V0PXQudGFyZ2V0LmNsb25lKCksdGhpcy5zaGFkb3c9dC5zaGFkb3cuY2xvbmUoKSx0aGlzfX07QTYucHJvdG90eXBlLmlzU3BvdExpZ2h0PSEwO3ZhciBTaGU9bmV3IE1lLEJQPW5ldyBqLHh1dD1uZXcgaixJVT1jbGFzcyBleHRlbmRzIEM2e2NvbnN0cnVjdG9yKCl7c3VwZXIobmV3IFVpKDkwLDEsLjUsNTAwKSksdGhpcy5fZnJhbWVFeHRlbnRzPW5ldyBMdCg0LDIpLHRoaXMuX3ZpZXdwb3J0Q291bnQ9Nix0aGlzLl92aWV3cG9ydHM9W25ldyBlbigyLDEsMSwxKSxuZXcgZW4oMCwxLDEsMSksbmV3IGVuKDMsMSwxLDEpLG5ldyBlbigxLDEsMSwxKSxuZXcgZW4oMywwLDEsMSksbmV3IGVuKDEsMCwxLDEpXSx0aGlzLl9jdWJlRGlyZWN0aW9ucz1bbmV3IGooMSwwLDApLG5ldyBqKC0xLDAsMCksbmV3IGooMCwwLDEpLG5ldyBqKDAsMCwtMSksbmV3IGooMCwxLDApLG5ldyBqKDAsLTEsMCldLHRoaXMuX2N1YmVVcHM9W25ldyBqKDAsMSwwKSxuZXcgaigwLDEsMCksbmV3IGooMCwxLDApLG5ldyBqKDAsMSwwKSxuZXcgaigwLDAsMSksbmV3IGooMCwwLC0xKV19dXBkYXRlTWF0cmljZXModCxyPTApe2xldCBuPXRoaXMuY2FtZXJhLGk9dGhpcy5tYXRyaXgsbz10LmRpc3RhbmNlfHxuLmZhcjtvIT09bi5mYXImJihuLmZhcj1vLG4udXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpKSxCUC5zZXRGcm9tTWF0cml4UG9zaXRpb24odC5tYXRyaXhXb3JsZCksbi5wb3NpdGlvbi5jb3B5KEJQKSx4dXQuY29weShuLnBvc2l0aW9uKSx4dXQuYWRkKHRoaXMuX2N1YmVEaXJlY3Rpb25zW3JdKSxuLnVwLmNvcHkodGhpcy5fY3ViZVVwc1tyXSksbi5sb29rQXQoeHV0KSxuLnVwZGF0ZU1hdHJpeFdvcmxkKCksaS5tYWtlVHJhbnNsYXRpb24oLUJQLngsLUJQLnksLUJQLnopLFNoZS5tdWx0aXBseU1hdHJpY2VzKG4ucHJvamVjdGlvbk1hdHJpeCxuLm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5fZnJ1c3R1bS5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChTaGUpfX07SVUucHJvdG90eXBlLmlzUG9pbnRMaWdodFNoYWRvdz0hMDt2YXIgUDY9Y2xhc3MgZXh0ZW5kcyB6bHtjb25zdHJ1Y3Rvcih0LHIsbj0wLGk9MSl7c3VwZXIodCxyKSx0aGlzLnR5cGU9IlBvaW50TGlnaHQiLHRoaXMuZGlzdGFuY2U9bix0aGlzLmRlY2F5PWksdGhpcy5zaGFkb3c9bmV3IElVfWdldCBwb3dlcigpe3JldHVybiB0aGlzLmludGVuc2l0eSo0Kk1hdGguUEl9c2V0IHBvd2VyKHQpe3RoaXMuaW50ZW5zaXR5PXQvKDQqTWF0aC5QSSl9ZGlzcG9zZSgpe3RoaXMuc2hhZG93LmRpc3Bvc2UoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZGlzdGFuY2U9dC5kaXN0YW5jZSx0aGlzLmRlY2F5PXQuZGVjYXksdGhpcy5zaGFkb3c9dC5zaGFkb3cuY2xvbmUoKSx0aGlzfX07UDYucHJvdG90eXBlLmlzUG9pbnRMaWdodD0hMDt2YXIgTFU9Y2xhc3MgZXh0ZW5kcyBDNntjb25zdHJ1Y3Rvcigpe3N1cGVyKG5ldyBPMSgtNSw1LDUsLTUsLjUsNTAwKSl9fTtMVS5wcm90b3R5cGUuaXNEaXJlY3Rpb25hbExpZ2h0U2hhZG93PSEwO3ZhciBJNj1jbGFzcyBleHRlbmRzIHpse2NvbnN0cnVjdG9yKHQscil7c3VwZXIodCxyKSx0aGlzLnR5cGU9IkRpcmVjdGlvbmFsTGlnaHQiLHRoaXMucG9zaXRpb24uY29weShvci5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy50YXJnZXQ9bmV3IG9yLHRoaXMuc2hhZG93PW5ldyBMVX1kaXNwb3NlKCl7dGhpcy5zaGFkb3cuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy50YXJnZXQ9dC50YXJnZXQuY2xvbmUoKSx0aGlzLnNoYWRvdz10LnNoYWRvdy5jbG9uZSgpLHRoaXN9fTtJNi5wcm90b3R5cGUuaXNEaXJlY3Rpb25hbExpZ2h0PSEwO3ZhciBMNj1jbGFzcyBleHRlbmRzIHpse2NvbnN0cnVjdG9yKHQscil7c3VwZXIodCxyKSx0aGlzLnR5cGU9IkFtYmllbnRMaWdodCJ9fTtMNi5wcm90b3R5cGUuaXNBbWJpZW50TGlnaHQ9ITA7dmFyIGs2PWNsYXNzIGV4dGVuZHMgemx7Y29uc3RydWN0b3IodCxyLG49MTAsaT0xMCl7c3VwZXIodCxyKSx0aGlzLnR5cGU9IlJlY3RBcmVhTGlnaHQiLHRoaXMud2lkdGg9bix0aGlzLmhlaWdodD1pfWdldCBwb3dlcigpe3JldHVybiB0aGlzLmludGVuc2l0eSp0aGlzLndpZHRoKnRoaXMuaGVpZ2h0Kk1hdGguUEl9c2V0IHBvd2VyKHQpe3RoaXMuaW50ZW5zaXR5PXQvKHRoaXMud2lkdGgqdGhpcy5oZWlnaHQqTWF0aC5QSSl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLndpZHRoPXQud2lkdGgsdGhpcy5oZWlnaHQ9dC5oZWlnaHQsdGhpc310b0pTT04odCl7bGV0IHI9c3VwZXIudG9KU09OKHQpO3JldHVybiByLm9iamVjdC53aWR0aD10aGlzLndpZHRoLHIub2JqZWN0LmhlaWdodD10aGlzLmhlaWdodCxyfX07azYucHJvdG90eXBlLmlzUmVjdEFyZWFMaWdodD0hMDt2YXIgUjY9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmNvZWZmaWNpZW50cz1bXTtmb3IobGV0IHQ9MDt0PDk7dCsrKXRoaXMuY29lZmZpY2llbnRzLnB1c2gobmV3IGopfXNldCh0KXtmb3IobGV0IHI9MDtyPDk7cisrKXRoaXMuY29lZmZpY2llbnRzW3JdLmNvcHkodFtyXSk7cmV0dXJuIHRoaXN9emVybygpe2ZvcihsZXQgdD0wO3Q8OTt0KyspdGhpcy5jb2VmZmljaWVudHNbdF0uc2V0KDAsMCwwKTtyZXR1cm4gdGhpc31nZXRBdCh0LHIpe2xldCBuPXQueCxpPXQueSxvPXQueixhPXRoaXMuY29lZmZpY2llbnRzO3JldHVybiByLmNvcHkoYVswXSkubXVsdGlwbHlTY2FsYXIoLjI4MjA5NSksci5hZGRTY2FsZWRWZWN0b3IoYVsxXSwuNDg4NjAzKmkpLHIuYWRkU2NhbGVkVmVjdG9yKGFbMl0sLjQ4ODYwMypvKSxyLmFkZFNjYWxlZFZlY3RvcihhWzNdLC40ODg2MDMqbiksci5hZGRTY2FsZWRWZWN0b3IoYVs0XSwxLjA5MjU0OCoobippKSksci5hZGRTY2FsZWRWZWN0b3IoYVs1XSwxLjA5MjU0OCooaSpvKSksci5hZGRTY2FsZWRWZWN0b3IoYVs2XSwuMzE1MzkyKigzKm8qby0xKSksci5hZGRTY2FsZWRWZWN0b3IoYVs3XSwxLjA5MjU0OCoobipvKSksci5hZGRTY2FsZWRWZWN0b3IoYVs4XSwuNTQ2Mjc0KihuKm4taSppKSkscn1nZXRJcnJhZGlhbmNlQXQodCxyKXtsZXQgbj10LngsaT10Lnksbz10LnosYT10aGlzLmNvZWZmaWNpZW50cztyZXR1cm4gci5jb3B5KGFbMF0pLm11bHRpcGx5U2NhbGFyKC44ODYyMjcpLHIuYWRkU2NhbGVkVmVjdG9yKGFbMV0sMiouNTExNjY0KmkpLHIuYWRkU2NhbGVkVmVjdG9yKGFbMl0sMiouNTExNjY0Km8pLHIuYWRkU2NhbGVkVmVjdG9yKGFbM10sMiouNTExNjY0Km4pLHIuYWRkU2NhbGVkVmVjdG9yKGFbNF0sMiouNDI5MDQzKm4qaSksci5hZGRTY2FsZWRWZWN0b3IoYVs1XSwyKi40MjkwNDMqaSpvKSxyLmFkZFNjYWxlZFZlY3RvcihhWzZdLC43NDMxMjUqbypvLS4yNDc3MDgpLHIuYWRkU2NhbGVkVmVjdG9yKGFbN10sMiouNDI5MDQzKm4qbyksci5hZGRTY2FsZWRWZWN0b3IoYVs4XSwuNDI5MDQzKihuKm4taSppKSkscn1hZGQodCl7Zm9yKGxldCByPTA7cjw5O3IrKyl0aGlzLmNvZWZmaWNpZW50c1tyXS5hZGQodC5jb2VmZmljaWVudHNbcl0pO3JldHVybiB0aGlzfWFkZFNjYWxlZFNIKHQscil7Zm9yKGxldCBuPTA7bjw5O24rKyl0aGlzLmNvZWZmaWNpZW50c1tuXS5hZGRTY2FsZWRWZWN0b3IodC5jb2VmZmljaWVudHNbbl0scik7cmV0dXJuIHRoaXN9c2NhbGUodCl7Zm9yKGxldCByPTA7cjw5O3IrKyl0aGlzLmNvZWZmaWNpZW50c1tyXS5tdWx0aXBseVNjYWxhcih0KTtyZXR1cm4gdGhpc31sZXJwKHQscil7Zm9yKGxldCBuPTA7bjw5O24rKyl0aGlzLmNvZWZmaWNpZW50c1tuXS5sZXJwKHQuY29lZmZpY2llbnRzW25dLHIpO3JldHVybiB0aGlzfWVxdWFscyh0KXtmb3IobGV0IHI9MDtyPDk7cisrKWlmKCF0aGlzLmNvZWZmaWNpZW50c1tyXS5lcXVhbHModC5jb2VmZmljaWVudHNbcl0pKXJldHVybiExO3JldHVybiEwfWNvcHkodCl7cmV0dXJuIHRoaXMuc2V0KHQuY29lZmZpY2llbnRzKX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9ZnJvbUFycmF5KHQscj0wKXtsZXQgbj10aGlzLmNvZWZmaWNpZW50cztmb3IobGV0IGk9MDtpPDk7aSsrKW5baV0uZnJvbUFycmF5KHQscitpKjMpO3JldHVybiB0aGlzfXRvQXJyYXkodD1bXSxyPTApe2xldCBuPXRoaXMuY29lZmZpY2llbnRzO2ZvcihsZXQgaT0wO2k8OTtpKyspbltpXS50b0FycmF5KHQscitpKjMpO3JldHVybiB0fXN0YXRpYyBnZXRCYXNpc0F0KHQscil7bGV0IG49dC54LGk9dC55LG89dC56O3JbMF09LjI4MjA5NSxyWzFdPS40ODg2MDMqaSxyWzJdPS40ODg2MDMqbyxyWzNdPS40ODg2MDMqbixyWzRdPTEuMDkyNTQ4Km4qaSxyWzVdPTEuMDkyNTQ4KmkqbyxyWzZdPS4zMTUzOTIqKDMqbypvLTEpLHJbN109MS4wOTI1NDgqbipvLHJbOF09LjU0NjI3NCoobipuLWkqaSl9fTtSNi5wcm90b3R5cGUuaXNTcGhlcmljYWxIYXJtb25pY3MzPSEwO3ZhciBueD1jbGFzcyBleHRlbmRzIHpse2NvbnN0cnVjdG9yKHQ9bmV3IFI2LHI9MSl7c3VwZXIodm9pZCAwLHIpLHRoaXMuc2g9dH1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuc2guY29weSh0LnNoKSx0aGlzfWZyb21KU09OKHQpe3JldHVybiB0aGlzLmludGVuc2l0eT10LmludGVuc2l0eSx0aGlzLnNoLmZyb21BcnJheSh0LnNoKSx0aGlzfXRvSlNPTih0KXtsZXQgcj1zdXBlci50b0pTT04odCk7cmV0dXJuIHIub2JqZWN0LnNoPXRoaXMuc2gudG9BcnJheSgpLHJ9fTtueC5wcm90b3R5cGUuaXNMaWdodFByb2JlPSEwO3ZhciBrVT1jbGFzcyBleHRlbmRzIGVhe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMudGV4dHVyZXM9e319bG9hZCh0LHIsbixpKXtsZXQgbz10aGlzLGE9bmV3IEpjKG8ubWFuYWdlcik7YS5zZXRQYXRoKG8ucGF0aCksYS5zZXRSZXF1ZXN0SGVhZGVyKG8ucmVxdWVzdEhlYWRlciksYS5zZXRXaXRoQ3JlZGVudGlhbHMoby53aXRoQ3JlZGVudGlhbHMpLGEubG9hZCh0LGZ1bmN0aW9uKHMpe3RyeXtyKG8ucGFyc2UoSlNPTi5wYXJzZShzKSkpfWNhdGNoKGwpe2k/aShsKTpjb25zb2xlLmVycm9yKGwpLG8ubWFuYWdlci5pdGVtRXJyb3IodCl9fSxuLGkpfXBhcnNlKHQpe2xldCByPXRoaXMudGV4dHVyZXM7ZnVuY3Rpb24gbihvKXtyZXR1cm4gcltvXT09PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbExvYWRlcjogVW5kZWZpbmVkIHRleHR1cmUiLG8pLHJbb119bGV0IGk9bmV3IHUwclt0LnR5cGVdO2lmKHQudXVpZCE9PXZvaWQgMCYmKGkudXVpZD10LnV1aWQpLHQubmFtZSE9PXZvaWQgMCYmKGkubmFtZT10Lm5hbWUpLHQuY29sb3IhPT12b2lkIDAmJmkuY29sb3IhPT12b2lkIDAmJmkuY29sb3Iuc2V0SGV4KHQuY29sb3IpLHQucm91Z2huZXNzIT09dm9pZCAwJiYoaS5yb3VnaG5lc3M9dC5yb3VnaG5lc3MpLHQubWV0YWxuZXNzIT09dm9pZCAwJiYoaS5tZXRhbG5lc3M9dC5tZXRhbG5lc3MpLHQuc2hlZW4hPT12b2lkIDAmJihpLnNoZWVuPXQuc2hlZW4pLHQuc2hlZW5Db2xvciE9PXZvaWQgMCYmKGkuc2hlZW5Db2xvcj1uZXcgbmUoKS5zZXRIZXgodC5zaGVlbkNvbG9yKSksdC5zaGVlblJvdWdobmVzcyE9PXZvaWQgMCYmKGkuc2hlZW5Sb3VnaG5lc3M9dC5zaGVlblJvdWdobmVzcyksdC5lbWlzc2l2ZSE9PXZvaWQgMCYmaS5lbWlzc2l2ZSE9PXZvaWQgMCYmaS5lbWlzc2l2ZS5zZXRIZXgodC5lbWlzc2l2ZSksdC5zcGVjdWxhciE9PXZvaWQgMCYmaS5zcGVjdWxhciE9PXZvaWQgMCYmaS5zcGVjdWxhci5zZXRIZXgodC5zcGVjdWxhciksdC5zcGVjdWxhckludGVuc2l0eSE9PXZvaWQgMCYmKGkuc3BlY3VsYXJJbnRlbnNpdHk9dC5zcGVjdWxhckludGVuc2l0eSksdC5zcGVjdWxhckNvbG9yIT09dm9pZCAwJiZpLnNwZWN1bGFyQ29sb3IhPT12b2lkIDAmJmkuc3BlY3VsYXJDb2xvci5zZXRIZXgodC5zcGVjdWxhckNvbG9yKSx0LnNoaW5pbmVzcyE9PXZvaWQgMCYmKGkuc2hpbmluZXNzPXQuc2hpbmluZXNzKSx0LmNsZWFyY29hdCE9PXZvaWQgMCYmKGkuY2xlYXJjb2F0PXQuY2xlYXJjb2F0KSx0LmNsZWFyY29hdFJvdWdobmVzcyE9PXZvaWQgMCYmKGkuY2xlYXJjb2F0Um91Z2huZXNzPXQuY2xlYXJjb2F0Um91Z2huZXNzKSx0LnRyYW5zbWlzc2lvbiE9PXZvaWQgMCYmKGkudHJhbnNtaXNzaW9uPXQudHJhbnNtaXNzaW9uKSx0LnRoaWNrbmVzcyE9PXZvaWQgMCYmKGkudGhpY2tuZXNzPXQudGhpY2tuZXNzKSx0LmF0dGVudWF0aW9uRGlzdGFuY2UhPT12b2lkIDAmJihpLmF0dGVudWF0aW9uRGlzdGFuY2U9dC5hdHRlbnVhdGlvbkRpc3RhbmNlKSx0LmF0dGVudWF0aW9uQ29sb3IhPT12b2lkIDAmJmkuYXR0ZW51YXRpb25Db2xvciE9PXZvaWQgMCYmaS5hdHRlbnVhdGlvbkNvbG9yLnNldEhleCh0LmF0dGVudWF0aW9uQ29sb3IpLHQuZm9nIT09dm9pZCAwJiYoaS5mb2c9dC5mb2cpLHQuZmxhdFNoYWRpbmchPT12b2lkIDAmJihpLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcpLHQuYmxlbmRpbmchPT12b2lkIDAmJihpLmJsZW5kaW5nPXQuYmxlbmRpbmcpLHQuY29tYmluZSE9PXZvaWQgMCYmKGkuY29tYmluZT10LmNvbWJpbmUpLHQuc2lkZSE9PXZvaWQgMCYmKGkuc2lkZT10LnNpZGUpLHQuc2hhZG93U2lkZSE9PXZvaWQgMCYmKGkuc2hhZG93U2lkZT10LnNoYWRvd1NpZGUpLHQub3BhY2l0eSE9PXZvaWQgMCYmKGkub3BhY2l0eT10Lm9wYWNpdHkpLHQudHJhbnNwYXJlbnQhPT12b2lkIDAmJihpLnRyYW5zcGFyZW50PXQudHJhbnNwYXJlbnQpLHQuYWxwaGFUZXN0IT09dm9pZCAwJiYoaS5hbHBoYVRlc3Q9dC5hbHBoYVRlc3QpLHQuZGVwdGhUZXN0IT09dm9pZCAwJiYoaS5kZXB0aFRlc3Q9dC5kZXB0aFRlc3QpLHQuZGVwdGhXcml0ZSE9PXZvaWQgMCYmKGkuZGVwdGhXcml0ZT10LmRlcHRoV3JpdGUpLHQuY29sb3JXcml0ZSE9PXZvaWQgMCYmKGkuY29sb3JXcml0ZT10LmNvbG9yV3JpdGUpLHQuYWxwaGFXcml0ZSE9PXZvaWQgMCYmKGkuYWxwaGFXcml0ZT10LmFscGhhV3JpdGUpLHQuc3RlbmNpbFdyaXRlIT09dm9pZCAwJiYoaS5zdGVuY2lsV3JpdGU9dC5zdGVuY2lsV3JpdGUpLHQuc3RlbmNpbFdyaXRlTWFzayE9PXZvaWQgMCYmKGkuc3RlbmNpbFdyaXRlTWFzaz10LnN0ZW5jaWxXcml0ZU1hc2spLHQuc3RlbmNpbEZ1bmMhPT12b2lkIDAmJihpLnN0ZW5jaWxGdW5jPXQuc3RlbmNpbEZ1bmMpLHQuc3RlbmNpbFJlZiE9PXZvaWQgMCYmKGkuc3RlbmNpbFJlZj10LnN0ZW5jaWxSZWYpLHQuc3RlbmNpbEZ1bmNNYXNrIT09dm9pZCAwJiYoaS5zdGVuY2lsRnVuY01hc2s9dC5zdGVuY2lsRnVuY01hc2spLHQuc3RlbmNpbEZhaWwhPT12b2lkIDAmJihpLnN0ZW5jaWxGYWlsPXQuc3RlbmNpbEZhaWwpLHQuc3RlbmNpbFpGYWlsIT09dm9pZCAwJiYoaS5zdGVuY2lsWkZhaWw9dC5zdGVuY2lsWkZhaWwpLHQuc3RlbmNpbFpQYXNzIT09dm9pZCAwJiYoaS5zdGVuY2lsWlBhc3M9dC5zdGVuY2lsWlBhc3MpLHQud2lyZWZyYW1lIT09dm9pZCAwJiYoaS53aXJlZnJhbWU9dC53aXJlZnJhbWUpLHQud2lyZWZyYW1lTGluZXdpZHRoIT09dm9pZCAwJiYoaS53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgpLHQud2lyZWZyYW1lTGluZWNhcCE9PXZvaWQgMCYmKGkud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXApLHQud2lyZWZyYW1lTGluZWpvaW4hPT12b2lkIDAmJihpLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4pLHQucm90YXRpb24hPT12b2lkIDAmJihpLnJvdGF0aW9uPXQucm90YXRpb24pLHQubGluZXdpZHRoIT09MSYmKGkubGluZXdpZHRoPXQubGluZXdpZHRoKSx0LmRhc2hTaXplIT09dm9pZCAwJiYoaS5kYXNoU2l6ZT10LmRhc2hTaXplKSx0LmdhcFNpemUhPT12b2lkIDAmJihpLmdhcFNpemU9dC5nYXBTaXplKSx0LnNjYWxlIT09dm9pZCAwJiYoaS5zY2FsZT10LnNjYWxlKSx0LnBvbHlnb25PZmZzZXQhPT12b2lkIDAmJihpLnBvbHlnb25PZmZzZXQ9dC5wb2x5Z29uT2Zmc2V0KSx0LnBvbHlnb25PZmZzZXRGYWN0b3IhPT12b2lkIDAmJihpLnBvbHlnb25PZmZzZXRGYWN0b3I9dC5wb2x5Z29uT2Zmc2V0RmFjdG9yKSx0LnBvbHlnb25PZmZzZXRVbml0cyE9PXZvaWQgMCYmKGkucG9seWdvbk9mZnNldFVuaXRzPXQucG9seWdvbk9mZnNldFVuaXRzKSx0LmRpdGhlcmluZyE9PXZvaWQgMCYmKGkuZGl0aGVyaW5nPXQuZGl0aGVyaW5nKSx0LmFscGhhVG9Db3ZlcmFnZSE9PXZvaWQgMCYmKGkuYWxwaGFUb0NvdmVyYWdlPXQuYWxwaGFUb0NvdmVyYWdlKSx0LnByZW11bHRpcGxpZWRBbHBoYSE9PXZvaWQgMCYmKGkucHJlbXVsdGlwbGllZEFscGhhPXQucHJlbXVsdGlwbGllZEFscGhhKSx0LnZpc2libGUhPT12b2lkIDAmJihpLnZpc2libGU9dC52aXNpYmxlKSx0LnRvbmVNYXBwZWQhPT12b2lkIDAmJihpLnRvbmVNYXBwZWQ9dC50b25lTWFwcGVkKSx0LnVzZXJEYXRhIT09dm9pZCAwJiYoaS51c2VyRGF0YT10LnVzZXJEYXRhKSx0LnZlcnRleENvbG9ycyE9PXZvaWQgMCYmKHR5cGVvZiB0LnZlcnRleENvbG9ycz09Im51bWJlciI/aS52ZXJ0ZXhDb2xvcnM9dC52ZXJ0ZXhDb2xvcnM+MDppLnZlcnRleENvbG9ycz10LnZlcnRleENvbG9ycyksdC51bmlmb3JtcyE9PXZvaWQgMClmb3IobGV0IG8gaW4gdC51bmlmb3Jtcyl7bGV0IGE9dC51bmlmb3Jtc1tvXTtzd2l0Y2goaS51bmlmb3Jtc1tvXT17fSxhLnR5cGUpe2Nhc2UidCI6aS51bmlmb3Jtc1tvXS52YWx1ZT1uKGEudmFsdWUpO2JyZWFrO2Nhc2UiYyI6aS51bmlmb3Jtc1tvXS52YWx1ZT1uZXcgbmUoKS5zZXRIZXgoYS52YWx1ZSk7YnJlYWs7Y2FzZSJ2MiI6aS51bmlmb3Jtc1tvXS52YWx1ZT1uZXcgTHQoKS5mcm9tQXJyYXkoYS52YWx1ZSk7YnJlYWs7Y2FzZSJ2MyI6aS51bmlmb3Jtc1tvXS52YWx1ZT1uZXcgaigpLmZyb21BcnJheShhLnZhbHVlKTticmVhaztjYXNlInY0IjppLnVuaWZvcm1zW29dLnZhbHVlPW5ldyBlbigpLmZyb21BcnJheShhLnZhbHVlKTticmVhaztjYXNlIm0zIjppLnVuaWZvcm1zW29dLnZhbHVlPW5ldyBraSgpLmZyb21BcnJheShhLnZhbHVlKTticmVhaztjYXNlIm00IjppLnVuaWZvcm1zW29dLnZhbHVlPW5ldyBNZSgpLmZyb21BcnJheShhLnZhbHVlKTticmVhaztkZWZhdWx0OmkudW5pZm9ybXNbb10udmFsdWU9YS52YWx1ZX19aWYodC5kZWZpbmVzIT09dm9pZCAwJiYoaS5kZWZpbmVzPXQuZGVmaW5lcyksdC52ZXJ0ZXhTaGFkZXIhPT12b2lkIDAmJihpLnZlcnRleFNoYWRlcj10LnZlcnRleFNoYWRlciksdC5mcmFnbWVudFNoYWRlciE9PXZvaWQgMCYmKGkuZnJhZ21lbnRTaGFkZXI9dC5mcmFnbWVudFNoYWRlciksdC5leHRlbnNpb25zIT09dm9pZCAwKWZvcihsZXQgbyBpbiB0LmV4dGVuc2lvbnMpaS5leHRlbnNpb25zW29dPXQuZXh0ZW5zaW9uc1tvXTtpZih0LnNoYWRpbmchPT12b2lkIDAmJihpLmZsYXRTaGFkaW5nPXQuc2hhZGluZz09PTEpLHQuc2l6ZSE9PXZvaWQgMCYmKGkuc2l6ZT10LnNpemUpLHQuc2l6ZUF0dGVudWF0aW9uIT09dm9pZCAwJiYoaS5zaXplQXR0ZW51YXRpb249dC5zaXplQXR0ZW51YXRpb24pLHQubWFwIT09dm9pZCAwJiYoaS5tYXA9bih0Lm1hcCkpLHQubWF0Y2FwIT09dm9pZCAwJiYoaS5tYXRjYXA9bih0Lm1hdGNhcCkpLHQuYWxwaGFNYXAhPT12b2lkIDAmJihpLmFscGhhTWFwPW4odC5hbHBoYU1hcCkpLHQuYnVtcE1hcCE9PXZvaWQgMCYmKGkuYnVtcE1hcD1uKHQuYnVtcE1hcCkpLHQuYnVtcFNjYWxlIT09dm9pZCAwJiYoaS5idW1wU2NhbGU9dC5idW1wU2NhbGUpLHQubm9ybWFsTWFwIT09dm9pZCAwJiYoaS5ub3JtYWxNYXA9bih0Lm5vcm1hbE1hcCkpLHQubm9ybWFsTWFwVHlwZSE9PXZvaWQgMCYmKGkubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUpLHQubm9ybWFsU2NhbGUhPT12b2lkIDApe2xldCBvPXQubm9ybWFsU2NhbGU7QXJyYXkuaXNBcnJheShvKT09PSExJiYobz1bbyxvXSksaS5ub3JtYWxTY2FsZT1uZXcgTHQoKS5mcm9tQXJyYXkobyl9cmV0dXJuIHQuZGlzcGxhY2VtZW50TWFwIT09dm9pZCAwJiYoaS5kaXNwbGFjZW1lbnRNYXA9bih0LmRpc3BsYWNlbWVudE1hcCkpLHQuZGlzcGxhY2VtZW50U2NhbGUhPT12b2lkIDAmJihpLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUpLHQuZGlzcGxhY2VtZW50QmlhcyE9PXZvaWQgMCYmKGkuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMpLHQucm91Z2huZXNzTWFwIT09dm9pZCAwJiYoaS5yb3VnaG5lc3NNYXA9bih0LnJvdWdobmVzc01hcCkpLHQubWV0YWxuZXNzTWFwIT09dm9pZCAwJiYoaS5tZXRhbG5lc3NNYXA9bih0Lm1ldGFsbmVzc01hcCkpLHQuZW1pc3NpdmVNYXAhPT12b2lkIDAmJihpLmVtaXNzaXZlTWFwPW4odC5lbWlzc2l2ZU1hcCkpLHQuZW1pc3NpdmVJbnRlbnNpdHkhPT12b2lkIDAmJihpLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHkpLHQuc3BlY3VsYXJNYXAhPT12b2lkIDAmJihpLnNwZWN1bGFyTWFwPW4odC5zcGVjdWxhck1hcCkpLHQuc3BlY3VsYXJJbnRlbnNpdHlNYXAhPT12b2lkIDAmJihpLnNwZWN1bGFySW50ZW5zaXR5TWFwPW4odC5zcGVjdWxhckludGVuc2l0eU1hcCkpLHQuc3BlY3VsYXJDb2xvck1hcCE9PXZvaWQgMCYmKGkuc3BlY3VsYXJDb2xvck1hcD1uKHQuc3BlY3VsYXJDb2xvck1hcCkpLHQuZW52TWFwIT09dm9pZCAwJiYoaS5lbnZNYXA9bih0LmVudk1hcCkpLHQuZW52TWFwSW50ZW5zaXR5IT09dm9pZCAwJiYoaS5lbnZNYXBJbnRlbnNpdHk9dC5lbnZNYXBJbnRlbnNpdHkpLHQucmVmbGVjdGl2aXR5IT09dm9pZCAwJiYoaS5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHkpLHQucmVmcmFjdGlvblJhdGlvIT09dm9pZCAwJiYoaS5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8pLHQubGlnaHRNYXAhPT12b2lkIDAmJihpLmxpZ2h0TWFwPW4odC5saWdodE1hcCkpLHQubGlnaHRNYXBJbnRlbnNpdHkhPT12b2lkIDAmJihpLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHkpLHQuYW9NYXAhPT12b2lkIDAmJihpLmFvTWFwPW4odC5hb01hcCkpLHQuYW9NYXBJbnRlbnNpdHkhPT12b2lkIDAmJihpLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHkpLHQuZ3JhZGllbnRNYXAhPT12b2lkIDAmJihpLmdyYWRpZW50TWFwPW4odC5ncmFkaWVudE1hcCkpLHQuY2xlYXJjb2F0TWFwIT09dm9pZCAwJiYoaS5jbGVhcmNvYXRNYXA9bih0LmNsZWFyY29hdE1hcCkpLHQuY2xlYXJjb2F0Um91Z2huZXNzTWFwIT09dm9pZCAwJiYoaS5jbGVhcmNvYXRSb3VnaG5lc3NNYXA9bih0LmNsZWFyY29hdFJvdWdobmVzc01hcCkpLHQuY2xlYXJjb2F0Tm9ybWFsTWFwIT09dm9pZCAwJiYoaS5jbGVhcmNvYXROb3JtYWxNYXA9bih0LmNsZWFyY29hdE5vcm1hbE1hcCkpLHQuY2xlYXJjb2F0Tm9ybWFsU2NhbGUhPT12b2lkIDAmJihpLmNsZWFyY29hdE5vcm1hbFNjYWxlPW5ldyBMdCgpLmZyb21BcnJheSh0LmNsZWFyY29hdE5vcm1hbFNjYWxlKSksdC50cmFuc21pc3Npb25NYXAhPT12b2lkIDAmJihpLnRyYW5zbWlzc2lvbk1hcD1uKHQudHJhbnNtaXNzaW9uTWFwKSksdC50aGlja25lc3NNYXAhPT12b2lkIDAmJihpLnRoaWNrbmVzc01hcD1uKHQudGhpY2tuZXNzTWFwKSksdC5zaGVlbkNvbG9yTWFwIT09dm9pZCAwJiYoaS5zaGVlbkNvbG9yTWFwPW4odC5zaGVlbkNvbG9yTWFwKSksdC5zaGVlblJvdWdobmVzc01hcCE9PXZvaWQgMCYmKGkuc2hlZW5Sb3VnaG5lc3NNYXA9bih0LnNoZWVuUm91Z2huZXNzTWFwKSksaX1zZXRUZXh0dXJlcyh0KXtyZXR1cm4gdGhpcy50ZXh0dXJlcz10LHRoaXN9fSxkTT1jbGFzc3tzdGF0aWMgZGVjb2RlVGV4dCh0KXtpZih0eXBlb2YgVGV4dERlY29kZXIhPSJ1bmRlZmluZWQiKXJldHVybiBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUodCk7bGV0IHI9IiI7Zm9yKGxldCBuPTAsaT10Lmxlbmd0aDtuPGk7bisrKXIrPVN0cmluZy5mcm9tQ2hhckNvZGUodFtuXSk7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKHIpKX1jYXRjaChuKXtyZXR1cm4gcn19c3RhdGljIGV4dHJhY3RVcmxCYXNlKHQpe2xldCByPXQubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4gcj09PS0xPyIuLyI6dC5zdWJzdHIoMCxyKzEpfXN0YXRpYyByZXNvbHZlVVJMKHQscil7cmV0dXJuIHR5cGVvZiB0IT0ic3RyaW5nInx8dD09PSIiPyIiOigvXmh0dHBzPzpcL1wvL2kudGVzdChyKSYmL15cLy8udGVzdCh0KSYmKHI9ci5yZXBsYWNlKC8oXmh0dHBzPzpcL1wvW15cL10rKS4qL2ksIiQxIikpLC9eKGh0dHBzPzopP1wvXC8vaS50ZXN0KHQpfHwvXmRhdGE6LiosLiokL2kudGVzdCh0KXx8L15ibG9iOi4qJC9pLnRlc3QodCk/dDpyK3QpfX0sTjY9Y2xhc3MgZXh0ZW5kcyBQZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSIsdGhpcy5pbnN0YW5jZUNvdW50PTEvMH1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuaW5zdGFuY2VDb3VudD10Lmluc3RhbmNlQ291bnQsdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKHRoaXMpO3JldHVybiB0Lmluc3RhbmNlQ291bnQ9dGhpcy5pbnN0YW5jZUNvdW50LHQuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeT0hMCx0fX07TjYucHJvdG90eXBlLmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnk9ITA7dmFyIFJVPWNsYXNzIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LHIsbixpKXtsZXQgbz10aGlzLGE9bmV3IEpjKG8ubWFuYWdlcik7YS5zZXRQYXRoKG8ucGF0aCksYS5zZXRSZXF1ZXN0SGVhZGVyKG8ucmVxdWVzdEhlYWRlciksYS5zZXRXaXRoQ3JlZGVudGlhbHMoby53aXRoQ3JlZGVudGlhbHMpLGEubG9hZCh0LGZ1bmN0aW9uKHMpe3RyeXtyKG8ucGFyc2UoSlNPTi5wYXJzZShzKSkpfWNhdGNoKGwpe2k/aShsKTpjb25zb2xlLmVycm9yKGwpLG8ubWFuYWdlci5pdGVtRXJyb3IodCl9fSxuLGkpfXBhcnNlKHQpe2xldCByPXt9LG49e307ZnVuY3Rpb24gaShwLGQpe2lmKHJbZF0hPT12b2lkIDApcmV0dXJuIHJbZF07bGV0IF89cC5pbnRlcmxlYXZlZEJ1ZmZlcnNbZF0seT1vKHAsXy5idWZmZXIpLHg9QjMoXy50eXBlLHkpLGI9bmV3IHJtKHgsXy5zdHJpZGUpO3JldHVybiBiLnV1aWQ9Xy51dWlkLHJbZF09YixifWZ1bmN0aW9uIG8ocCxkKXtpZihuW2RdIT09dm9pZCAwKXJldHVybiBuW2RdO2xldCBfPXAuYXJyYXlCdWZmZXJzW2RdLHk9bmV3IFVpbnQzMkFycmF5KF8pLmJ1ZmZlcjtyZXR1cm4gbltkXT15LHl9bGV0IGE9dC5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5P25ldyBONjpuZXcgUGUscz10LmRhdGEuaW5kZXg7aWYocyE9PXZvaWQgMCl7bGV0IHA9QjMocy50eXBlLHMuYXJyYXkpO2Euc2V0SW5kZXgobmV3IEplKHAsMSkpfWxldCBsPXQuZGF0YS5hdHRyaWJ1dGVzO2ZvcihsZXQgcCBpbiBsKXtsZXQgZD1sW3BdLGc7aWYoZC5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlKXtsZXQgXz1pKHQuZGF0YSxkLmRhdGEpO2c9bmV3IGVwKF8sZC5pdGVtU2l6ZSxkLm9mZnNldCxkLm5vcm1hbGl6ZWQpfWVsc2V7bGV0IF89QjMoZC50eXBlLGQuYXJyYXkpLHk9ZC5pc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZT9ubTpKZTtnPW5ldyB5KF8sZC5pdGVtU2l6ZSxkLm5vcm1hbGl6ZWQpfWQubmFtZSE9PXZvaWQgMCYmKGcubmFtZT1kLm5hbWUpLGQudXNhZ2UhPT12b2lkIDAmJmcuc2V0VXNhZ2UoZC51c2FnZSksZC51cGRhdGVSYW5nZSE9PXZvaWQgMCYmKGcudXBkYXRlUmFuZ2Uub2Zmc2V0PWQudXBkYXRlUmFuZ2Uub2Zmc2V0LGcudXBkYXRlUmFuZ2UuY291bnQ9ZC51cGRhdGVSYW5nZS5jb3VudCksYS5zZXRBdHRyaWJ1dGUocCxnKX1sZXQgYz10LmRhdGEubW9ycGhBdHRyaWJ1dGVzO2lmKGMpZm9yKGxldCBwIGluIGMpe2xldCBkPWNbcF0sZz1bXTtmb3IobGV0IF89MCx5PWQubGVuZ3RoO188eTtfKyspe2xldCB4PWRbX10sYjtpZih4LmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUpe2xldCBTPWkodC5kYXRhLHguZGF0YSk7Yj1uZXcgZXAoUyx4Lml0ZW1TaXplLHgub2Zmc2V0LHgubm9ybWFsaXplZCl9ZWxzZXtsZXQgUz1CMyh4LnR5cGUseC5hcnJheSk7Yj1uZXcgSmUoUyx4Lml0ZW1TaXplLHgubm9ybWFsaXplZCl9eC5uYW1lIT09dm9pZCAwJiYoYi5uYW1lPXgubmFtZSksZy5wdXNoKGIpfWEubW9ycGhBdHRyaWJ1dGVzW3BdPWd9dC5kYXRhLm1vcnBoVGFyZ2V0c1JlbGF0aXZlJiYoYS5tb3JwaFRhcmdldHNSZWxhdGl2ZT0hMCk7bGV0IGg9dC5kYXRhLmdyb3Vwc3x8dC5kYXRhLmRyYXdjYWxsc3x8dC5kYXRhLm9mZnNldHM7aWYoaCE9PXZvaWQgMClmb3IobGV0IHA9MCxkPWgubGVuZ3RoO3AhPT1kOysrcCl7bGV0IGc9aFtwXTthLmFkZEdyb3VwKGcuc3RhcnQsZy5jb3VudCxnLm1hdGVyaWFsSW5kZXgpfWxldCBmPXQuZGF0YS5ib3VuZGluZ1NwaGVyZTtpZihmIT09dm9pZCAwKXtsZXQgcD1uZXcgajtmLmNlbnRlciE9PXZvaWQgMCYmcC5mcm9tQXJyYXkoZi5jZW50ZXIpLGEuYm91bmRpbmdTcGhlcmU9bmV3IEpmKHAsZi5yYWRpdXMpfXJldHVybiB0Lm5hbWUmJihhLm5hbWU9dC5uYW1lKSx0LnVzZXJEYXRhJiYoYS51c2VyRGF0YT10LnVzZXJEYXRhKSxhfX0sc2h0PWNsYXNzIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LHIsbixpKXtsZXQgbz10aGlzLGE9dGhpcy5wYXRoPT09IiI/ZE0uZXh0cmFjdFVybEJhc2UodCk6dGhpcy5wYXRoO3RoaXMucmVzb3VyY2VQYXRoPXRoaXMucmVzb3VyY2VQYXRofHxhO2xldCBzPW5ldyBKYyh0aGlzLm1hbmFnZXIpO3Muc2V0UGF0aCh0aGlzLnBhdGgpLHMuc2V0UmVxdWVzdEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXIpLHMuc2V0V2l0aENyZWRlbnRpYWxzKHRoaXMud2l0aENyZWRlbnRpYWxzKSxzLmxvYWQodCxmdW5jdGlvbihsKXtsZXQgYz1udWxsO3RyeXtjPUpTT04ucGFyc2UobCl9Y2F0Y2goaCl7aSE9PXZvaWQgMCYmaShoKSxjb25zb2xlLmVycm9yKCJUSFJFRTpPYmplY3RMb2FkZXI6IENhbid0IHBhcnNlICIrdCsiLiIsaC5tZXNzYWdlKTtyZXR1cm59bGV0IHU9Yy5tZXRhZGF0YTtpZih1PT09dm9pZCAwfHx1LnR5cGU9PT12b2lkIDB8fHUudHlwZS50b0xvd2VyQ2FzZSgpPT09Imdlb21ldHJ5Iil7Y29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0TG9hZGVyOiBDYW4ndCBsb2FkICIrdCk7cmV0dXJufW8ucGFyc2UoYyxyKX0sbixpKX1sb2FkQXN5bmModCxyKXtyZXR1cm4gUmkodGhpcyxudWxsLGZ1bmN0aW9uKigpe2xldCBuPXRoaXMsaT10aGlzLnBhdGg9PT0iIj9kTS5leHRyYWN0VXJsQmFzZSh0KTp0aGlzLnBhdGg7dGhpcy5yZXNvdXJjZVBhdGg9dGhpcy5yZXNvdXJjZVBhdGh8fGk7bGV0IG89bmV3IEpjKHRoaXMubWFuYWdlcik7by5zZXRQYXRoKHRoaXMucGF0aCksby5zZXRSZXF1ZXN0SGVhZGVyKHRoaXMucmVxdWVzdEhlYWRlciksby5zZXRXaXRoQ3JlZGVudGlhbHModGhpcy53aXRoQ3JlZGVudGlhbHMpO2xldCBhPXlpZWxkIG8ubG9hZEFzeW5jKHQscikscz1KU09OLnBhcnNlKGEpLGw9cy5tZXRhZGF0YTtpZihsPT09dm9pZCAwfHxsLnR5cGU9PT12b2lkIDB8fGwudHlwZS50b0xvd2VyQ2FzZSgpPT09Imdlb21ldHJ5Iil0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLk9iamVjdExvYWRlcjogQ2FuJ3QgbG9hZCAiK3QpO3JldHVybiB5aWVsZCBuLnBhcnNlQXN5bmMocyl9KX1wYXJzZSh0LHIpe2xldCBuPXRoaXMucGFyc2VBbmltYXRpb25zKHQuYW5pbWF0aW9ucyksaT10aGlzLnBhcnNlU2hhcGVzKHQuc2hhcGVzKSxvPXRoaXMucGFyc2VHZW9tZXRyaWVzKHQuZ2VvbWV0cmllcyxpKSxhPXRoaXMucGFyc2VJbWFnZXModC5pbWFnZXMsZnVuY3Rpb24oKXtyIT09dm9pZCAwJiZyKGMpfSkscz10aGlzLnBhcnNlVGV4dHVyZXModC50ZXh0dXJlcyxhKSxsPXRoaXMucGFyc2VNYXRlcmlhbHModC5tYXRlcmlhbHMscyksYz10aGlzLnBhcnNlT2JqZWN0KHQub2JqZWN0LG8sbCxzLG4pLHU9dGhpcy5wYXJzZVNrZWxldG9ucyh0LnNrZWxldG9ucyxjKTtpZih0aGlzLmJpbmRTa2VsZXRvbnMoYyx1KSxyIT09dm9pZCAwKXtsZXQgaD0hMTtmb3IobGV0IGYgaW4gYSlpZihhW2ZdaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50KXtoPSEwO2JyZWFrfWg9PT0hMSYmcihjKX1yZXR1cm4gY31wYXJzZUFzeW5jKHQpe3JldHVybiBSaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7bGV0IHI9dGhpcy5wYXJzZUFuaW1hdGlvbnModC5hbmltYXRpb25zKSxuPXRoaXMucGFyc2VTaGFwZXModC5zaGFwZXMpLGk9dGhpcy5wYXJzZUdlb21ldHJpZXModC5nZW9tZXRyaWVzLG4pLG89eWllbGQgdGhpcy5wYXJzZUltYWdlc0FzeW5jKHQuaW1hZ2VzKSxhPXRoaXMucGFyc2VUZXh0dXJlcyh0LnRleHR1cmVzLG8pLHM9dGhpcy5wYXJzZU1hdGVyaWFscyh0Lm1hdGVyaWFscyxhKSxsPXRoaXMucGFyc2VPYmplY3QodC5vYmplY3QsaSxzLGEsciksYz10aGlzLnBhcnNlU2tlbGV0b25zKHQuc2tlbGV0b25zLGwpO3JldHVybiB0aGlzLmJpbmRTa2VsZXRvbnMobCxjKSxsfSl9cGFyc2VTaGFwZXModCl7bGV0IHI9e307aWYodCE9PXZvaWQgMClmb3IobGV0IG49MCxpPXQubGVuZ3RoO248aTtuKyspe2xldCBvPW5ldyBLYygpLmZyb21KU09OKHRbbl0pO3Jbby51dWlkXT1vfXJldHVybiByfXBhcnNlU2tlbGV0b25zKHQscil7bGV0IG49e30saT17fTtpZihyLnRyYXZlcnNlKGZ1bmN0aW9uKG8pe28uaXNCb25lJiYoaVtvLnV1aWRdPW8pfSksdCE9PXZvaWQgMClmb3IobGV0IG89MCxhPXQubGVuZ3RoO288YTtvKyspe2xldCBzPW5ldyBsTSgpLmZyb21KU09OKHRbb10saSk7bltzLnV1aWRdPXN9cmV0dXJuIG59cGFyc2VHZW9tZXRyaWVzKHQscil7bGV0IG49e307aWYodCE9PXZvaWQgMCl7bGV0IGk9bmV3IFJVO2ZvcihsZXQgbz0wLGE9dC5sZW5ndGg7bzxhO28rKyl7bGV0IHMsbD10W29dO3N3aXRjaChsLnR5cGUpe2Nhc2UiQnVmZmVyR2VvbWV0cnkiOmNhc2UiSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkiOnM9aS5wYXJzZShsKTticmVhaztjYXNlIkdlb21ldHJ5Ijpjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3RMb2FkZXI6IFRoZSBsZWdhY3kgR2VvbWV0cnkgdHlwZSBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiIpO2JyZWFrO2RlZmF1bHQ6bC50eXBlIGluIHZoZT9zPXZoZVtsLnR5cGVdLmZyb21KU09OKGwscik6Y29uc29sZS53YXJuKGBUSFJFRS5PYmplY3RMb2FkZXI6IFVuc3VwcG9ydGVkIGdlb21ldHJ5IHR5cGUgIiR7bC50eXBlfSJgKX1zLnV1aWQ9bC51dWlkLGwubmFtZSE9PXZvaWQgMCYmKHMubmFtZT1sLm5hbWUpLHMuaXNCdWZmZXJHZW9tZXRyeT09PSEwJiZsLnVzZXJEYXRhIT09dm9pZCAwJiYocy51c2VyRGF0YT1sLnVzZXJEYXRhKSxuW2wudXVpZF09c319cmV0dXJuIG59cGFyc2VNYXRlcmlhbHModCxyKXtsZXQgbj17fSxpPXt9O2lmKHQhPT12b2lkIDApe2xldCBvPW5ldyBrVTtvLnNldFRleHR1cmVzKHIpO2ZvcihsZXQgYT0wLHM9dC5sZW5ndGg7YTxzO2ErKyl7bGV0IGw9dFthXTtpZihsLnR5cGU9PT0iTXVsdGlNYXRlcmlhbCIpe2xldCBjPVtdO2ZvcihsZXQgdT0wO3U8bC5tYXRlcmlhbHMubGVuZ3RoO3UrKyl7bGV0IGg9bC5tYXRlcmlhbHNbdV07bltoLnV1aWRdPT09dm9pZCAwJiYobltoLnV1aWRdPW8ucGFyc2UoaCkpLGMucHVzaChuW2gudXVpZF0pfWlbbC51dWlkXT1jfWVsc2UgbltsLnV1aWRdPT09dm9pZCAwJiYobltsLnV1aWRdPW8ucGFyc2UobCkpLGlbbC51dWlkXT1uW2wudXVpZF19fXJldHVybiBpfXBhcnNlQW5pbWF0aW9ucyh0KXtsZXQgcj17fTtpZih0IT09dm9pZCAwKWZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXtsZXQgaT10W25dLG89dHgucGFyc2UoaSk7cltvLnV1aWRdPW99cmV0dXJuIHJ9cGFyc2VJbWFnZXModCxyKXtsZXQgbj10aGlzLGk9e30sbztmdW5jdGlvbiBhKGwpe3JldHVybiBuLm1hbmFnZXIuaXRlbVN0YXJ0KGwpLG8ubG9hZChsLGZ1bmN0aW9uKCl7bi5tYW5hZ2VyLml0ZW1FbmQobCl9LHZvaWQgMCxmdW5jdGlvbigpe24ubWFuYWdlci5pdGVtRXJyb3IobCksbi5tYW5hZ2VyLml0ZW1FbmQobCl9KX1mdW5jdGlvbiBzKGwpe2lmKHR5cGVvZiBsPT0ic3RyaW5nIil7bGV0IGM9bCx1PS9eKFwvXC8pfChbYS16XSs6KFwvXC8pPykvaS50ZXN0KGMpP2M6bi5yZXNvdXJjZVBhdGgrYztyZXR1cm4gYSh1KX1lbHNlIHJldHVybiBsLmRhdGE/e2RhdGE6QjMobC50eXBlLGwuZGF0YSksd2lkdGg6bC53aWR0aCxoZWlnaHQ6bC5oZWlnaHR9Om51bGx9aWYodCE9PXZvaWQgMCYmdC5sZW5ndGg+MCl7bGV0IGw9bmV3IEU2KHIpO289bmV3IHJ4KGwpLG8uc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7Zm9yKGxldCBjPTAsdT10Lmxlbmd0aDtjPHU7YysrKXtsZXQgaD10W2NdLGY9aC51cmw7aWYoQXJyYXkuaXNBcnJheShmKSl7aVtoLnV1aWRdPVtdO2ZvcihsZXQgcD0wLGQ9Zi5sZW5ndGg7cDxkO3ArKyl7bGV0IGc9ZltwXSxfPXMoZyk7XyE9PW51bGwmJihfIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudD9pW2gudXVpZF0ucHVzaChfKTppW2gudXVpZF0ucHVzaChuZXcgUWQoXy5kYXRhLF8ud2lkdGgsXy5oZWlnaHQpKSl9fWVsc2V7bGV0IHA9cyhoLnVybCk7cCE9PW51bGwmJihpW2gudXVpZF09cCl9fX1yZXR1cm4gaX1wYXJzZUltYWdlc0FzeW5jKHQpe3JldHVybiBSaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7bGV0IHI9dGhpcyxuPXt9LGk7ZnVuY3Rpb24gbyhhKXtyZXR1cm4gUmkodGhpcyxudWxsLGZ1bmN0aW9uKigpe2lmKHR5cGVvZiBhPT0ic3RyaW5nIil7bGV0IHM9YSxsPS9eKFwvXC8pfChbYS16XSs6KFwvXC8pPykvaS50ZXN0KHMpP3M6ci5yZXNvdXJjZVBhdGgrcztyZXR1cm4geWllbGQgaS5sb2FkQXN5bmMobCl9ZWxzZSByZXR1cm4gYS5kYXRhP3tkYXRhOkIzKGEudHlwZSxhLmRhdGEpLHdpZHRoOmEud2lkdGgsaGVpZ2h0OmEuaGVpZ2h0fTpudWxsfSl9aWYodCE9PXZvaWQgMCYmdC5sZW5ndGg+MCl7aT1uZXcgcngodGhpcy5tYW5hZ2VyKSxpLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pO2ZvcihsZXQgYT0wLHM9dC5sZW5ndGg7YTxzO2ErKyl7bGV0IGw9dFthXSxjPWwudXJsO2lmKEFycmF5LmlzQXJyYXkoYykpe25bbC51dWlkXT1bXTtmb3IobGV0IHU9MCxoPWMubGVuZ3RoO3U8aDt1Kyspe2xldCBmPWNbdV0scD15aWVsZCBvKGYpO3AhPT1udWxsJiYocCBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQ/bltsLnV1aWRdLnB1c2gocCk6bltsLnV1aWRdLnB1c2gobmV3IFFkKHAuZGF0YSxwLndpZHRoLHAuaGVpZ2h0KSkpfX1lbHNle2xldCB1PXlpZWxkIG8obC51cmwpO3UhPT1udWxsJiYobltsLnV1aWRdPXUpfX19cmV0dXJuIG59KX1wYXJzZVRleHR1cmVzKHQscil7ZnVuY3Rpb24gbihvLGEpe3JldHVybiB0eXBlb2Ygbz09Im51bWJlciI/bzooY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3RMb2FkZXIucGFyc2VUZXh0dXJlOiBDb25zdGFudCBzaG91bGQgYmUgaW4gbnVtZXJpYyBmb3JtLiIsbyksYVtvXSl9bGV0IGk9e307aWYodCE9PXZvaWQgMClmb3IobGV0IG89MCxhPXQubGVuZ3RoO288YTtvKyspe2xldCBzPXRbb107cy5pbWFnZT09PXZvaWQgMCYmY29uc29sZS53YXJuKCdUSFJFRS5PYmplY3RMb2FkZXI6IE5vICJpbWFnZSIgc3BlY2lmaWVkIGZvcicscy51dWlkKSxyW3MuaW1hZ2VdPT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlcjogVW5kZWZpbmVkIGltYWdlIixzLmltYWdlKTtsZXQgbCxjPXJbcy5pbWFnZV07QXJyYXkuaXNBcnJheShjKT8obD1uZXcgVjAoYyksYy5sZW5ndGg9PT02JiYobC5uZWVkc1VwZGF0ZT0hMCkpOihjJiZjLmRhdGE/bD1uZXcgUWQoYy5kYXRhLGMud2lkdGgsYy5oZWlnaHQpOmw9bmV3IHZpKGMpLGMmJihsLm5lZWRzVXBkYXRlPSEwKSksbC51dWlkPXMudXVpZCxzLm5hbWUhPT12b2lkIDAmJihsLm5hbWU9cy5uYW1lKSxzLm1hcHBpbmchPT12b2lkIDAmJihsLm1hcHBpbmc9bihzLm1hcHBpbmcscDByKSkscy5vZmZzZXQhPT12b2lkIDAmJmwub2Zmc2V0LmZyb21BcnJheShzLm9mZnNldCkscy5yZXBlYXQhPT12b2lkIDAmJmwucmVwZWF0LmZyb21BcnJheShzLnJlcGVhdCkscy5jZW50ZXIhPT12b2lkIDAmJmwuY2VudGVyLmZyb21BcnJheShzLmNlbnRlcikscy5yb3RhdGlvbiE9PXZvaWQgMCYmKGwucm90YXRpb249cy5yb3RhdGlvbikscy53cmFwIT09dm9pZCAwJiYobC53cmFwUz1uKHMud3JhcFswXSxNaGUpLGwud3JhcFQ9bihzLndyYXBbMV0sTWhlKSkscy5mb3JtYXQhPT12b2lkIDAmJihsLmZvcm1hdD1zLmZvcm1hdCkscy50eXBlIT09dm9pZCAwJiYobC50eXBlPXMudHlwZSkscy5lbmNvZGluZyE9PXZvaWQgMCYmKGwuZW5jb2Rpbmc9cy5lbmNvZGluZykscy5taW5GaWx0ZXIhPT12b2lkIDAmJihsLm1pbkZpbHRlcj1uKHMubWluRmlsdGVyLEVoZSkpLHMubWFnRmlsdGVyIT09dm9pZCAwJiYobC5tYWdGaWx0ZXI9bihzLm1hZ0ZpbHRlcixFaGUpKSxzLmFuaXNvdHJvcHkhPT12b2lkIDAmJihsLmFuaXNvdHJvcHk9cy5hbmlzb3Ryb3B5KSxzLmZsaXBZIT09dm9pZCAwJiYobC5mbGlwWT1zLmZsaXBZKSxzLnByZW11bHRpcGx5QWxwaGEhPT12b2lkIDAmJihsLnByZW11bHRpcGx5QWxwaGE9cy5wcmVtdWx0aXBseUFscGhhKSxzLnVucGFja0FsaWdubWVudCE9PXZvaWQgMCYmKGwudW5wYWNrQWxpZ25tZW50PXMudW5wYWNrQWxpZ25tZW50KSxzLnVzZXJEYXRhIT09dm9pZCAwJiYobC51c2VyRGF0YT1zLnVzZXJEYXRhKSxpW3MudXVpZF09bH1yZXR1cm4gaX1wYXJzZU9iamVjdCh0LHIsbixpLG8pe2xldCBhO2Z1bmN0aW9uIHMoZil7cmV0dXJuIHJbZl09PT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgZ2VvbWV0cnkiLGYpLHJbZl19ZnVuY3Rpb24gbChmKXtpZihmIT09dm9pZCAwKXtpZihBcnJheS5pc0FycmF5KGYpKXtsZXQgcD1bXTtmb3IobGV0IGQ9MCxnPWYubGVuZ3RoO2Q8ZztkKyspe2xldCBfPWZbZF07bltfXT09PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3RMb2FkZXI6IFVuZGVmaW5lZCBtYXRlcmlhbCIsXykscC5wdXNoKG5bX10pfXJldHVybiBwfXJldHVybiBuW2ZdPT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlcjogVW5kZWZpbmVkIG1hdGVyaWFsIixmKSxuW2ZdfX1mdW5jdGlvbiBjKGYpe3JldHVybiBpW2ZdPT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlcjogVW5kZWZpbmVkIHRleHR1cmUiLGYpLGlbZl19bGV0IHUsaDtzd2l0Y2godC50eXBlKXtjYXNlIlNjZW5lIjphPW5ldyBHMCx0LmJhY2tncm91bmQhPT12b2lkIDAmJihOdW1iZXIuaXNJbnRlZ2VyKHQuYmFja2dyb3VuZCk/YS5iYWNrZ3JvdW5kPW5ldyBuZSh0LmJhY2tncm91bmQpOmEuYmFja2dyb3VuZD1jKHQuYmFja2dyb3VuZCkpLHQuZW52aXJvbm1lbnQhPT12b2lkIDAmJihhLmVudmlyb25tZW50PWModC5lbnZpcm9ubWVudCkpLHQuZm9nIT09dm9pZCAwJiYodC5mb2cudHlwZT09PSJGb2ciP2EuZm9nPW5ldyBGMSh0LmZvZy5jb2xvcix0LmZvZy5uZWFyLHQuZm9nLmZhcik6dC5mb2cudHlwZT09PSJGb2dFeHAyIiYmKGEuZm9nPW5ldyB6MSh0LmZvZy5jb2xvcix0LmZvZy5kZW5zaXR5KSkpO2JyZWFrO2Nhc2UiUGVyc3BlY3RpdmVDYW1lcmEiOmE9bmV3IFVpKHQuZm92LHQuYXNwZWN0LHQubmVhcix0LmZhciksdC5mb2N1cyE9PXZvaWQgMCYmKGEuZm9jdXM9dC5mb2N1cyksdC56b29tIT09dm9pZCAwJiYoYS56b29tPXQuem9vbSksdC5maWxtR2F1Z2UhPT12b2lkIDAmJihhLmZpbG1HYXVnZT10LmZpbG1HYXVnZSksdC5maWxtT2Zmc2V0IT09dm9pZCAwJiYoYS5maWxtT2Zmc2V0PXQuZmlsbU9mZnNldCksdC52aWV3IT09dm9pZCAwJiYoYS52aWV3PU9iamVjdC5hc3NpZ24oe30sdC52aWV3KSk7YnJlYWs7Y2FzZSJPcnRob2dyYXBoaWNDYW1lcmEiOmE9bmV3IE8xKHQubGVmdCx0LnJpZ2h0LHQudG9wLHQuYm90dG9tLHQubmVhcix0LmZhciksdC56b29tIT09dm9pZCAwJiYoYS56b29tPXQuem9vbSksdC52aWV3IT09dm9pZCAwJiYoYS52aWV3PU9iamVjdC5hc3NpZ24oe30sdC52aWV3KSk7YnJlYWs7Y2FzZSJBbWJpZW50TGlnaHQiOmE9bmV3IEw2KHQuY29sb3IsdC5pbnRlbnNpdHkpO2JyZWFrO2Nhc2UiRGlyZWN0aW9uYWxMaWdodCI6YT1uZXcgSTYodC5jb2xvcix0LmludGVuc2l0eSk7YnJlYWs7Y2FzZSJQb2ludExpZ2h0IjphPW5ldyBQNih0LmNvbG9yLHQuaW50ZW5zaXR5LHQuZGlzdGFuY2UsdC5kZWNheSk7YnJlYWs7Y2FzZSJSZWN0QXJlYUxpZ2h0IjphPW5ldyBrNih0LmNvbG9yLHQuaW50ZW5zaXR5LHQud2lkdGgsdC5oZWlnaHQpO2JyZWFrO2Nhc2UiU3BvdExpZ2h0IjphPW5ldyBBNih0LmNvbG9yLHQuaW50ZW5zaXR5LHQuZGlzdGFuY2UsdC5hbmdsZSx0LnBlbnVtYnJhLHQuZGVjYXkpO2JyZWFrO2Nhc2UiSGVtaXNwaGVyZUxpZ2h0IjphPW5ldyBUNih0LmNvbG9yLHQuZ3JvdW5kQ29sb3IsdC5pbnRlbnNpdHkpO2JyZWFrO2Nhc2UiTGlnaHRQcm9iZSI6YT1uZXcgbngoKS5mcm9tSlNPTih0KTticmVhaztjYXNlIlNraW5uZWRNZXNoIjp1PXModC5nZW9tZXRyeSksaD1sKHQubWF0ZXJpYWwpLGE9bmV3IGFNKHUsaCksdC5iaW5kTW9kZSE9PXZvaWQgMCYmKGEuYmluZE1vZGU9dC5iaW5kTW9kZSksdC5iaW5kTWF0cml4IT09dm9pZCAwJiZhLmJpbmRNYXRyaXguZnJvbUFycmF5KHQuYmluZE1hdHJpeCksdC5za2VsZXRvbiE9PXZvaWQgMCYmKGEuc2tlbGV0b249dC5za2VsZXRvbik7YnJlYWs7Y2FzZSJNZXNoIjp1PXModC5nZW9tZXRyeSksaD1sKHQubWF0ZXJpYWwpLGE9bmV3IHRpKHUsaCk7YnJlYWs7Y2FzZSJJbnN0YW5jZWRNZXNoIjp1PXModC5nZW9tZXRyeSksaD1sKHQubWF0ZXJpYWwpO2xldCBmPXQuY291bnQscD10Lmluc3RhbmNlTWF0cml4LGQ9dC5pbnN0YW5jZUNvbG9yO2E9bmV3IGk2KHUsaCxmKSxhLmluc3RhbmNlTWF0cml4PW5ldyBubShuZXcgRmxvYXQzMkFycmF5KHAuYXJyYXkpLDE2KSxkIT09dm9pZCAwJiYoYS5pbnN0YW5jZUNvbG9yPW5ldyBubShuZXcgRmxvYXQzMkFycmF5KGQuYXJyYXkpLGQuaXRlbVNpemUpKTticmVhaztjYXNlIkxPRCI6YT1uZXcgX1U7YnJlYWs7Y2FzZSJMaW5lIjphPW5ldyBjaChzKHQuZ2VvbWV0cnkpLGwodC5tYXRlcmlhbCkpO2JyZWFrO2Nhc2UiTGluZUxvb3AiOmE9bmV3IG82KHModC5nZW9tZXRyeSksbCh0Lm1hdGVyaWFsKSk7YnJlYWs7Y2FzZSJMaW5lU2VnbWVudHMiOmE9bmV3IFBhKHModC5nZW9tZXRyeSksbCh0Lm1hdGVyaWFsKSk7YnJlYWs7Y2FzZSJQb2ludENsb3VkIjpjYXNlIlBvaW50cyI6YT1uZXcgb20ocyh0Lmdlb21ldHJ5KSxsKHQubWF0ZXJpYWwpKTticmVhaztjYXNlIlNwcml0ZSI6YT1uZXcgb00obCh0Lm1hdGVyaWFsKSk7YnJlYWs7Y2FzZSJHcm91cCI6YT1uZXcgJGQ7YnJlYWs7Y2FzZSJCb25lIjphPW5ldyBzTTticmVhaztkZWZhdWx0OmE9bmV3IG9yfWlmKGEudXVpZD10LnV1aWQsdC5uYW1lIT09dm9pZCAwJiYoYS5uYW1lPXQubmFtZSksdC5tYXRyaXghPT12b2lkIDA/KGEubWF0cml4LmZyb21BcnJheSh0Lm1hdHJpeCksdC5tYXRyaXhBdXRvVXBkYXRlIT09dm9pZCAwJiYoYS5tYXRyaXhBdXRvVXBkYXRlPXQubWF0cml4QXV0b1VwZGF0ZSksYS5tYXRyaXhBdXRvVXBkYXRlJiZhLm1hdHJpeC5kZWNvbXBvc2UoYS5wb3NpdGlvbixhLnF1YXRlcm5pb24sYS5zY2FsZSkpOih0LnBvc2l0aW9uIT09dm9pZCAwJiZhLnBvc2l0aW9uLmZyb21BcnJheSh0LnBvc2l0aW9uKSx0LnJvdGF0aW9uIT09dm9pZCAwJiZhLnJvdGF0aW9uLmZyb21BcnJheSh0LnJvdGF0aW9uKSx0LnF1YXRlcm5pb24hPT12b2lkIDAmJmEucXVhdGVybmlvbi5mcm9tQXJyYXkodC5xdWF0ZXJuaW9uKSx0LnNjYWxlIT09dm9pZCAwJiZhLnNjYWxlLmZyb21BcnJheSh0LnNjYWxlKSksdC5jYXN0U2hhZG93IT09dm9pZCAwJiYoYS5jYXN0U2hhZG93PXQuY2FzdFNoYWRvdyksdC5yZWNlaXZlU2hhZG93IT09dm9pZCAwJiYoYS5yZWNlaXZlU2hhZG93PXQucmVjZWl2ZVNoYWRvdyksdC5zaGFkb3cmJih0LnNoYWRvdy5iaWFzIT09dm9pZCAwJiYoYS5zaGFkb3cuYmlhcz10LnNoYWRvdy5iaWFzKSx0LnNoYWRvdy5ub3JtYWxCaWFzIT09dm9pZCAwJiYoYS5zaGFkb3cubm9ybWFsQmlhcz10LnNoYWRvdy5ub3JtYWxCaWFzKSx0LnNoYWRvdy5yYWRpdXMhPT12b2lkIDAmJihhLnNoYWRvdy5yYWRpdXM9dC5zaGFkb3cucmFkaXVzKSx0LnNoYWRvdy5tYXBTaXplIT09dm9pZCAwJiZhLnNoYWRvdy5tYXBTaXplLmZyb21BcnJheSh0LnNoYWRvdy5tYXBTaXplKSx0LnNoYWRvdy5jYW1lcmEhPT12b2lkIDAmJihhLnNoYWRvdy5jYW1lcmE9dGhpcy5wYXJzZU9iamVjdCh0LnNoYWRvdy5jYW1lcmEpKSksdC52aXNpYmxlIT09dm9pZCAwJiYoYS52aXNpYmxlPXQudmlzaWJsZSksdC5mcnVzdHVtQ3VsbGVkIT09dm9pZCAwJiYoYS5mcnVzdHVtQ3VsbGVkPXQuZnJ1c3R1bUN1bGxlZCksdC5yZW5kZXJPcmRlciE9PXZvaWQgMCYmKGEucmVuZGVyT3JkZXI9dC5yZW5kZXJPcmRlciksdC51c2VyRGF0YSE9PXZvaWQgMCYmKGEudXNlckRhdGE9dC51c2VyRGF0YSksdC5sYXllcnMhPT12b2lkIDAmJihhLmxheWVycy5tYXNrPXQubGF5ZXJzKSx0LmNoaWxkcmVuIT09dm9pZCAwKXtsZXQgZj10LmNoaWxkcmVuO2ZvcihsZXQgcD0wO3A8Zi5sZW5ndGg7cCsrKWEuYWRkKHRoaXMucGFyc2VPYmplY3QoZltwXSxyLG4saSxvKSl9aWYodC5hbmltYXRpb25zIT09dm9pZCAwKXtsZXQgZj10LmFuaW1hdGlvbnM7Zm9yKGxldCBwPTA7cDxmLmxlbmd0aDtwKyspe2xldCBkPWZbcF07YS5hbmltYXRpb25zLnB1c2gob1tkXSl9fWlmKHQudHlwZT09PSJMT0QiKXt0LmF1dG9VcGRhdGUhPT12b2lkIDAmJihhLmF1dG9VcGRhdGU9dC5hdXRvVXBkYXRlKTtsZXQgZj10LmxldmVscztmb3IobGV0IHA9MDtwPGYubGVuZ3RoO3ArKyl7bGV0IGQ9ZltwXSxnPWEuZ2V0T2JqZWN0QnlQcm9wZXJ0eSgidXVpZCIsZC5vYmplY3QpO2chPT12b2lkIDAmJmEuYWRkTGV2ZWwoZyxkLmRpc3RhbmNlKX19cmV0dXJuIGF9YmluZFNrZWxldG9ucyh0LHIpe09iamVjdC5rZXlzKHIpLmxlbmd0aCE9PTAmJnQudHJhdmVyc2UoZnVuY3Rpb24obil7aWYobi5pc1NraW5uZWRNZXNoPT09ITAmJm4uc2tlbGV0b24hPT12b2lkIDApe2xldCBpPXJbbi5za2VsZXRvbl07aT09PXZvaWQgMD9jb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlcjogTm8gc2tlbGV0b24gZm91bmQgd2l0aCBVVUlEOiIsbi5za2VsZXRvbik6bi5iaW5kKGksbi5iaW5kTWF0cml4KX19KX1zZXRUZXh0dXJlUGF0aCh0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3RMb2FkZXI6IC5zZXRUZXh0dXJlUGF0aCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldFJlc291cmNlUGF0aCgpLiIpLHRoaXMuc2V0UmVzb3VyY2VQYXRoKHQpfX0scDByPXtVVk1hcHBpbmc6WFUsQ3ViZVJlZmxlY3Rpb25NYXBwaW5nOml4LEN1YmVSZWZyYWN0aW9uTWFwcGluZzpveCxFcXVpcmVjdGFuZ3VsYXJSZWZsZWN0aW9uTWFwcGluZzpZUCxFcXVpcmVjdGFuZ3VsYXJSZWZyYWN0aW9uTWFwcGluZzpqUCxDdWJlVVZSZWZsZWN0aW9uTWFwcGluZzp4TSxDdWJlVVZSZWZyYWN0aW9uTWFwcGluZzp6Nn0sTWhlPXtSZXBlYXRXcmFwcGluZzpYUCxDbGFtcFRvRWRnZVdyYXBwaW5nOkpvLE1pcnJvcmVkUmVwZWF0V3JhcHBpbmc6JFB9LEVoZT17TmVhcmVzdEZpbHRlcjpMaSxOZWFyZXN0TWlwbWFwTmVhcmVzdEZpbHRlcjpvVSxOZWFyZXN0TWlwbWFwTGluZWFyRmlsdGVyOmFVLExpbmVhckZpbHRlcjppaSxMaW5lYXJNaXBtYXBOZWFyZXN0RmlsdGVyOkxodCxMaW5lYXJNaXBtYXBMaW5lYXJGaWx0ZXI6YXh9LE5VPWNsYXNzIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdHlwZW9mIGNyZWF0ZUltYWdlQml0bWFwPT0idW5kZWZpbmVkIiYmY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZUJpdG1hcExvYWRlcjogY3JlYXRlSW1hZ2VCaXRtYXAoKSBub3Qgc3VwcG9ydGVkLiIpLHR5cGVvZiBmZXRjaD09InVuZGVmaW5lZCImJmNvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VCaXRtYXBMb2FkZXI6IGZldGNoKCkgbm90IHN1cHBvcnRlZC4iKSx0aGlzLm9wdGlvbnM9e3ByZW11bHRpcGx5QWxwaGE6Im5vbmUifX1zZXRPcHRpb25zKHQpe3JldHVybiB0aGlzLm9wdGlvbnM9dCx0aGlzfWxvYWQodCxyLG4saSl7dD09PXZvaWQgMCYmKHQ9IiIpLHRoaXMucGF0aCE9PXZvaWQgMCYmKHQ9dGhpcy5wYXRoK3QpLHQ9dGhpcy5tYW5hZ2VyLnJlc29sdmVVUkwodCk7bGV0IG89dGhpcyxhPWV4LmdldCh0KTtpZihhIT09dm9pZCAwKXJldHVybiBvLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtyJiZyKGEpLG8ubWFuYWdlci5pdGVtRW5kKHQpfSwwKSxhO2xldCBzPXt9O3MuY3JlZGVudGlhbHM9dGhpcy5jcm9zc09yaWdpbj09PSJhbm9ueW1vdXMiPyJzYW1lLW9yaWdpbiI6ImluY2x1ZGUiLHMuaGVhZGVycz10aGlzLnJlcXVlc3RIZWFkZXIsZmV0Y2godCxzKS50aGVuKGZ1bmN0aW9uKGwpe3JldHVybiBsLmJsb2IoKX0pLnRoZW4oZnVuY3Rpb24obCl7cmV0dXJuIGNyZWF0ZUltYWdlQml0bWFwKGwsT2JqZWN0LmFzc2lnbihvLm9wdGlvbnMse2NvbG9yU3BhY2VDb252ZXJzaW9uOiJub25lIn0pKX0pLnRoZW4oZnVuY3Rpb24obCl7ZXguYWRkKHQsbCksciYmcihsKSxvLm1hbmFnZXIuaXRlbUVuZCh0KX0pLmNhdGNoKGZ1bmN0aW9uKGwpe2kmJmkobCksby5tYW5hZ2VyLml0ZW1FcnJvcih0KSxvLm1hbmFnZXIuaXRlbUVuZCh0KX0pLG8ubWFuYWdlci5pdGVtU3RhcnQodCl9fTtOVS5wcm90b3R5cGUuaXNJbWFnZUJpdG1hcExvYWRlcj0hMDt2YXIgV1Ysemh0PXtnZXRDb250ZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIFdWPT09dm9pZCAwJiYoV1Y9bmV3KHdpbmRvdy5BdWRpb0NvbnRleHR8fHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHQpKSxXVn0sc2V0Q29udGV4dDpmdW5jdGlvbihlKXtXVj1lfX0sRFU9Y2xhc3MgZXh0ZW5kcyBlYXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQscixuLGkpe2xldCBvPXRoaXMsYT1uZXcgSmModGhpcy5tYW5hZ2VyKTthLnNldFJlc3BvbnNlVHlwZSgiYXJyYXlidWZmZXIiKSxhLnNldFBhdGgodGhpcy5wYXRoKSxhLnNldFJlcXVlc3RIZWFkZXIodGhpcy5yZXF1ZXN0SGVhZGVyKSxhLnNldFdpdGhDcmVkZW50aWFscyh0aGlzLndpdGhDcmVkZW50aWFscyksYS5sb2FkKHQsZnVuY3Rpb24ocyl7dHJ5e2xldCBsPXMuc2xpY2UoMCk7emh0LmdldENvbnRleHQoKS5kZWNvZGVBdWRpb0RhdGEobCxmdW5jdGlvbih1KXtyKHUpfSl9Y2F0Y2gobCl7aT9pKGwpOmNvbnNvbGUuZXJyb3IobCksby5tYW5hZ2VyLml0ZW1FcnJvcih0KX19LG4saSl9fSxPVT1jbGFzcyBleHRlbmRzIG54e2NvbnN0cnVjdG9yKHQscixuPTEpe3N1cGVyKHZvaWQgMCxuKTtsZXQgaT1uZXcgbmUoKS5zZXQodCksbz1uZXcgbmUoKS5zZXQociksYT1uZXcgaihpLnIsaS5nLGkuYikscz1uZXcgaihvLnIsby5nLG8uYiksbD1NYXRoLnNxcnQoTWF0aC5QSSksYz1sKk1hdGguc3FydCguNzUpO3RoaXMuc2guY29lZmZpY2llbnRzWzBdLmNvcHkoYSkuYWRkKHMpLm11bHRpcGx5U2NhbGFyKGwpLHRoaXMuc2guY29lZmZpY2llbnRzWzFdLmNvcHkoYSkuc3ViKHMpLm11bHRpcGx5U2NhbGFyKGMpfX07T1UucHJvdG90eXBlLmlzSGVtaXNwaGVyZUxpZ2h0UHJvYmU9ITA7dmFyIHpVPWNsYXNzIGV4dGVuZHMgbnh7Y29uc3RydWN0b3IodCxyPTEpe3N1cGVyKHZvaWQgMCxyKTtsZXQgbj1uZXcgbmUoKS5zZXQodCk7dGhpcy5zaC5jb2VmZmljaWVudHNbMF0uc2V0KG4ucixuLmcsbi5iKS5tdWx0aXBseVNjYWxhcigyKk1hdGguc3FydChNYXRoLlBJKSl9fTt6VS5wcm90b3R5cGUuaXNBbWJpZW50TGlnaHRQcm9iZT0hMDt2YXIgVGhlPW5ldyBNZSxDaGU9bmV3IE1lLHYxPW5ldyBNZSxsaHQ9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnR5cGU9IlN0ZXJlb0NhbWVyYSIsdGhpcy5hc3BlY3Q9MSx0aGlzLmV5ZVNlcD0uMDY0LHRoaXMuY2FtZXJhTD1uZXcgVWksdGhpcy5jYW1lcmFMLmxheWVycy5lbmFibGUoMSksdGhpcy5jYW1lcmFMLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5jYW1lcmFSPW5ldyBVaSx0aGlzLmNhbWVyYVIubGF5ZXJzLmVuYWJsZSgyKSx0aGlzLmNhbWVyYVIubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLl9jYWNoZT17Zm9jdXM6bnVsbCxmb3Y6bnVsbCxhc3BlY3Q6bnVsbCxuZWFyOm51bGwsZmFyOm51bGwsem9vbTpudWxsLGV5ZVNlcDpudWxsfX11cGRhdGUodCl7bGV0IHI9dGhpcy5fY2FjaGU7aWYoci5mb2N1cyE9PXQuZm9jdXN8fHIuZm92IT09dC5mb3Z8fHIuYXNwZWN0IT09dC5hc3BlY3QqdGhpcy5hc3BlY3R8fHIubmVhciE9PXQubmVhcnx8ci5mYXIhPT10LmZhcnx8ci56b29tIT09dC56b29tfHxyLmV5ZVNlcCE9PXRoaXMuZXllU2VwKXtyLmZvY3VzPXQuZm9jdXMsci5mb3Y9dC5mb3Ysci5hc3BlY3Q9dC5hc3BlY3QqdGhpcy5hc3BlY3Qsci5uZWFyPXQubmVhcixyLmZhcj10LmZhcixyLnpvb209dC56b29tLHIuZXllU2VwPXRoaXMuZXllU2VwLHYxLmNvcHkodC5wcm9qZWN0aW9uTWF0cml4KTtsZXQgaT1yLmV5ZVNlcC8yLG89aSpyLm5lYXIvci5mb2N1cyxhPXIubmVhcipNYXRoLnRhbihJMSpyLmZvdiouNSkvci56b29tLHMsbDtDaGUuZWxlbWVudHNbMTJdPS1pLFRoZS5lbGVtZW50c1sxMl09aSxzPS1hKnIuYXNwZWN0K28sbD1hKnIuYXNwZWN0K28sdjEuZWxlbWVudHNbMF09MipyLm5lYXIvKGwtcyksdjEuZWxlbWVudHNbOF09KGwrcykvKGwtcyksdGhpcy5jYW1lcmFMLnByb2plY3Rpb25NYXRyaXguY29weSh2MSkscz0tYSpyLmFzcGVjdC1vLGw9YSpyLmFzcGVjdC1vLHYxLmVsZW1lbnRzWzBdPTIqci5uZWFyLyhsLXMpLHYxLmVsZW1lbnRzWzhdPShsK3MpLyhsLXMpLHRoaXMuY2FtZXJhUi5wcm9qZWN0aW9uTWF0cml4LmNvcHkodjEpfXRoaXMuY2FtZXJhTC5tYXRyaXhXb3JsZC5jb3B5KHQubWF0cml4V29ybGQpLm11bHRpcGx5KENoZSksdGhpcy5jYW1lcmFSLm1hdHJpeFdvcmxkLmNvcHkodC5tYXRyaXhXb3JsZCkubXVsdGlwbHkoVGhlKX19LG1NPWNsYXNze2NvbnN0cnVjdG9yKHQ9ITApe3RoaXMuYXV0b1N0YXJ0PXQsdGhpcy5zdGFydFRpbWU9MCx0aGlzLm9sZFRpbWU9MCx0aGlzLmVsYXBzZWRUaW1lPTAsdGhpcy5ydW5uaW5nPSExfXN0YXJ0KCl7dGhpcy5zdGFydFRpbWU9QWhlKCksdGhpcy5vbGRUaW1lPXRoaXMuc3RhcnRUaW1lLHRoaXMuZWxhcHNlZFRpbWU9MCx0aGlzLnJ1bm5pbmc9ITB9c3RvcCgpe3RoaXMuZ2V0RWxhcHNlZFRpbWUoKSx0aGlzLnJ1bm5pbmc9ITEsdGhpcy5hdXRvU3RhcnQ9ITF9Z2V0RWxhcHNlZFRpbWUoKXtyZXR1cm4gdGhpcy5nZXREZWx0YSgpLHRoaXMuZWxhcHNlZFRpbWV9Z2V0RGVsdGEoKXtsZXQgdD0wO2lmKHRoaXMuYXV0b1N0YXJ0JiYhdGhpcy5ydW5uaW5nKXJldHVybiB0aGlzLnN0YXJ0KCksMDtpZih0aGlzLnJ1bm5pbmcpe2xldCByPUFoZSgpO3Q9KHItdGhpcy5vbGRUaW1lKS8xZTMsdGhpcy5vbGRUaW1lPXIsdGhpcy5lbGFwc2VkVGltZSs9dH1yZXR1cm4gdH19O2Z1bmN0aW9uIEFoZSgpe3JldHVybih0eXBlb2YgcGVyZm9ybWFuY2U9PSJ1bmRlZmluZWQiP0RhdGU6cGVyZm9ybWFuY2UpLm5vdygpfXZhciB4MT1uZXcgaixQaGU9bmV3IHlpLGQwcj1uZXcgaixiMT1uZXcgaixjaHQ9Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJBdWRpb0xpc3RlbmVyIix0aGlzLmNvbnRleHQ9emh0LmdldENvbnRleHQoKSx0aGlzLmdhaW49dGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKSx0aGlzLmdhaW4uY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pLHRoaXMuZmlsdGVyPW51bGwsdGhpcy50aW1lRGVsdGE9MCx0aGlzLl9jbG9jaz1uZXcgbU19Z2V0SW5wdXQoKXtyZXR1cm4gdGhpcy5nYWlufXJlbW92ZUZpbHRlcigpe3JldHVybiB0aGlzLmZpbHRlciE9PW51bGwmJih0aGlzLmdhaW4uZGlzY29ubmVjdCh0aGlzLmZpbHRlciksdGhpcy5maWx0ZXIuZGlzY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pLHRoaXMuZ2Fpbi5jb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbiksdGhpcy5maWx0ZXI9bnVsbCksdGhpc31nZXRGaWx0ZXIoKXtyZXR1cm4gdGhpcy5maWx0ZXJ9c2V0RmlsdGVyKHQpe3JldHVybiB0aGlzLmZpbHRlciE9PW51bGw/KHRoaXMuZ2Fpbi5kaXNjb25uZWN0KHRoaXMuZmlsdGVyKSx0aGlzLmZpbHRlci5kaXNjb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbikpOnRoaXMuZ2Fpbi5kaXNjb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbiksdGhpcy5maWx0ZXI9dCx0aGlzLmdhaW4uY29ubmVjdCh0aGlzLmZpbHRlciksdGhpcy5maWx0ZXIuY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pLHRoaXN9Z2V0TWFzdGVyVm9sdW1lKCl7cmV0dXJuIHRoaXMuZ2Fpbi5nYWluLnZhbHVlfXNldE1hc3RlclZvbHVtZSh0KXtyZXR1cm4gdGhpcy5nYWluLmdhaW4uc2V0VGFyZ2V0QXRUaW1lKHQsdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lLC4wMSksdGhpc311cGRhdGVNYXRyaXhXb3JsZCh0KXtzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KTtsZXQgcj10aGlzLmNvbnRleHQubGlzdGVuZXIsbj10aGlzLnVwO2lmKHRoaXMudGltZURlbHRhPXRoaXMuX2Nsb2NrLmdldERlbHRhKCksdGhpcy5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoeDEsUGhlLGQwciksYjEuc2V0KDAsMCwtMSkuYXBwbHlRdWF0ZXJuaW9uKFBoZSksci5wb3NpdGlvblgpe2xldCBpPXRoaXMuY29udGV4dC5jdXJyZW50VGltZSt0aGlzLnRpbWVEZWx0YTtyLnBvc2l0aW9uWC5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh4MS54LGkpLHIucG9zaXRpb25ZLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHgxLnksaSksci5wb3NpdGlvbloubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoeDEueixpKSxyLmZvcndhcmRYLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKGIxLngsaSksci5mb3J3YXJkWS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShiMS55LGkpLHIuZm9yd2FyZFoubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoYjEueixpKSxyLnVwWC5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShuLngsaSksci51cFkubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUobi55LGkpLHIudXBaLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKG4ueixpKX1lbHNlIHIuc2V0UG9zaXRpb24oeDEueCx4MS55LHgxLnopLHIuc2V0T3JpZW50YXRpb24oYjEueCxiMS55LGIxLnosbi54LG4ueSxuLnopfX0sRDY9Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iQXVkaW8iLHRoaXMubGlzdGVuZXI9dCx0aGlzLmNvbnRleHQ9dC5jb250ZXh0LHRoaXMuZ2Fpbj10aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpLHRoaXMuZ2Fpbi5jb25uZWN0KHQuZ2V0SW5wdXQoKSksdGhpcy5hdXRvcGxheT0hMSx0aGlzLmJ1ZmZlcj1udWxsLHRoaXMuZGV0dW5lPTAsdGhpcy5sb29wPSExLHRoaXMubG9vcFN0YXJ0PTAsdGhpcy5sb29wRW5kPTAsdGhpcy5vZmZzZXQ9MCx0aGlzLmR1cmF0aW9uPXZvaWQgMCx0aGlzLnBsYXliYWNrUmF0ZT0xLHRoaXMuaXNQbGF5aW5nPSExLHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSEwLHRoaXMuc291cmNlPW51bGwsdGhpcy5zb3VyY2VUeXBlPSJlbXB0eSIsdGhpcy5fc3RhcnRlZEF0PTAsdGhpcy5fcHJvZ3Jlc3M9MCx0aGlzLl9jb25uZWN0ZWQ9ITEsdGhpcy5maWx0ZXJzPVtdfWdldE91dHB1dCgpe3JldHVybiB0aGlzLmdhaW59c2V0Tm9kZVNvdXJjZSh0KXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITEsdGhpcy5zb3VyY2VUeXBlPSJhdWRpb05vZGUiLHRoaXMuc291cmNlPXQsdGhpcy5jb25uZWN0KCksdGhpc31zZXRNZWRpYUVsZW1lbnRTb3VyY2UodCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSExLHRoaXMuc291cmNlVHlwZT0ibWVkaWFOb2RlIix0aGlzLnNvdXJjZT10aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFFbGVtZW50U291cmNlKHQpLHRoaXMuY29ubmVjdCgpLHRoaXN9c2V0TWVkaWFTdHJlYW1Tb3VyY2UodCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSExLHRoaXMuc291cmNlVHlwZT0ibWVkaWFTdHJlYW1Ob2RlIix0aGlzLnNvdXJjZT10aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2UodCksdGhpcy5jb25uZWN0KCksdGhpc31zZXRCdWZmZXIodCl7cmV0dXJuIHRoaXMuYnVmZmVyPXQsdGhpcy5zb3VyY2VUeXBlPSJidWZmZXIiLHRoaXMuYXV0b3BsYXkmJnRoaXMucGxheSgpLHRoaXN9cGxheSh0PTApe2lmKHRoaXMuaXNQbGF5aW5nPT09ITApe2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IEF1ZGlvIGlzIGFscmVhZHkgcGxheWluZy4iKTtyZXR1cm59aWYodGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9PT0hMSl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTtyZXR1cm59dGhpcy5fc3RhcnRlZEF0PXRoaXMuY29udGV4dC5jdXJyZW50VGltZSt0O2xldCByPXRoaXMuY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTtyZXR1cm4gci5idWZmZXI9dGhpcy5idWZmZXIsci5sb29wPXRoaXMubG9vcCxyLmxvb3BTdGFydD10aGlzLmxvb3BTdGFydCxyLmxvb3BFbmQ9dGhpcy5sb29wRW5kLHIub25lbmRlZD10aGlzLm9uRW5kZWQuYmluZCh0aGlzKSxyLnN0YXJ0KHRoaXMuX3N0YXJ0ZWRBdCx0aGlzLl9wcm9ncmVzcyt0aGlzLm9mZnNldCx0aGlzLmR1cmF0aW9uKSx0aGlzLmlzUGxheWluZz0hMCx0aGlzLnNvdXJjZT1yLHRoaXMuc2V0RGV0dW5lKHRoaXMuZGV0dW5lKSx0aGlzLnNldFBsYXliYWNrUmF0ZSh0aGlzLnBsYXliYWNrUmF0ZSksdGhpcy5jb25uZWN0KCl9cGF1c2UoKXtpZih0aGlzLmhhc1BsYXliYWNrQ29udHJvbD09PSExKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO3JldHVybn1yZXR1cm4gdGhpcy5pc1BsYXlpbmc9PT0hMCYmKHRoaXMuX3Byb2dyZXNzKz1NYXRoLm1heCh0aGlzLmNvbnRleHQuY3VycmVudFRpbWUtdGhpcy5fc3RhcnRlZEF0LDApKnRoaXMucGxheWJhY2tSYXRlLHRoaXMubG9vcD09PSEwJiYodGhpcy5fcHJvZ3Jlc3M9dGhpcy5fcHJvZ3Jlc3MlKHRoaXMuZHVyYXRpb258fHRoaXMuYnVmZmVyLmR1cmF0aW9uKSksdGhpcy5zb3VyY2Uuc3RvcCgpLHRoaXMuc291cmNlLm9uZW5kZWQ9bnVsbCx0aGlzLmlzUGxheWluZz0hMSksdGhpc31zdG9wKCl7aWYodGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9PT0hMSl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTtyZXR1cm59cmV0dXJuIHRoaXMuX3Byb2dyZXNzPTAsdGhpcy5zb3VyY2Uuc3RvcCgpLHRoaXMuc291cmNlLm9uZW5kZWQ9bnVsbCx0aGlzLmlzUGxheWluZz0hMSx0aGlzfWNvbm5lY3QoKXtpZih0aGlzLmZpbHRlcnMubGVuZ3RoPjApe3RoaXMuc291cmNlLmNvbm5lY3QodGhpcy5maWx0ZXJzWzBdKTtmb3IobGV0IHQ9MSxyPXRoaXMuZmlsdGVycy5sZW5ndGg7dDxyO3QrKyl0aGlzLmZpbHRlcnNbdC0xXS5jb25uZWN0KHRoaXMuZmlsdGVyc1t0XSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmNvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7cmV0dXJuIHRoaXMuX2Nvbm5lY3RlZD0hMCx0aGlzfWRpc2Nvbm5lY3QoKXtpZih0aGlzLmZpbHRlcnMubGVuZ3RoPjApe3RoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXJzWzBdKTtmb3IobGV0IHQ9MSxyPXRoaXMuZmlsdGVycy5sZW5ndGg7dDxyO3QrKyl0aGlzLmZpbHRlcnNbdC0xXS5kaXNjb25uZWN0KHRoaXMuZmlsdGVyc1t0XSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uZGlzY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7cmV0dXJuIHRoaXMuX2Nvbm5lY3RlZD0hMSx0aGlzfWdldEZpbHRlcnMoKXtyZXR1cm4gdGhpcy5maWx0ZXJzfXNldEZpbHRlcnModCl7cmV0dXJuIHR8fCh0PVtdKSx0aGlzLl9jb25uZWN0ZWQ9PT0hMD8odGhpcy5kaXNjb25uZWN0KCksdGhpcy5maWx0ZXJzPXQuc2xpY2UoKSx0aGlzLmNvbm5lY3QoKSk6dGhpcy5maWx0ZXJzPXQuc2xpY2UoKSx0aGlzfXNldERldHVuZSh0KXtpZih0aGlzLmRldHVuZT10LHRoaXMuc291cmNlLmRldHVuZSE9PXZvaWQgMClyZXR1cm4gdGhpcy5pc1BsYXlpbmc9PT0hMCYmdGhpcy5zb3VyY2UuZGV0dW5lLnNldFRhcmdldEF0VGltZSh0aGlzLmRldHVuZSx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzfWdldERldHVuZSgpe3JldHVybiB0aGlzLmRldHVuZX1nZXRGaWx0ZXIoKXtyZXR1cm4gdGhpcy5nZXRGaWx0ZXJzKClbMF19c2V0RmlsdGVyKHQpe3JldHVybiB0aGlzLnNldEZpbHRlcnModD9bdF06W10pfXNldFBsYXliYWNrUmF0ZSh0KXtpZih0aGlzLmhhc1BsYXliYWNrQ29udHJvbD09PSExKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO3JldHVybn1yZXR1cm4gdGhpcy5wbGF5YmFja1JhdGU9dCx0aGlzLmlzUGxheWluZz09PSEwJiZ0aGlzLnNvdXJjZS5wbGF5YmFja1JhdGUuc2V0VGFyZ2V0QXRUaW1lKHRoaXMucGxheWJhY2tSYXRlLHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9Z2V0UGxheWJhY2tSYXRlKCl7cmV0dXJuIHRoaXMucGxheWJhY2tSYXRlfW9uRW5kZWQoKXt0aGlzLmlzUGxheWluZz0hMX1nZXRMb29wKCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPT09ITE/KGNvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIiksITEpOnRoaXMubG9vcH1zZXRMb29wKHQpe2lmKHRoaXMuaGFzUGxheWJhY2tDb250cm9sPT09ITEpe2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIik7cmV0dXJufXJldHVybiB0aGlzLmxvb3A9dCx0aGlzLmlzUGxheWluZz09PSEwJiYodGhpcy5zb3VyY2UubG9vcD10aGlzLmxvb3ApLHRoaXN9c2V0TG9vcFN0YXJ0KHQpe3JldHVybiB0aGlzLmxvb3BTdGFydD10LHRoaXN9c2V0TG9vcEVuZCh0KXtyZXR1cm4gdGhpcy5sb29wRW5kPXQsdGhpc31nZXRWb2x1bWUoKXtyZXR1cm4gdGhpcy5nYWluLmdhaW4udmFsdWV9c2V0Vm9sdW1lKHQpe3JldHVybiB0aGlzLmdhaW4uZ2Fpbi5zZXRUYXJnZXRBdFRpbWUodCx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzfX0sdzE9bmV3IGosSWhlPW5ldyB5aSxtMHI9bmV3IGosUzE9bmV3IGosdWh0PWNsYXNzIGV4dGVuZHMgRDZ7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5wYW5uZXI9dGhpcy5jb250ZXh0LmNyZWF0ZVBhbm5lcigpLHRoaXMucGFubmVyLnBhbm5pbmdNb2RlbD0iSFJURiIsdGhpcy5wYW5uZXIuY29ubmVjdCh0aGlzLmdhaW4pfWdldE91dHB1dCgpe3JldHVybiB0aGlzLnBhbm5lcn1nZXRSZWZEaXN0YW5jZSgpe3JldHVybiB0aGlzLnBhbm5lci5yZWZEaXN0YW5jZX1zZXRSZWZEaXN0YW5jZSh0KXtyZXR1cm4gdGhpcy5wYW5uZXIucmVmRGlzdGFuY2U9dCx0aGlzfWdldFJvbGxvZmZGYWN0b3IoKXtyZXR1cm4gdGhpcy5wYW5uZXIucm9sbG9mZkZhY3Rvcn1zZXRSb2xsb2ZmRmFjdG9yKHQpe3JldHVybiB0aGlzLnBhbm5lci5yb2xsb2ZmRmFjdG9yPXQsdGhpc31nZXREaXN0YW5jZU1vZGVsKCl7cmV0dXJuIHRoaXMucGFubmVyLmRpc3RhbmNlTW9kZWx9c2V0RGlzdGFuY2VNb2RlbCh0KXtyZXR1cm4gdGhpcy5wYW5uZXIuZGlzdGFuY2VNb2RlbD10LHRoaXN9Z2V0TWF4RGlzdGFuY2UoKXtyZXR1cm4gdGhpcy5wYW5uZXIubWF4RGlzdGFuY2V9c2V0TWF4RGlzdGFuY2UodCl7cmV0dXJuIHRoaXMucGFubmVyLm1heERpc3RhbmNlPXQsdGhpc31zZXREaXJlY3Rpb25hbENvbmUodCxyLG4pe3JldHVybiB0aGlzLnBhbm5lci5jb25lSW5uZXJBbmdsZT10LHRoaXMucGFubmVyLmNvbmVPdXRlckFuZ2xlPXIsdGhpcy5wYW5uZXIuY29uZU91dGVyR2Fpbj1uLHRoaXN9dXBkYXRlTWF0cml4V29ybGQodCl7aWYoc3VwZXIudXBkYXRlTWF0cml4V29ybGQodCksdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9PT0hMCYmdGhpcy5pc1BsYXlpbmc9PT0hMSlyZXR1cm47dGhpcy5tYXRyaXhXb3JsZC5kZWNvbXBvc2UodzEsSWhlLG0wciksUzEuc2V0KDAsMCwxKS5hcHBseVF1YXRlcm5pb24oSWhlKTtsZXQgcj10aGlzLnBhbm5lcjtpZihyLnBvc2l0aW9uWCl7bGV0IG49dGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lK3RoaXMubGlzdGVuZXIudGltZURlbHRhO3IucG9zaXRpb25YLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHcxLngsbiksci5wb3NpdGlvblkubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodzEueSxuKSxyLnBvc2l0aW9uWi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh3MS56LG4pLHIub3JpZW50YXRpb25YLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKFMxLngsbiksci5vcmllbnRhdGlvblkubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoUzEueSxuKSxyLm9yaWVudGF0aW9uWi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShTMS56LG4pfWVsc2Ugci5zZXRQb3NpdGlvbih3MS54LHcxLnksdzEueiksci5zZXRPcmllbnRhdGlvbihTMS54LFMxLnksUzEueil9fSxGVT1jbGFzc3tjb25zdHJ1Y3Rvcih0LHI9MjA0OCl7dGhpcy5hbmFseXNlcj10LmNvbnRleHQuY3JlYXRlQW5hbHlzZXIoKSx0aGlzLmFuYWx5c2VyLmZmdFNpemU9cix0aGlzLmRhdGE9bmV3IFVpbnQ4QXJyYXkodGhpcy5hbmFseXNlci5mcmVxdWVuY3lCaW5Db3VudCksdC5nZXRPdXRwdXQoKS5jb25uZWN0KHRoaXMuYW5hbHlzZXIpfWdldEZyZXF1ZW5jeURhdGEoKXtyZXR1cm4gdGhpcy5hbmFseXNlci5nZXRCeXRlRnJlcXVlbmN5RGF0YSh0aGlzLmRhdGEpLHRoaXMuZGF0YX1nZXRBdmVyYWdlRnJlcXVlbmN5KCl7bGV0IHQ9MCxyPXRoaXMuZ2V0RnJlcXVlbmN5RGF0YSgpO2ZvcihsZXQgbj0wO248ci5sZW5ndGg7bisrKXQrPXJbbl07cmV0dXJuIHQvci5sZW5ndGh9fSxCVT1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbil7dGhpcy5iaW5kaW5nPXQsdGhpcy52YWx1ZVNpemU9bjtsZXQgaSxvLGE7c3dpdGNoKHIpe2Nhc2UicXVhdGVybmlvbiI6aT10aGlzLl9zbGVycCxvPXRoaXMuX3NsZXJwQWRkaXRpdmUsYT10aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5UXVhdGVybmlvbix0aGlzLmJ1ZmZlcj1uZXcgRmxvYXQ2NEFycmF5KG4qNiksdGhpcy5fd29ya0luZGV4PTU7YnJlYWs7Y2FzZSJzdHJpbmciOmNhc2UiYm9vbCI6aT10aGlzLl9zZWxlY3Qsbz10aGlzLl9zZWxlY3QsYT10aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5T3RoZXIsdGhpcy5idWZmZXI9bmV3IEFycmF5KG4qNSk7YnJlYWs7ZGVmYXVsdDppPXRoaXMuX2xlcnAsbz10aGlzLl9sZXJwQWRkaXRpdmUsYT10aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5TnVtZXJpYyx0aGlzLmJ1ZmZlcj1uZXcgRmxvYXQ2NEFycmF5KG4qNSl9dGhpcy5fbWl4QnVmZmVyUmVnaW9uPWksdGhpcy5fbWl4QnVmZmVyUmVnaW9uQWRkaXRpdmU9byx0aGlzLl9zZXRJZGVudGl0eT1hLHRoaXMuX29yaWdJbmRleD0zLHRoaXMuX2FkZEluZGV4PTQsdGhpcy5jdW11bGF0aXZlV2VpZ2h0PTAsdGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmU9MCx0aGlzLnVzZUNvdW50PTAsdGhpcy5yZWZlcmVuY2VDb3VudD0wfWFjY3VtdWxhdGUodCxyKXtsZXQgbj10aGlzLmJ1ZmZlcixpPXRoaXMudmFsdWVTaXplLG89dCppK2ksYT10aGlzLmN1bXVsYXRpdmVXZWlnaHQ7aWYoYT09PTApe2ZvcihsZXQgcz0wO3MhPT1pOysrcyluW28rc109bltzXTthPXJ9ZWxzZXthKz1yO2xldCBzPXIvYTt0aGlzLl9taXhCdWZmZXJSZWdpb24obixvLDAscyxpKX10aGlzLmN1bXVsYXRpdmVXZWlnaHQ9YX1hY2N1bXVsYXRlQWRkaXRpdmUodCl7bGV0IHI9dGhpcy5idWZmZXIsbj10aGlzLnZhbHVlU2l6ZSxpPW4qdGhpcy5fYWRkSW5kZXg7dGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmU9PT0wJiZ0aGlzLl9zZXRJZGVudGl0eSgpLHRoaXMuX21peEJ1ZmZlclJlZ2lvbkFkZGl0aXZlKHIsaSwwLHQsbiksdGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmUrPXR9YXBwbHkodCl7bGV0IHI9dGhpcy52YWx1ZVNpemUsbj10aGlzLmJ1ZmZlcixpPXQqcityLG89dGhpcy5jdW11bGF0aXZlV2VpZ2h0LGE9dGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmUscz10aGlzLmJpbmRpbmc7aWYodGhpcy5jdW11bGF0aXZlV2VpZ2h0PTAsdGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmU9MCxvPDEpe2xldCBsPXIqdGhpcy5fb3JpZ0luZGV4O3RoaXMuX21peEJ1ZmZlclJlZ2lvbihuLGksbCwxLW8scil9YT4wJiZ0aGlzLl9taXhCdWZmZXJSZWdpb25BZGRpdGl2ZShuLGksdGhpcy5fYWRkSW5kZXgqciwxLHIpO2ZvcihsZXQgbD1yLGM9cityO2whPT1jOysrbClpZihuW2xdIT09bltsK3JdKXtzLnNldFZhbHVlKG4saSk7YnJlYWt9fXNhdmVPcmlnaW5hbFN0YXRlKCl7bGV0IHQ9dGhpcy5iaW5kaW5nLHI9dGhpcy5idWZmZXIsbj10aGlzLnZhbHVlU2l6ZSxpPW4qdGhpcy5fb3JpZ0luZGV4O3QuZ2V0VmFsdWUocixpKTtmb3IobGV0IG89bixhPWk7byE9PWE7KytvKXJbb109cltpK28lbl07dGhpcy5fc2V0SWRlbnRpdHkoKSx0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MCx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT0wfXJlc3RvcmVPcmlnaW5hbFN0YXRlKCl7bGV0IHQ9dGhpcy52YWx1ZVNpemUqMzt0aGlzLmJpbmRpbmcuc2V0VmFsdWUodGhpcy5idWZmZXIsdCl9X3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljKCl7bGV0IHQ9dGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemUscj10K3RoaXMudmFsdWVTaXplO2ZvcihsZXQgbj10O248cjtuKyspdGhpcy5idWZmZXJbbl09MH1fc2V0QWRkaXRpdmVJZGVudGl0eVF1YXRlcm5pb24oKXt0aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5TnVtZXJpYygpLHRoaXMuYnVmZmVyW3RoaXMuX2FkZEluZGV4KnRoaXMudmFsdWVTaXplKzNdPTF9X3NldEFkZGl0aXZlSWRlbnRpdHlPdGhlcigpe2xldCB0PXRoaXMuX29yaWdJbmRleCp0aGlzLnZhbHVlU2l6ZSxyPXRoaXMuX2FkZEluZGV4KnRoaXMudmFsdWVTaXplO2ZvcihsZXQgbj0wO248dGhpcy52YWx1ZVNpemU7bisrKXRoaXMuYnVmZmVyW3Irbl09dGhpcy5idWZmZXJbdCtuXX1fc2VsZWN0KHQscixuLGksbyl7aWYoaT49LjUpZm9yKGxldCBhPTA7YSE9PW87KythKXRbcithXT10W24rYV19X3NsZXJwKHQscixuLGkpe3lpLnNsZXJwRmxhdCh0LHIsdCxyLHQsbixpKX1fc2xlcnBBZGRpdGl2ZSh0LHIsbixpLG8pe2xldCBhPXRoaXMuX3dvcmtJbmRleCpvO3lpLm11bHRpcGx5UXVhdGVybmlvbnNGbGF0KHQsYSx0LHIsdCxuKSx5aS5zbGVycEZsYXQodCxyLHQscix0LGEsaSl9X2xlcnAodCxyLG4saSxvKXtsZXQgYT0xLWk7Zm9yKGxldCBzPTA7cyE9PW87KytzKXtsZXQgbD1yK3M7dFtsXT10W2xdKmErdFtuK3NdKml9fV9sZXJwQWRkaXRpdmUodCxyLG4saSxvKXtmb3IobGV0IGE9MDthIT09bzsrK2Epe2xldCBzPXIrYTt0W3NdPXRbc10rdFtuK2FdKml9fX0sRmh0PSJcXFtcXF1cXC46XFwvIixnMHI9bmV3IFJlZ0V4cCgiWyIrRmh0KyJdIiwiZyIpLEJodD0iW14iK0ZodCsiXSIsXzByPSJbXiIrRmh0LnJlcGxhY2UoIlxcLiIsIiIpKyJdIix5MHI9LygoPzpXQytbXC86XSkqKS8uc291cmNlLnJlcGxhY2UoIldDIixCaHQpLHYwcj0vKFdDT0QrKT8vLnNvdXJjZS5yZXBsYWNlKCJXQ09EIixfMHIpLHgwcj0vKD86XC4oV0MrKSg/OlxbKC4rKVxdKT8pPy8uc291cmNlLnJlcGxhY2UoIldDIixCaHQpLGIwcj0vXC4oV0MrKSg/OlxbKC4rKVxdKT8vLnNvdXJjZS5yZXBsYWNlKCJXQyIsQmh0KSx3MHI9bmV3IFJlZ0V4cCgiXiIreTByK3Ywcit4MHIrYjByKyIkIiksUzByPVsibWF0ZXJpYWwiLCJtYXRlcmlhbHMiLCJib25lcyJdLGhodD1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbil7bGV0IGk9bnx8Q3IucGFyc2VUcmFja05hbWUocik7dGhpcy5fdGFyZ2V0R3JvdXA9dCx0aGlzLl9iaW5kaW5ncz10LnN1YnNjcmliZV8ocixpKX1nZXRWYWx1ZSh0LHIpe3RoaXMuYmluZCgpO2xldCBuPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxpPXRoaXMuX2JpbmRpbmdzW25dO2khPT12b2lkIDAmJmkuZ2V0VmFsdWUodCxyKX1zZXRWYWx1ZSh0LHIpe2xldCBuPXRoaXMuX2JpbmRpbmdzO2ZvcihsZXQgaT10aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c18sbz1uLmxlbmd0aDtpIT09bzsrK2kpbltpXS5zZXRWYWx1ZSh0LHIpfWJpbmQoKXtsZXQgdD10aGlzLl9iaW5kaW5ncztmb3IobGV0IHI9dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLG49dC5sZW5ndGg7ciE9PW47KytyKXRbcl0uYmluZCgpfXVuYmluZCgpe2xldCB0PXRoaXMuX2JpbmRpbmdzO2ZvcihsZXQgcj10aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c18sbj10Lmxlbmd0aDtyIT09bjsrK3IpdFtyXS51bmJpbmQoKX19LENyPWNsYXNze2NvbnN0cnVjdG9yKHQscixuKXt0aGlzLnBhdGg9cix0aGlzLnBhcnNlZFBhdGg9bnx8Q3IucGFyc2VUcmFja05hbWUociksdGhpcy5ub2RlPUNyLmZpbmROb2RlKHQsdGhpcy5wYXJzZWRQYXRoLm5vZGVOYW1lKXx8dCx0aGlzLnJvb3ROb2RlPXQsdGhpcy5nZXRWYWx1ZT10aGlzLl9nZXRWYWx1ZV91bmJvdW5kLHRoaXMuc2V0VmFsdWU9dGhpcy5fc2V0VmFsdWVfdW5ib3VuZH1zdGF0aWMgY3JlYXRlKHQscixuKXtyZXR1cm4gdCYmdC5pc0FuaW1hdGlvbk9iamVjdEdyb3VwP25ldyBDci5Db21wb3NpdGUodCxyLG4pOm5ldyBDcih0LHIsbil9c3RhdGljIHNhbml0aXplTm9kZU5hbWUodCl7cmV0dXJuIHQucmVwbGFjZSgvXHMvZywiXyIpLnJlcGxhY2UoZzByLCIiKX1zdGF0aWMgcGFyc2VUcmFja05hbWUodCl7bGV0IHI9dzByLmV4ZWModCk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKCJQcm9wZXJ0eUJpbmRpbmc6IENhbm5vdCBwYXJzZSB0cmFja05hbWU6ICIrdCk7bGV0IG49e25vZGVOYW1lOnJbMl0sb2JqZWN0TmFtZTpyWzNdLG9iamVjdEluZGV4OnJbNF0scHJvcGVydHlOYW1lOnJbNV0scHJvcGVydHlJbmRleDpyWzZdfSxpPW4ubm9kZU5hbWUmJm4ubm9kZU5hbWUubGFzdEluZGV4T2YoIi4iKTtpZihpIT09dm9pZCAwJiZpIT09LTEpe2xldCBvPW4ubm9kZU5hbWUuc3Vic3RyaW5nKGkrMSk7UzByLmluZGV4T2YobykhPT0tMSYmKG4ubm9kZU5hbWU9bi5ub2RlTmFtZS5zdWJzdHJpbmcoMCxpKSxuLm9iamVjdE5hbWU9byl9aWYobi5wcm9wZXJ0eU5hbWU9PT1udWxsfHxuLnByb3BlcnR5TmFtZS5sZW5ndGg9PT0wKXRocm93IG5ldyBFcnJvcigiUHJvcGVydHlCaW5kaW5nOiBjYW4gbm90IHBhcnNlIHByb3BlcnR5TmFtZSBmcm9tIHRyYWNrTmFtZTogIit0KTtyZXR1cm4gbn1zdGF0aWMgZmluZE5vZGUodCxyKXtpZighcnx8cj09PSIifHxyPT09Ii4ifHxyPT09LTF8fHI9PT10Lm5hbWV8fHI9PT10LnV1aWQpcmV0dXJuIHQ7aWYodC5za2VsZXRvbil7bGV0IG49dC5za2VsZXRvbi5nZXRCb25lQnlOYW1lKHIpO2lmKG4hPT12b2lkIDApcmV0dXJuIG59aWYodC5jaGlsZHJlbil7bGV0IG49ZnVuY3Rpb24obyl7Zm9yKGxldCBhPTA7YTxvLmxlbmd0aDthKyspe2xldCBzPW9bYV07aWYocy5uYW1lPT09cnx8cy51dWlkPT09cilyZXR1cm4gcztsZXQgbD1uKHMuY2hpbGRyZW4pO2lmKGwpcmV0dXJuIGx9cmV0dXJuIG51bGx9LGk9bih0LmNoaWxkcmVuKTtpZihpKXJldHVybiBpfXJldHVybiBudWxsfV9nZXRWYWx1ZV91bmF2YWlsYWJsZSgpe31fc2V0VmFsdWVfdW5hdmFpbGFibGUoKXt9X2dldFZhbHVlX2RpcmVjdCh0LHIpe3Rbcl09dGhpcy50YXJnZXRPYmplY3RbdGhpcy5wcm9wZXJ0eU5hbWVdfV9nZXRWYWx1ZV9hcnJheSh0LHIpe2xldCBuPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IGk9MCxvPW4ubGVuZ3RoO2khPT1vOysraSl0W3IrK109bltpXX1fZ2V0VmFsdWVfYXJyYXlFbGVtZW50KHQscil7dFtyXT10aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XX1fZ2V0VmFsdWVfdG9BcnJheSh0LHIpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eS50b0FycmF5KHQscil9X3NldFZhbHVlX2RpcmVjdCh0LHIpe3RoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXT10W3JdfV9zZXRWYWx1ZV9kaXJlY3Rfc2V0TmVlZHNVcGRhdGUodCxyKXt0aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV09dFtyXSx0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfZGlyZWN0X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGUodCxyKXt0aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV09dFtyXSx0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9hcnJheSh0LHIpe2xldCBuPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IGk9MCxvPW4ubGVuZ3RoO2khPT1vOysraSluW2ldPXRbcisrXX1fc2V0VmFsdWVfYXJyYXlfc2V0TmVlZHNVcGRhdGUodCxyKXtsZXQgbj10aGlzLnJlc29sdmVkUHJvcGVydHk7Zm9yKGxldCBpPTAsbz1uLmxlbmd0aDtpIT09bzsrK2kpbltpXT10W3IrK107dGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2FycmF5X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGUodCxyKXtsZXQgbj10aGlzLnJlc29sdmVkUHJvcGVydHk7Zm9yKGxldCBpPTAsbz1uLmxlbmd0aDtpIT09bzsrK2kpbltpXT10W3IrK107dGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfYXJyYXlFbGVtZW50KHQscil7dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF09dFtyXX1fc2V0VmFsdWVfYXJyYXlFbGVtZW50X3NldE5lZWRzVXBkYXRlKHQscil7dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF09dFtyXSx0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfYXJyYXlFbGVtZW50X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGUodCxyKXt0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XT10W3JdLHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2Zyb21BcnJheSh0LHIpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eS5mcm9tQXJyYXkodCxyKX1fc2V0VmFsdWVfZnJvbUFycmF5X3NldE5lZWRzVXBkYXRlKHQscil7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheSh0LHIpLHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9mcm9tQXJyYXlfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZSh0LHIpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eS5mcm9tQXJyYXkodCxyKSx0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV9nZXRWYWx1ZV91bmJvdW5kKHQscil7dGhpcy5iaW5kKCksdGhpcy5nZXRWYWx1ZSh0LHIpfV9zZXRWYWx1ZV91bmJvdW5kKHQscil7dGhpcy5iaW5kKCksdGhpcy5zZXRWYWx1ZSh0LHIpfWJpbmQoKXtsZXQgdD10aGlzLm5vZGUscj10aGlzLnBhcnNlZFBhdGgsbj1yLm9iamVjdE5hbWUsaT1yLnByb3BlcnR5TmFtZSxvPXIucHJvcGVydHlJbmRleDtpZih0fHwodD1Dci5maW5kTm9kZSh0aGlzLnJvb3ROb2RlLHIubm9kZU5hbWUpfHx0aGlzLnJvb3ROb2RlLHRoaXMubm9kZT10KSx0aGlzLmdldFZhbHVlPXRoaXMuX2dldFZhbHVlX3VuYXZhaWxhYmxlLHRoaXMuc2V0VmFsdWU9dGhpcy5fc2V0VmFsdWVfdW5hdmFpbGFibGUsIXQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogVHJ5aW5nIHRvIHVwZGF0ZSBub2RlIGZvciB0cmFjazogIit0aGlzLnBhdGgrIiBidXQgaXQgd2Fzbid0IGZvdW5kLiIpO3JldHVybn1pZihuKXtsZXQgYz1yLm9iamVjdEluZGV4O3N3aXRjaChuKXtjYXNlIm1hdGVyaWFscyI6aWYoIXQubWF0ZXJpYWwpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1hdGVyaWFsIGFzIG5vZGUgZG9lcyBub3QgaGF2ZSBhIG1hdGVyaWFsLiIsdGhpcyk7cmV0dXJufWlmKCF0Lm1hdGVyaWFsLm1hdGVyaWFscyl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbWF0ZXJpYWwubWF0ZXJpYWxzIGFzIG5vZGUubWF0ZXJpYWwgZG9lcyBub3QgaGF2ZSBhIG1hdGVyaWFscyBhcnJheS4iLHRoaXMpO3JldHVybn10PXQubWF0ZXJpYWwubWF0ZXJpYWxzO2JyZWFrO2Nhc2UiYm9uZXMiOmlmKCF0LnNrZWxldG9uKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBib25lcyBhcyBub2RlIGRvZXMgbm90IGhhdmUgYSBza2VsZXRvbi4iLHRoaXMpO3JldHVybn10PXQuc2tlbGV0b24uYm9uZXM7Zm9yKGxldCB1PTA7dTx0Lmxlbmd0aDt1KyspaWYodFt1XS5uYW1lPT09Yyl7Yz11O2JyZWFrfWJyZWFrO2RlZmF1bHQ6aWYodFtuXT09PXZvaWQgMCl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gb2JqZWN0TmFtZSBvZiBub2RlIHVuZGVmaW5lZC4iLHRoaXMpO3JldHVybn10PXRbbl19aWYoYyE9PXZvaWQgMCl7aWYodFtjXT09PXZvaWQgMCl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBUcnlpbmcgdG8gYmluZCB0byBvYmplY3RJbmRleCBvZiBvYmplY3ROYW1lLCBidXQgaXMgdW5kZWZpbmVkLiIsdGhpcyx0KTtyZXR1cm59dD10W2NdfX1sZXQgYT10W2ldO2lmKGE9PT12b2lkIDApe2xldCBjPXIubm9kZU5hbWU7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBUcnlpbmcgdG8gdXBkYXRlIHByb3BlcnR5IGZvciB0cmFjazogIitjKyIuIitpKyIgYnV0IGl0IHdhc24ndCBmb3VuZC4iLHQpO3JldHVybn1sZXQgcz10aGlzLlZlcnNpb25pbmcuTm9uZTt0aGlzLnRhcmdldE9iamVjdD10LHQubmVlZHNVcGRhdGUhPT12b2lkIDA/cz10aGlzLlZlcnNpb25pbmcuTmVlZHNVcGRhdGU6dC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlIT09dm9pZCAwJiYocz10aGlzLlZlcnNpb25pbmcuTWF0cml4V29ybGROZWVkc1VwZGF0ZSk7bGV0IGw9dGhpcy5CaW5kaW5nVHlwZS5EaXJlY3Q7aWYobyE9PXZvaWQgMCl7aWYoaT09PSJtb3JwaFRhcmdldEluZmx1ZW5jZXMiKXtpZighdC5nZW9tZXRyeSl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbW9ycGhUYXJnZXRJbmZsdWVuY2VzIGJlY2F1c2Ugbm9kZSBkb2VzIG5vdCBoYXZlIGEgZ2VvbWV0cnkuIix0aGlzKTtyZXR1cm59aWYodC5nZW9tZXRyeS5pc0J1ZmZlckdlb21ldHJ5KXtpZighdC5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1vcnBoVGFyZ2V0SW5mbHVlbmNlcyBiZWNhdXNlIG5vZGUgZG9lcyBub3QgaGF2ZSBhIGdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy4iLHRoaXMpO3JldHVybn10Lm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtvXSE9PXZvaWQgMCYmKG89dC5tb3JwaFRhcmdldERpY3Rpb25hcnlbb10pfWVsc2V7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbW9ycGhUYXJnZXRJbmZsdWVuY2VzIG9uIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iLHRoaXMpO3JldHVybn19bD10aGlzLkJpbmRpbmdUeXBlLkFycmF5RWxlbWVudCx0aGlzLnJlc29sdmVkUHJvcGVydHk9YSx0aGlzLnByb3BlcnR5SW5kZXg9b31lbHNlIGEuZnJvbUFycmF5IT09dm9pZCAwJiZhLnRvQXJyYXkhPT12b2lkIDA/KGw9dGhpcy5CaW5kaW5nVHlwZS5IYXNGcm9tVG9BcnJheSx0aGlzLnJlc29sdmVkUHJvcGVydHk9YSk6QXJyYXkuaXNBcnJheShhKT8obD10aGlzLkJpbmRpbmdUeXBlLkVudGlyZUFycmF5LHRoaXMucmVzb2x2ZWRQcm9wZXJ0eT1hKTp0aGlzLnByb3BlcnR5TmFtZT1pO3RoaXMuZ2V0VmFsdWU9dGhpcy5HZXR0ZXJCeUJpbmRpbmdUeXBlW2xdLHRoaXMuc2V0VmFsdWU9dGhpcy5TZXR0ZXJCeUJpbmRpbmdUeXBlQW5kVmVyc2lvbmluZ1tsXVtzXX11bmJpbmQoKXt0aGlzLm5vZGU9bnVsbCx0aGlzLmdldFZhbHVlPXRoaXMuX2dldFZhbHVlX3VuYm91bmQsdGhpcy5zZXRWYWx1ZT10aGlzLl9zZXRWYWx1ZV91bmJvdW5kfX07Q3IuQ29tcG9zaXRlPWhodDtDci5wcm90b3R5cGUuQmluZGluZ1R5cGU9e0RpcmVjdDowLEVudGlyZUFycmF5OjEsQXJyYXlFbGVtZW50OjIsSGFzRnJvbVRvQXJyYXk6M307Q3IucHJvdG90eXBlLlZlcnNpb25pbmc9e05vbmU6MCxOZWVkc1VwZGF0ZToxLE1hdHJpeFdvcmxkTmVlZHNVcGRhdGU6Mn07Q3IucHJvdG90eXBlLkdldHRlckJ5QmluZGluZ1R5cGU9W0NyLnByb3RvdHlwZS5fZ2V0VmFsdWVfZGlyZWN0LENyLnByb3RvdHlwZS5fZ2V0VmFsdWVfYXJyYXksQ3IucHJvdG90eXBlLl9nZXRWYWx1ZV9hcnJheUVsZW1lbnQsQ3IucHJvdG90eXBlLl9nZXRWYWx1ZV90b0FycmF5XTtDci5wcm90b3R5cGUuU2V0dGVyQnlCaW5kaW5nVHlwZUFuZFZlcnNpb25pbmc9W1tDci5wcm90b3R5cGUuX3NldFZhbHVlX2RpcmVjdCxDci5wcm90b3R5cGUuX3NldFZhbHVlX2RpcmVjdF9zZXROZWVkc1VwZGF0ZSxDci5wcm90b3R5cGUuX3NldFZhbHVlX2RpcmVjdF9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlXSxbQ3IucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheSxDci5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5X3NldE5lZWRzVXBkYXRlLENyLnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZV0sW0NyLnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlFbGVtZW50LENyLnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlFbGVtZW50X3NldE5lZWRzVXBkYXRlLENyLnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlFbGVtZW50X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdLFtDci5wcm90b3R5cGUuX3NldFZhbHVlX2Zyb21BcnJheSxDci5wcm90b3R5cGUuX3NldFZhbHVlX2Zyb21BcnJheV9zZXROZWVkc1VwZGF0ZSxDci5wcm90b3R5cGUuX3NldFZhbHVlX2Zyb21BcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlXV07dmFyIEhVPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy51dWlkPURsKCksdGhpcy5fb2JqZWN0cz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpLHRoaXMubkNhY2hlZE9iamVjdHNfPTA7bGV0IHQ9e307dGhpcy5faW5kaWNlc0J5VVVJRD10O2ZvcihsZXQgbj0wLGk9YXJndW1lbnRzLmxlbmd0aDtuIT09aTsrK24pdFthcmd1bWVudHNbbl0udXVpZF09bjt0aGlzLl9wYXRocz1bXSx0aGlzLl9wYXJzZWRQYXRocz1bXSx0aGlzLl9iaW5kaW5ncz1bXSx0aGlzLl9iaW5kaW5nc0luZGljZXNCeVBhdGg9e307bGV0IHI9dGhpczt0aGlzLnN0YXRzPXtvYmplY3RzOntnZXQgdG90YWwoKXtyZXR1cm4gci5fb2JqZWN0cy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0aGlzLnRvdGFsLXIubkNhY2hlZE9iamVjdHNffX0sZ2V0IGJpbmRpbmdzUGVyT2JqZWN0KCl7cmV0dXJuIHIuX2JpbmRpbmdzLmxlbmd0aH19fWFkZCgpe2xldCB0PXRoaXMuX29iamVjdHMscj10aGlzLl9pbmRpY2VzQnlVVUlELG49dGhpcy5fcGF0aHMsaT10aGlzLl9wYXJzZWRQYXRocyxvPXRoaXMuX2JpbmRpbmdzLGE9by5sZW5ndGgscyxsPXQubGVuZ3RoLGM9dGhpcy5uQ2FjaGVkT2JqZWN0c187Zm9yKGxldCB1PTAsaD1hcmd1bWVudHMubGVuZ3RoO3UhPT1oOysrdSl7bGV0IGY9YXJndW1lbnRzW3VdLHA9Zi51dWlkLGQ9cltwXTtpZihkPT09dm9pZCAwKXtkPWwrKyxyW3BdPWQsdC5wdXNoKGYpO2ZvcihsZXQgZz0wLF89YTtnIT09XzsrK2cpb1tnXS5wdXNoKG5ldyBDcihmLG5bZ10saVtnXSkpfWVsc2UgaWYoZDxjKXtzPXRbZF07bGV0IGc9LS1jLF89dFtnXTtyW18udXVpZF09ZCx0W2RdPV8scltwXT1nLHRbZ109Zjtmb3IobGV0IHk9MCx4PWE7eSE9PXg7Kyt5KXtsZXQgYj1vW3ldLFM9YltnXSxDPWJbZF07YltkXT1TLEM9PT12b2lkIDAmJihDPW5ldyBDcihmLG5beV0saVt5XSkpLGJbZ109Q319ZWxzZSB0W2RdIT09cyYmY29uc29sZS5lcnJvcigiVEhSRUUuQW5pbWF0aW9uT2JqZWN0R3JvdXA6IERpZmZlcmVudCBvYmplY3RzIHdpdGggdGhlIHNhbWUgVVVJRCBkZXRlY3RlZC4gQ2xlYW4gdGhlIGNhY2hlcyBvciByZWNyZWF0ZSB5b3VyIGluZnJhc3RydWN0dXJlIHdoZW4gcmVsb2FkaW5nIHNjZW5lcy4iKX10aGlzLm5DYWNoZWRPYmplY3RzXz1jfXJlbW92ZSgpe2xldCB0PXRoaXMuX29iamVjdHMscj10aGlzLl9pbmRpY2VzQnlVVUlELG49dGhpcy5fYmluZGluZ3MsaT1uLmxlbmd0aCxvPXRoaXMubkNhY2hlZE9iamVjdHNfO2ZvcihsZXQgYT0wLHM9YXJndW1lbnRzLmxlbmd0aDthIT09czsrK2Epe2xldCBsPWFyZ3VtZW50c1thXSxjPWwudXVpZCx1PXJbY107aWYodSE9PXZvaWQgMCYmdT49byl7bGV0IGg9bysrLGY9dFtoXTtyW2YudXVpZF09dSx0W3VdPWYscltjXT1oLHRbaF09bDtmb3IobGV0IHA9MCxkPWk7cCE9PWQ7KytwKXtsZXQgZz1uW3BdLF89Z1toXSx5PWdbdV07Z1t1XT1fLGdbaF09eX19fXRoaXMubkNhY2hlZE9iamVjdHNfPW99dW5jYWNoZSgpe2xldCB0PXRoaXMuX29iamVjdHMscj10aGlzLl9pbmRpY2VzQnlVVUlELG49dGhpcy5fYmluZGluZ3MsaT1uLmxlbmd0aCxvPXRoaXMubkNhY2hlZE9iamVjdHNfLGE9dC5sZW5ndGg7Zm9yKGxldCBzPTAsbD1hcmd1bWVudHMubGVuZ3RoO3MhPT1sOysrcyl7bGV0IGM9YXJndW1lbnRzW3NdLHU9Yy51dWlkLGg9clt1XTtpZihoIT09dm9pZCAwKWlmKGRlbGV0ZSByW3VdLGg8byl7bGV0IGY9LS1vLHA9dFtmXSxkPS0tYSxnPXRbZF07cltwLnV1aWRdPWgsdFtoXT1wLHJbZy51dWlkXT1mLHRbZl09Zyx0LnBvcCgpO2ZvcihsZXQgXz0wLHk9aTtfIT09eTsrK18pe2xldCB4PW5bX10sYj14W2ZdLFM9eFtkXTt4W2hdPWIseFtmXT1TLHgucG9wKCl9fWVsc2V7bGV0IGY9LS1hLHA9dFtmXTtmPjAmJihyW3AudXVpZF09aCksdFtoXT1wLHQucG9wKCk7Zm9yKGxldCBkPTAsZz1pO2QhPT1nOysrZCl7bGV0IF89bltkXTtfW2hdPV9bZl0sXy5wb3AoKX19fXRoaXMubkNhY2hlZE9iamVjdHNfPW99c3Vic2NyaWJlXyh0LHIpe2xldCBuPXRoaXMuX2JpbmRpbmdzSW5kaWNlc0J5UGF0aCxpPW5bdF0sbz10aGlzLl9iaW5kaW5ncztpZihpIT09dm9pZCAwKXJldHVybiBvW2ldO2xldCBhPXRoaXMuX3BhdGhzLHM9dGhpcy5fcGFyc2VkUGF0aHMsbD10aGlzLl9vYmplY3RzLGM9bC5sZW5ndGgsdT10aGlzLm5DYWNoZWRPYmplY3RzXyxoPW5ldyBBcnJheShjKTtpPW8ubGVuZ3RoLG5bdF09aSxhLnB1c2godCkscy5wdXNoKHIpLG8ucHVzaChoKTtmb3IobGV0IGY9dSxwPWwubGVuZ3RoO2YhPT1wOysrZil7bGV0IGQ9bFtmXTtoW2ZdPW5ldyBDcihkLHQscil9cmV0dXJuIGh9dW5zdWJzY3JpYmVfKHQpe2xldCByPXRoaXMuX2JpbmRpbmdzSW5kaWNlc0J5UGF0aCxuPXJbdF07aWYobiE9PXZvaWQgMCl7bGV0IGk9dGhpcy5fcGF0aHMsbz10aGlzLl9wYXJzZWRQYXRocyxhPXRoaXMuX2JpbmRpbmdzLHM9YS5sZW5ndGgtMSxsPWFbc10sYz10W3NdO3JbY109bixhW25dPWwsYS5wb3AoKSxvW25dPW9bc10sby5wb3AoKSxpW25dPWlbc10saS5wb3AoKX19fTtIVS5wcm90b3R5cGUuaXNBbmltYXRpb25PYmplY3RHcm91cD0hMDt2YXIgZmh0PWNsYXNze2NvbnN0cnVjdG9yKHQscixuPW51bGwsaT1yLmJsZW5kTW9kZSl7dGhpcy5fbWl4ZXI9dCx0aGlzLl9jbGlwPXIsdGhpcy5fbG9jYWxSb290PW4sdGhpcy5ibGVuZE1vZGU9aTtsZXQgbz1yLnRyYWNrcyxhPW8ubGVuZ3RoLHM9bmV3IEFycmF5KGEpLGw9e2VuZGluZ1N0YXJ0OlQxLGVuZGluZ0VuZDpUMX07Zm9yKGxldCBjPTA7YyE9PWE7KytjKXtsZXQgdT1vW2NdLmNyZWF0ZUludGVycG9sYW50KG51bGwpO3NbY109dSx1LnNldHRpbmdzPWx9dGhpcy5faW50ZXJwb2xhbnRTZXR0aW5ncz1sLHRoaXMuX2ludGVycG9sYW50cz1zLHRoaXMuX3Byb3BlcnR5QmluZGluZ3M9bmV3IEFycmF5KGEpLHRoaXMuX2NhY2hlSW5kZXg9bnVsbCx0aGlzLl9ieUNsaXBDYWNoZUluZGV4PW51bGwsdGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ9bnVsbCx0aGlzLl93ZWlnaHRJbnRlcnBvbGFudD1udWxsLHRoaXMubG9vcD1JZmUsdGhpcy5fbG9vcENvdW50PS0xLHRoaXMuX3N0YXJ0VGltZT1udWxsLHRoaXMudGltZT0wLHRoaXMudGltZVNjYWxlPTEsdGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlPTEsdGhpcy53ZWlnaHQ9MSx0aGlzLl9lZmZlY3RpdmVXZWlnaHQ9MSx0aGlzLnJlcGV0aXRpb25zPTEvMCx0aGlzLnBhdXNlZD0hMSx0aGlzLmVuYWJsZWQ9ITAsdGhpcy5jbGFtcFdoZW5GaW5pc2hlZD0hMSx0aGlzLnplcm9TbG9wZUF0U3RhcnQ9ITAsdGhpcy56ZXJvU2xvcGVBdEVuZD0hMH1wbGF5KCl7cmV0dXJuIHRoaXMuX21peGVyLl9hY3RpdmF0ZUFjdGlvbih0aGlzKSx0aGlzfXN0b3AoKXtyZXR1cm4gdGhpcy5fbWl4ZXIuX2RlYWN0aXZhdGVBY3Rpb24odGhpcyksdGhpcy5yZXNldCgpfXJlc2V0KCl7cmV0dXJuIHRoaXMucGF1c2VkPSExLHRoaXMuZW5hYmxlZD0hMCx0aGlzLnRpbWU9MCx0aGlzLl9sb29wQ291bnQ9LTEsdGhpcy5fc3RhcnRUaW1lPW51bGwsdGhpcy5zdG9wRmFkaW5nKCkuc3RvcFdhcnBpbmcoKX1pc1J1bm5pbmcoKXtyZXR1cm4gdGhpcy5lbmFibGVkJiYhdGhpcy5wYXVzZWQmJnRoaXMudGltZVNjYWxlIT09MCYmdGhpcy5fc3RhcnRUaW1lPT09bnVsbCYmdGhpcy5fbWl4ZXIuX2lzQWN0aXZlQWN0aW9uKHRoaXMpfWlzU2NoZWR1bGVkKCl7cmV0dXJuIHRoaXMuX21peGVyLl9pc0FjdGl2ZUFjdGlvbih0aGlzKX1zdGFydEF0KHQpe3JldHVybiB0aGlzLl9zdGFydFRpbWU9dCx0aGlzfXNldExvb3AodCxyKXtyZXR1cm4gdGhpcy5sb29wPXQsdGhpcy5yZXBldGl0aW9ucz1yLHRoaXN9c2V0RWZmZWN0aXZlV2VpZ2h0KHQpe3JldHVybiB0aGlzLndlaWdodD10LHRoaXMuX2VmZmVjdGl2ZVdlaWdodD10aGlzLmVuYWJsZWQ/dDowLHRoaXMuc3RvcEZhZGluZygpfWdldEVmZmVjdGl2ZVdlaWdodCgpe3JldHVybiB0aGlzLl9lZmZlY3RpdmVXZWlnaHR9ZmFkZUluKHQpe3JldHVybiB0aGlzLl9zY2hlZHVsZUZhZGluZyh0LDAsMSl9ZmFkZU91dCh0KXtyZXR1cm4gdGhpcy5fc2NoZWR1bGVGYWRpbmcodCwxLDApfWNyb3NzRmFkZUZyb20odCxyLG4pe2lmKHQuZmFkZU91dChyKSx0aGlzLmZhZGVJbihyKSxuKXtsZXQgaT10aGlzLl9jbGlwLmR1cmF0aW9uLG89dC5fY2xpcC5kdXJhdGlvbixhPW8vaSxzPWkvbzt0LndhcnAoMSxhLHIpLHRoaXMud2FycChzLDEscil9cmV0dXJuIHRoaXN9Y3Jvc3NGYWRlVG8odCxyLG4pe3JldHVybiB0LmNyb3NzRmFkZUZyb20odGhpcyxyLG4pfXN0b3BGYWRpbmcoKXtsZXQgdD10aGlzLl93ZWlnaHRJbnRlcnBvbGFudDtyZXR1cm4gdCE9PW51bGwmJih0aGlzLl93ZWlnaHRJbnRlcnBvbGFudD1udWxsLHRoaXMuX21peGVyLl90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudCh0KSksdGhpc31zZXRFZmZlY3RpdmVUaW1lU2NhbGUodCl7cmV0dXJuIHRoaXMudGltZVNjYWxlPXQsdGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlPXRoaXMucGF1c2VkPzA6dCx0aGlzLnN0b3BXYXJwaW5nKCl9Z2V0RWZmZWN0aXZlVGltZVNjYWxlKCl7cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZX1zZXREdXJhdGlvbih0KXtyZXR1cm4gdGhpcy50aW1lU2NhbGU9dGhpcy5fY2xpcC5kdXJhdGlvbi90LHRoaXMuc3RvcFdhcnBpbmcoKX1zeW5jV2l0aCh0KXtyZXR1cm4gdGhpcy50aW1lPXQudGltZSx0aGlzLnRpbWVTY2FsZT10LnRpbWVTY2FsZSx0aGlzLnN0b3BXYXJwaW5nKCl9aGFsdCh0KXtyZXR1cm4gdGhpcy53YXJwKHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZSwwLHQpfXdhcnAodCxyLG4pe2xldCBpPXRoaXMuX21peGVyLG89aS50aW1lLGE9dGhpcy50aW1lU2NhbGUscz10aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudDtzPT09bnVsbCYmKHM9aS5fbGVuZENvbnRyb2xJbnRlcnBvbGFudCgpLHRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50PXMpO2xldCBsPXMucGFyYW1ldGVyUG9zaXRpb25zLGM9cy5zYW1wbGVWYWx1ZXM7cmV0dXJuIGxbMF09byxsWzFdPW8rbixjWzBdPXQvYSxjWzFdPXIvYSx0aGlzfXN0b3BXYXJwaW5nKCl7bGV0IHQ9dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7cmV0dXJuIHQhPT1udWxsJiYodGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ9bnVsbCx0aGlzLl9taXhlci5fdGFrZUJhY2tDb250cm9sSW50ZXJwb2xhbnQodCkpLHRoaXN9Z2V0TWl4ZXIoKXtyZXR1cm4gdGhpcy5fbWl4ZXJ9Z2V0Q2xpcCgpe3JldHVybiB0aGlzLl9jbGlwfWdldFJvb3QoKXtyZXR1cm4gdGhpcy5fbG9jYWxSb290fHx0aGlzLl9taXhlci5fcm9vdH1fdXBkYXRlKHQscixuLGkpe2lmKCF0aGlzLmVuYWJsZWQpe3RoaXMuX3VwZGF0ZVdlaWdodCh0KTtyZXR1cm59bGV0IG89dGhpcy5fc3RhcnRUaW1lO2lmKG8hPT1udWxsKXtsZXQgbD0odC1vKSpuO2lmKGw8MHx8bj09PTApcmV0dXJuO3RoaXMuX3N0YXJ0VGltZT1udWxsLHI9bipsfXIqPXRoaXMuX3VwZGF0ZVRpbWVTY2FsZSh0KTtsZXQgYT10aGlzLl91cGRhdGVUaW1lKHIpLHM9dGhpcy5fdXBkYXRlV2VpZ2h0KHQpO2lmKHM+MCl7bGV0IGw9dGhpcy5faW50ZXJwb2xhbnRzLGM9dGhpcy5fcHJvcGVydHlCaW5kaW5ncztzd2l0Y2godGhpcy5ibGVuZE1vZGUpe2Nhc2Uga2h0OmZvcihsZXQgdT0wLGg9bC5sZW5ndGg7dSE9PWg7Kyt1KWxbdV0uZXZhbHVhdGUoYSksY1t1XS5hY2N1bXVsYXRlQWRkaXRpdmUocyk7YnJlYWs7Y2FzZSAkVTpkZWZhdWx0OmZvcihsZXQgdT0wLGg9bC5sZW5ndGg7dSE9PWg7Kyt1KWxbdV0uZXZhbHVhdGUoYSksY1t1XS5hY2N1bXVsYXRlKGkscyl9fX1fdXBkYXRlV2VpZ2h0KHQpe2xldCByPTA7aWYodGhpcy5lbmFibGVkKXtyPXRoaXMud2VpZ2h0O2xldCBuPXRoaXMuX3dlaWdodEludGVycG9sYW50O2lmKG4hPT1udWxsKXtsZXQgaT1uLmV2YWx1YXRlKHQpWzBdO3IqPWksdD5uLnBhcmFtZXRlclBvc2l0aW9uc1sxXSYmKHRoaXMuc3RvcEZhZGluZygpLGk9PT0wJiYodGhpcy5lbmFibGVkPSExKSl9fXJldHVybiB0aGlzLl9lZmZlY3RpdmVXZWlnaHQ9cixyfV91cGRhdGVUaW1lU2NhbGUodCl7bGV0IHI9MDtpZighdGhpcy5wYXVzZWQpe3I9dGhpcy50aW1lU2NhbGU7bGV0IG49dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7biE9PW51bGwmJihyKj1uLmV2YWx1YXRlKHQpWzBdLHQ+bi5wYXJhbWV0ZXJQb3NpdGlvbnNbMV0mJih0aGlzLnN0b3BXYXJwaW5nKCkscj09PTA/dGhpcy5wYXVzZWQ9ITA6dGhpcy50aW1lU2NhbGU9cikpfXJldHVybiB0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9cixyfV91cGRhdGVUaW1lKHQpe2xldCByPXRoaXMuX2NsaXAuZHVyYXRpb24sbj10aGlzLmxvb3AsaT10aGlzLnRpbWUrdCxvPXRoaXMuX2xvb3BDb3VudCxhPW49PT1MZmU7aWYodD09PTApcmV0dXJuIG89PT0tMT9pOmEmJihvJjEpPT09MT9yLWk6aTtpZihuPT09UGZlKXtvPT09LTEmJih0aGlzLl9sb29wQ291bnQ9MCx0aGlzLl9zZXRFbmRpbmdzKCEwLCEwLCExKSk7dDp7aWYoaT49cilpPXI7ZWxzZSBpZihpPDApaT0wO2Vsc2V7dGhpcy50aW1lPWk7YnJlYWsgdH10aGlzLmNsYW1wV2hlbkZpbmlzaGVkP3RoaXMucGF1c2VkPSEwOnRoaXMuZW5hYmxlZD0hMSx0aGlzLnRpbWU9aSx0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHt0eXBlOiJmaW5pc2hlZCIsYWN0aW9uOnRoaXMsZGlyZWN0aW9uOnQ8MD8tMToxfSl9fWVsc2V7aWYobz09PS0xJiYodD49MD8obz0wLHRoaXMuX3NldEVuZGluZ3MoITAsdGhpcy5yZXBldGl0aW9ucz09PTAsYSkpOnRoaXMuX3NldEVuZGluZ3ModGhpcy5yZXBldGl0aW9ucz09PTAsITAsYSkpLGk+PXJ8fGk8MCl7bGV0IHM9TWF0aC5mbG9vcihpL3IpO2ktPXIqcyxvKz1NYXRoLmFicyhzKTtsZXQgbD10aGlzLnJlcGV0aXRpb25zLW87aWYobDw9MCl0aGlzLmNsYW1wV2hlbkZpbmlzaGVkP3RoaXMucGF1c2VkPSEwOnRoaXMuZW5hYmxlZD0hMSxpPXQ+MD9yOjAsdGhpcy50aW1lPWksdGhpcy5fbWl4ZXIuZGlzcGF0Y2hFdmVudCh7dHlwZToiZmluaXNoZWQiLGFjdGlvbjp0aGlzLGRpcmVjdGlvbjp0PjA/MTotMX0pO2Vsc2V7aWYobD09PTEpe2xldCBjPXQ8MDt0aGlzLl9zZXRFbmRpbmdzKGMsIWMsYSl9ZWxzZSB0aGlzLl9zZXRFbmRpbmdzKCExLCExLGEpO3RoaXMuX2xvb3BDb3VudD1vLHRoaXMudGltZT1pLHRoaXMuX21peGVyLmRpc3BhdGNoRXZlbnQoe3R5cGU6Imxvb3AiLGFjdGlvbjp0aGlzLGxvb3BEZWx0YTpzfSl9fWVsc2UgdGhpcy50aW1lPWk7aWYoYSYmKG8mMSk9PT0xKXJldHVybiByLWl9cmV0dXJuIGl9X3NldEVuZGluZ3ModCxyLG4pe2xldCBpPXRoaXMuX2ludGVycG9sYW50U2V0dGluZ3M7bj8oaS5lbmRpbmdTdGFydD1DMSxpLmVuZGluZ0VuZD1DMSk6KHQ/aS5lbmRpbmdTdGFydD10aGlzLnplcm9TbG9wZUF0U3RhcnQ/QzE6VDE6aS5lbmRpbmdTdGFydD1KUCxyP2kuZW5kaW5nRW5kPXRoaXMuemVyb1Nsb3BlQXRFbmQ/QzE6VDE6aS5lbmRpbmdFbmQ9SlApfV9zY2hlZHVsZUZhZGluZyh0LHIsbil7bGV0IGk9dGhpcy5fbWl4ZXIsbz1pLnRpbWUsYT10aGlzLl93ZWlnaHRJbnRlcnBvbGFudDthPT09bnVsbCYmKGE9aS5fbGVuZENvbnRyb2xJbnRlcnBvbGFudCgpLHRoaXMuX3dlaWdodEludGVycG9sYW50PWEpO2xldCBzPWEucGFyYW1ldGVyUG9zaXRpb25zLGw9YS5zYW1wbGVWYWx1ZXM7cmV0dXJuIHNbMF09byxsWzBdPXIsc1sxXT1vK3QsbFsxXT1uLHRoaXN9fSxWVT1jbGFzcyBleHRlbmRzIHFze2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fcm9vdD10LHRoaXMuX2luaXRNZW1vcnlNYW5hZ2VyKCksdGhpcy5fYWNjdUluZGV4PTAsdGhpcy50aW1lPTAsdGhpcy50aW1lU2NhbGU9MX1fYmluZEFjdGlvbih0LHIpe2xldCBuPXQuX2xvY2FsUm9vdHx8dGhpcy5fcm9vdCxpPXQuX2NsaXAudHJhY2tzLG89aS5sZW5ndGgsYT10Ll9wcm9wZXJ0eUJpbmRpbmdzLHM9dC5faW50ZXJwb2xhbnRzLGw9bi51dWlkLGM9dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLHU9Y1tsXTt1PT09dm9pZCAwJiYodT17fSxjW2xdPXUpO2ZvcihsZXQgaD0wO2ghPT1vOysraCl7bGV0IGY9aVtoXSxwPWYubmFtZSxkPXVbcF07aWYoZCE9PXZvaWQgMCkrK2QucmVmZXJlbmNlQ291bnQsYVtoXT1kO2Vsc2V7aWYoZD1hW2hdLGQhPT12b2lkIDApe2QuX2NhY2hlSW5kZXg9PT1udWxsJiYoKytkLnJlZmVyZW5jZUNvdW50LHRoaXMuX2FkZEluYWN0aXZlQmluZGluZyhkLGwscCkpO2NvbnRpbnVlfWxldCBnPXImJnIuX3Byb3BlcnR5QmluZGluZ3NbaF0uYmluZGluZy5wYXJzZWRQYXRoO2Q9bmV3IEJVKENyLmNyZWF0ZShuLHAsZyksZi5WYWx1ZVR5cGVOYW1lLGYuZ2V0VmFsdWVTaXplKCkpLCsrZC5yZWZlcmVuY2VDb3VudCx0aGlzLl9hZGRJbmFjdGl2ZUJpbmRpbmcoZCxsLHApLGFbaF09ZH1zW2hdLnJlc3VsdEJ1ZmZlcj1kLmJ1ZmZlcn19X2FjdGl2YXRlQWN0aW9uKHQpe2lmKCF0aGlzLl9pc0FjdGl2ZUFjdGlvbih0KSl7aWYodC5fY2FjaGVJbmRleD09PW51bGwpe2xldCBuPSh0Ll9sb2NhbFJvb3R8fHRoaXMuX3Jvb3QpLnV1aWQsaT10Ll9jbGlwLnV1aWQsbz10aGlzLl9hY3Rpb25zQnlDbGlwW2ldO3RoaXMuX2JpbmRBY3Rpb24odCxvJiZvLmtub3duQWN0aW9uc1swXSksdGhpcy5fYWRkSW5hY3RpdmVBY3Rpb24odCxpLG4pfWxldCByPXQuX3Byb3BlcnR5QmluZGluZ3M7Zm9yKGxldCBuPTAsaT1yLmxlbmd0aDtuIT09aTsrK24pe2xldCBvPXJbbl07by51c2VDb3VudCsrPT09MCYmKHRoaXMuX2xlbmRCaW5kaW5nKG8pLG8uc2F2ZU9yaWdpbmFsU3RhdGUoKSl9dGhpcy5fbGVuZEFjdGlvbih0KX19X2RlYWN0aXZhdGVBY3Rpb24odCl7aWYodGhpcy5faXNBY3RpdmVBY3Rpb24odCkpe2xldCByPXQuX3Byb3BlcnR5QmluZGluZ3M7Zm9yKGxldCBuPTAsaT1yLmxlbmd0aDtuIT09aTsrK24pe2xldCBvPXJbbl07LS1vLnVzZUNvdW50PT09MCYmKG8ucmVzdG9yZU9yaWdpbmFsU3RhdGUoKSx0aGlzLl90YWtlQmFja0JpbmRpbmcobykpfXRoaXMuX3Rha2VCYWNrQWN0aW9uKHQpfX1faW5pdE1lbW9yeU1hbmFnZXIoKXt0aGlzLl9hY3Rpb25zPVtdLHRoaXMuX25BY3RpdmVBY3Rpb25zPTAsdGhpcy5fYWN0aW9uc0J5Q2xpcD17fSx0aGlzLl9iaW5kaW5ncz1bXSx0aGlzLl9uQWN0aXZlQmluZGluZ3M9MCx0aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWU9e30sdGhpcy5fY29udHJvbEludGVycG9sYW50cz1bXSx0aGlzLl9uQWN0aXZlQ29udHJvbEludGVycG9sYW50cz0wO2xldCB0PXRoaXM7dGhpcy5zdGF0cz17YWN0aW9uczp7Z2V0IHRvdGFsKCl7cmV0dXJuIHQuX2FjdGlvbnMubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gdC5fbkFjdGl2ZUFjdGlvbnN9fSxiaW5kaW5nczp7Z2V0IHRvdGFsKCl7cmV0dXJuIHQuX2JpbmRpbmdzLmxlbmd0aH0sZ2V0IGluVXNlKCl7cmV0dXJuIHQuX25BY3RpdmVCaW5kaW5nc319LGNvbnRyb2xJbnRlcnBvbGFudHM6e2dldCB0b3RhbCgpe3JldHVybiB0Ll9jb250cm9sSW50ZXJwb2xhbnRzLmxlbmd0aH0sZ2V0IGluVXNlKCl7cmV0dXJuIHQuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzfX19fV9pc0FjdGl2ZUFjdGlvbih0KXtsZXQgcj10Ll9jYWNoZUluZGV4O3JldHVybiByIT09bnVsbCYmcjx0aGlzLl9uQWN0aXZlQWN0aW9uc31fYWRkSW5hY3RpdmVBY3Rpb24odCxyLG4pe2xldCBpPXRoaXMuX2FjdGlvbnMsbz10aGlzLl9hY3Rpb25zQnlDbGlwLGE9b1tyXTtpZihhPT09dm9pZCAwKWE9e2tub3duQWN0aW9uczpbdF0sYWN0aW9uQnlSb290Ont9fSx0Ll9ieUNsaXBDYWNoZUluZGV4PTAsb1tyXT1hO2Vsc2V7bGV0IHM9YS5rbm93bkFjdGlvbnM7dC5fYnlDbGlwQ2FjaGVJbmRleD1zLmxlbmd0aCxzLnB1c2godCl9dC5fY2FjaGVJbmRleD1pLmxlbmd0aCxpLnB1c2godCksYS5hY3Rpb25CeVJvb3Rbbl09dH1fcmVtb3ZlSW5hY3RpdmVBY3Rpb24odCl7bGV0IHI9dGhpcy5fYWN0aW9ucyxuPXJbci5sZW5ndGgtMV0saT10Ll9jYWNoZUluZGV4O24uX2NhY2hlSW5kZXg9aSxyW2ldPW4sci5wb3AoKSx0Ll9jYWNoZUluZGV4PW51bGw7bGV0IG89dC5fY2xpcC51dWlkLGE9dGhpcy5fYWN0aW9uc0J5Q2xpcCxzPWFbb10sbD1zLmtub3duQWN0aW9ucyxjPWxbbC5sZW5ndGgtMV0sdT10Ll9ieUNsaXBDYWNoZUluZGV4O2MuX2J5Q2xpcENhY2hlSW5kZXg9dSxsW3VdPWMsbC5wb3AoKSx0Ll9ieUNsaXBDYWNoZUluZGV4PW51bGw7bGV0IGg9cy5hY3Rpb25CeVJvb3QsZj0odC5fbG9jYWxSb290fHx0aGlzLl9yb290KS51dWlkO2RlbGV0ZSBoW2ZdLGwubGVuZ3RoPT09MCYmZGVsZXRlIGFbb10sdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nc0ZvckFjdGlvbih0KX1fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nc0ZvckFjdGlvbih0KXtsZXQgcj10Ll9wcm9wZXJ0eUJpbmRpbmdzO2ZvcihsZXQgbj0wLGk9ci5sZW5ndGg7biE9PWk7KytuKXtsZXQgbz1yW25dOy0tby5yZWZlcmVuY2VDb3VudD09PTAmJnRoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZyhvKX19X2xlbmRBY3Rpb24odCl7bGV0IHI9dGhpcy5fYWN0aW9ucyxuPXQuX2NhY2hlSW5kZXgsaT10aGlzLl9uQWN0aXZlQWN0aW9ucysrLG89cltpXTt0Ll9jYWNoZUluZGV4PWkscltpXT10LG8uX2NhY2hlSW5kZXg9bixyW25dPW99X3Rha2VCYWNrQWN0aW9uKHQpe2xldCByPXRoaXMuX2FjdGlvbnMsbj10Ll9jYWNoZUluZGV4LGk9LS10aGlzLl9uQWN0aXZlQWN0aW9ucyxvPXJbaV07dC5fY2FjaGVJbmRleD1pLHJbaV09dCxvLl9jYWNoZUluZGV4PW4scltuXT1vfV9hZGRJbmFjdGl2ZUJpbmRpbmcodCxyLG4pe2xldCBpPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZSxvPXRoaXMuX2JpbmRpbmdzLGE9aVtyXTthPT09dm9pZCAwJiYoYT17fSxpW3JdPWEpLGFbbl09dCx0Ll9jYWNoZUluZGV4PW8ubGVuZ3RoLG8ucHVzaCh0KX1fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nKHQpe2xldCByPXRoaXMuX2JpbmRpbmdzLG49dC5iaW5kaW5nLGk9bi5yb290Tm9kZS51dWlkLG89bi5wYXRoLGE9dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLHM9YVtpXSxsPXJbci5sZW5ndGgtMV0sYz10Ll9jYWNoZUluZGV4O2wuX2NhY2hlSW5kZXg9YyxyW2NdPWwsci5wb3AoKSxkZWxldGUgc1tvXSxPYmplY3Qua2V5cyhzKS5sZW5ndGg9PT0wJiZkZWxldGUgYVtpXX1fbGVuZEJpbmRpbmcodCl7bGV0IHI9dGhpcy5fYmluZGluZ3Msbj10Ll9jYWNoZUluZGV4LGk9dGhpcy5fbkFjdGl2ZUJpbmRpbmdzKyssbz1yW2ldO3QuX2NhY2hlSW5kZXg9aSxyW2ldPXQsby5fY2FjaGVJbmRleD1uLHJbbl09b31fdGFrZUJhY2tCaW5kaW5nKHQpe2xldCByPXRoaXMuX2JpbmRpbmdzLG49dC5fY2FjaGVJbmRleCxpPS0tdGhpcy5fbkFjdGl2ZUJpbmRpbmdzLG89cltpXTt0Ll9jYWNoZUluZGV4PWkscltpXT10LG8uX2NhY2hlSW5kZXg9bixyW25dPW99X2xlbmRDb250cm9sSW50ZXJwb2xhbnQoKXtsZXQgdD10aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzLHI9dGhpcy5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHMrKyxuPXRbcl07cmV0dXJuIG49PT12b2lkIDAmJihuPW5ldyBTNihuZXcgRmxvYXQzMkFycmF5KDIpLG5ldyBGbG9hdDMyQXJyYXkoMiksMSx0aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzUmVzdWx0QnVmZmVyKSxuLl9fY2FjaGVJbmRleD1yLHRbcl09biksbn1fdGFrZUJhY2tDb250cm9sSW50ZXJwb2xhbnQodCl7bGV0IHI9dGhpcy5fY29udHJvbEludGVycG9sYW50cyxuPXQuX19jYWNoZUluZGV4LGk9LS10aGlzLl9uQWN0aXZlQ29udHJvbEludGVycG9sYW50cyxvPXJbaV07dC5fX2NhY2hlSW5kZXg9aSxyW2ldPXQsby5fX2NhY2hlSW5kZXg9bixyW25dPW99Y2xpcEFjdGlvbih0LHIsbil7bGV0IGk9cnx8dGhpcy5fcm9vdCxvPWkudXVpZCxhPXR5cGVvZiB0PT0ic3RyaW5nIj90eC5maW5kQnlOYW1lKGksdCk6dCxzPWEhPT1udWxsP2EudXVpZDp0LGw9dGhpcy5fYWN0aW9uc0J5Q2xpcFtzXSxjPW51bGw7aWYobj09PXZvaWQgMCYmKGEhPT1udWxsP249YS5ibGVuZE1vZGU6bj0kVSksbCE9PXZvaWQgMCl7bGV0IGg9bC5hY3Rpb25CeVJvb3Rbb107aWYoaCE9PXZvaWQgMCYmaC5ibGVuZE1vZGU9PT1uKXJldHVybiBoO2M9bC5rbm93bkFjdGlvbnNbMF0sYT09PW51bGwmJihhPWMuX2NsaXApfWlmKGE9PT1udWxsKXJldHVybiBudWxsO2xldCB1PW5ldyBmaHQodGhpcyxhLHIsbik7cmV0dXJuIHRoaXMuX2JpbmRBY3Rpb24odSxjKSx0aGlzLl9hZGRJbmFjdGl2ZUFjdGlvbih1LHMsbyksdX1leGlzdGluZ0FjdGlvbih0LHIpe2xldCBuPXJ8fHRoaXMuX3Jvb3QsaT1uLnV1aWQsbz10eXBlb2YgdD09InN0cmluZyI/dHguZmluZEJ5TmFtZShuLHQpOnQsYT1vP28udXVpZDp0LHM9dGhpcy5fYWN0aW9uc0J5Q2xpcFthXTtyZXR1cm4gcyE9PXZvaWQgMCYmcy5hY3Rpb25CeVJvb3RbaV18fG51bGx9c3RvcEFsbEFjdGlvbigpe2xldCB0PXRoaXMuX2FjdGlvbnMscj10aGlzLl9uQWN0aXZlQWN0aW9ucztmb3IobGV0IG49ci0xO24+PTA7LS1uKXRbbl0uc3RvcCgpO3JldHVybiB0aGlzfXVwZGF0ZSh0KXt0Kj10aGlzLnRpbWVTY2FsZTtsZXQgcj10aGlzLl9hY3Rpb25zLG49dGhpcy5fbkFjdGl2ZUFjdGlvbnMsaT10aGlzLnRpbWUrPXQsbz1NYXRoLnNpZ24odCksYT10aGlzLl9hY2N1SW5kZXhePTE7Zm9yKGxldCBjPTA7YyE9PW47KytjKXJbY10uX3VwZGF0ZShpLHQsbyxhKTtsZXQgcz10aGlzLl9iaW5kaW5ncyxsPXRoaXMuX25BY3RpdmVCaW5kaW5ncztmb3IobGV0IGM9MDtjIT09bDsrK2Mpc1tjXS5hcHBseShhKTtyZXR1cm4gdGhpc31zZXRUaW1lKHQpe3RoaXMudGltZT0wO2ZvcihsZXQgcj0wO3I8dGhpcy5fYWN0aW9ucy5sZW5ndGg7cisrKXRoaXMuX2FjdGlvbnNbcl0udGltZT0wO3JldHVybiB0aGlzLnVwZGF0ZSh0KX1nZXRSb290KCl7cmV0dXJuIHRoaXMuX3Jvb3R9dW5jYWNoZUNsaXAodCl7bGV0IHI9dGhpcy5fYWN0aW9ucyxuPXQudXVpZCxpPXRoaXMuX2FjdGlvbnNCeUNsaXAsbz1pW25dO2lmKG8hPT12b2lkIDApe2xldCBhPW8ua25vd25BY3Rpb25zO2ZvcihsZXQgcz0wLGw9YS5sZW5ndGg7cyE9PWw7KytzKXtsZXQgYz1hW3NdO3RoaXMuX2RlYWN0aXZhdGVBY3Rpb24oYyk7bGV0IHU9Yy5fY2FjaGVJbmRleCxoPXJbci5sZW5ndGgtMV07Yy5fY2FjaGVJbmRleD1udWxsLGMuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbCxoLl9jYWNoZUluZGV4PXUsclt1XT1oLHIucG9wKCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nc0ZvckFjdGlvbihjKX1kZWxldGUgaVtuXX19dW5jYWNoZVJvb3QodCl7bGV0IHI9dC51dWlkLG49dGhpcy5fYWN0aW9uc0J5Q2xpcDtmb3IobGV0IGEgaW4gbil7bGV0IHM9blthXS5hY3Rpb25CeVJvb3QsbD1zW3JdO2whPT12b2lkIDAmJih0aGlzLl9kZWFjdGl2YXRlQWN0aW9uKGwpLHRoaXMuX3JlbW92ZUluYWN0aXZlQWN0aW9uKGwpKX1sZXQgaT10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUsbz1pW3JdO2lmKG8hPT12b2lkIDApZm9yKGxldCBhIGluIG8pe2xldCBzPW9bYV07cy5yZXN0b3JlT3JpZ2luYWxTdGF0ZSgpLHRoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZyhzKX19dW5jYWNoZUFjdGlvbih0LHIpe2xldCBuPXRoaXMuZXhpc3RpbmdBY3Rpb24odCxyKTtuIT09bnVsbCYmKHRoaXMuX2RlYWN0aXZhdGVBY3Rpb24obiksdGhpcy5fcmVtb3ZlSW5hY3RpdmVBY3Rpb24obikpfX07VlUucHJvdG90eXBlLl9jb250cm9sSW50ZXJwb2xhbnRzUmVzdWx0QnVmZmVyPW5ldyBGbG9hdDMyQXJyYXkoMSk7dmFyIGdNPWNsYXNze2NvbnN0cnVjdG9yKHQpe3R5cGVvZiB0PT0ic3RyaW5nIiYmKGNvbnNvbGUud2FybigiVEhSRUUuVW5pZm9ybTogVHlwZSBwYXJhbWV0ZXIgaXMgbm8gbG9uZ2VyIG5lZWRlZC4iKSx0PWFyZ3VtZW50c1sxXSksdGhpcy52YWx1ZT10fWNsb25lKCl7cmV0dXJuIG5ldyBnTSh0aGlzLnZhbHVlLmNsb25lPT09dm9pZCAwP3RoaXMudmFsdWU6dGhpcy52YWx1ZS5jbG9uZSgpKX19LFVVPWNsYXNzIGV4dGVuZHMgcm17Y29uc3RydWN0b3IodCxyLG49MSl7c3VwZXIodCxyKSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9bn1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMubWVzaFBlckF0dHJpYnV0ZT10Lm1lc2hQZXJBdHRyaWJ1dGUsdGhpc31jbG9uZSh0KXtsZXQgcj1zdXBlci5jbG9uZSh0KTtyZXR1cm4gci5tZXNoUGVyQXR0cmlidXRlPXRoaXMubWVzaFBlckF0dHJpYnV0ZSxyfXRvSlNPTih0KXtsZXQgcj1zdXBlci50b0pTT04odCk7cmV0dXJuIHIuaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcj0hMCxyLm1lc2hQZXJBdHRyaWJ1dGU9dGhpcy5tZXNoUGVyQXR0cmlidXRlLHJ9fTtVVS5wcm90b3R5cGUuaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcj0hMDt2YXIgcVU9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4saSxvKXt0aGlzLmJ1ZmZlcj10LHRoaXMudHlwZT1yLHRoaXMuaXRlbVNpemU9bix0aGlzLmVsZW1lbnRTaXplPWksdGhpcy5jb3VudD1vLHRoaXMudmVyc2lvbj0wfXNldCBuZWVkc1VwZGF0ZSh0KXt0PT09ITAmJnRoaXMudmVyc2lvbisrfXNldEJ1ZmZlcih0KXtyZXR1cm4gdGhpcy5idWZmZXI9dCx0aGlzfXNldFR5cGUodCxyKXtyZXR1cm4gdGhpcy50eXBlPXQsdGhpcy5lbGVtZW50U2l6ZT1yLHRoaXN9c2V0SXRlbVNpemUodCl7cmV0dXJuIHRoaXMuaXRlbVNpemU9dCx0aGlzfXNldENvdW50KHQpe3JldHVybiB0aGlzLmNvdW50PXQsdGhpc319O3FVLnByb3RvdHlwZS5pc0dMQnVmZmVyQXR0cmlidXRlPSEwO3ZhciBwaHQ9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG49MCxpPTEvMCl7dGhpcy5yYXk9bmV3IFFmKHQsciksdGhpcy5uZWFyPW4sdGhpcy5mYXI9aSx0aGlzLmNhbWVyYT1udWxsLHRoaXMubGF5ZXJzPW5ldyBYMyx0aGlzLnBhcmFtcz17TWVzaDp7fSxMaW5lOnt0aHJlc2hvbGQ6MX0sTE9EOnt9LFBvaW50czp7dGhyZXNob2xkOjF9LFNwcml0ZTp7fX19c2V0KHQscil7dGhpcy5yYXkuc2V0KHQscil9c2V0RnJvbUNhbWVyYSh0LHIpe3ImJnIuaXNQZXJzcGVjdGl2ZUNhbWVyYT8odGhpcy5yYXkub3JpZ2luLnNldEZyb21NYXRyaXhQb3NpdGlvbihyLm1hdHJpeFdvcmxkKSx0aGlzLnJheS5kaXJlY3Rpb24uc2V0KHQueCx0LnksLjUpLnVucHJvamVjdChyKS5zdWIodGhpcy5yYXkub3JpZ2luKS5ub3JtYWxpemUoKSx0aGlzLmNhbWVyYT1yKTpyJiZyLmlzT3J0aG9ncmFwaGljQ2FtZXJhPyh0aGlzLnJheS5vcmlnaW4uc2V0KHQueCx0LnksKHIubmVhcityLmZhcikvKHIubmVhci1yLmZhcikpLnVucHJvamVjdChyKSx0aGlzLnJheS5kaXJlY3Rpb24uc2V0KDAsMCwtMSkudHJhbnNmb3JtRGlyZWN0aW9uKHIubWF0cml4V29ybGQpLHRoaXMuY2FtZXJhPXIpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLlJheWNhc3RlcjogVW5zdXBwb3J0ZWQgY2FtZXJhIHR5cGU6ICIrci50eXBlKX1pbnRlcnNlY3RPYmplY3QodCxyPSEwLG49W10pe3JldHVybiBkaHQodCx0aGlzLG4sciksbi5zb3J0KExoZSksbn1pbnRlcnNlY3RPYmplY3RzKHQscj0hMCxuPVtdKXtmb3IobGV0IGk9MCxvPXQubGVuZ3RoO2k8bztpKyspZGh0KHRbaV0sdGhpcyxuLHIpO3JldHVybiBuLnNvcnQoTGhlKSxufX07ZnVuY3Rpb24gTGhlKGUsdCl7cmV0dXJuIGUuZGlzdGFuY2UtdC5kaXN0YW5jZX1mdW5jdGlvbiBkaHQoZSx0LHIsbil7aWYoZS5sYXllcnMudGVzdCh0LmxheWVycykmJmUucmF5Y2FzdCh0LHIpLG49PT0hMCl7bGV0IGk9ZS5jaGlsZHJlbjtmb3IobGV0IG89MCxhPWkubGVuZ3RoO288YTtvKyspZGh0KGlbb10sdCxyLCEwKX19dmFyIF9NPWNsYXNze2NvbnN0cnVjdG9yKHQ9MSxyPTAsbj0wKXtyZXR1cm4gdGhpcy5yYWRpdXM9dCx0aGlzLnBoaT1yLHRoaXMudGhldGE9bix0aGlzfXNldCh0LHIsbil7cmV0dXJuIHRoaXMucmFkaXVzPXQsdGhpcy5waGk9cix0aGlzLnRoZXRhPW4sdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLnJhZGl1cz10LnJhZGl1cyx0aGlzLnBoaT10LnBoaSx0aGlzLnRoZXRhPXQudGhldGEsdGhpc31tYWtlU2FmZSgpe3JldHVybiB0aGlzLnBoaT1NYXRoLm1heCgxZS02LE1hdGgubWluKE1hdGguUEktMWUtNix0aGlzLnBoaSkpLHRoaXN9c2V0RnJvbVZlY3RvcjModCl7cmV0dXJuIHRoaXMuc2V0RnJvbUNhcnRlc2lhbkNvb3Jkcyh0LngsdC55LHQueil9c2V0RnJvbUNhcnRlc2lhbkNvb3Jkcyh0LHIsbil7cmV0dXJuIHRoaXMucmFkaXVzPU1hdGguc3FydCh0KnQrcipyK24qbiksdGhpcy5yYWRpdXM9PT0wPyh0aGlzLnRoZXRhPTAsdGhpcy5waGk9MCk6KHRoaXMudGhldGE9TWF0aC5hdGFuMih0LG4pLHRoaXMucGhpPU1hdGguYWNvcyhabyhyL3RoaXMucmFkaXVzLC0xLDEpKSksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fSxtaHQ9Y2xhc3N7Y29uc3RydWN0b3IodD0xLHI9MCxuPTApe3JldHVybiB0aGlzLnJhZGl1cz10LHRoaXMudGhldGE9cix0aGlzLnk9bix0aGlzfXNldCh0LHIsbil7cmV0dXJuIHRoaXMucmFkaXVzPXQsdGhpcy50aGV0YT1yLHRoaXMueT1uLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5yYWRpdXM9dC5yYWRpdXMsdGhpcy50aGV0YT10LnRoZXRhLHRoaXMueT10LnksdGhpc31zZXRGcm9tVmVjdG9yMyh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tQ2FydGVzaWFuQ29vcmRzKHQueCx0LnksdC56KX1zZXRGcm9tQ2FydGVzaWFuQ29vcmRzKHQscixuKXtyZXR1cm4gdGhpcy5yYWRpdXM9TWF0aC5zcXJ0KHQqdCtuKm4pLHRoaXMudGhldGE9TWF0aC5hdGFuMih0LG4pLHRoaXMueT1yLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfX0sa2hlPW5ldyBMdCxLMD1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBMdCgxLzAsMS8wKSxyPW5ldyBMdCgtMS8wLC0xLzApKXt0aGlzLm1pbj10LHRoaXMubWF4PXJ9c2V0KHQscil7cmV0dXJuIHRoaXMubWluLmNvcHkodCksdGhpcy5tYXguY29weShyKSx0aGlzfXNldEZyb21Qb2ludHModCl7dGhpcy5tYWtlRW1wdHkoKTtmb3IobGV0IHI9MCxuPXQubGVuZ3RoO3I8bjtyKyspdGhpcy5leHBhbmRCeVBvaW50KHRbcl0pO3JldHVybiB0aGlzfXNldEZyb21DZW50ZXJBbmRTaXplKHQscil7bGV0IG49a2hlLmNvcHkocikubXVsdGlwbHlTY2FsYXIoLjUpO3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLnN1YihuKSx0aGlzLm1heC5jb3B5KHQpLmFkZChuKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQubWluKSx0aGlzLm1heC5jb3B5KHQubWF4KSx0aGlzfW1ha2VFbXB0eSgpe3JldHVybiB0aGlzLm1pbi54PXRoaXMubWluLnk9MS8wLHRoaXMubWF4Lng9dGhpcy5tYXgueT0tMS8wLHRoaXN9aXNFbXB0eSgpe3JldHVybiB0aGlzLm1heC54PHRoaXMubWluLnh8fHRoaXMubWF4Lnk8dGhpcy5taW4ueX1nZXRDZW50ZXIodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCk6dC5hZGRWZWN0b3JzKHRoaXMubWluLHRoaXMubWF4KS5tdWx0aXBseVNjYWxhciguNSl9Z2V0U2l6ZSh0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dC5zZXQoMCwwKTp0LnN1YlZlY3RvcnModGhpcy5tYXgsdGhpcy5taW4pfWV4cGFuZEJ5UG9pbnQodCl7cmV0dXJuIHRoaXMubWluLm1pbih0KSx0aGlzLm1heC5tYXgodCksdGhpc31leHBhbmRCeVZlY3Rvcih0KXtyZXR1cm4gdGhpcy5taW4uc3ViKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWV4cGFuZEJ5U2NhbGFyKHQpe3JldHVybiB0aGlzLm1pbi5hZGRTY2FsYXIoLXQpLHRoaXMubWF4LmFkZFNjYWxhcih0KSx0aGlzfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuISh0Lng8dGhpcy5taW4ueHx8dC54PnRoaXMubWF4Lnh8fHQueTx0aGlzLm1pbi55fHx0Lnk+dGhpcy5tYXgueSl9Y29udGFpbnNCb3godCl7cmV0dXJuIHRoaXMubWluLng8PXQubWluLngmJnQubWF4Lng8PXRoaXMubWF4LngmJnRoaXMubWluLnk8PXQubWluLnkmJnQubWF4Lnk8PXRoaXMubWF4Lnl9Z2V0UGFyYW1ldGVyKHQscil7cmV0dXJuIHIuc2V0KCh0LngtdGhpcy5taW4ueCkvKHRoaXMubWF4LngtdGhpcy5taW4ueCksKHQueS10aGlzLm1pbi55KS8odGhpcy5tYXgueS10aGlzLm1pbi55KSl9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4hKHQubWF4Lng8dGhpcy5taW4ueHx8dC5taW4ueD50aGlzLm1heC54fHx0Lm1heC55PHRoaXMubWluLnl8fHQubWluLnk+dGhpcy5tYXgueSl9Y2xhbXBQb2ludCh0LHIpe3JldHVybiByLmNvcHkodCkuY2xhbXAodGhpcy5taW4sdGhpcy5tYXgpfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4ga2hlLmNvcHkodCkuY2xhbXAodGhpcy5taW4sdGhpcy5tYXgpLnN1Yih0KS5sZW5ndGgoKX1pbnRlcnNlY3QodCl7cmV0dXJuIHRoaXMubWluLm1heCh0Lm1pbiksdGhpcy5tYXgubWluKHQubWF4KSx0aGlzfXVuaW9uKHQpe3JldHVybiB0aGlzLm1pbi5taW4odC5taW4pLHRoaXMubWF4Lm1heCh0Lm1heCksdGhpc310cmFuc2xhdGUodCl7cmV0dXJuIHRoaXMubWluLmFkZCh0KSx0aGlzLm1heC5hZGQodCksdGhpc31lcXVhbHModCl7cmV0dXJuIHQubWluLmVxdWFscyh0aGlzLm1pbikmJnQubWF4LmVxdWFscyh0aGlzLm1heCl9fTtLMC5wcm90b3R5cGUuaXNCb3gyPSEwO3ZhciBSaGU9bmV3IGosWVY9bmV3IGosR1U9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgaixyPW5ldyBqKXt0aGlzLnN0YXJ0PXQsdGhpcy5lbmQ9cn1zZXQodCxyKXtyZXR1cm4gdGhpcy5zdGFydC5jb3B5KHQpLHRoaXMuZW5kLmNvcHkociksdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLnN0YXJ0LmNvcHkodC5zdGFydCksdGhpcy5lbmQuY29weSh0LmVuZCksdGhpc31nZXRDZW50ZXIodCl7cmV0dXJuIHQuYWRkVmVjdG9ycyh0aGlzLnN0YXJ0LHRoaXMuZW5kKS5tdWx0aXBseVNjYWxhciguNSl9ZGVsdGEodCl7cmV0dXJuIHQuc3ViVmVjdG9ycyh0aGlzLmVuZCx0aGlzLnN0YXJ0KX1kaXN0YW5jZVNxKCl7cmV0dXJuIHRoaXMuc3RhcnQuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5lbmQpfWRpc3RhbmNlKCl7cmV0dXJuIHRoaXMuc3RhcnQuZGlzdGFuY2VUbyh0aGlzLmVuZCl9YXQodCxyKXtyZXR1cm4gdGhpcy5kZWx0YShyKS5tdWx0aXBseVNjYWxhcih0KS5hZGQodGhpcy5zdGFydCl9Y2xvc2VzdFBvaW50VG9Qb2ludFBhcmFtZXRlcih0LHIpe1JoZS5zdWJWZWN0b3JzKHQsdGhpcy5zdGFydCksWVYuc3ViVmVjdG9ycyh0aGlzLmVuZCx0aGlzLnN0YXJ0KTtsZXQgbj1ZVi5kb3QoWVYpLG89WVYuZG90KFJoZSkvbjtyZXR1cm4gciYmKG89Wm8obywwLDEpKSxvfWNsb3Nlc3RQb2ludFRvUG9pbnQodCxyLG4pe2xldCBpPXRoaXMuY2xvc2VzdFBvaW50VG9Qb2ludFBhcmFtZXRlcih0LHIpO3JldHVybiB0aGlzLmRlbHRhKG4pLm11bHRpcGx5U2NhbGFyKGkpLmFkZCh0aGlzLnN0YXJ0KX1hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMuc3RhcnQuYXBwbHlNYXRyaXg0KHQpLHRoaXMuZW5kLmFwcGx5TWF0cml4NCh0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5zdGFydC5lcXVhbHModGhpcy5zdGFydCkmJnQuZW5kLmVxdWFscyh0aGlzLmVuZCl9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfX0sTmhlPW5ldyBqLGdodD1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQscil7c3VwZXIoKSx0aGlzLmxpZ2h0PXQsdGhpcy5saWdodC51cGRhdGVNYXRyaXhXb3JsZCgpLHRoaXMubWF0cml4PXQubWF0cml4V29ybGQsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuY29sb3I9cjtsZXQgbj1uZXcgUGUsaT1bMCwwLDAsMCwwLDEsMCwwLDAsMSwwLDEsMCwwLDAsLTEsMCwxLDAsMCwwLDAsMSwxLDAsMCwwLDAsLTEsMV07Zm9yKGxldCBhPTAscz0xLGw9MzI7YTxsO2ErKyxzKyspe2xldCBjPWEvbCpNYXRoLlBJKjIsdT1zL2wqTWF0aC5QSSoyO2kucHVzaChNYXRoLmNvcyhjKSxNYXRoLnNpbihjKSwxLE1hdGguY29zKHUpLE1hdGguc2luKHUpLDEpfW4uc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKGksMykpO2xldCBvPW5ldyBHaSh7Zm9nOiExLHRvbmVNYXBwZWQ6ITF9KTt0aGlzLmNvbmU9bmV3IFBhKG4sbyksdGhpcy5hZGQodGhpcy5jb25lKSx0aGlzLnVwZGF0ZSgpfWRpc3Bvc2UoKXt0aGlzLmNvbmUuZ2VvbWV0cnkuZGlzcG9zZSgpLHRoaXMuY29uZS5tYXRlcmlhbC5kaXNwb3NlKCl9dXBkYXRlKCl7dGhpcy5saWdodC51cGRhdGVNYXRyaXhXb3JsZCgpO2xldCB0PXRoaXMubGlnaHQuZGlzdGFuY2U/dGhpcy5saWdodC5kaXN0YW5jZToxZTMscj10Kk1hdGgudGFuKHRoaXMubGlnaHQuYW5nbGUpO3RoaXMuY29uZS5zY2FsZS5zZXQocixyLHQpLE5oZS5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5saWdodC50YXJnZXQubWF0cml4V29ybGQpLHRoaXMuY29uZS5sb29rQXQoTmhlKSx0aGlzLmNvbG9yIT09dm9pZCAwP3RoaXMuY29uZS5tYXRlcmlhbC5jb2xvci5zZXQodGhpcy5jb2xvcik6dGhpcy5jb25lLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5saWdodC5jb2xvcil9fSx6MD1uZXcgaixqVj1uZXcgTWUsYnV0PW5ldyBNZSxXVT1jbGFzcyBleHRlbmRzIFBhe2NvbnN0cnVjdG9yKHQpe2xldCByPW9wZSh0KSxuPW5ldyBQZSxpPVtdLG89W10sYT1uZXcgbmUoMCwwLDEpLHM9bmV3IG5lKDAsMSwwKTtmb3IobGV0IGM9MDtjPHIubGVuZ3RoO2MrKyl7bGV0IHU9cltjXTt1LnBhcmVudCYmdS5wYXJlbnQuaXNCb25lJiYoaS5wdXNoKDAsMCwwKSxpLnB1c2goMCwwLDApLG8ucHVzaChhLnIsYS5nLGEuYiksby5wdXNoKHMucixzLmcscy5iKSl9bi5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoaSwzKSksbi5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcgeGUobywzKSk7bGV0IGw9bmV3IEdpKHt2ZXJ0ZXhDb2xvcnM6ITAsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITEsdG9uZU1hcHBlZDohMSx0cmFuc3BhcmVudDohMH0pO3N1cGVyKG4sbCksdGhpcy50eXBlPSJTa2VsZXRvbkhlbHBlciIsdGhpcy5pc1NrZWxldG9uSGVscGVyPSEwLHRoaXMucm9vdD10LHRoaXMuYm9uZXM9cix0aGlzLm1hdHJpeD10Lm1hdHJpeFdvcmxkLHRoaXMubWF0cml4QXV0b1VwZGF0ZT0hMX11cGRhdGVNYXRyaXhXb3JsZCh0KXtsZXQgcj10aGlzLmJvbmVzLG49dGhpcy5nZW9tZXRyeSxpPW4uZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpO2J1dC5jb3B5KHRoaXMucm9vdC5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk7Zm9yKGxldCBvPTAsYT0wO288ci5sZW5ndGg7bysrKXtsZXQgcz1yW29dO3MucGFyZW50JiZzLnBhcmVudC5pc0JvbmUmJihqVi5tdWx0aXBseU1hdHJpY2VzKGJ1dCxzLm1hdHJpeFdvcmxkKSx6MC5zZXRGcm9tTWF0cml4UG9zaXRpb24oalYpLGkuc2V0WFlaKGEsejAueCx6MC55LHowLnopLGpWLm11bHRpcGx5TWF0cmljZXMoYnV0LHMucGFyZW50Lm1hdHJpeFdvcmxkKSx6MC5zZXRGcm9tTWF0cml4UG9zaXRpb24oalYpLGkuc2V0WFlaKGErMSx6MC54LHowLnksejAueiksYSs9Mil9bi5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIikubmVlZHNVcGRhdGU9ITAsc3VwZXIudXBkYXRlTWF0cml4V29ybGQodCl9fTtmdW5jdGlvbiBvcGUoZSl7bGV0IHQ9W107ZSYmZS5pc0JvbmUmJnQucHVzaChlKTtmb3IobGV0IHI9MDtyPGUuY2hpbGRyZW4ubGVuZ3RoO3IrKyl0LnB1c2guYXBwbHkodCxvcGUoZS5jaGlsZHJlbltyXSkpO3JldHVybiB0fXZhciBfaHQ9Y2xhc3MgZXh0ZW5kcyB0aXtjb25zdHJ1Y3Rvcih0LHIsbil7bGV0IGk9bmV3IFgwKHIsNCwyKSxvPW5ldyBzaCh7d2lyZWZyYW1lOiEwLGZvZzohMSx0b25lTWFwcGVkOiExfSk7c3VwZXIoaSxvKSx0aGlzLmxpZ2h0PXQsdGhpcy5saWdodC51cGRhdGVNYXRyaXhXb3JsZCgpLHRoaXMuY29sb3I9bix0aGlzLnR5cGU9IlBvaW50TGlnaHRIZWxwZXIiLHRoaXMubWF0cml4PXRoaXMubGlnaHQubWF0cml4V29ybGQsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMudXBkYXRlKCl9ZGlzcG9zZSgpe3RoaXMuZ2VvbWV0cnkuZGlzcG9zZSgpLHRoaXMubWF0ZXJpYWwuZGlzcG9zZSgpfXVwZGF0ZSgpe3RoaXMuY29sb3IhPT12b2lkIDA/dGhpcy5tYXRlcmlhbC5jb2xvci5zZXQodGhpcy5jb2xvcik6dGhpcy5tYXRlcmlhbC5jb2xvci5jb3B5KHRoaXMubGlnaHQuY29sb3IpfX0sTTByPW5ldyBqLERoZT1uZXcgbmUsT2hlPW5ldyBuZSx5aHQ9Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIoKSx0aGlzLmxpZ2h0PXQsdGhpcy5saWdodC51cGRhdGVNYXRyaXhXb3JsZCgpLHRoaXMubWF0cml4PXQubWF0cml4V29ybGQsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuY29sb3I9bjtsZXQgaT1uZXcgWTAocik7aS5yb3RhdGVZKE1hdGguUEkqLjUpLHRoaXMubWF0ZXJpYWw9bmV3IHNoKHt3aXJlZnJhbWU6ITAsZm9nOiExLHRvbmVNYXBwZWQ6ITF9KSx0aGlzLmNvbG9yPT09dm9pZCAwJiYodGhpcy5tYXRlcmlhbC52ZXJ0ZXhDb2xvcnM9ITApO2xldCBvPWkuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpLGE9bmV3IEZsb2F0MzJBcnJheShvLmNvdW50KjMpO2kuc2V0QXR0cmlidXRlKCJjb2xvciIsbmV3IEplKGEsMykpLHRoaXMuYWRkKG5ldyB0aShpLHRoaXMubWF0ZXJpYWwpKSx0aGlzLnVwZGF0ZSgpfWRpc3Bvc2UoKXt0aGlzLmNoaWxkcmVuWzBdLmdlb21ldHJ5LmRpc3Bvc2UoKSx0aGlzLmNoaWxkcmVuWzBdLm1hdGVyaWFsLmRpc3Bvc2UoKX11cGRhdGUoKXtsZXQgdD10aGlzLmNoaWxkcmVuWzBdO2lmKHRoaXMuY29sb3IhPT12b2lkIDApdGhpcy5tYXRlcmlhbC5jb2xvci5zZXQodGhpcy5jb2xvcik7ZWxzZXtsZXQgcj10Lmdlb21ldHJ5LmdldEF0dHJpYnV0ZSgiY29sb3IiKTtEaGUuY29weSh0aGlzLmxpZ2h0LmNvbG9yKSxPaGUuY29weSh0aGlzLmxpZ2h0Lmdyb3VuZENvbG9yKTtmb3IobGV0IG49MCxpPXIuY291bnQ7bjxpO24rKyl7bGV0IG89bjxpLzI/RGhlOk9oZTtyLnNldFhZWihuLG8ucixvLmcsby5iKX1yLm5lZWRzVXBkYXRlPSEwfXQubG9va0F0KE0wci5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5saWdodC5tYXRyaXhXb3JsZCkubmVnYXRlKCkpfX0sWVU9Y2xhc3MgZXh0ZW5kcyBQYXtjb25zdHJ1Y3Rvcih0PTEwLHI9MTAsbj00NDczOTI0LGk9ODk0Nzg0OCl7bj1uZXcgbmUobiksaT1uZXcgbmUoaSk7bGV0IG89ci8yLGE9dC9yLHM9dC8yLGw9W10sYz1bXTtmb3IobGV0IGY9MCxwPTAsZD0tcztmPD1yO2YrKyxkKz1hKXtsLnB1c2goLXMsMCxkLHMsMCxkKSxsLnB1c2goZCwwLC1zLGQsMCxzKTtsZXQgZz1mPT09bz9uOmk7Zy50b0FycmF5KGMscCkscCs9MyxnLnRvQXJyYXkoYyxwKSxwKz0zLGcudG9BcnJheShjLHApLHArPTMsZy50b0FycmF5KGMscCkscCs9M31sZXQgdT1uZXcgUGU7dS5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUobCwzKSksdS5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcgeGUoYywzKSk7bGV0IGg9bmV3IEdpKHt2ZXJ0ZXhDb2xvcnM6ITAsdG9uZU1hcHBlZDohMX0pO3N1cGVyKHUsaCksdGhpcy50eXBlPSJHcmlkSGVscGVyIn19LHZodD1jbGFzcyBleHRlbmRzIFBhe2NvbnN0cnVjdG9yKHQ9MTAscj0xNixuPTgsaT02NCxvPTQ0NzM5MjQsYT04OTQ3ODQ4KXtvPW5ldyBuZShvKSxhPW5ldyBuZShhKTtsZXQgcz1bXSxsPVtdO2ZvcihsZXQgaD0wO2g8PXI7aCsrKXtsZXQgZj1oL3IqKE1hdGguUEkqMikscD1NYXRoLnNpbihmKSp0LGQ9TWF0aC5jb3MoZikqdDtzLnB1c2goMCwwLDApLHMucHVzaChwLDAsZCk7bGV0IGc9aCYxP286YTtsLnB1c2goZy5yLGcuZyxnLmIpLGwucHVzaChnLnIsZy5nLGcuYil9Zm9yKGxldCBoPTA7aDw9bjtoKyspe2xldCBmPWgmMT9vOmEscD10LXQvbipoO2ZvcihsZXQgZD0wO2Q8aTtkKyspe2xldCBnPWQvaSooTWF0aC5QSSoyKSxfPU1hdGguc2luKGcpKnAseT1NYXRoLmNvcyhnKSpwO3MucHVzaChfLDAseSksbC5wdXNoKGYucixmLmcsZi5iKSxnPShkKzEpL2kqKE1hdGguUEkqMiksXz1NYXRoLnNpbihnKSpwLHk9TWF0aC5jb3MoZykqcCxzLnB1c2goXywwLHkpLGwucHVzaChmLnIsZi5nLGYuYil9fWxldCBjPW5ldyBQZTtjLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShzLDMpKSxjLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyB4ZShsLDMpKTtsZXQgdT1uZXcgR2koe3ZlcnRleENvbG9yczohMCx0b25lTWFwcGVkOiExfSk7c3VwZXIoYyx1KSx0aGlzLnR5cGU9IlBvbGFyR3JpZEhlbHBlciJ9fSx6aGU9bmV3IGosWFY9bmV3IGosRmhlPW5ldyBqLHhodD1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcigpLHRoaXMubGlnaHQ9dCx0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCksdGhpcy5tYXRyaXg9dC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5jb2xvcj1uLHI9PT12b2lkIDAmJihyPTEpO2xldCBpPW5ldyBQZTtpLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShbLXIsciwwLHIsciwwLHIsLXIsMCwtciwtciwwLC1yLHIsMF0sMykpO2xldCBvPW5ldyBHaSh7Zm9nOiExLHRvbmVNYXBwZWQ6ITF9KTt0aGlzLmxpZ2h0UGxhbmU9bmV3IGNoKGksbyksdGhpcy5hZGQodGhpcy5saWdodFBsYW5lKSxpPW5ldyBQZSxpLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShbMCwwLDAsMCwwLDFdLDMpKSx0aGlzLnRhcmdldExpbmU9bmV3IGNoKGksbyksdGhpcy5hZGQodGhpcy50YXJnZXRMaW5lKSx0aGlzLnVwZGF0ZSgpfWRpc3Bvc2UoKXt0aGlzLmxpZ2h0UGxhbmUuZ2VvbWV0cnkuZGlzcG9zZSgpLHRoaXMubGlnaHRQbGFuZS5tYXRlcmlhbC5kaXNwb3NlKCksdGhpcy50YXJnZXRMaW5lLmdlb21ldHJ5LmRpc3Bvc2UoKSx0aGlzLnRhcmdldExpbmUubWF0ZXJpYWwuZGlzcG9zZSgpfXVwZGF0ZSgpe3poZS5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5saWdodC5tYXRyaXhXb3JsZCksWFYuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubGlnaHQudGFyZ2V0Lm1hdHJpeFdvcmxkKSxGaGUuc3ViVmVjdG9ycyhYVix6aGUpLHRoaXMubGlnaHRQbGFuZS5sb29rQXQoWFYpLHRoaXMuY29sb3IhPT12b2lkIDA/KHRoaXMubGlnaHRQbGFuZS5tYXRlcmlhbC5jb2xvci5zZXQodGhpcy5jb2xvciksdGhpcy50YXJnZXRMaW5lLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKSk6KHRoaXMubGlnaHRQbGFuZS5tYXRlcmlhbC5jb2xvci5jb3B5KHRoaXMubGlnaHQuY29sb3IpLHRoaXMudGFyZ2V0TGluZS5tYXRlcmlhbC5jb2xvci5jb3B5KHRoaXMubGlnaHQuY29sb3IpKSx0aGlzLnRhcmdldExpbmUubG9va0F0KFhWKSx0aGlzLnRhcmdldExpbmUuc2NhbGUuej1GaGUubGVuZ3RoKCl9fSwkVj1uZXcgaixfaT1uZXcgTjEsYmh0PWNsYXNzIGV4dGVuZHMgUGF7Y29uc3RydWN0b3IodCl7bGV0IHI9bmV3IFBlLG49bmV3IEdpKHtjb2xvcjoxNjc3NzIxNSx2ZXJ0ZXhDb2xvcnM6ITAsdG9uZU1hcHBlZDohMX0pLGk9W10sbz1bXSxhPXt9LHM9bmV3IG5lKDE2NzU1MjAwKSxsPW5ldyBuZSgxNjcxMTY4MCksYz1uZXcgbmUoNDM3NzUpLHU9bmV3IG5lKDE2Nzc3MjE1KSxoPW5ldyBuZSgzMzU1NDQzKTtmKCJuMSIsIm4yIixzKSxmKCJuMiIsIm40IixzKSxmKCJuNCIsIm4zIixzKSxmKCJuMyIsIm4xIixzKSxmKCJmMSIsImYyIixzKSxmKCJmMiIsImY0IixzKSxmKCJmNCIsImYzIixzKSxmKCJmMyIsImYxIixzKSxmKCJuMSIsImYxIixzKSxmKCJuMiIsImYyIixzKSxmKCJuMyIsImYzIixzKSxmKCJuNCIsImY0IixzKSxmKCJwIiwibjEiLGwpLGYoInAiLCJuMiIsbCksZigicCIsIm4zIixsKSxmKCJwIiwibjQiLGwpLGYoInUxIiwidTIiLGMpLGYoInUyIiwidTMiLGMpLGYoInUzIiwidTEiLGMpLGYoImMiLCJ0Iix1KSxmKCJwIiwiYyIsaCksZigiY24xIiwiY24yIixoKSxmKCJjbjMiLCJjbjQiLGgpLGYoImNmMSIsImNmMiIsaCksZigiY2YzIiwiY2Y0IixoKTtmdW5jdGlvbiBmKGQsZyxfKXtwKGQsXykscChnLF8pfWZ1bmN0aW9uIHAoZCxnKXtpLnB1c2goMCwwLDApLG8ucHVzaChnLnIsZy5nLGcuYiksYVtkXT09PXZvaWQgMCYmKGFbZF09W10pLGFbZF0ucHVzaChpLmxlbmd0aC8zLTEpfXIuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKGksMykpLHIuc2V0QXR0cmlidXRlKCJjb2xvciIsbmV3IHhlKG8sMykpLHN1cGVyKHIsbiksdGhpcy50eXBlPSJDYW1lcmFIZWxwZXIiLHRoaXMuY2FtZXJhPXQsdGhpcy5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCYmdGhpcy5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpLHRoaXMubWF0cml4PXQubWF0cml4V29ybGQsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMucG9pbnRNYXA9YSx0aGlzLnVwZGF0ZSgpfXVwZGF0ZSgpe2xldCB0PXRoaXMuZ2VvbWV0cnkscj10aGlzLnBvaW50TWFwLG49MSxpPTE7X2kucHJvamVjdGlvbk1hdHJpeEludmVyc2UuY29weSh0aGlzLmNhbWVyYS5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSksUGkoImMiLHIsdCxfaSwwLDAsLTEpLFBpKCJ0IixyLHQsX2ksMCwwLDEpLFBpKCJuMSIscix0LF9pLC1uLC1pLC0xKSxQaSgibjIiLHIsdCxfaSxuLC1pLC0xKSxQaSgibjMiLHIsdCxfaSwtbixpLC0xKSxQaSgibjQiLHIsdCxfaSxuLGksLTEpLFBpKCJmMSIscix0LF9pLC1uLC1pLDEpLFBpKCJmMiIscix0LF9pLG4sLWksMSksUGkoImYzIixyLHQsX2ksLW4saSwxKSxQaSgiZjQiLHIsdCxfaSxuLGksMSksUGkoInUxIixyLHQsX2ksbiouNyxpKjEuMSwtMSksUGkoInUyIixyLHQsX2ksLW4qLjcsaSoxLjEsLTEpLFBpKCJ1MyIscix0LF9pLDAsaSoyLC0xKSxQaSgiY2YxIixyLHQsX2ksLW4sMCwxKSxQaSgiY2YyIixyLHQsX2ksbiwwLDEpLFBpKCJjZjMiLHIsdCxfaSwwLC1pLDEpLFBpKCJjZjQiLHIsdCxfaSwwLGksMSksUGkoImNuMSIscix0LF9pLC1uLDAsLTEpLFBpKCJjbjIiLHIsdCxfaSxuLDAsLTEpLFBpKCJjbjMiLHIsdCxfaSwwLC1pLC0xKSxQaSgiY240IixyLHQsX2ksMCxpLC0xKSx0LmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKS5uZWVkc1VwZGF0ZT0hMH1kaXNwb3NlKCl7dGhpcy5nZW9tZXRyeS5kaXNwb3NlKCksdGhpcy5tYXRlcmlhbC5kaXNwb3NlKCl9fTtmdW5jdGlvbiBQaShlLHQscixuLGksbyxhKXskVi5zZXQoaSxvLGEpLnVucHJvamVjdChuKTtsZXQgcz10W2VdO2lmKHMhPT12b2lkIDApe2xldCBsPXIuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpO2ZvcihsZXQgYz0wLHU9cy5sZW5ndGg7Yzx1O2MrKylsLnNldFhZWihzW2NdLCRWLngsJFYueSwkVi56KX19dmFyIEtWPW5ldyB0YSx5TT1jbGFzcyBleHRlbmRzIFBhe2NvbnN0cnVjdG9yKHQscj0xNjc3Njk2MCl7bGV0IG49bmV3IFVpbnQxNkFycmF5KFswLDEsMSwyLDIsMywzLDAsNCw1LDUsNiw2LDcsNyw0LDAsNCwxLDUsMiw2LDMsN10pLGk9bmV3IEZsb2F0MzJBcnJheSg4KjMpLG89bmV3IFBlO28uc2V0SW5kZXgobmV3IEplKG4sMSkpLG8uc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEplKGksMykpLHN1cGVyKG8sbmV3IEdpKHtjb2xvcjpyLHRvbmVNYXBwZWQ6ITF9KSksdGhpcy5vYmplY3Q9dCx0aGlzLnR5cGU9IkJveEhlbHBlciIsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMudXBkYXRlKCl9dXBkYXRlKHQpe2lmKHQhPT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuQm94SGVscGVyOiAudXBkYXRlKCkgaGFzIG5vIGxvbmdlciBhcmd1bWVudHMuIiksdGhpcy5vYmplY3QhPT12b2lkIDAmJktWLnNldEZyb21PYmplY3QodGhpcy5vYmplY3QpLEtWLmlzRW1wdHkoKSlyZXR1cm47bGV0IHI9S1YubWluLG49S1YubWF4LGk9dGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLG89aS5hcnJheTtvWzBdPW4ueCxvWzFdPW4ueSxvWzJdPW4ueixvWzNdPXIueCxvWzRdPW4ueSxvWzVdPW4ueixvWzZdPXIueCxvWzddPXIueSxvWzhdPW4ueixvWzldPW4ueCxvWzEwXT1yLnksb1sxMV09bi56LG9bMTJdPW4ueCxvWzEzXT1uLnksb1sxNF09ci56LG9bMTVdPXIueCxvWzE2XT1uLnksb1sxN109ci56LG9bMThdPXIueCxvWzE5XT1yLnksb1syMF09ci56LG9bMjFdPW4ueCxvWzIyXT1yLnksb1syM109ci56LGkubmVlZHNVcGRhdGU9ITAsdGhpcy5nZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKX1zZXRGcm9tT2JqZWN0KHQpe3JldHVybiB0aGlzLm9iamVjdD10LHRoaXMudXBkYXRlKCksdGhpc31jb3B5KHQpe3JldHVybiBQYS5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5vYmplY3Q9dC5vYmplY3QsdGhpc319LHdodD1jbGFzcyBleHRlbmRzIFBhe2NvbnN0cnVjdG9yKHQscj0xNjc3Njk2MCl7bGV0IG49bmV3IFVpbnQxNkFycmF5KFswLDEsMSwyLDIsMywzLDAsNCw1LDUsNiw2LDcsNyw0LDAsNCwxLDUsMiw2LDMsN10pLGk9WzEsMSwxLC0xLDEsMSwtMSwtMSwxLDEsLTEsMSwxLDEsLTEsLTEsMSwtMSwtMSwtMSwtMSwxLC0xLC0xXSxvPW5ldyBQZTtvLnNldEluZGV4KG5ldyBKZShuLDEpKSxvLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShpLDMpKSxzdXBlcihvLG5ldyBHaSh7Y29sb3I6cix0b25lTWFwcGVkOiExfSkpLHRoaXMuYm94PXQsdGhpcy50eXBlPSJCb3gzSGVscGVyIix0aGlzLmdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe2xldCByPXRoaXMuYm94O3IuaXNFbXB0eSgpfHwoci5nZXRDZW50ZXIodGhpcy5wb3NpdGlvbiksci5nZXRTaXplKHRoaXMuc2NhbGUpLHRoaXMuc2NhbGUubXVsdGlwbHlTY2FsYXIoLjUpLHN1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpKX19LFNodD1jbGFzcyBleHRlbmRzIGNoe2NvbnN0cnVjdG9yKHQscj0xLG49MTY3NzY5NjApe2xldCBpPW4sbz1bMSwtMSwxLC0xLDEsMSwtMSwtMSwxLDEsMSwxLC0xLDEsMSwtMSwtMSwxLDEsLTEsMSwxLDEsMSwwLDAsMSwwLDAsMF0sYT1uZXcgUGU7YS5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUobywzKSksYS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSxzdXBlcihhLG5ldyBHaSh7Y29sb3I6aSx0b25lTWFwcGVkOiExfSkpLHRoaXMudHlwZT0iUGxhbmVIZWxwZXIiLHRoaXMucGxhbmU9dCx0aGlzLnNpemU9cjtsZXQgcz1bMSwxLDEsLTEsMSwxLC0xLC0xLDEsMSwxLDEsLTEsLTEsMSwxLC0xLDFdLGw9bmV3IFBlO2wuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKHMsMykpLGwuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCksdGhpcy5hZGQobmV3IHRpKGwsbmV3IHNoKHtjb2xvcjppLG9wYWNpdHk6LjIsdHJhbnNwYXJlbnQ6ITAsZGVwdGhXcml0ZTohMSx0b25lTWFwcGVkOiExfSkpKX11cGRhdGVNYXRyaXhXb3JsZCh0KXtsZXQgcj0tdGhpcy5wbGFuZS5jb25zdGFudDtNYXRoLmFicyhyKTwxZS04JiYocj0xZS04KSx0aGlzLnNjYWxlLnNldCguNSp0aGlzLnNpemUsLjUqdGhpcy5zaXplLHIpLHRoaXMuY2hpbGRyZW5bMF0ubWF0ZXJpYWwuc2lkZT1yPDA/SWk6TDEsdGhpcy5sb29rQXQodGhpcy5wbGFuZS5ub3JtYWwpLHN1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpfX0sQmhlPW5ldyBqLFpWLHd1dCxNaHQ9Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcih0PW5ldyBqKDAsMCwxKSxyPW5ldyBqKDAsMCwwKSxuPTEsaT0xNjc3Njk2MCxvPW4qLjIsYT1vKi4yKXtzdXBlcigpLHRoaXMudHlwZT0iQXJyb3dIZWxwZXIiLFpWPT09dm9pZCAwJiYoWlY9bmV3IFBlLFpWLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShbMCwwLDAsMCwxLDBdLDMpKSx3dXQ9bmV3IGFtKDAsLjUsMSw1LDEpLHd1dC50cmFuc2xhdGUoMCwtLjUsMCkpLHRoaXMucG9zaXRpb24uY29weShyKSx0aGlzLmxpbmU9bmV3IGNoKFpWLG5ldyBHaSh7Y29sb3I6aSx0b25lTWFwcGVkOiExfSkpLHRoaXMubGluZS5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuYWRkKHRoaXMubGluZSksdGhpcy5jb25lPW5ldyB0aSh3dXQsbmV3IHNoKHtjb2xvcjppLHRvbmVNYXBwZWQ6ITF9KSksdGhpcy5jb25lLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5hZGQodGhpcy5jb25lKSx0aGlzLnNldERpcmVjdGlvbih0KSx0aGlzLnNldExlbmd0aChuLG8sYSl9c2V0RGlyZWN0aW9uKHQpe2lmKHQueT4uOTk5OTkpdGhpcy5xdWF0ZXJuaW9uLnNldCgwLDAsMCwxKTtlbHNlIGlmKHQueTwtLjk5OTk5KXRoaXMucXVhdGVybmlvbi5zZXQoMSwwLDAsMCk7ZWxzZXtCaGUuc2V0KHQueiwwLC10LngpLm5vcm1hbGl6ZSgpO2xldCByPU1hdGguYWNvcyh0LnkpO3RoaXMucXVhdGVybmlvbi5zZXRGcm9tQXhpc0FuZ2xlKEJoZSxyKX19c2V0TGVuZ3RoKHQscj10Ki4yLG49ciouMil7dGhpcy5saW5lLnNjYWxlLnNldCgxLE1hdGgubWF4KDFlLTQsdC1yKSwxKSx0aGlzLmxpbmUudXBkYXRlTWF0cml4KCksdGhpcy5jb25lLnNjYWxlLnNldChuLHIsbiksdGhpcy5jb25lLnBvc2l0aW9uLnk9dCx0aGlzLmNvbmUudXBkYXRlTWF0cml4KCl9c2V0Q29sb3IodCl7dGhpcy5saW5lLm1hdGVyaWFsLmNvbG9yLnNldCh0KSx0aGlzLmNvbmUubWF0ZXJpYWwuY29sb3Iuc2V0KHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCwhMSksdGhpcy5saW5lLmNvcHkodC5saW5lKSx0aGlzLmNvbmUuY29weSh0LmNvbmUpLHRoaXN9fSx2TT1jbGFzcyBleHRlbmRzIFBhe2NvbnN0cnVjdG9yKHQ9MSl7bGV0IHI9WzAsMCwwLHQsMCwwLDAsMCwwLDAsdCwwLDAsMCwwLDAsMCx0XSxuPVsxLDAsMCwxLC42LDAsMCwxLDAsLjYsMSwwLDAsMCwxLDAsLjYsMV0saT1uZXcgUGU7aS5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUociwzKSksaS5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcgeGUobiwzKSk7bGV0IG89bmV3IEdpKHt2ZXJ0ZXhDb2xvcnM6ITAsdG9uZU1hcHBlZDohMX0pO3N1cGVyKGksbyksdGhpcy50eXBlPSJBeGVzSGVscGVyIn1zZXRDb2xvcnModCxyLG4pe2xldCBpPW5ldyBuZSxvPXRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvci5hcnJheTtyZXR1cm4gaS5zZXQodCksaS50b0FycmF5KG8sMCksaS50b0FycmF5KG8sMyksaS5zZXQociksaS50b0FycmF5KG8sNiksaS50b0FycmF5KG8sOSksaS5zZXQobiksaS50b0FycmF5KG8sMTIpLGkudG9BcnJheShvLDE1KSx0aGlzLmdlb21ldHJ5LmF0dHJpYnV0ZXMuY29sb3IubmVlZHNVcGRhdGU9ITAsdGhpc31kaXNwb3NlKCl7dGhpcy5nZW9tZXRyeS5kaXNwb3NlKCksdGhpcy5tYXRlcmlhbC5kaXNwb3NlKCl9fSxFaHQ9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnR5cGU9IlNoYXBlUGF0aCIsdGhpcy5jb2xvcj1uZXcgbmUsdGhpcy5zdWJQYXRocz1bXSx0aGlzLmN1cnJlbnRQYXRoPW51bGx9bW92ZVRvKHQscil7cmV0dXJuIHRoaXMuY3VycmVudFBhdGg9bmV3IEcxLHRoaXMuc3ViUGF0aHMucHVzaCh0aGlzLmN1cnJlbnRQYXRoKSx0aGlzLmN1cnJlbnRQYXRoLm1vdmVUbyh0LHIpLHRoaXN9bGluZVRvKHQscil7cmV0dXJuIHRoaXMuY3VycmVudFBhdGgubGluZVRvKHQsciksdGhpc31xdWFkcmF0aWNDdXJ2ZVRvKHQscixuLGkpe3JldHVybiB0aGlzLmN1cnJlbnRQYXRoLnF1YWRyYXRpY0N1cnZlVG8odCxyLG4saSksdGhpc31iZXppZXJDdXJ2ZVRvKHQscixuLGksbyxhKXtyZXR1cm4gdGhpcy5jdXJyZW50UGF0aC5iZXppZXJDdXJ2ZVRvKHQscixuLGksbyxhKSx0aGlzfXNwbGluZVRocnUodCl7cmV0dXJuIHRoaXMuY3VycmVudFBhdGguc3BsaW5lVGhydSh0KSx0aGlzfXRvU2hhcGVzKHQscil7ZnVuY3Rpb24gbih4KXtsZXQgYj1bXTtmb3IobGV0IFM9MCxDPXgubGVuZ3RoO1M8QztTKyspe2xldCBQPXhbU10saz1uZXcgS2M7ay5jdXJ2ZXM9UC5jdXJ2ZXMsYi5wdXNoKGspfXJldHVybiBifWZ1bmN0aW9uIGkoeCxiKXtsZXQgUz1iLmxlbmd0aCxDPSExO2ZvcihsZXQgUD1TLTEsaz0wO2s8UztQPWsrKyl7bGV0IE89YltQXSxEPWJba10sQj1ELngtTy54LEk9RC55LU8ueTtpZihNYXRoLmFicyhJKT5OdW1iZXIuRVBTSUxPTil7aWYoSTwwJiYoTz1iW2tdLEI9LUIsRD1iW1BdLEk9LUkpLHgueTxPLnl8fHgueT5ELnkpY29udGludWU7aWYoeC55PT09Ty55KXtpZih4Lng9PT1PLngpcmV0dXJuITB9ZWxzZXtsZXQgTD1JKih4LngtTy54KS1CKih4LnktTy55KTtpZihMPT09MClyZXR1cm4hMDtpZihMPDApY29udGludWU7Qz0hQ319ZWxzZXtpZih4LnkhPT1PLnkpY29udGludWU7aWYoRC54PD14LngmJngueDw9Ty54fHxPLng8PXgueCYmeC54PD1ELngpcmV0dXJuITB9fXJldHVybiBDfWxldCBvPVpjLmlzQ2xvY2tXaXNlLGE9dGhpcy5zdWJQYXRocztpZihhLmxlbmd0aD09PTApcmV0dXJuW107aWYocj09PSEwKXJldHVybiBuKGEpO2xldCBzLGwsYyx1PVtdO2lmKGEubGVuZ3RoPT09MSlyZXR1cm4gbD1hWzBdLGM9bmV3IEtjLGMuY3VydmVzPWwuY3VydmVzLHUucHVzaChjKSx1O2xldCBoPSFvKGFbMF0uZ2V0UG9pbnRzKCkpO2g9dD8haDpoO2xldCBmPVtdLHA9W10sZD1bXSxnPTAsXztwW2ddPXZvaWQgMCxkW2ddPVtdO2ZvcihsZXQgeD0wLGI9YS5sZW5ndGg7eDxiO3grKylsPWFbeF0sXz1sLmdldFBvaW50cygpLHM9byhfKSxzPXQ/IXM6cyxzPyghaCYmcFtnXSYmZysrLHBbZ109e3M6bmV3IEtjLHA6X30scFtnXS5zLmN1cnZlcz1sLmN1cnZlcyxoJiZnKyssZFtnXT1bXSk6ZFtnXS5wdXNoKHtoOmwscDpfWzBdfSk7aWYoIXBbMF0pcmV0dXJuIG4oYSk7aWYocC5sZW5ndGg+MSl7bGV0IHg9ITEsYj1bXTtmb3IobGV0IFM9MCxDPXAubGVuZ3RoO1M8QztTKyspZltTXT1bXTtmb3IobGV0IFM9MCxDPXAubGVuZ3RoO1M8QztTKyspe2xldCBQPWRbU107Zm9yKGxldCBrPTA7azxQLmxlbmd0aDtrKyspe2xldCBPPVBba10sRD0hMDtmb3IobGV0IEI9MDtCPHAubGVuZ3RoO0IrKylpKE8ucCxwW0JdLnApJiYoUyE9PUImJmIucHVzaCh7ZnJvbXM6Uyx0b3M6Qixob2xlOmt9KSxEPyhEPSExLGZbQl0ucHVzaChPKSk6eD0hMCk7RCYmZltTXS5wdXNoKE8pfX1iLmxlbmd0aD4wJiYoeHx8KGQ9ZikpfWxldCB5O2ZvcihsZXQgeD0wLGI9cC5sZW5ndGg7eDxiO3grKyl7Yz1wW3hdLnMsdS5wdXNoKGMpLHk9ZFt4XTtmb3IobGV0IFM9MCxDPXkubGVuZ3RoO1M8QztTKyspYy5ob2xlcy5wdXNoKHlbU10uaCl9cmV0dXJuIHV9fSxhcGU9bmV3IEZsb2F0MzJBcnJheSgxKSxFMHI9bmV3IEludDMyQXJyYXkoYXBlLmJ1ZmZlciksVGh0PWNsYXNze3N0YXRpYyB0b0hhbGZGbG9hdCh0KXt0PjY1NTA0JiYoY29uc29sZS53YXJuKCJUSFJFRS5EYXRhVXRpbHMudG9IYWxmRmxvYXQoKTogdmFsdWUgZXhjZWVkcyA2NTUwNC4iKSx0PTY1NTA0KSxhcGVbMF09dDtsZXQgcj1FMHJbMF0sbj1yPj4xNiYzMjc2OCxpPXI+PjEyJjIwNDcsbz1yPj4yMyYyNTU7cmV0dXJuIG88MTAzP246bz4xNDI/KG58PTMxNzQ0LG58PShvPT0yNTU/MDoxKSYmciY4Mzg4NjA3LG4pOm88MTEzPyhpfD0yMDQ4LG58PShpPj4xMTQtbykrKGk+PjExMy1vJjEpLG4pOihufD1vLTExMjw8MTB8aT4+MSxuKz1pJjEsbil9fSxUMHI9MCxDMHI9MSxBMHI9MCxQMHI9MSxJMHI9MjtmdW5jdGlvbiBMMHIoZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWVzaEZhY2VNYXRlcmlhbCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYW4gQXJyYXkgaW5zdGVhZC4iKSxlfWZ1bmN0aW9uIGswcihlPVtdKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NdWx0aU1hdGVyaWFsIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhbiBBcnJheSBpbnN0ZWFkLiIpLGUuaXNNdWx0aU1hdGVyaWFsPSEwLGUubWF0ZXJpYWxzPWUsZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBlLnNsaWNlKCl9LGV9ZnVuY3Rpb24gUjByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUG9pbnRDbG91ZCBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlBvaW50cy4iKSxuZXcgb20oZSx0KX1mdW5jdGlvbiBOMHIoZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGFydGljbGUgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5TcHJpdGUuIiksbmV3IG9NKGUpfWZ1bmN0aW9uIEQwcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlBhcnRpY2xlU3lzdGVtIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzLiIpLG5ldyBvbShlLHQpfWZ1bmN0aW9uIE8wcihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Qb2ludENsb3VkTWF0ZXJpYWwgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5Qb2ludHNNYXRlcmlhbC4iKSxuZXcgaW0oZSl9ZnVuY3Rpb24gejByKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlBhcnRpY2xlQmFzaWNNYXRlcmlhbCBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlBvaW50c01hdGVyaWFsLiIpLG5ldyBpbShlKX1mdW5jdGlvbiBGMHIoZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGFydGljbGVTeXN0ZW1NYXRlcmlhbCBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlBvaW50c01hdGVyaWFsLiIpLG5ldyBpbShlKX1mdW5jdGlvbiBCMHIoZSx0LHIpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlcnRleCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuVmVjdG9yMyBpbnN0ZWFkLiIpLG5ldyBqKGUsdCxyKX1mdW5jdGlvbiBIMHIoZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5EeW5hbWljQnVmZmVyQXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuQnVmZmVyQXR0cmlidXRlKCkuc2V0VXNhZ2UoIFRIUkVFLkR5bmFtaWNEcmF3VXNhZ2UgKSBpbnN0ZWFkLiIpLG5ldyBKZShlLHQpLnNldFVzYWdlKFkzKX1mdW5jdGlvbiBWMHIoZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5JbnQ4QXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuSW50OEJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIiksbmV3IGNVKGUsdCl9ZnVuY3Rpb24gVTByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVWludDhBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5VaW50OEJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIiksbmV3IHVVKGUsdCl9ZnVuY3Rpb24gcTByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVWludDhDbGFtcGVkQXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuVWludDhDbGFtcGVkQnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKSxuZXcgaFUoZSx0KX1mdW5jdGlvbiBHMHIoZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5JbnQxNkF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkludDE2QnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKSxuZXcgZlUoZSx0KX1mdW5jdGlvbiBXMHIoZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5VaW50MTZBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5VaW50MTZCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpLG5ldyAkMyhlLHQpfWZ1bmN0aW9uIFkwcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkludDMyQXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuSW50MzJCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpLG5ldyBwVShlLHQpfWZ1bmN0aW9uIGowcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlVpbnQzMkF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLlVpbnQzMkJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIiksbmV3IEszKGUsdCl9ZnVuY3Rpb24gWDByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuRmxvYXQzMkF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpLG5ldyB4ZShlLHQpfWZ1bmN0aW9uICQwcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkZsb2F0NjRBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5GbG9hdDY0QnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKSxuZXcgbVUoZSx0KX1wcy5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gY29uc29sZS5sb2coIlRIUkVFLkN1cnZlLmNyZWF0ZSgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQiKSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHBzLnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXRQb2ludD10LGV9O0cxLnByb3RvdHlwZS5mcm9tUG9pbnRzPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlBhdGg6IC5mcm9tUG9pbnRzKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbVBvaW50cygpLiIpLHRoaXMuc2V0RnJvbVBvaW50cyhlKX07ZnVuY3Rpb24gSzByKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkF4aXNIZWxwZXIgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5BeGVzSGVscGVyLiIpLG5ldyB2TShlKX1mdW5jdGlvbiBaMHIoZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3VuZGluZ0JveEhlbHBlciBoYXMgYmVlbiBkZXByZWNhdGVkLiBDcmVhdGluZyBhIFRIUkVFLkJveEhlbHBlciBpbnN0ZWFkLiIpLG5ldyB5TShlLHQpfWZ1bmN0aW9uIEowcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkVkZ2VzSGVscGVyIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5FZGdlc0dlb21ldHJ5IGluc3RlYWQuIiksbmV3IFBhKG5ldyBzNihlLmdlb21ldHJ5KSxuZXcgR2koe2NvbG9yOnQhPT12b2lkIDA/dDoxNjc3NzIxNX0pKX1ZVS5wcm90b3R5cGUuc2V0Q29sb3JzPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuR3JpZEhlbHBlcjogc2V0Q29sb3JzKCkgaGFzIGJlZW4gZGVwcmVjYXRlZCwgcGFzcyB0aGVtIGluIHRoZSBjb25zdHJ1Y3RvciBpbnN0ZWFkLiIpfTtXVS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2tlbGV0b25IZWxwZXI6IHVwZGF0ZSgpIG5vIGxvbmdlciBuZWVkcyB0byBiZSBjYWxsZWQuIil9O2Z1bmN0aW9uIFEwcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldpcmVmcmFtZUhlbHBlciBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuV2lyZWZyYW1lR2VvbWV0cnkgaW5zdGVhZC4iKSxuZXcgUGEobmV3IGQ2KGUuZ2VvbWV0cnkpLG5ldyBHaSh7Y29sb3I6dCE9PXZvaWQgMD90OjE2Nzc3MjE1fSkpfWVhLnByb3RvdHlwZS5leHRyYWN0VXJsQmFzZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Mb2FkZXI6IC5leHRyYWN0VXJsQmFzZSgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBUSFJFRS5Mb2FkZXJVdGlscy5leHRyYWN0VXJsQmFzZSgpIGluc3RlYWQuIiksZE0uZXh0cmFjdFVybEJhc2UoZSl9O2VhLkhhbmRsZXJzPXthZGQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Mb2FkZXI6IEhhbmRsZXJzLmFkZCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBMb2FkaW5nTWFuYWdlci5hZGRIYW5kbGVyKCkgaW5zdGVhZC4iKX0sZ2V0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTG9hZGVyOiBIYW5kbGVycy5nZXQoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgTG9hZGluZ01hbmFnZXIuZ2V0SGFuZGxlcigpIGluc3RlYWQuIil9fTtmdW5jdGlvbiB0X3IoZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuWEhSTG9hZGVyIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuRmlsZUxvYWRlci4iKSxuZXcgSmMoZSl9ZnVuY3Rpb24gZV9yKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJpbmFyeVRleHR1cmVMb2FkZXIgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5EYXRhVGV4dHVyZUxvYWRlci4iKSxuZXcgQ1UoZSl9SzAucHJvdG90eXBlLmNlbnRlcj1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gyOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIiksdGhpcy5nZXRDZW50ZXIoZSl9O0swLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5lbXB0eSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmlzRW1wdHkoKS4iKSx0aGlzLmlzRW1wdHkoKX07SzAucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94PWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3goZSl9O0swLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5zaXplKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0U2l6ZSgpLiIpLHRoaXMuZ2V0U2l6ZShlKX07dGEucHJvdG90eXBlLmNlbnRlcj1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIiksdGhpcy5nZXRDZW50ZXIoZSl9O3RhLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5lbXB0eSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmlzRW1wdHkoKS4iKSx0aGlzLmlzRW1wdHkoKX07dGEucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94PWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3goZSl9O3RhLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvblNwaGVyZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuaXNJbnRlcnNlY3Rpb25TcGhlcmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzU3BoZXJlKCkuIiksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKGUpfTt0YS5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuc2l6ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldFNpemUoKS4iKSx0aGlzLmdldFNpemUoZSl9O0pmLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNwaGVyZTogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLiIpLHRoaXMuaXNFbXB0eSgpfTtEMS5wcm90b3R5cGUuc2V0RnJvbU1hdHJpeD1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5GcnVzdHVtOiAuc2V0RnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KCkuIiksdGhpcy5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChlKX07R1UucHJvdG90eXBlLmNlbnRlcj1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5MaW5lMzogLmNlbnRlcigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldENlbnRlcigpLiIpLHRoaXMuZ2V0Q2VudGVyKGUpfTtraS5wcm90b3R5cGUuZmxhdHRlblRvQXJyYXlPZmZzZXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAuZmxhdHRlblRvQXJyYXlPZmZzZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnRvQXJyYXkoKSBpbnN0ZWFkLiIpLHRoaXMudG9BcnJheShlLHQpfTtraS5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5tdWx0aXBseVZlY3RvcjMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4MyggbWF0cml4ICkgaW5zdGVhZC4iKSxlLmFwcGx5TWF0cml4Myh0aGlzKX07a2kucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yM0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogLm11bHRpcGx5VmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07a2kucHJvdG90eXBlLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYXR0cmlidXRlLmFwcGx5TWF0cml4MyggbWF0cml4ICkgaW5zdGVhZC4iKSxlLmFwcGx5TWF0cml4Myh0aGlzKX07a2kucHJvdG90eXBlLmFwcGx5VG9WZWN0b3IzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXgzOiAuYXBwbHlUb1ZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O2tpLnByb3RvdHlwZS5nZXRJbnZlcnNlPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5nZXRJbnZlcnNlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG1hdHJpeEludi5jb3B5KCBtYXRyaXggKS5pbnZlcnQoKTsgaW5zdGVhZC4iKSx0aGlzLmNvcHkoZSkuaW52ZXJ0KCl9O01lLnByb3RvdHlwZS5leHRyYWN0UG9zaXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmV4dHJhY3RQb3NpdGlvbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmNvcHlQb3NpdGlvbigpLiIpLHRoaXMuY29weVBvc2l0aW9uKGUpfTtNZS5wcm90b3R5cGUuZmxhdHRlblRvQXJyYXlPZmZzZXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZmxhdHRlblRvQXJyYXlPZmZzZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnRvQXJyYXkoKSBpbnN0ZWFkLiIpLHRoaXMudG9BcnJheShlLHQpfTtNZS5wcm90b3R5cGUuZ2V0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZ2V0UG9zaXRpb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVmVjdG9yMy5zZXRGcm9tTWF0cml4UG9zaXRpb24oIG1hdHJpeCApIGluc3RlYWQuIiksbmV3IGooKS5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMyl9O01lLnByb3RvdHlwZS5zZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5zZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24oKS4iKSx0aGlzLm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKGUpfTtNZS5wcm90b3R5cGUubXVsdGlwbHlUb0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlUb0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07TWUucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yMz1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksZS5hcHBseU1hdHJpeDQodGhpcyl9O01lLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yNCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpLGUuYXBwbHlNYXRyaXg0KHRoaXMpfTtNZS5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtNZS5wcm90b3R5cGUucm90YXRlQXhpcz1mdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVBeGlzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFZlY3RvcjMudHJhbnNmb3JtRGlyZWN0aW9uKCBtYXRyaXggKSBpbnN0ZWFkLiIpLGUudHJhbnNmb3JtRGlyZWN0aW9uKHRoaXMpfTtNZS5wcm90b3R5cGUuY3Jvc3NWZWN0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmNyb3NzVmVjdG9yKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksZS5hcHBseU1hdHJpeDQodGhpcyl9O01lLnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAudHJhbnNsYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07TWUucHJvdG90eXBlLnJvdGF0ZVg9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlWCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O01lLnByb3RvdHlwZS5yb3RhdGVZPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZVkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtNZS5wcm90b3R5cGUucm90YXRlWj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVaKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07TWUucHJvdG90eXBlLnJvdGF0ZUJ5QXhpcz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVCeUF4aXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtNZS5wcm90b3R5cGUuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhdHRyaWJ1dGUuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpLGUuYXBwbHlNYXRyaXg0KHRoaXMpfTtNZS5wcm90b3R5cGUuYXBwbHlUb1ZlY3RvcjNBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5hcHBseVRvVmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07TWUucHJvdG90eXBlLm1ha2VGcnVzdHVtPWZ1bmN0aW9uKGUsdCxyLG4saSxvKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubWFrZUZydXN0dW0oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLm1ha2VQZXJzcGVjdGl2ZSggbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tLCBuZWFyLCBmYXIgKSBpbnN0ZWFkLiIpLHRoaXMubWFrZVBlcnNwZWN0aXZlKGUsdCxuLHIsaSxvKX07TWUucHJvdG90eXBlLmdldEludmVyc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmdldEludmVyc2UoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbWF0cml4SW52LmNvcHkoIG1hdHJpeCApLmludmVydCgpOyBpbnN0ZWFkLiIpLHRoaXMuY29weShlKS5pbnZlcnQoKX07JGMucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uTGluZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5QbGFuZTogLmlzSW50ZXJzZWN0aW9uTGluZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNMaW5lKCkuIiksdGhpcy5pbnRlcnNlY3RzTGluZShlKX07eWkucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yMz1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGlzIG5vdyB2ZWN0b3IuYXBwbHlRdWF0ZXJuaW9uKCBxdWF0ZXJuaW9uICkgaW5zdGVhZC4iKSxlLmFwcGx5UXVhdGVybmlvbih0aGlzKX07eWkucHJvdG90eXBlLmludmVyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAuaW52ZXJzZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gaW52ZXJ0KCkuIiksdGhpcy5pbnZlcnQoKX07UWYucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94PWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlJheTogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLiIpLHRoaXMuaW50ZXJzZWN0c0JveChlKX07UWYucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uUGxhbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25QbGFuZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNQbGFuZSgpLiIpLHRoaXMuaW50ZXJzZWN0c1BsYW5lKGUpfTtRZi5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25TcGhlcmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25TcGhlcmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzU3BoZXJlKCkuIiksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKGUpfTtvaS5wcm90b3R5cGUuYXJlYT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAuYXJlYSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldEFyZWEoKS4iKSx0aGlzLmdldEFyZWEoKX07b2kucHJvdG90eXBlLmJhcnljb29yZEZyb21Qb2ludD1mdW5jdGlvbihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAuYmFyeWNvb3JkRnJvbVBvaW50KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0QmFyeWNvb3JkKCkuIiksdGhpcy5nZXRCYXJ5Y29vcmQoZSx0KX07b2kucHJvdG90eXBlLm1pZHBvaW50PWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAubWlkcG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRNaWRwb2ludCgpLiIpLHRoaXMuZ2V0TWlkcG9pbnQoZSl9O29pLnByb3RvdHlwZW5vcm1hbD1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLm5vcm1hbCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE5vcm1hbCgpLiIpLHRoaXMuZ2V0Tm9ybWFsKGUpfTtvaS5wcm90b3R5cGUucGxhbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5wbGFuZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldFBsYW5lKCkuIiksdGhpcy5nZXRQbGFuZShlKX07b2kuYmFyeWNvb3JkRnJvbVBvaW50PWZ1bmN0aW9uKGUsdCxyLG4saSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5iYXJ5Y29vcmRGcm9tUG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRCYXJ5Y29vcmQoKS4iKSxvaS5nZXRCYXJ5Y29vcmQoZSx0LHIsbixpKX07b2kubm9ybWFsPWZ1bmN0aW9uKGUsdCxyLG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAubm9ybWFsKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Tm9ybWFsKCkuIiksb2kuZ2V0Tm9ybWFsKGUsdCxyLG4pfTtLYy5wcm90b3R5cGUuZXh0cmFjdEFsbFBvaW50cz1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TaGFwZTogLmV4dHJhY3RBbGxQb2ludHMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmV4dHJhY3RQb2ludHMoKSBpbnN0ZWFkLiIpLHRoaXMuZXh0cmFjdFBvaW50cyhlKX07S2MucHJvdG90eXBlLmV4dHJ1ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhcGU6IC5leHRydWRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEV4dHJ1ZGVHZW9tZXRyeSgpIGluc3RlYWQuIiksbmV3IGhoKHRoaXMsZSl9O0tjLnByb3RvdHlwZS5tYWtlR2VvbWV0cnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhcGU6IC5tYWtlR2VvbWV0cnkoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgU2hhcGVHZW9tZXRyeSgpIGluc3RlYWQuIiksbmV3IGowKHRoaXMsZSl9O0x0LnByb3RvdHlwZS5mcm9tQXR0cmlidXRlPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAuZnJvbUF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSx0LHIpfTtMdC5wcm90b3R5cGUuZGlzdGFuY2VUb01hbmhhdHRhbj1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAuZGlzdGFuY2VUb01hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkRpc3RhbmNlVG8oKS4iKSx0aGlzLm1hbmhhdHRhbkRpc3RhbmNlVG8oZSl9O0x0LnByb3RvdHlwZS5sZW5ndGhNYW5oYXR0YW49ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuTGVuZ3RoKCkuIiksdGhpcy5tYW5oYXR0YW5MZW5ndGgoKX07ai5wcm90b3R5cGUuc2V0RXVsZXJGcm9tUm90YXRpb25NYXRyaXg9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5WZWN0b3IzOiAuc2V0RXVsZXJGcm9tUm90YXRpb25NYXRyaXgoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgRXVsZXIuc2V0RnJvbVJvdGF0aW9uTWF0cml4KCkgaW5zdGVhZC4iKX07ai5wcm90b3R5cGUuc2V0RXVsZXJGcm9tUXVhdGVybmlvbj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjM6IC5zZXRFdWxlckZyb21RdWF0ZXJuaW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEV1bGVyLnNldEZyb21RdWF0ZXJuaW9uKCkgaW5zdGVhZC4iKX07ai5wcm90b3R5cGUuZ2V0UG9zaXRpb25Gcm9tTWF0cml4PWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5nZXRQb3NpdGlvbkZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4UG9zaXRpb24oKS4iKSx0aGlzLnNldEZyb21NYXRyaXhQb3NpdGlvbihlKX07ai5wcm90b3R5cGUuZ2V0U2NhbGVGcm9tTWF0cml4PWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5nZXRTY2FsZUZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4U2NhbGUoKS4iKSx0aGlzLnNldEZyb21NYXRyaXhTY2FsZShlKX07ai5wcm90b3R5cGUuZ2V0Q29sdW1uRnJvbU1hdHJpeD1mdW5jdGlvbihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5nZXRDb2x1bW5Gcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeENvbHVtbigpLiIpLHRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LGUpfTtqLnByb3RvdHlwZS5hcHBseVByb2plY3Rpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmFwcGx5UHJvamVjdGlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuYXBwbHlNYXRyaXg0KCBtICkgaW5zdGVhZC4iKSx0aGlzLmFwcGx5TWF0cml4NChlKX07ai5wcm90b3R5cGUuZnJvbUF0dHJpYnV0ZT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy5mcm9tQnVmZmVyQXR0cmlidXRlKGUsdCxyKX07ai5wcm90b3R5cGUuZGlzdGFuY2VUb01hbmhhdHRhbj1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZGlzdGFuY2VUb01hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkRpc3RhbmNlVG8oKS4iKSx0aGlzLm1hbmhhdHRhbkRpc3RhbmNlVG8oZSl9O2oucHJvdG90eXBlLmxlbmd0aE1hbmhhdHRhbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4iKSx0aGlzLm1hbmhhdHRhbkxlbmd0aCgpfTtlbi5wcm90b3R5cGUuZnJvbUF0dHJpYnV0ZT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy5mcm9tQnVmZmVyQXR0cmlidXRlKGUsdCxyKX07ZW4ucHJvdG90eXBlLmxlbmd0aE1hbmhhdHRhbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4iKSx0aGlzLm1hbmhhdHRhbkxlbmd0aCgpfTtvci5wcm90b3R5cGUuZ2V0Q2hpbGRCeU5hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5nZXRDaGlsZEJ5TmFtZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE9iamVjdEJ5TmFtZSgpLiIpLHRoaXMuZ2V0T2JqZWN0QnlOYW1lKGUpfTtvci5wcm90b3R5cGUucmVuZGVyRGVwdGg9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAucmVuZGVyRGVwdGggaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5yZW5kZXJPcmRlciwgaW5zdGVhZC4iKX07b3IucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAudHJhbnNsYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC50cmFuc2xhdGVPbkF4aXMoIGF4aXMsIGRpc3RhbmNlICkgaW5zdGVhZC4iKSx0aGlzLnRyYW5zbGF0ZU9uQXhpcyh0LGUpfTtvci5wcm90b3R5cGUuZ2V0V29ybGRSb3RhdGlvbj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdDNEOiAuZ2V0V29ybGRSb3RhdGlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5PYmplY3QzRC5nZXRXb3JsZFF1YXRlcm5pb24oIHRhcmdldCApIGluc3RlYWQuIil9O29yLnByb3RvdHlwZS5hcHBseU1hdHJpeD1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmFwcGx5TWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuYXBwbHlNYXRyaXg0KCkuIiksdGhpcy5hcHBseU1hdHJpeDQoZSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG9yLnByb3RvdHlwZSx7ZXVsZXJPcmRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5ldWxlck9yZGVyIGlzIG5vdyAucm90YXRpb24ub3JkZXIuIiksdGhpcy5yb3RhdGlvbi5vcmRlcn0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5ldWxlck9yZGVyIGlzIG5vdyAucm90YXRpb24ub3JkZXIuIiksdGhpcy5yb3RhdGlvbi5vcmRlcj1lfX0sdXNlUXVhdGVybmlvbjp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnVzZVF1YXRlcm5pb24gaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIGxpYnJhcnkgbm93IHVzZXMgcXVhdGVybmlvbnMgYnkgZGVmYXVsdC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnVzZVF1YXRlcm5pb24gaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIGxpYnJhcnkgbm93IHVzZXMgcXVhdGVybmlvbnMgYnkgZGVmYXVsdC4iKX19fSk7dGkucHJvdG90eXBlLnNldERyYXdNb2RlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWVzaDogLnNldERyYXdNb2RlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4gVHJhbnNmb3JtIHlvdXIgZ2VvbWV0cnkgdmlhIEJ1ZmZlckdlb21ldHJ5VXRpbHMudG9UcmlhbmdsZXNEcmF3TW9kZSgpIGlmIG5lY2Vzc2FyeS4iKX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGkucHJvdG90eXBlLHtkcmF3TW9kZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2g6IC5kcmF3TW9kZSBoYXMgYmVlbiByZW1vdmVkLiBUaGUgcmVuZGVyZXIgbm93IGFsd2F5cyBhc3N1bWVzIFRIUkVFLlRyaWFuZ2xlc0RyYXdNb2RlLiIpLGtmZX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWVzaDogLmRyYXdNb2RlIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSByZW5kZXJlciBub3cgYWx3YXlzIGFzc3VtZXMgVEhSRUUuVHJpYW5nbGVzRHJhd01vZGUuIFRyYW5zZm9ybSB5b3VyIGdlb21ldHJ5IHZpYSBCdWZmZXJHZW9tZXRyeVV0aWxzLnRvVHJpYW5nbGVzRHJhd01vZGUoKSBpZiBuZWNlc3NhcnkuIil9fX0pO2FNLnByb3RvdHlwZS5pbml0Qm9uZXM9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Ta2lubmVkTWVzaDogaW5pdEJvbmVzKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07VWkucHJvdG90eXBlLnNldExlbnM9ZnVuY3Rpb24oZSx0KXtjb25zb2xlLndhcm4oIlRIUkVFLlBlcnNwZWN0aXZlQ2FtZXJhLnNldExlbnMgaXMgZGVwcmVjYXRlZC4gVXNlIC5zZXRGb2NhbExlbmd0aCBhbmQgLmZpbG1HYXVnZSBmb3IgYSBwaG90b2dyYXBoaWMgc2V0dXAuIiksdCE9PXZvaWQgMCYmKHRoaXMuZmlsbUdhdWdlPXQpLHRoaXMuc2V0Rm9jYWxMZW5ndGgoZSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHpsLnByb3RvdHlwZSx7b25seVNoYWRvdzp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLm9ubHlTaGFkb3cgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LHNoYWRvd0NhbWVyYUZvdjp7c2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFGb3YgaXMgbm93IC5zaGFkb3cuY2FtZXJhLmZvdi4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuZm92PWV9fSxzaGFkb3dDYW1lcmFMZWZ0OntzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUxlZnQgaXMgbm93IC5zaGFkb3cuY2FtZXJhLmxlZnQuIiksdGhpcy5zaGFkb3cuY2FtZXJhLmxlZnQ9ZX19LHNoYWRvd0NhbWVyYVJpZ2h0OntzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYVJpZ2h0IGlzIG5vdyAuc2hhZG93LmNhbWVyYS5yaWdodC4iKSx0aGlzLnNoYWRvdy5jYW1lcmEucmlnaHQ9ZX19LHNoYWRvd0NhbWVyYVRvcDp7c2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFUb3AgaXMgbm93IC5zaGFkb3cuY2FtZXJhLnRvcC4iKSx0aGlzLnNoYWRvdy5jYW1lcmEudG9wPWV9fSxzaGFkb3dDYW1lcmFCb3R0b206e3NldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhQm90dG9tIGlzIG5vdyAuc2hhZG93LmNhbWVyYS5ib3R0b20uIiksdGhpcy5zaGFkb3cuY2FtZXJhLmJvdHRvbT1lfX0sc2hhZG93Q2FtZXJhTmVhcjp7c2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFOZWFyIGlzIG5vdyAuc2hhZG93LmNhbWVyYS5uZWFyLiIpLHRoaXMuc2hhZG93LmNhbWVyYS5uZWFyPWV9fSxzaGFkb3dDYW1lcmFGYXI6e3NldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhRmFyIGlzIG5vdyAuc2hhZG93LmNhbWVyYS5mYXIuIiksdGhpcy5zaGFkb3cuY2FtZXJhLmZhcj1lfX0sc2hhZG93Q2FtZXJhVmlzaWJsZTp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYVZpc2libGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5DYW1lcmFIZWxwZXIoIGxpZ2h0LnNoYWRvdy5jYW1lcmEgKSBpbnN0ZWFkLiIpfX0sc2hhZG93Qmlhczp7c2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dCaWFzIGlzIG5vdyAuc2hhZG93LmJpYXMuIiksdGhpcy5zaGFkb3cuYmlhcz1lfX0sc2hhZG93RGFya25lc3M6e3NldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dEYXJrbmVzcyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sc2hhZG93TWFwV2lkdGg6e3NldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93TWFwV2lkdGggaXMgbm93IC5zaGFkb3cubWFwU2l6ZS53aWR0aC4iKSx0aGlzLnNoYWRvdy5tYXBTaXplLndpZHRoPWV9fSxzaGFkb3dNYXBIZWlnaHQ6e3NldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93TWFwSGVpZ2h0IGlzIG5vdyAuc2hhZG93Lm1hcFNpemUuaGVpZ2h0LiIpLHRoaXMuc2hhZG93Lm1hcFNpemUuaGVpZ2h0PWV9fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEplLnByb3RvdHlwZSx7bGVuZ3RoOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5sZW5ndGggaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5jb3VudCBpbnN0ZWFkLiIpLHRoaXMuYXJyYXkubGVuZ3RofX0sZHluYW1pYzp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuZHluYW1pYyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnVzYWdlIGluc3RlYWQuIiksdGhpcy51c2FnZT09PVkzfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmR5bmFtaWMgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC51c2FnZSBpbnN0ZWFkLiIpLHRoaXMuc2V0VXNhZ2UoWTMpfX19KTtKZS5wcm90b3R5cGUuc2V0RHluYW1pYz1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5zZXREeW5hbWljKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRVc2FnZSgpIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZShlPT09ITA/WTM6VzMpLHRoaXN9O0plLnByb3RvdHlwZS5jb3B5SW5kaWNlc0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuY29weUluZGljZXNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LEplLnByb3RvdHlwZS5zZXRBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLnNldEFycmF5IGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBCdWZmZXJHZW9tZXRyeSAuc2V0QXR0cmlidXRlIHRvIHJlcGxhY2UvcmVzaXplIGF0dHJpYnV0ZSBidWZmZXJzIil9O1BlLnByb3RvdHlwZS5hZGRJbmRleD1mdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkSW5kZXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRJbmRleCgpLiIpLHRoaXMuc2V0SW5kZXgoZSl9O1BlLnByb3RvdHlwZS5hZGRBdHRyaWJ1dGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFkZEF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEF0dHJpYnV0ZSgpLiIpLCEodCYmdC5pc0J1ZmZlckF0dHJpYnV0ZSkmJiEodCYmdC5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlKT8oY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFkZEF0dHJpYnV0ZSgpIG5vdyBleHBlY3RzICggbmFtZSwgYXR0cmlidXRlICkuIiksdGhpcy5zZXRBdHRyaWJ1dGUoZSxuZXcgSmUoYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSkpKTplPT09ImluZGV4Ij8oY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS5hZGRBdHRyaWJ1dGU6IFVzZSAuc2V0SW5kZXgoKSBmb3IgaW5kZXggYXR0cmlidXRlLiIpLHRoaXMuc2V0SW5kZXgodCksdGhpcyk6dGhpcy5zZXRBdHRyaWJ1dGUoZSx0KX07UGUucHJvdG90eXBlLmFkZERyYXdDYWxsPWZ1bmN0aW9uKGUsdCxyKXtyIT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkRHJhd0NhbGwoKSBubyBsb25nZXIgc3VwcG9ydHMgaW5kZXhPZmZzZXQuIiksY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFkZERyYXdDYWxsKCkgaXMgbm93IC5hZGRHcm91cCgpLiIpLHRoaXMuYWRkR3JvdXAoZSx0KX07UGUucHJvdG90eXBlLmNsZWFyRHJhd0NhbGxzPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmNsZWFyRHJhd0NhbGxzKCkgaXMgbm93IC5jbGVhckdyb3VwcygpLiIpLHRoaXMuY2xlYXJHcm91cHMoKX07UGUucHJvdG90eXBlLmNvbXB1dGVPZmZzZXRzPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmNvbXB1dGVPZmZzZXRzKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07UGUucHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLnJlbW92ZUF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmRlbGV0ZUF0dHJpYnV0ZSgpLiIpLHRoaXMuZGVsZXRlQXR0cmlidXRlKGUpfTtQZS5wcm90b3R5cGUuYXBwbHlNYXRyaXg9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hcHBseU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmFwcGx5TWF0cml4NCgpLiIpLHRoaXMuYXBwbHlNYXRyaXg0KGUpfTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhQZS5wcm90b3R5cGUse2RyYXdjYWxsczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuZHJhd2NhbGxzIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdyb3Vwcy4iKSx0aGlzLmdyb3Vwc319LG9mZnNldHM6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAub2Zmc2V0cyBoYXMgYmVlbiByZW5hbWVkIHRvIC5ncm91cHMuIiksdGhpcy5ncm91cHN9fX0pO3JtLnByb3RvdHlwZS5zZXREeW5hbWljPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkludGVybGVhdmVkQnVmZmVyOiAuc2V0RHluYW1pYygpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAuc2V0VXNhZ2UoKSBpbnN0ZWFkLiIpLHRoaXMuc2V0VXNhZ2UoZT09PSEwP1kzOlczKSx0aGlzfTtybS5wcm90b3R5cGUuc2V0QXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlcjogLnNldEFycmF5IGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBCdWZmZXJHZW9tZXRyeSAuc2V0QXR0cmlidXRlIHRvIHJlcGxhY2UvcmVzaXplIGF0dHJpYnV0ZSBidWZmZXJzIil9O2hoLnByb3RvdHlwZS5nZXRBcnJheXM9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5nZXRBcnJheXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtoaC5wcm90b3R5cGUuYWRkU2hhcGVMaXN0PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuRXh0cnVkZUdlb21ldHJ5OiAuYWRkU2hhcGVMaXN0KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07aGgucHJvdG90eXBlLmFkZFNoYXBlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuRXh0cnVkZUdlb21ldHJ5OiAuYWRkU2hhcGUoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtHMC5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNjZW5lOiAuZGlzcG9zZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O2dNLnByb3RvdHlwZS5vblVwZGF0ZT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlVuaWZvcm06IC5vblVwZGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBvYmplY3Qub25CZWZvcmVSZW5kZXIoKSBpbnN0ZWFkLiIpLHRoaXN9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHFpLnByb3RvdHlwZSx7d3JhcEFyb3VuZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogLndyYXBBcm91bmQgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogLndyYXBBcm91bmQgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LG92ZXJkcmF3OntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAub3ZlcmRyYXcgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogLm92ZXJkcmF3IGhhcyBiZWVuIHJlbW92ZWQuIil9fSx3cmFwUkdCOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogLndyYXBSR0IgaGFzIGJlZW4gcmVtb3ZlZC4iKSxuZXcgbmV9fSxzaGFkaW5nOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAuc2hhZGluZyBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdGhlIGJvb2xlYW4gLmZsYXRTaGFkaW5nIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKSx0aGlzLmZsYXRTaGFkaW5nPWU9PT1BaHR9fSxzdGVuY2lsTWFzazp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnN0ZW5jaWxNYXNrIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuc3RlbmNpbEZ1bmNNYXNrIGluc3RlYWQuIiksdGhpcy5zdGVuY2lsRnVuY01hc2t9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zdGVuY2lsTWFzayBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnN0ZW5jaWxGdW5jTWFzayBpbnN0ZWFkLiIpLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPWV9fSx2ZXJ0ZXhUYW5nZW50czp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAudmVydGV4VGFuZ2VudHMgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAudmVydGV4VGFuZ2VudHMgaGFzIGJlZW4gcmVtb3ZlZC4iKX19fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobGgucHJvdG90eXBlLHtkZXJpdmF0aXZlczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IC5kZXJpdmF0aXZlcyBoYXMgYmVlbiBtb3ZlZCB0byAuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcy4iKSx0aGlzLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXN9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLiBTaGFkZXJNYXRlcmlhbDogLmRlcml2YXRpdmVzIGhhcyBiZWVuIG1vdmVkIHRvIC5leHRlbnNpb25zLmRlcml2YXRpdmVzLiIpLHRoaXMuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcz1lfX19KTtybi5wcm90b3R5cGUuY2xlYXJUYXJnZXQ9ZnVuY3Rpb24oZSx0LHIsbil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuY2xlYXJUYXJnZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFJlbmRlclRhcmdldCgpIGFuZCAuY2xlYXIoKSBpbnN0ZWFkLiIpLHRoaXMuc2V0UmVuZGVyVGFyZ2V0KGUpLHRoaXMuY2xlYXIodCxyLG4pfTtybi5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hbmltYXRlKCkgaXMgbm93IC5zZXRBbmltYXRpb25Mb29wKCkuIiksdGhpcy5zZXRBbmltYXRpb25Mb29wKGUpfTtybi5wcm90b3R5cGUuZ2V0Q3VycmVudFJlbmRlclRhcmdldD1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRDdXJyZW50UmVuZGVyVGFyZ2V0KCkgaXMgbm93IC5nZXRSZW5kZXJUYXJnZXQoKS4iKSx0aGlzLmdldFJlbmRlclRhcmdldCgpfTtybi5wcm90b3R5cGUuZ2V0TWF4QW5pc290cm9weT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRNYXhBbmlzb3Ryb3B5KCkgaXMgbm93IC5jYXBhYmlsaXRpZXMuZ2V0TWF4QW5pc290cm9weSgpLiIpLHRoaXMuY2FwYWJpbGl0aWVzLmdldE1heEFuaXNvdHJvcHkoKX07cm4ucHJvdG90eXBlLmdldFByZWNpc2lvbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRQcmVjaXNpb24oKSBpcyBub3cgLmNhcGFiaWxpdGllcy5wcmVjaXNpb24uIiksdGhpcy5jYXBhYmlsaXRpZXMucHJlY2lzaW9ufTtybi5wcm90b3R5cGUucmVzZXRHTFN0YXRlPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnJlc2V0R0xTdGF0ZSgpIGlzIG5vdyAuc3RhdGUucmVzZXQoKS4iKSx0aGlzLnN0YXRlLnJlc2V0KCl9O3JuLnByb3RvdHlwZS5zdXBwb3J0c0Zsb2F0VGV4dHVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNGbG9hdFRleHR1cmVzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ09FU190ZXh0dXJlX2Zsb2F0JyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIk9FU190ZXh0dXJlX2Zsb2F0Iil9O3JuLnByb3RvdHlwZS5zdXBwb3J0c0hhbGZGbG9hdFRleHR1cmVzPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzSGFsZkZsb2F0VGV4dHVyZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Iil9O3JuLnByb3RvdHlwZS5zdXBwb3J0c1N0YW5kYXJkRGVyaXZhdGl2ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNTdGFuZGFyZERlcml2YXRpdmVzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKX07cm4ucHJvdG90eXBlLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVTM1RDPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVTM1RDKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil9O3JuLnByb3RvdHlwZS5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUFZSVEM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVBWUlRDKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKX07cm4ucHJvdG90eXBlLnN1cHBvcnRzQmxlbmRNaW5NYXg9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNCbGVuZE1pbk1heCgpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdFWFRfYmxlbmRfbWlubWF4JyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIkVYVF9ibGVuZF9taW5tYXgiKX07cm4ucHJvdG90eXBlLnN1cHBvcnRzVmVydGV4VGV4dHVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcygpIGlzIG5vdyAuY2FwYWJpbGl0aWVzLnZlcnRleFRleHR1cmVzLiIpLHRoaXMuY2FwYWJpbGl0aWVzLnZlcnRleFRleHR1cmVzfTtybi5wcm90b3R5cGUuc3VwcG9ydHNJbnN0YW5jZWRBcnJheXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNJbnN0YW5jZWRBcnJheXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnQU5HTEVfaW5zdGFuY2VkX2FycmF5cycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIil9O3JuLnByb3RvdHlwZS5lbmFibGVTY2lzc29yVGVzdD1mdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5lbmFibGVTY2lzc29yVGVzdCgpIGlzIG5vdyAuc2V0U2Npc3NvclRlc3QoKS4iKSx0aGlzLnNldFNjaXNzb3JUZXN0KGUpfTtybi5wcm90b3R5cGUuaW5pdE1hdGVyaWFsPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuaW5pdE1hdGVyaWFsKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07cm4ucHJvdG90eXBlLmFkZFByZVBsdWdpbj1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFkZFByZVBsdWdpbigpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3JuLnByb3RvdHlwZS5hZGRQb3N0UGx1Z2luPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYWRkUG9zdFBsdWdpbigpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3JuLnByb3RvdHlwZS51cGRhdGVTaGFkb3dNYXA9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC51cGRhdGVTaGFkb3dNYXAoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtybi5wcm90b3R5cGUuc2V0RmFjZUN1bGxpbmc9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRGYWNlQ3VsbGluZygpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3JuLnByb3RvdHlwZS5hbGxvY1RleHR1cmVVbml0PWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYWxsb2NUZXh0dXJlVW5pdCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3JuLnByb3RvdHlwZS5zZXRUZXh0dXJlPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0VGV4dHVyZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3JuLnByb3RvdHlwZS5zZXRUZXh0dXJlMkQ9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlMkQoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtybi5wcm90b3R5cGUuc2V0VGV4dHVyZUN1YmU9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlQ3ViZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3JuLnByb3RvdHlwZS5nZXRBY3RpdmVNaXBNYXBMZXZlbD1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRBY3RpdmVNaXBNYXBMZXZlbCgpIGlzIG5vdyAuZ2V0QWN0aXZlTWlwbWFwTGV2ZWwoKS4iKSx0aGlzLmdldEFjdGl2ZU1pcG1hcExldmVsKCl9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHJuLnByb3RvdHlwZSx7c2hhZG93TWFwRW5hYmxlZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhZG93TWFwLmVuYWJsZWR9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBFbmFibGVkIGlzIG5vdyAuc2hhZG93TWFwLmVuYWJsZWQuIiksdGhpcy5zaGFkb3dNYXAuZW5hYmxlZD1lfX0sc2hhZG93TWFwVHlwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhZG93TWFwLnR5cGV9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBUeXBlIGlzIG5vdyAuc2hhZG93TWFwLnR5cGUuIiksdGhpcy5zaGFkb3dNYXAudHlwZT1lfX0sc2hhZG93TWFwQ3VsbEZhY2U6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fSxjb250ZXh0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuY29udGV4dCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmdldENvbnRleHQoKSBpbnN0ZWFkLiIpLHRoaXMuZ2V0Q29udGV4dCgpfX0sdnI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC52ciBoYXMgYmVlbiByZW5hbWVkIHRvIC54ciIpLHRoaXMueHJ9fSxnYW1tYUlucHV0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFJbnB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgdGhlIGVuY29kaW5nIGZvciB0ZXh0dXJlcyB2aWEgVGV4dHVyZS5lbmNvZGluZyBpbnN0ZWFkLiIpLCExfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYUlucHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCB0aGUgZW5jb2RpbmcgZm9yIHRleHR1cmVzIHZpYSBUZXh0dXJlLmVuY29kaW5nIGluc3RlYWQuIil9fSxnYW1tYU91dHB1dDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hT3V0cHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCBXZWJHTFJlbmRlcmVyLm91dHB1dEVuY29kaW5nIGluc3RlYWQuIiksITF9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYU91dHB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgV2ViR0xSZW5kZXJlci5vdXRwdXRFbmNvZGluZyBpbnN0ZWFkLiIpLHRoaXMub3V0cHV0RW5jb2Rpbmc9ZT09PSEwP1luOnRtfX0sdG9uZU1hcHBpbmdXaGl0ZVBvaW50OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudG9uZU1hcHBpbmdXaGl0ZVBvaW50IGhhcyBiZWVuIHJlbW92ZWQuIiksMX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudG9uZU1hcHBpbmdXaGl0ZVBvaW50IGhhcyBiZWVuIHJlbW92ZWQuIil9fSxnYW1tYUZhY3Rvcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hRmFjdG9yIGhhcyBiZWVuIHJlbW92ZWQuIiksMn0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFGYWN0b3IgaGFzIGJlZW4gcmVtb3ZlZC4iKX19fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoSmZlLnByb3RvdHlwZSx7Y3VsbEZhY2U6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5jdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAuY3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19LHJlbmRlclJldmVyc2VTaWRlZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclJldmVyc2VTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyUmV2ZXJzZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fSxyZW5kZXJTaW5nbGVTaWRlZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclNpbmdsZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJTaW5nbGVTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX19KTtmdW5jdGlvbiByX3IoZSx0LHIpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0Q3ViZSggd2lkdGgsIGhlaWdodCwgb3B0aW9ucyApIGlzIG5vdyBXZWJHTEN1YmVSZW5kZXJUYXJnZXQoIHNpemUsIG9wdGlvbnMgKS4iKSxuZXcgUTMoZSxyKX1PYmplY3QuZGVmaW5lUHJvcGVydGllcyhocy5wcm90b3R5cGUse3dyYXBTOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLndyYXBTIGlzIG5vdyAudGV4dHVyZS53cmFwUy4iKSx0aGlzLnRleHR1cmUud3JhcFN9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFMgaXMgbm93IC50ZXh0dXJlLndyYXBTLiIpLHRoaXMudGV4dHVyZS53cmFwUz1lfX0sd3JhcFQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFQgaXMgbm93IC50ZXh0dXJlLndyYXBULiIpLHRoaXMudGV4dHVyZS53cmFwVH0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwVCBpcyBub3cgLnRleHR1cmUud3JhcFQuIiksdGhpcy50ZXh0dXJlLndyYXBUPWV9fSxtYWdGaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWFnRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5tYWdGaWx0ZXIuIiksdGhpcy50ZXh0dXJlLm1hZ0ZpbHRlcn0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5tYWdGaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1hZ0ZpbHRlci4iKSx0aGlzLnRleHR1cmUubWFnRmlsdGVyPWV9fSxtaW5GaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWluRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5taW5GaWx0ZXIuIiksdGhpcy50ZXh0dXJlLm1pbkZpbHRlcn0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5taW5GaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1pbkZpbHRlci4iKSx0aGlzLnRleHR1cmUubWluRmlsdGVyPWV9fSxhbmlzb3Ryb3B5OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmFuaXNvdHJvcHkgaXMgbm93IC50ZXh0dXJlLmFuaXNvdHJvcHkuIiksdGhpcy50ZXh0dXJlLmFuaXNvdHJvcHl9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuYW5pc290cm9weSBpcyBub3cgLnRleHR1cmUuYW5pc290cm9weS4iKSx0aGlzLnRleHR1cmUuYW5pc290cm9weT1lfX0sb2Zmc2V0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm9mZnNldCBpcyBub3cgLnRleHR1cmUub2Zmc2V0LiIpLHRoaXMudGV4dHVyZS5vZmZzZXR9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAub2Zmc2V0IGlzIG5vdyAudGV4dHVyZS5vZmZzZXQuIiksdGhpcy50ZXh0dXJlLm9mZnNldD1lfX0scmVwZWF0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnJlcGVhdCBpcyBub3cgLnRleHR1cmUucmVwZWF0LiIpLHRoaXMudGV4dHVyZS5yZXBlYXR9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAucmVwZWF0IGlzIG5vdyAudGV4dHVyZS5yZXBlYXQuIiksdGhpcy50ZXh0dXJlLnJlcGVhdD1lfX0sZm9ybWF0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmZvcm1hdCBpcyBub3cgLnRleHR1cmUuZm9ybWF0LiIpLHRoaXMudGV4dHVyZS5mb3JtYXR9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZm9ybWF0IGlzIG5vdyAudGV4dHVyZS5mb3JtYXQuIiksdGhpcy50ZXh0dXJlLmZvcm1hdD1lfX0sdHlwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC50eXBlIGlzIG5vdyAudGV4dHVyZS50eXBlLiIpLHRoaXMudGV4dHVyZS50eXBlfSxzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnR5cGUgaXMgbm93IC50ZXh0dXJlLnR5cGUuIiksdGhpcy50ZXh0dXJlLnR5cGU9ZX19LGdlbmVyYXRlTWlwbWFwczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5nZW5lcmF0ZU1pcG1hcHMgaXMgbm93IC50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcy4iKSx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzfSxzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmdlbmVyYXRlTWlwbWFwcyBpcyBub3cgLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzLiIpLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ZX19fSk7RDYucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogLmxvYWQgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkF1ZGlvTG9hZGVyIGluc3RlYWQuIik7bGV0IHQ9dGhpcztyZXR1cm4gbmV3IERVKCkubG9hZChlLGZ1bmN0aW9uKG4pe3Quc2V0QnVmZmVyKG4pfSksdGhpc307RlUucHJvdG90eXBlLmdldERhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5BdWRpb0FuYWx5c2VyOiAuZ2V0RGF0YSgpIGlzIG5vdyAuZ2V0RnJlcXVlbmN5RGF0YSgpLiIpLHRoaXMuZ2V0RnJlcXVlbmN5RGF0YSgpfTtKMy5wcm90b3R5cGUudXBkYXRlQ3ViZU1hcD1mdW5jdGlvbihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkN1YmVDYW1lcmE6IC51cGRhdGVDdWJlTWFwKCkgaXMgbm93IC51cGRhdGUoKS4iKSx0aGlzLnVwZGF0ZShlLHQpfTtKMy5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQ3ViZUNhbWVyYTogLmNsZWFyKCkgaXMgbm93IC5yZW5kZXJUYXJnZXQuY2xlYXIoKS4iKSx0aGlzLnJlbmRlclRhcmdldC5jbGVhcihlLHQscixuKX07WmYuY3Jvc3NPcmlnaW49dm9pZCAwO1pmLmxvYWRUZXh0dXJlPWZ1bmN0aW9uKGUsdCxyLG4pe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuVGV4dHVyZUxvYWRlcigpIGluc3RlYWQuIik7bGV0IGk9bmV3IEFVO2kuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7bGV0IG89aS5sb2FkKGUscix2b2lkIDAsbik7cmV0dXJuIHQmJihvLm1hcHBpbmc9dCksb307WmYubG9hZFRleHR1cmVDdWJlPWZ1bmN0aW9uKGUsdCxyLG4pe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZUN1YmUgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkN1YmVUZXh0dXJlTG9hZGVyKCkgaW5zdGVhZC4iKTtsZXQgaT1uZXcgVFU7aS5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtsZXQgbz1pLmxvYWQoZSxyLHZvaWQgMCxuKTtyZXR1cm4gdCYmKG8ubWFwcGluZz10KSxvfTtaZi5sb2FkQ29tcHJlc3NlZFRleHR1cmU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRERTTG9hZGVyIGluc3RlYWQuIil9O1pmLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLkREU0xvYWRlciBpbnN0ZWFkLiIpfTtmdW5jdGlvbiBuX3IoKXtjb25zb2xlLmVycm9yKCJUSFJFRS5DYW52YXNSZW5kZXJlciBoYXMgYmVlbiByZW1vdmVkIil9ZnVuY3Rpb24gaV9yKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuSlNPTkxvYWRlciBoYXMgYmVlbiByZW1vdmVkLiIpfXZhciBvX3I9e2NyZWF0ZU11bHRpTWF0ZXJpYWxPYmplY3Q6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5TY2VuZVV0aWxzIGhhcyBiZWVuIG1vdmVkIHRvIC9leGFtcGxlcy9qc20vdXRpbHMvU2NlbmVVdGlscy5qcyIpfSxkZXRhY2g6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5TY2VuZVV0aWxzIGhhcyBiZWVuIG1vdmVkIHRvIC9leGFtcGxlcy9qc20vdXRpbHMvU2NlbmVVdGlscy5qcyIpfSxhdHRhY2g6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5TY2VuZVV0aWxzIGhhcyBiZWVuIG1vdmVkIHRvIC9leGFtcGxlcy9qc20vdXRpbHMvU2NlbmVVdGlscy5qcyIpfX07ZnVuY3Rpb24gYV9yKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTGVuc0ZsYXJlIGhhcyBiZWVuIG1vdmVkIHRvIC9leGFtcGxlcy9qc20vb2JqZWN0cy9MZW5zZmxhcmUuanMiKX1mdW5jdGlvbiBzX3IoKXtyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuUGFyYW1ldHJpY0dlb21ldHJ5IGhhcyBiZWVuIG1vdmVkIHRvIC9leGFtcGxlcy9qc20vZ2VvbWV0cmllcy9QYXJhbWV0cmljR2VvbWV0cnkuanMiKSxuZXcgUGV9ZnVuY3Rpb24gbF9yKCl7cmV0dXJuIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlRleHRHZW9tZXRyeSBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanNtL2dlb21ldHJpZXMvVGV4dEdlb21ldHJ5LmpzIiksbmV3IFBlfWZ1bmN0aW9uIGNfcigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkZvbnRMb2FkZXIgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS9sb2FkZXJzL0ZvbnRMb2FkZXIuanMiKX1mdW5jdGlvbiB1X3IoKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Gb250IGhhcyBiZWVuIG1vdmVkIHRvIC9leGFtcGxlcy9qc20vbG9hZGVycy9Gb250TG9hZGVyLmpzIil9ZnVuY3Rpb24gaF9yKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuSW1tZWRpYXRlUmVuZGVyT2JqZWN0IGhhcyBiZWVuIHJlbW92ZWQuIil9dHlwZW9mIF9fVEhSRUVfREVWVE9PTFNfXyE9InVuZGVmaW5lZCImJl9fVEhSRUVfREVWVE9PTFNfXy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgicmVnaXN0ZXIiLHtkZXRhaWw6e3JldmlzaW9uOmpVfX0pKTt0eXBlb2Ygd2luZG93IT0idW5kZWZpbmVkIiYmKHdpbmRvdy5fX1RIUkVFX18/Y29uc29sZS53YXJuKCJXQVJOSU5HOiBNdWx0aXBsZSBpbnN0YW5jZXMgb2YgVGhyZWUuanMgYmVpbmcgaW1wb3J0ZWQuIik6d2luZG93Ll9fVEhSRUVfXz1qVSk7dmFyIHNwZT17dHlwZToiY2hhbmdlIn0sSGh0PXt0eXBlOiJzdGFydCJ9LGxwZT17dHlwZToiZW5kIn0sSlU9Y2xhc3MgZXh0ZW5kcyBxc3tjb25zdHJ1Y3Rvcih0LHIpe3N1cGVyKCkscj09PXZvaWQgMCYmY29uc29sZS53YXJuKCdUSFJFRS5PcmJpdENvbnRyb2xzOiBUaGUgc2Vjb25kIHBhcmFtZXRlciAiZG9tRWxlbWVudCIgaXMgbm93IG1hbmRhdG9yeS4nKSxyPT09ZG9jdW1lbnQmJmNvbnNvbGUuZXJyb3IoJ1RIUkVFLk9yYml0Q29udHJvbHM6ICJkb2N1bWVudCIgc2hvdWxkIG5vdCBiZSB1c2VkIGFzIHRoZSB0YXJnZXQgImRvbUVsZW1lbnQiLiBQbGVhc2UgdXNlICJyZW5kZXJlci5kb21FbGVtZW50IiBpbnN0ZWFkLicpLHRoaXMub2JqZWN0PXQsdGhpcy5kb21FbGVtZW50PXIsdGhpcy5kb21FbGVtZW50LnN0eWxlLnRvdWNoQWN0aW9uPSJub25lIix0aGlzLmVuYWJsZWQ9ITAsdGhpcy50YXJnZXQ9bmV3IGosdGhpcy5taW5EaXN0YW5jZT0wLHRoaXMubWF4RGlzdGFuY2U9MS8wLHRoaXMubWluWm9vbT0wLHRoaXMubWF4Wm9vbT0xLzAsdGhpcy5taW5Qb2xhckFuZ2xlPTAsdGhpcy5tYXhQb2xhckFuZ2xlPU1hdGguUEksdGhpcy5taW5BemltdXRoQW5nbGU9LTEvMCx0aGlzLm1heEF6aW11dGhBbmdsZT0xLzAsdGhpcy5lbmFibGVEYW1waW5nPSExLHRoaXMuZGFtcGluZ0ZhY3Rvcj0uMDUsdGhpcy5lbmFibGVab29tPSEwLHRoaXMuem9vbVNwZWVkPTEsdGhpcy5lbmFibGVSb3RhdGU9ITAsdGhpcy5yb3RhdGVTcGVlZD0xLHRoaXMuZW5hYmxlUGFuPSEwLHRoaXMucGFuU3BlZWQ9MSx0aGlzLnNjcmVlblNwYWNlUGFubmluZz0hMCx0aGlzLmtleVBhblNwZWVkPTcsdGhpcy5hdXRvUm90YXRlPSExLHRoaXMuYXV0b1JvdGF0ZVNwZWVkPTIsdGhpcy5rZXlzPXtMRUZUOiJBcnJvd0xlZnQiLFVQOiJBcnJvd1VwIixSSUdIVDoiQXJyb3dSaWdodCIsQk9UVE9NOiJBcnJvd0Rvd24ifSx0aGlzLm1vdXNlQnV0dG9ucz17TEVGVDpaMC5ST1RBVEUsTUlERExFOlowLkRPTExZLFJJR0hUOlowLlBBTn0sdGhpcy50b3VjaGVzPXtPTkU6SjAuUk9UQVRFLFRXTzpKMC5ET0xMWV9QQU59LHRoaXMudGFyZ2V0MD10aGlzLnRhcmdldC5jbG9uZSgpLHRoaXMucG9zaXRpb24wPXRoaXMub2JqZWN0LnBvc2l0aW9uLmNsb25lKCksdGhpcy56b29tMD10aGlzLm9iamVjdC56b29tLHRoaXMuX2RvbUVsZW1lbnRLZXlFdmVudHM9bnVsbCx0aGlzLmdldFBvbGFyQW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gcy5waGl9LHRoaXMuZ2V0QXppbXV0aGFsQW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gcy50aGV0YX0sdGhpcy5nZXREaXN0YW5jZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9iamVjdC5wb3NpdGlvbi5kaXN0YW5jZVRvKHRoaXMudGFyZ2V0KX0sdGhpcy5saXN0ZW5Ub0tleUV2ZW50cz1mdW5jdGlvbihudCl7bnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZnIpLHRoaXMuX2RvbUVsZW1lbnRLZXlFdmVudHM9bnR9LHRoaXMuc2F2ZVN0YXRlPWZ1bmN0aW9uKCl7bi50YXJnZXQwLmNvcHkobi50YXJnZXQpLG4ucG9zaXRpb24wLmNvcHkobi5vYmplY3QucG9zaXRpb24pLG4uem9vbTA9bi5vYmplY3Quem9vbX0sdGhpcy5yZXNldD1mdW5jdGlvbigpe24udGFyZ2V0LmNvcHkobi50YXJnZXQwKSxuLm9iamVjdC5wb3NpdGlvbi5jb3B5KG4ucG9zaXRpb24wKSxuLm9iamVjdC56b29tPW4uem9vbTAsbi5vYmplY3QudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpLG4uZGlzcGF0Y2hFdmVudChzcGUpLG4udXBkYXRlKCksbz1pLk5PTkV9LHRoaXMudXBkYXRlPWZ1bmN0aW9uKCl7bGV0IG50PW5ldyBqLEN0PW5ldyB5aSgpLnNldEZyb21Vbml0VmVjdG9ycyh0LnVwLG5ldyBqKDAsMSwwKSksV3Q9Q3QuY2xvbmUoKS5pbnZlcnQoKSxmZT1uZXcgaixhdD1uZXcgeWksc2U9MipNYXRoLlBJO3JldHVybiBmdW5jdGlvbigpe2xldCBDZT1uLm9iamVjdC5wb3NpdGlvbjtudC5jb3B5KENlKS5zdWIobi50YXJnZXQpLG50LmFwcGx5UXVhdGVybmlvbihDdCkscy5zZXRGcm9tVmVjdG9yMyhudCksbi5hdXRvUm90YXRlJiZvPT09aS5OT05FJiZEKGsoKSksbi5lbmFibGVEYW1waW5nPyhzLnRoZXRhKz1sLnRoZXRhKm4uZGFtcGluZ0ZhY3RvcixzLnBoaSs9bC5waGkqbi5kYW1waW5nRmFjdG9yKToocy50aGV0YSs9bC50aGV0YSxzLnBoaSs9bC5waGkpO2xldCBQdD1uLm1pbkF6aW11dGhBbmdsZSxOdD1uLm1heEF6aW11dGhBbmdsZTtyZXR1cm4gaXNGaW5pdGUoUHQpJiZpc0Zpbml0ZShOdCkmJihQdDwtTWF0aC5QST9QdCs9c2U6UHQ+TWF0aC5QSSYmKFB0LT1zZSksTnQ8LU1hdGguUEk/TnQrPXNlOk50Pk1hdGguUEkmJihOdC09c2UpLFB0PD1OdD9zLnRoZXRhPU1hdGgubWF4KFB0LE1hdGgubWluKE50LHMudGhldGEpKTpzLnRoZXRhPXMudGhldGE+KFB0K050KS8yP01hdGgubWF4KFB0LHMudGhldGEpOk1hdGgubWluKE50LHMudGhldGEpKSxzLnBoaT1NYXRoLm1heChuLm1pblBvbGFyQW5nbGUsTWF0aC5taW4obi5tYXhQb2xhckFuZ2xlLHMucGhpKSkscy5tYWtlU2FmZSgpLHMucmFkaXVzKj1jLHMucmFkaXVzPU1hdGgubWF4KG4ubWluRGlzdGFuY2UsTWF0aC5taW4obi5tYXhEaXN0YW5jZSxzLnJhZGl1cykpLG4uZW5hYmxlRGFtcGluZz09PSEwP24udGFyZ2V0LmFkZFNjYWxlZFZlY3Rvcih1LG4uZGFtcGluZ0ZhY3Rvcik6bi50YXJnZXQuYWRkKHUpLG50LnNldEZyb21TcGhlcmljYWwocyksbnQuYXBwbHlRdWF0ZXJuaW9uKFd0KSxDZS5jb3B5KG4udGFyZ2V0KS5hZGQobnQpLG4ub2JqZWN0Lmxvb2tBdChuLnRhcmdldCksbi5lbmFibGVEYW1waW5nPT09ITA/KGwudGhldGEqPTEtbi5kYW1waW5nRmFjdG9yLGwucGhpKj0xLW4uZGFtcGluZ0ZhY3Rvcix1Lm11bHRpcGx5U2NhbGFyKDEtbi5kYW1waW5nRmFjdG9yKSk6KGwuc2V0KDAsMCwwKSx1LnNldCgwLDAsMCkpLGM9MSxofHxmZS5kaXN0YW5jZVRvU3F1YXJlZChuLm9iamVjdC5wb3NpdGlvbik+YXx8OCooMS1hdC5kb3Qobi5vYmplY3QucXVhdGVybmlvbikpPmE/KG4uZGlzcGF0Y2hFdmVudChzcGUpLGZlLmNvcHkobi5vYmplY3QucG9zaXRpb24pLGF0LmNvcHkobi5vYmplY3QucXVhdGVybmlvbiksaD0hMSwhMCk6ITF9fSgpLHRoaXMuZGlzcG9zZT1mdW5jdGlvbigpe24uZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsSXQpLG4uZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsaHQpLG4uZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixpZSksbi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIndoZWVsIixhciksbi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIix3dCksbi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsa3QpLG4uX2RvbUVsZW1lbnRLZXlFdmVudHMhPT1udWxsJiZuLl9kb21FbGVtZW50S2V5RXZlbnRzLnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLGZyKX07bGV0IG49dGhpcyxpPXtOT05FOi0xLFJPVEFURTowLERPTExZOjEsUEFOOjIsVE9VQ0hfUk9UQVRFOjMsVE9VQ0hfUEFOOjQsVE9VQ0hfRE9MTFlfUEFOOjUsVE9VQ0hfRE9MTFlfUk9UQVRFOjZ9LG89aS5OT05FLGE9MWUtNixzPW5ldyBfTSxsPW5ldyBfTSxjPTEsdT1uZXcgaixoPSExLGY9bmV3IEx0LHA9bmV3IEx0LGQ9bmV3IEx0LGc9bmV3IEx0LF89bmV3IEx0LHk9bmV3IEx0LHg9bmV3IEx0LGI9bmV3IEx0LFM9bmV3IEx0LEM9W10sUD17fTtmdW5jdGlvbiBrKCl7cmV0dXJuIDIqTWF0aC5QSS82MC82MCpuLmF1dG9Sb3RhdGVTcGVlZH1mdW5jdGlvbiBPKCl7cmV0dXJuIE1hdGgucG93KC45NSxuLnpvb21TcGVlZCl9ZnVuY3Rpb24gRChudCl7bC50aGV0YS09bnR9ZnVuY3Rpb24gQihudCl7bC5waGktPW50fWxldCBJPWZ1bmN0aW9uKCl7bGV0IG50PW5ldyBqO3JldHVybiBmdW5jdGlvbihXdCxmZSl7bnQuc2V0RnJvbU1hdHJpeENvbHVtbihmZSwwKSxudC5tdWx0aXBseVNjYWxhcigtV3QpLHUuYWRkKG50KX19KCksTD1mdW5jdGlvbigpe2xldCBudD1uZXcgajtyZXR1cm4gZnVuY3Rpb24oV3QsZmUpe24uc2NyZWVuU3BhY2VQYW5uaW5nPT09ITA/bnQuc2V0RnJvbU1hdHJpeENvbHVtbihmZSwxKToobnQuc2V0RnJvbU1hdHJpeENvbHVtbihmZSwwKSxudC5jcm9zc1ZlY3RvcnMobi5vYmplY3QudXAsbnQpKSxudC5tdWx0aXBseVNjYWxhcihXdCksdS5hZGQobnQpfX0oKSxSPWZ1bmN0aW9uKCl7bGV0IG50PW5ldyBqO3JldHVybiBmdW5jdGlvbihXdCxmZSl7bGV0IGF0PW4uZG9tRWxlbWVudDtpZihuLm9iamVjdC5pc1BlcnNwZWN0aXZlQ2FtZXJhKXtsZXQgc2U9bi5vYmplY3QucG9zaXRpb247bnQuY29weShzZSkuc3ViKG4udGFyZ2V0KTtsZXQgUXQ9bnQubGVuZ3RoKCk7UXQqPU1hdGgudGFuKG4ub2JqZWN0LmZvdi8yKk1hdGguUEkvMTgwKSxJKDIqV3QqUXQvYXQuY2xpZW50SGVpZ2h0LG4ub2JqZWN0Lm1hdHJpeCksTCgyKmZlKlF0L2F0LmNsaWVudEhlaWdodCxuLm9iamVjdC5tYXRyaXgpfWVsc2Ugbi5vYmplY3QuaXNPcnRob2dyYXBoaWNDYW1lcmE/KEkoV3QqKG4ub2JqZWN0LnJpZ2h0LW4ub2JqZWN0LmxlZnQpL24ub2JqZWN0Lnpvb20vYXQuY2xpZW50V2lkdGgsbi5vYmplY3QubWF0cml4KSxMKGZlKihuLm9iamVjdC50b3Atbi5vYmplY3QuYm90dG9tKS9uLm9iamVjdC56b29tL2F0LmNsaWVudEhlaWdodCxuLm9iamVjdC5tYXRyaXgpKTooY29uc29sZS53YXJuKCJXQVJOSU5HOiBPcmJpdENvbnRyb2xzLmpzIGVuY291bnRlcmVkIGFuIHVua25vd24gY2FtZXJhIHR5cGUgLSBwYW4gZGlzYWJsZWQuIiksbi5lbmFibGVQYW49ITEpfX0oKTtmdW5jdGlvbiBGKG50KXtuLm9iamVjdC5pc1BlcnNwZWN0aXZlQ2FtZXJhP2MvPW50Om4ub2JqZWN0LmlzT3J0aG9ncmFwaGljQ2FtZXJhPyhuLm9iamVjdC56b29tPU1hdGgubWF4KG4ubWluWm9vbSxNYXRoLm1pbihuLm1heFpvb20sbi5vYmplY3Quem9vbSpudCkpLG4ub2JqZWN0LnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSxoPSEwKTooY29uc29sZS53YXJuKCJXQVJOSU5HOiBPcmJpdENvbnRyb2xzLmpzIGVuY291bnRlcmVkIGFuIHVua25vd24gY2FtZXJhIHR5cGUgLSBkb2xseS96b29tIGRpc2FibGVkLiIpLG4uZW5hYmxlWm9vbT0hMSl9ZnVuY3Rpb24geihudCl7bi5vYmplY3QuaXNQZXJzcGVjdGl2ZUNhbWVyYT9jKj1udDpuLm9iamVjdC5pc09ydGhvZ3JhcGhpY0NhbWVyYT8obi5vYmplY3Quem9vbT1NYXRoLm1heChuLm1pblpvb20sTWF0aC5taW4obi5tYXhab29tLG4ub2JqZWN0Lnpvb20vbnQpKSxuLm9iamVjdC51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCksaD0hMCk6KGNvbnNvbGUud2FybigiV0FSTklORzogT3JiaXRDb250cm9scy5qcyBlbmNvdW50ZXJlZCBhbiB1bmtub3duIGNhbWVyYSB0eXBlIC0gZG9sbHkvem9vbSBkaXNhYmxlZC4iKSxuLmVuYWJsZVpvb209ITEpfWZ1bmN0aW9uIFUobnQpe2Yuc2V0KG50LmNsaWVudFgsbnQuY2xpZW50WSl9ZnVuY3Rpb24gVyhudCl7eC5zZXQobnQuY2xpZW50WCxudC5jbGllbnRZKX1mdW5jdGlvbiBaKG50KXtnLnNldChudC5jbGllbnRYLG50LmNsaWVudFkpfWZ1bmN0aW9uIHJ0KG50KXtwLnNldChudC5jbGllbnRYLG50LmNsaWVudFkpLGQuc3ViVmVjdG9ycyhwLGYpLm11bHRpcGx5U2NhbGFyKG4ucm90YXRlU3BlZWQpO2xldCBDdD1uLmRvbUVsZW1lbnQ7RCgyKk1hdGguUEkqZC54L0N0LmNsaWVudEhlaWdodCksQigyKk1hdGguUEkqZC55L0N0LmNsaWVudEhlaWdodCksZi5jb3B5KHApLG4udXBkYXRlKCl9ZnVuY3Rpb24gb3QobnQpe2Iuc2V0KG50LmNsaWVudFgsbnQuY2xpZW50WSksUy5zdWJWZWN0b3JzKGIseCksUy55PjA/RihPKCkpOlMueTwwJiZ6KE8oKSkseC5jb3B5KGIpLG4udXBkYXRlKCl9ZnVuY3Rpb24gc3QobnQpe18uc2V0KG50LmNsaWVudFgsbnQuY2xpZW50WSkseS5zdWJWZWN0b3JzKF8sZykubXVsdGlwbHlTY2FsYXIobi5wYW5TcGVlZCksUih5LngseS55KSxnLmNvcHkoXyksbi51cGRhdGUoKX1mdW5jdGlvbiBTdChudCl7bnQuZGVsdGFZPDA/eihPKCkpOm50LmRlbHRhWT4wJiZGKE8oKSksbi51cGRhdGUoKX1mdW5jdGlvbiBidChudCl7bGV0IEN0PSExO3N3aXRjaChudC5jb2RlKXtjYXNlIG4ua2V5cy5VUDpSKDAsbi5rZXlQYW5TcGVlZCksQ3Q9ITA7YnJlYWs7Y2FzZSBuLmtleXMuQk9UVE9NOlIoMCwtbi5rZXlQYW5TcGVlZCksQ3Q9ITA7YnJlYWs7Y2FzZSBuLmtleXMuTEVGVDpSKG4ua2V5UGFuU3BlZWQsMCksQ3Q9ITA7YnJlYWs7Y2FzZSBuLmtleXMuUklHSFQ6Uigtbi5rZXlQYW5TcGVlZCwwKSxDdD0hMDticmVha31DdCYmKG50LnByZXZlbnREZWZhdWx0KCksbi51cGRhdGUoKSl9ZnVuY3Rpb24gTXQoKXtpZihDLmxlbmd0aD09PTEpZi5zZXQoQ1swXS5wYWdlWCxDWzBdLnBhZ2VZKTtlbHNle2xldCBudD0uNSooQ1swXS5wYWdlWCtDWzFdLnBhZ2VYKSxDdD0uNSooQ1swXS5wYWdlWStDWzFdLnBhZ2VZKTtmLnNldChudCxDdCl9fWZ1bmN0aW9uIGx0KCl7aWYoQy5sZW5ndGg9PT0xKWcuc2V0KENbMF0ucGFnZVgsQ1swXS5wYWdlWSk7ZWxzZXtsZXQgbnQ9LjUqKENbMF0ucGFnZVgrQ1sxXS5wYWdlWCksQ3Q9LjUqKENbMF0ucGFnZVkrQ1sxXS5wYWdlWSk7Zy5zZXQobnQsQ3QpfX1mdW5jdGlvbiBLdCgpe2xldCBudD1DWzBdLnBhZ2VYLUNbMV0ucGFnZVgsQ3Q9Q1swXS5wYWdlWS1DWzFdLnBhZ2VZLFd0PU1hdGguc3FydChudCpudCtDdCpDdCk7eC5zZXQoMCxXdCl9ZnVuY3Rpb24gX3QoKXtuLmVuYWJsZVpvb20mJkt0KCksbi5lbmFibGVQYW4mJmx0KCl9ZnVuY3Rpb24gY3QoKXtuLmVuYWJsZVpvb20mJkt0KCksbi5lbmFibGVSb3RhdGUmJk10KCl9ZnVuY3Rpb24gWChudCl7aWYoQy5sZW5ndGg9PTEpcC5zZXQobnQucGFnZVgsbnQucGFnZVkpO2Vsc2V7bGV0IFd0PWJlKG50KSxmZT0uNSoobnQucGFnZVgrV3QueCksYXQ9LjUqKG50LnBhZ2VZK1d0LnkpO3Auc2V0KGZlLGF0KX1kLnN1YlZlY3RvcnMocCxmKS5tdWx0aXBseVNjYWxhcihuLnJvdGF0ZVNwZWVkKTtsZXQgQ3Q9bi5kb21FbGVtZW50O0QoMipNYXRoLlBJKmQueC9DdC5jbGllbnRIZWlnaHQpLEIoMipNYXRoLlBJKmQueS9DdC5jbGllbnRIZWlnaHQpLGYuY29weShwKX1mdW5jdGlvbiBldChudCl7aWYoQy5sZW5ndGg9PT0xKV8uc2V0KG50LnBhZ2VYLG50LnBhZ2VZKTtlbHNle2xldCBDdD1iZShudCksV3Q9LjUqKG50LnBhZ2VYK0N0LngpLGZlPS41KihudC5wYWdlWStDdC55KTtfLnNldChXdCxmZSl9eS5zdWJWZWN0b3JzKF8sZykubXVsdGlwbHlTY2FsYXIobi5wYW5TcGVlZCksUih5LngseS55KSxnLmNvcHkoXyl9ZnVuY3Rpb24gZHQobnQpe2xldCBDdD1iZShudCksV3Q9bnQucGFnZVgtQ3QueCxmZT1udC5wYWdlWS1DdC55LGF0PU1hdGguc3FydChXdCpXdCtmZSpmZSk7Yi5zZXQoMCxhdCksUy5zZXQoMCxNYXRoLnBvdyhiLnkveC55LG4uem9vbVNwZWVkKSksRihTLnkpLHguY29weShiKX1mdW5jdGlvbiBxKG50KXtuLmVuYWJsZVpvb20mJmR0KG50KSxuLmVuYWJsZVBhbiYmZXQobnQpfWZ1bmN0aW9uIHB0KG50KXtuLmVuYWJsZVpvb20mJmR0KG50KSxuLmVuYWJsZVJvdGF0ZSYmWChudCl9ZnVuY3Rpb24gaHQobnQpe24uZW5hYmxlZCE9PSExJiYoQy5sZW5ndGg9PT0wJiYobi5kb21FbGVtZW50LnNldFBvaW50ZXJDYXB0dXJlKG50LnBvaW50ZXJJZCksbi5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIix3dCksbi5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsa3QpKSwkdChudCksbnQucG9pbnRlclR5cGU9PT0idG91Y2giP3R0KG50KTplZShudCkpfWZ1bmN0aW9uIHd0KG50KXtuLmVuYWJsZWQhPT0hMSYmKG50LnBvaW50ZXJUeXBlPT09InRvdWNoIj8kKG50KTpMZShudCkpfWZ1bmN0aW9uIGt0KG50KXtoZShudCksQy5sZW5ndGg9PT0wJiYobi5kb21FbGVtZW50LnJlbGVhc2VQb2ludGVyQ2FwdHVyZShudC5wb2ludGVySWQpLG4uZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsd3QpLG4uZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLGt0KSksbi5kaXNwYXRjaEV2ZW50KGxwZSksbz1pLk5PTkV9ZnVuY3Rpb24gaWUobnQpe2hlKG50KX1mdW5jdGlvbiBlZShudCl7bGV0IEN0O3N3aXRjaChudC5idXR0b24pe2Nhc2UgMDpDdD1uLm1vdXNlQnV0dG9ucy5MRUZUO2JyZWFrO2Nhc2UgMTpDdD1uLm1vdXNlQnV0dG9ucy5NSURETEU7YnJlYWs7Y2FzZSAyOkN0PW4ubW91c2VCdXR0b25zLlJJR0hUO2JyZWFrO2RlZmF1bHQ6Q3Q9LTF9c3dpdGNoKEN0KXtjYXNlIFowLkRPTExZOmlmKG4uZW5hYmxlWm9vbT09PSExKXJldHVybjtXKG50KSxvPWkuRE9MTFk7YnJlYWs7Y2FzZSBaMC5ST1RBVEU6aWYobnQuY3RybEtleXx8bnQubWV0YUtleXx8bnQuc2hpZnRLZXkpe2lmKG4uZW5hYmxlUGFuPT09ITEpcmV0dXJuO1oobnQpLG89aS5QQU59ZWxzZXtpZihuLmVuYWJsZVJvdGF0ZT09PSExKXJldHVybjtVKG50KSxvPWkuUk9UQVRFfWJyZWFrO2Nhc2UgWjAuUEFOOmlmKG50LmN0cmxLZXl8fG50Lm1ldGFLZXl8fG50LnNoaWZ0S2V5KXtpZihuLmVuYWJsZVJvdGF0ZT09PSExKXJldHVybjtVKG50KSxvPWkuUk9UQVRFfWVsc2V7aWYobi5lbmFibGVQYW49PT0hMSlyZXR1cm47WihudCksbz1pLlBBTn1icmVhaztkZWZhdWx0Om89aS5OT05FfW8hPT1pLk5PTkUmJm4uZGlzcGF0Y2hFdmVudChIaHQpfWZ1bmN0aW9uIExlKG50KXtpZihuLmVuYWJsZWQhPT0hMSlzd2l0Y2gobyl7Y2FzZSBpLlJPVEFURTppZihuLmVuYWJsZVJvdGF0ZT09PSExKXJldHVybjtydChudCk7YnJlYWs7Y2FzZSBpLkRPTExZOmlmKG4uZW5hYmxlWm9vbT09PSExKXJldHVybjtvdChudCk7YnJlYWs7Y2FzZSBpLlBBTjppZihuLmVuYWJsZVBhbj09PSExKXJldHVybjtzdChudCk7YnJlYWt9fWZ1bmN0aW9uIGFyKG50KXtuLmVuYWJsZWQ9PT0hMXx8bi5lbmFibGVab29tPT09ITF8fG8hPT1pLk5PTkV8fChudC5wcmV2ZW50RGVmYXVsdCgpLG4uZGlzcGF0Y2hFdmVudChIaHQpLFN0KG50KSxuLmRpc3BhdGNoRXZlbnQobHBlKSl9ZnVuY3Rpb24gZnIobnQpe24uZW5hYmxlZD09PSExfHxuLmVuYWJsZVBhbj09PSExfHxidChudCl9ZnVuY3Rpb24gdHQobnQpe3N3aXRjaChUdChudCksQy5sZW5ndGgpe2Nhc2UgMTpzd2l0Y2gobi50b3VjaGVzLk9ORSl7Y2FzZSBKMC5ST1RBVEU6aWYobi5lbmFibGVSb3RhdGU9PT0hMSlyZXR1cm47TXQoKSxvPWkuVE9VQ0hfUk9UQVRFO2JyZWFrO2Nhc2UgSjAuUEFOOmlmKG4uZW5hYmxlUGFuPT09ITEpcmV0dXJuO2x0KCksbz1pLlRPVUNIX1BBTjticmVhaztkZWZhdWx0Om89aS5OT05FfWJyZWFrO2Nhc2UgMjpzd2l0Y2gobi50b3VjaGVzLlRXTyl7Y2FzZSBKMC5ET0xMWV9QQU46aWYobi5lbmFibGVab29tPT09ITEmJm4uZW5hYmxlUGFuPT09ITEpcmV0dXJuO190KCksbz1pLlRPVUNIX0RPTExZX1BBTjticmVhaztjYXNlIEowLkRPTExZX1JPVEFURTppZihuLmVuYWJsZVpvb209PT0hMSYmbi5lbmFibGVSb3RhdGU9PT0hMSlyZXR1cm47Y3QoKSxvPWkuVE9VQ0hfRE9MTFlfUk9UQVRFO2JyZWFrO2RlZmF1bHQ6bz1pLk5PTkV9YnJlYWs7ZGVmYXVsdDpvPWkuTk9ORX1vIT09aS5OT05FJiZuLmRpc3BhdGNoRXZlbnQoSGh0KX1mdW5jdGlvbiAkKG50KXtzd2l0Y2goVHQobnQpLG8pe2Nhc2UgaS5UT1VDSF9ST1RBVEU6aWYobi5lbmFibGVSb3RhdGU9PT0hMSlyZXR1cm47WChudCksbi51cGRhdGUoKTticmVhaztjYXNlIGkuVE9VQ0hfUEFOOmlmKG4uZW5hYmxlUGFuPT09ITEpcmV0dXJuO2V0KG50KSxuLnVwZGF0ZSgpO2JyZWFrO2Nhc2UgaS5UT1VDSF9ET0xMWV9QQU46aWYobi5lbmFibGVab29tPT09ITEmJm4uZW5hYmxlUGFuPT09ITEpcmV0dXJuO3EobnQpLG4udXBkYXRlKCk7YnJlYWs7Y2FzZSBpLlRPVUNIX0RPTExZX1JPVEFURTppZihuLmVuYWJsZVpvb209PT0hMSYmbi5lbmFibGVSb3RhdGU9PT0hMSlyZXR1cm47cHQobnQpLG4udXBkYXRlKCk7YnJlYWs7ZGVmYXVsdDpvPWkuTk9ORX19ZnVuY3Rpb24gSXQobnQpe24uZW5hYmxlZCE9PSExJiZudC5wcmV2ZW50RGVmYXVsdCgpfWZ1bmN0aW9uICR0KG50KXtDLnB1c2gobnQpfWZ1bmN0aW9uIGhlKG50KXtkZWxldGUgUFtudC5wb2ludGVySWRdO2ZvcihsZXQgQ3Q9MDtDdDxDLmxlbmd0aDtDdCsrKWlmKENbQ3RdLnBvaW50ZXJJZD09bnQucG9pbnRlcklkKXtDLnNwbGljZShDdCwxKTtyZXR1cm59fWZ1bmN0aW9uIFR0KG50KXtsZXQgQ3Q9UFtudC5wb2ludGVySWRdO0N0PT09dm9pZCAwJiYoQ3Q9bmV3IEx0LFBbbnQucG9pbnRlcklkXT1DdCksQ3Quc2V0KG50LnBhZ2VYLG50LnBhZ2VZKX1mdW5jdGlvbiBiZShudCl7bGV0IEN0PW50LnBvaW50ZXJJZD09PUNbMF0ucG9pbnRlcklkP0NbMV06Q1swXTtyZXR1cm4gUFtDdC5wb2ludGVySWRdfW4uZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsSXQpLG4uZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsaHQpLG4uZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixpZSksbi5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIixhcix7cGFzc2l2ZTohMX0pLHRoaXMudXBkYXRlKCl9fTt2YXIgRjY9Y2xhc3MgZXh0ZW5kcyBxc3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuX2xhc3RNZXNoPW51bGwsdGhpcy5fY2xvY2s9bmV3IG1NLHRoaXMuX2NhbnZhc1NpemU9bnVsbCx0aGlzLl9sYXllcnNDb25maWc9bnVsbCx0aGlzLl9ydW5Db2xvcj10fV9pc09iamVjdCh0KXt2YXIgcj10eXBlb2YgdDtyZXR1cm4gcj09Im9iamVjdCImJnQhPW51bGwmJiFBcnJheS5pc0FycmF5KHQpfV9hcHBseURlZmF1bHRzKHQscil7bGV0IG49e30saT1bdCxyXTtmb3IobGV0IG89MDtvPGkubGVuZ3RoO28rKyl7bGV0IGE9aVtvXTtmb3IobGV0IHMgaW4gYSl7bGV0IGw9cyBpbiBuO3RoaXMuX2lzT2JqZWN0KGFbc10pP25bc109dGhpcy5fYXBwbHlEZWZhdWx0cyhuW3NdfHx7fSxhW3NdKTpsfHwobltzXT1hW3NdKX19cmV0dXJuIG59X2NyZWF0ZUxheWVycygpe2lmKCEoIXRoaXMuX2xheWVyc0NvbmZpZ3x8IXRoaXMuX3NjZW5lfHwhdGhpcy5fbGFzdE1lc2gpKXtpZih0aGlzLl9sYXllcnNDb25maWcuc2hvd0JvdW5kaW5nQm94KXt2YXIgdD1uZXcgeU0odGhpcy5fbGFzdE1lc2gsbmV3IG5lKCJyZ2IoMCwgMCwgMjU1KSIpKTt0aGlzLl9zY2VuZS5hZGQodCl9aWYodGhpcy5fbGF5ZXJzQ29uZmlnLnNob3dBeGVzKXt2YXIgcj1uZXcgdk0oNSk7dGhpcy5fc2NlbmUuYWRkKHIpfX19c2V0TGF5ZXJzQ29uZmlnKHQpe3RoaXMuX2xheWVyc0NvbmZpZz10aGlzLl9hcHBseURlZmF1bHRzKHQsdGhpcy5fbGF5ZXJzQ29uZmlnfHx7fSl9X2NyZWF0ZVdvcmxkKHQscil7dmFyIGEscyxsLGM7aWYodGhpcy5pc1JlYWR5KCkpcmV0dXJuO3RoaXMuX3NjZW5lPW5ldyBHMDt2YXIgbj1uZXcgd01bdC5jYW1lcmEuY2xzXSh0LmNhbWVyYS5mb3YsKChhPXRoaXMuX2NhbnZhc1NpemUpPT1udWxsP3ZvaWQgMDphLndpZHRoKS8oKHM9dGhpcy5fY2FudmFzU2l6ZSk9PW51bGw/dm9pZCAwOnMuaGVpZ2h0KSx0LmNhbWVyYS5uZWFyLHQuY2FtZXJhLmZhcik7dGhpcy5fY2FtZXJhPW4sdGhpcy5pbml0Q2FtZXJhUG9zaXRpb249dm9pZCAwLHQuY2FtZXJhLnBvc2l0aW9uJiYodGhpcy5pbml0Q2FtZXJhUG9zaXRpb249bmV3IGooKS5mcm9tQXJyYXkodC5jYW1lcmEucG9zaXRpb24pKSx0aGlzLmluaXRDYW1lcmFMb29rQXQ9dm9pZCAwLHQuY2FtZXJhLmxvb2tBdCYmKHRoaXMuaW5pdENhbWVyYUxvb2tBdD1uZXcgaigpLmZyb21BcnJheSh0LmNhbWVyYS5sb29rQXQpKTt2YXIgaT1uZXcgSlUobixyKTtsZXQgbz1pO28ubG9va1NwZWVkPS40LG8ubW92ZW1lbnRTcGVlZD0yMCxvLm5vRmx5PSEwLG8ubG9va1ZlcnRpY2FsPSEwLG8uY29uc3RyYWluVmVydGljYWw9ITAsby52ZXJ0aWNhbE1pbj0xLG8udmVydGljYWxNYXg9MixvLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsdGhpcy5fb25DYW1lcmFQb3NpdGlvbkNoYW5nZS5iaW5kKHRoaXMpKSx0aGlzLl9jYW1lcmFDb250cm9scz1pLHRoaXMuX3JlbmRlcmVyPW5ldyBybih7YW50aWFsaWFzOiEwfSksdGhpcy5fcmVuZGVyZXIuc2V0UGl4ZWxSYXRpbyh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyksdGhpcy5fcmVuZGVyZXIuc2V0U2l6ZSgobD10aGlzLl9jYW52YXNTaXplKT09bnVsbD92b2lkIDA6bC53aWR0aCwoYz10aGlzLl9jYW52YXNTaXplKT09bnVsbD92b2lkIDA6Yy5oZWlnaHQpLHRoaXMuX3JlbmRlcmVyLnNldENsZWFyQ29sb3IoMTY3NzcyMTUsMSl9X2NsZWFyU2NlbmUoKXt2YXIgdDtpZih0aGlzLl9zY2VuZSlmb3IoO3RoaXMuX3NjZW5lLmNoaWxkcmVuLmxlbmd0aD4wOyl0aGlzLl9zY2VuZS5yZW1vdmUoKHQ9dGhpcy5fc2NlbmUpPT1udWxsP3ZvaWQgMDp0LmNoaWxkcmVuWzBdKX1nZXRSZW5kZXJlcigpe3JldHVybiB0aGlzLl9yZW5kZXJlcn1nZXRDYW1lcmFDb250cm9scygpe3JldHVybiB0aGlzLl9jYW1lcmFDb250cm9sc31pc1JlYWR5KCl7cmV0dXJuISF0aGlzLl9jYW1lcmEmJiEhdGhpcy5fY2FtZXJhQ29udHJvbHN9Z2V0Q2FtZXJhUG9zaXRpb24oKXt2YXIgdCxyLG47cmV0dXJue2ZhcjoodD10aGlzLl9jYW1lcmEpPT1udWxsP3ZvaWQgMDp0LmZhcixwb3NpdGlvbjoocj10aGlzLl9jYW1lcmEpPT1udWxsP3ZvaWQgMDpyLnBvc2l0aW9uLmNsb25lKCksdGFyZ2V0OihuPXRoaXMuX2NhbWVyYUNvbnRyb2xzKT09bnVsbD92b2lkIDA6bi50YXJnZXQuY2xvbmUoKX19c2V0Q2FudmFzU2l6ZSh0KXt0aGlzLl9jYW52YXNTaXplPXR9ZHJhdygpe3ZhciByLG4saSxvO3RoaXMuX2FuaW1hdGlvbkZyYW1lSW5kZXgmJmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX2FuaW1hdGlvbkZyYW1lSW5kZXgpLHRoaXMuX2NhbWVyYSYmKHRoaXMuX2NhbWVyYS5hc3BlY3Q9KChyPXRoaXMuX2NhbnZhc1NpemUpPT1udWxsP3ZvaWQgMDpyLndpZHRoKS8oKG49dGhpcy5fY2FudmFzU2l6ZSk9PW51bGw/dm9pZCAwOm4uaGVpZ2h0KSx0aGlzLl9jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpKSx0aGlzLl9yZW5kZXJlci5zZXRTaXplKChpPXRoaXMuX2NhbnZhc1NpemUpPT1udWxsP3ZvaWQgMDppLndpZHRoLChvPXRoaXMuX2NhbnZhc1NpemUpPT1udWxsP3ZvaWQgMDpvLmhlaWdodCk7bGV0IHQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9jbG9jay5nZXREZWx0YSgpO3RoaXMuX2NhbWVyYUNvbnRyb2xzLnVwZGF0ZShhKSx0aGlzLl9hbmltYXRpb25GcmFtZUluZGV4PXJlcXVlc3RBbmltYXRpb25GcmFtZSh0KSx0aGlzLl9yZW5kZXJlci5yZW5kZXIodGhpcy5fc2NlbmUsdGhpcy5fY2FtZXJhKX0uYmluZCh0aGlzKTt0KCl9dXBkYXRlU2NlbmUodCxyKXtsZXQgbj17fTsiY29uZmlnImluIHQmJnQuY29uZmlnJiYobj1KU09OLnBhcnNlKHQuY29uZmlnKSksdGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJiZWZvcmVVcGRhdGVTY2VuZSJ9KTtsZXQgaT17Y2FtZXJhOntjbHM6IlBlcnNwZWN0aXZlQ2FtZXJhIixmb3Y6NzUsbmVhcjouMSxmYXI6MWUzfSxsaWdodHM6W3tjbHM6IkFtYmllbnRMaWdodCIsY29sb3I6IiNmZmZmZmYiLGludGVuc2l0eTouNzV9LHtjbHM6IkRpcmVjdGlvbmFsTGlnaHQiLGNvbG9yOiIjZmZmZmZmIixpbnRlbnNpdHk6Ljc1LHBvc2l0aW9uOlswLC0xLDJdfV19O249dGhpcy5fYXBwbHlEZWZhdWx0cyhuLGkpLHRoaXMuX2NyZWF0ZVdvcmxkKG4sciksdGhpcy5fY2xlYXJTY2VuZSgpLHRoaXMuX2NyZWF0ZUxpZ2h0cyh0aGlzLl9zY2VuZSxuKSx0aGlzLl9jcmVhdGVHZW9tZXRyeSh0LG4pLHRoaXMuX2NyZWF0ZUxheWVycygpLHRoaXMuZHJhdygpfXJlc2V0Vmlldyh0KXt2YXIgbixpO2lmKCF0aGlzLmlzUmVhZHkoKSlyZXR1cm47KG49dGhpcy5fY2FtZXJhQ29udHJvbHMpPT1udWxsfHxuLnJlc2V0KCk7bGV0IHI7IXQmJnRoaXMuX2xhc3RNZXNoJiYocj10aGlzLl9sYXN0TWVzaCksciYmKHRoaXMuX2ZpdE9iamVjdFRvVmlld3BvcnQociksdGhpcy5fbGFzdE1lc2g9ciksKGk9dGhpcy5fY2FtZXJhQ29udHJvbHMpPT1udWxsfHxpLnVwZGF0ZSgpfV9jcmVhdGVHZW9tZXRyeSh0LHIpe2xldCBuPXQubWVzaDtuLnZlcnRpY2VzJiZuLmZhY2VzJiZuLmZhY2VzLmxlbmd0aD90aGlzLl9jcmVhdGVNZXNoKG4scik6dGhpcy5fY3JlYXRlUG9pbnRDbG91ZChuLHIpfV9jcmVhdGVQb2ludENsb3VkKHQscil7dmFyIGg7bGV0IG49dC52ZXJ0aWNlcyxpPXQuY29sb3JzLG89e21hdGVyaWFsOntjbHM6IlBvaW50c01hdGVyaWFsIixzaXplOi4wMDV9fTtpJiZpLmxlbmd0aD09bi5sZW5ndGg/by5tYXRlcmlhbC52ZXJ0ZXhDb2xvcnM9ITA6by5tYXRlcmlhbC5jb2xvcj10aGlzLl9ydW5Db2xvcjtsZXQgYT10aGlzLl9hcHBseURlZmF1bHRzKHIsbykscz1uZXcgUGUsbD1uZXcgRmxvYXQzMkFycmF5KG4uZmxhdCgpKTtpZihzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBKZShsLDMpKSxpJiZpLmxlbmd0aD09bi5sZW5ndGgpe2xldCBmPW5ldyBGbG9hdDMyQXJyYXkoaS5mbGF0KCkpO2ZvcihsZXQgcD0wO3A8Zi5sZW5ndGg7cCsrKWZbcF09ZltwXS8yNTU7cy5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcgSmUoZiwzKSl9dmFyIGM9bmV3IHdNW2EubWF0ZXJpYWwuY2xzXShhLm1hdGVyaWFsKSx1PW5ldyBvbShzLGMpOyhoPXRoaXMuX3NjZW5lKT09bnVsbHx8aC5hZGQodSksdGhpcy5fbGFzdE1lc2g9dX1zZXRDYW1lcmFWaWV3cG9pbnQodCxyLG4pe3RoaXMuX3NpbGVudD0hMCx0aGlzLl9jYW1lcmEmJih0aGlzLl9jYW1lcmEuZmFyPXIsdGhpcy5fY2FtZXJhLnBvc2l0aW9uLnNldCh0LngsdC55LHQueiksdGhpcy5fY2FtZXJhLmxvb2tBdChuLmNsb25lKCkpLHRoaXMuX2NhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkpLHRoaXMuX2NhbWVyYUNvbnRyb2xzJiYodGhpcy5fY2FtZXJhQ29udHJvbHMudGFyZ2V0PW4uY2xvbmUoKSx0aGlzLl9jYW1lcmFDb250cm9scy51cGRhdGUoKSksdGhpcy5fc2lsZW50PSExfV9vbkNhbWVyYVBvc2l0aW9uQ2hhbmdlKHQpe3RoaXMuX3NpbGVudHx8dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJjYW1lcmFQb3NpdGlvbkNoYW5nZSIsZXZlbnQ6dH0pfV9maXRPYmplY3RUb1ZpZXdwb3J0KHQpe3ZhciBwLGQsZztsZXQgbj1uZXcgdGEsaT1uZXcgaixvPW5ldyBqO24uc2V0RnJvbU9iamVjdCh0KSxuLmdldENlbnRlcihpKSxuLmdldFNpemUobyk7bGV0IGE9TWF0aC5tYXgoby54LG8ueSxvLnopLHM9KChwPXRoaXMuX2NhbWVyYSk9PW51bGw/dm9pZCAwOnAuZm92KSooTWF0aC5QSS8xODApLGw9TWF0aC5hYnMoYS8oMipNYXRoLnRhbihzLzIpKSkqMS4yNSxjPW4ubWluLnosdT1jPDA/LWMrbDpsLWMsaD0oZD10aGlzLmluaXRDYW1lcmFQb3NpdGlvbikhPW51bGw/ZDpuZXcgaihpLngsaS55LGwpLGY9KGc9dGhpcy5pbml0Q2FtZXJhTG9va0F0KSE9bnVsbD9nOmk7dGhpcy5zZXRDYW1lcmFWaWV3cG9pbnQoaCx1KjMsZil9X2NyZWF0ZU1lc2godCxyKXt2YXIgZjtsZXQgbj10LnZlcnRpY2VzLGk9dC5mYWNlcyxvPXQuY29sb3JzLGE9dGhpcy5fYXBwbHlEZWZhdWx0cyhyLHttYXRlcmlhbDp7Y2xzOiJNZXNoU3RhbmRhcmRNYXRlcmlhbCIsY29sb3I6IiNhMGEwYTAiLHJvdWdobmVzczoxLG1ldGFsbmVzczowfX0pLHM9bmV3IFBlLGw9bmV3IEZsb2F0MzJBcnJheShuLmZsYXQoKSk7cy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgSmUobCwzKSk7bGV0IGM9bmV3IFVpbnQxNkFycmF5KGkuZmxhdCgpKTtpZihvJiZvLmxlbmd0aCl7bGV0IHA9by5mbGF0KCk7Zm9yKGxldCBkPTA7ZDxwLmxlbmd0aDtkKyspcFtkXT1wW2RdLzI1NTtzLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBKZShuZXcgRmxvYXQzMkFycmF5KHApLDMpKSxhLm1hdGVyaWFsPWEubWF0ZXJpYWx8fHt9LGEubWF0ZXJpYWwudmVydGV4Q29sb3JzPSEwfXMuY2VudGVyKCkscy5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSxzLnNldEluZGV4KG5ldyBKZShjLDEpKSxzLmNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCk7bGV0IHU9bmV3IHdNW2EubWF0ZXJpYWwuY2xzXShhLm1hdGVyaWFsKSxoPW5ldyB0aShzLHUpO2guY2FzdFNoYWRvdz0hMCxoLnJlY2VpdmVTaGFkb3c9ITAsKGY9dGhpcy5fc2NlbmUpPT1udWxsfHxmLmFkZChoKSx0aGlzLl9sYXN0TWVzaD1ofV9jcmVhdGVMaWdodHModCxyKXtmb3IobGV0IG49MDtuPHIubGlnaHRzLmxlbmd0aDtuKyspe2xldCBpPXIubGlnaHRzW25dLG89bmV3IHdNW2kuY2xzXShpLmNvbG9yLGkuaW50ZW5zaXR5KTtpLnBvc2l0aW9uJiZvLnBvc2l0aW9uLnNldChpLnBvc2l0aW9uWzBdLGkucG9zaXRpb25bMV0saS5wb3NpdGlvblsyXSksdC5hZGQobyl9fX07dmFyIGtuPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnNlbGVjdGVkVmlldz0iYWxsIix0aGlzLmFjdGl2ZT0hMSx0aGlzLl9jb2xvclNjYWxlRnVuY3Rpb249Zm4sdGhpcy5fc3RlcHM9W10sdGhpcy5fbWVzaFZpZXdlckF0dGFjaGVkPSExLHRoaXMuX2NhbWVyYVBvc2l0aW9uSW5pdGlhbGl6ZWQ9ITEsdGhpcy5faXNNZXNoTG9hZGluZz0hMX1nZXQgX3J1bkNvbG9yKCl7dmFyIHQ9dGhpcy5ydW47cmV0dXJuIHRoaXMuX2NvbG9yU2NhbGVGdW5jdGlvbih0KX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fZGF0YVByb3ZpZGVyPW5ldyBJUCh0aGlzLnJlcXVlc3RNYW5hZ2VyKTtsZXQgdD1uZXcgRjYodGhpcy5fcnVuQ29sb3IpO3QuYWRkRXZlbnRMaXN0ZW5lcigiYmVmb3JlVXBkYXRlU2NlbmUiLHRoaXMuX3VwZGF0ZUNhbnZhc1NpemUuYmluZCh0aGlzKSksdC5hZGRFdmVudExpc3RlbmVyKCJjYW1lcmFQb3NpdGlvbkNoYW5nZSIsdGhpcy5fb25DYW1lcmFQb3NpdGlvbkNoYW5nZS5iaW5kKHRoaXMpKSx0aGlzLl9tZXNoVmlld2VyPXR9cmVsb2FkKCl7IXRoaXMuYWN0aXZlfHwhdGhpcy5fZGF0YVByb3ZpZGVyfHwodGhpcy5faXNNZXNoTG9hZGluZz0hMCx0aGlzLl9kYXRhUHJvdmlkZXIucmVsb2FkKHRoaXMucnVuLHRoaXMudGFnLHRoaXMuc2FtcGxlKS50aGVuKHQ9PnshdHx8KHRoaXMuX3N0ZXBzPXQsdGhpcy5fc3RlcEluZGV4PXQubGVuZ3RoLTEpfSkuY2F0Y2godD0+e2lmKCF0fHwhdC5jb2RlfHx0LmNvZGUhPW0xLkNBTkNFTExFRCl0aHJvdyB0PXR8fCJSZXNwb25zZSBwcm9jZXNzaW5nIGZhaWxlZC4iLG5ldyBFcnJvcih0KX0pKX1fdXBkYXRlU2NlbmUoKXt2YXIgcjtsZXQgdD10aGlzLl9jdXJyZW50U3RlcDshdHx8IXQubWVzaHx8KHRoaXMuX21lc2hWaWV3ZXIudXBkYXRlU2NlbmUodCx0aGlzKSx0aGlzLl9jYW1lcmFQb3NpdGlvbkluaXRpYWxpemVkfHwodGhpcy5fbWVzaFZpZXdlci5yZXNldFZpZXcoKSx0aGlzLl9jYW1lcmFQb3NpdGlvbkluaXRpYWxpemVkPSEwKSx0aGlzLl9tZXNoVmlld2VyQXR0YWNoZWR8fCgocj10aGlzLnNoYWRvd1Jvb3QpPT1udWxsfHxyLmFwcGVuZENoaWxkKHRoaXMuX21lc2hWaWV3ZXIuZ2V0UmVuZGVyZXIoKS5kb21FbGVtZW50KSx0aGlzLl9tZXNoVmlld2VyQXR0YWNoZWQ9ITApKX1fZGVib3VuY2VkRmV0Y2hNZXNoKCl7dGhpcy5kZWJvdW5jZSgiZmV0Y2hNZXNoIiwoKT0+dGhpcy5fbWF5YmVGZXRjaE1lc2goKSwxMDApfV9tYXliZUZldGNoTWVzaCgpe3JldHVybiBSaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7bGV0IHQ9dGhpcy5fY3VycmVudFN0ZXA7aWYoISghdHx8dC5tZXNofHx0Lm1lc2hGZXRjaGluZykpe3QubWVzaEZldGNoaW5nPSEwLHRoaXMuX2lzTWVzaExvYWRpbmc9ITA7dHJ5e2xldCByPXlpZWxkIHRoaXMuX2RhdGFQcm92aWRlci5mZXRjaERhdGEodCx0aGlzLnJ1bix0aGlzLnRhZyx0aGlzLnNhbXBsZSk7dC5tZXNoPXJbMF0sdGhpcy5ub3RpZnlQYXRoKCJfY3VycmVudFN0ZXAubWVzaCIpfWNhdGNoKHIpe2lmKCFyfHwhci5jb2RlfHxyLmNvZGUhPW0xLkNBTkNFTExFRCl0aHJvdyByPXJ8fCJSZXNwb25zZSBwcm9jZXNzaW5nIGZhaWxlZC4iLG5ldyBFcnJvcihyKX1maW5hbGx5e3RoaXMuX2lzTWVzaExvYWRpbmc9ITEsdC5tZXNoRmV0Y2hpbmc9ITF9fX0pfV9vbkNhbWVyYVBvc2l0aW9uQ2hhbmdlKCl7aWYoIXRoaXMuX21lc2hWaWV3ZXIuaXNSZWFkeSgpKXJldHVybjtsZXQgdD1uZXcgQ3VzdG9tRXZlbnQoImNhbWVyYS1wb3NpdGlvbi1jaGFuZ2UiLHtkZXRhaWw6dGhpcy5fbWVzaFZpZXdlci5nZXRDYW1lcmFQb3NpdGlvbigpfSk7dGhpcy5kaXNwYXRjaEV2ZW50KHQpfXNldENhbWVyYVZpZXdwb2ludCh0LHIsbil7dGhpcy5fbWVzaFZpZXdlci5zZXRDYW1lcmFWaWV3cG9pbnQodCxyLG4pfV91cGRhdGVDYW52YXNTaXplKCl7bGV0IHQ9dGhpcy5vZmZzZXRXaWR0aCxyPXQsbj10aGlzLiQkKCIudGYtbWVzaC1sb2FkZXItaGVhZGVyIikub2Zmc2V0SGVpZ2h0LGk9e3dpZHRoOnQsaGVpZ2h0OnItbn07dGhpcy5fbWVzaFZpZXdlci5zZXRDYW52YXNTaXplKGkpfXJlZHJhdygpe3RoaXMuX3VwZGF0ZUNhbnZhc1NpemUoKSx0aGlzLmlzQ29ubmVjdGVkJiZ0aGlzLl9tZXNoVmlld2VyLmRyYXcoKX1faGFzQXRMZWFzdE9uZVN0ZXAodCl7cmV0dXJuISF0JiZ0Lmxlbmd0aD4wfV9oYXNNdWx0aXBsZVN0ZXBzKHQpe3JldHVybiEhdCYmdC5sZW5ndGg+MX1nZXQgX2N1cnJlbnRTdGVwKCl7dmFyIHQ9dGhpcy5fc3RlcHMscj10aGlzLl9zdGVwSW5kZXg7cmV0dXJuIHRbcl18fG51bGx9Z2V0IF9zdGVwVmFsdWUoKXtsZXQgdD10aGlzLl9jdXJyZW50U3RlcDtyZXR1cm4gdD90LnN0ZXA6MH1nZXQgX2N1cnJlbnRXYWxsVGltZSgpe2xldCB0PXRoaXMuX2N1cnJlbnRTdGVwO3JldHVybiB0P3MyKHQud2FsbF90aW1lKToiIn1fZ2V0TWF4U3RlcEluZGV4KHQpe3JldHVybiB0Lmxlbmd0aC0xfV9nZXRTYW1wbGVUZXh0KHQpe3JldHVybiBTdHJpbmcodCsxKX1faGFzTXVsdGlwbGVTYW1wbGVzKHQpe3JldHVybiB0PjF9X3VwZGF0ZVZpZXcoKXt2YXIgdD10aGlzLnNlbGVjdGVkVmlldzt0aGlzLl9tZXNoVmlld2VyJiZ0PT0iYWxsIiYmdGhpcy5fbWVzaFZpZXdlci5yZXNldFZpZXcoKX10b0xvY2FsZVN0cmluZ18odCl7cmV0dXJuIHQudG9Mb2NhbGVTdHJpbmcoKX19O2tuLnRlbXBsYXRlPVFgCiAgICA8dGYtY2FyZC1oZWFkaW5nIGNvbG9yPSJbW19ydW5Db2xvcl1dIiBjbGFzcz0idGYtbWVzaC1sb2FkZXItaGVhZGVyIj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZVNhbXBsZXMob2ZTYW1wbGVzKV1dIj4KICAgICAgICA8ZGl2PnNhbXBsZTogW1tfZ2V0U2FtcGxlVGV4dChzYW1wbGUpXV0gb2YgW1tvZlNhbXBsZXNdXTwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc0F0TGVhc3RPbmVTdGVwKF9zdGVwcyldXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1sYWJlbCI+CiAgICAgICAgICAgIHN0ZXAKICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkIgogICAgICAgICAgICAgID5bW3RvTG9jYWxlU3RyaW5nXyhfc3RlcFZhbHVlKV1dPC9zcGFuCiAgICAgICAgICAgID4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1sYWJlbCBoZWFkaW5nLXJpZ2h0Ij4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19jdXJyZW50V2FsbFRpbWVdXSI+CiAgICAgICAgICAgICAgW1tfY3VycmVudFdhbGxUaW1lXV0KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibGFiZWwgcmlnaHQiPgogICAgICAgICAgICA8cGFwZXItc3Bpbm5lci1saXRlIGFjdGl2ZSBoaWRkZW4kPSJbWyFfaXNNZXNoTG9hZGluZ11dIj4KICAgICAgICAgICAgPC9wYXBlci1zcGlubmVyLWxpdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZVN0ZXBzKF9zdGVwcyldXSI+CiAgICAgICAgPGRpdj4KICAgICAgICAgIDxwYXBlci1zbGlkZXIKICAgICAgICAgICAgaWQ9InN0ZXBzIgogICAgICAgICAgICBpbW1lZGlhdGUtdmFsdWU9Int7X3N0ZXBJbmRleH19IgogICAgICAgICAgICBtYXg9IltbX2dldE1heFN0ZXBJbmRleChfc3RlcHMpXV0iCiAgICAgICAgICAgIG1heC1tYXJrZXJzPSJbW19nZXRNYXhTdGVwSW5kZXgoX3N0ZXBzKV1dIgogICAgICAgICAgICBzbmFwcwogICAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgICB2YWx1ZT0ie3tfc3RlcEluZGV4fX0iCiAgICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3RmLWNhcmQtaGVhZGluZz4KICAgIDxzdHlsZT4KICAgICAgcGFwZXItc2xpZGVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBtYXJnaW4tbGVmdDogMXB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMXB4OwogICAgICB9CiAgICAgIC50Zi1tZXNoLWxvYWRlci1oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGhlaWdodDogMTA1cHg7CiAgICAgIH0KICAgICAgW2hpZGRlbl0gewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxrbi5wcm90b3R5cGUsInJ1biIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxrbi5wcm90b3R5cGUsInRhZyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxrbi5wcm90b3R5cGUsInNhbXBsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxrbi5wcm90b3R5cGUsIm9mU2FtcGxlcyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxrbi5wcm90b3R5cGUsInNlbGVjdGVkVmlldyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGtuLnByb3RvdHlwZSwiYWN0aXZlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEFlKV0sa24ucHJvdG90eXBlLCJyZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGNildLGtuLnByb3RvdHlwZSwiX21lc2hWaWV3ZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsSVApXSxrbi5wcm90b3R5cGUsIl9kYXRhUHJvdmlkZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sa24ucHJvdG90eXBlLCJfY29sb3JTY2FsZUZ1bmN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXksbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sa24ucHJvdG90eXBlLCJfc3RlcHMiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLGtuLnByb3RvdHlwZSwiX3N0ZXBJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGtuLnByb3RvdHlwZSwiX21lc2hWaWV3ZXJBdHRhY2hlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGtuLnByb3RvdHlwZSwiX2NhbWVyYVBvc2l0aW9uSW5pdGlhbGl6ZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxrbi5wcm90b3R5cGUsIl9pc01lc2hMb2FkaW5nIix2b2lkIDApO0UoW1J0KCJydW4iKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxrbi5wcm90b3R5cGUsIl9ydW5Db2xvciIsbnVsbCk7RShbQnQoInJ1biIsInRhZyIsImFjdGl2ZSIsIl9kYXRhUHJvdmlkZXIiLCJfbWVzaFZpZXdlciIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sa24ucHJvdG90eXBlLCJyZWxvYWQiLG51bGwpO0UoW0J0KCJfY3VycmVudFN0ZXAuKiIsIl9tZXNoVmlld2VyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxrbi5wcm90b3R5cGUsIl91cGRhdGVTY2VuZSIsbnVsbCk7RShbQnQoIl9jdXJyZW50U3RlcCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sa24ucHJvdG90eXBlLCJfZGVib3VuY2VkRmV0Y2hNZXNoIixudWxsKTtFKFtSdCgiX3N0ZXBzIiwiX3N0ZXBJbmRleCIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGtuLnByb3RvdHlwZSwiX2N1cnJlbnRTdGVwIixudWxsKTtFKFtSdCgiX2N1cnJlbnRTdGVwIiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sa24ucHJvdG90eXBlLCJfc3RlcFZhbHVlIixudWxsKTtFKFtSdCgiX2N1cnJlbnRTdGVwIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sa24ucHJvdG90eXBlLCJfY3VycmVudFdhbGxUaW1lIixudWxsKTtFKFtCdCgic2VsZWN0ZWRWaWV3IiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxrbi5wcm90b3R5cGUsIl91cGRhdGVWaWV3IixudWxsKTtrbj1FKFt5dCgidGYtbWVzaC1sb2FkZXIiKV0sa24pO3ZhciBwaD1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnJlbG9hZE9uUmVhZHk9ITAsdGhpcy5fdGFnRmlsdGVyPSIuKiIsdGhpcy5fc2VsZWN0ZWRWaWV3PSJhbGwiLHRoaXMuX3JlcXVlc3RNYW5hZ2VyPW5ldyBBZSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIiwoKT0+e3RoaXMuX2hhbmRsZVdpbmRvd1Jlc2l6ZSgpfSwhMSksdGhpcy5yZWxvYWRPblJlYWR5JiZ0aGlzLnJlbG9hZCgpfV9nZXRBbGxDaGlsZHJlbigpe3ZhciB0O3JldHVybiBBcnJheS5mcm9tKCh0PXRoaXMuc2hhZG93Um9vdCk9PW51bGw/dm9pZCAwOnQucXVlcnlTZWxlY3RvckFsbCgidGYtbWVzaC1sb2FkZXIiKSl9X29uQ2FtZXJhUG9zaXRpb25DaGFuZ2VkKHQpe3RoaXMuX3NlbGVjdGVkVmlldz09InNoYXJlIiYmdGhpcy5fZ2V0QWxsQ2hpbGRyZW4oKS5mb3JFYWNoKHI9Pnt0LnRhcmdldCE9ciYmci5zZXRDYW1lcmFWaWV3cG9pbnQodC5kZXRhaWwucG9zaXRpb24sdC5kZXRhaWwuZmFyLHQuZGV0YWlsLnRhcmdldCl9KX1fc2hvdWxkT3Blbih0KXtyZXR1cm4gdDw9Mn1yZWxvYWQoKXt0aGlzLl9mZXRjaFRhZ3MoKS50aGVuKHRoaXMuX3JlbG9hZE1lc2hlcy5iaW5kKHRoaXMpKX1faGFuZGxlV2luZG93UmVzaXplKCl7dGhpcy5fZ2V0QWxsQ2hpbGRyZW4oKS5mb3JFYWNoKHQ9Pnt0LnJlZHJhdygpfSl9X2ZldGNoVGFncygpe2xldCB0PV9lKCkucGx1Z2luUm91dGUoIm1lc2giLCIvdGFncyIpO3JldHVybiB0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHQpLnRoZW4ocj0+e2lmKGx4LmlzRXF1YWwocix0aGlzLl9ydW5Ub1RhZ0luZm8pKXJldHVybjtsZXQgbj1seC5tYXBWYWx1ZXMocixvPT5PYmplY3Qua2V5cyhvKSksaT0kaShuKTt0aGlzLl9kYXRhTm90Rm91bmQ9aS5sZW5ndGg9PT0wLHRoaXMuX3J1blRvVGFnSW5mbz1yfSl9X3JlbG9hZE1lc2hlcygpe3RoaXMuX2dldEFsbENoaWxkcmVuKCkuZm9yRWFjaCh0PT57dC5yZWxvYWQoKX0pfWdldCBfY2F0ZWdvcmllcygpe3ZhciB0PXRoaXMuX3J1blRvVGFnSW5mbyxyPXRoaXMuX3NlbGVjdGVkUnVucyxuPXRoaXMuX3RhZ0ZpbHRlcjtsZXQgaT1seC5tYXBWYWx1ZXModCxsPT5PYmplY3Qua2V5cyhsKSksbz1RbChpLHIsbik7ZnVuY3Rpb24gYShsKXtsZXQgYz10W2wucnVuXVtsLnRhZ10uc2FtcGxlcztyZXR1cm4gbHgucmFuZ2UoYykubWFwKHU9Pk9iamVjdC5hc3NpZ24oe30sbCx7c2FtcGxlOnUsb2ZTYW1wbGVzOmN9KSl9cmV0dXJuIG8ubWFwKGw9Pk9iamVjdC5hc3NpZ24oe30sbCx7aXRlbXM6W10uY29uY2F0LmFwcGx5KFtdLGwuaXRlbXMubWFwKGEpKX0pKX19O3BoLnRlbXBsYXRlPVFgCiAgICA8dGYtZGFzaGJvYXJkLWxheW91dD4KICAgICAgPGRpdiBzbG90PSJzaWRlYmFyIiBjbGFzcz0iYWxsLWNvbnRyb2xzIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24gdmlldy1jb250cm9sIj4KICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+UG9pbnQgb2YgdmlldzwvaDM+CiAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWdyb3VwCiAgICAgICAgICAgICAgICBpZD0idmlldy1yYWRpby1ncm91cCIKICAgICAgICAgICAgICAgIHNlbGVjdGVkPSJ7e19zZWxlY3RlZFZpZXd9fSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIGlkPSJhbGwtcmFkaW8tYnV0dG9uIiBuYW1lPSJhbGwiPgogICAgICAgICAgICAgICAgICBEaXNwbGF5IGFsbCBwb2ludHMKICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICBmb3I9ImFsbC1yYWRpby1idXR0b24iCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICBab29tIGFuZCBjZW50ZXIgY2FtZXJhIHRvIGRpc3BsYXkgYWxsIHBvaW50cyBhdCBvbmNlLiBOb3RlLAogICAgICAgICAgICAgICAgICB0aGF0IHNvbWUgcG9pbnRzIGNvdWxkIGJlIHRvbyBmYXIgKGkuZS4gdG9vIHNtYWxsKSB0byBiZQogICAgICAgICAgICAgICAgICB2aXNpYmxlLgogICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBpZD0idXNlci1yYWRpby1idXR0b24iIG5hbWU9InVzZXIiPgogICAgICAgICAgICAgICAgICBDdXJyZW50IHZpZXcKICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICBmb3I9InVzZXItcmFkaW8tYnV0dG9uIgogICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgS2VlcCBjdXJyZW50IGNhbWVyYSBwb3NpdGlvbiBhbmQgem9vbSBsZXZlbC4KICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gaWQ9InNoYXJlLXJhZGlvLWJ1dHRvbiIgbmFtZT0ic2hhcmUiPgogICAgICAgICAgICAgICAgICBTaGFyZSB2aWV3cG9pbnQKICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICBmb3I9InNoYXJlLXJhZGlvLWJ1dHRvbiIKICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIFNoYXJlIHZpZXdwb2ludCBhbW9uZyBhbGwgY2FtZXJhcy4KICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWdyb3VwPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiBydW5zLXNlbGVjdG9yIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319Ij4KICAgICAgICAgIDwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBwb2ludCBjbG91ZCBkYXRhIHdhcyBmb3VuZC48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6PC9wPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgWW91IGhhdmVu4oCZdCB3cml0dGVuIGFueSBwb2ludCBjbG91ZCBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuCiAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIgogICAgICAgICAgICAgICAgPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRmLXRhZy1maWx0ZXJlciB0YWctZmlsdGVyPSJ7e190YWdGaWx0ZXJ9fSI+PC90Zi10YWctZmlsdGVyZXI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldwogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtbWVzaC1sb2FkZXIKICAgICAgICAgICAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgICAgICAgICAgICBzZWxlY3RlZC12aWV3PSJbW19zZWxlY3RlZFZpZXddXSIKICAgICAgICAgICAgICAgICAgcnVuPSJbW2l0ZW0ucnVuXV0iCiAgICAgICAgICAgICAgICAgIHRhZz0iW1tpdGVtLnRhZ11dIgogICAgICAgICAgICAgICAgICBzYW1wbGU9IltbaXRlbS5zYW1wbGVdXSIKICAgICAgICAgICAgICAgICAgb2Ytc2FtcGxlcz0iW1tpdGVtLm9mU2FtcGxlc11dIgogICAgICAgICAgICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Zi1tZXNoLWxvYWRlci1jb250YWluZXIiCiAgICAgICAgICAgICAgICAgIG9uLWNhbWVyYS1wb3NpdGlvbi1jaGFuZ2U9Il9vbkNhbWVyYVBvc2l0aW9uQ2hhbmdlZCIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDwvdGYtbWVzaC1sb2FkZXI+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgLm5vLWRhdGEtd2FybmluZyB7CiAgICAgICAgbWF4LXdpZHRoOiA1NDBweDsKICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgIH0KICAgICAgcGFwZXItcmFkaW8tYnV0dG9uIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nOiA1cHg7CiAgICAgIH0KICAgICAgLnNpZGViYXItc2VjdGlvbiBoMyB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgICAgfQoKICAgICAgLnJ1bnMtc2VsZWN0b3IgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQoKICAgICAgdGYtcnVucy1zZWxlY3RvciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQoKICAgICAgLnZpZXctY29udHJvbCB7CiAgICAgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLnZpZXctY29udHJvbCBoMy50aXRsZSB7CiAgICAgICAgcGFkZGluZy10b3A6IDE2cHg7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDE2cHg7CiAgICAgIH0KCiAgICAgIC5hbGxjb250cm9scyAudmlldy1jb250cm9sIHBhcGVyLXJhZGlvLWdyb3VwIHsKICAgICAgICBtYXJnaW4tdG9wOiA1cHg7CiAgICAgIH0KICAgICAgLyogTGF5b3V0IG11c3QgYmUgaG9yaXpvbnRhbCwgaS5lLiBpdGVtcyBhcnJhbmdlZCBpbiBhIHJvdy4gSWYgaXRlbXMgY2Fubm90IGZpdCBpbiBhIHJvdywKICAgICAgICogdGhleSBzaG91bGQgYmUgbW92ZWQgdG8gbmV4dCBsaW5lLiBBbGwgaXRlbXMgbXVzdCBiZSBzcXVhcmUgYXQgYWxsIHRpbWVzLiBNaW5pbXVtIHNpemUgb2YKICAgICAgICogdGhlIGl0ZW0gaXMgNDgwcHguIFRoaXMgbWVhbnMgdGhhdCBtYXhpbXVtIHNpemUgb2YgdGhlIGl0ZW0gbXVzdCBiZSA0ODBweCArIDQ3OXB4ID0gOTU5cHguCiAgICAgICAqICovCiAgICAgIC5ob3Jpem9udGFsIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9CiAgICAgIHRmLW1lc2gtbG9hZGVyIHsKICAgICAgICB3aWR0aDogNDgwcHg7CiAgICAgICAgZmxleC1iYXNpczogNDgwcHg7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxwaC5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLHBoLnByb3RvdHlwZSwiX3NlbGVjdGVkUnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxwaC5wcm90b3R5cGUsIl9ydW5Ub1RhZ0luZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxwaC5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0scGgucHJvdG90eXBlLCJfdGFnRmlsdGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxwaC5wcm90b3R5cGUsIl9zZWxlY3RlZFZpZXciLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0scGgucHJvdG90eXBlLCJfcmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbUnQoIl9ydW5Ub1RhZ0luZm8iLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIpLHcoImRlc2lnbjp0eXBlIixBcnJheSksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0scGgucHJvdG90eXBlLCJfY2F0ZWdvcmllcyIsbnVsbCk7cGg9RShbeXQoIm1lc2gtZGFzaGJvYXJkIiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0scGgpO3ZhciBRVT1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5faW5zdGFsbENvbW1hbmQ9InBpcCBpbnN0YWxsIC1VIHRlbnNvcmJvYXJkLXBsdWdpbi1wcm9maWxlIn1fY29weUluc3RhbGxDb21tYW5kKCl7cmV0dXJuIFJpKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtsZXQgdD0oKT0+UmkodGhpcyxudWxsLGZ1bmN0aW9uKigpe3RoaXMuJC5jb21tYW5kVGV4dGFyZWEuc2VsZWN0KCk7dHJ5e3lpZWxkIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRoaXMuX2luc3RhbGxDb21tYW5kKX1jYXRjaChpKXtpZighZG9jdW1lbnQuZXhlY0NvbW1hbmQoImNvcHkiKSlyZXR1cm4gUHJvbWlzZS5yZWplY3QoKX19KSxyPXRoaXMuJC5jb3BpZWRNZXNzYWdlO3RyeXt5aWVsZCB0KCksci5pbm5lclRleHQ9IkNvcGllZC4ifWNhdGNoKG4pe3IuaW5uZXJUZXh0PSJGYWlsZWQgdG8gY29weSB0byBjbGlwYm9hcmQuIn19KX1fcmVtb3ZlQ29waWVkTWVzc2FnZSgpe2xldCB0PXRoaXMuJC5jb3BpZWRNZXNzYWdlO3QuaW5uZXJUZXh0PSIifX07UVUudGVtcGxhdGU9UWAKICAgIDxkaXYgY2xhc3M9Im1lc3NhZ2UiPgogICAgICA8aDM+VGhlIHByb2ZpbGUgcGx1Z2luIGhhcyBtb3ZlZC48L2gzPgogICAgICA8cD4KICAgICAgICBQbGVhc2UgaW5zdGFsbCB0aGUgbmV3IHZlcnNpb24gb2YgdGhlIHByb2ZpbGUgcGx1Z2luIGZyb20gUHlQSSBieQogICAgICAgIHJ1bm5pbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kIGZyb20gdGhlIG1hY2hpbmUgcnVubmluZyBUZW5zb3JCb2FyZDoKICAgICAgPC9wPgogICAgICA8dGV4dGFyZWEKICAgICAgICBpZD0iY29tbWFuZFRleHRhcmVhIgogICAgICAgIHJlYWRvbmx5PSIiCiAgICAgICAgcm93cz0iMSIKICAgICAgICBvbi1ibHVyPSJfcmVtb3ZlQ29waWVkTWVzc2FnZSIKICAgICAgPgpbW19pbnN0YWxsQ29tbWFuZF1dPC90ZXh0YXJlYQogICAgICA+CiAgICAgIDxkaXYgaWQ9ImNvcHlDb250YWluZXIiPgogICAgICAgIDxzcGFuIGlkPSJjb3BpZWRNZXNzYWdlIj48L3NwYW4+CiAgICAgICAgPHBhcGVyLWJ1dHRvbiByYWlzZWQ9IiIgb24tdGFwPSJfY29weUluc3RhbGxDb21tYW5kIgogICAgICAgICAgPkNvcHkgdG8gY2xpcGJvYXJkPC9wYXBlci1idXR0b24KICAgICAgICA+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQoKICAgICAgLm1lc3NhZ2UgewogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICB9CiAgICAgICNjb21tYW5kVGV4dGFyZWEgewogICAgICAgIG1hcmdpbi10b3A6IDFleDsKICAgICAgICBwYWRkaW5nOiAxZXggMWVtOwogICAgICAgIHJlc2l6ZTogdmVydGljYWw7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KICAgICAgI2NvcHlDb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KICAgICAgI2NvcGllZE1lc3NhZ2UgewogICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDFlbTsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFFVLnByb3RvdHlwZSwiX2luc3RhbGxDb21tYW5kIix2b2lkIDApO1FVPUUoW3l0KCJ0Zi1wcm9maWxlLXJlZGlyZWN0LWRhc2hib2FyZCIpXSxRVSk7dmFyIGNtPUVlKE9lKCksMSk7dmFyIEZsPUVlKE9lKCksMSksdHE9RWUoU2woKSwxKTt2YXIgbm49Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fZXhwYW5kZWQ9ITEsdGhpcy5fcnVuVG9QckN1cnZlRW50cnk9e30sdGhpcy5fcHJldmlvdXNSdW5Ub1ByQ3VydmVFbnRyeT17fSx0aGlzLl9jb2xvclNjYWxlRnVuY3Rpb249e3NjYWxlOmZufSx0aGlzLl9jYW5jZWxsZXI9bmV3IGFuLHRoaXMuX3hDb21wb25lbnRzQ3JlYXRpb25NZXRob2Q9KCk9PntsZXQgdD1uZXcgdHEuU2NhbGVzLkxpbmVhcjtyZXR1cm57c2NhbGU6dCxheGlzOm5ldyB0cS5BeGVzLk51bWVyaWModCwiYm90dG9tIiksYWNjZXNzb3I6cj0+ci5yZWNhbGx9fSx0aGlzLl95VmFsdWVBY2Nlc3Nvcj10PT50LnByZWNpc2lvbix0aGlzLl90b29sdGlwQ29sdW1ucz0oKCk9PntsZXQgdD1XdShyMCkscj1uPT5pc05hTihuKT8iTmFOIjp0KG4pO3JldHVyblt7dGl0bGU6IlJ1biIsZXZhbHVhdGU6bj0+bi5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZX0se3RpdGxlOiJUaHJlc2hvbGQiLGV2YWx1YXRlOm49PnIobi5kYXR1bS50aHJlc2hvbGRzKX0se3RpdGxlOiJQcmVjaXNpb24iLGV2YWx1YXRlOm49PnIobi5kYXR1bS5wcmVjaXNpb24pfSx7dGl0bGU6IlJlY2FsbCIsZXZhbHVhdGU6bj0+cihuLmRhdHVtLnJlY2FsbCl9LHt0aXRsZToiVFAiLGV2YWx1YXRlOm49Pm4uZGF0dW0udHJ1ZV9wb3NpdGl2ZXN9LHt0aXRsZToiRlAiLGV2YWx1YXRlOm49Pm4uZGF0dW0uZmFsc2VfcG9zaXRpdmVzfSx7dGl0bGU6IlROIixldmFsdWF0ZTpuPT5uLmRhdHVtLnRydWVfbmVnYXRpdmVzfSx7dGl0bGU6IkZOIixldmFsdWF0ZTpuPT5uLmRhdHVtLmZhbHNlX25lZ2F0aXZlc31dfSkoKSx0aGlzLl9zZXJpZXNEYXRhRmllbGRzPVsidGhyZXNob2xkcyIsInByZWNpc2lvbiIsInJlY2FsbCIsInRydWVfcG9zaXRpdmVzIiwiZmFsc2VfcG9zaXRpdmVzIiwidHJ1ZV9uZWdhdGl2ZXMiLCJmYWxzZV9uZWdhdGl2ZXMiXSx0aGlzLl9kZWZhdWx0WFJhbmdlPVstLjA1LDEuMDVdLHRoaXMuX2RlZmF1bHRZUmFuZ2U9Wy0uMDUsMS4wNV0sdGhpcy5fcmVxdWVzdERhdGE9KHQscixuKT0+e2xldCBvPV9lKCkucGx1Z2luUm91dGUoInByX2N1cnZlcyIsIi9wcl9jdXJ2ZXMiKTtQcm9taXNlLmFsbCh0Lm1hcChhPT57bGV0IHM9YSxsPXRoaXMudGFnLGM9TWkobyx7dGFnOmwscnVuOnN9KTtyZXR1cm4gdGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KGMpLnRoZW4odT0+dm9pZCByKHtpdGVtOmEsZGF0YTp1fSkpfSkpLmZpbmFsbHkoKCk9PnZvaWQgbigpKX0sdGhpcy5fc21vb3RoaW5nRW5hYmxlZD0hMX1fY3JlYXRlUHJvY2Vzc0RhdGFGdW5jdGlvbigpe3JldHVybih0LHIsbik9Pnt0aGlzLnNldCgiX3J1blRvRGF0YU92ZXJUaW1lIixPYmplY3QuYXNzaWduKHt9LHRoaXMuX3J1blRvRGF0YU92ZXJUaW1lLG4pKX19X2NvbXB1dGVSdW5Db2xvcih0KXtyZXR1cm4gZm4odCl9Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuX2F0dGFjaGVkPSEwLHRoaXMucmVsb2FkKCl9X2dldENoYXJ0RGF0YUxvYWRlcigpe3ZhciB0O3JldHVybih0PXRoaXMuc2hhZG93Um9vdCk9PW51bGw/dm9pZCAwOnQucXVlcnlTZWxlY3RvcigidGYtbGluZS1jaGFydC1kYXRhLWxvYWRlciIpfXJlbG9hZCgpe2lmKCEhdGhpcy5fYXR0YWNoZWQpe2lmKHRoaXMucnVucy5sZW5ndGg9PT0wKXt0aGlzLnNldCgiX3J1blRvRGF0YU92ZXJUaW1lIix7fSk7cmV0dXJufXRoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpLnJlbG9hZCgpfX1fc2V0Q2hhcnREYXRhKCl7dmFyIHQ9dGhpcy5fcnVuVG9QckN1cnZlRW50cnkscj10aGlzLl9wcmV2aW91c1J1blRvUHJDdXJ2ZUVudHJ5LG49dGhpcy5fc2V0T2ZSZWxldmFudFJ1bnM7RmwuZm9yT3duKHQsKGksbyk9PntsZXQgYT1yW29dO2lmKCEoYSYmdFtvXS5zdGVwPT09YS5zdGVwKSl7aWYoIW5bb10pe3RoaXMuX2NsZWFyU2VyaWVzRGF0YShvKTtyZXR1cm59dGhpcy5fdXBkYXRlU2VyaWVzRGF0YUZvclJ1bihvLGkpfX0pfV91cGRhdGVTZXJpZXNEYXRhRm9yUnVuKHQscil7bGV0IG49RmwucmVkdWNlKHRoaXMuX3Nlcmllc0RhdGFGaWVsZHMsKGEscyk9PihhW3NdPXJbc10uc2xpY2UoKS5yZXZlcnNlKCksYSkse30pLGk9bmV3IEFycmF5KG5bdGhpcy5fc2VyaWVzRGF0YUZpZWxkc1swXV0ubGVuZ3RoKTtmb3IobGV0IGE9MDthPGkubGVuZ3RoO2ErKylpW2FdPUZsLm1hcFZhbHVlcyhuLHM9PnNbYV0pO2xldCBvPXRoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpO28uc2V0U2VyaWVzRGF0YSh0LGkpLG8uY29tbWl0Q2hhbmdlcygpfV9jbGVhclNlcmllc0RhdGEodCl7bGV0IHI9dGhpcy5fZ2V0Q2hhcnREYXRhTG9hZGVyKCk7ci5zZXRTZXJpZXNEYXRhKHQsW10pLHIuY29tbWl0Q2hhbmdlcygpfV91cGRhdGVSdW5Ub1ByQ3VydmVFbnRyeSgpe3ZhciB0PXRoaXMuX3J1blRvRGF0YU92ZXJUaW1lLHI9dGhpcy5ydW5Ub1N0ZXBDYXA7bGV0IG49e307RmwuZm9yT3duKHQsKGksbyk9PnshaXx8IWkubGVuZ3RofHwobltvXT10aGlzLl9jb21wdXRlRW50cnlDbG9zZXN0T3JFcXVhbFRvU3RlcENhcChyW29dLGkpKX0pLHRoaXMuc2V0KCJfcHJldmlvdXNSdW5Ub1ByQ3VydmVFbnRyeSIsdGhpcy5fcnVuVG9QckN1cnZlRW50cnkpLHRoaXMuc2V0KCJfcnVuVG9QckN1cnZlRW50cnkiLG4pfV9ub3RpZnlEYXRhQ2hhbmdlKCl7dmFyIHQ9dGhpcy5fcnVuVG9EYXRhT3ZlclRpbWU7dGhpcy5vbkRhdGFDaGFuZ2UmJnRoaXMub25EYXRhQ2hhbmdlKHQpfV9jb21wdXRlRW50cnlDbG9zZXN0T3JFcXVhbFRvU3RlcENhcCh0LHIpe2xldCBuPU1hdGgubWluKEZsLnNvcnRlZEluZGV4KHIubWFwKGk9Pmkuc3RlcCksdCksci5sZW5ndGgtMSk7cmV0dXJuIHJbbl19Z2V0IF9ydW5zV2l0aFN0ZXBBdmFpbGFibGUoKXt2YXIgdD10aGlzLnJ1bnMscj10aGlzLl9ydW5Ub1ByQ3VydmVFbnRyeTtyZXR1cm4gRmwuZmlsdGVyKHQsbj0+cltuXSkuc29ydCgpfWdldCBfc2V0T2ZSZWxldmFudFJ1bnMoKXt2YXIgdD10aGlzLl9ydW5zV2l0aFN0ZXBBdmFpbGFibGU7bGV0IHI9e307cmV0dXJuIEZsLmZvckVhY2godCxuPT57cltuXT0hMH0pLHJ9X2NvbXB1dGVDdXJyZW50U3RlcEZvclJ1bih0LHIpe2xldCBuPXRbcl07cmV0dXJuIG4/bi5zdGVwOm51bGx9X2NvbXB1dGVDdXJyZW50V2FsbFRpbWVGb3JSdW4odCxyKXtsZXQgbj10W3JdO3JldHVybiBuP25ldyBEYXRlKG4ud2FsbF90aW1lKjFlMykudG9TdHJpbmcoKTpudWxsfV90b2dnbGVFeHBhbmRlZCh0KXt0aGlzLnNldCgiX2V4cGFuZGVkIiwhdGhpcy5fZXhwYW5kZWQpLHRoaXMucmVkcmF3KCl9X3Jlc2V0RG9tYWluKCl7dGhpcy5fZ2V0Q2hhcnREYXRhTG9hZGVyKCkucmVzZXREb21haW4oKX1yZWRyYXcoKXt0aGlzLl9nZXRDaGFydERhdGFMb2FkZXIoKS5yZWRyYXcoKX19O25uLnRlbXBsYXRlPVFgCiAgICA8dGYtY2FyZC1oZWFkaW5nCiAgICAgIHRhZz0iW1t0YWddXSIKICAgICAgZGlzcGxheS1uYW1lPSJbW3RhZ01ldGFkYXRhLmRpc3BsYXlOYW1lXV0iCiAgICAgIGRlc2NyaXB0aW9uPSJbW3RhZ01ldGFkYXRhLmRlc2NyaXB0aW9uXV0iCiAgICA+PC90Zi1jYXJkLWhlYWRpbmc+CgogICAgPHRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIKICAgICAgeC1jb21wb25lbnRzLWNyZWF0aW9uLW1ldGhvZD0iW1tfeENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZF1dIgogICAgICB5LXZhbHVlLWFjY2Vzc29yPSJbW195VmFsdWVBY2Nlc3Nvcl1dIgogICAgICB0b29sdGlwLWNvbHVtbnM9IltbX3Rvb2x0aXBDb2x1bW5zXV0iCiAgICAgIGNvbG9yLXNjYWxlPSJbW19jb2xvclNjYWxlRnVuY3Rpb25dXSIKICAgICAgZGVmYXVsdC14LXJhbmdlPSJbW19kZWZhdWx0WFJhbmdlXV0iCiAgICAgIGRlZmF1bHQteS1yYW5nZT0iW1tfZGVmYXVsdFlSYW5nZV1dIgogICAgICBzbW9vdGhpbmctZW5hYmxlZD0iW1tfc21vb3RoaW5nRW5hYmxlZF1dIgogICAgICByZXF1ZXN0LW1hbmFnZXI9IltbcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgZGF0YS10by1sb2FkPSJbW3J1bnNdXSIKICAgICAgZGF0YS1zZXJpZXM9IltbcnVuc11dIgogICAgICBsb2FkLWtleT0iW1t0YWddXSIKICAgICAgcmVxdWVzdC1kYXRhPSJbW19yZXF1ZXN0RGF0YV1dIgogICAgICBsb2FkLWRhdGEtY2FsbGJhY2s9IltbX2NyZWF0ZVByb2Nlc3NEYXRhRnVuY3Rpb24oKV1dIgogICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICA+PC90Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyPgoKICAgIDxkaXYgaWQ9ImJ1dHRvbnMtcm93Ij4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgc2VsZWN0ZWQkPSJbW19leHBhbmRlZF1dIgogICAgICAgIGljb249ImZ1bGxzY3JlZW4iCiAgICAgICAgb24tdGFwPSJfdG9nZ2xlRXhwYW5kZWQiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICBpY29uPSJzZXR0aW5ncy1vdmVyc2NhbiIKICAgICAgICBvbi10YXA9Il9yZXNldERvbWFpbiIKICAgICAgICB0aXRsZT0iUmVzZXQgYXhlcyB0byBbMCwgMV0uIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9InN0ZXAtbGVnZW5kIj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfcnVuc1dpdGhTdGVwQXZhaWxhYmxlXV0iIGFzPSJydW4iPgogICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1yb3ciPgogICAgICAgICAgPGRpdgogICAgICAgICAgICBjbGFzcz0iY29sb3ItYm94IgogICAgICAgICAgICBzdHlsZT0iYmFja2dyb3VuZDogW1tfY29tcHV0ZVJ1bkNvbG9yKHJ1bildXTsiCiAgICAgICAgICA+PC9kaXY+CiAgICAgICAgICBbW3J1bl1dIGlzIGF0CiAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RlcC1sYWJlbC10ZXh0Ij4KICAgICAgICAgICAgc3RlcCBbW19jb21wdXRlQ3VycmVudFN0ZXBGb3JSdW4oX3J1blRvUHJDdXJ2ZUVudHJ5LCBydW4pXV0gPC9zcGFuCiAgICAgICAgICA+PGJyIC8+CiAgICAgICAgICA8c3BhbiBjbGFzcz0id2FsbC10aW1lLWxhYmVsLXRleHQiPgogICAgICAgICAgICAoW1tfY29tcHV0ZUN1cnJlbnRXYWxsVGltZUZvclJ1bihfcnVuVG9QckN1cnZlRW50cnksIHJ1bildXSkKICAgICAgICAgIDwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvZGl2PgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICB3aWR0aDogNTAwcHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDI1cHg7CiAgICAgIH0KICAgICAgOmhvc3QoW19leHBhbmRlZF0pIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgICB0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyIHsKICAgICAgICBoZWlnaHQ6IDMwMHB4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQogICAgICA6aG9zdChbX2V4cGFuZGVkXSkgdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlciB7CiAgICAgICAgaGVpZ2h0OiA2MDBweDsKICAgICAgfQogICAgICAjYnV0dG9ucy1yb3cgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgfQogICAgICAjYnV0dG9ucy1yb3cgcGFwZXItaWNvbi1idXR0b24gewogICAgICAgIGNvbG9yOiAjMjE5NmYzOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7CiAgICAgICAgd2lkdGg6IDMycHg7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgIHBhZGRpbmc6IDRweDsKICAgICAgfQogICAgICAjYnV0dG9ucy1yb3cgcGFwZXItaWNvbi1idXR0b25bc2VsZWN0ZWRdIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICB9CiAgICAgICNzdGVwLWxlZ2VuZCB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBmb250LXNpemU6IDAuOGVtOwogICAgICAgIG1heC1oZWlnaHQ6IDIwMHB4OwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgcGFkZGluZzogMCAwIDAgMTBweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgICAubGVnZW5kLXJvdyB7CiAgICAgICAgbWFyZ2luOiA1cHggMCA1cHggMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgICAuY29sb3ItYm94IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMXB4OwogICAgICAgIHdpZHRoOiAxMHB4OwogICAgICAgIGhlaWdodDogMTBweDsKICAgICAgfQogICAgICAuc3RlcC1sYWJlbC10ZXh0IHsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgfQogICAgICAud2FsbC10aW1lLWxhYmVsLXRleHQgewogICAgICAgIGNvbG9yOiAjODg4OwogICAgICAgIGZvbnQtc2l6ZTogMC44ZW07CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sbm4ucHJvdG90eXBlLCJydW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLG5uLnByb3RvdHlwZSwidGFnIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLG5uLnByb3RvdHlwZSwidGFnTWV0YWRhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sbm4ucHJvdG90eXBlLCJydW5Ub1N0ZXBDYXAiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxubi5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sbm4ucHJvdG90eXBlLCJhY3RpdmUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sbm4ucHJvdG90eXBlLCJfZXhwYW5kZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sbm4ucHJvdG90eXBlLCJfcnVuVG9QckN1cnZlRW50cnkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sbm4ucHJvdG90eXBlLCJfcHJldmlvdXNSdW5Ub1ByQ3VydmVFbnRyeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxubi5wcm90b3R5cGUsIl9ydW5Ub0RhdGFPdmVyVGltZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLG5uLnByb3RvdHlwZSwib25EYXRhQ2hhbmdlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLG5uLnByb3RvdHlwZSwiX2NvbG9yU2NhbGVGdW5jdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixhbildLG5uLnByb3RvdHlwZSwiX2NhbmNlbGxlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLG5uLnByb3RvdHlwZSwiX2F0dGFjaGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLG5uLnByb3RvdHlwZSwiX3hDb21wb25lbnRzQ3JlYXRpb25NZXRob2QiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sbm4ucHJvdG90eXBlLCJfeVZhbHVlQWNjZXNzb3IiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG5uLnByb3RvdHlwZSwiX3Rvb2x0aXBDb2x1bW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxubi5wcm90b3R5cGUsIl9zZXJpZXNEYXRhRmllbGRzIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxubi5wcm90b3R5cGUsIl9kZWZhdWx0WFJhbmdlIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxubi5wcm90b3R5cGUsIl9kZWZhdWx0WVJhbmdlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sbm4ucHJvdG90eXBlLCJfcmVxdWVzdERhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxubi5wcm90b3R5cGUsIl9zbW9vdGhpbmdFbmFibGVkIix2b2lkIDApO0UoW0J0KCJydW5zIiwidGFnIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxubi5wcm90b3R5cGUsInJlbG9hZCIsbnVsbCk7RShbQnQoIl9ydW5Ub1ByQ3VydmVFbnRyeSIsIl9wcmV2aW91c1J1blRvUHJDdXJ2ZUVudHJ5IiwiX3NldE9mUmVsZXZhbnRSdW5zIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxubi5wcm90b3R5cGUsIl9zZXRDaGFydERhdGEiLG51bGwpO0UoW0J0KCJfcnVuVG9EYXRhT3ZlclRpbWUiLCJydW5Ub1N0ZXBDYXAiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLG5uLnByb3RvdHlwZSwiX3VwZGF0ZVJ1blRvUHJDdXJ2ZUVudHJ5IixudWxsKTtFKFtCdCgiX3J1blRvRGF0YU92ZXJUaW1lIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxubi5wcm90b3R5cGUsIl9ub3RpZnlEYXRhQ2hhbmdlIixudWxsKTtFKFtSdCgicnVucyIsIl9ydW5Ub1ByQ3VydmVFbnRyeSIpLHcoImRlc2lnbjp0eXBlIixBcnJheSksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sbm4ucHJvdG90eXBlLCJfcnVuc1dpdGhTdGVwQXZhaWxhYmxlIixudWxsKTtFKFtSdCgiX3J1bnNXaXRoU3RlcEF2YWlsYWJsZSIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLG5uLnByb3RvdHlwZSwiX3NldE9mUmVsZXZhbnRSdW5zIixudWxsKTtubj1FKFt5dCgidGYtcHItY3VydmUtY2FyZCIpXSxubik7dmFyIFNNPUVlKE9lKCksMSk7dmFyIHJwPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3J1blRvU3RlcEluZGV4PXt9fV9jb21wdXRlQ29sb3JGb3JSdW4odCl7cmV0dXJuIGZuKHQpfV9jb21wdXRlVGltZVRleHRGb3JSdW4odCxyLG4saSl7bGV0IG89cltuXTtpZighU00uaXNOdW1iZXIobykpcmV0dXJuIiI7bGV0IGE9dFtuXTtpZighYSlyZXR1cm4iIjtsZXQgcz1hW29dW2ldO2lmKGk9PT0ic3RlcCIpcmV0dXJuYHN0ZXAgJHtzfWA7aWYoaT09PSJyZWxhdGl2ZSIpcmV0dXJuIHM8MT9gJHsocyoxZTMpLnRvRml4ZWQoMil9IG1zYDpgJHtzLnRvRml4ZWQoMil9IHNgO2lmKGk9PT0id2FsbF90aW1lIilyZXR1cm4gbmV3IERhdGUocyoxZTMpLnRvU3RyaW5nKCk7dGhyb3cgbmV3IEVycm9yKGBUaGUgZGlzcGxheSB0eXBlIG9mICR7aX0gaXMgbm90IHJlY29nbml6ZWQuYCl9X3NsaWRlclZhbHVlQ2hhbmdlZCh0KXtsZXQgcj10LnRhcmdldC5kYXRhc2V0LnJ1bixuPXQudGFyZ2V0LmltbWVkaWF0ZVZhbHVlLGk9T2JqZWN0LmFzc2lnbih7fSx0aGlzLl9ydW5Ub1N0ZXBJbmRleCk7aXNOYU4obik/ZGVsZXRlIGlbcl06aVtyXT10LnRhcmdldC5pbW1lZGlhdGVWYWx1ZSx0aGlzLl9ydW5Ub1N0ZXBJbmRleD1pfV9jb21wdXRlTWF4U3RlcEluZGV4Rm9yUnVuKHQscil7bGV0IG49dFtyXTtyZXR1cm4gbiYmbi5sZW5ndGg/bi5sZW5ndGgtMTowfV91cGRhdGVTdGVwc0Zvck5ld1J1bnMoKXt2YXIgdD10aGlzLnJ1blRvQXZhaWxhYmxlVGltZUVudHJpZXM7bGV0IHI9T2JqZWN0LmFzc2lnbih7fSx0aGlzLl9ydW5Ub1N0ZXBJbmRleCk7U00uZm9yT3duKHQsKG4saSk9PntTTS5pc051bWJlcihyW2ldKXx8KHJbaV09bi5sZW5ndGgtMSl9KSx0aGlzLl9ydW5Ub1N0ZXBJbmRleD1yfV9nZXRTdGVwKHQscil7cmV0dXJuIHRoaXMuX3J1blRvU3RlcEluZGV4P3RoaXMuX3J1blRvU3RlcEluZGV4W3JdOjB9X2NvbXB1dGVSdW5Ub1N0ZXAodCxyKXtsZXQgbj17fTtyZXR1cm4gU00uZm9yT3duKHIsKGksbyk9PntsZXQgYT10W29dOyFhfHwobltvXT1hW2ldLnN0ZXApfSksbn1nZXQgX3J1bnNXaXRoU2xpZGVycygpe3ZhciB0PXRoaXMucnVucyxyPXRoaXMucnVuVG9BdmFpbGFibGVUaW1lRW50cmllcztyZXR1cm4gdC5maWx0ZXIobj0+cltuXSl9fTtycC50ZW1wbGF0ZT1RYAogICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfcnVuc1dpdGhTbGlkZXJzXV0iIGFzPSJydW4iPgogICAgICA8ZGl2IGNsYXNzPSJydW4td2lkZ2V0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJydW4tZGlzcGxheS1jb250YWluZXIiPgogICAgICAgICAgPGRpdgogICAgICAgICAgICBjbGFzcz0icnVuLWNvbG9yLWJveCIKICAgICAgICAgICAgc3R5bGU9ImJhY2tncm91bmQ6W1tfY29tcHV0ZUNvbG9yRm9yUnVuKHJ1bildXTsiCiAgICAgICAgICA+PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJydW4tdGV4dCI+W1tydW5dXTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InN0ZXAtZGlzcGxheS1jb250YWluZXIiPgogICAgICAgICAgW1tfY29tcHV0ZVRpbWVUZXh0Rm9yUnVuKHJ1blRvQXZhaWxhYmxlVGltZUVudHJpZXMsIF9ydW5Ub1N0ZXBJbmRleCwKICAgICAgICAgIHJ1biwgdGltZURpc3BsYXlUeXBlKV1dCiAgICAgICAgPC9kaXY+CiAgICAgICAgPHBhcGVyLXNsaWRlcgogICAgICAgICAgZGF0YS1ydW4kPSJbW3J1bl1dIgogICAgICAgICAgc3RlcD0iMSIKICAgICAgICAgIHR5cGU9Im51bWJlciIKICAgICAgICAgIG1pbj0iMCIKICAgICAgICAgIG1heD0iW1tfY29tcHV0ZU1heFN0ZXBJbmRleEZvclJ1bihydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzLCBydW4pXV0iCiAgICAgICAgICB2YWx1ZT0iW1tfZ2V0U3RlcChfcnVuVG9TdGVwSW5kZXgsIHJ1bildXSIKICAgICAgICAgIG9uLWltbWVkaWF0ZS12YWx1ZS1jaGFuZ2VkPSJfc2xpZGVyVmFsdWVDaGFuZ2VkIgogICAgICAgID48L3BhcGVyLXNsaWRlcj4KICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICAucnVuLXdpZGdldCB7CiAgICAgICAgbWFyZ2luOiAxMHB4IDAgMCAwOwogICAgICB9CiAgICAgIHBhcGVyLXNsaWRlciB7CiAgICAgICAgbWFyZ2luOiAtOHB4IDAgMCAtMTVweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgICAuc3RlcC1kaXNwbGF5LWNvbnRhaW5lciB7CiAgICAgICAgZm9udC1zaXplOiAwLjllbTsKICAgICAgICBtYXJnaW46IDAgMTVweCAwIDA7CiAgICAgIH0KICAgICAgLnJ1bi10ZXh0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KICAgICAgLnJ1bi1jb2xvci1ib3ggewogICAgICAgIHdpZHRoOiAxMnB4OwogICAgICAgIGhlaWdodDogMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLHJwLnByb3RvdHlwZSwicnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxycC5wcm90b3R5cGUsInJ1blRvQXZhaWxhYmxlVGltZUVudHJpZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLGNvbXB1dGVkOiJfY29tcHV0ZVJ1blRvU3RlcChydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzLCBfcnVuVG9TdGVwSW5kZXgpIn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxycC5wcm90b3R5cGUsInJ1blRvU3RlcCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxycC5wcm90b3R5cGUsInRpbWVEaXNwbGF5VHlwZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxycC5wcm90b3R5cGUsIl9ydW5Ub1N0ZXBJbmRleCIsdm9pZCAwKTtFKFtCdCgicnVuVG9BdmFpbGFibGVUaW1lRW50cmllcyIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0scnAucHJvdG90eXBlLCJfdXBkYXRlU3RlcHNGb3JOZXdSdW5zIixudWxsKTtFKFtSdCgicnVucyIsInJ1blRvQXZhaWxhYmxlVGltZUVudHJpZXMiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLHJwLnByb3RvdHlwZSwiX3J1bnNXaXRoU2xpZGVycyIsbnVsbCk7cnA9RShbeXQoInRmLXByLWN1cnZlLXN0ZXBzLXNlbGVjdG9yIildLHJwKTt2YXIga289Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucmVsb2FkT25SZWFkeT0hMCx0aGlzLl90aW1lRGlzcGxheVR5cGU9InN0ZXAiLHRoaXMuX3NlbGVjdGVkUnVucz1bXSx0aGlzLl9ydW5Ub1RhZ0luZm89e30sdGhpcy5fdGFnVG9SdW5Ub0RhdGE9e30sdGhpcy5fZ2V0Q2F0ZWdvcnlJdGVtS2V5PXQ9PnQudGFnLHRoaXMuX3JlcXVlc3RNYW5hZ2VyPW5ldyBBZSx0aGlzLl9zdGVwPTB9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMucmVsb2FkT25SZWFkeSYmdGhpcy5yZWxvYWQoKX1yZWxvYWQoKXtQcm9taXNlLmFsbChbdGhpcy5fZmV0Y2hUYWdzKCldKS50aGVuKCgpPT57dGhpcy5fcmVsb2FkQ2FyZHMoKX0pfV9zaG91bGRPcGVuKHQpe3JldHVybiB0PD0yfV9mZXRjaFRhZ3MoKXtsZXQgdD1fZSgpLnBsdWdpblJvdXRlKCJwcl9jdXJ2ZXMiLCIvdGFncyIpO3JldHVybiB0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHQpLnRoZW4ocj0+e2lmKGNtLmlzRXF1YWwocix0aGlzLl9ydW5Ub1RhZ0luZm8pKXJldHVybjtsZXQgbj1jbS5tYXBWYWx1ZXMocixvPT5jbS5rZXlzKG8pKSxpPSRpKG4pO3RoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIixpLmxlbmd0aD09PTApLHRoaXMuc2V0KCJfcnVuVG9UYWdJbmZvIixyKSx0aGlzLmFzeW5jKCgpPT57dGhpcy5zZXQoIl9jYXRlZ29yaWVzRG9tUmVhZHkiLCEwKX0pfSl9X3JlbG9hZENhcmRzKCl7dmFyIHQ7Y20uZm9yRWFjaCgodD10aGlzLnJvb3QpPT1udWxsP3ZvaWQgMDp0LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLXByLWN1cnZlLWNhcmQiKSxyPT57ci5yZWxvYWQoKX0pfWdldCBfY2F0ZWdvcmllcygpe3ZhciB0PXRoaXMuX3J1blRvVGFnSW5mbyxyPXRoaXMuX3NlbGVjdGVkUnVucyxuPXRoaXMuX3RhZ0ZpbHRlcjtsZXQgaT1jbS5tYXBWYWx1ZXModCxvPT5PYmplY3Qua2V5cyhvKSk7cmV0dXJuIGhFKGkscixuKX1nZXQgX3JlbGV2YW50U2VsZWN0ZWRSdW5zKCl7dmFyIHQ9dGhpcy5fc2VsZWN0ZWRSdW5zLHI9dGhpcy5fcnVuVG9UYWdJbmZvO3JldHVybiB0LmZpbHRlcihuPT5yW25dKX1fdGFnTWV0YWRhdGEodCxyLG4pe2xldCBpPXt9O3IuZm9yRWFjaChhPT57aVthXT10W2FdW25dfSk7bGV0IG89bi5yZXBsYWNlKC9cL3ByX2N1cnZlcyQvLCIiKTtyZXR1cm4gb1IoaSxvKX1fY3JlYXRlRGF0YUNoYW5nZUNhbGxiYWNrKHQpe3JldHVybiByPT57dGhpcy5zZXQoIl90YWdUb1J1blRvRGF0YSIseWgoaWEoe30sdGhpcy5fdGFnVG9SdW5Ub0RhdGEpLHtbdF06cn0pKX19Z2V0IF9ydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzKCl7dmFyIHQ9dGhpcy5fdGFnVG9SdW5Ub0RhdGE7bGV0IHI9e307Zm9yKGxldFtpLG9db2YgT2JqZWN0LmVudHJpZXModCkpZm9yKGxldFthXW9mIE9iamVjdC5lbnRyaWVzKG8pKShyW2FdPT1udWxsfHxpPHJbYV0pJiYoclthXT1pKTtsZXQgbj17fTtmb3IobGV0W2ksb11vZiBPYmplY3QuZW50cmllcyhyKSl7bGV0IGE9dFtvXVtpXTtuW2ldPWEubWFwKHM9Pih7c3RlcDpzLnN0ZXAsd2FsbF90aW1lOnMud2FsbF90aW1lLHJlbGF0aXZlOnMud2FsbF90aW1lLWFbMF0ud2FsbF90aW1lfSkpfXJldHVybiBufX07a28udGVtcGxhdGU9UWAKICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyIiBzbG90PSJzaWRlYmFyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8dGYtb3B0aW9uLXNlbGVjdG9yCiAgICAgICAgICAgICAgaWQ9InRpbWUtdHlwZS1zZWxlY3RvciIKICAgICAgICAgICAgICBuYW1lPSJUaW1lIERpc3BsYXkgVHlwZSIKICAgICAgICAgICAgICBzZWxlY3RlZC1pZD0ie3tfdGltZURpc3BsYXlUeXBlfX0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJzdGVwIj5zdGVwPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgICAgPCEtLQogICAgICAgICAgICAtLT4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJyZWxhdGl2ZSI+cmVsYXRpdmU8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8IS0tCiAgICAgICAgICAgIC0tPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9IndhbGxfdGltZSI+d2FsbDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICA8L3RmLW9wdGlvbi1zZWxlY3Rvcj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19ydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzXV0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iIGlkPSJzdGVwcy1zZWxlY3Rvci1jb250YWluZXIiPgogICAgICAgICAgICAgIDx0Zi1wci1jdXJ2ZS1zdGVwcy1zZWxlY3RvcgogICAgICAgICAgICAgICAgcnVucz0iW1tfcmVsZXZhbnRTZWxlY3RlZFJ1bnNdXSIKICAgICAgICAgICAgICAgIHJ1bi10by1zdGVwPSJ7e19ydW5Ub1N0ZXB9fSIKICAgICAgICAgICAgICAgIHJ1bi10by1hdmFpbGFibGUtdGltZS1lbnRyaWVzPSJbW19ydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzXV0iCiAgICAgICAgICAgICAgICB0aW1lLWRpc3BsYXktdHlwZT0iW1tfdGltZURpc3BsYXlUeXBlXV0iCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvdGYtcHItY3VydmUtc3RlcHMtc2VsZWN0b3I+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24gcnVucy1zZWxlY3RvciI+CiAgICAgICAgICA8dGYtcnVucy1zZWxlY3RvciBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSI+CiAgICAgICAgICA8L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjZW50ZXIiIHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gcHJlY2lzaW9u4oCTcmVjYWxsIGN1cnZlIGRhdGEgd2FzIGZvdW5kLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczo8L3A+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICBZb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IHByZWNpc2lvbuKAk3JlY2FsbCBkYXRhIHRvIHlvdXIgZXZlbnQKICAgICAgICAgICAgICAgIGZpbGVzLgogICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgPGxpPlRlbnNvckJvYXJkIGNhbuKAmXQgZmluZCB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIgogICAgICAgICAgICAgICAgPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRmLXRhZy1maWx0ZXJlciB0YWctZmlsdGVyPSJ7e190YWdGaWx0ZXJ9fSI+PC90Zi10YWctZmlsdGVyZXI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldwogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iCiAgICAgICAgICAgICAgZ2V0LWNhdGVnb3J5LWl0ZW0ta2V5PSJbW19nZXRDYXRlZ29yeUl0ZW1LZXldXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1wci1jdXJ2ZS1jYXJkCiAgICAgICAgICAgICAgICAgIGFjdGl2ZT0iW1thY3RpdmVdXSIKICAgICAgICAgICAgICAgICAgcnVucz0iW1tpdGVtLnJ1bnNdXSIKICAgICAgICAgICAgICAgICAgdGFnPSJbW2l0ZW0udGFnXV0iCiAgICAgICAgICAgICAgICAgIHRhZy1tZXRhZGF0YT0iW1tfdGFnTWV0YWRhdGEoX3J1blRvVGFnSW5mbywgaXRlbS5ydW5zLCBpdGVtLnRhZyldXSIKICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgICBydW4tdG8tc3RlcC1jYXA9IltbX3J1blRvU3RlcF1dIgogICAgICAgICAgICAgICAgICBvbi1kYXRhLWNoYW5nZT0iW1tfY3JlYXRlRGF0YUNoYW5nZUNhbGxiYWNrKGl0ZW0udGFnKV1dIgogICAgICAgICAgICAgICAgPjwvdGYtcHItY3VydmUtY2FyZD4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KCiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQoKICAgICAgLyoqIERvIG5vdCBsZXQgdGhlIHN0ZXBzIHNlbGVjdG9yIG9jY2x1ZGUgdGhlIHJ1biBzZWxlY3Rvci4gKi8KICAgICAgI3N0ZXBzLXNlbGVjdG9yLWNvbnRhaW5lciB7CiAgICAgICAgbWF4LWhlaWdodDogNjAlOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGtvLnByb3RvdHlwZSwicmVsb2FkT25SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxrby5wcm90b3R5cGUsIl90aW1lRGlzcGxheVR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLGtvLnByb3RvdHlwZSwiX3NlbGVjdGVkUnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxrby5wcm90b3R5cGUsIl9ydW5Ub1RhZ0luZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sa28ucHJvdG90eXBlLCJfdGFnVG9SdW5Ub0RhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGtvLnByb3RvdHlwZSwiX3J1blRvU3RlcCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGtvLnByb3RvdHlwZSwiX2RhdGFOb3RGb3VuZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxrby5wcm90b3R5cGUsIl90YWdGaWx0ZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxrby5wcm90b3R5cGUsIl9jYXRlZ29yaWVzRG9tUmVhZHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sa28ucHJvdG90eXBlLCJfZ2V0Q2F0ZWdvcnlJdGVtS2V5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEFlKV0sa28ucHJvdG90eXBlLCJfcmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLGtvLnByb3RvdHlwZSwiX3N0ZXAiLHZvaWQgMCk7RShbUnQoIl9ydW5Ub1RhZ0luZm8iLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIsIl9jYXRlZ29yaWVzRG9tUmVhZHkiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGtvLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpO0UoW1J0KCJfc2VsZWN0ZWRSdW5zIiwiX3J1blRvVGFnSW5mbyIpLHcoImRlc2lnbjp0eXBlIixBcnJheSksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sa28ucHJvdG90eXBlLCJfcmVsZXZhbnRTZWxlY3RlZFJ1bnMiLG51bGwpO0UoW1J0KCJfdGFnVG9SdW5Ub0RhdGEiKSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxrby5wcm90b3R5cGUsIl9ydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzIixudWxsKTtrbz1FKFt5dCgidGYtcHItY3VydmUtZGFzaGJvYXJkIildLGtvKTt2YXIgQjY9RWUoT2UoKSwxKTt2YXIgdW89Y2xhc3MgZXh0ZW5kcyBHdChuYil7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucmVsb2FkT25SZWFkeT0hMCx0aGlzLl9zaG93RG93bmxvYWRMaW5rcz14cCgiX3Nob3dEb3dubG9hZExpbmtzIix7ZGVmYXVsdFZhbHVlOiExLHVzZUxvY2FsU3RvcmFnZTohMH0pLmNhbGwodGhpcyksdGhpcy5fc21vb3RoaW5nV2VpZ2h0PV9FKCJfc21vb3RoaW5nV2VpZ2h0Iix7ZGVmYXVsdFZhbHVlOi42fSkuY2FsbCh0aGlzKSx0aGlzLl9pZ25vcmVZT3V0bGllcnM9eHAoIl9pZ25vcmVZT3V0bGllcnMiLHtkZWZhdWx0VmFsdWU6ITAsdXNlTG9jYWxTdG9yYWdlOiEwfSkuY2FsbCh0aGlzKSx0aGlzLl94VHlwZT1UZC5TVEVQLHRoaXMuX3NlbGVjdGVkUnVucz1bXSx0aGlzLl90YWdGaWx0ZXI9IiIsdGhpcy5fY2F0ZWdvcmllcz1bXSx0aGlzLl9nZXRDYXRlZ29yeUl0ZW1LZXk9dD0+dC50YWcsdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlKDUwKSx0aGlzLl9zaG93RG93bmxvYWRMaW5rc09ic2VydmVyPWJwKCJfc2hvd0Rvd25sb2FkTGlua3MiLHtkZWZhdWx0VmFsdWU6ITEsdXNlTG9jYWxTdG9yYWdlOiEwfSksdGhpcy5fc21vb3RoaW5nV2VpZ2h0T2JzZXJ2ZXI9eUUoIl9zbW9vdGhpbmdXZWlnaHQiLHtkZWZhdWx0VmFsdWU6LjZ9KSx0aGlzLl9pZ25vcmVZT3V0bGllcnNPYnNlcnZlcj1icCgiX2lnbm9yZVlPdXRsaWVycyIse2RlZmF1bHRWYWx1ZTohMCx1c2VMb2NhbFN0b3JhZ2U6ITB9KX1nZXQgX3Ntb290aGluZ0VuYWJsZWQoKXt2YXIgdD10aGlzLl9zbW9vdGhpbmdXZWlnaHQ7cmV0dXJuIHQ+MH1fZ2V0Q2F0ZWdvcnlLZXkodCl7cmV0dXJuIHQubWV0YWRhdGEudHlwZT09RGEuU0VBUkNIX1JFU1VMVFM/IiI6dC5uYW1lfV9zaG91bGRPcGVuKHQpe3JldHVybiB0PD0yfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKT0+e3RoaXMuX3JlbG9hZENoYXJ0cygpfSl9X2ZldGNoVGFncygpe2xldCB0PV9lKCkucGx1Z2luUm91dGUoInNjYWxhcnMiLCIvdGFncyIpO3JldHVybiB0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHQpLnRoZW4ocj0+e2lmKEI2LmlzRXF1YWwocix0aGlzLl9ydW5Ub1RhZ0luZm8pKXJldHVybjtsZXQgbj1CNi5tYXBWYWx1ZXMocixvPT5PYmplY3Qua2V5cyhvKSksaT0kaShuKTt0aGlzLnNldCgiX2RhdGFOb3RGb3VuZCIsaS5sZW5ndGg9PT0wKSx0aGlzLnNldCgiX3J1blRvVGFnSW5mbyIsciksdGhpcy5hc3luYygoKT0+e3RoaXMuc2V0KCJfY2F0ZWdvcmllc0RvbVJlYWR5IiwhMCl9KX0pfV9yZWxvYWRDaGFydHMoKXt2YXIgdDsodD10aGlzLnJvb3QpPT1udWxsfHx0LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLXNjYWxhci1jYXJkIikuZm9yRWFjaChyPT57ci5yZWxvYWQoKX0pfV91cGRhdGVDYXRlZ29yaWVzKCl7dmFyIHQ9dGhpcy5fcnVuVG9UYWdJbmZvLHI9dGhpcy5fc2VsZWN0ZWRSdW5zLG49dGhpcy5fdGFnRmlsdGVyO2xldCBpLG89bixhPUI2Lm1hcFZhbHVlcyh0LHM9Pk9iamVjdC5rZXlzKHMpKTtpPWhFKGEscixvKSxpLmZvckVhY2gocz0+e3MuaXRlbXM9cy5pdGVtcy5tYXAobD0+KHt0YWc6bC50YWcsc2VyaWVzOmwucnVucy5tYXAoYz0+KHtydW46Yyx0YWc6bC50YWd9KSl9KSl9KSx0aGlzLnVwZGF0ZUFycmF5UHJvcCgiX2NhdGVnb3JpZXMiLGksdGhpcy5fZ2V0Q2F0ZWdvcnlLZXkpfV90YWdNZXRhZGF0YSh0LHIsbil7bGV0IGk9dC5uYW1lLG89bi50YWcsYT17fTtuLnNlcmllcy5mb3JFYWNoKCh7cnVuOnV9KT0+e2FbdV09clt1XVtvXX0pO2xldCBzPW8ucmVwbGFjZSgvXC9zY2FsYXJfc3VtbWFyeSQvLCIiKSx7ZGVzY3JpcHRpb246bCxkaXNwbGF5TmFtZTpjfT1vUihhLHMpO3JldHVybiB0Lm1ldGFkYXRhLnR5cGU9PURhLlBSRUZJWF9HUk9VUCYmYy5zdGFydHNXaXRoKGkrIi8iKSYmKGM9Yy5zbGljZShpLmxlbmd0aCsxKSkse2Rlc2NyaXB0aW9uOmwsZGlzcGxheU5hbWU6Y319fTt1by50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmUtaXRlbSI+CiAgICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94CiAgICAgICAgICAgICAgICBpZD0ic2hvdy1kb3dubG9hZC1saW5rcyIKICAgICAgICAgICAgICAgIGNoZWNrZWQ9Int7X3Nob3dEb3dubG9hZExpbmtzfX0iCiAgICAgICAgICAgICAgICA+U2hvdyBkYXRhIGRvd25sb2FkIGxpbmtzPC9wYXBlci1jaGVja2JveAogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmUtaXRlbSI+CiAgICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94CiAgICAgICAgICAgICAgICBpZD0iaWdub3JlLXktb3V0bGllciIKICAgICAgICAgICAgICAgIGNoZWNrZWQ9Int7X2lnbm9yZVlPdXRsaWVyc319IgogICAgICAgICAgICAgICAgPklnbm9yZSBvdXRsaWVycyBpbiBjaGFydCBzY2FsaW5nPC9wYXBlci1jaGVja2JveAogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgaWQ9InRvb2x0aXAtc29ydGluZyI+CiAgICAgICAgICAgICAgPGRpdj5Ub29sdGlwIHNvcnRpbmcgbWV0aG9kOjwvZGl2PgogICAgICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51CiAgICAgICAgICAgICAgICBuby1sYWJlbC1mbG9hdAogICAgICAgICAgICAgICAgc2VsZWN0ZWQtaXRlbS1sYWJlbD0ie3tfdG9vbHRpcFNvcnRpbmdNZXRob2R9fSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8cGFwZXItbGlzdGJveAogICAgICAgICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ9IjAiCiAgICAgICAgICAgICAgICAgIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmRlZmF1bHQ8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmRlc2NlbmRpbmc8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmFzY2VuZGluZzwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+bmVhcmVzdDwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8dGYtc21vb3RoaW5nLWlucHV0CiAgICAgICAgICAgICAgd2VpZ2h0PSJ7e19zbW9vdGhpbmdXZWlnaHR9fSIKICAgICAgICAgICAgICBzdGVwPSIwLjAwMSIKICAgICAgICAgICAgICBtaW49IjAiCiAgICAgICAgICAgICAgbWF4PSIwLjk5OSIKICAgICAgICAgICAgPjwvdGYtc21vb3RoaW5nLWlucHV0PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8dGYtb3B0aW9uLXNlbGVjdG9yCiAgICAgICAgICAgICAgaWQ9IngtdHlwZS1zZWxlY3RvciIKICAgICAgICAgICAgICBuYW1lPSJIb3Jpem9udGFsIEF4aXMiCiAgICAgICAgICAgICAgc2VsZWN0ZWQtaWQ9Int7X3hUeXBlfX0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJzdGVwIj5zdGVwPC9wYXBlci1idXR0b24KICAgICAgICAgICAgICA+PCEtLQogICAgICAgICAgICAtLT48cGFwZXItYnV0dG9uIGlkPSJyZWxhdGl2ZSI+cmVsYXRpdmU8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID48IS0tCiAgICAgICAgICAgIC0tPjxwYXBlci1idXR0b24gaWQ9IndhbGxfdGltZSI+d2FsbDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICA8L3RmLW9wdGlvbi1zZWxlY3Rvcj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiBydW5zLXNlbGVjdG9yIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319Ij4KICAgICAgICAgIDwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBzY2FsYXIgZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT5Zb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IHNjYWxhciBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIgogICAgICAgICAgICAgICAgPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRmLXRhZy1maWx0ZXJlciB0YWctZmlsdGVyPSJ7e190YWdGaWx0ZXJ9fSI+PC90Zi10YWctZmlsdGVyZXI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldwogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iCiAgICAgICAgICAgICAgZ2V0LWNhdGVnb3J5LWl0ZW0ta2V5PSJbW19nZXRDYXRlZ29yeUl0ZW1LZXldXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1zY2FsYXItY2FyZAogICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgIGRhdGEtdG8tbG9hZD0iW1tpdGVtLnNlcmllc11dIgogICAgICAgICAgICAgICAgICBpZ25vcmUteS1vdXRsaWVycz0iW1tfaWdub3JlWU91dGxpZXJzXV0iCiAgICAgICAgICAgICAgICAgIG11bHRpLWV4cGVyaW1lbnRzPSJbW19nZXRNdWx0aUV4cGVyaW1lbnRzKGRhdGFTZWxlY3Rpb24pXV0iCiAgICAgICAgICAgICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICAgICAgICAgICAgc2hvdy1kb3dubG9hZC1saW5rcz0iW1tfc2hvd0Rvd25sb2FkTGlua3NdXSIKICAgICAgICAgICAgICAgICAgc21vb3RoaW5nLWVuYWJsZWQ9IltbX3Ntb290aGluZ0VuYWJsZWRdXSIKICAgICAgICAgICAgICAgICAgc21vb3RoaW5nLXdlaWdodD0iW1tfc21vb3RoaW5nV2VpZ2h0XV0iCiAgICAgICAgICAgICAgICAgIHRhZy1tZXRhZGF0YT0iW1tfdGFnTWV0YWRhdGEoY2F0ZWdvcnksIF9ydW5Ub1RhZ0luZm8sIGl0ZW0pXV0iCiAgICAgICAgICAgICAgICAgIHRhZz0iW1tpdGVtLnRhZ11dIgogICAgICAgICAgICAgICAgICB0b29sdGlwLXNvcnRpbmctbWV0aG9kPSJbW190b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgICAgICAgICAgICB4LXR5cGU9IltbX3hUeXBlXV0iCiAgICAgICAgICAgICAgICAgIGJhdGNoLXNpemU9IltbZmVhdHVyZUZsYWdzLnNjYWxhcnNCYXRjaFNpemVdXSIKICAgICAgICAgICAgICAgICAgaW4tY29sYWI9IltbZmVhdHVyZUZsYWdzLmluQ29sYWJdXSIKICAgICAgICAgICAgICAgID48L3RmLXNjYWxhci1jYXJkPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXc+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgICN0b29sdGlwLXNvcnRpbmcgewogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbWFyZ2luLXRvcDogMTVweDsKICAgICAgfQoKICAgICAgI3Rvb2x0aXAtc29ydGluZyBwYXBlci1kcm9wZG93bi1tZW51IHsKICAgICAgICBtYXJnaW4tbGVmdDogMTBweDsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgd2lkdGg6IDEwNXB4OwogICAgICB9CgogICAgICAubGluZS1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nLXRvcDogNXB4OwogICAgICB9CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICAgIC5jZW50ZXIgewogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdW8ucHJvdG90eXBlLCJyZWxvYWRPblJlYWR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHVvLnByb3RvdHlwZSwiZmVhdHVyZUZsYWdzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITAsb2JzZXJ2ZXI6Il9zaG93RG93bmxvYWRMaW5rc09ic2VydmVyIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdW8ucHJvdG90eXBlLCJfc2hvd0Rvd25sb2FkTGlua3MiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsbm90aWZ5OiEwLG9ic2VydmVyOiJfc21vb3RoaW5nV2VpZ2h0T2JzZXJ2ZXIifSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLHVvLnByb3RvdHlwZSwiX3Ntb290aGluZ1dlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9pZ25vcmVZT3V0bGllcnNPYnNlcnZlciJ9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHVvLnByb3RvdHlwZSwiX2lnbm9yZVlPdXRsaWVycyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx1by5wcm90b3R5cGUsIl94VHlwZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sdW8ucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHVvLnByb3RvdHlwZSwiX3J1blRvVGFnSW5mbyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHVvLnByb3RvdHlwZSwiX2RhdGFOb3RGb3VuZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx1by5wcm90b3R5cGUsIl90YWdGaWx0ZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSx1by5wcm90b3R5cGUsIl9jYXRlZ29yaWVzRG9tUmVhZHkiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLHVvLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdW8ucHJvdG90eXBlLCJfZ2V0Q2F0ZWdvcnlJdGVtS2V5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEFlKV0sdW8ucHJvdG90eXBlLCJfcmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbUnQoIl9zbW9vdGhpbmdXZWlnaHQiKSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sdW8ucHJvdG90eXBlLCJfc21vb3RoaW5nRW5hYmxlZCIsbnVsbCk7RShbQnQoIl9ydW5Ub1RhZ0luZm8iLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIsIl9jYXRlZ29yaWVzRG9tUmVhZHkiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLHVvLnByb3RvdHlwZSwiX3VwZGF0ZUNhdGVnb3JpZXMiLG51bGwpO3VvPUUoW3l0KCJ0Zi1zY2FsYXItZGFzaGJvYXJkIildLHVvKTt2YXIgY3BlPUVlKE9lKCksMSk7dmFyIGRoPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl90ZXh0cz1bXSx0aGlzLl9jYW5jZWxsZXI9bmV3IGFufWdldCBfcnVuQ29sb3IoKXt2YXIgdD10aGlzLnJ1bjtyZXR1cm4gZm4odCl9X2NoYW5nZVJ1bkNvbG9yKCl7dmFyIHQ9dGhpcy5fcnVuQ29sb3I7dGhpcy51cGRhdGVTdHlsZXMoeyItLXRiLXRleHQtbG9hZGVyLW91dGxpbmUiOnR9KX1hdHRhY2hlZCgpe3RoaXMucmVsb2FkKCl9cmVsb2FkKCl7aWYoIXRoaXMuaXNBdHRhY2hlZClyZXR1cm47dGhpcy5fY2FuY2VsbGVyLmNhbmNlbEFsbCgpO2xldCB0PV9lKCkscj1NaSh0LnBsdWdpblJvdXRlKCJ0ZXh0IiwiL3RleHQiKSx7dGFnOnRoaXMudGFnLHJ1bjp0aGlzLnJ1bixtYXJrZG93bjp0aGlzLm1hcmtkb3duRW5hYmxlZD8idHJ1ZSI6ImZhbHNlIn0pLG49dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKGk9PntpZihpLmNhbmNlbGxlZClyZXR1cm47bGV0IG89aS52YWx1ZS5tYXAoYT0+KHt3YWxsX3RpbWU6bmV3IERhdGUoYS53YWxsX3RpbWUqMWUzKSxzdGVwOmEuc3RlcCx0ZXh0OmEudGV4dH0pKTt0aGlzLnNldCgiX3RleHRzIixvLnNsaWNlKCkucmV2ZXJzZSgpKX0pO3RoaXMucmVxdWVzdE1hbmFnZXIucmVxdWVzdChyKS50aGVuKG4pfV9mb3JtYXRTdGVwKHQpe3JldHVybiB4bigiLCIpKHQpfX07ZGgudGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcgcnVuPSJbW3J1bl1dIiB0YWc9IltbdGFnXV0iIGNvbG9yPSJbW19ydW5Db2xvcl1dIj4KICAgIDwvdGYtY2FyZC1oZWFkaW5nPgogICAgPHBhcGVyLW1hdGVyaWFsCiAgICAgIGVsZXZhdGlvbj0iMSIKICAgICAgaWQ9InN0ZXBzLWNvbnRhaW5lciIKICAgICAgY2xhc3M9ImNvbnRhaW5lciBzY3JvbGxiYXIiCiAgICA+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX3RleHRzXV0iPgogICAgICAgIDxwYXBlci1tYXRlcmlhbCBlbGV2YXRpb249IjEiIGNsYXNzPSJzdGVwLWNvbnRhaW5lciI+CiAgICAgICAgICBzdGVwIDxzcGFuIGNsYXNzPSJzdGVwLXZhbHVlIj5bW19mb3JtYXRTdGVwKGl0ZW0uc3RlcCldXTwvc3Bhbj4KICAgICAgICA8L3BhcGVyLW1hdGVyaWFsPgogICAgICAgIDxwYXBlci1tYXRlcmlhbCBlbGV2YXRpb249IjEiIGNsYXNzPSJ0ZXh0Ij4KICAgICAgICAgIDx0Zi1tYXJrZG93bi12aWV3IGh0bWw9IltbaXRlbS50ZXh0XV0iPjwvdGYtbWFya2Rvd24tdmlldz4KICAgICAgICA8L3BhcGVyLW1hdGVyaWFsPgogICAgICA8L3RlbXBsYXRlPgogICAgPC9wYXBlci1tYXRlcmlhbD4KICAgIDxzdHlsZSBpbmNsdWRlPSJzY3JvbGxiYXItc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4OwogICAgICB9CiAgICAgIC5zY3JvbGxiYXIgewogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgIH0KICAgICAgI3N0ZXBzLWNvbnRhaW5lciB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIGJvcmRlcjogMnB4IHNvbGlkIC8qIGNvbG9yIGNvbXB1dGVkIGFuZCBzZXQgYXMgaW5saW5lIHN0eWxlICovOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG1heC1oZWlnaHQ6IDUwMHB4OwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS10Yi10ZXh0LWxvYWRlci1vdXRsaW5lKTsKICAgICAgfQogICAgICAudGV4dCB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDsKICAgICAgICBib3JkZXItcmFkaXVzOiAwIDNweCAzcHggM3B4OwogICAgICAgIHBhZGRpbmc6IDVweDsKICAgICAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkOwogICAgICB9CiAgICAgIC5zdGVwLWNvbnRhaW5lciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgICBib3JkZXItYm90dG9tOiBub25lOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweCAzcHggMCAwOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXRiLXVpLWJvcmRlcik7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgICAgbWFyZ2luLWxlZnQ6IC0xcHg7IC8qIHRvIGNvcnJlY3QgZm9yIGJvcmRlciAqLwogICAgICAgIHBhZGRpbmc6IDNweDsKICAgICAgfQogICAgICAuc3RlcC1jb250YWluZXI6bm90KDpmaXJzdC1jaGlsZCkgewogICAgICAgIG1hcmdpbi10b3A6IDE1cHg7CiAgICAgIH0KCiAgICAgIHRmLWNhcmQtaGVhZGluZyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGRoLnByb3RvdHlwZSwicnVuIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGRoLnByb3RvdHlwZSwidGFnIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sZGgucHJvdG90eXBlLCJtYXJrZG93bkVuYWJsZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLGRoLnByb3RvdHlwZSwiX3RleHRzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEFlKV0sZGgucHJvdG90eXBlLCJyZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixhbildLGRoLnByb3RvdHlwZSwiX2NhbmNlbGxlciIsdm9pZCAwKTtFKFtSdCgicnVuIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sZGgucHJvdG90eXBlLCJfcnVuQ29sb3IiLG51bGwpO0UoW0J0KCJfcnVuQ29sb3IiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGRoLnByb3RvdHlwZSwiX2NoYW5nZVJ1bkNvbG9yIixudWxsKTtkaD1FKFt5dCgidGYtdGV4dC1sb2FkZXIiKV0sZGgpO3ZhciBRYz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX21hcmtkb3duRW5hYmxlZD14cCgiX21hcmtkb3duRW5hYmxlZCIse2RlZmF1bHRWYWx1ZTohMCx1c2VMb2NhbFN0b3JhZ2U6ITB9KS5jYWxsKHRoaXMpLHRoaXMuX3JlcXVlc3RNYW5hZ2VyPW5ldyBBZSx0aGlzLl9tYXJrZG93bkVuYWJsZWRTdG9yYWdlT2JzZXJ2ZXI9YnAoIl9tYXJrZG93bkVuYWJsZWQiLHtkZWZhdWx0VmFsdWU6ITAsdXNlTG9jYWxTdG9yYWdlOiEwfSl9c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9tYXJrZG93bkVuYWJsZWRPYnNlcnZlcihfbWFya2Rvd25FbmFibGVkKSJdfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKT0+e3RoaXMuX3JlbG9hZFRleHRzKCl9KX1fc2hvdWxkT3Blbih0KXtyZXR1cm4gdDw9Mn1fZmV0Y2hUYWdzKCl7bGV0IHQ9X2UoKS5wbHVnaW5Sb3V0ZSgidGV4dCIsIi90YWdzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyPT57aWYoY3BlLmlzRXF1YWwocix0aGlzLl9ydW5Ub1RhZykpcmV0dXJuO2xldCBuPSRpKHIpO3RoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIixuLmxlbmd0aD09PTApLHRoaXMuc2V0KCJfcnVuVG9UYWciLHIpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSl9KX1fcmVsb2FkVGV4dHMoKXt2YXIgdDsodD10aGlzLnJvb3QpPT1udWxsfHx0LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLXRleHQtbG9hZGVyIikuZm9yRWFjaChyPT57ci5yZWxvYWQoKX0pfWdldCBfY2F0ZWdvcmllcygpe3ZhciB0PXRoaXMuX3J1blRvVGFnLHI9dGhpcy5fc2VsZWN0ZWRSdW5zLG49dGhpcy5fdGFnRmlsdGVyO3JldHVybiBRbCh0LHIsbil9X21hcmtkb3duRW5hYmxlZE9ic2VydmVyKCl7dGhpcy5fcmVsb2FkVGV4dHMoKX19O1FjLnRlbXBsYXRlPVFgCiAgICA8dGYtZGFzaGJvYXJkLWxheW91dD4KICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhciIgc2xvdD0ic2lkZWJhciI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmUtaXRlbSI+CiAgICAgICAgICAgIDxwYXBlci1jaGVja2JveCBjaGVja2VkPSJ7e19tYXJrZG93bkVuYWJsZWR9fSIKICAgICAgICAgICAgICA+RW5hYmxlIE1hcmtkb3duPC9wYXBlci1jaGVja2JveAogICAgICAgICAgICA+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24gcnVucy1zZWxlY3RvciI+CiAgICAgICAgICA8dGYtcnVucy1zZWxlY3RvciBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSI+CiAgICAgICAgICA8L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjZW50ZXIiIHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gdGV4dCBkYXRhIHdhcyBmb3VuZC48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6PC9wPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgdGV4dCBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIgogICAgICAgICAgICAgICAgPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRmLXRhZy1maWx0ZXJlciB0YWctZmlsdGVyPSJ7e190YWdGaWx0ZXJ9fSI+PC90Zi10YWctZmlsdGVyZXI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldwogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtdGV4dC1sb2FkZXIKICAgICAgICAgICAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgICAgICAgICAgICB0YWc9IltbaXRlbS50YWddXSIKICAgICAgICAgICAgICAgICAgcnVuPSJbW2l0ZW0ucnVuXV0iCiAgICAgICAgICAgICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICAgICAgICAgICAgbWFya2Rvd24tZW5hYmxlZD0iW1tfbWFya2Rvd25FbmFibGVkXV0iCiAgICAgICAgICAgICAgICA+PC90Zi10ZXh0LWxvYWRlcj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxRYy5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG5vdGlmeTohMCxvYnNlcnZlcjoiX21hcmtkb3duRW5hYmxlZFN0b3JhZ2VPYnNlcnZlciJ9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFFjLnByb3RvdHlwZSwiX21hcmtkb3duRW5hYmxlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sUWMucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFFjLnByb3RvdHlwZSwiX3J1blRvVGFnIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sUWMucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFFjLnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFFjLnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxRYy5wcm90b3R5cGUsIl9yZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtSdCgiX3J1blRvVGFnIiwiX3NlbGVjdGVkUnVucyIsIl90YWdGaWx0ZXIiLCJfY2F0ZWdvcmllc0RvbVJlYWR5IiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxRYy5wcm90b3R5cGUsIl9jYXRlZ29yaWVzIixudWxsKTtRYz1FKFt5dCgidGYtdGV4dC1kYXNoYm9hcmQiKV0sUWMpO3ZhciBWaHQ9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7fTtWaHQudGVtcGxhdGU9UWAKICAgIDxkaXYgY2xhc3M9Im1lc3NhZ2UiPgogICAgICA8aDM+VGhlIFdoYXQtSWYgVG9vbCBpcyBubyBsb25nZXIgc3VwcG9ydGVkLjwvaDM+CiAgICAgIDxwPgogICAgICAgIFRoZQogICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vcGFpci1jb2RlLmdpdGh1Yi5pby9saXQvIgogICAgICAgICAgPkxlYXJuaW5nIEludGVycHJldGFiaWxpdHkgVG9vbCAoTElUKTwvYQogICAgICAgID4KICAgICAgICBpcyBhbiBhY3RpdmVseSBtYWludGFpbmVkIGFsdGVybmF0aXZlLiBQbGVhc2UgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMKICAgICAgICA8YSBocmVmPSJodHRwczovL3BhaXItY29kZS5naXRodWIuaW8vbGl0L3NldHVwLyI+aGVyZTwvYT4gdG8gaW5zdGFsbCBhbmQKICAgICAgICB1c2UgdGhpcyB0b29sLgogICAgICA8L3A+CiAgICAgIDxzdHlsZT4KICAgICAgICA6aG9zdCB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIH0KCiAgICAgICAgLm1lc3NhZ2UgewogICAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICAgICAgbWF4LXdpZHRoOiA1NDBweDsKICAgICAgICB9CiAgICAgICAgI2NvbW1hbmRUZXh0YXJlYSB7CiAgICAgICAgICBtYXJnaW4tdG9wOiAxZXg7CiAgICAgICAgICBwYWRkaW5nOiAxZXggMWVtOwogICAgICAgICAgcmVzaXplOiB2ZXJ0aWNhbDsKICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIH0KICAgICAgICAjY29weUNvbnRhaW5lciB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIH0KICAgICAgICAjY29waWVkTWVzc2FnZSB7CiAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxZW07CiAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICAgICB9CiAgICAgIDwvc3R5bGU+CiAgICA8L2Rpdj4KICBgO1ZodD1FKFt5dCgidGYtd2l0LXJlZGlyZWN0LWRhc2hib2FyZCIpXSxWaHQpO3ZhciB1cGU9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdGVtcGxhdGU9bnVsbCx0aGlzLnRmX2JhY2tlbmQ9UkJ9fTt1cGU9RShbeXQoInRmLWJhY2tlbmQiKV0sdXBlKTt2YXIgaHBlPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3RlbXBsYXRlPW51bGwsdGhpcy5ydW5zQ29sb3JTY2FsZT1mbn19O2hwZT1FKFt5dCgidGYtY29sb3Itc2NhbGUiKV0saHBlKTt2YXIgZnBlPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3RlbXBsYXRlPW51bGwsdGhpcy50Zl9mZWF0dXJlX2ZsYWdzPXRXfX07ZnBlPUUoW3l0KCJ0Zi1mZWF0dXJlLWZsYWdzIildLGZwZSk7dmFyIHBwZTsoZnVuY3Rpb24oZSl7ZS5TVEVQPSJzdGVwIixlLldBTExfVElNRT0id2FsbF90aW1lIixlLlJFTEFUSVZFPSJyZWxhdGl2ZSJ9KShwcGV8fChwcGU9e30pKTt2YXIgZHBlOyhmdW5jdGlvbihlKXtlLk9GRlNFVD0ib2Zmc2V0IixlLk9WRVJMQVk9Im92ZXJsYXkifSkoZHBlfHwoZHBlPXt9KSk7d2luZG93LnRlbnNvcmJvYXJkPXloKGlhKHt9LHdpbmRvdy50ZW5zb3Jib2FyZCkse3RmX2dsb2JhbHM6a1d9KTt2YXIgVWh0PXt9O1pzKFVodCx7VGZEb21SZXBlYXQ6KCk9Pk9pLGFkZExpbWl0TGlzdGVuZXI6KCk9PlVXLGdldExpbWl0OigpPT5HVyxyZW1vdmVMaW1pdExpc3RlbmVyOigpPT5xVyxzZXRMaW1pdDooKT0+czJlfSk7dmFyIG1wZT1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl90ZW1wbGF0ZT1udWxsLHRoaXMudGZfcGFnaW5hdGVkX3ZpZXc9VWh0fX07bXBlPUUoW3l0KCJ0Zi1wYWdpbmF0ZWQtdmlldy1zdG9yZSIpXSxtcGUpO3dpbmRvdy50ZW5zb3Jib2FyZD15aChpYSh7fSx3aW5kb3cudGVuc29yYm9hcmQpLHt0Zl9zdG9yYWdlOk9CfSk7fSkoKTsKLyohCiAqIGlzLXBsYWluLW9iamVjdCA8aHR0cHM6Ly9naXRodWIuY29tL2pvbnNjaGxpbmtlcnQvaXMtcGxhaW4tb2JqZWN0PgogKgogKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNywgSm9uIFNjaGxpbmtlcnQuCiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4KICovCi8qIQogKiBpc29iamVjdCA8aHR0cHM6Ly9naXRodWIuY29tL2pvbnNjaGxpbmtlcnQvaXNvYmplY3Q+CiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE3LCBKb24gU2NobGlua2VydC4KICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLgogKi8KLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlCnRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlCkxpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgpUSElTIENPREUgSVMgUFJPVklERUQgT04gQU4gKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCktJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRUQKV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwKTUVSQ0hBTlRBQkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC4KClNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucwphbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi8qKgogKiBAZmlsZW92ZXJ2aWV3CiAqIEBzdXBwcmVzcyB7Y2hlY2tQcm90b3R5cGFsVHlwZXN9CiAqIEBsaWNlbnNlIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZAogKiBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5CiAqIGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkKICogR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUAogKiByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAqLwovKioKICogQGxpY2Vuc2UKICogQ29weXJpZ2h0IChjKSAyMDE2IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kCiAqIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkKICogYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieQogKiBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQCiAqIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICovCi8qKgogKiBAbGljZW5zZQogKiBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdAogKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0CiAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogKi8KLyoqCiAqIEBsaWNlbnNlCiAqIENvcHlyaWdodCAoYykgMjAxOCBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0CiAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQKICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAqLwovKioKICogQGxpY2Vuc2UKICogQ29weXJpZ2h0IChjKSAyMDIxIFZhYWRpbiBMdGQuCiAqIFRoaXMgcHJvZ3JhbSBpcyBhdmFpbGFibGUgdW5kZXIgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGF2YWlsYWJsZSBhdCBodHRwczovL3ZhYWRpbi5jb20vbGljZW5zZS8KICovCi8qKgogKiBAbGljZW5zZQogKiBDb3B5cmlnaHQgMjAxMC0yMDIyIFRocmVlLmpzIEF1dGhvcnMKICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAogKi8KLyoqCiAqIEBsaWNlbnNlCiAqIExvZGFzaCA8aHR0cHM6Ly9sb2Rhc2guY29tLz4KICogQ29weXJpZ2h0IE9wZW5KUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMgPGh0dHBzOi8vb3BlbmpzZi5vcmcvPgogKiBSZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZSA8aHR0cHM6Ly9sb2Rhc2guY29tL2xpY2Vuc2U+CiAqIEJhc2VkIG9uIFVuZGVyc2NvcmUuanMgMS44LjMgPGh0dHA6Ly91bmRlcnNjb3JlanMub3JnL0xJQ0VOU0U+CiAqIENvcHlyaWdodCBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9ycwogKi8KLyoqCiAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAqIEBsaWNlbnNlIE1JVAogKgogKiBAZmlsZW92ZXJ2aWV3IG1hbnVhbGx5IGFkZCBkMy1zZWxlY3Rpb24tbXVsdGkgdG8gZDMgZGVmYXVsdCBidW5kbGUuIE1vc3Qgb2YgdGhpcyBjb2RlIGlzCiAqIGNvcGllZCBmcm9tIGQzLXNlbGVjdGlvbi1tdWx0aUAxLjAuMC4KICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9kMy9kMy1zZWxlY3Rpb24tbXVsdGkvaXNzdWVzLzExIGZvciB3aHkgd2UgaGF2ZSB0byBkbyB0aGlzCiAqLwovKioKICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICogQGxpY2Vuc2UgTUlUCiAqIEBmaWxlb3ZlcnZpZXcgSW1wbGVtZW50cyBhIGNvbnZlbmllbnQgdGh1bmsgZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBjb21tb24gY2FzZQogKiBvZiBjcmVhdGluZyBhIG1lbW9pemVkIGZ1bmN0aW9uIHRoYXQgdGFrZXMgaXRzIGlucHV0cyBmcm9tIG11dGFibGUgY2xhc3MgcHJvcGVydGllcy4KICovCi8qKgogKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogKiBAbGljZW5zZSBNSVQKICogQGZpbGVvdmVydmlldyBJbXBsZW1lbnRzIGEgZnVuY3Rpb24gbWVtb2l6ZXIgdXNpbmcgdGhlIFNpZ25hdHVyZSBBUEkuCiAqLwovKioKICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICogQGxpY2Vuc2UgTUlUCiAqIEBmaWxlb3ZlcnZpZXcgSW1wbGVtZW50cyB0aGUgU2lnbmF0dXJlIEFQSSB0byBoZWxwIGluIGNvbXBhcmluZyB3aGVuIHR3bwogKiBQbG90dGFibGUgb2JqZWN0cyBoYXZlICJjaGFuZ2VkIi4KICoKICogTWVtb2l6YXRpb24gaW4gUGxvdHRhYmxlIGlzIGNvbXBsaWNhdGVkIGJ5IG11dGFibGUgc2NhbGVzIGFuZCBkYXRhc2V0cy4gV2UgY2Fubm90IHNpbXBseQogKiByZWZlcmVuY2UgY29tcGFyZSB0d28gZS5nLiBzY2FsZXMgc2luY2UgaXQgbWF5IGhhdmUgaW50ZXJuYWxseSBtdXRhdGVkLiBUbyByZXNvbHZlIHRoaXMsCiAqIHdlIHdyaXRlIGEgcmVjdXJzaXZlIFNpZ25hdHVyZSBpbnRlcmZhY2UgdGhhdCBob2xkcyBhbiBpbW11dGFibGUgc25hcHNob3Qgb2Ygd2hhdGV2ZXIKICogc3RhdGUgdGhlIHNjYWxlL2RhdGEgd2FzIGluIGF0IHRoZSB0aW1lLiBUaGVuIG9uIG1lbW9pemVkIGZ1bmN0aW9uIGludm9jYXRpb24gd2Ugc2lnbiB0aGUKICogbmV3IGlucHV0cyBhbmQgY29tcGFyZSB0aGUgc2lnbmF0dXJlcyB0byBkZWNpZGUgaWYgd2Ugc2hvdWxkIHJlY29tcHV0ZS4KICoKICogV2UgbXVzdCBoYW5kLXdyaXRlIGEgc2lnbmF0dXJlIGZvciBlYWNoIGN1c3RvbSBjbGFzcyB3ZSB3aXNoIHRvIHN1cHBvcnQuCiAqLwovKioKICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICogQGxpY2Vuc2UgTUlUCiAqLwovKioKICogQ29weXJpZ2h0IDIwMTctcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICogQGxpY2Vuc2UgTUlUCiAqLwovKioKQGxpY2Vuc2UKQ29weXJpZ2h0IChjKSAyMDE0IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0Cmh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0Cmh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudApmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKKi8KLyoqCkBsaWNlbnNlCkNvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuClRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdApodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdApodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCmZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCnBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiovCi8qKgpAbGljZW5zZQpDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0ClRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0ClRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dApDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwpzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAoqLwovKioKQGxpY2Vuc2UKQ29weXJpZ2h0IChjKSAyMDE2IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0Cmh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0Cmh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudApmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKKi8KLyoqCkBsaWNlbnNlCkNvcHlyaWdodCAoYykgMjAxNiBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuClRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CkNvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCnN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiovCi8qKgpAbGljZW5zZQpDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQpmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwpwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CmZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAoqLwovKioKQGxpY2Vuc2UKQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dApUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dApUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28Kc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKKi8KLyoqCkBsaWNlbnNlCkNvcHlyaWdodCAoYykgMjAxOSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuClRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdApodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdApodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCmZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCnBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiovCi8qKgpAbGljZW5zZQpDb3B5cmlnaHQgKGMpIDIwMTkgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0ClRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0ClRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dApDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwpzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAoqLwoKKCgpPT57dmFyIHFpZT1PYmplY3QuY3JlYXRlLEZBPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxYaWU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixZaWU9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMsUWllPU9iamVjdC5nZXRQcm90b3R5cGVPZixaaWU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxKVj0obix0KT0+KCk9Pih0fHxuKCh0PXtleHBvcnRzOnt9fSkuZXhwb3J0cyx0KSx0LmV4cG9ydHMpLE5BPShuLHQpPT57Zm9yKHZhciBlIGluIHQpRkEobixlLHtnZXQ6dFtlXSxlbnVtZXJhYmxlOiEwfSl9LCRWPShuLHQsZSk9PihlPW51bGwhPW4/cWllKFFpZShuKSk6e30sKChuLHQsZSxpKT0+e2lmKHQmJiJvYmplY3QiPT10eXBlb2YgdHx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpZm9yKGxldCByIG9mIFlpZSh0KSkhWmllLmNhbGwobixyKSYmdW5kZWZpbmVkIT09ciYmRkEobixyLHtnZXQ6KCk9PnRbcl0sZW51bWVyYWJsZTohKGk9WGllKHQscikpfHxpLmVudW1lcmFibGV9KTtyZXR1cm4gbn0pKCF0JiZuJiZuLl9fZXNNb2R1bGU/ZTpGQShlLCJkZWZhdWx0Iix7dmFsdWU6bixlbnVtZXJhYmxlOiEwfSksbikpLEw0PUpWKChSVWUsYkMpPT57dmFyIHA0LGg0LG00LGY0LGc0LF80LGI0LHY0LHk0LHg0LEM0LE00LHc0LGdDLFpBLFM0LEU0LFQ0LExtLEQ0LEk0LEE0LFI0LFA0LGs0LE80LEY0LE40LF9DOyFmdW5jdGlvbihuKXt2YXIgdD0ib2JqZWN0Ij09dHlwZW9mIGdsb2JhbD9nbG9iYWw6Im9iamVjdCI9PXR5cGVvZiBzZWxmP3NlbGY6Im9iamVjdCI9PXR5cGVvZiB0aGlzP3RoaXM6e307ZnVuY3Rpb24gZShpLHIpe3JldHVybiBpIT09dCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShpLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTppLl9fZXNNb2R1bGU9ITApLGZ1bmN0aW9uKG8sYSl7cmV0dXJuIGlbb109cj9yKG8sYSk6YX19ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoInRzbGliIixbImV4cG9ydHMiXSxmdW5jdGlvbihpKXtuKGUodCxlKGkpKSl9KTpuKCJvYmplY3QiPT10eXBlb2YgYkMmJiJvYmplY3QiPT10eXBlb2YgYkMuZXhwb3J0cz9lKHQsZShiQy5leHBvcnRzKSk6ZSh0KSl9KGZ1bmN0aW9uKG4pe3ZhciB0PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihpLHIpe2kuX19wcm90b19fPXJ9fHxmdW5jdGlvbihpLHIpe2Zvcih2YXIgbyBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG8pJiYoaVtvXT1yW29dKX07cDQ9ZnVuY3Rpb24oaSxyKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgciYmbnVsbCE9PXIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhyKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBvKCl7dGhpcy5jb25zdHJ1Y3Rvcj1pfXQoaSxyKSxpLnByb3RvdHlwZT1udWxsPT09cj9PYmplY3QuY3JlYXRlKHIpOihvLnByb3RvdHlwZT1yLnByb3RvdHlwZSxuZXcgbyl9LGg0PU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGkpe2Zvcih2YXIgcixvPTEsYT1hcmd1bWVudHMubGVuZ3RoO288YTtvKyspZm9yKHZhciBzIGluIHI9YXJndW1lbnRzW29dKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLHMpJiYoaVtzXT1yW3NdKTtyZXR1cm4gaX0sbTQ9ZnVuY3Rpb24oaSxyKXt2YXIgbz17fTtmb3IodmFyIGEgaW4gaSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSxhKSYmci5pbmRleE9mKGEpPDAmJihvW2FdPWlbYV0pO2lmKG51bGwhPWkmJiJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcz0wO2ZvcihhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaSk7czxhLmxlbmd0aDtzKyspci5pbmRleE9mKGFbc10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChpLGFbc10pJiYob1thW3NdXT1pW2Fbc11dKX1yZXR1cm4gb30sZjQ9ZnVuY3Rpb24oaSxyLG8sYSl7dmFyIGMscz1hcmd1bWVudHMubGVuZ3RoLGw9czwzP3I6bnVsbD09PWE/YT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsbyk6YTtpZigib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3QmJiJmdW5jdGlvbiI9PXR5cGVvZiBSZWZsZWN0LmRlY29yYXRlKWw9UmVmbGVjdC5kZWNvcmF0ZShpLHIsbyxhKTtlbHNlIGZvcih2YXIgZD1pLmxlbmd0aC0xO2Q+PTA7ZC0tKShjPWlbZF0pJiYobD0oczwzP2MobCk6cz4zP2MocixvLGwpOmMocixvKSl8fGwpO3JldHVybiBzPjMmJmwmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8sbCksbH0sZzQ9ZnVuY3Rpb24oaSxyKXtyZXR1cm4gZnVuY3Rpb24obyxhKXtyKG8sYSxpKX19LF80PWZ1bmN0aW9uKGkscixvLGEscyxsKXtmdW5jdGlvbiBjKEkpe2lmKHZvaWQgMCE9PUkmJiJmdW5jdGlvbiIhPXR5cGVvZiBJKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIEl9Zm9yKHZhciBtLGQ9YS5raW5kLHU9ImdldHRlciI9PT1kPyJnZXQiOiJzZXR0ZXIiPT09ZD8ic2V0IjoidmFsdWUiLHA9IXImJmk/YS5zdGF0aWM/aTppLnByb3RvdHlwZTpudWxsLGg9cnx8KHA/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwLGEubmFtZSk6e30pLF89ITEsTT1vLmxlbmd0aC0xO00+PTA7TS0tKXt2YXIgeT17fTtmb3IodmFyIHggaW4gYSl5W3hdPSJhY2Nlc3MiPT09eD97fTphW3hdO2Zvcih2YXIgeCBpbiBhLmFjY2Vzcyl5LmFjY2Vzc1t4XT1hLmFjY2Vzc1t4XTt5LmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKEkpe2lmKF8pdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7bC5wdXNoKGMoSXx8bnVsbCkpfTt2YXIgUj0oMCxvW01dKSgiYWNjZXNzb3IiPT09ZD97Z2V0OmguZ2V0LHNldDpoLnNldH06aFt1XSx5KTtpZigiYWNjZXNzb3IiPT09ZCl7aWYodm9pZCAwPT09Uiljb250aW51ZTtpZihudWxsPT09Unx8Im9iamVjdCIhPXR5cGVvZiBSKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhtPWMoUi5nZXQpKSYmKGguZ2V0PW0pLChtPWMoUi5zZXQpKSYmKGguc2V0PW0pLChtPWMoUi5pbml0KSkmJnMucHVzaChtKX1lbHNlKG09YyhSKSkmJigiZmllbGQiPT09ZD9zLnB1c2gobSk6aFt1XT1tKX1wJiZPYmplY3QuZGVmaW5lUHJvcGVydHkocCxhLm5hbWUsaCksXz0hMH0sYjQ9ZnVuY3Rpb24oaSxyLG8pe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjIscz0wO3M8ci5sZW5ndGg7cysrKW89YT9yW3NdLmNhbGwoaSxvKTpyW3NdLmNhbGwoaSk7cmV0dXJuIGE/bzp2b2lkIDB9LHY0PWZ1bmN0aW9uKGkpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgaT9pOiIiLmNvbmNhdChpKX0seTQ9ZnVuY3Rpb24oaSxyLG8pe3JldHVybiJzeW1ib2wiPT10eXBlb2YgciYmKHI9ci5kZXNjcmlwdGlvbj8iWyIuY29uY2F0KHIuZGVzY3JpcHRpb24sIl0iKToiIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KGksIm5hbWUiLHtjb25maWd1cmFibGU6ITAsdmFsdWU6bz8iIi5jb25jYXQobywiICIscik6cn0pfSx4ND1mdW5jdGlvbihpLHIpe2lmKCJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmImZ1bmN0aW9uIj09dHlwZW9mIFJlZmxlY3QubWV0YWRhdGEpcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEoaSxyKX0sQzQ9ZnVuY3Rpb24oaSxyLG8sYSl7cmV0dXJuIG5ldyhvfHwobz1Qcm9taXNlKSkoZnVuY3Rpb24obCxjKXtmdW5jdGlvbiBkKGgpe3RyeXtwKGEubmV4dChoKSl9Y2F0Y2gobSl7YyhtKX19ZnVuY3Rpb24gdShoKXt0cnl7cChhLnRocm93KGgpKX1jYXRjaChtKXtjKG0pfX1mdW5jdGlvbiBwKGgpe2guZG9uZT9sKGgudmFsdWUpOmZ1bmN0aW9uKGwpe3JldHVybiBsIGluc3RhbmNlb2Ygbz9sOm5ldyBvKGZ1bmN0aW9uKGMpe2MobCl9KX0oaC52YWx1ZSkudGhlbihkLHUpfXAoKGE9YS5hcHBseShpLHJ8fFtdKSkubmV4dCgpKX0pfSxNND1mdW5jdGlvbihpLHIpe3ZhciBhLHMsbCxjLG89e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmbFswXSl0aHJvdyBsWzFdO3JldHVybiBsWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIGM9e25leHQ6ZCgwKSx0aHJvdzpkKDEpLHJldHVybjpkKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoY1tTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxjO2Z1bmN0aW9uIGQocCl7cmV0dXJuIGZ1bmN0aW9uKGgpe3JldHVybiBmdW5jdGlvbihwKXtpZihhKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO2MmJihjPTAscFswXSYmKG89MCkpLG87KXRyeXtpZihhPTEscyYmKGw9MiZwWzBdP3MucmV0dXJuOnBbMF0/cy50aHJvd3x8KChsPXMucmV0dXJuKSYmbC5jYWxsKHMpLDApOnMubmV4dCkmJiEobD1sLmNhbGwocyxwWzFdKSkuZG9uZSlyZXR1cm4gbDtzd2l0Y2gocz0wLGwmJihwPVsyJnBbMF0sbC52YWx1ZV0pLHBbMF0pe2Nhc2UgMDpjYXNlIDE6bD1wO2JyZWFrO2Nhc2UgNDpyZXR1cm4gby5sYWJlbCsrLHt2YWx1ZTpwWzFdLGRvbmU6ITF9O2Nhc2UgNTpvLmxhYmVsKysscz1wWzFdLHA9WzBdO2NvbnRpbnVlO2Nhc2UgNzpwPW8ub3BzLnBvcCgpLG8udHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEobD0obD1vLnRyeXMpLmxlbmd0aD4wJiZsW2wubGVuZ3RoLTFdKSYmKDY9PT1wWzBdfHwyPT09cFswXSkpe289MDtjb250aW51ZX1pZigzPT09cFswXSYmKCFsfHxwWzFdPmxbMF0mJnBbMV08bFszXSkpe28ubGFiZWw9cFsxXTticmVha31pZig2PT09cFswXSYmby5sYWJlbDxsWzFdKXtvLmxhYmVsPWxbMV0sbD1wO2JyZWFrfWlmKGwmJm8ubGFiZWw8bFsyXSl7by5sYWJlbD1sWzJdLG8ub3BzLnB1c2gocCk7YnJlYWt9bFsyXSYmby5vcHMucG9wKCksby50cnlzLnBvcCgpO2NvbnRpbnVlfXA9ci5jYWxsKGksbyl9Y2F0Y2goaCl7cD1bNixoXSxzPTB9ZmluYWxseXthPWw9MH1pZig1JnBbMF0pdGhyb3cgcFsxXTtyZXR1cm57dmFsdWU6cFswXT9wWzFdOnZvaWQgMCxkb25lOiEwfX0oW3AsaF0pfX19LHc0PWZ1bmN0aW9uKGkscil7Zm9yKHZhciBvIGluIGkpImRlZmF1bHQiIT09byYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG8pJiZfQyhyLGksbyl9LF9DPU9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oaSxyLG8sYSl7dm9pZCAwPT09YSYmKGE9byk7dmFyIHM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLG8pOyghc3x8KCJnZXQiaW4gcz8hci5fX2VzTW9kdWxlOnMud3JpdGFibGV8fHMuY29uZmlndXJhYmxlKSkmJihzPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByW29dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLGEscyl9OmZ1bmN0aW9uKGkscixvLGEpe3ZvaWQgMD09PWEmJihhPW8pLGlbYV09cltvXX0sZ0M9ZnVuY3Rpb24oaSl7dmFyIHI9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yLG89ciYmaVtyXSxhPTA7aWYobylyZXR1cm4gby5jYWxsKGkpO2lmKGkmJiJudW1iZXIiPT10eXBlb2YgaS5sZW5ndGgpcmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gaSYmYT49aS5sZW5ndGgmJihpPXZvaWQgMCkse3ZhbHVlOmkmJmlbYSsrXSxkb25lOiFpfX19O3Rocm93IG5ldyBUeXBlRXJyb3Iocj8iT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS4iOiJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIil9LFpBPWZ1bmN0aW9uKGkscil7dmFyIG89ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmaVtTeW1ib2wuaXRlcmF0b3JdO2lmKCFvKXJldHVybiBpO3ZhciBzLGMsYT1vLmNhbGwoaSksbD1bXTt0cnl7Zm9yKDsodm9pZCAwPT09cnx8ci0tID4wKSYmIShzPWEubmV4dCgpKS5kb25lOylsLnB1c2gocy52YWx1ZSl9Y2F0Y2goZCl7Yz17ZXJyb3I6ZH19ZmluYWxseXt0cnl7cyYmIXMuZG9uZSYmKG89YS5yZXR1cm4pJiZvLmNhbGwoYSl9ZmluYWxseXtpZihjKXRocm93IGMuZXJyb3J9fXJldHVybiBsfSxTND1mdW5jdGlvbigpe2Zvcih2YXIgaT1bXSxyPTA7cjxhcmd1bWVudHMubGVuZ3RoO3IrKylpPWkuY29uY2F0KFpBKGFyZ3VtZW50c1tyXSkpO3JldHVybiBpfSxFND1mdW5jdGlvbigpe2Zvcih2YXIgaT0wLHI9MCxvPWFyZ3VtZW50cy5sZW5ndGg7cjxvO3IrKylpKz1hcmd1bWVudHNbcl0ubGVuZ3RoO3ZhciBhPUFycmF5KGkpLHM9MDtmb3Iocj0wO3I8bztyKyspZm9yKHZhciBsPWFyZ3VtZW50c1tyXSxjPTAsZD1sLmxlbmd0aDtjPGQ7YysrLHMrKylhW3NdPWxbY107cmV0dXJuIGF9LFQ0PWZ1bmN0aW9uKGkscixvKXtpZihvfHwyPT09YXJndW1lbnRzLmxlbmd0aClmb3IodmFyIGwsYT0wLHM9ci5sZW5ndGg7YTxzO2ErKykobHx8IShhIGluIHIpKSYmKGx8fChsPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHIsMCxhKSksbFthXT1yW2FdKTtyZXR1cm4gaS5jb25jYXQobHx8QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwocikpfSxMbT1mdW5jdGlvbihpKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIExtPyh0aGlzLnY9aSx0aGlzKTpuZXcgTG0oaSl9LEQ0PWZ1bmN0aW9uKGkscixvKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIik7dmFyIHMsYT1vLmFwcGx5KGkscnx8W10pLGw9W107cmV0dXJuIHM9e30sYygibmV4dCIpLGMoInRocm93IiksYygicmV0dXJuIiksc1tTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30scztmdW5jdGlvbiBjKF8pe2FbX10mJihzW19dPWZ1bmN0aW9uKE0pe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih5LHgpe2wucHVzaChbXyxNLHkseF0pPjF8fGQoXyxNKX0pfSl9ZnVuY3Rpb24gZChfLE0pe3RyeXshZnVuY3Rpb24oXyl7Xy52YWx1ZSBpbnN0YW5jZW9mIExtP1Byb21pc2UucmVzb2x2ZShfLnZhbHVlLnYpLnRoZW4ocCxoKTptKGxbMF1bMl0sXyl9KGFbX10oTSkpfWNhdGNoKHkpe20obFswXVszXSx5KX19ZnVuY3Rpb24gcChfKXtkKCJuZXh0IixfKX1mdW5jdGlvbiBoKF8pe2QoInRocm93IixfKX1mdW5jdGlvbiBtKF8sTSl7XyhNKSxsLnNoaWZ0KCksbC5sZW5ndGgmJmQobFswXVswXSxsWzBdWzFdKX19LEk0PWZ1bmN0aW9uKGkpe3ZhciByLG87cmV0dXJuIHI9e30sYSgibmV4dCIpLGEoInRocm93IixmdW5jdGlvbihzKXt0aHJvdyBzfSksYSgicmV0dXJuIikscltTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LHI7ZnVuY3Rpb24gYShzLGwpe3Jbc109aVtzXT9mdW5jdGlvbihjKXtyZXR1cm4obz0hbyk/e3ZhbHVlOkxtKGlbc10oYykpLGRvbmU6ITF9Omw/bChjKTpjfTpsfX0sQTQ9ZnVuY3Rpb24oaSl7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpO3ZhciBvLHI9aVtTeW1ib2wuYXN5bmNJdGVyYXRvcl07cmV0dXJuIHI/ci5jYWxsKGkpOihpPWdDKGkpLG89e30sYSgibmV4dCIpLGEoInRocm93IiksYSgicmV0dXJuIiksb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sbyk7ZnVuY3Rpb24gYShsKXtvW2xdPWlbbF0mJmZ1bmN0aW9uKGMpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihkLHUpeyFmdW5jdGlvbihsLGMsZCx1KXtQcm9taXNlLnJlc29sdmUodSkudGhlbihmdW5jdGlvbihwKXtsKHt2YWx1ZTpwLGRvbmU6ZH0pfSxjKX0oZCx1LChjPWlbbF0oYykpLmRvbmUsYy52YWx1ZSl9KX19fSxSND1mdW5jdGlvbihpLHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KGksInJhdyIse3ZhbHVlOnJ9KTppLnJhdz1yLGl9O3ZhciBlPU9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oaSxyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoaSwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6cn0pfTpmdW5jdGlvbihpLHIpe2kuZGVmYXVsdD1yfTtQND1mdW5jdGlvbihpKXtpZihpJiZpLl9fZXNNb2R1bGUpcmV0dXJuIGk7dmFyIHI9e307aWYobnVsbCE9aSlmb3IodmFyIG8gaW4gaSkiZGVmYXVsdCIhPT1vJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSxvKSYmX0MocixpLG8pO3JldHVybiBlKHIsaSkscn0sazQ9ZnVuY3Rpb24oaSl7cmV0dXJuIGkmJmkuX19lc01vZHVsZT9pOntkZWZhdWx0Oml9fSxPND1mdW5jdGlvbihpLHIsbyxhKXtpZigiYSI9PT1vJiYhYSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXIiKTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygcj9pIT09cnx8IWE6IXIuaGFzKGkpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdCIpO3JldHVybiJtIj09PW8/YToiYSI9PT1vP2EuY2FsbChpKTphP2EudmFsdWU6ci5nZXQoaSl9LEY0PWZ1bmN0aW9uKGkscixvLGEscyl7aWYoIm0iPT09YSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGUiKTtpZigiYSI9PT1hJiYhcyl0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXIiKTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygcj9pIT09cnx8IXM6IXIuaGFzKGkpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0Iik7cmV0dXJuImEiPT09YT9zLmNhbGwoaSxvKTpzP3MudmFsdWU9bzpyLnNldChpLG8pLG99LE40PWZ1bmN0aW9uKGkscil7aWYobnVsbD09PXJ8fCJvYmplY3QiIT10eXBlb2YgciYmImZ1bmN0aW9uIiE9dHlwZW9mIHIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3QiKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgaT9yPT09aTppLmhhcyhyKX0sbigiX19leHRlbmRzIixwNCksbigiX19hc3NpZ24iLGg0KSxuKCJfX3Jlc3QiLG00KSxuKCJfX2RlY29yYXRlIixmNCksbigiX19wYXJhbSIsZzQpLG4oIl9fZXNEZWNvcmF0ZSIsXzQpLG4oIl9fcnVuSW5pdGlhbGl6ZXJzIixiNCksbigiX19wcm9wS2V5Iix2NCksbigiX19zZXRGdW5jdGlvbk5hbWUiLHk0KSxuKCJfX21ldGFkYXRhIix4NCksbigiX19hd2FpdGVyIixDNCksbigiX19nZW5lcmF0b3IiLE00KSxuKCJfX2V4cG9ydFN0YXIiLHc0KSxuKCJfX2NyZWF0ZUJpbmRpbmciLF9DKSxuKCJfX3ZhbHVlcyIsZ0MpLG4oIl9fcmVhZCIsWkEpLG4oIl9fc3ByZWFkIixTNCksbigiX19zcHJlYWRBcnJheXMiLEU0KSxuKCJfX3NwcmVhZEFycmF5IixUNCksbigiX19hd2FpdCIsTG0pLG4oIl9fYXN5bmNHZW5lcmF0b3IiLEQ0KSxuKCJfX2FzeW5jRGVsZWdhdG9yIixJNCksbigiX19hc3luY1ZhbHVlcyIsQTQpLG4oIl9fbWFrZVRlbXBsYXRlT2JqZWN0IixSNCksbigiX19pbXBvcnRTdGFyIixQNCksbigiX19pbXBvcnREZWZhdWx0IixrNCksbigiX19jbGFzc1ByaXZhdGVGaWVsZEdldCIsTzQpLG4oIl9fY2xhc3NQcml2YXRlRmllbGRTZXQiLEY0KSxuKCJfX2NsYXNzUHJpdmF0ZUZpZWxkSW4iLE40KX0pfSksdUc9SlYoY089PnsidXNlIHN0cmljdCI7dmFyIG4sdXU9Y08mJmNPLl9fc3ByZWFkQXJyYXl8fGZ1bmN0aW9uKG4sdCxlKXtpZihlfHwyPT09YXJndW1lbnRzLmxlbmd0aClmb3IodmFyIG8saT0wLHI9dC5sZW5ndGg7aTxyO2krKykob3x8IShpIGluIHQpKSYmKG98fChvPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQsMCxpKSksb1tpXT10W2ldKTtyZXR1cm4gbi5jb25jYXQob3x8QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkpfTtuPWZ1bmN0aW9uKCl7IWZ1bmN0aW9uKGope3ZhciBKPWoucGVyZm9ybWFuY2U7ZnVuY3Rpb24gbGUoZnQpe0omJkoubWFyayYmSi5tYXJrKGZ0KX1mdW5jdGlvbiBFKGZ0LG1lKXtKJiZKLm1lYXN1cmUmJkoubWVhc3VyZShmdCxtZSl9bGUoIlpvbmUiKTt2YXIgVj1qLl9fWm9uZV9zeW1ib2xfcHJlZml4fHwiX196b25lX3N5bWJvbF9fIjtmdW5jdGlvbiBYKGZ0KXtyZXR1cm4gVitmdH12YXIgWj0hMD09PWpbWCgiZm9yY2VEdXBsaWNhdGVab25lQ2hlY2siKV07aWYoai5ab25lKXtpZihafHwiZnVuY3Rpb24iIT10eXBlb2Ygai5ab25lLl9fc3ltYm9sX18pdGhyb3cgbmV3IEVycm9yKCJab25lIGFscmVhZHkgbG9hZGVkLiIpO3JldHVybiBqLlpvbmV9dmFyIGFlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZnQobWUsZ2Upe3RoaXMuX3BhcmVudD1tZSx0aGlzLl9uYW1lPWdlP2dlLm5hbWV8fCJ1bm5hbWVkIjoiPHJvb3Q+Iix0aGlzLl9wcm9wZXJ0aWVzPWdlJiZnZS5wcm9wZXJ0aWVzfHx7fSx0aGlzLl96b25lRGVsZWdhdGU9bmV3IGV0KHRoaXMsdGhpcy5fcGFyZW50JiZ0aGlzLl9wYXJlbnQuX3pvbmVEZWxlZ2F0ZSxnZSl9cmV0dXJuIGZ0LmFzc2VydFpvbmVQYXRjaGVkPWZ1bmN0aW9uKCl7aWYoai5Qcm9taXNlIT09T24uWm9uZUF3YXJlUHJvbWlzZSl0aHJvdyBuZXcgRXJyb3IoIlpvbmUuanMgaGFzIGRldGVjdGVkIHRoYXQgWm9uZUF3YXJlUHJvbWlzZSBgKHdpbmRvd3xnbG9iYWwpLlByb21pc2VgIGhhcyBiZWVuIG92ZXJ3cml0dGVuLlxuTW9zdCBsaWtlbHkgY2F1c2UgaXMgdGhhdCBhIFByb21pc2UgcG9seWZpbGwgaGFzIGJlZW4gbG9hZGVkIGFmdGVyIFpvbmUuanMgKFBvbHlmaWxsaW5nIFByb21pc2UgYXBpIGlzIG5vdCBuZWNlc3Nhcnkgd2hlbiB6b25lLmpzIGlzIGxvYWRlZC4gSWYgeW91IG11c3QgbG9hZCBvbmUsIGRvIHNvIGJlZm9yZSBsb2FkaW5nIHpvbmUuanMuKSIpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZnQsInJvb3QiLHtnZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIG1lPWZ0LmN1cnJlbnQ7bWUucGFyZW50OyltZT1tZS5wYXJlbnQ7cmV0dXJuIG1lfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdCwiY3VycmVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiBpci56b25lfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdCwiY3VycmVudFRhc2siLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gU2F9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZnQuX19sb2FkX3BhdGNoPWZ1bmN0aW9uKG1lLGdlLFBlKXtpZih2b2lkIDA9PT1QZSYmKFBlPSExKSxPbi5oYXNPd25Qcm9wZXJ0eShtZSkpe2lmKCFQZSYmWil0aHJvdyBFcnJvcigiQWxyZWFkeSBsb2FkZWQgcGF0Y2g6ICIrbWUpfWVsc2UgaWYoIWpbIl9fWm9uZV9kaXNhYmxlXyIrbWVdKXt2YXIgTW49IlpvbmU6IittZTtsZShNbiksT25bbWVdPWdlKGosZnQsY3IpLEUoTW4sTW4pfX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ0LnByb3RvdHlwZSwicGFyZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhcmVudH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZnQucHJvdG90eXBlLCJuYW1lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25hbWV9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZnQucHJvdG90eXBlLmdldD1mdW5jdGlvbihtZSl7dmFyIGdlPXRoaXMuZ2V0Wm9uZVdpdGgobWUpO2lmKGdlKXJldHVybiBnZS5fcHJvcGVydGllc1ttZV19LGZ0LnByb3RvdHlwZS5nZXRab25lV2l0aD1mdW5jdGlvbihtZSl7Zm9yKHZhciBnZT10aGlzO2dlOyl7aWYoZ2UuX3Byb3BlcnRpZXMuaGFzT3duUHJvcGVydHkobWUpKXJldHVybiBnZTtnZT1nZS5fcGFyZW50fXJldHVybiBudWxsfSxmdC5wcm90b3R5cGUuZm9yaz1mdW5jdGlvbihtZSl7aWYoIW1lKXRocm93IG5ldyBFcnJvcigiWm9uZVNwZWMgcmVxdWlyZWQhIik7cmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5mb3JrKHRoaXMsbWUpfSxmdC5wcm90b3R5cGUud3JhcD1mdW5jdGlvbihtZSxnZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG1lKXRocm93IG5ldyBFcnJvcigiRXhwZWN0aW5nIGZ1bmN0aW9uIGdvdDogIittZSk7dmFyIFBlPXRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnRlcmNlcHQodGhpcyxtZSxnZSksTW49dGhpcztyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTW4ucnVuR3VhcmRlZChQZSx0aGlzLGFyZ3VtZW50cyxnZSl9fSxmdC5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKG1lLGdlLFBlLE1uKXtpcj17cGFyZW50OmlyLHpvbmU6dGhpc307dHJ5e3JldHVybiB0aGlzLl96b25lRGVsZWdhdGUuaW52b2tlKHRoaXMsbWUsZ2UsUGUsTW4pfWZpbmFsbHl7aXI9aXIucGFyZW50fX0sZnQucHJvdG90eXBlLnJ1bkd1YXJkZWQ9ZnVuY3Rpb24obWUsZ2UsUGUsTW4pe3ZvaWQgMD09PWdlJiYoZ2U9bnVsbCksaXI9e3BhcmVudDppcix6b25lOnRoaXN9O3RyeXt0cnl7cmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnZva2UodGhpcyxtZSxnZSxQZSxNbil9Y2F0Y2godXIpe2lmKHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLHVyKSl0aHJvdyB1cn19ZmluYWxseXtpcj1pci5wYXJlbnR9fSxmdC5wcm90b3R5cGUucnVuVGFzaz1mdW5jdGlvbihtZSxnZSxQZSl7aWYobWUuem9uZSE9dGhpcyl0aHJvdyBuZXcgRXJyb3IoIkEgdGFzayBjYW4gb25seSBiZSBydW4gaW4gdGhlIHpvbmUgb2YgY3JlYXRpb24hIChDcmVhdGlvbjogIisobWUuem9uZXx8RXQpLm5hbWUrIjsgRXhlY3V0aW9uOiAiK3RoaXMubmFtZSsiKSIpO2lmKG1lLnN0YXRlIT09Z2l8fG1lLnR5cGUhPT1faSYmbWUudHlwZSE9PVBuKXt2YXIgTW49bWUuc3RhdGUhPVFuO01uJiZtZS5fdHJhbnNpdGlvblRvKFFuLEhuKSxtZS5ydW5Db3VudCsrO3ZhciB1cj1TYTtTYT1tZSxpcj17cGFyZW50OmlyLHpvbmU6dGhpc307dHJ5e21lLnR5cGU9PVBuJiZtZS5kYXRhJiYhbWUuZGF0YS5pc1BlcmlvZGljJiYobWUuY2FuY2VsRm49dm9pZCAwKTt0cnl7cmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnZva2VUYXNrKHRoaXMsbWUsZ2UsUGUpfWNhdGNoKGhsKXtpZih0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcyxobCkpdGhyb3cgaGx9fWZpbmFsbHl7bWUuc3RhdGUhPT1naSYmbWUuc3RhdGUhPT1CaSYmKG1lLnR5cGU9PV9pfHxtZS5kYXRhJiZtZS5kYXRhLmlzUGVyaW9kaWM/TW4mJm1lLl90cmFuc2l0aW9uVG8oSG4sUW4pOihtZS5ydW5Db3VudD0wLHRoaXMuX3VwZGF0ZVRhc2tDb3VudChtZSwtMSksTW4mJm1lLl90cmFuc2l0aW9uVG8oZ2ksUW4sZ2kpKSksaXI9aXIucGFyZW50LFNhPXVyfX19LGZ0LnByb3RvdHlwZS5zY2hlZHVsZVRhc2s9ZnVuY3Rpb24obWUpe2lmKG1lLnpvbmUmJm1lLnpvbmUhPT10aGlzKWZvcih2YXIgZ2U9dGhpcztnZTspe2lmKGdlPT09bWUuem9uZSl0aHJvdyBFcnJvcigiY2FuIG5vdCByZXNjaGVkdWxlIHRhc2sgdG8gIi5jb25jYXQodGhpcy5uYW1lLCIgd2hpY2ggaXMgZGVzY2VuZGFudHMgb2YgdGhlIG9yaWdpbmFsIHpvbmUgIikuY29uY2F0KG1lLnpvbmUubmFtZSkpO2dlPWdlLnBhcmVudH1tZS5fdHJhbnNpdGlvblRvKHRpLGdpKTt2YXIgUGU9W107bWUuX3pvbmVEZWxlZ2F0ZXM9UGUsbWUuX3pvbmU9dGhpczt0cnl7bWU9dGhpcy5fem9uZURlbGVnYXRlLnNjaGVkdWxlVGFzayh0aGlzLG1lKX1jYXRjaChNbil7dGhyb3cgbWUuX3RyYW5zaXRpb25UbyhCaSx0aSxnaSksdGhpcy5fem9uZURlbGVnYXRlLmhhbmRsZUVycm9yKHRoaXMsTW4pLE1ufXJldHVybiBtZS5fem9uZURlbGVnYXRlcz09PVBlJiZ0aGlzLl91cGRhdGVUYXNrQ291bnQobWUsMSksbWUuc3RhdGU9PXRpJiZtZS5fdHJhbnNpdGlvblRvKEhuLHRpKSxtZX0sZnQucHJvdG90eXBlLnNjaGVkdWxlTWljcm9UYXNrPWZ1bmN0aW9uKG1lLGdlLFBlLE1uKXtyZXR1cm4gdGhpcy5zY2hlZHVsZVRhc2sobmV3IHFlKF9uLG1lLGdlLFBlLE1uLHZvaWQgMCkpfSxmdC5wcm90b3R5cGUuc2NoZWR1bGVNYWNyb1Rhc2s9ZnVuY3Rpb24obWUsZ2UsUGUsTW4sdXIpe3JldHVybiB0aGlzLnNjaGVkdWxlVGFzayhuZXcgcWUoUG4sbWUsZ2UsUGUsTW4sdXIpKX0sZnQucHJvdG90eXBlLnNjaGVkdWxlRXZlbnRUYXNrPWZ1bmN0aW9uKG1lLGdlLFBlLE1uLHVyKXtyZXR1cm4gdGhpcy5zY2hlZHVsZVRhc2sobmV3IHFlKF9pLG1lLGdlLFBlLE1uLHVyKSl9LGZ0LnByb3RvdHlwZS5jYW5jZWxUYXNrPWZ1bmN0aW9uKG1lKXtpZihtZS56b25lIT10aGlzKXRocm93IG5ldyBFcnJvcigiQSB0YXNrIGNhbiBvbmx5IGJlIGNhbmNlbGxlZCBpbiB0aGUgem9uZSBvZiBjcmVhdGlvbiEgKENyZWF0aW9uOiAiKyhtZS56b25lfHxFdCkubmFtZSsiOyBFeGVjdXRpb246ICIrdGhpcy5uYW1lKyIpIik7aWYobWUuc3RhdGU9PT1Ibnx8bWUuc3RhdGU9PT1Rbil7bWUuX3RyYW5zaXRpb25Ubyh6dCxIbixRbik7dHJ5e3RoaXMuX3pvbmVEZWxlZ2F0ZS5jYW5jZWxUYXNrKHRoaXMsbWUpfWNhdGNoKGdlKXt0aHJvdyBtZS5fdHJhbnNpdGlvblRvKEJpLHp0KSx0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcyxnZSksZ2V9cmV0dXJuIHRoaXMuX3VwZGF0ZVRhc2tDb3VudChtZSwtMSksbWUuX3RyYW5zaXRpb25UbyhnaSx6dCksbWUucnVuQ291bnQ9MCxtZX19LGZ0LnByb3RvdHlwZS5fdXBkYXRlVGFza0NvdW50PWZ1bmN0aW9uKG1lLGdlKXt2YXIgUGU9bWUuX3pvbmVEZWxlZ2F0ZXM7LTE9PWdlJiYobWUuX3pvbmVEZWxlZ2F0ZXM9bnVsbCk7Zm9yKHZhciBNbj0wO01uPFBlLmxlbmd0aDtNbisrKVBlW01uXS5fdXBkYXRlVGFza0NvdW50KG1lLnR5cGUsZ2UpfSxmdH0oKTthZS5fX3N5bWJvbF9fPVg7dmFyIHFpLHplPXtuYW1lOiIiLG9uSGFzVGFzazpmdW5jdGlvbihmdCxtZSxnZSxQZSl7cmV0dXJuIGZ0Lmhhc1Rhc2soZ2UsUGUpfSxvblNjaGVkdWxlVGFzazpmdW5jdGlvbihmdCxtZSxnZSxQZSl7cmV0dXJuIGZ0LnNjaGVkdWxlVGFzayhnZSxQZSl9LG9uSW52b2tlVGFzazpmdW5jdGlvbihmdCxtZSxnZSxQZSxNbix1cil7cmV0dXJuIGZ0Lmludm9rZVRhc2soZ2UsUGUsTW4sdXIpfSxvbkNhbmNlbFRhc2s6ZnVuY3Rpb24oZnQsbWUsZ2UsUGUpe3JldHVybiBmdC5jYW5jZWxUYXNrKGdlLFBlKX19LGV0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZnQobWUsZ2UsUGUpe3RoaXMuX3Rhc2tDb3VudHM9e21pY3JvVGFzazowLG1hY3JvVGFzazowLGV2ZW50VGFzazowfSx0aGlzLnpvbmU9bWUsdGhpcy5fcGFyZW50RGVsZWdhdGU9Z2UsdGhpcy5fZm9ya1pTPVBlJiYoUGUmJlBlLm9uRm9yaz9QZTpnZS5fZm9ya1pTKSx0aGlzLl9mb3JrRGxndD1QZSYmKFBlLm9uRm9yaz9nZTpnZS5fZm9ya0RsZ3QpLHRoaXMuX2ZvcmtDdXJyWm9uZT1QZSYmKFBlLm9uRm9yaz90aGlzLnpvbmU6Z2UuX2ZvcmtDdXJyWm9uZSksdGhpcy5faW50ZXJjZXB0WlM9UGUmJihQZS5vbkludGVyY2VwdD9QZTpnZS5faW50ZXJjZXB0WlMpLHRoaXMuX2ludGVyY2VwdERsZ3Q9UGUmJihQZS5vbkludGVyY2VwdD9nZTpnZS5faW50ZXJjZXB0RGxndCksdGhpcy5faW50ZXJjZXB0Q3VyclpvbmU9UGUmJihQZS5vbkludGVyY2VwdD90aGlzLnpvbmU6Z2UuX2ludGVyY2VwdEN1cnJab25lKSx0aGlzLl9pbnZva2VaUz1QZSYmKFBlLm9uSW52b2tlP1BlOmdlLl9pbnZva2VaUyksdGhpcy5faW52b2tlRGxndD1QZSYmKFBlLm9uSW52b2tlP2dlOmdlLl9pbnZva2VEbGd0KSx0aGlzLl9pbnZva2VDdXJyWm9uZT1QZSYmKFBlLm9uSW52b2tlP3RoaXMuem9uZTpnZS5faW52b2tlQ3VyclpvbmUpLHRoaXMuX2hhbmRsZUVycm9yWlM9UGUmJihQZS5vbkhhbmRsZUVycm9yP1BlOmdlLl9oYW5kbGVFcnJvclpTKSx0aGlzLl9oYW5kbGVFcnJvckRsZ3Q9UGUmJihQZS5vbkhhbmRsZUVycm9yP2dlOmdlLl9oYW5kbGVFcnJvckRsZ3QpLHRoaXMuX2hhbmRsZUVycm9yQ3VyclpvbmU9UGUmJihQZS5vbkhhbmRsZUVycm9yP3RoaXMuem9uZTpnZS5faGFuZGxlRXJyb3JDdXJyWm9uZSksdGhpcy5fc2NoZWR1bGVUYXNrWlM9UGUmJihQZS5vblNjaGVkdWxlVGFzaz9QZTpnZS5fc2NoZWR1bGVUYXNrWlMpLHRoaXMuX3NjaGVkdWxlVGFza0RsZ3Q9UGUmJihQZS5vblNjaGVkdWxlVGFzaz9nZTpnZS5fc2NoZWR1bGVUYXNrRGxndCksdGhpcy5fc2NoZWR1bGVUYXNrQ3VyclpvbmU9UGUmJihQZS5vblNjaGVkdWxlVGFzaz90aGlzLnpvbmU6Z2UuX3NjaGVkdWxlVGFza0N1cnJab25lKSx0aGlzLl9pbnZva2VUYXNrWlM9UGUmJihQZS5vbkludm9rZVRhc2s/UGU6Z2UuX2ludm9rZVRhc2taUyksdGhpcy5faW52b2tlVGFza0RsZ3Q9UGUmJihQZS5vbkludm9rZVRhc2s/Z2U6Z2UuX2ludm9rZVRhc2tEbGd0KSx0aGlzLl9pbnZva2VUYXNrQ3VyclpvbmU9UGUmJihQZS5vbkludm9rZVRhc2s/dGhpcy56b25lOmdlLl9pbnZva2VUYXNrQ3VyclpvbmUpLHRoaXMuX2NhbmNlbFRhc2taUz1QZSYmKFBlLm9uQ2FuY2VsVGFzaz9QZTpnZS5fY2FuY2VsVGFza1pTKSx0aGlzLl9jYW5jZWxUYXNrRGxndD1QZSYmKFBlLm9uQ2FuY2VsVGFzaz9nZTpnZS5fY2FuY2VsVGFza0RsZ3QpLHRoaXMuX2NhbmNlbFRhc2tDdXJyWm9uZT1QZSYmKFBlLm9uQ2FuY2VsVGFzaz90aGlzLnpvbmU6Z2UuX2NhbmNlbFRhc2tDdXJyWm9uZSksdGhpcy5faGFzVGFza1pTPW51bGwsdGhpcy5faGFzVGFza0RsZ3Q9bnVsbCx0aGlzLl9oYXNUYXNrRGxndE93bmVyPW51bGwsdGhpcy5faGFzVGFza0N1cnJab25lPW51bGw7dmFyIE1uPVBlJiZQZS5vbkhhc1Rhc2s7KE1ufHxnZSYmZ2UuX2hhc1Rhc2taUykmJih0aGlzLl9oYXNUYXNrWlM9TW4/UGU6emUsdGhpcy5faGFzVGFza0RsZ3Q9Z2UsdGhpcy5faGFzVGFza0RsZ3RPd25lcj10aGlzLHRoaXMuX2hhc1Rhc2tDdXJyWm9uZT1tZSxQZS5vblNjaGVkdWxlVGFza3x8KHRoaXMuX3NjaGVkdWxlVGFza1pTPXplLHRoaXMuX3NjaGVkdWxlVGFza0RsZ3Q9Z2UsdGhpcy5fc2NoZWR1bGVUYXNrQ3VyclpvbmU9dGhpcy56b25lKSxQZS5vbkludm9rZVRhc2t8fCh0aGlzLl9pbnZva2VUYXNrWlM9emUsdGhpcy5faW52b2tlVGFza0RsZ3Q9Z2UsdGhpcy5faW52b2tlVGFza0N1cnJab25lPXRoaXMuem9uZSksUGUub25DYW5jZWxUYXNrfHwodGhpcy5fY2FuY2VsVGFza1pTPXplLHRoaXMuX2NhbmNlbFRhc2tEbGd0PWdlLHRoaXMuX2NhbmNlbFRhc2tDdXJyWm9uZT10aGlzLnpvbmUpKX1yZXR1cm4gZnQucHJvdG90eXBlLmZvcms9ZnVuY3Rpb24obWUsZ2Upe3JldHVybiB0aGlzLl9mb3JrWlM/dGhpcy5fZm9ya1pTLm9uRm9yayh0aGlzLl9mb3JrRGxndCx0aGlzLnpvbmUsbWUsZ2UpOm5ldyBhZShtZSxnZSl9LGZ0LnByb3RvdHlwZS5pbnRlcmNlcHQ9ZnVuY3Rpb24obWUsZ2UsUGUpe3JldHVybiB0aGlzLl9pbnRlcmNlcHRaUz90aGlzLl9pbnRlcmNlcHRaUy5vbkludGVyY2VwdCh0aGlzLl9pbnRlcmNlcHREbGd0LHRoaXMuX2ludGVyY2VwdEN1cnJab25lLG1lLGdlLFBlKTpnZX0sZnQucHJvdG90eXBlLmludm9rZT1mdW5jdGlvbihtZSxnZSxQZSxNbix1cil7cmV0dXJuIHRoaXMuX2ludm9rZVpTP3RoaXMuX2ludm9rZVpTLm9uSW52b2tlKHRoaXMuX2ludm9rZURsZ3QsdGhpcy5faW52b2tlQ3VyclpvbmUsbWUsZ2UsUGUsTW4sdXIpOmdlLmFwcGx5KFBlLE1uKX0sZnQucHJvdG90eXBlLmhhbmRsZUVycm9yPWZ1bmN0aW9uKG1lLGdlKXtyZXR1cm4hdGhpcy5faGFuZGxlRXJyb3JaU3x8dGhpcy5faGFuZGxlRXJyb3JaUy5vbkhhbmRsZUVycm9yKHRoaXMuX2hhbmRsZUVycm9yRGxndCx0aGlzLl9oYW5kbGVFcnJvckN1cnJab25lLG1lLGdlKX0sZnQucHJvdG90eXBlLnNjaGVkdWxlVGFzaz1mdW5jdGlvbihtZSxnZSl7dmFyIFBlPWdlO2lmKHRoaXMuX3NjaGVkdWxlVGFza1pTKXRoaXMuX2hhc1Rhc2taUyYmUGUuX3pvbmVEZWxlZ2F0ZXMucHVzaCh0aGlzLl9oYXNUYXNrRGxndE93bmVyKSwoUGU9dGhpcy5fc2NoZWR1bGVUYXNrWlMub25TY2hlZHVsZVRhc2sodGhpcy5fc2NoZWR1bGVUYXNrRGxndCx0aGlzLl9zY2hlZHVsZVRhc2tDdXJyWm9uZSxtZSxnZSkpfHwoUGU9Z2UpO2Vsc2UgaWYoZ2Uuc2NoZWR1bGVGbilnZS5zY2hlZHVsZUZuKGdlKTtlbHNle2lmKGdlLnR5cGUhPV9uKXRocm93IG5ldyBFcnJvcigiVGFzayBpcyBtaXNzaW5nIHNjaGVkdWxlRm4uIik7cG4oZ2UpfXJldHVybiBQZX0sZnQucHJvdG90eXBlLmludm9rZVRhc2s9ZnVuY3Rpb24obWUsZ2UsUGUsTW4pe3JldHVybiB0aGlzLl9pbnZva2VUYXNrWlM/dGhpcy5faW52b2tlVGFza1pTLm9uSW52b2tlVGFzayh0aGlzLl9pbnZva2VUYXNrRGxndCx0aGlzLl9pbnZva2VUYXNrQ3VyclpvbmUsbWUsZ2UsUGUsTW4pOmdlLmNhbGxiYWNrLmFwcGx5KFBlLE1uKX0sZnQucHJvdG90eXBlLmNhbmNlbFRhc2s9ZnVuY3Rpb24obWUsZ2Upe3ZhciBQZTtpZih0aGlzLl9jYW5jZWxUYXNrWlMpUGU9dGhpcy5fY2FuY2VsVGFza1pTLm9uQ2FuY2VsVGFzayh0aGlzLl9jYW5jZWxUYXNrRGxndCx0aGlzLl9jYW5jZWxUYXNrQ3VyclpvbmUsbWUsZ2UpO2Vsc2V7aWYoIWdlLmNhbmNlbEZuKXRocm93IEVycm9yKCJUYXNrIGlzIG5vdCBjYW5jZWxhYmxlIik7UGU9Z2UuY2FuY2VsRm4oZ2UpfXJldHVybiBQZX0sZnQucHJvdG90eXBlLmhhc1Rhc2s9ZnVuY3Rpb24obWUsZ2Upe3RyeXt0aGlzLl9oYXNUYXNrWlMmJnRoaXMuX2hhc1Rhc2taUy5vbkhhc1Rhc2sodGhpcy5faGFzVGFza0RsZ3QsdGhpcy5faGFzVGFza0N1cnJab25lLG1lLGdlKX1jYXRjaChQZSl7dGhpcy5oYW5kbGVFcnJvcihtZSxQZSl9fSxmdC5wcm90b3R5cGUuX3VwZGF0ZVRhc2tDb3VudD1mdW5jdGlvbihtZSxnZSl7dmFyIFBlPXRoaXMuX3Rhc2tDb3VudHMsTW49UGVbbWVdLHVyPVBlW21lXT1NbitnZTtpZih1cjwwKXRocm93IG5ldyBFcnJvcigiTW9yZSB0YXNrcyBleGVjdXRlZCB0aGVuIHdlcmUgc2NoZWR1bGVkLiIpOzAhPU1uJiYwIT11cnx8dGhpcy5oYXNUYXNrKHRoaXMuem9uZSx7bWljcm9UYXNrOlBlLm1pY3JvVGFzaz4wLG1hY3JvVGFzazpQZS5tYWNyb1Rhc2s+MCxldmVudFRhc2s6UGUuZXZlbnRUYXNrPjAsY2hhbmdlOm1lfSl9LGZ0fSgpLHFlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZnQobWUsZ2UsUGUsTW4sdXIsaGwpe2lmKHRoaXMuX3pvbmU9bnVsbCx0aGlzLnJ1bkNvdW50PTAsdGhpcy5fem9uZURlbGVnYXRlcz1udWxsLHRoaXMuX3N0YXRlPSJub3RTY2hlZHVsZWQiLHRoaXMudHlwZT1tZSx0aGlzLnNvdXJjZT1nZSx0aGlzLmRhdGE9TW4sdGhpcy5zY2hlZHVsZUZuPXVyLHRoaXMuY2FuY2VsRm49aGwsIVBlKXRocm93IG5ldyBFcnJvcigiY2FsbGJhY2sgaXMgbm90IGRlZmluZWQiKTt0aGlzLmNhbGxiYWNrPVBlO3ZhciB0dD10aGlzO3RoaXMuaW52b2tlPW1lPT09X2kmJk1uJiZNbi51c2VHP2Z0Lmludm9rZVRhc2s6ZnVuY3Rpb24oKXtyZXR1cm4gZnQuaW52b2tlVGFzay5jYWxsKGosdHQsdGhpcyxhcmd1bWVudHMpfX1yZXR1cm4gZnQuaW52b2tlVGFzaz1mdW5jdGlvbihtZSxnZSxQZSl7bWV8fChtZT10aGlzKSx5cisrO3RyeXtyZXR1cm4gbWUucnVuQ291bnQrKyxtZS56b25lLnJ1blRhc2sobWUsZ2UsUGUpfWZpbmFsbHl7MT09eXImJlJuKCkseXItLX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdC5wcm90b3R5cGUsInpvbmUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fem9uZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZnQucHJvdG90eXBlLCJzdGF0ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGF0ZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxmdC5wcm90b3R5cGUuY2FuY2VsU2NoZWR1bGVSZXF1ZXN0PWZ1bmN0aW9uKCl7dGhpcy5fdHJhbnNpdGlvblRvKGdpLHRpKX0sZnQucHJvdG90eXBlLl90cmFuc2l0aW9uVG89ZnVuY3Rpb24obWUsZ2UsUGUpe2lmKHRoaXMuX3N0YXRlIT09Z2UmJnRoaXMuX3N0YXRlIT09UGUpdGhyb3cgbmV3IEVycm9yKCIiLmNvbmNhdCh0aGlzLnR5cGUsIiAnIikuY29uY2F0KHRoaXMuc291cmNlLCInOiBjYW4gbm90IHRyYW5zaXRpb24gdG8gJyIpLmNvbmNhdChtZSwiJywgZXhwZWN0aW5nIHN0YXRlICciKS5jb25jYXQoZ2UsIiciKS5jb25jYXQoUGU/IiBvciAnIitQZSsiJyI6IiIsIiwgd2FzICciKS5jb25jYXQodGhpcy5fc3RhdGUsIicuIikpO3RoaXMuX3N0YXRlPW1lLG1lPT1naSYmKHRoaXMuX3pvbmVEZWxlZ2F0ZXM9bnVsbCl9LGZ0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEmJnR5cGVvZiB0aGlzLmRhdGEuaGFuZGxlSWQ8InUiP3RoaXMuZGF0YS5oYW5kbGVJZC50b1N0cmluZygpOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0aGlzKX0sZnQucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOnRoaXMudHlwZSxzdGF0ZTp0aGlzLnN0YXRlLHNvdXJjZTp0aGlzLnNvdXJjZSx6b25lOnRoaXMuem9uZS5uYW1lLHJ1bkNvdW50OnRoaXMucnVuQ291bnR9fSxmdH0oKSxydD1YKCJzZXRUaW1lb3V0IiksZHQ9WCgiUHJvbWlzZSIpLFN0PVgoInRoZW4iKSxBdD1bXSxjbj0hMTtmdW5jdGlvbiB5aShmdCl7aWYocWl8fGpbZHRdJiYocWk9altkdF0ucmVzb2x2ZSgwKSkscWkpe3ZhciBtZT1xaVtTdF07bWV8fChtZT1xaS50aGVuKSxtZS5jYWxsKHFpLGZ0KX1lbHNlIGpbcnRdKGZ0LDApfWZ1bmN0aW9uIHBuKGZ0KXswPT09eXImJjA9PT1BdC5sZW5ndGgmJnlpKFJuKSxmdCYmQXQucHVzaChmdCl9ZnVuY3Rpb24gUm4oKXtpZighY24pe2Zvcihjbj0hMDtBdC5sZW5ndGg7KXt2YXIgZnQ9QXQ7QXQ9W107Zm9yKHZhciBtZT0wO21lPGZ0Lmxlbmd0aDttZSsrKXt2YXIgZ2U9ZnRbbWVdO3RyeXtnZS56b25lLnJ1blRhc2soZ2UsbnVsbCxudWxsKX1jYXRjaChQZSl7Y3Iub25VbmhhbmRsZWRFcnJvcihQZSl9fX1jci5taWNyb3Rhc2tEcmFpbkRvbmUoKSxjbj0hMX19dmFyIEV0PXtuYW1lOiJOTyBaT05FIn0sZ2k9Im5vdFNjaGVkdWxlZCIsdGk9InNjaGVkdWxpbmciLEhuPSJzY2hlZHVsZWQiLFFuPSJydW5uaW5nIix6dD0iY2FuY2VsaW5nIixCaT0idW5rbm93biIsX249Im1pY3JvVGFzayIsUG49Im1hY3JvVGFzayIsX2k9ImV2ZW50VGFzayIsT249e30sY3I9e3N5bWJvbDpYLGN1cnJlbnRab25lRnJhbWU6ZnVuY3Rpb24oKXtyZXR1cm4gaXJ9LG9uVW5oYW5kbGVkRXJyb3I6ZHIsbWljcm90YXNrRHJhaW5Eb25lOmRyLHNjaGVkdWxlTWljcm9UYXNrOnBuLHNob3dVbmNhdWdodEVycm9yOmZ1bmN0aW9uKCl7cmV0dXJuIWFlW1goImlnbm9yZUNvbnNvbGVFcnJvclVuY2F1Z2h0RXJyb3IiKV19LHBhdGNoRXZlbnRUYXJnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5bXX0scGF0Y2hPblByb3BlcnRpZXM6ZHIscGF0Y2hNZXRob2Q6ZnVuY3Rpb24oKXtyZXR1cm4gZHJ9LGJpbmRBcmd1bWVudHM6ZnVuY3Rpb24oKXtyZXR1cm5bXX0scGF0Y2hUaGVuOmZ1bmN0aW9uKCl7cmV0dXJuIGRyfSxwYXRjaE1hY3JvVGFzazpmdW5jdGlvbigpe3JldHVybiBkcn0scGF0Y2hFdmVudFByb3RvdHlwZTpmdW5jdGlvbigpe3JldHVybiBkcn0saXNJRU9yRWRnZTpmdW5jdGlvbigpe3JldHVybiExfSxnZXRHbG9iYWxPYmplY3RzOmZ1bmN0aW9uKCl7fSxPYmplY3REZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbigpe3JldHVybiBkcn0sT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOmZ1bmN0aW9uKCl7fSxPYmplY3RDcmVhdGU6ZnVuY3Rpb24oKXt9LEFycmF5U2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm5bXX0scGF0Y2hDbGFzczpmdW5jdGlvbigpe3JldHVybiBkcn0sd3JhcFdpdGhDdXJyZW50Wm9uZTpmdW5jdGlvbigpe3JldHVybiBkcn0sZmlsdGVyUHJvcGVydGllczpmdW5jdGlvbigpe3JldHVybltdfSxhdHRhY2hPcmlnaW5Ub1BhdGNoZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gZHJ9LF9yZWRlZmluZVByb3BlcnR5OmZ1bmN0aW9uKCl7cmV0dXJuIGRyfSxwYXRjaENhbGxiYWNrczpmdW5jdGlvbigpe3JldHVybiBkcn0sbmF0aXZlU2NoZWR1bGVNaWNyb1Rhc2s6eWl9LGlyPXtwYXJlbnQ6bnVsbCx6b25lOm5ldyBhZShudWxsLG51bGwpfSxTYT1udWxsLHlyPTA7ZnVuY3Rpb24gZHIoKXt9RSgiWm9uZSIsIlpvbmUiKSxqLlpvbmU9YWV9KHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3d8fHR5cGVvZiBzZWxmPCJ1IiYmc2VsZnx8Z2xvYmFsKTt2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLHQ9T2JqZWN0LmRlZmluZVByb3BlcnR5LGU9T2JqZWN0LmdldFByb3RvdHlwZU9mLGk9T2JqZWN0LmNyZWF0ZSxyPUFycmF5LnByb3RvdHlwZS5zbGljZSxvPSJhZGRFdmVudExpc3RlbmVyIixhPSJyZW1vdmVFdmVudExpc3RlbmVyIixzPVpvbmUuX19zeW1ib2xfXyhvKSxsPVpvbmUuX19zeW1ib2xfXyhhKSxjPSJ0cnVlIixkPSJmYWxzZSIsdT1ab25lLl9fc3ltYm9sX18oIiIpO2Z1bmN0aW9uIHAoaixKKXtyZXR1cm4gWm9uZS5jdXJyZW50LndyYXAoaixKKX1mdW5jdGlvbiBoKGosSixsZSxFLFYpe3JldHVybiBab25lLmN1cnJlbnQuc2NoZWR1bGVNYWNyb1Rhc2soaixKLGxlLEUsVil9dmFyIG09Wm9uZS5fX3N5bWJvbF9fLF89dHlwZW9mIHdpbmRvdzwidSIsTT1fP3dpbmRvdzp2b2lkIDAseT1fJiZNfHwib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGZ8fGdsb2JhbCx4PSJyZW1vdmVBdHRyaWJ1dGUiO2Z1bmN0aW9uIFIoaixKKXtmb3IodmFyIGxlPWoubGVuZ3RoLTE7bGU+PTA7bGUtLSkiZnVuY3Rpb24iPT10eXBlb2YgaltsZV0mJihqW2xlXT1wKGpbbGVdLEorIl8iK2xlKSk7cmV0dXJuIGp9ZnVuY3Rpb24gQihqKXtyZXR1cm4hanx8ITEhPT1qLndyaXRhYmxlJiYhKCJmdW5jdGlvbiI9PXR5cGVvZiBqLmdldCYmdHlwZW9mIGouc2V0PiJ1Iil9dmFyIGVlPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSxRPSEoIm53ImluIHkpJiZ0eXBlb2YgeS5wcm9jZXNzPCJ1IiYmIltvYmplY3QgcHJvY2Vzc10iPT09e30udG9TdHJpbmcuY2FsbCh5LnByb2Nlc3MpLHdlPSFRJiYhZWUmJiEoIV98fCFNLkhUTUxFbGVtZW50KSxRZT10eXBlb2YgeS5wcm9jZXNzPCJ1IiYmIltvYmplY3QgcHJvY2Vzc10iPT09e30udG9TdHJpbmcuY2FsbCh5LnByb2Nlc3MpJiYhZWUmJiEoIV98fCFNLkhUTUxFbGVtZW50KSxBZT17fSxEPWZ1bmN0aW9uKGope2lmKGo9anx8eS5ldmVudCl7dmFyIEo9QWVbai50eXBlXTtKfHwoSj1BZVtqLnR5cGVdPW0oIk9OX1BST1BFUlRZIitqLnR5cGUpKTt2YXIgVixsZT10aGlzfHxqLnRhcmdldHx8eSxFPWxlW0pdO3JldHVybiB3ZSYmbGU9PT1NJiYiZXJyb3IiPT09ai50eXBlPyEwPT09KFY9RSYmRS5jYWxsKHRoaXMsai5tZXNzYWdlLGouZmlsZW5hbWUsai5saW5lbm8sai5jb2xubyxqLmVycm9yKSkmJmoucHJldmVudERlZmF1bHQoKTpudWxsIT0oVj1FJiZFLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkmJiFWJiZqLnByZXZlbnREZWZhdWx0KCksVn19O2Z1bmN0aW9uIHJlKGosSixsZSl7dmFyIEU9bihqLEopO2lmKCFFJiZsZSYmbihsZSxKKSYmKEU9e2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksRSYmRS5jb25maWd1cmFibGUpe3ZhciBYPW0oIm9uIitKKyJwYXRjaGVkIik7aWYoIWouaGFzT3duUHJvcGVydHkoWCl8fCFqW1hdKXtkZWxldGUgRS53cml0YWJsZSxkZWxldGUgRS52YWx1ZTt2YXIgWj1FLmdldCxhZT1FLnNldCx6ZT1KLnNsaWNlKDIpLGV0PUFlW3plXTtldHx8KGV0PUFlW3plXT1tKCJPTl9QUk9QRVJUWSIremUpKSxFLnNldD1mdW5jdGlvbihxZSl7dmFyIHJ0PXRoaXM7IXJ0JiZqPT09eSYmKHJ0PXkpLHJ0JiYoImZ1bmN0aW9uIj09dHlwZW9mIHJ0W2V0XSYmcnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih6ZSxEKSxhZSYmYWUuY2FsbChydCxudWxsKSxydFtldF09cWUsImZ1bmN0aW9uIj09dHlwZW9mIHFlJiZydC5hZGRFdmVudExpc3RlbmVyKHplLEQsITEpKX0sRS5nZXQ9ZnVuY3Rpb24oKXt2YXIgcWU9dGhpcztpZighcWUmJmo9PT15JiYocWU9eSksIXFlKXJldHVybiBudWxsO3ZhciBydD1xZVtldF07aWYocnQpcmV0dXJuIHJ0O2lmKFope3ZhciBkdD1aLmNhbGwodGhpcyk7aWYoZHQpcmV0dXJuIEUuc2V0LmNhbGwodGhpcyxkdCksImZ1bmN0aW9uIj09dHlwZW9mIHFlW3hdJiZxZS5yZW1vdmVBdHRyaWJ1dGUoSiksZHR9cmV0dXJuIG51bGx9LHQoaixKLEUpLGpbWF09ITB9fX1mdW5jdGlvbiBjZShqLEosbGUpe2lmKEopZm9yKHZhciBFPTA7RTxKLmxlbmd0aDtFKyspcmUoaiwib24iK0pbRV0sbGUpO2Vsc2V7dmFyIFY9W107Zm9yKHZhciBYIGluIGopIm9uIj09WC5zbGljZSgwLDIpJiZWLnB1c2goWCk7Zm9yKHZhciBaPTA7WjxWLmxlbmd0aDtaKyspcmUoaixWW1pdLGxlKX19dmFyIGhlPW0oIm9yaWdpbmFsSW5zdGFuY2UiKTtmdW5jdGlvbiBfZShqKXt2YXIgSj15W2pdO2lmKEope3lbbShqKV09Six5W2pdPWZ1bmN0aW9uKCl7dmFyIFY9Uihhcmd1bWVudHMsaik7c3dpdGNoKFYubGVuZ3RoKXtjYXNlIDA6dGhpc1toZV09bmV3IEo7YnJlYWs7Y2FzZSAxOnRoaXNbaGVdPW5ldyBKKFZbMF0pO2JyZWFrO2Nhc2UgMjp0aGlzW2hlXT1uZXcgSihWWzBdLFZbMV0pO2JyZWFrO2Nhc2UgMzp0aGlzW2hlXT1uZXcgSihWWzBdLFZbMV0sVlsyXSk7YnJlYWs7Y2FzZSA0OnRoaXNbaGVdPW5ldyBKKFZbMF0sVlsxXSxWWzJdLFZbM10pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJBcmcgbGlzdCB0b28gbG9uZy4iKX19LHBlKHlbal0sSik7dmFyIEUsbGU9bmV3IEooZnVuY3Rpb24oKXt9KTtmb3IoRSBpbiBsZSkiWE1MSHR0cFJlcXVlc3QiPT09aiYmInJlc3BvbnNlQmxvYiI9PT1FfHxmdW5jdGlvbihWKXsiZnVuY3Rpb24iPT10eXBlb2YgbGVbVl0/eVtqXS5wcm90b3R5cGVbVl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1toZV1bVl0uYXBwbHkodGhpc1toZV0sYXJndW1lbnRzKX06dCh5W2pdLnByb3RvdHlwZSxWLHtzZXQ6ZnVuY3Rpb24oWCl7ImZ1bmN0aW9uIj09dHlwZW9mIFg/KHRoaXNbaGVdW1ZdPXAoWCxqKyIuIitWKSxwZSh0aGlzW2hlXVtWXSxYKSk6dGhpc1toZV1bVl09WH0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbaGVdW1ZdfX0pfShFKTtmb3IoRSBpbiBKKSJwcm90b3R5cGUiIT09RSYmSi5oYXNPd25Qcm9wZXJ0eShFKSYmKHlbal1bRV09SltFXSl9fWZ1bmN0aW9uICQoaixKLGxlKXtmb3IodmFyIEU9ajtFJiYhRS5oYXNPd25Qcm9wZXJ0eShKKTspRT1lKEUpOyFFJiZqW0pdJiYoRT1qKTt2YXIgVj1tKEopLFg9bnVsbDtpZihFJiYoIShYPUVbVl0pfHwhRS5oYXNPd25Qcm9wZXJ0eShWKSkmJihYPUVbVl09RVtKXSxCKEUmJm4oRSxKKSkpKXt2YXIgYWU9bGUoWCxWLEopO0VbSl09ZnVuY3Rpb24oKXtyZXR1cm4gYWUodGhpcyxhcmd1bWVudHMpfSxwZShFW0pdLFgpfXJldHVybiBYfWZ1bmN0aW9uIGRlKGosSixsZSl7dmFyIEU9bnVsbDtmdW5jdGlvbiBWKFgpe3ZhciBaPVguZGF0YTtyZXR1cm4gWi5hcmdzW1ouY2JJZHhdPWZ1bmN0aW9uKCl7WC5pbnZva2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxFLmFwcGx5KFoudGFyZ2V0LFouYXJncyksWH1FPSQoaixKLGZ1bmN0aW9uKFgpe3JldHVybiBmdW5jdGlvbihaLGFlKXt2YXIgemU9bGUoWixhZSk7cmV0dXJuIHplLmNiSWR4Pj0wJiYiZnVuY3Rpb24iPT10eXBlb2YgYWVbemUuY2JJZHhdP2goemUubmFtZSxhZVt6ZS5jYklkeF0semUsVik6WC5hcHBseShaLGFlKX19KX1mdW5jdGlvbiBwZShqLEope2pbbSgiT3JpZ2luYWxEZWxlZ2F0ZSIpXT1KfXZhciBHZT0hMSxTZT0hMTtmdW5jdGlvbiBsdCgpe2lmKEdlKXJldHVybiBTZTtHZT0hMDt0cnl7dmFyIGo9TS5uYXZpZ2F0b3IudXNlckFnZW50OygtMSE9PWouaW5kZXhPZigiTVNJRSAiKXx8LTEhPT1qLmluZGV4T2YoIlRyaWRlbnQvIil8fC0xIT09ai5pbmRleE9mKCJFZGdlLyIpKSYmKFNlPSEwKX1jYXRjaHt9cmV0dXJuIFNlfVpvbmUuX19sb2FkX3BhdGNoKCJab25lQXdhcmVQcm9taXNlIixmdW5jdGlvbihqLEosbGUpe3ZhciBFPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsVj1PYmplY3QuZGVmaW5lUHJvcGVydHksWj1sZS5zeW1ib2wsYWU9W10semU9ITA9PT1qW1ooIkRJU0FCTEVfV1JBUFBJTkdfVU5DQVVHSFRfUFJPTUlTRV9SRUpFQ1RJT04iKV0sZXQ9WigiUHJvbWlzZSIpLHFlPVooInRoZW4iKSxydD0iX19jcmVhdGlvblRyYWNlX18iO2xlLm9uVW5oYW5kbGVkRXJyb3I9ZnVuY3Rpb24odHQpe2lmKGxlLnNob3dVbmNhdWdodEVycm9yKCkpe3ZhciBQdD10dCYmdHQucmVqZWN0aW9uO1B0P2NvbnNvbGUuZXJyb3IoIlVuaGFuZGxlZCBQcm9taXNlIHJlamVjdGlvbjoiLFB0IGluc3RhbmNlb2YgRXJyb3I/UHQubWVzc2FnZTpQdCwiOyBab25lOiIsdHQuem9uZS5uYW1lLCI7IFRhc2s6Iix0dC50YXNrJiZ0dC50YXNrLnNvdXJjZSwiOyBWYWx1ZToiLFB0LFB0IGluc3RhbmNlb2YgRXJyb3I/UHQuc3RhY2s6dm9pZCAwKTpjb25zb2xlLmVycm9yKHR0KX19LGxlLm1pY3JvdGFza0RyYWluRG9uZT1mdW5jdGlvbigpe2Zvcih2YXIgdHQ9ZnVuY3Rpb24oKXt2YXIgUHQ9YWUuc2hpZnQoKTt0cnl7UHQuem9uZS5ydW5HdWFyZGVkKGZ1bmN0aW9uKCl7dGhyb3cgUHQudGhyb3dPcmlnaW5hbD9QdC5yZWplY3Rpb246UHR9KX1jYXRjaChDdCl7IWZ1bmN0aW9uKHR0KXtsZS5vblVuaGFuZGxlZEVycm9yKHR0KTt0cnl7dmFyIFB0PUpbZHRdOyJmdW5jdGlvbiI9PXR5cGVvZiBQdCYmUHQuY2FsbCh0aGlzLHR0KX1jYXRjaHt9fShDdCl9fTthZS5sZW5ndGg7KXR0KCl9O3ZhciBkdD1aKCJ1bmhhbmRsZWRQcm9taXNlUmVqZWN0aW9uSGFuZGxlciIpO2Z1bmN0aW9uIEF0KHR0KXtyZXR1cm4gdHQmJnR0LnRoZW59ZnVuY3Rpb24gY24odHQpe3JldHVybiB0dH1mdW5jdGlvbiBxaSh0dCl7cmV0dXJuIGdlLnJlamVjdCh0dCl9dmFyIHlpPVooInN0YXRlIikscG49WigidmFsdWUiKSxSbj1aKCJmaW5hbGx5IiksRXQ9WigicGFyZW50UHJvbWlzZVZhbHVlIiksZ2k9WigicGFyZW50UHJvbWlzZVN0YXRlIiksdGk9IlByb21pc2UudGhlbiIsSG49bnVsbCxRbj0hMCx6dD0hMSxCaT0wO2Z1bmN0aW9uIF9uKHR0LFB0KXtyZXR1cm4gZnVuY3Rpb24oQ3Qpe3RyeXtjcih0dCxQdCxDdCl9Y2F0Y2goSmUpe2NyKHR0LCExLEplKX19fXZhciBQbj1mdW5jdGlvbigpe3ZhciB0dD0hMTtyZXR1cm4gZnVuY3Rpb24oQ3Qpe3JldHVybiBmdW5jdGlvbigpe3R0fHwodHQ9ITAsQ3QuYXBwbHkobnVsbCxhcmd1bWVudHMpKX19fSxfaT0iUHJvbWlzZSByZXNvbHZlZCB3aXRoIGl0c2VsZiIsT249WigiY3VycmVudFRhc2tUcmFjZSIpO2Z1bmN0aW9uIGNyKHR0LFB0LEN0KXt2YXIgSmU9UG4oKTtpZih0dD09PUN0KXRocm93IG5ldyBUeXBlRXJyb3IoX2kpO2lmKHR0W3lpXT09PUhuKXt2YXIgWnQ9bnVsbDt0cnl7KCJvYmplY3QiPT10eXBlb2YgQ3R8fCJmdW5jdGlvbiI9PXR5cGVvZiBDdCkmJihadD1DdCYmQ3QudGhlbil9Y2F0Y2gobGkpe3JldHVybiBKZShmdW5jdGlvbigpe2NyKHR0LCExLGxpKX0pKCksdHR9aWYoUHQhPT16dCYmQ3QgaW5zdGFuY2VvZiBnZSYmQ3QuaGFzT3duUHJvcGVydHkoeWkpJiZDdC5oYXNPd25Qcm9wZXJ0eShwbikmJkN0W3lpXSE9PUhuKVNhKEN0KSxjcih0dCxDdFt5aV0sQ3RbcG5dKTtlbHNlIGlmKFB0IT09enQmJiJmdW5jdGlvbiI9PXR5cGVvZiBadCl0cnl7WnQuY2FsbChDdCxKZShfbih0dCxQdCkpLEplKF9uKHR0LCExKSkpfWNhdGNoKGxpKXtKZShmdW5jdGlvbigpe2NyKHR0LCExLGxpKX0pKCl9ZWxzZXt0dFt5aV09UHQ7dmFyIExuPXR0W3BuXTtpZih0dFtwbl09Q3QsdHRbUm5dPT09Um4mJlB0PT09UW4mJih0dFt5aV09dHRbZ2ldLHR0W3BuXT10dFtFdF0pLFB0PT09enQmJkN0IGluc3RhbmNlb2YgRXJyb3Ipe3ZhciBEbj1KLmN1cnJlbnRUYXNrJiZKLmN1cnJlbnRUYXNrLmRhdGEmJkouY3VycmVudFRhc2suZGF0YVtydF07RG4mJlYoQ3QsT24se2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLHZhbHVlOkRufSl9Zm9yKHZhciBuaT0wO25pPExuLmxlbmd0aDspeXIodHQsTG5bbmkrK10sTG5bbmkrK10sTG5bbmkrK10sTG5bbmkrK10pO2lmKDA9PUxuLmxlbmd0aCYmUHQ9PXp0KXt0dFt5aV09Qmk7dmFyIGlpPUN0O3RyeXt0aHJvdyBuZXcgRXJyb3IoIlVuY2F1Z2h0IChpbiBwcm9taXNlKTogIitmdW5jdGlvbih0dCl7cmV0dXJuIHR0JiZ0dC50b1N0cmluZz09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc/KHR0LmNvbnN0cnVjdG9yJiZ0dC5jb25zdHJ1Y3Rvci5uYW1lfHwiIikrIjogIitKU09OLnN0cmluZ2lmeSh0dCk6dHQ/dHQudG9TdHJpbmcoKTpPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodHQpfShDdCkrKEN0JiZDdC5zdGFjaz8iXG4iK0N0LnN0YWNrOiIiKSl9Y2F0Y2gobGkpe2lpPWxpfXplJiYoaWkudGhyb3dPcmlnaW5hbD0hMCksaWkucmVqZWN0aW9uPUN0LGlpLnByb21pc2U9dHQsaWkuem9uZT1KLmN1cnJlbnQsaWkudGFzaz1KLmN1cnJlbnRUYXNrLGFlLnB1c2goaWkpLGxlLnNjaGVkdWxlTWljcm9UYXNrKCl9fX1yZXR1cm4gdHR9dmFyIGlyPVooInJlamVjdGlvbkhhbmRsZWRIYW5kbGVyIik7ZnVuY3Rpb24gU2EodHQpe2lmKHR0W3lpXT09PUJpKXt0cnl7dmFyIFB0PUpbaXJdO1B0JiYiZnVuY3Rpb24iPT10eXBlb2YgUHQmJlB0LmNhbGwodGhpcyx7cmVqZWN0aW9uOnR0W3BuXSxwcm9taXNlOnR0fSl9Y2F0Y2h7fXR0W3lpXT16dDtmb3IodmFyIEN0PTA7Q3Q8YWUubGVuZ3RoO0N0KyspdHQ9PT1hZVtDdF0ucHJvbWlzZSYmYWUuc3BsaWNlKEN0LDEpfX1mdW5jdGlvbiB5cih0dCxQdCxDdCxKZSxadCl7U2EodHQpO3ZhciBMbj10dFt5aV0sRG49TG4/ImZ1bmN0aW9uIj09dHlwZW9mIEplP0plOmNuOiJmdW5jdGlvbiI9PXR5cGVvZiBadD9adDpxaTtQdC5zY2hlZHVsZU1pY3JvVGFzayh0aSxmdW5jdGlvbigpe3RyeXt2YXIgbmk9dHRbcG5dLGlpPSEhQ3QmJlJuPT09Q3RbUm5dO2lpJiYoQ3RbRXRdPW5pLEN0W2dpXT1Mbik7dmFyIGxpPVB0LnJ1bihEbix2b2lkIDAsaWkmJkRuIT09cWkmJkRuIT09Y24/W106W25pXSk7Y3IoQ3QsITAsbGkpfWNhdGNoKHhpKXtjcihDdCwhMSx4aSl9fSxDdCl9dmFyIGZ0PWZ1bmN0aW9uKCl7fSxtZT1qLkFnZ3JlZ2F0ZUVycm9yLGdlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdHQoUHQpe3ZhciBDdD10aGlzO2lmKCEoQ3QgaW5zdGFuY2VvZiB0dCkpdGhyb3cgbmV3IEVycm9yKCJNdXN0IGJlIGFuIGluc3RhbmNlb2YgUHJvbWlzZS4iKTtDdFt5aV09SG4sQ3RbcG5dPVtdO3RyeXt2YXIgSmU9UG4oKTtQdCYmUHQoSmUoX24oQ3QsUW4pKSxKZShfbihDdCx6dCkpKX1jYXRjaChadCl7Y3IoQ3QsITEsWnQpfX1yZXR1cm4gdHQudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iZnVuY3Rpb24gWm9uZUF3YXJlUHJvbWlzZSgpIHsgW25hdGl2ZSBjb2RlXSB9In0sdHQucmVzb2x2ZT1mdW5jdGlvbihQdCl7cmV0dXJuIGNyKG5ldyB0aGlzKG51bGwpLFFuLFB0KX0sdHQucmVqZWN0PWZ1bmN0aW9uKFB0KXtyZXR1cm4gY3IobmV3IHRoaXMobnVsbCksenQsUHQpfSx0dC5hbnk9ZnVuY3Rpb24oUHQpe2lmKCFQdHx8ImZ1bmN0aW9uIiE9dHlwZW9mIFB0W1N5bWJvbC5pdGVyYXRvcl0pcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBtZShbXSwiQWxsIHByb21pc2VzIHdlcmUgcmVqZWN0ZWQiKSk7dmFyIEN0PVtdLEplPTA7dHJ5e2Zvcih2YXIgWnQ9MCxMbj1QdDtadDxMbi5sZW5ndGg7WnQrKylKZSsrLEN0LnB1c2godHQucmVzb2x2ZShMbltadF0pKX1jYXRjaHtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IG1lKFtdLCJBbGwgcHJvbWlzZXMgd2VyZSByZWplY3RlZCIpKX1pZigwPT09SmUpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBtZShbXSwiQWxsIHByb21pc2VzIHdlcmUgcmVqZWN0ZWQiKSk7dmFyIG5pPSExLGlpPVtdO3JldHVybiBuZXcgdHQoZnVuY3Rpb24obGkseGkpe2Zvcih2YXIgcHI9MDtwcjxDdC5sZW5ndGg7cHIrKylDdFtwcl0udGhlbihmdW5jdGlvbihObyl7bml8fChuaT0hMCxsaShObykpfSxmdW5jdGlvbihObyl7aWkucHVzaChObyksMD09LS1KZSYmKG5pPSEwLHhpKG5ldyBtZShpaSwiQWxsIHByb21pc2VzIHdlcmUgcmVqZWN0ZWQiKSkpfSl9KX0sdHQucmFjZT1mdW5jdGlvbihQdCl7dmFyIEN0LEplLFp0PW5ldyB0aGlzKGZ1bmN0aW9uKHhpLHByKXtDdD14aSxKZT1wcn0pO2Z1bmN0aW9uIExuKHhpKXtDdCh4aSl9ZnVuY3Rpb24gRG4oeGkpe0plKHhpKX1mb3IodmFyIG5pPTAsaWk9UHQ7bmk8aWkubGVuZ3RoO25pKyspe3ZhciBsaT1paVtuaV07QXQobGkpfHwobGk9dGhpcy5yZXNvbHZlKGxpKSksbGkudGhlbihMbixEbil9cmV0dXJuIFp0fSx0dC5hbGw9ZnVuY3Rpb24oUHQpe3JldHVybiB0dC5hbGxXaXRoQ2FsbGJhY2soUHQpfSx0dC5hbGxTZXR0bGVkPWZ1bmN0aW9uKFB0KXtyZXR1cm4odGhpcyYmdGhpcy5wcm90b3R5cGUgaW5zdGFuY2VvZiB0dD90aGlzOnR0KS5hbGxXaXRoQ2FsbGJhY2soUHQse3RoZW5DYWxsYmFjazpmdW5jdGlvbihKZSl7cmV0dXJue3N0YXR1czoiZnVsZmlsbGVkIix2YWx1ZTpKZX19LGVycm9yQ2FsbGJhY2s6ZnVuY3Rpb24oSmUpe3JldHVybntzdGF0dXM6InJlamVjdGVkIixyZWFzb246SmV9fX0pfSx0dC5hbGxXaXRoQ2FsbGJhY2s9ZnVuY3Rpb24oUHQsQ3Qpe2Zvcih2YXIgSmUsWnQsTG49bmV3IHRoaXMoZnVuY3Rpb24oWnIseG8pe0plPVpyLFp0PXhvfSksRG49MixuaT0wLGlpPVtdLGxpPWZ1bmN0aW9uKFpyKXtBdChacil8fChacj14aS5yZXNvbHZlKFpyKSk7dmFyIHhvPW5pO3RyeXtaci50aGVuKGZ1bmN0aW9uKEhyKXtpaVt4b109Q3Q/Q3QudGhlbkNhbGxiYWNrKEhyKTpIciwwPT0tLURuJiZKZShpaSl9LGZ1bmN0aW9uKEhyKXtDdD8oaWlbeG9dPUN0LmVycm9yQ2FsbGJhY2soSHIpLDA9PS0tRG4mJkplKGlpKSk6WnQoSHIpfSl9Y2F0Y2goSHIpe1p0KEhyKX1EbisrLG5pKyt9LHhpPXRoaXMscHI9MCxObz1QdDtwcjxOby5sZW5ndGg7cHIrKylsaShOb1twcl0pO3JldHVybiAwPT0oRG4tPTIpJiZKZShpaSksTG59LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0dC5wcm90b3R5cGUsU3ltYm9sLnRvU3RyaW5nVGFnLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4iUHJvbWlzZSJ9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHR0LnByb3RvdHlwZSxTeW1ib2wuc3BlY2llcyx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHR0fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHR0LnByb3RvdHlwZS50aGVuPWZ1bmN0aW9uKFB0LEN0KXt2YXIgSmUsWnQ9bnVsbD09PShKZT10aGlzLmNvbnN0cnVjdG9yKXx8dm9pZCAwPT09SmU/dm9pZCAwOkplW1N5bWJvbC5zcGVjaWVzXTsoIVp0fHwiZnVuY3Rpb24iIT10eXBlb2YgWnQpJiYoWnQ9dGhpcy5jb25zdHJ1Y3Rvcnx8dHQpO3ZhciBMbj1uZXcgWnQoZnQpLERuPUouY3VycmVudDtyZXR1cm4gdGhpc1t5aV09PUhuP3RoaXNbcG5dLnB1c2goRG4sTG4sUHQsQ3QpOnlyKHRoaXMsRG4sTG4sUHQsQ3QpLExufSx0dC5wcm90b3R5cGUuY2F0Y2g9ZnVuY3Rpb24oUHQpe3JldHVybiB0aGlzLnRoZW4obnVsbCxQdCl9LHR0LnByb3RvdHlwZS5maW5hbGx5PWZ1bmN0aW9uKFB0KXt2YXIgQ3QsSmU9bnVsbD09PShDdD10aGlzLmNvbnN0cnVjdG9yKXx8dm9pZCAwPT09Q3Q/dm9pZCAwOkN0W1N5bWJvbC5zcGVjaWVzXTsoIUplfHwiZnVuY3Rpb24iIT10eXBlb2YgSmUpJiYoSmU9dHQpO3ZhciBadD1uZXcgSmUoZnQpO1p0W1JuXT1Sbjt2YXIgTG49Si5jdXJyZW50O3JldHVybiB0aGlzW3lpXT09SG4/dGhpc1twbl0ucHVzaChMbixadCxQdCxQdCk6eXIodGhpcyxMbixadCxQdCxQdCksWnR9LHR0fSgpO2dlLnJlc29sdmU9Z2UucmVzb2x2ZSxnZS5yZWplY3Q9Z2UucmVqZWN0LGdlLnJhY2U9Z2UucmFjZSxnZS5hbGw9Z2UuYWxsO3ZhciBQZT1qW2V0XT1qLlByb21pc2U7ai5Qcm9taXNlPWdlO3ZhciBNbj1aKCJ0aGVuUGF0Y2hlZCIpO2Z1bmN0aW9uIHVyKHR0KXt2YXIgUHQ9dHQucHJvdG90eXBlLEN0PUUoUHQsInRoZW4iKTtpZighQ3R8fCExIT09Q3Qud3JpdGFibGUmJkN0LmNvbmZpZ3VyYWJsZSl7dmFyIEplPVB0LnRoZW47UHRbcWVdPUplLHR0LnByb3RvdHlwZS50aGVuPWZ1bmN0aW9uKFp0LExuKXt2YXIgRG49dGhpcztyZXR1cm4gbmV3IGdlKGZ1bmN0aW9uKGlpLGxpKXtKZS5jYWxsKERuLGlpLGxpKX0pLnRoZW4oWnQsTG4pfSx0dFtNbl09ITB9fXJldHVybiBsZS5wYXRjaFRoZW49dXIsUGUmJih1cihQZSksJChqLCJmZXRjaCIsZnVuY3Rpb24odHQpe3JldHVybiBmdW5jdGlvbih0dCl7cmV0dXJuIGZ1bmN0aW9uKFB0LEN0KXt2YXIgSmU9dHQuYXBwbHkoUHQsQ3QpO2lmKEplIGluc3RhbmNlb2YgZ2UpcmV0dXJuIEplO3ZhciBadD1KZS5jb25zdHJ1Y3RvcjtyZXR1cm4gWnRbTW5dfHx1cihadCksSmV9fSh0dCl9KSksUHJvbWlzZVtKLl9fc3ltYm9sX18oInVuY2F1Z2h0UHJvbWlzZUVycm9ycyIpXT1hZSxnZX0pLFpvbmUuX19sb2FkX3BhdGNoKCJ0b1N0cmluZyIsZnVuY3Rpb24oail7dmFyIEo9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLGxlPW0oIk9yaWdpbmFsRGVsZWdhdGUiKSxFPW0oIlByb21pc2UiKSxWPW0oIkVycm9yIiksWD1mdW5jdGlvbigpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzKXt2YXIgZXQ9dGhpc1tsZV07aWYoZXQpcmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGV0P0ouY2FsbChldCk6T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGV0KTtpZih0aGlzPT09UHJvbWlzZSl7dmFyIHFlPWpbRV07aWYocWUpcmV0dXJuIEouY2FsbChxZSl9aWYodGhpcz09PUVycm9yKXt2YXIgcnQ9altWXTtpZihydClyZXR1cm4gSi5jYWxsKHJ0KX19cmV0dXJuIEouY2FsbCh0aGlzKX07WFtsZV09SixGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc9WDt2YXIgWj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO09iamVjdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgUHJvbWlzZSYmdGhpcyBpbnN0YW5jZW9mIFByb21pc2U/IltvYmplY3QgUHJvbWlzZV0iOlouY2FsbCh0aGlzKX19KTt2YXIgTXQ9ITE7aWYodHlwZW9mIHdpbmRvdzwidSIpdHJ5e3ZhciBwdD1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sInBhc3NpdmUiLHtnZXQ6ZnVuY3Rpb24oKXtNdD0hMH19KTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIscHQscHQpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0ZXN0IixwdCxwdCl9Y2F0Y2h7TXQ9ITF9dmFyIHNpLE5pLExpLFksTCxrZT17dXNlRzohMH0sVG49e30sd3Q9e30sb249bmV3IFJlZ0V4cCgiXiIrdSsiKFxcdyspKHRydWV8ZmFsc2UpJCIpLENlPW0oInByb3BhZ2F0aW9uU3RvcHBlZCIpO2Z1bmN0aW9uIG10KGosSil7dmFyIGxlPShKP0ooaik6aikrZCxFPShKP0ooaik6aikrYyxWPXUrbGUsWD11K0U7VG5bal09e30sVG5bal1bZF09VixUbltqXVtjXT1YfWZ1bmN0aW9uIGh0KGosSixsZSxFKXt2YXIgVj1FJiZFLmFkZHx8byxYPUUmJkUucm18fGEsWj1FJiZFLmxpc3RlbmVyc3x8ImV2ZW50TGlzdGVuZXJzIixhZT1FJiZFLnJtQWxsfHwicmVtb3ZlQWxsTGlzdGVuZXJzIix6ZT1tKFYpLGV0PSIuIitWKyI6IixxZT0icHJlcGVuZExpc3RlbmVyIixydD0iLiIrcWUrIjoiLGR0PWZ1bmN0aW9uKFJuLEV0LGdpKXtpZighUm4uaXNSZW1vdmVkKXt2YXIgSG4sdGk9Um4uY2FsbGJhY2s7Im9iamVjdCI9PXR5cGVvZiB0aSYmdGkuaGFuZGxlRXZlbnQmJihSbi5jYWxsYmFjaz1mdW5jdGlvbihCaSl7cmV0dXJuIHRpLmhhbmRsZUV2ZW50KEJpKX0sUm4ub3JpZ2luYWxEZWxlZ2F0ZT10aSk7dHJ5e1JuLmludm9rZShSbixFdCxbZ2ldKX1jYXRjaChCaSl7SG49Qml9dmFyIFFuPVJuLm9wdGlvbnM7cmV0dXJuIFFuJiYib2JqZWN0Ij09dHlwZW9mIFFuJiZRbi5vbmNlJiZFdFtYXS5jYWxsKEV0LGdpLnR5cGUsUm4ub3JpZ2luYWxEZWxlZ2F0ZT9Sbi5vcmlnaW5hbERlbGVnYXRlOlJuLmNhbGxiYWNrLFFuKSxIbn19O2Z1bmN0aW9uIFN0KFJuLEV0LGdpKXtpZihFdD1FdHx8ai5ldmVudCl7dmFyIHRpPVJufHxFdC50YXJnZXR8fGosSG49dGlbVG5bRXQudHlwZV1bZ2k/YzpkXV07aWYoSG4pe3ZhciBRbj1bXTtpZigxPT09SG4ubGVuZ3RoKSh6dD1kdChIblswXSx0aSxFdCkpJiZRbi5wdXNoKHp0KTtlbHNlIGZvcih2YXIgQmk9SG4uc2xpY2UoKSxfbj0wO19uPEJpLmxlbmd0aCYmKCFFdHx8ITAhPT1FdFtDZV0pO19uKyspe3ZhciB6dDsoenQ9ZHQoQmlbX25dLHRpLEV0KSkmJlFuLnB1c2goenQpfWlmKDE9PT1Rbi5sZW5ndGgpdGhyb3cgUW5bMF07dmFyIFBuPWZ1bmN0aW9uKF9pKXt2YXIgT249UW5bX2ldO0oubmF0aXZlU2NoZWR1bGVNaWNyb1Rhc2soZnVuY3Rpb24oKXt0aHJvdyBPbn0pfTtmb3IoX249MDtfbjxRbi5sZW5ndGg7X24rKylQbihfbil9fX12YXIgQXQ9ZnVuY3Rpb24oUm4pe3JldHVybiBTdCh0aGlzLFJuLCExKX0sY249ZnVuY3Rpb24oUm4pe3JldHVybiBTdCh0aGlzLFJuLCEwKX07ZnVuY3Rpb24gcWkoUm4sRXQpe2lmKCFSbilyZXR1cm4hMTt2YXIgZ2k9ITA7RXQmJnZvaWQgMCE9PUV0LnVzZUcmJihnaT1FdC51c2VHKTt2YXIgdGk9RXQmJkV0LnZoLEhuPSEwO0V0JiZ2b2lkIDAhPT1FdC5jaGtEdXAmJihIbj1FdC5jaGtEdXApO3ZhciBRbj0hMTtFdCYmdm9pZCAwIT09RXQucnQmJihRbj1FdC5ydCk7Zm9yKHZhciB6dD1Sbjt6dCYmIXp0Lmhhc093blByb3BlcnR5KFYpOyl6dD1lKHp0KTtpZighenQmJlJuW1ZdJiYoenQ9Um4pLCF6dHx8enRbemVdKXJldHVybiExO3ZhciBpcixCaT1FdCYmRXQuZXZlbnROYW1lVG9TdHJpbmcsX249e30sUG49enRbemVdPXp0W1ZdLF9pPXp0W20oWCldPXp0W1hdLE9uPXp0W20oWildPXp0W1pdLGNyPXp0W20oYWUpXT16dFthZV07RXQmJkV0LnByZXBlbmQmJihpcj16dFttKEV0LnByZXBlbmQpXT16dFtFdC5wcmVwZW5kXSk7dmFyIFBlPWdpP2Z1bmN0aW9uKEplKXtpZighX24uaXNFeGlzdGluZylyZXR1cm4gUG4uY2FsbChfbi50YXJnZXQsX24uZXZlbnROYW1lLF9uLmNhcHR1cmU/Y246QXQsX24ub3B0aW9ucyl9OmZ1bmN0aW9uKEplKXtyZXR1cm4gUG4uY2FsbChfbi50YXJnZXQsX24uZXZlbnROYW1lLEplLmludm9rZSxfbi5vcHRpb25zKX0sTW49Z2k/ZnVuY3Rpb24oSmUpe2lmKCFKZS5pc1JlbW92ZWQpe3ZhciBadD1UbltKZS5ldmVudE5hbWVdLExuPXZvaWQgMDtadCYmKExuPVp0W0plLmNhcHR1cmU/YzpkXSk7dmFyIERuPUxuJiZKZS50YXJnZXRbTG5dO2lmKERuKWZvcih2YXIgbmk9MDtuaTxEbi5sZW5ndGg7bmkrKylpZihEbltuaV09PT1KZSl7RG4uc3BsaWNlKG5pLDEpLEplLmlzUmVtb3ZlZD0hMCwwPT09RG4ubGVuZ3RoJiYoSmUuYWxsUmVtb3ZlZD0hMCxKZS50YXJnZXRbTG5dPW51bGwpO2JyZWFrfX1pZihKZS5hbGxSZW1vdmVkKXJldHVybiBfaS5jYWxsKEplLnRhcmdldCxKZS5ldmVudE5hbWUsSmUuY2FwdHVyZT9jbjpBdCxKZS5vcHRpb25zKX06ZnVuY3Rpb24oSmUpe3JldHVybiBfaS5jYWxsKEplLnRhcmdldCxKZS5ldmVudE5hbWUsSmUuaW52b2tlLEplLm9wdGlvbnMpfSxobD1FdCYmRXQuZGlmZj9FdC5kaWZmOmZ1bmN0aW9uKEplLFp0KXt2YXIgTG49dHlwZW9mIFp0O3JldHVybiJmdW5jdGlvbiI9PT1MbiYmSmUuY2FsbGJhY2s9PT1adHx8Im9iamVjdCI9PT1MbiYmSmUub3JpZ2luYWxEZWxlZ2F0ZT09PVp0fSx0dD1ab25lW20oIlVOUEFUQ0hFRF9FVkVOVFMiKV0sUHQ9alttKCJQQVNTSVZFX0VWRU5UUyIpXSxDdD1mdW5jdGlvbihKZSxadCxMbixEbixuaSxpaSl7cmV0dXJuIHZvaWQgMD09PW5pJiYobmk9ITEpLHZvaWQgMD09PWlpJiYoaWk9ITEpLGZ1bmN0aW9uKCl7dmFyIGxpPXRoaXN8fGoseGk9YXJndW1lbnRzWzBdO0V0JiZFdC50cmFuc2ZlckV2ZW50TmFtZSYmKHhpPUV0LnRyYW5zZmVyRXZlbnROYW1lKHhpKSk7dmFyIHByPWFyZ3VtZW50c1sxXTtpZighcHIpcmV0dXJuIEplLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZihRJiYidW5jYXVnaHRFeGNlcHRpb24iPT09eGkpcmV0dXJuIEplLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgTm89ITE7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHByKXtpZighcHIuaGFuZGxlRXZlbnQpcmV0dXJuIEplLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtObz0hMH1pZighdGl8fHRpKEplLHByLGxpLGFyZ3VtZW50cykpe3ZhciBZYz1NdCYmISFQdCYmLTEhPT1QdC5pbmRleE9mKHhpKSxacj1mdW5jdGlvbihKZSxadCl7cmV0dXJuIU10JiYib2JqZWN0Ij09dHlwZW9mIEplJiZKZT8hIUplLmNhcHR1cmU6TXQmJlp0PyJib29sZWFuIj09dHlwZW9mIEplP3tjYXB0dXJlOkplLHBhc3NpdmU6ITB9OkplPyJvYmplY3QiPT10eXBlb2YgSmUmJiExIT09SmUucGFzc2l2ZT9PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sSmUpLHtwYXNzaXZlOiEwfSk6SmU6e3Bhc3NpdmU6ITB9OkplfShhcmd1bWVudHNbMl0sWWMpO2lmKHR0KWZvcih2YXIgeG89MDt4bzx0dC5sZW5ndGg7eG8rKylpZih4aT09PXR0W3hvXSlyZXR1cm4gWWM/SmUuY2FsbChsaSx4aSxwcixacik6SmUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBIcj0hIVpyJiYoImJvb2xlYW4iPT10eXBlb2YgWnJ8fFpyLmNhcHR1cmUpLEltPSEoIVpyfHwib2JqZWN0IiE9dHlwZW9mIFpyKSYmWnIub25jZSxXaWU9Wm9uZS5jdXJyZW50LE9BPVRuW3hpXTtPQXx8KG10KHhpLEJpKSxPQT1Ublt4aV0pO3ZhciBZVj1PQVtIcj9jOmRdLEFtPWxpW1lWXSxRVj0hMTtpZihBbSl7aWYoUVY9ITAsSG4pZm9yKHhvPTA7eG88QW0ubGVuZ3RoO3hvKyspaWYoaGwoQW1beG9dLHByKSlyZXR1cm59ZWxzZSBBbT1saVtZVl09W107dmFyIG5DLFpWPWxpLmNvbnN0cnVjdG9yLm5hbWUsS1Y9d3RbWlZdO0tWJiYobkM9S1ZbeGldKSxuQ3x8KG5DPVpWK1p0KyhCaT9CaSh4aSk6eGkpKSxfbi5vcHRpb25zPVpyLEltJiYoX24ub3B0aW9ucy5vbmNlPSExKSxfbi50YXJnZXQ9bGksX24uY2FwdHVyZT1Icixfbi5ldmVudE5hbWU9eGksX24uaXNFeGlzdGluZz1RVjt2YXIgRV89Z2k/a2U6dm9pZCAwO0VfJiYoRV8udGFza0RhdGE9X24pO3ZhciBZZD1XaWUuc2NoZWR1bGVFdmVudFRhc2sobkMscHIsRV8sTG4sRG4pO2lmKF9uLnRhcmdldD1udWxsLEVfJiYoRV8udGFza0RhdGE9bnVsbCksSW0mJihaci5vbmNlPSEwKSwhTXQmJiJib29sZWFuIj09dHlwZW9mIFlkLm9wdGlvbnN8fChZZC5vcHRpb25zPVpyKSxZZC50YXJnZXQ9bGksWWQuY2FwdHVyZT1IcixZZC5ldmVudE5hbWU9eGksTm8mJihZZC5vcmlnaW5hbERlbGVnYXRlPXByKSxpaT9BbS51bnNoaWZ0KFlkKTpBbS5wdXNoKFlkKSxuaSlyZXR1cm4gbGl9fX07cmV0dXJuIHp0W1ZdPUN0KFBuLGV0LFBlLE1uLFFuKSxpciYmKHp0W3FlXT1DdChpcixydCxmdW5jdGlvbihKZSl7cmV0dXJuIGlyLmNhbGwoX24udGFyZ2V0LF9uLmV2ZW50TmFtZSxKZS5pbnZva2UsX24ub3B0aW9ucyl9LE1uLFFuLCEwKSksenRbWF09ZnVuY3Rpb24oKXt2YXIgSmU9dGhpc3x8aixadD1hcmd1bWVudHNbMF07RXQmJkV0LnRyYW5zZmVyRXZlbnROYW1lJiYoWnQ9RXQudHJhbnNmZXJFdmVudE5hbWUoWnQpKTt2YXIgTG49YXJndW1lbnRzWzJdLERuPSEhTG4mJigiYm9vbGVhbiI9PXR5cGVvZiBMbnx8TG4uY2FwdHVyZSksbmk9YXJndW1lbnRzWzFdO2lmKCFuaSlyZXR1cm4gX2kuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKCF0aXx8dGkoX2ksbmksSmUsYXJndW1lbnRzKSl7dmFyIGxpLGlpPVRuW1p0XTtpaSYmKGxpPWlpW0RuP2M6ZF0pO3ZhciB4aT1saSYmSmVbbGldO2lmKHhpKWZvcih2YXIgcHI9MDtwcjx4aS5sZW5ndGg7cHIrKyl7dmFyIE5vPXhpW3ByXTtpZihobChObyxuaSkpcmV0dXJuIHhpLnNwbGljZShwciwxKSxOby5pc1JlbW92ZWQ9ITAsMD09PXhpLmxlbmd0aCYmKE5vLmFsbFJlbW92ZWQ9ITAsSmVbbGldPW51bGwsInN0cmluZyI9PXR5cGVvZiBadCkmJihKZVt1KyJPTl9QUk9QRVJUWSIrWnRdPW51bGwpLE5vLnpvbmUuY2FuY2VsVGFzayhObyksUW4/SmU6dm9pZCAwfXJldHVybiBfaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx6dFtaXT1mdW5jdGlvbigpe3ZhciBKZT10aGlzfHxqLFp0PWFyZ3VtZW50c1swXTtFdCYmRXQudHJhbnNmZXJFdmVudE5hbWUmJihadD1FdC50cmFuc2ZlckV2ZW50TmFtZShadCkpO2Zvcih2YXIgTG49W10sRG49b2UoSmUsQmk/QmkoWnQpOlp0KSxuaT0wO25pPERuLmxlbmd0aDtuaSsrKXt2YXIgaWk9RG5bbmldO0xuLnB1c2goaWkub3JpZ2luYWxEZWxlZ2F0ZT9paS5vcmlnaW5hbERlbGVnYXRlOmlpLmNhbGxiYWNrKX1yZXR1cm4gTG59LHp0W2FlXT1mdW5jdGlvbigpe3ZhciBKZT10aGlzfHxqLFp0PWFyZ3VtZW50c1swXTtpZihadCl7RXQmJkV0LnRyYW5zZmVyRXZlbnROYW1lJiYoWnQ9RXQudHJhbnNmZXJFdmVudE5hbWUoWnQpKTt2YXIgeGk9VG5bWnRdO2lmKHhpKXt2YXIgWWM9SmVbeGlbZF1dLFpyPUplW3hpW2NdXTtpZihZYylmb3IodmFyIHhvPVljLnNsaWNlKCksRG49MDtEbjx4by5sZW5ndGg7RG4rKyl0aGlzW1hdLmNhbGwodGhpcyxadCwoSHI9eG9bRG5dKS5vcmlnaW5hbERlbGVnYXRlP0hyLm9yaWdpbmFsRGVsZWdhdGU6SHIuY2FsbGJhY2ssSHIub3B0aW9ucyk7aWYoWnIpZm9yKHhvPVpyLnNsaWNlKCksRG49MDtEbjx4by5sZW5ndGg7RG4rKyl7dmFyIEhyO3RoaXNbWF0uY2FsbCh0aGlzLFp0LChIcj14b1tEbl0pLm9yaWdpbmFsRGVsZWdhdGU/SHIub3JpZ2luYWxEZWxlZ2F0ZTpIci5jYWxsYmFjayxIci5vcHRpb25zKX19fWVsc2V7dmFyIExuPU9iamVjdC5rZXlzKEplKTtmb3IoRG49MDtEbjxMbi5sZW5ndGg7RG4rKyl7dmFyIGlpPW9uLmV4ZWMoTG5bRG5dKSxsaT1paSYmaWlbMV07bGkmJiJyZW1vdmVMaXN0ZW5lciIhPT1saSYmdGhpc1thZV0uY2FsbCh0aGlzLGxpKX10aGlzW2FlXS5jYWxsKHRoaXMsInJlbW92ZUxpc3RlbmVyIil9aWYoUW4pcmV0dXJuIHRoaXN9LHBlKHp0W1ZdLFBuKSxwZSh6dFtYXSxfaSksY3ImJnBlKHp0W2FlXSxjciksT24mJnBlKHp0W1pdLE9uKSwhMH1mb3IodmFyIHlpPVtdLHBuPTA7cG48bGUubGVuZ3RoO3BuKyspeWlbcG5dPXFpKGxlW3BuXSxFKTtyZXR1cm4geWl9ZnVuY3Rpb24gb2UoaixKKXtpZighSil7dmFyIGxlPVtdO2Zvcih2YXIgRSBpbiBqKXt2YXIgVj1vbi5leGVjKEUpLFg9ViYmVlsxXTtpZihYJiYoIUp8fFg9PT1KKSl7dmFyIFo9altFXTtpZihaKWZvcih2YXIgYWU9MDthZTxaLmxlbmd0aDthZSsrKWxlLnB1c2goWlthZV0pfX1yZXR1cm4gbGV9dmFyIHplPVRuW0pdO3plfHwobXQoSiksemU9VG5bSl0pO3ZhciBldD1qW3plW2RdXSxxZT1qW3plW2NdXTtyZXR1cm4gZXQ/cWU/ZXQuY29uY2F0KHFlKTpldC5zbGljZSgpOnFlP3FlLnNsaWNlKCk6W119ZnVuY3Rpb24gYXQoaixKKXt2YXIgbGU9ai5FdmVudDtsZSYmbGUucHJvdG90eXBlJiZKLnBhdGNoTWV0aG9kKGxlLnByb3RvdHlwZSwic3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIixmdW5jdGlvbihFKXtyZXR1cm4gZnVuY3Rpb24oVixYKXtWW0NlXT0hMCxFJiZFLmFwcGx5KFYsWCl9fSl9ZnVuY3Rpb24gWWUoaixKLGxlLEUsVil7dmFyIFg9Wm9uZS5fX3N5bWJvbF9fKEUpO2lmKCFKW1hdKXt2YXIgWj1KW1hdPUpbRV07SltFXT1mdW5jdGlvbihhZSx6ZSxldCl7cmV0dXJuIHplJiZ6ZS5wcm90b3R5cGUmJlYuZm9yRWFjaChmdW5jdGlvbihxZSl7dmFyIHJ0PSIiLmNvbmNhdChsZSwiLiIpLmNvbmNhdChFLCI6OiIpK3FlLGR0PXplLnByb3RvdHlwZTt0cnl7aWYoZHQuaGFzT3duUHJvcGVydHkocWUpKXt2YXIgU3Q9ai5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZHQscWUpO1N0JiZTdC52YWx1ZT8oU3QudmFsdWU9ai53cmFwV2l0aEN1cnJlbnRab25lKFN0LnZhbHVlLHJ0KSxqLl9yZWRlZmluZVByb3BlcnR5KHplLnByb3RvdHlwZSxxZSxTdCkpOmR0W3FlXSYmKGR0W3FlXT1qLndyYXBXaXRoQ3VycmVudFpvbmUoZHRbcWVdLHJ0KSl9ZWxzZSBkdFtxZV0mJihkdFtxZV09ai53cmFwV2l0aEN1cnJlbnRab25lKGR0W3FlXSxydCkpfWNhdGNoe319KSxaLmNhbGwoSixhZSx6ZSxldCl9LGouYXR0YWNoT3JpZ2luVG9QYXRjaGVkKEpbRV0sWil9fWZ1bmN0aW9uIF90KGosSixsZSl7aWYoIWxlfHwwPT09bGUubGVuZ3RoKXJldHVybiBKO3ZhciBFPWxlLmZpbHRlcihmdW5jdGlvbihYKXtyZXR1cm4gWC50YXJnZXQ9PT1qfSk7aWYoIUV8fDA9PT1FLmxlbmd0aClyZXR1cm4gSjt2YXIgVj1FWzBdLmlnbm9yZVByb3BlcnRpZXM7cmV0dXJuIEouZmlsdGVyKGZ1bmN0aW9uKFgpe3JldHVybi0xPT09Vi5pbmRleE9mKFgpfSl9ZnVuY3Rpb24gdXQoaixKLGxlLEUpe2omJmNlKGosX3QoaixKLGxlKSxFKX1mdW5jdGlvbiBhbihqKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaikuZmlsdGVyKGZ1bmN0aW9uKEope3JldHVybiBKLnN0YXJ0c1dpdGgoIm9uIikmJkoubGVuZ3RoPjJ9KS5tYXAoZnVuY3Rpb24oSil7cmV0dXJuIEouc3Vic3RyaW5nKDIpfSl9ZnVuY3Rpb24geXQoaixKLGxlKXt2YXIgRT1sZS5jb25maWd1cmFibGU7cmV0dXJuIGhuKGosSixsZT1MZShqLEosbGUpLEUpfWZ1bmN0aW9uIGVuKGosSil7cmV0dXJuIGomJmpbTF0mJmpbTF1bSl19ZnVuY3Rpb24gTGUoaixKLGxlKXtyZXR1cm4gT2JqZWN0LmlzRnJvemVuKGxlKXx8KGxlLmNvbmZpZ3VyYWJsZT0hMCksbGUuY29uZmlndXJhYmxlfHwoIWpbTF0mJiFPYmplY3QuaXNGcm96ZW4oaikmJk5pKGosTCx7d3JpdGFibGU6ITAsdmFsdWU6e319KSxqW0xdJiYoaltMXVtKXT0hMCkpLGxlfWZ1bmN0aW9uIGhuKGosSixsZSxFKXt0cnl7cmV0dXJuIE5pKGosSixsZSl9Y2F0Y2goWil7aWYoIWxlLmNvbmZpZ3VyYWJsZSl0aHJvdyBaO3R5cGVvZiBFPiJ1Ij9kZWxldGUgbGUuY29uZmlndXJhYmxlOmxlLmNvbmZpZ3VyYWJsZT1FO3RyeXtyZXR1cm4gTmkoaixKLGxlKX1jYXRjaChhZSl7dmFyIFY9ITE7aWYoKCJjcmVhdGVkQ2FsbGJhY2siPT09Snx8ImF0dGFjaGVkQ2FsbGJhY2siPT09Snx8ImRldGFjaGVkQ2FsbGJhY2siPT09Snx8ImF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayI9PT1KKSYmKFY9ITApLCFWKXRocm93IGFlO3ZhciBYPW51bGw7dHJ5e1g9SlNPTi5zdHJpbmdpZnkobGUpfWNhdGNoe1g9bGUudG9TdHJpbmcoKX1jb25zb2xlLmxvZygiQXR0ZW1wdGluZyB0byBjb25maWd1cmUgJyIuY29uY2F0KEosIicgd2l0aCBkZXNjcmlwdG9yICciKS5jb25jYXQoWCwiJyBvbiBvYmplY3QgJyIpLmNvbmNhdChqLCInIGFuZCBnb3QgZXJyb3IsIGdpdmluZyB1cDogIikuY29uY2F0KGFlKSl9fX1ab25lLl9fbG9hZF9wYXRjaCgidXRpbCIsZnVuY3Rpb24oaixKLGxlKXt2YXIgRT1hbihqKTtsZS5wYXRjaE9uUHJvcGVydGllcz1jZSxsZS5wYXRjaE1ldGhvZD0kLGxlLmJpbmRBcmd1bWVudHM9UixsZS5wYXRjaE1hY3JvVGFzaz1kZTt2YXIgVj1KLl9fc3ltYm9sX18oIkJMQUNLX0xJU1RFRF9FVkVOVFMiKSxYPUouX19zeW1ib2xfXygiVU5QQVRDSEVEX0VWRU5UUyIpO2pbWF0mJihqW1ZdPWpbWF0pLGpbVl0mJihKW1ZdPUpbWF09altWXSksbGUucGF0Y2hFdmVudFByb3RvdHlwZT1hdCxsZS5wYXRjaEV2ZW50VGFyZ2V0PWh0LGxlLmlzSUVPckVkZ2U9bHQsbGUuT2JqZWN0RGVmaW5lUHJvcGVydHk9dCxsZS5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I9bixsZS5PYmplY3RDcmVhdGU9aSxsZS5BcnJheVNsaWNlPXIsbGUucGF0Y2hDbGFzcz1fZSxsZS53cmFwV2l0aEN1cnJlbnRab25lPXAsbGUuZmlsdGVyUHJvcGVydGllcz1fdCxsZS5hdHRhY2hPcmlnaW5Ub1BhdGNoZWQ9cGUsbGUuX3JlZGVmaW5lUHJvcGVydHk9T2JqZWN0LmRlZmluZVByb3BlcnR5LGxlLnBhdGNoQ2FsbGJhY2tzPVllLGxlLmdldEdsb2JhbE9iamVjdHM9ZnVuY3Rpb24oKXtyZXR1cm57Z2xvYmFsU291cmNlczp3dCx6b25lU3ltYm9sRXZlbnROYW1lczpUbixldmVudE5hbWVzOkUsaXNCcm93c2VyOndlLGlzTWl4OlFlLGlzTm9kZTpRLFRSVUVfU1RSOmMsRkFMU0VfU1RSOmQsWk9ORV9TWU1CT0xfUFJFRklYOnUsQUREX0VWRU5UX0xJU1RFTkVSX1NUUjpvLFJFTU9WRV9FVkVOVF9MSVNURU5FUl9TVFI6YX19fSk7dmFyIGosV289dXUodXUodXUodXUodXUodXUodXUodXUoW10sWyJhYm9ydCIsImFuaW1hdGlvbmNhbmNlbCIsImFuaW1hdGlvbmVuZCIsImFuaW1hdGlvbml0ZXJhdGlvbiIsImF1eGNsaWNrIiwiYmVmb3JlaW5wdXQiLCJibHVyIiwiY2FuY2VsIiwiY2FucGxheSIsImNhbnBsYXl0aHJvdWdoIiwiY2hhbmdlIiwiY29tcG9zaXRpb25zdGFydCIsImNvbXBvc2l0aW9udXBkYXRlIiwiY29tcG9zaXRpb25lbmQiLCJjdWVjaGFuZ2UiLCJjbGljayIsImNsb3NlIiwiY29udGV4dG1lbnUiLCJjdXJlY2hhbmdlIiwiZGJsY2xpY2siLCJkcmFnIiwiZHJhZ2VuZCIsImRyYWdlbnRlciIsImRyYWdleGl0IiwiZHJhZ2xlYXZlIiwiZHJhZ292ZXIiLCJkcm9wIiwiZHVyYXRpb25jaGFuZ2UiLCJlbXB0aWVkIiwiZW5kZWQiLCJlcnJvciIsImZvY3VzIiwiZm9jdXNpbiIsImZvY3Vzb3V0IiwiZ290cG9pbnRlcmNhcHR1cmUiLCJpbnB1dCIsImludmFsaWQiLCJrZXlkb3duIiwia2V5cHJlc3MiLCJrZXl1cCIsImxvYWQiLCJsb2Fkc3RhcnQiLCJsb2FkZWRkYXRhIiwibG9hZGVkbWV0YWRhdGEiLCJsb3N0cG9pbnRlcmNhcHR1cmUiLCJtb3VzZWRvd24iLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsIm1vdXNlbW92ZSIsIm1vdXNlb3V0IiwibW91c2VvdmVyIiwibW91c2V1cCIsIm1vdXNld2hlZWwiLCJvcmllbnRhdGlvbmNoYW5nZSIsInBhdXNlIiwicGxheSIsInBsYXlpbmciLCJwb2ludGVyY2FuY2VsIiwicG9pbnRlcmRvd24iLCJwb2ludGVyZW50ZXIiLCJwb2ludGVybGVhdmUiLCJwb2ludGVybG9ja2NoYW5nZSIsIm1venBvaW50ZXJsb2NrY2hhbmdlIiwid2Via2l0cG9pbnRlcmxvY2tlcmNoYW5nZSIsInBvaW50ZXJsb2NrZXJyb3IiLCJtb3pwb2ludGVybG9ja2Vycm9yIiwid2Via2l0cG9pbnRlcmxvY2tlcnJvciIsInBvaW50ZXJtb3ZlIiwicG9pbnRvdXQiLCJwb2ludGVyb3ZlciIsInBvaW50ZXJ1cCIsInByb2dyZXNzIiwicmF0ZWNoYW5nZSIsInJlc2V0IiwicmVzaXplIiwic2Nyb2xsIiwic2Vla2VkIiwic2Vla2luZyIsInNlbGVjdCIsInNlbGVjdGlvbmNoYW5nZSIsInNlbGVjdHN0YXJ0Iiwic2hvdyIsInNvcnQiLCJzdGFsbGVkIiwic3VibWl0Iiwic3VzcGVuZCIsInRpbWV1cGRhdGUiLCJ2b2x1bWVjaGFuZ2UiLCJ0b3VjaGNhbmNlbCIsInRvdWNobW92ZSIsInRvdWNoc3RhcnQiLCJ0b3VjaGVuZCIsInRyYW5zaXRpb25jYW5jZWwiLCJ0cmFuc2l0aW9uZW5kIiwid2FpdGluZyIsIndoZWVsIl0sITApLFsid2ViZ2xjb250ZXh0cmVzdG9yZWQiLCJ3ZWJnbGNvbnRleHRsb3N0Iiwid2ViZ2xjb250ZXh0Y3JlYXRpb25lcnJvciJdLCEwKSxbImF1dG9jb21wbGV0ZSIsImF1dG9jb21wbGV0ZWVycm9yIl0sITApLFsidG9nZ2xlIl0sITApLFsiYWZ0ZXJzY3JpcHRleGVjdXRlIiwiYmVmb3Jlc2NyaXB0ZXhlY3V0ZSIsIkRPTUNvbnRlbnRMb2FkZWQiLCJmcmVlemUiLCJmdWxsc2NyZWVuY2hhbmdlIiwibW96ZnVsbHNjcmVlbmNoYW5nZSIsIndlYmtpdGZ1bGxzY3JlZW5jaGFuZ2UiLCJtc2Z1bGxzY3JlZW5jaGFuZ2UiLCJmdWxsc2NyZWVuZXJyb3IiLCJtb3pmdWxsc2NyZWVuZXJyb3IiLCJ3ZWJraXRmdWxsc2NyZWVuZXJyb3IiLCJtc2Z1bGxzY3JlZW5lcnJvciIsInJlYWR5c3RhdGVjaGFuZ2UiLCJ2aXNpYmlsaXR5Y2hhbmdlIiwicmVzdW1lIl0sITApLFsiYWJzb2x1dGVkZXZpY2VvcmllbnRhdGlvbiIsImFmdGVyaW5wdXQiLCJhZnRlcnByaW50IiwiYXBwaW5zdGFsbGVkIiwiYmVmb3JlaW5zdGFsbHByb21wdCIsImJlZm9yZXByaW50IiwiYmVmb3JldW5sb2FkIiwiZGV2aWNlbGlnaHQiLCJkZXZpY2Vtb3Rpb24iLCJkZXZpY2VvcmllbnRhdGlvbiIsImRldmljZW9yaWVudGF0aW9uYWJzb2x1dGUiLCJkZXZpY2Vwcm94aW1pdHkiLCJoYXNoY2hhbmdlIiwibGFuZ3VhZ2VjaGFuZ2UiLCJtZXNzYWdlIiwibW96YmVmb3JlcGFpbnQiLCJvZmZsaW5lIiwib25saW5lIiwicGFpbnQiLCJwYWdlc2hvdyIsInBhZ2VoaWRlIiwicG9wc3RhdGUiLCJyZWplY3Rpb25oYW5kbGVkIiwic3RvcmFnZSIsInVuaGFuZGxlZHJlamVjdGlvbiIsInVubG9hZCIsInVzZXJwcm94aW1pdHkiLCJ2cmRpc3BsYXljb25uZWN0ZWQiLCJ2cmRpc3BsYXlkaXNjb25uZWN0ZWQiLCJ2cmRpc3BsYXlwcmVzZW50Y2hhbmdlIl0sITApLFsiYmVmb3JlY29weSIsImJlZm9yZWN1dCIsImJlZm9yZXBhc3RlIiwiY29weSIsImN1dCIsInBhc3RlIiwiZHJhZ3N0YXJ0IiwibG9hZGVuZCIsImFuaW1hdGlvbnN0YXJ0Iiwic2VhcmNoIiwidHJhbnNpdGlvbnJ1biIsInRyYW5zaXRpb25zdGFydCIsIndlYmtpdGFuaW1hdGlvbmVuZCIsIndlYmtpdGFuaW1hdGlvbml0ZXJhdGlvbiIsIndlYmtpdGFuaW1hdGlvbnN0YXJ0Iiwid2Via2l0dHJhbnNpdGlvbmVuZCJdLCEwKSxbImFjdGl2YXRlIiwiYWZ0ZXJ1cGRhdGUiLCJhcmlhcmVxdWVzdCIsImJlZm9yZWFjdGl2YXRlIiwiYmVmb3JlZGVhY3RpdmF0ZSIsImJlZm9yZWVkaXRmb2N1cyIsImJlZm9yZXVwZGF0ZSIsImNlbGxjaGFuZ2UiLCJjb250cm9sc2VsZWN0IiwiZGF0YWF2YWlsYWJsZSIsImRhdGFzZXRjaGFuZ2VkIiwiZGF0YXNldGNvbXBsZXRlIiwiZXJyb3J1cGRhdGUiLCJmaWx0ZXJjaGFuZ2UiLCJsYXlvdXRjb21wbGV0ZSIsImxvc2VjYXB0dXJlIiwibW92ZSIsIm1vdmVlbmQiLCJtb3Zlc3RhcnQiLCJwcm9wZXJ0eWNoYW5nZSIsInJlc2l6ZWVuZCIsInJlc2l6ZXN0YXJ0Iiwicm93ZW50ZXIiLCJyb3dleGl0Iiwicm93c2RlbGV0ZSIsInJvd3NpbnNlcnRlZCIsImNvbW1hbmQiLCJjb21wYXNzbmVlZHNjYWxpYnJhdGlvbiIsImRlYWN0aXZhdGUiLCJoZWxwIiwibXNjb250ZW50em9vbSIsIm1zbWFuaXB1bGF0aW9uc3RhdGVjaGFuZ2VkIiwibXNnZXN0dXJlY2hhbmdlIiwibXNnZXN0dXJlZG91YmxldGFwIiwibXNnZXN0dXJlZW5kIiwibXNnZXN0dXJlaG9sZCIsIm1zZ2VzdHVyZXN0YXJ0IiwibXNnZXN0dXJldGFwIiwibXNnb3Rwb2ludGVyY2FwdHVyZSIsIm1zaW5lcnRpYXN0YXJ0IiwibXNsb3N0cG9pbnRlcmNhcHR1cmUiLCJtc3BvaW50ZXJjYW5jZWwiLCJtc3BvaW50ZXJkb3duIiwibXNwb2ludGVyZW50ZXIiLCJtc3BvaW50ZXJob3ZlciIsIm1zcG9pbnRlcmxlYXZlIiwibXNwb2ludGVybW92ZSIsIm1zcG9pbnRlcm91dCIsIm1zcG9pbnRlcm92ZXIiLCJtc3BvaW50ZXJ1cCIsInBvaW50ZXJvdXQiLCJtc3NpdGVtb2RlanVtcGxpc3RpdGVtcmVtb3ZlZCIsIm1zdGh1bWJuYWlsY2xpY2siLCJzdG9wIiwic3RvcmFnZWNvbW1pdCJdLCEwKTsoaj10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9KVsoImxlZ2FjeVBhdGNoIiwoai5fX1pvbmVfc3ltYm9sX3ByZWZpeHx8Il9fem9uZV9zeW1ib2xfXyIpKyJsZWdhY3lQYXRjaCIpXT1mdW5jdGlvbigpe3ZhciBFPWouWm9uZTtFLl9fbG9hZF9wYXRjaCgiZGVmaW5lUHJvcGVydHkiLGZ1bmN0aW9uKFYsWCxaKXtaLl9yZWRlZmluZVByb3BlcnR5PXl0LHNpPVpvbmUuX19zeW1ib2xfXyxOaT1PYmplY3Rbc2koImRlZmluZVByb3BlcnR5IildPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxMaT1PYmplY3Rbc2koImdldE93blByb3BlcnR5RGVzY3JpcHRvciIpXT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFk9T2JqZWN0LmNyZWF0ZSxMPXNpKCJ1bmNvbmZpZ3VyYWJsZXMiKSxPYmplY3QuZGVmaW5lUHJvcGVydHk9ZnVuY3Rpb24oaixKLGxlKXtpZihlbihqLEopKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhc3NpZ24gdG8gcmVhZCBvbmx5IHByb3BlcnR5ICciK0orIicgb2YgIitqKTt2YXIgRT1sZS5jb25maWd1cmFibGU7cmV0dXJuInByb3RvdHlwZSIhPT1KJiYobGU9TGUoaixKLGxlKSksaG4oaixKLGxlLEUpfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcz1mdW5jdGlvbihqLEope09iamVjdC5rZXlzKEopLmZvckVhY2goZnVuY3Rpb24oWil7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosWixKW1pdKX0pO2Zvcih2YXIgbGU9MCxFPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoSik7bGU8RS5sZW5ndGg7bGUrKyl7dmFyIFY9RVtsZV07T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKLFYpPy5lbnVtZXJhYmxlJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaixWLEpbVl0pfXJldHVybiBqfSxPYmplY3QuY3JlYXRlPWZ1bmN0aW9uKGosSil7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBKJiYhT2JqZWN0LmlzRnJvemVuKEopJiZPYmplY3Qua2V5cyhKKS5mb3JFYWNoKGZ1bmN0aW9uKGxlKXtKW2xlXT1MZShqLGxlLEpbbGVdKX0pLFkoaixKKX0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcj1mdW5jdGlvbihqLEope3ZhciBsZT1MaShqLEopO3JldHVybiBsZSYmZW4oaixKKSYmKGxlLmNvbmZpZ3VyYWJsZT0hMSksbGV9fSksRS5fX2xvYWRfcGF0Y2goInJlZ2lzdGVyRWxlbWVudCIsZnVuY3Rpb24oVixYLFopeyFmdW5jdGlvbihqLEope3ZhciBsZT1KLmdldEdsb2JhbE9iamVjdHMoKTsobGUuaXNCcm93c2VyfHxsZS5pc01peCkmJiJyZWdpc3RlckVsZW1lbnQiaW4gai5kb2N1bWVudCYmSi5wYXRjaENhbGxiYWNrcyhKLGRvY3VtZW50LCJEb2N1bWVudCIsInJlZ2lzdGVyRWxlbWVudCIsWyJjcmVhdGVkQ2FsbGJhY2siLCJhdHRhY2hlZENhbGxiYWNrIiwiZGV0YWNoZWRDYWxsYmFjayIsImF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayJdKX0oVixaKX0pLEUuX19sb2FkX3BhdGNoKCJFdmVudFRhcmdldExlZ2FjeSIsZnVuY3Rpb24oVixYLFopeyhmdW5jdGlvbihqLEope3ZhciBsZT1KLmdldEdsb2JhbE9iamVjdHMoKSxFPWxlLmV2ZW50TmFtZXMsVj1sZS5nbG9iYWxTb3VyY2VzLFg9bGUuem9uZVN5bWJvbEV2ZW50TmFtZXMsWj1sZS5UUlVFX1NUUixhZT1sZS5GQUxTRV9TVFIsemU9bGUuWk9ORV9TWU1CT0xfUFJFRklYLHFlPSJBcHBsaWNhdGlvbkNhY2hlLEV2ZW50U291cmNlLEZpbGVSZWFkZXIsSW5wdXRNZXRob2RDb250ZXh0LE1lZGlhQ29udHJvbGxlcixNZXNzYWdlUG9ydCxOb2RlLFBlcmZvcm1hbmNlLFNWR0VsZW1lbnRJbnN0YW5jZSxTaGFyZWRXb3JrZXIsVGV4dFRyYWNrLFRleHRUcmFja0N1ZSxUZXh0VHJhY2tMaXN0LFdlYktpdE5hbWVkRmxvdyxXaW5kb3csV29ya2VyLFdvcmtlckdsb2JhbFNjb3BlLFhNTEh0dHBSZXF1ZXN0LFhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQsWE1MSHR0cFJlcXVlc3RVcGxvYWQsSURCUmVxdWVzdCxJREJPcGVuREJSZXF1ZXN0LElEQkRhdGFiYXNlLElEQlRyYW5zYWN0aW9uLElEQkN1cnNvcixEQkluZGV4LFdlYlNvY2tldCIuc3BsaXQoIiwiKSxydD0iRXZlbnRUYXJnZXQiLGR0PVtdLFN0PWoud3RmLEF0PSJBbmNob3IsQXJlYSxBdWRpbyxCUixCYXNlLEJhc2VGb250LEJvZHksQnV0dG9uLENhbnZhcyxDb250ZW50LERMaXN0LERpcmVjdG9yeSxEaXYsRW1iZWQsRmllbGRTZXQsRm9udCxGb3JtLEZyYW1lLEZyYW1lU2V0LEhSLEhlYWQsSGVhZGluZyxIdG1sLElGcmFtZSxJbWFnZSxJbnB1dCxLZXlnZW4sTEksTGFiZWwsTGVnZW5kLExpbmssTWFwLE1hcnF1ZWUsTWVkaWEsTWVudSxNZXRhLE1ldGVyLE1vZCxPTGlzdCxPYmplY3QsT3B0R3JvdXAsT3B0aW9uLE91dHB1dCxQYXJhZ3JhcGgsUHJlLFByb2dyZXNzLFF1b3RlLFNjcmlwdCxTZWxlY3QsU291cmNlLFNwYW4sU3R5bGUsVGFibGVDYXB0aW9uLFRhYmxlQ2VsbCxUYWJsZUNvbCxUYWJsZSxUYWJsZVJvdyxUYWJsZVNlY3Rpb24sVGV4dEFyZWEsVGl0bGUsVHJhY2ssVUxpc3QsVW5rbm93bixWaWRlbyIuc3BsaXQoIiwiKTtTdD9kdD1BdC5tYXAoZnVuY3Rpb24oeXIpe3JldHVybiJIVE1MIit5cisiRWxlbWVudCJ9KS5jb25jYXQocWUpOmpbcnRdP2R0LnB1c2gocnQpOmR0PXFlO2Zvcih2YXIgY249ai5fX1pvbmVfZGlzYWJsZV9JRV9jaGVja3x8ITEscWk9ai5fX1pvbmVfZW5hYmxlX2Nyb3NzX2NvbnRleHRfY2hlY2t8fCExLHlpPUouaXNJRU9yRWRnZSgpLFJuPSJbb2JqZWN0IEZ1bmN0aW9uV3JhcHBlcl0iLEV0PSJmdW5jdGlvbiBfX0JST1dTRVJUT09MU19DT05TT0xFX1NBRkVGVU5DKCkgeyBbbmF0aXZlIGNvZGVdIH0iLGdpPXtNU1BvaW50ZXJDYW5jZWw6InBvaW50ZXJjYW5jZWwiLE1TUG9pbnRlckRvd246InBvaW50ZXJkb3duIixNU1BvaW50ZXJFbnRlcjoicG9pbnRlcmVudGVyIixNU1BvaW50ZXJIb3ZlcjoicG9pbnRlcmhvdmVyIixNU1BvaW50ZXJMZWF2ZToicG9pbnRlcmxlYXZlIixNU1BvaW50ZXJNb3ZlOiJwb2ludGVybW92ZSIsTVNQb2ludGVyT3V0OiJwb2ludGVyb3V0IixNU1BvaW50ZXJPdmVyOiJwb2ludGVyb3ZlciIsTVNQb2ludGVyVXA6InBvaW50ZXJ1cCJ9LHRpPTA7dGk8RS5sZW5ndGg7dGkrKyl7dmFyIEJpPXplKygoSG49RVt0aV0pK2FlKSxfbj16ZSsoSG4rWik7WFtIbl09e30sWFtIbl1bYWVdPUJpLFhbSG5dW1pdPV9ufWZvcih0aT0wO3RpPEF0Lmxlbmd0aDt0aSsrKWZvcih2YXIgUG49QXRbdGldLF9pPVZbUG5dPXt9LE9uPTA7T248RS5sZW5ndGg7T24rKyl7dmFyIEhuO19pW0huPUVbT25dXT1QbisiLmFkZEV2ZW50TGlzdGVuZXI6IitIbn12YXIgaXI9W107Zm9yKHRpPTA7dGk8ZHQubGVuZ3RoO3RpKyspe3ZhciBTYT1qW2R0W3RpXV07aXIucHVzaChTYSYmU2EucHJvdG90eXBlKX1KLnBhdGNoRXZlbnRUYXJnZXQoaixKLGlyLHt2aDpmdW5jdGlvbih5cixkcixmdCxtZSl7aWYoIWNuJiZ5aSlpZihxaSl0cnl7aWYoKGdlPWRyLnRvU3RyaW5nKCkpPT09Um58fGdlPT1FdClyZXR1cm4geXIuYXBwbHkoZnQsbWUpLCExfWNhdGNoe3JldHVybiB5ci5hcHBseShmdCxtZSksITF9ZWxzZXt2YXIgZ2U7aWYoKGdlPWRyLnRvU3RyaW5nKCkpPT09Um58fGdlPT1FdClyZXR1cm4geXIuYXBwbHkoZnQsbWUpLCExfWVsc2UgaWYocWkpdHJ5e2RyLnRvU3RyaW5nKCl9Y2F0Y2h7cmV0dXJuIHlyLmFwcGx5KGZ0LG1lKSwhMX1yZXR1cm4hMH0sdHJhbnNmZXJFdmVudE5hbWU6ZnVuY3Rpb24oeXIpe3JldHVybiBnaVt5cl18fHlyfX0pLFpvbmVbSi5zeW1ib2woInBhdGNoRXZlbnRUYXJnZXQiKV09ISFqW3J0XX0pKFYsWiksZnVuY3Rpb24oaixKKXt2YXIgbGU9ai5nZXRHbG9iYWxPYmplY3RzKCk7aWYoKCFsZS5pc05vZGV8fGxlLmlzTWl4KSYmIWZ1bmN0aW9uKGosSil7dmFyIGxlPWouZ2V0R2xvYmFsT2JqZWN0cygpO2lmKChsZS5pc0Jyb3dzZXJ8fGxlLmlzTWl4KSYmIWouT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEhUTUxFbGVtZW50LnByb3RvdHlwZSwib25jbGljayIpJiZ0eXBlb2YgRWxlbWVudDwidSIpe3ZhciBYPWouT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEVsZW1lbnQucHJvdG90eXBlLCJvbmNsaWNrIik7aWYoWCYmIVguY29uZmlndXJhYmxlKXJldHVybiExO2lmKFgpe2ouT2JqZWN0RGVmaW5lUHJvcGVydHkoRWxlbWVudC5wcm90b3R5cGUsIm9uY2xpY2siLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hMH19KTt2YXIgYWU9ISFkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKS5vbmNsaWNrO3JldHVybiBqLk9iamVjdERlZmluZVByb3BlcnR5KEVsZW1lbnQucHJvdG90eXBlLCJvbmNsaWNrIixYKSxhZX19dmFyIHplPUouWE1MSHR0cFJlcXVlc3Q7aWYoIXplKXJldHVybiExO3ZhciBldD0ib25yZWFkeXN0YXRlY2hhbmdlIixxZT16ZS5wcm90b3R5cGUscnQ9ai5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocWUsZXQpO2lmKHJ0KXJldHVybiBqLk9iamVjdERlZmluZVByb3BlcnR5KHFlLGV0LHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hMH19KSxhZT0hIShkdD1uZXcgemUpLm9ucmVhZHlzdGF0ZWNoYW5nZSxqLk9iamVjdERlZmluZVByb3BlcnR5KHFlLGV0LHJ0fHx7fSksYWU7dmFyIFN0PWouc3ltYm9sKCJmYWtlIik7ai5PYmplY3REZWZpbmVQcm9wZXJ0eShxZSxldCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbU3RdfSxzZXQ6ZnVuY3Rpb24oeWkpe3RoaXNbU3RdPXlpfX0pO3ZhciBkdCxBdD1mdW5jdGlvbigpe307cmV0dXJuKGR0PW5ldyB6ZSkub25yZWFkeXN0YXRlY2hhbmdlPUF0LGFlPWR0W1N0XT09PUF0LGR0Lm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLGFlfShqLEopKXt2YXIgWD10eXBlb2YgV2ViU29ja2V0PCJ1IjsoZnVuY3Rpb24oail7Zm9yKHZhciBKPWouc3ltYm9sKCJ1bmJvdW5kIiksbGU9ZnVuY3Rpb24oVil7dmFyIFg9V29bVl0sWj0ib24iK1g7c2VsZi5hZGRFdmVudExpc3RlbmVyKFgsZnVuY3Rpb24oYWUpe3ZhciBldCxxZSx6ZT1hZS50YXJnZXQ7Zm9yKHFlPXplP3plLmNvbnN0cnVjdG9yLm5hbWUrIi4iK1o6InVua25vd24uIitaO3plOyl6ZVtaXSYmIXplW1pdW0pdJiYoKGV0PWoud3JhcFdpdGhDdXJyZW50Wm9uZSh6ZVtaXSxxZSkpW0pdPXplW1pdLHplW1pdPWV0KSx6ZT16ZS5wYXJlbnRFbGVtZW50fSwhMCl9LEU9MDtFPFdvLmxlbmd0aDtFKyspbGUoRSl9KShqKSxqLnBhdGNoQ2xhc3MoIlhNTEh0dHBSZXF1ZXN0IiksWCYmZnVuY3Rpb24oaixKKXt2YXIgbGU9ai5nZXRHbG9iYWxPYmplY3RzKCksRT1sZS5BRERfRVZFTlRfTElTVEVORVJfU1RSLFY9bGUuUkVNT1ZFX0VWRU5UX0xJU1RFTkVSX1NUUixYPUouV2ViU29ja2V0O0ouRXZlbnRUYXJnZXR8fGoucGF0Y2hFdmVudFRhcmdldChKLGosW1gucHJvdG90eXBlXSksSi5XZWJTb2NrZXQ9ZnVuY3Rpb24oemUsZXQpe3ZhciBydCxkdCxxZT1hcmd1bWVudHMubGVuZ3RoPjE/bmV3IFgoemUsZXQpOm5ldyBYKHplKSxTdD1qLk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcihxZSwib25tZXNzYWdlIik7cmV0dXJuIFN0JiYhMT09PVN0LmNvbmZpZ3VyYWJsZT8ocnQ9ai5PYmplY3RDcmVhdGUocWUpLGR0PXFlLFtFLFYsInNlbmQiLCJjbG9zZSJdLmZvckVhY2goZnVuY3Rpb24oQXQpe3J0W0F0XT1mdW5jdGlvbigpe3ZhciBjbj1qLkFycmF5U2xpY2UuY2FsbChhcmd1bWVudHMpO2lmKEF0PT09RXx8QXQ9PT1WKXt2YXIgcWk9Y24ubGVuZ3RoPjA/Y25bMF06dm9pZCAwO2lmKHFpKXt2YXIgeWk9Wm9uZS5fX3N5bWJvbF9fKCJPTl9QUk9QRVJUWSIrcWkpO3FlW3lpXT1ydFt5aV19fXJldHVybiBxZVtBdF0uYXBwbHkocWUsY24pfX0pKTpydD1xZSxqLnBhdGNoT25Qcm9wZXJ0aWVzKHJ0LFsiY2xvc2UiLCJlcnJvciIsIm1lc3NhZ2UiLCJvcGVuIl0sZHQpLHJ0fTt2YXIgWj1KLldlYlNvY2tldDtmb3IodmFyIGFlIGluIFgpWlthZV09WFthZV19KGosSiksWm9uZVtqLnN5bWJvbCgicGF0Y2hFdmVudHMiKV09ITB9fShaLFYpfSl9O3ZhciB3YT1tKCJ6b25lVGFzayIpO2Z1bmN0aW9uIHBsKGosSixsZSxFKXt2YXIgVj1udWxsLFg9bnVsbDtsZSs9RTt2YXIgWj17fTtmdW5jdGlvbiBhZShldCl7dmFyIHFlPWV0LmRhdGE7cmV0dXJuIHFlLmFyZ3NbMF09ZnVuY3Rpb24oKXtyZXR1cm4gZXQuaW52b2tlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0scWUuaGFuZGxlSWQ9Vi5hcHBseShqLHFlLmFyZ3MpLGV0fWZ1bmN0aW9uIHplKGV0KXtyZXR1cm4gWC5jYWxsKGosZXQuZGF0YS5oYW5kbGVJZCl9Vj0kKGosSis9RSxmdW5jdGlvbihldCl7cmV0dXJuIGZ1bmN0aW9uKHFlLHJ0KXtpZigiZnVuY3Rpb24iPT10eXBlb2YgcnRbMF0pe3ZhciBkdD17aXNQZXJpb2RpYzoiSW50ZXJ2YWwiPT09RSxkZWxheToiVGltZW91dCI9PT1FfHwiSW50ZXJ2YWwiPT09RT9ydFsxXXx8MDp2b2lkIDAsYXJnczpydH0sU3Q9cnRbMF07cnRbMF09ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIFN0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1maW5hbGx5e2R0LmlzUGVyaW9kaWN8fCgibnVtYmVyIj09dHlwZW9mIGR0LmhhbmRsZUlkP2RlbGV0ZSBaW2R0LmhhbmRsZUlkXTpkdC5oYW5kbGVJZCYmKGR0LmhhbmRsZUlkW3dhXT1udWxsKSl9fTt2YXIgQXQ9aChKLHJ0WzBdLGR0LGFlLHplKTtpZighQXQpcmV0dXJuIEF0O3ZhciBjbj1BdC5kYXRhLmhhbmRsZUlkO3JldHVybiJudW1iZXIiPT10eXBlb2YgY24/Wltjbl09QXQ6Y24mJihjblt3YV09QXQpLGNuJiZjbi5yZWYmJmNuLnVucmVmJiYiZnVuY3Rpb24iPT10eXBlb2YgY24ucmVmJiYiZnVuY3Rpb24iPT10eXBlb2YgY24udW5yZWYmJihBdC5yZWY9Y24ucmVmLmJpbmQoY24pLEF0LnVucmVmPWNuLnVucmVmLmJpbmQoY24pKSwibnVtYmVyIj09dHlwZW9mIGNufHxjbj9jbjpBdH1yZXR1cm4gZXQuYXBwbHkoaixydCl9fSksWD0kKGosbGUsZnVuY3Rpb24oZXQpe3JldHVybiBmdW5jdGlvbihxZSxydCl7dmFyIFN0LGR0PXJ0WzBdOyJudW1iZXIiPT10eXBlb2YgZHQ/U3Q9WltkdF06KFN0PWR0JiZkdFt3YV0pfHwoU3Q9ZHQpLFN0JiYic3RyaW5nIj09dHlwZW9mIFN0LnR5cGU/Im5vdFNjaGVkdWxlZCIhPT1TdC5zdGF0ZSYmKFN0LmNhbmNlbEZuJiZTdC5kYXRhLmlzUGVyaW9kaWN8fDA9PT1TdC5ydW5Db3VudCkmJigibnVtYmVyIj09dHlwZW9mIGR0P2RlbGV0ZSBaW2R0XTpkdCYmKGR0W3dhXT1udWxsKSxTdC56b25lLmNhbmNlbFRhc2soU3QpKTpldC5hcHBseShqLHJ0KX19KX1ab25lLl9fbG9hZF9wYXRjaCgibGVnYWN5IixmdW5jdGlvbihqKXt2YXIgSj1qW1pvbmUuX19zeW1ib2xfXygibGVnYWN5UGF0Y2giKV07SiYmSigpfSksWm9uZS5fX2xvYWRfcGF0Y2goInF1ZXVlTWljcm90YXNrIixmdW5jdGlvbihqLEosbGUpe2xlLnBhdGNoTWV0aG9kKGosInF1ZXVlTWljcm90YXNrIixmdW5jdGlvbihFKXtyZXR1cm4gZnVuY3Rpb24oVixYKXtKLmN1cnJlbnQuc2NoZWR1bGVNaWNyb1Rhc2soInF1ZXVlTWljcm90YXNrIixYWzBdKX19KX0pLFpvbmUuX19sb2FkX3BhdGNoKCJ0aW1lcnMiLGZ1bmN0aW9uKGope3ZhciBKPSJzZXQiLGxlPSJjbGVhciI7cGwoaixKLGxlLCJUaW1lb3V0IikscGwoaixKLGxlLCJJbnRlcnZhbCIpLHBsKGosSixsZSwiSW1tZWRpYXRlIil9KSxab25lLl9fbG9hZF9wYXRjaCgicmVxdWVzdEFuaW1hdGlvbkZyYW1lIixmdW5jdGlvbihqKXtwbChqLCJyZXF1ZXN0IiwiY2FuY2VsIiwiQW5pbWF0aW9uRnJhbWUiKSxwbChqLCJtb3pSZXF1ZXN0IiwibW96Q2FuY2VsIiwiQW5pbWF0aW9uRnJhbWUiKSxwbChqLCJ3ZWJraXRSZXF1ZXN0Iiwid2Via2l0Q2FuY2VsIiwiQW5pbWF0aW9uRnJhbWUiKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJibG9ja2luZyIsZnVuY3Rpb24oaixKKXtmb3IodmFyIGxlPVsiYWxlcnQiLCJwcm9tcHQiLCJjb25maXJtIl0sRT0wO0U8bGUubGVuZ3RoO0UrKykkKGosbGVbRV0sZnVuY3Rpb24oWCxaLGFlKXtyZXR1cm4gZnVuY3Rpb24oemUsZXQpe3JldHVybiBKLmN1cnJlbnQucnVuKFgsaixldCxhZSl9fSl9KSxab25lLl9fbG9hZF9wYXRjaCgiRXZlbnRUYXJnZXQiLGZ1bmN0aW9uKGosSixsZSl7KGZ1bmN0aW9uKGosSil7Si5wYXRjaEV2ZW50UHJvdG90eXBlKGosSil9KShqLGxlKSxmdW5jdGlvbihqLEope2lmKCFab25lW0ouc3ltYm9sKCJwYXRjaEV2ZW50VGFyZ2V0IildKXtmb3IodmFyIGxlPUouZ2V0R2xvYmFsT2JqZWN0cygpLEU9bGUuZXZlbnROYW1lcyxWPWxlLnpvbmVTeW1ib2xFdmVudE5hbWVzLFg9bGUuVFJVRV9TVFIsWj1sZS5GQUxTRV9TVFIsYWU9bGUuWk9ORV9TWU1CT0xfUFJFRklYLHplPTA7emU8RS5sZW5ndGg7emUrKyl7dmFyIGV0PUVbemVdLGR0PWFlKyhldCtaKSxTdD1hZSsoZXQrWCk7VltldF09e30sVltldF1bWl09ZHQsVltldF1bWF09U3R9dmFyIEF0PWouRXZlbnRUYXJnZXQ7QXQmJkF0LnByb3RvdHlwZSYmSi5wYXRjaEV2ZW50VGFyZ2V0KGosSixbQXQmJkF0LnByb3RvdHlwZV0pfX0oaixsZSk7dmFyIEU9ai5YTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0O0UmJkUucHJvdG90eXBlJiZsZS5wYXRjaEV2ZW50VGFyZ2V0KGosbGUsW0UucHJvdG90eXBlXSl9KSxab25lLl9fbG9hZF9wYXRjaCgiTXV0YXRpb25PYnNlcnZlciIsZnVuY3Rpb24oaixKLGxlKXtfZSgiTXV0YXRpb25PYnNlcnZlciIpLF9lKCJXZWJLaXRNdXRhdGlvbk9ic2VydmVyIil9KSxab25lLl9fbG9hZF9wYXRjaCgiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLGZ1bmN0aW9uKGosSixsZSl7X2UoIkludGVyc2VjdGlvbk9ic2VydmVyIil9KSxab25lLl9fbG9hZF9wYXRjaCgiRmlsZVJlYWRlciIsZnVuY3Rpb24oaixKLGxlKXtfZSgiRmlsZVJlYWRlciIpfSksWm9uZS5fX2xvYWRfcGF0Y2goIm9uX3Byb3BlcnR5IixmdW5jdGlvbihqLEosbGUpeyFmdW5jdGlvbihqLEope2lmKCghUXx8UWUpJiYhWm9uZVtqLnN5bWJvbCgicGF0Y2hFdmVudHMiKV0pe3ZhciBsZT1KLl9fWm9uZV9pZ25vcmVfb25fcHJvcGVydGllcyxFPVtdO2lmKHdlKXt2YXIgVj13aW5kb3c7RT1FLmNvbmNhdChbIkRvY3VtZW50IiwiU1ZHRWxlbWVudCIsIkVsZW1lbnQiLCJIVE1MRWxlbWVudCIsIkhUTUxCb2R5RWxlbWVudCIsIkhUTUxNZWRpYUVsZW1lbnQiLCJIVE1MRnJhbWVTZXRFbGVtZW50IiwiSFRNTEZyYW1lRWxlbWVudCIsIkhUTUxJRnJhbWVFbGVtZW50IiwiSFRNTE1hcnF1ZWVFbGVtZW50IiwiV29ya2VyIl0pO3ZhciBYPWZ1bmN0aW9uKCl7dHJ5e3ZhciBqPU0ubmF2aWdhdG9yLnVzZXJBZ2VudDtpZigtMSE9PWouaW5kZXhPZigiTVNJRSAiKXx8LTEhPT1qLmluZGV4T2YoIlRyaWRlbnQvIikpcmV0dXJuITB9Y2F0Y2h7fXJldHVybiExfSgpP1t7dGFyZ2V0OlYsaWdub3JlUHJvcGVydGllczpbImVycm9yIl19XTpbXTt1dChWLGFuKFYpLGxlJiZsZS5jb25jYXQoWCksZShWKSl9RT1FLmNvbmNhdChbIlhNTEh0dHBSZXF1ZXN0IiwiWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldCIsIklEQkluZGV4IiwiSURCUmVxdWVzdCIsIklEQk9wZW5EQlJlcXVlc3QiLCJJREJEYXRhYmFzZSIsIklEQlRyYW5zYWN0aW9uIiwiSURCQ3Vyc29yIiwiV2ViU29ja2V0Il0pO2Zvcih2YXIgWj0wO1o8RS5sZW5ndGg7WisrKXt2YXIgYWU9SltFW1pdXTthZSYmYWUucHJvdG90eXBlJiZ1dChhZS5wcm90b3R5cGUsYW4oYWUucHJvdG90eXBlKSxsZSl9fX0obGUsail9KSxab25lLl9fbG9hZF9wYXRjaCgiY3VzdG9tRWxlbWVudHMiLGZ1bmN0aW9uKGosSixsZSl7IWZ1bmN0aW9uKGosSil7dmFyIGxlPUouZ2V0R2xvYmFsT2JqZWN0cygpOyhsZS5pc0Jyb3dzZXJ8fGxlLmlzTWl4KSYmai5jdXN0b21FbGVtZW50cyYmImN1c3RvbUVsZW1lbnRzImluIGomJkoucGF0Y2hDYWxsYmFja3MoSixqLmN1c3RvbUVsZW1lbnRzLCJjdXN0b21FbGVtZW50cyIsImRlZmluZSIsWyJjb25uZWN0ZWRDYWxsYmFjayIsImRpc2Nvbm5lY3RlZENhbGxiYWNrIiwiYWRvcHRlZENhbGxiYWNrIiwiYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrIl0pfShqLGxlKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJYSFIiLGZ1bmN0aW9uKGosSil7IWZ1bmN0aW9uKGV0KXt2YXIgcWU9ZXQuWE1MSHR0cFJlcXVlc3Q7aWYocWUpe3ZhciBydD1xZS5wcm90b3R5cGUsU3Q9cnRbc10sQXQ9cnRbbF07aWYoIVN0KXt2YXIgY249ZXQuWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldDtpZihjbil7dmFyIHFpPWNuLnByb3RvdHlwZTtTdD1xaVtzXSxBdD1xaVtsXX19dmFyIHlpPSJyZWFkeXN0YXRlY2hhbmdlIixwbj0ic2NoZWR1bGVkIix0aT0kKHJ0LCJvcGVuIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihQbixfaSl7cmV0dXJuIFBuW0VdPTA9PV9pWzJdLFBuW1pdPV9pWzFdLHRpLmFwcGx5KFBuLF9pKX19KSxRbj1tKCJmZXRjaFRhc2tBYm9ydGluZyIpLHp0PW0oImZldGNoVGFza1NjaGVkdWxpbmciKSxCaT0kKHJ0LCJzZW5kIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihQbixfaSl7aWYoITA9PT1KLmN1cnJlbnRbenRdfHxQbltFXSlyZXR1cm4gQmkuYXBwbHkoUG4sX2kpO3ZhciBPbj17dGFyZ2V0OlBuLHVybDpQbltaXSxpc1BlcmlvZGljOiExLGFyZ3M6X2ksYWJvcnRlZDohMX0sY3I9aCgiWE1MSHR0cFJlcXVlc3Quc2VuZCIsRXQsT24sUm4sZ2kpO1BuJiYhMD09PVBuW2FlXSYmIU9uLmFib3J0ZWQmJmNyLnN0YXRlPT09cG4mJmNyLmludm9rZSgpfX0pLF9uPSQocnQsImFib3J0IixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihQbixfaSl7dmFyIE9uPWZ1bmN0aW9uKFBuKXtyZXR1cm4gUG5bbGVdfShQbik7aWYoT24mJiJzdHJpbmciPT10eXBlb2YgT24udHlwZSl7aWYobnVsbD09T24uY2FuY2VsRm58fE9uLmRhdGEmJk9uLmRhdGEuYWJvcnRlZClyZXR1cm47T24uem9uZS5jYW5jZWxUYXNrKE9uKX1lbHNlIGlmKCEwPT09Si5jdXJyZW50W1FuXSlyZXR1cm4gX24uYXBwbHkoUG4sX2kpfX0pfWZ1bmN0aW9uIFJuKFBuKXt2YXIgX2k9UG4uZGF0YSxPbj1faS50YXJnZXQ7T25bWF09ITEsT25bYWVdPSExO3ZhciBjcj1PbltWXTtTdHx8KFN0PU9uW3NdLEF0PU9uW2xdKSxjciYmQXQuY2FsbChPbix5aSxjcik7dmFyIGlyPU9uW1ZdPWZ1bmN0aW9uKCl7aWYoT24ucmVhZHlTdGF0ZT09PU9uLkRPTkUpaWYoIV9pLmFib3J0ZWQmJk9uW1hdJiZQbi5zdGF0ZT09PXBuKXt2YXIgeXI9T25bSi5fX3N5bWJvbF9fKCJsb2FkZmFsc2UiKV07aWYoMCE9PU9uLnN0YXR1cyYmeXImJnlyLmxlbmd0aD4wKXt2YXIgZHI9UG4uaW52b2tlO1BuLmludm9rZT1mdW5jdGlvbigpe2Zvcih2YXIgZnQ9T25bSi5fX3N5bWJvbF9fKCJsb2FkZmFsc2UiKV0sbWU9MDttZTxmdC5sZW5ndGg7bWUrKylmdFttZV09PT1QbiYmZnQuc3BsaWNlKG1lLDEpOyFfaS5hYm9ydGVkJiZQbi5zdGF0ZT09PXBuJiZkci5jYWxsKFBuKX0seXIucHVzaChQbil9ZWxzZSBQbi5pbnZva2UoKX1lbHNlIV9pLmFib3J0ZWQmJiExPT09T25bWF0mJihPblthZV09ITApfTtyZXR1cm4gU3QuY2FsbChPbix5aSxpciksT25bbGVdfHwoT25bbGVdPVBuKSxCaS5hcHBseShPbixfaS5hcmdzKSxPbltYXT0hMCxQbn1mdW5jdGlvbiBFdCgpe31mdW5jdGlvbiBnaShQbil7dmFyIF9pPVBuLmRhdGE7cmV0dXJuIF9pLmFib3J0ZWQ9ITAsX24uYXBwbHkoX2kudGFyZ2V0LF9pLmFyZ3MpfX0oaik7dmFyIGxlPW0oInhoclRhc2siKSxFPW0oInhoclN5bmMiKSxWPW0oInhockxpc3RlbmVyIiksWD1tKCJ4aHJTY2hlZHVsZWQiKSxaPW0oInhoclVSTCIpLGFlPW0oInhockVycm9yQmVmb3JlU2NoZWR1bGVkIil9KSxab25lLl9fbG9hZF9wYXRjaCgiZ2VvbG9jYXRpb24iLGZ1bmN0aW9uKGope2oubmF2aWdhdG9yJiZqLm5hdmlnYXRvci5nZW9sb2NhdGlvbiYmZnVuY3Rpb24oaixKKXtmb3IodmFyIGxlPWouY29uc3RydWN0b3IubmFtZSxFPWZ1bmN0aW9uKFgpe3ZhciBldCxxZSxaPUpbWF0sYWU9altaXTtpZihhZSl7aWYoIUIobihqLFopKSlyZXR1cm4iY29udGludWUiO2pbWl09KHFlPWZ1bmN0aW9uKCl7cmV0dXJuIGV0LmFwcGx5KHRoaXMsUihhcmd1bWVudHMsbGUrIi4iK1opKX0scGUocWUsZXQ9YWUpLHFlKX19LFY9MDtWPEoubGVuZ3RoO1YrKylFKFYpfShqLm5hdmlnYXRvci5nZW9sb2NhdGlvbixbImdldEN1cnJlbnRQb3NpdGlvbiIsIndhdGNoUG9zaXRpb24iXSl9KSxab25lLl9fbG9hZF9wYXRjaCgiUHJvbWlzZVJlamVjdGlvbkV2ZW50IixmdW5jdGlvbihqLEope2Z1bmN0aW9uIGxlKEUpe3JldHVybiBmdW5jdGlvbihWKXtvZShqLEUpLmZvckVhY2goZnVuY3Rpb24oWil7dmFyIGFlPWouUHJvbWlzZVJlamVjdGlvbkV2ZW50O2lmKGFlKXt2YXIgemU9bmV3IGFlKEUse3Byb21pc2U6Vi5wcm9taXNlLHJlYXNvbjpWLnJlamVjdGlvbn0pO1ouaW52b2tlKHplKX19KX19ai5Qcm9taXNlUmVqZWN0aW9uRXZlbnQmJihKW20oInVuaGFuZGxlZFByb21pc2VSZWplY3Rpb25IYW5kbGVyIildPWxlKCJ1bmhhbmRsZWRyZWplY3Rpb24iKSxKW20oInJlamVjdGlvbkhhbmRsZWRIYW5kbGVyIildPWxlKCJyZWplY3Rpb25oYW5kbGVkIikpfSl9LCJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKG4pOm4oKX0pO2Z1bmN0aW9uIG1uKG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBufWZ1bmN0aW9uIFJtKG4pe2xldCBlPW4oaT0+e0Vycm9yLmNhbGwoaSksaS5zdGFjaz0obmV3IEVycm9yKS5zdGFja30pO3JldHVybiBlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlfXZhciBpQz1SbShuPT5mdW5jdGlvbihlKXtuKHRoaXMpLHRoaXMubWVzc2FnZT1lP2Ake2UubGVuZ3RofSBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxuJHtlLm1hcCgoaSxyKT0+YCR7cisxfSkgJHtpLnRvU3RyaW5nKCl9YCkuam9pbigiXG4gICIpfWA6IiIsdGhpcy5uYW1lPSJVbnN1YnNjcmlwdGlvbkVycm9yIix0aGlzLmVycm9ycz1lfSk7ZnVuY3Rpb24gT3Aobix0KXtpZihuKXtsZXQgZT1uLmluZGV4T2YodCk7MDw9ZSYmbi5zcGxpY2UoZSwxKX19dmFyIEVuPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuaW5pdGlhbFRlYXJkb3duPXQsdGhpcy5jbG9zZWQ9ITEsdGhpcy5fcGFyZW50YWdlPW51bGwsdGhpcy5fZmluYWxpemVycz1udWxsfXVuc3Vic2NyaWJlKCl7bGV0IHQ7aWYoIXRoaXMuY2xvc2VkKXt0aGlzLmNsb3NlZD0hMDtsZXR7X3BhcmVudGFnZTplfT10aGlzO2lmKGUpaWYodGhpcy5fcGFyZW50YWdlPW51bGwsQXJyYXkuaXNBcnJheShlKSlmb3IobGV0IG8gb2YgZSlvLnJlbW92ZSh0aGlzKTtlbHNlIGUucmVtb3ZlKHRoaXMpO2xldHtpbml0aWFsVGVhcmRvd246aX09dGhpcztpZihtbihpKSl0cnl7aSgpfWNhdGNoKG8pe3Q9byBpbnN0YW5jZW9mIGlDP28uZXJyb3JzOltvXX1sZXR7X2ZpbmFsaXplcnM6cn09dGhpcztpZihyKXt0aGlzLl9maW5hbGl6ZXJzPW51bGw7Zm9yKGxldCBvIG9mIHIpdHJ5e2U0KG8pfWNhdGNoKGEpe3Q9dD8/W10sYSBpbnN0YW5jZW9mIGlDP3Q9Wy4uLnQsLi4uYS5lcnJvcnNdOnQucHVzaChhKX19aWYodCl0aHJvdyBuZXcgaUModCl9fWFkZCh0KXt2YXIgZTtpZih0JiZ0IT09dGhpcylpZih0aGlzLmNsb3NlZCllNCh0KTtlbHNle2lmKHQgaW5zdGFuY2VvZiBFbil7aWYodC5jbG9zZWR8fHQuX2hhc1BhcmVudCh0aGlzKSlyZXR1cm47dC5fYWRkUGFyZW50KHRoaXMpfSh0aGlzLl9maW5hbGl6ZXJzPW51bGwhPT0oZT10aGlzLl9maW5hbGl6ZXJzKSYmdm9pZCAwIT09ZT9lOltdKS5wdXNoKHQpfX1faGFzUGFyZW50KHQpe2xldHtfcGFyZW50YWdlOmV9PXRoaXM7cmV0dXJuIGU9PT10fHxBcnJheS5pc0FycmF5KGUpJiZlLmluY2x1ZGVzKHQpfV9hZGRQYXJlbnQodCl7bGV0e19wYXJlbnRhZ2U6ZX09dGhpczt0aGlzLl9wYXJlbnRhZ2U9QXJyYXkuaXNBcnJheShlKT8oZS5wdXNoKHQpLGUpOmU/W2UsdF06dH1fcmVtb3ZlUGFyZW50KHQpe2xldHtfcGFyZW50YWdlOmV9PXRoaXM7ZT09PXQ/dGhpcy5fcGFyZW50YWdlPW51bGw6QXJyYXkuaXNBcnJheShlKSYmT3AoZSx0KX1yZW1vdmUodCl7bGV0e19maW5hbGl6ZXJzOmV9PXRoaXM7ZSYmT3AoZSx0KSx0IGluc3RhbmNlb2YgRW4mJnQuX3JlbW92ZVBhcmVudCh0aGlzKX19O0VuLkVNUFRZPSgoKT0+e2xldCBuPW5ldyBFbjtyZXR1cm4gbi5jbG9zZWQ9ITAsbn0pKCk7dmFyIExBPUVuLkVNUFRZO2Z1bmN0aW9uIHJDKG4pe3JldHVybiBuIGluc3RhbmNlb2YgRW58fG4mJiJjbG9zZWQiaW4gbiYmbW4obi5yZW1vdmUpJiZtbihuLmFkZCkmJm1uKG4udW5zdWJzY3JpYmUpfWZ1bmN0aW9uIGU0KG4pe21uKG4pP24oKTpuLnVuc3Vic2NyaWJlKCl9dmFyIG1sPXtvblVuaGFuZGxlZEVycm9yOm51bGwsb25TdG9wcGVkTm90aWZpY2F0aW9uOm51bGwsUHJvbWlzZTp2b2lkIDAsdXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZzohMSx1c2VEZXByZWNhdGVkTmV4dENvbnRleHQ6ITF9LFBtPXtzZXRUaW1lb3V0KG4sdCwuLi5lKXtsZXR7ZGVsZWdhdGU6aX09UG07cmV0dXJuIGk/LnNldFRpbWVvdXQ/aS5zZXRUaW1lb3V0KG4sdCwuLi5lKTpzZXRUaW1lb3V0KG4sdCwuLi5lKX0sY2xlYXJUaW1lb3V0KG4pe2xldHtkZWxlZ2F0ZTp0fT1QbTtyZXR1cm4odD8uY2xlYXJUaW1lb3V0fHxjbGVhclRpbWVvdXQpKG4pfSxkZWxlZ2F0ZTp2b2lkIDB9O2Z1bmN0aW9uIG9DKG4pe1BtLnNldFRpbWVvdXQoKCk9PntsZXR7b25VbmhhbmRsZWRFcnJvcjp0fT1tbDtpZighdCl0aHJvdyBuO3Qobil9KX1mdW5jdGlvbiBmbCgpe312YXIgdDQ9QkEoIkMiLHZvaWQgMCx2b2lkIDApO2Z1bmN0aW9uIEJBKG4sdCxlKXtyZXR1cm57a2luZDpuLHZhbHVlOnQsZXJyb3I6ZX19dmFyIEZwPW51bGw7ZnVuY3Rpb24ga20obil7aWYobWwudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyl7bGV0IHQ9IUZwO2lmKHQmJihGcD17ZXJyb3JUaHJvd246ITEsZXJyb3I6bnVsbH0pLG4oKSx0KXtsZXR7ZXJyb3JUaHJvd246ZSxlcnJvcjppfT1GcDtpZihGcD1udWxsLGUpdGhyb3cgaX19ZWxzZSBuKCl9dmFyIE5wPWNsYXNzIGV4dGVuZHMgRW57Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmlzU3RvcHBlZD0hMSx0Pyh0aGlzLmRlc3RpbmF0aW9uPXQsckModCkmJnQuYWRkKHRoaXMpKTp0aGlzLmRlc3RpbmF0aW9uPWVyZX1zdGF0aWMgY3JlYXRlKHQsZSxpKXtyZXR1cm4gbmV3IGdsKHQsZSxpKX1uZXh0KHQpe3RoaXMuaXNTdG9wcGVkP0hBKEJBKCJOIix0LHZvaWQgMCksdGhpcyk6dGhpcy5fbmV4dCh0KX1lcnJvcih0KXt0aGlzLmlzU3RvcHBlZD9IQShCQSgiRSIsdm9pZCAwLHQpLHRoaXMpOih0aGlzLmlzU3RvcHBlZD0hMCx0aGlzLl9lcnJvcih0KSl9Y29tcGxldGUoKXt0aGlzLmlzU3RvcHBlZD9IQSh0NCx0aGlzKToodGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy5fY29tcGxldGUoKSl9dW5zdWJzY3JpYmUoKXt0aGlzLmNsb3NlZHx8KHRoaXMuaXNTdG9wcGVkPSEwLHN1cGVyLnVuc3Vic2NyaWJlKCksdGhpcy5kZXN0aW5hdGlvbj1udWxsKX1fbmV4dCh0KXt0aGlzLmRlc3RpbmF0aW9uLm5leHQodCl9X2Vycm9yKHQpe3RyeXt0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfWZpbmFsbHl7dGhpcy51bnN1YnNjcmliZSgpfX1fY29tcGxldGUoKXt0cnl7dGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfWZpbmFsbHl7dGhpcy51bnN1YnNjcmliZSgpfX19LEppZT1GdW5jdGlvbi5wcm90b3R5cGUuYmluZDtmdW5jdGlvbiBWQShuLHQpe3JldHVybiBKaWUuY2FsbChuLHQpfXZhciBnbD1jbGFzcyBleHRlbmRzIE5we2NvbnN0cnVjdG9yKHQsZSxpKXtsZXQgcjtpZihzdXBlcigpLG1uKHQpfHwhdClyPXtuZXh0OnQ/P3ZvaWQgMCxlcnJvcjplPz92b2lkIDAsY29tcGxldGU6aT8/dm9pZCAwfTtlbHNle2xldCBvO3RoaXMmJm1sLnVzZURlcHJlY2F0ZWROZXh0Q29udGV4dD8obz1PYmplY3QuY3JlYXRlKHQpLG8udW5zdWJzY3JpYmU9KCk9PnRoaXMudW5zdWJzY3JpYmUoKSxyPXtuZXh0OnQubmV4dCYmVkEodC5uZXh0LG8pLGVycm9yOnQuZXJyb3ImJlZBKHQuZXJyb3IsbyksY29tcGxldGU6dC5jb21wbGV0ZSYmVkEodC5jb21wbGV0ZSxvKX0pOnI9dH10aGlzLmRlc3RpbmF0aW9uPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnBhcnRpYWxPYnNlcnZlcj10fW5leHQodCl7bGV0e3BhcnRpYWxPYnNlcnZlcjplfT10aGlzO2lmKGUubmV4dCl0cnl7ZS5uZXh0KHQpfWNhdGNoKGkpe2FDKGkpfX1lcnJvcih0KXtsZXR7cGFydGlhbE9ic2VydmVyOmV9PXRoaXM7aWYoZS5lcnJvcil0cnl7ZS5lcnJvcih0KX1jYXRjaChpKXthQyhpKX1lbHNlIGFDKHQpfWNvbXBsZXRlKCl7bGV0e3BhcnRpYWxPYnNlcnZlcjp0fT10aGlzO2lmKHQuY29tcGxldGUpdHJ5e3QuY29tcGxldGUoKX1jYXRjaChlKXthQyhlKX19fShyKX19O2Z1bmN0aW9uIGFDKG4pe21sLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc/ZnVuY3Rpb24obil7bWwudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyYmRnAmJihGcC5lcnJvclRocm93bj0hMCxGcC5lcnJvcj1uKX0obik6b0Mobil9ZnVuY3Rpb24gSEEobix0KXtsZXR7b25TdG9wcGVkTm90aWZpY2F0aW9uOmV9PW1sO2UmJlBtLnNldFRpbWVvdXQoKCk9PmUobix0KSl9dmFyIGVyZT17Y2xvc2VkOiEwLG5leHQ6ZmwsZXJyb3I6ZnVuY3Rpb24obil7dGhyb3cgbn0sY29tcGxldGU6Zmx9LE9tPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5vYnNlcnZhYmxlfHwiQEBvYnNlcnZhYmxlIjtmdW5jdGlvbiBzYShuKXtyZXR1cm4gbn1mdW5jdGlvbiBqQShuKXtyZXR1cm4gMD09PW4ubGVuZ3RoP3NhOjE9PT1uLmxlbmd0aD9uWzBdOmZ1bmN0aW9uKGUpe3JldHVybiBuLnJlZHVjZSgoaSxyKT0+cihpKSxlKX19dmFyIEt0PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7ZSYmKHRoaXMuX3N1YnNjcmliZT1lKX1saWZ0KGUpe2xldCBpPW5ldyBuO3JldHVybiBpLnNvdXJjZT10aGlzLGkub3BlcmF0b3I9ZSxpfXN1YnNjcmliZShlLGkscil7bGV0IG89ZnVuY3Rpb24obil7cmV0dXJuIG4mJm4gaW5zdGFuY2VvZiBOcHx8ZnVuY3Rpb24obil7cmV0dXJuIG4mJm1uKG4ubmV4dCkmJm1uKG4uZXJyb3IpJiZtbihuLmNvbXBsZXRlKX0obikmJnJDKG4pfShlKT9lOm5ldyBnbChlLGkscik7cmV0dXJuIGttKCgpPT57bGV0e29wZXJhdG9yOmEsc291cmNlOnN9PXRoaXM7by5hZGQoYT9hLmNhbGwobyxzKTpzP3RoaXMuX3N1YnNjcmliZShvKTp0aGlzLl90cnlTdWJzY3JpYmUobykpfSksb31fdHJ5U3Vic2NyaWJlKGUpe3RyeXtyZXR1cm4gdGhpcy5fc3Vic2NyaWJlKGUpfWNhdGNoKGkpe2UuZXJyb3IoaSl9fWZvckVhY2goZSxpKXtyZXR1cm4gbmV3KGk9bzQoaSkpKChyLG8pPT57bGV0IGE9bmV3IGdsKHtuZXh0OnM9Pnt0cnl7ZShzKX1jYXRjaChsKXtvKGwpLGEudW5zdWJzY3JpYmUoKX19LGVycm9yOm8sY29tcGxldGU6cn0pO3RoaXMuc3Vic2NyaWJlKGEpfSl9X3N1YnNjcmliZShlKXt2YXIgaTtyZXR1cm4gbnVsbD09PShpPXRoaXMuc291cmNlKXx8dm9pZCAwPT09aT92b2lkIDA6aS5zdWJzY3JpYmUoZSl9W09tXSgpe3JldHVybiB0aGlzfXBpcGUoLi4uZSl7cmV0dXJuIGpBKGUpKHRoaXMpfXRvUHJvbWlzZShlKXtyZXR1cm4gbmV3KGU9bzQoZSkpKChpLHIpPT57bGV0IG87dGhpcy5zdWJzY3JpYmUoYT0+bz1hLGE9PnIoYSksKCk9PmkobykpfSl9fXJldHVybiBuLmNyZWF0ZT10PT5uZXcgbih0KSxufSkoKTtmdW5jdGlvbiBvNChuKXt2YXIgdDtyZXR1cm4gbnVsbCE9PSh0PW4/P21sLlByb21pc2UpJiZ2b2lkIDAhPT10P3Q6UHJvbWlzZX1mdW5jdGlvbiBHQShuKXtyZXR1cm4gbW4obj8ubGlmdCl9ZnVuY3Rpb24gWXQobil7cmV0dXJuIHQ9PntpZihHQSh0KSlyZXR1cm4gdC5saWZ0KGZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4gbihlLHRoaXMpfWNhdGNoKGkpe3RoaXMuZXJyb3IoaSl9fSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGUiKX19ZnVuY3Rpb24gSHQobix0LGUsaSxyKXtyZXR1cm4gbmV3IFRfKG4sdCxlLGkscil9dmFyIFdBLFRfPWNsYXNzIGV4dGVuZHMgTnB7Y29uc3RydWN0b3IodCxlLGkscixvLGEpe3N1cGVyKHQpLHRoaXMub25GaW5hbGl6ZT1vLHRoaXMuc2hvdWxkVW5zdWJzY3JpYmU9YSx0aGlzLl9uZXh0PWU/ZnVuY3Rpb24ocyl7dHJ5e2Uocyl9Y2F0Y2gobCl7dC5lcnJvcihsKX19OnN1cGVyLl9uZXh0LHRoaXMuX2Vycm9yPXI/ZnVuY3Rpb24ocyl7dHJ5e3Iocyl9Y2F0Y2gobCl7dC5lcnJvcihsKX1maW5hbGx5e3RoaXMudW5zdWJzY3JpYmUoKX19OnN1cGVyLl9lcnJvcix0aGlzLl9jb21wbGV0ZT1pP2Z1bmN0aW9uKCl7dHJ5e2koKX1jYXRjaChzKXt0LmVycm9yKHMpfWZpbmFsbHl7dGhpcy51bnN1YnNjcmliZSgpfX06c3VwZXIuX2NvbXBsZXRlfXVuc3Vic2NyaWJlKCl7dmFyIHQ7aWYoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmV8fHRoaXMuc2hvdWxkVW5zdWJzY3JpYmUoKSl7bGV0e2Nsb3NlZDplfT10aGlzO3N1cGVyLnVuc3Vic2NyaWJlKCksIWUmJihudWxsPT09KHQ9dGhpcy5vbkZpbmFsaXplKXx8dm9pZCAwPT09dHx8dC5jYWxsKHRoaXMpKX19fSxEXz1jbGFzcyBleHRlbmRzIEt0e2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoKSx0aGlzLnNvdXJjZT10LHRoaXMuc3ViamVjdEZhY3Rvcnk9ZSx0aGlzLl9zdWJqZWN0PW51bGwsdGhpcy5fcmVmQ291bnQ9MCx0aGlzLl9jb25uZWN0aW9uPW51bGwsR0EodCkmJih0aGlzLmxpZnQ9dC5saWZ0KX1fc3Vic2NyaWJlKHQpe3JldHVybiB0aGlzLmdldFN1YmplY3QoKS5zdWJzY3JpYmUodCl9Z2V0U3ViamVjdCgpe2xldCB0PXRoaXMuX3N1YmplY3Q7cmV0dXJuKCF0fHx0LmlzU3RvcHBlZCkmJih0aGlzLl9zdWJqZWN0PXRoaXMuc3ViamVjdEZhY3RvcnkoKSksdGhpcy5fc3ViamVjdH1fdGVhcmRvd24oKXt0aGlzLl9yZWZDb3VudD0wO2xldHtfY29ubmVjdGlvbjp0fT10aGlzO3RoaXMuX3N1YmplY3Q9dGhpcy5fY29ubmVjdGlvbj1udWxsLHQ/LnVuc3Vic2NyaWJlKCl9Y29ubmVjdCgpe2xldCB0PXRoaXMuX2Nvbm5lY3Rpb247aWYoIXQpe3Q9dGhpcy5fY29ubmVjdGlvbj1uZXcgRW47bGV0IGU9dGhpcy5nZXRTdWJqZWN0KCk7dC5hZGQodGhpcy5zb3VyY2Uuc3Vic2NyaWJlKEh0KGUsdm9pZCAwLCgpPT57dGhpcy5fdGVhcmRvd24oKSxlLmNvbXBsZXRlKCl9LGk9Pnt0aGlzLl90ZWFyZG93bigpLGUuZXJyb3IoaSl9LCgpPT50aGlzLl90ZWFyZG93bigpKSkpLHQuY2xvc2VkJiYodGhpcy5fY29ubmVjdGlvbj1udWxsLHQ9RW4uRU1QVFkpfXJldHVybiB0fXJlZkNvdW50KCl7cmV0dXJuIFl0KChuLHQpPT57bGV0IGU9bnVsbDtuLl9yZWZDb3VudCsrO2xldCBpPUh0KHQsdm9pZCAwLHZvaWQgMCx2b2lkIDAsKCk9PntpZighbnx8bi5fcmVmQ291bnQ8PTB8fDA8LS1uLl9yZWZDb3VudClyZXR1cm4gdm9pZChlPW51bGwpO2xldCByPW4uX2Nvbm5lY3Rpb24sbz1lO2U9bnVsbCxyJiYoIW98fHI9PT1vKSYmci51bnN1YnNjcmliZSgpLHQudW5zdWJzY3JpYmUoKX0pO24uc3Vic2NyaWJlKGkpLGkuY2xvc2VkfHwoZT1uLmNvbm5lY3QoKSl9KSh0aGlzKX19LEZtPXtzY2hlZHVsZShuKXtsZXQgdD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUsZT1jYW5jZWxBbmltYXRpb25GcmFtZSx7ZGVsZWdhdGU6aX09Rm07aSYmKHQ9aS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUsZT1pLmNhbmNlbEFuaW1hdGlvbkZyYW1lKTtsZXQgcj10KG89PntlPXZvaWQgMCxuKG8pfSk7cmV0dXJuIG5ldyBFbigoKT0+ZT8uKHIpKX0scmVxdWVzdEFuaW1hdGlvbkZyYW1lKC4uLm4pe2xldHtkZWxlZ2F0ZTp0fT1GbTtyZXR1cm4odD8ucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUpKC4uLm4pfSxjYW5jZWxBbmltYXRpb25GcmFtZSguLi5uKXtsZXR7ZGVsZWdhdGU6dH09Rm07cmV0dXJuKHQ/LmNhbmNlbEFuaW1hdGlvbkZyYW1lfHxjYW5jZWxBbmltYXRpb25GcmFtZSkoLi4ubil9LGRlbGVnYXRlOnZvaWQgMH0sczQ9Um0obj0+ZnVuY3Rpb24oKXtuKHRoaXMpLHRoaXMubmFtZT0iT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IiLHRoaXMubWVzc2FnZT0ib2JqZWN0IHVuc3Vic2NyaWJlZCJ9KSxFZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgS3R7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuY2xvc2VkPSExLHRoaXMuY3VycmVudE9ic2VydmVycz1udWxsLHRoaXMub2JzZXJ2ZXJzPVtdLHRoaXMuaXNTdG9wcGVkPSExLHRoaXMuaGFzRXJyb3I9ITEsdGhpcy50aHJvd25FcnJvcj1udWxsfWxpZnQoZSl7bGV0IGk9bmV3IHNDKHRoaXMsdGhpcyk7cmV0dXJuIGkub3BlcmF0b3I9ZSxpfV90aHJvd0lmQ2xvc2VkKCl7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IHM0fW5leHQoZSl7a20oKCk9PntpZih0aGlzLl90aHJvd0lmQ2xvc2VkKCksIXRoaXMuaXNTdG9wcGVkKXt0aGlzLmN1cnJlbnRPYnNlcnZlcnN8fCh0aGlzLmN1cnJlbnRPYnNlcnZlcnM9QXJyYXkuZnJvbSh0aGlzLm9ic2VydmVycykpO2ZvcihsZXQgaSBvZiB0aGlzLmN1cnJlbnRPYnNlcnZlcnMpaS5uZXh0KGUpfX0pfWVycm9yKGUpe2ttKCgpPT57aWYodGhpcy5fdGhyb3dJZkNsb3NlZCgpLCF0aGlzLmlzU3RvcHBlZCl7dGhpcy5oYXNFcnJvcj10aGlzLmlzU3RvcHBlZD0hMCx0aGlzLnRocm93bkVycm9yPWU7bGV0e29ic2VydmVyczppfT10aGlzO2Zvcig7aS5sZW5ndGg7KWkuc2hpZnQoKS5lcnJvcihlKX19KX1jb21wbGV0ZSgpe2ttKCgpPT57aWYodGhpcy5fdGhyb3dJZkNsb3NlZCgpLCF0aGlzLmlzU3RvcHBlZCl7dGhpcy5pc1N0b3BwZWQ9ITA7bGV0e29ic2VydmVyczplfT10aGlzO2Zvcig7ZS5sZW5ndGg7KWUuc2hpZnQoKS5jb21wbGV0ZSgpfX0pfXVuc3Vic2NyaWJlKCl7dGhpcy5pc1N0b3BwZWQ9dGhpcy5jbG9zZWQ9ITAsdGhpcy5vYnNlcnZlcnM9dGhpcy5jdXJyZW50T2JzZXJ2ZXJzPW51bGx9Z2V0IG9ic2VydmVkKCl7dmFyIGU7cmV0dXJuKG51bGw9PT0oZT10aGlzLm9ic2VydmVycyl8fHZvaWQgMD09PWU/dm9pZCAwOmUubGVuZ3RoKT4wfV90cnlTdWJzY3JpYmUoZSl7cmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSxzdXBlci5fdHJ5U3Vic2NyaWJlKGUpfV9zdWJzY3JpYmUoZSl7cmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSx0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKGUpLHRoaXMuX2lubmVyU3Vic2NyaWJlKGUpfV9pbm5lclN1YnNjcmliZShlKXtsZXR7aGFzRXJyb3I6aSxpc1N0b3BwZWQ6cixvYnNlcnZlcnM6b309dGhpcztyZXR1cm4gaXx8cj9MQToodGhpcy5jdXJyZW50T2JzZXJ2ZXJzPW51bGwsby5wdXNoKGUpLG5ldyBFbigoKT0+e3RoaXMuY3VycmVudE9ic2VydmVycz1udWxsLE9wKG8sZSl9KSl9X2NoZWNrRmluYWxpemVkU3RhdHVzZXMoZSl7bGV0e2hhc0Vycm9yOmksdGhyb3duRXJyb3I6cixpc1N0b3BwZWQ6b309dGhpcztpP2UuZXJyb3Iocik6byYmZS5jb21wbGV0ZSgpfWFzT2JzZXJ2YWJsZSgpe2xldCBlPW5ldyBLdDtyZXR1cm4gZS5zb3VyY2U9dGhpcyxlfX1yZXR1cm4gbi5jcmVhdGU9KHQsZSk9Pm5ldyBzQyh0LGUpLG59KSgpLHNDPWNsYXNzIGV4dGVuZHMgRWV7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuZGVzdGluYXRpb249dCx0aGlzLnNvdXJjZT1lfW5leHQodCl7dmFyIGUsaTtudWxsPT09KGk9bnVsbD09PShlPXRoaXMuZGVzdGluYXRpb24pfHx2b2lkIDA9PT1lP3ZvaWQgMDplLm5leHQpfHx2b2lkIDA9PT1pfHxpLmNhbGwoZSx0KX1lcnJvcih0KXt2YXIgZSxpO251bGw9PT0oaT1udWxsPT09KGU9dGhpcy5kZXN0aW5hdGlvbil8fHZvaWQgMD09PWU/dm9pZCAwOmUuZXJyb3IpfHx2b2lkIDA9PT1pfHxpLmNhbGwoZSx0KX1jb21wbGV0ZSgpe3ZhciB0LGU7bnVsbD09PShlPW51bGw9PT0odD10aGlzLmRlc3RpbmF0aW9uKXx8dm9pZCAwPT09dD92b2lkIDA6dC5jb21wbGV0ZSl8fHZvaWQgMD09PWV8fGUuY2FsbCh0KX1fc3Vic2NyaWJlKHQpe3ZhciBlLGk7cmV0dXJuIG51bGwhPT0oaT1udWxsPT09KGU9dGhpcy5zb3VyY2UpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnN1YnNjcmliZSh0KSkmJnZvaWQgMCE9PWk/aTpMQX19LHhyPWNsYXNzIGV4dGVuZHMgRWV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLl92YWx1ZT10fWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLmdldFZhbHVlKCl9X3N1YnNjcmliZSh0KXtsZXQgZT1zdXBlci5fc3Vic2NyaWJlKHQpO3JldHVybiFlLmNsb3NlZCYmdC5uZXh0KHRoaXMuX3ZhbHVlKSxlfWdldFZhbHVlKCl7bGV0e2hhc0Vycm9yOnQsdGhyb3duRXJyb3I6ZSxfdmFsdWU6aX09dGhpcztpZih0KXRocm93IGU7cmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSxpfW5leHQodCl7c3VwZXIubmV4dCh0aGlzLl92YWx1ZT10KX19LElfPXtub3c6KCk9PihJXy5kZWxlZ2F0ZXx8RGF0ZSkubm93KCksZGVsZWdhdGU6dm9pZCAwfSxMcD1jbGFzcyBleHRlbmRzIEVle2NvbnN0cnVjdG9yKHQ9MS8wLGU9MS8wLGk9SV8pe3N1cGVyKCksdGhpcy5fYnVmZmVyU2l6ZT10LHRoaXMuX3dpbmRvd1RpbWU9ZSx0aGlzLl90aW1lc3RhbXBQcm92aWRlcj1pLHRoaXMuX2J1ZmZlcj1bXSx0aGlzLl9pbmZpbml0ZVRpbWVXaW5kb3c9ITAsdGhpcy5faW5maW5pdGVUaW1lV2luZG93PWU9PT0xLzAsdGhpcy5fYnVmZmVyU2l6ZT1NYXRoLm1heCgxLHQpLHRoaXMuX3dpbmRvd1RpbWU9TWF0aC5tYXgoMSxlKX1uZXh0KHQpe2xldHtpc1N0b3BwZWQ6ZSxfYnVmZmVyOmksX2luZmluaXRlVGltZVdpbmRvdzpyLF90aW1lc3RhbXBQcm92aWRlcjpvLF93aW5kb3dUaW1lOmF9PXRoaXM7ZXx8KGkucHVzaCh0KSwhciYmaS5wdXNoKG8ubm93KCkrYSkpLHRoaXMuX3RyaW1CdWZmZXIoKSxzdXBlci5uZXh0KHQpfV9zdWJzY3JpYmUodCl7dGhpcy5fdGhyb3dJZkNsb3NlZCgpLHRoaXMuX3RyaW1CdWZmZXIoKTtsZXQgZT10aGlzLl9pbm5lclN1YnNjcmliZSh0KSx7X2luZmluaXRlVGltZVdpbmRvdzppLF9idWZmZXI6cn09dGhpcyxvPXIuc2xpY2UoKTtmb3IobGV0IGE9MDthPG8ubGVuZ3RoJiYhdC5jbG9zZWQ7YSs9aT8xOjIpdC5uZXh0KG9bYV0pO3JldHVybiB0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKHQpLGV9X3RyaW1CdWZmZXIoKXtsZXR7X2J1ZmZlclNpemU6dCxfdGltZXN0YW1wUHJvdmlkZXI6ZSxfYnVmZmVyOmksX2luZmluaXRlVGltZVdpbmRvdzpyfT10aGlzLG89KHI/MToyKSp0O2lmKHQ8MS8wJiZvPGkubGVuZ3RoJiZpLnNwbGljZSgwLGkubGVuZ3RoLW8pLCFyKXtsZXQgYT1lLm5vdygpLHM9MDtmb3IobGV0IGw9MTtsPGkubGVuZ3RoJiZpW2xdPD1hO2wrPTIpcz1sO3MmJmkuc3BsaWNlKDAscysxKX19fSxsQz1jbGFzcyBleHRlbmRzIEVue2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoKX1zY2hlZHVsZSh0LGU9MCl7cmV0dXJuIHRoaXN9fSxBXz17c2V0SW50ZXJ2YWwobix0LC4uLmUpe2xldHtkZWxlZ2F0ZTppfT1BXztyZXR1cm4gaT8uc2V0SW50ZXJ2YWw/aS5zZXRJbnRlcnZhbChuLHQsLi4uZSk6c2V0SW50ZXJ2YWwobix0LC4uLmUpfSxjbGVhckludGVydmFsKG4pe2xldHtkZWxlZ2F0ZTp0fT1BXztyZXR1cm4odD8uY2xlYXJJbnRlcnZhbHx8Y2xlYXJJbnRlcnZhbCkobil9LGRlbGVnYXRlOnZvaWQgMH0sSmw9Y2xhc3MgZXh0ZW5kcyBsQ3tjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy5zY2hlZHVsZXI9dCx0aGlzLndvcms9ZSx0aGlzLnBlbmRpbmc9ITF9c2NoZWR1bGUodCxlPTApe3ZhciBpO2lmKHRoaXMuY2xvc2VkKXJldHVybiB0aGlzO3RoaXMuc3RhdGU9dDtsZXQgcj10aGlzLmlkLG89dGhpcy5zY2hlZHVsZXI7cmV0dXJuIG51bGwhPXImJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQobyxyLGUpKSx0aGlzLnBlbmRpbmc9ITAsdGhpcy5kZWxheT1lLHRoaXMuaWQ9bnVsbCE9PShpPXRoaXMuaWQpJiZ2b2lkIDAhPT1pP2k6dGhpcy5yZXF1ZXN0QXN5bmNJZChvLHRoaXMuaWQsZSksdGhpc31yZXF1ZXN0QXN5bmNJZCh0LGUsaT0wKXtyZXR1cm4gQV8uc2V0SW50ZXJ2YWwodC5mbHVzaC5iaW5kKHQsdGhpcyksaSl9cmVjeWNsZUFzeW5jSWQodCxlLGk9MCl7aWYobnVsbCE9aSYmdGhpcy5kZWxheT09PWkmJiExPT09dGhpcy5wZW5kaW5nKXJldHVybiBlO251bGwhPWUmJkFfLmNsZWFySW50ZXJ2YWwoZSl9ZXhlY3V0ZSh0LGUpe2lmKHRoaXMuY2xvc2VkKXJldHVybiBuZXcgRXJyb3IoImV4ZWN1dGluZyBhIGNhbmNlbGxlZCBhY3Rpb24iKTt0aGlzLnBlbmRpbmc9ITE7bGV0IGk9dGhpcy5fZXhlY3V0ZSh0LGUpO2lmKGkpcmV0dXJuIGk7ITE9PT10aGlzLnBlbmRpbmcmJm51bGwhPXRoaXMuaWQmJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsdGhpcy5pZCxudWxsKSl9X2V4ZWN1dGUodCxlKXtsZXQgcixpPSExO3RyeXt0aGlzLndvcmsodCl9Y2F0Y2gobyl7aT0hMCxyPW98fG5ldyBFcnJvcigiU2NoZWR1bGVkIGFjdGlvbiB0aHJldyBmYWxzeSBlcnJvciIpfWlmKGkpcmV0dXJuIHRoaXMudW5zdWJzY3JpYmUoKSxyfXVuc3Vic2NyaWJlKCl7aWYoIXRoaXMuY2xvc2VkKXtsZXR7aWQ6dCxzY2hlZHVsZXI6ZX09dGhpcyx7YWN0aW9uczppfT1lO3RoaXMud29yaz10aGlzLnN0YXRlPXRoaXMuc2NoZWR1bGVyPW51bGwsdGhpcy5wZW5kaW5nPSExLE9wKGksdGhpcyksbnVsbCE9dCYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZChlLHQsbnVsbCkpLHRoaXMuZGVsYXk9bnVsbCxzdXBlci51bnN1YnNjcmliZSgpfX19LGlyZT0xLHFBPXt9O2Z1bmN0aW9uIGw0KG4pe3JldHVybiBuIGluIHFBJiYoZGVsZXRlIHFBW25dLCEwKX12YXIgYzQ9e3NldEltbWVkaWF0ZShuKXtsZXQgdD1pcmUrKztyZXR1cm4gcUFbdF09ITAsV0F8fChXQT1Qcm9taXNlLnJlc29sdmUoKSksV0EudGhlbigoKT0+bDQodCkmJm4oKSksdH0sY2xlYXJJbW1lZGlhdGUobil7bDQobil9fSx7c2V0SW1tZWRpYXRlOnJyZSxjbGVhckltbWVkaWF0ZTpvcmV9PWM0LFJfPXtzZXRJbW1lZGlhdGUoLi4ubil7bGV0e2RlbGVnYXRlOnR9PVJfO3JldHVybih0Py5zZXRJbW1lZGlhdGV8fHJyZSkoLi4ubil9LGNsZWFySW1tZWRpYXRlKG4pe2xldHtkZWxlZ2F0ZTp0fT1SXztyZXR1cm4odD8uY2xlYXJJbW1lZGlhdGV8fG9yZSkobil9LGRlbGVnYXRlOnZvaWQgMH0sUWQ9Y2xhc3N7Y29uc3RydWN0b3IodCxlPVFkLm5vdyl7dGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yPXQsdGhpcy5ub3c9ZX1zY2hlZHVsZSh0LGU9MCxpKXtyZXR1cm4gbmV3IHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcih0aGlzLHQpLnNjaGVkdWxlKGksZSl9fTtRZC5ub3c9SV8ubm93O3ZhciAkbD1jbGFzcyBleHRlbmRzIFFke2NvbnN0cnVjdG9yKHQsZT1RZC5ub3cpe3N1cGVyKHQsZSksdGhpcy5hY3Rpb25zPVtdLHRoaXMuX2FjdGl2ZT0hMX1mbHVzaCh0KXtsZXQgaSx7YWN0aW9uczplfT10aGlzO2lmKHRoaXMuX2FjdGl2ZSllLnB1c2godCk7ZWxzZXt0aGlzLl9hY3RpdmU9ITA7ZG97aWYoaT10LmV4ZWN1dGUodC5zdGF0ZSx0LmRlbGF5KSlicmVha313aGlsZSh0PWUuc2hpZnQoKSk7aWYodGhpcy5fYWN0aXZlPSExLGkpe2Zvcig7dD1lLnNoaWZ0KCk7KXQudW5zdWJzY3JpYmUoKTt0aHJvdyBpfX19fSxObT1uZXcgY2xhc3MgZXh0ZW5kcyAkbHtmbHVzaCh0KXt0aGlzLl9hY3RpdmU9ITA7bGV0IGU9dGhpcy5fc2NoZWR1bGVkO3RoaXMuX3NjaGVkdWxlZD12b2lkIDA7bGV0IHIse2FjdGlvbnM6aX09dGhpczt0PXR8fGkuc2hpZnQoKTtkb3tpZihyPXQuZXhlY3V0ZSh0LnN0YXRlLHQuZGVsYXkpKWJyZWFrfXdoaWxlKCh0PWlbMF0pJiZ0LmlkPT09ZSYmaS5zaGlmdCgpKTtpZih0aGlzLl9hY3RpdmU9ITEscil7Zm9yKDsodD1pWzBdKSYmdC5pZD09PWUmJmkuc2hpZnQoKTspdC51bnN1YnNjcmliZSgpO3Rocm93IHJ9fX0oY2xhc3MgZXh0ZW5kcyBKbHtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy5zY2hlZHVsZXI9dCx0aGlzLndvcms9ZX1yZXF1ZXN0QXN5bmNJZCh0LGUsaT0wKXtyZXR1cm4gbnVsbCE9PWkmJmk+MD9zdXBlci5yZXF1ZXN0QXN5bmNJZCh0LGUsaSk6KHQuYWN0aW9ucy5wdXNoKHRoaXMpLHQuX3NjaGVkdWxlZHx8KHQuX3NjaGVkdWxlZD1SXy5zZXRJbW1lZGlhdGUodC5mbHVzaC5iaW5kKHQsdm9pZCAwKSkpKX1yZWN5Y2xlQXN5bmNJZCh0LGUsaT0wKXt2YXIgcjtpZihudWxsIT1pP2k+MDp0aGlzLmRlbGF5PjApcmV0dXJuIHN1cGVyLnJlY3ljbGVBc3luY0lkKHQsZSxpKTtsZXR7YWN0aW9uczpvfT10O251bGwhPWUmJihudWxsPT09KHI9b1tvLmxlbmd0aC0xXSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuaWQpIT09ZSYmKFJfLmNsZWFySW1tZWRpYXRlKGUpLHQuX3NjaGVkdWxlZD12b2lkIDApfX0pLFFjPW5ldyAkbChKbCksZDQ9UWMsWEE9bmV3IGNsYXNzIGV4dGVuZHMgJGx7fShjbGFzcyBleHRlbmRzIEpse2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnNjaGVkdWxlcj10LHRoaXMud29yaz1lfXNjaGVkdWxlKHQsZT0wKXtyZXR1cm4gZT4wP3N1cGVyLnNjaGVkdWxlKHQsZSk6KHRoaXMuZGVsYXk9ZSx0aGlzLnN0YXRlPXQsdGhpcy5zY2hlZHVsZXIuZmx1c2godGhpcyksdGhpcyl9ZXhlY3V0ZSh0LGUpe3JldHVybiBlPjB8fHRoaXMuY2xvc2VkP3N1cGVyLmV4ZWN1dGUodCxlKTp0aGlzLl9leGVjdXRlKHQsZSl9cmVxdWVzdEFzeW5jSWQodCxlLGk9MCl7cmV0dXJuIG51bGwhPWkmJmk+MHx8bnVsbD09aSYmdGhpcy5kZWxheT4wP3N1cGVyLnJlcXVlc3RBc3luY0lkKHQsZSxpKToodC5mbHVzaCh0aGlzKSwwKX19KSxZQT1uZXcgY2xhc3MgZXh0ZW5kcyAkbHtmbHVzaCh0KXt0aGlzLl9hY3RpdmU9ITA7bGV0IGU9dGhpcy5fc2NoZWR1bGVkO3RoaXMuX3NjaGVkdWxlZD12b2lkIDA7bGV0IHIse2FjdGlvbnM6aX09dGhpczt0PXR8fGkuc2hpZnQoKTtkb3tpZihyPXQuZXhlY3V0ZSh0LnN0YXRlLHQuZGVsYXkpKWJyZWFrfXdoaWxlKCh0PWlbMF0pJiZ0LmlkPT09ZSYmaS5zaGlmdCgpKTtpZih0aGlzLl9hY3RpdmU9ITEscil7Zm9yKDsodD1pWzBdKSYmdC5pZD09PWUmJmkuc2hpZnQoKTspdC51bnN1YnNjcmliZSgpO3Rocm93IHJ9fX0oY2xhc3MgZXh0ZW5kcyBKbHtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy5zY2hlZHVsZXI9dCx0aGlzLndvcms9ZX1yZXF1ZXN0QXN5bmNJZCh0LGUsaT0wKXtyZXR1cm4gbnVsbCE9PWkmJmk+MD9zdXBlci5yZXF1ZXN0QXN5bmNJZCh0LGUsaSk6KHQuYWN0aW9ucy5wdXNoKHRoaXMpLHQuX3NjaGVkdWxlZHx8KHQuX3NjaGVkdWxlZD1GbS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnQuZmx1c2godm9pZCAwKSkpKX1yZWN5Y2xlQXN5bmNJZCh0LGUsaT0wKXt2YXIgcjtpZihudWxsIT1pP2k+MDp0aGlzLmRlbGF5PjApcmV0dXJuIHN1cGVyLnJlY3ljbGVBc3luY0lkKHQsZSxpKTtsZXR7YWN0aW9uczpvfT10O251bGwhPWUmJihudWxsPT09KHI9b1tvLmxlbmd0aC0xXSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuaWQpIT09ZSYmKEZtLmNhbmNlbEFuaW1hdGlvbkZyYW1lKGUpLHQuX3NjaGVkdWxlZD12b2lkIDApfX0pLEtyPW5ldyBLdChuPT5uLmNvbXBsZXRlKCkpO2Z1bmN0aW9uIGZDKG4pe3JldHVybiBuJiZtbihuLnNjaGVkdWxlKX1mdW5jdGlvbiBRQShuKXtyZXR1cm4gbltuLmxlbmd0aC0xXX1mdW5jdGlvbiBlYyhuKXtyZXR1cm4gbW4oUUEobikpP24ucG9wKCk6dm9pZCAwfWZ1bmN0aW9uIHRjKG4pe3JldHVybiBmQyhRQShuKSk/bi5wb3AoKTp2b2lkIDB9dmFyIEI0PSRWKEw0KCksMSkse19fZGVjb3JhdGU6VjQsX19hd2FpdGVyOkg0LF9fYXdhaXQ6dkMsX19hc3luY0dlbmVyYXRvcjp6NCxfX2FzeW5jVmFsdWVzOlU0fT1CNC5kZWZhdWx0LEJtPW49Pm4mJiJudW1iZXIiPT10eXBlb2Ygbi5sZW5ndGgmJiJmdW5jdGlvbiIhPXR5cGVvZiBuO2Z1bmN0aW9uIHlDKG4pe3JldHVybiBtbihuPy50aGVuKX1mdW5jdGlvbiB4QyhuKXtyZXR1cm4gbW4obltPbV0pfWZ1bmN0aW9uIENDKG4pe3JldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvciYmbW4obj8uW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSl9ZnVuY3Rpb24gTUMobil7cmV0dXJuIG5ldyBUeXBlRXJyb3IoYFlvdSBwcm92aWRlZCAke251bGwhPT1uJiYib2JqZWN0Ij09dHlwZW9mIG4/ImFuIGludmFsaWQgb2JqZWN0IjpgJyR7bn0nYH0gd2hlcmUgYSBzdHJlYW0gd2FzIGV4cGVjdGVkLiBZb3UgY2FuIHByb3ZpZGUgYW4gT2JzZXJ2YWJsZSwgUHJvbWlzZSwgUmVhZGFibGVTdHJlYW0sIEFycmF5LCBBc3luY0l0ZXJhYmxlLCBvciBJdGVyYWJsZS5gKX12YXIgd0M9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yP1N5bWJvbC5pdGVyYXRvcjoiQEBpdGVyYXRvciI7ZnVuY3Rpb24gU0Mobil7cmV0dXJuIG1uKG4/Llt3Q10pfWZ1bmN0aW9uIEVDKG4pe3JldHVybiB6NCh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbiooKXtsZXQgZT1uLmdldFJlYWRlcigpO3RyeXtmb3IoOzspe2xldHt2YWx1ZTppLGRvbmU6cn09eWllbGQgdkMoZS5yZWFkKCkpO2lmKHIpcmV0dXJuIHlpZWxkIHZDKHZvaWQgMCk7eWllbGQgeWllbGQgdkMoaSl9fWZpbmFsbHl7ZS5yZWxlYXNlTG9jaygpfX0pfWZ1bmN0aW9uIFRDKG4pe3JldHVybiBtbihuPy5nZXRSZWFkZXIpfWZ1bmN0aW9uIGNpKG4pe2lmKG4gaW5zdGFuY2VvZiBLdClyZXR1cm4gbjtpZihudWxsIT1uKXtpZih4QyhuKSlyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG5ldyBLdCh0PT57bGV0IGU9bltPbV0oKTtpZihtbihlLnN1YnNjcmliZSkpcmV0dXJuIGUuc3Vic2NyaWJlKHQpO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlIil9KX0obik7aWYoQm0obikpcmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBuZXcgS3QodD0+e2ZvcihsZXQgZT0wO2U8bi5sZW5ndGgmJiF0LmNsb3NlZDtlKyspdC5uZXh0KG5bZV0pO3QuY29tcGxldGUoKX0pfShuKTtpZih5QyhuKSlyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG5ldyBLdCh0PT57bi50aGVuKGU9Pnt0LmNsb3NlZHx8KHQubmV4dChlKSx0LmNvbXBsZXRlKCkpfSxlPT50LmVycm9yKGUpKS50aGVuKG51bGwsb0MpfSl9KG4pO2lmKENDKG4pKXJldHVybiBqNChuKTtpZihTQyhuKSlyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG5ldyBLdCh0PT57Zm9yKGxldCBlIG9mIG4paWYodC5uZXh0KGUpLHQuY2xvc2VkKXJldHVybjt0LmNvbXBsZXRlKCl9KX0obik7aWYoVEMobikpcmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBqNChFQyhuKSl9KG4pfXRocm93IE1DKG4pfWZ1bmN0aW9uIGo0KG4pe3JldHVybiBuZXcgS3QodD0+eyhmdW5jdGlvbihuLHQpe3ZhciBlLGkscixvO3JldHVybiBINCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dHJ5e2ZvcihlPVU0KG4pOyEoaT15aWVsZCBlLm5leHQoKSkuZG9uZTspaWYodC5uZXh0KGkudmFsdWUpLHQuY2xvc2VkKXJldHVybn1jYXRjaChhKXtyPXtlcnJvcjphfX1maW5hbGx5e3RyeXtpJiYhaS5kb25lJiYobz1lLnJldHVybikmJih5aWVsZCBvLmNhbGwoZSkpfWZpbmFsbHl7aWYocil0aHJvdyByLmVycm9yfX10LmNvbXBsZXRlKCl9KX0pKG4sdCkuY2F0Y2goZT0+dC5lcnJvcihlKSl9KX1mdW5jdGlvbiBFYShuLHQsZSxpPTAscj0hMSl7bGV0IG89dC5zY2hlZHVsZShmdW5jdGlvbigpe2UoKSxyP24uYWRkKHRoaXMuc2NoZWR1bGUobnVsbCxpKSk6dGhpcy51bnN1YnNjcmliZSgpfSxpKTtpZihuLmFkZChvKSwhcilyZXR1cm4gb31mdW5jdGlvbiBCcChuLHQ9MCl7cmV0dXJuIFl0KChlLGkpPT57ZS5zdWJzY3JpYmUoSHQoaSxyPT5FYShpLG4sKCk9PmkubmV4dChyKSx0KSwoKT0+RWEoaSxuLCgpPT5pLmNvbXBsZXRlKCksdCkscj0+RWEoaSxuLCgpPT5pLmVycm9yKHIpLHQpKSl9KX1mdW5jdGlvbiBEQyhuLHQ9MCl7cmV0dXJuIFl0KChlLGkpPT57aS5hZGQobi5zY2hlZHVsZSgoKT0+ZS5zdWJzY3JpYmUoaSksdCkpfSl9ZnVuY3Rpb24gSUMobix0KXtpZighbil0aHJvdyBuZXcgRXJyb3IoIkl0ZXJhYmxlIGNhbm5vdCBiZSBudWxsIik7cmV0dXJuIG5ldyBLdChlPT57RWEoZSx0LCgpPT57bGV0IGk9bltTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtFYShlLHQsKCk9PntpLm5leHQoKS50aGVuKHI9PntyLmRvbmU/ZS5jb21wbGV0ZSgpOmUubmV4dChyLnZhbHVlKX0pfSwwLCEwKX0pfSl9ZnVuY3Rpb24gSnIobix0KXtyZXR1cm4gdD9mdW5jdGlvbihuLHQpe2lmKG51bGwhPW4pe2lmKHhDKG4pKXJldHVybiBmdW5jdGlvbihuLHQpe3JldHVybiBjaShuKS5waXBlKERDKHQpLEJwKHQpKX0obix0KTtpZihCbShuKSlyZXR1cm4gZnVuY3Rpb24obix0KXtyZXR1cm4gbmV3IEt0KGU9PntsZXQgaT0wO3JldHVybiB0LnNjaGVkdWxlKGZ1bmN0aW9uKCl7aT09PW4ubGVuZ3RoP2UuY29tcGxldGUoKTooZS5uZXh0KG5baSsrXSksZS5jbG9zZWR8fHRoaXMuc2NoZWR1bGUoKSl9KX0pfShuLHQpO2lmKHlDKG4pKXJldHVybiBmdW5jdGlvbihuLHQpe3JldHVybiBjaShuKS5waXBlKERDKHQpLEJwKHQpKX0obix0KTtpZihDQyhuKSlyZXR1cm4gSUMobix0KTtpZihTQyhuKSlyZXR1cm4gZnVuY3Rpb24obix0KXtyZXR1cm4gbmV3IEt0KGU9PntsZXQgaTtyZXR1cm4gRWEoZSx0LCgpPT57aT1uW3dDXSgpLEVhKGUsdCwoKT0+e2xldCByLG87dHJ5eyh7dmFsdWU6cixkb25lOm99PWkubmV4dCgpKX1jYXRjaChhKXtyZXR1cm4gdm9pZCBlLmVycm9yKGEpfW8/ZS5jb21wbGV0ZSgpOmUubmV4dChyKX0sMCwhMCl9KSwoKT0+bW4oaT8ucmV0dXJuKSYmaS5yZXR1cm4oKX0pfShuLHQpO2lmKFRDKG4pKXJldHVybiBmdW5jdGlvbihuLHQpe3JldHVybiBJQyhFQyhuKSx0KX0obix0KX10aHJvdyBNQyhuKX0obix0KTpjaShuKX1mdW5jdGlvbiAkdCguLi5uKXtyZXR1cm4gSnIobix0YyhuKSl9ZnVuY3Rpb24gX2wobix0KXtsZXQgZT1tbihuKT9uOigpPT5uLGk9cj0+ci5lcnJvcihlKCkpO3JldHVybiBuZXcgS3QodD9yPT50LnNjaGVkdWxlKGksMCxyKTppKX12YXIgQXM9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMua2luZD10LHRoaXMudmFsdWU9ZSx0aGlzLmVycm9yPWksdGhpcy5oYXNWYWx1ZT0iTiI9PT10fW9ic2VydmUodCl7cmV0dXJuIEtBKHRoaXMsdCl9ZG8odCxlLGkpe2xldHtraW5kOnIsdmFsdWU6byxlcnJvcjphfT10aGlzO3JldHVybiJOIj09PXI/dD8uKG8pOiJFIj09PXI/ZT8uKGEpOmk/LigpfWFjY2VwdCh0LGUsaSl7dmFyIHI7cmV0dXJuIG1uKG51bGw9PT0ocj10KXx8dm9pZCAwPT09cj92b2lkIDA6ci5uZXh0KT90aGlzLm9ic2VydmUodCk6dGhpcy5kbyh0LGUsaSl9dG9PYnNlcnZhYmxlKCl7bGV0e2tpbmQ6dCx2YWx1ZTplLGVycm9yOml9PXRoaXMscj0iTiI9PT10PyR0KGUpOiJFIj09PXQ/X2woKCk9PmkpOiJDIj09PXQ/S3I6MDtpZighcil0aHJvdyBuZXcgVHlwZUVycm9yKGBVbmV4cGVjdGVkIG5vdGlmaWNhdGlvbiBraW5kICR7dH1gKTtyZXR1cm4gcn1zdGF0aWMgY3JlYXRlTmV4dCh0KXtyZXR1cm4gbmV3IEFzKCJOIix0KX1zdGF0aWMgY3JlYXRlRXJyb3IodCl7cmV0dXJuIG5ldyBBcygiRSIsdm9pZCAwLHQpfXN0YXRpYyBjcmVhdGVDb21wbGV0ZSgpe3JldHVybiBBcy5jb21wbGV0ZU5vdGlmaWNhdGlvbn19O2Z1bmN0aW9uIEtBKG4sdCl7dmFyIGUsaSxyO2xldHtraW5kOm8sdmFsdWU6YSxlcnJvcjpzfT1uO2lmKCJzdHJpbmciIT10eXBlb2Ygbyl0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIG5vdGlmaWNhdGlvbiwgbWlzc2luZyAia2luZCInKTsiTiI9PT1vP251bGw9PT0oZT10Lm5leHQpfHx2b2lkIDA9PT1lfHxlLmNhbGwodCxhKToiRSI9PT1vP251bGw9PT0oaT10LmVycm9yKXx8dm9pZCAwPT09aXx8aS5jYWxsKHQscyk6bnVsbD09PShyPXQuY29tcGxldGUpfHx2b2lkIDA9PT1yfHxyLmNhbGwodCl9ZnVuY3Rpb24gUF8obil7cmV0dXJuISFuJiYobiBpbnN0YW5jZW9mIEt0fHxtbihuLmxpZnQpJiZtbihuLnN1YnNjcmliZSkpfUFzLmNvbXBsZXRlTm90aWZpY2F0aW9uPW5ldyBBcygiQyIpO3ZhciBWbT1SbShuPT5mdW5jdGlvbigpe24odGhpcyksdGhpcy5uYW1lPSJFbXB0eUVycm9yIix0aGlzLm1lc3NhZ2U9Im5vIGVsZW1lbnRzIGluIHNlcXVlbmNlIn0pO2Z1bmN0aW9uIEFDKG4sdCl7bGV0IGU9Im9iamVjdCI9PXR5cGVvZiB0O3JldHVybiBuZXcgUHJvbWlzZSgoaSxyKT0+e2xldCBvPW5ldyBnbCh7bmV4dDphPT57aShhKSxvLnVuc3Vic2NyaWJlKCl9LGVycm9yOnIsY29tcGxldGU6KCk9PntlP2kodC5kZWZhdWx0VmFsdWUpOnIobmV3IFZtKX19KTtuLnN1YnNjcmliZShvKX0pfWZ1bmN0aW9uIHEobix0KXtyZXR1cm4gWXQoKGUsaSk9PntsZXQgcj0wO2Uuc3Vic2NyaWJlKEh0KGksbz0+e2kubmV4dChuLmNhbGwodCxvLHIrKykpfSkpfSl9dmFye2lzQXJyYXk6aHJlfT1BcnJheTtmdW5jdGlvbiBaZChuKXtyZXR1cm4gcSh0PT5mdW5jdGlvbihuLHQpe3JldHVybiBocmUodCk/biguLi50KTpuKHQpfShuLHQpKX12YXJ7aXNBcnJheTpmcmV9PUFycmF5LHtnZXRQcm90b3R5cGVPZjpncmUscHJvdG90eXBlOl9yZSxrZXlzOmJyZX09T2JqZWN0O2Z1bmN0aW9uIFJDKG4pe2lmKDE9PT1uLmxlbmd0aCl7bGV0IHQ9blswXTtpZihmcmUodCkpcmV0dXJue2FyZ3M6dCxrZXlzOm51bGx9O2lmKGZ1bmN0aW9uKG4pe3JldHVybiBuJiYib2JqZWN0Ij09dHlwZW9mIG4mJmdyZShuKT09PV9yZX0odCkpe2xldCBlPWJyZSh0KTtyZXR1cm57YXJnczplLm1hcChpPT50W2ldKSxrZXlzOmV9fX1yZXR1cm57YXJnczpuLGtleXM6bnVsbH19ZnVuY3Rpb24gUEMobix0KXtyZXR1cm4gbi5yZWR1Y2UoKGUsaSxyKT0+KGVbaV09dFtyXSxlKSx7fSl9ZnVuY3Rpb24gSW4oLi4ubil7bGV0IHQ9dGMobiksZT1lYyhuKSx7YXJnczppLGtleXM6cn09UkMobik7aWYoMD09PWkubGVuZ3RoKXJldHVybiBKcihbXSx0KTtsZXQgbz1uZXcgS3QoSkEoaSx0LHI/YT0+UEMocixhKTpzYSkpO3JldHVybiBlP28ucGlwZShaZChlKSk6b31mdW5jdGlvbiBKQShuLHQsZT1zYSl7cmV0dXJuIGk9PntLNCh0LCgpPT57bGV0e2xlbmd0aDpyfT1uLG89bmV3IEFycmF5KHIpLGE9cixzPXI7Zm9yKGxldCBsPTA7bDxyO2wrKylLNCh0LCgpPT57bGV0IGM9SnIobltsXSx0KSxkPSExO2Muc3Vic2NyaWJlKEh0KGksdT0+e29bbF09dSxkfHwoZD0hMCxzLS0pLHN8fGkubmV4dChlKG8uc2xpY2UoKSkpfSwoKT0+ey0tYXx8aS5jb21wbGV0ZSgpfSkpfSxpKX0saSl9fWZ1bmN0aW9uIEs0KG4sdCxlKXtuP0VhKGUsbix0KTp0KCl9ZnVuY3Rpb24geG4obix0LGU9MS8wKXtyZXR1cm4gbW4odCk/eG4oKGkscik9PnEoKG8sYSk9PnQoaSxvLHIsYSkpKGNpKG4oaSxyKSkpLGUpOigibnVtYmVyIj09dHlwZW9mIHQmJihlPXQpLFl0KChpLHIpPT5mdW5jdGlvbihuLHQsZSxpLHIsbyxhLHMpe2xldCBsPVtdLGM9MCxkPTAsdT0hMSxwPSgpPT57dSYmIWwubGVuZ3RoJiYhYyYmdC5jb21wbGV0ZSgpfSxoPV89PmM8aT9tKF8pOmwucHVzaChfKSxtPV89PntjKys7bGV0IE09ITE7Y2koZShfLGQrKykpLnN1YnNjcmliZShIdCh0LHk9Pnt0Lm5leHQoeSl9LCgpPT57TT0hMH0sdm9pZCAwLCgpPT57aWYoTSl0cnl7Zm9yKGMtLTtsLmxlbmd0aCYmYzxpOyl7bGV0IHk9bC5zaGlmdCgpO20oeSl9cCgpfWNhdGNoKHkpe3QuZXJyb3IoeSl9fSkpfTtyZXR1cm4gbi5zdWJzY3JpYmUoSHQodCxoLCgpPT57dT0hMCxwKCl9KSksKCk9Pnt9fShpLHIsbixlKSkpfWZ1bmN0aW9uIGtDKG49MS8wKXtyZXR1cm4geG4oc2Esbil9ZnVuY3Rpb24gS2QoLi4ubil7cmV0dXJuIGtDKDEpKEpyKG4sdGMobikpKX1mdW5jdGlvbiBpcyhuKXtyZXR1cm4gbmV3IEt0KHQ9PntjaShuKCkpLnN1YnNjcmliZSh0KX0pfWZ1bmN0aW9uIENvKC4uLm4pe2xldCB0PWVjKG4pLHthcmdzOmUsa2V5czppfT1SQyhuKSxyPW5ldyBLdChvPT57bGV0e2xlbmd0aDphfT1lO2lmKCFhKXJldHVybiB2b2lkIG8uY29tcGxldGUoKTtsZXQgcz1uZXcgQXJyYXkoYSksbD1hLGM9YTtmb3IobGV0IGQ9MDtkPGE7ZCsrKXtsZXQgdT0hMTtjaShlW2RdKS5zdWJzY3JpYmUoSHQobyxwPT57dXx8KHU9ITAsYy0tKSxzW2RdPXB9LCgpPT5sLS0sdm9pZCAwLCgpPT57KCFsfHwhdSkmJihjfHxvLm5leHQoaT9QQyhpLHMpOnMpLG8uY29tcGxldGUoKSl9KSl9fSk7cmV0dXJuIHQ/ci5waXBlKFpkKHQpKTpyfXZhciB5cmU9WyJhZGRMaXN0ZW5lciIsInJlbW92ZUxpc3RlbmVyIl0seHJlPVsiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiXSxDcmU9WyJvbiIsIm9mZiJdO2Z1bmN0aW9uIEVpKG4sdCxlLGkpe2lmKG1uKGUpJiYoaT1lLGU9dm9pZCAwKSxpKXJldHVybiBFaShuLHQsZSkucGlwZShaZChpKSk7bGV0W3Isb109ZnVuY3Rpb24obil7cmV0dXJuIG1uKG4uYWRkRXZlbnRMaXN0ZW5lcikmJm1uKG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcil9KG4pP3hyZS5tYXAoYT0+cz0+blthXSh0LHMsZSkpOmZ1bmN0aW9uKG4pe3JldHVybiBtbihuLmFkZExpc3RlbmVyKSYmbW4obi5yZW1vdmVMaXN0ZW5lcil9KG4pP3lyZS5tYXAoZUgobix0KSk6ZnVuY3Rpb24obil7cmV0dXJuIG1uKG4ub24pJiZtbihuLm9mZil9KG4pP0NyZS5tYXAoZUgobix0KSk6W107aWYoIXImJkJtKG4pKXJldHVybiB4bihhPT5FaShhLHQsZSkpKGNpKG4pKTtpZighcil0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGV2ZW50IHRhcmdldCIpO3JldHVybiBuZXcgS3QoYT0+e2xldCBzPSguLi5sKT0+YS5uZXh0KDE8bC5sZW5ndGg/bDpsWzBdKTtyZXR1cm4gcihzKSwoKT0+byhzKX0pfWZ1bmN0aW9uIGVIKG4sdCl7cmV0dXJuIGU9Pmk9Pm5bZV0odCxpKX1mdW5jdGlvbiBycyhuPTAsdCxlPWQ0KXtsZXQgaT0tMTtyZXR1cm4gbnVsbCE9dCYmKGZDKHQpP2U9dDppPXQpLG5ldyBLdChyPT57bGV0IG89ZnVuY3Rpb24obil7cmV0dXJuIG4gaW5zdGFuY2VvZiBEYXRlJiYhaXNOYU4obil9KG4pPytuLWUubm93KCk6bjtvPDAmJihvPTApO2xldCBhPTA7cmV0dXJuIGUuc2NoZWR1bGUoZnVuY3Rpb24oKXtyLmNsb3NlZHx8KHIubmV4dChhKyspLDA8PWk/dGhpcy5zY2hlZHVsZSh2b2lkIDAsaSk6ci5jb21wbGV0ZSgpKX0sbyl9KX1mdW5jdGlvbiB0biguLi5uKXtsZXQgdD10YyhuKSxlPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBRQShuKT9uLnBvcCgpOjEvMH0obiksaT1uO3JldHVybiBpLmxlbmd0aD8xPT09aS5sZW5ndGg/Y2koaVswXSk6a0MoZSkoSnIoaSx0KSk6S3J9dmFye2lzQXJyYXk6RXJlfT1BcnJheTtmdW5jdGlvbiBPQyhuKXtyZXR1cm4gMT09PW4ubGVuZ3RoJiZFcmUoblswXSk/blswXTpufWZ1bmN0aW9uIE9lKG4sdCl7cmV0dXJuIFl0KChlLGkpPT57bGV0IHI9MDtlLnN1YnNjcmliZShIdChpLG89Pm4uY2FsbCh0LG8scisrKSYmaS5uZXh0KG8pKSl9KX1mdW5jdGlvbiBuYyhuLHQ9UWMpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gWXQoKHQsZSk9PntsZXQgaT0hMSxyPW51bGwsbz1udWxsLGE9ITEscz0oKT0+e2lmKG8/LnVuc3Vic2NyaWJlKCksbz1udWxsLGkpe2k9ITE7bGV0IGM9cjtyPW51bGwsZS5uZXh0KGMpfWEmJmUuY29tcGxldGUoKX0sbD0oKT0+e289bnVsbCxhJiZlLmNvbXBsZXRlKCl9O3Quc3Vic2NyaWJlKEh0KGUsYz0+e2k9ITAscj1jLG98fGNpKG4oKSkuc3Vic2NyaWJlKG89SHQoZSxzLGwpKX0sKCk9PnthPSEwLCghaXx8IW98fG8uY2xvc2VkKSYmZS5jb21wbGV0ZSgpfSkpfSl9KCgpPT5ycyhuLHQpKX1mdW5jdGlvbiBjbyhuKXtyZXR1cm4gWXQoKHQsZSk9PntsZXQgbyxpPW51bGwscj0hMTtpPXQuc3Vic2NyaWJlKEh0KGUsdm9pZCAwLHZvaWQgMCxhPT57bz1jaShuKGEsY28obikodCkpKSxpPyhpLnVuc3Vic2NyaWJlKCksaT1udWxsLG8uc3Vic2NyaWJlKGUpKTpyPSEwfSkpLHImJihpLnVuc3Vic2NyaWJlKCksaT1udWxsLG8uc3Vic2NyaWJlKGUpKX0pfWZ1bmN0aW9uIHRSKC4uLm4pe2xldCB0PWVjKG4pO3JldHVybiB0P2Z1bmN0aW9uKC4uLm4pe3JldHVybiBqQShuKX0odFIoLi4ubiksWmQodCkpOll0KChlLGkpPT57SkEoW2UsLi4uT0MobildKShpKX0pfWZ1bmN0aW9uIFZpKC4uLm4pe3JldHVybiB0UiguLi5uKX1mdW5jdGlvbiBDcihuLHQ9UWMpe3JldHVybiBZdCgoZSxpKT0+e2xldCByPW51bGwsbz1udWxsLGE9bnVsbCxzPSgpPT57aWYocil7ci51bnN1YnNjcmliZSgpLHI9bnVsbDtsZXQgYz1vO289bnVsbCxpLm5leHQoYyl9fTtmdW5jdGlvbiBsKCl7bGV0IGM9YStuLGQ9dC5ub3coKTtpZihkPGMpcmV0dXJuIHI9dGhpcy5zY2hlZHVsZSh2b2lkIDAsYy1kKSx2b2lkIGkuYWRkKHIpO3MoKX1lLnN1YnNjcmliZShIdChpLGM9PntvPWMsYT10Lm5vdygpLHJ8fChyPXQuc2NoZWR1bGUobCxuKSxpLmFkZChyKSl9LCgpPT57cygpLGkuY29tcGxldGUoKX0sdm9pZCAwLCgpPT57bz1yPW51bGx9KSl9KX1mdW5jdGlvbiBMdChuKXtyZXR1cm4gbjw9MD8oKT0+S3I6WXQoKHQsZSk9PntsZXQgaT0wO3Quc3Vic2NyaWJlKEh0KGUscj0+eysraTw9biYmKGUubmV4dChyKSxuPD1pJiZlLmNvbXBsZXRlKCkpfSkpfSl9ZnVuY3Rpb24ga18oKXtyZXR1cm4gWXQoKG4sdCk9PntuLnN1YnNjcmliZShIdCh0LGZsKSl9KX1mdW5jdGlvbiBIbShuLHQpe3JldHVybiB0P2U9PktkKHQucGlwZShMdCgxKSxrXygpKSxlLnBpcGUoSG0obikpKTp4bigoZSxpKT0+bihlLGkpLnBpcGUoTHQoMSksZnVuY3Rpb24obil7cmV0dXJuIHEoKCk9Pm4pfShlKSkpfWZ1bmN0aW9uIFJzKG4sdD1RYyl7bGV0IGU9cnMobix0KTtyZXR1cm4gSG0oKCk9PmUpfWZ1bmN0aW9uIHJpKG4sdD1zYSl7cmV0dXJuIG49bj8/VHJlLFl0KChlLGkpPT57bGV0IHIsbz0hMDtlLnN1YnNjcmliZShIdChpLGE9PntsZXQgcz10KGEpOyhvfHwhbihyLHMpKSYmKG89ITEscj1zLGkubmV4dChhKSl9KSl9KX1mdW5jdGlvbiBUcmUobix0KXtyZXR1cm4gbj09PXR9ZnVuY3Rpb24gb0gobj1EcmUpe3JldHVybiBZdCgodCxlKT0+e2xldCBpPSExO3Quc3Vic2NyaWJlKEh0KGUscj0+e2k9ITAsZS5uZXh0KHIpfSwoKT0+aT9lLmNvbXBsZXRlKCk6ZS5lcnJvcihuKCkpKSl9KX1mdW5jdGlvbiBEcmUoKXtyZXR1cm4gbmV3IFZtfWZ1bmN0aW9uIE5DKG4sdCl7cmV0dXJuIHQ/ZT0+ZS5waXBlKE5DKChpLHIpPT5jaShuKGkscikpLnBpcGUocSgobyxhKT0+dChpLG8scixhKSkpKSk6WXQoKGUsaSk9PntsZXQgcj0wLG89bnVsbCxhPSExO2Uuc3Vic2NyaWJlKEh0KGkscz0+e298fChvPUh0KGksdm9pZCAwLCgpPT57bz1udWxsLGEmJmkuY29tcGxldGUoKX0pLGNpKG4ocyxyKyspKS5zdWJzY3JpYmUobykpfSwoKT0+e2E9ITAsIW8mJmkuY29tcGxldGUoKX0pKX0pfWZ1bmN0aW9uIHptKG4sdCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD49MjtyZXR1cm4gaT0+aS5waXBlKG4/T2UoKHIsbyk9Pm4ocixvLGkpKTpzYSxMdCgxKSxlP2Z1bmN0aW9uKG4pe3JldHVybiBZdCgodCxlKT0+e2xldCBpPSExO3Quc3Vic2NyaWJlKEh0KGUscj0+e2k9ITAsZS5uZXh0KHIpfSwoKT0+e2l8fGUubmV4dChuKSxlLmNvbXBsZXRlKCl9KSl9KX0odCk6b0goKCk9Pm5ldyBWbSkpfWZ1bmN0aW9uIEJDKG4sdCxlLGkpe3JldHVybiBZdCgocixvKT0+e2xldCBhO3QmJiJmdW5jdGlvbiIhPXR5cGVvZiB0Pyh7ZHVyYXRpb246ZSxlbGVtZW50OmEsY29ubmVjdG9yOml9PXQpOmE9dDtsZXQgcz1uZXcgTWFwLGw9bT0+e3MuZm9yRWFjaChtKSxtKG8pfSxjPW09PmwoXz0+Xy5lcnJvcihtKSksZD0wLHU9ITEscD1uZXcgVF8obyxtPT57dHJ5e2xldCBfPW4obSksTT1zLmdldChfKTtpZighTSl7cy5zZXQoXyxNPWk/aSgpOm5ldyBFZSk7bGV0IHk9ZnVuY3Rpb24obSxfKXtsZXQgTT1uZXcgS3QoeT0+e2QrKztsZXQgeD1fLnN1YnNjcmliZSh5KTtyZXR1cm4oKT0+e3gudW5zdWJzY3JpYmUoKSwwPT0tLWQmJnUmJnAudW5zdWJzY3JpYmUoKX19KTtyZXR1cm4gTS5rZXk9bSxNfShfLE0pO2lmKG8ubmV4dCh5KSxlKXtsZXQgeD1IdChNLCgpPT57TS5jb21wbGV0ZSgpLHg/LnVuc3Vic2NyaWJlKCl9LHZvaWQgMCx2b2lkIDAsKCk9PnMuZGVsZXRlKF8pKTtwLmFkZChjaShlKHkpKS5zdWJzY3JpYmUoeCkpfX1NLm5leHQoYT9hKG0pOm0pfWNhdGNoKF8pe2MoXyl9fSwoKT0+bChtPT5tLmNvbXBsZXRlKCkpLGMsKCk9PnMuY2xlYXIoKSwoKT0+KHU9ITAsMD09PWQpKTtyLnN1YnNjcmliZShwKX0pfWZ1bmN0aW9uIFRhKG49e30pe2xldHtjb25uZWN0b3I6dD0oKCk9Pm5ldyBFZSkscmVzZXRPbkVycm9yOmU9ITAscmVzZXRPbkNvbXBsZXRlOmk9ITAscmVzZXRPblJlZkNvdW50WmVybzpyPSEwfT1uO3JldHVybiBvPT57bGV0IGEscyxsLGM9MCxkPSExLHU9ITEscD0oKT0+e3M/LnVuc3Vic2NyaWJlKCkscz12b2lkIDB9LGg9KCk9PntwKCksYT1sPXZvaWQgMCxkPXU9ITF9LG09KCk9PntsZXQgXz1hO2goKSxfPy51bnN1YnNjcmliZSgpfTtyZXR1cm4gWXQoKF8sTSk9PntjKyssIXUmJiFkJiZwKCk7bGV0IHk9bD1sPz90KCk7TS5hZGQoKCk9PntjLS0sMD09PWMmJiF1JiYhZCYmKHM9bFIobSxyKSl9KSx5LnN1YnNjcmliZShNKSwhYSYmYz4wJiYoYT1uZXcgZ2woe25leHQ6eD0+eS5uZXh0KHgpLGVycm9yOng9Pnt1PSEwLHAoKSxzPWxSKGgsZSx4KSx5LmVycm9yKHgpfSxjb21wbGV0ZTooKT0+e2Q9ITAscCgpLHM9bFIoaCxpKSx5LmNvbXBsZXRlKCl9fSksY2koXykuc3Vic2NyaWJlKGEpKX0pKG8pfX1mdW5jdGlvbiBsUihuLHQsLi4uZSl7aWYoITA9PT10KXJldHVybiB2b2lkIG4oKTtpZighMT09PXQpcmV0dXJuO2xldCBpPW5ldyBnbCh7bmV4dDooKT0+e2kudW5zdWJzY3JpYmUoKSxuKCl9fSk7cmV0dXJuIHQoLi4uZSkuc3Vic2NyaWJlKGkpfWZ1bmN0aW9uIERhKG4sdCxlKXtsZXQgaSxyPSExO3JldHVybiBuJiYib2JqZWN0Ij09dHlwZW9mIG4/KHtidWZmZXJTaXplOmk9MS8wLHdpbmRvd1RpbWU6dD0xLzAscmVmQ291bnQ6cj0hMSxzY2hlZHVsZXI6ZX09bik6aT1uPz8xLzAsVGEoe2Nvbm5lY3RvcjooKT0+bmV3IExwKGksdCxlKSxyZXNldE9uRXJyb3I6ITAscmVzZXRPbkNvbXBsZXRlOiExLHJlc2V0T25SZWZDb3VudFplcm86cn0pfWZ1bmN0aW9uIG9zKG4pe3JldHVybiBPZSgodCxlKT0+bjw9ZSl9ZnVuY3Rpb24ga24oLi4ubil7bGV0IHQ9dGMobik7cmV0dXJuIFl0KChlLGkpPT57KHQ/S2QobixlLHQpOktkKG4sZSkpLnN1YnNjcmliZShpKX0pfWZ1bmN0aW9uIEpuKG4sdCl7cmV0dXJuIFl0KChlLGkpPT57bGV0IHI9bnVsbCxvPTAsYT0hMSxzPSgpPT5hJiYhciYmaS5jb21wbGV0ZSgpO2Uuc3Vic2NyaWJlKEh0KGksbD0+e3I/LnVuc3Vic2NyaWJlKCk7bGV0IGM9MCxkPW8rKztjaShuKGwsZCkpLnN1YnNjcmliZShyPUh0KGksdT0+aS5uZXh0KHQ/dChsLHUsZCxjKyspOnUpLCgpPT57cj1udWxsLHMoKX0pKX0sKCk9PnthPSEwLHMoKX0pKX0pfWZ1bmN0aW9uIGl0KG4pe3JldHVybiBZdCgodCxlKT0+e2NpKG4pLnN1YnNjcmliZShIdChlLCgpPT5lLmNvbXBsZXRlKCksZmwpKSwhZS5jbG9zZWQmJnQuc3Vic2NyaWJlKGUpfSl9ZnVuY3Rpb24gT18obix0PSExKXtyZXR1cm4gWXQoKGUsaSk9PntsZXQgcj0wO2Uuc3Vic2NyaWJlKEh0KGksbz0+e2xldCBhPW4obyxyKyspOyhhfHx0KSYmaS5uZXh0KG8pLCFhJiZpLmNvbXBsZXRlKCl9KSl9KX1mdW5jdGlvbiBEdChuLHQsZSl7bGV0IGk9bW4obil8fHR8fGU/e25leHQ6bixlcnJvcjp0LGNvbXBsZXRlOmV9Om47cmV0dXJuIGk/WXQoKHIsbyk9Pnt2YXIgYTtudWxsPT09KGE9aS5zdWJzY3JpYmUpfHx2b2lkIDA9PT1hfHxhLmNhbGwoaSk7bGV0IHM9ITA7ci5zdWJzY3JpYmUoSHQobyxsPT57dmFyIGM7bnVsbD09PShjPWkubmV4dCl8fHZvaWQgMD09PWN8fGMuY2FsbChpLGwpLG8ubmV4dChsKX0sKCk9Pnt2YXIgbDtzPSExLG51bGw9PT0obD1pLmNvbXBsZXRlKXx8dm9pZCAwPT09bHx8bC5jYWxsKGkpLG8uY29tcGxldGUoKX0sbD0+e3ZhciBjO3M9ITEsbnVsbD09PShjPWkuZXJyb3IpfHx2b2lkIDA9PT1jfHxjLmNhbGwoaSxsKSxvLmVycm9yKGwpfSwoKT0+e3ZhciBsLGM7cyYmKG51bGw9PT0obD1pLnVuc3Vic2NyaWJlKXx8dm9pZCAwPT09bHx8bC5jYWxsKGkpKSxudWxsPT09KGM9aS5maW5hbGl6ZSl8fHZvaWQgMD09PWN8fGMuY2FsbChpKX0pKX0pOnNhfXZhciBjUj17bGVhZGluZzohMCx0cmFpbGluZzohMX07ZnVuY3Rpb24gaWMobix0PVFjLGU9Y1Ipe2xldCBpPXJzKG4sdCk7cmV0dXJuIGZ1bmN0aW9uKG4sdD1jUil7cmV0dXJuIFl0KChlLGkpPT57bGV0e2xlYWRpbmc6cix0cmFpbGluZzpvfT10LGE9ITEscz1udWxsLGw9bnVsbCxjPSExLGQ9KCk9PntsPy51bnN1YnNjcmliZSgpLGw9bnVsbCxvJiYoaCgpLGMmJmkuY29tcGxldGUoKSl9LHU9KCk9PntsPW51bGwsYyYmaS5jb21wbGV0ZSgpfSxwPW09Pmw9Y2kobihtKSkuc3Vic2NyaWJlKEh0KGksZCx1KSksaD0oKT0+e2lmKGEpe2E9ITE7bGV0IG09cztzPW51bGwsaS5uZXh0KG0pLCFjJiZwKG0pfX07ZS5zdWJzY3JpYmUoSHQoaSxtPT57YT0hMCxzPW0sKCFsfHxsLmNsb3NlZCkmJihyP2goKTpwKG0pKX0sKCk9PntjPSEwLCghKG8mJmEmJmwpfHxsLmNsb3NlZCkmJmkuY29tcGxldGUoKX0pKX0pfSgoKT0+aSxlKX1mdW5jdGlvbiBJdCguLi5uKXtsZXQgdD1lYyhuKTtyZXR1cm4gWXQoKGUsaSk9PntsZXQgcj1uLmxlbmd0aCxvPW5ldyBBcnJheShyKSxhPW4ubWFwKCgpPT4hMSkscz0hMTtmb3IobGV0IGw9MDtsPHI7bCsrKWNpKG5bbF0pLnN1YnNjcmliZShIdChpLGM9PntvW2xdPWMsIXMmJiFhW2xdJiYoYVtsXT0hMCwocz1hLmV2ZXJ5KHNhKSkmJihhPW51bGwpKX0sZmwpKTtlLnN1YnNjcmliZShIdChpLGw9PntpZihzKXtsZXQgYz1bbCwuLi5vXTtpLm5leHQodD90KC4uLmMpOmMpfX0pKX0pfWZ1bmN0aW9uICRpKG4pe2ZvcihsZXQgdCBpbiBuKWlmKG5bdF09PT0kaSlyZXR1cm4gdDt0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgcmVuYW1lZCBwcm9wZXJ0eSBvbiB0YXJnZXQgb2JqZWN0LiIpfWZ1bmN0aW9uIGRSKG4sdCl7Zm9yKGxldCBlIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShlKSYmIW4uaGFzT3duUHJvcGVydHkoZSkmJihuW2VdPXRbZV0pfWZ1bmN0aW9uIHBvKG4pe2lmKCJzdHJpbmciPT10eXBlb2YgbilyZXR1cm4gbjtpZihBcnJheS5pc0FycmF5KG4pKXJldHVybiJbIituLm1hcChwbykuam9pbigiLCAiKSsiXSI7aWYobnVsbD09bilyZXR1cm4iIituO2lmKG4ub3ZlcnJpZGRlbk5hbWUpcmV0dXJuYCR7bi5vdmVycmlkZGVuTmFtZX1gO2lmKG4ubmFtZSlyZXR1cm5gJHtuLm5hbWV9YDtsZXQgdD1uLnRvU3RyaW5nKCk7aWYobnVsbD09dClyZXR1cm4iIit0O2xldCBlPXQuaW5kZXhPZigiXG4iKTtyZXR1cm4tMT09PWU/dDp0LnN1YnN0cmluZygwLGUpfWZ1bmN0aW9uIFJSKG4sdCl7cmV0dXJuIG51bGw9PW58fCIiPT09bj9udWxsPT09dD8iIjp0Om51bGw9PXR8fCIiPT09dD9uOm4rIiAiK3R9dmFyIElyZT0kaSh7X19mb3J3YXJkX3JlZl9fOiRpfSk7ZnVuY3Rpb24gV24obil7cmV0dXJuIG4uX19mb3J3YXJkX3JlZl9fPVduLG4udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gcG8odGhpcygpKX0sbn1mdW5jdGlvbiBBaShuKXtyZXR1cm4gdDUobik/bigpOm59ZnVuY3Rpb24gdDUobil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG4mJm4uaGFzT3duUHJvcGVydHkoSXJlKSYmbi5fX2ZvcndhcmRfcmVmX189PT1Xbn1mdW5jdGlvbiBuNShuKXtyZXR1cm4gbiYmISFuLlx1MDI3NXByb3ZpZGVyc312YXIgb2I9Imh0dHBzOi8vZy5jby9uZy9zZWN1cml0eSN4c3MiLHh0PWNsYXNzIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCxlKXtzdXBlcihmdW5jdGlvbihuLHQpe3JldHVybmBORzAke01hdGguYWJzKG4pfSR7dD8iOiAiK3QudHJpbSgpOiIifWB9KHQsZSkpLHRoaXMuY29kZT10fX07ZnVuY3Rpb24gam4obil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBuP246bnVsbD09bj8iIjpTdHJpbmcobil9ZnVuY3Rpb24gQlAobil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5uYW1lfHxuLnRvU3RyaW5nKCk6Im9iamVjdCI9PXR5cGVvZiBuJiZudWxsIT1uJiYiZnVuY3Rpb24iPT10eXBlb2Ygbi50eXBlP24udHlwZS5uYW1lfHxuLnR5cGUudG9TdHJpbmcoKTpqbihuKX1mdW5jdGlvbiBWUChuLHQpe3Rocm93IG5ldyB4dCgtMjAxLCExKX1mdW5jdGlvbiBpNShuLHQsZSxpKXt0aHJvdyBuZXcgRXJyb3IoYEFTU0VSVElPTiBFUlJPUjogJHtufWArKG51bGw9PWk/IiI6YCBbRXhwZWN0ZWQ9PiAke2V9ICR7aX0gJHt0fSA8PUFjdHVhbF1gKSl9ZnVuY3Rpb24gdWUobil7cmV0dXJue3Rva2VuOm4udG9rZW4scHJvdmlkZWRJbjpuLnByb3ZpZGVkSW58fG51bGwsZmFjdG9yeTpuLmZhY3RvcnksdmFsdWU6dm9pZCAwfX1mdW5jdGlvbiBIKG4pe3JldHVybntwcm92aWRlcnM6bi5wcm92aWRlcnN8fFtdLGltcG9ydHM6bi5pbXBvcnRzfHxbXX19ZnVuY3Rpb24gSFAobil7cmV0dXJuIHNIKG4sJEMpfHxzSChuLHI1KX1mdW5jdGlvbiBzSChuLHQpe3JldHVybiBuLmhhc093blByb3BlcnR5KHQpP25bdF06bnVsbH1mdW5jdGlvbiBsSChuKXtyZXR1cm4gbiYmKG4uaGFzT3duUHJvcGVydHkoUFIpfHxuLmhhc093blByb3BlcnR5KE9yZSkpP25bUFJdOm51bGx9dmFyIGtSLCRDPSRpKHsiXHUwMjc1cHJvdiI6JGl9KSxQUj0kaSh7Ilx1MDI3NWluaiI6JGl9KSxyNT0kaSh7bmdJbmplY3RhYmxlRGVmOiRpfSksT3JlPSRpKHtuZ0luamVjdG9yRGVmOiRpfSksQ2k9KCgpPT57cmV0dXJuKG49Q2l8fChDaT17fSkpW24uRGVmYXVsdD0wXT0iRGVmYXVsdCIsbltuLkhvc3Q9MV09Ikhvc3QiLG5bbi5TZWxmPTJdPSJTZWxmIixuW24uU2tpcFNlbGY9NF09IlNraXBTZWxmIixuW24uT3B0aW9uYWw9OF09Ik9wdGlvbmFsIixDaTt2YXIgbn0pKCk7ZnVuY3Rpb24gUHMobil7bGV0IHQ9a1I7cmV0dXJuIGtSPW4sdH1mdW5jdGlvbiBvNShuLHQsZSl7bGV0IGk9SFAobik7cmV0dXJuIGkmJiJyb290Ij09aS5wcm92aWRlZEluP3ZvaWQgMD09PWkudmFsdWU/aS52YWx1ZT1pLmZhY3RvcnkoKTppLnZhbHVlOmUmQ2kuT3B0aW9uYWw/bnVsbDp2b2lkIDAhPT10P3Q6dm9pZCBWUChwbyhuKSl9dmFyIExfLHpyPSgoKT0+dHlwZW9mIGdsb2JhbFRoaXM8InUiJiZnbG9iYWxUaGlzfHx0eXBlb2YgZ2xvYmFsPCJ1IiYmZ2xvYmFsfHx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93fHx0eXBlb2Ygc2VsZjwidSImJnR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmc2VsZikoKSxYXz17fSxPUj0iX19OR19ESV9GTEFHX18iLGVNPSJuZ1RlbXBUb2tlblBhdGgiLExyZT0ibmdUb2tlblBhdGgiLEJyZT0vXG4vZ20sVnJlPSJcdTAyNzUiLGNIPSJfX3NvdXJjZSI7ZnVuY3Rpb24gVW0obil7bGV0IHQ9TF87cmV0dXJuIExfPW4sdH1mdW5jdGlvbiBIcmUobix0PUNpLkRlZmF1bHQpe2lmKHZvaWQgMD09PUxfKXRocm93IG5ldyB4dCgtMjAzLCExKTtyZXR1cm4gbnVsbD09PUxfP281KG4sdm9pZCAwLHQpOkxfLmdldChuLHQmQ2kuT3B0aW9uYWw/bnVsbDp2b2lkIDAsdCl9ZnVuY3Rpb24gTyhuLHQ9Q2kuRGVmYXVsdCl7cmV0dXJuKGtSfHxIcmUpKEFpKG4pLHQpfWZ1bmN0aW9uIGE1KG4pe3Rocm93IG5ldyB4dCgyMDIsITEpfWZ1bmN0aW9uICRuKG4sdD1DaS5EZWZhdWx0KXtyZXR1cm4gTyhuLFNNKHQpKX1mdW5jdGlvbiBTTShuKXtyZXR1cm4gdHlwZW9mIG4+InUifHwibnVtYmVyIj09dHlwZW9mIG4/bjowfChuLm9wdGlvbmFsJiY4KXwobi5ob3N0JiYxKXwobi5zZWxmJiYyKXwobi5za2lwU2VsZiYmNCl9ZnVuY3Rpb24gRlIobil7bGV0IHQ9W107Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspe2xldCBpPUFpKG5bZV0pO2lmKEFycmF5LmlzQXJyYXkoaSkpe2lmKDA9PT1pLmxlbmd0aCl0aHJvdyBuZXcgeHQoOTAwLCExKTtsZXQgcixvPUNpLkRlZmF1bHQ7Zm9yKGxldCBhPTA7YTxpLmxlbmd0aDthKyspe2xldCBzPWlbYV0sbD16cmUocyk7Im51bWJlciI9PXR5cGVvZiBsPy0xPT09bD9yPXMudG9rZW46b3w9bDpyPXN9dC5wdXNoKE8ocixvKSl9ZWxzZSB0LnB1c2goTyhpKSl9cmV0dXJuIHR9ZnVuY3Rpb24gYWIobix0KXtyZXR1cm4gbltPUl09dCxuLnByb3RvdHlwZVtPUl09dCxufWZ1bmN0aW9uIHpyZShuKXtyZXR1cm4gbltPUl19ZnVuY3Rpb24gcnUobil7cmV0dXJue3RvU3RyaW5nOm59LnRvU3RyaW5nKCl9dmFyIEJfPSgoKT0+e3JldHVybihuPUJffHwoQl89e30pKVtuLk9uUHVzaD0wXT0iT25QdXNoIixuW24uRGVmYXVsdD0xXT0iRGVmYXVsdCIsQl87dmFyIG59KSgpLGFzPSgoKT0+e3JldHVybihuPWFzfHwoYXM9e30pKVtuLkVtdWxhdGVkPTBdPSJFbXVsYXRlZCIsbltuLk5vbmU9Ml09Ik5vbmUiLG5bbi5TaGFkb3dEb209M109IlNoYWRvd0RvbSIsYXM7dmFyIG59KSgpLFpjPXt9LGppPVtdLEVNPSRpKHsiXHUwMjc1Y21wIjokaX0pLHpQPSRpKHsiXHUwMjc1ZGlyIjokaX0pLFVQPSRpKHsiXHUwMjc1cGlwZSI6JGl9KSxzNT0kaSh7Ilx1MDI3NW1vZCI6JGl9KSxLYz0kaSh7Ilx1MDI3NWZhYyI6JGl9KSxWXz0kaSh7X19OR19FTEVNRU5UX0lEX186JGl9KSxHcmU9MDtmdW5jdGlvbiBQKG4pe3JldHVybiBydSgoKT0+e2xldCB0PWM1KG4pLGU9ey4uLnQsZGVjbHM6bi5kZWNscyx2YXJzOm4udmFycyx0ZW1wbGF0ZTpuLnRlbXBsYXRlLGNvbnN0czpuLmNvbnN0c3x8bnVsbCxuZ0NvbnRlbnRTZWxlY3RvcnM6bi5uZ0NvbnRlbnRTZWxlY3RvcnMsb25QdXNoOm4uY2hhbmdlRGV0ZWN0aW9uPT09Ql8uT25QdXNoLGRpcmVjdGl2ZURlZnM6bnVsbCxwaXBlRGVmczpudWxsLGRlcGVuZGVuY2llczp0LnN0YW5kYWxvbmUmJm4uZGVwZW5kZW5jaWVzfHxudWxsLGdldFN0YW5kYWxvbmVJbmplY3RvcjpudWxsLGRhdGE6bi5kYXRhfHx7fSxlbmNhcHN1bGF0aW9uOm4uZW5jYXBzdWxhdGlvbnx8YXMuRW11bGF0ZWQsaWQ6ImMiK0dyZSsrLHN0eWxlczpuLnN0eWxlc3x8amksXzpudWxsLHNjaGVtYXM6bi5zY2hlbWFzfHxudWxsLHRWaWV3Om51bGx9O2Q1KGUpO2xldCBpPW4uZGVwZW5kZW5jaWVzO3JldHVybiBlLmRpcmVjdGl2ZURlZnM9dE0oaSwhMSksZS5waXBlRGVmcz10TShpLCEwKSxlfSl9ZnVuY3Rpb24gc2Iobix0LGUpe2xldCBpPW4uXHUwMjc1Y21wO2kuZGlyZWN0aXZlRGVmcz10TSh0LCExKSxpLnBpcGVEZWZzPXRNKGUsITApfWZ1bmN0aW9uIFdyZShuKXtyZXR1cm4gT3Mobil8fGV1KG4pfWZ1bmN0aW9uIHFyZShuKXtyZXR1cm4gbnVsbCE9PW59ZnVuY3Rpb24geihuKXtyZXR1cm4gcnUoKCk9Pih7dHlwZTpuLnR5cGUsYm9vdHN0cmFwOm4uYm9vdHN0cmFwfHxqaSxkZWNsYXJhdGlvbnM6bi5kZWNsYXJhdGlvbnN8fGppLGltcG9ydHM6bi5pbXBvcnRzfHxqaSxleHBvcnRzOm4uZXhwb3J0c3x8amksdHJhbnNpdGl2ZUNvbXBpbGVTY29wZXM6bnVsbCxzY2hlbWFzOm4uc2NoZW1hc3x8bnVsbCxpZDpuLmlkfHxudWxsfSkpfWZ1bmN0aW9uIGRIKG4sdCl7aWYobnVsbD09bilyZXR1cm4gWmM7bGV0IGU9e307Zm9yKGxldCBpIGluIG4paWYobi5oYXNPd25Qcm9wZXJ0eShpKSl7bGV0IHI9bltpXSxvPXI7QXJyYXkuaXNBcnJheShyKSYmKG89clsxXSxyPXJbMF0pLGVbcl09aSx0JiYodFtyXT1vKX1yZXR1cm4gZX1mdW5jdGlvbiBNZShuKXtyZXR1cm4gcnUoKCk9PntsZXQgdD1jNShuKTtyZXR1cm4gZDUodCksdH0pfWZ1bmN0aW9uIHJmKG4pe3JldHVybnt0eXBlOm4udHlwZSxuYW1lOm4ubmFtZSxmYWN0b3J5Om51bGwscHVyZTohMSE9PW4ucHVyZSxzdGFuZGFsb25lOiEwPT09bi5zdGFuZGFsb25lLG9uRGVzdHJveTpuLnR5cGUucHJvdG90eXBlLm5nT25EZXN0cm95fHxudWxsfX1mdW5jdGlvbiBPcyhuKXtyZXR1cm4gbltFTV18fG51bGx9ZnVuY3Rpb24gZXUobil7cmV0dXJuIG5belBdfHxudWxsfWZ1bmN0aW9uIHR1KG4pe3JldHVybiBuW1VQXXx8bnVsbH1mdW5jdGlvbiBsNShuKXtsZXQgdD1PcyhuKXx8ZXUobil8fHR1KG4pO3JldHVybiBudWxsIT09dCYmdC5zdGFuZGFsb25lfWZ1bmN0aW9uIFptKG4sdCl7bGV0IGU9bltzNV18fG51bGw7aWYoIWUmJiEwPT09dCl0aHJvdyBuZXcgRXJyb3IoYFR5cGUgJHtwbyhuKX0gZG9lcyBub3QgaGF2ZSAnXHUwMjc1bW9kJyBwcm9wZXJ0eS5gKTtyZXR1cm4gZX1mdW5jdGlvbiBjNShuKXtsZXQgdD17fTtyZXR1cm57dHlwZTpuLnR5cGUscHJvdmlkZXJzUmVzb2x2ZXI6bnVsbCxmYWN0b3J5Om51bGwsaG9zdEJpbmRpbmdzOm4uaG9zdEJpbmRpbmdzfHxudWxsLGhvc3RWYXJzOm4uaG9zdFZhcnN8fDAsaG9zdEF0dHJzOm4uaG9zdEF0dHJzfHxudWxsLGNvbnRlbnRRdWVyaWVzOm4uY29udGVudFF1ZXJpZXN8fG51bGwsZGVjbGFyZWRJbnB1dHM6dCxleHBvcnRBczpuLmV4cG9ydEFzfHxudWxsLHN0YW5kYWxvbmU6ITA9PT1uLnN0YW5kYWxvbmUsc2VsZWN0b3JzOm4uc2VsZWN0b3JzfHxqaSx2aWV3UXVlcnk6bi52aWV3UXVlcnl8fG51bGwsZmVhdHVyZXM6bi5mZWF0dXJlc3x8bnVsbCxzZXRJbnB1dDpudWxsLGZpbmRIb3N0RGlyZWN0aXZlRGVmczpudWxsLGhvc3REaXJlY3RpdmVzOm51bGwsaW5wdXRzOmRIKG4uaW5wdXRzLHQpLG91dHB1dHM6ZEgobi5vdXRwdXRzKX19ZnVuY3Rpb24gZDUobil7bi5mZWF0dXJlcz8uZm9yRWFjaCh0PT50KG4pKX1mdW5jdGlvbiB0TShuLHQpe2lmKCFuKXJldHVybiBudWxsO2xldCBlPXQ/dHU6V3JlO3JldHVybigpPT4oImZ1bmN0aW9uIj09dHlwZW9mIG4/bigpOm4pLm1hcChpPT5lKGkpKS5maWx0ZXIocXJlKX12YXIgb3U9MCxGbj0xLGRpPTIsanI9Myx5bD00LHpwPTUsQWE9NixZXz03LFJhPTgsbk09OSxpTT0xMCx1aT0xMSxOUj0xMixRXz0xMyx1SD0xNCxvZj0xNSx4bD0xNixsYj0xNyxqbT0xOCxvYz0xOSxUTT0yMCx1NT0yMSxHcj0yMixqUD0xLHA1PTIsR1A9NyxyTT04LEttPTksSWE9MTA7ZnVuY3Rpb24gVXAobil7cmV0dXJuIEFycmF5LmlzQXJyYXkobikmJiJvYmplY3QiPT10eXBlb2YgbltqUF19ZnVuY3Rpb24gJGMobil7cmV0dXJuIEFycmF5LmlzQXJyYXkobikmJiEwPT09bltqUF19ZnVuY3Rpb24gV1Aobil7cmV0dXJuIDAhPSg0Jm4uZmxhZ3MpfWZ1bmN0aW9uIERNKG4pe3JldHVybiBuLmNvbXBvbmVudE9mZnNldD4tMX1mdW5jdGlvbiBJTShuKXtyZXR1cm4gMT09KDEmbi5mbGFncyl9ZnVuY3Rpb24gQ2wobil7cmV0dXJuISFuLnRlbXBsYXRlfWZ1bmN0aW9uIFhyZShuKXtyZXR1cm4gMCE9KDI1NiZuW2RpXSl9ZnVuY3Rpb24gR3Aobix0KXtyZXR1cm4gbi5oYXNPd25Qcm9wZXJ0eShLYyk/bltLY106bnVsbH12YXIgTFI9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMucHJldmlvdXNWYWx1ZT10LHRoaXMuY3VycmVudFZhbHVlPWUsdGhpcy5maXJzdENoYW5nZT1pfWlzRmlyc3RDaGFuZ2UoKXtyZXR1cm4gdGhpcy5maXJzdENoYW5nZX19O2Z1bmN0aW9uIHF0KCl7cmV0dXJuIGg1fWZ1bmN0aW9uIGg1KG4pe3JldHVybiBuLnR5cGUucHJvdG90eXBlLm5nT25DaGFuZ2VzJiYobi5zZXRJbnB1dD1RcmUpLFlyZX1mdW5jdGlvbiBZcmUoKXtsZXQgbj1mNSh0aGlzKSx0PW4/LmN1cnJlbnQ7aWYodCl7bGV0IGU9bi5wcmV2aW91cztpZihlPT09WmMpbi5wcmV2aW91cz10O2Vsc2UgZm9yKGxldCBpIGluIHQpZVtpXT10W2ldO24uY3VycmVudD1udWxsLHRoaXMubmdPbkNoYW5nZXModCl9fWZ1bmN0aW9uIFFyZShuLHQsZSxpKXtsZXQgcj10aGlzLmRlY2xhcmVkSW5wdXRzW2VdLG89ZjUobil8fGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG5bbTVdPXR9KG4se3ByZXZpb3VzOlpjLGN1cnJlbnQ6bnVsbH0pLGE9by5jdXJyZW50fHwoby5jdXJyZW50PXt9KSxzPW8ucHJldmlvdXMsbD1zW3JdO2Fbcl09bmV3IExSKGwmJmwuY3VycmVudFZhbHVlLHQscz09PVpjKSxuW2ldPXR9cXQubmdJbmhlcml0PSEwO3ZhciBtNT0iX19uZ1NpbXBsZUNoYW5nZXNfXyI7ZnVuY3Rpb24gZjUobil7cmV0dXJuIG5bbTVdfHxudWxsfXZhciBrcz1mdW5jdGlvbihuLHQsZSl7fSxnNT0ic3ZnIixfNT0ibWF0aCI7ZnVuY3Rpb24gTHMobil7Zm9yKDtBcnJheS5pc0FycmF5KG4pOyluPW5bb3VdO3JldHVybiBufWZ1bmN0aW9uIEFNKG4sdCl7cmV0dXJuIExzKHRbbl0pfWZ1bmN0aW9uIHNzKG4sdCl7cmV0dXJuIExzKHRbbi5pbmRleF0pfWZ1bmN0aW9uIGI1KG4sdCl7cmV0dXJuIG4uZGF0YVt0XX1mdW5jdGlvbiBhZihuLHQpe3JldHVybiBuW3RdfWZ1bmN0aW9uIGVkKG4sdCl7bGV0IGU9dFtuXTtyZXR1cm4gVXAoZSk/ZTplW291XX1mdW5jdGlvbiBvTShuKXtyZXR1cm4gNjQ9PSg2NCZuW2RpXSl9ZnVuY3Rpb24gbnUobix0KXtyZXR1cm4gbnVsbD09dD9udWxsOm5bdF19ZnVuY3Rpb24gdjUobil7bltqbV09MH1mdW5jdGlvbiBxUChuLHQpe25benBdKz10O2xldCBlPW4saT1uW2pyXTtmb3IoO251bGwhPT1pJiYoMT09PXQmJjE9PT1lW3pwXXx8LTE9PT10JiYwPT09ZVt6cF0pOylpW3pwXSs9dCxlPWksaT1pW2pyXX12YXIgR249e2xGcmFtZTpUNShudWxsKSxiaW5kaW5nc0VuYWJsZWQ6ITB9O2Z1bmN0aW9uIHk1KCl7cmV0dXJuIEduLmJpbmRpbmdzRW5hYmxlZH1mdW5jdGlvbiBaZSgpe3JldHVybiBHbi5sRnJhbWUubFZpZXd9ZnVuY3Rpb24gVGkoKXtyZXR1cm4gR24ubEZyYW1lLnRWaWV3fWZ1bmN0aW9uIG5lKG4pe3JldHVybiBHbi5sRnJhbWUuY29udGV4dExWaWV3PW4sbltSYV19ZnVuY3Rpb24gaWUobil7cmV0dXJuIEduLmxGcmFtZS5jb250ZXh0TFZpZXc9bnVsbCxufWZ1bmN0aW9uIExvKCl7bGV0IG49eDUoKTtmb3IoO251bGwhPT1uJiY2ND09PW4udHlwZTspbj1uLnBhcmVudDtyZXR1cm4gbn1mdW5jdGlvbiB4NSgpe3JldHVybiBHbi5sRnJhbWUuY3VycmVudFROb2RlfWZ1bmN0aW9uIFpfKCl7bGV0IG49R24ubEZyYW1lLHQ9bi5jdXJyZW50VE5vZGU7cmV0dXJuIG4uaXNQYXJlbnQ/dDp0LnBhcmVudH1mdW5jdGlvbiBhYyhuLHQpe2xldCBlPUduLmxGcmFtZTtlLmN1cnJlbnRUTm9kZT1uLGUuaXNQYXJlbnQ9dH1mdW5jdGlvbiBYUCgpe3JldHVybiBHbi5sRnJhbWUuaXNQYXJlbnR9ZnVuY3Rpb24gWVAoKXtHbi5sRnJhbWUuaXNQYXJlbnQ9ITF9ZnVuY3Rpb24gY2EoKXtsZXQgbj1Hbi5sRnJhbWUsdD1uLmJpbmRpbmdSb290SW5kZXg7cmV0dXJuLTE9PT10JiYodD1uLmJpbmRpbmdSb290SW5kZXg9bi50Vmlldy5iaW5kaW5nU3RhcnRJbmRleCksdH1mdW5jdGlvbiB0ZCgpe3JldHVybiBHbi5sRnJhbWUuYmluZGluZ0luZGV4fWZ1bmN0aW9uIEM1KG4pe3JldHVybiBHbi5sRnJhbWUuYmluZGluZ0luZGV4PW59ZnVuY3Rpb24gc2YoKXtyZXR1cm4gR24ubEZyYW1lLmJpbmRpbmdJbmRleCsrfWZ1bmN0aW9uIG5kKG4pe2xldCB0PUduLmxGcmFtZSxlPXQuYmluZGluZ0luZGV4O3JldHVybiB0LmJpbmRpbmdJbmRleD10LmJpbmRpbmdJbmRleCtuLGV9ZnVuY3Rpb24gTTUobil7R24ubEZyYW1lLmluSTE4bj1ufWZ1bmN0aW9uIHNvZShuLHQpe2xldCBlPUduLmxGcmFtZTtlLmJpbmRpbmdJbmRleD1lLmJpbmRpbmdSb290SW5kZXg9bixCUih0KX1mdW5jdGlvbiBCUihuKXtHbi5sRnJhbWUuY3VycmVudERpcmVjdGl2ZUluZGV4PW59ZnVuY3Rpb24gUVAobil7bGV0IHQ9R24ubEZyYW1lLmN1cnJlbnREaXJlY3RpdmVJbmRleDtyZXR1cm4tMT09PXQ/bnVsbDpuW3RdfWZ1bmN0aW9uIHc1KCl7cmV0dXJuIEduLmxGcmFtZS5jdXJyZW50UXVlcnlJbmRleH1mdW5jdGlvbiBaUChuKXtHbi5sRnJhbWUuY3VycmVudFF1ZXJ5SW5kZXg9bn1mdW5jdGlvbiBjb2Uobil7bGV0IHQ9bltGbl07cmV0dXJuIDI9PT10LnR5cGU/dC5kZWNsVE5vZGU6MT09PXQudHlwZT9uW0FhXTpudWxsfWZ1bmN0aW9uIFM1KG4sdCxlKXtpZihlJkNpLlNraXBTZWxmKXtsZXQgcj10LG89bjtmb3IoOyEocj1yLnBhcmVudCxudWxsIT09cnx8ZSZDaS5Ib3N0fHwocj1jb2UobyksbnVsbD09PXJ8fChvPW9bb2ZdLDEwJnIudHlwZSkpKTspO2lmKG51bGw9PT1yKXJldHVybiExO3Q9cixuPW99bGV0IGk9R24ubEZyYW1lPUU1KCk7cmV0dXJuIGkuY3VycmVudFROb2RlPXQsaS5sVmlldz1uLCEwfWZ1bmN0aW9uIEtQKG4pe2xldCB0PUU1KCksZT1uW0ZuXTtHbi5sRnJhbWU9dCx0LmN1cnJlbnRUTm9kZT1lLmZpcnN0Q2hpbGQsdC5sVmlldz1uLHQudFZpZXc9ZSx0LmNvbnRleHRMVmlldz1uLHQuYmluZGluZ0luZGV4PWUuYmluZGluZ1N0YXJ0SW5kZXgsdC5pbkkxOG49ITF9ZnVuY3Rpb24gRTUoKXtsZXQgbj1Hbi5sRnJhbWUsdD1udWxsPT09bj9udWxsOm4uY2hpbGQ7cmV0dXJuIG51bGw9PT10P1Q1KG4pOnR9ZnVuY3Rpb24gVDUobil7bGV0IHQ9e2N1cnJlbnRUTm9kZTpudWxsLGlzUGFyZW50OiEwLGxWaWV3Om51bGwsdFZpZXc6bnVsbCxzZWxlY3RlZEluZGV4Oi0xLGNvbnRleHRMVmlldzpudWxsLGVsZW1lbnREZXB0aENvdW50OjAsY3VycmVudE5hbWVzcGFjZTpudWxsLGN1cnJlbnREaXJlY3RpdmVJbmRleDotMSxiaW5kaW5nUm9vdEluZGV4Oi0xLGJpbmRpbmdJbmRleDotMSxjdXJyZW50UXVlcnlJbmRleDowLHBhcmVudDpuLGNoaWxkOm51bGwsaW5JMThuOiExfTtyZXR1cm4gbnVsbCE9PW4mJihuLmNoaWxkPXQpLHR9ZnVuY3Rpb24gRDUoKXtsZXQgbj1Hbi5sRnJhbWU7cmV0dXJuIEduLmxGcmFtZT1uLnBhcmVudCxuLmN1cnJlbnRUTm9kZT1udWxsLG4ubFZpZXc9bnVsbCxufXZhciBJNT1ENTtmdW5jdGlvbiBKUCgpe2xldCBuPUQ1KCk7bi5pc1BhcmVudD0hMCxuLnRWaWV3PW51bGwsbi5zZWxlY3RlZEluZGV4PS0xLG4uY29udGV4dExWaWV3PW51bGwsbi5lbGVtZW50RGVwdGhDb3VudD0wLG4uY3VycmVudERpcmVjdGl2ZUluZGV4PS0xLG4uY3VycmVudE5hbWVzcGFjZT1udWxsLG4uYmluZGluZ1Jvb3RJbmRleD0tMSxuLmJpbmRpbmdJbmRleD0tMSxuLmN1cnJlbnRRdWVyeUluZGV4PTB9ZnVuY3Rpb24gZGEoKXtyZXR1cm4gR24ubEZyYW1lLnNlbGVjdGVkSW5kZXh9ZnVuY3Rpb24gV3Aobil7R24ubEZyYW1lLnNlbGVjdGVkSW5kZXg9bn1mdW5jdGlvbiBQcigpe2xldCBuPUduLmxGcmFtZTtyZXR1cm4gYjUobi50VmlldyxuLnNlbGVjdGVkSW5kZXgpfWZ1bmN0aW9uIHFuKCl7R24ubEZyYW1lLmN1cnJlbnROYW1lc3BhY2U9ZzV9ZnVuY3Rpb24gdWEoKXtHbi5sRnJhbWUuY3VycmVudE5hbWVzcGFjZT1udWxsfWZ1bmN0aW9uIFJNKG4sdCl7Zm9yKGxldCBlPXQuZGlyZWN0aXZlU3RhcnQsaT10LmRpcmVjdGl2ZUVuZDtlPGk7ZSsrKXtsZXQgbz1uLmRhdGFbZV0udHlwZS5wcm90b3R5cGUse25nQWZ0ZXJDb250ZW50SW5pdDphLG5nQWZ0ZXJDb250ZW50Q2hlY2tlZDpzLG5nQWZ0ZXJWaWV3SW5pdDpsLG5nQWZ0ZXJWaWV3Q2hlY2tlZDpjLG5nT25EZXN0cm95OmR9PW87YSYmKG4uY29udGVudEhvb2tzPz8obi5jb250ZW50SG9va3M9W10pKS5wdXNoKC1lLGEpLHMmJigobi5jb250ZW50SG9va3M/PyhuLmNvbnRlbnRIb29rcz1bXSkpLnB1c2goZSxzKSwobi5jb250ZW50Q2hlY2tIb29rcz8/KG4uY29udGVudENoZWNrSG9va3M9W10pKS5wdXNoKGUscykpLGwmJihuLnZpZXdIb29rcz8/KG4udmlld0hvb2tzPVtdKSkucHVzaCgtZSxsKSxjJiYoKG4udmlld0hvb2tzPz8obi52aWV3SG9va3M9W10pKS5wdXNoKGUsYyksKG4udmlld0NoZWNrSG9va3M/PyhuLnZpZXdDaGVja0hvb2tzPVtdKSkucHVzaChlLGMpKSxudWxsIT1kJiYobi5kZXN0cm95SG9va3M/PyhuLmRlc3Ryb3lIb29rcz1bXSkpLnB1c2goZSxkKX19ZnVuY3Rpb24gR0Mobix0LGUpe0E1KG4sdCwzLGUpfWZ1bmN0aW9uIFdDKG4sdCxlLGkpeygzJm5bZGldKT09PWUmJkE1KG4sdCxlLGkpfWZ1bmN0aW9uIHVSKG4sdCl7bGV0IGU9bltkaV07KDMmZSk9PT10JiYoZSY9MjA0NyxlKz0xLG5bZGldPWUpfWZ1bmN0aW9uIEE1KG4sdCxlLGkpe2xldCBvPWk/Py0xLGE9dC5sZW5ndGgtMSxzPTA7Zm9yKGxldCBsPXZvaWQgMCE9PWk/NjU1MzUmbltqbV06MDtsPGE7bCsrKWlmKCJudW1iZXIiPT10eXBlb2YgdFtsKzFdKXtpZihzPXRbbF0sbnVsbCE9aSYmcz49aSlicmVha31lbHNlIHRbbF08MCYmKG5bam1dKz02NTUzNiksKHM8b3x8LTE9PW8pJiYoZ29lKG4sZSx0LGwpLG5bam1dPSg0Mjk0OTAxNzYwJm5bam1dKStsKzIpLGwrK31mdW5jdGlvbiBnb2Uobix0LGUsaSl7bGV0IHI9ZVtpXTwwLG89ZVtpKzFdLHM9bltyPy1lW2ldOmVbaV1dO2lmKHIpe2lmKG5bZGldPj4xMTxuW2ptXT4+MTYmJigzJm5bZGldKT09PXQpe25bZGldKz0yMDQ4LGtzKDQscyxvKTt0cnl7by5jYWxsKHMpfWZpbmFsbHl7a3MoNSxzLG8pfX19ZWxzZXtrcyg0LHMsbyk7dHJ5e28uY2FsbChzKX1maW5hbGx5e2tzKDUscyxvKX19fXZhciBRbT0tMSxxcD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5mYWN0b3J5PXQsdGhpcy5yZXNvbHZpbmc9ITEsdGhpcy5jYW5TZWVWaWV3UHJvdmlkZXJzPWUsdGhpcy5pbmplY3RJbXBsPWl9fTtmdW5jdGlvbiBWUihuLHQsZSl7bGV0IGk9MDtmb3IoO2k8ZS5sZW5ndGg7KXtsZXQgcj1lW2ldO2lmKCJudW1iZXIiPT10eXBlb2Ygcil7aWYoMCE9PXIpYnJlYWs7aSsrO2xldCBvPWVbaSsrXSxhPWVbaSsrXSxzPWVbaSsrXTtuLnNldEF0dHJpYnV0ZSh0LGEscyxvKX1lbHNle2xldCBvPXIsYT1lWysraV07eW9lKG8pP24uc2V0UHJvcGVydHkodCxvLGEpOm4uc2V0QXR0cmlidXRlKHQsbyxhKSxpKyt9fXJldHVybiBpfWZ1bmN0aW9uIFI1KG4pe3JldHVybiAzPT09bnx8ND09PW58fDY9PT1ufWZ1bmN0aW9uIHlvZShuKXtyZXR1cm4gNjQ9PT1uLmNoYXJDb2RlQXQoMCl9ZnVuY3Rpb24gS18obix0KXtpZihudWxsIT09dCYmMCE9PXQubGVuZ3RoKWlmKG51bGw9PT1ufHwwPT09bi5sZW5ndGgpbj10LnNsaWNlKCk7ZWxzZXtsZXQgZT0tMTtmb3IobGV0IGk9MDtpPHQubGVuZ3RoO2krKyl7bGV0IHI9dFtpXTsibnVtYmVyIj09dHlwZW9mIHI/ZT1yOjA9PT1lfHxoSChuLGUscixudWxsLC0xPT09ZXx8Mj09PWU/dFsrK2ldOm51bGwpfX1yZXR1cm4gbn1mdW5jdGlvbiBoSChuLHQsZSxpLHIpe2xldCBvPTAsYT1uLmxlbmd0aDtpZigtMT09PXQpYT0tMTtlbHNlIGZvcig7bzxuLmxlbmd0aDspe2xldCBzPW5bbysrXTtpZigibnVtYmVyIj09dHlwZW9mIHMpe2lmKHM9PT10KXthPS0xO2JyZWFrfWlmKHM+dCl7YT1vLTE7YnJlYWt9fX1mb3IoO288bi5sZW5ndGg7KXtsZXQgcz1uW29dO2lmKCJudW1iZXIiPT10eXBlb2YgcylicmVhaztpZihzPT09ZSl7aWYobnVsbD09PWkpcmV0dXJuIHZvaWQobnVsbCE9PXImJihuW28rMV09cikpO2lmKGk9PT1uW28rMV0pcmV0dXJuIHZvaWQobltvKzJdPXIpfW8rKyxudWxsIT09aSYmbysrLG51bGwhPT1yJiZvKyt9LTEhPT1hJiYobi5zcGxpY2UoYSwwLHQpLG89YSsxKSxuLnNwbGljZShvKyssMCxlKSxudWxsIT09aSYmbi5zcGxpY2UobysrLDAsaSksbnVsbCE9PXImJm4uc3BsaWNlKG8rKywwLHIpfWZ1bmN0aW9uIFA1KG4pe3JldHVybiBuIT09UW19ZnVuY3Rpb24gYU0obil7cmV0dXJuIDMyNzY3Jm59ZnVuY3Rpb24gc00obix0KXtsZXQgZT1mdW5jdGlvbihuKXtyZXR1cm4gbj4+MTZ9KG4pLGk9dDtmb3IoO2U+MDspaT1pW29mXSxlLS07cmV0dXJuIGl9dmFyIEhSPSEwO2Z1bmN0aW9uIGxNKG4pe2xldCB0PUhSO3JldHVybiBIUj1uLHR9dmFyIGs1PTI1NSxPNT01LE1vZT0wLHJjPXt9O2Z1bmN0aW9uIGNNKG4sdCl7bGV0IGU9RjUobix0KTtpZigtMSE9PWUpcmV0dXJuIGU7bGV0IGk9dFtGbl07aS5maXJzdENyZWF0ZVBhc3MmJihuLmluamVjdG9ySW5kZXg9dC5sZW5ndGgscFIoaS5kYXRhLG4pLHBSKHQsbnVsbCkscFIoaS5ibHVlcHJpbnQsbnVsbCkpO2xldCByPSRQKG4sdCksbz1uLmluamVjdG9ySW5kZXg7aWYoUDUocikpe2xldCBhPWFNKHIpLHM9c00ocix0KSxsPXNbRm5dLmRhdGE7Zm9yKGxldCBjPTA7Yzw4O2MrKyl0W28rY109c1thK2NdfGxbYStjXX1yZXR1cm4gdFtvKzhdPXIsb31mdW5jdGlvbiBwUihuLHQpe24ucHVzaCgwLDAsMCwwLDAsMCwwLDAsdCl9ZnVuY3Rpb24gRjUobix0KXtyZXR1cm4tMT09PW4uaW5qZWN0b3JJbmRleHx8bi5wYXJlbnQmJm4ucGFyZW50LmluamVjdG9ySW5kZXg9PT1uLmluamVjdG9ySW5kZXh8fG51bGw9PT10W24uaW5qZWN0b3JJbmRleCs4XT8tMTpuLmluamVjdG9ySW5kZXh9ZnVuY3Rpb24gJFAobix0KXtpZihuLnBhcmVudCYmLTEhPT1uLnBhcmVudC5pbmplY3RvckluZGV4KXJldHVybiBuLnBhcmVudC5pbmplY3RvckluZGV4O2xldCBlPTAsaT1udWxsLHI9dDtmb3IoO251bGwhPT1yOyl7aWYoaT1INShyKSxudWxsPT09aSlyZXR1cm4gUW07aWYoZSsrLHI9cltvZl0sLTEhPT1pLmluamVjdG9ySW5kZXgpcmV0dXJuIGkuaW5qZWN0b3JJbmRleHxlPDwxNn1yZXR1cm4gUW19ZnVuY3Rpb24gelIobix0LGUpeyFmdW5jdGlvbihuLHQsZSl7bGV0IGk7InN0cmluZyI9PXR5cGVvZiBlP2k9ZS5jaGFyQ29kZUF0KDApfHwwOmUuaGFzT3duUHJvcGVydHkoVl8pJiYoaT1lW1ZfXSksbnVsbD09aSYmKGk9ZVtWX109TW9lKyspO2xldCByPWkmazU7dC5kYXRhW24rKHI+Pk81KV18PTE8PHJ9KG4sdCxlKX1mdW5jdGlvbiBONShuLHQsZSl7aWYoZSZDaS5PcHRpb25hbHx8dm9pZCAwIT09bilyZXR1cm4gbjtWUCgpfWZ1bmN0aW9uIEw1KG4sdCxlLGkpe2lmKGUmQ2kuT3B0aW9uYWwmJnZvaWQgMD09PWkmJihpPW51bGwpLDA9PShlJihDaS5TZWxmfENpLkhvc3QpKSl7bGV0IHI9bltuTV0sbz1Qcyh2b2lkIDApO3RyeXtyZXR1cm4gcj9yLmdldCh0LGksZSZDaS5PcHRpb25hbCk6bzUodCxpLGUmQ2kuT3B0aW9uYWwpfWZpbmFsbHl7UHMobyl9fXJldHVybiBONShpLDAsZSl9ZnVuY3Rpb24gQjUobix0LGUsaT1DaS5EZWZhdWx0LHIpe2lmKG51bGwhPT1uKXtpZigxMDI0JnRbZGldKXtsZXQgYT1mdW5jdGlvbihuLHQsZSxpLHIpe2xldCBvPW4sYT10O2Zvcig7bnVsbCE9PW8mJm51bGwhPT1hJiYxMDI0JmFbZGldJiYhKDI1NiZhW2RpXSk7KXtsZXQgcz1WNShvLGEsZSxpfENpLlNlbGYscmMpO2lmKHMhPT1yYylyZXR1cm4gcztsZXQgbD1vLnBhcmVudDtpZighbCl7bGV0IGM9YVt1NV07aWYoYyl7bGV0IGQ9Yy5nZXQoZSxyYyxpKTtpZihkIT09cmMpcmV0dXJuIGR9bD1INShhKSxhPWFbb2ZdfW89bH1yZXR1cm4gcn0obix0LGUsaSxyYyk7aWYoYSE9PXJjKXJldHVybiBhfWxldCBvPVY1KG4sdCxlLGkscmMpO2lmKG8hPT1yYylyZXR1cm4gb31yZXR1cm4gTDUodCxlLGkscil9ZnVuY3Rpb24gVjUobix0LGUsaSxyKXtsZXQgbz1mdW5jdGlvbihuKXtpZigic3RyaW5nIj09dHlwZW9mIG4pcmV0dXJuIG4uY2hhckNvZGVBdCgwKXx8MDtsZXQgdD1uLmhhc093blByb3BlcnR5KFZfKT9uW1ZfXTp2b2lkIDA7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0P3Q+PTA/dCZrNTpEb2U6dH0oZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG8pe2lmKCFTNSh0LG4saSkpcmV0dXJuIGkmQ2kuSG9zdD9ONShyLDAsaSk6TDUodCxlLGkscik7dHJ5e2xldCBhPW8oaSk7aWYobnVsbCE9YXx8aSZDaS5PcHRpb25hbClyZXR1cm4gYTtWUCgpfWZpbmFsbHl7STUoKX19ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIG8pe2xldCBhPW51bGwscz1GNShuLHQpLGw9UW0sYz1pJkNpLkhvc3Q/dFt4bF1bQWFdOm51bGw7Zm9yKCgtMT09PXN8fGkmQ2kuU2tpcFNlbGYpJiYobD0tMT09PXM/JFAobix0KTp0W3MrOF0sbCE9PVFtJiZmSChpLCExKT8oYT10W0ZuXSxzPWFNKGwpLHQ9c00obCx0KSk6cz0tMSk7LTEhPT1zOyl7bGV0IGQ9dFtGbl07aWYobUgobyxzLGQuZGF0YSkpe2xldCB1PUVvZShzLHQsZSxhLGksYyk7aWYodSE9PXJjKXJldHVybiB1fWw9dFtzKzhdLGwhPT1RbSYmZkgoaSx0W0ZuXS5kYXRhW3MrOF09PT1jKSYmbUgobyxzLHQpPyhhPWQscz1hTShsKSx0PXNNKGwsdCkpOnM9LTF9fXJldHVybiByfWZ1bmN0aW9uIEVvZShuLHQsZSxpLHIsbyl7bGV0IGE9dFtGbl0scz1hLmRhdGFbbis4XSxkPXFDKHMsYSxlLG51bGw9PWk/RE0ocykmJkhSOmkhPWEmJjAhPSgzJnMudHlwZSksciZDaS5Ib3N0JiZvPT09cyk7cmV0dXJuIG51bGwhPT1kP1hwKHQsYSxkLHMpOnJjfWZ1bmN0aW9uIHFDKG4sdCxlLGkscil7bGV0IG89bi5wcm92aWRlckluZGV4ZXMsYT10LmRhdGEscz0xMDQ4NTc1Jm8sbD1uLmRpcmVjdGl2ZVN0YXJ0LGQ9bz4+MjAscD1yP3MrZDpuLmRpcmVjdGl2ZUVuZDtmb3IobGV0IGg9aT9zOnMrZDtoPHA7aCsrKXtsZXQgbT1hW2hdO2lmKGg8bCYmZT09PW18fGg+PWwmJm0udHlwZT09PWUpcmV0dXJuIGh9aWYocil7bGV0IGg9YVtsXTtpZihoJiZDbChoKSYmaC50eXBlPT09ZSlyZXR1cm4gbH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBYcChuLHQsZSxpKXtsZXQgcj1uW2VdLG89dC5kYXRhO2lmKGZ1bmN0aW9uKG4pe3JldHVybiBuIGluc3RhbmNlb2YgcXB9KHIpKXtsZXQgYT1yO2EucmVzb2x2aW5nJiZmdW5jdGlvbihuLHQpe3Rocm93IG5ldyB4dCgtMjAwLGBDaXJjdWxhciBkZXBlbmRlbmN5IGluIERJIGRldGVjdGVkIGZvciAke259YCl9KEJQKG9bZV0pKTtsZXQgcz1sTShhLmNhblNlZVZpZXdQcm92aWRlcnMpO2EucmVzb2x2aW5nPSEwO2xldCBsPWEuaW5qZWN0SW1wbD9QcyhhLmluamVjdEltcGwpOm51bGw7UzUobixpLENpLkRlZmF1bHQpO3RyeXtyPW5bZV09YS5mYWN0b3J5KHZvaWQgMCxvLG4saSksdC5maXJzdENyZWF0ZVBhc3MmJmU+PWkuZGlyZWN0aXZlU3RhcnQmJmZ1bmN0aW9uKG4sdCxlKXtsZXR7bmdPbkNoYW5nZXM6aSxuZ09uSW5pdDpyLG5nRG9DaGVjazpvfT10LnR5cGUucHJvdG90eXBlO2lmKGkpe2xldCBhPWg1KHQpOyhlLnByZU9yZGVySG9va3M/PyhlLnByZU9yZGVySG9va3M9W10pKS5wdXNoKG4sYSksKGUucHJlT3JkZXJDaGVja0hvb2tzPz8oZS5wcmVPcmRlckNoZWNrSG9va3M9W10pKS5wdXNoKG4sYSl9ciYmKGUucHJlT3JkZXJIb29rcz8/KGUucHJlT3JkZXJIb29rcz1bXSkpLnB1c2goMC1uLHIpLG8mJigoZS5wcmVPcmRlckhvb2tzPz8oZS5wcmVPcmRlckhvb2tzPVtdKSkucHVzaChuLG8pLChlLnByZU9yZGVyQ2hlY2tIb29rcz8/KGUucHJlT3JkZXJDaGVja0hvb2tzPVtdKSkucHVzaChuLG8pKX0oZSxvW2VdLHQpfWZpbmFsbHl7bnVsbCE9PWwmJlBzKGwpLGxNKHMpLGEucmVzb2x2aW5nPSExLEk1KCl9fXJldHVybiByfWZ1bmN0aW9uIG1IKG4sdCxlKXtyZXR1cm4hIShlW3QrKG4+Pk81KV0mMTw8bil9ZnVuY3Rpb24gZkgobix0KXtyZXR1cm4hKG4mQ2kuU2VsZnx8biZDaS5Ib3N0JiZ0KX12YXIganA9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLl90Tm9kZT10LHRoaXMuX2xWaWV3PWV9Z2V0KHQsZSxpKXtyZXR1cm4gQjUodGhpcy5fdE5vZGUsdGhpcy5fbFZpZXcsdCxTTShpKSxlKX19O2Z1bmN0aW9uIERvZSgpe3JldHVybiBuZXcganAoTG8oKSxaZSgpKX1mdW5jdGlvbiBYbihuKXtyZXR1cm4gcnUoKCk9PntsZXQgdD1uLnByb3RvdHlwZS5jb25zdHJ1Y3RvcixlPXRbS2NdfHxVUih0KSxpPU9iamVjdC5wcm90b3R5cGUscj1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobi5wcm90b3R5cGUpLmNvbnN0cnVjdG9yO2Zvcig7ciYmciE9PWk7KXtsZXQgbz1yW0tjXXx8VVIocik7aWYobyYmbyE9PWUpcmV0dXJuIG87cj1PYmplY3QuZ2V0UHJvdG90eXBlT2Yocil9cmV0dXJuIG89Pm5ldyBvfSl9ZnVuY3Rpb24gVVIobil7cmV0dXJuIHQ1KG4pPygpPT57bGV0IHQ9VVIoQWkobikpO3JldHVybiB0JiZ0KCl9OkdwKG4pfWZ1bmN0aW9uIEg1KG4pe2xldCB0PW5bRm5dLGU9dC50eXBlO3JldHVybiAyPT09ZT90LmRlY2xUTm9kZToxPT09ZT9uW0FhXTpudWxsfWZ1bmN0aW9uIE1vKG4pe3JldHVybiBmdW5jdGlvbihuLHQpe2lmKCJjbGFzcyI9PT10KXJldHVybiBuLmNsYXNzZXM7aWYoInN0eWxlIj09PXQpcmV0dXJuIG4uc3R5bGVzO2xldCBlPW4uYXR0cnM7aWYoZSl7bGV0IGk9ZS5sZW5ndGgscj0wO2Zvcig7cjxpOyl7bGV0IG89ZVtyXTtpZihSNShvKSlicmVhaztpZigwPT09bylyKz0yO2Vsc2UgaWYoIm51bWJlciI9PXR5cGVvZiBvKWZvcihyKys7cjxpJiYic3RyaW5nIj09dHlwZW9mIGVbcl07KXIrKztlbHNle2lmKG89PT10KXJldHVybiBlW3IrMV07cis9Mn19fXJldHVybiBudWxsfShMbygpLG4pfXZhciBHbT0iX19hbm5vdGF0aW9uc19fIixXbT0iX19wYXJhbWV0ZXJzX18iLHFtPSJfX3Byb3BfX21ldGFkYXRhX18iO2Z1bmN0aW9uIGNiKG4sdCxlLGkscil7cmV0dXJuIHJ1KCgpPT57bGV0IG89ZWsodCk7ZnVuY3Rpb24gYSguLi5zKXtpZih0aGlzIGluc3RhbmNlb2YgYSlyZXR1cm4gby5jYWxsKHRoaXMsLi4ucyksdGhpcztsZXQgbD1uZXcgYSguLi5zKTtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuIHImJnIoZCwuLi5zKSwoZC5oYXNPd25Qcm9wZXJ0eShHbSk/ZFtHbV06T2JqZWN0LmRlZmluZVByb3BlcnR5KGQsR20se3ZhbHVlOltdfSlbR21dKS5wdXNoKGwpLGkmJmkoZCksZH19cmV0dXJuIGUmJihhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSksYS5wcm90b3R5cGUubmdNZXRhZGF0YU5hbWU9bixhLmFubm90YXRpb25DbHM9YSxhfSl9ZnVuY3Rpb24gZWsobil7cmV0dXJuIGZ1bmN0aW9uKC4uLmUpe2lmKG4pe2xldCBpPW4oLi4uZSk7Zm9yKGxldCByIGluIGkpdGhpc1tyXT1pW3JdfX19ZnVuY3Rpb24gbGYobix0LGUpe3JldHVybiBydSgoKT0+e2xldCBpPWVrKHQpO2Z1bmN0aW9uIHIoLi4ubyl7aWYodGhpcyBpbnN0YW5jZW9mIHIpcmV0dXJuIGkuYXBwbHkodGhpcyxvKSx0aGlzO2xldCBhPW5ldyByKC4uLm8pO3JldHVybiBzLmFubm90YXRpb249YSxzO2Z1bmN0aW9uIHMobCxjLGQpe2xldCB1PWwuaGFzT3duUHJvcGVydHkoV20pP2xbV21dOk9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLFdtLHt2YWx1ZTpbXX0pW1dtXTtmb3IoO3UubGVuZ3RoPD1kOyl1LnB1c2gobnVsbCk7cmV0dXJuKHVbZF09dVtkXXx8W10pLnB1c2goYSksbH19cmV0dXJuIGUmJihyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSksci5wcm90b3R5cGUubmdNZXRhZGF0YU5hbWU9bixyLmFubm90YXRpb25DbHM9cixyfSl9ZnVuY3Rpb24gYXUobix0LGUsaSl7cmV0dXJuIHJ1KCgpPT57bGV0IHI9ZWsodCk7ZnVuY3Rpb24gbyguLi5hKXtpZih0aGlzIGluc3RhbmNlb2YgbylyZXR1cm4gci5hcHBseSh0aGlzLGEpLHRoaXM7bGV0IHM9bmV3IG8oLi4uYSk7cmV0dXJuIGZ1bmN0aW9uKGMsZCl7bGV0IHU9Yy5jb25zdHJ1Y3RvcixwPXUuaGFzT3duUHJvcGVydHkocW0pP3VbcW1dOk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LHFtLHt2YWx1ZTp7fX0pW3FtXTtwW2RdPXAuaGFzT3duUHJvcGVydHkoZCkmJnBbZF18fFtdLHBbZF0udW5zaGlmdChzKSxpJiZpKGMsZCwuLi5hKX19cmV0dXJuIGUmJihvLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSksby5wcm90b3R5cGUubmdNZXRhZGF0YU5hbWU9bixvLmFubm90YXRpb25DbHM9byxvfSl9dmFyIEFvZT1sZigiQXR0cmlidXRlIixuPT4oe2F0dHJpYnV0ZU5hbWU6bixfX05HX0VMRU1FTlRfSURfXzooKT0+TW8obil9KSksdGU9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLl9kZXNjPXQsdGhpcy5uZ01ldGFkYXRhTmFtZT0iSW5qZWN0aW9uVG9rZW4iLHRoaXMuXHUwMjc1cHJvdj12b2lkIDAsIm51bWJlciI9PXR5cGVvZiBlP3RoaXMuX19OR19FTEVNRU5UX0lEX189ZTp2b2lkIDAhPT1lJiYodGhpcy5cdTAyNzVwcm92PXVlKHt0b2tlbjp0aGlzLHByb3ZpZGVkSW46ZS5wcm92aWRlZElufHwicm9vdCIsZmFjdG9yeTplLmZhY3Rvcnl9KSl9Z2V0IG11bHRpKCl7cmV0dXJuIHRoaXN9dG9TdHJpbmcoKXtyZXR1cm5gSW5qZWN0aW9uVG9rZW4gJHt0aGlzLl9kZXNjfWB9fSxKbT0obmV3IHRlKCJBbmFseXplRm9yRW50cnlDb21wb25lbnRzIiksY2xhc3N7fSk7ZnVuY3Rpb24gRnMobil7bGV0IHQ9enIubmc7aWYodCYmdC5cdTAyNzVjb21waWxlckZhY2FkZSlyZXR1cm4gdC5cdTAyNzVjb21waWxlckZhY2FkZTt0aHJvdyBuZXcgRXJyb3IoIkpJVCBjb21waWxlciB1bmF2YWlsYWJsZSIpfWF1KCJDb250ZW50Q2hpbGRyZW4iLChuLHQ9e30pPT4oe3NlbGVjdG9yOm4sZmlyc3Q6ITEsaXNWaWV3UXVlcnk6ITEsZGVzY2VuZGFudHM6ITEsZW1pdERpc3RpbmN0Q2hhbmdlc09ubHk6ITAsLi4udH0pLEptKSxhdSgiQ29udGVudENoaWxkIiwobix0PXt9KT0+KHtzZWxlY3RvcjpuLGZpcnN0OiEwLGlzVmlld1F1ZXJ5OiExLGRlc2NlbmRhbnRzOiEwLC4uLnR9KSxKbSksYXUoIlZpZXdDaGlsZHJlbiIsKG4sdD17fSk9Pih7c2VsZWN0b3I6bixmaXJzdDohMSxpc1ZpZXdRdWVyeTohMCxkZXNjZW5kYW50czohMCxlbWl0RGlzdGluY3RDaGFuZ2VzT25seTohMCwuLi50fSksSm0pLGF1KCJWaWV3Q2hpbGQiLChuLHQpPT4oe3NlbGVjdG9yOm4sZmlyc3Q6ITAsaXNWaWV3UXVlcnk6ITAsZGVzY2VuZGFudHM6ITAsLi4udH0pLEptKTt2YXIgUm9lPUZ1bmN0aW9uO2Z1bmN0aW9uIEZfKG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBufWZ1bmN0aW9uIEpkKG4pe3JldHVybiBuLmZsYXQoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKX1mdW5jdGlvbiB0ayhuLHQpe24uZm9yRWFjaChlPT5BcnJheS5pc0FycmF5KGUpP3RrKGUsdCk6dChlKSl9ZnVuY3Rpb24gVTUobix0LGUpe3Q+PW4ubGVuZ3RoP24ucHVzaChlKTpuLnNwbGljZSh0LDAsZSl9ZnVuY3Rpb24gZE0obix0KXtyZXR1cm4gdD49bi5sZW5ndGgtMT9uLnBvcCgpOm4uc3BsaWNlKHQsMSlbMF19ZnVuY3Rpb24gSF8obix0KXtsZXQgZT1bXTtmb3IobGV0IGk9MDtpPG47aSsrKWUucHVzaCh0KTtyZXR1cm4gZX1mdW5jdGlvbiBscyhuLHQsZSl7bGV0IGk9ZGIobix0KTtyZXR1cm4gaT49MD9uWzF8aV09ZTooaT1+aSxmdW5jdGlvbihuLHQsZSxpKXtsZXQgcj1uLmxlbmd0aDtpZihyPT10KW4ucHVzaChlLGkpO2Vsc2UgaWYoMT09PXIpbi5wdXNoKGksblswXSksblswXT1lO2Vsc2V7Zm9yKHItLSxuLnB1c2gobltyLTFdLG5bcl0pO3I+dDspbltyXT1uW3ItMl0sci0tO25bdF09ZSxuW3QrMV09aX19KG4saSx0LGUpKSxpfWZ1bmN0aW9uIGhSKG4sdCl7bGV0IGU9ZGIobix0KTtpZihlPj0wKXJldHVybiBuWzF8ZV19ZnVuY3Rpb24gZGIobix0KXtyZXR1cm4gZnVuY3Rpb24obix0LGUpe2xldCBpPTAscj1uLmxlbmd0aD4+MTtmb3IoO3IhPT1pOyl7bGV0IG89aSsoci1pPj4xKSxhPW5bbzw8MV07aWYodD09PWEpcmV0dXJuIG88PDE7YT50P3I9bzppPW8rMX1yZXR1cm5+KHI8PDEpfShuLHQpfXZhciBGb2U9L15mdW5jdGlvblxzK1xTK1woXClccyp7W1xzXFNdK1wuYXBwbHlcKHRoaXMsXHMqKGFyZ3VtZW50c3woPzpbXigpXStcKFxbXF0sKT9bXigpXStcKGFyZ3VtZW50c1wpLiopXCkvLE5vZT0vXmNsYXNzXHMrW0EtWmEtelxkJF9dKlxzKmV4dGVuZHNccytbXntdK3svLExvZT0vXmNsYXNzXHMrW0EtWmEtelxkJF9dKlxzKmV4dGVuZHNccytbXntdK3tbXHNcU10qY29uc3RydWN0b3JccypcKC8sQm9lPS9eY2xhc3NccytbQS1aYS16XGQkX10qXHMqZXh0ZW5kc1xzK1tee10re1tcc1xTXSpjb25zdHJ1Y3RvclxzKlwoXClccyp7W159XSpzdXBlclwoXC5cLlwuYXJndW1lbnRzXCkvLGpSPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX3JlZmxlY3Q9dHx8enIuUmVmbGVjdH1mYWN0b3J5KHQpe3JldHVybiguLi5lKT0+bmV3IHQoLi4uZSl9X3ppcFR5cGVzQW5kQW5ub3RhdGlvbnModCxlKXtsZXQgaTtpPUhfKHR5cGVvZiB0PiJ1Ij9lLmxlbmd0aDp0Lmxlbmd0aCk7Zm9yKGxldCByPTA7cjxpLmxlbmd0aDtyKyspaVtyXT10eXBlb2YgdD4idSI/W106dFtyXSYmdFtyXSE9T2JqZWN0P1t0W3JdXTpbXSxlJiZudWxsIT1lW3JdJiYoaVtyXT1pW3JdLmNvbmNhdChlW3JdKSk7cmV0dXJuIGl9X293blBhcmFtZXRlcnModCxlKXtsZXQgaT10LnRvU3RyaW5nKCk7aWYoRm9lLnRlc3Qobj1pKXx8Qm9lLnRlc3Qobil8fE5vZS50ZXN0KG4pJiYhTG9lLnRlc3QobikpcmV0dXJuIG51bGw7dmFyIG47aWYodC5wYXJhbWV0ZXJzJiZ0LnBhcmFtZXRlcnMhPT1lLnBhcmFtZXRlcnMpcmV0dXJuIHQucGFyYW1ldGVycztsZXQgcj10LmN0b3JQYXJhbWV0ZXJzO2lmKHImJnIhPT1lLmN0b3JQYXJhbWV0ZXJzKXtsZXQgcz0iZnVuY3Rpb24iPT10eXBlb2Ygcj9yKCk6cixsPXMubWFwKGQ9PmQmJmQudHlwZSksYz1zLm1hcChkPT5kJiZtUihkLmRlY29yYXRvcnMpKTtyZXR1cm4gdGhpcy5femlwVHlwZXNBbmRBbm5vdGF0aW9ucyhsLGMpfWxldCBvPXQuaGFzT3duUHJvcGVydHkoV20pJiZ0W1dtXSxhPXRoaXMuX3JlZmxlY3QmJnRoaXMuX3JlZmxlY3QuZ2V0T3duTWV0YWRhdGEmJnRoaXMuX3JlZmxlY3QuZ2V0T3duTWV0YWRhdGEoImRlc2lnbjpwYXJhbXR5cGVzIix0KTtyZXR1cm4gYXx8bz90aGlzLl96aXBUeXBlc0FuZEFubm90YXRpb25zKGEsbyk6SF8odC5sZW5ndGgpfXBhcmFtZXRlcnModCl7aWYoIUZfKHQpKXJldHVybltdO2xldCBlPVZDKHQpLGk9dGhpcy5fb3duUGFyYW1ldGVycyh0LGUpO3JldHVybiFpJiZlIT09T2JqZWN0JiYoaT10aGlzLnBhcmFtZXRlcnMoZSkpLGl8fFtdfV9vd25Bbm5vdGF0aW9ucyh0LGUpe2lmKHQuYW5ub3RhdGlvbnMmJnQuYW5ub3RhdGlvbnMhPT1lLmFubm90YXRpb25zKXtsZXQgaT10LmFubm90YXRpb25zO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBpJiZpLmFubm90YXRpb25zJiYoaT1pLmFubm90YXRpb25zKSxpfXJldHVybiB0LmRlY29yYXRvcnMmJnQuZGVjb3JhdG9ycyE9PWUuZGVjb3JhdG9ycz9tUih0LmRlY29yYXRvcnMpOnQuaGFzT3duUHJvcGVydHkoR20pP3RbR21dOm51bGx9YW5ub3RhdGlvbnModCl7aWYoIUZfKHQpKXJldHVybltdO2xldCBlPVZDKHQpLGk9dGhpcy5fb3duQW5ub3RhdGlvbnModCxlKXx8W107cmV0dXJuKGUhPT1PYmplY3Q/dGhpcy5hbm5vdGF0aW9ucyhlKTpbXSkuY29uY2F0KGkpfV9vd25Qcm9wTWV0YWRhdGEodCxlKXtpZih0LnByb3BNZXRhZGF0YSYmdC5wcm9wTWV0YWRhdGEhPT1lLnByb3BNZXRhZGF0YSl7bGV0IGk9dC5wcm9wTWV0YWRhdGE7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGkmJmkucHJvcE1ldGFkYXRhJiYoaT1pLnByb3BNZXRhZGF0YSksaX1pZih0LnByb3BEZWNvcmF0b3JzJiZ0LnByb3BEZWNvcmF0b3JzIT09ZS5wcm9wRGVjb3JhdG9ycyl7bGV0IGk9dC5wcm9wRGVjb3JhdG9ycyxyPXt9O3JldHVybiBPYmplY3Qua2V5cyhpKS5mb3JFYWNoKG89PntyW29dPW1SKGlbb10pfSkscn1yZXR1cm4gdC5oYXNPd25Qcm9wZXJ0eShxbSk/dFtxbV06bnVsbH1wcm9wTWV0YWRhdGEodCl7aWYoIUZfKHQpKXJldHVybnt9O2xldCBlPVZDKHQpLGk9e307aWYoZSE9PU9iamVjdCl7bGV0IG89dGhpcy5wcm9wTWV0YWRhdGEoZSk7T2JqZWN0LmtleXMobykuZm9yRWFjaChhPT57aVthXT1vW2FdfSl9bGV0IHI9dGhpcy5fb3duUHJvcE1ldGFkYXRhKHQsZSk7cmV0dXJuIHImJk9iamVjdC5rZXlzKHIpLmZvckVhY2gobz0+e2xldCBhPVtdO2kuaGFzT3duUHJvcGVydHkobykmJmEucHVzaCguLi5pW29dKSxhLnB1c2goLi4ucltvXSksaVtvXT1hfSksaX1vd25Qcm9wTWV0YWRhdGEodCl7cmV0dXJuIEZfKHQpJiZ0aGlzLl9vd25Qcm9wTWV0YWRhdGEodCxWQyh0KSl8fHt9fWhhc0xpZmVjeWNsZUhvb2sodCxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIFJvZSYmZSBpbiB0LnByb3RvdHlwZX19O2Z1bmN0aW9uIG1SKG4pe3JldHVybiBuP24ubWFwKHQ9Pm5ldygwLHQudHlwZS5hbm5vdGF0aW9uQ2xzKSguLi50LmFyZ3M/dC5hcmdzOltdKSk6W119ZnVuY3Rpb24gVkMobil7bGV0IHQ9bi5wcm90b3R5cGU/T2JqZWN0LmdldFByb3RvdHlwZU9mKG4ucHJvdG90eXBlKTpudWxsO3JldHVybih0P3QuY29uc3RydWN0b3I6bnVsbCl8fE9iamVjdH12YXIgY2Y9YWIobGYoIkluamVjdCIsbj0+KHt0b2tlbjpufSkpLC0xKSxrYT1hYihsZigiT3B0aW9uYWwiKSw4KSxIb2U9YWIobGYoIlNlbGYiKSwyKSxpZD1hYihsZigiU2tpcFNlbGYiKSw0KSx6b2U9YWIobGYoIkhvc3QiKSwxKSxnSD1udWxsO2Z1bmN0aW9uIG5rKCl7cmV0dXJuIGdIPWdIfHxuZXcgalJ9ZnVuY3Rpb24gUE0obil7cmV0dXJuIGo1KG5rKCkucGFyYW1ldGVycyhuKSl9ZnVuY3Rpb24gajUobil7cmV0dXJuIG4ubWFwKHQ9PmZ1bmN0aW9uKG4pe2xldCB0PXt0b2tlbjpudWxsLGF0dHJpYnV0ZTpudWxsLGhvc3Q6ITEsb3B0aW9uYWw6ITEsc2VsZjohMSxza2lwU2VsZjohMX07aWYoQXJyYXkuaXNBcnJheShuKSYmbi5sZW5ndGg+MClmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKyl7bGV0IGk9bltlXTtpZih2b2lkIDA9PT1pKWNvbnRpbnVlO2xldCByPU9iamVjdC5nZXRQcm90b3R5cGVPZihpKTtpZihpIGluc3RhbmNlb2Yga2F8fCJPcHRpb25hbCI9PT1yLm5nTWV0YWRhdGFOYW1lKXQub3B0aW9uYWw9ITA7ZWxzZSBpZihpIGluc3RhbmNlb2YgaWR8fCJTa2lwU2VsZiI9PT1yLm5nTWV0YWRhdGFOYW1lKXQuc2tpcFNlbGY9ITA7ZWxzZSBpZihpIGluc3RhbmNlb2YgSG9lfHwiU2VsZiI9PT1yLm5nTWV0YWRhdGFOYW1lKXQuc2VsZj0hMDtlbHNlIGlmKGkgaW5zdGFuY2VvZiB6b2V8fCJIb3N0Ij09PXIubmdNZXRhZGF0YU5hbWUpdC5ob3N0PSEwO2Vsc2UgaWYoaSBpbnN0YW5jZW9mIGNmKXQudG9rZW49aS50b2tlbjtlbHNlIGlmKGkgaW5zdGFuY2VvZiBBb2Upe2lmKHZvaWQgMD09PWkuYXR0cmlidXRlTmFtZSl0aHJvdyBuZXcgeHQoMjA0LCExKTt0LmF0dHJpYnV0ZT1pLmF0dHJpYnV0ZU5hbWV9ZWxzZSB0LnRva2VuPWl9ZWxzZSB0LnRva2VuPXZvaWQgMD09PW58fEFycmF5LmlzQXJyYXkobikmJjA9PT1uLmxlbmd0aD9udWxsOm47cmV0dXJuIHR9KHQpKX12YXIgSl89bmV3IE1hcCxHNT1uZXcgU2V0O2Z1bmN0aW9uIFc1KG4pe3JldHVybiEhKG4udGVtcGxhdGVVcmwmJiFuLmhhc093blByb3BlcnR5KCJ0ZW1wbGF0ZSIpfHxuLnN0eWxlVXJscyYmbi5zdHlsZVVybHMubGVuZ3RoKX12YXIgX0g9bmV3IE1hcCxRb2U9ITA7ZnVuY3Rpb24gcTUobix0KXsoZnVuY3Rpb24obix0LGUpe2lmKHQmJnQhPT1lJiZRb2UpdGhyb3cgbmV3IEVycm9yKGBEdXBsaWNhdGUgbW9kdWxlIHJlZ2lzdGVyZWQgZm9yICR7bn0gLSAke3BvKHQpfSB2cyAke3BvKHQubmFtZSl9YCl9KSh0LF9ILmdldCh0KXx8bnVsbCxuKSxfSC5zZXQodCxuKX12YXIgR1IsTnM9KCgpPT57cmV0dXJuKG49TnN8fChOcz17fSkpW24uSW1wb3J0YW50PTFdPSJJbXBvcnRhbnQiLG5bbi5EYXNoQ2FzZT0yXT0iRGFzaENhc2UiLE5zO3ZhciBufSkoKSxLb2U9L14+fF4tPnw8IS0tfC0tPnwtLSE+fDwhLSQvZyxKb2U9Lyg8fD4pLywkb2U9Ilx1MjAwYiQxXHUyMDBiIixYNT1uZXcgTWFwLHRhZT0wLGJIPSJfX25nQ29udGV4dF9fIjtmdW5jdGlvbiBzYyhuLHQpe1VwKHQpPyhuW2JIXT10W1RNXSxmdW5jdGlvbihuKXtYNS5zZXQobltUTV0sbil9KHQpKTpuW2JIXT10fWZ1bmN0aW9uIGlrKG4sdCl7cmV0dXJuIEdSKG4sdCl9ZnVuY3Rpb24gcmsobil7bGV0IHQ9bltqcl07cmV0dXJuICRjKHQpP3RbanJdOnR9ZnVuY3Rpb24gb2sobil7cmV0dXJuIFk1KG5bUV9dKX1mdW5jdGlvbiBhayhuKXtyZXR1cm4gWTUoblt5bF0pfWZ1bmN0aW9uIFk1KG4pe2Zvcig7bnVsbCE9PW4mJiEkYyhuKTspbj1uW3lsXTtyZXR1cm4gbn1mdW5jdGlvbiBYbShuLHQsZSxpLHIpe2lmKG51bGwhPWkpe2xldCBvLGE9ITE7JGMoaSk/bz1pOlVwKGkpJiYoYT0hMCxpPWlbb3VdKTtsZXQgcz1McyhpKTswPT09biYmbnVsbCE9PWU/bnVsbD09cj9leih0LGUscyk6WXAodCxlLHMscnx8bnVsbCwhMCk6MT09PW4mJm51bGwhPT1lP1lwKHQsZSxzLHJ8fG51bGwsITApOjI9PT1uP2NrKHQscyxhKTozPT09biYmdC5kZXN0cm95Tm9kZShzKSxudWxsIT1vJiZmdW5jdGlvbihuLHQsZSxpLHIpe2xldCBvPWVbR1BdO28hPT1McyhlKSYmWG0odCxuLGksbyxyKTtmb3IobGV0IHM9SWE7czxlLmxlbmd0aDtzKyspe2xldCBsPWVbc107dWIobFtGbl0sbCxuLHQsaSxvKX19KHQsbixvLGUscil9fWZ1bmN0aW9uIHNrKG4sdCl7cmV0dXJuIG4uY3JlYXRlVGV4dCh0KX1mdW5jdGlvbiBRNShuLHQsZSl7bi5zZXRWYWx1ZSh0LGUpfWZ1bmN0aW9uIGFhZShuLHQpe3JldHVybiBuLmNyZWF0ZUNvbW1lbnQoZnVuY3Rpb24obil7cmV0dXJuIG4ucmVwbGFjZShLb2UsdD0+dC5yZXBsYWNlKEpvZSwkb2UpKX0odCkpfWZ1bmN0aW9uIGxrKG4sdCxlKXtyZXR1cm4gbi5jcmVhdGVFbGVtZW50KHQsZSl9ZnVuY3Rpb24gWjUobix0KXtsZXQgZT1uW0ttXSxpPWUuaW5kZXhPZih0KSxyPXRbanJdOzUxMiZ0W2RpXSYmKHRbZGldJj0tNTEzLHFQKHIsLTEpKSxlLnNwbGljZShpLDEpfWZ1bmN0aW9uIFdSKG4sdCl7aWYobi5sZW5ndGg8PUlhKXJldHVybjtsZXQgZT1JYSt0LGk9bltlXTtpZihpKXtsZXQgcj1pW2xiXTtudWxsIT09ciYmciE9PW4mJlo1KHIsaSksdD4wJiYobltlLTFdW3lsXT1pW3lsXSk7bGV0IG89ZE0obixJYSt0KTshZnVuY3Rpb24obix0KXt1YihuLHQsdFt1aV0sMixudWxsLG51bGwpLHRbb3VdPW51bGwsdFtBYV09bnVsbH0oaVtGbl0saSk7bGV0IGE9b1tvY107bnVsbCE9PWEmJmEuZGV0YWNoVmlldyhvW0ZuXSksaVtqcl09bnVsbCxpW3lsXT1udWxsLGlbZGldJj0tNjV9cmV0dXJuIGl9ZnVuY3Rpb24gSzUobix0KXtpZighKDEyOCZ0W2RpXSkpe2xldCBlPXRbdWldO2UuZGVzdHJveU5vZGUmJnViKG4sdCxlLDMsbnVsbCxudWxsKSxmdW5jdGlvbihuKXtsZXQgdD1uW1FfXTtpZighdClyZXR1cm4gZlIobltGbl0sbik7Zm9yKDt0Oyl7bGV0IGU9bnVsbDtpZihVcCh0KSllPXRbUV9dO2Vsc2V7bGV0IGk9dFtJYV07aSYmKGU9aSl9aWYoIWUpe2Zvcig7dCYmIXRbeWxdJiZ0IT09bjspVXAodCkmJmZSKHRbRm5dLHQpLHQ9dFtqcl07bnVsbD09PXQmJih0PW4pLFVwKHQpJiZmUih0W0ZuXSx0KSxlPXQmJnRbeWxdfXQ9ZX19KHQpfX1mdW5jdGlvbiBmUihuLHQpe2lmKCEoMTI4JnRbZGldKSl7dFtkaV0mPS02NSx0W2RpXXw9MTI4LGZ1bmN0aW9uKG4sdCl7bGV0IGU7aWYobnVsbCE9biYmbnVsbCE9KGU9bi5kZXN0cm95SG9va3MpKWZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSs9Mil7bGV0IHI9dFtlW2ldXTtpZighKHIgaW5zdGFuY2VvZiBxcCkpe2xldCBvPWVbaSsxXTtpZihBcnJheS5pc0FycmF5KG8pKWZvcihsZXQgYT0wO2E8by5sZW5ndGg7YSs9Mil7bGV0IHM9cltvW2FdXSxsPW9bYSsxXTtrcyg0LHMsbCk7dHJ5e2wuY2FsbChzKX1maW5hbGx5e2tzKDUscyxsKX19ZWxzZXtrcyg0LHIsbyk7dHJ5e28uY2FsbChyKX1maW5hbGx5e2tzKDUscixvKX19fX19KG4sdCksZnVuY3Rpb24obix0KXtsZXQgZT1uLmNsZWFudXAsaT10W1lfXSxyPS0xO2lmKG51bGwhPT1lKWZvcihsZXQgbz0wO288ZS5sZW5ndGgtMTtvKz0yKWlmKCJzdHJpbmciPT10eXBlb2YgZVtvXSl7bGV0IGE9ZVtvKzNdO2E+PTA/aVtyPWFdKCk6aVtyPS1hXS51bnN1YnNjcmliZSgpLG8rPTJ9ZWxzZXtsZXQgYT1pW3I9ZVtvKzFdXTtlW29dLmNhbGwoYSl9aWYobnVsbCE9PWkpe2ZvcihsZXQgbz1yKzE7bzxpLmxlbmd0aDtvKyspKDAsaVtvXSkoKTt0W1lfXT1udWxsfX0obix0KSwxPT09dFtGbl0udHlwZSYmdFt1aV0uZGVzdHJveSgpO2xldCBlPXRbbGJdO2lmKG51bGwhPT1lJiYkYyh0W2pyXSkpe2UhPT10W2pyXSYmWjUoZSx0KTtsZXQgaT10W29jXTtudWxsIT09aSYmaS5kZXRhY2hWaWV3KG4pfSFmdW5jdGlvbihuKXtYNS5kZWxldGUobltUTV0pfSh0KX19ZnVuY3Rpb24gSjUobix0LGUpe3JldHVybiAkNShuLHQucGFyZW50LGUpfWZ1bmN0aW9uICQ1KG4sdCxlKXtsZXQgaT10O2Zvcig7bnVsbCE9PWkmJjQwJmkudHlwZTspaT0odD1pKS5wYXJlbnQ7aWYobnVsbD09PWkpcmV0dXJuIGVbb3VdO3tsZXR7Y29tcG9uZW50T2Zmc2V0OnJ9PWk7aWYocj4tMSl7bGV0e2VuY2Fwc3VsYXRpb246b309bi5kYXRhW2kuZGlyZWN0aXZlU3RhcnQrcl07aWYobz09PWFzLk5vbmV8fG89PT1hcy5FbXVsYXRlZClyZXR1cm4gbnVsbH1yZXR1cm4gc3MoaSxlKX19ZnVuY3Rpb24gWXAobix0LGUsaSxyKXtuLmluc2VydEJlZm9yZSh0LGUsaSxyKX1mdW5jdGlvbiBleihuLHQsZSl7bi5hcHBlbmRDaGlsZCh0LGUpfWZ1bmN0aW9uIHZIKG4sdCxlLGkscil7bnVsbCE9PWk/WXAobix0LGUsaSxyKTpleihuLHQsZSl9ZnVuY3Rpb24ga00obix0KXtyZXR1cm4gbi5wYXJlbnROb2RlKHQpfWZ1bmN0aW9uIHR6KG4sdCxlKXtyZXR1cm4gaXoobix0LGUpfWZ1bmN0aW9uIG56KG4sdCxlKXtyZXR1cm4gNDAmbi50eXBlP3NzKG4sZSk6bnVsbH12YXIgcVIsSEMsWVIsekMsaXo9bno7ZnVuY3Rpb24gcnoobix0KXtpej1uLHFSPXR9ZnVuY3Rpb24gT00obix0LGUsaSl7bGV0IHI9SjUobixpLHQpLG89dFt1aV0scz10eihpLnBhcmVudHx8dFtBYV0saSx0KTtpZihudWxsIT1yKWlmKEFycmF5LmlzQXJyYXkoZSkpZm9yKGxldCBsPTA7bDxlLmxlbmd0aDtsKyspdkgobyxyLGVbbF0scywhMSk7ZWxzZSB2SChvLHIsZSxzLCExKTt2b2lkIDAhPT1xUiYmcVIobyxpLHQsZSxyKX1mdW5jdGlvbiBYQyhuLHQpe2lmKG51bGwhPT10KXtsZXQgZT10LnR5cGU7aWYoMyZlKXJldHVybiBzcyh0LG4pO2lmKDQmZSlyZXR1cm4gWFIoLTEsblt0LmluZGV4XSk7aWYoOCZlKXtsZXQgaT10LmNoaWxkO2lmKG51bGwhPT1pKXJldHVybiBYQyhuLGkpO3tsZXQgcj1uW3QuaW5kZXhdO3JldHVybiAkYyhyKT9YUigtMSxyKTpMcyhyKX19aWYoMzImZSlyZXR1cm4gaWsodCxuKSgpfHxMcyhuW3QuaW5kZXhdKTt7bGV0IGk9b3oobix0KTtyZXR1cm4gbnVsbCE9PWk/QXJyYXkuaXNBcnJheShpKT9pWzBdOlhDKHJrKG5beGxdKSxpKTpYQyhuLHQubmV4dCl9fXJldHVybiBudWxsfWZ1bmN0aW9uIG96KG4sdCl7cmV0dXJuIG51bGwhPT10P25beGxdW0FhXS5wcm9qZWN0aW9uW3QucHJvamVjdGlvbl06bnVsbH1mdW5jdGlvbiBYUihuLHQpe2xldCBlPUlhK24rMTtpZihlPHQubGVuZ3RoKXtsZXQgaT10W2VdLHI9aVtGbl0uZmlyc3RDaGlsZDtpZihudWxsIT09cilyZXR1cm4gWEMoaSxyKX1yZXR1cm4gdFtHUF19ZnVuY3Rpb24gY2sobix0LGUpe2xldCBpPWtNKG4sdCk7aSYmZnVuY3Rpb24obix0LGUsaSl7bi5yZW1vdmVDaGlsZCh0LGUsaSl9KG4saSx0LGUpfWZ1bmN0aW9uIGRrKG4sdCxlLGkscixvLGEpe2Zvcig7bnVsbCE9ZTspe2xldCBzPWlbZS5pbmRleF0sbD1lLnR5cGU7aWYoYSYmMD09PXQmJihzJiZzYyhMcyhzKSxpKSxlLmZsYWdzfD0yKSwzMiE9KDMyJmUuZmxhZ3MpKWlmKDgmbClkayhuLHQsZS5jaGlsZCxpLHIsbywhMSksWG0odCxuLHIscyxvKTtlbHNlIGlmKDMyJmwpe2xldCBkLGM9aWsoZSxpKTtmb3IoO2Q9YygpOylYbSh0LG4scixkLG8pO1htKHQsbixyLHMsbyl9ZWxzZSAxNiZsP2F6KG4sdCxpLGUscixvKTpYbSh0LG4scixzLG8pO2U9YT9lLnByb2plY3Rpb25OZXh0OmUubmV4dH19ZnVuY3Rpb24gdWIobix0LGUsaSxyLG8pe2RrKGUsaSxuLmZpcnN0Q2hpbGQsdCxyLG8sITEpfWZ1bmN0aW9uIGF6KG4sdCxlLGkscixvKXtsZXQgYT1lW3hsXSxsPWFbQWFdLnByb2plY3Rpb25baS5wcm9qZWN0aW9uXTtpZihBcnJheS5pc0FycmF5KGwpKWZvcihsZXQgYz0wO2M8bC5sZW5ndGg7YysrKVhtKHQsbixyLGxbY10sbyk7ZWxzZSBkayhuLHQsbCxhW2pyXSxyLG8sITApfWZ1bmN0aW9uIHN6KG4sdCxlKXsiIj09PWU/bi5yZW1vdmVBdHRyaWJ1dGUodCwiY2xhc3MiKTpuLnNldEF0dHJpYnV0ZSh0LCJjbGFzcyIsZSl9ZnVuY3Rpb24gbHoobix0LGUpe2xldHttZXJnZWRBdHRyczppLGNsYXNzZXM6cixzdHlsZXM6b309ZTtudWxsIT09aSYmVlIobix0LGkpLG51bGwhPT1yJiZzeihuLHQsciksbnVsbCE9PW8mJmZ1bmN0aW9uKG4sdCxlKXtuLnNldEF0dHJpYnV0ZSh0LCJzdHlsZSIsZSl9KG4sdCxvKX1mdW5jdGlvbiBjeigpe2lmKHZvaWQgMD09PUhDJiYoSEM9bnVsbCx6ci50cnVzdGVkVHlwZXMpKXRyeXtIQz16ci50cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KCJhbmd1bGFyIix7Y3JlYXRlSFRNTDpuPT5uLGNyZWF0ZVNjcmlwdDpuPT5uLGNyZWF0ZVNjcmlwdFVSTDpuPT5ufSl9Y2F0Y2h7fXJldHVybiBIQ31mdW5jdGlvbiBkZihuKXtyZXR1cm4gY3ooKT8uY3JlYXRlSFRNTChuKXx8bn1mdW5jdGlvbiB1eigpe3JldHVybiB2b2lkIDAhPT1ZUj9ZUjp0eXBlb2YgZG9jdW1lbnQ8InUiP2RvY3VtZW50OnZvaWQgMH1mdW5jdGlvbiB1aygpe2lmKHZvaWQgMD09PXpDJiYoekM9bnVsbCx6ci50cnVzdGVkVHlwZXMpKXRyeXt6Qz16ci50cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KCJhbmd1bGFyI3Vuc2FmZS1ieXBhc3MiLHtjcmVhdGVIVE1MOm49Pm4sY3JlYXRlU2NyaXB0Om49Pm4sY3JlYXRlU2NyaXB0VVJMOm49Pm59KX1jYXRjaHt9cmV0dXJuIHpDfWZ1bmN0aW9uIHlIKG4pe3JldHVybiB1aygpPy5jcmVhdGVIVE1MKG4pfHxufWZ1bmN0aW9uIHhIKG4pe3JldHVybiB1aygpPy5jcmVhdGVTY3JpcHQobil8fG59ZnVuY3Rpb24gQ0gobil7cmV0dXJuIHVrKCk/LmNyZWF0ZVNjcmlwdFVSTChuKXx8bn12YXIgSmM9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5PXR9dG9TdHJpbmcoKXtyZXR1cm5gU2FmZVZhbHVlIG11c3QgdXNlIFtwcm9wZXJ0eV09YmluZGluZzogJHt0aGlzLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHl9IChzZWUgJHtvYn0pYH19LFFSPWNsYXNzIGV4dGVuZHMgSmN7Z2V0VHlwZU5hbWUoKXtyZXR1cm4iSFRNTCJ9fSxaUj1jbGFzcyBleHRlbmRzIEpje2dldFR5cGVOYW1lKCl7cmV0dXJuIlN0eWxlIn19LEtSPWNsYXNzIGV4dGVuZHMgSmN7Z2V0VHlwZU5hbWUoKXtyZXR1cm4iU2NyaXB0In19LEpSPWNsYXNzIGV4dGVuZHMgSmN7Z2V0VHlwZU5hbWUoKXtyZXR1cm4iVVJMIn19LCRSPWNsYXNzIGV4dGVuZHMgSmN7Z2V0VHlwZU5hbWUoKXtyZXR1cm4iUmVzb3VyY2VVUkwifX07ZnVuY3Rpb24gT2Eobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBKYz9uLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk6bn1mdW5jdGlvbiB3bChuLHQpe2xldCBlPWZ1bmN0aW9uKG4pe3JldHVybiBuIGluc3RhbmNlb2YgSmMmJm4uZ2V0VHlwZU5hbWUoKXx8bnVsbH0obik7aWYobnVsbCE9ZSYmZSE9PXQpe2lmKCJSZXNvdXJjZVVSTCI9PT1lJiYiVVJMIj09PXQpcmV0dXJuITA7dGhyb3cgbmV3IEVycm9yKGBSZXF1aXJlZCBhIHNhZmUgJHt0fSwgZ290IGEgJHtlfSAoc2VlICR7b2J9KWApfXJldHVybiBlPT09dH1mdW5jdGlvbiBfeihuKXtsZXQgdD1uZXcgdFAobik7cmV0dXJuIGZ1bmN0aW9uKCl7dHJ5e3JldHVybiEhKG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoZGYoIiIpLCJ0ZXh0L2h0bWwiKX1jYXRjaHtyZXR1cm4hMX19KCk/bmV3IGVQKHQpOnR9dmFyIGVQPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuaW5lcnREb2N1bWVudEhlbHBlcj10fWdldEluZXJ0Qm9keUVsZW1lbnQodCl7dD0iPGJvZHk+PHJlbW92ZT48L3JlbW92ZT4iK3Q7dHJ5e2xldCBlPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGRmKHQpLCJ0ZXh0L2h0bWwiKS5ib2R5O3JldHVybiBudWxsPT09ZT90aGlzLmluZXJ0RG9jdW1lbnRIZWxwZXIuZ2V0SW5lcnRCb2R5RWxlbWVudCh0KTooZS5yZW1vdmVDaGlsZChlLmZpcnN0Q2hpbGQpLGUpfWNhdGNoe3JldHVybiBudWxsfX19LHRQPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZGVmYXVsdERvYz10LHRoaXMuaW5lcnREb2N1bWVudD10aGlzLmRlZmF1bHREb2MuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCJzYW5pdGl6YXRpb24taW5lcnQiKX1nZXRJbmVydEJvZHlFbGVtZW50KHQpe2xldCBlPXRoaXMuaW5lcnREb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO3JldHVybiBlLmlubmVySFRNTD1kZih0KSxlfX0sU2FlPS9eKD8hamF2YXNjcmlwdDopKD86W2EtejAtOSsuLV0rOnxbXiY6XC8/I10qKD86W1wvPyNdfCQpKS9pO2Z1bmN0aW9uIHBiKG4pe3JldHVybihuPVN0cmluZyhuKSkubWF0Y2goU2FlKT9uOiJ1bnNhZmU6IitufWZ1bmN0aW9uIHJkKG4pe2xldCB0PXt9O2ZvcihsZXQgZSBvZiBuLnNwbGl0KCIsIikpdFtlXT0hMDtyZXR1cm4gdH1mdW5jdGlvbiBoYiguLi5uKXtsZXQgdD17fTtmb3IobGV0IGUgb2Ygbilmb3IobGV0IGkgaW4gZSllLmhhc093blByb3BlcnR5KGkpJiYodFtpXT0hMCk7cmV0dXJuIHR9dmFyIFVDLGJ6PXJkKCJhcmVhLGJyLGNvbCxocixpbWcsd2JyIiksdno9cmQoImNvbGdyb3VwLGRkLGR0LGxpLHAsdGJvZHksdGQsdGZvb3QsdGgsdGhlYWQsdHIiKSx5ej1yZCgicnAscnQiKSxFYWU9aGIoeXosdnopLFRhZT1oYih2eixyZCgiYWRkcmVzcyxhcnRpY2xlLGFzaWRlLGJsb2NrcXVvdGUsY2FwdGlvbixjZW50ZXIsZGVsLGRldGFpbHMsZGlhbG9nLGRpcixkaXYsZGwsZmlndXJlLGZpZ2NhcHRpb24sZm9vdGVyLGgxLGgyLGgzLGg0LGg1LGg2LGhlYWRlcixoZ3JvdXAsaHIsaW5zLG1haW4sbWFwLG1lbnUsbmF2LG9sLHByZSxzZWN0aW9uLHN1bW1hcnksdGFibGUsdWwiKSksRGFlPWhiKHl6LHJkKCJhLGFiYnIsYWNyb255bSxhdWRpbyxiLGJkaSxiZG8sYmlnLGJyLGNpdGUsY29kZSxkZWwsZGZuLGVtLGZvbnQsaSxpbWcsaW5zLGtiZCxsYWJlbCxtYXAsbWFyayxwaWN0dXJlLHEscnVieSxycCxydCxzLHNhbXAsc21hbGwsc291cmNlLHNwYW4sc3RyaWtlLHN0cm9uZyxzdWIsc3VwLHRpbWUsdHJhY2ssdHQsdSx2YXIsdmlkZW8iKSksblA9aGIoYnosVGFlLERhZSxFYWUpLHBrPXJkKCJiYWNrZ3JvdW5kLGNpdGUsaHJlZixpdGVtdHlwZSxsb25nZGVzYyxwb3N0ZXIsc3JjLHhsaW5rOmhyZWYiKSxJYWU9cmQoImFiYnIsYWNjZXNza2V5LGFsaWduLGFsdCxhdXRvcGxheSxheGlzLGJnY29sb3IsYm9yZGVyLGNlbGxwYWRkaW5nLGNlbGxzcGFjaW5nLGNsYXNzLGNsZWFyLGNvbG9yLGNvbHMsY29sc3Bhbixjb21wYWN0LGNvbnRyb2xzLGNvb3JkcyxkYXRldGltZSxkZWZhdWx0LGRpcixkb3dubG9hZCxmYWNlLGhlYWRlcnMsaGVpZ2h0LGhpZGRlbixocmVmbGFuZyxoc3BhY2UsaXNtYXAsaXRlbXNjb3BlLGl0ZW1wcm9wLGtpbmQsbGFiZWwsbGFuZyxsYW5ndWFnZSxsb29wLG1lZGlhLG11dGVkLG5vaHJlZixub3dyYXAsb3BlbixwcmVsb2FkLHJlbCxyZXYscm9sZSxyb3dzLHJvd3NwYW4scnVsZXMsc2NvcGUsc2Nyb2xsaW5nLHNoYXBlLHNpemUsc2l6ZXMsc3BhbixzcmNsYW5nLHNyY3NldCxzdGFydCxzdW1tYXJ5LHRhYmluZGV4LHRhcmdldCx0aXRsZSx0cmFuc2xhdGUsdHlwZSx1c2VtYXAsdmFsaWduLHZhbHVlLHZzcGFjZSx3aWR0aCIpLEFhZT1yZCgiYXJpYS1hY3RpdmVkZXNjZW5kYW50LGFyaWEtYXRvbWljLGFyaWEtYXV0b2NvbXBsZXRlLGFyaWEtYnVzeSxhcmlhLWNoZWNrZWQsYXJpYS1jb2xjb3VudCxhcmlhLWNvbGluZGV4LGFyaWEtY29sc3BhbixhcmlhLWNvbnRyb2xzLGFyaWEtY3VycmVudCxhcmlhLWRlc2NyaWJlZGJ5LGFyaWEtZGV0YWlscyxhcmlhLWRpc2FibGVkLGFyaWEtZHJvcGVmZmVjdCxhcmlhLWVycm9ybWVzc2FnZSxhcmlhLWV4cGFuZGVkLGFyaWEtZmxvd3RvLGFyaWEtZ3JhYmJlZCxhcmlhLWhhc3BvcHVwLGFyaWEtaGlkZGVuLGFyaWEtaW52YWxpZCxhcmlhLWtleXNob3J0Y3V0cyxhcmlhLWxhYmVsLGFyaWEtbGFiZWxsZWRieSxhcmlhLWxldmVsLGFyaWEtbGl2ZSxhcmlhLW1vZGFsLGFyaWEtbXVsdGlsaW5lLGFyaWEtbXVsdGlzZWxlY3RhYmxlLGFyaWEtb3JpZW50YXRpb24sYXJpYS1vd25zLGFyaWEtcGxhY2Vob2xkZXIsYXJpYS1wb3NpbnNldCxhcmlhLXByZXNzZWQsYXJpYS1yZWFkb25seSxhcmlhLXJlbGV2YW50LGFyaWEtcmVxdWlyZWQsYXJpYS1yb2xlZGVzY3JpcHRpb24sYXJpYS1yb3djb3VudCxhcmlhLXJvd2luZGV4LGFyaWEtcm93c3BhbixhcmlhLXNlbGVjdGVkLGFyaWEtc2V0c2l6ZSxhcmlhLXNvcnQsYXJpYS12YWx1ZW1heCxhcmlhLXZhbHVlbWluLGFyaWEtdmFsdWVub3csYXJpYS12YWx1ZXRleHQiKSx4ej1oYihwayxJYWUsQWFlKSxSYWU9cmQoInNjcmlwdCxzdHlsZSx0ZW1wbGF0ZSIpLGlQPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITEsdGhpcy5idWY9W119c2FuaXRpemVDaGlsZHJlbih0KXtsZXQgZT10LmZpcnN0Q2hpbGQsaT0hMDtmb3IoO2U7KWlmKGUubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERT9pPXRoaXMuc3RhcnRFbGVtZW50KGUpOmUubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERT90aGlzLmNoYXJzKGUubm9kZVZhbHVlKTp0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMCxpJiZlLmZpcnN0Q2hpbGQpZT1lLmZpcnN0Q2hpbGQ7ZWxzZSBmb3IoO2U7KXtlLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJnRoaXMuZW5kRWxlbWVudChlKTtsZXQgcj10aGlzLmNoZWNrQ2xvYmJlcmVkRWxlbWVudChlLGUubmV4dFNpYmxpbmcpO2lmKHIpe2U9cjticmVha31lPXRoaXMuY2hlY2tDbG9iYmVyZWRFbGVtZW50KGUsZS5wYXJlbnROb2RlKX1yZXR1cm4gdGhpcy5idWYuam9pbigiIil9c3RhcnRFbGVtZW50KHQpe2xldCBlPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZighblAuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIHRoaXMuc2FuaXRpemVkU29tZXRoaW5nPSEwLCFSYWUuaGFzT3duUHJvcGVydHkoZSk7dGhpcy5idWYucHVzaCgiPCIpLHRoaXMuYnVmLnB1c2goZSk7bGV0IGk9dC5hdHRyaWJ1dGVzO2ZvcihsZXQgcj0wO3I8aS5sZW5ndGg7cisrKXtsZXQgbz1pLml0ZW0ociksYT1vLm5hbWUscz1hLnRvTG93ZXJDYXNlKCk7aWYoIXh6Lmhhc093blByb3BlcnR5KHMpKXt0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMDtjb250aW51ZX1sZXQgbD1vLnZhbHVlO3BrW3NdJiYobD1wYihsKSksdGhpcy5idWYucHVzaCgiICIsYSwnPSInLE1IKGwpLCciJyl9cmV0dXJuIHRoaXMuYnVmLnB1c2goIj4iKSwhMH1lbmRFbGVtZW50KHQpe2xldCBlPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtuUC5oYXNPd25Qcm9wZXJ0eShlKSYmIWJ6Lmhhc093blByb3BlcnR5KGUpJiYodGhpcy5idWYucHVzaCgiPC8iKSx0aGlzLmJ1Zi5wdXNoKGUpLHRoaXMuYnVmLnB1c2goIj4iKSl9Y2hhcnModCl7dGhpcy5idWYucHVzaChNSCh0KSl9Y2hlY2tDbG9iYmVyZWRFbGVtZW50KHQsZSl7aWYoZSYmKHQuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZSkmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpPT09Tm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gc2FuaXRpemUgaHRtbCBiZWNhdXNlIHRoZSBlbGVtZW50IGlzIGNsb2JiZXJlZDogJHt0Lm91dGVySFRNTH1gKTtyZXR1cm4gZX19LFBhZT0vW1x1RDgwMC1cdURCRkZdW1x1REMwMC1cdURGRkZdL2csa2FlPS8oW15cIy1+IHwhXSkvZztmdW5jdGlvbiBNSChuKXtyZXR1cm4gbi5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZShQYWUsZnVuY3Rpb24odCl7cmV0dXJuIiYjIisoMTAyNCoodC5jaGFyQ29kZUF0KDApLTU1Mjk2KSsodC5jaGFyQ29kZUF0KDEpLTU2MzIwKSs2NTUzNikrIjsifSkucmVwbGFjZShrYWUsZnVuY3Rpb24odCl7cmV0dXJuIiYjIit0LmNoYXJDb2RlQXQoMCkrIjsifSkucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7Iil9ZnVuY3Rpb24gaGsobix0KXtsZXQgZT1udWxsO3RyeXtVQz1VQ3x8X3oobik7bGV0IGk9dD9TdHJpbmcodCk6IiI7ZT1VQy5nZXRJbmVydEJvZHlFbGVtZW50KGkpO2xldCByPTUsbz1pO2Rve2lmKDA9PT1yKXRocm93IG5ldyBFcnJvcigiRmFpbGVkIHRvIHNhbml0aXplIGh0bWwgYmVjYXVzZSB0aGUgaW5wdXQgaXMgdW5zdGFibGUiKTtyLS0saT1vLG89ZS5pbm5lckhUTUwsZT1VQy5nZXRJbmVydEJvZHlFbGVtZW50KGkpfXdoaWxlKGkhPT1vKTtyZXR1cm4gZGYoKG5ldyBpUCkuc2FuaXRpemVDaGlsZHJlbihyUChlKXx8ZSkpfWZpbmFsbHl7aWYoZSl7bGV0IGk9clAoZSl8fGU7Zm9yKDtpLmZpcnN0Q2hpbGQ7KWkucmVtb3ZlQ2hpbGQoaS5maXJzdENoaWxkKX19fWZ1bmN0aW9uIHJQKG4pe3JldHVybiJjb250ZW50ImluIG4mJmZ1bmN0aW9uKG4pe3JldHVybiBuLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJiJURU1QTEFURSI9PT1uLm5vZGVOYW1lfShuKT9uLmNvbnRlbnQ6bnVsbH12YXIgVXI9KCgpPT57cmV0dXJuKG49VXJ8fChVcj17fSkpW24uTk9ORT0wXT0iTk9ORSIsbltuLkhUTUw9MV09IkhUTUwiLG5bbi5TVFlMRT0yXT0iU1RZTEUiLG5bbi5TQ1JJUFQ9M109IlNDUklQVCIsbltuLlVSTD00XT0iVVJMIixuW24uUkVTT1VSQ0VfVVJMPTVdPSJSRVNPVVJDRV9VUkwiLFVyO3ZhciBufSkoKTtmdW5jdGlvbiBtayhuKXtsZXQgdD1tYigpO3JldHVybiB0P3lIKHQuc2FuaXRpemUoVXIuSFRNTCxuKXx8IiIpOndsKG4sIkhUTUwiKT95SChPYShuKSk6aGsodXooKSxqbihuKSl9ZnVuY3Rpb24gVnMobil7bGV0IHQ9bWIoKTtyZXR1cm4gdD90LnNhbml0aXplKFVyLlVSTCxuKXx8IiI6d2wobiwiVVJMIik/T2Eobik6cGIoam4obikpfWZ1bmN0aW9uIEN6KG4pe2xldCB0PW1iKCk7aWYodClyZXR1cm4gQ0godC5zYW5pdGl6ZShVci5SRVNPVVJDRV9VUkwsbil8fCIiKTtpZih3bChuLCJSZXNvdXJjZVVSTCIpKXJldHVybiBDSChPYShuKSk7dGhyb3cgbmV3IHh0KDkwNCwhMSl9ZnVuY3Rpb24gbWIoKXtsZXQgbj1aZSgpO3JldHVybiBuJiZuW05SXX12YXIgRk09bmV3IHRlKCJFTlZJUk9OTUVOVF9JTklUSUFMSVpFUiIpLE16PW5ldyB0ZSgiSU5KRUNUT1IiLC0xKSx3ej1uZXcgdGUoIklOSkVDVE9SX0RFRl9UWVBFUyIpLHVNPWNsYXNze2dldCh0LGU9WF8pe2lmKGU9PT1YXyl7bGV0IGk9bmV3IEVycm9yKGBOdWxsSW5qZWN0b3JFcnJvcjogTm8gcHJvdmlkZXIgZm9yICR7cG8odCl9IWApO3Rocm93IGkubmFtZT0iTnVsbEluamVjdG9yRXJyb3IiLGl9cmV0dXJuIGV9fTtmdW5jdGlvbiB6YWUoLi4ubil7cmV0dXJueyJcdTAyNzVwcm92aWRlcnMiOlN6KDAsbiksIlx1MDI3NWZyb21OZ01vZHVsZSI6ITB9fWZ1bmN0aW9uIFN6KG4sLi4udCl7bGV0IHIsZT1bXSxpPW5ldyBTZXQ7cmV0dXJuIHRrKHQsbz0+e2xldCBhPW87b1AoYSxlLFtdLGkpJiYocnx8KHI9W10pLHIucHVzaChhKSl9KSx2b2lkIDAhPT1yJiZFeihyLGUpLGV9ZnVuY3Rpb24gRXoobix0KXtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKyl7bGV0e3Byb3ZpZGVyczpyfT1uW2VdO2ZrKHIsbz0+e3QucHVzaChvKX0pfX1mdW5jdGlvbiBvUChuLHQsZSxpKXtpZighKG49QWkobikpKXJldHVybiExO2xldCByPW51bGwsbz1sSChuKSxhPSFvJiZPcyhuKTtpZihvfHxhKXtpZihhJiYhYS5zdGFuZGFsb25lKXJldHVybiExO3I9bn1lbHNle2xldCBsPW4ubmdNb2R1bGU7aWYobz1sSChsKSwhbylyZXR1cm4hMTtyPWx9bGV0IHM9aS5oYXMocik7aWYoYSl7aWYocylyZXR1cm4hMTtpZihpLmFkZChyKSxhLmRlcGVuZGVuY2llcyl7bGV0IGw9ImZ1bmN0aW9uIj09dHlwZW9mIGEuZGVwZW5kZW5jaWVzP2EuZGVwZW5kZW5jaWVzKCk6YS5kZXBlbmRlbmNpZXM7Zm9yKGxldCBjIG9mIGwpb1AoYyx0LGUsaSl9fWVsc2V7aWYoIW8pcmV0dXJuITE7e2lmKG51bGwhPW8uaW1wb3J0cyYmIXMpe2xldCBjO2kuYWRkKHIpO3RyeXt0ayhvLmltcG9ydHMsZD0+e29QKGQsdCxlLGkpJiYoY3x8KGM9W10pLGMucHVzaChkKSl9KX1maW5hbGx5e312b2lkIDAhPT1jJiZFeihjLHQpfWlmKCFzKXtsZXQgYz1HcChyKXx8KCgpPT5uZXcgcik7dC5wdXNoKHtwcm92aWRlOnIsdXNlRmFjdG9yeTpjLGRlcHM6aml9LHtwcm92aWRlOnd6LHVzZVZhbHVlOnIsbXVsdGk6ITB9LHtwcm92aWRlOkZNLHVzZVZhbHVlOigpPT5PKHIpLG11bHRpOiEwfSl9bGV0IGw9by5wcm92aWRlcnM7bnVsbD09bHx8c3x8ZmsobCxkPT57dC5wdXNoKGQpfSl9fXJldHVybiByIT09biYmdm9pZCAwIT09bi5wcm92aWRlcnN9ZnVuY3Rpb24gZmsobix0KXtmb3IobGV0IGUgb2YgbiluNShlKSYmKGU9ZS5cdTAyNzVwcm92aWRlcnMpLEFycmF5LmlzQXJyYXkoZSk/ZmsoZSx0KTp0KGUpfXZhciBVYWU9JGkoe3Byb3ZpZGU6U3RyaW5nLHVzZVZhbHVlOiRpfSk7ZnVuY3Rpb24gVHoobil7cmV0dXJuIG51bGwhPT1uJiYib2JqZWN0Ij09dHlwZW9mIG4mJlVhZSBpbiBufWZ1bmN0aW9uICRtKG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBufXZhciBnUixMTT1uZXcgdGUoIlNldCBJbmplY3RvciBzY29wZS4iKSxZQz17fSxxYWU9e307ZnVuY3Rpb24gZ2soKXtyZXR1cm4gdm9pZCAwPT09Z1ImJihnUj1uZXcgdU0pLGdSfXZhciBsYz1jbGFzc3t9LHBNPWNsYXNzIGV4dGVuZHMgbGN7Z2V0IGRlc3Ryb3llZCgpe3JldHVybiB0aGlzLl9kZXN0cm95ZWR9Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIoKSx0aGlzLnBhcmVudD1lLHRoaXMuc291cmNlPWksdGhpcy5zY29wZXM9cix0aGlzLnJlY29yZHM9bmV3IE1hcCx0aGlzLl9uZ09uRGVzdHJveUhvb2tzPW5ldyBTZXQsdGhpcy5fb25EZXN0cm95SG9va3M9W10sdGhpcy5fZGVzdHJveWVkPSExLHNQKHQsYT0+dGhpcy5wcm9jZXNzUHJvdmlkZXIoYSkpLHRoaXMucmVjb3Jkcy5zZXQoTXosWW0odm9pZCAwLHRoaXMpKSxyLmhhcygiZW52aXJvbm1lbnQiKSYmdGhpcy5yZWNvcmRzLnNldChsYyxZbSh2b2lkIDAsdGhpcykpO2xldCBvPXRoaXMucmVjb3Jkcy5nZXQoTE0pO251bGwhPW8mJiJzdHJpbmciPT10eXBlb2Ygby52YWx1ZSYmdGhpcy5zY29wZXMuYWRkKG8udmFsdWUpLHRoaXMuaW5qZWN0b3JEZWZUeXBlcz1uZXcgU2V0KHRoaXMuZ2V0KHd6Lm11bHRpLGppLENpLlNlbGYpKX1kZXN0cm95KCl7dGhpcy5hc3NlcnROb3REZXN0cm95ZWQoKSx0aGlzLl9kZXN0cm95ZWQ9ITA7dHJ5e2ZvcihsZXQgdCBvZiB0aGlzLl9uZ09uRGVzdHJveUhvb2tzKXQubmdPbkRlc3Ryb3koKTtmb3IobGV0IHQgb2YgdGhpcy5fb25EZXN0cm95SG9va3MpdCgpfWZpbmFsbHl7dGhpcy5yZWNvcmRzLmNsZWFyKCksdGhpcy5fbmdPbkRlc3Ryb3lIb29rcy5jbGVhcigpLHRoaXMuaW5qZWN0b3JEZWZUeXBlcy5jbGVhcigpLHRoaXMuX29uRGVzdHJveUhvb2tzLmxlbmd0aD0wfX1vbkRlc3Ryb3kodCl7dGhpcy5fb25EZXN0cm95SG9va3MucHVzaCh0KX1ydW5JbkNvbnRleHQodCl7dGhpcy5hc3NlcnROb3REZXN0cm95ZWQoKTtsZXQgZT1VbSh0aGlzKSxpPVBzKHZvaWQgMCk7dHJ5e3JldHVybiB0KCl9ZmluYWxseXtVbShlKSxQcyhpKX19Z2V0KHQsZT1YXyxpPUNpLkRlZmF1bHQpe3RoaXMuYXNzZXJ0Tm90RGVzdHJveWVkKCksaT1TTShpKTtsZXQgcj1VbSh0aGlzKSxvPVBzKHZvaWQgMCk7dHJ5e2lmKCEoaSZDaS5Ta2lwU2VsZikpe2xldCBzPXRoaXMucmVjb3Jkcy5nZXQodCk7aWYodm9pZCAwPT09cyl7bGV0IGw9KCJmdW5jdGlvbiI9PXR5cGVvZihuPXQpfHwib2JqZWN0Ij09dHlwZW9mIG4mJm4gaW5zdGFuY2VvZiB0ZSkmJkhQKHQpO3M9bCYmdGhpcy5pbmplY3RhYmxlRGVmSW5TY29wZShsKT9ZbShhUCh0KSxZQyk6bnVsbCx0aGlzLnJlY29yZHMuc2V0KHQscyl9aWYobnVsbCE9cylyZXR1cm4gdGhpcy5oeWRyYXRlKHQscyl9cmV0dXJuKGkmQ2kuU2VsZj9naygpOnRoaXMucGFyZW50KS5nZXQodCxlPWkmQ2kuT3B0aW9uYWwmJmU9PT1YXz9udWxsOmUpfWNhdGNoKGEpe2lmKCJOdWxsSW5qZWN0b3JFcnJvciI9PT1hLm5hbWUpe2lmKChhW2VNXT1hW2VNXXx8W10pLnVuc2hpZnQocG8odCkpLHIpdGhyb3cgYTtyZXR1cm4gZnVuY3Rpb24obix0LGUsaSl7bGV0IHI9bltlTV07dGhyb3cgdFtjSF0mJnIudW5zaGlmdCh0W2NIXSksbi5tZXNzYWdlPWZ1bmN0aW9uKG4sdCxlLGk9bnVsbCl7bj1uJiYiXG4iPT09bi5jaGFyQXQoMCkmJm4uY2hhckF0KDEpPT1WcmU/bi5zbGljZSgyKTpuO2xldCByPXBvKHQpO2lmKEFycmF5LmlzQXJyYXkodCkpcj10Lm1hcChwbykuam9pbigiIC0+ICIpO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiB0KXtsZXQgbz1bXTtmb3IobGV0IGEgaW4gdClpZih0Lmhhc093blByb3BlcnR5KGEpKXtsZXQgcz10W2FdO28ucHVzaChhKyI6IisoInN0cmluZyI9PXR5cGVvZiBzP0pTT04uc3RyaW5naWZ5KHMpOnBvKHMpKSl9cj1geyR7by5qb2luKCIsICIpfX1gfXJldHVybmAke2V9JHtpPyIoIitpKyIpIjoiIn1bJHtyfV06ICR7bi5yZXBsYWNlKEJyZSwiXG4gICIpfWB9KCJcbiIrbi5tZXNzYWdlLHIsZSxpKSxuW0xyZV09cixuW2VNXT1udWxsLG59KGEsdCwiUjNJbmplY3RvckVycm9yIix0aGlzLnNvdXJjZSl9dGhyb3cgYX1maW5hbGx5e1BzKG8pLFVtKHIpfXZhciBufXJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygpe2xldCB0PVVtKHRoaXMpLGU9UHModm9pZCAwKTt0cnl7bGV0IGk9dGhpcy5nZXQoRk0ubXVsdGksamksQ2kuU2VsZik7Zm9yKGxldCByIG9mIGkpcigpfWZpbmFsbHl7VW0odCksUHMoZSl9fXRvU3RyaW5nKCl7bGV0IHQ9W10sZT10aGlzLnJlY29yZHM7Zm9yKGxldCBpIG9mIGUua2V5cygpKXQucHVzaChwbyhpKSk7cmV0dXJuYFIzSW5qZWN0b3JbJHt0LmpvaW4oIiwgIil9XWB9YXNzZXJ0Tm90RGVzdHJveWVkKCl7aWYodGhpcy5fZGVzdHJveWVkKXRocm93IG5ldyB4dCgyMDUsITEpfXByb2Nlc3NQcm92aWRlcih0KXtsZXQgZT0kbSh0PUFpKHQpKT90OkFpKHQmJnQucHJvdmlkZSksaT1mdW5jdGlvbihuKXtyZXR1cm4gVHoobik/WW0odm9pZCAwLG4udXNlVmFsdWUpOlltKER6KG4pLFlDKX0odCk7aWYoJG0odCl8fCEwIT09dC5tdWx0aSl0aGlzLnJlY29yZHMuZ2V0KGUpO2Vsc2V7bGV0IHI9dGhpcy5yZWNvcmRzLmdldChlKTtyfHwocj1ZbSh2b2lkIDAsWUMsITApLHIuZmFjdG9yeT0oKT0+RlIoci5tdWx0aSksdGhpcy5yZWNvcmRzLnNldChlLHIpKSxlPXQsci5tdWx0aS5wdXNoKHQpfXRoaXMucmVjb3Jkcy5zZXQoZSxpKX1oeWRyYXRlKHQsZSl7cmV0dXJuIGUudmFsdWU9PT1ZQyYmKGUudmFsdWU9cWFlLGUudmFsdWU9ZS5mYWN0b3J5KCkpLCJvYmplY3QiPT10eXBlb2YgZS52YWx1ZSYmZS52YWx1ZSYmbnVsbCE9PShuPWUudmFsdWUpJiYib2JqZWN0Ij09dHlwZW9mIG4mJiJmdW5jdGlvbiI9PXR5cGVvZiBuLm5nT25EZXN0cm95JiZ0aGlzLl9uZ09uRGVzdHJveUhvb2tzLmFkZChlLnZhbHVlKSxlLnZhbHVlO3ZhciBufWluamVjdGFibGVEZWZJblNjb3BlKHQpe2lmKCF0LnByb3ZpZGVkSW4pcmV0dXJuITE7bGV0IGU9QWkodC5wcm92aWRlZEluKTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/ImFueSI9PT1lfHx0aGlzLnNjb3Blcy5oYXMoZSk6dGhpcy5pbmplY3RvckRlZlR5cGVzLmhhcyhlKX19O2Z1bmN0aW9uIGFQKG4pe2xldCB0PUhQKG4pLGU9bnVsbCE9PXQ/dC5mYWN0b3J5OkdwKG4pO2lmKG51bGwhPT1lKXJldHVybiBlO2lmKG4gaW5zdGFuY2VvZiB0ZSl0aHJvdyBuZXcgeHQoMjA0LCExKTtpZihuIGluc3RhbmNlb2YgRnVuY3Rpb24pcmV0dXJuIGZ1bmN0aW9uKG4pe2xldCB0PW4ubGVuZ3RoO2lmKHQ+MCl0aHJvdyBIXyh0LCI/IiksbmV3IHh0KDIwNCwhMSk7bGV0IGU9ZnVuY3Rpb24obil7cmV0dXJuIG4mJihuWyRDXXx8bltyNV0pfHxudWxsfShuKTtyZXR1cm4gbnVsbCE9PWU/KCk9PmUuZmFjdG9yeShuKTooKT0+bmV3IG59KG4pO3Rocm93IG5ldyB4dCgyMDQsITEpfWZ1bmN0aW9uIER6KG4sdCxlKXtsZXQgaTtpZigkbShuKSl7bGV0IHI9QWkobik7cmV0dXJuIEdwKHIpfHxhUChyKX1pZihUeihuKSlpPSgpPT5BaShuLnVzZVZhbHVlKTtlbHNlIGlmKGZ1bmN0aW9uKG4pe3JldHVybiEoIW58fCFuLnVzZUZhY3RvcnkpfShuKSlpPSgpPT5uLnVzZUZhY3RvcnkoLi4uRlIobi5kZXBzfHxbXSkpO2Vsc2UgaWYoZnVuY3Rpb24obil7cmV0dXJuISghbnx8IW4udXNlRXhpc3RpbmcpfShuKSlpPSgpPT5PKEFpKG4udXNlRXhpc3RpbmcpKTtlbHNle2xldCByPUFpKG4mJihuLnVzZUNsYXNzfHxuLnByb3ZpZGUpKTtpZighZnVuY3Rpb24obil7cmV0dXJuISFuLmRlcHN9KG4pKXJldHVybiBHcChyKXx8YVAocik7aT0oKT0+bmV3IHIoLi4uRlIobi5kZXBzKSl9cmV0dXJuIGl9ZnVuY3Rpb24gWW0obix0LGU9ITEpe3JldHVybntmYWN0b3J5Om4sdmFsdWU6dCxtdWx0aTplP1tdOnZvaWQgMH19ZnVuY3Rpb24gc1Aobix0KXtmb3IobGV0IGUgb2YgbilBcnJheS5pc0FycmF5KGUpP3NQKGUsdCk6ZSYmbjUoZSk/c1AoZS5cdTAyNzVwcm92aWRlcnMsdCk6dChlKX12YXIgbFA9Y2xhc3N7fSxoTT1jbGFzc3t9LGNQPWNsYXNze3Jlc29sdmVDb21wb25lbnRGYWN0b3J5KHQpe3Rocm93IGZ1bmN0aW9uKG4pe2xldCB0PUVycm9yKGBObyBjb21wb25lbnQgZmFjdG9yeSBmb3VuZCBmb3IgJHtwbyhuKX0uIERpZCB5b3UgYWRkIGl0IHRvIEBOZ01vZHVsZS5lbnRyeUNvbXBvbmVudHM/YCk7cmV0dXJuIHQubmdDb21wb25lbnQ9bix0fSh0KX19LGhvPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLk5VTEw9bmV3IGNQLG59KSgpO2Z1bmN0aW9uIGVzZSgpe3JldHVybiB1ZihMbygpLFplKCkpfWZ1bmN0aW9uIHVmKG4sdCl7cmV0dXJuIG5ldyB4ZShzcyhuLHQpKX12YXIgeGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLm5hdGl2ZUVsZW1lbnQ9ZX19cmV0dXJuIG4uX19OR19FTEVNRU5UX0lEX189ZXNlLG59KSgpO2Z1bmN0aW9uIHRzZShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIHhlP24ubmF0aXZlRWxlbWVudDpufXZhciBjYz1jbGFzc3t9LGRjPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLl9fTkdfRUxFTUVOVF9JRF9fPSgpPT5mdW5jdGlvbigpe2xldCBuPVplKCksZT1lZChMbygpLmluZGV4LG4pO3JldHVybihVcChlKT9lOm4pW3VpXX0oKSxufSkoKSxpc2U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5udWxsfSksbn0pKCksTWw9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5mdWxsPXQsdGhpcy5tYWpvcj10LnNwbGl0KCIuIilbMF0sdGhpcy5taW5vcj10LnNwbGl0KCIuIilbMV0sdGhpcy5wYXRjaD10LnNwbGl0KCIuIikuc2xpY2UoMikuam9pbigiLiIpfX0scnNlPW5ldyBNbCgiMTUuMi45IiksX1I9e30sb3NlPSJuZ09yaWdpbmFsRXJyb3IiO2Z1bmN0aW9uIGJSKG4pe3JldHVybiBuW29zZV19dmFyIGxhPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fY29uc29sZT1jb25zb2xlfWhhbmRsZUVycm9yKHQpe2xldCBlPXRoaXMuX2ZpbmRPcmlnaW5hbEVycm9yKHQpO3RoaXMuX2NvbnNvbGUuZXJyb3IoIkVSUk9SIix0KSxlJiZ0aGlzLl9jb25zb2xlLmVycm9yKCJPUklHSU5BTCBFUlJPUiIsZSl9X2ZpbmRPcmlnaW5hbEVycm9yKHQpe2xldCBlPXQmJmJSKHQpO2Zvcig7ZSYmYlIoZSk7KWU9YlIoZSk7cmV0dXJuIGV8fG51bGx9fTtmdW5jdGlvbiBzdShuKXtyZXR1cm4gbi5vd25lckRvY3VtZW50fWZ1bmN0aW9uIFFDKG4pe3JldHVybiBuIGluc3RhbmNlb2YgRnVuY3Rpb24/bigpOm59ZnVuY3Rpb24gSXoobix0LGUpe2xldCBpPW4ubGVuZ3RoO2Zvcig7Oyl7bGV0IHI9bi5pbmRleE9mKHQsZSk7aWYoLTE9PT1yKXJldHVybiByO2lmKDA9PT1yfHxuLmNoYXJDb2RlQXQoci0xKTw9MzIpe2xldCBvPXQubGVuZ3RoO2lmKHIrbz09PWl8fG4uY2hhckNvZGVBdChyK28pPD0zMilyZXR1cm4gcn1lPXIrMX19dmFyIEF6PSJuZy10ZW1wbGF0ZSI7ZnVuY3Rpb24gbHNlKG4sdCxlKXtsZXQgaT0wLHI9ITA7Zm9yKDtpPG4ubGVuZ3RoOyl7bGV0IG89bltpKytdO2lmKCJzdHJpbmciPT10eXBlb2YgbyYmcil7bGV0IGE9bltpKytdO2lmKGUmJiJjbGFzcyI9PT1vJiYtMSE9PUl6KGEudG9Mb3dlckNhc2UoKSx0LDApKXJldHVybiEwfWVsc2V7aWYoMT09PW8pe2Zvcig7aTxuLmxlbmd0aCYmInN0cmluZyI9PXR5cGVvZihvPW5baSsrXSk7KWlmKG8udG9Mb3dlckNhc2UoKT09PXQpcmV0dXJuITA7cmV0dXJuITF9Im51bWJlciI9PXR5cGVvZiBvJiYocj0hMSl9fXJldHVybiExfWZ1bmN0aW9uIFJ6KG4pe3JldHVybiA0PT09bi50eXBlJiZuLnZhbHVlIT09QXp9ZnVuY3Rpb24gY3NlKG4sdCxlKXtyZXR1cm4gdD09PSg0IT09bi50eXBlfHxlP24udmFsdWU6QXopfWZ1bmN0aW9uIGRzZShuLHQsZSl7bGV0IGk9NCxyPW4uYXR0cnN8fFtdLG89ZnVuY3Rpb24obil7Zm9yKGxldCB0PTA7dDxuLmxlbmd0aDt0KyspaWYoUjUoblt0XSkpcmV0dXJuIHQ7cmV0dXJuIG4ubGVuZ3RofShyKSxhPSExO2ZvcihsZXQgcz0wO3M8dC5sZW5ndGg7cysrKXtsZXQgbD10W3NdO2lmKCJudW1iZXIiIT10eXBlb2YgbCl7aWYoIWEpaWYoNCZpKXtpZihpPTJ8MSZpLCIiIT09bCYmIWNzZShuLGwsZSl8fCIiPT09bCYmMT09PXQubGVuZ3RoKXtpZihibChpKSlyZXR1cm4hMTthPSEwfX1lbHNle2xldCBjPTgmaT9sOnRbKytzXTtpZig4JmkmJm51bGwhPT1uLmF0dHJzKXtpZighbHNlKG4uYXR0cnMsYyxlKSl7aWYoYmwoaSkpcmV0dXJuITE7YT0hMH1jb250aW51ZX1sZXQgdT11c2UoOCZpPyJjbGFzcyI6bCxyLFJ6KG4pLGUpO2lmKC0xPT09dSl7aWYoYmwoaSkpcmV0dXJuITE7YT0hMDtjb250aW51ZX1pZigiIiE9PWMpe2xldCBwO3A9dT5vPyIiOnJbdSsxXS50b0xvd2VyQ2FzZSgpO2xldCBoPTgmaT9wOm51bGw7aWYoaCYmLTEhPT1JeihoLGMsMCl8fDImaSYmYyE9PXApe2lmKGJsKGkpKXJldHVybiExO2E9ITB9fX19ZWxzZXtpZighYSYmIWJsKGkpJiYhYmwobCkpcmV0dXJuITE7aWYoYSYmYmwobCkpY29udGludWU7YT0hMSxpPWx8MSZpfX1yZXR1cm4gYmwoaSl8fGF9ZnVuY3Rpb24gYmwobil7cmV0dXJuIDA9PSgxJm4pfWZ1bmN0aW9uIHVzZShuLHQsZSxpKXtpZihudWxsPT09dClyZXR1cm4tMTtsZXQgcj0wO2lmKGl8fCFlKXtsZXQgbz0hMTtmb3IoO3I8dC5sZW5ndGg7KXtsZXQgYT10W3JdO2lmKGE9PT1uKXJldHVybiByO2lmKDM9PT1hfHw2PT09YSlvPSEwO2Vsc2V7aWYoMT09PWF8fDI9PT1hKXtsZXQgcz10Wysrcl07Zm9yKDsic3RyaW5nIj09dHlwZW9mIHM7KXM9dFsrK3JdO2NvbnRpbnVlfWlmKDQ9PT1hKWJyZWFrO2lmKDA9PT1hKXtyKz00O2NvbnRpbnVlfX1yKz1vPzE6Mn1yZXR1cm4tMX1yZXR1cm4gZnVuY3Rpb24obix0KXtsZXQgZT1uLmluZGV4T2YoNCk7aWYoZT4tMSlmb3IoZSsrO2U8bi5sZW5ndGg7KXtsZXQgaT1uW2VdO2lmKCJudW1iZXIiPT10eXBlb2YgaSlyZXR1cm4tMTtpZihpPT09dClyZXR1cm4gZTtlKyt9cmV0dXJuLTF9KHQsbil9ZnVuY3Rpb24gUHoobix0LGU9ITEpe2ZvcihsZXQgaT0wO2k8dC5sZW5ndGg7aSsrKWlmKGRzZShuLHRbaV0sZSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gZnNlKG4sdCl7ZTpmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl7bGV0IGk9dFtlXTtpZihuLmxlbmd0aD09PWkubGVuZ3RoKXtmb3IobGV0IHI9MDtyPG4ubGVuZ3RoO3IrKylpZihuW3JdIT09aVtyXSljb250aW51ZSBlO3JldHVybiEwfX1yZXR1cm4hMX1mdW5jdGlvbiB3SChuLHQpe3JldHVybiBuPyI6bm90KCIrdC50cmltKCkrIikiOnR9ZnVuY3Rpb24gZ3NlKG4pe2xldCB0PW5bMF0sZT0xLGk9MixyPSIiLG89ITE7Zm9yKDtlPG4ubGVuZ3RoOyl7bGV0IGE9bltlXTtpZigic3RyaW5nIj09dHlwZW9mIGEpaWYoMiZpKXtsZXQgcz1uWysrZV07cis9IlsiK2ErKHMubGVuZ3RoPjA/Jz0iJytzKyciJzoiIikrIl0ifWVsc2UgOCZpP3IrPSIuIithOjQmaSYmKHIrPSIgIithKTtlbHNlIiIhPT1yJiYhYmwoYSkmJih0Kz13SChvLHIpLHI9IiIpLGk9YSxvPW98fCFibChpKTtlKyt9cmV0dXJuIiIhPT1yJiYodCs9d0gobyxyKSksdH12YXIgem49e307ZnVuY3Rpb24gdihuKXtreihUaSgpLFplKCksZGEoKStuLCExKX1mdW5jdGlvbiBreihuLHQsZSxpKXtpZighaSlpZigzPT0oMyZ0W2RpXSkpe2xldCBvPW4ucHJlT3JkZXJDaGVja0hvb2tzO251bGwhPT1vJiZHQyh0LG8sZSl9ZWxzZXtsZXQgbz1uLnByZU9yZGVySG9va3M7bnVsbCE9PW8mJldDKHQsbywwLGUpfVdwKGUpfXZhciBTSD17Ilx1MDI3NVx1MDI3NWRlZmluZUluamVjdGFibGUiOnVlLCJcdTAyNzVcdTAyNzVkZWZpbmVJbmplY3RvciI6SCwiXHUwMjc1XHUwMjc1aW5qZWN0IjpPLCJcdTAyNzVcdTAyNzVpbnZhbGlkRmFjdG9yeURlcCI6YTUscmVzb2x2ZUZvcndhcmRSZWY6QWl9O3ZhciB5c2U9JGkoe3Byb3ZpZGU6U3RyaW5nLHVzZVZhbHVlOiRpfSk7ZnVuY3Rpb24gRUgobil7cmV0dXJuIHZvaWQgMCE9PW4udXNlQ2xhc3N9ZnVuY3Rpb24gVEgobil7cmV0dXJuIHZvaWQgMCE9PW4udXNlRmFjdG9yeX12YXIgT3o9Y2IoIkluamVjdGFibGUiLHZvaWQgMCx2b2lkIDAsdm9pZCAwLChuLHQpPT5mdW5jdGlvbihuLHQpe2xldCBlPW51bGwsaT1udWxsO24uaGFzT3duUHJvcGVydHkoJEMpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkobiwkQyx7Z2V0OigpPT4obnVsbD09PWUmJihlPUZzKCkuY29tcGlsZUluamVjdGFibGUoU0gsYG5nOi8vLyR7bi5uYW1lfS9cdTAyNzVwcm92LmpzYCxmdW5jdGlvbihuLHQpe2xldCBlPXR8fHtwcm92aWRlZEluOm51bGx9LGk9e25hbWU6bi5uYW1lLHR5cGU6bix0eXBlQXJndW1lbnRDb3VudDowLHByb3ZpZGVkSW46ZS5wcm92aWRlZElufTtyZXR1cm4oRUgoZSl8fFRIKGUpKSYmdm9pZCAwIT09ZS5kZXBzJiYoaS5kZXBzPWo1KGUuZGVwcykpLEVIKGUpP2kudXNlQ2xhc3M9ZS51c2VDbGFzczpmdW5jdGlvbihuKXtyZXR1cm4geXNlIGluIG59KGUpP2kudXNlVmFsdWU9ZS51c2VWYWx1ZTpUSChlKT9pLnVzZUZhY3Rvcnk9ZS51c2VGYWN0b3J5OmZ1bmN0aW9uKG4pe3JldHVybiB2b2lkIDAhPT1uLnVzZUV4aXN0aW5nfShlKSYmKGkudXNlRXhpc3Rpbmc9ZS51c2VFeGlzdGluZyksaX0obix0KSkpLGUpfSksbi5oYXNPd25Qcm9wZXJ0eShLYyl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLEtjLHtnZXQ6KCk9PntpZihudWxsPT09aSl7bGV0IHI9RnMoKTtpPXIuY29tcGlsZUZhY3RvcnkoU0gsYG5nOi8vLyR7bi5uYW1lfS9cdTAyNzVmYWMuanNgLHtuYW1lOm4ubmFtZSx0eXBlOm4sdHlwZUFyZ3VtZW50Q291bnQ6MCxkZXBzOlBNKG4pLHRhcmdldDpyLkZhY3RvcnlUYXJnZXQuSW5qZWN0YWJsZX0pfXJldHVybiBpfSxjb25maWd1cmFibGU6ITB9KX0obix0KSk7ZnVuY3Rpb24gREgobix0PW51bGwsZT1udWxsLGkpe2xldCByPUZ6KG4sdCxlLGkpO3JldHVybiByLnJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygpLHJ9ZnVuY3Rpb24gRnoobix0PW51bGwsZT1udWxsLGkscj1uZXcgU2V0KXtsZXQgbz1bZXx8amksemFlKG4pXTtyZXR1cm4gaT1pfHwoIm9iamVjdCI9PXR5cGVvZiBuP3ZvaWQgMDpwbyhuKSksbmV3IHBNKG8sdHx8Z2soKSxpfHxudWxsLHIpfXZhciB3aT0oKCk9PntjbGFzcyBue3N0YXRpYyBjcmVhdGUoZSxpKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBESCh7bmFtZToiIn0saSxlLCIiKTt7bGV0IHI9ZS5uYW1lPz8iIjtyZXR1cm4gREgoe25hbWU6cn0sZS5wYXJlbnQsZS5wcm92aWRlcnMscil9fX1yZXR1cm4gbi5USFJPV19JRl9OT1RfRk9VTkQ9WF8sbi5OVUxMPW5ldyB1TSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4scHJvdmlkZWRJbjoiYW55IixmYWN0b3J5OigpPT5PKE16KX0pLG4uX19OR19FTEVNRU5UX0lEX189LTEsbn0pKCksel89Y2xhc3N7Y29uc3RydWN0b3IodCxlKXtpZih0aGlzLnRva2VuPXQsdGhpcy5pZD1lLCF0KXRocm93IG5ldyB4dCgyMDgsITEpO3RoaXMuZGlzcGxheU5hbWU9cG8odGhpcy50b2tlbil9c3RhdGljIGdldCh0KXtyZXR1cm4gSUguZ2V0KEFpKHQpKX1zdGF0aWMgZ2V0IG51bWJlck9mS2V5cygpe3JldHVybiBJSC5udW1iZXJPZktleXN9fSxJSD1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl9hbGxLZXlzPW5ldyBNYXB9Z2V0KHQpe2lmKHQgaW5zdGFuY2VvZiB6XylyZXR1cm4gdDtpZih0aGlzLl9hbGxLZXlzLmhhcyh0KSlyZXR1cm4gdGhpcy5fYWxsS2V5cy5nZXQodCk7bGV0IGU9bmV3IHpfKHQsel8ubnVtYmVyT2ZLZXlzKTtyZXR1cm4gdGhpcy5fYWxsS2V5cy5zZXQodCxlKSxlfWdldCBudW1iZXJPZktleXMoKXtyZXR1cm4gdGhpcy5fYWxsS2V5cy5zaXplfX07ZnVuY3Rpb24gQyhuLHQ9Q2kuRGVmYXVsdCl7bGV0IGU9WmUoKTtyZXR1cm4gbnVsbD09PWU/TyhuLHQpOkI1KExvKCksZSxBaShuKSx0KX1mdW5jdGlvbiBjcygpe3Rocm93IG5ldyBFcnJvcigiaW52YWxpZCIpfWZ1bmN0aW9uIE56KG4sdCl7bGV0IGU9bi5jb250ZW50UXVlcmllcztpZihudWxsIT09ZSlmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krPTIpe2xldCBvPWVbaSsxXTtpZigtMSE9PW8pe2xldCBhPW4uZGF0YVtvXTtaUChlW2ldKSxhLmNvbnRlbnRRdWVyaWVzKDIsdFtvXSxvKX19fWZ1bmN0aW9uIEJNKG4sdCxlLGkscixvLGEscyxsLGMsZCl7bGV0IHU9dC5ibHVlcHJpbnQuc2xpY2UoKTtyZXR1cm4gdVtvdV09cix1W2RpXT03NnxpLChudWxsIT09ZHx8biYmMTAyNCZuW2RpXSkmJih1W2RpXXw9MTAyNCksdjUodSksdVtqcl09dVtvZl09bix1W1JhXT1lLHVbaU1dPWF8fG4mJm5baU1dLHVbdWldPXN8fG4mJm5bdWldLHVbTlJdPWx8fG4mJm5bTlJdfHxudWxsLHVbbk1dPWN8fG4mJm5bbk1dfHxudWxsLHVbQWFdPW8sdVtUTV09dGFlKyssdVt1NV09ZCx1W3hsXT0yPT10LnR5cGU/blt4bF06dSx1fWZ1bmN0aW9uIHBmKG4sdCxlLGkscil7bGV0IG89bi5kYXRhW3RdO2lmKG51bGw9PT1vKW89X2sobix0LGUsaSxyKSxHbi5sRnJhbWUuaW5JMThuJiYoby5mbGFnc3w9MzIpO2Vsc2UgaWYoNjQmby50eXBlKXtvLnR5cGU9ZSxvLnZhbHVlPWksby5hdHRycz1yO2xldCBhPVpfKCk7by5pbmplY3RvckluZGV4PW51bGw9PT1hPy0xOmEuaW5qZWN0b3JJbmRleH1yZXR1cm4gYWMobywhMCksb31mdW5jdGlvbiBfayhuLHQsZSxpLHIpe2xldCBvPXg1KCksYT1YUCgpLGw9bi5kYXRhW3RdPWZ1bmN0aW9uKG4sdCxlLGkscixvKXtyZXR1cm57dHlwZTplLGluZGV4OmksaW5zZXJ0QmVmb3JlSW5kZXg6bnVsbCxpbmplY3RvckluZGV4OnQ/dC5pbmplY3RvckluZGV4Oi0xLGRpcmVjdGl2ZVN0YXJ0Oi0xLGRpcmVjdGl2ZUVuZDotMSxkaXJlY3RpdmVTdHlsaW5nTGFzdDotMSxjb21wb25lbnRPZmZzZXQ6LTEscHJvcGVydHlCaW5kaW5nczpudWxsLGZsYWdzOjAscHJvdmlkZXJJbmRleGVzOjAsdmFsdWU6cixhdHRyczpvLG1lcmdlZEF0dHJzOm51bGwsbG9jYWxOYW1lczpudWxsLGluaXRpYWxJbnB1dHM6dm9pZCAwLGlucHV0czpudWxsLG91dHB1dHM6bnVsbCx0VmlldzpudWxsLG5leHQ6bnVsbCxwcmV2Om51bGwscHJvamVjdGlvbk5leHQ6bnVsbCxjaGlsZDpudWxsLHBhcmVudDp0LHByb2plY3Rpb246bnVsbCxzdHlsZXM6bnVsbCxzdHlsZXNXaXRob3V0SG9zdDpudWxsLHJlc2lkdWFsU3R5bGVzOnZvaWQgMCxjbGFzc2VzOm51bGwsY2xhc3Nlc1dpdGhvdXRIb3N0Om51bGwscmVzaWR1YWxDbGFzc2VzOnZvaWQgMCxjbGFzc0JpbmRpbmdzOjAsc3R5bGVCaW5kaW5nczowfX0oMCxhP286byYmby5wYXJlbnQsZSx0LGkscik7cmV0dXJuIG51bGw9PT1uLmZpcnN0Q2hpbGQmJihuLmZpcnN0Q2hpbGQ9bCksbnVsbCE9PW8mJihhP251bGw9PW8uY2hpbGQmJm51bGwhPT1sLnBhcmVudCYmKG8uY2hpbGQ9bCk6bnVsbD09PW8ubmV4dCYmKG8ubmV4dD1sLGwucHJldj1vKSksbH1mdW5jdGlvbiBmYihuLHQsZSxpKXtpZigwPT09ZSlyZXR1cm4tMTtsZXQgcj10Lmxlbmd0aDtmb3IobGV0IG89MDtvPGU7bysrKXQucHVzaChpKSxuLmJsdWVwcmludC5wdXNoKGkpLG4uZGF0YS5wdXNoKG51bGwpO3JldHVybiByfWZ1bmN0aW9uIGJrKG4sdCxlKXtLUCh0KTt0cnl7bGV0IGk9bi52aWV3UXVlcnk7bnVsbCE9PWkmJmhQKDEsaSxlKTtsZXQgcj1uLnRlbXBsYXRlO251bGwhPT1yJiZMeihuLHQsciwxLGUpLG4uZmlyc3RDcmVhdGVQYXNzJiYobi5maXJzdENyZWF0ZVBhc3M9ITEpLG4uc3RhdGljQ29udGVudFF1ZXJpZXMmJk56KG4sdCksbi5zdGF0aWNWaWV3UXVlcmllcyYmaFAoMixuLnZpZXdRdWVyeSxlKTtsZXQgbz1uLmNvbXBvbmVudHM7bnVsbCE9PW8mJmZ1bmN0aW9uKG4sdCl7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspWXNlKG4sdFtlXSl9KHQsbyl9Y2F0Y2goaSl7dGhyb3cgbi5maXJzdENyZWF0ZVBhc3MmJihuLmluY29tcGxldGVGaXJzdFBhc3M9ITAsbi5maXJzdENyZWF0ZVBhc3M9ITEpLGl9ZmluYWxseXt0W2RpXSY9LTUsSlAoKX19ZnVuY3Rpb24gVk0obix0LGUsaSl7bGV0IHI9dFtkaV07aWYoMTI4IT0oMTI4JnIpKXtLUCh0KTt0cnl7djUodCksQzUobi5iaW5kaW5nU3RhcnRJbmRleCksbnVsbCE9PWUmJkx6KG4sdCxlLDIsaSk7bGV0IGE9Mz09KDMmcik7aWYoYSl7bGV0IGM9bi5wcmVPcmRlckNoZWNrSG9va3M7bnVsbCE9PWMmJkdDKHQsYyxudWxsKX1lbHNle2xldCBjPW4ucHJlT3JkZXJIb29rcztudWxsIT09YyYmV0ModCxjLDAsbnVsbCksdVIodCwwKX1pZihmdW5jdGlvbihuKXtmb3IobGV0IHQ9b2sobik7bnVsbCE9PXQ7dD1hayh0KSl7aWYoIXRbcDVdKWNvbnRpbnVlO2xldCBlPXRbS21dO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKXtsZXQgcj1lW2ldOzA9PSg1MTImcltkaV0pJiZxUChyW2pyXSwxKSxyW2RpXXw9NTEyfX19KHQpLGZ1bmN0aW9uKG4pe2ZvcihsZXQgdD1vayhuKTtudWxsIT09dDt0PWFrKHQpKWZvcihsZXQgZT1JYTtlPHQubGVuZ3RoO2UrKyl7bGV0IGk9dFtlXSxyPWlbRm5dO29NKGkpJiZWTShyLGksci50ZW1wbGF0ZSxpW1JhXSl9fSh0KSxudWxsIT09bi5jb250ZW50UXVlcmllcyYmTnoobix0KSxhKXtsZXQgYz1uLmNvbnRlbnRDaGVja0hvb2tzO251bGwhPT1jJiZHQyh0LGMpfWVsc2V7bGV0IGM9bi5jb250ZW50SG9va3M7bnVsbCE9PWMmJldDKHQsYywxKSx1Uih0LDEpfSFmdW5jdGlvbihuLHQpe2xldCBlPW4uaG9zdEJpbmRpbmdPcENvZGVzO2lmKG51bGwhPT1lKXRyeXtmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyl7bGV0IHI9ZVtpXTtpZihyPDApV3AofnIpO2Vsc2V7bGV0IG89cixhPWVbKytpXSxzPWVbKytpXTtzb2UoYSxvKSxzKDIsdFtvXSl9fX1maW5hbGx5e1dwKC0xKX19KG4sdCk7bGV0IHM9bi5jb21wb25lbnRzO251bGwhPT1zJiZmdW5jdGlvbihuLHQpe2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKVhzZShuLHRbZV0pfSh0LHMpO2xldCBsPW4udmlld1F1ZXJ5O2lmKG51bGwhPT1sJiZoUCgyLGwsaSksYSl7bGV0IGM9bi52aWV3Q2hlY2tIb29rcztudWxsIT09YyYmR0ModCxjKX1lbHNle2xldCBjPW4udmlld0hvb2tzO251bGwhPT1jJiZXQyh0LGMsMiksdVIodCwyKX0hMD09PW4uZmlyc3RVcGRhdGVQYXNzJiYobi5maXJzdFVwZGF0ZVBhc3M9ITEpLHRbZGldJj0tNDEsNTEyJnRbZGldJiYodFtkaV0mPS01MTMscVAodFtqcl0sLTEpKX1maW5hbGx5e0pQKCl9fX1mdW5jdGlvbiBMeihuLHQsZSxpLHIpe2xldCBvPWRhKCksYT0yJmk7dHJ5e1dwKC0xKSxhJiZ0Lmxlbmd0aD5HciYma3oobix0LEdyLCExKSxrcyhhPzI6MCxyKSxlKGkscil9ZmluYWxseXtXcChvKSxrcyhhPzM6MSxyKX19ZnVuY3Rpb24gdmsobix0LGUpe2lmKFdQKHQpKXtsZXQgcj10LmRpcmVjdGl2ZUVuZDtmb3IobGV0IG89dC5kaXJlY3RpdmVTdGFydDtvPHI7bysrKXtsZXQgYT1uLmRhdGFbb107YS5jb250ZW50UXVlcmllcyYmYS5jb250ZW50UXVlcmllcygxLGVbb10sbyl9fX1mdW5jdGlvbiB5ayhuLHQsZSl7IXk1KCl8fChmdW5jdGlvbihuLHQsZSxpKXtsZXQgcj1lLmRpcmVjdGl2ZVN0YXJ0LG89ZS5kaXJlY3RpdmVFbmQ7RE0oZSkmJmZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1zcyh0LG4pLHI9QnooZSksbz1uW2lNXSxhPUhNKG4sQk0obixyLG51bGwsZS5vblB1c2g/MzI6MTYsaSx0LG8sby5jcmVhdGVSZW5kZXJlcihpLGUpLG51bGwsbnVsbCxudWxsKSk7blt0LmluZGV4XT1hfSh0LGUsbi5kYXRhW3IrZS5jb21wb25lbnRPZmZzZXRdKSxuLmZpcnN0Q3JlYXRlUGFzc3x8Y00oZSx0KSxzYyhpLHQpO2xldCBhPWUuaW5pdGlhbElucHV0cztmb3IobGV0IHM9cjtzPG87cysrKXtsZXQgbD1uLmRhdGFbc10sYz1YcCh0LG4scyxlKTtzYyhjLHQpLG51bGwhPT1hJiZqc2UoMCxzLXIsYyxsLDAsYSksQ2wobCkmJihlZChlLmluZGV4LHQpW1JhXT1YcCh0LG4scyxlKSl9fShuLHQsZSxzcyhlLHQpKSw2ND09KDY0JmUuZmxhZ3MpJiZ6eihuLHQsZSkpfWZ1bmN0aW9uIHhrKG4sdCxlPXNzKXtsZXQgaT10LmxvY2FsTmFtZXM7aWYobnVsbCE9PWkpe2xldCByPXQuaW5kZXgrMTtmb3IobGV0IG89MDtvPGkubGVuZ3RoO28rPTIpe2xldCBhPWlbbysxXSxzPS0xPT09YT9lKHQsbik6blthXTtuW3IrK109c319fWZ1bmN0aW9uIEJ6KG4pe2xldCB0PW4udFZpZXc7cmV0dXJuIG51bGw9PT10fHx0LmluY29tcGxldGVGaXJzdFBhc3M/bi50Vmlldz1DaygxLG51bGwsbi50ZW1wbGF0ZSxuLmRlY2xzLG4udmFycyxuLmRpcmVjdGl2ZURlZnMsbi5waXBlRGVmcyxuLnZpZXdRdWVyeSxuLnNjaGVtYXMsbi5jb25zdHMpOnR9ZnVuY3Rpb24gQ2sobix0LGUsaSxyLG8sYSxzLGwsYyl7bGV0IGQ9R3IraSx1PWQrcixwPWZ1bmN0aW9uKG4sdCl7bGV0IGU9W107Zm9yKGxldCBpPTA7aTx0O2krKyllLnB1c2goaTxuP251bGw6em4pO3JldHVybiBlfShkLHUpLGg9ImZ1bmN0aW9uIj09dHlwZW9mIGM/YygpOmM7cmV0dXJuIHBbRm5dPXt0eXBlOm4sYmx1ZXByaW50OnAsdGVtcGxhdGU6ZSxxdWVyaWVzOm51bGwsdmlld1F1ZXJ5OnMsZGVjbFROb2RlOnQsZGF0YTpwLnNsaWNlKCkuZmlsbChudWxsLGQpLGJpbmRpbmdTdGFydEluZGV4OmQsZXhwYW5kb1N0YXJ0SW5kZXg6dSxob3N0QmluZGluZ09wQ29kZXM6bnVsbCxmaXJzdENyZWF0ZVBhc3M6ITAsZmlyc3RVcGRhdGVQYXNzOiEwLHN0YXRpY1ZpZXdRdWVyaWVzOiExLHN0YXRpY0NvbnRlbnRRdWVyaWVzOiExLHByZU9yZGVySG9va3M6bnVsbCxwcmVPcmRlckNoZWNrSG9va3M6bnVsbCxjb250ZW50SG9va3M6bnVsbCxjb250ZW50Q2hlY2tIb29rczpudWxsLHZpZXdIb29rczpudWxsLHZpZXdDaGVja0hvb2tzOm51bGwsZGVzdHJveUhvb2tzOm51bGwsY2xlYW51cDpudWxsLGNvbnRlbnRRdWVyaWVzOm51bGwsY29tcG9uZW50czpudWxsLGRpcmVjdGl2ZVJlZ2lzdHJ5OiJmdW5jdGlvbiI9PXR5cGVvZiBvP28oKTpvLHBpcGVSZWdpc3RyeToiZnVuY3Rpb24iPT10eXBlb2YgYT9hKCk6YSxmaXJzdENoaWxkOm51bGwsc2NoZW1hczpsLGNvbnN0czpoLGluY29tcGxldGVGaXJzdFBhc3M6ITF9fWZ1bmN0aW9uIFZ6KG4sdCxlLGkpe2xldCByPUd6KHQpO251bGw9PT1lP3IucHVzaChpKTooci5wdXNoKGUpLG4uZmlyc3RDcmVhdGVQYXNzJiZXeihuKS5wdXNoKGksci5sZW5ndGgtMSkpfWZ1bmN0aW9uIEFIKG4sdCxlLGkpe2ZvcihsZXQgciBpbiBuKWlmKG4uaGFzT3duUHJvcGVydHkocikpe2U9bnVsbD09PWU/e306ZTtsZXQgbz1uW3JdO251bGw9PT1pP1JIKGUsdCxyLG8pOmkuaGFzT3duUHJvcGVydHkocikmJlJIKGUsdCxpW3JdLG8pfXJldHVybiBlfWZ1bmN0aW9uIFJIKG4sdCxlLGkpe24uaGFzT3duUHJvcGVydHkoZSk/bltlXS5wdXNoKHQsaSk6bltlXT1bdCxpXX1mdW5jdGlvbiBkcyhuLHQsZSxpLHIsbyxhLHMpe2xldCBkLGw9c3ModCxlKSxjPXQuaW5wdXRzOyFzJiZudWxsIT1jJiYoZD1jW2ldKT8oRWsobixlLGQsaSxyKSxETSh0KSYmZnVuY3Rpb24obix0KXtsZXQgZT1lZCh0LG4pOzE2JmVbZGldfHwoZVtkaV18PTMyKX0oZSx0LmluZGV4KSk6MyZ0LnR5cGUmJihpPWZ1bmN0aW9uKG4pe3JldHVybiJjbGFzcyI9PT1uPyJjbGFzc05hbWUiOiJmb3IiPT09bj8iaHRtbEZvciI6ImZvcm1hY3Rpb24iPT09bj8iZm9ybUFjdGlvbiI6ImlubmVySHRtbCI9PT1uPyJpbm5lckhUTUwiOiJyZWFkb25seSI9PT1uPyJyZWFkT25seSI6InRhYmluZGV4Ij09PW4/InRhYkluZGV4IjpufShpKSxyPW51bGwhPWE/YShyLHQudmFsdWV8fCIiLGkpOnIsby5zZXRQcm9wZXJ0eShsLGkscikpfWZ1bmN0aW9uIE1rKG4sdCxlLGkpe2lmKHk1KCkpe2xldCBhLHMscj1udWxsPT09aT9udWxsOnsiIjotMX0sbz1mdW5jdGlvbihuLHQpe2xldCBlPW4uZGlyZWN0aXZlUmVnaXN0cnksaT1udWxsLHI9bnVsbDtpZihlKWZvcihsZXQgbz0wO288ZS5sZW5ndGg7bysrKXtsZXQgYT1lW29dO2lmKFB6KHQsYS5zZWxlY3RvcnMsITEpKWlmKGl8fChpPVtdKSxDbChhKSlpZihudWxsIT09YS5maW5kSG9zdERpcmVjdGl2ZURlZnMpe2xldCBzPVtdO3I9cnx8bmV3IE1hcCxhLmZpbmRIb3N0RGlyZWN0aXZlRGVmcyhhLHMsciksaS51bnNoaWZ0KC4uLnMsYSksdVAobix0LHMubGVuZ3RoKX1lbHNlIGkudW5zaGlmdChhKSx1UChuLHQsMCk7ZWxzZSByPXJ8fG5ldyBNYXAsYS5maW5kSG9zdERpcmVjdGl2ZURlZnM/LihhLGksciksaS5wdXNoKGEpfXJldHVybiBudWxsPT09aT9udWxsOltpLHJdfShuLGUpO251bGw9PT1vP2E9cz1udWxsOlthLHNdPW8sbnVsbCE9PWEmJkh6KG4sdCxlLGEscixzKSxyJiZmdW5jdGlvbihuLHQsZSl7aWYodCl7bGV0IGk9bi5sb2NhbE5hbWVzPVtdO2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cis9Mil7bGV0IG89ZVt0W3IrMV1dO2lmKG51bGw9PW8pdGhyb3cgbmV3IHh0KC0zMDEsITEpO2kucHVzaCh0W3JdLG8pfX19KGUsaSxyKX1lLm1lcmdlZEF0dHJzPUtfKGUubWVyZ2VkQXR0cnMsZS5hdHRycyl9ZnVuY3Rpb24gSHoobix0LGUsaSxyLG8pe2ZvcihsZXQgYz0wO2M8aS5sZW5ndGg7YysrKXpSKGNNKGUsdCksbixpW2NdLnR5cGUpOyFmdW5jdGlvbihuLHQsZSl7bi5mbGFnc3w9MSxuLmRpcmVjdGl2ZVN0YXJ0PXQsbi5kaXJlY3RpdmVFbmQ9dCtlLG4ucHJvdmlkZXJJbmRleGVzPXR9KGUsbi5kYXRhLmxlbmd0aCxpLmxlbmd0aCk7Zm9yKGxldCBjPTA7YzxpLmxlbmd0aDtjKyspe2xldCBkPWlbY107ZC5wcm92aWRlcnNSZXNvbHZlciYmZC5wcm92aWRlcnNSZXNvbHZlcihkKX1sZXQgYT0hMSxzPSExLGw9ZmIobix0LGkubGVuZ3RoLG51bGwpO2ZvcihsZXQgYz0wO2M8aS5sZW5ndGg7YysrKXtsZXQgZD1pW2NdO2UubWVyZ2VkQXR0cnM9S18oZS5tZXJnZWRBdHRycyxkLmhvc3RBdHRycyksenNlKG4sZSx0LGwsZCksVnNlKGwsZCxyKSxudWxsIT09ZC5jb250ZW50UXVlcmllcyYmKGUuZmxhZ3N8PTQpLChudWxsIT09ZC5ob3N0QmluZGluZ3N8fG51bGwhPT1kLmhvc3RBdHRyc3x8MCE9PWQuaG9zdFZhcnMpJiYoZS5mbGFnc3w9NjQpO2xldCB1PWQudHlwZS5wcm90b3R5cGU7IWEmJih1Lm5nT25DaGFuZ2VzfHx1Lm5nT25Jbml0fHx1Lm5nRG9DaGVjaykmJigobi5wcmVPcmRlckhvb2tzPz8obi5wcmVPcmRlckhvb2tzPVtdKSkucHVzaChlLmluZGV4KSxhPSEwKSwhcyYmKHUubmdPbkNoYW5nZXN8fHUubmdEb0NoZWNrKSYmKChuLnByZU9yZGVyQ2hlY2tIb29rcz8/KG4ucHJlT3JkZXJDaGVja0hvb2tzPVtdKSkucHVzaChlLmluZGV4KSxzPSEwKSxsKyt9IWZ1bmN0aW9uKG4sdCxlKXtsZXQgcj10LmRpcmVjdGl2ZUVuZCxvPW4uZGF0YSxhPXQuYXR0cnMscz1bXSxsPW51bGwsYz1udWxsO2ZvcihsZXQgZD10LmRpcmVjdGl2ZVN0YXJ0O2Q8cjtkKyspe2xldCB1PW9bZF0scD1lP2UuZ2V0KHUpOm51bGwsbT1wP3Aub3V0cHV0czpudWxsO2w9QUgodS5pbnB1dHMsZCxsLHA/cC5pbnB1dHM6bnVsbCksYz1BSCh1Lm91dHB1dHMsZCxjLG0pO2xldCBfPW51bGw9PT1sfHxudWxsPT09YXx8UnoodCk/bnVsbDpHc2UobCxkLGEpO3MucHVzaChfKX1udWxsIT09bCYmKGwuaGFzT3duUHJvcGVydHkoImNsYXNzIikmJih0LmZsYWdzfD04KSxsLmhhc093blByb3BlcnR5KCJzdHlsZSIpJiYodC5mbGFnc3w9MTYpKSx0LmluaXRpYWxJbnB1dHM9cyx0LmlucHV0cz1sLHQub3V0cHV0cz1jfShuLGUsbyl9ZnVuY3Rpb24genoobix0LGUpe2xldCBpPWUuZGlyZWN0aXZlU3RhcnQscj1lLmRpcmVjdGl2ZUVuZCxvPWUuaW5kZXgsYT1Hbi5sRnJhbWUuY3VycmVudERpcmVjdGl2ZUluZGV4O3RyeXtXcChvKTtmb3IobGV0IHM9aTtzPHI7cysrKXtsZXQgbD1uLmRhdGFbc10sYz10W3NdO0JSKHMpLChudWxsIT09bC5ob3N0QmluZGluZ3N8fDAhPT1sLmhvc3RWYXJzfHxudWxsIT09bC5ob3N0QXR0cnMpJiZOc2UobCxjKX19ZmluYWxseXtXcCgtMSksQlIoYSl9fWZ1bmN0aW9uIE5zZShuLHQpe251bGwhPT1uLmhvc3RCaW5kaW5ncyYmbi5ob3N0QmluZGluZ3MoMSx0KX1mdW5jdGlvbiB1UChuLHQsZSl7dC5jb21wb25lbnRPZmZzZXQ9ZSwobi5jb21wb25lbnRzPz8obi5jb21wb25lbnRzPVtdKSkucHVzaCh0LmluZGV4KX1mdW5jdGlvbiBWc2Uobix0LGUpe2lmKGUpe2lmKHQuZXhwb3J0QXMpZm9yKGxldCBpPTA7aTx0LmV4cG9ydEFzLmxlbmd0aDtpKyspZVt0LmV4cG9ydEFzW2ldXT1uO0NsKHQpJiYoZVsiIl09bil9fWZ1bmN0aW9uIHpzZShuLHQsZSxpLHIpe24uZGF0YVtpXT1yO2xldCBvPXIuZmFjdG9yeXx8KHIuZmFjdG9yeT1HcChyLnR5cGUpKSxhPW5ldyBxcChvLENsKHIpLEMpO24uYmx1ZXByaW50W2ldPWEsZVtpXT1hLGZ1bmN0aW9uKG4sdCxlLGkscil7bGV0IG89ci5ob3N0QmluZGluZ3M7aWYobyl7bGV0IGE9bi5ob3N0QmluZGluZ09wQ29kZXM7bnVsbD09PWEmJihhPW4uaG9zdEJpbmRpbmdPcENvZGVzPVtdKTtsZXQgcz1+dC5pbmRleDsoZnVuY3Rpb24obil7bGV0IHQ9bi5sZW5ndGg7Zm9yKDt0PjA7KXtsZXQgZT1uWy0tdF07aWYoIm51bWJlciI9PXR5cGVvZiBlJiZlPDApcmV0dXJuIGV9cmV0dXJuIDB9KShhKSE9cyYmYS5wdXNoKHMpLGEucHVzaChlLGksbyl9fShuLHQsaSxmYihuLGUsci5ob3N0VmFycyx6bikscil9ZnVuY3Rpb24gdWMobix0LGUsaSxyLG8pe2xldCBhPXNzKG4sdCk7d2sodFt1aV0sYSxvLG4udmFsdWUsZSxpLHIpfWZ1bmN0aW9uIHdrKG4sdCxlLGkscixvLGEpe2lmKG51bGw9PW8pbi5yZW1vdmVBdHRyaWJ1dGUodCxyLGUpO2Vsc2V7bGV0IHM9bnVsbD09YT9qbihvKTphKG8saXx8IiIscik7bi5zZXRBdHRyaWJ1dGUodCxyLHMsZSl9fWZ1bmN0aW9uIGpzZShuLHQsZSxpLHIsbyl7bGV0IGE9b1t0XTtpZihudWxsIT09YSl7bGV0IHM9aS5zZXRJbnB1dDtmb3IobGV0IGw9MDtsPGEubGVuZ3RoOyl7bGV0IGM9YVtsKytdLGQ9YVtsKytdLHU9YVtsKytdO251bGwhPT1zP2kuc2V0SW5wdXQoZSx1LGMsZCk6ZVtkXT11fX19ZnVuY3Rpb24gR3NlKG4sdCxlKXtsZXQgaT1udWxsLHI9MDtmb3IoO3I8ZS5sZW5ndGg7KXtsZXQgbz1lW3JdO2lmKDAhPT1vKWlmKDUhPT1vKXtpZigibnVtYmVyIj09dHlwZW9mIG8pYnJlYWs7aWYobi5oYXNPd25Qcm9wZXJ0eShvKSl7bnVsbD09PWkmJihpPVtdKTtsZXQgYT1uW29dO2ZvcihsZXQgcz0wO3M8YS5sZW5ndGg7cys9MilpZihhW3NdPT09dCl7aS5wdXNoKG8sYVtzKzFdLGVbcisxXSk7YnJlYWt9fXIrPTJ9ZWxzZSByKz0yO2Vsc2Ugcis9NH1yZXR1cm4gaX1mdW5jdGlvbiBVeihuLHQsZSxpKXtyZXR1cm5bbiwhMCwhMSx0LG51bGwsMCxpLGUsbnVsbCxudWxsXX1mdW5jdGlvbiBYc2Uobix0KXtsZXQgZT1lZCh0LG4pO2lmKG9NKGUpKXtsZXQgaT1lW0ZuXTs0OCZlW2RpXT9WTShpLGUsaS50ZW1wbGF0ZSxlW1JhXSk6ZVt6cF0+MCYmcFAoZSl9fWZ1bmN0aW9uIHBQKG4pe2ZvcihsZXQgaT1vayhuKTtudWxsIT09aTtpPWFrKGkpKWZvcihsZXQgcj1JYTtyPGkubGVuZ3RoO3IrKyl7bGV0IG89aVtyXTtpZihvTShvKSlpZig1MTImb1tkaV0pe2xldCBhPW9bRm5dO1ZNKGEsbyxhLnRlbXBsYXRlLG9bUmFdKX1lbHNlIG9benBdPjAmJnBQKG8pfWxldCBlPW5bRm5dLmNvbXBvbmVudHM7aWYobnVsbCE9PWUpZm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspe2xldCByPWVkKGVbaV0sbik7b00ocikmJnJbenBdPjAmJnBQKHIpfX1mdW5jdGlvbiBZc2Uobix0KXtsZXQgZT1lZCh0LG4pLGk9ZVtGbl07KGZ1bmN0aW9uKG4sdCl7Zm9yKGxldCBlPXQubGVuZ3RoO2U8bi5ibHVlcHJpbnQubGVuZ3RoO2UrKyl0LnB1c2gobi5ibHVlcHJpbnRbZV0pfSkoaSxlKSxiayhpLGUsZVtSYV0pfWZ1bmN0aW9uIEhNKG4sdCl7cmV0dXJuIG5bUV9dP25bdUhdW3lsXT10Om5bUV9dPXQsblt1SF09dCx0fWZ1bmN0aW9uIFNrKG4pe2Zvcig7bjspe25bZGldfD0zMjtsZXQgdD1yayhuKTtpZihYcmUobikmJiF0KXJldHVybiBuO249dH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBqeihuLHQsZSxpPSEwKXtsZXQgcj10W2lNXTtyLmJlZ2luJiZyLmJlZ2luKCk7dHJ5e1ZNKG4sdCxuLnRlbXBsYXRlLGUpfWNhdGNoKGEpe3Rocm93IGkmJlh6KHQsYSksYX1maW5hbGx5e3IuZW5kJiZyLmVuZCgpfX1mdW5jdGlvbiBoUChuLHQsZSl7WlAoMCksdChuLGUpfWZ1bmN0aW9uIEd6KG4pe3JldHVybiBuW1lfXXx8KG5bWV9dPVtdKX1mdW5jdGlvbiBXeihuKXtyZXR1cm4gbi5jbGVhbnVwfHwobi5jbGVhbnVwPVtdKX1mdW5jdGlvbiBxeihuLHQsZSl7cmV0dXJuKG51bGw9PT1ufHxDbChuKSkmJihlPWZ1bmN0aW9uKG4pe2Zvcig7QXJyYXkuaXNBcnJheShuKTspe2lmKCJvYmplY3QiPT10eXBlb2YgbltqUF0pcmV0dXJuIG47bj1uW291XX1yZXR1cm4gbnVsbH0oZVt0LmluZGV4XSkpLGVbdWldfWZ1bmN0aW9uIFh6KG4sdCl7bGV0IGU9bltuTV0saT1lP2UuZ2V0KGxhLG51bGwpOm51bGw7aSYmaS5oYW5kbGVFcnJvcih0KX1mdW5jdGlvbiBFayhuLHQsZSxpLHIpe2ZvcihsZXQgbz0wO288ZS5sZW5ndGg7KXtsZXQgYT1lW28rK10scz1lW28rK10sbD10W2FdLGM9bi5kYXRhW2FdO251bGwhPT1jLnNldElucHV0P2Muc2V0SW5wdXQobCxyLGkscyk6bFtzXT1yfX1mdW5jdGlvbiBvZChuLHQsZSl7bGV0IGk9QU0odCxuKTtRNShuW3VpXSxpLGUpfWZ1bmN0aW9uIG1NKG4sdCxlKXtsZXQgaT1lP24uc3R5bGVzOm51bGwscj1lP24uY2xhc3NlczpudWxsLG89MDtpZihudWxsIT09dClmb3IobGV0IGE9MDthPHQubGVuZ3RoO2ErKyl7bGV0IHM9dFthXTsibnVtYmVyIj09dHlwZW9mIHM/bz1zOjE9PW8/cj1SUihyLHMpOjI9PW8mJihpPVJSKGkscysiOiAiK3RbKythXSsiOyIpKX1lP24uc3R5bGVzPWk6bi5zdHlsZXNXaXRob3V0SG9zdD1pLGU/bi5jbGFzc2VzPXI6bi5jbGFzc2VzV2l0aG91dEhvc3Q9cn1mdW5jdGlvbiBaQyhuLHQsZSxpLHI9ITEpe2Zvcig7bnVsbCE9PWU7KXtsZXQgbz10W2UuaW5kZXhdO2lmKG51bGwhPT1vJiZpLnB1c2goTHMobykpLCRjKG8pKWZvcihsZXQgcz1JYTtzPG8ubGVuZ3RoO3MrKyl7bGV0IGw9b1tzXSxjPWxbRm5dLmZpcnN0Q2hpbGQ7bnVsbCE9PWMmJlpDKGxbRm5dLGwsYyxpKX1sZXQgYT1lLnR5cGU7aWYoOCZhKVpDKG4sdCxlLmNoaWxkLGkpO2Vsc2UgaWYoMzImYSl7bGV0IGwscz1payhlLHQpO2Zvcig7bD1zKCk7KWkucHVzaChsKX1lbHNlIGlmKDE2JmEpe2xldCBzPW96KHQsZSk7aWYoQXJyYXkuaXNBcnJheShzKSlpLnB1c2goLi4ucyk7ZWxzZXtsZXQgbD1yayh0W3hsXSk7WkMobFtGbl0sbCxzLGksITApfX1lPXI/ZS5wcm9qZWN0aW9uTmV4dDplLm5leHR9cmV0dXJuIGl9dmFyIFFwPWNsYXNze2dldCByb290Tm9kZXMoKXtsZXQgdD10aGlzLl9sVmlldyxlPXRbRm5dO3JldHVybiBaQyhlLHQsZS5maXJzdENoaWxkLFtdKX1jb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX2xWaWV3PXQsdGhpcy5fY2RSZWZJbmplY3RpbmdWaWV3PWUsdGhpcy5fYXBwUmVmPW51bGwsdGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXI9ITF9Z2V0IGNvbnRleHQoKXtyZXR1cm4gdGhpcy5fbFZpZXdbUmFdfXNldCBjb250ZXh0KHQpe3RoaXMuX2xWaWV3W1JhXT10fWdldCBkZXN0cm95ZWQoKXtyZXR1cm4gMTI4PT0oMTI4JnRoaXMuX2xWaWV3W2RpXSl9ZGVzdHJveSgpe2lmKHRoaXMuX2FwcFJlZil0aGlzLl9hcHBSZWYuZGV0YWNoVmlldyh0aGlzKTtlbHNlIGlmKHRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyKXtsZXQgdD10aGlzLl9sVmlld1tqcl07aWYoJGModCkpe2xldCBlPXRbck1dLGk9ZT9lLmluZGV4T2YodGhpcyk6LTE7aT4tMSYmKFdSKHQsaSksZE0oZSxpKSl9dGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXI9ITF9SzUodGhpcy5fbFZpZXdbRm5dLHRoaXMuX2xWaWV3KX1vbkRlc3Ryb3kodCl7VnoodGhpcy5fbFZpZXdbRm5dLHRoaXMuX2xWaWV3LG51bGwsdCl9bWFya0ZvckNoZWNrKCl7U2sodGhpcy5fY2RSZWZJbmplY3RpbmdWaWV3fHx0aGlzLl9sVmlldyl9ZGV0YWNoKCl7dGhpcy5fbFZpZXdbZGldJj0tNjV9cmVhdHRhY2goKXt0aGlzLl9sVmlld1tkaV18PTY0fWRldGVjdENoYW5nZXMoKXtqeih0aGlzLl9sVmlld1tGbl0sdGhpcy5fbFZpZXcsdGhpcy5jb250ZXh0KX1jaGVja05vQ2hhbmdlcygpe31hdHRhY2hUb1ZpZXdDb250YWluZXJSZWYoKXtpZih0aGlzLl9hcHBSZWYpdGhyb3cgbmV3IHh0KDkwMiwhMSk7dGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXI9ITB9ZGV0YWNoRnJvbUFwcFJlZigpe3ZhciB0O3RoaXMuX2FwcFJlZj1udWxsLHViKHRoaXMuX2xWaWV3W0ZuXSx0PXRoaXMuX2xWaWV3LHRbdWldLDIsbnVsbCxudWxsKX1hdHRhY2hUb0FwcFJlZih0KXtpZih0aGlzLl9hdHRhY2hlZFRvVmlld0NvbnRhaW5lcil0aHJvdyBuZXcgeHQoOTAyLCExKTt0aGlzLl9hcHBSZWY9dH19LG1QPWNsYXNzIGV4dGVuZHMgUXB7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5fdmlldz10fWRldGVjdENoYW5nZXMoKXtsZXQgdD10aGlzLl92aWV3O2p6KHRbRm5dLHQsdFtSYV0sITEpfWNoZWNrTm9DaGFuZ2VzKCl7fWdldCBjb250ZXh0KCl7cmV0dXJuIG51bGx9fSxmTT1jbGFzcyBleHRlbmRzIGhve2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5uZ01vZHVsZT10fXJlc29sdmVDb21wb25lbnRGYWN0b3J5KHQpe2xldCBlPU9zKHQpO3JldHVybiBuZXcgZ00oZSx0aGlzLm5nTW9kdWxlKX19O2Z1bmN0aW9uIFBIKG4pe2xldCB0PVtdO2ZvcihsZXQgZSBpbiBuKW4uaGFzT3duUHJvcGVydHkoZSkmJnQucHVzaCh7cHJvcE5hbWU6bltlXSx0ZW1wbGF0ZU5hbWU6ZX0pO3JldHVybiB0fXZhciBnTT1jbGFzcyBleHRlbmRzIGhNe2dldCBpbnB1dHMoKXtyZXR1cm4gUEgodGhpcy5jb21wb25lbnREZWYuaW5wdXRzKX1nZXQgb3V0cHV0cygpe3JldHVybiBQSCh0aGlzLmNvbXBvbmVudERlZi5vdXRwdXRzKX1jb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCksdGhpcy5jb21wb25lbnREZWY9dCx0aGlzLm5nTW9kdWxlPWUsdGhpcy5jb21wb25lbnRUeXBlPXQudHlwZSx0aGlzLnNlbGVjdG9yPXQuc2VsZWN0b3JzLm1hcChnc2UpLmpvaW4oIiwiKSx0aGlzLm5nQ29udGVudFNlbGVjdG9ycz10Lm5nQ29udGVudFNlbGVjdG9ycz90Lm5nQ29udGVudFNlbGVjdG9yczpbXSx0aGlzLmlzQm91bmRUb01vZHVsZT0hIWV9Y3JlYXRlKHQsZSxpLHIpe2xldCBvPShyPXJ8fHRoaXMubmdNb2R1bGUpaW5zdGFuY2VvZiBsYz9yOnI/LmluamVjdG9yO28mJm51bGwhPT10aGlzLmNvbXBvbmVudERlZi5nZXRTdGFuZGFsb25lSW5qZWN0b3ImJihvPXRoaXMuY29tcG9uZW50RGVmLmdldFN0YW5kYWxvbmVJbmplY3RvcihvKXx8byk7bGV0IGE9bz9uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLmluamVjdG9yPXQsdGhpcy5wYXJlbnRJbmplY3Rvcj1lfWdldCh0LGUsaSl7aT1TTShpKTtsZXQgcj10aGlzLmluamVjdG9yLmdldCh0LF9SLGkpO3JldHVybiByIT09X1J8fGU9PT1fUj9yOnRoaXMucGFyZW50SW5qZWN0b3IuZ2V0KHQsZSxpKX19KHQsbyk6dCxzPWEuZ2V0KGNjLG51bGwpO2lmKG51bGw9PT1zKXRocm93IG5ldyB4dCg0MDcsITEpO2xldCBfLE0sbD1hLmdldChpc2UsbnVsbCksYz1zLmNyZWF0ZVJlbmRlcmVyKG51bGwsdGhpcy5jb21wb25lbnREZWYpLGQ9dGhpcy5jb21wb25lbnREZWYuc2VsZWN0b3JzWzBdWzBdfHwiZGl2Iix1PWk/ZnVuY3Rpb24obix0LGUpe3JldHVybiBuLnNlbGVjdFJvb3RFbGVtZW50KHQsZT09PWFzLlNoYWRvd0RvbSl9KGMsaSx0aGlzLmNvbXBvbmVudERlZi5lbmNhcHN1bGF0aW9uKTpsayhjLGQsZnVuY3Rpb24obil7bGV0IHQ9bi50b0xvd2VyQ2FzZSgpO3JldHVybiJzdmciPT09dD9nNToibWF0aCI9PT10P181Om51bGx9KGQpKSxwPXRoaXMuY29tcG9uZW50RGVmLm9uUHVzaD8yODg6MjcyLGg9Q2soMCxudWxsLG51bGwsMSwwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCksbT1CTShudWxsLGgsbnVsbCxwLG51bGwsbnVsbCxzLGMsbCxhLG51bGwpO0tQKG0pO3RyeXtsZXQgeCx5PXRoaXMuY29tcG9uZW50RGVmLFI9bnVsbDt5LmZpbmRIb3N0RGlyZWN0aXZlRGVmcz8oeD1bXSxSPW5ldyBNYXAseS5maW5kSG9zdERpcmVjdGl2ZURlZnMoeSx4LFIpLHgucHVzaCh5KSk6eD1beV07bGV0IEk9ZnVuY3Rpb24obix0KXtsZXQgZT1uW0ZuXSxpPUdyO3JldHVybiBuW2ldPXQscGYoZSxpLDIsIiNob3N0IixudWxsKX0obSx1KSxCPWZ1bmN0aW9uKG4sdCxlLGkscixvLGEscyl7bGV0IGw9cltGbl07IWZ1bmN0aW9uKG4sdCxlLGkpe2ZvcihsZXQgciBvZiBuKXQubWVyZ2VkQXR0cnM9S18odC5tZXJnZWRBdHRycyxyLmhvc3RBdHRycyk7bnVsbCE9PXQubWVyZ2VkQXR0cnMmJihtTSh0LHQubWVyZ2VkQXR0cnMsITApLG51bGwhPT1lJiZseihpLGUsdCkpfShpLG4sdCxhKTtsZXQgYz1vLmNyZWF0ZVJlbmRlcmVyKHQsZSksZD1CTShyLEJ6KGUpLG51bGwsZS5vblB1c2g/MzI6MTYscltuLmluZGV4XSxuLG8sYyxudWxsLG51bGwsbnVsbCk7cmV0dXJuIGwuZmlyc3RDcmVhdGVQYXNzJiZ1UChsLG4saS5sZW5ndGgtMSksSE0ocixkKSxyW24uaW5kZXhdPWR9KEksdSx5LHgsbSxzLGMpO009YjUoaCxHciksdSYmZnVuY3Rpb24obix0LGUsaSl7aWYoaSlWUihuLGUsWyJuZy12ZXJzaW9uIixyc2UuZnVsbF0pO2Vsc2V7bGV0e2F0dHJzOnIsY2xhc3NlczpvfT1mdW5jdGlvbihuKXtsZXQgdD1bXSxlPVtdLGk9MSxyPTI7Zm9yKDtpPG4ubGVuZ3RoOyl7bGV0IG89bltpXTtpZigic3RyaW5nIj09dHlwZW9mIG8pMj09PXI/IiIhPT1vJiZ0LnB1c2gobyxuWysraV0pOjg9PT1yJiZlLnB1c2gobyk7ZWxzZXtpZighYmwocikpYnJlYWs7cj1vfWkrK31yZXR1cm57YXR0cnM6dCxjbGFzc2VzOmV9fSh0LnNlbGVjdG9yc1swXSk7ciYmVlIobixlLHIpLG8mJm8ubGVuZ3RoPjAmJnN6KG4sZSxvLmpvaW4oIiAiKSl9fShjLHksdSxpKSx2b2lkIDAhPT1lJiZmdW5jdGlvbihuLHQsZSl7bGV0IGk9bi5wcm9qZWN0aW9uPVtdO2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtsZXQgbz1lW3JdO2kucHVzaChudWxsIT1vP0FycmF5LmZyb20obyk6bnVsbCl9fShNLHRoaXMubmdDb250ZW50U2VsZWN0b3JzLGUpLF89ZnVuY3Rpb24obix0LGUsaSxyLG8pe2xldCBhPUxvKCkscz1yW0ZuXSxsPXNzKGEscik7SHoocyxyLGEsZSxudWxsLGkpO2ZvcihsZXQgZD0wO2Q8ZS5sZW5ndGg7ZCsrKXNjKFhwKHIscyxhLmRpcmVjdGl2ZVN0YXJ0K2QsYSkscik7enoocyxyLGEpLGwmJnNjKGwscik7bGV0IGM9WHAocixzLGEuZGlyZWN0aXZlU3RhcnQrYS5jb21wb25lbnRPZmZzZXQsYSk7aWYobltSYV09cltSYV09YyxudWxsIT09bylmb3IobGV0IGQgb2YgbylkKGMsdCk7cmV0dXJuIHZrKHMsYSxuKSxjfShCLHkseCxSLG0sW2lsZV0pLGJrKGgsbSxudWxsKX1maW5hbGx5e0pQKCl9cmV0dXJuIG5ldyBnUCh0aGlzLmNvbXBvbmVudFR5cGUsXyx1ZihNLG0pLG0sTSl9fSxnUD1jbGFzcyBleHRlbmRzIGxQe2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7c3VwZXIoKSx0aGlzLmxvY2F0aW9uPWksdGhpcy5fcm9vdExWaWV3PXIsdGhpcy5fdE5vZGU9byx0aGlzLmluc3RhbmNlPWUsdGhpcy5ob3N0Vmlldz10aGlzLmNoYW5nZURldGVjdG9yUmVmPW5ldyBtUChyKSx0aGlzLmNvbXBvbmVudFR5cGU9dH1zZXRJbnB1dCh0LGUpe2xldCByLGk9dGhpcy5fdE5vZGUuaW5wdXRzO2lmKG51bGwhPT1pJiYocj1pW3RdKSl7bGV0IG89dGhpcy5fcm9vdExWaWV3O0VrKG9bRm5dLG8scix0LGUpLFNrKGVkKHRoaXMuX3ROb2RlLmluZGV4LG8pKX19Z2V0IGluamVjdG9yKCl7cmV0dXJuIG5ldyBqcCh0aGlzLl90Tm9kZSx0aGlzLl9yb290TFZpZXcpfWRlc3Ryb3koKXt0aGlzLmhvc3RWaWV3LmRlc3Ryb3koKX1vbkRlc3Ryb3kodCl7dGhpcy5ob3N0Vmlldy5vbkRlc3Ryb3kodCl9fTtmdW5jdGlvbiBpbGUoKXtsZXQgbj1MbygpO1JNKFplKClbRm5dLG4pfWZ1bmN0aW9uIFl6KG4pe3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobi5wcm90b3R5cGUpLmNvbnN0cnVjdG9yfWZ1bmN0aW9uIFhlKG4pe2xldCB0PVl6KG4udHlwZSksZT0hMCxpPVtuXTtmb3IoO3Q7KXtsZXQgcjtpZihDbChuKSlyPXQuXHUwMjc1Y21wfHx0Llx1MDI3NWRpcjtlbHNle2lmKHQuXHUwMjc1Y21wKXRocm93IG5ldyB4dCg5MDMsITEpO3I9dC5cdTAyNzVkaXJ9aWYocil7aWYoZSl7aS5wdXNoKHIpO2xldCBhPW47YS5pbnB1dHM9dlIobi5pbnB1dHMpLGEuZGVjbGFyZWRJbnB1dHM9dlIobi5kZWNsYXJlZElucHV0cyksYS5vdXRwdXRzPXZSKG4ub3V0cHV0cyk7bGV0IHM9ci5ob3N0QmluZGluZ3M7cyYmc2xlKG4scyk7bGV0IGw9ci52aWV3UXVlcnksYz1yLmNvbnRlbnRRdWVyaWVzO2lmKGwmJm9sZShuLGwpLGMmJmFsZShuLGMpLGRSKG4uaW5wdXRzLHIuaW5wdXRzKSxkUihuLmRlY2xhcmVkSW5wdXRzLHIuZGVjbGFyZWRJbnB1dHMpLGRSKG4ub3V0cHV0cyxyLm91dHB1dHMpLENsKHIpJiZyLmRhdGEuYW5pbWF0aW9uKXtsZXQgZD1uLmRhdGE7ZC5hbmltYXRpb249KGQuYW5pbWF0aW9ufHxbXSkuY29uY2F0KHIuZGF0YS5hbmltYXRpb24pfX1sZXQgbz1yLmZlYXR1cmVzO2lmKG8pZm9yKGxldCBhPTA7YTxvLmxlbmd0aDthKyspe2xldCBzPW9bYV07cyYmcy5uZ0luaGVyaXQmJnMobikscz09PVhlJiYoZT0hMSl9fXQ9T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpfSFmdW5jdGlvbihuKXtsZXQgdD0wLGU9bnVsbDtmb3IobGV0IGk9bi5sZW5ndGgtMTtpPj0wO2ktLSl7bGV0IHI9bltpXTtyLmhvc3RWYXJzPXQrPXIuaG9zdFZhcnMsci5ob3N0QXR0cnM9S18oci5ob3N0QXR0cnMsZT1LXyhlLHIuaG9zdEF0dHJzKSl9fShpKX1mdW5jdGlvbiB2UihuKXtyZXR1cm4gbj09PVpjP3t9Om49PT1qaT9bXTpufWZ1bmN0aW9uIG9sZShuLHQpe2xldCBlPW4udmlld1F1ZXJ5O24udmlld1F1ZXJ5PWU/KGkscik9Pnt0KGksciksZShpLHIpfTp0fWZ1bmN0aW9uIGFsZShuLHQpe2xldCBlPW4uY29udGVudFF1ZXJpZXM7bi5jb250ZW50UXVlcmllcz1lPyhpLHIsbyk9Pnt0KGkscixvKSxlKGkscixvKX06dH1mdW5jdGlvbiBzbGUobix0KXtsZXQgZT1uLmhvc3RCaW5kaW5ncztuLmhvc3RCaW5kaW5ncz1lPyhpLHIpPT57dChpLHIpLGUoaSxyKX06dH12YXIgbGxlPVsicHJvdmlkZXJzUmVzb2x2ZXIiXSxjbGU9WyJ0ZW1wbGF0ZSIsImRlY2xzIiwiY29uc3RzIiwidmFycyIsIm9uUHVzaCIsIm5nQ29udGVudFNlbGVjdG9ycyIsInN0eWxlcyIsImVuY2Fwc3VsYXRpb24iLCJzY2hlbWFzIl07ZnVuY3Rpb24gUXoobix0LGUpe2lmKG51bGwhPT1uLmhvc3REaXJlY3RpdmVzKWZvcihsZXQgaSBvZiBuLmhvc3REaXJlY3RpdmVzKXtsZXQgcj1ldShpLmRpcmVjdGl2ZSk7cGxlKHIuZGVjbGFyZWRJbnB1dHMsaS5pbnB1dHMpLFF6KHIsdCxlKSxlLnNldChyLGkpLHQucHVzaChyKX19ZnVuY3Rpb24ga0gobil7aWYodm9pZCAwPT09bnx8MD09PW4ubGVuZ3RoKXJldHVybiBaYztsZXQgdD17fTtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrPTIpdFtuW2VdXT1uW2UrMV07cmV0dXJuIHR9ZnVuY3Rpb24gcGxlKG4sdCl7Zm9yKGxldCBlIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShlKSYmKG5bdFtlXV09bltlXSl9ZnVuY3Rpb24gWnoobil7cmV0dXJuISFUayhuKSYmKEFycmF5LmlzQXJyYXkobil8fCEobiBpbnN0YW5jZW9mIE1hcCkmJlN5bWJvbC5pdGVyYXRvciBpbiBuKX1mdW5jdGlvbiBUayhuKXtyZXR1cm4gbnVsbCE9PW4mJigiZnVuY3Rpb24iPT10eXBlb2Ygbnx8Im9iamVjdCI9PXR5cGVvZiBuKX1mdW5jdGlvbiBwYyhuLHQsZSl7cmV0dXJuIG5bdF09ZX1mdW5jdGlvbiBnYihuLHQpe3JldHVybiBuW3RdfWZ1bmN0aW9uIHFvKG4sdCxlKXtyZXR1cm4hT2JqZWN0LmlzKG5bdF0sZSkmJihuW3RdPWUsITApfWZ1bmN0aW9uIFpwKG4sdCxlLGkpe2xldCByPXFvKG4sdCxlKTtyZXR1cm4gcW8obix0KzEsaSl8fHJ9ZnVuY3Rpb24gek0obix0LGUsaSxyKXtsZXQgbz1acChuLHQsZSxpKTtyZXR1cm4gcW8obix0KzIscil8fG99ZnVuY3Rpb24gQnMobix0LGUsaSxyLG8pe2xldCBhPVpwKG4sdCxlLGkpO3JldHVybiBacChuLHQrMixyLG8pfHxhfWZ1bmN0aW9uIEJlKG4sdCxlLGkpe2xldCByPVplKCk7cmV0dXJuIHFvKHIsc2YoKSx0KSYmKFRpKCksdWMoUHIoKSxyLG4sdCxlLGkpKSxCZX1mdW5jdGlvbiBoZihuLHQpe2xldCBlPSExLGk9dGQoKTtmb3IobGV0IG89MTtvPHQubGVuZ3RoO28rPTIpZT1xbyhuLGkrKyx0W29dKXx8ZTtpZihDNShpKSwhZSlyZXR1cm4gem47bGV0IHI9dFswXTtmb3IobGV0IG89MTtvPHQubGVuZ3RoO28rPTIpcis9am4odFtvXSkrdFtvKzFdO3JldHVybiByfWZ1bmN0aW9uIG1mKG4sdCxlLGkpe3JldHVybiBxbyhuLHNmKCksZSk/dCtqbihlKStpOnpufWZ1bmN0aW9uIGZmKG4sdCxlLGkscixvKXtsZXQgcz1acChuLHRkKCksZSxyKTtyZXR1cm4gbmQoMikscz90K2puKGUpK2kram4ocikrbzp6bn1mdW5jdGlvbiBnZihuLHQsZSxpLHIsbyxhLHMpe2xldCBjPXpNKG4sdGQoKSxlLHIsYSk7cmV0dXJuIG5kKDMpLGM/dCtqbihlKStpK2puKHIpK28ram4oYSkrczp6bn1mdW5jdGlvbiBfZihuLHQsZSxpLHIsbyxhLHMsbCxjKXtsZXQgdT1CcyhuLHRkKCksZSxyLGEsbCk7cmV0dXJuIG5kKDQpLHU/dCtqbihlKStpK2puKHIpK28ram4oYSkrcytqbihsKStjOnpufWZ1bmN0aW9uIGJmKG4sdCxlLGkscixvLGEscyxsLGMsZCx1KXtsZXQgcD10ZCgpLGg9QnMobixwLGUscixhLGwpO3JldHVybiBoPXFvKG4scCs0LGQpfHxoLG5kKDUpLGg/dCtqbihlKStpK2puKHIpK28ram4oYSkrcytqbihsKStjK2puKGQpK3U6em59ZnVuY3Rpb24gdmYobix0LGUsaSxyLG8sYSxzLGwsYyxkLHUscCxoKXtsZXQgbT10ZCgpLF89QnMobixtLGUscixhLGwpO3JldHVybiBfPVpwKG4sbSs0LGQscCl8fF8sbmQoNiksXz90K2puKGUpK2kram4ocikrbytqbihhKStzK2puKGwpK2Mram4oZCkrdStqbihwKStoOnpufWZ1bmN0aW9uIHlmKG4sdCxlLGkscixvLGEscyxsLGMsZCx1LHAsaCxtLF8pe2xldCBNPXRkKCkseT1CcyhuLE0sZSxyLGEsbCk7cmV0dXJuIHk9ek0obixNKzQsZCxwLG0pfHx5LG5kKDcpLHk/dCtqbihlKStpK2puKHIpK28ram4oYSkrcytqbihsKStjK2puKGQpK3Uram4ocCkraCtqbihtKStfOnpufWZ1bmN0aW9uIHhmKG4sdCxlLGkscixvLGEscyxsLGMsZCx1LHAsaCxtLF8sTSx5KXtsZXQgeD10ZCgpLFI9QnMobix4LGUscixhLGwpO3JldHVybiBSPUJzKG4seCs0LGQscCxtLE0pfHxSLG5kKDgpLFI/dCtqbihlKStpK2puKHIpK28ram4oYSkrcytqbihsKStjK2puKGQpK3Uram4ocCkraCtqbihtKStfK2puKE0pK3k6em59ZnVuY3Rpb24gUyhuLHQsZSxpLHIsbyxhLHMpe2xldCBsPVplKCksYz1UaSgpLGQ9bitHcix1PWMuZmlyc3RDcmVhdGVQYXNzP2Z1bmN0aW9uKG4sdCxlLGkscixvLGEscyxsKXtsZXQgYz10LmNvbnN0cyxkPXBmKHQsbiw0LGF8fG51bGwsbnUoYyxzKSk7TWsodCxlLGQsbnUoYyxsKSksUk0odCxkKTtsZXQgdT1kLnRWaWV3PUNrKDIsZCxpLHIsbyx0LmRpcmVjdGl2ZVJlZ2lzdHJ5LHQucGlwZVJlZ2lzdHJ5LG51bGwsdC5zY2hlbWFzLGMpO3JldHVybiBudWxsIT09dC5xdWVyaWVzJiYodC5xdWVyaWVzLnRlbXBsYXRlKHQsZCksdS5xdWVyaWVzPXQucXVlcmllcy5lbWJlZGRlZFRWaWV3KGQpKSxkfShkLGMsbCx0LGUsaSxyLG8sYSk6Yy5kYXRhW2RdO2FjKHUsITEpO2xldCBwPWxbdWldLmNyZWF0ZUNvbW1lbnQoIiIpO09NKGMsbCxwLHUpLHNjKHAsbCksSE0obCxsW2RdPVV6KHAsbCxwLHUpKSxJTSh1KSYmeWsoYyxsLHUpLG51bGwhPWEmJnhrKGwsdSxzKX1mdW5jdGlvbiBzdChuKXtyZXR1cm4gYWYoR24ubEZyYW1lLmNvbnRleHRMVmlldyxHcituKX1mdW5jdGlvbiBiKG4sdCxlKXtsZXQgaT1aZSgpO3JldHVybiBxbyhpLHNmKCksdCkmJmRzKFRpKCksUHIoKSxpLG4sdCxpW3VpXSxlLCExKSxifWZ1bmN0aW9uIF9QKG4sdCxlLGkscil7bGV0IGE9cj8iY2xhc3MiOiJzdHlsZSI7RWsobixlLHQuaW5wdXRzW2FdLGEsaSl9ZnVuY3Rpb24gZihuLHQsZSxpKXtsZXQgcj1aZSgpLG89VGkoKSxhPUdyK24scz1yW3VpXSxsPW8uZmlyc3RDcmVhdGVQYXNzP2Z1bmN0aW9uKG4sdCxlLGkscixvKXtsZXQgYT10LmNvbnN0cyxsPXBmKHQsbiwyLGksbnUoYSxyKSk7cmV0dXJuIE1rKHQsZSxsLG51KGEsbykpLG51bGwhPT1sLmF0dHJzJiZtTShsLGwuYXR0cnMsITEpLG51bGwhPT1sLm1lcmdlZEF0dHJzJiZtTShsLGwubWVyZ2VkQXR0cnMsITApLG51bGwhPT10LnF1ZXJpZXMmJnQucXVlcmllcy5lbGVtZW50U3RhcnQodCxsKSxsfShhLG8scix0LGUsaSk6by5kYXRhW2FdLGM9clthXT1sayhzLHQsR24ubEZyYW1lLmN1cnJlbnROYW1lc3BhY2UpLGQ9SU0obCk7cmV0dXJuIGFjKGwsITApLGx6KHMsYyxsKSwzMiE9KDMyJmwuZmxhZ3MpJiZPTShvLHIsYyxsKSwwPT09R24ubEZyYW1lLmVsZW1lbnREZXB0aENvdW50JiZzYyhjLHIpLEduLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudCsrLGQmJih5ayhvLHIsbCksdmsobyxsLHIpKSxudWxsIT09aSYmeGsocixsKSxmfWZ1bmN0aW9uIGcoKXtsZXQgbj1MbygpO1hQKCk/WVAoKToobj1uLnBhcmVudCxhYyhuLCExKSk7bGV0IHQ9bjtHbi5sRnJhbWUuZWxlbWVudERlcHRoQ291bnQtLTtsZXQgZT1UaSgpO3JldHVybiBlLmZpcnN0Q3JlYXRlUGFzcyYmKFJNKGUsbiksV1AobikmJmUucXVlcmllcy5lbGVtZW50RW5kKG4pKSxudWxsIT10LmNsYXNzZXNXaXRob3V0SG9zdCYmZnVuY3Rpb24obil7cmV0dXJuIDAhPSg4Jm4uZmxhZ3MpfSh0KSYmX1AoZSx0LFplKCksdC5jbGFzc2VzV2l0aG91dEhvc3QsITApLG51bGwhPXQuc3R5bGVzV2l0aG91dEhvc3QmJmZ1bmN0aW9uKG4pe3JldHVybiAwIT0oMTYmbi5mbGFncyl9KHQpJiZfUChlLHQsWmUoKSx0LnN0eWxlc1dpdGhvdXRIb3N0LCExKSxnfWZ1bmN0aW9uIGsobix0LGUsaSl7cmV0dXJuIGYobix0LGUsaSksZygpLGt9ZnVuY3Rpb24gR3Qobix0LGUpe2xldCBpPVplKCkscj1UaSgpLG89bitHcixhPXIuZmlyc3RDcmVhdGVQYXNzP2Z1bmN0aW9uKG4sdCxlLGkscil7bGV0IG89dC5jb25zdHMsYT1udShvLGkpLHM9cGYodCxuLDgsIm5nLWNvbnRhaW5lciIsYSk7cmV0dXJuIG51bGwhPT1hJiZtTShzLGEsITApLE1rKHQsZSxzLG51KG8scikpLG51bGwhPT10LnF1ZXJpZXMmJnQucXVlcmllcy5lbGVtZW50U3RhcnQodCxzKSxzfShvLHIsaSx0LGUpOnIuZGF0YVtvXTthYyhhLCEwKTtsZXQgcz1pW29dPWlbdWldLmNyZWF0ZUNvbW1lbnQoIiIpO3JldHVybiBPTShyLGkscyxhKSxzYyhzLGkpLElNKGEpJiYoeWsocixpLGEpLHZrKHIsYSxpKSksbnVsbCE9ZSYmeGsoaSxhKSxHdH1mdW5jdGlvbiBXdCgpe2xldCBuPUxvKCksdD1UaSgpO3JldHVybiBYUCgpP1lQKCk6KG49bi5wYXJlbnQsYWMobiwhMSkpLHQuZmlyc3RDcmVhdGVQYXNzJiYoUk0odCxuKSxXUChuKSYmdC5xdWVyaWVzLmVsZW1lbnRFbmQobikpLFd0fWZ1bmN0aW9uIGhpKG4sdCxlKXtyZXR1cm4gR3Qobix0LGUpLFd0KCksaGl9ZnVuY3Rpb24gVGUoKXtyZXR1cm4gWmUoKX1mdW5jdGlvbiBDZihuKXtyZXR1cm4hIW4mJiJmdW5jdGlvbiI9PXR5cGVvZiBuLnRoZW59ZnVuY3Rpb24gRGsobil7cmV0dXJuISFuJiYiZnVuY3Rpb24iPT10eXBlb2Ygbi5zdWJzY3JpYmV9dmFyIElrPURrO2Z1bmN0aW9uIEEobix0LGUsaSl7bGV0IHI9WmUoKSxvPVRpKCksYT1MbygpO3JldHVybiBhVShvLHIsclt1aV0sYSxuLHQsaSksQX1mdW5jdGlvbiBVTShuLHQpe2xldCBlPUxvKCksaT1aZSgpLHI9VGkoKTtyZXR1cm4gYVUocixpLHF6KFFQKHIuZGF0YSksZSxpKSxlLG4sdCksVU19ZnVuY3Rpb24gYVUobix0LGUsaSxyLG8sYSl7bGV0IHM9SU0oaSksYz1uLmZpcnN0Q3JlYXRlUGFzcyYmV3oobiksZD10W1JhXSx1PUd6KHQpLHA9ITA7aWYoMyZpLnR5cGV8fGEpe2xldCBfPXNzKGksdCksTT1hP2EoXyk6Xyx5PXUubGVuZ3RoLHg9YT9JPT5hKExzKElbaS5pbmRleF0pKTppLmluZGV4LFI9bnVsbDtpZighYSYmcyYmKFI9ZnVuY3Rpb24obix0LGUsaSl7bGV0IHI9bi5jbGVhbnVwO2lmKG51bGwhPXIpZm9yKGxldCBvPTA7bzxyLmxlbmd0aC0xO28rPTIpe2xldCBhPXJbb107aWYoYT09PWUmJnJbbysxXT09PWkpe2xldCBzPXRbWV9dLGw9cltvKzJdO3JldHVybiBzLmxlbmd0aD5sP3NbbF06bnVsbH0ic3RyaW5nIj09dHlwZW9mIGEmJihvKz0yKX1yZXR1cm4gbnVsbH0obix0LHIsaS5pbmRleCkpLG51bGwhPT1SKShSLl9fbmdMYXN0TGlzdGVuZXJGbl9ffHxSKS5fX25nTmV4dExpc3RlbmVyRm5fXz1vLFIuX19uZ0xhc3RMaXN0ZW5lckZuX189byxwPSExO2Vsc2V7bz1GSChpLHQsZCxvLCExKTtsZXQgST1lLmxpc3RlbihNLHIsbyk7dS5wdXNoKG8sSSksYyYmYy5wdXNoKHIseCx5LHkrMSl9fWVsc2Ugbz1GSChpLHQsZCxvLCExKTtsZXQgbSxoPWkub3V0cHV0cztpZihwJiZudWxsIT09aCYmKG09aFtyXSkpe2xldCBfPW0ubGVuZ3RoO2lmKF8pZm9yKGxldCBNPTA7TTxfO00rPTIpe2xldCBCPXRbbVtNXV1bbVtNKzFdXS5zdWJzY3JpYmUobyksZWU9dS5sZW5ndGg7dS5wdXNoKG8sQiksYyYmYy5wdXNoKHIsaS5pbmRleCxlZSwtKGVlKzEpKX19fWZ1bmN0aW9uIE9IKG4sdCxlLGkpe3RyeXtyZXR1cm4ga3MoNix0LGUpLCExIT09ZShpKX1jYXRjaChyKXtyZXR1cm4gWHoobixyKSwhMX1maW5hbGx5e2tzKDcsdCxlKX19ZnVuY3Rpb24gRkgobix0LGUsaSxyKXtyZXR1cm4gZnVuY3Rpb24gbyhhKXtpZihhPT09RnVuY3Rpb24pcmV0dXJuIGk7U2sobi5jb21wb25lbnRPZmZzZXQ+LTE/ZWQobi5pbmRleCx0KTp0KTtsZXQgbD1PSCh0LGUsaSxhKSxjPW8uX19uZ05leHRMaXN0ZW5lckZuX187Zm9yKDtjOylsPU9IKHQsZSxjLGEpJiZsLGM9Yy5fX25nTmV4dExpc3RlbmVyRm5fXztyZXR1cm4gciYmITE9PT1sJiYoYS5wcmV2ZW50RGVmYXVsdCgpLGEucmV0dXJuVmFsdWU9ITEpLGx9fWZ1bmN0aW9uIHcobj0xKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuKEduLmxGcmFtZS5jb250ZXh0TFZpZXc9ZnVuY3Rpb24obix0KXtmb3IoO24+MDspdD10W29mXSxuLS07cmV0dXJuIHR9KG4sR24ubEZyYW1lLmNvbnRleHRMVmlldykpW1JhXX0obil9ZnVuY3Rpb24gdmxlKG4sdCl7bGV0IGU9bnVsbCxpPWZ1bmN0aW9uKG4pe2xldCB0PW4uYXR0cnM7aWYobnVsbCE9dCl7bGV0IGU9dC5pbmRleE9mKDUpO2lmKDA9PSgxJmUpKXJldHVybiB0W2UrMV19cmV0dXJuIG51bGx9KG4pO2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtsZXQgbz10W3JdO2lmKCIqIiE9PW8pe2lmKG51bGw9PT1pP1B6KG4sbywhMCk6ZnNlKGksbykpcmV0dXJuIHJ9ZWxzZSBlPXJ9cmV0dXJuIGV9ZnVuY3Rpb24gZm4obil7bGV0IHQ9WmUoKVt4bF1bQWFdO2lmKCF0LnByb2plY3Rpb24pe2xldCBpPXQucHJvamVjdGlvbj1IXyhuP24ubGVuZ3RoOjEsbnVsbCkscj1pLnNsaWNlKCksbz10LmNoaWxkO2Zvcig7bnVsbCE9PW87KXtsZXQgYT1uP3ZsZShvLG4pOjA7bnVsbCE9PWEmJihyW2FdP3JbYV0ucHJvamVjdGlvbk5leHQ9bzppW2FdPW8sclthXT1vKSxvPW8ubmV4dH19fWZ1bmN0aW9uIFR0KG4sdD0wLGUpe2xldCBpPVplKCkscj1UaSgpLG89cGYocixHcituLDE2LG51bGwsZXx8bnVsbCk7bnVsbD09PW8ucHJvamVjdGlvbiYmKG8ucHJvamVjdGlvbj10KSxZUCgpLDMyIT0oMzImby5mbGFncykmJmZ1bmN0aW9uKG4sdCxlKXtheih0W3VpXSwwLHQsZSxKNShuLGUsdCksdHooZS5wYXJlbnR8fHRbQWFdLGUsdCkpfShyLGksbyl9ZnVuY3Rpb24gWmkobix0LGUpe3JldHVybiBfYihuLCIiLHQsIiIsZSksWml9ZnVuY3Rpb24gX2Iobix0LGUsaSxyKXtsZXQgbz1aZSgpLGE9bWYobyx0LGUsaSk7cmV0dXJuIGEhPT16biYmZHMoVGkoKSxQcigpLG8sbixhLG9bdWldLHIsITEpLF9ifWZ1bmN0aW9uIGpNKG4sdCxlLGkscixvLGEpe2xldCBzPVplKCksbD1mZihzLHQsZSxpLHIsbyk7cmV0dXJuIGwhPT16biYmZHMoVGkoKSxQcigpLHMsbixsLHNbdWldLGEsITEpLGpNfWZ1bmN0aW9uIGpDKG4sdCl7cmV0dXJuIG48PDE3fHQ8PDJ9ZnVuY3Rpb24gS3Aobil7cmV0dXJuIG4+PjE3JjMyNzY3fWZ1bmN0aW9uIGJQKG4pe3JldHVybiAyfG59ZnVuY3Rpb24gZWYobil7cmV0dXJuKDEzMTA2OCZuKT4+Mn1mdW5jdGlvbiB5UihuLHQpe3JldHVybi0xMzEwNjkmbnx0PDwyfWZ1bmN0aW9uIHZQKG4pe3JldHVybiAxfG59ZnVuY3Rpb24gTkgobix0LGUsaSxyKXtsZXQgbz1uW2UrMV0sYT1udWxsPT09dCxzPWk/S3Aobyk6ZWYobyksbD0hMTtmb3IoOzAhPT1zJiYoITE9PT1sfHxhKTspe2xldCBkPW5bcysxXTtTbGUobltzXSx0KSYmKGw9ITAsbltzKzFdPWk/dlAoZCk6YlAoZCkpLHM9aT9LcChkKTplZihkKX1sJiYobltlKzFdPWk/YlAobyk6dlAobykpfWZ1bmN0aW9uIFNsZShuLHQpe3JldHVybiBudWxsPT09bnx8bnVsbD09dHx8KEFycmF5LmlzQXJyYXkobik/blsxXTpuKT09PXR8fCEoIUFycmF5LmlzQXJyYXkobil8fCJzdHJpbmciIT10eXBlb2YgdCkmJmRiKG4sdCk+PTB9dmFyIHVvPXt0ZXh0RW5kOjAsa2V5OjAsa2V5RW5kOjAsdmFsdWU6MCx2YWx1ZUVuZDowfTtmdW5jdGlvbiBtVShuKXtyZXR1cm4gbi5zdWJzdHJpbmcodW8ua2V5LHVvLmtleUVuZCl9ZnVuY3Rpb24gRWxlKG4pe3JldHVybiBuLnN1YnN0cmluZyh1by52YWx1ZSx1by52YWx1ZUVuZCl9ZnVuY3Rpb24gZlUobix0KXtsZXQgZT11by50ZXh0RW5kO3JldHVybiBlPT09dD8tMToodD11by5rZXlFbmQ9ZnVuY3Rpb24obix0LGUpe2Zvcig7dDxlJiZuLmNoYXJDb2RlQXQodCk+MzI7KXQrKztyZXR1cm4gdH0obix1by5rZXk9dCxlKSx0ZihuLHQsZSkpfWZ1bmN0aW9uIGdVKG4sdCl7bGV0IGU9dW8udGV4dEVuZCxpPXVvLmtleT10ZihuLHQsZSk7cmV0dXJuIGU9PT1pPy0xOihpPXVvLmtleUVuZD1mdW5jdGlvbihuLHQsZSl7bGV0IGk7Zm9yKDt0PGUmJig0NT09PShpPW4uY2hhckNvZGVBdCh0KSl8fDk1PT09aXx8KC0zMyZpKT49NjUmJigtMzMmaSk8PTkwfHxpPj00OCYmaTw9NTcpOyl0Kys7cmV0dXJuIHR9KG4saSxlKSxpPUxIKG4saSxlKSxpPXVvLnZhbHVlPXRmKG4saSxlKSxpPXVvLnZhbHVlRW5kPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT0tMSxyPS0xLG89LTEsYT10LHM9YTtmb3IoO2E8ZTspe2xldCBsPW4uY2hhckNvZGVBdChhKyspO2lmKDU5PT09bClyZXR1cm4gczszND09PWx8fDM5PT09bD9zPWE9QkgobixsLGEsZSk6dD09PWEtNCYmODU9PT1vJiY4Mj09PXImJjc2PT09aSYmNDA9PT1sP3M9YT1CSChuLDQxLGEsZSk6bD4zMiYmKHM9YSksbz1yLHI9aSxpPS0zMyZsfXJldHVybiBzfShuLGksZSksTEgobixpLGUpKX1mdW5jdGlvbiBfVShuKXt1by5rZXk9MCx1by5rZXlFbmQ9MCx1by52YWx1ZT0wLHVvLnZhbHVlRW5kPTAsdW8udGV4dEVuZD1uLmxlbmd0aH1mdW5jdGlvbiB0ZihuLHQsZSl7Zm9yKDt0PGUmJm4uY2hhckNvZGVBdCh0KTw9MzI7KXQrKztyZXR1cm4gdH1mdW5jdGlvbiBMSChuLHQsZSxpKXtyZXR1cm4odD10ZihuLHQsZSkpPGUmJnQrKyx0fWZ1bmN0aW9uIEJIKG4sdCxlLGkpe2xldCByPS0xLG89ZTtmb3IoO288aTspe2xldCBhPW4uY2hhckNvZGVBdChvKyspO2lmKGE9PXQmJjkyIT09cilyZXR1cm4gbztyPTkyPT1hJiY5Mj09PXI/MDphfXRocm93IG5ldyBFcnJvcn1mdW5jdGlvbiBCdChuLHQsZSl7cmV0dXJuIFNsKG4sdCxlLCExKSxCdH1mdW5jdGlvbiBudChuLHQpe3JldHVybiBTbChuLHQsbnVsbCwhMCksbnR9ZnVuY3Rpb24gSHMobil7RWwoeVUsUGxlLG4sITEpfWZ1bmN0aW9uIFBsZShuLHQpe2ZvcihsZXQgZT1mdW5jdGlvbihuKXtyZXR1cm4gX1UobiksZ1Uobix0ZihuLDAsdW8udGV4dEVuZCkpfSh0KTtlPj0wO2U9Z1UodCxlKSl5VShuLG1VKHQpLEVsZSh0KSl9ZnVuY3Rpb24gWG8obil7RWwoQmxlLGhjLG4sITApfWZ1bmN0aW9uIGhjKG4sdCl7Zm9yKGxldCBlPWZ1bmN0aW9uKG4pe3JldHVybiBfVShuKSxmVShuLHRmKG4sMCx1by50ZXh0RW5kKSl9KHQpO2U+PTA7ZT1mVSh0LGUpKWxzKG4sbVUodCksITApfWZ1bmN0aW9uIFNsKG4sdCxlLGkpe2xldCByPVplKCksbz1UaSgpLGE9bmQoMik7by5maXJzdFVwZGF0ZVBhc3MmJnZVKG8sbixhLGkpLHQhPT16biYmcW8ocixhLHQpJiZ4VShvLG8uZGF0YVtkYSgpXSxyLHJbdWldLG4sclthKzFdPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG51bGw9PW58fCIiPT09bnx8KCJzdHJpbmciPT10eXBlb2YgdD9uKz10OiJvYmplY3QiPT10eXBlb2YgbiYmKG49cG8oT2EobikpKSksbn0odCxlKSxpLGEpfWZ1bmN0aW9uIEVsKG4sdCxlLGkpe2xldCByPVRpKCksbz1uZCgyKTtyLmZpcnN0VXBkYXRlUGFzcyYmdlUocixudWxsLG8saSk7bGV0IGE9WmUoKTtpZihlIT09em4mJnFvKGEsbyxlKSl7bGV0IHM9ci5kYXRhW2RhKCldO2lmKENVKHMsaSkmJiFiVShyLG8pKXtsZXQgbD1pP3MuY2xhc3Nlc1dpdGhvdXRIb3N0OnMuc3R5bGVzV2l0aG91dEhvc3Q7bnVsbCE9PWwmJihlPVJSKGwsZXx8IiIpKSxfUChyLHMsYSxlLGkpfWVsc2UhZnVuY3Rpb24obix0LGUsaSxyLG8sYSxzKXtyPT09em4mJihyPWppKTtsZXQgbD0wLGM9MCxkPTA8ci5sZW5ndGg/clswXTpudWxsLHU9MDxvLmxlbmd0aD9vWzBdOm51bGw7Zm9yKDtudWxsIT09ZHx8bnVsbCE9PXU7KXtsZXQgXyxwPWw8ci5sZW5ndGg/cltsKzFdOnZvaWQgMCxoPWM8by5sZW5ndGg/b1tjKzFdOnZvaWQgMCxtPW51bGw7ZD09PXU/KGwrPTIsYys9MixwIT09aCYmKG09dSxfPWgpKTpudWxsPT09dXx8bnVsbCE9PWQmJmQ8dT8obCs9MixtPWQpOihjKz0yLG09dSxfPWgpLG51bGwhPT1tJiZ4VShuLHQsZSxpLG0sXyxhLHMpLGQ9bDxyLmxlbmd0aD9yW2xdOm51bGwsdT1jPG8ubGVuZ3RoP29bY106bnVsbH19KHIscyxhLGFbdWldLGFbbysxXSxhW28rMV09ZnVuY3Rpb24obix0LGUpe2lmKG51bGw9PWV8fCIiPT09ZSlyZXR1cm4gamk7bGV0IGk9W10scj1PYShlKTtpZihBcnJheS5pc0FycmF5KHIpKWZvcihsZXQgbz0wO288ci5sZW5ndGg7bysrKW4oaSxyW29dLCEwKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2Ygcilmb3IobGV0IG8gaW4gcilyLmhhc093blByb3BlcnR5KG8pJiZuKGksbyxyW29dKTtlbHNlInN0cmluZyI9PXR5cGVvZiByJiZ0KGkscik7cmV0dXJuIGl9KG4sdCxlKSxpLG8pfX1mdW5jdGlvbiBiVShuLHQpe3JldHVybiB0Pj1uLmV4cGFuZG9TdGFydEluZGV4fWZ1bmN0aW9uIHZVKG4sdCxlLGkpe2xldCByPW4uZGF0YTtpZihudWxsPT09cltlKzFdKXtsZXQgbz1yW2RhKCldLGE9YlUobixlKTtDVShvLGkpJiZudWxsPT09dCYmIWEmJih0PSExKSx0PWZ1bmN0aW9uKG4sdCxlLGkpe2xldCByPVFQKG4pLG89aT90LnJlc2lkdWFsQ2xhc3Nlczp0LnJlc2lkdWFsU3R5bGVzO2lmKG51bGw9PT1yKTA9PT0oaT90LmNsYXNzQmluZGluZ3M6dC5zdHlsZUJpbmRpbmdzKSYmKGU9JF8oZT14UihudWxsLG4sdCxlLGkpLHQuYXR0cnMsaSksbz1udWxsKTtlbHNle2xldCBhPXQuZGlyZWN0aXZlU3R5bGluZ0xhc3Q7aWYoLTE9PT1hfHxuW2FdIT09cilpZihlPXhSKHIsbix0LGUsaSksbnVsbD09PW8pe2xldCBsPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1lP3QuY2xhc3NCaW5kaW5nczp0LnN0eWxlQmluZGluZ3M7aWYoMCE9PWVmKGkpKXJldHVybiBuW0twKGkpXX0obix0LGkpO3ZvaWQgMCE9PWwmJkFycmF5LmlzQXJyYXkobCkmJihsPXhSKG51bGwsbix0LGxbMV0saSksbD0kXyhsLHQuYXR0cnMsaSksZnVuY3Rpb24obix0LGUsaSl7bltLcChlP3QuY2xhc3NCaW5kaW5nczp0LnN0eWxlQmluZGluZ3MpXT1pfShuLHQsaSxsKSl9ZWxzZSBvPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaSxyPXQuZGlyZWN0aXZlRW5kO2ZvcihsZXQgbz0xK3QuZGlyZWN0aXZlU3R5bGluZ0xhc3Q7bzxyO28rKylpPSRfKGksbltvXS5ob3N0QXR0cnMsZSk7cmV0dXJuICRfKGksdC5hdHRycyxlKX0obix0LGkpfXJldHVybiB2b2lkIDAhPT1vJiYoaT90LnJlc2lkdWFsQ2xhc3Nlcz1vOnQucmVzaWR1YWxTdHlsZXM9byksZX0ocixvLHQsaSksZnVuY3Rpb24obix0LGUsaSxyLG8pe2xldCBhPW8/dC5jbGFzc0JpbmRpbmdzOnQuc3R5bGVCaW5kaW5ncyxzPUtwKGEpLGw9ZWYoYSk7bltpXT1lO2xldCBkLGM9ITE7aWYoQXJyYXkuaXNBcnJheShlKT8oZD1lWzFdLChudWxsPT09ZHx8ZGIoZSxkKT4wKSYmKGM9ITApKTpkPWUscilpZigwIT09bCl7bGV0IHA9S3AobltzKzFdKTtuW2krMV09akMocCxzKSwwIT09cCYmKG5bcCsxXT15UihuW3ArMV0saSkpLG5bcysxXT1mdW5jdGlvbihuLHQpe3JldHVybiAxMzEwNzEmbnx0PDwxN30obltzKzFdLGkpfWVsc2UgbltpKzFdPWpDKHMsMCksMCE9PXMmJihuW3MrMV09eVIobltzKzFdLGkpKSxzPWk7ZWxzZSBuW2krMV09akMobCwwKSwwPT09cz9zPWk6bltsKzFdPXlSKG5bbCsxXSxpKSxsPWk7YyYmKG5baSsxXT1iUChuW2krMV0pKSxOSChuLGQsaSwhMCksTkgobixkLGksITEpLGZ1bmN0aW9uKG4sdCxlLGkscil7bGV0IG89cj9uLnJlc2lkdWFsQ2xhc3NlczpuLnJlc2lkdWFsU3R5bGVzO251bGwhPW8mJiJzdHJpbmciPT10eXBlb2YgdCYmZGIobyx0KT49MCYmKGVbaSsxXT12UChlW2krMV0pKX0odCxkLG4saSxvKSxhPWpDKHMsbCksbz90LmNsYXNzQmluZGluZ3M9YTp0LnN0eWxlQmluZGluZ3M9YX0ocixvLHQsZSxhLGkpfX1mdW5jdGlvbiB4UihuLHQsZSxpLHIpe2xldCBvPW51bGwsYT1lLmRpcmVjdGl2ZUVuZCxzPWUuZGlyZWN0aXZlU3R5bGluZ0xhc3Q7Zm9yKC0xPT09cz9zPWUuZGlyZWN0aXZlU3RhcnQ6cysrO3M8YSYmKG89dFtzXSxpPSRfKGksby5ob3N0QXR0cnMsciksbyE9PW4pOylzKys7cmV0dXJuIG51bGwhPT1uJiYoZS5kaXJlY3RpdmVTdHlsaW5nTGFzdD1zKSxpfWZ1bmN0aW9uICRfKG4sdCxlKXtsZXQgaT1lPzE6MixyPS0xO2lmKG51bGwhPT10KWZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKXtsZXQgYT10W29dOyJudW1iZXIiPT10eXBlb2YgYT9yPWE6cj09PWkmJihBcnJheS5pc0FycmF5KG4pfHwobj12b2lkIDA9PT1uP1tdOlsiIixuXSksbHMobixhLCEhZXx8dFsrK29dKSl9cmV0dXJuIHZvaWQgMD09PW4/bnVsbDpufWZ1bmN0aW9uIHlVKG4sdCxlKXtscyhuLHQsT2EoZSkpfWZ1bmN0aW9uIEJsZShuLHQsZSl7bGV0IGk9U3RyaW5nKHQpOyIiIT09aSYmIWkuaW5jbHVkZXMoIiAiKSYmbHMobixpLGUpfWZ1bmN0aW9uIHhVKG4sdCxlLGkscixvLGEscyl7aWYoISgzJnQudHlwZSkpcmV0dXJuO2xldCBsPW4uZGF0YSxjPWxbcysxXSxkPWZ1bmN0aW9uKG4pe3JldHVybiAxPT0oMSZuKX0oYyk/VkgobCx0LGUscixlZihjKSxhKTp2b2lkIDA7X00oZCl8fChfTShvKXx8ZnVuY3Rpb24obil7cmV0dXJuIDI9PSgyJm4pfShjKSYmKG89VkgobCxudWxsLGUscixzLGEpKSxmdW5jdGlvbihuLHQsZSxpLHIpe2lmKHQpcj9uLmFkZENsYXNzKGUsaSk6bi5yZW1vdmVDbGFzcyhlLGkpO2Vsc2V7bGV0IG89LTE9PT1pLmluZGV4T2YoIi0iKT92b2lkIDA6TnMuRGFzaENhc2U7bnVsbD09cj9uLnJlbW92ZVN0eWxlKGUsaSxvKTooInN0cmluZyI9PXR5cGVvZiByJiZyLmVuZHNXaXRoKCIhaW1wb3J0YW50IikmJihyPXIuc2xpY2UoMCwtMTApLG98PU5zLkltcG9ydGFudCksbi5zZXRTdHlsZShlLGkscixvKSl9fShpLGEsQU0oZGEoKSxlKSxyLG8pKX1mdW5jdGlvbiBWSChuLHQsZSxpLHIsbyl7bGV0IHMsYT1udWxsPT09dDtmb3IoO3I+MDspe2xldCBsPW5bcl0sYz1BcnJheS5pc0FycmF5KGwpLGQ9Yz9sWzFdOmwsdT1udWxsPT09ZCxwPWVbcisxXTtwPT09em4mJihwPXU/amk6dm9pZCAwKTtsZXQgaD11P2hSKHAsaSk6ZD09PWk/cDp2b2lkIDA7aWYoYyYmIV9NKGgpJiYoaD1oUihsLGkpKSxfTShoKSYmKHM9aCxhKSlyZXR1cm4gcztsZXQgbT1uW3IrMV07cj1hP0twKG0pOmVmKG0pfWlmKG51bGwhPT10KXtsZXQgbD1vP3QucmVzaWR1YWxDbGFzc2VzOnQucmVzaWR1YWxTdHlsZXM7bnVsbCE9bCYmKHM9aFIobCxpKSl9cmV0dXJuIHN9ZnVuY3Rpb24gX00obil7cmV0dXJuIHZvaWQgMCE9PW59ZnVuY3Rpb24gQ1Uobix0KXtyZXR1cm4gMCE9KG4uZmxhZ3MmKHQ/ODoxNikpfWZ1bmN0aW9uIFQobix0PSIiKXtsZXQgZT1aZSgpLGk9VGkoKSxyPW4rR3Isbz1pLmZpcnN0Q3JlYXRlUGFzcz9wZihpLHIsMSx0LG51bGwpOmkuZGF0YVtyXSxhPWVbcl09c2soZVt1aV0sdCk7T00oaSxlLGEsbyksYWMobywhMSl9ZnVuY3Rpb24ga3Qobil7cmV0dXJuIFZlKCIiLG4sIiIpLGt0fWZ1bmN0aW9uIFZlKG4sdCxlKXtsZXQgaT1aZSgpLHI9bWYoaSxuLHQsZSk7cmV0dXJuIHIhPT16biYmb2QoaSxkYSgpLHIpLFZlfWZ1bmN0aW9uIGx1KG4sdCxlLGkscil7bGV0IG89WmUoKSxhPWZmKG8sbix0LGUsaSxyKTtyZXR1cm4gYSE9PXpuJiZvZChvLGRhKCksYSksbHV9ZnVuY3Rpb24gR00obix0LGUsaSxyLG8sYSl7bGV0IHM9WmUoKSxsPWdmKHMsbix0LGUsaSxyLG8sYSk7cmV0dXJuIGwhPT16biYmb2QocyxkYSgpLGwpLEdNfWZ1bmN0aW9uIGJiKG4sdCxlKXtFbChscyxoYyxtZihaZSgpLG4sdCxlKSwhMCl9ZnVuY3Rpb24gd28obix0LGUpe2xldCBpPVplKCk7cmV0dXJuIHFvKGksc2YoKSx0KSYmZHMoVGkoKSxQcigpLGksbix0LGlbdWldLGUsITApLHdvfWZ1bmN0aW9uIFdNKG4sdCxlKXtsZXQgaT1aZSgpO2lmKHFvKGksc2YoKSx0KSl7bGV0IG89VGkoKSxhPVByKCk7ZHMobyxhLGksbix0LHF6KFFQKG8uZGF0YSksYSxpKSxlLCEwKX1yZXR1cm4gV019dmFyIFZwPXZvaWQgMCxvY2U9WyJlbiIsW1siYSIsInAiXSxbIkFNIiwiUE0iXSxWcF0sW1siQU0iLCJQTSJdLFZwLFZwXSxbWyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sWyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sWyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdXSxWcCxbWyJKIiwiRiIsIk0iLCJBIiwiTSIsIkoiLCJKIiwiQSIsIlMiLCJPIiwiTiIsIkQiXSxbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLFsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXV0sVnAsW1siQiIsIkEiXSxbIkJDIiwiQUQiXSxbIkJlZm9yZSBDaHJpc3QiLCJBbm5vIERvbWluaSJdXSwwLFs2LDBdLFsiTS9kL3l5IiwiTU1NIGQsIHkiLCJNTU1NIGQsIHkiLCJFRUVFLCBNTU1NIGQsIHkiXSxbImg6bW0gYSIsImg6bW06c3MgYSIsImg6bW06c3MgYSB6IiwiaDptbTpzcyBhIHp6enoiXSxbInsxfSwgezB9IixWcCwiezF9ICdhdCcgezB9IixWcF0sWyIuIiwiLCIsIjsiLCIlIiwiKyIsIi0iLCJFIiwiXHhkNyIsIlx1MjAzMCIsIlx1MjIxZSIsIk5hTiIsIjoiXSxbIiMsIyMwLiMjIyIsIiMsIyMwJSIsIlx4YTQjLCMjMC4wMCIsIiNFMCJdLCJVU0QiLCIkIiwiVVMgRG9sbGFyIix7fSwibHRyIixmdW5jdGlvbihuKXtsZXQgZT1NYXRoLmZsb29yKE1hdGguYWJzKG4pKSxpPW4udG9TdHJpbmcoKS5yZXBsYWNlKC9eW14uXSpcLj8vLCIiKS5sZW5ndGg7cmV0dXJuIDE9PT1lJiYwPT09aT8xOjV9XSxDUj17fTtmdW5jdGlvbiBGYShuKXtsZXQgdD1mdW5jdGlvbihuKXtyZXR1cm4gbi50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL18vZywiLSIpfShuKSxlPUhIKHQpO2lmKGUpcmV0dXJuIGU7bGV0IGk9dC5zcGxpdCgiLSIpWzBdO2lmKGU9SEgoaSksZSlyZXR1cm4gZTtpZigiZW4iPT09aSlyZXR1cm4gb2NlO3Rocm93IG5ldyB4dCg3MDEsITEpfWZ1bmN0aW9uIEhIKG4pe3JldHVybiBuIGluIENSfHwoQ1Jbbl09enIubmcmJnpyLm5nLmNvbW1vbiYmenIubmcuY29tbW9uLmxvY2FsZXMmJnpyLm5nLmNvbW1vbi5sb2NhbGVzW25dKSxDUltuXX12YXIgaHI9KCgpPT57cmV0dXJuKG49aHJ8fChocj17fSkpW24uTG9jYWxlSWQ9MF09IkxvY2FsZUlkIixuW24uRGF5UGVyaW9kc0Zvcm1hdD0xXT0iRGF5UGVyaW9kc0Zvcm1hdCIsbltuLkRheVBlcmlvZHNTdGFuZGFsb25lPTJdPSJEYXlQZXJpb2RzU3RhbmRhbG9uZSIsbltuLkRheXNGb3JtYXQ9M109IkRheXNGb3JtYXQiLG5bbi5EYXlzU3RhbmRhbG9uZT00XT0iRGF5c1N0YW5kYWxvbmUiLG5bbi5Nb250aHNGb3JtYXQ9NV09Ik1vbnRoc0Zvcm1hdCIsbltuLk1vbnRoc1N0YW5kYWxvbmU9Nl09Ik1vbnRoc1N0YW5kYWxvbmUiLG5bbi5FcmFzPTddPSJFcmFzIixuW24uRmlyc3REYXlPZldlZWs9OF09IkZpcnN0RGF5T2ZXZWVrIixuW24uV2Vla2VuZFJhbmdlPTldPSJXZWVrZW5kUmFuZ2UiLG5bbi5EYXRlRm9ybWF0PTEwXT0iRGF0ZUZvcm1hdCIsbltuLlRpbWVGb3JtYXQ9MTFdPSJUaW1lRm9ybWF0IixuW24uRGF0ZVRpbWVGb3JtYXQ9MTJdPSJEYXRlVGltZUZvcm1hdCIsbltuLk51bWJlclN5bWJvbHM9MTNdPSJOdW1iZXJTeW1ib2xzIixuW24uTnVtYmVyRm9ybWF0cz0xNF09Ik51bWJlckZvcm1hdHMiLG5bbi5DdXJyZW5jeUNvZGU9MTVdPSJDdXJyZW5jeUNvZGUiLG5bbi5DdXJyZW5jeVN5bWJvbD0xNl09IkN1cnJlbmN5U3ltYm9sIixuW24uQ3VycmVuY3lOYW1lPTE3XT0iQ3VycmVuY3lOYW1lIixuW24uQ3VycmVuY2llcz0xOF09IkN1cnJlbmNpZXMiLG5bbi5EaXJlY3Rpb25hbGl0eT0xOV09IkRpcmVjdGlvbmFsaXR5IixuW24uUGx1cmFsQ2FzZT0yMF09IlBsdXJhbENhc2UiLG5bbi5FeHRyYURhdGE9MjFdPSJFeHRyYURhdGEiLGhyO3ZhciBufSkoKSxzY2U9WyJ6ZXJvIiwib25lIiwidHdvIiwiZmV3IiwibWFueSJdO3ZhciBiTT0iZW4tVVMiLFZVPXttYXJrZXI6ImVsZW1lbnQifSxIVT17bWFya2VyOiJJQ1UifSx2bD0oKCk9PntyZXR1cm4obj12bHx8KHZsPXt9KSlbbi5TSElGVD0yXT0iU0hJRlQiLG5bbi5BUFBFTkRfRUFHRVJMWT0xXT0iQVBQRU5EX0VBR0VSTFkiLG5bbi5DT01NRU5UPTJdPSJDT01NRU5UIix2bDt2YXIgbn0pKCkselU9Yk07ZnVuY3Rpb24gVVUobix0LGUpe2xldCBpPXQuaW5zZXJ0QmVmb3JlSW5kZXgscj1BcnJheS5pc0FycmF5KGkpP2lbMF06aTtyZXR1cm4gbnVsbD09PXI/bnoobiwwLGUpOkxzKGVbcl0pfWZ1bmN0aW9uIGpVKG4sdCxlLGkscil7bGV0IG89dC5pbnNlcnRCZWZvcmVJbmRleDtpZihBcnJheS5pc0FycmF5KG8pKXtsZXQgYT1pLHM9bnVsbDtpZigzJnQudHlwZXx8KHM9YSxhPXIpLG51bGwhPT1hJiYtMT09PXQuY29tcG9uZW50T2Zmc2V0KWZvcihsZXQgbD0xO2w8by5sZW5ndGg7bCsrKVlwKG4sYSxlW29bbF1dLHMsITEpfX1mdW5jdGlvbiBHVShuLHQpe2lmKG4ucHVzaCh0KSxuLmxlbmd0aD4xKWZvcihsZXQgZT1uLmxlbmd0aC0yO2U+PTA7ZS0tKXtsZXQgaT1uW2VdO1dVKGkpfHxwY2UoaSx0KSYmbnVsbD09PWhjZShpKSYmbWNlKGksdC5pbmRleCl9fWZ1bmN0aW9uIFdVKG4pe3JldHVybiEoNjQmbi50eXBlKX1mdW5jdGlvbiBwY2Uobix0KXtyZXR1cm4gV1UodCl8fG4uaW5kZXg+dC5pbmRleH1mdW5jdGlvbiBoY2Uobil7bGV0IHQ9bi5pbnNlcnRCZWZvcmVJbmRleDtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90WzBdOnR9ZnVuY3Rpb24gbWNlKG4sdCl7bGV0IGU9bi5pbnNlcnRCZWZvcmVJbmRleDtBcnJheS5pc0FycmF5KGUpP2VbMF09dDoocnooVVUsalUpLG4uaW5zZXJ0QmVmb3JlSW5kZXg9dCl9ZnVuY3Rpb24gVV8obix0KXtsZXQgZT1uLmRhdGFbdF07cmV0dXJuIG51bGw9PT1lfHwic3RyaW5nIj09dHlwZW9mIGU/bnVsbDplLmhhc093blByb3BlcnR5KCJjdXJyZW50Q2FzZUxWaWV3SW5kZXgiKT9lOmUudmFsdWV9ZnVuY3Rpb24gX2NlKG4sdCxlKXtsZXQgaT1fayhuLGUsNjQsbnVsbCxudWxsKTtyZXR1cm4gR1UodCxpKSxpfWZ1bmN0aW9uIHFNKG4sdCl7bGV0IGU9dFtuLmN1cnJlbnRDYXNlTFZpZXdJbmRleF07cmV0dXJuIG51bGw9PT1lP2U6ZTwwP35lOmV9ZnVuY3Rpb24gYmNlKG4pe3JldHVybiBuPj4+MTd9ZnVuY3Rpb24gdmNlKG4pe3JldHVybigxMzEwNzAmbik+Pj4xfXZhciBlYj0wLGpfPTA7ZnVuY3Rpb24gcVUobix0LGUsaSl7bGV0IGEscj1lW3VpXSxvPW51bGw7Zm9yKGxldCBzPTA7czx0Lmxlbmd0aDtzKyspe2xldCBsPXRbc107aWYoInN0cmluZyI9PXR5cGVvZiBsKXtsZXQgYz10Wysrc107bnVsbD09PWVbY10mJihlW2NdPXNrKHIsbCkpfWVsc2UgaWYoIm51bWJlciI9PXR5cGVvZiBsKXN3aXRjaCgxJmwpe2Nhc2UgMDpsZXQgZCx1LGM9YmNlKGwpO2lmKG51bGw9PT1vJiYobz1jLGE9a00ocixpKSksYz09PW8/KGQ9aSx1PWEpOihkPW51bGwsdT1McyhlW2NdKSksbnVsbCE9PXUpe2xldCBfPXZjZShsKTtZcChyLHUsZVtfXSxkLCExKTtsZXQgeT1VXyhuLF8pO2lmKG51bGwhPT15JiYib2JqZWN0Ij09dHlwZW9mIHkpe2xldCB4PXFNKHksZSk7bnVsbCE9PXgmJnFVKG4seS5jcmVhdGVbeF0sZSxlW3kuYW5jaG9ySWR4XSl9fWJyZWFrO2Nhc2UgMTpsZXQgaD10Wysrc10sbT10Wysrc107d2socixBTShsPj4+MSxlKSxudWxsLG51bGwsaCxtLG51bGwpfWVsc2Ugc3dpdGNoKGwpe2Nhc2UgSFU6bGV0IGM9dFsrK3NdLGQ9dFsrK3NdO251bGw9PT1lW2RdJiZzYyhlW2RdPWFhZShyLGMpLGUpO2JyZWFrO2Nhc2UgVlU6bGV0IHU9dFsrK3NdLHA9dFsrK3NdO251bGw9PT1lW3BdJiZzYyhlW3BdPWxrKHIsdSxudWxsKSxlKX19fWZ1bmN0aW9uIFhVKG4sdCxlLGkscil7Zm9yKGxldCBvPTA7bzxlLmxlbmd0aDtvKyspe2xldCBhPWVbb10scz1lWysrb107aWYoYSZyKXtsZXQgbD0iIjtmb3IobGV0IGM9bysxO2M8PW8rcztjKyspe2xldCBkPWVbY107aWYoInN0cmluZyI9PXR5cGVvZiBkKWwrPWQ7ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIGQpaWYoZDwwKWwrPWpuKHRbaS1kXSk7ZWxzZXtsZXQgdT1kPj4+Mjtzd2l0Y2goMyZkKXtjYXNlIDE6bGV0IHA9ZVsrK2NdLGg9ZVsrK2NdLG09bi5kYXRhW3VdOyJzdHJpbmciPT10eXBlb2YgbT93ayh0W3VpXSx0W3VdLG51bGwsbSxwLGwsaCk6ZHMobixtLHQscCxsLHRbdWldLGgsITEpO2JyZWFrO2Nhc2UgMDpsZXQgXz10W3VdO251bGwhPT1fJiZRNSh0W3VpXSxfLGwpO2JyZWFrO2Nhc2UgMjp3Y2UobixVXyhuLHUpLHQsbCk7YnJlYWs7Y2FzZSAzOnpIKG4sVV8obix1KSxpLHQpfX19fWVsc2V7bGV0IGw9ZVtvKzFdO2lmKGw+MCYmMz09KDMmbCkpe2xldCBkPVVfKG4sbD4+PjIpO3RbZC5jdXJyZW50Q2FzZUxWaWV3SW5kZXhdPDAmJnpIKG4sZCxpLHQpfX1vKz1zfX1mdW5jdGlvbiB6SChuLHQsZSxpKXtsZXQgcj1pW3QuY3VycmVudENhc2VMVmlld0luZGV4XTtpZihudWxsIT09cil7bGV0IG89ZWI7cjwwJiYocj1pW3QuY3VycmVudENhc2VMVmlld0luZGV4XT1+cixvPS0xKSxYVShuLGksdC51cGRhdGVbcl0sZSxvKX19ZnVuY3Rpb24gd2NlKG4sdCxlLGkpe2xldCByPWZ1bmN0aW9uKG4sdCl7bGV0IGU9bi5jYXNlcy5pbmRleE9mKHQpO2lmKC0xPT09ZSlzd2l0Y2gobi50eXBlKXtjYXNlIDE6e2xldCBpPWZ1bmN0aW9uKG4sdCl7bGV0IGU9ZnVuY3Rpb24obil7cmV0dXJuIEZhKG4pW2hyLlBsdXJhbENhc2VdfSh0KShwYXJzZUludChuLDEwKSksaT1zY2VbZV07cmV0dXJuIHZvaWQgMCE9PWk/aToib3RoZXIifSh0LHpVKTtlPW4uY2FzZXMuaW5kZXhPZihpKSwtMT09PWUmJiJvdGhlciIhPT1pJiYoZT1uLmNhc2VzLmluZGV4T2YoIm90aGVyIikpO2JyZWFrfWNhc2UgMDplPW4uY2FzZXMuaW5kZXhPZigib3RoZXIiKX1yZXR1cm4tMT09PWU/bnVsbDplfSh0LGkpO2lmKHFNKHQsZSkhPT1yJiYoWVUobix0LGUpLGVbdC5jdXJyZW50Q2FzZUxWaWV3SW5kZXhdPW51bGw9PT1yP251bGw6fnIsbnVsbCE9PXIpKXtsZXQgYT1lW3QuYW5jaG9ySWR4XTthJiZxVShuLHQuY3JlYXRlW3JdLGUsYSl9fWZ1bmN0aW9uIFlVKG4sdCxlKXtsZXQgaT1xTSh0LGUpO2lmKG51bGwhPT1pKXtsZXQgcj10LnJlbW92ZVtpXTtmb3IobGV0IG89MDtvPHIubGVuZ3RoO28rKyl7bGV0IGE9cltvXTtpZihhPjApe2xldCBzPUFNKGEsZSk7bnVsbCE9PXMmJmNrKGVbdWldLHMpfWVsc2UgWVUobixVXyhuLH5hKSxlKX19fWZ1bmN0aW9uIEVjZSgpe2xldCBlLGksbj1bXSx0PS0xO2Z1bmN0aW9uIG8ocyxsKXt0PTA7bGV0IGM9cU0ocyxsKTtpPW51bGwhPT1jP3MucmVtb3ZlW2NdOmppfWZ1bmN0aW9uIGEoKXtpZih0PGkubGVuZ3RoKXtsZXQgcz1pW3QrK107cmV0dXJuIHM+MD9lW3NdOihuLnB1c2godCxpKSxvKGVbRm5dLmRhdGFbfnNdLGUpLGEoKSl9cmV0dXJuIDA9PT1uLmxlbmd0aD9udWxsOihpPW4ucG9wKCksdD1uLnBvcCgpLGEoKSl9cmV0dXJuIGZ1bmN0aW9uKHMsbCl7Zm9yKGU9bDtuLmxlbmd0aDspbi5wb3AoKTtyZXR1cm4gbyhzLnZhbHVlLGwpLGF9fXZhciB2TT0vXHVmZmZkKFxkKyk6P1xkKlx1ZmZmZC9naSxUY2U9Lyh7XHMqXHVmZmZkXGQrOj9cZCpcdWZmZmRccyosXHMqXFN7Nn1ccyosW1xzXFNdKn0pL2dpLERjZT0vXHVmZmZkKFxkKylcdWZmZmQvLFFVPS9eXHMqKFx1ZmZmZFxkKzo/XGQqXHVmZmZkKVxzKixccyooc2VsZWN0fHBsdXJhbClccyosLyxHXz0iXHVmZmZkIixJY2U9L1x1ZmZmZFwvP1wqKFxkKzpcZCspXHVmZmZkL2dpLEFjZT0vXHVmZmZkKFwvP1sjKl1cZCspOj9cZCpcdWZmZmQvZ2ksUmNlPS9cdUU1MDAvZztmdW5jdGlvbiBaVShuLHQsZSxpLHIsbyxhKXtsZXQgcz1mYihuLGksMSxudWxsKSxsPXM8PHZsLlNISUZULGM9Wl8oKTt0PT09YyYmKGM9bnVsbCksbnVsbD09PWMmJihsfD12bC5BUFBFTkRfRUFHRVJMWSksYSYmKGx8PXZsLkNPTU1FTlQsZnVuY3Rpb24obil7dm9pZCAwPT09R1ImJihHUj1uKCkpfShFY2UpKSxyLnB1c2gobCxudWxsPT09bz8iIjpvKTtsZXQgZD1fayhuLHMsYT8zMjoxLG51bGw9PT1vPyIiOm8sbnVsbCk7R1UoZSxkKTtsZXQgdT1kLmluZGV4O3JldHVybiBhYyhkLCExKSxudWxsIT09YyYmdCE9PWMmJmZ1bmN0aW9uKG4sdCl7bGV0IGU9bi5pbnNlcnRCZWZvcmVJbmRleDtudWxsPT09ZT8ocnooVVUsalUpLGU9bi5pbnNlcnRCZWZvcmVJbmRleD1bbnVsbCx0XSk6KGZ1bmN0aW9uKG4sdCxlKXsxIT1uJiZpNSgiRXhwZWN0aW5nIGFycmF5IGhlcmUiLG4sITAsIj09Iil9KEFycmF5LmlzQXJyYXkoZSkpLGUucHVzaCh0KSl9KGMsdSksZH1mdW5jdGlvbiBPY2Uobix0LGUsaSxyLG8sYSl7bGV0IHM9YS5tYXRjaCh2TSksbD1aVShuLHQsZSxvLGkscz9udWxsOmEsITEpO3MmJldfKHIsYSxsLmluZGV4LG51bGwsMCxudWxsKX1mdW5jdGlvbiBXXyhuLHQsZSxpLHIsbyl7bGV0IGE9bi5sZW5ndGgscz1hKzE7bi5wdXNoKG51bGwsbnVsbCk7bGV0IGw9YSsyLGM9dC5zcGxpdCh2TSksZD0wO2ZvcihsZXQgdT0wO3U8Yy5sZW5ndGg7dSsrKXtsZXQgcD1jW3VdO2lmKDEmdSl7bGV0IGg9citwYXJzZUludChwLDEwKTtuLnB1c2goLTEtaCksZHw9S1UoaCl9ZWxzZSIiIT09cCYmbi5wdXNoKHApfXJldHVybiBuLnB1c2goZTw8MnwoaT8xOjApKSxpJiZuLnB1c2goaSxvKSxuW2FdPWQsbltzXT1uLmxlbmd0aC1sLGR9ZnVuY3Rpb24gTmNlKG4pe2xldCB0PTA7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspe2xldCBpPW5bZV07Im51bWJlciI9PXR5cGVvZiBpJiZpPDAmJnQrK31yZXR1cm4gdH1mdW5jdGlvbiBLVShuKXtyZXR1cm4gMTw8TWF0aC5taW4obiwzMSl9ZnVuY3Rpb24gVUgobil7bGV0IHQsbyxlPSIiLGk9MCxyPSExO2Zvcig7bnVsbCE9PSh0PUljZS5leGVjKG4pKTspcj90WzBdPT09YCR7R199Lyoke299JHtHX31gJiYoaT10LmluZGV4LHI9ITEpOihlKz1uLnN1YnN0cmluZyhpLHQuaW5kZXgrdFswXS5sZW5ndGgpLG89dFsxXSxyPSEwKTtyZXR1cm4gZSs9bi5zbGljZShpKSxlfWZ1bmN0aW9uIEpVKG4sdCxlLGkscixvKXtsZXQgYT0wLHM9e3R5cGU6ci50eXBlLGN1cnJlbnRDYXNlTFZpZXdJbmRleDpmYihuLHQsMSxudWxsKSxhbmNob3JJZHg6byxjYXNlczpbXSxjcmVhdGU6W10scmVtb3ZlOltdLHVwZGF0ZTpbXX07KGZ1bmN0aW9uKG4sdCxlKXtuLnB1c2goS1UodC5tYWluQmluZGluZyksMiwtMS10Lm1haW5CaW5kaW5nLGU8PDJ8Mil9KShlLHIsbyksZnVuY3Rpb24obix0LGUpe2xldCBpPW4uZGF0YVt0XTtudWxsPT09aT9uLmRhdGFbdF09ZTppLnZhbHVlPWV9KG4sbyxzKTtsZXQgbD1yLnZhbHVlcztmb3IobGV0IGM9MDtjPGwubGVuZ3RoO2MrKyl7bGV0IGQ9bFtjXSx1PVtdO2ZvcihsZXQgcD0wO3A8ZC5sZW5ndGg7cCsrKXtsZXQgaD1kW3BdO2lmKCJzdHJpbmciIT10eXBlb2YgaCl7bGV0IG09dS5wdXNoKGgpLTE7ZFtwXT1gXHgzYyEtLVx1ZmZmZCR7bX1cdWZmZmQtLVx4M2VgfX1hPUhjZShuLHMsdCxlLGksci5jYXNlc1tjXSxkLmpvaW4oIiIpLHUpfGF9YSYmZnVuY3Rpb24obix0LGUpe24ucHVzaCh0LDEsZTw8MnwzKX0oZSxhLG8pfWZ1bmN0aW9uIFZjZShuKXtsZXQgdD1bXSxlPVtdLGk9MSxyPTAsbz15UChuPW4ucmVwbGFjZShRVSxmdW5jdGlvbihhLHMsbCl7cmV0dXJuIGk9InNlbGVjdCI9PT1sPzA6MSxyPXBhcnNlSW50KHMuc2xpY2UoMSksMTApLCIifSkpO2ZvcihsZXQgYT0wO2E8by5sZW5ndGg7KXtsZXQgcz1vW2ErK10udHJpbSgpOzE9PT1pJiYocz1zLnJlcGxhY2UoL1xzKig/Oj0pPyhcdyspXHMqLywiJDEiKSkscy5sZW5ndGgmJnQucHVzaChzKTtsZXQgbD15UChvW2ErK10pO3QubGVuZ3RoPmUubGVuZ3RoJiZlLnB1c2gobCl9cmV0dXJue3R5cGU6aSxtYWluQmluZGluZzpyLGNhc2VzOnQsdmFsdWVzOmV9fWZ1bmN0aW9uIHlQKG4pe2lmKCFuKXJldHVybltdO2xldCBvLHQ9MCxlPVtdLGk9W10scj0vW3t9XS9nO2ZvcihyLmxhc3RJbmRleD0wO289ci5leGVjKG4pOyl7bGV0IHM9by5pbmRleDtpZigifSI9PW9bMF0pe2lmKGUucG9wKCksMD09ZS5sZW5ndGgpe2xldCBsPW4uc3Vic3RyaW5nKHQscyk7UVUudGVzdChsKT9pLnB1c2goVmNlKGwpKTppLnB1c2gobCksdD1zKzF9fWVsc2V7aWYoMD09ZS5sZW5ndGgpe2xldCBsPW4uc3Vic3RyaW5nKHQscyk7aS5wdXNoKGwpLHQ9cysxfWUucHVzaCgieyIpfX1sZXQgYT1uLnN1YnN0cmluZyh0KTtyZXR1cm4gaS5wdXNoKGEpLGl9ZnVuY3Rpb24gSGNlKG4sdCxlLGkscixvLGEscyl7bGV0IGw9W10sYz1bXSxkPVtdO3QuY2FzZXMucHVzaChvKSx0LmNyZWF0ZS5wdXNoKGwpLHQucmVtb3ZlLnB1c2goYyksdC51cGRhdGUucHVzaChkKTtsZXQgcD1feih1eigpKS5nZXRJbmVydEJvZHlFbGVtZW50KGEpLGg9clAocCl8fHA7cmV0dXJuIGg/JFUobix0LGUsaSxsLGMsZCxoLHIscywwKTowfWZ1bmN0aW9uICRVKG4sdCxlLGkscixvLGEscyxsLGMsZCl7bGV0IHU9MCxwPXMuZmlyc3RDaGlsZDtmb3IoO3A7KXtsZXQgaD1mYihuLGUsMSxudWxsKTtzd2l0Y2gocC5ub2RlVHlwZSl7Y2FzZSBOb2RlLkVMRU1FTlRfTk9ERTpsZXQgbT1wLF89bS50YWdOYW1lLnRvTG93ZXJDYXNlKCk7aWYoblAuaGFzT3duUHJvcGVydHkoXykpe01SKHIsVlUsXyxsLGgpLG4uZGF0YVtoXT1fO2xldCBSPW0uYXR0cmlidXRlcztmb3IobGV0IEk9MDtJPFIubGVuZ3RoO0krKyl7bGV0IEI9Ui5pdGVtKEkpLGVlPUIubmFtZS50b0xvd2VyQ2FzZSgpO0IudmFsdWUubWF0Y2godk0pP3h6Lmhhc093blByb3BlcnR5KGVlKSYmV18oYSxCLnZhbHVlLGgsQi5uYW1lLDAscGtbZWVdP3BiOm51bGwpOkdjZShyLGgsQil9dT0kVShuLHQsZSxpLHIsbyxhLHAsaCxjLGQrMSl8dSxqSChvLGgsZCl9YnJlYWs7Y2FzZSBOb2RlLlRFWFRfTk9ERTpsZXQgTT1wLnRleHRDb250ZW50fHwiIix5PU0ubWF0Y2godk0pO01SKHIsbnVsbCx5PyIiOk0sbCxoKSxqSChvLGgsZCkseSYmKHU9V18oYSxNLGgsbnVsbCwwLG51bGwpfHUpO2JyZWFrO2Nhc2UgTm9kZS5DT01NRU5UX05PREU6bGV0IHg9RGNlLmV4ZWMocC50ZXh0Q29udGVudHx8IiIpO2lmKHgpe2xldCBJPWNbcGFyc2VJbnQoeFsxXSwxMCldO01SKHIsSFUsIiIsbCxoKSxKVShuLGUsaSxsLEksaCksemNlKG8saCxkKX19cD1wLm5leHRTaWJsaW5nfXJldHVybiB1fWZ1bmN0aW9uIGpIKG4sdCxlKXswPT09ZSYmbi5wdXNoKHQpfWZ1bmN0aW9uIHpjZShuLHQsZSl7MD09PWUmJihuLnB1c2gofnQpLG4ucHVzaCh0KSl9ZnVuY3Rpb24gTVIobix0LGUsaSxyKXtudWxsIT09dCYmbi5wdXNoKHQpLG4ucHVzaChlLHIsZnVuY3Rpb24obix0LGUpe3JldHVybiAwfHQ8PDE3fGU8PDF9KDAsaSxyKSl9ZnVuY3Rpb24gR2NlKG4sdCxlKXtuLnB1c2godDw8MXwxLGUubmFtZSxlLnZhbHVlKX12YXIgR0g9MCxXY2U9L1xbKFx1ZmZmZC4rP1x1ZmZmZD8pXF0vLHFjZT0vXFsoXHVmZmZkLis/XHVmZmZkPylcXXwoXHVmZmZkXC8/XCpcZCs6XGQrXHVmZmZkKS9nLFhjZT0vKHtccyopKFZBUl8oUExVUkFMfFNFTEVDVCkoX1xkKyk/KShccyosKS9nLFljZT0veyhbQS1aMC05X10rKX0vZyxRY2U9L1x1ZmZmZEkxOE5fRVhQXyhJQ1UoX1xkKyk/KVx1ZmZmZC9nLFpjZT0vXC9cKi8sS2NlPS9cZCtcOihcZCspLztmdW5jdGlvbiBlaihuLHQsZT0tMSl7bGV0IGk9VGkoKSxyPVplKCksbz1HcituLGE9bnUoaS5jb25zdHMsdCkscz1aXygpO2kuZmlyc3RDcmVhdGVQYXNzJiZmdW5jdGlvbihuLHQsZSxpLHIsbyl7bGV0IGE9Wl8oKSxzPVtdLGw9W10sYz1bW11dO3I9ZnVuY3Rpb24obix0KXtpZihmdW5jdGlvbihuKXtyZXR1cm4tMT09PW59KHQpKXJldHVybiBVSChuKTt7bGV0IGU9bi5pbmRleE9mKGA6JHt0fSR7R199YCkrMit0LnRvU3RyaW5nKCkubGVuZ3RoLGk9bi5zZWFyY2gobmV3IFJlZ0V4cChgJHtHX31cXC9cXCpcXGQrOiR7dH0ke0dffWApKTtyZXR1cm4gVUgobi5zdWJzdHJpbmcoZSxpKSl9fShyLG8pO2xldCBkPWZ1bmN0aW9uKG4pe3JldHVybiBuLnJlcGxhY2UoUmNlLCIgIil9KHIpLnNwbGl0KEFjZSk7Zm9yKGxldCB1PTA7dTxkLmxlbmd0aDt1Kyspe2xldCBwPWRbdV07aWYoMD09KDEmdSkpe2xldCBoPXlQKHApO2ZvcihsZXQgbT0wO208aC5sZW5ndGg7bSsrKXtsZXQgXz1oW21dO2lmKDA9PSgxJm0pKSIiIT09XyYmT2NlKG4sYSxjWzBdLHMsbCxlLF8pO2Vsc2V7bGV0IE09XztpZigib2JqZWN0IiE9dHlwZW9mIE0pdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcGFyc2UgSUNVIGV4cHJlc3Npb24gaW4gIiR7cn0iIG1lc3NhZ2UuYCk7SlUobixlLGwsdCxNLFpVKG4sYSxjWzBdLGUscywiIiwhMCkuaW5kZXgpfX19ZWxzZXtsZXQgaD00Nz09PXAuY2hhckNvZGVBdCgwKSxfPShwLmNoYXJDb2RlQXQoaD8xOjApLEdyK051bWJlci5wYXJzZUludChwLnN1YnN0cmluZyhoPzI6MSkpKTtpZihoKWMuc2hpZnQoKSxhYyhaXygpLCExKTtlbHNle2xldCBNPV9jZShuLGNbMF0sXyk7Yy51bnNoaWZ0KFtdKSxhYyhNLCEwKX19fW4uZGF0YVtpXT17Y3JlYXRlOnMsdXBkYXRlOmx9fShpLG51bGw9PT1zPzA6cy5pbmRleCxyLG8sYSxlKTtsZXQgbD1pLmRhdGFbb10sZD0kNShpLHM9PT1yW0FhXT9udWxsOnMscik7KGZ1bmN0aW9uKG4sdCxlLGkpe2xldCByPW5bdWldO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKXtsZXQgYT10W28rK10scz10W29dLGM9KGEmdmwuQVBQRU5EX0VBR0VSTFkpPT09dmwuQVBQRU5EX0VBR0VSTFksZD1hPj4+dmwuU0hJRlQsdT1uW2RdO251bGw9PT11JiYodT1uW2RdPShhJnZsLkNPTU1FTlQpPT09dmwuQ09NTUVOVD9yLmNyZWF0ZUNvbW1lbnQocyk6c2socixzKSksYyYmbnVsbCE9PWUmJllwKHIsZSx1LGksITEpfX0pKHIsbC5jcmVhdGUsZCxzJiY4JnMudHlwZT9yW3MuaW5kZXhdOm51bGwpLE01KCEwKX1mdW5jdGlvbiB0aigpe001KCExKX1mdW5jdGlvbiBYTShuLHQsZSl7ZWoobix0LGUpLHRqKCl9ZnVuY3Rpb24gdmIobil7cmV0dXJuIGZ1bmN0aW9uKG4pe24mJihlYnw9MTw8TWF0aC5taW4oal8sMzEpKSxqXysrfShxbyhaZSgpLHNmKCksbikpLHZifWZ1bmN0aW9uIFlNKG4peyFmdW5jdGlvbihuLHQsZSl7aWYoal8+MCl7bGV0IGk9bi5kYXRhW2VdO1hVKG4sdCxBcnJheS5pc0FycmF5KGkpP2k6aS51cGRhdGUsdGQoKS1qXy0xLGViKX1lYj0wLGpfPTB9KFRpKCksWmUoKSxuK0dyKX1mdW5jdGlvbiBRTShuLHQ9e30pe3JldHVybiBmdW5jdGlvbihuLHQ9e30pe2xldCBlPW47aWYoV2NlLnRlc3Qobikpe2xldCBpPXt9LHI9W0dIXTtlPWUucmVwbGFjZShxY2UsKG8sYSxzKT0+e2xldCBsPWF8fHMsYz1pW2xdfHxbXTtpZihjLmxlbmd0aHx8KGwuc3BsaXQoInwiKS5mb3JFYWNoKF89PntsZXQgTT1fLm1hdGNoKEtjZSkseT1NP3BhcnNlSW50KE1bMV0sMTApOkdILHg9WmNlLnRlc3QoXyk7Yy5wdXNoKFt5LHgsX10pfSksaVtsXT1jKSwhYy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBpMThuIHBvc3Rwcm9jZXNzOiB1bm1hdGNoZWQgcGxhY2Vob2xkZXIgLSAke2x9YCk7bGV0IGQ9cltyLmxlbmd0aC0xXSx1PTA7Zm9yKGxldCBfPTA7XzxjLmxlbmd0aDtfKyspaWYoY1tfXVswXT09PWQpe3U9XzticmVha31sZXRbcCxoLG1dPWNbdV07cmV0dXJuIGg/ci5wb3AoKTpkIT09cCYmci5wdXNoKHApLGMuc3BsaWNlKHUsMSksbX0pfXJldHVybiBPYmplY3Qua2V5cyh0KS5sZW5ndGgmJihlPWUucmVwbGFjZShYY2UsKGkscixvLGEscyxsKT0+dC5oYXNPd25Qcm9wZXJ0eShvKT9gJHtyfSR7dFtvXX0ke2x9YDppKSxlPWUucmVwbGFjZShZY2UsKGkscik9PnQuaGFzT3duUHJvcGVydHkocik/dFtyXTppKSxlPWUucmVwbGFjZShRY2UsKGkscik9PntpZih0Lmhhc093blByb3BlcnR5KHIpKXtsZXQgbz10W3JdO2lmKCFvLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYGkxOG4gcG9zdHByb2Nlc3M6IHVubWF0Y2hlZCBJQ1UgLSAke2l9IHdpdGgga2V5OiAke3J9YCk7cmV0dXJuIG8uc2hpZnQoKX1yZXR1cm4gaX0pKSxlfShuLHQpfWZ1bmN0aW9uIHhQKG4sdCxlLGkscil7aWYobj1BaShuKSxBcnJheS5pc0FycmF5KG4pKWZvcihsZXQgbz0wO288bi5sZW5ndGg7bysrKXhQKG5bb10sdCxlLGkscik7ZWxzZXtsZXQgbz1UaSgpLGE9WmUoKSxzPSRtKG4pP246QWkobi5wcm92aWRlKSxsPUR6KG4pLGM9TG8oKSxkPTEwNDg1NzUmYy5wcm92aWRlckluZGV4ZXMsdT1jLmRpcmVjdGl2ZVN0YXJ0LHA9Yy5wcm92aWRlckluZGV4ZXM+PjIwO2lmKCRtKG4pfHwhbi5tdWx0aSl7bGV0IGg9bmV3IHFwKGwscixDKSxtPVNSKHMsdCxyP2Q6ZCtwLHUpOy0xPT09bT8oelIoY00oYyxhKSxvLHMpLHdSKG8sbix0Lmxlbmd0aCksdC5wdXNoKHMpLGMuZGlyZWN0aXZlU3RhcnQrKyxjLmRpcmVjdGl2ZUVuZCsrLHImJihjLnByb3ZpZGVySW5kZXhlcys9MTA0ODU3NiksZS5wdXNoKGgpLGEucHVzaChoKSk6KGVbbV09aCxhW21dPWgpfWVsc2V7bGV0IGg9U1Iocyx0LGQrcCx1KSxtPVNSKHMsdCxkLGQrcCksTT1tPj0wJiZlW21dO2lmKHImJiFNfHwhciYmIShoPj0wJiZlW2hdKSl7elIoY00oYyxhKSxvLHMpO2xldCB5PWZ1bmN0aW9uKG4sdCxlLGkscil7bGV0IG89bmV3IHFwKG4sZSxDKTtyZXR1cm4gby5tdWx0aT1bXSxvLmluZGV4PXQsby5jb21wb25lbnRQcm92aWRlcnM9MCxuaihvLHIsaSYmIWUpLG99KHI/bmRlOnRkZSxlLmxlbmd0aCxyLGksbCk7IXImJk0mJihlW21dLnByb3ZpZGVyRmFjdG9yeT15KSx3UihvLG4sdC5sZW5ndGgsMCksdC5wdXNoKHMpLGMuZGlyZWN0aXZlU3RhcnQrKyxjLmRpcmVjdGl2ZUVuZCsrLHImJihjLnByb3ZpZGVySW5kZXhlcys9MTA0ODU3NiksZS5wdXNoKHkpLGEucHVzaCh5KX1lbHNlIHdSKG8sbixoPi0xP2g6bSxuaihlW3I/bTpoXSxsLCFyJiZpKSk7IXImJmkmJk0mJmVbbV0uY29tcG9uZW50UHJvdmlkZXJzKyt9fX1mdW5jdGlvbiB3UihuLHQsZSxpKXtsZXQgcj0kbSh0KSxvPWZ1bmN0aW9uKG4pe3JldHVybiEhbi51c2VDbGFzc30odCk7aWYocnx8byl7bGV0IGw9KG8/QWkodC51c2VDbGFzcyk6dCkucHJvdG90eXBlLm5nT25EZXN0cm95O2lmKGwpe2xldCBjPW4uZGVzdHJveUhvb2tzfHwobi5kZXN0cm95SG9va3M9W10pO2lmKCFyJiZ0Lm11bHRpKXtsZXQgZD1jLmluZGV4T2YoZSk7LTE9PT1kP2MucHVzaChlLFtpLGxdKTpjW2QrMV0ucHVzaChpLGwpfWVsc2UgYy5wdXNoKGUsbCl9fX1mdW5jdGlvbiBuaihuLHQsZSl7cmV0dXJuIGUmJm4uY29tcG9uZW50UHJvdmlkZXJzKyssbi5tdWx0aS5wdXNoKHQpLTF9ZnVuY3Rpb24gU1Iobix0LGUsaSl7Zm9yKGxldCByPWU7cjxpO3IrKylpZih0W3JdPT09bilyZXR1cm4gcjtyZXR1cm4tMX1mdW5jdGlvbiB0ZGUobix0LGUsaSl7cmV0dXJuIENQKHRoaXMubXVsdGksW10pfWZ1bmN0aW9uIG5kZShuLHQsZSxpKXtsZXQgbyxyPXRoaXMubXVsdGk7aWYodGhpcy5wcm92aWRlckZhY3Rvcnkpe2xldCBhPXRoaXMucHJvdmlkZXJGYWN0b3J5LmNvbXBvbmVudFByb3ZpZGVycyxzPVhwKGUsZVtGbl0sdGhpcy5wcm92aWRlckZhY3RvcnkuaW5kZXgsaSk7bz1zLnNsaWNlKDAsYSksQ1AocixvKTtmb3IobGV0IGw9YTtsPHMubGVuZ3RoO2wrKylvLnB1c2goc1tsXSl9ZWxzZSBvPVtdLENQKHIsbyk7cmV0dXJuIG99ZnVuY3Rpb24gQ1Aobix0KXtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKyl0LnB1c2goKDAsbltlXSkoKSk7cmV0dXJuIHR9ZnVuY3Rpb24gVnQobix0PVtdKXtyZXR1cm4gZT0+e2UucHJvdmlkZXJzUmVzb2x2ZXI9KGkscik9PmZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1UaSgpO2lmKGkuZmlyc3RDcmVhdGVQYXNzKXtsZXQgcj1DbChuKTt4UChlLGkuZGF0YSxpLmJsdWVwcmludCxyLCEwKSx4UCh0LGkuZGF0YSxpLmJsdWVwcmludCxyLCExKX19KGkscj9yKG4pOm4sdCl9fXZhciBpdT1jbGFzc3t9LE1QPWNsYXNze30sd1A9Y2xhc3MgZXh0ZW5kcyBpdXtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCksdGhpcy5fcGFyZW50PWUsdGhpcy5fYm9vdHN0cmFwQ29tcG9uZW50cz1bXSx0aGlzLmRlc3Ryb3lDYnM9W10sdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9bmV3IGZNKHRoaXMpO2xldCBpPVptKHQpO3RoaXMuX2Jvb3RzdHJhcENvbXBvbmVudHM9UUMoaS5ib290c3RyYXApLHRoaXMuX3IzSW5qZWN0b3I9RnoodCxlLFt7cHJvdmlkZTppdSx1c2VWYWx1ZTp0aGlzfSx7cHJvdmlkZTpobyx1c2VWYWx1ZTp0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcn1dLHBvKHQpLG5ldyBTZXQoWyJlbnZpcm9ubWVudCJdKSksdGhpcy5fcjNJbmplY3Rvci5yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKSx0aGlzLmluc3RhbmNlPXRoaXMuX3IzSW5qZWN0b3IuZ2V0KHQpfWdldCBpbmplY3Rvcigpe3JldHVybiB0aGlzLl9yM0luamVjdG9yfWRlc3Ryb3koKXtsZXQgdD10aGlzLl9yM0luamVjdG9yOyF0LmRlc3Ryb3llZCYmdC5kZXN0cm95KCksdGhpcy5kZXN0cm95Q2JzLmZvckVhY2goZT0+ZSgpKSx0aGlzLmRlc3Ryb3lDYnM9bnVsbH1vbkRlc3Ryb3kodCl7dGhpcy5kZXN0cm95Q2JzLnB1c2godCl9fSxTUD1jbGFzcyBleHRlbmRzIE1Qe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5tb2R1bGVUeXBlPXR9Y3JlYXRlKHQpe3JldHVybiBuZXcgd1AodGhpcy5tb2R1bGVUeXBlLHQpfX0sRVA9Y2xhc3MgZXh0ZW5kcyBpdXtjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoKSx0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1uZXcgZk0odGhpcyksdGhpcy5pbnN0YW5jZT1udWxsO2xldCByPW5ldyBwTShbLi4udCx7cHJvdmlkZTppdSx1c2VWYWx1ZTp0aGlzfSx7cHJvdmlkZTpobyx1c2VWYWx1ZTp0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcn1dLGV8fGdrKCksaSxuZXcgU2V0KFsiZW52aXJvbm1lbnQiXSkpO3RoaXMuaW5qZWN0b3I9cixyLnJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygpfWRlc3Ryb3koKXt0aGlzLmluamVjdG9yLmRlc3Ryb3koKX1vbkRlc3Ryb3kodCl7dGhpcy5pbmplY3Rvci5vbkRlc3Ryb3kodCl9fSxvZGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9pbmplY3Rvcj1lLHRoaXMuY2FjaGVkSW5qZWN0b3JzPW5ldyBNYXB9Z2V0T3JDcmVhdGVTdGFuZGFsb25lSW5qZWN0b3IoZSl7aWYoIWUuc3RhbmRhbG9uZSlyZXR1cm4gbnVsbDtpZighdGhpcy5jYWNoZWRJbmplY3RvcnMuaGFzKGUuaWQpKXtsZXQgaT1TeigwLGUudHlwZSkscj1pLmxlbmd0aD4wP2Z1bmN0aW9uKG4sdCxlPW51bGwpe3JldHVybiBuZXcgRVAobix0LGUpLmluamVjdG9yfShbaV0sdGhpcy5faW5qZWN0b3IsYFN0YW5kYWxvbmVbJHtlLnR5cGUubmFtZX1dYCk6bnVsbDt0aGlzLmNhY2hlZEluamVjdG9ycy5zZXQoZS5pZCxyKX1yZXR1cm4gdGhpcy5jYWNoZWRJbmplY3RvcnMuZ2V0KGUuaWQpfW5nT25EZXN0cm95KCl7dHJ5e2ZvcihsZXQgZSBvZiB0aGlzLmNhY2hlZEluamVjdG9ycy52YWx1ZXMoKSludWxsIT09ZSYmZS5kZXN0cm95KCl9ZmluYWxseXt0aGlzLmNhY2hlZEluamVjdG9ycy5jbGVhcigpfX19cmV0dXJuIG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixwcm92aWRlZEluOiJlbnZpcm9ubWVudCIsZmFjdG9yeTooKT0+bmV3IG4oTyhsYykpfSksbn0pKCk7ZnVuY3Rpb24gQWsobil7bi5nZXRTdGFuZGFsb25lSW5qZWN0b3I9dD0+dC5nZXQob2RlKS5nZXRPckNyZWF0ZVN0YW5kYWxvbmVJbmplY3RvcihuKX1mdW5jdGlvbiBtYyhuLHQsZSl7bGV0IGk9Y2EoKStuLHI9WmUoKTtyZXR1cm4gcltpXT09PXpuP3BjKHIsaSxlP3QuY2FsbChlKTp0KCkpOmdiKHIsaSl9ZnVuY3Rpb24gVW4obix0LGUsaSl7cmV0dXJuIGlqKFplKCksY2EoKSxuLHQsZSxpKX1mdW5jdGlvbiBTbyhuLHQsZSxpLHIpe3JldHVybiByaihaZSgpLGNhKCksbix0LGUsaSxyKX1mdW5jdGlvbiB5YihuLHQsZSxpLHIsbyl7cmV0dXJuIG9qKFplKCksY2EoKSxuLHQsZSxpLHIsbyl9ZnVuY3Rpb24gUmsobix0LGUsaSxyLG8sYSl7cmV0dXJuIGFqKFplKCksY2EoKSxuLHQsZSxpLHIsbyxhKX1mdW5jdGlvbiBQayhuLHQsZSxpLHIsbyxhLHMpe2xldCBsPWNhKCkrbixjPVplKCksZD1CcyhjLGwsZSxpLHIsbyk7cmV0dXJuIHFvKGMsbCs0LGEpfHxkP3BjKGMsbCs1LHM/dC5jYWxsKHMsZSxpLHIsbyxhKTp0KGUsaSxyLG8sYSkpOmdiKGMsbCs1KX1mdW5jdGlvbiB4YihuLHQpe2xldCBlPW5bdF07cmV0dXJuIGU9PT16bj92b2lkIDA6ZX1mdW5jdGlvbiBpaihuLHQsZSxpLHIsbyl7bGV0IGE9dCtlO3JldHVybiBxbyhuLGEscik/cGMobixhKzEsbz9pLmNhbGwobyxyKTppKHIpKTp4YihuLGErMSl9ZnVuY3Rpb24gcmoobix0LGUsaSxyLG8sYSl7bGV0IHM9dCtlO3JldHVybiBacChuLHMscixvKT9wYyhuLHMrMixhP2kuY2FsbChhLHIsbyk6aShyLG8pKTp4YihuLHMrMil9ZnVuY3Rpb24gb2oobix0LGUsaSxyLG8sYSxzKXtsZXQgbD10K2U7cmV0dXJuIHpNKG4sbCxyLG8sYSk/cGMobixsKzMscz9pLmNhbGwocyxyLG8sYSk6aShyLG8sYSkpOnhiKG4sbCszKX1mdW5jdGlvbiBhaihuLHQsZSxpLHIsbyxhLHMsbCl7bGV0IGM9dCtlO3JldHVybiBCcyhuLGMscixvLGEscyk/cGMobixjKzQsbD9pLmNhbGwobCxyLG8sYSxzKTppKHIsbyxhLHMpKTp4YihuLGMrNCl9ZnVuY3Rpb24gc2oobix0LGUsaSxyLG8pe2xldCBhPXQrZSxzPSExO2ZvcihsZXQgbD0wO2w8ci5sZW5ndGg7bCsrKXFvKG4sYSsrLHJbbF0pJiYocz0hMCk7cmV0dXJuIHM/cGMobixhLGkuYXBwbHkobyxyKSk6eGIobixhKX1mdW5jdGlvbiBVKG4sdCl7bGV0IGksZT1UaSgpLHI9bitHcjtlLmZpcnN0Q3JlYXRlUGFzcz8oaT1mdW5jdGlvbihuLHQpe2lmKHQpZm9yKGxldCBlPXQubGVuZ3RoLTE7ZT49MDtlLS0pe2xldCBpPXRbZV07aWYobj09PWkubmFtZSlyZXR1cm4gaX19KHQsZS5waXBlUmVnaXN0cnkpLGUuZGF0YVtyXT1pLGkub25EZXN0cm95JiYoZS5kZXN0cm95SG9va3M/PyhlLmRlc3Ryb3lIb29rcz1bXSkpLnB1c2gocixpLm9uRGVzdHJveSkpOmk9ZS5kYXRhW3JdO2xldCBvPWkuZmFjdG9yeXx8KGkuZmFjdG9yeT1HcChpLnR5cGUpKSxhPVBzKEMpO3RyeXtsZXQgcz1sTSghMSksbD1vKCk7cmV0dXJuIGxNKHMpLGZ1bmN0aW9uKG4sdCxlLGkpe2U+PW4uZGF0YS5sZW5ndGgmJihuLmRhdGFbZV09bnVsbCxuLmJsdWVwcmludFtlXT1udWxsKSx0W2VdPWl9KGUsWmUoKSxyLGwpLGx9ZmluYWxseXtQcyhhKX19ZnVuY3Rpb24gRyhuLHQsZSl7bGV0IGk9bitHcixyPVplKCksbz1hZihyLGkpO3JldHVybiBDYihyLGkpP2lqKHIsY2EoKSx0LG8udHJhbnNmb3JtLGUsbyk6by50cmFuc2Zvcm0oZSl9ZnVuY3Rpb24gSnAobix0LGUsaSl7bGV0IHI9bitHcixvPVplKCksYT1hZihvLHIpO3JldHVybiBDYihvLHIpP3JqKG8sY2EoKSx0LGEudHJhbnNmb3JtLGUsaSxhKTphLnRyYW5zZm9ybShlLGkpfWZ1bmN0aW9uIGtrKG4sdCxlLGkscil7bGV0IG89bitHcixhPVplKCkscz1hZihhLG8pO3JldHVybiBDYihhLG8pP29qKGEsY2EoKSx0LHMudHJhbnNmb3JtLGUsaSxyLHMpOnMudHJhbnNmb3JtKGUsaSxyKX1mdW5jdGlvbiBDYihuLHQpe3JldHVybiBuW0ZuXS5kYXRhW3RdLnB1cmV9ZnVuY3Rpb24gRVIobil7cmV0dXJuIHQ9PntzZXRUaW1lb3V0KG4sdm9pZCAwLHQpfX12YXIgRj1jbGFzcyBleHRlbmRzIEVle2NvbnN0cnVjdG9yKHQ9ITEpe3N1cGVyKCksdGhpcy5fX2lzQXN5bmM9dH1lbWl0KHQpe3N1cGVyLm5leHQodCl9c3Vic2NyaWJlKHQsZSxpKXtsZXQgcj10LG89ZXx8KCgpPT5udWxsKSxhPWk7aWYodCYmIm9iamVjdCI9PXR5cGVvZiB0KXtsZXQgbD10O3I9bC5uZXh0Py5iaW5kKGwpLG89bC5lcnJvcj8uYmluZChsKSxhPWwuY29tcGxldGU/LmJpbmQobCl9dGhpcy5fX2lzQXN5bmMmJihvPUVSKG8pLHImJihyPUVSKHIpKSxhJiYoYT1FUihhKSkpO2xldCBzPXN1cGVyLnN1YnNjcmliZSh7bmV4dDpyLGVycm9yOm8sY29tcGxldGU6YX0pO3JldHVybiB0IGluc3RhbmNlb2YgRW4mJnQuYWRkKHMpLHN9fTtmdW5jdGlvbiBoZGUoKXtyZXR1cm4gdGhpcy5fcmVzdWx0c1tTeW1ib2wuaXRlcmF0b3JdKCl9dmFyIFBhPWNsYXNze2dldCBjaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2NoYW5nZXN8fCh0aGlzLl9jaGFuZ2VzPW5ldyBGKX1jb25zdHJ1Y3Rvcih0PSExKXt0aGlzLl9lbWl0RGlzdGluY3RDaGFuZ2VzT25seT10LHRoaXMuZGlydHk9ITAsdGhpcy5fcmVzdWx0cz1bXSx0aGlzLl9jaGFuZ2VzRGV0ZWN0ZWQ9ITEsdGhpcy5fY2hhbmdlcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5maXJzdD12b2lkIDAsdGhpcy5sYXN0PXZvaWQgMDtsZXQgZT1QYS5wcm90b3R5cGU7ZVtTeW1ib2wuaXRlcmF0b3JdfHwoZVtTeW1ib2wuaXRlcmF0b3JdPWhkZSl9Z2V0KHQpe3JldHVybiB0aGlzLl9yZXN1bHRzW3RdfW1hcCh0KXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5tYXAodCl9ZmlsdGVyKHQpe3JldHVybiB0aGlzLl9yZXN1bHRzLmZpbHRlcih0KX1maW5kKHQpe3JldHVybiB0aGlzLl9yZXN1bHRzLmZpbmQodCl9cmVkdWNlKHQsZSl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMucmVkdWNlKHQsZSl9Zm9yRWFjaCh0KXt0aGlzLl9yZXN1bHRzLmZvckVhY2godCl9c29tZSh0KXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5zb21lKHQpfXRvQXJyYXkoKXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5zbGljZSgpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMudG9TdHJpbmcoKX1yZXNldCh0LGUpe2xldCBpPXRoaXM7aS5kaXJ0eT0hMTtsZXQgcj1KZCh0KTsodGhpcy5fY2hhbmdlc0RldGVjdGVkPSFmdW5jdGlvbihuLHQsZSl7aWYobi5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKyl7bGV0IHI9bltpXSxvPXRbaV07aWYoZSYmKHI9ZShyKSxvPWUobykpLG8hPT1yKXJldHVybiExfXJldHVybiEwfShpLl9yZXN1bHRzLHIsZSkpJiYoaS5fcmVzdWx0cz1yLGkubGVuZ3RoPXIubGVuZ3RoLGkubGFzdD1yW3RoaXMubGVuZ3RoLTFdLGkuZmlyc3Q9clswXSl9bm90aWZ5T25DaGFuZ2VzKCl7dGhpcy5fY2hhbmdlcyYmKHRoaXMuX2NoYW5nZXNEZXRlY3RlZHx8IXRoaXMuX2VtaXREaXN0aW5jdENoYW5nZXNPbmx5KSYmdGhpcy5fY2hhbmdlcy5lbWl0KHRoaXMpfXNldERpcnR5KCl7dGhpcy5kaXJ0eT0hMH1kZXN0cm95KCl7dGhpcy5jaGFuZ2VzLmNvbXBsZXRlKCksdGhpcy5jaGFuZ2VzLnVuc3Vic2NyaWJlKCl9fSxvaT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5fX05HX0VMRU1FTlRfSURfXz1nZGUsbn0pKCksbWRlPW9pLGZkZT1jbGFzcyBleHRlbmRzIG1kZXtjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoKSx0aGlzLl9kZWNsYXJhdGlvbkxWaWV3PXQsdGhpcy5fZGVjbGFyYXRpb25UQ29udGFpbmVyPWUsdGhpcy5lbGVtZW50UmVmPWl9Y3JlYXRlRW1iZWRkZWRWaWV3KHQsZSl7bGV0IGk9dGhpcy5fZGVjbGFyYXRpb25UQ29udGFpbmVyLnRWaWV3LHI9Qk0odGhpcy5fZGVjbGFyYXRpb25MVmlldyxpLHQsMTYsbnVsbCxpLmRlY2xUTm9kZSxudWxsLG51bGwsbnVsbCxudWxsLGV8fG51bGwpO3JbbGJdPXRoaXMuX2RlY2xhcmF0aW9uTFZpZXdbdGhpcy5fZGVjbGFyYXRpb25UQ29udGFpbmVyLmluZGV4XTtsZXQgYT10aGlzLl9kZWNsYXJhdGlvbkxWaWV3W29jXTtyZXR1cm4gbnVsbCE9PWEmJihyW29jXT1hLmNyZWF0ZUVtYmVkZGVkVmlldyhpKSksYmsoaSxyLHQpLG5ldyBRcChyKX19O2Z1bmN0aW9uIGdkZSgpe3JldHVybiBaTShMbygpLFplKCkpfWZ1bmN0aW9uIFpNKG4sdCl7cmV0dXJuIDQmbi50eXBlP25ldyBmZGUodCxuLHVmKG4sdCkpOm51bGx9dmFyIGVpPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLl9fTkdfRUxFTUVOVF9JRF9fPV9kZSxufSkoKTtmdW5jdGlvbiBfZGUoKXtyZXR1cm4gY2ooTG8oKSxaZSgpKX12YXIgYmRlPWVpLGxqPWNsYXNzIGV4dGVuZHMgYmRle2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcigpLHRoaXMuX2xDb250YWluZXI9dCx0aGlzLl9ob3N0VE5vZGU9ZSx0aGlzLl9ob3N0TFZpZXc9aX1nZXQgZWxlbWVudCgpe3JldHVybiB1Zih0aGlzLl9ob3N0VE5vZGUsdGhpcy5faG9zdExWaWV3KX1nZXQgaW5qZWN0b3IoKXtyZXR1cm4gbmV3IGpwKHRoaXMuX2hvc3RUTm9kZSx0aGlzLl9ob3N0TFZpZXcpfWdldCBwYXJlbnRJbmplY3Rvcigpe2xldCB0PSRQKHRoaXMuX2hvc3RUTm9kZSx0aGlzLl9ob3N0TFZpZXcpO2lmKFA1KHQpKXtsZXQgZT1zTSh0LHRoaXMuX2hvc3RMVmlldyksaT1hTSh0KTtyZXR1cm4gbmV3IGpwKGVbRm5dLmRhdGFbaSs4XSxlKX1yZXR1cm4gbmV3IGpwKG51bGwsdGhpcy5faG9zdExWaWV3KX1jbGVhcigpe2Zvcig7dGhpcy5sZW5ndGg+MDspdGhpcy5yZW1vdmUodGhpcy5sZW5ndGgtMSl9Z2V0KHQpe2xldCBlPVdIKHRoaXMuX2xDb250YWluZXIpO3JldHVybiBudWxsIT09ZSYmZVt0XXx8bnVsbH1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuX2xDb250YWluZXIubGVuZ3RoLUlhfWNyZWF0ZUVtYmVkZGVkVmlldyh0LGUsaSl7bGV0IHIsbzsibnVtYmVyIj09dHlwZW9mIGk/cj1pOm51bGwhPWkmJihyPWkuaW5kZXgsbz1pLmluamVjdG9yKTtsZXQgYT10LmNyZWF0ZUVtYmVkZGVkVmlldyhlfHx7fSxvKTtyZXR1cm4gdGhpcy5pbnNlcnQoYSxyKSxhfWNyZWF0ZUNvbXBvbmVudCh0LGUsaSxyLG8pe2xldCBzLGE9dCYmIUZfKHQpO2lmKGEpcz1lO2Vsc2V7bGV0IHU9ZXx8e307cz11LmluZGV4LGk9dS5pbmplY3RvcixyPXUucHJvamVjdGFibGVOb2RlcyxvPXUuZW52aXJvbm1lbnRJbmplY3Rvcnx8dS5uZ01vZHVsZVJlZn1sZXQgbD1hP3Q6bmV3IGdNKE9zKHQpKSxjPWl8fHRoaXMucGFyZW50SW5qZWN0b3I7aWYoIW8mJm51bGw9PWwubmdNb2R1bGUpe2xldCBwPShhP2M6dGhpcy5wYXJlbnRJbmplY3RvcikuZ2V0KGxjLG51bGwpO3AmJihvPXApfWxldCBkPWwuY3JlYXRlKGMscix2b2lkIDAsbyk7cmV0dXJuIHRoaXMuaW5zZXJ0KGQuaG9zdFZpZXcscyksZH1pbnNlcnQodCxlKXtsZXQgaT10Ll9sVmlldyxyPWlbRm5dO2lmKCRjKGlbanJdKSl7bGV0IGQ9dGhpcy5pbmRleE9mKHQpO2lmKC0xIT09ZCl0aGlzLmRldGFjaChkKTtlbHNle2xldCB1PWlbanJdLHA9bmV3IGxqKHUsdVtBYV0sdVtqcl0pO3AuZGV0YWNoKHAuaW5kZXhPZih0KSl9fWxldCBvPXRoaXMuX2FkanVzdEluZGV4KGUpLGE9dGhpcy5fbENvbnRhaW5lcjshZnVuY3Rpb24obix0LGUsaSl7bGV0IHI9SWEraSxvPWUubGVuZ3RoO2k+MCYmKGVbci0xXVt5bF09dCksaTxvLUlhPyh0W3lsXT1lW3JdLFU1KGUsSWEraSx0KSk6KGUucHVzaCh0KSx0W3lsXT1udWxsKSx0W2pyXT1lO2xldCBhPXRbbGJdO251bGwhPT1hJiZlIT09YSYmZnVuY3Rpb24obix0KXtsZXQgZT1uW0ttXTt0W3hsXSE9PXRbanJdW2pyXVt4bF0mJihuW3A1XT0hMCksbnVsbD09PWU/bltLbV09W3RdOmUucHVzaCh0KX0oYSx0KTtsZXQgcz10W29jXTtudWxsIT09cyYmcy5pbnNlcnRWaWV3KG4pLHRbZGldfD02NH0ocixpLGEsbyk7bGV0IHM9WFIobyxhKSxsPWlbdWldLGM9a00obCxhW0dQXSk7cmV0dXJuIG51bGwhPT1jJiZmdW5jdGlvbihuLHQsZSxpLHIsbyl7aVtvdV09cixpW0FhXT10LHViKG4saSxlLDEscixvKX0ocixhW0FhXSxsLGksYyxzKSx0LmF0dGFjaFRvVmlld0NvbnRhaW5lclJlZigpLFU1KFRSKGEpLG8sdCksdH1tb3ZlKHQsZSl7cmV0dXJuIHRoaXMuaW5zZXJ0KHQsZSl9aW5kZXhPZih0KXtsZXQgZT1XSCh0aGlzLl9sQ29udGFpbmVyKTtyZXR1cm4gbnVsbCE9PWU/ZS5pbmRleE9mKHQpOi0xfXJlbW92ZSh0KXtsZXQgZT10aGlzLl9hZGp1c3RJbmRleCh0LC0xKSxpPVdSKHRoaXMuX2xDb250YWluZXIsZSk7aSYmKGRNKFRSKHRoaXMuX2xDb250YWluZXIpLGUpLEs1KGlbRm5dLGkpKX1kZXRhY2godCl7bGV0IGU9dGhpcy5fYWRqdXN0SW5kZXgodCwtMSksaT1XUih0aGlzLl9sQ29udGFpbmVyLGUpO3JldHVybiBpJiZudWxsIT1kTShUUih0aGlzLl9sQ29udGFpbmVyKSxlKT9uZXcgUXAoaSk6bnVsbH1fYWRqdXN0SW5kZXgodCxlPTApe3JldHVybiB0Pz90aGlzLmxlbmd0aCtlfX07ZnVuY3Rpb24gV0gobil7cmV0dXJuIG5bck1dfWZ1bmN0aW9uIFRSKG4pe3JldHVybiBuW3JNXXx8KG5bck1dPVtdKX1mdW5jdGlvbiBjaihuLHQpe2xldCBlLGk9dFtuLmluZGV4XTtpZigkYyhpKSllPWk7ZWxzZXtsZXQgcjtpZig4Jm4udHlwZSlyPUxzKGkpO2Vsc2V7bGV0IG89dFt1aV07cj1vLmNyZWF0ZUNvbW1lbnQoIiIpO2xldCBhPXNzKG4sdCk7WXAobyxrTShvLGEpLHIsZnVuY3Rpb24obix0KXtyZXR1cm4gbi5uZXh0U2libGluZyh0KX0obyxhKSwhMSl9dFtuLmluZGV4XT1lPVV6KGksdCxyLG4pLEhNKHQsZSl9cmV0dXJuIG5ldyBsaihlLG4sdCl9dmFyIHRiPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMucXVlcnlMaXN0PXQsdGhpcy5tYXRjaGVzPW51bGx9Y2xvbmUoKXtyZXR1cm4gbmV3IHRiKHRoaXMucXVlcnlMaXN0KX1zZXREaXJ0eSgpe3RoaXMucXVlcnlMaXN0LnNldERpcnR5KCl9fSxuYj1jbGFzc3tjb25zdHJ1Y3Rvcih0PVtdKXt0aGlzLnF1ZXJpZXM9dH1jcmVhdGVFbWJlZGRlZFZpZXcodCl7bGV0IGU9dC5xdWVyaWVzO2lmKG51bGwhPT1lKXtsZXQgaT1udWxsIT09dC5jb250ZW50UXVlcmllcz90LmNvbnRlbnRRdWVyaWVzWzBdOmUubGVuZ3RoLHI9W107Zm9yKGxldCBvPTA7bzxpO28rKyl7bGV0IGE9ZS5nZXRCeUluZGV4KG8pO3IucHVzaCh0aGlzLnF1ZXJpZXNbYS5pbmRleEluRGVjbGFyYXRpb25WaWV3XS5jbG9uZSgpKX1yZXR1cm4gbmV3IG5iKHIpfXJldHVybiBudWxsfWluc2VydFZpZXcodCl7dGhpcy5kaXJ0eVF1ZXJpZXNXaXRoTWF0Y2hlcyh0KX1kZXRhY2hWaWV3KHQpe3RoaXMuZGlydHlRdWVyaWVzV2l0aE1hdGNoZXModCl9ZGlydHlRdWVyaWVzV2l0aE1hdGNoZXModCl7Zm9yKGxldCBlPTA7ZTx0aGlzLnF1ZXJpZXMubGVuZ3RoO2UrKyludWxsIT09aGoodCxlKS5tYXRjaGVzJiZ0aGlzLnF1ZXJpZXNbZV0uc2V0RGlydHkoKX19LHlNPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpPW51bGwpe3RoaXMucHJlZGljYXRlPXQsdGhpcy5mbGFncz1lLHRoaXMucmVhZD1pfX0saWI9Y2xhc3N7Y29uc3RydWN0b3IodD1bXSl7dGhpcy5xdWVyaWVzPXR9ZWxlbWVudFN0YXJ0KHQsZSl7Zm9yKGxldCBpPTA7aTx0aGlzLnF1ZXJpZXMubGVuZ3RoO2krKyl0aGlzLnF1ZXJpZXNbaV0uZWxlbWVudFN0YXJ0KHQsZSl9ZWxlbWVudEVuZCh0KXtmb3IobGV0IGU9MDtlPHRoaXMucXVlcmllcy5sZW5ndGg7ZSsrKXRoaXMucXVlcmllc1tlXS5lbGVtZW50RW5kKHQpfWVtYmVkZGVkVFZpZXcodCl7bGV0IGU9bnVsbDtmb3IobGV0IGk9MDtpPHRoaXMubGVuZ3RoO2krKyl7bGV0IHI9bnVsbCE9PWU/ZS5sZW5ndGg6MCxvPXRoaXMuZ2V0QnlJbmRleChpKS5lbWJlZGRlZFRWaWV3KHQscik7byYmKG8uaW5kZXhJbkRlY2xhcmF0aW9uVmlldz1pLG51bGwhPT1lP2UucHVzaChvKTplPVtvXSl9cmV0dXJuIG51bGwhPT1lP25ldyBpYihlKTpudWxsfXRlbXBsYXRlKHQsZSl7Zm9yKGxldCBpPTA7aTx0aGlzLnF1ZXJpZXMubGVuZ3RoO2krKyl0aGlzLnF1ZXJpZXNbaV0udGVtcGxhdGUodCxlKX1nZXRCeUluZGV4KHQpe3JldHVybiB0aGlzLnF1ZXJpZXNbdF19Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLnF1ZXJpZXMubGVuZ3RofXRyYWNrKHQpe3RoaXMucXVlcmllcy5wdXNoKHQpfX0scmI9Y2xhc3N7Y29uc3RydWN0b3IodCxlPS0xKXt0aGlzLm1ldGFkYXRhPXQsdGhpcy5tYXRjaGVzPW51bGwsdGhpcy5pbmRleEluRGVjbGFyYXRpb25WaWV3PS0xLHRoaXMuY3Jvc3Nlc05nVGVtcGxhdGU9ITEsdGhpcy5fYXBwbGllc1RvTmV4dE5vZGU9ITAsdGhpcy5fZGVjbGFyYXRpb25Ob2RlSW5kZXg9ZX1lbGVtZW50U3RhcnQodCxlKXt0aGlzLmlzQXBwbHlpbmdUb05vZGUoZSkmJnRoaXMubWF0Y2hUTm9kZSh0LGUpfWVsZW1lbnRFbmQodCl7dGhpcy5fZGVjbGFyYXRpb25Ob2RlSW5kZXg9PT10LmluZGV4JiYodGhpcy5fYXBwbGllc1RvTmV4dE5vZGU9ITEpfXRlbXBsYXRlKHQsZSl7dGhpcy5lbGVtZW50U3RhcnQodCxlKX1lbWJlZGRlZFRWaWV3KHQsZSl7cmV0dXJuIHRoaXMuaXNBcHBseWluZ1RvTm9kZSh0KT8odGhpcy5jcm9zc2VzTmdUZW1wbGF0ZT0hMCx0aGlzLmFkZE1hdGNoKC10LmluZGV4LGUpLG5ldyByYih0aGlzLm1ldGFkYXRhKSk6bnVsbH1pc0FwcGx5aW5nVG9Ob2RlKHQpe2lmKHRoaXMuX2FwcGxpZXNUb05leHROb2RlJiYxIT0oMSZ0aGlzLm1ldGFkYXRhLmZsYWdzKSl7bGV0IGU9dGhpcy5fZGVjbGFyYXRpb25Ob2RlSW5kZXgsaT10LnBhcmVudDtmb3IoO251bGwhPT1pJiY4JmkudHlwZSYmaS5pbmRleCE9PWU7KWk9aS5wYXJlbnQ7cmV0dXJuIGU9PT0obnVsbCE9PWk/aS5pbmRleDotMSl9cmV0dXJuIHRoaXMuX2FwcGxpZXNUb05leHROb2RlfW1hdGNoVE5vZGUodCxlKXtsZXQgaT10aGlzLm1ldGFkYXRhLnByZWRpY2F0ZTtpZihBcnJheS5pc0FycmF5KGkpKWZvcihsZXQgcj0wO3I8aS5sZW5ndGg7cisrKXtsZXQgbz1pW3JdO3RoaXMubWF0Y2hUTm9kZVdpdGhSZWFkT3B0aW9uKHQsZSx2ZGUoZSxvKSksdGhpcy5tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24odCxlLHFDKGUsdCxvLCExLCExKSl9ZWxzZSBpPT09b2k/NCZlLnR5cGUmJnRoaXMubWF0Y2hUTm9kZVdpdGhSZWFkT3B0aW9uKHQsZSwtMSk6dGhpcy5tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24odCxlLHFDKGUsdCxpLCExLCExKSl9bWF0Y2hUTm9kZVdpdGhSZWFkT3B0aW9uKHQsZSxpKXtpZihudWxsIT09aSl7bGV0IHI9dGhpcy5tZXRhZGF0YS5yZWFkO2lmKG51bGwhPT1yKWlmKHI9PT14ZXx8cj09PWVpfHxyPT09b2kmJjQmZS50eXBlKXRoaXMuYWRkTWF0Y2goZS5pbmRleCwtMik7ZWxzZXtsZXQgbz1xQyhlLHQsciwhMSwhMSk7bnVsbCE9PW8mJnRoaXMuYWRkTWF0Y2goZS5pbmRleCxvKX1lbHNlIHRoaXMuYWRkTWF0Y2goZS5pbmRleCxpKX19YWRkTWF0Y2godCxlKXtudWxsPT09dGhpcy5tYXRjaGVzP3RoaXMubWF0Y2hlcz1bdCxlXTp0aGlzLm1hdGNoZXMucHVzaCh0LGUpfX07ZnVuY3Rpb24gdmRlKG4sdCl7bGV0IGU9bi5sb2NhbE5hbWVzO2lmKG51bGwhPT1lKWZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSs9MilpZihlW2ldPT09dClyZXR1cm4gZVtpKzFdO3JldHVybiBudWxsfWZ1bmN0aW9uIHhkZShuLHQsZSxpKXtyZXR1cm4tMT09PWU/ZnVuY3Rpb24obix0KXtyZXR1cm4gMTEmbi50eXBlP3VmKG4sdCk6NCZuLnR5cGU/Wk0obix0KTpudWxsfSh0LG4pOi0yPT09ZT9mdW5jdGlvbihuLHQsZSl7cmV0dXJuIGU9PT14ZT91Zih0LG4pOmU9PT1vaT9aTSh0LG4pOmU9PT1laT9jaih0LG4pOnZvaWQgMH0obix0LGkpOlhwKG4sbltGbl0sZSx0KX1mdW5jdGlvbiBkaihuLHQsZSxpKXtsZXQgcj10W29jXS5xdWVyaWVzW2ldO2lmKG51bGw9PT1yLm1hdGNoZXMpe2xldCBvPW4uZGF0YSxhPWUubWF0Y2hlcyxzPVtdO2ZvcihsZXQgbD0wO2w8YS5sZW5ndGg7bCs9Mil7bGV0IGM9YVtsXTtzLnB1c2goYzwwP251bGw6eGRlKHQsb1tjXSxhW2wrMV0sZS5tZXRhZGF0YS5yZWFkKSl9ci5tYXRjaGVzPXN9cmV0dXJuIHIubWF0Y2hlc31mdW5jdGlvbiBEUChuLHQsZSxpKXtsZXQgcj1uLnF1ZXJpZXMuZ2V0QnlJbmRleChlKSxvPXIubWF0Y2hlcztpZihudWxsIT09byl7bGV0IGE9ZGoobix0LHIsZSk7Zm9yKGxldCBzPTA7czxvLmxlbmd0aDtzKz0yKXtsZXQgbD1vW3NdO2lmKGw+MClpLnB1c2goYVtzLzJdKTtlbHNle2xldCBjPW9bcysxXSxkPXRbLWxdO2ZvcihsZXQgdT1JYTt1PGQubGVuZ3RoO3UrKyl7bGV0IHA9ZFt1XTtwW2xiXT09PXBbanJdJiZEUChwW0ZuXSxwLGMsaSl9aWYobnVsbCE9PWRbS21dKXtsZXQgdT1kW0ttXTtmb3IobGV0IHA9MDtwPHUubGVuZ3RoO3ArKyl7bGV0IGg9dVtwXTtEUChoW0ZuXSxoLGMsaSl9fX19fXJldHVybiBpfWZ1bmN0aW9uIGJlKG4pe2xldCB0PVplKCksZT1UaSgpLGk9dzUoKTtaUChpKzEpO2xldCByPWhqKGUsaSk7aWYobi5kaXJ0eSYmZnVuY3Rpb24obil7cmV0dXJuIDQ9PSg0Jm5bZGldKX0odCk9PT0oMj09KDImci5tZXRhZGF0YS5mbGFncykpKXtpZihudWxsPT09ci5tYXRjaGVzKW4ucmVzZXQoW10pO2Vsc2V7bGV0IG89ci5jcm9zc2VzTmdUZW1wbGF0ZT9EUChlLHQsaSxbXSk6ZGooZSx0LHIsaSk7bi5yZXNldChvLHRzZSksbi5ub3RpZnlPbkNoYW5nZXMoKX1yZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBVZShuLHQsZSl7bGV0IGk9VGkoKTtpLmZpcnN0Q3JlYXRlUGFzcyYmKHBqKGksbmV3IHlNKG4sdCxlKSwtMSksMj09KDImdCkmJihpLnN0YXRpY1ZpZXdRdWVyaWVzPSEwKSksdWooaSxaZSgpLHQpfWZ1bmN0aW9uIEJuKG4sdCxlLGkpe2xldCByPVRpKCk7aWYoci5maXJzdENyZWF0ZVBhc3Mpe2xldCBvPUxvKCk7cGoocixuZXcgeU0odCxlLGkpLG8uaW5kZXgpLGZ1bmN0aW9uKG4sdCl7bGV0IGU9bi5jb250ZW50UXVlcmllc3x8KG4uY29udGVudFF1ZXJpZXM9W10pO3QhPT0oZS5sZW5ndGg/ZVtlLmxlbmd0aC0xXTotMSkmJmUucHVzaChuLnF1ZXJpZXMubGVuZ3RoLTEsdCl9KHIsbiksMj09KDImZSkmJihyLnN0YXRpY0NvbnRlbnRRdWVyaWVzPSEwKX11aihyLFplKCksZSl9ZnVuY3Rpb24gdmUoKXtyZXR1cm4gbj1aZSgpLHQ9dzUoKSxuW29jXS5xdWVyaWVzW3RdLnF1ZXJ5TGlzdDt2YXIgbix0fWZ1bmN0aW9uIHVqKG4sdCxlKXtsZXQgaT1uZXcgUGEoND09KDQmZSkpO1Z6KG4sdCxpLGkuZGVzdHJveSksbnVsbD09PXRbb2NdJiYodFtvY109bmV3IG5iKSx0W29jXS5xdWVyaWVzLnB1c2gobmV3IHRiKGkpKX1mdW5jdGlvbiBwaihuLHQsZSl7bnVsbD09PW4ucXVlcmllcyYmKG4ucXVlcmllcz1uZXcgaWIpLG4ucXVlcmllcy50cmFjayhuZXcgcmIodCxlKSl9ZnVuY3Rpb24gaGoobix0KXtyZXR1cm4gbi5xdWVyaWVzLmdldEJ5SW5kZXgodCl9ZnVuY3Rpb24ganQobix0KXtyZXR1cm4gWk0obix0KX12YXIgJGQ9eyJcdTAyNzVcdTAyNzVhdHRyaWJ1dGUiOkJlLCJcdTAyNzVcdTAyNzVhdHRyaWJ1dGVJbnRlcnBvbGF0ZTEiOmZ1bmN0aW9uIEt6KG4sdCxlLGkscixvKXtsZXQgYT1aZSgpLHM9bWYoYSx0LGUsaSk7cmV0dXJuIHMhPT16biYmdWMoUHIoKSxhLG4scyxyLG8pLEt6fSwiXHUwMjc1XHUwMjc1YXR0cmlidXRlSW50ZXJwb2xhdGUyIjpmdW5jdGlvbiBKeihuLHQsZSxpLHIsbyxhLHMpe2xldCBsPVplKCksYz1mZihsLHQsZSxpLHIsbyk7cmV0dXJuIGMhPT16biYmdWMoUHIoKSxsLG4sYyxhLHMpLEp6fSwiXHUwMjc1XHUwMjc1YXR0cmlidXRlSW50ZXJwb2xhdGUzIjpmdW5jdGlvbiAkeihuLHQsZSxpLHIsbyxhLHMsbCxjKXtsZXQgZD1aZSgpLHU9Z2YoZCx0LGUsaSxyLG8sYSxzKTtyZXR1cm4gdSE9PXpuJiZ1YyhQcigpLGQsbix1LGwsYyksJHp9LCJcdTAyNzVcdTAyNzVhdHRyaWJ1dGVJbnRlcnBvbGF0ZTQiOmZ1bmN0aW9uIGVVKG4sdCxlLGkscixvLGEscyxsLGMsZCx1KXtsZXQgcD1aZSgpLGg9X2YocCx0LGUsaSxyLG8sYSxzLGwsYyk7cmV0dXJuIGghPT16biYmdWMoUHIoKSxwLG4saCxkLHUpLGVVfSwiXHUwMjc1XHUwMjc1YXR0cmlidXRlSW50ZXJwb2xhdGU1IjpmdW5jdGlvbiB0VShuLHQsZSxpLHIsbyxhLHMsbCxjLGQsdSxwLGgpe2xldCBtPVplKCksXz1iZihtLHQsZSxpLHIsbyxhLHMsbCxjLGQsdSk7cmV0dXJuIF8hPT16biYmdWMoUHIoKSxtLG4sXyxwLGgpLHRVfSwiXHUwMjc1XHUwMjc1YXR0cmlidXRlSW50ZXJwb2xhdGU2IjpmdW5jdGlvbiBuVShuLHQsZSxpLHIsbyxhLHMsbCxjLGQsdSxwLGgsbSxfKXtsZXQgTT1aZSgpLHk9dmYoTSx0LGUsaSxyLG8sYSxzLGwsYyxkLHUscCxoKTtyZXR1cm4geSE9PXpuJiZ1YyhQcigpLE0sbix5LG0sXyksblV9LCJcdTAyNzVcdTAyNzVhdHRyaWJ1dGVJbnRlcnBvbGF0ZTciOmZ1bmN0aW9uIGlVKG4sdCxlLGkscixvLGEscyxsLGMsZCx1LHAsaCxtLF8sTSx5KXtsZXQgeD1aZSgpLFI9eWYoeCx0LGUsaSxyLG8sYSxzLGwsYyxkLHUscCxoLG0sXyk7cmV0dXJuIFIhPT16biYmdWMoUHIoKSx4LG4sUixNLHkpLGlVfSwiXHUwMjc1XHUwMjc1YXR0cmlidXRlSW50ZXJwb2xhdGU4IjpmdW5jdGlvbiByVShuLHQsZSxpLHIsbyxhLHMsbCxjLGQsdSxwLGgsbSxfLE0seSx4LFIpe2xldCBJPVplKCksQj14ZihJLHQsZSxpLHIsbyxhLHMsbCxjLGQsdSxwLGgsbSxfLE0seSk7cmV0dXJuIEIhPT16biYmdWMoUHIoKSxJLG4sQix4LFIpLHJVfSwiXHUwMjc1XHUwMjc1YXR0cmlidXRlSW50ZXJwb2xhdGVWIjpmdW5jdGlvbiBvVShuLHQsZSxpKXtsZXQgcj1aZSgpLG89aGYocix0KTtyZXR1cm4gbyE9PXpuJiZ1YyhQcigpLHIsbixvLGUsaSksb1V9LCJcdTAyNzVcdTAyNzVkZWZpbmVDb21wb25lbnQiOlAsIlx1MDI3NVx1MDI3NWRlZmluZURpcmVjdGl2ZSI6TWUsIlx1MDI3NVx1MDI3NWRlZmluZUluamVjdGFibGUiOnVlLCJcdTAyNzVcdTAyNzVkZWZpbmVJbmplY3RvciI6SCwiXHUwMjc1XHUwMjc1ZGVmaW5lTmdNb2R1bGUiOnosIlx1MDI3NVx1MDI3NWRlZmluZVBpcGUiOnJmLCJcdTAyNzVcdTAyNzVkaXJlY3RpdmVJbmplY3QiOkMsIlx1MDI3NVx1MDI3NWdldEluaGVyaXRlZEZhY3RvcnkiOlhuLCJcdTAyNzVcdTAyNzVpbmplY3QiOk8sIlx1MDI3NVx1MDI3NWluamVjdEF0dHJpYnV0ZSI6TW8sIlx1MDI3NVx1MDI3NWludmFsaWRGYWN0b3J5IjpjcywiXHUwMjc1XHUwMjc1aW52YWxpZEZhY3RvcnlEZXAiOmE1LCJcdTAyNzVcdTAyNzV0ZW1wbGF0ZVJlZkV4dHJhY3RvciI6anQsIlx1MDI3NVx1MDI3NXJlc2V0VmlldyI6aWUsIlx1MDI3NVx1MDI3NUhvc3REaXJlY3RpdmVzRmVhdHVyZSI6ZnVuY3Rpb24obil7cmV0dXJuIHQ9Pnt0LmZpbmRIb3N0RGlyZWN0aXZlRGVmcz1Reix0Lmhvc3REaXJlY3RpdmVzPShBcnJheS5pc0FycmF5KG4pP246bigpKS5tYXAoZT0+ImZ1bmN0aW9uIj09dHlwZW9mIGU/e2RpcmVjdGl2ZTpBaShlKSxpbnB1dHM6WmMsb3V0cHV0czpaY306e2RpcmVjdGl2ZTpBaShlLmRpcmVjdGl2ZSksaW5wdXRzOmtIKGUuaW5wdXRzKSxvdXRwdXRzOmtIKGUub3V0cHV0cyl9KX19LCJcdTAyNzVcdTAyNzVOZ09uQ2hhbmdlc0ZlYXR1cmUiOnF0LCJcdTAyNzVcdTAyNzVQcm92aWRlcnNGZWF0dXJlIjpWdCwiXHUwMjc1XHUwMjc1Q29weURlZmluaXRpb25GZWF0dXJlIjpmdW5jdGlvbihuKXtsZXQgZSx0PVl6KG4udHlwZSk7ZT1DbChuKT90Llx1MDI3NWNtcDp0Llx1MDI3NWRpcjtsZXQgaT1uO2ZvcihsZXQgciBvZiBsbGUpaVtyXT1lW3JdO2lmKENsKGUpKWZvcihsZXQgciBvZiBjbGUpaVtyXT1lW3JdfSwiXHUwMjc1XHUwMjc1SW5oZXJpdERlZmluaXRpb25GZWF0dXJlIjpYZSwiXHUwMjc1XHUwMjc1U3RhbmRhbG9uZUZlYXR1cmUiOkFrLCJcdTAyNzVcdTAyNzVuZXh0Q29udGV4dCI6dywiXHUwMjc1XHUwMjc1bmFtZXNwYWNlSFRNTCI6dWEsIlx1MDI3NVx1MDI3NW5hbWVzcGFjZU1hdGhNTCI6ZnVuY3Rpb24oKXtHbi5sRnJhbWUuY3VycmVudE5hbWVzcGFjZT1fNX0sIlx1MDI3NVx1MDI3NW5hbWVzcGFjZVNWRyI6cW4sIlx1MDI3NVx1MDI3NWVuYWJsZUJpbmRpbmdzIjpmdW5jdGlvbigpe0duLmJpbmRpbmdzRW5hYmxlZD0hMH0sIlx1MDI3NVx1MDI3NWRpc2FibGVCaW5kaW5ncyI6ZnVuY3Rpb24oKXtHbi5iaW5kaW5nc0VuYWJsZWQ9ITF9LCJcdTAyNzVcdTAyNzVlbGVtZW50U3RhcnQiOmYsIlx1MDI3NVx1MDI3NWVsZW1lbnRFbmQiOmcsIlx1MDI3NVx1MDI3NWVsZW1lbnQiOmssIlx1MDI3NVx1MDI3NWVsZW1lbnRDb250YWluZXJTdGFydCI6R3QsIlx1MDI3NVx1MDI3NWVsZW1lbnRDb250YWluZXJFbmQiOld0LCJcdTAyNzVcdTAyNzVlbGVtZW50Q29udGFpbmVyIjpoaSwiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uMCI6bWMsIlx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjEiOlVuLCJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb24yIjpTbywiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uMyI6eWIsIlx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjQiOlJrLCJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb241IjpQaywiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uNiI6ZnVuY3Rpb24obix0LGUsaSxyLG8sYSxzLGwpe2xldCBjPWNhKCkrbixkPVplKCksdT1CcyhkLGMsZSxpLHIsbyk7cmV0dXJuIFpwKGQsYys0LGEscyl8fHU/cGMoZCxjKzYsbD90LmNhbGwobCxlLGkscixvLGEscyk6dChlLGkscixvLGEscykpOmdiKGQsYys2KX0sIlx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjciOmZ1bmN0aW9uKG4sdCxlLGkscixvLGEscyxsLGMpe2xldCBkPWNhKCkrbix1PVplKCkscD1Ccyh1LGQsZSxpLHIsbyk7cmV0dXJuIHpNKHUsZCs0LGEscyxsKXx8cD9wYyh1LGQrNyxjP3QuY2FsbChjLGUsaSxyLG8sYSxzLGwpOnQoZSxpLHIsbyxhLHMsbCkpOmdiKHUsZCs3KX0sIlx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjgiOmZ1bmN0aW9uKG4sdCxlLGkscixvLGEscyxsLGMsZCl7bGV0IHU9Y2EoKStuLHA9WmUoKSxoPUJzKHAsdSxlLGkscixvKTtyZXR1cm4gQnMocCx1KzQsYSxzLGwsYyl8fGg/cGMocCx1KzgsZD90LmNhbGwoZCxlLGkscixvLGEscyxsLGMpOnQoZSxpLHIsbyxhLHMsbCxjKSk6Z2IocCx1KzgpfSwiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uViI6ZnVuY3Rpb24obix0LGUsaSl7cmV0dXJuIHNqKFplKCksY2EoKSxuLHQsZSxpKX0sIlx1MDI3NVx1MDI3NWdldEN1cnJlbnRWaWV3IjpUZSwiXHUwMjc1XHUwMjc1cmVzdG9yZVZpZXciOm5lLCJcdTAyNzVcdTAyNzVsaXN0ZW5lciI6QSwiXHUwMjc1XHUwMjc1cHJvamVjdGlvbiI6VHQsIlx1MDI3NVx1MDI3NXN5bnRoZXRpY0hvc3RQcm9wZXJ0eSI6V00sIlx1MDI3NVx1MDI3NXN5bnRoZXRpY0hvc3RMaXN0ZW5lciI6VU0sIlx1MDI3NVx1MDI3NXBpcGVCaW5kMSI6RywiXHUwMjc1XHUwMjc1cGlwZUJpbmQyIjpKcCwiXHUwMjc1XHUwMjc1cGlwZUJpbmQzIjpraywiXHUwMjc1XHUwMjc1cGlwZUJpbmQ0IjpmdW5jdGlvbihuLHQsZSxpLHIsbyl7bGV0IGE9bitHcixzPVplKCksbD1hZihzLGEpO3JldHVybiBDYihzLGEpP2FqKHMsY2EoKSx0LGwudHJhbnNmb3JtLGUsaSxyLG8sbCk6bC50cmFuc2Zvcm0oZSxpLHIsbyl9LCJcdTAyNzVcdTAyNzVwaXBlQmluZFYiOmZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1uK0dyLHI9WmUoKSxvPWFmKHIsaSk7cmV0dXJuIENiKHIsaSk/c2oocixjYSgpLHQsby50cmFuc2Zvcm0sZSxvKTpvLnRyYW5zZm9ybS5hcHBseShvLGUpfSwiXHUwMjc1XHUwMjc1cHJvamVjdGlvbkRlZiI6Zm4sIlx1MDI3NVx1MDI3NWhvc3RQcm9wZXJ0eSI6d28sIlx1MDI3NVx1MDI3NXByb3BlcnR5IjpiLCJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlIjpaaSwiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZTEiOl9iLCJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlMiI6ak0sIlx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGUzIjpmdW5jdGlvbiBzVShuLHQsZSxpLHIsbyxhLHMsbCl7bGV0IGM9WmUoKSxkPWdmKGMsdCxlLGkscixvLGEscyk7cmV0dXJuIGQhPT16biYmZHMoVGkoKSxQcigpLGMsbixkLGNbdWldLGwsITEpLHNVfSwiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZTQiOmZ1bmN0aW9uIGxVKG4sdCxlLGkscixvLGEscyxsLGMsZCl7bGV0IHU9WmUoKSxwPV9mKHUsdCxlLGkscixvLGEscyxsLGMpO3JldHVybiBwIT09em4mJmRzKFRpKCksUHIoKSx1LG4scCx1W3VpXSxkLCExKSxsVX0sIlx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGU1IjpmdW5jdGlvbiBjVShuLHQsZSxpLHIsbyxhLHMsbCxjLGQsdSxwKXtsZXQgaD1aZSgpLG09YmYoaCx0LGUsaSxyLG8sYSxzLGwsYyxkLHUpO3JldHVybiBtIT09em4mJmRzKFRpKCksUHIoKSxoLG4sbSxoW3VpXSxwLCExKSxjVX0sIlx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGU2IjpmdW5jdGlvbiBkVShuLHQsZSxpLHIsbyxhLHMsbCxjLGQsdSxwLGgsbSl7bGV0IF89WmUoKSxNPXZmKF8sdCxlLGkscixvLGEscyxsLGMsZCx1LHAsaCk7cmV0dXJuIE0hPT16biYmZHMoVGkoKSxQcigpLF8sbixNLF9bdWldLG0sITEpLGRVfSwiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZTciOmZ1bmN0aW9uIHVVKG4sdCxlLGkscixvLGEscyxsLGMsZCx1LHAsaCxtLF8sTSl7bGV0IHk9WmUoKSx4PXlmKHksdCxlLGkscixvLGEscyxsLGMsZCx1LHAsaCxtLF8pO3JldHVybiB4IT09em4mJmRzKFRpKCksUHIoKSx5LG4seCx5W3VpXSxNLCExKSx1VX0sIlx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGU4IjpmdW5jdGlvbiBwVShuLHQsZSxpLHIsbyxhLHMsbCxjLGQsdSxwLGgsbSxfLE0seSx4KXtsZXQgUj1aZSgpLEk9eGYoUix0LGUsaSxyLG8sYSxzLGwsYyxkLHUscCxoLG0sXyxNLHkpO3JldHVybiBJIT09em4mJmRzKFRpKCksUHIoKSxSLG4sSSxSW3VpXSx4LCExKSxwVX0sIlx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGVWIjpmdW5jdGlvbiBoVShuLHQsZSl7bGV0IGk9WmUoKSxyPWhmKGksdCk7cmV0dXJuIHIhPT16biYmZHMoVGkoKSxQcigpLGksbixyLGlbdWldLGUsITEpLGhVfSwiXHUwMjc1XHUwMjc1cGlwZSI6VSwiXHUwMjc1XHUwMjc1cXVlcnlSZWZyZXNoIjpiZSwiXHUwMjc1XHUwMjc1dmlld1F1ZXJ5IjpVZSwiXHUwMjc1XHUwMjc1bG9hZFF1ZXJ5Ijp2ZSwiXHUwMjc1XHUwMjc1Y29udGVudFF1ZXJ5IjpCbiwiXHUwMjc1XHUwMjc1cmVmZXJlbmNlIjpzdCwiXHUwMjc1XHUwMjc1Y2xhc3NNYXAiOlhvLCJcdTAyNzVcdTAyNzVjbGFzc01hcEludGVycG9sYXRlMSI6YmIsIlx1MDI3NVx1MDI3NWNsYXNzTWFwSW50ZXJwb2xhdGUyIjpmdW5jdGlvbihuLHQsZSxpLHIpe0VsKGxzLGhjLGZmKFplKCksbix0LGUsaSxyKSwhMCl9LCJcdTAyNzVcdTAyNzVjbGFzc01hcEludGVycG9sYXRlMyI6ZnVuY3Rpb24obix0LGUsaSxyLG8sYSl7RWwobHMsaGMsZ2YoWmUoKSxuLHQsZSxpLHIsbyxhKSwhMCl9LCJcdTAyNzVcdTAyNzVjbGFzc01hcEludGVycG9sYXRlNCI6ZnVuY3Rpb24obix0LGUsaSxyLG8sYSxzLGwpe0VsKGxzLGhjLF9mKFplKCksbix0LGUsaSxyLG8sYSxzLGwpLCEwKX0sIlx1MDI3NVx1MDI3NWNsYXNzTWFwSW50ZXJwb2xhdGU1IjpmdW5jdGlvbihuLHQsZSxpLHIsbyxhLHMsbCxjLGQpe0VsKGxzLGhjLGJmKFplKCksbix0LGUsaSxyLG8sYSxzLGwsYyxkKSwhMCl9LCJcdTAyNzVcdTAyNzVjbGFzc01hcEludGVycG9sYXRlNiI6ZnVuY3Rpb24obix0LGUsaSxyLG8sYSxzLGwsYyxkLHUscCl7RWwobHMsaGMsdmYoWmUoKSxuLHQsZSxpLHIsbyxhLHMsbCxjLGQsdSxwKSwhMCl9LCJcdTAyNzVcdTAyNzVjbGFzc01hcEludGVycG9sYXRlNyI6ZnVuY3Rpb24obix0LGUsaSxyLG8sYSxzLGwsYyxkLHUscCxoLG0pe0VsKGxzLGhjLHlmKFplKCksbix0LGUsaSxyLG8sYSxzLGwsYyxkLHUscCxoLG0pLCEwKX0sIlx1MDI3NVx1MDI3NWNsYXNzTWFwSW50ZXJwb2xhdGU4IjpmdW5jdGlvbihuLHQsZSxpLHIsbyxhLHMsbCxjLGQsdSxwLGgsbSxfLE0pe0VsKGxzLGhjLHhmKFplKCksbix0LGUsaSxyLG8sYSxzLGwsYyxkLHUscCxoLG0sXyxNKSwhMCl9LCJcdTAyNzVcdTAyNzVjbGFzc01hcEludGVycG9sYXRlViI6ZnVuY3Rpb24obil7RWwobHMsaGMsaGYoWmUoKSxuKSwhMCl9LCJcdTAyNzVcdTAyNzVzdHlsZU1hcCI6SHMsIlx1MDI3NVx1MDI3NXN0eWxlTWFwSW50ZXJwb2xhdGUxIjpmdW5jdGlvbihuLHQsZSl7SHMobWYoWmUoKSxuLHQsZSkpfSwiXHUwMjc1XHUwMjc1c3R5bGVNYXBJbnRlcnBvbGF0ZTIiOmZ1bmN0aW9uKG4sdCxlLGkscil7SHMoZmYoWmUoKSxuLHQsZSxpLHIpKX0sIlx1MDI3NVx1MDI3NXN0eWxlTWFwSW50ZXJwb2xhdGUzIjpmdW5jdGlvbihuLHQsZSxpLHIsbyxhKXtIcyhnZihaZSgpLG4sdCxlLGkscixvLGEpKX0sIlx1MDI3NVx1MDI3NXN0eWxlTWFwSW50ZXJwb2xhdGU0IjpmdW5jdGlvbihuLHQsZSxpLHIsbyxhLHMsbCl7SHMoX2YoWmUoKSxuLHQsZSxpLHIsbyxhLHMsbCkpfSwiXHUwMjc1XHUwMjc1c3R5bGVNYXBJbnRlcnBvbGF0ZTUiOmZ1bmN0aW9uKG4sdCxlLGkscixvLGEscyxsLGMsZCl7SHMoYmYoWmUoKSxuLHQsZSxpLHIsbyxhLHMsbCxjLGQpKX0sIlx1MDI3NVx1MDI3NXN0eWxlTWFwSW50ZXJwb2xhdGU2IjpmdW5jdGlvbihuLHQsZSxpLHIsbyxhLHMsbCxjLGQsdSxwKXtIcyh2ZihaZSgpLG4sdCxlLGkscixvLGEscyxsLGMsZCx1LHApKX0sIlx1MDI3NVx1MDI3NXN0eWxlTWFwSW50ZXJwb2xhdGU3IjpmdW5jdGlvbihuLHQsZSxpLHIsbyxhLHMsbCxjLGQsdSxwLGgsbSl7SHMoeWYoWmUoKSxuLHQsZSxpLHIsbyxhLHMsbCxjLGQsdSxwLGgsbSkpfSwiXHUwMjc1XHUwMjc1c3R5bGVNYXBJbnRlcnBvbGF0ZTgiOmZ1bmN0aW9uKG4sdCxlLGkscixvLGEscyxsLGMsZCx1LHAsaCxtLF8sTSl7SHMoeGYoWmUoKSxuLHQsZSxpLHIsbyxhLHMsbCxjLGQsdSxwLGgsbSxfLE0pKX0sIlx1MDI3NVx1MDI3NXN0eWxlTWFwSW50ZXJwb2xhdGVWIjpmdW5jdGlvbihuKXtIcyhoZihaZSgpLG4pKX0sIlx1MDI3NVx1MDI3NXN0eWxlUHJvcCI6QnQsIlx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlMSI6ZnVuY3Rpb24gSVUobix0LGUsaSxyKXtyZXR1cm4gU2wobixtZihaZSgpLHQsZSxpKSxyLCExKSxJVX0sIlx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlMiI6ZnVuY3Rpb24gQVUobix0LGUsaSxyLG8sYSl7cmV0dXJuIFNsKG4sZmYoWmUoKSx0LGUsaSxyLG8pLGEsITEpLEFVfSwiXHUwMjc1XHUwMjc1c3R5bGVQcm9wSW50ZXJwb2xhdGUzIjpmdW5jdGlvbiBSVShuLHQsZSxpLHIsbyxhLHMsbCl7cmV0dXJuIFNsKG4sZ2YoWmUoKSx0LGUsaSxyLG8sYSxzKSxsLCExKSxSVX0sIlx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlNCI6ZnVuY3Rpb24gUFUobix0LGUsaSxyLG8sYSxzLGwsYyxkKXtyZXR1cm4gU2wobixfZihaZSgpLHQsZSxpLHIsbyxhLHMsbCxjKSxkLCExKSxQVX0sIlx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlNSI6ZnVuY3Rpb24ga1Uobix0LGUsaSxyLG8sYSxzLGwsYyxkLHUscCl7cmV0dXJuIFNsKG4sYmYoWmUoKSx0LGUsaSxyLG8sYSxzLGwsYyxkLHUpLHAsITEpLGtVfSwiXHUwMjc1XHUwMjc1c3R5bGVQcm9wSW50ZXJwb2xhdGU2IjpmdW5jdGlvbiBPVShuLHQsZSxpLHIsbyxhLHMsbCxjLGQsdSxwLGgsbSl7cmV0dXJuIFNsKG4sdmYoWmUoKSx0LGUsaSxyLG8sYSxzLGwsYyxkLHUscCxoKSxtLCExKSxPVX0sIlx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlNyI6ZnVuY3Rpb24gRlUobix0LGUsaSxyLG8sYSxzLGwsYyxkLHUscCxoLG0sXyxNKXtyZXR1cm4gU2wobix5ZihaZSgpLHQsZSxpLHIsbyxhLHMsbCxjLGQsdSxwLGgsbSxfKSxNLCExKSxGVX0sIlx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlOCI6ZnVuY3Rpb24gTlUobix0LGUsaSxyLG8sYSxzLGwsYyxkLHUscCxoLG0sXyxNLHkseCl7cmV0dXJuIFNsKG4seGYoWmUoKSx0LGUsaSxyLG8sYSxzLGwsYyxkLHUscCxoLG0sXyxNLHkpLHgsITEpLE5VfSwiXHUwMjc1XHUwMjc1c3R5bGVQcm9wSW50ZXJwb2xhdGVWIjpmdW5jdGlvbiBMVShuLHQsZSl7cmV0dXJuIFNsKG4saGYoWmUoKSx0KSxlLCExKSxMVX0sIlx1MDI3NVx1MDI3NWNsYXNzUHJvcCI6bnQsIlx1MDI3NVx1MDI3NWFkdmFuY2UiOnYsIlx1MDI3NVx1MDI3NXRlbXBsYXRlIjpTLCJcdTAyNzVcdTAyNzV0ZXh0IjpULCJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGUiOmt0LCJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGUxIjpWZSwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlMiI6bHUsIlx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZTMiOkdNLCJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGU0IjpmdW5jdGlvbiBNVShuLHQsZSxpLHIsbyxhLHMsbCl7bGV0IGM9WmUoKSxkPV9mKGMsbix0LGUsaSxyLG8sYSxzLGwpO3JldHVybiBkIT09em4mJm9kKGMsZGEoKSxkKSxNVX0sIlx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZTUiOmZ1bmN0aW9uIHdVKG4sdCxlLGkscixvLGEscyxsLGMsZCl7bGV0IHU9WmUoKSxwPWJmKHUsbix0LGUsaSxyLG8sYSxzLGwsYyxkKTtyZXR1cm4gcCE9PXpuJiZvZCh1LGRhKCkscCksd1V9LCJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGU2IjpmdW5jdGlvbiBTVShuLHQsZSxpLHIsbyxhLHMsbCxjLGQsdSxwKXtsZXQgaD1aZSgpLG09dmYoaCxuLHQsZSxpLHIsbyxhLHMsbCxjLGQsdSxwKTtyZXR1cm4gbSE9PXpuJiZvZChoLGRhKCksbSksU1V9LCJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGU3IjpmdW5jdGlvbiBFVShuLHQsZSxpLHIsbyxhLHMsbCxjLGQsdSxwLGgsbSl7bGV0IF89WmUoKSxNPXlmKF8sbix0LGUsaSxyLG8sYSxzLGwsYyxkLHUscCxoLG0pO3JldHVybiBNIT09em4mJm9kKF8sZGEoKSxNKSxFVX0sIlx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZTgiOmZ1bmN0aW9uIFRVKG4sdCxlLGkscixvLGEscyxsLGMsZCx1LHAsaCxtLF8sTSl7bGV0IHk9WmUoKSx4PXhmKHksbix0LGUsaSxyLG8sYSxzLGwsYyxkLHUscCxoLG0sXyxNKTtyZXR1cm4geCE9PXpuJiZvZCh5LGRhKCkseCksVFV9LCJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGVWIjpmdW5jdGlvbiBEVShuKXtsZXQgdD1aZSgpLGU9aGYodCxuKTtyZXR1cm4gZSE9PXpuJiZvZCh0LGRhKCksZSksRFV9LCJcdTAyNzVcdTAyNzVpMThuIjpYTSwiXHUwMjc1XHUwMjc1aTE4bkF0dHJpYnV0ZXMiOmZ1bmN0aW9uKG4sdCl7bGV0IGU9VGkoKSxpPW51KGUuY29uc3RzLHQpOyFmdW5jdGlvbihuLHQsZSl7bGV0IHI9TG8oKS5pbmRleCxvPVtdO2lmKG4uZmlyc3RDcmVhdGVQYXNzJiZudWxsPT09bi5kYXRhW3RdKXtmb3IobGV0IGE9MDthPGUubGVuZ3RoO2ErPTIpe2xldCBzPWVbYV0sbD1lW2ErMV07aWYoIiIhPT1sKXtpZihUY2UudGVzdChsKSl0aHJvdyBuZXcgRXJyb3IoYElDVSBleHByZXNzaW9ucyBhcmUgbm90IHN1cHBvcnRlZCBpbiBhdHRyaWJ1dGVzLiBNZXNzYWdlOiAiJHtsfSIuYCk7V18obyxsLHIscyxOY2UobyksbnVsbCl9fW4uZGF0YVt0XT1vfX0oZSxuK0dyLGkpfSwiXHUwMjc1XHUwMjc1aTE4bkV4cCI6dmIsIlx1MDI3NVx1MDI3NWkxOG5TdGFydCI6ZWosIlx1MDI3NVx1MDI3NWkxOG5FbmQiOnRqLCJcdTAyNzVcdTAyNzVpMThuQXBwbHkiOllNLCJcdTAyNzVcdTAyNzVpMThuUG9zdHByb2Nlc3MiOlFNLCJcdTAyNzVcdTAyNzVyZXNvbHZlV2luZG93IjpmdW5jdGlvbihuKXtyZXR1cm4gbi5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fSwiXHUwMjc1XHUwMjc1cmVzb2x2ZURvY3VtZW50IjpzdSwiXHUwMjc1XHUwMjc1cmVzb2x2ZUJvZHkiOmZ1bmN0aW9uKG4pe3JldHVybiBuLm93bmVyRG9jdW1lbnQuYm9keX0sIlx1MDI3NVx1MDI3NXNldENvbXBvbmVudFNjb3BlIjpzYiwiXHUwMjc1XHUwMjc1c2V0TmdNb2R1bGVTY29wZSI6ZnVuY3Rpb24obix0KXtyZXR1cm4gcnUoKCk9PntsZXQgZT1abShuLCEwKTtlLmRlY2xhcmF0aW9ucz10LmRlY2xhcmF0aW9uc3x8amksZS5pbXBvcnRzPXQuaW1wb3J0c3x8amksZS5leHBvcnRzPXQuZXhwb3J0c3x8aml9KX0sIlx1MDI3NVx1MDI3NXJlZ2lzdGVyTmdNb2R1bGVUeXBlIjpxNSwiXHUwMjc1XHUwMjc1c2FuaXRpemVIdG1sIjptaywiXHUwMjc1XHUwMjc1c2FuaXRpemVTdHlsZSI6ZnVuY3Rpb24obil7bGV0IHQ9bWIoKTtyZXR1cm4gdD90LnNhbml0aXplKFVyLlNUWUxFLG4pfHwiIjp3bChuLCJTdHlsZSIpP09hKG4pOmpuKG4pfSwiXHUwMjc1XHUwMjc1c2FuaXRpemVSZXNvdXJjZVVybCI6Q3osIlx1MDI3NVx1MDI3NXNhbml0aXplU2NyaXB0IjpmdW5jdGlvbihuKXtsZXQgdD1tYigpO2lmKHQpcmV0dXJuIHhIKHQuc2FuaXRpemUoVXIuU0NSSVBULG4pfHwiIik7aWYod2wobiwiU2NyaXB0IikpcmV0dXJuIHhIKE9hKG4pKTt0aHJvdyBuZXcgeHQoOTA1LCExKX0sIlx1MDI3NVx1MDI3NXNhbml0aXplVXJsIjpWcywiXHUwMjc1XHUwMjc1c2FuaXRpemVVcmxPclJlc291cmNlVXJsIjpmdW5jdGlvbihuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4sdCl7cmV0dXJuInNyYyI9PT10JiYoImVtYmVkIj09PW58fCJmcmFtZSI9PT1ufHwiaWZyYW1lIj09PW58fCJtZWRpYSI9PT1ufHwic2NyaXB0Ij09PW4pfHwiaHJlZiI9PT10JiYoImJhc2UiPT09bnx8ImxpbmsiPT09bik/Q3o6VnN9KHQsZSkobil9LCJcdTAyNzVcdTAyNzV0cnVzdENvbnN0YW50SHRtbCI6ZnVuY3Rpb24obil7cmV0dXJuIGRmKG5bMF0pfSwiXHUwMjc1XHUwMjc1dHJ1c3RDb25zdGFudFJlc291cmNlVXJsIjpmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGN6KCk/LmNyZWF0ZVNjcmlwdFVSTChuKXx8bn0oblswXSl9LCJcdTAyNzVcdTAyNzV2YWxpZGF0ZUlmcmFtZUF0dHJpYnV0ZSI6ZnVuY3Rpb24obix0LGUpe2xldCBpPVplKCkscj1QcigpLG89c3MocixpKTtpZigyPT09ci50eXBlJiYiaWZyYW1lIj09PXQudG9Mb3dlckNhc2UoKSl7bGV0IGE9bzt0aHJvdyBhLnNyYz0iIixhLnNyY2RvYz1kZigiIiksY2soaVt1aV0sYSksbmV3IHh0KC05MTAsITEpfXJldHVybiBufSxmb3J3YXJkUmVmOlduLHJlc29sdmVGb3J3YXJkUmVmOkFpfSxOXz1udWxsO2Z1bmN0aW9uIG1qKG4pe3JldHVybiEhWm0obil9dmFyIEtDPVtdLERSPSExO2Z1bmN0aW9uIGZqKG4pe3JldHVybiBBcnJheS5pc0FycmF5KG4pP24uZXZlcnkoZmopOiEhQWkobil9ZnVuY3Rpb24gUGRlKG4sdCl7bGV0IGU9SmQodC5kZWNsYXJhdGlvbnN8fGppKSxpPW5mKG4pO2UuZm9yRWFjaChyPT57KHI9QWkocikpLmhhc093blByb3BlcnR5KEVNKT9naihPcyhyKSxpKTohci5oYXNPd25Qcm9wZXJ0eSh6UCkmJiFyLmhhc093blByb3BlcnR5KFVQKSYmKHIubmdTZWxlY3RvclNjb3BlPW4pfSl9ZnVuY3Rpb24gZ2oobix0KXtuLmRpcmVjdGl2ZURlZnM9KCk9PkFycmF5LmZyb20odC5jb21waWxhdGlvbi5kaXJlY3RpdmVzKS5tYXAoZT0+ZS5oYXNPd25Qcm9wZXJ0eShFTSk/T3MoZSk6ZXUoZSkpLmZpbHRlcihlPT4hIWUpLG4ucGlwZURlZnM9KCk9PkFycmF5LmZyb20odC5jb21waWxhdGlvbi5waXBlcykubWFwKGU9PnR1KGUpKSxuLnNjaGVtYXM9dC5zY2hlbWFzLG4udFZpZXc9bnVsbH1mdW5jdGlvbiBuZihuKXtpZihtaihuKSlyZXR1cm4gZnVuY3Rpb24obil7bGV0IHQ9Wm0obiwhMCk7aWYobnVsbCE9PXQudHJhbnNpdGl2ZUNvbXBpbGVTY29wZXMpcmV0dXJuIHQudHJhbnNpdGl2ZUNvbXBpbGVTY29wZXM7bGV0IGU9e3NjaGVtYXM6dC5zY2hlbWFzfHxudWxsLGNvbXBpbGF0aW9uOntkaXJlY3RpdmVzOm5ldyBTZXQscGlwZXM6bmV3IFNldH0sZXhwb3J0ZWQ6e2RpcmVjdGl2ZXM6bmV3IFNldCxwaXBlczpuZXcgU2V0fX07cmV0dXJuIFFDKHQuaW1wb3J0cykuZm9yRWFjaChpPT57bGV0IHI9bmYoaSk7ci5leHBvcnRlZC5kaXJlY3RpdmVzLmZvckVhY2gobz0+ZS5jb21waWxhdGlvbi5kaXJlY3RpdmVzLmFkZChvKSksci5leHBvcnRlZC5waXBlcy5mb3JFYWNoKG89PmUuY29tcGlsYXRpb24ucGlwZXMuYWRkKG8pKX0pLFFDKHQuZGVjbGFyYXRpb25zKS5mb3JFYWNoKGk9Pnt0dShpKT9lLmNvbXBpbGF0aW9uLnBpcGVzLmFkZChpKTplLmNvbXBpbGF0aW9uLmRpcmVjdGl2ZXMuYWRkKGkpfSksUUModC5leHBvcnRzKS5mb3JFYWNoKGk9PntsZXQgcj1pO2lmKG1qKHIpKXtsZXQgbz1uZihyKTtvLmV4cG9ydGVkLmRpcmVjdGl2ZXMuZm9yRWFjaChhPT57ZS5jb21waWxhdGlvbi5kaXJlY3RpdmVzLmFkZChhKSxlLmV4cG9ydGVkLmRpcmVjdGl2ZXMuYWRkKGEpfSksby5leHBvcnRlZC5waXBlcy5mb3JFYWNoKGE9PntlLmNvbXBpbGF0aW9uLnBpcGVzLmFkZChhKSxlLmV4cG9ydGVkLnBpcGVzLmFkZChhKX0pfWVsc2UgdHUocik/ZS5leHBvcnRlZC5waXBlcy5hZGQocik6ZS5leHBvcnRlZC5kaXJlY3RpdmVzLmFkZChyKX0pLHQudHJhbnNpdGl2ZUNvbXBpbGVTY29wZXM9ZSxlfShuKTtpZihsNShuKSl7aWYobnVsbCE9PShPcyhuKXx8ZXUobikpKXJldHVybntzY2hlbWFzOm51bGwsY29tcGlsYXRpb246e2RpcmVjdGl2ZXM6bmV3IFNldCxwaXBlczpuZXcgU2V0fSxleHBvcnRlZDp7ZGlyZWN0aXZlczpuZXcgU2V0KFtuXSkscGlwZXM6bmV3IFNldH19O2lmKG51bGwhPT10dShuKSlyZXR1cm57c2NoZW1hczpudWxsLGNvbXBpbGF0aW9uOntkaXJlY3RpdmVzOm5ldyBTZXQscGlwZXM6bmV3IFNldH0sZXhwb3J0ZWQ6e2RpcmVjdGl2ZXM6bmV3IFNldCxwaXBlczpuZXcgU2V0KFtuXSl9fX10aHJvdyBuZXcgRXJyb3IoYCR7bi5uYW1lfSBkb2VzIG5vdCBoYXZlIGEgbW9kdWxlIGRlZiAoXHUwMjc1bW9kIHByb3BlcnR5KWApfWZ1bmN0aW9uIHFIKG4pe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdm9pZCAwIT09bi5uZ01vZHVsZX0obik/bi5uZ01vZHVsZTpufXZhciBJUj0wO2Z1bmN0aW9uIF9qKG4sdCl7bGV0IGU9bnVsbDt2aihuLHR8fHt9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobix6UCx7Z2V0OigpPT57aWYobnVsbD09PWUpe2xldCBpPWJqKG4sdHx8e30pO2U9RnMoKS5jb21waWxlRGlyZWN0aXZlKCRkLGkuc291cmNlTWFwVXJsLGkubWV0YWRhdGEpfXJldHVybiBlfSxjb25maWd1cmFibGU6ITF9KX1mdW5jdGlvbiBiaihuLHQpe2xldCBlPW4mJm4ubmFtZSxpPWBuZzovLy8ke2V9L1x1MDI3NWRpci5qc2Ascj1GcygpLG89eWoobix0KTtyZXR1cm4gby50eXBlU291cmNlU3Bhbj1yLmNyZWF0ZVBhcnNlU291cmNlU3BhbigiRGlyZWN0aXZlIixlLGkpLG8udXNlc0luaGVyaXRhbmNlJiZ4aihuKSx7bWV0YWRhdGE6byxzb3VyY2VNYXBVcmw6aX19ZnVuY3Rpb24gdmoobix0KXtsZXQgZT1udWxsO09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLEtjLHtnZXQ6KCk9PntpZihudWxsPT09ZSl7bGV0IGk9Ymoobix0KSxyPUZzKCk7ZT1yLmNvbXBpbGVGYWN0b3J5KCRkLGBuZzovLy8ke24ubmFtZX0vXHUwMjc1ZmFjLmpzYCx7bmFtZTppLm1ldGFkYXRhLm5hbWUsdHlwZTppLm1ldGFkYXRhLnR5cGUsdHlwZUFyZ3VtZW50Q291bnQ6MCxkZXBzOlBNKG4pLHRhcmdldDpyLkZhY3RvcnlUYXJnZXQuRGlyZWN0aXZlfSl9cmV0dXJuIGV9LGNvbmZpZ3VyYWJsZTohMX0pfWZ1bmN0aW9uIExkZShuKXtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG4ucHJvdG90eXBlKT09PU9iamVjdC5wcm90b3R5cGV9ZnVuY3Rpb24geWoobix0KXtsZXQgZT1uaygpLGk9ZS5vd25Qcm9wTWV0YWRhdGEobik7cmV0dXJue25hbWU6bi5uYW1lLHR5cGU6bixzZWxlY3Rvcjp2b2lkIDAhPT10LnNlbGVjdG9yP3Quc2VsZWN0b3I6bnVsbCxob3N0OnQuaG9zdHx8WmMscHJvcE1ldGFkYXRhOmksaW5wdXRzOnQuaW5wdXRzfHxqaSxvdXRwdXRzOnQub3V0cHV0c3x8amkscXVlcmllczpYSChuLGksQ2opLGxpZmVjeWNsZTp7dXNlc09uQ2hhbmdlczplLmhhc0xpZmVjeWNsZUhvb2sobiwibmdPbkNoYW5nZXMiKX0sdHlwZVNvdXJjZVNwYW46bnVsbCx1c2VzSW5oZXJpdGFuY2U6IUxkZShuKSxleHBvcnRBczpIZGUodC5leHBvcnRBcykscHJvdmlkZXJzOnQucHJvdmlkZXJzfHxudWxsLHZpZXdRdWVyaWVzOlhIKG4saSxNaiksaXNTdGFuZGFsb25lOiEhdC5zdGFuZGFsb25lLGhvc3REaXJlY3RpdmVzOnQuaG9zdERpcmVjdGl2ZXM/Lm1hcChyPT4iZnVuY3Rpb24iPT10eXBlb2Ygcj97ZGlyZWN0aXZlOnJ9OnIpfHxudWxsfX1mdW5jdGlvbiB4aihuKXtsZXQgdD1PYmplY3QucHJvdG90eXBlLGU9T2JqZWN0LmdldFByb3RvdHlwZU9mKG4ucHJvdG90eXBlKS5jb25zdHJ1Y3Rvcjtmb3IoO2UmJmUhPT10OykhZXUoZSkmJiFPcyhlKSYmVWRlKGUpJiZfaihlLG51bGwpLGU9T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfWZ1bmN0aW9uIEJkZShuKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/U2oobik6QWkobil9ZnVuY3Rpb24gVmRlKG4sdCl7cmV0dXJue3Byb3BlcnR5TmFtZTpuLHByZWRpY2F0ZTpCZGUodC5zZWxlY3RvciksZGVzY2VuZGFudHM6dC5kZXNjZW5kYW50cyxmaXJzdDp0LmZpcnN0LHJlYWQ6dC5yZWFkP3QucmVhZDpudWxsLHN0YXRpYzohIXQuc3RhdGljLGVtaXREaXN0aW5jdENoYW5nZXNPbmx5OiEhdC5lbWl0RGlzdGluY3RDaGFuZ2VzT25seX19ZnVuY3Rpb24gWEgobix0LGUpe2xldCBpPVtdO2ZvcihsZXQgciBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkocikpe2xldCBvPXRbcl07by5mb3JFYWNoKGE9PntpZihlKGEpKXtpZighYS5zZWxlY3Rvcil0aHJvdyBuZXcgRXJyb3IoYENhbid0IGNvbnN0cnVjdCBhIHF1ZXJ5IGZvciB0aGUgcHJvcGVydHkgIiR7cn0iIG9mICIke0JQKG4pfSIgc2luY2UgdGhlIHF1ZXJ5IHNlbGVjdG9yIHdhc24ndCBkZWZpbmVkLmApO2lmKG8uc29tZSh3aikpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY29tYmluZSBASW5wdXQgZGVjb3JhdG9ycyB3aXRoIHF1ZXJ5IGRlY29yYXRvcnMiKTtpLnB1c2goVmRlKHIsYSkpfX0pfXJldHVybiBpfWZ1bmN0aW9uIEhkZShuKXtyZXR1cm4gdm9pZCAwPT09bj9udWxsOlNqKG4pfWZ1bmN0aW9uIENqKG4pe2xldCB0PW4ubmdNZXRhZGF0YU5hbWU7cmV0dXJuIkNvbnRlbnRDaGlsZCI9PT10fHwiQ29udGVudENoaWxkcmVuIj09PXR9ZnVuY3Rpb24gTWoobil7bGV0IHQ9bi5uZ01ldGFkYXRhTmFtZTtyZXR1cm4iVmlld0NoaWxkIj09PXR8fCJWaWV3Q2hpbGRyZW4iPT09dH1mdW5jdGlvbiB3aihuKXtyZXR1cm4iSW5wdXQiPT09bi5uZ01ldGFkYXRhTmFtZX1mdW5jdGlvbiBTaihuKXtyZXR1cm4gbi5zcGxpdCgiLCIpLm1hcCh0PT50LnRyaW0oKSl9dmFyIHpkZT1bIm5nT25DaGFuZ2VzIiwibmdPbkluaXQiLCJuZ09uRGVzdHJveSIsIm5nRG9DaGVjayIsIm5nQWZ0ZXJWaWV3SW5pdCIsIm5nQWZ0ZXJWaWV3Q2hlY2tlZCIsIm5nQWZ0ZXJDb250ZW50SW5pdCIsIm5nQWZ0ZXJDb250ZW50Q2hlY2tlZCJdO2Z1bmN0aW9uIFVkZShuKXtsZXQgdD1uaygpO2lmKHpkZS5zb21lKGk9PnQuaGFzTGlmZWN5Y2xlSG9vayhuLGkpKSlyZXR1cm4hMDtsZXQgZT10LnByb3BNZXRhZGF0YShuKTtmb3IobGV0IGkgaW4gZSl7bGV0IHI9ZVtpXTtmb3IobGV0IG89MDtvPHIubGVuZ3RoO28rKyl7bGV0IGE9cltvXSxzPWEubmdNZXRhZGF0YU5hbWU7aWYod2ooYSl8fENqKGEpfHxNaihhKXx8Ik91dHB1dCI9PT1zfHwiSG9zdEJpbmRpbmciPT09c3x8Ikhvc3RMaXN0ZW5lciI9PT1zKXJldHVybiEwfX1yZXR1cm4hMX1mdW5jdGlvbiBZSChuLHQpe3JldHVybnt0eXBlOm4sbmFtZTpuLm5hbWUscGlwZU5hbWU6dC5uYW1lLHB1cmU6dm9pZCAwPT09dC5wdXJlfHx0LnB1cmUsaXNTdGFuZGFsb25lOiEhdC5zdGFuZGFsb25lfX12YXIgR2RlPWNiKCJEaXJlY3RpdmUiLChuPXt9KT0+bix2b2lkIDAsdm9pZCAwLChuLHQpPT5faihuLHQpKTtmdW5jdGlvbiB4TSguLi5uKXt9Y2IoIkNvbXBvbmVudCIsKG49e30pPT4oe2NoYW5nZURldGVjdGlvbjpCXy5EZWZhdWx0LC4uLm59KSxHZGUsdm9pZCAwLChuLHQpPT5mdW5jdGlvbihuLHQpe2xldCBlPW51bGw7KGZ1bmN0aW9uKG4sdCl7VzUodCkmJihKXy5zZXQobix0KSxHNS5hZGQobikpfSkobix0KSx2aihuLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLEVNLHtnZXQ6KCk9PntpZihudWxsPT09ZSl7bGV0IGk9RnMoKTtpZihXNSh0KSl7bGV0IGM9W2BDb21wb25lbnQgJyR7bi5uYW1lfScgaXMgbm90IHJlc29sdmVkOmBdO3Rocm93IHQudGVtcGxhdGVVcmwmJmMucHVzaChgIC0gdGVtcGxhdGVVcmw6ICR7dC50ZW1wbGF0ZVVybH1gKSx0LnN0eWxlVXJscyYmdC5zdHlsZVVybHMubGVuZ3RoJiZjLnB1c2goYCAtIHN0eWxlVXJsczogJHtKU09OLnN0cmluZ2lmeSh0LnN0eWxlVXJscyl9YCksYy5wdXNoKCJEaWQgeW91IHJ1biBhbmQgd2FpdCBmb3IgJ3Jlc29sdmVDb21wb25lbnRSZXNvdXJjZXMoKSc/IiksbmV3IEVycm9yKGMuam9pbigiXG4iKSl9bGV0IG89dC5wcmVzZXJ2ZVdoaXRlc3BhY2VzO3ZvaWQgMD09PW8mJihvPW51bGwhPT1OXyYmdm9pZCAwIT09Tl8ucHJlc2VydmVXaGl0ZXNwYWNlcyYmTl8ucHJlc2VydmVXaGl0ZXNwYWNlcyk7bGV0IGE9dC5lbmNhcHN1bGF0aW9uO3ZvaWQgMD09PWEmJihhPW51bGwhPT1OXyYmdm9pZCAwIT09Tl8uZGVmYXVsdEVuY2Fwc3VsYXRpb24/Tl8uZGVmYXVsdEVuY2Fwc3VsYXRpb246YXMuRW11bGF0ZWQpO2xldCBzPXQudGVtcGxhdGVVcmx8fGBuZzovLy8ke24ubmFtZX0vdGVtcGxhdGUuaHRtbGAsbD17Li4ueWoobix0KSx0eXBlU291cmNlU3BhbjppLmNyZWF0ZVBhcnNlU291cmNlU3BhbigiQ29tcG9uZW50IixuLm5hbWUscyksdGVtcGxhdGU6dC50ZW1wbGF0ZXx8IiIscHJlc2VydmVXaGl0ZXNwYWNlczpvLHN0eWxlczp0LnN0eWxlc3x8amksYW5pbWF0aW9uczp0LmFuaW1hdGlvbnMsZGVjbGFyYXRpb25zOltdLGNoYW5nZURldGVjdGlvbjp0LmNoYW5nZURldGVjdGlvbixlbmNhcHN1bGF0aW9uOmEsaW50ZXJwb2xhdGlvbjp0LmludGVycG9sYXRpb24sdmlld1Byb3ZpZGVyczp0LnZpZXdQcm92aWRlcnN8fG51bGx9O0lSKys7dHJ5e2lmKGwudXNlc0luaGVyaXRhbmNlJiZ4aihuKSxlPWkuY29tcGlsZUNvbXBvbmVudCgkZCxzLGwpLHQuc3RhbmRhbG9uZSl7bGV0IGM9SmQodC5pbXBvcnRzfHxqaSkse2RpcmVjdGl2ZURlZnM6ZCxwaXBlRGVmczp1fT1mdW5jdGlvbihuLHQpe2xldCBlPW51bGwsaT1udWxsO3JldHVybntkaXJlY3RpdmVEZWZzOigpPT57aWYobnVsbD09PWUpe2U9W09zKG4pXTtsZXQgYT1uZXcgU2V0O2ZvcihsZXQgcyBvZiB0KXtsZXQgbD1BaShzKTtpZighYS5oYXMobCkpaWYoYS5hZGQobCksWm0obCkpe2xldCBjPW5mKGwpO2ZvcihsZXQgZCBvZiBjLmV4cG9ydGVkLmRpcmVjdGl2ZXMpe2xldCB1PU9zKGQpfHxldShkKTt1JiYhYS5oYXMoZCkmJihhLmFkZChkKSxlLnB1c2godSkpfX1lbHNle2xldCBjPU9zKGwpfHxldShsKTtjJiZlLnB1c2goYyl9fX1yZXR1cm4gZX0scGlwZURlZnM6KCk9PntpZihudWxsPT09aSl7aT1bXTtsZXQgYT1uZXcgU2V0O2ZvcihsZXQgcyBvZiB0KXtsZXQgbD1BaShzKTtpZighYS5oYXMobCkpaWYoYS5hZGQobCksWm0obCkpe2xldCBjPW5mKGwpO2ZvcihsZXQgZCBvZiBjLmV4cG9ydGVkLnBpcGVzKXtsZXQgdT10dShkKTt1JiYhYS5oYXMoZCkmJihhLmFkZChkKSxpLnB1c2godSkpfX1lbHNle2xldCBjPXR1KGwpO2MmJmkucHVzaChjKX19fXJldHVybiBpfX19KG4sYyk7ZS5kaXJlY3RpdmVEZWZzPWQsZS5waXBlRGVmcz11LGUuZGVwZW5kZW5jaWVzPSgpPT5jLm1hcChBaSl9fWZpbmFsbHl7SVItLX1pZigwPT09SVImJmZ1bmN0aW9uKCl7aWYoIURSKXtEUj0hMDt0cnl7Zm9yKGxldCBuPUtDLmxlbmd0aC0xO24+PTA7bi0tKXtsZXR7bW9kdWxlVHlwZTp0LG5nTW9kdWxlOmV9PUtDW25dO2UuZGVjbGFyYXRpb25zJiZlLmRlY2xhcmF0aW9ucy5ldmVyeShmaikmJihLQy5zcGxpY2UobiwxKSxQZGUodCxlKSl9fWZpbmFsbHl7RFI9ITF9fX0oKSxmdW5jdGlvbihuKXtyZXR1cm4gdm9pZCAwIT09bi5uZ1NlbGVjdG9yU2NvcGV9KG4pKXtsZXQgYz1uZihuLm5nU2VsZWN0b3JTY29wZSk7Z2ooZSxjKX1pZih0LnNjaGVtYXMpe2lmKCF0LnN0YW5kYWxvbmUpdGhyb3cgbmV3IEVycm9yKGBUaGUgJ3NjaGVtYXMnIHdhcyBzcGVjaWZpZWQgZm9yIHRoZSAke0JQKG4pfSBidXQgaXMgb25seSB2YWxpZCBvbiBhIGNvbXBvbmVudCB0aGF0IGlzIHN0YW5kYWxvbmUuYCk7ZS5zY2hlbWFzPXQuc2NoZW1hc31lbHNlIHQuc3RhbmRhbG9uZSYmKGUuc2NoZW1hcz1bXSl9cmV0dXJuIGV9LGNvbmZpZ3VyYWJsZTohMX0pfShuLHQpKSxjYigiUGlwZSIsbj0+KHtwdXJlOiEwLC4uLm59KSx2b2lkIDAsdm9pZCAwLChuLHQpPT5mdW5jdGlvbihuLHQpe2xldCBlPW51bGwsaT1udWxsO09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLEtjLHtnZXQ6KCk9PntpZihudWxsPT09aSl7bGV0IHI9WUgobix0KSxvPUZzKCk7aT1vLmNvbXBpbGVGYWN0b3J5KCRkLGBuZzovLy8ke3IubmFtZX0vXHUwMjc1ZmFjLmpzYCx7bmFtZTpyLm5hbWUsdHlwZTpyLnR5cGUsdHlwZUFyZ3VtZW50Q291bnQ6MCxkZXBzOlBNKG4pLHRhcmdldDpvLkZhY3RvcnlUYXJnZXQuUGlwZX0pfXJldHVybiBpfSxjb25maWd1cmFibGU6ITF9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobixVUCx7Z2V0OigpPT57aWYobnVsbD09PWUpe2xldCByPVlIKG4sdCk7ZT1GcygpLmNvbXBpbGVQaXBlKCRkLGBuZzovLy8ke3IubmFtZX0vXHUwMjc1cGlwZS5qc2Ascil9cmV0dXJuIGV9LGNvbmZpZ3VyYWJsZTohMX0pfShuLHQpKSxhdSgiSW5wdXQiLG49Pih7YmluZGluZ1Byb3BlcnR5TmFtZTpufSkpLGF1KCJPdXRwdXQiLG49Pih7YmluZGluZ1Byb3BlcnR5TmFtZTpufSkpLGF1KCJIb3N0QmluZGluZyIsbj0+KHtob3N0UHJvcGVydHlOYW1lOm59KSksYXUoIkhvc3RMaXN0ZW5lciIsKG4sdCk9Pih7ZXZlbnROYW1lOm4sYXJnczp0fSkpLGNiKCJOZ01vZHVsZSIsbj0+bix2b2lkIDAsdm9pZCAwLChuLHQpPT5mdW5jdGlvbihuLHQ9e30peyhmdW5jdGlvbihuLHQsZT0hMSl7bGV0IGk9SmQodC5kZWNsYXJhdGlvbnN8fGppKSxyPW51bGw7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sczUse2NvbmZpZ3VyYWJsZTohMCxnZXQ6KCk9PihudWxsPT09ciYmKHI9RnMoKS5jb21waWxlTmdNb2R1bGUoJGQsYG5nOi8vLyR7bi5uYW1lfS9cdTAyNzVtb2QuanNgLHt0eXBlOm4sYm9vdHN0cmFwOkpkKHQuYm9vdHN0cmFwfHxqaSkubWFwKEFpKSxkZWNsYXJhdGlvbnM6aS5tYXAoQWkpLGltcG9ydHM6SmQodC5pbXBvcnRzfHxqaSkubWFwKEFpKS5tYXAocUgpLGV4cG9ydHM6SmQodC5leHBvcnRzfHxqaSkubWFwKEFpKS5tYXAocUgpLHNjaGVtYXM6dC5zY2hlbWFzP0pkKHQuc2NoZW1hcyk6bnVsbCxpZDp0LmlkfHxudWxsfSksci5zY2hlbWFzfHwoci5zY2hlbWFzPVtdKSkscil9KTtsZXQgbz1udWxsO09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLEtjLHtnZXQ6KCk9PntpZihudWxsPT09byl7bGV0IHM9RnMoKTtvPXMuY29tcGlsZUZhY3RvcnkoJGQsYG5nOi8vLyR7bi5uYW1lfS9cdTAyNzVmYWMuanNgLHtuYW1lOm4ubmFtZSx0eXBlOm4sZGVwczpQTShuKSx0YXJnZXQ6cy5GYWN0b3J5VGFyZ2V0Lk5nTW9kdWxlLHR5cGVBcmd1bWVudENvdW50OjB9KX1yZXR1cm4gb30sY29uZmlndXJhYmxlOiExfSk7bGV0IGE9bnVsbDtPYmplY3QuZGVmaW5lUHJvcGVydHkobixQUix7Z2V0OigpPT57aWYobnVsbD09PWEpe2xldCBzPXtuYW1lOm4ubmFtZSx0eXBlOm4scHJvdmlkZXJzOnQucHJvdmlkZXJzfHxqaSxpbXBvcnRzOlsodC5pbXBvcnRzfHxqaSkubWFwKEFpKSwodC5leHBvcnRzfHxqaSkubWFwKEFpKV19O2E9RnMoKS5jb21waWxlSW5qZWN0b3IoJGQsYG5nOi8vLyR7bi5uYW1lfS9cdTAyNzVpbmouanNgLHMpfXJldHVybiBhfSxjb25maWd1cmFibGU6ITF9KX0pKG4sdCksdm9pZCAwIT09dC5pZCYmcTUobix0LmlkKSxmdW5jdGlvbihuLHQpe0tDLnB1c2goe21vZHVsZVR5cGU6bixuZ01vZHVsZTp0fSl9KG4sdCl9KG4sdCkpO3ZhciBPaz1uZXcgdGUoIkFwcGxpY2F0aW9uIEluaXRpYWxpemVyIiksS009KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmFwcEluaXRzPWUsdGhpcy5yZXNvbHZlPXhNLHRoaXMucmVqZWN0PXhNLHRoaXMuaW5pdGlhbGl6ZWQ9ITEsdGhpcy5kb25lPSExLHRoaXMuZG9uZVByb21pc2U9bmV3IFByb21pc2UoKGkscik9Pnt0aGlzLnJlc29sdmU9aSx0aGlzLnJlamVjdD1yfSl9cnVuSW5pdGlhbGl6ZXJzKCl7aWYodGhpcy5pbml0aWFsaXplZClyZXR1cm47bGV0IGU9W10saT0oKT0+e3RoaXMuZG9uZT0hMCx0aGlzLnJlc29sdmUoKX07aWYodGhpcy5hcHBJbml0cylmb3IobGV0IHI9MDtyPHRoaXMuYXBwSW5pdHMubGVuZ3RoO3IrKyl7bGV0IG89dGhpcy5hcHBJbml0c1tyXSgpO2lmKENmKG8pKWUucHVzaChvKTtlbHNlIGlmKElrKG8pKXtsZXQgYT1uZXcgUHJvbWlzZSgocyxsKT0+e28uc3Vic2NyaWJlKHtjb21wbGV0ZTpzLGVycm9yOmx9KX0pO2UucHVzaChhKX19UHJvbWlzZS5hbGwoZSkudGhlbigoKT0+e2koKX0pLmNhdGNoKHI9Pnt0aGlzLnJlamVjdChyKX0pLDA9PT1lLmxlbmd0aCYmaSgpLHRoaXMuaW5pdGlhbGl6ZWQ9ITB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oT2ssOCkpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLCRwPW5ldyB0ZSgiQXBwSWQiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuYCR7QVIoKX0ke0FSKCl9JHtBUigpfWB9fSk7ZnVuY3Rpb24gQVIoKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSg5NytNYXRoLmZsb29yKDI1Kk1hdGgucmFuZG9tKCkpKX12YXIgRms9bmV3IHRlKCJQbGF0Zm9ybSBJbml0aWFsaXplciIpLGZjPW5ldyB0ZSgiUGxhdGZvcm0gSUQiLHtwcm92aWRlZEluOiJwbGF0Zm9ybSIsZmFjdG9yeTooKT0+InVua25vd24ifSkscGk9KG5ldyB0ZSgiQXBwbGljYXRpb24gUGFja2FnZXMgUm9vdCBVUkwiKSxuZXcgdGUoIkFuaW1hdGlvbk1vZHVsZVR5cGUiKSksYWQ9bmV3IHRlKCJMb2NhbGVJZCIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PiRuKGFkLENpLk9wdGlvbmFsfENpLlNraXBTZWxmKXx8dHlwZW9mICRsb2NhbGl6ZTwidSImJiRsb2NhbGl6ZS5sb2NhbGV8fGJNfSksUWRlPShuZXcgdGUoIkRlZmF1bHRDdXJyZW5jeUNvZGUiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT4iVVNEIn0pLG5ldyB0ZSgiVHJhbnNsYXRpb25zIiksbmV3IHRlKCJUcmFuc2xhdGlvbnNGb3JtYXQiKSxuZXcgdGUoImNvbXBpbGVyT3B0aW9ucyIpLFByb21pc2UucmVzb2x2ZSgwKSk7ZnVuY3Rpb24gSVAobil7dHlwZW9mIFpvbmU+InUiP1FkZS50aGVuKCgpPT57biYmbi5hcHBseShudWxsLG51bGwpfSk6Wm9uZS5jdXJyZW50LnNjaGVkdWxlTWljcm9UYXNrKCJzY2hlZHVsZU1pY3JvdGFzayIsbil9dmFyIG90PWNsYXNze2NvbnN0cnVjdG9yKHtlbmFibGVMb25nU3RhY2tUcmFjZTp0PSExLHNob3VsZENvYWxlc2NlRXZlbnRDaGFuZ2VEZXRlY3Rpb246ZT0hMSxzaG91bGRDb2FsZXNjZVJ1bkNoYW5nZURldGVjdGlvbjppPSExfSl7aWYodGhpcy5oYXNQZW5kaW5nTWFjcm90YXNrcz0hMSx0aGlzLmhhc1BlbmRpbmdNaWNyb3Rhc2tzPSExLHRoaXMuaXNTdGFibGU9ITAsdGhpcy5vblVuc3RhYmxlPW5ldyBGKCExKSx0aGlzLm9uTWljcm90YXNrRW1wdHk9bmV3IEYoITEpLHRoaXMub25TdGFibGU9bmV3IEYoITEpLHRoaXMub25FcnJvcj1uZXcgRighMSksdHlwZW9mIFpvbmU+InUiKXRocm93IG5ldyB4dCg5MDgsITEpO1pvbmUuYXNzZXJ0Wm9uZVBhdGNoZWQoKTtsZXQgcj10aGlzO3IuX25lc3Rpbmc9MCxyLl9vdXRlcj1yLl9pbm5lcj1ab25lLmN1cnJlbnQsWm9uZS5UYXNrVHJhY2tpbmdab25lU3BlYyYmKHIuX2lubmVyPXIuX2lubmVyLmZvcmsobmV3IFpvbmUuVGFza1RyYWNraW5nWm9uZVNwZWMpKSx0JiZab25lLmxvbmdTdGFja1RyYWNlWm9uZVNwZWMmJihyLl9pbm5lcj1yLl9pbm5lci5mb3JrKFpvbmUubG9uZ1N0YWNrVHJhY2Vab25lU3BlYykpLHIuc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbj0haSYmZSxyLnNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uPWksci5sYXN0UmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQ9LTEsci5uYXRpdmVSZXF1ZXN0QW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24oKXtsZXQgbj16ci5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUsdD16ci5jYW5jZWxBbmltYXRpb25GcmFtZTtpZih0eXBlb2YgWm9uZTwidSImJm4mJnQpe2xldCBlPW5bWm9uZS5fX3N5bWJvbF9fKCJPcmlnaW5hbERlbGVnYXRlIildO2UmJihuPWUpO2xldCBpPXRbWm9uZS5fX3N5bWJvbF9fKCJPcmlnaW5hbERlbGVnYXRlIildO2kmJih0PWkpfXJldHVybntuYXRpdmVSZXF1ZXN0QW5pbWF0aW9uRnJhbWU6bixuYXRpdmVDYW5jZWxBbmltYXRpb25GcmFtZTp0fX0oKS5uYXRpdmVSZXF1ZXN0QW5pbWF0aW9uRnJhbWUsZnVuY3Rpb24obil7bGV0IHQ9KCk9PnshZnVuY3Rpb24obil7bi5pc0NoZWNrU3RhYmxlUnVubmluZ3x8LTEhPT1uLmxhc3RSZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZHx8KG4ubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkPW4ubmF0aXZlUmVxdWVzdEFuaW1hdGlvbkZyYW1lLmNhbGwoenIsKCk9PntuLmZha2VUb3BFdmVudFRhc2t8fChuLmZha2VUb3BFdmVudFRhc2s9Wm9uZS5yb290LnNjaGVkdWxlRXZlbnRUYXNrKCJmYWtlVG9wRXZlbnRUYXNrIiwoKT0+e24ubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkPS0xLEFQKG4pLG4uaXNDaGVja1N0YWJsZVJ1bm5pbmc9ITAsTmsobiksbi5pc0NoZWNrU3RhYmxlUnVubmluZz0hMX0sdm9pZCAwLCgpPT57fSwoKT0+e30pKSxuLmZha2VUb3BFdmVudFRhc2suaW52b2tlKCl9KSxBUChuKSl9KG4pfTtuLl9pbm5lcj1uLl9pbm5lci5mb3JrKHtuYW1lOiJhbmd1bGFyIixwcm9wZXJ0aWVzOntpc0FuZ3VsYXJab25lOiEwfSxvbkludm9rZVRhc2s6KGUsaSxyLG8sYSxzKT0+e3RyeXtyZXR1cm4gUUgobiksZS5pbnZva2VUYXNrKHIsbyxhLHMpfWZpbmFsbHl7KG4uc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbiYmImV2ZW50VGFzayI9PT1vLnR5cGV8fG4uc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb24pJiZ0KCksWkgobil9fSxvbkludm9rZTooZSxpLHIsbyxhLHMsbCk9Pnt0cnl7cmV0dXJuIFFIKG4pLGUuaW52b2tlKHIsbyxhLHMsbCl9ZmluYWxseXtuLnNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uJiZ0KCksWkgobil9fSxvbkhhc1Rhc2s6KGUsaSxyLG8pPT57ZS5oYXNUYXNrKHIsbyksaT09PXImJigibWljcm9UYXNrIj09by5jaGFuZ2U/KG4uX2hhc1BlbmRpbmdNaWNyb3Rhc2tzPW8ubWljcm9UYXNrLEFQKG4pLE5rKG4pKToibWFjcm9UYXNrIj09by5jaGFuZ2UmJihuLmhhc1BlbmRpbmdNYWNyb3Rhc2tzPW8ubWFjcm9UYXNrKSl9LG9uSGFuZGxlRXJyb3I6KGUsaSxyLG8pPT4oZS5oYW5kbGVFcnJvcihyLG8pLG4ucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pm4ub25FcnJvci5lbWl0KG8pKSwhMSl9KX0ocil9c3RhdGljIGlzSW5Bbmd1bGFyWm9uZSgpe3JldHVybiB0eXBlb2YgWm9uZTwidSImJiEwPT09Wm9uZS5jdXJyZW50LmdldCgiaXNBbmd1bGFyWm9uZSIpfXN0YXRpYyBhc3NlcnRJbkFuZ3VsYXJab25lKCl7aWYoIW90LmlzSW5Bbmd1bGFyWm9uZSgpKXRocm93IG5ldyB4dCg5MDksITEpfXN0YXRpYyBhc3NlcnROb3RJbkFuZ3VsYXJab25lKCl7aWYob3QuaXNJbkFuZ3VsYXJab25lKCkpdGhyb3cgbmV3IHh0KDkwOSwhMSl9cnVuKHQsZSxpKXtyZXR1cm4gdGhpcy5faW5uZXIucnVuKHQsZSxpKX1ydW5UYXNrKHQsZSxpLHIpe2xldCBvPXRoaXMuX2lubmVyLGE9by5zY2hlZHVsZUV2ZW50VGFzaygiTmdab25lRXZlbnQ6ICIrcix0LEtkZSx4TSx4TSk7dHJ5e3JldHVybiBvLnJ1blRhc2soYSxlLGkpfWZpbmFsbHl7by5jYW5jZWxUYXNrKGEpfX1ydW5HdWFyZGVkKHQsZSxpKXtyZXR1cm4gdGhpcy5faW5uZXIucnVuR3VhcmRlZCh0LGUsaSl9cnVuT3V0c2lkZUFuZ3VsYXIodCl7cmV0dXJuIHRoaXMuX291dGVyLnJ1bih0KX19LEtkZT17fTtmdW5jdGlvbiBOayhuKXtpZigwPT1uLl9uZXN0aW5nJiYhbi5oYXNQZW5kaW5nTWljcm90YXNrcyYmIW4uaXNTdGFibGUpdHJ5e24uX25lc3RpbmcrKyxuLm9uTWljcm90YXNrRW1wdHkuZW1pdChudWxsKX1maW5hbGx5e2lmKG4uX25lc3RpbmctLSwhbi5oYXNQZW5kaW5nTWljcm90YXNrcyl0cnl7bi5ydW5PdXRzaWRlQW5ndWxhcigoKT0+bi5vblN0YWJsZS5lbWl0KG51bGwpKX1maW5hbGx5e24uaXNTdGFibGU9ITB9fX1mdW5jdGlvbiBBUChuKXtuLmhhc1BlbmRpbmdNaWNyb3Rhc2tzPSEhKG4uX2hhc1BlbmRpbmdNaWNyb3Rhc2tzfHwobi5zaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9ufHxuLnNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uKSYmLTEhPT1uLmxhc3RSZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZCl9ZnVuY3Rpb24gUUgobil7bi5fbmVzdGluZysrLG4uaXNTdGFibGUmJihuLmlzU3RhYmxlPSExLG4ub25VbnN0YWJsZS5lbWl0KG51bGwpKX1mdW5jdGlvbiBaSChuKXtuLl9uZXN0aW5nLS0sTmsobil9dmFyIEJrLExrPW5ldyB0ZSgiIiksTWI9bmV3IHRlKCIiKSxKTT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl9uZ1pvbmU9ZSx0aGlzLnJlZ2lzdHJ5PWksdGhpcy5fcGVuZGluZ0NvdW50PTAsdGhpcy5faXNab25lU3RhYmxlPSEwLHRoaXMuX2RpZFdvcms9ITEsdGhpcy5fY2FsbGJhY2tzPVtdLHRoaXMudGFza1RyYWNraW5nWm9uZT1udWxsLEJrfHwoZnVuY3Rpb24obil7Qms9bn0ociksci5hZGRUb1dpbmRvdyhpKSksdGhpcy5fd2F0Y2hBbmd1bGFyRXZlbnRzKCksZS5ydW4oKCk9Pnt0aGlzLnRhc2tUcmFja2luZ1pvbmU9dHlwZW9mIFpvbmU+InUiP251bGw6Wm9uZS5jdXJyZW50LmdldCgiVGFza1RyYWNraW5nWm9uZSIpfSl9X3dhdGNoQW5ndWxhckV2ZW50cygpe3RoaXMuX25nWm9uZS5vblVuc3RhYmxlLnN1YnNjcmliZSh7bmV4dDooKT0+e3RoaXMuX2RpZFdvcms9ITAsdGhpcy5faXNab25lU3RhYmxlPSExfX0pLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX25nWm9uZS5vblN0YWJsZS5zdWJzY3JpYmUoe25leHQ6KCk9PntvdC5hc3NlcnROb3RJbkFuZ3VsYXJab25lKCksSVAoKCk9Pnt0aGlzLl9pc1pvbmVTdGFibGU9ITAsdGhpcy5fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpfSl9fSl9KX1pbmNyZWFzZVBlbmRpbmdSZXF1ZXN0Q291bnQoKXtyZXR1cm4gdGhpcy5fcGVuZGluZ0NvdW50Kz0xLHRoaXMuX2RpZFdvcms9ITAsdGhpcy5fcGVuZGluZ0NvdW50fWRlY3JlYXNlUGVuZGluZ1JlcXVlc3RDb3VudCgpe2lmKHRoaXMuX3BlbmRpbmdDb3VudC09MSx0aGlzLl9wZW5kaW5nQ291bnQ8MCl0aHJvdyBuZXcgRXJyb3IoInBlbmRpbmcgYXN5bmMgcmVxdWVzdHMgYmVsb3cgemVybyIpO3JldHVybiB0aGlzLl9ydW5DYWxsYmFja3NJZlJlYWR5KCksdGhpcy5fcGVuZGluZ0NvdW50fWlzU3RhYmxlKCl7cmV0dXJuIHRoaXMuX2lzWm9uZVN0YWJsZSYmMD09PXRoaXMuX3BlbmRpbmdDb3VudCYmIXRoaXMuX25nWm9uZS5oYXNQZW5kaW5nTWFjcm90YXNrc31fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpe2lmKHRoaXMuaXNTdGFibGUoKSlJUCgoKT0+e2Zvcig7MCE9PXRoaXMuX2NhbGxiYWNrcy5sZW5ndGg7KXtsZXQgZT10aGlzLl9jYWxsYmFja3MucG9wKCk7Y2xlYXJUaW1lb3V0KGUudGltZW91dElkKSxlLmRvbmVDYih0aGlzLl9kaWRXb3JrKX10aGlzLl9kaWRXb3JrPSExfSk7ZWxzZXtsZXQgZT10aGlzLmdldFBlbmRpbmdUYXNrcygpO3RoaXMuX2NhbGxiYWNrcz10aGlzLl9jYWxsYmFja3MuZmlsdGVyKGk9PiFpLnVwZGF0ZUNifHwhaS51cGRhdGVDYihlKXx8KGNsZWFyVGltZW91dChpLnRpbWVvdXRJZCksITEpKSx0aGlzLl9kaWRXb3JrPSEwfX1nZXRQZW5kaW5nVGFza3MoKXtyZXR1cm4gdGhpcy50YXNrVHJhY2tpbmdab25lP3RoaXMudGFza1RyYWNraW5nWm9uZS5tYWNyb1Rhc2tzLm1hcChlPT4oe3NvdXJjZTplLnNvdXJjZSxjcmVhdGlvbkxvY2F0aW9uOmUuY3JlYXRpb25Mb2NhdGlvbixkYXRhOmUuZGF0YX0pKTpbXX1hZGRDYWxsYmFjayhlLGkscil7bGV0IG89LTE7aSYmaT4wJiYobz1zZXRUaW1lb3V0KCgpPT57dGhpcy5fY2FsbGJhY2tzPXRoaXMuX2NhbGxiYWNrcy5maWx0ZXIoYT0+YS50aW1lb3V0SWQhPT1vKSxlKHRoaXMuX2RpZFdvcmssdGhpcy5nZXRQZW5kaW5nVGFza3MoKSl9LGkpKSx0aGlzLl9jYWxsYmFja3MucHVzaCh7ZG9uZUNiOmUsdGltZW91dElkOm8sdXBkYXRlQ2I6cn0pfXdoZW5TdGFibGUoZSxpLHIpe2lmKHImJiF0aGlzLnRhc2tUcmFja2luZ1pvbmUpdGhyb3cgbmV3IEVycm9yKCdUYXNrIHRyYWNraW5nIHpvbmUgaXMgcmVxdWlyZWQgd2hlbiBwYXNzaW5nIGFuIHVwZGF0ZSBjYWxsYmFjayB0byB3aGVuU3RhYmxlKCkuIElzICJ6b25lLmpzL3BsdWdpbnMvdGFzay10cmFja2luZyIgbG9hZGVkPycpO3RoaXMuYWRkQ2FsbGJhY2soZSxpLHIpLHRoaXMuX3J1bkNhbGxiYWNrc0lmUmVhZHkoKX1nZXRQZW5kaW5nUmVxdWVzdENvdW50KCl7cmV0dXJuIHRoaXMuX3BlbmRpbmdDb3VudH1yZWdpc3RlckFwcGxpY2F0aW9uKGUpe3RoaXMucmVnaXN0cnkucmVnaXN0ZXJBcHBsaWNhdGlvbihlLHRoaXMpfXVucmVnaXN0ZXJBcHBsaWNhdGlvbihlKXt0aGlzLnJlZ2lzdHJ5LnVucmVnaXN0ZXJBcHBsaWNhdGlvbihlKX1maW5kUHJvdmlkZXJzKGUsaSxyKXtyZXR1cm5bXX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhvdCksTygkTSksTyhNYikpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLCRNPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLl9hcHBsaWNhdGlvbnM9bmV3IE1hcH1yZWdpc3RlckFwcGxpY2F0aW9uKGUsaSl7dGhpcy5fYXBwbGljYXRpb25zLnNldChlLGkpfXVucmVnaXN0ZXJBcHBsaWNhdGlvbihlKXt0aGlzLl9hcHBsaWNhdGlvbnMuZGVsZXRlKGUpfXVucmVnaXN0ZXJBbGxBcHBsaWNhdGlvbnMoKXt0aGlzLl9hcHBsaWNhdGlvbnMuY2xlYXIoKX1nZXRUZXN0YWJpbGl0eShlKXtyZXR1cm4gdGhpcy5fYXBwbGljYXRpb25zLmdldChlKXx8bnVsbH1nZXRBbGxUZXN0YWJpbGl0aWVzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fYXBwbGljYXRpb25zLnZhbHVlcygpKX1nZXRBbGxSb290RWxlbWVudHMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9hcHBsaWNhdGlvbnMua2V5cygpKX1maW5kVGVzdGFiaWxpdHlJblRyZWUoZSxpPSEwKXtyZXR1cm4gQms/LmZpbmRUZXN0YWJpbGl0eUluVHJlZSh0aGlzLGUsaSk/P251bGx9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KSxufSkoKSxxXz1udWxsLEVqPW5ldyB0ZSgiQWxsb3dNdWx0aXBsZVRva2VuIiksVGo9bmV3IHRlKCJQbGF0Zm9ybURlc3Ryb3lMaXN0ZW5lcnMiKSx0dWU9bmV3IHRlKCJhcHBCb290c3RyYXBMaXN0ZW5lciIpO2Z1bmN0aW9uIFZrKG4sdCxlPVtdKXtsZXQgaT1gUGxhdGZvcm06ICR7dH1gLHI9bmV3IHRlKGkpO3JldHVybihvPVtdKT0+e2xldCBhPURqKCk7aWYoIWF8fGEuaW5qZWN0b3IuZ2V0KEVqLCExKSl7bGV0IHM9Wy4uLmUsLi4ubyx7cHJvdmlkZTpyLHVzZVZhbHVlOiEwfV07bj9uKHMpOmZ1bmN0aW9uKG4pe2lmKHFfJiYhcV8uZ2V0KEVqLCExKSl0aHJvdyBuZXcgeHQoNDAwLCExKTtxXz1uO2xldCB0PW4uZ2V0KElqKTsoZnVuY3Rpb24obil7bGV0IHQ9bi5nZXQoRmssbnVsbCk7dCYmdC5mb3JFYWNoKGU9PmUoKSl9KShuKX0oZnVuY3Rpb24obj1bXSx0KXtyZXR1cm4gd2kuY3JlYXRlKHtuYW1lOnQscHJvdmlkZXJzOlt7cHJvdmlkZTpMTSx1c2VWYWx1ZToicGxhdGZvcm0ifSx7cHJvdmlkZTpUaix1c2VWYWx1ZTpuZXcgU2V0KFsoKT0+cV89bnVsbF0pfSwuLi5uXX0pfShzLGkpKX1yZXR1cm4gZnVuY3Rpb24obil7bGV0IHQ9RGooKTtpZighdCl0aHJvdyBuZXcgeHQoNDAxLCExKTtyZXR1cm4gdH0oKX19ZnVuY3Rpb24gRGooKXtyZXR1cm4gcV8/LmdldChJaik/P251bGx9dmFyIElqPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5faW5qZWN0b3I9ZSx0aGlzLl9tb2R1bGVzPVtdLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnM9W10sdGhpcy5fZGVzdHJveWVkPSExfWJvb3RzdHJhcE1vZHVsZUZhY3RvcnkoZSxpKXtsZXQgcj1mdW5jdGlvbihuLHQpe2xldCBlO3JldHVybiBlPSJub29wIj09PW4/bmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5oYXNQZW5kaW5nTWljcm90YXNrcz0hMSx0aGlzLmhhc1BlbmRpbmdNYWNyb3Rhc2tzPSExLHRoaXMuaXNTdGFibGU9ITAsdGhpcy5vblVuc3RhYmxlPW5ldyBGLHRoaXMub25NaWNyb3Rhc2tFbXB0eT1uZXcgRix0aGlzLm9uU3RhYmxlPW5ldyBGLHRoaXMub25FcnJvcj1uZXcgRn1ydW4odCxlLGkpe3JldHVybiB0LmFwcGx5KGUsaSl9cnVuR3VhcmRlZCh0LGUsaSl7cmV0dXJuIHQuYXBwbHkoZSxpKX1ydW5PdXRzaWRlQW5ndWxhcih0KXtyZXR1cm4gdCgpfXJ1blRhc2sodCxlLGkscil7cmV0dXJuIHQuYXBwbHkoZSxpKX19Oigiem9uZS5qcyI9PT1uP3ZvaWQgMDpuKXx8bmV3IG90KHQpLGV9KGk/Lm5nWm9uZSxmdW5jdGlvbihuKXtyZXR1cm57ZW5hYmxlTG9uZ1N0YWNrVHJhY2U6ITEsc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbjohKCFufHwhbi5uZ1pvbmVFdmVudENvYWxlc2NpbmcpfHwhMSxzaG91bGRDb2FsZXNjZVJ1bkNoYW5nZURldGVjdGlvbjohKCFufHwhbi5uZ1pvbmVSdW5Db2FsZXNjaW5nKXx8ITF9fShpKSksbz1be3Byb3ZpZGU6b3QsdXNlVmFsdWU6cn1dO3JldHVybiByLnJ1bigoKT0+e2xldCBhPXdpLmNyZWF0ZSh7cHJvdmlkZXJzOm8scGFyZW50OnRoaXMuaW5qZWN0b3IsbmFtZTplLm1vZHVsZVR5cGUubmFtZX0pLHM9ZS5jcmVhdGUoYSksbD1zLmluamVjdG9yLmdldChsYSxudWxsKTtpZighbCl0aHJvdyBuZXcgeHQoNDAyLCExKTtyZXR1cm4gci5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2xldCBjPXIub25FcnJvci5zdWJzY3JpYmUoe25leHQ6ZD0+e2wuaGFuZGxlRXJyb3IoZCl9fSk7cy5vbkRlc3Ryb3koKCk9PntKQyh0aGlzLl9tb2R1bGVzLHMpLGMudW5zdWJzY3JpYmUoKX0pfSksZnVuY3Rpb24obix0LGUpe3RyeXtsZXQgaT1lKCk7cmV0dXJuIENmKGkpP2kuY2F0Y2gocj0+e3Rocm93IHQucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pm4uaGFuZGxlRXJyb3IocikpLHJ9KTppfWNhdGNoKGkpe3Rocm93IHQucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pm4uaGFuZGxlRXJyb3IoaSkpLGl9fShsLHIsKCk9PntsZXQgYz1zLmluamVjdG9yLmdldChLTSk7cmV0dXJuIGMucnVuSW5pdGlhbGl6ZXJzKCksYy5kb25lUHJvbWlzZS50aGVuKCgpPT4oZnVuY3Rpb24obil7KGZ1bmN0aW9uKG4sdCl7bnVsbD09biYmaTUoIkV4cGVjdGVkIGxvY2FsZUlkIHRvIGJlIGRlZmluZWQiLG4sbnVsbCwiIT0iKX0pKG4pLCJzdHJpbmciPT10eXBlb2YgbiYmKHpVPW4udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIi0iKSl9KHMuaW5qZWN0b3IuZ2V0KGFkLGJNKXx8Yk0pLHRoaXMuX21vZHVsZURvQm9vdHN0cmFwKHMpLHMpKX0pfSl9Ym9vdHN0cmFwTW9kdWxlKGUsaT1bXSl7bGV0IHI9QWooe30saSk7cmV0dXJuIGZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1uZXcgU1AoZSk7cmV0dXJuIFByb21pc2UucmVzb2x2ZShpKX0oMCwwLGUpLnRoZW4obz0+dGhpcy5ib290c3RyYXBNb2R1bGVGYWN0b3J5KG8scikpfV9tb2R1bGVEb0Jvb3RzdHJhcChlKXtsZXQgaT1lLmluamVjdG9yLmdldChnYyk7aWYoZS5fYm9vdHN0cmFwQ29tcG9uZW50cy5sZW5ndGg+MCllLl9ib290c3RyYXBDb21wb25lbnRzLmZvckVhY2gocj0+aS5ib290c3RyYXAocikpO2Vsc2V7aWYoIWUuaW5zdGFuY2UubmdEb0Jvb3RzdHJhcCl0aHJvdyBuZXcgeHQoLTQwMywhMSk7ZS5pbnN0YW5jZS5uZ0RvQm9vdHN0cmFwKGkpfXRoaXMuX21vZHVsZXMucHVzaChlKX1vbkRlc3Ryb3koZSl7dGhpcy5fZGVzdHJveUxpc3RlbmVycy5wdXNoKGUpfWdldCBpbmplY3Rvcigpe3JldHVybiB0aGlzLl9pbmplY3Rvcn1kZXN0cm95KCl7aWYodGhpcy5fZGVzdHJveWVkKXRocm93IG5ldyB4dCg0MDQsITEpO3RoaXMuX21vZHVsZXMuc2xpY2UoKS5mb3JFYWNoKGk9PmkuZGVzdHJveSgpKSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzLmZvckVhY2goaT0+aSgpKTtsZXQgZT10aGlzLl9pbmplY3Rvci5nZXQoVGosbnVsbCk7ZSYmKGUuZm9yRWFjaChpPT5pKCkpLGUuY2xlYXIoKSksdGhpcy5fZGVzdHJveWVkPSEwfWdldCBkZXN0cm95ZWQoKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKHdpKSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InBsYXRmb3JtIn0pLG59KSgpO2Z1bmN0aW9uIEFqKG4sdCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dC5yZWR1Y2UoQWosbik6ey4uLm4sLi4udH19dmFyIGdjPSgoKT0+e2NsYXNzIG57Z2V0IGRlc3Ryb3llZCgpe3JldHVybiB0aGlzLl9kZXN0cm95ZWR9Z2V0IGluamVjdG9yKCl7cmV0dXJuIHRoaXMuX2luamVjdG9yfWNvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl96b25lPWUsdGhpcy5faW5qZWN0b3I9aSx0aGlzLl9leGNlcHRpb25IYW5kbGVyPXIsdGhpcy5fYm9vdHN0cmFwTGlzdGVuZXJzPVtdLHRoaXMuX3ZpZXdzPVtdLHRoaXMuX3J1bm5pbmdUaWNrPSExLHRoaXMuX3N0YWJsZT0hMCx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZGVzdHJveUxpc3RlbmVycz1bXSx0aGlzLmNvbXBvbmVudFR5cGVzPVtdLHRoaXMuY29tcG9uZW50cz1bXSx0aGlzLl9vbk1pY3JvdGFza0VtcHR5U3Vic2NyaXB0aW9uPXRoaXMuX3pvbmUub25NaWNyb3Rhc2tFbXB0eS5zdWJzY3JpYmUoe25leHQ6KCk9Pnt0aGlzLl96b25lLnJ1bigoKT0+e3RoaXMudGljaygpfSl9fSk7bGV0IG89bmV3IEt0KHM9Pnt0aGlzLl9zdGFibGU9dGhpcy5fem9uZS5pc1N0YWJsZSYmIXRoaXMuX3pvbmUuaGFzUGVuZGluZ01hY3JvdGFza3MmJiF0aGlzLl96b25lLmhhc1BlbmRpbmdNaWNyb3Rhc2tzLHRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntzLm5leHQodGhpcy5fc3RhYmxlKSxzLmNvbXBsZXRlKCl9KX0pLGE9bmV3IEt0KHM9PntsZXQgbDt0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57bD10aGlzLl96b25lLm9uU3RhYmxlLnN1YnNjcmliZSgoKT0+e290LmFzc2VydE5vdEluQW5ndWxhclpvbmUoKSxJUCgoKT0+eyF0aGlzLl9zdGFibGUmJiF0aGlzLl96b25lLmhhc1BlbmRpbmdNYWNyb3Rhc2tzJiYhdGhpcy5fem9uZS5oYXNQZW5kaW5nTWljcm90YXNrcyYmKHRoaXMuX3N0YWJsZT0hMCxzLm5leHQoITApKX0pfSl9KTtsZXQgYz10aGlzLl96b25lLm9uVW5zdGFibGUuc3Vic2NyaWJlKCgpPT57b3QuYXNzZXJ0SW5Bbmd1bGFyWm9uZSgpLHRoaXMuX3N0YWJsZSYmKHRoaXMuX3N0YWJsZT0hMSx0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57cy5uZXh0KCExKX0pKX0pO3JldHVybigpPT57bC51bnN1YnNjcmliZSgpLGMudW5zdWJzY3JpYmUoKX19KTt0aGlzLmlzU3RhYmxlPXRuKG8sYS5waXBlKFRhKCkpKX1ib290c3RyYXAoZSxpKXtsZXQgYSxyPWUgaW5zdGFuY2VvZiBoTTtpZighdGhpcy5faW5qZWN0b3IuZ2V0KEtNKS5kb25lKXRocm93IXImJmw1KGUpLG5ldyB4dCg0MDUsZmFsc2UpO2E9cj9lOnRoaXMuX2luamVjdG9yLmdldChobykucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoZSksdGhpcy5jb21wb25lbnRUeXBlcy5wdXNoKGEuY29tcG9uZW50VHlwZSk7bGV0IHM9ZnVuY3Rpb24obil7cmV0dXJuIG4uaXNCb3VuZFRvTW9kdWxlfShhKT92b2lkIDA6dGhpcy5faW5qZWN0b3IuZ2V0KGl1KSxjPWEuY3JlYXRlKHdpLk5VTEwsW10saXx8YS5zZWxlY3RvcixzKSxkPWMubG9jYXRpb24ubmF0aXZlRWxlbWVudCx1PWMuaW5qZWN0b3IuZ2V0KExrLG51bGwpO3JldHVybiB1Py5yZWdpc3RlckFwcGxpY2F0aW9uKGQpLGMub25EZXN0cm95KCgpPT57dGhpcy5kZXRhY2hWaWV3KGMuaG9zdFZpZXcpLEpDKHRoaXMuY29tcG9uZW50cyxjKSx1Py51bnJlZ2lzdGVyQXBwbGljYXRpb24oZCl9KSx0aGlzLl9sb2FkQ29tcG9uZW50KGMpLGN9dGljaygpe2lmKHRoaXMuX3J1bm5pbmdUaWNrKXRocm93IG5ldyB4dCgxMDEsITEpO3RyeXt0aGlzLl9ydW5uaW5nVGljaz0hMDtmb3IobGV0IGUgb2YgdGhpcy5fdmlld3MpZS5kZXRlY3RDaGFuZ2VzKCl9Y2F0Y2goZSl7dGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+dGhpcy5fZXhjZXB0aW9uSGFuZGxlci5oYW5kbGVFcnJvcihlKSl9ZmluYWxseXt0aGlzLl9ydW5uaW5nVGljaz0hMX19YXR0YWNoVmlldyhlKXtsZXQgaT1lO3RoaXMuX3ZpZXdzLnB1c2goaSksaS5hdHRhY2hUb0FwcFJlZih0aGlzKX1kZXRhY2hWaWV3KGUpe2xldCBpPWU7SkModGhpcy5fdmlld3MsaSksaS5kZXRhY2hGcm9tQXBwUmVmKCl9X2xvYWRDb21wb25lbnQoZSl7dGhpcy5hdHRhY2hWaWV3KGUuaG9zdFZpZXcpLHRoaXMudGljaygpLHRoaXMuY29tcG9uZW50cy5wdXNoKGUpO2xldCBpPXRoaXMuX2luamVjdG9yLmdldCh0dWUsW10pO2kucHVzaCguLi50aGlzLl9ib290c3RyYXBMaXN0ZW5lcnMpLGkuZm9yRWFjaChyPT5yKGUpKX1uZ09uRGVzdHJveSgpe2lmKCF0aGlzLl9kZXN0cm95ZWQpdHJ5e3RoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMuZm9yRWFjaChlPT5lKCkpLHRoaXMuX3ZpZXdzLnNsaWNlKCkuZm9yRWFjaChlPT5lLmRlc3Ryb3koKSksdGhpcy5fb25NaWNyb3Rhc2tFbXB0eVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfWZpbmFsbHl7dGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuX3ZpZXdzPVtdLHRoaXMuX2Jvb3RzdHJhcExpc3RlbmVycz1bXSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzPVtdfX1vbkRlc3Ryb3koZSl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMucHVzaChlKSwoKT0+SkModGhpcy5fZGVzdHJveUxpc3RlbmVycyxlKX1kZXN0cm95KCl7aWYodGhpcy5fZGVzdHJveWVkKXRocm93IG5ldyB4dCg0MDYsITEpO2xldCBlPXRoaXMuX2luamVjdG9yO2UuZGVzdHJveSYmIWUuZGVzdHJveWVkJiZlLmRlc3Ryb3koKX1nZXQgdmlld0NvdW50KCl7cmV0dXJuIHRoaXMuX3ZpZXdzLmxlbmd0aH13YXJuSWZEZXN0cm95ZWQoKXt9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8ob3QpLE8obGMpLE8obGEpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKTtmdW5jdGlvbiBKQyhuLHQpe2xldCBlPW4uaW5kZXhPZih0KTtlPi0xJiZuLnNwbGljZShlLDEpfXZhciBRdD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5fX05HX0VMRU1FTlRfSURfXz1wdWUsbn0pKCk7ZnVuY3Rpb24gcHVlKG4pe3JldHVybiBmdW5jdGlvbihuLHQsZSl7aWYoRE0obikmJiFlKXtsZXQgaT1lZChuLmluZGV4LHQpO3JldHVybiBuZXcgUXAoaSxpKX1yZXR1cm4gNDcmbi50eXBlP25ldyBRcCh0W3hsXSx0KTpudWxsfShMbygpLFplKCksMTY9PSgxNiZuKSl9dmFyIENNPWNsYXNze2NvbnN0cnVjdG9yKCl7fXN1cHBvcnRzKHQpe3JldHVybiBaeih0KX1jcmVhdGUodCl7cmV0dXJuIG5ldyBQUCh0KX19LG11ZT0obix0KT0+dCxQUD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmxlbmd0aD0wLHRoaXMuX2xpbmtlZFJlY29yZHM9bnVsbCx0aGlzLl91bmxpbmtlZFJlY29yZHM9bnVsbCx0aGlzLl9wcmV2aW91c0l0SGVhZD1udWxsLHRoaXMuX2l0SGVhZD1udWxsLHRoaXMuX2l0VGFpbD1udWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9bnVsbCx0aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsdGhpcy5fbW92ZXNIZWFkPW51bGwsdGhpcy5fbW92ZXNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPW51bGwsdGhpcy5fcmVtb3ZhbHNUYWlsPW51bGwsdGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZD1udWxsLHRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWw9bnVsbCx0aGlzLl90cmFja0J5Rm49dHx8bXVlfWZvckVhY2hJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX2l0SGVhZDtudWxsIT09ZTtlPWUuX25leHQpdChlKX1mb3JFYWNoT3BlcmF0aW9uKHQpe2xldCBlPXRoaXMuX2l0SGVhZCxpPXRoaXMuX3JlbW92YWxzSGVhZCxyPTAsbz1udWxsO2Zvcig7ZXx8aTspe2xldCBhPSFpfHxlJiZlLmN1cnJlbnRJbmRleDxKSChpLHIsbyk/ZTppLHM9SkgoYSxyLG8pLGw9YS5jdXJyZW50SW5kZXg7aWYoYT09PWkpci0tLGk9aS5fbmV4dFJlbW92ZWQ7ZWxzZSBpZihlPWUuX25leHQsbnVsbD09YS5wcmV2aW91c0luZGV4KXIrKztlbHNle298fChvPVtdKTtsZXQgYz1zLXIsZD1sLXI7aWYoYyE9ZCl7Zm9yKGxldCBwPTA7cDxjO3ArKyl7bGV0IGg9cDxvLmxlbmd0aD9vW3BdOm9bcF09MCxtPWgrcDtkPD1tJiZtPGMmJihvW3BdPWgrMSl9b1thLnByZXZpb3VzSW5kZXhdPWQtY319cyE9PWwmJnQoYSxzLGwpfX1mb3JFYWNoUHJldmlvdXNJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX3ByZXZpb3VzSXRIZWFkO251bGwhPT1lO2U9ZS5fbmV4dFByZXZpb3VzKXQoZSl9Zm9yRWFjaEFkZGVkSXRlbSh0KXtsZXQgZTtmb3IoZT10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dEFkZGVkKXQoZSl9Zm9yRWFjaE1vdmVkSXRlbSh0KXtsZXQgZTtmb3IoZT10aGlzLl9tb3Zlc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0TW92ZWQpdChlKX1mb3JFYWNoUmVtb3ZlZEl0ZW0odCl7bGV0IGU7Zm9yKGU9dGhpcy5fcmVtb3ZhbHNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dFJlbW92ZWQpdChlKX1mb3JFYWNoSWRlbnRpdHlDaGFuZ2UodCl7bGV0IGU7Zm9yKGU9dGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZDtudWxsIT09ZTtlPWUuX25leHRJZGVudGl0eUNoYW5nZSl0KGUpfWRpZmYodCl7aWYobnVsbD09dCYmKHQ9W10pLCFaeih0KSl0aHJvdyBuZXcgeHQoOTAwLCExKTtyZXR1cm4gdGhpcy5jaGVjayh0KT90aGlzOm51bGx9b25EZXN0cm95KCl7fWNoZWNrKHQpe3RoaXMuX3Jlc2V0KCk7bGV0IHIsbyxhLGU9dGhpcy5faXRIZWFkLGk9ITE7aWYoQXJyYXkuaXNBcnJheSh0KSl7dGhpcy5sZW5ndGg9dC5sZW5ndGg7Zm9yKGxldCBzPTA7czx0aGlzLmxlbmd0aDtzKyspbz10W3NdLGE9dGhpcy5fdHJhY2tCeUZuKHMsbyksbnVsbCE9PWUmJk9iamVjdC5pcyhlLnRyYWNrQnlJZCxhKT8oaSYmKGU9dGhpcy5fdmVyaWZ5UmVpbnNlcnRpb24oZSxvLGEscykpLE9iamVjdC5pcyhlLml0ZW0sbyl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKGUsbykpOihlPXRoaXMuX21pc21hdGNoKGUsbyxhLHMpLGk9ITApLGU9ZS5fbmV4dH1lbHNlIHI9MCxmdW5jdGlvbihuLHQpe2lmKEFycmF5LmlzQXJyYXkobikpZm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspdChuW2VdKTtlbHNle2xldCBpLGU9bltTeW1ib2wuaXRlcmF0b3JdKCk7Zm9yKDshKGk9ZS5uZXh0KCkpLmRvbmU7KXQoaS52YWx1ZSl9fSh0LHM9PnthPXRoaXMuX3RyYWNrQnlGbihyLHMpLG51bGwhPT1lJiZPYmplY3QuaXMoZS50cmFja0J5SWQsYSk/KGkmJihlPXRoaXMuX3ZlcmlmeVJlaW5zZXJ0aW9uKGUscyxhLHIpKSxPYmplY3QuaXMoZS5pdGVtLHMpfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZShlLHMpKTooZT10aGlzLl9taXNtYXRjaChlLHMsYSxyKSxpPSEwKSxlPWUuX25leHQscisrfSksdGhpcy5sZW5ndGg9cjtyZXR1cm4gdGhpcy5fdHJ1bmNhdGUoZSksdGhpcy5jb2xsZWN0aW9uPXQsdGhpcy5pc0RpcnR5fWdldCBpc0RpcnR5KCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNIZWFkfHxudWxsIT09dGhpcy5fbW92ZXNIZWFkfHxudWxsIT09dGhpcy5fcmVtb3ZhbHNIZWFkfHxudWxsIT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZH1fcmVzZXQoKXtpZih0aGlzLmlzRGlydHkpe2xldCB0O2Zvcih0PXRoaXMuX3ByZXZpb3VzSXRIZWFkPXRoaXMuX2l0SGVhZDtudWxsIT09dDt0PXQuX25leHQpdC5fbmV4dFByZXZpb3VzPXQuX25leHQ7Zm9yKHQ9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT09dDt0PXQuX25leHRBZGRlZCl0LnByZXZpb3VzSW5kZXg9dC5jdXJyZW50SW5kZXg7Zm9yKHRoaXMuX2FkZGl0aW9uc0hlYWQ9dGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHQ9dGhpcy5fbW92ZXNIZWFkO251bGwhPT10O3Q9dC5fbmV4dE1vdmVkKXQucHJldmlvdXNJbmRleD10LmN1cnJlbnRJbmRleDt0aGlzLl9tb3Zlc0hlYWQ9dGhpcy5fbW92ZXNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPXRoaXMuX3JlbW92YWxzVGFpbD1udWxsLHRoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ9dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD1udWxsfX1fbWlzbWF0Y2godCxlLGkscil7bGV0IG87cmV0dXJuIG51bGw9PT10P289dGhpcy5faXRUYWlsOihvPXQuX3ByZXYsdGhpcy5fcmVtb3ZlKHQpKSxudWxsIT09KHQ9bnVsbD09PXRoaXMuX3VubGlua2VkUmVjb3Jkcz9udWxsOnRoaXMuX3VubGlua2VkUmVjb3Jkcy5nZXQoaSxudWxsKSk/KE9iamVjdC5pcyh0Lml0ZW0sZSl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKHQsZSksdGhpcy5fcmVpbnNlcnRBZnRlcih0LG8scikpOm51bGwhPT0odD1udWxsPT09dGhpcy5fbGlua2VkUmVjb3Jkcz9udWxsOnRoaXMuX2xpbmtlZFJlY29yZHMuZ2V0KGkscikpPyhPYmplY3QuaXModC5pdGVtLGUpfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZSh0LGUpLHRoaXMuX21vdmVBZnRlcih0LG8scikpOnQ9dGhpcy5fYWRkQWZ0ZXIobmV3IGtQKGUsaSksbyxyKSx0fV92ZXJpZnlSZWluc2VydGlvbih0LGUsaSxyKXtsZXQgbz1udWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzP251bGw6dGhpcy5fdW5saW5rZWRSZWNvcmRzLmdldChpLG51bGwpO3JldHVybiBudWxsIT09bz90PXRoaXMuX3JlaW5zZXJ0QWZ0ZXIobyx0Ll9wcmV2LHIpOnQuY3VycmVudEluZGV4IT1yJiYodC5jdXJyZW50SW5kZXg9cix0aGlzLl9hZGRUb01vdmVzKHQscikpLHR9X3RydW5jYXRlKHQpe2Zvcig7bnVsbCE9PXQ7KXtsZXQgZT10Ll9uZXh0O3RoaXMuX2FkZFRvUmVtb3ZhbHModGhpcy5fdW5saW5rKHQpKSx0PWV9bnVsbCE9PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmdGhpcy5fdW5saW5rZWRSZWNvcmRzLmNsZWFyKCksbnVsbCE9PXRoaXMuX2FkZGl0aW9uc1RhaWwmJih0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9bnVsbCksbnVsbCE9PXRoaXMuX21vdmVzVGFpbCYmKHRoaXMuX21vdmVzVGFpbC5fbmV4dE1vdmVkPW51bGwpLG51bGwhPT10aGlzLl9pdFRhaWwmJih0aGlzLl9pdFRhaWwuX25leHQ9bnVsbCksbnVsbCE9PXRoaXMuX3JlbW92YWxzVGFpbCYmKHRoaXMuX3JlbW92YWxzVGFpbC5fbmV4dFJlbW92ZWQ9bnVsbCksbnVsbCE9PXRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWwmJih0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bnVsbCl9X3JlaW5zZXJ0QWZ0ZXIodCxlLGkpe251bGwhPT10aGlzLl91bmxpbmtlZFJlY29yZHMmJnRoaXMuX3VubGlua2VkUmVjb3Jkcy5yZW1vdmUodCk7bGV0IHI9dC5fcHJldlJlbW92ZWQsbz10Ll9uZXh0UmVtb3ZlZDtyZXR1cm4gbnVsbD09PXI/dGhpcy5fcmVtb3ZhbHNIZWFkPW86ci5fbmV4dFJlbW92ZWQ9byxudWxsPT09bz90aGlzLl9yZW1vdmFsc1RhaWw9cjpvLl9wcmV2UmVtb3ZlZD1yLHRoaXMuX2luc2VydEFmdGVyKHQsZSxpKSx0aGlzLl9hZGRUb01vdmVzKHQsaSksdH1fbW92ZUFmdGVyKHQsZSxpKXtyZXR1cm4gdGhpcy5fdW5saW5rKHQpLHRoaXMuX2luc2VydEFmdGVyKHQsZSxpKSx0aGlzLl9hZGRUb01vdmVzKHQsaSksdH1fYWRkQWZ0ZXIodCxlLGkpe3JldHVybiB0aGlzLl9pbnNlcnRBZnRlcih0LGUsaSksdGhpcy5fYWRkaXRpb25zVGFpbD1udWxsPT09dGhpcy5fYWRkaXRpb25zVGFpbD90aGlzLl9hZGRpdGlvbnNIZWFkPXQ6dGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPXQsdH1faW5zZXJ0QWZ0ZXIodCxlLGkpe2xldCByPW51bGw9PT1lP3RoaXMuX2l0SGVhZDplLl9uZXh0O3JldHVybiB0Ll9uZXh0PXIsdC5fcHJldj1lLG51bGw9PT1yP3RoaXMuX2l0VGFpbD10OnIuX3ByZXY9dCxudWxsPT09ZT90aGlzLl9pdEhlYWQ9dDplLl9uZXh0PXQsbnVsbD09PXRoaXMuX2xpbmtlZFJlY29yZHMmJih0aGlzLl9saW5rZWRSZWNvcmRzPW5ldyBNTSksdGhpcy5fbGlua2VkUmVjb3Jkcy5wdXQodCksdC5jdXJyZW50SW5kZXg9aSx0fV9yZW1vdmUodCl7cmV0dXJuIHRoaXMuX2FkZFRvUmVtb3ZhbHModGhpcy5fdW5saW5rKHQpKX1fdW5saW5rKHQpe251bGwhPT10aGlzLl9saW5rZWRSZWNvcmRzJiZ0aGlzLl9saW5rZWRSZWNvcmRzLnJlbW92ZSh0KTtsZXQgZT10Ll9wcmV2LGk9dC5fbmV4dDtyZXR1cm4gbnVsbD09PWU/dGhpcy5faXRIZWFkPWk6ZS5fbmV4dD1pLG51bGw9PT1pP3RoaXMuX2l0VGFpbD1lOmkuX3ByZXY9ZSx0fV9hZGRUb01vdmVzKHQsZSl7cmV0dXJuIHQucHJldmlvdXNJbmRleD09PWV8fCh0aGlzLl9tb3Zlc1RhaWw9bnVsbD09PXRoaXMuX21vdmVzVGFpbD90aGlzLl9tb3Zlc0hlYWQ9dDp0aGlzLl9tb3Zlc1RhaWwuX25leHRNb3ZlZD10KSx0fV9hZGRUb1JlbW92YWxzKHQpe3JldHVybiBudWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzJiYodGhpcy5fdW5saW5rZWRSZWNvcmRzPW5ldyBNTSksdGhpcy5fdW5saW5rZWRSZWNvcmRzLnB1dCh0KSx0LmN1cnJlbnRJbmRleD1udWxsLHQuX25leHRSZW1vdmVkPW51bGwsbnVsbD09PXRoaXMuX3JlbW92YWxzVGFpbD8odGhpcy5fcmVtb3ZhbHNUYWlsPXRoaXMuX3JlbW92YWxzSGVhZD10LHQuX3ByZXZSZW1vdmVkPW51bGwpOih0Ll9wcmV2UmVtb3ZlZD10aGlzLl9yZW1vdmFsc1RhaWwsdGhpcy5fcmVtb3ZhbHNUYWlsPXRoaXMuX3JlbW92YWxzVGFpbC5fbmV4dFJlbW92ZWQ9dCksdH1fYWRkSWRlbnRpdHlDaGFuZ2UodCxlKXtyZXR1cm4gdC5pdGVtPWUsdGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD1udWxsPT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD90aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkPXQ6dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbC5fbmV4dElkZW50aXR5Q2hhbmdlPXQsdH19LGtQPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5pdGVtPXQsdGhpcy50cmFja0J5SWQ9ZSx0aGlzLmN1cnJlbnRJbmRleD1udWxsLHRoaXMucHJldmlvdXNJbmRleD1udWxsLHRoaXMuX25leHRQcmV2aW91cz1udWxsLHRoaXMuX3ByZXY9bnVsbCx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcHJldkR1cD1udWxsLHRoaXMuX25leHREdXA9bnVsbCx0aGlzLl9wcmV2UmVtb3ZlZD1udWxsLHRoaXMuX25leHRSZW1vdmVkPW51bGwsdGhpcy5fbmV4dEFkZGVkPW51bGwsdGhpcy5fbmV4dE1vdmVkPW51bGwsdGhpcy5fbmV4dElkZW50aXR5Q2hhbmdlPW51bGx9fSxNTT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMubWFwPW5ldyBNYXB9cHV0KHQpe2xldCBlPXQudHJhY2tCeUlkLGk9dGhpcy5tYXAuZ2V0KGUpO2l8fChpPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2hlYWQ9bnVsbCx0aGlzLl90YWlsPW51bGx9YWRkKHQpe251bGw9PT10aGlzLl9oZWFkPyh0aGlzLl9oZWFkPXRoaXMuX3RhaWw9dCx0Ll9uZXh0RHVwPW51bGwsdC5fcHJldkR1cD1udWxsKToodGhpcy5fdGFpbC5fbmV4dER1cD10LHQuX3ByZXZEdXA9dGhpcy5fdGFpbCx0Ll9uZXh0RHVwPW51bGwsdGhpcy5fdGFpbD10KX1nZXQodCxlKXtsZXQgaTtmb3IoaT10aGlzLl9oZWFkO251bGwhPT1pO2k9aS5fbmV4dER1cClpZigobnVsbD09PWV8fGU8PWkuY3VycmVudEluZGV4KSYmT2JqZWN0LmlzKGkudHJhY2tCeUlkLHQpKXJldHVybiBpO3JldHVybiBudWxsfXJlbW92ZSh0KXtsZXQgZT10Ll9wcmV2RHVwLGk9dC5fbmV4dER1cDtyZXR1cm4gbnVsbD09PWU/dGhpcy5faGVhZD1pOmUuX25leHREdXA9aSxudWxsPT09aT90aGlzLl90YWlsPWU6aS5fcHJldkR1cD1lLG51bGw9PT10aGlzLl9oZWFkfX0sdGhpcy5tYXAuc2V0KGUsaSkpLGkuYWRkKHQpfWdldCh0LGUpe2xldCByPXRoaXMubWFwLmdldCh0KTtyZXR1cm4gcj9yLmdldCh0LGUpOm51bGx9cmVtb3ZlKHQpe2xldCBlPXQudHJhY2tCeUlkO3JldHVybiB0aGlzLm1hcC5nZXQoZSkucmVtb3ZlKHQpJiZ0aGlzLm1hcC5kZWxldGUoZSksdH1nZXQgaXNFbXB0eSgpe3JldHVybiAwPT09dGhpcy5tYXAuc2l6ZX1jbGVhcigpe3RoaXMubWFwLmNsZWFyKCl9fTtmdW5jdGlvbiBKSChuLHQsZSl7bGV0IGk9bi5wcmV2aW91c0luZGV4O2lmKG51bGw9PT1pKXJldHVybiBpO2xldCByPTA7cmV0dXJuIGUmJmk8ZS5sZW5ndGgmJihyPWVbaV0pLGkrdCtyfXZhciB3TT1jbGFzc3tjb25zdHJ1Y3Rvcigpe31zdXBwb3J0cyh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE1hcHx8VGsodCl9Y3JlYXRlKCl7cmV0dXJuIG5ldyBGUH19LEZQPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fcmVjb3Jkcz1uZXcgTWFwLHRoaXMuX21hcEhlYWQ9bnVsbCx0aGlzLl9hcHBlbmRBZnRlcj1udWxsLHRoaXMuX3ByZXZpb3VzTWFwSGVhZD1udWxsLHRoaXMuX2NoYW5nZXNIZWFkPW51bGwsdGhpcy5fY2hhbmdlc1RhaWw9bnVsbCx0aGlzLl9hZGRpdGlvbnNIZWFkPW51bGwsdGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsLHRoaXMuX3JlbW92YWxzVGFpbD1udWxsfWdldCBpc0RpcnR5KCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNIZWFkfHxudWxsIT09dGhpcy5fY2hhbmdlc0hlYWR8fG51bGwhPT10aGlzLl9yZW1vdmFsc0hlYWR9Zm9yRWFjaEl0ZW0odCl7bGV0IGU7Zm9yKGU9dGhpcy5fbWFwSGVhZDtudWxsIT09ZTtlPWUuX25leHQpdChlKX1mb3JFYWNoUHJldmlvdXNJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX3ByZXZpb3VzTWFwSGVhZDtudWxsIT09ZTtlPWUuX25leHRQcmV2aW91cyl0KGUpfWZvckVhY2hDaGFuZ2VkSXRlbSh0KXtsZXQgZTtmb3IoZT10aGlzLl9jaGFuZ2VzSGVhZDtudWxsIT09ZTtlPWUuX25leHRDaGFuZ2VkKXQoZSl9Zm9yRWFjaEFkZGVkSXRlbSh0KXtsZXQgZTtmb3IoZT10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dEFkZGVkKXQoZSl9Zm9yRWFjaFJlbW92ZWRJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX3JlbW92YWxzSGVhZDtudWxsIT09ZTtlPWUuX25leHRSZW1vdmVkKXQoZSl9ZGlmZih0KXtpZih0KXtpZighKHQgaW5zdGFuY2VvZiBNYXB8fFRrKHQpKSl0aHJvdyBuZXcgeHQoOTAwLCExKX1lbHNlIHQ9bmV3IE1hcDtyZXR1cm4gdGhpcy5jaGVjayh0KT90aGlzOm51bGx9b25EZXN0cm95KCl7fWNoZWNrKHQpe3RoaXMuX3Jlc2V0KCk7bGV0IGU9dGhpcy5fbWFwSGVhZDtpZih0aGlzLl9hcHBlbmRBZnRlcj1udWxsLHRoaXMuX2ZvckVhY2godCwoaSxyKT0+e2lmKGUmJmUua2V5PT09cil0aGlzLl9tYXliZUFkZFRvQ2hhbmdlcyhlLGkpLHRoaXMuX2FwcGVuZEFmdGVyPWUsZT1lLl9uZXh0O2Vsc2V7bGV0IG89dGhpcy5fZ2V0T3JDcmVhdGVSZWNvcmRGb3JLZXkocixpKTtlPXRoaXMuX2luc2VydEJlZm9yZU9yQXBwZW5kKGUsbyl9fSksZSl7ZS5fcHJldiYmKGUuX3ByZXYuX25leHQ9bnVsbCksdGhpcy5fcmVtb3ZhbHNIZWFkPWU7Zm9yKGxldCBpPWU7bnVsbCE9PWk7aT1pLl9uZXh0UmVtb3ZlZClpPT09dGhpcy5fbWFwSGVhZCYmKHRoaXMuX21hcEhlYWQ9bnVsbCksdGhpcy5fcmVjb3Jkcy5kZWxldGUoaS5rZXkpLGkuX25leHRSZW1vdmVkPWkuX25leHQsaS5wcmV2aW91c1ZhbHVlPWkuY3VycmVudFZhbHVlLGkuY3VycmVudFZhbHVlPW51bGwsaS5fcHJldj1udWxsLGkuX25leHQ9bnVsbH1yZXR1cm4gdGhpcy5fY2hhbmdlc1RhaWwmJih0aGlzLl9jaGFuZ2VzVGFpbC5fbmV4dENoYW5nZWQ9bnVsbCksdGhpcy5fYWRkaXRpb25zVGFpbCYmKHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1udWxsKSx0aGlzLmlzRGlydHl9X2luc2VydEJlZm9yZU9yQXBwZW5kKHQsZSl7aWYodCl7bGV0IGk9dC5fcHJldjtyZXR1cm4gZS5fbmV4dD10LGUuX3ByZXY9aSx0Ll9wcmV2PWUsaSYmKGkuX25leHQ9ZSksdD09PXRoaXMuX21hcEhlYWQmJih0aGlzLl9tYXBIZWFkPWUpLHRoaXMuX2FwcGVuZEFmdGVyPXQsdH1yZXR1cm4gdGhpcy5fYXBwZW5kQWZ0ZXI/KHRoaXMuX2FwcGVuZEFmdGVyLl9uZXh0PWUsZS5fcHJldj10aGlzLl9hcHBlbmRBZnRlcik6dGhpcy5fbWFwSGVhZD1lLHRoaXMuX2FwcGVuZEFmdGVyPWUsbnVsbH1fZ2V0T3JDcmVhdGVSZWNvcmRGb3JLZXkodCxlKXtpZih0aGlzLl9yZWNvcmRzLmhhcyh0KSl7bGV0IHI9dGhpcy5fcmVjb3Jkcy5nZXQodCk7dGhpcy5fbWF5YmVBZGRUb0NoYW5nZXMocixlKTtsZXQgbz1yLl9wcmV2LGE9ci5fbmV4dDtyZXR1cm4gbyYmKG8uX25leHQ9YSksYSYmKGEuX3ByZXY9byksci5fbmV4dD1udWxsLHIuX3ByZXY9bnVsbCxyfWxldCBpPW5ldyBOUCh0KTtyZXR1cm4gdGhpcy5fcmVjb3Jkcy5zZXQodCxpKSxpLmN1cnJlbnRWYWx1ZT1lLHRoaXMuX2FkZFRvQWRkaXRpb25zKGkpLGl9X3Jlc2V0KCl7aWYodGhpcy5pc0RpcnR5KXtsZXQgdDtmb3IodGhpcy5fcHJldmlvdXNNYXBIZWFkPXRoaXMuX21hcEhlYWQsdD10aGlzLl9wcmV2aW91c01hcEhlYWQ7bnVsbCE9PXQ7dD10Ll9uZXh0KXQuX25leHRQcmV2aW91cz10Ll9uZXh0O2Zvcih0PXRoaXMuX2NoYW5nZXNIZWFkO251bGwhPT10O3Q9dC5fbmV4dENoYW5nZWQpdC5wcmV2aW91c1ZhbHVlPXQuY3VycmVudFZhbHVlO2Zvcih0PXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9dDt0PXQuX25leHRBZGRlZCl0LnByZXZpb3VzVmFsdWU9dC5jdXJyZW50VmFsdWU7dGhpcy5fY2hhbmdlc0hlYWQ9dGhpcy5fY2hhbmdlc1RhaWw9bnVsbCx0aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9bnVsbH19X21heWJlQWRkVG9DaGFuZ2VzKHQsZSl7T2JqZWN0LmlzKGUsdC5jdXJyZW50VmFsdWUpfHwodC5wcmV2aW91c1ZhbHVlPXQuY3VycmVudFZhbHVlLHQuY3VycmVudFZhbHVlPWUsdGhpcy5fYWRkVG9DaGFuZ2VzKHQpKX1fYWRkVG9BZGRpdGlvbnModCl7bnVsbD09PXRoaXMuX2FkZGl0aW9uc0hlYWQ/dGhpcy5fYWRkaXRpb25zSGVhZD10aGlzLl9hZGRpdGlvbnNUYWlsPXQ6KHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD10LHRoaXMuX2FkZGl0aW9uc1RhaWw9dCl9X2FkZFRvQ2hhbmdlcyh0KXtudWxsPT09dGhpcy5fY2hhbmdlc0hlYWQ/dGhpcy5fY2hhbmdlc0hlYWQ9dGhpcy5fY2hhbmdlc1RhaWw9dDoodGhpcy5fY2hhbmdlc1RhaWwuX25leHRDaGFuZ2VkPXQsdGhpcy5fY2hhbmdlc1RhaWw9dCl9X2ZvckVhY2godCxlKXt0IGluc3RhbmNlb2YgTWFwP3QuZm9yRWFjaChlKTpPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGk9PmUodFtpXSxpKSl9fSxOUD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmtleT10LHRoaXMucHJldmlvdXNWYWx1ZT1udWxsLHRoaXMuY3VycmVudFZhbHVlPW51bGwsdGhpcy5fbmV4dFByZXZpb3VzPW51bGwsdGhpcy5fbmV4dD1udWxsLHRoaXMuX3ByZXY9bnVsbCx0aGlzLl9uZXh0QWRkZWQ9bnVsbCx0aGlzLl9uZXh0UmVtb3ZlZD1udWxsLHRoaXMuX25leHRDaGFuZ2VkPW51bGx9fTtmdW5jdGlvbiAkSCgpe3JldHVybiBuZXcgVGwoW25ldyBDTV0pfXZhciBUbD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuZmFjdG9yaWVzPWV9c3RhdGljIGNyZWF0ZShlLGkpe2lmKG51bGwhPWkpe2xldCByPWkuZmFjdG9yaWVzLnNsaWNlKCk7ZT1lLmNvbmNhdChyKX1yZXR1cm4gbmV3IG4oZSl9c3RhdGljIGV4dGVuZChlKXtyZXR1cm57cHJvdmlkZTpuLHVzZUZhY3Rvcnk6aT0+bi5jcmVhdGUoZSxpfHwkSCgpKSxkZXBzOltbbixuZXcgaWQsbmV3IGthXV19fWZpbmQoZSl7bGV0IGk9dGhpcy5mYWN0b3JpZXMuZmluZChyPT5yLnN1cHBvcnRzKGUpKTtpZihudWxsIT1pKXJldHVybiBpO3Rocm93IG5ldyB4dCg5MDEsITEpfX1yZXR1cm4gbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6JEh9KSxufSkoKTtmdW5jdGlvbiBlNSgpe3JldHVybiBuZXcgU2IoW25ldyB3TV0pfXZhciBTYj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuZmFjdG9yaWVzPWV9c3RhdGljIGNyZWF0ZShlLGkpe2lmKGkpe2xldCByPWkuZmFjdG9yaWVzLnNsaWNlKCk7ZT1lLmNvbmNhdChyKX1yZXR1cm4gbmV3IG4oZSl9c3RhdGljIGV4dGVuZChlKXtyZXR1cm57cHJvdmlkZTpuLHVzZUZhY3Rvcnk6aT0+bi5jcmVhdGUoZSxpfHxlNSgpKSxkZXBzOltbbixuZXcgaWQsbmV3IGthXV19fWZpbmQoZSl7bGV0IGk9dGhpcy5mYWN0b3JpZXMuZmluZChyPT5yLnN1cHBvcnRzKGUpKTtpZihpKXJldHVybiBpO3Rocm93IG5ldyB4dCg5MDEsITEpfX1yZXR1cm4gbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZTV9KSxufSkoKSxmdWU9W25ldyB3TV0sZ3VlPVtuZXcgQ01dLFJqPShuZXcgVGwoZ3VlKSxuZXcgU2IoZnVlKSxWayhudWxsLCJjb3JlIixbXSkpLFBqPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKGdjKSl9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe30pLG59KSgpO2Z1bmN0aW9uIGV3KG4pe3JldHVybiJib29sZWFuIj09dHlwZW9mIG4/bjpudWxsIT1uJiYiZmFsc2UiIT09bn12YXIgX3VlPSI6IixjdT1jbGFzc3tzdGF0aWMgemVybygpe3JldHVybiBuZXcgY3UoWzBdKX1zdGF0aWMgb25lKCl7cmV0dXJuIG5ldyBjdShbMV0pfWNvbnN0cnVjdG9yKHQpe3RoaXMuZGlnaXRzPXR9Y2xvbmUoKXtyZXR1cm4gbmV3IGN1KHRoaXMuZGlnaXRzLnNsaWNlKCkpfWFkZCh0KXtsZXQgZT10aGlzLmNsb25lKCk7cmV0dXJuIGUuYWRkVG9TZWxmKHQpLGV9YWRkVG9TZWxmKHQpe2xldCBlPU1hdGgubWF4KHRoaXMuZGlnaXRzLmxlbmd0aCx0LmRpZ2l0cy5sZW5ndGgpLGk9MDtmb3IobGV0IHI9MDtyPGU7cisrKXtsZXQgbz1pO3I8dGhpcy5kaWdpdHMubGVuZ3RoJiYobys9dGhpcy5kaWdpdHNbcl0pLHI8dC5kaWdpdHMubGVuZ3RoJiYobys9dC5kaWdpdHNbcl0pLG8+PTEwPyh0aGlzLmRpZ2l0c1tyXT1vLTEwLGk9MSk6KHRoaXMuZGlnaXRzW3JdPW8saT0wKX1pPjAmJih0aGlzLmRpZ2l0c1tlXT0xKX10b1N0cmluZygpe2xldCB0PSIiO2ZvcihsZXQgZT10aGlzLmRpZ2l0cy5sZW5ndGgtMTtlPj0wO2UtLSl0Kz10aGlzLmRpZ2l0c1tlXTtyZXR1cm4gdH19LHR3PWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMucG93ZXJPZlR3b3M9W3RdfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMucG93ZXJPZlR3b3NbMF19bXVsdGlwbHlCeSh0KXtsZXQgZT1jdS56ZXJvKCk7cmV0dXJuIHRoaXMubXVsdGlwbHlCeUFuZEFkZFRvKHQsZSksZX1tdWx0aXBseUJ5QW5kQWRkVG8odCxlKXtmb3IobGV0IGk9MDswIT09dDt0Pj4+PTEsaSsrKWlmKDEmdCl7bGV0IHI9dGhpcy5nZXRNdWx0aXBsaWVkQnlQb3dlck9mVHdvKGkpO2UuYWRkVG9TZWxmKHIpfX1nZXRNdWx0aXBsaWVkQnlQb3dlck9mVHdvKHQpe2ZvcihsZXQgZT10aGlzLnBvd2VyT2ZUd29zLmxlbmd0aDtlPD10O2UrKyl7bGV0IGk9dGhpcy5wb3dlck9mVHdvc1tlLTFdO3RoaXMucG93ZXJPZlR3b3NbZV09aS5hZGQoaSl9cmV0dXJuIHRoaXMucG93ZXJPZlR3b3NbdF19fTtuZXcgY2xhc3N7dmlzaXRUZXh0KHQsZSl7cmV0dXJuIHQudmFsdWV9dmlzaXRDb250YWluZXIodCxlKXtyZXR1cm5gWyR7dC5jaGlsZHJlbi5tYXAoaT0+aS52aXNpdCh0aGlzKSkuam9pbigiLCAiKX1dYH12aXNpdEljdSh0LGUpe2xldCBpPU9iamVjdC5rZXlzKHQuY2FzZXMpLm1hcChyPT5gJHtyfSB7JHt0LmNhc2VzW3JdLnZpc2l0KHRoaXMpfX1gKTtyZXR1cm5geyR7dC5leHByZXNzaW9ufSwgJHt0LnR5cGV9LCAke2kuam9pbigiLCAiKX19YH12aXNpdFRhZ1BsYWNlaG9sZGVyKHQsZSl7cmV0dXJuIHQuaXNWb2lkP2A8cGggdGFnIG5hbWU9IiR7dC5zdGFydE5hbWV9Ii8+YDpgPHBoIHRhZyBuYW1lPSIke3Quc3RhcnROYW1lfSI+JHt0LmNoaWxkcmVuLm1hcChpPT5pLnZpc2l0KHRoaXMpKS5qb2luKCIsICIpfTwvcGggbmFtZT0iJHt0LmNsb3NlTmFtZX0iPmB9dmlzaXRQbGFjZWhvbGRlcih0LGUpe3JldHVybiB0LnZhbHVlP2A8cGggbmFtZT0iJHt0Lm5hbWV9Ij4ke3QudmFsdWV9PC9waD5gOmA8cGggbmFtZT0iJHt0Lm5hbWV9Ii8+YH12aXNpdEljdVBsYWNlaG9sZGVyKHQsZSl7cmV0dXJuYDxwaCBpY3UgbmFtZT0iJHt0Lm5hbWV9Ij4ke3QudmFsdWUudmlzaXQodGhpcyl9PC9waD5gfX0sbmV3IGNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuYmFzZT10LHRoaXMuZXhwb25lbnRzPVtuZXcgdHcoY3Uub25lKCkpXX10b1RoZVBvd2VyT2YodCl7Zm9yKGxldCBlPXRoaXMuZXhwb25lbnRzLmxlbmd0aDtlPD10O2UrKyl7bGV0IGk9dGhpcy5leHBvbmVudHNbZS0xXS5tdWx0aXBseUJ5KHRoaXMuYmFzZSk7dGhpcy5leHBvbmVudHNbZV09bmV3IHR3KGkpfXJldHVybiB0aGlzLmV4cG9uZW50c1t0XX19KDI1Nik7dmFyIG53PWZ1bmN0aW9uKG4sLi4udCl7aWYobncudHJhbnNsYXRlKXtsZXQgaT1udy50cmFuc2xhdGUobix0KTtuPWlbMF0sdD1pWzFdfWxldCBlPWtqKG5bMF0sbi5yYXdbMF0pO2ZvcihsZXQgaT0xO2k8bi5sZW5ndGg7aSsrKWUrPXRbaS0xXStraihuW2ldLG4ucmF3W2ldKTtyZXR1cm4gZX0sdnVlPSI6IjtmdW5jdGlvbiBraihuLHQpe3JldHVybiB0LmNoYXJBdCgwKT09PXZ1ZT9uLnN1YnN0cmluZyhmdW5jdGlvbihuLHQpe2ZvcihsZXQgZT0xLGk9MTtlPG4ubGVuZ3RoO2UrKyxpKyspaWYoIlxcIj09PXRbaV0paSsrO2Vsc2UgaWYobltlXT09PV91ZSlyZXR1cm4gZTt0aHJvdyBuZXcgRXJyb3IoYFVudGVybWluYXRlZCAkbG9jYWxpemUgbWV0YWRhdGEgYmxvY2sgaW4gIiR7dH0iLmApfShuLHQpKzEpOm59KCgpPT50eXBlb2YgZ2xvYmFsVGhpczwidSImJmdsb2JhbFRoaXN8fHR5cGVvZiBnbG9iYWw8InUiJiZnbG9iYWx8fHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3d8fHR5cGVvZiBzZWxmPCJ1IiYmdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZzZWxmKSgpLiRsb2NhbGl6ZT1udzt2YXIgWWs9bnVsbDtmdW5jdGlvbiBBbCgpe3JldHVybiBZa312YXIgdXc9Y2xhc3N7fSxOdD1uZXcgdGUoIkRvY3VtZW50VG9rZW4iKSxXaj0oKCk9PntjbGFzcyBue2hpc3RvcnlHbyhlKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gTyhxail9LHByb3ZpZGVkSW46InBsYXRmb3JtIn0pLG59KSgpO25ldyB0ZSgiTG9jYXRpb24gSW5pdGlhbGl6ZWQiKTt2YXIgcWo9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFdqe2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5fZG9jPWUsdGhpcy5fbG9jYXRpb249d2luZG93LmxvY2F0aW9uLHRoaXMuX2hpc3Rvcnk9d2luZG93Lmhpc3Rvcnl9Z2V0QmFzZUhyZWZGcm9tRE9NKCl7cmV0dXJuIEFsKCkuZ2V0QmFzZUhyZWYodGhpcy5fZG9jKX1vblBvcFN0YXRlKGUpe2xldCBpPUFsKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLCJ3aW5kb3ciKTtyZXR1cm4gaS5hZGRFdmVudExpc3RlbmVyKCJwb3BzdGF0ZSIsZSwhMSksKCk9PmkucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9wc3RhdGUiLGUpfW9uSGFzaENoYW5nZShlKXtsZXQgaT1BbCgpLmdldEdsb2JhbEV2ZW50VGFyZ2V0KHRoaXMuX2RvYywid2luZG93Iik7cmV0dXJuIGkuYWRkRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsZSwhMSksKCk9PmkucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsZSl9Z2V0IGhyZWYoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24uaHJlZn1nZXQgcHJvdG9jb2woKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24ucHJvdG9jb2x9Z2V0IGhvc3RuYW1lKCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uLmhvc3RuYW1lfWdldCBwb3J0KCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uLnBvcnR9Z2V0IHBhdGhuYW1lKCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uLnBhdGhuYW1lfWdldCBzZWFyY2goKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24uc2VhcmNofWdldCBoYXNoKCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uLmhhc2h9c2V0IHBhdGhuYW1lKGUpe3RoaXMuX2xvY2F0aW9uLnBhdGhuYW1lPWV9cHVzaFN0YXRlKGUsaSxyKXtGaigpP3RoaXMuX2hpc3RvcnkucHVzaFN0YXRlKGUsaSxyKTp0aGlzLl9sb2NhdGlvbi5oYXNoPXJ9cmVwbGFjZVN0YXRlKGUsaSxyKXtGaigpP3RoaXMuX2hpc3RvcnkucmVwbGFjZVN0YXRlKGUsaSxyKTp0aGlzLl9sb2NhdGlvbi5oYXNoPXJ9Zm9yd2FyZCgpe3RoaXMuX2hpc3RvcnkuZm9yd2FyZCgpfWJhY2soKXt0aGlzLl9oaXN0b3J5LmJhY2soKX1oaXN0b3J5R28oZT0wKXt0aGlzLl9oaXN0b3J5LmdvKGUpfWdldFN0YXRlKCl7cmV0dXJuIHRoaXMuX2hpc3Rvcnkuc3RhdGV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oTnQpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHFqKE8oTnQpKX0scHJvdmlkZWRJbjoicGxhdGZvcm0ifSksbn0pKCk7ZnVuY3Rpb24gRmooKXtyZXR1cm4hIXdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZX1mdW5jdGlvbiBYaihuLHQpe2lmKDA9PW4ubGVuZ3RoKXJldHVybiB0O2lmKDA9PXQubGVuZ3RoKXJldHVybiBuO2xldCBlPTA7cmV0dXJuIG4uZW5kc1dpdGgoIi8iKSYmZSsrLHQuc3RhcnRzV2l0aCgiLyIpJiZlKyssMj09ZT9uK3Quc3Vic3RyaW5nKDEpOjE9PWU/bit0Om4rIi8iK3R9ZnVuY3Rpb24gTmoobil7bGV0IHQ9bi5tYXRjaCgvI3xcP3wkLyksZT10JiZ0LmluZGV4fHxuLmxlbmd0aDtyZXR1cm4gbi5zbGljZSgwLGUtKCIvIj09PW5bZS0xXT8xOjApKStuLnNsaWNlKGUpfWZ1bmN0aW9uIGVoKG4pe3JldHVybiBuJiYiPyIhPT1uWzBdPyI/IituOm59dmFyICRrPSgoKT0+e2NsYXNzIG57aGlzdG9yeUdvKGUpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiAkbihNdWUpfSxwcm92aWRlZEluOiJyb290In0pLG59KSgpLEN1ZT1uZXcgdGUoImFwcEJhc2VIcmVmIiksTXVlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyAka3tjb25zdHJ1Y3RvcihlLGkpe3N1cGVyKCksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbj1lLHRoaXMuX3JlbW92ZUxpc3RlbmVyRm5zPVtdLHRoaXMuX2Jhc2VIcmVmPWk/P3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uZ2V0QmFzZUhyZWZGcm9tRE9NKCk/PyRuKE50KS5sb2NhdGlvbj8ub3JpZ2luPz8iIn1uZ09uRGVzdHJveSgpe2Zvcig7dGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMubGVuZ3RoOyl0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5wb3AoKSgpfW9uUG9wU3RhdGUoZSl7dGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMucHVzaCh0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uUG9wU3RhdGUoZSksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vbkhhc2hDaGFuZ2UoZSkpfWdldEJhc2VIcmVmKCl7cmV0dXJuIHRoaXMuX2Jhc2VIcmVmfXByZXBhcmVFeHRlcm5hbFVybChlKXtyZXR1cm4gWGoodGhpcy5fYmFzZUhyZWYsZSl9cGF0aChlPSExKXtsZXQgaT10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnBhdGhuYW1lK2VoKHRoaXMuX3BsYXRmb3JtTG9jYXRpb24uc2VhcmNoKSxyPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24uaGFzaDtyZXR1cm4gciYmZT9gJHtpfSR7cn1gOml9cHVzaFN0YXRlKGUsaSxyLG8pe2xldCBhPXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKHIrZWgobykpO3RoaXMuX3BsYXRmb3JtTG9jYXRpb24ucHVzaFN0YXRlKGUsaSxhKX1yZXBsYWNlU3RhdGUoZSxpLHIsbyl7bGV0IGE9dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwocitlaChvKSk7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5yZXBsYWNlU3RhdGUoZSxpLGEpfWZvcndhcmQoKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmZvcndhcmQoKX1iYWNrKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5iYWNrKCl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5nZXRTdGF0ZSgpfWhpc3RvcnlHbyhlPTApe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uaGlzdG9yeUdvPy4oZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oV2opLE8oQ3VlLDgpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxEYj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX3N1YmplY3Q9bmV3IEYsdGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzPVtdLHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj1udWxsLHRoaXMuX2xvY2F0aW9uU3RyYXRlZ3k9ZTtsZXQgaT10aGlzLl9sb2NhdGlvblN0cmF0ZWd5LmdldEJhc2VIcmVmKCk7dGhpcy5fYmFzZVBhdGg9ZnVuY3Rpb24obil7aWYobmV3IFJlZ0V4cCgiXihodHRwcz86KT8vLyIpLnRlc3Qobikpe2xldFssZV09bi5zcGxpdCgvXC9cL1teXC9dKy8pO3JldHVybiBlfXJldHVybiBufShOaihMaihpKSkpLHRoaXMuX2xvY2F0aW9uU3RyYXRlZ3kub25Qb3BTdGF0ZShyPT57dGhpcy5fc3ViamVjdC5lbWl0KHt1cmw6dGhpcy5wYXRoKCEwKSxwb3A6ITAsc3RhdGU6ci5zdGF0ZSx0eXBlOnIudHlwZX0pfSl9bmdPbkRlc3Ryb3koKXt0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCksdGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzPVtdfXBhdGgoZT0hMSl7cmV0dXJuIHRoaXMubm9ybWFsaXplKHRoaXMuX2xvY2F0aW9uU3RyYXRlZ3kucGF0aChlKSl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb25TdHJhdGVneS5nZXRTdGF0ZSgpfWlzQ3VycmVudFBhdGhFcXVhbFRvKGUsaT0iIil7cmV0dXJuIHRoaXMucGF0aCgpPT10aGlzLm5vcm1hbGl6ZShlK2VoKGkpKX1ub3JtYWxpemUoZSl7cmV0dXJuIG4uc3RyaXBUcmFpbGluZ1NsYXNoKGZ1bmN0aW9uKG4sdCl7aWYoIW58fCF0LnN0YXJ0c1dpdGgobikpcmV0dXJuIHQ7bGV0IGU9dC5zdWJzdHJpbmcobi5sZW5ndGgpO3JldHVybiIiPT09ZXx8WyIvIiwiOyIsIj8iLCIjIl0uaW5jbHVkZXMoZVswXSk/ZTp0fSh0aGlzLl9iYXNlUGF0aCxMaihlKSkpfXByZXBhcmVFeHRlcm5hbFVybChlKXtyZXR1cm4gZSYmIi8iIT09ZVswXSYmKGU9Ii8iK2UpLHRoaXMuX2xvY2F0aW9uU3RyYXRlZ3kucHJlcGFyZUV4dGVybmFsVXJsKGUpfWdvKGUsaT0iIixyPW51bGwpe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3kucHVzaFN0YXRlKHIsIiIsZSxpKSx0aGlzLl9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnModGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwoZStlaChpKSkscil9cmVwbGFjZVN0YXRlKGUsaT0iIixyPW51bGwpe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3kucmVwbGFjZVN0YXRlKHIsIiIsZSxpKSx0aGlzLl9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnModGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwoZStlaChpKSkscil9Zm9yd2FyZCgpe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuZm9yd2FyZCgpfWJhY2soKXt0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LmJhY2soKX1oaXN0b3J5R28oZT0wKXt0aGlzLl9sb2NhdGlvblN0cmF0ZWd5Lmhpc3RvcnlHbz8uKGUpfW9uVXJsQ2hhbmdlKGUpe3JldHVybiB0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnMucHVzaChlKSx0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb258fCh0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb249dGhpcy5zdWJzY3JpYmUoaT0+e3RoaXMuX25vdGlmeVVybENoYW5nZUxpc3RlbmVycyhpLnVybCxpLnN0YXRlKX0pKSwoKT0+e2xldCBpPXRoaXMuX3VybENoYW5nZUxpc3RlbmVycy5pbmRleE9mKGUpO3RoaXMuX3VybENoYW5nZUxpc3RlbmVycy5zcGxpY2UoaSwxKSwwPT09dGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLmxlbmd0aCYmKHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKSx0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb249bnVsbCl9fV9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnMoZT0iIixpKXt0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnMuZm9yRWFjaChyPT5yKGUsaSkpfXN1YnNjcmliZShlLGkscil7cmV0dXJuIHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtuZXh0OmUsZXJyb3I6aSxjb21wbGV0ZTpyfSl9fXJldHVybiBuLm5vcm1hbGl6ZVF1ZXJ5UGFyYW1zPWVoLG4uam9pbldpdGhTbGFzaD1YaixuLnN0cmlwVHJhaWxpbmdTbGFzaD1OaixuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oJGspKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERiKE8oJGspKX0scHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKTtmdW5jdGlvbiBMaihuKXtyZXR1cm4gbi5yZXBsYWNlKC9cL2luZGV4Lmh0bWwkLywiIil9dmFyIGN3PSgoKT0+e3JldHVybihuPWN3fHwoY3c9e30pKVtuLkRlY2ltYWw9MF09IkRlY2ltYWwiLG5bbi5QZXJjZW50PTFdPSJQZXJjZW50IixuW24uQ3VycmVuY3k9Ml09IkN1cnJlbmN5IixuW24uU2NpZW50aWZpYz0zXT0iU2NpZW50aWZpYyIsY3c7dmFyIG59KSgpLEJvPSgoKT0+e3JldHVybihuPUJvfHwoQm89e30pKVtuLkZvcm1hdD0wXT0iRm9ybWF0IixuW24uU3RhbmRhbG9uZT0xXT0iU3RhbmRhbG9uZSIsQm87dmFyIG59KSgpLFhpPSgoKT0+e3JldHVybihuPVhpfHwoWGk9e30pKVtuLk5hcnJvdz0wXT0iTmFycm93IixuW24uQWJicmV2aWF0ZWQ9MV09IkFiYnJldmlhdGVkIixuW24uV2lkZT0yXT0iV2lkZSIsbltuLlNob3J0PTNdPSJTaG9ydCIsWGk7dmFyIG59KSgpLHBhPSgoKT0+e3JldHVybihuPXBhfHwocGE9e30pKVtuLlNob3J0PTBdPSJTaG9ydCIsbltuLk1lZGl1bT0xXT0iTWVkaXVtIixuW24uTG9uZz0yXT0iTG9uZyIsbltuLkZ1bGw9M109IkZ1bGwiLHBhO3ZhciBufSkoKSxZbz0oKCk9PntyZXR1cm4obj1Zb3x8KFlvPXt9KSlbbi5EZWNpbWFsPTBdPSJEZWNpbWFsIixuW24uR3JvdXA9MV09Ikdyb3VwIixuW24uTGlzdD0yXT0iTGlzdCIsbltuLlBlcmNlbnRTaWduPTNdPSJQZXJjZW50U2lnbiIsbltuLlBsdXNTaWduPTRdPSJQbHVzU2lnbiIsbltuLk1pbnVzU2lnbj01XT0iTWludXNTaWduIixuW24uRXhwb25lbnRpYWw9Nl09IkV4cG9uZW50aWFsIixuW24uU3VwZXJzY3JpcHRpbmdFeHBvbmVudD03XT0iU3VwZXJzY3JpcHRpbmdFeHBvbmVudCIsbltuLlBlck1pbGxlPThdPSJQZXJNaWxsZSIsbltuLkluZmluaXR5PTldPSJJbmZpbml0eSIsbltuLk5hTj0xMF09Ik5hTiIsbltuLlRpbWVTZXBhcmF0b3I9MTFdPSJUaW1lU2VwYXJhdG9yIixuW24uQ3VycmVuY3lEZWNpbWFsPTEyXT0iQ3VycmVuY3lEZWNpbWFsIixuW24uQ3VycmVuY3lHcm91cD0xM109IkN1cnJlbmN5R3JvdXAiLFlvO3ZhciBufSkoKTtmdW5jdGlvbiBpdyhuLHQpe3JldHVybiB6cyhGYShuKVtoci5EYXRlRm9ybWF0XSx0KX1mdW5jdGlvbiBydyhuLHQpe3JldHVybiB6cyhGYShuKVtoci5UaW1lRm9ybWF0XSx0KX1mdW5jdGlvbiBvdyhuLHQpe3JldHVybiB6cyhGYShuKVtoci5EYXRlVGltZUZvcm1hdF0sdCl9ZnVuY3Rpb24gbGQobix0KXtsZXQgZT1GYShuKSxpPWVbaHIuTnVtYmVyU3ltYm9sc11bdF07aWYodHlwZW9mIGk+InUiKXtpZih0PT09WW8uQ3VycmVuY3lEZWNpbWFsKXJldHVybiBlW2hyLk51bWJlclN5bWJvbHNdW1lvLkRlY2ltYWxdO2lmKHQ9PT1Zby5DdXJyZW5jeUdyb3VwKXJldHVybiBlW2hyLk51bWJlclN5bWJvbHNdW1lvLkdyb3VwXX1yZXR1cm4gaX1mdW5jdGlvbiBZaihuKXtpZighbltoci5FeHRyYURhdGFdKXRocm93IG5ldyBFcnJvcihgTWlzc2luZyBleHRyYSBsb2NhbGUgZGF0YSBmb3IgdGhlIGxvY2FsZSAiJHtuW2hyLkxvY2FsZUlkXX0iLiBVc2UgInJlZ2lzdGVyTG9jYWxlRGF0YSIgdG8gbG9hZCBuZXcgZGF0YS4gU2VlIHRoZSAiSTE4biBndWlkZSIgb24gYW5ndWxhci5pbyB0byBrbm93IG1vcmUuYCl9ZnVuY3Rpb24genMobix0KXtmb3IobGV0IGU9dDtlPi0xO2UtLSlpZih0eXBlb2YgbltlXTwidSIpcmV0dXJuIG5bZV07dGhyb3cgbmV3IEVycm9yKCJMb2NhbGUgZGF0YSBBUEk6IGxvY2FsZSBkYXRhIHVuZGVmaW5lZCIpfWZ1bmN0aW9uIFVrKG4pe2xldFt0LGVdPW4uc3BsaXQoIjoiKTtyZXR1cm57aG91cnM6K3QsbWludXRlczorZX19dmFyIEZ1ZT0vXihcZHs0LH0pLT8oXGRcZCktPyhcZFxkKSg/OlQoXGRcZCkoPzo6PyhcZFxkKSg/Ojo/KFxkXGQpKD86XC4oXGQrKSk/KT8pPyhafChbKy1dKShcZFxkKTo/KFxkXGQpKT8pPyQvLEViPXt9LE51ZT0vKCg/OlteQkVHSExNT1NXWVphYmNkaG1zd3l6J10rKXwoPzonKD86W14nXXwnJykqJyl8KD86R3sxLDV9fHl7MSw0fXxZezEsNH18TXsxLDV9fEx7MSw1fXx3ezEsMn18V3sxfXxkezEsMn18RXsxLDZ9fGN7MSw2fXxhezEsNX18YnsxLDV9fEJ7MSw1fXxoezEsMn18SHsxLDJ9fG17MSwyfXxzezEsMn18U3sxLDN9fHp7MSw0fXxaezEsNX18T3sxLDR9KSkoW1xzXFNdKikvLElsPSgoKT0+e3JldHVybihuPUlsfHwoSWw9e30pKVtuLlNob3J0PTBdPSJTaG9ydCIsbltuLlNob3J0R01UPTFdPSJTaG9ydEdNVCIsbltuLkxvbmc9Ml09IkxvbmciLG5bbi5FeHRlbmRlZD0zXT0iRXh0ZW5kZWQiLElsO3ZhciBufSkoKSxJaT0oKCk9PntyZXR1cm4obj1JaXx8KElpPXt9KSlbbi5GdWxsWWVhcj0wXT0iRnVsbFllYXIiLG5bbi5Nb250aD0xXT0iTW9udGgiLG5bbi5EYXRlPTJdPSJEYXRlIixuW24uSG91cnM9M109IkhvdXJzIixuW24uTWludXRlcz00XT0iTWludXRlcyIsbltuLlNlY29uZHM9NV09IlNlY29uZHMiLG5bbi5GcmFjdGlvbmFsU2Vjb25kcz02XT0iRnJhY3Rpb25hbFNlY29uZHMiLG5bbi5EYXk9N109IkRheSIsSWk7dmFyIG59KSgpLERpPSgoKT0+e3JldHVybihuPURpfHwoRGk9e30pKVtuLkRheVBlcmlvZHM9MF09IkRheVBlcmlvZHMiLG5bbi5EYXlzPTFdPSJEYXlzIixuW24uTW9udGhzPTJdPSJNb250aHMiLG5bbi5FcmFzPTNdPSJFcmFzIixEaTt2YXIgbn0pKCk7ZnVuY3Rpb24gTHVlKG4sdCxlLGkpe2xldCByPWZ1bmN0aW9uKG4pe2lmKEJqKG4pKXJldHVybiBuO2lmKCJudW1iZXIiPT10eXBlb2YgbiYmIWlzTmFOKG4pKXJldHVybiBuZXcgRGF0ZShuKTtpZigic3RyaW5nIj09dHlwZW9mIG4pe2lmKG49bi50cmltKCksL14oXGR7NH0oLVxkezEsMn0oLVxkezEsMn0pPyk/KSQvLnRlc3Qobikpe2xldFtyLG89MSxhPTFdPW4uc3BsaXQoIi0iKS5tYXAocz0+K3MpO3JldHVybiBwdyhyLG8tMSxhKX1sZXQgaSxlPXBhcnNlRmxvYXQobik7aWYoIWlzTmFOKG4tZSkpcmV0dXJuIG5ldyBEYXRlKGUpO2lmKGk9bi5tYXRjaChGdWUpKXJldHVybiBmdW5jdGlvbihuKXtsZXQgdD1uZXcgRGF0ZSgwKSxlPTAsaT0wLHI9bls4XT90LnNldFVUQ0Z1bGxZZWFyOnQuc2V0RnVsbFllYXIsbz1uWzhdP3Quc2V0VVRDSG91cnM6dC5zZXRIb3VycztuWzldJiYoZT1OdW1iZXIobls5XStuWzEwXSksaT1OdW1iZXIobls5XStuWzExXSkpLHIuY2FsbCh0LE51bWJlcihuWzFdKSxOdW1iZXIoblsyXSktMSxOdW1iZXIoblszXSkpO2xldCBhPU51bWJlcihuWzRdfHwwKS1lLHM9TnVtYmVyKG5bNV18fDApLWksbD1OdW1iZXIobls2XXx8MCksYz1NYXRoLmZsb29yKDFlMypwYXJzZUZsb2F0KCIwLiIrKG5bN118fDApKSk7cmV0dXJuIG8uY2FsbCh0LGEscyxsLGMpLHR9KGkpfWxldCB0PW5ldyBEYXRlKG4pO2lmKCFCaih0KSl0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBjb252ZXJ0ICIke259IiBpbnRvIGEgZGF0ZWApO3JldHVybiB0fShuKTt0PXNkKGUsdCl8fHQ7bGV0IHMsYT1bXTtmb3IoO3Q7KXtpZihzPU51ZS5leGVjKHQpLCFzKXthLnB1c2godCk7YnJlYWt9e2E9YS5jb25jYXQocy5zbGljZSgxKSk7bGV0IGQ9YS5wb3AoKTtpZighZClicmVhazt0PWR9fWxldCBsPXIuZ2V0VGltZXpvbmVPZmZzZXQoKTtpJiYobD1aaihpLGwpLHI9ZnVuY3Rpb24obix0LGUpe2xldCByPW4uZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4gZnVuY3Rpb24obix0KXtyZXR1cm4obj1uZXcgRGF0ZShuLmdldFRpbWUoKSkpLnNldE1pbnV0ZXMobi5nZXRNaW51dGVzKCkrdCksbn0obiwtMSooWmoodCxyKS1yKSl9KHIsaSkpO2xldCBjPSIiO3JldHVybiBhLmZvckVhY2goZD0+e2xldCB1PWZ1bmN0aW9uKG4pe2lmKEdrW25dKXJldHVybiBHa1tuXTtsZXQgdDtzd2l0Y2gobil7Y2FzZSJHIjpjYXNlIkdHIjpjYXNlIkdHRyI6dD1ycihEaS5FcmFzLFhpLkFiYnJldmlhdGVkKTticmVhaztjYXNlIkdHR0ciOnQ9cnIoRGkuRXJhcyxYaS5XaWRlKTticmVhaztjYXNlIkdHR0dHIjp0PXJyKERpLkVyYXMsWGkuTmFycm93KTticmVhaztjYXNlInkiOnQ9JHIoSWkuRnVsbFllYXIsMSwwLCExLCEwKTticmVhaztjYXNlInl5Ijp0PSRyKElpLkZ1bGxZZWFyLDIsMCwhMCwhMCk7YnJlYWs7Y2FzZSJ5eXkiOnQ9JHIoSWkuRnVsbFllYXIsMywwLCExLCEwKTticmVhaztjYXNlInl5eXkiOnQ9JHIoSWkuRnVsbFllYXIsNCwwLCExLCEwKTticmVhaztjYXNlIlkiOnQ9bHcoMSk7YnJlYWs7Y2FzZSJZWSI6dD1sdygyLCEwKTticmVhaztjYXNlIllZWSI6dD1sdygzKTticmVhaztjYXNlIllZWVkiOnQ9bHcoNCk7YnJlYWs7Y2FzZSJNIjpjYXNlIkwiOnQ9JHIoSWkuTW9udGgsMSwxKTticmVhaztjYXNlIk1NIjpjYXNlIkxMIjp0PSRyKElpLk1vbnRoLDIsMSk7YnJlYWs7Y2FzZSJNTU0iOnQ9cnIoRGkuTW9udGhzLFhpLkFiYnJldmlhdGVkKTticmVhaztjYXNlIk1NTU0iOnQ9cnIoRGkuTW9udGhzLFhpLldpZGUpO2JyZWFrO2Nhc2UiTU1NTU0iOnQ9cnIoRGkuTW9udGhzLFhpLk5hcnJvdyk7YnJlYWs7Y2FzZSJMTEwiOnQ9cnIoRGkuTW9udGhzLFhpLkFiYnJldmlhdGVkLEJvLlN0YW5kYWxvbmUpO2JyZWFrO2Nhc2UiTExMTCI6dD1ycihEaS5Nb250aHMsWGkuV2lkZSxCby5TdGFuZGFsb25lKTticmVhaztjYXNlIkxMTExMIjp0PXJyKERpLk1vbnRocyxYaS5OYXJyb3csQm8uU3RhbmRhbG9uZSk7YnJlYWs7Y2FzZSJ3Ijp0PWprKDEpO2JyZWFrO2Nhc2Uid3ciOnQ9amsoMik7YnJlYWs7Y2FzZSJXIjp0PWprKDEsITApO2JyZWFrO2Nhc2UiZCI6dD0kcihJaS5EYXRlLDEpO2JyZWFrO2Nhc2UiZGQiOnQ9JHIoSWkuRGF0ZSwyKTticmVhaztjYXNlImMiOmNhc2UiY2MiOnQ9JHIoSWkuRGF5LDEpO2JyZWFrO2Nhc2UiY2NjIjp0PXJyKERpLkRheXMsWGkuQWJicmV2aWF0ZWQsQm8uU3RhbmRhbG9uZSk7YnJlYWs7Y2FzZSJjY2NjIjp0PXJyKERpLkRheXMsWGkuV2lkZSxCby5TdGFuZGFsb25lKTticmVhaztjYXNlImNjY2NjIjp0PXJyKERpLkRheXMsWGkuTmFycm93LEJvLlN0YW5kYWxvbmUpO2JyZWFrO2Nhc2UiY2NjY2NjIjp0PXJyKERpLkRheXMsWGkuU2hvcnQsQm8uU3RhbmRhbG9uZSk7YnJlYWs7Y2FzZSJFIjpjYXNlIkVFIjpjYXNlIkVFRSI6dD1ycihEaS5EYXlzLFhpLkFiYnJldmlhdGVkKTticmVhaztjYXNlIkVFRUUiOnQ9cnIoRGkuRGF5cyxYaS5XaWRlKTticmVhaztjYXNlIkVFRUVFIjp0PXJyKERpLkRheXMsWGkuTmFycm93KTticmVhaztjYXNlIkVFRUVFRSI6dD1ycihEaS5EYXlzLFhpLlNob3J0KTticmVhaztjYXNlImEiOmNhc2UiYWEiOmNhc2UiYWFhIjp0PXJyKERpLkRheVBlcmlvZHMsWGkuQWJicmV2aWF0ZWQpO2JyZWFrO2Nhc2UiYWFhYSI6dD1ycihEaS5EYXlQZXJpb2RzLFhpLldpZGUpO2JyZWFrO2Nhc2UiYWFhYWEiOnQ9cnIoRGkuRGF5UGVyaW9kcyxYaS5OYXJyb3cpO2JyZWFrO2Nhc2UiYiI6Y2FzZSJiYiI6Y2FzZSJiYmIiOnQ9cnIoRGkuRGF5UGVyaW9kcyxYaS5BYmJyZXZpYXRlZCxCby5TdGFuZGFsb25lLCEwKTticmVhaztjYXNlImJiYmIiOnQ9cnIoRGkuRGF5UGVyaW9kcyxYaS5XaWRlLEJvLlN0YW5kYWxvbmUsITApO2JyZWFrO2Nhc2UiYmJiYmIiOnQ9cnIoRGkuRGF5UGVyaW9kcyxYaS5OYXJyb3csQm8uU3RhbmRhbG9uZSwhMCk7YnJlYWs7Y2FzZSJCIjpjYXNlIkJCIjpjYXNlIkJCQiI6dD1ycihEaS5EYXlQZXJpb2RzLFhpLkFiYnJldmlhdGVkLEJvLkZvcm1hdCwhMCk7YnJlYWs7Y2FzZSJCQkJCIjp0PXJyKERpLkRheVBlcmlvZHMsWGkuV2lkZSxCby5Gb3JtYXQsITApO2JyZWFrO2Nhc2UiQkJCQkIiOnQ9cnIoRGkuRGF5UGVyaW9kcyxYaS5OYXJyb3csQm8uRm9ybWF0LCEwKTticmVhaztjYXNlImgiOnQ9JHIoSWkuSG91cnMsMSwtMTIpO2JyZWFrO2Nhc2UiaGgiOnQ9JHIoSWkuSG91cnMsMiwtMTIpO2JyZWFrO2Nhc2UiSCI6dD0kcihJaS5Ib3VycywxKTticmVhaztjYXNlIkhIIjp0PSRyKElpLkhvdXJzLDIpO2JyZWFrO2Nhc2UibSI6dD0kcihJaS5NaW51dGVzLDEpO2JyZWFrO2Nhc2UibW0iOnQ9JHIoSWkuTWludXRlcywyKTticmVhaztjYXNlInMiOnQ9JHIoSWkuU2Vjb25kcywxKTticmVhaztjYXNlInNzIjp0PSRyKElpLlNlY29uZHMsMik7YnJlYWs7Y2FzZSJTIjp0PSRyKElpLkZyYWN0aW9uYWxTZWNvbmRzLDEpO2JyZWFrO2Nhc2UiU1MiOnQ9JHIoSWkuRnJhY3Rpb25hbFNlY29uZHMsMik7YnJlYWs7Y2FzZSJTU1MiOnQ9JHIoSWkuRnJhY3Rpb25hbFNlY29uZHMsMyk7YnJlYWs7Y2FzZSJaIjpjYXNlIlpaIjpjYXNlIlpaWiI6dD1zdyhJbC5TaG9ydCk7YnJlYWs7Y2FzZSJaWlpaWiI6dD1zdyhJbC5FeHRlbmRlZCk7YnJlYWs7Y2FzZSJPIjpjYXNlIk9PIjpjYXNlIk9PTyI6Y2FzZSJ6IjpjYXNlInp6IjpjYXNlInp6eiI6dD1zdyhJbC5TaG9ydEdNVCk7YnJlYWs7Y2FzZSJPT09PIjpjYXNlIlpaWloiOmNhc2Uienp6eiI6dD1zdyhJbC5Mb25nKTticmVhaztkZWZhdWx0OnJldHVybiBudWxsfXJldHVybiBHa1tuXT10LHR9KGQpO2MrPXU/dShyLGUsbCk6IicnIj09PWQ/IiciOmQucmVwbGFjZSgvKF4nfCckKS9nLCIiKS5yZXBsYWNlKC8nJy9nLCInIil9KSxjfWZ1bmN0aW9uIHB3KG4sdCxlKXtsZXQgaT1uZXcgRGF0ZSgwKTtyZXR1cm4gaS5zZXRGdWxsWWVhcihuLHQsZSksaS5zZXRIb3VycygwLDAsMCksaX1mdW5jdGlvbiBzZChuLHQpe2xldCBlPWZ1bmN0aW9uKG4pe3JldHVybiBGYShuKVtoci5Mb2NhbGVJZF19KG4pO2lmKEViW2VdPUViW2VdfHx7fSxFYltlXVt0XSlyZXR1cm4gRWJbZV1bdF07bGV0IGk9IiI7c3dpdGNoKHQpe2Nhc2Uic2hvcnREYXRlIjppPWl3KG4scGEuU2hvcnQpO2JyZWFrO2Nhc2UibWVkaXVtRGF0ZSI6aT1pdyhuLHBhLk1lZGl1bSk7YnJlYWs7Y2FzZSJsb25nRGF0ZSI6aT1pdyhuLHBhLkxvbmcpO2JyZWFrO2Nhc2UiZnVsbERhdGUiOmk9aXcobixwYS5GdWxsKTticmVhaztjYXNlInNob3J0VGltZSI6aT1ydyhuLHBhLlNob3J0KTticmVhaztjYXNlIm1lZGl1bVRpbWUiOmk9cncobixwYS5NZWRpdW0pO2JyZWFrO2Nhc2UibG9uZ1RpbWUiOmk9cncobixwYS5Mb25nKTticmVhaztjYXNlImZ1bGxUaW1lIjppPXJ3KG4scGEuRnVsbCk7YnJlYWs7Y2FzZSJzaG9ydCI6bGV0IHI9c2Qobiwic2hvcnRUaW1lIiksbz1zZChuLCJzaG9ydERhdGUiKTtpPWF3KG93KG4scGEuU2hvcnQpLFtyLG9dKTticmVhaztjYXNlIm1lZGl1bSI6bGV0IGE9c2QobiwibWVkaXVtVGltZSIpLHM9c2QobiwibWVkaXVtRGF0ZSIpO2k9YXcob3cobixwYS5NZWRpdW0pLFthLHNdKTticmVhaztjYXNlImxvbmciOmxldCBsPXNkKG4sImxvbmdUaW1lIiksYz1zZChuLCJsb25nRGF0ZSIpO2k9YXcob3cobixwYS5Mb25nKSxbbCxjXSk7YnJlYWs7Y2FzZSJmdWxsIjpsZXQgZD1zZChuLCJmdWxsVGltZSIpLHU9c2QobiwiZnVsbERhdGUiKTtpPWF3KG93KG4scGEuRnVsbCksW2QsdV0pfXJldHVybiBpJiYoRWJbZV1bdF09aSksaX1mdW5jdGlvbiBhdyhuLHQpe3JldHVybiB0JiYobj1uLnJlcGxhY2UoL1x7KFtefV0rKX0vZyxmdW5jdGlvbihlLGkpe3JldHVybiBudWxsIT10JiZpIGluIHQ/dFtpXTplfSkpLG59ZnVuY3Rpb24gRGwobix0LGU9Ii0iLGkscil7bGV0IG89IiI7KG48MHx8ciYmbjw9MCkmJihyP249MS1uOihuPS1uLG89ZSkpO2xldCBhPVN0cmluZyhuKTtmb3IoO2EubGVuZ3RoPHQ7KWE9IjAiK2E7cmV0dXJuIGkmJihhPWEuc2xpY2UoYS5sZW5ndGgtdCkpLG8rYX1mdW5jdGlvbiAkcihuLHQsZT0wLGk9ITEscj0hMSl7cmV0dXJuIGZ1bmN0aW9uKG8sYSl7bGV0IHM9ZnVuY3Rpb24obix0KXtzd2l0Y2gobil7Y2FzZSBJaS5GdWxsWWVhcjpyZXR1cm4gdC5nZXRGdWxsWWVhcigpO2Nhc2UgSWkuTW9udGg6cmV0dXJuIHQuZ2V0TW9udGgoKTtjYXNlIElpLkRhdGU6cmV0dXJuIHQuZ2V0RGF0ZSgpO2Nhc2UgSWkuSG91cnM6cmV0dXJuIHQuZ2V0SG91cnMoKTtjYXNlIElpLk1pbnV0ZXM6cmV0dXJuIHQuZ2V0TWludXRlcygpO2Nhc2UgSWkuU2Vjb25kczpyZXR1cm4gdC5nZXRTZWNvbmRzKCk7Y2FzZSBJaS5GcmFjdGlvbmFsU2Vjb25kczpyZXR1cm4gdC5nZXRNaWxsaXNlY29uZHMoKTtjYXNlIElpLkRheTpyZXR1cm4gdC5nZXREYXkoKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5rbm93biBEYXRlVHlwZSB2YWx1ZSAiJHtufSIuYCl9fShuLG8pO2lmKChlPjB8fHM+LWUpJiYocys9ZSksbj09PUlpLkhvdXJzKTA9PT1zJiYtMTI9PT1lJiYocz0xMik7ZWxzZSBpZihuPT09SWkuRnJhY3Rpb25hbFNlY29uZHMpcmV0dXJuIGZ1bmN0aW9uKG4sdCl7cmV0dXJuIERsKG4sMykuc3Vic3RyaW5nKDAsdCl9KHMsdCk7bGV0IGw9bGQoYSxZby5NaW51c1NpZ24pO3JldHVybiBEbChzLHQsbCxpLHIpfX1mdW5jdGlvbiBycihuLHQsZT1Cby5Gb3JtYXQsaT0hMSl7cmV0dXJuIGZ1bmN0aW9uKHIsbyl7cmV0dXJuIGZ1bmN0aW9uKG4sdCxlLGkscixvKXtzd2l0Y2goZSl7Y2FzZSBEaS5Nb250aHM6cmV0dXJuIGZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1GYShuKSxvPXpzKFtpW2hyLk1vbnRoc0Zvcm1hdF0saVtoci5Nb250aHNTdGFuZGFsb25lXV0sdCk7cmV0dXJuIHpzKG8sZSl9KHQscixpKVtuLmdldE1vbnRoKCldO2Nhc2UgRGkuRGF5czpyZXR1cm4gZnVuY3Rpb24obix0LGUpe2xldCBpPUZhKG4pLG89enMoW2lbaHIuRGF5c0Zvcm1hdF0saVtoci5EYXlzU3RhbmRhbG9uZV1dLHQpO3JldHVybiB6cyhvLGUpfSh0LHIsaSlbbi5nZXREYXkoKV07Y2FzZSBEaS5EYXlQZXJpb2RzOmxldCBhPW4uZ2V0SG91cnMoKSxzPW4uZ2V0TWludXRlcygpO2lmKG8pe2xldCBjPWZ1bmN0aW9uKG4pe2xldCB0PUZhKG4pO3JldHVybiBZaih0KSwodFtoci5FeHRyYURhdGFdWzJdfHxbXSkubWFwKGk9PiJzdHJpbmciPT10eXBlb2YgaT9VayhpKTpbVWsoaVswXSksVWsoaVsxXSldKX0odCksZD1mdW5jdGlvbihuLHQsZSl7bGV0IGk9RmEobik7WWooaSk7bGV0IG89enMoW2lbaHIuRXh0cmFEYXRhXVswXSxpW2hyLkV4dHJhRGF0YV1bMV1dLHQpfHxbXTtyZXR1cm4genMobyxlKXx8W119KHQscixpKSx1PWMuZmluZEluZGV4KHA9PntpZihBcnJheS5pc0FycmF5KHApKXtsZXRbaCxtXT1wLF89YT49aC5ob3VycyYmcz49aC5taW51dGVzLE09YTxtLmhvdXJzfHxhPT09bS5ob3VycyYmczxtLm1pbnV0ZXM7aWYoaC5ob3VyczxtLmhvdXJzKXtpZihfJiZNKXJldHVybiEwfWVsc2UgaWYoX3x8TSlyZXR1cm4hMH1lbHNlIGlmKHAuaG91cnM9PT1hJiZwLm1pbnV0ZXM9PT1zKXJldHVybiEwO3JldHVybiExfSk7aWYoLTEhPT11KXJldHVybiBkW3VdfXJldHVybiBmdW5jdGlvbihuLHQsZSl7bGV0IGk9RmEobiksbz16cyhbaVtoci5EYXlQZXJpb2RzRm9ybWF0XSxpW2hyLkRheVBlcmlvZHNTdGFuZGFsb25lXV0sdCk7cmV0dXJuIHpzKG8sZSl9KHQscixpKVthPDEyPzA6MV07Y2FzZSBEaS5FcmFzOnJldHVybiBmdW5jdGlvbihuLHQpe3JldHVybiB6cyhGYShuKVtoci5FcmFzXSx0KX0odCxpKVtuLmdldEZ1bGxZZWFyKCk8PTA/MDoxXTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgdW5leHBlY3RlZCB0cmFuc2xhdGlvbiB0eXBlICR7ZX1gKX19KHIsbyxuLHQsZSxpKX19ZnVuY3Rpb24gc3cobil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxpKXtsZXQgcj0tMSppLG89bGQoZSxZby5NaW51c1NpZ24pLGE9cj4wP01hdGguZmxvb3Ioci82MCk6TWF0aC5jZWlsKHIvNjApO3N3aXRjaChuKXtjYXNlIElsLlNob3J0OnJldHVybihyPj0wPyIrIjoiIikrRGwoYSwyLG8pK0RsKE1hdGguYWJzKHIlNjApLDIsbyk7Y2FzZSBJbC5TaG9ydEdNVDpyZXR1cm4iR01UIisocj49MD8iKyI6IiIpK0RsKGEsMSxvKTtjYXNlIElsLkxvbmc6cmV0dXJuIkdNVCIrKHI+PTA/IisiOiIiKStEbChhLDIsbykrIjoiK0RsKE1hdGguYWJzKHIlNjApLDIsbyk7Y2FzZSBJbC5FeHRlbmRlZDpyZXR1cm4gMD09PWk/IloiOihyPj0wPyIrIjoiIikrRGwoYSwyLG8pKyI6IitEbChNYXRoLmFicyhyJTYwKSwyLG8pO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHpvbmUgd2lkdGggIiR7bn0iYCl9fX12YXIgenVlPTAsZHc9NDtmdW5jdGlvbiBRaihuKXtyZXR1cm4gcHcobi5nZXRGdWxsWWVhcigpLG4uZ2V0TW9udGgoKSxuLmdldERhdGUoKSsoZHctbi5nZXREYXkoKSkpfWZ1bmN0aW9uIGprKG4sdD0hMSl7cmV0dXJuIGZ1bmN0aW9uKGUsaSl7bGV0IHI7aWYodCl7bGV0IG89bmV3IERhdGUoZS5nZXRGdWxsWWVhcigpLGUuZ2V0TW9udGgoKSwxKS5nZXREYXkoKS0xLGE9ZS5nZXREYXRlKCk7cj0xK01hdGguZmxvb3IoKGErbykvNyl9ZWxzZXtsZXQgbz1RaihlKSxhPWZ1bmN0aW9uKG4pe2xldCB0PXB3KG4senVlLDEpLmdldERheSgpO3JldHVybiBwdyhuLDAsMSsodDw9ZHc/ZHc6ZHcrNyktdCl9KG8uZ2V0RnVsbFllYXIoKSkscz1vLmdldFRpbWUoKS1hLmdldFRpbWUoKTtyPTErTWF0aC5yb3VuZChzLzYwNDhlNSl9cmV0dXJuIERsKHIsbixsZChpLFlvLk1pbnVzU2lnbikpfX1mdW5jdGlvbiBsdyhuLHQ9ITEpe3JldHVybiBmdW5jdGlvbihlLGkpe3JldHVybiBEbChRaihlKS5nZXRGdWxsWWVhcigpLG4sbGQoaSxZby5NaW51c1NpZ24pLHQpfX12YXIgR2s9e307ZnVuY3Rpb24gWmoobix0KXtuPW4ucmVwbGFjZSgvOi9nLCIiKTtsZXQgZT1EYXRlLnBhcnNlKCJKYW4gMDEsIDE5NzAgMDA6MDA6MDAgIituKS82ZTQ7cmV0dXJuIGlzTmFOKGUpP3Q6ZX1mdW5jdGlvbiBCaihuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIERhdGUmJiFpc05hTihuLnZhbHVlT2YoKSl9dmFyIFl1ZT0vXihcZCspP1wuKChcZCspKC0oXGQrKSk/KT8kLyxWaj0yMixodz0iLiIsVGI9IjAiLFF1ZT0iOyIsWnVlPSIsIixXaz0iIyI7ZnVuY3Rpb24gZU8obix0LGUpe2xldCBpPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIEZhKG4pW2hyLk51bWJlckZvcm1hdHNdW3RdfSh0LGN3LkRlY2ltYWwpLHI9ZnVuY3Rpb24obix0PSItIil7bGV0IGU9e21pbkludDoxLG1pbkZyYWM6MCxtYXhGcmFjOjAscG9zUHJlOiIiLHBvc1N1ZjoiIixuZWdQcmU6IiIsbmVnU3VmOiIiLGdTaXplOjAsbGdTaXplOjB9LGk9bi5zcGxpdChRdWUpLHI9aVswXSxvPWlbMV0sYT0tMSE9PXIuaW5kZXhPZihodyk/ci5zcGxpdChodyk6W3Iuc3Vic3RyaW5nKDAsci5sYXN0SW5kZXhPZihUYikrMSksci5zdWJzdHJpbmcoci5sYXN0SW5kZXhPZihUYikrMSldLHM9YVswXSxsPWFbMV18fCIiO2UucG9zUHJlPXMuc3Vic3RyaW5nKDAscy5pbmRleE9mKFdrKSk7Zm9yKGxldCBkPTA7ZDxsLmxlbmd0aDtkKyspe2xldCB1PWwuY2hhckF0KGQpO3U9PT1UYj9lLm1pbkZyYWM9ZS5tYXhGcmFjPWQrMTp1PT09V2s/ZS5tYXhGcmFjPWQrMTplLnBvc1N1Zis9dX1sZXQgYz1zLnNwbGl0KFp1ZSk7aWYoZS5nU2l6ZT1jWzFdP2NbMV0ubGVuZ3RoOjAsZS5sZ1NpemU9Y1syXXx8Y1sxXT8oY1syXXx8Y1sxXSkubGVuZ3RoOjAsbyl7bGV0IGQ9ci5sZW5ndGgtZS5wb3NQcmUubGVuZ3RoLWUucG9zU3VmLmxlbmd0aCx1PW8uaW5kZXhPZihXayk7ZS5uZWdQcmU9by5zdWJzdHJpbmcoMCx1KS5yZXBsYWNlKC8nL2csIiIpLGUubmVnU3VmPW8uc2xpY2UodStkKS5yZXBsYWNlKC8nL2csIiIpfWVsc2UgZS5uZWdQcmU9dCtlLnBvc1ByZSxlLm5lZ1N1Zj1lLnBvc1N1ZjtyZXR1cm4gZX0oaSxsZCh0LFlvLk1pbnVzU2lnbikpO3JldHVybiBmdW5jdGlvbihuLHQsZSxpLHIsbyxhPSExKXtsZXQgcz0iIixsPSExO2lmKGlzRmluaXRlKG4pKXtsZXQgYz1mdW5jdGlvbihuKXtsZXQgaSxyLG8sYSxzLHQ9TWF0aC5hYnMobikrIiIsZT0wO2Zvcigocj10LmluZGV4T2YoaHcpKT4tMSYmKHQ9dC5yZXBsYWNlKGh3LCIiKSksKG89dC5zZWFyY2goL2UvaSkpPjA/KHI8MCYmKHI9bykscis9K3Quc2xpY2UobysxKSx0PXQuc3Vic3RyaW5nKDAsbykpOnI8MCYmKHI9dC5sZW5ndGgpLG89MDt0LmNoYXJBdChvKT09PVRiO28rKyk7aWYobz09PShzPXQubGVuZ3RoKSlpPVswXSxyPTE7ZWxzZXtmb3Iocy0tO3QuY2hhckF0KHMpPT09VGI7KXMtLTtmb3Ioci09byxpPVtdLGE9MDtvPD1zO28rKyxhKyspaVthXT1OdW1iZXIodC5jaGFyQXQobykpfXJldHVybiByPlZqJiYoaT1pLnNwbGljZSgwLFZqLTEpLGU9ci0xLHI9MSkse2RpZ2l0czppLGV4cG9uZW50OmUsaW50ZWdlckxlbjpyfX0obik7YSYmKGM9ZnVuY3Rpb24obil7aWYoMD09PW4uZGlnaXRzWzBdKXJldHVybiBuO2xldCB0PW4uZGlnaXRzLmxlbmd0aC1uLmludGVnZXJMZW47cmV0dXJuIG4uZXhwb25lbnQ/bi5leHBvbmVudCs9MjooMD09PXQ/bi5kaWdpdHMucHVzaCgwLDApOjE9PT10JiZuLmRpZ2l0cy5wdXNoKDApLG4uaW50ZWdlckxlbis9Miksbn0oYykpO2xldCBkPXQubWluSW50LHU9dC5taW5GcmFjLHA9dC5tYXhGcmFjO2lmKG8pe2xldCB4PW8ubWF0Y2goWXVlKTtpZihudWxsPT09eCl0aHJvdyBuZXcgRXJyb3IoYCR7b30gaXMgbm90IGEgdmFsaWQgZGlnaXQgaW5mb2ApO2xldCBSPXhbMV0sST14WzNdLEI9eFs1XTtudWxsIT1SJiYoZD1xayhSKSksbnVsbCE9SSYmKHU9cWsoSSkpLG51bGwhPUI/cD1xayhCKTpudWxsIT1JJiZ1PnAmJihwPXUpfSFmdW5jdGlvbihuLHQsZSl7aWYodD5lKXRocm93IG5ldyBFcnJvcihgVGhlIG1pbmltdW0gbnVtYmVyIG9mIGRpZ2l0cyBhZnRlciBmcmFjdGlvbiAoJHt0fSkgaXMgaGlnaGVyIHRoYW4gdGhlIG1heGltdW0gKCR7ZX0pLmApO2xldCBpPW4uZGlnaXRzLHI9aS5sZW5ndGgtbi5pbnRlZ2VyTGVuLG89TWF0aC5taW4oTWF0aC5tYXgodCxyKSxlKSxhPW8rbi5pbnRlZ2VyTGVuLHM9aVthXTtpZihhPjApe2kuc3BsaWNlKE1hdGgubWF4KG4uaW50ZWdlckxlbixhKSk7Zm9yKGxldCB1PWE7dTxpLmxlbmd0aDt1KyspaVt1XT0wfWVsc2V7cj1NYXRoLm1heCgwLHIpLG4uaW50ZWdlckxlbj0xLGkubGVuZ3RoPU1hdGgubWF4KDEsYT1vKzEpLGlbMF09MDtmb3IobGV0IHU9MTt1PGE7dSsrKWlbdV09MH1pZihzPj01KWlmKGEtMTwwKXtmb3IobGV0IHU9MDt1PmE7dS0tKWkudW5zaGlmdCgwKSxuLmludGVnZXJMZW4rKztpLnVuc2hpZnQoMSksbi5pbnRlZ2VyTGVuKyt9ZWxzZSBpW2EtMV0rKztmb3IoO3I8TWF0aC5tYXgoMCxvKTtyKyspaS5wdXNoKDApO2xldCBsPTAhPT1vLGM9dCtuLmludGVnZXJMZW4sZD1pLnJlZHVjZVJpZ2h0KGZ1bmN0aW9uKHUscCxoLG0pe3JldHVybiBtW2hdPShwKz11KTwxMD9wOnAtMTAsbCYmKDA9PT1tW2hdJiZoPj1jP20ucG9wKCk6bD0hMSkscD49MTA/MTowfSwwKTtkJiYoaS51bnNoaWZ0KGQpLG4uaW50ZWdlckxlbisrKX0oYyx1LHApO2xldCBoPWMuZGlnaXRzLG09Yy5pbnRlZ2VyTGVuLF89Yy5leHBvbmVudCxNPVtdO2ZvcihsPWguZXZlcnkoeD0+IXgpO208ZDttKyspaC51bnNoaWZ0KDApO2Zvcig7bTwwO20rKyloLnVuc2hpZnQoMCk7bT4wP009aC5zcGxpY2UobSxoLmxlbmd0aCk6KE09aCxoPVswXSk7bGV0IHk9W107Zm9yKGgubGVuZ3RoPj10LmxnU2l6ZSYmeS51bnNoaWZ0KGguc3BsaWNlKC10LmxnU2l6ZSxoLmxlbmd0aCkuam9pbigiIikpO2gubGVuZ3RoPnQuZ1NpemU7KXkudW5zaGlmdChoLnNwbGljZSgtdC5nU2l6ZSxoLmxlbmd0aCkuam9pbigiIikpO2gubGVuZ3RoJiZ5LnVuc2hpZnQoaC5qb2luKCIiKSkscz15LmpvaW4obGQoZSxpKSksTS5sZW5ndGgmJihzKz1sZChlLHIpK00uam9pbigiIikpLF8mJihzKz1sZChlLFlvLkV4cG9uZW50aWFsKSsiKyIrXyl9ZWxzZSBzPWxkKGUsWW8uSW5maW5pdHkpO3JldHVybiBzPW48MCYmIWw/dC5uZWdQcmUrcyt0Lm5lZ1N1Zjp0LnBvc1ByZStzK3QucG9zU3VmLHN9KG4scix0LFlvLkdyb3VwLFlvLkRlY2ltYWwsZSl9ZnVuY3Rpb24gcWsobil7bGV0IHQ9cGFyc2VJbnQobik7aWYoaXNOYU4odCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGludGVnZXIgbGl0ZXJhbCB3aGVuIHBhcnNpbmcgIituKTtyZXR1cm4gdH1mdW5jdGlvbiBmdyhuLHQpe3Q9ZW5jb2RlVVJJQ29tcG9uZW50KHQpO2ZvcihsZXQgZSBvZiBuLnNwbGl0KCI7Iikpe2xldCBpPWUuaW5kZXhPZigiPSIpLFtyLG9dPS0xPT1pP1tlLCIiXTpbZS5zbGljZSgwLGkpLGUuc2xpY2UoaSsxKV07aWYoci50cmltKCk9PT10KXJldHVybiBkZWNvZGVVUklDb21wb25lbnQobyl9cmV0dXJuIG51bGx9dmFyIFhrPS9ccysvLEhqPVtdLHduPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyl7dGhpcy5faXRlcmFibGVEaWZmZXJzPWUsdGhpcy5fa2V5VmFsdWVEaWZmZXJzPWksdGhpcy5fbmdFbD1yLHRoaXMuX3JlbmRlcmVyPW8sdGhpcy5pbml0aWFsQ2xhc3Nlcz1Iaix0aGlzLnN0YXRlTWFwPW5ldyBNYXB9c2V0IGtsYXNzKGUpe3RoaXMuaW5pdGlhbENsYXNzZXM9bnVsbCE9ZT9lLnRyaW0oKS5zcGxpdChYayk6SGp9c2V0IG5nQ2xhc3MoZSl7dGhpcy5yYXdDbGFzcz0ic3RyaW5nIj09dHlwZW9mIGU/ZS50cmltKCkuc3BsaXQoWGspOmV9bmdEb0NoZWNrKCl7Zm9yKGxldCBpIG9mIHRoaXMuaW5pdGlhbENsYXNzZXMpdGhpcy5fdXBkYXRlU3RhdGUoaSwhMCk7bGV0IGU9dGhpcy5yYXdDbGFzcztpZihBcnJheS5pc0FycmF5KGUpfHxlIGluc3RhbmNlb2YgU2V0KWZvcihsZXQgaSBvZiBlKXRoaXMuX3VwZGF0ZVN0YXRlKGksITApO2Vsc2UgaWYobnVsbCE9ZSlmb3IobGV0IGkgb2YgT2JqZWN0LmtleXMoZSkpdGhpcy5fdXBkYXRlU3RhdGUoaSxCb29sZWFuKGVbaV0pKTt0aGlzLl9hcHBseVN0YXRlRGlmZigpfV91cGRhdGVTdGF0ZShlLGkpe2xldCByPXRoaXMuc3RhdGVNYXAuZ2V0KGUpO3ZvaWQgMCE9PXI/KHIuZW5hYmxlZCE9PWkmJihyLmNoYW5nZWQ9ITAsci5lbmFibGVkPWkpLHIudG91Y2hlZD0hMCk6dGhpcy5zdGF0ZU1hcC5zZXQoZSx7ZW5hYmxlZDppLGNoYW5nZWQ6ITAsdG91Y2hlZDohMH0pfV9hcHBseVN0YXRlRGlmZigpe2ZvcihsZXQgZSBvZiB0aGlzLnN0YXRlTWFwKXtsZXQgaT1lWzBdLHI9ZVsxXTtyLmNoYW5nZWQ/KHRoaXMuX3RvZ2dsZUNsYXNzKGksci5lbmFibGVkKSxyLmNoYW5nZWQ9ITEpOnIudG91Y2hlZHx8KHIuZW5hYmxlZCYmdGhpcy5fdG9nZ2xlQ2xhc3MoaSwhMSksdGhpcy5zdGF0ZU1hcC5kZWxldGUoaSkpLHIudG91Y2hlZD0hMX19X3RvZ2dsZUNsYXNzKGUsaSl7KGU9ZS50cmltKCkpLmxlbmd0aD4wJiZlLnNwbGl0KFhrKS5mb3JFYWNoKHI9PntpP3RoaXMuX3JlbmRlcmVyLmFkZENsYXNzKHRoaXMuX25nRWwubmF0aXZlRWxlbWVudCxyKTp0aGlzLl9yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLl9uZ0VsLm5hdGl2ZUVsZW1lbnQscil9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhUbCksQyhTYiksQyh4ZSksQyhkYykpfSxuLlx1MDI3NWRpcj1NZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJuZ0NsYXNzIiwiIl1dLGlucHV0czp7a2xhc3M6WyJjbGFzcyIsImtsYXNzIl0sbmdDbGFzczoibmdDbGFzcyJ9LHN0YW5kYWxvbmU6ITB9KSxufSkoKSxubj0oKCk9PntjbGFzcyBue3NldCBuZ0Zvck9mKGUpe3RoaXMuX25nRm9yT2Y9ZSx0aGlzLl9uZ0Zvck9mRGlydHk9ITB9c2V0IG5nRm9yVHJhY2tCeShlKXt0aGlzLl90cmFja0J5Rm49ZX1nZXQgbmdGb3JUcmFja0J5KCl7cmV0dXJuIHRoaXMuX3RyYWNrQnlGbn1jb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fdmlld0NvbnRhaW5lcj1lLHRoaXMuX3RlbXBsYXRlPWksdGhpcy5fZGlmZmVycz1yLHRoaXMuX25nRm9yT2Y9bnVsbCx0aGlzLl9uZ0Zvck9mRGlydHk9ITAsdGhpcy5fZGlmZmVyPW51bGx9c2V0IG5nRm9yVGVtcGxhdGUoZSl7ZSYmKHRoaXMuX3RlbXBsYXRlPWUpfW5nRG9DaGVjaygpe2lmKHRoaXMuX25nRm9yT2ZEaXJ0eSl7dGhpcy5fbmdGb3JPZkRpcnR5PSExO2xldCBlPXRoaXMuX25nRm9yT2Y7IXRoaXMuX2RpZmZlciYmZSYmKHRoaXMuX2RpZmZlcj10aGlzLl9kaWZmZXJzLmZpbmQoZSkuY3JlYXRlKHRoaXMubmdGb3JUcmFja0J5KSl9aWYodGhpcy5fZGlmZmVyKXtsZXQgZT10aGlzLl9kaWZmZXIuZGlmZih0aGlzLl9uZ0Zvck9mKTtlJiZ0aGlzLl9hcHBseUNoYW5nZXMoZSl9fV9hcHBseUNoYW5nZXMoZSl7bGV0IGk9dGhpcy5fdmlld0NvbnRhaW5lcjtlLmZvckVhY2hPcGVyYXRpb24oKHIsbyxhKT0+e2lmKG51bGw9PXIucHJldmlvdXNJbmRleClpLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90ZW1wbGF0ZSxuZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy4kaW1wbGljaXQ9dCx0aGlzLm5nRm9yT2Y9ZSx0aGlzLmluZGV4PWksdGhpcy5jb3VudD1yfWdldCBmaXJzdCgpe3JldHVybiAwPT09dGhpcy5pbmRleH1nZXQgbGFzdCgpe3JldHVybiB0aGlzLmluZGV4PT09dGhpcy5jb3VudC0xfWdldCBldmVuKCl7cmV0dXJuIHRoaXMuaW5kZXglMj09MH1nZXQgb2RkKCl7cmV0dXJuIXRoaXMuZXZlbn19KHIuaXRlbSx0aGlzLl9uZ0Zvck9mLC0xLC0xKSxudWxsPT09YT92b2lkIDA6YSk7ZWxzZSBpZihudWxsPT1hKWkucmVtb3ZlKG51bGw9PT1vP3ZvaWQgMDpvKTtlbHNlIGlmKG51bGwhPT1vKXtsZXQgcz1pLmdldChvKTtpLm1vdmUocyxhKSxVaihzLHIpfX0pO2ZvcihsZXQgcj0wLG89aS5sZW5ndGg7cjxvO3IrKyl7bGV0IHM9aS5nZXQocikuY29udGV4dDtzLmluZGV4PXIscy5jb3VudD1vLHMubmdGb3JPZj10aGlzLl9uZ0Zvck9mfWUuZm9yRWFjaElkZW50aXR5Q2hhbmdlKHI9PntVaihpLmdldChyLmN1cnJlbnRJbmRleCkscil9KX1zdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZChlLGkpe3JldHVybiEwfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGVpKSxDKG9pKSxDKFRsKSl9LG4uXHUwMjc1ZGlyPU1lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nRm9yIiwiIiwibmdGb3JPZiIsIiJdXSxpbnB1dHM6e25nRm9yT2Y6Im5nRm9yT2YiLG5nRm9yVHJhY2tCeToibmdGb3JUcmFja0J5IixuZ0ZvclRlbXBsYXRlOiJuZ0ZvclRlbXBsYXRlIn0sc3RhbmRhbG9uZTohMH0pLG59KSgpO2Z1bmN0aW9uIFVqKG4sdCl7bi5jb250ZXh0LiRpbXBsaWNpdD10Lml0ZW19dmFyIE5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLl92aWV3Q29udGFpbmVyPWUsdGhpcy5fY29udGV4dD1uZXcgWmssdGhpcy5fdGhlblRlbXBsYXRlUmVmPW51bGwsdGhpcy5fZWxzZVRlbXBsYXRlUmVmPW51bGwsdGhpcy5fdGhlblZpZXdSZWY9bnVsbCx0aGlzLl9lbHNlVmlld1JlZj1udWxsLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZj1pfXNldCBuZ0lmKGUpe3RoaXMuX2NvbnRleHQuJGltcGxpY2l0PXRoaXMuX2NvbnRleHQubmdJZj1lLHRoaXMuX3VwZGF0ZVZpZXcoKX1zZXQgbmdJZlRoZW4oZSl7amooIm5nSWZUaGVuIixlKSx0aGlzLl90aGVuVGVtcGxhdGVSZWY9ZSx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX3VwZGF0ZVZpZXcoKX1zZXQgbmdJZkVsc2UoZSl7amooIm5nSWZFbHNlIixlKSx0aGlzLl9lbHNlVGVtcGxhdGVSZWY9ZSx0aGlzLl9lbHNlVmlld1JlZj1udWxsLHRoaXMuX3VwZGF0ZVZpZXcoKX1fdXBkYXRlVmlldygpe3RoaXMuX2NvbnRleHQuJGltcGxpY2l0P3RoaXMuX3RoZW5WaWV3UmVmfHwodGhpcy5fdmlld0NvbnRhaW5lci5jbGVhcigpLHRoaXMuX2Vsc2VWaWV3UmVmPW51bGwsdGhpcy5fdGhlblRlbXBsYXRlUmVmJiYodGhpcy5fdGhlblZpZXdSZWY9dGhpcy5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGhlblRlbXBsYXRlUmVmLHRoaXMuX2NvbnRleHQpKSk6dGhpcy5fZWxzZVZpZXdSZWZ8fCh0aGlzLl92aWV3Q29udGFpbmVyLmNsZWFyKCksdGhpcy5fdGhlblZpZXdSZWY9bnVsbCx0aGlzLl9lbHNlVGVtcGxhdGVSZWYmJih0aGlzLl9lbHNlVmlld1JlZj10aGlzLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl9lbHNlVGVtcGxhdGVSZWYsdGhpcy5fY29udGV4dCkpKX1zdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZChlLGkpe3JldHVybiEwfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGVpKSxDKG9pKSl9LG4uXHUwMjc1ZGlyPU1lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nSWYiLCIiXV0saW5wdXRzOntuZ0lmOiJuZ0lmIixuZ0lmVGhlbjoibmdJZlRoZW4iLG5nSWZFbHNlOiJuZ0lmRWxzZSJ9LHN0YW5kYWxvbmU6ITB9KSxufSkoKSxaaz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuJGltcGxpY2l0PW51bGwsdGhpcy5uZ0lmPW51bGx9fTtmdW5jdGlvbiBqaihuLHQpe2lmKHQmJiF0LmNyZWF0ZUVtYmVkZGVkVmlldyl0aHJvdyBuZXcgRXJyb3IoYCR7bn0gbXVzdCBiZSBhIFRlbXBsYXRlUmVmLCBidXQgcmVjZWl2ZWQgJyR7cG8odCl9Jy5gKX12YXIgbXc9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLl92aWV3Q29udGFpbmVyUmVmPXQsdGhpcy5fdGVtcGxhdGVSZWY9ZSx0aGlzLl9jcmVhdGVkPSExfWNyZWF0ZSgpe3RoaXMuX2NyZWF0ZWQ9ITAsdGhpcy5fdmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGVtcGxhdGVSZWYpfWRlc3Ryb3koKXt0aGlzLl9jcmVhdGVkPSExLHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY2xlYXIoKX1lbmZvcmNlU3RhdGUodCl7dCYmIXRoaXMuX2NyZWF0ZWQ/dGhpcy5jcmVhdGUoKTohdCYmdGhpcy5fY3JlYXRlZCYmdGhpcy5kZXN0cm95KCl9fSxtcj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5fZGVmYXVsdFZpZXdzPVtdLHRoaXMuX2RlZmF1bHRVc2VkPSExLHRoaXMuX2Nhc2VDb3VudD0wLHRoaXMuX2xhc3RDYXNlQ2hlY2tJbmRleD0wLHRoaXMuX2xhc3RDYXNlc01hdGNoZWQ9ITF9c2V0IG5nU3dpdGNoKGUpe3RoaXMuX25nU3dpdGNoPWUsMD09PXRoaXMuX2Nhc2VDb3VudCYmdGhpcy5fdXBkYXRlRGVmYXVsdENhc2VzKCEwKX1fYWRkQ2FzZSgpe3JldHVybiB0aGlzLl9jYXNlQ291bnQrK31fYWRkRGVmYXVsdChlKXt0aGlzLl9kZWZhdWx0Vmlld3MucHVzaChlKX1fbWF0Y2hDYXNlKGUpe2xldCBpPWU9PXRoaXMuX25nU3dpdGNoO3JldHVybiB0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkPXRoaXMuX2xhc3RDYXNlc01hdGNoZWR8fGksdGhpcy5fbGFzdENhc2VDaGVja0luZGV4KyssdGhpcy5fbGFzdENhc2VDaGVja0luZGV4PT09dGhpcy5fY2FzZUNvdW50JiYodGhpcy5fdXBkYXRlRGVmYXVsdENhc2VzKCF0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkKSx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXg9MCx0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkPSExKSxpfV91cGRhdGVEZWZhdWx0Q2FzZXMoZSl7aWYodGhpcy5fZGVmYXVsdFZpZXdzLmxlbmd0aD4wJiZlIT09dGhpcy5fZGVmYXVsdFVzZWQpe3RoaXMuX2RlZmF1bHRVc2VkPWU7Zm9yKGxldCBpIG9mIHRoaXMuX2RlZmF1bHRWaWV3cylpLmVuZm9yY2VTdGF0ZShlKX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWRpcj1NZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJuZ1N3aXRjaCIsIiJdXSxpbnB1dHM6e25nU3dpdGNoOiJuZ1N3aXRjaCJ9LHN0YW5kYWxvbmU6ITB9KSxufSkoKSxrcj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLm5nU3dpdGNoPXIsci5fYWRkQ2FzZSgpLHRoaXMuX3ZpZXc9bmV3IG13KGUsaSl9bmdEb0NoZWNrKCl7dGhpcy5fdmlldy5lbmZvcmNlU3RhdGUodGhpcy5uZ1N3aXRjaC5fbWF0Y2hDYXNlKHRoaXMubmdTd2l0Y2hDYXNlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoZWkpLEMob2kpLEMobXIsOSkpfSxuLlx1MDI3NWRpcj1NZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJuZ1N3aXRjaENhc2UiLCIiXV0saW5wdXRzOntuZ1N3aXRjaENhc2U6Im5nU3dpdGNoQ2FzZSJ9LHN0YW5kYWxvbmU6ITB9KSxufSkoKSxkdT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXtyLl9hZGREZWZhdWx0KG5ldyBtdyhlLGkpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhlaSksQyhvaSksQyhtciw5KSl9LG4uXHUwMjc1ZGlyPU1lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nU3dpdGNoRGVmYXVsdCIsIiJdXSxzdGFuZGFsb25lOiEwfSksbn0pKCksTWY9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fbmdFbD1lLHRoaXMuX2RpZmZlcnM9aSx0aGlzLl9yZW5kZXJlcj1yLHRoaXMuX25nU3R5bGU9bnVsbCx0aGlzLl9kaWZmZXI9bnVsbH1zZXQgbmdTdHlsZShlKXt0aGlzLl9uZ1N0eWxlPWUsIXRoaXMuX2RpZmZlciYmZSYmKHRoaXMuX2RpZmZlcj10aGlzLl9kaWZmZXJzLmZpbmQoZSkuY3JlYXRlKCkpfW5nRG9DaGVjaygpe2lmKHRoaXMuX2RpZmZlcil7bGV0IGU9dGhpcy5fZGlmZmVyLmRpZmYodGhpcy5fbmdTdHlsZSk7ZSYmdGhpcy5fYXBwbHlDaGFuZ2VzKGUpfX1fc2V0U3R5bGUoZSxpKXtsZXRbcixvXT1lLnNwbGl0KCIuIiksYT0tMT09PXIuaW5kZXhPZigiLSIpP3ZvaWQgMDpOcy5EYXNoQ2FzZTtudWxsIT1pP3RoaXMuX3JlbmRlcmVyLnNldFN0eWxlKHRoaXMuX25nRWwubmF0aXZlRWxlbWVudCxyLG8/YCR7aX0ke299YDppLGEpOnRoaXMuX3JlbmRlcmVyLnJlbW92ZVN0eWxlKHRoaXMuX25nRWwubmF0aXZlRWxlbWVudCxyLGEpfV9hcHBseUNoYW5nZXMoZSl7ZS5mb3JFYWNoUmVtb3ZlZEl0ZW0oaT0+dGhpcy5fc2V0U3R5bGUoaS5rZXksbnVsbCkpLGUuZm9yRWFjaEFkZGVkSXRlbShpPT50aGlzLl9zZXRTdHlsZShpLmtleSxpLmN1cnJlbnRWYWx1ZSkpLGUuZm9yRWFjaENoYW5nZWRJdGVtKGk9PnRoaXMuX3NldFN0eWxlKGkua2V5LGkuY3VycmVudFZhbHVlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoeGUpLEMoU2IpLEMoZGMpKX0sbi5cdTAyNzVkaXI9TWUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibmdTdHlsZSIsIiJdXSxpbnB1dHM6e25nU3R5bGU6Im5nU3R5bGUifSxzdGFuZGFsb25lOiEwfSksbn0pKCksZW89KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLl92aWV3Q29udGFpbmVyUmVmPWUsdGhpcy5fdmlld1JlZj1udWxsLHRoaXMubmdUZW1wbGF0ZU91dGxldENvbnRleHQ9bnVsbCx0aGlzLm5nVGVtcGxhdGVPdXRsZXQ9bnVsbCx0aGlzLm5nVGVtcGxhdGVPdXRsZXRJbmplY3Rvcj1udWxsfW5nT25DaGFuZ2VzKGUpe2lmKGUubmdUZW1wbGF0ZU91dGxldHx8ZS5uZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3Ipe2xldCBpPXRoaXMuX3ZpZXdDb250YWluZXJSZWY7aWYodGhpcy5fdmlld1JlZiYmaS5yZW1vdmUoaS5pbmRleE9mKHRoaXMuX3ZpZXdSZWYpKSx0aGlzLm5nVGVtcGxhdGVPdXRsZXQpe2xldHtuZ1RlbXBsYXRlT3V0bGV0OnIsbmdUZW1wbGF0ZU91dGxldENvbnRleHQ6byxuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3I6YX09dGhpczt0aGlzLl92aWV3UmVmPWkuY3JlYXRlRW1iZWRkZWRWaWV3KHIsbyxhP3tpbmplY3RvcjphfTp2b2lkIDApfWVsc2UgdGhpcy5fdmlld1JlZj1udWxsfWVsc2UgdGhpcy5fdmlld1JlZiYmZS5uZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCYmdGhpcy5uZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCYmKHRoaXMuX3ZpZXdSZWYuY29udGV4dD10aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhlaSkpfSxuLlx1MDI3NWRpcj1NZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJuZ1RlbXBsYXRlT3V0bGV0IiwiIl1dLGlucHV0czp7bmdUZW1wbGF0ZU91dGxldENvbnRleHQ6Im5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixuZ1RlbXBsYXRlT3V0bGV0OiJuZ1RlbXBsYXRlT3V0bGV0IixuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3I6Im5nVGVtcGxhdGVPdXRsZXRJbmplY3RvciJ9LHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W3F0XX0pLG59KSgpO2Z1bmN0aW9uIGd3KG4sdCl7cmV0dXJuIG5ldyB4dCgyMTAwLCExKX12YXIgaXBlPW5ldyBjbGFzc3tjcmVhdGVTdWJzY3JpcHRpb24odCxlKXtyZXR1cm4gdC50aGVuKGUsaT0+e3Rocm93IGl9KX1kaXNwb3NlKHQpe319LHJwZT1uZXcgY2xhc3N7Y3JlYXRlU3Vic2NyaXB0aW9uKHQsZSl7cmV0dXJuIHQuc3Vic2NyaWJlKHtuZXh0OmUsZXJyb3I6aT0+e3Rocm93IGl9fSl9ZGlzcG9zZSh0KXt0LnVuc3Vic2NyaWJlKCl9fSxjdD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX2xhdGVzdFZhbHVlPW51bGwsdGhpcy5fc3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fb2JqPW51bGwsdGhpcy5fc3RyYXRlZ3k9bnVsbCx0aGlzLl9yZWY9ZX1uZ09uRGVzdHJveSgpe3RoaXMuX3N1YnNjcmlwdGlvbiYmdGhpcy5fZGlzcG9zZSgpLHRoaXMuX3JlZj1udWxsfXRyYW5zZm9ybShlKXtyZXR1cm4gdGhpcy5fb2JqP2UhPT10aGlzLl9vYmo/KHRoaXMuX2Rpc3Bvc2UoKSx0aGlzLnRyYW5zZm9ybShlKSk6dGhpcy5fbGF0ZXN0VmFsdWU6KGUmJnRoaXMuX3N1YnNjcmliZShlKSx0aGlzLl9sYXRlc3RWYWx1ZSl9X3N1YnNjcmliZShlKXt0aGlzLl9vYmo9ZSx0aGlzLl9zdHJhdGVneT10aGlzLl9zZWxlY3RTdHJhdGVneShlKSx0aGlzLl9zdWJzY3JpcHRpb249dGhpcy5fc3RyYXRlZ3kuY3JlYXRlU3Vic2NyaXB0aW9uKGUsaT0+dGhpcy5fdXBkYXRlTGF0ZXN0VmFsdWUoZSxpKSl9X3NlbGVjdFN0cmF0ZWd5KGUpe2lmKENmKGUpKXJldHVybiBpcGU7aWYoRGsoZSkpcmV0dXJuIHJwZTt0aHJvdyBndygpfV9kaXNwb3NlKCl7dGhpcy5fc3RyYXRlZ3kuZGlzcG9zZSh0aGlzLl9zdWJzY3JpcHRpb24pLHRoaXMuX2xhdGVzdFZhbHVlPW51bGwsdGhpcy5fc3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fb2JqPW51bGx9X3VwZGF0ZUxhdGVzdFZhbHVlKGUsaSl7ZT09PXRoaXMuX29iaiYmKHRoaXMuX2xhdGVzdFZhbHVlPWksdGhpcy5fcmVmLm1hcmtGb3JDaGVjaygpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhRdCwxNikpfSxuLlx1MDI3NXBpcGU9cmYoe25hbWU6ImFzeW5jIix0eXBlOm4scHVyZTohMSxzdGFuZGFsb25lOiEwfSksbn0pKCksYXBlPW5ldyB0ZSgiREFURV9QSVBFX0RFRkFVTFRfVElNRVpPTkUiKSxzcGU9bmV3IHRlKCJEQVRFX1BJUEVfREVGQVVMVF9PUFRJT05TIiksd2Y9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5sb2NhbGU9ZSx0aGlzLmRlZmF1bHRUaW1lem9uZT1pLHRoaXMuZGVmYXVsdE9wdGlvbnM9cn10cmFuc2Zvcm0oZSxpLHIsbyl7aWYobnVsbD09ZXx8IiI9PT1lfHxlIT1lKXJldHVybiBudWxsO3RyeXtyZXR1cm4gTHVlKGUsaT8/dGhpcy5kZWZhdWx0T3B0aW9ucz8uZGF0ZUZvcm1hdD8/Im1lZGl1bURhdGUiLG98fHRoaXMubG9jYWxlLHI/P3RoaXMuZGVmYXVsdE9wdGlvbnM/LnRpbWV6b25lPz90aGlzLmRlZmF1bHRUaW1lem9uZT8/dm9pZCAwKX1jYXRjaChhKXt0aHJvdyBndygpfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhhZCwxNiksQyhhcGUsMjQpLEMoc3BlLDI0KSl9LG4uXHUwMjc1cGlwZT1yZih7bmFtZToiZGF0ZSIsdHlwZTpuLHB1cmU6ITAsc3RhbmRhbG9uZTohMH0pLG59KSgpLFVzPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5fbG9jYWxlPWV9dHJhbnNmb3JtKGUsaSxyKXtpZighZnVuY3Rpb24obil7cmV0dXJuIShudWxsPT1ufHwiIj09PW58fG4hPW4pfShlKSlyZXR1cm4gbnVsbDtyPXJ8fHRoaXMuX2xvY2FsZTt0cnl7bGV0IG89ZnVuY3Rpb24obil7aWYoInN0cmluZyI9PXR5cGVvZiBuJiYhaXNOYU4oTnVtYmVyKG4pLXBhcnNlRmxvYXQobikpKXJldHVybiBOdW1iZXIobik7aWYoIm51bWJlciIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcihgJHtufSBpcyBub3QgYSBudW1iZXJgKTtyZXR1cm4gbn0oZSk7cmV0dXJuIGVPKG8scixpKX1jYXRjaChvKXt0aHJvdyBndygpfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhhZCwxNikpfSxuLlx1MDI3NXBpcGU9cmYoe25hbWU6Im51bWJlciIsdHlwZTpuLHB1cmU6ITAsc3RhbmRhbG9uZTohMH0pLG59KSgpLEtqPSgoKT0+e2NsYXNzIG57dHJhbnNmb3JtKGUsaSxyKXtpZihudWxsPT1lKXJldHVybiBudWxsO2lmKCF0aGlzLnN1cHBvcnRzKGUpKXRocm93IGd3KCk7cmV0dXJuIGUuc2xpY2UoaSxyKX1zdXBwb3J0cyhlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGV8fEFycmF5LmlzQXJyYXkoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXBpcGU9cmYoe25hbWU6InNsaWNlIix0eXBlOm4scHVyZTohMSxzdGFuZGFsb25lOiEwfSksbn0pKCksRGU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe30pLG59KSgpLHRPPSJicm93c2VyIjtmdW5jdGlvbiBfdyhuKXtyZXR1cm4gbj09PXRPfW5ldyBNbCgiMTUuMi45Iik7dmFyIHRoPWNsYXNze307ZnVuY3Rpb24gaHBlKG4pe3JldHVybiBuLnN0YXJ0c1dpdGgoIi8iKT9uLnNsaWNlKDEpOm59dmFyIG1wZT1uPT5uLnNyYyxmcGU9bmV3IHRlKCJJbWFnZUxvYWRlciIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9Pm1wZX0pO2Z1bmN0aW9uIGJ3KG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBmdW5jdGlvbihuKXtpZigic3RyaW5nIiE9dHlwZW9mIG58fCIiPT09bi50cmltKCkpcmV0dXJuITE7dHJ5e3JldHVybiBuZXcgVVJMKG4pLCEwfWNhdGNoe3JldHVybiExfX0oaSl8fGZ1bmN0aW9uKG4sdCl7dGhyb3cgbmV3IHh0KDI5NTksITEpfSgpLGk9ZnVuY3Rpb24obil7cmV0dXJuIG4uZW5kc1dpdGgoIi8iKT9uLnNsaWNlKDAsLTEpOm59KGkpLFt7cHJvdmlkZTpmcGUsdXNlVmFsdWU6YT0+KGZ1bmN0aW9uKG4pe3JldHVybi9eaHR0cHM/OlwvXC8vLnRlc3Qobil9KGEuc3JjKSYmZnVuY3Rpb24obix0KXt0aHJvdyBuZXcgeHQoMjk1OSwhMSl9KCksbihpLHsuLi5hLHNyYzpocGUoYS5zcmMpfSkpfV19fWJ3KGZ1bmN0aW9uKG4sdCl7bGV0IGU9ImZvcm1hdD1hdXRvIjtyZXR1cm4gdC53aWR0aCYmKGUrPWAsd2lkdGg9JHt0LndpZHRofWApLGAke259L2Nkbi1jZ2kvaW1hZ2UvJHtlfS8ke3Quc3JjfWB9KSxidyhmdW5jdGlvbihuLHQpe2xldCBlPSJmX2F1dG8scV9hdXRvIjtyZXR1cm4gdC53aWR0aCYmKGUrPWAsd18ke3Qud2lkdGh9YCksYCR7bn0vaW1hZ2UvdXBsb2FkLyR7ZX0vJHt0LnNyY31gfSksYncoZnVuY3Rpb24obix0KXtsZXQgcix7c3JjOmUsd2lkdGg6aX09dDtyZXR1cm4gcj1pP1tuLGB0cjp3LSR7aX1gLGVdOltuLGVdLHIuam9pbigiLyIpfSksYncoZnVuY3Rpb24obix0KXtsZXQgZT1uZXcgVVJMKGAke259LyR7dC5zcmN9YCk7cmV0dXJuIGUuc2VhcmNoUGFyYW1zLnNldCgiYXV0byIsImZvcm1hdCIpLHQud2lkdGgmJmUuc2VhcmNoUGFyYW1zLnNldCgidyIsdC53aWR0aC50b1N0cmluZygpKSxlLmhyZWZ9KSxuZXcgdGUoIlBSRUNPTk5FQ1RfQ0hFQ0tfQkxPQ0tMSVNUIiksbmV3IHRlKCJOR19PUFRJTUlaRURfUFJFTE9BREVEX0lNQUdFUyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9Pm5ldyBTZXR9KTt2YXIgdncsQ3BlPXticmVha3BvaW50czpbMTYsMzIsNDgsNjQsOTYsMTI4LDI1NiwzODQsNjQwLDc1MCw4MjgsMTA4MCwxMjAwLDE5MjAsMjA0OCwzODQwXX0saU89KG5ldyB0ZSgiSW1hZ2VDb25maWciLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5DcGV9KSxjbGFzcyBleHRlbmRzIHV3e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnN1cHBvcnRzRE9NRXZlbnRzPSEwfX0pLFBiPWNsYXNzIGV4dGVuZHMgaU97c3RhdGljIG1ha2VDdXJyZW50KCl7dmFyIG47bj1uZXcgUGIsWWt8fChZaz1uKX1vbkFuZENhbmNlbCh0LGUsaSl7cmV0dXJuIHQuYWRkRXZlbnRMaXN0ZW5lcihlLGksITEpLCgpPT57dC5yZW1vdmVFdmVudExpc3RlbmVyKGUsaSwhMSl9fWRpc3BhdGNoRXZlbnQodCxlKXt0LmRpc3BhdGNoRXZlbnQoZSl9cmVtb3ZlKHQpe3QucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpfWNyZWF0ZUVsZW1lbnQodCxlKXtyZXR1cm4oZT1lfHx0aGlzLmdldERlZmF1bHREb2N1bWVudCgpKS5jcmVhdGVFbGVtZW50KHQpfWNyZWF0ZUh0bWxEb2N1bWVudCgpe3JldHVybiBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoImZha2VUaXRsZSIpfWdldERlZmF1bHREb2N1bWVudCgpe3JldHVybiBkb2N1bWVudH1pc0VsZW1lbnROb2RlKHQpe3JldHVybiB0Lm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREV9aXNTaGFkb3dSb290KHQpe3JldHVybiB0IGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudH1nZXRHbG9iYWxFdmVudFRhcmdldCh0LGUpe3JldHVybiJ3aW5kb3ciPT09ZT93aW5kb3c6ImRvY3VtZW50Ij09PWU/dDoiYm9keSI9PT1lP3QuYm9keTpudWxsfWdldEJhc2VIcmVmKHQpe2xldCBlPShJYj1JYnx8ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiYmFzZSIpKT9JYi5nZXRBdHRyaWJ1dGUoImhyZWYiKTpudWxsO3JldHVybiBudWxsPT1lP251bGw6ZnVuY3Rpb24obil7KHZ3PXZ3fHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIikpLnNldEF0dHJpYnV0ZSgiaHJlZiIsbik7bGV0IHQ9dncucGF0aG5hbWU7cmV0dXJuIi8iPT09dC5jaGFyQXQoMCk/dDpgLyR7dH1gfShlKX1yZXNldEJhc2VFbGVtZW50KCl7SWI9bnVsbH1nZXRVc2VyQWdlbnQoKXtyZXR1cm4gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnR9Z2V0Q29va2llKHQpe3JldHVybiBmdyhkb2N1bWVudC5jb29raWUsdCl9fSxJYj1udWxsLGlHPW5ldyB0ZSgiVFJBTlNJVElPTl9JRCIpLFRwZT1be3Byb3ZpZGU6T2ssdXNlRmFjdG9yeTpmdW5jdGlvbihuLHQsZSl7cmV0dXJuKCk9PntlLmdldChLTSkuZG9uZVByb21pc2UudGhlbigoKT0+e2xldCBpPUFsKCkscj10LnF1ZXJ5U2VsZWN0b3JBbGwoYHN0eWxlW25nLXRyYW5zaXRpb249IiR7bn0iXWApO2ZvcihsZXQgbz0wO288ci5sZW5ndGg7bysrKWkucmVtb3ZlKHJbb10pfSl9fSxkZXBzOltpRyxOdCx3aV0sbXVsdGk6ITB9XSxEcGU9KCgpPT57Y2xhc3MgbntidWlsZCgpe3JldHVybiBuZXcgWE1MSHR0cFJlcXVlc3R9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLHl3PW5ldyB0ZSgiRXZlbnRNYW5hZ2VyUGx1Z2lucyIpLHh3PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLl96b25lPWksdGhpcy5fZXZlbnROYW1lVG9QbHVnaW49bmV3IE1hcCxlLmZvckVhY2gocj0+e3IubWFuYWdlcj10aGlzfSksdGhpcy5fcGx1Z2lucz1lLnNsaWNlKCkucmV2ZXJzZSgpfWFkZEV2ZW50TGlzdGVuZXIoZSxpLHIpe3JldHVybiB0aGlzLl9maW5kUGx1Z2luRm9yKGkpLmFkZEV2ZW50TGlzdGVuZXIoZSxpLHIpfWFkZEdsb2JhbEV2ZW50TGlzdGVuZXIoZSxpLHIpe3JldHVybiB0aGlzLl9maW5kUGx1Z2luRm9yKGkpLmFkZEdsb2JhbEV2ZW50TGlzdGVuZXIoZSxpLHIpfWdldFpvbmUoKXtyZXR1cm4gdGhpcy5fem9uZX1fZmluZFBsdWdpbkZvcihlKXtsZXQgaT10aGlzLl9ldmVudE5hbWVUb1BsdWdpbi5nZXQoZSk7aWYoaSlyZXR1cm4gaTtsZXQgcj10aGlzLl9wbHVnaW5zO2ZvcihsZXQgbz0wO288ci5sZW5ndGg7bysrKXtsZXQgYT1yW29dO2lmKGEuc3VwcG9ydHMoZSkpcmV0dXJuIHRoaXMuX2V2ZW50TmFtZVRvUGx1Z2luLnNldChlLGEpLGF9dGhyb3cgbmV3IEVycm9yKGBObyBldmVudCBtYW5hZ2VyIHBsdWdpbiBmb3VuZCBmb3IgZXZlbnQgJHtlfWApfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKHl3KSxPKG90KSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksQ3c9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fZG9jPXR9YWRkR2xvYmFsRXZlbnRMaXN0ZW5lcih0LGUsaSl7bGV0IHI9QWwoKS5nZXRHbG9iYWxFdmVudFRhcmdldCh0aGlzLl9kb2MsdCk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBldmVudCB0YXJnZXQgJHtyfSBmb3IgZXZlbnQgJHtlfWApO3JldHVybiB0aGlzLmFkZEV2ZW50TGlzdGVuZXIocixlLGkpfX0sckc9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMudXNhZ2VDb3VudD1uZXcgTWFwfWFkZFN0eWxlcyhlKXtmb3IobGV0IGkgb2YgZSkxPT09dGhpcy5jaGFuZ2VVc2FnZUNvdW50KGksMSkmJnRoaXMub25TdHlsZUFkZGVkKGkpfXJlbW92ZVN0eWxlcyhlKXtmb3IobGV0IGkgb2YgZSkwPT09dGhpcy5jaGFuZ2VVc2FnZUNvdW50KGksLTEpJiZ0aGlzLm9uU3R5bGVSZW1vdmVkKGkpfW9uU3R5bGVSZW1vdmVkKGUpe31vblN0eWxlQWRkZWQoZSl7fWdldEFsbFN0eWxlcygpe3JldHVybiB0aGlzLnVzYWdlQ291bnQua2V5cygpfWNoYW5nZVVzYWdlQ291bnQoZSxpKXtsZXQgcj10aGlzLnVzYWdlQ291bnQsbz1yLmdldChlKT8/MDtyZXR1cm4gbys9aSxvPjA/ci5zZXQoZSxvKTpyLmRlbGV0ZShlKSxvfW5nT25EZXN0cm95KCl7Zm9yKGxldCBlIG9mIHRoaXMuZ2V0QWxsU3R5bGVzKCkpdGhpcy5vblN0eWxlUmVtb3ZlZChlKTt0aGlzLnVzYWdlQ291bnQuY2xlYXIoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksQWI9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHJHe2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5kb2M9ZSx0aGlzLnN0eWxlUmVmPW5ldyBNYXAsdGhpcy5ob3N0Tm9kZXM9bmV3IFNldCx0aGlzLnJlc2V0SG9zdE5vZGVzKCl9b25TdHlsZUFkZGVkKGUpe2ZvcihsZXQgaSBvZiB0aGlzLmhvc3ROb2Rlcyl0aGlzLmFkZFN0eWxlVG9Ib3N0KGksZSl9b25TdHlsZVJlbW92ZWQoZSl7bGV0IGk9dGhpcy5zdHlsZVJlZjtpLmdldChlKT8uZm9yRWFjaChvPT5vLnJlbW92ZSgpKSxpLmRlbGV0ZShlKX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5zdHlsZVJlZi5jbGVhcigpLHRoaXMucmVzZXRIb3N0Tm9kZXMoKX1hZGRIb3N0KGUpe3RoaXMuaG9zdE5vZGVzLmFkZChlKTtmb3IobGV0IGkgb2YgdGhpcy5nZXRBbGxTdHlsZXMoKSl0aGlzLmFkZFN0eWxlVG9Ib3N0KGUsaSl9cmVtb3ZlSG9zdChlKXt0aGlzLmhvc3ROb2Rlcy5kZWxldGUoZSl9YWRkU3R5bGVUb0hvc3QoZSxpKXtsZXQgcj10aGlzLmRvYy5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO3IudGV4dENvbnRlbnQ9aSxlLmFwcGVuZENoaWxkKHIpO2xldCBvPXRoaXMuc3R5bGVSZWYuZ2V0KGkpO28/by5wdXNoKHIpOnRoaXMuc3R5bGVSZWYuc2V0KGksW3JdKX1yZXNldEhvc3ROb2Rlcygpe2xldCBlPXRoaXMuaG9zdE5vZGVzO2UuY2xlYXIoKSxlLmFkZCh0aGlzLmRvYy5oZWFkKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhOdCkpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLG5PPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8iLG1hdGg6Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aE1MLyJ9LGFPPS8lQ09NUCUvZyxhRz1uZXcgdGUoIlJlbW92ZVN0eWxlc09uQ29tcERlc3RvcnkiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT4hMX0pO2Z1bmN0aW9uIHNHKG4sdCl7cmV0dXJuIHQuZmxhdCgxMDApLm1hcChlPT5lLnJlcGxhY2UoYU8sbikpfWZ1bmN0aW9uICRqKG4pe3JldHVybiB0PT57aWYoIl9fbmdVbndyYXBfXyI9PT10KXJldHVybiBuOyExPT09bih0KSYmKHQucHJldmVudERlZmF1bHQoKSx0LnJldHVyblZhbHVlPSExKX19dmFyIFJiPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyl7dGhpcy5ldmVudE1hbmFnZXI9ZSx0aGlzLnNoYXJlZFN0eWxlc0hvc3Q9aSx0aGlzLmFwcElkPXIsdGhpcy5yZW1vdmVTdHlsZXNPbkNvbXBEZXN0b3J5PW8sdGhpcy5yZW5kZXJlckJ5Q29tcElkPW5ldyBNYXAsdGhpcy5kZWZhdWx0UmVuZGVyZXI9bmV3IGtiKGUpfWNyZWF0ZVJlbmRlcmVyKGUsaSl7aWYoIWV8fCFpKXJldHVybiB0aGlzLmRlZmF1bHRSZW5kZXJlcjtsZXQgcj10aGlzLmdldE9yQ3JlYXRlUmVuZGVyZXIoZSxpKTtyZXR1cm4gciBpbnN0YW5jZW9mIE13P3IuYXBwbHlUb0hvc3QoZSk6ciBpbnN0YW5jZW9mIE9iJiZyLmFwcGx5U3R5bGVzKCkscn1nZXRPckNyZWF0ZVJlbmRlcmVyKGUsaSl7bGV0IHI9dGhpcy5yZW5kZXJlckJ5Q29tcElkLG89ci5nZXQoaS5pZCk7aWYoIW8pe2xldCBhPXRoaXMuZXZlbnRNYW5hZ2VyLHM9dGhpcy5zaGFyZWRTdHlsZXNIb3N0LGw9dGhpcy5yZW1vdmVTdHlsZXNPbkNvbXBEZXN0b3J5O3N3aXRjaChpLmVuY2Fwc3VsYXRpb24pe2Nhc2UgYXMuRW11bGF0ZWQ6bz1uZXcgTXcoYSxzLGksdGhpcy5hcHBJZCxsKTticmVhaztjYXNlIGFzLlNoYWRvd0RvbTpyZXR1cm4gbmV3IG9PKGEscyxlLGkpO2RlZmF1bHQ6bz1uZXcgT2IoYSxzLGksbCl9by5vbkRlc3Ryb3k9KCk9PnIuZGVsZXRlKGkuaWQpLHIuc2V0KGkuaWQsbyl9cmV0dXJuIG99bmdPbkRlc3Ryb3koKXt0aGlzLnJlbmRlcmVyQnlDb21wSWQuY2xlYXIoKX1iZWdpbigpe31lbmQoKXt9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oeHcpLE8oQWIpLE8oJHApLE8oYUcpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxrYj1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmV2ZW50TWFuYWdlcj10LHRoaXMuZGF0YT1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuZGVzdHJveU5vZGU9bnVsbH1kZXN0cm95KCl7fWNyZWF0ZUVsZW1lbnQodCxlKXtyZXR1cm4gZT9kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobk9bZV18fGUsdCk6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0KX1jcmVhdGVDb21tZW50KHQpe3JldHVybiBkb2N1bWVudC5jcmVhdGVDb21tZW50KHQpfWNyZWF0ZVRleHQodCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHQpfWFwcGVuZENoaWxkKHQsZSl7KHRHKHQpP3QuY29udGVudDp0KS5hcHBlbmRDaGlsZChlKX1pbnNlcnRCZWZvcmUodCxlLGkpe3QmJih0Ryh0KT90LmNvbnRlbnQ6dCkuaW5zZXJ0QmVmb3JlKGUsaSl9cmVtb3ZlQ2hpbGQodCxlKXt0JiZ0LnJlbW92ZUNoaWxkKGUpfXNlbGVjdFJvb3RFbGVtZW50KHQsZSl7bGV0IGk9InN0cmluZyI9PXR5cGVvZiB0P2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCk6dDtpZighaSl0aHJvdyBuZXcgRXJyb3IoYFRoZSBzZWxlY3RvciAiJHt0fSIgZGlkIG5vdCBtYXRjaCBhbnkgZWxlbWVudHNgKTtyZXR1cm4gZXx8KGkudGV4dENvbnRlbnQ9IiIpLGl9cGFyZW50Tm9kZSh0KXtyZXR1cm4gdC5wYXJlbnROb2RlfW5leHRTaWJsaW5nKHQpe3JldHVybiB0Lm5leHRTaWJsaW5nfXNldEF0dHJpYnV0ZSh0LGUsaSxyKXtpZihyKXtlPXIrIjoiK2U7bGV0IG89bk9bcl07bz90LnNldEF0dHJpYnV0ZU5TKG8sZSxpKTp0LnNldEF0dHJpYnV0ZShlLGkpfWVsc2UgdC5zZXRBdHRyaWJ1dGUoZSxpKX1yZW1vdmVBdHRyaWJ1dGUodCxlLGkpe2lmKGkpe2xldCByPW5PW2ldO3I/dC5yZW1vdmVBdHRyaWJ1dGVOUyhyLGUpOnQucmVtb3ZlQXR0cmlidXRlKGAke2l9OiR7ZX1gKX1lbHNlIHQucmVtb3ZlQXR0cmlidXRlKGUpfWFkZENsYXNzKHQsZSl7dC5jbGFzc0xpc3QuYWRkKGUpfXJlbW92ZUNsYXNzKHQsZSl7dC5jbGFzc0xpc3QucmVtb3ZlKGUpfXNldFN0eWxlKHQsZSxpLHIpe3ImKE5zLkRhc2hDYXNlfE5zLkltcG9ydGFudCk/dC5zdHlsZS5zZXRQcm9wZXJ0eShlLGksciZOcy5JbXBvcnRhbnQ/ImltcG9ydGFudCI6IiIpOnQuc3R5bGVbZV09aX1yZW1vdmVTdHlsZSh0LGUsaSl7aSZOcy5EYXNoQ2FzZT90LnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpOnQuc3R5bGVbZV09IiJ9c2V0UHJvcGVydHkodCxlLGkpe3RbZV09aX1zZXRWYWx1ZSh0LGUpe3Qubm9kZVZhbHVlPWV9bGlzdGVuKHQsZSxpKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/dGhpcy5ldmVudE1hbmFnZXIuYWRkR2xvYmFsRXZlbnRMaXN0ZW5lcih0LGUsJGooaSkpOnRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodCxlLCRqKGkpKX19O2Z1bmN0aW9uIHRHKG4pe3JldHVybiJURU1QTEFURSI9PT1uLnRhZ05hbWUmJnZvaWQgMCE9PW4uY29udGVudH0iQCIuY2hhckNvZGVBdCgwKTt2YXIgb089Y2xhc3MgZXh0ZW5kcyBrYntjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcih0KSx0aGlzLnNoYXJlZFN0eWxlc0hvc3Q9ZSx0aGlzLmhvc3RFbD1pLHRoaXMuc2hhZG93Um9vdD1pLmF0dGFjaFNoYWRvdyh7bW9kZToib3BlbiJ9KSx0aGlzLnNoYXJlZFN0eWxlc0hvc3QuYWRkSG9zdCh0aGlzLnNoYWRvd1Jvb3QpO2xldCBvPXNHKHIuaWQsci5zdHlsZXMpO2ZvcihsZXQgYSBvZiBvKXtsZXQgcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO3MudGV4dENvbnRlbnQ9YSx0aGlzLnNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQocyl9fW5vZGVPclNoYWRvd1Jvb3QodCl7cmV0dXJuIHQ9PT10aGlzLmhvc3RFbD90aGlzLnNoYWRvd1Jvb3Q6dH1hcHBlbmRDaGlsZCh0LGUpe3JldHVybiBzdXBlci5hcHBlbmRDaGlsZCh0aGlzLm5vZGVPclNoYWRvd1Jvb3QodCksZSl9aW5zZXJ0QmVmb3JlKHQsZSxpKXtyZXR1cm4gc3VwZXIuaW5zZXJ0QmVmb3JlKHRoaXMubm9kZU9yU2hhZG93Um9vdCh0KSxlLGkpfXJlbW92ZUNoaWxkKHQsZSl7cmV0dXJuIHN1cGVyLnJlbW92ZUNoaWxkKHRoaXMubm9kZU9yU2hhZG93Um9vdCh0KSxlKX1wYXJlbnROb2RlKHQpe3JldHVybiB0aGlzLm5vZGVPclNoYWRvd1Jvb3Qoc3VwZXIucGFyZW50Tm9kZSh0aGlzLm5vZGVPclNoYWRvd1Jvb3QodCkpKX1kZXN0cm95KCl7dGhpcy5zaGFyZWRTdHlsZXNIb3N0LnJlbW92ZUhvc3QodGhpcy5zaGFkb3dSb290KX19LE9iPWNsYXNzIGV4dGVuZHMga2J7Y29uc3RydWN0b3IodCxlLGkscixvPWkuaWQpe3N1cGVyKHQpLHRoaXMuc2hhcmVkU3R5bGVzSG9zdD1lLHRoaXMucmVtb3ZlU3R5bGVzT25Db21wRGVzdG9yeT1yLHRoaXMucmVuZGVyZXJVc2FnZUNvdW50PTAsdGhpcy5zdHlsZXM9c0cobyxpLnN0eWxlcyl9YXBwbHlTdHlsZXMoKXt0aGlzLnNoYXJlZFN0eWxlc0hvc3QuYWRkU3R5bGVzKHRoaXMuc3R5bGVzKSx0aGlzLnJlbmRlcmVyVXNhZ2VDb3VudCsrfWRlc3Ryb3koKXshdGhpcy5yZW1vdmVTdHlsZXNPbkNvbXBEZXN0b3J5fHwodGhpcy5zaGFyZWRTdHlsZXNIb3N0LnJlbW92ZVN0eWxlcyh0aGlzLnN0eWxlcyksdGhpcy5yZW5kZXJlclVzYWdlQ291bnQtLSwwPT09dGhpcy5yZW5kZXJlclVzYWdlQ291bnQmJnRoaXMub25EZXN0cm95Py4oKSl9fSxNdz1jbGFzcyBleHRlbmRzIE9ie2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7bGV0IGE9cisiLSIraS5pZDtzdXBlcih0LGUsaSxvLGEpLHRoaXMuY29udGVudEF0dHI9Il9uZ2NvbnRlbnQtJUNPTVAlIi5yZXBsYWNlKGFPLGEpLHRoaXMuaG9zdEF0dHI9ZnVuY3Rpb24obil7cmV0dXJuIl9uZ2hvc3QtJUNPTVAlIi5yZXBsYWNlKGFPLG4pfShhKX1hcHBseVRvSG9zdCh0KXt0aGlzLmFwcGx5U3R5bGVzKCksdGhpcy5zZXRBdHRyaWJ1dGUodCx0aGlzLmhvc3RBdHRyLCIiKX1jcmVhdGVFbGVtZW50KHQsZSl7bGV0IGk9c3VwZXIuY3JlYXRlRWxlbWVudCh0LGUpO3JldHVybiBzdXBlci5zZXRBdHRyaWJ1dGUoaSx0aGlzLmNvbnRlbnRBdHRyLCIiKSxpfX0sRnBlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBDd3tjb25zdHJ1Y3RvcihlKXtzdXBlcihlKX1zdXBwb3J0cyhlKXtyZXR1cm4hMH1hZGRFdmVudExpc3RlbmVyKGUsaSxyKXtyZXR1cm4gZS5hZGRFdmVudExpc3RlbmVyKGksciwhMSksKCk9PnRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLGkscil9cmVtb3ZlRXZlbnRMaXN0ZW5lcihlLGkscil7cmV0dXJuIGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihpLHIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKE50KSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksbkc9WyJhbHQiLCJjb250cm9sIiwibWV0YSIsInNoaWZ0Il0sTnBlPXsiXGIiOiJCYWNrc3BhY2UiLCJcdCI6IlRhYiIsIlx4N2YiOiJEZWxldGUiLCJceDFiIjoiRXNjYXBlIixEZWw6IkRlbGV0ZSIsRXNjOiJFc2NhcGUiLExlZnQ6IkFycm93TGVmdCIsUmlnaHQ6IkFycm93UmlnaHQiLFVwOiJBcnJvd1VwIixEb3duOiJBcnJvd0Rvd24iLE1lbnU6IkNvbnRleHRNZW51IixTY3JvbGw6IlNjcm9sbExvY2siLFdpbjoiT1MifSxMcGU9e2FsdDpuPT5uLmFsdEtleSxjb250cm9sOm49Pm4uY3RybEtleSxtZXRhOm49Pm4ubWV0YUtleSxzaGlmdDpuPT5uLnNoaWZ0S2V5fSxCcGU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEN3e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpfXN1cHBvcnRzKGUpe3JldHVybiBudWxsIT1uLnBhcnNlRXZlbnROYW1lKGUpfWFkZEV2ZW50TGlzdGVuZXIoZSxpLHIpe2xldCBvPW4ucGFyc2VFdmVudE5hbWUoaSksYT1uLmV2ZW50Q2FsbGJhY2soby5mdWxsS2V5LHIsdGhpcy5tYW5hZ2VyLmdldFpvbmUoKSk7cmV0dXJuIHRoaXMubWFuYWdlci5nZXRab25lKCkucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PkFsKCkub25BbmRDYW5jZWwoZSxvLmRvbUV2ZW50TmFtZSxhKSl9c3RhdGljIHBhcnNlRXZlbnROYW1lKGUpe2xldCBpPWUudG9Mb3dlckNhc2UoKS5zcGxpdCgiLiIpLHI9aS5zaGlmdCgpO2lmKDA9PT1pLmxlbmd0aHx8ImtleWRvd24iIT09ciYmImtleXVwIiE9PXIpcmV0dXJuIG51bGw7bGV0IG89bi5fbm9ybWFsaXplS2V5KGkucG9wKCkpLGE9IiIscz1pLmluZGV4T2YoImNvZGUiKTtpZihzPi0xJiYoaS5zcGxpY2UocywxKSxhPSJjb2RlLiIpLG5HLmZvckVhY2goYz0+e2xldCBkPWkuaW5kZXhPZihjKTtkPi0xJiYoaS5zcGxpY2UoZCwxKSxhKz1jKyIuIil9KSxhKz1vLDAhPWkubGVuZ3RofHwwPT09by5sZW5ndGgpcmV0dXJuIG51bGw7bGV0IGw9e307cmV0dXJuIGwuZG9tRXZlbnROYW1lPXIsbC5mdWxsS2V5PWEsbH1zdGF0aWMgbWF0Y2hFdmVudEZ1bGxLZXlDb2RlKGUsaSl7bGV0IHI9TnBlW2Uua2V5XXx8ZS5rZXksbz0iIjtyZXR1cm4gaS5pbmRleE9mKCJjb2RlLiIpPi0xJiYocj1lLmNvZGUsbz0iY29kZS4iKSwhKG51bGw9PXJ8fCFyKSYmKHI9ci50b0xvd2VyQ2FzZSgpLCIgIj09PXI/cj0ic3BhY2UiOiIuIj09PXImJihyPSJkb3QiKSxuRy5mb3JFYWNoKGE9PnthIT09ciYmKDAsTHBlW2FdKShlKSYmKG8rPWErIi4iKX0pLG8rPXIsbz09PWkpfXN0YXRpYyBldmVudENhbGxiYWNrKGUsaSxyKXtyZXR1cm4gbz0+e24ubWF0Y2hFdmVudEZ1bGxLZXlDb2RlKG8sZSkmJnIucnVuR3VhcmRlZCgoKT0+aShvKSl9fXN0YXRpYyBfbm9ybWFsaXplS2V5KGUpe3JldHVybiJlc2MiPT09ZT8iZXNjYXBlIjplfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKE50KSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksVXBlPVt7cHJvdmlkZTpmYyx1c2VWYWx1ZTp0T30se3Byb3ZpZGU6RmssdXNlVmFsdWU6ZnVuY3Rpb24oKXtQYi5tYWtlQ3VycmVudCgpfSxtdWx0aTohMH0se3Byb3ZpZGU6TnQsdXNlRmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuPWRvY3VtZW50LFlSPW4sZG9jdW1lbnQ7dmFyIG59LGRlcHM6W119XSxsTz1WayhSaiwiYnJvd3NlciIsVXBlKSxsRz1uZXcgdGUoIiIpLGpwZT1be3Byb3ZpZGU6TWIsdXNlQ2xhc3M6Y2xhc3N7YWRkVG9XaW5kb3codCl7enIuZ2V0QW5ndWxhclRlc3RhYmlsaXR5PShpLHI9ITApPT57bGV0IG89dC5maW5kVGVzdGFiaWxpdHlJblRyZWUoaSxyKTtpZihudWxsPT1vKXRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQgdGVzdGFiaWxpdHkgZm9yIGVsZW1lbnQuIik7cmV0dXJuIG99LHpyLmdldEFsbEFuZ3VsYXJUZXN0YWJpbGl0aWVzPSgpPT50LmdldEFsbFRlc3RhYmlsaXRpZXMoKSx6ci5nZXRBbGxBbmd1bGFyUm9vdEVsZW1lbnRzPSgpPT50LmdldEFsbFJvb3RFbGVtZW50cygpLHpyLmZyYW1ld29ya1N0YWJpbGl6ZXJzfHwoenIuZnJhbWV3b3JrU3RhYmlsaXplcnM9W10pLHpyLmZyYW1ld29ya1N0YWJpbGl6ZXJzLnB1c2goaT0+e2xldCByPXpyLmdldEFsbEFuZ3VsYXJUZXN0YWJpbGl0aWVzKCksbz1yLmxlbmd0aCxhPSExLHM9ZnVuY3Rpb24obCl7YT1hfHxsLG8tLSwwPT1vJiZpKGEpfTtyLmZvckVhY2goZnVuY3Rpb24obCl7bC53aGVuU3RhYmxlKHMpfSl9KX1maW5kVGVzdGFiaWxpdHlJblRyZWUodCxlLGkpe3JldHVybiBudWxsPT1lP251bGw6dC5nZXRUZXN0YWJpbGl0eShlKT8/KGk/QWwoKS5pc1NoYWRvd1Jvb3QoZSk/dGhpcy5maW5kVGVzdGFiaWxpdHlJblRyZWUodCxlLmhvc3QsITApOnRoaXMuZmluZFRlc3RhYmlsaXR5SW5UcmVlKHQsZS5wYXJlbnRFbGVtZW50LCEwKTpudWxsKX19LGRlcHM6W119LHtwcm92aWRlOkxrLHVzZUNsYXNzOkpNLGRlcHM6W290LCRNLE1iXX0se3Byb3ZpZGU6Sk0sdXNlQ2xhc3M6Sk0sZGVwczpbb3QsJE0sTWJdfV0sR3BlPVt7cHJvdmlkZTpMTSx1c2VWYWx1ZToicm9vdCJ9LHtwcm92aWRlOmxhLHVzZUZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGxhfSxkZXBzOltdfSx7cHJvdmlkZTp5dyx1c2VDbGFzczpGcGUsbXVsdGk6ITAsZGVwczpbTnQsb3QsZmNdfSx7cHJvdmlkZTp5dyx1c2VDbGFzczpCcGUsbXVsdGk6ITAsZGVwczpbTnRdfSx7cHJvdmlkZTpSYix1c2VDbGFzczpSYixkZXBzOlt4dyxBYiwkcCxhR119LHtwcm92aWRlOmNjLHVzZUV4aXN0aW5nOlJifSx7cHJvdmlkZTpyRyx1c2VFeGlzdGluZzpBYn0se3Byb3ZpZGU6QWIsdXNlQ2xhc3M6QWIsZGVwczpbTnRdfSx7cHJvdmlkZTp4dyx1c2VDbGFzczp4dyxkZXBzOlt5dyxvdF19LHtwcm92aWRlOnRoLHVzZUNsYXNzOkRwZSxkZXBzOltdfSxbXV0sd3c9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt9c3RhdGljIHdpdGhTZXJ2ZXJUcmFuc2l0aW9uKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6JHAsdXNlVmFsdWU6ZS5hcHBJZH0se3Byb3ZpZGU6aUcsdXNlRXhpc3Rpbmc6JHB9LFRwZV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKGxHLDEyKSl9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe3Byb3ZpZGVyczpbLi4uR3BlLC4uLmpwZV0saW1wb3J0czpbRGUsUGpdfSksbn0pKCksbmg9KG5ldyB0ZSgiSGFtbWVyR2VzdHVyZUNvbmZpZyIpLG5ldyB0ZSgiSGFtbWVyTG9hZGVyIiksKCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5OmZ1bmN0aW9uKGUpe2xldCBpPW51bGw7cmV0dXJuIGk9ZT9uZXcoZXx8bik6TyhjRyksaX0scHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSksY0c9KCgpPT57Y2xhc3MgbiBleHRlbmRzIG5oe2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5fZG9jPWV9c2FuaXRpemUoZSxpKXtpZihudWxsPT1pKXJldHVybiBudWxsO3N3aXRjaChlKXtjYXNlIFVyLk5PTkU6cmV0dXJuIGk7Y2FzZSBVci5IVE1MOnJldHVybiB3bChpLCJIVE1MIik/T2EoaSk6aGsodGhpcy5fZG9jLFN0cmluZyhpKSkudG9TdHJpbmcoKTtjYXNlIFVyLlNUWUxFOnJldHVybiB3bChpLCJTdHlsZSIpP09hKGkpOmk7Y2FzZSBVci5TQ1JJUFQ6aWYod2woaSwiU2NyaXB0IikpcmV0dXJuIE9hKGkpO3Rocm93IG5ldyBFcnJvcigidW5zYWZlIHZhbHVlIHVzZWQgaW4gYSBzY3JpcHQgY29udGV4dCIpO2Nhc2UgVXIuVVJMOnJldHVybiB3bChpLCJVUkwiKT9PYShpKTpwYihTdHJpbmcoaSkpO2Nhc2UgVXIuUkVTT1VSQ0VfVVJMOmlmKHdsKGksIlJlc291cmNlVVJMIikpcmV0dXJuIE9hKGkpO3Rocm93IG5ldyBFcnJvcihgdW5zYWZlIHZhbHVlIHVzZWQgaW4gYSByZXNvdXJjZSBVUkwgY29udGV4dCAoc2VlICR7b2J9KWApO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIFNlY3VyaXR5Q29udGV4dCAke2V9IChzZWUgJHtvYn0pYCl9fWJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbmV3IFFSKG4pfShlKX1ieXBhc3NTZWN1cml0eVRydXN0U3R5bGUoZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBuZXcgWlIobil9KGUpfWJ5cGFzc1NlY3VyaXR5VHJ1c3RTY3JpcHQoZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBuZXcgS1Iobil9KGUpfWJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwoZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBuZXcgSlIobil9KGUpfWJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybChlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG5ldyAkUihuKX0oZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oTnQpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6ZnVuY3Rpb24oZSl7bGV0IGk9bnVsbDtyZXR1cm4gaT1lP25ldyBlOmZ1bmN0aW9uKG4pe3JldHVybiBuZXcgY0cobi5nZXQoTnQpKX0oTyh3aSkpLGl9LHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksRmI9KG5ldyBNbCgiMTUuMi45IiksJFYodUcoKSwxKSxjbGFzc3t9KSxTdz1jbGFzc3t9LF9jPSIqIjtmdW5jdGlvbiBmcihuLHQpe3JldHVybnt0eXBlOjcsbmFtZTpuLGRlZmluaXRpb25zOnQsb3B0aW9uczp7fX19ZnVuY3Rpb24gTWkobix0PW51bGwpe3JldHVybnt0eXBlOjQsc3R5bGVzOnQsdGltaW5nczpufX1mdW5jdGlvbiBMYihuLHQ9bnVsbCl7cmV0dXJue3R5cGU6MyxzdGVwczpuLG9wdGlvbnM6dH19ZnVuY3Rpb24gRXcobix0PW51bGwpe3JldHVybnt0eXBlOjIsc3RlcHM6bixvcHRpb25zOnR9fWZ1bmN0aW9uIHJuKG4pe3JldHVybnt0eXBlOjYsc3R5bGVzOm4sb2Zmc2V0Om51bGx9fWZ1bmN0aW9uIFNpKG4sdCxlKXtyZXR1cm57dHlwZTowLG5hbWU6bixzdHlsZXM6dCxvcHRpb25zOmV9fWZ1bmN0aW9uIEJiKG4pe3JldHVybnt0eXBlOjUsc3RlcHM6bn19ZnVuY3Rpb24gYmkobix0LGU9bnVsbCl7cmV0dXJue3R5cGU6MSxleHByOm4sYW5pbWF0aW9uOnQsb3B0aW9uczplfX1mdW5jdGlvbiBpaChuPW51bGwpe3JldHVybnt0eXBlOjksb3B0aW9uczpufX1mdW5jdGlvbiByaChuLHQsZT1udWxsKXtyZXR1cm57dHlwZToxMSxzZWxlY3RvcjpuLGFuaW1hdGlvbjp0LG9wdGlvbnM6ZX19ZnVuY3Rpb24gcEcobil7UHJvbWlzZS5yZXNvbHZlKCkudGhlbihuKX12YXIgcHU9Y2xhc3N7Y29uc3RydWN0b3IodD0wLGU9MCl7dGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMuX29yaWdpbmFsT25Eb25lRm5zPVtdLHRoaXMuX29yaWdpbmFsT25TdGFydEZucz1bXSx0aGlzLl9zdGFydGVkPSExLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9wb3NpdGlvbj0wLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy50b3RhbFRpbWU9dCtlfV9vbkZpbmlzaCgpe3RoaXMuX2ZpbmlzaGVkfHwodGhpcy5fZmluaXNoZWQ9ITAsdGhpcy5fb25Eb25lRm5zLmZvckVhY2godD0+dCgpKSx0aGlzLl9vbkRvbmVGbnM9W10pfW9uU3RhcnQodCl7dGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zLnB1c2godCksdGhpcy5fb25TdGFydEZucy5wdXNoKHQpfW9uRG9uZSh0KXt0aGlzLl9vcmlnaW5hbE9uRG9uZUZucy5wdXNoKHQpLHRoaXMuX29uRG9uZUZucy5wdXNoKHQpfW9uRGVzdHJveSh0KXt0aGlzLl9vbkRlc3Ryb3lGbnMucHVzaCh0KX1oYXNTdGFydGVkKCl7cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9aW5pdCgpe31wbGF5KCl7dGhpcy5oYXNTdGFydGVkKCl8fCh0aGlzLl9vblN0YXJ0KCksdGhpcy50cmlnZ2VyTWljcm90YXNrKCkpLHRoaXMuX3N0YXJ0ZWQ9ITB9dHJpZ2dlck1pY3JvdGFzaygpe3BHKCgpPT50aGlzLl9vbkZpbmlzaCgpKX1fb25TdGFydCgpe3RoaXMuX29uU3RhcnRGbnMuZm9yRWFjaCh0PT50KCkpLHRoaXMuX29uU3RhcnRGbnM9W119cGF1c2UoKXt9cmVzdGFydCgpe31maW5pc2goKXt0aGlzLl9vbkZpbmlzaCgpfWRlc3Ryb3koKXt0aGlzLl9kZXN0cm95ZWR8fCh0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5oYXNTdGFydGVkKCl8fHRoaXMuX29uU3RhcnQoKSx0aGlzLmZpbmlzaCgpLHRoaXMuX29uRGVzdHJveUZucy5mb3JFYWNoKHQ9PnQoKSksdGhpcy5fb25EZXN0cm95Rm5zPVtdKX1yZXNldCgpe3RoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fb25TdGFydEZucz10aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnMsdGhpcy5fb25Eb25lRm5zPXRoaXMuX29yaWdpbmFsT25Eb25lRm5zfXNldFBvc2l0aW9uKHQpe3RoaXMuX3Bvc2l0aW9uPXRoaXMudG90YWxUaW1lP3QqdGhpcy50b3RhbFRpbWU6MX1nZXRQb3NpdGlvbigpe3JldHVybiB0aGlzLnRvdGFsVGltZT90aGlzLl9wb3NpdGlvbi90aGlzLnRvdGFsVGltZToxfXRyaWdnZXJDYWxsYmFjayh0KXtsZXQgZT0ic3RhcnQiPT10P3RoaXMuX29uU3RhcnRGbnM6dGhpcy5fb25Eb25lRm5zO2UuZm9yRWFjaChpPT5pKCkpLGUubGVuZ3RoPTB9fSxOYj1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9vbkRvbmVGbnM9W10sdGhpcy5fb25TdGFydEZucz1bXSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9zdGFydGVkPSExLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10sdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLnRvdGFsVGltZT0wLHRoaXMucGxheWVycz10O2xldCBlPTAsaT0wLHI9MCxvPXRoaXMucGxheWVycy5sZW5ndGg7MD09bz9wRygoKT0+dGhpcy5fb25GaW5pc2goKSk6dGhpcy5wbGF5ZXJzLmZvckVhY2goYT0+e2Eub25Eb25lKCgpPT57KytlPT1vJiZ0aGlzLl9vbkZpbmlzaCgpfSksYS5vbkRlc3Ryb3koKCk9PnsrK2k9PW8mJnRoaXMuX29uRGVzdHJveSgpfSksYS5vblN0YXJ0KCgpPT57KytyPT1vJiZ0aGlzLl9vblN0YXJ0KCl9KX0pLHRoaXMudG90YWxUaW1lPXRoaXMucGxheWVycy5yZWR1Y2UoKGEscyk9Pk1hdGgubWF4KGEscy50b3RhbFRpbWUpLDApfV9vbkZpbmlzaCgpe3RoaXMuX2ZpbmlzaGVkfHwodGhpcy5fZmluaXNoZWQ9ITAsdGhpcy5fb25Eb25lRm5zLmZvckVhY2godD0+dCgpKSx0aGlzLl9vbkRvbmVGbnM9W10pfWluaXQoKXt0aGlzLnBsYXllcnMuZm9yRWFjaCh0PT50LmluaXQoKSl9b25TdGFydCh0KXt0aGlzLl9vblN0YXJ0Rm5zLnB1c2godCl9X29uU3RhcnQoKXt0aGlzLmhhc1N0YXJ0ZWQoKXx8KHRoaXMuX3N0YXJ0ZWQ9ITAsdGhpcy5fb25TdGFydEZucy5mb3JFYWNoKHQ9PnQoKSksdGhpcy5fb25TdGFydEZucz1bXSl9b25Eb25lKHQpe3RoaXMuX29uRG9uZUZucy5wdXNoKHQpfW9uRGVzdHJveSh0KXt0aGlzLl9vbkRlc3Ryb3lGbnMucHVzaCh0KX1oYXNTdGFydGVkKCl7cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9cGxheSgpe3RoaXMucGFyZW50UGxheWVyfHx0aGlzLmluaXQoKSx0aGlzLl9vblN0YXJ0KCksdGhpcy5wbGF5ZXJzLmZvckVhY2godD0+dC5wbGF5KCkpfXBhdXNlKCl7dGhpcy5wbGF5ZXJzLmZvckVhY2godD0+dC5wYXVzZSgpKX1yZXN0YXJ0KCl7dGhpcy5wbGF5ZXJzLmZvckVhY2godD0+dC5yZXN0YXJ0KCkpfWZpbmlzaCgpe3RoaXMuX29uRmluaXNoKCksdGhpcy5wbGF5ZXJzLmZvckVhY2godD0+dC5maW5pc2goKSl9ZGVzdHJveSgpe3RoaXMuX29uRGVzdHJveSgpfV9vbkRlc3Ryb3koKXt0aGlzLl9kZXN0cm95ZWR8fCh0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5fb25GaW5pc2goKSx0aGlzLnBsYXllcnMuZm9yRWFjaCh0PT50LmRlc3Ryb3koKSksdGhpcy5fb25EZXN0cm95Rm5zLmZvckVhY2godD0+dCgpKSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfXJlc2V0KCl7dGhpcy5wbGF5ZXJzLmZvckVhY2godD0+dC5yZXNldCgpKSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMX1zZXRQb3NpdGlvbih0KXtsZXQgZT10KnRoaXMudG90YWxUaW1lO3RoaXMucGxheWVycy5mb3JFYWNoKGk9PntsZXQgcj1pLnRvdGFsVGltZT9NYXRoLm1pbigxLGUvaS50b3RhbFRpbWUpOjE7aS5zZXRQb3NpdGlvbihyKX0pfWdldFBvc2l0aW9uKCl7bGV0IHQ9dGhpcy5wbGF5ZXJzLnJlZHVjZSgoZSxpKT0+bnVsbD09PWV8fGkudG90YWxUaW1lPmUudG90YWxUaW1lP2k6ZSxudWxsKTtyZXR1cm4gbnVsbCE9dD90LmdldFBvc2l0aW9uKCk6MH1iZWZvcmVEZXN0cm95KCl7dGhpcy5wbGF5ZXJzLmZvckVhY2godD0+e3QuYmVmb3JlRGVzdHJveSYmdC5iZWZvcmVEZXN0cm95KCl9KX10cmlnZ2VyQ2FsbGJhY2sodCl7bGV0IGU9InN0YXJ0Ij09dD90aGlzLl9vblN0YXJ0Rm5zOnRoaXMuX29uRG9uZUZucztlLmZvckVhY2goaT0+aSgpKSxlLmxlbmd0aD0wfX0sVHc9IiEiO2Z1bmN0aW9uIGhHKG4pe3JldHVybiBuZXcgeHQoM2UzLCExKX1mdW5jdGlvbiBBTygpe3JldHVybiB0eXBlb2YgcHJvY2VzczwidSImJiJbb2JqZWN0IHByb2Nlc3NdIj09PXt9LnRvU3RyaW5nLmNhbGwocHJvY2Vzcyl9ZnVuY3Rpb24gaHUobil7c3dpdGNoKG4ubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyBwdTtjYXNlIDE6cmV0dXJuIG5bMF07ZGVmYXVsdDpyZXR1cm4gbmV3IE5iKG4pfX1mdW5jdGlvbiBERyhuLHQsZSxpLHI9bmV3IE1hcCxvPW5ldyBNYXApe2xldCBhPVtdLHM9W10sbD0tMSxjPW51bGw7aWYoaS5mb3JFYWNoKGQ9PntsZXQgdT1kLmdldCgib2Zmc2V0IikscD11PT1sLGg9cCYmY3x8bmV3IE1hcDtkLmZvckVhY2goKG0sXyk9PntsZXQgTT1fLHk9bTtpZigib2Zmc2V0IiE9PV8pc3dpdGNoKE09dC5ub3JtYWxpemVQcm9wZXJ0eU5hbWUoTSxhKSx5KXtjYXNlIFR3Onk9ci5nZXQoXyk7YnJlYWs7Y2FzZSBfYzp5PW8uZ2V0KF8pO2JyZWFrO2RlZmF1bHQ6eT10Lm5vcm1hbGl6ZVN0eWxlVmFsdWUoXyxNLHksYSl9aC5zZXQoTSx5KX0pLHB8fHMucHVzaChoKSxjPWgsbD11fSksYS5sZW5ndGgpdGhyb3cgbmV3IHh0KDM1MDIsITEpO3JldHVybiBzfWZ1bmN0aW9uIFJPKG4sdCxlLGkpe3N3aXRjaCh0KXtjYXNlInN0YXJ0IjpuLm9uU3RhcnQoKCk9PmkoZSYmZE8oZSwic3RhcnQiLG4pKSk7YnJlYWs7Y2FzZSJkb25lIjpuLm9uRG9uZSgoKT0+aShlJiZkTyhlLCJkb25lIixuKSkpO2JyZWFrO2Nhc2UiZGVzdHJveSI6bi5vbkRlc3Ryb3koKCk9PmkoZSYmZE8oZSwiZGVzdHJveSIsbikpKX19ZnVuY3Rpb24gZE8obix0LGUpe2xldCBvPVBPKG4uZWxlbWVudCxuLnRyaWdnZXJOYW1lLG4uZnJvbVN0YXRlLG4udG9TdGF0ZSx0fHxuLnBoYXNlTmFtZSxlLnRvdGFsVGltZT8/bi50b3RhbFRpbWUsISFlLmRpc2FibGVkKSxhPW4uX2RhdGE7cmV0dXJuIG51bGwhPWEmJihvLl9kYXRhPWEpLG99ZnVuY3Rpb24gUE8obix0LGUsaSxyPSIiLG89MCxhKXtyZXR1cm57ZWxlbWVudDpuLHRyaWdnZXJOYW1lOnQsZnJvbVN0YXRlOmUsdG9TdGF0ZTppLHBoYXNlTmFtZTpyLHRvdGFsVGltZTpvLGRpc2FibGVkOiEhYX19ZnVuY3Rpb24gcHMobix0LGUpe2xldCBpPW4uZ2V0KHQpO3JldHVybiBpfHxuLnNldCh0LGk9ZSksaX1mdW5jdGlvbiBtRyhuKXtsZXQgdD1uLmluZGV4T2YoIjoiKTtyZXR1cm5bbi5zdWJzdHJpbmcoMSx0KSxuLnNsaWNlKHQrMSldfXZhciBnTz0obix0KT0+ITEsSUc9KG4sdCxlKT0+W10sQUc9bnVsbDtmdW5jdGlvbiBrTyhuKXtsZXQgdD1uLnBhcmVudE5vZGV8fG4uaG9zdDtyZXR1cm4gdD09PUFHP251bGw6dH0oQU8oKXx8dHlwZW9mIEVsZW1lbnQ8InUiKSYmKHR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LmRvY3VtZW50PCJ1Ij8oQUc9KCgpPT5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpKCksZ089KG4sdCk9Pntmb3IoO3Q7KXtpZih0PT09bilyZXR1cm4hMDt0PWtPKHQpfXJldHVybiExfSk6Z089KG4sdCk9Pm4uY29udGFpbnModCksSUc9KG4sdCxlKT0+e2lmKGUpcmV0dXJuIEFycmF5LmZyb20obi5xdWVyeVNlbGVjdG9yQWxsKHQpKTtsZXQgaT1uLnF1ZXJ5U2VsZWN0b3IodCk7cmV0dXJuIGk/W2ldOltdfSk7dmFyIG9oPW51bGwsZkc9ITE7dmFyIFJHPWdPLFBHPUlHLE9PPSgoKT0+e2NsYXNzIG57dmFsaWRhdGVTdHlsZVByb3BlcnR5KGUpe3JldHVybiBmdW5jdGlvbihuKXtvaHx8KG9oPSh0eXBlb2YgZG9jdW1lbnQ8InUiP2RvY3VtZW50LmJvZHk6bnVsbCl8fHt9LGZHPSEhb2guc3R5bGUmJiJXZWJraXRBcHBlYXJhbmNlImluIG9oLnN0eWxlKTtsZXQgdD0hMDtyZXR1cm4gb2guc3R5bGUmJiFmdW5jdGlvbihuKXtyZXR1cm4iZWJraXQiPT1uLnN1YnN0cmluZygxLDYpfShuKSYmKHQ9biBpbiBvaC5zdHlsZSwhdCYmZkcmJih0PSJXZWJraXQiK24uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrbi5zbGljZSgxKWluIG9oLnN0eWxlKSksdH0oZSl9bWF0Y2hlc0VsZW1lbnQoZSxpKXtyZXR1cm4hMX1jb250YWluc0VsZW1lbnQoZSxpKXtyZXR1cm4gUkcoZSxpKX1nZXRQYXJlbnRFbGVtZW50KGUpe3JldHVybiBrTyhlKX1xdWVyeShlLGkscil7cmV0dXJuIFBHKGUsaSxyKX1jb21wdXRlU3R5bGUoZSxpLHIpe3JldHVybiByfHwiIn1hbmltYXRlKGUsaSxyLG8sYSxzPVtdLGwpe3JldHVybiBuZXcgcHUocixvKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCkscWI9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uTk9PUD1uZXcgT08sbn0pKCksRGhlPTFlMyxPRz0ibmctZW50ZXIiLF9PPSJuZy1sZWF2ZSIsRHc9Im5nLXRyaWdnZXIiLFB3PSIubmctdHJpZ2dlciIsZ0c9Im5nLWFuaW1hdGluZyIsYk89Ii5uZy1hbmltYXRpbmciO2Z1bmN0aW9uIGNkKG4pe2lmKCJudW1iZXIiPT10eXBlb2YgbilyZXR1cm4gbjtsZXQgdD1uLm1hdGNoKC9eKC0/W1wuXGRdKykobT9zKS8pO3JldHVybiF0fHx0Lmxlbmd0aDwyPzA6dk8ocGFyc2VGbG9hdCh0WzFdKSx0WzJdKX1mdW5jdGlvbiB2TyhuLHQpe3JldHVybiJzIj09PXQ/bipEaGU6bn1mdW5jdGlvbiBrdyhuLHQsZSl7cmV0dXJuIG4uaGFzT3duUHJvcGVydHkoImR1cmF0aW9uIik/bjpmdW5jdGlvbihuLHQsZSl7bGV0IHIsbz0wLGE9IiI7aWYoInN0cmluZyI9PXR5cGVvZiBuKXtsZXQgcz1uLm1hdGNoKC9eKC0/W1wuXGRdKykobT9zKSg/OlxzKygtP1tcLlxkXSspKG0/cykpPyg/OlxzKyhbLWEtel0rKD86XCguKz9cKSk/KSk/JC9pKTtpZihudWxsPT09cylyZXR1cm4gdC5wdXNoKGhHKCkpLHtkdXJhdGlvbjowLGRlbGF5OjAsZWFzaW5nOiIifTtyPXZPKHBhcnNlRmxvYXQoc1sxXSksc1syXSk7bGV0IGw9c1szXTtudWxsIT1sJiYobz12TyhwYXJzZUZsb2F0KGwpLHNbNF0pKTtsZXQgYz1zWzVdO2MmJihhPWMpfWVsc2Ugcj1uO2lmKCFlKXtsZXQgcz0hMSxsPXQubGVuZ3RoO3I8MCYmKHQucHVzaChuZXcgeHQoMzEwMCwhMSkpLHM9ITApLG88MCYmKHQucHVzaChuZXcgeHQoMzEwMSwhMSkpLHM9ITApLHMmJnQuc3BsaWNlKGwsMCxoRygpKX1yZXR1cm57ZHVyYXRpb246cixkZWxheTpvLGVhc2luZzphfX0obix0LGUpfWZ1bmN0aW9uIFhiKG4sdD17fSl7cmV0dXJuIE9iamVjdC5rZXlzKG4pLmZvckVhY2goZT0+e3RbZV09bltlXX0pLHR9ZnVuY3Rpb24gRkcobil7bGV0IHQ9bmV3IE1hcDtyZXR1cm4gT2JqZWN0LmtleXMobikuZm9yRWFjaChlPT57dC5zZXQoZSxuW2VdKX0pLHR9ZnVuY3Rpb24gRWYobix0PW5ldyBNYXAsZSl7aWYoZSlmb3IobGV0W2kscl1vZiBlKXQuc2V0KGkscik7Zm9yKGxldFtpLHJdb2Ygbil0LnNldChpLHIpO3JldHVybiB0fWZ1bmN0aW9uIF9HKG4sdCxlKXtyZXR1cm4gZT90KyI6IitlKyI7IjoiIn1mdW5jdGlvbiBORyhuKXtsZXQgdD0iIjtmb3IobGV0IGU9MDtlPG4uc3R5bGUubGVuZ3RoO2UrKyl7bGV0IGk9bi5zdHlsZS5pdGVtKGUpO3QrPV9HKDAsaSxuLnN0eWxlLmdldFByb3BlcnR5VmFsdWUoaSkpfWZvcihsZXQgZSBpbiBuLnN0eWxlKW4uc3R5bGUuaGFzT3duUHJvcGVydHkoZSkmJiFlLnN0YXJ0c1dpdGgoIl8iKSYmKHQrPV9HKDAsT2hlKGUpLG4uc3R5bGVbZV0pKTtuLnNldEF0dHJpYnV0ZSgic3R5bGUiLHQpfWZ1bmN0aW9uIGJjKG4sdCxlKXtuLnN0eWxlJiYodC5mb3JFYWNoKChpLHIpPT57bGV0IG89Rk8ocik7ZSYmIWUuaGFzKHIpJiZlLnNldChyLG4uc3R5bGVbb10pLG4uc3R5bGVbb109aX0pLEFPKCkmJk5HKG4pKX1mdW5jdGlvbiBzaChuLHQpe24uc3R5bGUmJih0LmZvckVhY2goKGUsaSk9PntsZXQgcj1GTyhpKTtuLnN0eWxlW3JdPSIifSksQU8oKSYmTkcobikpfWZ1bmN0aW9uIFZiKG4pe3JldHVybiBBcnJheS5pc0FycmF5KG4pPzE9PW4ubGVuZ3RoP25bMF06RXcobik6bn12YXIgeU89bmV3IFJlZ0V4cCgie3tcXHMqKC4rPylcXHMqfX0iLCJnIik7ZnVuY3Rpb24gTEcobil7bGV0IHQ9W107aWYoInN0cmluZyI9PXR5cGVvZiBuKXtsZXQgZTtmb3IoO2U9eU8uZXhlYyhuKTspdC5wdXNoKGVbMV0pO3lPLmxhc3RJbmRleD0wfXJldHVybiB0fWZ1bmN0aW9uIHpiKG4sdCxlKXtsZXQgaT1uLnRvU3RyaW5nKCkscj1pLnJlcGxhY2UoeU8sKG8sYSk9PntsZXQgcz10W2FdO3JldHVybiBudWxsPT1zJiYoZS5wdXNoKG5ldyB4dCgzMDAzLCExKSkscz0iIikscy50b1N0cmluZygpfSk7cmV0dXJuIHI9PWk/bjpyfWZ1bmN0aW9uIE93KG4pe2xldCB0PVtdLGU9bi5uZXh0KCk7Zm9yKDshZS5kb25lOyl0LnB1c2goZS52YWx1ZSksZT1uLm5leHQoKTtyZXR1cm4gdH12YXIga2hlPS8tKyhbYS16MC05XSkvZztmdW5jdGlvbiBGTyhuKXtyZXR1cm4gbi5yZXBsYWNlKGtoZSwoLi4udCk9PnRbMV0udG9VcHBlckNhc2UoKSl9ZnVuY3Rpb24gT2hlKG4pe3JldHVybiBuLnJlcGxhY2UoLyhbYS16XSkoW0EtWl0pL2csIiQxLSQyIikudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiB1cyhuLHQsZSl7c3dpdGNoKHQudHlwZSl7Y2FzZSA3OnJldHVybiBuLnZpc2l0VHJpZ2dlcih0LGUpO2Nhc2UgMDpyZXR1cm4gbi52aXNpdFN0YXRlKHQsZSk7Y2FzZSAxOnJldHVybiBuLnZpc2l0VHJhbnNpdGlvbih0LGUpO2Nhc2UgMjpyZXR1cm4gbi52aXNpdFNlcXVlbmNlKHQsZSk7Y2FzZSAzOnJldHVybiBuLnZpc2l0R3JvdXAodCxlKTtjYXNlIDQ6cmV0dXJuIG4udmlzaXRBbmltYXRlKHQsZSk7Y2FzZSA1OnJldHVybiBuLnZpc2l0S2V5ZnJhbWVzKHQsZSk7Y2FzZSA2OnJldHVybiBuLnZpc2l0U3R5bGUodCxlKTtjYXNlIDg6cmV0dXJuIG4udmlzaXRSZWZlcmVuY2UodCxlKTtjYXNlIDk6cmV0dXJuIG4udmlzaXRBbmltYXRlQ2hpbGQodCxlKTtjYXNlIDEwOnJldHVybiBuLnZpc2l0QW5pbWF0ZVJlZih0LGUpO2Nhc2UgMTE6cmV0dXJuIG4udmlzaXRRdWVyeSh0LGUpO2Nhc2UgMTI6cmV0dXJuIG4udmlzaXRTdGFnZ2VyKHQsZSk7ZGVmYXVsdDp0aHJvdyBuZXcgeHQoMzAwNCwhMSl9fWZ1bmN0aW9uIEJHKG4sdCl7cmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG4pW3RdfXZhciBGdz0iKiI7ZnVuY3Rpb24gVmhlKG4sdCl7bGV0IGU9W107cmV0dXJuInN0cmluZyI9PXR5cGVvZiBuP24uc3BsaXQoL1xzKixccyovKS5mb3JFYWNoKGk9PmZ1bmN0aW9uKG4sdCxlKXtpZigiOiI9PW5bMF0pe2xldCBsPWZ1bmN0aW9uKG4sdCl7c3dpdGNoKG4pe2Nhc2UiOmVudGVyIjpyZXR1cm4idm9pZCA9PiAqIjtjYXNlIjpsZWF2ZSI6cmV0dXJuIiogPT4gdm9pZCI7Y2FzZSI6aW5jcmVtZW50IjpyZXR1cm4oZSxpKT0+cGFyc2VGbG9hdChpKT5wYXJzZUZsb2F0KGUpO2Nhc2UiOmRlY3JlbWVudCI6cmV0dXJuKGUsaSk9PnBhcnNlRmxvYXQoaSk8cGFyc2VGbG9hdChlKTtkZWZhdWx0OnJldHVybiB0LnB1c2gobmV3IHh0KDMwMTYsITEpKSwiKiA9PiAqIn19KG4sZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGwpcmV0dXJuIHZvaWQgdC5wdXNoKGwpO249bH1sZXQgaT1uLm1hdGNoKC9eKFwqfFstXHddKylccyooPD9bPS1dPilccyooXCp8Wy1cd10rKSQvKTtpZihudWxsPT1pfHxpLmxlbmd0aDw0KXJldHVybiBlLnB1c2gobmV3IHh0KDMwMTUsITEpKSx0O2xldCByPWlbMV0sbz1pWzJdLGE9aVszXTt0LnB1c2goYkcocixhKSksIjwiPT1vWzBdJiYhKHI9PUZ3JiZhPT1GdykmJnQucHVzaChiRyhhLHIpKX0oaSxlLHQpKTplLnB1c2gobiksZX12YXIgSXc9bmV3IFNldChbInRydWUiLCIxIl0pLEF3PW5ldyBTZXQoWyJmYWxzZSIsIjAiXSk7ZnVuY3Rpb24gYkcobix0KXtsZXQgZT1Jdy5oYXMobil8fEF3LmhhcyhuKSxpPUl3Lmhhcyh0KXx8QXcuaGFzKHQpO3JldHVybihyLG8pPT57bGV0IGE9bj09Rnd8fG49PXIscz10PT1Gd3x8dD09bztyZXR1cm4hYSYmZSYmImJvb2xlYW4iPT10eXBlb2YgciYmKGE9cj9Jdy5oYXMobik6QXcuaGFzKG4pKSwhcyYmaSYmImJvb2xlYW4iPT10eXBlb2YgbyYmKHM9bz9Jdy5oYXModCk6QXcuaGFzKHQpKSxhJiZzfX12YXIgVWhlPW5ldyBSZWdFeHAoInMqOnNlbGZzKiw/IiwiZyIpO2Z1bmN0aW9uIFVHKG4sdCxlLGkpe3JldHVybiBuZXcgeE8obikuYnVpbGQodCxlLGkpfXZhciB4Tz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9kcml2ZXI9dH1idWlsZCh0LGUsaSl7bGV0IHI9bmV3IENPKGUpO3JldHVybiB0aGlzLl9yZXNldENvbnRleHRTdHlsZVRpbWluZ1N0YXRlKHIpLHVzKHRoaXMsVmIodCkscil9X3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3RhdGUodCl7dC5jdXJyZW50UXVlcnlTZWxlY3Rvcj0iIix0LmNvbGxlY3RlZFN0eWxlcz1uZXcgTWFwLHQuY29sbGVjdGVkU3R5bGVzLnNldCgiIixuZXcgTWFwKSx0LmN1cnJlbnRUaW1lPTB9dmlzaXRUcmlnZ2VyKHQsZSl7bGV0IGk9ZS5xdWVyeUNvdW50PTAscj1lLmRlcENvdW50PTAsbz1bXSxhPVtdO3JldHVybiJAIj09dC5uYW1lLmNoYXJBdCgwKSYmZS5lcnJvcnMucHVzaChuZXcgeHQoMzAwNiwhMSkpLHQuZGVmaW5pdGlvbnMuZm9yRWFjaChzPT57aWYodGhpcy5fcmVzZXRDb250ZXh0U3R5bGVUaW1pbmdTdGF0ZShlKSwwPT1zLnR5cGUpe2xldCBsPXMsYz1sLm5hbWU7Yy50b1N0cmluZygpLnNwbGl0KC9ccyosXHMqLykuZm9yRWFjaChkPT57bC5uYW1lPWQsby5wdXNoKHRoaXMudmlzaXRTdGF0ZShsLGUpKX0pLGwubmFtZT1jfWVsc2UgaWYoMT09cy50eXBlKXtsZXQgbD10aGlzLnZpc2l0VHJhbnNpdGlvbihzLGUpO2krPWwucXVlcnlDb3VudCxyKz1sLmRlcENvdW50LGEucHVzaChsKX1lbHNlIGUuZXJyb3JzLnB1c2gobmV3IHh0KDMwMDcsITEpKX0pLHt0eXBlOjcsbmFtZTp0Lm5hbWUsc3RhdGVzOm8sdHJhbnNpdGlvbnM6YSxxdWVyeUNvdW50OmksZGVwQ291bnQ6cixvcHRpb25zOm51bGx9fXZpc2l0U3RhdGUodCxlKXtsZXQgaT10aGlzLnZpc2l0U3R5bGUodC5zdHlsZXMsZSkscj10Lm9wdGlvbnMmJnQub3B0aW9ucy5wYXJhbXN8fG51bGw7aWYoaS5jb250YWluc0R5bmFtaWNTdHlsZXMpe2xldCBvPW5ldyBTZXQsYT1yfHx7fTtpLnN0eWxlcy5mb3JFYWNoKHM9PntzIGluc3RhbmNlb2YgTWFwJiZzLmZvckVhY2gobD0+e0xHKGwpLmZvckVhY2goYz0+e2EuaGFzT3duUHJvcGVydHkoYyl8fG8uYWRkKGMpfSl9KX0pLG8uc2l6ZSYmKE93KG8udmFsdWVzKCkpLGUuZXJyb3JzLnB1c2gobmV3IHh0KDMwMDgsITEpKSl9cmV0dXJue3R5cGU6MCxuYW1lOnQubmFtZSxzdHlsZTppLG9wdGlvbnM6cj97cGFyYW1zOnJ9Om51bGx9fXZpc2l0VHJhbnNpdGlvbih0LGUpe2UucXVlcnlDb3VudD0wLGUuZGVwQ291bnQ9MDtsZXQgaT11cyh0aGlzLFZiKHQuYW5pbWF0aW9uKSxlKTtyZXR1cm57dHlwZToxLG1hdGNoZXJzOlZoZSh0LmV4cHIsZS5lcnJvcnMpLGFuaW1hdGlvbjppLHF1ZXJ5Q291bnQ6ZS5xdWVyeUNvdW50LGRlcENvdW50OmUuZGVwQ291bnQsb3B0aW9uczphaCh0Lm9wdGlvbnMpfX12aXNpdFNlcXVlbmNlKHQsZSl7cmV0dXJue3R5cGU6MixzdGVwczp0LnN0ZXBzLm1hcChpPT51cyh0aGlzLGksZSkpLG9wdGlvbnM6YWgodC5vcHRpb25zKX19dmlzaXRHcm91cCh0LGUpe2xldCBpPWUuY3VycmVudFRpbWUscj0wLG89dC5zdGVwcy5tYXAoYT0+e2UuY3VycmVudFRpbWU9aTtsZXQgcz11cyh0aGlzLGEsZSk7cmV0dXJuIHI9TWF0aC5tYXgocixlLmN1cnJlbnRUaW1lKSxzfSk7cmV0dXJuIGUuY3VycmVudFRpbWU9cix7dHlwZTozLHN0ZXBzOm8sb3B0aW9uczphaCh0Lm9wdGlvbnMpfX12aXNpdEFuaW1hdGUodCxlKXtsZXQgaT1mdW5jdGlvbihuLHQpe2lmKG4uaGFzT3duUHJvcGVydHkoImR1cmF0aW9uIikpcmV0dXJuIG47aWYoIm51bWJlciI9PXR5cGVvZiBuKXJldHVybiB1TyhrdyhuLHQpLmR1cmF0aW9uLDAsIiIpO2xldCBlPW47aWYoZS5zcGxpdCgvXHMrLykuc29tZShvPT4ieyI9PW8uY2hhckF0KDApJiYieyI9PW8uY2hhckF0KDEpKSl7bGV0IG89dU8oMCwwLCIiKTtyZXR1cm4gby5keW5hbWljPSEwLG8uc3RyVmFsdWU9ZSxvfWxldCByPWt3KGUsdCk7cmV0dXJuIHVPKHIuZHVyYXRpb24sci5kZWxheSxyLmVhc2luZyl9KHQudGltaW5ncyxlLmVycm9ycyk7ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9aTtsZXQgcixvPXQuc3R5bGVzP3Quc3R5bGVzOnJuKHt9KTtpZig1PT1vLnR5cGUpcj10aGlzLnZpc2l0S2V5ZnJhbWVzKG8sZSk7ZWxzZXtsZXQgYT10LnN0eWxlcyxzPSExO2lmKCFhKXtzPSEwO2xldCBjPXt9O2kuZWFzaW5nJiYoYy5lYXNpbmc9aS5lYXNpbmcpLGE9cm4oYyl9ZS5jdXJyZW50VGltZSs9aS5kdXJhdGlvbitpLmRlbGF5O2xldCBsPXRoaXMudmlzaXRTdHlsZShhLGUpO2wuaXNFbXB0eVN0ZXA9cyxyPWx9cmV0dXJuIGUuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwse3R5cGU6NCx0aW1pbmdzOmksc3R5bGU6cixvcHRpb25zOm51bGx9fXZpc2l0U3R5bGUodCxlKXtsZXQgaT10aGlzLl9tYWtlU3R5bGVBc3QodCxlKTtyZXR1cm4gdGhpcy5fdmFsaWRhdGVTdHlsZUFzdChpLGUpLGl9X21ha2VTdHlsZUFzdCh0LGUpe2xldCBpPVtdLHI9QXJyYXkuaXNBcnJheSh0LnN0eWxlcyk/dC5zdHlsZXM6W3Quc3R5bGVzXTtmb3IobGV0IHMgb2Ygcikic3RyaW5nIj09dHlwZW9mIHM/cz09PV9jP2kucHVzaChzKTplLmVycm9ycy5wdXNoKG5ldyB4dCgzMDAyLCExKSk6aS5wdXNoKEZHKHMpKTtsZXQgbz0hMSxhPW51bGw7cmV0dXJuIGkuZm9yRWFjaChzPT57aWYocyBpbnN0YW5jZW9mIE1hcCYmKHMuaGFzKCJlYXNpbmciKSYmKGE9cy5nZXQoImVhc2luZyIpLHMuZGVsZXRlKCJlYXNpbmciKSksIW8pKWZvcihsZXQgbCBvZiBzLnZhbHVlcygpKWlmKGwudG9TdHJpbmcoKS5pbmRleE9mKCJ7eyIpPj0wKXtvPSEwO2JyZWFrfX0pLHt0eXBlOjYsc3R5bGVzOmksZWFzaW5nOmEsb2Zmc2V0OnQub2Zmc2V0LGNvbnRhaW5zRHluYW1pY1N0eWxlczpvLG9wdGlvbnM6bnVsbH19X3ZhbGlkYXRlU3R5bGVBc3QodCxlKXtsZXQgaT1lLmN1cnJlbnRBbmltYXRlVGltaW5ncyxyPWUuY3VycmVudFRpbWUsbz1lLmN1cnJlbnRUaW1lO2kmJm8+MCYmKG8tPWkuZHVyYXRpb24raS5kZWxheSksdC5zdHlsZXMuZm9yRWFjaChhPT57InN0cmluZyIhPXR5cGVvZiBhJiZhLmZvckVhY2goKHMsbCk9PntsZXQgYz1lLmNvbGxlY3RlZFN0eWxlcy5nZXQoZS5jdXJyZW50UXVlcnlTZWxlY3RvciksZD1jLmdldChsKSx1PSEwO2QmJihvIT1yJiZvPj1kLnN0YXJ0VGltZSYmcjw9ZC5lbmRUaW1lJiYoZS5lcnJvcnMucHVzaChuZXcgeHQoMzAxMCwhMSkpLHU9ITEpLG89ZC5zdGFydFRpbWUpLHUmJmMuc2V0KGwse3N0YXJ0VGltZTpvLGVuZFRpbWU6cn0pLGUub3B0aW9ucyYmZnVuY3Rpb24obix0LGUpe2xldCBpPXQucGFyYW1zfHx7fSxyPUxHKG4pO3IubGVuZ3RoJiZyLmZvckVhY2gobz0+e2kuaGFzT3duUHJvcGVydHkobyl8fGUucHVzaChuZXcgeHQoMzAwMSwhMSkpfSl9KHMsZS5vcHRpb25zLGUuZXJyb3JzKX0pfSl9dmlzaXRLZXlmcmFtZXModCxlKXtsZXQgaT17dHlwZTo1LHN0eWxlczpbXSxvcHRpb25zOm51bGx9O2lmKCFlLmN1cnJlbnRBbmltYXRlVGltaW5ncylyZXR1cm4gZS5lcnJvcnMucHVzaChuZXcgeHQoMzAxMSwhMSkpLGk7bGV0IG89MCxhPVtdLHM9ITEsbD0hMSxjPTAsZD10LnN0ZXBzLm1hcCh5PT57bGV0IHg9dGhpcy5fbWFrZVN0eWxlQXN0KHksZSksUj1udWxsIT14Lm9mZnNldD94Lm9mZnNldDpmdW5jdGlvbihuKXtpZigic3RyaW5nIj09dHlwZW9mIG4pcmV0dXJuIG51bGw7bGV0IHQ9bnVsbDtpZihBcnJheS5pc0FycmF5KG4pKW4uZm9yRWFjaChlPT57aWYoZSBpbnN0YW5jZW9mIE1hcCYmZS5oYXMoIm9mZnNldCIpKXtsZXQgaT1lO3Q9cGFyc2VGbG9hdChpLmdldCgib2Zmc2V0IikpLGkuZGVsZXRlKCJvZmZzZXQiKX19KTtlbHNlIGlmKG4gaW5zdGFuY2VvZiBNYXAmJm4uaGFzKCJvZmZzZXQiKSl7bGV0IGU9bjt0PXBhcnNlRmxvYXQoZS5nZXQoIm9mZnNldCIpKSxlLmRlbGV0ZSgib2Zmc2V0Iil9cmV0dXJuIHR9KHguc3R5bGVzKSxJPTA7cmV0dXJuIG51bGwhPVImJihvKyssST14Lm9mZnNldD1SKSxsPWx8fEk8MHx8ST4xLHM9c3x8STxjLGM9SSxhLnB1c2goSSkseH0pO2wmJmUuZXJyb3JzLnB1c2gobmV3IHh0KDMwMTIsITEpKSxzJiZlLmVycm9ycy5wdXNoKG5ldyB4dCgzMjAwLCExKSk7bGV0IHU9dC5zdGVwcy5sZW5ndGgscD0wO28+MCYmbzx1P2UuZXJyb3JzLnB1c2gobmV3IHh0KDMyMDIsITEpKTowPT1vJiYocD0xLyh1LTEpKTtsZXQgaD11LTEsbT1lLmN1cnJlbnRUaW1lLF89ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3MsTT1fLmR1cmF0aW9uO3JldHVybiBkLmZvckVhY2goKHkseCk9PntsZXQgUj1wPjA/eD09aD8xOnAqeDphW3hdLEk9UipNO2UuY3VycmVudFRpbWU9bStfLmRlbGF5K0ksXy5kdXJhdGlvbj1JLHRoaXMuX3ZhbGlkYXRlU3R5bGVBc3QoeSxlKSx5Lm9mZnNldD1SLGkuc3R5bGVzLnB1c2goeSl9KSxpfXZpc2l0UmVmZXJlbmNlKHQsZSl7cmV0dXJue3R5cGU6OCxhbmltYXRpb246dXModGhpcyxWYih0LmFuaW1hdGlvbiksZSksb3B0aW9uczphaCh0Lm9wdGlvbnMpfX12aXNpdEFuaW1hdGVDaGlsZCh0LGUpe3JldHVybiBlLmRlcENvdW50Kysse3R5cGU6OSxvcHRpb25zOmFoKHQub3B0aW9ucyl9fXZpc2l0QW5pbWF0ZVJlZih0LGUpe3JldHVybnt0eXBlOjEwLGFuaW1hdGlvbjp0aGlzLnZpc2l0UmVmZXJlbmNlKHQuYW5pbWF0aW9uLGUpLG9wdGlvbnM6YWgodC5vcHRpb25zKX19dmlzaXRRdWVyeSh0LGUpe2xldCBpPWUuY3VycmVudFF1ZXJ5U2VsZWN0b3Iscj10Lm9wdGlvbnN8fHt9O2UucXVlcnlDb3VudCsrLGUuY3VycmVudFF1ZXJ5PXQ7bGV0W28sYV09ZnVuY3Rpb24obil7bGV0IHQ9ISFuLnNwbGl0KC9ccyosXHMqLykuZmluZChlPT4iOnNlbGYiPT1lKTtyZXR1cm4gdCYmKG49bi5yZXBsYWNlKFVoZSwiIikpLG49bi5yZXBsYWNlKC9AXCovZyxQdykucmVwbGFjZSgvQFx3Ky9nLGU9PlB3KyItIitlLnNsaWNlKDEpKS5yZXBsYWNlKC86YW5pbWF0aW5nL2csYk8pLFtuLHRdfSh0LnNlbGVjdG9yKTtlLmN1cnJlbnRRdWVyeVNlbGVjdG9yPWkubGVuZ3RoP2krIiAiK286byxwcyhlLmNvbGxlY3RlZFN0eWxlcyxlLmN1cnJlbnRRdWVyeVNlbGVjdG9yLG5ldyBNYXApO2xldCBzPXVzKHRoaXMsVmIodC5hbmltYXRpb24pLGUpO3JldHVybiBlLmN1cnJlbnRRdWVyeT1udWxsLGUuY3VycmVudFF1ZXJ5U2VsZWN0b3I9aSx7dHlwZToxMSxzZWxlY3RvcjpvLGxpbWl0OnIubGltaXR8fDAsb3B0aW9uYWw6ISFyLm9wdGlvbmFsLGluY2x1ZGVTZWxmOmEsYW5pbWF0aW9uOnMsb3JpZ2luYWxTZWxlY3Rvcjp0LnNlbGVjdG9yLG9wdGlvbnM6YWgodC5vcHRpb25zKX19dmlzaXRTdGFnZ2VyKHQsZSl7ZS5jdXJyZW50UXVlcnl8fGUuZXJyb3JzLnB1c2gobmV3IHh0KDMwMTMsITEpKTtsZXQgaT0iZnVsbCI9PT10LnRpbWluZ3M/e2R1cmF0aW9uOjAsZGVsYXk6MCxlYXNpbmc6ImZ1bGwifTprdyh0LnRpbWluZ3MsZS5lcnJvcnMsITApO3JldHVybnt0eXBlOjEyLGFuaW1hdGlvbjp1cyh0aGlzLFZiKHQuYW5pbWF0aW9uKSxlKSx0aW1pbmdzOmksb3B0aW9uczpudWxsfX19LENPPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZXJyb3JzPXQsdGhpcy5xdWVyeUNvdW50PTAsdGhpcy5kZXBDb3VudD0wLHRoaXMuY3VycmVudFRyYW5zaXRpb249bnVsbCx0aGlzLmN1cnJlbnRRdWVyeT1udWxsLHRoaXMuY3VycmVudFF1ZXJ5U2VsZWN0b3I9bnVsbCx0aGlzLmN1cnJlbnRBbmltYXRlVGltaW5ncz1udWxsLHRoaXMuY3VycmVudFRpbWU9MCx0aGlzLmNvbGxlY3RlZFN0eWxlcz1uZXcgTWFwLHRoaXMub3B0aW9ucz1udWxsLHRoaXMudW5zdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzRm91bmQ9bmV3IFNldH19O2Z1bmN0aW9uIGFoKG4pe3JldHVybiBuPyhuPVhiKG4pKS5wYXJhbXMmJihuLnBhcmFtcz1mdW5jdGlvbihuKXtyZXR1cm4gbj9YYihuKTpudWxsfShuLnBhcmFtcykpOm49e30sbn1mdW5jdGlvbiB1TyhuLHQsZSl7cmV0dXJue2R1cmF0aW9uOm4sZGVsYXk6dCxlYXNpbmc6ZX19ZnVuY3Rpb24gTk8obix0LGUsaSxyLG8sYT1udWxsLHM9ITEpe3JldHVybnt0eXBlOjEsZWxlbWVudDpuLGtleWZyYW1lczp0LHByZVN0eWxlUHJvcHM6ZSxwb3N0U3R5bGVQcm9wczppLGR1cmF0aW9uOnIsZGVsYXk6byx0b3RhbFRpbWU6citvLGVhc2luZzphLHN1YlRpbWVsaW5lOnN9fXZhciBVYj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX21hcD1uZXcgTWFwfWdldCh0KXtyZXR1cm4gdGhpcy5fbWFwLmdldCh0KXx8W119YXBwZW5kKHQsZSl7bGV0IGk9dGhpcy5fbWFwLmdldCh0KTtpfHx0aGlzLl9tYXAuc2V0KHQsaT1bXSksaS5wdXNoKC4uLmUpfWhhcyh0KXtyZXR1cm4gdGhpcy5fbWFwLmhhcyh0KX1jbGVhcigpe3RoaXMuX21hcC5jbGVhcigpfX0sUWhlPW5ldyBSZWdFeHAoIjplbnRlciIsImciKSxLaGU9bmV3IFJlZ0V4cCgiOmxlYXZlIiwiZyIpO2Z1bmN0aW9uIGpHKG4sdCxlLGkscixvPW5ldyBNYXAsYT1uZXcgTWFwLHMsbCxjPVtdKXtyZXR1cm4obmV3IE1PKS5idWlsZEtleWZyYW1lcyhuLHQsZSxpLHIsbyxhLHMsbCxjKX12YXIgTU89Y2xhc3N7YnVpbGRLZXlmcmFtZXModCxlLGkscixvLGEscyxsLGMsZD1bXSl7Yz1jfHxuZXcgVWI7bGV0IHU9bmV3IGpiKHQsZSxjLHIsbyxkLFtdKTt1Lm9wdGlvbnM9bDtsZXQgcD1sLmRlbGF5P2NkKGwuZGVsYXkpOjA7dS5jdXJyZW50VGltZWxpbmUuZGVsYXlOZXh0U3RlcChwKSx1LmN1cnJlbnRUaW1lbGluZS5zZXRTdHlsZXMoW2FdLG51bGwsdS5lcnJvcnMsbCksdXModGhpcyxpLHUpO2xldCBoPXUudGltZWxpbmVzLmZpbHRlcihtPT5tLmNvbnRhaW5zQW5pbWF0aW9uKCkpO2lmKGgubGVuZ3RoJiZzLnNpemUpe2xldCBtO2ZvcihsZXQgXz1oLmxlbmd0aC0xO18+PTA7Xy0tKXtsZXQgTT1oW19dO2lmKE0uZWxlbWVudD09PWUpe209TTticmVha319bSYmIW0uYWxsb3dPbmx5VGltZWxpbmVTdHlsZXMoKSYmbS5zZXRTdHlsZXMoW3NdLG51bGwsdS5lcnJvcnMsbCl9cmV0dXJuIGgubGVuZ3RoP2gubWFwKG09Pm0uYnVpbGRLZXlmcmFtZXMoKSk6W05PKGUsW10sW10sW10sMCxwLCIiLCExKV19dmlzaXRUcmlnZ2VyKHQsZSl7fXZpc2l0U3RhdGUodCxlKXt9dmlzaXRUcmFuc2l0aW9uKHQsZSl7fXZpc2l0QW5pbWF0ZUNoaWxkKHQsZSl7bGV0IGk9ZS5zdWJJbnN0cnVjdGlvbnMuZ2V0KGUuZWxlbWVudCk7aWYoaSl7bGV0IHI9ZS5jcmVhdGVTdWJDb250ZXh0KHQub3B0aW9ucyksbz1lLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSxhPXRoaXMuX3Zpc2l0U3ViSW5zdHJ1Y3Rpb25zKGkscixyLm9wdGlvbnMpO28hPWEmJmUudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKGEpfWUucHJldmlvdXNOb2RlPXR9dmlzaXRBbmltYXRlUmVmKHQsZSl7bGV0IGk9ZS5jcmVhdGVTdWJDb250ZXh0KHQub3B0aW9ucyk7aS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoKSx0aGlzLl9hcHBseUFuaW1hdGlvblJlZkRlbGF5cyhbdC5vcHRpb25zLHQuYW5pbWF0aW9uLm9wdGlvbnNdLGUsaSksdGhpcy52aXNpdFJlZmVyZW5jZSh0LmFuaW1hdGlvbixpKSxlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShpLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSksZS5wcmV2aW91c05vZGU9dH1fYXBwbHlBbmltYXRpb25SZWZEZWxheXModCxlLGkpe2ZvcihsZXQgciBvZiB0KXtsZXQgbz1yPy5kZWxheTtpZihvKXtsZXQgYT0ibnVtYmVyIj09dHlwZW9mIG8/bzpjZCh6YihvLHI/LnBhcmFtcz8/e30sZS5lcnJvcnMpKTtpLmRlbGF5TmV4dFN0ZXAoYSl9fX1fdmlzaXRTdWJJbnN0cnVjdGlvbnModCxlLGkpe2xldCBvPWUuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lLGE9bnVsbCE9aS5kdXJhdGlvbj9jZChpLmR1cmF0aW9uKTpudWxsLHM9bnVsbCE9aS5kZWxheT9jZChpLmRlbGF5KTpudWxsO3JldHVybiAwIT09YSYmdC5mb3JFYWNoKGw9PntsZXQgYz1lLmFwcGVuZEluc3RydWN0aW9uVG9UaW1lbGluZShsLGEscyk7bz1NYXRoLm1heChvLGMuZHVyYXRpb24rYy5kZWxheSl9KSxvfXZpc2l0UmVmZXJlbmNlKHQsZSl7ZS51cGRhdGVPcHRpb25zKHQub3B0aW9ucywhMCksdXModGhpcyx0LmFuaW1hdGlvbixlKSxlLnByZXZpb3VzTm9kZT10fXZpc2l0U2VxdWVuY2UodCxlKXtsZXQgaT1lLnN1YkNvbnRleHRDb3VudCxyPWUsbz10Lm9wdGlvbnM7aWYobyYmKG8ucGFyYW1zfHxvLmRlbGF5KSYmKHI9ZS5jcmVhdGVTdWJDb250ZXh0KG8pLHIudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCksbnVsbCE9by5kZWxheSkpezY9PXIucHJldmlvdXNOb2RlLnR5cGUmJihyLmN1cnJlbnRUaW1lbGluZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSxyLnByZXZpb3VzTm9kZT1Odyk7bGV0IGE9Y2Qoby5kZWxheSk7ci5kZWxheU5leHRTdGVwKGEpfXQuc3RlcHMubGVuZ3RoJiYodC5zdGVwcy5mb3JFYWNoKGE9PnVzKHRoaXMsYSxyKSksci5jdXJyZW50VGltZWxpbmUuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksci5zdWJDb250ZXh0Q291bnQ+aSYmci50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoKSksZS5wcmV2aW91c05vZGU9dH12aXNpdEdyb3VwKHQsZSl7bGV0IGk9W10scj1lLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSxvPXQub3B0aW9ucyYmdC5vcHRpb25zLmRlbGF5P2NkKHQub3B0aW9ucy5kZWxheSk6MDt0LnN0ZXBzLmZvckVhY2goYT0+e2xldCBzPWUuY3JlYXRlU3ViQ29udGV4dCh0Lm9wdGlvbnMpO28mJnMuZGVsYXlOZXh0U3RlcChvKSx1cyh0aGlzLGEscykscj1NYXRoLm1heChyLHMuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKSxpLnB1c2gocy5jdXJyZW50VGltZWxpbmUpfSksaS5mb3JFYWNoKGE9PmUuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXMoYSkpLGUudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKHIpLGUucHJldmlvdXNOb2RlPXR9X3Zpc2l0VGltaW5nKHQsZSl7aWYodC5keW5hbWljKXtsZXQgaT10LnN0clZhbHVlO3JldHVybiBrdyhlLnBhcmFtcz96YihpLGUucGFyYW1zLGUuZXJyb3JzKTppLGUuZXJyb3JzKX1yZXR1cm57ZHVyYXRpb246dC5kdXJhdGlvbixkZWxheTp0LmRlbGF5LGVhc2luZzp0LmVhc2luZ319dmlzaXRBbmltYXRlKHQsZSl7bGV0IGk9ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9dGhpcy5fdmlzaXRUaW1pbmcodC50aW1pbmdzLGUpLHI9ZS5jdXJyZW50VGltZWxpbmU7aS5kZWxheSYmKGUuaW5jcmVtZW50VGltZShpLmRlbGF5KSxyLnNuYXBzaG90Q3VycmVudFN0eWxlcygpKTtsZXQgbz10LnN0eWxlOzU9PW8udHlwZT90aGlzLnZpc2l0S2V5ZnJhbWVzKG8sZSk6KGUuaW5jcmVtZW50VGltZShpLmR1cmF0aW9uKSx0aGlzLnZpc2l0U3R5bGUobyxlKSxyLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpKSxlLmN1cnJlbnRBbmltYXRlVGltaW5ncz1udWxsLGUucHJldmlvdXNOb2RlPXR9dmlzaXRTdHlsZSh0LGUpe2xldCBpPWUuY3VycmVudFRpbWVsaW5lLHI9ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M7IXImJmkuaGFzQ3VycmVudFN0eWxlUHJvcGVydGllcygpJiZpLmZvcndhcmRGcmFtZSgpO2xldCBvPXImJnIuZWFzaW5nfHx0LmVhc2luZzt0LmlzRW1wdHlTdGVwP2kuYXBwbHlFbXB0eVN0ZXAobyk6aS5zZXRTdHlsZXModC5zdHlsZXMsbyxlLmVycm9ycyxlLm9wdGlvbnMpLGUucHJldmlvdXNOb2RlPXR9dmlzaXRLZXlmcmFtZXModCxlKXtsZXQgaT1lLmN1cnJlbnRBbmltYXRlVGltaW5ncyxyPWUuY3VycmVudFRpbWVsaW5lLmR1cmF0aW9uLG89aS5kdXJhdGlvbixzPWUuY3JlYXRlU3ViQ29udGV4dCgpLmN1cnJlbnRUaW1lbGluZTtzLmVhc2luZz1pLmVhc2luZyx0LnN0eWxlcy5mb3JFYWNoKGw9PntzLmZvcndhcmRUaW1lKChsLm9mZnNldHx8MCkqbykscy5zZXRTdHlsZXMobC5zdHlsZXMsbC5lYXNpbmcsZS5lcnJvcnMsZS5vcHRpb25zKSxzLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpfSksZS5jdXJyZW50VGltZWxpbmUubWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyhzKSxlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShyK28pLGUucHJldmlvdXNOb2RlPXR9dmlzaXRRdWVyeSh0LGUpe2xldCBpPWUuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lLHI9dC5vcHRpb25zfHx7fSxvPXIuZGVsYXk/Y2Qoci5kZWxheSk6MDtvJiYoNj09PWUucHJldmlvdXNOb2RlLnR5cGV8fDA9PWkmJmUuY3VycmVudFRpbWVsaW5lLmhhc0N1cnJlbnRTdHlsZVByb3BlcnRpZXMoKSkmJihlLmN1cnJlbnRUaW1lbGluZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSxlLnByZXZpb3VzTm9kZT1Odyk7bGV0IGE9aSxzPWUuaW52b2tlUXVlcnkodC5zZWxlY3Rvcix0Lm9yaWdpbmFsU2VsZWN0b3IsdC5saW1pdCx0LmluY2x1ZGVTZWxmLCEhci5vcHRpb25hbCxlLmVycm9ycyk7ZS5jdXJyZW50UXVlcnlUb3RhbD1zLmxlbmd0aDtsZXQgbD1udWxsO3MuZm9yRWFjaCgoYyxkKT0+e2UuY3VycmVudFF1ZXJ5SW5kZXg9ZDtsZXQgdT1lLmNyZWF0ZVN1YkNvbnRleHQodC5vcHRpb25zLGMpO28mJnUuZGVsYXlOZXh0U3RlcChvKSxjPT09ZS5lbGVtZW50JiYobD11LmN1cnJlbnRUaW1lbGluZSksdXModGhpcyx0LmFuaW1hdGlvbix1KSx1LmN1cnJlbnRUaW1lbGluZS5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSxhPU1hdGgubWF4KGEsdS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUpfSksZS5jdXJyZW50UXVlcnlJbmRleD0wLGUuY3VycmVudFF1ZXJ5VG90YWw9MCxlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShhKSxsJiYoZS5jdXJyZW50VGltZWxpbmUubWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyhsKSxlLmN1cnJlbnRUaW1lbGluZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSksZS5wcmV2aW91c05vZGU9dH12aXNpdFN0YWdnZXIodCxlKXtsZXQgaT1lLnBhcmVudENvbnRleHQscj1lLmN1cnJlbnRUaW1lbGluZSxvPXQudGltaW5ncyxhPU1hdGguYWJzKG8uZHVyYXRpb24pLHM9YSooZS5jdXJyZW50UXVlcnlUb3RhbC0xKSxsPWEqZS5jdXJyZW50UXVlcnlJbmRleDtzd2l0Y2goby5kdXJhdGlvbjwwPyJyZXZlcnNlIjpvLmVhc2luZyl7Y2FzZSJyZXZlcnNlIjpsPXMtbDticmVhaztjYXNlImZ1bGwiOmw9aS5jdXJyZW50U3RhZ2dlclRpbWV9bGV0IGQ9ZS5jdXJyZW50VGltZWxpbmU7bCYmZC5kZWxheU5leHRTdGVwKGwpO2xldCB1PWQuY3VycmVudFRpbWU7dXModGhpcyx0LmFuaW1hdGlvbixlKSxlLnByZXZpb3VzTm9kZT10LGkuY3VycmVudFN0YWdnZXJUaW1lPXIuY3VycmVudFRpbWUtdSsoci5zdGFydFRpbWUtaS5jdXJyZW50VGltZWxpbmUuc3RhcnRUaW1lKX19LE53PXt9LGpiPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxhLHMsbCl7dGhpcy5fZHJpdmVyPXQsdGhpcy5lbGVtZW50PWUsdGhpcy5zdWJJbnN0cnVjdGlvbnM9aSx0aGlzLl9lbnRlckNsYXNzTmFtZT1yLHRoaXMuX2xlYXZlQ2xhc3NOYW1lPW8sdGhpcy5lcnJvcnM9YSx0aGlzLnRpbWVsaW5lcz1zLHRoaXMucGFyZW50Q29udGV4dD1udWxsLHRoaXMuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwsdGhpcy5wcmV2aW91c05vZGU9TncsdGhpcy5zdWJDb250ZXh0Q291bnQ9MCx0aGlzLm9wdGlvbnM9e30sdGhpcy5jdXJyZW50UXVlcnlJbmRleD0wLHRoaXMuY3VycmVudFF1ZXJ5VG90YWw9MCx0aGlzLmN1cnJlbnRTdGFnZ2VyVGltZT0wLHRoaXMuY3VycmVudFRpbWVsaW5lPWx8fG5ldyBUZih0aGlzLl9kcml2ZXIsZSwwKSxzLnB1c2godGhpcy5jdXJyZW50VGltZWxpbmUpfWdldCBwYXJhbXMoKXtyZXR1cm4gdGhpcy5vcHRpb25zLnBhcmFtc311cGRhdGVPcHRpb25zKHQsZSl7aWYoIXQpcmV0dXJuO2xldCBpPXQscj10aGlzLm9wdGlvbnM7bnVsbCE9aS5kdXJhdGlvbiYmKHIuZHVyYXRpb249Y2QoaS5kdXJhdGlvbikpLG51bGwhPWkuZGVsYXkmJihyLmRlbGF5PWNkKGkuZGVsYXkpKTtsZXQgbz1pLnBhcmFtcztpZihvKXtsZXQgYT1yLnBhcmFtczthfHwoYT10aGlzLm9wdGlvbnMucGFyYW1zPXt9KSxPYmplY3Qua2V5cyhvKS5mb3JFYWNoKHM9PnsoIWV8fCFhLmhhc093blByb3BlcnR5KHMpKSYmKGFbc109emIob1tzXSxhLHRoaXMuZXJyb3JzKSl9KX19X2NvcHlPcHRpb25zKCl7bGV0IHQ9e307aWYodGhpcy5vcHRpb25zKXtsZXQgZT10aGlzLm9wdGlvbnMucGFyYW1zO2lmKGUpe2xldCBpPXQucGFyYW1zPXt9O09iamVjdC5rZXlzKGUpLmZvckVhY2gocj0+e2lbcl09ZVtyXX0pfX1yZXR1cm4gdH1jcmVhdGVTdWJDb250ZXh0KHQ9bnVsbCxlLGkpe2xldCByPWV8fHRoaXMuZWxlbWVudCxvPW5ldyBqYih0aGlzLl9kcml2ZXIscix0aGlzLnN1Ykluc3RydWN0aW9ucyx0aGlzLl9lbnRlckNsYXNzTmFtZSx0aGlzLl9sZWF2ZUNsYXNzTmFtZSx0aGlzLmVycm9ycyx0aGlzLnRpbWVsaW5lcyx0aGlzLmN1cnJlbnRUaW1lbGluZS5mb3JrKHIsaXx8MCkpO3JldHVybiBvLnByZXZpb3VzTm9kZT10aGlzLnByZXZpb3VzTm9kZSxvLmN1cnJlbnRBbmltYXRlVGltaW5ncz10aGlzLmN1cnJlbnRBbmltYXRlVGltaW5ncyxvLm9wdGlvbnM9dGhpcy5fY29weU9wdGlvbnMoKSxvLnVwZGF0ZU9wdGlvbnModCksby5jdXJyZW50UXVlcnlJbmRleD10aGlzLmN1cnJlbnRRdWVyeUluZGV4LG8uY3VycmVudFF1ZXJ5VG90YWw9dGhpcy5jdXJyZW50UXVlcnlUb3RhbCxvLnBhcmVudENvbnRleHQ9dGhpcyx0aGlzLnN1YkNvbnRleHRDb3VudCsrLG99dHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKHQpe3JldHVybiB0aGlzLnByZXZpb3VzTm9kZT1Odyx0aGlzLmN1cnJlbnRUaW1lbGluZT10aGlzLmN1cnJlbnRUaW1lbGluZS5mb3JrKHRoaXMuZWxlbWVudCx0KSx0aGlzLnRpbWVsaW5lcy5wdXNoKHRoaXMuY3VycmVudFRpbWVsaW5lKSx0aGlzLmN1cnJlbnRUaW1lbGluZX1hcHBlbmRJbnN0cnVjdGlvblRvVGltZWxpbmUodCxlLGkpe2xldCByPXtkdXJhdGlvbjplPz90LmR1cmF0aW9uLGRlbGF5OnRoaXMuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKyhpPz8wKSt0LmRlbGF5LGVhc2luZzoiIn0sbz1uZXcgd08odGhpcy5fZHJpdmVyLHQuZWxlbWVudCx0LmtleWZyYW1lcyx0LnByZVN0eWxlUHJvcHMsdC5wb3N0U3R5bGVQcm9wcyxyLHQuc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWUpO3JldHVybiB0aGlzLnRpbWVsaW5lcy5wdXNoKG8pLHJ9aW5jcmVtZW50VGltZSh0KXt0aGlzLmN1cnJlbnRUaW1lbGluZS5mb3J3YXJkVGltZSh0aGlzLmN1cnJlbnRUaW1lbGluZS5kdXJhdGlvbit0KX1kZWxheU5leHRTdGVwKHQpe3Q+MCYmdGhpcy5jdXJyZW50VGltZWxpbmUuZGVsYXlOZXh0U3RlcCh0KX1pbnZva2VRdWVyeSh0LGUsaSxyLG8sYSl7bGV0IHM9W107aWYociYmcy5wdXNoKHRoaXMuZWxlbWVudCksdC5sZW5ndGg+MCl7dD0odD10LnJlcGxhY2UoUWhlLCIuIit0aGlzLl9lbnRlckNsYXNzTmFtZSkpLnJlcGxhY2UoS2hlLCIuIit0aGlzLl9sZWF2ZUNsYXNzTmFtZSk7bGV0IGM9dGhpcy5fZHJpdmVyLnF1ZXJ5KHRoaXMuZWxlbWVudCx0LDEhPWkpOzAhPT1pJiYoYz1pPDA/Yy5zbGljZShjLmxlbmd0aCtpLGMubGVuZ3RoKTpjLnNsaWNlKDAsaSkpLHMucHVzaCguLi5jKX1yZXR1cm4hbyYmMD09cy5sZW5ndGgmJmEucHVzaChuZXcgeHQoMzAxNCwhMSkpLHN9fSxUZj1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLl9kcml2ZXI9dCx0aGlzLmVsZW1lbnQ9ZSx0aGlzLnN0YXJ0VGltZT1pLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cD1yLHRoaXMuZHVyYXRpb249MCx0aGlzLmVhc2luZz1udWxsLHRoaXMuX3ByZXZpb3VzS2V5ZnJhbWU9bmV3IE1hcCx0aGlzLl9jdXJyZW50S2V5ZnJhbWU9bmV3IE1hcCx0aGlzLl9rZXlmcmFtZXM9bmV3IE1hcCx0aGlzLl9zdHlsZVN1bW1hcnk9bmV3IE1hcCx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzPW5ldyBNYXAsdGhpcy5fcGVuZGluZ1N0eWxlcz1uZXcgTWFwLHRoaXMuX2JhY2tGaWxsPW5ldyBNYXAsdGhpcy5fY3VycmVudEVtcHR5U3RlcEtleWZyYW1lPW51bGwsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwfHwodGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwPW5ldyBNYXApLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzPXRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cC5nZXQoZSksdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXN8fCh0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcz10aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cC5zZXQoZSx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzKSksdGhpcy5fbG9hZEtleWZyYW1lKCl9Y29udGFpbnNBbmltYXRpb24oKXtzd2l0Y2godGhpcy5fa2V5ZnJhbWVzLnNpemUpe2Nhc2UgMDpyZXR1cm4hMTtjYXNlIDE6cmV0dXJuIHRoaXMuaGFzQ3VycmVudFN0eWxlUHJvcGVydGllcygpO2RlZmF1bHQ6cmV0dXJuITB9fWhhc0N1cnJlbnRTdHlsZVByb3BlcnRpZXMoKXtyZXR1cm4gdGhpcy5fY3VycmVudEtleWZyYW1lLnNpemU+MH1nZXQgY3VycmVudFRpbWUoKXtyZXR1cm4gdGhpcy5zdGFydFRpbWUrdGhpcy5kdXJhdGlvbn1kZWxheU5leHRTdGVwKHQpe2xldCBlPTE9PT10aGlzLl9rZXlmcmFtZXMuc2l6ZSYmdGhpcy5fcGVuZGluZ1N0eWxlcy5zaXplO3RoaXMuZHVyYXRpb258fGU/KHRoaXMuZm9yd2FyZFRpbWUodGhpcy5jdXJyZW50VGltZSt0KSxlJiZ0aGlzLnNuYXBzaG90Q3VycmVudFN0eWxlcygpKTp0aGlzLnN0YXJ0VGltZSs9dH1mb3JrKHQsZSl7cmV0dXJuIHRoaXMuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksbmV3IFRmKHRoaXMuX2RyaXZlcix0LGV8fHRoaXMuY3VycmVudFRpbWUsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwKX1fbG9hZEtleWZyYW1lKCl7dGhpcy5fY3VycmVudEtleWZyYW1lJiYodGhpcy5fcHJldmlvdXNLZXlmcmFtZT10aGlzLl9jdXJyZW50S2V5ZnJhbWUpLHRoaXMuX2N1cnJlbnRLZXlmcmFtZT10aGlzLl9rZXlmcmFtZXMuZ2V0KHRoaXMuZHVyYXRpb24pLHRoaXMuX2N1cnJlbnRLZXlmcmFtZXx8KHRoaXMuX2N1cnJlbnRLZXlmcmFtZT1uZXcgTWFwLHRoaXMuX2tleWZyYW1lcy5zZXQodGhpcy5kdXJhdGlvbix0aGlzLl9jdXJyZW50S2V5ZnJhbWUpKX1mb3J3YXJkRnJhbWUoKXt0aGlzLmR1cmF0aW9uKz0xLHRoaXMuX2xvYWRLZXlmcmFtZSgpfWZvcndhcmRUaW1lKHQpe3RoaXMuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksdGhpcy5kdXJhdGlvbj10LHRoaXMuX2xvYWRLZXlmcmFtZSgpfV91cGRhdGVTdHlsZSh0LGUpe3RoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMuc2V0KHQsZSksdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXMuc2V0KHQsZSksdGhpcy5fc3R5bGVTdW1tYXJ5LnNldCh0LHt0aW1lOnRoaXMuY3VycmVudFRpbWUsdmFsdWU6ZX0pfWFsbG93T25seVRpbWVsaW5lU3R5bGVzKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZSE9PXRoaXMuX2N1cnJlbnRLZXlmcmFtZX1hcHBseUVtcHR5U3RlcCh0KXt0JiZ0aGlzLl9wcmV2aW91c0tleWZyYW1lLnNldCgiZWFzaW5nIix0KTtmb3IobGV0W2UsaV1vZiB0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcyl0aGlzLl9iYWNrRmlsbC5zZXQoZSxpfHxfYyksdGhpcy5fY3VycmVudEtleWZyYW1lLnNldChlLF9jKTt0aGlzLl9jdXJyZW50RW1wdHlTdGVwS2V5ZnJhbWU9dGhpcy5fY3VycmVudEtleWZyYW1lfXNldFN0eWxlcyh0LGUsaSxyKXtlJiZ0aGlzLl9wcmV2aW91c0tleWZyYW1lLnNldCgiZWFzaW5nIixlKTtsZXQgbz1yJiZyLnBhcmFtc3x8e30sYT1mdW5jdGlvbihuLHQpe2xldCBpLGU9bmV3IE1hcDtyZXR1cm4gbi5mb3JFYWNoKHI9PntpZigiKiI9PT1yKXtpPWl8fHQua2V5cygpO2ZvcihsZXQgbyBvZiBpKWUuc2V0KG8sX2MpfWVsc2UgRWYocixlKX0pLGV9KHQsdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXMpO2ZvcihsZXRbcyxsXW9mIGEpe2xldCBjPXpiKGwsbyxpKTt0aGlzLl9wZW5kaW5nU3R5bGVzLnNldChzLGMpLHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMuaGFzKHMpfHx0aGlzLl9iYWNrRmlsbC5zZXQocyx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcy5nZXQocyk/P19jKSx0aGlzLl91cGRhdGVTdHlsZShzLGMpfX1hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKXswIT10aGlzLl9wZW5kaW5nU3R5bGVzLnNpemUmJih0aGlzLl9wZW5kaW5nU3R5bGVzLmZvckVhY2goKHQsZSk9Pnt0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2V0KGUsdCl9KSx0aGlzLl9wZW5kaW5nU3R5bGVzLmNsZWFyKCksdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcy5mb3JFYWNoKCh0LGUpPT57dGhpcy5fY3VycmVudEtleWZyYW1lLmhhcyhlKXx8dGhpcy5fY3VycmVudEtleWZyYW1lLnNldChlLHQpfSkpfXNuYXBzaG90Q3VycmVudFN0eWxlcygpe2ZvcihsZXRbdCxlXW9mIHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMpdGhpcy5fcGVuZGluZ1N0eWxlcy5zZXQodCxlKSx0aGlzLl91cGRhdGVTdHlsZSh0LGUpfWdldEZpbmFsS2V5ZnJhbWUoKXtyZXR1cm4gdGhpcy5fa2V5ZnJhbWVzLmdldCh0aGlzLmR1cmF0aW9uKX1nZXQgcHJvcGVydGllcygpe2xldCB0PVtdO2ZvcihsZXQgZSBpbiB0aGlzLl9jdXJyZW50S2V5ZnJhbWUpdC5wdXNoKGUpO3JldHVybiB0fW1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXModCl7dC5fc3R5bGVTdW1tYXJ5LmZvckVhY2goKGUsaSk9PntsZXQgcj10aGlzLl9zdHlsZVN1bW1hcnkuZ2V0KGkpOyghcnx8ZS50aW1lPnIudGltZSkmJnRoaXMuX3VwZGF0ZVN0eWxlKGksZS52YWx1ZSl9KX1idWlsZEtleWZyYW1lcygpe3RoaXMuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCk7bGV0IHQ9bmV3IFNldCxlPW5ldyBTZXQsaT0xPT09dGhpcy5fa2V5ZnJhbWVzLnNpemUmJjA9PT10aGlzLmR1cmF0aW9uLHI9W107dGhpcy5fa2V5ZnJhbWVzLmZvckVhY2goKHMsbCk9PntsZXQgYz1FZihzLG5ldyBNYXAsdGhpcy5fYmFja0ZpbGwpO2MuZm9yRWFjaCgoZCx1KT0+e2Q9PT1Udz90LmFkZCh1KTpkPT09X2MmJmUuYWRkKHUpfSksaXx8Yy5zZXQoIm9mZnNldCIsbC90aGlzLmR1cmF0aW9uKSxyLnB1c2goYyl9KTtsZXQgbz10LnNpemU/T3codC52YWx1ZXMoKSk6W10sYT1lLnNpemU/T3coZS52YWx1ZXMoKSk6W107aWYoaSl7bGV0IHM9clswXSxsPW5ldyBNYXAocyk7cy5zZXQoIm9mZnNldCIsMCksbC5zZXQoIm9mZnNldCIsMSkscj1bcyxsXX1yZXR1cm4gTk8odGhpcy5lbGVtZW50LHIsbyxhLHRoaXMuZHVyYXRpb24sdGhpcy5zdGFydFRpbWUsdGhpcy5lYXNpbmcsITEpfX0sd089Y2xhc3MgZXh0ZW5kcyBUZntjb25zdHJ1Y3Rvcih0LGUsaSxyLG8sYSxzPSExKXtzdXBlcih0LGUsYS5kZWxheSksdGhpcy5rZXlmcmFtZXM9aSx0aGlzLnByZVN0eWxlUHJvcHM9cix0aGlzLnBvc3RTdHlsZVByb3BzPW8sdGhpcy5fc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWU9cyx0aGlzLnRpbWluZ3M9e2R1cmF0aW9uOmEuZHVyYXRpb24sZGVsYXk6YS5kZWxheSxlYXNpbmc6YS5lYXNpbmd9fWNvbnRhaW5zQW5pbWF0aW9uKCl7cmV0dXJuIHRoaXMua2V5ZnJhbWVzLmxlbmd0aD4xfWJ1aWxkS2V5ZnJhbWVzKCl7bGV0IHQ9dGhpcy5rZXlmcmFtZXMse2RlbGF5OmUsZHVyYXRpb246aSxlYXNpbmc6cn09dGhpcy50aW1pbmdzO2lmKHRoaXMuX3N0cmV0Y2hTdGFydGluZ0tleWZyYW1lJiZlKXtsZXQgbz1bXSxhPWkrZSxzPWUvYSxsPUVmKHRbMF0pO2wuc2V0KCJvZmZzZXQiLDApLG8ucHVzaChsKTtsZXQgYz1FZih0WzBdKTtjLnNldCgib2Zmc2V0Iix5RyhzKSksby5wdXNoKGMpO2xldCBkPXQubGVuZ3RoLTE7Zm9yKGxldCB1PTE7dTw9ZDt1Kyspe2xldCBwPUVmKHRbdV0pLGg9cC5nZXQoIm9mZnNldCIpO3Auc2V0KCJvZmZzZXQiLHlHKChlK2gqaSkvYSkpLG8ucHVzaChwKX1pPWEsZT0wLHI9IiIsdD1vfXJldHVybiBOTyh0aGlzLmVsZW1lbnQsdCx0aGlzLnByZVN0eWxlUHJvcHMsdGhpcy5wb3N0U3R5bGVQcm9wcyxpLGUsciwhMCl9fTtmdW5jdGlvbiB5RyhuLHQ9Myl7bGV0IGU9TWF0aC5wb3coMTAsdC0xKTtyZXR1cm4gTWF0aC5yb3VuZChuKmUpL2V9dmFyIGxoPWNsYXNze30sJGhlPW5ldyBTZXQoWyJ3aWR0aCIsImhlaWdodCIsIm1pbldpZHRoIiwibWluSGVpZ2h0IiwibWF4V2lkdGgiLCJtYXhIZWlnaHQiLCJsZWZ0IiwidG9wIiwiYm90dG9tIiwicmlnaHQiLCJmb250U2l6ZSIsIm91dGxpbmVXaWR0aCIsIm91dGxpbmVPZmZzZXQiLCJwYWRkaW5nVG9wIiwicGFkZGluZ0xlZnQiLCJwYWRkaW5nQm90dG9tIiwicGFkZGluZ1JpZ2h0IiwibWFyZ2luVG9wIiwibWFyZ2luTGVmdCIsIm1hcmdpbkJvdHRvbSIsIm1hcmdpblJpZ2h0IiwiYm9yZGVyUmFkaXVzIiwiYm9yZGVyV2lkdGgiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlckxlZnRXaWR0aCIsImJvcmRlclJpZ2h0V2lkdGgiLCJib3JkZXJCb3R0b21XaWR0aCIsInRleHRJbmRlbnQiLCJwZXJzcGVjdGl2ZSJdKSxMdz1jbGFzcyBleHRlbmRzIGxoe25vcm1hbGl6ZVByb3BlcnR5TmFtZSh0LGUpe3JldHVybiBGTyh0KX1ub3JtYWxpemVTdHlsZVZhbHVlKHQsZSxpLHIpe2xldCBvPSIiLGE9aS50b1N0cmluZygpLnRyaW0oKTtpZigkaGUuaGFzKGUpJiYwIT09aSYmIjAiIT09aSlpZigibnVtYmVyIj09dHlwZW9mIGkpbz0icHgiO2Vsc2V7bGV0IHM9aS5tYXRjaCgvXlsrLV0/W1xkXC5dKyhbYS16XSopJC8pO3MmJjA9PXNbMV0ubGVuZ3RoJiZyLnB1c2gobmV3IHh0KDMwMDUsITEpKX1yZXR1cm4gYStvfX07ZnVuY3Rpb24geEcobix0LGUsaSxyLG8sYSxzLGwsYyxkLHUscCl7cmV0dXJue3R5cGU6MCxlbGVtZW50Om4sdHJpZ2dlck5hbWU6dCxpc1JlbW92YWxUcmFuc2l0aW9uOnIsZnJvbVN0YXRlOmUsZnJvbVN0eWxlczpvLHRvU3RhdGU6aSx0b1N0eWxlczphLHRpbWVsaW5lczpzLHF1ZXJpZWRFbGVtZW50czpsLHByZVN0eWxlUHJvcHM6Yyxwb3N0U3R5bGVQcm9wczpkLHRvdGFsVGltZTp1LGVycm9yczpwfX12YXIgcE89e30sQnc9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMuX3RyaWdnZXJOYW1lPXQsdGhpcy5hc3Q9ZSx0aGlzLl9zdGF0ZVN0eWxlcz1pfW1hdGNoKHQsZSxpLHIpe3JldHVybiBmdW5jdGlvbihuLHQsZSxpLHIpe3JldHVybiBuLnNvbWUobz0+byh0LGUsaSxyKSl9KHRoaXMuYXN0Lm1hdGNoZXJzLHQsZSxpLHIpfWJ1aWxkU3R5bGVzKHQsZSxpKXtsZXQgcj10aGlzLl9zdGF0ZVN0eWxlcy5nZXQoIioiKTtyZXR1cm4gdm9pZCAwIT09dCYmKHI9dGhpcy5fc3RhdGVTdHlsZXMuZ2V0KHQ/LnRvU3RyaW5nKCkpfHxyKSxyP3IuYnVpbGRTdHlsZXMoZSxpKTpuZXcgTWFwfWJ1aWxkKHQsZSxpLHIsbyxhLHMsbCxjLGQpe2xldCB1PVtdLHA9dGhpcy5hc3Qub3B0aW9ucyYmdGhpcy5hc3Qub3B0aW9ucy5wYXJhbXN8fHBPLG09dGhpcy5idWlsZFN0eWxlcyhpLHMmJnMucGFyYW1zfHxwTyx1KSxfPWwmJmwucGFyYW1zfHxwTyxNPXRoaXMuYnVpbGRTdHlsZXMocixfLHUpLHk9bmV3IFNldCx4PW5ldyBNYXAsUj1uZXcgTWFwLEk9InZvaWQiPT09cixCPXtwYXJhbXM6dG1lKF8scCksZGVsYXk6dGhpcy5hc3Qub3B0aW9ucz8uZGVsYXl9LGVlPWQ/W106akcodCxlLHRoaXMuYXN0LmFuaW1hdGlvbixvLGEsbSxNLEIsYyx1KSxRPTA7aWYoZWUuZm9yRWFjaChRZT0+e1E9TWF0aC5tYXgoUWUuZHVyYXRpb24rUWUuZGVsYXksUSl9KSx1Lmxlbmd0aClyZXR1cm4geEcoZSx0aGlzLl90cmlnZ2VyTmFtZSxpLHIsSSxtLE0sW10sW10seCxSLFEsdSk7ZWUuZm9yRWFjaChRZT0+e2xldCBBZT1RZS5lbGVtZW50LEQ9cHMoeCxBZSxuZXcgU2V0KTtRZS5wcmVTdHlsZVByb3BzLmZvckVhY2goY2U9PkQuYWRkKGNlKSk7bGV0IHJlPXBzKFIsQWUsbmV3IFNldCk7UWUucG9zdFN0eWxlUHJvcHMuZm9yRWFjaChjZT0+cmUuYWRkKGNlKSksQWUhPT1lJiZ5LmFkZChBZSl9KTtsZXQgd2U9T3coeS52YWx1ZXMoKSk7cmV0dXJuIHhHKGUsdGhpcy5fdHJpZ2dlck5hbWUsaSxyLEksbSxNLGVlLHdlLHgsUixRKX19O2Z1bmN0aW9uIHRtZShuLHQpe2xldCBlPVhiKHQpO2ZvcihsZXQgaSBpbiBuKW4uaGFzT3duUHJvcGVydHkoaSkmJm51bGwhPW5baV0mJihlW2ldPW5baV0pO3JldHVybiBlfWZ1bmN0aW9uIENHKG4sdCxlKXtuLmhhcyh0KT9uLmhhcyhlKXx8bi5zZXQoZSxuLmdldCh0KSk6bi5oYXMoZSkmJm4uc2V0KHQsbi5nZXQoZSkpfXZhciBybWU9bmV3IFViLE1HPSJuZy1hbmltYXRlLXF1ZXVlZCIsaE89Im5nLWFuaW1hdGUtZGlzYWJsZWQiLGNtZT1bXSxHRz17bmFtZXNwYWNlSWQ6IiIsc2V0Rm9yUmVtb3ZhbDohMSxzZXRGb3JNb3ZlOiExLGhhc0FuaW1hdGlvbjohMSxyZW1vdmVkQmVmb3JlUXVlcmllZDohMX0sZG1lPXtuYW1lc3BhY2VJZDoiIixzZXRGb3JNb3ZlOiExLHNldEZvclJlbW92YWw6ITEsaGFzQW5pbWF0aW9uOiExLHJlbW92ZWRCZWZvcmVRdWVyaWVkOiEwfSxqcz0iX19uZ19yZW1vdmVkIixHYj1jbGFzc3tnZXQgcGFyYW1zKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5wYXJhbXN9Y29uc3RydWN0b3IodCxlPSIiKXt0aGlzLm5hbWVzcGFjZUlkPWU7bGV0IGk9dCYmdC5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKTtpZih0aGlzLnZhbHVlPShpP3QudmFsdWU6dCk/P251bGwsaSl7bGV0IG89WGIodCk7ZGVsZXRlIG8udmFsdWUsdGhpcy5vcHRpb25zPW99ZWxzZSB0aGlzLm9wdGlvbnM9e307dGhpcy5vcHRpb25zLnBhcmFtc3x8KHRoaXMub3B0aW9ucy5wYXJhbXM9e30pfWFic29yYk9wdGlvbnModCl7bGV0IGU9dC5wYXJhbXM7aWYoZSl7bGV0IGk9dGhpcy5vcHRpb25zLnBhcmFtcztPYmplY3Qua2V5cyhlKS5mb3JFYWNoKHI9PntudWxsPT1pW3JdJiYoaVtyXT1lW3JdKX0pfX19LEhiPSJ2b2lkIixtTz1uZXcgR2IoSGIpLFdiPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLm5hbWVzcGFjZUlkPXQsdGhpcy50cmlnZ2VyTmFtZT1lLHRoaXMuZWxlbWVudD1pLHRoaXMuX3BsYXllcj1uZXcgcHUsdGhpcy5fY29udGFpbnNSZWFsUGxheWVyPSExLHRoaXMuX3F1ZXVlZENhbGxiYWNrcz1uZXcgTWFwLHRoaXMuZGVzdHJveWVkPSExLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy5tYXJrZWRGb3JEZXN0cm95PSExLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy5xdWV1ZWQ9ITAsdGhpcy50b3RhbFRpbWU9MH1zZXRSZWFsUGxheWVyKHQpe3RoaXMuX2NvbnRhaW5zUmVhbFBsYXllcnx8KHRoaXMuX3BsYXllcj10LHRoaXMuX3F1ZXVlZENhbGxiYWNrcy5mb3JFYWNoKChlLGkpPT57ZS5mb3JFYWNoKHI9PlJPKHQsaSx2b2lkIDAscikpfSksdGhpcy5fcXVldWVkQ2FsbGJhY2tzLmNsZWFyKCksdGhpcy5fY29udGFpbnNSZWFsUGxheWVyPSEwLHRoaXMub3ZlcnJpZGVUb3RhbFRpbWUodC50b3RhbFRpbWUpLHRoaXMucXVldWVkPSExKX1nZXRSZWFsUGxheWVyKCl7cmV0dXJuIHRoaXMuX3BsYXllcn1vdmVycmlkZVRvdGFsVGltZSh0KXt0aGlzLnRvdGFsVGltZT10fXN5bmNQbGF5ZXJFdmVudHModCl7bGV0IGU9dGhpcy5fcGxheWVyO2UudHJpZ2dlckNhbGxiYWNrJiZ0Lm9uU3RhcnQoKCk9PmUudHJpZ2dlckNhbGxiYWNrKCJzdGFydCIpKSx0Lm9uRG9uZSgoKT0+dGhpcy5maW5pc2goKSksdC5vbkRlc3Ryb3koKCk9PnRoaXMuZGVzdHJveSgpKX1fcXVldWVFdmVudCh0LGUpe3BzKHRoaXMuX3F1ZXVlZENhbGxiYWNrcyx0LFtdKS5wdXNoKGUpfW9uRG9uZSh0KXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVldWVFdmVudCgiZG9uZSIsdCksdGhpcy5fcGxheWVyLm9uRG9uZSh0KX1vblN0YXJ0KHQpe3RoaXMucXVldWVkJiZ0aGlzLl9xdWV1ZUV2ZW50KCJzdGFydCIsdCksdGhpcy5fcGxheWVyLm9uU3RhcnQodCl9b25EZXN0cm95KHQpe3RoaXMucXVldWVkJiZ0aGlzLl9xdWV1ZUV2ZW50KCJkZXN0cm95Iix0KSx0aGlzLl9wbGF5ZXIub25EZXN0cm95KHQpfWluaXQoKXt0aGlzLl9wbGF5ZXIuaW5pdCgpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4hdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5oYXNTdGFydGVkKCl9cGxheSgpeyF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLnBsYXkoKX1wYXVzZSgpeyF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLnBhdXNlKCl9cmVzdGFydCgpeyF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLnJlc3RhcnQoKX1maW5pc2goKXt0aGlzLl9wbGF5ZXIuZmluaXNoKCl9ZGVzdHJveSgpe3RoaXMuZGVzdHJveWVkPSEwLHRoaXMuX3BsYXllci5kZXN0cm95KCl9cmVzZXQoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5yZXNldCgpfXNldFBvc2l0aW9uKHQpe3RoaXMucXVldWVkfHx0aGlzLl9wbGF5ZXIuc2V0UG9zaXRpb24odCl9Z2V0UG9zaXRpb24oKXtyZXR1cm4gdGhpcy5xdWV1ZWQ/MDp0aGlzLl9wbGF5ZXIuZ2V0UG9zaXRpb24oKX10cmlnZ2VyQ2FsbGJhY2sodCl7bGV0IGU9dGhpcy5fcGxheWVyO2UudHJpZ2dlckNhbGxiYWNrJiZlLnRyaWdnZXJDYWxsYmFjayh0KX19O2Z1bmN0aW9uIFJ3KG4pe3JldHVybiBuJiYxPT09bi5ub2RlVHlwZX1mdW5jdGlvbiB3RyhuLHQpe2xldCBlPW4uc3R5bGUuZGlzcGxheTtyZXR1cm4gbi5zdHlsZS5kaXNwbGF5PXQ/PyJub25lIixlfWZ1bmN0aW9uIFNHKG4sdCxlLGkscil7bGV0IG89W107ZS5mb3JFYWNoKGw9Pm8ucHVzaCh3RyhsKSkpO2xldCBhPVtdO2kuZm9yRWFjaCgobCxjKT0+e2xldCBkPW5ldyBNYXA7bC5mb3JFYWNoKHU9PntsZXQgcD10LmNvbXB1dGVTdHlsZShjLHUscik7ZC5zZXQodSxwKSwoIXB8fDA9PXAubGVuZ3RoKSYmKGNbanNdPWRtZSxhLnB1c2goYykpfSksbi5zZXQoYyxkKX0pO2xldCBzPTA7cmV0dXJuIGUuZm9yRWFjaChsPT53RyhsLG9bcysrXSkpLGF9ZnVuY3Rpb24gRUcobix0KXtsZXQgZT1uZXcgTWFwO2lmKG4uZm9yRWFjaChzPT5lLnNldChzLFtdKSksMD09dC5sZW5ndGgpcmV0dXJuIGU7bGV0IGk9MSxyPW5ldyBTZXQodCksbz1uZXcgTWFwO2Z1bmN0aW9uIGEocyl7aWYoIXMpcmV0dXJuIGk7bGV0IGw9by5nZXQocyk7aWYobClyZXR1cm4gbDtsZXQgYz1zLnBhcmVudE5vZGU7cmV0dXJuIGw9ZS5oYXMoYyk/YzpyLmhhcyhjKT9pOmEoYyksby5zZXQocyxsKSxsfXJldHVybiB0LmZvckVhY2gocz0+e2xldCBsPWEocyk7bCE9PWkmJmUuZ2V0KGwpLnB1c2gocyl9KSxlfWZ1bmN0aW9uIEdzKG4sdCl7bi5jbGFzc0xpc3Q/LmFkZCh0KX1mdW5jdGlvbiBTZihuLHQpe24uY2xhc3NMaXN0Py5yZW1vdmUodCl9ZnVuY3Rpb24gbW1lKG4sdCxlKXtodShlKS5vbkRvbmUoKCk9Pm4ucHJvY2Vzc0xlYXZlTm9kZSh0KSl9ZnVuY3Rpb24gV0cobix0KXtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKyl7bGV0IGk9bltlXTtpIGluc3RhbmNlb2YgTmI/V0coaS5wbGF5ZXJzLHQpOnQucHVzaChpKX19ZnVuY3Rpb24gVEcobix0LGUpe2xldCBpPWUuZ2V0KG4pO2lmKCFpKXJldHVybiExO2xldCByPXQuZ2V0KG4pO3JldHVybiByP2kuZm9yRWFjaChvPT5yLmFkZChvKSk6dC5zZXQobixpKSxlLmRlbGV0ZShuKSwhMH12YXIgbXU9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMuYm9keU5vZGU9dCx0aGlzLl9kcml2ZXI9ZSx0aGlzLl9ub3JtYWxpemVyPWksdGhpcy5fdHJpZ2dlckNhY2hlPXt9LHRoaXMub25SZW1vdmFsQ29tcGxldGU9KHIsbyk9Pnt9LHRoaXMuX3RyYW5zaXRpb25FbmdpbmU9bmV3IGNsYXNze19vblJlbW92YWxDb21wbGV0ZSh0LGUpe3RoaXMub25SZW1vdmFsQ29tcGxldGUodCxlKX1jb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5ib2R5Tm9kZT10LHRoaXMuZHJpdmVyPWUsdGhpcy5fbm9ybWFsaXplcj1pLHRoaXMucGxheWVycz1bXSx0aGlzLm5ld0hvc3RFbGVtZW50cz1uZXcgTWFwLHRoaXMucGxheWVyc0J5RWxlbWVudD1uZXcgTWFwLHRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQ9bmV3IE1hcCx0aGlzLnN0YXRlc0J5RWxlbWVudD1uZXcgTWFwLHRoaXMuZGlzYWJsZWROb2Rlcz1uZXcgU2V0LHRoaXMudG90YWxBbmltYXRpb25zPTAsdGhpcy50b3RhbFF1ZXVlZFBsYXllcnM9MCx0aGlzLl9uYW1lc3BhY2VMb29rdXA9e30sdGhpcy5fbmFtZXNwYWNlTGlzdD1bXSx0aGlzLl9mbHVzaEZucz1bXSx0aGlzLl93aGVuUXVpZXRGbnM9W10sdGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudD1uZXcgTWFwLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cz1bXSx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHM9W10sdGhpcy5vblJlbW92YWxDb21wbGV0ZT0ocixvKT0+e319Z2V0IHF1ZXVlZFBsYXllcnMoKXtsZXQgdD1bXTtyZXR1cm4gdGhpcy5fbmFtZXNwYWNlTGlzdC5mb3JFYWNoKGU9PntlLnBsYXllcnMuZm9yRWFjaChpPT57aS5xdWV1ZWQmJnQucHVzaChpKX0pfSksdH1jcmVhdGVOYW1lc3BhY2UodCxlKXtsZXQgaT1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMuaWQ9dCx0aGlzLmhvc3RFbGVtZW50PWUsdGhpcy5fZW5naW5lPWksdGhpcy5wbGF5ZXJzPVtdLHRoaXMuX3RyaWdnZXJzPW5ldyBNYXAsdGhpcy5fcXVldWU9W10sdGhpcy5fZWxlbWVudExpc3RlbmVycz1uZXcgTWFwLHRoaXMuX2hvc3RDbGFzc05hbWU9Im5nLXRucy0iK3QsR3MoZSx0aGlzLl9ob3N0Q2xhc3NOYW1lKX1saXN0ZW4odCxlLGkscil7aWYoIXRoaXMuX3RyaWdnZXJzLmhhcyhlKSl0aHJvdyBuZXcgeHQoMzMwMiwhMSk7aWYobnVsbD09aXx8MD09aS5sZW5ndGgpdGhyb3cgbmV3IHh0KDMzMDMsITEpO2lmKCJzdGFydCIhPShuPWkpJiYiZG9uZSIhPW4pdGhyb3cgbmV3IHh0KDM0MDAsITEpO3ZhciBuO2xldCBvPXBzKHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMsdCxbXSksYT17bmFtZTplLHBoYXNlOmksY2FsbGJhY2s6cn07by5wdXNoKGEpO2xldCBzPXBzKHRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQsdCxuZXcgTWFwKTtyZXR1cm4gcy5oYXMoZSl8fChHcyh0LER3KSxHcyh0LER3KyItIitlKSxzLnNldChlLG1PKSksKCk9Pnt0aGlzLl9lbmdpbmUuYWZ0ZXJGbHVzaCgoKT0+e2xldCBsPW8uaW5kZXhPZihhKTtsPj0wJiZvLnNwbGljZShsLDEpLHRoaXMuX3RyaWdnZXJzLmhhcyhlKXx8cy5kZWxldGUoZSl9KX19cmVnaXN0ZXIodCxlKXtyZXR1cm4hdGhpcy5fdHJpZ2dlcnMuaGFzKHQpJiYodGhpcy5fdHJpZ2dlcnMuc2V0KHQsZSksITApfV9nZXRUcmlnZ2VyKHQpe2xldCBlPXRoaXMuX3RyaWdnZXJzLmdldCh0KTtpZighZSl0aHJvdyBuZXcgeHQoMzQwMSwhMSk7cmV0dXJuIGV9dHJpZ2dlcih0LGUsaSxyPSEwKXtsZXQgbz10aGlzLl9nZXRUcmlnZ2VyKGUpLGE9bmV3IFdiKHRoaXMuaWQsZSx0KSxzPXRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZ2V0KHQpO3N8fChHcyh0LER3KSxHcyh0LER3KyItIitlKSx0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LnNldCh0LHM9bmV3IE1hcCkpO2xldCBsPXMuZ2V0KGUpLGM9bmV3IEdiKGksdGhpcy5pZCk7aWYoIShpJiZpLmhhc093blByb3BlcnR5KCJ2YWx1ZSIpKSYmbCYmYy5hYnNvcmJPcHRpb25zKGwub3B0aW9ucykscy5zZXQoZSxjKSxsfHwobD1tTyksYy52YWx1ZSE9PUhiJiZsLnZhbHVlPT09Yy52YWx1ZSl7aWYoIWZ1bmN0aW9uKG4sdCl7bGV0IGU9T2JqZWN0LmtleXMobiksaT1PYmplY3Qua2V5cyh0KTtpZihlLmxlbmd0aCE9aS5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspe2xldCBvPWVbcl07aWYoIXQuaGFzT3duUHJvcGVydHkobyl8fG5bb10hPT10W29dKXJldHVybiExfXJldHVybiEwfShsLnBhcmFtcyxjLnBhcmFtcykpe2xldCBfPVtdLE09by5tYXRjaFN0eWxlcyhsLnZhbHVlLGwucGFyYW1zLF8pLHk9by5tYXRjaFN0eWxlcyhjLnZhbHVlLGMucGFyYW1zLF8pO18ubGVuZ3RoP3RoaXMuX2VuZ2luZS5yZXBvcnRFcnJvcihfKTp0aGlzLl9lbmdpbmUuYWZ0ZXJGbHVzaCgoKT0+e3NoKHQsTSksYmModCx5KX0pfXJldHVybn1sZXQgcD1wcyh0aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudCx0LFtdKTtwLmZvckVhY2goXz0+e18ubmFtZXNwYWNlSWQ9PXRoaXMuaWQmJl8udHJpZ2dlck5hbWU9PWUmJl8ucXVldWVkJiZfLmRlc3Ryb3koKX0pO2xldCBoPW8ubWF0Y2hUcmFuc2l0aW9uKGwudmFsdWUsYy52YWx1ZSx0LGMucGFyYW1zKSxtPSExO2lmKCFoKXtpZighcilyZXR1cm47aD1vLmZhbGxiYWNrVHJhbnNpdGlvbixtPSEwfXJldHVybiB0aGlzLl9lbmdpbmUudG90YWxRdWV1ZWRQbGF5ZXJzKyssdGhpcy5fcXVldWUucHVzaCh7ZWxlbWVudDp0LHRyaWdnZXJOYW1lOmUsdHJhbnNpdGlvbjpoLGZyb21TdGF0ZTpsLHRvU3RhdGU6YyxwbGF5ZXI6YSxpc0ZhbGxiYWNrVHJhbnNpdGlvbjptfSksbXx8KEdzKHQsTUcpLGEub25TdGFydCgoKT0+e1NmKHQsTUcpfSkpLGEub25Eb25lKCgpPT57bGV0IF89dGhpcy5wbGF5ZXJzLmluZGV4T2YoYSk7Xz49MCYmdGhpcy5wbGF5ZXJzLnNwbGljZShfLDEpO2xldCBNPXRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LmdldCh0KTtpZihNKXtsZXQgeT1NLmluZGV4T2YoYSk7eT49MCYmTS5zcGxpY2UoeSwxKX19KSx0aGlzLnBsYXllcnMucHVzaChhKSxwLnB1c2goYSksYX1kZXJlZ2lzdGVyKHQpe3RoaXMuX3RyaWdnZXJzLmRlbGV0ZSh0KSx0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmZvckVhY2goZT0+ZS5kZWxldGUodCkpLHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZm9yRWFjaCgoZSxpKT0+e3RoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuc2V0KGksZS5maWx0ZXIocj0+ci5uYW1lIT10KSl9KX1jbGVhckVsZW1lbnRDYWNoZSh0KXt0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmRlbGV0ZSh0KSx0aGlzLl9lbGVtZW50TGlzdGVuZXJzLmRlbGV0ZSh0KTtsZXQgZT10aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudC5nZXQodCk7ZSYmKGUuZm9yRWFjaChpPT5pLmRlc3Ryb3koKSksdGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQuZGVsZXRlKHQpKX1fc2lnbmFsUmVtb3ZhbEZvcklubmVyVHJpZ2dlcnModCxlKXtsZXQgaT10aGlzLl9lbmdpbmUuZHJpdmVyLnF1ZXJ5KHQsUHcsITApO2kuZm9yRWFjaChyPT57aWYocltqc10pcmV0dXJuO2xldCBvPXRoaXMuX2VuZ2luZS5mZXRjaE5hbWVzcGFjZXNCeUVsZW1lbnQocik7by5zaXplP28uZm9yRWFjaChhPT5hLnRyaWdnZXJMZWF2ZUFuaW1hdGlvbihyLGUsITEsITApKTp0aGlzLmNsZWFyRWxlbWVudENhY2hlKHIpfSksdGhpcy5fZW5naW5lLmFmdGVyRmx1c2hBbmltYXRpb25zRG9uZSgoKT0+aS5mb3JFYWNoKHI9PnRoaXMuY2xlYXJFbGVtZW50Q2FjaGUocikpKX10cmlnZ2VyTGVhdmVBbmltYXRpb24odCxlLGkscil7bGV0IG89dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5nZXQodCksYT1uZXcgTWFwO2lmKG8pe2xldCBzPVtdO2lmKG8uZm9yRWFjaCgobCxjKT0+e2lmKGEuc2V0KGMsbC52YWx1ZSksdGhpcy5fdHJpZ2dlcnMuaGFzKGMpKXtsZXQgZD10aGlzLnRyaWdnZXIodCxjLEhiLHIpO2QmJnMucHVzaChkKX19KSxzLmxlbmd0aClyZXR1cm4gdGhpcy5fZW5naW5lLm1hcmtFbGVtZW50QXNSZW1vdmVkKHRoaXMuaWQsdCwhMCxlLGEpLGkmJmh1KHMpLm9uRG9uZSgoKT0+dGhpcy5fZW5naW5lLnByb2Nlc3NMZWF2ZU5vZGUodCkpLCEwfXJldHVybiExfXByZXBhcmVMZWF2ZUFuaW1hdGlvbkxpc3RlbmVycyh0KXtsZXQgZT10aGlzLl9lbGVtZW50TGlzdGVuZXJzLmdldCh0KSxpPXRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZ2V0KHQpO2lmKGUmJmkpe2xldCByPW5ldyBTZXQ7ZS5mb3JFYWNoKG89PntsZXQgYT1vLm5hbWU7aWYoci5oYXMoYSkpcmV0dXJuO3IuYWRkKGEpO2xldCBsPXRoaXMuX3RyaWdnZXJzLmdldChhKS5mYWxsYmFja1RyYW5zaXRpb24sYz1pLmdldChhKXx8bU8sZD1uZXcgR2IoSGIpLHU9bmV3IFdiKHRoaXMuaWQsYSx0KTt0aGlzLl9lbmdpbmUudG90YWxRdWV1ZWRQbGF5ZXJzKyssdGhpcy5fcXVldWUucHVzaCh7ZWxlbWVudDp0LHRyaWdnZXJOYW1lOmEsdHJhbnNpdGlvbjpsLGZyb21TdGF0ZTpjLHRvU3RhdGU6ZCxwbGF5ZXI6dSxpc0ZhbGxiYWNrVHJhbnNpdGlvbjohMH0pfSl9fXJlbW92ZU5vZGUodCxlKXtsZXQgaT10aGlzLl9lbmdpbmU7aWYodC5jaGlsZEVsZW1lbnRDb3VudCYmdGhpcy5fc2lnbmFsUmVtb3ZhbEZvcklubmVyVHJpZ2dlcnModCxlKSx0aGlzLnRyaWdnZXJMZWF2ZUFuaW1hdGlvbih0LGUsITApKXJldHVybjtsZXQgcj0hMTtpZihpLnRvdGFsQW5pbWF0aW9ucyl7bGV0IG89aS5wbGF5ZXJzLmxlbmd0aD9pLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmdldCh0KTpbXTtpZihvJiZvLmxlbmd0aClyPSEwO2Vsc2V7bGV0IGE9dDtmb3IoO2E9YS5wYXJlbnROb2RlOylpZihpLnN0YXRlc0J5RWxlbWVudC5nZXQoYSkpe3I9ITA7YnJlYWt9fX1pZih0aGlzLnByZXBhcmVMZWF2ZUFuaW1hdGlvbkxpc3RlbmVycyh0KSxyKWkubWFya0VsZW1lbnRBc1JlbW92ZWQodGhpcy5pZCx0LCExLGUpO2Vsc2V7bGV0IG89dFtqc107KCFvfHxvPT09R0cpJiYoaS5hZnRlckZsdXNoKCgpPT50aGlzLmNsZWFyRWxlbWVudENhY2hlKHQpKSxpLmRlc3Ryb3lJbm5lckFuaW1hdGlvbnModCksaS5fb25SZW1vdmFsQ29tcGxldGUodCxlKSl9fWluc2VydE5vZGUodCxlKXtHcyh0LHRoaXMuX2hvc3RDbGFzc05hbWUpfWRyYWluUXVldWVkVHJhbnNpdGlvbnModCl7bGV0IGU9W107cmV0dXJuIHRoaXMuX3F1ZXVlLmZvckVhY2goaT0+e2xldCByPWkucGxheWVyO2lmKHIuZGVzdHJveWVkKXJldHVybjtsZXQgbz1pLmVsZW1lbnQsYT10aGlzLl9lbGVtZW50TGlzdGVuZXJzLmdldChvKTthJiZhLmZvckVhY2gocz0+e2lmKHMubmFtZT09aS50cmlnZ2VyTmFtZSl7bGV0IGw9UE8obyxpLnRyaWdnZXJOYW1lLGkuZnJvbVN0YXRlLnZhbHVlLGkudG9TdGF0ZS52YWx1ZSk7bC5fZGF0YT10LFJPKGkucGxheWVyLHMucGhhc2UsbCxzLmNhbGxiYWNrKX19KSxyLm1hcmtlZEZvckRlc3Ryb3k/dGhpcy5fZW5naW5lLmFmdGVyRmx1c2goKCk9PntyLmRlc3Ryb3koKX0pOmUucHVzaChpKX0pLHRoaXMuX3F1ZXVlPVtdLGUuc29ydCgoaSxyKT0+e2xldCBvPWkudHJhbnNpdGlvbi5hc3QuZGVwQ291bnQsYT1yLnRyYW5zaXRpb24uYXN0LmRlcENvdW50O3JldHVybiAwPT1vfHwwPT1hP28tYTp0aGlzLl9lbmdpbmUuZHJpdmVyLmNvbnRhaW5zRWxlbWVudChpLmVsZW1lbnQsci5lbGVtZW50KT8xOi0xfSl9ZGVzdHJveSh0KXt0aGlzLnBsYXllcnMuZm9yRWFjaChlPT5lLmRlc3Ryb3koKSksdGhpcy5fc2lnbmFsUmVtb3ZhbEZvcklubmVyVHJpZ2dlcnModGhpcy5ob3N0RWxlbWVudCx0KX1lbGVtZW50Q29udGFpbnNEYXRhKHQpe2xldCBlPSExO3JldHVybiB0aGlzLl9lbGVtZW50TGlzdGVuZXJzLmhhcyh0KSYmKGU9ITApLGU9ISF0aGlzLl9xdWV1ZS5maW5kKGk9PmkuZWxlbWVudD09PXQpfHxlLGV9fSh0LGUsdGhpcyk7cmV0dXJuIHRoaXMuYm9keU5vZGUmJnRoaXMuZHJpdmVyLmNvbnRhaW5zRWxlbWVudCh0aGlzLmJvZHlOb2RlLGUpP3RoaXMuX2JhbGFuY2VOYW1lc3BhY2VMaXN0KGksZSk6KHRoaXMubmV3SG9zdEVsZW1lbnRzLnNldChlLGkpLHRoaXMuY29sbGVjdEVudGVyRWxlbWVudChlKSksdGhpcy5fbmFtZXNwYWNlTG9va3VwW3RdPWl9X2JhbGFuY2VOYW1lc3BhY2VMaXN0KHQsZSl7bGV0IGk9dGhpcy5fbmFtZXNwYWNlTGlzdCxyPXRoaXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQ7aWYoaS5sZW5ndGgtMT49MCl7bGV0IGE9ITEscz10aGlzLmRyaXZlci5nZXRQYXJlbnRFbGVtZW50KGUpO2Zvcig7czspe2xldCBsPXIuZ2V0KHMpO2lmKGwpe2xldCBjPWkuaW5kZXhPZihsKTtpLnNwbGljZShjKzEsMCx0KSxhPSEwO2JyZWFrfXM9dGhpcy5kcml2ZXIuZ2V0UGFyZW50RWxlbWVudChzKX1hfHxpLnVuc2hpZnQodCl9ZWxzZSBpLnB1c2godCk7cmV0dXJuIHIuc2V0KGUsdCksdH1yZWdpc3Rlcih0LGUpe2xldCBpPXRoaXMuX25hbWVzcGFjZUxvb2t1cFt0XTtyZXR1cm4gaXx8KGk9dGhpcy5jcmVhdGVOYW1lc3BhY2UodCxlKSksaX1yZWdpc3RlclRyaWdnZXIodCxlLGkpe2xldCByPXRoaXMuX25hbWVzcGFjZUxvb2t1cFt0XTtyJiZyLnJlZ2lzdGVyKGUsaSkmJnRoaXMudG90YWxBbmltYXRpb25zKyt9ZGVzdHJveSh0LGUpe2lmKCF0KXJldHVybjtsZXQgaT10aGlzLl9mZXRjaE5hbWVzcGFjZSh0KTt0aGlzLmFmdGVyRmx1c2goKCk9Pnt0aGlzLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50LmRlbGV0ZShpLmhvc3RFbGVtZW50KSxkZWxldGUgdGhpcy5fbmFtZXNwYWNlTG9va3VwW3RdO2xldCByPXRoaXMuX25hbWVzcGFjZUxpc3QuaW5kZXhPZihpKTtyPj0wJiZ0aGlzLl9uYW1lc3BhY2VMaXN0LnNwbGljZShyLDEpfSksdGhpcy5hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUoKCk9PmkuZGVzdHJveShlKSl9X2ZldGNoTmFtZXNwYWNlKHQpe3JldHVybiB0aGlzLl9uYW1lc3BhY2VMb29rdXBbdF19ZmV0Y2hOYW1lc3BhY2VzQnlFbGVtZW50KHQpe2xldCBlPW5ldyBTZXQsaT10aGlzLnN0YXRlc0J5RWxlbWVudC5nZXQodCk7aWYoaSlmb3IobGV0IHIgb2YgaS52YWx1ZXMoKSlpZihyLm5hbWVzcGFjZUlkKXtsZXQgbz10aGlzLl9mZXRjaE5hbWVzcGFjZShyLm5hbWVzcGFjZUlkKTtvJiZlLmFkZChvKX1yZXR1cm4gZX10cmlnZ2VyKHQsZSxpLHIpe2lmKFJ3KGUpKXtsZXQgbz10aGlzLl9mZXRjaE5hbWVzcGFjZSh0KTtpZihvKXJldHVybiBvLnRyaWdnZXIoZSxpLHIpLCEwfXJldHVybiExfWluc2VydE5vZGUodCxlLGkscil7aWYoIVJ3KGUpKXJldHVybjtsZXQgbz1lW2pzXTtpZihvJiZvLnNldEZvclJlbW92YWwpe28uc2V0Rm9yUmVtb3ZhbD0hMSxvLnNldEZvck1vdmU9ITA7bGV0IGE9dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmluZGV4T2YoZSk7YT49MCYmdGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLnNwbGljZShhLDEpfWlmKHQpe2xldCBhPXRoaXMuX2ZldGNoTmFtZXNwYWNlKHQpO2EmJmEuaW5zZXJ0Tm9kZShlLGkpfXImJnRoaXMuY29sbGVjdEVudGVyRWxlbWVudChlKX1jb2xsZWN0RW50ZXJFbGVtZW50KHQpe3RoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5wdXNoKHQpfW1hcmtFbGVtZW50QXNEaXNhYmxlZCh0LGUpe2U/dGhpcy5kaXNhYmxlZE5vZGVzLmhhcyh0KXx8KHRoaXMuZGlzYWJsZWROb2Rlcy5hZGQodCksR3ModCxoTykpOnRoaXMuZGlzYWJsZWROb2Rlcy5oYXModCkmJih0aGlzLmRpc2FibGVkTm9kZXMuZGVsZXRlKHQpLFNmKHQsaE8pKX1yZW1vdmVOb2RlKHQsZSxpLHIpe2lmKFJ3KGUpKXtsZXQgbz10P3RoaXMuX2ZldGNoTmFtZXNwYWNlKHQpOm51bGw7aWYobz9vLnJlbW92ZU5vZGUoZSxyKTp0aGlzLm1hcmtFbGVtZW50QXNSZW1vdmVkKHQsZSwhMSxyKSxpKXtsZXQgYT10aGlzLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50LmdldChlKTthJiZhLmlkIT09dCYmYS5yZW1vdmVOb2RlKGUscil9fWVsc2UgdGhpcy5fb25SZW1vdmFsQ29tcGxldGUoZSxyKX1tYXJrRWxlbWVudEFzUmVtb3ZlZCh0LGUsaSxyLG8pe3RoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5wdXNoKGUpLGVbanNdPXtuYW1lc3BhY2VJZDp0LHNldEZvclJlbW92YWw6cixoYXNBbmltYXRpb246aSxyZW1vdmVkQmVmb3JlUXVlcmllZDohMSxwcmV2aW91c1RyaWdnZXJzVmFsdWVzOm99fWxpc3Rlbih0LGUsaSxyLG8pe3JldHVybiBSdyhlKT90aGlzLl9mZXRjaE5hbWVzcGFjZSh0KS5saXN0ZW4oZSxpLHIsbyk6KCk9Pnt9fV9idWlsZEluc3RydWN0aW9uKHQsZSxpLHIsbyl7cmV0dXJuIHQudHJhbnNpdGlvbi5idWlsZCh0aGlzLmRyaXZlcix0LmVsZW1lbnQsdC5mcm9tU3RhdGUudmFsdWUsdC50b1N0YXRlLnZhbHVlLGkscix0LmZyb21TdGF0ZS5vcHRpb25zLHQudG9TdGF0ZS5vcHRpb25zLGUsbyl9ZGVzdHJveUlubmVyQW5pbWF0aW9ucyh0KXtsZXQgZT10aGlzLmRyaXZlci5xdWVyeSh0LFB3LCEwKTtlLmZvckVhY2goaT0+dGhpcy5kZXN0cm95QWN0aXZlQW5pbWF0aW9uc0ZvckVsZW1lbnQoaSkpLDAhPXRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuc2l6ZSYmKGU9dGhpcy5kcml2ZXIucXVlcnkodCxiTywhMCksZS5mb3JFYWNoKGk9PnRoaXMuZmluaXNoQWN0aXZlUXVlcmllZEFuaW1hdGlvbk9uRWxlbWVudChpKSkpfWRlc3Ryb3lBY3RpdmVBbmltYXRpb25zRm9yRWxlbWVudCh0KXtsZXQgZT10aGlzLnBsYXllcnNCeUVsZW1lbnQuZ2V0KHQpO2UmJmUuZm9yRWFjaChpPT57aS5xdWV1ZWQ/aS5tYXJrZWRGb3JEZXN0cm95PSEwOmkuZGVzdHJveSgpfSl9ZmluaXNoQWN0aXZlUXVlcmllZEFuaW1hdGlvbk9uRWxlbWVudCh0KXtsZXQgZT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmdldCh0KTtlJiZlLmZvckVhY2goaT0+aS5maW5pc2goKSl9d2hlblJlbmRlcmluZ0RvbmUoKXtyZXR1cm4gbmV3IFByb21pc2UodD0+e2lmKHRoaXMucGxheWVycy5sZW5ndGgpcmV0dXJuIGh1KHRoaXMucGxheWVycykub25Eb25lKCgpPT50KCkpO3QoKX0pfXByb2Nlc3NMZWF2ZU5vZGUodCl7bGV0IGU9dFtqc107aWYoZSYmZS5zZXRGb3JSZW1vdmFsKXtpZih0W2pzXT1HRyxlLm5hbWVzcGFjZUlkKXt0aGlzLmRlc3Ryb3lJbm5lckFuaW1hdGlvbnModCk7bGV0IGk9dGhpcy5fZmV0Y2hOYW1lc3BhY2UoZS5uYW1lc3BhY2VJZCk7aSYmaS5jbGVhckVsZW1lbnRDYWNoZSh0KX10aGlzLl9vblJlbW92YWxDb21wbGV0ZSh0LGUuc2V0Rm9yUmVtb3ZhbCl9dC5jbGFzc0xpc3Q/LmNvbnRhaW5zKGhPKSYmdGhpcy5tYXJrRWxlbWVudEFzRGlzYWJsZWQodCwhMSksdGhpcy5kcml2ZXIucXVlcnkodCwiLm5nLWFuaW1hdGUtZGlzYWJsZWQiLCEwKS5mb3JFYWNoKGk9Pnt0aGlzLm1hcmtFbGVtZW50QXNEaXNhYmxlZChpLCExKX0pfWZsdXNoKHQ9LTEpe2xldCBlPVtdO2lmKHRoaXMubmV3SG9zdEVsZW1lbnRzLnNpemUmJih0aGlzLm5ld0hvc3RFbGVtZW50cy5mb3JFYWNoKChpLHIpPT50aGlzLl9iYWxhbmNlTmFtZXNwYWNlTGlzdChpLHIpKSx0aGlzLm5ld0hvc3RFbGVtZW50cy5jbGVhcigpKSx0aGlzLnRvdGFsQW5pbWF0aW9ucyYmdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aClmb3IobGV0IGk9MDtpPHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGg7aSsrKUdzKHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50c1tpXSwibmctc3Rhci1pbnNlcnRlZCIpO2lmKHRoaXMuX25hbWVzcGFjZUxpc3QubGVuZ3RoJiYodGhpcy50b3RhbFF1ZXVlZFBsYXllcnN8fHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5sZW5ndGgpKXtsZXQgaT1bXTt0cnl7ZT10aGlzLl9mbHVzaEFuaW1hdGlvbnMoaSx0KX1maW5hbGx5e2ZvcihsZXQgcj0wO3I8aS5sZW5ndGg7cisrKWlbcl0oKX19ZWxzZSBmb3IobGV0IGk9MDtpPHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5sZW5ndGg7aSsrKXRoaXMucHJvY2Vzc0xlYXZlTm9kZSh0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHNbaV0pO2lmKHRoaXMudG90YWxRdWV1ZWRQbGF5ZXJzPTAsdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aD0wLHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5sZW5ndGg9MCx0aGlzLl9mbHVzaEZucy5mb3JFYWNoKGk9PmkoKSksdGhpcy5fZmx1c2hGbnM9W10sdGhpcy5fd2hlblF1aWV0Rm5zLmxlbmd0aCl7bGV0IGk9dGhpcy5fd2hlblF1aWV0Rm5zO3RoaXMuX3doZW5RdWlldEZucz1bXSxlLmxlbmd0aD9odShlKS5vbkRvbmUoKCk9PntpLmZvckVhY2gocj0+cigpKX0pOmkuZm9yRWFjaChyPT5yKCkpfX1yZXBvcnRFcnJvcih0KXt0aHJvdyBuZXcgeHQoMzQwMiwhMSl9X2ZsdXNoQW5pbWF0aW9ucyh0LGUpe2xldCBpPW5ldyBVYixyPVtdLG89bmV3IE1hcCxhPVtdLHM9bmV3IE1hcCxsPW5ldyBNYXAsYz1uZXcgTWFwLGQ9bmV3IFNldDt0aGlzLmRpc2FibGVkTm9kZXMuZm9yRWFjaCgkPT57ZC5hZGQoJCk7bGV0IGRlPXRoaXMuZHJpdmVyLnF1ZXJ5KCQsIi5uZy1hbmltYXRlLXF1ZXVlZCIsITApO2ZvcihsZXQgcGU9MDtwZTxkZS5sZW5ndGg7cGUrKylkLmFkZChkZVtwZV0pfSk7bGV0IHU9dGhpcy5ib2R5Tm9kZSxwPUFycmF5LmZyb20odGhpcy5zdGF0ZXNCeUVsZW1lbnQua2V5cygpKSxoPUVHKHAsdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzKSxtPW5ldyBNYXAsXz0wO2guZm9yRWFjaCgoJCxkZSk9PntsZXQgcGU9T0crXysrO20uc2V0KGRlLHBlKSwkLmZvckVhY2goR2U9PkdzKEdlLHBlKSl9KTtsZXQgTT1bXSx5PW5ldyBTZXQseD1uZXcgU2V0O2ZvcihsZXQgJD0wOyQ8dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aDskKyspe2xldCBkZT10aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHNbJF0scGU9ZGVbanNdO3BlJiZwZS5zZXRGb3JSZW1vdmFsJiYoTS5wdXNoKGRlKSx5LmFkZChkZSkscGUuaGFzQW5pbWF0aW9uP3RoaXMuZHJpdmVyLnF1ZXJ5KGRlLCIubmctc3Rhci1pbnNlcnRlZCIsITApLmZvckVhY2goR2U9PnkuYWRkKEdlKSk6eC5hZGQoZGUpKX1sZXQgUj1uZXcgTWFwLEk9RUcocCxBcnJheS5mcm9tKHkpKTtJLmZvckVhY2goKCQsZGUpPT57bGV0IHBlPV9PK18rKztSLnNldChkZSxwZSksJC5mb3JFYWNoKEdlPT5HcyhHZSxwZSkpfSksdC5wdXNoKCgpPT57aC5mb3JFYWNoKCgkLGRlKT0+e2xldCBwZT1tLmdldChkZSk7JC5mb3JFYWNoKEdlPT5TZihHZSxwZSkpfSksSS5mb3JFYWNoKCgkLGRlKT0+e2xldCBwZT1SLmdldChkZSk7JC5mb3JFYWNoKEdlPT5TZihHZSxwZSkpfSksTS5mb3JFYWNoKCQ9Pnt0aGlzLnByb2Nlc3NMZWF2ZU5vZGUoJCl9KX0pO2xldCBCPVtdLGVlPVtdO2ZvcihsZXQgJD10aGlzLl9uYW1lc3BhY2VMaXN0Lmxlbmd0aC0xOyQ+PTA7JC0tKXRoaXMuX25hbWVzcGFjZUxpc3RbJF0uZHJhaW5RdWV1ZWRUcmFuc2l0aW9ucyhlKS5mb3JFYWNoKHBlPT57bGV0IEdlPXBlLnBsYXllcixTZT1wZS5lbGVtZW50O2lmKEIucHVzaChHZSksdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aCl7bGV0IHd0PVNlW2pzXTtpZih3dCYmd3Quc2V0Rm9yTW92ZSl7aWYod3QucHJldmlvdXNUcmlnZ2Vyc1ZhbHVlcyYmd3QucHJldmlvdXNUcmlnZ2Vyc1ZhbHVlcy5oYXMocGUudHJpZ2dlck5hbWUpKXtsZXQgb249d3QucHJldmlvdXNUcmlnZ2Vyc1ZhbHVlcy5nZXQocGUudHJpZ2dlck5hbWUpLENlPXRoaXMuc3RhdGVzQnlFbGVtZW50LmdldChwZS5lbGVtZW50KTtpZihDZSYmQ2UuaGFzKHBlLnRyaWdnZXJOYW1lKSl7bGV0IG10PUNlLmdldChwZS50cmlnZ2VyTmFtZSk7bXQudmFsdWU9b24sQ2Uuc2V0KHBlLnRyaWdnZXJOYW1lLG10KX19cmV0dXJuIHZvaWQgR2UuZGVzdHJveSgpfX1sZXQgRmU9IXV8fCF0aGlzLmRyaXZlci5jb250YWluc0VsZW1lbnQodSxTZSksbHQ9Ui5nZXQoU2UpLE10PW0uZ2V0KFNlKSxwdD10aGlzLl9idWlsZEluc3RydWN0aW9uKHBlLGksTXQsbHQsRmUpO2lmKHB0LmVycm9ycyYmcHQuZXJyb3JzLmxlbmd0aClyZXR1cm4gdm9pZCBlZS5wdXNoKHB0KTtpZihGZSlyZXR1cm4gR2Uub25TdGFydCgoKT0+c2goU2UscHQuZnJvbVN0eWxlcykpLEdlLm9uRGVzdHJveSgoKT0+YmMoU2UscHQudG9TdHlsZXMpKSx2b2lkIHIucHVzaChHZSk7aWYocGUuaXNGYWxsYmFja1RyYW5zaXRpb24pcmV0dXJuIEdlLm9uU3RhcnQoKCk9PnNoKFNlLHB0LmZyb21TdHlsZXMpKSxHZS5vbkRlc3Ryb3koKCk9PmJjKFNlLHB0LnRvU3R5bGVzKSksdm9pZCByLnB1c2goR2UpO2xldCBrZT1bXTtwdC50aW1lbGluZXMuZm9yRWFjaCh3dD0+e3d0LnN0cmV0Y2hTdGFydGluZ0tleWZyYW1lPSEwLHRoaXMuZGlzYWJsZWROb2Rlcy5oYXMod3QuZWxlbWVudCl8fGtlLnB1c2god3QpfSkscHQudGltZWxpbmVzPWtlLGkuYXBwZW5kKFNlLHB0LnRpbWVsaW5lcyksYS5wdXNoKHtpbnN0cnVjdGlvbjpwdCxwbGF5ZXI6R2UsZWxlbWVudDpTZX0pLHB0LnF1ZXJpZWRFbGVtZW50cy5mb3JFYWNoKHd0PT5wcyhzLHd0LFtdKS5wdXNoKEdlKSkscHQucHJlU3R5bGVQcm9wcy5mb3JFYWNoKCh3dCxvbik9PntpZih3dC5zaXplKXtsZXQgQ2U9bC5nZXQob24pO0NlfHxsLnNldChvbixDZT1uZXcgU2V0KSx3dC5mb3JFYWNoKChtdCxodCk9PkNlLmFkZChodCkpfX0pLHB0LnBvc3RTdHlsZVByb3BzLmZvckVhY2goKHd0LG9uKT0+e2xldCBDZT1jLmdldChvbik7Q2V8fGMuc2V0KG9uLENlPW5ldyBTZXQpLHd0LmZvckVhY2goKG10LGh0KT0+Q2UuYWRkKGh0KSl9KX0pO2lmKGVlLmxlbmd0aCl7bGV0ICQ9W107ZWUuZm9yRWFjaChkZT0+eyQucHVzaChuZXcgeHQoMzUwNSwhMSkpfSksQi5mb3JFYWNoKGRlPT5kZS5kZXN0cm95KCkpLHRoaXMucmVwb3J0RXJyb3IoJCl9bGV0IFE9bmV3IE1hcCx3ZT1uZXcgTWFwO2EuZm9yRWFjaCgkPT57bGV0IGRlPSQuZWxlbWVudDtpLmhhcyhkZSkmJih3ZS5zZXQoZGUsZGUpLHRoaXMuX2JlZm9yZUFuaW1hdGlvbkJ1aWxkKCQucGxheWVyLm5hbWVzcGFjZUlkLCQuaW5zdHJ1Y3Rpb24sUSkpfSksci5mb3JFYWNoKCQ9PntsZXQgZGU9JC5lbGVtZW50O3RoaXMuX2dldFByZXZpb3VzUGxheWVycyhkZSwhMSwkLm5hbWVzcGFjZUlkLCQudHJpZ2dlck5hbWUsbnVsbCkuZm9yRWFjaChHZT0+e3BzKFEsZGUsW10pLnB1c2goR2UpLEdlLmRlc3Ryb3koKX0pfSk7bGV0IFFlPU0uZmlsdGVyKCQ9PlRHKCQsbCxjKSksQWU9bmV3IE1hcDtTRyhBZSx0aGlzLmRyaXZlcix4LGMsX2MpLmZvckVhY2goJD0+e1RHKCQsbCxjKSYmUWUucHVzaCgkKX0pO2xldCByZT1uZXcgTWFwO2guZm9yRWFjaCgoJCxkZSk9PntTRyhyZSx0aGlzLmRyaXZlcixuZXcgU2V0KCQpLGwsVHcpfSksUWUuZm9yRWFjaCgkPT57bGV0IGRlPUFlLmdldCgkKSxwZT1yZS5nZXQoJCk7QWUuc2V0KCQsbmV3IE1hcChbLi4uQXJyYXkuZnJvbShkZT8uZW50cmllcygpPz9bXSksLi4uQXJyYXkuZnJvbShwZT8uZW50cmllcygpPz9bXSldKSl9KTtsZXQgY2U9W10saGU9W10sX2U9e307YS5mb3JFYWNoKCQ9PntsZXR7ZWxlbWVudDpkZSxwbGF5ZXI6cGUsaW5zdHJ1Y3Rpb246R2V9PSQ7aWYoaS5oYXMoZGUpKXtpZihkLmhhcyhkZSkpcmV0dXJuIHBlLm9uRGVzdHJveSgoKT0+YmMoZGUsR2UudG9TdHlsZXMpKSxwZS5kaXNhYmxlZD0hMCxwZS5vdmVycmlkZVRvdGFsVGltZShHZS50b3RhbFRpbWUpLHZvaWQgci5wdXNoKHBlKTtsZXQgU2U9X2U7aWYod2Uuc2l6ZT4xKXtsZXQgbHQ9ZGUsTXQ9W107Zm9yKDtsdD1sdC5wYXJlbnROb2RlOyl7bGV0IHB0PXdlLmdldChsdCk7aWYocHQpe1NlPXB0O2JyZWFrfU10LnB1c2gobHQpfU10LmZvckVhY2gocHQ9PndlLnNldChwdCxTZSkpfWxldCBGZT10aGlzLl9idWlsZEFuaW1hdGlvbihwZS5uYW1lc3BhY2VJZCxHZSxRLG8scmUsQWUpO2lmKHBlLnNldFJlYWxQbGF5ZXIoRmUpLFNlPT09X2UpY2UucHVzaChwZSk7ZWxzZXtsZXQgbHQ9dGhpcy5wbGF5ZXJzQnlFbGVtZW50LmdldChTZSk7bHQmJmx0Lmxlbmd0aCYmKHBlLnBhcmVudFBsYXllcj1odShsdCkpLHIucHVzaChwZSl9fWVsc2Ugc2goZGUsR2UuZnJvbVN0eWxlcykscGUub25EZXN0cm95KCgpPT5iYyhkZSxHZS50b1N0eWxlcykpLGhlLnB1c2gocGUpLGQuaGFzKGRlKSYmci5wdXNoKHBlKX0pLGhlLmZvckVhY2goJD0+e2xldCBkZT1vLmdldCgkLmVsZW1lbnQpO2lmKGRlJiZkZS5sZW5ndGgpe2xldCBwZT1odShkZSk7JC5zZXRSZWFsUGxheWVyKHBlKX19KSxyLmZvckVhY2goJD0+eyQucGFyZW50UGxheWVyPyQuc3luY1BsYXllckV2ZW50cygkLnBhcmVudFBsYXllcik6JC5kZXN0cm95KCl9KTtmb3IobGV0ICQ9MDskPE0ubGVuZ3RoOyQrKyl7bGV0IGRlPU1bJF0scGU9ZGVbanNdO2lmKFNmKGRlLF9PKSxwZSYmcGUuaGFzQW5pbWF0aW9uKWNvbnRpbnVlO2xldCBHZT1bXTtpZihzLnNpemUpe2xldCBGZT1zLmdldChkZSk7RmUmJkZlLmxlbmd0aCYmR2UucHVzaCguLi5GZSk7bGV0IGx0PXRoaXMuZHJpdmVyLnF1ZXJ5KGRlLGJPLCEwKTtmb3IobGV0IE10PTA7TXQ8bHQubGVuZ3RoO010Kyspe2xldCBwdD1zLmdldChsdFtNdF0pO3B0JiZwdC5sZW5ndGgmJkdlLnB1c2goLi4ucHQpfX1sZXQgU2U9R2UuZmlsdGVyKEZlPT4hRmUuZGVzdHJveWVkKTtTZS5sZW5ndGg/bW1lKHRoaXMsZGUsU2UpOnRoaXMucHJvY2Vzc0xlYXZlTm9kZShkZSl9cmV0dXJuIE0ubGVuZ3RoPTAsY2UuZm9yRWFjaCgkPT57dGhpcy5wbGF5ZXJzLnB1c2goJCksJC5vbkRvbmUoKCk9PnskLmRlc3Ryb3koKTtsZXQgZGU9dGhpcy5wbGF5ZXJzLmluZGV4T2YoJCk7dGhpcy5wbGF5ZXJzLnNwbGljZShkZSwxKX0pLCQucGxheSgpfSksY2V9ZWxlbWVudENvbnRhaW5zRGF0YSh0LGUpe2xldCBpPSExLHI9ZVtqc107cmV0dXJuIHImJnIuc2V0Rm9yUmVtb3ZhbCYmKGk9ITApLHRoaXMucGxheWVyc0J5RWxlbWVudC5oYXMoZSkmJihpPSEwKSx0aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmhhcyhlKSYmKGk9ITApLHRoaXMuc3RhdGVzQnlFbGVtZW50LmhhcyhlKSYmKGk9ITApLHRoaXMuX2ZldGNoTmFtZXNwYWNlKHQpLmVsZW1lbnRDb250YWluc0RhdGEoZSl8fGl9YWZ0ZXJGbHVzaCh0KXt0aGlzLl9mbHVzaEZucy5wdXNoKHQpfWFmdGVyRmx1c2hBbmltYXRpb25zRG9uZSh0KXt0aGlzLl93aGVuUXVpZXRGbnMucHVzaCh0KX1fZ2V0UHJldmlvdXNQbGF5ZXJzKHQsZSxpLHIsbyl7bGV0IGE9W107aWYoZSl7bGV0IHM9dGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5nZXQodCk7cyYmKGE9cyl9ZWxzZXtsZXQgcz10aGlzLnBsYXllcnNCeUVsZW1lbnQuZ2V0KHQpO2lmKHMpe2xldCBsPSFvfHxvPT1IYjtzLmZvckVhY2goYz0+e2MucXVldWVkfHwhbCYmYy50cmlnZ2VyTmFtZSE9cnx8YS5wdXNoKGMpfSl9fXJldHVybihpfHxyKSYmKGE9YS5maWx0ZXIocz0+IShpJiZpIT1zLm5hbWVzcGFjZUlkfHxyJiZyIT1zLnRyaWdnZXJOYW1lKSkpLGF9X2JlZm9yZUFuaW1hdGlvbkJ1aWxkKHQsZSxpKXtsZXQgbz1lLmVsZW1lbnQsYT1lLmlzUmVtb3ZhbFRyYW5zaXRpb24/dm9pZCAwOnQscz1lLmlzUmVtb3ZhbFRyYW5zaXRpb24/dm9pZCAwOmUudHJpZ2dlck5hbWU7Zm9yKGxldCBsIG9mIGUudGltZWxpbmVzKXtsZXQgYz1sLmVsZW1lbnQsZD1jIT09byx1PXBzKGksYyxbXSk7dGhpcy5fZ2V0UHJldmlvdXNQbGF5ZXJzKGMsZCxhLHMsZS50b1N0YXRlKS5mb3JFYWNoKGg9PntsZXQgbT1oLmdldFJlYWxQbGF5ZXIoKTttLmJlZm9yZURlc3Ryb3kmJm0uYmVmb3JlRGVzdHJveSgpLGguZGVzdHJveSgpLHUucHVzaChoKX0pfXNoKG8sZS5mcm9tU3R5bGVzKX1fYnVpbGRBbmltYXRpb24odCxlLGkscixvLGEpe2xldCBzPWUudHJpZ2dlck5hbWUsbD1lLmVsZW1lbnQsYz1bXSxkPW5ldyBTZXQsdT1uZXcgU2V0LHA9ZS50aW1lbGluZXMubWFwKG09PntsZXQgXz1tLmVsZW1lbnQ7ZC5hZGQoXyk7bGV0IE09X1tqc107aWYoTSYmTS5yZW1vdmVkQmVmb3JlUXVlcmllZClyZXR1cm4gbmV3IHB1KG0uZHVyYXRpb24sbS5kZWxheSk7bGV0IHk9XyE9PWwseD1mdW5jdGlvbihuKXtsZXQgdD1bXTtyZXR1cm4gV0cobix0KSx0fSgoaS5nZXQoXyl8fGNtZSkubWFwKFE9PlEuZ2V0UmVhbFBsYXllcigpKSkuZmlsdGVyKFE9PiEhUS5lbGVtZW50JiZRLmVsZW1lbnQ9PT1fKSxSPW8uZ2V0KF8pLEk9YS5nZXQoXyksQj1ERygwLHRoaXMuX25vcm1hbGl6ZXIsMCxtLmtleWZyYW1lcyxSLEkpLGVlPXRoaXMuX2J1aWxkUGxheWVyKG0sQix4KTtpZihtLnN1YlRpbWVsaW5lJiZyJiZ1LmFkZChfKSx5KXtsZXQgUT1uZXcgV2IodCxzLF8pO1Euc2V0UmVhbFBsYXllcihlZSksYy5wdXNoKFEpfXJldHVybiBlZX0pO2MuZm9yRWFjaChtPT57cHModGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudCxtLmVsZW1lbnQsW10pLnB1c2gobSksbS5vbkRvbmUoKCk9PmZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1uLmdldCh0KTtpZihpKXtpZihpLmxlbmd0aCl7bGV0IHI9aS5pbmRleE9mKGUpO2kuc3BsaWNlKHIsMSl9MD09aS5sZW5ndGgmJm4uZGVsZXRlKHQpfXJldHVybiBpfSh0aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LG0uZWxlbWVudCxtKSl9KSxkLmZvckVhY2gobT0+R3MobSxnRykpO2xldCBoPWh1KHApO3JldHVybiBoLm9uRGVzdHJveSgoKT0+e2QuZm9yRWFjaChtPT5TZihtLGdHKSksYmMobCxlLnRvU3R5bGVzKX0pLHUuZm9yRWFjaChtPT57cHMocixtLFtdKS5wdXNoKGgpfSksaH1fYnVpbGRQbGF5ZXIodCxlLGkpe3JldHVybiBlLmxlbmd0aD4wP3RoaXMuZHJpdmVyLmFuaW1hdGUodC5lbGVtZW50LGUsdC5kdXJhdGlvbix0LmRlbGF5LHQuZWFzaW5nLGkpOm5ldyBwdSh0LmR1cmF0aW9uLHQuZGVsYXkpfX0odCxlLGkpLHRoaXMuX3RpbWVsaW5lRW5naW5lPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5ib2R5Tm9kZT10LHRoaXMuX2RyaXZlcj1lLHRoaXMuX25vcm1hbGl6ZXI9aSx0aGlzLl9hbmltYXRpb25zPW5ldyBNYXAsdGhpcy5fcGxheWVyc0J5SWQ9bmV3IE1hcCx0aGlzLnBsYXllcnM9W119cmVnaXN0ZXIodCxlKXtsZXQgaT1bXSxyPVtdLG89VUcodGhpcy5fZHJpdmVyLGUsaSxyKTtpZihpLmxlbmd0aCl0aHJvdyBuZXcgeHQoMzUwMywhMSk7dGhpcy5fYW5pbWF0aW9ucy5zZXQodCxvKX1fYnVpbGRQbGF5ZXIodCxlLGkpe2xldCByPXQuZWxlbWVudCxvPURHKDAsdGhpcy5fbm9ybWFsaXplciwwLHQua2V5ZnJhbWVzLGUsaSk7cmV0dXJuIHRoaXMuX2RyaXZlci5hbmltYXRlKHIsbyx0LmR1cmF0aW9uLHQuZGVsYXksdC5lYXNpbmcsW10sITApfWNyZWF0ZSh0LGUsaT17fSl7bGV0IGEscj1bXSxvPXRoaXMuX2FuaW1hdGlvbnMuZ2V0KHQpLHM9bmV3IE1hcDtpZihvPyhhPWpHKHRoaXMuX2RyaXZlcixlLG8sT0csX08sbmV3IE1hcCxuZXcgTWFwLGkscm1lLHIpLGEuZm9yRWFjaChkPT57bGV0IHU9cHMocyxkLmVsZW1lbnQsbmV3IE1hcCk7ZC5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKHA9PnUuc2V0KHAsbnVsbCkpfSkpOihyLnB1c2gobmV3IHh0KDMzMDAsITEpKSxhPVtdKSxyLmxlbmd0aCl0aHJvdyBuZXcgeHQoMzUwNCwhMSk7cy5mb3JFYWNoKChkLHUpPT57ZC5mb3JFYWNoKChwLGgpPT57ZC5zZXQoaCx0aGlzLl9kcml2ZXIuY29tcHV0ZVN0eWxlKHUsaCxfYykpfSl9KTtsZXQgYz1odShhLm1hcChkPT57bGV0IHU9cy5nZXQoZC5lbGVtZW50KTtyZXR1cm4gdGhpcy5fYnVpbGRQbGF5ZXIoZCxuZXcgTWFwLHUpfSkpO3JldHVybiB0aGlzLl9wbGF5ZXJzQnlJZC5zZXQodCxjKSxjLm9uRGVzdHJveSgoKT0+dGhpcy5kZXN0cm95KHQpKSx0aGlzLnBsYXllcnMucHVzaChjKSxjfWRlc3Ryb3kodCl7bGV0IGU9dGhpcy5fZ2V0UGxheWVyKHQpO2UuZGVzdHJveSgpLHRoaXMuX3BsYXllcnNCeUlkLmRlbGV0ZSh0KTtsZXQgaT10aGlzLnBsYXllcnMuaW5kZXhPZihlKTtpPj0wJiZ0aGlzLnBsYXllcnMuc3BsaWNlKGksMSl9X2dldFBsYXllcih0KXtsZXQgZT10aGlzLl9wbGF5ZXJzQnlJZC5nZXQodCk7aWYoIWUpdGhyb3cgbmV3IHh0KDMzMDEsITEpO3JldHVybiBlfWxpc3Rlbih0LGUsaSxyKXtsZXQgbz1QTyhlLCIiLCIiLCIiKTtyZXR1cm4gUk8odGhpcy5fZ2V0UGxheWVyKHQpLGksbyxyKSwoKT0+e319Y29tbWFuZCh0LGUsaSxyKXtpZigicmVnaXN0ZXIiPT1pKXJldHVybiB2b2lkIHRoaXMucmVnaXN0ZXIodCxyWzBdKTtpZigiY3JlYXRlIj09aSlyZXR1cm4gdm9pZCB0aGlzLmNyZWF0ZSh0LGUsclswXXx8e30pO2xldCBvPXRoaXMuX2dldFBsYXllcih0KTtzd2l0Y2goaSl7Y2FzZSJwbGF5IjpvLnBsYXkoKTticmVhaztjYXNlInBhdXNlIjpvLnBhdXNlKCk7YnJlYWs7Y2FzZSJyZXNldCI6by5yZXNldCgpO2JyZWFrO2Nhc2UicmVzdGFydCI6by5yZXN0YXJ0KCk7YnJlYWs7Y2FzZSJmaW5pc2giOm8uZmluaXNoKCk7YnJlYWs7Y2FzZSJpbml0IjpvLmluaXQoKTticmVhaztjYXNlInNldFBvc2l0aW9uIjpvLnNldFBvc2l0aW9uKHBhcnNlRmxvYXQoclswXSkpO2JyZWFrO2Nhc2UiZGVzdHJveSI6dGhpcy5kZXN0cm95KHQpfX19KHQsZSxpKSx0aGlzLl90cmFuc2l0aW9uRW5naW5lLm9uUmVtb3ZhbENvbXBsZXRlPShyLG8pPT50aGlzLm9uUmVtb3ZhbENvbXBsZXRlKHIsbyl9cmVnaXN0ZXJUcmlnZ2VyKHQsZSxpLHIsbyl7bGV0IGE9dCsiLSIrcixzPXRoaXMuX3RyaWdnZXJDYWNoZVthXTtpZighcyl7bGV0IGw9W10sYz1bXSxkPVVHKHRoaXMuX2RyaXZlcixvLGwsYyk7aWYobC5sZW5ndGgpdGhyb3cgbmV3IHh0KDM0MDQsITEpO3M9ZnVuY3Rpb24obix0LGUpe3JldHVybiBuZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMubmFtZT10LHRoaXMuYXN0PWUsdGhpcy5fbm9ybWFsaXplcj1pLHRoaXMudHJhbnNpdGlvbkZhY3Rvcmllcz1bXSx0aGlzLnN0YXRlcz1uZXcgTWFwLGUuc3RhdGVzLmZvckVhY2gocj0+e2xldCBvPXIub3B0aW9ucyYmci5vcHRpb25zLnBhcmFtc3x8e307dGhpcy5zdGF0ZXMuc2V0KHIubmFtZSxuZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMuc3R5bGVzPXQsdGhpcy5kZWZhdWx0UGFyYW1zPWUsdGhpcy5ub3JtYWxpemVyPWl9YnVpbGRTdHlsZXModCxlKXtsZXQgaT1uZXcgTWFwLHI9WGIodGhpcy5kZWZhdWx0UGFyYW1zKTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaChvPT57bGV0IGE9dFtvXTtudWxsIT09YSYmKHJbb109YSl9KSx0aGlzLnN0eWxlcy5zdHlsZXMuZm9yRWFjaChvPT57InN0cmluZyIhPXR5cGVvZiBvJiZvLmZvckVhY2goKGEscyk9PnthJiYoYT16YihhLHIsZSkpO2xldCBsPXRoaXMubm9ybWFsaXplci5ub3JtYWxpemVQcm9wZXJ0eU5hbWUocyxlKTthPXRoaXMubm9ybWFsaXplci5ub3JtYWxpemVTdHlsZVZhbHVlKHMsbCxhLGUpLGkuc2V0KHMsYSl9KX0pLGl9fShyLnN0eWxlLG8saSkpfSksQ0codGhpcy5zdGF0ZXMsInRydWUiLCIxIiksQ0codGhpcy5zdGF0ZXMsImZhbHNlIiwiMCIpLGUudHJhbnNpdGlvbnMuZm9yRWFjaChyPT57dGhpcy50cmFuc2l0aW9uRmFjdG9yaWVzLnB1c2gobmV3IEJ3KHQscix0aGlzLnN0YXRlcykpfSksdGhpcy5mYWxsYmFja1RyYW5zaXRpb249ZnVuY3Rpb24obix0LGUpe3JldHVybiBuZXcgQncobix7dHlwZToxLGFuaW1hdGlvbjp7dHlwZToyLHN0ZXBzOltdLG9wdGlvbnM6bnVsbH0sbWF0Y2hlcnM6WyhhLHMpPT4hMF0sb3B0aW9uczpudWxsLHF1ZXJ5Q291bnQ6MCxkZXBDb3VudDowfSx0KX0odCx0aGlzLnN0YXRlcyl9Z2V0IGNvbnRhaW5zUXVlcmllcygpe3JldHVybiB0aGlzLmFzdC5xdWVyeUNvdW50PjB9bWF0Y2hUcmFuc2l0aW9uKHQsZSxpLHIpe3JldHVybiB0aGlzLnRyYW5zaXRpb25GYWN0b3JpZXMuZmluZChhPT5hLm1hdGNoKHQsZSxpLHIpKXx8bnVsbH1tYXRjaFN0eWxlcyh0LGUsaSl7cmV0dXJuIHRoaXMuZmFsbGJhY2tUcmFuc2l0aW9uLmJ1aWxkU3R5bGVzKHQsZSxpKX19KG4sdCxlKX0ocixkLHRoaXMuX25vcm1hbGl6ZXIpLHRoaXMuX3RyaWdnZXJDYWNoZVthXT1zfXRoaXMuX3RyYW5zaXRpb25FbmdpbmUucmVnaXN0ZXJUcmlnZ2VyKGUscixzKX1yZWdpc3Rlcih0LGUpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUucmVnaXN0ZXIodCxlKX1kZXN0cm95KHQsZSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5kZXN0cm95KHQsZSl9b25JbnNlcnQodCxlLGkscil7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5pbnNlcnROb2RlKHQsZSxpLHIpfW9uUmVtb3ZlKHQsZSxpLHIpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUucmVtb3ZlTm9kZSh0LGUscnx8ITEsaSl9ZGlzYWJsZUFuaW1hdGlvbnModCxlKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLm1hcmtFbGVtZW50QXNEaXNhYmxlZCh0LGUpfXByb2Nlc3ModCxlLGkscil7aWYoIkAiPT1pLmNoYXJBdCgwKSl7bGV0W28sYV09bUcoaSk7dGhpcy5fdGltZWxpbmVFbmdpbmUuY29tbWFuZChvLGUsYSxyKX1lbHNlIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUudHJpZ2dlcih0LGUsaSxyKX1saXN0ZW4odCxlLGkscixvKXtpZigiQCI9PWkuY2hhckF0KDApKXtsZXRbYSxzXT1tRyhpKTtyZXR1cm4gdGhpcy5fdGltZWxpbmVFbmdpbmUubGlzdGVuKGEsZSxzLG8pfXJldHVybiB0aGlzLl90cmFuc2l0aW9uRW5naW5lLmxpc3Rlbih0LGUsaSxyLG8pfWZsdXNoKHQ9LTEpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuZmx1c2godCl9Z2V0IHBsYXllcnMoKXtyZXR1cm4gdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5wbGF5ZXJzLmNvbmNhdCh0aGlzLl90aW1lbGluZUVuZ2luZS5wbGF5ZXJzKX13aGVuUmVuZGVyaW5nRG9uZSgpe3JldHVybiB0aGlzLl90cmFuc2l0aW9uRW5naW5lLndoZW5SZW5kZXJpbmdEb25lKCl9fSxibWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fZWxlbWVudD1lLHRoaXMuX3N0YXJ0U3R5bGVzPWksdGhpcy5fZW5kU3R5bGVzPXIsdGhpcy5fc3RhdGU9MDtsZXQgbz1uLmluaXRpYWxTdHlsZXNCeUVsZW1lbnQuZ2V0KGUpO298fG4uaW5pdGlhbFN0eWxlc0J5RWxlbWVudC5zZXQoZSxvPW5ldyBNYXApLHRoaXMuX2luaXRpYWxTdHlsZXM9b31zdGFydCgpe3RoaXMuX3N0YXRlPDEmJih0aGlzLl9zdGFydFN0eWxlcyYmYmModGhpcy5fZWxlbWVudCx0aGlzLl9zdGFydFN0eWxlcyx0aGlzLl9pbml0aWFsU3R5bGVzKSx0aGlzLl9zdGF0ZT0xKX1maW5pc2goKXt0aGlzLnN0YXJ0KCksdGhpcy5fc3RhdGU8MiYmKGJjKHRoaXMuX2VsZW1lbnQsdGhpcy5faW5pdGlhbFN0eWxlcyksdGhpcy5fZW5kU3R5bGVzJiYoYmModGhpcy5fZWxlbWVudCx0aGlzLl9lbmRTdHlsZXMpLHRoaXMuX2VuZFN0eWxlcz1udWxsKSx0aGlzLl9zdGF0ZT0xKX1kZXN0cm95KCl7dGhpcy5maW5pc2goKSx0aGlzLl9zdGF0ZTwzJiYobi5pbml0aWFsU3R5bGVzQnlFbGVtZW50LmRlbGV0ZSh0aGlzLl9lbGVtZW50KSx0aGlzLl9zdGFydFN0eWxlcyYmKHNoKHRoaXMuX2VsZW1lbnQsdGhpcy5fc3RhcnRTdHlsZXMpLHRoaXMuX2VuZFN0eWxlcz1udWxsKSx0aGlzLl9lbmRTdHlsZXMmJihzaCh0aGlzLl9lbGVtZW50LHRoaXMuX2VuZFN0eWxlcyksdGhpcy5fZW5kU3R5bGVzPW51bGwpLGJjKHRoaXMuX2VsZW1lbnQsdGhpcy5faW5pdGlhbFN0eWxlcyksdGhpcy5fc3RhdGU9Myl9fXJldHVybiBuLmluaXRpYWxTdHlsZXNCeUVsZW1lbnQ9bmV3IFdlYWtNYXAsbn0pKCk7ZnVuY3Rpb24gZk8obil7bGV0IHQ9bnVsbDtyZXR1cm4gbi5mb3JFYWNoKChlLGkpPT57KGZ1bmN0aW9uKG4pe3JldHVybiJkaXNwbGF5Ij09PW58fCJwb3NpdGlvbiI9PT1ufSkoaSkmJih0PXR8fG5ldyBNYXAsdC5zZXQoaSxlKSl9KSx0fXZhciBWdz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLmVsZW1lbnQ9dCx0aGlzLmtleWZyYW1lcz1lLHRoaXMub3B0aW9ucz1pLHRoaXMuX3NwZWNpYWxTdHlsZXM9cix0aGlzLl9vbkRvbmVGbnM9W10sdGhpcy5fb25TdGFydEZucz1bXSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10sdGhpcy5faW5pdGlhbGl6ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fb3JpZ2luYWxPbkRvbmVGbnM9W10sdGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zPVtdLHRoaXMudGltZT0wLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy5jdXJyZW50U25hcHNob3Q9bmV3IE1hcCx0aGlzLl9kdXJhdGlvbj1pLmR1cmF0aW9uLHRoaXMuX2RlbGF5PWkuZGVsYXl8fDAsdGhpcy50aW1lPXRoaXMuX2R1cmF0aW9uK3RoaXMuX2RlbGF5fV9vbkZpbmlzaCgpe3RoaXMuX2ZpbmlzaGVkfHwodGhpcy5fZmluaXNoZWQ9ITAsdGhpcy5fb25Eb25lRm5zLmZvckVhY2godD0+dCgpKSx0aGlzLl9vbkRvbmVGbnM9W10pfWluaXQoKXt0aGlzLl9idWlsZFBsYXllcigpLHRoaXMuX3ByZXBhcmVQbGF5ZXJCZWZvcmVTdGFydCgpfV9idWlsZFBsYXllcigpe2lmKHRoaXMuX2luaXRpYWxpemVkKXJldHVybjt0aGlzLl9pbml0aWFsaXplZD0hMDtsZXQgdD10aGlzLmtleWZyYW1lczt0aGlzLmRvbVBsYXllcj10aGlzLl90cmlnZ2VyV2ViQW5pbWF0aW9uKHRoaXMuZWxlbWVudCx0LHRoaXMub3B0aW9ucyksdGhpcy5fZmluYWxLZXlmcmFtZT10Lmxlbmd0aD90W3QubGVuZ3RoLTFdOm5ldyBNYXAsdGhpcy5kb21QbGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcigiZmluaXNoIiwoKT0+dGhpcy5fb25GaW5pc2goKSl9X3ByZXBhcmVQbGF5ZXJCZWZvcmVTdGFydCgpe3RoaXMuX2RlbGF5P3RoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKTp0aGlzLmRvbVBsYXllci5wYXVzZSgpfV9jb252ZXJ0S2V5ZnJhbWVzVG9PYmplY3QodCl7bGV0IGU9W107cmV0dXJuIHQuZm9yRWFjaChpPT57ZS5wdXNoKE9iamVjdC5mcm9tRW50cmllcyhpKSl9KSxlfV90cmlnZ2VyV2ViQW5pbWF0aW9uKHQsZSxpKXtyZXR1cm4gdC5hbmltYXRlKHRoaXMuX2NvbnZlcnRLZXlmcmFtZXNUb09iamVjdChlKSxpKX1vblN0YXJ0KHQpe3RoaXMuX29yaWdpbmFsT25TdGFydEZucy5wdXNoKHQpLHRoaXMuX29uU3RhcnRGbnMucHVzaCh0KX1vbkRvbmUodCl7dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnMucHVzaCh0KSx0aGlzLl9vbkRvbmVGbnMucHVzaCh0KX1vbkRlc3Ryb3kodCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2godCl9cGxheSgpe3RoaXMuX2J1aWxkUGxheWVyKCksdGhpcy5oYXNTdGFydGVkKCl8fCh0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2godD0+dCgpKSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITAsdGhpcy5fc3BlY2lhbFN0eWxlcyYmdGhpcy5fc3BlY2lhbFN0eWxlcy5zdGFydCgpKSx0aGlzLmRvbVBsYXllci5wbGF5KCl9cGF1c2UoKXt0aGlzLmluaXQoKSx0aGlzLmRvbVBsYXllci5wYXVzZSgpfWZpbmlzaCgpe3RoaXMuaW5pdCgpLHRoaXMuX3NwZWNpYWxTdHlsZXMmJnRoaXMuX3NwZWNpYWxTdHlsZXMuZmluaXNoKCksdGhpcy5fb25GaW5pc2goKSx0aGlzLmRvbVBsYXllci5maW5pc2goKX1yZXNldCgpe3RoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9vblN0YXJ0Rm5zPXRoaXMuX29yaWdpbmFsT25TdGFydEZucyx0aGlzLl9vbkRvbmVGbnM9dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnN9X3Jlc2V0RG9tUGxheWVyU3RhdGUoKXt0aGlzLmRvbVBsYXllciYmdGhpcy5kb21QbGF5ZXIuY2FuY2VsKCl9cmVzdGFydCgpe3RoaXMucmVzZXQoKSx0aGlzLnBsYXkoKX1oYXNTdGFydGVkKCl7cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9ZGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9yZXNldERvbVBsYXllclN0YXRlKCksdGhpcy5fb25GaW5pc2goKSx0aGlzLl9zcGVjaWFsU3R5bGVzJiZ0aGlzLl9zcGVjaWFsU3R5bGVzLmRlc3Ryb3koKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaCh0PT50KCkpLHRoaXMuX29uRGVzdHJveUZucz1bXSl9c2V0UG9zaXRpb24odCl7dm9pZCAwPT09dGhpcy5kb21QbGF5ZXImJnRoaXMuaW5pdCgpLHRoaXMuZG9tUGxheWVyLmN1cnJlbnRUaW1lPXQqdGhpcy50aW1lfWdldFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuZG9tUGxheWVyLmN1cnJlbnRUaW1lL3RoaXMudGltZX1nZXQgdG90YWxUaW1lKCl7cmV0dXJuIHRoaXMuX2RlbGF5K3RoaXMuX2R1cmF0aW9ufWJlZm9yZURlc3Ryb3koKXtsZXQgdD1uZXcgTWFwO3RoaXMuaGFzU3RhcnRlZCgpJiZ0aGlzLl9maW5hbEtleWZyYW1lLmZvckVhY2goKGkscik9Pnsib2Zmc2V0IiE9PXImJnQuc2V0KHIsdGhpcy5fZmluaXNoZWQ/aTpCRyh0aGlzLmVsZW1lbnQscikpfSksdGhpcy5jdXJyZW50U25hcHNob3Q9dH10cmlnZ2VyQ2FsbGJhY2sodCl7bGV0IGU9InN0YXJ0Ij09PXQ/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7ZS5mb3JFYWNoKGk9PmkoKSksZS5sZW5ndGg9MH19LHhtZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgRmJ7Y29uc3RydWN0b3IoZSxpKXtzdXBlcigpLHRoaXMuX25leHRBbmltYXRpb25JZD0wLHRoaXMuX3JlbmRlcmVyPWUuY3JlYXRlUmVuZGVyZXIoaS5ib2R5LHtpZDoiMCIsZW5jYXBzdWxhdGlvbjphcy5Ob25lLHN0eWxlczpbXSxkYXRhOnthbmltYXRpb246W119fSl9YnVpbGQoZSl7bGV0IGk9dGhpcy5fbmV4dEFuaW1hdGlvbklkLnRvU3RyaW5nKCk7dGhpcy5fbmV4dEFuaW1hdGlvbklkKys7bGV0IHI9QXJyYXkuaXNBcnJheShlKT9FdyhlKTplO3JldHVybiBYRyh0aGlzLl9yZW5kZXJlcixudWxsLGksInJlZ2lzdGVyIixbcl0pLG5ldyBMTyhpLHRoaXMuX3JlbmRlcmVyKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhjYyksTyhOdCkpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLExPPWNsYXNzIGV4dGVuZHMgU3d7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuX2lkPXQsdGhpcy5fcmVuZGVyZXI9ZX1jcmVhdGUodCxlKXtyZXR1cm4gbmV3IEJPKHRoaXMuX2lkLHQsZXx8e30sdGhpcy5fcmVuZGVyZXIpfX0sQk89Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5pZD10LHRoaXMuZWxlbWVudD1lLHRoaXMuX3JlbmRlcmVyPXIsdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLl9zdGFydGVkPSExLHRoaXMudG90YWxUaW1lPTAsdGhpcy5fY29tbWFuZCgiY3JlYXRlIixpKX1fbGlzdGVuKHQsZSl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmxpc3Rlbih0aGlzLmVsZW1lbnQsYEBAJHt0aGlzLmlkfToke3R9YCxlKX1fY29tbWFuZCh0LC4uLmUpe3JldHVybiBYRyh0aGlzLl9yZW5kZXJlcix0aGlzLmVsZW1lbnQsdGhpcy5pZCx0LGUpfW9uRG9uZSh0KXt0aGlzLl9saXN0ZW4oImRvbmUiLHQpfW9uU3RhcnQodCl7dGhpcy5fbGlzdGVuKCJzdGFydCIsdCl9b25EZXN0cm95KHQpe3RoaXMuX2xpc3RlbigiZGVzdHJveSIsdCl9aW5pdCgpe3RoaXMuX2NvbW1hbmQoImluaXQiKX1oYXNTdGFydGVkKCl7cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9cGxheSgpe3RoaXMuX2NvbW1hbmQoInBsYXkiKSx0aGlzLl9zdGFydGVkPSEwfXBhdXNlKCl7dGhpcy5fY29tbWFuZCgicGF1c2UiKX1yZXN0YXJ0KCl7dGhpcy5fY29tbWFuZCgicmVzdGFydCIpfWZpbmlzaCgpe3RoaXMuX2NvbW1hbmQoImZpbmlzaCIpfWRlc3Ryb3koKXt0aGlzLl9jb21tYW5kKCJkZXN0cm95Iil9cmVzZXQoKXt0aGlzLl9jb21tYW5kKCJyZXNldCIpLHRoaXMuX3N0YXJ0ZWQ9ITF9c2V0UG9zaXRpb24odCl7dGhpcy5fY29tbWFuZCgic2V0UG9zaXRpb24iLHQpfWdldFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmVuZ2luZS5wbGF5ZXJzWyt0aGlzLmlkXT8uZ2V0UG9zaXRpb24oKT8/MH19O2Z1bmN0aW9uIFhHKG4sdCxlLGkscil7cmV0dXJuIG4uc2V0UHJvcGVydHkodCxgQEAke2V9OiR7aX1gLHIpfXZhciBZRz0iQC5kaXNhYmxlZCIsQ21lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuZGVsZWdhdGU9ZSx0aGlzLmVuZ2luZT1pLHRoaXMuX3pvbmU9cix0aGlzLl9jdXJyZW50SWQ9MCx0aGlzLl9taWNyb3Rhc2tJZD0xLHRoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlcj1bXSx0aGlzLl9yZW5kZXJlckNhY2hlPW5ldyBNYXAsdGhpcy5fY2RSZWN1ckRlcHRoPTAsdGhpcy5wcm9taXNlPVByb21pc2UucmVzb2x2ZSgwKSxpLm9uUmVtb3ZhbENvbXBsZXRlPShvLGEpPT57bGV0IHM9YT8ucGFyZW50Tm9kZShvKTtzJiZhLnJlbW92ZUNoaWxkKHMsbyl9fWNyZWF0ZVJlbmRlcmVyKGUsaSl7bGV0IG89dGhpcy5kZWxlZ2F0ZS5jcmVhdGVSZW5kZXJlcihlLGkpO2lmKCEoZSYmaSYmaS5kYXRhJiZpLmRhdGEuYW5pbWF0aW9uKSl7bGV0IGQ9dGhpcy5fcmVuZGVyZXJDYWNoZS5nZXQobyk7cmV0dXJuIGR8fChkPW5ldyBVdygiIixvLHRoaXMuZW5naW5lLCgpPT50aGlzLl9yZW5kZXJlckNhY2hlLmRlbGV0ZShvKSksdGhpcy5fcmVuZGVyZXJDYWNoZS5zZXQobyxkKSksZH1sZXQgYT1pLmlkLHM9aS5pZCsiLSIrdGhpcy5fY3VycmVudElkO3RoaXMuX2N1cnJlbnRJZCsrLHRoaXMuZW5naW5lLnJlZ2lzdGVyKHMsZSk7bGV0IGw9ZD0+e0FycmF5LmlzQXJyYXkoZCk/ZC5mb3JFYWNoKGwpOnRoaXMuZW5naW5lLnJlZ2lzdGVyVHJpZ2dlcihhLHMsZSxkLm5hbWUsZCl9O3JldHVybiBpLmRhdGEuYW5pbWF0aW9uLmZvckVhY2gobCksbmV3IFZPKHRoaXMscyxvLHRoaXMuZW5naW5lKX1iZWdpbigpe3RoaXMuX2NkUmVjdXJEZXB0aCsrLHRoaXMuZGVsZWdhdGUuYmVnaW4mJnRoaXMuZGVsZWdhdGUuYmVnaW4oKX1fc2NoZWR1bGVDb3VudFRhc2soKXt0aGlzLnByb21pc2UudGhlbigoKT0+e3RoaXMuX21pY3JvdGFza0lkKyt9KX1zY2hlZHVsZUxpc3RlbmVyQ2FsbGJhY2soZSxpLHIpe2U+PTAmJmU8dGhpcy5fbWljcm90YXNrSWQ/dGhpcy5fem9uZS5ydW4oKCk9PmkocikpOigwPT10aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXIubGVuZ3RoJiZQcm9taXNlLnJlc29sdmUobnVsbCkudGhlbigoKT0+e3RoaXMuX3pvbmUucnVuKCgpPT57dGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyLmZvckVhY2gobz0+e2xldFthLHNdPW87YShzKX0pLHRoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlcj1bXX0pfSksdGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyLnB1c2goW2kscl0pKX1lbmQoKXt0aGlzLl9jZFJlY3VyRGVwdGgtLSwwPT10aGlzLl9jZFJlY3VyRGVwdGgmJnRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9zY2hlZHVsZUNvdW50VGFzaygpLHRoaXMuZW5naW5lLmZsdXNoKHRoaXMuX21pY3JvdGFza0lkKX0pLHRoaXMuZGVsZWdhdGUuZW5kJiZ0aGlzLmRlbGVnYXRlLmVuZCgpfXdoZW5SZW5kZXJpbmdEb25lKCl7cmV0dXJuIHRoaXMuZW5naW5lLndoZW5SZW5kZXJpbmdEb25lKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oY2MpLE8obXUpLE8ob3QpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxVdz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLm5hbWVzcGFjZUlkPXQsdGhpcy5kZWxlZ2F0ZT1lLHRoaXMuZW5naW5lPWksdGhpcy5fb25EZXN0cm95PXIsdGhpcy5kZXN0cm95Tm9kZT10aGlzLmRlbGVnYXRlLmRlc3Ryb3lOb2RlP289PmUuZGVzdHJveU5vZGUobyk6bnVsbH1nZXQgZGF0YSgpe3JldHVybiB0aGlzLmRlbGVnYXRlLmRhdGF9ZGVzdHJveSgpe3RoaXMuZW5naW5lLmRlc3Ryb3kodGhpcy5uYW1lc3BhY2VJZCx0aGlzLmRlbGVnYXRlKSx0aGlzLmRlbGVnYXRlLmRlc3Ryb3koKSx0aGlzLl9vbkRlc3Ryb3k/LigpfWNyZWF0ZUVsZW1lbnQodCxlKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVFbGVtZW50KHQsZSl9Y3JlYXRlQ29tbWVudCh0KXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVDb21tZW50KHQpfWNyZWF0ZVRleHQodCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlVGV4dCh0KX1hcHBlbmRDaGlsZCh0LGUpe3RoaXMuZGVsZWdhdGUuYXBwZW5kQ2hpbGQodCxlKSx0aGlzLmVuZ2luZS5vbkluc2VydCh0aGlzLm5hbWVzcGFjZUlkLGUsdCwhMSl9aW5zZXJ0QmVmb3JlKHQsZSxpLHI9ITApe3RoaXMuZGVsZWdhdGUuaW5zZXJ0QmVmb3JlKHQsZSxpKSx0aGlzLmVuZ2luZS5vbkluc2VydCh0aGlzLm5hbWVzcGFjZUlkLGUsdCxyKX1yZW1vdmVDaGlsZCh0LGUsaSl7dGhpcy5lbmdpbmUub25SZW1vdmUodGhpcy5uYW1lc3BhY2VJZCxlLHRoaXMuZGVsZWdhdGUsaSl9c2VsZWN0Um9vdEVsZW1lbnQodCxlKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5zZWxlY3RSb290RWxlbWVudCh0LGUpfXBhcmVudE5vZGUodCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUucGFyZW50Tm9kZSh0KX1uZXh0U2libGluZyh0KXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5uZXh0U2libGluZyh0KX1zZXRBdHRyaWJ1dGUodCxlLGkscil7dGhpcy5kZWxlZ2F0ZS5zZXRBdHRyaWJ1dGUodCxlLGkscil9cmVtb3ZlQXR0cmlidXRlKHQsZSxpKXt0aGlzLmRlbGVnYXRlLnJlbW92ZUF0dHJpYnV0ZSh0LGUsaSl9YWRkQ2xhc3ModCxlKXt0aGlzLmRlbGVnYXRlLmFkZENsYXNzKHQsZSl9cmVtb3ZlQ2xhc3ModCxlKXt0aGlzLmRlbGVnYXRlLnJlbW92ZUNsYXNzKHQsZSl9c2V0U3R5bGUodCxlLGkscil7dGhpcy5kZWxlZ2F0ZS5zZXRTdHlsZSh0LGUsaSxyKX1yZW1vdmVTdHlsZSh0LGUsaSl7dGhpcy5kZWxlZ2F0ZS5yZW1vdmVTdHlsZSh0LGUsaSl9c2V0UHJvcGVydHkodCxlLGkpeyJAIj09ZS5jaGFyQXQoMCkmJmU9PVlHP3RoaXMuZGlzYWJsZUFuaW1hdGlvbnModCwhIWkpOnRoaXMuZGVsZWdhdGUuc2V0UHJvcGVydHkodCxlLGkpfXNldFZhbHVlKHQsZSl7dGhpcy5kZWxlZ2F0ZS5zZXRWYWx1ZSh0LGUpfWxpc3Rlbih0LGUsaSl7cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKHQsZSxpKX1kaXNhYmxlQW5pbWF0aW9ucyh0LGUpe3RoaXMuZW5naW5lLmRpc2FibGVBbmltYXRpb25zKHQsZSl9fSxWTz1jbGFzcyBleHRlbmRzIFV3e2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7c3VwZXIoZSxpLHIsbyksdGhpcy5mYWN0b3J5PXQsdGhpcy5uYW1lc3BhY2VJZD1lfXNldFByb3BlcnR5KHQsZSxpKXsiQCI9PWUuY2hhckF0KDApPyIuIj09ZS5jaGFyQXQoMSkmJmU9PVlHP3RoaXMuZGlzYWJsZUFuaW1hdGlvbnModCxpPXZvaWQgMD09PWl8fCEhaSk6dGhpcy5lbmdpbmUucHJvY2Vzcyh0aGlzLm5hbWVzcGFjZUlkLHQsZS5zbGljZSgxKSxpKTp0aGlzLmRlbGVnYXRlLnNldFByb3BlcnR5KHQsZSxpKX1saXN0ZW4odCxlLGkpe2lmKCJAIj09ZS5jaGFyQXQoMCkpe2xldCByPWZ1bmN0aW9uKG4pe3N3aXRjaChuKXtjYXNlImJvZHkiOnJldHVybiBkb2N1bWVudC5ib2R5O2Nhc2UiZG9jdW1lbnQiOnJldHVybiBkb2N1bWVudDtjYXNlIndpbmRvdyI6cmV0dXJuIHdpbmRvdztkZWZhdWx0OnJldHVybiBufX0odCksbz1lLnNsaWNlKDEpLGE9IiI7cmV0dXJuIkAiIT1vLmNoYXJBdCgwKSYmKFtvLGFdPWZ1bmN0aW9uKG4pe2xldCB0PW4uaW5kZXhPZigiLiIpO3JldHVybltuLnN1YnN0cmluZygwLHQpLG4uc2xpY2UodCsxKV19KG8pKSx0aGlzLmVuZ2luZS5saXN0ZW4odGhpcy5uYW1lc3BhY2VJZCxyLG8sYSxzPT57dGhpcy5mYWN0b3J5LnNjaGVkdWxlTGlzdGVuZXJDYWxsYmFjayhzLl9kYXRhfHwtMSxpLHMpfSl9cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKHQsZSxpKX19LFNtZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgbXV7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIoZS5ib2R5LGkscil9bmdPbkRlc3Ryb3koKXt0aGlzLmZsdXNoKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oTnQpLE8ocWIpLE8obGgpLE8oZ2MpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxRRz1be3Byb3ZpZGU6RmIsdXNlQ2xhc3M6eG1lfSx7cHJvdmlkZTpsaCx1c2VGYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBMd319LHtwcm92aWRlOm11LHVzZUNsYXNzOlNtZX0se3Byb3ZpZGU6Y2MsdXNlRmFjdG9yeTpmdW5jdGlvbihuLHQsZSl7cmV0dXJuIG5ldyBDbWUobix0LGUpfSxkZXBzOltSYixtdSxvdF19XSxxRz1be3Byb3ZpZGU6cWIsdXNlRmFjdG9yeTooKT0+bmV3IGNsYXNze3ZhbGlkYXRlU3R5bGVQcm9wZXJ0eSh0KXtyZXR1cm4hMH12YWxpZGF0ZUFuaW1hdGFibGVTdHlsZVByb3BlcnR5KHQpe3JldHVybiEwfW1hdGNoZXNFbGVtZW50KHQsZSl7cmV0dXJuITF9Y29udGFpbnNFbGVtZW50KHQsZSl7cmV0dXJuIFJHKHQsZSl9Z2V0UGFyZW50RWxlbWVudCh0KXtyZXR1cm4ga08odCl9cXVlcnkodCxlLGkpe3JldHVybiBQRyh0LGUsaSl9Y29tcHV0ZVN0eWxlKHQsZSxpKXtyZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUodClbZV19YW5pbWF0ZSh0LGUsaSxyLG8sYT1bXSl7bGV0IGw9e2R1cmF0aW9uOmksZGVsYXk6cixmaWxsOjA9PXI/ImJvdGgiOiJmb3J3YXJkcyJ9O28mJihsLmVhc2luZz1vKTtsZXQgYz1uZXcgTWFwLGQ9YS5maWx0ZXIoaD0+aCBpbnN0YW5jZW9mIFZ3KTsoZnVuY3Rpb24obix0KXtyZXR1cm4gMD09PW58fDA9PT10fSkoaSxyKSYmZC5mb3JFYWNoKGg9PntoLmN1cnJlbnRTbmFwc2hvdC5mb3JFYWNoKChtLF8pPT5jLnNldChfLG0pKX0pO2xldCB1PShuPWUsbi5sZW5ndGg/blswXWluc3RhbmNlb2YgTWFwP246bi5tYXAodD0+RkcodCkpOltdKS5tYXAoaD0+RWYoaCkpO3ZhciBuO3U9ZnVuY3Rpb24obix0LGUpe2lmKGUuc2l6ZSYmdC5sZW5ndGgpe2xldCBpPXRbMF0scj1bXTtpZihlLmZvckVhY2goKG8sYSk9PntpLmhhcyhhKXx8ci5wdXNoKGEpLGkuc2V0KGEsbyl9KSxyLmxlbmd0aClmb3IobGV0IG89MTtvPHQubGVuZ3RoO28rKyl7bGV0IGE9dFtvXTtyLmZvckVhY2gocz0+YS5zZXQocyxCRyhuLHMpKSl9fXJldHVybiB0fSh0LHUsYyk7bGV0IHA9ZnVuY3Rpb24obix0KXtsZXQgZT1udWxsLGk9bnVsbDtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmdC5sZW5ndGg/KGU9Zk8odFswXSksdC5sZW5ndGg+MSYmKGk9Zk8odFt0Lmxlbmd0aC0xXSkpKTp0IGluc3RhbmNlb2YgTWFwJiYoZT1mTyh0KSksZXx8aT9uZXcgYm1lKG4sZSxpKTpudWxsfSh0LHUpO3JldHVybiBuZXcgVncodCx1LGwscCl9fX0se3Byb3ZpZGU6cGksdXNlVmFsdWU6IkJyb3dzZXJBbmltYXRpb25zIn0sLi4uUUddLERtZT1be3Byb3ZpZGU6cWIsdXNlQ2xhc3M6T099LHtwcm92aWRlOnBpLHVzZVZhbHVlOiJOb29wQW5pbWF0aW9ucyJ9LC4uLlFHXSxaRz0oKCk9PntjbGFzcyBue3N0YXRpYyB3aXRoQ29uZmlnKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczplLmRpc2FibGVBbmltYXRpb25zP0RtZTpxR319fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1IKHtwcm92aWRlcnM6cUcsaW1wb3J0czpbd3ddfSksbn0pKCksak89e307ZnVuY3Rpb24gZmUobix0KXtpZihqT1tuXT0oak9bbl18fDApKzEsImZ1bmN0aW9uIj09dHlwZW9mIHQpcmV0dXJuIEhPKG4sKC4uLmkpPT4oey4uLnQoLi4uaSksdHlwZTpufSkpO3N3aXRjaCh0P3QuX2FzOiJlbXB0eSIpe2Nhc2UiZW1wdHkiOnJldHVybiBITyhuLCgpPT4oe3R5cGU6bn0pKTtjYXNlInByb3BzIjpyZXR1cm4gSE8obixpPT4oey4uLmksdHlwZTpufSkpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIGNvbmZpZy4iKX19ZnVuY3Rpb24gSE8obix0KXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInR5cGUiLHt2YWx1ZTpuLHdyaXRhYmxlOiExfSl9dmFyIHA4PSJAbmdyeC9zdG9yZS9pbml0IixJZj0oKCk9PntjbGFzcyBuIGV4dGVuZHMgeHJ7Y29uc3RydWN0b3IoKXtzdXBlcih7dHlwZTpwOH0pfW5leHQoZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiXG4gICAgICAgIERpc3BhdGNoIGV4cGVjdGVkIGFuIG9iamVjdCwgaW5zdGVhZCBpdCByZWNlaXZlZCBhIGZ1bmN0aW9uLlxuICAgICAgICBJZiB5b3UncmUgdXNpbmcgdGhlIGNyZWF0ZUFjdGlvbiBmdW5jdGlvbiwgbWFrZSBzdXJlIHRvIGludm9rZSB0aGUgZnVuY3Rpb25cbiAgICAgICAgYmVmb3JlIGRpc3BhdGNoaW5nIHRoZSBhY3Rpb24uIEZvciBleGFtcGxlLCBzb21lQWN0aW9uIHNob3VsZCBiZSBzb21lQWN0aW9uKCkuIik7aWYodHlwZW9mIGU+InUiKXRocm93IG5ldyBUeXBlRXJyb3IoIkFjdGlvbnMgbXVzdCBiZSBvYmplY3RzIik7aWYodHlwZW9mIGUudHlwZT4idSIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQWN0aW9ucyBtdXN0IGhhdmUgYSB0eXBlIHByb3BlcnR5Iik7c3VwZXIubmV4dChlKX1jb21wbGV0ZSgpe31uZ09uRGVzdHJveSgpe3N1cGVyLmNvbXBsZXRlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLEltZT1bSWZdLGg4PW5ldyB0ZSgiQG5ncngvc3RvcmUgSW50ZXJuYWwgUm9vdCBHdWFyZCIpLEtHPW5ldyB0ZSgiQG5ncngvc3RvcmUgSW50ZXJuYWwgSW5pdGlhbCBTdGF0ZSIpLFhPPW5ldyB0ZSgiQG5ncngvc3RvcmUgSW5pdGlhbCBTdGF0ZSIpLG04PW5ldyB0ZSgiQG5ncngvc3RvcmUgUmVkdWNlciBGYWN0b3J5IiksSkc9bmV3IHRlKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBSZWR1Y2VyIEZhY3RvcnkgUHJvdmlkZXIiKSxmOD1uZXcgdGUoIkBuZ3J4L3N0b3JlIEluaXRpYWwgUmVkdWNlcnMiKSx6Tz1uZXcgdGUoIkBuZ3J4L3N0b3JlIEludGVybmFsIEluaXRpYWwgUmVkdWNlcnMiKSwkRz1uZXcgdGUoIkBuZ3J4L3N0b3JlIFN0b3JlIEZlYXR1cmVzIiksZTg9bmV3IHRlKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBTdG9yZSBSZWR1Y2VycyIpLFVPPW5ldyB0ZSgiQG5ncngvc3RvcmUgSW50ZXJuYWwgRmVhdHVyZSBSZWR1Y2VycyIpLHQ4PW5ldyB0ZSgiQG5ncngvc3RvcmUgSW50ZXJuYWwgRmVhdHVyZSBDb25maWdzIiksZzg9bmV3IHRlKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBTdG9yZSBGZWF0dXJlcyIpLG44PW5ldyB0ZSgiQG5ncngvc3RvcmUgSW50ZXJuYWwgRmVhdHVyZSBSZWR1Y2VycyBUb2tlbiIpLF84PW5ldyB0ZSgiQG5ncngvc3RvcmUgRmVhdHVyZSBSZWR1Y2VycyIpLGk4PW5ldyB0ZSgiQG5ncngvc3RvcmUgVXNlciBQcm92aWRlZCBNZXRhIFJlZHVjZXJzIiksRGY9bmV3IHRlKCJAbmdyeC9zdG9yZSBNZXRhIFJlZHVjZXJzIikscjg9bmV3IHRlKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBSZXNvbHZlZCBNZXRhIFJlZHVjZXJzIiksbzg9bmV3IHRlKCJAbmdyeC9zdG9yZSBVc2VyIFJ1bnRpbWUgQ2hlY2tzIENvbmZpZyIpLGE4PW5ldyB0ZSgiQG5ncngvc3RvcmUgSW50ZXJuYWwgVXNlciBSdW50aW1lIENoZWNrcyBDb25maWciKSxZYj1uZXcgdGUoIkBuZ3J4L3N0b3JlIEludGVybmFsIFJ1bnRpbWUgQ2hlY2tzIiksWU89bmV3IHRlKCJAbmdyeC9zdG9yZSBDaGVjayBpZiBBY3Rpb24gdHlwZXMgYXJlIHVuaXF1ZSIpO2Z1bmN0aW9uIGNoKG4sdD17fSl7bGV0IGU9T2JqZWN0LmtleXMobiksaT17fTtmb3IobGV0IG89MDtvPGUubGVuZ3RoO28rKyl7bGV0IGE9ZVtvXTsiZnVuY3Rpb24iPT10eXBlb2YgblthXSYmKGlbYV09blthXSl9bGV0IHI9T2JqZWN0LmtleXMoaSk7cmV0dXJuIGZ1bmN0aW9uKGEscyl7YT12b2lkIDA9PT1hP3Q6YTtsZXQgbD0hMSxjPXt9O2ZvcihsZXQgZD0wO2Q8ci5sZW5ndGg7ZCsrKXtsZXQgdT1yW2RdLGg9YVt1XSxtPSgwLGlbdV0pKGgscyk7Y1t1XT1tLGw9bHx8bSE9PWh9cmV0dXJuIGw/YzphfX1mdW5jdGlvbiBiOCguLi5uKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoMD09PW4ubGVuZ3RoKXJldHVybiB0O2xldCBlPW5bbi5sZW5ndGgtMV07cmV0dXJuIG4uc2xpY2UoMCwtMSkucmVkdWNlUmlnaHQoKHIsbyk9Pm8ociksZSh0KSl9fWZ1bmN0aW9uIHY4KG4sdCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCkmJnQubGVuZ3RoPjAmJihuPWI4LmFwcGx5KG51bGwsWy4uLnQsbl0pKSwoZSxpKT0+e2xldCByPW4oZSk7cmV0dXJuKG8sYSk9PnIobz12b2lkIDA9PT1vP2k6byxhKX19bmV3IHRlKCJAbmdyeC9zdG9yZSBSb290IFN0b3JlIFByb3ZpZGVyIiksbmV3IHRlKCJAbmdyeC9zdG9yZSBGZWF0dXJlIFN0YXRlIFByb3ZpZGVyIik7dmFyIFFiPWNsYXNzIGV4dGVuZHMgS3R7fSxqdz1jbGFzcyBleHRlbmRzIElme30sR3c9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHhye2NvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKG8ocixpKSksdGhpcy5kaXNwYXRjaGVyPWUsdGhpcy5pbml0aWFsU3RhdGU9aSx0aGlzLnJlZHVjZXJzPXIsdGhpcy5yZWR1Y2VyRmFjdG9yeT1vfWdldCBjdXJyZW50UmVkdWNlcnMoKXtyZXR1cm4gdGhpcy5yZWR1Y2Vyc31hZGRGZWF0dXJlKGUpe3RoaXMuYWRkRmVhdHVyZXMoW2VdKX1hZGRGZWF0dXJlcyhlKXtsZXQgaT1lLnJlZHVjZSgocix7cmVkdWNlcnM6byxyZWR1Y2VyRmFjdG9yeTphLG1ldGFSZWR1Y2VyczpzLGluaXRpYWxTdGF0ZTpsLGtleTpjfSk9PntsZXQgZD0iZnVuY3Rpb24iPT10eXBlb2Ygbz9mdW5jdGlvbihuKXtsZXQgdD1BcnJheS5pc0FycmF5KG4pJiZuLmxlbmd0aD4wP2I4KC4uLm4pOmU9PmU7cmV0dXJuKGUsaSk9PihlPXQoZSksKHIsbyk9PmUocj12b2lkIDA9PT1yP2k6cixvKSl9KHMpKG8sbCk6djgoYSxzKShvLGwpO3JldHVybiByW2NdPWQscn0se30pO3RoaXMuYWRkUmVkdWNlcnMoaSl9cmVtb3ZlRmVhdHVyZShlKXt0aGlzLnJlbW92ZUZlYXR1cmVzKFtlXSl9cmVtb3ZlRmVhdHVyZXMoZSl7dGhpcy5yZW1vdmVSZWR1Y2VycyhlLm1hcChpPT5pLmtleSkpfWFkZFJlZHVjZXIoZSxpKXt0aGlzLmFkZFJlZHVjZXJzKHtbZV06aX0pfWFkZFJlZHVjZXJzKGUpe3RoaXMucmVkdWNlcnM9ey4uLnRoaXMucmVkdWNlcnMsLi4uZX0sdGhpcy51cGRhdGVSZWR1Y2VycyhPYmplY3Qua2V5cyhlKSl9cmVtb3ZlUmVkdWNlcihlKXt0aGlzLnJlbW92ZVJlZHVjZXJzKFtlXSl9cmVtb3ZlUmVkdWNlcnMoZSl7ZS5mb3JFYWNoKGk9Pnt0aGlzLnJlZHVjZXJzPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIE9iamVjdC5rZXlzKG4pLmZpbHRlcihlPT5lIT09dCkucmVkdWNlKChlLGkpPT5PYmplY3QuYXNzaWduKGUse1tpXTpuW2ldfSkse30pfSh0aGlzLnJlZHVjZXJzLGkpfSksdGhpcy51cGRhdGVSZWR1Y2VycyhlKX11cGRhdGVSZWR1Y2VycyhlKXt0aGlzLm5leHQodGhpcy5yZWR1Y2VyRmFjdG9yeSh0aGlzLnJlZHVjZXJzLHRoaXMuaW5pdGlhbFN0YXRlKSksdGhpcy5kaXNwYXRjaGVyLm5leHQoe3R5cGU6IkBuZ3J4L3N0b3JlL3VwZGF0ZS1yZWR1Y2VycyIsZmVhdHVyZXM6ZX0pfW5nT25EZXN0cm95KCl7dGhpcy5jb21wbGV0ZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKGp3KSxPKFhPKSxPKGY4KSxPKG04KSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksRm1lPVtHdyx7cHJvdmlkZTpRYix1c2VFeGlzdGluZzpHd30se3Byb3ZpZGU6ancsdXNlRXhpc3Rpbmc6SWZ9XSxaYj0oKCk9PntjbGFzcyBuIGV4dGVuZHMgRWV7bmdPbkRlc3Ryb3koKXt0aGlzLmNvbXBsZXRlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9WG4obikpKShpfHxuKX19KCksbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxObWU9W1piXSxXdz1jbGFzcyBleHRlbmRzIEt0e30sczg9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHhye2NvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKG8pO2xldCBjPWUucGlwZShCcChYQSkpLnBpcGUoSXQoaSkpLnBpcGUoZnVuY3Rpb24obix0KXtyZXR1cm4gWXQoZnVuY3Rpb24obix0LGUsaSxyKXtyZXR1cm4obyxhKT0+e2xldCBzPWUsbD10LGM9MDtvLnN1YnNjcmliZShIdChhLGQ9PntsZXQgdT1jKys7bD1zP24obCxkLHUpOihzPSEwLGQpLGEubmV4dChsKX0sdm9pZCAwKSl9fShuLHQsYXJndW1lbnRzLmxlbmd0aD49MikpfShMbWUse3N0YXRlOm99KSk7dGhpcy5zdGF0ZVN1YnNjcmlwdGlvbj1jLnN1YnNjcmliZSgoe3N0YXRlOmQsYWN0aW9uOnV9KT0+e3RoaXMubmV4dChkKSxyLm5leHQodSl9KX1uZ09uRGVzdHJveSgpe3RoaXMuc3RhdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLmNvbXBsZXRlKCl9fXJldHVybiBuLklOSVQ9cDgsbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKElmKSxPKFFiKSxPKFpiKSxPKFhPKSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCk7ZnVuY3Rpb24gTG1lKG49e3N0YXRlOnZvaWQgMH0sW3QsZV0pe2xldHtzdGF0ZTppfT1uO3JldHVybntzdGF0ZTplKGksdCksYWN0aW9uOnR9fXZhciBCbWU9W3M4LHtwcm92aWRlOld3LHVzZUV4aXN0aW5nOnM4fV0sSWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEt0e2NvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcigpLHRoaXMuYWN0aW9uc09ic2VydmVyPWksdGhpcy5yZWR1Y2VyTWFuYWdlcj1yLHRoaXMuc291cmNlPWV9c2VsZWN0KGUsLi4uaSl7cmV0dXJuIHVuLmNhbGwobnVsbCxlLC4uLmkpKHRoaXMpfWxpZnQoZSl7bGV0IGk9bmV3IG4odGhpcyx0aGlzLmFjdGlvbnNPYnNlcnZlcix0aGlzLnJlZHVjZXJNYW5hZ2VyKTtyZXR1cm4gaS5vcGVyYXRvcj1lLGl9ZGlzcGF0Y2goZSl7dGhpcy5hY3Rpb25zT2JzZXJ2ZXIubmV4dChlKX1uZXh0KGUpe3RoaXMuYWN0aW9uc09ic2VydmVyLm5leHQoZSl9ZXJyb3IoZSl7dGhpcy5hY3Rpb25zT2JzZXJ2ZXIuZXJyb3IoZSl9Y29tcGxldGUoKXt0aGlzLmFjdGlvbnNPYnNlcnZlci5jb21wbGV0ZSgpfWFkZFJlZHVjZXIoZSxpKXt0aGlzLnJlZHVjZXJNYW5hZ2VyLmFkZFJlZHVjZXIoZSxpKX1yZW1vdmVSZWR1Y2VyKGUpe3RoaXMucmVkdWNlck1hbmFnZXIucmVtb3ZlUmVkdWNlcihlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhXdyksTyhJZiksTyhHdykpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLFZtZT1bSWVdO2Z1bmN0aW9uIHVuKG4sdCwuLi5lKXtyZXR1cm4gZnVuY3Rpb24ocil7bGV0IG87aWYoInN0cmluZyI9PXR5cGVvZiBuKXtsZXQgYT1bdCwuLi5lXS5maWx0ZXIoQm9vbGVhbik7bz1yLnBpcGUoZnVuY3Rpb24oLi4ubil7bGV0IHQ9bi5sZW5ndGg7aWYoMD09PXQpdGhyb3cgbmV3IEVycm9yKCJsaXN0IG9mIHByb3BlcnRpZXMgY2Fubm90IGJlIGVtcHR5LiIpO3JldHVybiBxKGU9PntsZXQgaT1lO2ZvcihsZXQgcj0wO3I8dDtyKyspe2xldCBvPWk/LltuW3JdXTtpZighKHR5cGVvZiBvPCJ1IikpcmV0dXJuO2k9b31yZXR1cm4gaX0pfShuLC4uLmEpKX1lbHNle2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoYFVuZXhwZWN0ZWQgdHlwZSAnJHt0eXBlb2Ygbn0nIGluIHNlbGVjdCBvcGVyYXRvciwgZXhwZWN0ZWQgJ3N0cmluZycgb3IgJ2Z1bmN0aW9uJ2ApO289ci5waXBlKHEoYT0+bihhLHQpKSl9cmV0dXJuIG8ucGlwZShyaSgpKX19dmFyIFFPPSJodHRwczovL25ncnguaW8vZ3VpZGUvc3RvcmUvY29uZmlndXJhdGlvbi9ydW50aW1lLWNoZWNrcyI7ZnVuY3Rpb24gbDgobil7cmV0dXJuIHZvaWQgMD09PW59ZnVuY3Rpb24gYzgobil7cmV0dXJuIG51bGw9PT1ufWZ1bmN0aW9uIHk4KG4pe3JldHVybiBBcnJheS5pc0FycmF5KG4pfWZ1bmN0aW9uIHg4KG4pe3JldHVybiJvYmplY3QiPT10eXBlb2YgbiYmbnVsbCE9PW59ZnVuY3Rpb24gR08obil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG59ZnVuY3Rpb24gZDgobix0KXtyZXR1cm4gbj09PXR9ZnVuY3Rpb24gQzgobix0PWQ4LGU9ZDgpe2xldCBvLGk9bnVsbCxyPW51bGw7cmV0dXJue21lbW9pemVkOmZ1bmN0aW9uKCl7aWYodm9pZCAwIT09bylyZXR1cm4gby5yZXN1bHQ7aWYoIWkpcmV0dXJuIHI9bi5hcHBseShudWxsLGFyZ3VtZW50cyksaT1hcmd1bWVudHMscjtpZighZnVuY3Rpb24obix0LGUpe2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKWlmKCFlKG5baV0sdFtpXSkpcmV0dXJuITA7cmV0dXJuITF9KGFyZ3VtZW50cyxpLHQpKXJldHVybiByO2xldCBkPW4uYXBwbHkobnVsbCxhcmd1bWVudHMpO3JldHVybiBpPWFyZ3VtZW50cyxlKHIsZCk/cjoocj1kLGQpfSxyZXNldDpmdW5jdGlvbigpe2k9bnVsbCxyPW51bGx9LHNldFJlc3VsdDpmdW5jdGlvbihkKXtvPXtyZXN1bHQ6ZH19LGNsZWFyUmVzdWx0OmZ1bmN0aW9uKCl7bz12b2lkIDB9fX1mdW5jdGlvbiBXKC4uLm4pe3JldHVybiBmdW5jdGlvbihuLHQ9e3N0YXRlRm46Wm1lfSl7cmV0dXJuIGZ1bmN0aW9uKC4uLmUpe2xldCBpPWU7aWYoQXJyYXkuaXNBcnJheShpWzBdKSl7bGV0W2QsLi4udV09aTtpPVsuLi5kLC4uLnVdfWVsc2UgMT09PWkubGVuZ3RoJiZmdW5jdGlvbihuKXtyZXR1cm4hIW4mJiJvYmplY3QiPT10eXBlb2YgbiYmT2JqZWN0LnZhbHVlcyhuKS5ldmVyeSh0PT4iZnVuY3Rpb24iPT10eXBlb2YgdCl9KGlbMF0pJiYoaT1mdW5jdGlvbihuKXtsZXQgdD1PYmplY3QudmFsdWVzKG4pLGU9T2JqZWN0LmtleXMobik7cmV0dXJuWy4uLnQsKC4uLnIpPT5lLnJlZHVjZSgobyxhLHMpPT4oey4uLm8sW2FdOnJbc119KSx7fSldfShpWzBdKSk7bGV0IHI9aS5zbGljZSgwLGkubGVuZ3RoLTEpLG89aVtpLmxlbmd0aC0xXSxhPXIuZmlsdGVyKGQ9PmQucmVsZWFzZSYmImZ1bmN0aW9uIj09dHlwZW9mIGQucmVsZWFzZSkscz1uKGZ1bmN0aW9uKC4uLmQpe3JldHVybiBvLmFwcGx5KG51bGwsZCl9KSxsPUM4KGZ1bmN0aW9uKGQsdSl7cmV0dXJuIHQuc3RhdGVGbi5hcHBseShudWxsLFtkLHIsdSxzXSl9KTtyZXR1cm4gT2JqZWN0LmFzc2lnbihsLm1lbW9pemVkLHtyZWxlYXNlOmZ1bmN0aW9uKCl7bC5yZXNldCgpLHMucmVzZXQoKSxhLmZvckVhY2goZD0+ZC5yZWxlYXNlKCkpfSxwcm9qZWN0b3I6cy5tZW1vaXplZCxzZXRSZXN1bHQ6bC5zZXRSZXN1bHQsY2xlYXJSZXN1bHQ6bC5jbGVhclJlc3VsdH0pfX0oQzgpKC4uLm4pfWZ1bmN0aW9uIFptZShuLHQsZSxpKXtpZih2b2lkIDA9PT1lKXtsZXQgbz10Lm1hcChhPT5hKG4pKTtyZXR1cm4gaS5tZW1vaXplZC5hcHBseShudWxsLG8pfWxldCByPXQubWFwKG89Pm8obixlKSk7cmV0dXJuIGkubWVtb2l6ZWQuYXBwbHkobnVsbCxbLi4ucixlXSl9ZnVuY3Rpb24gTXIobil7cmV0dXJuIFcodD0+dFtuXSx0PT50KX1mdW5jdGlvbiBlZmUobil7cmV0dXJuIG4gaW5zdGFuY2VvZiB0ZT8kbihuKTpufWZ1bmN0aW9uIHRmZShuLHQpe3JldHVybiB0Lm1hcCgoZSxpKT0+e2lmKG5baV1pbnN0YW5jZW9mIHRlKXtsZXQgcj0kbihuW2ldKTtyZXR1cm57a2V5OmUua2V5LHJlZHVjZXJGYWN0b3J5OnIucmVkdWNlckZhY3Rvcnk/ci5yZWR1Y2VyRmFjdG9yeTpjaCxtZXRhUmVkdWNlcnM6ci5tZXRhUmVkdWNlcnM/ci5tZXRhUmVkdWNlcnM6W10saW5pdGlhbFN0YXRlOnIuaW5pdGlhbFN0YXRlfX1yZXR1cm4gZX0pfWZ1bmN0aW9uIG5mZShuKXtyZXR1cm4gbi5tYXAodD0+dCBpbnN0YW5jZW9mIHRlPyRuKHQpOnQpfWZ1bmN0aW9uIE04KG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuP24oKTpufWZ1bmN0aW9uIGlmZShuLHQpe3JldHVybiBuLmNvbmNhdCh0KX1mdW5jdGlvbiByZmUoKXtpZigkbihJZSx7b3B0aW9uYWw6ITAsc2tpcFNlbGY6ITB9KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgcm9vdCBTdG9yZSBoYXMgYmVlbiBwcm92aWRlZCBtb3JlIHRoYW4gb25jZS4gRmVhdHVyZSBtb2R1bGVzIHNob3VsZCBwcm92aWRlIGZlYXR1cmUgc3RhdGVzIGluc3RlYWQuIik7cmV0dXJuImd1YXJkZWQifWZ1bmN0aW9uIFdPKG4pe09iamVjdC5mcmVlemUobik7bGV0IHQ9R08obik7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG4pLmZvckVhY2goZT0+e2lmKCFlLnN0YXJ0c1dpdGgoIlx1MDI3NSIpJiZmdW5jdGlvbihuLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobix0KX0obixlKSYmKCF0fHwiY2FsbGVyIiE9PWUmJiJjYWxsZWUiIT09ZSYmImFyZ3VtZW50cyIhPT1lKSl7bGV0IGk9bltlXTsoeDgoaSl8fEdPKGkpKSYmIU9iamVjdC5pc0Zyb3plbihpKSYmV08oaSl9fSksbn1mdW5jdGlvbiBxTyhuLHQ9W10pe3JldHVybihsOChuKXx8YzgobikpJiYwPT09dC5sZW5ndGg/e3BhdGg6WyJyb290Il0sdmFsdWU6bn06T2JqZWN0LmtleXMobikucmVkdWNlKChpLHIpPT57aWYoaSlyZXR1cm4gaTtsZXQgbz1uW3JdO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gR08obikmJm4uaGFzT3duUHJvcGVydHkoIlx1MDI3NWNtcCIpfShvKT9pOiEobDgobyl8fGM4KG8pfHxmdW5jdGlvbihuKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIG59KG8pfHxmdW5jdGlvbihuKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBufShvKXx8ZnVuY3Rpb24obil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBufShvKXx8eTgobykpJiYoZnVuY3Rpb24obil7aWYoIWZ1bmN0aW9uKG4pe3JldHVybiB4OChuKSYmIXk4KG4pfShuKSlyZXR1cm4hMTtsZXQgdD1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobik7cmV0dXJuIHQ9PT1PYmplY3QucHJvdG90eXBlfHxudWxsPT09dH0obyk/cU8obyxbLi4udCxyXSk6e3BhdGg6Wy4uLnQscl0sdmFsdWU6b30pfSwhMSl9ZnVuY3Rpb24gdTgobix0KXtpZighMT09PW4pcmV0dXJuO2xldCBlPW4ucGF0aC5qb2luKCIuIiksaT1uZXcgRXJyb3IoYERldGVjdGVkIHVuc2VyaWFsaXphYmxlICR7dH0gYXQgIiR7ZX0iLiAke1FPfSNzdHJpY3Qke3R9c2VyaWFsaXphYmlsaXR5YCk7dGhyb3cgaS52YWx1ZT1uLnZhbHVlLGkudW5zZXJpYWxpemFibGVQYXRoPWUsaX1mdW5jdGlvbiBsZmUobil7cmV0dXJue3N0cmljdFN0YXRlU2VyaWFsaXphYmlsaXR5OiExLHN0cmljdEFjdGlvblNlcmlhbGl6YWJpbGl0eTohMSxzdHJpY3RTdGF0ZUltbXV0YWJpbGl0eTohMSxzdHJpY3RBY3Rpb25JbW11dGFiaWxpdHk6ITEsc3RyaWN0QWN0aW9uV2l0aGluTmdab25lOiExLHN0cmljdEFjdGlvblR5cGVVbmlxdWVuZXNzOiExfX1mdW5jdGlvbiBjZmUoe3N0cmljdEFjdGlvblNlcmlhbGl6YWJpbGl0eTpuLHN0cmljdFN0YXRlU2VyaWFsaXphYmlsaXR5OnR9KXtyZXR1cm4gZT0+bnx8dD9mdW5jdGlvbihuLHQpe3JldHVybiBmdW5jdGlvbihlLGkpe3QuYWN0aW9uKGkpJiZ1OChxTyhpKSwiYWN0aW9uIik7bGV0IHI9bihlLGkpO3JldHVybiB0LnN0YXRlKCkmJnU4KHFPKHIpLCJzdGF0ZSIpLHJ9fShlLHthY3Rpb246aT0+biYmIVpPKGkpLHN0YXRlOigpPT50fSk6ZX1mdW5jdGlvbiBkZmUoe3N0cmljdEFjdGlvbkltbXV0YWJpbGl0eTpuLHN0cmljdFN0YXRlSW1tdXRhYmlsaXR5OnR9KXtyZXR1cm4gZT0+bnx8dD9mdW5jdGlvbihuLHQpe3JldHVybiBmdW5jdGlvbihlLGkpe2xldCByPXQuYWN0aW9uKGkpP1dPKGkpOmksbz1uKGUscik7cmV0dXJuIHQuc3RhdGUoKT9XTyhvKTpvfX0oZSx7YWN0aW9uOmk9Pm4mJiFaTyhpKSxzdGF0ZTooKT0+dH0pOmV9ZnVuY3Rpb24gWk8obil7cmV0dXJuIG4udHlwZS5zdGFydHNXaXRoKCJAbmdyeCIpfWZ1bmN0aW9uIHVmZSh7c3RyaWN0QWN0aW9uV2l0aGluTmdab25lOm59KXtyZXR1cm4gdD0+bj9mdW5jdGlvbihuLHQpe3JldHVybiBmdW5jdGlvbihlLGkpe2lmKHQuYWN0aW9uKGkpJiYhb3QuaXNJbkFuZ3VsYXJab25lKCkpdGhyb3cgbmV3IEVycm9yKGBBY3Rpb24gJyR7aS50eXBlfScgcnVubmluZyBvdXRzaWRlIE5nWm9uZS4gJHtRT30jc3RyaWN0YWN0aW9ud2l0aGlubmd6b25lYCk7cmV0dXJuIG4oZSxpKX19KHQse2FjdGlvbjplPT5uJiYhWk8oZSl9KTp0fWZ1bmN0aW9uIHBmZShuKXtyZXR1cm5be3Byb3ZpZGU6YTgsdXNlVmFsdWU6bn0se3Byb3ZpZGU6bzgsdXNlRmFjdG9yeTpoZmUsZGVwczpbYThdfSx7cHJvdmlkZTpZYixkZXBzOltvOF0sdXNlRmFjdG9yeTpsZmV9LHtwcm92aWRlOkRmLG11bHRpOiEwLGRlcHM6W1liXSx1c2VGYWN0b3J5OmRmZX0se3Byb3ZpZGU6RGYsbXVsdGk6ITAsZGVwczpbWWJdLHVzZUZhY3Rvcnk6Y2ZlfSx7cHJvdmlkZTpEZixtdWx0aTohMCxkZXBzOltZYl0sdXNlRmFjdG9yeTp1ZmV9XX1mdW5jdGlvbiB3OCgpe3JldHVyblt7cHJvdmlkZTpZTyxtdWx0aTohMCxkZXBzOltZYl0sdXNlRmFjdG9yeTptZmV9XX1mdW5jdGlvbiBoZmUobil7cmV0dXJuIG59ZnVuY3Rpb24gbWZlKG4pe2lmKCFuLnN0cmljdEFjdGlvblR5cGVVbmlxdWVuZXNzKXJldHVybjtsZXQgdD1PYmplY3QuZW50cmllcyhqTykuZmlsdGVyKChbLGVdKT0+ZT4xKS5tYXAoKFtlXSk9PmUpO2lmKHQubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgQWN0aW9uIHR5cGVzIGFyZSByZWdpc3RlcmVkIG1vcmUgdGhhbiBvbmNlLCAke3QubWFwKGU9PmAiJHtlfSJgKS5qb2luKCIsICIpfS4gJHtRT30jc3RyaWN0YWN0aW9udHlwZXVuaXF1ZW5lc3NgKX1mdW5jdGlvbiBmZmUobj17fSx0PXt9KXtyZXR1cm5be3Byb3ZpZGU6aDgsdXNlRmFjdG9yeTpyZmV9LHtwcm92aWRlOktHLHVzZVZhbHVlOnQuaW5pdGlhbFN0YXRlfSx7cHJvdmlkZTpYTyx1c2VGYWN0b3J5Ok04LGRlcHM6W0tHXX0se3Byb3ZpZGU6ek8sdXNlVmFsdWU6bn0se3Byb3ZpZGU6ZTgsdXNlRXhpc3Rpbmc6biBpbnN0YW5jZW9mIHRlP246ek99LHtwcm92aWRlOmY4LGRlcHM6W3pPLFtuZXcgY2YoZTgpXV0sdXNlRmFjdG9yeTplZmV9LHtwcm92aWRlOmk4LHVzZVZhbHVlOnQubWV0YVJlZHVjZXJzP3QubWV0YVJlZHVjZXJzOltdfSx7cHJvdmlkZTpyOCxkZXBzOltEZixpOF0sdXNlRmFjdG9yeTppZmV9LHtwcm92aWRlOkpHLHVzZVZhbHVlOnQucmVkdWNlckZhY3Rvcnk/dC5yZWR1Y2VyRmFjdG9yeTpjaH0se3Byb3ZpZGU6bTgsZGVwczpbSkcscjhdLHVzZUZhY3Rvcnk6djh9LEltZSxGbWUsTm1lLEJtZSxWbWUscGZlKHQucnVudGltZUNoZWNrcyksdzgoKV19ZnVuY3Rpb24gZ2ZlKG4sdCxlPXt9KXtyZXR1cm5be3Byb3ZpZGU6dDgsbXVsdGk6ITAsdXNlVmFsdWU6biBpbnN0YW5jZW9mIE9iamVjdD97fTplfSx7cHJvdmlkZTokRyxtdWx0aTohMCx1c2VWYWx1ZTp7a2V5Om4gaW5zdGFuY2VvZiBPYmplY3Q/bi5uYW1lOm4scmVkdWNlckZhY3Rvcnk6ZSBpbnN0YW5jZW9mIHRlfHwhZS5yZWR1Y2VyRmFjdG9yeT9jaDplLnJlZHVjZXJGYWN0b3J5LG1ldGFSZWR1Y2VyczplIGluc3RhbmNlb2YgdGV8fCFlLm1ldGFSZWR1Y2Vycz9bXTplLm1ldGFSZWR1Y2Vycyxpbml0aWFsU3RhdGU6ZSBpbnN0YW5jZW9mIHRlfHwhZS5pbml0aWFsU3RhdGU/dm9pZCAwOmUuaW5pdGlhbFN0YXRlfX0se3Byb3ZpZGU6ZzgsZGVwczpbdDgsJEddLHVzZUZhY3Rvcnk6dGZlfSx7cHJvdmlkZTpVTyxtdWx0aTohMCx1c2VWYWx1ZTpuIGluc3RhbmNlb2YgT2JqZWN0P24ucmVkdWNlcjp0fSx7cHJvdmlkZTpuOCxtdWx0aTohMCx1c2VFeGlzdGluZzp0IGluc3RhbmNlb2YgdGU/dDpVT30se3Byb3ZpZGU6XzgsbXVsdGk6ITAsZGVwczpbVU8sW25ldyBjZihuOCldXSx1c2VGYWN0b3J5Om5mZX0sdzgoKV19dmFyIEtiPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyxhLHMpe319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhJZiksTyhRYiksTyhaYiksTyhJZSksTyhoOCw4KSxPKFlPLDgpKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9SCh7fSksbn0pKCkscXc9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLGEpe3RoaXMuZmVhdHVyZXM9ZSx0aGlzLmZlYXR1cmVSZWR1Y2Vycz1pLHRoaXMucmVkdWNlck1hbmFnZXI9cjtsZXQgcz1lLm1hcCgobCxjKT0+e2xldCB1PWkuc2hpZnQoKVtjXTtyZXR1cm57Li4ubCxyZWR1Y2Vyczp1LGluaXRpYWxTdGF0ZTpNOChsLmluaXRpYWxTdGF0ZSl9fSk7ci5hZGRGZWF0dXJlcyhzKX1uZ09uRGVzdHJveSgpe3RoaXMucmVkdWNlck1hbmFnZXIucmVtb3ZlRmVhdHVyZXModGhpcy5mZWF0dXJlcyl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oZzgpLE8oXzgpLE8oR3cpLE8oS2IpLE8oWU8sOCkpfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1IKHt9KSxufSkoKSx3cj0oKCk9PntjbGFzcyBue3N0YXRpYyBmb3JSb290KGUsaSl7cmV0dXJue25nTW9kdWxlOktiLHByb3ZpZGVyczpbLi4uZmZlKGUsaSldfX1zdGF0aWMgZm9yRmVhdHVyZShlLGkscj17fSl7cmV0dXJue25nTW9kdWxlOnF3LHByb3ZpZGVyczpbLi4uZ2ZlKGUsaSxyKV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9SCh7fSksbn0pKCk7ZnVuY3Rpb24geWUoLi4ubil7cmV0dXJue3JlZHVjZXI6bi5wb3AoKSx0eXBlczpuLm1hcChpPT5pLnR5cGUpfX1mdW5jdGlvbiBncihuLC4uLnQpe2xldCBlPW5ldyBNYXA7Zm9yKGxldCBpIG9mIHQpZm9yKGxldCByIG9mIGkudHlwZXMpe2xldCBvPWUuZ2V0KHIpO2Uuc2V0KHIsbz8ocyxsKT0+aS5yZWR1Y2VyKG8ocyxsKSxsKTppLnJlZHVjZXIpfXJldHVybiBmdW5jdGlvbihpPW4scil7bGV0IG89ZS5nZXQoci50eXBlKTtyZXR1cm4gbz9vKGkscik6aX19dmFyIF9mZT17ZGlzcGF0Y2g6ITAsZnVuY3Rpb25hbDohMSx1c2VFZmZlY3RzRXJyb3JIYW5kbGVyOiEwfSxZdz0iX19AbmdyeC9lZmZlY3RzX2NyZWF0ZV9fIjtmdW5jdGlvbiBfcihuLHQ9e30pe2xldCBlPXQuZnVuY3Rpb25hbD9uOm4oKSxpPXsuLi5fZmUsLi4udH07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFl3LHt2YWx1ZTppfSksZX1mdW5jdGlvbiBEOChuKXtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG4pfWZ1bmN0aW9uIEk4KG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBufWZ1bmN0aW9uIFM4KG4pe3JldHVybiBuLmZpbHRlcihJOCl9ZnVuY3Rpb24geGZlKG4sdCxlKXtsZXQgaT1EOChuKS5jb25zdHJ1Y3Rvci5uYW1lLHI9ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhuKS5maWx0ZXIoaT0+ISghbltpXXx8IW5baV0uaGFzT3duUHJvcGVydHkoWXcpKSYmbltpXVtZd10uaGFzT3duUHJvcGVydHkoImRpc3BhdGNoIikpLm1hcChpPT4oe3Byb3BlcnR5TmFtZTppLC4uLm5baV1bWXddfSkpfShuKX0obikubWFwKCh7cHJvcGVydHlOYW1lOm8sZGlzcGF0Y2g6YSx1c2VFZmZlY3RzRXJyb3JIYW5kbGVyOnN9KT0+e2xldCBsPSJmdW5jdGlvbiI9PXR5cGVvZiBuW29dP25bb10oKTpuW29dLGM9cz9lKGwsdCk6bDtyZXR1cm4hMT09PWE/Yy5waXBlKGtfKCkpOmMucGlwZShZdCgobix0KT0+e24uc3Vic2NyaWJlKEh0KHQsZT0+e3QubmV4dChBcy5jcmVhdGVOZXh0KGUpKX0sKCk9Pnt0Lm5leHQoQXMuY3JlYXRlQ29tcGxldGUoKSksdC5jb21wbGV0ZSgpfSxlPT57dC5uZXh0KEFzLmNyZWF0ZUVycm9yKGUpKSx0LmNvbXBsZXRlKCl9KSl9KSkucGlwZShxKHU9Pih7ZWZmZWN0Om5bb10sbm90aWZpY2F0aW9uOnUscHJvcGVydHlOYW1lOm8sc291cmNlTmFtZTppLHNvdXJjZUluc3RhbmNlOm59KSkpfSk7cmV0dXJuIHRuKC4uLnIpfXZhciBDZmU9MTA7ZnVuY3Rpb24gQTgobix0LGU9Q2ZlKXtyZXR1cm4gbi5waXBlKGNvKGk9Pih0JiZ0LmhhbmRsZUVycm9yKGkpLGU8PTE/bjpBOChuLHQsZS0xKSkpKX12YXIgRW89KCgpPT57Y2xhc3MgbiBleHRlbmRzIEt0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksZSYmKHRoaXMuc291cmNlPWUpfWxpZnQoZSl7bGV0IGk9bmV3IG47cmV0dXJuIGkuc291cmNlPXRoaXMsaS5vcGVyYXRvcj1lLGl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oWmIpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKTtmdW5jdGlvbiBabiguLi5uKXtyZXR1cm4gT2UodD0+bi5zb21lKGU9PiJzdHJpbmciPT10eXBlb2YgZT9lPT09dC50eXBlOmUudHlwZT09PXQudHlwZSkpfXZhciBSOD1uZXcgdGUoIkBuZ3J4L2VmZmVjdHMgSW50ZXJuYWwgUm9vdCBHdWFyZCIpLFh3PW5ldyB0ZSgiQG5ncngvZWZmZWN0cyBVc2VyIFByb3ZpZGVkIEVmZmVjdHMiKSxLTz1uZXcgdGUoIkBuZ3J4L2VmZmVjdHMgSW50ZXJuYWwgUm9vdCBFZmZlY3RzIiksUDg9bmV3IHRlKCJAbmdyeC9lZmZlY3RzIEludGVybmFsIFJvb3QgRWZmZWN0cyBJbnN0YW5jZXMiKSxFOD1uZXcgdGUoIkBuZ3J4L2VmZmVjdHMgSW50ZXJuYWwgRmVhdHVyZSBFZmZlY3RzIiksazg9bmV3IHRlKCJAbmdyeC9lZmZlY3RzIEludGVybmFsIEZlYXR1cmUgRWZmZWN0cyBJbnN0YW5jZSBHcm91cHMiKSxNZmU9bmV3IHRlKCJAbmdyeC9lZmZlY3RzIEVmZmVjdHMgRXJyb3IgSGFuZGxlciIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PkE4fSksTzg9IkBuZ3J4L2VmZmVjdHMvaW5pdCI7ZmUoTzgpO3ZhciBEZmU9Im5ncnhPbklkZW50aWZ5RWZmZWN0cyIsUGZlPSJuZ3J4T25Jbml0RWZmZWN0cyI7ZnVuY3Rpb24ga2ZlKG4pe3JldHVybiBKTyhuLFBmZSl9ZnVuY3Rpb24gSk8obix0KXtyZXR1cm4gbiYmdCBpbiBuJiYiZnVuY3Rpb24iPT10eXBlb2Ygblt0XX12YXIgRjg9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEVle2NvbnN0cnVjdG9yKGUsaSl7c3VwZXIoKSx0aGlzLmVycm9ySGFuZGxlcj1lLHRoaXMuZWZmZWN0c0Vycm9ySGFuZGxlcj1pfWFkZEVmZmVjdHMoZSl7dGhpcy5uZXh0KGUpfXRvQWN0aW9ucygpe3JldHVybiB0aGlzLnBpcGUoQkMoZT0+ZnVuY3Rpb24obil7cmV0dXJuIk9iamVjdCIhPT1uLmNvbnN0cnVjdG9yLm5hbWUmJiJGdW5jdGlvbiIhPT1uLmNvbnN0cnVjdG9yLm5hbWV9KGUpP0Q4KGUpOmUpLHhuKGU9PmUucGlwZShCQyhPZmUpKSkseG4oZT0+e2xldCBpPWUucGlwZShOQyhvPT5mdW5jdGlvbihuLHQpe3JldHVybiBlPT57bGV0IGk9eGZlKGUsbix0KTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIEpPKG4sIm5ncnhPblJ1bkVmZmVjdHMiKX0oZSk/ZS5uZ3J4T25SdW5FZmZlY3RzKGkpOml9fSh0aGlzLmVycm9ySGFuZGxlcix0aGlzLmVmZmVjdHNFcnJvckhhbmRsZXIpKG8pKSxxKG89PihmdW5jdGlvbihuLHQpe2lmKCJOIj09PW4ubm90aWZpY2F0aW9uLmtpbmQpe2xldCBlPW4ubm90aWZpY2F0aW9uLnZhbHVlOyFmdW5jdGlvbihuKXtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgbiYmbiYmbi50eXBlJiYic3RyaW5nIj09dHlwZW9mIG4udHlwZX0oZSkmJnQuaGFuZGxlRXJyb3IobmV3IEVycm9yKGBFZmZlY3QgJHtmdW5jdGlvbih7cHJvcGVydHlOYW1lOm4sc291cmNlSW5zdGFuY2U6dCxzb3VyY2VOYW1lOmV9KXtsZXQgaT0iZnVuY3Rpb24iPT10eXBlb2YgdFtuXTtyZXR1cm5gIiR7ZX0uJHtTdHJpbmcobil9JHtpPyIoKSI6IiJ9ImB9KG4pfSBkaXNwYXRjaGVkIGFuIGludmFsaWQgYWN0aW9uOiAke2Z1bmN0aW9uKG4pe3RyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkobil9Y2F0Y2h7cmV0dXJuIG59fShlKX1gKSl9fShvLHRoaXMuZXJyb3JIYW5kbGVyKSxvLm5vdGlmaWNhdGlvbikpLE9lKG89PiJOIj09PW8ua2luZCYmbnVsbCE9by52YWx1ZSksWXQoKG4sdCk9PntuLnN1YnNjcmliZShIdCh0LGU9PktBKGUsdCkpKX0pKTtyZXR1cm4gdG4oaSxlLnBpcGUoTHQoMSksT2Uoa2ZlKSxxKG89Pm8ubmdyeE9uSW5pdEVmZmVjdHMoKSkpKX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhsYSksTyhNZmUpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKTtmdW5jdGlvbiBPZmUobil7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBKTyhuLERmZSl9KG4pP24ubmdyeE9uSWRlbnRpZnlFZmZlY3RzKCk6IiJ9dmFyIE44PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLmVmZmVjdFNvdXJjZXM9ZSx0aGlzLnN0b3JlPWksdGhpcy5lZmZlY3RzU3Vic2NyaXB0aW9uPW51bGx9Z2V0IGlzU3RhcnRlZCgpe3JldHVybiEhdGhpcy5lZmZlY3RzU3Vic2NyaXB0aW9ufXN0YXJ0KCl7dGhpcy5lZmZlY3RzU3Vic2NyaXB0aW9ufHwodGhpcy5lZmZlY3RzU3Vic2NyaXB0aW9uPXRoaXMuZWZmZWN0U291cmNlcy50b0FjdGlvbnMoKS5zdWJzY3JpYmUodGhpcy5zdG9yZSkpfW5nT25EZXN0cm95KCl7dGhpcy5lZmZlY3RzU3Vic2NyaXB0aW9uJiYodGhpcy5lZmZlY3RzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5lZmZlY3RzU3Vic2NyaXB0aW9uPW51bGwpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKEY4KSxPKEllKSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksTDg9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLGEscyxsKXt0aGlzLnNvdXJjZXM9ZSxpLnN0YXJ0KCk7Zm9yKGxldCBjIG9mIG8pZS5hZGRFZmZlY3RzKGMpO3IuZGlzcGF0Y2goe3R5cGU6Tzh9KX1hZGRFZmZlY3RzKGUpe3RoaXMuc291cmNlcy5hZGRFZmZlY3RzKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKEY4KSxPKE44KSxPKEllKSxPKFA4KSxPKEtiLDgpLE8ocXcsOCksTyhSOCw4KSl9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe30pLG59KSgpLE5mZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8pe2xldCBhPWkuZmxhdCgpO2ZvcihsZXQgcyBvZiBhKWUuYWRkRWZmZWN0cyhzKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhMOCksTyhrOCksTyhLYiw4KSxPKHF3LDgpKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9SCh7fSksbn0pKCksdG89KCgpPT57Y2xhc3MgbntzdGF0aWMgZm9yRmVhdHVyZSguLi5lKXtsZXQgaT1lLmZsYXQoKSxyPVM4KGkpO3JldHVybntuZ01vZHVsZTpOZmUscHJvdmlkZXJzOltyLHtwcm92aWRlOkU4LG11bHRpOiEwLHVzZVZhbHVlOml9LHtwcm92aWRlOlh3LG11bHRpOiEwLHVzZVZhbHVlOltdfSx7cHJvdmlkZTprOCxtdWx0aTohMCx1c2VGYWN0b3J5OlQ4LGRlcHM6W0U4LFh3XX1dfX1zdGF0aWMgZm9yUm9vdCguLi5lKXtsZXQgaT1lLmZsYXQoKSxyPVM4KGkpO3JldHVybntuZ01vZHVsZTpMOCxwcm92aWRlcnM6W3Ise3Byb3ZpZGU6S08sdXNlVmFsdWU6W2ldfSx7cHJvdmlkZTpSOCx1c2VGYWN0b3J5OkxmZX0se3Byb3ZpZGU6WHcsbXVsdGk6ITAsdXNlVmFsdWU6W119LHtwcm92aWRlOlA4LHVzZUZhY3Rvcnk6VDgsZGVwczpbS08sWHddfV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9SCh7fSksbn0pKCk7ZnVuY3Rpb24gVDgobix0KXtsZXQgZT1bXTtmb3IobGV0IGkgb2YgbillLnB1c2goLi4uaSk7Zm9yKGxldCBpIG9mIHQpZS5wdXNoKC4uLmkpO3JldHVybiBlLm1hcChpPT5JOChpKT8kbihpKTppKX1mdW5jdGlvbiBMZmUoKXtsZXQgbj0kbihOOCx7b3B0aW9uYWw6ITAsc2tpcFNlbGY6ITB9KSx0PSRuKEtPLHtzZWxmOiEwfSk7aWYoKDEhPT10Lmxlbmd0aHx8MCE9PXRbMF0ubGVuZ3RoKSYmbil0aHJvdyBuZXcgVHlwZUVycm9yKCJFZmZlY3RzTW9kdWxlLmZvclJvb3QoKSBjYWxsZWQgdHdpY2UuIEZlYXR1cmUgbW9kdWxlcyBzaG91bGQgdXNlIEVmZmVjdHNNb2R1bGUuZm9yRmVhdHVyZSgpIGluc3RlYWQuIik7cmV0dXJuImd1YXJkZWQifXZhciBDbj0oKCk9PntyZXR1cm4obj1Dbnx8KENuPXt9KSlbbi5VTktOT1dOPTBdPSJVTktOT1dOIixuW24uRVhQRVJJTUVOVFM9MV09IkVYUEVSSU1FTlRTIixuW24uRVhQRVJJTUVOVD0yXT0iRVhQRVJJTUVOVCIsbltuLkNPTVBBUkVfRVhQRVJJTUVOVD0zXT0iQ09NUEFSRV9FWFBFUklNRU5UIixuW24uQ0FSRD00XT0iQ0FSRCIsbltuLk5PVF9TRVQ9NV09Ik5PVF9TRVQiLENuO3ZhciBufSkoKSxRdz0iZGVmYXVsdEV4cGVyaW1lbnRJZCIsQWY9KCgpPT57cmV0dXJuKG49QWZ8fChBZj17fSkpW24uRVhQRVJJTUVOVFM9MF09IkVYUEVSSU1FTlRTIixuW24uREFTSEJPQVJEPTFdPSJEQVNIQk9BUkQiLEFmO3ZhciBufSkoKTtmdW5jdGlvbiBSZihuKXtyZXR1cm4gbi5zcGxpdCgiLCIpLm1hcCh0PT57bGV0IGU9dC5pbmRleE9mKCI6Iik7aWYoZTwwKXRocm93IG5ldyBFcnJvcihgRXhwZWN0IGNvbG9uIGRlbGltaXRpbmcgbmFtZSBhbmQgSUQ6ICR7dH1gKTtsZXQgaT10LnNsaWNlKDAsZSkscj10LnNsaWNlKGUrMSk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKGBFeHBlY3QgaWQgdG8gYmUgbm9uLWZhbHN5OiAke3R9YCk7cmV0dXJue25hbWU6aSxpZDpyfX0pfWZ1bmN0aW9uIEI4KG4pe3JldHVybiBuLm1hcCgoe2FsaWFzOnQsaWQ6ZX0pPT5gJHt0fToke2V9YCkuam9pbigiLCIpfWZ1bmN0aW9uIEpiKG4sdCl7c3dpdGNoKG4pe2Nhc2UgQ24uRVhQRVJJTUVOVDpyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsImV4cGVyaW1lbnRJZCIpP1t0LmV4cGVyaW1lbnRJZF06W1F3XTtjYXNlIENuLkNBUkQ6e2xldCBlPXQuZXhwZXJpbWVudElkcztyZXR1cm4gZS5pbmRleE9mKCIsIik8MD9bZV06UmYoZSkubWFwKCh7aWQ6aX0pPT5pKX1jYXNlIENuLkNPTVBBUkVfRVhQRVJJTUVOVDpyZXR1cm4gUmYodC5leHBlcmltZW50SWRzKS5tYXAoKHtpZDppfSk9PmkpO2RlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIFZvKG4sdCl7aWYoIW58fCF0KXJldHVybiBuPT09dDtpZihuLnJvdXRlS2luZCE9PXQucm91dGVLaW5kKXJldHVybiExO2xldCBlPUpiKG4ucm91dGVLaW5kLG4ucGFyYW1zKSxpPUpiKHQucm91dGVLaW5kLHQucGFyYW1zKTtpZihudWxsPT09ZXx8bnVsbD09PWkpcmV0dXJuIGU9PT1pO2lmKGUubGVuZ3RoIT09aS5sZW5ndGgpcmV0dXJuITE7bGV0IHI9aS5zb3J0KCk7cmV0dXJuIGUuc29ydCgpLmV2ZXJ5KChvLGEpPT5yW2FdPT09byl9ZnVuY3Rpb24gJE8obil7c3dpdGNoKG4pe2Nhc2UgQ24uRVhQRVJJTUVOVFM6cmV0dXJuIEFmLkVYUEVSSU1FTlRTO2Nhc2UgQ24uRVhQRVJJTUVOVDpjYXNlIENuLkNBUkQ6Y2FzZSBDbi5DT01QQVJFX0VYUEVSSU1FTlQ6cmV0dXJuIEFmLkRBU0hCT0FSRDtjYXNlIENuLlVOS05PV046Y2FzZSBDbi5OT1RfU0VUOnJldHVybiBudWxsfX1mdW5jdGlvbiBadyhuLHQsZSl7bGV0IGk9JE8obik7cmV0dXJuIG51bGwhPT1pJiYhZS5zb21lKHI9PnIuZGVlcExpbmtHcm91cD09PWkmJnIubmFtZXNwYWNlSWQ9PT10KX12YXIgVThfZ2V0SHJlZj0oKT0+d2luZG93LmxvY2F0aW9uLmhyZWYsZGg9KCgpPT57Y2xhc3MgbntnZXRIcmVmKCl7cmV0dXJuIFU4X2dldEhyZWYoKX1nZXRTZWFyY2goKXtsZXQgZT1uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLGk9W107cmV0dXJuIGUuZm9yRWFjaCgocixvKT0+e2kucHVzaCh7a2V5Om8sdmFsdWU6cn0pfSksaX1nZXRIYXNoKCl7cmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5oYXNofWdldFBhdGgoKXtyZXR1cm4gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lfWdldEhpc3RvcnlTdGF0ZSgpe3JldHVybiB3aW5kb3cuaGlzdG9yeS5zdGF0ZX1yZXBsYWNlU3RhdGVVcmwoZSl7d2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHdpbmRvdy5oaXN0b3J5LnN0YXRlLCIiLGUpfXB1c2hTdGF0ZVVybChlKXt3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUobnVsbCwiIixlKX1yZXBsYWNlU3RhdGVEYXRhKGUpe3dpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZShlLCIiKX1vblBvcFN0YXRlKCl7cmV0dXJuIEVpKHdpbmRvdywicG9wc3RhdGUiKS5waXBlKHEoZT0+KHtwYXRobmFtZTp0aGlzLmdldFBhdGgoKSxzdGF0ZTplLnN0YXRlfSkpKX1nZXRSZXNvbHZlZFBhdGgoZSl7cmV0dXJuIG5ldyBVUkwoZSxVOF9nZXRIcmVmKCkpLnBhdGhuYW1lfWdldEZ1bGxQYXRoKGUsaSxyKXtsZXQgbz10aGlzLmdldFJlc29sdmVkUGF0aChlKSxhPSIiO3JldHVybiBpLmxlbmd0aCYmKGE9Ij8iK2Z1bmN0aW9uKG4pe2xldCB0PW5ldyBVUkxTZWFyY2hQYXJhbXM7Zm9yKGxldHtrZXk6ZSx2YWx1ZTppfW9mIG4pdC5hcHBlbmQoZSxpKTtyZXR1cm4gdH0oaSkudG9TdHJpbmcoKSksYCR7b30ke2F9JHtyP3RoaXMuZ2V0SGFzaCgpOiIifWB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLHVoPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5hcHBSb290PXRoaXMuZ2V0QXBwUm9vdEZyb21NZXRhRWxlbWVudChlKX1nZXRBcHBSb290RnJvbU1ldGFFbGVtZW50KGUpe2xldCBpPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2hlYWQgbWV0YVtuYW1lPSJ0Yi1yZWxhdGl2ZS1yb290Il0nKTtpZighaSlyZXR1cm4iLyI7bGV0e3BhdGhuYW1lOnJ9PW5ldyBVUkwoaS5jb250ZW50LGUuZ2V0SHJlZigpKTtyZXR1cm4gci5yZXBsYWNlKC9cLyokLywiLyIpfWdldEFic1BhdGhuYW1lV2l0aEFwcFJvb3QoZSl7cmV0dXJuIHRoaXMuYXBwUm9vdC5zbGljZSgwLC0xKStlfWdldEFwcFJvb3RsZXNzUGF0aG5hbWUoZSl7cmV0dXJuIGUuc3RhcnRzV2l0aCh0aGlzLmFwcFJvb3QpPyIvIitlLnNsaWNlKHRoaXMuYXBwUm9vdC5sZW5ndGgpOmV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oZGgpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxQZj0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9SCh7cHJvdmlkZXJzOltkaF19KSxufSkoKSxrZj0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9SCh7cHJvdmlkZXJzOlt1aF0saW1wb3J0czpbUGZdfSksbn0pKCksbkY9bmV3IHRlKCJbQXBwIFJvdXRpbmddIERpcnR5IFVwZGF0ZXMiKSxLdz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuZGlydHlVcGRhdGVzU2VsZWN0b3JGYWN0b3JpZXM9ZX1nZXREaXJ0eVVwZGF0ZXNTZWxlY3RvcnMoKXtyZXR1cm4gdGhpcy5kaXJ0eVVwZGF0ZXNTZWxlY3RvckZhY3Rvcmllcz8/W119c3RhdGljIHJlZ2lzdGVyRGlydHlVcGRhdGVzKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6bkYsbXVsdGk6ITAsdXNlRmFjdG9yeTplfV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKG5GLDgpKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9SCh7fSksbn0pKCksajg9ZmUoIltBcHAgUm91dGluZ10gRGlzY2FyZGluZyBVbnNhdmVkIFVwZGF0ZXMiKSxmdT1mZSgiW0FwcCBSb3V0aW5nXSBTdGF0ZSBSZWh5ZHJhdGVkIEZyb20gVXJsIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksSnc9ZmUoIltBcHAgUm91dGluZ10gUm91dGUgQ29uZmlnIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGlGPWZlKCJbQXBwIFJvdXRpbmddIEluIEFwcCBOYXZpZ2F0aW9uIFJlcXVlc3RlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLE9mPWZlKCJbQXBwIFJvdXRpbmddIEluIEFwcCBOYXZpZ2F0aW5nIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksTmE9ZmUoIltBcHAgUm91dGluZ10gSW4gQXBwIE5hdmlnYXRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLG9GPW5ldyB0ZSgiW0FwcCBSb3V0aW5nXSBQcm9ncmFtbWF0aWNhbCBOYXZpZ2F0aW9uIFByb3ZpZGVyIiksJHc9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnByb3ZpZGVycz1uZXcgTWFwO2ZvcihsZXQgaSBvZiBlfHxbXSl7aWYodGhpcy5wcm92aWRlcnMuaGFzKGkuYWN0aW9uQ3JlYXRvci50eXBlKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgIiR7aS5hY3Rpb25DcmVhdG9yLnR5cGV9IiBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgZm9yIG5hdi4gTXVsdGlwbGUgbmF2aWdhdGlvbnMgb24gc2FtZSBraWNrIGlzIG5vdCBhbGxvd2VkLmApO3RoaXMucHJvdmlkZXJzLnNldChpLmFjdGlvbkNyZWF0b3IudHlwZSxpLmxhbWJkYSl9fWdldE5hdmlnYXRpb24oZSl7bGV0IGk9dGhpcy5wcm92aWRlcnMuZ2V0KGUudHlwZSk7cmV0dXJuIGk/aShlKTpudWxsfXN0YXRpYyByZWdpc3RlclByb2dyYW1tYXRpY2FsTmF2aWdhdGlvbihlKXtyZXR1cm57bmdNb2R1bGU6bixwcm92aWRlcnM6W3twcm92aWRlOm9GLG11bHRpOiEwLHVzZUZhY3Rvcnk6ZX1dfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhvRiw4KSl9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe30pLG59KSgpO2Z1bmN0aW9uICRiKG4pe3JldHVybiBudWxsIT1uLnJvdXRlS2luZH1mdW5jdGlvbiBsRihuKXtyZXR1cm4gcTgobikubWFwKGU9PntsZXQgaT1lLnN0YXJ0c1dpdGgoIjoiKTtyZXR1cm4gaT97cGF0aFBhcnQ6ZSxpc1BhcmFtOiEwLHBhcmFtTmFtZTplLnNsaWNlKDEpfTp7cGF0aFBhcnQ6ZSxpc1BhcmFtOml9fSl9dmFyIEZmPWNsYXNze3N0YXRpYyBnZXRNYXRjaGVyKHQpe3JldHVybiAkYih0KT9uZXcgZXYodCk6dm9pZCAwIT09dC5yZWRpcmVjdGlvblBhdGg/bmV3IGFGKHQpOm5ldyBzRih0KX1jb25zdHJ1Y3Rvcih0KXt0aGlzLnZhbGlkYXRlQ29uZmlnKHQpLHRoaXMucGF0aEZyYWdtZW50cz1sRih0LnBhdGgpLHRoaXMucGF0aE1hdGNoZXJzPXRoaXMuZ2V0UGF0aE1hdGNoZXJzKHRoaXMucGF0aEZyYWdtZW50cyl9dmFsaWRhdGVDb25maWcoe3BhdGg6dH0pe2lmKCF0LnN0YXJ0c1dpdGgoIi8iKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgY29uZmlnLnBhdGggc2hvdWxkIHN0YXJ0IHdpdGggJy8nLiAke3R9YCk7bGV0IGU9MDtmb3IoOyhlPXQuaW5kZXhPZigiOiIsZSsxKSk+PTA7KXtpZigiLyIhPT10W2UtMV0pdGhyb3cgbmV3IFJhbmdlRXJyb3IoYGNvbmZpZy5wYXRoIHBhcmFtZXRlciBzaG91bGQgY29tZSBhZnRlciAnLycuICR7dH1gKTtpZih2b2lkIDA9PT10W2UrMV18fCIvIj09PXRbZSsxXSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgY29uZmlnLnBhdGggcGFyYW1ldGVyIHNob3VsZCBoYXZlIG5vbi1lbXB0eSBuYW1lLiAke3R9YCl9fWdldFBhdGhNYXRjaGVycyh0KXtyZXR1cm4gdC5tYXAoZT0+e2xldHtwYXRoUGFydDppfT1lO3JldHVybiBlLmlzUGFyYW0/cj0+KHtpc1BhcmFtUGF0aFBhcnQ6ITAscGFydE1hdGNoZWQ6ITAscGFyYW1OYW1lOmUucGFyYW1OYW1lLHBhcmFtVmFsdWU6cn0pOnI9Pih7aXNQYXJhbVBhdGhQYXJ0OiExLHBhcnRNYXRjaGVkOnI9PT1pfSl9KX1tYXRjaCh0KXtsZXQgZT17fTtpZih0aGlzLnBhdGhNYXRjaGVycy5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm57cmVzdWx0OiExfTtsZXQgaT0wO2ZvcihsZXQgciBvZiB0aGlzLnBhdGhNYXRjaGVycyl7bGV0IGE9cih0W2krK10pO2lmKCFhLnBhcnRNYXRjaGVkKXJldHVybntyZXN1bHQ6ITF9O2EuaXNQYXJhbVBhdGhQYXJ0JiYoZT17Li4uZSxbYS5wYXJhbU5hbWVdOmEucGFyYW1WYWx1ZX0pfXJldHVybntyZXN1bHQ6ITAscGFyYW1zOmUscGF0aFBhcnRzOnQsaXNSZWRpcmVjdGlvbjohMSxyZWRpcmVjdGlvblF1ZXJ5UGFyYW1zOnZvaWQgMH19bWF0Y2hCeVBhcmFtcyh0KXtyZXR1cm57cmVzdWx0OiEwLHBhcmFtczp0LHBhdGhQYXJ0czp0aGlzLnJlcHJvamVjdFBhdGhCeVBhcmFtcyh0aGlzLnBhdGhGcmFnbWVudHMsdCksaXNSZWRpcmVjdGlvbjohMSxyZWRpcmVjdGlvblF1ZXJ5UGFyYW1zOnZvaWQgMH19cmVwcm9qZWN0UGF0aEJ5UGFyYW1zKHQsZSl7bGV0IGk9W107Zm9yKGxldCByIG9mIHQpaWYoci5pc1BhcmFtKXtsZXR7cGFyYW1OYW1lOm99PXI7aWYoIWUuaGFzT3duUHJvcGVydHkobykpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEZhaWxlZCB0byByZXByb2plY3QgcGFyYW1ldGVyLiAiJHtvfSIgcGFyYW1ldGVyIHNob3VsZCBiZSBwcmVzZW50LmApO2kucHVzaChlW29dKX1lbHNlIGkucHVzaChyLnBhdGhQYXJ0KTtyZXR1cm4gaX19LGV2PWNsYXNzIGV4dGVuZHMgRmZ7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5kZWZpbml0aW9uPXR9fSxhRj1jbGFzcyBleHRlbmRzIEZme2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMuZGVmaW5pdGlvbj10LHRoaXMucmVkaXJlY3Rpb25GcmFnbWVudHM9bEYodC5yZWRpcmVjdGlvblBhdGgpfW1hdGNoKHQpe2xldCBlPXN1cGVyLm1hdGNoKHQpO2lmKCFlLnJlc3VsdClyZXR1cm4gZTtsZXQgaT10aGlzLnJlcHJvamVjdFBhdGhCeVBhcmFtcyh0aGlzLnJlZGlyZWN0aW9uRnJhZ21lbnRzLGUucGFyYW1zKTtyZXR1cm57cmVzdWx0OiEwLHBhcmFtczplLnBhcmFtcyxwYXRoUGFydHM6aSxpc1JlZGlyZWN0aW9uOiEwLHJlZGlyZWN0aW9uUXVlcnlQYXJhbXM6dm9pZCAwfX19LHNGPWNsYXNzIGV4dGVuZHMgRmZ7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5kZWZpbml0aW9uPXR9bWF0Y2godCl7bGV0IGU9c3VwZXIubWF0Y2godCk7aWYoIWUucmVzdWx0KXJldHVybiBlO2xldHtwYXRoUGFydHM6aSxxdWVyeVBhcmFtczpyfT10aGlzLmRlZmluaXRpb24ucmVkaXJlY3Rvcih0KTtyZXR1cm57cmVzdWx0OiEwLHBhcmFtczplLnBhcmFtcyxwYXRoUGFydHM6aSxpc1JlZGlyZWN0aW9uOiEwLHJlZGlyZWN0aW9uUXVlcnlQYXJhbXM6cn19fSx0dj1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9Myl7aWYodGhpcy5tYXhSZWRpcmVjdGlvbj1lLGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigibWF4UmVkaXJlY3Rpb24gaGFzIHRvIGJlIG5vbi1uZWdhdGl2ZSBudW1iZXIiKTt0aGlzLnZhbGlkYXRlUm91dGVDb25maWdzKHQpLHRoaXMuZGVmYXVsdFJvdXRlQ29uZmlnPW51bGwsdGhpcy5yb3V0ZUtpbmRUb0NvbmNyZXRlQ29uZmlnTWF0Y2hlcnM9bmV3IE1hcCx0aGlzLmNvbmZpZ01hdGNoZXJzPVtdO2ZvcihsZXQgaSBvZiB0KXtsZXQgcj1GZi5nZXRNYXRjaGVyKGkpO3RoaXMuY29uZmlnTWF0Y2hlcnMucHVzaChyKSxyIGluc3RhbmNlb2YgZXYmJih0aGlzLnJvdXRlS2luZFRvQ29uY3JldGVDb25maWdNYXRjaGVycy5zZXQoci5kZWZpbml0aW9uLnJvdXRlS2luZCxyKSxyLmRlZmluaXRpb24uZGVmYXVsdFJvdXRlJiYodGhpcy5kZWZhdWx0Um91dGVDb25maWc9cikpfX12YWxpZGF0ZVJvdXRlQ29uZmlncyh0KXtsZXQgZT10LmZpbHRlcigkYiksaT1lLmZpbHRlcihvPT5vLmRlZmF1bHRSb3V0ZSk7aWYoaS5sZW5ndGg+MSl7bGV0IG89aS5tYXAoKHtwYXRoOmF9KT0+YSkuam9pbigiLCAiKTt0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgZGVmYXVsdFJvdXRlcy4gJHtvfWApfWlmKDE9PT1pLmxlbmd0aCl7bGV0e3BhdGg6b309aVswXTtpZihCb29sZWFuKGxGKG8pLmZpbmQoKHtpc1BhcmFtOnN9KT0+cykpKXRocm93IG5ldyBSYW5nZUVycm9yKGBBIGRlZmF1bHRSb3V0ZSBjYW5ub3QgaGF2ZSBhbnkgcGFyYW1zLiAke299YCl9bGV0IHI9bmV3IFNldDtmb3IobGV0e3JvdXRlS2luZDpvfW9mIGUpe2lmKHIuaGFzKG8pKXRocm93IG5ldyBSYW5nZUVycm9yKGBNdWx0aXBsZSByb3V0ZSBjb25maWd1cmF0aW9uIGZvciBraW5kOiAke299LiBDb25maWd1cmF0aW9ucyBzaG91bGQgaGF2ZSB1bmlxdWUgcm91dGVLaW5kc2ApO3IuYWRkKG8pfX1nZW5lcmF0ZUFjdGlvbih0LGUpe3JldHVybiB0LmFjdGlvbkdlbmVyYXRvcj90LmFjdGlvbkdlbmVyYXRvcihlKTpudWxsfW1hdGNoKHQpe2lmKCF0LnBhdGhuYW1lLnN0YXJ0c1dpdGgoIi8iKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignTmF2aWdhdGlvbiBoYXMgdG8gbWFkZSB3aXRoIHBhdGhuYW1lIHRoYXQgc3RhcnRzIHdpdGggIi8iJyk7bGV0IG8sZT1xOCh0LnBhdGhuYW1lKSxpPTAscj0hMTtmb3IoOzspe2xldCBhPSExO2ZvcihsZXQgcyBvZiB0aGlzLmNvbmZpZ01hdGNoZXJzKXtsZXQgbD1zLm1hdGNoKGUpO2lmKGwucmVzdWx0KXthPSEwO2xldHtwYXJhbXM6YyxwYXRoUGFydHM6ZCxpc1JlZGlyZWN0aW9uOnV9PWw7aWYodSl7ZT1kLHI9ITAsbz1sLnJlZGlyZWN0aW9uUXVlcnlQYXJhbXM7YnJlYWt9aWYoIShzIGluc3RhbmNlb2YgZXYpKXRocm93IG5ldyBSYW5nZUVycm9yKCJObyBjb25jcmV0ZSByb3V0ZSBkZWZpbml0aW9uIGBtYXRjaGAgcmV0dXJuIHJlZGlyZWN0aW9uIik7bGV0e2RlZmluaXRpb246cH09cyxoPXtyb3V0ZUtpbmQ6cC5yb3V0ZUtpbmQscGFyYW1zOmMscGF0aG5hbWU6VzgoZCksZGVlcExpbmtQcm92aWRlcjpwLmRlZXBMaW5rUHJvdmlkZXJ8fG51bGwsYWN0aW9uOnRoaXMuZ2VuZXJhdGVBY3Rpb24ocCxkKX07cmV0dXJuIHI/ey4uLmgsb3JpZ2luYXRlRnJvbVJlZGlyZWN0aW9uOiEwLHJlZGlyZWN0aW9uT25seVF1ZXJ5UGFyYW1zOm99OnsuLi5oLG9yaWdpbmF0ZUZyb21SZWRpcmVjdGlvbjohMX19fWlmKHImJmkrKywhYXx8aT50aGlzLm1heFJlZGlyZWN0aW9uKWJyZWFrfWlmKGk+dGhpcy5tYXhSZWRpcmVjdGlvbil0aHJvdyBuZXcgRXJyb3IoYFBvdGVudGlhbCByZWRpcmVjdGlvbiBsb29wIChyZWRpcmVjdGluZyBtb3JlIHRoYW4gJHt0aGlzLm1heFJlZGlyZWN0aW9ufSB0aW1lcy4gUGxlYXNlIGRvIG5vdCBoYXZlIGN5Y2xlcyBpbiB0aGUgcm91dGVzLmApO2lmKHRoaXMuZGVmYXVsdFJvdXRlQ29uZmlnKXtsZXR7ZGVmaW5pdGlvbjphfT10aGlzLmRlZmF1bHRSb3V0ZUNvbmZpZztyZXR1cm57cm91dGVLaW5kOmEucm91dGVLaW5kLGRlZXBMaW5rUHJvdmlkZXI6YS5kZWVwTGlua1Byb3ZpZGVyPz9udWxsLHBhdGhuYW1lOmEucGF0aCxwYXJhbXM6e30sb3JpZ2luYXRlRnJvbVJlZGlyZWN0aW9uOiEwLHJlZGlyZWN0aW9uT25seVF1ZXJ5UGFyYW1zOnZvaWQgMCxhY3Rpb246dGhpcy5nZW5lcmF0ZUFjdGlvbihhLGUpfX1yZXR1cm4gbnVsbH1tYXRjaEJ5Um91dGVLaW5kKHQsZSl7bGV0IGk9dGhpcy5yb3V0ZUtpbmRUb0NvbmNyZXRlQ29uZmlnTWF0Y2hlcnMuZ2V0KHQpO2lmKCFpKXRocm93IG5ldyBSYW5nZUVycm9yKGBSZXF1aXJlcyBjb25maWd1cmF0aW9uIGZvciByb3V0ZUtpbmQ6ICR7dH1gKTtsZXQgcj1pLm1hdGNoQnlQYXJhbXMoZSk7cmV0dXJue3JvdXRlS2luZDp0LHBhcmFtczplLHBhdGhuYW1lOlc4KHIucGF0aFBhcnRzKSxkZWVwTGlua1Byb3ZpZGVyOmkuZGVmaW5pdGlvbi5kZWVwTGlua1Byb3ZpZGVyfHxudWxsLG9yaWdpbmF0ZUZyb21SZWRpcmVjdGlvbjohMSxhY3Rpb246dGhpcy5nZW5lcmF0ZUFjdGlvbihpLmRlZmluaXRpb24sci5wYXRoUGFydHMpfX19O2Z1bmN0aW9uIHE4KG4pe3JldHVybiBuLnNwbGl0KCIvIikuc2xpY2UoMSl9ZnVuY3Rpb24gVzgobil7cmV0dXJuIi8iK24uam9pbigiLyIpfXZhciBjRj1uZXcgdGUoIltBcHAgUm91dGluZ10gUm91dGUgQ29uZmlnIiksUmw9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXtpZih0aGlzLnJvdXRlS2luZFRvTmdDb21wb25lbnQ9bmV3IE1hcCwhZSlyZXR1cm4gdm9pZCh0aGlzLnJvdXRlQ29uZmlncz1uZXcgdHYoW10pKTtsZXQgaT1bXTtmb3IobGV0IHIgb2YgZSlmb3IobGV0IG8gb2YgcilpLnB1c2gobyk7dGhpcy5yb3V0ZUNvbmZpZ3M9bmV3IHR2KGkpLGkuZm9yRWFjaChyPT57JGIocikmJnRoaXMucm91dGVLaW5kVG9OZ0NvbXBvbmVudC5zZXQoci5yb3V0ZUtpbmQsci5uZ0NvbXBvbmVudCl9KX1nZXRSZWdpc3RlcmVkUm91dGVLaW5kcygpe3JldHVybiB0aGlzLnJvdXRlS2luZFRvTmdDb21wb25lbnQua2V5cygpfWdldFJvdXRlQ29uZmlncygpe3JldHVybiB0aGlzLnJvdXRlQ29uZmlnc31nZXROZ0NvbXBvbmVudEJ5Um91dGVLaW5kKGUpe3JldHVybiB0aGlzLnJvdXRlS2luZFRvTmdDb21wb25lbnQuZ2V0KGUpfHxudWxsfXN0YXRpYyByZWdpc3RlclJvdXRlcyhlKXtyZXR1cm57bmdNb2R1bGU6bixwcm92aWRlcnM6W3twcm92aWRlOmNGLG11bHRpOiEwLHVzZUZhY3Rvcnk6ZX1dfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhjRiw4KSl9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe30pLG59KSgpLGVTPSJhcHBfcm91dGluZyIsbnY9TXIoZVMpLEhvPVcobnYsbj0+bi5hY3RpdmVSb3V0ZSksUTg9VyhudixuPT5uLm5leHRSb3V0ZSksWjg9VyhudixuPT5uLmFjdGl2ZU5hbWVzcGFjZUlkKSxLOD1XKG52LG49Pm4ucmVoeWRyYXRlZERlZXBMaW5rcyksSjg9VyhudixuPT5uLnJlZ2lzdGVyZWRSb3V0ZUtleXMpLFdzPVcoSG8sbj0+bj9uLnJvdXRlS2luZDpDbi5OT1RfU0VUKSx1Rj1XKEhvLG49Pm4/bi5wYXJhbXM6e30pLG9yPVcoV3MsdUYsKG4sdCk9PkpiKG4sdCkpLHFzPShXKFdzLHVGLChuLHQpPT57aWYobiE9PUNuLkNPTVBBUkVfRVhQRVJJTUVOVClyZXR1cm57fTtsZXQgaT1mdW5jdGlvbihuKXtsZXQgdD1uZXcgTWFwLGU9UmYobi5leHBlcmltZW50SWRzKTtmb3IobGV0e2lkOmksbmFtZTpyfW9mIGUpciYmdC5zZXQoaSxyKTtyZXR1cm4gdH0odCk7cmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhpLmVudHJpZXMoKSl9KSxXKFdzLHVGLChuLHQpPT57bGV0IGU9dDtpZihuIT09Q24uQ09NUEFSRV9FWFBFUklNRU5UJiYobiE9PUNuLkNBUkR8fC0xPT09ZS5leHBlcmltZW50SWRzLmluZGV4T2YoIiwiKSkpcmV0dXJue307bGV0IGk9ZnVuY3Rpb24obil7bGV0IHQ9bmV3IE1hcCxlPVJmKG4uZXhwZXJpbWVudElkcyksaT0wO2ZvcihsZXR7aWQ6cixuYW1lOm99b2YgZSlpKyssIXQuaGFzKHIpJiZ0LnNldChyLHthbGlhc1RleHQ6byxhbGlhc051bWJlcjppfSk7cmV0dXJuIHR9KGUpO3JldHVybiBPYmplY3QuZnJvbUVudHJpZXMoaS5lbnRyaWVzKCkpfSkpLHBGPWZlKCJbQXBwIFJvdXRpbmddIEVmZmVjdHMgSW5pdCIpLGhhPSgoKT0+e3JldHVybihuPWhhfHwoaGE9e30pKVtuLlVOQ0hBTkdFRD0wXT0iVU5DSEFOR0VEIixuW24uTkVXPTFdPSJORVciLG5bbi5GUk9NX0hJU1RPUlk9Ml09IkZST01fSElTVE9SWSIsaGE7dmFyIG59KSgpLCQ4PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyxhLHMsbCl7dGhpcy5hY3Rpb25zJD1lLHRoaXMuc3RvcmU9aSx0aGlzLmxvY2F0aW9uPXIsdGhpcy5kaXJ0eVVwZGF0ZXNSZWdpc3RyeT1vLHRoaXMucmVnaXN0cnk9YSx0aGlzLnByb2dyYW1tYXRpY2FsTmF2TW9kdWxlPXMsdGhpcy5hcHBSb290UHJvdmlkZXI9bCx0aGlzLm9uTmF2aWdhdGlvblJlcXVlc3RlZCQ9dGhpcy5hY3Rpb25zJC5waXBlKFpuKGlGKSxxKGM9Pih7cGF0aG5hbWU6Yy5wYXRobmFtZS5zdGFydHNXaXRoKCIvIik/dGhpcy5hcHBSb290UHJvdmlkZXIuZ2V0QWJzUGF0aG5hbWVXaXRoQXBwUm9vdChjLnBhdGhuYW1lKTp0aGlzLmxvY2F0aW9uLmdldFJlc29sdmVkUGF0aChjLnBhdGhuYW1lKSxvcHRpb25zOnticm93c2VySW5pdGlhdGVkOiExLHJlcGxhY2VTdGF0ZTpjLnJlcGxhY2VTdGF0ZT8/ITEsbmFtZXNwYWNlVXBkYXRlOntvcHRpb246Yy5yZXNldE5hbWVzcGFjZWRTdGF0ZT9oYS5ORVc6aGEuVU5DSEFOR0VEfX19KSkpLHRoaXMuYm9vdHN0cmFwUmVkdWNlcnMkPV9yKCgpPT50aGlzLmFjdGlvbnMkLnBpcGUoWm4ocEYpLHEoKCk9Pkp3KHtyb3V0ZUtpbmRzOm5ldyBTZXQodGhpcy5yZWdpc3RyeS5nZXRSZWdpc3RlcmVkUm91dGVLaW5kcygpKX0pKSkpLHRoaXMub25Jbml0JD10aGlzLmFjdGlvbnMkLnBpcGUoWm4ocEYpKS5waXBlKFJzKDApLHEoKCk9PntsZXQgYz10aGlzLmxvY2F0aW9uLmdldEhpc3RvcnlTdGF0ZSgpPy5uYW1lc3BhY2VJZCxkPXZvaWQgMD09PWM/e29wdGlvbjpoYS5ORVd9OntvcHRpb246aGEuRlJPTV9ISVNUT1JZLG5hbWVzcGFjZUlkOmN9O3JldHVybntwYXRobmFtZTp0aGlzLmxvY2F0aW9uLmdldFBhdGgoKSxvcHRpb25zOnticm93c2VySW5pdGlhdGVkOiEwLHJlcGxhY2VTdGF0ZTohMCxuYW1lc3BhY2VVcGRhdGU6ZH19fSkpLHRoaXMub25Qb3BTdGF0ZSQ9dGhpcy5sb2NhdGlvbi5vblBvcFN0YXRlKCkucGlwZShxKGM9Pih7cGF0aG5hbWU6Yy5wYXRobmFtZSxvcHRpb25zOnticm93c2VySW5pdGlhdGVkOiEwLHJlcGxhY2VTdGF0ZTohMCxuYW1lc3BhY2VVcGRhdGU6dm9pZCAwPT09Yy5zdGF0ZT8ubmFtZXNwYWNlSWQ/e29wdGlvbjpoYS5VTkNIQU5HRUR9OntvcHRpb246aGEuRlJPTV9ISVNUT1JZLG5hbWVzcGFjZUlkOmMuc3RhdGUubmFtZXNwYWNlSWR9fX0pKSksdGhpcy51c2VySW5pdE5hdlJvdXRlJD10bih0aGlzLm9uTmF2aWdhdGlvblJlcXVlc3RlZCQsdGhpcy5vbkluaXQkLHRoaXMub25Qb3BTdGF0ZSQpLnBpcGUocShjPT57aWYoIWMucGF0aG5hbWUuc3RhcnRzV2l0aCgiLyIpKXRocm93IG5ldyBFcnJvcihgW0FwcCByb3V0aW5nXSBwYXRobmFtZSBtdXN0IHN0YXJ0IHdpdGggJy8nLiBHb3Q6ICR7Yy5wYXRobmFtZX1gKTtyZXR1cm57Li4uYyxwYXRobmFtZTp0aGlzLmFwcFJvb3RQcm92aWRlci5nZXRBcHBSb290bGVzc1BhdGhuYW1lKGMucGF0aG5hbWUpfX0pLHEoYz0+KHtyb3V0ZU1hdGNoOnRoaXMucm91dGVDb25maWdzLm1hdGNoKGMpLG9wdGlvbnM6Yy5vcHRpb25zfSkpKSx0aGlzLnByb2dyYW1tYXRpY2FsTmF2Um91dGUkPXRoaXMuYWN0aW9ucyQucGlwZShxKGM9PnRoaXMucHJvZ3JhbW1hdGljYWxOYXZNb2R1bGUuZ2V0TmF2aWdhdGlvbihjKSksT2UoYz0+bnVsbCE9PWMpLHEoYz0+e2xldCBtLGQ9Yyx7cmVwbGFjZVN0YXRlOnU9ITEscmVzZXROYW1lc3BhY2VkU3RhdGU6cCxyb3V0ZUtpbmQ6aH09ZDtyZXR1cm4gbT1kLnJvdXRlS2luZD09PUNuLkNPTVBBUkVfRVhQRVJJTUVOVD97ZXhwZXJpbWVudElkczpCOChkLnJvdXRlUGFyYW1zLmFsaWFzQW5kRXhwZXJpbWVudElkcyl9OmQucm91dGVQYXJhbXMse3JlcGxhY2VTdGF0ZTp1LHJvdXRlS2luZDpoLHJvdXRlUGFyYW1zOm0scmVzZXROYW1lc3BhY2VkU3RhdGU6cH19KSxxKCh7cmVwbGFjZVN0YXRlOmMscm91dGVLaW5kOmQscm91dGVQYXJhbXM6dSxyZXNldE5hbWVzcGFjZWRTdGF0ZTpwfSk9Pih7cm91dGVNYXRjaDp0aGlzLnJvdXRlQ29uZmlncz90aGlzLnJvdXRlQ29uZmlncy5tYXRjaEJ5Um91dGVLaW5kKGQsdSk6bnVsbCxvcHRpb25zOntyZXBsYWNlU3RhdGU6Yyxicm93c2VySW5pdGlhdGVkOiExLG5hbWVzcGFjZVVwZGF0ZTp7b3B0aW9uOnA/aGEuTkVXOmhhLlVOQ0hBTkdFRH19fSkpKSx0aGlzLnZhbGlkYXRlZFJvdXRlTWF0Y2gkPXRuKHRoaXMudXNlckluaXROYXZSb3V0ZSQsdGhpcy5wcm9ncmFtbWF0aWNhbE5hdlJvdXRlJCkucGlwZShPZSgoe3JvdXRlTWF0Y2g6Y30pPT5Cb29sZWFuKGMpKSxxKCh7cm91dGVNYXRjaDpjLG9wdGlvbnM6ZH0pPT4oe3JvdXRlTWF0Y2g6YyxvcHRpb25zOmR9KSkpLHRoaXMubmF2aWdhdGUkPV9yKCgpPT50aGlzLnZhbGlkYXRlZFJvdXRlTWF0Y2gkLnBpcGUoSXQodGhpcy5zdG9yZS5zZWxlY3QoSG8pKSx4bigoW3UscF0pPT57bGV0IGg9bnVsbCE9PXAmJlZvKHAsdS5yb3V0ZU1hdGNoKSxtPXRoaXMuZGlydHlVcGRhdGVzUmVnaXN0cnkuZ2V0RGlydHlVcGRhdGVzU2VsZWN0b3JzKCk7cmV0dXJuIGh8fCFtLmxlbmd0aD8kdCh1KTpDbyh0aGlzLmRpcnR5VXBkYXRlc1JlZ2lzdHJ5LmdldERpcnR5VXBkYXRlc1NlbGVjdG9ycygpLm1hcChfPT50aGlzLnN0b3JlLnNlbGVjdChfKS5waXBlKEx0KDEpKSkpLnBpcGUocShfPT52b2lkIDAhPT1fWzBdLmV4cGVyaW1lbnRJZHMmJl9bMF0uZXhwZXJpbWVudElkcy5sZW5ndGg+MCksT2UoXz0+e2lmKF8pe2xldCBNPXdpbmRvdy5jb25maXJtKCJZb3UgaGF2ZSB1bnNhdmVkIGVkaXRzLCBhcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGlzY2FyZCB0aGVtPyIpO3JldHVybiBNJiZ0aGlzLnN0b3JlLmRpc3BhdGNoKGo4KCkpLE19cmV0dXJuITB9KSxxKCgpPT51KSl9KSxJdCh0aGlzLnN0b3JlLnNlbGVjdChLOCkpLER0KChbe3JvdXRlTWF0Y2g6dSxvcHRpb25zOnB9LGhdKT0+e2lmKCFwLmJyb3dzZXJJbml0aWF0ZWR8fCF1LmRlZXBMaW5rUHJvdmlkZXJ8fHAubmFtZXNwYWNlVXBkYXRlLm9wdGlvbj09PWhhLkZST01fSElTVE9SWSYmIVp3KHUucm91dGVLaW5kLHAubmFtZXNwYWNlVXBkYXRlLm5hbWVzcGFjZUlkLGgpKXJldHVybjtsZXQgbT11Lm9yaWdpbmF0ZUZyb21SZWRpcmVjdGlvbiYmdS5yZWRpcmVjdGlvbk9ubHlRdWVyeVBhcmFtcz91LnJlZGlyZWN0aW9uT25seVF1ZXJ5UGFyYW1zOnRoaXMubG9jYXRpb24uZ2V0U2VhcmNoKCksXz11LmRlZXBMaW5rUHJvdmlkZXIuZGVzZXJpYWxpemVRdWVyeVBhcmFtcyhtKTt0aGlzLnN0b3JlLmRpc3BhdGNoKGZ1KHtyb3V0ZUtpbmQ6dS5yb3V0ZUtpbmQscGFydGlhbFN0YXRlOl99KSl9KSxEdCgoW3tyb3V0ZU1hdGNoOnV9XSk9Pnt1LmFjdGlvbiYmdGhpcy5zdG9yZS5kaXNwYXRjaCh1LmFjdGlvbil9KSxKbigoW3tyb3V0ZU1hdGNoOnUsb3B0aW9uczpwfV0pPT5udWxsPT09dS5kZWVwTGlua1Byb3ZpZGVyPyR0KHtyb3V0ZTp7cm91dGVLaW5kOnUucm91dGVLaW5kLHBhcmFtczp1LnBhcmFtc30scGF0aG5hbWU6dS5wYXRobmFtZSxxdWVyeVBhcmFtczpbXSxvcHRpb25zOnB9KTp1LmRlZXBMaW5rUHJvdmlkZXIuc2VyaWFsaXplU3RhdGVUb1F1ZXJ5UGFyYW1zKHRoaXMuc3RvcmUpLnBpcGUocSgoaCxtKT0+KHtyb3V0ZTp7cm91dGVLaW5kOnUucm91dGVLaW5kLHBhcmFtczp1LnBhcmFtc30scGF0aG5hbWU6dS5wYXRobmFtZSxxdWVyeVBhcmFtczpoLG9wdGlvbnM6MD09PW0/cDp7Li4ucCxuYW1lc3BhY2VVcGRhdGU6e29wdGlvbjpoYS5VTkNIQU5HRUR9LHJlcGxhY2VTdGF0ZTohMH19KSkpKSxEdCgoe3JvdXRlOnV9KT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goT2Yoe2FmdGVyOnV9KSl9KSxDcigwKSkucGlwZShJdCh0aGlzLnN0b3JlLnNlbGVjdChIbykpLHEoKFt1LHBdKT0+e2xldCBoPW51bGw9PT1wfHxudWxsPT09dS5yb3V0ZXx8Vm8ocCx1LnJvdXRlKTtyZXR1cm57Li4udSxwcmVzZXJ2ZUhhc2g6aH19KSxEdCgoe3ByZXNlcnZlSGFzaDp1LHBhdGhuYW1lOnAscXVlcnlQYXJhbXM6aCxvcHRpb25zOm19KT0+eyhmdW5jdGlvbihuLHQpe3JldHVybiBuLnBhdGhuYW1lPT09dC5wYXRobmFtZSYmbi5xdWVyeVBhcmFtcy5sZW5ndGg9PT10LnF1ZXJ5UGFyYW1zLmxlbmd0aCYmbi5xdWVyeVBhcmFtcy5ldmVyeSgoZSxpKT0+e2xldCByPXQucXVlcnlQYXJhbXNbaV07cmV0dXJuIGUua2V5PT09ci5rZXkmJmUudmFsdWU9PT1yLnZhbHVlfSl9KSh7cGF0aG5hbWU6cCxxdWVyeVBhcmFtczpofSx7cGF0aG5hbWU6dGhpcy5hcHBSb290UHJvdmlkZXIuZ2V0QXBwUm9vdGxlc3NQYXRobmFtZSh0aGlzLmxvY2F0aW9uLmdldFBhdGgoKSkscXVlcnlQYXJhbXM6dGhpcy5sb2NhdGlvbi5nZXRTZWFyY2goKX0pfHwobS5yZXBsYWNlU3RhdGU/dGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGVVcmwodGhpcy5hcHBSb290UHJvdmlkZXIuZ2V0QWJzUGF0aG5hbWVXaXRoQXBwUm9vdCh0aGlzLmxvY2F0aW9uLmdldEZ1bGxQYXRoKHAsaCx1KSkpOnRoaXMubG9jYXRpb24ucHVzaFN0YXRlVXJsKHRoaXMuYXBwUm9vdFByb3ZpZGVyLmdldEFic1BhdGhuYW1lV2l0aEFwcFJvb3QodGhpcy5sb2NhdGlvbi5nZXRGdWxsUGF0aChwLGgsdSkpKSl9KSkucGlwZShJdCh0aGlzLnN0b3JlLnNlbGVjdChIbyksdGhpcy5zdG9yZS5zZWxlY3QoWjgpKSxxKChbe3JvdXRlOnUsb3B0aW9uczpwfSxoLG1dKT0+e2xldCBfPWZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gdC5uYW1lc3BhY2VVcGRhdGUub3B0aW9uPT09aGEuRlJPTV9ISVNUT1JZP3QubmFtZXNwYWNlVXBkYXRlLm5hbWVzcGFjZUlkOm51bGw9PWV8fHQubmFtZXNwYWNlVXBkYXRlLm9wdGlvbj09PWhhLk5FVz9gJHtEYXRlLm5vdygpLnRvU3RyaW5nKCl9OiR7ZnVuY3Rpb24oKXtsZXQgbj1uZXcgVWludDhBcnJheSgzMik7Y3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuKTtsZXQgdD0iIjtmb3IobGV0IGUgb2Ygbil0Kz0oZT4+NCkudG9TdHJpbmcoMTYpO3JldHVybiB0fSgpfWA6ZX0oMCxwLG0pO3JldHVybiB0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZURhdGEoey4uLnRoaXMubG9jYXRpb24uZ2V0SGlzdG9yeVN0YXRlKCksbmFtZXNwYWNlSWQ6X30pLE5hKHtiZWZvcmU6aCxhZnRlcjp1LGJlZm9yZU5hbWVzcGFjZUlkOm0sYWZ0ZXJOYW1lc3BhY2VJZDpffSl9KSkpLHRoaXMucm91dGVDb25maWdzPWEuZ2V0Um91dGVDb25maWdzKCl9bmdyeE9uSW5pdEVmZmVjdHMoKXtyZXR1cm4gcEYoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhFbyksTyhJZSksTyhkaCksTyhLdyksTyhSbCksTygkdyksTyh1aCkpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLFVmZT1ncih7YWN0aXZlUm91dGU6bnVsbCxuZXh0Um91dGU6bnVsbCxhY3RpdmVOYW1lc3BhY2VJZDpudWxsLHJlaHlkcmF0ZWREZWVwTGlua3M6W10scmVnaXN0ZXJlZFJvdXRlS2V5czpuZXcgU2V0fSx5ZShPZiwobix7YWZ0ZXI6dH0pPT4oey4uLm4sbmV4dFJvdXRlOnR9KSkseWUoTmEsKG4se2FmdGVyOnQsYWZ0ZXJOYW1lc3BhY2VJZDplfSk9PntsZXQgaT1uLnJlaHlkcmF0ZWREZWVwTGlua3M7cmV0dXJuIFp3KHQucm91dGVLaW5kLGUsaSkmJihpPVsuLi5pXSxpLnB1c2goe2RlZXBMaW5rR3JvdXA6JE8odC5yb3V0ZUtpbmQpLG5hbWVzcGFjZUlkOmV9KSksey4uLm4sYWN0aXZlUm91dGU6dCxuZXh0Um91dGU6bnVsbCxhY3RpdmVOYW1lc3BhY2VJZDplLHJlaHlkcmF0ZWREZWVwTGlua3M6aX19KSx5ZShKdywobix7cm91dGVLaW5kczp0fSk9Pih7Li4ubixyZWdpc3RlcmVkUm91dGVLZXlzOnR9KSkpO2Z1bmN0aW9uIGU2KG4sdCl7cmV0dXJuIFVmZShuLHQpfXZhciBOZj0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9SCh7cHJvdmlkZXJzOltLdywkd10saW1wb3J0czpbUmwsd3IuZm9yRmVhdHVyZShlUyxlNiksdG8uZm9yRmVhdHVyZShbJDhdKSxrZixQZl19KSxufSkoKSxubz0oKCk9PntyZXR1cm4obj1ub3x8KG5vPXt9KSkuU1RFUD0ic3RlcCIsbi5XQUxMX1RJTUU9IndhbGxfdGltZSIsbi5SRUxBVElWRT0icmVsYXRpdmUiLG5vO3ZhciBufSkoKSxTcj0oKCk9PntyZXR1cm4obj1Tcnx8KFNyPXt9KSkuT0ZGU0VUPSJvZmZzZXQiLG4uT1ZFUkxBWT0ib3ZlcmxheSIsU3I7dmFyIG59KSgpLHQ2PSJfX3RhYl9fIixuNj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7d2luZG93LnRlbnNvcmJvYXJkLnRmX3N0b3JhZ2UubWlncmF0ZUxlZ2FjeVVSTFNjaGVtZSgpLHdpbmRvdy50ZW5zb3Jib2FyZC50Zl9nbG9iYWxzLnNldFVzZUhhc2goITApfWdldFN0cmluZyhlKXtyZXR1cm4gd2luZG93LnRlbnNvcmJvYXJkLnRmX3N0b3JhZ2UuZ2V0U3RyaW5nKGUpfXNldFN0cmluZyhlLGkscil7d2luZG93LnRlbnNvcmJvYXJkLnRmX3N0b3JhZ2Uuc2V0U3RyaW5nKGUsaSxyKX1nZXRQbHVnaW5JZCgpe3JldHVybiB3aW5kb3cudGVuc29yYm9hcmQudGZfc3RvcmFnZS5nZXRTdHJpbmcodDYpfXNldFBsdWdpbklkKGUsaSl7dGhpcy5zZXRTdHJpbmcodDYsZSxpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksZ3U9Y2xhc3N7fSxMYT0oKCk9PntyZXR1cm4obj1MYXx8KExhPXt9KSkuQlJPV1NFUl9ERUZBVUxUPSJicm93c2VyX2RlZmF1bHQiLG4uTElHSFQ9ImxpZ2h0IixuLkRBUks9ImRhcmsiLExhO3ZhciBufSkoKSxocz1mZSgiW1BlcnNpc3RlbnQgU2V0dGluZ3NdIEdsb2JhbCBTZXR0aW5ncyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxoRj1uZXcgdGUoIltQZXJzaXN0ZW50IFNldHRpbmdzXSBHbG9iYWwgU2V0dGluZ3MiKSxSaT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuZ2xvYmFsU2V0dGluZ1NlbGVjdG9ycz1bXSxlJiYodGhpcy5nbG9iYWxTZXR0aW5nU2VsZWN0b3JzPWUubWFwKGk9PmkoKSkpfWdldEdsb2JhbFNldHRpbmdTZWxlY3RvcnMoKXtyZXR1cm4gdGhpcy5nbG9iYWxTZXR0aW5nU2VsZWN0b3JzPz9bXX1zdGF0aWMgZGVmaW5lR2xvYmFsU2V0dGluZyhlKXtyZXR1cm57bmdNb2R1bGU6bixwcm92aWRlcnM6W3twcm92aWRlOmhGLG11bHRpOiEwLHVzZVZhbHVlOmV9XX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oaEYsOCkpfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1IKHt9KSxufSkoKSxpNj0iX3RiX2dsb2JhbF9zZXR0aW5ncy50aW1lc2VyaWVzIixyNj0iX3RiX2dsb2JhbF9zZXR0aW5ncyIsbzY9Im5vdGlmaWNhdGlvbkxhc3RSZWFkVGltZXN0YW1wIjtmdW5jdGlvbiBhNihuKXtuLmZvckVhY2godD0+e3Quc29ydGFibGU9ITAsIlJVTiI9PT10LnR5cGU/KHQubW92YWJsZT0hMSx0LnJlbW92YWJsZT0hMSk6KHQubW92YWJsZT0hMCx0LnJlbW92YWJsZT0hMCl9KX12YXIgdFM9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksblM9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksbUY9KCgpPT57Y2xhc3MgbiBleHRlbmRzIG5Te3VpVG9CYWNrZW5kKGUpe2xldCBpPXt9O3JldHVybiB2b2lkIDAhPT1lLmlnbm9yZU91dGxpZXJzJiYoaS5pZ25vcmVPdXRsaWVycz1lLmlnbm9yZU91dGxpZXJzKSx2b2lkIDAhPT1lLnNjYWxhclNtb290aGluZyYmKGkuc2NhbGFyU21vb3RoaW5nPWUuc2NhbGFyU21vb3RoaW5nKSx2b2lkIDAhPT1lLnRvb2x0aXBTb3J0JiYoaS50b29sdGlwU29ydD1lLnRvb2x0aXBTb3J0KSx2b2lkIDAhPT1lLmF1dG9SZWxvYWQmJihpLmF1dG9SZWxvYWQ9ZS5hdXRvUmVsb2FkKSx2b2lkIDAhPT1lLmF1dG9SZWxvYWRQZXJpb2RJbk1zJiYoaS5hdXRvUmVsb2FkUGVyaW9kSW5Ncz1lLmF1dG9SZWxvYWRQZXJpb2RJbk1zKSx2b2lkIDAhPT1lLnBhZ2VTaXplJiYoaS5wYWdpbmF0aW9uU2l6ZT1lLnBhZ2VTaXplKSx2b2lkIDAhPT1lLnRoZW1lT3ZlcnJpZGUmJihpLnRoZW1lPWUudGhlbWVPdmVycmlkZSksdm9pZCAwIT09ZS5ub3RpZmljYXRpb25MYXN0UmVhZFRpbWVJbk1zJiYoaS5ub3RpZmljYXRpb25MYXN0UmVhZFRpbWVJbk1zPWUubm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5Ncyksdm9pZCAwIT09ZS5zaWRlQmFyV2lkdGhJblBlcmNlbnQmJihpLnNpZGVCYXJXaWR0aEluUGVyY2VudD1lLnNpZGVCYXJXaWR0aEluUGVyY2VudCksdm9pZCAwIT09ZS50aW1lU2VyaWVzU2V0dGluZ3NQYW5lT3BlbmVkJiYoaS50aW1lU2VyaWVzU2V0dGluZ3NQYW5lT3BlbmVkPWUudGltZVNlcmllc1NldHRpbmdzUGFuZU9wZW5lZCksdm9pZCAwIT09ZS50aW1lU2VyaWVzQ2FyZE1pbldpZHRoJiYoaS50aW1lU2VyaWVzQ2FyZE1pbldpZHRoPWUudGltZVNlcmllc0NhcmRNaW5XaWR0aCksdm9pZCAwIT09ZS5zdGVwU2VsZWN0b3JFbmFibGVkJiYoaS5zdGVwU2VsZWN0b3JFbmFibGVkPWUuc3RlcFNlbGVjdG9yRW5hYmxlZCksdm9pZCAwIT09ZS5yYW5nZVNlbGVjdGlvbkVuYWJsZWQmJihpLnJhbmdlU2VsZWN0aW9uRW5hYmxlZD1lLnJhbmdlU2VsZWN0aW9uRW5hYmxlZCksdm9pZCAwIT09ZS5saW5rZWRUaW1lRW5hYmxlZCYmKGkubGlua2VkVGltZUVuYWJsZWQ9ZS5saW5rZWRUaW1lRW5hYmxlZCksdm9pZCAwIT09ZS5zaW5nbGVTZWxlY3Rpb25IZWFkZXJzJiYoaS5zaW5nbGVTZWxlY3Rpb25IZWFkZXJzPWUuc2luZ2xlU2VsZWN0aW9uSGVhZGVycyksdm9pZCAwIT09ZS5yYW5nZVNlbGVjdGlvbkhlYWRlcnMmJihpLnJhbmdlU2VsZWN0aW9uSGVhZGVycz1lLnJhbmdlU2VsZWN0aW9uSGVhZGVycyksdm9pZCAwIT09ZS5kYXNoYm9hcmREaXNwbGF5ZWRIcGFyYW1Db2x1bW5zJiYoaS5kYXNoYm9hcmREaXNwbGF5ZWRIcGFyYW1Db2x1bW5zPWUuZGFzaGJvYXJkRGlzcGxheWVkSHBhcmFtQ29sdW1ucyksdm9pZCAwIT09ZS5zYXZpbmdQaW5zRW5hYmxlZCYmKGkuc2F2aW5nUGluc0VuYWJsZWQ9ZS5zYXZpbmdQaW5zRW5hYmxlZCksaX1iYWNrZW5kVG9VaShlKXtsZXQgaT17fTtyZXR1cm4gZS5oYXNPd25Qcm9wZXJ0eSgic2NhbGFyU21vb3RoaW5nIikmJiJudW1iZXIiPT10eXBlb2YgZS5zY2FsYXJTbW9vdGhpbmcmJihpLnNjYWxhclNtb290aGluZz1lLnNjYWxhclNtb290aGluZyksZS5oYXNPd25Qcm9wZXJ0eSgiaWdub3JlT3V0bGllcnMiKSYmImJvb2xlYW4iPT10eXBlb2YgZS5pZ25vcmVPdXRsaWVycyYmKGkuaWdub3JlT3V0bGllcnM9ZS5pZ25vcmVPdXRsaWVycyksZS5oYXNPd25Qcm9wZXJ0eSgidG9vbHRpcFNvcnQiKSYmInN0cmluZyI9PXR5cGVvZiBlLnRvb2x0aXBTb3J0JiYoaS50b29sdGlwU29ydD1lLnRvb2x0aXBTb3J0KSxlLmhhc093blByb3BlcnR5KCJhdXRvUmVsb2FkIikmJiJib29sZWFuIj09dHlwZW9mIGUuYXV0b1JlbG9hZCYmKGkuYXV0b1JlbG9hZD1lLmF1dG9SZWxvYWQpLGUuaGFzT3duUHJvcGVydHkoImF1dG9SZWxvYWRQZXJpb2RJbk1zIikmJiJudW1iZXIiPT10eXBlb2YgZS5hdXRvUmVsb2FkUGVyaW9kSW5NcyYmKGkuYXV0b1JlbG9hZFBlcmlvZEluTXM9ZS5hdXRvUmVsb2FkUGVyaW9kSW5NcyksZS5oYXNPd25Qcm9wZXJ0eSgicGFnaW5hdGlvblNpemUiKSYmIm51bWJlciI9PXR5cGVvZiBlLnBhZ2luYXRpb25TaXplJiYoaS5wYWdlU2l6ZT1lLnBhZ2luYXRpb25TaXplKSxlLmhhc093blByb3BlcnR5KCJ0aGVtZSIpJiYic3RyaW5nIj09dHlwZW9mIGUudGhlbWUmJm5ldyBTZXQoT2JqZWN0LnZhbHVlcyhMYSkpLmhhcyhlLnRoZW1lKSYmKGkudGhlbWVPdmVycmlkZT1lLnRoZW1lKSxlLmhhc093blByb3BlcnR5KCJub3RpZmljYXRpb25MYXN0UmVhZFRpbWVJbk1zIikmJiJudW1iZXIiPT10eXBlb2YgZS5ub3RpZmljYXRpb25MYXN0UmVhZFRpbWVJbk1zJiYoaS5ub3RpZmljYXRpb25MYXN0UmVhZFRpbWVJbk1zPWUubm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5NcyksZS5oYXNPd25Qcm9wZXJ0eSgic2lkZUJhcldpZHRoSW5QZXJjZW50IikmJiJudW1iZXIiPT10eXBlb2YgZS5zaWRlQmFyV2lkdGhJblBlcmNlbnQmJihpLnNpZGVCYXJXaWR0aEluUGVyY2VudD1lLnNpZGVCYXJXaWR0aEluUGVyY2VudCksZS5oYXNPd25Qcm9wZXJ0eSgidGltZVNlcmllc1NldHRpbmdzUGFuZU9wZW5lZCIpJiYiYm9vbGVhbiI9PXR5cGVvZiBlLnRpbWVTZXJpZXNTZXR0aW5nc1BhbmVPcGVuZWQmJihpLnRpbWVTZXJpZXNTZXR0aW5nc1BhbmVPcGVuZWQ9ZS50aW1lU2VyaWVzU2V0dGluZ3NQYW5lT3BlbmVkKSxlLmhhc093blByb3BlcnR5KCJ0aW1lU2VyaWVzQ2FyZE1pbldpZHRoIikmJiJudW1iZXIiPT10eXBlb2YgZS50aW1lU2VyaWVzQ2FyZE1pbldpZHRoJiYoaS50aW1lU2VyaWVzQ2FyZE1pbldpZHRoPWUudGltZVNlcmllc0NhcmRNaW5XaWR0aCksZS5oYXNPd25Qcm9wZXJ0eSgic3RlcFNlbGVjdG9yRW5hYmxlZCIpJiYiYm9vbGVhbiI9PXR5cGVvZiBlLnN0ZXBTZWxlY3RvckVuYWJsZWQmJihpLnN0ZXBTZWxlY3RvckVuYWJsZWQ9ZS5zdGVwU2VsZWN0b3JFbmFibGVkKSxlLmhhc093blByb3BlcnR5KCJyYW5nZVNlbGVjdGlvbkVuYWJsZWQiKSYmImJvb2xlYW4iPT10eXBlb2YgZS5yYW5nZVNlbGVjdGlvbkVuYWJsZWQmJihpLnJhbmdlU2VsZWN0aW9uRW5hYmxlZD1lLnJhbmdlU2VsZWN0aW9uRW5hYmxlZCksZS5oYXNPd25Qcm9wZXJ0eSgibGlua2VkVGltZUVuYWJsZWQiKSYmImJvb2xlYW4iPT10eXBlb2YgZS5saW5rZWRUaW1lRW5hYmxlZCYmKGkubGlua2VkVGltZUVuYWJsZWQ9ZS5saW5rZWRUaW1lRW5hYmxlZCksQXJyYXkuaXNBcnJheShlLnNpbmdsZVNlbGVjdGlvbkhlYWRlcnMpJiZ2b2lkIDAhPT1lLnNpbmdsZVNlbGVjdGlvbkhlYWRlcnNbMF0ubmFtZSYmIlJVTiI9PT1lLnNpbmdsZVNlbGVjdGlvbkhlYWRlcnNbMF0udHlwZSYmKGE2KGUuc2luZ2xlU2VsZWN0aW9uSGVhZGVycyksaS5zaW5nbGVTZWxlY3Rpb25IZWFkZXJzPWUuc2luZ2xlU2VsZWN0aW9uSGVhZGVycyksQXJyYXkuaXNBcnJheShlLnJhbmdlU2VsZWN0aW9uSGVhZGVycykmJnZvaWQgMCE9PWUucmFuZ2VTZWxlY3Rpb25IZWFkZXJzWzBdLm5hbWUmJiJSVU4iPT09ZS5yYW5nZVNlbGVjdGlvbkhlYWRlcnNbMF0udHlwZSYmKGE2KGUucmFuZ2VTZWxlY3Rpb25IZWFkZXJzKSxpLnJhbmdlU2VsZWN0aW9uSGVhZGVycz1lLnJhbmdlU2VsZWN0aW9uSGVhZGVycyksQXJyYXkuaXNBcnJheShlLmRhc2hib2FyZERpc3BsYXllZEhwYXJhbUNvbHVtbnMpJiYoaS5kYXNoYm9hcmREaXNwbGF5ZWRIcGFyYW1Db2x1bW5zPWUuZGFzaGJvYXJkRGlzcGxheWVkSHBhcmFtQ29sdW1ucyksZS5oYXNPd25Qcm9wZXJ0eSgic2F2aW5nUGluc0VuYWJsZWQiKSYmImJvb2xlYW4iPT10eXBlb2YgZS5zYXZpbmdQaW5zRW5hYmxlZCYmKGkuc2F2aW5nUGluc0VuYWJsZWQ9ZS5zYXZpbmdQaW5zRW5hYmxlZCksaX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1YbihuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLHM2PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5jb252ZXJ0ZXI9ZX1zZXRTZXR0aW5ncyhlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSk/dGhpcy5nZXRTZXR0aW5ncygpLnBpcGUoRHQoaT0+e3dpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShyNixKU09OLnN0cmluZ2lmeSh0aGlzLmNvbnZlcnRlci51aVRvQmFja2VuZCh7Li4uaSwuLi5lfSkpKSx3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oaTYpLHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShvNil9KSxxKCgpPT57fSkpOktyfWRlc2VyaWFsaXplKGUpe3RyeXtyZXR1cm4gSlNPTi5wYXJzZShlKX1jYXRjaHtyZXR1cm57fX19Z2V0U2V0dGluZ3MoKXtsZXQgZT13aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0obzYpO3JldHVybiAkdCh7Li4udGhpcy5jb252ZXJ0ZXIuYmFja2VuZFRvVWkodGhpcy5kZXNlcmlhbGl6ZShlP0pTT04uc3RyaW5naWZ5KHtub3RpZmljYXRpb25MYXN0UmVhZFRpbWVJbk1zOk51bWJlcihlKX0pOiJ7fSIpKSwuLi50aGlzLmNvbnZlcnRlci5iYWNrZW5kVG9VaSh0aGlzLmRlc2VyaWFsaXplKHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShpNik/PyJ7fSIpKSwuLi50aGlzLmNvbnZlcnRlci5iYWNrZW5kVG9VaSh0aGlzLmRlc2VyaWFsaXplKHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShyNik/PyJ7fSIpKX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKG5TKSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksbDY9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe3Byb3ZpZGVyczpbe3Byb3ZpZGU6dFMsdXNlQ2xhc3M6czZ9LG1GLHtwcm92aWRlOm5TLHVzZUV4aXN0aW5nOm1GfV19KSxufSkoKSxpUz0icGVyc2lzdGVudF9zZXR0aW5ncyIscGg9VyhNcihpUyksbj0+bi5zaG91bGRQZXJzaXN0U2V0dGluZ3MpLGM2PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyl7dGhpcy5hY3Rpb25zJD1lLHRoaXMuc3RvcmU9aSx0aGlzLmNvbmZpZ01vZHVsZT1yLHRoaXMuZGF0YVNvdXJjZT1vLHRoaXMuaW5pdGlhbGl6ZUFuZFVwZGF0ZVNldHRpbmdzJD1fcigoKT0+e2xldCBhPXRoaXMuYWN0aW9ucyQucGlwZShabihPZiksTHQoMSksSXQodGhpcy5zdG9yZS5zZWxlY3QocGgpKSxPZSgoWyxzXSk9PnMpLHhuKCgpPT50aGlzLmRhdGFTb3VyY2UuZ2V0U2V0dGluZ3MoKSksRHQocz0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goaHMoe3BhcnRpYWxTZXR0aW5nczpzfSkpfSksUnMoMCkseG4oKCk9PnRuKC4uLnRoaXMuY29uZmlnTW9kdWxlLmdldEdsb2JhbFNldHRpbmdTZWxlY3RvcnMoKS5tYXAobD0+dGhpcy5zdG9yZS5zZWxlY3QobCkucGlwZShyaSgoYyxkKT0+e2xldCB1PU9iamVjdC52YWx1ZXMoYykscD1PYmplY3QudmFsdWVzKGQpO3JldHVybiB1Lmxlbmd0aD09PXAubGVuZ3RoJiZ1LmV2ZXJ5KChoLG0pPT5oPT09cFttXSl9KSxvcygxKSkpKSksVGEoKSk7cmV0dXJuIGEucGlwZShmdW5jdGlvbihuKXtyZXR1cm4gWXQoKHQsZSk9PntsZXQgaT1bXTtyZXR1cm4gdC5zdWJzY3JpYmUoSHQoZSxyPT5pLnB1c2gociksKCk9PntlLm5leHQoaSksZS5jb21wbGV0ZSgpfSkpLG4uc3Vic2NyaWJlKEh0KGUsKCk9PntsZXQgcj1pO2k9W10sZS5uZXh0KHIpfSxmbCkpLCgpPT57aT1udWxsfX0pfShhLnBpcGUoQ3IoNTAwKSkpLHhuKHM9PntpZigwPT09cy5sZW5ndGgpcmV0dXJuIEtyO2xldCBsPXt9O2ZvcihsZXQgYyBvZiBzKU9iamVjdC5hc3NpZ24obCxjKTtyZXR1cm4gdGhpcy5kYXRhU291cmNlLnNldFNldHRpbmdzKGwpfSkpfSx7ZGlzcGF0Y2g6ITF9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhFbyksTyhJZSksTyhSaSksTyh0UykpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLFlmZT1ncih7c2hvdWxkUGVyc2lzdFNldHRpbmdzOiEwfSk7ZnVuY3Rpb24gZDYobix0KXtyZXR1cm4gWWZlKG4sdCl9dmFyIGl2PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1IKHtwcm92aWRlcnM6W1JpXSxpbXBvcnRzOlt3ci5mb3JGZWF0dXJlKGlTLGQ2KSx0by5mb3JGZWF0dXJlKFtjNl0pLGw2XX0pLG59KSgpLHJ2PWNsYXNze30sYVM9Y2xhc3N7fSxtcz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLm5vcm1hbGl6ZWROYW1lcz1uZXcgTWFwLHRoaXMubGF6eVVwZGF0ZT1udWxsLHQ/dGhpcy5sYXp5SW5pdD0ic3RyaW5nIj09dHlwZW9mIHQ/KCk9Pnt0aGlzLmhlYWRlcnM9bmV3IE1hcCx0LnNwbGl0KCJcbiIpLmZvckVhY2goZT0+e2xldCBpPWUuaW5kZXhPZigiOiIpO2lmKGk+MCl7bGV0IHI9ZS5zbGljZSgwLGkpLG89ci50b0xvd2VyQ2FzZSgpLGE9ZS5zbGljZShpKzEpLnRyaW0oKTt0aGlzLm1heWJlU2V0Tm9ybWFsaXplZE5hbWUocixvKSx0aGlzLmhlYWRlcnMuaGFzKG8pP3RoaXMuaGVhZGVycy5nZXQobykucHVzaChhKTp0aGlzLmhlYWRlcnMuc2V0KG8sW2FdKX19KX06KCk9Pnt0aGlzLmhlYWRlcnM9bmV3IE1hcCxPYmplY3QuZW50cmllcyh0KS5mb3JFYWNoKChbZSxpXSk9PntsZXQgcjtpZihyPSJzdHJpbmciPT10eXBlb2YgaT9baV06Im51bWJlciI9PXR5cGVvZiBpP1tpLnRvU3RyaW5nKCldOmkubWFwKG89Pm8udG9TdHJpbmcoKSksci5sZW5ndGg+MCl7bGV0IG89ZS50b0xvd2VyQ2FzZSgpO3RoaXMuaGVhZGVycy5zZXQobyxyKSx0aGlzLm1heWJlU2V0Tm9ybWFsaXplZE5hbWUoZSxvKX19KX06dGhpcy5oZWFkZXJzPW5ldyBNYXB9aGFzKHQpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLmhlYWRlcnMuaGFzKHQudG9Mb3dlckNhc2UoKSl9Z2V0KHQpe3RoaXMuaW5pdCgpO2xldCBlPXRoaXMuaGVhZGVycy5nZXQodC50b0xvd2VyQ2FzZSgpKTtyZXR1cm4gZSYmZS5sZW5ndGg+MD9lWzBdOm51bGx9a2V5cygpe3JldHVybiB0aGlzLmluaXQoKSxBcnJheS5mcm9tKHRoaXMubm9ybWFsaXplZE5hbWVzLnZhbHVlcygpKX1nZXRBbGwodCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMuaGVhZGVycy5nZXQodC50b0xvd2VyQ2FzZSgpKXx8bnVsbH1hcHBlbmQodCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7bmFtZTp0LHZhbHVlOmUsb3A6ImEifSl9c2V0KHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoe25hbWU6dCx2YWx1ZTplLG9wOiJzIn0pfWRlbGV0ZSh0LGUpe3JldHVybiB0aGlzLmNsb25lKHtuYW1lOnQsdmFsdWU6ZSxvcDoiZCJ9KX1tYXliZVNldE5vcm1hbGl6ZWROYW1lKHQsZSl7dGhpcy5ub3JtYWxpemVkTmFtZXMuaGFzKGUpfHx0aGlzLm5vcm1hbGl6ZWROYW1lcy5zZXQoZSx0KX1pbml0KCl7dGhpcy5sYXp5SW5pdCYmKHRoaXMubGF6eUluaXQgaW5zdGFuY2VvZiBtcz90aGlzLmNvcHlGcm9tKHRoaXMubGF6eUluaXQpOnRoaXMubGF6eUluaXQoKSx0aGlzLmxhenlJbml0PW51bGwsdGhpcy5sYXp5VXBkYXRlJiYodGhpcy5sYXp5VXBkYXRlLmZvckVhY2godD0+dGhpcy5hcHBseVVwZGF0ZSh0KSksdGhpcy5sYXp5VXBkYXRlPW51bGwpKX1jb3B5RnJvbSh0KXt0LmluaXQoKSxBcnJheS5mcm9tKHQuaGVhZGVycy5rZXlzKCkpLmZvckVhY2goZT0+e3RoaXMuaGVhZGVycy5zZXQoZSx0LmhlYWRlcnMuZ2V0KGUpKSx0aGlzLm5vcm1hbGl6ZWROYW1lcy5zZXQoZSx0Lm5vcm1hbGl6ZWROYW1lcy5nZXQoZSkpfSl9Y2xvbmUodCl7bGV0IGU9bmV3IG1zO3JldHVybiBlLmxhenlJbml0PXRoaXMubGF6eUluaXQmJnRoaXMubGF6eUluaXQgaW5zdGFuY2VvZiBtcz90aGlzLmxhenlJbml0OnRoaXMsZS5sYXp5VXBkYXRlPSh0aGlzLmxhenlVcGRhdGV8fFtdKS5jb25jYXQoW3RdKSxlfWFwcGx5VXBkYXRlKHQpe2xldCBlPXQubmFtZS50b0xvd2VyQ2FzZSgpO3N3aXRjaCh0Lm9wKXtjYXNlImEiOmNhc2UicyI6bGV0IGk9dC52YWx1ZTtpZigic3RyaW5nIj09dHlwZW9mIGkmJihpPVtpXSksMD09PWkubGVuZ3RoKXJldHVybjt0aGlzLm1heWJlU2V0Tm9ybWFsaXplZE5hbWUodC5uYW1lLGUpO2xldCByPSgiYSI9PT10Lm9wP3RoaXMuaGVhZGVycy5nZXQoZSk6dm9pZCAwKXx8W107ci5wdXNoKC4uLmkpLHRoaXMuaGVhZGVycy5zZXQoZSxyKTticmVhaztjYXNlImQiOmxldCBvPXQudmFsdWU7aWYobyl7bGV0IGE9dGhpcy5oZWFkZXJzLmdldChlKTtpZighYSlyZXR1cm47YT1hLmZpbHRlcihzPT4tMT09PW8uaW5kZXhPZihzKSksMD09PWEubGVuZ3RoPyh0aGlzLmhlYWRlcnMuZGVsZXRlKGUpLHRoaXMubm9ybWFsaXplZE5hbWVzLmRlbGV0ZShlKSk6dGhpcy5oZWFkZXJzLnNldChlLGEpfWVsc2UgdGhpcy5oZWFkZXJzLmRlbGV0ZShlKSx0aGlzLm5vcm1hbGl6ZWROYW1lcy5kZWxldGUoZSl9fWZvckVhY2godCl7dGhpcy5pbml0KCksQXJyYXkuZnJvbSh0aGlzLm5vcm1hbGl6ZWROYW1lcy5rZXlzKCkpLmZvckVhY2goZT0+dCh0aGlzLm5vcm1hbGl6ZWROYW1lcy5nZXQoZSksdGhpcy5oZWFkZXJzLmdldChlKSkpfX0sWmZlPS8lKFxkW2EtZjAtOV0pL2dpLEtmZT17NDA6IkAiLCIzQSI6IjoiLDI0OiIkIiwiMkMiOiIsIiwiM0IiOiI7IiwiM0QiOiI9IiwiM0YiOiI/IiwiMkYiOiIvIn07ZnVuY3Rpb24gdTYobil7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChuKS5yZXBsYWNlKFpmZSwodCxlKT0+S2ZlW2VdPz90KX1mdW5jdGlvbiByUyhuKXtyZXR1cm5gJHtufWB9dmFyIHZjPWNsYXNze2NvbnN0cnVjdG9yKHQ9e30pe2lmKHRoaXMudXBkYXRlcz1udWxsLHRoaXMuY2xvbmVGcm9tPW51bGwsdGhpcy5lbmNvZGVyPXQuZW5jb2Rlcnx8bmV3IGNsYXNze2VuY29kZUtleSh0KXtyZXR1cm4gdTYodCl9ZW5jb2RlVmFsdWUodCl7cmV0dXJuIHU2KHQpfWRlY29kZUtleSh0KXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHQpfWRlY29kZVZhbHVlKHQpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQodCl9fSx0LmZyb21TdHJpbmcpe2lmKHQuZnJvbU9iamVjdCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzcGVjaWZ5IGJvdGggZnJvbVN0cmluZyBhbmQgZnJvbU9iamVjdC4iKTt0aGlzLm1hcD1mdW5jdGlvbihuLHQpe2xldCBlPW5ldyBNYXA7cmV0dXJuIG4ubGVuZ3RoPjAmJm4ucmVwbGFjZSgvXlw/LywiIikuc3BsaXQoIiYiKS5mb3JFYWNoKHI9PntsZXQgbz1yLmluZGV4T2YoIj0iKSxbYSxzXT0tMT09bz9bdC5kZWNvZGVLZXkociksIiJdOlt0LmRlY29kZUtleShyLnNsaWNlKDAsbykpLHQuZGVjb2RlVmFsdWUoci5zbGljZShvKzEpKV0sbD1lLmdldChhKXx8W107bC5wdXNoKHMpLGUuc2V0KGEsbCl9KSxlfSh0LmZyb21TdHJpbmcsdGhpcy5lbmNvZGVyKX1lbHNlIHQuZnJvbU9iamVjdD8odGhpcy5tYXA9bmV3IE1hcCxPYmplY3Qua2V5cyh0LmZyb21PYmplY3QpLmZvckVhY2goZT0+e2xldCBpPXQuZnJvbU9iamVjdFtlXSxyPUFycmF5LmlzQXJyYXkoaSk/aS5tYXAoclMpOltyUyhpKV07dGhpcy5tYXAuc2V0KGUscil9KSk6dGhpcy5tYXA9bnVsbH1oYXModCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMubWFwLmhhcyh0KX1nZXQodCl7dGhpcy5pbml0KCk7bGV0IGU9dGhpcy5tYXAuZ2V0KHQpO3JldHVybiBlP2VbMF06bnVsbH1nZXRBbGwodCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMubWFwLmdldCh0KXx8bnVsbH1rZXlzKCl7cmV0dXJuIHRoaXMuaW5pdCgpLEFycmF5LmZyb20odGhpcy5tYXAua2V5cygpKX1hcHBlbmQodCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7cGFyYW06dCx2YWx1ZTplLG9wOiJhIn0pfWFwcGVuZEFsbCh0KXtsZXQgZT1bXTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaChpPT57bGV0IHI9dFtpXTtBcnJheS5pc0FycmF5KHIpP3IuZm9yRWFjaChvPT57ZS5wdXNoKHtwYXJhbTppLHZhbHVlOm8sb3A6ImEifSl9KTplLnB1c2goe3BhcmFtOmksdmFsdWU6cixvcDoiYSJ9KX0pLHRoaXMuY2xvbmUoZSl9c2V0KHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoe3BhcmFtOnQsdmFsdWU6ZSxvcDoicyJ9KX1kZWxldGUodCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7cGFyYW06dCx2YWx1ZTplLG9wOiJkIn0pfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMua2V5cygpLm1hcCh0PT57bGV0IGU9dGhpcy5lbmNvZGVyLmVuY29kZUtleSh0KTtyZXR1cm4gdGhpcy5tYXAuZ2V0KHQpLm1hcChpPT5lKyI9Iit0aGlzLmVuY29kZXIuZW5jb2RlVmFsdWUoaSkpLmpvaW4oIiYiKX0pLmZpbHRlcih0PT4iIiE9PXQpLmpvaW4oIiYiKX1jbG9uZSh0KXtsZXQgZT1uZXcgdmMoe2VuY29kZXI6dGhpcy5lbmNvZGVyfSk7cmV0dXJuIGUuY2xvbmVGcm9tPXRoaXMuY2xvbmVGcm9tfHx0aGlzLGUudXBkYXRlcz0odGhpcy51cGRhdGVzfHxbXSkuY29uY2F0KHQpLGV9aW5pdCgpe251bGw9PT10aGlzLm1hcCYmKHRoaXMubWFwPW5ldyBNYXApLG51bGwhPT10aGlzLmNsb25lRnJvbSYmKHRoaXMuY2xvbmVGcm9tLmluaXQoKSx0aGlzLmNsb25lRnJvbS5rZXlzKCkuZm9yRWFjaCh0PT50aGlzLm1hcC5zZXQodCx0aGlzLmNsb25lRnJvbS5tYXAuZ2V0KHQpKSksdGhpcy51cGRhdGVzLmZvckVhY2godD0+e3N3aXRjaCh0Lm9wKXtjYXNlImEiOmNhc2UicyI6bGV0IGU9KCJhIj09PXQub3A/dGhpcy5tYXAuZ2V0KHQucGFyYW0pOnZvaWQgMCl8fFtdO2UucHVzaChyUyh0LnZhbHVlKSksdGhpcy5tYXAuc2V0KHQucGFyYW0sZSk7YnJlYWs7Y2FzZSJkIjppZih2b2lkIDA9PT10LnZhbHVlKXt0aGlzLm1hcC5kZWxldGUodC5wYXJhbSk7YnJlYWt9e2xldCBpPXRoaXMubWFwLmdldCh0LnBhcmFtKXx8W10scj1pLmluZGV4T2YoclModC52YWx1ZSkpOy0xIT09ciYmaS5zcGxpY2UociwxKSxpLmxlbmd0aD4wP3RoaXMubWFwLnNldCh0LnBhcmFtLGkpOnRoaXMubWFwLmRlbGV0ZSh0LnBhcmFtKX19fSksdGhpcy5jbG9uZUZyb209dGhpcy51cGRhdGVzPW51bGwpfX07ZnVuY3Rpb24gcDYobil7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJm4gaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcn1mdW5jdGlvbiBoNihuKXtyZXR1cm4gdHlwZW9mIEJsb2I8InUiJiZuIGluc3RhbmNlb2YgQmxvYn1mdW5jdGlvbiBtNihuKXtyZXR1cm4gdHlwZW9mIEZvcm1EYXRhPCJ1IiYmbiBpbnN0YW5jZW9mIEZvcm1EYXRhfXZhciBoaD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXtsZXQgbztpZih0aGlzLnVybD1lLHRoaXMuYm9keT1udWxsLHRoaXMucmVwb3J0UHJvZ3Jlc3M9ITEsdGhpcy53aXRoQ3JlZGVudGlhbHM9ITEsdGhpcy5yZXNwb25zZVR5cGU9Impzb24iLHRoaXMubWV0aG9kPXQudG9VcHBlckNhc2UoKSxmdW5jdGlvbihuKXtzd2l0Y2gobil7Y2FzZSJERUxFVEUiOmNhc2UiR0VUIjpjYXNlIkhFQUQiOmNhc2UiT1BUSU9OUyI6Y2FzZSJKU09OUCI6cmV0dXJuITE7ZGVmYXVsdDpyZXR1cm4hMH19KHRoaXMubWV0aG9kKXx8cj8odGhpcy5ib2R5PXZvaWQgMCE9PWk/aTpudWxsLG89cik6bz1pLG8mJih0aGlzLnJlcG9ydFByb2dyZXNzPSEhby5yZXBvcnRQcm9ncmVzcyx0aGlzLndpdGhDcmVkZW50aWFscz0hIW8ud2l0aENyZWRlbnRpYWxzLG8ucmVzcG9uc2VUeXBlJiYodGhpcy5yZXNwb25zZVR5cGU9by5yZXNwb25zZVR5cGUpLG8uaGVhZGVycyYmKHRoaXMuaGVhZGVycz1vLmhlYWRlcnMpLG8uY29udGV4dCYmKHRoaXMuY29udGV4dD1vLmNvbnRleHQpLG8ucGFyYW1zJiYodGhpcy5wYXJhbXM9by5wYXJhbXMpKSx0aGlzLmhlYWRlcnN8fCh0aGlzLmhlYWRlcnM9bmV3IG1zKSx0aGlzLmNvbnRleHR8fCh0aGlzLmNvbnRleHQ9bmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5tYXA9bmV3IE1hcH1zZXQodCxlKXtyZXR1cm4gdGhpcy5tYXAuc2V0KHQsZSksdGhpc31nZXQodCl7cmV0dXJuIHRoaXMubWFwLmhhcyh0KXx8dGhpcy5tYXAuc2V0KHQsdC5kZWZhdWx0VmFsdWUoKSksdGhpcy5tYXAuZ2V0KHQpfWRlbGV0ZSh0KXtyZXR1cm4gdGhpcy5tYXAuZGVsZXRlKHQpLHRoaXN9aGFzKHQpe3JldHVybiB0aGlzLm1hcC5oYXModCl9a2V5cygpe3JldHVybiB0aGlzLm1hcC5rZXlzKCl9fSksdGhpcy5wYXJhbXMpe2xldCBhPXRoaXMucGFyYW1zLnRvU3RyaW5nKCk7aWYoMD09PWEubGVuZ3RoKXRoaXMudXJsV2l0aFBhcmFtcz1lO2Vsc2V7bGV0IHM9ZS5pbmRleE9mKCI/Iik7dGhpcy51cmxXaXRoUGFyYW1zPWUrKC0xPT09cz8iPyI6czxlLmxlbmd0aC0xPyImIjoiIikrYX19ZWxzZSB0aGlzLnBhcmFtcz1uZXcgdmMsdGhpcy51cmxXaXRoUGFyYW1zPWV9c2VyaWFsaXplQm9keSgpe3JldHVybiBudWxsPT09dGhpcy5ib2R5P251bGw6cDYodGhpcy5ib2R5KXx8aDYodGhpcy5ib2R5KXx8bTYodGhpcy5ib2R5KXx8dHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSImJnRoaXMuYm9keSBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtc3x8InN0cmluZyI9PXR5cGVvZiB0aGlzLmJvZHk/dGhpcy5ib2R5OnRoaXMuYm9keSBpbnN0YW5jZW9mIHZjP3RoaXMuYm9keS50b1N0cmluZygpOiJvYmplY3QiPT10eXBlb2YgdGhpcy5ib2R5fHwiYm9vbGVhbiI9PXR5cGVvZiB0aGlzLmJvZHl8fEFycmF5LmlzQXJyYXkodGhpcy5ib2R5KT9KU09OLnN0cmluZ2lmeSh0aGlzLmJvZHkpOnRoaXMuYm9keS50b1N0cmluZygpfWRldGVjdENvbnRlbnRUeXBlSGVhZGVyKCl7cmV0dXJuIG51bGw9PT10aGlzLmJvZHl8fG02KHRoaXMuYm9keSk/bnVsbDpoNih0aGlzLmJvZHkpP3RoaXMuYm9keS50eXBlfHxudWxsOnA2KHRoaXMuYm9keSk/bnVsbDoic3RyaW5nIj09dHlwZW9mIHRoaXMuYm9keT8idGV4dC9wbGFpbiI6dGhpcy5ib2R5IGluc3RhbmNlb2YgdmM/ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04Ijoib2JqZWN0Ij09dHlwZW9mIHRoaXMuYm9keXx8Im51bWJlciI9PXR5cGVvZiB0aGlzLmJvZHl8fCJib29sZWFuIj09dHlwZW9mIHRoaXMuYm9keT8iYXBwbGljYXRpb24vanNvbiI6bnVsbH1jbG9uZSh0PXt9KXtsZXQgZT10Lm1ldGhvZHx8dGhpcy5tZXRob2QsaT10LnVybHx8dGhpcy51cmwscj10LnJlc3BvbnNlVHlwZXx8dGhpcy5yZXNwb25zZVR5cGUsbz12b2lkIDAhPT10LmJvZHk/dC5ib2R5OnRoaXMuYm9keSxhPXZvaWQgMCE9PXQud2l0aENyZWRlbnRpYWxzP3Qud2l0aENyZWRlbnRpYWxzOnRoaXMud2l0aENyZWRlbnRpYWxzLHM9dm9pZCAwIT09dC5yZXBvcnRQcm9ncmVzcz90LnJlcG9ydFByb2dyZXNzOnRoaXMucmVwb3J0UHJvZ3Jlc3MsbD10LmhlYWRlcnN8fHRoaXMuaGVhZGVycyxjPXQucGFyYW1zfHx0aGlzLnBhcmFtcyxkPXQuY29udGV4dD8/dGhpcy5jb250ZXh0O3JldHVybiB2b2lkIDAhPT10LnNldEhlYWRlcnMmJihsPU9iamVjdC5rZXlzKHQuc2V0SGVhZGVycykucmVkdWNlKCh1LHApPT51LnNldChwLHQuc2V0SGVhZGVyc1twXSksbCkpLHQuc2V0UGFyYW1zJiYoYz1PYmplY3Qua2V5cyh0LnNldFBhcmFtcykucmVkdWNlKCh1LHApPT51LnNldChwLHQuc2V0UGFyYW1zW3BdKSxjKSksbmV3IGhoKGUsaSxvLHtwYXJhbXM6YyxoZWFkZXJzOmwsY29udGV4dDpkLHJlcG9ydFByb2dyZXNzOnMscmVzcG9uc2VUeXBlOnIsd2l0aENyZWRlbnRpYWxzOmF9KX19LF91PSgoKT0+e3JldHVybihuPV91fHwoX3U9e30pKVtuLlNlbnQ9MF09IlNlbnQiLG5bbi5VcGxvYWRQcm9ncmVzcz0xXT0iVXBsb2FkUHJvZ3Jlc3MiLG5bbi5SZXNwb25zZUhlYWRlcj0yXT0iUmVzcG9uc2VIZWFkZXIiLG5bbi5Eb3dubG9hZFByb2dyZXNzPTNdPSJEb3dubG9hZFByb2dyZXNzIixuW24uUmVzcG9uc2U9NF09IlJlc3BvbnNlIixuW24uVXNlcj01XT0iVXNlciIsX3U7dmFyIG59KSgpLG92PWNsYXNze2NvbnN0cnVjdG9yKHQsZT0yMDAsaT0iT0siKXt0aGlzLmhlYWRlcnM9dC5oZWFkZXJzfHxuZXcgbXMsdGhpcy5zdGF0dXM9dm9pZCAwIT09dC5zdGF0dXM/dC5zdGF0dXM6ZSx0aGlzLnN0YXR1c1RleHQ9dC5zdGF0dXNUZXh0fHxpLHRoaXMudXJsPXQudXJsfHxudWxsLHRoaXMub2s9dGhpcy5zdGF0dXM+PTIwMCYmdGhpcy5zdGF0dXM8MzAwfX0sYXY9Y2xhc3MgZXh0ZW5kcyBvdntjb25zdHJ1Y3Rvcih0PXt9KXtzdXBlcih0KSx0aGlzLnR5cGU9X3UuUmVzcG9uc2VIZWFkZXJ9Y2xvbmUodD17fSl7cmV0dXJuIG5ldyBhdih7aGVhZGVyczp0LmhlYWRlcnN8fHRoaXMuaGVhZGVycyxzdGF0dXM6dm9pZCAwIT09dC5zdGF0dXM/dC5zdGF0dXM6dGhpcy5zdGF0dXMsc3RhdHVzVGV4dDp0LnN0YXR1c1RleHR8fHRoaXMuc3RhdHVzVGV4dCx1cmw6dC51cmx8fHRoaXMudXJsfHx2b2lkIDB9KX19LEJmPWNsYXNzIGV4dGVuZHMgb3Z7Y29uc3RydWN0b3IodD17fSl7c3VwZXIodCksdGhpcy50eXBlPV91LlJlc3BvbnNlLHRoaXMuYm9keT12b2lkIDAhPT10LmJvZHk/dC5ib2R5Om51bGx9Y2xvbmUodD17fSl7cmV0dXJuIG5ldyBCZih7Ym9keTp2b2lkIDAhPT10LmJvZHk/dC5ib2R5OnRoaXMuYm9keSxoZWFkZXJzOnQuaGVhZGVyc3x8dGhpcy5oZWFkZXJzLHN0YXR1czp2b2lkIDAhPT10LnN0YXR1cz90LnN0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0OnQuc3RhdHVzVGV4dHx8dGhpcy5zdGF0dXNUZXh0LHVybDp0LnVybHx8dGhpcy51cmx8fHZvaWQgMH0pfX0sdWQ9Y2xhc3MgZXh0ZW5kcyBvdntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0LDAsIlVua25vd24gRXJyb3IiKSx0aGlzLm5hbWU9Ikh0dHBFcnJvclJlc3BvbnNlIix0aGlzLm9rPSExLHRoaXMubWVzc2FnZT10aGlzLnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDA/YEh0dHAgZmFpbHVyZSBkdXJpbmcgcGFyc2luZyBmb3IgJHt0LnVybHx8Iih1bmtub3duIHVybCkifWA6YEh0dHAgZmFpbHVyZSByZXNwb25zZSBmb3IgJHt0LnVybHx8Iih1bmtub3duIHVybCkifTogJHt0LnN0YXR1c30gJHt0LnN0YXR1c1RleHR9YCx0aGlzLmVycm9yPXQuZXJyb3J8fG51bGx9fTtmdW5jdGlvbiBmRihuLHQpe3JldHVybntib2R5OnQsaGVhZGVyczpuLmhlYWRlcnMsY29udGV4dDpuLmNvbnRleHQsb2JzZXJ2ZTpuLm9ic2VydmUscGFyYW1zOm4ucGFyYW1zLHJlcG9ydFByb2dyZXNzOm4ucmVwb3J0UHJvZ3Jlc3MscmVzcG9uc2VUeXBlOm4ucmVzcG9uc2VUeXBlLHdpdGhDcmVkZW50aWFsczpuLndpdGhDcmVkZW50aWFsc319dmFyIG1oPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5oYW5kbGVyPWV9cmVxdWVzdChlLGkscj17fSl7bGV0IG87aWYoZSBpbnN0YW5jZW9mIGhoKW89ZTtlbHNle2xldCBsLGM7bD1yLmhlYWRlcnMgaW5zdGFuY2VvZiBtcz9yLmhlYWRlcnM6bmV3IG1zKHIuaGVhZGVycyksci5wYXJhbXMmJihjPXIucGFyYW1zIGluc3RhbmNlb2YgdmM/ci5wYXJhbXM6bmV3IHZjKHtmcm9tT2JqZWN0OnIucGFyYW1zfSkpLG89bmV3IGhoKGUsaSx2b2lkIDAhPT1yLmJvZHk/ci5ib2R5Om51bGwse2hlYWRlcnM6bCxjb250ZXh0OnIuY29udGV4dCxwYXJhbXM6YyxyZXBvcnRQcm9ncmVzczpyLnJlcG9ydFByb2dyZXNzLHJlc3BvbnNlVHlwZTpyLnJlc3BvbnNlVHlwZXx8Impzb24iLHdpdGhDcmVkZW50aWFsczpyLndpdGhDcmVkZW50aWFsc30pfWxldCBhPSR0KG8pLnBpcGUoZnVuY3Rpb24obix0KXtyZXR1cm4gbW4odCk/eG4obix0LDEpOnhuKG4sMSl9KGw9PnRoaXMuaGFuZGxlci5oYW5kbGUobCkpKTtpZihlIGluc3RhbmNlb2YgaGh8fCJldmVudHMiPT09ci5vYnNlcnZlKXJldHVybiBhO2xldCBzPWEucGlwZShPZShsPT5sIGluc3RhbmNlb2YgQmYpKTtzd2l0Y2goci5vYnNlcnZlfHwiYm9keSIpe2Nhc2UiYm9keSI6c3dpdGNoKG8ucmVzcG9uc2VUeXBlKXtjYXNlImFycmF5YnVmZmVyIjpyZXR1cm4gcy5waXBlKHEobD0+e2lmKG51bGwhPT1sLmJvZHkmJiEobC5ib2R5IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXRocm93IG5ldyBFcnJvcigiUmVzcG9uc2UgaXMgbm90IGFuIEFycmF5QnVmZmVyLiIpO3JldHVybiBsLmJvZHl9KSk7Y2FzZSJibG9iIjpyZXR1cm4gcy5waXBlKHEobD0+e2lmKG51bGwhPT1sLmJvZHkmJiEobC5ib2R5IGluc3RhbmNlb2YgQmxvYikpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBpcyBub3QgYSBCbG9iLiIpO3JldHVybiBsLmJvZHl9KSk7Y2FzZSJ0ZXh0IjpyZXR1cm4gcy5waXBlKHEobD0+e2lmKG51bGwhPT1sLmJvZHkmJiJzdHJpbmciIT10eXBlb2YgbC5ib2R5KXRocm93IG5ldyBFcnJvcigiUmVzcG9uc2UgaXMgbm90IGEgc3RyaW5nLiIpO3JldHVybiBsLmJvZHl9KSk7ZGVmYXVsdDpyZXR1cm4gcy5waXBlKHEobD0+bC5ib2R5KSl9Y2FzZSJyZXNwb25zZSI6cmV0dXJuIHM7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVucmVhY2hhYmxlOiB1bmhhbmRsZWQgb2JzZXJ2ZSB0eXBlICR7ci5vYnNlcnZlfX1gKX19ZGVsZXRlKGUsaT17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiREVMRVRFIixlLGkpfWdldChlLGk9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIkdFVCIsZSxpKX1oZWFkKGUsaT17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiSEVBRCIsZSxpKX1qc29ucChlLGkpe3JldHVybiB0aGlzLnJlcXVlc3QoIkpTT05QIixlLHtwYXJhbXM6KG5ldyB2YykuYXBwZW5kKGksIkpTT05QX0NBTExCQUNLIiksb2JzZXJ2ZToiYm9keSIscmVzcG9uc2VUeXBlOiJqc29uIn0pfW9wdGlvbnMoZSxpPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJPUFRJT05TIixlLGkpfXBhdGNoKGUsaSxyPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJQQVRDSCIsZSxmRihyLGkpKX1wb3N0KGUsaSxyPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJQT1NUIixlLGZGKHIsaSkpfXB1dChlLGkscj17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiUFVUIixlLGZGKHIsaSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKHJ2KSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCk7ZnVuY3Rpb24gYjYobix0KXtyZXR1cm4gdChuKX1mdW5jdGlvbiBlZ2Uobix0KXtyZXR1cm4oZSxpKT0+dC5pbnRlcmNlcHQoZSx7aGFuZGxlOnI9Pm4ocixpKX0pfXZhciBiRj1uZXcgdGUoIkhUVFBfSU5URVJDRVBUT1JTIiksdkY9bmV3IHRlKCJIVFRQX0lOVEVSQ0VQVE9SX0ZOUyIpO2Z1bmN0aW9uIG5nZSgpe2xldCBuPW51bGw7cmV0dXJuKHQsZSk9PihudWxsPT09biYmKG49KCRuKGJGLHtvcHRpb25hbDohMH0pPz9bXSkucmVkdWNlUmlnaHQoZWdlLGI2KSksbih0LGUpKX12YXIgZjY9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHJ2e2NvbnN0cnVjdG9yKGUsaSl7c3VwZXIoKSx0aGlzLmJhY2tlbmQ9ZSx0aGlzLmluamVjdG9yPWksdGhpcy5jaGFpbj1udWxsfWhhbmRsZShlKXtpZihudWxsPT09dGhpcy5jaGFpbil7bGV0IGk9QXJyYXkuZnJvbShuZXcgU2V0KHRoaXMuaW5qZWN0b3IuZ2V0KHZGKSkpO3RoaXMuY2hhaW49aS5yZWR1Y2VSaWdodCgocixvKT0+ZnVuY3Rpb24obix0LGUpe3JldHVybihpLHIpPT5lLnJ1bkluQ29udGV4dCgoKT0+dChpLG89Pm4obyxyKSkpfShyLG8sdGhpcy5pbmplY3RvciksYjYpfXJldHVybiB0aGlzLmNoYWluKGUsaT0+dGhpcy5iYWNrZW5kLmhhbmRsZShpKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oYVMpLE8obGMpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxpZ2U9L15cKVxdXH0nLD9cbi8sZzY9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnhockZhY3Rvcnk9ZX1oYW5kbGUoZSl7aWYoIkpTT05QIj09PWUubWV0aG9kKXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGVkIHRvIGNvbnN0cnVjdCBKc29ucCByZXF1ZXN0IHdpdGhvdXQgSHR0cENsaWVudEpzb25wTW9kdWxlIGluc3RhbGxlZC4iKTtyZXR1cm4gbmV3IEt0KGk9PntsZXQgcj10aGlzLnhockZhY3RvcnkuYnVpbGQoKTtpZihyLm9wZW4oZS5tZXRob2QsZS51cmxXaXRoUGFyYW1zKSxlLndpdGhDcmVkZW50aWFscyYmKHIud2l0aENyZWRlbnRpYWxzPSEwKSxlLmhlYWRlcnMuZm9yRWFjaCgoaCxtKT0+ci5zZXRSZXF1ZXN0SGVhZGVyKGgsbS5qb2luKCIsIikpKSxlLmhlYWRlcnMuaGFzKCJBY2NlcHQiKXx8ci5zZXRSZXF1ZXN0SGVhZGVyKCJBY2NlcHQiLCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoiKSwhZS5oZWFkZXJzLmhhcygiQ29udGVudC1UeXBlIikpe2xldCBoPWUuZGV0ZWN0Q29udGVudFR5cGVIZWFkZXIoKTtudWxsIT09aCYmci5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLGgpfWlmKGUucmVzcG9uc2VUeXBlKXtsZXQgaD1lLnJlc3BvbnNlVHlwZS50b0xvd2VyQ2FzZSgpO3IucmVzcG9uc2VUeXBlPSJqc29uIiE9PWg/aDoidGV4dCJ9bGV0IG89ZS5zZXJpYWxpemVCb2R5KCksYT1udWxsLHM9KCk9PntpZihudWxsIT09YSlyZXR1cm4gYTtsZXQgaD1yLnN0YXR1c1RleHR8fCJPSyIsbT1uZXcgbXMoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSksXz1mdW5jdGlvbihuKXtyZXR1cm4icmVzcG9uc2VVUkwiaW4gbiYmbi5yZXNwb25zZVVSTD9uLnJlc3BvbnNlVVJMOi9eWC1SZXF1ZXN0LVVSTDovbS50ZXN0KG4uZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpP24uZ2V0UmVzcG9uc2VIZWFkZXIoIlgtUmVxdWVzdC1VUkwiKTpudWxsfShyKXx8ZS51cmw7cmV0dXJuIGE9bmV3IGF2KHtoZWFkZXJzOm0sc3RhdHVzOnIuc3RhdHVzLHN0YXR1c1RleHQ6aCx1cmw6X30pLGF9LGw9KCk9PntsZXR7aGVhZGVyczpoLHN0YXR1czptLHN0YXR1c1RleHQ6Xyx1cmw6TX09cygpLHk9bnVsbDsyMDQhPT1tJiYoeT10eXBlb2Ygci5yZXNwb25zZT4idSI/ci5yZXNwb25zZVRleHQ6ci5yZXNwb25zZSksMD09PW0mJihtPXk/MjAwOjApO2xldCB4PW0+PTIwMCYmbTwzMDA7aWYoImpzb24iPT09ZS5yZXNwb25zZVR5cGUmJiJzdHJpbmciPT10eXBlb2YgeSl7bGV0IFI9eTt5PXkucmVwbGFjZShpZ2UsIiIpO3RyeXt5PSIiIT09eT9KU09OLnBhcnNlKHkpOm51bGx9Y2F0Y2goSSl7eT1SLHgmJih4PSExLHk9e2Vycm9yOkksdGV4dDp5fSl9fXg/KGkubmV4dChuZXcgQmYoe2JvZHk6eSxoZWFkZXJzOmgsc3RhdHVzOm0sc3RhdHVzVGV4dDpfLHVybDpNfHx2b2lkIDB9KSksaS5jb21wbGV0ZSgpKTppLmVycm9yKG5ldyB1ZCh7ZXJyb3I6eSxoZWFkZXJzOmgsc3RhdHVzOm0sc3RhdHVzVGV4dDpfLHVybDpNfHx2b2lkIDB9KSl9LGM9aD0+e2xldHt1cmw6bX09cygpLF89bmV3IHVkKHtlcnJvcjpoLHN0YXR1czpyLnN0YXR1c3x8MCxzdGF0dXNUZXh0OnIuc3RhdHVzVGV4dHx8IlVua25vd24gRXJyb3IiLHVybDptfHx2b2lkIDB9KTtpLmVycm9yKF8pfSxkPSExLHU9aD0+e2R8fChpLm5leHQocygpKSxkPSEwKTtsZXQgbT17dHlwZTpfdS5Eb3dubG9hZFByb2dyZXNzLGxvYWRlZDpoLmxvYWRlZH07aC5sZW5ndGhDb21wdXRhYmxlJiYobS50b3RhbD1oLnRvdGFsKSwidGV4dCI9PT1lLnJlc3BvbnNlVHlwZSYmISFyLnJlc3BvbnNlVGV4dCYmKG0ucGFydGlhbFRleHQ9ci5yZXNwb25zZVRleHQpLGkubmV4dChtKX0scD1oPT57bGV0IG09e3R5cGU6X3UuVXBsb2FkUHJvZ3Jlc3MsbG9hZGVkOmgubG9hZGVkfTtoLmxlbmd0aENvbXB1dGFibGUmJihtLnRvdGFsPWgudG90YWwpLGkubmV4dChtKX07cmV0dXJuIHIuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsbCksci5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsYyksci5hZGRFdmVudExpc3RlbmVyKCJ0aW1lb3V0IixjKSxyLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixjKSxlLnJlcG9ydFByb2dyZXNzJiYoci5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsdSksbnVsbCE9PW8mJnIudXBsb2FkJiZyLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIscCkpLHIuc2VuZChvKSxpLm5leHQoe3R5cGU6X3UuU2VudH0pLCgpPT57ci5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsYyksci5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsYyksci5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixsKSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRpbWVvdXQiLGMpLGUucmVwb3J0UHJvZ3Jlc3MmJihyLnJlbW92ZUV2ZW50TGlzdGVuZXIoInByb2dyZXNzIix1KSxudWxsIT09byYmci51cGxvYWQmJnIudXBsb2FkLnJlbW92ZUV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixwKSksci5yZWFkeVN0YXRlIT09ci5ET05FJiZyLmFib3J0KCl9fSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8odGgpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSx2Nj1uZXcgdGUoIlhTUkZfRU5BQkxFRCIpLGFnZT1uZXcgdGUoIlhTUkZfQ09PS0lFX05BTUUiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT4iWFNSRi1UT0tFTiJ9KSxsZ2U9bmV3IHRlKCJYU1JGX0hFQURFUl9OQU1FIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+IlgtWFNSRi1UT0tFTiJ9KSxzUz1jbGFzc3t9LGNnZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLmRvYz1lLHRoaXMucGxhdGZvcm09aSx0aGlzLmNvb2tpZU5hbWU9cix0aGlzLmxhc3RDb29raWVTdHJpbmc9IiIsdGhpcy5sYXN0VG9rZW49bnVsbCx0aGlzLnBhcnNlQ291bnQ9MH1nZXRUb2tlbigpe2lmKCJzZXJ2ZXIiPT09dGhpcy5wbGF0Zm9ybSlyZXR1cm4gbnVsbDtsZXQgZT10aGlzLmRvYy5jb29raWV8fCIiO3JldHVybiBlIT09dGhpcy5sYXN0Q29va2llU3RyaW5nJiYodGhpcy5wYXJzZUNvdW50KyssdGhpcy5sYXN0VG9rZW49ZncoZSx0aGlzLmNvb2tpZU5hbWUpLHRoaXMubGFzdENvb2tpZVN0cmluZz1lKSx0aGlzLmxhc3RUb2tlbn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhOdCksTyhmYyksTyhhZ2UpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKTtmdW5jdGlvbiBkZ2Uobix0KXtsZXQgZT1uLnVybC50b0xvd2VyQ2FzZSgpO2lmKCEkbih2Nil8fCJHRVQiPT09bi5tZXRob2R8fCJIRUFEIj09PW4ubWV0aG9kfHxlLnN0YXJ0c1dpdGgoImh0dHA6Ly8iKXx8ZS5zdGFydHNXaXRoKCJodHRwczovLyIpKXJldHVybiB0KG4pO2xldCBpPSRuKHNTKS5nZXRUb2tlbigpLHI9JG4obGdlKTtyZXR1cm4gbnVsbCE9aSYmIW4uaGVhZGVycy5oYXMocikmJihuPW4uY2xvbmUoe2hlYWRlcnM6bi5oZWFkZXJzLnNldChyLGkpfSkpLHQobil9dmFyIG9TPSgoKT0+e3JldHVybihuPW9TfHwob1M9e30pKVtuLkludGVyY2VwdG9ycz0wXT0iSW50ZXJjZXB0b3JzIixuW24uTGVnYWN5SW50ZXJjZXB0b3JzPTFdPSJMZWdhY3lJbnRlcmNlcHRvcnMiLG5bbi5DdXN0b21Yc3JmQ29uZmlndXJhdGlvbj0yXT0iQ3VzdG9tWHNyZkNvbmZpZ3VyYXRpb24iLG5bbi5Ob1hzcmZQcm90ZWN0aW9uPTNdPSJOb1hzcmZQcm90ZWN0aW9uIixuW24uSnNvbnBTdXBwb3J0PTRdPSJKc29ucFN1cHBvcnQiLG5bbi5SZXF1ZXN0c01hZGVWaWFQYXJlbnQ9NV09IlJlcXVlc3RzTWFkZVZpYVBhcmVudCIsb1M7dmFyIG59KSgpO2Z1bmN0aW9uIHBnZSguLi5uKXtsZXQgdD1bbWgsZzYsZjYse3Byb3ZpZGU6cnYsdXNlRXhpc3Rpbmc6ZjZ9LHtwcm92aWRlOmFTLHVzZUV4aXN0aW5nOmc2fSx7cHJvdmlkZTp2Rix1c2VWYWx1ZTpkZ2UsbXVsdGk6ITB9LHtwcm92aWRlOnY2LHVzZVZhbHVlOiEwfSx7cHJvdmlkZTpzUyx1c2VDbGFzczpjZ2V9XTtmb3IobGV0IGUgb2Ygbil0LnB1c2goLi4uZS5cdTAyNzVwcm92aWRlcnMpO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm57Ilx1MDI3NXByb3ZpZGVycyI6bn19KHQpfXZhciBfNj1uZXcgdGUoIkxFR0FDWV9JTlRFUkNFUFRPUl9GTiIpLHk2PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1IKHtwcm92aWRlcnM6W3BnZSh7Ilx1MDI3NWtpbmQiOm9TLkxlZ2FjeUludGVyY2VwdG9ycywiXHUwMjc1cHJvdmlkZXJzIjpbe3Byb3ZpZGU6XzYsdXNlRmFjdG9yeTpuZ2V9LHtwcm92aWRlOnZGLHVzZUV4aXN0aW5nOl82LG11bHRpOiEwfV19KV19KSxufSkoKSxsUz0iZmVhdHVyZSIsVmY9TXIobFMpLGJ1PVcoVmYsbj0+bi5pc0ZlYXR1cmVGbGFnc0xvYWRlZCksUW89VyhWZixuPT4oey4uLm4uZGVmYXVsdEZsYWdzLC4uLm4uZmxhZ092ZXJyaWRlc30pKSxDNj1XKFZmLG49Pm4uZGVmYXVsdEZsYWdzKSxzdj1XKFZmLG49Pm4uZmxhZ092ZXJyaWRlc3x8e30pLGZoPVcoVmYsbj0+bi5tZXRhZGF0YSksSGY9VyhWZixuPT57bGV0IHQ9e307Zm9yKGxldCBlIGluIG4uZmxhZ092ZXJyaWRlcyl7bGV0IGk9bi5tZXRhZGF0YVtlXTtpJiZpLnF1ZXJ5UGFyYW1PdmVycmlkZSYmaS5zZW5kVG9TZXJ2ZXJXaGVuT3ZlcnJpZGRlbiYmKHRbZV09bi5mbGFnT3ZlcnJpZGVzW2VdKX1yZXR1cm4gdH0pLE02PVcoUW8sbj0+bi5pc0F1dG9EYXJrTW9kZUFsbG93ZWQpLFBsPVcoUW8sbj0+bnVsbCE9PW4uZW5hYmxlRGFya01vZGVPdmVycmlkZT9uLmVuYWJsZURhcmtNb2RlT3ZlcnJpZGU6bi5kZWZhdWx0RW5hYmxlRGFya01vZGUpLGNTPVcoUW8sbj0+bi5lbmFibGVEYXJrTW9kZU92ZXJyaWRlKSx3Nj1XKFFvLG49Pm4uZW5hYmxlZEV4cGVyaW1lbnRhbFBsdWdpbnMpLFM2PVcoUW8sbj0+bi5pbkNvbGFiKSxkUz1XKFFvLG49Pm4ubWV0cmljc0ltYWdlU3VwcG9ydEVuYWJsZWQpLHlGPVcoUW8sbj0+bi5mb3JjZVN2ZyksRTY9VyhRbyxuPT52b2lkIDAhPT1uLnNob3dGbGFncyksdVM9VyhRbyxuPT5uLmVuYWJsZVNjYWxhckNvbHVtbkN1c3RvbWl6YXRpb24pLFQ2PVcoUW8sbj0+bi5lbmFibGVTY2FsYXJDb2x1bW5Db250ZXh0TWVudXMpLHBkPVcoUW8sbj0+bi5lbmFibGVHbG9iYWxQaW5zKSxENj1XKFFvLG49Pm4uZW5hYmxlQ29sb3JCeUV4cGVyaW1lbnQpO2Z1bmN0aW9uIGZnZShuLHQpe2lmKCFuKXJldHVybjtsZXQgZT1uIGluc3RhbmNlb2YgRm9ybURhdGE/ZnVuY3Rpb24obil7bGV0IHQ9e307Zm9yKGxldFtlLGldb2Ygbi5lbnRyaWVzKCkpdFtlXT1pO3JldHVybiB0fShuKTpuO3JldHVybiB0P3tbdF06SlNPTi5zdHJpbmdpZnkoZSl9OmV9dmFyIGdnZT0iWC1YU1JGLVByb3RlY3RlZCI7ZnVuY3Rpb24geEYobil7bGV0IHQ9bi5oZWFkZXJzfHxuZXcgbXM7cmV0dXJuIHQ9dC5hcHBlbmQoZ2dlLCIxIiksey4uLm4saGVhZGVyczp0fX12YXIgWHM9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5hcHBSb290UHJvdmlkZXI9ZSx0aGlzLmh0dHA9aSx0aGlzLnN0b3JlPXJ9cmVzb2x2ZUFwcFJvb3QoZSl7cmV0dXJuIGUuc3RhcnRzV2l0aCgiLyIpP3RoaXMuYXBwUm9vdFByb3ZpZGVyLmdldEFic1BhdGhuYW1lV2l0aEFwcFJvb3QoZSk6ZX1nZXQoZSxpPXt9KXtyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLnJlc29sdmVBcHBSb290KGUpLGkpfXBvc3QoZSxpLHI9e30sbyl7cmV0dXJuIHI9eEYociksdGhpcy5zdG9yZS5zZWxlY3QoYnUpLnBpcGUoT2UoYT0+Qm9vbGVhbihhKSksTHQoMSksSXQodGhpcy5zdG9yZS5zZWxlY3QoUzYpKSx4bigoWyxhXSk9PntsZXQgcz10aGlzLnJlc29sdmVBcHBSb290KGUpO3JldHVybiBhP3RoaXMuaHR0cC5nZXQocyx7aGVhZGVyczpyLmhlYWRlcnM/P3t9LHBhcmFtczpmZ2UoaSxvKX0pOnRoaXMuaHR0cC5wb3N0KHMsaSxyKX0pKX1wdXQoZSxpLHI9e30pe3JldHVybiB0aGlzLmh0dHAucHV0KHRoaXMucmVzb2x2ZUFwcFJvb3QoZSksaSx4RihyKSl9ZGVsZXRlKGUsaT17fSl7cmV0dXJuIHRoaXMuaHR0cC5kZWxldGUodGhpcy5yZXNvbHZlQXBwUm9vdChlKSx4RihpKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8odWgpLE8obWgpLE8oSWUpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSx6Zj0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9SCh7cHJvdmlkZXJzOltYc10saW1wb3J0czpbeTYsa2ZdfSksbn0pKCksWXM9KCgpPT57cmV0dXJuKG49WXN8fChZcz17fSkpLlVOS05PV049IlVOS05PV04iLG4uTk9UX0ZPVU5EPSJOT1RfRk9VTkQiLG4uUEVSTUlTU0lPTl9ERU5JRUQ9IlBFUk1JU1NJT05fREVOSUVEIixZczt2YXIgbn0pKCksSTY9bmV3IHRlKCJUZW5zb3JCb2FyZCBicmFuZCBuYW1lIik7ZnVuY3Rpb24gQTYobil7bGV0IHQ9WXMuVU5LTk9XTjtyZXR1cm4gbiBpbnN0YW5jZW9mIHVkJiYoNDA0PT09bi5zdGF0dXMmJih0PVlzLk5PVF9GT1VORCksNDAzPT09bi5zdGF0dXMmJih0PVlzLlBFUk1JU1NJT05fREVOSUVEKSksX2wobmV3IGN2KHQpKX12YXIgY3Y9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5mYWlsdXJlQ29kZT10fX0scFM9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmh0dHA9ZSx0aGlzLnRmQmFja2VuZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Zi1iYWNrZW5kIikudGZfYmFja2VuZH1mZXRjaFBsdWdpbnNMaXN0aW5nKGUpe2xldCBpPWZ1bmN0aW9uKG4pe2lmKCFuLmxlbmd0aClyZXR1cm4gbnVsbDtsZXQgdD1uZXcgVVJMU2VhcmNoUGFyYW1zO2ZvcihsZXQgZSBvZiBuKXQuYXBwZW5kKCJleHBlcmltZW50YWxQbHVnaW4iLGUpO3JldHVybiB0fShlKSxyPWk/YGRhdGEvcGx1Z2luc19saXN0aW5nPyR7aS50b1N0cmluZygpfWA6ImRhdGEvcGx1Z2luc19saXN0aW5nIjtyZXR1cm4gdGhpcy5odHRwLmdldChyKS5waXBlKGNvKEE2KSl9ZmV0Y2hFbnZpcm9ubWVudCgpe3JldHVybiBDbyhbdGhpcy5odHRwLmdldCgiZGF0YS9lbnZpcm9ubWVudCIpLEpyKHRoaXMudGZCYWNrZW5kLmVudmlyb25tZW50U3RvcmUucmVmcmVzaCgpKV0pLnBpcGUocSgoW3JdKT0+ciksY28oQTYpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhYcykpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLFI2PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1IKHtwcm92aWRlcnM6W3BTXSxpbXBvcnRzOlt6Zl19KSxufSkoKSxSZT0oKCk9PntyZXR1cm4obj1SZXx8KFJlPXt9KSlbbi5OT1RfTE9BREVEPTBdPSJOT1RfTE9BREVEIixuW24uTE9BREVEPTFdPSJMT0FERUQiLG5bbi5MT0FESU5HPTJdPSJMT0FESU5HIixuW24uRkFJTEVEPTNdPSJGQUlMRUQiLFJlO3ZhciBufSkoKSx5Yz1mZSgiW0NvcmVdIFBsdWdpbiBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksaFM9ZmUoIltDb3JlXSBQbHVnaW4gVXJsIEhhc2ggQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFA2PWZlKCJbQ29yZV0gTG9hZGVkIiksQmE9ZmUoIltDb3JlXSBVc2VyIFRyaWdnZXJlZCBSZWxvYWQiKSxtYT1mZSgiW0NvcmVdIEF1dG8gUmVsb2FkIiksbVM9ZmUoIltDb3JlXSBQbHVnaW5MaXN0aW5nIEZldGNoIFJlcXVlc3RlZCIpLGdoPWZlKCJbQ29yZV0gUGx1Z2luTGlzdGluZyBGZXRjaCBTdWNjZXNzZnVsIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksZHY9ZmUoIltDb3JlXSBQbHVnaW5MaXN0aW5nIEZldGNoIEZhaWxlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGZTPWZlKCJbQ29yZV0gUG9seW1lciBDb21wb25lbnQgUnVucyBGZXRjaCBSZXF1ZXN0ZWQiKSxnUz1mZSgiW0NvcmVdIFBvbHltZXIgQ29tcG9uZW50IFJ1bnMgRmV0Y2ggU3VjY2Vzc2Z1bCIpLF9TPWZlKCJbQ29yZV0gUG9seW1lciBDb21wb25lbnQgUnVucyBGZXRjaCBGYWlsZWQiKSxiUz1mZSgiW0NvcmVdIEVudmlyb25tZW50IEZldGNoIFN1Y2Nlc3NmdWwiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxrNj1mZSgiW0NvcmVdIFJ1biBTZWxlY3Rpb24gQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLE82PWZlKCJbQ29yZV0gUnVuIEZldGNoIFN1Y2Nlc3NmdWwiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxVZj1mZSgiW0NvcmVdIFNpZGUgQmFyIFdpZHRoIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx2Uz1mZSgiW0NvcmVdIFJ1bnMgVGFibGUgRnVsbCBTY3JlZW4gVG9nZ2xlZCIpO2Z1bmN0aW9uIF9oKG4sdCxlKXtsZXQgaT1PYmplY3Qua2V5cyhuKSxyPXsuLi5uLC4uLnQscHJpdmF0ZU5hbWVzcGFjZWRTdGF0ZTp7fX07cmV0dXJue2luaXRpYWxTdGF0ZTpyLHJlZHVjZXJzOmdyKHIseWUoTmEsKHMse2JlZm9yZTpsLGFmdGVyOmMsYmVmb3JlTmFtZXNwYWNlSWQ6ZCxhZnRlck5hbWVzcGFjZUlkOnV9KT0+e2xldCBwPXM7cmV0dXJuIGQhPT11JiYocD1mdW5jdGlvbihzLGwsYyl7bGV0IGQ9ey4uLnMucHJpdmF0ZU5hbWVzcGFjZWRTdGF0ZX07aWYobCl7bGV0IHA9e307Zm9yKGxldCBoIG9mIGkpcFtoXT1zW2hdO2Q9ey4uLmQsW2xdOnB9fWxldCB1PXt9O3JldHVybiBzLnByaXZhdGVOYW1lc3BhY2VkU3RhdGU/LltjXT91PXMucHJpdmF0ZU5hbWVzcGFjZWRTdGF0ZVtjXTpsJiYodT1uKSx7Li4ucywuLi51LHByaXZhdGVOYW1lc3BhY2VkU3RhdGU6ZH19KHMsZCx1KSksZSYmKHA9ZShwLGwsYykpLHB9KSl9fWZ1bmN0aW9uIGJoKC4uLm4pe3JldHVybih0LGUpPT57bGV0IGk9dDtmb3IobGV0IHIgb2YgbilpPXIoaSxlKTtyZXR1cm4gaX19dmFyIHB2PXthY3RpdmVQbHVnaW46bnVsbCxwbHVnaW5zOnt9LGNvcmVEYXRhTG9hZFN0YXRlOntzdGF0ZTpSZS5OT1RfTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpudWxsfSxwbHVnaW5zTGlzdExvYWRlZDp7c3RhdGU6UmUuTk9UX0xPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6bnVsbCxmYWlsdXJlQ29kZTpudWxsfSxlbnZpcm9ubWVudDp7ZGF0YV9sb2NhdGlvbjoiIix3aW5kb3dfdGl0bGU6IiJ9LHBvbHltZXJSdW5zTG9hZFN0YXRlOntzdGF0ZTpSZS5OT1RfTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpudWxsfSxwb2x5bWVySW50ZXJvcFJ1bnM6W10scG9seW1lckludGVyb3BSdW5TZWxlY3Rpb246bmV3IFNldCxzaWRlQmFyV2lkdGhJblBlcmNlbnQ6MjAscnVuc1RhYmxlRnVsbFNjcmVlbjohMSx1bmtub3duUXVlcnlQYXJhbXM6e319LHZnZT1ncihwdix5ZSh5YyxoUywobix7cGx1Z2luOnR9KT0+KHsuLi5uLGFjdGl2ZVBsdWdpbjp0fSkpLHllKG1TLG49Pih7Li4ubixjb3JlRGF0YUxvYWRTdGF0ZTp7Li4ubi5jb3JlRGF0YUxvYWRTdGF0ZSxzdGF0ZTpSZS5MT0FESU5HfSxwbHVnaW5zTGlzdExvYWRlZDp7Li4ubi5wbHVnaW5zTGlzdExvYWRlZCxzdGF0ZTpSZS5MT0FESU5HfX0pKSx5ZShkdiwobix7ZmFpbHVyZUNvZGU6dH0pPT4oey4uLm4sY29yZURhdGFMb2FkU3RhdGU6ey4uLm4uY29yZURhdGFMb2FkU3RhdGUsc3RhdGU6UmUuRkFJTEVEfSxwbHVnaW5zTGlzdExvYWRlZDp7Li4ubi5wbHVnaW5zTGlzdExvYWRlZCxzdGF0ZTpSZS5GQUlMRUQsZmFpbHVyZUNvZGU6dH19KSkseWUoZ2gsKG4se3BsdWdpbnM6dH0pPT57bGV0IGU9T2JqZWN0LmtleXModCkuZmluZChhPT50W2FdLmVuYWJsZWQpfHxudWxsLGk9bi5hY3RpdmVQbHVnaW58fGUscj1EYXRlLm5vdygpLG89bi5jb3JlRGF0YUxvYWRTdGF0ZTtyZXR1cm4gbi5wb2x5bWVyUnVuc0xvYWRTdGF0ZS5zdGF0ZT09PVJlLkxPQURFRCYmKG89e3N0YXRlOlJlLkxPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6cn0pLHsuLi5uLGFjdGl2ZVBsdWdpbjppLGNvcmVEYXRhTG9hZFN0YXRlOm8scGx1Z2luczp0LHBsdWdpbnNMaXN0TG9hZGVkOntzdGF0ZTpSZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOnIsZmFpbHVyZUNvZGU6bnVsbH19fSkseWUoZlMsbj0+KHsuLi5uLGNvcmVEYXRhTG9hZFN0YXRlOnsuLi5uLmNvcmVEYXRhTG9hZFN0YXRlLHN0YXRlOlJlLkxPQURJTkd9LHBvbHltZXJSdW5zTG9hZFN0YXRlOnsuLi5uLnBvbHltZXJSdW5zTG9hZFN0YXRlLHN0YXRlOlJlLkxPQURJTkd9fSkpLHllKGdTLG49PntsZXQgdD1EYXRlLm5vdygpLGU9bi5jb3JlRGF0YUxvYWRTdGF0ZTtyZXR1cm4gbi5wbHVnaW5zTGlzdExvYWRlZC5zdGF0ZT09PVJlLkxPQURFRCYmKGU9e3N0YXRlOlJlLkxPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6dH0pLHsuLi5uLGNvcmVEYXRhTG9hZFN0YXRlOmUscG9seW1lclJ1bnNMb2FkU3RhdGU6ey4uLm4ucG9seW1lclJ1bnNMb2FkU3RhdGUsc3RhdGU6UmUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5Nczp0fX19KSx5ZShfUyxuPT4oey4uLm4sY29yZURhdGFMb2FkU3RhdGU6ey4uLm4uY29yZURhdGFMb2FkU3RhdGUsc3RhdGU6UmUuRkFJTEVEfSxwb2x5bWVyUnVuc0xvYWRTdGF0ZTp7Li4ubi5wb2x5bWVyUnVuc0xvYWRTdGF0ZSxzdGF0ZTpSZS5GQUlMRUR9fSkpLHllKGJTLChuLHtlbnZpcm9ubWVudDp0fSk9Pih7Li4ubixlbnZpcm9ubWVudDp0fSkpLHllKE82LChuLHtydW5zOnR9KT0+KHsuLi5uLHBvbHltZXJJbnRlcm9wUnVuczp0fSkpLHllKGs2LChuLHtuZXh0U2VsZWN0aW9uOnR9KT0+KHsuLi5uLHBvbHltZXJJbnRlcm9wUnVuU2VsZWN0aW9uOm5ldyBTZXQodCl9KSkseWUoVWYsKG4se3dpZHRoSW5QZXJjZW50OnR9KT0+KHsuLi5uLHNpZGVCYXJXaWR0aEluUGVyY2VudDpNYXRoLm1pbihNYXRoLm1heCgwLHQpLDEwMCl9KSkseWUoaHMsKG4se3BhcnRpYWxTZXR0aW5nczp0fSk9PntsZXQgZT17Li4ubn0saT10LnNpZGVCYXJXaWR0aEluUGVyY2VudDtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGkmJmk+PTAmJmk8PTEwMCYmKGUuc2lkZUJhcldpZHRoSW5QZXJjZW50PWkpLGV9KSx5ZSh2UyxuPT4oey4uLm4scnVuc1RhYmxlRnVsbFNjcmVlbjohbi5ydW5zVGFibGVGdWxsU2NyZWVufSkpLHllKGZ1LChuLHtwYXJ0aWFsU3RhdGU6dH0pPT57bGV0e3Vua25vd25RdWVyeVBhcmFtczplPXt9fT10O3JldHVybnsuLi5uLHVua25vd25RdWVyeVBhcmFtczplfX0pKSx7cmVkdWNlcnM6eWdlfT1faChwdix7fSk7ZnVuY3Rpb24gRjYobix0KXtyZXR1cm4gYmgodmdlLHlnZSkobix0KX12YXIgeGM9TXIoImNvcmUiKSx4Uz1XKHhjLG49Pm4ucGx1Z2luc0xpc3RMb2FkZWQpLE42PVcoeGMsbj0+bi5wb2x5bWVyUnVuc0xvYWRTdGF0ZSksTDY9Vyh4YyxuPT5uLmNvcmVEYXRhTG9hZFN0YXRlLnN0YXRlKSxqZj1XKHhjLG49Pm4uY29yZURhdGFMb2FkU3RhdGUubGFzdExvYWRlZFRpbWVJbk1zKSxabz1XKHhjLG49Pm4uYWN0aXZlUGx1Z2luKSxHZj1XKHhjLG49Pm4ucGx1Z2lucyksQjY9Vyh4YyxuPT5uLnVua25vd25RdWVyeVBhcmFtcyksQ1M9Vyh4YyxuPT5uLmVudmlyb25tZW50KSxNUz1XKHhjLG49Pm4uc2lkZUJhcldpZHRoSW5QZXJjZW50KSx3Uz1XKHhjLG49Pm4ucnVuc1RhYmxlRnVsbFNjcmVlbiksVjY9bmV3IFNldChbQ24uQ09NUEFSRV9FWFBFUklNRU5ULENuLkVYUEVSSU1FTlQsQ24uTk9UX1NFVF0pLEg2PSgoKT0+e2NsYXNzIG57cmVmcmVzaFBvbHltZXJSdW5zKCl7cmV0dXJuIEpyKHRoaXMudGZCYWNrZW5kLnJlZi5ydW5zU3RvcmUucmVmcmVzaCgpKX1mZXRjaEVudmlyb25tZW50KCl7cmV0dXJuIHRoaXMud2ViYXBwRGF0YVNvdXJjZS5mZXRjaEVudmlyb25tZW50KCkucGlwZShEdChlPT57dGhpcy5zdG9yZS5kaXNwYXRjaChiUyh7ZW52aXJvbm1lbnQ6ZX0pKX0pKX1jb25zdHJ1Y3RvcihlLGkscil7dGhpcy5hY3Rpb25zJD1lLHRoaXMuc3RvcmU9aSx0aGlzLndlYmFwcERhdGFTb3VyY2U9cix0aGlzLnRmQmFja2VuZD17cmVmOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRmLWJhY2tlbmQiKS50Zl9iYWNrZW5kfSx0aGlzLm9uRGFzaGJvYXJkTG9hZCQ9dG4odGhpcy5hY3Rpb25zJC5waXBlKFpuKFA2LE5hKSxJdCh0aGlzLnN0b3JlLnNlbGVjdChIbykpLHJpKChbLG9dLFssYV0pPT5WbyhvLGEpKSksdGhpcy5hY3Rpb25zJC5waXBlKFpuKG1hLEJhKSkpLnBpcGUoSXQodGhpcy5zdG9yZS5zZWxlY3QoV3MpKSxPZSgoWyxvXSk9PlY2LmhhcyhvKSksaWMoMSx2b2lkIDAse2xlYWRpbmc6ITB9KSksdGhpcy5mZXRjaFdlYkFwcERhdGEkPV9yKCgpPT57bGV0IG89dGhpcy5vbkRhc2hib2FyZExvYWQkLnBpcGUoSXQodGhpcy5zdG9yZS5zZWxlY3QoeFMpLHRoaXMuc3RvcmUuc2VsZWN0KHc2KSksT2UoKFsse3N0YXRlOnN9XSk9PnMhPT1SZS5MT0FESU5HKSxEdCgoKT0+dGhpcy5zdG9yZS5kaXNwYXRjaChtUygpKSkseG4oKFssLHNdKT0+ZnVuY3Rpb24oLi4ubil7bGV0IHQ9ZWMobiksZT1PQyhuKTtyZXR1cm4gZS5sZW5ndGg/bmV3IEt0KGk9PntsZXQgcj1lLm1hcCgoKT0+W10pLG89ZS5tYXAoKCk9PiExKTtpLmFkZCgoKT0+e3I9bz1udWxsfSk7Zm9yKGxldCBhPTA7IWkuY2xvc2VkJiZhPGUubGVuZ3RoO2ErKyljaShlW2FdKS5zdWJzY3JpYmUoSHQoaSxzPT57aWYoclthXS5wdXNoKHMpLHIuZXZlcnkobD0+bC5sZW5ndGgpKXtsZXQgbD1yLm1hcChjPT5jLnNoaWZ0KCkpO2kubmV4dCh0P3QoLi4ubCk6bCksci5zb21lKChjLGQpPT4hYy5sZW5ndGgmJm9bZF0pJiZpLmNvbXBsZXRlKCl9fSwoKT0+e29bYV09ITAsIXJbYV0ubGVuZ3RoJiZpLmNvbXBsZXRlKCl9KSk7cmV0dXJuKCk9PntyPW89bnVsbH19KTpLcn0odGhpcy53ZWJhcHBEYXRhU291cmNlLmZldGNoUGx1Z2luc0xpc3RpbmcocyksdGhpcy5mZXRjaEVudmlyb25tZW50KCkpLnBpcGUocSgoW2xdKT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goZ2goe3BsdWdpbnM6bH0pKX0pLGNvKGw9Pih0aGlzLnN0b3JlLmRpc3BhdGNoKGR2KGwgaW5zdGFuY2VvZiBjdj97ZmFpbHVyZUNvZGU6bC5mYWlsdXJlQ29kZX06e2ZhaWx1cmVDb2RlOllzLlVOS05PV059KSksS3IpKSkpKTtyZXR1cm4gdG4obyx0aGlzLm9uRGFzaGJvYXJkTG9hZCQucGlwZShxKChbLHNdKT0+cyksSm4ocz0+cyE9PUNuLkNPTVBBUkVfRVhQRVJJTUVOVD8kdChbXSk6dGhpcy5zdG9yZS5zZWxlY3QocXMpLnBpcGUocmkoKGwsYyk9PntsZXQgZD1PYmplY3QuZW50cmllcyhsKSx1PW5ldyBNYXAoT2JqZWN0LmVudHJpZXMoYykpO2lmKGQubGVuZ3RoIT09dS5zaXplKXJldHVybiExO2ZvcihsZXRbcCxoXW9mIGQpaWYoIXUuZ2V0KHApfHx1LmdldChwKS5hbGlhc1RleHQhPT1oLmFsaWFzVGV4dHx8dS5nZXQocCkuYWxpYXNOdW1iZXIhPT1oLmFsaWFzTnVtYmVyKXJldHVybiExO3JldHVybiEwfSksUnMoMCksaWMoNTAwLHZvaWQgMCx7bGVhZGluZzohMCx0cmFpbGluZzohMH0pKSksSXQodGhpcy5zdG9yZS5zZWxlY3QoV3MpLHRoaXMuc3RvcmUuc2VsZWN0KE42KSksT2UoKFsscyxsXSk9PlY2LmhhcyhzKSYmbC5zdGF0ZSE9PVJlLkxPQURJTkcpLER0KCgpPT57dGhpcy5zdG9yZS5kaXNwYXRjaChmUygpKX0pLEpuKCgpPT50aGlzLnJlZnJlc2hQb2x5bWVyUnVucygpKSxEdCgoKT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goZ1MoKSl9KSxjbygoKT0+KHRoaXMuc3RvcmUuZGlzcGF0Y2goX1MoKSksS3IpKSkpfSx7ZGlzcGF0Y2g6ITF9KSx0aGlzLmRpc3BhdGNoQ2hhbmdlUGx1Z2luJD1fcigoKT0+dG4odGhpcy5vbkRhc2hib2FyZExvYWQkLHRoaXMuYWN0aW9ucyQucGlwZShabihnaCkpKS5waXBlKEl0KHRoaXMuc3RvcmUuc2VsZWN0KFpvKSkscSgoWyxvXSk9Pm8pLHJpKCksT2Uobz0+bnVsbCE9PW8pLEx0KDEpLER0KG89Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKHljKHtwbHVnaW46b30pKX0pKSx7ZGlzcGF0Y2g6ITF9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhFbyksTyhJZSksTyhwUykpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLENGPW5ldyB0ZSgiQ29yZSBGZWF0dXJlIENvbmZpZyIpO2Z1bmN0aW9uIHo2KG4pe3JldHVybntpbml0aWFsU3RhdGU6ey4uLnB2LGFjdGl2ZVBsdWdpbjpuLmdldFBsdWdpbklkKCl8fG51bGx9fX1mdW5jdGlvbiBNZ2UoKXtyZXR1cm4gVyhNUyxuPT4oe3NpZGVCYXJXaWR0aEluUGVyY2VudDpufSkpfXZhciBRcz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9SCh7cHJvdmlkZXJzOlt7cHJvdmlkZTpDRixkZXBzOltndV0sdXNlRmFjdG9yeTp6Nn1dLGltcG9ydHM6W3RvLmZvckZlYXR1cmUoW0g2XSksd3IuZm9yRmVhdHVyZSgiY29yZSIsRjYsQ0YpLFI2LFJpLmRlZmluZUdsb2JhbFNldHRpbmcoTWdlKV19KSxufSkoKSxVNj1uZXcgdGUoIltBbGVydF0gQWN0aW9uLVRvLUFsZXJ0IFByb3ZpZGVyIiksQ2M9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnByb3ZpZGVycz1uZXcgTWFwO2ZvcihsZXQgaSBvZiBlfHxbXSlmb3IobGV0IHIgb2YgaSl7aWYodGhpcy5wcm92aWRlcnMuaGFzKHIuYWN0aW9uQ3JlYXRvci50eXBlKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgIiR7ci5hY3Rpb25DcmVhdG9yLnR5cGV9IiBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgZm9yIGFsZXJ0cy4gTXVsdGlwbGUgYWxlcnRzIGZvciB0aGUgc2FtZSBhY3Rpb24gaXMgbm90IGFsbG93ZWQuYCk7dGhpcy5wcm92aWRlcnMuc2V0KHIuYWN0aW9uQ3JlYXRvci50eXBlLHIuYWxlcnRGcm9tQWN0aW9uKX19Z2V0QWxlcnRGcm9tQWN0aW9uKGUpe2xldCBpPXRoaXMucHJvdmlkZXJzLmdldChlLnR5cGUpO3JldHVybiBpP2koZSk6bnVsbH1zdGF0aWMgcmVnaXN0ZXJBbGVydEFjdGlvbnMoZSl7cmV0dXJue25nTW9kdWxlOm4scHJvdmlkZXJzOlt7cHJvdmlkZTpVNixtdWx0aTohMCx1c2VGYWN0b3J5OmV9XX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oVTYsOCkpfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1IKHt9KSxufSkoKSxndD0oKCk9PntyZXR1cm4obj1ndHx8KGd0PXt9KSkuQ09MT1I9IkNPTE9SIixuLlJFTEFUSVZFX1RJTUU9IlJFTEFUSVZFX1RJTUUiLG4uUlVOPSJSVU4iLG4uU1RFUD0iU1RFUCIsbi5FWFBFUklNRU5UPSJFWFBFUklNRU5UIixuLlRJTUU9IlRJTUUiLG4uVkFMVUU9IlZBTFVFIixuLlNNT09USEVEPSJTTU9PVEhFRCIsbi5WQUxVRV9DSEFOR0U9IlZBTFVFX0NIQU5HRSIsbi5TVEFSVF9TVEVQPSJTVEFSVF9TVEVQIixuLkVORF9TVEVQPSJFTkRfU1RFUCIsbi5TVEFSVF9WQUxVRT0iU1RBUlRfVkFMVUUiLG4uRU5EX1ZBTFVFPSJFTkRfVkFMVUUiLG4uTUlOX1ZBTFVFPSJNSU5fVkFMVUUiLG4uTUFYX1ZBTFVFPSJNQVhfVkFMVUUiLG4uUEVSQ0VOVEFHRV9DSEFOR0U9IlBFUkNFTlRBR0VfQ0hBTkdFIixuLlNURVBfQVRfTUFYPSJTVEVQX0FUX01BWCIsbi5TVEVQX0FUX01JTj0iU1RFUF9BVF9NSU4iLG4uTUVBTj0iTUVBTiIsbi5SQVdfQ0hBTkdFPSJSQVdfQ0hBTkdFIixuLkhQQVJBTT0iSFBBUkFNIixuLk1FVFJJQz0iTUVUUklDIixuLkNVU1RPTT0iQ1VTVE9NIixndDt2YXIgbn0pKCksaW89KCgpPT57cmV0dXJuKG49aW98fChpbz17fSkpW24uRElTQ1JFVEU9MF09IkRJU0NSRVRFIixuW24uSU5URVJWQUw9MV09IklOVEVSVkFMIixpbzt2YXIgbn0pKCksTHI9KCgpPT57cmV0dXJuKG49THJ8fChMcj17fSkpW24uQVNDRU5ESU5HPTBdPSJBU0NFTkRJTkciLG5bbi5ERVNDRU5ESU5HPTFdPSJERVNDRU5ESU5HIixMcjt2YXIgbn0pKCksV3I9KCgpPT57cmV0dXJuKG49V3J8fChXcj17fSkpW24uU0lOR0xFPTBdPSJTSU5HTEUiLG5bbi5SQU5HRT0xXT0iUkFOR0UiLFdyO3ZhciBufSkoKSxtbz0oKCk9PntyZXR1cm4obj1tb3x8KG1vPXt9KSlbbi5SSUdIVD0wXT0iUklHSFQiLG5bbi5MRUZUPTFdPSJMRUZUIixtbzt2YXIgbn0pKCksWnM9KCgpPT57cmV0dXJuKG49WnN8fChacz17fSkpLlJVTj0iUlVOIixuLkVYUEVSSU1FTlRfQUxJQVM9IkVYUEVSSU1FTlRfQUxJQVMiLG4uSFBBUkFNPSJIUEFSQU0iLG4uT1RIRVI9Ik9USEVSIixaczt2YXIgbn0pKCksdnU9KCgpPT57cmV0dXJuKG49dnV8fCh2dT17fSkpLkRFRkFVTFQ9IkRFRkFVTFQiLG4uU01BTEw9IlNNQUxMIix2dTt2YXIgbn0pKCk7ZnVuY3Rpb24gajYobil7cmV0dXJuIlJVTiI9PT1uLnR5cGU/WnMuUlVOOiJDVVNUT00iPT09bi50eXBlJiYiZXhwZXJpbWVudEFsaWFzIj09PW4ubmFtZT9acy5FWFBFUklNRU5UX0FMSUFTOiJIUEFSQU0iPT09bi50eXBlP1pzLkhQQVJBTTpacy5PVEhFUn12YXIga2w9e21vdmVDb2x1bW46ZnVuY3Rpb24obix0LGUsaSl7bGV0IHI9bi5maW5kSW5kZXgocz0+cy5uYW1lPT09dC5uYW1lKSxvPW4uZmluZEluZGV4KHM9PnMubmFtZT09PWUubmFtZSk7aWYoLTE9PT1yfHxyPT09bylyZXR1cm4gbjtpZigtMT09PW8pe2lmKHZvaWQgMD09PWkpcmV0dXJuIG47bz1pPT09bW8uTEVGVD8wOm4ubGVuZ3RoLTF9bGV0IGE9Wy4uLm5dO3JldHVybiBhLnNwbGljZShyLDEpLGEuc3BsaWNlKG8sMCx0KSxhfSxncm91cENvbHVtbnM6ZnVuY3Rpb24obil7bGV0IHQ9bmV3IE1hcChbW1pzLlJVTixbXV0sW1pzLkVYUEVSSU1FTlRfQUxJQVMsW11dLFtacy5IUEFSQU0sW11dLFtacy5PVEhFUixbXV1dKTtyZXR1cm4gbi5mb3JFYWNoKGU9Pnt0LmdldChqNihlKSk/LnB1c2goZSl9KSxBcnJheS5mcm9tKHQudmFsdWVzKCkpLmZsYXQoKX0sY29sdW1uVG9Hcm91cDpqNn0scm89e307TkEocm8se2Rhc2hib2FyZEhwYXJhbUNvbHVtbkFkZGVkOigpPT5FRixkYXNoYm9hcmRIcGFyYW1Db2x1bW5PcmRlckNoYW5nZWQ6KCk9PklGLGRhc2hib2FyZEhwYXJhbUNvbHVtblJlbW92ZWQ6KCk9PlRGLGRhc2hib2FyZEhwYXJhbUNvbHVtblRvZ2dsZWQ6KCk9PkRGLGRhc2hib2FyZEhwYXJhbUZpbHRlckFkZGVkOigpPT53RixkYXNoYm9hcmRIcGFyYW1GaWx0ZXJSZW1vdmVkOigpPT5tdixkYXNoYm9hcmRNZXRyaWNGaWx0ZXJBZGRlZDooKT0+U0YsZGFzaGJvYXJkTWV0cmljRmlsdGVyUmVtb3ZlZDooKT0+ZnYsaHBhcmFtc0ZldGNoU2Vzc2lvbkdyb3Vwc1N1Y2NlZWRlZDooKT0+aHYsbG9hZEFsbERhc2hib2FyZEhwYXJhbXM6KCk9Pmd2fSk7dmFyIGh2PWZlKCJbSHBhcmFtc10gSHBhcmFtcyBGZXRjaCBTZXNzaW9uIEdyb3VwcyBTdWNjZWVkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx3Rj1mZSgiW0hwYXJhbXNdIERhc2hib2FyZCBIcGFyYW0gRmlsdGVyIEFkZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksU0Y9ZmUoIltIcGFyYW1zXSBEYXNoYm9hcmQgTWV0cmljIEZpbHRlciBBZGRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLG12PWZlKCJbSHBhcmFtc10gRGFzaGJvYXJkIEhwYXJhbSBGaWx0ZXIgUmVtb3ZlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGZ2PWZlKCJbSHBhcmFtc10gRGFzaGJvYXJkIE1ldHJpYyBGaWx0ZXIgUmVtb3ZlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEVGPWZlKCJbSHBhcmFtc10gRGFzaGJvYXJkIEhwYXJhbSBDb2x1bW4gQWRkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxURj1mZSgiW0hwYXJhbXNdIERhc2hib2FyZCBIcGFyYW0gQ29sdW1uIFJlbW92ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxERj1mZSgiW0hwYXJhbXNdIERhc2hib2FyZCBIcGFyYW0gQ29sdW1uIFRvZ2dsZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxJRj1mZSgiW0hwYXJhbXNdIERhc2hib2FyZCBIcGFyYW0gQ29sdW1uIE9yZGVyIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxndj1mZSgiW0hwYXJhbXNdIExvYWQgYWxsIEhwYXJhbXMiKSxEZ2U9Z3Ioe2Rhc2hib2FyZEhwYXJhbVNwZWNzOltdLGRhc2hib2FyZFNlc3Npb25Hcm91cHM6W10sZGFzaGJvYXJkRmlsdGVyczp7aHBhcmFtczpuZXcgTWFwLG1ldHJpY3M6bmV3IE1hcH0sZGFzaGJvYXJkRGlzcGxheWVkSHBhcmFtQ29sdW1uczpbXSxudW1EYXNoYm9hcmRIcGFyYW1zVG9Mb2FkOjFlMyxudW1EYXNoYm9hcmRIcGFyYW1zTG9hZGVkOjB9LHllKGhzLChuLHtwYXJ0aWFsU2V0dGluZ3M6dH0pPT57bGV0e2Rhc2hib2FyZERpc3BsYXllZEhwYXJhbUNvbHVtbnM6ZX09dDtyZXR1cm4gZT97Li4ubixkYXNoYm9hcmREaXNwbGF5ZWRIcGFyYW1Db2x1bW5zOmV9Om59KSx5ZShodiwobix0KT0+e2xldCBlPXQuaHBhcmFtU3BlY3M7cmV0dXJuey4uLm4sZGFzaGJvYXJkSHBhcmFtU3BlY3M6ZSxkYXNoYm9hcmRTZXNzaW9uR3JvdXBzOnQuc2Vzc2lvbkdyb3VwcyxudW1EYXNoYm9hcmRIcGFyYW1zTG9hZGVkOmUubGVuZ3RofX0pLHllKHdGLChuLHQpPT57bGV0IGU9bmV3IE1hcChuLmRhc2hib2FyZEZpbHRlcnMuaHBhcmFtcyk7cmV0dXJuIGUuc2V0KHQubmFtZSx0LmZpbHRlciksey4uLm4sZGFzaGJvYXJkRmlsdGVyczp7Li4ubi5kYXNoYm9hcmRGaWx0ZXJzLGhwYXJhbXM6ZX19fSkseWUoU0YsKG4sdCk9PntsZXQgZT1uZXcgTWFwKG4uZGFzaGJvYXJkRmlsdGVycy5tZXRyaWNzKTtyZXR1cm4gZS5zZXQodC5uYW1lLHQuZmlsdGVyKSx7Li4ubixkYXNoYm9hcmRGaWx0ZXJzOnsuLi5uLmRhc2hib2FyZEZpbHRlcnMsbWV0cmljczplfX19KSx5ZShtdiwobix0KT0+e2xldCBlPW5ldyBNYXAobi5kYXNoYm9hcmRGaWx0ZXJzLmhwYXJhbXMpO3JldHVybiBlLmRlbGV0ZSh0Lm5hbWUpLHsuLi5uLGRhc2hib2FyZEZpbHRlcnM6ey4uLm4uZGFzaGJvYXJkRmlsdGVycyxocGFyYW1zOmV9fX0pLHllKGZ2LChuLHQpPT57bGV0IGU9bmV3IE1hcChuLmRhc2hib2FyZEZpbHRlcnMubWV0cmljcyk7cmV0dXJuIGUuZGVsZXRlKHQubmFtZSksey4uLm4sZGFzaGJvYXJkRmlsdGVyczp7Li4ubi5kYXNoYm9hcmRGaWx0ZXJzLG1ldHJpY3M6ZX19fSkseWUoRUYsKG4se2NvbHVtbjp0LG5leHRUbzplLHNpZGU6aX0pPT57bGV0e2Rhc2hib2FyZERpc3BsYXllZEhwYXJhbUNvbHVtbnM6cn09bixvPXIubGVuZ3RoO2lmKHZvaWQgMCE9PWUmJnZvaWQgMCE9PWkpe2xldCBsPXIuZmluZEluZGV4KGM9PmMubmFtZT09PWUubmFtZSk7LTEhPT1sJiYobz1pPT09bW8uUklHSFQ/bCsxOmwpfWxldCBhPXsuLi50LGVuYWJsZWQ6ITB9LHM9Wy4uLnJdO3JldHVybiBzLnNwbGljZShvLDAsYSksey4uLm4sZGFzaGJvYXJkRGlzcGxheWVkSHBhcmFtQ29sdW1uczpzfX0pLHllKFRGLChuLHtjb2x1bW46dH0pPT57bGV0IGU9bi5kYXNoYm9hcmREaXNwbGF5ZWRIcGFyYW1Db2x1bW5zLmZpbHRlcigoe25hbWU6aX0pPT5pIT09dC5uYW1lKTtyZXR1cm57Li4ubixkYXNoYm9hcmREaXNwbGF5ZWRIcGFyYW1Db2x1bW5zOmV9fSkseWUoREYsKG4se2NvbHVtbjp0fSk9PntsZXQgZT1uLmRhc2hib2FyZERpc3BsYXllZEhwYXJhbUNvbHVtbnMubWFwKGk9PmkubmFtZT09PXQubmFtZT97Li4uaSxlbmFibGVkOiF0LmVuYWJsZWR9OmkpO3JldHVybnsuLi5uLGRhc2hib2FyZERpc3BsYXllZEhwYXJhbUNvbHVtbnM6ZX19KSx5ZShJRiwobix7c291cmNlOnQsZGVzdGluYXRpb246ZSxzaWRlOml9KT0+e2xldHtkYXNoYm9hcmREaXNwbGF5ZWRIcGFyYW1Db2x1bW5zOnJ9PW4sbz1rbC5tb3ZlQ29sdW1uKHIsdCxlLGkpO3JldHVybnsuLi5uLGRhc2hib2FyZERpc3BsYXllZEhwYXJhbUNvbHVtbnM6b319KSx5ZShndixuPT4oey4uLm4sbnVtRGFzaGJvYXJkSHBhcmFtc1RvTG9hZDowfSkpKTtmdW5jdGlvbiBHNihuLHQpe3JldHVybiBEZ2Uobix0KX12YXIgU1M9ImhwYXJhbXMiLGhkPSgoKT0+e3JldHVybihuPWhkfHwoaGQ9e30pKS5TVEFUVVNfVU5LTk9XTj0iU1RBVFVTX1VOS05PV04iLG4uU1RBVFVTX1NVQ0NFU1M9IlNUQVRVU19TVUNDRVNTIixuLlNUQVRVU19GQUlMVVJFPSJTVEFUVVNfRkFJTFVSRSIsbi5TVEFUVVNfUlVOTklORz0iU1RBVFVTX1JVTk5JTkciLGhkO3ZhciBufSkoKSxFUz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxxNj0iZGF0YS9wbHVnaW4vaHBhcmFtcyI7ZnVuY3Rpb24ga2dlKG4pe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gQm9vbGVhbihuLmRvbWFpbkRpc2NyZXRlKX0obik/e3R5cGU6aW8uRElTQ1JFVEUsdmFsdWVzOm4uZG9tYWluRGlzY3JldGV9OmZ1bmN0aW9uKG4pe3JldHVybiBCb29sZWFuKG4uZG9tYWluSW50ZXJ2YWwpfShuKT97Li4ubi5kb21haW5JbnRlcnZhbCx0eXBlOmlvLklOVEVSVkFMfTp7dmFsdWVzOltdLHR5cGU6aW8uRElTQ1JFVEV9fXZhciBUUz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuaHR0cD1lfWdldFByZWZpeChlKXtyZXR1cm4gZS5sZW5ndGg+MT8iY29tcGFyZSI6ImV4cGVyaW1lbnQifWZvcm1hdEV4cGVyaW1lbnRJZHMoZSl7cmV0dXJuIDE9PT1lLmxlbmd0aD9lWzBdOmUubWFwKChpLHIpPT5gJHtyfToke2l9YCkuam9pbigiLCIpfWZldGNoRXhwZXJpbWVudEluZm8oZSxpKXtsZXQgcj10aGlzLmZvcm1hdEV4cGVyaW1lbnRJZHMoZSksbz17ZXhwZXJpbWVudE5hbWU6cixocGFyYW1zTGltaXQ6aSxpbmNsdWRlTWV0cmljczohMX07cmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAvJHt0aGlzLmdldFByZWZpeChlKX0vJHtyfS8ke3E2fS9leHBlcmltZW50YCxvLHt9LCJyZXF1ZXN0IikucGlwZShxKGE9PmEuaHBhcmFtSW5mb3MubWFwKHM9PntsZXQgbD17Li4ucyxkb21haW46a2dlKHMpfTtyZXR1cm4gZGVsZXRlIGwuZG9tYWluSW50ZXJ2YWwsZGVsZXRlIGwuZG9tYWluRGlzY3JldGUsbH0pKSl9ZmV0Y2hTZXNzaW9uR3JvdXBzKGUsaSl7bGV0IHI9dGhpcy5mb3JtYXRFeHBlcmltZW50SWRzKGUpLG89W107Zm9yKGxldCBzIG9mIGkpby5wdXNoKHtocGFyYW06cy5uYW1lLGluY2x1ZGVJblJlc3VsdDohMH0pO2xldCBhPXtleHBlcmltZW50TmFtZTpyLGFsbG93ZWRTdGF0dXNlczpbaGQuU1RBVFVTX0ZBSUxVUkUsaGQuU1RBVFVTX1JVTk5JTkcsaGQuU1RBVFVTX1NVQ0NFU1MsaGQuU1RBVFVTX1VOS05PV05dLGNvbFBhcmFtczpvLHN0YXJ0SW5kZXg6MCxzbGljZVNpemU6MWU2LGluY2x1ZGVNZXRyaWNzOiExfTtyZXR1cm4gdGhpcy5odHRwLnBvc3QoYC8ke3RoaXMuZ2V0UHJlZml4KGUpfS8ke3J9LyR7cTZ9L3Nlc3Npb25fZ3JvdXBzYCxhLHt9LCJyZXF1ZXN0IikucGlwZShxKHM9PnMuc2Vzc2lvbkdyb3Vwcy5tYXAobD0+KGwuc2Vzc2lvbnM9bC5zZXNzaW9ucy5tYXAoYz0+e2lmKGUubGVuZ3RoPjEpe2xldFssLi4uZF09Yy5uYW1lLnNwbGl0KCIgIiksW3UsLi4ucF09ZC5qb2luKCIgIikuc3BsaXQoIi8iKTtjLm5hbWU9W2VbcGFyc2VJbnQodSldLC4uLnBdLmpvaW4oIi8iKX1lbHNlIGMubmFtZT1bZVswXSxjLm5hbWVdLmpvaW4oIi8iKTtyZXR1cm4gY30pLGwpKSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKFhzKSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksTWM9e307ZnVuY3Rpb24gWDYobil7cmV0dXJuIG4uZG9tYWluLnR5cGU9PT1pby5ESVNDUkVURT97dHlwZTppby5ESVNDUkVURSxpbmNsdWRlVW5kZWZpbmVkOiEwLHBvc3NpYmxlVmFsdWVzOm4uZG9tYWluLnZhbHVlcyxmaWx0ZXJWYWx1ZXM6bi5kb21haW4udmFsdWVzfTp7dHlwZTppby5JTlRFUlZBTCxpbmNsdWRlVW5kZWZpbmVkOiEwLG1pblZhbHVlOm4uZG9tYWluLm1pblZhbHVlLG1heFZhbHVlOm4uZG9tYWluLm1heFZhbHVlLGZpbHRlckxvd2VyVmFsdWU6bi5kb21haW4ubWluVmFsdWUsZmlsdGVyVXBwZXJWYWx1ZTpuLmRvbWFpbi5tYXhWYWx1ZX19TkEoTWMse2dldERhc2hib2FyZERlZmF1bHRIcGFyYW1GaWx0ZXJzOigpPT5SRixnZXREYXNoYm9hcmREaXNwbGF5ZWRIcGFyYW1Db2x1bW5zOigpPT5tZCxnZXREYXNoYm9hcmRIcGFyYW1GaWx0ZXJNYXA6KCk9PklTLGdldERhc2hib2FyZEhwYXJhbVNwZWNzOigpPT5EUyxnZXREYXNoYm9hcmRNZXRyaWNzRmlsdGVyTWFwOigpPT5BUyxnZXREYXNoYm9hcmRTZXNzaW9uR3JvdXBzOigpPT5BRixnZXROdW1EYXNoYm9hcmRIcGFyYW1zTG9hZGVkOigpPT5GZ2UsZ2V0TnVtRGFzaGJvYXJkSHBhcmFtc1RvTG9hZDooKT0+UEZ9KTt2YXIgdmg9TXIoU1MpLERTPVcodmgsbj0+bi5kYXNoYm9hcmRIcGFyYW1TcGVjcyksQUY9Vyh2aCxuPT5uLmRhc2hib2FyZFNlc3Npb25Hcm91cHMpLFJGPVcoRFMsbj0+bmV3IE1hcChuLm1hcChlPT5bZS5uYW1lLFg2KGUpXSkpKSxtZD1XKHZoLG49PntsZXQgdD1uZXcgU2V0KG4uZGFzaGJvYXJkSHBhcmFtU3BlY3MubWFwKGU9PmUubmFtZSkpO3JldHVybiBuLmRhc2hib2FyZERpc3BsYXllZEhwYXJhbUNvbHVtbnMuZmlsdGVyKGU9PnQuaGFzKGUubmFtZSkpfSksSVM9Vyh2aCxuPT5uLmRhc2hib2FyZEZpbHRlcnMuaHBhcmFtcyksQVM9Vyh2aCxuPT5uLmRhc2hib2FyZEZpbHRlcnMubWV0cmljcyksUEY9Vyh2aCxuPT5uLm51bURhc2hib2FyZEhwYXJhbXNUb0xvYWQpLEZnZT1XKHZoLG49Pm4ubnVtRGFzaGJvYXJkSHBhcmFtc0xvYWRlZCksWTY9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5hY3Rpb25zJD1lLHRoaXMuc3RvcmU9aSx0aGlzLmRhdGFTb3VyY2U9cix0aGlzLm5hdmlnYXRlZCQ9dGhpcy5hY3Rpb25zJC5waXBlKFpuKE5hKSxJdCh0aGlzLnN0b3JlLnNlbGVjdChvcikpLE9lKChbLG9dKT0+Qm9vbGVhbihvKSkscSgoWyxvXSk9Pm8pLHJpKChvLGEpPT5vLmpvaW4oIiIpPT09YS5qb2luKCIiKSkpLHRoaXMubG9hZEhwYXJhbXNPblJlbG9hZCQ9dGhpcy5hY3Rpb25zJC5waXBlKFpuKG1hLEJhLGd2KSxJdCh0aGlzLnN0b3JlLnNlbGVjdChvcikpLE9lKChbLG9dKT0+Qm9vbGVhbihvKSkscSgoWyxvXSk9Pm8pKSx0aGlzLmxvYWRIcGFyYW1zRGF0YSQ9X3IoKCk9PnRuKHRoaXMubmF2aWdhdGVkJCx0aGlzLmxvYWRIcGFyYW1zT25SZWxvYWQkKS5waXBlKEl0KHRoaXMuc3RvcmUuc2VsZWN0KEhvKSx0aGlzLnN0b3JlLnNlbGVjdChQRikpLE9lKChbLG9dKT0+bz8ucm91dGVLaW5kPT09Q24uRVhQRVJJTUVOVHx8bz8ucm91dGVLaW5kPT09Q24uQ09NUEFSRV9FWFBFUklNRU5UKSxpYygxMCksSm4oKFtvLCxhXSk9PnRoaXMubG9hZEhwYXJhbXNGb3JFeHBlcmltZW50cyhvLGEpKSxxKG89Pmh2KG8pKSkpfWxvYWRIcGFyYW1zRm9yRXhwZXJpbWVudHMoZSxpKXtyZXR1cm4gdGhpcy5kYXRhU291cmNlLmZldGNoRXhwZXJpbWVudEluZm8oZSxpKS5waXBlKEpuKHI9PnRoaXMuZGF0YVNvdXJjZS5mZXRjaFNlc3Npb25Hcm91cHMoZSxyKS5waXBlKGNvKG89Pm8gaW5zdGFuY2VvZiB1ZCYmNDAwPT09by5zdGF0dXM/JHQoW10pOl9sKCgpPT5vKSkscShvPT4oe2hwYXJhbVNwZWNzOnIsc2Vzc2lvbkdyb3VwczpvfSkpKSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKEVvKSxPKEllKSxPKFRTKSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksUTY9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe3Byb3ZpZGVyczpbVFNdLGltcG9ydHM6W3dyLmZvckZlYXR1cmUoU1MsRzYpLHRvLmZvckZlYXR1cmUoW1k2XSldfSksbn0pKCk7ZnVuY3Rpb24gTmdlKCl7cmV0dXJuIFcobWQsbj0+KHtkYXNoYm9hcmREaXNwbGF5ZWRIcGFyYW1Db2x1bW5zOm59KSl9dmFyIFJTPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1IKHtpbXBvcnRzOltRNixSaS5kZWZpbmVHbG9iYWxTZXR0aW5nKE5nZSldfSksbn0pKCksUFM9ZmUoIltSdW5zXSBGZXRjaCBSdW5zIFJlcXVlc3RlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFdmPWZlKCJbUnVuc10gRmV0Y2ggUnVucyBTdWNjZWVkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxxZj1mZSgiW1J1bnNdIEZldGNoIFJ1bnMgRmFpbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksa1M9ZmUoIltSdW5zXSBSdW4gU2VsZWN0aW9uIFRvZ2dsZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxPUz1mZSgiW1J1bnNdIFNpbmdsZSBSdW4gU2VsZWN0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxGUz1mZSgiW1J1bnNdIFJ1biBQYWdlIFNlbGVjdGlvbiBUb2dnbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksTlM9ZmUoIltSdW5zXSBSdW4gU2VsZWN0b3IgUmVnZXggRmlsdGVyIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxMUz1mZSgiW1J1bnNdIFJ1biBDb2xvciBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksWGY9ZmUoIltSdW5zXSBSdW4gR3JvdXAgQnkgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFo2PWZlKCJbUnVuc10gUnVucyBUYWJsZSBIZWFkZXIgQWRkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxCUz1mZSgiW1J1bnNdIFJ1bnMgVGFibGUgSGVhZGVyIFJlbW92ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxLNj1mZSgiW1J1bnNdIFJ1bnMgVGFibGUgSGVhZGVyIE9yZGVyIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxWUz1mZSgiW1J1bnNdIFJ1bnMgVGFibGUgU29ydGluZyBJbmZvIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KTtmdW5jdGlvbiBMZ2Uobix0KXtyZXR1cm5gJHt0fS8ke259YH12YXIgSjY9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmh0dHA9ZX1mZXRjaFJ1bnMoZSl7cmV0dXJuIHRoaXMuaHR0cC5nZXQoYC9leHBlcmltZW50LyR7ZX0vZGF0YS9ydW5zYCkucGlwZShxKGk9PmkubWFwKHI9Pih7aWQ6TGdlKHIsZSksbmFtZTpyLHN0YXJ0VGltZTowfSkpKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oWHMpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSwkNj0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9SCh7cHJvdmlkZXJzOlt7cHJvdmlkZTpFUyx1c2VDbGFzczpKNn1dfSksbn0pKCksZVc9VyhNcigiYWxlcnRzIiksbj0+bi5sYXRlc3RBbGVydCkselM9ImV4cGVyaW1lbnRzIix0Vz1XKE1yKHpTKSxuPT5uLmRhdGEpLFVTPVcodFcsKG4sdCk9PntsZXR7ZXhwZXJpbWVudElkOmV9PXQ7cmV0dXJuIG4uZXhwZXJpbWVudE1hcFtlXXx8bnVsbH0pLHl1PVcodFcsb3IsKG4sdCk9Pih0Pz9bXSkubWFwKGU9Pm4uZXhwZXJpbWVudE1hcFtlXSkuZmlsdGVyKEJvb2xlYW4pLnJlZHVjZSgoZSxpKT0+KGVbaS5pZF09aS5uYW1lLGUpLHt9KSk7ZnVuY3Rpb24galMobix0LGUpe3JldHVybiBuPHQ/dDpuPmU/ZTpufWZ1bmN0aW9uIFlmKG4sdCxlKXtsZXQgaT1qUyhuLnN0YXJ0LnN0ZXAsdCxlKSxyPW4uZW5kP2pTKG4uZW5kLnN0ZXAsdCxlKTpudWxsO3JldHVybntzdGFydFN0ZXA6aSxlbmRTdGVwOnIsY2xpcHBlZDppIT09bi5zdGFydC5zdGVwfHxyIT09KG4uZW5kPy5zdGVwPz9udWxsKX19ZnVuY3Rpb24gR1Mobix0KXtsZXQgZT10W24uaWRdO3JldHVybiBlJiZlLnZpc2libGUmJiFCb29sZWFuKGUuYXV4KX1mdW5jdGlvbiBPRihuLHQpe3JldHVybiB0P246e3N0YXJ0Om4uc3RhcnQsZW5kOm51bGx9fWZ1bmN0aW9uIEZGKG4sdCxlKXtyZXR1cm4gT0YoZnVuY3Rpb24obix7bWluU3RlcDp0LG1heFN0ZXA6ZX0pe3JldHVybntzdGFydDp7c3RlcDpqUyhuLnN0YXJ0LnN0ZXAsdCxlKX0sZW5kOm4uZW5kP3tzdGVwOmpTKG4uZW5kLnN0ZXAsdCxlKX06bnVsbH19KG4sdCksZSl9dmFyIEFuPSgoKT0+e3JldHVybihuPUFufHwoQW49e30pKS5TQ0FMQVJTPSJzY2FsYXJzIixuLkhJU1RPR1JBTVM9Imhpc3RvZ3JhbXMiLG4uSU1BR0VTPSJpbWFnZXMiLEFuO3ZhciBufSkoKSxQaT0oKCk9PntyZXR1cm4obj1QaXx8KFBpPXt9KSkuU1RFUD0ic3RlcCIsbi5SRUxBVElWRT0icmVsYXRpdmUiLG4uV0FMTF9USU1FPSJ3YWxsdGltZSIsUGk7dmFyIG59KSgpLF92PSJ0aW1lc2VyaWVzIjtmdW5jdGlvbiBhVyhuKXtyZXR1cm4gbj09PUFuLlNDQUxBUlN8fG49PT1Bbi5ISVNUT0dSQU1TfHxuPT09QW4uSU1BR0VTfXZhciBVZ2U9W0FuLklNQUdFU107ZnVuY3Rpb24gZnMobil7cmV0dXJuIFVnZS5pbmNsdWRlcyhuKX12YXIgamdlPVtBbi5ISVNUT0dSQU1TLEFuLklNQUdFU107ZnVuY3Rpb24gZ3Mobil7cmV0dXJuIGpnZS5pbmNsdWRlcyhuKX1mdW5jdGlvbiBORihuKXtyZXR1cm4gZ3Mobi5wbHVnaW4pfXZhciB3Yz1jbGFzc3t9O2Z1bmN0aW9uIHFTKG4pe3JldHVybiBuLmhhc093blByb3BlcnR5KCJlcnJvciIpfXZhciBMRj0iZGF0YS9wbHVnaW4vdGltZXNlcmllcyI7ZnVuY3Rpb24gc1cobil7bGV0IHQ9bi5pbmRleE9mKCIvIik7cmV0dXJue3J1bjpuLnN1YnN0cmluZyh0KzEpLGV4cGVyaW1lbnRJZDpuLnN1YnN0cmluZygwLHQpfX1mdW5jdGlvbiBjVyhuLHQpe3JldHVybmAke3R9LyR7bn1gfWZ1bmN0aW9uIGxXKG4sdCl7bGV0e3J1blRvU2VyaWVzOmUscnVuOmksLi4ucn09bixvPXsuLi5yfTtyZXR1cm4gZSYmKG8ucnVuVG9TZXJpZXM9QkYoZSx0KSksaSYmKG8ucnVuSWQ9Y1coaSx0KSksb31mdW5jdGlvbiBCRihuLHQpe2xldCBlPXt9O2ZvcihsZXQgaSBpbiBuKW4uaGFzT3duUHJvcGVydHkoaSkmJihlW2NXKGksdCldPW5baV0pO3JldHVybiBlfXZhciBkVz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5odHRwPWUsdGhpcy5zdG9yZT1pfWZldGNoVGFnTWV0YWRhdGEoZSl7bGV0IGk9ZS5tYXAobz0+dGhpcy5odHRwLmdldChgL2V4cGVyaW1lbnQvJHtvfS8ke0xGfS90YWdzYCkucGlwZShxKHM9PmZ1bmN0aW9uKG4sdCl7bGV0IGU9e307Zm9yKGxldCBpIG9mIE9iamVjdC5rZXlzKG4pKXtsZXQgcj1pO2lmKGZzKHIpKXtsZXR7dGFnUnVuU2FtcGxlZEluZm86bywuLi5hfT1uW3JdLHM9e307Zm9yKGxldCBsIGluIG8pby5oYXNPd25Qcm9wZXJ0eShsKSYmKHNbbF09QkYob1tsXSx0KSk7ZVtyXT17Li4uYSx0YWdSdW5TYW1wbGVkSW5mbzpzfX1lbHNle2xldHtydW5UYWdJbmZvOm8sLi4uYX09bltyXTtlW3JdPXsuLi5hLHJ1blRhZ0luZm86QkYobyx0KX19fXJldHVybiBlfShzLG8pKSkpLHI9dGhpcy5zdG9yZS5zZWxlY3QoYnUpLnBpcGUoT2UoQm9vbGVhbiksTHQoMSksSXQodGhpcy5zdG9yZS5zZWxlY3QoZFMpKSxxKChbLG9dKT0+bykpO3JldHVybiBDbyhpKS5waXBlKEl0KHIpLHEoKFtvLGFdKT0+e2xldCBzPWZ1bmN0aW9uKG4pe2xldCB0PXt9O2ZvcihsZXQgZSBvZiBuKWZvcihsZXQgaSBvZiBPYmplY3QudmFsdWVzKEFuKSlpZihmcyhpKSl7dFtpXT10W2ldfHx7dGFnRGVzY3JpcHRpb25zOnt9LHRhZ1J1blNhbXBsZWRJbmZvOnt9fTtsZXR7dGFnRGVzY3JpcHRpb25zOnIsdGFnUnVuU2FtcGxlZEluZm86b309ZVtpXTt0W2ldLnRhZ0Rlc2NyaXB0aW9ucz17Li4udFtpXS50YWdEZXNjcmlwdGlvbnMsLi4ucn07bGV0IGE9dFtpXS50YWdSdW5TYW1wbGVkSW5mbztmb3IobGV0IHMgb2YgT2JqZWN0LmtleXMobykpe2Fbc109YVtzXXx8e307Zm9yKGxldCBsIG9mIE9iamVjdC5rZXlzKG9bc10pKWFbc11bbF09b1tzXVtsXX19ZWxzZXt0W2ldPXRbaV18fHt0YWdEZXNjcmlwdGlvbnM6e30scnVuVGFnSW5mbzp7fX07bGV0e3RhZ0Rlc2NyaXB0aW9uczpyLHJ1blRhZ0luZm86b309ZVtpXTt0W2ldLnRhZ0Rlc2NyaXB0aW9ucz17Li4udFtpXS50YWdEZXNjcmlwdGlvbnMsLi4ucn0sdFtpXS5ydW5UYWdJbmZvPXsuLi50W2ldLnJ1blRhZ0luZm8sLi4ub319cmV0dXJuIHR9KG8pO3JldHVybiBhfHwoc1tBbi5JTUFHRVNdPXt0YWdEZXNjcmlwdGlvbnM6e30sdGFnUnVuU2FtcGxlZEluZm86e319KSxzfSkpfWZldGNoVGltZVNlcmllcyhlKXtsZXQgaT1lLm1hcChyPT57aWYoZ3Moci5wbHVnaW4pKXtsZXR7cnVuSWQ6bCwuLi5jfT1yLHtydW46ZCxleHBlcmltZW50SWQ6dX09c1cobCkscD17Li4uYyxydW46ZH07cmV0dXJuIHRoaXMuZmV0Y2hUaW1lU2VyaWVzQmFja2VuZFJlcXVlc3QocCx1KS5waXBlKHEoKHtyZXNwb25zZTpoLGV4cGVyaW1lbnRJZDptfSk9PmxXKGgsbSkpKX1sZXR7ZXhwZXJpbWVudElkczpvLC4uLmF9PXI7cmV0dXJuIENvKG8ubWFwKGw9PnRoaXMuZmV0Y2hUaW1lU2VyaWVzQmFja2VuZFJlcXVlc3QoYSxsKSkpLnBpcGUocShsPT57bGV0e3J1blRvU2VyaWVzOmMsZXJyb3I6ZCwuLi51fT1sWzBdLnJlc3BvbnNlLHA9dTtmb3IobGV0e3Jlc3BvbnNlOmgsZXhwZXJpbWVudElkOm19b2YgbCl7bGV0IF89bFcoaCxtKTtpZihwLmVycm9yKWNvbnRpbnVlO2xldHtydW5Ub1NlcmllczpNLGVycm9yOnl9PV87aWYoeSlwLmVycm9yPXkscC5ydW5Ub1Nlcmllcz12b2lkIDA7ZWxzZXtwLnJ1blRvU2VyaWVzPXAucnVuVG9TZXJpZXN8fHt9O2ZvcihsZXQgeCBvZiBPYmplY3Qua2V5cyhNKSlwLnJ1blRvU2VyaWVzW3hdPU1beF19fXJldHVybiBwfSkpfSk7cmV0dXJuIENvKGkpfWZldGNoVGltZVNlcmllc0JhY2tlbmRSZXF1ZXN0KGUsaSl7bGV0IHI9bmV3IEZvcm1EYXRhO3JldHVybiByLmFwcGVuZCgicmVxdWVzdHMiLEpTT04uc3RyaW5naWZ5KFtlXSkpLHRoaXMuaHR0cC5wb3N0KGAvZXhwZXJpbWVudC8ke2l9LyR7TEZ9L3RpbWVTZXJpZXNgLHIpLnBpcGUocShvPT4oe3Jlc3BvbnNlOm9bMF0sZXhwZXJpbWVudElkOml9KSkpfWltYWdlVXJsKGUpe3JldHVybmAke0xGfS9pbWFnZURhdGE/aW1hZ2VJZD0ke2V9YH1kb3dubG9hZFVybChlLGkscixvKXtsZXQgbCx7cnVuOmEsZXhwZXJpbWVudElkOnN9PXNXKHIpO2lmKGUhPT1Bbi5TQ0FMQVJTKXRocm93IG5ldyBFcnJvcihgTm90IGltcGxlbWVudGVkOiBkb3dubG9hZFVybCBmb3IgJHtlfSBpcyBub3QgaW1wbGVtZW50ZWQgeWV0YCk7aWYobD0ic2NhbGFycy9zY2FsYXJzIiwhcyl0aHJvdyBuZXcgRXJyb3IoImV4cGVyaW1lbnRJZCBpcyBlbXB0eTsgaXQgaXMgcmVxdWlyZWQgdG8gZm9ybSBkb3dubG9hZFVybC4iKTtyZXR1cm5gL2V4cGVyaW1lbnQvJHtzfS9kYXRhL3BsdWdpbi9zY2FsYXJzL3NjYWxhcnM/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKHt0YWc6aSxydW46YSxmb3JtYXQ6b30pfWB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oWHMpLE8oSWUpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxidj0idGItc2F2ZWQtc2NhbGFyLXBpbnMiLFhTPSgoKT0+e2NsYXNzIG57c2F2ZVNjYWxhclBpbihlKXtsZXQgaT10aGlzLmdldFNhdmVkU2NhbGFyUGlucygpO2kuaW5jbHVkZXMoZSl8fGkucHVzaChlKSx3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oYnYsSlNPTi5zdHJpbmdpZnkoaSkpfXNhdmVTY2FsYXJQaW5zKGUpe2xldCBpPXRoaXMuZ2V0U2F2ZWRTY2FsYXJQaW5zKCkscj1lLmZpbHRlcihvPT4haS5pbmNsdWRlcyhvKSk7aS5wdXNoKC4uLnIpLHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShidixKU09OLnN0cmluZ2lmeShpKSl9cmVtb3ZlU2NhbGFyUGluKGUpe2xldCBpPXRoaXMuZ2V0U2F2ZWRTY2FsYXJQaW5zKCk7d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGJ2LEpTT04uc3RyaW5naWZ5KGkuZmlsdGVyKHI9PnIhPT1lKSkpfWdldFNhdmVkU2NhbGFyUGlucygpe2xldCBlPXdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShidik7cmV0dXJuIGU/SlNPTi5wYXJzZShlKTpbXX1yZW1vdmVBbGxTY2FsYXJQaW5zKCl7d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGJ2LEpTT04uc3RyaW5naWZ5KFtdKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLFhnZT1uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLFlTPSgoKT0+e2NsYXNzIG57Z2V0UGFyYW1zKCl7cmV0dXJuIFhnZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksdnY9InRiX2ZlYXR1cmVfZmxhZ19zdG9yYWdlX2tleSIsVkY9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnF1ZXJ5UGFyYW1zPWV9Z2V0RmVhdHVyZXMoZSxpKXtsZXQgcj1lP3RoaXMuZ2V0UGFydGlhbEZlYXR1cmVzRnJvbU1lZGlhUXVlcnkoKTp7fSxvPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKG4pLnJlZHVjZSgoZSxbaSxyXSk9PntsZXQgbz1mdW5jdGlvbihuLHQpe2xldCBlPW4ucXVlcnlQYXJhbU92ZXJyaWRlO2lmKCFlfHwhdC5oYXMoZSkpcmV0dXJuIG51bGw7bGV0IGk9dC5nZXQoZSk7cmV0dXJuIG51bGw9PWk/bnVsbDpuLnBhcnNlVmFsdWUoaSl9KHIsdCk7cmV0dXJuIG51bGwhPT1vJiYoZVtpXT1vKSxlfSx7fSl9KGksdGhpcy5xdWVyeVBhcmFtcy5nZXRQYXJhbXMoKSk7cmV0dXJuey4uLnIsLi4uT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHRoaXMuZ2V0UGVyc2lzdGVudEZlYXR1cmVGbGFncygpKS5maWx0ZXIoKFtzXSk9Pmlbc10pKSwuLi5vfX1wZXJzaXN0RmVhdHVyZUZsYWdzKGUpe2xldCByPXsuLi50aGlzLmdldFBlcnNpc3RlbnRGZWF0dXJlRmxhZ3MoKSwuLi5lfTt3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0odnYsSlNPTi5zdHJpbmdpZnkocikpfXJlc2V0UGVyc2lzdGVkRmVhdHVyZUZsYWcoZSl7bGV0IGk9dGhpcy5nZXRQZXJzaXN0ZW50RmVhdHVyZUZsYWdzKCk7aWYobnVsbCE9aVtlXSl7aWYoZGVsZXRlIGlbZV0sMD09PU9iamVjdC5rZXlzKGkpLmxlbmd0aClyZXR1cm4gdm9pZCB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odnYpO3dpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh2dixKU09OLnN0cmluZ2lmeShpKSl9fXJlc2V0QWxsUGVyc2lzdGVkRmVhdHVyZUZsYWdzKCl7d2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHZ2KX1nZXRQZXJzaXN0ZW50RmVhdHVyZUZsYWdzKCl7bGV0IGU9d2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKHZ2KTtyZXR1cm4gbnVsbD09ZT97fTpKU09OLnBhcnNlKGUpfWdldFBhcnRpYWxGZWF0dXJlc0Zyb21NZWRpYVF1ZXJ5KCl7bGV0IGU9e307cmV0dXJuIHdpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIikubWF0Y2hlcyYmKGUuZGVmYXVsdEVuYWJsZURhcmtNb2RlPSEwKSxlfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKFlTKSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksUVM9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksaFc9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe3Byb3ZpZGVyczpbVkYsWVMse3Byb3ZpZGU6UVMsdXNlQ2xhc3M6VkZ9XX0pLG59KSgpLHl2PWZlKCJbRkVBVFVSRSBGTEFHXSBQYXJ0aWFsIEZlYXR1cmUgRmxhZ3MgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksWlM9ZmUoIltGRUFUVVJFIEZMQUddIEVuYWJsZSBEYXJrIE1vZGUgT3ZlcnJpZGUgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHloPWZlKCJbRkVBVFVSRSBGTEFHXSBTdG9yZSB0aGUgZmVhdHVyZSBmbGFncyBpbiBwZXJzaXN0ZW50IGxvY2FsU3RvcmFnZSIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHh1PWZlKCJbRkVBVFVSRSBGTEFHXSBSZXNldCBmZWF0dXJlIGZsYWcgb3ZlcnJpZGVzIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksUWY9ZmUoIltGRUFUVVJFIEZMQUddIFJlc2V0IGFsbCBmZWF0dXJlIGZsYWcgb3ZlcnJpZGVzIiksbVc9ZmUoIltGRUFUVVJFIEZMQUddIEVmZmVjdHMgSW5pdCIpLGZXPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuYWN0aW9ucyQ9ZSx0aGlzLnN0b3JlPWksdGhpcy5kYXRhU291cmNlPXIsdGhpcy50ZkZlYXR1cmVGbGFncz17cmVmOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRmLWZlYXR1cmUtZmxhZ3MiKS50Zl9mZWF0dXJlX2ZsYWdzfSx0aGlzLmdldEZlYXR1cmVGbGFncyQ9X3IoKCk9PnRoaXMuYWN0aW9ucyQucGlwZShabihtVyksVmkodGhpcy5zdG9yZS5zZWxlY3QoTTYpLHRoaXMuc3RvcmUuc2VsZWN0KGZoKSkscSgoWyxvLGFdKT0+e2xldCBzPXRoaXMuZGF0YVNvdXJjZS5nZXRGZWF0dXJlcyhvLGEpO3JldHVybiB5dih7ZmVhdHVyZXM6c30pfSkpKSx0aGlzLnVwZGF0ZVBvbHltZXJGZWF0dXJlRmxhZ3MkPV9yKCgpPT50aGlzLmFjdGlvbnMkLnBpcGUoWm4oeXYpLEl0KHRoaXMuc3RvcmUuc2VsZWN0KFFvKSx0aGlzLnN0b3JlLnNlbGVjdChIZikpLER0KChbLG8sYV0pPT57dGhpcy50ZkZlYXR1cmVGbGFncy5yZWYuc2V0RmVhdHVyZUZsYWdzKG8sYSl9KSkse2Rpc3BhdGNoOiExfSksdGhpcy5zdG9yZUZlYXR1cmVGbGFnJD1fcigoKT0+dGhpcy5hY3Rpb25zJC5waXBlKFpuKHloKSxEdCgoe2ZsYWdzOm99KT0+e3RoaXMuZGF0YVNvdXJjZS5wZXJzaXN0RmVhdHVyZUZsYWdzKG8pfSkpLHtkaXNwYXRjaDohMX0pLHRoaXMucmVzZXRGZWF0dXJlRmxhZ092ZXJyaWRlcyQ9X3IoKCk9PnRoaXMuYWN0aW9ucyQucGlwZShabih4dSksRHQoKHtmbGFnczpvfSk9PntvLmZvckVhY2goYT0+e3RoaXMuZGF0YVNvdXJjZS5yZXNldFBlcnNpc3RlZEZlYXR1cmVGbGFnKGEpfSl9KSkse2Rpc3BhdGNoOiExfSksdGhpcy5yZXNldEFsbEZlYXR1cmVGbGFnT3ZlcnJpZGVzJD1fcigoKT0+dGhpcy5hY3Rpb25zJC5waXBlKFpuKFFmKSxEdCgoKT0+e3RoaXMuZGF0YVNvdXJjZS5yZXNldEFsbFBlcnNpc3RlZEZlYXR1cmVGbGFncygpfSkpLHtkaXNwYXRjaDohMX0pfW5ncnhPbkluaXRFZmZlY3RzKCl7cmV0dXJuIG1XKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oRW8pLE8oSWUpLE8oUVMpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxiVz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZX1pbnRlcmNlcHQoZSxpKXtyZXR1cm4gdGhpcy5zdG9yZS5waXBlKHVuKEhmKSx6bSgpLEpuKHI9PihlPWUuY2xvbmUoe2hlYWRlcnM6ZS5oZWFkZXJzLnNldCgiWC1UZW5zb3JCb2FyZC1GZWF0dXJlLUZsYWdzIixKU09OLnN0cmluZ2lmeShyKSl9KSxpLmhhbmRsZShlKSkpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhJZSkpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpO2Z1bmN0aW9uIEN1KG4pe3JldHVybiJmYWxzZSIhPT1ufXZhciBuLEhGPXtzY2FsYXJzQmF0Y2hTaXplOntkZWZhdWx0VmFsdWU6dm9pZCAwLHF1ZXJ5UGFyYW1PdmVycmlkZToic2NhbGFyc0JhdGNoU2l6ZSIscGFyc2VWYWx1ZTpwYXJzZUludH0sZW5hYmxlZEV4cGVyaW1lbnRhbFBsdWdpbnM6e2RlZmF1bHRWYWx1ZTpbXSxxdWVyeVBhcmFtT3ZlcnJpZGU6ImV4cGVyaW1lbnRhbFBsdWdpbiIscGFyc2VWYWx1ZTpmdW5jdGlvbihuKXtyZXR1cm4gbj9uLnNwbGl0KCIsIik6W119fSxmb3JjZVN2Zzp7ZGVmYXVsdFZhbHVlOiExLHF1ZXJ5UGFyYW1PdmVycmlkZToiZm9yY2VTVkciLHBhcnNlVmFsdWU6Q3V9LGVuYWJsZURhcmtNb2RlT3ZlcnJpZGU6e2RlZmF1bHRWYWx1ZTpudWxsLHF1ZXJ5UGFyYW1PdmVycmlkZTpudWxsfSxkZWZhdWx0RW5hYmxlRGFya01vZGU6e2RlZmF1bHRWYWx1ZTohMSxxdWVyeVBhcmFtT3ZlcnJpZGU6ImRhcmtNb2RlIixwYXJzZVZhbHVlOkN1fSxpc0F1dG9EYXJrTW9kZUFsbG93ZWQ6e2RlZmF1bHRWYWx1ZTohMCxxdWVyeVBhcmFtT3ZlcnJpZGU6bnVsbH0saW5Db2xhYjp7ZGVmYXVsdFZhbHVlOiExLHF1ZXJ5UGFyYW1PdmVycmlkZToidGVuc29yYm9hcmRDb2xhYiIscGFyc2VWYWx1ZTpDdX0sbWV0cmljc0ltYWdlU3VwcG9ydEVuYWJsZWQ6e2RlZmF1bHRWYWx1ZTohMCxxdWVyeVBhcmFtT3ZlcnJpZGU6bnVsbH0sc2hvd0ZsYWdzOntkZWZhdWx0VmFsdWU6dm9pZCAwLHF1ZXJ5UGFyYW1PdmVycmlkZToic2hvd0ZsYWdzIixwYXJzZVZhbHVlOm49Pm59LGVuYWJsZVNjYWxhckNvbHVtbkN1c3RvbWl6YXRpb246e2RlZmF1bHRWYWx1ZTohMSxxdWVyeVBhcmFtT3ZlcnJpZGU6ImVuYWJsZVNjYWxhckNvbHVtbkN1c3RvbWl6YXRpb24iLHBhcnNlVmFsdWU6Q3V9LGVuYWJsZVNjYWxhckNvbHVtbkNvbnRleHRNZW51czp7ZGVmYXVsdFZhbHVlOiExLHF1ZXJ5UGFyYW1PdmVycmlkZToiZW5hYmxlU2NhbGFyQ29sdW1uQ29udGV4dE1lbnVzIixwYXJzZVZhbHVlOkN1fSxlbmFibGVTdWdnZXN0ZWRDYXJkczp7ZGVmYXVsdFZhbHVlOiExLHF1ZXJ5UGFyYW1PdmVycmlkZToiZW5hYmxlU3VnZ2VzdGVkQ2FyZHMiLHBhcnNlVmFsdWU6Q3V9LGVuYWJsZUdsb2JhbFBpbnM6e2RlZmF1bHRWYWx1ZTohMCxxdWVyeVBhcmFtT3ZlcnJpZGU6ImVuYWJsZUdsb2JhbFBpbnMiLHBhcnNlVmFsdWU6Q3V9LGVuYWJsZUNvbG9yQnlFeHBlcmltZW50OntkZWZhdWx0VmFsdWU6ITEscXVlcnlQYXJhbU92ZXJyaWRlOiJlbmFibGVDb2xvckJ5RXhwZXJpbWVudCIscGFyc2VWYWx1ZTpDdX19LHpGPXtpc0ZlYXR1cmVGbGFnc0xvYWRlZDohMSxkZWZhdWx0RmxhZ3M6KG49SEYsT2JqZWN0LmVudHJpZXMobikucmVkdWNlKCh0LFtlLGldKT0+KHRbZV09aS5kZWZhdWx0VmFsdWUsdCkse30pKSxtZXRhZGF0YTpIRixmbGFnT3ZlcnJpZGVzOnt9fSxVRj1uZXcgdGUoIltGZWF0dXJlIEZsYWddIFN0b3JlIENvbmZpZyIpO2Z1bmN0aW9uIHlXKCl7cmV0dXJue2luaXRpYWxTdGF0ZTp6Rn19dmFyIGUwZT1ncih6Rix5ZSh5diwobix7ZmVhdHVyZXM6dH0pPT4oey4uLm4saXNGZWF0dXJlRmxhZ3NMb2FkZWQ6ITAsZmxhZ092ZXJyaWRlczp7Li4ubi5mbGFnT3ZlcnJpZGVzLC4uLnR9fSkpLHllKFpTLChuLHtlbmFibGVEYXJrTW9kZTp0fSk9Pih7Li4ubixmbGFnT3ZlcnJpZGVzOnsuLi5uLmZsYWdPdmVycmlkZXMsZW5hYmxlRGFya01vZGVPdmVycmlkZTp0fX0pKSx5ZSh5aCwobix0KT0+KHsuLi5uLGZsYWdPdmVycmlkZXM6ey4uLm4uZmxhZ092ZXJyaWRlcywuLi50LmZsYWdzfX0pKSx5ZSh4dSwobix0KT0+e2lmKCF0fHwhdC5mbGFnc3x8IXQuZmxhZ3MubGVuZ3RoKXJldHVybiBuO2xldCBlPXsuLi5uLmZsYWdPdmVycmlkZXN9O3JldHVybiB0LmZsYWdzLmZvckVhY2goaT0+e2RlbGV0ZSBlW2ldfSksey4uLm4sZmxhZ092ZXJyaWRlczplfX0pLHllKFFmLG49Pih7Li4ubixmbGFnT3ZlcnJpZGVzOnt9fSkpLHllKGhzLChuLHtwYXJ0aWFsU2V0dGluZ3M6dH0pPT57aWYoIXQudGhlbWVPdmVycmlkZSlyZXR1cm4gbjtsZXQgZTtzd2l0Y2godC50aGVtZU92ZXJyaWRlKXtjYXNlIExhLkJST1dTRVJfREVGQVVMVDplPW51bGw7YnJlYWs7Y2FzZSBMYS5EQVJLOmU9ITA7YnJlYWs7Y2FzZSBMYS5MSUdIVDplPSExfXJldHVybnsuLi5uLGZsYWdPdmVycmlkZXM6ey4uLm4uZmxhZ092ZXJyaWRlcyxlbmFibGVEYXJrTW9kZU92ZXJyaWRlOmV9fX0pKTtmdW5jdGlvbiB4VyhuLHQpe3JldHVybiBlMGUobix0KX1mdW5jdGlvbiB0MGUoKXtyZXR1cm4gVyhjUyxuPT5udWxsPT09bj97dGhlbWVPdmVycmlkZTpMYS5CUk9XU0VSX0RFRkFVTFR9Ont0aGVtZU92ZXJyaWRlOm4/TGEuREFSSzpMYS5MSUdIVH0pfXZhciBNdT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9SCh7cHJvdmlkZXJzOlt7cHJvdmlkZTpVRix1c2VGYWN0b3J5OnlXfSx7cHJvdmlkZTpiRix1c2VDbGFzczpiVyxtdWx0aTohMH1dLGltcG9ydHM6W2hXLHdyLmZvckZlYXR1cmUobFMseFcsVUYpLHRvLmZvckZlYXR1cmUoW2ZXXSksUmkuZGVmaW5lR2xvYmFsU2V0dGluZyh0MGUpXX0pLG59KSgpLEtTPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1IKHtwcm92aWRlcnM6W3twcm92aWRlOndjLHVzZUNsYXNzOmRXfV0saW1wb3J0czpbTXUsemZdfSksbn0pKCksQ1c9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe3Byb3ZpZGVyczpbWFNdfSksbn0pKCksb289KCgpPT4oZnVuY3Rpb24obil7bi5ERUZBVUxUPSJkZWZhdWx0IixuLkFMUEhBQkVUSUNBTD0iYWxwaGFiZXRpY2FsIixuLkFTQ0VORElORz0iYXNjZW5kaW5nIixuLkRFU0NFTkRJTkc9ImRlc2NlbmRpbmciLG4uTkVBUkVTVD0ibmVhcmVzdCIsbi5ORUFSRVNUX1k9Im5lYXJlc3RfWSJ9KG9vfHwob289e30pKSxvbykpKCksSlM9Im1ldHJpY3MiLFZhPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5OT05FPTBdPSJOT05FIixuW24uT1ZFUlJJREVfQVNfRU5BQkxFRD0xXT0iT1ZFUlJJREVfQVNfRU5BQkxFRCIsbltuLk9WRVJSSURFX0FTX0RJU0FCTEVEPTJdPSJPVkVSUklERV9BU19ESVNBQkxFRCJ9KFZhfHwoVmE9e30pKSxWYSkpKCksJFM9e2NhcmRNaW5XaWR0aDpudWxsLHRvb2x0aXBTb3J0Om9vLkFMUEhBQkVUSUNBTCxpZ25vcmVPdXRsaWVyczohMCx4QXhpc1R5cGU6UGkuU1RFUCxoaWRlRW1wdHlDYXJkczohMCxzY2FsYXJTbW9vdGhpbmc6LjYsc2NhbGFyUGFydGl0aW9uTm9uTW9ub3RvbmljWDohMSxpbWFnZUJyaWdodG5lc3NJbk1pbGxpOjFlMyxpbWFnZUNvbnRyYXN0SW5NaWxsaToxZTMsaW1hZ2VTaG93QWN0dWFsU2l6ZTohMSxoaXN0b2dyYW1Nb2RlOlNyLk9GRlNFVCxzYXZpbmdQaW5zRW5hYmxlZDohMH0sbjBlPS4xO2Z1bmN0aW9uIGZkKG4sdCxlLGkpe3JldHVybiBuW3RdLmhhc093blByb3BlcnR5KGUpP2ZzKHQpP25bdF1bZV0uaGFzT3duUHJvcGVydHkoaSk/blt0XVtlXVtpXTpudWxsOm5bdF1bZV06bnVsbH1mdW5jdGlvbiBlMShuLHQsZSxpKXtpZihmcyh0KSl7bGV0IGE9ey4uLm5bdF19LHM9ZnVuY3Rpb24obix0LGUpe2xldCByPW4uaGFzT3duUHJvcGVydHkodCk/ey4uLm5bdF19Ont9LG89ci5oYXNPd25Qcm9wZXJ0eShlKTtyZXR1cm4gcltlXT1vP3suLi5yW2VdfTp7cnVuVG9TZXJpZXM6e30scnVuVG9Mb2FkU3RhdGU6e319LHJ9KGEsZSxpKTtyZXR1cm4gYVtlXT1zLGF9bGV0IHI9ey4uLm5bdF19LG89ci5oYXNPd25Qcm9wZXJ0eShlKTtyZXR1cm4gcltlXT1vP3suLi5yW2VdfTp7cnVuVG9TZXJpZXM6e30scnVuVG9Mb2FkU3RhdGU6e319LHJ9ZnVuY3Rpb24gakYobil7cmV0dXJuIEpTT04uc3RyaW5naWZ5KG4pfWZ1bmN0aW9uIHQxKG4sdCxlKXtsZXQgaT17Li4uZX07Zm9yKGxldCByIG9mIHQpaVtyXT1uO3JldHVybiBpfWZ1bmN0aW9uIFpmKG4sdCxlLGkpe2lmKGZzKHQpKXtsZXQgbz1uW3RdLnRhZ1J1blNhbXBsZWRJbmZvO3JldHVybiBvLmhhc093blByb3BlcnR5KGUpP09iamVjdC5rZXlzKG9bZV0pLmZpbHRlcihzPT5pPG9bZV1bc10ubWF4U2FtcGxlc1BlclN0ZXApOltdfWxldCByPW5bdF0udGFnVG9SdW5zO3JldHVybiByLmhhc093blByb3BlcnR5KGUpP3JbZV06W119ZnVuY3Rpb24gbzBlKG4sdCl7cmV0dXJuIG4ucGx1Z2luPT09dC5wbHVnaW4mJm4udGFnPT09dC50YWcmJm4uc2FtcGxlPT09dC5zYW1wbGUmJihuLnJ1bklkPT09dC5ydW5JZHx8IW4ucnVuSWQmJiF0LnJ1bklkKX1mdW5jdGlvbiBHRihuLHQsZSxpLHIsbyxhLHMpe2xldCBsPW5ldyBTZXQobiksYz1bXTtmb3IobGV0IHUgb2Ygbilmb3IobGV0IHAgb2YgdClpZihvMGUoZVtwXSx1KSl7Yy5wdXNoKHApLGwuZGVsZXRlKHUpO2JyZWFrfWlmKCFjLmxlbmd0aClyZXR1cm57dW5yZXNvbHZlZEltcG9ydGVkUGlubmVkQ2FyZHM6bixjYXJkTWV0YWRhdGFNYXA6ZSxjYXJkVG9QaW5uZWRDb3B5OmksY2FyZFRvUGlubmVkQ29weUNhY2hlOnIscGlubmVkQ2FyZFRvT3JpZ2luYWw6byxjYXJkU3RlcEluZGV4OmEsY2FyZFN0YXRlTWFwOnN9O2xldCBkPXtjYXJkVG9QaW5uZWRDb3B5OmksY2FyZFRvUGlubmVkQ29weUNhY2hlOnIscGlubmVkQ2FyZFRvT3JpZ2luYWw6byxjYXJkU3RlcEluZGV4OmEsY2FyZE1ldGFkYXRhTWFwOmUsY2FyZFN0YXRlTWFwOnN9O2ZvcihsZXQgdSBvZiBjKWQ9V0YodSxkLmNhcmRUb1Bpbm5lZENvcHksZC5jYXJkVG9QaW5uZWRDb3B5Q2FjaGUsZC5waW5uZWRDYXJkVG9PcmlnaW5hbCxkLmNhcmRTdGVwSW5kZXgsZC5jYXJkTWV0YWRhdGFNYXAscyk7cmV0dXJuey4uLmQsdW5yZXNvbHZlZEltcG9ydGVkUGlubmVkQ2FyZHM6Wy4uLmxdfX1mdW5jdGlvbiBXRihuLHQsZSxpLHIsbyxhKXtpZih0LmhhcyhuKSlyZXR1cm57Y2FyZFRvUGlubmVkQ29weTp0LGNhcmRUb1Bpbm5lZENvcHlDYWNoZTplLHBpbm5lZENhcmRUb09yaWdpbmFsOmksY2FyZFN0ZXBJbmRleDpyLGNhcmRNZXRhZGF0YU1hcDpvLGNhcmRTdGF0ZU1hcDphfTtsZXQgcz1uZXcgTWFwKHQpLGw9bmV3IE1hcChlKSxjPW5ldyBNYXAoaSksZD17Li4ucn0sdT17Li4ub30scD17Li4uYX0saD1mdW5jdGlvbihuKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoe2Jhc2VDYXJkSWQ6bn0pfShuKTtzLnNldChuLGgpLGwuc2V0KG4saCksYy5zZXQoaCxuKSxyLmhhc093blByb3BlcnR5KG4pJiYoZFtoXT1yW25dKTtsZXQgbT1vW25dO2lmKCFtKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHBpbiBhIGNhcmQgd2l0aG91dCBtZXRhZGF0YSIpO3JldHVybiB1W2hdPW0scFtuXSYmKHBbaF09cFtuXSkse2NhcmRUb1Bpbm5lZENvcHk6cyxjYXJkVG9QaW5uZWRDb3B5Q2FjaGU6bCxwaW5uZWRDYXJkVG9PcmlnaW5hbDpjLGNhcmRTdGVwSW5kZXg6ZCxjYXJkTWV0YWRhdGFNYXA6dSxjYXJkU3RhdGVNYXA6cH19dmFyIGEwZT17TUFYX1BJTl9DT1VOVDoxMH07ZnVuY3Rpb24gbjEobil7cmV0dXJuIG4ucGlubmVkQ2FyZFRvT3JpZ2luYWwuc2l6ZStuLnVucmVzb2x2ZWRJbXBvcnRlZFBpbm5lZENhcmRzLmxlbmd0aDxhMGUuTUFYX1BJTl9DT1VOVH1mdW5jdGlvbiBxRihuLHQsZSxpKXtsZXQgcj17Li4ubn07cmV0dXJuIE9iamVjdC5rZXlzKG4pLmZvckVhY2gobz0+e2lmKCFvLmluY2x1ZGVzKCcicGx1Z2luIjoiaW1hZ2VzIicpKXJldHVybjtsZXQgYT1YRihvLHQsZSkscz1udWxsO2lmKG51bGw9PT1pLmVuZClzPWZ1bmN0aW9uKG4sdCl7bGV0IGU9dC5pbmRleE9mKG4pO2lmKC0xIT09ZSlyZXR1cm57aW5kZXg6ZSxpc0Nsb3Nlc3Q6ITF9O2ZvcihsZXQgaT0wO2k8dC5sZW5ndGgtMTtpKyspe2xldCByPXRbaV0sbz10W2krMV0sYT0oby1yKSpuMGU7aWYobjxyKXJldHVybiBudWxsO2lmKCEobj5vKSl7aWYobi1yPD1hKXJldHVybntpbmRleDppLGlzQ2xvc2VzdDohMH07aWYoby1uPD1hKXJldHVybntpbmRleDppKzEsaXNDbG9zZXN0OiEwfX19cmV0dXJuIG51bGx9KGkuc3RhcnQuc3RlcCxhKTtlbHNle2xldCBjPWFbbltvXS5pbmRleF0sZD1mdW5jdGlvbihuLHQpe2lmKCFuKXJldHVybltdO2lmKG51bGw9PT1uLmVuZClyZXR1cm4tMSE9PXQuaW5kZXhPZihuLnN0YXJ0LnN0ZXApP1tuLnN0YXJ0LnN0ZXBdOltdO2xldCBlPVtdO2ZvcihsZXQgaSBvZiB0KWk+PW4uc3RhcnQuc3RlcCYmaTw9bi5lbmQuc3RlcCYmZS5wdXNoKGkpO3JldHVybiBlfShpLGEpO3M9ZnVuY3Rpb24obix0LGUpe2lmKDA9PT1uLmxlbmd0aClyZXR1cm4gbnVsbDtsZXQgaT1uWzBdLHI9bltuLmxlbmd0aC0xXTtyZXR1cm4gZT5yP3tpbmRleDp0LmluZGV4T2YociksaXNDbG9zZXN0OiExfTplPGk/e2luZGV4OnQuaW5kZXhPZihpKSxpc0Nsb3Nlc3Q6ITF9Om51bGx9KGQsYSxjKX1udWxsIT09cyYmKHJbb109cyl9KSxyfWZ1bmN0aW9uIFhGKG4sdCxlKXtpZighdC5oYXNPd25Qcm9wZXJ0eShuKSlyZXR1cm5bXTtsZXR7cGx1Z2luOmksdGFnOnIsc2FtcGxlOm8scnVuSWQ6YX09dFtuXTtpZihudWxsPT09YSlyZXR1cm5bXTtsZXQgcz1mZChlLGkscixvKTtyZXR1cm4gbnVsbCE9PXMmJnMucnVuVG9TZXJpZXMuaGFzT3duUHJvcGVydHkoYSk/cy5ydW5Ub1Nlcmllc1thXS5tYXAobD0+bC5zdGVwKTpbXX1mdW5jdGlvbiBZRihuKXtsZXR7ZGF0YU1pbk1heDp0LHVzZXJWaWV3Qm94OmV9PW4saT1lPy54O2lmKCFpKXJldHVybiB0O2xldCByPWlbMF08aVsxXT9pWzBdOmlbMV0sbz1yPT09aVswXT9pWzFdOmlbMF07cmV0dXJue21pblN0ZXA6TWF0aC5jZWlsKHIpLG1heFN0ZXA6TWF0aC5mbG9vcihvKX19ZnVuY3Rpb24gaTEobix0KXtzd2l0Y2gobil7Y2FzZSBWYS5PVkVSUklERV9BU19FTkFCTEVEOnJldHVybiEwO2Nhc2UgVmEuT1ZFUlJJREVfQVNfRElTQUJMRUQ6cmV0dXJuITE7ZGVmYXVsdDpyZXR1cm4gdH19ZnVuY3Rpb24gcjEobix0LGUsaSl7cmV0dXJuIGU/dDppMShuW2ldPy5yYW5nZVNlbGVjdGlvbk92ZXJyaWRlLHQpfWZ1bmN0aW9uIF9zKG4pe2xldCB0PW5ldyBNYXA7cmV0dXJuKC4uLmUpPT57bGV0IGk9SlNPTi5zdHJpbmdpZnkoZSk7aWYodC5oYXMoaSkpcmV0dXJuIHQuZ2V0KGkpO3tsZXQgcj1uKC4uLmUpO3JldHVybiB0LnNldChpLHIpLHJ9fX12YXIgSGk9TXIoSlMpLHh2PVcoSGksbj0+bi50YWdNZXRhZGF0YUxvYWRTdGF0ZSksRFc9VyhIaSxuPT5uLnRhZ01ldGFkYXRhKSx1MGU9VyhIaSxuPT5uLmNhcmRMaXN0KSxnZD1XKEhpLChuLHQpPT57aWYoIW4uY2FyZE1ldGFkYXRhTWFwLmhhc093blByb3BlcnR5KHQpKXJldHVybiBSZS5OT1RfTE9BREVEO2xldHtwbHVnaW46ZSx0YWc6aSxydW5JZDpyLHNhbXBsZTpvfT1uLmNhcmRNZXRhZGF0YU1hcFt0XSxhPWZkKG4udGltZVNlcmllc0RhdGEsZSxpLG8pO2lmKCFhKXJldHVybiBSZS5OT1RfTE9BREVEO2xldCBzPWEucnVuVG9Mb2FkU3RhdGU7aWYocilyZXR1cm4gcy5oYXNPd25Qcm9wZXJ0eShyKT9zW3JdOlJlLk5PVF9MT0FERUQ7bGV0IGw9WmYobi50YWdNZXRhZGF0YSxlLGksbyk7aWYoIWwubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGxvYWQgYSBjYXJkIHdob3NlIHRhZyBoYXMgbm8gcnVucyIpO3JldHVybiBsLmV2ZXJ5KGM9PnNbY109PT1SZS5MT0FERUQpP1JlLkxPQURFRDpsLnNvbWUoYz0+c1tjXT09PVJlLkxPQURJTkcpP1JlLkxPQURJTkc6UmUuTk9UX0xPQURFRH0pLHAwZT1fcyhuPT5XKHQ9PnQsdD0+e2xldHtwbHVnaW46ZSx0YWc6aSxzYW1wbGU6cn09bixvPWZkKHQudGltZVNlcmllc0RhdGEsZSxpLHIpO3JldHVybiBvP28ucnVuVG9TZXJpZXM6bnVsbH0pKSx3dT1XKEhpLChuLHQpPT5uLmNhcmRNZXRhZGF0YU1hcC5oYXNPd25Qcm9wZXJ0eSh0KT9wMGUobi5jYXJkTWV0YWRhdGFNYXBbdF0pKG4pOm51bGwpLFFGPVcoSGksbj0+bi5jYXJkTWV0YWRhdGFNYXApLEtzPVcoUUYsKG4sdCk9Pm4uaGFzT3duUHJvcGVydHkodCk/blt0XTpudWxsKSxKcz1XKEhpLG49Pm4uY2FyZFN0YXRlTWFwKSxoMGU9VyhIaSxuPT5uLnZpc2libGVDYXJkTWFwKSxJVz1XKGgwZSxuPT5uZXcgU2V0KG4udmFsdWVzKCkpKSxvMT1XKHUwZSxRRiwobix0KT0+bi5maWx0ZXIoZT0+dC5oYXNPd25Qcm9wZXJ0eShlKSkubWFwKGU9Pih7Y2FyZElkOmUsLi4udFtlXX0pKSksWkY9VyhIaSwobix0KT0+bi5jYXJkU3RlcEluZGV4Lmhhc093blByb3BlcnR5KHQpP24uY2FyZFN0ZXBJbmRleFt0XTpudWxsKSxBVz1XKEhpLChuLHQpPT5YRih0LG4uY2FyZE1ldGFkYXRhTWFwLG4udGltZVNlcmllc0RhdGEpKSxSVz1XKEhpLG49Pm4uY2FyZFRvUGlubmVkQ29weSksbTBlPVcoSGksbj0+bi5waW5uZWRDYXJkVG9PcmlnaW5hbCksS2Y9VyhSVyxRRiwobix0KT0+Wy4uLm4udmFsdWVzKCldLmZpbHRlcihlPT50Lmhhc093blByb3BlcnR5KGUpKS5tYXAoZT0+KHtjYXJkSWQ6ZSwuLi50W2VdfSkpKSxTdT1XKFJXLG0wZSwobix0LGUpPT5uLmhhcyhlKXx8dC5oYXMoZSkpLFBXPVcoSGksbj0+bi51bnJlc29sdmVkSW1wb3J0ZWRQaW5uZWRDYXJkcyksa1c9VyhIaSxuPT5uMShuKSksT1c9VyhIaSxuPT5uLmxhc3RQaW5uZWRDYXJkVGltZSksJHM9VyhIaSxuPT4oey4uLm4uc2V0dGluZ3MsLi4ubi5zZXR0aW5nT3ZlcnJpZGVzfSkpLEZXPVcoSGksbj0+bi5zZXR0aW5nT3ZlcnJpZGVzKSxKZj1XKCRzLG49Pm4uY2FyZE1pbldpZHRoKSx4aD1XKCRzLG49Pm4udG9vbHRpcFNvcnQpLENoPVcoJHMsbj0+bi5pZ25vcmVPdXRsaWVycyksT2w9VygkcyxuPT5uLnhBeGlzVHlwZSksYTE9VygkcyxuPT5uLmhpc3RvZ3JhbU1vZGUpLE5XPVcoJHMsbj0+bi5oaWRlRW1wdHlDYXJkcyksX2Q9VygkcyxuPT5uLnNjYWxhclNtb290aGluZyksczE9VygkcyxuPT5uLnNjYWxhclBhcnRpdGlvbk5vbk1vbm90b25pY1gpLGwxPVcoJHMsbj0+bi5pbWFnZUJyaWdodG5lc3NJbk1pbGxpKSxjMT1XKCRzLG49Pm4uaW1hZ2VDb250cmFzdEluTWlsbGkpLGQxPVcoJHMsbj0+bi5pbWFnZVNob3dBY3R1YWxTaXplKSxiZD1XKCRzLG49Pm4uc2F2aW5nUGluc0VuYWJsZWQpLEZsPVcoSGksbj0+bi50YWdGaWx0ZXIpLHUxPVcoSGksKG4sdCk9PkJvb2xlYW4obi50YWdHcm91cEV4cGFuZGVkLmdldCh0KSkpLEV1PVcoSGksbj0+bi5saW5rZWRUaW1lRW5hYmxlZCksQ3Y9VyhIaSxuPT5uLnN0ZXBTZWxlY3RvckVuYWJsZWQpLFR1PVcoSGksbj0+bi5yYW5nZVNlbGVjdGlvbkVuYWJsZWQpLEtGPVcoSGksbj0+e2xldHttaW46dCxtYXg6ZX09bi5zdGVwTWluTWF4O3JldHVybnttaW46dD09PTEvMD8wOnQsbWF4OmU9PT0tMS8wPzFlMzplfX0pLEpGPVcoSGksS0YsKG4sdCk9Pm4ubGlua2VkVGltZVNlbGVjdGlvbj9uLmxpbmtlZFRpbWVTZWxlY3Rpb246e3N0YXJ0OntzdGVwOnQubWF4fSxlbmQ6bnVsbH0pLER1PVcoSGksSkYsKG4sdCk9Pm4ubGlua2VkVGltZUVuYWJsZWQ/dDpudWxsKSxTYz1XKEhpLG49Pm4uZmlsdGVyZWRQbHVnaW5UeXBlcykscDE9VyhIaSxuPT5uLmlzU2V0dGluZ3NQYW5lT3BlbiksaDE9VyhIaSxuPT5uLmlzU2xpZGVvdXRNZW51T3BlbiksTFc9VyhIaSxuPT5uLnRhYmxlRWRpdG9yU2VsZWN0ZWRUYWIpLG0xPV9zKG49PlcoSnMsVHUsRXUsKHQsZSxpKT0+cjEodCxlLGksbikpKSxCVz1XKEpzLChuLHQpPT57aWYoblt0XSlyZXR1cm4gWUYoblt0XSl9KSxWVz1XKEpzLChuLHQpPT5uW3RdPy5kYXRhTWluTWF4KSwkRj1XKEpzLChuLHQpPT5uW3RdPy51c2VyVmlld0JveD8/bnVsbCksSFc9VyhKcyxDdixUdSxFdSxEdSwobix0LGUsaSxyLG8pPT57bGV0IGE9bltvXTtpZighYSlyZXR1cm47bGV0IHM9WUYoYSk7aWYoIXMpcmV0dXJuO2lmKGkmJnIpcmV0dXJuIEZGKHIscyxlKTtpZighaTEoYS5zdGVwU2VsZWN0aW9uT3ZlcnJpZGUsdCkpcmV0dXJuO2xldCBsPWkxKGEucmFuZ2VTZWxlY3Rpb25PdmVycmlkZSxlKSxjPWEudGltZVNlbGVjdGlvbjtyZXR1cm4gY3x8KGM9e3N0YXJ0OntzdGVwOnMubWluU3RlcH0sZW5kOntzdGVwOnMubWF4U3RlcH19KSxsP2MuZW5kfHwoYz17c3RhcnQ6e3N0ZXA6cy5taW5TdGVwfSxlbmQ6Yy5zdGFydH0pOmM9e3N0YXJ0OmMuZW5kPz9jLnN0YXJ0LGVuZDpudWxsfSxGRihjLHMsbCl9KSxNdj1XKEhpLG49Pm4uc2luZ2xlU2VsZWN0aW9uSGVhZGVycyksd3Y9VyhIaSxuPT5uLnJhbmdlU2VsZWN0aW9uSGVhZGVycyksZTI9X3Mobj0+VyhtMShuKSxNdix3diwodCxlLGkpPT50P2k6ZSkpLHpXPV9zKG49PlcoZTIobiksbWQsKHQsZSk9PmtsLmdyb3VwQ29sdW1ucyhbLi4udCwuLi5lXSkpKSxqVz1Ncigibm90aWZpY2F0aW9uIiksWW49KFcoalcsbj0+bi5ub3RpZmljYXRpb25zKSxXKGpXLG49Pm4ubGFzdFJlYWRUaW1lc3RhbXBJbk1zPz8tMSksKCgpPT4oZnVuY3Rpb24obil7bltuLlJVTj0wXT0iUlVOIixuW24uRVhQRVJJTUVOVD0xXT0iRVhQRVJJTUVOVCIsbltuLlJFR0VYPTJdPSJSRUdFWCIsbltuLlJFR0VYX0JZX0VYUD0zXT0iUkVHRVhfQllfRVhQIn0oWW58fChZbj17fSkpLFluKSkoKSk7ZnVuY3Rpb24gRXYobix0LGUsaSl7bGV0IHMscj17fSxvPVtdLGE9e21hdGNoZXM6cixub25NYXRjaGVzOm99O3N3aXRjaChuLmtleSl7Y2FzZSBZbi5SVU46Zm9yKGxldCBsIG9mIHQpcltsLmlkXT1bbF07YnJlYWs7Y2FzZSBZbi5FWFBFUklNRU5UOmZvcihsZXQgbCBvZiB0KXtsZXQgYz1lW2wuaWRdLGQ9cltjXXx8W107ZC5wdXNoKGwpLHJbY109ZH1icmVhaztjYXNlIFluLlJFR0VYOmlmKCFuLnJlZ2V4U3RyaW5nKWJyZWFrO3RyeXtzPW5ldyBSZWdFeHAobi5yZWdleFN0cmluZyl9Y2F0Y2h7YnJlYWt9Zm9yKGxldCBsIG9mIHQpe2xldCBjPWwubmFtZS5tYXRjaChzKTtpZihjKXtsZXQgdT1jLmxlbmd0aD4xP0pTT04uc3RyaW5naWZ5KGMuc2xpY2UoMSkpOiJwc2V1ZG9fZ3JvdXAiLHA9clt1XXx8W107cC5wdXNoKGwpLHJbdV09cH1lbHNlIG8ucHVzaChsKX1icmVhaztjYXNlIFluLlJFR0VYX0JZX0VYUDppZighbi5yZWdleFN0cmluZ3x8IWl8fDA9PT1PYmplY3Qua2V5cyhpKS5sZW5ndGgpYnJlYWs7dHJ5e3M9bmV3IFJlZ0V4cChuLnJlZ2V4U3RyaW5nKX1jYXRjaHticmVha31mb3IobGV0IGwgb2YgdCl7bGV0IGQ9aVtlW2wuaWRdXS5tYXRjaChzKTtpZihkKXtsZXQgcD1kLmxlbmd0aD4xP0pTT04uc3RyaW5naWZ5KGQuc2xpY2UoMSkpOiJwc2V1ZG9fZ3JvdXAiLGg9cltwXXx8W107aC5wdXNoKGwpLHJbcF09aH1lbHNlIG8ucHVzaChsKX19cmV0dXJuIGF9ZnVuY3Rpb24gZzEobix0KXtzd2l0Y2gobil7Y2FzZSBZbi5SRUdFWDpjYXNlIFluLlJFR0VYX0JZX0VYUDpyZXR1cm57a2V5Om4scmVnZXhTdHJpbmc6dD8/IiJ9O2RlZmF1bHQ6cmV0dXJue2tleTpufX19dmFyIEdXPU1yKCJydW5zIiksZmE9VyhHVyxuPT5uLmRhdGEpLFdXPVcoZmEsbj0+bi5ydW5JZFRvRXhwSWQpLF8xPVcoZmEsKG4sdCk9Pm4ucnVuSWRUb0V4cElkW3QucnVuSWRdPz9udWxsKSxiMT1XKGZhLChuLHQpPT5uLnJ1bk1ldGFkYXRhW3QucnVuSWRdPz9udWxsKSxJdT1XKGZhLChuLHQpPT4obi5ydW5JZHNbdC5leHBlcmltZW50SWRdfHxbXSkuZmlsdGVyKGk9PkJvb2xlYW4obi5ydW5NZXRhZGF0YVtpXSkpLm1hcChpPT5uLnJ1bk1ldGFkYXRhW2ldKSkscVc9VyhBRixvcixmYSwobix0LGUpPT57aWYoIXQpcmV0dXJue307bGV0IGk9W107Zm9yKGxldCBzIG9mIHQpaS5wdXNoKC4uLmUucnVuSWRzW3NdfHxbXSk7bGV0IHI9e307Zm9yKGxldCBzIG9mIG4pe2xldCBsPU9iamVjdC5lbnRyaWVzKHMuaHBhcmFtcykubWFwKGM9PntsZXRbZCx1XT1jO3JldHVybntuYW1lOmQsdmFsdWU6dX19KTtmb3IobGV0IGMgb2Ygcy5zZXNzaW9ucylyW2MubmFtZV09bH1sZXQgbz1PYmplY3Qua2V5cyhyKS5zb3J0KChzLGwpPT5sLmxlbmd0aC1zLmxlbmd0aCksYT17fTtmb3IobGV0IHMgb2YgaSlmb3IobGV0IGwgb2YgbylpZihzLnN0YXJ0c1dpdGgobCkpe2Fbc109e2hwYXJhbXM6cltsXSxtZXRyaWNzOltdfTticmVha31yZXR1cm4gYX0pLFhXPVcocVcsbj0+e2xldCB0PXt9O2ZvcihsZXRbZSx7aHBhcmFtczppfV1vZiBPYmplY3QuZW50cmllcyhuKSl0W2VdPW5ldyBNYXAoaS5tYXAoKHtuYW1lOnIsdmFsdWU6b30pPT5bcixvXSkpO3JldHVybiB0fSksdjE9VyhmYSxvcixxVywobix0LGUpPT50P3QubWFwKGk9PihuLnJ1bklkc1tpXXx8W10pLmZpbHRlcihyPT5Cb29sZWFuKG4ucnVuTWV0YWRhdGFbcl0pKS5tYXAocj0+e2xldCBvPXsuLi5uLnJ1bk1ldGFkYXRhW3JdLGV4cGVyaW1lbnRJZDppfTtyZXR1cm4gby5ocGFyYW1zPWVbcl0/LmhwYXJhbXM/P251bGwsby5tZXRyaWNzPWVbcl0/Lm1ldHJpY3M/P251bGwsb30pKS5mbGF0KCk6W10pLFlXPVcoZmEsKG4sdCk9Pm4ucnVuSWRzW3QuZXhwZXJpbWVudElkXT8/W10pLFFXPVcoZmEsbj0+bmV3IE1hcChPYmplY3QuZW50cmllcyhuLnJ1bk1ldGFkYXRhKSkpLFR2PVcoZmEsKG4sdCk9Pm4ucnVuc0xvYWRTdGF0ZVt0LmV4cGVyaW1lbnRJZF18fHtsYXN0TG9hZGVkVGltZUluTXM6bnVsbCxzdGF0ZTpSZS5OT1RfTE9BREVEfSksdDI9VyhmYSxuPT5udWxsIT09bi51c2VyU2V0R3JvdXBCeUtleT9nMShuLnVzZXJTZXRHcm91cEJ5S2V5LG4uY29sb3JHcm91cFJlZ2V4U3RyaW5nKTpudWxsKSxEdj1XKHQyLGZhLChuLHQpPT5uPz90LmluaXRpYWxHcm91cEJ5KSxBdT1XKGZhLG49Pm4ucmVnZXhGaWx0ZXIpLG4yPVcoR1csbj0+bi51aSksWlc9VyhuMixuPT5uLnNlbGVjdGlvblN0YXRlKSxLVz1XKGZhLG49Pm4ucnVuQ29sb3JPdmVycmlkZUZvckdyb3VwQnkpLEpXPVcoZmEsbj0+bi5kZWZhdWx0UnVuQ29sb3JJZEZvckdyb3VwQnkpLHkxPVcoZmEsbj0+bi5jb2xvckdyb3VwUmVnZXhTdHJpbmcpLGYwZT1XKG4yLG49Pm4ucnVuc1RhYmxlSGVhZGVycyksJFc9VyhuMixuPT5uLnNvcnRpbmdJbmZvKSxlNz1XKGYwZSxtZCwobix0KT0+a2wuZ3JvdXBDb2x1bW5zKFsuLi5uLC4uLnRdKSkseDE9ZmUoIltTZXR0aW5nc10gUmVsb2FkIEVuYWJsZSBUb2dnbGVkIiksQzE9ZmUoIltTZXR0aW5nc10gUmVsb2FkIFBlcmlvZCBDaGFuZ2UiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxNMT1mZSgiW1NldHRpbmdzXSBQYWdlIFNpemUgQ2hhbmdlIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksSGE9e307TkEoSGEse2dldENvbG9yUGFsZXR0ZTooKT0+ZzBlLGdldFBhZ2VTaXplOigpPT5NaCxnZXRSZWxvYWRFbmFibGVkOigpPT5BdixnZXRSZWxvYWRQZXJpb2RJbk1zOigpPT5SdixnZXRTZXR0aW5nc0xvYWRTdGF0ZTooKT0+aTJ9KTt2YXIgdzE9InNldHRpbmdzIixpNz17c3RhdGU6UmUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpLHNldHRpbmdzOntyZWxvYWRQZXJpb2RJbk1zOjNlNCxyZWxvYWRFbmFibGVkOiExLHBhZ2VTaXplOjEyLGNvbG9yUGFsZXR0ZTp7aWQ6ImRlZmF1bHQiLG5hbWU6IkRlZmFsdCIsY29sb3JzOlt7bmFtZToiU2xhdGUiLGxpZ2h0SGV4OiIjNDI1MDY2IixkYXJrSGV4OiIjOGU5OGEzIn0se25hbWU6IkN5YW4iLGxpZ2h0SGV4OiIjMTJiNWNiIixkYXJrSGV4OiIjMTJiNWNiIn0se25hbWU6IlBpbmsiLGxpZ2h0SGV4OiIjZTUyNTkyIixkYXJrSGV4OiIjZTUyNTkyIn0se25hbWU6IlllbGxvdyIsbGlnaHRIZXg6IiNmOWFiMDAiLGRhcmtIZXg6IiNmOWFiMDAifSx7bmFtZToiUHVycGxlIixsaWdodEhleDoiIzkzMzRlNiIsZGFya0hleDoiIzkzMzRlNiJ9LHtuYW1lOiJMaWdodCBHcmVlbiIsbGlnaHRIZXg6IiM3Y2IzNDIiLGRhcmtIZXg6IiM3Y2IzNDIifSx7bmFtZToiT3JhbmdlIixsaWdodEhleDoiI2U4NzEwYSIsZGFya0hleDoiI2U4NzEwYSJ9XSxpbmFjdGl2ZTp7bmFtZToiR3JheSIsbGlnaHRIZXg6IiNlMGUwZTAiLGRhcmtIZXg6IiMzYjNiM2IifX19fSxJdj1Ncih3MSksaTI9VyhJdixuPT5uLnN0YXRlKSxBdj1XKEl2LG49Pm4uc2V0dGluZ3MucmVsb2FkRW5hYmxlZCksUnY9VyhJdixuPT5uLnNldHRpbmdzLnJlbG9hZFBlcmlvZEluTXMpLE1oPVcoSXYsbj0+bi5zZXR0aW5ncy5wYWdlU2l6ZSksZzBlPVcoSXYsbj0+bi5zZXR0aW5ncy5jb2xvclBhbGV0dGUpO2Z1bmN0aW9uIFMxKG4sdCxlKXtpZighdClyZXR1cm4hMDtsZXQgaTt0cnl7aT1uZXcgUmVnRXhwKHQsImkiKX1jYXRjaHtyZXR1cm4hMX1sZXQgcj1bbi5ydW5OYW1lXTtyZXR1cm4gZSYmci5wdXNoKG4uZXhwZXJpbWVudEFsaWFzLmFsaWFzVGV4dCxgJHtuLmV4cGVyaW1lbnRBbGlhcy5hbGlhc1RleHR9LyR7bi5ydW5OYW1lfWApLHIuc29tZShvPT5pLnRlc3QobykpfXZhciBfMGU9VyhvcixaVyxXVywobix0LGUpPT57aWYoIW4pcmV0dXJuIG5ldyBNYXA7bGV0IGk9bmV3IE1hcDtmb3IobGV0W3Isb11vZiB0LmVudHJpZXMoKSl7bGV0IGE9ZVtyXTthJiZuLmluZGV4T2YoYSk+PTAmJmkuc2V0KHIsbyl9cmV0dXJuIGl9KSxiMGU9Vyhxcyx2MSwobix0KT0+e2xldCBlPW5ldyBNYXA7Zm9yKGxldCBpIG9mIHQpZS5zZXQoaS5pZCx7cnVuTmFtZTppLm5hbWUsZXhwZXJpbWVudEFsaWFzOm5baS5leHBlcmltZW50SWRdfSk7cmV0dXJuIGV9KSxSdT1XKG9yLF8wZSxBdSxiMGUsV3MsKG4sdCxlLGkscik9PntpZighbilyZXR1cm4gbnVsbDtsZXQgbz1yPT09Q24uQ09NUEFSRV9FWFBFUklNRU5ULGE9bmV3IE1hcDtmb3IobGV0W3MsbF1vZiB0LmVudHJpZXMoKSl7bGV0IGM9aS5nZXQocyk7YS5zZXQocyxTMShjLGUsbykmJmwpfXJldHVybiBhfSksUHU9VyhIYS5nZXRDb2xvclBhbGV0dGUsSlcsS1csUGwsKG4sdCxlLGkpPT57bGV0IHI9e307cmV0dXJuIHQuZm9yRWFjaCgobyxhKT0+e2xldCBzPWk/bi5pbmFjdGl2ZS5kYXJrSGV4Om4uaW5hY3RpdmUubGlnaHRIZXg7aWYoZS5oYXMoYSkpcz1lLmdldChhKTtlbHNlIGlmKG8+PTApe2xldCBsPW4uY29sb3JzW28lbi5jb2xvcnMubGVuZ3RoXTtzPWk/bC5kYXJrSGV4OmwubGlnaHRIZXh9clthXT1zfSkscn0pLHI3PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuYWN0aW9ucyQ9ZSx0aGlzLnN0b3JlPWksdGhpcy5ydW5zRGF0YVNvdXJjZT1yLHRoaXMuZXhwZXJpbWVudHNXaXRoU3RhbGVSdW5zT25Sb3V0ZUNoYW5nZSQ9dGhpcy5hY3Rpb25zJC5waXBlKFpuKE5hKSxJdCh0aGlzLnN0b3JlLnNlbGVjdChIbykpLHJpKChbLG9dLFssYV0pPT5WbyhvLGEpKSxJdCh0aGlzLnN0b3JlLnNlbGVjdChvcikpLE9lKChbLG9dKT0+ISFvKSxxKChbLG9dKT0+bykseG4obz0+dGhpcy5nZXRFeHBlcmltZW50c1dpdGhMb2FkU3RhdGUobyxhPT5hPT09UmUuRkFJTEVEfHxhPT09UmUuTk9UX0xPQURFRCkucGlwZShxKGE9Pih7ZXhwZXJpbWVudElkczpvLGV4cGVyaW1lbnRJZHNUb0JlRmV0Y2hlZDphfSkpKSkpLHRoaXMuZXhwZXJpbWVudHNXaXRoU3RhbGVSdW5zT25SZWxvYWQkPXRoaXMuYWN0aW9ucyQucGlwZShabihtYSxCYSksSXQodGhpcy5zdG9yZS5zZWxlY3Qob3IpKSxPZSgoWyxvXSk9PiEhbykscSgoWyxvXSk9Pm8pLHhuKG89PnRoaXMuZ2V0RXhwZXJpbWVudHNXaXRoTG9hZFN0YXRlKG8sYT0+YSE9PVJlLkxPQURJTkcpLnBpcGUocShhPT4oe2V4cGVyaW1lbnRJZHM6byxleHBlcmltZW50SWRzVG9CZUZldGNoZWQ6YX0pKSkpKSx0aGlzLmxvYWRSdW5zT25OYXZpZ2F0aW9uT3JSZWxvYWQkPV9yKCgpPT50bih0aGlzLmV4cGVyaW1lbnRzV2l0aFN0YWxlUnVuc09uUm91dGVDaGFuZ2UkLHRoaXMuZXhwZXJpbWVudHNXaXRoU3RhbGVSdW5zT25SZWxvYWQkKS5waXBlKEl0KHRoaXMuc3RvcmUuc2VsZWN0KEhvKSksT2UoKFssb10pPT5udWxsIT09byYmby5yb3V0ZUtpbmQhPT1Dbi5DQVJEKSx4bigoW3tleHBlcmltZW50SWRzOm8sZXhwZXJpbWVudElkc1RvQmVGZXRjaGVkOmF9XSk9PnRoaXMuZmV0Y2hBbGxSdW5zTGlzdChvLGEpKSkse2Rpc3BhdGNoOiExfSksdGhpcy5yZW1vdmVIcGFyYW1GaWx0ZXJXaGVuQ29sdW1uSXNSZW1vdmVkJD1fcigoKT0+dGhpcy5hY3Rpb25zJC5waXBlKFpuKEJTKSxEdCgoe2hlYWRlcjpvfSk9PntvLnR5cGUhPT1ndC5IUEFSQU0/by50eXBlPT09Z3QuTUVUUklDJiZ0aGlzLnN0b3JlLmRpc3BhdGNoKGZ2KHtuYW1lOm8ubmFtZX0pKTp0aGlzLnN0b3JlLmRpc3BhdGNoKG12KHtuYW1lOm8ubmFtZX0pKX0pKSx7ZGlzcGF0Y2g6ITF9KX1nZXRSdW5zTGlzdExvYWRTdGF0ZShlKXtyZXR1cm4gdGhpcy5zdG9yZS5zZWxlY3QoVHYse2V4cGVyaW1lbnRJZDplfSkucGlwZShMdCgxKSl9Z2V0RXhwZXJpbWVudHNXaXRoTG9hZFN0YXRlKGUsaSl7cmV0dXJuIENvKGUubWFwKHI9PnRoaXMuZ2V0UnVuc0xpc3RMb2FkU3RhdGUocikpKS5waXBlKHEocj0+ZS5maWx0ZXIoKG8sYSk9PmkoclthXS5zdGF0ZSkpKSl9ZmV0Y2hBbGxSdW5zTGlzdChlLGkpe3JldHVybiAkdCh7ZXhwZXJpbWVudElkczplLGV4cGVyaW1lbnRJZHNUb0JlRmV0Y2hlZDppfSkucGlwZShEdCgoKT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goUFMoe2V4cGVyaW1lbnRJZHM6ZSxyZXF1ZXN0ZWRFeHBlcmltZW50SWRzOml9KSl9KSx4bigoKT0+e2xldCByPW5ldyBTZXQoaSk7cmV0dXJuIENvKGUubWFwKGE9PnIuaGFzKGEpP3RoaXMuZmV0Y2hSdW5zRm9yRXhwZXJpbWVudChhKTp0aGlzLm1heWJlV2FpdEZvclJ1bnNBbmRHZXRSdW5zKGEpKSl9KSxxKHI9PntsZXQgbz17fSxhPVtdO2ZvcihsZXQgcyBvZiByKWEucHVzaCguLi5zLnJ1bnMpLHMuZnJvbVJlbW90ZSYmKG9bcy5leHBlcmltZW50SWRdPXtydW5zOnMucnVuc30pO3JldHVybntuZXdSdW5zOm8scnVuc0ZvckFsbEV4cGVyaW1lbnRzOmF9fSksSXQodGhpcy5zdG9yZS5zZWxlY3QoeXUpKSxEdCgoW3Isb10pPT57bGV0e25ld1J1bnM6YSxydW5zRm9yQWxsRXhwZXJpbWVudHM6c309cjt0aGlzLnN0b3JlLmRpc3BhdGNoKFdmKHtleHBlcmltZW50SWRzOmUsbmV3UnVuczphLHJ1bnNGb3JBbGxFeHBlcmltZW50czpzLGV4cE5hbWVCeUV4cElkOm99KSl9KSxjbyhyPT4odGhpcy5zdG9yZS5kaXNwYXRjaChxZih7ZXhwZXJpbWVudElkczplLHJlcXVlc3RlZEV4cGVyaW1lbnRJZHM6aX0pKSwkdChudWxsKSkpLHEoKCk9Pm51bGwpKX1tYXliZVdhaXRGb3JSdW5zQW5kR2V0UnVucyhlKXtyZXR1cm4gdGhpcy5zdG9yZS5zZWxlY3QoVHYse2V4cGVyaW1lbnRJZDplfSkucGlwZShPZShpPT5pLnN0YXRlIT09UmUuTE9BRElORyksTHQoMSkseG4oaT0+aS5zdGF0ZT09PVJlLkZBSUxFRD9fbChuZXcgRXJyb3IoIlBlbmRpbmcgcmVxdWVzdCBmYWlsZWQiKSk6JHQoaSkpLEl0KHRoaXMuc3RvcmUuc2VsZWN0KEl1LHtleHBlcmltZW50SWQ6ZX0pKSxxKChbLGldKT0+KHtmcm9tUmVtb3RlOiExLGV4cGVyaW1lbnRJZDplLHJ1bnM6aX0pKSl9ZmV0Y2hSdW5zRm9yRXhwZXJpbWVudChlKXtyZXR1cm4gdGhpcy5ydW5zRGF0YVNvdXJjZS5mZXRjaFJ1bnMoZSkucGlwZShxKGk9Pih7ZnJvbVJlbW90ZTohMCxleHBlcmltZW50SWQ6ZSxydW5zOml9KSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKEVvKSxPKEllKSxPKEVTKSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCkse2luaXRpYWxTdGF0ZTp2MGUscmVkdWNlcnM6eTBlfT1faCh7cnVuQ29sb3JPdmVycmlkZUZvckdyb3VwQnk6bmV3IE1hcCxkZWZhdWx0UnVuQ29sb3JJZEZvckdyb3VwQnk6bmV3IE1hcCxncm91cEtleVRvQ29sb3JJZDpuZXcgTWFwLGluaXRpYWxHcm91cEJ5OntrZXk6WW4uUlVOfSx1c2VyU2V0R3JvdXBCeUtleTpudWxsLGNvbG9yR3JvdXBSZWdleFN0cmluZzoiIixyZWdleEZpbHRlcjoiIn0se3J1bklkczp7fSxydW5JZFRvRXhwSWQ6e30scnVuTWV0YWRhdGE6e30scnVuc0xvYWRTdGF0ZTp7fX0sKG4sdCxlKT0+Vm8odCxlKT9uOnsuLi5uLGluaXRpYWxHcm91cEJ5OntrZXk6ZS5yb3V0ZUtpbmQ9PT1Dbi5DT01QQVJFX0VYUEVSSU1FTlQ/WW4uRVhQRVJJTUVOVDpZbi5SVU59fSkseDBlPWdyKHYwZSx5ZShmdSwobix7cm91dGVLaW5kOnQscGFydGlhbFN0YXRlOmV9KT0+e2lmKHQhPT1Dbi5DT01QQVJFX0VYUEVSSU1FTlQmJnQhPT1Dbi5FWFBFUklNRU5UKXJldHVybiBuO2xldCByPWUucnVucy5ncm91cEJ5LG89ZS5ydW5zLnJlZ2V4RmlsdGVyPz8iIjtpZighciYmIW8pcmV0dXJuIG47bGV0e2NvbG9yR3JvdXBSZWdleFN0cmluZzphLHVzZXJTZXRHcm91cEJ5S2V5OnN9PW47cmV0dXJuIHImJihhPXIua2V5PT09WW4uUkVHRVh8fHIua2V5PT09WW4uUkVHRVhfQllfRVhQP3IucmVnZXhTdHJpbmc6bi5jb2xvckdyb3VwUmVnZXhTdHJpbmcscz1yLmtleT8/bnVsbCksey4uLm4sY29sb3JHcm91cFJlZ2V4U3RyaW5nOmEscmVnZXhGaWx0ZXI6byx1c2VyU2V0R3JvdXBCeUtleTpzfX0pLHllKFBTLChuLHQpPT57bGV0IGU9ey4uLm4ucnVuc0xvYWRTdGF0ZX07Zm9yKGxldCBpIG9mIHQucmVxdWVzdGVkRXhwZXJpbWVudElkcyllW2ldPWVbaV0/ey4uLmVbaV0sc3RhdGU6UmUuTE9BRElOR306e2xhc3RMb2FkZWRUaW1lSW5NczpudWxsLHN0YXRlOlJlLkxPQURJTkd9O3JldHVybnsuLi5uLHJ1bnNMb2FkU3RhdGU6ZX19KSx5ZShXZiwobix0KT0+e2xldCBlPXsuLi5uLnJ1bklkc30saT17Li4ubi5ydW5NZXRhZGF0YX0scj17Li4ubi5ydW5JZFRvRXhwSWR9LG89ey4uLm4ucnVuc0xvYWRTdGF0ZX07Zm9yKGxldCBhIG9mIE9iamVjdC5rZXlzKHQubmV3UnVucykpe2xldHtydW5zOnN9PXQubmV3UnVuc1thXTtlW2FdPXMubWFwKCh7aWQ6bH0pPT5sKSxvW2FdPXsuLi5vW2FdLGxhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpLHN0YXRlOlJlLkxPQURFRH07Zm9yKGxldCBsIG9mIHMpaVtsLmlkXT17Li4ubCxocGFyYW1zOm51bGwsbWV0cmljczpudWxsfSxyW2wuaWRdPWF9cmV0dXJuey4uLm4scnVuSWRzOmUscnVuSWRUb0V4cElkOnIscnVuTWV0YWRhdGE6aSxydW5zTG9hZFN0YXRlOm99fSkseWUocWYsKG4sdCk9PntsZXQgZT17Li4ubi5ydW5zTG9hZFN0YXRlfTtmb3IobGV0IGkgb2YgdC5yZXF1ZXN0ZWRFeHBlcmltZW50SWRzKWVbaV09ZVtpXT97Li4uZVtpXSxzdGF0ZTpSZS5GQUlMRUR9OntsYXN0TG9hZGVkVGltZUluTXM6bnVsbCxzdGF0ZTpSZS5GQUlMRUR9O3JldHVybnsuLi5uLHJ1bnNMb2FkU3RhdGU6ZX19KSx5ZShXZiwobix7cnVuc0ZvckFsbEV4cGVyaW1lbnRzOnQsZXhwTmFtZUJ5RXhwSWQ6ZX0pPT57bGV0IGk9bmV3IE1hcChuLmdyb3VwS2V5VG9Db2xvcklkKSxyPW5ldyBNYXAobi5kZWZhdWx0UnVuQ29sb3JJZEZvckdyb3VwQnkpLG89bi5pbml0aWFsR3JvdXBCeTtudWxsIT09bi51c2VyU2V0R3JvdXBCeUtleSYmKG89ZzEobi51c2VyU2V0R3JvdXBCeUtleSxuLmNvbG9yR3JvdXBSZWdleFN0cmluZykpO2xldCBhPUV2KG8sdCxuLnJ1bklkVG9FeHBJZCxlKTtPYmplY3QuZW50cmllcyhhLm1hdGNoZXMpLmZvckVhY2goKFtzLGxdKT0+e2xldCBjPWkuZ2V0KHMpPz9pLnNpemU7aS5zZXQocyxjKTtmb3IobGV0IGQgb2YgbClyLnNldChkLmlkLGMpfSk7Zm9yKGxldCBzIG9mIGEubm9uTWF0Y2hlcylyLnNldChzLmlkLC0xKTtyZXR1cm57Li4ubixkZWZhdWx0UnVuQ29sb3JJZEZvckdyb3VwQnk6cixncm91cEtleVRvQ29sb3JJZDppfX0pLHllKFhmLChuLHtleHBlcmltZW50SWRzOnQsZ3JvdXBCeTplLGV4cE5hbWVCeUV4cElkOml9KT0+e2xldCByPW5ldyBNYXAsbz1uZXcgTWFwKG4uZGVmYXVsdFJ1bkNvbG9ySWRGb3JHcm91cEJ5KSxzPUV2KGUsdC5mbGF0TWFwKGM9Pm4ucnVuSWRzW2NdKS5tYXAoYz0+bi5ydW5NZXRhZGF0YVtjXSksbi5ydW5JZFRvRXhwSWQsaSk7T2JqZWN0LmVudHJpZXMocy5tYXRjaGVzKS5mb3JFYWNoKChbYyxkXSk9PntsZXQgdT1yLmdldChjKT8/ci5zaXplO3Iuc2V0KGMsdSk7Zm9yKGxldCBwIG9mIGQpby5zZXQocC5pZCx1KX0pO2ZvcihsZXQgYyBvZiBzLm5vbk1hdGNoZXMpby5zZXQoYy5pZCwtMSk7bGV0IGw9ZS5rZXk9PT1Zbi5SRUdFWHx8ZS5rZXk9PT1Zbi5SRUdFWF9CWV9FWFA/ZS5yZWdleFN0cmluZzpuLmNvbG9yR3JvdXBSZWdleFN0cmluZztyZXR1cm57Li4ubixjb2xvckdyb3VwUmVnZXhTdHJpbmc6bCx1c2VyU2V0R3JvdXBCeUtleTplLmtleSxkZWZhdWx0UnVuQ29sb3JJZEZvckdyb3VwQnk6byxncm91cEtleVRvQ29sb3JJZDpyLHJ1bkNvbG9yT3ZlcnJpZGVGb3JHcm91cEJ5Om5ldyBNYXB9fSkseWUoTFMsKG4se3J1bklkOnQsbmV3Q29sb3I6ZX0pPT57bGV0IGk9bmV3IE1hcChuLnJ1bkNvbG9yT3ZlcnJpZGVGb3JHcm91cEJ5KTtyZXR1cm4gaS5zZXQodCxlKSx7Li4ubixydW5Db2xvck92ZXJyaWRlRm9yR3JvdXBCeTppfX0pLHllKE5TLChuLHQpPT4oey4uLm4scmVnZXhGaWx0ZXI6dC5yZWdleFN0cmluZ30pKSksQzBlPWJoKHgwZSx5MGUpLHtpbml0aWFsU3RhdGU6TTBlLHJlZHVjZXJzOncwZX09X2goe3NlbGVjdGlvblN0YXRlOm5ldyBNYXAscnVuc1RhYmxlSGVhZGVyczpbe3R5cGU6Z3QuUlVOLG5hbWU6InJ1biIsZGlzcGxheU5hbWU6IlJ1biIsZW5hYmxlZDohMCxzb3J0YWJsZTohMCxyZW1vdmFibGU6ITEsbW92YWJsZTohMSxmaWx0ZXJhYmxlOiExfV0sc29ydGluZ0luZm86e25hbWU6InJ1biIsb3JkZXI6THIuQVNDRU5ESU5HfX0se30sKG4sdCxlKT0+e2lmKCFWbyh0LGUpKXtpZihlLnJvdXRlS2luZD09PUNuLkNPTVBBUkVfRVhQRVJJTUVOVCYmIW4ucnVuc1RhYmxlSGVhZGVycy5maW5kKGk9PiJleHBlcmltZW50QWxpYXMiPT09aS5uYW1lKSl7bGV0IGk9Wy4uLm4ucnVuc1RhYmxlSGVhZGVycyx7dHlwZTpndC5DVVNUT00sbmFtZToiZXhwZXJpbWVudEFsaWFzIixkaXNwbGF5TmFtZToiRXhwZXJpbWVudCIsZW5hYmxlZDohMCxtb3ZhYmxlOiExLHNvcnRhYmxlOiEwfV07cmV0dXJuey4uLm4scnVuc1RhYmxlSGVhZGVyczppfX1pZih0Py5yb3V0ZUtpbmQ9PT1Dbi5DT01QQVJFX0VYUEVSSU1FTlQmJmUucm91dGVLaW5kIT09Q24uQ09NUEFSRV9FWFBFUklNRU5UKXtsZXQgaT1uLnJ1bnNUYWJsZUhlYWRlcnMuZmlsdGVyKHI9PiJleHBlcmltZW50QWxpYXMiIT09ci5uYW1lKTtyZXR1cm57Li4ubixydW5zVGFibGVIZWFkZXJzOml9fX1yZXR1cm4gbn0pLFMwZT1ncihNMGUseWUoV2YsKG4sdCk9PntsZXQgZT1uZXcgTWFwKG4uc2VsZWN0aW9uU3RhdGUpLGk9dC5ydW5zRm9yQWxsRXhwZXJpbWVudHMubGVuZ3RoPD01MDA7Zm9yKGxldCByIG9mIHQucnVuc0ZvckFsbEV4cGVyaW1lbnRzKWUuaGFzKHIuaWQpfHxlLnNldChyLmlkLGkpO3JldHVybnsuLi5uLHNlbGVjdGlvblN0YXRlOmV9fSkseWUoa1MsKG4se3J1bklkOnR9KT0+e2xldCBlPW5ldyBNYXAobi5zZWxlY3Rpb25TdGF0ZSk7cmV0dXJuIGUuc2V0KHQsIUJvb2xlYW4oZS5nZXQodCkpKSx7Li4ubixzZWxlY3Rpb25TdGF0ZTplfX0pLHllKE9TLChuLHtydW5JZDp0fSk9PntsZXQgZT1uZXcgTWFwO2ZvcihsZXQgaSBvZiBuLnNlbGVjdGlvblN0YXRlLmtleXMoKSllLnNldChpLHQ9PT1pKTtyZXR1cm57Li4ubixzZWxlY3Rpb25TdGF0ZTplfX0pLHllKEZTLChuLHtydW5JZHM6dH0pPT57bGV0IGU9bmV3IE1hcChuLnNlbGVjdGlvblN0YXRlKSxpPSF0LmV2ZXJ5KHI9PkJvb2xlYW4oZS5nZXQocikpKTtmb3IobGV0IHIgb2YgdCllLnNldChyLGkpO3JldHVybnsuLi5uLHNlbGVjdGlvblN0YXRlOmV9fSkseWUoWjYsKG4se2hlYWRlcjp0LGluZGV4OmV9KT0+e2xldCBpPVsuLi5uLnJ1bnNUYWJsZUhlYWRlcnNdO3JldHVybiB2b2lkIDA9PT1lP2kucHVzaCh0KTppLnNwbGljZShlLDAsdCksey4uLm4scnVuc1RhYmxlSGVhZGVyczppfX0pLHllKEJTLChuLHtoZWFkZXI6dH0pPT57bGV0IGU9bi5ydW5zVGFibGVIZWFkZXJzLmZpbHRlcigoe25hbWU6aX0pPT5pIT09dC5uYW1lKTtyZXR1cm57Li4ubixydW5zVGFibGVIZWFkZXJzOmV9fSkseWUoSzYsKG4se25ld0hlYWRlck9yZGVyOnR9KT0+KHsuLi5uLHJ1bnNUYWJsZUhlYWRlcnM6dH0pKSx5ZShWUywobix7c29ydGluZ0luZm86dH0pPT4oey4uLm4sc29ydGluZ0luZm86dH0pKSksRTBlPWJoKFMwZSx3MGUpO2Z1bmN0aW9uIG83KG4sdCl7cmV0dXJuIGNoKHtkYXRhOkMwZSx1aTpFMGV9KShuLHQpfWZ1bmN0aW9uIFQwZSgpe3JldHVyblt7YWN0aW9uQ3JlYXRvcjpxZixhbGVydEZyb21BY3Rpb246KCk9Pih7bG9jYWxpemVkTWVzc2FnZToiRmFpbGVkIHRvIGZldGNoIHJ1bnMifSl9XX12YXIgRTE9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe2ltcG9ydHM6W3dyLmZvckZlYXR1cmUoInJ1bnMiLG83KSx0by5mb3JGZWF0dXJlKFtyN10pLCQ2LENjLnJlZ2lzdGVyQWxlcnRBY3Rpb25zKFQwZSksUlNdfSksbn0pKCksdmQ9KCgpPT4oZnVuY3Rpb24obil7bi5SVU5TX0NIQU5HRUQ9ImV4cGVyaW1lbnRhbC5SdW5zQ2hhbmdlZCIsbi5HRVRfUlVOUz0iZXhwZXJpbWVudGFsLkdldFJ1bnMiLG4uR0VUX1VSTF9EQVRBPSJleHBlcmltZW50YWwuR2V0VVJMUGx1Z2luRGF0YSIsbi5EQVRBX1JFTE9BREVEPSJleHBlcmltZW50YWwuRGF0YVJlbG9hZGVkIn0odmR8fCh2ZD17fSkpLHZkKSkoKSxzNz1uZXcgV2Vha01hcCwkZj1uZXcgU2V0LHIyPW5ldyBNYXAsRDE9bmV3IE1hcDtmdW5jdGlvbiBsNyhuLHQpe3JldHVybiBlPT57bGV0IGk9RDEuZ2V0KHQpLHI9czcuZ2V0KGkpfHxudWxsO3JldHVybiBuKHIsZSl9fXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixuPT57aWYoImV4cGVyaW1lbnRhbC5ib290c3RyYXAiIT09bi5kYXRhKXJldHVybjtsZXQgdD1uLnBvcnRzWzBdO2lmKCF0KXJldHVybjtsZXQgZT1uLnNvdXJjZT9uLnNvdXJjZS5mcmFtZUVsZW1lbnQ6bnVsbDshZXx8ZnVuY3Rpb24obix0KXtsZXQgZT1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5wb3J0PXQsdGhpcy5pZD0wLHRoaXMucmVzcG9uc2VXYWl0cz1uZXcgTWFwLHRoaXMubGlzdGVuZXJzPW5ldyBNYXAsdGhpcy5wb3J0LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGU9PnRoaXMub25NZXNzYWdlKGUpKX1saXN0ZW4odCxlKXt0aGlzLmxpc3RlbmVycy5zZXQodCxlKX11bmxpc3Rlbih0KXt0aGlzLmxpc3RlbmVycy5kZWxldGUodCl9YXN5bmMgb25NZXNzYWdlKHQpe2xldCBlPUpTT04ucGFyc2UodC5kYXRhKSxpPWUudHlwZSxyPWUuaWQsbz1lLnBheWxvYWQsYT1lLmVycm9yO2lmKGUuaXNSZXBseSl7aWYoIXRoaXMucmVzcG9uc2VXYWl0cy5oYXMocikpcmV0dXJuO2xldHtyZXNvbHZlOnUscmVqZWN0OnB9PXRoaXMucmVzcG9uc2VXYWl0cy5nZXQocik7cmV0dXJuIHRoaXMucmVzcG9uc2VXYWl0cy5kZWxldGUociksdm9pZChhP3AobmV3IEVycm9yKGEpKTp1KG8pKX1sZXQgbD1udWxsLGM9bnVsbDtpZih0aGlzLmxpc3RlbmVycy5oYXMoaSkpe2xldCB1PXRoaXMubGlzdGVuZXJzLmdldChpKTt0cnl7bD1hd2FpdCB1KG8pfWNhdGNoKHApe2M9cH19dGhpcy5wb3N0TWVzc2FnZSh7dHlwZTppLGlkOnIscGF5bG9hZDpsLGVycm9yOmMsaXNSZXBseTohMH0pfXBvc3RNZXNzYWdlKHQpe3RoaXMucG9ydC5wb3N0TWVzc2FnZShKU09OLnN0cmluZ2lmeSh0KSl9c2VuZE1lc3NhZ2UodCxlKXtsZXQgaT10aGlzLmlkKys7cmV0dXJuIHRoaXMucG9zdE1lc3NhZ2Uoe3R5cGU6dCxpZDppLHBheWxvYWQ6ZSxlcnJvcjpudWxsLGlzUmVwbHk6ITF9KSxuZXcgUHJvbWlzZSgobyxhKT0+e3RoaXMucmVzcG9uc2VXYWl0cy5zZXQoaSx7cmVzb2x2ZTpvLHJlamVjdDphfSl9KX19KG4pOyRmLmFkZChlKSxEMS5zZXQoZSx0KSxuLnN0YXJ0KCk7Zm9yKGxldFtpLHJdb2YgcjIpe2xldCBvPWw3KHIsZSk7ZS5saXN0ZW4oaSxvKX19KHQsZSl9KTt2YXIgYTIsZWc9KCgpPT57Y2xhc3Mgbnticm9hZGNhc3QoZSxpKXtyZXR1cm4gZnVuY3Rpb24obix0KXtmb3IobGV0IGkgb2YgJGYpRDEuZ2V0KGkpLmlzQ29ubmVjdGVkfHwoJGYuZGVsZXRlKGkpLEQxLmRlbGV0ZShpKSk7bGV0IGU9Wy4uLiRmXS5tYXAoaT0+aS5zZW5kTWVzc2FnZShuLHQpKTtyZXR1cm4gUHJvbWlzZS5hbGwoZSl9KGUsaSl9bGlzdGVuKGUsaSl7IWZ1bmN0aW9uKG4sdCl7cjIuc2V0KG4sdCk7Zm9yKGxldCBlIG9mICRmKXtsZXQgaT1sNyh0LGUpO2UubGlzdGVuKG4saSl9fShlLGkpfXVubGlzdGVuKGUpeyFmdW5jdGlvbihuKXtyMi5kZWxldGUobik7Zm9yKGxldCB0IG9mICRmKXQudW5saXN0ZW4obil9KGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxJMT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5pcGM9ZSx0aGlzLnN0b3JlPWl9aW5pdCgpe3RoaXMuaXBjLmxpc3Rlbih2ZC5HRVRfVVJMX0RBVEEsZT0+e2lmKCFlKXJldHVybjtsZXQgaT1gcC4ke2UucGx1Z2luTmFtZX0uYCxyPXt9LG89d2luZG93LnRlbnNvcmJvYXJkLnRmX3N0b3JhZ2UuZ2V0VXJsSGFzaERpY3QoKTtmb3IobGV0IGEgaW4gbylhLnN0YXJ0c1dpdGgoaSkmJihyW2Euc3Vic3RyaW5nKGkubGVuZ3RoKV09b1thXSk7cmV0dXJuIHJ9KSx0aGlzLnN0b3JlLnNlbGVjdChqZikucGlwZShPZShlPT5udWxsIT09ZSkscmkoKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5pcGMuYnJvYWRjYXN0KHZkLkRBVEFfUkVMT0FERUQsdm9pZCAwKX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKGVnKSxPKEllKSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksQTE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuaXBjPWUsdGhpcy5zdG9yZT1pfWluaXQoKXtsZXQgZT10aGlzLnN0b3JlLnNlbGVjdChvcikucGlwZSh4bihpPT5pP0luKGkubWFwKG89PnRoaXMuc3RvcmUuc2VsZWN0KEl1LHtleHBlcmltZW50SWQ6b30pKSkucGlwZShxKG89Pm8uZmxhdCgpKSxyaSgobyxhKT0+by5sZW5ndGg9PT1hLmxlbmd0aCYmby5ldmVyeSgocyxsKT0+YVtsXS5pZD09PXMuaWQpKSxxKG89Pm8ubWFwKCh7bmFtZTphfSk9PmEpKSk6JHQoW10pKSk7ZS5zdWJzY3JpYmUoaT0+e3RoaXMuaXBjLmJyb2FkY2FzdCh2ZC5SVU5TX0NIQU5HRUQsaSl9KSx0aGlzLmlwYy5saXN0ZW4odmQuR0VUX1JVTlMsKCk9PmUucGlwZShMdCgxKSkudG9Qcm9taXNlKCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKGVnKSxPKEllKSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksUjE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe2kuaW5pdCgpLGUuaW5pdCgpfXJlZ2lzdGVyUGx1Z2luSWZyYW1lKGUsaSl7IWZ1bmN0aW9uKG4sdCl7czcuc2V0KG4se3BsdWdpbk5hbWU6dH0pfShlLGkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKEExKSxPKEkxKSl9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe3Byb3ZpZGVyczpbZWcsSTEsQTFdLGltcG9ydHM6W05mLFFzLEUxXX0pLG59KSgpLHRnPWZlKCJbQWxlcnRdIEFsZXJ0IFJlcG9ydGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksdTc9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5hY3Rpb25zJD1lLHRoaXMuc3RvcmU9aSx0aGlzLmFsZXJ0QWN0aW9uTW9kdWxlPXIsdGhpcy5yZXBvcnRSZWdpc3RlcmVkQWN0aW9uQWxlcnRzJD1fcigoKT0+dGhpcy5hY3Rpb25zJC5waXBlKER0KG89PntsZXQgYT10aGlzLmFsZXJ0QWN0aW9uTW9kdWxlLmdldEFsZXJ0RnJvbUFjdGlvbihvKTthJiZ0aGlzLnN0b3JlLmRpc3BhdGNoKHRnKGEpKX0pKSx7ZGlzcGF0Y2g6ITF9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhFbyksTyhJZSksTyhDYykpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLEwwZT1ncih7bGF0ZXN0QWxlcnQ6bnVsbH0seWUodGcsKG4se2xvY2FsaXplZE1lc3NhZ2U6dCxmb2xsb3d1cEFjdGlvbjplfSk9PntsZXQgaT17bG9jYWxpemVkTWVzc2FnZTp0LGNyZWF0ZWQ6RGF0ZS5ub3coKX07cmV0dXJuIGUmJihpLmZvbGxvd3VwQWN0aW9uPWUpLHsuLi5uLGxhdGVzdEFsZXJ0Oml9fSkpO2Z1bmN0aW9uIHA3KG4sdCl7cmV0dXJuIEwwZShuLHQpfXRyeXthMj10eXBlb2YgSW50bDwidSImJkludGwudjhCcmVha0l0ZXJhdG9yfWNhdGNoe2EyPSExfXZhciBuZyxrdixQMSx3aCxvMixWbj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX3BsYXRmb3JtSWQ9ZSx0aGlzLmlzQnJvd3Nlcj10aGlzLl9wbGF0Zm9ybUlkP193KHRoaXMuX3BsYXRmb3JtSWQpOiJvYmplY3QiPT10eXBlb2YgZG9jdW1lbnQmJiEhZG9jdW1lbnQsdGhpcy5FREdFPXRoaXMuaXNCcm93c2VyJiYvKGVkZ2UpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLlRSSURFTlQ9dGhpcy5pc0Jyb3dzZXImJi8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdGhpcy5CTElOSz10aGlzLmlzQnJvd3NlciYmISghd2luZG93LmNocm9tZSYmIWEyKSYmdHlwZW9mIENTUzwidSImJiF0aGlzLkVER0UmJiF0aGlzLlRSSURFTlQsdGhpcy5XRUJLSVQ9dGhpcy5pc0Jyb3dzZXImJi9BcHBsZVdlYktpdC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiF0aGlzLkJMSU5LJiYhdGhpcy5FREdFJiYhdGhpcy5UUklERU5ULHRoaXMuSU9TPXRoaXMuaXNCcm93c2VyJiYvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmISgiTVNTdHJlYW0iaW4gd2luZG93KSx0aGlzLkZJUkVGT1g9dGhpcy5pc0Jyb3dzZXImJi8oZmlyZWZveHxtaW5lZmllbGQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLkFORFJPSUQ9dGhpcy5pc0Jyb3dzZXImJi9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXRoaXMuVFJJREVOVCx0aGlzLlNBRkFSST10aGlzLmlzQnJvd3NlciYmL3NhZmFyaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJnRoaXMuV0VCS0lUfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKGZjKSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksaDc9WyJjb2xvciIsImJ1dHRvbiIsImNoZWNrYm94IiwiZGF0ZSIsImRhdGV0aW1lLWxvY2FsIiwiZW1haWwiLCJmaWxlIiwiaGlkZGVuIiwiaW1hZ2UiLCJtb250aCIsIm51bWJlciIsInBhc3N3b3JkIiwicmFkaW8iLCJyYW5nZSIsInJlc2V0Iiwic2VhcmNoIiwic3VibWl0IiwidGVsIiwidGV4dCIsInRpbWUiLCJ1cmwiLCJ3ZWVrIl07ZnVuY3Rpb24gczIoKXtpZihuZylyZXR1cm4gbmc7aWYoIm9iamVjdCIhPXR5cGVvZiBkb2N1bWVudHx8IWRvY3VtZW50KXJldHVybiBuZz1uZXcgU2V0KGg3KTtsZXQgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO3JldHVybiBuZz1uZXcgU2V0KGg3LmZpbHRlcih0PT4obi5zZXRBdHRyaWJ1dGUoInR5cGUiLHQpLG4udHlwZT09PXQpKSl9ZnVuY3Rpb24gemEobil7cmV0dXJuIGZ1bmN0aW9uKCl7aWYobnVsbD09a3YmJnR5cGVvZiB3aW5kb3c8InUiKXRyeXt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsbnVsbCxPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sInBhc3NpdmUiLHtnZXQ6KCk9Pmt2PSEwfSkpfWZpbmFsbHl7a3Y9a3Z8fCExfXJldHVybiBrdn0oKT9uOiEhbi5jYXB0dXJlfWZ1bmN0aW9uIGsxKCl7aWYobnVsbD09d2gpe2lmKCJvYmplY3QiIT10eXBlb2YgZG9jdW1lbnR8fCFkb2N1bWVudHx8ImZ1bmN0aW9uIiE9dHlwZW9mIEVsZW1lbnR8fCFFbGVtZW50KXJldHVybiB3aD0hMTtpZigic2Nyb2xsQmVoYXZpb3IiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlKXdoPSEwO2Vsc2V7bGV0IG49RWxlbWVudC5wcm90b3R5cGUuc2Nyb2xsVG87d2g9ISFuJiYhL1x7XHMqXFtuYXRpdmUgY29kZVxdXHMqXH0vLnRlc3Qobi50b1N0cmluZygpKX19cmV0dXJuIHdofWZ1bmN0aW9uIGlnKCl7aWYoIm9iamVjdCIhPXR5cGVvZiBkb2N1bWVudHx8IWRvY3VtZW50KXJldHVybiAwO2lmKG51bGw9PVAxKXtsZXQgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0PW4uc3R5bGU7bi5kaXI9InJ0bCIsdC53aWR0aD0iMXB4Iix0Lm92ZXJmbG93PSJhdXRvIix0LnZpc2liaWxpdHk9ImhpZGRlbiIsdC5wb2ludGVyRXZlbnRzPSJub25lIix0LnBvc2l0aW9uPSJhYnNvbHV0ZSI7bGV0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksaT1lLnN0eWxlO2kud2lkdGg9IjJweCIsaS5oZWlnaHQ9IjFweCIsbi5hcHBlbmRDaGlsZChlKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG4pLFAxPTAsMD09PW4uc2Nyb2xsTGVmdCYmKG4uc2Nyb2xsTGVmdD0xLFAxPTA9PT1uLnNjcm9sbExlZnQ/MToyKSxuLnJlbW92ZSgpfXJldHVybiBQMX1mdW5jdGlvbiBPdigpe2xldCBuPXR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50P2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ6bnVsbDtmb3IoO24mJm4uc2hhZG93Um9vdDspe2xldCB0PW4uc2hhZG93Um9vdC5hY3RpdmVFbGVtZW50O2lmKHQ9PT1uKWJyZWFrO249dH1yZXR1cm4gbn1mdW5jdGlvbiBicyhuKXtyZXR1cm4gbi5jb21wb3NlZFBhdGg/bi5jb21wb3NlZFBhdGgoKVswXTpuLnRhcmdldH1mdW5jdGlvbiBGdigpe3JldHVybiB0eXBlb2YgX19rYXJtYV9fPCJ1IiYmISFfX2thcm1hX198fHR5cGVvZiBqYXNtaW5lPCJ1IiYmISFqYXNtaW5lfHx0eXBlb2YgamVzdDwidSImJiEhamVzdHx8dHlwZW9mIE1vY2hhPCJ1IiYmISFNb2NoYX1mdW5jdGlvbiBPcihuLC4uLnQpe3JldHVybiB0Lmxlbmd0aD90LnNvbWUoZT0+bltlXSk6bi5hbHRLZXl8fG4uc2hpZnRLZXl8fG4uY3RybEtleXx8bi5tZXRhS2V5fWZ1bmN0aW9uIHZ0KG4pe3JldHVybiBudWxsIT1uJiYiZmFsc2UiIT1gJHtufWB9ZnVuY3Rpb24gbWkobix0PTApe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4haXNOYU4ocGFyc2VGbG9hdChuKSkmJiFpc05hTihOdW1iZXIobikpfShuKT9OdW1iZXIobik6dH1mdW5jdGlvbiByZyhuKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9uOltuXX1mdW5jdGlvbiBxcihuKXtyZXR1cm4gbnVsbD09bj8iIjoic3RyaW5nIj09dHlwZW9mIG4/bjpgJHtufXB4YH1mdW5jdGlvbiBVYShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIHhlP24ubmF0aXZlRWxlbWVudDpufXZhciBhZyxnNz0oKCk9PntjbGFzcyBue2NyZWF0ZShlKXtyZXR1cm4gdHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXI+InUiP251bGw6bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLHowZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX211dGF0aW9uT2JzZXJ2ZXJGYWN0b3J5PWUsdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cz1uZXcgTWFwfW5nT25EZXN0cm95KCl7dGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5mb3JFYWNoKChlLGkpPT50aGlzLl9jbGVhbnVwT2JzZXJ2ZXIoaSkpfW9ic2VydmUoZSl7bGV0IGk9VWEoZSk7cmV0dXJuIG5ldyBLdChyPT57bGV0IGE9dGhpcy5fb2JzZXJ2ZUVsZW1lbnQoaSkuc3Vic2NyaWJlKHIpO3JldHVybigpPT57YS51bnN1YnNjcmliZSgpLHRoaXMuX3Vub2JzZXJ2ZUVsZW1lbnQoaSl9fSl9X29ic2VydmVFbGVtZW50KGUpe2lmKHRoaXMuX29ic2VydmVkRWxlbWVudHMuaGFzKGUpKXRoaXMuX29ic2VydmVkRWxlbWVudHMuZ2V0KGUpLmNvdW50Kys7ZWxzZXtsZXQgaT1uZXcgRWUscj10aGlzLl9tdXRhdGlvbk9ic2VydmVyRmFjdG9yeS5jcmVhdGUobz0+aS5uZXh0KG8pKTtyJiZyLm9ic2VydmUoZSx7Y2hhcmFjdGVyRGF0YTohMCxjaGlsZExpc3Q6ITAsc3VidHJlZTohMH0pLHRoaXMuX29ic2VydmVkRWxlbWVudHMuc2V0KGUse29ic2VydmVyOnIsc3RyZWFtOmksY291bnQ6MX0pfXJldHVybiB0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmdldChlKS5zdHJlYW19X3Vub2JzZXJ2ZUVsZW1lbnQoZSl7dGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5oYXMoZSkmJih0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmdldChlKS5jb3VudC0tLHRoaXMuX29ic2VydmVkRWxlbWVudHMuZ2V0KGUpLmNvdW50fHx0aGlzLl9jbGVhbnVwT2JzZXJ2ZXIoZSkpfV9jbGVhbnVwT2JzZXJ2ZXIoZSl7aWYodGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5oYXMoZSkpe2xldHtvYnNlcnZlcjppLHN0cmVhbTpyfT10aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmdldChlKTtpJiZpLmRpc2Nvbm5lY3QoKSxyLmNvbXBsZXRlKCksdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5kZWxldGUoZSl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKGc3KSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksTzE9KCgpPT57Y2xhc3MgbntnZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9c2V0IGRpc2FibGVkKGUpe3RoaXMuX2Rpc2FibGVkPXZ0KGUpLHRoaXMuX2Rpc2FibGVkP3RoaXMuX3Vuc3Vic2NyaWJlKCk6dGhpcy5fc3Vic2NyaWJlKCl9Z2V0IGRlYm91bmNlKCl7cmV0dXJuIHRoaXMuX2RlYm91bmNlfXNldCBkZWJvdW5jZShlKXt0aGlzLl9kZWJvdW5jZT1taShlKSx0aGlzLl9zdWJzY3JpYmUoKX1jb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fY29udGVudE9ic2VydmVyPWUsdGhpcy5fZWxlbWVudFJlZj1pLHRoaXMuX25nWm9uZT1yLHRoaXMuZXZlbnQ9bmV3IEYsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5fY3VycmVudFN1YnNjcmlwdGlvbj1udWxsfW5nQWZ0ZXJDb250ZW50SW5pdCgpeyF0aGlzLl9jdXJyZW50U3Vic2NyaXB0aW9uJiYhdGhpcy5kaXNhYmxlZCYmdGhpcy5fc3Vic2NyaWJlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl91bnN1YnNjcmliZSgpfV9zdWJzY3JpYmUoKXt0aGlzLl91bnN1YnNjcmliZSgpO2xldCBlPXRoaXMuX2NvbnRlbnRPYnNlcnZlci5vYnNlcnZlKHRoaXMuX2VsZW1lbnRSZWYpO3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2N1cnJlbnRTdWJzY3JpcHRpb249KHRoaXMuZGVib3VuY2U/ZS5waXBlKENyKHRoaXMuZGVib3VuY2UpKTplKS5zdWJzY3JpYmUodGhpcy5ldmVudCl9KX1fdW5zdWJzY3JpYmUoKXt0aGlzLl9jdXJyZW50U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKHowZSksQyh4ZSksQyhvdCkpfSxuLlx1MDI3NWRpcj1NZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGtPYnNlcnZlQ29udGVudCIsIiJdXSxpbnB1dHM6e2Rpc2FibGVkOlsiY2RrT2JzZXJ2ZUNvbnRlbnREaXNhYmxlZCIsImRpc2FibGVkIl0sZGVib3VuY2U6ImRlYm91bmNlIn0sb3V0cHV0czp7ZXZlbnQ6ImNka09ic2VydmVDb250ZW50In0sZXhwb3J0QXM6WyJjZGtPYnNlcnZlQ29udGVudCJdfSksbn0pKCksb2c9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe3Byb3ZpZGVyczpbZzddfSksbn0pKCksYjc9bmV3IFNldCxVMGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9wbGF0Zm9ybT1lLHRoaXMuX21hdGNoTWVkaWE9dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiZ3aW5kb3cubWF0Y2hNZWRpYT93aW5kb3cubWF0Y2hNZWRpYS5iaW5kKHdpbmRvdyk6RzBlfW1hdGNoTWVkaWEoZSl7cmV0dXJuKHRoaXMuX3BsYXRmb3JtLldFQktJVHx8dGhpcy5fcGxhdGZvcm0uQkxJTkspJiZmdW5jdGlvbihuKXtpZighYjcuaGFzKG4pKXRyeXthZ3x8KChhZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpKS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJ0ZXh0L2NzcyIpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoYWcpKSxhZy5zaGVldCYmKGFnLnNoZWV0Lmluc2VydFJ1bGUoYEBtZWRpYSAke259IHtib2R5eyB9fWAsMCksYjcuYWRkKG4pKX1jYXRjaCh0KXtjb25zb2xlLmVycm9yKHQpfX0oZSksdGhpcy5fbWF0Y2hNZWRpYShlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhWbikpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpO2Z1bmN0aW9uIEcwZShuKXtyZXR1cm57bWF0Y2hlczoiYWxsIj09PW58fCIiPT09bixtZWRpYTpuLGFkZExpc3RlbmVyOigpPT57fSxyZW1vdmVMaXN0ZW5lcjooKT0+e319fXZhciBOdj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5fbWVkaWFNYXRjaGVyPWUsdGhpcy5fem9uZT1pLHRoaXMuX3F1ZXJpZXM9bmV3IE1hcCx0aGlzLl9kZXN0cm95U3ViamVjdD1uZXcgRWV9bmdPbkRlc3Ryb3koKXt0aGlzLl9kZXN0cm95U3ViamVjdC5uZXh0KCksdGhpcy5fZGVzdHJveVN1YmplY3QuY29tcGxldGUoKX1pc01hdGNoZWQoZSl7cmV0dXJuIHY3KHJnKGUpKS5zb21lKHI9PnRoaXMuX3JlZ2lzdGVyUXVlcnkocikubXFsLm1hdGNoZXMpfW9ic2VydmUoZSl7bGV0IG89SW4odjcocmcoZSkpLm1hcChhPT50aGlzLl9yZWdpc3RlclF1ZXJ5KGEpLm9ic2VydmFibGUpKTtyZXR1cm4gbz1LZChvLnBpcGUoTHQoMSkpLG8ucGlwZShvcygxKSxDcigwKSkpLG8ucGlwZShxKGE9PntsZXQgcz17bWF0Y2hlczohMSxicmVha3BvaW50czp7fX07cmV0dXJuIGEuZm9yRWFjaCgoe21hdGNoZXM6bCxxdWVyeTpjfSk9PntzLm1hdGNoZXM9cy5tYXRjaGVzfHxsLHMuYnJlYWtwb2ludHNbY109bH0pLHN9KSl9X3JlZ2lzdGVyUXVlcnkoZSl7aWYodGhpcy5fcXVlcmllcy5oYXMoZSkpcmV0dXJuIHRoaXMuX3F1ZXJpZXMuZ2V0KGUpO2xldCBpPXRoaXMuX21lZGlhTWF0Y2hlci5tYXRjaE1lZGlhKGUpLG89e29ic2VydmFibGU6bmV3IEt0KGE9PntsZXQgcz1sPT50aGlzLl96b25lLnJ1bigoKT0+YS5uZXh0KGwpKTtyZXR1cm4gaS5hZGRMaXN0ZW5lcihzKSwoKT0+e2kucmVtb3ZlTGlzdGVuZXIocyl9fSkucGlwZShrbihpKSxxKCh7bWF0Y2hlczphfSk9Pih7cXVlcnk6ZSxtYXRjaGVzOmF9KSksaXQodGhpcy5fZGVzdHJveVN1YmplY3QpKSxtcWw6aX07cmV0dXJuIHRoaXMuX3F1ZXJpZXMuc2V0KGUsbyksb319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhVMGUpLE8ob3QpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKTtmdW5jdGlvbiB2NyhuKXtyZXR1cm4gbi5tYXAodD0+dC5zcGxpdCgiLCIpKS5yZWR1Y2UoKHQsZSk9PnQuY29uY2F0KGUpKS5tYXAodD0+dC50cmltKCkpfWZ1bmN0aW9uIEwxKG4sdCl7cmV0dXJuKG4uZ2V0QXR0cmlidXRlKHQpfHwiIikubWF0Y2goL1xTKy9nKXx8W119dmFyIEU3PSJjZGstZGVzY3JpYmVkYnktbWVzc2FnZSIsRjE9ImNkay1kZXNjcmliZWRieS1ob3N0IixkMj0wLFQ3PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLl9wbGF0Zm9ybT1pLHRoaXMuX21lc3NhZ2VSZWdpc3RyeT1uZXcgTWFwLHRoaXMuX21lc3NhZ2VzQ29udGFpbmVyPW51bGwsdGhpcy5faWQ9IiIrZDIrKyx0aGlzLl9kb2N1bWVudD1lLHRoaXMuX2lkPSRuKCRwKSsiLSIrZDIrK31kZXNjcmliZShlLGkscil7aWYoIXRoaXMuX2NhbkJlRGVzY3JpYmVkKGUsaSkpcmV0dXJuO2xldCBvPWwyKGkscik7InN0cmluZyIhPXR5cGVvZiBpPyh4NyhpLHRoaXMuX2lkKSx0aGlzLl9tZXNzYWdlUmVnaXN0cnkuc2V0KG8se21lc3NhZ2VFbGVtZW50OmkscmVmZXJlbmNlQ291bnQ6MH0pKTp0aGlzLl9tZXNzYWdlUmVnaXN0cnkuaGFzKG8pfHx0aGlzLl9jcmVhdGVNZXNzYWdlRWxlbWVudChpLHIpLHRoaXMuX2lzRWxlbWVudERlc2NyaWJlZEJ5TWVzc2FnZShlLG8pfHx0aGlzLl9hZGRNZXNzYWdlUmVmZXJlbmNlKGUsbyl9cmVtb3ZlRGVzY3JpcHRpb24oZSxpLHIpe2lmKCFpfHwhdGhpcy5faXNFbGVtZW50Tm9kZShlKSlyZXR1cm47bGV0IG89bDIoaSxyKTtpZih0aGlzLl9pc0VsZW1lbnREZXNjcmliZWRCeU1lc3NhZ2UoZSxvKSYmdGhpcy5fcmVtb3ZlTWVzc2FnZVJlZmVyZW5jZShlLG8pLCJzdHJpbmciPT10eXBlb2YgaSl7bGV0IGE9dGhpcy5fbWVzc2FnZVJlZ2lzdHJ5LmdldChvKTthJiYwPT09YS5yZWZlcmVuY2VDb3VudCYmdGhpcy5fZGVsZXRlTWVzc2FnZUVsZW1lbnQobyl9MD09PXRoaXMuX21lc3NhZ2VzQ29udGFpbmVyPy5jaGlsZE5vZGVzLmxlbmd0aCYmKHRoaXMuX21lc3NhZ2VzQ29udGFpbmVyLnJlbW92ZSgpLHRoaXMuX21lc3NhZ2VzQ29udGFpbmVyPW51bGwpfW5nT25EZXN0cm95KCl7bGV0IGU9dGhpcy5fZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgWyR7RjF9PSIke3RoaXMuX2lkfSJdYCk7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspdGhpcy5fcmVtb3ZlQ2RrRGVzY3JpYmVkQnlSZWZlcmVuY2VJZHMoZVtpXSksZVtpXS5yZW1vdmVBdHRyaWJ1dGUoRjEpO3RoaXMuX21lc3NhZ2VzQ29udGFpbmVyPy5yZW1vdmUoKSx0aGlzLl9tZXNzYWdlc0NvbnRhaW5lcj1udWxsLHRoaXMuX21lc3NhZ2VSZWdpc3RyeS5jbGVhcigpfV9jcmVhdGVNZXNzYWdlRWxlbWVudChlLGkpe2xldCByPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3g3KHIsdGhpcy5faWQpLHIudGV4dENvbnRlbnQ9ZSxpJiZyLnNldEF0dHJpYnV0ZSgicm9sZSIsaSksdGhpcy5fY3JlYXRlTWVzc2FnZXNDb250YWluZXIoKSx0aGlzLl9tZXNzYWdlc0NvbnRhaW5lci5hcHBlbmRDaGlsZChyKSx0aGlzLl9tZXNzYWdlUmVnaXN0cnkuc2V0KGwyKGUsaSkse21lc3NhZ2VFbGVtZW50OnIscmVmZXJlbmNlQ291bnQ6MH0pfV9kZWxldGVNZXNzYWdlRWxlbWVudChlKXt0aGlzLl9tZXNzYWdlUmVnaXN0cnkuZ2V0KGUpPy5tZXNzYWdlRWxlbWVudD8ucmVtb3ZlKCksdGhpcy5fbWVzc2FnZVJlZ2lzdHJ5LmRlbGV0ZShlKX1fY3JlYXRlTWVzc2FnZXNDb250YWluZXIoKXtpZih0aGlzLl9tZXNzYWdlc0NvbnRhaW5lcilyZXR1cm47bGV0IGU9ImNkay1kZXNjcmliZWRieS1tZXNzYWdlLWNvbnRhaW5lciIsaT10aGlzLl9kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHtlfVtwbGF0Zm9ybT0ic2VydmVyIl1gKTtmb3IobGV0IG89MDtvPGkubGVuZ3RoO28rKylpW29dLnJlbW92ZSgpO2xldCByPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3Iuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIixyLmNsYXNzTGlzdC5hZGQoZSksci5jbGFzc0xpc3QuYWRkKCJjZGstdmlzdWFsbHktaGlkZGVuIiksdGhpcy5fcGxhdGZvcm0mJiF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJnIuc2V0QXR0cmlidXRlKCJwbGF0Zm9ybSIsInNlcnZlciIpLHRoaXMuX2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQociksdGhpcy5fbWVzc2FnZXNDb250YWluZXI9cn1fcmVtb3ZlQ2RrRGVzY3JpYmVkQnlSZWZlcmVuY2VJZHMoZSl7bGV0IGk9TDEoZSwiYXJpYS1kZXNjcmliZWRieSIpLmZpbHRlcihyPT4wIT1yLmluZGV4T2YoRTcpKTtlLnNldEF0dHJpYnV0ZSgiYXJpYS1kZXNjcmliZWRieSIsaS5qb2luKCIgIikpfV9hZGRNZXNzYWdlUmVmZXJlbmNlKGUsaSl7bGV0IHI9dGhpcy5fbWVzc2FnZVJlZ2lzdHJ5LmdldChpKTsoZnVuY3Rpb24obix0LGUpe2xldCBpPUwxKG4sdCk7aS5zb21lKHI9PnIudHJpbSgpPT1lLnRyaW0oKSl8fChpLnB1c2goZS50cmltKCkpLG4uc2V0QXR0cmlidXRlKHQsaS5qb2luKCIgIikpKX0pKGUsImFyaWEtZGVzY3JpYmVkYnkiLHIubWVzc2FnZUVsZW1lbnQuaWQpLGUuc2V0QXR0cmlidXRlKEYxLHRoaXMuX2lkKSxyLnJlZmVyZW5jZUNvdW50Kyt9X3JlbW92ZU1lc3NhZ2VSZWZlcmVuY2UoZSxpKXtsZXQgcj10aGlzLl9tZXNzYWdlUmVnaXN0cnkuZ2V0KGkpO3IucmVmZXJlbmNlQ291bnQtLSxmdW5jdGlvbihuLHQsZSl7bGV0IHI9TDEobix0KS5maWx0ZXIobz0+byE9ZS50cmltKCkpO3IubGVuZ3RoP24uc2V0QXR0cmlidXRlKHQsci5qb2luKCIgIikpOm4ucmVtb3ZlQXR0cmlidXRlKHQpfShlLCJhcmlhLWRlc2NyaWJlZGJ5IixyLm1lc3NhZ2VFbGVtZW50LmlkKSxlLnJlbW92ZUF0dHJpYnV0ZShGMSl9X2lzRWxlbWVudERlc2NyaWJlZEJ5TWVzc2FnZShlLGkpe2xldCByPUwxKGUsImFyaWEtZGVzY3JpYmVkYnkiKSxvPXRoaXMuX21lc3NhZ2VSZWdpc3RyeS5nZXQoaSksYT1vJiZvLm1lc3NhZ2VFbGVtZW50LmlkO3JldHVybiEhYSYmLTEhPXIuaW5kZXhPZihhKX1fY2FuQmVEZXNjcmliZWQoZSxpKXtpZighdGhpcy5faXNFbGVtZW50Tm9kZShlKSlyZXR1cm4hMTtpZihpJiYib2JqZWN0Ij09dHlwZW9mIGkpcmV0dXJuITA7bGV0IHI9bnVsbD09aT8iIjpgJHtpfWAudHJpbSgpLG89ZS5nZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiKTtyZXR1cm4hKCFyfHxvJiZvLnRyaW0oKT09PXIpfV9pc0VsZW1lbnROb2RlKGUpe3JldHVybiBlLm5vZGVUeXBlPT09dGhpcy5fZG9jdW1lbnQuRUxFTUVOVF9OT0RFfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKE50KSxPKFZuKSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCk7ZnVuY3Rpb24gbDIobix0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/YCR7dHx8IiJ9LyR7bn1gOm59ZnVuY3Rpb24geDcobix0KXtuLmlkfHwobi5pZD1gJHtFN30tJHt0fS0ke2QyKyt9YCl9dmFyIEIxPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX2l0ZW1zPXQsdGhpcy5fYWN0aXZlSXRlbUluZGV4PS0xLHRoaXMuX2FjdGl2ZUl0ZW09bnVsbCx0aGlzLl93cmFwPSExLHRoaXMuX2xldHRlcktleVN0cmVhbT1uZXcgRWUsdGhpcy5fdHlwZWFoZWFkU3Vic2NyaXB0aW9uPUVuLkVNUFRZLHRoaXMuX3ZlcnRpY2FsPSEwLHRoaXMuX2FsbG93ZWRNb2RpZmllcktleXM9W10sdGhpcy5faG9tZUFuZEVuZD0hMSx0aGlzLl9wYWdlVXBBbmREb3duPXtlbmFibGVkOiExLGRlbHRhOjEwfSx0aGlzLl9za2lwUHJlZGljYXRlRm49ZT0+ZS5kaXNhYmxlZCx0aGlzLl9wcmVzc2VkTGV0dGVycz1bXSx0aGlzLnRhYk91dD1uZXcgRWUsdGhpcy5jaGFuZ2U9bmV3IEVlLHQgaW5zdGFuY2VvZiBQYSYmKHRoaXMuX2l0ZW1DaGFuZ2VzU3Vic2NyaXB0aW9uPXQuY2hhbmdlcy5zdWJzY3JpYmUoZT0+e2lmKHRoaXMuX2FjdGl2ZUl0ZW0pe2xldCByPWUudG9BcnJheSgpLmluZGV4T2YodGhpcy5fYWN0aXZlSXRlbSk7cj4tMSYmciE9PXRoaXMuX2FjdGl2ZUl0ZW1JbmRleCYmKHRoaXMuX2FjdGl2ZUl0ZW1JbmRleD1yKX19KSl9c2tpcFByZWRpY2F0ZSh0KXtyZXR1cm4gdGhpcy5fc2tpcFByZWRpY2F0ZUZuPXQsdGhpc313aXRoV3JhcCh0PSEwKXtyZXR1cm4gdGhpcy5fd3JhcD10LHRoaXN9d2l0aFZlcnRpY2FsT3JpZW50YXRpb24odD0hMCl7cmV0dXJuIHRoaXMuX3ZlcnRpY2FsPXQsdGhpc313aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKHQpe3JldHVybiB0aGlzLl9ob3Jpem9udGFsPXQsdGhpc313aXRoQWxsb3dlZE1vZGlmaWVyS2V5cyh0KXtyZXR1cm4gdGhpcy5fYWxsb3dlZE1vZGlmaWVyS2V5cz10LHRoaXN9d2l0aFR5cGVBaGVhZCh0PTIwMCl7cmV0dXJuIHRoaXMuX3R5cGVhaGVhZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3R5cGVhaGVhZFN1YnNjcmlwdGlvbj10aGlzLl9sZXR0ZXJLZXlTdHJlYW0ucGlwZShEdChlPT50aGlzLl9wcmVzc2VkTGV0dGVycy5wdXNoKGUpKSxDcih0KSxPZSgoKT0+dGhpcy5fcHJlc3NlZExldHRlcnMubGVuZ3RoPjApLHEoKCk9PnRoaXMuX3ByZXNzZWRMZXR0ZXJzLmpvaW4oIiIpKSkuc3Vic2NyaWJlKGU9PntsZXQgaT10aGlzLl9nZXRJdGVtc0FycmF5KCk7Zm9yKGxldCByPTE7cjxpLmxlbmd0aCsxO3IrKyl7bGV0IG89KHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCtyKSVpLmxlbmd0aCxhPWlbb107aWYoIXRoaXMuX3NraXBQcmVkaWNhdGVGbihhKSYmMD09PWEuZ2V0TGFiZWwoKS50b1VwcGVyQ2FzZSgpLnRyaW0oKS5pbmRleE9mKGUpKXt0aGlzLnNldEFjdGl2ZUl0ZW0obyk7YnJlYWt9fXRoaXMuX3ByZXNzZWRMZXR0ZXJzPVtdfSksdGhpc31jYW5jZWxUeXBlYWhlYWQoKXtyZXR1cm4gdGhpcy5fcHJlc3NlZExldHRlcnM9W10sdGhpc313aXRoSG9tZUFuZEVuZCh0PSEwKXtyZXR1cm4gdGhpcy5faG9tZUFuZEVuZD10LHRoaXN9d2l0aFBhZ2VVcERvd24odD0hMCxlPTEwKXtyZXR1cm4gdGhpcy5fcGFnZVVwQW5kRG93bj17ZW5hYmxlZDp0LGRlbHRhOmV9LHRoaXN9c2V0QWN0aXZlSXRlbSh0KXtsZXQgZT10aGlzLl9hY3RpdmVJdGVtO3RoaXMudXBkYXRlQWN0aXZlSXRlbSh0KSx0aGlzLl9hY3RpdmVJdGVtIT09ZSYmdGhpcy5jaGFuZ2UubmV4dCh0aGlzLl9hY3RpdmVJdGVtSW5kZXgpfW9uS2V5ZG93bih0KXtsZXQgZT10LmtleUNvZGUscj1bImFsdEtleSIsImN0cmxLZXkiLCJtZXRhS2V5Iiwic2hpZnRLZXkiXS5ldmVyeShvPT4hdFtvXXx8dGhpcy5fYWxsb3dlZE1vZGlmaWVyS2V5cy5pbmRleE9mKG8pPi0xKTtzd2l0Y2goZSl7Y2FzZSA5OnJldHVybiB2b2lkIHRoaXMudGFiT3V0Lm5leHQoKTtjYXNlIDQwOmlmKHRoaXMuX3ZlcnRpY2FsJiZyKXt0aGlzLnNldE5leHRJdGVtQWN0aXZlKCk7YnJlYWt9cmV0dXJuO2Nhc2UgMzg6aWYodGhpcy5fdmVydGljYWwmJnIpe3RoaXMuc2V0UHJldmlvdXNJdGVtQWN0aXZlKCk7YnJlYWt9cmV0dXJuO2Nhc2UgMzk6aWYodGhpcy5faG9yaXpvbnRhbCYmcil7InJ0bCI9PT10aGlzLl9ob3Jpem9udGFsP3RoaXMuc2V0UHJldmlvdXNJdGVtQWN0aXZlKCk6dGhpcy5zZXROZXh0SXRlbUFjdGl2ZSgpO2JyZWFrfXJldHVybjtjYXNlIDM3OmlmKHRoaXMuX2hvcml6b250YWwmJnIpeyJydGwiPT09dGhpcy5faG9yaXpvbnRhbD90aGlzLnNldE5leHRJdGVtQWN0aXZlKCk6dGhpcy5zZXRQcmV2aW91c0l0ZW1BY3RpdmUoKTticmVha31yZXR1cm47Y2FzZSAzNjppZih0aGlzLl9ob21lQW5kRW5kJiZyKXt0aGlzLnNldEZpcnN0SXRlbUFjdGl2ZSgpO2JyZWFrfXJldHVybjtjYXNlIDM1OmlmKHRoaXMuX2hvbWVBbmRFbmQmJnIpe3RoaXMuc2V0TGFzdEl0ZW1BY3RpdmUoKTticmVha31yZXR1cm47Y2FzZSAzMzppZih0aGlzLl9wYWdlVXBBbmREb3duLmVuYWJsZWQmJnIpe2xldCBvPXRoaXMuX2FjdGl2ZUl0ZW1JbmRleC10aGlzLl9wYWdlVXBBbmREb3duLmRlbHRhO3RoaXMuX3NldEFjdGl2ZUl0ZW1CeUluZGV4KG8+MD9vOjAsMSk7YnJlYWt9cmV0dXJuO2Nhc2UgMzQ6aWYodGhpcy5fcGFnZVVwQW5kRG93bi5lbmFibGVkJiZyKXtsZXQgbz10aGlzLl9hY3RpdmVJdGVtSW5kZXgrdGhpcy5fcGFnZVVwQW5kRG93bi5kZWx0YSxhPXRoaXMuX2dldEl0ZW1zQXJyYXkoKS5sZW5ndGg7dGhpcy5fc2V0QWN0aXZlSXRlbUJ5SW5kZXgobzxhP286YS0xLC0xKTticmVha31yZXR1cm47ZGVmYXVsdDpyZXR1cm4gdm9pZCgocnx8T3IodCwic2hpZnRLZXkiKSkmJih0LmtleSYmMT09PXQua2V5Lmxlbmd0aD90aGlzLl9sZXR0ZXJLZXlTdHJlYW0ubmV4dCh0LmtleS50b0xvY2FsZVVwcGVyQ2FzZSgpKTooZT49NjUmJmU8PTkwfHxlPj00OCYmZTw9NTcpJiZ0aGlzLl9sZXR0ZXJLZXlTdHJlYW0ubmV4dChTdHJpbmcuZnJvbUNoYXJDb2RlKGUpKSkpfXRoaXMuX3ByZXNzZWRMZXR0ZXJzPVtdLHQucHJldmVudERlZmF1bHQoKX1nZXQgYWN0aXZlSXRlbUluZGV4KCl7cmV0dXJuIHRoaXMuX2FjdGl2ZUl0ZW1JbmRleH1nZXQgYWN0aXZlSXRlbSgpe3JldHVybiB0aGlzLl9hY3RpdmVJdGVtfWlzVHlwaW5nKCl7cmV0dXJuIHRoaXMuX3ByZXNzZWRMZXR0ZXJzLmxlbmd0aD4wfXNldEZpcnN0SXRlbUFjdGl2ZSgpe3RoaXMuX3NldEFjdGl2ZUl0ZW1CeUluZGV4KDAsMSl9c2V0TGFzdEl0ZW1BY3RpdmUoKXt0aGlzLl9zZXRBY3RpdmVJdGVtQnlJbmRleCh0aGlzLl9pdGVtcy5sZW5ndGgtMSwtMSl9c2V0TmV4dEl0ZW1BY3RpdmUoKXt0aGlzLl9hY3RpdmVJdGVtSW5kZXg8MD90aGlzLnNldEZpcnN0SXRlbUFjdGl2ZSgpOnRoaXMuX3NldEFjdGl2ZUl0ZW1CeURlbHRhKDEpfXNldFByZXZpb3VzSXRlbUFjdGl2ZSgpe3RoaXMuX2FjdGl2ZUl0ZW1JbmRleDwwJiZ0aGlzLl93cmFwP3RoaXMuc2V0TGFzdEl0ZW1BY3RpdmUoKTp0aGlzLl9zZXRBY3RpdmVJdGVtQnlEZWx0YSgtMSl9dXBkYXRlQWN0aXZlSXRlbSh0KXtsZXQgZT10aGlzLl9nZXRJdGVtc0FycmF5KCksaT0ibnVtYmVyIj09dHlwZW9mIHQ/dDplLmluZGV4T2YodCk7dGhpcy5fYWN0aXZlSXRlbT1lW2ldPz9udWxsLHRoaXMuX2FjdGl2ZUl0ZW1JbmRleD1pfWRlc3Ryb3koKXt0aGlzLl90eXBlYWhlYWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9pdGVtQ2hhbmdlc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKSx0aGlzLl9sZXR0ZXJLZXlTdHJlYW0uY29tcGxldGUoKSx0aGlzLnRhYk91dC5jb21wbGV0ZSgpLHRoaXMuY2hhbmdlLmNvbXBsZXRlKCksdGhpcy5fcHJlc3NlZExldHRlcnM9W119X3NldEFjdGl2ZUl0ZW1CeURlbHRhKHQpe3RoaXMuX3dyYXA/dGhpcy5fc2V0QWN0aXZlSW5XcmFwTW9kZSh0KTp0aGlzLl9zZXRBY3RpdmVJbkRlZmF1bHRNb2RlKHQpfV9zZXRBY3RpdmVJbldyYXBNb2RlKHQpe2xldCBlPXRoaXMuX2dldEl0ZW1zQXJyYXkoKTtmb3IobGV0IGk9MTtpPD1lLmxlbmd0aDtpKyspe2xldCByPSh0aGlzLl9hY3RpdmVJdGVtSW5kZXgrdCppK2UubGVuZ3RoKSVlLmxlbmd0aDtpZighdGhpcy5fc2tpcFByZWRpY2F0ZUZuKGVbcl0pKXJldHVybiB2b2lkIHRoaXMuc2V0QWN0aXZlSXRlbShyKX19X3NldEFjdGl2ZUluRGVmYXVsdE1vZGUodCl7dGhpcy5fc2V0QWN0aXZlSXRlbUJ5SW5kZXgodGhpcy5fYWN0aXZlSXRlbUluZGV4K3QsdCl9X3NldEFjdGl2ZUl0ZW1CeUluZGV4KHQsZSl7bGV0IGk9dGhpcy5fZ2V0SXRlbXNBcnJheSgpO2lmKGlbdF0pe2Zvcig7dGhpcy5fc2tpcFByZWRpY2F0ZUZuKGlbdF0pOylpZighaVt0Kz1lXSlyZXR1cm47dGhpcy5zZXRBY3RpdmVJdGVtKHQpfX1fZ2V0SXRlbXNBcnJheSgpe3JldHVybiB0aGlzLl9pdGVtcyBpbnN0YW5jZW9mIFBhP3RoaXMuX2l0ZW1zLnRvQXJyYXkoKTp0aGlzLl9pdGVtc319LGxnPWNsYXNzIGV4dGVuZHMgQjF7c2V0QWN0aXZlSXRlbSh0KXt0aGlzLmFjdGl2ZUl0ZW0mJnRoaXMuYWN0aXZlSXRlbS5zZXRJbmFjdGl2ZVN0eWxlcygpLHN1cGVyLnNldEFjdGl2ZUl0ZW0odCksdGhpcy5hY3RpdmVJdGVtJiZ0aGlzLmFjdGl2ZUl0ZW0uc2V0QWN0aXZlU3R5bGVzKCl9fSxrdT1jbGFzcyBleHRlbmRzIEIxe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9vcmlnaW49InByb2dyYW0ifXNldEZvY3VzT3JpZ2luKHQpe3JldHVybiB0aGlzLl9vcmlnaW49dCx0aGlzfXNldEFjdGl2ZUl0ZW0odCl7c3VwZXIuc2V0QWN0aXZlSXRlbSh0KSx0aGlzLmFjdGl2ZUl0ZW0mJnRoaXMuYWN0aXZlSXRlbS5mb2N1cyh0aGlzLl9vcmlnaW4pfX0sdWc9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9wbGF0Zm9ybT1lfWlzRGlzYWJsZWQoZSl7cmV0dXJuIGUuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpfWlzVmlzaWJsZShlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuISEobi5vZmZzZXRXaWR0aHx8bi5vZmZzZXRIZWlnaHR8fCJmdW5jdGlvbiI9PXR5cGVvZiBuLmdldENsaWVudFJlY3RzJiZuLmdldENsaWVudFJlY3RzKCkubGVuZ3RoKX0oZSkmJiJ2aXNpYmxlIj09PWdldENvbXB1dGVkU3R5bGUoZSkudmlzaWJpbGl0eX1pc1RhYmJhYmxlKGUpe2lmKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJuITE7bGV0IGk9ZnVuY3Rpb24obil7dHJ5e3JldHVybiBuLmZyYW1lRWxlbWVudH1jYXRjaHtyZXR1cm4gbnVsbH19KGZ1bmN0aW9uKG4pe3JldHVybiBuLm93bmVyRG9jdW1lbnQmJm4ub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93fShlKSk7aWYoaSYmKC0xPT09QzcoaSl8fCF0aGlzLmlzVmlzaWJsZShpKSkpcmV0dXJuITE7bGV0IHI9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLG89QzcoZSk7cmV0dXJuIGUuaGFzQXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiKT8tMSE9PW86ISgiaWZyYW1lIj09PXJ8fCJvYmplY3QiPT09cnx8dGhpcy5fcGxhdGZvcm0uV0VCS0lUJiZ0aGlzLl9wbGF0Zm9ybS5JT1MmJiFmdW5jdGlvbihuKXtsZXQgdD1uLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksZT0iaW5wdXQiPT09dCYmbi50eXBlO3JldHVybiJ0ZXh0Ij09PWV8fCJwYXNzd29yZCI9PT1lfHwic2VsZWN0Ij09PXR8fCJ0ZXh0YXJlYSI9PT10fShlKSkmJigiYXVkaW8iPT09cj8hIWUuaGFzQXR0cmlidXRlKCJjb250cm9scyIpJiYtMSE9PW86InZpZGVvIj09PXI/LTEhPT1vJiYobnVsbCE9PW98fHRoaXMuX3BsYXRmb3JtLkZJUkVGT1h8fGUuaGFzQXR0cmlidXRlKCJjb250cm9scyIpKTplLnRhYkluZGV4Pj0wKX1pc0ZvY3VzYWJsZShlLGkpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4hZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiJpbnB1dCI9PW4ubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0obikmJiJoaWRkZW4iPT1uLnR5cGV9KG4pJiYoZnVuY3Rpb24obil7bGV0IHQ9bi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT10fHwic2VsZWN0Ij09PXR8fCJidXR0b24iPT09dHx8InRleHRhcmVhIj09PXR9KG4pfHxmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuImEiPT1uLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9KG4pJiZuLmhhc0F0dHJpYnV0ZSgiaHJlZiIpfShuKXx8bi5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpfHxENyhuKSl9KGUpJiYhdGhpcy5pc0Rpc2FibGVkKGUpJiYoaT8uaWdub3JlVmlzaWJpbGl0eXx8dGhpcy5pc1Zpc2libGUoZSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKFZuKSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCk7ZnVuY3Rpb24gRDcobil7aWYoIW4uaGFzQXR0cmlidXRlKCJ0YWJpbmRleCIpfHx2b2lkIDA9PT1uLnRhYkluZGV4KXJldHVybiExO2xldCB0PW4uZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpO3JldHVybiEoIXR8fGlzTmFOKHBhcnNlSW50KHQsMTApKSl9ZnVuY3Rpb24gQzcobil7aWYoIUQ3KG4pKXJldHVybiBudWxsO2xldCB0PXBhcnNlSW50KG4uZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpfHwiIiwxMCk7cmV0dXJuIGlzTmFOKHQpPy0xOnR9dmFyIEx2PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuX2NoZWNrZXI9ZSx0aGlzLl9uZ1pvbmU9aSx0aGlzLl9kb2N1bWVudD1yfWNyZWF0ZShlLGk9ITEpe3JldHVybiBuZXcgY2xhc3N7Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH1zZXQgZW5hYmxlZCh0KXt0aGlzLl9lbmFibGVkPXQsdGhpcy5fc3RhcnRBbmNob3ImJnRoaXMuX2VuZEFuY2hvciYmKHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KHQsdGhpcy5fc3RhcnRBbmNob3IpLHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KHQsdGhpcy5fZW5kQW5jaG9yKSl9Y29uc3RydWN0b3IodCxlLGkscixvPSExKXt0aGlzLl9lbGVtZW50PXQsdGhpcy5fY2hlY2tlcj1lLHRoaXMuX25nWm9uZT1pLHRoaXMuX2RvY3VtZW50PXIsdGhpcy5faGFzQXR0YWNoZWQ9ITEsdGhpcy5zdGFydEFuY2hvckxpc3RlbmVyPSgpPT50aGlzLmZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudCgpLHRoaXMuZW5kQW5jaG9yTGlzdGVuZXI9KCk9PnRoaXMuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudCgpLHRoaXMuX2VuYWJsZWQ9ITAsb3x8dGhpcy5hdHRhY2hBbmNob3JzKCl9ZGVzdHJveSgpe2xldCB0PXRoaXMuX3N0YXJ0QW5jaG9yLGU9dGhpcy5fZW5kQW5jaG9yO3QmJih0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLnN0YXJ0QW5jaG9yTGlzdGVuZXIpLHQucmVtb3ZlKCkpLGUmJihlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLmVuZEFuY2hvckxpc3RlbmVyKSxlLnJlbW92ZSgpKSx0aGlzLl9zdGFydEFuY2hvcj10aGlzLl9lbmRBbmNob3I9bnVsbCx0aGlzLl9oYXNBdHRhY2hlZD0hMX1hdHRhY2hBbmNob3JzKCl7cmV0dXJuISF0aGlzLl9oYXNBdHRhY2hlZHx8KHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX3N0YXJ0QW5jaG9yfHwodGhpcy5fc3RhcnRBbmNob3I9dGhpcy5fY3JlYXRlQW5jaG9yKCksdGhpcy5fc3RhcnRBbmNob3IuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuc3RhcnRBbmNob3JMaXN0ZW5lcikpLHRoaXMuX2VuZEFuY2hvcnx8KHRoaXMuX2VuZEFuY2hvcj10aGlzLl9jcmVhdGVBbmNob3IoKSx0aGlzLl9lbmRBbmNob3IuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuZW5kQW5jaG9yTGlzdGVuZXIpKX0pLHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZSYmKHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5fc3RhcnRBbmNob3IsdGhpcy5fZWxlbWVudCksdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLl9lbmRBbmNob3IsdGhpcy5fZWxlbWVudC5uZXh0U2libGluZyksdGhpcy5faGFzQXR0YWNoZWQ9ITApLHRoaXMuX2hhc0F0dGFjaGVkKX1mb2N1c0luaXRpYWxFbGVtZW50V2hlblJlYWR5KHQpe3JldHVybiBuZXcgUHJvbWlzZShlPT57dGhpcy5fZXhlY3V0ZU9uU3RhYmxlKCgpPT5lKHRoaXMuZm9jdXNJbml0aWFsRWxlbWVudCh0KSkpfSl9Zm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudFdoZW5SZWFkeSh0KXtyZXR1cm4gbmV3IFByb21pc2UoZT0+e3RoaXMuX2V4ZWN1dGVPblN0YWJsZSgoKT0+ZSh0aGlzLmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQodCkpKX0pfWZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudFdoZW5SZWFkeSh0KXtyZXR1cm4gbmV3IFByb21pc2UoZT0+e3RoaXMuX2V4ZWN1dGVPblN0YWJsZSgoKT0+ZSh0aGlzLmZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudCh0KSkpfSl9X2dldFJlZ2lvbkJvdW5kYXJ5KHQpe2xldCBlPXRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvckFsbChgW2Nkay1mb2N1cy1yZWdpb24tJHt0fV0sIFtjZGtGb2N1c1JlZ2lvbiR7dH1dLCBbY2RrLWZvY3VzLSR7dH1dYCk7cmV0dXJuInN0YXJ0Ij09dD9lLmxlbmd0aD9lWzBdOnRoaXMuX2dldEZpcnN0VGFiYmFibGVFbGVtZW50KHRoaXMuX2VsZW1lbnQpOmUubGVuZ3RoP2VbZS5sZW5ndGgtMV06dGhpcy5fZ2V0TGFzdFRhYmJhYmxlRWxlbWVudCh0aGlzLl9lbGVtZW50KX1mb2N1c0luaXRpYWxFbGVtZW50KHQpe2xldCBlPXRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvcigiW2Nkay1mb2N1cy1pbml0aWFsXSwgW2Nka0ZvY3VzSW5pdGlhbF0iKTtpZihlKXtpZighdGhpcy5fY2hlY2tlci5pc0ZvY3VzYWJsZShlKSl7bGV0IGk9dGhpcy5fZ2V0Rmlyc3RUYWJiYWJsZUVsZW1lbnQoZSk7cmV0dXJuIGk/LmZvY3VzKHQpLCEhaX1yZXR1cm4gZS5mb2N1cyh0KSwhMH1yZXR1cm4gdGhpcy5mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KHQpfWZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQodCl7bGV0IGU9dGhpcy5fZ2V0UmVnaW9uQm91bmRhcnkoInN0YXJ0Iik7cmV0dXJuIGUmJmUuZm9jdXModCksISFlfWZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudCh0KXtsZXQgZT10aGlzLl9nZXRSZWdpb25Cb3VuZGFyeSgiZW5kIik7cmV0dXJuIGUmJmUuZm9jdXModCksISFlfWhhc0F0dGFjaGVkKCl7cmV0dXJuIHRoaXMuX2hhc0F0dGFjaGVkfV9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudCh0KXtpZih0aGlzLl9jaGVja2VyLmlzRm9jdXNhYmxlKHQpJiZ0aGlzLl9jaGVja2VyLmlzVGFiYmFibGUodCkpcmV0dXJuIHQ7bGV0IGU9dC5jaGlsZHJlbjtmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyl7bGV0IHI9ZVtpXS5ub2RlVHlwZT09PXRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERT90aGlzLl9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudChlW2ldKTpudWxsO2lmKHIpcmV0dXJuIHJ9cmV0dXJuIG51bGx9X2dldExhc3RUYWJiYWJsZUVsZW1lbnQodCl7aWYodGhpcy5fY2hlY2tlci5pc0ZvY3VzYWJsZSh0KSYmdGhpcy5fY2hlY2tlci5pc1RhYmJhYmxlKHQpKXJldHVybiB0O2xldCBlPXQuY2hpbGRyZW47Zm9yKGxldCBpPWUubGVuZ3RoLTE7aT49MDtpLS0pe2xldCByPWVbaV0ubm9kZVR5cGU9PT10aGlzLl9kb2N1bWVudC5FTEVNRU5UX05PREU/dGhpcy5fZ2V0TGFzdFRhYmJhYmxlRWxlbWVudChlW2ldKTpudWxsO2lmKHIpcmV0dXJuIHJ9cmV0dXJuIG51bGx9X2NyZWF0ZUFuY2hvcigpe2xldCB0PXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0aGlzLl90b2dnbGVBbmNob3JUYWJJbmRleCh0aGlzLl9lbmFibGVkLHQpLHQuY2xhc3NMaXN0LmFkZCgiY2RrLXZpc3VhbGx5LWhpZGRlbiIpLHQuY2xhc3NMaXN0LmFkZCgiY2RrLWZvY3VzLXRyYXAtYW5jaG9yIiksdC5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwidHJ1ZSIpLHR9X3RvZ2dsZUFuY2hvclRhYkluZGV4KHQsZSl7dD9lLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCIwIik6ZS5yZW1vdmVBdHRyaWJ1dGUoInRhYmluZGV4Iil9dG9nZ2xlQW5jaG9ycyh0KXt0aGlzLl9zdGFydEFuY2hvciYmdGhpcy5fZW5kQW5jaG9yJiYodGhpcy5fdG9nZ2xlQW5jaG9yVGFiSW5kZXgodCx0aGlzLl9zdGFydEFuY2hvciksdGhpcy5fdG9nZ2xlQW5jaG9yVGFiSW5kZXgodCx0aGlzLl9lbmRBbmNob3IpKX1fZXhlY3V0ZU9uU3RhYmxlKHQpe3RoaXMuX25nWm9uZS5pc1N0YWJsZT90KCk6dGhpcy5fbmdab25lLm9uU3RhYmxlLnBpcGUoTHQoMSkpLnN1YnNjcmliZSh0KX19KGUsdGhpcy5fY2hlY2tlcix0aGlzLl9uZ1pvbmUsdGhpcy5fZG9jdW1lbnQsaSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8odWcpLE8ob3QpLE8oTnQpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKTtmdW5jdGlvbiBCdihuKXtyZXR1cm4gMD09PW4uYnV0dG9uc3x8MD09PW4ub2Zmc2V0WCYmMD09PW4ub2Zmc2V0WX1mdW5jdGlvbiBWdihuKXtsZXQgdD1uLnRvdWNoZXMmJm4udG91Y2hlc1swXXx8bi5jaGFuZ2VkVG91Y2hlcyYmbi5jaGFuZ2VkVG91Y2hlc1swXTtyZXR1cm4hKCF0fHwtMSE9PXQuaWRlbnRpZmllcnx8bnVsbCE9dC5yYWRpdXNYJiYxIT09dC5yYWRpdXNYfHxudWxsIT10LnJhZGl1c1kmJjEhPT10LnJhZGl1c1kpfW5ldyB0ZSgiRk9DVVNfVFJBUF9JTkVSVF9TVFJBVEVHWSIpO3ZhciBnX2U9bmV3IHRlKCJjZGstaW5wdXQtbW9kYWxpdHktZGV0ZWN0b3Itb3B0aW9ucyIpLF9fZT17aWdub3JlS2V5czpbMTgsMTcsMjI0LDkxLDE2XX0sc2c9emEoe3Bhc3NpdmU6ITAsY2FwdHVyZTohMH0pLGJfZT0oKCk9PntjbGFzcyBue2dldCBtb3N0UmVjZW50TW9kYWxpdHkoKXtyZXR1cm4gdGhpcy5fbW9kYWxpdHkudmFsdWV9Y29uc3RydWN0b3IoZSxpLHIsbyl7dGhpcy5fcGxhdGZvcm09ZSx0aGlzLl9tb3N0UmVjZW50VGFyZ2V0PW51bGwsdGhpcy5fbW9kYWxpdHk9bmV3IHhyKG51bGwpLHRoaXMuX2xhc3RUb3VjaE1zPTAsdGhpcy5fb25LZXlkb3duPWE9Pnt0aGlzLl9vcHRpb25zPy5pZ25vcmVLZXlzPy5zb21lKHM9PnM9PT1hLmtleUNvZGUpfHwodGhpcy5fbW9kYWxpdHkubmV4dCgia2V5Ym9hcmQiKSx0aGlzLl9tb3N0UmVjZW50VGFyZ2V0PWJzKGEpKX0sdGhpcy5fb25Nb3VzZWRvd249YT0+e0RhdGUubm93KCktdGhpcy5fbGFzdFRvdWNoTXM8NjUwfHwodGhpcy5fbW9kYWxpdHkubmV4dChCdihhKT8ia2V5Ym9hcmQiOiJtb3VzZSIpLHRoaXMuX21vc3RSZWNlbnRUYXJnZXQ9YnMoYSkpfSx0aGlzLl9vblRvdWNoc3RhcnQ9YT0+e1Z2KGEpP3RoaXMuX21vZGFsaXR5Lm5leHQoImtleWJvYXJkIik6KHRoaXMuX2xhc3RUb3VjaE1zPURhdGUubm93KCksdGhpcy5fbW9kYWxpdHkubmV4dCgidG91Y2giKSx0aGlzLl9tb3N0UmVjZW50VGFyZ2V0PWJzKGEpKX0sdGhpcy5fb3B0aW9ucz17Li4uX19lLC4uLm99LHRoaXMubW9kYWxpdHlEZXRlY3RlZD10aGlzLl9tb2RhbGl0eS5waXBlKG9zKDEpKSx0aGlzLm1vZGFsaXR5Q2hhbmdlZD10aGlzLm1vZGFsaXR5RGV0ZWN0ZWQucGlwZShyaSgpKSxlLmlzQnJvd3NlciYmaS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3IuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5fb25LZXlkb3duLHNnKSxyLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5fb25Nb3VzZWRvd24sc2cpLHIuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5fb25Ub3VjaHN0YXJ0LHNnKX0pfW5nT25EZXN0cm95KCl7dGhpcy5fbW9kYWxpdHkuY29tcGxldGUoKSx0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJihkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9vbktleWRvd24sc2cpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5fb25Nb3VzZWRvd24sc2cpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX29uVG91Y2hzdGFydCxzZykpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKFZuKSxPKG90KSxPKE50KSxPKGdfZSw4KSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksdl9lPW5ldyB0ZSgibGl2ZUFubm91bmNlckVsZW1lbnQiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9fSkseF9lPW5ldyB0ZSgiTElWRV9BTk5PVU5DRVJfREVGQVVMVF9PUFRJT05TIiksQ19lPTAsSHY9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLl9uZ1pvbmU9aSx0aGlzLl9kZWZhdWx0T3B0aW9ucz1vLHRoaXMuX2RvY3VtZW50PXIsdGhpcy5fbGl2ZUVsZW1lbnQ9ZXx8dGhpcy5fY3JlYXRlTGl2ZUVsZW1lbnQoKX1hbm5vdW5jZShlLC4uLmkpe2xldCBvLGEscj10aGlzLl9kZWZhdWx0T3B0aW9ucztyZXR1cm4gMT09PWkubGVuZ3RoJiYibnVtYmVyIj09dHlwZW9mIGlbMF0/YT1pWzBdOltvLGFdPWksdGhpcy5jbGVhcigpLGNsZWFyVGltZW91dCh0aGlzLl9wcmV2aW91c1RpbWVvdXQpLG98fChvPXImJnIucG9saXRlbmVzcz9yLnBvbGl0ZW5lc3M6InBvbGl0ZSIpLG51bGw9PWEmJnImJihhPXIuZHVyYXRpb24pLHRoaXMuX2xpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1saXZlIixvKSx0aGlzLl9saXZlRWxlbWVudC5pZCYmdGhpcy5fZXhwb3NlQW5ub3VuY2VyVG9Nb2RhbHModGhpcy5fbGl2ZUVsZW1lbnQuaWQpLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+KHRoaXMuX2N1cnJlbnRQcm9taXNlfHwodGhpcy5fY3VycmVudFByb21pc2U9bmV3IFByb21pc2Uocz0+dGhpcy5fY3VycmVudFJlc29sdmU9cykpLGNsZWFyVGltZW91dCh0aGlzLl9wcmV2aW91c1RpbWVvdXQpLHRoaXMuX3ByZXZpb3VzVGltZW91dD1zZXRUaW1lb3V0KCgpPT57dGhpcy5fbGl2ZUVsZW1lbnQudGV4dENvbnRlbnQ9ZSwibnVtYmVyIj09dHlwZW9mIGEmJih0aGlzLl9wcmV2aW91c1RpbWVvdXQ9c2V0VGltZW91dCgoKT0+dGhpcy5jbGVhcigpLGEpKSx0aGlzLl9jdXJyZW50UmVzb2x2ZSgpLHRoaXMuX2N1cnJlbnRQcm9taXNlPXRoaXMuX2N1cnJlbnRSZXNvbHZlPXZvaWQgMH0sMTAwKSx0aGlzLl9jdXJyZW50UHJvbWlzZSkpfWNsZWFyKCl7dGhpcy5fbGl2ZUVsZW1lbnQmJih0aGlzLl9saXZlRWxlbWVudC50ZXh0Q29udGVudD0iIil9bmdPbkRlc3Ryb3koKXtjbGVhclRpbWVvdXQodGhpcy5fcHJldmlvdXNUaW1lb3V0KSx0aGlzLl9saXZlRWxlbWVudD8ucmVtb3ZlKCksdGhpcy5fbGl2ZUVsZW1lbnQ9bnVsbCx0aGlzLl9jdXJyZW50UmVzb2x2ZT8uKCksdGhpcy5fY3VycmVudFByb21pc2U9dGhpcy5fY3VycmVudFJlc29sdmU9dm9pZCAwfV9jcmVhdGVMaXZlRWxlbWVudCgpe2xldCBlPSJjZGstbGl2ZS1hbm5vdW5jZXItZWxlbWVudCIsaT10aGlzLl9kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGUpLHI9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Zm9yKGxldCBvPTA7bzxpLmxlbmd0aDtvKyspaVtvXS5yZW1vdmUoKTtyZXR1cm4gci5jbGFzc0xpc3QuYWRkKGUpLHIuY2xhc3NMaXN0LmFkZCgiY2RrLXZpc3VhbGx5LWhpZGRlbiIpLHIuc2V0QXR0cmlidXRlKCJhcmlhLWF0b21pYyIsInRydWUiKSxyLnNldEF0dHJpYnV0ZSgiYXJpYS1saXZlIiwicG9saXRlIiksci5pZD0iY2RrLWxpdmUtYW5ub3VuY2VyLSIrQ19lKyssdGhpcy5fZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyKSxyfV9leHBvc2VBbm5vdW5jZXJUb01vZGFscyhlKXtsZXQgaT10aGlzLl9kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdib2R5ID4gLmNkay1vdmVybGF5LWNvbnRhaW5lciBbYXJpYS1tb2RhbD0idHJ1ZSJdJyk7Zm9yKGxldCByPTA7cjxpLmxlbmd0aDtyKyspe2xldCBvPWlbcl0sYT1vLmdldEF0dHJpYnV0ZSgiYXJpYS1vd25zIik7YT8tMT09PWEuaW5kZXhPZihlKSYmby5zZXRBdHRyaWJ1dGUoImFyaWEtb3ducyIsYSsiICIrZSk6by5zZXRBdHRyaWJ1dGUoImFyaWEtb3ducyIsZSl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKHZfZSw4KSxPKG90KSxPKE50KSxPKHhfZSw4KSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksTV9lPW5ldyB0ZSgiY2RrLWZvY3VzLW1vbml0b3ItZGVmYXVsdC1vcHRpb25zIiksTjE9emEoe3Bhc3NpdmU6ITAsY2FwdHVyZTohMH0pLGZvPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyxhKXt0aGlzLl9uZ1pvbmU9ZSx0aGlzLl9wbGF0Zm9ybT1pLHRoaXMuX2lucHV0TW9kYWxpdHlEZXRlY3Rvcj1yLHRoaXMuX29yaWdpbj1udWxsLHRoaXMuX3dpbmRvd0ZvY3VzZWQ9ITEsdGhpcy5fb3JpZ2luRnJvbVRvdWNoSW50ZXJhY3Rpb249ITEsdGhpcy5fZWxlbWVudEluZm89bmV3IE1hcCx0aGlzLl9tb25pdG9yZWRFbGVtZW50Q291bnQ9MCx0aGlzLl9yb290Tm9kZUZvY3VzTGlzdGVuZXJDb3VudD1uZXcgTWFwLHRoaXMuX3dpbmRvd0ZvY3VzTGlzdGVuZXI9KCk9Pnt0aGlzLl93aW5kb3dGb2N1c2VkPSEwLHRoaXMuX3dpbmRvd0ZvY3VzVGltZW91dElkPXdpbmRvdy5zZXRUaW1lb3V0KCgpPT50aGlzLl93aW5kb3dGb2N1c2VkPSExKX0sdGhpcy5fc3RvcElucHV0TW9kYWxpdHlEZXRlY3Rvcj1uZXcgRWUsdGhpcy5fcm9vdE5vZGVGb2N1c0FuZEJsdXJMaXN0ZW5lcj1zPT57Zm9yKGxldCBjPWJzKHMpO2M7Yz1jLnBhcmVudEVsZW1lbnQpImZvY3VzIj09PXMudHlwZT90aGlzLl9vbkZvY3VzKHMsYyk6dGhpcy5fb25CbHVyKHMsYyl9LHRoaXMuX2RvY3VtZW50PW8sdGhpcy5fZGV0ZWN0aW9uTW9kZT1hPy5kZXRlY3Rpb25Nb2RlfHwwfW1vbml0b3IoZSxpPSExKXtsZXQgcj1VYShlKTtpZighdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyfHwxIT09ci5ub2RlVHlwZSlyZXR1cm4gJHQobnVsbCk7bGV0IG89ZnVuY3Rpb24obil7aWYoZnVuY3Rpb24oKXtpZihudWxsPT1vMil7bGV0IG49dHlwZW9mIGRvY3VtZW50PCJ1Ij9kb2N1bWVudC5oZWFkOm51bGw7bzI9ISghbnx8IW4uY3JlYXRlU2hhZG93Um9vdCYmIW4uYXR0YWNoU2hhZG93KX1yZXR1cm4gbzJ9KCkpe2xldCB0PW4uZ2V0Um9vdE5vZGU/bi5nZXRSb290Tm9kZSgpOm51bGw7aWYodHlwZW9mIFNoYWRvd1Jvb3Q8InUiJiZTaGFkb3dSb290JiZ0IGluc3RhbmNlb2YgU2hhZG93Um9vdClyZXR1cm4gdH1yZXR1cm4gbnVsbH0ocil8fHRoaXMuX2dldERvY3VtZW50KCksYT10aGlzLl9lbGVtZW50SW5mby5nZXQocik7aWYoYSlyZXR1cm4gaSYmKGEuY2hlY2tDaGlsZHJlbj0hMCksYS5zdWJqZWN0O2xldCBzPXtjaGVja0NoaWxkcmVuOmksc3ViamVjdDpuZXcgRWUscm9vdE5vZGU6b307cmV0dXJuIHRoaXMuX2VsZW1lbnRJbmZvLnNldChyLHMpLHRoaXMuX3JlZ2lzdGVyR2xvYmFsTGlzdGVuZXJzKHMpLHMuc3ViamVjdH1zdG9wTW9uaXRvcmluZyhlKXtsZXQgaT1VYShlKSxyPXRoaXMuX2VsZW1lbnRJbmZvLmdldChpKTtyJiYoci5zdWJqZWN0LmNvbXBsZXRlKCksdGhpcy5fc2V0Q2xhc3NlcyhpKSx0aGlzLl9lbGVtZW50SW5mby5kZWxldGUoaSksdGhpcy5fcmVtb3ZlR2xvYmFsTGlzdGVuZXJzKHIpKX1mb2N1c1ZpYShlLGkscil7bGV0IG89VWEoZSk7bz09PXRoaXMuX2dldERvY3VtZW50KCkuYWN0aXZlRWxlbWVudD90aGlzLl9nZXRDbG9zZXN0RWxlbWVudHNJbmZvKG8pLmZvckVhY2goKFtzLGxdKT0+dGhpcy5fb3JpZ2luQ2hhbmdlZChzLGksbCkpOih0aGlzLl9zZXRPcmlnaW4oaSksImZ1bmN0aW9uIj09dHlwZW9mIG8uZm9jdXMmJm8uZm9jdXMocikpfW5nT25EZXN0cm95KCl7dGhpcy5fZWxlbWVudEluZm8uZm9yRWFjaCgoZSxpKT0+dGhpcy5zdG9wTW9uaXRvcmluZyhpKSl9X2dldERvY3VtZW50KCl7cmV0dXJuIHRoaXMuX2RvY3VtZW50fHxkb2N1bWVudH1fZ2V0V2luZG93KCl7cmV0dXJuIHRoaXMuX2dldERvY3VtZW50KCkuZGVmYXVsdFZpZXd8fHdpbmRvd31fZ2V0Rm9jdXNPcmlnaW4oZSl7cmV0dXJuIHRoaXMuX29yaWdpbj90aGlzLl9vcmlnaW5Gcm9tVG91Y2hJbnRlcmFjdGlvbj90aGlzLl9zaG91bGRCZUF0dHJpYnV0ZWRUb1RvdWNoKGUpPyJ0b3VjaCI6InByb2dyYW0iOnRoaXMuX29yaWdpbjp0aGlzLl93aW5kb3dGb2N1c2VkJiZ0aGlzLl9sYXN0Rm9jdXNPcmlnaW4/dGhpcy5fbGFzdEZvY3VzT3JpZ2luOmUmJnRoaXMuX2lzTGFzdEludGVyYWN0aW9uRnJvbUlucHV0TGFiZWwoZSk/Im1vdXNlIjoicHJvZ3JhbSJ9X3Nob3VsZEJlQXR0cmlidXRlZFRvVG91Y2goZSl7cmV0dXJuIDE9PT10aGlzLl9kZXRlY3Rpb25Nb2RlfHwhIWU/LmNvbnRhaW5zKHRoaXMuX2lucHV0TW9kYWxpdHlEZXRlY3Rvci5fbW9zdFJlY2VudFRhcmdldCl9X3NldENsYXNzZXMoZSxpKXtlLmNsYXNzTGlzdC50b2dnbGUoImNkay1mb2N1c2VkIiwhIWkpLGUuY2xhc3NMaXN0LnRvZ2dsZSgiY2RrLXRvdWNoLWZvY3VzZWQiLCJ0b3VjaCI9PT1pKSxlLmNsYXNzTGlzdC50b2dnbGUoImNkay1rZXlib2FyZC1mb2N1c2VkIiwia2V5Ym9hcmQiPT09aSksZS5jbGFzc0xpc3QudG9nZ2xlKCJjZGstbW91c2UtZm9jdXNlZCIsIm1vdXNlIj09PWkpLGUuY2xhc3NMaXN0LnRvZ2dsZSgiY2RrLXByb2dyYW0tZm9jdXNlZCIsInByb2dyYW0iPT09aSl9X3NldE9yaWdpbihlLGk9ITEpe3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX29yaWdpbj1lLHRoaXMuX29yaWdpbkZyb21Ub3VjaEludGVyYWN0aW9uPSJ0b3VjaCI9PT1lJiZpLDA9PT10aGlzLl9kZXRlY3Rpb25Nb2RlJiYoY2xlYXJUaW1lb3V0KHRoaXMuX29yaWdpblRpbWVvdXRJZCksdGhpcy5fb3JpZ2luVGltZW91dElkPXNldFRpbWVvdXQoKCk9PnRoaXMuX29yaWdpbj1udWxsLHRoaXMuX29yaWdpbkZyb21Ub3VjaEludGVyYWN0aW9uPzY1MDoxKSl9KX1fb25Gb2N1cyhlLGkpe2xldCByPXRoaXMuX2VsZW1lbnRJbmZvLmdldChpKSxvPWJzKGUpOyFyfHwhci5jaGVja0NoaWxkcmVuJiZpIT09b3x8dGhpcy5fb3JpZ2luQ2hhbmdlZChpLHRoaXMuX2dldEZvY3VzT3JpZ2luKG8pLHIpfV9vbkJsdXIoZSxpKXtsZXQgcj10aGlzLl9lbGVtZW50SW5mby5nZXQoaSk7IXJ8fHIuY2hlY2tDaGlsZHJlbiYmZS5yZWxhdGVkVGFyZ2V0IGluc3RhbmNlb2YgTm9kZSYmaS5jb250YWlucyhlLnJlbGF0ZWRUYXJnZXQpfHwodGhpcy5fc2V0Q2xhc3NlcyhpKSx0aGlzLl9lbWl0T3JpZ2luKHIsbnVsbCkpfV9lbWl0T3JpZ2luKGUsaSl7ZS5zdWJqZWN0Lm9ic2VydmVycy5sZW5ndGgmJnRoaXMuX25nWm9uZS5ydW4oKCk9PmUuc3ViamVjdC5uZXh0KGkpKX1fcmVnaXN0ZXJHbG9iYWxMaXN0ZW5lcnMoZSl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm47bGV0IGk9ZS5yb290Tm9kZSxyPXRoaXMuX3Jvb3ROb2RlRm9jdXNMaXN0ZW5lckNvdW50LmdldChpKXx8MDtyfHx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntpLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9yb290Tm9kZUZvY3VzQW5kQmx1ckxpc3RlbmVyLE4xKSxpLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX3Jvb3ROb2RlRm9jdXNBbmRCbHVyTGlzdGVuZXIsTjEpfSksdGhpcy5fcm9vdE5vZGVGb2N1c0xpc3RlbmVyQ291bnQuc2V0KGkscisxKSwxPT0rK3RoaXMuX21vbml0b3JlZEVsZW1lbnRDb3VudCYmKHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2dldFdpbmRvdygpLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl93aW5kb3dGb2N1c0xpc3RlbmVyKX0pLHRoaXMuX2lucHV0TW9kYWxpdHlEZXRlY3Rvci5tb2RhbGl0eURldGVjdGVkLnBpcGUoaXQodGhpcy5fc3RvcElucHV0TW9kYWxpdHlEZXRlY3RvcikpLnN1YnNjcmliZShvPT57dGhpcy5fc2V0T3JpZ2luKG8sITApfSkpfV9yZW1vdmVHbG9iYWxMaXN0ZW5lcnMoZSl7bGV0IGk9ZS5yb290Tm9kZTtpZih0aGlzLl9yb290Tm9kZUZvY3VzTGlzdGVuZXJDb3VudC5oYXMoaSkpe2xldCByPXRoaXMuX3Jvb3ROb2RlRm9jdXNMaXN0ZW5lckNvdW50LmdldChpKTtyPjE/dGhpcy5fcm9vdE5vZGVGb2N1c0xpc3RlbmVyQ291bnQuc2V0KGksci0xKTooaS5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5fcm9vdE5vZGVGb2N1c0FuZEJsdXJMaXN0ZW5lcixOMSksaS5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl9yb290Tm9kZUZvY3VzQW5kQmx1ckxpc3RlbmVyLE4xKSx0aGlzLl9yb290Tm9kZUZvY3VzTGlzdGVuZXJDb3VudC5kZWxldGUoaSkpfS0tdGhpcy5fbW9uaXRvcmVkRWxlbWVudENvdW50fHwodGhpcy5fZ2V0V2luZG93KCkucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuX3dpbmRvd0ZvY3VzTGlzdGVuZXIpLHRoaXMuX3N0b3BJbnB1dE1vZGFsaXR5RGV0ZWN0b3IubmV4dCgpLGNsZWFyVGltZW91dCh0aGlzLl93aW5kb3dGb2N1c1RpbWVvdXRJZCksY2xlYXJUaW1lb3V0KHRoaXMuX29yaWdpblRpbWVvdXRJZCkpfV9vcmlnaW5DaGFuZ2VkKGUsaSxyKXt0aGlzLl9zZXRDbGFzc2VzKGUsaSksdGhpcy5fZW1pdE9yaWdpbihyLGkpLHRoaXMuX2xhc3RGb2N1c09yaWdpbj1pfV9nZXRDbG9zZXN0RWxlbWVudHNJbmZvKGUpe2xldCBpPVtdO3JldHVybiB0aGlzLl9lbGVtZW50SW5mby5mb3JFYWNoKChyLG8pPT57KG89PT1lfHxyLmNoZWNrQ2hpbGRyZW4mJm8uY29udGFpbnMoZSkpJiZpLnB1c2goW28scl0pfSksaX1faXNMYXN0SW50ZXJhY3Rpb25Gcm9tSW5wdXRMYWJlbChlKXtsZXR7X21vc3RSZWNlbnRUYXJnZXQ6aSxtb3N0UmVjZW50TW9kYWxpdHk6cn09dGhpcy5faW5wdXRNb2RhbGl0eURldGVjdG9yO2lmKCJtb3VzZSIhPT1yfHwhaXx8aT09PWV8fCJJTlBVVCIhPT1lLm5vZGVOYW1lJiYiVEVYVEFSRUEiIT09ZS5ub2RlTmFtZXx8ZS5kaXNhYmxlZClyZXR1cm4hMTtsZXQgbz1lLmxhYmVscztpZihvKWZvcihsZXQgYT0wO2E8by5sZW5ndGg7YSsrKWlmKG9bYV0uY29udGFpbnMoaSkpcmV0dXJuITA7cmV0dXJuITF9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8ob3QpLE8oVm4pLE8oYl9lKSxPKE50LDgpLE8oTV9lLDgpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxBNz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX2ZvY3VzTW9uaXRvcj1pLHRoaXMuX2ZvY3VzT3JpZ2luPW51bGwsdGhpcy5jZGtGb2N1c0NoYW5nZT1uZXcgRn1nZXQgZm9jdXNPcmlnaW4oKXtyZXR1cm4gdGhpcy5fZm9jdXNPcmlnaW59bmdBZnRlclZpZXdJbml0KCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3RoaXMuX21vbml0b3JTdWJzY3JpcHRpb249dGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IoZSwxPT09ZS5ub2RlVHlwZSYmZS5oYXNBdHRyaWJ1dGUoImNka01vbml0b3JTdWJ0cmVlRm9jdXMiKSkuc3Vic2NyaWJlKGk9Pnt0aGlzLl9mb2N1c09yaWdpbj1pLHRoaXMuY2RrRm9jdXNDaGFuZ2UuZW1pdChpKX0pfW5nT25EZXN0cm95KCl7dGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnRSZWYpLHRoaXMuX21vbml0b3JTdWJzY3JpcHRpb24mJnRoaXMuX21vbml0b3JTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyh4ZSksQyhmbykpfSxuLlx1MDI3NWRpcj1NZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGtNb25pdG9yRWxlbWVudEZvY3VzIiwiIl0sWyIiLCJjZGtNb25pdG9yU3VidHJlZUZvY3VzIiwiIl1dLG91dHB1dHM6e2Nka0ZvY3VzQ2hhbmdlOiJjZGtGb2N1c0NoYW5nZSJ9LGV4cG9ydEFzOlsiY2RrTW9uaXRvckZvY3VzIl19KSxufSkoKSxNNz0iY2RrLWhpZ2gtY29udHJhc3QtYmxhY2stb24td2hpdGUiLHc3PSJjZGstaGlnaC1jb250cmFzdC13aGl0ZS1vbi1ibGFjayIsYzI9ImNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSIsaDI9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuX3BsYXRmb3JtPWUsdGhpcy5fZG9jdW1lbnQ9aSx0aGlzLl9icmVha3BvaW50U3Vic2NyaXB0aW9uPSRuKE52KS5vYnNlcnZlKCIoZm9yY2VkLWNvbG9yczogYWN0aXZlKSIpLnN1YnNjcmliZSgoKT0+e3RoaXMuX2hhc0NoZWNrZWRIaWdoQ29udHJhc3RNb2RlJiYodGhpcy5faGFzQ2hlY2tlZEhpZ2hDb250cmFzdE1vZGU9ITEsdGhpcy5fYXBwbHlCb2R5SGlnaENvbnRyYXN0TW9kZUNzc0NsYXNzZXMoKSl9KX1nZXRIaWdoQ29udHJhc3RNb2RlKCl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm4gMDtsZXQgZT10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtlLnN0eWxlLmJhY2tncm91bmRDb2xvcj0icmdiKDEsMiwzKSIsZS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHRoaXMuX2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZSk7bGV0IGk9dGhpcy5fZG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvdyxyPWkmJmkuZ2V0Q29tcHV0ZWRTdHlsZT9pLmdldENvbXB1dGVkU3R5bGUoZSk6bnVsbCxvPShyJiZyLmJhY2tncm91bmRDb2xvcnx8IiIpLnJlcGxhY2UoLyAvZywiIik7c3dpdGNoKGUucmVtb3ZlKCksbyl7Y2FzZSJyZ2IoMCwwLDApIjpjYXNlInJnYig0NSw1MCw1NCkiOmNhc2UicmdiKDMyLDMyLDMyKSI6cmV0dXJuIDI7Y2FzZSJyZ2IoMjU1LDI1NSwyNTUpIjpjYXNlInJnYigyNTUsMjUwLDIzOSkiOnJldHVybiAxfXJldHVybiAwfW5nT25EZXN0cm95KCl7dGhpcy5fYnJlYWtwb2ludFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfV9hcHBseUJvZHlIaWdoQ29udHJhc3RNb2RlQ3NzQ2xhc3Nlcygpe2lmKCF0aGlzLl9oYXNDaGVja2VkSGlnaENvbnRyYXN0TW9kZSYmdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiZ0aGlzLl9kb2N1bWVudC5ib2R5KXtsZXQgZT10aGlzLl9kb2N1bWVudC5ib2R5LmNsYXNzTGlzdDtlLnJlbW92ZShjMixNNyx3NyksdGhpcy5faGFzQ2hlY2tlZEhpZ2hDb250cmFzdE1vZGU9ITA7bGV0IGk9dGhpcy5nZXRIaWdoQ29udHJhc3RNb2RlKCk7MT09PWk/ZS5hZGQoYzIsTTcpOjI9PT1pJiZlLmFkZChjMix3Nyl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKFZuKSxPKE50KSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCkscGc9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXtlLl9hcHBseUJvZHlIaWdoQ29udHJhc3RNb2RlQ3NzQ2xhc3NlcygpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKGgyKSl9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe2ltcG9ydHM6W29nXX0pLG59KSgpLHdfZT1uZXcgdGUoImNkay1kaXItZG9jIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiAkbihOdCl9fSksRV9lPS9eKGFyfGNrYnxkdnxoZXxpd3xmYXxucW98cHN8c2R8dWd8dXJ8eWl8LipbLV9dKEFkbG18QXJhYnxIZWJyfE5rb298Um9oZ3xUaGFhKSkoPyEuKlstX10oTGF0bnxDeXJsKSgkfC18XykpKCR8LXxfKS9pLHppPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy52YWx1ZT0ibHRyIix0aGlzLmNoYW5nZT1uZXcgRixlJiYodGhpcy52YWx1ZT1mdW5jdGlvbihuKXtsZXQgdD1uPy50b0xvd2VyQ2FzZSgpfHwiIjtyZXR1cm4iYXV0byI9PT10JiZ0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yPy5sYW5ndWFnZT9FX2UudGVzdChuYXZpZ2F0b3IubGFuZ3VhZ2UpPyJydGwiOiJsdHIiOiJydGwiPT09dD8icnRsIjoibHRyIn0oKGUuYm9keT9lLmJvZHkuZGlyOm51bGwpfHwoZS5kb2N1bWVudEVsZW1lbnQ/ZS5kb2N1bWVudEVsZW1lbnQuZGlyOm51bGwpfHwibHRyIikpfW5nT25EZXN0cm95KCl7dGhpcy5jaGFuZ2UuY29tcGxldGUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyh3X2UsOCkpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLEZ1PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1IKHt9KSxufSkoKSxEX2U9WyJ0ZXh0Il07ZnVuY3Rpb24gSV9lKG4sdCl7aWYoMSZuJiZrKDAsIm1hdC1wc2V1ZG8tY2hlY2tib3giLDYpLDImbil7bGV0IGU9dygpO2IoInN0YXRlIixlLnNlbGVjdGVkPyJjaGVja2VkIjoidW5jaGVja2VkIikoImRpc2FibGVkIixlLmRpc2FibGVkKX19ZnVuY3Rpb24gQV9lKG4sdCl7MSZuJiZrKDAsIm1hdC1wc2V1ZG8tY2hlY2tib3giLDcpLDImbiYmYigiZGlzYWJsZWQiLHcoKS5kaXNhYmxlZCl9ZnVuY3Rpb24gUl9lKG4sdCl7aWYoMSZuJiYoZigwLCJzcGFuIiw4KSxUKDEpLGcoKSksMiZuKXtsZXQgZT13KCk7digxKSxWZSgiKCIsZS5ncm91cC5sYWJlbCwiKSIpfX12YXIgUF9lPVtbWyJtYXQtaWNvbiJdXSwiKiJdLGtfZT1bIm1hdC1pY29uIiwiKiJdLE43PShuZXcgTWwoIjE1LjIuOSIpLCgoKT0+e2NsYXNzIG57fXJldHVybiBuLlNUQU5EQVJEX0NVUlZFPSJjdWJpYy1iZXppZXIoMC40LDAuMCwwLjIsMSkiLG4uREVDRUxFUkFUSU9OX0NVUlZFPSJjdWJpYy1iZXppZXIoMC4wLDAuMCwwLjIsMSkiLG4uQUNDRUxFUkFUSU9OX0NVUlZFPSJjdWJpYy1iZXppZXIoMC40LDAuMCwxLDEpIixuLlNIQVJQX0NVUlZFPSJjdWJpYy1iZXppZXIoMC40LDAuMCwwLjYsMSkiLG59KSgpKSxMNz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5DT01QTEVYPSIzNzVtcyIsbi5FTlRFUklORz0iMjI1bXMiLG4uRVhJVElORz0iMTk1bXMiLG59KSgpLEZfZT1uZXcgdGUoIm1hdC1zYW5pdHktY2hlY2tzIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiEwfX0pLGRuPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuX3Nhbml0eUNoZWNrcz1pLHRoaXMuX2RvY3VtZW50PXIsdGhpcy5faGFzRG9uZUdsb2JhbENoZWNrcz0hMSxlLl9hcHBseUJvZHlIaWdoQ29udHJhc3RNb2RlQ3NzQ2xhc3NlcygpLHRoaXMuX2hhc0RvbmVHbG9iYWxDaGVja3N8fCh0aGlzLl9oYXNEb25lR2xvYmFsQ2hlY2tzPSEwKX1fY2hlY2tJc0VuYWJsZWQoZSl7cmV0dXJuIUZ2KCkmJigiYm9vbGVhbiI9PXR5cGVvZiB0aGlzLl9zYW5pdHlDaGVja3M/dGhpcy5fc2FuaXR5Q2hlY2tzOiEhdGhpcy5fc2FuaXR5Q2hlY2tzW2VdKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhoMiksTyhGX2UsOCksTyhOdCkpfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1IKHtpbXBvcnRzOltGdSxGdV19KSxufSkoKTtmdW5jdGlvbiBhbyhuKXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyBue2dldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQodCl7dGhpcy5fZGlzYWJsZWQ9dnQodCl9Y29uc3RydWN0b3IoLi4udCl7c3VwZXIoLi4udCksdGhpcy5fZGlzYWJsZWQ9ITF9fX1mdW5jdGlvbiBLbyhuLHQpe3JldHVybiBjbGFzcyBleHRlbmRzIG57Z2V0IGNvbG9yKCl7cmV0dXJuIHRoaXMuX2NvbG9yfXNldCBjb2xvcihlKXtsZXQgaT1lfHx0aGlzLmRlZmF1bHRDb2xvcjtpIT09dGhpcy5fY29sb3ImJih0aGlzLl9jb2xvciYmdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoYG1hdC0ke3RoaXMuX2NvbG9yfWApLGkmJnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKGBtYXQtJHtpfWApLHRoaXMuX2NvbG9yPWkpfWNvbnN0cnVjdG9yKC4uLmUpe3N1cGVyKC4uLmUpLHRoaXMuZGVmYXVsdENvbG9yPXQsdGhpcy5jb2xvcj10fX19ZnVuY3Rpb24gZ28obil7cmV0dXJuIGNsYXNzIGV4dGVuZHMgbntnZXQgZGlzYWJsZVJpcHBsZSgpe3JldHVybiB0aGlzLl9kaXNhYmxlUmlwcGxlfXNldCBkaXNhYmxlUmlwcGxlKHQpe3RoaXMuX2Rpc2FibGVSaXBwbGU9dnQodCl9Y29uc3RydWN0b3IoLi4udCl7c3VwZXIoLi4udCksdGhpcy5fZGlzYWJsZVJpcHBsZT0hMX19fWZ1bmN0aW9uIERjKG4sdD0wKXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyBue2dldCB0YWJJbmRleCgpe3JldHVybiB0aGlzLmRpc2FibGVkPy0xOnRoaXMuX3RhYkluZGV4fXNldCB0YWJJbmRleChlKXt0aGlzLl90YWJJbmRleD1udWxsIT1lP21pKGUpOnRoaXMuZGVmYXVsdFRhYkluZGV4fWNvbnN0cnVjdG9yKC4uLmUpe3N1cGVyKC4uLmUpLHRoaXMuX3RhYkluZGV4PXQsdGhpcy5kZWZhdWx0VGFiSW5kZXg9dH19fWZ1bmN0aW9uIGhnKG4pe3JldHVybiBjbGFzcyBleHRlbmRzIG57dXBkYXRlRXJyb3JTdGF0ZSgpe2xldCB0PXRoaXMuZXJyb3JTdGF0ZSxvPSh0aGlzLmVycm9yU3RhdGVNYXRjaGVyfHx0aGlzLl9kZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXIpLmlzRXJyb3JTdGF0ZSh0aGlzLm5nQ29udHJvbD90aGlzLm5nQ29udHJvbC5jb250cm9sOm51bGwsdGhpcy5fcGFyZW50Rm9ybUdyb3VwfHx0aGlzLl9wYXJlbnRGb3JtKTtvIT09dCYmKHRoaXMuZXJyb3JTdGF0ZT1vLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9Y29uc3RydWN0b3IoLi4udCl7c3VwZXIoLi4udCksdGhpcy5lcnJvclN0YXRlPSExfX19ZnVuY3Rpb24gSDEobil7cmV0dXJuIGNsYXNzIGV4dGVuZHMgbntjb25zdHJ1Y3RvciguLi50KXtzdXBlciguLi50KSx0aGlzLl9pc0luaXRpYWxpemVkPSExLHRoaXMuX3BlbmRpbmdTdWJzY3JpYmVycz1bXSx0aGlzLmluaXRpYWxpemVkPW5ldyBLdChlPT57dGhpcy5faXNJbml0aWFsaXplZD90aGlzLl9ub3RpZnlTdWJzY3JpYmVyKGUpOnRoaXMuX3BlbmRpbmdTdWJzY3JpYmVycy5wdXNoKGUpfSl9X21hcmtJbml0aWFsaXplZCgpe3RoaXMuX2lzSW5pdGlhbGl6ZWQ9ITAsdGhpcy5fcGVuZGluZ1N1YnNjcmliZXJzLmZvckVhY2godGhpcy5fbm90aWZ5U3Vic2NyaWJlciksdGhpcy5fcGVuZGluZ1N1YnNjcmliZXJzPW51bGx9X25vdGlmeVN1YnNjcmliZXIodCl7dC5uZXh0KCksdC5jb21wbGV0ZSgpfX19bmV3IHRlKCJNQVRfREFURV9MT0NBTEUiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuICRuKGFkKX19KSxuZXcgdGUoIm1hdC1kYXRlLWZvcm1hdHMiKTt2YXIgRWg9KCgpPT57Y2xhc3Mgbntpc0Vycm9yU3RhdGUoZSxpKXtyZXR1cm4hIShlJiZlLmludmFsaWQmJihlLnRvdWNoZWR8fGkmJmkuc3VibWl0dGVkKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLFI3PXphKHtwYXNzaXZlOiEwLGNhcHR1cmU6ITB9KSxQNz17ZW50ZXJEdXJhdGlvbjoyMjUsZXhpdER1cmF0aW9uOjE1MH0sazc9emEoe3Bhc3NpdmU6ITAsY2FwdHVyZTohMH0pLE83PVsibW91c2Vkb3duIiwidG91Y2hzdGFydCJdLEY3PVsibW91c2V1cCIsIm1vdXNlbGVhdmUiLCJ0b3VjaGVuZCIsInRvdWNoY2FuY2VsIl0sU2g9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5fdGFyZ2V0PXQsdGhpcy5fbmdab25lPWUsdGhpcy5fcGxhdGZvcm09cix0aGlzLl9pc1BvaW50ZXJEb3duPSExLHRoaXMuX2FjdGl2ZVJpcHBsZXM9bmV3IE1hcCx0aGlzLl9wb2ludGVyVXBFdmVudHNSZWdpc3RlcmVkPSExLHIuaXNCcm93c2VyJiYodGhpcy5fY29udGFpbmVyRWxlbWVudD1VYShpKSl9ZmFkZUluUmlwcGxlKHQsZSxpPXt9KXtsZXQgcj10aGlzLl9jb250YWluZXJSZWN0PXRoaXMuX2NvbnRhaW5lclJlY3R8fHRoaXMuX2NvbnRhaW5lckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz17Li4uUDcsLi4uaS5hbmltYXRpb259O2kuY2VudGVyZWQmJih0PXIubGVmdCtyLndpZHRoLzIsZT1yLnRvcCtyLmhlaWdodC8yKTtsZXQgYT1pLnJhZGl1c3x8ZnVuY3Rpb24obix0LGUpe2xldCBpPU1hdGgubWF4KE1hdGguYWJzKG4tZS5sZWZ0KSxNYXRoLmFicyhuLWUucmlnaHQpKSxyPU1hdGgubWF4KE1hdGguYWJzKHQtZS50b3ApLE1hdGguYWJzKHQtZS5ib3R0b20pKTtyZXR1cm4gTWF0aC5zcXJ0KGkqaStyKnIpfSh0LGUscikscz10LXIubGVmdCxsPWUtci50b3AsYz1vLmVudGVyRHVyYXRpb24sZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtkLmNsYXNzTGlzdC5hZGQoIm1hdC1yaXBwbGUtZWxlbWVudCIpLGQuc3R5bGUubGVmdD1zLWErInB4IixkLnN0eWxlLnRvcD1sLWErInB4IixkLnN0eWxlLmhlaWdodD0yKmErInB4IixkLnN0eWxlLndpZHRoPTIqYSsicHgiLG51bGwhPWkuY29sb3ImJihkLnN0eWxlLmJhY2tncm91bmRDb2xvcj1pLmNvbG9yKSxkLnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbj1gJHtjfW1zYCx0aGlzLl9jb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxkKGQpO2xldCB1PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGQpLGg9dS50cmFuc2l0aW9uRHVyYXRpb24sbT0ibm9uZSI9PT11LnRyYW5zaXRpb25Qcm9wZXJ0eXx8IjBzIj09PWh8fCIwcywgMHMiPT09aHx8MD09PXIud2lkdGgmJjA9PT1yLmhlaWdodCxfPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyPSExKXt0aGlzLl9yZW5kZXJlcj10LHRoaXMuZWxlbWVudD1lLHRoaXMuY29uZmlnPWksdGhpcy5fYW5pbWF0aW9uRm9yY2libHlEaXNhYmxlZFRocm91Z2hDc3M9cix0aGlzLnN0YXRlPTN9ZmFkZU91dCgpe3RoaXMuX3JlbmRlcmVyLmZhZGVPdXRSaXBwbGUodGhpcyl9fSh0aGlzLGQsaSxtKTtkLnN0eWxlLnRyYW5zZm9ybT0ic2NhbGUzZCgxLCAxLCAxKSIsXy5zdGF0ZT0wLGkucGVyc2lzdGVudHx8KHRoaXMuX21vc3RSZWNlbnRUcmFuc2llbnRSaXBwbGU9Xyk7bGV0IE09bnVsbDtyZXR1cm4hbSYmKGN8fG8uZXhpdER1cmF0aW9uKSYmdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57bGV0IHk9KCk9PnRoaXMuX2ZpbmlzaFJpcHBsZVRyYW5zaXRpb24oXykseD0oKT0+dGhpcy5fZGVzdHJveVJpcHBsZShfKTtkLmFkZEV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLHkpLGQuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmNhbmNlbCIseCksTT17b25UcmFuc2l0aW9uRW5kOnksb25UcmFuc2l0aW9uQ2FuY2VsOnh9fSksdGhpcy5fYWN0aXZlUmlwcGxlcy5zZXQoXyxNKSwobXx8IWMpJiZ0aGlzLl9maW5pc2hSaXBwbGVUcmFuc2l0aW9uKF8pLF99ZmFkZU91dFJpcHBsZSh0KXtpZigyPT09dC5zdGF0ZXx8Mz09PXQuc3RhdGUpcmV0dXJuO2xldCBlPXQuZWxlbWVudCxpPXsuLi5QNywuLi50LmNvbmZpZy5hbmltYXRpb259O2Uuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uPWAke2kuZXhpdER1cmF0aW9ufW1zYCxlLnN0eWxlLm9wYWNpdHk9IjAiLHQuc3RhdGU9MiwodC5fYW5pbWF0aW9uRm9yY2libHlEaXNhYmxlZFRocm91Z2hDc3N8fCFpLmV4aXREdXJhdGlvbikmJnRoaXMuX2ZpbmlzaFJpcHBsZVRyYW5zaXRpb24odCl9ZmFkZU91dEFsbCgpe3RoaXMuX2dldEFjdGl2ZVJpcHBsZXMoKS5mb3JFYWNoKHQ9PnQuZmFkZU91dCgpKX1mYWRlT3V0QWxsTm9uUGVyc2lzdGVudCgpe3RoaXMuX2dldEFjdGl2ZVJpcHBsZXMoKS5mb3JFYWNoKHQ9Pnt0LmNvbmZpZy5wZXJzaXN0ZW50fHx0LmZhZGVPdXQoKX0pfXNldHVwVHJpZ2dlckV2ZW50cyh0KXtsZXQgZT1VYSh0KTshdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyfHwhZXx8ZT09PXRoaXMuX3RyaWdnZXJFbGVtZW50fHwodGhpcy5fcmVtb3ZlVHJpZ2dlckV2ZW50cygpLHRoaXMuX3RyaWdnZXJFbGVtZW50PWUsTzcuZm9yRWFjaChpPT57U2guX2V2ZW50TWFuYWdlci5hZGRIYW5kbGVyKHRoaXMuX25nWm9uZSxpLGUsdGhpcyl9KSl9aGFuZGxlRXZlbnQodCl7Im1vdXNlZG93biI9PT10LnR5cGU/dGhpcy5fb25Nb3VzZWRvd24odCk6InRvdWNoc3RhcnQiPT09dC50eXBlP3RoaXMuX29uVG91Y2hTdGFydCh0KTp0aGlzLl9vblBvaW50ZXJVcCgpLHRoaXMuX3BvaW50ZXJVcEV2ZW50c1JlZ2lzdGVyZWR8fCh0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntGNy5mb3JFYWNoKGU9Pnt0aGlzLl90cmlnZ2VyRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGUsdGhpcyxrNyl9KX0pLHRoaXMuX3BvaW50ZXJVcEV2ZW50c1JlZ2lzdGVyZWQ9ITApfV9maW5pc2hSaXBwbGVUcmFuc2l0aW9uKHQpezA9PT10LnN0YXRlP3RoaXMuX3N0YXJ0RmFkZU91dFRyYW5zaXRpb24odCk6Mj09PXQuc3RhdGUmJnRoaXMuX2Rlc3Ryb3lSaXBwbGUodCl9X3N0YXJ0RmFkZU91dFRyYW5zaXRpb24odCl7bGV0IGU9dD09PXRoaXMuX21vc3RSZWNlbnRUcmFuc2llbnRSaXBwbGUse3BlcnNpc3RlbnQ6aX09dC5jb25maWc7dC5zdGF0ZT0xLCFpJiYoIWV8fCF0aGlzLl9pc1BvaW50ZXJEb3duKSYmdC5mYWRlT3V0KCl9X2Rlc3Ryb3lSaXBwbGUodCl7bGV0IGU9dGhpcy5fYWN0aXZlUmlwcGxlcy5nZXQodCk/P251bGw7dGhpcy5fYWN0aXZlUmlwcGxlcy5kZWxldGUodCksdGhpcy5fYWN0aXZlUmlwcGxlcy5zaXplfHwodGhpcy5fY29udGFpbmVyUmVjdD1udWxsKSx0PT09dGhpcy5fbW9zdFJlY2VudFRyYW5zaWVudFJpcHBsZSYmKHRoaXMuX21vc3RSZWNlbnRUcmFuc2llbnRSaXBwbGU9bnVsbCksdC5zdGF0ZT0zLG51bGwhPT1lJiYodC5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLGUub25UcmFuc2l0aW9uRW5kKSx0LmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmNhbmNlbCIsZS5vblRyYW5zaXRpb25DYW5jZWwpKSx0LmVsZW1lbnQucmVtb3ZlKCl9X29uTW91c2Vkb3duKHQpe2xldCBlPUJ2KHQpLGk9dGhpcy5fbGFzdFRvdWNoU3RhcnRFdmVudCYmRGF0ZS5ub3coKTx0aGlzLl9sYXN0VG91Y2hTdGFydEV2ZW50KzgwMDshdGhpcy5fdGFyZ2V0LnJpcHBsZURpc2FibGVkJiYhZSYmIWkmJih0aGlzLl9pc1BvaW50ZXJEb3duPSEwLHRoaXMuZmFkZUluUmlwcGxlKHQuY2xpZW50WCx0LmNsaWVudFksdGhpcy5fdGFyZ2V0LnJpcHBsZUNvbmZpZykpfV9vblRvdWNoU3RhcnQodCl7aWYoIXRoaXMuX3RhcmdldC5yaXBwbGVEaXNhYmxlZCYmIVZ2KHQpKXt0aGlzLl9sYXN0VG91Y2hTdGFydEV2ZW50PURhdGUubm93KCksdGhpcy5faXNQb2ludGVyRG93bj0hMDtsZXQgZT10LmNoYW5nZWRUb3VjaGVzO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKXRoaXMuZmFkZUluUmlwcGxlKGVbaV0uY2xpZW50WCxlW2ldLmNsaWVudFksdGhpcy5fdGFyZ2V0LnJpcHBsZUNvbmZpZyl9fV9vblBvaW50ZXJVcCgpeyF0aGlzLl9pc1BvaW50ZXJEb3dufHwodGhpcy5faXNQb2ludGVyRG93bj0hMSx0aGlzLl9nZXRBY3RpdmVSaXBwbGVzKCkuZm9yRWFjaCh0PT57IXQuY29uZmlnLnBlcnNpc3RlbnQmJigxPT09dC5zdGF0ZXx8dC5jb25maWcudGVybWluYXRlT25Qb2ludGVyVXAmJjA9PT10LnN0YXRlKSYmdC5mYWRlT3V0KCl9KSl9X2dldEFjdGl2ZVJpcHBsZXMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9hY3RpdmVSaXBwbGVzLmtleXMoKSl9X3JlbW92ZVRyaWdnZXJFdmVudHMoKXtsZXQgdD10aGlzLl90cmlnZ2VyRWxlbWVudDt0JiYoTzcuZm9yRWFjaChlPT5TaC5fZXZlbnRNYW5hZ2VyLnJlbW92ZUhhbmRsZXIoZSx0LHRoaXMpKSx0aGlzLl9wb2ludGVyVXBFdmVudHNSZWdpc3RlcmVkJiZGNy5mb3JFYWNoKGU9PnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLHRoaXMsazcpKSl9fTtTaC5fZXZlbnRNYW5hZ2VyPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2V2ZW50cz1uZXcgTWFwLHRoaXMuX2RlbGVnYXRlRXZlbnRIYW5kbGVyPXQ9PntsZXQgZT1icyh0KTtlJiZ0aGlzLl9ldmVudHMuZ2V0KHQudHlwZSk/LmZvckVhY2goKGkscik9Pnsocj09PWV8fHIuY29udGFpbnMoZSkpJiZpLmZvckVhY2gobz0+by5oYW5kbGVFdmVudCh0KSl9KX19YWRkSGFuZGxlcih0LGUsaSxyKXtsZXQgbz10aGlzLl9ldmVudHMuZ2V0KGUpO2lmKG8pe2xldCBhPW8uZ2V0KGkpO2E/YS5hZGQocik6by5zZXQoaSxuZXcgU2V0KFtyXSkpfWVsc2UgdGhpcy5fZXZlbnRzLnNldChlLG5ldyBNYXAoW1tpLG5ldyBTZXQoW3JdKV1dKSksdC5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoZSx0aGlzLl9kZWxlZ2F0ZUV2ZW50SGFuZGxlcixSNyl9KX1yZW1vdmVIYW5kbGVyKHQsZSxpKXtsZXQgcj10aGlzLl9ldmVudHMuZ2V0KHQpO2lmKCFyKXJldHVybjtsZXQgbz1yLmdldChlKTshb3x8KG8uZGVsZXRlKGkpLDA9PT1vLnNpemUmJnIuZGVsZXRlKGUpLDA9PT1yLnNpemUmJih0aGlzLl9ldmVudHMuZGVsZXRlKHQpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodCx0aGlzLl9kZWxlZ2F0ZUV2ZW50SGFuZGxlcixSNykpKX19O3ZhciBUaD1uZXcgdGUoIm1hdC1yaXBwbGUtZ2xvYmFsLW9wdGlvbnMiKSxLaT0oKCk9PntjbGFzcyBue2dldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoZSl7ZSYmdGhpcy5mYWRlT3V0QWxsTm9uUGVyc2lzdGVudCgpLHRoaXMuX2Rpc2FibGVkPWUsdGhpcy5fc2V0dXBUcmlnZ2VyRXZlbnRzSWZFbmFibGVkKCl9Z2V0IHRyaWdnZXIoKXtyZXR1cm4gdGhpcy5fdHJpZ2dlcnx8dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50fXNldCB0cmlnZ2VyKGUpe3RoaXMuX3RyaWdnZXI9ZSx0aGlzLl9zZXR1cFRyaWdnZXJFdmVudHNJZkVuYWJsZWQoKX1jb25zdHJ1Y3RvcihlLGkscixvLGEpe3RoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9hbmltYXRpb25Nb2RlPWEsdGhpcy5yYWRpdXM9MCx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl9pc0luaXRpYWxpemVkPSExLHRoaXMuX2dsb2JhbE9wdGlvbnM9b3x8e30sdGhpcy5fcmlwcGxlUmVuZGVyZXI9bmV3IFNoKHRoaXMsaSxlLHIpfW5nT25Jbml0KCl7dGhpcy5faXNJbml0aWFsaXplZD0hMCx0aGlzLl9zZXR1cFRyaWdnZXJFdmVudHNJZkVuYWJsZWQoKX1uZ09uRGVzdHJveSgpe3RoaXMuX3JpcHBsZVJlbmRlcmVyLl9yZW1vdmVUcmlnZ2VyRXZlbnRzKCl9ZmFkZU91dEFsbCgpe3RoaXMuX3JpcHBsZVJlbmRlcmVyLmZhZGVPdXRBbGwoKX1mYWRlT3V0QWxsTm9uUGVyc2lzdGVudCgpe3RoaXMuX3JpcHBsZVJlbmRlcmVyLmZhZGVPdXRBbGxOb25QZXJzaXN0ZW50KCl9Z2V0IHJpcHBsZUNvbmZpZygpe3JldHVybntjZW50ZXJlZDp0aGlzLmNlbnRlcmVkLHJhZGl1czp0aGlzLnJhZGl1cyxjb2xvcjp0aGlzLmNvbG9yLGFuaW1hdGlvbjp7Li4udGhpcy5fZ2xvYmFsT3B0aW9ucy5hbmltYXRpb24sLi4uIk5vb3BBbmltYXRpb25zIj09PXRoaXMuX2FuaW1hdGlvbk1vZGU/e2VudGVyRHVyYXRpb246MCxleGl0RHVyYXRpb246MH06e30sLi4udGhpcy5hbmltYXRpb259LHRlcm1pbmF0ZU9uUG9pbnRlclVwOnRoaXMuX2dsb2JhbE9wdGlvbnMudGVybWluYXRlT25Qb2ludGVyVXB9fWdldCByaXBwbGVEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVkfHwhIXRoaXMuX2dsb2JhbE9wdGlvbnMuZGlzYWJsZWR9X3NldHVwVHJpZ2dlckV2ZW50c0lmRW5hYmxlZCgpeyF0aGlzLmRpc2FibGVkJiZ0aGlzLl9pc0luaXRpYWxpemVkJiZ0aGlzLl9yaXBwbGVSZW5kZXJlci5zZXR1cFRyaWdnZXJFdmVudHModGhpcy50cmlnZ2VyKX1sYXVuY2goZSxpPTAscil7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlP3RoaXMuX3JpcHBsZVJlbmRlcmVyLmZhZGVJblJpcHBsZShlLGksey4uLnRoaXMucmlwcGxlQ29uZmlnLC4uLnJ9KTp0aGlzLl9yaXBwbGVSZW5kZXJlci5mYWRlSW5SaXBwbGUoMCwwLHsuLi50aGlzLnJpcHBsZUNvbmZpZywuLi5lfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoeGUpLEMob3QpLEMoVm4pLEMoVGgsOCksQyhwaSw4KSl9LG4uXHUwMjc1ZGlyPU1lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdC1yaXBwbGUiLCIiXSxbIiIsIm1hdFJpcHBsZSIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1yaXBwbGUiXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmbnQoIm1hdC1yaXBwbGUtdW5ib3VuZGVkIixpLnVuYm91bmRlZCl9LGlucHV0czp7Y29sb3I6WyJtYXRSaXBwbGVDb2xvciIsImNvbG9yIl0sdW5ib3VuZGVkOlsibWF0UmlwcGxlVW5ib3VuZGVkIiwidW5ib3VuZGVkIl0sY2VudGVyZWQ6WyJtYXRSaXBwbGVDZW50ZXJlZCIsImNlbnRlcmVkIl0scmFkaXVzOlsibWF0UmlwcGxlUmFkaXVzIiwicmFkaXVzIl0sYW5pbWF0aW9uOlsibWF0UmlwcGxlQW5pbWF0aW9uIiwiYW5pbWF0aW9uIl0sZGlzYWJsZWQ6WyJtYXRSaXBwbGVEaXNhYmxlZCIsImRpc2FibGVkIl0sdHJpZ2dlcjpbIm1hdFJpcHBsZVRyaWdnZXIiLCJ0cmlnZ2VyIl19LGV4cG9ydEFzOlsibWF0UmlwcGxlIl19KSxufSkoKSxfYT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9SCh7aW1wb3J0czpbZG4sZG5dfSksbn0pKCksVl9lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5fYW5pbWF0aW9uTW9kZT1lLHRoaXMuc3RhdGU9InVuY2hlY2tlZCIsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLmFwcGVhcmFuY2U9ImZ1bGwifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKHBpLDgpKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtcHNldWRvLWNoZWNrYm94Il1dLGhvc3RBdHRyczpbMSwibWF0LXBzZXVkby1jaGVja2JveCJdLGhvc3RWYXJzOjEyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmbnQoIm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSIsImluZGV0ZXJtaW5hdGUiPT09aS5zdGF0ZSkoIm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCIsImNoZWNrZWQiPT09aS5zdGF0ZSkoIm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWQiLGkuZGlzYWJsZWQpKCJtYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWwiLCJtaW5pbWFsIj09PWkuYXBwZWFyYW5jZSkoIm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbCIsImZ1bGwiPT09aS5hcHBlYXJhbmNlKSgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLCJOb29wQW5pbWF0aW9ucyI9PT1pLl9hbmltYXRpb25Nb2RlKX0saW5wdXRzOntzdGF0ZToic3RhdGUiLGRpc2FibGVkOiJkaXNhYmxlZCIsYXBwZWFyYW5jZToiYXBwZWFyYW5jZSJ9LGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7fSxzdHlsZXM6WycubWF0LXBzZXVkby1jaGVja2JveHtib3JkZXItcmFkaXVzOjJweDtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlO2ZsZXgtc2hyaW5rOjA7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgOTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpLGJhY2tncm91bmQtY29sb3IgOTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpfS5tYXQtcHNldWRvLWNoZWNrYm94OjphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtvcGFjaXR5OjA7Y29udGVudDoiIjtib3JkZXItYm90dG9tOjJweCBzb2xpZCBjdXJyZW50Q29sb3I7dHJhbnNpdGlvbjpvcGFjaXR5IDkwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMC4xKX0ubWF0LXBzZXVkby1jaGVja2JveC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXt0cmFuc2l0aW9uOm5vbmUgIWltcG9ydGFudDthbmltYXRpb246bm9uZSAhaW1wb3J0YW50fS5tYXQtcHNldWRvLWNoZWNrYm94Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlOjphZnRlcnt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZTo6YWZ0ZXJ7bGVmdDoxcHg7b3BhY2l0eToxO2JvcmRlci1yYWRpdXM6MnB4fS5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQ6OmFmdGVye2xlZnQ6MXB4O2JvcmRlci1sZWZ0OjJweCBzb2xpZCBjdXJyZW50Q29sb3I7dHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpO29wYWNpdHk6MTtib3gtc2l6aW5nOmNvbnRlbnQtYm94fS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGx7Ym9yZGVyOjJweCBzb2xpZH0ubWF0LXBzZXVkby1jaGVja2JveC1mdWxsLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LXBzZXVkby1jaGVja2JveC1mdWxsLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LXBzZXVkby1jaGVja2JveHt3aWR0aDoxOHB4O2hlaWdodDoxOHB4fS5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWwubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkOjphZnRlcnt3aWR0aDoxNHB4O2hlaWdodDo2cHg7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7dG9wOi00LjI0MjY0MDY4NzFweDtsZWZ0OjA7Ym90dG9tOjA7cmlnaHQ6MDttYXJnaW46YXV0b30ubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZTo6YWZ0ZXJ7dG9wOjhweDt3aWR0aDoxNnB4fS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkOjphZnRlcnt3aWR0aDoxMHB4O2hlaWdodDo0cHg7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7dG9wOi0yLjgyODQyNzEyNDdweDtsZWZ0OjA7Ym90dG9tOjA7cmlnaHQ6MDttYXJnaW46YXV0b30ubWF0LXBzZXVkby1jaGVja2JveC1mdWxsLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZTo6YWZ0ZXJ7dG9wOjZweDt3aWR0aDoxMnB4fSddLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLEhfZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9SCh7aW1wb3J0czpbZG5dfSksbn0pKCksVXY9bmV3IHRlKCJNQVRfT1BUSU9OX1BBUkVOVF9DT01QT05FTlQiKSxqdj0oYW8oY2xhc3N7fSksbmV3IHRlKCJNYXRPcHRncm91cCIpKSx6X2U9MCx6dj1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9ITEpe3RoaXMuc291cmNlPXQsdGhpcy5pc1VzZXJJbnB1dD1lfX0sVV9lPSgoKT0+e2NsYXNzIG57Z2V0IG11bHRpcGxlKCl7cmV0dXJuIHRoaXMuX3BhcmVudCYmdGhpcy5fcGFyZW50Lm11bHRpcGxlfWdldCBzZWxlY3RlZCgpe3JldHVybiB0aGlzLl9zZWxlY3RlZH1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5ncm91cCYmdGhpcy5ncm91cC5kaXNhYmxlZHx8dGhpcy5fZGlzYWJsZWR9c2V0IGRpc2FibGVkKGUpe3RoaXMuX2Rpc2FibGVkPXZ0KGUpfWdldCBkaXNhYmxlUmlwcGxlKCl7cmV0dXJuISghdGhpcy5fcGFyZW50fHwhdGhpcy5fcGFyZW50LmRpc2FibGVSaXBwbGUpfWdldCBoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yKCl7cmV0dXJuISghdGhpcy5fcGFyZW50fHwhdGhpcy5fcGFyZW50LmhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IpfWNvbnN0cnVjdG9yKGUsaSxyLG8pe3RoaXMuX2VsZW1lbnQ9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1pLHRoaXMuX3BhcmVudD1yLHRoaXMuZ3JvdXA9byx0aGlzLl9zZWxlY3RlZD0hMSx0aGlzLl9hY3RpdmU9ITEsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5fbW9zdFJlY2VudFZpZXdWYWx1ZT0iIix0aGlzLmlkPSJtYXQtb3B0aW9uLSIrel9lKyssdGhpcy5vblNlbGVjdGlvbkNoYW5nZT1uZXcgRix0aGlzLl9zdGF0ZUNoYW5nZXM9bmV3IEVlfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5fYWN0aXZlfWdldCB2aWV3VmFsdWUoKXtyZXR1cm4odGhpcy5fdGV4dD8ubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudHx8IiIpLnRyaW0oKX1zZWxlY3QoKXt0aGlzLl9zZWxlY3RlZHx8KHRoaXMuX3NlbGVjdGVkPSEwLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuX2VtaXRTZWxlY3Rpb25DaGFuZ2VFdmVudCgpKX1kZXNlbGVjdCgpe3RoaXMuX3NlbGVjdGVkJiYodGhpcy5fc2VsZWN0ZWQ9ITEsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5fZW1pdFNlbGVjdGlvbkNoYW5nZUV2ZW50KCkpfWZvY3VzKGUsaSl7bGV0IHI9dGhpcy5fZ2V0SG9zdEVsZW1lbnQoKTsiZnVuY3Rpb24iPT10eXBlb2Ygci5mb2N1cyYmci5mb2N1cyhpKX1zZXRBY3RpdmVTdHlsZXMoKXt0aGlzLl9hY3RpdmV8fCh0aGlzLl9hY3RpdmU9ITAsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfXNldEluYWN0aXZlU3R5bGVzKCl7dGhpcy5fYWN0aXZlJiYodGhpcy5fYWN0aXZlPSExLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1nZXRMYWJlbCgpe3JldHVybiB0aGlzLnZpZXdWYWx1ZX1faGFuZGxlS2V5ZG93bihlKXsoMTM9PT1lLmtleUNvZGV8fDMyPT09ZS5rZXlDb2RlKSYmIU9yKGUpJiYodGhpcy5fc2VsZWN0VmlhSW50ZXJhY3Rpb24oKSxlLnByZXZlbnREZWZhdWx0KCkpfV9zZWxlY3RWaWFJbnRlcmFjdGlvbigpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLl9zZWxlY3RlZD0hdGhpcy5tdWx0aXBsZXx8IXRoaXMuX3NlbGVjdGVkLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuX2VtaXRTZWxlY3Rpb25DaGFuZ2VFdmVudCghMCkpfV9nZXRUYWJJbmRleCgpe3JldHVybiB0aGlzLmRpc2FibGVkPyItMSI6IjAifV9nZXRIb3N0RWxlbWVudCgpe3JldHVybiB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnR9bmdBZnRlclZpZXdDaGVja2VkKCl7aWYodGhpcy5fc2VsZWN0ZWQpe2xldCBlPXRoaXMudmlld1ZhbHVlO2UhPT10aGlzLl9tb3N0UmVjZW50Vmlld1ZhbHVlJiYodGhpcy5fbW9zdFJlY2VudFZpZXdWYWx1ZSYmdGhpcy5fc3RhdGVDaGFuZ2VzLm5leHQoKSx0aGlzLl9tb3N0UmVjZW50Vmlld1ZhbHVlPWUpfX1uZ09uRGVzdHJveSgpe3RoaXMuX3N0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpfV9lbWl0U2VsZWN0aW9uQ2hhbmdlRXZlbnQoZT0hMSl7dGhpcy5vblNlbGVjdGlvbkNoYW5nZS5lbWl0KG5ldyB6dih0aGlzLGUpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe2NzKCl9LG4uXHUwMjc1ZGlyPU1lKHt0eXBlOm4sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZVZShEX2UsNyksMiZlKXtsZXQgcjtiZShyPXZlKCkpJiYoaS5fdGV4dD1yLmZpcnN0KX19LGlucHV0czp7dmFsdWU6InZhbHVlIixpZDoiaWQiLGRpc2FibGVkOiJkaXNhYmxlZCJ9LG91dHB1dHM6e29uU2VsZWN0aW9uQ2hhbmdlOiJvblNlbGVjdGlvbkNoYW5nZSJ9fSksbn0pKCksamE9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFVfZXtjb25zdHJ1Y3RvcihlLGkscixvKXtzdXBlcihlLGkscixvKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyh4ZSksQyhRdCksQyhVdiw4KSxDKGp2LDgpKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtb3B0aW9uIl1dLGhvc3RBdHRyczpbInJvbGUiLCJvcHRpb24iLDEsIm1hdC1tZGMtb3B0aW9uIiwibWRjLWxpc3QtaXRlbSJdLGhvc3RWYXJzOjExLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmQSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX3NlbGVjdFZpYUludGVyYWN0aW9uKCl9KSgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUtleWRvd24obyl9KSwyJmUmJih3bygiaWQiLGkuaWQpLEJlKCJhcmlhLXNlbGVjdGVkIixpLnNlbGVjdGVkKSgiYXJpYS1kaXNhYmxlZCIsaS5kaXNhYmxlZC50b1N0cmluZygpKSxudCgibWRjLWxpc3QtaXRlbS0tc2VsZWN0ZWQiLGkuc2VsZWN0ZWQpKCJtYXQtbWRjLW9wdGlvbi1tdWx0aXBsZSIsaS5tdWx0aXBsZSkoIm1hdC1tZGMtb3B0aW9uLWFjdGl2ZSIsaS5hY3RpdmUpKCJtZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCIsaS5kaXNhYmxlZCkpfSxleHBvcnRBczpbIm1hdE9wdGlvbiJdLGZlYXR1cmVzOltYZV0sbmdDb250ZW50U2VsZWN0b3JzOmtfZSxkZWNsczo4LHZhcnM6NSxjb25zdHM6W1siY2xhc3MiLCJtYXQtbWRjLW9wdGlvbi1wc2V1ZG8tY2hlY2tib3giLDMsInN0YXRlIiwiZGlzYWJsZWQiLDQsIm5nSWYiXSxbMSwibWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0Il0sWyJ0ZXh0IiwiIl0sWyJjbGFzcyIsIm1hdC1tZGMtb3B0aW9uLXBzZXVkby1jaGVja2JveCIsInN0YXRlIiwiY2hlY2tlZCIsImFwcGVhcmFuY2UiLCJtaW5pbWFsIiwzLCJkaXNhYmxlZCIsNCwibmdJZiJdLFsiY2xhc3MiLCJjZGstdmlzdWFsbHktaGlkZGVuIiw0LCJuZ0lmIl0sWyJtYXQtcmlwcGxlIiwiIiwxLCJtYXQtbWRjLW9wdGlvbi1yaXBwbGUiLCJtYXQtbWRjLWZvY3VzLWluZGljYXRvciIsMywibWF0UmlwcGxlVHJpZ2dlciIsIm1hdFJpcHBsZURpc2FibGVkIl0sWzEsIm1hdC1tZGMtb3B0aW9uLXBzZXVkby1jaGVja2JveCIsMywic3RhdGUiLCJkaXNhYmxlZCJdLFsic3RhdGUiLCJjaGVja2VkIiwiYXBwZWFyYW5jZSIsIm1pbmltYWwiLDEsIm1hdC1tZGMtb3B0aW9uLXBzZXVkby1jaGVja2JveCIsMywiZGlzYWJsZWQiXSxbMSwiY2RrLXZpc3VhbGx5LWhpZGRlbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGZuKFBfZSksUygwLElfZSwxLDIsIm1hdC1wc2V1ZG8tY2hlY2tib3giLDApLFR0KDEpLGYoMiwic3BhbiIsMSwyKSxUdCg0LDEpLGcoKSxTKDUsQV9lLDEsMSwibWF0LXBzZXVkby1jaGVja2JveCIsMyksUyg2LFJfZSwyLDEsInNwYW4iLDQpLGsoNywiZGl2Iiw1KSksMiZlJiYoYigibmdJZiIsaS5tdWx0aXBsZSksdig1KSxiKCJuZ0lmIiwhaS5tdWx0aXBsZSYmaS5zZWxlY3RlZCYmIWkuaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciksdigxKSxiKCJuZ0lmIixpLmdyb3VwJiZpLmdyb3VwLl9pbmVydCksdigxKSxiKCJtYXRSaXBwbGVUcmlnZ2VyIixpLl9nZXRIb3N0RWxlbWVudCgpKSgibWF0UmlwcGxlRGlzYWJsZWQiLGkuZGlzYWJsZWR8fGkuZGlzYWJsZVJpcHBsZSkpfSxkZXBlbmRlbmNpZXM6W0tpLE5lLFZfZV0sc3R5bGVzOlsnLm1hdC1tZGMtb3B0aW9ue2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjpyZWxhdGl2ZTthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwYWRkaW5nLWxlZnQ6MTZweDtwYWRkaW5nLXJpZ2h0OjE2cHg7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOnBvaW50ZXI7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7bWluLWhlaWdodDo0OHB4fS5tYXQtbWRjLW9wdGlvbjpmb2N1c3tvdXRsaW5lOm5vbmV9W2Rpcj1ydGxdIC5tYXQtbWRjLW9wdGlvbiwubWF0LW1kYy1vcHRpb25bZGlyPXJ0bF17cGFkZGluZy1sZWZ0OjE2cHg7cGFkZGluZy1yaWdodDoxNnB4fS5tYXQtbWRjLW9wdGlvbi5tZGMtbGlzdC1pdGVte2FsaWduLWl0ZW1zOmNlbnRlcn0ubWF0LW1kYy1vcHRpb24ubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWR7b3BhY2l0eTouMzg7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1tZGMtb3B0Z3JvdXAgLm1hdC1tZGMtb3B0aW9uOm5vdCgubWF0LW1kYy1vcHRpb24tbXVsdGlwbGUpe3BhZGRpbmctbGVmdDozMnB4fVtkaXI9cnRsXSAubWF0LW1kYy1vcHRncm91cCAubWF0LW1kYy1vcHRpb246bm90KC5tYXQtbWRjLW9wdGlvbi1tdWx0aXBsZSl7cGFkZGluZy1sZWZ0OjE2cHg7cGFkZGluZy1yaWdodDozMnB4fS5tYXQtbWRjLW9wdGlvbiAubWF0LWljb24sLm1hdC1tZGMtb3B0aW9uIC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGx7bWFyZ2luLXJpZ2h0OjE2cHg7ZmxleC1zaHJpbms6MH1bZGlyPXJ0bF0gLm1hdC1tZGMtb3B0aW9uIC5tYXQtaWNvbixbZGlyPXJ0bF0gLm1hdC1tZGMtb3B0aW9uIC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGx7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MTZweH0ubWF0LW1kYy1vcHRpb24gLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbHttYXJnaW4tbGVmdDoxNnB4O2ZsZXgtc2hyaW5rOjB9W2Rpcj1ydGxdIC5tYXQtbWRjLW9wdGlvbiAubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFse21hcmdpbi1yaWdodDoxNnB4O21hcmdpbi1sZWZ0OjB9Lm1hdC1tZGMtb3B0aW9uIC5tYXQtbWRjLW9wdGlvbi1yaXBwbGV7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LW1kYy1vcHRpb24gLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dHt3aGl0ZS1zcGFjZTpub3JtYWw7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdDtsZXR0ZXItc3BhY2luZzppbmhlcml0O2xpbmUtaGVpZ2h0OmluaGVyaXQ7Zm9udC1mYW1pbHk6aW5oZXJpdDt0ZXh0LWRlY29yYXRpb246aW5oZXJpdDt0ZXh0LXRyYW5zZm9ybTppbmhlcml0O21hcmdpbi1yaWdodDphdXRvfVtkaXI9cnRsXSAubWF0LW1kYy1vcHRpb24gLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tbGVmdDphdXRvfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZGMtb3B0aW9uLm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkOm5vdCgubWF0LW1kYy1vcHRpb24tbXVsdGlwbGUpOjphZnRlcntjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7cmlnaHQ6MTZweDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKTt3aWR0aDoxMHB4O2hlaWdodDowO2JvcmRlci1ib3R0b206c29saWQgMTBweDtib3JkZXItcmFkaXVzOjEwcHh9W2Rpcj1ydGxdIC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZGMtb3B0aW9uLm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkOm5vdCgubWF0LW1kYy1vcHRpb24tbXVsdGlwbGUpOjphZnRlcntyaWdodDphdXRvO2xlZnQ6MTZweH0ubWF0LW1kYy1vcHRpb24tYWN0aXZlIC5tYXQtbWRjLWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle2NvbnRlbnQ6IiJ9J10sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gejEobix0LGUpe2lmKGUubGVuZ3RoKXtsZXQgaT10LnRvQXJyYXkoKSxyPWUudG9BcnJheSgpLG89MDtmb3IobGV0IGE9MDthPG4rMTthKyspaVthXS5ncm91cCYmaVthXS5ncm91cD09PXJbb10mJm8rKztyZXR1cm4gb31yZXR1cm4gMH1mdW5jdGlvbiBVMShuLHQsZSxpKXtyZXR1cm4gbjxlP246bit0PmUraT9NYXRoLm1heCgwLG4taSt0KTplfXZhciBtZz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9SCh7aW1wb3J0czpbX2EsRGUsZG4sSF9lXX0pLG59KSgpLEI3PVsibWF0LWJ1dHRvbiIsIiJdLGcyPVtbWyIiLDgsIm1hdGVyaWFsLWljb25zIiwzLCJpY29uUG9zaXRpb25FbmQiLCIiXSxbIm1hdC1pY29uIiwzLCJpY29uUG9zaXRpb25FbmQiLCIiXSxbIiIsIm1hdEJ1dHRvbkljb24iLCIiLDMsImljb25Qb3NpdGlvbkVuZCIsIiJdXSwiKiIsW1siIiwiaWNvblBvc2l0aW9uRW5kIiwiIiw4LCJtYXRlcmlhbC1pY29ucyJdLFsibWF0LWljb24iLCJpY29uUG9zaXRpb25FbmQiLCIiXSxbIiIsIm1hdEJ1dHRvbkljb24iLCIiLCJpY29uUG9zaXRpb25FbmQiLCIiXV1dLF8yPVsiLm1hdGVyaWFsLWljb25zOm5vdChbaWNvblBvc2l0aW9uRW5kXSksIG1hdC1pY29uOm5vdChbaWNvblBvc2l0aW9uRW5kXSksIFttYXRCdXR0b25JY29uXTpub3QoW2ljb25Qb3NpdGlvbkVuZF0pIiwiKiIsIi5tYXRlcmlhbC1pY29uc1tpY29uUG9zaXRpb25FbmRdLCBtYXQtaWNvbltpY29uUG9zaXRpb25FbmRdLCBbbWF0QnV0dG9uSWNvbl1baWNvblBvc2l0aW9uRW5kXSJdLGIyPSIuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWRjLWJ1dHRvbjpub3QoLm1kYy1idXR0b24tLW91dGxpbmVkKSwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uOm5vdCgubWRjLWJ1dHRvbi0tb3V0bGluZWQpLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbjpub3QoLm1kYy1idXR0b24tLW91dGxpbmVkKSwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbjpub3QoLm1kYy1idXR0b24tLW91dGxpbmVkKSwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWRjLWljb24tYnV0dG9ue291dGxpbmU6c29saWQgMXB4fSIsVjc9WyJtYXQtaWNvbi1idXR0b24iLCIiXSxHX2U9WyIqIl0scV9lPVt7c2VsZWN0b3I6Im1hdC1idXR0b24iLG1kY0NsYXNzZXM6WyJtZGMtYnV0dG9uIiwibWF0LW1kYy1idXR0b24iXX0se3NlbGVjdG9yOiJtYXQtZmxhdC1idXR0b24iLG1kY0NsYXNzZXM6WyJtZGMtYnV0dG9uIiwibWRjLWJ1dHRvbi0tdW5lbGV2YXRlZCIsIm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24iXX0se3NlbGVjdG9yOiJtYXQtcmFpc2VkLWJ1dHRvbiIsbWRjQ2xhc3NlczpbIm1kYy1idXR0b24iLCJtZGMtYnV0dG9uLS1yYWlzZWQiLCJtYXQtbWRjLXJhaXNlZC1idXR0b24iXX0se3NlbGVjdG9yOiJtYXQtc3Ryb2tlZC1idXR0b24iLG1kY0NsYXNzZXM6WyJtZGMtYnV0dG9uIiwibWRjLWJ1dHRvbi0tb3V0bGluZWQiLCJtYXQtbWRjLW91dGxpbmVkLWJ1dHRvbiJdfSx7c2VsZWN0b3I6Im1hdC1mYWIiLG1kY0NsYXNzZXM6WyJtZGMtZmFiIiwibWF0LW1kYy1mYWIiXX0se3NlbGVjdG9yOiJtYXQtbWluaS1mYWIiLG1kY0NsYXNzZXM6WyJtZGMtZmFiIiwibWRjLWZhYi0tbWluaSIsIm1hdC1tZGMtbWluaS1mYWIiXX0se3NlbGVjdG9yOiJtYXQtaWNvbi1idXR0b24iLG1kY0NsYXNzZXM6WyJtZGMtaWNvbi1idXR0b24iLCJtYXQtbWRjLWljb24tYnV0dG9uIl19XSxYX2U9S28oYW8oZ28oY2xhc3N7Y29uc3RydWN0b3Iobil7dGhpcy5fZWxlbWVudFJlZj1ufX0pKSksdjI9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFhfZXtjb25zdHJ1Y3RvcihlLGkscixvKXtzdXBlcihlKSx0aGlzLl9wbGF0Zm9ybT1pLHRoaXMuX25nWm9uZT1yLHRoaXMuX2FuaW1hdGlvbk1vZGU9byx0aGlzLl9mb2N1c01vbml0b3I9JG4oZm8pLHRoaXMuX2lzRmFiPSExO2xldCBhPWUubmF0aXZlRWxlbWVudC5jbGFzc0xpc3Q7Zm9yKGxldCBzIG9mIHFfZSl0aGlzLl9oYXNIb3N0QXR0cmlidXRlcyhzLnNlbGVjdG9yKSYmcy5tZGNDbGFzc2VzLmZvckVhY2gobD0+e2EuYWRkKGwpfSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IodGhpcy5fZWxlbWVudFJlZiwhMCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZil9Zm9jdXMoZT0icHJvZ3JhbSIsaSl7ZT90aGlzLl9mb2N1c01vbml0b3IuZm9jdXNWaWEodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LGUsaSk6dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKGkpfV9oYXNIb3N0QXR0cmlidXRlcyguLi5lKXtyZXR1cm4gZS5zb21lKGk9PnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5oYXNBdHRyaWJ1dGUoaSkpfV9pc1JpcHBsZURpc2FibGVkKCl7cmV0dXJuIHRoaXMuZGlzYWJsZVJpcHBsZXx8dGhpcy5kaXNhYmxlZH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe2NzKCl9LG4uXHUwMjc1ZGlyPU1lKHt0eXBlOm4sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZVZShLaSw1KSwyJmUpe2xldCByO2JlKHI9dmUoKSkmJihpLnJpcHBsZT1yLmZpcnN0KX19LGZlYXR1cmVzOltYZV19KSxufSkoKSxINz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgdjJ7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIoZSxpLHIsbyksdGhpcy5faGFsdERpc2FibGVkRXZlbnRzPWE9Pnt0aGlzLmRpc2FibGVkJiYoYS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCkpfX1uZ09uSW5pdCgpe3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5faGFsdERpc2FibGVkRXZlbnRzKX0pfW5nT25EZXN0cm95KCl7c3VwZXIubmdPbkRlc3Ryb3koKSx0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX2hhbHREaXNhYmxlZEV2ZW50cyl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtjcygpfSxuLlx1MDI3NWRpcj1NZSh7dHlwZTpuLGZlYXR1cmVzOltYZV19KSxufSkoKSxraT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgdjJ7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIoZSxpLHIsbyl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoeGUpLEMoVm4pLEMob3QpLEMocGksOCkpfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbImJ1dHRvbiIsIm1hdC1idXR0b24iLCIiXSxbImJ1dHRvbiIsIm1hdC1yYWlzZWQtYnV0dG9uIiwiIl0sWyJidXR0b24iLCJtYXQtZmxhdC1idXR0b24iLCIiXSxbImJ1dHRvbiIsIm1hdC1zdHJva2VkLWJ1dHRvbiIsIiJdXSxob3N0VmFyczo3LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmKEJlKCJkaXNhYmxlZCIsaS5kaXNhYmxlZHx8bnVsbCksbnQoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIiwiTm9vcEFuaW1hdGlvbnMiPT09aS5fYW5pbWF0aW9uTW9kZSkoIm1hdC11bnRoZW1lZCIsIWkuY29sb3IpKCJtYXQtbWRjLWJ1dHRvbi1iYXNlIiwhMCkpfSxpbnB1dHM6e2Rpc2FibGVkOiJkaXNhYmxlZCIsZGlzYWJsZVJpcHBsZToiZGlzYWJsZVJpcHBsZSIsY29sb3I6ImNvbG9yIn0sZXhwb3J0QXM6WyJtYXRCdXR0b24iXSxmZWF0dXJlczpbWGVdLGF0dHJzOkI3LG5nQ29udGVudFNlbGVjdG9yczpfMixkZWNsczo4LHZhcnM6Nixjb25zdHM6W1sxLCJtYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZSJdLFsxLCJtZGMtYnV0dG9uX19sYWJlbCJdLFsxLCJtYXQtbWRjLWZvY3VzLWluZGljYXRvciJdLFsibWF0UmlwcGxlIiwiIiwxLCJtYXQtbWRjLWJ1dHRvbi1yaXBwbGUiLDMsIm1hdFJpcHBsZURpc2FibGVkIiwibWF0UmlwcGxlVHJpZ2dlciJdLFsxLCJtYXQtbWRjLWJ1dHRvbi10b3VjaC10YXJnZXQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihmbihnMiksaygwLCJzcGFuIiwwKSxUdCgxKSxmKDIsInNwYW4iLDEpLFR0KDMsMSksZygpLFR0KDQsMiksayg1LCJzcGFuIiwyKSg2LCJzcGFuIiwzKSg3LCJzcGFuIiw0KSksMiZlJiYobnQoIm1kYy1idXR0b25fX3JpcHBsZSIsIWkuX2lzRmFiKSgibWRjLWZhYl9fcmlwcGxlIixpLl9pc0ZhYiksdig2KSxiKCJtYXRSaXBwbGVEaXNhYmxlZCIsaS5faXNSaXBwbGVEaXNhYmxlZCgpKSgibWF0UmlwcGxlVHJpZ2dlciIsaS5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSl9LGRlcGVuZGVuY2llczpbS2ldLHN0eWxlczpbJy5tZGMtdG91Y2gtdGFyZ2V0LXdyYXBwZXJ7ZGlzcGxheTppbmxpbmV9Lm1kYy1lbGV2YXRpb24tb3ZlcmxheXtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOmluaGVyaXQ7cG9pbnRlci1ldmVudHM6bm9uZTtvcGFjaXR5OnZhcigtLW1kYy1lbGV2YXRpb24tb3ZlcmxheS1vcGFjaXR5LCAwKTt0cmFuc2l0aW9uOm9wYWNpdHkgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKX0ubWRjLWJ1dHRvbntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDttaW4td2lkdGg6NjRweDtib3JkZXI6bm9uZTtvdXRsaW5lOm5vbmU7bGluZS1oZWlnaHQ6aW5oZXJpdDt1c2VyLXNlbGVjdDpub25lOy13ZWJraXQtYXBwZWFyYW5jZTpub25lO292ZXJmbG93OnZpc2libGU7dmVydGljYWwtYWxpZ246bWlkZGxlO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwwKX0ubWRjLWJ1dHRvbiAubWRjLWVsZXZhdGlvbi1vdmVybGF5e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7dG9wOjA7bGVmdDowfS5tZGMtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye3BhZGRpbmc6MDtib3JkZXI6MH0ubWRjLWJ1dHRvbjphY3RpdmV7b3V0bGluZTpub25lfS5tZGMtYnV0dG9uOmhvdmVye2N1cnNvcjpwb2ludGVyfS5tZGMtYnV0dG9uOmRpc2FibGVke2N1cnNvcjpkZWZhdWx0O3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1kYy1idXR0b25baGlkZGVuXXtkaXNwbGF5Om5vbmV9Lm1kYy1idXR0b24gLm1kYy1idXR0b25fX2ljb257bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6OHB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOnRvcH1bZGlyPXJ0bF0gLm1kYy1idXR0b24gLm1kYy1idXR0b25fX2ljb24sLm1kYy1idXR0b24gLm1kYy1idXR0b25fX2ljb25bZGlyPXJ0bF17bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi1yaWdodDowfS5tZGMtYnV0dG9uIC5tZGMtYnV0dG9uX19wcm9ncmVzcy1pbmRpY2F0b3J7Zm9udC1zaXplOjA7cG9zaXRpb246YWJzb2x1dGU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKTt0b3A6NTAlO2xlZnQ6NTAlO2xpbmUtaGVpZ2h0OmluaXRpYWx9Lm1kYy1idXR0b24gLm1kYy1idXR0b25fX2xhYmVse3Bvc2l0aW9uOnJlbGF0aXZlfS5tZGMtYnV0dG9uIC5tZGMtYnV0dG9uX19mb2N1cy1yaW5ne3BvaW50ZXItZXZlbnRzOm5vbmU7Ym9yZGVyOjJweCBzb2xpZCByZ2JhKDAsMCwwLDApO2JvcmRlci1yYWRpdXM6NnB4O2JveC1zaXppbmc6Y29udGVudC1ib3g7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC01MCUpO2hlaWdodDpjYWxjKFxuICAgICAgMTAwJSArIDRweFxuICAgICk7d2lkdGg6Y2FsYyhcbiAgICAgIDEwMCUgKyA0cHhcbiAgICApO2Rpc3BsYXk6bm9uZX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKXsubWRjLWJ1dHRvbiAubWRjLWJ1dHRvbl9fZm9jdXMtcmluZ3tib3JkZXItY29sb3I6Q2FudmFzVGV4dH19Lm1kYy1idXR0b24gLm1kYy1idXR0b25fX2ZvY3VzLXJpbmc6OmFmdGVye2NvbnRlbnQ6IiI7Ym9yZGVyOjJweCBzb2xpZCByZ2JhKDAsMCwwLDApO2JvcmRlci1yYWRpdXM6OHB4O2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC01MCUpO2hlaWdodDpjYWxjKDEwMCUgKyA0cHgpO3dpZHRoOmNhbGMoMTAwJSArIDRweCl9QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSl7Lm1kYy1idXR0b24gLm1kYy1idXR0b25fX2ZvY3VzLXJpbmc6OmFmdGVye2JvcmRlci1jb2xvcjpDYW52YXNUZXh0fX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKXsubWRjLWJ1dHRvbi5tZGMtcmlwcGxlLXVwZ3JhZGVkLS1iYWNrZ3JvdW5kLWZvY3VzZWQgLm1kYy1idXR0b25fX2ZvY3VzLXJpbmcsLm1kYy1idXR0b246bm90KC5tZGMtcmlwcGxlLXVwZ3JhZGVkKTpmb2N1cyAubWRjLWJ1dHRvbl9fZm9jdXMtcmluZ3tkaXNwbGF5OmJsb2NrfX0ubWRjLWJ1dHRvbiAubWRjLWJ1dHRvbl9fdG91Y2h7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtoZWlnaHQ6NDhweDtsZWZ0OjA7cmlnaHQ6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKX0ubWRjLWJ1dHRvbl9fbGFiZWwrLm1kYy1idXR0b25fX2ljb257bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi1yaWdodDowfVtkaXI9cnRsXSAubWRjLWJ1dHRvbl9fbGFiZWwrLm1kYy1idXR0b25fX2ljb24sLm1kYy1idXR0b25fX2xhYmVsKy5tZGMtYnV0dG9uX19pY29uW2Rpcj1ydGxde21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjhweH1zdmcubWRjLWJ1dHRvbl9faWNvbntmaWxsOmN1cnJlbnRDb2xvcn0ubWRjLWJ1dHRvbi0tdG91Y2h7bWFyZ2luLXRvcDo2cHg7bWFyZ2luLWJvdHRvbTo2cHh9Lm1kYy1idXR0b257cGFkZGluZzowIDhweCAwIDhweH0ubWRjLWJ1dHRvbi0tdW5lbGV2YXRlZHt0cmFuc2l0aW9uOmJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTtwYWRkaW5nOjAgMTZweCAwIDE2cHh9Lm1kYy1idXR0b24tLXVuZWxldmF0ZWQubWRjLWJ1dHRvbi0taWNvbi10cmFpbGluZ3twYWRkaW5nOjAgMTJweCAwIDE2cHh9Lm1kYy1idXR0b24tLXVuZWxldmF0ZWQubWRjLWJ1dHRvbi0taWNvbi1sZWFkaW5ne3BhZGRpbmc6MCAxNnB4IDAgMTJweH0ubWRjLWJ1dHRvbi0tcmFpc2Vke3RyYW5zaXRpb246Ym94LXNoYWRvdyAyODBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpO3BhZGRpbmc6MCAxNnB4IDAgMTZweH0ubWRjLWJ1dHRvbi0tcmFpc2VkLm1kYy1idXR0b24tLWljb24tdHJhaWxpbmd7cGFkZGluZzowIDEycHggMCAxNnB4fS5tZGMtYnV0dG9uLS1yYWlzZWQubWRjLWJ1dHRvbi0taWNvbi1sZWFkaW5ne3BhZGRpbmc6MCAxNnB4IDAgMTJweH0ubWRjLWJ1dHRvbi0tb3V0bGluZWR7Ym9yZGVyLXN0eWxlOnNvbGlkO3RyYW5zaXRpb246Ym9yZGVyIDI4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSl9Lm1kYy1idXR0b24tLW91dGxpbmVkIC5tZGMtYnV0dG9uX19yaXBwbGV7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDApfS5tYXQtbWRjLWJ1dHRvbntoZWlnaHQ6dmFyKC0tbWRjLXRleHQtYnV0dG9uLWNvbnRhaW5lci1oZWlnaHQsIDM2cHgpO2JvcmRlci1yYWRpdXM6dmFyKC0tbWRjLXRleHQtYnV0dG9uLWNvbnRhaW5lci1zaGFwZSwgdmFyKC0tbWRjLXNoYXBlLXNtYWxsLCA0cHgpKX0ubWF0LW1kYy1idXR0b246bm90KDpkaXNhYmxlZCl7Y29sb3I6dmFyKC0tbWRjLXRleHQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3IsIGluaGVyaXQpfS5tYXQtbWRjLWJ1dHRvbjpkaXNhYmxlZHtjb2xvcjp2YXIoLS1tZGMtdGV4dC1idXR0b24tZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjM4KSl9Lm1hdC1tZGMtYnV0dG9uIC5tZGMtYnV0dG9uX19yaXBwbGV7Ym9yZGVyLXJhZGl1czp2YXIoLS1tZGMtdGV4dC1idXR0b24tY29udGFpbmVyLXNoYXBlLCB2YXIoLS1tZGMtc2hhcGUtc21hbGwsIDRweCkpfS5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9ue2hlaWdodDp2YXIoLS1tZGMtZmlsbGVkLWJ1dHRvbi1jb250YWluZXItaGVpZ2h0LCAzNnB4KTtib3JkZXItcmFkaXVzOnZhcigtLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1zaGFwZSwgdmFyKC0tbWRjLXNoYXBlLXNtYWxsLCA0cHgpKX0ubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbjpub3QoOmRpc2FibGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvciwgdHJhbnNwYXJlbnQpfS5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uOmRpc2FibGVke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLWZpbGxlZC1idXR0b24tZGlzYWJsZWQtY29udGFpbmVyLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMTIpKX0ubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbjpub3QoOmRpc2FibGVkKXtjb2xvcjp2YXIoLS1tZGMtZmlsbGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yLCBpbmhlcml0KX0ubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbjpkaXNhYmxlZHtjb2xvcjp2YXIoLS1tZGMtZmlsbGVkLWJ1dHRvbi1kaXNhYmxlZC1sYWJlbC10ZXh0LWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMzgpKX0ubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbiAubWRjLWJ1dHRvbl9fcmlwcGxle2JvcmRlci1yYWRpdXM6dmFyKC0tbWRjLWZpbGxlZC1idXR0b24tY29udGFpbmVyLXNoYXBlLCB2YXIoLS1tZGMtc2hhcGUtc21hbGwsIDRweCkpfS5tYXQtbWRjLXJhaXNlZC1idXR0b257aGVpZ2h0OnZhcigtLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1oZWlnaHQsIDM2cHgpO2JvcmRlci1yYWRpdXM6dmFyKC0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLXNoYXBlLCB2YXIoLS1tZGMtc2hhcGUtc21hbGwsIDRweCkpO2JveC1zaGFkb3c6dmFyKC0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWVsZXZhdGlvbiwgMHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKSl9Lm1hdC1tZGMtcmFpc2VkLWJ1dHRvbjpub3QoOmRpc2FibGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvciwgdHJhbnNwYXJlbnQpfS5tYXQtbWRjLXJhaXNlZC1idXR0b246ZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1kaXNhYmxlZC1jb250YWluZXItY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4xMikpfS5tYXQtbWRjLXJhaXNlZC1idXR0b246bm90KDpkaXNhYmxlZCl7Y29sb3I6dmFyKC0tbWRjLXByb3RlY3RlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvciwgaW5oZXJpdCl9Lm1hdC1tZGMtcmFpc2VkLWJ1dHRvbjpkaXNhYmxlZHtjb2xvcjp2YXIoLS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1kaXNhYmxlZC1sYWJlbC10ZXh0LWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMzgpKX0ubWF0LW1kYy1yYWlzZWQtYnV0dG9uIC5tZGMtYnV0dG9uX19yaXBwbGV7Ym9yZGVyLXJhZGl1czp2YXIoLS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1jb250YWluZXItc2hhcGUsIHZhcigtLW1kYy1zaGFwZS1zbWFsbCwgNHB4KSl9Lm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5tZGMtcmlwcGxlLXVwZ3JhZGVkLS1iYWNrZ3JvdW5kLWZvY3VzZWQsLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbjpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3Vze2JveC1zaGFkb3c6dmFyKC0tbWRjLXByb3RlY3RlZC1idXR0b24tZm9jdXMtY29udGFpbmVyLWVsZXZhdGlvbiwgMHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMikpfS5tYXQtbWRjLXJhaXNlZC1idXR0b246aG92ZXJ7Ym94LXNoYWRvdzp2YXIoLS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1ob3Zlci1jb250YWluZXItZWxldmF0aW9uLCAwcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKSl9Lm1hdC1tZGMtcmFpc2VkLWJ1dHRvbjpub3QoOmRpc2FibGVkKTphY3RpdmV7Ym94LXNoYWRvdzp2YXIoLS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1wcmVzc2VkLWNvbnRhaW5lci1lbGV2YXRpb24sIDBweCA1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggOHB4IDEwcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAzcHggMTRweCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKSl9Lm1hdC1tZGMtcmFpc2VkLWJ1dHRvbjpkaXNhYmxlZHtib3gtc2hhZG93OnZhcigtLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWRpc2FibGVkLWNvbnRhaW5lci1lbGV2YXRpb24sIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKSl9Lm1hdC1tZGMtb3V0bGluZWQtYnV0dG9ue2hlaWdodDp2YXIoLS1tZGMtb3V0bGluZWQtYnV0dG9uLWNvbnRhaW5lci1oZWlnaHQsIDM2cHgpO2JvcmRlci1yYWRpdXM6dmFyKC0tbWRjLW91dGxpbmVkLWJ1dHRvbi1jb250YWluZXItc2hhcGUsIHZhcigtLW1kYy1zaGFwZS1zbWFsbCwgNHB4KSk7cGFkZGluZzowIDE1cHggMCAxNXB4O2JvcmRlci13aWR0aDp2YXIoLS1tZGMtb3V0bGluZWQtYnV0dG9uLW91dGxpbmUtd2lkdGgsIDFweCl9Lm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uOm5vdCg6ZGlzYWJsZWQpe2NvbG9yOnZhcigtLW1kYy1vdXRsaW5lZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvciwgaW5oZXJpdCl9Lm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uOmRpc2FibGVke2NvbG9yOnZhcigtLW1kYy1vdXRsaW5lZC1idXR0b24tZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjM4KSl9Lm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uIC5tZGMtYnV0dG9uX19yaXBwbGV7Ym9yZGVyLXJhZGl1czp2YXIoLS1tZGMtb3V0bGluZWQtYnV0dG9uLWNvbnRhaW5lci1zaGFwZSwgdmFyKC0tbWRjLXNoYXBlLXNtYWxsLCA0cHgpKX0ubWF0LW1kYy1vdXRsaW5lZC1idXR0b246bm90KDpkaXNhYmxlZCl7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy1vdXRsaW5lZC1idXR0b24tb3V0bGluZS1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjEyKSl9Lm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uOmRpc2FibGVke2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtb3V0bGluZWQtYnV0dG9uLWRpc2FibGVkLW91dGxpbmUtY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4xMikpfS5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbi5tZGMtYnV0dG9uLS1pY29uLXRyYWlsaW5ne3BhZGRpbmc6MCAxMXB4IDAgMTVweH0ubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWRjLWJ1dHRvbi0taWNvbi1sZWFkaW5ne3BhZGRpbmc6MCAxNXB4IDAgMTFweH0ubWF0LW1kYy1vdXRsaW5lZC1idXR0b24gLm1kYy1idXR0b25fX3JpcHBsZXt0b3A6LTFweDtsZWZ0Oi0xcHg7Ym90dG9tOi0xcHg7cmlnaHQ6LTFweDtib3JkZXItd2lkdGg6dmFyKC0tbWRjLW91dGxpbmVkLWJ1dHRvbi1vdXRsaW5lLXdpZHRoLCAxcHgpfS5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbiAubWRjLWJ1dHRvbl9fdG91Y2h7bGVmdDpjYWxjKC0xICogdmFyKC0tbWRjLW91dGxpbmVkLWJ1dHRvbi1vdXRsaW5lLXdpZHRoLCAxcHgpKTt3aWR0aDpjYWxjKDEwMCUgKyAyICogdmFyKC0tbWRjLW91dGxpbmVkLWJ1dHRvbi1vdXRsaW5lLXdpZHRoLCAxcHgpKX0ubWF0LW1kYy1idXR0b24sLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24sLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbiwubWF0LW1kYy1vdXRsaW5lZC1idXR0b257LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCl9Lm1hdC1tZGMtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1yaXBwbGUsLm1hdC1tZGMtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZSwubWF0LW1kYy1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXJpcHBsZSwubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbiAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUsLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbiAubWF0LW1kYy1idXR0b24tcmlwcGxlLC5tYXQtbWRjLXJhaXNlZC1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLC5tYXQtbWRjLXJhaXNlZC1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1yaXBwbGUsLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZSwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZTtib3JkZXItcmFkaXVzOmluaGVyaXR9Lm1hdC1tZGMtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLXJhaXNlZC1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle2NvbnRlbnQ6IiI7b3BhY2l0eTowO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3IpfS5tYXQtbWRjLWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yKX0ubWF0LW1kYy1idXR0b24gLm1kYy1idXR0b25fX2xhYmVsLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbCwubWF0LW1kYy1yYWlzZWQtYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbCwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24gLm1kYy1idXR0b25fX2xhYmVse3otaW5kZXg6MX0ubWF0LW1kYy1idXR0b24gLm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uIC5tYXQtbWRjLWZvY3VzLWluZGljYXRvciwubWF0LW1kYy1yYWlzZWQtYnV0dG9uIC5tYXQtbWRjLWZvY3VzLWluZGljYXRvciwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24gLm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9ye3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlfS5tYXQtbWRjLWJ1dHRvbjpmb2N1cyAubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbjpmb2N1cyAubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LW1kYy1yYWlzZWQtYnV0dG9uOmZvY3VzIC5tYXQtbWRjLWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbjpmb2N1cyAubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtjb250ZW50OiIifS5tYXQtbWRjLWJ1dHRvbltkaXNhYmxlZF0sLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b25bZGlzYWJsZWRdLC5tYXQtbWRjLXJhaXNlZC1idXR0b25bZGlzYWJsZWRdLC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbltkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHQ7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LW1kYy1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXRvdWNoLXRhcmdldCwubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbiAubWF0LW1kYy1idXR0b24tdG91Y2gtdGFyZ2V0LC5tYXQtbWRjLXJhaXNlZC1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXRvdWNoLXRhcmdldCwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXRvdWNoLXRhcmdldHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2hlaWdodDo0OHB4O2xlZnQ6MDtyaWdodDowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpfS5tYXQtbWRjLWJ1dHRvbi5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSwubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbi5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSwubWF0LW1kYy1yYWlzZWQtYnV0dG9uLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbi5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXt0cmFuc2l0aW9uOm5vbmUgIWltcG9ydGFudDthbmltYXRpb246bm9uZSAhaW1wb3J0YW50fS5tYXQtbWRjLWJ1dHRvbj4ubWF0LWljb257bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6OHB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOnRvcDtmb250LXNpemU6MS4xMjVyZW07aGVpZ2h0OjEuMTI1cmVtO3dpZHRoOjEuMTI1cmVtfVtkaXI9cnRsXSAubWF0LW1kYy1idXR0b24+Lm1hdC1pY29uLC5tYXQtbWRjLWJ1dHRvbj4ubWF0LWljb25bZGlyPXJ0bF17bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi1yaWdodDowfS5tYXQtbWRjLWJ1dHRvbiAubWRjLWJ1dHRvbl9fbGFiZWwrLm1hdC1pY29ue21hcmdpbi1sZWZ0OjhweDttYXJnaW4tcmlnaHQ6MH1bZGlyPXJ0bF0gLm1hdC1tZGMtYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbCsubWF0LWljb24sLm1hdC1tZGMtYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbCsubWF0LWljb25bZGlyPXJ0bF17bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6OHB4fS5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uPi5tYXQtaWNvbiwubWF0LW1kYy1yYWlzZWQtYnV0dG9uPi5tYXQtaWNvbiwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24+Lm1hdC1pY29ue21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjhweDtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt2ZXJ0aWNhbC1hbGlnbjp0b3A7Zm9udC1zaXplOjEuMTI1cmVtO2hlaWdodDoxLjEyNXJlbTt3aWR0aDoxLjEyNXJlbTttYXJnaW4tbGVmdDotNHB4O21hcmdpbi1yaWdodDo4cHh9W2Rpcj1ydGxdIC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uPi5tYXQtaWNvbixbZGlyPXJ0bF0gLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbj4ubWF0LWljb24sW2Rpcj1ydGxdIC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbj4ubWF0LWljb24sLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24+Lm1hdC1pY29uW2Rpcj1ydGxdLC5tYXQtbWRjLXJhaXNlZC1idXR0b24+Lm1hdC1pY29uW2Rpcj1ydGxdLC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbj4ubWF0LWljb25bZGlyPXJ0bF17bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi1yaWdodDowfVtkaXI9cnRsXSAubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbj4ubWF0LWljb24sW2Rpcj1ydGxdIC5tYXQtbWRjLXJhaXNlZC1idXR0b24+Lm1hdC1pY29uLFtkaXI9cnRsXSAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24+Lm1hdC1pY29uLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uPi5tYXQtaWNvbltkaXI9cnRsXSwubWF0LW1kYy1yYWlzZWQtYnV0dG9uPi5tYXQtaWNvbltkaXI9cnRsXSwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24+Lm1hdC1pY29uW2Rpcj1ydGxde21hcmdpbi1sZWZ0OjhweDttYXJnaW4tcmlnaHQ6LTRweH0ubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbiAubWRjLWJ1dHRvbl9fbGFiZWwrLm1hdC1pY29uLC5tYXQtbWRjLXJhaXNlZC1idXR0b24gLm1kYy1idXR0b25fX2xhYmVsKy5tYXQtaWNvbiwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24gLm1kYy1idXR0b25fX2xhYmVsKy5tYXQtaWNvbnttYXJnaW4tbGVmdDo4cHg7bWFyZ2luLXJpZ2h0Oi00cHh9W2Rpcj1ydGxdIC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbCsubWF0LWljb24sW2Rpcj1ydGxdIC5tYXQtbWRjLXJhaXNlZC1idXR0b24gLm1kYy1idXR0b25fX2xhYmVsKy5tYXQtaWNvbixbZGlyPXJ0bF0gLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbCsubWF0LWljb24sLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24gLm1kYy1idXR0b25fX2xhYmVsKy5tYXQtaWNvbltkaXI9cnRsXSwubWF0LW1kYy1yYWlzZWQtYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbCsubWF0LWljb25bZGlyPXJ0bF0sLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbCsubWF0LWljb25bZGlyPXJ0bF17bWFyZ2luLWxlZnQ6LTRweDttYXJnaW4tcmlnaHQ6OHB4fS5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbiAubWF0LW1kYy1idXR0b24tcmlwcGxlLC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbiAubWRjLWJ1dHRvbl9fcmlwcGxle3RvcDotMXB4O2xlZnQ6LTFweDtib3R0b206LTFweDtyaWdodDotMXB4O2JvcmRlci13aWR0aDotMXB4fS5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uIC5tYXQtbWRjLWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLC5tYXQtbWRjLXJhaXNlZC1idXR0b24gLm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmV7bWFyZ2luOmNhbGMoY2FsYyh2YXIoLS1tYXQtbWRjLWZvY3VzLWluZGljYXRvci1ib3JkZXItd2lkdGgsIDNweCkgKyAycHgpICogLTEpfS5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbiAubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXttYXJnaW46Y2FsYyhjYWxjKHZhcigtLW1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yLWJvcmRlci13aWR0aCwgM3B4KSArIDNweCkgKiAtMSl9JywiLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1kYy1idXR0b246bm90KC5tZGMtYnV0dG9uLS1vdXRsaW5lZCksLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbjpub3QoLm1kYy1idXR0b24tLW91dGxpbmVkKSwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWRjLXJhaXNlZC1idXR0b246bm90KC5tZGMtYnV0dG9uLS1vdXRsaW5lZCksLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1kYy1vdXRsaW5lZC1idXR0b246bm90KC5tZGMtYnV0dG9uLS1vdXRsaW5lZCksLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1kYy1pY29uLWJ1dHRvbntvdXRsaW5lOnNvbGlkIDFweH0iXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSx6Nz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgSDd7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIoZSxpLHIsbyl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoeGUpLEMoVm4pLEMob3QpLEMocGksOCkpfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbImEiLCJtYXQtYnV0dG9uIiwiIl0sWyJhIiwibWF0LXJhaXNlZC1idXR0b24iLCIiXSxbImEiLCJtYXQtZmxhdC1idXR0b24iLCIiXSxbImEiLCJtYXQtc3Ryb2tlZC1idXR0b24iLCIiXV0saG9zdFZhcnM6OSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJihCZSgiZGlzYWJsZWQiLGkuZGlzYWJsZWR8fG51bGwpKCJ0YWJpbmRleCIsaS5kaXNhYmxlZD8tMTppLnRhYkluZGV4KSgiYXJpYS1kaXNhYmxlZCIsaS5kaXNhYmxlZC50b1N0cmluZygpKSxudCgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLCJOb29wQW5pbWF0aW9ucyI9PT1pLl9hbmltYXRpb25Nb2RlKSgibWF0LXVudGhlbWVkIiwhaS5jb2xvcikoIm1hdC1tZGMtYnV0dG9uLWJhc2UiLCEwKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIixjb2xvcjoiY29sb3IiLHRhYkluZGV4OiJ0YWJJbmRleCJ9LGV4cG9ydEFzOlsibWF0QnV0dG9uIiwibWF0QW5jaG9yIl0sZmVhdHVyZXM6W1hlXSxhdHRyczpCNyxuZ0NvbnRlbnRTZWxlY3RvcnM6XzIsZGVjbHM6OCx2YXJzOjYsY29uc3RzOltbMSwibWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUiXSxbMSwibWRjLWJ1dHRvbl9fbGFiZWwiXSxbMSwibWF0LW1kYy1mb2N1cy1pbmRpY2F0b3IiXSxbIm1hdFJpcHBsZSIsIiIsMSwibWF0LW1kYy1idXR0b24tcmlwcGxlIiwzLCJtYXRSaXBwbGVEaXNhYmxlZCIsIm1hdFJpcHBsZVRyaWdnZXIiXSxbMSwibWF0LW1kYy1idXR0b24tdG91Y2gtdGFyZ2V0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZm4oZzIpLGsoMCwic3BhbiIsMCksVHQoMSksZigyLCJzcGFuIiwxKSxUdCgzLDEpLGcoKSxUdCg0LDIpLGsoNSwic3BhbiIsMikoNiwic3BhbiIsMykoNywic3BhbiIsNCkpLDImZSYmKG50KCJtZGMtYnV0dG9uX19yaXBwbGUiLCFpLl9pc0ZhYikoIm1kYy1mYWJfX3JpcHBsZSIsaS5faXNGYWIpLHYoNiksYigibWF0UmlwcGxlRGlzYWJsZWQiLGkuX2lzUmlwcGxlRGlzYWJsZWQoKSkoIm1hdFJpcHBsZVRyaWdnZXIiLGkuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkpfSxkZXBlbmRlbmNpZXM6W0tpXSxzdHlsZXM6WycubWRjLXRvdWNoLXRhcmdldC13cmFwcGVye2Rpc3BsYXk6aW5saW5lfS5tZGMtZWxldmF0aW9uLW92ZXJsYXl7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czppbmhlcml0O3BvaW50ZXItZXZlbnRzOm5vbmU7b3BhY2l0eTp2YXIoLS1tZGMtZWxldmF0aW9uLW92ZXJsYXktb3BhY2l0eSwgMCk7dHJhbnNpdGlvbjpvcGFjaXR5IDI4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSl9Lm1kYy1idXR0b257cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWluLXdpZHRoOjY0cHg7Ym9yZGVyOm5vbmU7b3V0bGluZTpub25lO2xpbmUtaGVpZ2h0OmluaGVyaXQ7dXNlci1zZWxlY3Q6bm9uZTstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTtvdmVyZmxvdzp2aXNpYmxlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMCl9Lm1kYy1idXR0b24gLm1kYy1lbGV2YXRpb24tb3ZlcmxheXt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3RvcDowO2xlZnQ6MH0ubWRjLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcntwYWRkaW5nOjA7Ym9yZGVyOjB9Lm1kYy1idXR0b246YWN0aXZle291dGxpbmU6bm9uZX0ubWRjLWJ1dHRvbjpob3ZlcntjdXJzb3I6cG9pbnRlcn0ubWRjLWJ1dHRvbjpkaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdDtwb2ludGVyLWV2ZW50czpub25lfS5tZGMtYnV0dG9uW2hpZGRlbl17ZGlzcGxheTpub25lfS5tZGMtYnV0dG9uIC5tZGMtYnV0dG9uX19pY29ue21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjhweDtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt2ZXJ0aWNhbC1hbGlnbjp0b3B9W2Rpcj1ydGxdIC5tZGMtYnV0dG9uIC5tZGMtYnV0dG9uX19pY29uLC5tZGMtYnV0dG9uIC5tZGMtYnV0dG9uX19pY29uW2Rpcj1ydGxde21hcmdpbi1sZWZ0OjhweDttYXJnaW4tcmlnaHQ6MH0ubWRjLWJ1dHRvbiAubWRjLWJ1dHRvbl9fcHJvZ3Jlc3MtaW5kaWNhdG9ye2ZvbnQtc2l6ZTowO3Bvc2l0aW9uOmFic29sdXRlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwgLTUwJSk7dG9wOjUwJTtsZWZ0OjUwJTtsaW5lLWhlaWdodDppbml0aWFsfS5tZGMtYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbHtwb3NpdGlvbjpyZWxhdGl2ZX0ubWRjLWJ1dHRvbiAubWRjLWJ1dHRvbl9fZm9jdXMtcmluZ3twb2ludGVyLWV2ZW50czpub25lO2JvcmRlcjoycHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItcmFkaXVzOjZweDtib3gtc2l6aW5nOmNvbnRlbnQtYm94O3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtoZWlnaHQ6Y2FsYyhcbiAgICAgIDEwMCUgKyA0cHhcbiAgICApO3dpZHRoOmNhbGMoXG4gICAgICAxMDAlICsgNHB4XG4gICAgKTtkaXNwbGF5Om5vbmV9QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSl7Lm1kYy1idXR0b24gLm1kYy1idXR0b25fX2ZvY3VzLXJpbmd7Ym9yZGVyLWNvbG9yOkNhbnZhc1RleHR9fS5tZGMtYnV0dG9uIC5tZGMtYnV0dG9uX19mb2N1cy1yaW5nOjphZnRlcntjb250ZW50OiIiO2JvcmRlcjoycHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItcmFkaXVzOjhweDtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtoZWlnaHQ6Y2FsYygxMDAlICsgNHB4KTt3aWR0aDpjYWxjKDEwMCUgKyA0cHgpfUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpey5tZGMtYnV0dG9uIC5tZGMtYnV0dG9uX19mb2N1cy1yaW5nOjphZnRlcntib3JkZXItY29sb3I6Q2FudmFzVGV4dH19QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSl7Lm1kYy1idXR0b24ubWRjLXJpcHBsZS11cGdyYWRlZC0tYmFja2dyb3VuZC1mb2N1c2VkIC5tZGMtYnV0dG9uX19mb2N1cy1yaW5nLC5tZGMtYnV0dG9uOm5vdCgubWRjLXJpcHBsZS11cGdyYWRlZCk6Zm9jdXMgLm1kYy1idXR0b25fX2ZvY3VzLXJpbmd7ZGlzcGxheTpibG9ja319Lm1kYy1idXR0b24gLm1kYy1idXR0b25fX3RvdWNoe3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7aGVpZ2h0OjQ4cHg7bGVmdDowO3JpZ2h0OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9Lm1kYy1idXR0b25fX2xhYmVsKy5tZGMtYnV0dG9uX19pY29ue21hcmdpbi1sZWZ0OjhweDttYXJnaW4tcmlnaHQ6MH1bZGlyPXJ0bF0gLm1kYy1idXR0b25fX2xhYmVsKy5tZGMtYnV0dG9uX19pY29uLC5tZGMtYnV0dG9uX19sYWJlbCsubWRjLWJ1dHRvbl9faWNvbltkaXI9cnRsXXttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDo4cHh9c3ZnLm1kYy1idXR0b25fX2ljb257ZmlsbDpjdXJyZW50Q29sb3J9Lm1kYy1idXR0b24tLXRvdWNoe21hcmdpbi10b3A6NnB4O21hcmdpbi1ib3R0b206NnB4fS5tZGMtYnV0dG9ue3BhZGRpbmc6MCA4cHggMCA4cHh9Lm1kYy1idXR0b24tLXVuZWxldmF0ZWR7dHJhbnNpdGlvbjpib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7cGFkZGluZzowIDE2cHggMCAxNnB4fS5tZGMtYnV0dG9uLS11bmVsZXZhdGVkLm1kYy1idXR0b24tLWljb24tdHJhaWxpbmd7cGFkZGluZzowIDEycHggMCAxNnB4fS5tZGMtYnV0dG9uLS11bmVsZXZhdGVkLm1kYy1idXR0b24tLWljb24tbGVhZGluZ3twYWRkaW5nOjAgMTZweCAwIDEycHh9Lm1kYy1idXR0b24tLXJhaXNlZHt0cmFuc2l0aW9uOmJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTtwYWRkaW5nOjAgMTZweCAwIDE2cHh9Lm1kYy1idXR0b24tLXJhaXNlZC5tZGMtYnV0dG9uLS1pY29uLXRyYWlsaW5ne3BhZGRpbmc6MCAxMnB4IDAgMTZweH0ubWRjLWJ1dHRvbi0tcmFpc2VkLm1kYy1idXR0b24tLWljb24tbGVhZGluZ3twYWRkaW5nOjAgMTZweCAwIDEycHh9Lm1kYy1idXR0b24tLW91dGxpbmVke2JvcmRlci1zdHlsZTpzb2xpZDt0cmFuc2l0aW9uOmJvcmRlciAyODBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpfS5tZGMtYnV0dG9uLS1vdXRsaW5lZCAubWRjLWJ1dHRvbl9fcmlwcGxle2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LW1kYy1idXR0b257aGVpZ2h0OnZhcigtLW1kYy10ZXh0LWJ1dHRvbi1jb250YWluZXItaGVpZ2h0LCAzNnB4KTtib3JkZXItcmFkaXVzOnZhcigtLW1kYy10ZXh0LWJ1dHRvbi1jb250YWluZXItc2hhcGUsIHZhcigtLW1kYy1zaGFwZS1zbWFsbCwgNHB4KSl9Lm1hdC1tZGMtYnV0dG9uOm5vdCg6ZGlzYWJsZWQpe2NvbG9yOnZhcigtLW1kYy10ZXh0LWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yLCBpbmhlcml0KX0ubWF0LW1kYy1idXR0b246ZGlzYWJsZWR7Y29sb3I6dmFyKC0tbWRjLXRleHQtYnV0dG9uLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4zOCkpfS5tYXQtbWRjLWJ1dHRvbiAubWRjLWJ1dHRvbl9fcmlwcGxle2JvcmRlci1yYWRpdXM6dmFyKC0tbWRjLXRleHQtYnV0dG9uLWNvbnRhaW5lci1zaGFwZSwgdmFyKC0tbWRjLXNoYXBlLXNtYWxsLCA0cHgpKX0ubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbntoZWlnaHQ6dmFyKC0tbWRjLWZpbGxlZC1idXR0b24tY29udGFpbmVyLWhlaWdodCwgMzZweCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tZGMtZmlsbGVkLWJ1dHRvbi1jb250YWluZXItc2hhcGUsIHZhcigtLW1kYy1zaGFwZS1zbWFsbCwgNHB4KSl9Lm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b246bm90KDpkaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtZmlsbGVkLWJ1dHRvbi1jb250YWluZXItY29sb3IsIHRyYW5zcGFyZW50KX0ubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbjpkaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy1maWxsZWQtYnV0dG9uLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjEyKSl9Lm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b246bm90KDpkaXNhYmxlZCl7Y29sb3I6dmFyKC0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvciwgaW5oZXJpdCl9Lm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b246ZGlzYWJsZWR7Y29sb3I6dmFyKC0tbWRjLWZpbGxlZC1idXR0b24tZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjM4KSl9Lm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24gLm1kYy1idXR0b25fX3JpcHBsZXtib3JkZXItcmFkaXVzOnZhcigtLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1zaGFwZSwgdmFyKC0tbWRjLXNoYXBlLXNtYWxsLCA0cHgpKX0ubWF0LW1kYy1yYWlzZWQtYnV0dG9ue2hlaWdodDp2YXIoLS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1jb250YWluZXItaGVpZ2h0LCAzNnB4KTtib3JkZXItcmFkaXVzOnZhcigtLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1zaGFwZSwgdmFyKC0tbWRjLXNoYXBlLXNtYWxsLCA0cHgpKTtib3gtc2hhZG93OnZhcigtLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1lbGV2YXRpb24sIDBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMikpfS5tYXQtbWRjLXJhaXNlZC1idXR0b246bm90KDpkaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1jb250YWluZXItY29sb3IsIHRyYW5zcGFyZW50KX0ubWF0LW1kYy1yYWlzZWQtYnV0dG9uOmRpc2FibGVke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLXByb3RlY3RlZC1idXR0b24tZGlzYWJsZWQtY29udGFpbmVyLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMTIpKX0ubWF0LW1kYy1yYWlzZWQtYnV0dG9uOm5vdCg6ZGlzYWJsZWQpe2NvbG9yOnZhcigtLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3IsIGluaGVyaXQpfS5tYXQtbWRjLXJhaXNlZC1idXR0b246ZGlzYWJsZWR7Y29sb3I6dmFyKC0tbWRjLXByb3RlY3RlZC1idXR0b24tZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjM4KSl9Lm1hdC1tZGMtcmFpc2VkLWJ1dHRvbiAubWRjLWJ1dHRvbl9fcmlwcGxle2JvcmRlci1yYWRpdXM6dmFyKC0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLXNoYXBlLCB2YXIoLS1tZGMtc2hhcGUtc21hbGwsIDRweCkpfS5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWRjLXJpcHBsZS11cGdyYWRlZC0tYmFja2dyb3VuZC1mb2N1c2VkLC5tYXQtbWRjLXJhaXNlZC1idXR0b246bm90KC5tZGMtcmlwcGxlLXVwZ3JhZGVkKTpmb2N1c3tib3gtc2hhZG93OnZhcigtLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWZvY3VzLWNvbnRhaW5lci1lbGV2YXRpb24sIDBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpKX0ubWF0LW1kYy1yYWlzZWQtYnV0dG9uOmhvdmVye2JveC1zaGFkb3c6dmFyKC0tbWRjLXByb3RlY3RlZC1idXR0b24taG92ZXItY29udGFpbmVyLWVsZXZhdGlvbiwgMHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMikpfS5tYXQtbWRjLXJhaXNlZC1idXR0b246bm90KDpkaXNhYmxlZCk6YWN0aXZle2JveC1zaGFkb3c6dmFyKC0tbWRjLXByb3RlY3RlZC1idXR0b24tcHJlc3NlZC1jb250YWluZXItZWxldmF0aW9uLCAwcHggNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMikpfS5tYXQtbWRjLXJhaXNlZC1idXR0b246ZGlzYWJsZWR7Ym94LXNoYWRvdzp2YXIoLS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1kaXNhYmxlZC1jb250YWluZXItZWxldmF0aW9uLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMikpfS5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbntoZWlnaHQ6dmFyKC0tbWRjLW91dGxpbmVkLWJ1dHRvbi1jb250YWluZXItaGVpZ2h0LCAzNnB4KTtib3JkZXItcmFkaXVzOnZhcigtLW1kYy1vdXRsaW5lZC1idXR0b24tY29udGFpbmVyLXNoYXBlLCB2YXIoLS1tZGMtc2hhcGUtc21hbGwsIDRweCkpO3BhZGRpbmc6MCAxNXB4IDAgMTVweDtib3JkZXItd2lkdGg6dmFyKC0tbWRjLW91dGxpbmVkLWJ1dHRvbi1vdXRsaW5lLXdpZHRoLCAxcHgpfS5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbjpub3QoOmRpc2FibGVkKXtjb2xvcjp2YXIoLS1tZGMtb3V0bGluZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3IsIGluaGVyaXQpfS5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbjpkaXNhYmxlZHtjb2xvcjp2YXIoLS1tZGMtb3V0bGluZWQtYnV0dG9uLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4zOCkpfS5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbiAubWRjLWJ1dHRvbl9fcmlwcGxle2JvcmRlci1yYWRpdXM6dmFyKC0tbWRjLW91dGxpbmVkLWJ1dHRvbi1jb250YWluZXItc2hhcGUsIHZhcigtLW1kYy1zaGFwZS1zbWFsbCwgNHB4KSl9Lm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uOm5vdCg6ZGlzYWJsZWQpe2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtb3V0bGluZWQtYnV0dG9uLW91dGxpbmUtY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4xMikpfS5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbjpkaXNhYmxlZHtib3JkZXItY29sb3I6dmFyKC0tbWRjLW91dGxpbmVkLWJ1dHRvbi1kaXNhYmxlZC1vdXRsaW5lLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMTIpKX0ubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWRjLWJ1dHRvbi0taWNvbi10cmFpbGluZ3twYWRkaW5nOjAgMTFweCAwIDE1cHh9Lm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1kYy1idXR0b24tLWljb24tbGVhZGluZ3twYWRkaW5nOjAgMTVweCAwIDExcHh9Lm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uIC5tZGMtYnV0dG9uX19yaXBwbGV7dG9wOi0xcHg7bGVmdDotMXB4O2JvdHRvbTotMXB4O3JpZ2h0Oi0xcHg7Ym9yZGVyLXdpZHRoOnZhcigtLW1kYy1vdXRsaW5lZC1idXR0b24tb3V0bGluZS13aWR0aCwgMXB4KX0ubWF0LW1kYy1vdXRsaW5lZC1idXR0b24gLm1kYy1idXR0b25fX3RvdWNoe2xlZnQ6Y2FsYygtMSAqIHZhcigtLW1kYy1vdXRsaW5lZC1idXR0b24tb3V0bGluZS13aWR0aCwgMXB4KSk7d2lkdGg6Y2FsYygxMDAlICsgMiAqIHZhcigtLW1kYy1vdXRsaW5lZC1idXR0b24tb3V0bGluZS13aWR0aCwgMXB4KSl9Lm1hdC1tZGMtYnV0dG9uLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLC5tYXQtbWRjLXJhaXNlZC1idXR0b24sLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uey13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApfS5tYXQtbWRjLWJ1dHRvbiAubWF0LW1kYy1idXR0b24tcmlwcGxlLC5tYXQtbWRjLWJ1dHRvbiAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUsLm1hdC1tZGMtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1yaXBwbGUsLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLXJhaXNlZC1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXJpcHBsZSwubWF0LW1kYy1yYWlzZWQtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZSwubWF0LW1kYy1yYWlzZWQtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbiAubWF0LW1kYy1idXR0b24tcmlwcGxlLC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbiAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUsLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmU7Ym9yZGVyLXJhZGl1czppbmhlcml0fS5tYXQtbWRjLWJ1dHRvbiAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbiAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy1yYWlzZWQtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbiAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZXtjb250ZW50OiIiO29wYWNpdHk6MDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yKX0ubWF0LW1kYy1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWRjLXJhaXNlZC1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcil9Lm1hdC1tZGMtYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbCwubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbiAubWRjLWJ1dHRvbl9fbGFiZWwsLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbiAubWRjLWJ1dHRvbl9fbGFiZWwsLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbHt6LWluZGV4OjF9Lm1hdC1tZGMtYnV0dG9uIC5tYXQtbWRjLWZvY3VzLWluZGljYXRvciwubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbiAubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3IsLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbiAubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3IsLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uIC5tYXQtbWRjLWZvY3VzLWluZGljYXRvcnt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZX0ubWF0LW1kYy1idXR0b246Zm9jdXMgLm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b246Zm9jdXMgLm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbjpmb2N1cyAubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LW1kYy1vdXRsaW5lZC1idXR0b246Zm9jdXMgLm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmV7Y29udGVudDoiIn0ubWF0LW1kYy1idXR0b25bZGlzYWJsZWRdLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uW2Rpc2FibGVkXSwubWF0LW1kYy1yYWlzZWQtYnV0dG9uW2Rpc2FibGVkXSwubWF0LW1kYy1vdXRsaW5lZC1idXR0b25bZGlzYWJsZWRde2N1cnNvcjpkZWZhdWx0O3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1hdC1tZGMtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi10b3VjaC10YXJnZXQsLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXRvdWNoLXRhcmdldCwubWF0LW1kYy1yYWlzZWQtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi10b3VjaC10YXJnZXQsLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi10b3VjaC10YXJnZXR7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtoZWlnaHQ6NDhweDtsZWZ0OjA7cmlnaHQ6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKX0ubWF0LW1kYy1idXR0b24uX21hdC1hbmltYXRpb24tbm9vcGFibGUsLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24uX21hdC1hbmltYXRpb24tbm9vcGFibGUsLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24uX21hdC1hbmltYXRpb24tbm9vcGFibGV7dHJhbnNpdGlvbjpub25lICFpbXBvcnRhbnQ7YW5pbWF0aW9uOm5vbmUgIWltcG9ydGFudH0ubWF0LW1kYy1idXR0b24+Lm1hdC1pY29ue21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjhweDtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt2ZXJ0aWNhbC1hbGlnbjp0b3A7Zm9udC1zaXplOjEuMTI1cmVtO2hlaWdodDoxLjEyNXJlbTt3aWR0aDoxLjEyNXJlbX1bZGlyPXJ0bF0gLm1hdC1tZGMtYnV0dG9uPi5tYXQtaWNvbiwubWF0LW1kYy1idXR0b24+Lm1hdC1pY29uW2Rpcj1ydGxde21hcmdpbi1sZWZ0OjhweDttYXJnaW4tcmlnaHQ6MH0ubWF0LW1kYy1idXR0b24gLm1kYy1idXR0b25fX2xhYmVsKy5tYXQtaWNvbnttYXJnaW4tbGVmdDo4cHg7bWFyZ2luLXJpZ2h0OjB9W2Rpcj1ydGxdIC5tYXQtbWRjLWJ1dHRvbiAubWRjLWJ1dHRvbl9fbGFiZWwrLm1hdC1pY29uLC5tYXQtbWRjLWJ1dHRvbiAubWRjLWJ1dHRvbl9fbGFiZWwrLm1hdC1pY29uW2Rpcj1ydGxde21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjhweH0ubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbj4ubWF0LWljb24sLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbj4ubWF0LWljb24sLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uPi5tYXQtaWNvbnttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDo4cHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246dG9wO2ZvbnQtc2l6ZToxLjEyNXJlbTtoZWlnaHQ6MS4xMjVyZW07d2lkdGg6MS4xMjVyZW07bWFyZ2luLWxlZnQ6LTRweDttYXJnaW4tcmlnaHQ6OHB4fVtkaXI9cnRsXSAubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbj4ubWF0LWljb24sW2Rpcj1ydGxdIC5tYXQtbWRjLXJhaXNlZC1idXR0b24+Lm1hdC1pY29uLFtkaXI9cnRsXSAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24+Lm1hdC1pY29uLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uPi5tYXQtaWNvbltkaXI9cnRsXSwubWF0LW1kYy1yYWlzZWQtYnV0dG9uPi5tYXQtaWNvbltkaXI9cnRsXSwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24+Lm1hdC1pY29uW2Rpcj1ydGxde21hcmdpbi1sZWZ0OjhweDttYXJnaW4tcmlnaHQ6MH1bZGlyPXJ0bF0gLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24+Lm1hdC1pY29uLFtkaXI9cnRsXSAubWF0LW1kYy1yYWlzZWQtYnV0dG9uPi5tYXQtaWNvbixbZGlyPXJ0bF0gLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uPi5tYXQtaWNvbiwubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbj4ubWF0LWljb25bZGlyPXJ0bF0sLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbj4ubWF0LWljb25bZGlyPXJ0bF0sLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uPi5tYXQtaWNvbltkaXI9cnRsXXttYXJnaW4tbGVmdDo4cHg7bWFyZ2luLXJpZ2h0Oi00cHh9Lm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24gLm1kYy1idXR0b25fX2xhYmVsKy5tYXQtaWNvbiwubWF0LW1kYy1yYWlzZWQtYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbCsubWF0LWljb24sLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbCsubWF0LWljb257bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi1yaWdodDotNHB4fVtkaXI9cnRsXSAubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbiAubWRjLWJ1dHRvbl9fbGFiZWwrLm1hdC1pY29uLFtkaXI9cnRsXSAubWF0LW1kYy1yYWlzZWQtYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbCsubWF0LWljb24sW2Rpcj1ydGxdIC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbiAubWRjLWJ1dHRvbl9fbGFiZWwrLm1hdC1pY29uLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbCsubWF0LWljb25bZGlyPXJ0bF0sLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbiAubWRjLWJ1dHRvbl9fbGFiZWwrLm1hdC1pY29uW2Rpcj1ydGxdLC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbiAubWRjLWJ1dHRvbl9fbGFiZWwrLm1hdC1pY29uW2Rpcj1ydGxde21hcmdpbi1sZWZ0Oi00cHg7bWFyZ2luLXJpZ2h0OjhweH0ubWF0LW1kYy1vdXRsaW5lZC1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXJpcHBsZSwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24gLm1kYy1idXR0b25fX3JpcHBsZXt0b3A6LTFweDtsZWZ0Oi0xcHg7Ym90dG9tOi0xcHg7cmlnaHQ6LTFweDtib3JkZXItd2lkdGg6LTFweH0ubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbiAubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LW1kYy1yYWlzZWQtYnV0dG9uIC5tYXQtbWRjLWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle21hcmdpbjpjYWxjKGNhbGModmFyKC0tbWF0LW1kYy1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXdpZHRoLCAzcHgpICsgMnB4KSAqIC0xKX0ubWF0LW1kYy1vdXRsaW5lZC1idXR0b24gLm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmV7bWFyZ2luOmNhbGMoY2FsYyh2YXIoLS1tYXQtbWRjLWZvY3VzLWluZGljYXRvci1ib3JkZXItd2lkdGgsIDNweCkgKyAzcHgpICogLTEpfScsYjJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO25ldyB0ZSgibWF0LW1kYy1mYWItZGVmYXVsdC1vcHRpb25zIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybntjb2xvcjoiYWNjZW50In19fSk7dmFyIEVyPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyB2Mntjb25zdHJ1Y3RvcihlLGkscixvKXtzdXBlcihlLGkscixvKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyh4ZSksQyhWbiksQyhvdCksQyhwaSw4KSl9LG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1siYnV0dG9uIiwibWF0LWljb24tYnV0dG9uIiwiIl1dLGhvc3RWYXJzOjcsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiYoQmUoImRpc2FibGVkIixpLmRpc2FibGVkfHxudWxsKSxudCgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLCJOb29wQW5pbWF0aW9ucyI9PT1pLl9hbmltYXRpb25Nb2RlKSgibWF0LXVudGhlbWVkIiwhaS5jb2xvcikoIm1hdC1tZGMtYnV0dG9uLWJhc2UiLCEwKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIixjb2xvcjoiY29sb3IifSxleHBvcnRBczpbIm1hdEJ1dHRvbiJdLGZlYXR1cmVzOltYZV0sYXR0cnM6VjcsbmdDb250ZW50U2VsZWN0b3JzOkdfZSxkZWNsczo1LHZhcnM6Myxjb25zdHM6W1sxLCJtYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZSIsIm1kYy1pY29uLWJ1dHRvbl9fcmlwcGxlIl0sWzEsIm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yIl0sWyJtYXRSaXBwbGUiLCIiLDEsIm1hdC1tZGMtYnV0dG9uLXJpcHBsZSIsMywibWF0UmlwcGxlRGlzYWJsZWQiLCJtYXRSaXBwbGVDZW50ZXJlZCIsIm1hdFJpcHBsZVRyaWdnZXIiXSxbMSwibWF0LW1kYy1idXR0b24tdG91Y2gtdGFyZ2V0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZm4oKSxrKDAsInNwYW4iLDApLFR0KDEpLGsoMiwic3BhbiIsMSkoMywic3BhbiIsMikoNCwic3BhbiIsMykpLDImZSYmKHYoMyksYigibWF0UmlwcGxlRGlzYWJsZWQiLGkuX2lzUmlwcGxlRGlzYWJsZWQoKSkoIm1hdFJpcHBsZUNlbnRlcmVkIiwhMCkoIm1hdFJpcHBsZVRyaWdnZXIiLGkuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkpfSxkZXBlbmRlbmNpZXM6W0tpXSxzdHlsZXM6WycubWRjLWljb24tYnV0dG9ue2ZvbnQtc2l6ZToyNHB4O3dpZHRoOjQ4cHg7aGVpZ2h0OjQ4cHg7cGFkZGluZzoxMnB4fS5tZGMtaWNvbi1idXR0b24gLm1kYy1pY29uLWJ1dHRvbl9fZm9jdXMtcmluZ3ttYXgtaGVpZ2h0OjQ4cHg7bWF4LXdpZHRoOjQ4cHh9Lm1kYy1pY29uLWJ1dHRvbi5tZGMtaWNvbi1idXR0b24tLXJlZHVjZWQtc2l6ZSAubWRjLWljb24tYnV0dG9uX19yaXBwbGV7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDttYXJnaW4tdG9wOjRweDttYXJnaW4tYm90dG9tOjRweDttYXJnaW4tcmlnaHQ6NHB4O21hcmdpbi1sZWZ0OjRweH0ubWRjLWljb24tYnV0dG9uLm1kYy1pY29uLWJ1dHRvbi0tcmVkdWNlZC1zaXplIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmd7bWF4LWhlaWdodDo0MHB4O21heC13aWR0aDo0MHB4fS5tZGMtaWNvbi1idXR0b24gLm1kYy1pY29uLWJ1dHRvbl9fdG91Y2h7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtoZWlnaHQ6NDhweDtsZWZ0OjUwJTt3aWR0aDo0OHB4O3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwgLTUwJSl9Lm1kYy1pY29uLWJ1dHRvbiBzdmcsLm1kYy1pY29uLWJ1dHRvbiBpbWd7d2lkdGg6MjRweDtoZWlnaHQ6MjRweH0ubWRjLWljb24tYnV0dG9ue2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6bm9uZTtvdXRsaW5lOm5vbmU7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApO2ZpbGw6Y3VycmVudENvbG9yO2NvbG9yOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y3Vyc29yOnBvaW50ZXI7dXNlci1zZWxlY3Q6bm9uZTt6LWluZGV4OjA7b3ZlcmZsb3c6dmlzaWJsZX0ubWRjLWljb24tYnV0dG9uIC5tZGMtaWNvbi1idXR0b25fX3RvdWNoe3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7aGVpZ2h0OjQ4cHg7bGVmdDo1MCU7d2lkdGg6NDhweDt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC01MCUpfUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpey5tZGMtaWNvbi1idXR0b24ubWRjLXJpcHBsZS11cGdyYWRlZC0tYmFja2dyb3VuZC1mb2N1c2VkIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmcsLm1kYy1pY29uLWJ1dHRvbjpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmd7ZGlzcGxheTpibG9ja319Lm1kYy1pY29uLWJ1dHRvbjpkaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdDtwb2ludGVyLWV2ZW50czpub25lfS5tZGMtaWNvbi1idXR0b25baGlkZGVuXXtkaXNwbGF5Om5vbmV9Lm1kYy1pY29uLWJ1dHRvbi0tZGlzcGxheS1mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lm1kYy1pY29uLWJ1dHRvbl9fZm9jdXMtcmluZ3twb2ludGVyLWV2ZW50czpub25lO2JvcmRlcjoycHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItcmFkaXVzOjZweDtib3gtc2l6aW5nOmNvbnRlbnQtYm94O3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO2Rpc3BsYXk6bm9uZX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKXsubWRjLWljb24tYnV0dG9uX19mb2N1cy1yaW5ne2JvcmRlci1jb2xvcjpDYW52YXNUZXh0fX0ubWRjLWljb24tYnV0dG9uX19mb2N1cy1yaW5nOjphZnRlcntjb250ZW50OiIiO2JvcmRlcjoycHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItcmFkaXVzOjhweDtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtoZWlnaHQ6Y2FsYygxMDAlICsgNHB4KTt3aWR0aDpjYWxjKDEwMCUgKyA0cHgpfUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpey5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmc6OmFmdGVye2JvcmRlci1jb2xvcjpDYW52YXNUZXh0fX0ubWRjLWljb24tYnV0dG9uX19pY29ue2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5tZGMtaWNvbi1idXR0b25fX2ljb24ubWRjLWljb24tYnV0dG9uX19pY29uLS1vbntkaXNwbGF5Om5vbmV9Lm1kYy1pY29uLWJ1dHRvbi0tb24gLm1kYy1pY29uLWJ1dHRvbl9faWNvbntkaXNwbGF5Om5vbmV9Lm1kYy1pY29uLWJ1dHRvbi0tb24gLm1kYy1pY29uLWJ1dHRvbl9faWNvbi5tZGMtaWNvbi1idXR0b25fX2ljb24tLW9ue2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5tZGMtaWNvbi1idXR0b25fX2xpbmt7aGVpZ2h0OjEwMCU7bGVmdDowO291dGxpbmU6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDoxMDAlfS5tYXQtbWRjLWljb24tYnV0dG9ue2hlaWdodDp2YXIoLS1tZGMtaWNvbi1idXR0b24tc3RhdGUtbGF5ZXItc2l6ZSwgNDhweCk7d2lkdGg6dmFyKC0tbWRjLWljb24tYnV0dG9uLXN0YXRlLWxheWVyLXNpemUsIDQ4cHgpO2NvbG9yOnZhcigtLW1kYy1pY29uLWJ1dHRvbi1pY29uLWNvbG9yLCBpbmhlcml0KTtib3JkZXItcmFkaXVzOjUwJTtmbGV4LXNocmluazowO3RleHQtYWxpZ246Y2VudGVyOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApfS5tYXQtbWRjLWljb24tYnV0dG9uIC5tZGMtYnV0dG9uX19pY29ue2ZvbnQtc2l6ZTp2YXIoLS1tZGMtaWNvbi1idXR0b24taWNvbi1zaXplLCAyNHB4KX0ubWF0LW1kYy1pY29uLWJ1dHRvbiBzdmcsLm1hdC1tZGMtaWNvbi1idXR0b24gaW1ne3dpZHRoOnZhcigtLW1kYy1pY29uLWJ1dHRvbi1pY29uLXNpemUsIDI0cHgpO2hlaWdodDp2YXIoLS1tZGMtaWNvbi1idXR0b24taWNvbi1zaXplLCAyNHB4KX0ubWF0LW1kYy1pY29uLWJ1dHRvbjpkaXNhYmxlZHtvcGFjaXR5OnZhcigtLW1kYy1pY29uLWJ1dHRvbi1kaXNhYmxlZC1pY29uLW9wYWNpdHksIDAuMzgpfS5tYXQtbWRjLWljb24tYnV0dG9uOmRpc2FibGVke2NvbG9yOnZhcigtLW1kYy1pY29uLWJ1dHRvbi1kaXNhYmxlZC1pY29uLWNvbG9yLCAjMDAwKX0ubWF0LW1kYy1pY29uLWJ1dHRvbiBzdmd7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9Lm1hdC1tZGMtaWNvbi1idXR0b25bZGlzYWJsZWRde2N1cnNvcjpkZWZhdWx0O3BvaW50ZXItZXZlbnRzOm5vbmU7b3BhY2l0eToxfS5tYXQtbWRjLWljb24tYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1yaXBwbGUsLm1hdC1tZGMtaWNvbi1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLC5tYXQtbWRjLWljb24tYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmU7Ym9yZGVyLXJhZGl1czppbmhlcml0fS5tYXQtbWRjLWljb24tYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle2NvbnRlbnQ6IiI7b3BhY2l0eTowO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3IpfS5tYXQtbWRjLWljb24tYnV0dG9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3IpfS5tYXQtbWRjLWljb24tYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbHt6LWluZGV4OjF9Lm1hdC1tZGMtaWNvbi1idXR0b24gLm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9ye3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlfS5tYXQtbWRjLWljb24tYnV0dG9uOmZvY3VzIC5tYXQtbWRjLWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle2NvbnRlbnQ6IiJ9Lm1hdC1tZGMtaWNvbi1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXRvdWNoLXRhcmdldHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2hlaWdodDo0OHB4O2xlZnQ6NTAlO3dpZHRoOjQ4cHg7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKX0ubWF0LW1kYy1pY29uLWJ1dHRvbi5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXt0cmFuc2l0aW9uOm5vbmUgIWltcG9ydGFudDthbmltYXRpb246bm9uZSAhaW1wb3J0YW50fS5tYXQtbWRjLWljb24tYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZXtib3JkZXItcmFkaXVzOjUwJX0ubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtdW50aGVtZWQ6bm90KC5tZGMtcmlwcGxlLXVwZ3JhZGVkKTpmb2N1czo6YmVmb3JlLC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1wcmltYXJ5Om5vdCgubWRjLXJpcHBsZS11cGdyYWRlZCk6Zm9jdXM6OmJlZm9yZSwubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtYWNjZW50Om5vdCgubWRjLXJpcHBsZS11cGdyYWRlZCk6Zm9jdXM6OmJlZm9yZSwubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtd2Fybjpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDApO29wYWNpdHk6MX0nLGIyXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxqNz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgSDd7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIoZSxpLHIsbyl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoeGUpLEMoVm4pLEMob3QpLEMocGksOCkpfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbImEiLCJtYXQtaWNvbi1idXR0b24iLCIiXV0saG9zdFZhcnM6OSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJihCZSgiZGlzYWJsZWQiLGkuZGlzYWJsZWR8fG51bGwpKCJ0YWJpbmRleCIsaS5kaXNhYmxlZD8tMTppLnRhYkluZGV4KSgiYXJpYS1kaXNhYmxlZCIsaS5kaXNhYmxlZC50b1N0cmluZygpKSxudCgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLCJOb29wQW5pbWF0aW9ucyI9PT1pLl9hbmltYXRpb25Nb2RlKSgibWF0LXVudGhlbWVkIiwhaS5jb2xvcikoIm1hdC1tZGMtYnV0dG9uLWJhc2UiLCEwKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIixjb2xvcjoiY29sb3IiLHRhYkluZGV4OiJ0YWJJbmRleCJ9LGV4cG9ydEFzOlsibWF0QnV0dG9uIiwibWF0QW5jaG9yIl0sZmVhdHVyZXM6W1hlXSxhdHRyczpWNyxuZ0NvbnRlbnRTZWxlY3RvcnM6XzIsZGVjbHM6OCx2YXJzOjYsY29uc3RzOltbMSwibWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUiXSxbMSwibWRjLWJ1dHRvbl9fbGFiZWwiXSxbMSwibWF0LW1kYy1mb2N1cy1pbmRpY2F0b3IiXSxbIm1hdFJpcHBsZSIsIiIsMSwibWF0LW1kYy1idXR0b24tcmlwcGxlIiwzLCJtYXRSaXBwbGVEaXNhYmxlZCIsIm1hdFJpcHBsZVRyaWdnZXIiXSxbMSwibWF0LW1kYy1idXR0b24tdG91Y2gtdGFyZ2V0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZm4oZzIpLGsoMCwic3BhbiIsMCksVHQoMSksZigyLCJzcGFuIiwxKSxUdCgzLDEpLGcoKSxUdCg0LDIpLGsoNSwic3BhbiIsMikoNiwic3BhbiIsMykoNywic3BhbiIsNCkpLDImZSYmKG50KCJtZGMtYnV0dG9uX19yaXBwbGUiLCFpLl9pc0ZhYikoIm1kYy1mYWJfX3JpcHBsZSIsaS5faXNGYWIpLHYoNiksYigibWF0UmlwcGxlRGlzYWJsZWQiLGkuX2lzUmlwcGxlRGlzYWJsZWQoKSkoIm1hdFJpcHBsZVRyaWdnZXIiLGkuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkpfSxkZXBlbmRlbmNpZXM6W0tpXSxzdHlsZXM6WycubWRjLWljb24tYnV0dG9ue2ZvbnQtc2l6ZToyNHB4O3dpZHRoOjQ4cHg7aGVpZ2h0OjQ4cHg7cGFkZGluZzoxMnB4fS5tZGMtaWNvbi1idXR0b24gLm1kYy1pY29uLWJ1dHRvbl9fZm9jdXMtcmluZ3ttYXgtaGVpZ2h0OjQ4cHg7bWF4LXdpZHRoOjQ4cHh9Lm1kYy1pY29uLWJ1dHRvbi5tZGMtaWNvbi1idXR0b24tLXJlZHVjZWQtc2l6ZSAubWRjLWljb24tYnV0dG9uX19yaXBwbGV7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDttYXJnaW4tdG9wOjRweDttYXJnaW4tYm90dG9tOjRweDttYXJnaW4tcmlnaHQ6NHB4O21hcmdpbi1sZWZ0OjRweH0ubWRjLWljb24tYnV0dG9uLm1kYy1pY29uLWJ1dHRvbi0tcmVkdWNlZC1zaXplIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmd7bWF4LWhlaWdodDo0MHB4O21heC13aWR0aDo0MHB4fS5tZGMtaWNvbi1idXR0b24gLm1kYy1pY29uLWJ1dHRvbl9fdG91Y2h7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtoZWlnaHQ6NDhweDtsZWZ0OjUwJTt3aWR0aDo0OHB4O3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwgLTUwJSl9Lm1kYy1pY29uLWJ1dHRvbiBzdmcsLm1kYy1pY29uLWJ1dHRvbiBpbWd7d2lkdGg6MjRweDtoZWlnaHQ6MjRweH0ubWRjLWljb24tYnV0dG9ue2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6bm9uZTtvdXRsaW5lOm5vbmU7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApO2ZpbGw6Y3VycmVudENvbG9yO2NvbG9yOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y3Vyc29yOnBvaW50ZXI7dXNlci1zZWxlY3Q6bm9uZTt6LWluZGV4OjA7b3ZlcmZsb3c6dmlzaWJsZX0ubWRjLWljb24tYnV0dG9uIC5tZGMtaWNvbi1idXR0b25fX3RvdWNoe3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7aGVpZ2h0OjQ4cHg7bGVmdDo1MCU7d2lkdGg6NDhweDt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC01MCUpfUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpey5tZGMtaWNvbi1idXR0b24ubWRjLXJpcHBsZS11cGdyYWRlZC0tYmFja2dyb3VuZC1mb2N1c2VkIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmcsLm1kYy1pY29uLWJ1dHRvbjpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmd7ZGlzcGxheTpibG9ja319Lm1kYy1pY29uLWJ1dHRvbjpkaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdDtwb2ludGVyLWV2ZW50czpub25lfS5tZGMtaWNvbi1idXR0b25baGlkZGVuXXtkaXNwbGF5Om5vbmV9Lm1kYy1pY29uLWJ1dHRvbi0tZGlzcGxheS1mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lm1kYy1pY29uLWJ1dHRvbl9fZm9jdXMtcmluZ3twb2ludGVyLWV2ZW50czpub25lO2JvcmRlcjoycHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItcmFkaXVzOjZweDtib3gtc2l6aW5nOmNvbnRlbnQtYm94O3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO2Rpc3BsYXk6bm9uZX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKXsubWRjLWljb24tYnV0dG9uX19mb2N1cy1yaW5ne2JvcmRlci1jb2xvcjpDYW52YXNUZXh0fX0ubWRjLWljb24tYnV0dG9uX19mb2N1cy1yaW5nOjphZnRlcntjb250ZW50OiIiO2JvcmRlcjoycHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItcmFkaXVzOjhweDtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtoZWlnaHQ6Y2FsYygxMDAlICsgNHB4KTt3aWR0aDpjYWxjKDEwMCUgKyA0cHgpfUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpey5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmc6OmFmdGVye2JvcmRlci1jb2xvcjpDYW52YXNUZXh0fX0ubWRjLWljb24tYnV0dG9uX19pY29ue2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5tZGMtaWNvbi1idXR0b25fX2ljb24ubWRjLWljb24tYnV0dG9uX19pY29uLS1vbntkaXNwbGF5Om5vbmV9Lm1kYy1pY29uLWJ1dHRvbi0tb24gLm1kYy1pY29uLWJ1dHRvbl9faWNvbntkaXNwbGF5Om5vbmV9Lm1kYy1pY29uLWJ1dHRvbi0tb24gLm1kYy1pY29uLWJ1dHRvbl9faWNvbi5tZGMtaWNvbi1idXR0b25fX2ljb24tLW9ue2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5tZGMtaWNvbi1idXR0b25fX2xpbmt7aGVpZ2h0OjEwMCU7bGVmdDowO291dGxpbmU6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDoxMDAlfS5tYXQtbWRjLWljb24tYnV0dG9ue2hlaWdodDp2YXIoLS1tZGMtaWNvbi1idXR0b24tc3RhdGUtbGF5ZXItc2l6ZSwgNDhweCk7d2lkdGg6dmFyKC0tbWRjLWljb24tYnV0dG9uLXN0YXRlLWxheWVyLXNpemUsIDQ4cHgpO2NvbG9yOnZhcigtLW1kYy1pY29uLWJ1dHRvbi1pY29uLWNvbG9yLCBpbmhlcml0KTtib3JkZXItcmFkaXVzOjUwJTtmbGV4LXNocmluazowO3RleHQtYWxpZ246Y2VudGVyOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApfS5tYXQtbWRjLWljb24tYnV0dG9uIC5tZGMtYnV0dG9uX19pY29ue2ZvbnQtc2l6ZTp2YXIoLS1tZGMtaWNvbi1idXR0b24taWNvbi1zaXplLCAyNHB4KX0ubWF0LW1kYy1pY29uLWJ1dHRvbiBzdmcsLm1hdC1tZGMtaWNvbi1idXR0b24gaW1ne3dpZHRoOnZhcigtLW1kYy1pY29uLWJ1dHRvbi1pY29uLXNpemUsIDI0cHgpO2hlaWdodDp2YXIoLS1tZGMtaWNvbi1idXR0b24taWNvbi1zaXplLCAyNHB4KX0ubWF0LW1kYy1pY29uLWJ1dHRvbjpkaXNhYmxlZHtvcGFjaXR5OnZhcigtLW1kYy1pY29uLWJ1dHRvbi1kaXNhYmxlZC1pY29uLW9wYWNpdHksIDAuMzgpfS5tYXQtbWRjLWljb24tYnV0dG9uOmRpc2FibGVke2NvbG9yOnZhcigtLW1kYy1pY29uLWJ1dHRvbi1kaXNhYmxlZC1pY29uLWNvbG9yLCAjMDAwKX0ubWF0LW1kYy1pY29uLWJ1dHRvbiBzdmd7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9Lm1hdC1tZGMtaWNvbi1idXR0b25bZGlzYWJsZWRde2N1cnNvcjpkZWZhdWx0O3BvaW50ZXItZXZlbnRzOm5vbmU7b3BhY2l0eToxfS5tYXQtbWRjLWljb24tYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1yaXBwbGUsLm1hdC1tZGMtaWNvbi1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLC5tYXQtbWRjLWljb24tYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmU7Ym9yZGVyLXJhZGl1czppbmhlcml0fS5tYXQtbWRjLWljb24tYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle2NvbnRlbnQ6IiI7b3BhY2l0eTowO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3IpfS5tYXQtbWRjLWljb24tYnV0dG9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3IpfS5tYXQtbWRjLWljb24tYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbHt6LWluZGV4OjF9Lm1hdC1tZGMtaWNvbi1idXR0b24gLm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9ye3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlfS5tYXQtbWRjLWljb24tYnV0dG9uOmZvY3VzIC5tYXQtbWRjLWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle2NvbnRlbnQ6IiJ9Lm1hdC1tZGMtaWNvbi1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXRvdWNoLXRhcmdldHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2hlaWdodDo0OHB4O2xlZnQ6NTAlO3dpZHRoOjQ4cHg7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKX0ubWF0LW1kYy1pY29uLWJ1dHRvbi5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXt0cmFuc2l0aW9uOm5vbmUgIWltcG9ydGFudDthbmltYXRpb246bm9uZSAhaW1wb3J0YW50fS5tYXQtbWRjLWljb24tYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZXtib3JkZXItcmFkaXVzOjUwJX0ubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtdW50aGVtZWQ6bm90KC5tZGMtcmlwcGxlLXVwZ3JhZGVkKTpmb2N1czo6YmVmb3JlLC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1wcmltYXJ5Om5vdCgubWRjLXJpcHBsZS11cGdyYWRlZCk6Zm9jdXM6OmJlZm9yZSwubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtYWNjZW50Om5vdCgubWRjLXJpcHBsZS11cGdyYWRlZCk6Zm9jdXM6OmJlZm9yZSwubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtd2Fybjpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDApO29wYWNpdHk6MX0nLGIyXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxLbj0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9SCh7aW1wb3J0czpbZG4sX2EsZG5dfSksbn0pKCksR3Y9Y2xhc3N7YXR0YWNoKHQpe3JldHVybiB0aGlzLl9hdHRhY2hlZEhvc3Q9dCx0LmF0dGFjaCh0aGlzKX1kZXRhY2goKXtsZXQgdD10aGlzLl9hdHRhY2hlZEhvc3Q7bnVsbCE9dCYmKHRoaXMuX2F0dGFjaGVkSG9zdD1udWxsLHQuZGV0YWNoKCkpfWdldCBpc0F0dGFjaGVkKCl7cmV0dXJuIG51bGwhPXRoaXMuX2F0dGFjaGVkSG9zdH1zZXRBdHRhY2hlZEhvc3QodCl7dGhpcy5fYXR0YWNoZWRIb3N0PXR9fSxMbD1jbGFzcyBleHRlbmRzIEd2e2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7c3VwZXIoKSx0aGlzLmNvbXBvbmVudD10LHRoaXMudmlld0NvbnRhaW5lclJlZj1lLHRoaXMuaW5qZWN0b3I9aSx0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1yLHRoaXMucHJvamVjdGFibGVOb2Rlcz1vfX0sVG89Y2xhc3MgZXh0ZW5kcyBHdntjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcigpLHRoaXMudGVtcGxhdGVSZWY9dCx0aGlzLnZpZXdDb250YWluZXJSZWY9ZSx0aGlzLmNvbnRleHQ9aSx0aGlzLmluamVjdG9yPXJ9Z2V0IG9yaWdpbigpe3JldHVybiB0aGlzLnRlbXBsYXRlUmVmLmVsZW1lbnRSZWZ9YXR0YWNoKHQsZT10aGlzLmNvbnRleHQpe3JldHVybiB0aGlzLmNvbnRleHQ9ZSxzdXBlci5hdHRhY2godCl9ZGV0YWNoKCl7cmV0dXJuIHRoaXMuY29udGV4dD12b2lkIDAsc3VwZXIuZGV0YWNoKCl9fSx5Mj1jbGFzcyBleHRlbmRzIEd2e2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5lbGVtZW50PXQgaW5zdGFuY2VvZiB4ZT90Lm5hdGl2ZUVsZW1lbnQ6dH19LE51PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5faXNEaXNwb3NlZD0hMSx0aGlzLmF0dGFjaERvbVBvcnRhbD1udWxsfWhhc0F0dGFjaGVkKCl7cmV0dXJuISF0aGlzLl9hdHRhY2hlZFBvcnRhbH1hdHRhY2godCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBMbD8odGhpcy5fYXR0YWNoZWRQb3J0YWw9dCx0aGlzLmF0dGFjaENvbXBvbmVudFBvcnRhbCh0KSk6dCBpbnN0YW5jZW9mIFRvPyh0aGlzLl9hdHRhY2hlZFBvcnRhbD10LHRoaXMuYXR0YWNoVGVtcGxhdGVQb3J0YWwodCkpOnRoaXMuYXR0YWNoRG9tUG9ydGFsJiZ0IGluc3RhbmNlb2YgeTI/KHRoaXMuX2F0dGFjaGVkUG9ydGFsPXQsdGhpcy5hdHRhY2hEb21Qb3J0YWwodCkpOnZvaWQgMH1kZXRhY2goKXt0aGlzLl9hdHRhY2hlZFBvcnRhbCYmKHRoaXMuX2F0dGFjaGVkUG9ydGFsLnNldEF0dGFjaGVkSG9zdChudWxsKSx0aGlzLl9hdHRhY2hlZFBvcnRhbD1udWxsKSx0aGlzLl9pbnZva2VEaXNwb3NlRm4oKX1kaXNwb3NlKCl7dGhpcy5oYXNBdHRhY2hlZCgpJiZ0aGlzLmRldGFjaCgpLHRoaXMuX2ludm9rZURpc3Bvc2VGbigpLHRoaXMuX2lzRGlzcG9zZWQ9ITB9c2V0RGlzcG9zZUZuKHQpe3RoaXMuX2Rpc3Bvc2VGbj10fV9pbnZva2VEaXNwb3NlRm4oKXt0aGlzLl9kaXNwb3NlRm4mJih0aGlzLl9kaXNwb3NlRm4oKSx0aGlzLl9kaXNwb3NlRm49bnVsbCl9fSxXdj1jbGFzcyBleHRlbmRzIE51e2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7c3VwZXIoKSx0aGlzLm91dGxldEVsZW1lbnQ9dCx0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9ZSx0aGlzLl9hcHBSZWY9aSx0aGlzLl9kZWZhdWx0SW5qZWN0b3I9cix0aGlzLmF0dGFjaERvbVBvcnRhbD1hPT57bGV0IHM9YS5lbGVtZW50LGw9dGhpcy5fZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgiZG9tLXBvcnRhbCIpO3MucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobCxzKSx0aGlzLm91dGxldEVsZW1lbnQuYXBwZW5kQ2hpbGQocyksdGhpcy5fYXR0YWNoZWRQb3J0YWw9YSxzdXBlci5zZXREaXNwb3NlRm4oKCk9PntsLnBhcmVudE5vZGUmJmwucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQocyxsKX0pfSx0aGlzLl9kb2N1bWVudD1vfWF0dGFjaENvbXBvbmVudFBvcnRhbCh0KXtsZXQgcixpPSh0LmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcnx8dGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyKS5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh0LmNvbXBvbmVudCk7cmV0dXJuIHQudmlld0NvbnRhaW5lclJlZj8ocj10LnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGksdC52aWV3Q29udGFpbmVyUmVmLmxlbmd0aCx0LmluamVjdG9yfHx0LnZpZXdDb250YWluZXJSZWYuaW5qZWN0b3IsdC5wcm9qZWN0YWJsZU5vZGVzfHx2b2lkIDApLHRoaXMuc2V0RGlzcG9zZUZuKCgpPT5yLmRlc3Ryb3koKSkpOihyPWkuY3JlYXRlKHQuaW5qZWN0b3J8fHRoaXMuX2RlZmF1bHRJbmplY3Rvcnx8d2kuTlVMTCksdGhpcy5fYXBwUmVmLmF0dGFjaFZpZXcoci5ob3N0VmlldyksdGhpcy5zZXREaXNwb3NlRm4oKCk9Pnt0aGlzLl9hcHBSZWYudmlld0NvdW50PjAmJnRoaXMuX2FwcFJlZi5kZXRhY2hWaWV3KHIuaG9zdFZpZXcpLHIuZGVzdHJveSgpfSkpLHRoaXMub3V0bGV0RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9nZXRDb21wb25lbnRSb290Tm9kZShyKSksdGhpcy5fYXR0YWNoZWRQb3J0YWw9dCxyfWF0dGFjaFRlbXBsYXRlUG9ydGFsKHQpe2xldCBlPXQudmlld0NvbnRhaW5lclJlZixpPWUuY3JlYXRlRW1iZWRkZWRWaWV3KHQudGVtcGxhdGVSZWYsdC5jb250ZXh0LHtpbmplY3Rvcjp0LmluamVjdG9yfSk7cmV0dXJuIGkucm9vdE5vZGVzLmZvckVhY2gocj0+dGhpcy5vdXRsZXRFbGVtZW50LmFwcGVuZENoaWxkKHIpKSxpLmRldGVjdENoYW5nZXMoKSx0aGlzLnNldERpc3Bvc2VGbigoKT0+e2xldCByPWUuaW5kZXhPZihpKTstMSE9PXImJmUucmVtb3ZlKHIpfSksdGhpcy5fYXR0YWNoZWRQb3J0YWw9dCxpfWRpc3Bvc2UoKXtzdXBlci5kaXNwb3NlKCksdGhpcy5vdXRsZXRFbGVtZW50LnJlbW92ZSgpfV9nZXRDb21wb25lbnRSb290Tm9kZSh0KXtyZXR1cm4gdC5ob3N0Vmlldy5yb290Tm9kZXNbMF19fSxHNz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgVG97Y29uc3RydWN0b3IoZSxpKXtzdXBlcihlLGkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKG9pKSxDKGVpKSl9LG4uXHUwMjc1ZGlyPU1lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNka1BvcnRhbCIsIiJdXSxleHBvcnRBczpbImNka1BvcnRhbCJdLGZlYXR1cmVzOltYZV19KSxufSkoKSxiYT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgTnV7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKCksdGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPWUsdGhpcy5fdmlld0NvbnRhaW5lclJlZj1pLHRoaXMuX2lzSW5pdGlhbGl6ZWQ9ITEsdGhpcy5hdHRhY2hlZD1uZXcgRix0aGlzLmF0dGFjaERvbVBvcnRhbD1vPT57bGV0IGE9by5lbGVtZW50LHM9dGhpcy5fZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgiZG9tLXBvcnRhbCIpO28uc2V0QXR0YWNoZWRIb3N0KHRoaXMpLGEucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocyxhKSx0aGlzLl9nZXRSb290Tm9kZSgpLmFwcGVuZENoaWxkKGEpLHRoaXMuX2F0dGFjaGVkUG9ydGFsPW8sc3VwZXIuc2V0RGlzcG9zZUZuKCgpPT57cy5wYXJlbnROb2RlJiZzLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGEscyl9KX0sdGhpcy5fZG9jdW1lbnQ9cn1nZXQgcG9ydGFsKCl7cmV0dXJuIHRoaXMuX2F0dGFjaGVkUG9ydGFsfXNldCBwb3J0YWwoZSl7dGhpcy5oYXNBdHRhY2hlZCgpJiYhZSYmIXRoaXMuX2lzSW5pdGlhbGl6ZWR8fCh0aGlzLmhhc0F0dGFjaGVkKCkmJnN1cGVyLmRldGFjaCgpLGUmJnN1cGVyLmF0dGFjaChlKSx0aGlzLl9hdHRhY2hlZFBvcnRhbD1lfHxudWxsKX1nZXQgYXR0YWNoZWRSZWYoKXtyZXR1cm4gdGhpcy5fYXR0YWNoZWRSZWZ9bmdPbkluaXQoKXt0aGlzLl9pc0luaXRpYWxpemVkPSEwfW5nT25EZXN0cm95KCl7c3VwZXIuZGlzcG9zZSgpLHRoaXMuX2F0dGFjaGVkUmVmPXRoaXMuX2F0dGFjaGVkUG9ydGFsPW51bGx9YXR0YWNoQ29tcG9uZW50UG9ydGFsKGUpe2Uuc2V0QXR0YWNoZWRIb3N0KHRoaXMpO2xldCBpPW51bGwhPWUudmlld0NvbnRhaW5lclJlZj9lLnZpZXdDb250YWluZXJSZWY6dGhpcy5fdmlld0NvbnRhaW5lclJlZixvPShlLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcnx8dGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyKS5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShlLmNvbXBvbmVudCksYT1pLmNyZWF0ZUNvbXBvbmVudChvLGkubGVuZ3RoLGUuaW5qZWN0b3J8fGkuaW5qZWN0b3IsZS5wcm9qZWN0YWJsZU5vZGVzfHx2b2lkIDApO3JldHVybiBpIT09dGhpcy5fdmlld0NvbnRhaW5lclJlZiYmdGhpcy5fZ2V0Um9vdE5vZGUoKS5hcHBlbmRDaGlsZChhLmhvc3RWaWV3LnJvb3ROb2Rlc1swXSksc3VwZXIuc2V0RGlzcG9zZUZuKCgpPT5hLmRlc3Ryb3koKSksdGhpcy5fYXR0YWNoZWRQb3J0YWw9ZSx0aGlzLl9hdHRhY2hlZFJlZj1hLHRoaXMuYXR0YWNoZWQuZW1pdChhKSxhfWF0dGFjaFRlbXBsYXRlUG9ydGFsKGUpe2Uuc2V0QXR0YWNoZWRIb3N0KHRoaXMpO2xldCBpPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KGUudGVtcGxhdGVSZWYsZS5jb250ZXh0LHtpbmplY3RvcjplLmluamVjdG9yfSk7cmV0dXJuIHN1cGVyLnNldERpc3Bvc2VGbigoKT0+dGhpcy5fdmlld0NvbnRhaW5lclJlZi5jbGVhcigpKSx0aGlzLl9hdHRhY2hlZFBvcnRhbD1lLHRoaXMuX2F0dGFjaGVkUmVmPWksdGhpcy5hdHRhY2hlZC5lbWl0KGkpLGl9X2dldFJvb3ROb2RlKCl7bGV0IGU9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7cmV0dXJuIGUubm9kZVR5cGU9PT1lLkVMRU1FTlRfTk9ERT9lOmUucGFyZW50Tm9kZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhobyksQyhlaSksQyhOdCkpfSxuLlx1MDI3NWRpcj1NZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGtQb3J0YWxPdXRsZXQiLCIiXV0saW5wdXRzOntwb3J0YWw6WyJjZGtQb3J0YWxPdXRsZXQiLCJwb3J0YWwiXX0sb3V0cHV0czp7YXR0YWNoZWQ6ImF0dGFjaGVkIn0sZXhwb3J0QXM6WyJjZGtQb3J0YWxPdXRsZXQiXSxmZWF0dXJlczpbWGVdfSksbn0pKCksQmw9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe30pLG59KSgpLHgyPWNsYXNze30sRzE9Y2xhc3MgZXh0ZW5kcyB4Mntjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuX2RhdGE9dH1jb25uZWN0KCl7cmV0dXJuIFBfKHRoaXMuX2RhdGEpP3RoaXMuX2RhdGE6JHQodGhpcy5fZGF0YSl9ZGlzY29ubmVjdCgpe319LFcxPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy52aWV3Q2FjaGVTaXplPTIwLHRoaXMuX3ZpZXdDYWNoZT1bXX1hcHBseUNoYW5nZXModCxlLGkscixvKXt0LmZvckVhY2hPcGVyYXRpb24oKGEscyxsKT0+e2xldCBjLGQ7bnVsbD09YS5wcmV2aW91c0luZGV4PyhjPXRoaXMuX2luc2VydFZpZXcoKCk9PmkoYSxzLGwpLGwsZSxyKGEpKSxkPWM/MTowKTpudWxsPT1sPyh0aGlzLl9kZXRhY2hBbmRDYWNoZVZpZXcocyxlKSxkPTMpOihjPXRoaXMuX21vdmVWaWV3KHMsbCxlLHIoYSkpLGQ9MiksbyYmbyh7Y29udGV4dDpjPy5jb250ZXh0LG9wZXJhdGlvbjpkLHJlY29yZDphfSl9KX1kZXRhY2goKXtmb3IobGV0IHQgb2YgdGhpcy5fdmlld0NhY2hlKXQuZGVzdHJveSgpO3RoaXMuX3ZpZXdDYWNoZT1bXX1faW5zZXJ0Vmlldyh0LGUsaSxyKXtsZXQgbz10aGlzLl9pbnNlcnRWaWV3RnJvbUNhY2hlKGUsaSk7aWYobylyZXR1cm4gdm9pZChvLmNvbnRleHQuJGltcGxpY2l0PXIpO2xldCBhPXQoKTtyZXR1cm4gaS5jcmVhdGVFbWJlZGRlZFZpZXcoYS50ZW1wbGF0ZVJlZixhLmNvbnRleHQsYS5pbmRleCl9X2RldGFjaEFuZENhY2hlVmlldyh0LGUpe2xldCBpPWUuZGV0YWNoKHQpO3RoaXMuX21heWJlQ2FjaGVWaWV3KGksZSl9X21vdmVWaWV3KHQsZSxpLHIpe2xldCBvPWkuZ2V0KHQpO3JldHVybiBpLm1vdmUobyxlKSxvLmNvbnRleHQuJGltcGxpY2l0PXIsb31fbWF5YmVDYWNoZVZpZXcodCxlKXtpZih0aGlzLl92aWV3Q2FjaGUubGVuZ3RoPHRoaXMudmlld0NhY2hlU2l6ZSl0aGlzLl92aWV3Q2FjaGUucHVzaCh0KTtlbHNle2xldCBpPWUuaW5kZXhPZih0KTstMT09PWk/dC5kZXN0cm95KCk6ZS5yZW1vdmUoaSl9fV9pbnNlcnRWaWV3RnJvbUNhY2hlKHQsZSl7bGV0IGk9dGhpcy5fdmlld0NhY2hlLnBvcCgpO3JldHVybiBpJiZlLmluc2VydChpLHQpLGl8fG51bGx9fSxmZz1jbGFzc3tnZXQgc2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5fc2VsZWN0ZWR8fCh0aGlzLl9zZWxlY3RlZD1BcnJheS5mcm9tKHRoaXMuX3NlbGVjdGlvbi52YWx1ZXMoKSkpLHRoaXMuX3NlbGVjdGVkfWNvbnN0cnVjdG9yKHQ9ITEsZSxpPSEwLHIpe3RoaXMuX211bHRpcGxlPXQsdGhpcy5fZW1pdENoYW5nZXM9aSx0aGlzLmNvbXBhcmVXaXRoPXIsdGhpcy5fc2VsZWN0aW9uPW5ldyBTZXQsdGhpcy5fZGVzZWxlY3RlZFRvRW1pdD1bXSx0aGlzLl9zZWxlY3RlZFRvRW1pdD1bXSx0aGlzLmNoYW5nZWQ9bmV3IEVlLGUmJmUubGVuZ3RoJiYodD9lLmZvckVhY2gobz0+dGhpcy5fbWFya1NlbGVjdGVkKG8pKTp0aGlzLl9tYXJrU2VsZWN0ZWQoZVswXSksdGhpcy5fc2VsZWN0ZWRUb0VtaXQubGVuZ3RoPTApfXNlbGVjdCguLi50KXt0aGlzLl92ZXJpZnlWYWx1ZUFzc2lnbm1lbnQodCksdC5mb3JFYWNoKGk9PnRoaXMuX21hcmtTZWxlY3RlZChpKSk7bGV0IGU9dGhpcy5faGFzUXVldWVkQ2hhbmdlcygpO3JldHVybiB0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKSxlfWRlc2VsZWN0KC4uLnQpe3RoaXMuX3ZlcmlmeVZhbHVlQXNzaWdubWVudCh0KSx0LmZvckVhY2goaT0+dGhpcy5fdW5tYXJrU2VsZWN0ZWQoaSkpO2xldCBlPXRoaXMuX2hhc1F1ZXVlZENoYW5nZXMoKTtyZXR1cm4gdGhpcy5fZW1pdENoYW5nZUV2ZW50KCksZX1zZXRTZWxlY3Rpb24oLi4udCl7dGhpcy5fdmVyaWZ5VmFsdWVBc3NpZ25tZW50KHQpO2xldCBlPXRoaXMuc2VsZWN0ZWQsaT1uZXcgU2V0KHQpO3QuZm9yRWFjaChvPT50aGlzLl9tYXJrU2VsZWN0ZWQobykpLGUuZmlsdGVyKG89PiFpLmhhcyhvKSkuZm9yRWFjaChvPT50aGlzLl91bm1hcmtTZWxlY3RlZChvKSk7bGV0IHI9dGhpcy5faGFzUXVldWVkQ2hhbmdlcygpO3JldHVybiB0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKSxyfXRvZ2dsZSh0KXtyZXR1cm4gdGhpcy5pc1NlbGVjdGVkKHQpP3RoaXMuZGVzZWxlY3QodCk6dGhpcy5zZWxlY3QodCl9Y2xlYXIodD0hMCl7dGhpcy5fdW5tYXJrQWxsKCk7bGV0IGU9dGhpcy5faGFzUXVldWVkQ2hhbmdlcygpO3JldHVybiB0JiZ0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKSxlfWlzU2VsZWN0ZWQodCl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvbi5oYXModGhpcy5fZ2V0Q29uY3JldGVWYWx1ZSh0KSl9aXNFbXB0eSgpe3JldHVybiAwPT09dGhpcy5fc2VsZWN0aW9uLnNpemV9aGFzVmFsdWUoKXtyZXR1cm4hdGhpcy5pc0VtcHR5KCl9c29ydCh0KXt0aGlzLl9tdWx0aXBsZSYmdGhpcy5zZWxlY3RlZCYmdGhpcy5fc2VsZWN0ZWQuc29ydCh0KX1pc011bHRpcGxlU2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuX211bHRpcGxlfV9lbWl0Q2hhbmdlRXZlbnQoKXt0aGlzLl9zZWxlY3RlZD1udWxsLCh0aGlzLl9zZWxlY3RlZFRvRW1pdC5sZW5ndGh8fHRoaXMuX2Rlc2VsZWN0ZWRUb0VtaXQubGVuZ3RoKSYmKHRoaXMuY2hhbmdlZC5uZXh0KHtzb3VyY2U6dGhpcyxhZGRlZDp0aGlzLl9zZWxlY3RlZFRvRW1pdCxyZW1vdmVkOnRoaXMuX2Rlc2VsZWN0ZWRUb0VtaXR9KSx0aGlzLl9kZXNlbGVjdGVkVG9FbWl0PVtdLHRoaXMuX3NlbGVjdGVkVG9FbWl0PVtdKX1fbWFya1NlbGVjdGVkKHQpe3Q9dGhpcy5fZ2V0Q29uY3JldGVWYWx1ZSh0KSx0aGlzLmlzU2VsZWN0ZWQodCl8fCh0aGlzLl9tdWx0aXBsZXx8dGhpcy5fdW5tYXJrQWxsKCksdGhpcy5pc1NlbGVjdGVkKHQpfHx0aGlzLl9zZWxlY3Rpb24uYWRkKHQpLHRoaXMuX2VtaXRDaGFuZ2VzJiZ0aGlzLl9zZWxlY3RlZFRvRW1pdC5wdXNoKHQpKX1fdW5tYXJrU2VsZWN0ZWQodCl7dD10aGlzLl9nZXRDb25jcmV0ZVZhbHVlKHQpLHRoaXMuaXNTZWxlY3RlZCh0KSYmKHRoaXMuX3NlbGVjdGlvbi5kZWxldGUodCksdGhpcy5fZW1pdENoYW5nZXMmJnRoaXMuX2Rlc2VsZWN0ZWRUb0VtaXQucHVzaCh0KSl9X3VubWFya0FsbCgpe3RoaXMuaXNFbXB0eSgpfHx0aGlzLl9zZWxlY3Rpb24uZm9yRWFjaCh0PT50aGlzLl91bm1hcmtTZWxlY3RlZCh0KSl9X3ZlcmlmeVZhbHVlQXNzaWdubWVudCh0KXt9X2hhc1F1ZXVlZENoYW5nZXMoKXtyZXR1cm4hKCF0aGlzLl9kZXNlbGVjdGVkVG9FbWl0Lmxlbmd0aCYmIXRoaXMuX3NlbGVjdGVkVG9FbWl0Lmxlbmd0aCl9X2dldENvbmNyZXRlVmFsdWUodCl7aWYodGhpcy5jb21wYXJlV2l0aCl7Zm9yKGxldCBlIG9mIHRoaXMuX3NlbGVjdGlvbilpZih0aGlzLmNvbXBhcmVXaXRoKHQsZSkpcmV0dXJuIGU7cmV0dXJuIHR9cmV0dXJuIHR9fSxDMj1uZXcgdGUoIl9WaWV3UmVwZWF0ZXIiKSxRX2U9WyJjb250ZW50V3JhcHBlciJdLFpfZT1bIioiXSxZNz1uZXcgdGUoIlZJUlRVQUxfU0NST0xMX1NUUkFURUdZIik7ZnVuY3Rpb24gS19lKG4pe3JldHVybiBuLl9zY3JvbGxTdHJhdGVneX12YXIgUTc9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuX2l0ZW1TaXplPTIwLHRoaXMuX21pbkJ1ZmZlclB4PTEwMCx0aGlzLl9tYXhCdWZmZXJQeD0yMDAsdGhpcy5fc2Nyb2xsU3RyYXRlZ3k9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLl9zY3JvbGxlZEluZGV4Q2hhbmdlPW5ldyBFZSx0aGlzLnNjcm9sbGVkSW5kZXhDaGFuZ2U9dGhpcy5fc2Nyb2xsZWRJbmRleENoYW5nZS5waXBlKHJpKCkpLHRoaXMuX3ZpZXdwb3J0PW51bGwsdGhpcy5faXRlbVNpemU9dCx0aGlzLl9taW5CdWZmZXJQeD1lLHRoaXMuX21heEJ1ZmZlclB4PWl9YXR0YWNoKHQpe3RoaXMuX3ZpZXdwb3J0PXQsdGhpcy5fdXBkYXRlVG90YWxDb250ZW50U2l6ZSgpLHRoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1kZXRhY2goKXt0aGlzLl9zY3JvbGxlZEluZGV4Q2hhbmdlLmNvbXBsZXRlKCksdGhpcy5fdmlld3BvcnQ9bnVsbH11cGRhdGVJdGVtQW5kQnVmZmVyU2l6ZSh0LGUsaSl7dGhpcy5faXRlbVNpemU9dCx0aGlzLl9taW5CdWZmZXJQeD1lLHRoaXMuX21heEJ1ZmZlclB4PWksdGhpcy5fdXBkYXRlVG90YWxDb250ZW50U2l6ZSgpLHRoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1vbkNvbnRlbnRTY3JvbGxlZCgpe3RoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1vbkRhdGFMZW5ndGhDaGFuZ2VkKCl7dGhpcy5fdXBkYXRlVG90YWxDb250ZW50U2l6ZSgpLHRoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1vbkNvbnRlbnRSZW5kZXJlZCgpe31vblJlbmRlcmVkT2Zmc2V0Q2hhbmdlZCgpe31zY3JvbGxUb0luZGV4KHQsZSl7dGhpcy5fdmlld3BvcnQmJnRoaXMuX3ZpZXdwb3J0LnNjcm9sbFRvT2Zmc2V0KHQqdGhpcy5faXRlbVNpemUsZSl9X3VwZGF0ZVRvdGFsQ29udGVudFNpemUoKXshdGhpcy5fdmlld3BvcnR8fHRoaXMuX3ZpZXdwb3J0LnNldFRvdGFsQ29udGVudFNpemUodGhpcy5fdmlld3BvcnQuZ2V0RGF0YUxlbmd0aCgpKnRoaXMuX2l0ZW1TaXplKX1fdXBkYXRlUmVuZGVyZWRSYW5nZSgpe2lmKCF0aGlzLl92aWV3cG9ydClyZXR1cm47bGV0IHQ9dGhpcy5fdmlld3BvcnQuZ2V0UmVuZGVyZWRSYW5nZSgpLGU9e3N0YXJ0OnQuc3RhcnQsZW5kOnQuZW5kfSxpPXRoaXMuX3ZpZXdwb3J0LmdldFZpZXdwb3J0U2l6ZSgpLHI9dGhpcy5fdmlld3BvcnQuZ2V0RGF0YUxlbmd0aCgpLG89dGhpcy5fdmlld3BvcnQubWVhc3VyZVNjcm9sbE9mZnNldCgpLGE9dGhpcy5faXRlbVNpemU+MD9vL3RoaXMuX2l0ZW1TaXplOjA7aWYoZS5lbmQ+cil7bGV0IGw9TWF0aC5jZWlsKGkvdGhpcy5faXRlbVNpemUpLGM9TWF0aC5tYXgoMCxNYXRoLm1pbihhLHItbCkpO2EhPWMmJihhPWMsbz1jKnRoaXMuX2l0ZW1TaXplLGUuc3RhcnQ9TWF0aC5mbG9vcihhKSksZS5lbmQ9TWF0aC5tYXgoMCxNYXRoLm1pbihyLGUuc3RhcnQrbCkpfWxldCBzPW8tZS5zdGFydCp0aGlzLl9pdGVtU2l6ZTtpZihzPHRoaXMuX21pbkJ1ZmZlclB4JiYwIT1lLnN0YXJ0KXtsZXQgbD1NYXRoLmNlaWwoKHRoaXMuX21heEJ1ZmZlclB4LXMpL3RoaXMuX2l0ZW1TaXplKTtlLnN0YXJ0PU1hdGgubWF4KDAsZS5zdGFydC1sKSxlLmVuZD1NYXRoLm1pbihyLE1hdGguY2VpbChhKyhpK3RoaXMuX21pbkJ1ZmZlclB4KS90aGlzLl9pdGVtU2l6ZSkpfWVsc2V7bGV0IGw9ZS5lbmQqdGhpcy5faXRlbVNpemUtKG8raSk7aWYobDx0aGlzLl9taW5CdWZmZXJQeCYmZS5lbmQhPXIpe2xldCBjPU1hdGguY2VpbCgodGhpcy5fbWF4QnVmZmVyUHgtbCkvdGhpcy5faXRlbVNpemUpO2M+MCYmKGUuZW5kPU1hdGgubWluKHIsZS5lbmQrYyksZS5zdGFydD1NYXRoLm1heCgwLE1hdGguZmxvb3IoYS10aGlzLl9taW5CdWZmZXJQeC90aGlzLl9pdGVtU2l6ZSkpKX19dGhpcy5fdmlld3BvcnQuc2V0UmVuZGVyZWRSYW5nZShlKSx0aGlzLl92aWV3cG9ydC5zZXRSZW5kZXJlZENvbnRlbnRPZmZzZXQodGhpcy5faXRlbVNpemUqZS5zdGFydCksdGhpcy5fc2Nyb2xsZWRJbmRleENoYW5nZS5uZXh0KE1hdGguZmxvb3IoYSkpfX0odGhpcy5pdGVtU2l6ZSx0aGlzLm1pbkJ1ZmZlclB4LHRoaXMubWF4QnVmZmVyUHgpfWdldCBpdGVtU2l6ZSgpe3JldHVybiB0aGlzLl9pdGVtU2l6ZX1zZXQgaXRlbVNpemUoZSl7dGhpcy5faXRlbVNpemU9bWkoZSl9Z2V0IG1pbkJ1ZmZlclB4KCl7cmV0dXJuIHRoaXMuX21pbkJ1ZmZlclB4fXNldCBtaW5CdWZmZXJQeChlKXt0aGlzLl9taW5CdWZmZXJQeD1taShlKX1nZXQgbWF4QnVmZmVyUHgoKXtyZXR1cm4gdGhpcy5fbWF4QnVmZmVyUHh9c2V0IG1heEJ1ZmZlclB4KGUpe3RoaXMuX21heEJ1ZmZlclB4PW1pKGUpfW5nT25DaGFuZ2VzKCl7dGhpcy5fc2Nyb2xsU3RyYXRlZ3kudXBkYXRlSXRlbUFuZEJ1ZmZlclNpemUodGhpcy5pdGVtU2l6ZSx0aGlzLm1pbkJ1ZmZlclB4LHRoaXMubWF4QnVmZmVyUHgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVkaXI9TWUoe3R5cGU6bixzZWxlY3RvcnM6W1siY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IiwiaXRlbVNpemUiLCIiXV0saW5wdXRzOntpdGVtU2l6ZToiaXRlbVNpemUiLG1pbkJ1ZmZlclB4OiJtaW5CdWZmZXJQeCIsbWF4QnVmZmVyUHg6Im1heEJ1ZmZlclB4In0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbVnQoW3twcm92aWRlOlk3LHVzZUZhY3Rvcnk6S19lLGRlcHM6W1duKCgpPT5uKV19XSkscXRdfSksbn0pKCksTHU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fbmdab25lPWUsdGhpcy5fcGxhdGZvcm09aSx0aGlzLl9zY3JvbGxlZD1uZXcgRWUsdGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fc2Nyb2xsZWRDb3VudD0wLHRoaXMuc2Nyb2xsQ29udGFpbmVycz1uZXcgTWFwLHRoaXMuX2RvY3VtZW50PXJ9cmVnaXN0ZXIoZSl7dGhpcy5zY3JvbGxDb250YWluZXJzLmhhcyhlKXx8dGhpcy5zY3JvbGxDb250YWluZXJzLnNldChlLGUuZWxlbWVudFNjcm9sbGVkKCkuc3Vic2NyaWJlKCgpPT50aGlzLl9zY3JvbGxlZC5uZXh0KGUpKSl9ZGVyZWdpc3RlcihlKXtsZXQgaT10aGlzLnNjcm9sbENvbnRhaW5lcnMuZ2V0KGUpO2kmJihpLnVuc3Vic2NyaWJlKCksdGhpcy5zY3JvbGxDb250YWluZXJzLmRlbGV0ZShlKSl9c2Nyb2xsZWQoZT0yMCl7cmV0dXJuIHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcj9uZXcgS3QoaT0+e3RoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbnx8dGhpcy5fYWRkR2xvYmFsTGlzdGVuZXIoKTtsZXQgcj1lPjA/dGhpcy5fc2Nyb2xsZWQucGlwZShuYyhlKSkuc3Vic2NyaWJlKGkpOnRoaXMuX3Njcm9sbGVkLnN1YnNjcmliZShpKTtyZXR1cm4gdGhpcy5fc2Nyb2xsZWRDb3VudCsrLCgpPT57ci51bnN1YnNjcmliZSgpLHRoaXMuX3Njcm9sbGVkQ291bnQtLSx0aGlzLl9zY3JvbGxlZENvdW50fHx0aGlzLl9yZW1vdmVHbG9iYWxMaXN0ZW5lcigpfX0pOiR0KCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9yZW1vdmVHbG9iYWxMaXN0ZW5lcigpLHRoaXMuc2Nyb2xsQ29udGFpbmVycy5mb3JFYWNoKChlLGkpPT50aGlzLmRlcmVnaXN0ZXIoaSkpLHRoaXMuX3Njcm9sbGVkLmNvbXBsZXRlKCl9YW5jZXN0b3JTY3JvbGxlZChlLGkpe2xldCByPXRoaXMuZ2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKGUpO3JldHVybiB0aGlzLnNjcm9sbGVkKGkpLnBpcGUoT2Uobz0+IW98fHIuaW5kZXhPZihvKT4tMSkpfWdldEFuY2VzdG9yU2Nyb2xsQ29udGFpbmVycyhlKXtsZXQgaT1bXTtyZXR1cm4gdGhpcy5zY3JvbGxDb250YWluZXJzLmZvckVhY2goKHIsbyk9Pnt0aGlzLl9zY3JvbGxhYmxlQ29udGFpbnNFbGVtZW50KG8sZSkmJmkucHVzaChvKX0pLGl9X2dldFdpbmRvdygpe3JldHVybiB0aGlzLl9kb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93fV9zY3JvbGxhYmxlQ29udGFpbnNFbGVtZW50KGUsaSl7bGV0IHI9VWEoaSksbz1lLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50O2Rve2lmKHI9PW8pcmV0dXJuITB9d2hpbGUocj1yLnBhcmVudEVsZW1lbnQpO3JldHVybiExfV9hZGRHbG9iYWxMaXN0ZW5lcigpe3RoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbj10aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PkVpKHRoaXMuX2dldFdpbmRvdygpLmRvY3VtZW50LCJzY3JvbGwiKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3Njcm9sbGVkLm5leHQoKSkpfV9yZW1vdmVHbG9iYWxMaXN0ZW5lcigpe3RoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbiYmKHRoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbj1udWxsKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhvdCksTyhWbiksTyhOdCw4KSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCkseGQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLmVsZW1lbnRSZWY9ZSx0aGlzLnNjcm9sbERpc3BhdGNoZXI9aSx0aGlzLm5nWm9uZT1yLHRoaXMuZGlyPW8sdGhpcy5fZGVzdHJveWVkPW5ldyBFZSx0aGlzLl9lbGVtZW50U2Nyb2xsZWQ9bmV3IEt0KGE9PnRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5FaSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwic2Nyb2xsIikucGlwZShpdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoYSkpKX1uZ09uSW5pdCgpe3RoaXMuc2Nyb2xsRGlzcGF0Y2hlci5yZWdpc3Rlcih0aGlzKX1uZ09uRGVzdHJveSgpe3RoaXMuc2Nyb2xsRGlzcGF0Y2hlci5kZXJlZ2lzdGVyKHRoaXMpLHRoaXMuX2Rlc3Ryb3llZC5uZXh0KCksdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCl9ZWxlbWVudFNjcm9sbGVkKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnRTY3JvbGxlZH1nZXRFbGVtZW50UmVmKCl7cmV0dXJuIHRoaXMuZWxlbWVudFJlZn1zY3JvbGxUbyhlKXtsZXQgaT10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxyPXRoaXMuZGlyJiYicnRsIj09dGhpcy5kaXIudmFsdWU7bnVsbD09ZS5sZWZ0JiYoZS5sZWZ0PXI/ZS5lbmQ6ZS5zdGFydCksbnVsbD09ZS5yaWdodCYmKGUucmlnaHQ9cj9lLnN0YXJ0OmUuZW5kKSxudWxsIT1lLmJvdHRvbSYmKGUudG9wPWkuc2Nyb2xsSGVpZ2h0LWkuY2xpZW50SGVpZ2h0LWUuYm90dG9tKSxyJiYwIT1pZygpPyhudWxsIT1lLmxlZnQmJihlLnJpZ2h0PWkuc2Nyb2xsV2lkdGgtaS5jbGllbnRXaWR0aC1lLmxlZnQpLDI9PWlnKCk/ZS5sZWZ0PWUucmlnaHQ6MT09aWcoKSYmKGUubGVmdD1lLnJpZ2h0Py1lLnJpZ2h0OmUucmlnaHQpKTpudWxsIT1lLnJpZ2h0JiYoZS5sZWZ0PWkuc2Nyb2xsV2lkdGgtaS5jbGllbnRXaWR0aC1lLnJpZ2h0KSx0aGlzLl9hcHBseVNjcm9sbFRvT3B0aW9ucyhlKX1fYXBwbHlTY3JvbGxUb09wdGlvbnMoZSl7bGV0IGk9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7azEoKT9pLnNjcm9sbFRvKGUpOihudWxsIT1lLnRvcCYmKGkuc2Nyb2xsVG9wPWUudG9wKSxudWxsIT1lLmxlZnQmJihpLnNjcm9sbExlZnQ9ZS5sZWZ0KSl9bWVhc3VyZVNjcm9sbE9mZnNldChlKXtsZXQgaT0ibGVmdCIscj0icmlnaHQiLG89dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7aWYoInRvcCI9PWUpcmV0dXJuIG8uc2Nyb2xsVG9wO2lmKCJib3R0b20iPT1lKXJldHVybiBvLnNjcm9sbEhlaWdodC1vLmNsaWVudEhlaWdodC1vLnNjcm9sbFRvcDtsZXQgYT10aGlzLmRpciYmInJ0bCI9PXRoaXMuZGlyLnZhbHVlO3JldHVybiJzdGFydCI9PWU/ZT1hP3I6aToiZW5kIj09ZSYmKGU9YT9pOnIpLGEmJjI9PWlnKCk/ZT09aT9vLnNjcm9sbFdpZHRoLW8uY2xpZW50V2lkdGgtby5zY3JvbGxMZWZ0Om8uc2Nyb2xsTGVmdDphJiYxPT1pZygpP2U9PWk/by5zY3JvbGxMZWZ0K28uc2Nyb2xsV2lkdGgtby5jbGllbnRXaWR0aDotby5zY3JvbGxMZWZ0OmU9PWk/by5zY3JvbGxMZWZ0Om8uc2Nyb2xsV2lkdGgtby5jbGllbnRXaWR0aC1vLnNjcm9sbExlZnR9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoeGUpLEMoTHUpLEMob3QpLEMoemksOCkpfSxuLlx1MDI3NWRpcj1NZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGstc2Nyb2xsYWJsZSIsIiJdLFsiIiwiY2RrU2Nyb2xsYWJsZSIsIiJdXSxzdGFuZGFsb25lOiEwfSksbn0pKCksV2E9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fcGxhdGZvcm09ZSx0aGlzLl9jaGFuZ2U9bmV3IEVlLHRoaXMuX2NoYW5nZUxpc3RlbmVyPW89Pnt0aGlzLl9jaGFuZ2UubmV4dChvKX0sdGhpcy5fZG9jdW1lbnQ9cixpLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57aWYoZS5pc0Jyb3dzZXIpe2xldCBvPXRoaXMuX2dldFdpbmRvdygpO28uYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9jaGFuZ2VMaXN0ZW5lciksby5hZGRFdmVudExpc3RlbmVyKCJvcmllbnRhdGlvbmNoYW5nZSIsdGhpcy5fY2hhbmdlTGlzdGVuZXIpfXRoaXMuY2hhbmdlKCkuc3Vic2NyaWJlKCgpPT50aGlzLl92aWV3cG9ydFNpemU9bnVsbCl9KX1uZ09uRGVzdHJveSgpe2lmKHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcil7bGV0IGU9dGhpcy5fZ2V0V2luZG93KCk7ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuX2NoYW5nZUxpc3RlbmVyKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm9yaWVudGF0aW9uY2hhbmdlIix0aGlzLl9jaGFuZ2VMaXN0ZW5lcil9dGhpcy5fY2hhbmdlLmNvbXBsZXRlKCl9Z2V0Vmlld3BvcnRTaXplKCl7dGhpcy5fdmlld3BvcnRTaXplfHx0aGlzLl91cGRhdGVWaWV3cG9ydFNpemUoKTtsZXQgZT17d2lkdGg6dGhpcy5fdmlld3BvcnRTaXplLndpZHRoLGhlaWdodDp0aGlzLl92aWV3cG9ydFNpemUuaGVpZ2h0fTtyZXR1cm4gdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyfHwodGhpcy5fdmlld3BvcnRTaXplPW51bGwpLGV9Z2V0Vmlld3BvcnRSZWN0KCl7bGV0IGU9dGhpcy5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCkse3dpZHRoOmksaGVpZ2h0OnJ9PXRoaXMuZ2V0Vmlld3BvcnRTaXplKCk7cmV0dXJue3RvcDplLnRvcCxsZWZ0OmUubGVmdCxib3R0b206ZS50b3ArcixyaWdodDplLmxlZnQraSxoZWlnaHQ6cix3aWR0aDppfX1nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm57dG9wOjAsbGVmdDowfTtsZXQgZT10aGlzLl9kb2N1bWVudCxpPXRoaXMuX2dldFdpbmRvdygpLHI9ZS5kb2N1bWVudEVsZW1lbnQsbz1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt0b3A6LW8udG9wfHxlLmJvZHkuc2Nyb2xsVG9wfHxpLnNjcm9sbFl8fHIuc2Nyb2xsVG9wfHwwLGxlZnQ6LW8ubGVmdHx8ZS5ib2R5LnNjcm9sbExlZnR8fGkuc2Nyb2xsWHx8ci5zY3JvbGxMZWZ0fHwwfX1jaGFuZ2UoZT0yMCl7cmV0dXJuIGU+MD90aGlzLl9jaGFuZ2UucGlwZShuYyhlKSk6dGhpcy5fY2hhbmdlfV9nZXRXaW5kb3coKXtyZXR1cm4gdGhpcy5fZG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvd31fdXBkYXRlVmlld3BvcnRTaXplKCl7bGV0IGU9dGhpcy5fZ2V0V2luZG93KCk7dGhpcy5fdmlld3BvcnRTaXplPXRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcj97d2lkdGg6ZS5pbm5lcldpZHRoLGhlaWdodDplLmlubmVySGVpZ2h0fTp7d2lkdGg6MCxoZWlnaHQ6MH19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oVm4pLE8ob3QpLE8oTnQsOCkpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLHE3PW5ldyB0ZSgiVklSVFVBTF9TQ1JPTExBQkxFIiksZWJlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyB4ZHtjb25zdHJ1Y3RvcihlLGkscixvKXtzdXBlcihlLGkscixvKX1tZWFzdXJlVmlld3BvcnRTaXplKGUpe2xldCBpPXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3JldHVybiJob3Jpem9udGFsIj09PWU/aS5jbGllbnRXaWR0aDppLmNsaWVudEhlaWdodH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyh4ZSksQyhMdSksQyhvdCksQyh6aSw4KSl9LG4uXHUwMjc1ZGlyPU1lKHt0eXBlOm4sZmVhdHVyZXM6W1hlXX0pLG59KSgpLG5iZT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lPCJ1Ij9ZQTpObSxnZz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgZWJle2dldCBvcmllbnRhdGlvbigpe3JldHVybiB0aGlzLl9vcmllbnRhdGlvbn1zZXQgb3JpZW50YXRpb24oZSl7dGhpcy5fb3JpZW50YXRpb24hPT1lJiYodGhpcy5fb3JpZW50YXRpb249ZSx0aGlzLl9jYWxjdWxhdGVTcGFjZXJTaXplKCkpfWdldCBhcHBlbmRPbmx5KCl7cmV0dXJuIHRoaXMuX2FwcGVuZE9ubHl9c2V0IGFwcGVuZE9ubHkoZSl7dGhpcy5fYXBwZW5kT25seT12dChlKX1jb25zdHJ1Y3RvcihlLGkscixvLGEscyxsLGMpe3N1cGVyKGUscyxyLGEpLHRoaXMuZWxlbWVudFJlZj1lLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWksdGhpcy5fc2Nyb2xsU3RyYXRlZ3k9byx0aGlzLnNjcm9sbGFibGU9Yyx0aGlzLl9wbGF0Zm9ybT0kbihWbiksdGhpcy5fZGV0YWNoZWRTdWJqZWN0PW5ldyBFZSx0aGlzLl9yZW5kZXJlZFJhbmdlU3ViamVjdD1uZXcgRWUsdGhpcy5fb3JpZW50YXRpb249InZlcnRpY2FsIix0aGlzLl9hcHBlbmRPbmx5PSExLHRoaXMuc2Nyb2xsZWRJbmRleENoYW5nZT1uZXcgS3QoZD0+dGhpcy5fc2Nyb2xsU3RyYXRlZ3kuc2Nyb2xsZWRJbmRleENoYW5nZS5zdWJzY3JpYmUodT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+dGhpcy5uZ1pvbmUucnVuKCgpPT5kLm5leHQodSkpKSkpLHRoaXMucmVuZGVyZWRSYW5nZVN0cmVhbT10aGlzLl9yZW5kZXJlZFJhbmdlU3ViamVjdCx0aGlzLl90b3RhbENvbnRlbnRTaXplPTAsdGhpcy5fdG90YWxDb250ZW50V2lkdGg9IiIsdGhpcy5fdG90YWxDb250ZW50SGVpZ2h0PSIiLHRoaXMuX3JlbmRlcmVkUmFuZ2U9e3N0YXJ0OjAsZW5kOjB9LHRoaXMuX2RhdGFMZW5ndGg9MCx0aGlzLl92aWV3cG9ydFNpemU9MCx0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXQ9MCx0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGU9ITEsdGhpcy5faXNDaGFuZ2VEZXRlY3Rpb25QZW5kaW5nPSExLHRoaXMuX3J1bkFmdGVyQ2hhbmdlRGV0ZWN0aW9uPVtdLHRoaXMuX3ZpZXdwb3J0Q2hhbmdlcz1Fbi5FTVBUWSx0aGlzLl92aWV3cG9ydENoYW5nZXM9bC5jaGFuZ2UoKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmNoZWNrVmlld3BvcnRTaXplKCl9KSx0aGlzLnNjcm9sbGFibGV8fCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjZGstdmlydHVhbC1zY3JvbGxhYmxlIiksdGhpcy5zY3JvbGxhYmxlPXRoaXMpfW5nT25Jbml0KCl7IXRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcnx8KHRoaXMuc2Nyb2xsYWJsZT09PXRoaXMmJnN1cGVyLm5nT25Jbml0KCksdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pnt0aGlzLl9tZWFzdXJlVmlld3BvcnRTaXplKCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kuYXR0YWNoKHRoaXMpLHRoaXMuc2Nyb2xsYWJsZS5lbGVtZW50U2Nyb2xsZWQoKS5waXBlKGtuKG51bGwpLG5jKDAsbmJlKSkuc3Vic2NyaWJlKCgpPT50aGlzLl9zY3JvbGxTdHJhdGVneS5vbkNvbnRlbnRTY3JvbGxlZCgpKSx0aGlzLl9tYXJrQ2hhbmdlRGV0ZWN0aW9uTmVlZGVkKCl9KSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXRhY2goKSx0aGlzLl9zY3JvbGxTdHJhdGVneS5kZXRhY2goKSx0aGlzLl9yZW5kZXJlZFJhbmdlU3ViamVjdC5jb21wbGV0ZSgpLHRoaXMuX2RldGFjaGVkU3ViamVjdC5jb21wbGV0ZSgpLHRoaXMuX3ZpZXdwb3J0Q2hhbmdlcy51bnN1YnNjcmliZSgpLHN1cGVyLm5nT25EZXN0cm95KCl9YXR0YWNoKGUpe3RoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fZm9yT2Y9ZSx0aGlzLl9mb3JPZi5kYXRhU3RyZWFtLnBpcGUoaXQodGhpcy5fZGV0YWNoZWRTdWJqZWN0KSkuc3Vic2NyaWJlKGk9PntsZXQgcj1pLmxlbmd0aDtyIT09dGhpcy5fZGF0YUxlbmd0aCYmKHRoaXMuX2RhdGFMZW5ndGg9cix0aGlzLl9zY3JvbGxTdHJhdGVneS5vbkRhdGFMZW5ndGhDaGFuZ2VkKCkpLHRoaXMuX2RvQ2hhbmdlRGV0ZWN0aW9uKCl9KX0pfWRldGFjaCgpe3RoaXMuX2Zvck9mPW51bGwsdGhpcy5fZGV0YWNoZWRTdWJqZWN0Lm5leHQoKX1nZXREYXRhTGVuZ3RoKCl7cmV0dXJuIHRoaXMuX2RhdGFMZW5ndGh9Z2V0Vmlld3BvcnRTaXplKCl7cmV0dXJuIHRoaXMuX3ZpZXdwb3J0U2l6ZX1nZXRSZW5kZXJlZFJhbmdlKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVkUmFuZ2V9bWVhc3VyZUJvdW5kaW5nQ2xpZW50UmVjdFdpdGhTY3JvbGxPZmZzZXQoZSl7cmV0dXJuIHRoaXMuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbZV19c2V0VG90YWxDb250ZW50U2l6ZShlKXt0aGlzLl90b3RhbENvbnRlbnRTaXplIT09ZSYmKHRoaXMuX3RvdGFsQ29udGVudFNpemU9ZSx0aGlzLl9jYWxjdWxhdGVTcGFjZXJTaXplKCksdGhpcy5fbWFya0NoYW5nZURldGVjdGlvbk5lZWRlZCgpKX1zZXRSZW5kZXJlZFJhbmdlKGUpeyhmdW5jdGlvbihuLHQpe3JldHVybiBuLnN0YXJ0PT10LnN0YXJ0JiZuLmVuZD09dC5lbmR9KSh0aGlzLl9yZW5kZXJlZFJhbmdlLGUpfHwodGhpcy5hcHBlbmRPbmx5JiYoZT17c3RhcnQ6MCxlbmQ6TWF0aC5tYXgodGhpcy5fcmVuZGVyZWRSYW5nZS5lbmQsZS5lbmQpfSksdGhpcy5fcmVuZGVyZWRSYW5nZVN1YmplY3QubmV4dCh0aGlzLl9yZW5kZXJlZFJhbmdlPWUpLHRoaXMuX21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoKCk9PnRoaXMuX3Njcm9sbFN0cmF0ZWd5Lm9uQ29udGVudFJlbmRlcmVkKCkpKX1nZXRPZmZzZXRUb1JlbmRlcmVkQ29udGVudFN0YXJ0KCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZT9udWxsOnRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldH1zZXRSZW5kZXJlZENvbnRlbnRPZmZzZXQoZSxpPSJ0by1zdGFydCIpe2U9dGhpcy5hcHBlbmRPbmx5JiYidG8tc3RhcnQiPT09aT8wOmU7bGV0IG89Imhvcml6b250YWwiPT10aGlzLm9yaWVudGF0aW9uLGE9bz8iWCI6IlkiLGw9YHRyYW5zbGF0ZSR7YX0oJHtOdW1iZXIoKG8mJnRoaXMuZGlyJiYicnRsIj09dGhpcy5kaXIudmFsdWU/LTE6MSkqZSl9cHgpYDt0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXQ9ZSwidG8tZW5kIj09PWkmJihsKz1gIHRyYW5zbGF0ZSR7YX0oLTEwMCUpYCx0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGU9ITApLHRoaXMuX3JlbmRlcmVkQ29udGVudFRyYW5zZm9ybSE9bCYmKHRoaXMuX3JlbmRlcmVkQ29udGVudFRyYW5zZm9ybT1sLHRoaXMuX21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoKCk9Pnt0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGU/KHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldC09dGhpcy5tZWFzdXJlUmVuZGVyZWRDb250ZW50U2l6ZSgpLHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZT0hMSx0aGlzLnNldFJlbmRlcmVkQ29udGVudE9mZnNldCh0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXQpKTp0aGlzLl9zY3JvbGxTdHJhdGVneS5vblJlbmRlcmVkT2Zmc2V0Q2hhbmdlZCgpfSkpfXNjcm9sbFRvT2Zmc2V0KGUsaT0iYXV0byIpe2xldCByPXtiZWhhdmlvcjppfTsiaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uP3Iuc3RhcnQ9ZTpyLnRvcD1lLHRoaXMuc2Nyb2xsYWJsZS5zY3JvbGxUbyhyKX1zY3JvbGxUb0luZGV4KGUsaT0iYXV0byIpe3RoaXMuX3Njcm9sbFN0cmF0ZWd5LnNjcm9sbFRvSW5kZXgoZSxpKX1tZWFzdXJlU2Nyb2xsT2Zmc2V0KGUpe2xldCBpO3JldHVybiBpPXRoaXMuc2Nyb2xsYWJsZT09dGhpcz9yPT5zdXBlci5tZWFzdXJlU2Nyb2xsT2Zmc2V0KHIpOnI9PnRoaXMuc2Nyb2xsYWJsZS5tZWFzdXJlU2Nyb2xsT2Zmc2V0KHIpLE1hdGgubWF4KDAsaShlPz8oImhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj8ic3RhcnQiOiJ0b3AiKSktdGhpcy5tZWFzdXJlVmlld3BvcnRPZmZzZXQoKSl9bWVhc3VyZVZpZXdwb3J0T2Zmc2V0KGUpe2xldCBpLHI9ImxlZnQiLG89InJpZ2h0IixhPSJydGwiPT10aGlzLmRpcj8udmFsdWU7aT0ic3RhcnQiPT1lP2E/bzpyOiJlbmQiPT1lP2E/cjpvOmV8fCgiaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uPyJsZWZ0IjoidG9wIik7bGV0IHM9dGhpcy5zY3JvbGxhYmxlLm1lYXN1cmVCb3VuZGluZ0NsaWVudFJlY3RXaXRoU2Nyb2xsT2Zmc2V0KGkpO3JldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtpXS1zfW1lYXN1cmVSZW5kZXJlZENvbnRlbnRTaXplKCl7bGV0IGU9dGhpcy5fY29udGVudFdyYXBwZXIubmF0aXZlRWxlbWVudDtyZXR1cm4iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uP2Uub2Zmc2V0V2lkdGg6ZS5vZmZzZXRIZWlnaHR9bWVhc3VyZVJhbmdlU2l6ZShlKXtyZXR1cm4gdGhpcy5fZm9yT2Y/dGhpcy5fZm9yT2YubWVhc3VyZVJhbmdlU2l6ZShlLHRoaXMub3JpZW50YXRpb24pOjB9Y2hlY2tWaWV3cG9ydFNpemUoKXt0aGlzLl9tZWFzdXJlVmlld3BvcnRTaXplKCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kub25EYXRhTGVuZ3RoQ2hhbmdlZCgpfV9tZWFzdXJlVmlld3BvcnRTaXplKCl7dGhpcy5fdmlld3BvcnRTaXplPXRoaXMuc2Nyb2xsYWJsZS5tZWFzdXJlVmlld3BvcnRTaXplKHRoaXMub3JpZW50YXRpb24pfV9tYXJrQ2hhbmdlRGV0ZWN0aW9uTmVlZGVkKGUpe2UmJnRoaXMuX3J1bkFmdGVyQ2hhbmdlRGV0ZWN0aW9uLnB1c2goZSksdGhpcy5faXNDaGFuZ2VEZXRlY3Rpb25QZW5kaW5nfHwodGhpcy5faXNDaGFuZ2VEZXRlY3Rpb25QZW5kaW5nPSEwLHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57dGhpcy5fZG9DaGFuZ2VEZXRlY3Rpb24oKX0pKSl9X2RvQ2hhbmdlRGV0ZWN0aW9uKCl7dGhpcy5faXNDaGFuZ2VEZXRlY3Rpb25QZW5kaW5nPSExLHRoaXMuX2NvbnRlbnRXcmFwcGVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtPXRoaXMuX3JlbmRlcmVkQ29udGVudFRyYW5zZm9ybSx0aGlzLm5nWm9uZS5ydW4oKCk9PnRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKTtsZXQgZT10aGlzLl9ydW5BZnRlckNoYW5nZURldGVjdGlvbjt0aGlzLl9ydW5BZnRlckNoYW5nZURldGVjdGlvbj1bXTtmb3IobGV0IGkgb2YgZSlpKCl9X2NhbGN1bGF0ZVNwYWNlclNpemUoKXt0aGlzLl90b3RhbENvbnRlbnRIZWlnaHQ9Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj8iIjpgJHt0aGlzLl90b3RhbENvbnRlbnRTaXplfXB4YCx0aGlzLl90b3RhbENvbnRlbnRXaWR0aD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uP2Ake3RoaXMuX3RvdGFsQ29udGVudFNpemV9cHhgOiIifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKHhlKSxDKFF0KSxDKG90KSxDKFk3LDgpLEMoemksOCksQyhMdSksQyhXYSksQyhxNyw4KSl9LG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1siY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmVWUoUV9lLDcpLDImZSl7bGV0IHI7YmUocj12ZSgpKSYmKGkuX2NvbnRlbnRXcmFwcGVyPXIuZmlyc3QpfX0saG9zdEF0dHJzOlsxLCJjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQiXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmbnQoImNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIiwiaG9yaXpvbnRhbCI9PT1pLm9yaWVudGF0aW9uKSgiY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIiwiaG9yaXpvbnRhbCIhPT1pLm9yaWVudGF0aW9uKX0saW5wdXRzOntvcmllbnRhdGlvbjoib3JpZW50YXRpb24iLGFwcGVuZE9ubHk6ImFwcGVuZE9ubHkifSxvdXRwdXRzOntzY3JvbGxlZEluZGV4Q2hhbmdlOiJzY3JvbGxlZEluZGV4Q2hhbmdlIn0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbVnQoW3twcm92aWRlOnhkLHVzZUZhY3Rvcnk6KHQsZSk9PnR8fGUsZGVwczpbW25ldyBrYSxuZXcgY2YocTcpXSxuXX1dKSxYZSxBa10sbmdDb250ZW50U2VsZWN0b3JzOlpfZSxkZWNsczo0LHZhcnM6NCxjb25zdHM6W1sxLCJjZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyIl0sWyJjb250ZW50V3JhcHBlciIsIiJdLFsxLCJjZGstdmlydHVhbC1zY3JvbGwtc3BhY2VyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZm4oKSxmKDAsImRpdiIsMCwxKSxUdCgyKSxnKCksaygzLCJkaXYiLDIpKSwyJmUmJih2KDMpLEJ0KCJ3aWR0aCIsaS5fdG90YWxDb250ZW50V2lkdGgpKCJoZWlnaHQiLGkuX3RvdGFsQ29udGVudEhlaWdodCkpfSxzdHlsZXM6WyJjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnR7ZGlzcGxheTpibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0uY2RrLXZpcnR1YWwtc2Nyb2xsYWJsZXtvdmVyZmxvdzphdXRvO3dpbGwtY2hhbmdlOnNjcm9sbC1wb3NpdGlvbjtjb250YWluOnN0cmljdDstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaH0uY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7Y29udGFpbjpjb250ZW50fVtkaXI9cnRsXSAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcntyaWdodDowO2xlZnQ6YXV0b30uY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXJ7bWluLWhlaWdodDoxMDAlfS5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj5kbDpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+b2w6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPnRhYmxlOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj51bDpub3QoW2Nka1ZpcnR1YWxGb3JdKXtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDtib3JkZXItbGVmdC13aWR0aDowO2JvcmRlci1yaWdodC13aWR0aDowO291dGxpbmU6bm9uZX0uY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVye21pbi13aWR0aDoxMDAlfS5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+ZGw6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj5vbDpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPnRhYmxlOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+dWw6bm90KFtjZGtWaXJ0dWFsRm9yXSl7cGFkZGluZy10b3A6MDtwYWRkaW5nLWJvdHRvbTowO21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjA7Ym9yZGVyLXRvcC13aWR0aDowO2JvcmRlci1ib3R0b20td2lkdGg6MDtvdXRsaW5lOm5vbmV9LmNkay12aXJ0dWFsLXNjcm9sbC1zcGFjZXJ7aGVpZ2h0OjFweDt0cmFuc2Zvcm0tb3JpZ2luOjAgMDtmbGV4OjAgMCBhdXRvfVtkaXI9cnRsXSAuY2RrLXZpcnR1YWwtc2Nyb2xsLXNwYWNlcnt0cmFuc2Zvcm0tb3JpZ2luOjEwMCUgMH0iXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBYNyhuLHQsZSl7aWYoIWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KXJldHVybiAwO2xldCByPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuImhvcml6b250YWwiPT09bj8ic3RhcnQiPT09dD9yLmxlZnQ6ci5yaWdodDoic3RhcnQiPT09dD9yLnRvcDpyLmJvdHRvbX12YXIgWjc9KCgpPT57Y2xhc3MgbntnZXQgY2RrVmlydHVhbEZvck9mKCl7cmV0dXJuIHRoaXMuX2Nka1ZpcnR1YWxGb3JPZn1zZXQgY2RrVmlydHVhbEZvck9mKGUpe3RoaXMuX2Nka1ZpcnR1YWxGb3JPZj1lLGZ1bmN0aW9uKG4pe3JldHVybiBuJiYiZnVuY3Rpb24iPT10eXBlb2Ygbi5jb25uZWN0JiYhKG4gaW5zdGFuY2VvZiBEXyl9KGUpP3RoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzLm5leHQoZSk6dGhpcy5fZGF0YVNvdXJjZUNoYW5nZXMubmV4dChuZXcgRzEoUF8oZSk/ZTpBcnJheS5mcm9tKGV8fFtdKSkpfWdldCBjZGtWaXJ0dWFsRm9yVHJhY2tCeSgpe3JldHVybiB0aGlzLl9jZGtWaXJ0dWFsRm9yVHJhY2tCeX1zZXQgY2RrVmlydHVhbEZvclRyYWNrQnkoZSl7dGhpcy5fbmVlZHNVcGRhdGU9ITAsdGhpcy5fY2RrVmlydHVhbEZvclRyYWNrQnk9ZT8oaSxyKT0+ZShpKyh0aGlzLl9yZW5kZXJlZFJhbmdlP3RoaXMuX3JlbmRlcmVkUmFuZ2Uuc3RhcnQ6MCkscik6dm9pZCAwfXNldCBjZGtWaXJ0dWFsRm9yVGVtcGxhdGUoZSl7ZSYmKHRoaXMuX25lZWRzVXBkYXRlPSEwLHRoaXMuX3RlbXBsYXRlPWUpfWdldCBjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemUoKXtyZXR1cm4gdGhpcy5fdmlld1JlcGVhdGVyLnZpZXdDYWNoZVNpemV9c2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZShlKXt0aGlzLl92aWV3UmVwZWF0ZXIudmlld0NhY2hlU2l6ZT1taShlKX1jb25zdHJ1Y3RvcihlLGkscixvLGEscyl7dGhpcy5fdmlld0NvbnRhaW5lclJlZj1lLHRoaXMuX3RlbXBsYXRlPWksdGhpcy5fZGlmZmVycz1yLHRoaXMuX3ZpZXdSZXBlYXRlcj1vLHRoaXMuX3ZpZXdwb3J0PWEsdGhpcy52aWV3Q2hhbmdlPW5ldyBFZSx0aGlzLl9kYXRhU291cmNlQ2hhbmdlcz1uZXcgRWUsdGhpcy5kYXRhU3RyZWFtPXRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzLnBpcGUoa24obnVsbCksWXQoKG4sdCk9PntsZXQgZSxpPSExO24uc3Vic2NyaWJlKEh0KHQscj0+e2xldCBvPWU7ZT1yLGkmJnQubmV4dChbbyxyXSksaT0hMH0pKX0pLEpuKChbbCxjXSk9PnRoaXMuX2NoYW5nZURhdGFTb3VyY2UobCxjKSksRGEoMSkpLHRoaXMuX2RpZmZlcj1udWxsLHRoaXMuX25lZWRzVXBkYXRlPSExLHRoaXMuX2Rlc3Ryb3llZD1uZXcgRWUsdGhpcy5kYXRhU3RyZWFtLnN1YnNjcmliZShsPT57dGhpcy5fZGF0YT1sLHRoaXMuX29uUmVuZGVyZWREYXRhQ2hhbmdlKCl9KSx0aGlzLl92aWV3cG9ydC5yZW5kZXJlZFJhbmdlU3RyZWFtLnBpcGUoaXQodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKGw9Pnt0aGlzLl9yZW5kZXJlZFJhbmdlPWwsdGhpcy52aWV3Q2hhbmdlLm9ic2VydmVycy5sZW5ndGgmJnMucnVuKCgpPT50aGlzLnZpZXdDaGFuZ2UubmV4dCh0aGlzLl9yZW5kZXJlZFJhbmdlKSksdGhpcy5fb25SZW5kZXJlZERhdGFDaGFuZ2UoKX0pLHRoaXMuX3ZpZXdwb3J0LmF0dGFjaCh0aGlzKX1tZWFzdXJlUmFuZ2VTaXplKGUsaSl7aWYoZS5zdGFydD49ZS5lbmQpcmV0dXJuIDA7bGV0IGEscyxyPWUuc3RhcnQtdGhpcy5fcmVuZGVyZWRSYW5nZS5zdGFydCxvPWUuZW5kLWUuc3RhcnQ7Zm9yKGxldCBsPTA7bDxvO2wrKyl7bGV0IGM9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5nZXQobCtyKTtpZihjJiZjLnJvb3ROb2Rlcy5sZW5ndGgpe2E9cz1jLnJvb3ROb2Rlc1swXTticmVha319Zm9yKGxldCBsPW8tMTtsPi0xO2wtLSl7bGV0IGM9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5nZXQobCtyKTtpZihjJiZjLnJvb3ROb2Rlcy5sZW5ndGgpe3M9Yy5yb290Tm9kZXNbYy5yb290Tm9kZXMubGVuZ3RoLTFdO2JyZWFrfX1yZXR1cm4gYSYmcz9YNyhpLCJlbmQiLHMpLVg3KGksInN0YXJ0IixhKTowfW5nRG9DaGVjaygpe2lmKHRoaXMuX2RpZmZlciYmdGhpcy5fbmVlZHNVcGRhdGUpe2xldCBlPXRoaXMuX2RpZmZlci5kaWZmKHRoaXMuX3JlbmRlcmVkSXRlbXMpO2U/dGhpcy5fYXBwbHlDaGFuZ2VzKGUpOnRoaXMuX3VwZGF0ZUNvbnRleHQoKSx0aGlzLl9uZWVkc1VwZGF0ZT0hMX19bmdPbkRlc3Ryb3koKXt0aGlzLl92aWV3cG9ydC5kZXRhY2goKSx0aGlzLl9kYXRhU291cmNlQ2hhbmdlcy5uZXh0KHZvaWQgMCksdGhpcy5fZGF0YVNvdXJjZUNoYW5nZXMuY29tcGxldGUoKSx0aGlzLnZpZXdDaGFuZ2UuY29tcGxldGUoKSx0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpLHRoaXMuX3ZpZXdSZXBlYXRlci5kZXRhY2goKX1fb25SZW5kZXJlZERhdGFDaGFuZ2UoKXshdGhpcy5fcmVuZGVyZWRSYW5nZXx8KHRoaXMuX3JlbmRlcmVkSXRlbXM9dGhpcy5fZGF0YS5zbGljZSh0aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0LHRoaXMuX3JlbmRlcmVkUmFuZ2UuZW5kKSx0aGlzLl9kaWZmZXJ8fCh0aGlzLl9kaWZmZXI9dGhpcy5fZGlmZmVycy5maW5kKHRoaXMuX3JlbmRlcmVkSXRlbXMpLmNyZWF0ZSgoZSxpKT0+dGhpcy5jZGtWaXJ0dWFsRm9yVHJhY2tCeT90aGlzLmNka1ZpcnR1YWxGb3JUcmFja0J5KGUsaSk6aSkpLHRoaXMuX25lZWRzVXBkYXRlPSEwKX1fY2hhbmdlRGF0YVNvdXJjZShlLGkpe3JldHVybiBlJiZlLmRpc2Nvbm5lY3QodGhpcyksdGhpcy5fbmVlZHNVcGRhdGU9ITAsaT9pLmNvbm5lY3QodGhpcyk6JHQoKX1fdXBkYXRlQ29udGV4dCgpe2xldCBlPXRoaXMuX2RhdGEubGVuZ3RoLGk9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5sZW5ndGg7Zm9yKDtpLS07KXtsZXQgcj10aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldChpKTtyLmNvbnRleHQuaW5kZXg9dGhpcy5fcmVuZGVyZWRSYW5nZS5zdGFydCtpLHIuY29udGV4dC5jb3VudD1lLHRoaXMuX3VwZGF0ZUNvbXB1dGVkQ29udGV4dFByb3BlcnRpZXMoci5jb250ZXh0KSxyLmRldGVjdENoYW5nZXMoKX19X2FwcGx5Q2hhbmdlcyhlKXt0aGlzLl92aWV3UmVwZWF0ZXIuYXBwbHlDaGFuZ2VzKGUsdGhpcy5fdmlld0NvbnRhaW5lclJlZiwobyxhLHMpPT50aGlzLl9nZXRFbWJlZGRlZFZpZXdBcmdzKG8scyksbz0+by5pdGVtKSxlLmZvckVhY2hJZGVudGl0eUNoYW5nZShvPT57dGhpcy5fdmlld0NvbnRhaW5lclJlZi5nZXQoby5jdXJyZW50SW5kZXgpLmNvbnRleHQuJGltcGxpY2l0PW8uaXRlbX0pO2xldCBpPXRoaXMuX2RhdGEubGVuZ3RoLHI9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5sZW5ndGg7Zm9yKDtyLS07KXtsZXQgbz10aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldChyKTtvLmNvbnRleHQuaW5kZXg9dGhpcy5fcmVuZGVyZWRSYW5nZS5zdGFydCtyLG8uY29udGV4dC5jb3VudD1pLHRoaXMuX3VwZGF0ZUNvbXB1dGVkQ29udGV4dFByb3BlcnRpZXMoby5jb250ZXh0KX19X3VwZGF0ZUNvbXB1dGVkQ29udGV4dFByb3BlcnRpZXMoZSl7ZS5maXJzdD0wPT09ZS5pbmRleCxlLmxhc3Q9ZS5pbmRleD09PWUuY291bnQtMSxlLmV2ZW49ZS5pbmRleCUyPT0wLGUub2RkPSFlLmV2ZW59X2dldEVtYmVkZGVkVmlld0FyZ3MoZSxpKXtyZXR1cm57dGVtcGxhdGVSZWY6dGhpcy5fdGVtcGxhdGUsY29udGV4dDp7JGltcGxpY2l0OmUuaXRlbSxjZGtWaXJ0dWFsRm9yT2Y6dGhpcy5fY2RrVmlydHVhbEZvck9mLGluZGV4Oi0xLGNvdW50Oi0xLGZpcnN0OiExLGxhc3Q6ITEsb2RkOiExLGV2ZW46ITF9LGluZGV4Oml9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGVpKSxDKG9pKSxDKFRsKSxDKEMyKSxDKGdnLDQpLEMob3QpKX0sbi5cdTAyNzVkaXI9TWUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2RrVmlydHVhbEZvciIsIiIsImNka1ZpcnR1YWxGb3JPZiIsIiJdXSxpbnB1dHM6e2Nka1ZpcnR1YWxGb3JPZjoiY2RrVmlydHVhbEZvck9mIixjZGtWaXJ0dWFsRm9yVHJhY2tCeToiY2RrVmlydHVhbEZvclRyYWNrQnkiLGNka1ZpcnR1YWxGb3JUZW1wbGF0ZToiY2RrVmlydHVhbEZvclRlbXBsYXRlIixjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemU6ImNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZSJ9LHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W1Z0KFt7cHJvdmlkZTpDMix1c2VDbGFzczpXMX1dKV19KSxufSkoKSxJYz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9SCh7fSksbn0pKCksQ2Q9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe2ltcG9ydHM6W0Z1LEljLGdnLEZ1LEljXX0pLG59KSgpLEs3PWsxKCkscTE9Y2xhc3N7ZW5hYmxlKCl7fWRpc2FibGUoKXt9YXR0YWNoKCl7fX07ZnVuY3Rpb24gRTIobix0KXtyZXR1cm4gdC5zb21lKGU9Pm4uYm90dG9tPGUudG9wfHxuLnRvcD5lLmJvdHRvbXx8bi5yaWdodDxlLmxlZnR8fG4ubGVmdD5lLnJpZ2h0KX1mdW5jdGlvbiBKNyhuLHQpe3JldHVybiB0LnNvbWUoZT0+bi50b3A8ZS50b3B8fG4uYm90dG9tPmUuYm90dG9tfHxuLmxlZnQ8ZS5sZWZ0fHxuLnJpZ2h0PmUucmlnaHQpfXZhciBJaD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLl9zY3JvbGxEaXNwYXRjaGVyPXQsdGhpcy5fdmlld3BvcnRSdWxlcj1lLHRoaXMuX25nWm9uZT1pLHRoaXMuX2NvbmZpZz1yLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj1udWxsfWF0dGFjaCh0KXt0aGlzLl9vdmVybGF5UmVmPXR9ZW5hYmxlKCl7dGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9ufHwodGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPXRoaXMuX3Njcm9sbERpc3BhdGNoZXIuc2Nyb2xsZWQodGhpcy5fY29uZmlnP3RoaXMuX2NvbmZpZy5zY3JvbGxUaHJvdHRsZTowKS5zdWJzY3JpYmUoKCk9PntpZih0aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCksdGhpcy5fY29uZmlnJiZ0aGlzLl9jb25maWcuYXV0b0Nsb3NlKXtsZXQgZT10aGlzLl9vdmVybGF5UmVmLm92ZXJsYXlFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHt3aWR0aDppLGhlaWdodDpyfT10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2l6ZSgpO0UyKGUsW3t3aWR0aDppLGhlaWdodDpyLGJvdHRvbTpyLHJpZ2h0OmksdG9wOjAsbGVmdDowfV0pJiYodGhpcy5kaXNhYmxlKCksdGhpcy5fbmdab25lLnJ1bigoKT0+dGhpcy5fb3ZlcmxheVJlZi5kZXRhY2goKSkpfX0pKX1kaXNhYmxlKCl7dGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uJiYodGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPW51bGwpfWRldGFjaCgpe3RoaXMuZGlzYWJsZSgpLHRoaXMuX292ZXJsYXlSZWY9bnVsbH19LGliZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8pe3RoaXMuX3Njcm9sbERpc3BhdGNoZXI9ZSx0aGlzLl92aWV3cG9ydFJ1bGVyPWksdGhpcy5fbmdab25lPXIsdGhpcy5ub29wPSgpPT5uZXcgcTEsdGhpcy5jbG9zZT1hPT5uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5fc2Nyb2xsRGlzcGF0Y2hlcj10LHRoaXMuX25nWm9uZT1lLHRoaXMuX3ZpZXdwb3J0UnVsZXI9aSx0aGlzLl9jb25maWc9cix0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249bnVsbCx0aGlzLl9kZXRhY2g9KCk9Pnt0aGlzLmRpc2FibGUoKSx0aGlzLl9vdmVybGF5UmVmLmhhc0F0dGFjaGVkKCkmJnRoaXMuX25nWm9uZS5ydW4oKCk9PnRoaXMuX292ZXJsYXlSZWYuZGV0YWNoKCkpfX1hdHRhY2godCl7dGhpcy5fb3ZlcmxheVJlZj10fWVuYWJsZSgpe2lmKHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbilyZXR1cm47bGV0IHQ9dGhpcy5fc2Nyb2xsRGlzcGF0Y2hlci5zY3JvbGxlZCgwKS5waXBlKE9lKGU9PiFlfHwhdGhpcy5fb3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudC5jb250YWlucyhlLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50KSkpO3RoaXMuX2NvbmZpZyYmdGhpcy5fY29uZmlnLnRocmVzaG9sZCYmdGhpcy5fY29uZmlnLnRocmVzaG9sZD4xPyh0aGlzLl9pbml0aWFsU2Nyb2xsUG9zaXRpb249dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCkudG9wLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj10LnN1YnNjcmliZSgoKT0+e2xldCBlPXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpLnRvcDtNYXRoLmFicyhlLXRoaXMuX2luaXRpYWxTY3JvbGxQb3NpdGlvbik+dGhpcy5fY29uZmlnLnRocmVzaG9sZD90aGlzLl9kZXRhY2goKTp0aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCl9KSk6dGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPXQuc3Vic2NyaWJlKHRoaXMuX2RldGFjaCl9ZGlzYWJsZSgpe3RoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbiYmKHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj1udWxsKX1kZXRhY2goKXt0aGlzLmRpc2FibGUoKSx0aGlzLl9vdmVybGF5UmVmPW51bGx9fSh0aGlzLl9zY3JvbGxEaXNwYXRjaGVyLHRoaXMuX25nWm9uZSx0aGlzLl92aWV3cG9ydFJ1bGVyLGEpLHRoaXMuYmxvY2s9KCk9Pm5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX3ZpZXdwb3J0UnVsZXI9dCx0aGlzLl9wcmV2aW91c0hUTUxTdHlsZXM9e3RvcDoiIixsZWZ0OiIifSx0aGlzLl9pc0VuYWJsZWQ9ITEsdGhpcy5fZG9jdW1lbnQ9ZX1hdHRhY2goKXt9ZW5hYmxlKCl7aWYodGhpcy5fY2FuQmVFbmFibGVkKCkpe2xldCB0PXRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudDt0aGlzLl9wcmV2aW91c1Njcm9sbFBvc2l0aW9uPXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpLHRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcy5sZWZ0PXQuc3R5bGUubGVmdHx8IiIsdGhpcy5fcHJldmlvdXNIVE1MU3R5bGVzLnRvcD10LnN0eWxlLnRvcHx8IiIsdC5zdHlsZS5sZWZ0PXFyKC10aGlzLl9wcmV2aW91c1Njcm9sbFBvc2l0aW9uLmxlZnQpLHQuc3R5bGUudG9wPXFyKC10aGlzLl9wcmV2aW91c1Njcm9sbFBvc2l0aW9uLnRvcCksdC5jbGFzc0xpc3QuYWRkKCJjZGstZ2xvYmFsLXNjcm9sbGJsb2NrIiksdGhpcy5faXNFbmFibGVkPSEwfX1kaXNhYmxlKCl7aWYodGhpcy5faXNFbmFibGVkKXtsZXQgdD10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsaT10LnN0eWxlLHI9dGhpcy5fZG9jdW1lbnQuYm9keS5zdHlsZSxvPWkuc2Nyb2xsQmVoYXZpb3J8fCIiLGE9ci5zY3JvbGxCZWhhdmlvcnx8IiI7dGhpcy5faXNFbmFibGVkPSExLGkubGVmdD10aGlzLl9wcmV2aW91c0hUTUxTdHlsZXMubGVmdCxpLnRvcD10aGlzLl9wcmV2aW91c0hUTUxTdHlsZXMudG9wLHQuY2xhc3NMaXN0LnJlbW92ZSgiY2RrLWdsb2JhbC1zY3JvbGxibG9jayIpLEs3JiYoaS5zY3JvbGxCZWhhdmlvcj1yLnNjcm9sbEJlaGF2aW9yPSJhdXRvIiksd2luZG93LnNjcm9sbCh0aGlzLl9wcmV2aW91c1Njcm9sbFBvc2l0aW9uLmxlZnQsdGhpcy5fcHJldmlvdXNTY3JvbGxQb3NpdGlvbi50b3ApLEs3JiYoaS5zY3JvbGxCZWhhdmlvcj1vLHIuc2Nyb2xsQmVoYXZpb3I9YSl9fV9jYW5CZUVuYWJsZWQoKXtpZih0aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCJjZGstZ2xvYmFsLXNjcm9sbGJsb2NrIil8fHRoaXMuX2lzRW5hYmxlZClyZXR1cm4hMTtsZXQgZT10aGlzLl9kb2N1bWVudC5ib2R5LGk9dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNpemUoKTtyZXR1cm4gZS5zY3JvbGxIZWlnaHQ+aS5oZWlnaHR8fGUuc2Nyb2xsV2lkdGg+aS53aWR0aH19KHRoaXMuX3ZpZXdwb3J0UnVsZXIsdGhpcy5fZG9jdW1lbnQpLHRoaXMucmVwb3NpdGlvbj1hPT5uZXcgSWgodGhpcy5fc2Nyb2xsRGlzcGF0Y2hlcix0aGlzLl92aWV3cG9ydFJ1bGVyLHRoaXMuX25nWm9uZSxhKSx0aGlzLl9kb2N1bWVudD1vfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKEx1KSxPKFdhKSxPKG90KSxPKE50KSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksZWw9Y2xhc3N7Y29uc3RydWN0b3IodCl7aWYodGhpcy5zY3JvbGxTdHJhdGVneT1uZXcgcTEsdGhpcy5wYW5lbENsYXNzPSIiLHRoaXMuaGFzQmFja2Ryb3A9ITEsdGhpcy5iYWNrZHJvcENsYXNzPSJjZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wIix0aGlzLmRpc3Bvc2VPbk5hdmlnYXRpb249ITEsdCl7bGV0IGU9T2JqZWN0LmtleXModCk7Zm9yKGxldCBpIG9mIGUpdm9pZCAwIT09dFtpXSYmKHRoaXNbaV09dFtpXSl9fX0saTk9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9hdHRhY2hlZE92ZXJsYXlzPVtdLHRoaXMuX2RvY3VtZW50PWV9bmdPbkRlc3Ryb3koKXt0aGlzLmRldGFjaCgpfWFkZChlKXt0aGlzLnJlbW92ZShlKSx0aGlzLl9hdHRhY2hlZE92ZXJsYXlzLnB1c2goZSl9cmVtb3ZlKGUpe2xldCBpPXRoaXMuX2F0dGFjaGVkT3ZlcmxheXMuaW5kZXhPZihlKTtpPi0xJiZ0aGlzLl9hdHRhY2hlZE92ZXJsYXlzLnNwbGljZShpLDEpLDA9PT10aGlzLl9hdHRhY2hlZE92ZXJsYXlzLmxlbmd0aCYmdGhpcy5kZXRhY2goKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhOdCkpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLHJiZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgaTl7Y29uc3RydWN0b3IoZSxpKXtzdXBlcihlKSx0aGlzLl9uZ1pvbmU9aSx0aGlzLl9rZXlkb3duTGlzdGVuZXI9cj0+e2xldCBvPXRoaXMuX2F0dGFjaGVkT3ZlcmxheXM7Zm9yKGxldCBhPW8ubGVuZ3RoLTE7YT4tMTthLS0paWYob1thXS5fa2V5ZG93bkV2ZW50cy5vYnNlcnZlcnMubGVuZ3RoPjApe2xldCBzPW9bYV0uX2tleWRvd25FdmVudHM7dGhpcy5fbmdab25lP3RoaXMuX25nWm9uZS5ydW4oKCk9PnMubmV4dChyKSk6cy5uZXh0KHIpO2JyZWFrfX19YWRkKGUpe3N1cGVyLmFkZChlKSx0aGlzLl9pc0F0dGFjaGVkfHwodGhpcy5fbmdab25lP3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+dGhpcy5fZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9rZXlkb3duTGlzdGVuZXIpKTp0aGlzLl9kb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuX2tleWRvd25MaXN0ZW5lciksdGhpcy5faXNBdHRhY2hlZD0hMCl9ZGV0YWNoKCl7dGhpcy5faXNBdHRhY2hlZCYmKHRoaXMuX2RvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5fa2V5ZG93bkxpc3RlbmVyKSx0aGlzLl9pc0F0dGFjaGVkPSExKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhOdCksTyhvdCw4KSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksb2JlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBpOXtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoZSksdGhpcy5fcGxhdGZvcm09aSx0aGlzLl9uZ1pvbmU9cix0aGlzLl9jdXJzb3JTdHlsZUlzU2V0PSExLHRoaXMuX3BvaW50ZXJEb3duTGlzdGVuZXI9bz0+e3RoaXMuX3BvaW50ZXJEb3duRXZlbnRUYXJnZXQ9YnMobyl9LHRoaXMuX2NsaWNrTGlzdGVuZXI9bz0+e2xldCBhPWJzKG8pLHM9ImNsaWNrIj09PW8udHlwZSYmdGhpcy5fcG9pbnRlckRvd25FdmVudFRhcmdldD90aGlzLl9wb2ludGVyRG93bkV2ZW50VGFyZ2V0OmE7dGhpcy5fcG9pbnRlckRvd25FdmVudFRhcmdldD1udWxsO2xldCBsPXRoaXMuX2F0dGFjaGVkT3ZlcmxheXMuc2xpY2UoKTtmb3IobGV0IGM9bC5sZW5ndGgtMTtjPi0xO2MtLSl7bGV0IGQ9bFtjXTtpZihkLl9vdXRzaWRlUG9pbnRlckV2ZW50cy5vYnNlcnZlcnMubGVuZ3RoPDF8fCFkLmhhc0F0dGFjaGVkKCkpY29udGludWU7aWYoZC5vdmVybGF5RWxlbWVudC5jb250YWlucyhhKXx8ZC5vdmVybGF5RWxlbWVudC5jb250YWlucyhzKSlicmVhaztsZXQgdT1kLl9vdXRzaWRlUG9pbnRlckV2ZW50czt0aGlzLl9uZ1pvbmU/dGhpcy5fbmdab25lLnJ1bigoKT0+dS5uZXh0KG8pKTp1Lm5leHQobyl9fX1hZGQoZSl7aWYoc3VwZXIuYWRkKGUpLCF0aGlzLl9pc0F0dGFjaGVkKXtsZXQgaT10aGlzLl9kb2N1bWVudC5ib2R5O3RoaXMuX25nWm9uZT90aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PnRoaXMuX2FkZEV2ZW50TGlzdGVuZXJzKGkpKTp0aGlzLl9hZGRFdmVudExpc3RlbmVycyhpKSx0aGlzLl9wbGF0Zm9ybS5JT1MmJiF0aGlzLl9jdXJzb3JTdHlsZUlzU2V0JiYodGhpcy5fY3Vyc29yT3JpZ2luYWxWYWx1ZT1pLnN0eWxlLmN1cnNvcixpLnN0eWxlLmN1cnNvcj0icG9pbnRlciIsdGhpcy5fY3Vyc29yU3R5bGVJc1NldD0hMCksdGhpcy5faXNBdHRhY2hlZD0hMH19ZGV0YWNoKCl7aWYodGhpcy5faXNBdHRhY2hlZCl7bGV0IGU9dGhpcy5fZG9jdW1lbnQuYm9keTtlLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIix0aGlzLl9wb2ludGVyRG93bkxpc3RlbmVyLCEwKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl9jbGlja0xpc3RlbmVyLCEwKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImF1eGNsaWNrIix0aGlzLl9jbGlja0xpc3RlbmVyLCEwKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51Iix0aGlzLl9jbGlja0xpc3RlbmVyLCEwKSx0aGlzLl9wbGF0Zm9ybS5JT1MmJnRoaXMuX2N1cnNvclN0eWxlSXNTZXQmJihlLnN0eWxlLmN1cnNvcj10aGlzLl9jdXJzb3JPcmlnaW5hbFZhbHVlLHRoaXMuX2N1cnNvclN0eWxlSXNTZXQ9ITEpLHRoaXMuX2lzQXR0YWNoZWQ9ITF9fV9hZGRFdmVudExpc3RlbmVycyhlKXtlLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIix0aGlzLl9wb2ludGVyRG93bkxpc3RlbmVyLCEwKSxlLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl9jbGlja0xpc3RlbmVyLCEwKSxlLmFkZEV2ZW50TGlzdGVuZXIoImF1eGNsaWNrIix0aGlzLl9jbGlja0xpc3RlbmVyLCEwKSxlLmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51Iix0aGlzLl9jbGlja0xpc3RlbmVyLCEwKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhOdCksTyhWbiksTyhvdCw4KSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksX2c9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuX3BsYXRmb3JtPWksdGhpcy5fZG9jdW1lbnQ9ZX1uZ09uRGVzdHJveSgpe3RoaXMuX2NvbnRhaW5lckVsZW1lbnQ/LnJlbW92ZSgpfWdldENvbnRhaW5lckVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fY29udGFpbmVyRWxlbWVudHx8dGhpcy5fY3JlYXRlQ29udGFpbmVyKCksdGhpcy5fY29udGFpbmVyRWxlbWVudH1fY3JlYXRlQ29udGFpbmVyKCl7bGV0IGU9ImNkay1vdmVybGF5LWNvbnRhaW5lciI7aWYodGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyfHxGdigpKXtsZXQgcj10aGlzLl9kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHtlfVtwbGF0Zm9ybT0ic2VydmVyIl0sIC4ke2V9W3BsYXRmb3JtPSJ0ZXN0Il1gKTtmb3IobGV0IG89MDtvPHIubGVuZ3RoO28rKylyW29dLnJlbW92ZSgpfWxldCBpPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2kuY2xhc3NMaXN0LmFkZChlKSxGdigpP2kuc2V0QXR0cmlidXRlKCJwbGF0Zm9ybSIsInRlc3QiKTp0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXJ8fGkuc2V0QXR0cmlidXRlKCJwbGF0Zm9ybSIsInNlcnZlciIpLHRoaXMuX2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaSksdGhpcy5fY29udGFpbmVyRWxlbWVudD1pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKE50KSxPKFZuKSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksQWM9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvLGEscyxsLGMsZD0hMSl7dGhpcy5fcG9ydGFsT3V0bGV0PXQsdGhpcy5faG9zdD1lLHRoaXMuX3BhbmU9aSx0aGlzLl9jb25maWc9cix0aGlzLl9uZ1pvbmU9byx0aGlzLl9rZXlib2FyZERpc3BhdGNoZXI9YSx0aGlzLl9kb2N1bWVudD1zLHRoaXMuX2xvY2F0aW9uPWwsdGhpcy5fb3V0c2lkZUNsaWNrRGlzcGF0Y2hlcj1jLHRoaXMuX2FuaW1hdGlvbnNEaXNhYmxlZD1kLHRoaXMuX2JhY2tkcm9wRWxlbWVudD1udWxsLHRoaXMuX2JhY2tkcm9wQ2xpY2s9bmV3IEVlLHRoaXMuX2F0dGFjaG1lbnRzPW5ldyBFZSx0aGlzLl9kZXRhY2htZW50cz1uZXcgRWUsdGhpcy5fbG9jYXRpb25DaGFuZ2VzPUVuLkVNUFRZLHRoaXMuX2JhY2tkcm9wQ2xpY2tIYW5kbGVyPXU9PnRoaXMuX2JhY2tkcm9wQ2xpY2submV4dCh1KSx0aGlzLl9iYWNrZHJvcFRyYW5zaXRpb25lbmRIYW5kbGVyPXU9Pnt0aGlzLl9kaXNwb3NlQmFja2Ryb3AodS50YXJnZXQpfSx0aGlzLl9rZXlkb3duRXZlbnRzPW5ldyBFZSx0aGlzLl9vdXRzaWRlUG9pbnRlckV2ZW50cz1uZXcgRWUsci5zY3JvbGxTdHJhdGVneSYmKHRoaXMuX3Njcm9sbFN0cmF0ZWd5PXIuc2Nyb2xsU3RyYXRlZ3ksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kuYXR0YWNoKHRoaXMpKSx0aGlzLl9wb3NpdGlvblN0cmF0ZWd5PXIucG9zaXRpb25TdHJhdGVneX1nZXQgb3ZlcmxheUVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fcGFuZX1nZXQgYmFja2Ryb3BFbGVtZW50KCl7cmV0dXJuIHRoaXMuX2JhY2tkcm9wRWxlbWVudH1nZXQgaG9zdEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5faG9zdH1hdHRhY2godCl7IXRoaXMuX2hvc3QucGFyZW50RWxlbWVudCYmdGhpcy5fcHJldmlvdXNIb3N0UGFyZW50JiZ0aGlzLl9wcmV2aW91c0hvc3RQYXJlbnQuYXBwZW5kQ2hpbGQodGhpcy5faG9zdCk7bGV0IGU9dGhpcy5fcG9ydGFsT3V0bGV0LmF0dGFjaCh0KTtyZXR1cm4gdGhpcy5fcG9zaXRpb25TdHJhdGVneSYmdGhpcy5fcG9zaXRpb25TdHJhdGVneS5hdHRhY2godGhpcyksdGhpcy5fdXBkYXRlU3RhY2tpbmdPcmRlcigpLHRoaXMuX3VwZGF0ZUVsZW1lbnRTaXplKCksdGhpcy5fdXBkYXRlRWxlbWVudERpcmVjdGlvbigpLHRoaXMuX3Njcm9sbFN0cmF0ZWd5JiZ0aGlzLl9zY3JvbGxTdHJhdGVneS5lbmFibGUoKSx0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZShMdCgxKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5oYXNBdHRhY2hlZCgpJiZ0aGlzLnVwZGF0ZVBvc2l0aW9uKCl9KSx0aGlzLl90b2dnbGVQb2ludGVyRXZlbnRzKCEwKSx0aGlzLl9jb25maWcuaGFzQmFja2Ryb3AmJnRoaXMuX2F0dGFjaEJhY2tkcm9wKCksdGhpcy5fY29uZmlnLnBhbmVsQ2xhc3MmJnRoaXMuX3RvZ2dsZUNsYXNzZXModGhpcy5fcGFuZSx0aGlzLl9jb25maWcucGFuZWxDbGFzcywhMCksdGhpcy5fYXR0YWNobWVudHMubmV4dCgpLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlci5hZGQodGhpcyksdGhpcy5fY29uZmlnLmRpc3Bvc2VPbk5hdmlnYXRpb24mJih0aGlzLl9sb2NhdGlvbkNoYW5nZXM9dGhpcy5fbG9jYXRpb24uc3Vic2NyaWJlKCgpPT50aGlzLmRpc3Bvc2UoKSkpLHRoaXMuX291dHNpZGVDbGlja0Rpc3BhdGNoZXIuYWRkKHRoaXMpLCJmdW5jdGlvbiI9PXR5cGVvZiBlPy5vbkRlc3Ryb3kmJmUub25EZXN0cm95KCgpPT57dGhpcy5oYXNBdHRhY2hlZCgpJiZ0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PnRoaXMuZGV0YWNoKCkpKX0pLGV9ZGV0YWNoKCl7aWYoIXRoaXMuaGFzQXR0YWNoZWQoKSlyZXR1cm47dGhpcy5kZXRhY2hCYWNrZHJvcCgpLHRoaXMuX3RvZ2dsZVBvaW50ZXJFdmVudHMoITEpLHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kmJnRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuZGV0YWNoJiZ0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LmRldGFjaCgpLHRoaXMuX3Njcm9sbFN0cmF0ZWd5JiZ0aGlzLl9zY3JvbGxTdHJhdGVneS5kaXNhYmxlKCk7bGV0IHQ9dGhpcy5fcG9ydGFsT3V0bGV0LmRldGFjaCgpO3JldHVybiB0aGlzLl9kZXRhY2htZW50cy5uZXh0KCksdGhpcy5fa2V5Ym9hcmREaXNwYXRjaGVyLnJlbW92ZSh0aGlzKSx0aGlzLl9kZXRhY2hDb250ZW50V2hlblN0YWJsZSgpLHRoaXMuX2xvY2F0aW9uQ2hhbmdlcy51bnN1YnNjcmliZSgpLHRoaXMuX291dHNpZGVDbGlja0Rpc3BhdGNoZXIucmVtb3ZlKHRoaXMpLHR9ZGlzcG9zZSgpe2xldCB0PXRoaXMuaGFzQXR0YWNoZWQoKTt0aGlzLl9wb3NpdGlvblN0cmF0ZWd5JiZ0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LmRpc3Bvc2UoKSx0aGlzLl9kaXNwb3NlU2Nyb2xsU3RyYXRlZ3koKSx0aGlzLl9kaXNwb3NlQmFja2Ryb3AodGhpcy5fYmFja2Ryb3BFbGVtZW50KSx0aGlzLl9sb2NhdGlvbkNoYW5nZXMudW5zdWJzY3JpYmUoKSx0aGlzLl9rZXlib2FyZERpc3BhdGNoZXIucmVtb3ZlKHRoaXMpLHRoaXMuX3BvcnRhbE91dGxldC5kaXNwb3NlKCksdGhpcy5fYXR0YWNobWVudHMuY29tcGxldGUoKSx0aGlzLl9iYWNrZHJvcENsaWNrLmNvbXBsZXRlKCksdGhpcy5fa2V5ZG93bkV2ZW50cy5jb21wbGV0ZSgpLHRoaXMuX291dHNpZGVQb2ludGVyRXZlbnRzLmNvbXBsZXRlKCksdGhpcy5fb3V0c2lkZUNsaWNrRGlzcGF0Y2hlci5yZW1vdmUodGhpcyksdGhpcy5faG9zdD8ucmVtb3ZlKCksdGhpcy5fcHJldmlvdXNIb3N0UGFyZW50PXRoaXMuX3BhbmU9dGhpcy5faG9zdD1udWxsLHQmJnRoaXMuX2RldGFjaG1lbnRzLm5leHQoKSx0aGlzLl9kZXRhY2htZW50cy5jb21wbGV0ZSgpfWhhc0F0dGFjaGVkKCl7cmV0dXJuIHRoaXMuX3BvcnRhbE91dGxldC5oYXNBdHRhY2hlZCgpfWJhY2tkcm9wQ2xpY2soKXtyZXR1cm4gdGhpcy5fYmFja2Ryb3BDbGlja31hdHRhY2htZW50cygpe3JldHVybiB0aGlzLl9hdHRhY2htZW50c31kZXRhY2htZW50cygpe3JldHVybiB0aGlzLl9kZXRhY2htZW50c31rZXlkb3duRXZlbnRzKCl7cmV0dXJuIHRoaXMuX2tleWRvd25FdmVudHN9b3V0c2lkZVBvaW50ZXJFdmVudHMoKXtyZXR1cm4gdGhpcy5fb3V0c2lkZVBvaW50ZXJFdmVudHN9Z2V0Q29uZmlnKCl7cmV0dXJuIHRoaXMuX2NvbmZpZ311cGRhdGVQb3NpdGlvbigpe3RoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kmJnRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuYXBwbHkoKX11cGRhdGVQb3NpdGlvblN0cmF0ZWd5KHQpe3QhPT10aGlzLl9wb3NpdGlvblN0cmF0ZWd5JiYodGhpcy5fcG9zaXRpb25TdHJhdGVneSYmdGhpcy5fcG9zaXRpb25TdHJhdGVneS5kaXNwb3NlKCksdGhpcy5fcG9zaXRpb25TdHJhdGVneT10LHRoaXMuaGFzQXR0YWNoZWQoKSYmKHQuYXR0YWNoKHRoaXMpLHRoaXMudXBkYXRlUG9zaXRpb24oKSkpfXVwZGF0ZVNpemUodCl7dGhpcy5fY29uZmlnPXsuLi50aGlzLl9jb25maWcsLi4udH0sdGhpcy5fdXBkYXRlRWxlbWVudFNpemUoKX1zZXREaXJlY3Rpb24odCl7dGhpcy5fY29uZmlnPXsuLi50aGlzLl9jb25maWcsZGlyZWN0aW9uOnR9LHRoaXMuX3VwZGF0ZUVsZW1lbnREaXJlY3Rpb24oKX1hZGRQYW5lbENsYXNzKHQpe3RoaXMuX3BhbmUmJnRoaXMuX3RvZ2dsZUNsYXNzZXModGhpcy5fcGFuZSx0LCEwKX1yZW1vdmVQYW5lbENsYXNzKHQpe3RoaXMuX3BhbmUmJnRoaXMuX3RvZ2dsZUNsYXNzZXModGhpcy5fcGFuZSx0LCExKX1nZXREaXJlY3Rpb24oKXtsZXQgdD10aGlzLl9jb25maWcuZGlyZWN0aW9uO3JldHVybiB0PyJzdHJpbmciPT10eXBlb2YgdD90OnQudmFsdWU6Imx0ciJ9dXBkYXRlU2Nyb2xsU3RyYXRlZ3kodCl7dCE9PXRoaXMuX3Njcm9sbFN0cmF0ZWd5JiYodGhpcy5fZGlzcG9zZVNjcm9sbFN0cmF0ZWd5KCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3k9dCx0aGlzLmhhc0F0dGFjaGVkKCkmJih0LmF0dGFjaCh0aGlzKSx0LmVuYWJsZSgpKSl9X3VwZGF0ZUVsZW1lbnREaXJlY3Rpb24oKXt0aGlzLl9ob3N0LnNldEF0dHJpYnV0ZSgiZGlyIix0aGlzLmdldERpcmVjdGlvbigpKX1fdXBkYXRlRWxlbWVudFNpemUoKXtpZighdGhpcy5fcGFuZSlyZXR1cm47bGV0IHQ9dGhpcy5fcGFuZS5zdHlsZTt0LndpZHRoPXFyKHRoaXMuX2NvbmZpZy53aWR0aCksdC5oZWlnaHQ9cXIodGhpcy5fY29uZmlnLmhlaWdodCksdC5taW5XaWR0aD1xcih0aGlzLl9jb25maWcubWluV2lkdGgpLHQubWluSGVpZ2h0PXFyKHRoaXMuX2NvbmZpZy5taW5IZWlnaHQpLHQubWF4V2lkdGg9cXIodGhpcy5fY29uZmlnLm1heFdpZHRoKSx0Lm1heEhlaWdodD1xcih0aGlzLl9jb25maWcubWF4SGVpZ2h0KX1fdG9nZ2xlUG9pbnRlckV2ZW50cyh0KXt0aGlzLl9wYW5lLnN0eWxlLnBvaW50ZXJFdmVudHM9dD8iIjoibm9uZSJ9X2F0dGFjaEJhY2tkcm9wKCl7bGV0IHQ9ImNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmciO3RoaXMuX2JhY2tkcm9wRWxlbWVudD10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLl9iYWNrZHJvcEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY2RrLW92ZXJsYXktYmFja2Ryb3AiKSx0aGlzLl9hbmltYXRpb25zRGlzYWJsZWQmJnRoaXMuX2JhY2tkcm9wRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjZGstb3ZlcmxheS1iYWNrZHJvcC1ub29wLWFuaW1hdGlvbiIpLHRoaXMuX2NvbmZpZy5iYWNrZHJvcENsYXNzJiZ0aGlzLl90b2dnbGVDbGFzc2VzKHRoaXMuX2JhY2tkcm9wRWxlbWVudCx0aGlzLl9jb25maWcuYmFja2Ryb3BDbGFzcywhMCksdGhpcy5faG9zdC5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZSh0aGlzLl9iYWNrZHJvcEVsZW1lbnQsdGhpcy5faG9zdCksdGhpcy5fYmFja2Ryb3BFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl9iYWNrZHJvcENsaWNrSGFuZGxlciksIXRoaXMuX2FuaW1hdGlvbnNEaXNhYmxlZCYmdHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZTwidSI/dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5fYmFja2Ryb3BFbGVtZW50JiZ0aGlzLl9iYWNrZHJvcEVsZW1lbnQuY2xhc3NMaXN0LmFkZCh0KX0pfSk6dGhpcy5fYmFja2Ryb3BFbGVtZW50LmNsYXNzTGlzdC5hZGQodCl9X3VwZGF0ZVN0YWNraW5nT3JkZXIoKXt0aGlzLl9ob3N0Lm5leHRTaWJsaW5nJiZ0aGlzLl9ob3N0LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcy5faG9zdCl9ZGV0YWNoQmFja2Ryb3AoKXtsZXQgdD10aGlzLl9iYWNrZHJvcEVsZW1lbnQ7aWYodCl7aWYodGhpcy5fYW5pbWF0aW9uc0Rpc2FibGVkKXJldHVybiB2b2lkIHRoaXMuX2Rpc3Bvc2VCYWNrZHJvcCh0KTt0LmNsYXNzTGlzdC5yZW1vdmUoImNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmciKSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0LmFkZEV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLHRoaXMuX2JhY2tkcm9wVHJhbnNpdGlvbmVuZEhhbmRsZXIpfSksdC5zdHlsZS5wb2ludGVyRXZlbnRzPSJub25lIix0aGlzLl9iYWNrZHJvcFRpbWVvdXQ9dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5zZXRUaW1lb3V0KCgpPT57dGhpcy5fZGlzcG9zZUJhY2tkcm9wKHQpfSw1MDApKX19X3RvZ2dsZUNsYXNzZXModCxlLGkpe2xldCByPXJnKGV8fFtdKS5maWx0ZXIobz0+ISFvKTtyLmxlbmd0aCYmKGk/dC5jbGFzc0xpc3QuYWRkKC4uLnIpOnQuY2xhc3NMaXN0LnJlbW92ZSguLi5yKSl9X2RldGFjaENvbnRlbnRXaGVuU3RhYmxlKCl7dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57bGV0IHQ9dGhpcy5fbmdab25lLm9uU3RhYmxlLnBpcGUoaXQodG4odGhpcy5fYXR0YWNobWVudHMsdGhpcy5fZGV0YWNobWVudHMpKSkuc3Vic2NyaWJlKCgpPT57KCF0aGlzLl9wYW5lfHwhdGhpcy5faG9zdHx8MD09PXRoaXMuX3BhbmUuY2hpbGRyZW4ubGVuZ3RoKSYmKHRoaXMuX3BhbmUmJnRoaXMuX2NvbmZpZy5wYW5lbENsYXNzJiZ0aGlzLl90b2dnbGVDbGFzc2VzKHRoaXMuX3BhbmUsdGhpcy5fY29uZmlnLnBhbmVsQ2xhc3MsITEpLHRoaXMuX2hvc3QmJnRoaXMuX2hvc3QucGFyZW50RWxlbWVudCYmKHRoaXMuX3ByZXZpb3VzSG9zdFBhcmVudD10aGlzLl9ob3N0LnBhcmVudEVsZW1lbnQsdGhpcy5faG9zdC5yZW1vdmUoKSksdC51bnN1YnNjcmliZSgpKX0pfSl9X2Rpc3Bvc2VTY3JvbGxTdHJhdGVneSgpe2xldCB0PXRoaXMuX3Njcm9sbFN0cmF0ZWd5O3QmJih0LmRpc2FibGUoKSx0LmRldGFjaCYmdC5kZXRhY2goKSl9X2Rpc3Bvc2VCYWNrZHJvcCh0KXt0JiYodC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5fYmFja2Ryb3BDbGlja0hhbmRsZXIpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsdGhpcy5fYmFja2Ryb3BUcmFuc2l0aW9uZW5kSGFuZGxlciksdC5yZW1vdmUoKSx0aGlzLl9iYWNrZHJvcEVsZW1lbnQ9PT10JiYodGhpcy5fYmFja2Ryb3BFbGVtZW50PW51bGwpKSx0aGlzLl9iYWNrZHJvcFRpbWVvdXQmJihjbGVhclRpbWVvdXQodGhpcy5fYmFja2Ryb3BUaW1lb3V0KSx0aGlzLl9iYWNrZHJvcFRpbWVvdXQ9dm9pZCAwKX19LCQ3PSJjZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94IixhYmU9LyhbQS1aYS16JV0rKSQvO2Z1bmN0aW9uIERoKG4sdCl7Zm9yKGxldCBlIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShlKSYmKG5bZV09dFtlXSk7cmV0dXJuIG59ZnVuY3Rpb24gZTkobil7aWYoIm51bWJlciIhPXR5cGVvZiBuJiZudWxsIT1uKXtsZXRbdCxlXT1uLnNwbGl0KGFiZSk7cmV0dXJuIGUmJiJweCIhPT1lP251bGw6cGFyc2VGbG9hdCh0KX1yZXR1cm4gbnx8bnVsbH1mdW5jdGlvbiB0OShuKXtyZXR1cm57dG9wOk1hdGguZmxvb3Iobi50b3ApLHJpZ2h0Ok1hdGguZmxvb3Iobi5yaWdodCksYm90dG9tOk1hdGguZmxvb3Iobi5ib3R0b20pLGxlZnQ6TWF0aC5mbG9vcihuLmxlZnQpLHdpZHRoOk1hdGguZmxvb3Iobi53aWR0aCksaGVpZ2h0Ok1hdGguZmxvb3Iobi5oZWlnaHQpfX12YXIgbjk9ImNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyIixzYmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLl92aWV3cG9ydFJ1bGVyPWUsdGhpcy5fZG9jdW1lbnQ9aSx0aGlzLl9wbGF0Zm9ybT1yLHRoaXMuX292ZXJsYXlDb250YWluZXI9b31nbG9iYWwoKXtyZXR1cm4gbmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fY3NzUG9zaXRpb249InN0YXRpYyIsdGhpcy5fdG9wT2Zmc2V0PSIiLHRoaXMuX2JvdHRvbU9mZnNldD0iIix0aGlzLl9hbGlnbkl0ZW1zPSIiLHRoaXMuX3hQb3NpdGlvbj0iIix0aGlzLl94T2Zmc2V0PSIiLHRoaXMuX3dpZHRoPSIiLHRoaXMuX2hlaWdodD0iIix0aGlzLl9pc0Rpc3Bvc2VkPSExfWF0dGFjaCh0KXtsZXQgZT10LmdldENvbmZpZygpO3RoaXMuX292ZXJsYXlSZWY9dCx0aGlzLl93aWR0aCYmIWUud2lkdGgmJnQudXBkYXRlU2l6ZSh7d2lkdGg6dGhpcy5fd2lkdGh9KSx0aGlzLl9oZWlnaHQmJiFlLmhlaWdodCYmdC51cGRhdGVTaXplKHtoZWlnaHQ6dGhpcy5faGVpZ2h0fSksdC5ob3N0RWxlbWVudC5jbGFzc0xpc3QuYWRkKG45KSx0aGlzLl9pc0Rpc3Bvc2VkPSExfXRvcCh0PSIiKXtyZXR1cm4gdGhpcy5fYm90dG9tT2Zmc2V0PSIiLHRoaXMuX3RvcE9mZnNldD10LHRoaXMuX2FsaWduSXRlbXM9ImZsZXgtc3RhcnQiLHRoaXN9bGVmdCh0PSIiKXtyZXR1cm4gdGhpcy5feE9mZnNldD10LHRoaXMuX3hQb3NpdGlvbj0ibGVmdCIsdGhpc31ib3R0b20odD0iIil7cmV0dXJuIHRoaXMuX3RvcE9mZnNldD0iIix0aGlzLl9ib3R0b21PZmZzZXQ9dCx0aGlzLl9hbGlnbkl0ZW1zPSJmbGV4LWVuZCIsdGhpc31yaWdodCh0PSIiKXtyZXR1cm4gdGhpcy5feE9mZnNldD10LHRoaXMuX3hQb3NpdGlvbj0icmlnaHQiLHRoaXN9c3RhcnQodD0iIil7cmV0dXJuIHRoaXMuX3hPZmZzZXQ9dCx0aGlzLl94UG9zaXRpb249InN0YXJ0Iix0aGlzfWVuZCh0PSIiKXtyZXR1cm4gdGhpcy5feE9mZnNldD10LHRoaXMuX3hQb3NpdGlvbj0iZW5kIix0aGlzfXdpZHRoKHQ9IiIpe3JldHVybiB0aGlzLl9vdmVybGF5UmVmP3RoaXMuX292ZXJsYXlSZWYudXBkYXRlU2l6ZSh7d2lkdGg6dH0pOnRoaXMuX3dpZHRoPXQsdGhpc31oZWlnaHQodD0iIil7cmV0dXJuIHRoaXMuX292ZXJsYXlSZWY/dGhpcy5fb3ZlcmxheVJlZi51cGRhdGVTaXplKHtoZWlnaHQ6dH0pOnRoaXMuX2hlaWdodD10LHRoaXN9Y2VudGVySG9yaXpvbnRhbGx5KHQ9IiIpe3JldHVybiB0aGlzLmxlZnQodCksdGhpcy5feFBvc2l0aW9uPSJjZW50ZXIiLHRoaXN9Y2VudGVyVmVydGljYWxseSh0PSIiKXtyZXR1cm4gdGhpcy50b3AodCksdGhpcy5fYWxpZ25JdGVtcz0iY2VudGVyIix0aGlzfWFwcGx5KCl7aWYoIXRoaXMuX292ZXJsYXlSZWZ8fCF0aGlzLl9vdmVybGF5UmVmLmhhc0F0dGFjaGVkKCkpcmV0dXJuO2xldCB0PXRoaXMuX292ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuc3R5bGUsZT10aGlzLl9vdmVybGF5UmVmLmhvc3RFbGVtZW50LnN0eWxlLGk9dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKSx7d2lkdGg6cixoZWlnaHQ6byxtYXhXaWR0aDphLG1heEhlaWdodDpzfT1pLGw9ISgiMTAwJSIhPT1yJiYiMTAwdnciIT09cnx8YSYmIjEwMCUiIT09YSYmIjEwMHZ3IiE9PWEpLGM9ISgiMTAwJSIhPT1vJiYiMTAwdmgiIT09b3x8cyYmIjEwMCUiIT09cyYmIjEwMHZoIiE9PXMpLGQ9dGhpcy5feFBvc2l0aW9uLHU9dGhpcy5feE9mZnNldCxwPSJydGwiPT09dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5kaXJlY3Rpb24saD0iIixtPSIiLF89IiI7bD9fPSJmbGV4LXN0YXJ0IjoiY2VudGVyIj09PWQ/KF89ImNlbnRlciIscD9tPXU6aD11KTpwPyJsZWZ0Ij09PWR8fCJlbmQiPT09ZD8oXz0iZmxleC1lbmQiLGg9dSk6KCJyaWdodCI9PT1kfHwic3RhcnQiPT09ZCkmJihfPSJmbGV4LXN0YXJ0IixtPXUpOiJsZWZ0Ij09PWR8fCJzdGFydCI9PT1kPyhfPSJmbGV4LXN0YXJ0IixoPXUpOigicmlnaHQiPT09ZHx8ImVuZCI9PT1kKSYmKF89ImZsZXgtZW5kIixtPXUpLHQucG9zaXRpb249dGhpcy5fY3NzUG9zaXRpb24sdC5tYXJnaW5MZWZ0PWw/IjAiOmgsdC5tYXJnaW5Ub3A9Yz8iMCI6dGhpcy5fdG9wT2Zmc2V0LHQubWFyZ2luQm90dG9tPXRoaXMuX2JvdHRvbU9mZnNldCx0Lm1hcmdpblJpZ2h0PWw/IjAiOm0sZS5qdXN0aWZ5Q29udGVudD1fLGUuYWxpZ25JdGVtcz1jPyJmbGV4LXN0YXJ0Ijp0aGlzLl9hbGlnbkl0ZW1zfWRpc3Bvc2UoKXtpZih0aGlzLl9pc0Rpc3Bvc2VkfHwhdGhpcy5fb3ZlcmxheVJlZilyZXR1cm47bGV0IHQ9dGhpcy5fb3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudC5zdHlsZSxlPXRoaXMuX292ZXJsYXlSZWYuaG9zdEVsZW1lbnQsaT1lLnN0eWxlO2UuY2xhc3NMaXN0LnJlbW92ZShuOSksaS5qdXN0aWZ5Q29udGVudD1pLmFsaWduSXRlbXM9dC5tYXJnaW5Ub3A9dC5tYXJnaW5Cb3R0b209dC5tYXJnaW5MZWZ0PXQubWFyZ2luUmlnaHQ9dC5wb3NpdGlvbj0iIix0aGlzLl9vdmVybGF5UmVmPW51bGwsdGhpcy5faXNEaXNwb3NlZD0hMH19fWZsZXhpYmxlQ29ubmVjdGVkVG8oZSl7cmV0dXJuIG5ldyBjbGFzc3tnZXQgcG9zaXRpb25zKCl7cmV0dXJuIHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9uc31jb25zdHJ1Y3Rvcih0LGUsaSxyLG8pe3RoaXMuX3ZpZXdwb3J0UnVsZXI9ZSx0aGlzLl9kb2N1bWVudD1pLHRoaXMuX3BsYXRmb3JtPXIsdGhpcy5fb3ZlcmxheUNvbnRhaW5lcj1vLHRoaXMuX2xhc3RCb3VuZGluZ0JveFNpemU9e3dpZHRoOjAsaGVpZ2h0OjB9LHRoaXMuX2lzUHVzaGVkPSExLHRoaXMuX2NhblB1c2g9ITAsdGhpcy5fZ3Jvd0FmdGVyT3Blbj0hMSx0aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnM9ITAsdGhpcy5fcG9zaXRpb25Mb2NrZWQ9ITEsdGhpcy5fdmlld3BvcnRNYXJnaW49MCx0aGlzLl9zY3JvbGxhYmxlcz1bXSx0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnM9W10sdGhpcy5fcG9zaXRpb25DaGFuZ2VzPW5ldyBFZSx0aGlzLl9yZXNpemVTdWJzY3JpcHRpb249RW4uRU1QVFksdGhpcy5fb2Zmc2V0WD0wLHRoaXMuX29mZnNldFk9MCx0aGlzLl9hcHBsaWVkUGFuZWxDbGFzc2VzPVtdLHRoaXMucG9zaXRpb25DaGFuZ2VzPXRoaXMuX3Bvc2l0aW9uQ2hhbmdlcyx0aGlzLnNldE9yaWdpbih0KX1hdHRhY2godCl7dGhpcy5fdmFsaWRhdGVQb3NpdGlvbnMoKSx0Lmhvc3RFbGVtZW50LmNsYXNzTGlzdC5hZGQoJDcpLHRoaXMuX292ZXJsYXlSZWY9dCx0aGlzLl9ib3VuZGluZ0JveD10Lmhvc3RFbGVtZW50LHRoaXMuX3BhbmU9dC5vdmVybGF5RWxlbWVudCx0aGlzLl9pc0Rpc3Bvc2VkPSExLHRoaXMuX2lzSW5pdGlhbFJlbmRlcj0hMCx0aGlzLl9sYXN0UG9zaXRpb249bnVsbCx0aGlzLl9yZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9yZXNpemVTdWJzY3JpcHRpb249dGhpcy5fdmlld3BvcnRSdWxlci5jaGFuZ2UoKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9pc0luaXRpYWxSZW5kZXI9ITAsdGhpcy5hcHBseSgpfSl9YXBwbHkoKXtpZih0aGlzLl9pc0Rpc3Bvc2VkfHwhdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXJldHVybjtpZighdGhpcy5faXNJbml0aWFsUmVuZGVyJiZ0aGlzLl9wb3NpdGlvbkxvY2tlZCYmdGhpcy5fbGFzdFBvc2l0aW9uKXJldHVybiB2b2lkIHRoaXMucmVhcHBseUxhc3RQb3NpdGlvbigpO3RoaXMuX2NsZWFyUGFuZWxDbGFzc2VzKCksdGhpcy5fcmVzZXRPdmVybGF5RWxlbWVudFN0eWxlcygpLHRoaXMuX3Jlc2V0Qm91bmRpbmdCb3hTdHlsZXMoKSx0aGlzLl92aWV3cG9ydFJlY3Q9dGhpcy5fZ2V0TmFycm93ZWRWaWV3cG9ydFJlY3QoKSx0aGlzLl9vcmlnaW5SZWN0PXRoaXMuX2dldE9yaWdpblJlY3QoKSx0aGlzLl9vdmVybGF5UmVjdD10aGlzLl9wYW5lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMuX2NvbnRhaW5lclJlY3Q9dGhpcy5fb3ZlcmxheUNvbnRhaW5lci5nZXRDb250YWluZXJFbGVtZW50KCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bGV0IGEsdD10aGlzLl9vcmlnaW5SZWN0LGU9dGhpcy5fb3ZlcmxheVJlY3QsaT10aGlzLl92aWV3cG9ydFJlY3Qscj10aGlzLl9jb250YWluZXJSZWN0LG89W107Zm9yKGxldCBzIG9mIHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucyl7bGV0IGw9dGhpcy5fZ2V0T3JpZ2luUG9pbnQodCxyLHMpLGM9dGhpcy5fZ2V0T3ZlcmxheVBvaW50KGwsZSxzKSxkPXRoaXMuX2dldE92ZXJsYXlGaXQoYyxlLGkscyk7aWYoZC5pc0NvbXBsZXRlbHlXaXRoaW5WaWV3cG9ydClyZXR1cm4gdGhpcy5faXNQdXNoZWQ9ITEsdm9pZCB0aGlzLl9hcHBseVBvc2l0aW9uKHMsbCk7dGhpcy5fY2FuRml0V2l0aEZsZXhpYmxlRGltZW5zaW9ucyhkLGMsaSk/by5wdXNoKHtwb3NpdGlvbjpzLG9yaWdpbjpsLG92ZXJsYXlSZWN0OmUsYm91bmRpbmdCb3hSZWN0OnRoaXMuX2NhbGN1bGF0ZUJvdW5kaW5nQm94UmVjdChsLHMpfSk6KCFhfHxhLm92ZXJsYXlGaXQudmlzaWJsZUFyZWE8ZC52aXNpYmxlQXJlYSkmJihhPXtvdmVybGF5Rml0OmQsb3ZlcmxheVBvaW50OmMsb3JpZ2luUG9pbnQ6bCxwb3NpdGlvbjpzLG92ZXJsYXlSZWN0OmV9KX1pZihvLmxlbmd0aCl7bGV0IHM9bnVsbCxsPS0xO2ZvcihsZXQgYyBvZiBvKXtsZXQgZD1jLmJvdW5kaW5nQm94UmVjdC53aWR0aCpjLmJvdW5kaW5nQm94UmVjdC5oZWlnaHQqKGMucG9zaXRpb24ud2VpZ2h0fHwxKTtkPmwmJihsPWQscz1jKX1yZXR1cm4gdGhpcy5faXNQdXNoZWQ9ITEsdm9pZCB0aGlzLl9hcHBseVBvc2l0aW9uKHMucG9zaXRpb24scy5vcmlnaW4pfWlmKHRoaXMuX2NhblB1c2gpcmV0dXJuIHRoaXMuX2lzUHVzaGVkPSEwLHZvaWQgdGhpcy5fYXBwbHlQb3NpdGlvbihhLnBvc2l0aW9uLGEub3JpZ2luUG9pbnQpO3RoaXMuX2FwcGx5UG9zaXRpb24oYS5wb3NpdGlvbixhLm9yaWdpblBvaW50KX1kZXRhY2goKXt0aGlzLl9jbGVhclBhbmVsQ2xhc3NlcygpLHRoaXMuX2xhc3RQb3NpdGlvbj1udWxsLHRoaXMuX3ByZXZpb3VzUHVzaEFtb3VudD1udWxsLHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfWRpc3Bvc2UoKXt0aGlzLl9pc0Rpc3Bvc2VkfHwodGhpcy5fYm91bmRpbmdCb3gmJkRoKHRoaXMuX2JvdW5kaW5nQm94LnN0eWxlLHt0b3A6IiIsbGVmdDoiIixyaWdodDoiIixib3R0b206IiIsaGVpZ2h0OiIiLHdpZHRoOiIiLGFsaWduSXRlbXM6IiIsanVzdGlmeUNvbnRlbnQ6IiJ9KSx0aGlzLl9wYW5lJiZ0aGlzLl9yZXNldE92ZXJsYXlFbGVtZW50U3R5bGVzKCksdGhpcy5fb3ZlcmxheVJlZiYmdGhpcy5fb3ZlcmxheVJlZi5ob3N0RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCQ3KSx0aGlzLmRldGFjaCgpLHRoaXMuX3Bvc2l0aW9uQ2hhbmdlcy5jb21wbGV0ZSgpLHRoaXMuX292ZXJsYXlSZWY9dGhpcy5fYm91bmRpbmdCb3g9bnVsbCx0aGlzLl9pc0Rpc3Bvc2VkPSEwKX1yZWFwcGx5TGFzdFBvc2l0aW9uKCl7aWYodGhpcy5faXNEaXNwb3NlZHx8IXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm47bGV0IHQ9dGhpcy5fbGFzdFBvc2l0aW9uO2lmKHQpe3RoaXMuX29yaWdpblJlY3Q9dGhpcy5fZ2V0T3JpZ2luUmVjdCgpLHRoaXMuX292ZXJsYXlSZWN0PXRoaXMuX3BhbmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5fdmlld3BvcnRSZWN0PXRoaXMuX2dldE5hcnJvd2VkVmlld3BvcnRSZWN0KCksdGhpcy5fY29udGFpbmVyUmVjdD10aGlzLl9vdmVybGF5Q29udGFpbmVyLmdldENvbnRhaW5lckVsZW1lbnQoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsZXQgZT10aGlzLl9nZXRPcmlnaW5Qb2ludCh0aGlzLl9vcmlnaW5SZWN0LHRoaXMuX2NvbnRhaW5lclJlY3QsdCk7dGhpcy5fYXBwbHlQb3NpdGlvbih0LGUpfWVsc2UgdGhpcy5hcHBseSgpfXdpdGhTY3JvbGxhYmxlQ29udGFpbmVycyh0KXtyZXR1cm4gdGhpcy5fc2Nyb2xsYWJsZXM9dCx0aGlzfXdpdGhQb3NpdGlvbnModCl7cmV0dXJuIHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucz10LC0xPT09dC5pbmRleE9mKHRoaXMuX2xhc3RQb3NpdGlvbikmJih0aGlzLl9sYXN0UG9zaXRpb249bnVsbCksdGhpcy5fdmFsaWRhdGVQb3NpdGlvbnMoKSx0aGlzfXdpdGhWaWV3cG9ydE1hcmdpbih0KXtyZXR1cm4gdGhpcy5fdmlld3BvcnRNYXJnaW49dCx0aGlzfXdpdGhGbGV4aWJsZURpbWVuc2lvbnModD0hMCl7cmV0dXJuIHRoaXMuX2hhc0ZsZXhpYmxlRGltZW5zaW9ucz10LHRoaXN9d2l0aEdyb3dBZnRlck9wZW4odD0hMCl7cmV0dXJuIHRoaXMuX2dyb3dBZnRlck9wZW49dCx0aGlzfXdpdGhQdXNoKHQ9ITApe3JldHVybiB0aGlzLl9jYW5QdXNoPXQsdGhpc313aXRoTG9ja2VkUG9zaXRpb24odD0hMCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9uTG9ja2VkPXQsdGhpc31zZXRPcmlnaW4odCl7cmV0dXJuIHRoaXMuX29yaWdpbj10LHRoaXN9d2l0aERlZmF1bHRPZmZzZXRYKHQpe3JldHVybiB0aGlzLl9vZmZzZXRYPXQsdGhpc313aXRoRGVmYXVsdE9mZnNldFkodCl7cmV0dXJuIHRoaXMuX29mZnNldFk9dCx0aGlzfXdpdGhUcmFuc2Zvcm1PcmlnaW5Pbih0KXtyZXR1cm4gdGhpcy5fdHJhbnNmb3JtT3JpZ2luU2VsZWN0b3I9dCx0aGlzfV9nZXRPcmlnaW5Qb2ludCh0LGUsaSl7bGV0IHIsbztpZigiY2VudGVyIj09aS5vcmlnaW5YKXI9dC5sZWZ0K3Qud2lkdGgvMjtlbHNle2xldCBhPXRoaXMuX2lzUnRsKCk/dC5yaWdodDp0LmxlZnQscz10aGlzLl9pc1J0bCgpP3QubGVmdDp0LnJpZ2h0O3I9InN0YXJ0Ij09aS5vcmlnaW5YP2E6c31yZXR1cm4gZS5sZWZ0PDAmJihyLT1lLmxlZnQpLG89ImNlbnRlciI9PWkub3JpZ2luWT90LnRvcCt0LmhlaWdodC8yOiJ0b3AiPT1pLm9yaWdpblk/dC50b3A6dC5ib3R0b20sZS50b3A8MCYmKG8tPWUudG9wKSx7eDpyLHk6b319X2dldE92ZXJsYXlQb2ludCh0LGUsaSl7bGV0IHIsbztyZXR1cm4gcj0iY2VudGVyIj09aS5vdmVybGF5WD8tZS53aWR0aC8yOiJzdGFydCI9PT1pLm92ZXJsYXlYP3RoaXMuX2lzUnRsKCk/LWUud2lkdGg6MDp0aGlzLl9pc1J0bCgpPzA6LWUud2lkdGgsbz0iY2VudGVyIj09aS5vdmVybGF5WT8tZS5oZWlnaHQvMjoidG9wIj09aS5vdmVybGF5WT8wOi1lLmhlaWdodCx7eDp0Lngrcix5OnQueStvfX1fZ2V0T3ZlcmxheUZpdCh0LGUsaSxyKXtsZXQgbz10OShlKSx7eDphLHk6c309dCxsPXRoaXMuX2dldE9mZnNldChyLCJ4IiksYz10aGlzLl9nZXRPZmZzZXQociwieSIpO2wmJihhKz1sKSxjJiYocys9Yyk7bGV0IHA9MC1zLGg9cytvLmhlaWdodC1pLmhlaWdodCxtPXRoaXMuX3N1YnRyYWN0T3ZlcmZsb3dzKG8ud2lkdGgsMC1hLGErby53aWR0aC1pLndpZHRoKSxfPXRoaXMuX3N1YnRyYWN0T3ZlcmZsb3dzKG8uaGVpZ2h0LHAsaCksTT1tKl87cmV0dXJue3Zpc2libGVBcmVhOk0saXNDb21wbGV0ZWx5V2l0aGluVmlld3BvcnQ6by53aWR0aCpvLmhlaWdodD09PU0sZml0c0luVmlld3BvcnRWZXJ0aWNhbGx5Ol89PT1vLmhlaWdodCxmaXRzSW5WaWV3cG9ydEhvcml6b250YWxseTptPT1vLndpZHRofX1fY2FuRml0V2l0aEZsZXhpYmxlRGltZW5zaW9ucyh0LGUsaSl7aWYodGhpcy5faGFzRmxleGlibGVEaW1lbnNpb25zKXtsZXQgcj1pLmJvdHRvbS1lLnksbz1pLnJpZ2h0LWUueCxhPWU5KHRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkubWluSGVpZ2h0KSxzPWU5KHRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkubWluV2lkdGgpO3JldHVybih0LmZpdHNJblZpZXdwb3J0VmVydGljYWxseXx8bnVsbCE9YSYmYTw9cikmJih0LmZpdHNJblZpZXdwb3J0SG9yaXpvbnRhbGx5fHxudWxsIT1zJiZzPD1vKX1yZXR1cm4hMX1fcHVzaE92ZXJsYXlPblNjcmVlbih0LGUsaSl7aWYodGhpcy5fcHJldmlvdXNQdXNoQW1vdW50JiZ0aGlzLl9wb3NpdGlvbkxvY2tlZClyZXR1cm57eDp0LngrdGhpcy5fcHJldmlvdXNQdXNoQW1vdW50LngseTp0LnkrdGhpcy5fcHJldmlvdXNQdXNoQW1vdW50Lnl9O2xldCByPXQ5KGUpLG89dGhpcy5fdmlld3BvcnRSZWN0LGE9TWF0aC5tYXgodC54K3Iud2lkdGgtby53aWR0aCwwKSxzPU1hdGgubWF4KHQueStyLmhlaWdodC1vLmhlaWdodCwwKSxsPU1hdGgubWF4KG8udG9wLWkudG9wLXQueSwwKSxjPU1hdGgubWF4KG8ubGVmdC1pLmxlZnQtdC54LDApLGQ9MCx1PTA7cmV0dXJuIGQ9ci53aWR0aDw9by53aWR0aD9jfHwtYTp0Lng8dGhpcy5fdmlld3BvcnRNYXJnaW4/by5sZWZ0LWkubGVmdC10Lng6MCx1PXIuaGVpZ2h0PD1vLmhlaWdodD9sfHwtczp0Lnk8dGhpcy5fdmlld3BvcnRNYXJnaW4/by50b3AtaS50b3AtdC55OjAsdGhpcy5fcHJldmlvdXNQdXNoQW1vdW50PXt4OmQseTp1fSx7eDp0LngrZCx5OnQueSt1fX1fYXBwbHlQb3NpdGlvbih0LGUpe2lmKHRoaXMuX3NldFRyYW5zZm9ybU9yaWdpbih0KSx0aGlzLl9zZXRPdmVybGF5RWxlbWVudFN0eWxlcyhlLHQpLHRoaXMuX3NldEJvdW5kaW5nQm94U3R5bGVzKGUsdCksdC5wYW5lbENsYXNzJiZ0aGlzLl9hZGRQYW5lbENsYXNzZXModC5wYW5lbENsYXNzKSx0aGlzLl9sYXN0UG9zaXRpb249dCx0aGlzLl9wb3NpdGlvbkNoYW5nZXMub2JzZXJ2ZXJzLmxlbmd0aCl7bGV0IGk9dGhpcy5fZ2V0U2Nyb2xsVmlzaWJpbGl0eSgpLHI9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5jb25uZWN0aW9uUGFpcj10LHRoaXMuc2Nyb2xsYWJsZVZpZXdQcm9wZXJ0aWVzPWV9fSh0LGkpO3RoaXMuX3Bvc2l0aW9uQ2hhbmdlcy5uZXh0KHIpfXRoaXMuX2lzSW5pdGlhbFJlbmRlcj0hMX1fc2V0VHJhbnNmb3JtT3JpZ2luKHQpe2lmKCF0aGlzLl90cmFuc2Zvcm1PcmlnaW5TZWxlY3RvcilyZXR1cm47bGV0IGksZT10aGlzLl9ib3VuZGluZ0JveC5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuX3RyYW5zZm9ybU9yaWdpblNlbGVjdG9yKSxyPXQub3ZlcmxheVk7aT0iY2VudGVyIj09PXQub3ZlcmxheVg/ImNlbnRlciI6dGhpcy5faXNSdGwoKT8ic3RhcnQiPT09dC5vdmVybGF5WD8icmlnaHQiOiJsZWZ0Ijoic3RhcnQiPT09dC5vdmVybGF5WD8ibGVmdCI6InJpZ2h0Ijtmb3IobGV0IG89MDtvPGUubGVuZ3RoO28rKyllW29dLnN0eWxlLnRyYW5zZm9ybU9yaWdpbj1gJHtpfSAke3J9YH1fY2FsY3VsYXRlQm91bmRpbmdCb3hSZWN0KHQsZSl7bGV0IG8sYSxzLGQsdSxwLGk9dGhpcy5fdmlld3BvcnRSZWN0LHI9dGhpcy5faXNSdGwoKTtpZigidG9wIj09PWUub3ZlcmxheVkpYT10Lnksbz1pLmhlaWdodC1hK3RoaXMuX3ZpZXdwb3J0TWFyZ2luO2Vsc2UgaWYoImJvdHRvbSI9PT1lLm92ZXJsYXlZKXM9aS5oZWlnaHQtdC55KzIqdGhpcy5fdmlld3BvcnRNYXJnaW4sbz1pLmhlaWdodC1zK3RoaXMuX3ZpZXdwb3J0TWFyZ2luO2Vsc2V7bGV0IGg9TWF0aC5taW4oaS5ib3R0b20tdC55K2kudG9wLHQueSksbT10aGlzLl9sYXN0Qm91bmRpbmdCb3hTaXplLmhlaWdodDtvPTIqaCxhPXQueS1oLG8+bSYmIXRoaXMuX2lzSW5pdGlhbFJlbmRlciYmIXRoaXMuX2dyb3dBZnRlck9wZW4mJihhPXQueS1tLzIpfWlmKCJlbmQiPT09ZS5vdmVybGF5WCYmIXJ8fCJzdGFydCI9PT1lLm92ZXJsYXlYJiZyKXA9aS53aWR0aC10LngrdGhpcy5fdmlld3BvcnRNYXJnaW4sZD10LngtdGhpcy5fdmlld3BvcnRNYXJnaW47ZWxzZSBpZigic3RhcnQiPT09ZS5vdmVybGF5WCYmIXJ8fCJlbmQiPT09ZS5vdmVybGF5WCYmcil1PXQueCxkPWkucmlnaHQtdC54O2Vsc2V7bGV0IGg9TWF0aC5taW4oaS5yaWdodC10LngraS5sZWZ0LHQueCksbT10aGlzLl9sYXN0Qm91bmRpbmdCb3hTaXplLndpZHRoO2Q9MipoLHU9dC54LWgsZD5tJiYhdGhpcy5faXNJbml0aWFsUmVuZGVyJiYhdGhpcy5fZ3Jvd0FmdGVyT3BlbiYmKHU9dC54LW0vMil9cmV0dXJue3RvcDphLGxlZnQ6dSxib3R0b206cyxyaWdodDpwLHdpZHRoOmQsaGVpZ2h0Om99fV9zZXRCb3VuZGluZ0JveFN0eWxlcyh0LGUpe2xldCBpPXRoaXMuX2NhbGN1bGF0ZUJvdW5kaW5nQm94UmVjdCh0LGUpOyF0aGlzLl9pc0luaXRpYWxSZW5kZXImJiF0aGlzLl9ncm93QWZ0ZXJPcGVuJiYoaS5oZWlnaHQ9TWF0aC5taW4oaS5oZWlnaHQsdGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS5oZWlnaHQpLGkud2lkdGg9TWF0aC5taW4oaS53aWR0aCx0aGlzLl9sYXN0Qm91bmRpbmdCb3hTaXplLndpZHRoKSk7bGV0IHI9e307aWYodGhpcy5faGFzRXhhY3RQb3NpdGlvbigpKXIudG9wPXIubGVmdD0iMCIsci5ib3R0b209ci5yaWdodD1yLm1heEhlaWdodD1yLm1heFdpZHRoPSIiLHIud2lkdGg9ci5oZWlnaHQ9IjEwMCUiO2Vsc2V7bGV0IG89dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5tYXhIZWlnaHQsYT10aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLm1heFdpZHRoO3IuaGVpZ2h0PXFyKGkuaGVpZ2h0KSxyLnRvcD1xcihpLnRvcCksci5ib3R0b209cXIoaS5ib3R0b20pLHIud2lkdGg9cXIoaS53aWR0aCksci5sZWZ0PXFyKGkubGVmdCksci5yaWdodD1xcihpLnJpZ2h0KSxyLmFsaWduSXRlbXM9ImNlbnRlciI9PT1lLm92ZXJsYXlYPyJjZW50ZXIiOiJlbmQiPT09ZS5vdmVybGF5WD8iZmxleC1lbmQiOiJmbGV4LXN0YXJ0IixyLmp1c3RpZnlDb250ZW50PSJjZW50ZXIiPT09ZS5vdmVybGF5WT8iY2VudGVyIjoiYm90dG9tIj09PWUub3ZlcmxheVk/ImZsZXgtZW5kIjoiZmxleC1zdGFydCIsbyYmKHIubWF4SGVpZ2h0PXFyKG8pKSxhJiYoci5tYXhXaWR0aD1xcihhKSl9dGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZT1pLERoKHRoaXMuX2JvdW5kaW5nQm94LnN0eWxlLHIpfV9yZXNldEJvdW5kaW5nQm94U3R5bGVzKCl7RGgodGhpcy5fYm91bmRpbmdCb3guc3R5bGUse3RvcDoiMCIsbGVmdDoiMCIscmlnaHQ6IjAiLGJvdHRvbToiMCIsaGVpZ2h0OiIiLHdpZHRoOiIiLGFsaWduSXRlbXM6IiIsanVzdGlmeUNvbnRlbnQ6IiJ9KX1fcmVzZXRPdmVybGF5RWxlbWVudFN0eWxlcygpe0RoKHRoaXMuX3BhbmUuc3R5bGUse3RvcDoiIixsZWZ0OiIiLGJvdHRvbToiIixyaWdodDoiIixwb3NpdGlvbjoiIix0cmFuc2Zvcm06IiJ9KX1fc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXModCxlKXtsZXQgaT17fSxyPXRoaXMuX2hhc0V4YWN0UG9zaXRpb24oKSxvPXRoaXMuX2hhc0ZsZXhpYmxlRGltZW5zaW9ucyxhPXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCk7aWYocil7bGV0IGQ9dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCk7RGgoaSx0aGlzLl9nZXRFeGFjdE92ZXJsYXlZKGUsdCxkKSksRGgoaSx0aGlzLl9nZXRFeGFjdE92ZXJsYXlYKGUsdCxkKSl9ZWxzZSBpLnBvc2l0aW9uPSJzdGF0aWMiO2xldCBzPSIiLGw9dGhpcy5fZ2V0T2Zmc2V0KGUsIngiKSxjPXRoaXMuX2dldE9mZnNldChlLCJ5Iik7bCYmKHMrPWB0cmFuc2xhdGVYKCR7bH1weCkgYCksYyYmKHMrPWB0cmFuc2xhdGVZKCR7Y31weClgKSxpLnRyYW5zZm9ybT1zLnRyaW0oKSxhLm1heEhlaWdodCYmKHI/aS5tYXhIZWlnaHQ9cXIoYS5tYXhIZWlnaHQpOm8mJihpLm1heEhlaWdodD0iIikpLGEubWF4V2lkdGgmJihyP2kubWF4V2lkdGg9cXIoYS5tYXhXaWR0aCk6byYmKGkubWF4V2lkdGg9IiIpKSxEaCh0aGlzLl9wYW5lLnN0eWxlLGkpfV9nZXRFeGFjdE92ZXJsYXlZKHQsZSxpKXtsZXQgcj17dG9wOiIiLGJvdHRvbToiIn0sbz10aGlzLl9nZXRPdmVybGF5UG9pbnQoZSx0aGlzLl9vdmVybGF5UmVjdCx0KTtyZXR1cm4gdGhpcy5faXNQdXNoZWQmJihvPXRoaXMuX3B1c2hPdmVybGF5T25TY3JlZW4obyx0aGlzLl9vdmVybGF5UmVjdCxpKSksImJvdHRvbSI9PT10Lm92ZXJsYXlZP3IuYm90dG9tPXRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQtKG8ueSt0aGlzLl9vdmVybGF5UmVjdC5oZWlnaHQpKyJweCI6ci50b3A9cXIoby55KSxyfV9nZXRFeGFjdE92ZXJsYXlYKHQsZSxpKXtsZXQgYSxyPXtsZWZ0OiIiLHJpZ2h0OiIifSxvPXRoaXMuX2dldE92ZXJsYXlQb2ludChlLHRoaXMuX292ZXJsYXlSZWN0LHQpO3JldHVybiB0aGlzLl9pc1B1c2hlZCYmKG89dGhpcy5fcHVzaE92ZXJsYXlPblNjcmVlbihvLHRoaXMuX292ZXJsYXlSZWN0LGkpKSxhPXRoaXMuX2lzUnRsKCk/ImVuZCI9PT10Lm92ZXJsYXlYPyJsZWZ0IjoicmlnaHQiOiJlbmQiPT09dC5vdmVybGF5WD8icmlnaHQiOiJsZWZ0IiwicmlnaHQiPT09YT9yLnJpZ2h0PXRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aC0oby54K3RoaXMuX292ZXJsYXlSZWN0LndpZHRoKSsicHgiOnIubGVmdD1xcihvLngpLHJ9X2dldFNjcm9sbFZpc2liaWxpdHkoKXtsZXQgdD10aGlzLl9nZXRPcmlnaW5SZWN0KCksZT10aGlzLl9wYW5lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9dGhpcy5fc2Nyb2xsYWJsZXMubWFwKHI9PnIuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO3JldHVybntpc09yaWdpbkNsaXBwZWQ6SjcodCxpKSxpc09yaWdpbk91dHNpZGVWaWV3OkUyKHQsaSksaXNPdmVybGF5Q2xpcHBlZDpKNyhlLGkpLGlzT3ZlcmxheU91dHNpZGVWaWV3OkUyKGUsaSl9fV9zdWJ0cmFjdE92ZXJmbG93cyh0LC4uLmUpe3JldHVybiBlLnJlZHVjZSgoaSxyKT0+aS1NYXRoLm1heChyLDApLHQpfV9nZXROYXJyb3dlZFZpZXdwb3J0UmVjdCgpe2xldCB0PXRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCxlPXRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsaT10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKTtyZXR1cm57dG9wOmkudG9wK3RoaXMuX3ZpZXdwb3J0TWFyZ2luLGxlZnQ6aS5sZWZ0K3RoaXMuX3ZpZXdwb3J0TWFyZ2luLHJpZ2h0OmkubGVmdCt0LXRoaXMuX3ZpZXdwb3J0TWFyZ2luLGJvdHRvbTppLnRvcCtlLXRoaXMuX3ZpZXdwb3J0TWFyZ2luLHdpZHRoOnQtMip0aGlzLl92aWV3cG9ydE1hcmdpbixoZWlnaHQ6ZS0yKnRoaXMuX3ZpZXdwb3J0TWFyZ2lufX1faXNSdGwoKXtyZXR1cm4icnRsIj09PXRoaXMuX292ZXJsYXlSZWYuZ2V0RGlyZWN0aW9uKCl9X2hhc0V4YWN0UG9zaXRpb24oKXtyZXR1cm4hdGhpcy5faGFzRmxleGlibGVEaW1lbnNpb25zfHx0aGlzLl9pc1B1c2hlZH1fZ2V0T2Zmc2V0KHQsZSl7cmV0dXJuIngiPT09ZT9udWxsPT10Lm9mZnNldFg/dGhpcy5fb2Zmc2V0WDp0Lm9mZnNldFg6bnVsbD09dC5vZmZzZXRZP3RoaXMuX29mZnNldFk6dC5vZmZzZXRZfV92YWxpZGF0ZVBvc2l0aW9ucygpe31fYWRkUGFuZWxDbGFzc2VzKHQpe3RoaXMuX3BhbmUmJnJnKHQpLmZvckVhY2goZT0+eyIiIT09ZSYmLTE9PT10aGlzLl9hcHBsaWVkUGFuZWxDbGFzc2VzLmluZGV4T2YoZSkmJih0aGlzLl9hcHBsaWVkUGFuZWxDbGFzc2VzLnB1c2goZSksdGhpcy5fcGFuZS5jbGFzc0xpc3QuYWRkKGUpKX0pfV9jbGVhclBhbmVsQ2xhc3Nlcygpe3RoaXMuX3BhbmUmJih0aGlzLl9hcHBsaWVkUGFuZWxDbGFzc2VzLmZvckVhY2godD0+e3RoaXMuX3BhbmUuY2xhc3NMaXN0LnJlbW92ZSh0KX0pLHRoaXMuX2FwcGxpZWRQYW5lbENsYXNzZXM9W10pfV9nZXRPcmlnaW5SZWN0KCl7bGV0IHQ9dGhpcy5fb3JpZ2luO2lmKHQgaW5zdGFuY2VvZiB4ZSlyZXR1cm4gdC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKHQgaW5zdGFuY2VvZiBFbGVtZW50KXJldHVybiB0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCBlPXQud2lkdGh8fDAsaT10LmhlaWdodHx8MDtyZXR1cm57dG9wOnQueSxib3R0b206dC55K2ksbGVmdDp0LngscmlnaHQ6dC54K2UsaGVpZ2h0Omksd2lkdGg6ZX19fShlLHRoaXMuX3ZpZXdwb3J0UnVsZXIsdGhpcy5fZG9jdW1lbnQsdGhpcy5fcGxhdGZvcm0sdGhpcy5fb3ZlcmxheUNvbnRhaW5lcil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oV2EpLE8oTnQpLE8oVm4pLE8oX2cpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxsYmU9MCxPaT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8sYSxzLGwsYyxkLHUscCxoKXt0aGlzLnNjcm9sbFN0cmF0ZWdpZXM9ZSx0aGlzLl9vdmVybGF5Q29udGFpbmVyPWksdGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPXIsdGhpcy5fcG9zaXRpb25CdWlsZGVyPW8sdGhpcy5fa2V5Ym9hcmREaXNwYXRjaGVyPWEsdGhpcy5faW5qZWN0b3I9cyx0aGlzLl9uZ1pvbmU9bCx0aGlzLl9kb2N1bWVudD1jLHRoaXMuX2RpcmVjdGlvbmFsaXR5PWQsdGhpcy5fbG9jYXRpb249dSx0aGlzLl9vdXRzaWRlQ2xpY2tEaXNwYXRjaGVyPXAsdGhpcy5fYW5pbWF0aW9uc01vZHVsZVR5cGU9aH1jcmVhdGUoZSl7bGV0IGk9dGhpcy5fY3JlYXRlSG9zdEVsZW1lbnQoKSxyPXRoaXMuX2NyZWF0ZVBhbmVFbGVtZW50KGkpLG89dGhpcy5fY3JlYXRlUG9ydGFsT3V0bGV0KHIpLGE9bmV3IGVsKGUpO3JldHVybiBhLmRpcmVjdGlvbj1hLmRpcmVjdGlvbnx8dGhpcy5fZGlyZWN0aW9uYWxpdHkudmFsdWUsbmV3IEFjKG8saSxyLGEsdGhpcy5fbmdab25lLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlcix0aGlzLl9kb2N1bWVudCx0aGlzLl9sb2NhdGlvbix0aGlzLl9vdXRzaWRlQ2xpY2tEaXNwYXRjaGVyLCJOb29wQW5pbWF0aW9ucyI9PT10aGlzLl9hbmltYXRpb25zTW9kdWxlVHlwZSl9cG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb25CdWlsZGVyfV9jcmVhdGVQYW5lRWxlbWVudChlKXtsZXQgaT10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gaS5pZD0iY2RrLW92ZXJsYXktIitsYmUrKyxpLmNsYXNzTGlzdC5hZGQoImNkay1vdmVybGF5LXBhbmUiKSxlLmFwcGVuZENoaWxkKGkpLGl9X2NyZWF0ZUhvc3RFbGVtZW50KCl7bGV0IGU9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHRoaXMuX292ZXJsYXlDb250YWluZXIuZ2V0Q29udGFpbmVyRWxlbWVudCgpLmFwcGVuZENoaWxkKGUpLGV9X2NyZWF0ZVBvcnRhbE91dGxldChlKXtyZXR1cm4gdGhpcy5fYXBwUmVmfHwodGhpcy5fYXBwUmVmPXRoaXMuX2luamVjdG9yLmdldChnYykpLG5ldyBXdihlLHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcix0aGlzLl9hcHBSZWYsdGhpcy5faW5qZWN0b3IsdGhpcy5fZG9jdW1lbnQpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKGliZSksTyhfZyksTyhobyksTyhzYmUpLE8ocmJlKSxPKHdpKSxPKG90KSxPKE50KSxPKHppKSxPKERiKSxPKG9iZSksTyhwaSw4KSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksY2JlPVt7b3JpZ2luWDoic3RhcnQiLG9yaWdpblk6ImJvdHRvbSIsb3ZlcmxheVg6InN0YXJ0IixvdmVybGF5WToidG9wIn0se29yaWdpblg6InN0YXJ0IixvcmlnaW5ZOiJ0b3AiLG92ZXJsYXlYOiJzdGFydCIsb3ZlcmxheVk6ImJvdHRvbSJ9LHtvcmlnaW5YOiJlbmQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVg6ImVuZCIsb3ZlcmxheVk6ImJvdHRvbSJ9LHtvcmlnaW5YOiJlbmQiLG9yaWdpblk6ImJvdHRvbSIsb3ZlcmxheVg6ImVuZCIsb3ZlcmxheVk6InRvcCJ9XSxyOT1uZXcgdGUoImNkay1jb25uZWN0ZWQtb3ZlcmxheS1zY3JvbGwtc3RyYXRlZ3kiKSxNZD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuZWxlbWVudFJlZj1lfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKHhlKSl9LG4uXHUwMjc1ZGlyPU1lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNkay1vdmVybGF5LW9yaWdpbiIsIiJdLFsiIiwib3ZlcmxheS1vcmlnaW4iLCIiXSxbIiIsImNka092ZXJsYXlPcmlnaW4iLCIiXV0sZXhwb3J0QXM6WyJjZGtPdmVybGF5T3JpZ2luIl0sc3RhbmRhbG9uZTohMH0pLG59KSgpLFZ1PSgoKT0+e2NsYXNzIG57Z2V0IG9mZnNldFgoKXtyZXR1cm4gdGhpcy5fb2Zmc2V0WH1zZXQgb2Zmc2V0WChlKXt0aGlzLl9vZmZzZXRYPWUsdGhpcy5fcG9zaXRpb24mJnRoaXMuX3VwZGF0ZVBvc2l0aW9uU3RyYXRlZ3kodGhpcy5fcG9zaXRpb24pfWdldCBvZmZzZXRZKCl7cmV0dXJuIHRoaXMuX29mZnNldFl9c2V0IG9mZnNldFkoZSl7dGhpcy5fb2Zmc2V0WT1lLHRoaXMuX3Bvc2l0aW9uJiZ0aGlzLl91cGRhdGVQb3NpdGlvblN0cmF0ZWd5KHRoaXMuX3Bvc2l0aW9uKX1nZXQgaGFzQmFja2Ryb3AoKXtyZXR1cm4gdGhpcy5faGFzQmFja2Ryb3B9c2V0IGhhc0JhY2tkcm9wKGUpe3RoaXMuX2hhc0JhY2tkcm9wPXZ0KGUpfWdldCBsb2NrUG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fbG9ja1Bvc2l0aW9ufXNldCBsb2NrUG9zaXRpb24oZSl7dGhpcy5fbG9ja1Bvc2l0aW9uPXZ0KGUpfWdldCBmbGV4aWJsZURpbWVuc2lvbnMoKXtyZXR1cm4gdGhpcy5fZmxleGlibGVEaW1lbnNpb25zfXNldCBmbGV4aWJsZURpbWVuc2lvbnMoZSl7dGhpcy5fZmxleGlibGVEaW1lbnNpb25zPXZ0KGUpfWdldCBncm93QWZ0ZXJPcGVuKCl7cmV0dXJuIHRoaXMuX2dyb3dBZnRlck9wZW59c2V0IGdyb3dBZnRlck9wZW4oZSl7dGhpcy5fZ3Jvd0FmdGVyT3Blbj12dChlKX1nZXQgcHVzaCgpe3JldHVybiB0aGlzLl9wdXNofXNldCBwdXNoKGUpe3RoaXMuX3B1c2g9dnQoZSl9Y29uc3RydWN0b3IoZSxpLHIsbyxhKXt0aGlzLl9vdmVybGF5PWUsdGhpcy5fZGlyPWEsdGhpcy5faGFzQmFja2Ryb3A9ITEsdGhpcy5fbG9ja1Bvc2l0aW9uPSExLHRoaXMuX2dyb3dBZnRlck9wZW49ITEsdGhpcy5fZmxleGlibGVEaW1lbnNpb25zPSExLHRoaXMuX3B1c2g9ITEsdGhpcy5fYmFja2Ryb3BTdWJzY3JpcHRpb249RW4uRU1QVFksdGhpcy5fYXR0YWNoU3Vic2NyaXB0aW9uPUVuLkVNUFRZLHRoaXMuX2RldGFjaFN1YnNjcmlwdGlvbj1Fbi5FTVBUWSx0aGlzLl9wb3NpdGlvblN1YnNjcmlwdGlvbj1Fbi5FTVBUWSx0aGlzLnZpZXdwb3J0TWFyZ2luPTAsdGhpcy5vcGVuPSExLHRoaXMuZGlzYWJsZUNsb3NlPSExLHRoaXMuYmFja2Ryb3BDbGljaz1uZXcgRix0aGlzLnBvc2l0aW9uQ2hhbmdlPW5ldyBGLHRoaXMuYXR0YWNoPW5ldyBGLHRoaXMuZGV0YWNoPW5ldyBGLHRoaXMub3ZlcmxheUtleWRvd249bmV3IEYsdGhpcy5vdmVybGF5T3V0c2lkZUNsaWNrPW5ldyBGLHRoaXMuX3RlbXBsYXRlUG9ydGFsPW5ldyBUbyhpLHIpLHRoaXMuX3Njcm9sbFN0cmF0ZWd5RmFjdG9yeT1vLHRoaXMuc2Nyb2xsU3RyYXRlZ3k9dGhpcy5fc2Nyb2xsU3RyYXRlZ3lGYWN0b3J5KCl9Z2V0IG92ZXJsYXlSZWYoKXtyZXR1cm4gdGhpcy5fb3ZlcmxheVJlZn1nZXQgZGlyKCl7cmV0dXJuIHRoaXMuX2Rpcj90aGlzLl9kaXIudmFsdWU6Imx0ciJ9bmdPbkRlc3Ryb3koKXt0aGlzLl9hdHRhY2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9kZXRhY2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9iYWNrZHJvcFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Bvc2l0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fb3ZlcmxheVJlZiYmdGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKCl9bmdPbkNoYW5nZXMoZSl7dGhpcy5fcG9zaXRpb24mJih0aGlzLl91cGRhdGVQb3NpdGlvblN0cmF0ZWd5KHRoaXMuX3Bvc2l0aW9uKSx0aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVNpemUoe3dpZHRoOnRoaXMud2lkdGgsbWluV2lkdGg6dGhpcy5taW5XaWR0aCxoZWlnaHQ6dGhpcy5oZWlnaHQsbWluSGVpZ2h0OnRoaXMubWluSGVpZ2h0fSksZS5vcmlnaW4mJnRoaXMub3BlbiYmdGhpcy5fcG9zaXRpb24uYXBwbHkoKSksZS5vcGVuJiYodGhpcy5vcGVuP3RoaXMuX2F0dGFjaE92ZXJsYXkoKTp0aGlzLl9kZXRhY2hPdmVybGF5KCkpfV9jcmVhdGVPdmVybGF5KCl7KCF0aGlzLnBvc2l0aW9uc3x8IXRoaXMucG9zaXRpb25zLmxlbmd0aCkmJih0aGlzLnBvc2l0aW9ucz1jYmUpO2xldCBlPXRoaXMuX292ZXJsYXlSZWY9dGhpcy5fb3ZlcmxheS5jcmVhdGUodGhpcy5fYnVpbGRDb25maWcoKSk7dGhpcy5fYXR0YWNoU3Vic2NyaXB0aW9uPWUuYXR0YWNobWVudHMoKS5zdWJzY3JpYmUoKCk9PnRoaXMuYXR0YWNoLmVtaXQoKSksdGhpcy5fZGV0YWNoU3Vic2NyaXB0aW9uPWUuZGV0YWNobWVudHMoKS5zdWJzY3JpYmUoKCk9PnRoaXMuZGV0YWNoLmVtaXQoKSksZS5rZXlkb3duRXZlbnRzKCkuc3Vic2NyaWJlKGk9Pnt0aGlzLm92ZXJsYXlLZXlkb3duLm5leHQoaSksMjc9PT1pLmtleUNvZGUmJiF0aGlzLmRpc2FibGVDbG9zZSYmIU9yKGkpJiYoaS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2RldGFjaE92ZXJsYXkoKSl9KSx0aGlzLl9vdmVybGF5UmVmLm91dHNpZGVQb2ludGVyRXZlbnRzKCkuc3Vic2NyaWJlKGk9Pnt0aGlzLm92ZXJsYXlPdXRzaWRlQ2xpY2submV4dChpKX0pfV9idWlsZENvbmZpZygpe2xldCBlPXRoaXMuX3Bvc2l0aW9uPXRoaXMucG9zaXRpb25TdHJhdGVneXx8dGhpcy5fY3JlYXRlUG9zaXRpb25TdHJhdGVneSgpLGk9bmV3IGVsKHtkaXJlY3Rpb246dGhpcy5fZGlyLHBvc2l0aW9uU3RyYXRlZ3k6ZSxzY3JvbGxTdHJhdGVneTp0aGlzLnNjcm9sbFN0cmF0ZWd5LGhhc0JhY2tkcm9wOnRoaXMuaGFzQmFja2Ryb3B9KTtyZXR1cm4odGhpcy53aWR0aHx8MD09PXRoaXMud2lkdGgpJiYoaS53aWR0aD10aGlzLndpZHRoKSwodGhpcy5oZWlnaHR8fDA9PT10aGlzLmhlaWdodCkmJihpLmhlaWdodD10aGlzLmhlaWdodCksKHRoaXMubWluV2lkdGh8fDA9PT10aGlzLm1pbldpZHRoKSYmKGkubWluV2lkdGg9dGhpcy5taW5XaWR0aCksKHRoaXMubWluSGVpZ2h0fHwwPT09dGhpcy5taW5IZWlnaHQpJiYoaS5taW5IZWlnaHQ9dGhpcy5taW5IZWlnaHQpLHRoaXMuYmFja2Ryb3BDbGFzcyYmKGkuYmFja2Ryb3BDbGFzcz10aGlzLmJhY2tkcm9wQ2xhc3MpLHRoaXMucGFuZWxDbGFzcyYmKGkucGFuZWxDbGFzcz10aGlzLnBhbmVsQ2xhc3MpLGl9X3VwZGF0ZVBvc2l0aW9uU3RyYXRlZ3koZSl7bGV0IGk9dGhpcy5wb3NpdGlvbnMubWFwKHI9Pih7b3JpZ2luWDpyLm9yaWdpblgsb3JpZ2luWTpyLm9yaWdpblksb3ZlcmxheVg6ci5vdmVybGF5WCxvdmVybGF5WTpyLm92ZXJsYXlZLG9mZnNldFg6ci5vZmZzZXRYfHx0aGlzLm9mZnNldFgsb2Zmc2V0WTpyLm9mZnNldFl8fHRoaXMub2Zmc2V0WSxwYW5lbENsYXNzOnIucGFuZWxDbGFzc3x8dm9pZCAwfSkpO3JldHVybiBlLnNldE9yaWdpbih0aGlzLl9nZXRGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3lPcmlnaW4oKSkud2l0aFBvc2l0aW9ucyhpKS53aXRoRmxleGlibGVEaW1lbnNpb25zKHRoaXMuZmxleGlibGVEaW1lbnNpb25zKS53aXRoUHVzaCh0aGlzLnB1c2gpLndpdGhHcm93QWZ0ZXJPcGVuKHRoaXMuZ3Jvd0FmdGVyT3Blbikud2l0aFZpZXdwb3J0TWFyZ2luKHRoaXMudmlld3BvcnRNYXJnaW4pLndpdGhMb2NrZWRQb3NpdGlvbih0aGlzLmxvY2tQb3NpdGlvbikud2l0aFRyYW5zZm9ybU9yaWdpbk9uKHRoaXMudHJhbnNmb3JtT3JpZ2luU2VsZWN0b3IpfV9jcmVhdGVQb3NpdGlvblN0cmF0ZWd5KCl7bGV0IGU9dGhpcy5fb3ZlcmxheS5wb3NpdGlvbigpLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5fZ2V0RmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5T3JpZ2luKCkpO3JldHVybiB0aGlzLl91cGRhdGVQb3NpdGlvblN0cmF0ZWd5KGUpLGV9X2dldEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneU9yaWdpbigpe3JldHVybiB0aGlzLm9yaWdpbiBpbnN0YW5jZW9mIE1kP3RoaXMub3JpZ2luLmVsZW1lbnRSZWY6dGhpcy5vcmlnaW59X2F0dGFjaE92ZXJsYXkoKXt0aGlzLl9vdmVybGF5UmVmP3RoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkuaGFzQmFja2Ryb3A9dGhpcy5oYXNCYWNrZHJvcDp0aGlzLl9jcmVhdGVPdmVybGF5KCksdGhpcy5fb3ZlcmxheVJlZi5oYXNBdHRhY2hlZCgpfHx0aGlzLl9vdmVybGF5UmVmLmF0dGFjaCh0aGlzLl90ZW1wbGF0ZVBvcnRhbCksdGhpcy5oYXNCYWNrZHJvcD90aGlzLl9iYWNrZHJvcFN1YnNjcmlwdGlvbj10aGlzLl9vdmVybGF5UmVmLmJhY2tkcm9wQ2xpY2soKS5zdWJzY3JpYmUoZT0+e3RoaXMuYmFja2Ryb3BDbGljay5lbWl0KGUpfSk6dGhpcy5fYmFja2Ryb3BTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9wb3NpdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMucG9zaXRpb25DaGFuZ2Uub2JzZXJ2ZXJzLmxlbmd0aD4wJiYodGhpcy5fcG9zaXRpb25TdWJzY3JpcHRpb249dGhpcy5fcG9zaXRpb24ucG9zaXRpb25DaGFuZ2VzLnBpcGUoT18oKCk9PnRoaXMucG9zaXRpb25DaGFuZ2Uub2JzZXJ2ZXJzLmxlbmd0aD4wKSkuc3Vic2NyaWJlKGU9Pnt0aGlzLnBvc2l0aW9uQ2hhbmdlLmVtaXQoZSksMD09PXRoaXMucG9zaXRpb25DaGFuZ2Uub2JzZXJ2ZXJzLmxlbmd0aCYmdGhpcy5fcG9zaXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX0pKX1fZGV0YWNoT3ZlcmxheSgpe3RoaXMuX292ZXJsYXlSZWYmJnRoaXMuX292ZXJsYXlSZWYuZGV0YWNoKCksdGhpcy5fYmFja2Ryb3BTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9wb3NpdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKE9pKSxDKG9pKSxDKGVpKSxDKHI5KSxDKHppLDgpKX0sbi5cdTAyNzVkaXI9TWUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2RrLWNvbm5lY3RlZC1vdmVybGF5IiwiIl0sWyIiLCJjb25uZWN0ZWQtb3ZlcmxheSIsIiJdLFsiIiwiY2RrQ29ubmVjdGVkT3ZlcmxheSIsIiJdXSxpbnB1dHM6e29yaWdpbjpbImNka0Nvbm5lY3RlZE92ZXJsYXlPcmlnaW4iLCJvcmlnaW4iXSxwb3NpdGlvbnM6WyJjZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25zIiwicG9zaXRpb25zIl0scG9zaXRpb25TdHJhdGVneTpbImNka0Nvbm5lY3RlZE92ZXJsYXlQb3NpdGlvblN0cmF0ZWd5IiwicG9zaXRpb25TdHJhdGVneSJdLG9mZnNldFg6WyJjZGtDb25uZWN0ZWRPdmVybGF5T2Zmc2V0WCIsIm9mZnNldFgiXSxvZmZzZXRZOlsiY2RrQ29ubmVjdGVkT3ZlcmxheU9mZnNldFkiLCJvZmZzZXRZIl0sd2lkdGg6WyJjZGtDb25uZWN0ZWRPdmVybGF5V2lkdGgiLCJ3aWR0aCJdLGhlaWdodDpbImNka0Nvbm5lY3RlZE92ZXJsYXlIZWlnaHQiLCJoZWlnaHQiXSxtaW5XaWR0aDpbImNka0Nvbm5lY3RlZE92ZXJsYXlNaW5XaWR0aCIsIm1pbldpZHRoIl0sbWluSGVpZ2h0OlsiY2RrQ29ubmVjdGVkT3ZlcmxheU1pbkhlaWdodCIsIm1pbkhlaWdodCJdLGJhY2tkcm9wQ2xhc3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5QmFja2Ryb3BDbGFzcyIsImJhY2tkcm9wQ2xhc3MiXSxwYW5lbENsYXNzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheVBhbmVsQ2xhc3MiLCJwYW5lbENsYXNzIl0sdmlld3BvcnRNYXJnaW46WyJjZGtDb25uZWN0ZWRPdmVybGF5Vmlld3BvcnRNYXJnaW4iLCJ2aWV3cG9ydE1hcmdpbiJdLHNjcm9sbFN0cmF0ZWd5OlsiY2RrQ29ubmVjdGVkT3ZlcmxheVNjcm9sbFN0cmF0ZWd5Iiwic2Nyb2xsU3RyYXRlZ3kiXSxvcGVuOlsiY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW4iLCJvcGVuIl0sZGlzYWJsZUNsb3NlOlsiY2RrQ29ubmVjdGVkT3ZlcmxheURpc2FibGVDbG9zZSIsImRpc2FibGVDbG9zZSJdLHRyYW5zZm9ybU9yaWdpblNlbGVjdG9yOlsiY2RrQ29ubmVjdGVkT3ZlcmxheVRyYW5zZm9ybU9yaWdpbk9uIiwidHJhbnNmb3JtT3JpZ2luU2VsZWN0b3IiXSxoYXNCYWNrZHJvcDpbImNka0Nvbm5lY3RlZE92ZXJsYXlIYXNCYWNrZHJvcCIsImhhc0JhY2tkcm9wIl0sbG9ja1Bvc2l0aW9uOlsiY2RrQ29ubmVjdGVkT3ZlcmxheUxvY2tQb3NpdGlvbiIsImxvY2tQb3NpdGlvbiJdLGZsZXhpYmxlRGltZW5zaW9uczpbImNka0Nvbm5lY3RlZE92ZXJsYXlGbGV4aWJsZURpbWVuc2lvbnMiLCJmbGV4aWJsZURpbWVuc2lvbnMiXSxncm93QWZ0ZXJPcGVuOlsiY2RrQ29ubmVjdGVkT3ZlcmxheUdyb3dBZnRlck9wZW4iLCJncm93QWZ0ZXJPcGVuIl0scHVzaDpbImNka0Nvbm5lY3RlZE92ZXJsYXlQdXNoIiwicHVzaCJdfSxvdXRwdXRzOntiYWNrZHJvcENsaWNrOiJiYWNrZHJvcENsaWNrIixwb3NpdGlvbkNoYW5nZToicG9zaXRpb25DaGFuZ2UiLGF0dGFjaDoiYXR0YWNoIixkZXRhY2g6ImRldGFjaCIsb3ZlcmxheUtleWRvd246Im92ZXJsYXlLZXlkb3duIixvdmVybGF5T3V0c2lkZUNsaWNrOiJvdmVybGF5T3V0c2lkZUNsaWNrIn0sZXhwb3J0QXM6WyJjZGtDb25uZWN0ZWRPdmVybGF5Il0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbcXRdfSksbn0pKCksdWJlPXtwcm92aWRlOnI5LGRlcHM6W09pXSx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4pe3JldHVybigpPT5uLnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpfX0sRG89KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe3Byb3ZpZGVyczpbT2ksdWJlXSxpbXBvcnRzOltGdSxCbCxDZCxDZF19KSxufSkoKTtmdW5jdGlvbiBwYmUobix0KXtpZigxJm4pe2xldCBlPVRlKCk7ZigwLCJkaXYiLDIpKDEsImJ1dHRvbiIsMyksQSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIG5lKGUpLGllKHcoKS5hY3Rpb24oKSl9KSxUKDIpLGcoKSgpfWlmKDImbil7bGV0IGU9dygpO3YoMiksVmUoIiAiLGUuZGF0YS5hY3Rpb24sIiAiKX19dmFyIGhiZT1bImxhYmVsIl07ZnVuY3Rpb24gbWJlKG4sdCl7fXZhciBmYmU9TWF0aC5wb3coMiwzMSktMSxBaD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX292ZXJsYXlSZWY9ZSx0aGlzLl9hZnRlckRpc21pc3NlZD1uZXcgRWUsdGhpcy5fYWZ0ZXJPcGVuZWQ9bmV3IEVlLHRoaXMuX29uQWN0aW9uPW5ldyBFZSx0aGlzLl9kaXNtaXNzZWRCeUFjdGlvbj0hMSx0aGlzLmNvbnRhaW5lckluc3RhbmNlPXQsdC5fb25FeGl0LnN1YnNjcmliZSgoKT0+dGhpcy5fZmluaXNoRGlzbWlzcygpKX1kaXNtaXNzKCl7dGhpcy5fYWZ0ZXJEaXNtaXNzZWQuY2xvc2VkfHx0aGlzLmNvbnRhaW5lckluc3RhbmNlLmV4aXQoKSxjbGVhclRpbWVvdXQodGhpcy5fZHVyYXRpb25UaW1lb3V0SWQpfWRpc21pc3NXaXRoQWN0aW9uKCl7dGhpcy5fb25BY3Rpb24uY2xvc2VkfHwodGhpcy5fZGlzbWlzc2VkQnlBY3Rpb249ITAsdGhpcy5fb25BY3Rpb24ubmV4dCgpLHRoaXMuX29uQWN0aW9uLmNvbXBsZXRlKCksdGhpcy5kaXNtaXNzKCkpLGNsZWFyVGltZW91dCh0aGlzLl9kdXJhdGlvblRpbWVvdXRJZCl9Y2xvc2VXaXRoQWN0aW9uKCl7dGhpcy5kaXNtaXNzV2l0aEFjdGlvbigpfV9kaXNtaXNzQWZ0ZXIodCl7dGhpcy5fZHVyYXRpb25UaW1lb3V0SWQ9c2V0VGltZW91dCgoKT0+dGhpcy5kaXNtaXNzKCksTWF0aC5taW4odCxmYmUpKX1fb3Blbigpe3RoaXMuX2FmdGVyT3BlbmVkLmNsb3NlZHx8KHRoaXMuX2FmdGVyT3BlbmVkLm5leHQoKSx0aGlzLl9hZnRlck9wZW5lZC5jb21wbGV0ZSgpKX1fZmluaXNoRGlzbWlzcygpe3RoaXMuX292ZXJsYXlSZWYuZGlzcG9zZSgpLHRoaXMuX29uQWN0aW9uLmNsb3NlZHx8dGhpcy5fb25BY3Rpb24uY29tcGxldGUoKSx0aGlzLl9hZnRlckRpc21pc3NlZC5uZXh0KHtkaXNtaXNzZWRCeUFjdGlvbjp0aGlzLl9kaXNtaXNzZWRCeUFjdGlvbn0pLHRoaXMuX2FmdGVyRGlzbWlzc2VkLmNvbXBsZXRlKCksdGhpcy5fZGlzbWlzc2VkQnlBY3Rpb249ITF9YWZ0ZXJEaXNtaXNzZWQoKXtyZXR1cm4gdGhpcy5fYWZ0ZXJEaXNtaXNzZWR9YWZ0ZXJPcGVuZWQoKXtyZXR1cm4gdGhpcy5jb250YWluZXJJbnN0YW5jZS5fb25FbnRlcn1vbkFjdGlvbigpe3JldHVybiB0aGlzLl9vbkFjdGlvbn19LFgxPW5ldyB0ZSgiTWF0U25hY2tCYXJEYXRhIiksYmc9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnBvbGl0ZW5lc3M9ImFzc2VydGl2ZSIsdGhpcy5hbm5vdW5jZW1lbnRNZXNzYWdlPSIiLHRoaXMuZHVyYXRpb249MCx0aGlzLmRhdGE9bnVsbCx0aGlzLmhvcml6b250YWxQb3NpdGlvbj0iY2VudGVyIix0aGlzLnZlcnRpY2FsUG9zaXRpb249ImJvdHRvbSJ9fSxnYmU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1ZGlyPU1lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdFNuYWNrQmFyTGFiZWwiLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtbWRjLXNuYWNrLWJhci1sYWJlbCIsIm1kYy1zbmFja2Jhcl9fbGFiZWwiXX0pLG59KSgpLF9iZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVkaXI9TWUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibWF0U25hY2tCYXJBY3Rpb25zIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LW1kYy1zbmFjay1iYXItYWN0aW9ucyIsIm1kYy1zbmFja2Jhcl9fYWN0aW9ucyJdfSksbn0pKCksYmJlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWRpcj1NZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXRTbmFja0JhckFjdGlvbiIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1tZGMtc25hY2stYmFyLWFjdGlvbiIsIm1kYy1zbmFja2Jhcl9fYWN0aW9uIl19KSxufSkoKSx2YmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuc25hY2tCYXJSZWY9ZSx0aGlzLmRhdGE9aX1hY3Rpb24oKXt0aGlzLnNuYWNrQmFyUmVmLmRpc21pc3NXaXRoQWN0aW9uKCl9Z2V0IGhhc0FjdGlvbigpe3JldHVybiEhdGhpcy5kYXRhLmFjdGlvbn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhBaCksQyhYMSkpfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbInNpbXBsZS1zbmFjay1iYXIiXV0saG9zdEF0dHJzOlsxLCJtYXQtbWRjLXNpbXBsZS1zbmFjay1iYXIiXSxleHBvcnRBczpbIm1hdFNuYWNrQmFyIl0sZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbIm1hdFNuYWNrQmFyTGFiZWwiLCIiXSxbIm1hdFNuYWNrQmFyQWN0aW9ucyIsIiIsNCwibmdJZiJdLFsibWF0U25hY2tCYXJBY3Rpb25zIiwiIl0sWyJtYXQtYnV0dG9uIiwiIiwibWF0U25hY2tCYXJBY3Rpb24iLCIiLDMsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZigwLCJkaXYiLDApLFQoMSksZygpLFMoMixwYmUsMywxLCJkaXYiLDEpKSwyJmUmJih2KDEpLFZlKCIgIixpLmRhdGEubWVzc2FnZSwiXG4iKSx2KDEpLGIoIm5nSWYiLGkuaGFzQWN0aW9uKSl9LGRlcGVuZGVuY2llczpbTmUsa2ksZ2JlLF9iZSxiYmVdLHN0eWxlczpbIi5tYXQtbWRjLXNpbXBsZS1zbmFjay1iYXJ7ZGlzcGxheTpmbGV4fSJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHliZT17c25hY2tCYXJTdGF0ZTpmcigic3RhdGUiLFtTaSgidm9pZCwgaGlkZGVuIixybih7dHJhbnNmb3JtOiJzY2FsZSgwLjgpIixvcGFjaXR5OjB9KSksU2koInZpc2libGUiLHJuKHt0cmFuc2Zvcm06InNjYWxlKDEpIixvcGFjaXR5OjF9KSksYmkoIiogPT4gdmlzaWJsZSIsTWkoIjE1MG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpIikpLGJpKCIqID0+IHZvaWQsICogPT4gaGlkZGVuIixNaSgiNzVtcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDEsIDEpIixybih7b3BhY2l0eTowfSkpKV0pfSx4YmU9MCxDYmU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIE51e2NvbnN0cnVjdG9yKGUsaSxyLG8sYSl7c3VwZXIoKSx0aGlzLl9uZ1pvbmU9ZSx0aGlzLl9lbGVtZW50UmVmPWksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9cix0aGlzLl9wbGF0Zm9ybT1vLHRoaXMuc25hY2tCYXJDb25maWc9YSx0aGlzLl9kb2N1bWVudD0kbihOdCksdGhpcy5fdHJhY2tlZE1vZGFscz1uZXcgU2V0LHRoaXMuX2Fubm91bmNlRGVsYXk9MTUwLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9vbkFubm91bmNlPW5ldyBFZSx0aGlzLl9vbkV4aXQ9bmV3IEVlLHRoaXMuX29uRW50ZXI9bmV3IEVlLHRoaXMuX2FuaW1hdGlvblN0YXRlPSJ2b2lkIix0aGlzLl9saXZlRWxlbWVudElkPSJtYXQtc25hY2stYmFyLWNvbnRhaW5lci1saXZlLSIreGJlKyssdGhpcy5hdHRhY2hEb21Qb3J0YWw9cz0+e3RoaXMuX2Fzc2VydE5vdEF0dGFjaGVkKCk7bGV0IGw9dGhpcy5fcG9ydGFsT3V0bGV0LmF0dGFjaERvbVBvcnRhbChzKTtyZXR1cm4gdGhpcy5fYWZ0ZXJQb3J0YWxBdHRhY2hlZCgpLGx9LHRoaXMuX2xpdmU9ImFzc2VydGl2ZSIhPT1hLnBvbGl0ZW5lc3N8fGEuYW5ub3VuY2VtZW50TWVzc2FnZT8ib2ZmIj09PWEucG9saXRlbmVzcz8ib2ZmIjoicG9saXRlIjoiYXNzZXJ0aXZlIix0aGlzLl9wbGF0Zm9ybS5GSVJFRk9YJiYoInBvbGl0ZSI9PT10aGlzLl9saXZlJiYodGhpcy5fcm9sZT0ic3RhdHVzIiksImFzc2VydGl2ZSI9PT10aGlzLl9saXZlJiYodGhpcy5fcm9sZT0iYWxlcnQiKSl9YXR0YWNoQ29tcG9uZW50UG9ydGFsKGUpe3RoaXMuX2Fzc2VydE5vdEF0dGFjaGVkKCk7bGV0IGk9dGhpcy5fcG9ydGFsT3V0bGV0LmF0dGFjaENvbXBvbmVudFBvcnRhbChlKTtyZXR1cm4gdGhpcy5fYWZ0ZXJQb3J0YWxBdHRhY2hlZCgpLGl9YXR0YWNoVGVtcGxhdGVQb3J0YWwoZSl7dGhpcy5fYXNzZXJ0Tm90QXR0YWNoZWQoKTtsZXQgaT10aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoVGVtcGxhdGVQb3J0YWwoZSk7cmV0dXJuIHRoaXMuX2FmdGVyUG9ydGFsQXR0YWNoZWQoKSxpfW9uQW5pbWF0aW9uRW5kKGUpe2xldHtmcm9tU3RhdGU6aSx0b1N0YXRlOnJ9PWU7aWYoKCJ2b2lkIj09PXImJiJ2b2lkIiE9PWl8fCJoaWRkZW4iPT09cikmJnRoaXMuX2NvbXBsZXRlRXhpdCgpLCJ2aXNpYmxlIj09PXIpe2xldCBvPXRoaXMuX29uRW50ZXI7dGhpcy5fbmdab25lLnJ1bigoKT0+e28ubmV4dCgpLG8uY29tcGxldGUoKX0pfX1lbnRlcigpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2FuaW1hdGlvblN0YXRlPSJ2aXNpYmxlIix0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCksdGhpcy5fc2NyZWVuUmVhZGVyQW5ub3VuY2UoKSl9ZXhpdCgpe3JldHVybiB0aGlzLl9uZ1pvbmUucnVuKCgpPT57dGhpcy5fYW5pbWF0aW9uU3RhdGU9ImhpZGRlbiIsdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgibWF0LWV4aXQiLCIiKSxjbGVhclRpbWVvdXQodGhpcy5fYW5ub3VuY2VUaW1lb3V0SWQpfSksdGhpcy5fb25FeGl0fW5nT25EZXN0cm95KCl7dGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuX2NsZWFyRnJvbU1vZGFscygpLHRoaXMuX2NvbXBsZXRlRXhpdCgpfV9jb21wbGV0ZUV4aXQoKXt0aGlzLl9uZ1pvbmUub25NaWNyb3Rhc2tFbXB0eS5waXBlKEx0KDEpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9uZ1pvbmUucnVuKCgpPT57dGhpcy5fb25FeGl0Lm5leHQoKSx0aGlzLl9vbkV4aXQuY29tcGxldGUoKX0pfSl9X2FmdGVyUG9ydGFsQXR0YWNoZWQoKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsaT10aGlzLnNuYWNrQmFyQ29uZmlnLnBhbmVsQ2xhc3M7aSYmKEFycmF5LmlzQXJyYXkoaSk/aS5mb3JFYWNoKHI9PmUuY2xhc3NMaXN0LmFkZChyKSk6ZS5jbGFzc0xpc3QuYWRkKGkpKSx0aGlzLl9leHBvc2VUb01vZGFscygpfV9leHBvc2VUb01vZGFscygpe2xldCBlPXRoaXMuX2xpdmVFbGVtZW50SWQsaT10aGlzLl9kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdib2R5ID4gLmNkay1vdmVybGF5LWNvbnRhaW5lciBbYXJpYS1tb2RhbD0idHJ1ZSJdJyk7Zm9yKGxldCByPTA7cjxpLmxlbmd0aDtyKyspe2xldCBvPWlbcl0sYT1vLmdldEF0dHJpYnV0ZSgiYXJpYS1vd25zIik7dGhpcy5fdHJhY2tlZE1vZGFscy5hZGQobyksYT8tMT09PWEuaW5kZXhPZihlKSYmby5zZXRBdHRyaWJ1dGUoImFyaWEtb3ducyIsYSsiICIrZSk6by5zZXRBdHRyaWJ1dGUoImFyaWEtb3ducyIsZSl9fV9jbGVhckZyb21Nb2RhbHMoKXt0aGlzLl90cmFja2VkTW9kYWxzLmZvckVhY2goZT0+e2xldCBpPWUuZ2V0QXR0cmlidXRlKCJhcmlhLW93bnMiKTtpZihpKXtsZXQgcj1pLnJlcGxhY2UodGhpcy5fbGl2ZUVsZW1lbnRJZCwiIikudHJpbSgpO3IubGVuZ3RoPjA/ZS5zZXRBdHRyaWJ1dGUoImFyaWEtb3ducyIscik6ZS5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtb3ducyIpfX0pLHRoaXMuX3RyYWNrZWRNb2RhbHMuY2xlYXIoKX1fYXNzZXJ0Tm90QXR0YWNoZWQoKXt0aGlzLl9wb3J0YWxPdXRsZXQuaGFzQXR0YWNoZWQoKX1fc2NyZWVuUmVhZGVyQW5ub3VuY2UoKXt0aGlzLl9hbm5vdW5jZVRpbWVvdXRJZHx8dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fYW5ub3VuY2VUaW1lb3V0SWQ9c2V0VGltZW91dCgoKT0+e2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCJbYXJpYS1oaWRkZW5dIiksaT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigiW2FyaWEtbGl2ZV0iKTtpZihlJiZpKXtsZXQgcj1udWxsO3RoaXMuX3BsYXRmb3JtLmlzQnJvd3NlciYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50JiZlLmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpJiYocj1kb2N1bWVudC5hY3RpdmVFbGVtZW50KSxlLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iKSxpLmFwcGVuZENoaWxkKGUpLHI/LmZvY3VzKCksdGhpcy5fb25Bbm5vdW5jZS5uZXh0KCksdGhpcy5fb25Bbm5vdW5jZS5jb21wbGV0ZSgpfX0sdGhpcy5fYW5ub3VuY2VEZWxheSl9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhvdCksQyh4ZSksQyhRdCksQyhWbiksQyhiZykpfSxuLlx1MDI3NWRpcj1NZSh7dHlwZTpuLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmVWUoYmEsNyksMiZlKXtsZXQgcjtiZShyPXZlKCkpJiYoaS5fcG9ydGFsT3V0bGV0PXIuZmlyc3QpfX0sZmVhdHVyZXM6W1hlXX0pLG59KSgpLE1iZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgQ2Jle19hZnRlclBvcnRhbEF0dGFjaGVkKCl7c3VwZXIuX2FmdGVyUG9ydGFsQXR0YWNoZWQoKTtsZXQgZT10aGlzLl9sYWJlbC5uYXRpdmVFbGVtZW50LGk9Im1kYy1zbmFja2Jhcl9fbGFiZWwiO2UuY2xhc3NMaXN0LnRvZ2dsZShpLCFlLnF1ZXJ5U2VsZWN0b3IoYC4ke2l9YCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PVhuKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LXNuYWNrLWJhci1jb250YWluZXIiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZVZShoYmUsNyksMiZlKXtsZXQgcjtiZShyPXZlKCkpJiYoaS5fbGFiZWw9ci5maXJzdCl9fSxob3N0QXR0cnM6WzEsIm1kYy1zbmFja2JhciIsIm1hdC1tZGMtc25hY2stYmFyLWNvbnRhaW5lciIsIm1kYy1zbmFja2Jhci0tb3BlbiJdLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZVTSgiQHN0YXRlLmRvbmUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uQW5pbWF0aW9uRW5kKG8pfSksMiZlJiZXTSgiQHN0YXRlIixpLl9hbmltYXRpb25TdGF0ZSl9LGZlYXR1cmVzOltYZV0sZGVjbHM6Nix2YXJzOjMsY29uc3RzOltbMSwibWRjLXNuYWNrYmFyX19zdXJmYWNlIl0sWzEsIm1hdC1tZGMtc25hY2stYmFyLWxhYmVsIl0sWyJsYWJlbCIsIiJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIl0sWyJjZGtQb3J0YWxPdXRsZXQiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihmKDAsImRpdiIsMCkoMSwiZGl2IiwxLDIpKDMsImRpdiIsMyksUyg0LG1iZSwwLDAsIm5nLXRlbXBsYXRlIiw0KSxnKCksayg1LCJkaXYiKSxnKCkoKSksMiZlJiYodig1KSxCZSgiYXJpYS1saXZlIixpLl9saXZlKSgicm9sZSIsaS5fcm9sZSkoImlkIixpLl9saXZlRWxlbWVudElkKSl9LGRlcGVuZGVuY2llczpbYmFdLHN0eWxlczpbJy5tZGMtc25hY2tiYXJ7ZGlzcGxheTpub25lO3Bvc2l0aW9uOmZpeGVkO3JpZ2h0OjA7Ym90dG9tOjA7bGVmdDowO2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb2ludGVyLWV2ZW50czpub25lOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApfS5tZGMtc25hY2tiYXItLW9wZW5pbmcsLm1kYy1zbmFja2Jhci0tb3BlbiwubWRjLXNuYWNrYmFyLS1jbG9zaW5ne2Rpc3BsYXk6ZmxleH0ubWRjLXNuYWNrYmFyLS1vcGVuIC5tZGMtc25hY2tiYXJfX2xhYmVsLC5tZGMtc25hY2tiYXItLW9wZW4gLm1kYy1zbmFja2Jhcl9fYWN0aW9uc3t2aXNpYmlsaXR5OnZpc2libGV9Lm1kYy1zbmFja2Jhcl9fc3VyZmFjZXtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjhweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0O2JveC1zaXppbmc6Ym9yZGVyLWJveDt0cmFuc2Zvcm06c2NhbGUoMC44KTtvcGFjaXR5OjB9Lm1kYy1zbmFja2Jhcl9fc3VyZmFjZTo6YmVmb3Jle3Bvc2l0aW9uOmFic29sdXRlO2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3RvcDowO2xlZnQ6MDtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsMCk7Ym9yZGVyLXJhZGl1czppbmhlcml0O2NvbnRlbnQ6IiI7cG9pbnRlci1ldmVudHM6bm9uZX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKXsubWRjLXNuYWNrYmFyX19zdXJmYWNlOjpiZWZvcmV7Ym9yZGVyLWNvbG9yOkNhbnZhc1RleHR9fVtkaXI9cnRsXSAubWRjLXNuYWNrYmFyX19zdXJmYWNlLC5tZGMtc25hY2tiYXJfX3N1cmZhY2VbZGlyPXJ0bF17cGFkZGluZy1sZWZ0OjhweDtwYWRkaW5nLXJpZ2h0OjB9Lm1kYy1zbmFja2Jhci0tb3BlbiAubWRjLXNuYWNrYmFyX19zdXJmYWNle3RyYW5zZm9ybTpzY2FsZSgxKTtvcGFjaXR5OjE7cG9pbnRlci1ldmVudHM6YXV0b30ubWRjLXNuYWNrYmFyLS1jbG9zaW5nIC5tZGMtc25hY2tiYXJfX3N1cmZhY2V7dHJhbnNmb3JtOnNjYWxlKDEpfS5tZGMtc25hY2tiYXJfX2xhYmVse3BhZGRpbmctbGVmdDoxNnB4O3BhZGRpbmctcmlnaHQ6OHB4O3dpZHRoOjEwMCU7ZmxleC1ncm93OjE7Ym94LXNpemluZzpib3JkZXItYm94O21hcmdpbjowO3Zpc2liaWxpdHk6aGlkZGVuO3BhZGRpbmctdG9wOjE0cHg7cGFkZGluZy1ib3R0b206MTRweH1bZGlyPXJ0bF0gLm1kYy1zbmFja2Jhcl9fbGFiZWwsLm1kYy1zbmFja2Jhcl9fbGFiZWxbZGlyPXJ0bF17cGFkZGluZy1sZWZ0OjhweDtwYWRkaW5nLXJpZ2h0OjE2cHh9Lm1kYy1zbmFja2Jhcl9fbGFiZWw6OmJlZm9yZXtkaXNwbGF5OmlubGluZTtjb250ZW50OmF0dHIoZGF0YS1tZGMtc25hY2tiYXItbGFiZWwtdGV4dCl9Lm1kYy1zbmFja2Jhcl9fYWN0aW9uc3tkaXNwbGF5OmZsZXg7ZmxleC1zaHJpbms6MDthbGlnbi1pdGVtczpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O3Zpc2liaWxpdHk6aGlkZGVufS5tZGMtc25hY2tiYXJfX2FjdGlvbisubWRjLXNuYWNrYmFyX19kaXNtaXNze21hcmdpbi1sZWZ0OjhweDttYXJnaW4tcmlnaHQ6MH1bZGlyPXJ0bF0gLm1kYy1zbmFja2Jhcl9fYWN0aW9uKy5tZGMtc25hY2tiYXJfX2Rpc21pc3MsLm1kYy1zbmFja2Jhcl9fYWN0aW9uKy5tZGMtc25hY2tiYXJfX2Rpc21pc3NbZGlyPXJ0bF17bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6OHB4fS5tYXQtbWRjLXNuYWNrLWJhci1jb250YWluZXJ7bWFyZ2luOjhweDtwb3NpdGlvbjpzdGF0aWN9Lm1hdC1tZGMtc25hY2stYmFyLWNvbnRhaW5lciAubWRjLXNuYWNrYmFyX19zdXJmYWNle21pbi13aWR0aDozNDRweH1AbWVkaWEobWF4LXdpZHRoOiA0ODBweCksKG1heC13aWR0aDogMzQ0cHgpey5tYXQtbWRjLXNuYWNrLWJhci1jb250YWluZXIgLm1kYy1zbmFja2Jhcl9fc3VyZmFjZXttaW4td2lkdGg6MTAwJX19QG1lZGlhKG1heC13aWR0aDogNDgwcHgpLChtYXgtd2lkdGg6IDM0NHB4KXsubWF0LW1kYy1zbmFjay1iYXItY29udGFpbmVye3dpZHRoOjEwMHZ3fX0ubWF0LW1kYy1zbmFjay1iYXItY29udGFpbmVyIC5tZGMtc25hY2tiYXJfX3N1cmZhY2V7bWF4LXdpZHRoOjY3MnB4fS5tYXQtbWRjLXNuYWNrLWJhci1jb250YWluZXIgLm1kYy1zbmFja2Jhcl9fc3VyZmFjZXtib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNnB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggMThweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LW1kYy1zbmFjay1iYXItY29udGFpbmVyIC5tZGMtc25hY2tiYXJfX2Rpc21pc3MgLm1kYy1idXR0b25fX2ljb257Zm9udC1zaXplOnZhcigtLW1kYy1pY29uLWJ1dHRvbi1pY29uLXNpemUsIHZhcigtLW1kYy1zbmFja2Jhci1pY29uLXNpemUsIDI0cHgpKX0ubWF0LW1kYy1zbmFjay1iYXItY29udGFpbmVyIC5tZGMtc25hY2tiYXJfX2Rpc21pc3Mgc3ZnLC5tYXQtbWRjLXNuYWNrLWJhci1jb250YWluZXIgLm1kYy1zbmFja2Jhcl9fZGlzbWlzcyBpbWd7d2lkdGg6dmFyKC0tbWRjLWljb24tYnV0dG9uLWljb24tc2l6ZSwgdmFyKC0tbWRjLXNuYWNrYmFyLWljb24tc2l6ZSwgMjRweCkpO2hlaWdodDp2YXIoLS1tZGMtaWNvbi1idXR0b24taWNvbi1zaXplLCB2YXIoLS1tZGMtc25hY2tiYXItaWNvbi1zaXplLCAyNHB4KSl9Lm1hdC1tZGMtc25hY2stYmFyLWNvbnRhaW5lciAubWRjLXNuYWNrYmFyX19zdXJmYWNle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLXNuYWNrYmFyLWNvbnRhaW5lci1jb2xvciwgaW5oZXJpdCl9Lm1hdC1tZGMtc25hY2stYmFyLWNvbnRhaW5lciAubWRjLXNuYWNrYmFyX19zdXJmYWNle2JvcmRlci1yYWRpdXM6dmFyKC0tbWRjLXNuYWNrYmFyLWNvbnRhaW5lci1zaGFwZSwgdmFyKC0tbWRjLXNoYXBlLXNtYWxsLCA0cHgpKX0ubWF0LW1kYy1zbmFjay1iYXItY29udGFpbmVyIC5tZGMtc25hY2tiYXJfX2xhYmVse2NvbG9yOnZhcigtLW1kYy1zbmFja2Jhci1zdXBwb3J0aW5nLXRleHQtY29sb3IsIGluaGVyaXQpfS5tYXQtbWRjLXNuYWNrLWJhci1jb250YWluZXIgLm1kYy1zbmFja2Jhcl9fbGFiZWx7Zm9udC1zaXplOnZhcigtLW1kYy1zbmFja2Jhci1zdXBwb3J0aW5nLXRleHQtc2l6ZSwgaW5oZXJpdCk7Zm9udC1mYW1pbHk6dmFyKC0tbWRjLXNuYWNrYmFyLXN1cHBvcnRpbmctdGV4dC1mb250LCBpbmhlcml0KTtmb250LXdlaWdodDp2YXIoLS1tZGMtc25hY2tiYXItc3VwcG9ydGluZy10ZXh0LXdlaWdodCwgaW5oZXJpdCk7bGluZS1oZWlnaHQ6dmFyKC0tbWRjLXNuYWNrYmFyLXN1cHBvcnRpbmctdGV4dC1saW5lLWhlaWdodCwgaW5oZXJpdCl9Lm1hdC1tZGMtc25hY2stYmFyLWNvbnRhaW5lciAubWF0LW1kYy1idXR0b24ubWF0LW1kYy1zbmFjay1iYXItYWN0aW9uOm5vdCg6ZGlzYWJsZWQpe2NvbG9yOnZhcigtLW1hdC1tZGMtc25hY2stYmFyLWJ1dHRvbi1jb2xvciwgdHJhbnNwYXJlbnQpOy0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6IGN1cnJlbnRDb2xvcn0ubWF0LW1kYy1zbmFjay1iYXItY29udGFpbmVyIC5tYXQtbWRjLWJ1dHRvbi5tYXQtbWRjLXNuYWNrLWJhci1hY3Rpb246bm90KDpkaXNhYmxlZCkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcjtvcGFjaXR5Oi4xfS5tYXQtbWRjLXNuYWNrLWJhci1jb250YWluZXIgLm1kYy1zbmFja2Jhcl9fbGFiZWw6OmJlZm9yZXtkaXNwbGF5Om5vbmV9Lm1hdC1tZGMtc25hY2stYmFyLWhhbmRzZXQsLm1hdC1tZGMtc25hY2stYmFyLWNvbnRhaW5lciwubWF0LW1kYy1zbmFjay1iYXItbGFiZWx7ZmxleDoxIDEgYXV0b30ubWF0LW1kYy1zbmFjay1iYXItaGFuZHNldCAubWRjLXNuYWNrYmFyX19zdXJmYWNle3dpZHRoOjEwMCV9J10sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbeWJlLnNuYWNrQmFyU3RhdGVdfX0pLG59KSgpLEEyPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1IKHtpbXBvcnRzOltEbyxCbCxEZSxLbixkbixkbl19KSxufSkoKSxvOT1uZXcgdGUoIm1hdC1zbmFjay1iYXItZGVmYXVsdC1vcHRpb25zIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgYmd9fSksU2JlPSgoKT0+e2NsYXNzIG57Z2V0IF9vcGVuZWRTbmFja0JhclJlZigpe2xldCBlPXRoaXMuX3BhcmVudFNuYWNrQmFyO3JldHVybiBlP2UuX29wZW5lZFNuYWNrQmFyUmVmOnRoaXMuX3NuYWNrQmFyUmVmQXRUaGlzTGV2ZWx9c2V0IF9vcGVuZWRTbmFja0JhclJlZihlKXt0aGlzLl9wYXJlbnRTbmFja0Jhcj90aGlzLl9wYXJlbnRTbmFja0Jhci5fb3BlbmVkU25hY2tCYXJSZWY9ZTp0aGlzLl9zbmFja0JhclJlZkF0VGhpc0xldmVsPWV9Y29uc3RydWN0b3IoZSxpLHIsbyxhLHMpe3RoaXMuX292ZXJsYXk9ZSx0aGlzLl9saXZlPWksdGhpcy5faW5qZWN0b3I9cix0aGlzLl9icmVha3BvaW50T2JzZXJ2ZXI9byx0aGlzLl9wYXJlbnRTbmFja0Jhcj1hLHRoaXMuX2RlZmF1bHRDb25maWc9cyx0aGlzLl9zbmFja0JhclJlZkF0VGhpc0xldmVsPW51bGx9b3BlbkZyb21Db21wb25lbnQoZSxpKXtyZXR1cm4gdGhpcy5fYXR0YWNoKGUsaSl9b3BlbkZyb21UZW1wbGF0ZShlLGkpe3JldHVybiB0aGlzLl9hdHRhY2goZSxpKX1vcGVuKGUsaT0iIixyKXtsZXQgbz17Li4udGhpcy5fZGVmYXVsdENvbmZpZywuLi5yfTtyZXR1cm4gby5kYXRhPXttZXNzYWdlOmUsYWN0aW9uOml9LG8uYW5ub3VuY2VtZW50TWVzc2FnZT09PWUmJihvLmFubm91bmNlbWVudE1lc3NhZ2U9dm9pZCAwKSx0aGlzLm9wZW5Gcm9tQ29tcG9uZW50KHRoaXMuc2ltcGxlU25hY2tCYXJDb21wb25lbnQsbyl9ZGlzbWlzcygpe3RoaXMuX29wZW5lZFNuYWNrQmFyUmVmJiZ0aGlzLl9vcGVuZWRTbmFja0JhclJlZi5kaXNtaXNzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zbmFja0JhclJlZkF0VGhpc0xldmVsJiZ0aGlzLl9zbmFja0JhclJlZkF0VGhpc0xldmVsLmRpc21pc3MoKX1fYXR0YWNoU25hY2tCYXJDb250YWluZXIoZSxpKXtsZXQgbz13aS5jcmVhdGUoe3BhcmVudDppJiZpLnZpZXdDb250YWluZXJSZWYmJmkudmlld0NvbnRhaW5lclJlZi5pbmplY3Rvcnx8dGhpcy5faW5qZWN0b3IscHJvdmlkZXJzOlt7cHJvdmlkZTpiZyx1c2VWYWx1ZTppfV19KSxhPW5ldyBMbCh0aGlzLnNuYWNrQmFyQ29udGFpbmVyQ29tcG9uZW50LGkudmlld0NvbnRhaW5lclJlZixvKSxzPWUuYXR0YWNoKGEpO3JldHVybiBzLmluc3RhbmNlLnNuYWNrQmFyQ29uZmlnPWkscy5pbnN0YW5jZX1fYXR0YWNoKGUsaSl7bGV0IHI9ey4uLm5ldyBiZywuLi50aGlzLl9kZWZhdWx0Q29uZmlnLC4uLml9LG89dGhpcy5fY3JlYXRlT3ZlcmxheShyKSxhPXRoaXMuX2F0dGFjaFNuYWNrQmFyQ29udGFpbmVyKG8scikscz1uZXcgQWgoYSxvKTtpZihlIGluc3RhbmNlb2Ygb2kpe2xldCBsPW5ldyBUbyhlLG51bGwseyRpbXBsaWNpdDpyLmRhdGEsc25hY2tCYXJSZWY6c30pO3MuaW5zdGFuY2U9YS5hdHRhY2hUZW1wbGF0ZVBvcnRhbChsKX1lbHNle2xldCBsPXRoaXMuX2NyZWF0ZUluamVjdG9yKHIscyksYz1uZXcgTGwoZSx2b2lkIDAsbCksZD1hLmF0dGFjaENvbXBvbmVudFBvcnRhbChjKTtzLmluc3RhbmNlPWQuaW5zdGFuY2V9cmV0dXJuIHRoaXMuX2JyZWFrcG9pbnRPYnNlcnZlci5vYnNlcnZlKCIobWF4LXdpZHRoOiA1OTkuOThweCkgYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIikucGlwZShpdChvLmRldGFjaG1lbnRzKCkpKS5zdWJzY3JpYmUobD0+e28ub3ZlcmxheUVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZSh0aGlzLmhhbmRzZXRDc3NDbGFzcyxsLm1hdGNoZXMpfSksci5hbm5vdW5jZW1lbnRNZXNzYWdlJiZhLl9vbkFubm91bmNlLnN1YnNjcmliZSgoKT0+e3RoaXMuX2xpdmUuYW5ub3VuY2Uoci5hbm5vdW5jZW1lbnRNZXNzYWdlLHIucG9saXRlbmVzcyl9KSx0aGlzLl9hbmltYXRlU25hY2tCYXIocyxyKSx0aGlzLl9vcGVuZWRTbmFja0JhclJlZj1zLHRoaXMuX29wZW5lZFNuYWNrQmFyUmVmfV9hbmltYXRlU25hY2tCYXIoZSxpKXtlLmFmdGVyRGlzbWlzc2VkKCkuc3Vic2NyaWJlKCgpPT57dGhpcy5fb3BlbmVkU25hY2tCYXJSZWY9PWUmJih0aGlzLl9vcGVuZWRTbmFja0JhclJlZj1udWxsKSxpLmFubm91bmNlbWVudE1lc3NhZ2UmJnRoaXMuX2xpdmUuY2xlYXIoKX0pLHRoaXMuX29wZW5lZFNuYWNrQmFyUmVmPyh0aGlzLl9vcGVuZWRTbmFja0JhclJlZi5hZnRlckRpc21pc3NlZCgpLnN1YnNjcmliZSgoKT0+e2UuY29udGFpbmVySW5zdGFuY2UuZW50ZXIoKX0pLHRoaXMuX29wZW5lZFNuYWNrQmFyUmVmLmRpc21pc3MoKSk6ZS5jb250YWluZXJJbnN0YW5jZS5lbnRlcigpLGkuZHVyYXRpb24mJmkuZHVyYXRpb24+MCYmZS5hZnRlck9wZW5lZCgpLnN1YnNjcmliZSgoKT0+ZS5fZGlzbWlzc0FmdGVyKGkuZHVyYXRpb24pKX1fY3JlYXRlT3ZlcmxheShlKXtsZXQgaT1uZXcgZWw7aS5kaXJlY3Rpb249ZS5kaXJlY3Rpb247bGV0IHI9dGhpcy5fb3ZlcmxheS5wb3NpdGlvbigpLmdsb2JhbCgpLG89InJ0bCI9PT1lLmRpcmVjdGlvbixhPSJsZWZ0Ij09PWUuaG9yaXpvbnRhbFBvc2l0aW9ufHwic3RhcnQiPT09ZS5ob3Jpem9udGFsUG9zaXRpb24mJiFvfHwiZW5kIj09PWUuaG9yaXpvbnRhbFBvc2l0aW9uJiZvLHM9IWEmJiJjZW50ZXIiIT09ZS5ob3Jpem9udGFsUG9zaXRpb247cmV0dXJuIGE/ci5sZWZ0KCIwIik6cz9yLnJpZ2h0KCIwIik6ci5jZW50ZXJIb3Jpem9udGFsbHkoKSwidG9wIj09PWUudmVydGljYWxQb3NpdGlvbj9yLnRvcCgiMCIpOnIuYm90dG9tKCIwIiksaS5wb3NpdGlvblN0cmF0ZWd5PXIsdGhpcy5fb3ZlcmxheS5jcmVhdGUoaSl9X2NyZWF0ZUluamVjdG9yKGUsaSl7cmV0dXJuIHdpLmNyZWF0ZSh7cGFyZW50OmUmJmUudmlld0NvbnRhaW5lclJlZiYmZS52aWV3Q29udGFpbmVyUmVmLmluamVjdG9yfHx0aGlzLl9pbmplY3Rvcixwcm92aWRlcnM6W3twcm92aWRlOkFoLHVzZVZhbHVlOml9LHtwcm92aWRlOlgxLHVzZVZhbHVlOmUuZGF0YX1dfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oT2kpLE8oSHYpLE8od2kpLE8oTnYpLE8obiwxMiksTyhvOSkpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGE5PSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBTYmV7Y29uc3RydWN0b3IoZSxpLHIsbyxhLHMpe3N1cGVyKGUsaSxyLG8sYSxzKSx0aGlzLnNpbXBsZVNuYWNrQmFyQ29tcG9uZW50PXZiZSx0aGlzLnNuYWNrQmFyQ29udGFpbmVyQ29tcG9uZW50PU1iZSx0aGlzLmhhbmRzZXRDc3NDbGFzcz0ibWF0LW1kYy1zbmFjay1iYXItaGFuZHNldCJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oT2kpLE8oSHYpLE8od2kpLE8oTnYpLE8obiwxMiksTyhvOSkpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOkEyfSksbn0pKCksRWJlPS9bXFxeJC4qKz8oKVtcXXt9fF0vZyxsOT0iXFx1MDAwMC1cXHUwMDIwXFx1MDA3Zi1cXHUwMDlmIixEYmU9bmV3IFJlZ0V4cCgiKD86W2EtekEtWl1bYS16QS1aMC05Ky4tXXsyLH06XFwvXFwvfGRhdGE6fHd3d1xcLilbXlxccyIrbDkrJyJdezIsfVteXFxzJytsOSsiXCInKX1cXF0sOjsuIT9dIiwiZ3UiKTtmdW5jdGlvbiBkOShuKXtyZXR1cm4gZnVuY3Rpb24obix0KXt0LmZsYWdzLmluY2x1ZGVzKCJnIil8fCh0PW5ldyBSZWdFeHAodCx0LmZsYWdzKyJnIikpO2xldCBlPVtdLGk9MDtmb3IobGV0IHIgb2Ygbi5tYXRjaEFsbCh0KSl7bGV0IG89ci5pbmRleCxhPXJbMF07bz5pJiZlLnB1c2goe2luZGV4OmksdGV4dDpuLnN1YnN0cmluZyhpLG8pLG1hdGNoZXNSZWdleDohMX0pLGUucHVzaCh7aW5kZXg6byx0ZXh0OmEsbWF0Y2hlc1JlZ2V4OiEwfSksaT1vK2EubGVuZ3RofXJldHVybiBuLmxlbmd0aD5pJiZlLnB1c2goe2luZGV4OmksdGV4dDpuLnN1YnN0cmluZyhpLG4ubGVuZ3RoKSxtYXRjaGVzUmVnZXg6ITF9KSxlfShuLERiZSkubWFwKCh7bWF0Y2hlc1JlZ2V4OnQsdGV4dDplfSk9Pih7aXNVUkw6dCx0ZXh0OmV9KSl9ZnVuY3Rpb24gSWJlKG4sdCl7aWYoMSZuJiYoR3QoMCksVCgxKSxXdCgpKSwyJm4pe2xldCBlPXcoKS4kaW1wbGljaXQ7digxKSxWZSgiICIsZS50ZXh0LCIgIil9fWZ1bmN0aW9uIEFiZShuLHQpe2lmKDEmbiYmKGYoMCwiYSIsNyksVCgxKSxnKCkpLDImbil7bGV0IGU9dygpLiRpbXBsaWNpdDtaaSgiaHJlZiIsZS50ZXh0LFZzKSx2KDEpLGt0KGUudGV4dCl9fWZ1bmN0aW9uIFJiZShuLHQpe2lmKDEmbiYmKEd0KDApLFMoMSxJYmUsMiwxLCJuZy1jb250YWluZXIiLDUpLFMoMixBYmUsMiwyLCJuZy10ZW1wbGF0ZSIsbnVsbCw2LGp0KSxXdCgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9c3QoMyk7digxKSxiKCJuZ0lmIiwhZS5pc1VSTCkoIm5nSWZFbHNlIixpKX19ZnVuY3Rpb24gUGJlKG4sdCl7aWYoMSZuKXtsZXQgZT1UZSgpO2YoMCwiYnV0dG9uIiw4KSxBKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gbmUoZSksaWUodygpLm9uQWN0aW9uQnV0dG9uQ2xpY2tlZCgpKX0pLFQoMSksZygpfWlmKDImbil7bGV0IGU9dygpO3YoMSksVmUoIiAiLGUuYWxlcnQuZm9sbG93dXBBY3Rpb24ubG9jYWxpemVkTGFiZWwsIiAiKX19dmFyIHU5PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuc25hY2tCYXJSZWY9ZSx0aGlzLnVua25vd25EYXRhPWksdGhpcy5zdG9yZT1yLHRoaXMuc3BsaXRCeVVSTD1kOSx0aGlzLmFsZXJ0PWl9YXN5bmMgb25BY3Rpb25CdXR0b25DbGlja2VkKCl7dGhpcy5zbmFja0JhclJlZi5kaXNtaXNzKCk7bGV0IGU9YXdhaXQgdGhpcy5hbGVydC5mb2xsb3d1cEFjdGlvbi5nZXRGb2xsb3d1cEFjdGlvbigpO3RoaXMuc3RvcmUuZGlzcGF0Y2goZSl9b25DbG9zZUJ1dHRvbkNsaWNrZWQoKXt0aGlzLnNuYWNrQmFyUmVmLmRpc21pc3MoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhBaCksQyhYMSksQyhJZSkpfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbImFsZXJ0LWRpc3BsYXktc25hY2tiYXIiXV0sZGVjbHM6Nix2YXJzOjIsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIHQ9JGxvY2FsaXplYDpBIGJ1dHRvbiB0byBjbG9zZSB0aGUgc25hY2tiYXIgbWVzc2FnZeKQn2VhNGQ5ZmU2MTQyMGEzZmNlODFjZjU0YzRjNjE1ZTNjMTljNjQ2YTbikJ8xNTM2MDg3NTE5NzQzNzA3MzYyOkRpc21pc3NgLFtbMSwibWVzc2FnZSJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udHJvbHMiXSxbIm1hdC1idXR0b24iLCIiLCJjbGFzcyIsImZvbGxvd3VwLWJ1dHRvbiIsMywiY2xpY2siLDQsIm5nSWYiXSxbIm1hdC1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LDEsImRpc21pc3MtYnV0dG9uIiwzLCJjbGljayJdLFs0LCJuZ0lmIiwibmdJZkVsc2UiXSxbImxpbmtQaWVjZSIsIiJdLFsicmVsIiwibm9yZWZlcnJlciBub29wZW5lciIsInRhcmdldCIsIl9ibGFuayIsMywiaHJlZiJdLFsibWF0LWJ1dHRvbiIsIiIsMSwiZm9sbG93dXAtYnV0dG9uIiwzLCJjbGljayJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihmKDAsImRpdiIsMCksUygxLFJiZSw0LDIsIm5nLWNvbnRhaW5lciIsMSksZygpLGYoMiwiZGl2IiwyKSxTKDMsUGJlLDIsMSwiYnV0dG9uIiwzKSxmKDQsImJ1dHRvbiIsNCksQSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25DbG9zZUJ1dHRvbkNsaWNrZWQoKX0pLFQoNSwiIERpc21pc3MgIiksZygpKCkpLDImZSYmKHYoMSksYigibmdGb3JPZiIsaS5zcGxpdEJ5VVJMKGkuYWxlcnQubG9jYWxpemVkTWVzc2FnZSkpLHYoMiksYigibmdJZiIsaS5hbGVydC5mb2xsb3d1cEFjdGlvbikpfSxkZXBlbmRlbmNpZXM6W25uLE5lLGtpXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcH0ubWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7YWxpZ24tc2VsZjpjZW50ZXI7bWFyZ2luOjVweCAwO3dvcmQtYnJlYWs6YnJlYWstd29yZH0ubWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV0gICBhW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjppbmhlcml0fS5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO21hcmdpbi1sZWZ0OmF1dG99YnV0dG9uLm1hdC1tZGMtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjppbmhlcml0O3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHA5PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnN0b3JlPWUsdGhpcy5zbmFja0Jhcj1pLHRoaXMubmdVbnN1YnNjcmliZT1uZXcgRWV9bmdPbkluaXQoKXt0aGlzLnN0b3JlLnNlbGVjdChlVykucGlwZShpdCh0aGlzLm5nVW5zdWJzY3JpYmUpLE9lKGU9PkJvb2xlYW4oZSkpKS5zdWJzY3JpYmUoZT0+e3RoaXMuc2hvd0FsZXJ0KGUpfSl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfXNob3dBbGVydChlKXt0aGlzLnNuYWNrQmFyLm9wZW5Gcm9tQ29tcG9uZW50KHU5LHtkdXJhdGlvbjo1ZTMsaG9yaXpvbnRhbFBvc2l0aW9uOiJzdGFydCIsdmVydGljYWxQb3NpdGlvbjoiYm90dG9tIixkYXRhOmV9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhJZSksQyhhOSkpfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbImFsZXJ0LXNuYWNrYmFyIl1dLGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7fSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxZMT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9SCh7aW1wb3J0czpbRGUsS24sQTJdfSksbn0pKCksUTE9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe2ltcG9ydHM6W0NjLFkxLHdyLmZvckZlYXR1cmUoImFsZXJ0cyIscDcpLHRvLmZvckZlYXR1cmUoW3U3XSldfSksbn0pKCk7ZnVuY3Rpb24gT2JlKG4sdCl7fXZhciBSaD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMucm9sZT0iZGlhbG9nIix0aGlzLnBhbmVsQ2xhc3M9IiIsdGhpcy5oYXNCYWNrZHJvcD0hMCx0aGlzLmJhY2tkcm9wQ2xhc3M9IiIsdGhpcy5kaXNhYmxlQ2xvc2U9ITEsdGhpcy53aWR0aD0iIix0aGlzLmhlaWdodD0iIix0aGlzLmRhdGE9bnVsbCx0aGlzLmFyaWFEZXNjcmliZWRCeT1udWxsLHRoaXMuYXJpYUxhYmVsbGVkQnk9bnVsbCx0aGlzLmFyaWFMYWJlbD1udWxsLHRoaXMuYXJpYU1vZGFsPSEwLHRoaXMuYXV0b0ZvY3VzPSJmaXJzdC10YWJiYWJsZSIsdGhpcy5yZXN0b3JlRm9jdXM9ITAsdGhpcy5jbG9zZU9uTmF2aWdhdGlvbj0hMCx0aGlzLmNsb3NlT25EZXN0cm95PSEwLHRoaXMuY2xvc2VPbk92ZXJsYXlEZXRhY2htZW50cz0hMH19LFAyPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBOdXtjb25zdHJ1Y3RvcihlLGkscixvLGEscyxsLGMpe3N1cGVyKCksdGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX2ZvY3VzVHJhcEZhY3Rvcnk9aSx0aGlzLl9jb25maWc9byx0aGlzLl9pbnRlcmFjdGl2aXR5Q2hlY2tlcj1hLHRoaXMuX25nWm9uZT1zLHRoaXMuX292ZXJsYXlSZWY9bCx0aGlzLl9mb2N1c01vbml0b3I9Yyx0aGlzLl9lbGVtZW50Rm9jdXNlZEJlZm9yZURpYWxvZ1dhc09wZW5lZD1udWxsLHRoaXMuX2Nsb3NlSW50ZXJhY3Rpb25UeXBlPW51bGwsdGhpcy5hdHRhY2hEb21Qb3J0YWw9ZD0+e3RoaXMuX3BvcnRhbE91dGxldC5oYXNBdHRhY2hlZCgpO2xldCB1PXRoaXMuX3BvcnRhbE91dGxldC5hdHRhY2hEb21Qb3J0YWwoZCk7cmV0dXJuIHRoaXMuX2NvbnRlbnRBdHRhY2hlZCgpLHV9LHRoaXMuX2FyaWFMYWJlbGxlZEJ5PXRoaXMuX2NvbmZpZy5hcmlhTGFiZWxsZWRCeXx8bnVsbCx0aGlzLl9kb2N1bWVudD1yfV9jb250ZW50QXR0YWNoZWQoKXt0aGlzLl9pbml0aWFsaXplRm9jdXNUcmFwKCksdGhpcy5faGFuZGxlQmFja2Ryb3BDbGlja3MoKSx0aGlzLl9jYXB0dXJlSW5pdGlhbEZvY3VzKCl9X2NhcHR1cmVJbml0aWFsRm9jdXMoKXt0aGlzLl90cmFwRm9jdXMoKX1uZ09uRGVzdHJveSgpe3RoaXMuX3Jlc3RvcmVGb2N1cygpfWF0dGFjaENvbXBvbmVudFBvcnRhbChlKXt0aGlzLl9wb3J0YWxPdXRsZXQuaGFzQXR0YWNoZWQoKTtsZXQgaT10aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoQ29tcG9uZW50UG9ydGFsKGUpO3JldHVybiB0aGlzLl9jb250ZW50QXR0YWNoZWQoKSxpfWF0dGFjaFRlbXBsYXRlUG9ydGFsKGUpe3RoaXMuX3BvcnRhbE91dGxldC5oYXNBdHRhY2hlZCgpO2xldCBpPXRoaXMuX3BvcnRhbE91dGxldC5hdHRhY2hUZW1wbGF0ZVBvcnRhbChlKTtyZXR1cm4gdGhpcy5fY29udGVudEF0dGFjaGVkKCksaX1fcmVjYXB0dXJlRm9jdXMoKXt0aGlzLl9jb250YWluc0ZvY3VzKCl8fHRoaXMuX3RyYXBGb2N1cygpfV9mb3JjZUZvY3VzKGUsaSl7dGhpcy5faW50ZXJhY3Rpdml0eUNoZWNrZXIuaXNGb2N1c2FibGUoZSl8fChlLnRhYkluZGV4PS0xLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2xldCByPSgpPT57ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIixyKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsciksZS5yZW1vdmVBdHRyaWJ1dGUoInRhYmluZGV4Iil9O2UuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsciksZS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHIpfSkpLGUuZm9jdXMoaSl9X2ZvY3VzQnlDc3NTZWxlY3RvcihlLGkpe2xldCByPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGUpO3ImJnRoaXMuX2ZvcmNlRm9jdXMocixpKX1fdHJhcEZvY3VzKCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3N3aXRjaCh0aGlzLl9jb25maWcuYXV0b0ZvY3VzKXtjYXNlITE6Y2FzZSJkaWFsb2ciOnRoaXMuX2NvbnRhaW5zRm9jdXMoKXx8ZS5mb2N1cygpO2JyZWFrO2Nhc2UhMDpjYXNlImZpcnN0LXRhYmJhYmxlIjp0aGlzLl9mb2N1c1RyYXAuZm9jdXNJbml0aWFsRWxlbWVudFdoZW5SZWFkeSgpLnRoZW4oaT0+e2l8fHRoaXMuX2ZvY3VzRGlhbG9nQ29udGFpbmVyKCl9KTticmVhaztjYXNlImZpcnN0LWhlYWRpbmciOnRoaXMuX2ZvY3VzQnlDc3NTZWxlY3RvcignaDEsIGgyLCBoMywgaDQsIGg1LCBoNiwgW3JvbGU9ImhlYWRpbmciXScpO2JyZWFrO2RlZmF1bHQ6dGhpcy5fZm9jdXNCeUNzc1NlbGVjdG9yKHRoaXMuX2NvbmZpZy5hdXRvRm9jdXMpfX1fcmVzdG9yZUZvY3VzKCl7bGV0IGU9dGhpcy5fY29uZmlnLnJlc3RvcmVGb2N1cyxpPW51bGw7aWYoInN0cmluZyI9PXR5cGVvZiBlP2k9dGhpcy5fZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlKToiYm9vbGVhbiI9PXR5cGVvZiBlP2k9ZT90aGlzLl9lbGVtZW50Rm9jdXNlZEJlZm9yZURpYWxvZ1dhc09wZW5lZDpudWxsOmUmJihpPWUpLHRoaXMuX2NvbmZpZy5yZXN0b3JlRm9jdXMmJmkmJiJmdW5jdGlvbiI9PXR5cGVvZiBpLmZvY3VzKXtsZXQgcj1PdigpLG89dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Oyghcnx8cj09PXRoaXMuX2RvY3VtZW50LmJvZHl8fHI9PT1vfHxvLmNvbnRhaW5zKHIpKSYmKHRoaXMuX2ZvY3VzTW9uaXRvcj8odGhpcy5fZm9jdXNNb25pdG9yLmZvY3VzVmlhKGksdGhpcy5fY2xvc2VJbnRlcmFjdGlvblR5cGUpLHRoaXMuX2Nsb3NlSW50ZXJhY3Rpb25UeXBlPW51bGwpOmkuZm9jdXMoKSl9dGhpcy5fZm9jdXNUcmFwJiZ0aGlzLl9mb2N1c1RyYXAuZGVzdHJveSgpfV9mb2N1c0RpYWxvZ0NvbnRhaW5lcigpe3RoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cyYmdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCl9X2NvbnRhaW5zRm9jdXMoKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsaT1PdigpO3JldHVybiBlPT09aXx8ZS5jb250YWlucyhpKX1faW5pdGlhbGl6ZUZvY3VzVHJhcCgpe3RoaXMuX2ZvY3VzVHJhcD10aGlzLl9mb2N1c1RyYXBGYWN0b3J5LmNyZWF0ZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLHRoaXMuX2RvY3VtZW50JiYodGhpcy5fZWxlbWVudEZvY3VzZWRCZWZvcmVEaWFsb2dXYXNPcGVuZWQ9T3YoKSl9X2hhbmRsZUJhY2tkcm9wQ2xpY2tzKCl7dGhpcy5fb3ZlcmxheVJlZi5iYWNrZHJvcENsaWNrKCkuc3Vic2NyaWJlKCgpPT57dGhpcy5fY29uZmlnLmRpc2FibGVDbG9zZSYmdGhpcy5fcmVjYXB0dXJlRm9jdXMoKX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKHhlKSxDKEx2KSxDKE50LDgpLEMoUmgpLEModWcpLEMob3QpLEMoQWMpLEMoZm8pKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJjZGstZGlhbG9nLWNvbnRhaW5lciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJlVlKGJhLDcpLDImZSl7bGV0IHI7YmUocj12ZSgpKSYmKGkuX3BvcnRhbE91dGxldD1yLmZpcnN0KX19LGhvc3RBdHRyczpbInRhYmluZGV4IiwiLTEiLDEsImNkay1kaWFsb2ctY29udGFpbmVyIl0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJkJlKCJpZCIsaS5fY29uZmlnLmlkfHxudWxsKSgicm9sZSIsaS5fY29uZmlnLnJvbGUpKCJhcmlhLW1vZGFsIixpLl9jb25maWcuYXJpYU1vZGFsKSgiYXJpYS1sYWJlbGxlZGJ5IixpLl9jb25maWcuYXJpYUxhYmVsP251bGw6aS5fYXJpYUxhYmVsbGVkQnkpKCJhcmlhLWxhYmVsIixpLl9jb25maWcuYXJpYUxhYmVsKSgiYXJpYS1kZXNjcmliZWRieSIsaS5fY29uZmlnLmFyaWFEZXNjcmliZWRCeXx8bnVsbCl9LGZlYXR1cmVzOltYZV0sZGVjbHM6MSx2YXJzOjAsY29uc3RzOltbImNka1BvcnRhbE91dGxldCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmUygwLE9iZSwwLDAsIm5nLXRlbXBsYXRlIiwwKX0sZGVwZW5kZW5jaWVzOltiYV0sc3R5bGVzOlsiLmNkay1kaWFsb2ctY29udGFpbmVye2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTttaW4taGVpZ2h0OmluaGVyaXQ7bWF4LWhlaWdodDppbmhlcml0fSJdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLHF2PWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5vdmVybGF5UmVmPXQsdGhpcy5jb25maWc9ZSx0aGlzLmNsb3NlZD1uZXcgRWUsdGhpcy5kaXNhYmxlQ2xvc2U9ZS5kaXNhYmxlQ2xvc2UsdGhpcy5iYWNrZHJvcENsaWNrPXQuYmFja2Ryb3BDbGljaygpLHRoaXMua2V5ZG93bkV2ZW50cz10LmtleWRvd25FdmVudHMoKSx0aGlzLm91dHNpZGVQb2ludGVyRXZlbnRzPXQub3V0c2lkZVBvaW50ZXJFdmVudHMoKSx0aGlzLmlkPWUuaWQsdGhpcy5rZXlkb3duRXZlbnRzLnN1YnNjcmliZShpPT57Mjc9PT1pLmtleUNvZGUmJiF0aGlzLmRpc2FibGVDbG9zZSYmIU9yKGkpJiYoaS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuY2xvc2Uodm9pZCAwLHtmb2N1c09yaWdpbjoia2V5Ym9hcmQifSkpfSksdGhpcy5iYWNrZHJvcENsaWNrLnN1YnNjcmliZSgoKT0+e3RoaXMuZGlzYWJsZUNsb3NlfHx0aGlzLmNsb3NlKHZvaWQgMCx7Zm9jdXNPcmlnaW46Im1vdXNlIn0pfSksdGhpcy5fZGV0YWNoU3Vic2NyaXB0aW9uPXQuZGV0YWNobWVudHMoKS5zdWJzY3JpYmUoKCk9PnshMSE9PWUuY2xvc2VPbk92ZXJsYXlEZXRhY2htZW50cyYmdGhpcy5jbG9zZSgpfSl9Y2xvc2UodCxlKXtpZih0aGlzLmNvbnRhaW5lckluc3RhbmNlKXtsZXQgaT10aGlzLmNsb3NlZDt0aGlzLmNvbnRhaW5lckluc3RhbmNlLl9jbG9zZUludGVyYWN0aW9uVHlwZT1lPy5mb2N1c09yaWdpbnx8InByb2dyYW0iLHRoaXMuX2RldGFjaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMub3ZlcmxheVJlZi5kaXNwb3NlKCksaS5uZXh0KHQpLGkuY29tcGxldGUoKSx0aGlzLmNvbXBvbmVudEluc3RhbmNlPXRoaXMuY29udGFpbmVySW5zdGFuY2U9bnVsbH19dXBkYXRlUG9zaXRpb24oKXtyZXR1cm4gdGhpcy5vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCksdGhpc311cGRhdGVTaXplKHQ9IiIsZT0iIil7cmV0dXJuIHRoaXMub3ZlcmxheVJlZi51cGRhdGVTaXplKHt3aWR0aDp0LGhlaWdodDplfSksdGhpc31hZGRQYW5lbENsYXNzKHQpe3JldHVybiB0aGlzLm92ZXJsYXlSZWYuYWRkUGFuZWxDbGFzcyh0KSx0aGlzfXJlbW92ZVBhbmVsQ2xhc3ModCl7cmV0dXJuIHRoaXMub3ZlcmxheVJlZi5yZW1vdmVQYW5lbENsYXNzKHQpLHRoaXN9fSxoOT1uZXcgdGUoIkRpYWxvZ1Njcm9sbFN0cmF0ZWd5IiksRmJlPW5ldyB0ZSgiRGlhbG9nRGF0YSIpLE5iZT1uZXcgdGUoIkRlZmF1bHREaWFsb2dDb25maWciKSxCYmU9e3Byb3ZpZGU6aDksZGVwczpbT2ldLHVzZUZhY3Rvcnk6ZnVuY3Rpb24obil7cmV0dXJuKCk9Pm4uc2Nyb2xsU3RyYXRlZ2llcy5ibG9jaygpfX0sVmJlPTAsazI9KCgpPT57Y2xhc3MgbntnZXQgb3BlbkRpYWxvZ3MoKXtyZXR1cm4gdGhpcy5fcGFyZW50RGlhbG9nP3RoaXMuX3BhcmVudERpYWxvZy5vcGVuRGlhbG9nczp0aGlzLl9vcGVuRGlhbG9nc0F0VGhpc0xldmVsfWdldCBhZnRlck9wZW5lZCgpe3JldHVybiB0aGlzLl9wYXJlbnREaWFsb2c/dGhpcy5fcGFyZW50RGlhbG9nLmFmdGVyT3BlbmVkOnRoaXMuX2FmdGVyT3BlbmVkQXRUaGlzTGV2ZWx9Y29uc3RydWN0b3IoZSxpLHIsbyxhLHMpe3RoaXMuX292ZXJsYXk9ZSx0aGlzLl9pbmplY3Rvcj1pLHRoaXMuX2RlZmF1bHRPcHRpb25zPXIsdGhpcy5fcGFyZW50RGlhbG9nPW8sdGhpcy5fb3ZlcmxheUNvbnRhaW5lcj1hLHRoaXMuX29wZW5EaWFsb2dzQXRUaGlzTGV2ZWw9W10sdGhpcy5fYWZ0ZXJBbGxDbG9zZWRBdFRoaXNMZXZlbD1uZXcgRWUsdGhpcy5fYWZ0ZXJPcGVuZWRBdFRoaXNMZXZlbD1uZXcgRWUsdGhpcy5fYXJpYUhpZGRlbkVsZW1lbnRzPW5ldyBNYXAsdGhpcy5hZnRlckFsbENsb3NlZD1pcygoKT0+dGhpcy5vcGVuRGlhbG9ncy5sZW5ndGg/dGhpcy5fZ2V0QWZ0ZXJBbGxDbG9zZWQoKTp0aGlzLl9nZXRBZnRlckFsbENsb3NlZCgpLnBpcGUoa24odm9pZCAwKSkpLHRoaXMuX3Njcm9sbFN0cmF0ZWd5PXN9b3BlbihlLGkpeyhpPXsuLi50aGlzLl9kZWZhdWx0T3B0aW9uc3x8bmV3IFJoLC4uLml9KS5pZD1pLmlkfHwiY2RrLWRpYWxvZy0iK1ZiZSsrLGkuaWQmJnRoaXMuZ2V0RGlhbG9nQnlJZChpLmlkKTtsZXQgbz10aGlzLl9nZXRPdmVybGF5Q29uZmlnKGkpLGE9dGhpcy5fb3ZlcmxheS5jcmVhdGUobykscz1uZXcgcXYoYSxpKSxsPXRoaXMuX2F0dGFjaENvbnRhaW5lcihhLHMsaSk7cmV0dXJuIHMuY29udGFpbmVySW5zdGFuY2U9bCx0aGlzLl9hdHRhY2hEaWFsb2dDb250ZW50KGUscyxsLGkpLHRoaXMub3BlbkRpYWxvZ3MubGVuZ3RofHx0aGlzLl9oaWRlTm9uRGlhbG9nQ29udGVudEZyb21Bc3Npc3RpdmVUZWNobm9sb2d5KCksdGhpcy5vcGVuRGlhbG9ncy5wdXNoKHMpLHMuY2xvc2VkLnN1YnNjcmliZSgoKT0+dGhpcy5fcmVtb3ZlT3BlbkRpYWxvZyhzLCEwKSksdGhpcy5hZnRlck9wZW5lZC5uZXh0KHMpLHN9Y2xvc2VBbGwoKXtSMih0aGlzLm9wZW5EaWFsb2dzLGU9PmUuY2xvc2UoKSl9Z2V0RGlhbG9nQnlJZChlKXtyZXR1cm4gdGhpcy5vcGVuRGlhbG9ncy5maW5kKGk9PmkuaWQ9PT1lKX1uZ09uRGVzdHJveSgpe1IyKHRoaXMuX29wZW5EaWFsb2dzQXRUaGlzTGV2ZWwsZT0+eyExPT09ZS5jb25maWcuY2xvc2VPbkRlc3Ryb3kmJnRoaXMuX3JlbW92ZU9wZW5EaWFsb2coZSwhMSl9KSxSMih0aGlzLl9vcGVuRGlhbG9nc0F0VGhpc0xldmVsLGU9PmUuY2xvc2UoKSksdGhpcy5fYWZ0ZXJBbGxDbG9zZWRBdFRoaXNMZXZlbC5jb21wbGV0ZSgpLHRoaXMuX2FmdGVyT3BlbmVkQXRUaGlzTGV2ZWwuY29tcGxldGUoKSx0aGlzLl9vcGVuRGlhbG9nc0F0VGhpc0xldmVsPVtdfV9nZXRPdmVybGF5Q29uZmlnKGUpe2xldCBpPW5ldyBlbCh7cG9zaXRpb25TdHJhdGVneTplLnBvc2l0aW9uU3RyYXRlZ3l8fHRoaXMuX292ZXJsYXkucG9zaXRpb24oKS5nbG9iYWwoKS5jZW50ZXJIb3Jpem9udGFsbHkoKS5jZW50ZXJWZXJ0aWNhbGx5KCksc2Nyb2xsU3RyYXRlZ3k6ZS5zY3JvbGxTdHJhdGVneXx8dGhpcy5fc2Nyb2xsU3RyYXRlZ3koKSxwYW5lbENsYXNzOmUucGFuZWxDbGFzcyxoYXNCYWNrZHJvcDplLmhhc0JhY2tkcm9wLGRpcmVjdGlvbjplLmRpcmVjdGlvbixtaW5XaWR0aDplLm1pbldpZHRoLG1pbkhlaWdodDplLm1pbkhlaWdodCxtYXhXaWR0aDplLm1heFdpZHRoLG1heEhlaWdodDplLm1heEhlaWdodCx3aWR0aDplLndpZHRoLGhlaWdodDplLmhlaWdodCxkaXNwb3NlT25OYXZpZ2F0aW9uOmUuY2xvc2VPbk5hdmlnYXRpb259KTtyZXR1cm4gZS5iYWNrZHJvcENsYXNzJiYoaS5iYWNrZHJvcENsYXNzPWUuYmFja2Ryb3BDbGFzcyksaX1fYXR0YWNoQ29udGFpbmVyKGUsaSxyKXtsZXQgcyxvPXIuaW5qZWN0b3J8fHIudmlld0NvbnRhaW5lclJlZj8uaW5qZWN0b3IsYT1be3Byb3ZpZGU6UmgsdXNlVmFsdWU6cn0se3Byb3ZpZGU6cXYsdXNlVmFsdWU6aX0se3Byb3ZpZGU6QWMsdXNlVmFsdWU6ZX1dO3IuY29udGFpbmVyPyJmdW5jdGlvbiI9PXR5cGVvZiByLmNvbnRhaW5lcj9zPXIuY29udGFpbmVyOihzPXIuY29udGFpbmVyLnR5cGUsYS5wdXNoKC4uLnIuY29udGFpbmVyLnByb3ZpZGVycyhyKSkpOnM9UDI7bGV0IGw9bmV3IExsKHMsci52aWV3Q29udGFpbmVyUmVmLHdpLmNyZWF0ZSh7cGFyZW50Om98fHRoaXMuX2luamVjdG9yLHByb3ZpZGVyczphfSksci5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpO3JldHVybiBlLmF0dGFjaChsKS5pbnN0YW5jZX1fYXR0YWNoRGlhbG9nQ29udGVudChlLGkscixvKXtpZihlIGluc3RhbmNlb2Ygb2kpe2xldCBhPXRoaXMuX2NyZWF0ZUluamVjdG9yKG8saSxyLHZvaWQgMCkscz17JGltcGxpY2l0Om8uZGF0YSxkaWFsb2dSZWY6aX07by50ZW1wbGF0ZUNvbnRleHQmJihzPXsuLi5zLC4uLiJmdW5jdGlvbiI9PXR5cGVvZiBvLnRlbXBsYXRlQ29udGV4dD9vLnRlbXBsYXRlQ29udGV4dCgpOm8udGVtcGxhdGVDb250ZXh0fSksci5hdHRhY2hUZW1wbGF0ZVBvcnRhbChuZXcgVG8oZSxudWxsLHMsYSkpfWVsc2V7bGV0IGE9dGhpcy5fY3JlYXRlSW5qZWN0b3IobyxpLHIsdGhpcy5faW5qZWN0b3IpLHM9ci5hdHRhY2hDb21wb25lbnRQb3J0YWwobmV3IExsKGUsby52aWV3Q29udGFpbmVyUmVmLGEsby5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpKTtpLmNvbXBvbmVudEluc3RhbmNlPXMuaW5zdGFuY2V9fV9jcmVhdGVJbmplY3RvcihlLGkscixvKXtsZXQgYT1lLmluamVjdG9yfHxlLnZpZXdDb250YWluZXJSZWY/LmluamVjdG9yLHM9W3twcm92aWRlOkZiZSx1c2VWYWx1ZTplLmRhdGF9LHtwcm92aWRlOnF2LHVzZVZhbHVlOml9XTtyZXR1cm4gZS5wcm92aWRlcnMmJigiZnVuY3Rpb24iPT10eXBlb2YgZS5wcm92aWRlcnM/cy5wdXNoKC4uLmUucHJvdmlkZXJzKGksZSxyKSk6cy5wdXNoKC4uLmUucHJvdmlkZXJzKSksZS5kaXJlY3Rpb24mJighYXx8IWEuZ2V0KHppLG51bGwse29wdGlvbmFsOiEwfSkpJiZzLnB1c2goe3Byb3ZpZGU6emksdXNlVmFsdWU6e3ZhbHVlOmUuZGlyZWN0aW9uLGNoYW5nZTokdCgpfX0pLHdpLmNyZWF0ZSh7cGFyZW50OmF8fG8scHJvdmlkZXJzOnN9KX1fcmVtb3ZlT3BlbkRpYWxvZyhlLGkpe2xldCByPXRoaXMub3BlbkRpYWxvZ3MuaW5kZXhPZihlKTtyPi0xJiYodGhpcy5vcGVuRGlhbG9ncy5zcGxpY2UociwxKSx0aGlzLm9wZW5EaWFsb2dzLmxlbmd0aHx8KHRoaXMuX2FyaWFIaWRkZW5FbGVtZW50cy5mb3JFYWNoKChvLGEpPT57bz9hLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLG8pOmEucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpfSksdGhpcy5fYXJpYUhpZGRlbkVsZW1lbnRzLmNsZWFyKCksaSYmdGhpcy5fZ2V0QWZ0ZXJBbGxDbG9zZWQoKS5uZXh0KCkpKX1faGlkZU5vbkRpYWxvZ0NvbnRlbnRGcm9tQXNzaXN0aXZlVGVjaG5vbG9neSgpe2xldCBlPXRoaXMuX292ZXJsYXlDb250YWluZXIuZ2V0Q29udGFpbmVyRWxlbWVudCgpO2lmKGUucGFyZW50RWxlbWVudCl7bGV0IGk9ZS5wYXJlbnRFbGVtZW50LmNoaWxkcmVuO2ZvcihsZXQgcj1pLmxlbmd0aC0xO3I+LTE7ci0tKXtsZXQgbz1pW3JdO28hPT1lJiYiU0NSSVBUIiE9PW8ubm9kZU5hbWUmJiJTVFlMRSIhPT1vLm5vZGVOYW1lJiYhby5oYXNBdHRyaWJ1dGUoImFyaWEtbGl2ZSIpJiYodGhpcy5fYXJpYUhpZGRlbkVsZW1lbnRzLnNldChvLG8uZ2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpKSxvLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIikpfX19X2dldEFmdGVyQWxsQ2xvc2VkKCl7bGV0IGU9dGhpcy5fcGFyZW50RGlhbG9nO3JldHVybiBlP2UuX2dldEFmdGVyQWxsQ2xvc2VkKCk6dGhpcy5fYWZ0ZXJBbGxDbG9zZWRBdFRoaXNMZXZlbH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhPaSksTyh3aSksTyhOYmUsOCksTyhuLDEyKSxPKF9nKSxPKGg5KSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCk7ZnVuY3Rpb24gUjIobix0KXtsZXQgZT1uLmxlbmd0aDtmb3IoO2UtLTspdChuW2VdKX12YXIgbTk9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe3Byb3ZpZGVyczpbazIsQmJlXSxpbXBvcnRzOltEbyxCbCxwZyxCbF19KSxufSkoKTtmdW5jdGlvbiBIYmUobix0KXt9dmFyIHZnPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5yb2xlPSJkaWFsb2ciLHRoaXMucGFuZWxDbGFzcz0iIix0aGlzLmhhc0JhY2tkcm9wPSEwLHRoaXMuYmFja2Ryb3BDbGFzcz0iIix0aGlzLmRpc2FibGVDbG9zZT0hMSx0aGlzLndpZHRoPSIiLHRoaXMuaGVpZ2h0PSIiLHRoaXMubWF4V2lkdGg9IjgwdnciLHRoaXMuZGF0YT1udWxsLHRoaXMuYXJpYURlc2NyaWJlZEJ5PW51bGwsdGhpcy5hcmlhTGFiZWxsZWRCeT1udWxsLHRoaXMuYXJpYUxhYmVsPW51bGwsdGhpcy5hcmlhTW9kYWw9ITAsdGhpcy5hdXRvRm9jdXM9ImZpcnN0LXRhYmJhYmxlIix0aGlzLnJlc3RvcmVGb2N1cz0hMCx0aGlzLmRlbGF5Rm9jdXNUcmFwPSEwLHRoaXMuY2xvc2VPbk5hdmlnYXRpb249ITB9fSxPMj0ibWRjLWRpYWxvZy0tb3BlbiIsZjk9Im1kYy1kaWFsb2ctLW9wZW5pbmciLGc5PSJtZGMtZGlhbG9nLS1jbG9zaW5nIixqYmU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFAye2NvbnN0cnVjdG9yKGUsaSxyLG8sYSxzLGwsYyl7c3VwZXIoZSxpLHIsbyxhLHMsbCxjKSx0aGlzLl9hbmltYXRpb25TdGF0ZUNoYW5nZWQ9bmV3IEZ9X2NhcHR1cmVJbml0aWFsRm9jdXMoKXt0aGlzLl9jb25maWcuZGVsYXlGb2N1c1RyYXB8fHRoaXMuX3RyYXBGb2N1cygpfV9vcGVuQW5pbWF0aW9uRG9uZShlKXt0aGlzLl9jb25maWcuZGVsYXlGb2N1c1RyYXAmJnRoaXMuX3RyYXBGb2N1cygpLHRoaXMuX2FuaW1hdGlvblN0YXRlQ2hhbmdlZC5uZXh0KHtzdGF0ZToib3BlbmVkIix0b3RhbFRpbWU6ZX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKHhlKSxDKEx2KSxDKE50LDgpLEModmcpLEModWcpLEMob3QpLEMoQWMpLEMoZm8pKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJuZy1jb21wb25lbnQiXV0sZmVhdHVyZXM6W1hlXSxkZWNsczowLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe30sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksXzk9Ii0tbWF0LWRpYWxvZy10cmFuc2l0aW9uLWR1cmF0aW9uIjtmdW5jdGlvbiBiOShuKXtyZXR1cm4gbnVsbD09bj9udWxsOiJudW1iZXIiPT10eXBlb2Ygbj9uOm4uZW5kc1dpdGgoIm1zIik/bWkobi5zdWJzdHJpbmcoMCxuLmxlbmd0aC0yKSk6bi5lbmRzV2l0aCgicyIpPzFlMyptaShuLnN1YnN0cmluZygwLG4ubGVuZ3RoLTEpKToiMCI9PT1uPzA6bnVsbH12YXIgR2JlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBqYmV7Y29uc3RydWN0b3IoZSxpLHIsbyxhLHMsbCxjLGQpe3N1cGVyKGUsaSxyLG8sYSxzLGwsZCksdGhpcy5fYW5pbWF0aW9uTW9kZT1jLHRoaXMuX2FuaW1hdGlvbnNFbmFibGVkPSJOb29wQW5pbWF0aW9ucyIhPT10aGlzLl9hbmltYXRpb25Nb2RlLHRoaXMuX2hvc3RFbGVtZW50PXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCx0aGlzLl9vcGVuQW5pbWF0aW9uRHVyYXRpb249dGhpcy5fYW5pbWF0aW9uc0VuYWJsZWQ/YjkodGhpcy5fY29uZmlnLmVudGVyQW5pbWF0aW9uRHVyYXRpb24pPz8xNTA6MCx0aGlzLl9jbG9zZUFuaW1hdGlvbkR1cmF0aW9uPXRoaXMuX2FuaW1hdGlvbnNFbmFibGVkP2I5KHRoaXMuX2NvbmZpZy5leGl0QW5pbWF0aW9uRHVyYXRpb24pPz83NTowLHRoaXMuX2FuaW1hdGlvblRpbWVyPW51bGwsdGhpcy5fZmluaXNoRGlhbG9nT3Blbj0oKT0+e3RoaXMuX2NsZWFyQW5pbWF0aW9uQ2xhc3NlcygpLHRoaXMuX29wZW5BbmltYXRpb25Eb25lKHRoaXMuX29wZW5BbmltYXRpb25EdXJhdGlvbil9LHRoaXMuX2ZpbmlzaERpYWxvZ0Nsb3NlPSgpPT57dGhpcy5fY2xlYXJBbmltYXRpb25DbGFzc2VzKCksdGhpcy5fYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLmVtaXQoe3N0YXRlOiJjbG9zZWQiLHRvdGFsVGltZTp0aGlzLl9jbG9zZUFuaW1hdGlvbkR1cmF0aW9ufSl9fV9jb250ZW50QXR0YWNoZWQoKXtzdXBlci5fY29udGVudEF0dGFjaGVkKCksdGhpcy5fc3RhcnRPcGVuQW5pbWF0aW9uKCl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLG51bGwhPT10aGlzLl9hbmltYXRpb25UaW1lciYmY2xlYXJUaW1lb3V0KHRoaXMuX2FuaW1hdGlvblRpbWVyKX1fc3RhcnRPcGVuQW5pbWF0aW9uKCl7dGhpcy5fYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLmVtaXQoe3N0YXRlOiJvcGVuaW5nIix0b3RhbFRpbWU6dGhpcy5fb3BlbkFuaW1hdGlvbkR1cmF0aW9ufSksdGhpcy5fYW5pbWF0aW9uc0VuYWJsZWQ/KHRoaXMuX2hvc3RFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KF85LGAke3RoaXMuX29wZW5BbmltYXRpb25EdXJhdGlvbn1tc2ApLHRoaXMuX3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+dGhpcy5faG9zdEVsZW1lbnQuY2xhc3NMaXN0LmFkZChmOSxPMikpLHRoaXMuX3dhaXRGb3JBbmltYXRpb25Ub0NvbXBsZXRlKHRoaXMuX29wZW5BbmltYXRpb25EdXJhdGlvbix0aGlzLl9maW5pc2hEaWFsb2dPcGVuKSk6KHRoaXMuX2hvc3RFbGVtZW50LmNsYXNzTGlzdC5hZGQoTzIpLFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PnRoaXMuX2ZpbmlzaERpYWxvZ09wZW4oKSkpfV9zdGFydEV4aXRBbmltYXRpb24oKXt0aGlzLl9hbmltYXRpb25TdGF0ZUNoYW5nZWQuZW1pdCh7c3RhdGU6ImNsb3NpbmciLHRvdGFsVGltZTp0aGlzLl9jbG9zZUFuaW1hdGlvbkR1cmF0aW9ufSksdGhpcy5faG9zdEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShPMiksdGhpcy5fYW5pbWF0aW9uc0VuYWJsZWQ/KHRoaXMuX2hvc3RFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KF85LGAke3RoaXMuX29wZW5BbmltYXRpb25EdXJhdGlvbn1tc2ApLHRoaXMuX3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+dGhpcy5faG9zdEVsZW1lbnQuY2xhc3NMaXN0LmFkZChnOSkpLHRoaXMuX3dhaXRGb3JBbmltYXRpb25Ub0NvbXBsZXRlKHRoaXMuX2Nsb3NlQW5pbWF0aW9uRHVyYXRpb24sdGhpcy5fZmluaXNoRGlhbG9nQ2xvc2UpKTpQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT50aGlzLl9maW5pc2hEaWFsb2dDbG9zZSgpKX1fY2xlYXJBbmltYXRpb25DbGFzc2VzKCl7dGhpcy5faG9zdEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShmOSxnOSl9X3dhaXRGb3JBbmltYXRpb25Ub0NvbXBsZXRlKGUsaSl7bnVsbCE9PXRoaXMuX2FuaW1hdGlvblRpbWVyJiZjbGVhclRpbWVvdXQodGhpcy5fYW5pbWF0aW9uVGltZXIpLHRoaXMuX2FuaW1hdGlvblRpbWVyPXNldFRpbWVvdXQoaSxlKX1fcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpe3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+eyJmdW5jdGlvbiI9PXR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU/cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpOmUoKX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKHhlKSxDKEx2KSxDKE50LDgpLEModmcpLEModWcpLEMob3QpLEMoQWMpLEMocGksOCksQyhmbykpfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1kaWFsb2ctY29udGFpbmVyIl1dLGhvc3RBdHRyczpbInRhYmluZGV4IiwiLTEiLDEsIm1hdC1tZGMtZGlhbG9nLWNvbnRhaW5lciIsIm1kYy1kaWFsb2ciXSxob3N0VmFyczo4LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmKHdvKCJpZCIsaS5fY29uZmlnLmlkKSxCZSgiYXJpYS1tb2RhbCIsaS5fY29uZmlnLmFyaWFNb2RhbCkoInJvbGUiLGkuX2NvbmZpZy5yb2xlKSgiYXJpYS1sYWJlbGxlZGJ5IixpLl9jb25maWcuYXJpYUxhYmVsP251bGw6aS5fYXJpYUxhYmVsbGVkQnkpKCJhcmlhLWxhYmVsIixpLl9jb25maWcuYXJpYUxhYmVsKSgiYXJpYS1kZXNjcmliZWRieSIsaS5fY29uZmlnLmFyaWFEZXNjcmliZWRCeXx8bnVsbCksbnQoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIiwhaS5fYW5pbWF0aW9uc0VuYWJsZWQpKX0sZmVhdHVyZXM6W1hlXSxkZWNsczozLHZhcnM6MCxjb25zdHM6W1sxLCJtZGMtZGlhbG9nX19jb250YWluZXIiXSxbMSwibWF0LW1kYy1kaWFsb2ctc3VyZmFjZSIsIm1kYy1kaWFsb2dfX3N1cmZhY2UiXSxbImNka1BvcnRhbE91dGxldCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGYoMCwiZGl2IiwwKSgxLCJkaXYiLDEpLFMoMixIYmUsMCwwLCJuZy10ZW1wbGF0ZSIsMiksZygpKCkpfSxkZXBlbmRlbmNpZXM6W2JhXSxzdHlsZXM6WycubWRjLWVsZXZhdGlvbi1vdmVybGF5e3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6aW5oZXJpdDtwb2ludGVyLWV2ZW50czpub25lO29wYWNpdHk6dmFyKC0tbWRjLWVsZXZhdGlvbi1vdmVybGF5LW9wYWNpdHksIDApO3RyYW5zaXRpb246b3BhY2l0eSAyODBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpfS5tZGMtZGlhbG9nLC5tZGMtZGlhbG9nX19zY3JpbXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCV9Lm1kYy1kaWFsb2d7ZGlzcGxheTpub25lO3otaW5kZXg6dmFyKC0tbWRjLWRpYWxvZy16LWluZGV4LCA3KX0ubWRjLWRpYWxvZyAubWRjLWRpYWxvZ19fY29udGVudHtwYWRkaW5nOjIwcHggMjRweCAyMHB4IDI0cHh9Lm1kYy1kaWFsb2cgLm1kYy1kaWFsb2dfX3N1cmZhY2V7bWluLXdpZHRoOjI4MHB4fUBtZWRpYShtYXgtd2lkdGg6IDU5MnB4KXsubWRjLWRpYWxvZyAubWRjLWRpYWxvZ19fc3VyZmFjZXttYXgtd2lkdGg6Y2FsYygxMDB2dyAtIDMycHgpfX1AbWVkaWEobWluLXdpZHRoOiA1OTJweCl7Lm1kYy1kaWFsb2cgLm1kYy1kaWFsb2dfX3N1cmZhY2V7bWF4LXdpZHRoOjU2MHB4fX0ubWRjLWRpYWxvZyAubWRjLWRpYWxvZ19fc3VyZmFjZXttYXgtaGVpZ2h0OmNhbGMoMTAwJSAtIDMycHgpfS5tZGMtZGlhbG9nLm1kYy1kaWFsb2ctLWZ1bGxzY3JlZW4gLm1kYy1kaWFsb2dfX3N1cmZhY2V7bWF4LXdpZHRoOm5vbmV9QG1lZGlhKG1heC13aWR0aDogOTYwcHgpey5tZGMtZGlhbG9nLm1kYy1kaWFsb2ctLWZ1bGxzY3JlZW4gLm1kYy1kaWFsb2dfX3N1cmZhY2V7bWF4LWhlaWdodDo1NjBweDt3aWR0aDo1NjBweH0ubWRjLWRpYWxvZy5tZGMtZGlhbG9nLS1mdWxsc2NyZWVuIC5tZGMtZGlhbG9nX19zdXJmYWNlIC5tZGMtZGlhbG9nX19jbG9zZXtyaWdodDotMTJweH19QG1lZGlhKG1heC13aWR0aDogNzIwcHgpYW5kIChtYXgtd2lkdGg6IDY3MnB4KXsubWRjLWRpYWxvZy5tZGMtZGlhbG9nLS1mdWxsc2NyZWVuIC5tZGMtZGlhbG9nX19zdXJmYWNle3dpZHRoOmNhbGMoMTAwdncgLSAxMTJweCl9fUBtZWRpYShtYXgtd2lkdGg6IDcyMHB4KWFuZCAobWluLXdpZHRoOiA2NzJweCl7Lm1kYy1kaWFsb2cubWRjLWRpYWxvZy0tZnVsbHNjcmVlbiAubWRjLWRpYWxvZ19fc3VyZmFjZXt3aWR0aDo1NjBweH19QG1lZGlhKG1heC13aWR0aDogNzIwcHgpYW5kIChtYXgtaGVpZ2h0OiA3MjBweCl7Lm1kYy1kaWFsb2cubWRjLWRpYWxvZy0tZnVsbHNjcmVlbiAubWRjLWRpYWxvZ19fc3VyZmFjZXttYXgtaGVpZ2h0OmNhbGMoMTAwdmggLSAxNjBweCl9fUBtZWRpYShtYXgtd2lkdGg6IDcyMHB4KWFuZCAobWluLWhlaWdodDogNzIwcHgpey5tZGMtZGlhbG9nLm1kYy1kaWFsb2ctLWZ1bGxzY3JlZW4gLm1kYy1kaWFsb2dfX3N1cmZhY2V7bWF4LWhlaWdodDo1NjBweH19QG1lZGlhKG1heC13aWR0aDogNzIwcHgpey5tZGMtZGlhbG9nLm1kYy1kaWFsb2ctLWZ1bGxzY3JlZW4gLm1kYy1kaWFsb2dfX3N1cmZhY2UgLm1kYy1kaWFsb2dfX2Nsb3Nle3JpZ2h0Oi0xMnB4fX1AbWVkaWEobWF4LXdpZHRoOiA3MjBweClhbmQgKG1heC1oZWlnaHQ6IDQwMHB4KSwobWF4LXdpZHRoOiA2MDBweCksKG1pbi13aWR0aDogNzIwcHgpYW5kIChtYXgtaGVpZ2h0OiA0MDBweCl7Lm1kYy1kaWFsb2cubWRjLWRpYWxvZy0tZnVsbHNjcmVlbiAubWRjLWRpYWxvZ19fc3VyZmFjZXtoZWlnaHQ6MTAwJTttYXgtaGVpZ2h0OjEwMHZoO21heC13aWR0aDoxMDB2dzt3aWR0aDoxMDB2dztib3JkZXItcmFkaXVzOjB9Lm1kYy1kaWFsb2cubWRjLWRpYWxvZy0tZnVsbHNjcmVlbiAubWRjLWRpYWxvZ19fc3VyZmFjZSAubWRjLWRpYWxvZ19fY2xvc2V7b3JkZXI6LTE7bGVmdDotMTJweH0ubWRjLWRpYWxvZy5tZGMtZGlhbG9nLS1mdWxsc2NyZWVuIC5tZGMtZGlhbG9nX19zdXJmYWNlIC5tZGMtZGlhbG9nX19oZWFkZXJ7cGFkZGluZzowIDE2cHggOXB4O2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5tZGMtZGlhbG9nLm1kYy1kaWFsb2ctLWZ1bGxzY3JlZW4gLm1kYy1kaWFsb2dfX3N1cmZhY2UgLm1kYy1kaWFsb2dfX3RpdGxle21hcmdpbi1sZWZ0OmNhbGMoMTZweCAtIDIgKiAxMnB4KX19QG1lZGlhKG1pbi13aWR0aDogOTYwcHgpey5tZGMtZGlhbG9nLm1kYy1kaWFsb2ctLWZ1bGxzY3JlZW4gLm1kYy1kaWFsb2dfX3N1cmZhY2V7d2lkdGg6Y2FsYygxMDB2dyAtIDQwMHB4KX0ubWRjLWRpYWxvZy5tZGMtZGlhbG9nLS1mdWxsc2NyZWVuIC5tZGMtZGlhbG9nX19zdXJmYWNlIC5tZGMtZGlhbG9nX19jbG9zZXtyaWdodDotMTJweH19Lm1kYy1kaWFsb2cubWRjLWRpYWxvZ19fc2NyaW0tLWhpZGRlbiAubWRjLWRpYWxvZ19fc2NyaW17b3BhY2l0eTowfS5tZGMtZGlhbG9nX19zY3JpbXtvcGFjaXR5OjA7ei1pbmRleDotMX0ubWRjLWRpYWxvZ19fY29udGFpbmVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQ7Ym94LXNpemluZzpib3JkZXItYm94O2hlaWdodDoxMDAlO3RyYW5zZm9ybTpzY2FsZSgwLjgpO29wYWNpdHk6MDtwb2ludGVyLWV2ZW50czpub25lfS5tZGMtZGlhbG9nX19zdXJmYWNle3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1ncm93OjA7ZmxleC1zaHJpbms6MDtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlO3BvaW50ZXItZXZlbnRzOmF1dG87b3ZlcmZsb3cteTphdXRvfS5tZGMtZGlhbG9nX19zdXJmYWNlIC5tZGMtZWxldmF0aW9uLW92ZXJsYXl7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt0b3A6MDtsZWZ0OjB9W2Rpcj1ydGxdIC5tZGMtZGlhbG9nX19zdXJmYWNlLC5tZGMtZGlhbG9nX19zdXJmYWNlW2Rpcj1ydGxde3RleHQtYWxpZ246cmlnaHR9QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSksKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpey5tZGMtZGlhbG9nX19zdXJmYWNle291dGxpbmU6MnB4IHNvbGlkIHdpbmRvd1RleHR9fS5tZGMtZGlhbG9nX19zdXJmYWNlOjpiZWZvcmV7cG9zaXRpb246YWJzb2x1dGU7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7dG9wOjA7bGVmdDowO2JvcmRlcjoycHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItcmFkaXVzOmluaGVyaXQ7Y29udGVudDoiIjtwb2ludGVyLWV2ZW50czpub25lfUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpey5tZGMtZGlhbG9nX19zdXJmYWNlOjpiZWZvcmV7Ym9yZGVyLWNvbG9yOkNhbnZhc1RleHR9fUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKSxzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDogbm9uZSl7Lm1kYy1kaWFsb2dfX3N1cmZhY2U6OmJlZm9yZXtjb250ZW50Om5vbmV9fS5tZGMtZGlhbG9nX190aXRsZXtkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6MDtwb3NpdGlvbjpyZWxhdGl2ZTtmbGV4LXNocmluazowO2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MCAwIDFweDtwYWRkaW5nOjAgMjRweCA5cHh9Lm1kYy1kaWFsb2dfX3RpdGxlOjpiZWZvcmV7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MDtoZWlnaHQ6NDBweDtjb250ZW50OiIiO3ZlcnRpY2FsLWFsaWduOjB9W2Rpcj1ydGxdIC5tZGMtZGlhbG9nX190aXRsZSwubWRjLWRpYWxvZ19fdGl0bGVbZGlyPXJ0bF17dGV4dC1hbGlnbjpyaWdodH0ubWRjLWRpYWxvZy0tc2Nyb2xsYWJsZSAubWRjLWRpYWxvZ19fdGl0bGV7bWFyZ2luLWJvdHRvbToxcHg7cGFkZGluZy1ib3R0b206MTVweH0ubWRjLWRpYWxvZy0tZnVsbHNjcmVlbiAubWRjLWRpYWxvZ19faGVhZGVye2FsaWduLWl0ZW1zOmJhc2VsaW5lO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMCwwLDAsMCk7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtwYWRkaW5nOjAgMjRweCA5cHg7ei1pbmRleDoxfUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpey5tZGMtZGlhbG9nLS1mdWxsc2NyZWVuIC5tZGMtZGlhbG9nX19oZWFkZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjpDYW52YXNUZXh0fX0ubWRjLWRpYWxvZy0tZnVsbHNjcmVlbiAubWRjLWRpYWxvZ19faGVhZGVyIC5tZGMtZGlhbG9nX19jbG9zZXtyaWdodDotMTJweH0ubWRjLWRpYWxvZy0tZnVsbHNjcmVlbiAubWRjLWRpYWxvZ19fdGl0bGV7bWFyZ2luLWJvdHRvbTowO3BhZGRpbmc6MDtib3JkZXItYm90dG9tOjB9Lm1kYy1kaWFsb2ctLWZ1bGxzY3JlZW4ubWRjLWRpYWxvZy0tc2Nyb2xsYWJsZSAubWRjLWRpYWxvZ19fdGl0bGV7Ym9yZGVyLWJvdHRvbTowO21hcmdpbi1ib3R0b206MH0ubWRjLWRpYWxvZy0tZnVsbHNjcmVlbiAubWRjLWRpYWxvZ19fY2xvc2V7dG9wOjVweH0ubWRjLWRpYWxvZy0tZnVsbHNjcmVlbi5tZGMtZGlhbG9nLS1zY3JvbGxhYmxlIC5tZGMtZGlhbG9nX19hY3Rpb25ze2JvcmRlci10b3A6MXB4IHNvbGlkIHJnYmEoMCwwLDAsMCl9QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSl7Lm1kYy1kaWFsb2ctLWZ1bGxzY3JlZW4ubWRjLWRpYWxvZy0tc2Nyb2xsYWJsZSAubWRjLWRpYWxvZ19fYWN0aW9uc3tib3JkZXItdG9wLWNvbG9yOkNhbnZhc1RleHR9fS5tZGMtZGlhbG9nLS1mdWxsc2NyZWVuLS10aXRsZWxlc3MgLm1kYy1kaWFsb2dfX2Nsb3Nle21hcmdpbi10b3A6NHB4fS5tZGMtZGlhbG9nLS1mdWxsc2NyZWVuLS10aXRsZWxlc3MubWRjLWRpYWxvZy0tc2Nyb2xsYWJsZSAubWRjLWRpYWxvZ19fY2xvc2V7bWFyZ2luLXRvcDowfS5tZGMtZGlhbG9nX19jb250ZW50e2ZsZXgtZ3JvdzoxO2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MDtvdmVyZmxvdzphdXRvfS5tZGMtZGlhbG9nX19jb250ZW50PjpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9Lm1kYy1kaWFsb2dfX2NvbnRlbnQ+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS5tZGMtZGlhbG9nX190aXRsZSsubWRjLWRpYWxvZ19fY29udGVudCwubWRjLWRpYWxvZ19faGVhZGVyKy5tZGMtZGlhbG9nX19jb250ZW50e3BhZGRpbmctdG9wOjB9Lm1kYy1kaWFsb2ctLXNjcm9sbGFibGUgLm1kYy1kaWFsb2dfX3RpdGxlKy5tZGMtZGlhbG9nX19jb250ZW50e3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1kYy1kaWFsb2dfX2NvbnRlbnQgLm1kYy1kZXByZWNhdGVkLWxpc3Q6Zmlyc3QtY2hpbGQ6bGFzdC1jaGlsZHtwYWRkaW5nOjZweCAwIDB9Lm1kYy1kaWFsb2ctLXNjcm9sbGFibGUgLm1kYy1kaWFsb2dfX2NvbnRlbnQgLm1kYy1kZXByZWNhdGVkLWxpc3Q6Zmlyc3QtY2hpbGQ6bGFzdC1jaGlsZHtwYWRkaW5nOjB9Lm1kYy1kaWFsb2dfX2FjdGlvbnN7ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOnJlbGF0aXZlO2ZsZXgtc2hyaW5rOjA7ZmxleC13cmFwOndyYXA7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpmbGV4LWVuZDtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWluLWhlaWdodDo1MnB4O21hcmdpbjowO3BhZGRpbmc6OHB4O2JvcmRlci10b3A6MXB4IHNvbGlkIHJnYmEoMCwwLDAsMCl9QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSl7Lm1kYy1kaWFsb2dfX2FjdGlvbnN7Ym9yZGVyLXRvcC1jb2xvcjpDYW52YXNUZXh0fX0ubWRjLWRpYWxvZy0tc3RhY2tlZCAubWRjLWRpYWxvZ19fYWN0aW9uc3tmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6ZmxleC1lbmR9Lm1kYy1kaWFsb2dfX2J1dHRvbnttYXJnaW4tbGVmdDo4cHg7bWFyZ2luLXJpZ2h0OjA7bWF4LXdpZHRoOjEwMCU7dGV4dC1hbGlnbjpyaWdodH1bZGlyPXJ0bF0gLm1kYy1kaWFsb2dfX2J1dHRvbiwubWRjLWRpYWxvZ19fYnV0dG9uW2Rpcj1ydGxde21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjhweH0ubWRjLWRpYWxvZ19fYnV0dG9uOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjB9W2Rpcj1ydGxdIC5tZGMtZGlhbG9nX19idXR0b246Zmlyc3QtY2hpbGQsLm1kYy1kaWFsb2dfX2J1dHRvbjpmaXJzdC1jaGlsZFtkaXI9cnRsXXttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowfVtkaXI9cnRsXSAubWRjLWRpYWxvZ19fYnV0dG9uLC5tZGMtZGlhbG9nX19idXR0b25bZGlyPXJ0bF17dGV4dC1hbGlnbjpsZWZ0fS5tZGMtZGlhbG9nLS1zdGFja2VkIC5tZGMtZGlhbG9nX19idXR0b246bm90KDpmaXJzdC1jaGlsZCl7bWFyZ2luLXRvcDoxMnB4fS5tZGMtZGlhbG9nLS1vcGVuLC5tZGMtZGlhbG9nLS1vcGVuaW5nLC5tZGMtZGlhbG9nLS1jbG9zaW5ne2Rpc3BsYXk6ZmxleH0ubWRjLWRpYWxvZy0tb3BlbmluZyAubWRjLWRpYWxvZ19fc2NyaW17dHJhbnNpdGlvbjpvcGFjaXR5IDE1MG1zIGxpbmVhcn0ubWRjLWRpYWxvZy0tb3BlbmluZyAubWRjLWRpYWxvZ19fY29udGFpbmVye3RyYW5zaXRpb246b3BhY2l0eSA3NW1zIGxpbmVhcix0cmFuc2Zvcm0gMTUwbXMgMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpfS5tZGMtZGlhbG9nLS1jbG9zaW5nIC5tZGMtZGlhbG9nX19zY3JpbSwubWRjLWRpYWxvZy0tY2xvc2luZyAubWRjLWRpYWxvZ19fY29udGFpbmVye3RyYW5zaXRpb246b3BhY2l0eSA3NW1zIGxpbmVhcn0ubWRjLWRpYWxvZy0tY2xvc2luZyAubWRjLWRpYWxvZ19fY29udGFpbmVye3RyYW5zZm9ybTpub25lfS5tZGMtZGlhbG9nLS1vcGVuIC5tZGMtZGlhbG9nX19zY3JpbXtvcGFjaXR5OjF9Lm1kYy1kaWFsb2ctLW9wZW4gLm1kYy1kaWFsb2dfX2NvbnRhaW5lcnt0cmFuc2Zvcm06bm9uZTtvcGFjaXR5OjF9Lm1kYy1kaWFsb2ctLW9wZW4ubWRjLWRpYWxvZ19fc3VyZmFjZS1zY3JpbS0tc2hvd24gLm1kYy1kaWFsb2dfX3N1cmZhY2Utc2NyaW17b3BhY2l0eToxfS5tZGMtZGlhbG9nLS1vcGVuLm1kYy1kaWFsb2dfX3N1cmZhY2Utc2NyaW0tLWhpZGluZyAubWRjLWRpYWxvZ19fc3VyZmFjZS1zY3JpbXt0cmFuc2l0aW9uOm9wYWNpdHkgNzVtcyBsaW5lYXJ9Lm1kYy1kaWFsb2ctLW9wZW4ubWRjLWRpYWxvZ19fc3VyZmFjZS1zY3JpbS0tc2hvd2luZyAubWRjLWRpYWxvZ19fc3VyZmFjZS1zY3JpbXt0cmFuc2l0aW9uOm9wYWNpdHkgMTUwbXMgbGluZWFyfS5tZGMtZGlhbG9nX19zdXJmYWNlLXNjcmlte2Rpc3BsYXk6bm9uZTtvcGFjaXR5OjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt6LWluZGV4OjF9Lm1kYy1kaWFsb2dfX3N1cmZhY2Utc2NyaW0tLXNob3duIC5tZGMtZGlhbG9nX19zdXJmYWNlLXNjcmltLC5tZGMtZGlhbG9nX19zdXJmYWNlLXNjcmltLS1zaG93aW5nIC5tZGMtZGlhbG9nX19zdXJmYWNlLXNjcmltLC5tZGMtZGlhbG9nX19zdXJmYWNlLXNjcmltLS1oaWRpbmcgLm1kYy1kaWFsb2dfX3N1cmZhY2Utc2NyaW17ZGlzcGxheTpibG9ja30ubWRjLWRpYWxvZy1zY3JvbGwtbG9ja3tvdmVyZmxvdzpoaWRkZW59Lm1kYy1kaWFsb2ctLW5vLWNvbnRlbnQtcGFkZGluZyAubWRjLWRpYWxvZ19fY29udGVudHtwYWRkaW5nOjB9Lm1kYy1kaWFsb2ctLXNoZWV0IC5tZGMtZGlhbG9nX19jbG9zZXtyaWdodDoxMnB4O3RvcDo5cHg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxfS5tZGMtZGlhbG9nX19zY3JpbS0tcmVtb3ZlZHtwb2ludGVyLWV2ZW50czpub25lfS5tZGMtZGlhbG9nX19zY3JpbS0tcmVtb3ZlZCAubWRjLWRpYWxvZ19fc2NyaW0sLm1kYy1kaWFsb2dfX3NjcmltLS1yZW1vdmVkIC5tZGMtZGlhbG9nX19zdXJmYWNlLXNjcmlte2Rpc3BsYXk6bm9uZX0ubWF0LW1kYy1kaWFsb2ctY29udGVudHttYXgtaGVpZ2h0OjY1dmh9Lm1hdC1tZGMtZGlhbG9nLWNvbnRhaW5lcntwb3NpdGlvbjpzdGF0aWM7ZGlzcGxheTpibG9ja30ubWF0LW1kYy1kaWFsb2ctY29udGFpbmVyLC5tYXQtbWRjLWRpYWxvZy1jb250YWluZXIgLm1kYy1kaWFsb2dfX2NvbnRhaW5lciwubWF0LW1kYy1kaWFsb2ctY29udGFpbmVyIC5tZGMtZGlhbG9nX19zdXJmYWNle21heC1oZWlnaHQ6aW5oZXJpdDttaW4taGVpZ2h0OmluaGVyaXQ7bWluLXdpZHRoOmluaGVyaXQ7bWF4LXdpZHRoOmluaGVyaXR9Lm1hdC1tZGMtZGlhbG9nLWNvbnRhaW5lciAubWRjLWRpYWxvZ19fc3VyZmFjZXtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCV9Lm1hdC1tZGMtZGlhbG9nLWNvbnRhaW5lcntvdXRsaW5lOjB9Lm1hdC1tZGMtZGlhbG9nLWNvbnRhaW5lciAubWRjLWRpYWxvZ19fc3VyZmFjZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy1kaWFsb2ctY29udGFpbmVyLWNvbG9yLCB3aGl0ZSl9Lm1hdC1tZGMtZGlhbG9nLWNvbnRhaW5lciAubWRjLWRpYWxvZ19fc3VyZmFjZXtib3gtc2hhZG93OnZhcigtLW1kYy1kaWFsb2ctY29udGFpbmVyLWVsZXZhdGlvbiwgMHB4IDExcHggMTVweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpKX0ubWF0LW1kYy1kaWFsb2ctY29udGFpbmVyIC5tZGMtZGlhbG9nX19zdXJmYWNle2JvcmRlci1yYWRpdXM6dmFyKC0tbWRjLWRpYWxvZy1jb250YWluZXItc2hhcGUsIHZhcigtLW1kYy1zaGFwZS1tZWRpdW0sIDRweCkpfS5tYXQtbWRjLWRpYWxvZy1jb250YWluZXIubWRjLWRpYWxvZy0tc2Nyb2xsYWJsZSAubWRjLWRpYWxvZ19fdGl0bGUsLm1hdC1tZGMtZGlhbG9nLWNvbnRhaW5lci5tZGMtZGlhbG9nLS1zY3JvbGxhYmxlIC5tZGMtZGlhbG9nX19hY3Rpb25zLC5tYXQtbWRjLWRpYWxvZy1jb250YWluZXIubWRjLWRpYWxvZy0tc2Nyb2xsYWJsZS5tZGMtZGlhbG9nLXNjcm9sbC1kaXZpZGVyLWZvb3RlciAubWRjLWRpYWxvZ19fYWN0aW9uc3tib3JkZXItY29sb3I6dmFyKC0tbWRjLWRpYWxvZy13aXRoLWRpdmlkZXItZGl2aWRlci1jb2xvciwgYmxhY2spfS5tYXQtbWRjLWRpYWxvZy1jb250YWluZXIubWRjLWRpYWxvZy0tc2Nyb2xsYWJsZSAubWRjLWRpYWxvZ19fdGl0bGV7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1tZGMtZGlhbG9nLXdpdGgtZGl2aWRlci1kaXZpZGVyLWNvbG9yLCBibGFjayl9Lm1hdC1tZGMtZGlhbG9nLWNvbnRhaW5lciAubWRjLWRpYWxvZ19fdGl0bGV7Zm9udC1mYW1pbHk6dmFyKC0tbWRjLWRpYWxvZy1zdWJoZWFkLWZvbnQsICJBcmlhbCIpO2xpbmUtaGVpZ2h0OnZhcigtLW1kYy1kaWFsb2ctc3ViaGVhZC1saW5lLWhlaWdodCwgMTRweCk7Zm9udC1zaXplOnZhcigtLW1kYy1kaWFsb2ctc3ViaGVhZC1zaXplLCAxNHB4KTtmb250LXdlaWdodDp2YXIoLS1tZGMtZGlhbG9nLXN1YmhlYWQtd2VpZ2h0LCA1MDApO2xldHRlci1zcGFjaW5nOnZhcigtLW1kYy1kaWFsb2ctc3ViaGVhZC10cmFja2luZywgMXB4KX0ubWF0LW1kYy1kaWFsb2ctY29udGFpbmVyIC5tZGMtZGlhbG9nX190aXRsZXtjb2xvcjp2YXIoLS1tZGMtZGlhbG9nLXN1YmhlYWQtY29sb3IsIGJsYWNrKX0ubWF0LW1kYy1kaWFsb2ctY29udGFpbmVyIC5tZGMtZGlhbG9nX19jb250ZW50e2ZvbnQtZmFtaWx5OnZhcigtLW1kYy1kaWFsb2ctc3VwcG9ydGluZy10ZXh0LWZvbnQsICJBcmlhbCIpO2xpbmUtaGVpZ2h0OnZhcigtLW1kYy1kaWFsb2ctc3VwcG9ydGluZy10ZXh0LWxpbmUtaGVpZ2h0LCAxNHB4KTtmb250LXNpemU6dmFyKC0tbWRjLWRpYWxvZy1zdXBwb3J0aW5nLXRleHQtc2l6ZSwgMTRweCk7Zm9udC13ZWlnaHQ6dmFyKC0tbWRjLWRpYWxvZy1zdXBwb3J0aW5nLXRleHQtd2VpZ2h0LCA1MDApO2xldHRlci1zcGFjaW5nOnZhcigtLW1kYy1kaWFsb2ctc3VwcG9ydGluZy10ZXh0LXRyYWNraW5nLCAxcHgpfS5tYXQtbWRjLWRpYWxvZy1jb250YWluZXIgLm1kYy1kaWFsb2dfX2NvbnRlbnR7Y29sb3I6dmFyKC0tbWRjLWRpYWxvZy1zdXBwb3J0aW5nLXRleHQtY29sb3IsIGJsYWNrKX0ubWF0LW1kYy1kaWFsb2ctY29udGFpbmVyIC5tZGMtZGlhbG9nX19jb250YWluZXJ7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS1tYXQtZGlhbG9nLXRyYW5zaXRpb24tZHVyYXRpb24sIDBtcyl9Lm1hdC1tZGMtZGlhbG9nLWNvbnRhaW5lci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWRjLWRpYWxvZ19fY29udGFpbmVye3RyYW5zaXRpb246bm9uZX0ubWF0LW1kYy1kaWFsb2ctY29udGVudHtkaXNwbGF5OmJsb2NrfS5tYXQtbWRjLWRpYWxvZy1hY3Rpb25ze2p1c3RpZnktY29udGVudDpzdGFydH0ubWF0LW1kYy1kaWFsb2ctYWN0aW9ucy5tYXQtbWRjLWRpYWxvZy1hY3Rpb25zLWFsaWduLWNlbnRlciwubWF0LW1kYy1kaWFsb2ctYWN0aW9uc1thbGlnbj1jZW50ZXJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lm1hdC1tZGMtZGlhbG9nLWFjdGlvbnMubWF0LW1kYy1kaWFsb2ctYWN0aW9ucy1hbGlnbi1lbmQsLm1hdC1tZGMtZGlhbG9nLWFjdGlvbnNbYWxpZ249ZW5kXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9Lm1hdC1tZGMtZGlhbG9nLWFjdGlvbnMgLm1hdC1idXR0b24tYmFzZSsubWF0LWJ1dHRvbi1iYXNlLC5tYXQtbWRjLWRpYWxvZy1hY3Rpb25zIC5tYXQtbWRjLWJ1dHRvbi1iYXNlKy5tYXQtbWRjLWJ1dHRvbi1iYXNle21hcmdpbi1sZWZ0OjhweH1bZGlyPXJ0bF0gLm1hdC1tZGMtZGlhbG9nLWFjdGlvbnMgLm1hdC1idXR0b24tYmFzZSsubWF0LWJ1dHRvbi1iYXNlLFtkaXI9cnRsXSAubWF0LW1kYy1kaWFsb2ctYWN0aW9ucyAubWF0LW1kYy1idXR0b24tYmFzZSsubWF0LW1kYy1idXR0b24tYmFzZXttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDo4cHh9J10sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksVmw9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMuX3JlZj10LHRoaXMuX2NvbnRhaW5lckluc3RhbmNlPWksdGhpcy5fYWZ0ZXJPcGVuZWQ9bmV3IEVlLHRoaXMuX2JlZm9yZUNsb3NlZD1uZXcgRWUsdGhpcy5fc3RhdGU9MCx0aGlzLmRpc2FibGVDbG9zZT1lLmRpc2FibGVDbG9zZSx0aGlzLmlkPXQuaWQsaS5fYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLnBpcGUoT2Uocj0+Im9wZW5lZCI9PT1yLnN0YXRlKSxMdCgxKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fYWZ0ZXJPcGVuZWQubmV4dCgpLHRoaXMuX2FmdGVyT3BlbmVkLmNvbXBsZXRlKCl9KSxpLl9hbmltYXRpb25TdGF0ZUNoYW5nZWQucGlwZShPZShyPT4iY2xvc2VkIj09PXIuc3RhdGUpLEx0KDEpKS5zdWJzY3JpYmUoKCk9PntjbGVhclRpbWVvdXQodGhpcy5fY2xvc2VGYWxsYmFja1RpbWVvdXQpLHRoaXMuX2ZpbmlzaERpYWxvZ0Nsb3NlKCl9KSx0Lm92ZXJsYXlSZWYuZGV0YWNobWVudHMoKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9iZWZvcmVDbG9zZWQubmV4dCh0aGlzLl9yZXN1bHQpLHRoaXMuX2JlZm9yZUNsb3NlZC5jb21wbGV0ZSgpLHRoaXMuX2ZpbmlzaERpYWxvZ0Nsb3NlKCl9KSx0bih0aGlzLmJhY2tkcm9wQ2xpY2soKSx0aGlzLmtleWRvd25FdmVudHMoKS5waXBlKE9lKHI9PjI3PT09ci5rZXlDb2RlJiYhdGhpcy5kaXNhYmxlQ2xvc2UmJiFPcihyKSkpKS5zdWJzY3JpYmUocj0+e3RoaXMuZGlzYWJsZUNsb3NlfHwoci5wcmV2ZW50RGVmYXVsdCgpLHk5KHRoaXMsImtleWRvd24iPT09ci50eXBlPyJrZXlib2FyZCI6Im1vdXNlIikpfSl9Y2xvc2UodCl7dGhpcy5fcmVzdWx0PXQsdGhpcy5fY29udGFpbmVySW5zdGFuY2UuX2FuaW1hdGlvblN0YXRlQ2hhbmdlZC5waXBlKE9lKGU9PiJjbG9zaW5nIj09PWUuc3RhdGUpLEx0KDEpKS5zdWJzY3JpYmUoZT0+e3RoaXMuX2JlZm9yZUNsb3NlZC5uZXh0KHQpLHRoaXMuX2JlZm9yZUNsb3NlZC5jb21wbGV0ZSgpLHRoaXMuX3JlZi5vdmVybGF5UmVmLmRldGFjaEJhY2tkcm9wKCksdGhpcy5fY2xvc2VGYWxsYmFja1RpbWVvdXQ9c2V0VGltZW91dCgoKT0+dGhpcy5fZmluaXNoRGlhbG9nQ2xvc2UoKSxlLnRvdGFsVGltZSsxMDApfSksdGhpcy5fc3RhdGU9MSx0aGlzLl9jb250YWluZXJJbnN0YW5jZS5fc3RhcnRFeGl0QW5pbWF0aW9uKCl9YWZ0ZXJPcGVuZWQoKXtyZXR1cm4gdGhpcy5fYWZ0ZXJPcGVuZWR9YWZ0ZXJDbG9zZWQoKXtyZXR1cm4gdGhpcy5fcmVmLmNsb3NlZH1iZWZvcmVDbG9zZWQoKXtyZXR1cm4gdGhpcy5fYmVmb3JlQ2xvc2VkfWJhY2tkcm9wQ2xpY2soKXtyZXR1cm4gdGhpcy5fcmVmLmJhY2tkcm9wQ2xpY2t9a2V5ZG93bkV2ZW50cygpe3JldHVybiB0aGlzLl9yZWYua2V5ZG93bkV2ZW50c311cGRhdGVQb3NpdGlvbih0KXtsZXQgZT10aGlzLl9yZWYuY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3k7cmV0dXJuIHQmJih0LmxlZnR8fHQucmlnaHQpP3QubGVmdD9lLmxlZnQodC5sZWZ0KTplLnJpZ2h0KHQucmlnaHQpOmUuY2VudGVySG9yaXpvbnRhbGx5KCksdCYmKHQudG9wfHx0LmJvdHRvbSk/dC50b3A/ZS50b3AodC50b3ApOmUuYm90dG9tKHQuYm90dG9tKTplLmNlbnRlclZlcnRpY2FsbHkoKSx0aGlzLl9yZWYudXBkYXRlUG9zaXRpb24oKSx0aGlzfXVwZGF0ZVNpemUodD0iIixlPSIiKXtyZXR1cm4gdGhpcy5fcmVmLnVwZGF0ZVNpemUodCxlKSx0aGlzfWFkZFBhbmVsQ2xhc3ModCl7cmV0dXJuIHRoaXMuX3JlZi5hZGRQYW5lbENsYXNzKHQpLHRoaXN9cmVtb3ZlUGFuZWxDbGFzcyh0KXtyZXR1cm4gdGhpcy5fcmVmLnJlbW92ZVBhbmVsQ2xhc3ModCksdGhpc31nZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9zdGF0ZX1fZmluaXNoRGlhbG9nQ2xvc2UoKXt0aGlzLl9zdGF0ZT0yLHRoaXMuX3JlZi5jbG9zZSh0aGlzLl9yZXN1bHQse2ZvY3VzT3JpZ2luOnRoaXMuX2Nsb3NlSW50ZXJhY3Rpb25UeXBlfSksdGhpcy5jb21wb25lbnRJbnN0YW5jZT1udWxsfX07ZnVuY3Rpb24geTkobix0LGUpe3JldHVybiBuLl9jbG9zZUludGVyYWN0aW9uVHlwZT10LG4uY2xvc2UoZSl9dmFyIFh2PW5ldyB0ZSgiTWF0TWRjRGlhbG9nRGF0YSIpLFdiZT1uZXcgdGUoIm1hdC1tZGMtZGlhbG9nLWRlZmF1bHQtb3B0aW9ucyIpLHg5PW5ldyB0ZSgibWF0LW1kYy1kaWFsb2ctc2Nyb2xsLXN0cmF0ZWd5IiksWGJlPXtwcm92aWRlOng5LGRlcHM6W09pXSx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4pe3JldHVybigpPT5uLnNjcm9sbFN0cmF0ZWdpZXMuYmxvY2soKX19LFliZT0wLFFiZT0oKCk9PntjbGFzcyBue2dldCBvcGVuRGlhbG9ncygpe3JldHVybiB0aGlzLl9wYXJlbnREaWFsb2c/dGhpcy5fcGFyZW50RGlhbG9nLm9wZW5EaWFsb2dzOnRoaXMuX29wZW5EaWFsb2dzQXRUaGlzTGV2ZWx9Z2V0IGFmdGVyT3BlbmVkKCl7cmV0dXJuIHRoaXMuX3BhcmVudERpYWxvZz90aGlzLl9wYXJlbnREaWFsb2cuYWZ0ZXJPcGVuZWQ6dGhpcy5fYWZ0ZXJPcGVuZWRBdFRoaXNMZXZlbH1fZ2V0QWZ0ZXJBbGxDbG9zZWQoKXtsZXQgZT10aGlzLl9wYXJlbnREaWFsb2c7cmV0dXJuIGU/ZS5fZ2V0QWZ0ZXJBbGxDbG9zZWQoKTp0aGlzLl9hZnRlckFsbENsb3NlZEF0VGhpc0xldmVsfWNvbnN0cnVjdG9yKGUsaSxyLG8sYSxzLGwsYyxkLHUpe3RoaXMuX292ZXJsYXk9ZSx0aGlzLl9kZWZhdWx0T3B0aW9ucz1yLHRoaXMuX3BhcmVudERpYWxvZz1vLHRoaXMuX2RpYWxvZ1JlZkNvbnN0cnVjdG9yPWwsdGhpcy5fZGlhbG9nQ29udGFpbmVyVHlwZT1jLHRoaXMuX2RpYWxvZ0RhdGFUb2tlbj1kLHRoaXMuX29wZW5EaWFsb2dzQXRUaGlzTGV2ZWw9W10sdGhpcy5fYWZ0ZXJBbGxDbG9zZWRBdFRoaXNMZXZlbD1uZXcgRWUsdGhpcy5fYWZ0ZXJPcGVuZWRBdFRoaXNMZXZlbD1uZXcgRWUsdGhpcy5faWRQcmVmaXg9Im1hdC1kaWFsb2ctIix0aGlzLmRpYWxvZ0NvbmZpZ0NsYXNzPXZnLHRoaXMuYWZ0ZXJBbGxDbG9zZWQ9aXMoKCk9PnRoaXMub3BlbkRpYWxvZ3MubGVuZ3RoP3RoaXMuX2dldEFmdGVyQWxsQ2xvc2VkKCk6dGhpcy5fZ2V0QWZ0ZXJBbGxDbG9zZWQoKS5waXBlKGtuKHZvaWQgMCkpKSx0aGlzLl9zY3JvbGxTdHJhdGVneT1zLHRoaXMuX2RpYWxvZz1pLmdldChrMil9b3BlbihlLGkpe2xldCByOyhpPXsuLi50aGlzLl9kZWZhdWx0T3B0aW9uc3x8bmV3IHZnLC4uLml9KS5pZD1pLmlkfHxgJHt0aGlzLl9pZFByZWZpeH0ke1liZSsrfWAsaS5zY3JvbGxTdHJhdGVneT1pLnNjcm9sbFN0cmF0ZWd5fHx0aGlzLl9zY3JvbGxTdHJhdGVneSgpO2xldCBvPXRoaXMuX2RpYWxvZy5vcGVuKGUsey4uLmkscG9zaXRpb25TdHJhdGVneTp0aGlzLl9vdmVybGF5LnBvc2l0aW9uKCkuZ2xvYmFsKCkuY2VudGVySG9yaXpvbnRhbGx5KCkuY2VudGVyVmVydGljYWxseSgpLGRpc2FibGVDbG9zZTohMCxjbG9zZU9uRGVzdHJveTohMSxjbG9zZU9uT3ZlcmxheURldGFjaG1lbnRzOiExLGNvbnRhaW5lcjp7dHlwZTp0aGlzLl9kaWFsb2dDb250YWluZXJUeXBlLHByb3ZpZGVyczooKT0+W3twcm92aWRlOnRoaXMuZGlhbG9nQ29uZmlnQ2xhc3MsdXNlVmFsdWU6aX0se3Byb3ZpZGU6UmgsdXNlVmFsdWU6aX1dfSx0ZW1wbGF0ZUNvbnRleHQ6KCk9Pih7ZGlhbG9nUmVmOnJ9KSxwcm92aWRlcnM6KGEscyxsKT0+KHI9bmV3IHRoaXMuX2RpYWxvZ1JlZkNvbnN0cnVjdG9yKGEsaSxsKSxyLnVwZGF0ZVBvc2l0aW9uKGk/LnBvc2l0aW9uKSxbe3Byb3ZpZGU6dGhpcy5fZGlhbG9nQ29udGFpbmVyVHlwZSx1c2VWYWx1ZTpsfSx7cHJvdmlkZTp0aGlzLl9kaWFsb2dEYXRhVG9rZW4sdXNlVmFsdWU6cy5kYXRhfSx7cHJvdmlkZTp0aGlzLl9kaWFsb2dSZWZDb25zdHJ1Y3Rvcix1c2VWYWx1ZTpyfV0pfSk7cmV0dXJuIHIuY29tcG9uZW50SW5zdGFuY2U9by5jb21wb25lbnRJbnN0YW5jZSx0aGlzLm9wZW5EaWFsb2dzLnB1c2gociksdGhpcy5hZnRlck9wZW5lZC5uZXh0KHIpLHIuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKCk9PntsZXQgYT10aGlzLm9wZW5EaWFsb2dzLmluZGV4T2Yocik7YT4tMSYmKHRoaXMub3BlbkRpYWxvZ3Muc3BsaWNlKGEsMSksdGhpcy5vcGVuRGlhbG9ncy5sZW5ndGh8fHRoaXMuX2dldEFmdGVyQWxsQ2xvc2VkKCkubmV4dCgpKX0pLHJ9Y2xvc2VBbGwoKXt0aGlzLl9jbG9zZURpYWxvZ3ModGhpcy5vcGVuRGlhbG9ncyl9Z2V0RGlhbG9nQnlJZChlKXtyZXR1cm4gdGhpcy5vcGVuRGlhbG9ncy5maW5kKGk9PmkuaWQ9PT1lKX1uZ09uRGVzdHJveSgpe3RoaXMuX2Nsb3NlRGlhbG9ncyh0aGlzLl9vcGVuRGlhbG9nc0F0VGhpc0xldmVsKSx0aGlzLl9hZnRlckFsbENsb3NlZEF0VGhpc0xldmVsLmNvbXBsZXRlKCksdGhpcy5fYWZ0ZXJPcGVuZWRBdFRoaXNMZXZlbC5jb21wbGV0ZSgpfV9jbG9zZURpYWxvZ3MoZSl7bGV0IGk9ZS5sZW5ndGg7Zm9yKDtpLS07KWVbaV0uY2xvc2UoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe2NzKCl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCkseXM9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFFiZXtjb25zdHJ1Y3RvcihlLGkscixvLGEscyxsLGMpe3N1cGVyKGUsaSxvLHMsbCxhLFZsLEdiZSxYdixjKSx0aGlzLl9pZFByZWZpeD0ibWF0LW1kYy1kaWFsb2ctIn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhPaSksTyh3aSksTyhEYiw4KSxPKFdiZSw4KSxPKHg5KSxPKG4sMTIpLE8oX2cpLE8ocGksOCkpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLFpiZT0wLFoxPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuZGlhbG9nUmVmPWUsdGhpcy5fZWxlbWVudFJlZj1pLHRoaXMuX2RpYWxvZz1yLHRoaXMudHlwZT0iYnV0dG9uIn1uZ09uSW5pdCgpe3RoaXMuZGlhbG9nUmVmfHwodGhpcy5kaWFsb2dSZWY9TTkodGhpcy5fZWxlbWVudFJlZix0aGlzLl9kaWFsb2cub3BlbkRpYWxvZ3MpKX1uZ09uQ2hhbmdlcyhlKXtsZXQgaT1lLl9tYXREaWFsb2dDbG9zZXx8ZS5fbWF0RGlhbG9nQ2xvc2VSZXN1bHQ7aSYmKHRoaXMuZGlhbG9nUmVzdWx0PWkuY3VycmVudFZhbHVlKX1fb25CdXR0b25DbGljayhlKXt5OSh0aGlzLmRpYWxvZ1JlZiwwPT09ZS5zY3JlZW5YJiYwPT09ZS5zY3JlZW5ZPyJrZXlib2FyZCI6Im1vdXNlIix0aGlzLmRpYWxvZ1Jlc3VsdCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoVmwsOCksQyh4ZSksQyh5cykpfSxuLlx1MDI3NWRpcj1NZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXQtZGlhbG9nLWNsb3NlIiwiIl0sWyIiLCJtYXREaWFsb2dDbG9zZSIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmQSgiY2xpY2siLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9vbkJ1dHRvbkNsaWNrKG8pfSksMiZlJiZCZSgiYXJpYS1sYWJlbCIsaS5hcmlhTGFiZWx8fG51bGwpKCJ0eXBlIixpLnR5cGUpfSxpbnB1dHM6e2FyaWFMYWJlbDpbImFyaWEtbGFiZWwiLCJhcmlhTGFiZWwiXSx0eXBlOiJ0eXBlIixkaWFsb2dSZXN1bHQ6WyJtYXQtZGlhbG9nLWNsb3NlIiwiZGlhbG9nUmVzdWx0Il0sX21hdERpYWxvZ0Nsb3NlOlsibWF0RGlhbG9nQ2xvc2UiLCJfbWF0RGlhbG9nQ2xvc2UiXX0sZXhwb3J0QXM6WyJtYXREaWFsb2dDbG9zZSJdLGZlYXR1cmVzOltxdF19KSxufSkoKSxDOT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl9kaWFsb2dSZWY9ZSx0aGlzLl9lbGVtZW50UmVmPWksdGhpcy5fZGlhbG9nPXIsdGhpcy5pZD0ibWF0LW1kYy1kaWFsb2ctdGl0bGUtIitaYmUrK31uZ09uSW5pdCgpe3RoaXMuX2RpYWxvZ1JlZnx8KHRoaXMuX2RpYWxvZ1JlZj1NOSh0aGlzLl9lbGVtZW50UmVmLHRoaXMuX2RpYWxvZy5vcGVuRGlhbG9ncykpLHRoaXMuX2RpYWxvZ1JlZiYmUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e2xldCBlPXRoaXMuX2RpYWxvZ1JlZi5fY29udGFpbmVySW5zdGFuY2U7ZSYmIWUuX2FyaWFMYWJlbGxlZEJ5JiYoZS5fYXJpYUxhYmVsbGVkQnk9dGhpcy5pZCl9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhWbCw4KSxDKHhlKSxDKHlzKSl9LG4uXHUwMjc1ZGlyPU1lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdC1kaWFsb2ctdGl0bGUiLCIiXSxbIiIsIm1hdERpYWxvZ1RpdGxlIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LW1kYy1kaWFsb2ctdGl0bGUiLCJtZGMtZGlhbG9nX190aXRsZSJdLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZ3bygiaWQiLGkuaWQpfSxpbnB1dHM6e2lkOiJpZCJ9LGV4cG9ydEFzOlsibWF0RGlhbG9nVGl0bGUiXX0pLG59KSgpLEsxPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWRpcj1NZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXQtZGlhbG9nLWNvbnRlbnQiLCIiXSxbIm1hdC1kaWFsb2ctY29udGVudCJdLFsiIiwibWF0RGlhbG9nQ29udGVudCIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1tZGMtZGlhbG9nLWNvbnRlbnQiLCJtZGMtZGlhbG9nX19jb250ZW50Il19KSxufSkoKSxKMT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5hbGlnbj0ic3RhcnQifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVkaXI9TWUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibWF0LWRpYWxvZy1hY3Rpb25zIiwiIl0sWyJtYXQtZGlhbG9nLWFjdGlvbnMiXSxbIiIsIm1hdERpYWxvZ0FjdGlvbnMiLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtbWRjLWRpYWxvZy1hY3Rpb25zIiwibWRjLWRpYWxvZ19fYWN0aW9ucyJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZudCgibWF0LW1kYy1kaWFsb2ctYWN0aW9ucy1hbGlnbi1jZW50ZXIiLCJjZW50ZXIiPT09aS5hbGlnbikoIm1hdC1tZGMtZGlhbG9nLWFjdGlvbnMtYWxpZ24tZW5kIiwiZW5kIj09PWkuYWxpZ24pfSxpbnB1dHM6e2FsaWduOiJhbGlnbiJ9fSksbn0pKCk7ZnVuY3Rpb24gTTkobix0KXtsZXQgZT1uLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDtmb3IoO2UmJiFlLmNsYXNzTGlzdC5jb250YWlucygibWF0LW1kYy1kaWFsb2ctY29udGFpbmVyIik7KWU9ZS5wYXJlbnRFbGVtZW50O3JldHVybiBlP3QuZmluZChpPT5pLmlkPT09ZS5pZCk6bnVsbH12YXIgSHU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe3Byb3ZpZGVyczpbeXMsWGJlXSxpbXBvcnRzOlttOSxEbyxCbCxkbixkbl19KSxufSkoKSx2OT17cGFyYW1zOntlbnRlckFuaW1hdGlvbkR1cmF0aW9uOiIxNTBtcyIsZXhpdEFuaW1hdGlvbkR1cmF0aW9uOiI3NW1zIn19LEtiZT0oZnIoImRpYWxvZ0NvbnRhaW5lciIsW1NpKCJ2b2lkLCBleGl0Iixybih7b3BhY2l0eTowLHRyYW5zZm9ybToic2NhbGUoMC43KSJ9KSksU2koImVudGVyIixybih7dHJhbnNmb3JtOiJub25lIn0pKSxiaSgiKiA9PiBlbnRlciIsTGIoW01pKCJ7e2VudGVyQW5pbWF0aW9uRHVyYXRpb259fSBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSIscm4oe3RyYW5zZm9ybToibm9uZSIsb3BhY2l0eToxfSkpLHJoKCJAKiIsaWgoKSx7b3B0aW9uYWw6ITB9KV0pLHY5KSxiaSgiKiA9PiB2b2lkLCAqID0+IGV4aXQiLExiKFtNaSgie3tleGl0QW5pbWF0aW9uRHVyYXRpb259fSBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSkiLHJuKHtvcGFjaXR5OjB9KSkscmgoIkAqIixpaCgpLHtvcHRpb25hbDohMH0pXSksdjkpXSksWyJtYXRGb3JtRmllbGROb3RjaGVkT3V0bGluZSIsIiJdKSxKYmU9WyIqIl0sJGJlPVsidGV4dEZpZWxkIl0sZXZlPVsiaWNvblByZWZpeENvbnRhaW5lciJdLHR2ZT1bInRleHRQcmVmaXhDb250YWluZXIiXTtmdW5jdGlvbiBudmUobix0KXsxJm4mJmsoMCwic3BhbiIsMTkpfWZ1bmN0aW9uIGl2ZShuLHQpe2lmKDEmbil7bGV0IGU9VGUoKTtmKDAsImxhYmVsIiwxNyksQSgiY2RrT2JzZXJ2ZUNvbnRlbnQiLGZ1bmN0aW9uKCl7cmV0dXJuIG5lKGUpLGllKHcoMikuX3JlZnJlc2hPdXRsaW5lTm90Y2hXaWR0aCgpKX0pLFR0KDEsMSksUygyLG52ZSwxLDAsInNwYW4iLDE4KSxnKCl9aWYoMiZuKXtsZXQgZT13KDIpO2IoImZsb2F0aW5nIixlLl9zaG91bGRMYWJlbEZsb2F0KCkpKCJjZGtPYnNlcnZlQ29udGVudERpc2FibGVkIiwhZS5faGFzT3V0bGluZSgpKSgiaWQiLGUuX2xhYmVsSWQpLEJlKCJmb3IiLGUuX2NvbnRyb2wuaWQpKCJhcmlhLW93bnMiLGUuX2NvbnRyb2wuaWQpLHYoMiksYigibmdJZiIsIWUuaGlkZVJlcXVpcmVkTWFya2VyJiZlLl9jb250cm9sLnJlcXVpcmVkKX19ZnVuY3Rpb24gcnZlKG4sdCl7MSZuJiZTKDAsaXZlLDMsNiwibGFiZWwiLDE2KSwyJm4mJmIoIm5nSWYiLHcoKS5faGFzRmxvYXRpbmdMYWJlbCgpKX1mdW5jdGlvbiBvdmUobix0KXsxJm4mJmsoMCwiZGl2IiwyMCl9ZnVuY3Rpb24gYXZlKG4sdCl7fWZ1bmN0aW9uIHN2ZShuLHQpezEmbiYmUygwLGF2ZSwwLDAsIm5nLXRlbXBsYXRlIiwyMiksMiZuJiYodygyKSxiKCJuZ1RlbXBsYXRlT3V0bGV0IixzdCgxKSkpfWZ1bmN0aW9uIGx2ZShuLHQpe2lmKDEmbiYmKGYoMCwiZGl2IiwyMSksUygxLHN2ZSwxLDEsIm5nLXRlbXBsYXRlIiw5KSxnKCkpLDImbil7bGV0IGU9dygpO2IoIm1hdEZvcm1GaWVsZE5vdGNoZWRPdXRsaW5lT3BlbiIsZS5fc2hvdWxkTGFiZWxGbG9hdCgpKSgibWF0Rm9ybUZpZWxkTm90Y2hlZE91dGxpbmVMYWJlbFdpZHRoIixlLl9sYWJlbFdpZHRoKSx2KDEpLGIoIm5nSWYiLCFlLl9mb3JjZURpc3BsYXlJbmZpeExhYmVsKCkpfX1mdW5jdGlvbiBjdmUobix0KXsxJm4mJihmKDAsImRpdiIsMjMsMjQpLFR0KDIsMiksZygpKX1mdW5jdGlvbiBkdmUobix0KXsxJm4mJihmKDAsImRpdiIsMjUsMjYpLFR0KDIsMyksZygpKX1mdW5jdGlvbiB1dmUobix0KXt9ZnVuY3Rpb24gcHZlKG4sdCl7MSZuJiZTKDAsdXZlLDAsMCwibmctdGVtcGxhdGUiLDIyKSwyJm4mJih3KCksYigibmdUZW1wbGF0ZU91dGxldCIsc3QoMSkpKX1mdW5jdGlvbiBodmUobix0KXsxJm4mJihmKDAsImRpdiIsMjcpLFR0KDEsNCksZygpKX1mdW5jdGlvbiBtdmUobix0KXsxJm4mJihmKDAsImRpdiIsMjgpLFR0KDEsNSksZygpKX1mdW5jdGlvbiBmdmUobix0KXsxJm4mJmsoMCwiZGl2IiwyOSl9ZnVuY3Rpb24gZ3ZlKG4sdCl7MSZuJiYoZigwLCJkaXYiLDMwKSxUdCgxLDYpLGcoKSksMiZuJiZiKCJAdHJhbnNpdGlvbk1lc3NhZ2VzIix3KCkuX3N1YnNjcmlwdEFuaW1hdGlvblN0YXRlKX1mdW5jdGlvbiBfdmUobix0KXtpZigxJm4mJihmKDAsIm1hdC1oaW50IiwzNCksVCgxKSxnKCkpLDImbil7bGV0IGU9dygyKTtiKCJpZCIsZS5faGludExhYmVsSWQpLHYoMSksa3QoZS5oaW50TGFiZWwpfX1mdW5jdGlvbiBidmUobix0KXtpZigxJm4mJihmKDAsImRpdiIsMzEpLFMoMSxfdmUsMiwyLCJtYXQtaGludCIsMzIpLFR0KDIsNyksaygzLCJkaXYiLDMzKSxUdCg0LDgpLGcoKSksMiZuKXtsZXQgZT13KCk7YigiQHRyYW5zaXRpb25NZXNzYWdlcyIsZS5fc3Vic2NyaXB0QW5pbWF0aW9uU3RhdGUpLHYoMSksYigibmdJZiIsZS5oaW50TGFiZWwpfX12YXIgdnZlPVsiKiIsW1sibWF0LWxhYmVsIl1dLFtbIiIsIm1hdFByZWZpeCIsIiJdLFsiIiwibWF0SWNvblByZWZpeCIsIiJdXSxbWyIiLCJtYXRUZXh0UHJlZml4IiwiIl1dLFtbIiIsIm1hdFRleHRTdWZmaXgiLCIiXV0sW1siIiwibWF0U3VmZml4IiwiIl0sWyIiLCJtYXRJY29uU3VmZml4IiwiIl1dLFtbIm1hdC1lcnJvciJdLFsiIiwibWF0RXJyb3IiLCIiXV0sW1sibWF0LWhpbnQiLDMsImFsaWduIiwiZW5kIl1dLFtbIm1hdC1oaW50IiwiYWxpZ24iLCJlbmQiXV1dLHl2ZT1bIioiLCJtYXQtbGFiZWwiLCJbbWF0UHJlZml4XSwgW21hdEljb25QcmVmaXhdIiwiW21hdFRleHRQcmVmaXhdIiwiW21hdFRleHRTdWZmaXhdIiwiW21hdFN1ZmZpeF0sIFttYXRJY29uU3VmZml4XSIsIm1hdC1lcnJvciwgW21hdEVycm9yXSIsIm1hdC1oaW50Om5vdChbYWxpZ249J2VuZCddKSIsIm1hdC1oaW50W2FsaWduPSdlbmQnXSJdLG5sPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWRpcj1NZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtbGFiZWwiXV19KSxufSkoKSx4dmU9MCxQOT1uZXcgdGUoIk1hdEVycm9yIiksazk9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuaWQ9Im1hdC1tZGMtZXJyb3ItIit4dmUrKyxlfHxpLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWxpdmUiLCJwb2xpdGUiKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTW8oImFyaWEtbGl2ZSIpLEMoeGUpKX0sbi5cdTAyNzVkaXI9TWUoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LWVycm9yIl0sWyIiLCJtYXRFcnJvciIsIiJdXSxob3N0QXR0cnM6WyJhcmlhLWF0b21pYyIsInRydWUiLDEsIm1hdC1tZGMtZm9ybS1maWVsZC1lcnJvciIsIm1hdC1tZGMtZm9ybS1maWVsZC1ib3R0b20tYWxpZ24iXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmd28oImlkIixpLmlkKX0saW5wdXRzOntpZDoiaWQifSxmZWF0dXJlczpbVnQoW3twcm92aWRlOlA5LHVzZUV4aXN0aW5nOm59XSldfSksbn0pKCksQ3ZlPTAsdzk9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuYWxpZ249InN0YXJ0Iix0aGlzLmlkPSJtYXQtbWRjLWhpbnQtIitDdmUrK319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1ZGlyPU1lKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1oaW50Il1dLGhvc3RBdHRyczpbMSwibWF0LW1kYy1mb3JtLWZpZWxkLWhpbnQiLCJtYXQtbWRjLWZvcm0tZmllbGQtYm90dG9tLWFsaWduIl0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJih3bygiaWQiLGkuaWQpLEJlKCJhbGlnbiIsbnVsbCksbnQoIm1hdC1tZGMtZm9ybS1maWVsZC1oaW50LWVuZCIsImVuZCI9PT1pLmFsaWduKSl9LGlucHV0czp7YWxpZ246ImFsaWduIixpZDoiaWQifX0pLG59KSgpLE85PW5ldyB0ZSgiTWF0UHJlZml4IiksRjk9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuX2lzVGV4dD0hMX1zZXQgX2lzVGV4dFNlbGVjdG9yKGUpe3RoaXMuX2lzVGV4dD0hMH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1ZGlyPU1lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdFByZWZpeCIsIiJdLFsiIiwibWF0SWNvblByZWZpeCIsIiJdLFsiIiwibWF0VGV4dFByZWZpeCIsIiJdXSxpbnB1dHM6e19pc1RleHRTZWxlY3RvcjpbIm1hdFRleHRQcmVmaXgiLCJfaXNUZXh0U2VsZWN0b3IiXX0sZmVhdHVyZXM6W1Z0KFt7cHJvdmlkZTpPOSx1c2VFeGlzdGluZzpufV0pXX0pLG59KSgpLE12ZT1uZXcgdGUoIk1hdFN1ZmZpeCIpLFM5PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuZmxvYXRpbmc9ITF9Z2V0V2lkdGgoKXtyZXR1cm4gZnVuY3Rpb24obil7aWYobnVsbCE9PW4ub2Zmc2V0UGFyZW50KXJldHVybiBuLnNjcm9sbFdpZHRoO2xldCBlPW4uY2xvbmVOb2RlKCEwKTtlLnN0eWxlLnNldFByb3BlcnR5KCJwb3NpdGlvbiIsImFic29sdXRlIiksZS5zdHlsZS5zZXRQcm9wZXJ0eSgidHJhbnNmb3JtIiwidHJhbnNsYXRlKC05OTk5cHgsIC05OTk5cHgpIiksZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKGUpO2xldCBpPWUuc2Nyb2xsV2lkdGg7cmV0dXJuIGUucmVtb3ZlKCksaX0odGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KX1nZXQgZWxlbWVudCgpe3JldHVybiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnR9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoeGUpKX0sbi5cdTAyNzVkaXI9TWUoe3R5cGU6bixzZWxlY3RvcnM6W1sibGFiZWwiLCJtYXRGb3JtRmllbGRGbG9hdGluZ0xhYmVsIiwiIl1dLGhvc3RBdHRyczpbMSwibWRjLWZsb2F0aW5nLWxhYmVsIiwibWF0LW1kYy1mbG9hdGluZy1sYWJlbCJdLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZudCgibWRjLWZsb2F0aW5nLWxhYmVsLS1mbG9hdC1hYm92ZSIsaS5mbG9hdGluZyl9LGlucHV0czp7ZmxvYXRpbmc6ImZsb2F0aW5nIn19KSxufSkoKSxFOT0ibWRjLWxpbmUtcmlwcGxlLS1hY3RpdmUiLCQxPSJtZGMtbGluZS1yaXBwbGUtLWRlYWN0aXZhdGluZyIsVDk9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9oYW5kbGVUcmFuc2l0aW9uRW5kPXI9PntsZXQgbz10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LGE9by5jb250YWlucygkMSk7Im9wYWNpdHkiPT09ci5wcm9wZXJ0eU5hbWUmJmEmJm8ucmVtb3ZlKEU5LCQxKX0saS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2UubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIix0aGlzLl9oYW5kbGVUcmFuc2l0aW9uRW5kKX0pfWFjdGl2YXRlKCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdDtlLnJlbW92ZSgkMSksZS5hZGQoRTkpfWRlYWN0aXZhdGUoKXt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgkMSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsdGhpcy5faGFuZGxlVHJhbnNpdGlvbkVuZCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoeGUpLEMob3QpKX0sbi5cdTAyNzVkaXI9TWUoe3R5cGU6bixzZWxlY3RvcnM6W1siZGl2IiwibWF0Rm9ybUZpZWxkTGluZVJpcHBsZSIsIiJdXSxob3N0QXR0cnM6WzEsIm1kYy1saW5lLXJpcHBsZSJdfSksbn0pKCksRDk9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9uZ1pvbmU9aSx0aGlzLmxhYmVsV2lkdGg9MCx0aGlzLm9wZW49ITF9bmdBZnRlclZpZXdJbml0KCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5tZGMtZmxvYXRpbmctbGFiZWwiKTtlPyh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgibWRjLW5vdGNoZWQtb3V0bGluZS0tdXBncmFkZWQiKSwiZnVuY3Rpb24iPT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lJiYoZS5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb249IjBzIix0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PmUuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uPSIiKX0pKSk6dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoIm1kYy1ub3RjaGVkLW91dGxpbmUtLW5vLWxhYmVsIil9X2dldE5vdGNoV2lkdGgoKXtyZXR1cm4gdGhpcy5vcGVuP3RoaXMubGFiZWxXaWR0aD4wP2BjYWxjKCR7dGhpcy5sYWJlbFdpZHRofXB4ICogdmFyKC0tbWF0LW1kYy1mb3JtLWZpZWxkLWZsb2F0aW5nLWxhYmVsLXNjYWxlLCAwLjc1KSArIDlweClgOiIwcHgiOm51bGx9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoeGUpLEMob3QpKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJkaXYiLCJtYXRGb3JtRmllbGROb3RjaGVkT3V0bGluZSIsIiJdXSxob3N0QXR0cnM6WzEsIm1kYy1ub3RjaGVkLW91dGxpbmUiXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmbnQoIm1kYy1ub3RjaGVkLW91dGxpbmUtLW5vdGNoZWQiLGkub3Blbil9LGlucHV0czp7bGFiZWxXaWR0aDpbIm1hdEZvcm1GaWVsZE5vdGNoZWRPdXRsaW5lTGFiZWxXaWR0aCIsImxhYmVsV2lkdGgiXSxvcGVuOlsibWF0Rm9ybUZpZWxkTm90Y2hlZE91dGxpbmVPcGVuIiwib3BlbiJdfSxhdHRyczpLYmUsbmdDb250ZW50U2VsZWN0b3JzOkpiZSxkZWNsczo0LHZhcnM6Mixjb25zdHM6W1sxLCJtZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nIl0sWzEsIm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoIl0sWzEsIm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5nIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZm4oKSxrKDAsImRpdiIsMCksZigxLCJkaXYiLDEpLFR0KDIpLGcoKSxrKDMsImRpdiIsMikpLDImZSYmKHYoMSksQnQoIndpZHRoIixpLl9nZXROb3RjaFdpZHRoKCkpKX0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksU3ZlPXt0cmFuc2l0aW9uTWVzc2FnZXM6ZnIoInRyYW5zaXRpb25NZXNzYWdlcyIsW1NpKCJlbnRlciIscm4oe29wYWNpdHk6MSx0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMCUpIn0pKSxiaSgidm9pZCA9PiBlbnRlciIsW3JuKHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJ0cmFuc2xhdGVZKC01cHgpIn0pLE1pKCIzMDBtcyBjdWJpYy1iZXppZXIoMC41NSwgMCwgMC41NSwgMC4yKSIpXSldKX0sWXY9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1ZGlyPU1lKHt0eXBlOm59KSxufSkoKSxQaD1uZXcgdGUoIk1hdEZvcm1GaWVsZCIpLEV2ZT1uZXcgdGUoIk1BVF9GT1JNX0ZJRUxEX0RFRkFVTFRfT1BUSU9OUyIpLEk5PTAsUGM9KCgpPT57Y2xhc3MgbntnZXQgaGlkZVJlcXVpcmVkTWFya2VyKCl7cmV0dXJuIHRoaXMuX2hpZGVSZXF1aXJlZE1hcmtlcn1zZXQgaGlkZVJlcXVpcmVkTWFya2VyKGUpe3RoaXMuX2hpZGVSZXF1aXJlZE1hcmtlcj12dChlKX1nZXQgZmxvYXRMYWJlbCgpe3JldHVybiB0aGlzLl9mbG9hdExhYmVsfHx0aGlzLl9kZWZhdWx0cz8uZmxvYXRMYWJlbHx8ImF1dG8ifXNldCBmbG9hdExhYmVsKGUpe2UhPT10aGlzLl9mbG9hdExhYmVsJiYodGhpcy5fZmxvYXRMYWJlbD1lLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1nZXQgYXBwZWFyYW5jZSgpe3JldHVybiB0aGlzLl9hcHBlYXJhbmNlfXNldCBhcHBlYXJhbmNlKGUpe2xldCBpPXRoaXMuX2FwcGVhcmFuY2U7dGhpcy5fYXBwZWFyYW5jZT1lfHx0aGlzLl9kZWZhdWx0cz8uYXBwZWFyYW5jZXx8ImZpbGwiLCJvdXRsaW5lIj09PXRoaXMuX2FwcGVhcmFuY2UmJnRoaXMuX2FwcGVhcmFuY2UhPT1pJiYodGhpcy5fcmVmcmVzaE91dGxpbmVOb3RjaFdpZHRoKCksdGhpcy5fbmVlZHNPdXRsaW5lTGFiZWxPZmZzZXRVcGRhdGVPblN0YWJsZT0hMCl9Z2V0IHN1YnNjcmlwdFNpemluZygpe3JldHVybiB0aGlzLl9zdWJzY3JpcHRTaXppbmd8fHRoaXMuX2RlZmF1bHRzPy5zdWJzY3JpcHRTaXppbmd8fCJmaXhlZCJ9c2V0IHN1YnNjcmlwdFNpemluZyhlKXt0aGlzLl9zdWJzY3JpcHRTaXppbmc9ZXx8dGhpcy5fZGVmYXVsdHM/LnN1YnNjcmlwdFNpemluZ3x8ImZpeGVkIn1nZXQgaGludExhYmVsKCl7cmV0dXJuIHRoaXMuX2hpbnRMYWJlbH1zZXQgaGludExhYmVsKGUpe3RoaXMuX2hpbnRMYWJlbD1lLHRoaXMuX3Byb2Nlc3NIaW50cygpfWdldCBfY29udHJvbCgpe3JldHVybiB0aGlzLl9leHBsaWNpdEZvcm1GaWVsZENvbnRyb2x8fHRoaXMuX2Zvcm1GaWVsZENvbnRyb2x9c2V0IF9jb250cm9sKGUpe3RoaXMuX2V4cGxpY2l0Rm9ybUZpZWxkQ29udHJvbD1lfWNvbnN0cnVjdG9yKGUsaSxyLG8sYSxzLGwsYyl7dGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWksdGhpcy5fbmdab25lPXIsdGhpcy5fZGlyPW8sdGhpcy5fcGxhdGZvcm09YSx0aGlzLl9kZWZhdWx0cz1zLHRoaXMuX2FuaW1hdGlvbk1vZGU9bCx0aGlzLl9kb2N1bWVudD1jLHRoaXMuX2hpZGVSZXF1aXJlZE1hcmtlcj0hMSx0aGlzLmNvbG9yPSJwcmltYXJ5Iix0aGlzLl9hcHBlYXJhbmNlPSJmaWxsIix0aGlzLl9zdWJzY3JpcHRTaXppbmc9bnVsbCx0aGlzLl9oaW50TGFiZWw9IiIsdGhpcy5faGFzSWNvblByZWZpeD0hMSx0aGlzLl9oYXNUZXh0UHJlZml4PSExLHRoaXMuX2hhc0ljb25TdWZmaXg9ITEsdGhpcy5faGFzVGV4dFN1ZmZpeD0hMSx0aGlzLl9sYWJlbElkPSJtYXQtbWRjLWZvcm0tZmllbGQtbGFiZWwtIitJOSsrLHRoaXMuX2hpbnRMYWJlbElkPSJtYXQtbWRjLWhpbnQtIitJOSsrLHRoaXMuX3N1YnNjcmlwdEFuaW1hdGlvblN0YXRlPSIiLHRoaXMuX2xhYmVsV2lkdGg9MCx0aGlzLl9kZXN0cm95ZWQ9bmV3IEVlLHRoaXMuX2lzRm9jdXNlZD1udWxsLHRoaXMuX25lZWRzT3V0bGluZUxhYmVsT2Zmc2V0VXBkYXRlT25TdGFibGU9ITEscyYmKHMuYXBwZWFyYW5jZSYmKHRoaXMuYXBwZWFyYW5jZT1zLmFwcGVhcmFuY2UpLHRoaXMuX2hpZGVSZXF1aXJlZE1hcmtlcj1Cb29sZWFuKHM/LmhpZGVSZXF1aXJlZE1hcmtlcikscy5jb2xvciYmKHRoaXMuY29sb3I9cy5jb2xvcikpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX3VwZGF0ZUZvY3VzU3RhdGUoKSx0aGlzLl9yZWZyZXNoT3V0bGluZU5vdGNoV2lkdGgoKSx0aGlzLl9kb2N1bWVudD8uZm9udHM/LnJlYWR5P3RoaXMuX2RvY3VtZW50LmZvbnRzLnJlYWR5LnRoZW4oKCk9Pnt0aGlzLl9yZWZyZXNoT3V0bGluZU5vdGNoV2lkdGgoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pOnNldFRpbWVvdXQoKCk9PnRoaXMuX3JlZnJlc2hPdXRsaW5lTm90Y2hXaWR0aCgpLDEwMCksdGhpcy5fc3Vic2NyaXB0QW5pbWF0aW9uU3RhdGU9ImVudGVyIix0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5fYXNzZXJ0Rm9ybUZpZWxkQ29udHJvbCgpLHRoaXMuX2luaXRpYWxpemVDb250cm9sKCksdGhpcy5faW5pdGlhbGl6ZVN1YnNjcmlwdCgpLHRoaXMuX2luaXRpYWxpemVQcmVmaXhBbmRTdWZmaXgoKSx0aGlzLl9pbml0aWFsaXplT3V0bGluZUxhYmVsT2Zmc2V0U3Vic2NyaXB0aW9ucygpfW5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpe3RoaXMuX2Fzc2VydEZvcm1GaWVsZENvbnRyb2woKX1uZ09uRGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZC5uZXh0KCksdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCl9Z2V0TGFiZWxJZCgpe3JldHVybiB0aGlzLl9oYXNGbG9hdGluZ0xhYmVsKCk/dGhpcy5fbGFiZWxJZDpudWxsfWdldENvbm5lY3RlZE92ZXJsYXlPcmlnaW4oKXtyZXR1cm4gdGhpcy5fdGV4dEZpZWxkfHx0aGlzLl9lbGVtZW50UmVmfV9hbmltYXRlQW5kTG9ja0xhYmVsKCl7dGhpcy5faGFzRmxvYXRpbmdMYWJlbCgpJiYodGhpcy5mbG9hdExhYmVsPSJhbHdheXMiKX1faW5pdGlhbGl6ZUNvbnRyb2woKXtsZXQgZT10aGlzLl9jb250cm9sO2UuY29udHJvbFR5cGUmJnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKGBtYXQtbWRjLWZvcm0tZmllbGQtdHlwZS0ke2UuY29udHJvbFR5cGV9YCksZS5zdGF0ZUNoYW5nZXMuc3Vic2NyaWJlKCgpPT57dGhpcy5fdXBkYXRlRm9jdXNTdGF0ZSgpLHRoaXMuX3N5bmNEZXNjcmliZWRCeUlkcygpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksZS5uZ0NvbnRyb2wmJmUubmdDb250cm9sLnZhbHVlQ2hhbmdlcyYmZS5uZ0NvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoaXQodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpPT50aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9X2NoZWNrUHJlZml4QW5kU3VmZml4VHlwZXMoKXt0aGlzLl9oYXNJY29uUHJlZml4PSEhdGhpcy5fcHJlZml4Q2hpbGRyZW4uZmluZChlPT4hZS5faXNUZXh0KSx0aGlzLl9oYXNUZXh0UHJlZml4PSEhdGhpcy5fcHJlZml4Q2hpbGRyZW4uZmluZChlPT5lLl9pc1RleHQpLHRoaXMuX2hhc0ljb25TdWZmaXg9ISF0aGlzLl9zdWZmaXhDaGlsZHJlbi5maW5kKGU9PiFlLl9pc1RleHQpLHRoaXMuX2hhc1RleHRTdWZmaXg9ISF0aGlzLl9zdWZmaXhDaGlsZHJlbi5maW5kKGU9PmUuX2lzVGV4dCl9X2luaXRpYWxpemVQcmVmaXhBbmRTdWZmaXgoKXt0aGlzLl9jaGVja1ByZWZpeEFuZFN1ZmZpeFR5cGVzKCksdG4odGhpcy5fcHJlZml4Q2hpbGRyZW4uY2hhbmdlcyx0aGlzLl9zdWZmaXhDaGlsZHJlbi5jaGFuZ2VzKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9jaGVja1ByZWZpeEFuZFN1ZmZpeFR5cGVzKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KX1faW5pdGlhbGl6ZVN1YnNjcmlwdCgpe3RoaXMuX2hpbnRDaGlsZHJlbi5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuX3Byb2Nlc3NIaW50cygpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksdGhpcy5fZXJyb3JDaGlsZHJlbi5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuX3N5bmNEZXNjcmliZWRCeUlkcygpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksdGhpcy5fdmFsaWRhdGVIaW50cygpLHRoaXMuX3N5bmNEZXNjcmliZWRCeUlkcygpfV9hc3NlcnRGb3JtRmllbGRDb250cm9sKCl7fV91cGRhdGVGb2N1c1N0YXRlKCl7dGhpcy5fY29udHJvbC5mb2N1c2VkJiYhdGhpcy5faXNGb2N1c2VkPyh0aGlzLl9pc0ZvY3VzZWQ9ITAsdGhpcy5fbGluZVJpcHBsZT8uYWN0aXZhdGUoKSk6IXRoaXMuX2NvbnRyb2wuZm9jdXNlZCYmKHRoaXMuX2lzRm9jdXNlZHx8bnVsbD09PXRoaXMuX2lzRm9jdXNlZCkmJih0aGlzLl9pc0ZvY3VzZWQ9ITEsdGhpcy5fbGluZVJpcHBsZT8uZGVhY3RpdmF0ZSgpKSx0aGlzLl90ZXh0RmllbGQ/Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZSgibWRjLXRleHQtZmllbGQtLWZvY3VzZWQiLHRoaXMuX2NvbnRyb2wuZm9jdXNlZCl9X2luaXRpYWxpemVPdXRsaW5lTGFiZWxPZmZzZXRTdWJzY3JpcHRpb25zKCl7dGhpcy5fcHJlZml4Q2hpbGRyZW4uY2hhbmdlcy5zdWJzY3JpYmUoKCk9PnRoaXMuX25lZWRzT3V0bGluZUxhYmVsT2Zmc2V0VXBkYXRlT25TdGFibGU9ITApLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKGl0KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX25lZWRzT3V0bGluZUxhYmVsT2Zmc2V0VXBkYXRlT25TdGFibGUmJih0aGlzLl9uZWVkc091dGxpbmVMYWJlbE9mZnNldFVwZGF0ZU9uU3RhYmxlPSExLHRoaXMuX3VwZGF0ZU91dGxpbmVMYWJlbE9mZnNldCgpKX0pfSksdGhpcy5fZGlyLmNoYW5nZS5waXBlKGl0KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+dGhpcy5fbmVlZHNPdXRsaW5lTGFiZWxPZmZzZXRVcGRhdGVPblN0YWJsZT0hMCl9X3Nob3VsZEFsd2F5c0Zsb2F0KCl7cmV0dXJuImFsd2F5cyI9PT10aGlzLmZsb2F0TGFiZWx9X2hhc091dGxpbmUoKXtyZXR1cm4ib3V0bGluZSI9PT10aGlzLmFwcGVhcmFuY2V9X2ZvcmNlRGlzcGxheUluZml4TGFiZWwoKXtyZXR1cm4hdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiZ0aGlzLl9wcmVmaXhDaGlsZHJlbi5sZW5ndGgmJiF0aGlzLl9zaG91bGRMYWJlbEZsb2F0KCl9X2hhc0Zsb2F0aW5nTGFiZWwoKXtyZXR1cm4hIXRoaXMuX2xhYmVsQ2hpbGROb25TdGF0aWN8fCEhdGhpcy5fbGFiZWxDaGlsZFN0YXRpY31fc2hvdWxkTGFiZWxGbG9hdCgpe3JldHVybiB0aGlzLl9jb250cm9sLnNob3VsZExhYmVsRmxvYXR8fHRoaXMuX3Nob3VsZEFsd2F5c0Zsb2F0KCl9X3Nob3VsZEZvcndhcmQoZSl7bGV0IGk9dGhpcy5fY29udHJvbD90aGlzLl9jb250cm9sLm5nQ29udHJvbDpudWxsO3JldHVybiBpJiZpW2VdfV9nZXREaXNwbGF5ZWRNZXNzYWdlcygpe3JldHVybiB0aGlzLl9lcnJvckNoaWxkcmVuJiZ0aGlzLl9lcnJvckNoaWxkcmVuLmxlbmd0aD4wJiZ0aGlzLl9jb250cm9sLmVycm9yU3RhdGU/ImVycm9yIjoiaGludCJ9X3JlZnJlc2hPdXRsaW5lTm90Y2hXaWR0aCgpeyF0aGlzLl9oYXNPdXRsaW5lKCl8fCF0aGlzLl9mbG9hdGluZ0xhYmVsfHwodGhpcy5fbGFiZWxXaWR0aD10aGlzLl9mbG9hdGluZ0xhYmVsLmdldFdpZHRoKCkpfV9wcm9jZXNzSGludHMoKXt0aGlzLl92YWxpZGF0ZUhpbnRzKCksdGhpcy5fc3luY0Rlc2NyaWJlZEJ5SWRzKCl9X3ZhbGlkYXRlSGludHMoKXt9X3N5bmNEZXNjcmliZWRCeUlkcygpe2lmKHRoaXMuX2NvbnRyb2wpe2xldCBlPVtdO2lmKHRoaXMuX2NvbnRyb2wudXNlckFyaWFEZXNjcmliZWRCeSYmInN0cmluZyI9PXR5cGVvZiB0aGlzLl9jb250cm9sLnVzZXJBcmlhRGVzY3JpYmVkQnkmJmUucHVzaCguLi50aGlzLl9jb250cm9sLnVzZXJBcmlhRGVzY3JpYmVkQnkuc3BsaXQoIiAiKSksImhpbnQiPT09dGhpcy5fZ2V0RGlzcGxheWVkTWVzc2FnZXMoKSl7bGV0IGk9dGhpcy5faGludENoaWxkcmVuP3RoaXMuX2hpbnRDaGlsZHJlbi5maW5kKG89PiJzdGFydCI9PT1vLmFsaWduKTpudWxsLHI9dGhpcy5faGludENoaWxkcmVuP3RoaXMuX2hpbnRDaGlsZHJlbi5maW5kKG89PiJlbmQiPT09by5hbGlnbik6bnVsbDtpP2UucHVzaChpLmlkKTp0aGlzLl9oaW50TGFiZWwmJmUucHVzaCh0aGlzLl9oaW50TGFiZWxJZCksciYmZS5wdXNoKHIuaWQpfWVsc2UgdGhpcy5fZXJyb3JDaGlsZHJlbiYmZS5wdXNoKC4uLnRoaXMuX2Vycm9yQ2hpbGRyZW4ubWFwKGk9PmkuaWQpKTt0aGlzLl9jb250cm9sLnNldERlc2NyaWJlZEJ5SWRzKGUpfX1fdXBkYXRlT3V0bGluZUxhYmVsT2Zmc2V0KCl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcnx8IXRoaXMuX2hhc091dGxpbmUoKXx8IXRoaXMuX2Zsb2F0aW5nTGFiZWwpcmV0dXJuO2xldCBlPXRoaXMuX2Zsb2F0aW5nTGFiZWwuZWxlbWVudDtpZighdGhpcy5faWNvblByZWZpeENvbnRhaW5lciYmIXRoaXMuX3RleHRQcmVmaXhDb250YWluZXIpcmV0dXJuIHZvaWQoZS5zdHlsZS50cmFuc2Zvcm09IiIpO2lmKCF0aGlzLl9pc0F0dGFjaGVkVG9Eb20oKSlyZXR1cm4gdm9pZCh0aGlzLl9uZWVkc091dGxpbmVMYWJlbE9mZnNldFVwZGF0ZU9uU3RhYmxlPSEwKTtsZXQgaT10aGlzLl9pY29uUHJlZml4Q29udGFpbmVyPy5uYXRpdmVFbGVtZW50LHI9dGhpcy5fdGV4dFByZWZpeENvbnRhaW5lcj8ubmF0aXZlRWxlbWVudCxvPWk/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoPz8wLGE9cj8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg/PzA7ZS5zdHlsZS50cmFuc2Zvcm09YHZhcihcbiAgICAgICAgLS1tYXQtbWRjLWZvcm0tZmllbGQtbGFiZWwtdHJhbnNmb3JtLFxuICAgICAgICB0cmFuc2xhdGVZKC01MCUpIHRyYW5zbGF0ZVgoY2FsYygkeyJydGwiPT09dGhpcy5fZGlyLnZhbHVlPyItMSI6IjEifSAqICgke28rYX1weCArIHZhcigtLW1hdC1tZGMtZm9ybS1maWVsZC1sYWJlbC1vZmZzZXQteCwgMHB4KSkpKVxuICAgIClgfV9pc0F0dGFjaGVkVG9Eb20oKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7aWYoZS5nZXRSb290Tm9kZSl7bGV0IGk9ZS5nZXRSb290Tm9kZSgpO3JldHVybiBpJiZpIT09ZX1yZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbnRhaW5zKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKHhlKSxDKFF0KSxDKG90KSxDKHppKSxDKFZuKSxDKEV2ZSw4KSxDKHBpLDgpLEMoTnQpKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtZm9ybS1maWVsZCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihlLGkscil7aWYoMSZlJiYoQm4ocixubCw1KSxCbihyLG5sLDcpLEJuKHIsWXYsNSksQm4ocixPOSw1KSxCbihyLE12ZSw1KSxCbihyLFA5LDUpLEJuKHIsdzksNSkpLDImZSl7bGV0IG87YmUobz12ZSgpKSYmKGkuX2xhYmVsQ2hpbGROb25TdGF0aWM9by5maXJzdCksYmUobz12ZSgpKSYmKGkuX2xhYmVsQ2hpbGRTdGF0aWM9by5maXJzdCksYmUobz12ZSgpKSYmKGkuX2Zvcm1GaWVsZENvbnRyb2w9by5maXJzdCksYmUobz12ZSgpKSYmKGkuX3ByZWZpeENoaWxkcmVuPW8pLGJlKG89dmUoKSkmJihpLl9zdWZmaXhDaGlsZHJlbj1vKSxiZShvPXZlKCkpJiYoaS5fZXJyb3JDaGlsZHJlbj1vKSxiZShvPXZlKCkpJiYoaS5faGludENoaWxkcmVuPW8pfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoVWUoJGJlLDUpLFVlKGV2ZSw1KSxVZSh0dmUsNSksVWUoUzksNSksVWUoRDksNSksVWUoVDksNSkpLDImZSl7bGV0IHI7YmUocj12ZSgpKSYmKGkuX3RleHRGaWVsZD1yLmZpcnN0KSxiZShyPXZlKCkpJiYoaS5faWNvblByZWZpeENvbnRhaW5lcj1yLmZpcnN0KSxiZShyPXZlKCkpJiYoaS5fdGV4dFByZWZpeENvbnRhaW5lcj1yLmZpcnN0KSxiZShyPXZlKCkpJiYoaS5fZmxvYXRpbmdMYWJlbD1yLmZpcnN0KSxiZShyPXZlKCkpJiYoaS5fbm90Y2hlZE91dGxpbmU9ci5maXJzdCksYmUocj12ZSgpKSYmKGkuX2xpbmVSaXBwbGU9ci5maXJzdCl9fSxob3N0QXR0cnM6WzEsIm1hdC1tZGMtZm9ybS1maWVsZCJdLGhvc3RWYXJzOjQyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmbnQoIm1hdC1tZGMtZm9ybS1maWVsZC1sYWJlbC1hbHdheXMtZmxvYXQiLGkuX3Nob3VsZEFsd2F5c0Zsb2F0KCkpKCJtYXQtbWRjLWZvcm0tZmllbGQtaGFzLWljb24tcHJlZml4IixpLl9oYXNJY29uUHJlZml4KSgibWF0LW1kYy1mb3JtLWZpZWxkLWhhcy1pY29uLXN1ZmZpeCIsaS5faGFzSWNvblN1ZmZpeCkoIm1hdC1mb3JtLWZpZWxkLWludmFsaWQiLGkuX2NvbnRyb2wuZXJyb3JTdGF0ZSkoIm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIixpLl9jb250cm9sLmRpc2FibGVkKSgibWF0LWZvcm0tZmllbGQtYXV0b2ZpbGxlZCIsaS5fY29udHJvbC5hdXRvZmlsbGVkKSgibWF0LWZvcm0tZmllbGQtbm8tYW5pbWF0aW9ucyIsIk5vb3BBbmltYXRpb25zIj09PWkuX2FuaW1hdGlvbk1vZGUpKCJtYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwiLCJmaWxsIj09aS5hcHBlYXJhbmNlKSgibWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIiwib3V0bGluZSI9PWkuYXBwZWFyYW5jZSkoIm1hdC1mb3JtLWZpZWxkLWhpZGUtcGxhY2Vob2xkZXIiLGkuX2hhc0Zsb2F0aW5nTGFiZWwoKSYmIWkuX3Nob3VsZExhYmVsRmxvYXQoKSkoIm1hdC1mb2N1c2VkIixpLl9jb250cm9sLmZvY3VzZWQpKCJtYXQtcHJpbWFyeSIsImFjY2VudCIhPT1pLmNvbG9yJiYid2FybiIhPT1pLmNvbG9yKSgibWF0LWFjY2VudCIsImFjY2VudCI9PT1pLmNvbG9yKSgibWF0LXdhcm4iLCJ3YXJuIj09PWkuY29sb3IpKCJuZy11bnRvdWNoZWQiLGkuX3Nob3VsZEZvcndhcmQoInVudG91Y2hlZCIpKSgibmctdG91Y2hlZCIsaS5fc2hvdWxkRm9yd2FyZCgidG91Y2hlZCIpKSgibmctcHJpc3RpbmUiLGkuX3Nob3VsZEZvcndhcmQoInByaXN0aW5lIikpKCJuZy1kaXJ0eSIsaS5fc2hvdWxkRm9yd2FyZCgiZGlydHkiKSkoIm5nLXZhbGlkIixpLl9zaG91bGRGb3J3YXJkKCJ2YWxpZCIpKSgibmctaW52YWxpZCIsaS5fc2hvdWxkRm9yd2FyZCgiaW52YWxpZCIpKSgibmctcGVuZGluZyIsaS5fc2hvdWxkRm9yd2FyZCgicGVuZGluZyIpKX0saW5wdXRzOntoaWRlUmVxdWlyZWRNYXJrZXI6ImhpZGVSZXF1aXJlZE1hcmtlciIsY29sb3I6ImNvbG9yIixmbG9hdExhYmVsOiJmbG9hdExhYmVsIixhcHBlYXJhbmNlOiJhcHBlYXJhbmNlIixzdWJzY3JpcHRTaXppbmc6InN1YnNjcmlwdFNpemluZyIsaGludExhYmVsOiJoaW50TGFiZWwifSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdLGZlYXR1cmVzOltWdChbe3Byb3ZpZGU6UGgsdXNlRXhpc3Rpbmc6bn1dKV0sbmdDb250ZW50U2VsZWN0b3JzOnl2ZSxkZWNsczoxOCx2YXJzOjIzLGNvbnN0czpbWyJsYWJlbFRlbXBsYXRlIiwiIl0sWzEsIm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVyIiwibWRjLXRleHQtZmllbGQiLDMsImNsaWNrIl0sWyJ0ZXh0RmllbGQiLCIiXSxbImNsYXNzIiwibWF0LW1kYy1mb3JtLWZpZWxkLWZvY3VzLW92ZXJsYXkiLDQsIm5nSWYiXSxbMSwibWF0LW1kYy1mb3JtLWZpZWxkLWZsZXgiXSxbIm1hdEZvcm1GaWVsZE5vdGNoZWRPdXRsaW5lIiwiIiwzLCJtYXRGb3JtRmllbGROb3RjaGVkT3V0bGluZU9wZW4iLCJtYXRGb3JtRmllbGROb3RjaGVkT3V0bGluZUxhYmVsV2lkdGgiLDQsIm5nSWYiXSxbImNsYXNzIiwibWF0LW1kYy1mb3JtLWZpZWxkLWljb24tcHJlZml4Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm1hdC1tZGMtZm9ybS1maWVsZC10ZXh0LXByZWZpeCIsNCwibmdJZiJdLFsxLCJtYXQtbWRjLWZvcm0tZmllbGQtaW5maXgiXSxbMywibmdJZiJdLFsiY2xhc3MiLCJtYXQtbWRjLWZvcm0tZmllbGQtdGV4dC1zdWZmaXgiLDQsIm5nSWYiXSxbImNsYXNzIiwibWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4Iiw0LCJuZ0lmIl0sWyJtYXRGb3JtRmllbGRMaW5lUmlwcGxlIiwiIiw0LCJuZ0lmIl0sWzEsIm1hdC1tZGMtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlciIsIm1hdC1tZGMtZm9ybS1maWVsZC1ib3R0b20tYWxpZ24iLDMsIm5nU3dpdGNoIl0sWyJjbGFzcyIsIm1hdC1tZGMtZm9ybS1maWVsZC1lcnJvci13cmFwcGVyIiw0LCJuZ1N3aXRjaENhc2UiXSxbImNsYXNzIiwibWF0LW1kYy1mb3JtLWZpZWxkLWhpbnQtd3JhcHBlciIsNCwibmdTd2l0Y2hDYXNlIl0sWyJtYXRGb3JtRmllbGRGbG9hdGluZ0xhYmVsIiwiIiwzLCJmbG9hdGluZyIsImNka09ic2VydmVDb250ZW50RGlzYWJsZWQiLCJpZCIsImNka09ic2VydmVDb250ZW50Iiw0LCJuZ0lmIl0sWyJtYXRGb3JtRmllbGRGbG9hdGluZ0xhYmVsIiwiIiwzLCJmbG9hdGluZyIsImNka09ic2VydmVDb250ZW50RGlzYWJsZWQiLCJpZCIsImNka09ic2VydmVDb250ZW50Il0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJjbGFzcyIsIm1hdC1tZGMtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXIgbWRjLWZsb2F0aW5nLWxhYmVsLS1yZXF1aXJlZCIsNCwibmdJZiJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJtYXQtbWRjLWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2VyIiwibWRjLWZsb2F0aW5nLWxhYmVsLS1yZXF1aXJlZCJdLFsxLCJtYXQtbWRjLWZvcm0tZmllbGQtZm9jdXMtb3ZlcmxheSJdLFsibWF0Rm9ybUZpZWxkTm90Y2hlZE91dGxpbmUiLCIiLDMsIm1hdEZvcm1GaWVsZE5vdGNoZWRPdXRsaW5lT3BlbiIsIm1hdEZvcm1GaWVsZE5vdGNoZWRPdXRsaW5lTGFiZWxXaWR0aCJdLFszLCJuZ1RlbXBsYXRlT3V0bGV0Il0sWzEsIm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXByZWZpeCJdLFsiaWNvblByZWZpeENvbnRhaW5lciIsIiJdLFsxLCJtYXQtbWRjLWZvcm0tZmllbGQtdGV4dC1wcmVmaXgiXSxbInRleHRQcmVmaXhDb250YWluZXIiLCIiXSxbMSwibWF0LW1kYy1mb3JtLWZpZWxkLXRleHQtc3VmZml4Il0sWzEsIm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXN1ZmZpeCJdLFsibWF0Rm9ybUZpZWxkTGluZVJpcHBsZSIsIiJdLFsxLCJtYXQtbWRjLWZvcm0tZmllbGQtZXJyb3Itd3JhcHBlciJdLFsxLCJtYXQtbWRjLWZvcm0tZmllbGQtaGludC13cmFwcGVyIl0sWzMsImlkIiw0LCJuZ0lmIl0sWzEsIm1hdC1tZGMtZm9ybS1maWVsZC1oaW50LXNwYWNlciJdLFszLCJpZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGZuKHZ2ZSksUygwLHJ2ZSwxLDEsIm5nLXRlbXBsYXRlIixudWxsLDAsanQpLGYoMiwiZGl2IiwxLDIpLEEoImNsaWNrIixmdW5jdGlvbihvKXtyZXR1cm4gaS5fY29udHJvbC5vbkNvbnRhaW5lckNsaWNrJiZpLl9jb250cm9sLm9uQ29udGFpbmVyQ2xpY2sobyl9KSxTKDQsb3ZlLDEsMCwiZGl2IiwzKSxmKDUsImRpdiIsNCksUyg2LGx2ZSwyLDMsImRpdiIsNSksUyg3LGN2ZSwzLDAsImRpdiIsNiksUyg4LGR2ZSwzLDAsImRpdiIsNyksZig5LCJkaXYiLDgpLFMoMTAscHZlLDEsMSwibmctdGVtcGxhdGUiLDkpLFR0KDExKSxnKCksUygxMixodmUsMiwwLCJkaXYiLDEwKSxTKDEzLG12ZSwyLDAsImRpdiIsMTEpLGcoKSxTKDE0LGZ2ZSwxLDAsImRpdiIsMTIpLGcoKSxmKDE1LCJkaXYiLDEzKSxTKDE2LGd2ZSwyLDEsImRpdiIsMTQpLFMoMTcsYnZlLDUsMiwiZGl2IiwxNSksZygpKSwyJmUmJih2KDIpLG50KCJtZGMtdGV4dC1maWVsZC0tZmlsbGVkIiwhaS5faGFzT3V0bGluZSgpKSgibWRjLXRleHQtZmllbGQtLW91dGxpbmVkIixpLl9oYXNPdXRsaW5lKCkpKCJtZGMtdGV4dC1maWVsZC0tbm8tbGFiZWwiLCFpLl9oYXNGbG9hdGluZ0xhYmVsKCkpKCJtZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQiLGkuX2NvbnRyb2wuZGlzYWJsZWQpKCJtZGMtdGV4dC1maWVsZC0taW52YWxpZCIsaS5fY29udHJvbC5lcnJvclN0YXRlKSx2KDIpLGIoIm5nSWYiLCFpLl9oYXNPdXRsaW5lKCkmJiFpLl9jb250cm9sLmRpc2FibGVkKSx2KDIpLGIoIm5nSWYiLGkuX2hhc091dGxpbmUoKSksdigxKSxiKCJuZ0lmIixpLl9oYXNJY29uUHJlZml4KSx2KDEpLGIoIm5nSWYiLGkuX2hhc1RleHRQcmVmaXgpLHYoMiksYigibmdJZiIsIWkuX2hhc091dGxpbmUoKXx8aS5fZm9yY2VEaXNwbGF5SW5maXhMYWJlbCgpKSx2KDIpLGIoIm5nSWYiLGkuX2hhc1RleHRTdWZmaXgpLHYoMSksYigibmdJZiIsaS5faGFzSWNvblN1ZmZpeCksdigxKSxiKCJuZ0lmIiwhaS5faGFzT3V0bGluZSgpKSx2KDEpLG50KCJtYXQtbWRjLWZvcm0tZmllbGQtc3Vic2NyaXB0LWR5bmFtaWMtc2l6ZSIsImR5bmFtaWMiPT09aS5zdWJzY3JpcHRTaXppbmcpLGIoIm5nU3dpdGNoIixpLl9nZXREaXNwbGF5ZWRNZXNzYWdlcygpKSx2KDEpLGIoIm5nU3dpdGNoQ2FzZSIsImVycm9yIiksdigxKSxiKCJuZ1N3aXRjaENhc2UiLCJoaW50IikpfSxkZXBlbmRlbmNpZXM6W05lLGVvLG1yLGtyLE8xLHc5LFM5LEQ5LFQ5XSxzdHlsZXM6WycubWRjLXRleHQtZmllbGR7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czp2YXIoLS1tZGMtc2hhcGUtc21hbGwsIDRweCk7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0tbWRjLXNoYXBlLXNtYWxsLCA0cHgpO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowO2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmU7cGFkZGluZzowIDE2cHg7cG9zaXRpb246cmVsYXRpdmU7Ym94LXNpemluZzpib3JkZXItYm94O292ZXJmbG93OmhpZGRlbjt3aWxsLWNoYW5nZTpvcGFjaXR5LHRyYW5zZm9ybSxjb2xvcn0ubWRjLXRleHQtZmllbGQgLm1kYy1mbG9hdGluZy1sYWJlbHt0b3A6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpO3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1kYy10ZXh0LWZpZWxkX19pbnB1dHtoZWlnaHQ6MjhweDt3aWR0aDoxMDAlO21pbi13aWR0aDowO2JvcmRlcjpub25lO2JvcmRlci1yYWRpdXM6MDtiYWNrZ3JvdW5kOm5vbmU7YXBwZWFyYW5jZTpub25lO3BhZGRpbmc6MH0ubWRjLXRleHQtZmllbGRfX2lucHV0OjotbXMtY2xlYXJ7ZGlzcGxheTpub25lfS5tZGMtdGV4dC1maWVsZF9faW5wdXQ6Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvcntkaXNwbGF5Om5vbmV9Lm1kYy10ZXh0LWZpZWxkX19pbnB1dDpmb2N1c3tvdXRsaW5lOm5vbmV9Lm1kYy10ZXh0LWZpZWxkX19pbnB1dDppbnZhbGlke2JveC1zaGFkb3c6bm9uZX1AbWVkaWEgYWxsey5tZGMtdGV4dC1maWVsZF9faW5wdXQ6OnBsYWNlaG9sZGVye29wYWNpdHk6MH19QG1lZGlhIGFsbHsubWRjLXRleHQtZmllbGRfX2lucHV0Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntvcGFjaXR5OjB9fUBtZWRpYSBhbGx7Lm1kYy10ZXh0LWZpZWxkLS1uby1sYWJlbCAubWRjLXRleHQtZmllbGRfX2lucHV0OjpwbGFjZWhvbGRlciwubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dDo6cGxhY2Vob2xkZXJ7b3BhY2l0eToxfX1AbWVkaWEgYWxsey5tZGMtdGV4dC1maWVsZC0tbm8tbGFiZWwgLm1kYy10ZXh0LWZpZWxkX19pbnB1dDotbXMtaW5wdXQtcGxhY2Vob2xkZXIsLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtdGV4dC1maWVsZF9faW5wdXQ6LW1zLWlucHV0LXBsYWNlaG9sZGVye29wYWNpdHk6MX19Lm1kYy10ZXh0LWZpZWxkX19hZmZpeHtoZWlnaHQ6MjhweDtvcGFjaXR5OjA7d2hpdGUtc3BhY2U6bm93cmFwfS5tZGMtdGV4dC1maWVsZC0tbGFiZWwtZmxvYXRpbmcgLm1kYy10ZXh0LWZpZWxkX19hZmZpeCwubWRjLXRleHQtZmllbGQtLW5vLWxhYmVsIC5tZGMtdGV4dC1maWVsZF9fYWZmaXh7b3BhY2l0eToxfUBzdXBwb3J0cygtd2Via2l0LWh5cGhlbnM6IG5vbmUpey5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy10ZXh0LWZpZWxkX19hZmZpeHthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tc2VsZjpjZW50ZXI7ZGlzcGxheTppbmxpbmUtZmxleDtoZWlnaHQ6MTAwJX19Lm1kYy10ZXh0LWZpZWxkX19hZmZpeC0tcHJlZml4e3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MnB4fVtkaXI9cnRsXSAubWRjLXRleHQtZmllbGRfX2FmZml4LS1wcmVmaXgsLm1kYy10ZXh0LWZpZWxkX19hZmZpeC0tcHJlZml4W2Rpcj1ydGxde3BhZGRpbmctbGVmdDoycHg7cGFkZGluZy1yaWdodDowfS5tZGMtdGV4dC1maWVsZC0tZW5kLWFsaWduZWQgLm1kYy10ZXh0LWZpZWxkX19hZmZpeC0tcHJlZml4e3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MTJweH1bZGlyPXJ0bF0gLm1kYy10ZXh0LWZpZWxkLS1lbmQtYWxpZ25lZCAubWRjLXRleHQtZmllbGRfX2FmZml4LS1wcmVmaXgsLm1kYy10ZXh0LWZpZWxkLS1lbmQtYWxpZ25lZCAubWRjLXRleHQtZmllbGRfX2FmZml4LS1wcmVmaXhbZGlyPXJ0bF17cGFkZGluZy1sZWZ0OjEycHg7cGFkZGluZy1yaWdodDowfS5tZGMtdGV4dC1maWVsZF9fYWZmaXgtLXN1ZmZpeHtwYWRkaW5nLWxlZnQ6MTJweDtwYWRkaW5nLXJpZ2h0OjB9W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZF9fYWZmaXgtLXN1ZmZpeCwubWRjLXRleHQtZmllbGRfX2FmZml4LS1zdWZmaXhbZGlyPXJ0bF17cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDoxMnB4fS5tZGMtdGV4dC1maWVsZC0tZW5kLWFsaWduZWQgLm1kYy10ZXh0LWZpZWxkX19hZmZpeC0tc3VmZml4e3BhZGRpbmctbGVmdDoycHg7cGFkZGluZy1yaWdodDowfVtkaXI9cnRsXSAubWRjLXRleHQtZmllbGQtLWVuZC1hbGlnbmVkIC5tZGMtdGV4dC1maWVsZF9fYWZmaXgtLXN1ZmZpeCwubWRjLXRleHQtZmllbGQtLWVuZC1hbGlnbmVkIC5tZGMtdGV4dC1maWVsZF9fYWZmaXgtLXN1ZmZpeFtkaXI9cnRsXXtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjJweH0ubWRjLXRleHQtZmllbGQtLWZpbGxlZHtoZWlnaHQ6NTZweH0ubWRjLXRleHQtZmllbGQtLWZpbGxlZDo6YmVmb3Jle2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjA7aGVpZ2h0OjQwcHg7Y29udGVudDoiIjt2ZXJ0aWNhbC1hbGlnbjowfS5tZGMtdGV4dC1maWVsZC0tZmlsbGVkIC5tZGMtZmxvYXRpbmctbGFiZWx7bGVmdDoxNnB4O3JpZ2h0OmluaXRpYWx9W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZC0tZmlsbGVkIC5tZGMtZmxvYXRpbmctbGFiZWwsLm1kYy10ZXh0LWZpZWxkLS1maWxsZWQgLm1kYy1mbG9hdGluZy1sYWJlbFtkaXI9cnRsXXtsZWZ0OmluaXRpYWw7cmlnaHQ6MTZweH0ubWRjLXRleHQtZmllbGQtLWZpbGxlZCAubWRjLWZsb2F0aW5nLWxhYmVsLS1mbG9hdC1hYm92ZXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMTA2JSkgc2NhbGUoMC43NSl9Lm1kYy10ZXh0LWZpZWxkLS1maWxsZWQubWRjLXRleHQtZmllbGQtLW5vLWxhYmVsIC5tZGMtdGV4dC1maWVsZF9faW5wdXR7aGVpZ2h0OjEwMCV9Lm1kYy10ZXh0LWZpZWxkLS1maWxsZWQubWRjLXRleHQtZmllbGQtLW5vLWxhYmVsIC5tZGMtZmxvYXRpbmctbGFiZWx7ZGlzcGxheTpub25lfS5tZGMtdGV4dC1maWVsZC0tZmlsbGVkLm1kYy10ZXh0LWZpZWxkLS1uby1sYWJlbDo6YmVmb3Jle2Rpc3BsYXk6bm9uZX1Ac3VwcG9ydHMoLXdlYmtpdC1oeXBoZW5zOiBub25lKXsubWRjLXRleHQtZmllbGQtLWZpbGxlZC5tZGMtdGV4dC1maWVsZC0tbm8tbGFiZWwgLm1kYy10ZXh0LWZpZWxkX19hZmZpeHthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tc2VsZjpjZW50ZXI7ZGlzcGxheTppbmxpbmUtZmxleDtoZWlnaHQ6MTAwJX19Lm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZHtoZWlnaHQ6NTZweDtvdmVyZmxvdzp2aXNpYmxlfS5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1mbG9hdGluZy1sYWJlbC0tZmxvYXQtYWJvdmV7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTM3LjI1cHgpIHNjYWxlKDEpfS5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1mbG9hdGluZy1sYWJlbC0tZmxvYXQtYWJvdmV7Zm9udC1zaXplOi43NXJlbX0ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkLm1kYy1ub3RjaGVkLW91dGxpbmUtLXVwZ3JhZGVkIC5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3ZlLC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1ub3RjaGVkLW91dGxpbmUtLXVwZ3JhZGVkIC5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3Zle3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0zNC43NXB4KSBzY2FsZSgwLjc1KX0ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkLm1kYy1ub3RjaGVkLW91dGxpbmUtLXVwZ3JhZGVkIC5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3ZlLC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1ub3RjaGVkLW91dGxpbmUtLXVwZ3JhZGVkIC5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3Zle2ZvbnQtc2l6ZToxcmVtfS5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dHtoZWlnaHQ6MTAwJX0ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5ne2JvcmRlci10b3AtbGVmdC1yYWRpdXM6dmFyKC0tbWRjLXNoYXBlLXNtYWxsLCA0cHgpO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLW1kYy1zaGFwZS1zbWFsbCwgNHB4KX1bZGlyPXJ0bF0gLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZywubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nW2Rpcj1ydGxde2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czp2YXIoLS1tZGMtc2hhcGUtc21hbGwsIDRweCk7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tbWRjLXNoYXBlLXNtYWxsLCA0cHgpO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH1Ac3VwcG9ydHModG9wOiBtYXgoMCUpKXsubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5ne3dpZHRoOm1heCgxMnB4LCB2YXIoLS1tZGMtc2hhcGUtc21hbGwsIDRweCkpfX1Ac3VwcG9ydHModG9wOiBtYXgoMCUpKXsubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaHttYXgtd2lkdGg6Y2FsYygxMDAlIC0gbWF4KDEycHgsIHZhcigtLW1kYy1zaGFwZS1zbWFsbCwgNHB4KSkqMil9fS5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1ub3RjaGVkLW91dGxpbmUgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czp2YXIoLS1tZGMtc2hhcGUtc21hbGwsIDRweCk7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tbWRjLXNoYXBlLXNtYWxsLCA0cHgpO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH1bZGlyPXJ0bF0gLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmcsLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmdbZGlyPXJ0bF17Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czp2YXIoLS1tZGMtc2hhcGUtc21hbGwsIDRweCk7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tbWRjLXNoYXBlLXNtYWxsLCA0cHgpfUBzdXBwb3J0cyh0b3A6IG1heCgwJSkpey5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWR7cGFkZGluZy1sZWZ0Om1heCgxNnB4LCBjYWxjKHZhcigtLW1kYy1zaGFwZS1zbWFsbCwgNHB4KSArIDRweCkpfX1Ac3VwcG9ydHModG9wOiBtYXgoMCUpKXsubWRjLXRleHQtZmllbGQtLW91dGxpbmVke3BhZGRpbmctcmlnaHQ6bWF4KDE2cHgsIHZhcigtLW1kYy1zaGFwZS1zbWFsbCwgNHB4KSl9fUBzdXBwb3J0cyh0b3A6IG1heCgwJSkpey5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5le3BhZGRpbmctbGVmdDptYXgoMTZweCwgY2FsYyh2YXIoLS1tZGMtc2hhcGUtc21hbGwsIDRweCkgKyA0cHgpKX19QHN1cHBvcnRzKHRvcDogbWF4KDAlKSl7Lm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCsubWRjLXRleHQtZmllbGQtaGVscGVyLWxpbmV7cGFkZGluZy1yaWdodDptYXgoMTZweCwgdmFyKC0tbWRjLXNoYXBlLXNtYWxsLCA0cHgpKX19Lm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZC5tZGMtdGV4dC1maWVsZC0td2l0aC1sZWFkaW5nLWljb257cGFkZGluZy1sZWZ0OjB9QHN1cHBvcnRzKHRvcDogbWF4KDAlKSl7Lm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZC5tZGMtdGV4dC1maWVsZC0td2l0aC1sZWFkaW5nLWljb257cGFkZGluZy1yaWdodDptYXgoMTZweCwgdmFyKC0tbWRjLXNoYXBlLXNtYWxsLCA0cHgpKX19W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQubWRjLXRleHQtZmllbGQtLXdpdGgtbGVhZGluZy1pY29uLC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQubWRjLXRleHQtZmllbGQtLXdpdGgtbGVhZGluZy1pY29uW2Rpcj1ydGxde3BhZGRpbmctcmlnaHQ6MH1Ac3VwcG9ydHModG9wOiBtYXgoMCUpKXtbZGlyPXJ0bF0gLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZC5tZGMtdGV4dC1maWVsZC0td2l0aC1sZWFkaW5nLWljb24sLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZC5tZGMtdGV4dC1maWVsZC0td2l0aC1sZWFkaW5nLWljb25bZGlyPXJ0bF17cGFkZGluZy1sZWZ0Om1heCgxNnB4LCB2YXIoLS1tZGMtc2hhcGUtc21hbGwsIDRweCkpfX0ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkLm1kYy10ZXh0LWZpZWxkLS13aXRoLXRyYWlsaW5nLWljb257cGFkZGluZy1yaWdodDowfUBzdXBwb3J0cyh0b3A6IG1heCgwJSkpey5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQubWRjLXRleHQtZmllbGQtLXdpdGgtdHJhaWxpbmctaWNvbntwYWRkaW5nLWxlZnQ6bWF4KDE2cHgsIGNhbGModmFyKC0tbWRjLXNoYXBlLXNtYWxsLCA0cHgpICsgNHB4KSl9fVtkaXI9cnRsXSAubWRjLXRleHQtZmllbGQtLW91dGxpbmVkLm1kYy10ZXh0LWZpZWxkLS13aXRoLXRyYWlsaW5nLWljb24sLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZC5tZGMtdGV4dC1maWVsZC0td2l0aC10cmFpbGluZy1pY29uW2Rpcj1ydGxde3BhZGRpbmctbGVmdDowfUBzdXBwb3J0cyh0b3A6IG1heCgwJSkpe1tkaXI9cnRsXSAubWRjLXRleHQtZmllbGQtLW91dGxpbmVkLm1kYy10ZXh0LWZpZWxkLS13aXRoLXRyYWlsaW5nLWljb24sLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZC5tZGMtdGV4dC1maWVsZC0td2l0aC10cmFpbGluZy1pY29uW2Rpcj1ydGxde3BhZGRpbmctcmlnaHQ6bWF4KDE2cHgsIGNhbGModmFyKC0tbWRjLXNoYXBlLXNtYWxsLCA0cHgpICsgNHB4KSl9fS5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQubWRjLXRleHQtZmllbGQtLXdpdGgtbGVhZGluZy1pY29uLm1kYy10ZXh0LWZpZWxkLS13aXRoLXRyYWlsaW5nLWljb257cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDowfS5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1ub3RjaGVkLW91dGxpbmUtLW5vdGNoZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoe3BhZGRpbmctdG9wOjFweH0ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtZmxvYXRpbmctbGFiZWx7bGVmdDo0cHg7cmlnaHQ6aW5pdGlhbH1bZGlyPXJ0bF0gLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLWZsb2F0aW5nLWxhYmVsLC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1mbG9hdGluZy1sYWJlbFtkaXI9cnRsXXtsZWZ0OmluaXRpYWw7cmlnaHQ6NHB4fS5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dHtkaXNwbGF5OmZsZXg7Ym9yZGVyOm5vbmUgIWltcG9ydGFudDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCl9Lm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLW5vdGNoZWQtb3V0bGluZXt6LWluZGV4OjF9Lm1kYy10ZXh0LWZpZWxkLS10ZXh0YXJlYXtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO3dpZHRoOmF1dG87aGVpZ2h0OmF1dG87cGFkZGluZzowfS5tZGMtdGV4dC1maWVsZC0tdGV4dGFyZWEgLm1kYy1mbG9hdGluZy1sYWJlbHt0b3A6MTlweH0ubWRjLXRleHQtZmllbGQtLXRleHRhcmVhIC5tZGMtZmxvYXRpbmctbGFiZWw6bm90KC5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3ZlKXt0cmFuc2Zvcm06bm9uZX0ubWRjLXRleHQtZmllbGQtLXRleHRhcmVhIC5tZGMtdGV4dC1maWVsZF9faW5wdXR7ZmxleC1ncm93OjE7aGVpZ2h0OmF1dG87bWluLWhlaWdodDoxLjVyZW07b3ZlcmZsb3cteDpoaWRkZW47b3ZlcmZsb3cteTphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDtyZXNpemU6bm9uZTtwYWRkaW5nOjAgMTZweH0ubWRjLXRleHQtZmllbGQtLXRleHRhcmVhLm1kYy10ZXh0LWZpZWxkLS1maWxsZWQ6OmJlZm9yZXtkaXNwbGF5Om5vbmV9Lm1kYy10ZXh0LWZpZWxkLS10ZXh0YXJlYS5tZGMtdGV4dC1maWVsZC0tZmlsbGVkIC5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3Zle3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xMC4yNXB4KSBzY2FsZSgwLjc1KX0ubWRjLXRleHQtZmllbGQtLXRleHRhcmVhLm1kYy10ZXh0LWZpZWxkLS1maWxsZWQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dHttYXJnaW4tdG9wOjIzcHg7bWFyZ2luLWJvdHRvbTo5cHh9Lm1kYy10ZXh0LWZpZWxkLS10ZXh0YXJlYS5tZGMtdGV4dC1maWVsZC0tZmlsbGVkLm1kYy10ZXh0LWZpZWxkLS1uby1sYWJlbCAubWRjLXRleHQtZmllbGRfX2lucHV0e21hcmdpbi10b3A6MTZweDttYXJnaW4tYm90dG9tOjE2cHh9Lm1kYy10ZXh0LWZpZWxkLS10ZXh0YXJlYS5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1ub3RjaGVkLW91dGxpbmUtLW5vdGNoZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoe3BhZGRpbmctdG9wOjB9Lm1kYy10ZXh0LWZpZWxkLS10ZXh0YXJlYS5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1mbG9hdGluZy1sYWJlbC0tZmxvYXQtYWJvdmV7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTI3LjI1cHgpIHNjYWxlKDEpfS5tZGMtdGV4dC1maWVsZC0tdGV4dGFyZWEubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3Zle2ZvbnQtc2l6ZTouNzVyZW19Lm1kYy10ZXh0LWZpZWxkLS10ZXh0YXJlYS5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQubWRjLW5vdGNoZWQtb3V0bGluZS0tdXBncmFkZWQgLm1kYy1mbG9hdGluZy1sYWJlbC0tZmxvYXQtYWJvdmUsLm1kYy10ZXh0LWZpZWxkLS10ZXh0YXJlYS5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1ub3RjaGVkLW91dGxpbmUtLXVwZ3JhZGVkIC5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3Zle3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0yNC43NXB4KSBzY2FsZSgwLjc1KX0ubWRjLXRleHQtZmllbGQtLXRleHRhcmVhLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZC5tZGMtbm90Y2hlZC1vdXRsaW5lLS11cGdyYWRlZCAubWRjLWZsb2F0aW5nLWxhYmVsLS1mbG9hdC1hYm92ZSwubWRjLXRleHQtZmllbGQtLXRleHRhcmVhLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLW5vdGNoZWQtb3V0bGluZS0tdXBncmFkZWQgLm1kYy1mbG9hdGluZy1sYWJlbC0tZmxvYXQtYWJvdmV7Zm9udC1zaXplOjFyZW19Lm1kYy10ZXh0LWZpZWxkLS10ZXh0YXJlYS5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dHttYXJnaW4tdG9wOjE2cHg7bWFyZ2luLWJvdHRvbToxNnB4fS5tZGMtdGV4dC1maWVsZC0tdGV4dGFyZWEubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtZmxvYXRpbmctbGFiZWx7dG9wOjE4cHh9Lm1kYy10ZXh0LWZpZWxkLS10ZXh0YXJlYS5tZGMtdGV4dC1maWVsZC0td2l0aC1pbnRlcm5hbC1jb3VudGVyIC5tZGMtdGV4dC1maWVsZF9faW5wdXR7bWFyZ2luLWJvdHRvbToycHh9Lm1kYy10ZXh0LWZpZWxkLS10ZXh0YXJlYS5tZGMtdGV4dC1maWVsZC0td2l0aC1pbnRlcm5hbC1jb3VudGVyIC5tZGMtdGV4dC1maWVsZC1jaGFyYWN0ZXItY291bnRlcnthbGlnbi1zZWxmOmZsZXgtZW5kO3BhZGRpbmc6MCAxNnB4fS5tZGMtdGV4dC1maWVsZC0tdGV4dGFyZWEubWRjLXRleHQtZmllbGQtLXdpdGgtaW50ZXJuYWwtY291bnRlciAubWRjLXRleHQtZmllbGQtY2hhcmFjdGVyLWNvdW50ZXI6OmFmdGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjA7aGVpZ2h0OjE2cHg7Y29udGVudDoiIjt2ZXJ0aWNhbC1hbGlnbjotMTZweH0ubWRjLXRleHQtZmllbGQtLXRleHRhcmVhLm1kYy10ZXh0LWZpZWxkLS13aXRoLWludGVybmFsLWNvdW50ZXIgLm1kYy10ZXh0LWZpZWxkLWNoYXJhY3Rlci1jb3VudGVyOjpiZWZvcmV7ZGlzcGxheTpub25lfS5tZGMtdGV4dC1maWVsZF9fcmVzaXplcnthbGlnbi1zZWxmOnN0cmV0Y2g7ZGlzcGxheTppbmxpbmUtZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1ncm93OjE7bWF4LWhlaWdodDoxMDAlO21heC13aWR0aDoxMDAlO21pbi1oZWlnaHQ6NTZweDttaW4td2lkdGg6Zml0LWNvbnRlbnQ7bWluLXdpZHRoOi1tb3otYXZhaWxhYmxlO21pbi13aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO292ZXJmbG93OmhpZGRlbjtyZXNpemU6Ym90aH0ubWRjLXRleHQtZmllbGQtLWZpbGxlZCAubWRjLXRleHQtZmllbGRfX3Jlc2l6ZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTFweCl9Lm1kYy10ZXh0LWZpZWxkLS1maWxsZWQgLm1kYy10ZXh0LWZpZWxkX19yZXNpemVyIC5tZGMtdGV4dC1maWVsZF9faW5wdXQsLm1kYy10ZXh0LWZpZWxkLS1maWxsZWQgLm1kYy10ZXh0LWZpZWxkX19yZXNpemVyIC5tZGMtdGV4dC1maWVsZC1jaGFyYWN0ZXItY291bnRlcnt0cmFuc2Zvcm06dHJhbnNsYXRlWSgxcHgpfS5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy10ZXh0LWZpZWxkX19yZXNpemVye3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xcHgpIHRyYW5zbGF0ZVkoLTFweCl9W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy10ZXh0LWZpZWxkX19yZXNpemVyLC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy10ZXh0LWZpZWxkX19yZXNpemVyW2Rpcj1ydGxde3RyYW5zZm9ybTp0cmFuc2xhdGVYKDFweCkgdHJhbnNsYXRlWSgtMXB4KX0ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtdGV4dC1maWVsZF9fcmVzaXplciAubWRjLXRleHQtZmllbGRfX2lucHV0LC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy10ZXh0LWZpZWxkX19yZXNpemVyIC5tZGMtdGV4dC1maWVsZC1jaGFyYWN0ZXItY291bnRlcnt0cmFuc2Zvcm06dHJhbnNsYXRlWCgxcHgpIHRyYW5zbGF0ZVkoMXB4KX1bZGlyPXJ0bF0gLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLXRleHQtZmllbGRfX3Jlc2l6ZXIgLm1kYy10ZXh0LWZpZWxkX19pbnB1dCxbZGlyPXJ0bF0gLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLXRleHQtZmllbGRfX3Jlc2l6ZXIgLm1kYy10ZXh0LWZpZWxkLWNoYXJhY3Rlci1jb3VudGVyLC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy10ZXh0LWZpZWxkX19yZXNpemVyIC5tZGMtdGV4dC1maWVsZF9faW5wdXRbZGlyPXJ0bF0sLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLXRleHQtZmllbGRfX3Jlc2l6ZXIgLm1kYy10ZXh0LWZpZWxkLWNoYXJhY3Rlci1jb3VudGVyW2Rpcj1ydGxde3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xcHgpIHRyYW5zbGF0ZVkoMXB4KX0ubWRjLXRleHQtZmllbGQtLXdpdGgtbGVhZGluZy1pY29ue3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MTZweH1bZGlyPXJ0bF0gLm1kYy10ZXh0LWZpZWxkLS13aXRoLWxlYWRpbmctaWNvbiwubWRjLXRleHQtZmllbGQtLXdpdGgtbGVhZGluZy1pY29uW2Rpcj1ydGxde3BhZGRpbmctbGVmdDoxNnB4O3BhZGRpbmctcmlnaHQ6MH0ubWRjLXRleHQtZmllbGQtLXdpdGgtbGVhZGluZy1pY29uLm1kYy10ZXh0LWZpZWxkLS1maWxsZWQgLm1kYy1mbG9hdGluZy1sYWJlbHttYXgtd2lkdGg6Y2FsYygxMDAlIC0gNDhweCk7bGVmdDo0OHB4O3JpZ2h0OmluaXRpYWx9W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZC0td2l0aC1sZWFkaW5nLWljb24ubWRjLXRleHQtZmllbGQtLWZpbGxlZCAubWRjLWZsb2F0aW5nLWxhYmVsLC5tZGMtdGV4dC1maWVsZC0td2l0aC1sZWFkaW5nLWljb24ubWRjLXRleHQtZmllbGQtLWZpbGxlZCAubWRjLWZsb2F0aW5nLWxhYmVsW2Rpcj1ydGxde2xlZnQ6aW5pdGlhbDtyaWdodDo0OHB4fS5tZGMtdGV4dC1maWVsZC0td2l0aC1sZWFkaW5nLWljb24ubWRjLXRleHQtZmllbGQtLWZpbGxlZCAubWRjLWZsb2F0aW5nLWxhYmVsLS1mbG9hdC1hYm92ZXttYXgtd2lkdGg6Y2FsYygxMDAlIC8gMC43NSAtIDY0cHggLyAwLjc1KX0ubWRjLXRleHQtZmllbGQtLXdpdGgtbGVhZGluZy1pY29uLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLWZsb2F0aW5nLWxhYmVse2xlZnQ6MzZweDtyaWdodDppbml0aWFsfVtkaXI9cnRsXSAubWRjLXRleHQtZmllbGQtLXdpdGgtbGVhZGluZy1pY29uLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLWZsb2F0aW5nLWxhYmVsLC5tZGMtdGV4dC1maWVsZC0td2l0aC1sZWFkaW5nLWljb24ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtZmxvYXRpbmctbGFiZWxbZGlyPXJ0bF17bGVmdDppbml0aWFsO3JpZ2h0OjM2cHh9Lm1kYy10ZXh0LWZpZWxkLS13aXRoLWxlYWRpbmctaWNvbi5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgOm5vdCgubWRjLW5vdGNoZWQtb3V0bGluZS0tbm90Y2hlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoe21heC13aWR0aDpjYWxjKDEwMCUgLSA2MHB4KX0ubWRjLXRleHQtZmllbGQtLXdpdGgtbGVhZGluZy1pY29uLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLWZsb2F0aW5nLWxhYmVsLS1mbG9hdC1hYm92ZXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMzcuMjVweCkgdHJhbnNsYXRlWCgtMzJweCkgc2NhbGUoMSl9W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZC0td2l0aC1sZWFkaW5nLWljb24ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3ZlLC5tZGMtdGV4dC1maWVsZC0td2l0aC1sZWFkaW5nLWljb24ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3ZlW2Rpcj1ydGxde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0zNy4yNXB4KSB0cmFuc2xhdGVYKDMycHgpIHNjYWxlKDEpfS5tZGMtdGV4dC1maWVsZC0td2l0aC1sZWFkaW5nLWljb24ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3Zle2ZvbnQtc2l6ZTouNzVyZW19Lm1kYy10ZXh0LWZpZWxkLS13aXRoLWxlYWRpbmctaWNvbi5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQubWRjLW5vdGNoZWQtb3V0bGluZS0tdXBncmFkZWQgLm1kYy1mbG9hdGluZy1sYWJlbC0tZmxvYXQtYWJvdmUsLm1kYy10ZXh0LWZpZWxkLS13aXRoLWxlYWRpbmctaWNvbi5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1ub3RjaGVkLW91dGxpbmUtLXVwZ3JhZGVkIC5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3Zle3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0zNC43NXB4KSB0cmFuc2xhdGVYKC0zMnB4KSBzY2FsZSgwLjc1KX1bZGlyPXJ0bF0gLm1kYy10ZXh0LWZpZWxkLS13aXRoLWxlYWRpbmctaWNvbi5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQubWRjLW5vdGNoZWQtb3V0bGluZS0tdXBncmFkZWQgLm1kYy1mbG9hdGluZy1sYWJlbC0tZmxvYXQtYWJvdmUsW2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZC0td2l0aC1sZWFkaW5nLWljb24ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lLS11cGdyYWRlZCAubWRjLWZsb2F0aW5nLWxhYmVsLS1mbG9hdC1hYm92ZSwubWRjLXRleHQtZmllbGQtLXdpdGgtbGVhZGluZy1pY29uLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZC5tZGMtbm90Y2hlZC1vdXRsaW5lLS11cGdyYWRlZCAubWRjLWZsb2F0aW5nLWxhYmVsLS1mbG9hdC1hYm92ZVtkaXI9cnRsXSwubWRjLXRleHQtZmllbGQtLXdpdGgtbGVhZGluZy1pY29uLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLW5vdGNoZWQtb3V0bGluZS0tdXBncmFkZWQgLm1kYy1mbG9hdGluZy1sYWJlbC0tZmxvYXQtYWJvdmVbZGlyPXJ0bF17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTM0Ljc1cHgpIHRyYW5zbGF0ZVgoMzJweCkgc2NhbGUoMC43NSl9Lm1kYy10ZXh0LWZpZWxkLS13aXRoLWxlYWRpbmctaWNvbi5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQubWRjLW5vdGNoZWQtb3V0bGluZS0tdXBncmFkZWQgLm1kYy1mbG9hdGluZy1sYWJlbC0tZmxvYXQtYWJvdmUsLm1kYy10ZXh0LWZpZWxkLS13aXRoLWxlYWRpbmctaWNvbi5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1ub3RjaGVkLW91dGxpbmUtLXVwZ3JhZGVkIC5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3Zle2ZvbnQtc2l6ZToxcmVtfS5tZGMtdGV4dC1maWVsZC0td2l0aC10cmFpbGluZy1pY29ue3BhZGRpbmctbGVmdDoxNnB4O3BhZGRpbmctcmlnaHQ6MH1bZGlyPXJ0bF0gLm1kYy10ZXh0LWZpZWxkLS13aXRoLXRyYWlsaW5nLWljb24sLm1kYy10ZXh0LWZpZWxkLS13aXRoLXRyYWlsaW5nLWljb25bZGlyPXJ0bF17cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDoxNnB4fS5tZGMtdGV4dC1maWVsZC0td2l0aC10cmFpbGluZy1pY29uLm1kYy10ZXh0LWZpZWxkLS1maWxsZWQgLm1kYy1mbG9hdGluZy1sYWJlbHttYXgtd2lkdGg6Y2FsYygxMDAlIC0gNjRweCl9Lm1kYy10ZXh0LWZpZWxkLS13aXRoLXRyYWlsaW5nLWljb24ubWRjLXRleHQtZmllbGQtLWZpbGxlZCAubWRjLWZsb2F0aW5nLWxhYmVsLS1mbG9hdC1hYm92ZXttYXgtd2lkdGg6Y2FsYygxMDAlIC8gMC43NSAtIDY0cHggLyAwLjc1KX0ubWRjLXRleHQtZmllbGQtLXdpdGgtdHJhaWxpbmctaWNvbi5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgOm5vdCgubWRjLW5vdGNoZWQtb3V0bGluZS0tbm90Y2hlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoe21heC13aWR0aDpjYWxjKDEwMCUgLSA2MHB4KX0ubWRjLXRleHQtZmllbGQtLXdpdGgtbGVhZGluZy1pY29uLm1kYy10ZXh0LWZpZWxkLS13aXRoLXRyYWlsaW5nLWljb257cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDowfS5tZGMtdGV4dC1maWVsZC0td2l0aC1sZWFkaW5nLWljb24ubWRjLXRleHQtZmllbGQtLXdpdGgtdHJhaWxpbmctaWNvbi5tZGMtdGV4dC1maWVsZC0tZmlsbGVkIC5tZGMtZmxvYXRpbmctbGFiZWx7bWF4LXdpZHRoOmNhbGMoMTAwJSAtIDk2cHgpfS5tZGMtdGV4dC1maWVsZC0td2l0aC1sZWFkaW5nLWljb24ubWRjLXRleHQtZmllbGQtLXdpdGgtdHJhaWxpbmctaWNvbi5tZGMtdGV4dC1maWVsZC0tZmlsbGVkIC5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3Zle21heC13aWR0aDpjYWxjKDEwMCUgLyAwLjc1IC0gOTZweCAvIDAuNzUpfS5tZGMtdGV4dC1maWVsZC1oZWxwZXItbGluZXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Ym94LXNpemluZzpib3JkZXItYm94fS5tZGMtdGV4dC1maWVsZCsubWRjLXRleHQtZmllbGQtaGVscGVyLWxpbmV7cGFkZGluZy1yaWdodDoxNnB4O3BhZGRpbmctbGVmdDoxNnB4fS5tZGMtZm9ybS1maWVsZD4ubWRjLXRleHQtZmllbGQrbGFiZWx7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZywubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLC5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLXdpZHRoOjJweH0ubWRjLXRleHQtZmllbGQtLWZvY3VzZWQrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5lIC5tZGMtdGV4dC1maWVsZC1oZWxwZXItdGV4dDpub3QoLm1kYy10ZXh0LWZpZWxkLWhlbHBlci10ZXh0LS12YWxpZGF0aW9uLW1zZyl7b3BhY2l0eToxfS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1ub3RjaGVkLW91dGxpbmUtLW5vdGNoZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoe3BhZGRpbmctdG9wOjJweH0ubWRjLXRleHQtZmllbGQtLWZvY3VzZWQubWRjLXRleHQtZmllbGQtLW91dGxpbmVkLm1kYy10ZXh0LWZpZWxkLS10ZXh0YXJlYSAubWRjLW5vdGNoZWQtb3V0bGluZS0tbm90Y2hlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2h7cGFkZGluZy10b3A6MH0ubWRjLXRleHQtZmllbGQtLWludmFsaWQrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5lIC5tZGMtdGV4dC1maWVsZC1oZWxwZXItdGV4dC0tdmFsaWRhdGlvbi1tc2d7b3BhY2l0eToxfS5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWR7cG9pbnRlci1ldmVudHM6bm9uZX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKXsubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtdGV4dC1maWVsZF9faW5wdXR7YmFja2dyb3VuZC1jb2xvcjpXaW5kb3d9Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLWZsb2F0aW5nLWxhYmVse3otaW5kZXg6MX19Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLWZsb2F0aW5nLWxhYmVse2N1cnNvcjpkZWZhdWx0fS5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQubWRjLXRleHQtZmllbGQtLWZpbGxlZCAubWRjLXRleHQtZmllbGRfX3JpcHBsZXtkaXNwbGF5Om5vbmV9Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLXRleHQtZmllbGRfX2lucHV0e3BvaW50ZXItZXZlbnRzOmF1dG99Lm1kYy10ZXh0LWZpZWxkLS1lbmQtYWxpZ25lZCAubWRjLXRleHQtZmllbGRfX2lucHV0e3RleHQtYWxpZ246cmlnaHR9W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZC0tZW5kLWFsaWduZWQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dCwubWRjLXRleHQtZmllbGQtLWVuZC1hbGlnbmVkIC5tZGMtdGV4dC1maWVsZF9faW5wdXRbZGlyPXJ0bF17dGV4dC1hbGlnbjpsZWZ0fVtkaXI9cnRsXSAubWRjLXRleHQtZmllbGQtLWx0ci10ZXh0IC5tZGMtdGV4dC1maWVsZF9faW5wdXQsW2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZC0tbHRyLXRleHQgLm1kYy10ZXh0LWZpZWxkX19hZmZpeCwubWRjLXRleHQtZmllbGQtLWx0ci10ZXh0W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZF9faW5wdXQsLm1kYy10ZXh0LWZpZWxkLS1sdHItdGV4dFtkaXI9cnRsXSAubWRjLXRleHQtZmllbGRfX2FmZml4e2RpcmVjdGlvbjpsdHJ9W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZC0tbHRyLXRleHQgLm1kYy10ZXh0LWZpZWxkX19hZmZpeC0tcHJlZml4LC5tZGMtdGV4dC1maWVsZC0tbHRyLXRleHRbZGlyPXJ0bF0gLm1kYy10ZXh0LWZpZWxkX19hZmZpeC0tcHJlZml4e3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MnB4fVtkaXI9cnRsXSAubWRjLXRleHQtZmllbGQtLWx0ci10ZXh0IC5tZGMtdGV4dC1maWVsZF9fYWZmaXgtLXN1ZmZpeCwubWRjLXRleHQtZmllbGQtLWx0ci10ZXh0W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZF9fYWZmaXgtLXN1ZmZpeHtwYWRkaW5nLWxlZnQ6MTJweDtwYWRkaW5nLXJpZ2h0OjB9W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZC0tbHRyLXRleHQgLm1kYy10ZXh0LWZpZWxkX19pY29uLS1sZWFkaW5nLC5tZGMtdGV4dC1maWVsZC0tbHRyLXRleHRbZGlyPXJ0bF0gLm1kYy10ZXh0LWZpZWxkX19pY29uLS1sZWFkaW5ne29yZGVyOjF9W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZC0tbHRyLXRleHQgLm1kYy10ZXh0LWZpZWxkX19hZmZpeC0tc3VmZml4LC5tZGMtdGV4dC1maWVsZC0tbHRyLXRleHRbZGlyPXJ0bF0gLm1kYy10ZXh0LWZpZWxkX19hZmZpeC0tc3VmZml4e29yZGVyOjJ9W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZC0tbHRyLXRleHQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dCwubWRjLXRleHQtZmllbGQtLWx0ci10ZXh0W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZF9faW5wdXR7b3JkZXI6M31bZGlyPXJ0bF0gLm1kYy10ZXh0LWZpZWxkLS1sdHItdGV4dCAubWRjLXRleHQtZmllbGRfX2FmZml4LS1wcmVmaXgsLm1kYy10ZXh0LWZpZWxkLS1sdHItdGV4dFtkaXI9cnRsXSAubWRjLXRleHQtZmllbGRfX2FmZml4LS1wcmVmaXh7b3JkZXI6NH1bZGlyPXJ0bF0gLm1kYy10ZXh0LWZpZWxkLS1sdHItdGV4dCAubWRjLXRleHQtZmllbGRfX2ljb24tLXRyYWlsaW5nLC5tZGMtdGV4dC1maWVsZC0tbHRyLXRleHRbZGlyPXJ0bF0gLm1kYy10ZXh0LWZpZWxkX19pY29uLS10cmFpbGluZ3tvcmRlcjo1fVtkaXI9cnRsXSAubWRjLXRleHQtZmllbGQtLWx0ci10ZXh0Lm1kYy10ZXh0LWZpZWxkLS1lbmQtYWxpZ25lZCAubWRjLXRleHQtZmllbGRfX2lucHV0LC5tZGMtdGV4dC1maWVsZC0tbHRyLXRleHQubWRjLXRleHQtZmllbGQtLWVuZC1hbGlnbmVkW2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZF9faW5wdXR7dGV4dC1hbGlnbjpyaWdodH1bZGlyPXJ0bF0gLm1kYy10ZXh0LWZpZWxkLS1sdHItdGV4dC5tZGMtdGV4dC1maWVsZC0tZW5kLWFsaWduZWQgLm1kYy10ZXh0LWZpZWxkX19hZmZpeC0tcHJlZml4LC5tZGMtdGV4dC1maWVsZC0tbHRyLXRleHQubWRjLXRleHQtZmllbGQtLWVuZC1hbGlnbmVkW2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZF9fYWZmaXgtLXByZWZpeHtwYWRkaW5nLXJpZ2h0OjEycHh9W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZC0tbHRyLXRleHQubWRjLXRleHQtZmllbGQtLWVuZC1hbGlnbmVkIC5tZGMtdGV4dC1maWVsZF9fYWZmaXgtLXN1ZmZpeCwubWRjLXRleHQtZmllbGQtLWx0ci10ZXh0Lm1kYy10ZXh0LWZpZWxkLS1lbmQtYWxpZ25lZFtkaXI9cnRsXSAubWRjLXRleHQtZmllbGRfX2FmZml4LS1zdWZmaXh7cGFkZGluZy1sZWZ0OjJweH0ubWRjLWZsb2F0aW5nLWxhYmVse3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDstd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46bGVmdCB0b3A7dHJhbnNmb3JtLW9yaWdpbjpsZWZ0IHRvcDtsaW5lLWhlaWdodDoxLjE1cmVtO3RleHQtYWxpZ246bGVmdDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcDtjdXJzb3I6dGV4dDtvdmVyZmxvdzpoaWRkZW47d2lsbC1jaGFuZ2U6dHJhbnNmb3JtfVtkaXI9cnRsXSAubWRjLWZsb2F0aW5nLWxhYmVsLC5tZGMtZmxvYXRpbmctbGFiZWxbZGlyPXJ0bF17cmlnaHQ6MDtsZWZ0OmF1dG87LXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOnJpZ2h0IHRvcDt0cmFuc2Zvcm0tb3JpZ2luOnJpZ2h0IHRvcDt0ZXh0LWFsaWduOnJpZ2h0fS5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3Zle2N1cnNvcjphdXRvfS5tZGMtZmxvYXRpbmctbGFiZWwtLXJlcXVpcmVkOm5vdCgubWRjLWZsb2F0aW5nLWxhYmVsLS1oaWRlLXJlcXVpcmVkLW1hcmtlcik6OmFmdGVye21hcmdpbi1sZWZ0OjFweDttYXJnaW4tcmlnaHQ6MHB4O2NvbnRlbnQ6IioifVtkaXI9cnRsXSAubWRjLWZsb2F0aW5nLWxhYmVsLS1yZXF1aXJlZDpub3QoLm1kYy1mbG9hdGluZy1sYWJlbC0taGlkZS1yZXF1aXJlZC1tYXJrZXIpOjphZnRlciwubWRjLWZsb2F0aW5nLWxhYmVsLS1yZXF1aXJlZDpub3QoLm1kYy1mbG9hdGluZy1sYWJlbC0taGlkZS1yZXF1aXJlZC1tYXJrZXIpW2Rpcj1ydGxdOjphZnRlcnttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDoxcHh9Lm1kYy1mbG9hdGluZy1sYWJlbC0tZmxvYXQtYWJvdmV7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEwNiUpIHNjYWxlKDAuNzUpfS5tZGMtbm90Y2hlZC1vdXRsaW5le2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtyaWdodDowO2xlZnQ6MDtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MTAwJTttYXgtd2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt0ZXh0LWFsaWduOmxlZnQ7cG9pbnRlci1ldmVudHM6bm9uZX1bZGlyPXJ0bF0gLm1kYy1ub3RjaGVkLW91dGxpbmUsLm1kYy1ub3RjaGVkLW91dGxpbmVbZGlyPXJ0bF17dGV4dC1hbGlnbjpyaWdodH0ubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZywubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JveC1zaXppbmc6Ym9yZGVyLWJveDtoZWlnaHQ6MTAwJTtib3JkZXItdG9wOjFweCBzb2xpZDtib3JkZXItYm90dG9tOjFweCBzb2xpZDtwb2ludGVyLWV2ZW50czpub25lfS5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5ne2JvcmRlci1sZWZ0OjFweCBzb2xpZDtib3JkZXItcmlnaHQ6bm9uZTt3aWR0aDoxMnB4fVtkaXI9cnRsXSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZywubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZ1tkaXI9cnRsXXtib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDoxcHggc29saWR9Lm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZDtmbGV4LWdyb3c6MX1bZGlyPXJ0bF0gLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5nLC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ1tkaXI9cnRsXXtib3JkZXItbGVmdDoxcHggc29saWQ7Ym9yZGVyLXJpZ2h0Om5vbmV9Lm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoe2ZsZXg6MCAwIGF1dG87d2lkdGg6YXV0bzttYXgtd2lkdGg6Y2FsYygxMDAlIC0gMTJweCAqIDIpfS5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtZmxvYXRpbmctbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmU7bWF4LXdpZHRoOjEwMCV9Lm1kYy1ub3RjaGVkLW91dGxpbmUgLm1kYy1mbG9hdGluZy1sYWJlbC0tZmxvYXQtYWJvdmV7dGV4dC1vdmVyZmxvdzpjbGlwfS5tZGMtbm90Y2hlZC1vdXRsaW5lLS11cGdyYWRlZCAubWRjLWZsb2F0aW5nLWxhYmVsLS1mbG9hdC1hYm92ZXttYXgtd2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tZGMtbm90Y2hlZC1vdXRsaW5lLS1ub3RjaGVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaHtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjhweDtib3JkZXItdG9wOm5vbmV9W2Rpcj1ydGxdIC5tZGMtbm90Y2hlZC1vdXRsaW5lLS1ub3RjaGVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCwubWRjLW5vdGNoZWQtb3V0bGluZS0tbm90Y2hlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2hbZGlyPXJ0bF17cGFkZGluZy1sZWZ0OjhweDtwYWRkaW5nLXJpZ2h0OjB9Lm1kYy1ub3RjaGVkLW91dGxpbmUtLW5vLWxhYmVsIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaHtkaXNwbGF5Om5vbmV9Lm1kYy1saW5lLXJpcHBsZTo6YmVmb3JlLC5tZGMtbGluZS1yaXBwbGU6OmFmdGVye3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO2xlZnQ6MDt3aWR0aDoxMDAlO2JvcmRlci1ib3R0b20tc3R5bGU6c29saWQ7Y29udGVudDoiIn0ubWRjLWxpbmUtcmlwcGxlOjpiZWZvcmV7Ym9yZGVyLWJvdHRvbS13aWR0aDoxcHh9Lm1kYy1saW5lLXJpcHBsZTo6YWZ0ZXJ7Ym9yZGVyLWJvdHRvbS13aWR0aDoycHh9Lm1kYy1saW5lLXJpcHBsZTo6YmVmb3Jle3otaW5kZXg6MX0ubWRjLWxpbmUtcmlwcGxlOjphZnRlcnt0cmFuc2Zvcm06c2NhbGVYKDApO29wYWNpdHk6MDt6LWluZGV4OjJ9Lm1kYy1saW5lLXJpcHBsZS0tYWN0aXZlOjphZnRlcnt0cmFuc2Zvcm06c2NhbGVYKDEpO29wYWNpdHk6MX0ubWRjLWxpbmUtcmlwcGxlLS1kZWFjdGl2YXRpbmc6OmFmdGVye29wYWNpdHk6MH0ubWF0LW1kYy1mb3JtLWZpZWxkLXRleHRhcmVhLWNvbnRyb2x7dmVydGljYWwtYWxpZ246bWlkZGxlO3Jlc2l6ZTp2ZXJ0aWNhbDtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OmF1dG87bWFyZ2luOjA7cGFkZGluZzowO2JvcmRlcjpub25lO292ZXJmbG93OmF1dG99Lm1hdC1tZGMtZm9ybS1maWVsZC1pbnB1dC1jb250cm9sLm1hdC1tZGMtZm9ybS1maWVsZC1pbnB1dC1jb250cm9se2ZvbnQ6aW5oZXJpdDtsZXR0ZXItc3BhY2luZzppbmhlcml0O3RleHQtZGVjb3JhdGlvbjppbmhlcml0O3RleHQtdHJhbnNmb3JtOmluaGVyaXQ7Ym9yZGVyOm5vbmV9Lm1hdC1tZGMtZm9ybS1maWVsZCAubWF0LW1kYy1mbG9hdGluZy1sYWJlbC5tZGMtZmxvYXRpbmctbGFiZWx7bGluZS1oZWlnaHQ6bm9ybWFsO3BvaW50ZXItZXZlbnRzOmFsbH0ubWRjLXRleHQtZmllbGQtLW5vLWxhYmVsOm5vdCgubWRjLXRleHQtZmllbGQtLXRleHRhcmVhKSAubWF0LW1kYy1mb3JtLWZpZWxkLWlucHV0LWNvbnRyb2wubWRjLXRleHQtZmllbGRfX2lucHV0LC5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlciAubWF0LW1kYy1mb3JtLWZpZWxkLWlucHV0LWNvbnRyb2x7aGVpZ2h0OmF1dG99Lm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVyIC5tYXQtbWRjLWZvcm0tZmllbGQtaW5wdXQtY29udHJvbC5tZGMtdGV4dC1maWVsZF9faW5wdXRbdHlwZT1jb2xvcl17aGVpZ2h0OjIzcHh9Lm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVye2hlaWdodDphdXRvO2ZsZXg6YXV0b30ubWF0LW1kYy1mb3JtLWZpZWxkLWhhcy1pY29uLXByZWZpeCAubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXJ7cGFkZGluZy1sZWZ0OjA7LS1tYXQtbWRjLWZvcm0tZmllbGQtbGFiZWwtb2Zmc2V0LXg6IC0xNnB4fS5tYXQtbWRjLWZvcm0tZmllbGQtaGFzLWljb24tc3VmZml4IC5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlcntwYWRkaW5nLXJpZ2h0OjB9W2Rpcj1ydGxdIC5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlcntwYWRkaW5nLWxlZnQ6MTZweDtwYWRkaW5nLXJpZ2h0OjE2cHh9W2Rpcj1ydGxdIC5tYXQtbWRjLWZvcm0tZmllbGQtaGFzLWljb24tc3VmZml4IC5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlcntwYWRkaW5nLWxlZnQ6MH1bZGlyPXJ0bF0gLm1hdC1tZGMtZm9ybS1maWVsZC1oYXMtaWNvbi1wcmVmaXggLm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVye3BhZGRpbmctcmlnaHQ6MH0ubWF0LW1kYy1mb3JtLWZpZWxkLWxhYmVsLWFsd2F5cy1mbG9hdCAubWRjLXRleHQtZmllbGRfX2lucHV0OjpwbGFjZWhvbGRlcnt0cmFuc2l0aW9uLWRlbGF5OjQwbXM7dHJhbnNpdGlvbi1kdXJhdGlvbjoxMTBtcztvcGFjaXR5OjF9Lm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVyIC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXggLm1hdC1tZGMtZmxvYXRpbmctbGFiZWx7bGVmdDphdXRvO3JpZ2h0OmF1dG99Lm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVyLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLXRleHQtZmllbGRfX2lucHV0e2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5tYXQtbWRjLWZvcm0tZmllbGQgLm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVyLm1kYy10ZXh0LWZpZWxkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaHtwYWRkaW5nLXRvcDowfS5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlcjo6YmVmb3Jle2NvbnRlbnQ6bm9uZX0ubWF0LW1kYy1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVye2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aWR0aDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvcm0tZmllbGQtaGludC13cmFwcGVyLC5tYXQtbWRjLWZvcm0tZmllbGQtZXJyb3Itd3JhcHBlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtwYWRkaW5nOjAgMTZweH0ubWF0LW1kYy1mb3JtLWZpZWxkLXN1YnNjcmlwdC1keW5hbWljLXNpemUgLm1hdC1tZGMtZm9ybS1maWVsZC1oaW50LXdyYXBwZXIsLm1hdC1tZGMtZm9ybS1maWVsZC1zdWJzY3JpcHQtZHluYW1pYy1zaXplIC5tYXQtbWRjLWZvcm0tZmllbGQtZXJyb3Itd3JhcHBlcntwb3NpdGlvbjpzdGF0aWN9Lm1hdC1tZGMtZm9ybS1maWVsZC1ib3R0b20tYWxpZ246OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxNnB4fS5tYXQtbWRjLWZvcm0tZmllbGQtYm90dG9tLWFsaWduLm1hdC1tZGMtZm9ybS1maWVsZC1zdWJzY3JpcHQtZHluYW1pYy1zaXplOjpiZWZvcmV7Y29udGVudDp1bnNldH0ubWF0LW1kYy1mb3JtLWZpZWxkLWhpbnQtZW5ke29yZGVyOjF9Lm1hdC1tZGMtZm9ybS1maWVsZC1oaW50LXdyYXBwZXJ7ZGlzcGxheTpmbGV4fS5tYXQtbWRjLWZvcm0tZmllbGQtaGludC1zcGFjZXJ7ZmxleDoxIDAgMWVtfS5tYXQtbWRjLWZvcm0tZmllbGQtZXJyb3J7ZGlzcGxheTpibG9ja30ubWF0LW1kYy1mb3JtLWZpZWxkLWZvY3VzLW92ZXJsYXl7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7b3BhY2l0eTowO3BvaW50ZXItZXZlbnRzOm5vbmV9c2VsZWN0Lm1hdC1tZGMtZm9ybS1maWVsZC1pbnB1dC1jb250cm9sey1tb3otYXBwZWFyYW5jZTpub25lOy13ZWJraXQtYXBwZWFyYW5jZTpub25lO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKTtkaXNwbGF5OmlubGluZS1mbGV4O2JveC1zaXppbmc6Ym9yZGVyLWJveH1zZWxlY3QubWF0LW1kYy1mb3JtLWZpZWxkLWlucHV0LWNvbnRyb2w6bm90KDpkaXNhYmxlZCl7Y3Vyc29yOnBvaW50ZXJ9Lm1hdC1tZGMtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbnRlbnQ6IiI7d2lkdGg6MDtoZWlnaHQ6MDtib3JkZXItbGVmdDo1cHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItcmlnaHQ6NXB4IHNvbGlkIHJnYmEoMCwwLDAsMCk7Ym9yZGVyLXRvcDo1cHggc29saWQ7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6NTAlO21hcmdpbi10b3A6LTIuNXB4O3BvaW50ZXItZXZlbnRzOm5vbmV9W2Rpcj1ydGxdIC5tYXQtbWRjLWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdCAubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4OjphZnRlcntyaWdodDphdXRvO2xlZnQ6MH0ubWF0LW1kYy1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QgLm1hdC1tZGMtZm9ybS1maWVsZC1pbnB1dC1jb250cm9se3BhZGRpbmctcmlnaHQ6MTVweH1bZGlyPXJ0bF0gLm1hdC1tZGMtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtbWRjLWZvcm0tZmllbGQtaW5wdXQtY29udHJvbHtwYWRkaW5nLXJpZ2h0OjA7cGFkZGluZy1sZWZ0OjE1cHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlcntvdXRsaW5lOnNvbGlkIDFweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVye291dGxpbmUtY29sb3I6R3JheVRleHR9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb2N1c2VkIC5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlcntvdXRsaW5lOmRhc2hlZCAzcHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5le2JvcmRlcjpkYXNoZWQgM3B4fS5tYXQtbWRjLWZvcm0tZmllbGQtaW5wdXQtY29udHJvbFt0eXBlPWRhdGVdLC5tYXQtbWRjLWZvcm0tZmllbGQtaW5wdXQtY29udHJvbFt0eXBlPWRhdGV0aW1lXSwubWF0LW1kYy1mb3JtLWZpZWxkLWlucHV0LWNvbnRyb2xbdHlwZT1kYXRldGltZS1sb2NhbF0sLm1hdC1tZGMtZm9ybS1maWVsZC1pbnB1dC1jb250cm9sW3R5cGU9bW9udGhdLC5tYXQtbWRjLWZvcm0tZmllbGQtaW5wdXQtY29udHJvbFt0eXBlPXdlZWtdLC5tYXQtbWRjLWZvcm0tZmllbGQtaW5wdXQtY29udHJvbFt0eXBlPXRpbWVde2xpbmUtaGVpZ2h0OjF9Lm1hdC1tZGMtZm9ybS1maWVsZC1pbnB1dC1jb250cm9sOjotd2Via2l0LWRhdGV0aW1lLWVkaXR7bGluZS1oZWlnaHQ6MTtwYWRkaW5nOjA7bWFyZ2luLWJvdHRvbTotMnB4fS5tYXQtbWRjLWZvcm0tZmllbGR7LS1tYXQtbWRjLWZvcm0tZmllbGQtZmxvYXRpbmctbGFiZWwtc2NhbGU6IDAuNzU7ZGlzcGxheTppbmxpbmUtZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjA7dGV4dC1hbGlnbjpsZWZ0fVtkaXI9cnRsXSAubWF0LW1kYy1mb3JtLWZpZWxke3RleHQtYWxpZ246cmlnaHR9Lm1hdC1tZGMtZm9ybS1maWVsZC1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmU7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCV9Lm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVye3dpZHRoOjEwMCV9Lm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXByZWZpeCwubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2FsaWduLXNlbGY6Y2VudGVyO2xpbmUtaGVpZ2h0OjA7cG9pbnRlci1ldmVudHM6YXV0b30ubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tcHJlZml4LFtkaXI9cnRsXSAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e3BhZGRpbmc6MCA0cHggMCAwfS5tYXQtbWRjLWZvcm0tZmllbGQtaWNvbi1zdWZmaXgsW2Rpcj1ydGxdIC5tYXQtbWRjLWZvcm0tZmllbGQtaWNvbi1wcmVmaXh7cGFkZGluZzowIDAgMCA0cHh9Lm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXByZWZpeD4ubWF0LWljb24sLm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXN1ZmZpeD4ubWF0LWljb257cGFkZGluZzoxMnB4O2JveC1zaXppbmc6Y29udGVudC1ib3h9Lm1hdC1tZGMtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlciAubWF0LWljb24sLm1hdC1tZGMtZm9ybS1maWVsZCBsYWJlbCAubWF0LWljb257d2lkdGg6MWVtO2hlaWdodDoxZW07Zm9udC1zaXplOmluaGVyaXR9Lm1hdC1tZGMtZm9ybS1maWVsZC1pbmZpeHtmbGV4OmF1dG87bWluLXdpZHRoOjA7d2lkdGg6MTgwcHg7cG9zaXRpb246cmVsYXRpdmU7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbWRjLWZvcm0tZmllbGQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoe21hcmdpbi1sZWZ0Oi0xcHg7LXdlYmtpdC1jbGlwLXBhdGg6aW5zZXQoLTllbSAtOTk5ZW0gLTllbSAxcHgpO2NsaXAtcGF0aDppbnNldCgtOWVtIC05OTllbSAtOWVtIDFweCl9W2Rpcj1ydGxdIC5tYXQtbWRjLWZvcm0tZmllbGQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoe21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0Oi0xcHg7LXdlYmtpdC1jbGlwLXBhdGg6aW5zZXQoLTllbSAxcHggLTllbSAtOTk5ZW0pO2NsaXAtcGF0aDppbnNldCgtOWVtIDFweCAtOWVtIC05OTllbSl9Lm1hdC1tZGMtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLW5vLWFuaW1hdGlvbnMpIC5tZGMtdGV4dC1maWVsZF9faW5wdXR7dHJhbnNpdGlvbjpvcGFjaXR5IDE1MG1zIDBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpfUBtZWRpYSBhbGx7Lm1hdC1tZGMtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLW5vLWFuaW1hdGlvbnMpIC5tZGMtdGV4dC1maWVsZF9faW5wdXQ6OnBsYWNlaG9sZGVye3RyYW5zaXRpb246b3BhY2l0eSA2N21zIDBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpfX1AbWVkaWEgYWxsey5tYXQtbWRjLWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1uby1hbmltYXRpb25zKSAubWRjLXRleHQtZmllbGRfX2lucHV0Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcnt0cmFuc2l0aW9uOm9wYWNpdHkgNjdtcyAwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKX19QG1lZGlhIGFsbHsubWRjLXRleHQtZmllbGQtLW5vLWxhYmVsIC5tYXQtbWRjLWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1uby1hbmltYXRpb25zKSAubWRjLXRleHQtZmllbGRfX2lucHV0OjpwbGFjZWhvbGRlciwubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1hdC1tZGMtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLW5vLWFuaW1hdGlvbnMpIC5tZGMtdGV4dC1maWVsZF9faW5wdXQ6OnBsYWNlaG9sZGVye3RyYW5zaXRpb24tZGVsYXk6NDBtczt0cmFuc2l0aW9uLWR1cmF0aW9uOjExMG1zfX1AbWVkaWEgYWxsey5tZGMtdGV4dC1maWVsZC0tbm8tbGFiZWwgLm1hdC1tZGMtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLW5vLWFuaW1hdGlvbnMpIC5tZGMtdGV4dC1maWVsZF9faW5wdXQ6LW1zLWlucHV0LXBsYWNlaG9sZGVyLC5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWF0LW1kYy1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtbm8tYW5pbWF0aW9ucykgLm1kYy10ZXh0LWZpZWxkX19pbnB1dDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7dHJhbnNpdGlvbi1kZWxheTo0MG1zO3RyYW5zaXRpb24tZHVyYXRpb246MTEwbXN9fS5tYXQtbWRjLWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1uby1hbmltYXRpb25zKSAubWRjLXRleHQtZmllbGRfX2FmZml4e3RyYW5zaXRpb246b3BhY2l0eSAxNTBtcyAwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKX0ubWF0LW1kYy1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtbm8tYW5pbWF0aW9ucykgLm1kYy10ZXh0LWZpZWxkLS1maWxsZWQubWRjLXJpcHBsZS11cGdyYWRlZC0tYmFja2dyb3VuZC1mb2N1c2VkIC5tZGMtdGV4dC1maWVsZF9fcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLW5vLWFuaW1hdGlvbnMpIC5tZGMtdGV4dC1maWVsZC0tZmlsbGVkOm5vdCgubWRjLXJpcHBsZS11cGdyYWRlZCk6Zm9jdXMgLm1kYy10ZXh0LWZpZWxkX19yaXBwbGU6OmJlZm9yZXt0cmFuc2l0aW9uLWR1cmF0aW9uOjc1bXN9Lm1hdC1tZGMtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLW5vLWFuaW1hdGlvbnMpIC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1mbG9hdGluZy1sYWJlbC0tc2hha2V7YW5pbWF0aW9uOm1kYy1mbG9hdGluZy1sYWJlbC1zaGFrZS1mbG9hdC1hYm92ZS10ZXh0LWZpZWxkLW91dGxpbmVkIDI1MG1zIDF9QGtleWZyYW1lcyBtZGMtZmxvYXRpbmctbGFiZWwtc2hha2UtZmxvYXQtYWJvdmUtdGV4dC1maWVsZC1vdXRsaW5lZHswJXt0cmFuc2Zvcm06dHJhbnNsYXRlWChjYWxjKDAgLSAwJSkpIHRyYW5zbGF0ZVkoLTM0Ljc1cHgpIHNjYWxlKDAuNzUpfTMzJXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLjUsIDAsIDAuNzAxNzMyLCAwLjQ5NTgxOSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoY2FsYyg0JSAtIDAlKSkgdHJhbnNsYXRlWSgtMzQuNzVweCkgc2NhbGUoMC43NSl9NjYle2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAuMzAyNDM1LCAwLjM4MTM1MiwgMC41NSwgMC45NTYzNTIpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKGNhbGMoLTQlIC0gMCUpKSB0cmFuc2xhdGVZKC0zNC43NXB4KSBzY2FsZSgwLjc1KX0xMDAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKGNhbGMoMCAtIDAlKSkgdHJhbnNsYXRlWSgtMzQuNzVweCkgc2NhbGUoMC43NSl9fS5tYXQtbWRjLWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1uby1hbmltYXRpb25zKSAubWRjLXRleHQtZmllbGQtLXRleHRhcmVhe3RyYW5zaXRpb246bm9uZX0ubWF0LW1kYy1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtbm8tYW5pbWF0aW9ucykgLm1kYy10ZXh0LWZpZWxkLS10ZXh0YXJlYS5tZGMtdGV4dC1maWVsZC0tZmlsbGVkIC5tZGMtZmxvYXRpbmctbGFiZWwtLXNoYWtle2FuaW1hdGlvbjptZGMtZmxvYXRpbmctbGFiZWwtc2hha2UtZmxvYXQtYWJvdmUtdGV4dGFyZWEtZmlsbGVkIDI1MG1zIDF9QGtleWZyYW1lcyBtZGMtZmxvYXRpbmctbGFiZWwtc2hha2UtZmxvYXQtYWJvdmUtdGV4dGFyZWEtZmlsbGVkezAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKGNhbGMoMCAtIDAlKSkgdHJhbnNsYXRlWSgtMTAuMjVweCkgc2NhbGUoMC43NSl9MzMle2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAuNSwgMCwgMC43MDE3MzIsIDAuNDk1ODE5KTt0cmFuc2Zvcm06dHJhbnNsYXRlWChjYWxjKDQlIC0gMCUpKSB0cmFuc2xhdGVZKC0xMC4yNXB4KSBzY2FsZSgwLjc1KX02NiV7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMC4zMDI0MzUsIDAuMzgxMzUyLCAwLjU1LCAwLjk1NjM1Mik7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoY2FsYygtNCUgLSAwJSkpIHRyYW5zbGF0ZVkoLTEwLjI1cHgpIHNjYWxlKDAuNzUpfTEwMCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoY2FsYygwIC0gMCUpKSB0cmFuc2xhdGVZKC0xMC4yNXB4KSBzY2FsZSgwLjc1KX19Lm1hdC1tZGMtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLW5vLWFuaW1hdGlvbnMpIC5tZGMtdGV4dC1maWVsZC0tdGV4dGFyZWEubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtZmxvYXRpbmctbGFiZWwtLXNoYWtle2FuaW1hdGlvbjptZGMtZmxvYXRpbmctbGFiZWwtc2hha2UtZmxvYXQtYWJvdmUtdGV4dGFyZWEtb3V0bGluZWQgMjUwbXMgMX1Aa2V5ZnJhbWVzIG1kYy1mbG9hdGluZy1sYWJlbC1zaGFrZS1mbG9hdC1hYm92ZS10ZXh0YXJlYS1vdXRsaW5lZHswJXt0cmFuc2Zvcm06dHJhbnNsYXRlWChjYWxjKDAgLSAwJSkpIHRyYW5zbGF0ZVkoLTI0Ljc1cHgpIHNjYWxlKDAuNzUpfTMzJXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLjUsIDAsIDAuNzAxNzMyLCAwLjQ5NTgxOSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoY2FsYyg0JSAtIDAlKSkgdHJhbnNsYXRlWSgtMjQuNzVweCkgc2NhbGUoMC43NSl9NjYle2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAuMzAyNDM1LCAwLjM4MTM1MiwgMC41NSwgMC45NTYzNTIpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKGNhbGMoLTQlIC0gMCUpKSB0cmFuc2xhdGVZKC0yNC43NXB4KSBzY2FsZSgwLjc1KX0xMDAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKGNhbGMoMCAtIDAlKSkgdHJhbnNsYXRlWSgtMjQuNzVweCkgc2NhbGUoMC43NSl9fS5tYXQtbWRjLWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1uby1hbmltYXRpb25zKSAubWRjLXRleHQtZmllbGQtLXdpdGgtbGVhZGluZy1pY29uLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLWZsb2F0aW5nLWxhYmVsLS1zaGFrZXthbmltYXRpb246bWRjLWZsb2F0aW5nLWxhYmVsLXNoYWtlLWZsb2F0LWFib3ZlLXRleHQtZmllbGQtb3V0bGluZWQtbGVhZGluZy1pY29uIDI1MG1zIDF9QGtleWZyYW1lcyBtZGMtZmxvYXRpbmctbGFiZWwtc2hha2UtZmxvYXQtYWJvdmUtdGV4dC1maWVsZC1vdXRsaW5lZC1sZWFkaW5nLWljb257MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoY2FsYygwIC0gMzJweCkpIHRyYW5zbGF0ZVkoLTM0Ljc1cHgpIHNjYWxlKDAuNzUpfTMzJXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLjUsIDAsIDAuNzAxNzMyLCAwLjQ5NTgxOSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoY2FsYyg0JSAtIDMycHgpKSB0cmFuc2xhdGVZKC0zNC43NXB4KSBzY2FsZSgwLjc1KX02NiV7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMC4zMDI0MzUsIDAuMzgxMzUyLCAwLjU1LCAwLjk1NjM1Mik7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoY2FsYygtNCUgLSAzMnB4KSkgdHJhbnNsYXRlWSgtMzQuNzVweCkgc2NhbGUoMC43NSl9MTAwJXt0cmFuc2Zvcm06dHJhbnNsYXRlWChjYWxjKDAgLSAzMnB4KSkgdHJhbnNsYXRlWSgtMzQuNzVweCkgc2NhbGUoMC43NSl9fVtkaXI9cnRsXSAubWF0LW1kYy1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtbm8tYW5pbWF0aW9ucykgLm1kYy10ZXh0LWZpZWxkLS13aXRoLWxlYWRpbmctaWNvbi5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1mbG9hdGluZy1sYWJlbC0tc2hha2UsLm1hdC1tZGMtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLW5vLWFuaW1hdGlvbnMpIC5tZGMtdGV4dC1maWVsZC0td2l0aC1sZWFkaW5nLWljb24ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkW2Rpcj1ydGxdIC5tZGMtZmxvYXRpbmctbGFiZWwtLXNoYWtle2FuaW1hdGlvbjptZGMtZmxvYXRpbmctbGFiZWwtc2hha2UtZmxvYXQtYWJvdmUtdGV4dC1maWVsZC1vdXRsaW5lZC1sZWFkaW5nLWljb24gMjUwbXMgMX1Aa2V5ZnJhbWVzIG1kYy1mbG9hdGluZy1sYWJlbC1zaGFrZS1mbG9hdC1hYm92ZS10ZXh0LWZpZWxkLW91dGxpbmVkLWxlYWRpbmctaWNvbi1ydGx7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoY2FsYygwIC0gLTMycHgpKSB0cmFuc2xhdGVZKC0zNC43NXB4KSBzY2FsZSgwLjc1KX0zMyV7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMC41LCAwLCAwLjcwMTczMiwgMC40OTU4MTkpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKGNhbGMoNCUgLSAtMzJweCkpIHRyYW5zbGF0ZVkoLTM0Ljc1cHgpIHNjYWxlKDAuNzUpfTY2JXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLjMwMjQzNSwgMC4zODEzNTIsIDAuNTUsIDAuOTU2MzUyKTt0cmFuc2Zvcm06dHJhbnNsYXRlWChjYWxjKC00JSAtIC0zMnB4KSkgdHJhbnNsYXRlWSgtMzQuNzVweCkgc2NhbGUoMC43NSl9MTAwJXt0cmFuc2Zvcm06dHJhbnNsYXRlWChjYWxjKDAgLSAtMzJweCkpIHRyYW5zbGF0ZVkoLTM0Ljc1cHgpIHNjYWxlKDAuNzUpfX0ubWF0LW1kYy1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtbm8tYW5pbWF0aW9ucykgLm1kYy1mbG9hdGluZy1sYWJlbHt0cmFuc2l0aW9uOnRyYW5zZm9ybSAxNTBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpLGNvbG9yIDE1MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSl9Lm1kYy1mbG9hdGluZy1sYWJlbC0tc2hha2V7YW5pbWF0aW9uOm1kYy1mbG9hdGluZy1sYWJlbC1zaGFrZS1mbG9hdC1hYm92ZS1zdGFuZGFyZCAyNTBtcyAxfUBrZXlmcmFtZXMgbWRjLWZsb2F0aW5nLWxhYmVsLXNoYWtlLWZsb2F0LWFib3ZlLXN0YW5kYXJkezAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKGNhbGMoMCAtIDAlKSkgdHJhbnNsYXRlWSgtMTA2JSkgc2NhbGUoMC43NSl9MzMle2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAuNSwgMCwgMC43MDE3MzIsIDAuNDk1ODE5KTt0cmFuc2Zvcm06dHJhbnNsYXRlWChjYWxjKDQlIC0gMCUpKSB0cmFuc2xhdGVZKC0xMDYlKSBzY2FsZSgwLjc1KX02NiV7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMC4zMDI0MzUsIDAuMzgxMzUyLCAwLjU1LCAwLjk1NjM1Mik7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoY2FsYygtNCUgLSAwJSkpIHRyYW5zbGF0ZVkoLTEwNiUpIHNjYWxlKDAuNzUpfTEwMCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoY2FsYygwIC0gMCUpKSB0cmFuc2xhdGVZKC0xMDYlKSBzY2FsZSgwLjc1KX19Lm1hdC1tZGMtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLW5vLWFuaW1hdGlvbnMpIC5tZGMtbGluZS1yaXBwbGU6OmFmdGVye3RyYW5zaXRpb246dHJhbnNmb3JtIDE4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSksb3BhY2l0eSAxODBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpfSddLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W1N2ZS50cmFuc2l0aW9uTWVzc2FnZXNdfSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFF2PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1IKHtpbXBvcnRzOltkbixEZSxvZyxkbl19KSxufSkoKSxqOT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5fcmVuZGVyZXI9ZSx0aGlzLl9lbGVtZW50UmVmPWksdGhpcy5vbkNoYW5nZT1yPT57fSx0aGlzLm9uVG91Y2hlZD0oKT0+e319c2V0UHJvcGVydHkoZSxpKXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsZSxpKX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXNldERpc2FibGVkU3RhdGUoZSl7dGhpcy5zZXRQcm9wZXJ0eSgiZGlzYWJsZWQiLGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGRjKSxDKHhlKSl9LG4uXHUwMjc1ZGlyPU1lKHt0eXBlOm59KSxufSkoKSxraD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgajl7fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9WG4obikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9TWUoe3R5cGU6bixmZWF0dXJlczpbWGVdfSksbn0pKCksWHI9bmV3IHRlKCJOZ1ZhbHVlQWNjZXNzb3IiKSxJdmU9e3Byb3ZpZGU6WHIsdXNlRXhpc3Rpbmc6V24oKCk9PkF2ZSksbXVsdGk6ITB9LEF2ZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMga2h7d3JpdGVWYWx1ZShlKXt0aGlzLnNldFByb3BlcnR5KCJjaGVja2VkIixlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1YbihuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1NZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmQSgiY2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkNoYW5nZShvLnRhcmdldC5jaGVja2VkKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBpLm9uVG91Y2hlZCgpfSl9LGZlYXR1cmVzOltWdChbSXZlXSksWGVdfSksbn0pKCksUnZlPXtwcm92aWRlOlhyLHVzZUV4aXN0aW5nOlduKCgpPT5VdSksbXVsdGk6ITB9LGt2ZT1uZXcgdGUoIkNvbXBvc2l0aW9uRXZlbnRNb2RlIiksVXU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGo5e2NvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcihlLGkpLHRoaXMuX2NvbXBvc2l0aW9uTW9kZT1yLHRoaXMuX2NvbXBvc2luZz0hMSxudWxsPT10aGlzLl9jb21wb3NpdGlvbk1vZGUmJih0aGlzLl9jb21wb3NpdGlvbk1vZGU9IWZ1bmN0aW9uKCl7bGV0IG49QWwoKT9BbCgpLmdldFVzZXJBZ2VudCgpOiIiO3JldHVybi9hbmRyb2lkIChcZCspLy50ZXN0KG4udG9Mb3dlckNhc2UoKSl9KCkpfXdyaXRlVmFsdWUoZSl7dGhpcy5zZXRQcm9wZXJ0eSgidmFsdWUiLGU/PyIiKX1faGFuZGxlSW5wdXQoZSl7KCF0aGlzLl9jb21wb3NpdGlvbk1vZGV8fHRoaXMuX2NvbXBvc2l0aW9uTW9kZSYmIXRoaXMuX2NvbXBvc2luZykmJnRoaXMub25DaGFuZ2UoZSl9X2NvbXBvc2l0aW9uU3RhcnQoKXt0aGlzLl9jb21wb3Npbmc9ITB9X2NvbXBvc2l0aW9uRW5kKGUpe3RoaXMuX2NvbXBvc2luZz0hMSx0aGlzLl9jb21wb3NpdGlvbk1vZGUmJnRoaXMub25DaGFuZ2UoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoZGMpLEMoeGUpLEMoa3ZlLDgpKX0sbi5cdTAyNzVkaXI9TWUoe3R5cGU6bixzZWxlY3RvcnM6W1siaW5wdXQiLCJmb3JtQ29udHJvbE5hbWUiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdLFsidGV4dGFyZWEiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwiZm9ybUNvbnRyb2wiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdLFsidGV4dGFyZWEiLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJuZ01vZGVsIiwiIiwzLCJ0eXBlIiwiY2hlY2tib3giXSxbInRleHRhcmVhIiwibmdNb2RlbCIsIiJdLFsiIiwibmdEZWZhdWx0Q29udHJvbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJkEoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5faGFuZGxlSW5wdXQoby50YXJnZXQudmFsdWUpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25Ub3VjaGVkKCl9KSgiY29tcG9zaXRpb25zdGFydCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fY29tcG9zaXRpb25TdGFydCgpfSkoImNvbXBvc2l0aW9uZW5kIixmdW5jdGlvbihvKXtyZXR1cm4gaS5fY29tcG9zaXRpb25FbmQoby50YXJnZXQudmFsdWUpfSl9LGZlYXR1cmVzOltWdChbUnZlXSksWGVdfSksbn0pKCksT3ZlPSExO2Z1bmN0aW9uIHp1KG4pe3JldHVybiBudWxsPT1ufHwoInN0cmluZyI9PXR5cGVvZiBufHxBcnJheS5pc0FycmF5KG4pKSYmMD09PW4ubGVuZ3RofWZ1bmN0aW9uIEc5KG4pe3JldHVybiBudWxsIT1uJiYibnVtYmVyIj09dHlwZW9mIG4ubGVuZ3RofXZhciBJbz1uZXcgdGUoIk5nVmFsaWRhdG9ycyIpLGp1PW5ldyB0ZSgiTmdBc3luY1ZhbGlkYXRvcnMiKSxGdmU9L14oPz0uezEsMjU0fSQpKD89LnsxLDY0fUApW2EtekEtWjAtOSEjJCUmJyorLz0/Xl9ge3x9fi1dKyg/OlwuW2EtekEtWjAtOSEjJCUmJyorLz0/Xl9ge3x9fi1dKykqQFthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSokLyxpbD1jbGFzc3tzdGF0aWMgbWluKHQpe3JldHVybiBXOSh0KX1zdGF0aWMgbWF4KHQpe3JldHVybiBxOSh0KX1zdGF0aWMgcmVxdWlyZWQodCl7cmV0dXJuIFg5KHQpfXN0YXRpYyByZXF1aXJlZFRydWUodCl7cmV0dXJuIFk5KHQpfXN0YXRpYyBlbWFpbCh0KXtyZXR1cm4gUTkodCl9c3RhdGljIG1pbkxlbmd0aCh0KXtyZXR1cm4gWjkodCl9c3RhdGljIG1heExlbmd0aCh0KXtyZXR1cm4gSzkodCl9c3RhdGljIHBhdHRlcm4odCl7cmV0dXJuIEo5KHQpfXN0YXRpYyBudWxsVmFsaWRhdG9yKHQpe3JldHVybiBudWxsfXN0YXRpYyBjb21wb3NlKHQpe3JldHVybiBycSh0KX1zdGF0aWMgY29tcG9zZUFzeW5jKHQpe3JldHVybiBvcSh0KX19O2Z1bmN0aW9uIFc5KG4pe3JldHVybiB0PT57aWYoenUodC52YWx1ZSl8fHp1KG4pKXJldHVybiBudWxsO2xldCBlPXBhcnNlRmxvYXQodC52YWx1ZSk7cmV0dXJuIWlzTmFOKGUpJiZlPG4/e21pbjp7bWluOm4sYWN0dWFsOnQudmFsdWV9fTpudWxsfX1mdW5jdGlvbiBxOShuKXtyZXR1cm4gdD0+e2lmKHp1KHQudmFsdWUpfHx6dShuKSlyZXR1cm4gbnVsbDtsZXQgZT1wYXJzZUZsb2F0KHQudmFsdWUpO3JldHVybiFpc05hTihlKSYmZT5uP3ttYXg6e21heDpuLGFjdHVhbDp0LnZhbHVlfX06bnVsbH19ZnVuY3Rpb24gWDkobil7cmV0dXJuIHp1KG4udmFsdWUpP3tyZXF1aXJlZDohMH06bnVsbH1mdW5jdGlvbiBZOShuKXtyZXR1cm4hMD09PW4udmFsdWU/bnVsbDp7cmVxdWlyZWQ6ITB9fWZ1bmN0aW9uIFE5KG4pe3JldHVybiB6dShuLnZhbHVlKXx8RnZlLnRlc3Qobi52YWx1ZSk/bnVsbDp7ZW1haWw6ITB9fWZ1bmN0aW9uIFo5KG4pe3JldHVybiB0PT56dSh0LnZhbHVlKXx8IUc5KHQudmFsdWUpP251bGw6dC52YWx1ZS5sZW5ndGg8bj97bWlubGVuZ3RoOntyZXF1aXJlZExlbmd0aDpuLGFjdHVhbExlbmd0aDp0LnZhbHVlLmxlbmd0aH19Om51bGx9ZnVuY3Rpb24gSzkobil7cmV0dXJuIHQ9Pkc5KHQudmFsdWUpJiZ0LnZhbHVlLmxlbmd0aD5uP3ttYXhsZW5ndGg6e3JlcXVpcmVkTGVuZ3RoOm4sYWN0dWFsTGVuZ3RoOnQudmFsdWUubGVuZ3RofX06bnVsbH1mdW5jdGlvbiBKOShuKXtpZighbilyZXR1cm4gdEU7bGV0IHQsZTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/KGU9IiIsIl4iIT09bi5jaGFyQXQoMCkmJihlKz0iXiIpLGUrPW4sIiQiIT09bi5jaGFyQXQobi5sZW5ndGgtMSkmJihlKz0iJCIpLHQ9bmV3IFJlZ0V4cChlKSk6KGU9bi50b1N0cmluZygpLHQ9biksaT0+e2lmKHp1KGkudmFsdWUpKXJldHVybiBudWxsO2xldCByPWkudmFsdWU7cmV0dXJuIHQudGVzdChyKT9udWxsOntwYXR0ZXJuOntyZXF1aXJlZFBhdHRlcm46ZSxhY3R1YWxWYWx1ZTpyfX19fWZ1bmN0aW9uIHRFKG4pe3JldHVybiBudWxsfWZ1bmN0aW9uICQ5KG4pe3JldHVybiBudWxsIT1ufWZ1bmN0aW9uIGVxKG4pe2xldCB0PUNmKG4pP0pyKG4pOm47aWYoT3ZlJiYhSWsodCkpe2xldCBlPSJFeHBlY3RlZCBhc3luYyB2YWxpZGF0b3IgdG8gcmV0dXJuIFByb21pc2Ugb3IgT2JzZXJ2YWJsZS4iO3Rocm93Im9iamVjdCI9PXR5cGVvZiBuJiYoZSs9IiBBcmUgeW91IHVzaW5nIGEgc3luY2hyb25vdXMgdmFsaWRhdG9yIHdoZXJlIGFuIGFzeW5jIHZhbGlkYXRvciBpcyBleHBlY3RlZD8iKSxuZXcgeHQoLTExMDEsZSl9cmV0dXJuIHR9ZnVuY3Rpb24gdHEobil7bGV0IHQ9e307cmV0dXJuIG4uZm9yRWFjaChlPT57dD1udWxsIT1lP3suLi50LC4uLmV9OnR9KSwwPT09T2JqZWN0LmtleXModCkubGVuZ3RoP251bGw6dH1mdW5jdGlvbiBucShuLHQpe3JldHVybiB0Lm1hcChlPT5lKG4pKX1mdW5jdGlvbiBpcShuKXtyZXR1cm4gbi5tYXAodD0+ZnVuY3Rpb24obil7cmV0dXJuIW4udmFsaWRhdGV9KHQpP3Q6ZT0+dC52YWxpZGF0ZShlKSl9ZnVuY3Rpb24gcnEobil7aWYoIW4pcmV0dXJuIG51bGw7bGV0IHQ9bi5maWx0ZXIoJDkpO3JldHVybiAwPT10Lmxlbmd0aD9udWxsOmZ1bmN0aW9uKGUpe3JldHVybiB0cShucShlLHQpKX19ZnVuY3Rpb24gQjIobil7cmV0dXJuIG51bGwhPW4/cnEoaXEobikpOm51bGx9ZnVuY3Rpb24gb3Eobil7aWYoIW4pcmV0dXJuIG51bGw7bGV0IHQ9bi5maWx0ZXIoJDkpO3JldHVybiAwPT10Lmxlbmd0aD9udWxsOmZ1bmN0aW9uKGUpe3JldHVybiBDbyhucShlLHQpLm1hcChlcSkpLnBpcGUocSh0cSkpfX1mdW5jdGlvbiBWMihuKXtyZXR1cm4gbnVsbCE9bj9vcShpcShuKSk6bnVsbH1mdW5jdGlvbiBOOShuLHQpe3JldHVybiBudWxsPT09bj9bdF06QXJyYXkuaXNBcnJheShuKT9bLi4ubix0XTpbbix0XX1mdW5jdGlvbiBhcShuKXtyZXR1cm4gbi5fcmF3VmFsaWRhdG9yc31mdW5jdGlvbiBzcShuKXtyZXR1cm4gbi5fcmF3QXN5bmNWYWxpZGF0b3JzfWZ1bmN0aW9uIEYyKG4pe3JldHVybiBuP0FycmF5LmlzQXJyYXkobik/bjpbbl06W119ZnVuY3Rpb24gbkUobix0KXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9uLmluY2x1ZGVzKHQpOm49PT10fWZ1bmN0aW9uIEw5KG4sdCl7bGV0IGU9RjIodCk7cmV0dXJuIEYyKG4pLmZvckVhY2gocj0+e25FKGUscil8fGUucHVzaChyKX0pLGV9ZnVuY3Rpb24gQjkobix0KXtyZXR1cm4gRjIodCkuZmlsdGVyKGU9PiFuRShuLGUpKX12YXIgaUU9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl9yYXdWYWxpZGF0b3JzPVtdLHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz1bXSx0aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3M9W119Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudmFsdWU6bnVsbH1nZXQgdmFsaWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC52YWxpZDpudWxsfWdldCBpbnZhbGlkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuaW52YWxpZDpudWxsfWdldCBwZW5kaW5nKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wucGVuZGluZzpudWxsfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmRpc2FibGVkOm51bGx9Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5lbmFibGVkOm51bGx9Z2V0IGVycm9ycygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmVycm9yczpudWxsfWdldCBwcmlzdGluZSgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnByaXN0aW5lOm51bGx9Z2V0IGRpcnR5KCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZGlydHk6bnVsbH1nZXQgdG91Y2hlZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnRvdWNoZWQ6bnVsbH1nZXQgc3RhdHVzKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuc3RhdHVzOm51bGx9Z2V0IHVudG91Y2hlZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnVudG91Y2hlZDpudWxsfWdldCBzdGF0dXNDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuc3RhdHVzQ2hhbmdlczpudWxsfWdldCB2YWx1ZUNoYW5nZXMoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC52YWx1ZUNoYW5nZXM6bnVsbH1nZXQgcGF0aCgpe3JldHVybiBudWxsfV9zZXRWYWxpZGF0b3JzKHQpe3RoaXMuX3Jhd1ZhbGlkYXRvcnM9dHx8W10sdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbj1CMih0aGlzLl9yYXdWYWxpZGF0b3JzKX1fc2V0QXN5bmNWYWxpZGF0b3JzKHQpe3RoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz10fHxbXSx0aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm49VjIodGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzKX1nZXQgdmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm58fG51bGx9Z2V0IGFzeW5jVmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbnx8bnVsbH1fcmVnaXN0ZXJPbkRlc3Ryb3kodCl7dGhpcy5fb25EZXN0cm95Q2FsbGJhY2tzLnB1c2godCl9X2ludm9rZU9uRGVzdHJveUNhbGxiYWNrcygpe3RoaXMuX29uRGVzdHJveUNhbGxiYWNrcy5mb3JFYWNoKHQ9PnQoKSksdGhpcy5fb25EZXN0cm95Q2FsbGJhY2tzPVtdfXJlc2V0KHQpe3RoaXMuY29udHJvbCYmdGhpcy5jb250cm9sLnJlc2V0KHQpfWhhc0Vycm9yKHQsZSl7cmV0dXJuISF0aGlzLmNvbnRyb2wmJnRoaXMuY29udHJvbC5oYXNFcnJvcih0LGUpfWdldEVycm9yKHQsZSl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZ2V0RXJyb3IodCxlKTpudWxsfX0sSm89Y2xhc3MgZXh0ZW5kcyBpRXtnZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiBudWxsfWdldCBwYXRoKCl7cmV0dXJuIG51bGx9fSxxYT1jbGFzcyBleHRlbmRzIGlFe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9wYXJlbnQ9bnVsbCx0aGlzLm5hbWU9bnVsbCx0aGlzLnZhbHVlQWNjZXNzb3I9bnVsbH19LE4yPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX2NkPXR9Z2V0IGlzVG91Y2hlZCgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LnRvdWNoZWR9Z2V0IGlzVW50b3VjaGVkKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8udW50b3VjaGVkfWdldCBpc1ByaXN0aW5lKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8ucHJpc3RpbmV9Z2V0IGlzRGlydHkoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy5kaXJ0eX1nZXQgaXNWYWxpZCgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LnZhbGlkfWdldCBpc0ludmFsaWQoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy5pbnZhbGlkfWdldCBpc1BlbmRpbmcoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy5wZW5kaW5nfWdldCBpc1N1Ym1pdHRlZCgpe3JldHVybiEhdGhpcy5fY2Q/LnN1Ym1pdHRlZH19LHhnPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBOMntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhxYSwyKSl9LG4uXHUwMjc1ZGlyPU1lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiIiwibmdNb2RlbCIsIiJdLFsiIiwiZm9ybUNvbnRyb2wiLCIiXV0saG9zdFZhcnM6MTQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZudCgibmctdW50b3VjaGVkIixpLmlzVW50b3VjaGVkKSgibmctdG91Y2hlZCIsaS5pc1RvdWNoZWQpKCJuZy1wcmlzdGluZSIsaS5pc1ByaXN0aW5lKSgibmctZGlydHkiLGkuaXNEaXJ0eSkoIm5nLXZhbGlkIixpLmlzVmFsaWQpKCJuZy1pbnZhbGlkIixpLmlzSW52YWxpZCkoIm5nLXBlbmRpbmciLGkuaXNQZW5kaW5nKX0sZmVhdHVyZXM6W1hlXX0pLG59KSgpO2Z1bmN0aW9uIGxxKG4sdCl7cmV0dXJuIG4/YHdpdGggbmFtZTogJyR7dH0nYDpgYXQgaW5kZXg6ICR7dH1gfXZhciBMMj0hMSxLdj0iVkFMSUQiLGVFPSJJTlZBTElEIix5Zz0iUEVORElORyIsSnY9IkRJU0FCTEVEIjtmdW5jdGlvbiBjcShuKXtyZXR1cm4oY0Uobik/bi52YWxpZGF0b3JzOm4pfHxudWxsfWZ1bmN0aW9uIGRxKG4sdCl7cmV0dXJuKGNFKHQpP3QuYXN5bmNWYWxpZGF0b3JzOm4pfHxudWxsfWZ1bmN0aW9uIGNFKG4pe3JldHVybiBudWxsIT1uJiYhQXJyYXkuaXNBcnJheShuKSYmIm9iamVjdCI9PXR5cGVvZiBufXZhciByRT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX3BlbmRpbmdEaXJ0eT0hMSx0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3I9ITEsdGhpcy5fcGVuZGluZ1RvdWNoZWQ9ITEsdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlPSgpPT57fSx0aGlzLl9wYXJlbnQ9bnVsbCx0aGlzLnByaXN0aW5lPSEwLHRoaXMudG91Y2hlZD0hMSx0aGlzLl9vbkRpc2FibGVkQ2hhbmdlPVtdLHRoaXMuX2Fzc2lnblZhbGlkYXRvcnModCksdGhpcy5fYXNzaWduQXN5bmNWYWxpZGF0b3JzKGUpfWdldCB2YWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbn1zZXQgdmFsaWRhdG9yKHQpe3RoaXMuX3Jhd1ZhbGlkYXRvcnM9dGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbj10fWdldCBhc3luY1ZhbGlkYXRvcigpe3JldHVybiB0aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm59c2V0IGFzeW5jVmFsaWRhdG9yKHQpe3RoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz10aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm49dH1nZXQgcGFyZW50KCl7cmV0dXJuIHRoaXMuX3BhcmVudH1nZXQgdmFsaWQoKXtyZXR1cm4gdGhpcy5zdGF0dXM9PT1Ldn1nZXQgaW52YWxpZCgpe3JldHVybiB0aGlzLnN0YXR1cz09PWVFfWdldCBwZW5kaW5nKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT15Z31nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5zdGF0dXM9PT1Kdn1nZXQgZW5hYmxlZCgpe3JldHVybiB0aGlzLnN0YXR1cyE9PUp2fWdldCBkaXJ0eSgpe3JldHVybiF0aGlzLnByaXN0aW5lfWdldCB1bnRvdWNoZWQoKXtyZXR1cm4hdGhpcy50b3VjaGVkfWdldCB1cGRhdGVPbigpe3JldHVybiB0aGlzLl91cGRhdGVPbj90aGlzLl91cGRhdGVPbjp0aGlzLnBhcmVudD90aGlzLnBhcmVudC51cGRhdGVPbjoiY2hhbmdlIn1zZXRWYWxpZGF0b3JzKHQpe3RoaXMuX2Fzc2lnblZhbGlkYXRvcnModCl9c2V0QXN5bmNWYWxpZGF0b3JzKHQpe3RoaXMuX2Fzc2lnbkFzeW5jVmFsaWRhdG9ycyh0KX1hZGRWYWxpZGF0b3JzKHQpe3RoaXMuc2V0VmFsaWRhdG9ycyhMOSh0LHRoaXMuX3Jhd1ZhbGlkYXRvcnMpKX1hZGRBc3luY1ZhbGlkYXRvcnModCl7dGhpcy5zZXRBc3luY1ZhbGlkYXRvcnMoTDkodCx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpKX1yZW1vdmVWYWxpZGF0b3JzKHQpe3RoaXMuc2V0VmFsaWRhdG9ycyhCOSh0LHRoaXMuX3Jhd1ZhbGlkYXRvcnMpKX1yZW1vdmVBc3luY1ZhbGlkYXRvcnModCl7dGhpcy5zZXRBc3luY1ZhbGlkYXRvcnMoQjkodCx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpKX1oYXNWYWxpZGF0b3IodCl7cmV0dXJuIG5FKHRoaXMuX3Jhd1ZhbGlkYXRvcnMsdCl9aGFzQXN5bmNWYWxpZGF0b3IodCl7cmV0dXJuIG5FKHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycyx0KX1jbGVhclZhbGlkYXRvcnMoKXt0aGlzLnZhbGlkYXRvcj1udWxsfWNsZWFyQXN5bmNWYWxpZGF0b3JzKCl7dGhpcy5hc3luY1ZhbGlkYXRvcj1udWxsfW1hcmtBc1RvdWNoZWQodD17fSl7dGhpcy50b3VjaGVkPSEwLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC5tYXJrQXNUb3VjaGVkKHQpfW1hcmtBbGxBc1RvdWNoZWQoKXt0aGlzLm1hcmtBc1RvdWNoZWQoe29ubHlTZWxmOiEwfSksdGhpcy5fZm9yRWFjaENoaWxkKHQ9PnQubWFya0FsbEFzVG91Y2hlZCgpKX1tYXJrQXNVbnRvdWNoZWQodD17fSl7dGhpcy50b3VjaGVkPSExLHRoaXMuX3BlbmRpbmdUb3VjaGVkPSExLHRoaXMuX2ZvckVhY2hDaGlsZChlPT57ZS5tYXJrQXNVbnRvdWNoZWQoe29ubHlTZWxmOiEwfSl9KSx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQuX3VwZGF0ZVRvdWNoZWQodCl9bWFya0FzRGlydHkodD17fSl7dGhpcy5wcmlzdGluZT0hMSx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzRGlydHkodCl9bWFya0FzUHJpc3RpbmUodD17fSl7dGhpcy5wcmlzdGluZT0hMCx0aGlzLl9wZW5kaW5nRGlydHk9ITEsdGhpcy5fZm9yRWFjaENoaWxkKGU9PntlLm1hcmtBc1ByaXN0aW5lKHtvbmx5U2VsZjohMH0pfSksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVQcmlzdGluZSh0KX1tYXJrQXNQZW5kaW5nKHQ9e30pe3RoaXMuc3RhdHVzPXlnLCExIT09dC5lbWl0RXZlbnQmJnRoaXMuc3RhdHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzUGVuZGluZyh0KX1kaXNhYmxlKHQ9e30pe2xldCBlPXRoaXMuX3BhcmVudE1hcmtlZERpcnR5KHQub25seVNlbGYpO3RoaXMuc3RhdHVzPUp2LHRoaXMuZXJyb3JzPW51bGwsdGhpcy5fZm9yRWFjaENoaWxkKGk9PntpLmRpc2FibGUoey4uLnQsb25seVNlbGY6ITB9KX0pLHRoaXMuX3VwZGF0ZVZhbHVlKCksITEhPT10LmVtaXRFdmVudCYmKHRoaXMudmFsdWVDaGFuZ2VzLmVtaXQodGhpcy52YWx1ZSksdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpKSx0aGlzLl91cGRhdGVBbmNlc3RvcnMoey4uLnQsc2tpcFByaXN0aW5lQ2hlY2s6ZX0pLHRoaXMuX29uRGlzYWJsZWRDaGFuZ2UuZm9yRWFjaChpPT5pKCEwKSl9ZW5hYmxlKHQ9e30pe2xldCBlPXRoaXMuX3BhcmVudE1hcmtlZERpcnR5KHQub25seVNlbGYpO3RoaXMuc3RhdHVzPUt2LHRoaXMuX2ZvckVhY2hDaGlsZChpPT57aS5lbmFibGUoey4uLnQsb25seVNlbGY6ITB9KX0pLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OnQuZW1pdEV2ZW50fSksdGhpcy5fdXBkYXRlQW5jZXN0b3JzKHsuLi50LHNraXBQcmlzdGluZUNoZWNrOmV9KSx0aGlzLl9vbkRpc2FibGVkQ2hhbmdlLmZvckVhY2goaT0+aSghMSkpfV91cGRhdGVBbmNlc3RvcnModCl7dGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmKHRoaXMuX3BhcmVudC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHQpLHQuc2tpcFByaXN0aW5lQ2hlY2t8fHRoaXMuX3BhcmVudC5fdXBkYXRlUHJpc3RpbmUoKSx0aGlzLl9wYXJlbnQuX3VwZGF0ZVRvdWNoZWQoKSl9c2V0UGFyZW50KHQpe3RoaXMuX3BhcmVudD10fWdldFJhd1ZhbHVlKCl7cmV0dXJuIHRoaXMudmFsdWV9dXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh0PXt9KXt0aGlzLl9zZXRJbml0aWFsU3RhdHVzKCksdGhpcy5fdXBkYXRlVmFsdWUoKSx0aGlzLmVuYWJsZWQmJih0aGlzLl9jYW5jZWxFeGlzdGluZ1N1YnNjcmlwdGlvbigpLHRoaXMuZXJyb3JzPXRoaXMuX3J1blZhbGlkYXRvcigpLHRoaXMuc3RhdHVzPXRoaXMuX2NhbGN1bGF0ZVN0YXR1cygpLCh0aGlzLnN0YXR1cz09PUt2fHx0aGlzLnN0YXR1cz09PXlnKSYmdGhpcy5fcnVuQXN5bmNWYWxpZGF0b3IodC5lbWl0RXZlbnQpKSwhMSE9PXQuZW1pdEV2ZW50JiYodGhpcy52YWx1ZUNoYW5nZXMuZW1pdCh0aGlzLnZhbHVlKSx0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0aGlzLnN0YXR1cykpLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHQpfV91cGRhdGVUcmVlVmFsaWRpdHkodD17ZW1pdEV2ZW50OiEwfSl7dGhpcy5fZm9yRWFjaENoaWxkKGU9PmUuX3VwZGF0ZVRyZWVWYWxpZGl0eSh0KSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6dC5lbWl0RXZlbnR9KX1fc2V0SW5pdGlhbFN0YXR1cygpe3RoaXMuc3RhdHVzPXRoaXMuX2FsbENvbnRyb2xzRGlzYWJsZWQoKT9KdjpLdn1fcnVuVmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMudmFsaWRhdG9yP3RoaXMudmFsaWRhdG9yKHRoaXMpOm51bGx9X3J1bkFzeW5jVmFsaWRhdG9yKHQpe2lmKHRoaXMuYXN5bmNWYWxpZGF0b3Ipe3RoaXMuc3RhdHVzPXlnLHRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMDtsZXQgZT1lcSh0aGlzLmFzeW5jVmFsaWRhdG9yKHRoaXMpKTt0aGlzLl9hc3luY1ZhbGlkYXRpb25TdWJzY3JpcHRpb249ZS5zdWJzY3JpYmUoaT0+e3RoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSx0aGlzLnNldEVycm9ycyhpLHtlbWl0RXZlbnQ6dH0pfSl9fV9jYW5jZWxFeGlzdGluZ1N1YnNjcmlwdGlvbigpe3RoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbiYmKHRoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSl9c2V0RXJyb3JzKHQsZT17fSl7dGhpcy5lcnJvcnM9dCx0aGlzLl91cGRhdGVDb250cm9sc0Vycm9ycyghMSE9PWUuZW1pdEV2ZW50KX1nZXQodCl7bGV0IGU9dDtyZXR1cm4gbnVsbD09ZXx8KEFycmF5LmlzQXJyYXkoZSl8fChlPWUuc3BsaXQoIi4iKSksMD09PWUubGVuZ3RoKT9udWxsOmUucmVkdWNlKChpLHIpPT5pJiZpLl9maW5kKHIpLHRoaXMpfWdldEVycm9yKHQsZSl7bGV0IGk9ZT90aGlzLmdldChlKTp0aGlzO3JldHVybiBpJiZpLmVycm9ycz9pLmVycm9yc1t0XTpudWxsfWhhc0Vycm9yKHQsZSl7cmV0dXJuISF0aGlzLmdldEVycm9yKHQsZSl9Z2V0IHJvb3QoKXtsZXQgdD10aGlzO2Zvcig7dC5fcGFyZW50Oyl0PXQuX3BhcmVudDtyZXR1cm4gdH1fdXBkYXRlQ29udHJvbHNFcnJvcnModCl7dGhpcy5zdGF0dXM9dGhpcy5fY2FsY3VsYXRlU3RhdHVzKCksdCYmdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpLHRoaXMuX3BhcmVudCYmdGhpcy5fcGFyZW50Ll91cGRhdGVDb250cm9sc0Vycm9ycyh0KX1faW5pdE9ic2VydmFibGVzKCl7dGhpcy52YWx1ZUNoYW5nZXM9bmV3IEYsdGhpcy5zdGF0dXNDaGFuZ2VzPW5ldyBGfV9jYWxjdWxhdGVTdGF0dXMoKXtyZXR1cm4gdGhpcy5fYWxsQ29udHJvbHNEaXNhYmxlZCgpP0p2OnRoaXMuZXJyb3JzP2VFOnRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcnx8dGhpcy5fYW55Q29udHJvbHNIYXZlU3RhdHVzKHlnKT95Zzp0aGlzLl9hbnlDb250cm9sc0hhdmVTdGF0dXMoZUUpP2VFOkt2fV9hbnlDb250cm9sc0hhdmVTdGF0dXModCl7cmV0dXJuIHRoaXMuX2FueUNvbnRyb2xzKGU9PmUuc3RhdHVzPT09dCl9X2FueUNvbnRyb2xzRGlydHkoKXtyZXR1cm4gdGhpcy5fYW55Q29udHJvbHModD0+dC5kaXJ0eSl9X2FueUNvbnRyb2xzVG91Y2hlZCgpe3JldHVybiB0aGlzLl9hbnlDb250cm9scyh0PT50LnRvdWNoZWQpfV91cGRhdGVQcmlzdGluZSh0PXt9KXt0aGlzLnByaXN0aW5lPSF0aGlzLl9hbnlDb250cm9sc0RpcnR5KCksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVQcmlzdGluZSh0KX1fdXBkYXRlVG91Y2hlZCh0PXt9KXt0aGlzLnRvdWNoZWQ9dGhpcy5fYW55Q29udHJvbHNUb3VjaGVkKCksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVUb3VjaGVkKHQpfV9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSh0KXt0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2U9dH1fc2V0VXBkYXRlU3RyYXRlZ3kodCl7Y0UodCkmJm51bGwhPXQudXBkYXRlT24mJih0aGlzLl91cGRhdGVPbj10LnVwZGF0ZU9uKX1fcGFyZW50TWFya2VkRGlydHkodCl7cmV0dXJuIXQmJiEoIXRoaXMuX3BhcmVudHx8IXRoaXMuX3BhcmVudC5kaXJ0eSkmJiF0aGlzLl9wYXJlbnQuX2FueUNvbnRyb2xzRGlydHkoKX1fZmluZCh0KXtyZXR1cm4gbnVsbH1fYXNzaWduVmFsaWRhdG9ycyh0KXt0aGlzLl9yYXdWYWxpZGF0b3JzPUFycmF5LmlzQXJyYXkodCk/dC5zbGljZSgpOnQsdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbj1mdW5jdGlvbihuKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9CMihuKTpufHxudWxsfSh0aGlzLl9yYXdWYWxpZGF0b3JzKX1fYXNzaWduQXN5bmNWYWxpZGF0b3JzKHQpe3RoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz1BcnJheS5pc0FycmF5KHQpP3Quc2xpY2UoKTp0LHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbj1mdW5jdGlvbihuKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9WMihuKTpufHxudWxsfSh0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpfX0sb0U9Y2xhc3MgZXh0ZW5kcyByRXtjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoY3EoZSksZHEoaSxlKSksdGhpcy5jb250cm9scz10LHRoaXMuX2luaXRPYnNlcnZhYmxlcygpLHRoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KGUpLHRoaXMuX3NldFVwQ29udHJvbHMoKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohIXRoaXMuYXN5bmNWYWxpZGF0b3J9KX1yZWdpc3RlckNvbnRyb2wodCxlKXtyZXR1cm4gdGhpcy5jb250cm9sc1t0XT90aGlzLmNvbnRyb2xzW3RdOih0aGlzLmNvbnRyb2xzW3RdPWUsZS5zZXRQYXJlbnQodGhpcyksZS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UodGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKSxlKX1hZGRDb250cm9sKHQsZSxpPXt9KXt0aGlzLnJlZ2lzdGVyQ29udHJvbCh0LGUpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OmkuZW1pdEV2ZW50fSksdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKCl9cmVtb3ZlQ29udHJvbCh0LGU9e30pe3RoaXMuY29udHJvbHNbdF0mJnRoaXMuY29udHJvbHNbdF0uX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKCgpPT57fSksZGVsZXRlIHRoaXMuY29udHJvbHNbdF0sdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ZS5lbWl0RXZlbnR9KSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX1zZXRDb250cm9sKHQsZSxpPXt9KXt0aGlzLmNvbnRyb2xzW3RdJiZ0aGlzLmNvbnRyb2xzW3RdLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSgoKT0+e30pLGRlbGV0ZSB0aGlzLmNvbnRyb2xzW3RdLGUmJnRoaXMucmVnaXN0ZXJDb250cm9sKHQsZSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6aS5lbWl0RXZlbnR9KSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX1jb250YWlucyh0KXtyZXR1cm4gdGhpcy5jb250cm9scy5oYXNPd25Qcm9wZXJ0eSh0KSYmdGhpcy5jb250cm9sc1t0XS5lbmFibGVkfXNldFZhbHVlKHQsZT17fSl7KGZ1bmN0aW9uKG4sdCxlKXtuLl9mb3JFYWNoQ2hpbGQoKGkscik9PntpZih2b2lkIDA9PT1lW3JdKXRocm93IG5ldyB4dCgxMDAyLEwyP2Z1bmN0aW9uKG4sdCl7cmV0dXJuYE11c3Qgc3VwcGx5IGEgdmFsdWUgZm9yIGZvcm0gY29udHJvbCAke2xxKG4sdCl9YH0odCxyKToiIil9KX0pKHRoaXMsITAsdCksT2JqZWN0LmtleXModCkuZm9yRWFjaChpPT57KGZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1uLmNvbnRyb2xzO2lmKCEodD9PYmplY3Qua2V5cyhpKTppKS5sZW5ndGgpdGhyb3cgbmV3IHh0KDFlMyxMMj9mdW5jdGlvbihuKXtyZXR1cm5gXG4gICAgVGhlcmUgYXJlIG5vIGZvcm0gY29udHJvbHMgcmVnaXN0ZXJlZCB3aXRoIHRoaXMgJHtuPyJncm91cCI6ImFycmF5In0geWV0LiBJZiB5b3UncmUgdXNpbmcgbmdNb2RlbCxcbiAgICB5b3UgbWF5IHdhbnQgdG8gY2hlY2sgbmV4dCB0aWNrIChlLmcuIHVzZSBzZXRUaW1lb3V0KS5cbiAgYH0odCk6IiIpO2lmKCFpW2VdKXRocm93IG5ldyB4dCgxMDAxLEwyP2Z1bmN0aW9uKG4sdCl7cmV0dXJuYENhbm5vdCBmaW5kIGZvcm0gY29udHJvbCAke2xxKG4sdCl9YH0odCxlKToiIil9KSh0aGlzLCEwLGkpLHRoaXMuY29udHJvbHNbaV0uc2V0VmFsdWUodFtpXSx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmUuZW1pdEV2ZW50fSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoZSl9cGF0Y2hWYWx1ZSh0LGU9e30pe251bGwhPXQmJihPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGk9PntsZXQgcj10aGlzLmNvbnRyb2xzW2ldO3ImJnIucGF0Y2hWYWx1ZSh0W2ldLHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ZS5lbWl0RXZlbnR9KX0pLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShlKSl9cmVzZXQodD17fSxlPXt9KXt0aGlzLl9mb3JFYWNoQ2hpbGQoKGkscik9PntpLnJlc2V0KHRbcl0se29ubHlTZWxmOiEwLGVtaXRFdmVudDplLmVtaXRFdmVudH0pfSksdGhpcy5fdXBkYXRlUHJpc3RpbmUoZSksdGhpcy5fdXBkYXRlVG91Y2hlZChlKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoZSl9Z2V0UmF3VmFsdWUoKXtyZXR1cm4gdGhpcy5fcmVkdWNlQ2hpbGRyZW4oe30sKHQsZSxpKT0+KHRbaV09ZS5nZXRSYXdWYWx1ZSgpLHQpKX1fc3luY1BlbmRpbmdDb250cm9scygpe2xldCB0PXRoaXMuX3JlZHVjZUNoaWxkcmVuKCExLChlLGkpPT4hIWkuX3N5bmNQZW5kaW5nQ29udHJvbHMoKXx8ZSk7cmV0dXJuIHQmJnRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITB9KSx0fV9mb3JFYWNoQ2hpbGQodCl7T2JqZWN0LmtleXModGhpcy5jb250cm9scykuZm9yRWFjaChlPT57bGV0IGk9dGhpcy5jb250cm9sc1tlXTtpJiZ0KGksZSl9KX1fc2V0VXBDb250cm9scygpe3RoaXMuX2ZvckVhY2hDaGlsZCh0PT57dC5zZXRQYXJlbnQodGhpcyksdC5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UodGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKX0pfV91cGRhdGVWYWx1ZSgpe3RoaXMudmFsdWU9dGhpcy5fcmVkdWNlVmFsdWUoKX1fYW55Q29udHJvbHModCl7Zm9yKGxldFtlLGldb2YgT2JqZWN0LmVudHJpZXModGhpcy5jb250cm9scykpaWYodGhpcy5jb250YWlucyhlKSYmdChpKSlyZXR1cm4hMDtyZXR1cm4hMX1fcmVkdWNlVmFsdWUoKXtyZXR1cm4gdGhpcy5fcmVkdWNlQ2hpbGRyZW4oe30sKGUsaSxyKT0+KChpLmVuYWJsZWR8fHRoaXMuZGlzYWJsZWQpJiYoZVtyXT1pLnZhbHVlKSxlKSl9X3JlZHVjZUNoaWxkcmVuKHQsZSl7bGV0IGk9dDtyZXR1cm4gdGhpcy5fZm9yRWFjaENoaWxkKChyLG8pPT57aT1lKGkscixvKX0pLGl9X2FsbENvbnRyb2xzRGlzYWJsZWQoKXtmb3IobGV0IHQgb2YgT2JqZWN0LmtleXModGhpcy5jb250cm9scykpaWYodGhpcy5jb250cm9sc1t0XS5lbmFibGVkKXJldHVybiExO3JldHVybiBPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKS5sZW5ndGg+MHx8dGhpcy5kaXNhYmxlZH1fZmluZCh0KXtyZXR1cm4gdGhpcy5jb250cm9scy5oYXNPd25Qcm9wZXJ0eSh0KT90aGlzLmNvbnRyb2xzW3RdOm51bGx9fSxPaD1uZXcgdGUoIkNhbGxTZXREaXNhYmxlZFN0YXRlIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+dHl9KSx0eT0iYWx3YXlzIjtmdW5jdGlvbiBkRShuLHQpe3JldHVyblsuLi50LnBhdGgsbl19ZnVuY3Rpb24gZXkobix0LGU9dHkpe0gyKG4sdCksdC52YWx1ZUFjY2Vzc29yLndyaXRlVmFsdWUobi52YWx1ZSksKG4uZGlzYWJsZWR8fCJhbHdheXMiPT09ZSkmJnQudmFsdWVBY2Nlc3Nvci5zZXREaXNhYmxlZFN0YXRlPy4obi5kaXNhYmxlZCksZnVuY3Rpb24obix0KXt0LnZhbHVlQWNjZXNzb3IucmVnaXN0ZXJPbkNoYW5nZShlPT57bi5fcGVuZGluZ1ZhbHVlPWUsbi5fcGVuZGluZ0NoYW5nZT0hMCxuLl9wZW5kaW5nRGlydHk9ITAsImNoYW5nZSI9PT1uLnVwZGF0ZU9uJiZ1cShuLHQpfSl9KG4sdCksZnVuY3Rpb24obix0KXtsZXQgZT0oaSxyKT0+e3QudmFsdWVBY2Nlc3Nvci53cml0ZVZhbHVlKGkpLHImJnQudmlld1RvTW9kZWxVcGRhdGUoaSl9O24ucmVnaXN0ZXJPbkNoYW5nZShlKSx0Ll9yZWdpc3Rlck9uRGVzdHJveSgoKT0+e24uX3VucmVnaXN0ZXJPbkNoYW5nZShlKX0pfShuLHQpLGZ1bmN0aW9uKG4sdCl7dC52YWx1ZUFjY2Vzc29yLnJlZ2lzdGVyT25Ub3VjaGVkKCgpPT57bi5fcGVuZGluZ1RvdWNoZWQ9ITAsImJsdXIiPT09bi51cGRhdGVPbiYmbi5fcGVuZGluZ0NoYW5nZSYmdXEobix0KSwic3VibWl0IiE9PW4udXBkYXRlT24mJm4ubWFya0FzVG91Y2hlZCgpfSl9KG4sdCksZnVuY3Rpb24obix0KXtpZih0LnZhbHVlQWNjZXNzb3Iuc2V0RGlzYWJsZWRTdGF0ZSl7bGV0IGU9aT0+e3QudmFsdWVBY2Nlc3Nvci5zZXREaXNhYmxlZFN0YXRlKGkpfTtuLnJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZShlKSx0Ll9yZWdpc3Rlck9uRGVzdHJveSgoKT0+e24uX3VucmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlKGUpfSl9fShuLHQpfWZ1bmN0aW9uIGFFKG4sdCxlPSEwKXtsZXQgaT0oKT0+e307dC52YWx1ZUFjY2Vzc29yJiYodC52YWx1ZUFjY2Vzc29yLnJlZ2lzdGVyT25DaGFuZ2UoaSksdC52YWx1ZUFjY2Vzc29yLnJlZ2lzdGVyT25Ub3VjaGVkKGkpKSxsRShuLHQpLG4mJih0Ll9pbnZva2VPbkRlc3Ryb3lDYWxsYmFja3MoKSxuLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSgoKT0+e30pKX1mdW5jdGlvbiBzRShuLHQpe24uZm9yRWFjaChlPT57ZS5yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlJiZlLnJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UodCl9KX1mdW5jdGlvbiBIMihuLHQpe2xldCBlPWFxKG4pO251bGwhPT10LnZhbGlkYXRvcj9uLnNldFZhbGlkYXRvcnMoTjkoZSx0LnZhbGlkYXRvcikpOiJmdW5jdGlvbiI9PXR5cGVvZiBlJiZuLnNldFZhbGlkYXRvcnMoW2VdKTtsZXQgaT1zcShuKTtudWxsIT09dC5hc3luY1ZhbGlkYXRvcj9uLnNldEFzeW5jVmFsaWRhdG9ycyhOOShpLHQuYXN5bmNWYWxpZGF0b3IpKToiZnVuY3Rpb24iPT10eXBlb2YgaSYmbi5zZXRBc3luY1ZhbGlkYXRvcnMoW2ldKTtsZXQgcj0oKT0+bi51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7c0UodC5fcmF3VmFsaWRhdG9ycyxyKSxzRSh0Ll9yYXdBc3luY1ZhbGlkYXRvcnMscil9ZnVuY3Rpb24gbEUobix0KXtsZXQgZT0hMTtpZihudWxsIT09bil7aWYobnVsbCE9PXQudmFsaWRhdG9yKXtsZXQgcj1hcShuKTtpZihBcnJheS5pc0FycmF5KHIpJiZyLmxlbmd0aD4wKXtsZXQgbz1yLmZpbHRlcihhPT5hIT09dC52YWxpZGF0b3IpO28ubGVuZ3RoIT09ci5sZW5ndGgmJihlPSEwLG4uc2V0VmFsaWRhdG9ycyhvKSl9fWlmKG51bGwhPT10LmFzeW5jVmFsaWRhdG9yKXtsZXQgcj1zcShuKTtpZihBcnJheS5pc0FycmF5KHIpJiZyLmxlbmd0aD4wKXtsZXQgbz1yLmZpbHRlcihhPT5hIT09dC5hc3luY1ZhbGlkYXRvcik7by5sZW5ndGghPT1yLmxlbmd0aCYmKGU9ITAsbi5zZXRBc3luY1ZhbGlkYXRvcnMobykpfX19bGV0IGk9KCk9Pnt9O3JldHVybiBzRSh0Ll9yYXdWYWxpZGF0b3JzLGkpLHNFKHQuX3Jhd0FzeW5jVmFsaWRhdG9ycyxpKSxlfWZ1bmN0aW9uIHVxKG4sdCl7bi5fcGVuZGluZ0RpcnR5JiZuLm1hcmtBc0RpcnR5KCksbi5zZXRWYWx1ZShuLl9wZW5kaW5nVmFsdWUse2VtaXRNb2RlbFRvVmlld0NoYW5nZTohMX0pLHQudmlld1RvTW9kZWxVcGRhdGUobi5fcGVuZGluZ1ZhbHVlKSxuLl9wZW5kaW5nQ2hhbmdlPSExfWZ1bmN0aW9uIHBxKG4sdCl7SDIobix0KX1mdW5jdGlvbiB6MihuLHQpe2lmKCFuLmhhc093blByb3BlcnR5KCJtb2RlbCIpKXJldHVybiExO2xldCBlPW4ubW9kZWw7cmV0dXJuISFlLmlzRmlyc3RDaGFuZ2UoKXx8IU9iamVjdC5pcyh0LGUuY3VycmVudFZhbHVlKX1mdW5jdGlvbiBocShuLHQpe24uX3N5bmNQZW5kaW5nQ29udHJvbHMoKSx0LmZvckVhY2goZT0+e2xldCBpPWUuY29udHJvbDsic3VibWl0Ij09PWkudXBkYXRlT24mJmkuX3BlbmRpbmdDaGFuZ2UmJihlLnZpZXdUb01vZGVsVXBkYXRlKGkuX3BlbmRpbmdWYWx1ZSksaS5fcGVuZGluZ0NoYW5nZT0hMSl9KX1mdW5jdGlvbiBVMihuLHQpe2lmKCF0KXJldHVybiBudWxsO2xldCBlLGkscjtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSx0LmZvckVhY2gobz0+e28uY29uc3RydWN0b3I9PT1VdT9lPW86ZnVuY3Rpb24obil7cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihuLmNvbnN0cnVjdG9yKT09PWtofShvKT9pPW86cj1vfSkscnx8aXx8ZXx8bnVsbH12YXIgSnZlPXtwcm92aWRlOkpvLHVzZUV4aXN0aW5nOlduKCgpPT5DZyl9LCR2PVByb21pc2UucmVzb2x2ZSgpLENnPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBKb3tjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoKSx0aGlzLmNhbGxTZXREaXNhYmxlZFN0YXRlPXIsdGhpcy5zdWJtaXR0ZWQ9ITEsdGhpcy5fZGlyZWN0aXZlcz1uZXcgU2V0LHRoaXMubmdTdWJtaXQ9bmV3IEYsdGhpcy5mb3JtPW5ldyBvRSh7fSxCMihlKSxWMihpKSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koKX1nZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiB0aGlzfWdldCBjb250cm9sKCl7cmV0dXJuIHRoaXMuZm9ybX1nZXQgcGF0aCgpe3JldHVybltdfWdldCBjb250cm9scygpe3JldHVybiB0aGlzLmZvcm0uY29udHJvbHN9YWRkQ29udHJvbChlKXskdi50aGVuKCgpPT57bGV0IGk9dGhpcy5fZmluZENvbnRhaW5lcihlLnBhdGgpO2UuY29udHJvbD1pLnJlZ2lzdGVyQ29udHJvbChlLm5hbWUsZS5jb250cm9sKSxleShlLmNvbnRyb2wsZSx0aGlzLmNhbGxTZXREaXNhYmxlZFN0YXRlKSxlLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksdGhpcy5fZGlyZWN0aXZlcy5hZGQoZSl9KX1nZXRDb250cm9sKGUpe3JldHVybiB0aGlzLmZvcm0uZ2V0KGUucGF0aCl9cmVtb3ZlQ29udHJvbChlKXskdi50aGVuKCgpPT57bGV0IGk9dGhpcy5fZmluZENvbnRhaW5lcihlLnBhdGgpO2kmJmkucmVtb3ZlQ29udHJvbChlLm5hbWUpLHRoaXMuX2RpcmVjdGl2ZXMuZGVsZXRlKGUpfSl9YWRkRm9ybUdyb3VwKGUpeyR2LnRoZW4oKCk9PntsZXQgaT10aGlzLl9maW5kQ29udGFpbmVyKGUucGF0aCkscj1uZXcgb0Uoe30pO3BxKHIsZSksaS5yZWdpc3RlckNvbnRyb2woZS5uYW1lLHIpLHIudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9KX1yZW1vdmVGb3JtR3JvdXAoZSl7JHYudGhlbigoKT0+e2xldCBpPXRoaXMuX2ZpbmRDb250YWluZXIoZS5wYXRoKTtpJiZpLnJlbW92ZUNvbnRyb2woZS5uYW1lKX0pfWdldEZvcm1Hcm91cChlKXtyZXR1cm4gdGhpcy5mb3JtLmdldChlLnBhdGgpfXVwZGF0ZU1vZGVsKGUsaSl7JHYudGhlbigoKT0+e3RoaXMuZm9ybS5nZXQoZS5wYXRoKS5zZXRWYWx1ZShpKX0pfXNldFZhbHVlKGUpe3RoaXMuY29udHJvbC5zZXRWYWx1ZShlKX1vblN1Ym1pdChlKXtyZXR1cm4gdGhpcy5zdWJtaXR0ZWQ9ITAsaHEodGhpcy5mb3JtLHRoaXMuX2RpcmVjdGl2ZXMpLHRoaXMubmdTdWJtaXQuZW1pdChlKSwiZGlhbG9nIj09PWU/LnRhcmdldD8ubWV0aG9kfW9uUmVzZXQoKXt0aGlzLnJlc2V0Rm9ybSgpfXJlc2V0Rm9ybShlKXt0aGlzLmZvcm0ucmVzZXQoZSksdGhpcy5zdWJtaXR0ZWQ9ITF9X3NldFVwZGF0ZVN0cmF0ZWd5KCl7dGhpcy5vcHRpb25zJiZudWxsIT10aGlzLm9wdGlvbnMudXBkYXRlT24mJih0aGlzLmZvcm0uX3VwZGF0ZU9uPXRoaXMub3B0aW9ucy51cGRhdGVPbil9X2ZpbmRDb250YWluZXIoZSl7cmV0dXJuIGUucG9wKCksZS5sZW5ndGg/dGhpcy5mb3JtLmdldChlKTp0aGlzLmZvcm19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoSW8sMTApLEMoanUsMTApLEMoT2gsOCkpfSxuLlx1MDI3NWRpcj1NZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJmb3JtIiwzLCJuZ05vRm9ybSIsIiIsMywiZm9ybUdyb3VwIiwiIl0sWyJuZy1mb3JtIl0sWyIiLCJuZ0Zvcm0iLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZBKCJzdWJtaXQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uU3VibWl0KG8pfSkoInJlc2V0IixmdW5jdGlvbigpe3JldHVybiBpLm9uUmVzZXQoKX0pfSxpbnB1dHM6e29wdGlvbnM6WyJuZ0Zvcm1PcHRpb25zIiwib3B0aW9ucyJdfSxvdXRwdXRzOntuZ1N1Ym1pdDoibmdTdWJtaXQifSxleHBvcnRBczpbIm5nRm9ybSJdLGZlYXR1cmVzOltWdChbSnZlXSksWGVdfSksbn0pKCk7ZnVuY3Rpb24gVjkobix0KXtsZXQgZT1uLmluZGV4T2YodCk7ZT4tMSYmbi5zcGxpY2UoZSwxKX1mdW5jdGlvbiBIOShuKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIG4mJm51bGwhPT1uJiYyPT09T2JqZWN0LmtleXMobikubGVuZ3RoJiYidmFsdWUiaW4gbiYmImRpc2FibGVkImluIG59dmFyIG55PWNsYXNzIGV4dGVuZHMgckV7Y29uc3RydWN0b3IodD1udWxsLGUsaSl7c3VwZXIoY3EoZSksZHEoaSxlKSksdGhpcy5kZWZhdWx0VmFsdWU9bnVsbCx0aGlzLl9vbkNoYW5nZT1bXSx0aGlzLl9wZW5kaW5nQ2hhbmdlPSExLHRoaXMuX2FwcGx5Rm9ybVN0YXRlKHQpLHRoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KGUpLHRoaXMuX2luaXRPYnNlcnZhYmxlcygpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiEhdGhpcy5hc3luY1ZhbGlkYXRvcn0pLGNFKGUpJiYoZS5ub25OdWxsYWJsZXx8ZS5pbml0aWFsVmFsdWVJc0RlZmF1bHQpJiYodGhpcy5kZWZhdWx0VmFsdWU9SDkodCk/dC52YWx1ZTp0KX1zZXRWYWx1ZSh0LGU9e30pe3RoaXMudmFsdWU9dGhpcy5fcGVuZGluZ1ZhbHVlPXQsdGhpcy5fb25DaGFuZ2UubGVuZ3RoJiYhMSE9PWUuZW1pdE1vZGVsVG9WaWV3Q2hhbmdlJiZ0aGlzLl9vbkNoYW5nZS5mb3JFYWNoKGk9PmkodGhpcy52YWx1ZSwhMSE9PWUuZW1pdFZpZXdUb01vZGVsQ2hhbmdlKSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGUpfXBhdGNoVmFsdWUodCxlPXt9KXt0aGlzLnNldFZhbHVlKHQsZSl9cmVzZXQodD10aGlzLmRlZmF1bHRWYWx1ZSxlPXt9KXt0aGlzLl9hcHBseUZvcm1TdGF0ZSh0KSx0aGlzLm1hcmtBc1ByaXN0aW5lKGUpLHRoaXMubWFya0FzVW50b3VjaGVkKGUpLHRoaXMuc2V0VmFsdWUodGhpcy52YWx1ZSxlKSx0aGlzLl9wZW5kaW5nQ2hhbmdlPSExfV91cGRhdGVWYWx1ZSgpe31fYW55Q29udHJvbHModCl7cmV0dXJuITF9X2FsbENvbnRyb2xzRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZH1yZWdpc3Rlck9uQ2hhbmdlKHQpe3RoaXMuX29uQ2hhbmdlLnB1c2godCl9X3VucmVnaXN0ZXJPbkNoYW5nZSh0KXtWOSh0aGlzLl9vbkNoYW5nZSx0KX1yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UodCl7dGhpcy5fb25EaXNhYmxlZENoYW5nZS5wdXNoKHQpfV91bnJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZSh0KXtWOSh0aGlzLl9vbkRpc2FibGVkQ2hhbmdlLHQpfV9mb3JFYWNoQ2hpbGQodCl7fV9zeW5jUGVuZGluZ0NvbnRyb2xzKCl7cmV0dXJuISgic3VibWl0IiE9PXRoaXMudXBkYXRlT258fCh0aGlzLl9wZW5kaW5nRGlydHkmJnRoaXMubWFya0FzRGlydHkoKSx0aGlzLl9wZW5kaW5nVG91Y2hlZCYmdGhpcy5tYXJrQXNUb3VjaGVkKCksIXRoaXMuX3BlbmRpbmdDaGFuZ2UpfHwodGhpcy5zZXRWYWx1ZSh0aGlzLl9wZW5kaW5nVmFsdWUse29ubHlTZWxmOiEwLGVtaXRNb2RlbFRvVmlld0NoYW5nZTohMX0pLDApKX1fYXBwbHlGb3JtU3RhdGUodCl7SDkodCk/KHRoaXMudmFsdWU9dGhpcy5fcGVuZGluZ1ZhbHVlPXQudmFsdWUsdC5kaXNhYmxlZD90aGlzLmRpc2FibGUoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohMX0pOnRoaXMuZW5hYmxlKHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ITF9KSk6dGhpcy52YWx1ZT10aGlzLl9wZW5kaW5nVmFsdWU9dH19LG1xPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBKb3tuZ09uSW5pdCgpe3RoaXMuX2NoZWNrUGFyZW50VHlwZSgpLHRoaXMuZm9ybURpcmVjdGl2ZS5hZGRGb3JtR3JvdXAodGhpcyl9bmdPbkRlc3Ryb3koKXt0aGlzLmZvcm1EaXJlY3RpdmUmJnRoaXMuZm9ybURpcmVjdGl2ZS5yZW1vdmVGb3JtR3JvdXAodGhpcyl9Z2V0IGNvbnRyb2woKXtyZXR1cm4gdGhpcy5mb3JtRGlyZWN0aXZlLmdldEZvcm1Hcm91cCh0aGlzKX1nZXQgcGF0aCgpe3JldHVybiBkRShudWxsPT10aGlzLm5hbWU/dGhpcy5uYW1lOnRoaXMubmFtZS50b1N0cmluZygpLHRoaXMuX3BhcmVudCl9Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gdGhpcy5fcGFyZW50P3RoaXMuX3BhcmVudC5mb3JtRGlyZWN0aXZlOm51bGx9X2NoZWNrUGFyZW50VHlwZSgpe319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1YbihuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1NZSh7dHlwZTpuLGZlYXR1cmVzOltYZV19KSxufSkoKSxleWU9e3Byb3ZpZGU6Sm8sdXNlRXhpc3Rpbmc6V24oKCk9PnR5ZSl9LHR5ZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgbXF7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKCksdGhpcy5fcGFyZW50PWUsdGhpcy5fc2V0VmFsaWRhdG9ycyhpKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMocil9X2NoZWNrUGFyZW50VHlwZSgpe319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhKbyw1KSxDKElvLDEwKSxDKGp1LDEwKSl9LG4uXHUwMjc1ZGlyPU1lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nTW9kZWxHcm91cCIsIiJdXSxpbnB1dHM6e25hbWU6WyJuZ01vZGVsR3JvdXAiLCJuYW1lIl19LGV4cG9ydEFzOlsibmdNb2RlbEdyb3VwIl0sZmVhdHVyZXM6W1Z0KFtleWVdKSxYZV19KSxufSkoKSxueWU9e3Byb3ZpZGU6cWEsdXNlRXhpc3Rpbmc6V24oKCk9Pml5KX0sejk9UHJvbWlzZS5yZXNvbHZlKCksaXk9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHFhe2NvbnN0cnVjdG9yKGUsaSxyLG8sYSxzKXtzdXBlcigpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWEsdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZT1zLHRoaXMuY29udHJvbD1uZXcgbnksdGhpcy5fcmVnaXN0ZXJlZD0hMSx0aGlzLnVwZGF0ZT1uZXcgRix0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9zZXRWYWxpZGF0b3JzKGkpLHRoaXMuX3NldEFzeW5jVmFsaWRhdG9ycyhyKSx0aGlzLnZhbHVlQWNjZXNzb3I9VTIoMCxvKX1uZ09uQ2hhbmdlcyhlKXtpZih0aGlzLl9jaGVja0ZvckVycm9ycygpLCF0aGlzLl9yZWdpc3RlcmVkfHwibmFtZSJpbiBlKXtpZih0aGlzLl9yZWdpc3RlcmVkJiYodGhpcy5fY2hlY2tOYW1lKCksdGhpcy5mb3JtRGlyZWN0aXZlKSl7bGV0IGk9ZS5uYW1lLnByZXZpb3VzVmFsdWU7dGhpcy5mb3JtRGlyZWN0aXZlLnJlbW92ZUNvbnRyb2woe25hbWU6aSxwYXRoOnRoaXMuX2dldFBhdGgoaSl9KX10aGlzLl9zZXRVcENvbnRyb2woKX0iaXNEaXNhYmxlZCJpbiBlJiZ0aGlzLl91cGRhdGVEaXNhYmxlZChlKSx6MihlLHRoaXMudmlld01vZGVsKSYmKHRoaXMuX3VwZGF0ZVZhbHVlKHRoaXMubW9kZWwpLHRoaXMudmlld01vZGVsPXRoaXMubW9kZWwpfW5nT25EZXN0cm95KCl7dGhpcy5mb3JtRGlyZWN0aXZlJiZ0aGlzLmZvcm1EaXJlY3RpdmUucmVtb3ZlQ29udHJvbCh0aGlzKX1nZXQgcGF0aCgpe3JldHVybiB0aGlzLl9nZXRQYXRoKHRoaXMubmFtZSl9Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gdGhpcy5fcGFyZW50P3RoaXMuX3BhcmVudC5mb3JtRGlyZWN0aXZlOm51bGx9dmlld1RvTW9kZWxVcGRhdGUoZSl7dGhpcy52aWV3TW9kZWw9ZSx0aGlzLnVwZGF0ZS5lbWl0KGUpfV9zZXRVcENvbnRyb2woKXt0aGlzLl9zZXRVcGRhdGVTdHJhdGVneSgpLHRoaXMuX2lzU3RhbmRhbG9uZSgpP3RoaXMuX3NldFVwU3RhbmRhbG9uZSgpOnRoaXMuZm9ybURpcmVjdGl2ZS5hZGRDb250cm9sKHRoaXMpLHRoaXMuX3JlZ2lzdGVyZWQ9ITB9X3NldFVwZGF0ZVN0cmF0ZWd5KCl7dGhpcy5vcHRpb25zJiZudWxsIT10aGlzLm9wdGlvbnMudXBkYXRlT24mJih0aGlzLmNvbnRyb2wuX3VwZGF0ZU9uPXRoaXMub3B0aW9ucy51cGRhdGVPbil9X2lzU3RhbmRhbG9uZSgpe3JldHVybiF0aGlzLl9wYXJlbnR8fCEoIXRoaXMub3B0aW9uc3x8IXRoaXMub3B0aW9ucy5zdGFuZGFsb25lKX1fc2V0VXBTdGFuZGFsb25lKCl7ZXkodGhpcy5jb250cm9sLHRoaXMsdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZSksdGhpcy5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfV9jaGVja0ZvckVycm9ycygpe3RoaXMuX2lzU3RhbmRhbG9uZSgpfHx0aGlzLl9jaGVja1BhcmVudFR5cGUoKSx0aGlzLl9jaGVja05hbWUoKX1fY2hlY2tQYXJlbnRUeXBlKCl7fV9jaGVja05hbWUoKXt0aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5uYW1lJiYodGhpcy5uYW1lPXRoaXMub3B0aW9ucy5uYW1lKSx0aGlzLl9pc1N0YW5kYWxvbmUoKX1fdXBkYXRlVmFsdWUoZSl7ejkudGhlbigoKT0+e3RoaXMuY29udHJvbC5zZXRWYWx1ZShlLHtlbWl0Vmlld1RvTW9kZWxDaGFuZ2U6ITF9KSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj8ubWFya0ZvckNoZWNrKCl9KX1fdXBkYXRlRGlzYWJsZWQoZSl7bGV0IGk9ZS5pc0Rpc2FibGVkLmN1cnJlbnRWYWx1ZSxyPTAhPT1pJiZldyhpKTt6OS50aGVuKCgpPT57ciYmIXRoaXMuY29udHJvbC5kaXNhYmxlZD90aGlzLmNvbnRyb2wuZGlzYWJsZSgpOiFyJiZ0aGlzLmNvbnRyb2wuZGlzYWJsZWQmJnRoaXMuY29udHJvbC5lbmFibGUoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj8ubWFya0ZvckNoZWNrKCl9KX1fZ2V0UGF0aChlKXtyZXR1cm4gdGhpcy5fcGFyZW50P2RFKGUsdGhpcy5fcGFyZW50KTpbZV19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoSm8sOSksQyhJbywxMCksQyhqdSwxMCksQyhYciwxMCksQyhRdCw4KSxDKE9oLDgpKX0sbi5cdTAyNzVkaXI9TWUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibmdNb2RlbCIsIiIsMywiZm9ybUNvbnRyb2xOYW1lIiwiIiwzLCJmb3JtQ29udHJvbCIsIiJdXSxpbnB1dHM6e25hbWU6Im5hbWUiLGlzRGlzYWJsZWQ6WyJkaXNhYmxlZCIsImlzRGlzYWJsZWQiXSxtb2RlbDpbIm5nTW9kZWwiLCJtb2RlbCJdLG9wdGlvbnM6WyJuZ01vZGVsT3B0aW9ucyIsIm9wdGlvbnMiXX0sb3V0cHV0czp7dXBkYXRlOiJuZ01vZGVsQ2hhbmdlIn0sZXhwb3J0QXM6WyJuZ01vZGVsIl0sZmVhdHVyZXM6W1Z0KFtueWVdKSxYZSxxdF19KSxufSkoKSxpeWU9e3Byb3ZpZGU6WHIsdXNlRXhpc3Rpbmc6V24oKCk9PmoyKSxtdWx0aTohMH0sajI9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGtoe3dyaXRlVmFsdWUoZSl7dGhpcy5zZXRQcm9wZXJ0eSgidmFsdWUiLGU/PyIiKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9aT0+e2UoIiI9PWk/bnVsbDpwYXJzZUZsb2F0KGkpKX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9WG4obikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9TWUoe3R5cGU6bixzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwibnVtYmVyIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwibnVtYmVyIiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJkEoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkNoYW5nZShvLnRhcmdldC52YWx1ZSl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvdWNoZWQoKX0pfSxmZWF0dXJlczpbVnQoW2l5ZV0pLFhlXX0pLG59KSgpLHJ5ZT17cHJvdmlkZTpYcix1c2VFeGlzdGluZzpXbigoKT0+YXllKSxtdWx0aTohMH0sZnE9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe30pLG59KSgpLG95ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5fYWNjZXNzb3JzPVtdfWFkZChlLGkpe3RoaXMuX2FjY2Vzc29ycy5wdXNoKFtlLGldKX1yZW1vdmUoZSl7Zm9yKGxldCBpPXRoaXMuX2FjY2Vzc29ycy5sZW5ndGgtMTtpPj0wOy0taSlpZih0aGlzLl9hY2Nlc3NvcnNbaV1bMV09PT1lKXJldHVybiB2b2lkIHRoaXMuX2FjY2Vzc29ycy5zcGxpY2UoaSwxKX1zZWxlY3QoZSl7dGhpcy5fYWNjZXNzb3JzLmZvckVhY2goaT0+e3RoaXMuX2lzU2FtZUdyb3VwKGksZSkmJmlbMV0hPT1lJiZpWzFdLmZpcmVVbmNoZWNrKGUudmFsdWUpfSl9X2lzU2FtZUdyb3VwKGUsaSl7cmV0dXJuISFlWzBdLmNvbnRyb2wmJmVbMF0uX3BhcmVudD09PWkuX2NvbnRyb2wuX3BhcmVudCYmZVsxXS5uYW1lPT09aS5uYW1lfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjpmcX0pLG59KSgpLGF5ZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMga2h7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIoZSxpKSx0aGlzLl9yZWdpc3RyeT1yLHRoaXMuX2luamVjdG9yPW8sdGhpcy5zZXREaXNhYmxlZFN0YXRlRmlyZWQ9ITEsdGhpcy5vbkNoYW5nZT0oKT0+e30sdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZT0kbihPaCx7b3B0aW9uYWw6ITB9KT8/dHl9bmdPbkluaXQoKXt0aGlzLl9jb250cm9sPXRoaXMuX2luamVjdG9yLmdldChxYSksdGhpcy5fY2hlY2tOYW1lKCksdGhpcy5fcmVnaXN0cnkuYWRkKHRoaXMuX2NvbnRyb2wsdGhpcyl9bmdPbkRlc3Ryb3koKXt0aGlzLl9yZWdpc3RyeS5yZW1vdmUodGhpcyl9d3JpdGVWYWx1ZShlKXt0aGlzLl9zdGF0ZT1lPT09dGhpcy52YWx1ZSx0aGlzLnNldFByb3BlcnR5KCJjaGVja2VkIix0aGlzLl9zdGF0ZSl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLl9mbj1lLHRoaXMub25DaGFuZ2U9KCk9PntlKHRoaXMudmFsdWUpLHRoaXMuX3JlZ2lzdHJ5LnNlbGVjdCh0aGlzKX19c2V0RGlzYWJsZWRTdGF0ZShlKXsodGhpcy5zZXREaXNhYmxlZFN0YXRlRmlyZWR8fGV8fCJ3aGVuRGlzYWJsZWRGb3JMZWdhY3lDb2RlIj09PXRoaXMuY2FsbFNldERpc2FibGVkU3RhdGUpJiZ0aGlzLnNldFByb3BlcnR5KCJkaXNhYmxlZCIsZSksdGhpcy5zZXREaXNhYmxlZFN0YXRlRmlyZWQ9ITB9ZmlyZVVuY2hlY2soZSl7dGhpcy53cml0ZVZhbHVlKGUpfV9jaGVja05hbWUoKXshdGhpcy5uYW1lJiZ0aGlzLmZvcm1Db250cm9sTmFtZSYmKHRoaXMubmFtZT10aGlzLmZvcm1Db250cm9sTmFtZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoZGMpLEMoeGUpLEMob3llKSxDKHdpKSl9LG4uXHUwMjc1ZGlyPU1lKHt0eXBlOm4sc2VsZWN0b3JzOltbImlucHV0IiwidHlwZSIsInJhZGlvIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJyYWRpbyIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJyYWRpbyIsIm5nTW9kZWwiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZBKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25DaGFuZ2UoKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBpLm9uVG91Y2hlZCgpfSl9LGlucHV0czp7bmFtZToibmFtZSIsZm9ybUNvbnRyb2xOYW1lOiJmb3JtQ29udHJvbE5hbWUiLHZhbHVlOiJ2YWx1ZSJ9LGZlYXR1cmVzOltWdChbcnllXSksWGVdfSksbn0pKCksc3llPXtwcm92aWRlOlhyLHVzZUV4aXN0aW5nOlduKCgpPT5seWUpLG11bHRpOiEwfSxseWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGtoe3dyaXRlVmFsdWUoZSl7dGhpcy5zZXRQcm9wZXJ0eSgidmFsdWUiLHBhcnNlRmxvYXQoZSkpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1pPT57ZSgiIj09aT9udWxsOnBhcnNlRmxvYXQoaSkpfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1YbihuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1NZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJyYW5nZSIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwicmFuZ2UiLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwicmFuZ2UiLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmQSgiY2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkNoYW5nZShvLnRhcmdldC52YWx1ZSl9KSgiaW5wdXQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uQ2hhbmdlKG8udGFyZ2V0LnZhbHVlKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBpLm9uVG91Y2hlZCgpfSl9LGZlYXR1cmVzOltWdChbc3llXSksWGVdfSksbn0pKCksRzI9bmV3IHRlKCJOZ01vZGVsV2l0aEZvcm1Db250cm9sV2FybmluZyIpLGN5ZT17cHJvdmlkZTpxYSx1c2VFeGlzdGluZzpXbigoKT0+VzIpfSxXMj0oKCk9PntjbGFzcyBuIGV4dGVuZHMgcWF7c2V0IGlzRGlzYWJsZWQoZSl7fWNvbnN0cnVjdG9yKGUsaSxyLG8sYSl7c3VwZXIoKSx0aGlzLl9uZ01vZGVsV2FybmluZ0NvbmZpZz1vLHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGU9YSx0aGlzLnVwZGF0ZT1uZXcgRix0aGlzLl9uZ01vZGVsV2FybmluZ1NlbnQ9ITEsdGhpcy5fc2V0VmFsaWRhdG9ycyhlKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMoaSksdGhpcy52YWx1ZUFjY2Vzc29yPVUyKDAscil9bmdPbkNoYW5nZXMoZSl7aWYodGhpcy5faXNDb250cm9sQ2hhbmdlZChlKSl7bGV0IGk9ZS5mb3JtLnByZXZpb3VzVmFsdWU7aSYmYUUoaSx0aGlzLCExKSxleSh0aGlzLmZvcm0sdGhpcyx0aGlzLmNhbGxTZXREaXNhYmxlZFN0YXRlKSx0aGlzLmZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9ejIoZSx0aGlzLnZpZXdNb2RlbCkmJih0aGlzLmZvcm0uc2V0VmFsdWUodGhpcy5tb2RlbCksdGhpcy52aWV3TW9kZWw9dGhpcy5tb2RlbCl9bmdPbkRlc3Ryb3koKXt0aGlzLmZvcm0mJmFFKHRoaXMuZm9ybSx0aGlzLCExKX1nZXQgcGF0aCgpe3JldHVybltdfWdldCBjb250cm9sKCl7cmV0dXJuIHRoaXMuZm9ybX12aWV3VG9Nb2RlbFVwZGF0ZShlKXt0aGlzLnZpZXdNb2RlbD1lLHRoaXMudXBkYXRlLmVtaXQoZSl9X2lzQ29udHJvbENoYW5nZWQoZSl7cmV0dXJuIGUuaGFzT3duUHJvcGVydHkoImZvcm0iKX19cmV0dXJuIG4uX25nTW9kZWxXYXJuaW5nU2VudE9uY2U9ITEsbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKElvLDEwKSxDKGp1LDEwKSxDKFhyLDEwKSxDKEcyLDgpLEMoT2gsOCkpfSxuLlx1MDI3NWRpcj1NZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJmb3JtQ29udHJvbCIsIiJdXSxpbnB1dHM6e2Zvcm06WyJmb3JtQ29udHJvbCIsImZvcm0iXSxpc0Rpc2FibGVkOlsiZGlzYWJsZWQiLCJpc0Rpc2FibGVkIl0sbW9kZWw6WyJuZ01vZGVsIiwibW9kZWwiXX0sb3V0cHV0czp7dXBkYXRlOiJuZ01vZGVsQ2hhbmdlIn0sZXhwb3J0QXM6WyJuZ0Zvcm0iXSxmZWF0dXJlczpbVnQoW2N5ZV0pLFhlLHF0XX0pLG59KSgpLGR5ZT17cHJvdmlkZTpKbyx1c2VFeGlzdGluZzpXbigoKT0+TWcpfSxNZz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgSm97Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKCksdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZT1yLHRoaXMuc3VibWl0dGVkPSExLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZT0oKT0+dGhpcy5fdXBkYXRlRG9tVmFsdWUoKSx0aGlzLmRpcmVjdGl2ZXM9W10sdGhpcy5mb3JtPW51bGwsdGhpcy5uZ1N1Ym1pdD1uZXcgRix0aGlzLl9zZXRWYWxpZGF0b3JzKGUpLHRoaXMuX3NldEFzeW5jVmFsaWRhdG9ycyhpKX1uZ09uQ2hhbmdlcyhlKXt0aGlzLl9jaGVja0Zvcm1QcmVzZW50KCksZS5oYXNPd25Qcm9wZXJ0eSgiZm9ybSIpJiYodGhpcy5fdXBkYXRlVmFsaWRhdG9ycygpLHRoaXMuX3VwZGF0ZURvbVZhbHVlKCksdGhpcy5fdXBkYXRlUmVnaXN0cmF0aW9ucygpLHRoaXMuX29sZEZvcm09dGhpcy5mb3JtKX1uZ09uRGVzdHJveSgpe3RoaXMuZm9ybSYmKGxFKHRoaXMuZm9ybSx0aGlzKSx0aGlzLmZvcm0uX29uQ29sbGVjdGlvbkNoYW5nZT09PXRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSYmdGhpcy5mb3JtLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSgoKT0+e30pKX1nZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiB0aGlzfWdldCBjb250cm9sKCl7cmV0dXJuIHRoaXMuZm9ybX1nZXQgcGF0aCgpe3JldHVybltdfWFkZENvbnRyb2woZSl7bGV0IGk9dGhpcy5mb3JtLmdldChlLnBhdGgpO3JldHVybiBleShpLGUsdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZSksaS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KSx0aGlzLmRpcmVjdGl2ZXMucHVzaChlKSxpfWdldENvbnRyb2woZSl7cmV0dXJuIHRoaXMuZm9ybS5nZXQoZS5wYXRoKX1yZW1vdmVDb250cm9sKGUpe2FFKGUuY29udHJvbHx8bnVsbCxlLCExKSxmdW5jdGlvbihuLHQpe2xldCBlPW4uaW5kZXhPZih0KTtlPi0xJiZuLnNwbGljZShlLDEpfSh0aGlzLmRpcmVjdGl2ZXMsZSl9YWRkRm9ybUdyb3VwKGUpe3RoaXMuX3NldFVwRm9ybUNvbnRhaW5lcihlKX1yZW1vdmVGb3JtR3JvdXAoZSl7dGhpcy5fY2xlYW5VcEZvcm1Db250YWluZXIoZSl9Z2V0Rm9ybUdyb3VwKGUpe3JldHVybiB0aGlzLmZvcm0uZ2V0KGUucGF0aCl9YWRkRm9ybUFycmF5KGUpe3RoaXMuX3NldFVwRm9ybUNvbnRhaW5lcihlKX1yZW1vdmVGb3JtQXJyYXkoZSl7dGhpcy5fY2xlYW5VcEZvcm1Db250YWluZXIoZSl9Z2V0Rm9ybUFycmF5KGUpe3JldHVybiB0aGlzLmZvcm0uZ2V0KGUucGF0aCl9dXBkYXRlTW9kZWwoZSxpKXt0aGlzLmZvcm0uZ2V0KGUucGF0aCkuc2V0VmFsdWUoaSl9b25TdWJtaXQoZSl7cmV0dXJuIHRoaXMuc3VibWl0dGVkPSEwLGhxKHRoaXMuZm9ybSx0aGlzLmRpcmVjdGl2ZXMpLHRoaXMubmdTdWJtaXQuZW1pdChlKSwiZGlhbG9nIj09PWU/LnRhcmdldD8ubWV0aG9kfW9uUmVzZXQoKXt0aGlzLnJlc2V0Rm9ybSgpfXJlc2V0Rm9ybShlKXt0aGlzLmZvcm0ucmVzZXQoZSksdGhpcy5zdWJtaXR0ZWQ9ITF9X3VwZGF0ZURvbVZhbHVlKCl7dGhpcy5kaXJlY3RpdmVzLmZvckVhY2goZT0+e2xldCBpPWUuY29udHJvbCxyPXRoaXMuZm9ybS5nZXQoZS5wYXRoKTtpIT09ciYmKGFFKGl8fG51bGwsZSksKG49Pm4gaW5zdGFuY2VvZiBueSkocikmJihleShyLGUsdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZSksZS5jb250cm9sPXIpKX0pLHRoaXMuZm9ybS5fdXBkYXRlVHJlZVZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX1fc2V0VXBGb3JtQ29udGFpbmVyKGUpe2xldCBpPXRoaXMuZm9ybS5nZXQoZS5wYXRoKTtwcShpLGUpLGkudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9X2NsZWFuVXBGb3JtQ29udGFpbmVyKGUpe2lmKHRoaXMuZm9ybSl7bGV0IGk9dGhpcy5mb3JtLmdldChlLnBhdGgpO2kmJmZ1bmN0aW9uKG4sdCl7cmV0dXJuIGxFKG4sdCl9KGksZSkmJmkudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9fV91cGRhdGVSZWdpc3RyYXRpb25zKCl7dGhpcy5mb3JtLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSh0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UpLHRoaXMuX29sZEZvcm0mJnRoaXMuX29sZEZvcm0uX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKCgpPT57fSl9X3VwZGF0ZVZhbGlkYXRvcnMoKXtIMih0aGlzLmZvcm0sdGhpcyksdGhpcy5fb2xkRm9ybSYmbEUodGhpcy5fb2xkRm9ybSx0aGlzKX1fY2hlY2tGb3JtUHJlc2VudCgpe319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhJbywxMCksQyhqdSwxMCksQyhPaCw4KSl9LG4uXHUwMjc1ZGlyPU1lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImZvcm1Hcm91cCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJkEoInN1Ym1pdCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25TdWJtaXQobyl9KSgicmVzZXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25SZXNldCgpfSl9LGlucHV0czp7Zm9ybTpbImZvcm1Hcm91cCIsImZvcm0iXX0sb3V0cHV0czp7bmdTdWJtaXQ6Im5nU3VibWl0In0sZXhwb3J0QXM6WyJuZ0Zvcm0iXSxmZWF0dXJlczpbVnQoW2R5ZV0pLFhlLHF0XX0pLG59KSgpLHV5ZT17cHJvdmlkZTpKbyx1c2VFeGlzdGluZzpXbigoKT0+Z3EpfSxncT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgbXF7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKCksdGhpcy5fcGFyZW50PWUsdGhpcy5fc2V0VmFsaWRhdG9ycyhpKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMocil9X2NoZWNrUGFyZW50VHlwZSgpe2JxKHRoaXMuX3BhcmVudCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoSm8sMTMpLEMoSW8sMTApLEMoanUsMTApKX0sbi5cdTAyNzVkaXI9TWUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiZm9ybUdyb3VwTmFtZSIsIiJdXSxpbnB1dHM6e25hbWU6WyJmb3JtR3JvdXBOYW1lIiwibmFtZSJdfSxmZWF0dXJlczpbVnQoW3V5ZV0pLFhlXX0pLG59KSgpLHB5ZT17cHJvdmlkZTpKbyx1c2VFeGlzdGluZzpXbigoKT0+X3EpfSxfcT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgSm97Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKCksdGhpcy5fcGFyZW50PWUsdGhpcy5fc2V0VmFsaWRhdG9ycyhpKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMocil9bmdPbkluaXQoKXt0aGlzLl9jaGVja1BhcmVudFR5cGUoKSx0aGlzLmZvcm1EaXJlY3RpdmUuYWRkRm9ybUFycmF5KHRoaXMpfW5nT25EZXN0cm95KCl7dGhpcy5mb3JtRGlyZWN0aXZlJiZ0aGlzLmZvcm1EaXJlY3RpdmUucmVtb3ZlRm9ybUFycmF5KHRoaXMpfWdldCBjb250cm9sKCl7cmV0dXJuIHRoaXMuZm9ybURpcmVjdGl2ZS5nZXRGb3JtQXJyYXkodGhpcyl9Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gdGhpcy5fcGFyZW50P3RoaXMuX3BhcmVudC5mb3JtRGlyZWN0aXZlOm51bGx9Z2V0IHBhdGgoKXtyZXR1cm4gZEUobnVsbD09dGhpcy5uYW1lP3RoaXMubmFtZTp0aGlzLm5hbWUudG9TdHJpbmcoKSx0aGlzLl9wYXJlbnQpfV9jaGVja1BhcmVudFR5cGUoKXticSh0aGlzLl9wYXJlbnQpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEpvLDEzKSxDKElvLDEwKSxDKGp1LDEwKSl9LG4uXHUwMjc1ZGlyPU1lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImZvcm1BcnJheU5hbWUiLCIiXV0saW5wdXRzOntuYW1lOlsiZm9ybUFycmF5TmFtZSIsIm5hbWUiXX0sZmVhdHVyZXM6W1Z0KFtweWVdKSxYZV19KSxufSkoKTtmdW5jdGlvbiBicShuKXtyZXR1cm4hKG4gaW5zdGFuY2VvZiBncXx8biBpbnN0YW5jZW9mIE1nfHxuIGluc3RhbmNlb2YgX3EpfXZhciBoeWU9e3Byb3ZpZGU6cWEsdXNlRXhpc3Rpbmc6V24oKCk9Pm15ZSl9LG15ZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgcWF7c2V0IGlzRGlzYWJsZWQoZSl7fWNvbnN0cnVjdG9yKGUsaSxyLG8sYSl7c3VwZXIoKSx0aGlzLl9uZ01vZGVsV2FybmluZ0NvbmZpZz1hLHRoaXMuX2FkZGVkPSExLHRoaXMudXBkYXRlPW5ldyBGLHRoaXMuX25nTW9kZWxXYXJuaW5nU2VudD0hMSx0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9zZXRWYWxpZGF0b3JzKGkpLHRoaXMuX3NldEFzeW5jVmFsaWRhdG9ycyhyKSx0aGlzLnZhbHVlQWNjZXNzb3I9VTIoMCxvKX1uZ09uQ2hhbmdlcyhlKXt0aGlzLl9hZGRlZHx8dGhpcy5fc2V0VXBDb250cm9sKCksejIoZSx0aGlzLnZpZXdNb2RlbCkmJih0aGlzLnZpZXdNb2RlbD10aGlzLm1vZGVsLHRoaXMuZm9ybURpcmVjdGl2ZS51cGRhdGVNb2RlbCh0aGlzLHRoaXMubW9kZWwpKX1uZ09uRGVzdHJveSgpe3RoaXMuZm9ybURpcmVjdGl2ZSYmdGhpcy5mb3JtRGlyZWN0aXZlLnJlbW92ZUNvbnRyb2wodGhpcyl9dmlld1RvTW9kZWxVcGRhdGUoZSl7dGhpcy52aWV3TW9kZWw9ZSx0aGlzLnVwZGF0ZS5lbWl0KGUpfWdldCBwYXRoKCl7cmV0dXJuIGRFKG51bGw9PXRoaXMubmFtZT90aGlzLm5hbWU6dGhpcy5uYW1lLnRvU3RyaW5nKCksdGhpcy5fcGFyZW50KX1nZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiB0aGlzLl9wYXJlbnQ/dGhpcy5fcGFyZW50LmZvcm1EaXJlY3RpdmU6bnVsbH1fY2hlY2tQYXJlbnRUeXBlKCl7fV9zZXRVcENvbnRyb2woKXt0aGlzLl9jaGVja1BhcmVudFR5cGUoKSx0aGlzLmNvbnRyb2w9dGhpcy5mb3JtRGlyZWN0aXZlLmFkZENvbnRyb2wodGhpcyksdGhpcy5fYWRkZWQ9ITB9fXJldHVybiBuLl9uZ01vZGVsV2FybmluZ1NlbnRPbmNlPSExLG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhKbywxMyksQyhJbywxMCksQyhqdSwxMCksQyhYciwxMCksQyhHMiw4KSl9LG4uXHUwMjc1ZGlyPU1lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImZvcm1Db250cm9sTmFtZSIsIiJdXSxpbnB1dHM6e25hbWU6WyJmb3JtQ29udHJvbE5hbWUiLCJuYW1lIl0saXNEaXNhYmxlZDpbImRpc2FibGVkIiwiaXNEaXNhYmxlZCJdLG1vZGVsOlsibmdNb2RlbCIsIm1vZGVsIl19LG91dHB1dHM6e3VwZGF0ZToibmdNb2RlbENoYW5nZSJ9LGZlYXR1cmVzOltWdChbaHllXSksWGUscXRdfSksbn0pKCksZnllPXtwcm92aWRlOlhyLHVzZUV4aXN0aW5nOlduKCgpPT55cSksbXVsdGk6ITB9O2Z1bmN0aW9uIHZxKG4sdCl7cmV0dXJuIG51bGw9PW4/YCR7dH1gOih0JiYib2JqZWN0Ij09dHlwZW9mIHQmJih0PSJPYmplY3QiKSxgJHtufTogJHt0fWAuc2xpY2UoMCw1MCkpfXZhciB5cT0oKCk9PntjbGFzcyBuIGV4dGVuZHMga2h7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX29wdGlvbk1hcD1uZXcgTWFwLHRoaXMuX2lkQ291bnRlcj0wLHRoaXMuX2NvbXBhcmVXaXRoPU9iamVjdC5pc31zZXQgY29tcGFyZVdpdGgoZSl7dGhpcy5fY29tcGFyZVdpdGg9ZX13cml0ZVZhbHVlKGUpe3RoaXMudmFsdWU9ZTtsZXQgcj12cSh0aGlzLl9nZXRPcHRpb25JZChlKSxlKTt0aGlzLnNldFByb3BlcnR5KCJ2YWx1ZSIscil9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWk9Pnt0aGlzLnZhbHVlPXRoaXMuX2dldE9wdGlvblZhbHVlKGkpLGUodGhpcy52YWx1ZSl9fV9yZWdpc3Rlck9wdGlvbigpe3JldHVybih0aGlzLl9pZENvdW50ZXIrKykudG9TdHJpbmcoKX1fZ2V0T3B0aW9uSWQoZSl7Zm9yKGxldCBpIG9mIEFycmF5LmZyb20odGhpcy5fb3B0aW9uTWFwLmtleXMoKSkpaWYodGhpcy5fY29tcGFyZVdpdGgodGhpcy5fb3B0aW9uTWFwLmdldChpKSxlKSlyZXR1cm4gaTtyZXR1cm4gbnVsbH1fZ2V0T3B0aW9uVmFsdWUoZSl7bGV0IGk9ZnVuY3Rpb24obil7cmV0dXJuIG4uc3BsaXQoIjoiKVswXX0oZSk7cmV0dXJuIHRoaXMuX29wdGlvbk1hcC5oYXMoaSk/dGhpcy5fb3B0aW9uTWFwLmdldChpKTplfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PVhuKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPU1lKHt0eXBlOm4sc2VsZWN0b3JzOltbInNlbGVjdCIsImZvcm1Db250cm9sTmFtZSIsIiIsMywibXVsdGlwbGUiLCIiXSxbInNlbGVjdCIsImZvcm1Db250cm9sIiwiIiwzLCJtdWx0aXBsZSIsIiJdLFsic2VsZWN0IiwibmdNb2RlbCIsIiIsMywibXVsdGlwbGUiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZBKCJjaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uQ2hhbmdlKG8udGFyZ2V0LnZhbHVlKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBpLm9uVG91Y2hlZCgpfSl9LGlucHV0czp7Y29tcGFyZVdpdGg6ImNvbXBhcmVXaXRoIn0sZmVhdHVyZXM6W1Z0KFtmeWVdKSxYZV19KSxufSkoKSx4cT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl9lbGVtZW50PWUsdGhpcy5fcmVuZGVyZXI9aSx0aGlzLl9zZWxlY3Q9cix0aGlzLl9zZWxlY3QmJih0aGlzLmlkPXRoaXMuX3NlbGVjdC5fcmVnaXN0ZXJPcHRpb24oKSl9c2V0IG5nVmFsdWUoZSl7bnVsbCE9dGhpcy5fc2VsZWN0JiYodGhpcy5fc2VsZWN0Ll9vcHRpb25NYXAuc2V0KHRoaXMuaWQsZSksdGhpcy5fc2V0RWxlbWVudFZhbHVlKHZxKHRoaXMuaWQsZSkpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpfXNldCB2YWx1ZShlKXt0aGlzLl9zZXRFbGVtZW50VmFsdWUoZSksdGhpcy5fc2VsZWN0JiZ0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpfV9zZXRFbGVtZW50VmFsdWUoZSl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LCJ2YWx1ZSIsZSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zZWxlY3QmJih0aGlzLl9zZWxlY3QuX29wdGlvbk1hcC5kZWxldGUodGhpcy5pZCksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoeGUpLEMoZGMpLEMoeXEsOSkpfSxuLlx1MDI3NWRpcj1NZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJvcHRpb24iXV0saW5wdXRzOntuZ1ZhbHVlOiJuZ1ZhbHVlIix2YWx1ZToidmFsdWUifX0pLG59KSgpLF95ZT17cHJvdmlkZTpYcix1c2VFeGlzdGluZzpXbigoKT0+Q3EpLG11bHRpOiEwfTtmdW5jdGlvbiBVOShuLHQpe3JldHVybiBudWxsPT1uP2Ake3R9YDooInN0cmluZyI9PXR5cGVvZiB0JiYodD1gJyR7dH0nYCksdCYmIm9iamVjdCI9PXR5cGVvZiB0JiYodD0iT2JqZWN0IiksYCR7bn06ICR7dH1gLnNsaWNlKDAsNTApKX12YXIgQ3E9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGtoe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9vcHRpb25NYXA9bmV3IE1hcCx0aGlzLl9pZENvdW50ZXI9MCx0aGlzLl9jb21wYXJlV2l0aD1PYmplY3QuaXN9c2V0IGNvbXBhcmVXaXRoKGUpe3RoaXMuX2NvbXBhcmVXaXRoPWV9d3JpdGVWYWx1ZShlKXtsZXQgaTtpZih0aGlzLnZhbHVlPWUsQXJyYXkuaXNBcnJheShlKSl7bGV0IHI9ZS5tYXAobz0+dGhpcy5fZ2V0T3B0aW9uSWQobykpO2k9KG8sYSk9PntvLl9zZXRTZWxlY3RlZChyLmluZGV4T2YoYS50b1N0cmluZygpKT4tMSl9fWVsc2UgaT0ocixvKT0+e3IuX3NldFNlbGVjdGVkKCExKX07dGhpcy5fb3B0aW9uTWFwLmZvckVhY2goaSl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWk9PntsZXQgcj1bXSxvPWkuc2VsZWN0ZWRPcHRpb25zO2lmKHZvaWQgMCE9PW8pe2xldCBhPW87Zm9yKGxldCBzPTA7czxhLmxlbmd0aDtzKyspe2xldCBjPXRoaXMuX2dldE9wdGlvblZhbHVlKGFbc10udmFsdWUpO3IucHVzaChjKX19ZWxzZXtsZXQgYT1pLm9wdGlvbnM7Zm9yKGxldCBzPTA7czxhLmxlbmd0aDtzKyspe2xldCBsPWFbc107aWYobC5zZWxlY3RlZCl7bGV0IGM9dGhpcy5fZ2V0T3B0aW9uVmFsdWUobC52YWx1ZSk7ci5wdXNoKGMpfX19dGhpcy52YWx1ZT1yLGUocil9fV9yZWdpc3Rlck9wdGlvbihlKXtsZXQgaT0odGhpcy5faWRDb3VudGVyKyspLnRvU3RyaW5nKCk7cmV0dXJuIHRoaXMuX29wdGlvbk1hcC5zZXQoaSxlKSxpfV9nZXRPcHRpb25JZChlKXtmb3IobGV0IGkgb2YgQXJyYXkuZnJvbSh0aGlzLl9vcHRpb25NYXAua2V5cygpKSlpZih0aGlzLl9jb21wYXJlV2l0aCh0aGlzLl9vcHRpb25NYXAuZ2V0KGkpLl92YWx1ZSxlKSlyZXR1cm4gaTtyZXR1cm4gbnVsbH1fZ2V0T3B0aW9uVmFsdWUoZSl7bGV0IGk9ZnVuY3Rpb24obil7cmV0dXJuIG4uc3BsaXQoIjoiKVswXX0oZSk7cmV0dXJuIHRoaXMuX29wdGlvbk1hcC5oYXMoaSk/dGhpcy5fb3B0aW9uTWFwLmdldChpKS5fdmFsdWU6ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1YbihuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1NZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJzZWxlY3QiLCJtdWx0aXBsZSIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsic2VsZWN0IiwibXVsdGlwbGUiLCIiLCJmb3JtQ29udHJvbCIsIiJdLFsic2VsZWN0IiwibXVsdGlwbGUiLCIiLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmQSgiY2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkNoYW5nZShvLnRhcmdldCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvdWNoZWQoKX0pfSxpbnB1dHM6e2NvbXBhcmVXaXRoOiJjb21wYXJlV2l0aCJ9LGZlYXR1cmVzOltWdChbX3llXSksWGVdfSksbn0pKCksTXE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fZWxlbWVudD1lLHRoaXMuX3JlbmRlcmVyPWksdGhpcy5fc2VsZWN0PXIsdGhpcy5fc2VsZWN0JiYodGhpcy5pZD10aGlzLl9zZWxlY3QuX3JlZ2lzdGVyT3B0aW9uKHRoaXMpKX1zZXQgbmdWYWx1ZShlKXtudWxsIT10aGlzLl9zZWxlY3QmJih0aGlzLl92YWx1ZT1lLHRoaXMuX3NldEVsZW1lbnRWYWx1ZShVOSh0aGlzLmlkLGUpKSx0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKX1zZXQgdmFsdWUoZSl7dGhpcy5fc2VsZWN0Pyh0aGlzLl92YWx1ZT1lLHRoaXMuX3NldEVsZW1lbnRWYWx1ZShVOSh0aGlzLmlkLGUpKSx0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKTp0aGlzLl9zZXRFbGVtZW50VmFsdWUoZSl9X3NldEVsZW1lbnRWYWx1ZShlKXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsInZhbHVlIixlKX1fc2V0U2VsZWN0ZWQoZSl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LCJzZWxlY3RlZCIsZSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zZWxlY3QmJih0aGlzLl9zZWxlY3QuX29wdGlvbk1hcC5kZWxldGUodGhpcy5pZCksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoeGUpLEMoZGMpLEMoQ3EsOSkpfSxuLlx1MDI3NWRpcj1NZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJvcHRpb24iXV0saW5wdXRzOntuZ1ZhbHVlOiJuZ1ZhbHVlIix2YWx1ZToidmFsdWUifX0pLG59KSgpO2Z1bmN0aW9uIHdxKG4pe3JldHVybiJudW1iZXIiPT10eXBlb2Ygbj9uOnBhcnNlSW50KG4sMTApfWZ1bmN0aW9uIFNxKG4pe3JldHVybiJudW1iZXIiPT10eXBlb2Ygbj9uOnBhcnNlRmxvYXQobil9dmFyIEZoPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLl92YWxpZGF0b3I9dEV9bmdPbkNoYW5nZXMoZSl7aWYodGhpcy5pbnB1dE5hbWUgaW4gZSl7bGV0IGk9dGhpcy5ub3JtYWxpemVJbnB1dChlW3RoaXMuaW5wdXROYW1lXS5jdXJyZW50VmFsdWUpO3RoaXMuX2VuYWJsZWQ9dGhpcy5lbmFibGVkKGkpLHRoaXMuX3ZhbGlkYXRvcj10aGlzLl9lbmFibGVkP3RoaXMuY3JlYXRlVmFsaWRhdG9yKGkpOnRFLHRoaXMuX29uQ2hhbmdlJiZ0aGlzLl9vbkNoYW5nZSgpfX12YWxpZGF0ZShlKXtyZXR1cm4gdGhpcy5fdmFsaWRhdG9yKGUpfXJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoZSl7dGhpcy5fb25DaGFuZ2U9ZX1lbmFibGVkKGUpe3JldHVybiBudWxsIT1lfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVkaXI9TWUoe3R5cGU6bixmZWF0dXJlczpbcXRdfSksbn0pKCksdnllPXtwcm92aWRlOklvLHVzZUV4aXN0aW5nOlduKCgpPT55eWUpLG11bHRpOiEwfSx5eWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEZoe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmlucHV0TmFtZT0ibWF4Iix0aGlzLm5vcm1hbGl6ZUlucHV0PWU9PlNxKGUpLHRoaXMuY3JlYXRlVmFsaWRhdG9yPWU9PnE5KGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PVhuKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPU1lKHt0eXBlOm4sc2VsZWN0b3JzOltbImlucHV0IiwidHlwZSIsIm51bWJlciIsIm1heCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwibnVtYmVyIiwibWF4IiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsIm51bWJlciIsIm1heCIsIiIsIm5nTW9kZWwiLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJkJlKCJtYXgiLGkuX2VuYWJsZWQ/aS5tYXg6bnVsbCl9LGlucHV0czp7bWF4OiJtYXgifSxmZWF0dXJlczpbVnQoW3Z5ZV0pLFhlXX0pLG59KSgpLHh5ZT17cHJvdmlkZTpJbyx1c2VFeGlzdGluZzpXbigoKT0+Q3llKSxtdWx0aTohMH0sQ3llPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBGaHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pbnB1dE5hbWU9Im1pbiIsdGhpcy5ub3JtYWxpemVJbnB1dD1lPT5TcShlKSx0aGlzLmNyZWF0ZVZhbGlkYXRvcj1lPT5XOShlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1YbihuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1NZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJtaW4iLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsIm51bWJlciIsIm1pbiIsIiIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJtaW4iLCIiLCJuZ01vZGVsIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZCZSgibWluIixpLl9lbmFibGVkP2kubWluOm51bGwpfSxpbnB1dHM6e21pbjoibWluIn0sZmVhdHVyZXM6W1Z0KFt4eWVdKSxYZV19KSxufSkoKSxNeWU9e3Byb3ZpZGU6SW8sdXNlRXhpc3Rpbmc6V24oKCk9PkVxKSxtdWx0aTohMH0sd3llPXtwcm92aWRlOklvLHVzZUV4aXN0aW5nOlduKCgpPT5xMiksbXVsdGk6ITB9LEVxPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBGaHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pbnB1dE5hbWU9InJlcXVpcmVkIix0aGlzLm5vcm1hbGl6ZUlucHV0PWV3LHRoaXMuY3JlYXRlVmFsaWRhdG9yPWU9Plg5fWVuYWJsZWQoZSl7cmV0dXJuIGV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9WG4obikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9TWUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdLFsiIiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbCIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyIiLCJyZXF1aXJlZCIsIiIsIm5nTW9kZWwiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmQmUoInJlcXVpcmVkIixpLl9lbmFibGVkPyIiOm51bGwpfSxpbnB1dHM6e3JlcXVpcmVkOiJyZXF1aXJlZCJ9LGZlYXR1cmVzOltWdChbTXllXSksWGVdfSksbn0pKCkscTI9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEVxe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNyZWF0ZVZhbGlkYXRvcj1lPT5ZOX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1YbihuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1NZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwicmVxdWlyZWQiLCIiLCJuZ01vZGVsIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZCZSgicmVxdWlyZWQiLGkuX2VuYWJsZWQ/IiI6bnVsbCl9LGZlYXR1cmVzOltWdChbd3llXSksWGVdfSksbn0pKCksU3llPXtwcm92aWRlOklvLHVzZUV4aXN0aW5nOlduKCgpPT5FeWUpLG11bHRpOiEwfSxFeWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEZoe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmlucHV0TmFtZT0iZW1haWwiLHRoaXMubm9ybWFsaXplSW5wdXQ9ZXcsdGhpcy5jcmVhdGVWYWxpZGF0b3I9ZT0+UTl9ZW5hYmxlZChlKXtyZXR1cm4gZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1YbihuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1NZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJlbWFpbCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiIiwiZW1haWwiLCIiLCJmb3JtQ29udHJvbCIsIiJdLFsiIiwiZW1haWwiLCIiLCJuZ01vZGVsIiwiIl1dLGlucHV0czp7ZW1haWw6ImVtYWlsIn0sZmVhdHVyZXM6W1Z0KFtTeWVdKSxYZV19KSxufSkoKSxUeWU9e3Byb3ZpZGU6SW8sdXNlRXhpc3Rpbmc6V24oKCk9PkR5ZSksbXVsdGk6ITB9LER5ZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgRmh7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuaW5wdXROYW1lPSJtaW5sZW5ndGgiLHRoaXMubm9ybWFsaXplSW5wdXQ9ZT0+d3EoZSksdGhpcy5jcmVhdGVWYWxpZGF0b3I9ZT0+WjkoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9WG4obikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9TWUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibWlubGVuZ3RoIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyIiLCJtaW5sZW5ndGgiLCIiLCJmb3JtQ29udHJvbCIsIiJdLFsiIiwibWlubGVuZ3RoIiwiIiwibmdNb2RlbCIsIiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmQmUoIm1pbmxlbmd0aCIsaS5fZW5hYmxlZD9pLm1pbmxlbmd0aDpudWxsKX0saW5wdXRzOnttaW5sZW5ndGg6Im1pbmxlbmd0aCJ9LGZlYXR1cmVzOltWdChbVHllXSksWGVdfSksbn0pKCksSXllPXtwcm92aWRlOklvLHVzZUV4aXN0aW5nOlduKCgpPT5BeWUpLG11bHRpOiEwfSxBeWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEZoe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmlucHV0TmFtZT0ibWF4bGVuZ3RoIix0aGlzLm5vcm1hbGl6ZUlucHV0PWU9PndxKGUpLHRoaXMuY3JlYXRlVmFsaWRhdG9yPWU9Pks5KGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PVhuKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPU1lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1heGxlbmd0aCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiIiwibWF4bGVuZ3RoIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbIiIsIm1heGxlbmd0aCIsIiIsIm5nTW9kZWwiLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJkJlKCJtYXhsZW5ndGgiLGkuX2VuYWJsZWQ/aS5tYXhsZW5ndGg6bnVsbCl9LGlucHV0czp7bWF4bGVuZ3RoOiJtYXhsZW5ndGgifSxmZWF0dXJlczpbVnQoW0l5ZV0pLFhlXX0pLG59KSgpLFJ5ZT17cHJvdmlkZTpJbyx1c2VFeGlzdGluZzpXbigoKT0+UHllKSxtdWx0aTohMH0sUHllPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBGaHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pbnB1dE5hbWU9InBhdHRlcm4iLHRoaXMubm9ybWFsaXplSW5wdXQ9ZT0+ZSx0aGlzLmNyZWF0ZVZhbGlkYXRvcj1lPT5KOShlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1YbihuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1NZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJwYXR0ZXJuIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyIiLCJwYXR0ZXJuIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbIiIsInBhdHRlcm4iLCIiLCJuZ01vZGVsIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZCZSgicGF0dGVybiIsaS5fZW5hYmxlZD9pLnBhdHRlcm46bnVsbCl9LGlucHV0czp7cGF0dGVybjoicGF0dGVybiJ9LGZlYXR1cmVzOltWdChbUnllXSksWGVdfSksbn0pKCksVHE9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe2ltcG9ydHM6W2ZxXX0pLG59KSgpLEd1PShuZXcgTWwoIjE1LjIuOSIpLCgoKT0+e2NsYXNzIG57c3RhdGljIHdpdGhDb25maWcoZSl7cmV0dXJue25nTW9kdWxlOm4scHJvdmlkZXJzOlt7cHJvdmlkZTpPaCx1c2VWYWx1ZTplLmNhbGxTZXREaXNhYmxlZFN0YXRlPz90eX1dfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe2ltcG9ydHM6W1RxXX0pLG59KSgpKSx1RT0oKCk9PntjbGFzcyBue3N0YXRpYyB3aXRoQ29uZmlnKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6RzIsdXNlVmFsdWU6ZS53YXJuT25OZ01vZGVsV2l0aEZvcm1Db250cm9sPz8iYWx3YXlzIn0se3Byb3ZpZGU6T2gsdXNlVmFsdWU6ZS5jYWxsU2V0RGlzYWJsZWRTdGF0ZT8/dHl9XX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1IKHtpbXBvcnRzOltUcV19KSxufSkoKSxreWU9WyJ0cmlnZ2VyIl0sT3llPVsicGFuZWwiXTtmdW5jdGlvbiBGeWUobix0KXtpZigxJm4mJihmKDAsInNwYW4iLDEwKSxUKDEpLGcoKSksMiZuKXtsZXQgZT13KCk7digxKSxrdChlLnBsYWNlaG9sZGVyKX19ZnVuY3Rpb24gTnllKG4sdCl7aWYoMSZuJiYoZigwLCJzcGFuIiwxNCksVCgxKSxnKCkpLDImbil7bGV0IGU9dygyKTt2KDEpLGt0KGUudHJpZ2dlclZhbHVlKX19ZnVuY3Rpb24gTHllKG4sdCl7MSZuJiZUdCgwLDAsWyIqbmdTd2l0Y2hDYXNlIiwidHJ1ZSJdKX1mdW5jdGlvbiBCeWUobix0KXsxJm4mJihmKDAsInNwYW4iLDExKSxTKDEsTnllLDIsMSwic3BhbiIsMTIpLFMoMixMeWUsMSwwLCJuZy1jb250ZW50IiwxMyksZygpKSwyJm4mJihiKCJuZ1N3aXRjaCIsISF3KCkuY3VzdG9tVHJpZ2dlciksdigyKSxiKCJuZ1N3aXRjaENhc2UiLCEwKSl9ZnVuY3Rpb24gVnllKG4sdCl7aWYoMSZuKXtsZXQgZT1UZSgpO3FuKCksdWEoKSxmKDAsImRpdiIsMTUsMTYpLEEoIkB0cmFuc2Zvcm1QYW5lbC5kb25lIixmdW5jdGlvbihyKXtyZXR1cm4gbmUoZSksaWUodygpLl9wYW5lbERvbmVBbmltYXRpbmdTdHJlYW0ubmV4dChyLnRvU3RhdGUpKX0pKCJrZXlkb3duIixmdW5jdGlvbihyKXtyZXR1cm4gbmUoZSksaWUodygpLl9oYW5kbGVLZXlkb3duKHIpKX0pLFR0KDIsMSksZygpfWlmKDImbil7bGV0IGU9dygpO2JiKCJtYXQtbWRjLXNlbGVjdC1wYW5lbCBtZGMtbWVudS1zdXJmYWNlIG1kYy1tZW51LXN1cmZhY2UtLW9wZW4gIixlLl9nZXRQYW5lbFRoZW1lKCksIiIpLGIoIm5nQ2xhc3MiLGUucGFuZWxDbGFzcykoIkB0cmFuc2Zvcm1QYW5lbCIsInNob3dpbmciKSxCZSgiaWQiLGUuaWQrIi1wYW5lbCIpKCJhcmlhLW11bHRpc2VsZWN0YWJsZSIsZS5tdWx0aXBsZSkoImFyaWEtbGFiZWwiLGUuYXJpYUxhYmVsfHxudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixlLl9nZXRQYW5lbEFyaWFMYWJlbGxlZGJ5KCkpfX12YXIgSHllPVtbWyJtYXQtc2VsZWN0LXRyaWdnZXIiXV0sIioiXSx6eWU9WyJtYXQtc2VsZWN0LXRyaWdnZXIiLCIqIl0sVXllPXt0cmFuc2Zvcm1QYW5lbFdyYXA6ZnIoInRyYW5zZm9ybVBhbmVsV3JhcCIsW2JpKCIqID0+IHZvaWQiLHJoKCJAdHJhbnNmb3JtUGFuZWwiLFtpaCgpXSx7b3B0aW9uYWw6ITB9KSldKSx0cmFuc2Zvcm1QYW5lbDpmcigidHJhbnNmb3JtUGFuZWwiLFtTaSgidm9pZCIscm4oe29wYWNpdHk6MCx0cmFuc2Zvcm06InNjYWxlKDEsIDAuOCkifSkpLGJpKCJ2b2lkID0+IHNob3dpbmciLE1pKCIxMjBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSIscm4oe29wYWNpdHk6MSx0cmFuc2Zvcm06InNjYWxlKDEsIDEpIn0pKSksYmkoIiogPT4gdm9pZCIsTWkoIjEwMG1zIGxpbmVhciIscm4oe29wYWNpdHk6MH0pKSldKX0sRHE9MCxJcT1uZXcgdGUoIm1hdC1zZWxlY3Qtc2Nyb2xsLXN0cmF0ZWd5IiksR3llPW5ldyB0ZSgiTUFUX1NFTEVDVF9DT05GSUciKSxXeWU9e3Byb3ZpZGU6SXEsZGVwczpbT2ldLHVzZUZhY3Rvcnk6ZnVuY3Rpb24obil7cmV0dXJuKCk9Pm4uc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCl9fSxxeWU9bmV3IHRlKCJNYXRTZWxlY3RUcmlnZ2VyIiksWHllPWdvKERjKGFvKGhnKGNsYXNze2NvbnN0cnVjdG9yKG4sdCxlLGkscil7dGhpcy5fZWxlbWVudFJlZj1uLHRoaXMuX2RlZmF1bHRFcnJvclN0YXRlTWF0Y2hlcj10LHRoaXMuX3BhcmVudEZvcm09ZSx0aGlzLl9wYXJlbnRGb3JtR3JvdXA9aSx0aGlzLm5nQ29udHJvbD1yLHRoaXMuc3RhdGVDaGFuZ2VzPW5ldyBFZX19KSkpKSxZeWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFh5ZXtnZXQgZm9jdXNlZCgpe3JldHVybiB0aGlzLl9mb2N1c2VkfHx0aGlzLl9wYW5lbE9wZW59Z2V0IHBsYWNlaG9sZGVyKCl7cmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyfXNldCBwbGFjZWhvbGRlcihlKXt0aGlzLl9wbGFjZWhvbGRlcj1lLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX1nZXQgcmVxdWlyZWQoKXtyZXR1cm4gdGhpcy5fcmVxdWlyZWQ/P3RoaXMubmdDb250cm9sPy5jb250cm9sPy5oYXNWYWxpZGF0b3IoaWwucmVxdWlyZWQpPz8hMX1zZXQgcmVxdWlyZWQoZSl7dGhpcy5fcmVxdWlyZWQ9dnQoZSksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfWdldCBtdWx0aXBsZSgpe3JldHVybiB0aGlzLl9tdWx0aXBsZX1zZXQgbXVsdGlwbGUoZSl7dGhpcy5fbXVsdGlwbGU9dnQoZSl9Z2V0IGRpc2FibGVPcHRpb25DZW50ZXJpbmcoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZU9wdGlvbkNlbnRlcmluZ31zZXQgZGlzYWJsZU9wdGlvbkNlbnRlcmluZyhlKXt0aGlzLl9kaXNhYmxlT3B0aW9uQ2VudGVyaW5nPXZ0KGUpfWdldCBjb21wYXJlV2l0aCgpe3JldHVybiB0aGlzLl9jb21wYXJlV2l0aH1zZXQgY29tcGFyZVdpdGgoZSl7dGhpcy5fY29tcGFyZVdpdGg9ZSx0aGlzLl9zZWxlY3Rpb25Nb2RlbCYmdGhpcy5faW5pdGlhbGl6ZVNlbGVjdGlvbigpfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLl92YWx1ZX1zZXQgdmFsdWUoZSl7dGhpcy5fYXNzaWduVmFsdWUoZSkmJnRoaXMuX29uQ2hhbmdlKGUpfWdldCB0eXBlYWhlYWREZWJvdW5jZUludGVydmFsKCl7cmV0dXJuIHRoaXMuX3R5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWx9c2V0IHR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwoZSl7dGhpcy5fdHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbD1taShlKX1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0IGlkKGUpe3RoaXMuX2lkPWV8fHRoaXMuX3VpZCx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9Y29uc3RydWN0b3IoZSxpLHIsbyxhLHMsbCxjLGQsdSxwLGgsbSxfKXtzdXBlcihhLG8sbCxjLHUpLHRoaXMuX3ZpZXdwb3J0UnVsZXI9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1pLHRoaXMuX25nWm9uZT1yLHRoaXMuX2Rpcj1zLHRoaXMuX3BhcmVudEZvcm1GaWVsZD1kLHRoaXMuX2xpdmVBbm5vdW5jZXI9bSx0aGlzLl9kZWZhdWx0T3B0aW9ucz1fLHRoaXMuX3BhbmVsT3Blbj0hMSx0aGlzLl9jb21wYXJlV2l0aD0oTSx5KT0+TT09PXksdGhpcy5fdWlkPSJtYXQtc2VsZWN0LSIrRHErKyx0aGlzLl90cmlnZ2VyQXJpYUxhYmVsbGVkQnk9bnVsbCx0aGlzLl9kZXN0cm95PW5ldyBFZSx0aGlzLl9vbkNoYW5nZT0oKT0+e30sdGhpcy5fb25Ub3VjaGVkPSgpPT57fSx0aGlzLl92YWx1ZUlkPSJtYXQtc2VsZWN0LXZhbHVlLSIrRHErKyx0aGlzLl9wYW5lbERvbmVBbmltYXRpbmdTdHJlYW09bmV3IEVlLHRoaXMuX292ZXJsYXlQYW5lbENsYXNzPXRoaXMuX2RlZmF1bHRPcHRpb25zPy5vdmVybGF5UGFuZWxDbGFzc3x8IiIsdGhpcy5fZm9jdXNlZD0hMSx0aGlzLmNvbnRyb2xUeXBlPSJtYXQtc2VsZWN0Iix0aGlzLl9tdWx0aXBsZT0hMSx0aGlzLl9kaXNhYmxlT3B0aW9uQ2VudGVyaW5nPXRoaXMuX2RlZmF1bHRPcHRpb25zPy5kaXNhYmxlT3B0aW9uQ2VudGVyaW5nPz8hMSx0aGlzLmFyaWFMYWJlbD0iIix0aGlzLm9wdGlvblNlbGVjdGlvbkNoYW5nZXM9aXMoKCk9PntsZXQgTT10aGlzLm9wdGlvbnM7cmV0dXJuIE0/TS5jaGFuZ2VzLnBpcGUoa24oTSksSm4oKCk9PnRuKC4uLk0ubWFwKHk9Pnkub25TZWxlY3Rpb25DaGFuZ2UpKSkpOnRoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKEx0KDEpLEpuKCgpPT50aGlzLm9wdGlvblNlbGVjdGlvbkNoYW5nZXMpKX0pLHRoaXMub3BlbmVkQ2hhbmdlPW5ldyBGLHRoaXMuX29wZW5lZFN0cmVhbT10aGlzLm9wZW5lZENoYW5nZS5waXBlKE9lKE09Pk0pLHEoKCk9Pnt9KSksdGhpcy5fY2xvc2VkU3RyZWFtPXRoaXMub3BlbmVkQ2hhbmdlLnBpcGUoT2UoTT0+IU0pLHEoKCk9Pnt9KSksdGhpcy5zZWxlY3Rpb25DaGFuZ2U9bmV3IEYsdGhpcy52YWx1ZUNoYW5nZT1uZXcgRix0aGlzLm5nQ29udHJvbCYmKHRoaXMubmdDb250cm9sLnZhbHVlQWNjZXNzb3I9dGhpcyksbnVsbCE9Xz8udHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCYmKHRoaXMuX3R5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWw9Xy50eXBlYWhlYWREZWJvdW5jZUludGVydmFsKSx0aGlzLl9zY3JvbGxTdHJhdGVneUZhY3Rvcnk9aCx0aGlzLl9zY3JvbGxTdHJhdGVneT10aGlzLl9zY3JvbGxTdHJhdGVneUZhY3RvcnkoKSx0aGlzLnRhYkluZGV4PXBhcnNlSW50KHApfHwwLHRoaXMuaWQ9dGhpcy5pZH1uZ09uSW5pdCgpe3RoaXMuX3NlbGVjdGlvbk1vZGVsPW5ldyBmZyh0aGlzLm11bHRpcGxlKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCksdGhpcy5fcGFuZWxEb25lQW5pbWF0aW5nU3RyZWFtLnBpcGUocmkoKSxpdCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKCgpPT50aGlzLl9wYW5lbERvbmVBbmltYXRpbmcodGhpcy5wYW5lbE9wZW4pKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLl9pbml0S2V5TWFuYWdlcigpLHRoaXMuX3NlbGVjdGlvbk1vZGVsLmNoYW5nZWQucGlwZShpdCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKGU9PntlLmFkZGVkLmZvckVhY2goaT0+aS5zZWxlY3QoKSksZS5yZW1vdmVkLmZvckVhY2goaT0+aS5kZXNlbGVjdCgpKX0pLHRoaXMub3B0aW9ucy5jaGFuZ2VzLnBpcGUoa24obnVsbCksaXQodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3Jlc2V0T3B0aW9ucygpLHRoaXMuX2luaXRpYWxpemVTZWxlY3Rpb24oKX0pfW5nRG9DaGVjaygpe2xldCBlPXRoaXMuX2dldFRyaWdnZXJBcmlhTGFiZWxsZWRieSgpLGk9dGhpcy5uZ0NvbnRyb2w7aWYoZSE9PXRoaXMuX3RyaWdnZXJBcmlhTGFiZWxsZWRCeSl7bGV0IHI9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3RoaXMuX3RyaWdnZXJBcmlhTGFiZWxsZWRCeT1lLGU/ci5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIsZSk6ci5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIpfWkmJih0aGlzLl9wcmV2aW91c0NvbnRyb2whPT1pLmNvbnRyb2wmJih2b2lkIDAhPT10aGlzLl9wcmV2aW91c0NvbnRyb2wmJm51bGwhPT1pLmRpc2FibGVkJiZpLmRpc2FibGVkIT09dGhpcy5kaXNhYmxlZCYmKHRoaXMuZGlzYWJsZWQ9aS5kaXNhYmxlZCksdGhpcy5fcHJldmlvdXNDb250cm9sPWkuY29udHJvbCksdGhpcy51cGRhdGVFcnJvclN0YXRlKCkpfW5nT25DaGFuZ2VzKGUpeyhlLmRpc2FibGVkfHxlLnVzZXJBcmlhRGVzY3JpYmVkQnkpJiZ0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCksZS50eXBlYWhlYWREZWJvdW5jZUludGVydmFsJiZ0aGlzLl9rZXlNYW5hZ2VyJiZ0aGlzLl9rZXlNYW5hZ2VyLndpdGhUeXBlQWhlYWQodGhpcy5fdHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9rZXlNYW5hZ2VyPy5kZXN0cm95KCksdGhpcy5fZGVzdHJveS5uZXh0KCksdGhpcy5fZGVzdHJveS5jb21wbGV0ZSgpLHRoaXMuc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCl9dG9nZ2xlKCl7dGhpcy5wYW5lbE9wZW4/dGhpcy5jbG9zZSgpOnRoaXMub3BlbigpfW9wZW4oKXt0aGlzLl9jYW5PcGVuKCkmJih0aGlzLl9wYW5lbE9wZW49ITAsdGhpcy5fa2V5TWFuYWdlci53aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKG51bGwpLHRoaXMuX2hpZ2hsaWdodENvcnJlY3RPcHRpb24oKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9Y2xvc2UoKXt0aGlzLl9wYW5lbE9wZW4mJih0aGlzLl9wYW5lbE9wZW49ITEsdGhpcy5fa2V5TWFuYWdlci53aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKHRoaXMuX2lzUnRsKCk/InJ0bCI6Imx0ciIpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuX29uVG91Y2hlZCgpKX13cml0ZVZhbHVlKGUpe3RoaXMuX2Fzc2lnblZhbHVlKGUpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5fb25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLl9vblRvdWNoZWQ9ZX1zZXREaXNhYmxlZFN0YXRlKGUpe3RoaXMuZGlzYWJsZWQ9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9Z2V0IHBhbmVsT3Blbigpe3JldHVybiB0aGlzLl9wYW5lbE9wZW59Z2V0IHNlbGVjdGVkKCl7cmV0dXJuIHRoaXMubXVsdGlwbGU/dGhpcy5fc2VsZWN0aW9uTW9kZWw/LnNlbGVjdGVkfHxbXTp0aGlzLl9zZWxlY3Rpb25Nb2RlbD8uc2VsZWN0ZWRbMF19Z2V0IHRyaWdnZXJWYWx1ZSgpe2lmKHRoaXMuZW1wdHkpcmV0dXJuIiI7aWYodGhpcy5fbXVsdGlwbGUpe2xldCBlPXRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkLm1hcChpPT5pLnZpZXdWYWx1ZSk7cmV0dXJuIHRoaXMuX2lzUnRsKCkmJmUucmV2ZXJzZSgpLGUuam9pbigiLCAiKX1yZXR1cm4gdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWRbMF0udmlld1ZhbHVlfV9pc1J0bCgpe3JldHVybiEhdGhpcy5fZGlyJiYicnRsIj09PXRoaXMuX2Rpci52YWx1ZX1faGFuZGxlS2V5ZG93bihlKXt0aGlzLmRpc2FibGVkfHwodGhpcy5wYW5lbE9wZW4/dGhpcy5faGFuZGxlT3BlbktleWRvd24oZSk6dGhpcy5faGFuZGxlQ2xvc2VkS2V5ZG93bihlKSl9X2hhbmRsZUNsb3NlZEtleWRvd24oZSl7bGV0IGk9ZS5rZXlDb2RlLHI9NDA9PT1pfHwzOD09PWl8fDM3PT09aXx8Mzk9PT1pLG89MTM9PT1pfHwzMj09PWksYT10aGlzLl9rZXlNYW5hZ2VyO2lmKCFhLmlzVHlwaW5nKCkmJm8mJiFPcihlKXx8KHRoaXMubXVsdGlwbGV8fGUuYWx0S2V5KSYmcillLnByZXZlbnREZWZhdWx0KCksdGhpcy5vcGVuKCk7ZWxzZSBpZighdGhpcy5tdWx0aXBsZSl7bGV0IHM9dGhpcy5zZWxlY3RlZDthLm9uS2V5ZG93bihlKTtsZXQgbD10aGlzLnNlbGVjdGVkO2wmJnMhPT1sJiZ0aGlzLl9saXZlQW5ub3VuY2VyLmFubm91bmNlKGwudmlld1ZhbHVlLDFlNCl9fV9oYW5kbGVPcGVuS2V5ZG93bihlKXtsZXQgaT10aGlzLl9rZXlNYW5hZ2VyLHI9ZS5rZXlDb2RlLG89NDA9PT1yfHwzOD09PXIsYT1pLmlzVHlwaW5nKCk7aWYobyYmZS5hbHRLZXkpZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuY2xvc2UoKTtlbHNlIGlmKGF8fDEzIT09ciYmMzIhPT1yfHwhaS5hY3RpdmVJdGVtfHxPcihlKSlpZighYSYmdGhpcy5fbXVsdGlwbGUmJjY1PT09ciYmZS5jdHJsS2V5KXtlLnByZXZlbnREZWZhdWx0KCk7bGV0IHM9dGhpcy5vcHRpb25zLnNvbWUobD0+IWwuZGlzYWJsZWQmJiFsLnNlbGVjdGVkKTt0aGlzLm9wdGlvbnMuZm9yRWFjaChsPT57bC5kaXNhYmxlZHx8KHM/bC5zZWxlY3QoKTpsLmRlc2VsZWN0KCkpfSl9ZWxzZXtsZXQgcz1pLmFjdGl2ZUl0ZW1JbmRleDtpLm9uS2V5ZG93bihlKSx0aGlzLl9tdWx0aXBsZSYmbyYmZS5zaGlmdEtleSYmaS5hY3RpdmVJdGVtJiZpLmFjdGl2ZUl0ZW1JbmRleCE9PXMmJmkuYWN0aXZlSXRlbS5fc2VsZWN0VmlhSW50ZXJhY3Rpb24oKX1lbHNlIGUucHJldmVudERlZmF1bHQoKSxpLmFjdGl2ZUl0ZW0uX3NlbGVjdFZpYUludGVyYWN0aW9uKCl9X29uRm9jdXMoKXt0aGlzLmRpc2FibGVkfHwodGhpcy5fZm9jdXNlZD0hMCx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfV9vbkJsdXIoKXt0aGlzLl9mb2N1c2VkPSExLHRoaXMuX2tleU1hbmFnZXI/LmNhbmNlbFR5cGVhaGVhZCgpLCF0aGlzLmRpc2FibGVkJiYhdGhpcy5wYW5lbE9wZW4mJih0aGlzLl9vblRvdWNoZWQoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfV9vbkF0dGFjaGVkKCl7dGhpcy5fb3ZlcmxheURpci5wb3NpdGlvbkNoYW5nZS5waXBlKEx0KDEpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCksdGhpcy5fcG9zaXRpb25pbmdTZXR0bGVkKCl9KX1fZ2V0UGFuZWxUaGVtZSgpe3JldHVybiB0aGlzLl9wYXJlbnRGb3JtRmllbGQ/YG1hdC0ke3RoaXMuX3BhcmVudEZvcm1GaWVsZC5jb2xvcn1gOiIifWdldCBlbXB0eSgpe3JldHVybiF0aGlzLl9zZWxlY3Rpb25Nb2RlbHx8dGhpcy5fc2VsZWN0aW9uTW9kZWwuaXNFbXB0eSgpfV9pbml0aWFsaXplU2VsZWN0aW9uKCl7UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e3RoaXMubmdDb250cm9sJiYodGhpcy5fdmFsdWU9dGhpcy5uZ0NvbnRyb2wudmFsdWUpLHRoaXMuX3NldFNlbGVjdGlvbkJ5VmFsdWUodGhpcy5fdmFsdWUpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX0pfV9zZXRTZWxlY3Rpb25CeVZhbHVlKGUpe2lmKHRoaXMub3B0aW9ucy5mb3JFYWNoKGk9Pmkuc2V0SW5hY3RpdmVTdHlsZXMoKSksdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKSx0aGlzLm11bHRpcGxlJiZlKUFycmF5LmlzQXJyYXkoZSksZS5mb3JFYWNoKGk9PnRoaXMuX3NlbGVjdE9wdGlvbkJ5VmFsdWUoaSkpLHRoaXMuX3NvcnRWYWx1ZXMoKTtlbHNle2xldCBpPXRoaXMuX3NlbGVjdE9wdGlvbkJ5VmFsdWUoZSk7aT90aGlzLl9rZXlNYW5hZ2VyLnVwZGF0ZUFjdGl2ZUl0ZW0oaSk6dGhpcy5wYW5lbE9wZW58fHRoaXMuX2tleU1hbmFnZXIudXBkYXRlQWN0aXZlSXRlbSgtMSl9dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9X3NlbGVjdE9wdGlvbkJ5VmFsdWUoZSl7bGV0IGk9dGhpcy5vcHRpb25zLmZpbmQocj0+e2lmKHRoaXMuX3NlbGVjdGlvbk1vZGVsLmlzU2VsZWN0ZWQocikpcmV0dXJuITE7dHJ5e3JldHVybiBudWxsIT1yLnZhbHVlJiZ0aGlzLl9jb21wYXJlV2l0aChyLnZhbHVlLGUpfWNhdGNoe3JldHVybiExfX0pO3JldHVybiBpJiZ0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoaSksaX1fYXNzaWduVmFsdWUoZSl7cmV0dXJuISEoZSE9PXRoaXMuX3ZhbHVlfHx0aGlzLl9tdWx0aXBsZSYmQXJyYXkuaXNBcnJheShlKSkmJih0aGlzLm9wdGlvbnMmJnRoaXMuX3NldFNlbGVjdGlvbkJ5VmFsdWUoZSksdGhpcy5fdmFsdWU9ZSwhMCl9X2luaXRLZXlNYW5hZ2VyKCl7dGhpcy5fa2V5TWFuYWdlcj1uZXcgbGcodGhpcy5vcHRpb25zKS53aXRoVHlwZUFoZWFkKHRoaXMuX3R5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwpLndpdGhWZXJ0aWNhbE9yaWVudGF0aW9uKCkud2l0aEhvcml6b250YWxPcmllbnRhdGlvbih0aGlzLl9pc1J0bCgpPyJydGwiOiJsdHIiKS53aXRoSG9tZUFuZEVuZCgpLndpdGhQYWdlVXBEb3duKCkud2l0aEFsbG93ZWRNb2RpZmllcktleXMoWyJzaGlmdEtleSJdKSx0aGlzLl9rZXlNYW5hZ2VyLnRhYk91dC5zdWJzY3JpYmUoKCk9Pnt0aGlzLnBhbmVsT3BlbiYmKCF0aGlzLm11bHRpcGxlJiZ0aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0mJnRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbS5fc2VsZWN0VmlhSW50ZXJhY3Rpb24oKSx0aGlzLmZvY3VzKCksdGhpcy5jbG9zZSgpKX0pLHRoaXMuX2tleU1hbmFnZXIuY2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMuX3BhbmVsT3BlbiYmdGhpcy5wYW5lbD90aGlzLl9zY3JvbGxPcHRpb25JbnRvVmlldyh0aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleHx8MCk6IXRoaXMuX3BhbmVsT3BlbiYmIXRoaXMubXVsdGlwbGUmJnRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbSYmdGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtLl9zZWxlY3RWaWFJbnRlcmFjdGlvbigpfSl9X3Jlc2V0T3B0aW9ucygpe2xldCBlPXRuKHRoaXMub3B0aW9ucy5jaGFuZ2VzLHRoaXMuX2Rlc3Ryb3kpO3RoaXMub3B0aW9uU2VsZWN0aW9uQ2hhbmdlcy5waXBlKGl0KGUpKS5zdWJzY3JpYmUoaT0+e3RoaXMuX29uU2VsZWN0KGkuc291cmNlLGkuaXNVc2VySW5wdXQpLGkuaXNVc2VySW5wdXQmJiF0aGlzLm11bHRpcGxlJiZ0aGlzLl9wYW5lbE9wZW4mJih0aGlzLmNsb3NlKCksdGhpcy5mb2N1cygpKX0pLHRuKC4uLnRoaXMub3B0aW9ucy5tYXAoaT0+aS5fc3RhdGVDaGFuZ2VzKSkucGlwZShpdChlKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX0pfV9vblNlbGVjdChlLGkpe2xldCByPXRoaXMuX3NlbGVjdGlvbk1vZGVsLmlzU2VsZWN0ZWQoZSk7bnVsbCE9ZS52YWx1ZXx8dGhpcy5fbXVsdGlwbGU/KHIhPT1lLnNlbGVjdGVkJiYoZS5zZWxlY3RlZD90aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoZSk6dGhpcy5fc2VsZWN0aW9uTW9kZWwuZGVzZWxlY3QoZSkpLGkmJnRoaXMuX2tleU1hbmFnZXIuc2V0QWN0aXZlSXRlbShlKSx0aGlzLm11bHRpcGxlJiYodGhpcy5fc29ydFZhbHVlcygpLGkmJnRoaXMuZm9jdXMoKSkpOihlLmRlc2VsZWN0KCksdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKSxudWxsIT10aGlzLnZhbHVlJiZ0aGlzLl9wcm9wYWdhdGVDaGFuZ2VzKGUudmFsdWUpKSxyIT09dGhpcy5fc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChlKSYmdGhpcy5fcHJvcGFnYXRlQ2hhbmdlcygpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX1fc29ydFZhbHVlcygpe2lmKHRoaXMubXVsdGlwbGUpe2xldCBlPXRoaXMub3B0aW9ucy50b0FycmF5KCk7dGhpcy5fc2VsZWN0aW9uTW9kZWwuc29ydCgoaSxyKT0+dGhpcy5zb3J0Q29tcGFyYXRvcj90aGlzLnNvcnRDb21wYXJhdG9yKGkscixlKTplLmluZGV4T2YoaSktZS5pbmRleE9mKHIpKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9fV9wcm9wYWdhdGVDaGFuZ2VzKGUpe2xldCBpPW51bGw7aT10aGlzLm11bHRpcGxlP3RoaXMuc2VsZWN0ZWQubWFwKHI9PnIudmFsdWUpOnRoaXMuc2VsZWN0ZWQ/dGhpcy5zZWxlY3RlZC52YWx1ZTplLHRoaXMuX3ZhbHVlPWksdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGkpLHRoaXMuX29uQ2hhbmdlKGkpLHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5fZ2V0Q2hhbmdlRXZlbnQoaSkpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfV9oaWdobGlnaHRDb3JyZWN0T3B0aW9uKCl7dGhpcy5fa2V5TWFuYWdlciYmKHRoaXMuZW1wdHk/dGhpcy5fa2V5TWFuYWdlci5zZXRGaXJzdEl0ZW1BY3RpdmUoKTp0aGlzLl9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0odGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWRbMF0pKX1fY2FuT3Blbigpe3JldHVybiF0aGlzLl9wYW5lbE9wZW4mJiF0aGlzLmRpc2FibGVkJiZ0aGlzLm9wdGlvbnM/Lmxlbmd0aD4wfWZvY3VzKGUpe3RoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cyhlKX1fZ2V0UGFuZWxBcmlhTGFiZWxsZWRieSgpe2lmKHRoaXMuYXJpYUxhYmVsKXJldHVybiBudWxsO2xldCBlPXRoaXMuX3BhcmVudEZvcm1GaWVsZD8uZ2V0TGFiZWxJZCgpO3JldHVybiB0aGlzLmFyaWFMYWJlbGxlZGJ5PyhlP2UrIiAiOiIiKSt0aGlzLmFyaWFMYWJlbGxlZGJ5OmV9X2dldEFyaWFBY3RpdmVEZXNjZW5kYW50KCl7cmV0dXJuIHRoaXMucGFuZWxPcGVuJiZ0aGlzLl9rZXlNYW5hZ2VyJiZ0aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0/dGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtLmlkOm51bGx9X2dldFRyaWdnZXJBcmlhTGFiZWxsZWRieSgpe2lmKHRoaXMuYXJpYUxhYmVsKXJldHVybiBudWxsO2xldCBlPXRoaXMuX3BhcmVudEZvcm1GaWVsZD8uZ2V0TGFiZWxJZCgpLGk9KGU/ZSsiICI6IiIpK3RoaXMuX3ZhbHVlSWQ7cmV0dXJuIHRoaXMuYXJpYUxhYmVsbGVkYnkmJihpKz0iICIrdGhpcy5hcmlhTGFiZWxsZWRieSksaX1fcGFuZWxEb25lQW5pbWF0aW5nKGUpe3RoaXMub3BlbmVkQ2hhbmdlLmVtaXQoZSl9c2V0RGVzY3JpYmVkQnlJZHMoZSl7ZS5sZW5ndGg/dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1kZXNjcmliZWRieSIsZS5qb2luKCIgIikpOnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtZGVzY3JpYmVkYnkiKX1vbkNvbnRhaW5lckNsaWNrKCl7dGhpcy5mb2N1cygpLHRoaXMub3BlbigpfWdldCBzaG91bGRMYWJlbEZsb2F0KCl7cmV0dXJuIHRoaXMuX3BhbmVsT3Blbnx8IXRoaXMuZW1wdHl8fHRoaXMuX2ZvY3VzZWQmJiEhdGhpcy5fcGxhY2Vob2xkZXJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoV2EpLEMoUXQpLEMob3QpLEMoRWgpLEMoeGUpLEMoemksOCksQyhDZyw4KSxDKE1nLDgpLEMoUGgsOCksQyhxYSwxMCksTW8oInRhYmluZGV4IiksQyhJcSksQyhIdiksQyhHeWUsOCkpfSxuLlx1MDI3NWRpcj1NZSh7dHlwZTpuLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKFVlKGt5ZSw1KSxVZShPeWUsNSksVWUoVnUsNSkpLDImZSl7bGV0IHI7YmUocj12ZSgpKSYmKGkudHJpZ2dlcj1yLmZpcnN0KSxiZShyPXZlKCkpJiYoaS5wYW5lbD1yLmZpcnN0KSxiZShyPXZlKCkpJiYoaS5fb3ZlcmxheURpcj1yLmZpcnN0KX19LGlucHV0czp7dXNlckFyaWFEZXNjcmliZWRCeTpbImFyaWEtZGVzY3JpYmVkYnkiLCJ1c2VyQXJpYURlc2NyaWJlZEJ5Il0scGFuZWxDbGFzczoicGFuZWxDbGFzcyIscGxhY2Vob2xkZXI6InBsYWNlaG9sZGVyIixyZXF1aXJlZDoicmVxdWlyZWQiLG11bHRpcGxlOiJtdWx0aXBsZSIsZGlzYWJsZU9wdGlvbkNlbnRlcmluZzoiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsY29tcGFyZVdpdGg6ImNvbXBhcmVXaXRoIix2YWx1ZToidmFsdWUiLGFyaWFMYWJlbDpbImFyaWEtbGFiZWwiLCJhcmlhTGFiZWwiXSxhcmlhTGFiZWxsZWRieTpbImFyaWEtbGFiZWxsZWRieSIsImFyaWFMYWJlbGxlZGJ5Il0sZXJyb3JTdGF0ZU1hdGNoZXI6ImVycm9yU3RhdGVNYXRjaGVyIix0eXBlYWhlYWREZWJvdW5jZUludGVydmFsOiJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIixzb3J0Q29tcGFyYXRvcjoic29ydENvbXBhcmF0b3IiLGlkOiJpZCJ9LG91dHB1dHM6e29wZW5lZENoYW5nZToib3BlbmVkQ2hhbmdlIixfb3BlbmVkU3RyZWFtOiJvcGVuZWQiLF9jbG9zZWRTdHJlYW06ImNsb3NlZCIsc2VsZWN0aW9uQ2hhbmdlOiJzZWxlY3Rpb25DaGFuZ2UiLHZhbHVlQ2hhbmdlOiJ2YWx1ZUNoYW5nZSJ9LGZlYXR1cmVzOltYZSxxdF19KSxufSkoKSxXdT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgWXlle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9wb3NpdGlvbnM9W3tvcmlnaW5YOiJzdGFydCIsb3JpZ2luWToiYm90dG9tIixvdmVybGF5WDoic3RhcnQiLG92ZXJsYXlZOiJ0b3AifSx7b3JpZ2luWDoic3RhcnQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVg6InN0YXJ0IixvdmVybGF5WToiYm90dG9tIixwYW5lbENsYXNzOiJtYXQtbWRjLXNlbGVjdC1wYW5lbC1hYm92ZSJ9XSx0aGlzLl9oaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yPXRoaXMuX2RlZmF1bHRPcHRpb25zPy5oaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yPz8hMX1nZXQgc2hvdWxkTGFiZWxGbG9hdCgpe3JldHVybiB0aGlzLnBhbmVsT3Blbnx8IXRoaXMuZW1wdHl8fHRoaXMuZm9jdXNlZCYmISF0aGlzLnBsYWNlaG9sZGVyfW5nT25Jbml0KCl7c3VwZXIubmdPbkluaXQoKSx0aGlzLl92aWV3cG9ydFJ1bGVyLmNoYW5nZSgpLnBpcGUoaXQodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZSgoKT0+e3RoaXMucGFuZWxPcGVuJiYodGhpcy5fb3ZlcmxheVdpZHRoPXRoaXMuX2dldE92ZXJsYXlXaWR0aCgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKSl9KX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9wYXJlbnRGb3JtRmllbGQmJih0aGlzLl9wcmVmZXJyZWRPdmVybGF5T3JpZ2luPXRoaXMuX3BhcmVudEZvcm1GaWVsZC5nZXRDb25uZWN0ZWRPdmVybGF5T3JpZ2luKCkpfW9wZW4oKXt0aGlzLl9vdmVybGF5V2lkdGg9dGhpcy5fZ2V0T3ZlcmxheVdpZHRoKCksc3VwZXIub3BlbigpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX1jbG9zZSgpe3N1cGVyLmNsb3NlKCksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfV9zY3JvbGxPcHRpb25JbnRvVmlldyhlKXtsZXQgaT10aGlzLm9wdGlvbnMudG9BcnJheSgpW2VdO2lmKGkpe2xldCByPXRoaXMucGFuZWwubmF0aXZlRWxlbWVudCxvPXoxKGUsdGhpcy5vcHRpb25zLHRoaXMub3B0aW9uR3JvdXBzKSxhPWkuX2dldEhvc3RFbGVtZW50KCk7ci5zY3JvbGxUb3A9MD09PWUmJjE9PT1vPzA6VTEoYS5vZmZzZXRUb3AsYS5vZmZzZXRIZWlnaHQsci5zY3JvbGxUb3Asci5vZmZzZXRIZWlnaHQpfX1fcG9zaXRpb25pbmdTZXR0bGVkKCl7dGhpcy5fc2Nyb2xsT3B0aW9uSW50b1ZpZXcodGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtSW5kZXh8fDApfV9nZXRDaGFuZ2VFdmVudChlKXtyZXR1cm4gbmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5zb3VyY2U9dCx0aGlzLnZhbHVlPWV9fSh0aGlzLGUpfV9nZXRPdmVybGF5V2lkdGgoKXtyZXR1cm4odGhpcy5fcHJlZmVycmVkT3ZlcmxheU9yaWdpbiBpbnN0YW5jZW9mIE1kP3RoaXMuX3ByZWZlcnJlZE92ZXJsYXlPcmlnaW4uZWxlbWVudFJlZjp0aGlzLl9wcmVmZXJyZWRPdmVybGF5T3JpZ2lufHx0aGlzLl9lbGVtZW50UmVmKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRofWdldCBoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yKCl7cmV0dXJuIHRoaXMuX2hpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3J9c2V0IGhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IoZSl7dGhpcy5faGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvcj12dChlKSx0aGlzLl9zeW5jUGFyZW50UHJvcGVydGllcygpfV9zeW5jUGFyZW50UHJvcGVydGllcygpe2lmKHRoaXMub3B0aW9ucylmb3IobGV0IGUgb2YgdGhpcy5vcHRpb25zKWUuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PVhuKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LXNlbGVjdCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihlLGkscil7aWYoMSZlJiYoQm4ocixxeWUsNSksQm4ocixqYSw1KSxCbihyLGp2LDUpKSwyJmUpe2xldCBvO2JlKG89dmUoKSkmJihpLmN1c3RvbVRyaWdnZXI9by5maXJzdCksYmUobz12ZSgpKSYmKGkub3B0aW9ucz1vKSxiZShvPXZlKCkpJiYoaS5vcHRpb25Hcm91cHM9byl9fSxob3N0QXR0cnM6WyJyb2xlIiwiY29tYm9ib3giLCJhcmlhLWF1dG9jb21wbGV0ZSIsIm5vbmUiLCJhcmlhLWhhc3BvcHVwIiwibGlzdGJveCIsMSwibWF0LW1kYy1zZWxlY3QiXSxob3N0VmFyczoxOSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJkEoImtleWRvd24iLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9oYW5kbGVLZXlkb3duKG8pfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBpLl9vbkZvY3VzKCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fb25CbHVyKCl9KSwyJmUmJihCZSgiaWQiLGkuaWQpKCJ0YWJpbmRleCIsaS50YWJJbmRleCkoImFyaWEtY29udHJvbHMiLGkucGFuZWxPcGVuP2kuaWQrIi1wYW5lbCI6bnVsbCkoImFyaWEtZXhwYW5kZWQiLGkucGFuZWxPcGVuKSgiYXJpYS1sYWJlbCIsaS5hcmlhTGFiZWx8fG51bGwpKCJhcmlhLXJlcXVpcmVkIixpLnJlcXVpcmVkLnRvU3RyaW5nKCkpKCJhcmlhLWRpc2FibGVkIixpLmRpc2FibGVkLnRvU3RyaW5nKCkpKCJhcmlhLWludmFsaWQiLGkuZXJyb3JTdGF0ZSkoImFyaWEtYWN0aXZlZGVzY2VuZGFudCIsaS5fZ2V0QXJpYUFjdGl2ZURlc2NlbmRhbnQoKSksbnQoIm1hdC1tZGMtc2VsZWN0LWRpc2FibGVkIixpLmRpc2FibGVkKSgibWF0LW1kYy1zZWxlY3QtaW52YWxpZCIsaS5lcnJvclN0YXRlKSgibWF0LW1kYy1zZWxlY3QtcmVxdWlyZWQiLGkucmVxdWlyZWQpKCJtYXQtbWRjLXNlbGVjdC1lbXB0eSIsaS5lbXB0eSkoIm1hdC1tZGMtc2VsZWN0LW11bHRpcGxlIixpLm11bHRpcGxlKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIix0YWJJbmRleDoidGFiSW5kZXgiLGhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3I6ImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IifSxleHBvcnRBczpbIm1hdFNlbGVjdCJdLGZlYXR1cmVzOltWdChbe3Byb3ZpZGU6WXYsdXNlRXhpc3Rpbmc6bn0se3Byb3ZpZGU6VXYsdXNlRXhpc3Rpbmc6bn1dKSxYZV0sbmdDb250ZW50U2VsZWN0b3JzOnp5ZSxkZWNsczoxMSx2YXJzOjExLGNvbnN0czpbWyJjZGstb3ZlcmxheS1vcmlnaW4iLCIiLDEsIm1hdC1tZGMtc2VsZWN0LXRyaWdnZXIiLDMsImNsaWNrIl0sWyJmYWxsYmFja092ZXJsYXlPcmlnaW4iLCJjZGtPdmVybGF5T3JpZ2luIiwidHJpZ2dlciIsIiJdLFsxLCJtYXQtbWRjLXNlbGVjdC12YWx1ZSIsMywibmdTd2l0Y2giXSxbImNsYXNzIiwibWF0LW1kYy1zZWxlY3QtcGxhY2Vob2xkZXIgbWF0LW1kYy1zZWxlY3QtbWluLWxpbmUiLDQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJtYXQtbWRjLXNlbGVjdC12YWx1ZS10ZXh0IiwzLCJuZ1N3aXRjaCIsNCwibmdTd2l0Y2hDYXNlIl0sWzEsIm1hdC1tZGMtc2VsZWN0LWFycm93LXdyYXBwZXIiXSxbMSwibWF0LW1kYy1zZWxlY3QtYXJyb3ciXSxbInZpZXdCb3giLCIwIDAgMjQgMjQiLCJ3aWR0aCIsIjI0cHgiLCJoZWlnaHQiLCIyNHB4IiwiZm9jdXNhYmxlIiwiZmFsc2UiXSxbImQiLCJNNyAxMGw1IDUgNS01eiJdLFsiY2RrLWNvbm5lY3RlZC1vdmVybGF5IiwiIiwiY2RrQ29ubmVjdGVkT3ZlcmxheUxvY2tQb3NpdGlvbiIsIiIsImNka0Nvbm5lY3RlZE92ZXJsYXlIYXNCYWNrZHJvcCIsIiIsImNka0Nvbm5lY3RlZE92ZXJsYXlCYWNrZHJvcENsYXNzIiwiY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AiLDMsImNka0Nvbm5lY3RlZE92ZXJsYXlQYW5lbENsYXNzIiwiY2RrQ29ubmVjdGVkT3ZlcmxheVNjcm9sbFN0cmF0ZWd5IiwiY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbiIsImNka0Nvbm5lY3RlZE92ZXJsYXlPcGVuIiwiY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9ucyIsImNka0Nvbm5lY3RlZE92ZXJsYXlXaWR0aCIsImJhY2tkcm9wQ2xpY2siLCJhdHRhY2giLCJkZXRhY2giXSxbMSwibWF0LW1kYy1zZWxlY3QtcGxhY2Vob2xkZXIiLCJtYXQtbWRjLXNlbGVjdC1taW4tbGluZSJdLFsxLCJtYXQtbWRjLXNlbGVjdC12YWx1ZS10ZXh0IiwzLCJuZ1N3aXRjaCJdLFsiY2xhc3MiLCJtYXQtbWRjLXNlbGVjdC1taW4tbGluZSIsNCwibmdTd2l0Y2hEZWZhdWx0Il0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJtYXQtbWRjLXNlbGVjdC1taW4tbGluZSJdLFsicm9sZSIsImxpc3Rib3giLCJ0YWJpbmRleCIsIi0xIiwzLCJuZ0NsYXNzIiwia2V5ZG93biJdLFsicGFuZWwiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihmbihIeWUpLGYoMCwiZGl2IiwwLDEpLEEoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLnRvZ2dsZSgpfSksZigzLCJkaXYiLDIpLFMoNCxGeWUsMiwxLCJzcGFuIiwzKSxTKDUsQnllLDMsMiwic3BhbiIsNCksZygpLGYoNiwiZGl2Iiw1KSg3LCJkaXYiLDYpLHFuKCksZig4LCJzdmciLDcpLGsoOSwicGF0aCIsOCksZygpKCkoKSgpLFMoMTAsVnllLDMsOSwibmctdGVtcGxhdGUiLDkpLEEoImJhY2tkcm9wQ2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkuY2xvc2UoKX0pKCJhdHRhY2giLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uQXR0YWNoZWQoKX0pKCJkZXRhY2giLGZ1bmN0aW9uKCl7cmV0dXJuIGkuY2xvc2UoKX0pKSwyJmUpe2xldCByPXN0KDEpO0JlKCJhcmlhLW93bnMiLGkucGFuZWxPcGVuP2kuaWQrIi1wYW5lbCI6bnVsbCksdigzKSxiKCJuZ1N3aXRjaCIsaS5lbXB0eSksQmUoImlkIixpLl92YWx1ZUlkKSx2KDEpLGIoIm5nU3dpdGNoQ2FzZSIsITApLHYoMSksYigibmdTd2l0Y2hDYXNlIiwhMSksdig1KSxiKCJjZGtDb25uZWN0ZWRPdmVybGF5UGFuZWxDbGFzcyIsaS5fb3ZlcmxheVBhbmVsQ2xhc3MpKCJjZGtDb25uZWN0ZWRPdmVybGF5U2Nyb2xsU3RyYXRlZ3kiLGkuX3Njcm9sbFN0cmF0ZWd5KSgiY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbiIsaS5fcHJlZmVycmVkT3ZlcmxheU9yaWdpbnx8cikoImNka0Nvbm5lY3RlZE92ZXJsYXlPcGVuIixpLnBhbmVsT3BlbikoImNka0Nvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbnMiLGkuX3Bvc2l0aW9ucykoImNka0Nvbm5lY3RlZE92ZXJsYXlXaWR0aCIsaS5fb3ZlcmxheVdpZHRoKX19LGRlcGVuZGVuY2llczpbd24sbXIsa3IsZHUsVnUsTWRdLHN0eWxlczpbJy5tZGMtbWVudS1zdXJmYWNle2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWF4LXdpZHRoOmNhbGMoMTAwdncgLSAzMnB4KTttYXgtd2lkdGg6dmFyKC0tbWRjLW1lbnUtbWF4LXdpZHRoLCBjYWxjKDEwMHZ3IC0gMzJweCkpO21heC1oZWlnaHQ6Y2FsYygxMDB2aCAtIDMycHgpO21heC1oZWlnaHQ6dmFyKC0tbWRjLW1lbnUtbWF4LWhlaWdodCwgY2FsYygxMDB2aCAtIDMycHgpKTttYXJnaW46MDtwYWRkaW5nOjA7dHJhbnNmb3JtOnNjYWxlKDEpO3RyYW5zZm9ybS1vcmlnaW46dG9wIGxlZnQ7b3BhY2l0eTowO292ZXJmbG93OmF1dG87d2lsbC1jaGFuZ2U6dHJhbnNmb3JtLG9wYWNpdHk7ei1pbmRleDo4O2JvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6dmFyKC0tbWRjLXNoYXBlLW1lZGl1bSwgNHB4KTt0cmFuc2Zvcm0tb3JpZ2luLWxlZnQ6dG9wIGxlZnQ7dHJhbnNmb3JtLW9yaWdpbi1yaWdodDp0b3AgcmlnaHR9Lm1kYy1tZW51LXN1cmZhY2U6Zm9jdXN7b3V0bGluZTpub25lfS5tZGMtbWVudS1zdXJmYWNlLS1hbmltYXRpbmctb3BlbntkaXNwbGF5OmlubGluZS1ibG9jazt0cmFuc2Zvcm06c2NhbGUoMC44KTtvcGFjaXR5OjB9Lm1kYy1tZW51LXN1cmZhY2UtLW9wZW57ZGlzcGxheTppbmxpbmUtYmxvY2s7dHJhbnNmb3JtOnNjYWxlKDEpO29wYWNpdHk6MX0ubWRjLW1lbnUtc3VyZmFjZS0tYW5pbWF0aW5nLWNsb3NlZHtkaXNwbGF5OmlubGluZS1ibG9jaztvcGFjaXR5OjB9W2Rpcj1ydGxdIC5tZGMtbWVudS1zdXJmYWNlLC5tZGMtbWVudS1zdXJmYWNlW2Rpcj1ydGxde3RyYW5zZm9ybS1vcmlnaW4tbGVmdDp0b3AgcmlnaHQ7dHJhbnNmb3JtLW9yaWdpbi1yaWdodDp0b3AgbGVmdH0ubWRjLW1lbnUtc3VyZmFjZS0tYW5jaG9ye3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OnZpc2libGV9Lm1kYy1tZW51LXN1cmZhY2UtLWZpeGVke3Bvc2l0aW9uOmZpeGVkfS5tZGMtbWVudS1zdXJmYWNlLS1mdWxsd2lkdGh7d2lkdGg6MTAwJX0ubWF0LW1kYy1zZWxlY3R7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTAwJTtvdXRsaW5lOm5vbmV9Lm1hdC1tZGMtc2VsZWN0LXRyaWdnZXJ7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Y3Vyc29yOnBvaW50ZXI7cG9zaXRpb246cmVsYXRpdmU7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCV9Lm1hdC1tZGMtc2VsZWN0LWRpc2FibGVkIC5tYXQtbWRjLXNlbGVjdC10cmlnZ2Vyey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpkZWZhdWx0fS5tYXQtbWRjLXNlbGVjdC12YWx1ZXt3aWR0aDoxMDAlO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0ubWF0LW1kYy1zZWxlY3QtdmFsdWUtdGV4dHt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Lm1hdC1tZGMtc2VsZWN0LWFycm93LXdyYXBwZXJ7aGVpZ2h0OjI0cHg7ZmxleC1zaHJpbms6MDtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtbWRjLXNlbGVjdC1hcnJvdy13cmFwcGVye3RyYW5zZm9ybTp0cmFuc2xhdGVZKC04cHgpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1kYy10ZXh0LWZpZWxkLS1uby1sYWJlbCAubWF0LW1kYy1zZWxlY3QtYXJyb3ctd3JhcHBlcnt0cmFuc2Zvcm06bm9uZX0ubWF0LW1kYy1zZWxlY3QtYXJyb3d7d2lkdGg6MTBweDtoZWlnaHQ6NXB4O3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLXNlbGVjdC1hcnJvdyBzdmd7ZmlsbDpjdXJyZW50Q29sb3I7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC01MCUpfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZGMtc2VsZWN0LWFycm93IHN2Z3tmaWxsOkNhbnZhc1RleHR9Lm1hdC1tZGMtc2VsZWN0LWRpc2FibGVkIC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZGMtc2VsZWN0LWFycm93IHN2Z3tmaWxsOkdyYXlUZXh0fS5tZGMtbWVudS1zdXJmYWNlLm1hdC1tZGMtc2VsZWN0LXBhbmVse3dpZHRoOjEwMCU7bWF4LWhlaWdodDoyNzVweDtwb3NpdGlvbjpzdGF0aWM7b3V0bGluZTowO21hcmdpbjowO3BhZGRpbmc6OHB4IDA7bGlzdC1zdHlsZS10eXBlOm5vbmV9Lm1kYy1tZW51LXN1cmZhY2UubWF0LW1kYy1zZWxlY3QtcGFuZWw6Zm9jdXN7b3V0bGluZTpub25lfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1kYy1tZW51LXN1cmZhY2UubWF0LW1kYy1zZWxlY3QtcGFuZWx7b3V0bGluZTpzb2xpZCAxcHh9LmNkay1vdmVybGF5LXBhbmU6bm90KC5tYXQtbWRjLXNlbGVjdC1wYW5lbC1hYm92ZSkgLm1kYy1tZW51LXN1cmZhY2UubWF0LW1kYy1zZWxlY3QtcGFuZWx7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjA7dHJhbnNmb3JtLW9yaWdpbjp0b3AgY2VudGVyfS5tYXQtbWRjLXNlbGVjdC1wYW5lbC1hYm92ZSAubWRjLW1lbnUtc3VyZmFjZS5tYXQtbWRjLXNlbGVjdC1wYW5lbHtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDt0cmFuc2Zvcm0tb3JpZ2luOmJvdHRvbSBjZW50ZXJ9Lm1hdC1tZGMtc2VsZWN0LXBsYWNlaG9sZGVye3RyYW5zaXRpb246Y29sb3IgNDAwbXMgMTMzLjMzMzMzMzMzMzNtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1tZGMtc2VsZWN0LXBsYWNlaG9sZGVye3RyYW5zaXRpb246bm9uZX0ubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LW1kYy1zZWxlY3QtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgwLDAsMCwwKTstd2Via2l0LXRleHQtZmlsbC1jb2xvcjpyZ2JhKDAsMCwwLDApO3RyYW5zaXRpb246bm9uZTtkaXNwbGF5OmJsb2NrfS5tYXQtbWRjLWZvcm0tZmllbGQtdHlwZS1tYXQtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LW1kYy1mbG9hdGluZy1sYWJlbHttYXgtd2lkdGg6Y2FsYygxMDAlIC0gMThweCl9Lm1hdC1tZGMtZm9ybS1maWVsZC10eXBlLW1hdC1zZWxlY3QubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3Zle21heC13aWR0aDpjYWxjKDEwMCUgLyAwLjc1IC0gMjRweCl9Lm1hdC1tZGMtZm9ybS1maWVsZC10eXBlLW1hdC1zZWxlY3QubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaHttYXgtd2lkdGg6Y2FsYygxMDAlIC0gNjBweCl9Lm1hdC1tZGMtZm9ybS1maWVsZC10eXBlLW1hdC1zZWxlY3QubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tZGMtdGV4dC1maWVsZC0tbGFiZWwtZmxvYXRpbmcgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoe21heC13aWR0aDpjYWxjKDEwMCUgLSAyNHB4KX0ubWF0LW1kYy1zZWxlY3QtbWluLWxpbmU6ZW1wdHk6OmJlZm9yZXtjb250ZW50OiIgIjt3aGl0ZS1zcGFjZTpwcmU7d2lkdGg6MXB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Zpc2liaWxpdHk6aGlkZGVufSddLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W1V5ZS50cmFuc2Zvcm1QYW5lbF19LGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksWGE9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe3Byb3ZpZGVyczpbV3llXSxpbXBvcnRzOltEZSxEbyxtZyxkbixJYyxRdixtZyxkbl19KSxufSkoKTtmdW5jdGlvbiBReWUobix0KXsxJm4mJihHdCgwKSxmKDEsImRpdiIsMSksVCgyLCIgVGhlcmUgaXMgYSBkaWZmZXJlbmNlIGJldHdlZW4gRGVmYXVsdCAtIChFbmFibGVkL0Rpc2FibGVkKSBhbmQgKEVuYWJsZWQvRGlzYWJsZWQpICIpLGcoKSxmKDMsImRpdiIsMSksVCg0LCIgT25seSBmbGFncyB3aXRoIG5vbiBkZWZhdWx0IHZhbHVlcyBhcmUgc2VudCB0byB0aGUgYmFja2VuZC4gIiksZygpLFd0KCkpfWZ1bmN0aW9uIFp5ZShuLHQpe2lmKDEmbiYmKEd0KDApLGYoMSwiZGl2IiwxKSxUKDIpLGcoKSxXdCgpKSwyJm4pe2xldCBlPXcoKTt2KDIpLFZlKCcgRmVhdHVyZSBGbGFncyBhcmUgZmlsdGVyZWQgdG8gb25seSBzaG93IGZlYXR1cmVzIGNvbnRhaW5pbmcgIicsZS5zaG93RmxhZ3NGaWx0ZXIsJyIgJyl9fWZ1bmN0aW9uIEt5ZShuLHQpezEmbiYmKGYoMCwic3VwIiwxMSksVCgxLCIxIiksZygpKX1mdW5jdGlvbiBKeWUobix0KXsxJm4mJmhpKDApfWZ1bmN0aW9uICR5ZShuLHQpe2lmKDEmbil7bGV0IGU9VGUoKTtmKDAsIm1hdC1zZWxlY3QiLDEyKSxBKCJzZWxlY3Rpb25DaGFuZ2UiLGZ1bmN0aW9uKHIpe25lKGUpO2xldCBvPXcoKS4kaW1wbGljaXQ7cmV0dXJuIGllKHcoKS5mbGFnQ2hhbmdlZC5lbWl0KHtmbGFnOm8uZmxhZyxzdGF0dXM6ci52YWx1ZX0pKX0pLGYoMSwibWF0LW9wdGlvbiIsMTMpLFQoMiksZygpLGYoMywibWF0LW9wdGlvbiIsMTQpLFQoNCwiRW5hYmxlZCIpLGcoKSxmKDUsIm1hdC1vcHRpb24iLDE1KSxUKDYsIkRpc2FibGVkIiksZygpKCl9aWYoMiZuKXtsZXQgZT13KCkuJGltcGxpY2l0LGk9dygpO2IoInZhbHVlIixlLnN0YXR1cyksdigyKSxWZSgiIERlZmF1bHQgIixpLmZvcm1hdEZsYWdWYWx1ZShlLmRlZmF1bHRWYWx1ZSksIiAiKX19ZnVuY3Rpb24gZXhlKG4sdCl7aWYoMSZuJiYoZigwLCJ0ZCIpLFQoMSksZygpKSwyJm4pe2xldCBlPXcoKS4kaW1wbGljaXQsaT13KCk7digxKSxWZSgiVW5zdXBwb3J0ZWQgQnkgVUkgIixpLmZvcm1hdEZsYWdWYWx1ZShlLnZhbHVlKSwiIil9fWZ1bmN0aW9uIHR4ZShuLHQpe2lmKDEmbiYmKEd0KDApLGYoMSwidHIiKSgyLCJ0ZCIpKDMsImRpdiIpLFQoNCksUyg1LEt5ZSwyLDAsInN1cCIsNyksZygpKCksUyg2LEp5ZSwxLDAsIm5nLWNvbnRhaW5lciIsOCksUyg3LCR5ZSw3LDIsIm5nLXRlbXBsYXRlIixudWxsLDksanQpLFMoOSxleGUsMiwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwxMCxqdCksZygpLFd0KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT1zdCg4KSxyPXN0KDEwKSxvPXcoKTt2KDQpLFZlKCIgIixlLmZsYWcsIiAiKSx2KDEpLGIoIm5nSWYiLGUuc2VuZFRvU2VydmVyV2hlbk92ZXJyaWRkZW4pLHYoMSksYigibmdJZiIsby5pc0VkaXRhYmxlKGUpKSgibmdJZlRoZW4iLGkpKCJuZ0lmRWxzZSIscil9fWZ1bmN0aW9uIG54ZShuLHQpezEmbiYmKGYoMCwiZGl2IiwxMSksVCgxLCIgMS4gU2VudCB0byBzZXJ2ZXIgd2hlbiBvdmVycmlkZGVuICIpLGcoKSl9dmFyIGhFLEFxPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmhhc0ZsYWdzU2VudFRvU2VydmVyPSExLHRoaXMuZmxhZ0NoYW5nZWQ9bmV3IEYsdGhpcy5hbGxGbGFnc1Jlc2V0PW5ldyBGfXNlcmlhbGl6ZUZsYWdWYWx1ZShlKXtyZXR1cm4hMD09PWU/IkVuYWJsZWQiOiExPT09ZT8iRGlzYWJsZWQiOm51bGw9PWU/Im51bGwiOkFycmF5LmlzQXJyYXkoZSk/SlNPTi5zdHJpbmdpZnkoZSk6ZS50b1N0cmluZygpfWlzRWRpdGFibGUoZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZS5kZWZhdWx0VmFsdWV9Zm9ybWF0RmxhZ1ZhbHVlKGUpe2xldCBpPXRoaXMuc2VyaWFsaXplRmxhZ1ZhbHVlKGUpO3JldHVybiAwPT09aS5sZW5ndGg/IiI6YC0gJHtpfWB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbImZlYXR1cmUtZmxhZy1kaWFsb2ctY29tcG9uZW50Il1dLGlucHV0czp7ZmVhdHVyZUZsYWdTdGF0dXNlczoiZmVhdHVyZUZsYWdTdGF0dXNlcyIsaGFzRmxhZ3NTZW50VG9TZXJ2ZXI6Imhhc0ZsYWdzU2VudFRvU2VydmVyIixzaG93RmxhZ3NGaWx0ZXI6InNob3dGbGFnc0ZpbHRlciJ9LG91dHB1dHM6e2ZsYWdDaGFuZ2VkOiJmbGFnQ2hhbmdlZCIsYWxsRmxhZ3NSZXNldDoiYWxsRmxhZ3NSZXNldCJ9LGRlY2xzOjEyLHZhcnM6NCxjb25zdHM6W1sxLCJzY3JvbGxpbmctcGFnZSJdLFsxLCJtZXNzYWdlIl0sWzEsIndhcm5pbmciXSxbNCwibmdJZiJdLFsxLCJmZWF0dXJlLWZsYWctdGFibGUiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJtYXQtYnV0dG9uIiwiIiwzLCJjbGljayJdLFsiY2xhc3MiLCJub3RlLTEiLDQsIm5nSWYiXSxbNCwibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXSxbInNlbGVjdEJsb2NrIiwiIl0sWyJ1bnN1cHBvcnRlZEJsb2NrIiwiIl0sWzEsIm5vdGUtMSJdLFszLCJ2YWx1ZSIsInNlbGVjdGlvbkNoYW5nZSJdLFsidmFsdWUiLCJkZWZhdWx0Il0sWyJ2YWx1ZSIsImVuYWJsZWQiXSxbInZhbHVlIiwiZGlzYWJsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihmKDAsImRpdiIsMCkoMSwiZGl2IiwxKSgyLCJoMiIsMiksVCgzLCJXQVJOSU5HOiBFWFBFUklNRU5UQUwgRkVBVFVSRVMgQUhFQUQhIiksZygpLFQoNCwiIEJ5IGVuYWJsaW5nIHRoZXNlIGZlYXR1cmVzLCB5b3UgY291bGQgcHV0IHRoZSBhcHBsaWNhdGlvbiBpbiBhbiB1bnVzYWJsZSBzdGF0ZSBvciBleHBvc2UgeW91cnNlbGYgdG8gdW50ZXN0ZWQgZmVhdHVyZXMgb3IgcG90ZW50aWFsIGJ1Z3MuICIpLGcoKSxTKDUsUXllLDUsMCwibmctY29udGFpbmVyIiwzKSxTKDYsWnllLDMsMSwibmctY29udGFpbmVyIiwzKSxmKDcsInRhYmxlIiw0KSxTKDgsdHhlLDExLDUsIm5nLWNvbnRhaW5lciIsNSksZygpLGYoOSwiYnV0dG9uIiw2KSxBKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5hbGxGbGFnc1Jlc2V0LmVtaXQoKX0pLFQoMTAsIlJlc2V0IEFsbCIpLGcoKSxTKDExLG54ZSwyLDAsImRpdiIsNyksZygpKSwyJmUmJih2KDUpLGIoIm5nSWYiLGkuaGFzRmxhZ3NTZW50VG9TZXJ2ZXIpLHYoMSksYigibmdJZiIsaS5zaG93RmxhZ3NGaWx0ZXIpLHYoMiksYigibmdGb3JPZiIsaS5mZWF0dXJlRmxhZ1N0YXR1c2VzKSx2KDMpLGIoIm5nSWYiLGkuaGFzRmxhZ3NTZW50VG9TZXJ2ZXIpKX0sZGVwZW5kZW5jaWVzOltubixOZSxraSxXdSxqYV0sc3R5bGVzOlsiLm1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVde21hcmdpbi1ib3R0b206MTZweH0ubWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV0gICAud2FybmluZ1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2Y0NDMzNn0ubm90ZS0xW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZmY5ODAwfS5zY3JvbGxpbmctcGFnZVtfbmdjb250ZW50LSVDT01QJV17bWF4LWhlaWdodDo5MHZofS5mZWF0dXJlLWZsYWctdGFibGVbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9Il19KSxufSkoKSxScT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLnNob3dGbGFnc0ZpbHRlciQ9dGhpcy5zdG9yZS5zZWxlY3Qoc3YpLnBpcGUocShpPT5pLnNob3dGbGFncz8udG9Mb3dlckNhc2UoKSkpLHRoaXMuaGFzRmxhZ3NTZW50VG9TZXJ2ZXIkPXRoaXMuc3RvcmUuc2VsZWN0KGZoKS5waXBlKHEoaT0+T2JqZWN0LnZhbHVlcyhpKS5zb21lKHI9PnIuc2VuZFRvU2VydmVyV2hlbk92ZXJyaWRkZW4pKSksdGhpcy5mZWF0dXJlRmxhZ3MkPXRoaXMuc3RvcmUuc2VsZWN0KHN2KS5waXBlKEl0KHRoaXMuc3RvcmUuc2VsZWN0KEM2KSx0aGlzLnN0b3JlLnNlbGVjdChmaCksdGhpcy5zaG93RmxhZ3NGaWx0ZXIkKSxxKChbaSxyLG8sYV0pPT5PYmplY3QuZW50cmllcyhyKS5maWx0ZXIoKFtzXSk9PiFhfHxzLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoYSkpLm1hcCgoW3MsbF0pPT57bGV0IGM9ZnVuY3Rpb24obix0KXtyZXR1cm4gdm9pZCAwPT09dFtuXT8iZGVmYXVsdCI6dFtuXT8iZW5hYmxlZCI6ImRpc2FibGVkIn0ocyxpKTtyZXR1cm57ZmxhZzpzLGRlZmF1bHRWYWx1ZTpsLHN0YXR1czpjLHNlbmRUb1NlcnZlcldoZW5PdmVycmlkZGVuOm9bc10uc2VuZFRvU2VydmVyV2hlbk92ZXJyaWRkZW59fSkpKX1vbkZsYWdDaGFuZ2VkKHtmbGFnOmUsc3RhdHVzOml9KXtzd2l0Y2goaSl7Y2FzZSJkZWZhdWx0Ijp0aGlzLnN0b3JlLmRpc3BhdGNoKHh1KHtmbGFnczpbZV19KSk7YnJlYWs7Y2FzZSJlbmFibGVkIjp0aGlzLnN0b3JlLmRpc3BhdGNoKHloKHtmbGFnczp7W2VdOiEwfX0pKTticmVhaztjYXNlImRpc2FibGVkIjp0aGlzLnN0b3JlLmRpc3BhdGNoKHloKHtmbGFnczp7W2VdOiExfX0pKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiRmxhZyBjaGFuZ2VkIHRvIGludmFsaWQgc3RhdHVzIil9fW9uQWxsRmxhZ3NSZXNldCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goUWYoKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoSWUpKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJmZWF0dXJlLWZsYWctZGlhbG9nIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsImZlYXR1cmVGbGFnU3RhdHVzZXMiLCJoYXNGbGFnc1NlbnRUb1NlcnZlciIsInNob3dGbGFnc0ZpbHRlciIsImZsYWdDaGFuZ2VkIiwiYWxsRmxhZ3NSZXNldCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGYoMCwiZmVhdHVyZS1mbGFnLWRpYWxvZy1jb21wb25lbnQiLDApLEEoImZsYWdDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkZsYWdDaGFuZ2VkKG8pfSkoImFsbEZsYWdzUmVzZXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25BbGxGbGFnc1Jlc2V0KCl9KSxVKDEsImFzeW5jIiksVSgyLCJhc3luYyIpLFUoMywiYXN5bmMiKSxnKCkpLDImZSYmYigiZmVhdHVyZUZsYWdTdGF0dXNlcyIsRygxLDMsaS5mZWF0dXJlRmxhZ3MkKSkoImhhc0ZsYWdzU2VudFRvU2VydmVyIixHKDIsNSxpLmhhc0ZsYWdzU2VudFRvU2VydmVyJCkpKCJzaG93RmxhZ3NGaWx0ZXIiLEcoMyw3LGkuc2hvd0ZsYWdzRmlsdGVyJCkpfSxkZXBlbmRlbmNpZXM6W0FxLGN0XSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxQcT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5zdG9yZT1lLHRoaXMuZGlhbG9nPWksdGhpcy5mZWF0dXJlRmxhZ0RpYWxvZ1R5cGU9UnEsdGhpcy5zaG93RmVhdHVyZUZsYWdzJD10aGlzLnN0b3JlLnNlbGVjdChFNiksdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBFZX1uZ09uSW5pdCgpe3RoaXMuc2hvd0ZlYXR1cmVGbGFncyQucGlwZShpdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoZT0+e2lmKGUpcmV0dXJuIHRoaXMuZmVhdHVyZUZsYWdzRGlhbG9nPXRoaXMuZGlhbG9nLm9wZW4odGhpcy5mZWF0dXJlRmxhZ0RpYWxvZ1R5cGUpLHZvaWQgdGhpcy5mZWF0dXJlRmxhZ3NEaWFsb2cuYWZ0ZXJDbG9zZWQoKS5waXBlKGl0KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgoKT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goeHUoe2ZsYWdzOlsic2hvd0ZsYWdzIl19KSksc2V0VGltZW91dCgoKT0+e3dpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKX0sMSl9KX0pfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhJZSksQyh5cykpfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbImZlYXR1cmUtZmxhZy1tb2RhbC10cmlnZ2VyIl1dLGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7fSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxzeGU9WyJyb3V0ZUNvbnRhaW5lciJdLGtxPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9ZX1uZ09uQ2hhbmdlcyhlKXtsZXQgaT1lLmFjdGl2ZU5nQ29tcG9uZW50O2lmKGkmJih0aGlzLnJvdXRlQ29udGFpbmVyLmNsZWFyKCksaS5jdXJyZW50VmFsdWUpKXtsZXQgcj10aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShpLmN1cnJlbnRWYWx1ZSk7dGhpcy5yb3V0ZUNvbnRhaW5lci5jcmVhdGVDb21wb25lbnQocil9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGhvKSl9LG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1sicm91dGVyLW91dGxldC1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZVZShzeGUsNyxlaSksMiZlKXtsZXQgcjtiZShyPXZlKCkpJiYoaS5yb3V0ZUNvbnRhaW5lcj1yLmZpcnN0KX19LGlucHV0czp7YWN0aXZlTmdDb21wb25lbnQ6ImFjdGl2ZU5nQ29tcG9uZW50In0sZmVhdHVyZXM6W3F0XSxkZWNsczoyLHZhcnM6MCxjb25zdHM6W1sicm91dGVDb250YWluZXIiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJmhpKDAsbnVsbCwwKX0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksT3E9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuc3RvcmU9ZSx0aGlzLnJlZ2lzdHJ5PWksdGhpcy5hY3RpdmVOZ0NvbXBvbmVudCQ9SW4oW3RoaXMuc3RvcmUuc2VsZWN0KEhvKSx0aGlzLnN0b3JlLnNlbGVjdChROCldKS5waXBlKHEoKFtyLG9dKT0+ciYmKG51bGw9PT1vfHxWbyhyLG8pKT90aGlzLnJlZ2lzdHJ5LmdldE5nQ29tcG9uZW50QnlSb3V0ZUtpbmQoci5yb3V0ZUtpbmQpOm51bGwpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhJZSksQyhSbCkpfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbInJvdXRlci1vdXRsZXQiXV0sZGVjbHM6Mix2YXJzOjMsY29uc3RzOltbMywiYWN0aXZlTmdDb21wb25lbnQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihrKDAsInJvdXRlci1vdXRsZXQtY29tcG9uZW50IiwwKSxVKDEsImFzeW5jIikpLDImZSYmYigiYWN0aXZlTmdDb21wb25lbnQiLEcoMSwxLGkuYWN0aXZlTmdDb21wb25lbnQkKSl9LGRlcGVuZGVuY2llczpba3EsY3RdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLEZxPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7ZS5zZWxlY3QoUGwpLnN1YnNjcmliZShpPT57ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCJkYXJrLW1vZGUiLGkpfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoSWUpKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJkYXJrLW1vZGUtc3VwcG9ydGVyIl1dLGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7fSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFNnPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5BQ1RJVkVfUExVR0lOPTBdPSJBQ1RJVkVfUExVR0lOIn0oU2d8fChTZz17fSkpLFNnKSkoKSxOcT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuZGVlcExpbmtlcj1lLHRoaXMub25WYWx1ZUNoYW5nZT1uZXcgRix0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IEVlLHRoaXMub25IYXNoQ2hhbmdlPUVpKHdpbmRvdywicG9wc3RhdGUiLHtwYXNzaXZlOiEwfSkucGlwZShpdCh0aGlzLm5nVW5zdWJzY3JpYmUpKX1uZ09uSW5pdCgpe3RoaXMub25IYXNoQ2hhbmdlLnN1YnNjcmliZSgoKT0+e2xldCBlPXRoaXMuZGVlcExpbmtlci5nZXRQbHVnaW5JZCgpO2UhPT10aGlzLmFjdGl2ZVBsdWdpbklkJiZ0aGlzLm9uVmFsdWVDaGFuZ2UuZW1pdCh7cHJvcDpTZy5BQ1RJVkVfUExVR0lOLHZhbHVlOmV9KX0pfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX1uZ09uQ2hhbmdlcyhlKXtpZihlLmFjdGl2ZVBsdWdpbklkKXtsZXQgaT1lLmFjdGl2ZVBsdWdpbklkO3RoaXMuZGVlcExpbmtlci5zZXRQbHVnaW5JZChudWxsPT09aS5jdXJyZW50VmFsdWU/IiI6aS5jdXJyZW50VmFsdWUse2RlZmF1bHRWYWx1ZToiIix1c2VMb2NhdGlvblJlcGxhY2U6bnVsbD09PWkucHJldmlvdXNWYWx1ZXx8aS5maXJzdENoYW5nZX0pfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhndSkpfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbImhhc2gtc3RvcmFnZS1jb21wb25lbnQiXV0saW5wdXRzOnthY3RpdmVQbHVnaW5JZDoiYWN0aXZlUGx1Z2luSWQifSxvdXRwdXRzOntvblZhbHVlQ2hhbmdlOiJvblZhbHVlQ2hhbmdlIn0sZmVhdHVyZXM6W3F0XSxkZWNsczowLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe30sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksTHE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5hY3RpdmVQbHVnaW5JZCQ9dGhpcy5zdG9yZS5waXBlKHVuKFpvKSl9b25WYWx1ZUNoYW5nZWQoZSl7ZS5wcm9wPT09U2cuQUNUSVZFX1BMVUdJTiYmdGhpcy5zdG9yZS5kaXNwYXRjaChoUyh7cGx1Z2luOmUudmFsdWV9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoSWUpKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJoYXNoLXN0b3JhZ2UiXV0sZGVjbHM6Mix2YXJzOjMsY29uc3RzOltbMywiYWN0aXZlUGx1Z2luSWQiLCJvblZhbHVlQ2hhbmdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZigwLCJoYXNoLXN0b3JhZ2UtY29tcG9uZW50IiwwKSxBKCJvblZhbHVlQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblZhbHVlQ2hhbmdlZChvKX0pLFUoMSwiYXN5bmMiKSxnKCkpLDImZSYmYigiYWN0aXZlUGx1Z2luSWQiLEcoMSwxLGkuYWN0aXZlUGx1Z2luSWQkKSl9LGRlcGVuZGVuY2llczpbTnEsY3RdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksaHhlPVsiKiJdO2Z1bmN0aW9uIHJ5KG4pe3JldHVybiBmdW5jdGlvbigpe2lmKHZvaWQgMD09PWhFJiYoaEU9bnVsbCx0eXBlb2Ygd2luZG93PCJ1Iikpe2xldCBuPXdpbmRvdzt2b2lkIDAhPT1uLnRydXN0ZWRUeXBlcyYmKGhFPW4udHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeSgiYW5ndWxhciNjb21wb25lbnRzIix7Y3JlYXRlSFRNTDp0PT50fSkpfXJldHVybiBoRX0oKT8uY3JlYXRlSFRNTChuKXx8bn1mdW5jdGlvbiBCcShuKXtyZXR1cm4gRXJyb3IoYFVuYWJsZSB0byBmaW5kIGljb24gd2l0aCB0aGUgbmFtZSAiJHtufSJgKX1mdW5jdGlvbiBWcShuKXtyZXR1cm4gRXJyb3IoYFRoZSBVUkwgcHJvdmlkZWQgdG8gTWF0SWNvblJlZ2lzdHJ5IHdhcyBub3QgdHJ1c3RlZCBhcyBhIHJlc291cmNlIFVSTCB2aWEgQW5ndWxhcidzIERvbVNhbml0aXplci4gQXR0ZW1wdGVkIFVSTCB3YXMgIiR7bn0iLmApfWZ1bmN0aW9uIEhxKG4pe3JldHVybiBFcnJvcihgVGhlIGxpdGVyYWwgcHJvdmlkZWQgdG8gTWF0SWNvblJlZ2lzdHJ5IHdhcyBub3QgdHJ1c3RlZCBhcyBzYWZlIEhUTUwgYnkgQW5ndWxhcidzIERvbVNhbml0aXplci4gQXR0ZW1wdGVkIGxpdGVyYWwgd2FzICIke259Ii5gKX12YXIgU2Q9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMudXJsPXQsdGhpcy5zdmdUZXh0PWUsdGhpcy5vcHRpb25zPWl9fSxFZz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8pe3RoaXMuX2h0dHBDbGllbnQ9ZSx0aGlzLl9zYW5pdGl6ZXI9aSx0aGlzLl9lcnJvckhhbmRsZXI9byx0aGlzLl9zdmdJY29uQ29uZmlncz1uZXcgTWFwLHRoaXMuX2ljb25TZXRDb25maWdzPW5ldyBNYXAsdGhpcy5fY2FjaGVkSWNvbnNCeVVybD1uZXcgTWFwLHRoaXMuX2luUHJvZ3Jlc3NVcmxGZXRjaGVzPW5ldyBNYXAsdGhpcy5fZm9udENzc0NsYXNzZXNCeUFsaWFzPW5ldyBNYXAsdGhpcy5fcmVzb2x2ZXJzPVtdLHRoaXMuX2RlZmF1bHRGb250U2V0Q2xhc3M9WyJtYXRlcmlhbC1pY29ucyIsIm1hdC1saWdhdHVyZS1mb250Il0sdGhpcy5fZG9jdW1lbnQ9cn1hZGRTdmdJY29uKGUsaSxyKXtyZXR1cm4gdGhpcy5hZGRTdmdJY29uSW5OYW1lc3BhY2UoIiIsZSxpLHIpfWFkZFN2Z0ljb25MaXRlcmFsKGUsaSxyKXtyZXR1cm4gdGhpcy5hZGRTdmdJY29uTGl0ZXJhbEluTmFtZXNwYWNlKCIiLGUsaSxyKX1hZGRTdmdJY29uSW5OYW1lc3BhY2UoZSxpLHIsbyl7cmV0dXJuIHRoaXMuX2FkZFN2Z0ljb25Db25maWcoZSxpLG5ldyBTZChyLG51bGwsbykpfWFkZFN2Z0ljb25SZXNvbHZlcihlKXtyZXR1cm4gdGhpcy5fcmVzb2x2ZXJzLnB1c2goZSksdGhpc31hZGRTdmdJY29uTGl0ZXJhbEluTmFtZXNwYWNlKGUsaSxyLG8pe2xldCBhPXRoaXMuX3Nhbml0aXplci5zYW5pdGl6ZShVci5IVE1MLHIpO2lmKCFhKXRocm93IEhxKHIpO2xldCBzPXJ5KGEpO3JldHVybiB0aGlzLl9hZGRTdmdJY29uQ29uZmlnKGUsaSxuZXcgU2QoIiIscyxvKSl9YWRkU3ZnSWNvblNldChlLGkpe3JldHVybiB0aGlzLmFkZFN2Z0ljb25TZXRJbk5hbWVzcGFjZSgiIixlLGkpfWFkZFN2Z0ljb25TZXRMaXRlcmFsKGUsaSl7cmV0dXJuIHRoaXMuYWRkU3ZnSWNvblNldExpdGVyYWxJbk5hbWVzcGFjZSgiIixlLGkpfWFkZFN2Z0ljb25TZXRJbk5hbWVzcGFjZShlLGkscil7cmV0dXJuIHRoaXMuX2FkZFN2Z0ljb25TZXRDb25maWcoZSxuZXcgU2QoaSxudWxsLHIpKX1hZGRTdmdJY29uU2V0TGl0ZXJhbEluTmFtZXNwYWNlKGUsaSxyKXtsZXQgbz10aGlzLl9zYW5pdGl6ZXIuc2FuaXRpemUoVXIuSFRNTCxpKTtpZighbyl0aHJvdyBIcShpKTtsZXQgYT1yeShvKTtyZXR1cm4gdGhpcy5fYWRkU3ZnSWNvblNldENvbmZpZyhlLG5ldyBTZCgiIixhLHIpKX1yZWdpc3RlckZvbnRDbGFzc0FsaWFzKGUsaT1lKXtyZXR1cm4gdGhpcy5fZm9udENzc0NsYXNzZXNCeUFsaWFzLnNldChlLGkpLHRoaXN9Y2xhc3NOYW1lRm9yRm9udEFsaWFzKGUpe3JldHVybiB0aGlzLl9mb250Q3NzQ2xhc3Nlc0J5QWxpYXMuZ2V0KGUpfHxlfXNldERlZmF1bHRGb250U2V0Q2xhc3MoLi4uZSl7cmV0dXJuIHRoaXMuX2RlZmF1bHRGb250U2V0Q2xhc3M9ZSx0aGlzfWdldERlZmF1bHRGb250U2V0Q2xhc3MoKXtyZXR1cm4gdGhpcy5fZGVmYXVsdEZvbnRTZXRDbGFzc31nZXRTdmdJY29uRnJvbVVybChlKXtsZXQgaT10aGlzLl9zYW5pdGl6ZXIuc2FuaXRpemUoVXIuUkVTT1VSQ0VfVVJMLGUpO2lmKCFpKXRocm93IFZxKGUpO2xldCByPXRoaXMuX2NhY2hlZEljb25zQnlVcmwuZ2V0KGkpO3JldHVybiByPyR0KG1FKHIpKTp0aGlzLl9sb2FkU3ZnSWNvbkZyb21Db25maWcobmV3IFNkKGUsbnVsbCkpLnBpcGUoRHQobz0+dGhpcy5fY2FjaGVkSWNvbnNCeVVybC5zZXQoaSxvKSkscShvPT5tRShvKSkpfWdldE5hbWVkU3ZnSWNvbihlLGk9IiIpe2xldCByPXpxKGksZSksbz10aGlzLl9zdmdJY29uQ29uZmlncy5nZXQocik7aWYobylyZXR1cm4gdGhpcy5fZ2V0U3ZnRnJvbUNvbmZpZyhvKTtpZihvPXRoaXMuX2dldEljb25Db25maWdGcm9tUmVzb2x2ZXJzKGksZSksbylyZXR1cm4gdGhpcy5fc3ZnSWNvbkNvbmZpZ3Muc2V0KHIsbyksdGhpcy5fZ2V0U3ZnRnJvbUNvbmZpZyhvKTtsZXQgYT10aGlzLl9pY29uU2V0Q29uZmlncy5nZXQoaSk7cmV0dXJuIGE/dGhpcy5fZ2V0U3ZnRnJvbUljb25TZXRDb25maWdzKGUsYSk6X2woQnEocikpfW5nT25EZXN0cm95KCl7dGhpcy5fcmVzb2x2ZXJzPVtdLHRoaXMuX3N2Z0ljb25Db25maWdzLmNsZWFyKCksdGhpcy5faWNvblNldENvbmZpZ3MuY2xlYXIoKSx0aGlzLl9jYWNoZWRJY29uc0J5VXJsLmNsZWFyKCl9X2dldFN2Z0Zyb21Db25maWcoZSl7cmV0dXJuIGUuc3ZnVGV4dD8kdChtRSh0aGlzLl9zdmdFbGVtZW50RnJvbUNvbmZpZyhlKSkpOnRoaXMuX2xvYWRTdmdJY29uRnJvbUNvbmZpZyhlKS5waXBlKHEoaT0+bUUoaSkpKX1fZ2V0U3ZnRnJvbUljb25TZXRDb25maWdzKGUsaSl7bGV0IHI9dGhpcy5fZXh0cmFjdEljb25XaXRoTmFtZUZyb21BbnlTZXQoZSxpKTtyZXR1cm4gcj8kdChyKTpDbyhpLmZpbHRlcihhPT4hYS5zdmdUZXh0KS5tYXAoYT0+dGhpcy5fbG9hZFN2Z0ljb25TZXRGcm9tQ29uZmlnKGEpLnBpcGUoY28ocz0+e2xldCBjPWBMb2FkaW5nIGljb24gc2V0IFVSTDogJHt0aGlzLl9zYW5pdGl6ZXIuc2FuaXRpemUoVXIuUkVTT1VSQ0VfVVJMLGEudXJsKX0gZmFpbGVkOiAke3MubWVzc2FnZX1gO3JldHVybiB0aGlzLl9lcnJvckhhbmRsZXIuaGFuZGxlRXJyb3IobmV3IEVycm9yKGMpKSwkdChudWxsKX0pKSkpLnBpcGUocSgoKT0+e2xldCBhPXRoaXMuX2V4dHJhY3RJY29uV2l0aE5hbWVGcm9tQW55U2V0KGUsaSk7aWYoIWEpdGhyb3cgQnEoZSk7cmV0dXJuIGF9KSl9X2V4dHJhY3RJY29uV2l0aE5hbWVGcm9tQW55U2V0KGUsaSl7Zm9yKGxldCByPWkubGVuZ3RoLTE7cj49MDtyLS0pe2xldCBvPWlbcl07aWYoby5zdmdUZXh0JiZvLnN2Z1RleHQudG9TdHJpbmcoKS5pbmRleE9mKGUpPi0xKXtsZXQgYT10aGlzLl9zdmdFbGVtZW50RnJvbUNvbmZpZyhvKSxzPXRoaXMuX2V4dHJhY3RTdmdJY29uRnJvbVNldChhLGUsby5vcHRpb25zKTtpZihzKXJldHVybiBzfX1yZXR1cm4gbnVsbH1fbG9hZFN2Z0ljb25Gcm9tQ29uZmlnKGUpe3JldHVybiB0aGlzLl9mZXRjaEljb24oZSkucGlwZShEdChpPT5lLnN2Z1RleHQ9aSkscSgoKT0+dGhpcy5fc3ZnRWxlbWVudEZyb21Db25maWcoZSkpKX1fbG9hZFN2Z0ljb25TZXRGcm9tQ29uZmlnKGUpe3JldHVybiBlLnN2Z1RleHQ/JHQobnVsbCk6dGhpcy5fZmV0Y2hJY29uKGUpLnBpcGUoRHQoaT0+ZS5zdmdUZXh0PWkpKX1fZXh0cmFjdFN2Z0ljb25Gcm9tU2V0KGUsaSxyKXtsZXQgbz1lLnF1ZXJ5U2VsZWN0b3IoYFtpZD0iJHtpfSJdYCk7aWYoIW8pcmV0dXJuIG51bGw7bGV0IGE9by5jbG9uZU5vZGUoITApO2lmKGEucmVtb3ZlQXR0cmlidXRlKCJpZCIpLCJzdmciPT09YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXJldHVybiB0aGlzLl9zZXRTdmdBdHRyaWJ1dGVzKGEscik7aWYoInN5bWJvbCI9PT1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpcmV0dXJuIHRoaXMuX3NldFN2Z0F0dHJpYnV0ZXModGhpcy5fdG9TdmdFbGVtZW50KGEpLHIpO2xldCBzPXRoaXMuX3N2Z0VsZW1lbnRGcm9tU3RyaW5nKHJ5KCI8c3ZnPjwvc3ZnPiIpKTtyZXR1cm4gcy5hcHBlbmRDaGlsZChhKSx0aGlzLl9zZXRTdmdBdHRyaWJ1dGVzKHMscil9X3N2Z0VsZW1lbnRGcm9tU3RyaW5nKGUpe2xldCBpPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpO2kuaW5uZXJIVE1MPWU7bGV0IHI9aS5xdWVyeVNlbGVjdG9yKCJzdmciKTtpZighcil0aHJvdyBFcnJvcigiPHN2Zz4gdGFnIG5vdCBmb3VuZCIpO3JldHVybiByfV90b1N2Z0VsZW1lbnQoZSl7bGV0IGk9dGhpcy5fc3ZnRWxlbWVudEZyb21TdHJpbmcocnkoIjxzdmc+PC9zdmc+IikpLHI9ZS5hdHRyaWJ1dGVzO2ZvcihsZXQgbz0wO288ci5sZW5ndGg7bysrKXtsZXR7bmFtZTphLHZhbHVlOnN9PXJbb107ImlkIiE9PWEmJmkuc2V0QXR0cmlidXRlKGEscyl9Zm9yKGxldCBvPTA7bzxlLmNoaWxkTm9kZXMubGVuZ3RoO28rKyllLmNoaWxkTm9kZXNbb10ubm9kZVR5cGU9PT10aGlzLl9kb2N1bWVudC5FTEVNRU5UX05PREUmJmkuYXBwZW5kQ2hpbGQoZS5jaGlsZE5vZGVzW29dLmNsb25lTm9kZSghMCkpO3JldHVybiBpfV9zZXRTdmdBdHRyaWJ1dGVzKGUsaSl7cmV0dXJuIGUuc2V0QXR0cmlidXRlKCJmaXQiLCIiKSxlLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IiwiMTAwJSIpLGUuc2V0QXR0cmlidXRlKCJ3aWR0aCIsIjEwMCUiKSxlLnNldEF0dHJpYnV0ZSgicHJlc2VydmVBc3BlY3RSYXRpbyIsInhNaWRZTWlkIG1lZXQiKSxlLnNldEF0dHJpYnV0ZSgiZm9jdXNhYmxlIiwiZmFsc2UiKSxpJiZpLnZpZXdCb3gmJmUuc2V0QXR0cmlidXRlKCJ2aWV3Qm94IixpLnZpZXdCb3gpLGV9X2ZldGNoSWNvbihlKXtsZXR7dXJsOmksb3B0aW9uczpyfT1lLG89cj8ud2l0aENyZWRlbnRpYWxzPz8hMTtpZighdGhpcy5faHR0cENsaWVudCl0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgSHR0cENsaWVudCBwcm92aWRlciBmb3IgdXNlIHdpdGggQW5ndWxhciBNYXRlcmlhbCBpY29ucy4gUGxlYXNlIGluY2x1ZGUgdGhlIEh0dHBDbGllbnRNb2R1bGUgZnJvbSBAYW5ndWxhci9jb21tb24vaHR0cCBpbiB5b3VyIGFwcCBpbXBvcnRzLiIpO2lmKG51bGw9PWkpdGhyb3cgRXJyb3IoYENhbm5vdCBmZXRjaCBpY29uIGZyb20gVVJMICIke2l9Ii5gKTtsZXQgYT10aGlzLl9zYW5pdGl6ZXIuc2FuaXRpemUoVXIuUkVTT1VSQ0VfVVJMLGkpO2lmKCFhKXRocm93IFZxKGkpO2xldCBzPXRoaXMuX2luUHJvZ3Jlc3NVcmxGZXRjaGVzLmdldChhKTtpZihzKXJldHVybiBzO2xldCBsPXRoaXMuX2h0dHBDbGllbnQuZ2V0KGEse3Jlc3BvbnNlVHlwZToidGV4dCIsd2l0aENyZWRlbnRpYWxzOm99KS5waXBlKHEoYz0+cnkoYykpLGZ1bmN0aW9uKG4pe3JldHVybiBZdCgodCxlKT0+e3RyeXt0LnN1YnNjcmliZShlKX1maW5hbGx5e2UuYWRkKG4pfX0pfSgoKT0+dGhpcy5faW5Qcm9ncmVzc1VybEZldGNoZXMuZGVsZXRlKGEpKSxUYSgpKTtyZXR1cm4gdGhpcy5faW5Qcm9ncmVzc1VybEZldGNoZXMuc2V0KGEsbCksbH1fYWRkU3ZnSWNvbkNvbmZpZyhlLGkscil7cmV0dXJuIHRoaXMuX3N2Z0ljb25Db25maWdzLnNldCh6cShlLGkpLHIpLHRoaXN9X2FkZFN2Z0ljb25TZXRDb25maWcoZSxpKXtsZXQgcj10aGlzLl9pY29uU2V0Q29uZmlncy5nZXQoZSk7cmV0dXJuIHI/ci5wdXNoKGkpOnRoaXMuX2ljb25TZXRDb25maWdzLnNldChlLFtpXSksdGhpc31fc3ZnRWxlbWVudEZyb21Db25maWcoZSl7aWYoIWUuc3ZnRWxlbWVudCl7bGV0IGk9dGhpcy5fc3ZnRWxlbWVudEZyb21TdHJpbmcoZS5zdmdUZXh0KTt0aGlzLl9zZXRTdmdBdHRyaWJ1dGVzKGksZS5vcHRpb25zKSxlLnN2Z0VsZW1lbnQ9aX1yZXR1cm4gZS5zdmdFbGVtZW50fV9nZXRJY29uQ29uZmlnRnJvbVJlc29sdmVycyhlLGkpe2ZvcihsZXQgcj0wO3I8dGhpcy5fcmVzb2x2ZXJzLmxlbmd0aDtyKyspe2xldCBvPXRoaXMuX3Jlc29sdmVyc1tyXShpLGUpO2lmKG8pcmV0dXJuIF94ZShvKT9uZXcgU2Qoby51cmwsbnVsbCxvLm9wdGlvbnMpOm5ldyBTZChvLG51bGwpfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhtaCw4KSxPKG5oKSxPKE50LDgpLE8obGEpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKTtmdW5jdGlvbiBtRShuKXtyZXR1cm4gbi5jbG9uZU5vZGUoITApfWZ1bmN0aW9uIHpxKG4sdCl7cmV0dXJuIG4rIjoiK3R9ZnVuY3Rpb24gX3hlKG4pe3JldHVybiEoIW4udXJsfHwhbi5vcHRpb25zKX1uZXcga2EsbmV3IGlkLG5ldyBrYSxuZXcga2E7dmFyIGJ4ZT1LbyhjbGFzc3tjb25zdHJ1Y3RvcihuKXt0aGlzLl9lbGVtZW50UmVmPW59fSksdnhlPW5ldyB0ZSgiTUFUX0lDT05fREVGQVVMVF9PUFRJT05TIikseXhlPW5ldyB0ZSgibWF0LWljb24tbG9jYXRpb24iLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7bGV0IG49JG4oTnQpLHQ9bj9uLmxvY2F0aW9uOm51bGw7cmV0dXJue2dldFBhdGhuYW1lOigpPT50P3QucGF0aG5hbWUrdC5zZWFyY2g6IiJ9fX0pLFVxPVsiY2xpcC1wYXRoIiwiY29sb3ItcHJvZmlsZSIsInNyYyIsImN1cnNvciIsImZpbGwiLCJmaWx0ZXIiLCJtYXJrZXIiLCJtYXJrZXItc3RhcnQiLCJtYXJrZXItbWlkIiwibWFya2VyLWVuZCIsIm1hc2siLCJzdHJva2UiXSxDeGU9VXEubWFwKG49PmBbJHtufV1gKS5qb2luKCIsICIpLE14ZT0vXnVybFwoWyciXT8jKC4qPylbJyJdP1wpJC8sYm49KCgpPT57Y2xhc3MgbiBleHRlbmRzIGJ4ZXtnZXQgaW5saW5lKCl7cmV0dXJuIHRoaXMuX2lubGluZX1zZXQgaW5saW5lKGUpe3RoaXMuX2lubGluZT12dChlKX1nZXQgc3ZnSWNvbigpe3JldHVybiB0aGlzLl9zdmdJY29ufXNldCBzdmdJY29uKGUpe2UhPT10aGlzLl9zdmdJY29uJiYoZT90aGlzLl91cGRhdGVTdmdJY29uKGUpOnRoaXMuX3N2Z0ljb24mJnRoaXMuX2NsZWFyU3ZnRWxlbWVudCgpLHRoaXMuX3N2Z0ljb249ZSl9Z2V0IGZvbnRTZXQoKXtyZXR1cm4gdGhpcy5fZm9udFNldH1zZXQgZm9udFNldChlKXtsZXQgaT10aGlzLl9jbGVhbnVwRm9udFZhbHVlKGUpO2khPT10aGlzLl9mb250U2V0JiYodGhpcy5fZm9udFNldD1pLHRoaXMuX3VwZGF0ZUZvbnRJY29uQ2xhc3NlcygpKX1nZXQgZm9udEljb24oKXtyZXR1cm4gdGhpcy5fZm9udEljb259c2V0IGZvbnRJY29uKGUpe2xldCBpPXRoaXMuX2NsZWFudXBGb250VmFsdWUoZSk7aSE9PXRoaXMuX2ZvbnRJY29uJiYodGhpcy5fZm9udEljb249aSx0aGlzLl91cGRhdGVGb250SWNvbkNsYXNzZXMoKSl9Y29uc3RydWN0b3IoZSxpLHIsbyxhLHMpe3N1cGVyKGUpLHRoaXMuX2ljb25SZWdpc3RyeT1pLHRoaXMuX2xvY2F0aW9uPW8sdGhpcy5fZXJyb3JIYW5kbGVyPWEsdGhpcy5faW5saW5lPSExLHRoaXMuX3ByZXZpb3VzRm9udFNldENsYXNzPVtdLHRoaXMuX2N1cnJlbnRJY29uRmV0Y2g9RW4uRU1QVFkscyYmKHMuY29sb3ImJih0aGlzLmNvbG9yPXRoaXMuZGVmYXVsdENvbG9yPXMuY29sb3IpLHMuZm9udFNldCYmKHRoaXMuZm9udFNldD1zLmZvbnRTZXQpKSxyfHxlLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsInRydWUiKX1fc3BsaXRJY29uTmFtZShlKXtpZighZSlyZXR1cm5bIiIsIiJdO2xldCBpPWUuc3BsaXQoIjoiKTtzd2l0Y2goaS5sZW5ndGgpe2Nhc2UgMTpyZXR1cm5bIiIsaVswXV07Y2FzZSAyOnJldHVybiBpO2RlZmF1bHQ6dGhyb3cgRXJyb3IoYEludmFsaWQgaWNvbiBuYW1lOiAiJHtlfSJgKX19bmdPbkluaXQoKXt0aGlzLl91cGRhdGVGb250SWNvbkNsYXNzZXMoKX1uZ0FmdGVyVmlld0NoZWNrZWQoKXtsZXQgZT10aGlzLl9lbGVtZW50c1dpdGhFeHRlcm5hbFJlZmVyZW5jZXM7aWYoZSYmZS5zaXplKXtsZXQgaT10aGlzLl9sb2NhdGlvbi5nZXRQYXRobmFtZSgpO2khPT10aGlzLl9wcmV2aW91c1BhdGgmJih0aGlzLl9wcmV2aW91c1BhdGg9aSx0aGlzLl9wcmVwZW5kUGF0aFRvUmVmZXJlbmNlcyhpKSl9fW5nT25EZXN0cm95KCl7dGhpcy5fY3VycmVudEljb25GZXRjaC51bnN1YnNjcmliZSgpLHRoaXMuX2VsZW1lbnRzV2l0aEV4dGVybmFsUmVmZXJlbmNlcyYmdGhpcy5fZWxlbWVudHNXaXRoRXh0ZXJuYWxSZWZlcmVuY2VzLmNsZWFyKCl9X3VzaW5nRm9udEljb24oKXtyZXR1cm4hdGhpcy5zdmdJY29ufV9zZXRTdmdFbGVtZW50KGUpe3RoaXMuX2NsZWFyU3ZnRWxlbWVudCgpO2xldCBpPXRoaXMuX2xvY2F0aW9uLmdldFBhdGhuYW1lKCk7dGhpcy5fcHJldmlvdXNQYXRoPWksdGhpcy5fY2FjaGVDaGlsZHJlbldpdGhFeHRlcm5hbFJlZmVyZW5jZXMoZSksdGhpcy5fcHJlcGVuZFBhdGhUb1JlZmVyZW5jZXMoaSksdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKGUpfV9jbGVhclN2Z0VsZW1lbnQoKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsaT1lLmNoaWxkTm9kZXMubGVuZ3RoO2Zvcih0aGlzLl9lbGVtZW50c1dpdGhFeHRlcm5hbFJlZmVyZW5jZXMmJnRoaXMuX2VsZW1lbnRzV2l0aEV4dGVybmFsUmVmZXJlbmNlcy5jbGVhcigpO2ktLTspe2xldCByPWUuY2hpbGROb2Rlc1tpXTsoMSE9PXIubm9kZVR5cGV8fCJzdmciPT09ci5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSYmci5yZW1vdmUoKX19X3VwZGF0ZUZvbnRJY29uQ2xhc3Nlcygpe2lmKCF0aGlzLl91c2luZ0ZvbnRJY29uKCkpcmV0dXJuO2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxpPSh0aGlzLmZvbnRTZXQ/dGhpcy5faWNvblJlZ2lzdHJ5LmNsYXNzTmFtZUZvckZvbnRBbGlhcyh0aGlzLmZvbnRTZXQpLnNwbGl0KC8gKy8pOnRoaXMuX2ljb25SZWdpc3RyeS5nZXREZWZhdWx0Rm9udFNldENsYXNzKCkpLmZpbHRlcihyPT5yLmxlbmd0aD4wKTt0aGlzLl9wcmV2aW91c0ZvbnRTZXRDbGFzcy5mb3JFYWNoKHI9PmUuY2xhc3NMaXN0LnJlbW92ZShyKSksaS5mb3JFYWNoKHI9PmUuY2xhc3NMaXN0LmFkZChyKSksdGhpcy5fcHJldmlvdXNGb250U2V0Q2xhc3M9aSx0aGlzLmZvbnRJY29uIT09dGhpcy5fcHJldmlvdXNGb250SWNvbkNsYXNzJiYhaS5pbmNsdWRlcygibWF0LWxpZ2F0dXJlLWZvbnQiKSYmKHRoaXMuX3ByZXZpb3VzRm9udEljb25DbGFzcyYmZS5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX3ByZXZpb3VzRm9udEljb25DbGFzcyksdGhpcy5mb250SWNvbiYmZS5jbGFzc0xpc3QuYWRkKHRoaXMuZm9udEljb24pLHRoaXMuX3ByZXZpb3VzRm9udEljb25DbGFzcz10aGlzLmZvbnRJY29uKX1fY2xlYW51cEZvbnRWYWx1ZShlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/ZS50cmltKCkuc3BsaXQoIiAiKVswXTplfV9wcmVwZW5kUGF0aFRvUmVmZXJlbmNlcyhlKXtsZXQgaT10aGlzLl9lbGVtZW50c1dpdGhFeHRlcm5hbFJlZmVyZW5jZXM7aSYmaS5mb3JFYWNoKChyLG8pPT57ci5mb3JFYWNoKGE9PntvLnNldEF0dHJpYnV0ZShhLm5hbWUsYHVybCgnJHtlfSMke2EudmFsdWV9JylgKX0pfSl9X2NhY2hlQ2hpbGRyZW5XaXRoRXh0ZXJuYWxSZWZlcmVuY2VzKGUpe2xldCBpPWUucXVlcnlTZWxlY3RvckFsbChDeGUpLHI9dGhpcy5fZWxlbWVudHNXaXRoRXh0ZXJuYWxSZWZlcmVuY2VzPXRoaXMuX2VsZW1lbnRzV2l0aEV4dGVybmFsUmVmZXJlbmNlc3x8bmV3IE1hcDtmb3IobGV0IG89MDtvPGkubGVuZ3RoO28rKylVcS5mb3JFYWNoKGE9PntsZXQgcz1pW29dLGw9cy5nZXRBdHRyaWJ1dGUoYSksYz1sP2wubWF0Y2goTXhlKTpudWxsO2lmKGMpe2xldCBkPXIuZ2V0KHMpO2R8fChkPVtdLHIuc2V0KHMsZCkpLGQucHVzaCh7bmFtZTphLHZhbHVlOmNbMV19KX19KX1fdXBkYXRlU3ZnSWNvbihlKXtpZih0aGlzLl9zdmdOYW1lc3BhY2U9bnVsbCx0aGlzLl9zdmdOYW1lPW51bGwsdGhpcy5fY3VycmVudEljb25GZXRjaC51bnN1YnNjcmliZSgpLGUpe2xldFtpLHJdPXRoaXMuX3NwbGl0SWNvbk5hbWUoZSk7aSYmKHRoaXMuX3N2Z05hbWVzcGFjZT1pKSxyJiYodGhpcy5fc3ZnTmFtZT1yKSx0aGlzLl9jdXJyZW50SWNvbkZldGNoPXRoaXMuX2ljb25SZWdpc3RyeS5nZXROYW1lZFN2Z0ljb24ocixpKS5waXBlKEx0KDEpKS5zdWJzY3JpYmUobz0+dGhpcy5fc2V0U3ZnRWxlbWVudChvKSxvPT57dGhpcy5fZXJyb3JIYW5kbGVyLmhhbmRsZUVycm9yKG5ldyBFcnJvcihgRXJyb3IgcmV0cmlldmluZyBpY29uICR7aX06JHtyfSEgJHtvLm1lc3NhZ2V9YCkpfSl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKHhlKSxDKEVnKSxNbygiYXJpYS1oaWRkZW4iKSxDKHl4ZSksQyhsYSksQyh2eGUsOCkpfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1pY29uIl1dLGhvc3RBdHRyczpbInJvbGUiLCJpbWciLDEsIm1hdC1pY29uIiwibm90cmFuc2xhdGUiXSxob3N0VmFyczo4LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmKEJlKCJkYXRhLW1hdC1pY29uLXR5cGUiLGkuX3VzaW5nRm9udEljb24oKT8iZm9udCI6InN2ZyIpKCJkYXRhLW1hdC1pY29uLW5hbWUiLGkuX3N2Z05hbWV8fGkuZm9udEljb24pKCJkYXRhLW1hdC1pY29uLW5hbWVzcGFjZSIsaS5fc3ZnTmFtZXNwYWNlfHxpLmZvbnRTZXQpKCJmb250SWNvbiIsaS5fdXNpbmdGb250SWNvbigpP2kuZm9udEljb246bnVsbCksbnQoIm1hdC1pY29uLWlubGluZSIsaS5pbmxpbmUpKCJtYXQtaWNvbi1uby1jb2xvciIsInByaW1hcnkiIT09aS5jb2xvciYmImFjY2VudCIhPT1pLmNvbG9yJiYid2FybiIhPT1pLmNvbG9yKSl9LGlucHV0czp7Y29sb3I6ImNvbG9yIixpbmxpbmU6ImlubGluZSIsc3ZnSWNvbjoic3ZnSWNvbiIsZm9udFNldDoiZm9udFNldCIsZm9udEljb246ImZvbnRJY29uIn0sZXhwb3J0QXM6WyJtYXRJY29uIl0sZmVhdHVyZXM6W1hlXSxuZ0NvbnRlbnRTZWxlY3RvcnM6aHhlLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZm4oKSxUdCgwKSl9LHN0eWxlczpbIi5tYXQtaWNvbnstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmlsbDpjdXJyZW50Q29sb3I7aGVpZ2h0OjI0cHg7d2lkdGg6MjRweDtvdmVyZmxvdzpoaWRkZW59Lm1hdC1pY29uLm1hdC1pY29uLWlubGluZXtmb250LXNpemU6aW5oZXJpdDtoZWlnaHQ6aW5oZXJpdDtsaW5lLWhlaWdodDppbmhlcml0O3dpZHRoOmluaGVyaXR9Lm1hdC1pY29uLm1hdC1saWdhdHVyZS1mb250W2ZvbnRJY29uXTo6YmVmb3Jle2NvbnRlbnQ6YXR0cihmb250SWNvbil9W2Rpcj1ydGxdIC5tYXQtaWNvbi1ydGwtbWlycm9ye3RyYW5zZm9ybTpzY2FsZSgtMSwgMSl9Lm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbntkaXNwbGF5OmJsb2NrfS5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29ue21hcmdpbjphdXRvfSJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGFpPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1IKHtpbXBvcnRzOltkbixkbl19KSxufSkoKSx3eGU9WyIqIixbWyJtYXQtdG9vbGJhci1yb3ciXV1dLFN4ZT1bIioiLCJtYXQtdG9vbGJhci1yb3ciXSxFeGU9S28oY2xhc3N7Y29uc3RydWN0b3Iobil7dGhpcy5fZWxlbWVudFJlZj1ufX0pLFR4ZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVkaXI9TWUoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LXRvb2xiYXItcm93Il1dLGhvc3RBdHRyczpbMSwibWF0LXRvb2xiYXItcm93Il0sZXhwb3J0QXM6WyJtYXRUb29sYmFyUm93Il19KSxufSkoKSxqcT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgRXhle2NvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcihlKSx0aGlzLl9wbGF0Zm9ybT1pLHRoaXMuX2RvY3VtZW50PXJ9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiYodGhpcy5fY2hlY2tUb29sYmFyTWl4ZWRNb2RlcygpLHRoaXMuX3Rvb2xiYXJSb3dzLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT50aGlzLl9jaGVja1Rvb2xiYXJNaXhlZE1vZGVzKCkpKX1fY2hlY2tUb29sYmFyTWl4ZWRNb2Rlcygpe319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyh4ZSksQyhWbiksQyhOdCkpfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC10b29sYmFyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGUsaSxyKXtpZigxJmUmJkJuKHIsVHhlLDUpLDImZSl7bGV0IG87YmUobz12ZSgpKSYmKGkuX3Rvb2xiYXJSb3dzPW8pfX0saG9zdEF0dHJzOlsxLCJtYXQtdG9vbGJhciJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZudCgibWF0LXRvb2xiYXItbXVsdGlwbGUtcm93cyIsaS5fdG9vbGJhclJvd3MubGVuZ3RoPjApKCJtYXQtdG9vbGJhci1zaW5nbGUtcm93IiwwPT09aS5fdG9vbGJhclJvd3MubGVuZ3RoKX0saW5wdXRzOntjb2xvcjoiY29sb3IifSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXSxmZWF0dXJlczpbWGVdLG5nQ29udGVudFNlbGVjdG9yczpTeGUsZGVjbHM6Mix2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihmbih3eGUpLFR0KDApLFR0KDEsMSkpfSxzdHlsZXM6WyIuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtdG9vbGJhcntvdXRsaW5lOnNvbGlkIDFweH0ubWF0LXRvb2xiYXIgLm1hdC1tZGMtYnV0dG9uLWJhc2UubWF0LXVudGhlbWVkey0tbWRjLXRleHQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6IGluaGVyaXQ7LS1tZGMtb3V0bGluZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6IGluaGVyaXR9Lm1hdC10b29sYmFyLXJvdywubWF0LXRvb2xiYXItc2luZ2xlLXJvd3tkaXNwbGF5OmZsZXg7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MCAxNnB4O3dpZHRoOjEwMCU7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3N7ZGlzcGxheTpmbGV4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47d2lkdGg6MTAwJX0iXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxHcT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9SCh7aW1wb3J0czpbZG4sZG5dfSksbn0pKCk7ZnVuY3Rpb24gWTIobil7cmV0dXJuIG4uc3RhdGUhPT1SZS5OT1RfTE9BREVEJiZuLnN0YXRlIT09UmUuTE9BRElOR312YXIgSXhlPWdyKGk3LHllKHgxLG49PlkyKG4pP3suLi5uLHNldHRpbmdzOnsuLi5uLnNldHRpbmdzLHJlbG9hZEVuYWJsZWQ6IW4uc2V0dGluZ3MucmVsb2FkRW5hYmxlZH19Om4pLHllKEMxLChuLHtwZXJpb2RJbk1zOnR9KT0+e2lmKCFZMihuKSlyZXR1cm4gbjtsZXQgZT10Pj0zZTQ/dDpuLnNldHRpbmdzLnJlbG9hZFBlcmlvZEluTXM7cmV0dXJuey4uLm4sc2V0dGluZ3M6ey4uLm4uc2V0dGluZ3MscmVsb2FkUGVyaW9kSW5NczplfX19KSx5ZShNMSwobix7c2l6ZTp0fSk9PntpZighWTIobikpcmV0dXJuIG47bGV0IGU9dD4wP3Q6bi5zZXR0aW5ncy5wYWdlU2l6ZTtyZXR1cm57Li4ubixzZXR0aW5nczp7Li4ubi5zZXR0aW5ncyxwYWdlU2l6ZTplfX19KSx5ZShocywobix7cGFydGlhbFNldHRpbmdzOnR9KT0+e2xldCBlPXt9O3JldHVybiBOdW1iZXIuaXNGaW5pdGUodC5wYWdlU2l6ZSkmJnQucGFnZVNpemU+MCYmKGUucGFnZVNpemU9TnVtYmVyKHQucGFnZVNpemUpKSwiYm9vbGVhbiI9PXR5cGVvZiB0LmF1dG9SZWxvYWQmJihlLnJlbG9hZEVuYWJsZWQ9dC5hdXRvUmVsb2FkKSxOdW1iZXIuaXNGaW5pdGUodC5hdXRvUmVsb2FkUGVyaW9kSW5NcykmJnQuYXV0b1JlbG9hZFBlcmlvZEluTXM+M2U0JiYoZS5yZWxvYWRQZXJpb2RJbk1zPU51bWJlcih0LmF1dG9SZWxvYWRQZXJpb2RJbk1zKSksey4uLm4sc2V0dGluZ3M6ey4uLm4uc2V0dGluZ3MsLi4uZX19fSkpO2Z1bmN0aW9uIFdxKG4sdCl7cmV0dXJuIEl4ZShuLHQpfXZhciBBeGU9WyJpbnB1dCJdLFJ4ZT1bImxhYmVsIl0sUHhlPVsiKiJdLFoyPW5ldyB0ZSgibWF0LWNoZWNrYm94LWRlZmF1bHQtb3B0aW9ucyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm57Y29sb3I6ImFjY2VudCIsY2xpY2tBY3Rpb246ImNoZWNrLWluZGV0ZXJtaW5hdGUifX19KTt2YXIga3hlPXtwcm92aWRlOlhyLHVzZUV4aXN0aW5nOlduKCgpPT54cyksbXVsdGk6ITB9LE94ZT0wLHFxPXtjb2xvcjoiYWNjZW50IixjbGlja0FjdGlvbjoiY2hlY2staW5kZXRlcm1pbmF0ZSJ9LEZ4ZT1EYyhLbyhnbyhhbyhjbGFzc3tjb25zdHJ1Y3RvcihuKXt0aGlzLl9lbGVtZW50UmVmPW59fSkpKSksTnhlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBGeGV7Z2V0IGlucHV0SWQoKXtyZXR1cm5gJHt0aGlzLmlkfHx0aGlzLl91bmlxdWVJZH0taW5wdXRgfWdldCByZXF1aXJlZCgpe3JldHVybiB0aGlzLl9yZXF1aXJlZH1zZXQgcmVxdWlyZWQoZSl7dGhpcy5fcmVxdWlyZWQ9dnQoZSl9Y29uc3RydWN0b3IoZSxpLHIsbyxhLHMsbCl7c3VwZXIoaSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9cix0aGlzLl9uZ1pvbmU9byx0aGlzLl9hbmltYXRpb25Nb2RlPXMsdGhpcy5fb3B0aW9ucz1sLHRoaXMuYXJpYUxhYmVsPSIiLHRoaXMuYXJpYUxhYmVsbGVkYnk9bnVsbCx0aGlzLmxhYmVsUG9zaXRpb249ImFmdGVyIix0aGlzLm5hbWU9bnVsbCx0aGlzLmNoYW5nZT1uZXcgRix0aGlzLmluZGV0ZXJtaW5hdGVDaGFuZ2U9bmV3IEYsdGhpcy5fb25Ub3VjaGVkPSgpPT57fSx0aGlzLl9jdXJyZW50QW5pbWF0aW9uQ2xhc3M9IiIsdGhpcy5fY3VycmVudENoZWNrU3RhdGU9MCx0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuPSgpPT57fSx0aGlzLl9jaGVja2VkPSExLHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuX2luZGV0ZXJtaW5hdGU9ITEsdGhpcy5fb3B0aW9ucz10aGlzLl9vcHRpb25zfHxxcSx0aGlzLmNvbG9yPXRoaXMuZGVmYXVsdENvbG9yPXRoaXMuX29wdGlvbnMuY29sb3J8fHFxLmNvbG9yLHRoaXMudGFiSW5kZXg9cGFyc2VJbnQoYSl8fDAsdGhpcy5pZD10aGlzLl91bmlxdWVJZD1gJHtlfSR7KytPeGV9YH1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9zeW5jSW5kZXRlcm1pbmF0ZSh0aGlzLl9pbmRldGVybWluYXRlKX1nZXQgY2hlY2tlZCgpe3JldHVybiB0aGlzLl9jaGVja2VkfXNldCBjaGVja2VkKGUpe2xldCBpPXZ0KGUpO2khPXRoaXMuY2hlY2tlZCYmKHRoaXMuX2NoZWNrZWQ9aSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfXNldCBkaXNhYmxlZChlKXtsZXQgaT12dChlKTtpIT09dGhpcy5kaXNhYmxlZCYmKHRoaXMuX2Rpc2FibGVkPWksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfWdldCBpbmRldGVybWluYXRlKCl7cmV0dXJuIHRoaXMuX2luZGV0ZXJtaW5hdGV9c2V0IGluZGV0ZXJtaW5hdGUoZSl7bGV0IGk9ZSE9dGhpcy5faW5kZXRlcm1pbmF0ZTt0aGlzLl9pbmRldGVybWluYXRlPXZ0KGUpLGkmJih0aGlzLl90cmFuc2l0aW9uQ2hlY2tTdGF0ZSh0aGlzLl9pbmRldGVybWluYXRlPzM6dGhpcy5jaGVja2VkPzE6MiksdGhpcy5pbmRldGVybWluYXRlQ2hhbmdlLmVtaXQodGhpcy5faW5kZXRlcm1pbmF0ZSkpLHRoaXMuX3N5bmNJbmRldGVybWluYXRlKHRoaXMuX2luZGV0ZXJtaW5hdGUpfV9pc1JpcHBsZURpc2FibGVkKCl7cmV0dXJuIHRoaXMuZGlzYWJsZVJpcHBsZXx8dGhpcy5kaXNhYmxlZH1fb25MYWJlbFRleHRDaGFuZ2UoKXt0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCl9d3JpdGVWYWx1ZShlKXt0aGlzLmNoZWNrZWQ9ISFlfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5fY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbj1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMuX29uVG91Y2hlZD1lfXNldERpc2FibGVkU3RhdGUoZSl7dGhpcy5kaXNhYmxlZD1lfV90cmFuc2l0aW9uQ2hlY2tTdGF0ZShlKXtsZXQgaT10aGlzLl9jdXJyZW50Q2hlY2tTdGF0ZSxyPXRoaXMuX2dldEFuaW1hdGlvblRhcmdldEVsZW1lbnQoKTtpZihpIT09ZSYmciYmKHRoaXMuX2N1cnJlbnRBbmltYXRpb25DbGFzcyYmci5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2N1cnJlbnRBbmltYXRpb25DbGFzcyksdGhpcy5fY3VycmVudEFuaW1hdGlvbkNsYXNzPXRoaXMuX2dldEFuaW1hdGlvbkNsYXNzRm9yQ2hlY2tTdGF0ZVRyYW5zaXRpb24oaSxlKSx0aGlzLl9jdXJyZW50Q2hlY2tTdGF0ZT1lLHRoaXMuX2N1cnJlbnRBbmltYXRpb25DbGFzcy5sZW5ndGg+MCkpe3IuY2xhc3NMaXN0LmFkZCh0aGlzLl9jdXJyZW50QW5pbWF0aW9uQ2xhc3MpO2xldCBvPXRoaXMuX2N1cnJlbnRBbmltYXRpb25DbGFzczt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntzZXRUaW1lb3V0KCgpPT57ci5jbGFzc0xpc3QucmVtb3ZlKG8pfSwxZTMpfSl9fV9lbWl0Q2hhbmdlRXZlbnQoKXt0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuKHRoaXMuY2hlY2tlZCksdGhpcy5jaGFuZ2UuZW1pdCh0aGlzLl9jcmVhdGVDaGFuZ2VFdmVudCh0aGlzLmNoZWNrZWQpKSx0aGlzLl9pbnB1dEVsZW1lbnQmJih0aGlzLl9pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5jaGVja2VkPXRoaXMuY2hlY2tlZCl9dG9nZ2xlKCl7dGhpcy5jaGVja2VkPSF0aGlzLmNoZWNrZWQsdGhpcy5fY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbih0aGlzLmNoZWNrZWQpfV9oYW5kbGVJbnB1dENsaWNrKCl7bGV0IGU9dGhpcy5fb3B0aW9ucz8uY2xpY2tBY3Rpb247dGhpcy5kaXNhYmxlZHx8Im5vb3AiPT09ZT8hdGhpcy5kaXNhYmxlZCYmIm5vb3AiPT09ZSYmKHRoaXMuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmNoZWNrZWQ9dGhpcy5jaGVja2VkLHRoaXMuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmluZGV0ZXJtaW5hdGU9dGhpcy5pbmRldGVybWluYXRlKToodGhpcy5pbmRldGVybWluYXRlJiYiY2hlY2siIT09ZSYmUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e3RoaXMuX2luZGV0ZXJtaW5hdGU9ITEsdGhpcy5pbmRldGVybWluYXRlQ2hhbmdlLmVtaXQodGhpcy5faW5kZXRlcm1pbmF0ZSl9KSx0aGlzLl9jaGVja2VkPSF0aGlzLl9jaGVja2VkLHRoaXMuX3RyYW5zaXRpb25DaGVja1N0YXRlKHRoaXMuX2NoZWNrZWQ/MToyKSx0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKSl9X29uSW50ZXJhY3Rpb25FdmVudChlKXtlLnN0b3BQcm9wYWdhdGlvbigpfV9vbkJsdXIoKXtQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57dGhpcy5fb25Ub3VjaGVkKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KX1fZ2V0QW5pbWF0aW9uQ2xhc3NGb3JDaGVja1N0YXRlVHJhbnNpdGlvbihlLGkpe2lmKCJOb29wQW5pbWF0aW9ucyI9PT10aGlzLl9hbmltYXRpb25Nb2RlKXJldHVybiIiO3N3aXRjaChlKXtjYXNlIDA6aWYoMT09PWkpcmV0dXJuIHRoaXMuX2FuaW1hdGlvbkNsYXNzZXMudW5jaGVja2VkVG9DaGVja2VkO2lmKDM9PWkpcmV0dXJuIHRoaXMuX2NoZWNrZWQ/dGhpcy5fYW5pbWF0aW9uQ2xhc3Nlcy5jaGVja2VkVG9JbmRldGVybWluYXRlOnRoaXMuX2FuaW1hdGlvbkNsYXNzZXMudW5jaGVja2VkVG9JbmRldGVybWluYXRlO2JyZWFrO2Nhc2UgMjpyZXR1cm4gMT09PWk/dGhpcy5fYW5pbWF0aW9uQ2xhc3Nlcy51bmNoZWNrZWRUb0NoZWNrZWQ6dGhpcy5fYW5pbWF0aW9uQ2xhc3Nlcy51bmNoZWNrZWRUb0luZGV0ZXJtaW5hdGU7Y2FzZSAxOnJldHVybiAyPT09aT90aGlzLl9hbmltYXRpb25DbGFzc2VzLmNoZWNrZWRUb1VuY2hlY2tlZDp0aGlzLl9hbmltYXRpb25DbGFzc2VzLmNoZWNrZWRUb0luZGV0ZXJtaW5hdGU7Y2FzZSAzOnJldHVybiAxPT09aT90aGlzLl9hbmltYXRpb25DbGFzc2VzLmluZGV0ZXJtaW5hdGVUb0NoZWNrZWQ6dGhpcy5fYW5pbWF0aW9uQ2xhc3Nlcy5pbmRldGVybWluYXRlVG9VbmNoZWNrZWR9cmV0dXJuIiJ9X3N5bmNJbmRldGVybWluYXRlKGUpe2xldCBpPXRoaXMuX2lucHV0RWxlbWVudDtpJiYoaS5uYXRpdmVFbGVtZW50LmluZGV0ZXJtaW5hdGU9ZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtjcygpfSxuLlx1MDI3NWRpcj1NZSh7dHlwZTpuLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKFVlKEF4ZSw1KSxVZShSeGUsNSksVWUoS2ksNSkpLDImZSl7bGV0IHI7YmUocj12ZSgpKSYmKGkuX2lucHV0RWxlbWVudD1yLmZpcnN0KSxiZShyPXZlKCkpJiYoaS5fbGFiZWxFbGVtZW50PXIuZmlyc3QpLGJlKHI9dmUoKSkmJihpLnJpcHBsZT1yLmZpcnN0KX19LGlucHV0czp7YXJpYUxhYmVsOlsiYXJpYS1sYWJlbCIsImFyaWFMYWJlbCJdLGFyaWFMYWJlbGxlZGJ5OlsiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYUxhYmVsbGVkYnkiXSxhcmlhRGVzY3JpYmVkYnk6WyJhcmlhLWRlc2NyaWJlZGJ5IiwiYXJpYURlc2NyaWJlZGJ5Il0saWQ6ImlkIixyZXF1aXJlZDoicmVxdWlyZWQiLGxhYmVsUG9zaXRpb246ImxhYmVsUG9zaXRpb24iLG5hbWU6Im5hbWUiLHZhbHVlOiJ2YWx1ZSIsY2hlY2tlZDoiY2hlY2tlZCIsZGlzYWJsZWQ6ImRpc2FibGVkIixpbmRldGVybWluYXRlOiJpbmRldGVybWluYXRlIn0sb3V0cHV0czp7Y2hhbmdlOiJjaGFuZ2UiLGluZGV0ZXJtaW5hdGVDaGFuZ2U6ImluZGV0ZXJtaW5hdGVDaGFuZ2UifSxmZWF0dXJlczpbWGVdfSksbn0pKCkseHM9KCgpPT57Y2xhc3MgbiBleHRlbmRzIE54ZXtjb25zdHJ1Y3RvcihlLGkscixvLGEscyl7c3VwZXIoIm1hdC1tZGMtY2hlY2tib3gtIixlLGkscixvLGEscyksdGhpcy5fYW5pbWF0aW9uQ2xhc3Nlcz17dW5jaGVja2VkVG9DaGVja2VkOiJtZGMtY2hlY2tib3gtLWFuaW0tdW5jaGVja2VkLWNoZWNrZWQiLHVuY2hlY2tlZFRvSW5kZXRlcm1pbmF0ZToibWRjLWNoZWNrYm94LS1hbmltLXVuY2hlY2tlZC1pbmRldGVybWluYXRlIixjaGVja2VkVG9VbmNoZWNrZWQ6Im1kYy1jaGVja2JveC0tYW5pbS1jaGVja2VkLXVuY2hlY2tlZCIsY2hlY2tlZFRvSW5kZXRlcm1pbmF0ZToibWRjLWNoZWNrYm94LS1hbmltLWNoZWNrZWQtaW5kZXRlcm1pbmF0ZSIsaW5kZXRlcm1pbmF0ZVRvQ2hlY2tlZDoibWRjLWNoZWNrYm94LS1hbmltLWluZGV0ZXJtaW5hdGUtY2hlY2tlZCIsaW5kZXRlcm1pbmF0ZVRvVW5jaGVja2VkOiJtZGMtY2hlY2tib3gtLWFuaW0taW5kZXRlcm1pbmF0ZS11bmNoZWNrZWQifX1mb2N1cygpe3RoaXMuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCl9X2NyZWF0ZUNoYW5nZUV2ZW50KGUpe2xldCBpPW5ldyBjbGFzc3t9O3JldHVybiBpLnNvdXJjZT10aGlzLGkuY2hlY2tlZD1lLGl9X2dldEFuaW1hdGlvblRhcmdldEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5faW5wdXRFbGVtZW50Py5uYXRpdmVFbGVtZW50fV9vbklucHV0Q2xpY2soKXtzdXBlci5faGFuZGxlSW5wdXRDbGljaygpfV9vblRvdWNoVGFyZ2V0Q2xpY2soKXtzdXBlci5faGFuZGxlSW5wdXRDbGljaygpLHRoaXMuZGlzYWJsZWR8fHRoaXMuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCl9X3ByZXZlbnRCdWJibGluZ0Zyb21MYWJlbChlKXtlLnRhcmdldCYmdGhpcy5fbGFiZWxFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZS50YXJnZXQpJiZlLnN0b3BQcm9wYWdhdGlvbigpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKHhlKSxDKFF0KSxDKG90KSxNbygidGFiaW5kZXgiKSxDKHBpLDgpLEMoWjIsOCkpfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1jaGVja2JveCJdXSxob3N0QXR0cnM6WzEsIm1hdC1tZGMtY2hlY2tib3giXSxob3N0VmFyczoxMixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJih3bygiaWQiLGkuaWQpLEJlKCJ0YWJpbmRleCIsbnVsbCkoImFyaWEtbGFiZWwiLG51bGwpKCJhcmlhLWxhYmVsbGVkYnkiLG51bGwpLG50KCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsIk5vb3BBbmltYXRpb25zIj09PWkuX2FuaW1hdGlvbk1vZGUpKCJtZGMtY2hlY2tib3gtLWRpc2FibGVkIixpLmRpc2FibGVkKSgibWF0LW1kYy1jaGVja2JveC1kaXNhYmxlZCIsaS5kaXNhYmxlZCkoIm1hdC1tZGMtY2hlY2tib3gtY2hlY2tlZCIsaS5jaGVja2VkKSl9LGlucHV0czp7ZGlzYWJsZVJpcHBsZToiZGlzYWJsZVJpcHBsZSIsY29sb3I6ImNvbG9yIix0YWJJbmRleDoidGFiSW5kZXgifSxleHBvcnRBczpbIm1hdENoZWNrYm94Il0sZmVhdHVyZXM6W1Z0KFtreGVdKSxYZV0sbmdDb250ZW50U2VsZWN0b3JzOlB4ZSxkZWNsczoxNSx2YXJzOjE5LGNvbnN0czpbWzEsIm1kYy1mb3JtLWZpZWxkIiwzLCJjbGljayJdLFsxLCJtZGMtY2hlY2tib3giXSxbImNoZWNrYm94IiwiIl0sWzEsIm1hdC1tZGMtY2hlY2tib3gtdG91Y2gtdGFyZ2V0IiwzLCJjbGljayJdLFsidHlwZSIsImNoZWNrYm94IiwxLCJtZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sIiwzLCJjaGVja2VkIiwiaW5kZXRlcm1pbmF0ZSIsImRpc2FibGVkIiwiaWQiLCJyZXF1aXJlZCIsInRhYkluZGV4IiwiYmx1ciIsImNsaWNrIiwiY2hhbmdlIl0sWyJpbnB1dCIsIiJdLFsxLCJtZGMtY2hlY2tib3hfX3JpcHBsZSJdLFsxLCJtZGMtY2hlY2tib3hfX2JhY2tncm91bmQiXSxbImZvY3VzYWJsZSIsImZhbHNlIiwidmlld0JveCIsIjAgMCAyNCAyNCIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibWRjLWNoZWNrYm94X19jaGVja21hcmsiXSxbImZpbGwiLCJub25lIiwiZCIsIk0xLjczLDEyLjkxIDguMSwxOS4yOCAyMi43OSw0LjU5IiwxLCJtZGMtY2hlY2tib3hfX2NoZWNrbWFyay1wYXRoIl0sWzEsIm1kYy1jaGVja2JveF9fbWl4ZWRtYXJrIl0sWyJtYXQtcmlwcGxlIiwiIiwxLCJtYXQtbWRjLWNoZWNrYm94LXJpcHBsZSIsIm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yIiwzLCJtYXRSaXBwbGVUcmlnZ2VyIiwibWF0UmlwcGxlRGlzYWJsZWQiLCJtYXRSaXBwbGVDZW50ZXJlZCJdLFszLCJmb3IiXSxbImxhYmVsIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoZm4oKSxmKDAsImRpdiIsMCksQSgiY2xpY2siLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9wcmV2ZW50QnViYmxpbmdGcm9tTGFiZWwobyl9KSxmKDEsImRpdiIsMSwyKSgzLCJkaXYiLDMpLEEoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLl9vblRvdWNoVGFyZ2V0Q2xpY2soKX0pLGcoKSxmKDQsImlucHV0Iiw0LDUpLEEoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uQmx1cigpfSkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLl9vbklucHV0Q2xpY2soKX0pKCJjaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9vbkludGVyYWN0aW9uRXZlbnQobyl9KSxnKCksayg2LCJkaXYiLDYpLGYoNywiZGl2Iiw3KSxxbigpLGYoOCwic3ZnIiw4KSxrKDksInBhdGgiLDkpLGcoKSx1YSgpLGsoMTAsImRpdiIsMTApLGcoKSxrKDExLCJkaXYiLDExKSxnKCksZigxMiwibGFiZWwiLDEyLDEzKSxUdCgxNCksZygpKCkpLDImZSl7bGV0IHI9c3QoMik7bnQoIm1kYy1mb3JtLWZpZWxkLS1hbGlnbi1lbmQiLCJiZWZvcmUiPT1pLmxhYmVsUG9zaXRpb24pLHYoNCksbnQoIm1kYy1jaGVja2JveC0tc2VsZWN0ZWQiLGkuY2hlY2tlZCksYigiY2hlY2tlZCIsaS5jaGVja2VkKSgiaW5kZXRlcm1pbmF0ZSIsaS5pbmRldGVybWluYXRlKSgiZGlzYWJsZWQiLGkuZGlzYWJsZWQpKCJpZCIsaS5pbnB1dElkKSgicmVxdWlyZWQiLGkucmVxdWlyZWQpKCJ0YWJJbmRleCIsaS50YWJJbmRleCksQmUoImFyaWEtbGFiZWwiLGkuYXJpYUxhYmVsfHxudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixpLmFyaWFMYWJlbGxlZGJ5KSgiYXJpYS1kZXNjcmliZWRieSIsaS5hcmlhRGVzY3JpYmVkYnkpKCJuYW1lIixpLm5hbWUpKCJ2YWx1ZSIsaS52YWx1ZSksdig3KSxiKCJtYXRSaXBwbGVUcmlnZ2VyIixyKSgibWF0UmlwcGxlRGlzYWJsZWQiLGkuZGlzYWJsZVJpcHBsZXx8aS5kaXNhYmxlZCkoIm1hdFJpcHBsZUNlbnRlcmVkIiwhMCksdigxKSxiKCJmb3IiLGkuaW5wdXRJZCl9fSxkZXBlbmRlbmNpZXM6W0tpXSxzdHlsZXM6WycubWRjLXRvdWNoLXRhcmdldC13cmFwcGVye2Rpc3BsYXk6aW5saW5lfUBrZXlmcmFtZXMgbWRjLWNoZWNrYm94LXVuY2hlY2tlZC1jaGVja2VkLWNoZWNrbWFyay1wYXRoezAlLDUwJXtzdHJva2UtZGFzaG9mZnNldDoyOS43ODMzMzg1fTUwJXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpfTEwMCV7c3Ryb2tlLWRhc2hvZmZzZXQ6MH19QGtleWZyYW1lcyBtZGMtY2hlY2tib3gtdW5jaGVja2VkLWluZGV0ZXJtaW5hdGUtbWl4ZWRtYXJrezAlLDY4LjIle3RyYW5zZm9ybTpzY2FsZVgoMCl9NjguMiV7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMCwgMCwgMCwgMSl9MTAwJXt0cmFuc2Zvcm06c2NhbGVYKDEpfX1Aa2V5ZnJhbWVzIG1kYy1jaGVja2JveC1jaGVja2VkLXVuY2hlY2tlZC1jaGVja21hcmstcGF0aHtmcm9te2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAuNCwgMCwgMSwgMSk7b3BhY2l0eToxO3N0cm9rZS1kYXNob2Zmc2V0OjB9dG97b3BhY2l0eTowO3N0cm9rZS1kYXNob2Zmc2V0Oi0yOS43ODMzMzg1fX1Aa2V5ZnJhbWVzIG1kYy1jaGVja2JveC1jaGVja2VkLWluZGV0ZXJtaW5hdGUtY2hlY2ttYXJre2Zyb217YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06cm90YXRlKDBkZWcpO29wYWNpdHk6MX10b3t0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKTtvcGFjaXR5OjB9fUBrZXlmcmFtZXMgbWRjLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtY2hlY2tlZC1jaGVja21hcmt7ZnJvbXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLjE0LCAwLCAwLCAxKTt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKTtvcGFjaXR5OjB9dG97dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpO29wYWNpdHk6MX19QGtleWZyYW1lcyBtZGMtY2hlY2tib3gtY2hlY2tlZC1pbmRldGVybWluYXRlLW1peGVkbWFya3tmcm9te2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246bWRjLWFuaW1hdGlvbi1kZWNlbGVyYXRpb24tY3VydmUtdGltaW5nLWZ1bmN0aW9uO3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKTtvcGFjaXR5OjB9dG97dHJhbnNmb3JtOnJvdGF0ZSgwZGVnKTtvcGFjaXR5OjF9fUBrZXlmcmFtZXMgbWRjLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtY2hlY2tlZC1taXhlZG1hcmt7ZnJvbXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLjE0LCAwLCAwLCAxKTt0cmFuc2Zvcm06cm90YXRlKDBkZWcpO29wYWNpdHk6MX10b3t0cmFuc2Zvcm06cm90YXRlKDMxNWRlZyk7b3BhY2l0eTowfX1Aa2V5ZnJhbWVzIG1kYy1jaGVja2JveC1pbmRldGVybWluYXRlLXVuY2hlY2tlZC1taXhlZG1hcmt7MCV7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpsaW5lYXI7dHJhbnNmb3JtOnNjYWxlWCgxKTtvcGFjaXR5OjF9MzIuOCUsMTAwJXt0cmFuc2Zvcm06c2NhbGVYKDApO29wYWNpdHk6MH19Lm1kYy1jaGVja2JveHtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTtmbGV4OjAgMCAxOHB4O2JveC1zaXppbmc6Y29udGVudC1ib3g7d2lkdGg6MThweDtoZWlnaHQ6MThweDtsaW5lLWhlaWdodDowO3doaXRlLXNwYWNlOm5vd3JhcDtjdXJzb3I6cG9pbnRlcjt2ZXJ0aWNhbC1hbGlnbjpib3R0b219Lm1kYy1jaGVja2JveFtoaWRkZW5de2Rpc3BsYXk6bm9uZX0ubWRjLWNoZWNrYm94Lm1kYy1yaXBwbGUtdXBncmFkZWQtLWJhY2tncm91bmQtZm9jdXNlZCAubWRjLWNoZWNrYm94X19mb2N1cy1yaW5nLC5tZGMtY2hlY2tib3g6bm90KC5tZGMtcmlwcGxlLXVwZ3JhZGVkKTpmb2N1cyAubWRjLWNoZWNrYm94X19mb2N1cy1yaW5ne3BvaW50ZXItZXZlbnRzOm5vbmU7Ym9yZGVyOjJweCBzb2xpZCByZ2JhKDAsMCwwLDApO2JvcmRlci1yYWRpdXM6NnB4O2JveC1zaXppbmc6Y29udGVudC1ib3g7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC01MCUpO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSl7Lm1kYy1jaGVja2JveC5tZGMtcmlwcGxlLXVwZ3JhZGVkLS1iYWNrZ3JvdW5kLWZvY3VzZWQgLm1kYy1jaGVja2JveF9fZm9jdXMtcmluZywubWRjLWNoZWNrYm94Om5vdCgubWRjLXJpcHBsZS11cGdyYWRlZCk6Zm9jdXMgLm1kYy1jaGVja2JveF9fZm9jdXMtcmluZ3tib3JkZXItY29sb3I6Q2FudmFzVGV4dH19Lm1kYy1jaGVja2JveC5tZGMtcmlwcGxlLXVwZ3JhZGVkLS1iYWNrZ3JvdW5kLWZvY3VzZWQgLm1kYy1jaGVja2JveF9fZm9jdXMtcmluZzo6YWZ0ZXIsLm1kYy1jaGVja2JveDpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzIC5tZGMtY2hlY2tib3hfX2ZvY3VzLXJpbmc6OmFmdGVye2NvbnRlbnQ6IiI7Ym9yZGVyOjJweCBzb2xpZCByZ2JhKDAsMCwwLDApO2JvcmRlci1yYWRpdXM6OHB4O2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC01MCUpO2hlaWdodDpjYWxjKDEwMCUgKyA0cHgpO3dpZHRoOmNhbGMoMTAwJSArIDRweCl9QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSl7Lm1kYy1jaGVja2JveC5tZGMtcmlwcGxlLXVwZ3JhZGVkLS1iYWNrZ3JvdW5kLWZvY3VzZWQgLm1kYy1jaGVja2JveF9fZm9jdXMtcmluZzo6YWZ0ZXIsLm1kYy1jaGVja2JveDpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzIC5tZGMtY2hlY2tib3hfX2ZvY3VzLXJpbmc6OmFmdGVye2JvcmRlci1jb2xvcjpDYW52YXNUZXh0fX1AbWVkaWEgYWxsIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6IG5vbmUpey5tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveF9fZm9jdXMtcmluZ3tkaXNwbGF5Om5vbmV9fUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXsubWRjLWNoZWNrYm94X19taXhlZG1hcmt7bWFyZ2luOjAgMXB4fX0ubWRjLWNoZWNrYm94LS1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdDtwb2ludGVyLWV2ZW50czpub25lfS5tZGMtY2hlY2tib3hfX2JhY2tncm91bmR7ZGlzcGxheTppbmxpbmUtZmxleDtwb3NpdGlvbjphYnNvbHV0ZTthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MThweDtoZWlnaHQ6MThweDtib3JkZXI6MnB4IHNvbGlkIGN1cnJlbnRDb2xvcjtib3JkZXItcmFkaXVzOjJweDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCk7cG9pbnRlci1ldmVudHM6bm9uZTt3aWxsLWNoYW5nZTpiYWNrZ3JvdW5kLWNvbG9yLGJvcmRlci1jb2xvcjt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgOTBtcyAwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKSxib3JkZXItY29sb3IgOTBtcyAwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKX0ubWRjLWNoZWNrYm94X19jaGVja21hcmt7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7cmlnaHQ6MDtib3R0b206MDtsZWZ0OjA7d2lkdGg6MTAwJTtvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IDE4MG1zIDBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpfS5tZGMtY2hlY2tib3gtLXVwZ3JhZGVkIC5tZGMtY2hlY2tib3hfX2NoZWNrbWFya3tvcGFjaXR5OjF9Lm1kYy1jaGVja2JveF9fY2hlY2ttYXJrLXBhdGh7dHJhbnNpdGlvbjpzdHJva2UtZGFzaG9mZnNldCAxODBtcyAwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKTtzdHJva2U6Y3VycmVudENvbG9yO3N0cm9rZS13aWR0aDozLjEycHg7c3Ryb2tlLWRhc2hvZmZzZXQ6MjkuNzgzMzM4NTtzdHJva2UtZGFzaGFycmF5OjI5Ljc4MzMzODV9Lm1kYy1jaGVja2JveF9fbWl4ZWRtYXJre3dpZHRoOjEwMCU7aGVpZ2h0OjA7dHJhbnNmb3JtOnNjYWxlWCgwKSByb3RhdGUoMGRlZyk7Ym9yZGVyLXdpZHRoOjFweDtib3JkZXItc3R5bGU6c29saWQ7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSA5MG1zIDBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpLHRyYW5zZm9ybSA5MG1zIDBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpfS5tZGMtY2hlY2tib3gtLWFuaW0tdW5jaGVja2VkLWNoZWNrZWQgLm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCwubWRjLWNoZWNrYm94LS1hbmltLXVuY2hlY2tlZC1pbmRldGVybWluYXRlIC5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQsLm1kYy1jaGVja2JveC0tYW5pbS1jaGVja2VkLXVuY2hlY2tlZCAubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tZGMtY2hlY2tib3gtLWFuaW0taW5kZXRlcm1pbmF0ZS11bmNoZWNrZWQgLm1kYy1jaGVja2JveF9fYmFja2dyb3VuZHthbmltYXRpb24tZHVyYXRpb246MTgwbXM7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpsaW5lYXJ9Lm1kYy1jaGVja2JveC0tYW5pbS11bmNoZWNrZWQtY2hlY2tlZCAubWRjLWNoZWNrYm94X19jaGVja21hcmstcGF0aHthbmltYXRpb246bWRjLWNoZWNrYm94LXVuY2hlY2tlZC1jaGVja2VkLWNoZWNrbWFyay1wYXRoIDE4MG1zIGxpbmVhciAwczt0cmFuc2l0aW9uOm5vbmV9Lm1kYy1jaGVja2JveC0tYW5pbS11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZSAubWRjLWNoZWNrYm94X19taXhlZG1hcmt7YW5pbWF0aW9uOm1kYy1jaGVja2JveC11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZS1taXhlZG1hcmsgOTBtcyBsaW5lYXIgMHM7dHJhbnNpdGlvbjpub25lfS5tZGMtY2hlY2tib3gtLWFuaW0tY2hlY2tlZC11bmNoZWNrZWQgLm1kYy1jaGVja2JveF9fY2hlY2ttYXJrLXBhdGh7YW5pbWF0aW9uOm1kYy1jaGVja2JveC1jaGVja2VkLXVuY2hlY2tlZC1jaGVja21hcmstcGF0aCA5MG1zIGxpbmVhciAwczt0cmFuc2l0aW9uOm5vbmV9Lm1kYy1jaGVja2JveC0tYW5pbS1jaGVja2VkLWluZGV0ZXJtaW5hdGUgLm1kYy1jaGVja2JveF9fY2hlY2ttYXJre2FuaW1hdGlvbjptZGMtY2hlY2tib3gtY2hlY2tlZC1pbmRldGVybWluYXRlLWNoZWNrbWFyayA5MG1zIGxpbmVhciAwczt0cmFuc2l0aW9uOm5vbmV9Lm1kYy1jaGVja2JveC0tYW5pbS1jaGVja2VkLWluZGV0ZXJtaW5hdGUgLm1kYy1jaGVja2JveF9fbWl4ZWRtYXJre2FuaW1hdGlvbjptZGMtY2hlY2tib3gtY2hlY2tlZC1pbmRldGVybWluYXRlLW1peGVkbWFyayA5MG1zIGxpbmVhciAwczt0cmFuc2l0aW9uOm5vbmV9Lm1kYy1jaGVja2JveC0tYW5pbS1pbmRldGVybWluYXRlLWNoZWNrZWQgLm1kYy1jaGVja2JveF9fY2hlY2ttYXJre2FuaW1hdGlvbjptZGMtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS1jaGVja2VkLWNoZWNrbWFyayA1MDBtcyBsaW5lYXIgMHM7dHJhbnNpdGlvbjpub25lfS5tZGMtY2hlY2tib3gtLWFuaW0taW5kZXRlcm1pbmF0ZS1jaGVja2VkIC5tZGMtY2hlY2tib3hfX21peGVkbWFya3thbmltYXRpb246bWRjLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtY2hlY2tlZC1taXhlZG1hcmsgNTAwbXMgbGluZWFyIDBzO3RyYW5zaXRpb246bm9uZX0ubWRjLWNoZWNrYm94LS1hbmltLWluZGV0ZXJtaW5hdGUtdW5jaGVja2VkIC5tZGMtY2hlY2tib3hfX21peGVkbWFya3thbmltYXRpb246bWRjLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtdW5jaGVja2VkLW1peGVkbWFyayAzMDBtcyBsaW5lYXIgMHM7dHJhbnNpdGlvbjpub25lfS5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmNoZWNrZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCwubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDppbmRldGVybWluYXRlfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQsLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2xbZGF0YS1pbmRldGVybWluYXRlPXRydWVdfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmR7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgOTBtcyAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSksYmFja2dyb3VuZC1jb2xvciA5MG1zIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKX0ubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDpjaGVja2Vkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQgLm1kYy1jaGVja2JveF9fY2hlY2ttYXJrLXBhdGgsLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6aW5kZXRlcm1pbmF0ZX4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kIC5tZGMtY2hlY2tib3hfX2NoZWNrbWFyay1wYXRoLC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sW2RhdGEtaW5kZXRlcm1pbmF0ZT10cnVlXX4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kIC5tZGMtY2hlY2tib3hfX2NoZWNrbWFyay1wYXRoe3N0cm9rZS1kYXNob2Zmc2V0OjB9Lm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2x7cG9zaXRpb246YWJzb2x1dGU7bWFyZ2luOjA7cGFkZGluZzowO29wYWNpdHk6MDtjdXJzb3I6aW5oZXJpdH0ubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDpkaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdDtwb2ludGVyLWV2ZW50czpub25lfS5tZGMtY2hlY2tib3gtLXRvdWNoe21hcmdpbjpjYWxjKCh2YXIoLS1tZGMtY2hlY2tib3gtc3RhdGUtbGF5ZXItc2l6ZSwgNDhweCkgLSB2YXIoLS1tZGMtY2hlY2tib3gtc3RhdGUtbGF5ZXItc2l6ZSwgNDBweCkpIC8gMil9Lm1kYy1jaGVja2JveC0tdG91Y2ggLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2x7dG9wOmNhbGMoKHZhcigtLW1kYy1jaGVja2JveC1zdGF0ZS1sYXllci1zaXplLCA0MHB4KSAtIHZhcigtLW1kYy1jaGVja2JveC1zdGF0ZS1sYXllci1zaXplLCA0OHB4KSkgLyAyKTtyaWdodDpjYWxjKCh2YXIoLS1tZGMtY2hlY2tib3gtc3RhdGUtbGF5ZXItc2l6ZSwgNDBweCkgLSB2YXIoLS1tZGMtY2hlY2tib3gtc3RhdGUtbGF5ZXItc2l6ZSwgNDhweCkpIC8gMik7bGVmdDpjYWxjKCh2YXIoLS1tZGMtY2hlY2tib3gtc3RhdGUtbGF5ZXItc2l6ZSwgNDBweCkgLSB2YXIoLS1tZGMtY2hlY2tib3gtc3RhdGUtbGF5ZXItc2l6ZSwgNDhweCkpIC8gMik7d2lkdGg6dmFyKC0tbWRjLWNoZWNrYm94LXN0YXRlLWxheWVyLXNpemUsIDQ4cHgpO2hlaWdodDp2YXIoLS1tZGMtY2hlY2tib3gtc3RhdGUtbGF5ZXItc2l6ZSwgNDhweCl9Lm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6Y2hlY2tlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kIC5tZGMtY2hlY2tib3hfX2NoZWNrbWFya3t0cmFuc2l0aW9uOm9wYWNpdHkgMTgwbXMgMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpLHRyYW5zZm9ybSAxODBtcyAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7b3BhY2l0eToxfS5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmNoZWNrZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCAubWRjLWNoZWNrYm94X19taXhlZG1hcmt7dHJhbnNmb3JtOnNjYWxlWCgxKSByb3RhdGUoLTQ1ZGVnKX0ubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDppbmRldGVybWluYXRlfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQgLm1kYy1jaGVja2JveF9fY2hlY2ttYXJrLC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sW2RhdGEtaW5kZXRlcm1pbmF0ZT10cnVlXX4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kIC5tZGMtY2hlY2tib3hfX2NoZWNrbWFya3t0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKTtvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IDkwbXMgMG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSksdHJhbnNmb3JtIDkwbXMgMG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSl9Lm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6aW5kZXRlcm1pbmF0ZX4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kIC5tZGMtY2hlY2tib3hfX21peGVkbWFyaywubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbFtkYXRhLWluZGV0ZXJtaW5hdGU9dHJ1ZV1+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCAubWRjLWNoZWNrYm94X19taXhlZG1hcmt7dHJhbnNmb3JtOnNjYWxlWCgxKSByb3RhdGUoMGRlZyk7b3BhY2l0eToxfS5tZGMtY2hlY2tib3gubWRjLWNoZWNrYm94LS11cGdyYWRlZCAubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tZGMtY2hlY2tib3gubWRjLWNoZWNrYm94LS11cGdyYWRlZCAubWRjLWNoZWNrYm94X19jaGVja21hcmssLm1kYy1jaGVja2JveC5tZGMtY2hlY2tib3gtLXVwZ3JhZGVkIC5tZGMtY2hlY2tib3hfX2NoZWNrbWFyay1wYXRoLC5tZGMtY2hlY2tib3gubWRjLWNoZWNrYm94LS11cGdyYWRlZCAubWRjLWNoZWNrYm94X19taXhlZG1hcmt7dHJhbnNpdGlvbjpub25lfS5tZGMtZm9ybS1maWVsZHtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lm1kYy1mb3JtLWZpZWxkW2hpZGRlbl17ZGlzcGxheTpub25lfS5tZGMtZm9ybS1maWVsZD5sYWJlbHttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDphdXRvO3BhZGRpbmctbGVmdDo0cHg7cGFkZGluZy1yaWdodDowO29yZGVyOjB9W2Rpcj1ydGxdIC5tZGMtZm9ybS1maWVsZD5sYWJlbCwubWRjLWZvcm0tZmllbGQ+bGFiZWxbZGlyPXJ0bF17bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6MH1bZGlyPXJ0bF0gLm1kYy1mb3JtLWZpZWxkPmxhYmVsLC5tZGMtZm9ybS1maWVsZD5sYWJlbFtkaXI9cnRsXXtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjRweH0ubWRjLWZvcm0tZmllbGQtLW5vd3JhcD5sYWJlbHt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1kYy1mb3JtLWZpZWxkLS1hbGlnbi1lbmQ+bGFiZWx7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjRweDtvcmRlcjotMX1bZGlyPXJ0bF0gLm1kYy1mb3JtLWZpZWxkLS1hbGlnbi1lbmQ+bGFiZWwsLm1kYy1mb3JtLWZpZWxkLS1hbGlnbi1lbmQ+bGFiZWxbZGlyPXJ0bF17bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6YXV0b31bZGlyPXJ0bF0gLm1kYy1mb3JtLWZpZWxkLS1hbGlnbi1lbmQ+bGFiZWwsLm1kYy1mb3JtLWZpZWxkLS1hbGlnbi1lbmQ+bGFiZWxbZGlyPXJ0bF17cGFkZGluZy1sZWZ0OjRweDtwYWRkaW5nLXJpZ2h0OjB9Lm1kYy1mb3JtLWZpZWxkLS1zcGFjZS1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5tZGMtZm9ybS1maWVsZC0tc3BhY2UtYmV0d2Vlbj5sYWJlbHttYXJnaW46MH1bZGlyPXJ0bF0gLm1kYy1mb3JtLWZpZWxkLS1zcGFjZS1iZXR3ZWVuPmxhYmVsLC5tZGMtZm9ybS1maWVsZC0tc3BhY2UtYmV0d2Vlbj5sYWJlbFtkaXI9cnRsXXttYXJnaW46MH0ubWF0LW1kYy1jaGVja2JveHtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94e3BhZGRpbmc6Y2FsYygodmFyKC0tbWRjLWNoZWNrYm94LXN0YXRlLWxheWVyLXNpemUsIDQwcHgpIC0gMThweCkgLyAyKTttYXJnaW46Y2FsYygodmFyKC0tbWRjLWNoZWNrYm94LXN0YXRlLWxheWVyLXNpemUsIDQwcHgpIC0gdmFyKC0tbWRjLWNoZWNrYm94LXN0YXRlLWxheWVyLXNpemUsIDQwcHgpKSAvIDIpfS5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2xbZGlzYWJsZWRdOm5vdCg6Y2hlY2tlZCk6bm90KDppbmRldGVybWluYXRlKTpub3QoW2RhdGEtaW5kZXRlcm1pbmF0ZT10cnVlXSl+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZHtib3JkZXItY29sb3I6dmFyKC0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjM4KSk7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sW2Rpc2FibGVkXTpjaGVja2Vkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQsLm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbFtkaXNhYmxlZF06aW5kZXRlcm1pbmF0ZX4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2xbZGF0YS1pbmRldGVybWluYXRlPXRydWVdW2Rpc2FibGVkXX4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5ke2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy1jaGVja2JveC1kaXNhYmxlZC1zZWxlY3RlZC1pY29uLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMzgpKX0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmVuYWJsZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCAubWRjLWNoZWNrYm94X19jaGVja21hcmt7Y29sb3I6dmFyKC0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWNoZWNrbWFyay1jb2xvciwgI2ZmZil9Lm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQgLm1kYy1jaGVja2JveF9fbWl4ZWRtYXJre2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtY2hlY2ttYXJrLWNvbG9yLCAjZmZmKX0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmRpc2FibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQgLm1kYy1jaGVja2JveF9fY2hlY2ttYXJre2NvbG9yOnZhcigtLW1kYy1jaGVja2JveC1kaXNhYmxlZC1zZWxlY3RlZC1jaGVja21hcmstY29sb3IsICNmZmYpfS5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZGlzYWJsZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCAubWRjLWNoZWNrYm94X19taXhlZG1hcmt7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy1jaGVja2JveC1kaXNhYmxlZC1zZWxlY3RlZC1jaGVja21hcmstY29sb3IsICNmZmYpfS5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZDpub3QoOmNoZWNrZWQpOm5vdCg6aW5kZXRlcm1pbmF0ZSk6bm90KFtkYXRhLWluZGV0ZXJtaW5hdGU9dHJ1ZV0pfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmR7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWljb24tY29sb3IsIHJnYmEoMCwgMCwgMCwgMC41NCkpO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkOmNoZWNrZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCwubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmVuYWJsZWQ6aW5kZXRlcm1pbmF0ZX4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2xbZGF0YS1pbmRldGVybWluYXRlPXRydWVdOmVuYWJsZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZHtib3JkZXItY29sb3I6dmFyKC0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWljb24tY29sb3IsIHZhcigtLW1kYy10aGVtZS1zZWNvbmRhcnksICMwMTg3ODYpKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy1jaGVja2JveC1zZWxlY3RlZC1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSl9QGtleWZyYW1lcyBtZGMtY2hlY2tib3gtZmFkZS1pbi1iYWNrZ3JvdW5kLThBMDAwMDAwRkYwMTg3ODYwMDAwMDAwMEZGMDE4Nzg2ezAle2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1pY29uLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuNTQpKTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fTUwJXtib3JkZXItY29sb3I6dmFyKC0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWljb24tY29sb3IsIHZhcigtLW1kYy10aGVtZS1zZWNvbmRhcnksICMwMTg3ODYpKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy1jaGVja2JveC1zZWxlY3RlZC1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSl9fUBrZXlmcmFtZXMgbWRjLWNoZWNrYm94LWZhZGUtb3V0LWJhY2tncm91bmQtOEEwMDAwMDBGRjAxODc4NjAwMDAwMDAwRkYwMTg3ODZ7MCUsODAle2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaWNvbi1jb2xvciwgdmFyKC0tbWRjLXRoZW1lLXNlY29uZGFyeSwgIzAxODc4NikpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWljb24tY29sb3IsIHZhcigtLW1kYy10aGVtZS1zZWNvbmRhcnksICMwMTg3ODYpKX0xMDAle2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1pY29uLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuNTQpKTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fX0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Lm1kYy1jaGVja2JveC0tYW5pbS11bmNoZWNrZWQtY2hlY2tlZCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQsLm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveC5tZGMtY2hlY2tib3gtLWFuaW0tdW5jaGVja2VkLWluZGV0ZXJtaW5hdGUgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5ke2FuaW1hdGlvbi1uYW1lOm1kYy1jaGVja2JveC1mYWRlLWluLWJhY2tncm91bmQtOEEwMDAwMDBGRjAxODc4NjAwMDAwMDAwRkYwMTg3ODZ9Lm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveC5tZGMtY2hlY2tib3gtLWFuaW0tY2hlY2tlZC11bmNoZWNrZWQgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3gubWRjLWNoZWNrYm94LS1hbmltLWluZGV0ZXJtaW5hdGUtdW5jaGVja2VkIC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmVuYWJsZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZHthbmltYXRpb24tbmFtZTptZGMtY2hlY2tib3gtZmFkZS1vdXQtYmFja2dyb3VuZC04QTAwMDAwMEZGMDE4Nzg2MDAwMDAwMDBGRjAxODc4Nn0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94OmhvdmVyIC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmVuYWJsZWQ6bm90KDpjaGVja2VkKTpub3QoOmluZGV0ZXJtaW5hdGUpOm5vdChbZGF0YS1pbmRldGVybWluYXRlPXRydWVdKX4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5ke2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSk7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94OmhvdmVyIC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmVuYWJsZWQ6Y2hlY2tlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3g6aG92ZXIgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZDppbmRldGVybWluYXRlfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQsLm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveDpob3ZlciAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbFtkYXRhLWluZGV0ZXJtaW5hdGU9dHJ1ZV06ZW5hYmxlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5ke2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvciwgdmFyKC0tbWRjLXRoZW1lLXNlY29uZGFyeSwgIzAxODc4NikpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3IsIHZhcigtLW1kYy10aGVtZS1zZWNvbmRhcnksICMwMTg3ODYpKX1Aa2V5ZnJhbWVzIG1kYy1jaGVja2JveC1mYWRlLWluLWJhY2tncm91bmQtRkYwMTg3ODZGRjAxODc4NjAwMDAwMDAwRkYwMTg3ODZ7MCV7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWhvdmVyLWljb24tY29sb3IsIHZhcigtLW1kYy10aGVtZS1zZWNvbmRhcnksICMwMTg3ODYpKTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fTUwJXtib3JkZXItY29sb3I6dmFyKC0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3IsIHZhcigtLW1kYy10aGVtZS1zZWNvbmRhcnksICMwMTg3ODYpKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy1jaGVja2JveC1zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSl9fUBrZXlmcmFtZXMgbWRjLWNoZWNrYm94LWZhZGUtb3V0LWJhY2tncm91bmQtRkYwMTg3ODZGRjAxODc4NjAwMDAwMDAwRkYwMTg3ODZ7MCUsODAle2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvciwgdmFyKC0tbWRjLXRoZW1lLXNlY29uZGFyeSwgIzAxODc4NikpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3IsIHZhcigtLW1kYy10aGVtZS1zZWNvbmRhcnksICMwMTg3ODYpKX0xMDAle2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSk7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH19Lm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveDpob3Zlci5tZGMtY2hlY2tib3gtLWFuaW0tdW5jaGVja2VkLWNoZWNrZWQgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3g6aG92ZXIubWRjLWNoZWNrYm94LS1hbmltLXVuY2hlY2tlZC1pbmRldGVybWluYXRlIC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmVuYWJsZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZHthbmltYXRpb24tbmFtZTptZGMtY2hlY2tib3gtZmFkZS1pbi1iYWNrZ3JvdW5kLUZGMDE4Nzg2RkYwMTg3ODYwMDAwMDAwMEZGMDE4Nzg2fS5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3g6aG92ZXIubWRjLWNoZWNrYm94LS1hbmltLWNoZWNrZWQtdW5jaGVja2VkIC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmVuYWJsZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCwubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94OmhvdmVyLm1kYy1jaGVja2JveC0tYW5pbS1pbmRldGVybWluYXRlLXVuY2hlY2tlZCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmR7YW5pbWF0aW9uLW5hbWU6bWRjLWNoZWNrYm94LWZhZGUtb3V0LWJhY2tncm91bmQtRkYwMTg3ODZGRjAxODc4NjAwMDAwMDAwRkYwMTg3ODZ9Lm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveC5tZGMtcmlwcGxlLXVwZ3JhZGVkLS1iYWNrZ3JvdW5kLWZvY3VzZWQgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZDpub3QoOmNoZWNrZWQpOm5vdCg6aW5kZXRlcm1pbmF0ZSk6bm90KFtkYXRhLWluZGV0ZXJtaW5hdGU9dHJ1ZV0pfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQsLm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveDpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzIC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmVuYWJsZWQ6bm90KDpjaGVja2VkKTpub3QoOmluZGV0ZXJtaW5hdGUpOm5vdChbZGF0YS1pbmRldGVybWluYXRlPXRydWVdKX4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5ke2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSk7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Lm1kYy1yaXBwbGUtdXBncmFkZWQtLWJhY2tncm91bmQtZm9jdXNlZCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkOmNoZWNrZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCwubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Lm1kYy1yaXBwbGUtdXBncmFkZWQtLWJhY2tncm91bmQtZm9jdXNlZCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkOmluZGV0ZXJtaW5hdGV+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCwubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Lm1kYy1yaXBwbGUtdXBncmFkZWQtLWJhY2tncm91bmQtZm9jdXNlZCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbFtkYXRhLWluZGV0ZXJtaW5hdGU9dHJ1ZV06ZW5hYmxlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3g6bm90KC5tZGMtcmlwcGxlLXVwZ3JhZGVkKTpmb2N1cyAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkOmNoZWNrZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCwubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Om5vdCgubWRjLXJpcHBsZS11cGdyYWRlZCk6Zm9jdXMgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZDppbmRldGVybWluYXRlfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQsLm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveDpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzIC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sW2RhdGEtaW5kZXRlcm1pbmF0ZT10cnVlXTplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmR7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy1jaGVja2JveC1zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvciwgdmFyKC0tbWRjLXRoZW1lLXNlY29uZGFyeSwgIzAxODc4NikpfUBrZXlmcmFtZXMgbWRjLWNoZWNrYm94LWZhZGUtaW4tYmFja2dyb3VuZC1GRjAxODc4NkZGMDE4Nzg2MDAwMDAwMDBGRjAxODc4NnswJXtib3JkZXItY29sb3I6dmFyKC0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvciwgdmFyKC0tbWRjLXRoZW1lLXNlY29uZGFyeSwgIzAxODc4NikpO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9NTAle2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvciwgdmFyKC0tbWRjLXRoZW1lLXNlY29uZGFyeSwgIzAxODc4NikpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3IsIHZhcigtLW1kYy10aGVtZS1zZWNvbmRhcnksICMwMTg3ODYpKX19QGtleWZyYW1lcyBtZGMtY2hlY2tib3gtZmFkZS1vdXQtYmFja2dyb3VuZC1GRjAxODc4NkZGMDE4Nzg2MDAwMDAwMDBGRjAxODc4NnswJSw4MCV7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy1jaGVja2JveC1zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvciwgdmFyKC0tbWRjLXRoZW1lLXNlY29uZGFyeSwgIzAxODc4NikpfTEwMCV7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWZvY3VzLWljb24tY29sb3IsIHZhcigtLW1kYy10aGVtZS1zZWNvbmRhcnksICMwMTg3ODYpKTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fX0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Lm1kYy1yaXBwbGUtdXBncmFkZWQtLWJhY2tncm91bmQtZm9jdXNlZC5tZGMtY2hlY2tib3gtLWFuaW0tdW5jaGVja2VkLWNoZWNrZWQgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3gubWRjLXJpcHBsZS11cGdyYWRlZC0tYmFja2dyb3VuZC1mb2N1c2VkLm1kYy1jaGVja2JveC0tYW5pbS11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZSAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQsLm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveDpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzLm1kYy1jaGVja2JveC0tYW5pbS11bmNoZWNrZWQtY2hlY2tlZCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQsLm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveDpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzLm1kYy1jaGVja2JveC0tYW5pbS11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZSAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmR7YW5pbWF0aW9uLW5hbWU6bWRjLWNoZWNrYm94LWZhZGUtaW4tYmFja2dyb3VuZC1GRjAxODc4NkZGMDE4Nzg2MDAwMDAwMDBGRjAxODc4Nn0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Lm1kYy1yaXBwbGUtdXBncmFkZWQtLWJhY2tncm91bmQtZm9jdXNlZC5tZGMtY2hlY2tib3gtLWFuaW0tY2hlY2tlZC11bmNoZWNrZWQgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3gubWRjLXJpcHBsZS11cGdyYWRlZC0tYmFja2dyb3VuZC1mb2N1c2VkLm1kYy1jaGVja2JveC0tYW5pbS1pbmRldGVybWluYXRlLXVuY2hlY2tlZCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQsLm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveDpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzLm1kYy1jaGVja2JveC0tYW5pbS1jaGVja2VkLXVuY2hlY2tlZCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQsLm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveDpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzLm1kYy1jaGVja2JveC0tYW5pbS1pbmRldGVybWluYXRlLXVuY2hlY2tlZCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmR7YW5pbWF0aW9uLW5hbWU6bWRjLWNoZWNrYm94LWZhZGUtb3V0LWJhY2tncm91bmQtRkYwMTg3ODZGRjAxODc4NjAwMDAwMDAwRkYwMTg3ODZ9Lm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveDpub3QoOmRpc2FibGVkKTphY3RpdmUgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZDpub3QoOmNoZWNrZWQpOm5vdCg6aW5kZXRlcm1pbmF0ZSk6bm90KFtkYXRhLWluZGV0ZXJtaW5hdGU9dHJ1ZV0pfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmR7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjU0KSk7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Om5vdCg6ZGlzYWJsZWQpOmFjdGl2ZSAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkOmNoZWNrZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCwubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Om5vdCg6ZGlzYWJsZWQpOmFjdGl2ZSAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkOmluZGV0ZXJtaW5hdGV+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCwubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Om5vdCg6ZGlzYWJsZWQpOmFjdGl2ZSAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbFtkYXRhLWluZGV0ZXJtaW5hdGU9dHJ1ZV06ZW5hYmxlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5ke2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSl9QGtleWZyYW1lcyBtZGMtY2hlY2tib3gtZmFkZS1pbi1iYWNrZ3JvdW5kLThBMDAwMDAwRkYwMTg3ODYwMDAwMDAwMEZGMDE4Nzg2ezAle2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3IsIHJnYmEoMCwgMCwgMCwgMC41NCkpO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9NTAle2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSl9fUBrZXlmcmFtZXMgbWRjLWNoZWNrYm94LWZhZGUtb3V0LWJhY2tncm91bmQtOEEwMDAwMDBGRjAxODc4NjAwMDAwMDAwRkYwMTg3ODZ7MCUsODAle2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSl9MTAwJXtib3JkZXItY29sb3I6dmFyKC0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuNTQpKTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fX0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Om5vdCg6ZGlzYWJsZWQpOmFjdGl2ZS5tZGMtY2hlY2tib3gtLWFuaW0tdW5jaGVja2VkLWNoZWNrZWQgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3g6bm90KDpkaXNhYmxlZCk6YWN0aXZlLm1kYy1jaGVja2JveC0tYW5pbS11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZSAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmR7YW5pbWF0aW9uLW5hbWU6bWRjLWNoZWNrYm94LWZhZGUtaW4tYmFja2dyb3VuZC04QTAwMDAwMEZGMDE4Nzg2MDAwMDAwMDBGRjAxODc4Nn0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Om5vdCg6ZGlzYWJsZWQpOmFjdGl2ZS5tZGMtY2hlY2tib3gtLWFuaW0tY2hlY2tlZC11bmNoZWNrZWQgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3g6bm90KDpkaXNhYmxlZCk6YWN0aXZlLm1kYy1jaGVja2JveC0tYW5pbS1pbmRldGVybWluYXRlLXVuY2hlY2tlZCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmR7YW5pbWF0aW9uLW5hbWU6bWRjLWNoZWNrYm94LWZhZGUtb3V0LWJhY2tncm91bmQtOEEwMDAwMDBGRjAxODc4NjAwMDAwMDAwRkYwMTg3ODZ9Lm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5ke3RvcDpjYWxjKCh2YXIoLS1tZGMtY2hlY2tib3gtc3RhdGUtbGF5ZXItc2l6ZSwgNDBweCkgLSAxOHB4KSAvIDIpO2xlZnQ6Y2FsYygodmFyKC0tbWRjLWNoZWNrYm94LXN0YXRlLWxheWVyLXNpemUsIDQwcHgpIC0gMThweCkgLyAyKX0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9se3RvcDpjYWxjKCh2YXIoLS1tZGMtY2hlY2tib3gtc3RhdGUtbGF5ZXItc2l6ZSwgNDBweCkgLSB2YXIoLS1tZGMtY2hlY2tib3gtc3RhdGUtbGF5ZXItc2l6ZSwgNDBweCkpIC8gMik7cmlnaHQ6Y2FsYygodmFyKC0tbWRjLWNoZWNrYm94LXN0YXRlLWxheWVyLXNpemUsIDQwcHgpIC0gdmFyKC0tbWRjLWNoZWNrYm94LXN0YXRlLWxheWVyLXNpemUsIDQwcHgpKSAvIDIpO2xlZnQ6Y2FsYygodmFyKC0tbWRjLWNoZWNrYm94LXN0YXRlLWxheWVyLXNpemUsIDQwcHgpIC0gdmFyKC0tbWRjLWNoZWNrYm94LXN0YXRlLWxheWVyLXNpemUsIDQwcHgpKSAvIDIpO3dpZHRoOnZhcigtLW1kYy1jaGVja2JveC1zdGF0ZS1sYXllci1zaXplLCA0MHB4KTtoZWlnaHQ6dmFyKC0tbWRjLWNoZWNrYm94LXN0YXRlLWxheWVyLXNpemUsIDQwcHgpfS5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3g6aG92ZXIgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6bm90KFtkaXNhYmxlZF0pfi5tZGMtY2hlY2tib3hfX3JpcHBsZXtvcGFjaXR5Oi4wNDt0cmFuc2Zvcm06c2NhbGUoMSk7dHJhbnNpdGlvbjpvcGFjaXR5IDgwbXMgMCBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSx0cmFuc2Zvcm0gODBtcyAwIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpfS5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6bm90KFtkaXNhYmxlZF0pOmZvY3Vzfi5tZGMtY2hlY2tib3hfX3JpcHBsZXtvcGFjaXR5Oi4xNn0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5key13ZWJraXQtcHJpbnQtY29sb3ItYWRqdXN0OmV4YWN0O2NvbG9yLWFkanVzdDpleGFjdH0ubWF0LW1kYy1jaGVja2JveC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAqLC5tYXQtbWRjLWNoZWNrYm94Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlICo6OmJlZm9yZXt0cmFuc2l0aW9uOm5vbmUgIWltcG9ydGFudDthbmltYXRpb246bm9uZSAhaW1wb3J0YW50fS5tYXQtbWRjLWNoZWNrYm94IGxhYmVse2N1cnNvcjpwb2ludGVyfS5tYXQtbWRjLWNoZWNrYm94Lm1hdC1tZGMtY2hlY2tib3gtZGlzYWJsZWQgbGFiZWx7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1tZGMtY2hlY2tib3ggbGFiZWw6ZW1wdHl7ZGlzcGxheTpub25lfS5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmZvY3VzOmVuYWJsZWQ6bm90KDpjaGVja2VkKTpub3QoOmluZGV0ZXJtaW5hdGUpOm5vdChbZGF0YS1pbmRldGVybWluYXRlPXRydWVdKX4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5ke2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yLCBibGFjayl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1kYy1jaGVja2JveC5tYXQtbWRjLWNoZWNrYm94LWRpc2FibGVke29wYWNpdHk6LjV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94X19jaGVja21hcmt7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtY2hlY2ttYXJrLWNvbG9yOiBDYW52YXNUZXh0Oy0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXNlbGVjdGVkLWNoZWNrbWFyay1jb2xvcjogQ2FudmFzVGV4dH0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94X19yaXBwbGV7b3BhY2l0eTowfS5tYXQtbWRjLWNoZWNrYm94LXJpcHBsZSwubWRjLWNoZWNrYm94X19yaXBwbGV7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LW1kYy1jaGVja2JveC1yaXBwbGU6bm90KDplbXB0eSksLm1kYy1jaGVja2JveF9fcmlwcGxlOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtbWRjLWNoZWNrYm94LXRvdWNoLXRhcmdldHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2hlaWdodDo0OHB4O2xlZnQ6NTAlO3dpZHRoOjQ4cHg7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKX0ubWF0LW1kYy1jaGVja2JveC1yaXBwbGU6OmJlZm9yZXtib3JkZXItcmFkaXVzOjUwJX0ubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDpmb2N1c34ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtjb250ZW50OiIifSddLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLEx4ZT17cHJvdmlkZTpJbyx1c2VFeGlzdGluZzpXbigoKT0+QnhlKSxtdWx0aTohMH0sQnhlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBxMnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1YbihuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1NZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtY2hlY2tib3giLCJyZXF1aXJlZCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsibWF0LWNoZWNrYm94IiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbCIsIiJdLFsibWF0LWNoZWNrYm94IiwicmVxdWlyZWQiLCIiLCJuZ01vZGVsIiwiIl1dLGZlYXR1cmVzOltWdChbTHhlXSksWGVdfSksbn0pKCksWHE9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe30pLG59KSgpLGtjPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1IKHtpbXBvcnRzOltkbixfYSxYcSxkbixYcV19KSxufSkoKSxRcT16YSh7cGFzc2l2ZTohMH0pLFpxPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLl9wbGF0Zm9ybT1lLHRoaXMuX25nWm9uZT1pLHRoaXMuX21vbml0b3JlZEVsZW1lbnRzPW5ldyBNYXB9bW9uaXRvcihlKXtpZighdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXJldHVybiBLcjtsZXQgaT1VYShlKSxyPXRoaXMuX21vbml0b3JlZEVsZW1lbnRzLmdldChpKTtpZihyKXJldHVybiByLnN1YmplY3Q7bGV0IG89bmV3IEVlLGE9ImNkay10ZXh0LWZpZWxkLWF1dG9maWxsZWQiLHM9bD0+eyJjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCIhPT1sLmFuaW1hdGlvbk5hbWV8fGkuY2xhc3NMaXN0LmNvbnRhaW5zKGEpPyJjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQiPT09bC5hbmltYXRpb25OYW1lJiZpLmNsYXNzTGlzdC5jb250YWlucyhhKSYmKGkuY2xhc3NMaXN0LnJlbW92ZShhKSx0aGlzLl9uZ1pvbmUucnVuKCgpPT5vLm5leHQoe3RhcmdldDpsLnRhcmdldCxpc0F1dG9maWxsZWQ6ITF9KSkpOihpLmNsYXNzTGlzdC5hZGQoYSksdGhpcy5fbmdab25lLnJ1bigoKT0+by5uZXh0KHt0YXJnZXQ6bC50YXJnZXQsaXNBdXRvZmlsbGVkOiEwfSkpKX07cmV0dXJuIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2kuYWRkRXZlbnRMaXN0ZW5lcigiYW5pbWF0aW9uc3RhcnQiLHMsUXEpLGkuY2xhc3NMaXN0LmFkZCgiY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkIil9KSx0aGlzLl9tb25pdG9yZWRFbGVtZW50cy5zZXQoaSx7c3ViamVjdDpvLHVubGlzdGVuOigpPT57aS5yZW1vdmVFdmVudExpc3RlbmVyKCJhbmltYXRpb25zdGFydCIscyxRcSl9fSksb31zdG9wTW9uaXRvcmluZyhlKXtsZXQgaT1VYShlKSxyPXRoaXMuX21vbml0b3JlZEVsZW1lbnRzLmdldChpKTtyJiYoci51bmxpc3RlbigpLHIuc3ViamVjdC5jb21wbGV0ZSgpLGkuY2xhc3NMaXN0LnJlbW92ZSgiY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkIiksaS5jbGFzc0xpc3QucmVtb3ZlKCJjZGstdGV4dC1maWVsZC1hdXRvZmlsbGVkIiksdGhpcy5fbW9uaXRvcmVkRWxlbWVudHMuZGVsZXRlKGkpKX1uZ09uRGVzdHJveSgpe3RoaXMuX21vbml0b3JlZEVsZW1lbnRzLmZvckVhY2goKGUsaSk9PnRoaXMuc3RvcE1vbml0b3JpbmcoaSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKFZuKSxPKG90KSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksS3E9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe30pLG59KSgpLEh4ZT1uZXcgdGUoIk1BVF9JTlBVVF9WQUxVRV9BQ0NFU1NPUiIpLHp4ZT1bImJ1dHRvbiIsImNoZWNrYm94IiwiZmlsZSIsImhpZGRlbiIsImltYWdlIiwicmFkaW8iLCJyYW5nZSIsInJlc2V0Iiwic3VibWl0Il0sVXhlPTAsanhlPWhnKGNsYXNze2NvbnN0cnVjdG9yKG4sdCxlLGkpe3RoaXMuX2RlZmF1bHRFcnJvclN0YXRlTWF0Y2hlcj1uLHRoaXMuX3BhcmVudEZvcm09dCx0aGlzLl9wYXJlbnRGb3JtR3JvdXA9ZSx0aGlzLm5nQ29udHJvbD1pLHRoaXMuc3RhdGVDaGFuZ2VzPW5ldyBFZX19KSxxdT0oKCk9PntjbGFzcyBuIGV4dGVuZHMganhle2dldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoZSl7dGhpcy5fZGlzYWJsZWQ9dnQoZSksdGhpcy5mb2N1c2VkJiYodGhpcy5mb2N1c2VkPSExLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBpZChlKXt0aGlzLl9pZD1lfHx0aGlzLl91aWR9Z2V0IHJlcXVpcmVkKCl7cmV0dXJuIHRoaXMuX3JlcXVpcmVkPz90aGlzLm5nQ29udHJvbD8uY29udHJvbD8uaGFzVmFsaWRhdG9yKGlsLnJlcXVpcmVkKT8/ITF9c2V0IHJlcXVpcmVkKGUpe3RoaXMuX3JlcXVpcmVkPXZ0KGUpfWdldCB0eXBlKCl7cmV0dXJuIHRoaXMuX3R5cGV9c2V0IHR5cGUoZSl7dGhpcy5fdHlwZT1lfHwidGV4dCIsdGhpcy5fdmFsaWRhdGVUeXBlKCksIXRoaXMuX2lzVGV4dGFyZWEmJnMyKCkuaGFzKHRoaXMuX3R5cGUpJiYodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnR5cGU9dGhpcy5fdHlwZSl9Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuX2lucHV0VmFsdWVBY2Nlc3Nvci52YWx1ZX1zZXQgdmFsdWUoZSl7ZSE9PXRoaXMudmFsdWUmJih0aGlzLl9pbnB1dFZhbHVlQWNjZXNzb3IudmFsdWU9ZSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfWdldCByZWFkb25seSgpe3JldHVybiB0aGlzLl9yZWFkb25seX1zZXQgcmVhZG9ubHkoZSl7dGhpcy5fcmVhZG9ubHk9dnQoZSl9Y29uc3RydWN0b3IoZSxpLHIsbyxhLHMsbCxjLGQsdSl7c3VwZXIocyxvLGEsciksdGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX3BsYXRmb3JtPWksdGhpcy5fYXV0b2ZpbGxNb25pdG9yPWMsdGhpcy5fZm9ybUZpZWxkPXUsdGhpcy5fdWlkPSJtYXQtaW5wdXQtIitVeGUrKyx0aGlzLmZvY3VzZWQ9ITEsdGhpcy5zdGF0ZUNoYW5nZXM9bmV3IEVlLHRoaXMuY29udHJvbFR5cGU9Im1hdC1pbnB1dCIsdGhpcy5hdXRvZmlsbGVkPSExLHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuX3R5cGU9InRleHQiLHRoaXMuX3JlYWRvbmx5PSExLHRoaXMuX25ldmVyRW1wdHlJbnB1dFR5cGVzPVsiZGF0ZSIsImRhdGV0aW1lIiwiZGF0ZXRpbWUtbG9jYWwiLCJtb250aCIsInRpbWUiLCJ3ZWVrIl0uZmlsdGVyKG09PnMyKCkuaGFzKG0pKSx0aGlzLl9pT1NLZXl1cExpc3RlbmVyPW09PntsZXQgXz1tLnRhcmdldDshXy52YWx1ZSYmMD09PV8uc2VsZWN0aW9uU3RhcnQmJjA9PT1fLnNlbGVjdGlvbkVuZCYmKF8uc2V0U2VsZWN0aW9uUmFuZ2UoMSwxKSxfLnNldFNlbGVjdGlvblJhbmdlKDAsMCkpfTtsZXQgcD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsaD1wLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7dGhpcy5faW5wdXRWYWx1ZUFjY2Vzc29yPWx8fHAsdGhpcy5fcHJldmlvdXNOYXRpdmVWYWx1ZT10aGlzLnZhbHVlLHRoaXMuaWQ9dGhpcy5pZCxpLklPUyYmZC5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2UubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsdGhpcy5faU9TS2V5dXBMaXN0ZW5lcil9KSx0aGlzLl9pc1NlcnZlcj0hdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyLHRoaXMuX2lzTmF0aXZlU2VsZWN0PSJzZWxlY3QiPT09aCx0aGlzLl9pc1RleHRhcmVhPSJ0ZXh0YXJlYSI9PT1oLHRoaXMuX2lzSW5Gb3JtRmllbGQ9ISF1LHRoaXMuX2lzTmF0aXZlU2VsZWN0JiYodGhpcy5jb250cm9sVHlwZT1wLm11bHRpcGxlPyJtYXQtbmF0aXZlLXNlbGVjdC1tdWx0aXBsZSI6Im1hdC1uYXRpdmUtc2VsZWN0Iil9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiZ0aGlzLl9hdXRvZmlsbE1vbml0b3IubW9uaXRvcih0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLnN1YnNjcmliZShlPT57dGhpcy5hdXRvZmlsbGVkPWUuaXNBdXRvZmlsbGVkLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX0pfW5nT25DaGFuZ2VzKCl7dGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfW5nT25EZXN0cm95KCl7dGhpcy5zdGF0ZUNoYW5nZXMuY29tcGxldGUoKSx0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJnRoaXMuX2F1dG9maWxsTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLHRoaXMuX3BsYXRmb3JtLklPUyYmdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXVwIix0aGlzLl9pT1NLZXl1cExpc3RlbmVyKX1uZ0RvQ2hlY2soKXt0aGlzLm5nQ29udHJvbCYmKHRoaXMudXBkYXRlRXJyb3JTdGF0ZSgpLG51bGwhPT10aGlzLm5nQ29udHJvbC5kaXNhYmxlZCYmdGhpcy5uZ0NvbnRyb2wuZGlzYWJsZWQhPT10aGlzLmRpc2FibGVkJiYodGhpcy5kaXNhYmxlZD10aGlzLm5nQ29udHJvbC5kaXNhYmxlZCx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpKSx0aGlzLl9kaXJ0eUNoZWNrTmF0aXZlVmFsdWUoKSx0aGlzLl9kaXJ0eUNoZWNrUGxhY2Vob2xkZXIoKX1mb2N1cyhlKXt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoZSl9X2ZvY3VzQ2hhbmdlZChlKXtlIT09dGhpcy5mb2N1c2VkJiYodGhpcy5mb2N1c2VkPWUsdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpKX1fb25JbnB1dCgpe31fZGlydHlDaGVja05hdGl2ZVZhbHVlKCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlO3RoaXMuX3ByZXZpb3VzTmF0aXZlVmFsdWUhPT1lJiYodGhpcy5fcHJldmlvdXNOYXRpdmVWYWx1ZT1lLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9X2RpcnR5Q2hlY2tQbGFjZWhvbGRlcigpe2xldCBlPXRoaXMuX2dldFBsYWNlaG9sZGVyKCk7aWYoZSE9PXRoaXMuX3ByZXZpb3VzUGxhY2Vob2xkZXIpe2xldCBpPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDt0aGlzLl9wcmV2aW91c1BsYWNlaG9sZGVyPWUsZT9pLnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLGUpOmkucmVtb3ZlQXR0cmlidXRlKCJwbGFjZWhvbGRlciIpfX1fZ2V0UGxhY2Vob2xkZXIoKXtyZXR1cm4gdGhpcy5wbGFjZWhvbGRlcnx8bnVsbH1fdmFsaWRhdGVUeXBlKCl7enhlLmluZGV4T2YodGhpcy5fdHlwZSl9X2lzTmV2ZXJFbXB0eSgpe3JldHVybiB0aGlzLl9uZXZlckVtcHR5SW5wdXRUeXBlcy5pbmRleE9mKHRoaXMuX3R5cGUpPi0xfV9pc0JhZElucHV0KCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbGlkaXR5O3JldHVybiBlJiZlLmJhZElucHV0fWdldCBlbXB0eSgpe3JldHVybiEodGhpcy5faXNOZXZlckVtcHR5KCl8fHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZXx8dGhpcy5faXNCYWRJbnB1dCgpfHx0aGlzLmF1dG9maWxsZWQpfWdldCBzaG91bGRMYWJlbEZsb2F0KCl7aWYodGhpcy5faXNOYXRpdmVTZWxlY3Qpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxpPWUub3B0aW9uc1swXTtyZXR1cm4gdGhpcy5mb2N1c2VkfHxlLm11bHRpcGxlfHwhdGhpcy5lbXB0eXx8ISEoZS5zZWxlY3RlZEluZGV4Pi0xJiZpJiZpLmxhYmVsKX1yZXR1cm4gdGhpcy5mb2N1c2VkfHwhdGhpcy5lbXB0eX1zZXREZXNjcmliZWRCeUlkcyhlKXtlLmxlbmd0aD90aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWRlc2NyaWJlZGJ5IixlLmpvaW4oIiAiKSk6dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1kZXNjcmliZWRieSIpfW9uQ29udGFpbmVyQ2xpY2soKXt0aGlzLmZvY3VzZWR8fHRoaXMuZm9jdXMoKX1faXNJbmxpbmVTZWxlY3QoKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7cmV0dXJuIHRoaXMuX2lzTmF0aXZlU2VsZWN0JiYoZS5tdWx0aXBsZXx8ZS5zaXplPjEpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKHhlKSxDKFZuKSxDKHFhLDEwKSxDKENnLDgpLEMoTWcsOCksQyhFaCksQyhIeGUsMTApLEMoWnEpLEMob3QpLEMoUGgsOCkpfSxuLlx1MDI3NWRpcj1NZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsIm1hdElucHV0IiwiIl0sWyJ0ZXh0YXJlYSIsIm1hdElucHV0IiwiIl0sWyJzZWxlY3QiLCJtYXROYXRpdmVDb250cm9sIiwiIl0sWyJpbnB1dCIsIm1hdE5hdGl2ZUNvbnRyb2wiLCIiXSxbInRleHRhcmVhIiwibWF0TmF0aXZlQ29udHJvbCIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1tZGMtaW5wdXQtZWxlbWVudCJdLGhvc3RWYXJzOjE4LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmQSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX2ZvY3VzQ2hhbmdlZCghMCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fZm9jdXNDaGFuZ2VkKCExKX0pKCJpbnB1dCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fb25JbnB1dCgpfSksMiZlJiYod28oImlkIixpLmlkKSgiZGlzYWJsZWQiLGkuZGlzYWJsZWQpKCJyZXF1aXJlZCIsaS5yZXF1aXJlZCksQmUoIm5hbWUiLGkubmFtZXx8bnVsbCkoInJlYWRvbmx5IixpLnJlYWRvbmx5JiYhaS5faXNOYXRpdmVTZWxlY3R8fG51bGwpKCJhcmlhLWludmFsaWQiLGkuZW1wdHkmJmkucmVxdWlyZWQ/bnVsbDppLmVycm9yU3RhdGUpKCJhcmlhLXJlcXVpcmVkIixpLnJlcXVpcmVkKSgiaWQiLGkuaWQpLG50KCJtYXQtaW5wdXQtc2VydmVyIixpLl9pc1NlcnZlcikoIm1hdC1tZGMtZm9ybS1maWVsZC10ZXh0YXJlYS1jb250cm9sIixpLl9pc0luRm9ybUZpZWxkJiZpLl9pc1RleHRhcmVhKSgibWF0LW1kYy1mb3JtLWZpZWxkLWlucHV0LWNvbnRyb2wiLGkuX2lzSW5Gb3JtRmllbGQpKCJtZGMtdGV4dC1maWVsZF9faW5wdXQiLGkuX2lzSW5Gb3JtRmllbGQpKCJtYXQtbWRjLW5hdGl2ZS1zZWxlY3QtaW5saW5lIixpLl9pc0lubGluZVNlbGVjdCgpKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixpZDoiaWQiLHBsYWNlaG9sZGVyOiJwbGFjZWhvbGRlciIsbmFtZToibmFtZSIscmVxdWlyZWQ6InJlcXVpcmVkIix0eXBlOiJ0eXBlIixlcnJvclN0YXRlTWF0Y2hlcjoiZXJyb3JTdGF0ZU1hdGNoZXIiLHVzZXJBcmlhRGVzY3JpYmVkQnk6WyJhcmlhLWRlc2NyaWJlZGJ5IiwidXNlckFyaWFEZXNjcmliZWRCeSJdLHZhbHVlOiJ2YWx1ZSIscmVhZG9ubHk6InJlYWRvbmx5In0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdLGZlYXR1cmVzOltWdChbe3Byb3ZpZGU6WXYsdXNlRXhpc3Rpbmc6bn1dKSxYZSxxdF19KSxufSkoKSxybD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9SCh7aW1wb3J0czpbZG4sUXYsUXYsS3EsZG5dfSksbn0pKCk7ZnVuY3Rpb24gR3hlKG4sdCl7aWYoMSZuJiYoZigwLCJtYXQtZXJyb3IiKSxUKDEpLGcoKSksMiZuKXtsZXQgZT13KCk7digxKSxWZSgiIFJlbG9hZCBwZXJpb2QgaGFzIHRvIGJlIG1pbmltdW0gb2YgIixlLk1JTl9SRUxPQURfUEVSSU9EX0lOX1MsIiBzZWNvbmRzLiAiKX19ZnVuY3Rpb24gV3hlKG4sdCl7MSZuJiYoZigwLCJtYXQtZXJyb3IiKSxUKDEsIiBQYWdlIHNpemUgaGFzIHRvIGJlIGEgcG9zaXRpdmUgaW50ZWdlci4gIiksZygpKX12YXIgSnE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMucmVsb2FkVG9nZ2xlZD1uZXcgRix0aGlzLnJlbG9hZFBlcmlvZEluTXNDaGFuZ2VkPW5ldyBGLHRoaXMucGFnZVNpemVDaGFuZ2VkPW5ldyBGLHRoaXMuTUlOX1JFTE9BRF9QRVJJT0RfSU5fUz0zMCx0aGlzLnJlbG9hZFBlcmlvZENvbnRyb2w9bmV3IG55KHRoaXMuTUlOX1JFTE9BRF9QRVJJT0RfSU5fUyxbaWwucmVxdWlyZWQsaWwubWluKHRoaXMuTUlOX1JFTE9BRF9QRVJJT0RfSU5fUyldKSx0aGlzLnBhZ2luYXRpb25Db250cm9sPW5ldyBueSgxLFtpbC5yZXF1aXJlZCxpbC5taW4oMSksbj0+e2xldCB0PU51bWJlcihuLnZhbHVlKTtyZXR1cm4gTWF0aC5yb3VuZCh0KT09PW4udmFsdWU/bnVsbDp7aW50ZWdlcjp7dmFsdWU6bi52YWx1ZX19fV0pLHRoaXMubmdVbnN1YnNjcmliZT1uZXcgRWV9bmdPbkluaXQoKXt0aGlzLnJlbG9hZFBlcmlvZENvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoaXQodGhpcy5uZ1Vuc3Vic2NyaWJlKSxDcig1MDApLE9lKCgpPT50aGlzLnJlbG9hZFBlcmlvZENvbnRyb2wudmFsaWQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnJlbG9hZFBlcmlvZENvbnRyb2wudmFsaWQmJnRoaXMucmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQuZW1pdCgxZTMqdGhpcy5yZWxvYWRQZXJpb2RDb250cm9sLnZhbHVlKX0pLHRoaXMucGFnaW5hdGlvbkNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoaXQodGhpcy5uZ1Vuc3Vic2NyaWJlKSxDcig1MDApLE9lKCgpPT50aGlzLnBhZ2luYXRpb25Db250cm9sLnZhbGlkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5wYWdlU2l6ZUNoYW5nZWQuZW1pdCh0aGlzLnBhZ2luYXRpb25Db250cm9sLnZhbHVlKX0pfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX1uZ09uQ2hhbmdlcyhlKXtpZihlLnJlbG9hZFBlcmlvZEluTXMpe2xldCBpPWUucmVsb2FkUGVyaW9kSW5NcztpLnByZXZpb3VzVmFsdWUhPT1pLmN1cnJlbnRWYWx1ZSYmdGhpcy5yZWxvYWRQZXJpb2RDb250cm9sLnNldFZhbHVlKGkuY3VycmVudFZhbHVlLzFlMyl9aWYoZS5yZWxvYWRFbmFibGVkJiYoZS5yZWxvYWRFbmFibGVkLmN1cnJlbnRWYWx1ZT90aGlzLnJlbG9hZFBlcmlvZENvbnRyb2wuZW5hYmxlKCk6dGhpcy5yZWxvYWRQZXJpb2RDb250cm9sLmRpc2FibGUoKSksZS5wYWdlU2l6ZSl7bGV0IGk9ZS5wYWdlU2l6ZTtpLnByZXZpb3VzVmFsdWUhPT1pLmN1cnJlbnRWYWx1ZSYmdGhpcy5wYWdpbmF0aW9uQ29udHJvbC5zZXRWYWx1ZShpLmN1cnJlbnRWYWx1ZSl9fW9uUmVsb2FkVG9nZ2xlKCl7dGhpcy5yZWxvYWRUb2dnbGVkLmVtaXQoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1sic2V0dGluZ3MtZGlhbG9nLWNvbXBvbmVudCJdXSxpbnB1dHM6e3JlbG9hZEVuYWJsZWQ6InJlbG9hZEVuYWJsZWQiLHJlbG9hZFBlcmlvZEluTXM6InJlbG9hZFBlcmlvZEluTXMiLHBhZ2VTaXplOiJwYWdlU2l6ZSJ9LG91dHB1dHM6e3JlbG9hZFRvZ2dsZWQ6InJlbG9hZFRvZ2dsZWQiLHJlbG9hZFBlcmlvZEluTXNDaGFuZ2VkOiJyZWxvYWRQZXJpb2RJbk1zQ2hhbmdlZCIscGFnZVNpemVDaGFuZ2VkOiJwYWdlU2l6ZUNoYW5nZWQifSxmZWF0dXJlczpbcXRdLGRlY2xzOjE4LHZhcnM6NSxjb25zdHM6W1sxLCJyZWxvYWQtdG9nZ2xlIl0sWzMsImNoZWNrZWQiLCJjaGFuZ2UiXSxbIm1hdElucHV0IiwiIiwidHlwZSIsIm51bWJlciIsMSwicmVsb2FkLXBlcmlvZCIsMywiZm9ybUNvbnRyb2wiXSxbNCwibmdJZiJdLFsic3Vic2NyaXB0U2l6aW5nIiwiZHluYW1pYyJdLFsibWF0SW5wdXQiLCIiLCJ0eXBlIiwibnVtYmVyIiwxLCJwYWdlLXNpemUiLDMsImZvcm1Db250cm9sIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZigwLCJoMyIpLFQoMSwiU2V0dGluZ3MiKSxnKCksZigyLCJkaXYiKSgzLCJkaXYiLDApKDQsIm1hdC1jaGVja2JveCIsMSksQSgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBpLm9uUmVsb2FkVG9nZ2xlKCl9KSxUKDUsIlJlbG9hZCBkYXRhIiksZygpKCksZig2LCJkaXYiKSg3LCJtYXQtZm9ybS1maWVsZCIpKDgsIm1hdC1sYWJlbCIpLFQoOSwiUmVsb2FkIFBlcmlvZCAoc2Vjb25kcykiKSxnKCksaygxMCwiaW5wdXQiLDIpLGcoKSxTKDExLEd4ZSwyLDEsIm1hdC1lcnJvciIsMyksZygpKCksZigxMiwiZGl2IikoMTMsIm1hdC1mb3JtLWZpZWxkIiw0KSgxNCwibWF0LWxhYmVsIiksVCgxNSwiUGFnaW5hdGlvbiBMaW1pdCIpLGcoKSxrKDE2LCJpbnB1dCIsNSksZygpLFMoMTcsV3hlLDIsMCwibWF0LWVycm9yIiwzKSxnKCkpLDImZSYmKHYoNCksYigiY2hlY2tlZCIsaS5yZWxvYWRFbmFibGVkKSx2KDYpLGIoImZvcm1Db250cm9sIixpLnJlbG9hZFBlcmlvZENvbnRyb2wpLHYoMSksYigibmdJZiIsaS5yZWxvYWRQZXJpb2RDb250cm9sLmhhc0Vycm9yKCJtaW4iKXx8aS5yZWxvYWRQZXJpb2RDb250cm9sLmhhc0Vycm9yKCJyZXF1aXJlZCIpKSx2KDUpLGIoImZvcm1Db250cm9sIixpLnBhZ2luYXRpb25Db250cm9sKSx2KDEpLGIoIm5nSWYiLGkucGFnaW5hdGlvbkNvbnRyb2wuaW52YWxpZCkpfSxkZXBlbmRlbmNpZXM6W05lLFV1LGoyLHhnLFcyLHhzLHF1LFBjLG5sLGs5XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgZm9udC1zaXplOiAxNXB4O1xufVxuXG5bX25naG9zdC0lQ09NUCVdICAgID4gZGl2W19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIG1hcmdpbjogMTZweCAwO1xufVxuXG5oM1tfbmdjb250ZW50LSVDT01QJV0ge1xuICBmb250LXNpemU6IDIwcHg7XG4gIG1hcmdpbjogMDtcbn1cblxuLnJlbG9hZC10b2dnbGVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgbWFyZ2luLWJvdHRvbTogMTZweDtcbn0iXX0pLG59KSgpLCRxPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMucmVsb2FkRW5hYmxlZCQ9dGhpcy5zdG9yZS5zZWxlY3QoQXYpLHRoaXMucmVsb2FkUGVyaW9kSW5NcyQ9dGhpcy5zdG9yZS5zZWxlY3QoUnYpLHRoaXMucGFnZVNpemUkPXRoaXMuc3RvcmUuc2VsZWN0KE1oKX1vblJlbG9hZFRvZ2dsZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHgxKCkpfW9uUmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChDMSh7cGVyaW9kSW5NczplfSkpfW9uUGFnZVNpemVDaGFuZ2VkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goTTEoe3NpemU6ZX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhJZSkpfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbInNldHRpbmdzLWRpYWxvZyJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJyZWxvYWRFbmFibGVkIiwicmVsb2FkUGVyaW9kSW5NcyIsInBhZ2VTaXplIiwicmVsb2FkVG9nZ2xlZCIsInJlbG9hZFBlcmlvZEluTXNDaGFuZ2VkIiwicGFnZVNpemVDaGFuZ2VkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZigwLCJzZXR0aW5ncy1kaWFsb2ctY29tcG9uZW50IiwwKSxBKCJyZWxvYWRUb2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBpLm9uUmVsb2FkVG9nZ2xlZCgpfSkoInJlbG9hZFBlcmlvZEluTXNDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblJlbG9hZFBlcmlvZEluTXNDaGFuZ2VkKG8pfSkoInBhZ2VTaXplQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25QYWdlU2l6ZUNoYW5nZWQobyl9KSxVKDEsImFzeW5jIiksVSgyLCJhc3luYyIpLFUoMywiYXN5bmMiKSxnKCkpLDImZSYmYigicmVsb2FkRW5hYmxlZCIsRygxLDMsaS5yZWxvYWRFbmFibGVkJCkpKCJyZWxvYWRQZXJpb2RJbk1zIixHKDIsNSxpLnJlbG9hZFBlcmlvZEluTXMkKSkoInBhZ2VTaXplIixHKDMsNyxpLnBhZ2VTaXplJCkpfSxkZXBlbmRlbmNpZXM6W0pxLGN0XSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxlWD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuZGlhbG9nPWV9aXNCdXR0b25EaXNhYmxlZCgpe3JldHVybiB0aGlzLnNldHRpbmdzTG9hZFN0YXRlPT09UmUuTk9UX0xPQURFRHx8dGhpcy5zZXR0aW5nc0xvYWRTdGF0ZT09PVJlLkxPQURJTkd9b3BlbkRpYWxvZygpe3RoaXMuZGlhbG9nLm9wZW4oJHEse3dpZHRoOiI0MDBweCJ9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyh5cykpfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbInNldHRpbmdzLWJ1dHRvbi1jb21wb25lbnQiXV0saW5wdXRzOntzZXR0aW5nc0xvYWRTdGF0ZToic2V0dGluZ3NMb2FkU3RhdGUifSxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1sibWF0LWljb24tYnV0dG9uIiwiIiwzLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJzdmdJY29uIiwic2V0dGluZ3NfMjRweCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGYoMCwiYnV0dG9uIiwwKSxBKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vcGVuRGlhbG9nKCl9KSxrKDEsIm1hdC1pY29uIiwxKSxnKCkpLDImZSYmYigiZGlzYWJsZWQiLGkuaXNCdXR0b25EaXNhYmxlZCgpKX0sZGVwZW5kZW5jaWVzOltFcixibl0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksdFg9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5zZXR0aW5nc0xvYWRTdGF0ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoaTIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEllKSl9LG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1sic2V0dGluZ3MtYnV0dG9uIl1dLGRlY2xzOjIsdmFyczozLGNvbnN0czpbWzMsInNldHRpbmdzTG9hZFN0YXRlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaygwLCJzZXR0aW5ncy1idXR0b24tY29tcG9uZW50IiwwKSxVKDEsImFzeW5jIikpLDImZSYmYigic2V0dGluZ3NMb2FkU3RhdGUiLEcoMSwxLGkuc2V0dGluZ3NMb2FkU3RhdGUkKSl9LGRlcGVuZGVuY2llczpbZVgsY3RdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLFp4ZT1bIm1hdC1tZW51LWl0ZW0iLCIiXTtmdW5jdGlvbiBLeGUobix0KXsxJm4mJihxbigpLGYoMCwic3ZnIiwzKSxrKDEsInBvbHlnb24iLDQpLGcoKSl9dmFyIEp4ZT1bW1sibWF0LWljb24iXSxbIiIsIm1hdE1lbnVJdGVtSWNvbiIsIiJdXSwiKiJdLCR4ZT1bIm1hdC1pY29uLCBbbWF0TWVudUl0ZW1JY29uXSIsIioiXTtmdW5jdGlvbiBlQ2Uobix0KXtpZigxJm4pe2xldCBlPVRlKCk7ZigwLCJkaXYiLDApLEEoImtleWRvd24iLGZ1bmN0aW9uKHIpe3JldHVybiBuZShlKSxpZSh3KCkuX2hhbmRsZUtleWRvd24ocikpfSkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBuZShlKSxpZSh3KCkuY2xvc2VkLmVtaXQoImNsaWNrIikpfSkoIkB0cmFuc2Zvcm1NZW51LnN0YXJ0IixmdW5jdGlvbihyKXtyZXR1cm4gbmUoZSksaWUodygpLl9vbkFuaW1hdGlvblN0YXJ0KHIpKX0pKCJAdHJhbnNmb3JtTWVudS5kb25lIixmdW5jdGlvbihyKXtyZXR1cm4gbmUoZSksaWUodygpLl9vbkFuaW1hdGlvbkRvbmUocikpfSksZigxLCJkaXYiLDEpLFR0KDIpLGcoKSgpfWlmKDImbil7bGV0IGU9dygpO2IoImlkIixlLnBhbmVsSWQpKCJuZ0NsYXNzIixlLl9jbGFzc0xpc3QpKCJAdHJhbnNmb3JtTWVudSIsZS5fcGFuZWxBbmltYXRpb25TdGF0ZSksQmUoImFyaWEtbGFiZWwiLGUuYXJpYUxhYmVsfHxudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixlLmFyaWFMYWJlbGxlZGJ5fHxudWxsKSgiYXJpYS1kZXNjcmliZWRieSIsZS5hcmlhRGVzY3JpYmVkYnl8fG51bGwpfX12YXIgdENlPVsiKiJdLEsyPW5ldyB0ZSgiTUFUX01FTlVfUEFORUwiKSxuQ2U9Z28oYW8oY2xhc3N7fSkpLEVkPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBuQ2V7Y29uc3RydWN0b3IoZSxpLHIsbyxhKXtzdXBlcigpLHRoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9kb2N1bWVudD1pLHRoaXMuX2ZvY3VzTW9uaXRvcj1yLHRoaXMuX3BhcmVudE1lbnU9byx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1hLHRoaXMucm9sZT0ibWVudWl0ZW0iLHRoaXMuX2hvdmVyZWQ9bmV3IEVlLHRoaXMuX2ZvY3VzZWQ9bmV3IEVlLHRoaXMuX2hpZ2hsaWdodGVkPSExLHRoaXMuX3RyaWdnZXJzU3VibWVudT0hMSxvPy5hZGRJdGVtPy4odGhpcyl9Zm9jdXMoZSxpKXt0aGlzLl9mb2N1c01vbml0b3ImJmU/dGhpcy5fZm9jdXNNb25pdG9yLmZvY3VzVmlhKHRoaXMuX2dldEhvc3RFbGVtZW50KCksZSxpKTp0aGlzLl9nZXRIb3N0RWxlbWVudCgpLmZvY3VzKGkpLHRoaXMuX2ZvY3VzZWQubmV4dCh0aGlzKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9mb2N1c01vbml0b3ImJnRoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYsITEpfW5nT25EZXN0cm95KCl7dGhpcy5fZm9jdXNNb25pdG9yJiZ0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZiksdGhpcy5fcGFyZW50TWVudSYmdGhpcy5fcGFyZW50TWVudS5yZW1vdmVJdGVtJiZ0aGlzLl9wYXJlbnRNZW51LnJlbW92ZUl0ZW0odGhpcyksdGhpcy5faG92ZXJlZC5jb21wbGV0ZSgpLHRoaXMuX2ZvY3VzZWQuY29tcGxldGUoKX1fZ2V0VGFiSW5kZXgoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZD8iLTEiOiIwIn1fZ2V0SG9zdEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50fV9jaGVja0Rpc2FibGVkKGUpe3RoaXMuZGlzYWJsZWQmJihlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSl9X2hhbmRsZU1vdXNlRW50ZXIoKXt0aGlzLl9ob3ZlcmVkLm5leHQodGhpcyl9Z2V0TGFiZWwoKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xvbmVOb2RlKCEwKSxpPWUucXVlcnlTZWxlY3RvckFsbCgibWF0LWljb24sIC5tYXRlcmlhbC1pY29ucyIpO2ZvcihsZXQgcj0wO3I8aS5sZW5ndGg7cisrKWlbcl0ucmVtb3ZlKCk7cmV0dXJuIGUudGV4dENvbnRlbnQ/LnRyaW0oKXx8IiJ9X3NldEhpZ2hsaWdodGVkKGUpe3RoaXMuX2hpZ2hsaWdodGVkPWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY/Lm1hcmtGb3JDaGVjaygpfV9zZXRUcmlnZ2Vyc1N1Ym1lbnUoZSl7dGhpcy5fdHJpZ2dlcnNTdWJtZW51PWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY/Lm1hcmtGb3JDaGVjaygpfV9oYXNGb2N1cygpe3JldHVybiB0aGlzLl9kb2N1bWVudCYmdGhpcy5fZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PXRoaXMuX2dldEhvc3RFbGVtZW50KCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoeGUpLEMoTnQpLEMoZm8pLEMoSzIsOCksQyhRdCkpfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdC1tZW51LWl0ZW0iLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtbWRjLW1lbnUtaXRlbSIsIm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yIiwibWRjLWxpc3QtaXRlbSJdLGhvc3RWYXJzOjgsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZBKCJjbGljayIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2NoZWNrRGlzYWJsZWQobyl9KSgibW91c2VlbnRlciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5faGFuZGxlTW91c2VFbnRlcigpfSksMiZlJiYoQmUoInJvbGUiLGkucm9sZSkoInRhYmluZGV4IixpLl9nZXRUYWJJbmRleCgpKSgiYXJpYS1kaXNhYmxlZCIsaS5kaXNhYmxlZCkoImRpc2FibGVkIixpLmRpc2FibGVkfHxudWxsKSxudCgibWF0LW1kYy1tZW51LWl0ZW0taGlnaGxpZ2h0ZWQiLGkuX2hpZ2hsaWdodGVkKSgibWF0LW1kYy1tZW51LWl0ZW0tc3VibWVudS10cmlnZ2VyIixpLl90cmlnZ2Vyc1N1Ym1lbnUpKX0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQiLGRpc2FibGVSaXBwbGU6ImRpc2FibGVSaXBwbGUiLHJvbGU6InJvbGUifSxleHBvcnRBczpbIm1hdE1lbnVJdGVtIl0sZmVhdHVyZXM6W1hlXSxhdHRyczpaeGUsbmdDb250ZW50U2VsZWN0b3JzOiR4ZSxkZWNsczo1LHZhcnM6Myxjb25zdHM6W1sxLCJtZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHQiXSxbIm1hdFJpcHBsZSIsIiIsMSwibWF0LW1kYy1tZW51LXJpcHBsZSIsMywibWF0UmlwcGxlRGlzYWJsZWQiLCJtYXRSaXBwbGVUcmlnZ2VyIl0sWyJjbGFzcyIsIm1hdC1tZGMtbWVudS1zdWJtZW51LWljb24iLCJ2aWV3Qm94IiwiMCAwIDUgMTAiLCJmb2N1c2FibGUiLCJmYWxzZSIsNCwibmdJZiJdLFsidmlld0JveCIsIjAgMCA1IDEwIiwiZm9jdXNhYmxlIiwiZmFsc2UiLDEsIm1hdC1tZGMtbWVudS1zdWJtZW51LWljb24iXSxbInBvaW50cyIsIjAsMCA1LDUgMCwxMCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGZuKEp4ZSksVHQoMCksZigxLCJzcGFuIiwwKSxUdCgyLDEpLGcoKSxrKDMsImRpdiIsMSksUyg0LEt4ZSwyLDAsInN2ZyIsMikpLDImZSYmKHYoMyksYigibWF0UmlwcGxlRGlzYWJsZWQiLGkuZGlzYWJsZVJpcHBsZXx8aS5kaXNhYmxlZCkoIm1hdFJpcHBsZVRyaWdnZXIiLGkuX2dldEhvc3RFbGVtZW50KCkpLHYoMSksYigibmdJZiIsaS5fdHJpZ2dlcnNTdWJtZW51KSl9LGRlcGVuZGVuY2llczpbTmUsS2ldLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGlDZT1uZXcgdGUoIk1hdE1lbnVDb250ZW50IiksX0U9e3RyYW5zZm9ybU1lbnU6ZnIoInRyYW5zZm9ybU1lbnUiLFtTaSgidm9pZCIscm4oe29wYWNpdHk6MCx0cmFuc2Zvcm06InNjYWxlKDAuOCkifSkpLGJpKCJ2b2lkID0+IGVudGVyIixNaSgiMTIwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSkiLHJuKHtvcGFjaXR5OjEsdHJhbnNmb3JtOiJzY2FsZSgxKSJ9KSkpLGJpKCIqID0+IHZvaWQiLE1pKCIxMDBtcyAyNW1zIGxpbmVhciIscm4oe29wYWNpdHk6MH0pKSldKSxmYWRlSW5JdGVtczpmcigiZmFkZUluSXRlbXMiLFtTaSgic2hvd2luZyIscm4oe29wYWNpdHk6MX0pKSxiaSgidm9pZCA9PiAqIixbcm4oe29wYWNpdHk6MH0pLE1pKCI0MDBtcyAxMDBtcyBjdWJpYy1iZXppZXIoMC41NSwgMCwgMC41NSwgMC4yKSIpXSldKX0sckNlPTAsaVg9bmV3IHRlKCJtYXQtbWVudS1kZWZhdWx0LW9wdGlvbnMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJue292ZXJsYXBUcmlnZ2VyOiExLHhQb3NpdGlvbjoiYWZ0ZXIiLHlQb3NpdGlvbjoiYmVsb3ciLGJhY2tkcm9wQ2xhc3M6ImNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wIn19fSksb3k9KCgpPT57Y2xhc3MgbntnZXQgeFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3hQb3NpdGlvbn1zZXQgeFBvc2l0aW9uKGUpe3RoaXMuX3hQb3NpdGlvbj1lLHRoaXMuc2V0UG9zaXRpb25DbGFzc2VzKCl9Z2V0IHlQb3NpdGlvbigpe3JldHVybiB0aGlzLl95UG9zaXRpb259c2V0IHlQb3NpdGlvbihlKXt0aGlzLl95UG9zaXRpb249ZSx0aGlzLnNldFBvc2l0aW9uQ2xhc3NlcygpfWdldCBvdmVybGFwVHJpZ2dlcigpe3JldHVybiB0aGlzLl9vdmVybGFwVHJpZ2dlcn1zZXQgb3ZlcmxhcFRyaWdnZXIoZSl7dGhpcy5fb3ZlcmxhcFRyaWdnZXI9dnQoZSl9Z2V0IGhhc0JhY2tkcm9wKCl7cmV0dXJuIHRoaXMuX2hhc0JhY2tkcm9wfXNldCBoYXNCYWNrZHJvcChlKXt0aGlzLl9oYXNCYWNrZHJvcD12dChlKX1zZXQgcGFuZWxDbGFzcyhlKXtsZXQgaT10aGlzLl9wcmV2aW91c1BhbmVsQ2xhc3M7aSYmaS5sZW5ndGgmJmkuc3BsaXQoIiAiKS5mb3JFYWNoKHI9Pnt0aGlzLl9jbGFzc0xpc3Rbcl09ITF9KSx0aGlzLl9wcmV2aW91c1BhbmVsQ2xhc3M9ZSxlJiZlLmxlbmd0aCYmKGUuc3BsaXQoIiAiKS5mb3JFYWNoKHI9Pnt0aGlzLl9jbGFzc0xpc3Rbcl09ITB9KSx0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NOYW1lPSIiKX1nZXQgY2xhc3NMaXN0KCl7cmV0dXJuIHRoaXMucGFuZWxDbGFzc31zZXQgY2xhc3NMaXN0KGUpe3RoaXMucGFuZWxDbGFzcz1lfWNvbnN0cnVjdG9yKGUsaSxyLG8pe3RoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9uZ1pvbmU9aSx0aGlzLl9kZWZhdWx0T3B0aW9ucz1yLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPW8sdGhpcy5feFBvc2l0aW9uPXRoaXMuX2RlZmF1bHRPcHRpb25zLnhQb3NpdGlvbix0aGlzLl95UG9zaXRpb249dGhpcy5fZGVmYXVsdE9wdGlvbnMueVBvc2l0aW9uLHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcz1uZXcgUGEsdGhpcy5fY2xhc3NMaXN0PXt9LHRoaXMuX3BhbmVsQW5pbWF0aW9uU3RhdGU9InZvaWQiLHRoaXMuX2FuaW1hdGlvbkRvbmU9bmV3IEVlLHRoaXMub3ZlcmxheVBhbmVsQ2xhc3M9dGhpcy5fZGVmYXVsdE9wdGlvbnMub3ZlcmxheVBhbmVsQ2xhc3N8fCIiLHRoaXMuYmFja2Ryb3BDbGFzcz10aGlzLl9kZWZhdWx0T3B0aW9ucy5iYWNrZHJvcENsYXNzLHRoaXMuX292ZXJsYXBUcmlnZ2VyPXRoaXMuX2RlZmF1bHRPcHRpb25zLm92ZXJsYXBUcmlnZ2VyLHRoaXMuX2hhc0JhY2tkcm9wPXRoaXMuX2RlZmF1bHRPcHRpb25zLmhhc0JhY2tkcm9wLHRoaXMuY2xvc2VkPW5ldyBGLHRoaXMuY2xvc2U9dGhpcy5jbG9zZWQsdGhpcy5wYW5lbElkPSJtYXQtbWVudS1wYW5lbC0iK3JDZSsrfW5nT25Jbml0KCl7dGhpcy5zZXRQb3NpdGlvbkNsYXNzZXMoKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLl91cGRhdGVEaXJlY3REZXNjZW5kYW50cygpLHRoaXMuX2tleU1hbmFnZXI9bmV3IGt1KHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcykud2l0aFdyYXAoKS53aXRoVHlwZUFoZWFkKCkud2l0aEhvbWVBbmRFbmQoKSx0aGlzLl9rZXlNYW5hZ2VyLnRhYk91dC5zdWJzY3JpYmUoKCk9PnRoaXMuY2xvc2VkLmVtaXQoInRhYiIpKSx0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMuY2hhbmdlcy5waXBlKGtuKHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcyksSm4oZT0+dG4oLi4uZS5tYXAoaT0+aS5fZm9jdXNlZCkpKSkuc3Vic2NyaWJlKGU9PnRoaXMuX2tleU1hbmFnZXIudXBkYXRlQWN0aXZlSXRlbShlKSksdGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zLmNoYW5nZXMuc3Vic2NyaWJlKGU9PntsZXQgaT10aGlzLl9rZXlNYW5hZ2VyO2lmKCJlbnRlciI9PT10aGlzLl9wYW5lbEFuaW1hdGlvblN0YXRlJiZpLmFjdGl2ZUl0ZW0/Ll9oYXNGb2N1cygpKXtsZXQgcj1lLnRvQXJyYXkoKSxvPU1hdGgubWF4KDAsTWF0aC5taW4oci5sZW5ndGgtMSxpLmFjdGl2ZUl0ZW1JbmRleHx8MCkpO3Jbb10mJiFyW29dLmRpc2FibGVkP2kuc2V0QWN0aXZlSXRlbShvKTppLnNldE5leHRJdGVtQWN0aXZlKCl9fSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9rZXlNYW5hZ2VyPy5kZXN0cm95KCksdGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zLmRlc3Ryb3koKSx0aGlzLmNsb3NlZC5jb21wbGV0ZSgpLHRoaXMuX2ZpcnN0SXRlbUZvY3VzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpfV9ob3ZlcmVkKCl7cmV0dXJuIHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5jaGFuZ2VzLnBpcGUoa24odGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zKSxKbihpPT50biguLi5pLm1hcChyPT5yLl9ob3ZlcmVkKSkpKX1hZGRJdGVtKGUpe31yZW1vdmVJdGVtKGUpe31faGFuZGxlS2V5ZG93bihlKXtsZXQgaT1lLmtleUNvZGUscj10aGlzLl9rZXlNYW5hZ2VyO3N3aXRjaChpKXtjYXNlIDI3Ok9yKGUpfHwoZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuY2xvc2VkLmVtaXQoImtleWRvd24iKSk7YnJlYWs7Y2FzZSAzNzp0aGlzLnBhcmVudE1lbnUmJiJsdHIiPT09dGhpcy5kaXJlY3Rpb24mJnRoaXMuY2xvc2VkLmVtaXQoImtleWRvd24iKTticmVhaztjYXNlIDM5OnRoaXMucGFyZW50TWVudSYmInJ0bCI9PT10aGlzLmRpcmVjdGlvbiYmdGhpcy5jbG9zZWQuZW1pdCgia2V5ZG93biIpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuKDM4PT09aXx8NDA9PT1pKSYmci5zZXRGb2N1c09yaWdpbigia2V5Ym9hcmQiKSx2b2lkIHIub25LZXlkb3duKGUpfWUuc3RvcFByb3BhZ2F0aW9uKCl9Zm9jdXNGaXJzdEl0ZW0oZT0icHJvZ3JhbSIpe3RoaXMuX2ZpcnN0SXRlbUZvY3VzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpLHRoaXMuX2ZpcnN0SXRlbUZvY3VzU3Vic2NyaXB0aW9uPXRoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKEx0KDEpKS5zdWJzY3JpYmUoKCk9PntsZXQgaT1udWxsO2lmKHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5sZW5ndGgmJihpPXRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5maXJzdC5fZ2V0SG9zdEVsZW1lbnQoKS5jbG9zZXN0KCdbcm9sZT0ibWVudSJdJykpLCFpfHwhaS5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSl7bGV0IHI9dGhpcy5fa2V5TWFuYWdlcjtyLnNldEZvY3VzT3JpZ2luKGUpLnNldEZpcnN0SXRlbUFjdGl2ZSgpLCFyLmFjdGl2ZUl0ZW0mJmkmJmkuZm9jdXMoKX19KX1yZXNldEFjdGl2ZUl0ZW0oKXt0aGlzLl9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oLTEpfXNldEVsZXZhdGlvbihlKXtsZXQgaT1NYXRoLm1pbih0aGlzLl9iYXNlRWxldmF0aW9uK2UsMjQpLHI9YCR7dGhpcy5fZWxldmF0aW9uUHJlZml4fSR7aX1gLG89T2JqZWN0LmtleXModGhpcy5fY2xhc3NMaXN0KS5maW5kKGE9PmEuc3RhcnRzV2l0aCh0aGlzLl9lbGV2YXRpb25QcmVmaXgpKTsoIW98fG89PT10aGlzLl9wcmV2aW91c0VsZXZhdGlvbikmJih0aGlzLl9wcmV2aW91c0VsZXZhdGlvbiYmKHRoaXMuX2NsYXNzTGlzdFt0aGlzLl9wcmV2aW91c0VsZXZhdGlvbl09ITEpLHRoaXMuX2NsYXNzTGlzdFtyXT0hMCx0aGlzLl9wcmV2aW91c0VsZXZhdGlvbj1yKX1zZXRQb3NpdGlvbkNsYXNzZXMoZT10aGlzLnhQb3NpdGlvbixpPXRoaXMueVBvc2l0aW9uKXtsZXQgcj10aGlzLl9jbGFzc0xpc3Q7clsibWF0LW1lbnUtYmVmb3JlIl09ImJlZm9yZSI9PT1lLHJbIm1hdC1tZW51LWFmdGVyIl09ImFmdGVyIj09PWUsclsibWF0LW1lbnUtYWJvdmUiXT0iYWJvdmUiPT09aSxyWyJtYXQtbWVudS1iZWxvdyJdPSJiZWxvdyI9PT1pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPy5tYXJrRm9yQ2hlY2soKX1fc3RhcnRBbmltYXRpb24oKXt0aGlzLl9wYW5lbEFuaW1hdGlvblN0YXRlPSJlbnRlciJ9X3Jlc2V0QW5pbWF0aW9uKCl7dGhpcy5fcGFuZWxBbmltYXRpb25TdGF0ZT0idm9pZCJ9X29uQW5pbWF0aW9uRG9uZShlKXt0aGlzLl9hbmltYXRpb25Eb25lLm5leHQoZSksdGhpcy5faXNBbmltYXRpbmc9ITF9X29uQW5pbWF0aW9uU3RhcnQoZSl7dGhpcy5faXNBbmltYXRpbmc9ITAsImVudGVyIj09PWUudG9TdGF0ZSYmMD09PXRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbUluZGV4JiYoZS5lbGVtZW50LnNjcm9sbFRvcD0wKX1fdXBkYXRlRGlyZWN0RGVzY2VuZGFudHMoKXt0aGlzLl9hbGxJdGVtcy5jaGFuZ2VzLnBpcGUoa24odGhpcy5fYWxsSXRlbXMpKS5zdWJzY3JpYmUoZT0+e3RoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5yZXNldChlLmZpbHRlcihpPT5pLl9wYXJlbnRNZW51PT09dGhpcykpLHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5ub3RpZnlPbkNoYW5nZXMoKX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKHhlKSxDKG90KSxDKGlYKSxDKFF0KSl9LG4uXHUwMjc1ZGlyPU1lKHt0eXBlOm4sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxpLHIpe2lmKDEmZSYmKEJuKHIsaUNlLDUpLEJuKHIsRWQsNSksQm4ocixFZCw0KSksMiZlKXtsZXQgbztiZShvPXZlKCkpJiYoaS5sYXp5Q29udGVudD1vLmZpcnN0KSxiZShvPXZlKCkpJiYoaS5fYWxsSXRlbXM9byksYmUobz12ZSgpKSYmKGkuaXRlbXM9byl9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJlVlKG9pLDUpLDImZSl7bGV0IHI7YmUocj12ZSgpKSYmKGkudGVtcGxhdGVSZWY9ci5maXJzdCl9fSxpbnB1dHM6e2JhY2tkcm9wQ2xhc3M6ImJhY2tkcm9wQ2xhc3MiLGFyaWFMYWJlbDpbImFyaWEtbGFiZWwiLCJhcmlhTGFiZWwiXSxhcmlhTGFiZWxsZWRieTpbImFyaWEtbGFiZWxsZWRieSIsImFyaWFMYWJlbGxlZGJ5Il0sYXJpYURlc2NyaWJlZGJ5OlsiYXJpYS1kZXNjcmliZWRieSIsImFyaWFEZXNjcmliZWRieSJdLHhQb3NpdGlvbjoieFBvc2l0aW9uIix5UG9zaXRpb246InlQb3NpdGlvbiIsb3ZlcmxhcFRyaWdnZXI6Im92ZXJsYXBUcmlnZ2VyIixoYXNCYWNrZHJvcDoiaGFzQmFja2Ryb3AiLHBhbmVsQ2xhc3M6WyJjbGFzcyIsInBhbmVsQ2xhc3MiXSxjbGFzc0xpc3Q6ImNsYXNzTGlzdCJ9LG91dHB1dHM6e2Nsb3NlZDoiY2xvc2VkIixjbG9zZToiY2xvc2UifX0pLG59KSgpLFh1PSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBveXtjb25zdHJ1Y3RvcihlLGkscixvKXtzdXBlcihlLGkscixvKSx0aGlzLl9lbGV2YXRpb25QcmVmaXg9Im1hdC1lbGV2YXRpb24teiIsdGhpcy5fYmFzZUVsZXZhdGlvbj04fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKHhlKSxDKG90KSxDKGlYKSxDKFF0KSl9LG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LW1lbnUiXV0saG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJkJlKCJhcmlhLWxhYmVsIixudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixudWxsKSgiYXJpYS1kZXNjcmliZWRieSIsbnVsbCl9LGV4cG9ydEFzOlsibWF0TWVudSJdLGZlYXR1cmVzOltWdChbe3Byb3ZpZGU6SzIsdXNlRXhpc3Rpbmc6bn1dKSxYZV0sbmdDb250ZW50U2VsZWN0b3JzOnRDZSxkZWNsczoxLHZhcnM6MCxjb25zdHM6W1sidGFiaW5kZXgiLCItMSIsInJvbGUiLCJtZW51IiwxLCJtYXQtbWRjLW1lbnUtcGFuZWwiLCJtZGMtbWVudS1zdXJmYWNlIiwibWRjLW1lbnUtc3VyZmFjZS0tb3BlbiIsIm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljIiwzLCJpZCIsIm5nQ2xhc3MiLCJrZXlkb3duIiwiY2xpY2siXSxbMSwibWF0LW1kYy1tZW51LWNvbnRlbnQiLCJtZGMtbGlzdCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGZuKCksUygwLGVDZSwzLDYsIm5nLXRlbXBsYXRlIikpfSxkZXBlbmRlbmNpZXM6W3duXSxzdHlsZXM6WycubWRjLW1lbnUtc3VyZmFjZXtkaXNwbGF5Om5vbmU7cG9zaXRpb246YWJzb2x1dGU7Ym94LXNpemluZzpib3JkZXItYm94O21heC13aWR0aDp2YXIoLS1tZGMtbWVudS1tYXgtd2lkdGgsIGNhbGMoMTAwdncgLSAzMnB4KSk7bWF4LWhlaWdodDp2YXIoLS1tZGMtbWVudS1tYXgtaGVpZ2h0LCBjYWxjKDEwMHZoIC0gMzJweCkpO21hcmdpbjowO3BhZGRpbmc6MDt0cmFuc2Zvcm06c2NhbGUoMSk7dHJhbnNmb3JtLW9yaWdpbjp0b3AgbGVmdDtvcGFjaXR5OjA7b3ZlcmZsb3c6YXV0bzt3aWxsLWNoYW5nZTp0cmFuc2Zvcm0sb3BhY2l0eTt6LWluZGV4Ojg7Ym9yZGVyLXJhZGl1czp2YXIoLS1tZGMtc2hhcGUtbWVkaXVtLCA0cHgpO3RyYW5zZm9ybS1vcmlnaW4tbGVmdDp0b3AgbGVmdDt0cmFuc2Zvcm0tb3JpZ2luLXJpZ2h0OnRvcCByaWdodH0ubWRjLW1lbnUtc3VyZmFjZTpmb2N1c3tvdXRsaW5lOm5vbmV9Lm1kYy1tZW51LXN1cmZhY2UtLWFuaW1hdGluZy1vcGVue2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RyYW5zZm9ybTpzY2FsZSgwLjgpO29wYWNpdHk6MH0ubWRjLW1lbnUtc3VyZmFjZS0tb3BlbntkaXNwbGF5OmlubGluZS1ibG9jazt0cmFuc2Zvcm06c2NhbGUoMSk7b3BhY2l0eToxfS5tZGMtbWVudS1zdXJmYWNlLS1hbmltYXRpbmctY2xvc2Vke2Rpc3BsYXk6aW5saW5lLWJsb2NrO29wYWNpdHk6MH1bZGlyPXJ0bF0gLm1kYy1tZW51LXN1cmZhY2UsLm1kYy1tZW51LXN1cmZhY2VbZGlyPXJ0bF17dHJhbnNmb3JtLW9yaWdpbi1sZWZ0OnRvcCByaWdodDt0cmFuc2Zvcm0tb3JpZ2luLXJpZ2h0OnRvcCBsZWZ0fS5tZGMtbWVudS1zdXJmYWNlLS1hbmNob3J7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6dmlzaWJsZX0ubWRjLW1lbnUtc3VyZmFjZS0tZml4ZWR7cG9zaXRpb246Zml4ZWR9Lm1kYy1tZW51LXN1cmZhY2UtLWZ1bGx3aWR0aHt3aWR0aDoxMDAlfW1hdC1tZW51e2Rpc3BsYXk6bm9uZX0ubWF0LW1kYy1tZW51LWNvbnRlbnR7bWFyZ2luOjA7cGFkZGluZzo4cHggMDtsaXN0LXN0eWxlLXR5cGU6bm9uZX0ubWF0LW1kYy1tZW51LWNvbnRlbnQ6Zm9jdXN7b3V0bGluZTpub25lfS5tYXQtbWRjLW1lbnUtcGFuZWwubmctYW5pbWF0aW5ne3BvaW50ZXItZXZlbnRzOm5vbmV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1kYy1tZW51LXBhbmVse291dGxpbmU6c29saWQgMXB4fS5tYXQtbWRjLW1lbnUtcGFuZWwubWF0LW1kYy1tZW51LXBhbmVse21pbi13aWR0aDoxMTJweDttYXgtd2lkdGg6MjgwcHg7b3ZlcmZsb3c6YXV0bzstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaDtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1tZW51LWl0ZW17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOnJlbGF0aXZlO2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3BhZGRpbmctbGVmdDoxNnB4O3BhZGRpbmctcmlnaHQ6MTZweDstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7Y3Vyc29yOnBvaW50ZXI7d2lkdGg6MTAwJTt0ZXh0LWFsaWduOmxlZnQ7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7YmFja2dyb3VuZDpub25lO3RleHQtZGVjb3JhdGlvbjpub25lO21hcmdpbjowO21pbi1oZWlnaHQ6NDhweH0ubWF0LW1kYy1tZW51LWl0ZW06Zm9jdXN7b3V0bGluZTpub25lfVtkaXI9cnRsXSAubWF0LW1kYy1tZW51LWl0ZW0sLm1hdC1tZGMtbWVudS1pdGVtW2Rpcj1ydGxde3BhZGRpbmctbGVmdDoxNnB4O3BhZGRpbmctcmlnaHQ6MTZweH0ubWF0LW1kYy1tZW51LWl0ZW06Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1tZGMtbWVudS1pdGVtLm1kYy1saXN0LWl0ZW17YWxpZ24taXRlbXM6Y2VudGVyfS5tYXQtbWRjLW1lbnUtaXRlbVtkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHQ7b3BhY2l0eTouMzh9Lm1hdC1tZGMtbWVudS1pdGVtW2Rpc2FibGVkXTo6YWZ0ZXJ7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtjb250ZW50OiIiO3RvcDowO2xlZnQ6MDtib3R0b206MDtyaWdodDowfS5tYXQtbWRjLW1lbnUtaXRlbSAubWF0LWljb257bWFyZ2luLXJpZ2h0OjE2cHh9W2Rpcj1ydGxdIC5tYXQtbWRjLW1lbnUtaXRlbXt0ZXh0LWFsaWduOnJpZ2h0fVtkaXI9cnRsXSAubWF0LW1kYy1tZW51LWl0ZW0gLm1hdC1pY29ue21hcmdpbi1yaWdodDowO21hcmdpbi1sZWZ0OjE2cHh9Lm1hdC1tZGMtbWVudS1pdGVtIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7d2hpdGUtc3BhY2U6bm9ybWFsfS5tYXQtbWRjLW1lbnUtaXRlbS5tYXQtbWRjLW1lbnUtaXRlbS1zdWJtZW51LXRyaWdnZXJ7cGFkZGluZy1yaWdodDozMnB4fVtkaXI9cnRsXSAubWF0LW1kYy1tZW51LWl0ZW0ubWF0LW1kYy1tZW51LWl0ZW0tc3VibWVudS10cmlnZ2Vye3BhZGRpbmctcmlnaHQ6MTZweDtwYWRkaW5nLWxlZnQ6MzJweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWRjLW1lbnUtaXRlbXttYXJnaW4tdG9wOjFweH0ubWF0LW1kYy1tZW51LXN1Ym1lbnUtaWNvbntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3JpZ2h0OjE2cHg7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSk7d2lkdGg6NXB4O2hlaWdodDoxMHB4O2ZpbGw6Y3VycmVudENvbG9yfVtkaXI9cnRsXSAubWF0LW1kYy1tZW51LXN1Ym1lbnUtaWNvbntyaWdodDphdXRvO2xlZnQ6MTZweDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKSBzY2FsZVgoLTEpfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZGMtbWVudS1zdWJtZW51LWljb257ZmlsbDpDYW52YXNUZXh0fS5tYXQtbWRjLW1lbnUtaXRlbSAubWF0LW1kYy1tZW51LXJpcHBsZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lfSddLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W19FLnRyYW5zZm9ybU1lbnUsX0UuZmFkZUluSXRlbXNdfSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHJYPW5ldyB0ZSgibWF0LW1lbnUtc2Nyb2xsLXN0cmF0ZWd5Iiksc0NlPXtwcm92aWRlOnJYLGRlcHM6W09pXSx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4pe3JldHVybigpPT5uLnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpfX0sblg9emEoe3Bhc3NpdmU6ITB9KSxsQ2U9KCgpPT57Y2xhc3MgbntnZXQgX2RlcHJlY2F0ZWRNYXRNZW51VHJpZ2dlckZvcigpe3JldHVybiB0aGlzLm1lbnV9c2V0IF9kZXByZWNhdGVkTWF0TWVudVRyaWdnZXJGb3IoZSl7dGhpcy5tZW51PWV9Z2V0IG1lbnUoKXtyZXR1cm4gdGhpcy5fbWVudX1zZXQgbWVudShlKXtlIT09dGhpcy5fbWVudSYmKHRoaXMuX21lbnU9ZSx0aGlzLl9tZW51Q2xvc2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSxlJiYodGhpcy5fbWVudUNsb3NlU3Vic2NyaXB0aW9uPWUuY2xvc2Uuc3Vic2NyaWJlKGk9Pnt0aGlzLl9kZXN0cm95TWVudShpKSwoImNsaWNrIj09PWl8fCJ0YWIiPT09aSkmJnRoaXMuX3BhcmVudE1hdGVyaWFsTWVudSYmdGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51LmNsb3NlZC5lbWl0KGkpfSkpLHRoaXMuX21lbnVJdGVtSW5zdGFuY2U/Ll9zZXRUcmlnZ2Vyc1N1Ym1lbnUodGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKSkpfWNvbnN0cnVjdG9yKGUsaSxyLG8sYSxzLGwsYyxkKXt0aGlzLl9vdmVybGF5PWUsdGhpcy5fZWxlbWVudD1pLHRoaXMuX3ZpZXdDb250YWluZXJSZWY9cix0aGlzLl9tZW51SXRlbUluc3RhbmNlPXMsdGhpcy5fZGlyPWwsdGhpcy5fZm9jdXNNb25pdG9yPWMsdGhpcy5fbmdab25lPWQsdGhpcy5fb3ZlcmxheVJlZj1udWxsLHRoaXMuX21lbnVPcGVuPSExLHRoaXMuX2Nsb3NpbmdBY3Rpb25zU3Vic2NyaXB0aW9uPUVuLkVNUFRZLHRoaXMuX2hvdmVyU3Vic2NyaXB0aW9uPUVuLkVNUFRZLHRoaXMuX21lbnVDbG9zZVN1YnNjcmlwdGlvbj1Fbi5FTVBUWSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj0kbihRdCksdGhpcy5faGFuZGxlVG91Y2hTdGFydD11PT57VnYodSl8fCh0aGlzLl9vcGVuZWRCeT0idG91Y2giKX0sdGhpcy5fb3BlbmVkQnk9dm9pZCAwLHRoaXMucmVzdG9yZUZvY3VzPSEwLHRoaXMubWVudU9wZW5lZD1uZXcgRix0aGlzLm9uTWVudU9wZW49dGhpcy5tZW51T3BlbmVkLHRoaXMubWVudUNsb3NlZD1uZXcgRix0aGlzLm9uTWVudUNsb3NlPXRoaXMubWVudUNsb3NlZCx0aGlzLl9zY3JvbGxTdHJhdGVneT1vLHRoaXMuX3BhcmVudE1hdGVyaWFsTWVudT1hIGluc3RhbmNlb2Ygb3k/YTp2b2lkIDAsaS5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX2hhbmRsZVRvdWNoU3RhcnQsblgpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX2hhbmRsZUhvdmVyKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9vdmVybGF5UmVmJiYodGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKCksdGhpcy5fb3ZlcmxheVJlZj1udWxsKSx0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5faGFuZGxlVG91Y2hTdGFydCxuWCksdGhpcy5fbWVudUNsb3NlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9ob3ZlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfWdldCBtZW51T3Blbigpe3JldHVybiB0aGlzLl9tZW51T3Blbn1nZXQgZGlyKCl7cmV0dXJuIHRoaXMuX2RpciYmInJ0bCI9PT10aGlzLl9kaXIudmFsdWU/InJ0bCI6Imx0ciJ9dHJpZ2dlcnNTdWJtZW51KCl7cmV0dXJuISEodGhpcy5fbWVudUl0ZW1JbnN0YW5jZSYmdGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51JiZ0aGlzLm1lbnUpfXRvZ2dsZU1lbnUoKXtyZXR1cm4gdGhpcy5fbWVudU9wZW4/dGhpcy5jbG9zZU1lbnUoKTp0aGlzLm9wZW5NZW51KCl9b3Blbk1lbnUoKXtsZXQgZT10aGlzLm1lbnU7aWYodGhpcy5fbWVudU9wZW58fCFlKXJldHVybjtsZXQgaT10aGlzLl9jcmVhdGVPdmVybGF5KGUpLHI9aS5nZXRDb25maWcoKSxvPXIucG9zaXRpb25TdHJhdGVneTt0aGlzLl9zZXRQb3NpdGlvbihlLG8pLHIuaGFzQmFja2Ryb3A9bnVsbD09ZS5oYXNCYWNrZHJvcD8hdGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKTplLmhhc0JhY2tkcm9wLGkuYXR0YWNoKHRoaXMuX2dldFBvcnRhbChlKSksZS5sYXp5Q29udGVudCYmZS5sYXp5Q29udGVudC5hdHRhY2godGhpcy5tZW51RGF0YSksdGhpcy5fY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb249dGhpcy5fbWVudUNsb3NpbmdBY3Rpb25zKCkuc3Vic2NyaWJlKCgpPT50aGlzLmNsb3NlTWVudSgpKSx0aGlzLl9pbml0TWVudShlKSxlIGluc3RhbmNlb2Ygb3kmJihlLl9zdGFydEFuaW1hdGlvbigpLGUuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5jaGFuZ2VzLnBpcGUoaXQoZS5jbG9zZSkpLnN1YnNjcmliZSgoKT0+e28ud2l0aExvY2tlZFBvc2l0aW9uKCExKS5yZWFwcGx5TGFzdFBvc2l0aW9uKCksby53aXRoTG9ja2VkUG9zaXRpb24oITApfSkpfWNsb3NlTWVudSgpe3RoaXMubWVudT8uY2xvc2UuZW1pdCgpfWZvY3VzKGUsaSl7dGhpcy5fZm9jdXNNb25pdG9yJiZlP3RoaXMuX2ZvY3VzTW9uaXRvci5mb2N1c1ZpYSh0aGlzLl9lbGVtZW50LGUsaSk6dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKGkpfXVwZGF0ZVBvc2l0aW9uKCl7dGhpcy5fb3ZlcmxheVJlZj8udXBkYXRlUG9zaXRpb24oKX1fZGVzdHJveU1lbnUoZSl7aWYoIXRoaXMuX292ZXJsYXlSZWZ8fCF0aGlzLm1lbnVPcGVuKXJldHVybjtsZXQgaT10aGlzLm1lbnU7dGhpcy5fY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpLHRoaXMucmVzdG9yZUZvY3VzJiYoImtleWRvd24iPT09ZXx8IXRoaXMuX29wZW5lZEJ5fHwhdGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKSkmJnRoaXMuZm9jdXModGhpcy5fb3BlbmVkQnkpLHRoaXMuX29wZW5lZEJ5PXZvaWQgMCxpIGluc3RhbmNlb2Ygb3k/KGkuX3Jlc2V0QW5pbWF0aW9uKCksaS5sYXp5Q29udGVudD9pLl9hbmltYXRpb25Eb25lLnBpcGUoT2Uocj0+InZvaWQiPT09ci50b1N0YXRlKSxMdCgxKSxpdChpLmxhenlDb250ZW50Ll9hdHRhY2hlZCkpLnN1YnNjcmliZSh7bmV4dDooKT0+aS5sYXp5Q29udGVudC5kZXRhY2goKSxjb21wbGV0ZTooKT0+dGhpcy5fc2V0SXNNZW51T3BlbighMSl9KTp0aGlzLl9zZXRJc01lbnVPcGVuKCExKSk6KHRoaXMuX3NldElzTWVudU9wZW4oITEpLGk/LmxhenlDb250ZW50Py5kZXRhY2goKSl9X2luaXRNZW51KGUpe2UucGFyZW50TWVudT10aGlzLnRyaWdnZXJzU3VibWVudSgpP3RoaXMuX3BhcmVudE1hdGVyaWFsTWVudTp2b2lkIDAsZS5kaXJlY3Rpb249dGhpcy5kaXIsdGhpcy5fc2V0TWVudUVsZXZhdGlvbihlKSxlLmZvY3VzRmlyc3RJdGVtKHRoaXMuX29wZW5lZEJ5fHwicHJvZ3JhbSIpLHRoaXMuX3NldElzTWVudU9wZW4oITApfV9zZXRNZW51RWxldmF0aW9uKGUpe2lmKGUuc2V0RWxldmF0aW9uKXtsZXQgaT0wLHI9ZS5wYXJlbnRNZW51O2Zvcig7cjspaSsrLHI9ci5wYXJlbnRNZW51O2Uuc2V0RWxldmF0aW9uKGkpfX1fc2V0SXNNZW51T3BlbihlKXtlIT09dGhpcy5fbWVudU9wZW4mJih0aGlzLl9tZW51T3Blbj1lLHRoaXMuX21lbnVPcGVuP3RoaXMubWVudU9wZW5lZC5lbWl0KCk6dGhpcy5tZW51Q2xvc2VkLmVtaXQoKSx0aGlzLnRyaWdnZXJzU3VibWVudSgpJiZ0aGlzLl9tZW51SXRlbUluc3RhbmNlLl9zZXRIaWdobGlnaHRlZChlKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9X2NyZWF0ZU92ZXJsYXkoZSl7aWYoIXRoaXMuX292ZXJsYXlSZWYpe2xldCBpPXRoaXMuX2dldE92ZXJsYXlDb25maWcoZSk7dGhpcy5fc3Vic2NyaWJlVG9Qb3NpdGlvbnMoZSxpLnBvc2l0aW9uU3RyYXRlZ3kpLHRoaXMuX292ZXJsYXlSZWY9dGhpcy5fb3ZlcmxheS5jcmVhdGUoaSksdGhpcy5fb3ZlcmxheVJlZi5rZXlkb3duRXZlbnRzKCkuc3Vic2NyaWJlKCl9cmV0dXJuIHRoaXMuX292ZXJsYXlSZWZ9X2dldE92ZXJsYXlDb25maWcoZSl7cmV0dXJuIG5ldyBlbCh7cG9zaXRpb25TdHJhdGVneTp0aGlzLl9vdmVybGF5LnBvc2l0aW9uKCkuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLl9lbGVtZW50KS53aXRoTG9ja2VkUG9zaXRpb24oKS53aXRoR3Jvd0FmdGVyT3BlbigpLndpdGhUcmFuc2Zvcm1PcmlnaW5PbigiLm1hdC1tZW51LXBhbmVsLCAubWF0LW1kYy1tZW51LXBhbmVsIiksYmFja2Ryb3BDbGFzczplLmJhY2tkcm9wQ2xhc3N8fCJjZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcCIscGFuZWxDbGFzczplLm92ZXJsYXlQYW5lbENsYXNzLHNjcm9sbFN0cmF0ZWd5OnRoaXMuX3Njcm9sbFN0cmF0ZWd5KCksZGlyZWN0aW9uOnRoaXMuX2Rpcn0pfV9zdWJzY3JpYmVUb1Bvc2l0aW9ucyhlLGkpe2Uuc2V0UG9zaXRpb25DbGFzc2VzJiZpLnBvc2l0aW9uQ2hhbmdlcy5zdWJzY3JpYmUocj0+e2xldCBvPSJzdGFydCI9PT1yLmNvbm5lY3Rpb25QYWlyLm92ZXJsYXlYPyJhZnRlciI6ImJlZm9yZSIsYT0idG9wIj09PXIuY29ubmVjdGlvblBhaXIub3ZlcmxheVk/ImJlbG93IjoiYWJvdmUiO3RoaXMuX25nWm9uZT90aGlzLl9uZ1pvbmUucnVuKCgpPT5lLnNldFBvc2l0aW9uQ2xhc3NlcyhvLGEpKTplLnNldFBvc2l0aW9uQ2xhc3NlcyhvLGEpfSl9X3NldFBvc2l0aW9uKGUsaSl7bGV0W3Isb109ImJlZm9yZSI9PT1lLnhQb3NpdGlvbj9bImVuZCIsInN0YXJ0Il06WyJzdGFydCIsImVuZCJdLFthLHNdPSJhYm92ZSI9PT1lLnlQb3NpdGlvbj9bImJvdHRvbSIsInRvcCJdOlsidG9wIiwiYm90dG9tIl0sW2wsY109W2Esc10sW2QsdV09W3Isb10scD0wO2lmKHRoaXMudHJpZ2dlcnNTdWJtZW51KCkpe2lmKHU9cj0iYmVmb3JlIj09PWUueFBvc2l0aW9uPyJzdGFydCI6ImVuZCIsbz1kPSJlbmQiPT09cj8ic3RhcnQiOiJlbmQiLHRoaXMuX3BhcmVudE1hdGVyaWFsTWVudSl7aWYobnVsbD09dGhpcy5fcGFyZW50SW5uZXJQYWRkaW5nKXtsZXQgaD10aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnUuaXRlbXMuZmlyc3Q7dGhpcy5fcGFyZW50SW5uZXJQYWRkaW5nPWg/aC5fZ2V0SG9zdEVsZW1lbnQoKS5vZmZzZXRUb3A6MH1wPSJib3R0b20iPT09YT90aGlzLl9wYXJlbnRJbm5lclBhZGRpbmc6LXRoaXMuX3BhcmVudElubmVyUGFkZGluZ319ZWxzZSBlLm92ZXJsYXBUcmlnZ2VyfHwobD0idG9wIj09PWE/ImJvdHRvbSI6InRvcCIsYz0idG9wIj09PXM/ImJvdHRvbSI6InRvcCIpO2kud2l0aFBvc2l0aW9ucyhbe29yaWdpblg6cixvcmlnaW5ZOmwsb3ZlcmxheVg6ZCxvdmVybGF5WTphLG9mZnNldFk6cH0se29yaWdpblg6byxvcmlnaW5ZOmwsb3ZlcmxheVg6dSxvdmVybGF5WTphLG9mZnNldFk6cH0se29yaWdpblg6cixvcmlnaW5ZOmMsb3ZlcmxheVg6ZCxvdmVybGF5WTpzLG9mZnNldFk6LXB9LHtvcmlnaW5YOm8sb3JpZ2luWTpjLG92ZXJsYXlYOnUsb3ZlcmxheVk6cyxvZmZzZXRZOi1wfV0pfV9tZW51Q2xvc2luZ0FjdGlvbnMoKXtsZXQgZT10aGlzLl9vdmVybGF5UmVmLmJhY2tkcm9wQ2xpY2soKSxpPXRoaXMuX292ZXJsYXlSZWYuZGV0YWNobWVudHMoKTtyZXR1cm4gdG4oZSx0aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnU/dGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51LmNsb3NlZDokdCgpLHRoaXMuX3BhcmVudE1hdGVyaWFsTWVudT90aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnUuX2hvdmVyZWQoKS5waXBlKE9lKGE9PmEhPT10aGlzLl9tZW51SXRlbUluc3RhbmNlKSxPZSgoKT0+dGhpcy5fbWVudU9wZW4pKTokdCgpLGkpfV9oYW5kbGVNb3VzZWRvd24oZSl7QnYoZSl8fCh0aGlzLl9vcGVuZWRCeT0wPT09ZS5idXR0b24/Im1vdXNlIjp2b2lkIDAsdGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKSYmZS5wcmV2ZW50RGVmYXVsdCgpKX1faGFuZGxlS2V5ZG93bihlKXtsZXQgaT1lLmtleUNvZGU7KDEzPT09aXx8MzI9PT1pKSYmKHRoaXMuX29wZW5lZEJ5PSJrZXlib2FyZCIpLHRoaXMudHJpZ2dlcnNTdWJtZW51KCkmJigzOT09PWkmJiJsdHIiPT09dGhpcy5kaXJ8fDM3PT09aSYmInJ0bCI9PT10aGlzLmRpcikmJih0aGlzLl9vcGVuZWRCeT0ia2V5Ym9hcmQiLHRoaXMub3Blbk1lbnUoKSl9X2hhbmRsZUNsaWNrKGUpe3RoaXMudHJpZ2dlcnNTdWJtZW51KCk/KGUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5vcGVuTWVudSgpKTp0aGlzLnRvZ2dsZU1lbnUoKX1faGFuZGxlSG92ZXIoKXshdGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKXx8IXRoaXMuX3BhcmVudE1hdGVyaWFsTWVudXx8KHRoaXMuX2hvdmVyU3Vic2NyaXB0aW9uPXRoaXMuX3BhcmVudE1hdGVyaWFsTWVudS5faG92ZXJlZCgpLnBpcGUoT2UoZT0+ZT09PXRoaXMuX21lbnVJdGVtSW5zdGFuY2UmJiFlLmRpc2FibGVkKSxScygwLE5tKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fb3BlbmVkQnk9Im1vdXNlIix0aGlzLm1lbnUgaW5zdGFuY2VvZiBveSYmdGhpcy5tZW51Ll9pc0FuaW1hdGluZz90aGlzLm1lbnUuX2FuaW1hdGlvbkRvbmUucGlwZShMdCgxKSxScygwLE5tKSxpdCh0aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnUuX2hvdmVyZWQoKSkpLnN1YnNjcmliZSgoKT0+dGhpcy5vcGVuTWVudSgpKTp0aGlzLm9wZW5NZW51KCl9KSl9X2dldFBvcnRhbChlKXtyZXR1cm4oIXRoaXMuX3BvcnRhbHx8dGhpcy5fcG9ydGFsLnRlbXBsYXRlUmVmIT09ZS50ZW1wbGF0ZVJlZikmJih0aGlzLl9wb3J0YWw9bmV3IFRvKGUudGVtcGxhdGVSZWYsdGhpcy5fdmlld0NvbnRhaW5lclJlZikpLHRoaXMuX3BvcnRhbH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhPaSksQyh4ZSksQyhlaSksQyhyWCksQyhLMiw4KSxDKEVkLDEwKSxDKHppLDgpLEMoZm8pLEMob3QpKX0sbi5cdTAyNzVkaXI9TWUoe3R5cGU6bixob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmQSgiY2xpY2siLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9oYW5kbGVDbGljayhvKX0pKCJtb3VzZWRvd24iLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9oYW5kbGVNb3VzZWRvd24obyl9KSgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUtleWRvd24obyl9KSwyJmUmJkJlKCJhcmlhLWhhc3BvcHVwIixpLm1lbnU/Im1lbnUiOm51bGwpKCJhcmlhLWV4cGFuZGVkIixpLm1lbnVPcGVuKSgiYXJpYS1jb250cm9scyIsaS5tZW51T3Blbj9pLm1lbnUucGFuZWxJZDpudWxsKX0saW5wdXRzOntfZGVwcmVjYXRlZE1hdE1lbnVUcmlnZ2VyRm9yOlsibWF0LW1lbnUtdHJpZ2dlci1mb3IiLCJfZGVwcmVjYXRlZE1hdE1lbnVUcmlnZ2VyRm9yIl0sbWVudTpbIm1hdE1lbnVUcmlnZ2VyRm9yIiwibWVudSJdLG1lbnVEYXRhOlsibWF0TWVudVRyaWdnZXJEYXRhIiwibWVudURhdGEiXSxyZXN0b3JlRm9jdXM6WyJtYXRNZW51VHJpZ2dlclJlc3RvcmVGb2N1cyIsInJlc3RvcmVGb2N1cyJdfSxvdXRwdXRzOnttZW51T3BlbmVkOiJtZW51T3BlbmVkIixvbk1lbnVPcGVuOiJvbk1lbnVPcGVuIixtZW51Q2xvc2VkOiJtZW51Q2xvc2VkIixvbk1lbnVDbG9zZToib25NZW51Q2xvc2UifX0pLG59KSgpLFl1PSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBsQ2V7fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9WG4obikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9TWUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibWF0LW1lbnUtdHJpZ2dlci1mb3IiLCIiXSxbIiIsIm1hdE1lbnVUcmlnZ2VyRm9yIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LW1kYy1tZW51LXRyaWdnZXIiXSxleHBvcnRBczpbIm1hdE1lbnVUcmlnZ2VyIl0sZmVhdHVyZXM6W1hlXX0pLG59KSgpLFF1PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1IKHtwcm92aWRlcnM6W3NDZV0saW1wb3J0czpbRGUsX2EsZG4sRG8sSWMsZG5dfSksbn0pKCk7ZnVuY3Rpb24gY0NlKG4sdCl7MSZuJiZrKDAsIm1hdC1pY29uIiw4KX1mdW5jdGlvbiBkQ2Uobix0KXsxJm4mJmsoMCwibWF0LWljb24iLDkpfWZ1bmN0aW9uIHVDZShuLHQpezEmbiYmaygwLCJtYXQtaWNvbiIsMTApfXZhciBZYT0oKCk9PihmdW5jdGlvbihuKXtuW24uREVGQVVMVD0wXT0iREVGQVVMVCIsbltuLkRBUktfTU9ERV9PTj0xXT0iREFSS19NT0RFX09OIixuW24uREFSS19NT0RFX09GRj0yXT0iREFSS19NT0RFX09GRiJ9KFlhfHwoWWE9e30pKSxZYSkpKCksb1g9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuRGFya01vZGVPdmVycmlkZT1ZYSx0aGlzLm9uT3ZlcnJpZGVDaGFuZ2VkPW5ldyBGfWdldEJ1dHRvblRpdGxlKCl7bGV0IGU7c3dpdGNoKHRoaXMuZGFya01vZGVPdmVycmlkZSl7Y2FzZSBZYS5ERUZBVUxUOmU9IkJyb3dzZXIgZGVmYXVsdCI7YnJlYWs7Y2FzZSBZYS5EQVJLX01PREVfT046ZT0iRGFyayBtb2RlIjticmVhaztjYXNlIFlhLkRBUktfTU9ERV9PRkY6ZT0iTGlnaHQgbW9kZSJ9cmV0dXJuYEN1cnJlbnQgbW9kZTogWyR7ZX1dLiBTd2l0Y2ggYmV0d2VlbiBicm93c2VyIGRlZmF1bHQsIGxpZ2h0LCBvciBkYXJrIHRoZW1lLmB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbImFwcC1oZWFkZXItZGFyay1tb2RlLXRvZ2dsZS1jb21wb25lbnQiXV0saW5wdXRzOntkYXJrTW9kZU92ZXJyaWRlOiJkYXJrTW9kZU92ZXJyaWRlIn0sb3V0cHV0czp7b25PdmVycmlkZUNoYW5nZWQ6Im9uT3ZlcnJpZGVDaGFuZ2VkIn0sZGVjbHM6MTUsdmFyczo2LGNvbnN0czpbWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIiwiTWVudSBmb3IgY2hhbmdpbmcgbGlnaHQgb3IgZGFyayB0aGVtZSIsMywibWF0TWVudVRyaWdnZXJGb3IiLCJuZ1N3aXRjaCIsInRpdGxlIl0sWyJzdmdJY29uIiwiYnJpZ2h0bmVzc182XzI0cHgiLDQsIm5nU3dpdGNoQ2FzZSJdLFsic3ZnSWNvbiIsImxpZ2h0X21vZGVfMjRweCIsNCwibmdTd2l0Y2hDYXNlIl0sWyJzdmdJY29uIiwiZGFya19tb2RlXzI0cHgiLDQsIm5nU3dpdGNoQ2FzZSJdLFsibWVudSIsIm1hdE1lbnUiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJ0aXRsZSIsIlNldCB0aGUgdGhlbWUgdG8gbWF0Y2ggdGhlIGRlZmF1bHQgbW9kZSBpbiB0aGUgYnJvd3Nlci4iLDMsImNsaWNrIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwidGl0bGUiLCJGb3JjZSBsaWdodCBUZW5zb3JCb2FyZCB0aGVtZS4iLDMsImNsaWNrIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwidGl0bGUiLCJGb3JjZSBkYXJrIFRlbnNvckJvYXJkIHRoZW1lLiIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJicmlnaHRuZXNzXzZfMjRweCJdLFsic3ZnSWNvbiIsImxpZ2h0X21vZGVfMjRweCJdLFsic3ZnSWNvbiIsImRhcmtfbW9kZV8yNHB4Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZigwLCJidXR0b24iLDApLFMoMSxjQ2UsMSwwLCJtYXQtaWNvbiIsMSksUygyLGRDZSwxLDAsIm1hdC1pY29uIiwyKSxTKDMsdUNlLDEsMCwibWF0LWljb24iLDMpLGcoKSxmKDQsIm1hdC1tZW51IixudWxsLDQpKDYsImJ1dHRvbiIsNSksQSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25PdmVycmlkZUNoYW5nZWQuZW1pdChpLkRhcmtNb2RlT3ZlcnJpZGUuREVGQVVMVCl9KSxmKDcsImxhYmVsIiksVCg4LCJCcm93c2VyIGRlZmF1bHQiKSxnKCkoKSxmKDksImJ1dHRvbiIsNiksQSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25PdmVycmlkZUNoYW5nZWQuZW1pdChpLkRhcmtNb2RlT3ZlcnJpZGUuREFSS19NT0RFX09GRil9KSxmKDEwLCJsYWJlbCIpLFQoMTEsIkxpZ2h0IiksZygpKCksZigxMiwiYnV0dG9uIiw3KSxBKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbk92ZXJyaWRlQ2hhbmdlZC5lbWl0KGkuRGFya01vZGVPdmVycmlkZS5EQVJLX01PREVfT04pfSksZigxMywibGFiZWwiKSxUKDE0LCJEYXJrIiksZygpKCkoKSksMiZlJiYoYigibWF0TWVudVRyaWdnZXJGb3IiLHN0KDUpKSgibmdTd2l0Y2giLGkuZGFya01vZGVPdmVycmlkZSkoInRpdGxlIixpLmdldEJ1dHRvblRpdGxlKCkpLHYoMSksYigibmdTd2l0Y2hDYXNlIixpLkRhcmtNb2RlT3ZlcnJpZGUuREVGQVVMVCksdigxKSxiKCJuZ1N3aXRjaENhc2UiLGkuRGFya01vZGVPdmVycmlkZS5EQVJLX01PREVfT0ZGKSx2KDEpLGIoIm5nU3dpdGNoQ2FzZSIsaS5EYXJrTW9kZU92ZXJyaWRlLkRBUktfTU9ERV9PTikpfSxkZXBlbmRlbmNpZXM6W0VyLGJuLFh1LEVkLFl1LG1yLGtyXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxhWD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmRhcmtNb2RlT3ZlcnJpZGUkPXRoaXMuc3RvcmUuc2VsZWN0KGNTKS5waXBlKHEoaT0+bnVsbD09PWk/WWEuREVGQVVMVDppP1lhLkRBUktfTU9ERV9PTjpZYS5EQVJLX01PREVfT0ZGKSl9Y2hhbmdlRGFya01vZGUoZSl7bGV0IGk9bnVsbDtzd2l0Y2goZSl7Y2FzZSBZYS5ERUZBVUxUOmk9bnVsbDticmVhaztjYXNlIFlhLkRBUktfTU9ERV9PRkY6aT0hMTticmVhaztjYXNlIFlhLkRBUktfTU9ERV9PTjppPSEwfXRoaXMuc3RvcmUuZGlzcGF0Y2goWlMoe2VuYWJsZURhcmtNb2RlOml9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoSWUpKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJhcHAtaGVhZGVyLWRhcmstbW9kZS10b2dnbGUiXV0sZGVjbHM6Mix2YXJzOjMsY29uc3RzOltbMywiZGFya01vZGVPdmVycmlkZSIsIm9uT3ZlcnJpZGVDaGFuZ2VkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZigwLCJhcHAtaGVhZGVyLWRhcmstbW9kZS10b2dnbGUtY29tcG9uZW50IiwwKSxBKCJvbk92ZXJyaWRlQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkuY2hhbmdlRGFya01vZGUobyl9KSxVKDEsImFzeW5jIiksZygpKSwyJmUmJmIoImRhcmtNb2RlT3ZlcnJpZGUiLEcoMSwxLGkuZGFya01vZGVPdmVycmlkZSQpKX0sZGVwZW5kZW5jaWVzOltvWCxjdF0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCk7ZnVuY3Rpb24gbUNlKG4sdCl7fXZhciBmQ2U9ZnVuY3Rpb24obil7cmV0dXJue2FuaW1hdGlvbkR1cmF0aW9uOm59fSxnQ2U9ZnVuY3Rpb24obix0KXtyZXR1cm57dmFsdWU6bixwYXJhbXM6dH19O2Z1bmN0aW9uIF9DZShuLHQpezEmbiYmVHQoMCl9dmFyIGNYPVsiKiJdLGJDZT1bInRhYkxpc3RDb250YWluZXIiXSx2Q2U9WyJ0YWJMaXN0Il0seUNlPVsidGFiTGlzdElubmVyIl0seENlPVsibmV4dFBhZ2luYXRvciJdLENDZT1bInByZXZpb3VzUGFnaW5hdG9yIl0sTUNlPVsidGFiQm9keVdyYXBwZXIiXSx3Q2U9WyJ0YWJIZWFkZXIiXTtmdW5jdGlvbiBTQ2Uobix0KXt9ZnVuY3Rpb24gRUNlKG4sdCl7MSZuJiZTKDAsU0NlLDAsMCwibmctdGVtcGxhdGUiLDE0KSwyJm4mJmIoImNka1BvcnRhbE91dGxldCIsdygpLiRpbXBsaWNpdC50ZW1wbGF0ZUxhYmVsKX1mdW5jdGlvbiBUQ2Uobix0KXsxJm4mJlQoMCksMiZuJiZrdCh3KCkuJGltcGxpY2l0LnRleHRMYWJlbCl9ZnVuY3Rpb24gRENlKG4sdCl7aWYoMSZuKXtsZXQgZT1UZSgpO2YoMCwiZGl2Iiw2LDcpLEEoImNsaWNrIixmdW5jdGlvbigpe2xldCByPW5lKGUpLG89ci4kaW1wbGljaXQsYT1yLmluZGV4LHM9dygpLGw9c3QoMSk7cmV0dXJuIGllKHMuX2hhbmRsZUNsaWNrKG8sbCxhKSl9KSgiY2RrRm9jdXNDaGFuZ2UiLGZ1bmN0aW9uKHIpe2xldCBhPW5lKGUpLmluZGV4O3JldHVybiBpZSh3KCkuX3RhYkZvY3VzQ2hhbmdlZChyLGEpKX0pLGsoMiwic3BhbiIsOCkoMywiZGl2Iiw5KSxmKDQsInNwYW4iLDEwKSg1LCJzcGFuIiwxMSksUyg2LEVDZSwxLDEsIm5nLXRlbXBsYXRlIiwxMiksUyg3LFRDZSwxLDEsIm5nLXRlbXBsYXRlIixudWxsLDEzLGp0KSxnKCkoKSgpfWlmKDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT10LmluZGV4LHI9c3QoMSksbz1zdCg4KSxhPXcoKTtudCgibWRjLXRhYi0tYWN0aXZlIixhLnNlbGVjdGVkSW5kZXg9PT1pKSxiKCJpZCIsYS5fZ2V0VGFiTGFiZWxJZChpKSkoIm5nQ2xhc3MiLGUubGFiZWxDbGFzcykoImRpc2FibGVkIixlLmRpc2FibGVkKSgiZml0SW5rQmFyVG9Db250ZW50IixhLmZpdElua0JhclRvQ29udGVudCksQmUoInRhYkluZGV4IixhLl9nZXRUYWJJbmRleChpKSkoImFyaWEtcG9zaW5zZXQiLGkrMSkoImFyaWEtc2V0c2l6ZSIsYS5fdGFicy5sZW5ndGgpKCJhcmlhLWNvbnRyb2xzIixhLl9nZXRUYWJDb250ZW50SWQoaSkpKCJhcmlhLXNlbGVjdGVkIixhLnNlbGVjdGVkSW5kZXg9PT1pKSgiYXJpYS1sYWJlbCIsZS5hcmlhTGFiZWx8fG51bGwpKCJhcmlhLWxhYmVsbGVkYnkiLCFlLmFyaWFMYWJlbCYmZS5hcmlhTGFiZWxsZWRieT9lLmFyaWFMYWJlbGxlZGJ5Om51bGwpLHYoMyksYigibWF0UmlwcGxlVHJpZ2dlciIscikoIm1hdFJpcHBsZURpc2FibGVkIixlLmRpc2FibGVkfHxhLmRpc2FibGVSaXBwbGUpLHYoMyksYigibmdJZiIsZS50ZW1wbGF0ZUxhYmVsKSgibmdJZkVsc2UiLG8pfX1mdW5jdGlvbiBJQ2Uobix0KXtpZigxJm4pe2xldCBlPVRlKCk7ZigwLCJtYXQtdGFiLWJvZHkiLDE1KSxBKCJfb25DZW50ZXJlZCIsZnVuY3Rpb24oKXtyZXR1cm4gbmUoZSksaWUodygpLl9yZW1vdmVUYWJCb2R5V3JhcHBlckhlaWdodCgpKX0pKCJfb25DZW50ZXJpbmciLGZ1bmN0aW9uKHIpe3JldHVybiBuZShlKSxpZSh3KCkuX3NldFRhYkJvZHlXcmFwcGVySGVpZ2h0KHIpKX0pLGcoKX1pZigyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dC5pbmRleCxyPXcoKTtudCgibWF0LW1kYy10YWItYm9keS1hY3RpdmUiLHIuc2VsZWN0ZWRJbmRleD09PWkpLGIoImlkIixyLl9nZXRUYWJDb250ZW50SWQoaSkpKCJuZ0NsYXNzIixlLmJvZHlDbGFzcykoImNvbnRlbnQiLGUuY29udGVudCkoInBvc2l0aW9uIixlLnBvc2l0aW9uKSgib3JpZ2luIixlLm9yaWdpbikoImFuaW1hdGlvbkR1cmF0aW9uIixyLmFuaW1hdGlvbkR1cmF0aW9uKSgicHJlc2VydmVDb250ZW50IixyLnByZXNlcnZlQ29udGVudCksQmUoInRhYmluZGV4IixudWxsIT1yLmNvbnRlbnRUYWJJbmRleCYmci5zZWxlY3RlZEluZGV4PT09aT9yLmNvbnRlbnRUYWJJbmRleDpudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixyLl9nZXRUYWJMYWJlbElkKGkpKX19dmFyIEFDZT17dHJhbnNsYXRlVGFiOmZyKCJ0cmFuc2xhdGVUYWIiLFtTaSgiY2VudGVyLCB2b2lkLCBsZWZ0LW9yaWdpbi1jZW50ZXIsIHJpZ2h0LW9yaWdpbi1jZW50ZXIiLHJuKHt0cmFuc2Zvcm06Im5vbmUifSkpLFNpKCJsZWZ0Iixybih7dHJhbnNmb3JtOiJ0cmFuc2xhdGUzZCgtMTAwJSwgMCwgMCkiLG1pbkhlaWdodDoiMXB4Iix2aXNpYmlsaXR5OiJoaWRkZW4ifSkpLFNpKCJyaWdodCIscm4oe3RyYW5zZm9ybToidHJhbnNsYXRlM2QoMTAwJSwgMCwgMCkiLG1pbkhlaWdodDoiMXB4Iix2aXNpYmlsaXR5OiJoaWRkZW4ifSkpLGJpKCIqID0+IGxlZnQsICogPT4gcmlnaHQsIGxlZnQgPT4gY2VudGVyLCByaWdodCA9PiBjZW50ZXIiLE1pKCJ7e2FuaW1hdGlvbkR1cmF0aW9ufX0gY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpIikpLGJpKCJ2b2lkID0+IGxlZnQtb3JpZ2luLWNlbnRlciIsW3JuKHt0cmFuc2Zvcm06InRyYW5zbGF0ZTNkKC0xMDAlLCAwLCAwKSIsdmlzaWJpbGl0eToiaGlkZGVuIn0pLE1pKCJ7e2FuaW1hdGlvbkR1cmF0aW9ufX0gY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpIildKSxiaSgidm9pZCA9PiByaWdodC1vcmlnaW4tY2VudGVyIixbcm4oe3RyYW5zZm9ybToidHJhbnNsYXRlM2QoMTAwJSwgMCwgMCkiLHZpc2liaWxpdHk6ImhpZGRlbiJ9KSxNaSgie3thbmltYXRpb25EdXJhdGlvbn19IGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKSIpXSldKX0sUkNlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBiYXtjb25zdHJ1Y3RvcihlLGkscixvKXtzdXBlcihlLGksbyksdGhpcy5faG9zdD1yLHRoaXMuX2NlbnRlcmluZ1N1Yj1Fbi5FTVBUWSx0aGlzLl9sZWF2aW5nU3ViPUVuLkVNUFRZfW5nT25Jbml0KCl7c3VwZXIubmdPbkluaXQoKSx0aGlzLl9jZW50ZXJpbmdTdWI9dGhpcy5faG9zdC5fYmVmb3JlQ2VudGVyaW5nLnBpcGUoa24odGhpcy5faG9zdC5faXNDZW50ZXJQb3NpdGlvbih0aGlzLl9ob3N0Ll9wb3NpdGlvbikpKS5zdWJzY3JpYmUoZT0+e2UmJiF0aGlzLmhhc0F0dGFjaGVkKCkmJnRoaXMuYXR0YWNoKHRoaXMuX2hvc3QuX2NvbnRlbnQpfSksdGhpcy5fbGVhdmluZ1N1Yj10aGlzLl9ob3N0Ll9hZnRlckxlYXZpbmdDZW50ZXIuc3Vic2NyaWJlKCgpPT57dGhpcy5faG9zdC5wcmVzZXJ2ZUNvbnRlbnR8fHRoaXMuZGV0YWNoKCl9KX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5fY2VudGVyaW5nU3ViLnVuc3Vic2NyaWJlKCksdGhpcy5fbGVhdmluZ1N1Yi51bnN1YnNjcmliZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGhvKSxDKGVpKSxDKFduKCgpPT5kWCkpLEMoTnQpKX0sbi5cdTAyNzVkaXI9TWUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibWF0VGFiQm9keUhvc3QiLCIiXV0sZmVhdHVyZXM6W1hlXX0pLG59KSgpLFBDZT0oKCk9PntjbGFzcyBue3NldCBwb3NpdGlvbihlKXt0aGlzLl9wb3NpdGlvbkluZGV4PWUsdGhpcy5fY29tcHV0ZVBvc2l0aW9uQW5pbWF0aW9uU3RhdGUoKX1jb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX2Rpcj1pLHRoaXMuX2RpckNoYW5nZVN1YnNjcmlwdGlvbj1Fbi5FTVBUWSx0aGlzLl90cmFuc2xhdGVUYWJDb21wbGV0ZT1uZXcgRWUsdGhpcy5fb25DZW50ZXJpbmc9bmV3IEYsdGhpcy5fYmVmb3JlQ2VudGVyaW5nPW5ldyBGLHRoaXMuX2FmdGVyTGVhdmluZ0NlbnRlcj1uZXcgRix0aGlzLl9vbkNlbnRlcmVkPW5ldyBGKCEwKSx0aGlzLmFuaW1hdGlvbkR1cmF0aW9uPSI1MDBtcyIsdGhpcy5wcmVzZXJ2ZUNvbnRlbnQ9ITEsaSYmKHRoaXMuX2RpckNoYW5nZVN1YnNjcmlwdGlvbj1pLmNoYW5nZS5zdWJzY3JpYmUobz0+e3RoaXMuX2NvbXB1dGVQb3NpdGlvbkFuaW1hdGlvblN0YXRlKG8pLHIubWFya0ZvckNoZWNrKCl9KSksdGhpcy5fdHJhbnNsYXRlVGFiQ29tcGxldGUucGlwZShyaSgobyxhKT0+by5mcm9tU3RhdGU9PT1hLmZyb21TdGF0ZSYmby50b1N0YXRlPT09YS50b1N0YXRlKSkuc3Vic2NyaWJlKG89Pnt0aGlzLl9pc0NlbnRlclBvc2l0aW9uKG8udG9TdGF0ZSkmJnRoaXMuX2lzQ2VudGVyUG9zaXRpb24odGhpcy5fcG9zaXRpb24pJiZ0aGlzLl9vbkNlbnRlcmVkLmVtaXQoKSx0aGlzLl9pc0NlbnRlclBvc2l0aW9uKG8uZnJvbVN0YXRlKSYmIXRoaXMuX2lzQ2VudGVyUG9zaXRpb24odGhpcy5fcG9zaXRpb24pJiZ0aGlzLl9hZnRlckxlYXZpbmdDZW50ZXIuZW1pdCgpfSl9bmdPbkluaXQoKXsiY2VudGVyIj09dGhpcy5fcG9zaXRpb24mJm51bGwhPXRoaXMub3JpZ2luJiYodGhpcy5fcG9zaXRpb249dGhpcy5fY29tcHV0ZVBvc2l0aW9uRnJvbU9yaWdpbih0aGlzLm9yaWdpbikpfW5nT25EZXN0cm95KCl7dGhpcy5fZGlyQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fdHJhbnNsYXRlVGFiQ29tcGxldGUuY29tcGxldGUoKX1fb25UcmFuc2xhdGVUYWJTdGFydGVkKGUpe2xldCBpPXRoaXMuX2lzQ2VudGVyUG9zaXRpb24oZS50b1N0YXRlKTt0aGlzLl9iZWZvcmVDZW50ZXJpbmcuZW1pdChpKSxpJiZ0aGlzLl9vbkNlbnRlcmluZy5lbWl0KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQpfV9nZXRMYXlvdXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlyJiYicnRsIj09PXRoaXMuX2Rpci52YWx1ZT8icnRsIjoibHRyIn1faXNDZW50ZXJQb3NpdGlvbihlKXtyZXR1cm4iY2VudGVyIj09ZXx8ImxlZnQtb3JpZ2luLWNlbnRlciI9PWV8fCJyaWdodC1vcmlnaW4tY2VudGVyIj09ZX1fY29tcHV0ZVBvc2l0aW9uQW5pbWF0aW9uU3RhdGUoZT10aGlzLl9nZXRMYXlvdXREaXJlY3Rpb24oKSl7dGhpcy5fcG9zaXRpb249dGhpcy5fcG9zaXRpb25JbmRleDwwPyJsdHIiPT1lPyJsZWZ0IjoicmlnaHQiOnRoaXMuX3Bvc2l0aW9uSW5kZXg+MD8ibHRyIj09ZT8icmlnaHQiOiJsZWZ0IjoiY2VudGVyIn1fY29tcHV0ZVBvc2l0aW9uRnJvbU9yaWdpbihlKXtsZXQgaT10aGlzLl9nZXRMYXlvdXREaXJlY3Rpb24oKTtyZXR1cm4ibHRyIj09aSYmZTw9MHx8InJ0bCI9PWkmJmU+MD8ibGVmdC1vcmlnaW4tY2VudGVyIjoicmlnaHQtb3JpZ2luLWNlbnRlciJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoeGUpLEMoemksOCksQyhRdCkpfSxuLlx1MDI3NWRpcj1NZSh7dHlwZTpuLGlucHV0czp7X2NvbnRlbnQ6WyJjb250ZW50IiwiX2NvbnRlbnQiXSxvcmlnaW46Im9yaWdpbiIsYW5pbWF0aW9uRHVyYXRpb246ImFuaW1hdGlvbkR1cmF0aW9uIixwcmVzZXJ2ZUNvbnRlbnQ6InByZXNlcnZlQ29udGVudCIscG9zaXRpb246InBvc2l0aW9uIn0sb3V0cHV0czp7X29uQ2VudGVyaW5nOiJfb25DZW50ZXJpbmciLF9iZWZvcmVDZW50ZXJpbmc6Il9iZWZvcmVDZW50ZXJpbmciLF9hZnRlckxlYXZpbmdDZW50ZXI6Il9hZnRlckxlYXZpbmdDZW50ZXIiLF9vbkNlbnRlcmVkOiJfb25DZW50ZXJlZCJ9fSksbn0pKCksZFg9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFBDZXtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoZSxpLHIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKHhlKSxDKHppLDgpLEMoUXQpKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtdGFiLWJvZHkiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZVZShiYSw1KSwyJmUpe2xldCByO2JlKHI9dmUoKSkmJihpLl9wb3J0YWxIb3N0PXIuZmlyc3QpfX0saG9zdEF0dHJzOlsxLCJtYXQtbWRjLXRhYi1ib2R5Il0sZmVhdHVyZXM6W1hlXSxkZWNsczozLHZhcnM6Nixjb25zdHM6W1siY2RrU2Nyb2xsYWJsZSIsIiIsMSwibWF0LW1kYy10YWItYm9keS1jb250ZW50Il0sWyJjb250ZW50IiwiIl0sWyJtYXRUYWJCb2R5SG9zdCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGYoMCwiZGl2IiwwLDEpLEEoIkB0cmFuc2xhdGVUYWIuc3RhcnQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9vblRyYW5zbGF0ZVRhYlN0YXJ0ZWQobyl9KSgiQHRyYW5zbGF0ZVRhYi5kb25lIixmdW5jdGlvbihvKXtyZXR1cm4gaS5fdHJhbnNsYXRlVGFiQ29tcGxldGUubmV4dChvKX0pLFMoMixtQ2UsMCwwLCJuZy10ZW1wbGF0ZSIsMiksZygpKSwyJmUmJmIoIkB0cmFuc2xhdGVUYWIiLFNvKDMsZ0NlLGkuX3Bvc2l0aW9uLFVuKDEsZkNlLGkuYW5pbWF0aW9uRHVyYXRpb24pKSl9LGRlcGVuZGVuY2llczpbUkNlXSxzdHlsZXM6WycubWF0LW1kYy10YWItYm9keXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmJsb2NrO292ZXJmbG93OmhpZGRlbjtvdXRsaW5lOjA7ZmxleC1iYXNpczoxMDAlfS5tYXQtbWRjLXRhYi1ib2R5Lm1hdC1tZGMtdGFiLWJvZHktYWN0aXZle3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93LXg6aGlkZGVuO292ZXJmbG93LXk6YXV0bzt6LWluZGV4OjE7ZmxleC1ncm93OjF9Lm1hdC1tZGMtdGFiLWdyb3VwLm1hdC1tZGMtdGFiLWdyb3VwLWR5bmFtaWMtaGVpZ2h0IC5tYXQtbWRjLXRhYi1ib2R5Lm1hdC1tZGMtdGFiLWJvZHktYWN0aXZle292ZXJmbG93LXk6aGlkZGVufS5tYXQtbWRjLXRhYi1ib2R5LWNvbnRlbnR7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0b30ubWF0LW1kYy10YWItZ3JvdXAtZHluYW1pYy1oZWlnaHQgLm1hdC1tZGMtdGFiLWJvZHktY29udGVudHtvdmVyZmxvdzpoaWRkZW59Lm1hdC1tZGMtdGFiLWJvZHktY29udGVudFtzdHlsZSo9InZpc2liaWxpdHk6IGhpZGRlbiJde2Rpc3BsYXk6bm9uZX0nXSxlbmNhcHN1bGF0aW9uOjIsZGF0YTp7YW5pbWF0aW9uOltBQ2UudHJhbnNsYXRlVGFiXX19KSxufSkoKSxrQ2U9bmV3IHRlKCJNYXRUYWJDb250ZW50IiksT0NlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy50ZW1wbGF0ZT1lfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKG9pKSl9LG4uXHUwMjc1ZGlyPU1lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdFRhYkNvbnRlbnQiLCIiXV0sZmVhdHVyZXM6W1Z0KFt7cHJvdmlkZTprQ2UsdXNlRXhpc3Rpbmc6bn1dKV19KSxufSkoKSxGQ2U9bmV3IHRlKCJNYXRUYWJMYWJlbCIpLHVYPW5ldyB0ZSgiTUFUX1RBQiIpLHROPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBHN3tjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoZSxpKSx0aGlzLl9jbG9zZXN0VGFiPXJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMob2kpLEMoZWkpLEModVgsOCkpfSxuLlx1MDI3NWRpcj1NZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXQtdGFiLWxhYmVsIiwiIl0sWyIiLCJtYXRUYWJMYWJlbCIsIiJdXSxmZWF0dXJlczpbVnQoW3twcm92aWRlOkZDZSx1c2VFeGlzdGluZzpufV0pLFhlXX0pLG59KSgpLEoyPSJtZGMtdGFiLWluZGljYXRvci0tYWN0aXZlIixzWD0ibWRjLXRhYi1pbmRpY2F0b3ItLW5vLXRyYW5zaXRpb24iO2Z1bmN0aW9uIHBYKG4pe3JldHVybiBjbGFzcyBleHRlbmRzIG57Y29uc3RydWN0b3IoLi4udCl7c3VwZXIoLi4udCksdGhpcy5fZml0VG9Db250ZW50PSExfWdldCBmaXRJbmtCYXJUb0NvbnRlbnQoKXtyZXR1cm4gdGhpcy5fZml0VG9Db250ZW50fXNldCBmaXRJbmtCYXJUb0NvbnRlbnQodCl7bGV0IGU9dnQodCk7dGhpcy5fZml0VG9Db250ZW50IT09ZSYmKHRoaXMuX2ZpdFRvQ29udGVudD1lLHRoaXMuX2lua0JhckVsZW1lbnQmJnRoaXMuX2FwcGVuZElua0JhckVsZW1lbnQoKSl9YWN0aXZhdGVJbmtCYXIodCl7bGV0IGU9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7aWYoIXR8fCFlLmdldEJvdW5kaW5nQ2xpZW50UmVjdHx8IXRoaXMuX2lua0JhckNvbnRlbnRFbGVtZW50KXJldHVybiB2b2lkIGUuY2xhc3NMaXN0LmFkZChKMik7bGV0IGk9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPXQud2lkdGgvaS53aWR0aCxvPXQubGVmdC1pLmxlZnQ7ZS5jbGFzc0xpc3QuYWRkKHNYKSx0aGlzLl9pbmtCYXJDb250ZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgidHJhbnNmb3JtIixgdHJhbnNsYXRlWCgke299cHgpIHNjYWxlWCgke3J9KWApLGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZS5jbGFzc0xpc3QucmVtb3ZlKHNYKSxlLmNsYXNzTGlzdC5hZGQoSjIpLHRoaXMuX2lua0JhckNvbnRlbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCJ0cmFuc2Zvcm0iLCIiKX1kZWFjdGl2YXRlSW5rQmFyKCl7dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShKMil9bmdPbkluaXQoKXt0aGlzLl9jcmVhdGVJbmtCYXJFbGVtZW50KCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9pbmtCYXJFbGVtZW50Py5yZW1vdmUoKSx0aGlzLl9pbmtCYXJFbGVtZW50PXRoaXMuX2lua0JhckNvbnRlbnRFbGVtZW50PW51bGx9X2NyZWF0ZUlua0JhckVsZW1lbnQoKXtsZXQgdD10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vd25lckRvY3VtZW50fHxkb2N1bWVudDt0aGlzLl9pbmtCYXJFbGVtZW50PXQuY3JlYXRlRWxlbWVudCgic3BhbiIpLHRoaXMuX2lua0JhckNvbnRlbnRFbGVtZW50PXQuY3JlYXRlRWxlbWVudCgic3BhbiIpLHRoaXMuX2lua0JhckVsZW1lbnQuY2xhc3NOYW1lPSJtZGMtdGFiLWluZGljYXRvciIsdGhpcy5faW5rQmFyQ29udGVudEVsZW1lbnQuY2xhc3NOYW1lPSJtZGMtdGFiLWluZGljYXRvcl9fY29udGVudCBtZGMtdGFiLWluZGljYXRvcl9fY29udGVudC0tdW5kZXJsaW5lIix0aGlzLl9pbmtCYXJFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2lua0JhckNvbnRlbnRFbGVtZW50KSx0aGlzLl9hcHBlbmRJbmtCYXJFbGVtZW50KCl9X2FwcGVuZElua0JhckVsZW1lbnQoKXsodGhpcy5fZml0VG9Db250ZW50P3RoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5tZGMtdGFiX19jb250ZW50Iik6dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLmFwcGVuZENoaWxkKHRoaXMuX2lua0JhckVsZW1lbnQpfX19bmV3IHRlKCJNYXRJbmtCYXJQb3NpdGlvbmVyIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiB0PT4oe2xlZnQ6dD8odC5vZmZzZXRMZWZ0fHwwKSsicHgiOiIwIix3aWR0aDp0Pyh0Lm9mZnNldFdpZHRofHwwKSsicHgiOiIwIn0pfX0pO3ZhciBMQ2U9YW8oY2xhc3N7fSksQkNlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBMQ2V7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLmVsZW1lbnRSZWY9ZX1mb2N1cygpe3RoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCl9Z2V0T2Zmc2V0TGVmdCgpe3JldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRMZWZ0fWdldE9mZnNldFdpZHRoKCl7cmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRofX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKHhlKSl9LG4uXHUwMjc1ZGlyPU1lKHt0eXBlOm4sZmVhdHVyZXM6W1hlXX0pLG59KSgpLFZDZT1wWChCQ2UpLGhYPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBWQ2V7fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9WG4obikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9TWUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibWF0VGFiTGFiZWxXcmFwcGVyIiwiIl1dLGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiYoQmUoImFyaWEtZGlzYWJsZWQiLCEhaS5kaXNhYmxlZCksbnQoIm1hdC1tZGMtdGFiLWRpc2FibGVkIixpLmRpc2FibGVkKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixmaXRJbmtCYXJUb0NvbnRlbnQ6ImZpdElua0JhclRvQ29udGVudCJ9LGZlYXR1cmVzOltYZV19KSxufSkoKSxIQ2U9YW8oY2xhc3N7fSksbVg9bmV3IHRlKCJNQVRfVEFCX0dST1VQIiksekNlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBIQ2V7Z2V0IGNvbnRlbnQoKXtyZXR1cm4gdGhpcy5fY29udGVudFBvcnRhbH1jb25zdHJ1Y3RvcihlLGkpe3N1cGVyKCksdGhpcy5fdmlld0NvbnRhaW5lclJlZj1lLHRoaXMuX2Nsb3Nlc3RUYWJHcm91cD1pLHRoaXMudGV4dExhYmVsPSIiLHRoaXMuX2NvbnRlbnRQb3J0YWw9bnVsbCx0aGlzLl9zdGF0ZUNoYW5nZXM9bmV3IEVlLHRoaXMucG9zaXRpb249bnVsbCx0aGlzLm9yaWdpbj1udWxsLHRoaXMuaXNBY3RpdmU9ITF9bmdPbkNoYW5nZXMoZSl7KGUuaGFzT3duUHJvcGVydHkoInRleHRMYWJlbCIpfHxlLmhhc093blByb3BlcnR5KCJkaXNhYmxlZCIpKSYmdGhpcy5fc3RhdGVDaGFuZ2VzLm5leHQoKX1uZ09uRGVzdHJveSgpe3RoaXMuX3N0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpfW5nT25Jbml0KCl7dGhpcy5fY29udGVudFBvcnRhbD1uZXcgVG8odGhpcy5fZXhwbGljaXRDb250ZW50fHx0aGlzLl9pbXBsaWNpdENvbnRlbnQsdGhpcy5fdmlld0NvbnRhaW5lclJlZil9X3NldFRlbXBsYXRlTGFiZWxJbnB1dChlKXtlJiZlLl9jbG9zZXN0VGFiPT09dGhpcyYmKHRoaXMuX3RlbXBsYXRlTGFiZWw9ZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoZWkpLEMobVgsOCkpfSxuLlx1MDI3NWRpcj1NZSh7dHlwZTpuLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmVWUob2ksNyksMiZlKXtsZXQgcjtiZShyPXZlKCkpJiYoaS5faW1wbGljaXRDb250ZW50PXIuZmlyc3QpfX0saW5wdXRzOnt0ZXh0TGFiZWw6WyJsYWJlbCIsInRleHRMYWJlbCJdLGFyaWFMYWJlbDpbImFyaWEtbGFiZWwiLCJhcmlhTGFiZWwiXSxhcmlhTGFiZWxsZWRieTpbImFyaWEtbGFiZWxsZWRieSIsImFyaWFMYWJlbGxlZGJ5Il0sbGFiZWxDbGFzczoibGFiZWxDbGFzcyIsYm9keUNsYXNzOiJib2R5Q2xhc3MifSxmZWF0dXJlczpbWGUscXRdfSksbn0pKCksYXk9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHpDZXtnZXQgdGVtcGxhdGVMYWJlbCgpe3JldHVybiB0aGlzLl90ZW1wbGF0ZUxhYmVsfXNldCB0ZW1wbGF0ZUxhYmVsKGUpe3RoaXMuX3NldFRlbXBsYXRlTGFiZWxJbnB1dChlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1YbihuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC10YWIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxpLHIpe2lmKDEmZSYmKEJuKHIsT0NlLDcsb2kpLEJuKHIsdE4sNSkpLDImZSl7bGV0IG87YmUobz12ZSgpKSYmKGkuX2V4cGxpY2l0Q29udGVudD1vLmZpcnN0KSxiZShvPXZlKCkpJiYoaS50ZW1wbGF0ZUxhYmVsPW8uZmlyc3QpfX0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQifSxleHBvcnRBczpbIm1hdFRhYiJdLGZlYXR1cmVzOltWdChbe3Byb3ZpZGU6dVgsdXNlRXhpc3Rpbmc6bn1dKSxYZV0sbmdDb250ZW50U2VsZWN0b3JzOmNYLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZm4oKSxTKDAsX0NlLDEsMCwibmctdGVtcGxhdGUiKSl9LGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLGxYPXphKHtwYXNzaXZlOiEwfSksZlg9KCgpPT57Y2xhc3MgbntnZXQgZGlzYWJsZVBhZ2luYXRpb24oKXtyZXR1cm4gdGhpcy5fZGlzYWJsZVBhZ2luYXRpb259c2V0IGRpc2FibGVQYWdpbmF0aW9uKGUpe3RoaXMuX2Rpc2FibGVQYWdpbmF0aW9uPXZ0KGUpfWdldCBzZWxlY3RlZEluZGV4KCl7cmV0dXJuIHRoaXMuX3NlbGVjdGVkSW5kZXh9c2V0IHNlbGVjdGVkSW5kZXgoZSl7ZT1taShlKSx0aGlzLl9zZWxlY3RlZEluZGV4IT1lJiYodGhpcy5fc2VsZWN0ZWRJbmRleENoYW5nZWQ9ITAsdGhpcy5fc2VsZWN0ZWRJbmRleD1lLHRoaXMuX2tleU1hbmFnZXImJnRoaXMuX2tleU1hbmFnZXIudXBkYXRlQWN0aXZlSXRlbShlKSl9Y29uc3RydWN0b3IoZSxpLHIsbyxhLHMsbCl7dGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWksdGhpcy5fdmlld3BvcnRSdWxlcj1yLHRoaXMuX2Rpcj1vLHRoaXMuX25nWm9uZT1hLHRoaXMuX3BsYXRmb3JtPXMsdGhpcy5fYW5pbWF0aW9uTW9kZT1sLHRoaXMuX3Njcm9sbERpc3RhbmNlPTAsdGhpcy5fc2VsZWN0ZWRJbmRleENoYW5nZWQ9ITEsdGhpcy5fZGVzdHJveWVkPW5ldyBFZSx0aGlzLl9zaG93UGFnaW5hdGlvbkNvbnRyb2xzPSExLHRoaXMuX2Rpc2FibGVTY3JvbGxBZnRlcj0hMCx0aGlzLl9kaXNhYmxlU2Nyb2xsQmVmb3JlPSEwLHRoaXMuX3N0b3BTY3JvbGxpbmc9bmV3IEVlLHRoaXMuX2Rpc2FibGVQYWdpbmF0aW9uPSExLHRoaXMuX3NlbGVjdGVkSW5kZXg9MCx0aGlzLnNlbGVjdEZvY3VzZWRJbmRleD1uZXcgRix0aGlzLmluZGV4Rm9jdXNlZD1uZXcgRixhLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57RWkoZS5uYXRpdmVFbGVtZW50LCJtb3VzZWxlYXZlIikucGlwZShpdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9zdG9wSW50ZXJ2YWwoKX0pfSl9bmdBZnRlclZpZXdJbml0KCl7RWkodGhpcy5fcHJldmlvdXNQYWdpbmF0b3IubmF0aXZlRWxlbWVudCwidG91Y2hzdGFydCIsbFgpLnBpcGUoaXQodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5faGFuZGxlUGFnaW5hdG9yUHJlc3MoImJlZm9yZSIpfSksRWkodGhpcy5fbmV4dFBhZ2luYXRvci5uYXRpdmVFbGVtZW50LCJ0b3VjaHN0YXJ0IixsWCkucGlwZShpdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9oYW5kbGVQYWdpbmF0b3JQcmVzcygiYWZ0ZXIiKX0pfW5nQWZ0ZXJDb250ZW50SW5pdCgpe2xldCBlPXRoaXMuX2Rpcj90aGlzLl9kaXIuY2hhbmdlOiR0KCJsdHIiKSxpPXRoaXMuX3ZpZXdwb3J0UnVsZXIuY2hhbmdlKDE1MCkscj0oKT0+e3RoaXMudXBkYXRlUGFnaW5hdGlvbigpLHRoaXMuX2FsaWduSW5rQmFyVG9TZWxlY3RlZFRhYigpfTt0aGlzLl9rZXlNYW5hZ2VyPW5ldyBrdSh0aGlzLl9pdGVtcykud2l0aEhvcml6b250YWxPcmllbnRhdGlvbih0aGlzLl9nZXRMYXlvdXREaXJlY3Rpb24oKSkud2l0aEhvbWVBbmRFbmQoKS53aXRoV3JhcCgpLnNraXBQcmVkaWNhdGUoKCk9PiExKSx0aGlzLl9rZXlNYW5hZ2VyLnVwZGF0ZUFjdGl2ZUl0ZW0odGhpcy5fc2VsZWN0ZWRJbmRleCksdGhpcy5fbmdab25lLm9uU3RhYmxlLnBpcGUoTHQoMSkpLnN1YnNjcmliZShyKSx0bihlLGksdGhpcy5faXRlbXMuY2hhbmdlcyx0aGlzLl9pdGVtc1Jlc2l6ZWQoKSkucGlwZShpdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9uZ1pvbmUucnVuKCgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e3RoaXMuX3Njcm9sbERpc3RhbmNlPU1hdGgubWF4KDAsTWF0aC5taW4odGhpcy5fZ2V0TWF4U2Nyb2xsRGlzdGFuY2UoKSx0aGlzLl9zY3JvbGxEaXN0YW5jZSkpLHIoKX0pfSksdGhpcy5fa2V5TWFuYWdlci53aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKHRoaXMuX2dldExheW91dERpcmVjdGlvbigpKX0pLHRoaXMuX2tleU1hbmFnZXIuY2hhbmdlLnN1YnNjcmliZShvPT57dGhpcy5pbmRleEZvY3VzZWQuZW1pdChvKSx0aGlzLl9zZXRUYWJGb2N1cyhvKX0pfV9pdGVtc1Jlc2l6ZWQoKXtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgUmVzaXplT2JzZXJ2ZXI/S3I6dGhpcy5faXRlbXMuY2hhbmdlcy5waXBlKGtuKHRoaXMuX2l0ZW1zKSxKbihlPT5uZXcgS3QoaT0+dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57bGV0IHI9bmV3IFJlc2l6ZU9ic2VydmVyKG89PmkubmV4dChvKSk7cmV0dXJuIGUuZm9yRWFjaChvPT5yLm9ic2VydmUoby5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpKSwoKT0+e3IuZGlzY29ubmVjdCgpfX0pKSksb3MoMSksT2UoZT0+ZS5zb21lKGk9PmkuY29udGVudFJlY3Qud2lkdGg+MCYmaS5jb250ZW50UmVjdC5oZWlnaHQ+MCkpKX1uZ0FmdGVyQ29udGVudENoZWNrZWQoKXt0aGlzLl90YWJMYWJlbENvdW50IT10aGlzLl9pdGVtcy5sZW5ndGgmJih0aGlzLnVwZGF0ZVBhZ2luYXRpb24oKSx0aGlzLl90YWJMYWJlbENvdW50PXRoaXMuX2l0ZW1zLmxlbmd0aCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSksdGhpcy5fc2VsZWN0ZWRJbmRleENoYW5nZWQmJih0aGlzLl9zY3JvbGxUb0xhYmVsKHRoaXMuX3NlbGVjdGVkSW5kZXgpLHRoaXMuX2NoZWNrU2Nyb2xsaW5nQ29udHJvbHMoKSx0aGlzLl9hbGlnbklua0JhclRvU2VsZWN0ZWRUYWIoKSx0aGlzLl9zZWxlY3RlZEluZGV4Q2hhbmdlZD0hMSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSksdGhpcy5fc2Nyb2xsRGlzdGFuY2VDaGFuZ2VkJiYodGhpcy5fdXBkYXRlVGFiU2Nyb2xsUG9zaXRpb24oKSx0aGlzLl9zY3JvbGxEaXN0YW5jZUNoYW5nZWQ9ITEsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfW5nT25EZXN0cm95KCl7dGhpcy5fa2V5TWFuYWdlcj8uZGVzdHJveSgpLHRoaXMuX2Rlc3Ryb3llZC5uZXh0KCksdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCksdGhpcy5fc3RvcFNjcm9sbGluZy5jb21wbGV0ZSgpfV9oYW5kbGVLZXlkb3duKGUpe2lmKCFPcihlKSlzd2l0Y2goZS5rZXlDb2RlKXtjYXNlIDEzOmNhc2UgMzI6aWYodGhpcy5mb2N1c0luZGV4IT09dGhpcy5zZWxlY3RlZEluZGV4KXtsZXQgaT10aGlzLl9pdGVtcy5nZXQodGhpcy5mb2N1c0luZGV4KTtpJiYhaS5kaXNhYmxlZCYmKHRoaXMuc2VsZWN0Rm9jdXNlZEluZGV4LmVtaXQodGhpcy5mb2N1c0luZGV4KSx0aGlzLl9pdGVtU2VsZWN0ZWQoZSkpfWJyZWFrO2RlZmF1bHQ6dGhpcy5fa2V5TWFuYWdlci5vbktleWRvd24oZSl9fV9vbkNvbnRlbnRDaGFuZ2VzKCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50O2UhPT10aGlzLl9jdXJyZW50VGV4dENvbnRlbnQmJih0aGlzLl9jdXJyZW50VGV4dENvbnRlbnQ9ZXx8IiIsdGhpcy5fbmdab25lLnJ1bigoKT0+e3RoaXMudXBkYXRlUGFnaW5hdGlvbigpLHRoaXMuX2FsaWduSW5rQmFyVG9TZWxlY3RlZFRhYigpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSkpfXVwZGF0ZVBhZ2luYXRpb24oKXt0aGlzLl9jaGVja1BhZ2luYXRpb25FbmFibGVkKCksdGhpcy5fY2hlY2tTY3JvbGxpbmdDb250cm9scygpLHRoaXMuX3VwZGF0ZVRhYlNjcm9sbFBvc2l0aW9uKCl9Z2V0IGZvY3VzSW5kZXgoKXtyZXR1cm4gdGhpcy5fa2V5TWFuYWdlcj90aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleDowfXNldCBmb2N1c0luZGV4KGUpeyF0aGlzLl9pc1ZhbGlkSW5kZXgoZSl8fHRoaXMuZm9jdXNJbmRleD09PWV8fCF0aGlzLl9rZXlNYW5hZ2VyfHx0aGlzLl9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oZSl9X2lzVmFsaWRJbmRleChlKXtyZXR1cm4hdGhpcy5faXRlbXN8fCEhdGhpcy5faXRlbXMudG9BcnJheSgpW2VdfV9zZXRUYWJGb2N1cyhlKXtpZih0aGlzLl9zaG93UGFnaW5hdGlvbkNvbnRyb2xzJiZ0aGlzLl9zY3JvbGxUb0xhYmVsKGUpLHRoaXMuX2l0ZW1zJiZ0aGlzLl9pdGVtcy5sZW5ndGgpe3RoaXMuX2l0ZW1zLnRvQXJyYXkoKVtlXS5mb2N1cygpO2xldCBpPXRoaXMuX3RhYkxpc3RDb250YWluZXIubmF0aXZlRWxlbWVudDtpLnNjcm9sbExlZnQ9Imx0ciI9PXRoaXMuX2dldExheW91dERpcmVjdGlvbigpPzA6aS5zY3JvbGxXaWR0aC1pLm9mZnNldFdpZHRofX1fZ2V0TGF5b3V0RGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuX2RpciYmInJ0bCI9PT10aGlzLl9kaXIudmFsdWU/InJ0bCI6Imx0ciJ9X3VwZGF0ZVRhYlNjcm9sbFBvc2l0aW9uKCl7aWYodGhpcy5kaXNhYmxlUGFnaW5hdGlvbilyZXR1cm47bGV0IGU9dGhpcy5zY3JvbGxEaXN0YW5jZSxpPSJsdHIiPT09dGhpcy5fZ2V0TGF5b3V0RGlyZWN0aW9uKCk/LWU6ZTt0aGlzLl90YWJMaXN0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGVYKCR7TWF0aC5yb3VuZChpKX1weClgLCh0aGlzLl9wbGF0Zm9ybS5UUklERU5UfHx0aGlzLl9wbGF0Zm9ybS5FREdFKSYmKHRoaXMuX3RhYkxpc3RDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0PTApfWdldCBzY3JvbGxEaXN0YW5jZSgpe3JldHVybiB0aGlzLl9zY3JvbGxEaXN0YW5jZX1zZXQgc2Nyb2xsRGlzdGFuY2UoZSl7dGhpcy5fc2Nyb2xsVG8oZSl9X3Njcm9sbEhlYWRlcihlKXtyZXR1cm4gdGhpcy5fc2Nyb2xsVG8odGhpcy5fc2Nyb2xsRGlzdGFuY2UrKCJiZWZvcmUiPT1lPy0xOjEpKnRoaXMuX3RhYkxpc3RDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aC8zKX1faGFuZGxlUGFnaW5hdG9yQ2xpY2soZSl7dGhpcy5fc3RvcEludGVydmFsKCksdGhpcy5fc2Nyb2xsSGVhZGVyKGUpfV9zY3JvbGxUb0xhYmVsKGUpe2lmKHRoaXMuZGlzYWJsZVBhZ2luYXRpb24pcmV0dXJuO2xldCBpPXRoaXMuX2l0ZW1zP3RoaXMuX2l0ZW1zLnRvQXJyYXkoKVtlXTpudWxsO2lmKCFpKXJldHVybjtsZXQgcyxsLHI9dGhpcy5fdGFiTGlzdENvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoLHtvZmZzZXRMZWZ0Om8sb2Zmc2V0V2lkdGg6YX09aS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7Imx0ciI9PXRoaXMuX2dldExheW91dERpcmVjdGlvbigpPyhzPW8sbD1zK2EpOihsPXRoaXMuX3RhYkxpc3RJbm5lci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoLW8scz1sLWEpO2xldCBjPXRoaXMuc2Nyb2xsRGlzdGFuY2UsZD10aGlzLnNjcm9sbERpc3RhbmNlK3I7czxjP3RoaXMuc2Nyb2xsRGlzdGFuY2UtPWMtczpsPmQmJih0aGlzLnNjcm9sbERpc3RhbmNlKz1NYXRoLm1pbihsLWQscy1jKSl9X2NoZWNrUGFnaW5hdGlvbkVuYWJsZWQoKXtpZih0aGlzLmRpc2FibGVQYWdpbmF0aW9uKXRoaXMuX3Nob3dQYWdpbmF0aW9uQ29udHJvbHM9ITE7ZWxzZXtsZXQgZT10aGlzLl90YWJMaXN0SW5uZXIubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aD50aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7ZXx8KHRoaXMuc2Nyb2xsRGlzdGFuY2U9MCksZSE9PXRoaXMuX3Nob3dQYWdpbmF0aW9uQ29udHJvbHMmJnRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuX3Nob3dQYWdpbmF0aW9uQ29udHJvbHM9ZX19X2NoZWNrU2Nyb2xsaW5nQ29udHJvbHMoKXt0aGlzLmRpc2FibGVQYWdpbmF0aW9uP3RoaXMuX2Rpc2FibGVTY3JvbGxBZnRlcj10aGlzLl9kaXNhYmxlU2Nyb2xsQmVmb3JlPSEwOih0aGlzLl9kaXNhYmxlU2Nyb2xsQmVmb3JlPTA9PXRoaXMuc2Nyb2xsRGlzdGFuY2UsdGhpcy5fZGlzYWJsZVNjcm9sbEFmdGVyPXRoaXMuc2Nyb2xsRGlzdGFuY2U9PXRoaXMuX2dldE1heFNjcm9sbERpc3RhbmNlKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfV9nZXRNYXhTY3JvbGxEaXN0YW5jZSgpe3JldHVybiB0aGlzLl90YWJMaXN0SW5uZXIubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aC10aGlzLl90YWJMaXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGh8fDB9X2FsaWduSW5rQmFyVG9TZWxlY3RlZFRhYigpe2xldCBlPXRoaXMuX2l0ZW1zJiZ0aGlzLl9pdGVtcy5sZW5ndGg/dGhpcy5faXRlbXMudG9BcnJheSgpW3RoaXMuc2VsZWN0ZWRJbmRleF06bnVsbCxpPWU/ZS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ6bnVsbDtpP3RoaXMuX2lua0Jhci5hbGlnblRvRWxlbWVudChpKTp0aGlzLl9pbmtCYXIuaGlkZSgpfV9zdG9wSW50ZXJ2YWwoKXt0aGlzLl9zdG9wU2Nyb2xsaW5nLm5leHQoKX1faGFuZGxlUGFnaW5hdG9yUHJlc3MoZSxpKXtpJiZudWxsIT1pLmJ1dHRvbiYmMCE9PWkuYnV0dG9ufHwodGhpcy5fc3RvcEludGVydmFsKCkscnMoNjUwLDEwMCkucGlwZShpdCh0bih0aGlzLl9zdG9wU2Nyb2xsaW5nLHRoaXMuX2Rlc3Ryb3llZCkpKS5zdWJzY3JpYmUoKCk9PntsZXR7bWF4U2Nyb2xsRGlzdGFuY2U6cixkaXN0YW5jZTpvfT10aGlzLl9zY3JvbGxIZWFkZXIoZSk7KDA9PT1vfHxvPj1yKSYmdGhpcy5fc3RvcEludGVydmFsKCl9KSl9X3Njcm9sbFRvKGUpe2lmKHRoaXMuZGlzYWJsZVBhZ2luYXRpb24pcmV0dXJue21heFNjcm9sbERpc3RhbmNlOjAsZGlzdGFuY2U6MH07bGV0IGk9dGhpcy5fZ2V0TWF4U2Nyb2xsRGlzdGFuY2UoKTtyZXR1cm4gdGhpcy5fc2Nyb2xsRGlzdGFuY2U9TWF0aC5tYXgoMCxNYXRoLm1pbihpLGUpKSx0aGlzLl9zY3JvbGxEaXN0YW5jZUNoYW5nZWQ9ITAsdGhpcy5fY2hlY2tTY3JvbGxpbmdDb250cm9scygpLHttYXhTY3JvbGxEaXN0YW5jZTppLGRpc3RhbmNlOnRoaXMuX3Njcm9sbERpc3RhbmNlfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyh4ZSksQyhRdCksQyhXYSksQyh6aSw4KSxDKG90KSxDKFZuKSxDKHBpLDgpKX0sbi5cdTAyNzVkaXI9TWUoe3R5cGU6bixpbnB1dHM6e2Rpc2FibGVQYWdpbmF0aW9uOiJkaXNhYmxlUGFnaW5hdGlvbiJ9fSksbn0pKCksR0NlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBmWHtnZXQgZGlzYWJsZVJpcHBsZSgpe3JldHVybiB0aGlzLl9kaXNhYmxlUmlwcGxlfXNldCBkaXNhYmxlUmlwcGxlKGUpe3RoaXMuX2Rpc2FibGVSaXBwbGU9dnQoZSl9Y29uc3RydWN0b3IoZSxpLHIsbyxhLHMsbCl7c3VwZXIoZSxpLHIsbyxhLHMsbCksdGhpcy5fZGlzYWJsZVJpcHBsZT0hMX1faXRlbVNlbGVjdGVkKGUpe2UucHJldmVudERlZmF1bHQoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyh4ZSksQyhRdCksQyhXYSksQyh6aSw4KSxDKG90KSxDKFZuKSxDKHBpLDgpKX0sbi5cdTAyNzVkaXI9TWUoe3R5cGU6bixpbnB1dHM6e2Rpc2FibGVSaXBwbGU6ImRpc2FibGVSaXBwbGUifSxmZWF0dXJlczpbWGVdfSksbn0pKCksV0NlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBHQ2V7Y29uc3RydWN0b3IoZSxpLHIsbyxhLHMsbCl7c3VwZXIoZSxpLHIsbyxhLHMsbCl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5faW5rQmFyPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9pdGVtcz10fWhpZGUoKXt0aGlzLl9pdGVtcy5mb3JFYWNoKHQ9PnQuZGVhY3RpdmF0ZUlua0JhcigpKX1hbGlnblRvRWxlbWVudCh0KXtsZXQgZT10aGlzLl9pdGVtcy5maW5kKHI9PnIuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50PT09dCksaT10aGlzLl9jdXJyZW50SXRlbTtpZihpPy5kZWFjdGl2YXRlSW5rQmFyKCksZSl7bGV0IHI9aT8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdD8uKCk7ZS5hY3RpdmF0ZUlua0JhcihyKSx0aGlzLl9jdXJyZW50SXRlbT1lfX19KHRoaXMuX2l0ZW1zKSxzdXBlci5uZ0FmdGVyQ29udGVudEluaXQoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyh4ZSksQyhRdCksQyhXYSksQyh6aSw4KSxDKG90KSxDKFZuKSxDKHBpLDgpKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtdGFiLWhlYWRlciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihlLGkscil7aWYoMSZlJiZCbihyLGhYLDQpLDImZSl7bGV0IG87YmUobz12ZSgpKSYmKGkuX2l0ZW1zPW8pfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoVWUoYkNlLDcpLFVlKHZDZSw3KSxVZSh5Q2UsNyksVWUoeENlLDUpLFVlKENDZSw1KSksMiZlKXtsZXQgcjtiZShyPXZlKCkpJiYoaS5fdGFiTGlzdENvbnRhaW5lcj1yLmZpcnN0KSxiZShyPXZlKCkpJiYoaS5fdGFiTGlzdD1yLmZpcnN0KSxiZShyPXZlKCkpJiYoaS5fdGFiTGlzdElubmVyPXIuZmlyc3QpLGJlKHI9dmUoKSkmJihpLl9uZXh0UGFnaW5hdG9yPXIuZmlyc3QpLGJlKHI9dmUoKSkmJihpLl9wcmV2aW91c1BhZ2luYXRvcj1yLmZpcnN0KX19LGhvc3RBdHRyczpbMSwibWF0LW1kYy10YWItaGVhZGVyIl0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJm50KCJtYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jb250cm9scy1lbmFibGVkIixpLl9zaG93UGFnaW5hdGlvbkNvbnRyb2xzKSgibWF0LW1kYy10YWItaGVhZGVyLXJ0bCIsInJ0bCI9PWkuX2dldExheW91dERpcmVjdGlvbigpKX0saW5wdXRzOntzZWxlY3RlZEluZGV4OiJzZWxlY3RlZEluZGV4In0sb3V0cHV0czp7c2VsZWN0Rm9jdXNlZEluZGV4OiJzZWxlY3RGb2N1c2VkSW5kZXgiLGluZGV4Rm9jdXNlZDoiaW5kZXhGb2N1c2VkIn0sZmVhdHVyZXM6W1hlXSxuZ0NvbnRlbnRTZWxlY3RvcnM6Y1gsZGVjbHM6MTMsdmFyczoxMCxjb25zdHM6W1siYXJpYS1oaWRkZW4iLCJ0cnVlIiwidHlwZSIsImJ1dHRvbiIsIm1hdC1yaXBwbGUiLCIiLCJ0YWJpbmRleCIsIi0xIiwxLCJtYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbiIsIm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWJlZm9yZSIsMywibWF0UmlwcGxlRGlzYWJsZWQiLCJkaXNhYmxlZCIsImNsaWNrIiwibW91c2Vkb3duIiwidG91Y2hlbmQiXSxbInByZXZpb3VzUGFnaW5hdG9yIiwiIl0sWzEsIm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24iXSxbMSwibWF0LW1kYy10YWItbGFiZWwtY29udGFpbmVyIiwzLCJrZXlkb3duIl0sWyJ0YWJMaXN0Q29udGFpbmVyIiwiIl0sWyJyb2xlIiwidGFibGlzdCIsMSwibWF0LW1kYy10YWItbGlzdCIsMywiY2RrT2JzZXJ2ZUNvbnRlbnQiXSxbInRhYkxpc3QiLCIiXSxbMSwibWF0LW1kYy10YWItbGFiZWxzIl0sWyJ0YWJMaXN0SW5uZXIiLCIiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInR5cGUiLCJidXR0b24iLCJtYXQtcmlwcGxlIiwiIiwidGFiaW5kZXgiLCItMSIsMSwibWF0LW1kYy10YWItaGVhZGVyLXBhZ2luYXRpb24iLCJtYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbi1hZnRlciIsMywibWF0UmlwcGxlRGlzYWJsZWQiLCJkaXNhYmxlZCIsIm1vdXNlZG93biIsImNsaWNrIiwidG91Y2hlbmQiXSxbIm5leHRQYWdpbmF0b3IiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihmbigpLGYoMCwiYnV0dG9uIiwwLDEpLEEoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLl9oYW5kbGVQYWdpbmF0b3JDbGljaygiYmVmb3JlIil9KSgibW91c2Vkb3duIixmdW5jdGlvbihvKXtyZXR1cm4gaS5faGFuZGxlUGFnaW5hdG9yUHJlc3MoImJlZm9yZSIsbyl9KSgidG91Y2hlbmQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX3N0b3BJbnRlcnZhbCgpfSksaygyLCJkaXYiLDIpLGcoKSxmKDMsImRpdiIsMyw0KSxBKCJrZXlkb3duIixmdW5jdGlvbihvKXtyZXR1cm4gaS5faGFuZGxlS2V5ZG93bihvKX0pLGYoNSwiZGl2Iiw1LDYpLEEoImNka09ic2VydmVDb250ZW50IixmdW5jdGlvbigpe3JldHVybiBpLl9vbkNvbnRlbnRDaGFuZ2VzKCl9KSxmKDcsImRpdiIsNyw4KSxUdCg5KSxnKCkoKSgpLGYoMTAsImJ1dHRvbiIsOSwxMCksQSgibW91c2Vkb3duIixmdW5jdGlvbihvKXtyZXR1cm4gaS5faGFuZGxlUGFnaW5hdG9yUHJlc3MoImFmdGVyIixvKX0pKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5faGFuZGxlUGFnaW5hdG9yQ2xpY2soImFmdGVyIil9KSgidG91Y2hlbmQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX3N0b3BJbnRlcnZhbCgpfSksaygxMiwiZGl2IiwyKSxnKCkpLDImZSYmKG50KCJtYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCIsaS5fZGlzYWJsZVNjcm9sbEJlZm9yZSksYigibWF0UmlwcGxlRGlzYWJsZWQiLGkuX2Rpc2FibGVTY3JvbGxCZWZvcmV8fGkuZGlzYWJsZVJpcHBsZSkoImRpc2FibGVkIixpLl9kaXNhYmxlU2Nyb2xsQmVmb3JlfHxudWxsKSx2KDMpLG50KCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsIk5vb3BBbmltYXRpb25zIj09PWkuX2FuaW1hdGlvbk1vZGUpLHYoNyksbnQoIm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIixpLl9kaXNhYmxlU2Nyb2xsQWZ0ZXIpLGIoIm1hdFJpcHBsZURpc2FibGVkIixpLl9kaXNhYmxlU2Nyb2xsQWZ0ZXJ8fGkuZGlzYWJsZVJpcHBsZSkoImRpc2FibGVkIixpLl9kaXNhYmxlU2Nyb2xsQWZ0ZXJ8fG51bGwpKX0sZGVwZW5kZW5jaWVzOltLaSxPMV0sc3R5bGVzOlsiLm1hdC1tZGMtdGFiLWhlYWRlcntkaXNwbGF5OmZsZXg7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlO2ZsZXgtc2hyaW5rOjB9Lm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6bm9uZTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjttaW4td2lkdGg6MzJweDtjdXJzb3I6cG9pbnRlcjt6LWluZGV4OjI7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7dG91Y2gtYWN0aW9uOm5vbmU7Ym94LXNpemluZzpjb250ZW50LWJveDtiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOm5vbmU7b3V0bGluZTowO3BhZGRpbmc6MH0ubWF0LW1kYy10YWItaGVhZGVyLXBhZ2luYXRpb246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7b3BhY2l0eTouMTJ9Lm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNvbnRyb2xzLWVuYWJsZWQgLm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9ue2Rpc3BsYXk6ZmxleH0ubWF0LW1kYy10YWItaGVhZGVyLXBhZ2luYXRpb24tYmVmb3JlLC5tYXQtbWRjLXRhYi1oZWFkZXItcnRsIC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbi1hZnRlcntwYWRkaW5nLWxlZnQ6NHB4fS5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbi1iZWZvcmUgLm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC1tZGMtdGFiLWhlYWRlci1ydGwgLm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWFmdGVyIC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue3RyYW5zZm9ybTpyb3RhdGUoLTEzNWRlZyl9Lm1hdC1tZGMtdGFiLWhlYWRlci1ydGwgLm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWJlZm9yZSwubWF0LW1kYy10YWItaGVhZGVyLXBhZ2luYXRpb24tYWZ0ZXJ7cGFkZGluZy1yaWdodDo0cHh9Lm1hdC1tZGMtdGFiLWhlYWRlci1ydGwgLm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWJlZm9yZSAubWF0LW1kYy10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LW1kYy10YWItaGVhZGVyLXBhZ2luYXRpb24tYWZ0ZXIgLm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9Lm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDoycHggMnB4IDAgMDtoZWlnaHQ6OHB4O3dpZHRoOjhweH0ubWF0LW1kYy10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWR7Ym94LXNoYWRvdzpub25lO2N1cnNvcjpkZWZhdWx0O3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue29wYWNpdHk6LjR9Lm1hdC1tZGMtdGFiLWxpc3R7ZmxleC1ncm93OjE7cG9zaXRpb246cmVsYXRpdmU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gNTAwbXMgY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LW1kYy10YWItbGlzdHt0cmFuc2l0aW9uOm5vbmV9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIHNwYW4ubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQsLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIHNwYW4ubWRjLXRhYl9fdGV4dC1sYWJlbHt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1tZGMtdGFiLWxhYmVsLWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7ZmxleC1ncm93OjE7b3ZlcmZsb3c6aGlkZGVuO3otaW5kZXg6MX0ubWF0LW1kYy10YWItbGFiZWxze2Rpc3BsYXk6ZmxleDtmbGV4OjEgMCBhdXRvfVttYXQtYWxpZ24tdGFicz1jZW50ZXJdPi5tYXQtbWRjLXRhYi1oZWFkZXIgLm1hdC1tZGMtdGFiLWxhYmVsc3tqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVttYXQtYWxpZ24tdGFicz1lbmRdPi5tYXQtbWRjLXRhYi1oZWFkZXIgLm1hdC1tZGMtdGFiLWxhYmVsc3tqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9Lm1hdC1tZGMtdGFiOjpiZWZvcmV7bWFyZ2luOjVweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWRjLXRhYlthcmlhLWRpc2FibGVkPXRydWVde2NvbG9yOkdyYXlUZXh0fSJdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLGdYPW5ldyB0ZSgiTUFUX1RBQlNfQ09ORklHIikscUNlPTAsWENlPUtvKGdvKGNsYXNze2NvbnN0cnVjdG9yKG4pe3RoaXMuX2VsZW1lbnRSZWY9bn19KSwicHJpbWFyeSIpLFlDZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgWENle2dldCBkeW5hbWljSGVpZ2h0KCl7cmV0dXJuIHRoaXMuX2R5bmFtaWNIZWlnaHR9c2V0IGR5bmFtaWNIZWlnaHQoZSl7dGhpcy5fZHluYW1pY0hlaWdodD12dChlKX1nZXQgc2VsZWN0ZWRJbmRleCgpe3JldHVybiB0aGlzLl9zZWxlY3RlZEluZGV4fXNldCBzZWxlY3RlZEluZGV4KGUpe3RoaXMuX2luZGV4VG9TZWxlY3Q9bWkoZSxudWxsKX1nZXQgYW5pbWF0aW9uRHVyYXRpb24oKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uRHVyYXRpb259c2V0IGFuaW1hdGlvbkR1cmF0aW9uKGUpe3RoaXMuX2FuaW1hdGlvbkR1cmF0aW9uPS9eXGQrJC8udGVzdChlKyIiKT9lKyJtcyI6ZX1nZXQgY29udGVudFRhYkluZGV4KCl7cmV0dXJuIHRoaXMuX2NvbnRlbnRUYWJJbmRleH1zZXQgY29udGVudFRhYkluZGV4KGUpe3RoaXMuX2NvbnRlbnRUYWJJbmRleD1taShlLG51bGwpfWdldCBkaXNhYmxlUGFnaW5hdGlvbigpe3JldHVybiB0aGlzLl9kaXNhYmxlUGFnaW5hdGlvbn1zZXQgZGlzYWJsZVBhZ2luYXRpb24oZSl7dGhpcy5fZGlzYWJsZVBhZ2luYXRpb249dnQoZSl9Z2V0IHByZXNlcnZlQ29udGVudCgpe3JldHVybiB0aGlzLl9wcmVzZXJ2ZUNvbnRlbnR9c2V0IHByZXNlcnZlQ29udGVudChlKXt0aGlzLl9wcmVzZXJ2ZUNvbnRlbnQ9dnQoZSl9Z2V0IGJhY2tncm91bmRDb2xvcigpe3JldHVybiB0aGlzLl9iYWNrZ3JvdW5kQ29sb3J9c2V0IGJhY2tncm91bmRDb2xvcihlKXtsZXQgaT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0O2kucmVtb3ZlKCJtYXQtdGFicy13aXRoLWJhY2tncm91bmQiLGBtYXQtYmFja2dyb3VuZC0ke3RoaXMuYmFja2dyb3VuZENvbG9yfWApLGUmJmkuYWRkKCJtYXQtdGFicy13aXRoLWJhY2tncm91bmQiLGBtYXQtYmFja2dyb3VuZC0ke2V9YCksdGhpcy5fYmFja2dyb3VuZENvbG9yPWV9Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIoZSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9aSx0aGlzLl9hbmltYXRpb25Nb2RlPW8sdGhpcy5fdGFicz1uZXcgUGEsdGhpcy5faW5kZXhUb1NlbGVjdD0wLHRoaXMuX2xhc3RGb2N1c2VkVGFiSW5kZXg9bnVsbCx0aGlzLl90YWJCb2R5V3JhcHBlckhlaWdodD0wLHRoaXMuX3RhYnNTdWJzY3JpcHRpb249RW4uRU1QVFksdGhpcy5fdGFiTGFiZWxTdWJzY3JpcHRpb249RW4uRU1QVFksdGhpcy5fZHluYW1pY0hlaWdodD0hMSx0aGlzLl9zZWxlY3RlZEluZGV4PW51bGwsdGhpcy5oZWFkZXJQb3NpdGlvbj0iYWJvdmUiLHRoaXMuX2Rpc2FibGVQYWdpbmF0aW9uPSExLHRoaXMuX3ByZXNlcnZlQ29udGVudD0hMSx0aGlzLnNlbGVjdGVkSW5kZXhDaGFuZ2U9bmV3IEYsdGhpcy5mb2N1c0NoYW5nZT1uZXcgRix0aGlzLmFuaW1hdGlvbkRvbmU9bmV3IEYsdGhpcy5zZWxlY3RlZFRhYkNoYW5nZT1uZXcgRighMCksdGhpcy5fZ3JvdXBJZD1xQ2UrKyx0aGlzLmFuaW1hdGlvbkR1cmF0aW9uPXImJnIuYW5pbWF0aW9uRHVyYXRpb24/ci5hbmltYXRpb25EdXJhdGlvbjoiNTAwbXMiLHRoaXMuZGlzYWJsZVBhZ2luYXRpb249ISghcnx8bnVsbD09ci5kaXNhYmxlUGFnaW5hdGlvbikmJnIuZGlzYWJsZVBhZ2luYXRpb24sdGhpcy5keW5hbWljSGVpZ2h0PSEoIXJ8fG51bGw9PXIuZHluYW1pY0hlaWdodCkmJnIuZHluYW1pY0hlaWdodCx0aGlzLmNvbnRlbnRUYWJJbmRleD1yPy5jb250ZW50VGFiSW5kZXg/P251bGwsdGhpcy5wcmVzZXJ2ZUNvbnRlbnQ9ISFyPy5wcmVzZXJ2ZUNvbnRlbnR9bmdBZnRlckNvbnRlbnRDaGVja2VkKCl7bGV0IGU9dGhpcy5faW5kZXhUb1NlbGVjdD10aGlzLl9jbGFtcFRhYkluZGV4KHRoaXMuX2luZGV4VG9TZWxlY3QpO2lmKHRoaXMuX3NlbGVjdGVkSW5kZXghPWUpe2xldCBpPW51bGw9PXRoaXMuX3NlbGVjdGVkSW5kZXg7aWYoIWkpe3RoaXMuc2VsZWN0ZWRUYWJDaGFuZ2UuZW1pdCh0aGlzLl9jcmVhdGVDaGFuZ2VFdmVudChlKSk7bGV0IHI9dGhpcy5fdGFiQm9keVdyYXBwZXIubmF0aXZlRWxlbWVudDtyLnN0eWxlLm1pbkhlaWdodD1yLmNsaWVudEhlaWdodCsicHgifVByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pnt0aGlzLl90YWJzLmZvckVhY2goKHIsbyk9PnIuaXNBY3RpdmU9bz09PWUpLGl8fCh0aGlzLnNlbGVjdGVkSW5kZXhDaGFuZ2UuZW1pdChlKSx0aGlzLl90YWJCb2R5V3JhcHBlci5uYXRpdmVFbGVtZW50LnN0eWxlLm1pbkhlaWdodD0iIil9KX10aGlzLl90YWJzLmZvckVhY2goKGkscik9PntpLnBvc2l0aW9uPXItZSxudWxsIT10aGlzLl9zZWxlY3RlZEluZGV4JiYwPT1pLnBvc2l0aW9uJiYhaS5vcmlnaW4mJihpLm9yaWdpbj1lLXRoaXMuX3NlbGVjdGVkSW5kZXgpfSksdGhpcy5fc2VsZWN0ZWRJbmRleCE9PWUmJih0aGlzLl9zZWxlY3RlZEluZGV4PWUsdGhpcy5fbGFzdEZvY3VzZWRUYWJJbmRleD1udWxsLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLl9zdWJzY3JpYmVUb0FsbFRhYkNoYW5nZXMoKSx0aGlzLl9zdWJzY3JpYmVUb1RhYkxhYmVscygpLHRoaXMuX3RhYnNTdWJzY3JpcHRpb249dGhpcy5fdGFicy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e2xldCBlPXRoaXMuX2NsYW1wVGFiSW5kZXgodGhpcy5faW5kZXhUb1NlbGVjdCk7aWYoZT09PXRoaXMuX3NlbGVjdGVkSW5kZXgpe2xldCByLGk9dGhpcy5fdGFicy50b0FycmF5KCk7Zm9yKGxldCBvPTA7bzxpLmxlbmd0aDtvKyspaWYoaVtvXS5pc0FjdGl2ZSl7dGhpcy5faW5kZXhUb1NlbGVjdD10aGlzLl9zZWxlY3RlZEluZGV4PW8sdGhpcy5fbGFzdEZvY3VzZWRUYWJJbmRleD1udWxsLHI9aVtvXTticmVha30hciYmaVtlXSYmUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e2lbZV0uaXNBY3RpdmU9ITAsdGhpcy5zZWxlY3RlZFRhYkNoYW5nZS5lbWl0KHRoaXMuX2NyZWF0ZUNoYW5nZUV2ZW50KGUpKX0pfXRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSl9X3N1YnNjcmliZVRvQWxsVGFiQ2hhbmdlcygpe3RoaXMuX2FsbFRhYnMuY2hhbmdlcy5waXBlKGtuKHRoaXMuX2FsbFRhYnMpKS5zdWJzY3JpYmUoZT0+e3RoaXMuX3RhYnMucmVzZXQoZS5maWx0ZXIoaT0+aS5fY2xvc2VzdFRhYkdyb3VwPT09dGhpc3x8IWkuX2Nsb3Nlc3RUYWJHcm91cCkpLHRoaXMuX3RhYnMubm90aWZ5T25DaGFuZ2VzKCl9KX1uZ09uRGVzdHJveSgpe3RoaXMuX3RhYnMuZGVzdHJveSgpLHRoaXMuX3RhYnNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl90YWJMYWJlbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXJlYWxpZ25JbmtCYXIoKXt0aGlzLl90YWJIZWFkZXImJnRoaXMuX3RhYkhlYWRlci5fYWxpZ25JbmtCYXJUb1NlbGVjdGVkVGFiKCl9dXBkYXRlUGFnaW5hdGlvbigpe3RoaXMuX3RhYkhlYWRlciYmdGhpcy5fdGFiSGVhZGVyLnVwZGF0ZVBhZ2luYXRpb24oKX1mb2N1c1RhYihlKXtsZXQgaT10aGlzLl90YWJIZWFkZXI7aSYmKGkuZm9jdXNJbmRleD1lKX1fZm9jdXNDaGFuZ2VkKGUpe3RoaXMuX2xhc3RGb2N1c2VkVGFiSW5kZXg9ZSx0aGlzLmZvY3VzQ2hhbmdlLmVtaXQodGhpcy5fY3JlYXRlQ2hhbmdlRXZlbnQoZSkpfV9jcmVhdGVDaGFuZ2VFdmVudChlKXtsZXQgaT1uZXcgZU47cmV0dXJuIGkuaW5kZXg9ZSx0aGlzLl90YWJzJiZ0aGlzLl90YWJzLmxlbmd0aCYmKGkudGFiPXRoaXMuX3RhYnMudG9BcnJheSgpW2VdKSxpfV9zdWJzY3JpYmVUb1RhYkxhYmVscygpe3RoaXMuX3RhYkxhYmVsU3Vic2NyaXB0aW9uJiZ0aGlzLl90YWJMYWJlbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3RhYkxhYmVsU3Vic2NyaXB0aW9uPXRuKC4uLnRoaXMuX3RhYnMubWFwKGU9PmUuX3N0YXRlQ2hhbmdlcykpLnN1YnNjcmliZSgoKT0+dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfV9jbGFtcFRhYkluZGV4KGUpe3JldHVybiBNYXRoLm1pbih0aGlzLl90YWJzLmxlbmd0aC0xLE1hdGgubWF4KGV8fDAsMCkpfV9nZXRUYWJMYWJlbElkKGUpe3JldHVybmBtYXQtdGFiLWxhYmVsLSR7dGhpcy5fZ3JvdXBJZH0tJHtlfWB9X2dldFRhYkNvbnRlbnRJZChlKXtyZXR1cm5gbWF0LXRhYi1jb250ZW50LSR7dGhpcy5fZ3JvdXBJZH0tJHtlfWB9X3NldFRhYkJvZHlXcmFwcGVySGVpZ2h0KGUpe2lmKCF0aGlzLl9keW5hbWljSGVpZ2h0fHwhdGhpcy5fdGFiQm9keVdyYXBwZXJIZWlnaHQpcmV0dXJuO2xldCBpPXRoaXMuX3RhYkJvZHlXcmFwcGVyLm5hdGl2ZUVsZW1lbnQ7aS5zdHlsZS5oZWlnaHQ9dGhpcy5fdGFiQm9keVdyYXBwZXJIZWlnaHQrInB4Iix0aGlzLl90YWJCb2R5V3JhcHBlci5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCYmKGkuc3R5bGUuaGVpZ2h0PWUrInB4Iil9X3JlbW92ZVRhYkJvZHlXcmFwcGVySGVpZ2h0KCl7bGV0IGU9dGhpcy5fdGFiQm9keVdyYXBwZXIubmF0aXZlRWxlbWVudDt0aGlzLl90YWJCb2R5V3JhcHBlckhlaWdodD1lLmNsaWVudEhlaWdodCxlLnN0eWxlLmhlaWdodD0iIix0aGlzLmFuaW1hdGlvbkRvbmUuZW1pdCgpfV9oYW5kbGVDbGljayhlLGkscil7aS5mb2N1c0luZGV4PXIsZS5kaXNhYmxlZHx8KHRoaXMuc2VsZWN0ZWRJbmRleD1yKX1fZ2V0VGFiSW5kZXgoZSl7cmV0dXJuIGU9PT0odGhpcy5fbGFzdEZvY3VzZWRUYWJJbmRleD8/dGhpcy5zZWxlY3RlZEluZGV4KT8wOi0xfV90YWJGb2N1c0NoYW5nZWQoZSxpKXtlJiYibW91c2UiIT09ZSYmInRvdWNoIiE9PWUmJih0aGlzLl90YWJIZWFkZXIuZm9jdXNJbmRleD1pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyh4ZSksQyhRdCksQyhnWCw4KSxDKHBpLDgpKX0sbi5cdTAyNzVkaXI9TWUoe3R5cGU6bixpbnB1dHM6e2R5bmFtaWNIZWlnaHQ6ImR5bmFtaWNIZWlnaHQiLHNlbGVjdGVkSW5kZXg6InNlbGVjdGVkSW5kZXgiLGhlYWRlclBvc2l0aW9uOiJoZWFkZXJQb3NpdGlvbiIsYW5pbWF0aW9uRHVyYXRpb246ImFuaW1hdGlvbkR1cmF0aW9uIixjb250ZW50VGFiSW5kZXg6ImNvbnRlbnRUYWJJbmRleCIsZGlzYWJsZVBhZ2luYXRpb246ImRpc2FibGVQYWdpbmF0aW9uIixwcmVzZXJ2ZUNvbnRlbnQ6InByZXNlcnZlQ29udGVudCIsYmFja2dyb3VuZENvbG9yOiJiYWNrZ3JvdW5kQ29sb3IifSxvdXRwdXRzOntzZWxlY3RlZEluZGV4Q2hhbmdlOiJzZWxlY3RlZEluZGV4Q2hhbmdlIixmb2N1c0NoYW5nZToiZm9jdXNDaGFuZ2UiLGFuaW1hdGlvbkRvbmU6ImFuaW1hdGlvbkRvbmUiLHNlbGVjdGVkVGFiQ2hhbmdlOiJzZWxlY3RlZFRhYkNoYW5nZSJ9LGZlYXR1cmVzOltYZV19KSxufSkoKSx2RT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgWUNle2dldCBmaXRJbmtCYXJUb0NvbnRlbnQoKXtyZXR1cm4gdGhpcy5fZml0SW5rQmFyVG9Db250ZW50fXNldCBmaXRJbmtCYXJUb0NvbnRlbnQoZSl7dGhpcy5fZml0SW5rQmFyVG9Db250ZW50PXZ0KGUpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfWdldCBzdHJldGNoVGFicygpe3JldHVybiB0aGlzLl9zdHJldGNoVGFic31zZXQgc3RyZXRjaFRhYnMoZSl7dGhpcy5fc3RyZXRjaFRhYnM9dnQoZSl9Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIoZSxpLHIsbyksdGhpcy5fZml0SW5rQmFyVG9Db250ZW50PSExLHRoaXMuX3N0cmV0Y2hUYWJzPSEwLHRoaXMuZml0SW5rQmFyVG9Db250ZW50PSEoIXJ8fG51bGw9PXIuZml0SW5rQmFyVG9Db250ZW50KSYmci5maXRJbmtCYXJUb0NvbnRlbnR9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoeGUpLEMoUXQpLEMoZ1gsOCksQyhwaSw4KSl9LG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LXRhYi1ncm91cCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihlLGkscil7aWYoMSZlJiZCbihyLGF5LDUpLDImZSl7bGV0IG87YmUobz12ZSgpKSYmKGkuX2FsbFRhYnM9byl9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihVZShNQ2UsNSksVWUod0NlLDUpKSwyJmUpe2xldCByO2JlKHI9dmUoKSkmJihpLl90YWJCb2R5V3JhcHBlcj1yLmZpcnN0KSxiZShyPXZlKCkpJiYoaS5fdGFiSGVhZGVyPXIuZmlyc3QpfX0saG9zdEF0dHJzOlsxLCJtYXQtbWRjLXRhYi1ncm91cCJdLGhvc3RWYXJzOjYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZudCgibWF0LW1kYy10YWItZ3JvdXAtZHluYW1pYy1oZWlnaHQiLGkuZHluYW1pY0hlaWdodCkoIm1hdC1tZGMtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlciIsImJlbG93Ij09PWkuaGVhZGVyUG9zaXRpb24pKCJtYXQtbWRjLXRhYi1ncm91cC1zdHJldGNoLXRhYnMiLGkuc3RyZXRjaFRhYnMpfSxpbnB1dHM6e2NvbG9yOiJjb2xvciIsZGlzYWJsZVJpcHBsZToiZGlzYWJsZVJpcHBsZSIsZml0SW5rQmFyVG9Db250ZW50OiJmaXRJbmtCYXJUb0NvbnRlbnQiLHN0cmV0Y2hUYWJzOlsibWF0LXN0cmV0Y2gtdGFicyIsInN0cmV0Y2hUYWJzIl19LGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXSxmZWF0dXJlczpbVnQoW3twcm92aWRlOm1YLHVzZUV4aXN0aW5nOm59XSksWGVdLGRlY2xzOjYsdmFyczo3LGNvbnN0czpbWzMsInNlbGVjdGVkSW5kZXgiLCJkaXNhYmxlUmlwcGxlIiwiZGlzYWJsZVBhZ2luYXRpb24iLCJpbmRleEZvY3VzZWQiLCJzZWxlY3RGb2N1c2VkSW5kZXgiXSxbInRhYkhlYWRlciIsIiJdLFsiY2xhc3MiLCJtZGMtdGFiIG1hdC1tZGMtdGFiIG1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yIiwicm9sZSIsInRhYiIsIm1hdFRhYkxhYmVsV3JhcHBlciIsIiIsImNka01vbml0b3JFbGVtZW50Rm9jdXMiLCIiLDMsImlkIiwibWRjLXRhYi0tYWN0aXZlIiwibmdDbGFzcyIsImRpc2FibGVkIiwiZml0SW5rQmFyVG9Db250ZW50IiwiY2xpY2siLCJjZGtGb2N1c0NoYW5nZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsIm1hdC1tZGMtdGFiLWJvZHktd3JhcHBlciJdLFsidGFiQm9keVdyYXBwZXIiLCIiXSxbInJvbGUiLCJ0YWJwYW5lbCIsMywiaWQiLCJtYXQtbWRjLXRhYi1ib2R5LWFjdGl2ZSIsIm5nQ2xhc3MiLCJjb250ZW50IiwicG9zaXRpb24iLCJvcmlnaW4iLCJhbmltYXRpb25EdXJhdGlvbiIsInByZXNlcnZlQ29udGVudCIsIl9vbkNlbnRlcmVkIiwiX29uQ2VudGVyaW5nIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbInJvbGUiLCJ0YWIiLCJtYXRUYWJMYWJlbFdyYXBwZXIiLCIiLCJjZGtNb25pdG9yRWxlbWVudEZvY3VzIiwiIiwxLCJtZGMtdGFiIiwibWF0LW1kYy10YWIiLCJtYXQtbWRjLWZvY3VzLWluZGljYXRvciIsMywiaWQiLCJuZ0NsYXNzIiwiZGlzYWJsZWQiLCJmaXRJbmtCYXJUb0NvbnRlbnQiLCJjbGljayIsImNka0ZvY3VzQ2hhbmdlIl0sWyJ0YWJOb2RlIiwiIl0sWzEsIm1kYy10YWJfX3JpcHBsZSJdLFsibWF0LXJpcHBsZSIsIiIsMSwibWF0LW1kYy10YWItcmlwcGxlIiwzLCJtYXRSaXBwbGVUcmlnZ2VyIiwibWF0UmlwcGxlRGlzYWJsZWQiXSxbMSwibWRjLXRhYl9fY29udGVudCJdLFsxLCJtZGMtdGFiX190ZXh0LWxhYmVsIl0sWzMsIm5nSWYiLCJuZ0lmRWxzZSJdLFsidGFiVGV4dExhYmVsIiwiIl0sWzMsImNka1BvcnRhbE91dGxldCJdLFsicm9sZSIsInRhYnBhbmVsIiwzLCJpZCIsIm5nQ2xhc3MiLCJjb250ZW50IiwicG9zaXRpb24iLCJvcmlnaW4iLCJhbmltYXRpb25EdXJhdGlvbiIsInByZXNlcnZlQ29udGVudCIsIl9vbkNlbnRlcmVkIiwiX29uQ2VudGVyaW5nIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZigwLCJtYXQtdGFiLWhlYWRlciIsMCwxKSxBKCJpbmRleEZvY3VzZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9mb2N1c0NoYW5nZWQobyl9KSgic2VsZWN0Rm9jdXNlZEluZGV4IixmdW5jdGlvbihvKXtyZXR1cm4gaS5zZWxlY3RlZEluZGV4PW99KSxTKDIsRENlLDksMTcsImRpdiIsMiksZygpLGYoMywiZGl2IiwzLDQpLFMoNSxJQ2UsMSwxMSwibWF0LXRhYi1ib2R5Iiw1KSxnKCkpLDImZSYmKGIoInNlbGVjdGVkSW5kZXgiLGkuc2VsZWN0ZWRJbmRleHx8MCkoImRpc2FibGVSaXBwbGUiLGkuZGlzYWJsZVJpcHBsZSkoImRpc2FibGVQYWdpbmF0aW9uIixpLmRpc2FibGVQYWdpbmF0aW9uKSx2KDIpLGIoIm5nRm9yT2YiLGkuX3RhYnMpLHYoMSksbnQoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIiwiTm9vcEFuaW1hdGlvbnMiPT09aS5fYW5pbWF0aW9uTW9kZSksdigyKSxiKCJuZ0Zvck9mIixpLl90YWJzKSl9LGRlcGVuZGVuY2llczpbd24sbm4sTmUsYmEsS2ksQTcsZFgsaFgsV0NlXSxzdHlsZXM6WycubWRjLXRhYnttaW4td2lkdGg6OTBweDtwYWRkaW5nLXJpZ2h0OjI0cHg7cGFkZGluZy1sZWZ0OjI0cHg7ZGlzcGxheTpmbGV4O2ZsZXg6MSAwIGF1dG87anVzdGlmeS1jb250ZW50OmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWFyZ2luOjA7cGFkZGluZy10b3A6MDtwYWRkaW5nLWJvdHRvbTowO2JvcmRlcjpub25lO291dGxpbmU6bm9uZTt0ZXh0LWFsaWduOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXA7Y3Vyc29yOnBvaW50ZXI7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7ei1pbmRleDoxfS5tZGMtdGFiOjotbW96LWZvY3VzLWlubmVye3BhZGRpbmc6MDtib3JkZXI6MH0ubWRjLXRhYltoaWRkZW5de2Rpc3BsYXk6bm9uZX0ubWRjLXRhYi0tbWluLXdpZHRoe2ZsZXg6MCAxIGF1dG99Lm1kYy10YWJfX2NvbnRlbnR7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2hlaWdodDppbmhlcml0O3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1kYy10YWJfX3RleHQtbGFiZWx7dHJhbnNpdGlvbjoxNTBtcyBjb2xvciBsaW5lYXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MTt6LWluZGV4OjJ9Lm1kYy10YWJfX2ljb257dHJhbnNpdGlvbjoxNTBtcyBjb2xvciBsaW5lYXI7ei1pbmRleDoyfS5tZGMtdGFiLS1zdGFja2VkIC5tZGMtdGFiX19jb250ZW50e2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn0ubWRjLXRhYi0tc3RhY2tlZCAubWRjLXRhYl9fdGV4dC1sYWJlbHtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NHB4fS5tZGMtdGFiLS1hY3RpdmUgLm1kYy10YWJfX3RleHQtbGFiZWwsLm1kYy10YWItLWFjdGl2ZSAubWRjLXRhYl9faWNvbnt0cmFuc2l0aW9uLWRlbGF5OjEwMG1zfS5tZGMtdGFiOm5vdCgubWRjLXRhYi0tc3RhY2tlZCkgLm1kYy10YWJfX2ljb24rLm1kYy10YWJfX3RleHQtbGFiZWx7cGFkZGluZy1sZWZ0OjhweDtwYWRkaW5nLXJpZ2h0OjB9W2Rpcj1ydGxdIC5tZGMtdGFiOm5vdCgubWRjLXRhYi0tc3RhY2tlZCkgLm1kYy10YWJfX2ljb24rLm1kYy10YWJfX3RleHQtbGFiZWwsLm1kYy10YWI6bm90KC5tZGMtdGFiLS1zdGFja2VkKSAubWRjLXRhYl9faWNvbisubWRjLXRhYl9fdGV4dC1sYWJlbFtkaXI9cnRsXXtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjhweH0ubWRjLXRhYi1pbmRpY2F0b3IgLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50LS11bmRlcmxpbmV7Ym9yZGVyLXRvcC13aWR0aDoycHh9Lm1kYy10YWItaW5kaWNhdG9yIC5tZGMtdGFiLWluZGljYXRvcl9fY29udGVudC0taWNvbntoZWlnaHQ6MzRweDtmb250LXNpemU6MzRweH0ubWRjLXRhYi1pbmRpY2F0b3J7ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7cG9pbnRlci1ldmVudHM6bm9uZTt6LWluZGV4OjF9Lm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50e3RyYW5zZm9ybS1vcmlnaW46bGVmdDtvcGFjaXR5OjB9Lm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50LS11bmRlcmxpbmV7YWxpZ24tc2VsZjpmbGV4LWVuZDtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MTAwJTtib3JkZXItdG9wLXN0eWxlOnNvbGlkfS5tZGMtdGFiLWluZGljYXRvcl9fY29udGVudC0taWNvbnthbGlnbi1zZWxmOmNlbnRlcjttYXJnaW46MCBhdXRvfS5tZGMtdGFiLWluZGljYXRvci0tYWN0aXZlIC5tZGMtdGFiLWluZGljYXRvcl9fY29udGVudHtvcGFjaXR5OjF9Lm1kYy10YWItaW5kaWNhdG9yIC5tZGMtdGFiLWluZGljYXRvcl9fY29udGVudHt0cmFuc2l0aW9uOjI1MG1zIHRyYW5zZm9ybSBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpfS5tZGMtdGFiLWluZGljYXRvci0tbm8tdHJhbnNpdGlvbiAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnR7dHJhbnNpdGlvbjpub25lfS5tZGMtdGFiLWluZGljYXRvci0tZmFkZSAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnR7dHJhbnNpdGlvbjoxNTBtcyBvcGFjaXR5IGxpbmVhcn0ubWRjLXRhYi1pbmRpY2F0b3ItLWFjdGl2ZS5tZGMtdGFiLWluZGljYXRvci0tZmFkZSAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnR7dHJhbnNpdGlvbi1kZWxheToxMDBtc30ubWF0LW1kYy10YWItcmlwcGxle3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtib3R0b206MDtyaWdodDowO3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1hdC1tZGMtdGFiey13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApfS5tYXQtbWRjLXRhYi5tZGMtdGFie2hlaWdodDo0OHB4O2ZsZXgtZ3JvdzowfS5tYXQtbWRjLXRhYiAubWRjLXRhYl9fcmlwcGxlOjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO29wYWNpdHk6MDtwb2ludGVyLWV2ZW50czpub25lfS5tYXQtbWRjLXRhYiAubWRjLXRhYl9fdGV4dC1sYWJlbHtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0ubWF0LW1kYy10YWIgLm1kYy10YWJfX2NvbnRlbnR7cG9zaXRpb246cmVsYXRpdmU7cG9pbnRlci1ldmVudHM6YXV0b30ubWF0LW1kYy10YWI6aG92ZXIgLm1kYy10YWJfX3JpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjA0fS5tYXQtbWRjLXRhYi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tZGMtdGFiX19yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy10YWIuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1kYy10YWJfX3JpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjEyfS5tYXQtbWRjLXRhYiAubWF0LXJpcHBsZS1lbGVtZW50e29wYWNpdHk6LjEyfS5tYXQtbWRjLXRhYi1ncm91cC5tYXQtbWRjLXRhYi1ncm91cC1zdHJldGNoLXRhYnM+Lm1hdC1tZGMtdGFiLWhlYWRlciAubWF0LW1kYy10YWJ7ZmxleC1ncm93OjF9Lm1hdC1tZGMtdGFiLWRpc2FibGVke29wYWNpdHk6LjR9Lm1hdC1tZGMtdGFiLWdyb3Vwe2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWF4LXdpZHRoOjEwMCV9Lm1hdC1tZGMtdGFiLWdyb3VwLm1hdC10YWJzLXdpdGgtYmFja2dyb3VuZD4ubWF0LW1kYy10YWItaGVhZGVyLC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtdGFicy13aXRoLWJhY2tncm91bmQ+Lm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWF0LW1kYy10YWItaGVhZGVyLXdpdGgtYmFja2dyb3VuZC1iYWNrZ3JvdW5kLWNvbG9yLCB0cmFuc3BhcmVudCl9Lm1hdC1tZGMtdGFiLWdyb3VwLm1hdC10YWJzLXdpdGgtYmFja2dyb3VuZD4ubWF0LW1kYy10YWItaGVhZGVyIC5tYXQtbWRjLXRhYiAubWRjLXRhYl9fdGV4dC1sYWJlbCwubWF0LW1kYy10YWItZ3JvdXAubWF0LXRhYnMtd2l0aC1iYWNrZ3JvdW5kPi5tYXQtbWRjLXRhYi1oZWFkZXIgLm1hdC1tZGMtdGFiLWxpbmsgLm1kYy10YWJfX3RleHQtbGFiZWx7Y29sb3I6dmFyKC0tbWF0LW1kYy10YWItaGVhZGVyLXdpdGgtYmFja2dyb3VuZC1mb3JlZ3JvdW5kLWNvbG9yLCBpbmhlcml0KX0ubWF0LW1kYy10YWItZ3JvdXAubWF0LXRhYnMtd2l0aC1iYWNrZ3JvdW5kPi5tYXQtbWRjLXRhYi1oZWFkZXIgLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50LS11bmRlcmxpbmUsLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC10YWJzLXdpdGgtYmFja2dyb3VuZD4ubWF0LW1kYy10YWItaGVhZGVyIC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtdGFicy13aXRoLWJhY2tncm91bmQ+Lm1hdC1tZGMtdGFiLWhlYWRlciAubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0tbWF0LW1kYy10YWItaGVhZGVyLXdpdGgtYmFja2dyb3VuZC1mb3JlZ3JvdW5kLWNvbG9yLCBpbmhlcml0KX0ubWF0LW1kYy10YWItZ3JvdXAubWF0LXRhYnMtd2l0aC1iYWNrZ3JvdW5kPi5tYXQtbWRjLXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1kYy10YWItZ3JvdXAubWF0LXRhYnMtd2l0aC1iYWNrZ3JvdW5kPi5tYXQtbWRjLXRhYi1oZWFkZXIgLm1kYy10YWJfX3JpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtdGFicy13aXRoLWJhY2tncm91bmQ+Lm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC10YWJzLXdpdGgtYmFja2dyb3VuZD4ubWF0LW1kYy10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1kYy10YWJfX3JpcHBsZTo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWF0LW1kYy10YWItaGVhZGVyLXdpdGgtYmFja2dyb3VuZC1mb3JlZ3JvdW5kLWNvbG9yLCBpbmhlcml0KX0ubWF0LW1kYy10YWItZ3JvdXAubWF0LXRhYnMtd2l0aC1iYWNrZ3JvdW5kPi5tYXQtbWRjLXRhYi1oZWFkZXIgLm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC10YWJzLXdpdGgtYmFja2dyb3VuZD4ubWF0LW1kYy10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOnZhcigtLW1hdC1tZGMtdGFiLWhlYWRlci13aXRoLWJhY2tncm91bmQtZm9yZWdyb3VuZC1jb2xvciwgaW5oZXJpdCl9Lm1hdC1tZGMtdGFiLWdyb3VwLm1hdC1tZGMtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlcntmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZX0ubWF0LW1kYy10YWItZ3JvdXAubWF0LW1kYy10YWItZ3JvdXAtaW52ZXJ0ZWQtaGVhZGVyIC5tZGMtdGFiLWluZGljYXRvcl9fY29udGVudC0tdW5kZXJsaW5le2FsaWduLXNlbGY6ZmxleC1zdGFydH0ubWF0LW1kYy10YWItYm9keS13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbjtkaXNwbGF5OmZsZXg7dHJhbnNpdGlvbjpoZWlnaHQgNTAwbXMgY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpfS5tYXQtbWRjLXRhYi1ib2R5LXdyYXBwZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGV7dHJhbnNpdGlvbjpub25lICFpbXBvcnRhbnQ7YW5pbWF0aW9uOm5vbmUgIWltcG9ydGFudH0nXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxlTj1jbGFzc3t9LFFDZT0wLFpDZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgZlh7Z2V0IGJhY2tncm91bmRDb2xvcigpe3JldHVybiB0aGlzLl9iYWNrZ3JvdW5kQ29sb3J9c2V0IGJhY2tncm91bmRDb2xvcihlKXtsZXQgaT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0O2kucmVtb3ZlKCJtYXQtdGFicy13aXRoLWJhY2tncm91bmQiLGBtYXQtYmFja2dyb3VuZC0ke3RoaXMuYmFja2dyb3VuZENvbG9yfWApLGUmJmkuYWRkKCJtYXQtdGFicy13aXRoLWJhY2tncm91bmQiLGBtYXQtYmFja2dyb3VuZC0ke2V9YCksdGhpcy5fYmFja2dyb3VuZENvbG9yPWV9Z2V0IGRpc2FibGVSaXBwbGUoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZVJpcHBsZX1zZXQgZGlzYWJsZVJpcHBsZShlKXt0aGlzLl9kaXNhYmxlUmlwcGxlPXZ0KGUpfWNvbnN0cnVjdG9yKGUsaSxyLG8sYSxzLGwpe3N1cGVyKGUsbyxhLGkscixzLGwpLHRoaXMuX2Rpc2FibGVSaXBwbGU9ITEsdGhpcy5jb2xvcj0icHJpbWFyeSJ9X2l0ZW1TZWxlY3RlZCgpe31uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLl9pdGVtcy5jaGFuZ2VzLnBpcGUoa24obnVsbCksaXQodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy51cGRhdGVBY3RpdmVMaW5rKCl9KSxzdXBlci5uZ0FmdGVyQ29udGVudEluaXQoKX11cGRhdGVBY3RpdmVMaW5rKCl7aWYoIXRoaXMuX2l0ZW1zKXJldHVybjtsZXQgZT10aGlzLl9pdGVtcy50b0FycmF5KCk7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspaWYoZVtpXS5hY3RpdmUpcmV0dXJuIHRoaXMuc2VsZWN0ZWRJbmRleD1pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHZvaWQodGhpcy50YWJQYW5lbCYmKHRoaXMudGFiUGFuZWwuX2FjdGl2ZVRhYklkPWVbaV0uaWQpKTt0aGlzLnNlbGVjdGVkSW5kZXg9LTEsdGhpcy5faW5rQmFyLmhpZGUoKX1fZ2V0Um9sZSgpe3JldHVybiB0aGlzLnRhYlBhbmVsPyJ0YWJsaXN0Ijp0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJyb2xlIil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoeGUpLEMoemksOCksQyhvdCksQyhRdCksQyhXYSksQyhWbiksQyhwaSw4KSl9LG4uXHUwMjc1ZGlyPU1lKHt0eXBlOm4saW5wdXRzOntiYWNrZ3JvdW5kQ29sb3I6ImJhY2tncm91bmRDb2xvciIsZGlzYWJsZVJpcHBsZToiZGlzYWJsZVJpcHBsZSIsY29sb3I6ImNvbG9yIix0YWJQYW5lbDoidGFiUGFuZWwifSxmZWF0dXJlczpbWGVdfSksbn0pKCksS0NlPURjKGdvKGFvKGNsYXNze30pKSksSkNlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBLQ2V7Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLl9pc0FjdGl2ZX1zZXQgYWN0aXZlKGUpe2xldCBpPXZ0KGUpO2khPT10aGlzLl9pc0FjdGl2ZSYmKHRoaXMuX2lzQWN0aXZlPWksdGhpcy5fdGFiTmF2QmFyLnVwZGF0ZUFjdGl2ZUxpbmsoKSl9Z2V0IHJpcHBsZURpc2FibGVkKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fHRoaXMuZGlzYWJsZVJpcHBsZXx8dGhpcy5fdGFiTmF2QmFyLmRpc2FibGVSaXBwbGV8fCEhdGhpcy5yaXBwbGVDb25maWcuZGlzYWJsZWR9Y29uc3RydWN0b3IoZSxpLHIsbyxhLHMpe3N1cGVyKCksdGhpcy5fdGFiTmF2QmFyPWUsdGhpcy5lbGVtZW50UmVmPWksdGhpcy5fZm9jdXNNb25pdG9yPWEsdGhpcy5faXNBY3RpdmU9ITEsdGhpcy5pZD0ibWF0LXRhYi1saW5rLSIrUUNlKyssdGhpcy5yaXBwbGVDb25maWc9cnx8e30sdGhpcy50YWJJbmRleD1wYXJzZUludChvKXx8MCwiTm9vcEFuaW1hdGlvbnMiPT09cyYmKHRoaXMucmlwcGxlQ29uZmlnLmFuaW1hdGlvbj17ZW50ZXJEdXJhdGlvbjowLGV4aXREdXJhdGlvbjowfSl9Zm9jdXMoKXt0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuZWxlbWVudFJlZil9bmdPbkRlc3Ryb3koKXt0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5lbGVtZW50UmVmKX1faGFuZGxlRm9jdXMoKXt0aGlzLl90YWJOYXZCYXIuZm9jdXNJbmRleD10aGlzLl90YWJOYXZCYXIuX2l0ZW1zLnRvQXJyYXkoKS5pbmRleE9mKHRoaXMpfV9oYW5kbGVLZXlkb3duKGUpe3RoaXMuX3RhYk5hdkJhci50YWJQYW5lbCYmMzI9PT1lLmtleUNvZGUmJnRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsaWNrKCl9X2dldEFyaWFDb250cm9scygpe3JldHVybiB0aGlzLl90YWJOYXZCYXIudGFiUGFuZWw/dGhpcy5fdGFiTmF2QmFyLnRhYlBhbmVsPy5pZDp0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImFyaWEtY29udHJvbHMiKX1fZ2V0QXJpYVNlbGVjdGVkKCl7cmV0dXJuIHRoaXMuX3RhYk5hdkJhci50YWJQYW5lbD90aGlzLmFjdGl2ZT8idHJ1ZSI6ImZhbHNlIjp0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImFyaWEtc2VsZWN0ZWQiKX1fZ2V0QXJpYUN1cnJlbnQoKXtyZXR1cm4gdGhpcy5hY3RpdmUmJiF0aGlzLl90YWJOYXZCYXIudGFiUGFuZWw/InBhZ2UiOm51bGx9X2dldFJvbGUoKXtyZXR1cm4gdGhpcy5fdGFiTmF2QmFyLnRhYlBhbmVsPyJ0YWIiOnRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgicm9sZSIpfV9nZXRUYWJJbmRleCgpe3JldHVybiB0aGlzLl90YWJOYXZCYXIudGFiUGFuZWw/dGhpcy5faXNBY3RpdmUmJiF0aGlzLmRpc2FibGVkPzA6LTE6dGhpcy50YWJJbmRleH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhaQ2UpLEMoeGUpLEMoVGgsOCksTW8oInRhYmluZGV4IiksQyhmbyksQyhwaSw4KSl9LG4uXHUwMjc1ZGlyPU1lKHt0eXBlOm4saW5wdXRzOnthY3RpdmU6ImFjdGl2ZSIsaWQ6ImlkIn0sZmVhdHVyZXM6W1hlXX0pLG59KSgpLHlFPShwWChKQ2UpLCgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1IKHtpbXBvcnRzOltEZSxkbixCbCxfYSxvZyxwZyxkbl19KSxufSkoKSk7ZnVuY3Rpb24gJENlKG4sdCl7aWYoMSZuKXtsZXQgZT1UZSgpO2YoMCwic3BhbiIsNSksQSgiY2xpY2siLGZ1bmN0aW9uKHIpe25lKGUpO2xldCBvPXcoKS4kaW1wbGljaXQ7cmV0dXJuIGllKHcoKS5vbkFjdGl2ZVBsdWdpblNlbGVjdGlvbihyLG8uaWQpKX0pLFQoMSksZygpfWlmKDImbil7bGV0IGU9dygpLiRpbXBsaWNpdDtCZSgiZGF0YS1wbHVnaW4taWQiLGUuaWQpLHYoMSksVmUoIiAiLGUudGFiX25hbWUsIiAiKX19ZnVuY3Rpb24gZU1lKG4sdCl7MSZuJiYoZigwLCJtYXQtdGFiIiwzKSxTKDEsJENlLDIsMiwibmctdGVtcGxhdGUiLDQpLGcoKSksMiZuJiZiKCJkaXNhYmxlZCIsIXQuJGltcGxpY2l0LmVuYWJsZWQpfWZ1bmN0aW9uIHRNZShuLHQpe2lmKDEmbiYmKGYoMCwibWF0LW9wdGlvbiIsOSksVCgxKSxnKCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQ7YigidmFsdWUiLGUuaWQpLEJlKCJkYXRhLXBsdWdpbi1pZCIsZS5pZCksdigxKSxWZSgiICIsZS50YWJfbmFtZSwiICIpfX1mdW5jdGlvbiBuTWUobix0KXtpZigxJm4pe2xldCBlPVRlKCk7ZigwLCJtYXQtZm9ybS1maWVsZCIsNikoMSwibWF0LWxhYmVsIiksVCgyLCJJbmFjdGl2ZSIpLGcoKSxmKDMsIm1hdC1zZWxlY3QiLDcpLEEoInNlbGVjdGlvbkNoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIG5lKGUpLGllKHcoKS5vbkRpc2FibGVkUGx1Z2luU2VsZWN0aW9uQ2hhbmdlZChyKSl9KSxTKDQsdE1lLDIsMywibWF0LW9wdGlvbiIsOCksZygpKCl9aWYoMiZuKXtsZXQgZT13KCk7digzKSxiKCJ2YWx1ZSIsZS5zZWxlY3RlZFBsdWdpbikoImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IiLCEwKSx2KDEpLGIoIm5nRm9yT2YiLGUuZGlzYWJsZWRQbHVnaW5zKX19dmFyIGJYPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLm9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlZD1uZXcgRn1nZXRBY3RpdmVQbHVnaW5JbmRleCgpe3JldHVybiB0aGlzLmFjdGl2ZVBsdWdpbnMuZmluZEluZGV4KCh7aWQ6ZX0pPT5lPT09dGhpcy5zZWxlY3RlZFBsdWdpbil9b25BY3RpdmVQbHVnaW5TZWxlY3Rpb24oZSxpKXtlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMub25QbHVnaW5TZWxlY3Rpb25DaGFuZ2VkLmVtaXQoaSl9b25EaXNhYmxlZFBsdWdpblNlbGVjdGlvbkNoYW5nZWQoZSl7dGhpcy5vblBsdWdpblNlbGVjdGlvbkNoYW5nZWQuZW1pdChlLnZhbHVlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1sicGx1Z2luLXNlbGVjdG9yLWNvbXBvbmVudCJdXSxpbnB1dHM6e2FjdGl2ZVBsdWdpbnM6ImFjdGl2ZVBsdWdpbnMiLGRpc2FibGVkUGx1Z2luczoiZGlzYWJsZWRQbHVnaW5zIixzZWxlY3RlZFBsdWdpbjoic2VsZWN0ZWRQbHVnaW4ifSxvdXRwdXRzOntvblBsdWdpblNlbGVjdGlvbkNoYW5nZWQ6Im9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlZCJ9LGRlY2xzOjMsdmFyczozLGNvbnN0czpbWyJtYXQtc3RyZXRjaC10YWJzIiwiZmFsc2UiLCJhbmltYXRpb25EdXJhdGlvbiIsIjEwMG1zIiwxLCJhY3RpdmUtcGx1Z2luLWxpc3QiLDMsInNlbGVjdGVkSW5kZXgiXSxbMywiZGlzYWJsZWQiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiZmxvYXRMYWJlbCIsIm5ldmVyIiwic3Vic2NyaXB0U2l6aW5nIiwiZHluYW1pYyIsNCwibmdJZiJdLFszLCJkaXNhYmxlZCJdLFsibWF0LXRhYi1sYWJlbCIsIiJdLFsxLCJwbHVnaW4tbmFtZSIsMywiY2xpY2siXSxbImZsb2F0TGFiZWwiLCJuZXZlciIsInN1YnNjcmlwdFNpemluZyIsImR5bmFtaWMiXSxbMywidmFsdWUiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwic2VsZWN0aW9uQ2hhbmdlIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywidmFsdWUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihmKDAsIm1hdC10YWItZ3JvdXAiLDApLFMoMSxlTWUsMiwxLCJtYXQtdGFiIiwxKSxnKCksUygyLG5NZSw1LDMsIm1hdC1mb3JtLWZpZWxkIiwyKSksMiZlJiYoYigic2VsZWN0ZWRJbmRleCIsaS5nZXRBY3RpdmVQbHVnaW5JbmRleCgpKSx2KDEpLGIoIm5nRm9yT2YiLGkuYWN0aXZlUGx1Z2lucyksdigxKSxiKCJuZ0lmIixpLmRpc2FibGVkUGx1Z2lucy5sZW5ndGg+MCkpfSxkZXBlbmRlbmNpZXM6W3ROLGF5LHZFLFBjLG5sLFd1LGphLG5uLE5lXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleDoxIDEgYXV0bztmb250LXNpemU6MTRweDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59W19uZ2hvc3QtJUNPTVAlXSAgIG1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXSAgICB7d2lkdGg6MTQ0cHh9W19uZ2hvc3QtJUNPTVAlXSAgIG1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLm1kYy10ZXh0LWZpZWxke2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMDtwYWRkaW5nOjAgNHB4fWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIG1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLm1kYy10ZXh0LWZpZWxke2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1bX25naG9zdC0lQ09NUCVdICAgbWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVdICAgICBsYWJlbC5tZGMtZmxvYXRpbmctbGFiZWwubWF0LW1kYy1mbG9hdGluZy1sYWJlbCwgW19uZ2hvc3QtJUNPTVAlXSAgIG1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLm1hdC1tZGMtc2VsZWN0LCBbX25naG9zdC0lQ09NUCVdICAgbWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVdICAgICAubWF0LW1kYy1zZWxlY3QtdmFsdWUsIFtfbmdob3N0LSVDT01QJV0gICBtYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5tYXQtbWRjLXNlbGVjdC1hcnJvd3tjb2xvcjppbmhlcml0fVtfbmdob3N0LSVDT01QJV0gICBtYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5tZGMtdGV4dC1maWVsZC0tZmlsbGVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLWxpbmUtcmlwcGxlOjpiZWZvcmV7Ym9yZGVyLWNvbG9yOmluaGVyaXR9bWF0LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgbWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV0sIG1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9LmFjdGl2ZS1wbHVnaW4tbGlzdFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24tc2VsZjpzdHJldGNoO2ZsZXg6MSAxIGF1dG87b3ZlcmZsb3c6aGlkZGVufS5wbHVnaW4tbmFtZVtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7aGVpZ2h0OjEwMCU7anVzdGlmeS1jb250ZW50OmNlbnRlcjtwYWRkaW5nOjAgMTJweDt3aWR0aDoxMDAlfVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC1tZGMtdGFiOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpIC5tZGMtdGFiLWluZGljYXRvcl9fY29udGVudC0tdW5kZXJsaW5le2JvcmRlci1jb2xvcjpjdXJyZW50Q29sb3J9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCAubWF0LW1kYy10YWI6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkgLm1kYy10YWJfX3RleHQtbGFiZWx7Y29sb3I6aW5oZXJpdDtvcGFjaXR5Oi43fVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC1tZGMtdGFiOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpLm1kYy10YWItLWFjdGl2ZSAubWRjLXRhYl9fdGV4dC1sYWJlbHtjb2xvcjppbmhlcml0O29wYWNpdHk6MX1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbntjb2xvcjppbmhlcml0fVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOmN1cnJlbnRDb2xvcn1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZHt2aXNpYmlsaXR5OmhpZGRlbn1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtbWRjLXRhYi1kaXNhYmxlZHtkaXNwbGF5Om5vbmV9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtbWRjLXRhYi1saXN0LCBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtbWRjLXRhYi1oZWFkZXIsIFtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC1tZGMtdGFiLWxhYmVscywgW19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCAubWF0LW1kYy10YWItaGVhZGVyIC5tYXQtbWRjLXRhYiwgW19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCAubWRjLXRhYl9fdGV4dC1sYWJlbHtoZWlnaHQ6MTAwJX1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtbWRjLXRhYntsZXR0ZXItc3BhY2luZzouMjVweDttaW4td2lkdGg6NDhweDtwYWRkaW5nOjA7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgbWF0LXRhYi1oZWFkZXIgLm1hdC1tZGMtdGFiLWxpc3R7cGFkZGluZzowIDM2cHh9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlcj46Zmlyc3QtY2hpbGQsIFtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgbWF0LXRhYi1oZWFkZXI+Lm1hdC1tZGMtdGFiLWxhYmVsLWNvbnRhaW5lciwgW19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlcj46bGFzdC1jaGlsZHtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MH1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItaGVhZGVyPjpmaXJzdC1jaGlsZCwgW19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlcj4ubWF0LW1kYy10YWItbGFiZWwtY29udGFpbmVye2xlZnQ6MH1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItaGVhZGVyPjpsYXN0LWNoaWxkLCBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItaGVhZGVyPi5tYXQtbWRjLXRhYi1sYWJlbC1jb250YWluZXJ7cmlnaHQ6MH1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItaGVhZGVyPi5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItaGVhZGVyPi5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Il19KSxufSkoKSx2WD1XKEdmLG49Pk9iamVjdC5rZXlzKG4pLm1hcCh0PT5PYmplY3QuYXNzaWduKHt9LHtpZDp0fSxuW3RdKSkpLHJNZT1XKHZYLG49Pm4uZmlsdGVyKHQ9PiF0LmVuYWJsZWQpKSx5WD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmFjdGl2ZVBsdWdpbiQ9dGhpcy5zdG9yZS5waXBlKHVuKFpvKSksdGhpcy5wbHVnaW5zJD10aGlzLnN0b3JlLnBpcGUodW4odlgpKSx0aGlzLmRpc2FibGVkUGx1Z2lucyQ9dGhpcy5zdG9yZS5waXBlKHVuKHJNZSkpfW9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goeWMoe3BsdWdpbjplfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEllKSl9LG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1sicGx1Z2luLXNlbGVjdG9yIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsImFjdGl2ZVBsdWdpbnMiLCJkaXNhYmxlZFBsdWdpbnMiLCJzZWxlY3RlZFBsdWdpbiIsIm9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGYoMCwicGx1Z2luLXNlbGVjdG9yLWNvbXBvbmVudCIsMCksQSgib25QbHVnaW5TZWxlY3Rpb25DaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblBsdWdpblNlbGVjdGlvbkNoYW5nZShvKX0pLFUoMSwiYXN5bmMiKSxVKDIsImFzeW5jIiksVSgzLCJhc3luYyIpLGcoKSksMiZlJiZiKCJhY3RpdmVQbHVnaW5zIixHKDEsMyxpLnBsdWdpbnMkKSkoImRpc2FibGVkUGx1Z2lucyIsRygyLDUsaS5kaXNhYmxlZFBsdWdpbnMkKSkoInNlbGVjdGVkUGx1Z2luIixHKDMsNyxpLmFjdGl2ZVBsdWdpbiQpKX0sZGVwZW5kZW5jaWVzOltiWCxjdF0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksYU1lPVcoR2YsWm8sKG4sdCk9PiEoIXR8fCFuW3RdKSYmblt0XS5kaXNhYmxlX3JlbG9hZCkseFg9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5yZWxvYWREaXNhYmxlZCQ9dGhpcy5zdG9yZS5zZWxlY3QoYU1lKSx0aGlzLmlzUmVsb2FkaW5nJD10aGlzLnN0b3JlLnNlbGVjdChMNikucGlwZShWaSh0aGlzLnJlbG9hZERpc2FibGVkJCkscSgoW2kscl0pPT4hciYmaT09PVJlLkxPQURJTkcpKSx0aGlzLmxhc3RMb2FkZWRUaW1lSW5NcyQ9dGhpcy5zdG9yZS5zZWxlY3QoamYpfXRyaWdnZXJSZWxvYWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKEJhKCkpfWdldFJlbG9hZFRpdGxlKGUpe3JldHVybiBlP2BMYXN0IFVwZGF0ZWQ6ICR7ZX1gOiJMb2FkaW5nLi4uIn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhJZSkpfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbImFwcC1oZWFkZXItcmVsb2FkIl1dLGRlY2xzOjYsdmFyczoxMyxjb25zdHM6W1sibWF0LWljb24tYnV0dG9uIiwiIiwxLCJyZWxvYWQtYnV0dG9uIiwzLCJ0aXRsZSIsImRpc2FibGVkIiwiY2xpY2siXSxbInN2Z0ljb24iLCJyZWZyZXNoXzI0cHgiLDEsInJlZnJlc2gtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGYoMCwiYnV0dG9uIiwwKSxBKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS50cmlnZ2VyUmVsb2FkKCl9KSxVKDEsImFzeW5jIiksVSgyLCJkYXRlIiksVSgzLCJhc3luYyIpLFUoNCwiYXN5bmMiKSxrKDUsIm1hdC1pY29uIiwxKSxnKCkpLDImZSYmKG50KCJsb2FkaW5nIixHKDEsNCxpLmlzUmVsb2FkaW5nJCkpLGIoInRpdGxlIixpLmdldFJlbG9hZFRpdGxlKEpwKDIsNixHKDMsOSxpLmxhc3RMb2FkZWRUaW1lSW5NcyQpLCJtZWRpdW0iKSkpKCJkaXNhYmxlZCIsRyg0LDExLGkucmVsb2FkRGlzYWJsZWQkKSkpfSxkZXBlbmRlbmNpZXM6W0VyLGJuLGN0LHdmXSxzdHlsZXM6WyIucmVsb2FkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5yZWZyZXNoLWljb25bX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICB9XG5cbiAgICAgIC5yZWxvYWQtYnV0dG9uLmxvYWRpbmdbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgYW5pbWF0aW9uOiBfbmdjb250ZW50LSVDT01QJV9yb3RhdGUgMnMgbGluZWFyIGluZmluaXRlO1xuICAgICAgfVxuXG4gICAgICBAa2V5ZnJhbWVzIF9uZ2NvbnRlbnQtJUNPTVAlX3JvdGF0ZSB7XG4gICAgICAgIDAlIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgICAgICAgfVxuICAgICAgICA1MCUge1xuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG4gICAgICAgIH1cbiAgICAgICAgMTAwJSB7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcbiAgICAgICAgfVxuICAgICAgfSJdfSksbn0pKCksQ1g9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1siYXBwLWhlYWRlciJdXSxkZWNsczo5LHZhcnM6MCxjb25zdHM6W1sxLCJicmFuZCJdLFsxLCJwbHVnaW5zIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJocmVmIiwiaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIiwicmVsIiwibm9vcGVuZXIgbm9yZWZlcnJlciIsInRhcmdldCIsIl9ibGFuayIsImFyaWEtbGFiZWwiLCJIZWxwIiwxLCJyZWFkbWUiXSxbInN2Z0ljb24iLCJoZWxwX291dGxpbmVfMjRweCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGYoMCwibWF0LXRvb2xiYXIiKSgxLCJzcGFuIiwwKSxUKDIsIlRlbnNvckJvYXJkIiksZygpLGsoMywicGx1Z2luLXNlbGVjdG9yIiwxKSg0LCJhcHAtaGVhZGVyLWRhcmstbW9kZS10b2dnbGUiKSg1LCJhcHAtaGVhZGVyLXJlbG9hZCIpKDYsInNldHRpbmdzLWJ1dHRvbiIpLGYoNywiYSIsMiksayg4LCJtYXQtaWNvbiIsMyksZygpKCkpfSxkZXBlbmRlbmNpZXM6W2o3LGJuLGpxLHRYLGFYLHlYLHhYXSxzdHlsZXM6WyJtYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2NvbG9yOiNmZmY7ZGlzcGxheTpmbGV4O2hlaWdodDo2NHB4O292ZXJmbG93OmhpZGRlbjt3aWR0aDoxMDAlfS5icmFuZFtfbmdjb250ZW50LSVDT01QJV0sIC5yZWFkbWVbX25nY29udGVudC0lQ09NUCVdLCBhcHAtaGVhZGVyLXJlbG9hZFtfbmdjb250ZW50LSVDT01QJV0sIHNldHRpbmdzLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17ZmxleDowIDAgYXV0b30uYnJhbmRbX25nY29udGVudC0lQ09NUCVde2xldHRlci1zcGFjaW5nOi0wLjAyNWVtO21hcmdpbi1sZWZ0OjEwcHg7dGV4dC1yZW5kZXJpbmc6b3B0aW1pemVMZWdpYmlsaXR5fS5wbHVnaW5zW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXg6MSAxIGF1dG87Zm9udC1zaXplOjE0cHg7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6aGlkZGVufSJdfSksbn0pKCksZE1lX3NldERvY3VtZW50VGl0bGU9ZnVuY3Rpb24obil7ZG9jdW1lbnQudGl0bGU9bn0sTVg9KCgpPT57Y2xhc3MgbntuZ09uQ2hhbmdlcyhlKXtlLnRpdGxlJiZkTWVfc2V0RG9jdW1lbnRUaXRsZShlLnRpdGxlLmN1cnJlbnRWYWx1ZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbInBhZ2UtdGl0bGUtY29tcG9uZW50Il1dLGlucHV0czp7dGl0bGU6InRpdGxlIn0sZmVhdHVyZXM6W3F0XSxkZWNsczowLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe30sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksd1g9IlRlbnNvckJvYXJkIixTWD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5zdG9yZT1lLHRoaXMuY3VzdG9tQnJhbmROYW1lPWksdGhpcy5nZXRFeHBlcmltZW50SWQkPXRoaXMuc3RvcmUuc2VsZWN0KG9yKS5waXBlKHEocj0+cj8uWzBdKSksdGhpcy5leHBlcmltZW50TmFtZSQ9dGhpcy5nZXRFeHBlcmltZW50SWQkLnBpcGUoT2UoQm9vbGVhbikseG4ocj0+dGhpcy5zdG9yZS5zZWxlY3QoVVMse2V4cGVyaW1lbnRJZDpyfSkpLHEocj0+cj9yLm5hbWU6bnVsbCkpLHRoaXMudGl0bGUkPXRoaXMuc3RvcmUuc2VsZWN0KENTKS5waXBlKFZpKHRoaXMuc3RvcmUuc2VsZWN0KFdzKSx0aGlzLmV4cGVyaW1lbnROYW1lJCkscSgoW3IsbyxhXSk9PntsZXQgcz10aGlzLmN1c3RvbUJyYW5kTmFtZXx8d1g7cmV0dXJuIHIud2luZG93X3RpdGxlP3Iud2luZG93X3RpdGxlOm89PT1Dbi5FWFBFUklNRU5UJiZhP2Ake2F9IC0gJHtzfWA6c30pLGtuKHRoaXMuY3VzdG9tQnJhbmROYW1lfHx3WCkscmkoKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoSWUpLEMoSTYsOCkpfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbInBhZ2UtdGl0bGUiXV0sZGVjbHM6Mix2YXJzOjMsY29uc3RzOltbMywidGl0bGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihrKDAsInBhZ2UtdGl0bGUtY29tcG9uZW50IiwwKSxVKDEsImFzeW5jIikpLDImZSYmYigidGl0bGUiLEcoMSwxLGkudGl0bGUkKSl9LGRlcGVuZGVuY2llczpbTVgsY3RdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksRVg9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBFZSx0aGlzLmdldFBhZ2VTaXplJD10aGlzLnN0b3JlLnBpcGUodW4oTWgpKSx0aGlzLnBhZ2luYXRlZFZpZXdTdG9yZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Zi1wYWdpbmF0ZWQtdmlldy1zdG9yZSIpLnRmX3BhZ2luYXRlZF92aWV3fW5nT25Jbml0KCl7dGhpcy5nZXRQYWdlU2l6ZSQucGlwZShpdCh0aGlzLm5nVW5zdWJzY3JpYmUpLHJpKCkpLnN1YnNjcmliZShlPT57dGhpcy5wYWdpbmF0ZWRWaWV3U3RvcmUuc2V0TGltaXQoZSl9KX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoSWUpKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJzZXR0aW5ncy1wb2x5bWVyLWludGVyb3AiXV0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXt9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFRYPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy52Y1JlZj1lfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGVpKSl9LG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1sidGItd2ViYXBwIl1dLGRlY2xzOjksdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaygwLCJhcHAtaGVhZGVyIiksZigxLCJtYWluIiksaygyLCJyb3V0ZXItb3V0bGV0IiksZygpLGsoMywiYWxlcnQtc25hY2tiYXIiKSg0LCJoYXNoLXN0b3JhZ2UiKSg1LCJwYWdlLXRpdGxlIikoNiwic2V0dGluZ3MtcG9seW1lci1pbnRlcm9wIikoNywiZGFyay1tb2RlLXN1cHBvcnRlciIpKDgsImZlYXR1cmUtZmxhZy1tb2RhbC10cmlnZ2VyIikpfSxkZXBlbmRlbmNpZXM6W1BxLE9xLHA5LEZxLExxLENYLFNYLEVYXSxzdHlsZXM6WyJodG1sW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLHNhbnMtc2VyaWY7aGVpZ2h0OjEwMCU7bWFyZ2luOjA7cGFkZGluZzowfVtfbmdob3N0LSVDT01QJV17YmFja2dyb3VuZDojZjVmNWY1O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47aGVpZ2h0OjEwMCV9YXBwLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Ym94LXNoYWRvdzowIDFweCAzcHggM3B4IHJnYmEoMCwwLDAsLjI1KTtmbGV4OjAgMDt6LWluZGV4OjF9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgYXBwLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIGFwcC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JveC1zaGFkb3c6MCAxcHggM3B4IDNweCByZ2JhKDI1NSwyNTUsMjU1LC4xKX1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWdyb3c6MTtvdmVyZmxvdzphdXRvfSJdfSksbn0pKCksRFg9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe2ltcG9ydHM6W0RlLGtmLFBmLFJsXX0pLG59KSgpLElYPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1IKHt9KSxufSkoKSxBWD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9SCh7cHJvdmlkZXJzOlt7cHJvdmlkZTpndSx1c2VDbGFzczpuNn1dfSksbn0pKCksUlg9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe2ltcG9ydHM6W0RlLEFYXX0pLG59KSgpLFBYPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1IKHtpbXBvcnRzOltEZV19KSxufSkoKSxrWD17aWQ6UXcsbmFtZToiIixzdGFydF90aW1lOjB9LGZNZT1ncih7ZXhwZXJpbWVudE1hcDp7W2tYLmlkXTprWH19KTtmdW5jdGlvbiBPWChuLHQpe3JldHVybiBjaCh7ZGF0YTpmTWV9KShuLHQpfXZhciBGWD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9SCh7aW1wb3J0czpbd3IuZm9yRmVhdHVyZSh6UyxPWCldfSksbn0pKCksTlg9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe2ltcG9ydHM6W0RlLEtuLFhhXX0pLG59KSgpLExYPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1IKHtpbXBvcnRzOltEZSxOWF19KSxufSkoKSxCWD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9SCh7aW1wb3J0czpbRGUsR3UsdUUsS24sa2MsSHUsYWkscmxdfSksbn0pKCk7ZnVuY3Rpb24gZ01lKCl7cmV0dXJuIFcoQXYsbj0+KHthdXRvUmVsb2FkOm59KSl9ZnVuY3Rpb24gX01lKCl7cmV0dXJuIFcoUnYsbj0+KHthdXRvUmVsb2FkUGVyaW9kSW5NczpufSkpfWZ1bmN0aW9uIGJNZSgpe3JldHVybiBXKE1oLG49Pih7cGFnZVNpemU6bn0pKX12YXIgeEU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe2ltcG9ydHM6W3dyLmZvckZlYXR1cmUodzEsV3EpLFJpLmRlZmluZUdsb2JhbFNldHRpbmcoZ01lKSxSaS5kZWZpbmVHbG9iYWxTZXR0aW5nKF9NZSksUmkuZGVmaW5lR2xvYmFsU2V0dGluZyhiTWUpLEJYXX0pLG59KSgpLFZYPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1IKHtpbXBvcnRzOltLbixhaSx5RSxHcSxYYSxRdSxEZSxRcyx4RV19KSxufSkoKSxIWD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7bGV0IHI9ZS5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwoIi4vaWNvbl9idW5kbGUuc3ZnIik7aS5hZGRTdmdJY29uU2V0KHIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKG5oKSxPKEVnKSl9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe2ltcG9ydHM6W2FpXX0pLG59KSgpLG5OPW5ldyB0ZSgiW3BsdWdpbnNdIFBsdWdpbiByZWdpc3RyeSBjb25maWciKSx6WD1uZXcgTWFwLE9jPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7aWYoIWUpcmV0dXJuO2xldCBpPW5ldyBTZXQoZS5tYXAocj0+ci5wbHVnaW5OYW1lKSk7Y29uc29sZS5hc3NlcnQoaS5zaXplPT09ZS5sZW5ndGgsIkNhbm5vdCByZWdpc3RlciB0aGUgc2FtZSBwbHVnaW4gbXVsdGlwbGUgdGltZXMuIik7Zm9yKGxldCByIG9mIGUpe2xldHtwbHVnaW5OYW1lOm8sY29tcG9uZW50Q2xhc3M6YX09cjt6WC5zZXQobyxhKX19c3RhdGljIGZvclBsdWdpbihlLGkpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6bk4sbXVsdGk6ITAsdXNlVmFsdWU6e3BsdWdpbk5hbWU6ZSxjb21wb25lbnRDbGFzczppfX1dfX1nZXRDb21wb25lbnQoZSl7cmV0dXJuIHpYLmdldChlKXx8bnVsbH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhuTiw4KSl9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe30pLG59KSgpLENFPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5odHRwPWUsdGhpcy5odHRwUGF0aFByZWZpeD0iZGF0YS9wbHVnaW4vZGVidWdnZXItdjIifWZldGNoUnVucygpe3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuaHR0cFBhdGhQcmVmaXgrIi9ydW5zIil9ZmV0Y2hFeGVjdXRpb25EaWdlc3RzKGUsaSxyKXtyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4KyIvZXhlY3V0aW9uL2RpZ2VzdHMiLHtwYXJhbXM6e3J1bjplLGJlZ2luOlN0cmluZyhpKSxlbmQ6U3RyaW5nKHIpfX0pfWZldGNoRXhlY3V0aW9uRGF0YShlLGkscil7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL2V4ZWN1dGlvbi9kYXRhIix7cGFyYW1zOntydW46ZSxiZWdpbjpTdHJpbmcoaSksZW5kOlN0cmluZyhyKX19KX1mZXRjaEdyYXBoRXhlY3V0aW9uRGlnZXN0cyhlLGkscixvKXtpZih2b2lkIDAhPT1vKXRocm93IG5ldyBFcnJvcigidHJhY2VfaWQgaXMgbm90IGltcGxlbWVudGVkIGZvciBmZXRjaEdyYXBoRXhlY3V0aW9uRGlnZXN0cygpIHlldCIpO3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuaHR0cFBhdGhQcmVmaXgrIi9ncmFwaF9leGVjdXRpb24vZGlnZXN0cyIse3BhcmFtczp7cnVuOmUsYmVnaW46U3RyaW5nKGkpLGVuZDpTdHJpbmcocil9fSl9ZmV0Y2hHcmFwaEV4ZWN1dGlvbkRhdGEoZSxpLHIsbyl7aWYodm9pZCAwIT09byl0aHJvdyBuZXcgRXJyb3IoInRyYWNlX2lkIGlzIG5vdCBpbXBsZW1lbnRlZCBmb3IgZmV0Y2hHcmFwaEV4ZWN1dGlvbkRhdGEoKSB5ZXQiKTtyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4KyIvZ3JhcGhfZXhlY3V0aW9uL2RhdGEiLHtwYXJhbXM6e3J1bjplLGJlZ2luOlN0cmluZyhpKSxlbmQ6U3RyaW5nKHIpfX0pfWZldGNoR3JhcGhPcEluZm8oZSxpLHIpe3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuaHR0cFBhdGhQcmVmaXgrIi9ncmFwaHMvb3BfaW5mbyIse3BhcmFtczp7cnVuOmUsZ3JhcGhfaWQ6aSxvcF9uYW1lOnJ9fSl9ZmV0Y2hTb3VyY2VGaWxlTGlzdChlKXtyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4KyIvc291cmNlX2ZpbGVzL2xpc3QiLHtwYXJhbXM6e3J1bjplfX0pfWZldGNoU291cmNlRmlsZShlLGkpe3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuaHR0cFBhdGhQcmVmaXgrIi9zb3VyY2VfZmlsZXMvZmlsZSIse3BhcmFtczp7cnVuOmUsaW5kZXg6U3RyaW5nKGkpfX0pfWZldGNoU3RhY2tGcmFtZXMoZSxpKXtyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4KyIvc3RhY2tfZnJhbWVzL3N0YWNrX2ZyYW1lcyIse3BhcmFtczp7cnVuOmUsc3RhY2tfZnJhbWVfaWRzOmkuam9pbigiLCIpfX0pLnBpcGUocShyPT4oe3N0YWNrX2ZyYW1lczpyLnN0YWNrX2ZyYW1lcy5tYXAobz0+ZnVuY3Rpb24obil7cmV0dXJue2hvc3RfbmFtZTpuWzBdLGZpbGVfcGF0aDpuWzFdLGxpbmVubzpuWzJdLGZ1bmN0aW9uX25hbWU6blszXX19KG8pKX0pKSl9ZmV0Y2hBbGVydHMoZSxpLHIsbyl7bGV0IGE9e3J1bjplLGJlZ2luOlN0cmluZyhpKSxlbmQ6U3RyaW5nKHIpfTtyZXR1cm4gdm9pZCAwIT09byYmKGEuYWxlcnRfdHlwZT1vKSx0aGlzLmh0dHAuZ2V0KHRoaXMuaHR0cFBhdGhQcmVmaXgrIi9hbGVydHMiLHtwYXJhbXM6YX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKFhzKSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksVVg9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe3Byb3ZpZGVyczpbQ0VdLGltcG9ydHM6W3pmXX0pLG59KSgpLE1FPWZlKCJbRGVidWdnZXJdIERlYnVnZ2VyIExvYWRlZCIpLHdFPWZlKCJbRGVidWdnZXJdIERlYnVnZ2VyIFVubG9hZGVkIiksc3k9ZmUoIltEZWJ1Z2dlcl0gQSBOZXcgRGVidWdnZXIgRGF0YSBQb2xsaW5nIEV2ZW50IEJlZ2lucyIpLFNFPWZlKCJbRGVidWdnZXJdIERlYnVnZ2VyIFJ1bnMgUmVxdWVzdGVkIiksRUU9ZmUoIltEZWJ1Z2dlcl0gRGVidWdnZXIgUnVucyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxqWD1mZSgiW0RlYnVnZ2VyXSBEZWJ1Z2dlciBSdW5zIFJlcXVlc3QgRmFpbGVkIiksbHk9ZmUoIltEZWJ1Z2dlcl0gTnVtYmVyIGFuZCBCcmVha2Rvd24gb2YgQWxlcnRzIFJlcXVlc3RlZCIpLFRFPWZlKCJbRGVidWdnZXJdIE51bWJlciBhbmQgQnJlYWtkb3duIG9mIEFsZXJ0cyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxERT1mZSgiW0RlYnVnZ2VyXSBBbGVydHMgRGF0YSBvZiBhbiBBbGVydFR5cGUgSXMgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksRGc9ZmUoIltEZWJ1Z2dlcl0gQWxlcnQgVHlwZSBGb2N1cyBUb2dnbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksSUU9ZmUoIltEZWJ1Z2dlcl0gTnVtYmVyIG9mIFRvcC1MZXZlbCBFeGVjdXRpb25zIFJlcXVlc3RlZCIpLEFFPWZlKCJbRGVidWdnZXJdIE51bWJlciBvZiBUb3AtTGV2ZWwgRXhlY3V0aW9ucyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxSRT1mZSgiW0RlYnVnZ2VyXSBFeGVjdXRpb25EaWdlc3RzIFJlcXVlc3RlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFBFPWZlKCJbRGVidWdnZXJdIEV4ZWN1dGlvbkRpZ2VzdHMgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksSWc9ZmUoIltEZWJ1Z2dlcl0gU2Nyb2xsIExlZnR3YXJkIG9uIHRoZSBFeGVjdXRpb24gVGltZWxpbmUiKSxBZz1mZSgiW0RlYnVnZ2VyXSBTY3JvbGwgUmlnaHR3YXJkIG9uIHRoZSBFeGVjdXRpb24gVGltZWxpbmUiKSxSZz1mZSgiW0RlYnVnZ2VyXSBTY3JvbGwgdGhlIEV4ZWN1dGlvbiBUaW1lbGluZSB0byBHaXZlbiBJbmRleCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFBnPWZlKCJbRGVidWdnZXJdIEV4ZWN1dGlvbiBEYXRhIE9iamVjdHMgQmVpbmcgRm9jdXNlZCBPbiIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGtFPWZlKCJbRGVidWdnZXJdIEV4ZWN1dGlvbiBEYXRhIE9iamVjdHMgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksT0U9ZmUoIltEZWJ1Z2dlcl0gTnVtYmVyIG9mIEludHJhLUdyYXBoIEV4ZWN1dGlvbnMgUmVxdWVzdGVkIiksRkU9ZmUoIltEZWJ1Z2dlcl0gTnVtYmVyIG9mIEludHJhLUdyYXBoIEV4ZWN1dGlvbnMgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksTkU9ZmUoIltEZWJ1Z2dlcl0gSW50cmEtR3JhcGggRXhlY3V0aW9uIERhdGEgUmVxdWVzdGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksTEU9ZmUoIltEZWJ1Z2dlcl0gSW50cmEtR3JhcGggRXhlY3V0aW9uIERhdGEgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksa2c9ZmUoIltEZWJ1Z2dlcl0gU2Nyb2xsIEludHJhLUdyYXBoIEV4ZWN1dGlvbiBMaXN0IHRvIEdpdmVuIEluZGV4Iix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksT2c9ZmUoIltEZWJ1Z2dlcl0gR3JhcGggRXhlY3V0aW9uIGlzIEZvY3VzZWQgT24iLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxGZz1mZSgiW0RlYnVnZ2VyXSBHcmFwaCBPcCBJcyBGb2N1c2VkIE9uIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksQkU9ZmUoIltEZWJ1Z2dlcl0gR3JhcGggT3AgSW5mbyBSZXF1ZXN0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxWRT1mZSgiW0RlYnVnZ2VyXSBHcmFwaCBPcCBJbmZvIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEhFPWZlKCJbRGVidWdnZXJdIFNvdXJjZSBGaWxlIExpc3QgUmVxdWVzdGVkLiIpLHpFPWZlKCJbRGVidWdnZXJdIFNvdXJjZSBGaWxlIExpc3QgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksTmc9ZmUoIltEZWJ1Z2dlcl0gU291cmNlIEZpbGUgTGluZSBJcyBGb2N1c2VkIG9uIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksVUU9ZmUoIltEZWJ1Z2dlcl0gU291cmNlIEZpbGUgUmVxdWVzdGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksakU9ZmUoIltEZWJ1Z2dlcl0gU291cmNlIEZpbGUgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksY3k9ZmUoIltEZWJ1Z2dlcl0gQSBTZXQgb2YgU3RhY2sgRnJhbWVzIEhhdmUgQmVlbiBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxkeT0iZGVidWdnZXIiLEFvPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5VTlNQRUNJRklFRD0wXT0iVU5TUEVDSUZJRUQiLG5bbi5OT19URU5TT1I9MV09Ik5PX1RFTlNPUiIsbltuLkNVUlRfSEVBTFRIPTJdPSJDVVJUX0hFQUxUSCIsbltuLkNPTkNJU0VfSEVBTFRIPTNdPSJDT05DSVNFX0hFQUxUSCIsbltuLkZVTExfSEVBTFRIPTRdPSJGVUxMX0hFQUxUSCIsbltuLlNIQVBFPTVdPSJTSEFQRSIsbltuLkZVTExfTlVNRVJJQ1M9Nl09IkZVTExfTlVNRVJJQ1MiLG5bbi5GVUxMX1RFTlNPUj03XT0iRlVMTF9URU5TT1IiLG5bbi5SRURVQ0VfSU5GX05BTl9USFJFRV9TTE9UUz04XT0iUkVEVUNFX0lORl9OQU5fVEhSRUVfU0xPVFMifShBb3x8KEFvPXt9KSksQW8pKSgpLEZjPSgoKT0+KGZ1bmN0aW9uKG4pe24uRlVOQ1RJT05fUkVDT01QSUxFX0FMRVJUPSJGdW5jdGlvblJlY29tcGlsZXNBbGVydCIsbi5JTkZfTkFOX0FMRVJUPSJJbmZOYW5BbGVydCIsbi5URU5TT1JfU0hBUEVfQUxFUlQ9IlRlbnNvclNoYXBlQWxlcnQifShGY3x8KEZjPXt9KSksRmMpKSgpLHpvPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5FWEVDVVRJT049MF09IkVYRUNVVElPTiIsbltuLkdSQVBIX09QX0NSRUFUSU9OPTFdPSJHUkFQSF9PUF9DUkVBVElPTiJ9KHpvfHwoem89e30pKSx6bykpKCk7ZnVuY3Rpb24gTGcobil7aWYobnVsbD09PW4uY29kZUxvY2F0aW9uRm9jdXNUeXBlKXJldHVybiBudWxsO2xldCB0PVtdO2lmKG4uY29kZUxvY2F0aW9uRm9jdXNUeXBlPT09em8uRVhFQ1VUSU9OKXtsZXR7Zm9jdXNJbmRleDppLGV4ZWN1dGlvbkRhdGE6cn09bi5leGVjdXRpb25zO2lmKG51bGw9PT1pfHx2b2lkIDA9PT1yW2ldKXJldHVybiBudWxsO3Q9cltpXS5zdGFja19mcmFtZV9pZHN9ZWxzZXtpZihudWxsPT09bi5ncmFwaHMuZm9jdXNlZE9wKXJldHVybiBudWxsO2xldHtncmFwaElkOmksb3BOYW1lOnJ9PW4uZ3JhcGhzLmZvY3VzZWRPcDtpZih2b2lkIDA9PT1uLmdyYXBocy5vcHNbaV18fCFuLmdyYXBocy5vcHNbaV0uaGFzKHIpKXJldHVybiBudWxsO3Q9bi5ncmFwaHMub3BzW2ldLmdldChyKS5zdGFja19mcmFtZV9pZHN9bGV0IGU9W107Zm9yKGxldCBpIG9mIHQpe2lmKG51bGw9PW4uc3RhY2tGcmFtZXNbaV0pcmV0dXJuIG51bGw7ZS5wdXNoKG4uc3RhY2tGcmFtZXNbaV0pfXJldHVybiBlfWZ1bmN0aW9uIHV5KG4sdCl7cmV0dXJuIG4uZmluZEluZGV4KGU9PmUuaG9zdF9uYW1lPT09dC5ob3N0X25hbWUmJmUuZmlsZV9wYXRoPT09dC5maWxlX3BhdGgpfWZ1bmN0aW9uIHJOKG4sdCxlKXtpZih0Pj1lKXRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYmVnaW4gdG8gYmUgbGVzcyB0aGFuIGVuZCwgYnV0IGdvdCBiZWdpbj0ke3R9LCBlbmQ9JHtlfWApO3JldHVybiBuLmZpbmRJbmRleChpPT5pLmJlZ2luPT09dCYmaS5lbmQ9PT1lKX1mdW5jdGlvbiBHRShuKXtsZXQgdD1uLnNvdXJjZUNvZGUuZm9jdXNMaW5lU3BlYztpZighbi5zdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSlyZXR1cm4gdDtsZXQgZT1MZyhuKTtpZihudWxsPT09ZSlyZXR1cm4gdDtsZXQgaT1mdW5jdGlvbihuLHQpe2lmKG51bGw9PT10KXJldHVybiBudWxsO2ZvcihsZXQgZT1uLmxlbmd0aC0xO2U+PTA7LS1lKXtsZXQgaT1uW2VdLHtob3N0X25hbWU6cixmaWxlX3BhdGg6b309aTtpZihyPT09dC5ob3N0X25hbWUmJm89PT10LmZpbGVfcGF0aClyZXR1cm4gaX1yZXR1cm4gbnVsbH0oZSx0KTtyZXR1cm4gbnVsbD09PWk/dDppfXZhciBBTWU9Z3Ioe3J1bnM6e30scnVuc0xvYWRlZDp7c3RhdGU6UmUuTk9UX0xPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6bnVsbH0sYWN0aXZlUnVuSWQ6bnVsbCxsYXN0RGF0YVBvbGxPbnNldFRpbWVNczotMSxsYXN0Tm9uRW1wdHlQb2xsRGF0YVRpbWVNczoxLGFsZXJ0czp7YWxlcnRzTG9hZGVkOntzdGF0ZTpSZS5OT1RfTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpudWxsfSxudW1BbGVydHM6MCxhbGVydHNCcmVha2Rvd246e30sYWxlcnRzOnt9LGV4ZWN1dGlvbkluZGljZXM6e30sZ3JhcGhFeGVjdXRpb25JbmRpY2VzOnt9LGZvY3VzVHlwZTpudWxsfSxleGVjdXRpb25zOntudW1FeGVjdXRpb25zTG9hZGVkOntzdGF0ZTpSZS5OT1RfTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpudWxsfSxleGVjdXRpb25EaWdlc3RzTG9hZGVkOntsb2FkaW5nUmFuZ2VzOltdLG51bUV4ZWN1dGlvbnM6MCxwYWdlTG9hZGVkU2l6ZXM6e319LGRpc3BsYXlDb3VudDo1MCxwYWdlU2l6ZToxMDAsc2Nyb2xsQmVnaW5JbmRleDowLGZvY3VzSW5kZXg6bnVsbCxleGVjdXRpb25EaWdlc3RzOnt9LGV4ZWN1dGlvbkRhdGE6e319LGdyYXBoRXhlY3V0aW9uczp7bnVtRXhlY3V0aW9uc0xvYWRlZDp7c3RhdGU6UmUuTk9UX0xPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6bnVsbH0sZXhlY3V0aW9uRGlnZXN0c0xvYWRlZDp7bG9hZGluZ1JhbmdlczpbXSxudW1FeGVjdXRpb25zOjAscGFnZUxvYWRlZFNpemVzOnt9fSxkaXNwbGF5Q291bnQ6MTAwLHBhZ2VTaXplOjIwMCxzY3JvbGxCZWdpbkluZGV4OjAsZm9jdXNJbmRleDpudWxsLGdyYXBoRXhlY3V0aW9uRGlnZXN0czp7fSxncmFwaEV4ZWN1dGlvbkRhdGFMb2FkaW5nUGFnZXM6W10sZ3JhcGhFeGVjdXRpb25EYXRhUGFnZUxvYWRlZFNpemVzOnt9LGdyYXBoRXhlY3V0aW9uRGF0YTp7fX0sZ3JhcGhzOntvcHM6e30sbG9hZGluZ09wczp7fSxmb2N1c2VkT3A6bnVsbH0sc3RhY2tGcmFtZXM6e30sY29kZUxvY2F0aW9uRm9jdXNUeXBlOm51bGwsc3RpY2tUb0JvdHRvbW1vc3RGcmFtZUluRm9jdXNlZEZpbGU6ITEsc291cmNlQ29kZTp7c291cmNlRmlsZUxpc3RMb2FkZWQ6e3N0YXRlOlJlLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGx9LHNvdXJjZUZpbGVMaXN0OltdLGZpbGVDb250ZW50czpbXSxmb2N1c0xpbmVTcGVjOm51bGx9fSx5ZShTRSxuPT4oey4uLm4scnVuc0xvYWRlZDp7Li4ubi5ydW5zTG9hZGVkLHN0YXRlOlJlLkxPQURJTkd9fSkpLHllKGpYLG49Pih7Li4ubixydW5zTG9hZGVkOnsuLi5uLnJ1bnNMb2FkZWQsc3RhdGU6UmUuRkFJTEVEfX0pKSx5ZShFRSwobix7cnVuczp0fSk9PntsZXQgZT1PYmplY3Qua2V5cyh0KSxpPWUubGVuZ3RoPjAmJm51bGw9PT1uLmFjdGl2ZVJ1bklkO3JldHVybnsuLi5uLGxhc3ROb25FbXB0eVBvbGxEYXRhVGltZU1zOmk/RGF0ZS5ub3coKTpuLmxhc3ROb25FbXB0eVBvbGxEYXRhVGltZU1zLHJ1bnM6dCxydW5zTG9hZGVkOntzdGF0ZTpSZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOkRhdGUubm93KCl9LGFjdGl2ZVJ1bklkOmUubGVuZ3RoPjA/ZVswXTpudWxsfX0pLHllKHN5LG49Pih7Li4ubixsYXN0RGF0YVBvbGxPbnNldFRpbWVNczpEYXRlLm5vdygpfSkpLHllKGx5LG49Pm51bGw9PT1uLmFjdGl2ZVJ1bklkP246ey4uLm4sYWxlcnRzOnsuLi5uLmFsZXJ0cyxhbGVydHNMb2FkZWQ6ey4uLm4uYWxlcnRzLmFsZXJ0c0xvYWRlZCxzdGF0ZTpSZS5MT0FESU5HfX19KSx5ZShURSwobix7bnVtQWxlcnRzOnQsYWxlcnRzQnJlYWtkb3duOmV9KT0+e2lmKG51bGw9PT1uLmFjdGl2ZVJ1bklkKXJldHVybiBuO2xldCByPXQ+bi5hbGVydHMubnVtQWxlcnRzO3JldHVybnsuLi5uLGxhc3ROb25FbXB0eVBvbGxEYXRhVGltZU1zOnI/RGF0ZS5ub3coKTpuLmxhc3ROb25FbXB0eVBvbGxEYXRhVGltZU1zLGFsZXJ0czp7Li4ubi5hbGVydHMsYWxlcnRzTG9hZGVkOnsuLi5uLmFsZXJ0cy5hbGVydHNMb2FkZWQsc3RhdGU6UmUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpfSxudW1BbGVydHM6dCxhbGVydHNCcmVha2Rvd246ZX19fSkseWUoREUsKG4se251bUFsZXJ0czp0LGFsZXJ0c0JyZWFrZG93bjplLGFsZXJ0VHlwZTppLGJlZ2luOnIsYWxlcnRzOm99KT0+e2lmKG51bGw9PT1uLmFjdGl2ZVJ1bklkKXJldHVybiBuO2xldCBzPXt9LGw9bi5hbGVydHMuZXhlY3V0aW9uSW5kaWNlc1tpXT9uLmFsZXJ0cy5leGVjdXRpb25JbmRpY2VzW2ldLnNsaWNlKCk6W10sYz1uLmFsZXJ0cy5ncmFwaEV4ZWN1dGlvbkluZGljZXNbaV0/bi5hbGVydHMuZ3JhcGhFeGVjdXRpb25JbmRpY2VzW2ldLnNsaWNlKCk6W107Zm9yKGxldCBwPTA7cDxvLmxlbmd0aDsrK3Ape2xldCBoPXIrcCxtPW9bcF07aWYoc1toXT1tLG0uYWxlcnRfdHlwZT09PUZjLklORl9OQU5fQUxFUlQpe2xldCBfPW07bFtoXT1fLmV4ZWN1dGlvbl9pbmRleCxudWxsIT09Xy5ncmFwaF9leGVjdXRpb25fdHJhY2VfaW5kZXgmJihjW2hdPV8uZ3JhcGhfZXhlY3V0aW9uX3RyYWNlX2luZGV4KX19dm9pZCAwIT09bi5hbGVydHMuYWxlcnRzW2ldJiZPYmplY3QuYXNzaWduKHMsbi5hbGVydHMuYWxlcnRzW2ldKTtsZXQgZD1uLmV4ZWN1dGlvbnMuc2Nyb2xsQmVnaW5JbmRleCx1PW4uZ3JhcGhFeGVjdXRpb25zLmZvY3VzSW5kZXg7aWYoaT09PUZjLklORl9OQU5fQUxFUlQmJjA9PT1yKXtsZXQgcD1vWzBdO2Q9TWF0aC5tYXgoMCxwLmV4ZWN1dGlvbl9pbmRleC1NYXRoLmZsb29yKG4uZXhlY3V0aW9ucy5kaXNwbGF5Q291bnQvMikpLG51bGwhPT1wLmdyYXBoX2V4ZWN1dGlvbl90cmFjZV9pbmRleCYmKHU9cC5ncmFwaF9leGVjdXRpb25fdHJhY2VfaW5kZXgpfXJldHVybnsuLi5uLGV4ZWN1dGlvbnM6ey4uLm4uZXhlY3V0aW9ucyxzY3JvbGxCZWdpbkluZGV4OmR9LGdyYXBoRXhlY3V0aW9uczp7Li4ubi5ncmFwaEV4ZWN1dGlvbnMsZm9jdXNJbmRleDp1fSxhbGVydHM6ey4uLm4uYWxlcnRzLGFsZXJ0c0xvYWRlZDp7Li4ubi5hbGVydHMuYWxlcnRzTG9hZGVkLHN0YXRlOlJlLkxPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6RGF0ZS5ub3coKX0sbnVtQWxlcnRzOnQsYWxlcnRzQnJlYWtkb3duOmUsYWxlcnRzOnsuLi5uLmFsZXJ0cy5hbGVydHMsW2ldOnN9LGV4ZWN1dGlvbkluZGljZXM6ey4uLm4uYWxlcnRzLmV4ZWN1dGlvbkluZGljZXMsW2ldOmx9LGdyYXBoRXhlY3V0aW9uSW5kaWNlczp7Li4ubi5hbGVydHMuZ3JhcGhFeGVjdXRpb25JbmRpY2VzLFtpXTpjfX19fSkseWUoRGcsKG4se2FsZXJ0VHlwZTp0fSk9PntsZXQgZT17Li4ubixhbGVydHM6ey4uLm4uYWxlcnRzLGZvY3VzVHlwZTpuLmFsZXJ0cy5mb2N1c1R5cGU9PT10P251bGw6dH19LGk9ZS5hbGVydHMuZm9jdXNUeXBlO2lmKG51bGwhPT1pKXtsZXQgcj1lLmFsZXJ0cy5leGVjdXRpb25JbmRpY2VzW2ldfHxbXTt2b2lkIDAhPT1yWzBdJiYoZS5leGVjdXRpb25zPXsuLi5lLmV4ZWN1dGlvbnMsc2Nyb2xsQmVnaW5JbmRleDpNYXRoLm1heCgwLE51bWJlcihyWzBdKS1NYXRoLmZsb29yKGUuZXhlY3V0aW9ucy5kaXNwbGF5Q291bnQvMikpfSl9cmV0dXJuIGV9KSx5ZShJRSxuPT5udWxsPT09bi5hY3RpdmVSdW5JZD9uOnsuLi5uLGV4ZWN1dGlvbnM6ey4uLm4uZXhlY3V0aW9ucyxudW1FeGVjdXRpb25zTG9hZGVkOnsuLi5uLmV4ZWN1dGlvbnMubnVtRXhlY3V0aW9uc0xvYWRlZCxzdGF0ZTpSZS5MT0FESU5HfX19KSx5ZShBRSwobix7bnVtRXhlY3V0aW9uczp0fSk9PntpZihudWxsPT09bi5hY3RpdmVSdW5JZClyZXR1cm4gbjtsZXQgaT10Pm4uZXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzTG9hZGVkLm51bUV4ZWN1dGlvbnMscj17Li4ubixsYXN0Tm9uRW1wdHlQb2xsRGF0YVRpbWVNczppP0RhdGUubm93KCk6bi5sYXN0Tm9uRW1wdHlQb2xsRGF0YVRpbWVNcyxleGVjdXRpb25zOnsuLi5uLmV4ZWN1dGlvbnMsbnVtRXhlY3V0aW9uc0xvYWRlZDp7Li4ubi5leGVjdXRpb25zLm51bUV4ZWN1dGlvbnNMb2FkZWQsc3RhdGU6UmUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpfSxleGVjdXRpb25EaWdlc3RzTG9hZGVkOnsuLi5uLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZCxudW1FeGVjdXRpb25zOnR9fX07cmV0dXJuIHQ+MCYmbnVsbD09PW4uZXhlY3V0aW9ucy5mb2N1c0luZGV4JiYoci5leGVjdXRpb25zLmZvY3VzSW5kZXg9MCkscn0pLHllKFJFLChuLHQpPT57aWYobnVsbD09PW4uYWN0aXZlUnVuSWQpcmV0dXJuIG47bGV0IGk9Wy4uLm4uZXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzTG9hZGVkLmxvYWRpbmdSYW5nZXNdO3JldHVybi0xPT09ck4oaSx0LmJlZ2luLHQuZW5kKSYmaS5wdXNoKHtiZWdpbjp0LmJlZ2luLGVuZDp0LmVuZH0pLHsuLi5uLGV4ZWN1dGlvbnM6ey4uLm4uZXhlY3V0aW9ucyxleGVjdXRpb25EaWdlc3RzTG9hZGVkOnsuLi5uLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZCxsb2FkaW5nUmFuZ2VzOml9fX19KSx5ZShQRSwobix0KT0+e2lmKG51bGw9PT1uLmFjdGl2ZVJ1bklkKXJldHVybiBuO2xldCBpPVsuLi5uLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZC5sb2FkaW5nUmFuZ2VzXSxyPXJOKGksdC5iZWdpbix0LmVuZCk7LTEhPT1yJiZpLnNwbGljZShyLDEpO2xldCBvPXsuLi5uLGV4ZWN1dGlvbnM6ey4uLm4uZXhlY3V0aW9ucyxleGVjdXRpb25EaWdlc3RzTG9hZGVkOnsuLi5uLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZCxudW1FeGVjdXRpb25zOnQubnVtX2RpZ2VzdHMsbG9hZGluZ1JhbmdlczppfSxleGVjdXRpb25EaWdlc3RzOnsuLi5uLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c319fTtmb3IobGV0IGE9dC5iZWdpbjthPHQuZW5kOysrYSlvLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c1thXT10LmV4ZWN1dGlvbl9kaWdlc3RzW2EtdC5iZWdpbl07cmV0dXJuIHQuZW5kPnQuYmVnaW4mJihvLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZC5wYWdlTG9hZGVkU2l6ZXM9ey4uLm8uZXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzTG9hZGVkLnBhZ2VMb2FkZWRTaXplcyxbdC5iZWdpbi9uLmV4ZWN1dGlvbnMucGFnZVNpemVdOnQuZW5kLXQuYmVnaW59KSxvfSkseWUoSWcsbj0+e2lmKG51bGw9PT1uLmFjdGl2ZVJ1bklkKXJldHVybiBuO2xldCBlPW4uZXhlY3V0aW9ucy5zY3JvbGxCZWdpbkluZGV4O3JldHVybiBlPjAmJmUtLSx7Li4ubixleGVjdXRpb25zOnsuLi5uLmV4ZWN1dGlvbnMsc2Nyb2xsQmVnaW5JbmRleDplfX19KSx5ZShBZyxuPT57aWYobnVsbD09PW4uYWN0aXZlUnVuSWQpcmV0dXJuIG47bGV0IGU9bi5leGVjdXRpb25zLnNjcm9sbEJlZ2luSW5kZXg7cmV0dXJuIGUrbi5leGVjdXRpb25zLmRpc3BsYXlDb3VudCsxPD1uLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZC5udW1FeGVjdXRpb25zJiZlKyssey4uLm4sZXhlY3V0aW9uczp7Li4ubi5leGVjdXRpb25zLHNjcm9sbEJlZ2luSW5kZXg6ZX19fSkseWUoUmcsKG4sdCk9PntpZih0LmluZGV4PDB8fCFOdW1iZXIuaXNJbnRlZ2VyKHQuaW5kZXgpKXRocm93IG5ldyBFcnJvcihgQXR0ZW1wdCB0byBzY3JvbGwgdG8gbmVnYXRpdmUgb3Igbm9uLWludGVnZXIgZXhlY3V0aW9uIGluZGV4ICgke3QuaW5kZXh9KWApO2xldHtkaXNwbGF5Q291bnQ6ZX09bi5leGVjdXRpb25zLHtudW1FeGVjdXRpb25zOml9PW4uZXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzTG9hZGVkO2lmKHQuaW5kZXg+TWF0aC5tYXgoMCxpLWUpKXRocm93IG5ldyBFcnJvcihgQXR0ZW1wdCB0byBzY3JvbGwgdG8gZXhlY3V0aW9uIGluZGV4ICgke3QuaW5kZXh9KSwgd2hpY2ggZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQgaW5kZXggKG51bUV4ZWN1dGlvbnM9JHtpfTsgZGlzcGxheUNvdW50PSR7ZX0pYCk7cmV0dXJuey4uLm4sZXhlY3V0aW9uczp7Li4ubi5leGVjdXRpb25zLHNjcm9sbEJlZ2luSW5kZXg6dC5pbmRleH19fSkseWUoUGcsKG4sdCk9PntsZXQgZT17Li4ubixleGVjdXRpb25zOnsuLi5uLmV4ZWN1dGlvbnMsZm9jdXNJbmRleDpuLmV4ZWN1dGlvbnMuc2Nyb2xsQmVnaW5JbmRleCt0LmRpc3BsYXlJbmRleH0sY29kZUxvY2F0aW9uRm9jdXNUeXBlOnpvLkVYRUNVVElPTixzb3VyY2VDb2RlOnsuLi5uLnNvdXJjZUNvZGV9fTtyZXR1cm4gZS5zb3VyY2VDb2RlLmZvY3VzTGluZVNwZWM9R0UoZSksZX0pLHllKGtFLChuLHQpPT57aWYobnVsbD09PW4uYWN0aXZlUnVuSWQpcmV0dXJuIG47bGV0IGk9ey4uLm4sZXhlY3V0aW9uczp7Li4ubi5leGVjdXRpb25zLGV4ZWN1dGlvbkRhdGE6ey4uLm4uZXhlY3V0aW9ucy5leGVjdXRpb25EYXRhfX19O2ZvcihsZXQgcj10LmJlZ2luO3I8dC5lbmQ7KytyKWkuZXhlY3V0aW9ucy5leGVjdXRpb25EYXRhW3JdPXQuZXhlY3V0aW9uc1tyLXQuYmVnaW5dO3JldHVybiBpfSkseWUoT0Usbj0+bnVsbD09PW4uYWN0aXZlUnVuSWQ/bjp7Li4ubixncmFwaEV4ZWN1dGlvbnM6ey4uLm4uZ3JhcGhFeGVjdXRpb25zLG51bUV4ZWN1dGlvbnNMb2FkZWQ6ey4uLm4uZ3JhcGhFeGVjdXRpb25zLm51bUV4ZWN1dGlvbnNMb2FkZWQsc3RhdGU6UmUuTE9BRElOR319fSkseWUoRkUsKG4se251bUdyYXBoRXhlY3V0aW9uczp0fSk9PntpZihudWxsPT09bi5hY3RpdmVSdW5JZClyZXR1cm4gbjtsZXQgZT10Pm4uZ3JhcGhFeGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQubnVtRXhlY3V0aW9ucyxpPXsuLi5uLGxhc3ROb25FbXB0eVBvbGxEYXRhVGltZU1zOmU/RGF0ZS5ub3coKTpuLmxhc3ROb25FbXB0eVBvbGxEYXRhVGltZU1zLGdyYXBoRXhlY3V0aW9uczp7Li4ubi5ncmFwaEV4ZWN1dGlvbnMsbnVtRXhlY3V0aW9uc0xvYWRlZDp7Li4ubi5ncmFwaEV4ZWN1dGlvbnMubnVtRXhlY3V0aW9uc0xvYWRlZCxzdGF0ZTpSZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOkRhdGUubm93KCl9LGV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQ6ey4uLm4uZ3JhcGhFeGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQsbnVtRXhlY3V0aW9uczp0fX19O3JldHVybiB0PjAmJm51bGw9PT1uLmdyYXBoRXhlY3V0aW9ucy5mb2N1c0luZGV4JiYoaS5ncmFwaEV4ZWN1dGlvbnMuZm9jdXNJbmRleD0wKSxpfSkseWUoTkUsKG4se3BhZ2VJbmRleDp0fSk9PntpZihudWxsPT09bi5hY3RpdmVSdW5JZClyZXR1cm4gbjtsZXQgZT1uLmdyYXBoRXhlY3V0aW9ucy5ncmFwaEV4ZWN1dGlvbkRhdGFMb2FkaW5nUGFnZXMuc2xpY2UoKTtyZXR1cm4tMT09PWUuaW5kZXhPZih0KSYmZS5wdXNoKHQpLHsuLi5uLGdyYXBoRXhlY3V0aW9uczp7Li4ubi5ncmFwaEV4ZWN1dGlvbnMsZ3JhcGhFeGVjdXRpb25EYXRhTG9hZGluZ1BhZ2VzOmV9fX0pLHllKExFLChuLHQpPT57aWYobnVsbD09PW4uYWN0aXZlUnVuSWQpcmV0dXJuIG47bGV0e3BhZ2VTaXplOmV9PW4uZ3JhcGhFeGVjdXRpb25zLGk9bi5ncmFwaEV4ZWN1dGlvbnMuZ3JhcGhFeGVjdXRpb25EYXRhTG9hZGluZ1BhZ2VzLnNsaWNlKCkscj17Li4ubi5ncmFwaEV4ZWN1dGlvbnMuZ3JhcGhFeGVjdXRpb25EYXRhUGFnZUxvYWRlZFNpemVzfSxvPXsuLi5uLmdyYXBoRXhlY3V0aW9ucy5ncmFwaEV4ZWN1dGlvbkRhdGF9O2ZvcihsZXQgYT10LmJlZ2luO2E8dC5lbmQ7KythKXtsZXQgcz1NYXRoLmZsb29yKGEvZSk7LTEhPT1pLmluZGV4T2YocykmJmkuc3BsaWNlKGkuaW5kZXhPZihzKSwxKSx2b2lkIDA9PT1yW3NdJiYocltzXT0wKSx2b2lkIDA9PT1vW2FdJiZyW3NdKyssb1thXT10LmdyYXBoX2V4ZWN1dGlvbnNbYS10LmJlZ2luXX1yZXR1cm57Li4ubixncmFwaEV4ZWN1dGlvbnM6ey4uLm4uZ3JhcGhFeGVjdXRpb25zLGdyYXBoRXhlY3V0aW9uRGF0YUxvYWRpbmdQYWdlczppLGdyYXBoRXhlY3V0aW9uRGF0YVBhZ2VMb2FkZWRTaXplczpyLGdyYXBoRXhlY3V0aW9uRGF0YTpvfX19KSx5ZShrZywobix0KT0+e2lmKHQuaW5kZXg8MHx8IU51bWJlci5pc0ludGVnZXIodC5pbmRleCkpdGhyb3cgbmV3IEVycm9yKGBBdHRlbXB0IHRvIHNjcm9sbCB0byBuZWdhdGl2ZSBvciBub24taW50ZWdlciBncmFwaC1leGVjdXRpb24gaW5kZXggKCR7dC5pbmRleH0pYCk7cmV0dXJuey4uLm4sZ3JhcGhFeGVjdXRpb25zOnsuLi5uLmdyYXBoRXhlY3V0aW9ucyxzY3JvbGxCZWdpbkluZGV4OnQuaW5kZXh9fX0pLHllKE9nLChuLHQpPT5xWChuLHQuZ3JhcGhfaWQsdC5vcF9uYW1lLHQuaW5kZXgpKSx5ZShGZywobix0KT0+cVgobix0LmdyYXBoX2lkLHQub3BfbmFtZSkpLHllKEJFLChuLHQpPT57bGV0e2dyYXBoX2lkOmUsb3BfbmFtZTppfT10LHI9ey4uLm4sZ3JhcGhzOnsuLi5uLmdyYXBocyxsb2FkaW5nT3BzOnsuLi5uLmdyYXBocy5sb2FkaW5nT3BzfX19O3JldHVybiB2b2lkIDA9PT1yLmdyYXBocy5sb2FkaW5nT3BzW2VdJiYoci5ncmFwaHMubG9hZGluZ09wc1tlXT1uZXcgTWFwKSxyLmdyYXBocy5sb2FkaW5nT3BzW2VdLmhhcyhpKXx8ci5ncmFwaHMubG9hZGluZ09wc1tlXS5zZXQoaSxSZS5MT0FESU5HKSxyfSkseWUoVkUsKG4sdCk9PntsZXR7Z3JhcGhPcEluZm9SZXNwb25zZTplfT10LHtncmFwaF9pZHM6aX09ZSxyPWlbaS5sZW5ndGgtMV0sbz17Li4ubixncmFwaHM6ey4uLm4uZ3JhcGhzLG9wczp7Li4ubi5ncmFwaHMub3BzLFtyXTpuZXcgTWFwKG4uZ3JhcGhzLm9wc1tyXSl9LGxvYWRpbmdPcHM6ey4uLm4uZ3JhcGhzLmxvYWRpbmdPcHMsW3JdOm5ldyBNYXAobi5ncmFwaHMubG9hZGluZ09wc1tyXSl9fX07Zm9yKGxldCBhIG9mIGUuaW5wdXRzKSFhLmRhdGF8fG8uZ3JhcGhzLm9wc1tyXS5zZXQoYS5vcF9uYW1lLGEuZGF0YSk7Zm9yKGxldCBhPTA7YTxlLmNvbnN1bWVycy5sZW5ndGg7KythKWZvcihsZXQgcyBvZiBlLmNvbnN1bWVyc1thXSkhcy5kYXRhfHxvLmdyYXBocy5vcHNbcl0uc2V0KHMub3BfbmFtZSxzLmRhdGEpO3JldHVybiBvLmdyYXBocy5vcHNbcl0uc2V0KGUub3BfbmFtZSx7Li4uZSxpbnB1dHM6ZS5pbnB1dHMubWFwKGE9Pih7b3BfbmFtZTphLm9wX25hbWUsb3V0cHV0X3Nsb3Q6YS5vdXRwdXRfc2xvdH0pKSxjb25zdW1lcnM6ZS5jb25zdW1lcnMubWFwKGE9PmEubWFwKHM9Pih7b3BfbmFtZTpzLm9wX25hbWUsaW5wdXRfc2xvdDpzLmlucHV0X3Nsb3R9KSkpfSksby5ncmFwaHMubG9hZGluZ09wc1tyXS5zZXQoZS5vcF9uYW1lLFJlLkxPQURFRCksb30pLHllKEhFLG49Pih7Li4ubixzb3VyY2VDb2RlOnsuLi5uLnNvdXJjZUNvZGUsc291cmNlRmlsZUxpc3RMb2FkZWQ6ey4uLm4uc291cmNlQ29kZS5zb3VyY2VGaWxlTGlzdExvYWRlZCxzdGF0ZTpSZS5MT0FESU5HfX19KSkseWUoekUsKG4sdCk9PntsZXQgZT17Li4ubixzb3VyY2VDb2RlOnsuLi5uLnNvdXJjZUNvZGUsc291cmNlRmlsZUxpc3RMb2FkZWQ6ey4uLm4uc291cmNlQ29kZS5zb3VyY2VGaWxlTGlzdExvYWRlZCxzdGF0ZTpSZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOkRhdGUubm93KCl9LHNvdXJjZUZpbGVMaXN0OnQuc291cmNlRmlsZXMsZmlsZUNvbnRlbnRzOm4uc291cmNlQ29kZS5maWxlQ29udGVudHMuc2xpY2UoKX19LGk9dC5zb3VyY2VGaWxlcy5sZW5ndGgse2ZpbGVDb250ZW50czpyfT1lLnNvdXJjZUNvZGU7Zm9yKGxldCBvPTA7bzxpOysrbylyW29dPW4uc291cmNlQ29kZS5maWxlQ29udGVudHNbb10/P3tsb2FkU3RhdGU6UmUuTk9UX0xPQURFRCxsaW5lczpudWxsfTtyZXR1cm4gZX0pLHllKE5nLChuLHQpPT57bGV0IGU9TGcobiksaT17Li4ubixzb3VyY2VDb2RlOnsuLi5uLnNvdXJjZUNvZGUsZm9jdXNMaW5lU3BlYzp0LnN0YWNrRnJhbWV9fTtyZXR1cm4gbnVsbCE9PWUmJihpLnN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlPWZ1bmN0aW9uKG4sdCl7bGV0IGU9LTEsaT0tMTtpZihuLmZvckVhY2goKHtmaWxlX3BhdGg6cixsaW5lbm86b30sYSk9PntyPT09dC5maWxlX3BhdGgmJihpPWEsbz09PXQubGluZW5vJiYoZT1hKSl9KSwtMT09PWUpdGhyb3cgbmV3IEVycm9yKGBTdGFjayBmcmFtZSAke0pTT04uc3RyaW5naWZ5KHQpfSBpcyBub3QgZm91bmQuYCk7cmV0dXJuIGU9PT1pfShlLHQuc3RhY2tGcmFtZSkpLGl9KSx5ZShVRSwobix0KT0+e2xldCBlPXsuLi5uLHNvdXJjZUNvZGU6ey4uLm4uc291cmNlQ29kZSxmaWxlQ29udGVudHM6bi5zb3VyY2VDb2RlLmZpbGVDb250ZW50cy5zbGljZSgpfX0saT11eShlLnNvdXJjZUNvZGUuc291cmNlRmlsZUxpc3QsdCk7aWYoIShpPj0wKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIHRoZSBmb2xsb3dpbmcgZmlsZSBpbiBmaWxlIGxpc3Q6IGhvc3RfbmFtZT0iJHt0Lmhvc3RfbmFtZX0iLCBmaWxlX3BhdGg9IiR7dC5maWxlX3BhdGh9ImApO3JldHVybiBlLnNvdXJjZUNvZGUuZmlsZUNvbnRlbnRzLnNwbGljZShpLDEsey4uLmUuc291cmNlQ29kZS5maWxlQ29udGVudHNbaV0sbG9hZFN0YXRlOlJlLkxPQURJTkd9KSxlfSkseWUoakUsKG4sdCk9PntsZXQgZT17Li4ubixzb3VyY2VDb2RlOnsuLi5uLnNvdXJjZUNvZGUsZmlsZUNvbnRlbnRzOm4uc291cmNlQ29kZS5maWxlQ29udGVudHMuc2xpY2UoKX19LGk9dXkoZS5zb3VyY2VDb2RlLnNvdXJjZUZpbGVMaXN0LHQpO2lmKCEoaT49MCkpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCB0aGUgZm9sbG93aW5nIGZpbGUgaW4gZmlsZSBsaXN0OiBob3N0X25hbWU9IiR7dC5ob3N0X25hbWV9IiwgZmlsZV9wYXRoPSIke3QuZmlsZV9wYXRofSJgKTtyZXR1cm4gZS5zb3VyY2VDb2RlLmZpbGVDb250ZW50cy5zcGxpY2UoaSwxLHtsb2FkU3RhdGU6UmUuTE9BREVELGxpbmVzOnQubGluZXN9KSxlfSkseWUoY3ksKG4sdCk9PntpZihudWxsPT09bi5hY3RpdmVSdW5JZClyZXR1cm4gbjtsZXQgaT17Li4ubixzdGFja0ZyYW1lczp7Li4ubi5zdGFja0ZyYW1lcywuLi50LnN0YWNrRnJhbWVzfSxzb3VyY2VDb2RlOnsuLi5uLnNvdXJjZUNvZGV9fTtyZXR1cm4gaS5zb3VyY2VDb2RlLmZvY3VzTGluZVNwZWM9R0UoaSksaX0pKTtmdW5jdGlvbiBxWChuLHQsZSxpKXtsZXQgcj17Li4ubixncmFwaHM6ey4uLm4uZ3JhcGhzLGZvY3VzZWRPcDp7Z3JhcGhJZDp0LG9wTmFtZTplfX0sY29kZUxvY2F0aW9uRm9jdXNUeXBlOnpvLkdSQVBIX09QX0NSRUFUSU9OLHNvdXJjZUNvZGU6ey4uLm4uc291cmNlQ29kZX19O3JldHVybiByLnNvdXJjZUNvZGUuZm9jdXNMaW5lU3BlYz1HRShyKSx2b2lkIDAhPT1pJiYoci5ncmFwaEV4ZWN1dGlvbnM9ey4uLm4uZ3JhcGhFeGVjdXRpb25zLGZvY3VzSW5kZXg6aX0pLHJ9ZnVuY3Rpb24gWFgobix0KXtyZXR1cm4gQU1lKG4sdCl9dmFyIFJvPU1yKGR5KSxOaD1XKFJvLG49Pm4ucnVucyksb049VyhSbyxuPT5uLnJ1bnNMb2FkZWQpLCRvPVcoUm8sbj0+bi5hY3RpdmVSdW5JZCksWVg9VyhSbyxuPT5uLmxhc3REYXRhUG9sbE9uc2V0VGltZU1zLW4ubGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXMpLEJnPVcoUm8sbj0+bi5hbGVydHMpLGFOPVcoQmcsbj0+bi5hbGVydHNMb2FkZWQpLFFYPVcoQmcsbj0+bi5udW1BbGVydHMpLFdFPVcoQmcsbj0+bi5mb2N1c1R5cGUpLFpYPVcoQmcsbj0+bnVsbD09PW4uZm9jdXNUeXBlPzA6bi5hbGVydHNCcmVha2Rvd25bbi5mb2N1c1R5cGVdfHwwKSxLWD1XKEJnLG49Pm51bGw9PT1uLmZvY3VzVHlwZXx8dm9pZCAwPT09bi5hbGVydHNbbi5mb2N1c1R5cGVdP251bGw6bi5hbGVydHNbbi5mb2N1c1R5cGVdKSxKWD1XKEJnLG49Pm4uYWxlcnRzQnJlYWtkb3duKSxMaD1XKFJvLG49Pm4uZXhlY3V0aW9ucykscUU9VyhMaCxuPT5uLm51bUV4ZWN1dGlvbnNMb2FkZWQpLHB5PVcoTGgsbj0+bi5leGVjdXRpb25EaWdlc3RzTG9hZGVkKSxadT1XKExoLG49Pm4uZXhlY3V0aW9uRGlnZXN0c0xvYWRlZC5udW1FeGVjdXRpb25zKSxoeT1XKExoLG49Pm4uc2Nyb2xsQmVnaW5JbmRleCksVmc9VyhMaCxuPT5uLnBhZ2VTaXplKSxIZz1XKExoLG49Pm4uZGlzcGxheUNvdW50KSwkWD1XKExoLG49PntsZXQgdD1bXTtmb3IobGV0IGU9bi5zY3JvbGxCZWdpbkluZGV4O2U8bi5zY3JvbGxCZWdpbkluZGV4K24uZGlzcGxheUNvdW50OysrZSl0LnB1c2goZSBpbiBuLmV4ZWN1dGlvbkRpZ2VzdHM/bi5leGVjdXRpb25EaWdlc3RzW2VdOm51bGwpO3JldHVybiB0fSksS3U9VyhSbyxuPT5uLmdyYXBoRXhlY3V0aW9ucyksZVk9VyhLdSxuPT5uLm51bUV4ZWN1dGlvbnNMb2FkZWQpLG15PVcoUm8sbj0+bi5ncmFwaEV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZC5udW1FeGVjdXRpb25zKSx0WT1XKEt1LG49Pm4uc2Nyb2xsQmVnaW5JbmRleCksblk9VyhLdSxuPT5uLmRpc3BsYXlDb3VudCksaVk9VyhLdSxuPT5uLnBhZ2VTaXplKSxyWT1XKEt1LG49Pm4uZ3JhcGhFeGVjdXRpb25EYXRhTG9hZGluZ1BhZ2VzKSxvWT1XKEt1LG49Pm4uZ3JhcGhFeGVjdXRpb25EYXRhUGFnZUxvYWRlZFNpemVzKSxzTj1XKEt1LG49Pm4uZ3JhcGhFeGVjdXRpb25EYXRhKSxsTj1XKEt1LG49Pm4uZm9jdXNJbmRleCksY049VyhSbyxuPT5uLmdyYXBocyksZE49VyhjTixuPT57bGV0e2ZvY3VzZWRPcDp0LG9wczplfT1uO3JldHVybiBudWxsPT09dHx8dm9pZCAwPT09ZVt0LmdyYXBoSWRdP251bGw6ZVt0LmdyYXBoSWRdLmdldCh0Lm9wTmFtZSl8fG51bGx9KSx1Tj1XKGNOLG49PntsZXR7Zm9jdXNlZE9wOnQsb3BzOmV9PW47aWYobnVsbD09PXR8fHZvaWQgMD09PWVbdC5ncmFwaElkXXx8IWVbdC5ncmFwaElkXS5oYXModC5vcE5hbWUpKXJldHVybiBudWxsO3tsZXQgaT1lW3QuZ3JhcGhJZF0se2lucHV0czpyfT1pLmdldCh0Lm9wTmFtZSk7cmV0dXJuIHIubWFwKG89PntsZXQgYT17Li4ub307cmV0dXJuIGkuaGFzKG8ub3BfbmFtZSkmJihhLmRhdGE9aS5nZXQoby5vcF9uYW1lKSksYX0pfX0pLGFZPVcobE4sc04sdU4sKG4sdCxlKT0+e2lmKG51bGw9PT1ufHxudWxsPT09ZSlyZXR1cm4gbnVsbDtsZXQgaT1lLm1hcChzPT4hMSkscj1bXTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIHI7bGV0IG89dFtuXS5ncmFwaF9pZCxhPU1hdGgubWF4KDAsbi0yMDApO2ZvcihsZXQgcz1uLTE7cz49YTstLXMpaWYodm9pZCAwIT09dFtzXSlmb3IobGV0IGw9MDtsPGUubGVuZ3RoJiYoaVtsXXx8dFtzXS5ncmFwaF9pZCE9PW98fHRbc10ub3BfbmFtZSE9PWVbbF0ub3BfbmFtZXx8dFtzXS5vdXRwdXRfc2xvdCE9PWVbbF0ub3V0cHV0X3Nsb3R8fChyLnB1c2gocyksaVtsXT0hMCxyLmxlbmd0aCE9PWUubGVuZ3RoKSk7KytsKTtyZXR1cm4gcn0pLHNZPVcoY04sbj0+e2xldHtmb2N1c2VkT3A6dCxvcHM6ZX09bjtpZihudWxsPT09dHx8dm9pZCAwPT09ZVt0LmdyYXBoSWRdfHwhZVt0LmdyYXBoSWRdLmhhcyh0Lm9wTmFtZSkpcmV0dXJuIG51bGw7e2xldCBpPWVbdC5ncmFwaElkXSx7Y29uc3VtZXJzOnJ9PWkuZ2V0KHQub3BOYW1lKTtyZXR1cm4gci5tYXAobz0+by5tYXAoYT0+e2xldCBzPXsuLi5hfTtyZXR1cm4gaS5oYXMoYS5vcF9uYW1lKSYmKHMuZGF0YT1pLmdldChhLm9wX25hbWUpKSxzfSkpfX0pLGxZPVcoUm8sbj0+e2xldCB0PW4uZXhlY3V0aW9ucy5zY3JvbGxCZWdpbkluZGV4LGU9bi5leGVjdXRpb25zLnNjcm9sbEJlZ2luSW5kZXgrbi5leGVjdXRpb25zLmRpc3BsYXlDb3VudCxpPW5ldyBBcnJheShlLXQpLmZpbGwobnVsbCkscj1uLmFsZXJ0cy5mb2N1c1R5cGU7aWYobnVsbD09PXIpcmV0dXJuIGk7bGV0IG89bi5hbGVydHMuZXhlY3V0aW9uSW5kaWNlc1tyXTtpZih2b2lkIDA9PT1vKXJldHVybiBpO2ZvcihsZXQgYT10O2E8ZTsrK2Epby5pbmNsdWRlcyhhKSYmKGlbYS10XT1uLmFsZXJ0cy5mb2N1c1R5cGUpO3JldHVybiBpfSksWEU9VyhSbyxuPT5uLmV4ZWN1dGlvbnMpLHBOPVcoWEUsbj0+bi5mb2N1c0luZGV4KSxjWT1XKFhFLG49PntpZihudWxsPT09bi5mb2N1c0luZGV4KXJldHVybiBudWxsO2xldHtmb2N1c0luZGV4OnQsc2Nyb2xsQmVnaW5JbmRleDplLGRpc3BsYXlDb3VudDppfT1uO3JldHVybiB0PGV8fHQ+PWUraT9udWxsOnQtZX0pLGhOPVcoWEUsbj0+bi5leGVjdXRpb25EYXRhKSxkWT1XKFJvLG49Pm4uZ3JhcGhzLmxvYWRpbmdPcHMpLG1OPVcoUm8sbj0+bi5zdGFja0ZyYW1lcyksQmg9VyhYRSxuPT57bGV0e2ZvY3VzSW5kZXg6dCxleGVjdXRpb25EYXRhOmV9PW47cmV0dXJuIG51bGw9PT10fHx2b2lkIDA9PT1lW3RdP251bGw6ZVt0XX0pLGZ5PVcoUm8scE4sQmgsZE4sKG4sdCxlLGkpPT57bGV0e2NvZGVMb2NhdGlvbkZvY3VzVHlwZTpyfT1uO3JldHVybiBudWxsPT09cj9udWxsOnI9PT16by5FWEVDVVRJT04/bnVsbD09PXR8fG51bGw9PT1lP251bGw6e2NvZGVMb2NhdGlvblR5cGU6em8uRVhFQ1VUSU9OLG9wVHlwZTplLm9wX3R5cGUsZXhlY3V0aW9uSW5kZXg6dH06bnVsbD09PWk/bnVsbDp7Y29kZUxvY2F0aW9uVHlwZTp6by5HUkFQSF9PUF9DUkVBVElPTixvcFR5cGU6aS5vcF90eXBlLG9wTmFtZTppLm9wX25hbWV9fSksdVk9VyhSbyxMZyksWUU9VyhSbyxuPT5uLnNvdXJjZUNvZGUpLHBZPVcoWUUsbj0+bi5zb3VyY2VGaWxlTGlzdExvYWRlZCksZk49KFcoWUUsbj0+bi5zb3VyY2VGaWxlTGlzdCksVyhZRSxuPT57bGV0e3NvdXJjZUZpbGVMaXN0OnQsZm9jdXNMaW5lU3BlYzplfT1uO3JldHVybiBudWxsPT09ZT8tMTp1eSh0LGUpfSkpLFFFPVcoWUUsZk4sKG4sdCk9Pi0xPT09dD9udWxsOm4uZmlsZUNvbnRlbnRzW3RdfHxudWxsKSxaRT1XKFJvLG49Pm4uc291cmNlQ29kZS5mb2N1c0xpbmVTcGVjKSxoWT1XKFJvLG49Pm4uc3RpY2tUb0JvdHRvbW1vc3RGcmFtZUluRm9jdXNlZEZpbGUpLG1ZPWZ1bmN0aW9uKG4pe3JldHVybltuXX07ZnVuY3Rpb24gUE1lKG4sdCl7aWYoMSZuKXtsZXQgZT1UZSgpO2YoMCwiZGl2Iiw3KSxBKCJjbGljayIsZnVuY3Rpb24oKXtsZXQgbz1uZShlKS4kaW1wbGljaXQ7cmV0dXJuIGllKHcoKS5vblRvZ2dsZUZvY3VzVHlwZS5lbWl0KG8udHlwZSkpfSksZigxLCJkaXYiLDgpLFQoMiksZygpLGYoMywiZGl2Iiw5KSxUKDQpLGcoKSxrKDUsImRpdiIpLGcoKX1pZigyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dygpO2IoIm5nQ2xhc3MiLFVuKDQsbVksZS50eXBlPT09aS5mb2N1c1R5cGU/ImZvY3VzIjoiIikpLHYoMiksa3QoZS5kaXNwbGF5TmFtZSksdigyKSxsdSgiICIsZS5kaXNwbGF5U3ltYm9sLCI6ICIsZS5jb3VudCwiICIpfX12YXIgZlk9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMubnVtQWxlcnRzPTAsdGhpcy5hbGVydHNCcmVha2Rvd249W10sdGhpcy5mb2N1c1R5cGU9bnVsbCx0aGlzLm9uVG9nZ2xlRm9jdXNUeXBlPW5ldyBGfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJhbGVydHMtY29tcG9uZW50Il1dLGlucHV0czp7bnVtQWxlcnRzOiJudW1BbGVydHMiLGFsZXJ0c0JyZWFrZG93bjoiYWxlcnRzQnJlYWtkb3duIixmb2N1c1R5cGU6ImZvY3VzVHlwZSJ9LG91dHB1dHM6e29uVG9nZ2xlRm9jdXNUeXBlOiJvblRvZ2dsZUZvY3VzVHlwZSJ9LGRlY2xzOjEwLHZhcnM6NSxjb25zdHM6W1sxLCJhbGVydHMtY29udGFpbmVyIl0sWzEsImRlYnVnZ2luZy10aXRsZSJdLFsxLCJudW0tYWxlcnRzLWNvbnRhaW5lciJdLFsxLCJudW0tYWxlcnRzLWxhYmVsIl0sWzEsIm51bS1hbGVydHMtdmFsdWUiLDMsIm5nQ2xhc3MiXSxbMSwiYWxlcnRzLWJyZWFrZG93bi1jb250YWluZXIiXSxbImNsYXNzIiwiYWxlcnRzLWJyZWFrZG93bi10eXBlIiwzLCJuZ0NsYXNzIiwiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJhbGVydHMtYnJlYWtkb3duLXR5cGUiLDMsIm5nQ2xhc3MiLCJjbGljayJdLFsxLCJhbGVydC10eXBlLW5hbWUiXSxbMSwiYWxlcnQtdHlwZS1jb3VudCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGYoMCwiZGl2IiwwKSgxLCJkaXYiLDEpLFQoMiwiRGVidWdnaW5nIiksZygpLGYoMywiZGl2IiwyKSg0LCJkaXYiLDMpLFQoNSwiQWxlcnRzIiksZygpLGYoNiwiZGl2Iiw0KSxUKDcpLGcoKSgpLGYoOCwiZGl2Iiw1KSxTKDksUE1lLDYsNiwiZGl2Iiw2KSxnKCkoKSksMiZlJiYodig2KSxiKCJuZ0NsYXNzIixVbigzLG1ZLGkubnVtQWxlcnRzPjA/Im5vbi16ZXJvIjoiIikpLHYoMSksVmUoIiAiLGkubnVtQWxlcnRzLCIgIiksdigyKSxiKCJuZ0Zvck9mIixpLmFsZXJ0c0JyZWFrZG93bikpfSxkZXBlbmRlbmNpZXM6W3duLG5uXSxzdHlsZXM6WyIuYWxlcnRzLWJyZWFrZG93bi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBwYWRkaW5nOiAxMHB4IDEwcHggMTBweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4uYWxlcnRzLWJyZWFrZG93bi10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGJvcmRlci1yYWRpdXM6IDAgMTBweCAxMHB4IDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZGlzcGxheTogZmxleDtcbiAgcGFkZGluZzogNnB4IDAgNnB4IDUwcHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cbi5hbGVydHMtYnJlYWtkb3duLXR5cGUuZm9jdXNbX25nY29udGVudC0lQ09NUCVdIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZWVlMDtcbn1cblxuLmFsZXJ0cy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xufVxuXG4uYWxlcnQtdHlwZS1jb3VudFtfbmdjb250ZW50LSVDT01QJV0ge1xuICBcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U1MjU5MjtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBjb2xvcjogI2ZmZjtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwYWRkaW5nOiAzcHg7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDIwcHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cbi5hbGVydC10eXBlLW5hbWVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwYWRkaW5nOiAzcHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cbi5kZWJ1Z2dpbmctdGl0bGVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZm9udC1zaXplOiAxOHB4O1xufVxuXG4ubnVtLWFsZXJ0cy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIHBhZGRpbmc6IDEwcHggMTBweCAxMHB4IDMwcHg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLm51bS1hbGVydHMtbGFiZWxbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBmb250LXNpemU6IDEzcHg7XG59XG5cbi5udW0tYWxlcnRzLXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGJvcmRlci1yYWRpdXM6IDEycHg7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udC1zaXplOiAxM3B4O1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBsaW5lLWhlaWdodDogMjRweDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMjBweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aWR0aDogMjRweDtcbn1cblxuLm51bS1hbGVydHMtdmFsdWUubm9uLXplcm9bX25nY29udGVudC0lQ09NUCVdIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmYjc4MDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59Il19KSxufSkoKSxPTWU9e1tGYy5GVU5DVElPTl9SRUNPTVBJTEVfQUxFUlRdOntkaXNwbGF5TmFtZToiRnVuY3Rpb24gcmVjb21waWxlcyIsZGlzcGxheVN5bWJvbDoiQyJ9LFtGYy5JTkZfTkFOX0FMRVJUXTp7ZGlzcGxheU5hbWU6Ik5hTi9cdTIyMWUiLGRpc3BsYXlTeW1ib2w6Ilx1MjIxZSJ9LFtGYy5URU5TT1JfU0hBUEVfQUxFUlRdOntkaXNwbGF5TmFtZToiVGVuc29yIHNoYXBlIixkaXNwbGF5U3ltYm9sOiJcdTI1YTAifX0sZ1k9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5udW1BbGVydHMkPXRoaXMuc3RvcmUucGlwZSh1bihRWCkpLHRoaXMuYWxlcnRzQnJlYWtkb3duJD10aGlzLnN0b3JlLnBpcGUodW4oVyhKWCxpPT57bGV0IHI9T2JqZWN0LmtleXMoaSk7cmV0dXJuIHIuc29ydCgpLHIubWFwKG89Pih7dHlwZTpvLC4uLk9NZVtvXSxjb3VudDppW29dfSkpfSkpKSx0aGlzLmZvY3VzVHlwZSQ9dGhpcy5zdG9yZS5waXBlKHVuKFdFKSl9b25Ub2dnbGVGb2N1c1R5cGUoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChEZyh7YWxlcnRUeXBlOmV9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoSWUpKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12Mi1hbGVydHMiXV0sZGVjbHM6NCx2YXJzOjksY29uc3RzOltbMywibnVtQWxlcnRzIiwiYWxlcnRzQnJlYWtkb3duIiwiZm9jdXNUeXBlIiwib25Ub2dnbGVGb2N1c1R5cGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihmKDAsImFsZXJ0cy1jb21wb25lbnQiLDApLEEoIm9uVG9nZ2xlRm9jdXNUeXBlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblRvZ2dsZUZvY3VzVHlwZShvKX0pLFUoMSwiYXN5bmMiKSxVKDIsImFzeW5jIiksVSgzLCJhc3luYyIpLGcoKSksMiZlJiZiKCJudW1BbGVydHMiLEcoMSwzLGkubnVtQWxlcnRzJCkpKCJhbGVydHNCcmVha2Rvd24iLEcoMiw1LGkuYWxlcnRzQnJlYWtkb3duJCkpKCJmb2N1c1R5cGUiLEcoMyw3LGkuZm9jdXNUeXBlJCkpfSxkZXBlbmRlbmNpZXM6W2ZZLGN0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxneT17MTk6ImZsb2F0MTYiLDE6ImZsb2F0MzIiLDI6ImZsb2F0NjQiLDM6ImludDMyIiw0OiJ1aW50OCIsMTc6InVpbnQxNiIsMjI6InVpbnQzMiIsMjM6InVpbnQ2NCIsNToiaW50MTYiLDY6ImludDgiLDc6InN0cmluZyIsODoiY29tcGxleDY0IiwxODoiY29tcGxleDEyOCIsOToiaW50NjQiLDEwOiJib29sIiwxMToicWludDgiLDEyOiJxdWludDgiLDE1OiJxaW50MTYiLDE2OiJxdWludDE2IiwxMzoicWludDMyIiwxNDoiYmZsb2F0MTYiLDIwOiJyZXNvdXJjZSIsMjE6InZhcmlhbnQiLDExOToiZmxvYXQxNl9yZWYiLDEwMToiZmxvYXQzMl9yZWYiLDEwMjoiZmxvYXQ2NF9yZWYiLDEwMzoiaW50MzJfcmVmIiwxMjI6InVpbnQzMl9yZWYiLDEwNDoidWludDhfcmVmIiwxMTc6InVpbnQxNl9yZWYiLDEwNToiaW50MTZfcmVmIiwxMDY6ImludDhfcmVmIiwxMDc6InN0cmluZ19yZWYiLDEwODoiY29tcGxleDY0X3JlZiIsMTE4OiJjb21wbGV4MTI4X3JlZiIsMTA5OiJpbnQ2NF9yZWYiLDEyMzoidWludDY0X3JlZiIsMTEwOiJib29sX3JlZiIsMTExOiJxaW50OF9yZWYiLDExMjoicXVpbnQ4X3JlZiIsMTE1OiJxaW50MTZfcmVmIiwxMTY6InF1aW50MTZfcmVmIiwxMTM6InFpbnQzMl9yZWYiLDExNDoiYmZsb2F0MTZfcmVmIiwxMjA6InJlc291cmNlX3JlZiIsMTIxOiJ2YXJpYW50X3JlZiJ9O2Z1bmN0aW9uIEtFKG4pe2xldHt0ZW5zb3JEZWJ1Z01vZGU6dCxhcnJheTplfT1uO3N3aXRjaCh0KXtjYXNlIEFvLk5PX1RFTlNPUjppZihudWxsIT09ZSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWRseSByZWNlaXZlZCBub24tbnVsbCBkZWJ1Zy10ZW5zb3ItdmFsdWUgYXJyYXkgdW5kZXIgTk9fVEVOU09SIG1vZGUiKTtyZXR1cm57fTtjYXNlIEFvLkNVUlRfSEVBTFRIOmlmKG51bGw9PT1lfHwyIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBVbmRlciBDVVJUX0hFQUxUSCBtb2RlLCBleHBlY3RlZCBkZWJ1Zy10ZW5zb3ItdmFsdWUgYXJyYXkgdG8gaGF2ZSBsZW5ndGggMiwgYnV0IGdvdCAke0pTT04uc3RyaW5naWZ5KGUpfWApO3JldHVybntoYXNJbmZPck5hTjpCb29sZWFuKGVbMV0pfTtjYXNlIEFvLkNPTkNJU0VfSEVBTFRIOntpZihudWxsPT09ZXx8NSE9PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgVW5kZXIgQ09OQ0lTRV9IRUFMVEggbW9kZSwgZXhwZWN0ZWQgZGVidWctdGVuc29yLXZhbHVlIGFycmF5IHRvIGhhdmUgbGVuZ3RoIDUsIGJ1dCBnb3QgJHtKU09OLnN0cmluZ2lmeShlKX1gKTtsZXQgaT17c2l6ZTplWzFdfTtyZXR1cm4gZVsyXT4wJiYoaS5udW1OZWdhdGl2ZUluZnM9ZVsyXSksZVszXT4wJiYoaS5udW1Qb3NpdGl2ZUluZnM9ZVszXSksZVs0XT4wJiYoaS5udW1OYU5zPWVbNF0pLGl9Y2FzZSBBby5TSEFQRTp7aWYobnVsbD09PWV8fDEwIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBVbmRlciBTSEFQRSBtb2RlLCBleHBlY3RlZCBkZWJ1Zy10ZW5zb3ItdmFsdWUgYXJyYXkgdG8gaGF2ZSBsZW5ndGggMTAsIGJ1dCBnb3QgJHtKU09OLnN0cmluZ2lmeShlKX1gKTtsZXQgaT1lWzJdLHI9ZS5zbGljZSg0LE1hdGgubWluKDQraSxlLmxlbmd0aCkpO3JldHVybiByLmxlbmd0aDxpJiYocj1uZXcgQXJyYXkoaS1yLmxlbmd0aCkuY29uY2F0KHIpKSx7ZHR5cGU6Z3lbZVsxXV0scmFuazppLHNpemU6ZVszXSxzaGFwZTpyfX1jYXNlIEFvLkZVTExfSEVBTFRIOntpZihudWxsPT09ZXx8MTEhPT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYFVuZGVyIEZVTExfSEVBTFRIIG1vZGUsIGV4cGVjdGVkIGRlYnVnLXRlbnNvci12YWx1ZSBhcnJheSB0byBoYXZlIGxlbmd0aCAxMSwgYnV0IGdvdCAke0pTT04uc3RyaW5naWZ5KGUpfWApO2xldCByPXtkdHlwZTpneVtlWzJdXSxyYW5rOmVbM10sc2l6ZTplWzRdfTtyZXR1cm4gZVs1XT4wJiYoci5udW1OZWdhdGl2ZUluZnM9ZVs1XSksZVs2XT4wJiYoci5udW1Qb3NpdGl2ZUluZnM9ZVs2XSksZVs3XT4wJiYoci5udW1OYU5zPWVbN10pLGVbOF0+MCYmKHIubnVtTmVnYXRpdmVGaW5pdGVzPWVbOF0pLGVbOV0+MCYmKHIubnVtWmVyb3M9ZVs5XSksZVsxMF0+MCYmKHIubnVtUG9zaXRpdmVGaW5pdGVzPWVbMTBdKSxyfWNhc2UgQW8uRlVMTF9URU5TT1I6aWYobnVsbCE9PWUpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkbHkgcmVjZWl2ZWQgbm9uLW51bGwgZGVidWctdGVuc29yLXZhbHVlIGFycmF5IHVuZGVyIEZVTExfVEVOU09SIG1vZGUiKTtyZXR1cm57fTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIHRlbnNvckRlYnVnTW9kZTogJHt0fWApfX12YXIgZ049Iltfbmdob3N0LSVDT01QJV0ge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNlM2U1ZTg7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2MwYzBjMDtcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubycsIG1vbm9zcGFjZTtcbiAgICBoZWlnaHQ6IDE0cHg7XG4gICAgbGluZS1oZWlnaHQ6IDE0cHg7XG4gICAgbWFyZ2luOiAwIDJweDtcbiAgICBwYWRkaW5nOiAxcHggM3B4O1xuICAgIHdpZHRoOiBtYXgtY29udGVudDtcbiAgfSI7ZnVuY3Rpb24gTk1lKG4sdCl7MSZuJiZrKDAsImRpdiIsNCl9ZnVuY3Rpb24gTE1lKG4sdCl7aWYoMSZuJiYoZigwLCJkaXYiLDcpKDEsInNwYW4iLDgpLFQoMiwiTmFOIiksZygpLGYoMywic3BhbiIsOSksVCg0KSxnKCkoKSksMiZuKXtsZXQgZT13KDIpO3YoNCksVmUoIlx4ZDciLGUubnVtTmFOcywiIil9fWZ1bmN0aW9uIEJNZShuLHQpe2lmKDEmbiYmKGYoMCwiZGl2Iiw3KSgxLCJzcGFuIiw4KSxUKDIsIi1cdTIyMWUiKSxnKCksZigzLCJzcGFuIiw5KSxUKDQpLGcoKSgpKSwyJm4pe2xldCBlPXcoMik7dig0KSxWZSgiXHhkNyIsZS5udW1OZWdhdGl2ZUluZnMsIiIpfX1mdW5jdGlvbiBWTWUobix0KXtpZigxJm4mJihmKDAsImRpdiIsNykoMSwic3BhbiIsOCksVCgyLCIrXHUyMjFlIiksZygpLGYoMywic3BhbiIsOSksVCg0KSxnKCkoKSksMiZuKXtsZXQgZT13KDIpO3YoNCksVmUoIlx4ZDciLGUubnVtUG9zaXRpdmVJbmZzLCIiKX19ZnVuY3Rpb24gSE1lKG4sdCl7aWYoMSZuJiYoZigwLCJkaXYiLDcpKDEsInNwYW4iLDEwKSxUKDIsIi0iKSxnKCksZigzLCJzcGFuIiw5KSxUKDQpLGcoKSgpKSwyJm4pe2xldCBlPXcoMik7dig0KSxWZSgiXHhkNyIsZS5udW1OZWdhdGl2ZUZpbml0ZXMsIiIpfX1mdW5jdGlvbiB6TWUobix0KXtpZigxJm4mJihmKDAsImRpdiIsNykoMSwic3BhbiIsMTApLFQoMiwiMCIpLGcoKSxmKDMsInNwYW4iLDkpLFQoNCksZygpKCkpLDImbil7bGV0IGU9dygyKTt2KDQpLFZlKCJceGQ3IixlLm51bVplcm9zLCIiKX19ZnVuY3Rpb24gVU1lKG4sdCl7aWYoMSZuJiYoZigwLCJkaXYiLDcpKDEsInNwYW4iLDEwKSxUKDIsIisiKSxnKCksZigzLCJzcGFuIiw5KSxUKDQpLGcoKSgpKSwyJm4pe2xldCBlPXcoMik7dig0KSxWZSgiXHhkNyIsZS5udW1Qb3NpdGl2ZUZpbml0ZXMsIiIpfX1mdW5jdGlvbiBqTWUobix0KXtpZigxJm4mJihmKDAsImRpdiIsNSksUygxLExNZSw1LDEsImRpdiIsNiksUygyLEJNZSw1LDEsImRpdiIsNiksUygzLFZNZSw1LDEsImRpdiIsNiksUyg0LEhNZSw1LDEsImRpdiIsNiksUyg1LHpNZSw1LDEsImRpdiIsNiksUyg2LFVNZSw1LDEsImRpdiIsNiksZygpKSwyJm4pe2xldCBlPXcoKTt2KDEpLGIoIm5nSWYiLHZvaWQgMCE9PWUubnVtTmFOcyYmZS5udW1OYU5zPjApLHYoMSksYigibmdJZiIsdm9pZCAwIT09ZS5udW1OZWdhdGl2ZUluZnMmJmUubnVtTmVnYXRpdmVJbmZzPjApLHYoMSksYigibmdJZiIsdm9pZCAwIT09ZS5udW1Qb3NpdGl2ZUluZnMmJmUubnVtUG9zaXRpdmVJbmZzPjApLHYoMSksYigibmdJZiIsdm9pZCAwIT09ZS5udW1OZWdhdGl2ZUZpbml0ZXMmJmUubnVtTmVnYXRpdmVGaW5pdGVzPjApLHYoMSksYigibmdJZiIsdm9pZCAwIT09ZS5udW1aZXJvcyYmZS5udW1aZXJvcz4wKSx2KDEpLGIoIm5nSWYiLHZvaWQgMCE9PWUubnVtUG9zaXRpdmVGaW5pdGVzJiZlLm51bVBvc2l0aXZlRmluaXRlcz4wKX19dmFyIEdNZT1mdW5jdGlvbihuKXtyZXR1cm5bImNvbnRhaW5lciIsbl19O2Z1bmN0aW9uIFdNZShuLHQpezEmbiYmaygwLCJkZWJ1Zy10ZW5zb3ItZHR5cGUiLDUpLDImbiYmYigiZHR5cGUiLHcoKS5kZWJ1Z1RlbnNvclZhbHVlLmR0eXBlKX1mdW5jdGlvbiBxTWUobix0KXsxJm4mJmsoMCwiZGVidWctdGVuc29yLXJhbmsiLDYpLDImbiYmYigicmFuayIsdygpLmRlYnVnVGVuc29yVmFsdWUucmFuayl9ZnVuY3Rpb24gWE1lKG4sdCl7MSZuJiZrKDAsImRlYnVnLXRlbnNvci1zaGFwZSIsNyksMiZuJiZiKCJzaGFwZSIsdygpLmRlYnVnVGVuc29yVmFsdWUuc2hhcGUpfWZ1bmN0aW9uIFlNZShuLHQpezEmbiYmaygwLCJkZWJ1Zy10ZW5zb3ItaGFzLWluZi1vci1uYW4iLDgpLDImbiYmYigiaGFzSW5mT3JOYU4iLHcoKS5kZWJ1Z1RlbnNvclZhbHVlLmhhc0luZk9yTmFOKX1mdW5jdGlvbiBRTWUobix0KXtpZigxJm4mJmsoMCwiZGVidWctdGVuc29yLW51bWVyaWMtYnJlYWtkb3duIiw5KSwyJm4pe2xldCBlPXcoKTtaaSgic2l6ZSIsZS5kZWJ1Z1RlbnNvclZhbHVlLnNpemUpLGIoIm51bU5lZ2F0aXZlSW5mcyIsZS5kZWJ1Z1RlbnNvclZhbHVlLm51bU5lZ2F0aXZlSW5mcykoIm51bVBvc2l0aXZlSW5mcyIsZS5kZWJ1Z1RlbnNvclZhbHVlLm51bVBvc2l0aXZlSW5mcykoIm51bU5hTnMiLGUuZGVidWdUZW5zb3JWYWx1ZS5udW1OYU5zKSgibnVtTmVnYXRpdmVGaW5pdGVzIixlLmRlYnVnVGVuc29yVmFsdWUubnVtTmVnYXRpdmVGaW5pdGVzKSgibnVtWmVyb3MiLGUuZGVidWdUZW5zb3JWYWx1ZS5udW1aZXJvcykoIm51bVBvc2l0aXZlRmluaXRlcyIsZS5kZWJ1Z1RlbnNvclZhbHVlLm51bVBvc2l0aXZlRmluaXRlcyl9fXZhciBaTWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1siZGVidWctdGVuc29yLWR0eXBlIl1dLGlucHV0czp7ZHR5cGU6ImR0eXBlIn0sZGVjbHM6MSx2YXJzOjEsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJlQoMCksMiZlJiZWZSgiICIsaS5kdHlwZSwiICIpfSxzdHlsZXM6W2dOXX0pLG59KSgpLEtNZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJkZWJ1Zy10ZW5zb3ItcmFuayJdXSxpbnB1dHM6e3Jhbms6InJhbmsifSxkZWNsczoxLHZhcnM6MSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmVCgwKSwyJmUmJlZlKCIgIixpLnJhbmssIkQgIil9LHN0eWxlczpbZ05dfSksbn0pKCksSk1lPSgoKT0+e2NsYXNzIG57Z2V0IHNoYXBlU3RyaW5nKCl7cmV0dXJuIlsiK3RoaXMuc2hhcGUubWFwKGU9PnZvaWQgMD09PWU/Ij8iOlN0cmluZyhlKSkuam9pbigiLCIpKyJdIn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1siZGVidWctdGVuc29yLXNoYXBlIl1dLGlucHV0czp7c2hhcGU6InNoYXBlIn0sZGVjbHM6MSx2YXJzOjEsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJlQoMCksMiZlJiZWZSgiIHNoYXBlOiIsaS5zaGFwZVN0cmluZywiICIpfSxzdHlsZXM6W2dOXX0pLG59KSgpLCRNZT0oKCk9PntjbGFzcyBue2dldCBicmVha2Rvd25FeGlzdHMoKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5udW1OYU5zfHx2b2lkIDAhPT10aGlzLm51bU5lZ2F0aXZlSW5mc3x8dm9pZCAwIT09dGhpcy5udW1Qb3NpdGl2ZUluZnN8fHZvaWQgMCE9PXRoaXMubnVtTmVnYXRpdmVGaW5pdGVzfHx2b2lkIDAhPT10aGlzLm51bVplcm9zfHx2b2lkIDAhPT10aGlzLm51bVBvc2l0aXZlRmluaXRlc319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1siZGVidWctdGVuc29yLW51bWVyaWMtYnJlYWtkb3duIl1dLGlucHV0czp7c2l6ZToic2l6ZSIsbnVtTmFOczoibnVtTmFOcyIsbnVtTmVnYXRpdmVJbmZzOiJudW1OZWdhdGl2ZUluZnMiLG51bVBvc2l0aXZlSW5mczoibnVtUG9zaXRpdmVJbmZzIixudW1OZWdhdGl2ZUZpbml0ZXM6Im51bU5lZ2F0aXZlRmluaXRlcyIsbnVtWmVyb3M6Im51bVplcm9zIixudW1Qb3NpdGl2ZUZpbml0ZXM6Im51bVBvc2l0aXZlRmluaXRlcyJ9LGRlY2xzOjcsdmFyczozLGNvbnN0czpbWzEsInNpemUiXSxbMSwic2l6ZS12YWx1ZSJdLFsiY2xhc3MiLCJicmVhayIsNCwibmdJZiJdLFsiY2xhc3MiLCJicmVha2Rvd24iLDQsIm5nSWYiXSxbMSwiYnJlYWsiXSxbMSwiYnJlYWtkb3duIl0sWyJjbGFzcyIsImNhdGVnb3J5Iiw0LCJuZ0lmIl0sWzEsImNhdGVnb3J5Il0sWzEsImNhdGVnb3J5LXRhZyIsImluZmluaXRlIl0sWzEsImNhdGVnb3J5LWNvdW50Il0sWzEsImNhdGVnb3J5LXRhZyIsImZpbml0ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGYoMCwiZGl2IiwwKSgxLCJzcGFuIiksVCgyLCJzaXplOiIpLGcoKSxmKDMsInNwYW4iLDEpLFQoNCksZygpKCksUyg1LE5NZSwxLDAsImRpdiIsMiksUyg2LGpNZSw3LDYsImRpdiIsMykpLDImZSYmKHYoNCksa3QoaS5zaXplKSx2KDEpLGIoIm5nSWYiLGkuYnJlYWtkb3duRXhpc3RzKSx2KDEpLGIoIm5nSWYiLGkuYnJlYWtkb3duRXhpc3RzKSl9LGRlcGVuZGVuY2llczpbTmVdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTNlNWU4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjYzBjMGMwO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nLCBtb25vc3BhY2U7XG4gICAgICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgICAgICAgbWFyZ2luOiAwIDJweDtcbiAgICAgICAgcGFkZGluZzogMXB4O1xuICAgICAgfVxuICAgICAgLmJyZWFrW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIGZsZXgtYmFzaXM6IDEwMCU7XG4gICAgICAgIHdpZHRoOiAwO1xuICAgICAgfVxuICAgICAgLnNpemVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGhlaWdodDogMTFweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDExcHg7XG4gICAgICAgIG1hcmdpbjogMCAzcHg7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICB9XG4gICAgICAuYnJlYWtkb3duW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMTIpO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBoZWlnaHQ6IDExcHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxMXB4O1xuICAgICAgICBwYWRkaW5nOiAycHg7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICB9XG4gICAgICAuY2F0ZWdvcnlbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMnB4O1xuICAgICAgICBtYXJnaW4tbGVmdDogNHB4O1xuICAgICAgICBtYXJnaW4tdG9wOiAycHg7XG4gICAgICAgIGhlaWd0aDogMTAwJTtcbiAgICAgICAgd2lkdGg6IG1heC1jb250ZW50O1xuICAgICAgfVxuICAgICAgLmNhdGVnb3J5LXRhZ1tfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7XG4gICAgICAgIHBhZGRpbmc6IDAgMnB4O1xuICAgICAgfVxuICAgICAgLmZpbml0ZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYWFhO1xuICAgICAgICBjb2xvcjogI2ZlZmVmZTtcbiAgICAgIH1cbiAgICAgIC5pbmZpbml0ZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTUyNTkyO1xuICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICAgIH0iXX0pLG59KSgpLGV3ZT0oKCk9PntjbGFzcyBue2dldCBpbmZvU3RyaW5nKCl7cmV0dXJuIHRoaXMuaGFzSW5mT3JOYU4/IkhhcyBcdTIyMWUvTmFOIjoiTm8gXHUyMjFlL05hTiJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbImRlYnVnLXRlbnNvci1oYXMtaW5mLW9yLW5hbiJdXSxpbnB1dHM6e2hhc0luZk9yTmFOOiJoYXNJbmZPck5hTiJ9LGRlY2xzOjIsdmFyczo0LGNvbnN0czpbWzMsIm5nQ2xhc3MiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihmKDAsImRpdiIsMCksVCgxKSxnKCkpLDImZSYmKGIoIm5nQ2xhc3MiLFVuKDIsR01lLGkuaGFzSW5mT3JOYU4/Imhhcy1pbmYtb3ItbmFuIjoiIikpLHYoMSksVmUoIiAiLGkuaW5mb1N0cmluZywiICIpKX0sZGVwZW5kZW5jaWVzOlt3bl0sc3R5bGVzOlsiLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTNlNWU4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjYzBjMGMwO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgIGNvbG9yOiAjNjY2NjY2O1xuICAgICAgICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJywgbW9ub3NwYWNlO1xuICAgICAgICBoZWlnaHQ6IDE0cHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxNHB4O1xuICAgICAgICBtYXJnaW46IDAgMnB4O1xuICAgICAgICBwYWRkaW5nOiAxcHggM3B4O1xuICAgICAgICB3aWR0aDogbWF4LWNvbnRlbnQ7XG4gICAgICB9XG4gICAgICAuaGFzLWluZi1vci1uYW5bX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2U1MjU5MjtcbiAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICB9Il19KSxufSkoKSxKRT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJkZWJ1Zy10ZW5zb3ItdmFsdWUiXV0saW5wdXRzOntkZWJ1Z1RlbnNvclZhbHVlOiJkZWJ1Z1RlbnNvclZhbHVlIn0sZGVjbHM6NSx2YXJzOjUsY29uc3RzOltbMywiZHR5cGUiLDQsIm5nSWYiXSxbMywicmFuayIsNCwibmdJZiJdLFszLCJzaGFwZSIsNCwibmdJZiJdLFszLCJoYXNJbmZPck5hTiIsNCwibmdJZiJdLFszLCJzaXplIiwibnVtTmVnYXRpdmVJbmZzIiwibnVtUG9zaXRpdmVJbmZzIiwibnVtTmFOcyIsIm51bU5lZ2F0aXZlRmluaXRlcyIsIm51bVplcm9zIiwibnVtUG9zaXRpdmVGaW5pdGVzIiw0LCJuZ0lmIl0sWzMsImR0eXBlIl0sWzMsInJhbmsiXSxbMywic2hhcGUiXSxbMywiaGFzSW5mT3JOYU4iXSxbMywic2l6ZSIsIm51bU5lZ2F0aXZlSW5mcyIsIm51bVBvc2l0aXZlSW5mcyIsIm51bU5hTnMiLCJudW1OZWdhdGl2ZUZpbml0ZXMiLCJudW1aZXJvcyIsIm51bVBvc2l0aXZlRmluaXRlcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKFMoMCxXTWUsMSwxLCJkZWJ1Zy10ZW5zb3ItZHR5cGUiLDApLFMoMSxxTWUsMSwxLCJkZWJ1Zy10ZW5zb3ItcmFuayIsMSksUygyLFhNZSwxLDEsImRlYnVnLXRlbnNvci1zaGFwZSIsMiksUygzLFlNZSwxLDEsImRlYnVnLXRlbnNvci1oYXMtaW5mLW9yLW5hbiIsMyksUyg0LFFNZSwxLDcsImRlYnVnLXRlbnNvci1udW1lcmljLWJyZWFrZG93biIsNCkpLDImZSYmKGIoIm5nSWYiLHZvaWQgMCE9PWkuZGVidWdUZW5zb3JWYWx1ZS5kdHlwZSksdigxKSxiKCJuZ0lmIix2b2lkIDAhPT1pLmRlYnVnVGVuc29yVmFsdWUucmFuayksdigxKSxiKCJuZ0lmIix2b2lkIDAhPT1pLmRlYnVnVGVuc29yVmFsdWUuc2hhcGUpLHYoMSksYigibmdJZiIsdm9pZCAwIT09aS5kZWJ1Z1RlbnNvclZhbHVlLmhhc0luZk9yTmFOKSx2KDEpLGIoIm5nSWYiLHZvaWQgMCE9PWkuZGVidWdUZW5zb3JWYWx1ZS5zaXplKSl9LGRlcGVuZGVuY2llczpbTmUsWk1lLGV3ZSwkTWUsS01lLEpNZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LXdyYXA6IG5vd3JhcDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgICAgIH1cbiAgICAgIGRlYnVnLXRlbnNvci1udW1lcmljLWJyZWFrZG93bltfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICB9Il19KSxufSkoKTtmdW5jdGlvbiB0d2Uobix0KXsxJm4mJihmKDAsImRpdiIsMTIpLFQoMSwiXHUyNWI2IiksZygpKX12YXIgbndlPWZ1bmN0aW9uKG4sdCl7cmV0dXJue3RlbnNvckRlYnVnTW9kZTpuLGFycmF5OnR9fTtmdW5jdGlvbiBpd2Uobix0KXtpZigxJm4mJmsoMCwiZGVidWctdGVuc29yLXZhbHVlIiwxNyksMiZuKXtsZXQgZT13KDIpLiRpbXBsaWNpdCxpPXcoMik7YigiZGVidWdUZW5zb3JWYWx1ZSIsaS5wYXJzZURlYnVnVGVuc29yVmFsdWUoU28oMSxud2UsaS5ncmFwaEV4ZWN1dGlvbkRhdGFbZV0udGVuc29yX2RlYnVnX21vZGUsaS5ncmFwaEV4ZWN1dGlvbkRhdGFbZV0uZGVidWdfdGVuc29yX3ZhbHVlKSkpfX1mdW5jdGlvbiByd2Uobix0KXtpZigxJm4pe2xldCBlPVRlKCk7ZigwLCJkaXYiKSgxLCJkaXYiLDEzKSgyLCJidXR0b24iLDE0KSxBKCJjbGljayIsZnVuY3Rpb24oKXtuZShlKTtsZXQgcj13KCkuJGltcGxpY2l0LG89dygyKTtyZXR1cm4gaWUoby5vblRlbnNvck5hbWVDbGljay5lbWl0KHtpbmRleDpyLGdyYXBoX2lkOm8uZ3JhcGhFeGVjdXRpb25EYXRhW3JdLmdyYXBoX2lkLG9wX25hbWU6by5ncmFwaEV4ZWN1dGlvbkRhdGFbcl0ub3BfbmFtZX0pKX0pLFQoMyksZygpLGYoNCwiZGl2IiwxNSksVCg1KSxnKCkoKSxTKDYsaXdlLDEsNCwiZGVidWctdGVuc29yLXZhbHVlIiwxNiksZygpfWlmKDImbil7bGV0IGU9dygpLiRpbXBsaWNpdCxpPXcoMik7digyKSxaaSgidGl0bGUiLGkuZ2V0VGVuc29yTmFtZShlKSksdigxKSxWZSgiICIsaS5nZXRUZW5zb3JOYW1lKGUpLCIgIiksdigyKSxrdChpLmdyYXBoRXhlY3V0aW9uRGF0YVtlXS5vcF90eXBlKSx2KDEpLGIoIm5nSWYiLG51bGwhPT1pLmdyYXBoRXhlY3V0aW9uRGF0YVtlXS5kZWJ1Z190ZW5zb3JfdmFsdWUpfX1mdW5jdGlvbiBvd2Uobix0KXsxJm4mJihmKDAsImRpdiIsMTgpLFQoMSwiIExvYWRpbmcuLi4gIiksZygpKX12YXIgYXdlPWZ1bmN0aW9uKG4pe3JldHVybnsiaW5wdXQtb2YtZm9jdXMiOm59fTtmdW5jdGlvbiBzd2Uobix0KXtpZigxJm4mJihmKDAsImRpdiIsNSkoMSwiZGl2Iiw2KSgyLCJkaXYiLDcpLFMoMyx0d2UsMiwwLCJkaXYiLDgpLFQoNCksZygpLFMoNSxyd2UsNyw0LCJkaXYiLDkpLFMoNixvd2UsMiwwLCJuZy10ZW1wbGF0ZSIsMTAsMTEsanQpLGcoKSgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9c3QoNykscj13KDIpO3YoMSksYigibmdDbGFzcyIsVW4oNSxhd2Usci5pc0lucHV0T2ZGb2N1cyhlKSkpLHYoMiksYigibmdJZiIsZT09PXIuZm9jdXNJbmRleCksdigxKSxWZSgiICIsZSwiICIpLHYoMSksYigibmdJZiIsci5ncmFwaEV4ZWN1dGlvbkRhdGFbZV0pKCJuZ0lmRWxzZSIsaSl9fWZ1bmN0aW9uIGx3ZShuLHQpe2lmKDEmbil7bGV0IGU9VGUoKTtmKDAsImNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCIsMyksQSgic2Nyb2xsZWRJbmRleENoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIG5lKGUpLGllKHcoKS5vblNjcm9sbGVkSW5kZXhDaGFuZ2UuZW1pdChyKSl9KSxTKDEsc3dlLDgsNywiZGl2Iiw0KSxnKCl9aWYoMiZuKXtsZXQgZT13KCk7digxKSxiKCJjZGtWaXJ0dWFsRm9yT2YiLGUuZ3JhcGhFeGVjdXRpb25JbmRpY2VzKX19dmFyIGJZPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLm9uU2Nyb2xsZWRJbmRleENoYW5nZT1uZXcgRix0aGlzLm9uVGVuc29yTmFtZUNsaWNrPW5ldyBGLHRoaXMucGFyc2VEZWJ1Z1RlbnNvclZhbHVlPUtFLHRoaXMuVEVTVF9PTkxZPXtnZXRWaWV3UG9ydDooKT0+dGhpcy52aWV3UG9ydH19bmdPbkNoYW5nZXMoZSl7aWYodGhpcy52aWV3UG9ydCYmZS5mb2N1c0luZGV4JiZudWxsIT09ZS5mb2N1c0luZGV4LmN1cnJlbnRWYWx1ZSl7bGV0IGk9dGhpcy52aWV3UG9ydC5nZXRSZW5kZXJlZFJhbmdlKCkscj1lLmZvY3VzSW5kZXguY3VycmVudFZhbHVlLG89TWF0aC5yb3VuZCgoaS5lbmQtaS5zdGFydCkvMyksYT1NYXRoLm1heChyLW8sMCk7dGhpcy52aWV3UG9ydC5zY3JvbGxUb0luZGV4KGEscj49aS5zdGFydCYmcjxpLmVuZD8ic21vb3RoIjp2b2lkIDApfX1nZXRUZW5zb3JOYW1lKGUpe3JldHVybmAke3RoaXMuZ3JhcGhFeGVjdXRpb25EYXRhW2VdLm9wX25hbWV9OiR7dGhpcy5ncmFwaEV4ZWN1dGlvbkRhdGFbZV0ub3V0cHV0X3Nsb3R9YH1pc0lucHV0T2ZGb2N1cyhlKXtyZXR1cm4gbnVsbCE9PXRoaXMuZm9jdXNJbnB1dEluZGljZXMmJnRoaXMuZm9jdXNJbnB1dEluZGljZXMuaW5jbHVkZXMoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbImdyYXBoLWV4ZWN1dGlvbnMtY29tcG9uZW50Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmVWUoZ2csNSksMiZlKXtsZXQgcjtiZShyPXZlKCkpJiYoaS52aWV3UG9ydD1yLmZpcnN0KX19LGlucHV0czp7bnVtR3JhcGhFeGVjdXRpb25zOiJudW1HcmFwaEV4ZWN1dGlvbnMiLGdyYXBoRXhlY3V0aW9uRGF0YToiZ3JhcGhFeGVjdXRpb25EYXRhIixncmFwaEV4ZWN1dGlvbkluZGljZXM6ImdyYXBoRXhlY3V0aW9uSW5kaWNlcyIsZm9jdXNJbmRleDoiZm9jdXNJbmRleCIsZm9jdXNJbnB1dEluZGljZXM6ImZvY3VzSW5wdXRJbmRpY2VzIn0sb3V0cHV0czp7b25TY3JvbGxlZEluZGV4Q2hhbmdlOiJvblNjcm9sbGVkSW5kZXhDaGFuZ2UiLG9uVGVuc29yTmFtZUNsaWNrOiJvblRlbnNvck5hbWVDbGljayJ9LGZlYXR1cmVzOltxdF0sZGVjbHM6NCx2YXJzOjIsY29uc3RzOltbMSwiZ3JhcGgtZXhlY3V0aW9ucy1jb250YWluZXIiXSxbMSwiZ3JhcGgtZXhlY3V0aW9ucy10aXRsZSJdLFsiaXRlbVNpemUiLCIzOCIsImNsYXNzIiwiZ3JhcGgtZXhlY3V0aW9ucy12aWV3cG9ydCIsMywic2Nyb2xsZWRJbmRleENoYW5nZSIsNCwibmdJZiJdLFsiaXRlbVNpemUiLCIzOCIsMSwiZ3JhcGgtZXhlY3V0aW9ucy12aWV3cG9ydCIsMywic2Nyb2xsZWRJbmRleENoYW5nZSJdLFsiY2xhc3MiLCJ0ZW5zb3ItY29udGFpbmVyIiw0LCJjZGtWaXJ0dWFsRm9yIiwiY2RrVmlydHVhbEZvck9mIl0sWzEsInRlbnNvci1jb250YWluZXIiXSxbMSwidGVuc29yLWl0ZW0iLDMsIm5nQ2xhc3MiXSxbMSwiZ3JhcGgtZXhlY3V0aW9uLWluZGV4Il0sWyJjbGFzcyIsImdyYXBoLWV4ZWN1dGlvbi1mb2N1cyIsNCwibmdJZiJdLFs0LCJuZ0lmIiwibmdJZkVsc2UiXSxbImNsYXNzIiwidGVuc29yLWl0ZW0iXSxbImRhdGFMb2FkaW5nIiwiIl0sWzEsImdyYXBoLWV4ZWN1dGlvbi1mb2N1cyJdLFsxLCJ0ZW5zb3ItbmFtZS1hbmQtb3AtdHlwZSJdLFsxLCJ0ZW5zb3ItbmFtZSIsMywidGl0bGUiLCJjbGljayJdLFsxLCJvcC10eXBlIl0sWzMsImRlYnVnVGVuc29yVmFsdWUiLDQsIm5nSWYiXSxbMywiZGVidWdUZW5zb3JWYWx1ZSJdLFsxLCJsb2FkaW5nLXNwaW5uZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihmKDAsImRpdiIsMCkoMSwiZGl2IiwxKSxUKDIpLGcoKSxTKDMsbHdlLDIsMSwiY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IiwyKSxnKCkpLDImZSYmKHYoMiksVmUoIiBHcmFwaCBFeGVjdXRpb25zICgiLGkubnVtR3JhcGhFeGVjdXRpb25zLCIpICIpLHYoMSksYigibmdJZiIsbnVsbCE9PWkubnVtR3JhcGhFeGVjdXRpb25zJiZpLm51bUdyYXBoRXhlY3V0aW9ucz4wKSl9LGRlcGVuZGVuY2llczpbd24sTmUsSkUsUTcsWjcsZ2ddLHN0eWxlczpbJy5ncmFwaC1leGVjdXRpb25zLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtoZWlnaHQ6MTAwJTttYXJnaW4tbGVmdDo4cHg7cGFkZGluZy1sZWZ0OjEwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyYXBoLWV4ZWN1dGlvbnMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyYXBoLWV4ZWN1dGlvbnMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoxcHggc29saWQgIzU1NX0uZ3JhcGgtZXhlY3V0aW9uLWZvY3VzW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9ja30uZ3JhcGgtZXhlY3V0aW9uLWluZGV4W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmctcmlnaHQ6NHB4O3RleHQtYWxpZ246cmlnaHQ7d2lkdGg6NDBweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JhcGgtZXhlY3V0aW9uLWluZGV4W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyYXBoLWV4ZWN1dGlvbi1pbmRleFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LmdyYXBoLWV4ZWN1dGlvbnMtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2JveC1zaGFkb3c6MCA1cHggM3B4IC0zcHggI2NjYztwYWRkaW5nLWJvdHRvbTo1cHh9LmdyYXBoLWV4ZWN1dGlvbnMtdmlld3BvcnRbX25nY29udGVudC0lQ09NUCVde2ZsZXgtZ3JvdzoxO2ZvbnQtc2l6ZToxMnB4O3dpZHRoOjEwMCU7b3ZlcmZsb3cteDpoaWRkZW59LmlucHV0LW9mLWZvY3VzW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmYwOTl9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmlucHV0LW9mLWZvY3VzW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmlucHV0LW9mLWZvY3VzW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNlNjUxMDB9LmxvYWRpbmctc3Bpbm5lcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2t9Lm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2VjZWZmMTtib3JkZXI6MXB4IHNvbGlkICNlYmViZWI7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC1mYW1pbHk6IlJvYm90byBNb25vIixtb25vc3BhY2U7Zm9udC1zaXplOjEwcHg7aGVpZ2h0OjE0cHg7bGluZS1oZWlnaHQ6MTRweDtwYWRkaW5nOjFweCAzcHg7d2lkdGg6bWF4LWNvbnRlbnQ7ZGlyZWN0aW9uOnJ0bDtkaXNwbGF5OmJsb2NrfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQgIzU1NX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiM0NTVhNjR9LnRlbnNvci1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9LnRlbnNvci1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6bm93cmFwO2hlaWdodDozOHB4O2xpbmUtaGVpZ2h0OjM4cHg7dGV4dC1hbGlnbjpsZWZ0O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aGl0ZS1zcGFjZTpub3dyYXA7d2lkdGg6MTAwJX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAudGVuc29yLWl0ZW1bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAudGVuc29yLWl0ZW1bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9LnRlbnNvci1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCk7Ym9yZGVyOm5vbmU7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOmluaGVyaXQ7Y3Vyc29yOnBvaW50ZXI7ZGlyZWN0aW9uOnJ0bDtkaXNwbGF5OmJsb2NrO2hlaWdodDoxNnB4O2xpbmUtaGVpZ2h0OjE2cHg7bWFyZ2luOjJweCAwIDFweDttYXgtd2lkdGg6Y2FsYygxMDAlIC0gMnB4KTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowIDJweDt0ZXh0LWFsaWduOnJpZ2h0O3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9LnRlbnNvci1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1c3tvdXRsaW5lOjFweCBzb2xpZCAjYzZjYWQxfS50ZW5zb3ItbmFtZS1hbmQtb3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17ZGlyZWN0aW9uOnJ0bDtkaXNwbGF5OmlubGluZS1ibG9jaztvdmVyZmxvdzpoaWRkZW47cGFkZGluZy1yaWdodDo4cHg7dGV4dC1hbGlnbjpyaWdodDt3aWR0aDoyNDBweH1kZWJ1Zy10ZW5zb3ItdmFsdWVbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjoycHggMH0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHZZPSgoKT0+e2NsYXNzIG57b25TY3JvbGxlZEluZGV4Q2hhbmdlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goa2coe2luZGV4OmV9KSl9b25UZW5zb3JOYW1lQ2xpY2soZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChPZyhlKSl9Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMubnVtR3JhcGhFeGVjdXRpb25zJD10aGlzLnN0b3JlLnBpcGUodW4obXkpKSx0aGlzLmdyYXBoRXhlY3V0aW9uRGF0YSQ9dGhpcy5zdG9yZS5waXBlKHVuKHNOKSksdGhpcy5ncmFwaEV4ZWN1dGlvbkluZGljZXMkPXRoaXMuc3RvcmUucGlwZSh1bihXKG15LGk9PjA9PT1pP251bGw6QXJyYXkuZnJvbSh7bGVuZ3RoOml9KS5tYXAoKHIsbyk9Pm8pKSkpLHRoaXMuZm9jdXNJbmRleCQ9dGhpcy5zdG9yZS5waXBlKHVuKGxOKSksdGhpcy5mb2N1c0lucHV0SW5kaWNlcyQ9dGhpcy5zdG9yZS5waXBlKHVuKGFZKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoSWUpKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12Mi1ncmFwaC1leGVjdXRpb25zIl1dLGRlY2xzOjYsdmFyczoxNSxjb25zdHM6W1szLCJudW1HcmFwaEV4ZWN1dGlvbnMiLCJncmFwaEV4ZWN1dGlvbkRhdGEiLCJncmFwaEV4ZWN1dGlvbkluZGljZXMiLCJmb2N1c0luZGV4IiwiZm9jdXNJbnB1dEluZGljZXMiLCJvblNjcm9sbGVkSW5kZXhDaGFuZ2UiLCJvblRlbnNvck5hbWVDbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGYoMCwiZ3JhcGgtZXhlY3V0aW9ucy1jb21wb25lbnQiLDApLEEoIm9uU2Nyb2xsZWRJbmRleENoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25TY3JvbGxlZEluZGV4Q2hhbmdlKG8pfSkoIm9uVGVuc29yTmFtZUNsaWNrIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblRlbnNvck5hbWVDbGljayhvKX0pLFUoMSwiYXN5bmMiKSxVKDIsImFzeW5jIiksVSgzLCJhc3luYyIpLFUoNCwiYXN5bmMiKSxVKDUsImFzeW5jIiksZygpKSwyJmUmJmIoIm51bUdyYXBoRXhlY3V0aW9ucyIsRygxLDUsaS5udW1HcmFwaEV4ZWN1dGlvbnMkKSkoImdyYXBoRXhlY3V0aW9uRGF0YSIsRygyLDcsaS5ncmFwaEV4ZWN1dGlvbkRhdGEkKSkoImdyYXBoRXhlY3V0aW9uSW5kaWNlcyIsRygzLDksaS5ncmFwaEV4ZWN1dGlvbkluZGljZXMkKSkoImZvY3VzSW5kZXgiLEcoNCwxMSxpLmZvY3VzSW5kZXgkKSkoImZvY3VzSW5wdXRJbmRpY2VzIixHKDUsMTMsaS5mb2N1c0lucHV0SW5kaWNlcyQpKX0sZGVwZW5kZW5jaWVzOltiWSxjdF0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCk7ZnVuY3Rpb24gdXdlKG4sdCl7MSZuJiYoZigwLCJzcGFuIiksVCgxLCIgT3V0cHV0ICIpLGcoKSl9ZnVuY3Rpb24gcHdlKG4sdCl7MSZuJiYoZigwLCJzcGFuIiksVCgxLCIgSW5wdXQgIiksZygpKX1mdW5jdGlvbiBod2Uobix0KXtpZigxJm4mJihmKDAsImRpdiIsNikoMSwic3BhbiIsNyksUygyLHV3ZSwyLDAsInNwYW4iLDgpLFMoMyxwd2UsMiwwLCJzcGFuIiw4KSxnKCksVCg0KSxnKCkpLDImbil7bGV0IGU9dygpO3YoMSksYigibmdTd2l0Y2giLGUua2luZCksdigxKSxiKCJuZ1N3aXRjaENhc2UiLCJpbnB1dCIpLHYoMSksYigibmdTd2l0Y2hDYXNlIiwiY29uc3VtZXIiKSx2KDEpLFZlKCIgc2xvdDogIixlLnNsb3QsIiAiKX19ZnVuY3Rpb24gbXdlKG4sdCl7aWYoMSZuJiYoZigwLCJkaXYiLDkpLFQoMSksZygpKSwyJm4pe2xldCBlPXcoKTt2KDEpLFZlKCIgIixlLm9wRGF0YS5vcF90eXBlLCIgIil9fWZ1bmN0aW9uIGZ3ZShuLHQpezEmbiYmKGYoMCwic3BhbiIsMTApLFQoMSwiIChPcCBpbmZvIHVuYXZhaWxhYmxlLikgIiksZygpKX12YXIgZ3dlPWZ1bmN0aW9uKG4pe3JldHVybltuXX0seVk9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMub25PcE5hbWVDbGljaz1uZXcgRn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1siZ3JhcGgtb3AiXV0saW5wdXRzOntraW5kOiJraW5kIixvcE5hbWU6Im9wTmFtZSIsc2xvdDoic2xvdCIsb3BEYXRhOiJvcERhdGEifSxvdXRwdXRzOntvbk9wTmFtZUNsaWNrOiJvbk9wTmFtZUNsaWNrIn0sZGVjbHM6OSx2YXJzOjcsY29uc3RzOltbMSwib3AtY29udGFpbmVyIl0sWzEsImlucHV0LXRlbnNvci1uYW1lIl0sWzEsIm9wLW5hbWUiLDMsIm5nQ2xhc3MiLCJjbGljayJdLFsiY2xhc3MiLCJzbG90Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm9wLXR5cGUiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsib3BJbmZvTWlzc2luZyIsIiJdLFsxLCJzbG90Il0sWzMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJvcC10eXBlIl0sWzEsIm9wLWluZm8tbWlzc2luZyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGYoMCwiYnV0dG9uIiwwKSgxLCJkaXYiLDEpKDIsImJ1dHRvbiIsMiksQSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25PcE5hbWVDbGljay5lbWl0KHtvcF9uYW1lOmkub3BOYW1lfSl9KSxmKDMsInNwYW4iKSxUKDQpLGcoKSgpLFMoNSxod2UsNSw0LCJkaXYiLDMpLGcoKSxTKDYsbXdlLDIsMSwiZGl2Iiw0KSxTKDcsZndlLDIsMCwibmctdGVtcGxhdGUiLG51bGwsNSxqdCksZygpKSwyJmUpe2xldCByPXN0KDgpO3YoMiksYigibmdDbGFzcyIsVW4oNSxnd2UsInNlbGYiPT09aS5raW5kPyJzZWxmLW9wLW5hbWUiOiIiKSksdigyKSxrdChpLm9wTmFtZSksdigxKSxiKCJuZ0lmIiwic2VsZiIhPT1pLmtpbmQpLHYoMSksYigibmdJZiIsdm9pZCAwIT09aS5vcERhdGEpKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W3duLE5lLG1yLGtyXSxzdHlsZXM6Wycub3AtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm9wLW5hbWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOmluaGVyaXQ7YmFja2dyb3VuZC1jb2xvcjppbmhlcml0fS5vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoycHggc29saWQgI2ViZWJlYjtib3JkZXItcmFkaXVzOjRweDtib3gtc2hhZG93OjFweCAzcHggI2VlZTtjdXJzb3I6cG9pbnRlcjttYXJnaW46MCA1cHggMCAwO3BhZGRpbmc6MnB4IDZweDt0ZXh0LWFsaWduOnJpZ2h0O3dpZHRoOjIwMHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAub3AtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MnB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9wLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JveC1zaGFkb3c6MXB4IDNweCAjNzU3NTc1fS5vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3Vze291dGxpbmU6MH0ub3AtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpob3Zlcntib3JkZXI6MnB4IHNvbGlkICNmZmQzYjJ9Lm9wLWluZm8tbWlzc2luZ1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6Z3JheX0ub3AtbmFtZVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOm5vbmU7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7b3ZlcmZsb3ctd3JhcDphbnl3aGVyZTtwYWRkaW5nOjA7dGV4dC1hbGlnbjpyaWdodDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO3doaXRlLXNwYWNlOnByZS13cmFwfS5vcC1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1c3tvdXRsaW5lOjB9Lm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2VjZWZmMTtib3JkZXI6MXB4IHNvbGlkICNlYmViZWI7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC1mYW1pbHk6IlJvYm90byBNb25vIixtb25vc3BhY2U7Zm9udC1zaXplOjEwcHg7aGVpZ2h0OjE0cHg7bGluZS1oZWlnaHQ6MTRweDtwYWRkaW5nOjFweCAzcHg7d2lkdGg6bWF4LWNvbnRlbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXRvcDozcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzQ1NWE2NH0uc2VsZi1vcC1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpib2xkO3RleHQtZGVjb3JhdGlvbjpub25lfS5zbG90W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zbG90W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNsb3RbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfSddfSksbn0pKCk7ZnVuY3Rpb24gYndlKG4sdCl7aWYoMSZuKXtsZXQgZT1UZSgpO2YoMCwiZGl2IiwxMykoMSwiZGl2IiwxNCksVCgyKSxnKCksZigzLCJncmFwaC1vcCIsMTUpLEEoIm9uT3BOYW1lQ2xpY2siLGZ1bmN0aW9uKHIpe25lKGUpO2xldCBvPXcoMyk7cmV0dXJuIGllKG8ub25HcmFwaE9wTmF2aWdhdGUuZW1pdCh7b3BfbmFtZTpyLm9wX25hbWUsZ3JhcGhfaWQ6by5ncmFwaElkfSkpfSksZygpKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXQuaW5kZXg7digyKSxWZSgiSW5wdXQgc2xvdCAiLGksIjoiKSx2KDEpLGIoImtpbmQiLCJpbnB1dCIpKCJvcE5hbWUiLGUub3BfbmFtZSkoInNsb3QiLGUub3V0cHV0X3Nsb3QpKCJvcERhdGEiLGUuZGF0YSl9fWZ1bmN0aW9uIHZ3ZShuLHQpe2lmKDEmbiYmKGYoMCwiZGl2IiwxMSkoMSwiZGl2IiksUygyLGJ3ZSw0LDUsImRpdiIsMTIpLGcoKSgpKSwyJm4pe2xldCBlPXcoMik7digyKSxiKCJuZ0Zvck9mIixlLmlucHV0T3BzKX19ZnVuY3Rpb24geXdlKG4sdCl7MSZuJiYoZigwLCJkaXYiLDE2KSxUKDEsIiAoVGhpcyBvcCBoYXMgbm8gaW5wdXQgdGVuc29yLikgIiksZygpKX1mdW5jdGlvbiB4d2Uobix0KXtpZigxJm4pe2xldCBlPVRlKCk7ZigwLCJkaXYiLDIzKSgxLCJncmFwaC1vcCIsMTUpLEEoIm9uT3BOYW1lQ2xpY2siLGZ1bmN0aW9uKHIpe25lKGUpO2xldCBvPXcoNCk7cmV0dXJuIGllKG8ub25HcmFwaE9wTmF2aWdhdGUuZW1pdCh7b3BfbmFtZTpyLm9wX25hbWUsZ3JhcGhfaWQ6by5ncmFwaElkfSkpfSksZygpKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdDt2KDEpLGIoImtpbmQiLCJjb25zdW1lciIpKCJvcE5hbWUiLGUub3BfbmFtZSkoInNsb3QiLGUuaW5wdXRfc2xvdCkoIm9wRGF0YSIsZS5kYXRhKX19ZnVuY3Rpb24gQ3dlKG4sdCl7aWYoMSZuJiYoZigwLCJkaXYiLDE5KSgxLCJkaXYiLDIwKSxUKDIpLGYoMywic3BhbiIpLFhNKDQsMjEpLGcoKSxUKDUsIikgIiksZygpLFMoNix4d2UsMiw0LCJkaXYiLDIyKSxnKCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT10LmluZGV4O3YoMiksbHUoIiBPdXRwdXQgc2xvdCAiLGksIjogKCIsZS5sZW5ndGgsIiAiKSx2KDIpLHZiKGUubGVuZ3RoKSxZTSg0KSx2KDIpLGIoIm5nRm9yT2YiLGUpfX1mdW5jdGlvbiBNd2Uobix0KXtpZigxJm4mJihmKDAsImRpdiIsMTcpKDEsImRpdiIpLFMoMixDd2UsNyw0LCJkaXYiLDE4KSxnKCkoKSksMiZuKXtsZXQgZT13KDIpO3YoMiksYigibmdGb3JPZiIsZS5jb25zdW1lck9wcyl9fWZ1bmN0aW9uIHd3ZShuLHQpe2lmKDEmbiYmKGYoMCwiZGl2IiwyNCksVCgxKSxmKDIsInNwYW4iKSxYTSgzLDI1KSxnKCksVCg0LCIgYW5kIG5vIGNvbnN1bWVyLikgIiksZygpKSwyJm4pe2xldCBlPXcoMik7digxKSxWZSgiIChUaGlzIG9wIGhhcyAiLGUub3BJbmZvLmNvbnN1bWVycy5sZW5ndGgsIiBvdXRwdXQgIiksdigyKSx2YihlLm9wSW5mby5jb25zdW1lcnMubGVuZ3RoKSxZTSgzKX19ZnVuY3Rpb24gU3dlKG4sdCl7aWYoMSZuKXtsZXQgZT1UZSgpO2YoMCwiZGl2IiksUygxLHZ3ZSwzLDEsImRpdiIsNCksUygyLHl3ZSwyLDAsIm5nLXRlbXBsYXRlIixudWxsLDUsanQpLGYoNCwiZGl2Iiw2KSg1LCJkaXYiLDcpLFQoNiwiT3A6IiksZygpLGYoNywiZ3JhcGgtb3AiLDgpLEEoIm9uT3BOYW1lQ2xpY2siLGZ1bmN0aW9uKHIpe25lKGUpO2xldCBvPXcoKTtyZXR1cm4gaWUoby5vbkdyYXBoT3BOYXZpZ2F0ZS5lbWl0KHtvcF9uYW1lOnIub3BfbmFtZSxncmFwaF9pZDpvLmdyYXBoSWR9KSl9KSxnKCkoKSxTKDgsTXdlLDMsMSwiZGl2Iiw5KSxTKDksd3dlLDUsMiwibmctdGVtcGxhdGUiLG51bGwsMTAsanQpLGcoKX1pZigyJm4pe2xldCBlPXN0KDMpLGk9c3QoMTApLHI9dygpO3YoMSksYigibmdJZiIsci5pbnB1dE9wcy5sZW5ndGg+MCkoIm5nSWZFbHNlIixlKSx2KDYpLGIoImtpbmQiLCJzZWxmIikoIm9wTmFtZSIsci5vcEluZm8ub3BfbmFtZSkoIm9wRGF0YSIsci5vcEluZm8pLHYoMSksYigibmdJZiIsci50b3RhbE51bUNvbnN1bWVycz4wKSgibmdJZkVsc2UiLGkpfX1mdW5jdGlvbiBFd2Uobix0KXsxJm4mJihmKDAsInNwYW4iLDI2KSxUKDEsIiAoT3AgaW5mbyB1bmF2YWlsYWJsZS4pICIpLGcoKSl9ZnVuY3Rpb24gVHdlKG4sdCl7MSZuJiYoZigwLCJkaXYiLDI3KSxUKDEsIiBObyBncmFwaCBvcCBzZWxlY3RlZC4gQ2xpY2sgYSB0ZW5zb3IgbmFtZSBpbiB0aGUgR3JhcGggRXhlY3V0aW9ucyB0YWJsZSB0byB2aWV3IHRoZSBuZWlnaGJvcmhvb2Qgb2YgdGhlIHRlbnNvcidzIG9wIGluIGl0cyBncmFwaC4gIiksZygpKX12YXIgeFk9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMub25HcmFwaE9wTmF2aWdhdGU9bmV3IEZ9Z2V0IGdyYXBoSWQoKXtyZXR1cm4gdGhpcy5vcEluZm8uZ3JhcGhfaWRzW3RoaXMub3BJbmZvLmdyYXBoX2lkcy5sZW5ndGgtMV19Z2V0IHRvdGFsTnVtQ29uc3VtZXJzKCl7cmV0dXJuIHRoaXMuY29uc3VtZXJPcHMucmVkdWNlKChlLGkpPT5lK2kubGVuZ3RoLDApfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJncmFwaC1jb21wb25lbnQiXV0saW5wdXRzOntvcEluZm86Im9wSW5mbyIsaW5wdXRPcHM6ImlucHV0T3BzIixjb25zdW1lck9wczoiY29uc3VtZXJPcHMifSxvdXRwdXRzOntvbkdyYXBoT3BOYXZpZ2F0ZToib25HcmFwaE9wTmF2aWdhdGUifSxkZWNsczo5LHZhcnM6Mixjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdCxlLGkscjtyZXR1cm4gdD0kbG9jYWxpemVgOuKQn2ZlNTVmOWIxOTNlYTIwYWFlNWI1NjM1ZTY4ZDkzODY1MDM4NDc3NDbikJ80OTU1MTMzNzQwODQxMjk5ODUxOntWQVJfUExVUkFMLCBwbHVyYWwsID0wIHtjb25zdW1lcn0gPTEge2NvbnN1bWVyfSBvdGhlciB7Y29uc3VtZXJzfX1gLHQ9UU0odCx7VkFSX1BMVVJBTDoiXHVmZmZkMFx1ZmZmZCJ9KSxlPSRsb2NhbGl6ZWA64pCfYmFhNDYwZTJmMmI4NTdlMjYyOTJiMjQ2ZmMxOGFlMGVhOWI1ZTUzN+KQnzU1NTYzNDAzNDM4NTAxNjU1MTY6ICR7dH06SUNVOmAsaT0kbG9jYWxpemVgOuKQnzZhYTc1ZjYyN2UwZGMxNjE1MGVmNDQ4NDY0ZTBjODU3YWFhMGRjMTjikJ81MTU2NzEyOTM1MTUwNTg2ODc4OntWQVJfUExVUkFMLCBwbHVyYWwsID0wIHt0ZW5zb3J9ID0xIHt0ZW5zb3J9IG90aGVyIHt0ZW5zb3JzfX1gLGk9UU0oaSx7VkFSX1BMVVJBTDoiXHVmZmZkMFx1ZmZmZCJ9KSxyPSRsb2NhbGl6ZWA64pCfODkzNDc2YzJjNDIxY2VlNDc2NjNjOTczMmZhNDFhNzUwZDNhNzNkZuKQnzI0NjA2NzA1MzczNTE2MjYzNDogJHtpfTpJQ1U6YCxbWzEsImdyYXBoLXN0cnVjdHVyZS1jb250YWluZXIiXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJvcEluZm9NaXNzaW5nIiwiIl0sWyJub09wRm9jdXNlZCIsIiJdLFsiY2xhc3MiLCJpbnB1dHMtY29udGFpbmVyIiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbIm5vSW5wdXRzIiwiIl0sWzEsInNlbGYtb3AtY29udGFpbmVyIl0sWzEsInNlbGYtb3AtaGVhZGVyIl0sWzMsImtpbmQiLCJvcE5hbWUiLCJvcERhdGEiLCJvbk9wTmFtZUNsaWNrIl0sWyJjbGFzcyIsImNvbnN1bWVycy1jb250YWluZXIiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9Db25zdW1lcnMiLCIiXSxbMSwiaW5wdXRzLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJpbnB1dC1vcC1zZWN0aW9uIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiaW5wdXQtb3Atc2VjdGlvbiJdLFsxLCJpbnB1dC1zbG90LWhlYWRlciJdLFszLCJraW5kIiwib3BOYW1lIiwic2xvdCIsIm9wRGF0YSIsIm9uT3BOYW1lQ2xpY2siXSxbMSwiaW5wdXRzLWNvbnRhaW5lciIsIm5vLWlucHV0cy1pbmRpY2F0b3IiXSxbMSwiY29uc3VtZXJzLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJzbG90LWNvbnN1bWVycy1jb250YWluZXIiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJzbG90LWNvbnN1bWVycy1jb250YWluZXIiXSxbMSwic2xvdC1jb25zdW1lcnMtaGVhZGVyIl0sZSxbImNsYXNzIiwiY29uc3VtZXItc2VjdGlvbiIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnN1bWVyLXNlY3Rpb24iXSxbMSwib3AtY29uc3VtZXJzLWNvbnRhaW5lciJdLHIsWzEsIm9wLWluZm8tbWlzc2luZyJdLFsxLCJuby1vcC1mb2N1c2VkIl1dfSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGYoMCwiZGl2IikoMSwiZGl2IiksVCgyLCJHcmFwaCBTdHJ1Y3R1cmUiKSxnKCksZigzLCJkaXYiLDApLFMoNCxTd2UsMTEsNywiZGl2IiwxKSxnKCksUyg1LEV3ZSwyLDAsIm5nLXRlbXBsYXRlIixudWxsLDIsanQpLFMoNyxUd2UsMiwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwzLGp0KSxnKCkpLDImZSl7bGV0IHI9c3QoOCk7dig0KSxiKCJuZ0lmIixudWxsIT1pLm9wSW5mbykoIm5nSWZFbHNlIixyKX19LGRlcGVuZGVuY2llczpbbm4sTmUseVldLHN0eWxlczpbJ1tfbmdob3N0LSVDT01QJV17b3ZlcmZsb3cteTphdXRvfS5jb25zdW1lcnMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbTo1cHg7b3ZlcmZsb3cteDphdXRvO3doaXRlLXNwYWNlOm5vd3JhcH0uY29uc3VtZXItc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpibG9jazttYXJnaW46NXB4IDB9LmdyYXBoLXN0cnVjdHVyZS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O292ZXJmbG93LXk6YXV0bzt3aGl0ZS1zcGFjZTpub3dyYXB9LmlucHV0cy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjEyKTttYXJnaW4tdG9wOjVweDtvdmVyZmxvdy14OmF1dG87cGFkZGluZy1ib3R0b206MDt3aGl0ZS1zcGFjZTpub3dyYXB9LmlucHV0LW9wLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yaWdodDoxcHggc29saWQgcmdiYSgwLDAsMCwuMTIpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDo1cHg7cGFkZGluZy1ib3R0b206NXB4fS5pbnB1dC1zbG90LWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmMDk5O21hcmdpbi1ib3R0b206NXB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5pbnB1dC1zbG90LWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5pbnB1dC1zbG90LWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZTY1MTAwfS5pbnB1dC10ZW5zb3ItbmFtZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpibG9jazt3aGl0ZS1zcGFjZTpub3dyYXB9Lm5vLW9wLWZvY3VzZWRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOmdyYXk7Zm9udC1mYW1pbHk6IlJvYm90byIsQXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEzcHg7d2hpdGUtc3BhY2U6bm9ybWFsfS5zZWxmLW9wLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6Ym9sZDttYXJnaW4tYm90dG9tOjVweH0uc2VsZi1vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjEyKTtwYWRkaW5nLWJvdHRvbTo1cHh9LnNsb3QtY29uc3VtZXJzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xMik7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0OjVweDtwYWRkaW5nLXRvcDo1cHg7dmVydGljYWwtYWxpZ246dG9wfS5zbG90LWNvbnN1bWVycy1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLENZPSgoKT0+e2NsYXNzIG57b25HcmFwaE9wTmF2aWdhdGUoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChGZyhlKSl9Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMub3BJbmZvJD10aGlzLnN0b3JlLnBpcGUodW4oZE4pKSx0aGlzLmlucHV0T3BzJD10aGlzLnN0b3JlLnBpcGUodW4odU4pKSx0aGlzLmNvbnN1bWVyT3BzJD10aGlzLnN0b3JlLnBpcGUodW4oc1kpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhJZSkpfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbInRmLWRlYnVnZ2VyLXYyLWdyYXBoIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsIm9wSW5mbyIsImlucHV0T3BzIiwiY29uc3VtZXJPcHMiLCJvbkdyYXBoT3BOYXZpZ2F0ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGYoMCwiZ3JhcGgtY29tcG9uZW50IiwwKSxBKCJvbkdyYXBoT3BOYXZpZ2F0ZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25HcmFwaE9wTmF2aWdhdGUobyl9KSxVKDEsImFzeW5jIiksVSgyLCJhc3luYyIpLFUoMywiYXN5bmMiKSxnKCkpLDImZSYmYigib3BJbmZvIixHKDEsMyxpLm9wSW5mbyQpKSgiaW5wdXRPcHMiLEcoMiw1LGkuaW5wdXRPcHMkKSkoImNvbnN1bWVyT3BzIixHKDMsNyxpLmNvbnN1bWVyT3BzJCkpfSxkZXBlbmRlbmNpZXM6W3hZLGN0XSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxNWT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbmFjdGl2ZS1jb21wb25lbnQiXV0sZGVjbHM6NTQsdmFyczowLGNvbnN0czpbWzEsImNvbnRhaW5lciJdLFsxLCJ0aXRsZSJdLFsxLCJjb2RlIl0sWzEsImFyZyJdLFsxLCJleGhpYml0cy1jb250YWluZXIiXSxbMSwiZXhoaWJpdCJdLFsxLCJzY3JlZW5zaG90Il0sWyJzcmMiLCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVRZQUFBRTJDQVlBQUFEcnZMNnBBQUFveUhwVVdIUlNZWGNnY0hKdlptbHNaU0IwZVhCbElHVjRhV1lBQUhqYXJaeHBkaHk1Y29YL1l4VmVBdVpoT1JnQzUzZ0hYcjYvaTJKcmVtcXJuKzFXaTZTS3hVd2tFSEdIUUlETy91cy9yL3NQL2h1dFpaZEw2M1hVNnZrdmp6emk1SXZ1UC8rTjl6SDQvRDYrLzFMOStpcjgvTHI3OW8zSTU2UjNmcjdSNXVkem1MeGV2di9BWC9jSTYrZlhYZi82VHV4ZkYvcjZCaGYrakVCMzF0Zm54MEh5ZXZ5OEh2TFhoWVo5dnFpanR4K0h1cjR1dEwvZStJYnk5VGQvRzlibmsvN3RmbnFoTVV1bmNLTVVvNldRL1B1WVB5TkluNytUdisxOWpMd3Y4TnBNS1FYMytmUjFNU2JrcDhmNzY3UDNQMDdRVDVQODExZnUxOW4vOXRVdmt4L24xK3ZwbDdtc1gzUGs2KysvRWNvdnI2ZHZ0NGsvaGNPM0VjV2Z2M0Y3elAveU9GOS83ejM5WHZzODNjeVZHYTFmRWZVbSs2OFowaHNYVTU3ZWoxWCtOUDRXdm03dnorQlA5OU52bHZ6NDdSZC9kaGdoc2lyWGhSeE9tT0VHZTU5MzJBd3hSNHVOenpIdW1ONXJQYlU0NGs1YXA2dy80Y2FXUmpxcHMyNDdtbVBOY29yZnhoTGVmY2U3M3c2ZE81L0FXMlBnWWxycXYvM2ovcWR2L2p0LzNMMWJVeFI4L3paWGpDc3FyaG1HVms0ZmVSZExFTzdYdXBVM3dYLzkrVnArLzBQOEVLcXNZSG5UM0huQTZkZm5FcXVFNzdHVjNqb24zbGY0L0ZuajROcjV1Z0JUeEwwTGd3bUpGZkExcEJKcThDM0dGZ0x6MkZtZ3ljaGp5bkd4QXFHVWVCaGt6Q25WNkZyc1VmZm1aMXA0NzQwbDFxaVh3U1lXb3FSS2JuVldhTEpZT1JmaXArVk9ETTJTU2k2bDFOSktkMldVV1ZQTnRkUmFXeFhJelpaYWJxWFYxbHB2bzgyZWV1NmwxOTU2NzZQUEVVY0NBOHVvbzQwK3hwZ3p1c21OSnRlYXZIL3l5b29ycmJ6S3FxdXR2c2FhbS9EWmVaZGRkOXQ5anoxUFBPa0FFNmVlZHZvWloxcHdCbEpZdG1MVm1uVWJOaSt4ZHRQTnQ5eDYyKzEzM1BsdDFiNVc5Vi8rL0J1ckZyNVdMYjZWMHZ2YXQxWGpWZGZhWDVjSWdwT2lOV1BGWWc2c2VOTUtFTkJSYStaN3lEbHE1YlJtZmtTU29rUUdXYlEyN2dTdEdFdVlMY1J5dzdlMSs3NXkvMmpkWE9uL2FOM2luMWJPYWVuK1AxYk9zWFQvdW02L1diVWpudHR2eFQ1WnFEbjFpZXk3Wlp5NDNJNXgxVExudEpsYVMyWHVGWE1MYVplUVd6MjFybnFCazl2UEx0M0h4cmU2WjVZUG5NTWtITDl5UGFIb1FyMm1mT1B4RTNoZnBkMDEwMkZwazU2eU00NjlUcjY1MzFVWUxaY0cvODQ4TzdSajNMU3N1RmRZNXRvMG5pdWxmWG5rbHZJK25xUXNCd0JkZlc4bWRkOFdvbStzWk9vOTU1Nys0b1lrS0w5bG5qWmpKeUQ1T0hWem02V3VXYzVjWlplVEp5bnZ6Zk80MlljNlJvOFJyU0dTUG5sTVMyM25jUW0xZkkvQ3hhVWVUaTN3ZGRzZ3d0cDM3YnB1eU1YYVliSnJ2MVlBN3VYVGFjYlQ1ZERhM0t6RENtMHlmNVV4TTMzYjVRazloRjFuNGFaM1NSU0VzMjhmeldJNlZtZUl5V3hzNDFxK3JoN1dPQzBhVnpEaXVLL0dQQkVRd1NtSkNPbit4RVJhWTk3TTBFYmJ2aHppdG5heW9MR0VQTUpzdTFwaWtRZmdOY3RsNlhzSTF0Zk5saDF6M0c4b2RwS0Z3Y01odXk2UDRsRVRRT0h1TTQyeTdCN05TQ0lPVDdwOVh5WS9IT1gyUWlLMWZSWnoxSFlFT1hpWWZrck4rYVJsdS9oVmZSK1JtR1J0eVRJN25abW9pY2c3L3VaeUQ4RzlEems2RW9Ob3NhR1BhZ3g1WlJLTmNZWjhXem43aUF2UDliUFpLR1lrSnZjTlBORDFuWWMrUENSd1BZMVF5SER0YXRYYzZyWEN4SmRKYlpPUk1oZVZkTEIrYTB1Um14SVJoY2xrMk9lMGJvY3c3aXlFSitaelZNRHlnZitkeE4yWWVzcnJyL1hUeU5pOVdwbjU5TTAwM1dPTkJTWVZFdmRWNkJhdUhQWktERE5XR3hWWUtiZTRXRWNTY0d3K0U2RWt4c25KMEJNOXRCS1l0NkFiVnoxT0dndWdJZmZ2SEVUNkpGb0w0d1Fjem1DeUs4eldTS01haHdmSHlHR0drcVlHRU5ZQlRuT0RqTXRjWnhGWTJiWVZjQU9RSTJJaHQ3dU5wU1JGOWtSQ2RDWVlQT1RyR3lBL1ZyY3VZbUhjWGErRm5SbHlPWW5adFZEUzNqd09vZHB0U2ZBa3dVOHlOeTZaMVhqQUthQll1Wit3aGJVa0ZBaGFBL1JKRnZvK1FRVmJBekN1YlNjRm95ZGtKcE4vYmlIbUhJSE90d3VodG5kT2UwbUV3UWZMRzhoUjB3Z2xLeFJKMjJKeEUxQ0RmTjRUZXJkYndFREd5UFZXZERzdEFHTzJDOExiNkMvbVJnUExtSmg0Z0tyV3p5U21nZjRGRmxmd2o1Y0pVRkRrS2t3T2tYUG5jWTFaSmdLUEVWYWdHNm5Rb0pTSWRrc3hkOFZRTzFteStTNGttUzJGeEJZRVZOWXVseVFrWTVGUS9pRU1iNmNRanVPc2t4SmlsRmdETW96dzhLWUJHVkU2UmhpeDFoSTl0MjlrWHlkS1lqeXpMbFloSTJ1WXlwR0NnZU0xQVhmZUd5QTA4OU9rcUp0TWVtZjBpMXdITUY2K2YyNGtKTWhGaEVYUWlqZ0NIYkVPNUJ2OHVDLzVJbUlsQmdPTUNtb0NnMlA3VGFpQjNBRUFCVnRSbUpNRkppU3pxR0hBS2E3dUFVT1BCcHAwQm1TUTRnVU5JUk5mWVAxRlZOemMvRDRBZDBHZW9vMHJVdTBDWVJBQlR5cVd1Mms0VUJUdHRYaFdJd1JOckFzeERqSjNyZDFYN2NJS2hXdVRLU0FTZVNCbUgwaVl5dFdOc0FhaGhybWpsU1dWV0NMejJ6SkVPc1k5RlE2cnd2YmViVjhpa0V1a3NsbHlMTkNOc3phQTZLWUozeTJMQWN5MnVSZzB5WmhXbXVpVXhoVUVBTFZaSWxRUGNNVFZHelJQc3ZMb214Q2NGeEFhcldSQ3d0YTFDRW02VFBnUXV4aS9qYTZ2K0FBZUdzUWlxdzE4SXRwWVIwSmVPQ3dXQVVsTFl1cjJLc01JMG80bklOWE41VFNZK2h4WjlYUDVGcGRjQ2xlZ3NFUEhZR0poNFVqMlVsWWcvTnJsR25Nc0ptTWpWTGhaWUVYVGxtSURGVm1XeEpTam96QU94QmNxMllQbFVVNDNONUhVL1lhRnYvL3M5RVVHdGtzbWFyb0FkTzhMQlpFRVp5SWxka0pROVRCclJSOGNVcmJJWG9NUE1rM01TZ096Wm9GRjdCSVhGekZZR3FOWnJCeDZ5TE5lZ0VzaW4vcUd1SUt1amh6UEhUbXlSSENFQnJsbUVqUjhlOVRsa09kbmxhdFpQYXVud3dmam5kdzhJMW9XZEFiN295TWs0OUJlcVhIUEdNbGxFbU9VUnNBTU5FdzM1cWhBbndCeU9jZzhrRE9UbTJ2NFl3VWhnS0hJQktVRnBDRFBDL3F4dFA1NlVHUnNZTDhGQ1E4Z0xUbUlucDh4S1pBdWRNQ0k4c09YZkFPb0FMazhEZytWemphV3AwcEhuQWVSNkNsbTVhVFppNVhURjltL3oxN0VKMW1NY29sNUF4MU1KZUFPd2NxOTRCMlJQUWdKUWhqVUh1Z1ZwQnlNZEFXNEFHV1VPSFB0amdJOC8vS3lYbTNLQXd4dzJRTlFRaHFRTjhGU1gvbm9FYkdXNVdBOTBhN01yWGNMVzJWb1NpSXlDZWt2ckgrVHhLb0V6ZzFpMTBaVzJEcEc4Z3pZZDNkNEkyOG1nWFVoY3FSZGowTmlpWGVRQm1RK1M1b0JxMVNRQ1BQRnZNSUV6RzVGb3JTUitJaEc1QndpT3l0bUU3Q0FySjg3T1RpSU5ZUmx4Szl6MzVtWTk3b1dJZ2ZvWmthZ01TN000SUFKY0M0ZG5wbUJjb3VMNllkSHR0ZWt1Q0JzcXVlQUpPUTJxeW54REhzc3pBRFlUSERCQndobkhwVXZDSWNObVBZSjgyRUlnaEl6U053dmg2Mi9xRnN3aGFlVGtDSTBZQ3hTSFd5WCtyOURUbUtCVGowYjhFQTRzKzRzQ3graGM1K1JhWHZESW9oaFk3cTE1SHhqNEpwS1lXYUd5VUVVeURxc1JreDE2NTNGdU1JV3hYVkZ6RUdaQ0kyVEpYaGRRaHpBVzRDcHVBSHlaUlJvTkFZTC9SZ1AyNUVSZ1hrbzhHZmVpbStVUTBmQUxjS1NqT0NCUWJMdDluN2dhdkNUc2ZEY25qUzE5QVpWaUhuTUZvTWY4eFJCR3FnNUdCRGZnK2w2dzAxSndtNzB1MXRnV0ZXZ1hDUnpKdjJSTlEyR0o5WW5pTG13NTBSckpraU15UVZwMG9KS2tUUXFzczBuSm9ZbTNCVUYvRUM5Nk1ZRVNVTkc4MHp4elJEQWpHdG9PTHVxZFYrRTJFbGQ2b0g1S0tyVGxmRDEyWVZmWHZqMU04OEJrWnNuQ2xqeXhtSXlVRkszeXRvTkxROHFzVStFMXNCNElGZzJ1aDgrUkJJaEQ4a2VSRGh2d1MwdUZBVDJVK2FwaXE4Tm8xZ0RWZ1hycGVVRE0yRkljMENleDlDMHArUEJMNklSVGE0TStkMnJLeWRFeW54Z2pSMENia0VhTUFkVnl3dUpyTHhkczQ3c3hYemlVZ2xtRm40bHdCazdBZEhqYUpzUGJTMnV3R0FOeG9CZTBhR1FGN0JHSEhrVW9pY3hUd2ZSVkVFQkFJb2l2NHBGaWZEdEt3NG40UzBHRTl3SmRWZ1JiRHRuczhCNGlhVEtRSE1YSllJVzZ2SXNUSzdoaXVEQ25RRkpKZ3k5aDdjR1MwRzV4RnZKdnFhRWgzSW1TYmRJbWFxVWFNMXgzNHJjUVBmaUk5Q0h2VWFGanczbXNoS0FneGhINXNIT0FEazBFRlBBcVI1VmhkZlgwdkp4WmdlTUVpNmJxU01mRVM5ZHc3RWI1Q01sUjdrZDdEUElWN0lCRzd0RUNaZndHZzBGSEFjVGZnakE3YkErdDZKTUk0eHRrK25FVGx5L0lJMkRsMDFaTXIwVTRuVURuU2o5UFVIOUtqa1A5VndFSmk1aGdHK090NkFZS3ZpQmJDRE1NdFFtZHN6a3V5b3RkK0V2c1g1UU1JbVA2aVg0V1pLTzlRZWxPMkFaOFR1NU9HdzVVQXloK1FaUmpndVhiaUJOZEVsK0d3NktDNDFFa205aU9aQTgxYTlSMFp5NExpaEFoVzFXRm9Ja3NSdkUreWkxd1Zrek4yUmpCdCt3dGdTU0tndTZHM0d5QWVPN2hDbEhWb2hib1lhaWJKQk5Sd0EyNW83Y1JsZVN1MWMyaGNWbFpnRmcxcDB4bU9TMm5ad05hZ0dJV0JYUUVpV0ZZNjdnc0RMWlRUQzhOVlZCeUg5dUxXRjN5SHdNZlZSZDEwZklsREJEQmFhUzVsQlEvZTdtempRMndMWkMxNzhaMnovK3J2c2Z2bzNnSFppM3lkUlVLTHMyU1JDTWpPRkV2Q3BEeU1rNFR3RHplblRvNEh0NXRCVjVOdWdhVE45OFo0bTI4WWZwQ1dKc2Y4OGtmU2pJNmdUK0lrVENTSUF5dXJic0J0ZzVlRE5sL0dWdHdXcTFEWlYxZ2crZGpoQ3p3enlwTm9OMFFiNStnTFhVdnZRVjJnWDJSVmt0ZVV5RVZwbXFRbnZCSjgrR2ljZCs0VHdidW5RVDJ3RDVCV3R5UkE4TlZCdlBReURqSTlBYXI4YUFSV0FzanR4dkNFVjRFRy9qc1JGSFFrUUNFK2VoMFYvQktrbERYQlhRTU9GWFVWcGdGbVNuWWtadnFtNzhia1NBZEVTbkk2VEp4YmhOUG5ManBnMnNCSmNiTW1nOU0wOWlOenkyN2NCRkhYWlU4Z1I5eDNTcmFzRWlCbGJ3eFNYNEpXMFhrQ25rZUltSXhiTEZIK1RFNUNtWktXVkZHc2NqajNFdTRBZ0RJWUxSMkNVT3BBL0tESzJMWXVZOWV5cXVxeTM0NEY1TEI4T2xTN3lQY1dMSTdpMUVkZ0cxZmxWck9LbUdqTzhwUVdtdjJuaUlOeGd4NDdUUVF3dnpYUHd3SDZKUWlvczQzQis0K0Q3Z0JQQkk2WE5Scm9DSUdmS29xUkljaEVnNGlRQmgvWUpsblBUS0VCbFNDSFlES2h4a2tvVEdqM2hPd1d5UlN3Z3ozbTg1U0JrZkNGQWVoVnMycG9tWHFrejlRRUExK0FJS0Jmek5YY2djalRraE1xOEtDbjRra2hoQVJwWHJEUEM4eUJ5OHhBRk1aQmJPWkpjcWY0ZHd3NWloQ3RFaEpDM3hDUVpQUm92YjUyYUFPdmZuN2ZCSzBWY0JqVkZ3UEoybkl3NXNWN1FYREVKQUVFRW92Z2h5NG1tTk1iSlM0YXJZU3JxcS9uc21TNFg1Z3g4TGVuNkFIN3RNQldiZ3NmZFc5UlBraHNrTmtMdzVZdGNCSmN5MmFxd05UMEd1SGRZRHBUVnhtc3dmQUZRQitva3hJUUx3NDdWMjhKTTF4REdlY0ZGM0dlck95Y1dBQk9NdWlHZ0VFS3BxeUptUWF3Tks2VU9LR21JakVyYVBlRTlHdmJoQ1hUbDNNcEoxTkluZmlvaEEyeTFrUEs0UitZSU00NTFRVHVYZkNIT1ZFWkprUEpQVVdkSUxNR1JCckh5cjdBVjZIVTY0clRwWkttd3ZWSE1TYkhleGVndWJuVU92U09uRXh6RVFZeXQ2OFpMSENTQUxpVytDQkFWTWpzWVpuczZXamJ2SUFVTVdjR015cXdrSGtRZ2VFaXFxdmZDb3dQaVJlY0pUZGVVYmdnTGlPb1FJeVMzVFZGM1FzN0FpdmpPZnM5L1NvbTI0QzBzYUlZZUxvbXpuVlVISEVEa3o1cXg2K2V4NUF4ZXFRL2haZ1pGd3ROa2grY2c2VEdOdFRTVmY4TnkvRWgyb2craERQYitxSnZZblFNdkdjckVFUTdWNEx5ZTl0aHU0YnB4RHdBMmdWVkJCWHBWbk12L2pKMVhyQjgyRFp5RklYaS9CZUJMdUJUV0hZcS9JZWlRVW93TDh4ZGpucUp5QWRBdEYrUUZRc2taalNDVkRyVWkzaEhLekRJRmdzanpDbzhyd2t6M2pxdFRIdUYzRGlXT0U4YXhZSHV5b1NJSlVWSFg1N3JWQVE2MzlVQjFzVE92b1NEakdCazcrNjR2TnRVODBnSTJIR3VoQXhOclZac0VKMG1QTUlCR0tDR3h5cGZkZ0xTN1B0VU9kcWdocHg4WmpvVlIzTjJUaHJLNUNZK09CQ0xvMXZ5LzFSU0V5RGNrVytEZmpCKzlJamZqQWxTOUJ1bDRFbmJ4aTVTR1lReGVHOTdXK3FDeVc5dmFFa3IrOStFOC8vZTFIQmJ2dTY2ZGJUS28rQkZSeHJkdHZaQkI4cHZJTU1ZazZSR2FHcSsyZEZqc3FUb1Zuckkrc1hSZlYxNGlGR0JGenF0MGU2ZE5LbHRqV3JvQkM4RXJOR1FCenVEczBiM0QwMWc1RU9wWHBxcXJONExRclYzZmlDb0tpbzN1Z1JrZ1UwVG9BYzlJclJCRlpzaXpQZ3pNVzh4VFZLckEya0k1OEhzYTZFNWtXcjBzSnNBaHJxQm9DdjBraEpIU1dhb20vRzFsNFN2UG9WY1VKV1h1RkpnRVlHZkJVeE1aZmtoK2ZtOFl6MG9oNExBaGNva0pKUFdtVEVQQ3oxMjZxYW8zWmd5YUVRQnl3ekNJRW5mYTJ0MHBSOEF5YVBMM1NrWFF5Y3JxWG15S1lseU93d3Bmb1k3NUdPYUpBbURFWXZnRmRMeVN1dzk1RldFRlZ0Z3lLeGF6QkxQVDhsbWJFNlNIclMwaGVWWFNnSFltZXNRWXJJYWpKNXZGWVZzYkwvWTZFWVpwNHh1YUtlUkVtYUNaQm55bDg4R2FrWXpEdWM4Nkk4UENBWEJHVmJuaG1LaWc5cXh5em5CbUFQQkhqcUZrVG1zQjVWc2lKMXlReVpjWmhPU2dURUlBV3lIUVZmeG93d2t3RFdFQTBzdTRtd0lYVVRIUENtb0N0cXJSa2tyZ0tMREk1R1dBVHhzdFBocU9YVlpCQzdUaXNRWUIrTjZrRVpSdExLaFJFUnFPL0ZvTWxnUUU4bnBYd3cvc3hOaWdROXE0cXl1d2xtRVltWm5tUkhzbDlNa2RDUytVVnhMMzJFdTYrTUNMM2JDUUhJUWoxUWFYNGhBNXVwSkx4VUVIaUY0YXV6SzAyNmd4RnpqS0RnN1djakRNbjQ3UlpodHNrK3ZGM0NQMkw1Z0NwNFoybG5RazBIaUZmTVREY3E0b3FYY1owcXV3bnZRSTlWTmdYbGtsaHk2RmNaRE9HK3c2YnB5RC9zTHBIbXcvWXlDQ3IyN1kyK0haUCt5TFlJME1IdUNkaWhBdGdFd25aQ1Y1V3hBaEJLS09YQ3BGYVlvRmlYM0tRaXVRL09ZS2VaUVdRUE9wQVdOeDg1WXZiM3VvNVdOSVRnMEY2bVpJd2lxbzFoUWdKU3htTnQwSldGdEV2Y2hUV2tyUHlpMXdEMUhlOGVtTkVSblZ0MjE3cHE0a01aaDRZRXJvZmhCeWw5NlpLVmRjbU1oSUk1UTBxSTV6OHdXQTRlVjYwQzdPWjRNb3J6VVRLemp1Snk1MmFzT1lFN1J3aVJyVEZGQUxFS0psZVZVeU9qY1dmUkNaTVN3NlNNUVBnREYrN2NtSFBYM2NjL3Z6Wi9jMDNYbUhTRTV3L1NOMnZjdVV2cjZwSGpDZHlxa3lrbExDV2MyenNYY0tHSTduZ1FwQURhM0VhR05xVGdsSklBcC9Bc1FOTlVtUFR0cit4Rmp3Kzh2Z1FGUjFRZ05HeTdHWUNRbFJneTB3U3JwKzhnZUlJRER5c29UcDIyRThjVzBmanNjNE5FRzU0ZlRmbFdyVm5KamRWdER0ZEQ3SkxHYWlFdmQ2eWpKc0I3Smloc0hidkdkT2pLaG1rc3lDVEtOVStISFN2NG1Rd3dHbStUWCt5dFdFak5obUpvb0Z4MWdzMWZGR1Q3dUhua05mSnczS2RJR1ZjbUQwdWhNYmNJaWhNaUJuV2E4bUtTcVdOeXVPQm1WZktIQjJETnNaVHR6V0lrUnJYMVA0S3VLeFNMZmVPcmszeUdXbU8zMVB4a2ZqUk5oekQ1ejRCTHdwbUl6dTFWY2ZQQUgycURRTkhRTmxSdXd4UWMzS0pIcWdGY2VHbHF0MlUzaGx3V0RGQmZIaEcxSWdLOXlTanRPd2JBZ21PaDJNMlVMc2tMRlFKaUYvRk9ibDJtVlRVSVl6Ynh1RXlUTE5YcHFQRlZKQVBTdTVXNE9CbHFwS1JGZHJTYWRwSkNVYzRnaWk3M1NuQU1NQ0d4c0dPNTFLODRhb1hEOGZ6NTNhczdQSElTRnhZVkZCU0ZXaEZuaHRHeFpCbU1nVzhkK2lKZ1UwR0I0SGF1ckZmQUFQTXBuSWZRczJQaVhzYVVBYlVyRktBcWNoVWJ4bDNlaFUzVkF3MWRMc2pFTXRaU0VVaUorTVN4emI4T2pQVUNJUEpkR093eXArS2xYeDJmM3JEKzV6YlUwRS9FVno4K1ZYM2VUbXJDd0UxTE13SFNHUzNlVms4OHNjODQvTWJFZHIwZEw1b2llQWVpSm5iU1pwVG1TQkFpSHlwUS9VbVZvMmxlYzBPc29tZ2N1U3hRUzRpdmlnVUhTcS9Cay9VUnVJWkE4Q2l3UUdtYlpFSWhWbzVvbHl1dDBsc0VCQlhTSlRXeVcwcnQ4UWNUZlN6YmFmUzFsRlR5V2lWY0ZSUkNXN1dQdWtjUWxHWWtyUVA1RXdJNlBrQkFJajE0R21HaGp4QVNFT3VDekVLd2o1ZmpRcktoUWtpNmswYmhUdy9kQTZwUUp2RWc5NVRDVDZVTk0rTFdVcnlIS2ovaGhRblRSekFqT0pDWkdRWWE2bUtmREdKQUJONmZXdFBFZk84a3UyQ0xrRTlNT2NnUTVCcFNWUGtXREVMclk2dHpRT3k1THlaNTVIOXY0L1duOC91LzRyV24ralFoVjZBSU41ZWlCRDd2NG1tRGZlZUViQnYyQlkrYS9EYUdwb3p2NjRlZEs1MzBoandONFltTE1nV2FZcHJrTy9ydUpWVSt1enBaSytleWJtOGR1bXk5aENLWkRvNm5pa2g1VHI2d3FuSkROZ1p1QlQxVFhqVjdHQVhkV0FZd3Z1bzFZREFBeW40dVlsbkRiMUwzbFFWWVZHQy9hSWJOeFlDMkxQWCtZQXhSS1BhUmUwbGhMbEt2OU1EUmg2VTJFVzlVb0FBeHV5cWsyR3MwaHUyWjlaU0ZwTlIwVWNzT0pNV3NXVEF3bGpNUUZON0JSSitxV21reTZXaUFmak9QZ1Q0eEFWbStCb0l4b2JoNDlDVENQdnV3QmNHcHgzcUhMc3VMcS9aMVFnSm10WE5jc0ZhRFh2S2FuQVhWUlhVMHptMVNkQlU1c1hUSTBtU3d6S2poMC90WGIwNm5WREV0dkxvVU1aUkZZaEhyMWVsdmZESzR2QnZVTCtOak93Wmw4bEVBNnBMeG1ISTc5dTJld1Z4K2JKanIzcXZIV3ZFSWFsTDhpQjlHMUJ2dGNicFZRZGZvQUorQWZyN0NrRDN2dzdsbnlOWVl2UTNJZnhMeGUySEVQNFI0SWdUTUxJaFhtdFJpMTZPK0dQOGVDeUw5Y1pLVjVRdkQ0OVZxN2FySERpQzBCUEJYcVVjbkVCQ0E3SUEwRm1NV0FodGwzT2hzMnRsUFZ2SGZLcFhFZ0VhdWpvc0pyb1kwdUUyUFZlVlptQk5FQWpFUzB1WFpBV1hDaHNwNVJyVU10eng5QW9kbUNoT1JPWUdhSTh3Vjl4VlFHQitKRGVwL0ppdmpGaHFUTUNEZlJ6SDNSSVdNejJDSEtnWVRRVzhoVGhPRlFXMHNHVG9Eeit4eWwwTmZhQmNVaytiL2k0UURuN1Vaa2RoTlJIU1l6Z1ZHRGZ6K3ZiYTBVZmhVNlhFREJiKzc5cHpqM0hYcmRSVnFWY0RrTFNlNGg2aUdyRXd3SURBWk1QUFVIcDdaU3A4UllqU1hnSmw4bE43bnR5bG81SDBzNEM4dXFud2ZKZ1dGYXR0cVAyTlZHcGdkbjZkWXZBeXdrcjlrdHEzU3lKbmlBT1JvSjJEQTkxalFmRVRKS1J5UXJZOVk3MTRYbEQ0WXAzZFpMVm11bjZwbFEybHN4VHoxWU1HNnJVaXNDN1NYcDE3dnF1dmkxRUFhVW5tVUFvR3hjNlRzL0xaZVF6SzNsUGNienEzRUNmbUZPL2VGay96UXdyOEtjTGRQMDJCUDJXQSs2NjVKekZBa0JiMWRCZ3FHWGFDdHZkRDlMWXdITkFpR01lSG91YlZYNkRkL1F1MkEzU1laZ1QweHVnRm1lMEE2azBZTDJybkhpU0RIOHBTR0dzbi9WV2RtV1duTWlnc2dEZ3ZTZDJDVzVvV1RReG9FdnBGRUJkR1pPSDUzMlFFTW9EZlZIb2xKcXdrTlZXbjFZZER6a0VwRXYvMXFwemVFWUpqYWRkaEVwblZ0NkZPeTJxM1JJWGNBUm1uOW82STJ5RXNaOXl2NThnVmJRL2tHbGxwaG5ZelNaS2x1NWNoR2dyM0s0WG5BUno1Qm1HNk10azJjTll3aVhaUXlBaThPQ0RndUFwRVB0Uk9jTkRPZlRMUlJPQmMrTHJJRFhpQ0pIMGFkSExnempDWmFyQy9nOHIxWEJnc1pneGpQbTVuOWZpTk96TGVEOEhEaTY5ZlM1VkV5R0U4ejRwMXFRbkIzOVh3ZVJQTElRSFA4aFhiMEoxNk5Sd2pWL0Z0bWtwcGlIMVNLbDMxY1FIdnh5Y216QWg0RldiZzRueW55ZzdFK1ZCaGJEUVB3aStHYjhBSXBrZm9yaklENlExV29heUREaFBjWHRSQWhzSTI2V3Z0cDVkWkEwNFZGY2VqcVg5cGtDcHEwNTdOWmRidTlsZnh2cjNKREtzWGlKd3BhZ0dNMmlWSTJrSks1b1dRaDRmMDhBNW9CYVdwQ1dQQzZBQ25xd2hUVm8vcGhtTUJ3U1VkcGRNMVVUdmNYZlg2Qm9ZdmhDU2VBb1NlYzN6MjNIdFZuWFIxdENwcjRuRDBtRFVjRUVhNzR0WEIxalQ3dDQzNGYvelovYzAzL25FSFFQY1JWUkVXVEt1ZThDSExrclNCMVpCQlZhVWlnSzBBS09SNCtvV2hnRHJkOExGSjdFeGZxQU5abzIvcWNBbkN5cXVpRnIyYWtoSEtSSEx5YWlsUjQycEdqZUZhTUhkb0tCd2RZbDRkSE9GRDdUZ3RKKzljQitIaXRWbU85OFIydC9xcVZNZ1BOV3pPOWJ4OFhnZ1J3Y0x4T0RiQUNwOS9rQ0E0Y2lJNTRpQ3pmLzRZZUpycUF0N0k0bDdVMXhZeUQ2ditYM2dMZ3RLbXFUUUxrU28ySlpFSjhTNjZ6a3daNWxpbm4xajhya000TllsUWg3WWxWaW5pKzVxMzZwMktmdlNhUWZiaHFLcll5SjVkeTJjWElkZmt1RW1CVVB2Q2VNdktYVzNZc0JMWWZ1WTlJSGFPT3V5Z0FqWExRWmx4bjAvSEYzQ0djaWQvOFR6WnUyenc1Rm95SityZ1hjMTRaMVE1d1I2cDZGaktWSXNoZHA4MVNETENaS0dGdlhielF5MXorRXVmbkh5a1IvaDkrcjlSV2xtTjhpZ09pMVBaUnFaM2JhdFVCYzRlTEtpNkwwRTFra0FkTzlBWkNCdTNrOUtOeld0N3E2azNsOHhnbXRXbEhkUXVodU80QVdTOEltSXNqcW0rRGtIa3JGdWdUQmVhMHplYnp2ZlhMWEswY3VvTnEvOVdZbnovN1A1dmlmRTlMOXkzeEFqNFJPUS9EaW1EbUFpVEVWNERJbDYzditSSW1ESDVaZE9STWVTWnJuZWUxOU0vbklEQU5yNERhUUw5cTF1TURBdEw0cWwrZGhqZVA4UnJCbkkyWENDejFpUUxwdHBNa0NERWZuTmVMZXNJeXNKdE85eDJjWXhSTzlITWNvM3F0Y2NxNDM0YWNZUGdZbUlEWkJRR0xNRmRXU2h0ditDRUFUWjdIZW5ZR3BCZDUxOUFhUlI4S3dqRFlRdUZBZmJtZ2xHRzc1TzBxMDQ4cU85eXFYWUdHdXN3eVhSWHgwUkl1NkJHV2ZqYkFxRjhjTVFXa0FUcTQ5ZXVkb1pCc1RQY1BodnVOSlBVR1YrN3RXSHBwemIrSGU3RTk1bmdPU1FEbzJ3cjk3NTBLSVhvUWRkbEZVUmlid2ZrM1dCcHFxcVdvVWt3TUJOWXpVR2xpTkljendCckFNdWdNemxOdEFMUzZwRDFLdVlhMU5KS1VISjViTlpONEQ1S051eXRYc1FiTXBPZzB4K1ltbWllYWI3dnVDVDJwVEl6NEdNSm1HM0U0dFgyUE10NVh1OHpDU2lOaHNyME9nVDBObnZGRVVnQTVzaFVwQjNxMG93YTU2dmlxdlZsRjUzQ1BGc05TaVRNK25ESFVDRXJWSlJuSndxekN1cisxVjJjSGV0b2cvMTZDWm9rbXRxcjBpei9xSXp6L2JQN1RYM25kOVdkSDE5N3BSM01KZGF1N3BYUmFZQUp5NytCWGlrVk1tZnNqQWkxUWZ3VXNtWm9uOWxPUUhHb0tGaTBwM0xRWUhWNFNlM1MxQmFyblhmc3RBdnF3a2YvcWxxcFhpL2tJZFpheHVZTXNTYlhCeDVtMGVHS2lVQUNKa2tVUUZ6MVEzQk9MWk9xL2pnU3BXbi9ITnFXSkF2aUFMUlVsWmtZYW1RRi9kV29SRmpoUEdUUjFMYWhSbGtOSFRXRlpqanpIQWNUbFk1R3JWanBScENDbStSNG03ZTkwdzdWSnh6Rzk5RWtaUTlzRlkvQ3BOU21QV2xaQkxkaGtLcnhvUDM5OEFkaXFub1dLN3laWVBIYW53c0pWT0hIZEJmMUl2WWdad3VuUWEyRC9LMUhVSnZVMjV2R2F5bC9iYnhEWGJoN2FZY1F5RmlZa0tGMk9nRldyWEpqVENOY3E2M1JxdGFuVHZRV1p3dzhvcURtNitEUjlnU3U0U0o4SG1UaG9kWU5RV1lvUGRqR0NaWUxDSUpBb2FreVRTWkttM3FuYlUwVWRtWkE2dEFONmo1ZytSRVFHUk5ISE1VK0lDcG1UNzN0aUdxenRxTzJOOW9wVVhLUFVJYWVkWDR0cVdXOWRaOWY0eDNxS2VyZkNaeVE3MEZnQ0MzUm1GeEN4NFZXLzV5cDFsRndTVWhzSS9iV1NTWWpudFhwaSt5ZGIrV205bTZVekZXVlZSd0xNaG5RanhrL2dISlhHeXlwT3UvQ0hFSklrdS9kYVk4TFRZR3Mxb2JLN0MzcXpKdHdqMXpndmUwbEs1NG5nUVU2bVljVzZ0bFhuU3dkUElmT2tMRnNIdTQvRnpPb0dySk93T21JVTFFTDY2aEs0NlBqQmR0UVFIVVAxTTNTeHVMcm4rU0Jub0VJa2xUQWlzc3FIazAxUFlNVzB1T01DUU9wcG5VZ25vakJZQ05tb1QzZXBmWHNDN0JjRzVWbXpCNzRDQUNHRnB3S3BkeWZod3JhMmxISkM4R0U2bFZqdjQ1WVJwRDFuUmxwMGtvdzNJcnFRZHdxTVBTa1l6WHZvSTVMQkRyV2cyQUdqRFRRRmRXc2lZd2p1M2xzeFdzaUtGRitoYlFoanordG5CZVYzbEVRMjdUcGhSVmRxYXRCd1ZUb2dqMks5aUIxK28vazA2bXlyaGFjUHh3NmVKL2RyeS9NOUx1ZDIvRTNyN09lcUp1R2wzT2Vod0dzVklaWXRoSWNxYk5ocFl5a1V3RkVYSzVxR0F5cWRNRTNwaU5qcUZCN3UvTnFNRGJaQnZ4YThOTkQxN3ZML2NrNk1qajFPRWlCYmpWb1Mrc09uWTlVcElXRzZEMUZpS0IrVkFsRXdwcC9kS2Q4SldZai9PRUpMa2xUbmVuRDBsaW9SM1pKdlcxQkZxK1Qvd0ZLVTZwbGpCanlCQnRFN3N2dnVsV0lhL1JwbThBTllVRld2Z1hkRXBrWjhFQzhJZ2ttNHBVTVc4R3Zyak9NWWFzckNBRFEwU0FBRDMyRWJoektwbDVRUUtBbmowMEVHR014OVZ1eTZPcjF3SGxsSFd1OXdONlZLdTlsSUtYcWErVU53SlJqUGRTVHJ6Nm5yYTBTMVVFS1FPVjVaNS9vUkJEUWdwN2d5Tm9pT1dXbHBvUzJwV2hiSllzT1FqdThicWhkbG5PaFg4dFdSN2pzdkZ3N3M2eno2SVMyQ0Z3MUFlZ3ZxV2FUWDZkUndCS2kwT2ZyaVloWnZmbEpoakF4djFxMk9zTE1WODNtcjlPQ3BBUW1jdG9kSlVUZWJSMW5KS202am5Rd3o2Qld5dWJVZHJpbkFxZG1nSHJ4K0pNbEJac2dWL1dBNExxM2ZQeGxGQ1NjZW9KN2YzUUVaL0tkcWpPWEl6cENVNms2bmdwcmFqU0trbjJXZGZvTDJwaXZzcTVOZzJaYkFnejNQSnBrcStxRkVhUWw2ZFVQU1U0djlVbGovT1BWNFF4Ri9sVGZvamI4MEh1R3hvTVRab1NwSjIrcFlIbDhqV0ZMVFdiYzhiVUVPZkpiSjE2QUVTT0psMXBJY0FaM0UwWGExenFmUWo1Q093ZVVLZ1lwTTljWHM0eGVyVkREVmVFZWduTEk2bGRxMGpHZjVGK1BPZ0NLd1BDQVRYenQxOGhLS09rZFNuMEhVT01lQ1JmZVdOS3dKWkZMeGZmUHRIR0lVZTcwQzBPSEhnS0ZyT09IT29YeHJpbTJBTE5ST0dyM1VSZE1mbTM3T2dCVU00YlBmVzdac0RzNmpEdDFJclBLUG8xSU1uRDV3NHJzcWUwcklwMjViNm8ydk9PLytNMnJmakVHaXZTQSs2K09oYkdzQ3l0d0dmUmdEVUdKRmdPR0xSbDhBSGV5M01qdHc4K2xGMXM2andscDQ0YUlhbFhRM0swNkpzUFVraUo4NUp1SFJBT1BqeDZvaXpNQkh5RzJPb1M5UEF5V3NHdlZwODRuSWFnUU5iNDZqM01rK0hCcnlFMUNmYXB3eTlCRXQ0eFlQUVY0a0lKT1B5cFFGQjBQMVc3VGh2a0JabFI4RWxjV0xvUjlrbGJEcWYwQmxuOUNZMzdpZzd0Q1hiQ1l5SmF0VmxsaEU2RkJKNGVaRXgzekcyQUd5eiswVjJJZW9GMEJrVTB1QnpLQW4yTHdPcGFtazNoNFN2RG82S3duWVkyaFZJT0tnRTBLdEttQVhWdFc2VGNEc1dTY2prc09uaHBKb1VLampvUyt2Z2ZVU0hKRUFoNTZYdlZuRDBDMzZWaWdOSXlLRnNBcXJub2RuUmJzNnRYSTFscUdKMGFYekh0T1NzZVhSeWx1dmhNREtlb2FnVlU2NzhqTXVrWG5VTFlSRXNnaXVKajV5Zm1kazlGT1RJMDR5cXN5czdxeHRSUHNKSlNoQXJWU1YwbUZoZVBXcjYyNTZ0N1BxaG52WkUrYkEvdzFxYnRLblNpaUpwQWN5T2tnSXVIdFZEY0pSeWM1TXNHVG1ZWnlGRTl4RERXdUVRb290S1E2ZGJpdlpmTXBiVlRHOFRyWXIrbzFkSnltVytDbEt2UEFIZ1kwSmprcTRMRXVkVTJUcm9yNU9Lc2lWaHlLZXJEUGZuWldSNHlCUk9LQ3Q4SFMxRlErOVFzSU1objhkajlWcWlQUloxQ0h0YW9YcUFVSlQ5UHZxQ0RSZ0hOV2k0VFNyMkpJNnFFRWFoa2RXVlJQMmEveUErOWNEV1FPN2ZITHZwTzRCRS9TTWJzZG1lV1Z0QnNjTUpVSFlhMFRJLzZDMlZPSFgvRHN3T1c0YjRjQk80bzhOa25RcTlOR05wTmEzbC9mS05tZ00yTUExd0Y4VlZLeExBUnRGYWJGZUNQQkNrK1BMMG1LM3U1ZitYNnQxNE5DV0h5MEI2UnFxUHJ4ZFY5MTNNMm54blh2dDhIeTYrM1Y0TVlBanJReW5LL0RqSkx3RVJ0UTYrZjRxOXJpd05KZnk0ZHBaS1VaTVlYMXRUN0dVY3k4WlZXaGEwb0pCcEFrTGNHaXVnNjVERzhJK3QwTkRFdktmK24zVkRTMTM2b1NFZ1JOYllYUCtUNGNIY2dUMWRHaVhzSlFsQmZJM1hjbTBkVE9OUHgrSGNVNlRuM2Vob3JZcHg2TmlTVGYydWtETUp2T1Ztb2ZVSUN2WDdZQlpWYnBWY0VPVWU2MUo0NEN1TXl4bTE3dE9QaHM5QmI2QkFwODlJT0thV3JDMFdaUGwzZ0YxOEE0Uk5kYThCS282MGRQSFMrTjZBRWxzdE8yVndPeldhRFh1UXR2WDIvSTBVU0dLTlBpaWpvQkgxR0VvS0VlR1E4RThSSHhhcVdhUkJqTGtWd1JQTC9xQmE1Tk94dzRmLzArRFpWMmVsRWxBUmFFRW9QTVU5cFBoT0ZkdVYvZlg3VUEyVDBCVzNqOUppaFNMRTFDRjl1dU9xK2wzeFFROUJ0KzV0YXZwakFVMzJnNkUzdWZMNzBIVWJrTVMwVjB4Szcrby9kVHI1Nm9JOWY4R3hSbFRoRStUUzVTcGU4aFFZcHE0T25SdlYzU1FEMC9yRVpRWHd4eGFnN3VuSW9RSkNwZnFLWDY4N3Nmam42ekNXOWE4QXNvZFpkeUdyUWg5WEVkVytjS2NsVGJzazRHQWE2T1dmU01ZdWhYNmFoelg0cDFmQjBnSU1hQUNJdVNuVG1yWkJySGZNejcyVmZsV2RSdnRJd25kWDNqaWZEcWFtTnFLTUFJVE90d0lpS1ZtTitXL1k2Q2ZHZ3ZhZzk2cFBTTTRINlNGeXlEd05VMDUvQ0NBZERXV1pDc0xkd3VjYUhmemhXQ1RxcW9rNlFoTVZqOGhiaEMrcGFqWHlLaEJoQjFXT2diMkxnVm5Gd3E0azZUcXM0dHBuYXRYWlorcFljNjUvVmRzYTVPQzZKbG1PaGNsVWdyYWFjQ2tHbytlVDJqQXhLMzJzOVgwTG1OZEZqTmdSTm5wcHJ5UThkdzFTeWNWQ01zUERKSmtMWEZxWk54T2pMejE2L01jZ2lFOWZlVklSd2o1dFQ5TjlDdXRoamc2dDE0QUFBQmcybERRMUJKUTBNZ2NISnZabWxzWlFBQWVKeDlrVDFJdzBBY3hWOVRwYUlWQlR1SU9HU29UaFpFUlJ5MUNrV29FR3FGVmgxTUx2MkNKZzFKaW91ajRGcHc4R094NnVEaXJLdURxeUFJZm9BNE9Ub3B1a2lKLzBzS0xXSThPTzdIdTN1UHUzZUFVQzh6emVvWUJ6VGRObE9KdUpqSnJvcWhWNFFnb0I4OUNNak1NdVlrS1FuZjhYV1BBRi92WWp6TC85eWZvMWZOV1F3SWlNU3p6REJ0NGczaTZVM2I0THhQSEdGRldTVStKeDR6NllMRWoxeFhQSDdqWEhCWjRKa1JNNTJhSjQ0UWk0VTJWdHFZRlUyTmVJbzRxbW82NVFzWmoxWE9XNXkxY3BVMTc4bGZHTTdwSzh0Y3B6bU1CQmF4QkFraUZGUlJRaGsyWXJUcXBGaEkwWDdjeHovaytpVnlLZVFxZ1pGakFSVm9rRjAvK0IvODd0YktUMDU0U2VFNDBQbmlPQjhqUUdnWGFOUWM1L3ZZY1JvblFQQVp1TkpiL2tvZG1Qa2t2ZGJTb2tkQTN6WndjZDNTbEQzZ2NnY1lmREprVTNhbElFMGhud2ZleitpYnNzREFMZEM5NXZYVzNNZnBBNUNtcnBJM3dNRWhNRnFnN0hXZmQzZTE5L2J2bVdaL1A4YTdjbUx3MFh4dkFBQUFCbUpMUjBRQS93RC9BUCtndmFlVEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQjNSSlRVVUg1QWNDRUI4ZkJWeEh0QUFBSUFCSlJFRlVlTnJzblhsOFZPVzkvOS9QbVMwN2tJV3doTVVFQVJFRXBBVzBJbW9ScFlxMWlGV3cva1RGdXJTaVhjQzYwTnFDWGJEMXV0d3FXbXF4cmREMklyZFhzYlRJOVlwTEN5aWlVdGtERVJJZ2V6S1RXYytjOC96K21ITW1KNU1KaXlJazhMeGZyL01LWkNZemt6Tm5Qdm51WC9IOXIxM0FtcTFWUkgxOUdUYnhadVpkK0FHM3oxdEYwUjJyV0R0dkdGRExpaG5qbUxkaEhJcytXTTcwUEtEOEdhNjQ5RkhLTDEzTTltY24wNHFmRmJQR011L04wU3pZc0p3Yml1enZSeWxmc1lDSEZyL0M1ajBCZklWbk1mN21lN2ltYmdGMy9DN0t6R1ViV1RpZUxrazRIT2JBZ1FQVTFOUlFWMWRIWTJNalRVMU5CQUlCV2xwYUNBYURoTU5od3VFdzBXaVVhRFJLTEJZakZvdWg2enE2cmhPUHg1T0hZUmpKcjRaaFlKcW04OS9DTkUyY2g1VFMvaXFrbE5nSElGSy9Ba2dwaGZYU2sxOVR2aWQyN2RwVlhGQlEwTnZuOHhXN1hLNWlUZE9LTkUwckVFTGtBejJBUENGRUhwQU5aQUdaZ05jNlhJQm1QWjRKR0VETU9zSkFDQWhLS2YyQVgwclpKS1Zza0ZMV0c0WlJwK3Q2ZFNRU3FUbDQ4T0RCa1NOSDFsaVBJeDFIdS84TElWSnZzNzhISUlVUTdiNDZEcWxwR2tJSU5FMUxQYVRMNWNMbGNxRnBHdmEvM1c1MzhxdDllRHdlM0c0M2htSFF2WHQzZkQ0ZlBwK1B6TXhNTWpNenljN09KaWNuaDl6Y1hMcDM3MDZQSGowb0xDeWtaOCtlOU9uVGg4ek16R080NnZ5c216dUptemRQWmRYYStReERrWXA5MGJlZXNoV3pHRHZ2VFVZdjJNRHlWbVg2SElpeWJzNVlibDVWeEIycjFqS3ZpNzA3c1ZpTUF3Y09jT2pRSWVycTZtaG9hS0NwcVFtLzM1OFV0RkFvUkNRU0lSS0pIRkhRbkdMbVBFelRGTGJBcFloWkd5R3p4Y2twVXFtQzVmeC9UVTNONEp5Y25FRnV0N3RNMDdSU0ljUkFJY1FBWUFDUTBVbE9jd1RZSjZYOHhEVE5Dc013OXNaaXNUMk5qWTNsQXdZTTJKMGljUEl3Z3RkT0FHM2hFMEswRVRwTjAyU3F5Rm5DbGhRNTUrRVVONWZMaFdFWTVPWGw0ZlY2OFhxOStIdytNakl5eU1qSUlDc3JLeWx3ZVhsNWRPL2VuZno4ZkFvTEMrblZxeGQ5K3ZUQjYvVWVWdEMycm5pUmw5NWN4WXBWbFF4YjhDckxieWhSS3BZR2R5M1FhbGh0WmZIdjFoUGpMQzRjWDNUY0JHenJNM05aVmpLUCtWTkw4Tm5mTFYvQjRuVUI2RHVWUzd1WXFPM2Z2NTlEaHc1UlcxdExmWDA5alkyTitQMStBb0ZBVXREQzRmQmhCVTNYOWFSMWxpcHE2Y1RNdHNwc1liUC9LS1VSc2piLzM3VnJWODgrZmZxTThIZzhJMXd1MTlsQ2lMT0JzeUQ1Vm5SbU1vREJRb2pCdHBCNHZWNXljbkl3VFRNS2JETk5jMnM4SHQ4YURvYy8zcmx6NThmanhvMnJzeXhGS1JNblN0ci9kNHFjbEZJS0llejdKQVhPTUl5azlXWmJjOVloT2hJNXA3Q1pwb21tYVhnOEhqd2VEMTZ2bDNBNGpNL25JeFFLRVF3R2FXbHBJUkFJNFBmN2FXcHFvckd4a1lhR0JtcHJhK25WcXhmOSt2WHIrTE8wNmdsK3Q3NkljVGMveVpOSzFEcTIySVpjY0QyVEp3NmppRm8ycjF2REIxVlFldk5TVnM0ZlQ5NXhlWXBLVnN5YXhydzMvZlFkTlpHSm8wdkF2NVgxcjJ4Z1Q2d3ZWeTVleVpPVGk3ckV5YXF1cm03bmRqWTNOeWZkVHFlZ1JTS1Jkb0oyQkN0TjJHNW5pcUNKRHF5eWRoYlp0ZGRlNjFxeVpNa1hNekl5dnVCeXVjWUlJYzRGQnA5bTEvUXUwelRmMTNWOXM5L3ZmLy9yWC8vNisrdldyVE1kNHBZVU9TR0VtYzZpUzJmTmFab20wMWh4dUZ5dU5pSW5wU1FyS3l2cG5qb0Z6dXYxSnEyM3pNeE1zckt5a3U1cHQyN2Qycm1ueGNYRlNxRStyYkI5LzZhdnNHNzlOdXJJcGJCc05GTnZuc2M5MDRjZEoxR3pxV1g5aTArd2VOazZOcGRYRWFDUTB2R1R1Zm1lZTdoaGRPY1h0ZWJtWnFxcXFwSldXanEzTTEwY1RkZDFZckZZMGtKTEUwY1R6amhhR3N0TXBJbVgyVmFaK043M3Z1ZDYrT0dITC9ENWZPZHBtbmErRU9JOElFZGQxbTFva1ZLdWo4Zmo2d09Cd01hNzdycHIvVi8rOHBkNEdxRXpuYTZyUStTY2NUbVphc21seE4ra2xKS01qSXgyc1RldjE1c1V1STdpYjA3M3RLaW9pRjY5ZXRHM2IxKzZkZXVtM3NYUEdtTlR0S0xyT3Z2MzcyOWpwVFUxTlNXdHRLT0pvNlZMRHRpQ2xtS2RKZDFNaDBXR1U4aWtsRnBEUThPd25KeWNpMXd1MTRWQ2lJbUF1dXFQOGUrVWFacHY2YnIrZG5WMTlkc0RCdzdjYm9sYk82dk9hZEhaMXB2ejMzYUN3U2x5VWtwOFBwOU1sMXhJdGQ3U3hkOXM2NjE3OSs1dHJMZCsvZnJoOFhqVXU2ZUU3Yk54Nk5BaEtpc3IyeVVIbkc2bkxXcTJsV1piYUVjcmFJWmhKTjFNMHpRN0ZMTlFLSFN4MSt1ZHBHbmFKR0NFZW5lT0svK094K092Ky8zK053b0xDOThta2NVMVU4V3VJNUd6a3cyMnV3cmc5WHFURmx4SEFtZGJjTGIxWm91YjB6MU5UUzZVbEpUUXExY3Y5WTRwWVR0MmdzRWcrL2J0NDhDQkExUlhWNmRORGh5cGZDUEY3UlFwaVFHbmRTWlNMTFNrbUlYRDRTbGVyM2VLRUdJSzBGZTlNeWVFS3NNdy9oRUlCTmJtNStldnBiVmNKYTNJT1dOeXRxc0s0SGE3cGJNOHhCYTVJMWx2cWU1cGJtNHVlWGw1OU9qUmc0S0NBb3FMaStuVHB3LzkrL2NuT3p0YnZWdEsySTZPL2Z2M0o2MDBaeXd0WFhJZ05aYVd4a283a3FDSjFKaFpNQmk4eE9melhTV0V1RktKV2FjUXVkVk5UVTJyaTRxS2JFdXVqY2lsV25IMnZ4M3VhVHVCYzd2ZEhRcWMwM3BMVFM2a3h0NUtTa29Pa3oxVktHRURBb0VBbjN6eUNWVlZWVzJzdE9ibTVqWTFhVWRaWkN0czE5TjJOdzlqbldtTmpZM0RjM0p5dnFacDJ0V2dhaTA3S2R0aXNkZ3JCdzRjK0Z0cGFlbFdoOEFaRHBGenh1YmFXSEYyOXRRV09VdllaRHIzTk5WNmM5YSsyWmxUMjNycjI3Y3ZBd1lNSURjM1Y3MURTdGphVzJsMmdpQmR4ck9qRWc1YjFOSUptck5Md0Nsb3RwaXRXclVxWTlLa1NkZTYzZTdwUW9qTDFHWFlkVEJOYzAwb0ZIcjVxYWVlZXVYQkJ4OE1BL0dPUkM2ZHdEbHI0TklKbkMxdUhaV0dwR1pPN2NTQ3N0NlVzQUVRQ29YWXUzZHZ1d1NCYmFXMXRMUWtZMmxINkJ3NG5LQUpwOXZaMU5RMElqczcrenBOMDY0RDFKWFl4ZjhtNnJyKzB2NzkrLzg2YU5DZ2JRNVgxVWgxVlIwQ0o0OGtjQjFsVHUzWVcwNU9UdEo2UzAwc25ISEdHV1JsWmFsMzVuUVZ0b01IRHlaZHo1cWFtallKZ2lQVnBUbEVMYTJnV1FXMWJkek5VQ2cweGV2MXpoQkNYS3N1dVZQU2lsdloxTlQwVW1GaDRldFN5cmdRd2lsd2h0T0NzNFhPR1lkTEZiaU9ZbS9wNnQ1czE3Um56NTVKMTdSMzc5Nm4vWHZpUHAxK1djTXdLQzh2WjkrK2ZSdzhlRERaRXRYYzNJemY3eWNZRENaRkxScU5wdTBlc0FYTkVVZExLMmczM25pamE4bVNKVGU2M2U0YmdRdlV4Ly9VUmRPMGFmbjUrZE5pc2RnN08zZnUvUE10dDl6eTBzYU5HK09XbTJwSUtkdGxWZzNEa0tacFNrM1Q3RmlzZEpZRXhlTng2U3dYc2owRVp5akUvcU5yL3hFT2hVTEpkcTJ5c2pKY0xwY1N0bE9kcHFZbTl1eloweWJyNld5Sk9sS3hiUnEzVXppNkJKS0N0bW5UcHR3UkkwYk1jcmxjTjZGcXprNHY5MGVJTDJWblozL3BYLy82MXpjamtjanlaY3VXL2VXMjIyN3pXOVpidkNPQmsxSktSNkcyVStCa2FndWVzOWY0U0FKWFdscEs5KzdkbFN0NnFsSlpXVWxGUlFXVmxaVnBhOVBTRmRzZXhrcExHMFBidG0xYmo3S3lzbHRjTHRjdHdDRDFNVC85TUF5RHlzcEtCZ3dZWUgrclBCS0ovT0dWVjE3NTgzWFhYZGRvVzNEMlljWGd6SFF4T0dmZG05TTlUUzBMc1l0NjA5VzhsWlNVTUhEZ1FFcEtTcFN3blVwSUtkbTVjeWVmZlBKSnN1RDJjRm5QMUE2Q0R0eE9POHVwU1NuRmh4OSttSGZXV1dmTmRybGNzNEV5OWZGV3d1WVFOcHM5NFhENDkzLzYwNStXMzNycnJjMUhFRGpUMFhTZjJya2cwM1VzZEpRMXRRdDZCd3dZd09EQmc3RzZKWlN3ZFdVQ2dRQzdkKzlPeHROcWFtcVNXVTlud1cwSHJxZEliWVZLc2RLMCtmUG51K2JQbi85Tmw4djFUVlQ5MlFsOFl3OUI5UTVvcUlCd1UrSUF5T3llT1BJSFF2RVF5TzNWbVlUTi9rTzdMUlFLdmZEMXIzOTkyZXJWcTJPV3dOa2laem9Femt5MTNwd0M1L0Y0WkVmOXBzNXBJZm41K2ZUczJaUGV2WHZUdjM5L0JnMGFkTnJVdkoyU3dsWmRYVTE1ZVRuNzkrL240TUdEN1VvNVV1TnB6b0JzT3JmVFRnellXYzVJSkhLOXgrTzVFeGlubE9ZRTBWQUJ1OWNsdmg0TitRTmgwTVRFMTA0aWJBNkIyK2ozKzVkMjc5NzlGU0dFbmlKdzdWeFVSd2VEVExYZVVtdmVVZ3Q2N1pLUTNyMTcwNjlmUDhyS3lrNkxjVWluWFBLZ29xS2lUWkxBbnB2V1VUek5hYVhaZ1ZtbjIrbElER2loVU9nU3I5ZDdsOVh5cERoUmJQa3JWSDE0N0VLNHNRTDZqb0lSWCsxYzFvUVFZN3QxNnpiV01Jd3JhMnBxbHZidTNmdWZUb0ZMVFRMWUNRWnJXSUpNbWQ5bi8vK29rZ3lSU0lSd09NekFnUU9Wc0hXVmVOcU9IVHZZczJkUHNqWEtIalBVVVR5dEE5ZXpuZHZaME5Bd09DOHY3MXRDaUR1VXlweEE0aEhZOEVMQy9meTBWSDJRY0ZmUHZRN2NHWjNxMTlNMDdTdTlldlg2U2l3V1cvTHh4eC8vZnZUbzBlVU9nYlBMUkF6QU5FM1R0UGRiMk5sVHUyWFBLVzZwSW1jbndGTEZMUktKTUdUSWtGTTI3blpLQ0ZzNEhHYkhqaDFVVkZTMDZmZTA2OU02aXFlbFdtbVdxQ1hkemxtelpybWVlKzY1dTEwdTF4eEF6V0UrMFd4WUNvSHE0K1BHdnY5bkdIdFRwL3cxUFI3UDdGR2pSazBKQm9QUFRwZ3c0ZmViTjIrT0FicGx2V20yaXlxbE5PMXg1bFlDU3pxSEs2UUtYTHBTRVdmWXhSYTNZMXNrbzRUdGhORFkyTWpPblR1cHFLaElEb1IwVHVWSVY1OW0vUlZ6aXByVFN0T2tsQ0lVQ2szMitYejNBbDlXQ25PUzNNL2pJV3BPY2R2eVA1M09MWFhRTnlzcjZ5ZnZ2dnZ1eFRVMU5VdDY5Kzc5bGhBaTVuQlBCYTA5cVRMRmduTUtuRXkzRkNpZGUycFhBUXdlUEpnZVBYcWNZc0xtWDhHTVVmUFlrSHNOdi92d1VTWjJvUmRmWFYzZHBwekRibUpQVjNUcktPVVF0bm1leGtyVEtpc3JleFVYRjkrcmFkcDNsTHFjSkJvcWpqMm1kclJ1YWQrUkp6U2g4Q25jMDR0NzllcDFjVFFhL2ZYcnI3Lyt1eWxUcGh5eTNGUE5LWENKWFRUQzdNaDZjN2lxSEkyYk9uanc0Rk1xcWRCbExiYjkrL2V6YTljdVB2bmtrMlE1aDdPVElGMlNJTlZLTXd6RGFhVnBrVWhrdXNmaitRNHdScW5MU1dUWEc2My8xZy94MEkvL3diSUdHRGZqNnl5ZmtBa1lWSDY0aVlkZTNjdjZ5Z2hrWmpONjVBam1UUi9DYUtzSFBMcC9Od3RXYk9HVnZYNENaRkE2dUQ5M1RCL0w5TjNyWU96QVRuOEt2Rjd2dHk2NzdMTHo2K3Zybnkwb0tGZ3RoSEJaN3FudWlMMEpaL3d0amNCMUdIdEx0ZUJzZ2V2eVUwTDg1YXg3WlJudVNhUG1zUWNnOEJJM2w2NWo1a3NiV1ZpMmxSY1hQTVRpTlZ1cGl2cm9PMndpTjg5ZnlDMmo4enJGYXk4dkwyZjM3dDFKVWJQTE9WS2IyRHNTTldmR1UwcXBWVmRYOXlzb0tQaXVFT0l1cFNvbm1jQWhhUHdrK2QrdHIyOWtSVVBLdGZ2eHY1anhiRGxWZUNnZFdJeXZvWllONjljem94N1dmbWNJSmMxN21mUDRPN3dXaHNMaVlvYlJ6SWF0TzVuM2VJeThIN3FZZk5haGsxTG5kcXdJSVVibjUrY3Zqc1ZpdjNubm5YZWV2L2ppaXl1RkVKckRQWTFqdGZMWmswVHN6S2xUM0p4Yno1ekxnK3pZc25PNFF5d1dvNnlzSzlhWmw3Tml6aHdXcmRtRzM1ZUxlK2JNQy9uZHNqZXA4cFp5NlEzWGNHbVJuM1VQeldMK0tqOTlMNXpPSFNYbHZMSnNGUXRuK2NsYnU1VHBKM21wMVBidDI1T0Z0ODZlejhOa1BvV3oxOU5SbDZaSktVVWtFcG5tOFhpK0IzeEJxVXBuaUM5c2IvMTMvUTRXdk5wSUxPVXVXN2ZXRXMzTDVzSXJMbWZwaEJ3STdXYldEOTdoemIzN1dCOGF3dVNLZld6MVpOQjMyRmhXM25vR1JiVHcvS0tYV0ZoUnhhcTlNTG0rb2tzSW00M0g0N2x0NHNTSlkycHJheGNYRlJXdHNXSnZtaVZxdHZWR3duQ1RxZGFiU0luRGtlcWlPamVuMlFJM2RPalFMbmJoUktIb0d1WXZuOHJrdkJXNGI1bDNKYTh0ZTVNcTMyaG16citUaVpUelRIa2RVTXJVZWZPWk55ektwV2N0WnRXZVhQTDhPTFlybjFpa2xIejg4Y2ZzM3IyN3pjSmllMnVVUFprakpVbVFLbXJKZU5yMjdkdTdsNVdWZlYvVHRIbEtUVG9SOVJYV1AyS3MrZXNIYktBSDR3YTJzS0ZDVDk1bC9MVmZZMk82QVZBZUwza2V5QnM1a2JkR3BudHdGM2tlU3p3SGp1OVNwMFVJY1c1aFllRnprVWpraVQvKzhZKy9uVDE3ZHFObHZlbTBqc2d5YkVGenh0N3NRYWRPY1V0ZCs1Z1F1U2hORmUveTV5ZjJVampyUDNsczV0bGRxQnhrR05QbkQ3T050M1F4dGpJbVhqbUtKN1o5d09Jcng3Sm0xSGpHWDNvTk0rK1p6TENUNUlucXVzN0hIMytjN0NaSUxieE5MZWV3MHRtcFdjOWtnaUFZREY3bzgvbm1DaUVtS3lYcFpGZ3RVdEc5bTFpd0tVTGZDeVp5YzN4ZEcyR3pxZjF3RXd2ZWE2WjJieFViNGhsY2VPMG9KanMzMUIzYXpVT3ZWbEZaZjRqMUZScDl4NHpsanNGQVBOcGxUNC9QNTd2bjVwdHZQbnZTcEVuUERodzQ4RjByOWhhelhGTWhoREFTaGxwcjNNM3BtcVpNRWtrSVd6eEMzZDR0dkw1L1B3ZjhKdTZNWGt5ZHZJTVBQNHh6OXRsbmQ4bTFmMm1UQjhQdVhNN2EwU3RZdHV3MTFxMWZ4N0pIWDJQWjc2NWs4ZG9ubVh5Q3hTMFNpYVFWTmJ2d050MCtBb2VsbHVwNmFyRlk3SGFYeTNVZjBFZXBTQ2NrMGd3MDgvenkzVlJsOXVPSnEzdVJ0eUw5WGYxNzk3RnFrei94bjd4dURDdE9xY2Z5MTdKbVV3VjFBTzVzaHAzUkxiRUkvTE1VL0hZQ05FMmJOR0RBZ0dGK3YvOC84L0x5L2d4b2xudWF0Tnh3SkJac2o4ZXkzb1Rsc21LYVVScXJ5cWx0Q3FPajRjM3J5YUJ6aHpQMjNITTRTNnRnNTg2RXEzcjIyV2VUa1pIUnRjNFJnTS95VWFOUndMK2VaK2JNWmRGcmVjeDhjaW12Ymx6TFE2T0F1bldzMm54aVgxd3dHT1Nqano0NmJKMWFTbHhOeEdJeFlmZDhXbWEyWnBxbVZsVlYxU2NlanovbWNybWVVS0xXdWFuOTEwWVdWOEs0cThjeTlUQ1Ryc3V1L2hwN252NEdHKzQ5aTdOQzFTeCs5bCtzQ1RudU1QZzhOajU5RTlzV1hNdzFCVUZlVy9FNmkvWWFwOHBwNnBPYm0vdlRhRFI2LzZwVnEwcWtsQm5XUjlrTGVLU1VMaW1sWmwvL1ZneE4yTjVNSkJJUjRXQXoxUTBob3FZZ28rZ01SbzRZekJrRkdlak5OUnc0Y0lDS2lncDI3dHpKUng5OVJEQVk3R0lXbTYrSXZGd2dzSVlGMDJaUnZuQWhlYlZyV0xWcUhWc3JQMkJ5U1MzcnlnRnZHYU5PWUxJa0VBaTBzZFNjTFZLMm9EbkhkOXV1cDFXZjFpYnJHUXdHSi9oOHZ2dUVFSmNxMmVqa1pCaXMrTDhEQklBTnkxK2lkSG5yVFJ1Vy80VUorNy9DcTVkNXFkVmQ1QlhrVU9SeFVUUjRHTmVVYkdOaFJTMGJxbUZpZmd1VllRTmZYamRLc3NCWDBKK1p3N0o1cVRySTVwMHRjTTdnVStaMGViM2UyVk9tVENuZHUzZnZNMmVjY2NaN1Z0ek5UaXdJSVlSaG1xWnBMM2h1RzNkemlXN2RNbVZMTUVLNGVqY2JhejhodDdBdlpXY09ZcWpEWGJXUHM4OCt1OHRNQjNIam04Zzk4NjlrNjRJMTdDa3ZweXBhd3AxUExzWC8wQUordCs1M0xJNTVLVHpyVXU2WXQ1QmJUbEJUVVhOemMxTFU3R2IyK3ZyNmR1N25ZVEtmeVhoYU5CcjlodHZ0dmg4MS9MRnJrTm1Uc2pQN2NLRWo1RkZiZVlodGZwUGM0bUxHbnlGWXMveGw1bTJGY1RPK3h2SUpPUkJxNElNR0FDK0ZtVkM1L25VdS9aOUdjc2RjekZ1MzlpZVBNT1hWWVVBakw4L2I2WHBHajROcmVzbUFBUU1HTkRRMFBKV2ZuLytLNVpxS0ZOY1VaOXpORmptUEoxTjBMK3dtUGVnRUEzNmFhei9oZzlvcWF1T1hjcUhWMmVEc1VUMzc3TFBwMXExYjE0aXhsVTEva3JYVG5kOGV6NTNQdnNxZEorRUZOVFUxZldwUmN5UUp0RnR1dWNXMWVQSGlIMmlhOWlDbjJXNkhMazNCY0NaZmV5bk9yTTc2My8rWm1lc2pETHRrSW8rZWwwbXRweStGVy9lellmbkxUSG92SDE5MUxkdjhrSHZtRUtiMmdoTFBFTWF0V2MrR1RldVlWRjFFbWQ3TWhtb1Q4dm94YzFnbUZBODk1VTZiRUtLc1I0OGV2d3lGUW4zR2p4Ky81S09QUHRJYzFwdHVpVmt5N2hhUHg5dGtUS1hYSzNNS2VsUFlHMkxCSU81b000Mk55YktSTnNmWlo1L2Q2VWVPZDZvUGZHTmo0eEZGTFozN21ab2tPSFRvVUwrQ2dvTDdoUkN6bFZKME1ZcUhKdWF1SFlhaUwweGtPWnRZc0dZdjYzZFZRMlllNHk0WXdmeXJCeVVtRlJRTTRkbDdYU3hhc1lVMWU2dlpRQVpuRFR1TE82YVBZV28zb0dEZ3FYcjIzSm1abWZQZWUrKzk0dGRmZi8wM2wxOStlYVZ0dVZuV1c5eStZN3FrUXVLTGo4emNBakpsQzgzTjZZWE5GcmZPM0YvYWFRWk5Pa1hOem43YW91YU1xYVd4MU96V0tNMDBUUkVJQkw2UW1abjVnSnFaMW9YWnNMUk45OEZ4cGNjQUdEZnJjM25vb3gwMGVTSXdER1AxenAwN0Z3OGJObXdMRUxXeXBqcVFYQStvYVpvVVFwaldkRjVwN1ZTUXpwSGo5a1RlN3QyN1UxQlFRSzlldlpJREt6dXp1SFVLaTgzcGZxYUsydUhjVDZ2Zk0rbCtoc1BoeTd4ZTc0T295YlpkbXpNdmdvMHZmSDZQZlJyZ2NybW1EQjA2dEtDeXN2THBrcEtTdDZ4RWdtMjVJWVRBbVZTd2cyNnRsbHN5RnNmaGpKL2h3NGQzU3JmMHBBdWJNMUhnRkxYR3hzYTBFenBTM00ra3FFV2owUmx1dC90QjRFeWxERjJjL0lHSktSekhlOEpISjUvczhUbkUzY2IyNmRNbnY2NnU3cW5Dd3NLL1NTbWRTUVVkUjFMQklXRFNjbDNicVZrNmdSTkNNSHo0OEU2WFVEaXB3dVlzNlhERzFHeFJPNXo3NlJTMVdDeDJoOHZsZW9pVDF2Q2xPTzZNdUJyOGg0N2ZUTFllQXhLUGVab2hoQmhVVUZEd1VGTlRVMDczN3QzL3kyRzV0UWxGMmVJV2o4ZlRpbHRIb21ZZkkwYU02RlNsSUNkTjJJTEJZSWVKZ2pSMWFzSzU0OU1wYXJxdXo5VTA3U0VnUTZuQktjYTRXY2RuaW02UEFURG0rdFA1VEJaMTY5WnRma3RMUzNaT1RzN3ZuVzZwVTdUU2ladWRYRWdWdEZSaDB6U05FU05Ha0oyZDNTbCtZZTFrUEttelRlb29zcC9DdVVIS2pxazkvZlRUSGwzWGY2aHAya0lsYXFjbzdnejQwaDBKRi9LenVKL2pacDF5dFd1ZmdvenM3T3dIUXFIUTdWZGVlV1cybzFQQkE3aXRUZ1dYYVpyQ01Bemg2RklnR28wSysvTVlEQWJ4Ky8wME5UVlJYMS9Qb1VPSHFLeXNwTHk4bkk4Ly9waElKTklwZmxuWHd3OC9mRUtmVU5kMS92M3ZmN2NaUGVTMDFGSmlhc0xleUc0bkNxU1U0dDEzMzgzNXlsZSs4aU5OMDM2Z1B2Mm5BY1ZERTdHeFVKUFZTM3FVVnRvNVY1L1FLUjVTU3Z4K2Y2ZXU4Zko0UE9kTm16WU5sOHUxZGQyNmRmRU9wbmZJTklrRGtlcVNPcHJzMnh4RlJVVzRYSzdUUjlpa2xHelpzcVdOcUtYYkpKVTZkc2dwYWp0MjdPZ3hkT2pRSDJxYTlsMzFpVCtOeU93T0phTVNJdWZMU1RoS25neUlXVDJNdWNXUVhaZ1FzaUdUb1BTQ3hNK2NRTHFDc0FHNDNlNng1NTkvdmlndUx0Nyt0Ny85VFhkbVJqc1NONmNBT3V2WlVnWE8vbHBjWEh4U1J4NmQwQmhiUjcyZlR2ZXpvNUlPS2FVb0x5OHY2TisvLzROQ2lMdlZKLzAwSmJkWDRsQU5jcDhKbjg5MysyMjMzYVo1dmQ0bHQ5OStleTIweHM0Y1ZwbGhHSWJ0YWJWSktEamphODQ0bTh2bHd0NWFQM3o0OEZOZjJPekp0eDJOSGpwTThXM1NVbE9pcGxBY1YzRzc3YWFiYmlJYWpUNDNaODZjQnFkbGxrN2NjR1JMT3hLMlZIRTdXWk40VDRncldsNWVudHdtZGZEZ3dRN0hlYWNyNmJCamFwYjdPVWRkam9yT1NsZHhSVlBjMGpFalI0NlVRb2gvdi9ubW00WmxqYlZ6UzFQRXJsMjh6WGtPbk82cHkrVWlQei8vMUxQWTl1L2ZmOVF4dFhSMWFrOC8vYlJuNU1pUkQycWFkby82NkNnVXg1K01qSXpiSDNqZ2dmaW1UWnVlWGIxNk5la3NOOU0wRFdndEJiSEtSZVRoM0ZHWHk0WFZwblhDdDE5OXJzSldYVjJkWEpHWHVuamxjREUxWjUzYTdObXpIOVEwN2Z2cThsTW9Qajh5TXpPL3RXTEZpbGgyZHZadmJVRnppSnZFV3RKcythYkptSnNRUWpyZFVPZGh1Nk8ydUozSXZhV2ZtN0RaRzlxZDdtZEg0N3hUWTJvcHhiY1Bxc3RPb2ZqOHljcksrazRnRUlqazV1YitrYlpaVXBsYXhHdC9YeVNRSGNYWmJLdk5GcmNUMVRUL3VRaGJPQnh1STJyMjRwWG01dWJEdXAvV0tPOWttNVRWVWFCUUtFNFFPVGs1MzJsc2JBejE2TkZqcFdXMVNWSmliSmE0T1MwMklZU1F0cWc1QmM2MjJHeGhPK2VjYzhqTXpPeDZ3aWFsWk1lT0hlMTJGS1JhYXRZMktlY1NZK3lGSzlGb2RJYlYrNms2Q2hTS0UwdEc5KzdkNTFSWFZ3ZUxpNHYvTGhQOVYyMCszL1pYZTJDbFphMjFzZHljRnB2VEpmWDVmSXdjT2ZKenIzRTc3c0xtRkxYVTdLZTk5N09qeWJlbWFZcHdPSHlaTmFWRE5iUXJGQ2VIb3FLaW9ydjI3dDNyUCtPTU0vNlpZcm5aOFRhNzlBT0hvQWxOMDJSSGNUWmIyREl5TWo3M01wRGpLbXdWRlJYczJiT0hxcXFxcEtXVzZuNDZ1Z3BJS2V2UUFvSEFGNng1YW1yMGtFSnhFaEZDRE9yZnYvL3RtemR2YmhvOWV2VEhsdVdXbk5zbWhHaGp0WkdTSVUyTnM3bmRidHh1TjE2dkY2L1hTMFpHQmdNSER1ejh3bFpkWFowVXRlcnE2cVNvMmYyZkR2ZXpUYXVVYzV4M1ptYm1BNmdoa1FwRnAwRFR0QytPR0RGaTlzcVZLeCtkTm0xYWxVUGNwR04yRzZacG1uYW1OSjNWWnNmYW5CbFNlMEx2NTVVcFBTN0NGZ2dFa3BNNnFxdXIyelMxTzJOcTZjbzZwSlRpbGx0dWNWazdDdFE0YjRXaUUrRnl1UzYvNG9vcmFvY09IZnJZOXUzYnpSUnhzek9uMHQ0cWI0dWJNNWxnVzJ6MlY2L1htM1JKczdLeVBwYzVicDlaMktTVTdWcWxuSlphdXFiMjFBem80c1dMZjZBV3J5Z1VuUk92MTN2anUrKytXNU9ibS90N1M5RE1GSEdUcVpsU1RkUGFXRzdwU2o5OFBoK1ptWm1NR2pYcXVDY1RQck93N2R5NWszMzc5aVhMT281bVRWNUtCdlFicWxaTm9lamM1T1RrM0ZOZFhYMm91TGo0NzRDWnhpMXRFM096eWo2UzRuYTRXRnRXVmhaRGhnenBQTUpXV1ZuWnJsYXRnMVlwMG1WQWc4SGdCR3Vac2RyN3FWQjBidHhGUlVWM2JOMjY5ZEN3WWNQZXQ2d3oyMHBybHltTngrT3lvNExkZExHMjdPeHNTa3FPMzBiMlR5MG9UVTFOYVd2Vk9oQTFrYktsWFR0dzRFQWZuODkzSDJvQWpVTFJKUkJDbEEwZVBQaVdGMTk4OGNBTk45eHd3T0dTSmkyNGxQcTJwRXVhVHRpYzRwYVZsVVZPVHM1eEd5RGcvalQ3R3czVFpNKy90MUs1ZXcvVis2dG9PRlJEYzMwOWdhWm1RdjRBa1dDSVNDaEVOQkpCajhTRXJzZUk2M0ZoR3FhUU1pRnNQVDNoZWFKcDM2WHFjbEdjbkUrcEJpNFBhSjdFd0VwdnRqb25SNEhMNWJwNDJyUnBGY0JUdE1iYlROSWtFMUxGelpsSWNMcWt6a1RDeUpFamo4djAzVTlsc1pYdi9ZVEtxb05VMTlUUjBOQklzOTlQUzB1UVVDaE1PQkloRW8wU2pjWFFZN3JRNDNIaWNTTXhObGhLSVNWYXJIcjM3VUtJdTlSbG9qaHBTQlBpVVNBS3NSWUlOVUpHTG1UazJkNlVvZ015TWpKdXJxK3ZyeWdvS1BncllIU1VUQkJDU0R2ZWxtcTVPZDFScDdEbDVPUXdlUERnRXk5c0I2dHIyRmRaeGFIcVd1b2JHbWxxOWhNSXRCQU1oUWlGSTBRaVVhTFJHSHBNSnlGcWNSSXhOU21rbENKWXRlMUNsOHQxbjdvOEZKMUw2QXdJTjRFZWhweWVDWXRPMFNINStmbDNiTjI2dGNLS3Q1a3BoNVJTeW9TMkNlTHhlREk3R28xRzZVamNNak16aytVZnZYdjNQbkhDRmdxRitXUi9KUWNQMVZCYlgwOWpVek1vTWpJQkFBQWdBRWxFUVZUK1FBc3RTVkdMRUkzRmlPa3g5SGhjNlBFNGh0RTZnbWo3aHYvdDd2UDU1Z0o5MUtXaDZKVEVvK0EvbUJBM2wrZHpmN3AxNjlaMW1sLzlvb3N1T3BhNzl3WnVBdmFTaUxHMUVUWkFXaVZkcG1FWXhPTnhHWXZGUkRRYWxmYTJxNWFXbHVTMnErcnFhcXFxcXFpb3FHRG56cDJVbFpXUmtmSHBXOFdQU2RqMjd0dFAxY0ZxYXV0c1VRdlFFblJZYXJFWXNaaU9yc2VGcnNjeERCTkRXaTRvaUxJekJueGZ3R1QxNlZGMGFzdzRoT29UdXhWT0FHVm5mcmEreWZKZDJ3SHc5ZjNpcDM2TWFOVzdBRlNkK2VTeC9OZ2xZVE8yYlZENTkzOUxZcXU4Z1oxSUFDa1FVa2dwTUUxSlhFTFVnR0JjYUNJbU5XSm9Jb0pMaEhDSklHNlhIN2VyQ1krbkRvLzNFQWNYWlhIR0dXZHc1bTBmZmFyZjU2anQ3ZjFWQjZpc09raE5iUjMxalUwMCt3TUVXb0tFd21FaTRVUmNMUmFMRWROMWREMU8zREF3REZOSU14RlhpeHpjT1UzVHRIbnFVNlBvTXBiYjBhNzZPNDNKMUx6ZmVuZmdqeWVRbU1UakE3eVd3ZVNTU0pjRVRTS0ZpUlFHa2pnbU9nWXg0a1JsbklqVUNjc29RVE5Ld0F6VGFBU3BpL3VwcmEybHBxYm1VNyt1b3hLMlFFc0wreXNQY0tpbWx2cjZScHFiL1FSYVdoTEpBcWVvV2RaYXNsN055b0JXNzNpdm44ZmovcDY2REJSZGluQnpJc21nT0x4UDZ1ays2OW1pV2IwN0VEZE5nbVk2eEUyWHBraUtHem9ScVJPU1VWck1DSDRqVEdNOG1IUlBXNHhQdDRENXFGelJUL1pWY2FDNmhycjZCaHFiRTNHMVlEQk15SkVCalNXU0JiYW9ZWm9TS2FXUVNLMGd2OGQzZ1Mrb1MrQVU4dGFhWXdTZTIwSGtYOVVZVmFFdThacGRmYlBKT0s4bnVkOGNndGJOZXhRL0lSTjdTMzI1SiswMWYvTFhKM21HYS9uNTFiMVA5dG5EOS9PYktMaWlqc1l4THhPT3RkNGlFS012elJ2eGRXcjV0ZTJTU2pDRU01a0Ewa1JLQXhNQmFOSVFMaUdrUzJxNGhZWmJ1dkNZVWJ6Q2pjOXdvelUzazVtWlNhVWVZYWpyMkVQeVI3VFk5bGNkcE9yZ0lXcnI2bW13a2dXSkRLaXpzVjF2NjRKYUdkQ0VDN3BydWlydE9QWHdQL0V4d1JWN3U0eW9BUmhWUVlJcjl1Si80dU9qL3lFOXJON3NvOENuZVc1K2IrQlBKamdzTmkvZ0Fkd1NxUUdhQkdGQ1dwYzBLblhDVXJkYzBnaCt2NSttcGlZTzZVMGMwQnVQcjhVV0RJYW9QSENRNnRvNkdocWFrdlZxd1pBdGFqR2lscWpGNDNFUk42d3NxT1dDVm42OHZwZkg0LzZPZXR0UFBTTC9xdW15cnoyNnFmN283eHlQZHNuZnNmb2ZqL0RTM21JSzNINWFHZ080aDAxa2NHQUxlNXI4TkllTEdmK05temkzNlBobWZYdDV1dDBFZkp6T2FwTklDVUthU0ZNQUJsTEdwU2swWVVnM2NhSm91SEVSbGk2OHBoc1JETkxjM0V5dEhpVkh5NkM3SzRzc3pYZDhMTFpFdlZwTnNsN05GclZFRVc0c1VZU2JHQmhwdWFBbXBqUnRGMVFVRnhYZEM0eFJNbkJxSVFNNlprTzB5NzUrb3phTUdkQ1A4cGZ0dWpHMmVPR1grT3JzNzNMcnR5OG5ZK05hNnMrOWd4dnVlSkNaWS8yOHZhN2l1RCtmUUl3Q3BsdFdtdy93U2l2V1ptbU5JR0cxWVZ0dGNXbUlHQVl4YVJDVk9oRVpJeVNqaEVJaFdscGFhSXdIcVkzN3FZbzFIQjlYOUZCMUxRY09WVk5iMTVBbzdXaHBvU1VZSWh3SkU3V0tjR05KYTgyd3V3dnNMS2dJSGRneFdkT0VzdFpPUVVTdXAydi9Bb1pFNitxL3d4SHhrSjJibTFnYWtwbFBkazR4L2ZzbGZ1ZWMzRXppa2MvTnhmN21ILy80eDNQVHVLUjJsbFNrWmtuakdPakVpVWtyVTJycVJDSVJRcUVRVFVhSStuaUFRM296TmJyL3N3bWJIbzliTG1nOURWWnB4eWZ2ck9LdmY5L0EzdVlva1ZnMFVZU3I2OFNqQWRIVTdDZXN0M1lYekpweGpjdm45ZDZiN3JFMy8vUjZTcys3bHhjUHBOeFE5ekl6enB2R1ErK2xjUjMrN3llTXZXa1o1VXBUVGlPeXlQajFMZlRaK1RXeUN4MFg3SVR6eUY5OUM3MTMzazN2ZDY2bnh6Zjd0N21JajNTNzR2T25UNTgrTXdlSTdoa09xODFqaGIwMGFjWGFaRUxZRXVMV0prc2FKMEpDMk1MaGNLSUVKQjZpTGg3Z29ONUlYQnFmWHRpU3BSME5qVFQ1L2JRRWcwUjBBMHcvRmVYVmhHSzZuUVVsYmlSTWRkbGFpS3M5OS9qUDd3YSszT0d6eGo1azBhOWVwL2FvWG1JTGExWjlRTW5VU3loVDE4enBZeFZPbWtDM1MxTWEwMHZIa1AvMENGd2IvMG45VlgrazdwZDF1Tysrbk81Znl6cTYyeFVuQkUzVEpxNCs0d2RUSFZhYnAxWGNwSXVrdUxXNnBEcEc0cEJ4WWxJbkdvMFNpVVFJR2hIOFJvakdlSXZsa2paK09tRnI5Z2M0Y0tnNlVkclIxSnpvQXcyR2lNUk5wQURaY3BDcXhvamRCeXJpaGt5NDExSUtwQlFONVI4TWRybGNjdzc3ckRuWjhNWi9zdWlmTFVkK2hYVnY4OUo3ZzVoNVVTOTF4Wnd1NVBZbjc0RUJHSzlWWWpwQ2VlNUpaK0twM1Vuekk5dUpiVzlFLys4M2Fkbmd3amVwNzFIZHJqaHhkSE5sM2ZUSDR0djdPY1dOdHJWdHdsbmI1clRhWXNTSnhXSkVvMUZDTWthTEdhSFpDRkVmYjZFNjNrVEFDQis3c0ZVZFNIUVhORFEyT1ZxbXdzVGlKcmk3a1o4aENkZlhFZFRqMXVESTVLUVNJWkZhWHA3NDF1WmxQeW1aTm5reXBXTW1NL2FhZVN6Nlo5dkFuM2ZnVmR3ekdWNzY2WE5zUGtJTXV2YU52N1A1QzVjenVmQnc0cmVQelZ2MjRWZlhVeWNUcUI1NEovVEY3U3dERzNzUlJlL2RRTjdZamtiVHVQRGNQWUhNdWswMC8zZmJVcEw0MHYvaTBPVnZFWXVsL0lqUGRWUzNkMFVHWEQzblU5V3dGVjgyajFzdnN3YzNuc21WYysvbUhHdFBzZnVjTy9udU44NDV4a2MwaVA3Z2VRNk1hRnZEZGhqNm5wOHorR3BTRXdsQ3VLeERReE5KcTgxSUpCS0lXNGtFWGRlSnhXS0VaWXlRR1NWZ1JHaUtCNms3b3kvaDMxeEV6OWR2U2g1Ri8zRm11M2tzYmNvOXFtdnJPRlJUUzUwOXRjTnFtUXBIb3NUaUVreEJabEUzWEFlYThEZTdSSmEzdFE4VWlRZ2YySDVKM2FyNWQ4eDZOc1lOUDF2Q3M0Tmg2L0tmTStmK3h6aHIxVUttSmkvd2ZDWi83OXRzdU9iblBQVGNWYng2ZDBlekpnL3h5aXY3R0Q5ckxIbjJ0dzY4ellLZkxtTnpyRC9YM1AxdEpnZWVZODdTRnNwNnQ3RDVxVkU4K3RSTWh2bVVwcHh3dklWay9lSmlza3ZqeEZmK2srWU5SWFQ3eVptd0o0cnJnYkZFdnZNeUxkc05xTnBINU5VbytwNE9ZaVZEeDlKOUdvUnUvUUM5YUZKS0NNTkFPZ1RRTldFY09lT2lSTzdiZDNTM255WWMyRmZCQzgvK3h4SHZOK21Lci9IRjh5ODZxc2YwWFRTUWd1ZW1BaEJhdVkybUg2dzk4czlvbnB2ZTZQZkFPeGZ0LytrbUlHNGRpWDVTcEFuQ05FR0F4QUJwSUlXT0lWM0VFWmF3UldTY2tCbkRKeUprR2w2YW0zYlF3QmVvOTRTVEc2NWlkYU9RN09wWTJBNGNUR1JCbTVxYUNiUWtDbkhEWWFzSTE1QklhYURMREhKOVFqUkd3a1EwajlCTUtVaThPTTNyOWQ2VmQ5NjNXYms4bjdJK09RQk1uSEU1dzVZdDQ0TUttRHJDOFdTRmx6RC83cGVaOUt2SGVQNmFwN2tsWFNINDN0ZDU2ZUFvNXAyZmsvelcrcVhMNFBiSFdkbDdLNHNldUlzWnVkTjU5cm1yS0FQVy8vUmVYdG81azJFamxNNmM4TGpLdFBQSnFuMlQydnRpWlB6aU1vcXU5K1AvMW44VDNnUGlhMWRSY0VVUFdyYlhRZFVlQWovYTA4R2o5Q0Q3SnlNUXIvNmR3SWNHVE9yQW9udmdlZ3BuNUNOOGNlSXIvMEh6MzBMSGNQdXBUNS8rQTduL2tTZU82Mk5HMzZqZ3dPQ25qdm5uU24wOXJ3SCtEZWlBTHFXTUM3dk9UYUtSNkVyQUJPS1lVcE5DeElVaFJUeWVzTnBrbkFodVFtYkNKVzJvckdISGRTOFF6eWhtZUdhL0k3dWkrNnRhWGRCbWY4SUZUZlNCSmtZUjZZWUVhUkNQeDhIbnd5VWtoaDdIcXZMUjd2L2JydXVGRUZmNkNuT28vY2RqVEx2eVNvYWVONW5TeS82RERiRVk2VHpPa3VuZjVwNkJ1M25pcDMrbk1zM3RXMWY5SGY5RlZ6SGVZWUg1dkZDNVl4OWJkKzZtUE9vbEw3Q1B5Z0JBQy81QTRuYkZpVWY2NDRpaUhuaEhGZVByQzJiTWg2Y3c4V1pvZVM1azRNalpMTmYxRThqdCt3bitYKzV6V0Y3dFhTTDl1YjlSZSsxZmFQamhMdVNrU2ZTNHFjY3gzSzQ0a2JpRWR0bW1nVCs1d09HU2VscHIyNUlkQ1poT2w1VEU5RjFkMTVOZENSRVpTM1FsR0dHYWpDQjFldUN3SFFsdWdKaXVjNmk2cHRVRkRiWk93N1hyMWVKbVF0aU1lRnpFRFlISEpZUVJONFZoQ20xb1hxRkxjN252QkNoZjloQ3pYdXJGd2wvOW5xbEQ4dkVGL3M2TXljOTE4UFNEdU9XQnEzaHAxbk1zZW1ONnFxeXg3Qjh4SnY5c0ZFN1BjdlRkUCtESzU1Ynh1NHBCM1B5ckpZeXVmNW01Mzc2THhiUVFIVGlMSjRlb2krbWtDTnZmM3NCZmREN1pNK0xFbm5xVjVtMDl5UHVQYVJUbHVZQnFBbmNkSVp2bExTYjdtd1BRaXFESFAwdXR2Mkp1Qk5EdC8rNGthK2wvVWZ1ck9pdW0ya2k4RHVMYjZ6RFA2a3ZCdEtHNFgvZ1g4V1RNOVFpM0swNG9QVDNkcmgyaDlmN1hGdk9nYmxsdVRwZFVncEFTYVZyaUp1UFNGQ0llbHk2WEN4MHpVUUlpZGNKbWpCWWpRck1XcHNGb29VWnZwc2lkaDBlNDBndmJBYXNYdExHcHlXcHdUOHhZaTlvTjdycE8zQUNrYVk4andoUXVOQkVYcHBUQ2s5L3ZtOEE0YUdIelAzZVROK2FiVEIrU24zaUdRQXVIeXcvNFJzeGkvcFd2Yy9OVHk4aU5lWk1sSGRIM1htYU43eEtXcHJxVnZ2NU12ZnNIVEUyNnRGZng1QXRYRVkyQ1Q4WFdUaUlob2krc0pmcUMvZjhBL2h2M2dkY0ZzYU9vUFlyVjBUSjdPU0dueFQzcWZBcC9ra1h3MXJXRTkvanhQbkE5M1V1MzBURDd3NlJJeVNpSm5Cc3V2QTljZTVqYkZTY3RUSUg0NHJJQmQwOGVzZmVCVlVtWEZHeVgxR3E1UWlSTXAwVDVoNVlZVG9rdVRYUmNSTkVKeXhnKzAwT0xFYkVLZDFzNHBEZlJ6MXZRL2puRGtRaUhhbHBuckxVRWc0bkJrZEZXYTAzWGRlSlNJakdGRVU4dU9oWkNDSEZOV2UrOEZpRyttWGk0SE1vRzVsUDNyMlU4LzgvZGJIM3Y3engwLzFJK2lFRzBRM1hMWWVMZDMrWlNnZ1JhcjNMV3ZiU1JvaXN2WjloUm5qd2xhcDJVVkZIclcwcnV6OC9EVjlqZXhUVDMxQkhmN2pqcW9oQ05KcjVmRjBQZldJY1lONGE4YjViaUx1MkJaOUpZOHE3SUl2N1dua1QxK21GdlY1eE1lcml6cjcwNzU4dTVwRFRJSjF4UnFhVjJKQmlHSVF6RHdGa0NrbWlVanhFMEl3U3M4VWExdXArSTJiNDlUbXRYczVaY25kY3Fhcm9leDdDR2o1aW1hUzFtUVVpRWVHenUyTmxlV3ZWbjlPMC81S0VSaDNqaWU3Y3g3WUVWK0MrYnhjemhPVVRyRDFPelZuZ0o4KzhlMmZxSE5mQTJMLzJ6RjlkYzFsOWRFYWNhZmZ1VE9ha1VYOTlqTDhHUWEvK1AraC91UVh4dEVrVi8vd2FGUHk1RnZycVd4bDlXSDlYdGlwT0hRQXk5cytlbGw5SzJhTGROSDZsZHRHc21oQTNEU0pSLzZOTHVKVTJJVzhoMlNZMFE5VVlMMVhwVCsrZjc1ejllWWxkNVJic0ZMZjRXeXlWdDNUd2xvdEhFTG9PNFlRaHBTbTNyaHYvTkgxeDJ4anR3bkpzQ0Ryek44Ly9NWWVyMFVSU3BhNkpUY21EY3kxMzY5ZmZaY05VeG1Cc0RqdXB1aG1GUVdWbkpnQUVEanZxaHUvRE9ndzU1NDQwMzB2OWhrbkxQSC83d2h6dWVmLzc1T2lBSWhJQ3dFQ0ptdWFpR0VNSzB0bGxKYTlHTHRMZFkyY3RlY25KeTZOYXRHL241K1JRWEYxTlNVc0tnUVlQYTdFaHcxOVczcjFtelZ1Y2xyRFZyMDFROGJtQlkxcHFVQ1hVdEd6amdsdU11YWdCOUx1Q1c2VW84RktjK0V5ZE83RFN2cFhVdDZPZEc2YWhSb3lZOS8venpLKzFZbXhCQ3h5ci9FRUtZUW9qa21qN24zbEY3VzN4T1RnNTVlWG5rNStkVFZGUkU3OTY5NmQrL1A0TUdEYUtzckZXS05Ic3BTekRvcUZtemR4ZllvbWI1dTZacEN0TnFuZHIwZjZ0eVhTN3RGblZwS2hTS282VmJ0MjdYekowN056ZnBqa3Jwc2R6UnBFdWFXTmRwQ211N2xiQkxQeExyQnhLdFZ2YW1LNy9mVDJOakl6VTFOWVJDcmZXS21qMW5MUlFPdDQ3NXR1SnF1cDRVdG5iVzJvaGhRMllCZzlSYmRYcmk2cFYxZXJ4MnphWGU3T09JRUtMc3Z2dnV1NWoyU1FTWGxGSkxUTjZXd2pSTkxHRkwxclRaNG1ZM3lOc3oyK3dWZm9jT0hXcDkyeElkQmdrWE5HS04rVTY0b0RweG82MjFKaTFyN2NhdlgrMXl1VnczcWJmcDlNVTNwcURydnZZdkZCNkRDcXBha2VOTmZuNytWMHRMUzcxcHJEYk50dG9zY1d0bnRkbmlabzgxQ2dhREJBSUJHaHNicWEydEpSSkpMSC9Sbk5hYU13dHFENDgwREFQVE1LM2xMQWxyYmNtVGkyNEVWT1BTYVV6ZVBXZVRkWFYvWEgyenU0NmwxamVMN09sbmtEZG4yTkgva0NkVHZkbkgzMm83KysyMzM1NXdORmJiNFN3M3A5WFczTnpjeG1wekovWVhSTlBHMWhLMUpDYUdaYTFaRnB2bWRydHZWRy9QNlkzV3pVdjMrMGVkNHA5QURidzU2czMrSENndUxyNENlTk1TdHBpVTBpMkVjSk5JSkdneWdiREtQcVJoR0NJZWo4dlVXRnNrRW1sanRkWFYxVkZTVW9MYkt1V3dkNEltbFRGdTFaRVlwb0VwSlZKS0pJalF3UjFUZ0F2VVc2TTQ1Y25zQmtKOC9zOWpHbkJvSzdUVW5EWmJzVFE0YitlcmkwY052dUtPalpiRjVrRktIWUZMU2d3U2hoU21OREdrZ1NGMTRtYVV1QkVtSGcraXh3UEVZazFFb2cyRUl6VzBoQS9RSFB5RStwYmRIUEwvT3lGc3lXTGN1RzJ0R1JpMkcycEtwSmxZemdKU2VEMmVHZXFLVjV6eXVIM2d5L3Y4bnlmVUNKV2JRUStkZHFkNFlOL2lTY0FIU2FzTlBFSVNSMGdYQ0ZNaWhaUmdTaWtOdzhRd1RPS0dpVzRZNkxwQlRJOFQxWFhDa1NqQmNKUkFNRXhUb0lXNnhtYTBhQ1RoZ3VweHZXMFcxSEpEcmFRQlVpS2E5bTRaSVlTNFZsMzFpbFBibkhCQlRzOFQ4MXd0TmFlbHFBRjQzTzZyL3ZlM0Mvc2xMYlpFbkMxbE53S1lVZ29qRVdzVGNTTVIrOWVOT0hvOFRpeW1FNDFaNGhZSzB4d0kwZEFVUUhPV2R5UUxjVzBYMURRVGJtakNXdE95czdPdVUxZTk0cFMzMVBKNkorSnJKNExtQTZmMTZSNDdZc2lGcEd5elFsb1pVb2ttcFJTbWxKaW14TEFUQ2JhNHhRMWk4VGpSbUU0a0dpTVlpUklJaG1nTUJOR1NUZTVPVVV0YWEzYkNBTEhxVDcvTDBEUk5DWnZpMUVTNHdKc051YjBTL3o1Um5PYWI1bk95TXE2WU9XVkNobTIxU1Z2Y0VyUGFCSW1aUmlKaHRVa013eFFKbDlTYS9xSEhpZWx4SXBiVjFoS080QThFMGV3c3FHNjVvSGJTSUdtdFdTVWVreTY2NEZxZ24vb0VLRTROSWRNUzFwazNCN0lMb1hzSmJmYjhuU2k2OEVMbTQwVEpvM052SFpmR0hYVkowS1MwaFkyazFSWTNUT0p4RTkyMjJ2UldxeTBVamhJSWhYSHJ1SW5qeHNCRlhBb01LWVFoQllZbGFKWnFhdTdDMHVrbkpFT2tVQ2hPSzNvV2RMOEVlTnRodGJtRnhJV1FXdUl2a0pSU0lnd3BNVXdwRGRNUWNjT1F0dVdteDFPc3RsQUVyZFVOalNkSGhTUmFwNlI5aU1iR3h1RkNpTXZVVzZCUWREMmliLzZHb1hlOHpOWk8rdnJjTHRjbGE1Y3NTRTBpdUN5ckxUbk9TSnJTS3RnMUxjdXROZFptSnhJU1Zsc0VkN0p1elJJMk05a1RtaEExUU9UazVIeE5YUjRLeFFtazhqV3V1UE1WdHJWKy9NbnRPWkRKMDZjeGYwb0poeTFFYWR6RmkvL3JaL3owTVNkd3lmZ3VIcnJ4S1phbGprYnpuTXZpbGJPWWZJU2YvdUx3d2VPQVQxS3NOaDJCaGlSUitpR1FwbWtsRXF6U0R6dDgxamJXRm1zVnR0YWtnVFhGd3pSdE4xUm9tbmExdXRJVWloT01aeEFMZmp1SEczb0E2RlJ1V3MyY1I1OWlidmFQZVBiQ3d6VHlOMjdqZDh1cXlMdDhER1VudEhIQ3phVVBQc2F6NDQvOUozT3pNeWNCLzAzYk9Kc2JaTnlxa2hhbUZXc3pURk1haVQ1U21ZaTNHZWhHYTZ3dEhJMmhwYnFnOW9IVmlCb01CaThCaHFtclRLRTRxU3BIeVpncDNEeEVaL09XR2lyLzUxZHQzY3ZxTjVnMjdSZjg4citlWWV3RGI3QkgzOFhjMlE4emQ1TjF1MTdOUzQvL2lnblQ1akQwK29YTVdWdWQzRVVTcmR6RVEvYy96TWhwMzJYb2piL2c5aFc3cUxWdVcvLzRnNHo5MForWmUvOHZtSFRqZll5ODR4bWUzMzZNZFhleFNwNlo4MTJ1V0ZxWmVNN0dUZHgrL1lQYy9xYTE0cno2SXhZKzhNalFRZjM2RGJVRXJkVWRsYmhNS1RYRGxDSnVtQ0pxbUJpbXhOUWpIS3p6VXgrenl6L0M3UDd3Mzd5NVA4VHVEVytoMmFLV0xyNEdDSi9QZDVXNnFCU0trNDFPN2ZaM1dMYkR3N0FoK1pSY09JN1JOUit4eWxyUld2ditSMnd0T1pldlhYc25HMzk2RWFXZU0zbDB5Y004T3NiNjhab3Fhb2QvZzFkWC9vcTFzNHRaditSbDFyUUFzUW9XTGZ3TFc0ZmN3TnFWai9IaHp5YmhXNzJFT2F2cms4OWNWeG5tMG52dlkrMGZGckowVEQyTFhuZy9LWHhIaGJlRVcrNjlDUDcrWjE2czlMUHVOeXZaUFB3cUZsNllCN0VLRnZ6b1JUWVB1WTdYLy9yNGVjNDRtN1F5bzRDbUNTRmNBakJOSW9iRU1FRkNNdWFXR0swR3BtSFM4K3h6RTY2b3cvM0VibmEzRGswSWNhVzZxQlNLazZGbHU1bi8vK1l3UHhsajY4dkU2Yk9aUHlrUE9JZHJocXhrOFp1VnpDdk5aOTM2S3NvdXZLN2ptRnJmYzdsalVqRjVRTjZZY3loNytnMXFneERkOFRZcmdpTjRkdWFaaVRIOEpXT1lQLzBkSnF4K24vSXBsd0pRT09KTFRDNU9XSTJqUjVUQSttb3FJYzNZL2ppdlBUS0hVc2QzTHJ6bjV5eWRsSVd2ZEFxUFhyNk5HUXVmSkM5WXdyd254MUVFUkxlOHdZcmdDSjZjZVNiOXZGd0NMRTIxMm9SSWRDSWdoS21CUUVyTWhQVWxUTU9VaVRpYmhpSEJ0RnhTZDZxMVpydWhnQWlIdzFPQXZ1b0tVeWhPZG93dGxUd21mdmxNRnJ5OGpmTHArYnkySTU4cmJ5cytXcTgyNFlMcUVHME1FQzAraXhMSDJMbWludm40R3FzN3RNcDhueXJHNW1IWVZ5OWk5TXN2VXY3bDY1aHUvVTdSUmorQnBncHV2LzU5Z0Q0REJ2UWY4Y2tuKzk1ckcyZERCd1FTSVlRUW1rQ2ExaFJ6MHpTdGpnUXdwVXdLbTVZcWFwYWxCaUM4WHU4VWRYVXBGSjJUb3ZGakdWM3pQc3Yrdm9YTkplT1lXbkxzaitIcmtZbXZ1cHJLV092M2Ftc2FpUFlvUHM2TGxFS3NYN2FhelNVRDhMMjFtaGV0eFdHK25EeHllMzZKNVNzZlkvdkt4OWkrOGorK21HcXhTZG5haVdCS2lTR2xNR1dxSzJvbUZwU2FpZElQelJJMGU2aWJzTXM4TERkVUNadEMwVm5KT1l0cmhqZnc0cktQS0prd2dxU3VlVFB4RWFLeTZjaEJmdCtJaTVqdWZaOUZ5eXFvQmFMVm0xaXdvb3JSVTg0OXJxVWkwUzJ2TVBldGZPWTlPSWRIdit4bjBlTnZVd240aG85bE1odFp0S0lDUDVDaE4xNlVZcTBsVi9SSnBHWmFvbWFDRUVpaUVWM29ScHh3d0U5ZEhLU1pxR3R6cHlZTmJEYzBGQXBkck54UWhhSXprOFhFU1lQd2JmQno1WGpIcVBhU2M3ajUzSGQ0Nk00ZnMrM0JoVHg2dUlmd0RtVGVqNy9PZ2w4dlpkSTBQOUhzZkNaK2RUWlBUdmswbzkvYng5amdMQmE5TUlrUGZyMkJvaG4zY1VPeEIyWk1ZL0k5THpCMzlWa3NuektNaFQrZXhvSmZMMlhDTWo5UmIxNmZ5MlorZThnL2x2M25oeVQ3Um5GSm1SZ1pqaEJDQXlHbGtGNlhJS3BIT1ZnZncrVnk0OU1rcGxYK0lYcjI3RWswR2hXeFdJeDRQQzVNMDlTa2xDNWQxMyttYWRwMzFNV2pVQndkbjJhdktCK3YrbXlXMEtZL01tbDVDY3QvZVJFbHA4aDVESVlpUzNMR1h2c2kwQUlFZ0tDQU1JS29RT2hDWUdoQ21HNlhKcjBlRno2dlIyYjZ2R1Q2ZkdSbCtzak96RUJMellhU3FGL1RORTJicEM1VmhhTHpFbTJzNFBrVjJ5ajU4cm1uaktnQlpHWDZ6a3ZuaW1MTmFjTnVzNUpTSkRvUlRHdUZnWkhzUk5CU2luS1JVb3FHaG9aaHFHVXRDa1huWmMvTFhISHJNN3pVNHlvV1RzazdwWDQxSWNUWnE1LzVVZThPeEUxSWlVQ0NLYTFNcUxPSDFEcmNxUTN2SkhwREwxSlhqa0xSaVNtOWlyVXJUOTNhK1RGbm56a00yRzhMbXdTWGtHZ0kyMktUUW9LVWR1K29kZGhiclpKWlVWcEhGQW1YeTNXaHVuSVVDc1hKb250ZXppakxTa3RPK2tnY3NsV3JwTjAvS3BPVkhZWjFhS2tXMi9lKzl6MlhFR0tpT3JVS2hlSms0WEc3emh0NVpyK1VodmhrbksxMWxCR1dLeXJidXFOYWlodkt3dzgvZkFIUVRaMWFoVUp4RXVuMi9DUGZMWFZhYlRMUkZKL1lGaS9CbXE2THRFUXRPZExJYWJGWkNKL1BkNTQ2cHdxRjRtUlRXdEpyU0h0WEZLM1ZIVTBZWmFaMUdMSTFFYW81eXp4SXpGNDdYNTFTaFVKeHNzbkp6anpIWWJHMUtmdXc5VXBhV1ZKcDdUODJaR0tza1daYmExSktjZTIxMTdxRUVNcGlVeWdVSngyM3kvV0ZBYjN5WFNrV204c1NORTFLQkZoeHRqYnVhR3VNVFFCaXlaSWxYd1J5MUNsVktCU2R3V2hiOXVoOS9aMmlKcTE5b3poVzh5WGliTTZhTm9mRkJwQ1JrZkVGZFM0VkNrVm40Y3dCZmRza0VHZ2JaeU0xemlhbGlTbk5WdVVqVWI4MlJwMUtoVUxSV2VpV216V0Vkc21EdG5FMkhIRTIwMHkwV2JrZFk0cUVFT0pjZFNvVkNrVm53ZU4yRDZkOWpDM1pMNHF6bmkzcGpyWmFiT3phdGFzbk1GaWRTb1ZDMFZrUVFnejY1ZmRtNVhRa2JpUlVMVm5QWnJ1bGRveE45T25UUnpXOUt4U0tUc2VsNTUvYnh4SXlhK0FrR2hKaFQ5V1ZXSlVkVmhlQ2xJN3Nnc2ZqVWNLbVVDZzZIWDJMQy9vN3JMUjJ0V3hZSTR4YXV4QVN3b2FVVXJoY3JyUFZLVlFvRkoyTm5Lek1NeHlpMWtiWXJEaGJ3aU9WQ01zVkZacmRJeXFFVU1LbVVDZzZIUjZQZTFDS3FMa2NGaHV0NHBaSUlOaXVLTllkemxLblVLRlFkRFkwSVlZNHJMVDJKUjlwRWdnYUlHcHFhZ1p6dUhXQkNvVkNjU1NxTnpGM3pvTU1uWG9mYzlicngvT1JmU3NmdjcvUUtXalNtc2RHc3VURFRpQTRMTGFjbkp4QjZsMVJLRTVYL0x4NC95OVlWQWxVdjhHMDc3OUI1VEUvaHM2YUYvN0N1cDVYc2ZhbFgvRGtlRS9ibTdlL3hJUWJsN0ltOXVsZTRkRFNma1drTGRLMU94QVNncWJyQnVHNFpiRzUzZTR5OWVZcUZLY3BMYnQ0czNFZ0Y1WkE3Wlp0UkljUCtoVExZY0xVTnVxVWpCalVacXQ4a3RLTGVITGVGTVo3UDkxTExPeVJWNXpHSFJWdER5a00weFM2QVc0cHBkQTByVlM5dXdyRjZjWlc1dDc2SXV1Q1llcGlIamJmK0JIUllJQ290NUlKTmRleGR0NDViZU5Uc1VwZWZQclBMRjVmUlMyWkREdDNDZ3Z2dW9CaE9aVTg4LzFuZUdKSG5OaU9SWXhkUFpabkYxL0RhT2ZQN2xqTDdZL29QUHFuYnpEK3pkOHdjaG5jVUJwbTNZNXFhbU9aVEx6cE5oNmRWSXl2OFcxbTNQb09lUmRtVXJtOWdkb21LUHZ5TkJiY09LUlBXMHN0R1Y4VEpsSm9nRzdheG1NMDRZb0tJUWFxTjFtaE9OMFl4cU8vZllTVk0vb3lhdVozMmZpSE9keFJNb2o1enp6Q1c2bWlSb2cxanovREU0MWplSGJKWTJ4ZmNpZlhCRmN6Ni9GTjFGTENuYis4ai9uRDNZeTZhUjRiVTBVdEhUVU5NR1VXYTMvN0NHL2RPNUQxUzE1bVRVdXJhOHp3RzFpNStHRTJQak9Ob3ZVdjhwTTNRNzB0eTZ5OXVBRlNDT0YyaWNRZDNON0VEVUtJQWVwTlZpaE9SM1MyN2doUWRrWXh0RlR5UWF3dnczcWtjMWUzc0d4OUp0TnZ1b2hoT1VCT0NUZmNObzY4OTk5aFhlT25lTnFlWjNITmlNVGF3THpTTXltTE5WQWJ0RzhzNXNJeEJRbGg3WEVPZDB6SVplTTdPMG82RURWN3NRc2tCeFZKM05ZTlN0Z1VpdE9NeXRYUE1HTlpKZjZtTUd4NWtIV0VxUXQ2Mkh4ckJUYy8rRDN1ZEFhb212elVVa0JwVDZjNDlhV0VqOWpUQ1BUNERDL0V5ak5FZFNCTkRLNm9PQS8rSGVtWFlyRUpDWnBJbWFacnk1dTJhOWV1WWlCRHZjMEt4ZWxGeVpRN2VldVphWXp2K3lXVy91RVJYcDE1Sm1kZGRUY2JmNXNpYWdEZDh5aWluajAxYmQzSld2SW83Zkg1dnM3S3lnYkl6czM0MmJ4YmNqcTAyRkxRQ2dvS2VxdTNXS0U0VGFtcG9Ka3ZCcUFBQUNBQVNVUkJWTHk0aERLZ2ZFODlKYVhGNmUrWE00S1o0OE9zZU9GdHRyWUFMWlc4dVBRTmFzLzlFaE9QdTdCVnNlcC9LL0FEMGNxM2VlTE5NT01ubk1rWEI1K1I1eEN5MW5xMkZLUnA0dmI1Zk1YcTNWVW9Uay84bFExUU1vWTgvSlJYZWlpYjR1bmdubGxNdnZkT2FwLytNN05tcjhRZnk2UnMvQlNldldzTVJjZjlWZVdTVjdtYWFkZnZvaktXeCtncE4vRG9wRHlhZC9mSTY4QmFhMTFHSlJDR2FVZ1JqVWJ2OUhxOVQ2dTNXS0g0YkJpR1FXVmxKUU1HSEVQSSt1TlY2c1E1YVh5YkdiZSt6NVcvbmNNTktaWmdaWFhkZ241ZnZ2a2RJR0FmQWtJSUlnSVJFd0pERThKMGFacDBhNXBXcE02bVFxSG83R1JsK1BJY2JtZ2JTODA1NVFNa21xWnBCZXFVS1JTS3pvN1g0MjRYWXlOZGpBMXdDeUh5MVNsVEtCU2RnaDRYc0h6bEJXbHZjcnZiQ0Z2N1F5SnNtZFA0YkJVb0NvVkNjVUp3YVZvNlY1UTJWcHRWcUtzQmVlcVVLUlNLem82bWlSelN4ZFprRzNFVEV0Q0VFRXJZRkFwRnAwZUk5c0tXYXJuWlhWVWFrSzFPbVVLaDZQVENsdEFxcC91WnB1dEFKb1V0UzUweWhVTFJCU3kyekJSUmMyaWViQ053R3BDcFRwbENvZWdDWkJ6R0RXMWp0V21rN2FkWEtCU0tUb2UzdlhlYVR0WlF3cVpRS0k2R0VKdFhQTU9FNjcvTDBPKy9Sdm5KRTdaMkNZTjJBaWRiNTRjckZJcFRsUzEvWnRMQ2o0aWlzMjdSUXVadStoUWJwQ3JmNGFGbGZpWS92SkR0djd5VTQ3Y2twWjUxLy9NR2E2cVA2czZ1dzFoczFrWjRNR2x0UzFBb0ZLY29XemRWVURSbUlENnFlRzFQTVJjTzhSejdnelEyVUp2ZGx3dUhIdTljWXdPdnJWak5hMGUzRmt2cjBFcXpUTFhFSm5nUVVrcXAzbnFGNHJQVDJhWjdsUC9Qazh4WVVZVy9TY2ZYUFJPZm5samFVcGpkazV0LzNINllaTzJtbDVuN20zZFlYNlBqNjNrbTAyZDluZm5qQzRpdVg4cUV4eitpTGdpNTJabU1uMzBmejA1cVcvNGFyZHpFZ2wrL3dpczcvRVN6aTVuNDFXa3NuSDRtUmNDNlJmY3hOM3MyRzc5MVp1TE82My9EME4va3MvekhlU3k0ZnkxYm04S1FuVXZaNWJmeDZsY3IweTV6ZWZTMmN5Z0J4UENwMDRBZ2lla2VmcUFGQ0FxSVN0Q0JPQ0ExRXBhYlFxRTR4U2o3Nmh3Mi92WW1wdlk4aDBkLyt3aHYzWHNPZlMrY3pjWS9wSm1RVy9rYXN4NzlpSkpaOC9odzVTOVllMXMrNng1ZndxSTk0QnMvaTQwUGpxT3crN2s4K2FkSDJva2FzUW9XTGZ3TFc0ZmN3TnFWai9IaHp5YmhXNzJFT2F2ckQvOENTeTVsNVI5bU03MTdKbFBuUHNLcnN3WmFON1JmNXZMUVdqK0gxU3FSbUJPZUdNcW1vUUdHdWdRVWlsT1VtaXJLZXc1aW1CZkt0MWRUTnJ4djJydHRYdjBPbGNPbk1HOThBVDQ4RkkyWnlyemhEYXhZWFhIRXA0aHVlWnNWd1JITW01bXcwSHdsWTVnL3ZTK2JWNy8vS1pNTTdaZTVySDlyRy83Mld0VytWOVRDRGNSSXJsTlFLQlNuQmx0NTZJNi9zS2JKVDEwc2syazNyazdzRE0xK2hBbnZUK1BWZVdQYU5JblhOb2JKS3k1d2ZDK0xrcEpjL0pYMVJCbVlzb292UmRnYUEwU0x6MnF6S0xtb1p6Nit4bXBxajhOdmtsam1Fc2FmMEtxalF1TVk3cXhRS0xvS3cxaTQrR0dXZmptZkMrOTZrSTEvbU1YVW5pTVNMbW1LcUFFVTljakVYMTJQUC9rZG5jcWFBSGs5Q2c0cmFnQytIcG40cXF1cGRDaEpiVTBEMFI3RmliSGhuN0dnekZybVFsNTdyWklwWDlzSVcxaGRCQXJGcVVpSThtb29LOG1DeG1yS3ZjV1VkU0F5bzZkOGlaSi9yMlhSSmo5UkVvbUVKOTdQWi9xVWdVZDhGdCtJaTVqdWZaOUZ5eXFvQmFMVm0xaXdvb3JSVTg2bERDZ3B5Y2UvNVNQV04rcEVHeXQ0Zm5XRlE2RTgrTHc2dFRYMVJKUGZTNy9NSlE4aVIvVnJ5NFFyR2xJWGdFSnhLdExBQjVVRm5GVUM3SzJpdHVlZ2p1dlBTaTVsNmR3d2MzL3pDQ01mc2JLaTk4NW1YdWxSUEkxM0lQTisvSFVXL0hvcGs2YjVpV2JuTS9HcnMzbHlTbUk0ZDlubDEzSFBscVhjL3YvV0VlMCtnS2tqOHNsTi9uQmZycGt5a0ZtL2VZUkplKzdrclpuUTBUSVhLV1U0alhYbStMOUFDSWtwVFNta2xCOEFJOVZGb0ZCOE50UXlsK1BBWVphNW1GSnVjWTI0Nm9lMGxuczRGN3BFQlVJWGdyZ21oS2xKS2YzcWJDb1VpczZPbExLbFkydk5ucDJiUUFPVXNDa1VpazZQYWNvV2g0REpkSUptZWFTNHBaUk5RZ2gxMWhRS3hjbm5NTXRjRE1NSUhNWmljK29hbXBTeVFaMU5oVUxSMllrYmhqL0ZZcFBweFUyZ1NTbnIxU2xUS0JTZG5XaE05M2ZnZmtySHVnTUFOTU13NnRRcFV5Z1VuWjFRSkJxZ2ZXeE50bmRFUWROMXZWcWRNb1ZDMGRscDhnYzdja1dUWW1kbkM5eVJTS1FtSnlkSG5UV0ZvaFB4eVlFYWRSSlMrR0Q3bmtESG9pYXRGYU9KUVd6dWd3Y1BIaXdzTEZSblRhSG9SQXpvMDFPZGhCU3E2eHZ0Y2cvVEZqV1I4RDZsN1lJS0lkQTBnVFp5NU1nYWpyWUhTNkZRS0U0T2tibS9XaG82akN2Ni85dDc4L2lvNm52Ly8vVTUyK3hMbHNrZUVoS1dFRVJBSytEdmlsaC82TldxYlM5WVdyUzlTbHUrYVB1cjFHOEwxUXE5dHFCdG9jdEZieXRXcjFoYnNGcWdWV3BSUkJUVUZsY1VOU3lhUkNBUVFzakN6R1NabVhQTzUvZkhuSFB5bVpNelNiQnN3dWYxZUJ3VEFtYVpNL1BNNjcxOTN0VGFDWSsrbzNiMzg4ZU5pNHZyVEJXbDlJQU5aRHJqM0RKRURMQlJTdWsrL3RCeGNYR2RxZEowL2FBTmFobHV6ZHlZYkFTa2FiRHB1djR4ZitpNHVMak9WQ1dUYXJPRFkzTnMrU0FrdmZPQWFwcld5Qjg2TGk2dU0xWHg3cDVtaHhBMGErdUhsS1poc2tGUitONWtMaTZ1TTBFcGJGajZBOHgvVFUzL3NXQWFmbjdIWjFveGhCd2JJU1JkR1FWQU96bzY2dm1EeWNWMVppblI5QllXM1hrM3hsOTNHMnErOWtzczJOekVuREk3TkVEVWJYNGVhM2VmckxOa1c3QnA3U3ZZM25HaVA2K002eGI5Q3J2Vy9STHZMQmdIQlVCRC9iNDJCbVkyMTJhT1V4SHJ2d0lBV2xGUjhSRnduSThaRnhmWHlWUHlReXhaK2lSMlZNM0Erc2QvaHMwTHowZlR3dzlnd2ZiamdWUVBkcnl3RVd2Mm5LelQvMXV3YnMxTDJOWnhjajY3UzVFUlRBZVNpVHUrdjd6RDd0UUlvSU5rOUxTbEN3Z2tIWXFhMW00WGdBbjhHY1hGZGZvVjNmNFNObUFTSHAxN2Z2bzQ3M0ZYWU9uMWIrT2FwOTVENjVUSmlEaWNOTHRwNmYvRmtzTGI4UExjU3V4NDlPZVk5Mnc3b2wwcWtudVdZZnpqQU9RUldIemZYRnlmQTBRM1A0QkpheVZjVjlpT0hRM3RhRlZLY2YzY0c3RjRTdm80NzhTMmh6QitUU0hXci93OGFnRUFIMkxSMXg1RzlMcy94MzBYdHVDUk8rL0Rpa1lWaVZRUHR2N3dCMWdOd0RYOGFqeiswOHV5SHorZW9XNXNYN3NhUzU3YWhmb3VJRmcyQm5QbWZobTNqZ3M2L0Z1Nnh3WTFIWUJPQVFvS0NxUzN2aE5pTEJhbGVqckhoblJsdEU0UUJBNDJMcTR6UUUwTkxVRFZaQU1xYVZXUHJrVHdxUTlSajhucDdVOERhT0xOUDhEck4wZXgrczY3c1c3S1Fxei9RbDcvZjlTcFlzS2kvNHZsWlRKYXR6K0tHZis5R2xVcmJzT05oWU45ZDRYNCtrL3Z3ZGV4RS9ObVBJM3FleGNOYlRjQ0cyYS90UjYzUFFVcy9PblBjWDFaQ25VYmY0K2I3MW1QNm9kdnhwVzJDVTlkMSt2UlA3ZW1BOUNKMlpSTFFUVktJWUdBQ0NJRVFnZ0ZRRlZWcmVOUEp5NnVNME9KTGhVdVJjcGNmZWVUNEVxcEp5NW5WREFDVThyU0s0VWpVNjdHRFFVZjQyL3ZuYUlEdFJVWnJsUVBXanVpaU1LTDJxdS9pYzBQek1JMGg3RjFYVXZ1US8vOEdoT0NFaW9RQUpSQ0ExTThBRUI3ZW5vKzRFOG5McTR6UXk2ZmhFVFNCckV1RlFsWkduVFA1eWRUQUdVNVFMVHoxR3pqZEkyYmdjZS9Pd2E3MWp5QTZWKzVDOVAvYXowMnRLaU9QMXV5TjM3UUJqUU45cFlQUWloSlQ4SlRRdnBHcXVqZXZYczUyTGk0emhCVjF4UUNlejVFWFVaNDJvUm8yVWdqaHlVRFNDRnh3dGFkeDlEVUFnVERualI0RkJtdVZPcWtWUlFUTFMxSWpMNE05LzEwRVY3LzAxMjRiMm9QVnQ2OUdtc2RDaEhSOWdNdEJzQTBCbXJHWlZSRUtRVUZJQkNTdmt6aVRaNDgrU2lBRC9sVGlvdnJESEJzRjF5QjYrWFhzZVNoT3RUSHU5RzYreVVzV051T0s3OHdMcDFmeXlsRmJjRkIvTzNsSmtTUlF1dnU1N0hxZmRYMldUd295NUZSLy9ZdTFDZUJSRHlLS0F2Q0l6dXhhWGMzZ0JUcU56K05WVWNxY2EyWnZCOWVpZXFPWGZqYmU5MEF1bEczK1NWczZyUi9sMEdVNWJSais5dE5pQUtJZG5RUEdZU3QyNS9BTlhjK2dVMHRLUUJlUkFvRGNDWDdnN1EzZ1krT0hkN1pnNnl0SHVsTHB3Q0lBSm1raXdoVzhRQ0FydXY2MjRJZ2pPUlBLeTZ1MHl5bEVnc1h6Y0tTM3p5SmEyYTNBK0ZTWEhuRHJWZyt4V3Y4Z3pMTS8vWmxtUGZmdjhLRTM4c29QZThDWEhsZUFFMFpuMFRHdEp0bTRNcDduc1kxTTU4RXdoV1lmOWYzY0d1TjhkYytMM1k5L2l0TWVxOGQwWnhLWEwvd3hyN0NRZUcvWWVsTkgrSzJleFpoVmRLRENaZGVnQ21sOW0reUVyZk1uWXg1di9rVkp2d2VDSlQrRys2N2J5YW1EYUhYdit3TE4rUEJqdlZZOXYwZjRMWXV3RlZRaWV1L2U2TlI0ZTFyMEtXVWZ1QVVocEowVlZTbjZlUFhBRUtvTEtiZEdpRUVSQlJGV2RkMUNZRGMwOU56cTh2bCtobC9WbkZ4SGI4K1RRdVRvNXNmd0tTblIrQ1orNjRZWW52RzZkSGhveDIvTEw3c1AxOUZla2x5SEpsTGtuc0JraElJVkVLSUxna0NWU1NCS29xY3pyR1psZEZvTlBvMmYzcHljWEdkS2RyZGNHQ2Z6YTJ4T1RaS2pKRXFvekdYa25TT2pRcHNuRHByMXF5M0RTcHljWEZ4blc3RnYvYUQ1UzNJcklSbWdNMjhDQ0dVa0w0VGRDVkNpSEZLT1BTdFc3ZnFsTkx0aEpEcC9ESGw0anA3Rlp4K0szYWY0YTl5VmRQZWFtcnQ3QWMxWTVTS0FzUndiZWFNYUJwcWJCOGJqTGU2cXFyYitXM240dUk2M1lyR3U5OTNDRVBaY0pTbVkxQllibzJZN1I3R0g2aVpaNHZGWXEvemg1U0xpK3QwYSsvSEJ4c0dnaHJKT0RtWFFDQkdINXNnSUNQSEJrRC8xcmUrdFIzQU1mNndjbkZ4blVZZCs4YWlYemRsZ1pwRGpnMlVDQVNDUUtnZ0dJNk5FWDN5eVNkVlhkZGY1bzhyRnhlWGt5ZzkrVjhqcGFxdjFUVWVZc05RTlJOdWZXZXdNZUVuQ0JFZ0VDRmRQQ0NFbUgxdUZJQ2VTcVZlY2JsYzEvSmJ5TVhGQmFTN1lRK25QRGlTVUtDQklKN1FUdXJYYTJ0cjI1a3RES1hwQWdLbDV0UUJDRktVQUZRRXFBaXFpMm13QVZZdm0wNHBwUzB0TGE4TUd6YU0zMDB1TGk3b0ZOZ1JDd0t1QVB4NVFmaDhmaFNlNUsvNTRVZC9yM2VBbWdaQU0xbEZDS0ZFRUNBSUFtUlpocUs0NEhLNTRIYTcwOGNXbVlVRDA3RlZWbGJ1QnZBK3Y2VmNYRnlIVTI3QUZVQmhVUWw4UHY4cENIVnAzZHh2ZnIzTkZvYXFCdFJzUnhhWlBXeUNrVjlMZzA0UUJBRk1uczJDbTZxcVcvZ3Q1ZUxpT3BKUTRBOEVUOW5YNitycWVnM091YlcraW1qYWtCa3RIZ0lFZ2NDQ21paFk3UjVtS0FyamY5U2owZWhML0paeWNaM2JvaFRRcUpEZHFiVnR4OHJ2ZlFXZnUveGlUTC9xUC9ERHZ6Y0RBSnFmL0NZdXZlUmk0L29tL3R3ODlLOVpYLzlSSFRMemE3YkNBWFRMaUJtVEJvSWdnQmhRRXdVUmt1bllHTGhSU3FtZW41Ly9pcDdldmx6S2J5OFgxN2twUW9CNFVzdVNVNHZoNWZzVzQxbDhDeXVlK2crTVZHS0lJUUFBS0o3MU1MWjlJWUZFKzkreDRNWm5qdWRMSHJyMmMxZnR0NFdneG1VUFF5azBWWWNrcDZFbXNvN05zRzlPUzBjMVRkT2U0N2VXaTR2TFdjMzQ0TU1rYXEvK0hFWUdBTGdDQ0xCSDRMcGNjQjNudXVLZW5wNXQyZHdhSWRDUXNYS1BVbDNYcUo1MmJGUVFSSWlDQ0ZIdjdPL1l6TGxSQUhvc0Z0c2NEb2Uvem04Z0Z4Y1hFMzlpNDUzL2lmdDNKSkdNSjRGZlhJdlAvUUtBTWdWMy9ua0pwcnFHOWpsZSsrTXlQUGprZHV5UEt5aWFlQTNtZmYrN3lPOXNmTmNHTmF0d1lMUjU2QVJJQTgzNFRNbDRITzN4T0FSUEJGVmxQb2pFblFhYmVlbTZuZ0czM056Y3pUd2M1ZUxpeWxRZXJ2N3BNN2dhZTdIeWhyblkvL1cvNGQ3cHg3ZUpZZCtUUDhDUC8xNkJPeC9jaEttNWNieTI4bmI4K0h1L1BmVGUxcDgwR3NaS3RZTU5sT29naElJUUtnb2lSS0locVJKNHdpRUVqVFlQVVJRZ2VuSWdwQzJja0RFdnlwUlVkVTNUTnZJYnljWEZkZUswRnh2LytpRnF2L3BkVEMxMkFhNDhUTDdsRzVoNDlPbVg0SmhiNno5S1JVaDZPeFVoQURIQ1VFRVVJWW9pUkVtQ0lJcWk1ZGpNa0JSOSsvdTB6czVPRGpZdUxxNFRxSGEwdC90UlZCem8rNUNyQWdGdjI0NXNZYWdGdDR3MkR3QWdTRU10WFEwVlJSR1NLS2JCWnNLTmdaclZ6eGFKUkY1QmVrczhGeGNYMXdsUUxuSno0empjRnJNK1FudWI5L3ptalFQMmFtaktoQnJKUERIWE9DazMvZit5VUJORkNaSVc2NnVLbW0rWlk0eXNBZFJrTXJtQjN3d3VMcTVQckl3MWdhTnc5UmRIb3U2UjMrTGw1Z1NBTnJ6eTJ3ZGVRdjlKZzR6Q2dYV3dwTUVvUVJSQW9OTkVra0lVQ1hRS1NKSUlpY1lnc1k2TnliVVJwanFxSFRwMDZPK1ZsWlVMK2QzaDR1SWFpcHFmL0NhK2ZGL2ZxdUozYnJ3WTl3T1k5TU5OK01YbkFxaVk5WFA4VjlzUzNEL3ZTdnc0cmtBTGpYalh3YTNaRzNNcFRPTWxDQkJrQlg2dEcvR09JMmpzSkpEOVpSaVhtd001TUJKa3hJZ1I2TzN0Ulc5dkwwa2tFa2lsVWtSVlZhTHJ1a0FwbFpEZXpPcFNWZldQZ2lCY3lXOFpGNWV6UGsxYnFvWXFTb0czWTJFVVZweThyWnlxcXI0NHZLSnNKWUJlOUcyak1xOXVRa2dDUUlvUW9oSkNkRkVVcVNUSlZGRVV1Tnd1Nm5hNzRYRjc0UFY2NGZQN0VRd0VJRWlTWkRxMmpPcW9QUnp0N3U1K21qOTF1YmpPTFJFQ1NFUkhWOWZKMi9IVTNIem9WWWNRTkFWQUpZUmticVV5MkNRSUFrUlJvRlp1VFJJaFNSSmtTWUtzS0gzRkEzc1J3VllkMWUrLy8vNE5BQTd3VzgzRmRXNnBRRW1nSzNaeUR0V21sRGI5MTQ4VzcyTEFscktGb1RyTUk0ck1uUWJXMkZRZnR5UlJTb05ObHFFb1NwOWpZL05zZ2lDQW9hTU9RTHZycnJ0NlVxblVPbjZidWJqT0xSVXBDZEJFSEVlYW0wNjRjNHZINDg4OXYrbTVsSk5iQTRnOXY1YUdtekVYYW9lYUpNdVFGUVV1bHd1U0pLVS9hUHdqS29vaTBUU05Db0lBVGRNbzQ5clVBd2NPL0xXcXF1cTcvRlp6Y1oxYjRlZ0ZnU2lPSkxweHVDMk8yRkVSWGNrVGM0THVLNis4OG5ZV3Q2WUMxQng4VDNPSUd0SjFhSnBHTlUyRnFxYVFTb2xJSmtWSXZTSjZaUWs5THFVUGJFeXVqUTFITTJaSFI0d1lzVXRWMWZXQ0lNemd0NXVMNjl5Q1c2RmJSYUU3QmtxQnpGVXBuMHlKWk9wdmx5MWFkTlRtMUZJQVVnUlFRY3d3RkZRZ29DSUJaQkZRSk1DdEVIZ1V3T3NDdkc0ZzRBVkNmaUEzQ0JUa0FJSXN5N0M1TnRnSDQ0MVJLdzNwU1FRZWpuSnhuZU9RT3hIYTNYamdWUWUzbHRIbWtiRml6emgzVFJUVG9hZ2tpcEFrRWJJa1FwWWtLSW9NdDB1QjErUHVBNXNvaXVaYmFvYWx6SkhoVm5VMFB6OS9DNlgwVlg1N3ViaTRQcWswVGQ4K1llYjh4Z0hjbXRaMy9scmFYSW1FVUZFZ0VBV1JTcUlJVVV6RFRaWWtLTElFdHlMRDQzYkI3M1ZEVUJRRnNpekQ3dHhzRGJ0V0VRR0EydFhWOVFTL05WeGNYSjlVQnc2M3ZqQ0FXMU1OdDZhVDlKWjNLaEJBRUlqaDFBUklrbUE0TlJHS0xNRmx1VFVYQWw1UEg5Z2NpZ2ptaUZYRzdDZ0FiZnIwNmVzb3BYelpDeGNYMTNGTHA3UnU2bGUvLzM0V3QyYk1oL1lWRGRKZ005eWFLRkRUcWFYYk8yeHV6ZU5HTU9DRDRISzVrQVZ1R2E2TkRVZGZmLzExdGJlMzkzRitpN2k0dUk1WFI5bzZuMjFxN1dTaGxqU3VOTlNJZVpKSHVuOU5NUFlhbUMwZWJHNU5rZnJjbXMvdFFzRG5SWTRkYkRhNHNhN05QaGl2cmxtejVra0E5ZncyY1hGeERWV1Uwb1lmM2YrSEhZT0VvZFpKdVFSQTJxMEpFTVYwYmsyU1JNaWlaQlVNWElaYjgzazlDQVc4eUEwSElIZzhIampCelZZaFpVTlNEWUEyZCs3Y2FHOXY3eC80cmVMaTRocXFXanVpR3g1YTkzekN5YTBSSUdVVURUVEFQRWd5N2RoRVVUQ0tCUUprVVlRc0c3azEyWUNheDRXQXo0Tnd3SS84bkZBYWJHNjN1MTg0bXFYOUk2UDFZOE9HRFU4QWFPQzNpNHVMYXdodXJYSFp3MCsrWllNYTY5ajZXanpTUlFNSWhFQzBpZ1pwdDJiT2hDcXlETGRMaHNlbHdPLzFJQlR3SVM4Y1FGRmVEZ1NmendlMzIyMjVOaFp3OXRZUFc2NU4vZktYdjl6UjA5UHpHTDlsWEZ4Y2c3cTE5bU5QLy9LeHAzdHRJYWpwMWxTUXZoVjdwbHNUQlVMVGJpMGRocWFCbGxrSjlYbmNDUGc4eUFtbTNab2tpUkQ4ZmorOFhtK0dhenVlMW84Ly9lbFBqMU5LK1FtN1hGeGNBN20xUFhmLzVvOXZPa0ROZEcwT0xSNUcwVUFValJZUGV6T3VESy9iQmIvUGNHdWhBSXJ5Y3dBQVFpQVFnTS9uZ3owa1plRG0xUHBoVlVpLzhZMXZIT3Z1N3Y0OXYzVmNYRnpaMU56YS92UURUejQzV0c0dG95RlhNTnlhSkFxMEg5UVVHUjZYSzhPdFJYSkRjQnVMVElWd09Beld0UTFRSmMzcTJtYk5tcldHVXZvNnYzMWNYRngyNmJyKzV2UnYvSENIQTlRR2NHdUFLQkJJZ2psZDBEZGg0SkpsdUpWME02N2Y1MEU0NEVOZU9JaWkvRnpyYXdvNU9Ua0lCb09XYTNQS3RiR3VqZGthYjIxcjNyaHhZeklhalQ3S2J5RVhGNWRkRFUySG45blZlRWpGNEpWUUhTQlVTQjhrU1VWQmdDU0pobHRMUTAyUm1mWU9qeHRCbnhjNXdRQUtjc1B3ZXZwMm13cjUrZmtJaDhNSUJBTHdlcjBXM0V6SE5sVFhGZzZITitpNi9uZCtHN200dUV5bFZQWDVrWitidDh2QnFRM3Uxc1JNdHlZYkJRT1AyeGlkOG5rUUR2cVFueE5FVVNRbjQrc0tCUVVGeU0zTlJUQVloTi92dDNKdERoTUpBN2sybFJDU09uTGtDSGR0WEZ4Y2xuYnNxdCtFekdaY0MyeUdXMU9INnRaY1ZudUhNVHJsOXlJM0ZFQkJYaGcranpzVGJDVWxKY2pQejBkT1RnN01Rc0pRY20xbU1ZRjFiY1hGeGY5SXBWSVA4OXZKeGNYVjFkTzdadkxzN3grd1FTMlJ6YTBKUmlYVXlhMHBzZ1NYeTJ6dmNDSGc5MXJ0SFNXUnZINWZXL0I0UENncUtrSmVYaDVDb1ZEV1FvSlRoZFRlMTBZSVNYM3d3UWVQQVRqSWJ5c1gxN2tyQ2h6ODYrWi9ib056d1lCMWF4bDlhMVlsMU83V0ZLTmc0SGFuMnp2OFh1U0ZnaWpLejRISHJmUUhHd0NVbEpRZ0VvbUFMU1I0dlY2NFhDNWtHNUxQbG11Yk9IRmlmWGQzOTRQODFuSnhuYnM2Y3JUanlhL2UrYXNPbTFQTDZ0WklobHNUTTg1WmN5a3lYSW9DcjF1Qnoyc1VERUlCUkhKREtDbkljL3o2QWdBb2lvS2lvaUprS3lUWXFxVFVuRXF3citnelhkdlVxVk1mMDNYOVJYNTd1YmdHa2VJNzYzNGtWZE5lL3N5WGJudGpDRzVOTTl5YWJrNFpTRWJmV3I4cXFIRXlic0NiYnUvSUR3ZFJGTW1GSWt2WndRWUE1ZVhsTUFzSlpranFWRWhnaCtTWkdWS2RkVzA3ZHV4SUhqbHloT2ZhdUxnR1U2amtyUHVSZHU1cGZLYXB0ZE0rWFpBQWtDRE1CaXJEcmVuRU9rU1NXRTVOdG8xTmVUenBrM0hOMHpzSzhzSW9MOHJQK2owSTdCL01rTlIwYlFQMHRsbXVqWmxJWUoxYnFyaTQrT1ZrTXZrYi9zemw0aHBBa1pGbmxXdUx4cnNmdlhEVzdSOGJibzJGV3QvQWUvL3oxcWhJQ0UwUHVJczBmU3F1bk9IVzBoTUdYb1NEZmtSeXNvZWdqbUFyTEN6TUdwSTZqRnRSU1pJeUNnbXNheU9FSkxkczJiS0tVcnFEUDN1NXVMS0lDRUQxcFVCT0JTQjdQdFUvaXE3VGR4LzQwelAyZ29HVld5TkEwZ3hCbWZQV3FHQ0ZvR21vWlp5SzZ4U0M1dWVpTUM4ODRQZlNMMEF0TFMxRmUzczdvdEVvNHZFNGVucDZrRWdra0V3bWtVd21rVXFsb0tvcVZGV0ZwbW5RTkEyNnJvTlowNmRSU2dVQTZ0VlhYMzI0cmEzdHdkemMzSlg4R2N6RmxjMWVpRURKdUUvOWovSGhuajNyNy9qdngrSU9VRXM3TmtMU0JRTkNOQ045UlFWUmhDakxrRnd1U0M0WFpJOEhpdGNMbDk4UGR6QUliemdNZjE0ZWdvV0Z5QjAyREFValJxQjAzRGdnRkJxNll3T0FVQ2dFcDk2MkxJMjdHU0VwSEpwMjgvTHlOcVpTcVlmNHM1ZUw2K3hWUEI1ZlhWTlRzNGNKUVRPZ1JnaGgxK3JwQU5LTnVLSkl6Vll5V1phaEdKdmMzVzQzUEI0UGZENGZBb0VBY25KeWtKK2ZqNUtTRW9RR2dab2oySUIwSWNIc2JXT0g1TFBOa3RxYWRuVkNpTlZwVEFoSnZmcnFxNDlRU3QvbXQ1K0w2K3lUcnV2dlBQcm9veStpZjE2TmhWcktNRHNhSVVRM0pwaXN0WjhtMUV5d2VUd2VlTDFlK1AxK2hNTmg1T1hsb2Fpb0NPWGw1VU16d1U0ZmxHVVpaV1ZsS0N3czdGY2xkVGh4ZDZCQ2dnb2c5ZG5QZnJhcHJhMk5oNk5jWEdlaDl1elpzLzQ3My9sT05Hc0kydGUzWm14MkoxbmRtdW5VUEI0UC9INC9RcUVRY25OelVWaFlpTEt5TXNpeVBLVHZTY3IyRjBWRlJlam82RUEwR2tWWFYxZldYQnViWjlOMW5lcTZibTYxMGlpbHhIQnRRaVFTMmRUYjI3dkM1WExONTA4RkxxNnpROGVPSFh1NHRyWjI3d0J1emRvK1piZzFhb0xOYlBobm5acnAxdngrUDRMQklISnljaENKUkZCU1VvS2lvcUloZjEvU1FIODViTmd3ZEhaMkloYUxvYnU3T3dOdVpnSEJ1S2l1NjhSV1NLQUFkRXFwVlNYOTR4Ly8rTDl6NXN3Wkt3akNkUDZVNE9JQzl1M2I5Nm45M2xWVmZlbWVlKzU1MlFhMVhwdGJ5OGlyQWFDRUVPdHpHQ1lJQUpER1J2cXR3UkhyWThmN1dBMElOcC9QaDdLeU1zdTFkWGQzVzJCTHBWSjIxMFkxVFNPNnJsUGpHOU1OeDJibTI0UnZmdk9iSGRPblQzK3dvcUtpRmtBSmYxcHpuZXVxcUtqNHRIN3J6YSsrK3VxR1ZhdFc5VGlFb0wyd0ZReU12SnB1T0RWcU9EUnE1dExNSWtFNEhFWnViaTRLQ2dwUVZsYUdxcW9xMU5iV0RqbTNOaVN3QWVsQ3dyRmp4eXpYMXR2Ym13RTN0dlhEQ0VkQjA0TFIxMFlvcFdvYXprU29yS3g4SXhxTi9rOGdFTGlYUDYyNXVENmRPbmp3NEI4dnVlU1NKZ05xTE5Ec0lhaHFUaVlSUXF5OG1yMVk0SGE3TGNBRmcwSGs1dVlpRW9tZ3RMVDB1S0VHWkNrZU9QMVdZVnRBMkVGNVd3c0lkUmlTWjhldFVvU1FaREFZZkNLWlRQS1JLeTZ1TTFSMVM2YWlxdXBtckkzMi83dDRQTDY2ckt6c2JXUzJkbGdocUMydlprSE5WZ1dsMmFER3RuWjhVa2M3SkxBRkFvR01GcEJRS09RNGxXQ0RtMWtselJpU054K0k1NTkvL21GZDE3ZndweEFYVjFyUnVyVllNdThhVEIxZmc2cXFHb3lmTkIyekZ6eUNyYTFuenZlb3F1cldsU3RYYm9GekJkU0FHMDFTU2xWS3FhYnJ1cTVwbXE1cE90Vmh1VFdxS0FwRXRRdnQ3VEVrNVhRNEdnZ0VFQXFGTWxvN0FvSEFKL28rcGFIK3cvTHljc2RwQklkY1c3YVFGRWJPVFNXRUpLKzk5dHBEalkyTkQxUlVWRlFRUXFyNTA1cnJYRmJyMWdXWVBXOGRHb0lUY08zMTgzRkRLUkRidFEwYk5pekZuSzJ2WWNVekQrSzZ5T245SGltbERkdTNiMzk2d1lJRk1ZY1F0QmZwSWZja3BXYkJnR2lFcEVlbktOVnBLdEdEaE1lSGdHR0N4R2d6bW84b0NOZWNsd0UxTTcvMlNVTFE0d1liQUF3ZlB0eXhRdW93WmtWMVhTZG1aUU1BMVhXZGJRRWhoQkJoK1BEaGI3YTN0OStmazVQemkrUDlYcmk0emg2cnRoWExGcXhEUTJRbVZxMWZqbWtXd0c3RkxUY3N3WXlacTdCazJWWmN1WHdhWEtmUnJEVTJOcTZaT25WcWs4MnRaWWFnbEtZTEJrVFFSTUhxVjRNa2FPanVTYUUzbnFCQ1hoQXVsd3VpTElBUUVXNXZabXRIYVdrcGhnOGYvaTk5czhMeC9HT3YxNHVLaWdvVUZ4ZG5IRXlaNWRSZEtzdHl2NURVTnBXUXlNM04zZERUMC9Nci91em1PbmU1dGdZYmppcTRkUDVDMFNBeHNnQUFJQUJKUkVGVUJtcHBCU2ZlZ3NVTGJzQ1ZrUVJhYmZtdlphc1hZTWJVR2xTTlg0Q3RhZCtIclEvY2hobFR4Nk9tcWdvMWs2N0J6VXMyb1NuQmZNS3R0MkY4MVhRc1dyc2FpMlpQeC9pYUt0U01uNG9aQzlhaXppR2ZscWpmZ0VXenAyUHNpSXFIcXF1cjMyZWNXaTk3RVVJU1lBK1FUSi9jb1p1TnVMTExCNzhrVUlIcUlIbzc5bjd3QWQ0N2xBUWhjYnkvNlM5NDVLL3ZJeFdKb1BqSVU1Z3phdzV1Ly8yZmNOczFrMUJUTlJWTDZnQnNtb2VhcWtsWXNEM3orOXU2WUR5cWF1WmhFL3ZCcHEzSDc1S0tpNHNIZEcxbU9NcUdwR1lMaUJHYXN2azJBWUF3WmNxVWg5OTg4ODFDV1padjRrOXpybk5OZGEvdFFCSzF1R0tLVTZ3WndiUmJsMkphdjQ5dnc4cGxWYmppK3ZsWVZGV0xha1N4ZGRFTXpGbVR3T1FiNW1QcEJCZGFYMXVIbGF0dXdlem9LbXpPY0hzTldMTm9GYTZkUHgvM3pROGl1bTBWbHExY2lObFJGelkvZUIzNnZvdnRXSFp6SFNvKysva245cmY4ZysxWDZ4ZUNzbEFEb0ZNS1NvekZUK204bWdKL1VTbUt2Vjc0UEJKeXhwWUJ4eHJ3d1dFM3hsNHhIUmVQSG9OeFJVVVk1ZzFCa1JKNGZ2a0tqTG4yUnN5ZldZV0pFUUJOUTNlL0MyYlArV1RoWDNWMU5lTHhlTmIyRHdac0dTRXBwWlRxdW01dkFTRTdkKzRVdG16Wjh0RDA2ZE1MUkZHOG1qL1Z1YzRkSmREYUdnV1VDQ0lzMTZLdGFHV2RGbHdJUm9JTW5Fb3g4NzcxV0Q0dGFQejdUVml4SFpod3k0TjRkT0hFOUwrNy9qcEVXaWRoNGFhL1lmdnlhUXdjRlV4ZS9EanV1OUg0Z2xPbW9Dd3hIVE5YcmNDcXV1dXdzTGJ2YTQ2Lzg0bk5uem15NGZrTjhSNm5YalY3RlZRbEF0R2hVNTFTbmFaU0tWQUlVRVFac2l4VGE3amRsdzQ5SmJrWnU0NTRVVGx1SWk0NXZ3TER5OHBRZlN5OVJxL3Fsc2V4Zm1IdGNZZmVkU3VYWU4zQnFrOEdObEVVVVZWVjFROXM3RFNDYmN5S21JVUVJK2ZHRmhNSUlVUzQ2cXFybXVycTZsYlcxTlRrRVVJbThTYzgxN2tDdGtRaURSRVg4eXJldnVRYTNMRHVhTjhIQWpPeDZ0M2xESnlxTVhsaWtJbFpyOFR5elZmYVBuY1ExV1VSWUhzcm9nbWdqeEl1Uk1vaUdkQ2NPUE02VksxYWllMDdXb0ZhOCs4bXZGV3U3SDE2L3Z6NVVWdE9yY2U0ZW0zOWF1bEdYSWxRVUoxcXVrN1ZaQytPdFNkbzNPVkhVWGtJZVVaclJ5QVFnQlNWSVlvdUJQTUxyV1pjOFYwQ0lJRGF5YldmSUo5WWo2MWJHNEF4Q3o1NXdqNGNEcU95c3RLQ1c3WUtLZXZjVExnWlV3a2doSmpGQklFUVFtcHJhOTlyYW1yNmJVbEpTUzRoWkFSLzBuT2QvVEtCWmdET2VEWFgzbklmVmwyYkFCREZ0bVh6c1dvb29WaTBEbXRYck1DYVRkdFJkekNHcEdYUXF0TklHb2dVWlZVb0ExRGYwQVFnQWtwUjM5UFQ5dWQ3WjE3VllvTmFYd1dVeWFzWnVYTXJyeWJMTGlyTE1tUkJwMnFpRi9HZU9Kb2JQZ0wxVGNia2tyUmprenNVU0pJTDRjSVNWRlpXSWh3Ty80dVBaU3NhV2dGbFl2Vy9Wb2tzS3l1ekJ1Ulp1R1hMdFJsUU00ZS96TEJVTXg0Y0FrQW9LeXQ3K2VqUm8vZm41ZVV0QWhEaFQzeXVzeDFza1VnUVNEYWhxUlZBbWVHMXFxZGdXalVBUk5HNlNobENqcWtPRDh5ZWdlV3RFekZuNFhJc3JDNUQwQVhVcmJ3WkN6Y04xVHRhT25xZ3ZYdjE0Y092TkNKenNMM1hJYStXTXZOcTVqSjFkcnJBN1hiRGsxK0VTaVdGcHIzN2NLVGhNRENoQ2prNU9WRGFYWkFrRC9MTEtsQldWblpDSDlWL3VjVmkxS2hSR2E2TkRVbnRKMzlRU3RsOG0yNE93eHJoS1NHRUVFb3B5Yy9QLzN0blo2Yy9GQW90QnVEbVQzNnVzMW0xbDA1RVlNMVcvRzFURTc3KzlVLzRBdCt4Qm10MkFaZXVlQkNMcitzTFVSUEJJUVowOWUrZ0NVQ2txcXozNE1HRHE2NWU4WFlkK3RvNnpQQ1RkV3Y5UWxCQ3FLNG1rMGlKTG5oOU1oUkZzZkpxM2tBZXl2TVBvTE10aVZRZ2pQejhmTGlPdXFFb1BoUlZqUnJTTHdBZ2tVSGYvb3FnS2dJa201cU9yOTNEU1lRUWpCZ3h3cHBNeU0vUHR5WVQ3R05YWmd1SWJmR3lPWEpsdG9Ba0FTVEM0ZkNmdTdxNmVCc0kxMW12NExSYmNIMXBFdStzV0lCSDZoTDl3cXZXMXVRUTdGWUNVUUNKS1BQL0orcncvSTVXdXhzREVFTjlYVDBidzJMVHFrMDRpREdZTWdvUEdlTlNMTlI2R2JobG5MRm12bjdOZmpXQmdGSTloU1RwS3haNHZWNzRQQ25FNGdTQ1B3OWxoZmtvS2lwQ1JXRUlpcUlnbVNTRC8zeVJDQ0tJb2I2K0tlUG5lNjB1eHZ5amFreWJWZ1hzV25OaW1tSURnUUNxcTZ2N0ZSSTBUY3MySUQ5WU1ZRlFTb25mNzMrc3U3dmI0L0Y0YnVkUGY2NnpOeHFkaUlVUExrTGQ3S1ZZT21NNm5yL3VTbHc2cGhRNDJvRFhObTNBdG9ZQUp0d3lFeE1IdEgzWDRzcjhkVmkzWkRibU5WeUphclJpeDZZTjJIRXdDU0NLUkJRQVUydll0WHcyWmpSY2oyc241T1BvYTJ1dyttOUhFYjcwOWdkL01LbmdIdzZoWnc4eWp5T3lPVFd6RVZlaWJoOFE2MHJTK05FV0pMdUR5QW1uMEJOcnc3NzJOclFuWGFpZVBoVVhHSWRHam5TTlF1aUpMVml6WkFsd3hhVzQ3c1pwS0J2bzV5dGRoVlhMYnNhOGd6TXh3WFVRNzJ6YWdPY2JBRENMNEd0dldZeVpHK2FjdUc3L3dzSkN4MXlicXFwc1AxdEdXTW9XRTR4UG85bkQwbG16WmozODV6Ly9XWEc3M2QvbXJ3Q3VzNVp0dFYvSDQ1dHI4Y2l5RlZpemRTMVdySXNocWVTanFuWWFibGs1SC9PdnJCNjRTaGljaHFXUEw0TnIwUXBzV0wwU1cxMVZtSEw5ZlhoOHd2Tll0TElKQjVuOEhSREFGWXNXbzJ6YkNxeGMwb0NvcXhRanI3MzdrZnBYZjdrVi9hY0tyQkNVRUNRb05WZm9XVkRyYThLVlpTaUtqNWFHS0hxaWNjUjdZMmc5SE1OUlFVRzRzQXBUcDE2T2EvOXRKRXBMUzFGVlZZWHl5Ky9FNGplYnNXekRLcXhvemNlMEc2Y05EUDlIbHlHNllBVTJyVnFPcllFcVRMeHVNWlpOWElHRkd6SWZoK1dQcndSaEQzSTdFZHE5ZXpkMjc5Nk54c1pHSERwMENFZU9IRUY3ZTN2RzBVY0dBQWtEUUdMMHV3a0FSRXFwQkVBRzRLS1V1bi8wb3grRmYvakRIOTdpY3JubThaY0ExNWtxVGRQUTFOUjBacCt4dHZVMmpKK3pGZE5Xdll2N0RJN0VZckhmZi92YjM5Nzhoei84b1lkeFpUMEF1bzIzUFlRUXEyQkFqRzFUN1BscXpOSGUxaGxyNXZ5bmViNWFTVWtKaGc4ZmpwcWFHdFRVMUp6VUgvT0V6MmVPSGozYUNrbnQ3UjlaWEp0NTRpNlFXU20xd3RLZi9PUW5uWkZJNU9HNWMrY0tMcGRyTG44SmNYR2RHTVZpc1Q4c1hyeDRpd0cxSkFPMUhnWnEvVTdEZGFxQXNzVUNuOC9uZUx4M1pXVWxSbzhlZmRKL3JoTU9Oa0lJUm84ZWJZSE4zdnFoYVpwMTVDK1RiOHRXS2JVKzUzZSs4NTAyUlZFZXZ1bW1tOERoeHNWMVlxQzJkT25TelN0V3JPaENacUdBYmNETmxsZlRCVUZnTjB4UmN4R0wvY0JJMDYyWlVHT1BCdi9VZ0EwQVBCNFBSbzBhMWE5cDE5YlAxcStZWUxnMDA3V3hjQ09FRURKdjNyeldSQ0x4dTdsejUrcHV0NXVIcFZ4Y24xREo3dGp2Rnk5ZXZHVUFxTEZPcmQvcVBPUEFTR3AzYXViS3ZGQW9aQjBZV1Z4Y2pJcUtDb3dhTlFvZXo2blpkaS9lZmZmZEorVVRtd2RRbW5Beks2UXMzR3pYWUJpbkFMQng0OFlVSWVUOWl5KytXSlZsbVk5ZWNaMHhvcFFpR28yZWdBNzZrNmpLcTNIRHpUYzg4dlN5LzIvTDczNzN1KzVzVGcwT2t3VnNvY0NFbXN2bG91d0p1UGFWZVdhaFlNeVlNY2pQeno5bFArWkpQUU90c0xDdzN6U0NRNFVVVEo3TnFwUUNnRzFnSG9RUVVFcXhkT2xTdlBYV1d3K3VYYnMyNmZWNmVTc0lGOWNRMWRIUjhlQVZWMXl4OWEyMzNrcG1jMnF3SFVQRVZqOHpLNkI5VHMzYzJzN20xSXFLaWxCUlVZR1JJMGVpc0xEd2xQNmNKLzF3eC9MeThnelh4azRqMkYxYitwY2VKUUNvcXFvbTNEUTJMRFhodG5IalJ2aDh2ditOeFdLOWZyLy9kdkFKQlM2dWdkVGIydHI2VUVGQndUL1EvL1RiZ2FDbUVVSTBvZThJb3F6aFp6QVlSRGljbmlvb0tpckNzR0hEck9iOVU2MVRjbXB0ZFhWMTF1UERtVk4yVFR0djVkcFVWVFgvemhGdUFCQUlCUDdZMGRIUkhRNkhid09mTGVYaWN0TFJnd2NQcmpJbUN0alp6eDViK09rSU5XYkJjUWJVbkZibm1WQXJMeS9IaUJFalVGMTllazc5UDJYSGNkZlUxR1RiaStEbzNFeTRBZW4rb0FIZ1JuTnljdGEzdExSMFJTS1JiL0ZUUWJpNHdCcUYrdnI2K3RValI0NnNHOFNwSmJKQmpjMnBaUXMvbmFCMnNudlZ6Z2l3QWNEWXNXUDd3UzBMMkN5NG1RbTNiSEF6LzF4WVdQaHNZMk5qZE5pd1lmTUVRYmlJUDZXNXpuVnBtdmJXdSsrKysrY0xMN3l3RWYxblB3ZHI2YkNnTmxoT3pZUmFZV0VoeXN2TFVWMWRqYkZqeDU3V24vMlVnbzBRZ3JGangyWjFiUTYvYlZnSDV3ZzM0L05TU2lrZFBuejRQM2JzMk5FNWJ0eTRiNHFpZUJWL2FuT2Q4VHIydTVQeWFWTXBiZk9XYmJ1ZXZtcm0vUzFNK0dtZi9ld2h4cnE4VEtoUmpSQktSWUZRVWFCVWxuVElvZzZYcE1JdHEvQXFLZmpkU1FROUNZUzlQY2p6ZDZFd0ZFZDVYaFRWaFowWVc5NEdFbjM5M0FFYkFNaXliTUZ0RU1mRzV0dXl3WTBhSDZkbWFEcHg0c1FQMXE5ZnYveWFhNjVwVlJUbGEveVZ3M1d1cWJzNytjVERqMjE3ZnY0ZGY0NE9BTFZlQWlSQVlLdCtRaU1FYWFpSmhNcXlBRVVXNFhKSjFPMlc0ZlVvOFBsY0NQamRDSWU4eU12MW82Z3doUExTWEZRUEw4RFltbExJa25qYUg0UFRzdkxPN1haajdOaXhqbmsyMXEyeElTa2hCS2xVS24wVVNQci8wL3JZbHVuY1pzeVljYkNtcHVaWGI3enh4aEcvM3o4ZmZMVWYxN2todGEwOS90RDRmL3V2bHc4MngrMDdDdGp6MUV5bzJad2FkSUdBQ2dLaGtnRTFXUmFRNkV6UXpxQUxZM0xTVUFzR0dLZ1ZoRkJXbW92cTRSR01IVk1DdDFzK0l4NkkwL2FDOS9sOEZ0enNZTE9IcFlRUWF1VFQ3SzBnOWdrRmFzSnQ5KzdkZWlBUWVLeWxwZVZ3SkJLNWhTOWw1anBUdGYyZSszSHowZjhYNy82NjloUHZEYVdVTmpUdU83cW1lc0tpOTVHNVRhcmZlV29NMU5TQm9LWW9JblVwSXFpUVJGS1I0ZmU1RVRDaGx1ZEhVVUd3RDJvMXBmQjVYYWgvOXAvWW5qOE9OMzdHNy9CZHhySDF2bWV3NU9uOWFJcEppSXdiaDhVL21ZNHJTODRpc0FIcGM5ekdqaDNyNk5qWXZCeDcvd2FCRzJXZEd3QmFXRmo0YkYxZDNlRlJvMFo5WFJURnovS1hFZGRaWjlOVWJldjJOeHFlbm5yMUw1eVdHZHVQODA2QTlCM3AzUWMxUWdVQlZKSUVLa3ZFZ0pvTXQxdUFKaEtJTGhjQ0FUZHlXS2RXMWdlMVFNQU5RRVhkYzY5Z1pVbVZJOWhhbjMwR3R6MHRZZWxqdCtPNmtsNXMvZEVhekx2akRXeCs3Q0tVblUxZ0E0QlFLR1RCYlJDbzlZT2JrVzlqejNPemdHYkFUUWVnMTliV3ZyMTY5ZXBETTJiTStOanRkcy9oTHdXdU0xV0paOWRoL0lQQWphTVQyTHF6RGExSkY2YmROaFBMUDU4SEYxcXc3RC9XWVB2b0tyajJ0S0FwbG9CWU5XYjFlU1BWTGIrNTV5OHhaTFp6Mk1OUGErNlRVcVFFUWpRUTZDYlVSQUZVVGVrMG1kUUJRcWdnRTVTVnl2QjZSR2dTME8xMkdWRHpRRHUwSDM5NkxvWk8zWXZ5Qzhmamh6OGVqdXVDKzdIa1A1N0Mya01hWWxpRFNYc3V3ZU1QWDRTK01FbkZqdWNPSWZqdnMzQmRpUVRBajJsenhxSDZLeDlpZSt3aVhKK293N3l2YkVYa1o3ZGk2V2ZPQXJBQjZZMVhBNVdIVGNBUlFzeUxFa0tJbVhNemMyMjZybE8ydjQxMWJqZmVlT01oQVBlM3RiVjluSnViZXd1QVl2NHk0am9qZGVnWWNOY3NiUDZaSDlGWG44SDBPMTdDcHMvT3hIVUJBRWlnVlJtRDlYLzVRblB5NC8xL0xKdHd6OXRiKzVhcUpCbUlzVWQ1SndoQmtsS2tRS0FLSUJvSU5JR0FFb0hvb2tCQVV4clZpSUNjUEJmMVN4VHRyUW0wZElzb0szQkJsUVVvM25UNDZUbjZNVmJ2Q3VLMkg4L0F2TXR6OGZGanorTG1iMjlHNUM5WFlmRmZic1dFMjMrTlpTVTM0T1VGOWhHcVhyVEdWRVJLR0NlWDcwY0V2V2c5Q21ENE1OeHkxNzhqT080c2NXeW1jbkp5TXVER1FLd2YyT3pPRFFCaDVrcjdPVGNBdXVIZWFGNWUzbC9yNnVvK0hqVnExRTJpS0Y3T1gwVmNaNXhLcWpEVENPV0NvNGVoT3ZrR1dtTUFBZ0Fnb21aeXhVdDd0Mys0NFpLcmZ0R0VnYmV6OTlwQ1R4VkloNTZFUUJjRVFnV0JRSklJSlJwQlVnY2xnZ2lYMzRVUnVVRW9YaStDQVFrcFJVRFU3ME54Z1F2MXIzV2gra3VmeDd6TGh5RW43RVhPYlpmaHVxZlhZYzAvcG1QS1lJbWVmcXNiUkFBcVlra0E4R1BpWi8xblR5aHFoOXQ1NTUzWEQyb0RRSTZTdFBybDNDd2IxOWNPWW9hbVdtMXQ3ZHMvKzluUEdyL3puZS9zOG5xOS9NaHhyak5YUmpVaFlXeGo2VWxwRDcveTJOcVhIMzV1VzQ4dG45Wi83eWVRcEVDS1dGQ0REdlJCVFJRSmxTUUNXUktnZUNYcTdra2gydDZOenJZZUJDSzVPTC9Zalp5d2dxUmJSR2NvaVBJeU54cFVMMm92SElHY3NOZE1KcUdxUk1YelIzc3g2TGkyWXYrQUJrQkNRRG54RDlzWjF3WVJEb2VIQkRkN1dHcStieHlOcEp0QVk0b0tPaUhFZEc3NkhYZmNvZDl4eHgzL2UrREFnYjJscGFVM0UwSW04bGNSMTVrcXF0TjNkdTA1c3Y3dVZ4cjNBbzJxUXo0dHc2VVJnaVNvQlRTTkVHaWcwRUZBQlpGUVNTQlVrdEx0SElvaVVna0V2a0kveXYwS2ZMS081bytPNHQybWZFd1k0VWZTSTZFdE53Y2pxdk1RclhnZnIwWjE1anVMbytHb2hFaitZR2RRdUJISmw5QjZLQTRnbFA3UTBUaGE0VVBrSkp4bUpKeUpOekVVQ21IY3VIRVlPWElraGcwYmh1TGlZa1FpRWVUazVHUmI3VWNWUlFHejJvOHlxLzAwNDR6MkZJQWtJU1JCQ0RIUGMrOHVMeS9mdW03ZHVoLzI5dmF1NGk4ZnJqTlJxcTZ0ZnZHSkxmOVRPL2wvZGlOeno2ZjFQR1l1YTBVZU5aMmFjWlphK2hjODI4NGhHSTIzSWxMSGVyQy9UWVhzZFNPVTQwZStYNExpODZHNEtJaDhuNEpBUVQ3R2phbkJGMmNQUjkycUY3RGhrQXFnRnpzZTJZb05HSU1iL2g4SmdBU1hTMEtpN1JoYUUvMDkxSlRMaGlINjNIYXNiVlNCeERGc1d2VU82c2VOd3BSQUdwQTdYbXhBZmVJc2RXeW1Bb0VBeG8wYkIwRVFIQzlDaVAydDVkeFNxWlJaTVdXTENwUUpUVTMzcGdIUXZ2U2xMelVCK0UxVFU5UE9rcEtTbXdnaEUvakxpZXQwUzlmcHV4L1d0NjlmKytHYmU3RHNUWlVKUFpPT0xvMkJHYVY5K3dsSXVqOU5GeWhGU3RkcFQxS0V6eXRDVVNUcWRrbHd1MlhrajFDZ0hJemhuVGZqb0tLTWdvcGhtSDFWR1NyS3ZVZ0VYRGhZV29KQXdJM0E1NytBQjQ4K2d5WC8rV3NzaUVtSWpCNkR4YitaamlsR3lEemwrbkVvdStNcFRQM1BTL0RNRXhlRGJSNE5Ydlh2ZVBEUWMxZzA5OWRZWlBTeDNmZVRpZWxXajZQN3NmSkhXMUgybTF1eCtQeC8vYkU3NFZ1cVRyUjZlM3Z4d1FjZm9MNitIZ2NPSE1EaHc0ZHg5T2hSZEhaMklocU5vcXVyeTlwOGxVZ2t6RjBMaE5sK0JWM1hDYVZVTUM4amF5a0JrQ21saXBISmNBRndyVnExS2pKcjFxenJ2Vjd2LytFdkxhN2owU2ZhVXBWbFZqUWE2M24wZ2Y5OWNkc2RkejhWUjErQmdCMlBZc1BRZE9nSk52UWtPa0gvSW9Fc0NaQmxrYnFVdEx2eXVHVjR2YTZNaVlMOHZBQ0tDa0lvTDh1eHhxVE9sSW1DVDcxanN5Snp0eHZubjM4K1JGSHNkN0h1emViZ3NoVVZLSk43TTRzS090SlZVdzJBT21mT0hHM09uRGtQN2QyNzk2MnFxcW9iUkZHY3hsK3lYS2NzN0ZUMWwzZStmK0NaQ3krNzkyTURVbmFYeHViVWtnUklaa3dSb0s4L3pYQnFWQlNZSW9FaVVrV1I0SGJKY0J0UTgvdGNDQVk4eUFsNWtaL0h6SDVXRldEc21ETmo5dk9zQXh1UUhwd2ZQMzQ4SkVucUJ6YjdXd1oyVkJBRUlnZ0NWRldsekw2RjlONi92dERVcUJRUnpReE5BYWlqUm8xNmZjU0lFVHRmZi8zMTYzSnljbTRDVU1wZmRsd25TNVRpNEpIV1kwOStadHBQM21oS3ozbXlVRXM0WEVrSGw5WVhlcHFUQkdKZmtTRHQxR1M0M1JMY2JnVStiM3IyTXhUd0lCejJJV0pDclN3WEk0WVhZdXlZVXB5Q2hWTG5MdGlBZEh2SGVlZWRCMG1Tamdkdy9TcW1oQkJxaEtaZ25adVpkME42RzcwR1FQM29vNC9VM056YzlSczNibnpqc3NzdSs2TGI3YjZKdndTNVRxaEMvd2RkWFYxci92clh2Mjc3NmxmbmRRemkwZ3lnRVJOb0tlTVhzWFYrR3JPYkFKSWtPZTc4TkUrK3RlLzlaSS96UHAySFJKNVRZRE5WVTFNRFdaYk5DaWlNTldDT0lhb0pOK010WWVBR1BTM3JTQ1N6Z2RmSnZWMTk5ZFdOQUg1YlYxZjM2c2lSSTJkS2t2VHYvQlhKOWE4cWxVbzl2MlBIamsyVEowOCt3QUF0RzlTU0ROUlU5QTJ3bXhHSHRXekZPTWJiZkoxUVJWRmdQeURTaEZwdWJtN0dpcnpUZVp6M09RMDJJTDFEd1d6dk1DOFdjRTZocVhIRHJkQ1VxWnBhcm8wSlRUWEd2VmxQb3RyYTJyY0F2Ti9VMVBSQ2NYSHhsL2hKdlZ5ZlJMcXV2OW5RMFBETXlKRWpkNW0vUEcxQVN6cTR0SlNEUzlPWml4cS8yTE5DemV2MXd1djFJaEFJV0hzL0N3b0tMS2lOSERueXRDeGU0V0JqVkY1ZW5nRTM4MmFhb2FyZHhSbWdzK0NXU3FVb0ljUTg4TkplV05BWndHVzROd0Nwc3JLeUZ5Kzg4TUovUHZ2c3MxZm01ZVY5aVJCU3cxK3VYSVBuMGVpZTV1Ym1wNmRQbjc1ajE2NWRLcE1mWTNOcDdOdWtEV29xODB2WEFwcTVFazhVUmZhWFBYVzVYQmxRTTVldW1Icy9JNUVJU2twS3JHWEdwM3BGM3NuVVNWdVlmQ3BrMm1tbmZKejVkb0J4TEh0YTFKd3JoUUU0R0hDekduMU4yQUhRbTV1YnRlWExsemVrVXFrWExyamdnbWEzMjExQ0NNbmhMOTl6R2x5T0M1TXBwWTJ0cmEyUExWeTQ4RSt6WjgvZWYvVG9VYnNyNjNka045TExWWHJ0K1RSbWNiSFRSbllvaWtJVlJlbVhTMk9CeGk1ZHFhNnVQdVhMakxsakc0Snljbkp3L3ZubncvenR4RXdnWk9UaDJDdVJTRGlHcG94N000ZnJCVnQ0cWdGUWpmQTBCU0IxNzczM0p1Kzk5OTYvTEYyNjlJVnZmL3ZiMDBPaDBFeCtxQ1dYQWJTRzF0YldEY3VXTFh2cmw3LzhaUytURzNQS3BiRmhhQXJwNDRWVVFtQkdDeHBBK2tZRkFVcEFhUHFwU2tCQlFDbW9UZ0ZLQ1hRS2FEcUZwZ09xUnBIU2dKUUdKRldLaEFva1VrQnZpcUFuUmJEN293TUFEcHhWai8ybjJyR1prbVVaaFlXRmpxZUFESEhlMUc3Z3pCTjcyUk5DN05WVHk3MEIwTFpzMlpMNCtjOS92cmU3dS92NUN5NjRvTW5qOGVRU1FncjR5L3ZjYzJ6QllMQ3VwYVhsRDkvNzN2Y2VuejE3ZHVNLy8vblBYZ2VIMW0rbnB5Mm5waEppZ2RESXA2V2ZpNFFJRUFXUmlwSUlTVEp5YWJJTVJVbi9jbmU1M1hDN1BmQjZmZkQ1L0FnRUF3aUZ3c2pKeVVWK3BBREZ4U1VvSHpZTVZkVWpJRW55V1hrdnp2akpnK1BWeHg5L2pJYUdCalExTlZsVENoMGRIWWhHbzRqRll1anU3a1ozZHpkNmUzdVJTQ1NRVENiTlRmV0VYZXFzNnpveEwrTnhNcWNXMk1rRmlWSXFBNUNSUHJ2QXVxcXFxcFJYWG5sbGFtRmg0VFdDSUZ6TVgvWm52NUxKNVBZMzNuampoYTk4NVN2dk56VTFtU05OckVPekZ3Z3lISm94MDh5TVFoSHpseWhsSzU1bW9Zd3RFR1FyRXBqdEhHYjRXVlpXaHFxcUtsUldWcDdWOStLc1czSlNXVmtKajhkakRzZWJlWWVoRkJpb1VVMGxxcXBhNGFuWjkyYTZOU004MVFjSVQ1TUFsSWFHQnFXa3BPUUZBTnYyN3QwN29iS3ljcm9zeTUvbkwvK3pUNGxFNG0rN2QrOStkY0tFQ1kwTXpOaXdNK2tBTlJaMnFnRTFxOXBwZ0kyYXhRSGp1VW1aNTY0Rk5ET254aFlKL0g1L1JrNnR1TGpZeXFtZFRVV0Njd1pzQUZCWVdBaXYxMnNCenUxMmczMFMyT0hXMjl0ckFTNlpUR2JMdlZGS0tXSFBlRFBQZDJPZW1DbkR3Vm1BQTZDTUdqWHFkUUR2dlBEQ0MwOU1talRwVXIvZmZ3MXd3bzk1NXpxMVlXZFRMQlo3N3NVWFgzejdpMS84NHRFc1FIT0NtdW5PckdGMUk0K20yNnVkQnRSZ1Zqek41NnVUU3pPaFppOFVtTzBjWnVOdElCQTRKKzdQV1JlSzJuTWVlL2Z1eGI1OSszRG8wQ0cwdExTZ3ZiM2RHcUNQeCtQV0FMMFptaHBEOUVnbWsxQlYxWFJ2R2VHcHNYaEdvSlFTdzhHWjRhbDVzU0VxRzZyS0FKUWJicmpCdlh6NThza0ZCUVdYUzVMRVQvSDlGRWxWMVJjUEhEanc2dTIzMzc3cnFhZWVTZzBSYUNrNzBBQzJLSkFCTTkyY2QyYkRUdGFseWJJTXRwWERQa2tRRG9lUm01dUx3c0xDakhZTzhtbWRqK0pnYzFaVFV4TSsvdmhqTkRVMW9hV2xCVzF0YlFQbTNjemNXeXFWZ25sS0NBTTRZcXdNSk93MUFPQ2tMSUNUQWNpYk4yOHV2K2lpaXlZSEFvSHB2Qi91alAwRnVhZXpzL09sYmR1MnZmdkZMMzZ4alFHU0U5QlNXWUNtMm9GbUhueHFocHQybDhZQ3pleFBNMTNhUVBtMHZMdzhGQllXb3F5c0RKV1ZsU2dyTy9lQ2czTUNiQURRMmRtWlVWUm9iVzFGUjBjSGpoMDdobGdzWmgxLzFOdmI2MVJZZ0FFMllybzNGbkJNZ1lFRkhGdGtFQTBIWjRkY3h2WGVlKy9WVkZkWFgrenhlQzRIVU1LUmNscGhkcWk3dS91bHVycTZIWk1tVGRxUHZpcjRZRUN6NTg1WVYyY1BPYWw1SUFPVDQyVmRHanZyNlJoNnNrMjM3TXluV1NTdzk5UnhzSjJGMGpRTjlmWDEyTDkvUDVxYm05SGEyb3EydGpZY08zYk1PdHV0cTZ2TE90dXR0N2MzQTI0TzdzME1UODB6M3dZQzNGQWdaMzVNMnIxNzk3aUtpb3FMM0c3M1pSeHlwdzVtUFQwOTJ6NzY2S04zeDQ4ZjMyZ0xGNTJBcGc0Ulp2MkFCbXNQQnlnUkNCUlo3aGQyc2k3TkxCQzRYQzVyM3RQbjh5RVlEQ0lVQ2lFdkx3K1JTTVRLcDFWWFYwTVV4WFAyWHA1VFlEUFYzTnlNZmZ2MjRlREJnemh5NUVoR2FCcVB4eTI0c1lkWHNuQmpBY2NVRndZQ0hESEFKamlFcVpJTmFyTHRZOUxPblR0SFYxVlZUZkI2dlJjVFFzWnlCSjA0NmJwZTE5WFY5ZHFlUFh2cUxycm9JdGFaNlF5WUJnS2F5Z0JOcFpTcVJxWGM2bkUwTjZXeFFETXJuYnF1VTBFUTRYYTcrZ0hOSG5wNlBKNStRK3htNkZsUVVJRFMwbEpVVkZTZ3VKaHZsandud1FZQTNkM2RhR3hzek9oM2EyOXZ4N0ZqeHhDUHh4R1B4eTI0T1lXbVdjSlRDM0FPT1RqQ09MaU1YQndET0NmUVpmemR4bzBiaXkrODhNTGFjRGc4UVpibGkyRnR4dUFhb282bFVxblgydHJhZHY3em4vK3NuekZqUnBzQklIMEFkK1lFTmZhRWpYN0ZBTWFoV2Jrek5vZG1GZ1kwVFljb2l2RDV2T3p3ZXIvUTA0U2EzKy92MThwaGhwN0RodytIMSt2bGQvaGNCcHVwQXdjTzRNQ0JBemgwNkJCYVcxc0hySnF5b2FrdDl6WVk0TUFXR1d5UU01MmNHYWFLZHBnNUFRNkFPSDc4ZVBtUlJ4NnBxcXFxR3UzMys4K1hKT2t6QVB6OGFaMmh1S3FxYjBXajBmZjM3dDNiOEkxdmZLT3BycTZ1MytTSUxYVE1CalFXWnV6L285dUFaamswNDRJZGFHYllxYW9hRlNVSkFiOHZBMmhzYjFxMnFxYzV4RjVlWG43V25NckJ3WFlDRll2RnJOQ1VyWnFhN3MxcHIwSVc5NVlCT0YzWDdWVlVaQWxUN1pBelExVXJMK2NBTnNuMmQySkZSWVc0WnMyYVlTTkhqcXdLaFVLalpWaytqeEF5NGh6TGszMlVUQ1kvNk9qbytHajM3dDM3dnZhMXI3VTBOVFhwTmxmbTVNNnl1VFRyNzh4bWJOdm55SUNaemFHQnJYS2F4Mm14aFlGa1NvVWtTUWlIZ2hrdXpRdzk3UTIzYk5YVEREM1BsZDQwRHJaL3diMnhWVlBUdmNWaXNhdzlidzY1Tnd0d3Buc3pJV2NQVXhuQU9ZV3E5bkJWdEFITzZYM1JmdjNpRjcvd1gzSEZGU1dscGFYRC9INy9jRm1XUndpQ01CcldLdDVQclJLNnJ1OUpKcFAxc1ZoczMvNzkrdzgrOTl4ekxYZmRkVmVQQ1poQllKWU5haG52TTg0c0k4eGtRMDNZNW9tWncwMklwUWlYQUFBR0dVbEVRVlF0bURFdWpUS050a2drVTVBa0dYbTU0YXk5YVlGQUlNT2xtYUVuZDJrY2JFTldWMWNYOXUvZmJ6WDAybnZlc2hVV3NnRk8wN1RCQUdkM2NTYmdpQVBrQkFmSURmYSs2T0FHaGZYcjErZlgxTlJFOHZQekMvMStmNGtzeThXaUtKWVJRc294NkVydlU2WmVTdWtCVGRNT0pwUEo1bmc4M256a3lKSFd1cnE2dGk5Lytjc2RZQTRtR0FSbTJSeWE0L3YyNUQ4TE0vUXRBS0pzTWNCMFp3QWdTVkkvb0xGOWFXeHhvS2MzbVQ3RW9TQy9YNEhBcVRldHBLUUV3NFlOZzgvbjR5OVdEcmJqMStIRGgvc1ZGdXp1emQ3VWEwNHNPTGczcS9lTkJaeW1hU2JZd1BUQ3djSEYyU0ZuQVlxQjNHQ1hZSHRmc0wxdjVmOSsvZXRmKzhlTkd4Y3NLaW9LaGtLaG9OZnJEU3FLRXBRa0tTaUtZbEFRQkQ4aHhFOEk4UkZDUEFZSXpRTUF6TThKQmd6VzJqaEthUStsdEl0U0d0ZDFQYTVwV2t4VjFXZ2lrWWgyZDNmSE9qczdvODNOemJHZE8zZkdGeXhZME0zQWk5cEFSZ2VBbVc1eldOcGdsLzI4dld3d1kwRm11ak5tU3hvRkFFVlJMSmpaV2pneWlnT3lMS083SndsRlVWQlNYR0ExMjlwZEdsc2dLQ29xNGk5T0RyWi9UYWxVeWlvc0hEbHl4TnBuT3RTbTNxRUN6dWJpV0FjM0VPUWNZY2RNUHdnRFFFMTBBSnY5WXIvT1FCY2MzdHJmejBpRE9ielB2aDNvc29QTWZtVnphZjNlTjQ5K2Q0TFlZREF6MzdmdDFJQW9pcUNVd3VWeVpRV2F2ZUlaNytxRnkrVkN4YkRTakdiYmNEaU0vUHg4RkJRVVdBVUNXWmI1aTVLRDdjVHAyTEZqT0hqd1lML2MyMUQ2M295WlUzdDRtaEdtR3U3Tmdwd3h6V0NGcXN4OXN1ZmtpQU9Fc3NGT3lBSXpjUWhnWXdFbk9FQnRJTUFOQkRjNzBPQUFzWUVjbXA3RnJka1QrNE5DakNrQVVGdVlhY0xNS2dRd0ZjNk1IUnVpS0ZKS0tkeHVkd2JRSkVteUhKcTlPQkNOZGNQdDhXRFVpT0g5S3A1RlJVVW9MUzFGS01RN2VqallUcUphV2xveTNCczdralZRYTBnMjk4YTJoNWpWVTV1TEF6TjBiN28zZTA0T0RvNXVVT0RacXJGT1FCc0lic2ZqM0k0SGJNY1Rkam9DanFsT1pnVVlBeThXbm1Celp1YWYyVENUWFE3RUFJMnl1VFJLS2J4ZWIxYVhabS9oNkl4MndldjE0Znp6YXF4ejAweVhkaTRjTDhUQmRnYnB3SUVEbG50ektpN1lxNmRPclNHcFZNcHliamJBUWRkMTRnQTQxc25CRnFyYTNaejl6M1lvWlhWaUR1RXVHUVJzMlZ5YlBTU2xBOEJ0SU1EcFRuOW1vRFNRczdQL1B4bGZpLzJ6TGRTRTNablpnRVp0bFU3cmJEOWQxK0h6K1Fac3RHVm5QTnM2WWdnRWdwZ3lhYUxsMG5pMWs0UHR0Q21aVE9MUW9VUDlpZ3RzZURwWS9tMEE5ellnNU14aUErUGs3RzRPV1J5ZEhVUk8xNkRPakEySFQwYU96YlpVaHc0UmVQWUx0aVBkWVFlWjNaV1p6b3pKbjJXRm1SMXFKdGcwVFVNd0dCeHdhSjF0dEcwNWVnemhjQTZ1dVB3U2xKU1VRRkVVL3VMaVlEdjk2dW5wNlJlZXN0WFRvYlNIMk9GbW0yQndta2UxUTQ1dEhZRkRYZzQyS01IQjJXRUFKemJVZkpvVHpMSTV0cUVXRXV5QXd3QUFneDFjOWp3Wmt5K0RMVzltMzBPYkFUTzJmWU5kMUczUHBXbWFobkE0bkhXKzA2eDJtbUhud2NQdHlJOFU0TEpMK0lyYUV5bUpQd1QvbWp3ZUQ2cXJxMUZVVklURGh3OW5ETld6K1RjVGNIWUhOMUQxMUFGd2xNbkRFUnZncUExMDVrVk5vRkZLemNNRzJWOW9nNExLQ1lZRHdHeW9weG5Tb1VMT1lTMGliQ0VsKzI4ejNtZWNtU1BJSElCRzdVdTNCd01hZTJtYWhweWNuSDViMTltamhjeWg5YUtpSWtDcTV5OGlEcll6Vno2ZkQ5WFYxU2d1THU2WGYyUGJRK3lBczgrZVpta1BjUXBScVFrMVRkT3MvSnNUNkV6QU1hN09oRjAvMTg1QWJEQm9aUVBZSndWYlZzQXhKNy8yMGJnUGRyQTVzZ3lJMmNMTWZpQXpONmpiUTgvQndrNTdEczI4VkZWRmZuNitkYXlRSFdobUhvMFBxM093ZmFyazlYcFJWVldGa3BJU0svL1cxdGFXMGYvbVZFRTlIZ2RuQzA4ejNCeWJnM053Y0hiWW1YQmozMlpBai8yN1U1SENZQjJYN1dQOTRHVjc2d2d4QjZCbDVOQllxTm5EenNFY21qMkg1bmE3a1VxbFVGSlNrdEdQbHBlWFp6WFp1dDF1L2lMaFlQdjB5dTEyVzhjeXN3VUd0b0xLQXU1NGNuQU83czJwVGNRT3VuNEZCOVBaMlFISC9Ka3lSUW5XMWZXam1oUDhodUxVbk03aFp6L0dnc3ZteHV6dUxBTm1iSXRHbHZ5Wlk3ZzVWSWRtejZHWlV3T3BWQXFWbFpYSXljbkptQnFRSlA1U081WDYvd0hGMUZuWjhqMWl4d0FBQUFCSlJVNUVya0pnZ2c9PSJdLFsxLCJkZXNjcmlwdGlvbiJdLFsic3JjIiwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFUWUFBQUUyQ0FZQUFBRHJ2TDZwQUFCTUMzcFVXSFJTWVhjZ2NISnZabWxzWlNCMGVYQmxJR1Y0YVdZQUFIamFyZjFadGlXNWxXVUwva3Nyb2draXFBUm9EaW9aNC9VZ201OXo0aWlOUnRJOUl2eGxtbElMM251dUZNQXUxdG9WcnYzLytYKys2My85ci8vMXZLbWtLK1czbGxiS3pYK3BwUlk2LzZqMzc3OTIvbnp1ZFA0OC84WHk1MS9QdjM3OSt1c2JnYitqbi94OTQrMi92NS9PMS9NL2YrQWY5M2pHdjM3OXFuKytFK3FmQy8zNUJoZitQWUYzOXQvcjd3L0oxOFB2NjAvNmM2RzJmLzhvcmI1L2Y5VHg1MEx6endmUG8vejVuZjU2ck45Zi92L3JYNzd3c2tvcmM2TVl3bzVQdk0rZjZmY0U4ZmU3OC9zOWZ3WSs5L0MxSG1Nc0YzODk4ZjF6TVJia1gxN3ZIMy9mOTk4WDZGOFcrUi8vdXY1OTlmLzYxNzh0ZnVoL3ZoNy9iUzNMbnpXNnkzLzlqU2YvMjlmalg3Y0oveUlPZnoxUitOZHYzQ0hGLzNpZFA3Ky9iOVh2MjcrMzYwaGhTK1dQUkozRmZ2NXhHVDQ0V1BKNGZxenc2K1YzNXQvditkWDRWZTkrVDdaODNmTWUvSnBQZXdLNzhsMVBldGJUbisvWjUrLzVUQjR4aFIxZS9nNWhobmkrVnVNYldwalJmVXIrZXI3d3hoWlhyT3piRFB0aTYxSU1mejNMYys3Ynp2M21VN256ZXZob2VMaVlXLzNmL3JyK2Q5LzhuL3k2dm0rNlJNOWQvMW9ybmlzbzF6eUdPK2VmZklvTmViNC8rNWJQQXYvajE1L3R2LzhtUDRncU81alBNbGRlc04vamQ0bVJuMy9LVmp6N0hQbGM1dStmQ2ozWHUvNWNnQ1hpM3BtSGVTSTdjSmNuNXFjODl4dkMrenlzWTJXRE9rOGVZZ3FESFhoeURvdUhSRjVpQ2RjYmF2RGUvTXo3bk0rR0hFcnd5OWdtTmlMSGdtNVZkcWl6V1NsbDVPZE5GUm5xT2VhVWN5NzV6ZlhLTGZjU1N5cTVsUElXalZ4LzQ1dmUvSmIzZmV2YjNsNWpUVFhYVXQ5YWE2dTloUmF4Z2JtVjlyYmFXdXM5WEowYmRhN1YrWHpuS3lPTU9OTElvNHgzMU5GR240alBURFBQTXQ5Wlo1dDloUlVYWm1LVjlhNjYydXI3dVRhV1lxZWRkOW52cnJ2dC9pRnJYL3pTbDcveXZWLzkydGYvMnJVL3Uvb2Z2LzRIdS9iODJiVndkc3JQdlgvdEdsKzkzdmNmbDNnMEo5azlZOGRDZXRqeDF4MUFvSU43ZHRjbnBlRE91V2QzQ3loRkRqeGtkbSt1OWJoamJHSGFUOGpmODlmZS9YUG4vcS8yN2NyMS8ycmZ3djlwNXk2Mzd2OGZPM2V4ZGYrNWIvL0ZyaTM5M0R3Nzl0TkMxL1NPYUIrZjZhRmUvTDV2L3ZqcmJ4NnA3cDdMNkhuMWtXZGVxYU1pOTc3ZkY0ZnljTm1aWW45M3YxTllPNlV2aHBUZUs5YlFhOFpPNWErTnNkNTdiTmM4c0Radit1cFQ4RnJQZHFuaXpwVTFybjIrYlkvNjFMN2pPOHZIaDNkdVY0bTR5QkV3WllWbHIyRnpFNHhmLzdob1N5ekJ5Ty9xZmMzMDNqUHcxbndYYnh2WTBkeGEvWW8rT283N1lzTy9Pbm1aK0w1ZnFXekQyaG1mSHNZSXZleU1Sd1FJUEx4bG5hT3R0Tk5ZTGZPY3VZWE1wbjdJRXdKVXI0RVJYcFhuQ3FuMVBWL2V1ZWIxZm04cjlldTFqUFkrWDBFb0lxKzVXMThkTzlNeisvSHVaM0NoTjIwOHdYczk3QjR1b3ZZdjU0OHYxUHlsOGQxblQvSGdkY2U2MlUvMnJxZUVvSTVVU3docnR2ZkZ3MVJXWkIzZHVjbzdubDE0elZsSGlqek5ZQWsvMUFJZHdINDlwYWtNbjFMNTdmemwrWlhKbzhWbnQ3ejJxdStlSDF0Y1VKRjVmMzN0d2Q1K01kWTc5ekJTdXRtZDk1bDF6YVVYV3QvZGVjYjhEbDV2ZlVoUFdPTmIrL2xtcnl1OSs3dDRpcXg0N1BjcDczZHZmTUhMejh4UjJteFl5UGQ5NHNhdnpwQnY5Z3VkRDNmSmRhUHJHNmYyN0luRVBTdGNJMDFla2o4aXQrbys5aGZualpjYjNyT2xYZGt5ZGk2dSs5c2pvVm85OFlnN3NJTVlsekpDclNHeC9ST1JhQ24wdlZXbnVUN1dsbHVQK2IwbzNVNEZ1WWozN3JQaWRYZGdDOUM1d2M2OUxoMVh3L1lnRi9uQ1BvVGt4U3BxRm5meC9kdHV3Yi9YTjgvL2YzcGhzNTZuWlRTNzNURTJmWGdZYjNpLzJIZGVJNjFyTEY0bTNQVkxyR0ZpRHpzT0tiY1JlL3RRY09CdVcyTmdtQ2Jid2Y4d1ZteFRiL0Vib1dDcGtLblUzdHd2Zk5OQ013YzdIVkpCcWdlR0I3QUFzcHZJRnpadWJZVGpyZXZMQTJVWmUvS1lOeS9sRFNKcjIrWm10NitOVGoxekZVeGJRMWI3eWx2ZGY3Rkk5K0JSRUtHMVFJeHo4ckUzSEQwc1dJK2V4aHorYnF2MDlhQzAyaWJjNTQ1ZUxjekdNOTJycHJLUnI0YXRpYngxZjduTGcwenNqcWxhcTdRV01GQXBsZHJ2dkxnT3lMOWl4UFljRHlZWlJOWEJWeEdiSWk1ZTZkdFAvbGhXVmd2SlNia2lNYTN4a2JYcUxPbDdFTlFYRlUxeFFpRSszalJyVEJIVittSXdzQVgrTDhUQjVzNCtaOFFmb0x4M1RoZ2w5QmdsMzl3OUxwVDNld0Y2b1E5c2RydmRZdlFUK01YYjgrK1krMTJ3emJIM3Q5NWpZaGZpM2RvM0s0dkNVOTI1WVUxNGhUbEIvckVzbHZ2Q3pNWE5qc3hjbnBSN1RSanE4S1EzSUlNZExxQ0h1d3VMZ3lmSWc0MGFoZWNjdXdGV3h1eGxsWVNIQUVUVW1QSjRja1RVSjJwWHNPOFQzTHJiZk4rdU1MSDNyT1BEc2lEc3ZQbHVHQTNXMFYzRXA3RWsvVVl2THBhNXBNRExEMjFMNHNWUUlDNTJmLzU0WGl4ZndnRU5SR1cvMk4rTVNxTDBmSzQyYm82d2g4MEY5dFc0WTR0NXJyY08xQnpuc0hCeXVES0VEdS9WMGZmWTU1MUtLTS9IdjJ2NVVGOU1PVDh4UDl4RjNEdmp4YUZaRzV1WEU1L0FBS1krc0U2OGJ1VXZURDVlQXVGOGU2cWozQk9GQm1VRE5qRnhlWHdGYlVZaU16N2p3V1d2aFJ0cFhoOW5tOTdhZW1aVjBRaFdGdkhINm1LR2ZlZkJNeU5ocjVMeGZJTW5hL1Y0M3ZXMVdhOUhDeUt3NXhuUkZzeDVMd0ZCd0k2Ni9BOCtHeWVSdElqTlZlVGJCYkRQVzdEUzdGaFQwbDRacEZ1TVVRTktZSGtqdHBSWHkxaFJWaWEvNkQrQ1dWckdrQ00rK0dGMHJRcW52N2xiU1lEUmtqdk9aVnpTZ3c5RzhJWVJac1VBeVZYQzl1SWRtVUpsa0o1VVBrREtoaXYwZ1lnakgwWFA5V0hNY1loTGEzMDlxT1VScFhYano5YUgycmR2K1lIN1F4S2hFQVVRa0dDbUxDYnl4WThoQTdtaU5COHJ6UjgzOXZZdDExc25GMGNKVndlODdiZXlJd3JkTXhZdTgxYmVzTjVUd0lBdmpCcTJyMmM4MkF4NHh3OVIrZmIrOENLOEsrZ0E0SUlSd29oajhZQmxqMjZkN1d2N2d4ME5FTTlDS0VGQktDNkM4RzBXUDdKNkg3NEJ4OUFSaHV2R0NvUjNERnowRER6ajNXTlJGVmtzU0FLUDJwQ0QyWW9jV0JQelljQUJPRHdTOThhVllranc3UkhqdjNqWmpkRkp3Q1ZZSVRkYWVPMWo5TWVHWlAzOUp4ckt6YnAvNzVHZmtBdTdnWVpYRFBlRjdlVWlEU2d4cEVUbFJWdEJGRzk5WE5WYnhlZEdQQ3U3RVNhZVQwY0xhdnhhamdwT3hnMWkwRjhBT3lZVUJYdWZVUEFLZUErMGxnc0F5OUJaeEhoL2d4WExHS0Rlbm5leStxazhENWduZ1RoNUlsWlFnM2E5RS9QTE9wWlBVK2xLN2FjQ0gwWmw2M3NyZWJUMEZxQVcwb2lmSGpqeStRRFlwakdDcXJpaTNUd1hRR3ZQOXVFQUZld0Y2c0dsY0dIVUZDZVBpUk01Z3Qyd1QwL0hGVWo5VURwc1ZQdHV0dkVEZk1PTm5uSTFuQVlxZzNIWkJiREY1b0Fmc1ZxWmpYM0FPTTEzNTJZVmc4NC84WDJRWGN3bC9qR093aWJqYVJIQWRDSHRTRmxjUVVNT21uL1RnaUVDVnNRNG9VQXFjb0JLbEl4anVKVnRkQWlaUDhnRE5BRXVMMkhnbGE1Ym1JTm9LWk1ReDNHV0hoZFhnYVlvOVlPdkJnSytHR04rUEpTV2xueVMxd3NaZ2NYL0ljWjNuZW1hRlRPMVZlOG13Y2REeC91TjBGWFdUY1NSMFV6RUhTL09Wb05YY3BoekF3cnhpWUhMM0N3N05xaVZLN0lIV0xnRy9BTTdJNzFvT1N2MXZLN3lnNTZIaGcvRCtBWXdOZ1FQdVBzaGVlS3Rtcms1cXBVZ1RQdnE2QlF3SVJlY1dBSXpJQWdvUHE4Rk9ZWWFKWWdIZDBIeUoyQ1ZIWi9JRlpqMXczTnZ2QUhmT1Z4K1hWaW14OGpKQ3lYNXg5ZVB2eTUxUFRLRzlmc0FGdVR2SDVuSHB2M3RKNi8vOXovNnJ6OTVuUi9kbytTN1lneDdhdGllQ0pxY1kySk9ZU21JNklQUmhaYUM5TERmQ0duTEVJQ1hIU3Fpa2QvYlh2TklLOWJoeGUyLzgrQUFkTFQrWXlWKzM0QkYrQzJWOTBBWlRORE56YUthenkzblRoY0NPUEZ5b0wrQUhtRnRYaUFyNm9PNkh1VEhQa0prOGdzZDJGMkhrekh1N0tDNEhVQlgvZlBETTErTDdVRzczeFVFZGcvTUFNVU9NczhjdlRXa1plRG1jVzk0dXcrdkpFNkxnTVEzZGpqMERSQWZSam91Y0hEQkdXT0JzWnNOZ2NHQWh4ZTRDS1ptS2JnbmRtMEFjZ0diUEdwTWNXZ1RFcWgxcEx1QmFoTnkzT04xYnk0RnFjR1BiUlpub0Myc0JPYVBqd1RKSUs0K1JGd1lWb2xIR2JBanJMRFJUNGhqYjN1UHZkYW8zMlhvQ3VBcW9GTFAwU3pVRFo0Y1dCQVlOWnRiRW1hdnMvME5HWjA0cHBtZk1NU243RFBVRzJOMGYvbXFjR3VBSmRDZ3ZrcEppaG4zQlB2NEtwNDVENXgrcnR4emRoRllTVktNaENHYSttN3Mwb0kyTDY1OVRUUVNTbGpmSVRwaWpYQ1djVHpwRzlEL1BsZzFlUDZIek1DU3gxZnhkanNISEJaaTFXU1JEMjYrclBGZzJManpCK3dBamVCRElBanZtNTk4S0FSK0FsU0dDUFhDWXQwaS9UZE05TDY5QVY1UVJTSnc2d1JrWHhlcUhmUlVCYnVCdEgxZis0UEhBTzl4WTVqYUVWaGdJZFlzd25nL1hOUDg4RHZvaUJ5eEF0VFp6eXRqL1Jxd0g2eitwTUJ0NWVMbmgxR0tHL3pBNCtYSTNtTjdlQzNlbjMxbmxaOE1Gb3BBOFk0RkRlMEZzYkVmUUUyZUExb0IyVUtxTm9SaXB3UjVZVWVDekF1VThvQ2NNSjZZeEFnOXd0bWh1Q3pYRGVTU29sekZYY2ZEQVhSMW5CbW1KYm8zcGlnd0xlZ2ZzQUdVenU0ME9JQXNtcC9sSGJZdWFjSjlNV1BodVg3OHJPTHRvSmE3djJ3VG9wQjVkNVQxWmxWdVREdTIxVEFHREI2ekNaaUxPTUNobjAyOFhrcW83cnc2SUJ0RWhrNFViUytPQ0hqVFdVejhDWTVCem9Ub1llamhNeDFFQ0JPRlRraTIyTTRIYUFYa2ZEUnNDVDNvN3g0c1BSc3k4S3FHSDlDV0RQRERjMkVuQk1NM2tPY2IyQUJzVHhBbmVqMGVMMkRNV2IzeVhtVWplOXNjQXpDczMreFN5ZTlCaDIvR3Y3RkVPTlpWV1JMamJzOExUT2tiRzdMd2RMT0FqaHJFbW5XL1FOWllpaUJaS3ZuQmlSbzFBYWJBMk8rV0gzWHpoTUxFdkRqWXdyTzNGY01xQUZ4NENlanZaUTN2Y3EzcUhtU2xjSFRNUm9YaUpMNElCSTJTWXZBTnNHM2hqWWFTQXR5SWlnV2k5T29IMVFud3o0MktIQ1lQbU1KVThTQnJ2U0I2bEIvaDRMNmJWY0tKWWM0Q0NpMFpHNVdOQmNITlc3Vzkzd0VoaEc3c0M0SUw5a0hVd2RmNS9NdWRnK096WXBDcWdJMUdZUGtTV05lUTR0d3ZPQmVibnNFdWhpUlFYQVM4WDRDWWdGL0FDNWFOUE9DS3RWdFRtTUR5dWV5b1RsOEdDbUtvYnc0cWNwZTJzbTRMRVF5VkZ3UDZzVGdZRFVRTXRVUmN1VGV5RVJxTUhNd0dhaENsVkd3OEhrcXZpejFselpDTXpUYm1nVEhSaE9QYnI1TTZBYUF2c1JXd0JtejVIU2dkY0NEZjIzSHVyQ0c2L0FFT2NKT2Y0ZllYSEtrQ0FYNDJjdUsvVFVKcEVNYnhaNE5iSWZwWWZvQldRTDVxeU8rRUxYVzhEbDRJSzQyZGwra0JHUGs4SkFLV2lWSzl6NVZnK1RqYXR1N2RxNnJBTnFJRHJHTElJampNYnJtQkt3TmV0OW5ISlAyR29mN2pTZjd4SU5lZkowRVArckdLQm4wRTFYeUszVUZJdjd4T2ZKZTFoZzBYU0RQWUM4VmlkZUpkTko2M0R2M0tNRmRNcnM1QUV0MVFiWDZnMUlKQVk3WmhjNGpBZzZiZmZjbFp2dkxuMW5qeDlQM3o5dGZmN3g4L3dLMW9BeUxLQXAwRjdTdmowZ0c2Qmxta1FjM29tTkUvQmJQSDUydVl0Tnd2VEZxU2loYklmeE5BZzhGYmRERmxzQzhNRFBuK2pPZ202YUN4SUpnanRwVXROY1I5Rm4yMGNDVThVT0N4ZkRmTU5xQVYvd2FpRHMrSVFPSUFqMVJtY2FiNU9TTHpZc1doVk1PYzROL0NHcGR4amRZYm5nSGZjb1JnSEpBbHNQMER0LzV0Zi83cjdibisyaDh0L3dDQjRDenlnLytGMytCWkY2UUhHd2JzeUxWZ09sSTRVY1VicExEbjBVOGo2U2pMdGJDUWErYktDMHpEQmdIbFlkTWIyc2MyYnJ4VWxGc2NvTDZtaUF0K05uQjc2QUFQeHhhRFRGaFlMT1MrSHlEOTB6b3ZLTTNMRTNzNDBFeU1iTkRIdzBsNTZnZUs2MTdpWTkvenFvL3g4cjM3VDFtdXU1UTc3cXJGRXhndnZQdEVHeUcxa3E0VEU0T1h5UnJZdXhPZFRudUFPejVzekY1VjVvOENsSHBOSENIS1hUTHdwd0NURUlRM3duTkJxQkFVS0hkZlQzQnRCMTZONi9POVZRV3VmQ0x5VE93cnVyazBJNGp5UFdEQUtCUm1tTFhwRVNLTW0wd1JVSUhsdUNWYXNtRGVIeXVFMVFVbFNZQ2VWZUhLRzNmMGpBdUVOd3dhR04xSFpoZHFKTlY4eDJkOEdCUU1iT25Rd2hoaVVka05XQS9qOEs5QmxLWHhiNnVFZFNITk1HbURuRHdqa2cxZGdLYU9iMlljN2FOWjZCV3lnS3hsS01xZTBxR3lzWlBHcGtQU25pSlZJMTFHemxwbmxYNTdXeHRPUUFnSHFtaFFkN09yckNFL3paZWtweGhoUStuaXVzREZjWlRnSy9qS1ZSc1cyRFQzL2FwTG9yeHZGMFhZVEFSTXNxT0NPSXFWMnNid3N6TkEwNjVTM0ZCbHZEclBpbndZUUtoNGlucmpiaXJVcU9ua2hpUUtSSSszaVJNVUE3UDdNc3VDZ1kzekI3d2dlUkdva21ZQThFTW82aFZFUWhEdWxjRlArMkExNE92M2JpUWFVaXdJM3puaTh5Rm5IMXF3OGJudkI1VGhKaCtXSEpOVDhKaFR4SmJCSCtyc1BPcTRqUzBYVmcyOE9TZTBjK0FqakFGRFFuR3ZZR040eHNkRmNlR1l6RlpyaWREUUMxNzhMcGRkMGEwNERmZ1JxMmlBazRWUE9HV2VGdyt3WWg5cjUyV0F3NDFQT3JPR0VKaW94dDVmNEp4dDNDRTBicmhrTDNsVTBFMHlBWUFUTytJWFBud3NXbmlYYjZQYUtUem9mdFhuelRkV2dOS2FWOTI0YjFEWWwydENzY0RNQ084TjhYMWdOaXR4dTdxQk94RHUvRDdnSDVNbmNEVXcyTTF0QUF0RDNXbnhNalEwWmNjUTZvQ3R3RHdsdFJpU2dHRCtJM1Jmc1UxUGh0aSswRWgwYmpYRVJ3ZVFWb3NnalNkZkFTMXlZVGRlZUVpbTk2dDEyNWlDRERLK083Z1Vmd3J2aTBhMFFMSWJDM2hYY3pHRkpmcCswUDdrUlpCZ28vT1BJZTBuSmFBekFzVStCaDB5MGczTzNkS0NSemRsNG43TTlRQkpjVk8vbkJKTG5LOGhHRExrZ1JGcGlCdmFiakR4UkkrQkpWSllFRll2RXBrUVVTSGVENUhGdGNNenRMcFFYNlNxWHhpVWtSQUVWZ0YvTnZQaHIxdG5BTGlJUXJXRkhHSjNzUmNMODhicnc5SVN1QWlmZVpzNGVCYVVhRis2U3p3SDJ3U0hob2EycDBZQVBDSnlnMC95RVhiSUw2enc0NEZmU0NBZlFHSzViMGJ1UWY1Z1JSelpCWHBjYnlxRGI0MEoveDc4UmpXNWhLSG5BcW9FUnhqL3VMR3p3TWNuTCtINC9WdmlweHFnV3l3NCtLaWF0OWVjaVhNTnYyaDBxa2JKYndCeG50dWcyOTExeVlhbDBINVkybTV4UFhsR0pRSGx1TVNNWUtLTjBVUldPaEJxcGkrRWJuWE4xcDFydCthU0dneUpBUGlVWmNOaGNTK01jWWpCakVvR1JGU3daUDhQNFJQbi8yM2RNQWg4TUdPckkvQWhvb1daLzk3WGVQYWRKMCtLOFc4bXBkQ3hKZG15eENlYkpHV2ZEVEZoRmZjRzYwTVBCQ2IvZmpzRThzY0Q0NlU0eG4vZS9jRlRZQ25yTUkya1NKdHJTeWNxQWorQmRNU1RoR0xYYTgreFIvTityWWZ4WHArRkxiVmpQMUhSMjlnMVJPTUYvSmYrejl1ZHUwMkRBRnQ0T3V1QkVEd1EzblBodXdCUEY4SmZFM2dmNElRNXg4c1VBd0o0RDN3cWZ0TjBYNnlZaDErdUQ3TVprczh3Ti9LQlFnQlZ4dERXWFB6YlQ2WXZZaWkzQWZ6dlpBbDkxN01nZnkwSCtKZ0hpVGR3UE9DQ3NXMjQxbFp4MVhEaysyS0h4ejNodXJqenJhaUJOYld2a28xK3RoNDhoZGxyLzRlYlhQKzRTejRTQVVqbTNZRUdhTFVMRDhaRDRUQ1l1THNPVDhubjhWL0EvTXQyQUE3bXlmTGhmQzdnYlJ6WTU0eHZlajRVR292c21zNlRqZjNYQi9qYnR2L0xlOFlhUVA0c0RSd0RJd0Zpd29Wa1RmR0o2V0F5Rzl1Q0RVSFpRWmRHa2JxazVlKzdoL1hDK3ZTeEwwZzZXb2xVeXRBTk9PS1hJMllWTVpic2pDZEM1TkZGN0RHODUzMkJ2K0E1SktkWDVDL3F2a3p4S1pENGJ6WUFJaVNNemxXYU5xdUd6amlDRkJGWUJyb3FYOUVHaFpueFJEanc5eTlRV2lhUThTckN1ZkVIbXFPVkU0cUxQOFVsUTVBYjJnUVZLQytXYlV2L2JwT0Z6MUdDWm1Ka1A5aFJkSGMrMTVCY0dNcUJ3dHp4WHVqbU1NOEsxb1RObWh6QmhKWjNjOUc4endhQVJUNHp0WkFoUDMxalBMQW9sejV2bU9tWStJTjlJaERjajJYR3g2ZjY0VzR4bFNiSndDYU5ad1E1cmNMeXN1S3NuUVZsR2FUUjkyWEFjbjBtYmtydlhBVm5oSWlNZW1kWkZUdUM2WjlvMEsvS1pmTHEyMWdZUGphelFkVTh2a1lTdXI0VHhpUHdYaWJSWCtPZDRQUnBUZGtUUGpOVThvcmVzWlhiSUJ2ODMyalpTUVVhNkNycmFld1BxTFlCOGg4MGZ4ZzlqLzBCRUxHemNuMWNTR2RqSnFaa2pDUFNWVUloaURBU3pjcnZZT1k0aHE4SHZFZzc5WWx3dTBNbFByamxoTHNWVEdRR3BVV3I2ZmdaWkMwcktWUEpSNlp3YTl6K1M1Z1NydjJZemxBNFRUVkhscDFWZ1N4Ymh2Q0xhWUg3dTVVajNEc05nQjU3MkxEeUw4eFJQd2hnQnRVQ0xaNTlSZUFsWkNHRHhPUjRvdDIzSVhsSlpJaHZMU3ZEcTFxWTZRU24yRXlBQyt5RE5UUytYdlBKNUQybTZSdDBMQlhUR2NhbzhTMWNURXR1dllOMFZTeXMrY1BIckVPVllJTmdqdlFrQkozNzQyMnhrZGZ6bUhTb2t4M0FXSXhqVzhQUCs4S2p1T01iNElNTGhJQ0lBSEJSYU1UcnRXZ21mZ0F6QUFudkhQY0ZSdkJicUpOcXcrc2hqTE4zSkI4b0JsK3RlTFp2UWVHV2dZNzhHTEpTLy8rNjQ3bWZ5VXo5MHhEaW95VG9kY1R4NExBZy9qSGhic1ZoaVYyREdDQkgrSFNUZ1BuRlU2TUJqOThQeGt1K2ZqWDhOTjVuQW5YYSs1ajZCQ1dDOFhBMlFxQlFqQUx4TGxDV3VGR2tsdkJYSjlsZEFRK2d5WkdLTU9yaVVZQndBNHVERHQ1WVU4Z0NOR3FEQVNyWU8rWDRZTGFRLzJjTjlxMGNIZ2JLUVluQjRQNjVFSmlKUGZwYmprSGNEMEJLdDRub1g4YnZ4eFVqeXB6TDRZcVlHZmpSQi9RQjVKZ2tTKzhEd1MvWDF3Y1lLaTFlQ1NrQ0lnTFNwN2J6T1lrSHhkbTZvQnVqbXcweWd6a3hqM2xqSncycjhQd1krcm9uaGkza29aNXVNVzB5Vjd0TXUzZkxPVUNDU0dRVXRMZWw3UlJuTHdQMzNTRGhTVXpHWDhyKzB2RkhqT1VIdU0zbHBEUitiUDdCdWU0SEJNYjN2NmFSK3IyTTBveHd2TG9CTVRSZUEvcU8wbGFVSE4rYklTbld2U0NrQmk3eGlUeC9SeXl5dFV5Z0YvQkJyZ0NodWs0Qk5VQ0xyNERoNGE1Sk5OSk1la1JVSlBWWFR6ZU56Z0ZhVTQ5dndpSWlnWVloZVN1VXZjUmtyQTV2UFlCSTBiRGNZeFlSUW54Rjg1UHNUckJLUmNxS2pWWU54aGkraDdSQnJ4S0xzVldjU01YWlltQ3hMamk3Y3E5ZkRLQ1VDd3NDclRnTEZrbytQNFFSZ09nQi9qQy9yQStBQTV1QmFPd0Y4QWNDQXFFbUdqYXdKcGdTN2h0R1hTQi9mS0pKQU5sTlJSUld4NkVaTitEZGJqbENONGpCYnFIWFZvcHh6d1MrRW02TXY3MzRCVStIR0ZtT3R3WXc0c0ZPZk1IYUZUZ2pNbTRsandnSm0rM1dtOUVBcXlRZ0dPNFl1Q2hlaEszZDIwcmZ1QUFGdFI1QjRQZFNIN0g0SCtnUEFHN3FxOFBsQSt4cmpNNGlsY3o2V0R0aTZWRzBYTUQ4MmdjdWhHdyt4Z0EvOXVYQnFQUEtyR1JzUTBXQ2txTmd3TEp5RnEyZTlRUFFtenFmM0lScllSTHExYUFQa0lNYmpXOHc5bkxTb3g5V0VYT0g4K0wzeHA0TWpIOTlUZm52Q21mbGZnS2MyMFRXOGI0alh0RVExWG1YOFA2V01Cc1Z3SFpCM1c1ajdvQXRrQ01vQkVTVWdobEJTQkdjVzUveUd2WitrSjU4SVphM0YwTGVZRHdzVUxvYmo5alI3bmJDRWptZnRCYTBJcUI3Vml4aWt0a0xzYWpKVXZQRk9OZXoySlhMNUhkRGk0ZWxBWWNWUVNCQUVhd0t5RzV1RUlxQVFiTEFYbUFMY0I1SXNNVlNaUm85bVplUlFaWnMrZDdvMVJyc2NEUXl0QXllNlRtMm1RYzRvNlYvb28vN00wc3hBYXQ4MFlvanIvZGRNSVdlcmVFU01vZGFjSW8zMXMyeWh3U0EyUEdZaVJ0bkF4UGNsdjRCQ252ZERVOENXTTBJR0VSdHRnc0xiRVJHZUpoN05RK0ZQcUxuR0xaNlNtMEF5dFdFTkkrWFlzWjZBL0JBaFZDajlWaFNjR1B1TUFpQUNKOEg2R0RXTFpyYlJ3YnFRaGJCVCtVK0pka1pzajF3MmhiSVk3QU53QUQ4ZFVZYkZ5M2d5ZU9hV0llTkIvOHNtUUpVMTJyQVFiMk0zQ0lYZ3pIZklSR3N0ZWw2MWpkWG8vaW13WkRxVkpHNE5pK3pmNXQ3ZjRESzl2Wmk2R3MrSUR1WEdBNkFJTnpCTU9YOWpmR3IzTDkzSEpZVkNzbk52N0pxTDA4VTc3UlByU0VnaDBldHByY00yUXdsUE9DZE1LVUdpM0FjaWJWOW1xVU14Z2kzVmVnQXNYNXFReStzTXBUS3pFMHlDbWxwT2xEQVNnWXhpTGNIWW1SRXorb0I2M2JBUVIwRWpzMTdFM0kxdW5VWEQ3dFdVVDBNTURmTTJ6SXpYdTNSam4yOFBqQ2hXU2RvY0EydjBMUmRZTDNCVHNPVmxjTlZlWGJBTjdxMnQ2VVZKb1lBWTcva1BNU2VhL28rMExkREE1QmtOQmMvaEhETEJMSjU3MkpRTm9ZVHVWMnNrZmdJZVFZbnZCVlFQakpFSkJqRGZEQWd3TE0raDZXVEZlakc2a0lGKzR1QUZ4WVpFemI3QXlEdWI3bjJDeFJGYmdBMlpyUmEzTk0wbXBVdmdCM2pJZCswd0hFYWNEdjUwUlBiVDM1NUxHUXhId1Qyb0d0VEo0MU83b3h0NFhkU3JqVjhlS1lFZThDVzNNZ2lXeFdNVnRZcFNlYUtBbDNRNjdRY05nZnJJUTNNNVhJL2tCWldoRXZpK3BOT2FvZk92ckFYdDRXbDc3REt3Mnp1bER1ZWNIczNqSmhlRU9GbE5lU2ZyRVBWMWticlJmamlMMWVMMFRTQ3pKZWc1Y215YWF0VzFBUjVpNldlKzBNSmNEd2cvd2NFQlMvTzJZdjF0bkdNT00vM1JhK240UktUWkR3UVdBQUQyd3pqcjJneGdMVmpTaVZNakFXODB2cnZIdmJmbjFWVGJURHpWeU1SYmhaQzd3d1Faei9EWlpoTGFUeDFtS2c5R0tDbmtLQiswRFEwS1dDWnBneWw1MU8rMEdSQlZqSk5YQWRtQmtJRkE0L3BDbXdDZ0FoUTllaXF6QkFhMWVhbnZ2L3FxZjQ4L2wvSmpUOHZNUEpsMGZ3NjN3SXBIQnVGbUJSYzZZa0NoY090Y3pzeDNtQ1VFb3FibW9GMUhPRDNFekxqd2ZsNjFYZDBQSXJIa1RFQXlkeDhTc2dLbEh0MTAxMnNncnk5N01NTjExcXYrQldvQi9NR0I3TW9zS09xMllQOFQ0dnFCQ2pWTkhJQy9tSnU4c2xnSitTdlllc0FRQmF2SlBQcWtOTU1HSmxZK0c0Y0IzZGtPMEQ2NlViNGZrcFFmbFZzdWs2QW5SVTFyN3NhVHpYYjhhemI2a0U0TEYrWURTZFo4Z1VCWU45Z1Jld1l6bUhqQW5selhIRUN5R1BaNTB3Z25oTVJXc2FlSDJzNWdSMUFWWmJtdzcreGF2bGIxMGtQUUZ4dXFIVGJKdE9NaFVBc3NIK1B4WkxoRzJKOG5xNzhJeG4xMTZNZDBqUk9VOG1GaEV0dVQyejlzMEpsR1Fsby9yaVAwSG8wdjZJMUh2aE1zem01emlBVlV2ajVzMDQ4NHVxWEZ1akd3VGF3dXVXazFZTGxWWGhOaUF0MkJjNkVId1pTbHB3TkNja09BaTRpVy9CejNoSE9CQWErREE3TWYrVEpYT1h4eTZEOWM1WC84MlYrVU9iRm9ZbHNva2I1UVk0TzI4REVBNkJTTU16eXp2SExWb20vaENtd2hwRlp4VkJ1dThRQzY4MWFuQ1JDQXdGalB0RTF5eDRFSVZDYisxZXZMdWRGc3dMTUJpY2ZzUnd3Q0FBbFFCUDZBdmNNbWxhV2gxZEQ5TEZhc29NcktYUTRuQWRFaUlnaWlqQ0EvUDVhZlY1REVjMUE4bmRhWnJDUzJ0d2hmWWJ5QjFDcFRQd0dGMTVHT0lOTzA0UUZhTjVtay8vcHFvME9wLzFMT05QM1d6WVliSTUySnlUUS9ZaWpiTE5rSnBmU3RKUUJTMk1kdnVXeWVSb2RLbTFqOFZ6c21HNWdXTU5Dc2tEdVBXYVMyeHNQQTMwWGlHckcvWElSL0FPWW9nUE4rdUVXMW9WRDdFTGdCYTluOU9lblljdFdqR0tjZy9VVnJVMDQ5ck9hL252SE8xY3ZPMFVQK0RhY0w1UVhzSG4vOUhPZnBIZy9KRk5qbXVJdjRHMkoySEcxL1RVektUVjNEZkNNWnBQWTViYnVDZWUwMUh4dUNDTzZGcXJkVmNiT2NVQzJKSmczZTFtd1pZa01vQjFFamd1d2pCbWtpZ0JhWUdZMDV6SHJmVVJUdjNFcE9YSFczMTU4M0JVZVBPMkNZVDErWDdQa2hGZEFoSThYeFVqaVFuaDNOZ0x6aUVPMi9tRmVGcjd4cWhYa3I3NDl1TTBPb1FRdnNWN0xORW5aQTlxQ0ZiRWFjejFtSGl4bWZNeStWZVB0N09vRE9ZNDYwUEVmcXdNcXYzK3loR0Z3RWJYOCtRQ1crQXZhd2FqdjM0TFpPSEJOMnpVUnUzdExhUkF2WkJiTWhLbXd6Y3NhSThqRGpqZ1JDMTk3ZldmOFFJL3NLeXhDWHZ2bFltejcrbGp4YWkyTHpTUlpQcHZ4MGJmdExpL09BZS8xOXZzRVZYMnVCM0tOMjJ0WW0xMnRBVUhGMFRzd01KNjJ3dzNSUlY1OFdjOWtqdVpUcG1JcGtDNEJTWVRnUG5pYWlkbUwyQ2pRSzFiaUJHYW14ZDVBTHhOMTJpejhlUW1nSk1OS3BsVHZhbTBBVUxzQVk0Vll0aHhabXdKSSs3Uis0S3p2VDVMbHQ3c1hMdFEwbVo0bnZQQlBsaG1iejJaSStBTXJLVjZEWnJIaEZ2MUkwb0hLbVBRblZ3dGo3dGZpL3oydXpEZmJOb0FjNWcrVHZVYXhPa2haSkFBVENMWWx4WHh5V2ZpVytreklyRVZRQWZyYmpCNWFvSDh0Z0FVZ0lTQmQxZVI5WVhkbkxUd0ZHUFMyNThzVldKWUpnaktMSllvNFh3MFZWaFhBL2hwVmczZGNyOTBYY2dKMHFoaVJoOEUrV2lwVExqT0NTTmVvZHhzTmlkZ2JXOGxxdjhaaW80MFZwV05TeG9Qc1h0azZCSHpkKzJCeWdsSEIrU3ZBUWJhQkc0LzEzVWpUOUFYWmQ1TUlzQm1yZE5rSGJIaGtiOENiejlYTVZHMW94eW0zaHNzK1ZtakRDa0I3b0hNd0dyVGlmbm5CdDUzL2krdzh3SWZDNDViN3k4K28ySlFKWXB0MlBVQnFqb3ZFZmlFcTdDbklOdkNEdkFiOGkzMS9DZ3dNZW12NTB3T2hneXNBdm5KRzBBT1lMZDZYajJ6amo3bE1rTmpIbTFkYlFsbExrVjB4RG40YmRoa25tbytrdG1iZUZJbDVQb3NXUkM2UER2SlRFYzQyY21md0Q0N05xc010UjlTc3haUFh0MFVMRk5qRWZiTmFVTUlMNTlNajh1d0tvN3V5clhRRHkxL3lDQ2dTNWl6ZktRMWZCMGJBUTJiYzkyTXMwdG9STTFSdno2ZTFDZE01Z0ZMUnlxcjdtaWhOQXF3SGlTRDJOT09hMGk4M2FtcmY2a28wNTlsTnltUmVmcFpmZFZjQ2MzMExXd2tsK3VVZ3NVVS9hMU9zOVVrblBXbjlaWVQ5M3ljNkZOLy92TmpmN25udWVFd3R5QlpJYWNFdmxvVmRlTEhSb1QvNCtSZjhCYUtHdFJnTkJNdklDYnNCOTlmb2lJbVJiMDZVTlYvdC8vS08vN3doK0FZVHZpeERyU2E4N2M1RmFhM3dTUkhQZ0RCMnVHY0hmZXlvODdyeEF5Y2E5Vm9oZ2FuVXVvU1RQWkFnblNJQ0VZTmVDUVpaUUhsOU5hNlAvN1Q3ZzBjMjNSbGhzUkRmb1Z0S0VkeHhlajh3VWJOWUpJV2hSeWNCZUJsa2JSRXR2aDlZeDdYYy9JQjFRMjNSVjlRT21kUDZOdDhEMHArUi8yVTdGcCtIcEUxNDVFSmI4WkpjRzhaeHdTV1RLZGhmSzlRR1hxSHBGdjFtU0dEaFNzc01NcFNZeDBCaGgybmJVWERMQlhNd1poNEdjUVVSenpCbmNXQkxzWENubVRwLzBVVThjTGF3RDNpQzhEM1JjdGJiTFBSdG4yTlBhTGloU2pRUnFsV1E3RlFiNzl2U25aR3pkMWx6Y292M09oOWZGVUthdHZWNUNSTm5NTXhrcXNFRzY5Z0NYc1VPVHZ2UHJyc2dIYmErbnh3UC95NHo3TzNEQVdYUVFuMHBXNGJjL09xUnBVNTRsOVBSQ3I4d0F3ZW51TnNWMEF0cnVOS2pKNzRQVG40Vm9iRU1BVUV0OGY0YlJKT2ZKNzBXTDVyQXd5aEFLdXZkclptNWJYaTVMTU14N1dyNDlIUGJySHVaM1M1bGlMaXRvV1lkei8vazgzN0JVaGFrSURaQVZsdDgrRUVxTDcwa3pnR2lqVk5ESG4rVVpaMllDczlYc2wwMXRzVzgyVTZ3Yjk4TDY0NzgzZ2FRUm9tb1ZOaXhBOWduYmdtaWd4ZXZ2QnlHTmR2THRhejdlNUM5TzdZS2xGNkdUU2ZTMUsxdVpHdGhNdWltVlhPM3paR1h3QUF0T0cwNDNTNDRXSWkxNEFhQXkraEpUbWlqZGJVTlZGekhmbzdHU3hhOEdnYUNTL0V5a0pwcVlVZTBUdGdRTldzSGVPa2Qzd3FCdzQzVjlySkpBM0UwaEhvSGJQbTh4UXNadHJwdk9TenZrMmE2VUtNeHVqS0FZMEVpWUpCV0JrUGp6SzJjZXBLVkxLQkI4SzFyUU1wQ01kVS9iQi9iL3VCbnc5WUZ2M2hhdEpuRnNva0F4YzNCZVJmM3I5YnVSbmZ0ZHNhaVBuYmRCUXRSY284OEtMeDJRcE10dE9FUnJsb3dYSmFMNWZJcjRsdFc0Q2Y0S3lzUUJGYlR3dlZ4K200TlAwQWZaaEozUkIvSmZvbnRGNjVwRUN5Q1BBTTd5UTZkdklVSklkdU9yZGhXdUc4YlhvNCtkb2pIaVowbGJESTA2WlVUQUNjYWlDM2JDWVVrQTljQUN2TUdsL0pjR0tiSFFrVCtGeUhaRTJDTGJ6c1hodUdoU0o5MXBza2NCdVFlTVBxOXk0NkJ2WmVGRVR4dzA2SGp2TEIrRTdlUXdwa2ZnM0pHYXhYU3hEODZvY01ucVZDYys3SExPZDBYVEhQcVI1TEpLdllIRHhQMTB5Q0dZWUh6S29hZzVBKzFZUVVlcDhkZ1RCMytZZXZHTjdYSTczZGZ0amxBNmNxSk0wRlU2N0JLcDM1cjFldzYxYzhNdnNoNC9ZQ0JxTWxzQUNEbEVXQUF3dTQwODFWOW0ydzduOTcwcy9lMS9Cclg1bTZHbFJxTGdLMnA1b3dlK00zYVVsTkpGTFNhMVlEZUcrd0crVnZHWTc3SDNtQTBrS2Q1Z0ZWZml2WU1Uc3VFT3lLMW95M2hGUU9hZGZqVzJlM2JKQjZvZHdQSnJtSlZTbU9EYjZYUnZjQm5yYkNiblpYdzNXN1ZrQkdLN053STY3UUZvdEUxSzlBZElPTEhOaFY4L3pUaWpFMThiUEpIeUhsKzhET1NadmtiM3FUWitYQnF0WUJHcHcvOE5aN1AweGtIMlhrL0wxaDNYdzZqRU5OKzA1N0pOblFreFlnNkdCblFBWTQzYTJmYStiMTF4VUYyRFhZQVVOcDUzcExWOTNkZjF0V2VkdDFoVzREeFk3NE5Pc01OSUl3ZmJubldoQldQQmdRUWVBUG9GZFpSbXBqelRTa09uU2xVMU5nc1A1QUE2MWd0SzhiSE5FbHJWcGVsL3pCaFJuZHIwaDU4QU5wbldYbC85L1pLWEhqWWVLb1ZyeFd0SVFpMXNCZWdZNmc3b29BT2dUZGZkTk91Tml6OWFjUTlsQjFVYlR2TEJ6RUFoMkM1WHl2VjU3N2ErQldaRG1zUGRidG14Z1BtdHFBWjdaOEJqMTlWOG10MUNBb2dvOXNGMnJibWE2UTVQMTRJMGJqejA0Q2N2Ryt5cHZnQnRYOEZEV1Q1Z0w0MW9HR1ByL3VZcWJxdFM3N05lZWRXT2c3SWZQbjEvcXJ4aDROYzhEbFBISVlEcG9Ib3ozUURLc0pxdXRSZ2pNZUluVld0cHBRTmt0aGlubm41K1Z3NEJUdVJXQXVjckNKcXRCTjErVTVoRW00Y0IyQVBMTjZtM0tnQ3FMNHFVN2NGNFNpSVVVQnpubGUyNnY3cmpyVndwdE92SWp0dXlmZzdzWGpnZURBR3VHM2g2N0NqdU9SaU5RTzBZdXNaMDM3N2hqZGNXQ0tNMU1RczdSYTRLL2NGYUNHYmdxS1RHTFRVWWJGSTlRYkZma2lWN1BDSm9DTkVyL0ZKZk1LS0Y1YWRsMElKMlV0Y29ETkxPbStLYWk1ejZhY0ZIWHNOOWJlYnhYak10T01DOGNMNTdkSHQ5V1Ezd29VVHNjcGpXZXNJVzJQdlFPb0wwN1ZNY3RwbWpwRzBmQVQrRDdSZldlVXdpWUFYZWh4SzBGS0hKdGNMa05tcWVTcXc5djFBbEY0N3lScXV4a2hOTjR4Z2Vid3NPZWlYK05mRFVxNVRwZXRiUGpaajNlV3lsZWt0UDZsRmdzSEh4aExpOXhPMkJVbi9KckxQQXd3aityb0txQjV1R1JkbW5oUjBoSDNvOTRWZi9MYWp2bmdBMXRlNU5tOUplaUpNdC9sSWEvVlEvZmJXZFR1TUJ2Q1Y5T1dnTUVRdWI5dGcrOGJUc3N2UnhnUXc5T24vS0Z6RGZIMDJ3anpzdHVrbnM1cXNYeEJrOFg3N0FQb053WjRpZzQxRHY5QWZxNHJpWmx0ZkVISkkzRGo1aW1aaldEU2d4Wk5QQjhrN2VVd2I2TjVrODNFQzlKN1lKdGJpVGxjMXhMYmpFY1RYQ29ieUxITjJtelY1T3VUT01sSjlYNXoyR0pRVDI0aEFBV01rQ2JMQ0RvQVp0aW9DSm0wMjRRRnZsMk5xRElhRlU0c01qZ2Nvd21aVjkzVXlOTHhVc0RTam4vQTlnTkVlUno1eC9SOCtNalY0amhWd0JFMjI5UWw2SElUUHVRZ1RtdlNnN1RFdWx1T0VrdW9uQUQ1WUhQL1FyVjV6aEF2Q2JEdytBVHhaN2k3RXdqd0NjREFlZWw1bk5mUU9sNzJXTlZ2TEhuVzIzampqNTVRU1NERG1OcGlLcktlNjZnUjBiTGxCK09FcUJnaDVKSk42RTlNQTZkYXdMV014V0ZjZ0JzWTgzRmErTjF3K1pBYmJOTHVXNmJOQ0xDNThWYlpRcWpxSkI1Y0hBZ0syaHcxZ3R5WWt1Z3Y1c1pxa1Q4RU1PajA2U0F5aTRKZ05pOWJnUXhubEFrbkFOQkNMRzFBdjl1aklHUkR4dXdMaS9xSHp4K1kxYVIwUGorMHpQbFVuMnc2a1FPb1RwdlBESkp0WTBYMXR5eGZnbmNYQ09FenRnSXNBSzlIM2ZxclJDN29oY1IvVituNThiTWFCUUwrZUlGbllwMjhyYXdzNkFHb0xxNDhWQW9kZldscjlFdExIUzFoNitKMUY1Z2J2djRpRGRERGJBUzl6U0hZeXNrN29BQkFIckFBVnhjOXo5UkhOSzRNVnl3dHdHTUVVQjI0ZkszU2Z5VWgvWFZONmJ6RDJ4NVhHTDBMQUNseG4ySkpWYTVoYXMwcnJWM1J6NmwzLzdjdkcwSEw5Ynk1NS9mT2EvNzlkOHZxdkh2UC96U1d2Ly8yYnM3eW9JaVEwWUc1dmErS0UwaWY2a0g0TGVUY2NuM0ZJSno4c2crejMrSS9ML0N5SGN4Qit0c01zcGUyK01QZWdudmZmNElCVHUzejkrOWNOSHYwWEwydWRKT1lGTmQ2SW81MVV1ZjFvMTdMTTlBdVhRMXVnWkpnaWZDZFcwTUxuUGord0lod3BoMm84aEhXd1pPOVRGRzFtMUNUb2gwUVR1RFdyTnN2VjNtMFBLZmJ3WE4rK0tCenhySzRab0daVnNEVWVEN3V3d3B3T3ZVR1o0SkhMa25qMFJraHM2T2I2Yk9iN3JIVUdXNVNCWmRoV2d6Vjc5RHNlYXhzVS9PSXgzVlp5Ykl0aGI5dUJIUDBSc0RtZkk1UXNxMzd0K2Zxd3pSbHNpRU5FeFpKOWF2MTVMSVFBRGZNMVRNb0NobXJQN0NmQUFuNkdtZGpFNmJTRDFDOHNhSWZEdEZRQ2pPMFdqanREN3hqT043ekxyakhML1lKeE5TY2c3UURnZHZyTTUydzE1MDdBQ1pwZ0ZPV0hDc091b2cycmVPelA4SDg1MVpyUkJ1cGttZlZuZGFMZjFDZERPNUZLeUkzSjB1L2t0aTRXQzRNSjd0cXdTQ2lDcHNkd2RMRjB5ZGk1ZnZmT1Bwd3pZWkJBOFFrSXlDNGwyeUFDSGlHWXA1MW45bHEzbFg3Y0VrTXB4YlFxeGdkN1RxT0ZKWHF1ejBrZm1kR0VBZHoxY01ySG1Ed3NITjZQaXVUdTlwOUNXTVR4dzJWRDdTUEdaanl1WlJVR0Z5aXAyYXcxOEFNQnAxS0JSMUJFeGZDYlZpQTQ2ME1PdFV3YWhWT2ZHNXpmeGc0bm96YVc0UzRuN1NRTEd1eFVqK0FzYlBOdFJRcStyRDN3NHl2Y2dvcVN3UWE4VGNUeDV6OFZvM3NzaWRadFlNT3hwSC85emZPNkc5WEpmQUJyS09kNisyazZaWXNGS2pmN0J2QzBWdWl6TXNRYVZZQThrRWFpMUUrdi95ZmEzV0JPbU9TTFR6eTdDRS84ZURVVGRJb2pxTW5tODQ0b2djNWliYUJCNXlYc2FmOEZQZ1hRQjVKdXhyVGdDcEs3NUx5T2poOWErOHJZb3duS2YvS3AxRWdXUHljdUVSMWpneHFuV0V5ekJPZENEV3ZZY1U3ZzlUd2gzUlUrTEZWMlROYUZsQ2MyNjh1SHFZSWRkRitESFoyK0g4QUdqSlljdW1tRkRSNThkaE9pZmhWRDRyZ1pOSW1kWEpkUkloTVFvSmlOWEgydnBEbmV6cjU2NFg0cVYwOGpBNmFkV2NXK3JGU2NGS2dERFk1WG04NDhLdG1vMzlkT0k5ZDJMZyt5REw4UW0yMk1VMWI5VDIydGc1ekEzTnpsRG1YUDArQTJzSm1RS0d1ODlycDBxOUFqT09aR0pleTdHTUFnZUpEQk1yRzNSb0RYV2M2RjNmT2t1azl4Mk5yUG1UbGtyUkZZNW5MU2hma3RMckRoZjFnaVVLdzlybzRjYWxoRzdNOHdDZ1FZU2grNkQyMWgvZXhiQ2ZZSll0Yy9jeUFYYUJMLzBFOVMxcENWTHNGYXRXTE96NVJEd1ZhY1VZZjlPZldkSWc2elFRc0FyN2tyZ0lRU3gzVmluTEZZQ2RydlZjbzlmRzNjdUhNRTZzTVhpZ0d0WkFWQWZENlFyejBzNjdTUGFLakdyOVF6WFRhclpYWUJPOEp0UnNDMmQyZmcyYTE4UTFidGVVZ2RDV2RKNFZDQWJYOFkyeGttcnFaTjJQWTBUMlMveUJtN0J1RjdEeDU2TjRza1E4NmlWTVN1MktqRm4vZG9MTEp4TmlObnA2TXBuNVNNYzBDUWJKaHFzTGJ2a043cWFLVDFhODBGOVpuWVBKTTVXalZkbWlIaG5aOXZNZVBud2xNYmlNYlpjbjJQeXdRZTc0a3ZOblE1MnNuK081M1FjVnRZQXNjRWFwNHNjajJ6dzZ4emN6aUYweGpPYXcvUktkQVA5SjZqeXBOWTUyVTMxUWpsUWNTeFRyRWt5M3B1NzIrRjZQUHNXakQ4VHJsN0xTWnJ0eE4ySHJqdGRhZmpEOHcvcnoyanRWSGR5SEoyaGw5dXpuY0tSVUxmVDVrOWhuangyZnV4YlBpWmhnNmM2d1ZkLy9uWGVpcWJIY1ZoNGVkbi93WDZvYklIKytiTFk1UHhkNHZwSFhoMWhpZ2FIclZjMDBMQ25pOVhKbUVMTS90dWJMTGJPM1Izakk4aW5aNitrbk95N3V4a3BGaDRHMkFKQmlvNGQrcEdxODZPTDltUlBkWTJDWmNQVUFwc3hySWo3TkRLWUVrR1BoZGJiVkhyTklyOXZwRnJwdllhY3NDbFlBWlJaQnplWllrUUpwZGZ4dGp3NmdnWHBEU2JjSXhBR2tHV3lRTWNFMGJXR1VkTGlldDJMeUsvcVpyRFIvaXZIdDlqZDRXRGVWdkNzaHl5ZGhlbkZqcVdZdHNEOENDMkdhWTc3YWVQMGJHTUZpZmFBWXh3d0huMjlTVEZ5akkyUXpTdlJhWld0Rm5aQ1dNNENWVWJIeHpYTi9NTkkzMnpOWHhzMVQ0ekcvakJidW5tbGM0d1A3dVRMYUZ3N2hsTDU1N2ozblNNZkF0RFllVXNpejgveTU5NTlPZU1UMFRScTJsQVRFbTRGbzZuSTF5aE8yL3FQVW1KOVN3c216MkdUa2VDN1V3c05zNGpXcnlhTFVhU3o4Q0Y3REdjSnJYTGQ3R3BBZEVjZkJpY0JTYkFlN0NyOTJtQmdKRGd6c3prRE16WXNsckRNa3pZQ2lKdWxHd1lZYWpXS0Y3UjhaTnZTaE5ZWkRML054Y3lzcW42S0EwbHBGdWRuZlo4bmdHZ2IzUk9TdnVnYXhqak1IckFGa0pGNFd1MzAvdk1pZ0tnSDZqcVowc00ybXdyOEdPc3pDNzFZVkwyc2ZZcjVJN1cyNVhpNEZvTWZKLzlzby9Ib1c3UStmS2NXQUsySG5nRkZIbzZjbXJMUzNSaURBYnZVRFU4OEl2QnNzRFRFR2VWUXUvMlh2OSsxNmM1akxLT3YvYzhmWWJtWS95WGovNzZzdjc2OEh1dDk5ZFcvMTkrMm9vMm0yWWNzMkUyMFhtOHVNOTlPOVJnUkl4TGV4elhZbkVGRmc4bnNqNGhweVhiKzFFTllBc1pmeUJCZk1kVXV2bGpPa3V0bWpVQnlpS214Y0ZmcjlXYVZlTDMzZFZxSmRDUVBQcUhqZUtmUk1GcGRCSENHN2RhemFoc01xQUVORWgvbWltNjRjaHBFZ29keHVVMWg4bzR0Z3RiYXhjTUxtVmJ4QnJBUnN2ZWRXY1VtVmQwMUlkd3pFbHNnRmZuV1h3dmJKZzFTaFp4T25vRFZjZHZPNW5GMnVRSFk1ZjRGNVE0ZEllMTJnem5GSVc3Q2cyUkhUNnpiS2kzY3ZlN09tNmt4dGpkVkV3Rk5sYWh0b1J4Vmt5aXFmZmRINU5od0JVd3kwUUhUdkI0MkMyQnA4cjJaMktQQnR1R0dSeU90SUx5eDlNeVBIL1ZNL3V6RUZLSkY5Q2VOdlAzaHkvdE1NZ3NPOHNhdXBQYS9vemsrWDNpei9lZnZ5N1gvMzQ1bkVMOTE3djU3Yi91ZGYxdTl1OFgrM096WVp2Nys0QTV3Vm80R0lDNWZ0WUpldXUwQUpuUVFjRGJudGVmQldubHY3amQvKzNMT1hYcE1tZ0pLbUdsTFRIRkJtbGZJVWFmVW9WWGhoWENYOTd6OWRhSHhjdERhaGxQL05GUkRUZ3QwL1NuZytZM1hYU1YrMDlsSms5d2lza1EwMU95akhNM0R2NENjRWM2VVQ0SDU1bjNodUZhSHhGUTJwRk8yV2h6dUZKQ21VQjNUbHZxanJMVTRSekFQN3M1cVpNTWdQMCsvVFBiWnJldmRSdzM4RHBldTZYdHVCSHMyRDZyMCtkWmZOdEsvenpzNzFGdDFYUFNiOVJsT2k4UWQvUmFaZmZZZkYydVV1dVlaM3pVdkUrelROb0NNajAyUy9Ic3JrNTd5QU5vQlB5NW5hV0tBWWRBUk4xVy9jZmNFNUQvZno0SnBOc2hLZEVaK2RCdWEzdUxJZG9jMFhWbllCUTBKRm4zWkozS1owOTV1OEJMdnF3ZUlyNGlIaTlvbThuRWJ5WlRKM3pNTmlWOFcwTmc3RVpYZEVhTXpaejN3Tm9Laks1b2JNRkptTmIrUCtBU3A1YzBwMDNNRklVV2svZm9qNjIxMVhHNElRR1FNVEh4VkduZzI0ZTlmV1ZjajhQRUJ0cGxGQmlvYU9VOGZqOWhrbk1GYTRyTnkraHloZDEyY1p6U0ZCa2tFQjdvdEk2WXVnMjBsNjFWM1NZQ1BuMU0xWTBuZXV4bTQ0a2l2aWZ3b25EMTNjTnJ0UGdkQ2JyanF0NE9jVmI2TUV0ZnZZenpucTZ6eHlwSFVLajFuZWNnQ2V4S2tIL2IwZFFCR2RaSlllMTRUSStYZURCM0Q4NFhSODRTTFZURWRBQU95RWpseDRJRGNhM3NjOXpGc24rVEpjTTNkU0hDVmdhMHo4dVNRRzdzU0lSL3pDZkhIVG1rQ2NDNUNqemV3WWZnRjRVa0d2QTNiZUhJamZBNndoaDhVUjF1QnIyMFFMSTFnS1V6WCsxcnR1M00rbDdBbzUxcnhyMlg0UkNibzFhUmtiWHhxNlJ3dHgzZmhDMVpqcmJzTnQwNm1yVFpKaDB1eHgrRWhIOEZJSUlDYjhlNkdNazRKWW94T3hrSE1IVWI0clJyYWN2R3JCaDZQV2pEZ24wVERFajhoWVlYNmJNSldyTVlDM0wxOEdKcERJY0JZYmQvTTZET2ZJL2JRVnBPWWdOUVNIWVY3d2VaMzIxZGRhK1RSbmVrS3B3ak8vZDFPRVlrdm80RGRoaitHY0UwbnJ1eXVHYzJGb0RTc3JFNzlacWxXT1djd3ZEdW5PWTRNeXV6Zy9HQmF3cmk0OXptTTRoa2xGL2hub2JVbUlVc0h3UGd6Q3pUU2hpQ0JkRy8wRWhRSE5UVnVUWkNuTGFQVmV2NnVYUTdadjZNZVYrMnpmSVNvaGRyWVZ0M0lJS2xhckJLUU9qRjdqZHNlL0pKSC9reDkrbmpjZHpjdG9LRjFUZVNid0dVbHNpQUZBcjhtQ09icG9ZN3RBY29FQzZQNG5BNmh1VU1wMVJTWkF1MS9aVk12R2N5N2VucmQ5YVZPZW5sK1EvUVFoN3RwSHM2M2hZNVlkZnMzT2UvWmJNaVVtU2dXQzREL012Um1qaUhYNkQzMzRrcjZWSk1YclpTTEZnSzFpc2lzN2tEajQwN09rd2hPQml1UUh2Q3llTTVvVUxzYW5IYVlndWRGdkJ0M1FKN0trVnZUdGlTK0ZsMnM2NWRtMDAxd1JqUDVIbWR2TXVsM3BNYmcwQTUzVzdBT0RxSVk5b0xFZ3pXTEh2Y3NqSzZNekFBOGJvOHJXR2lYc1ZoUGdrRWJsMHdHSUdmZXUzOUErdEg1MjFpRHI1cDgyTXBnaEVicE8xU2JiYVBhZ0l1UHBIbk5LWGNuUC8rQXZkWlVaT1EyUTU5RkhhaDNFdTM3YnlRVkxjUTBLNEpHTnhmWTZzUXlQYzR4WDhiWFNVN05nQjVCOGRRMkJ6Q2wxOVgzY3dvUHRFQ0IxOCtRVTIzU1piM1FsOHcrc1d1SjI5bkhhd1RtQ3Mrb1RrWTM5Nlphbitla1JoZHExMzlheGd5ZlMzeVAyVk1kN292MFZabDI1MjZaZ3NORXE4WXY2ZmRhVGszeHZPRndxL0JIcVlFN0YvUm1oU25POTlHZmZjSm4xeG85d2VOK0R5eUJXenMzTXR6cHNpWG5taVJxWjBrMlJkeXRONi9KSU50NFBubjlLcnJIK09yVEtEQ0dUTmNaN0c1RGljMC9HWHp0T2MxRkN2MStNNjJKZ1pQd1FaOFR0UnhJalFPTWJXckJBczZZTVBmVi9LMFlRN1NaOVExc3owUTRyVTEzcGJPSWsvd1hTRVFLMnByRXR1S3ltcEUwYXpMbWNlbWltNk1xSFBRVVN4Vzg4WHJZYXUxTmRHT3U1NHpNb0IyczhBc1ZySGJHR3hnLy9oSTR3TTJYL3pFYmdXS2R1YnpXbklML3d3NHJYTEdMNy9Bc0FhWUZacGhvOGF0TU5ZRFpYRzJSbEVRUGxCTHV4eTFaVzh5WkhwYlhWeFEvU0JjeXBhL3MvK3NpaTBzRStWenFJbmlzazlTeldCeGMyZzRPajQzMEs4dHkrbnRHSnlXN3o3T3VMVHpGbEtDSlBkamRyR1k4ajBFRmtwNFc4Z1c3UzB2ZGpWYTd2YU9LNVpzbDUvbGx1WmJMVnBIc09wdnN1RnRkR0hnWXZDZEd2Y1puWmRUbkl5UTYzSTlUd0pOWUFpbi9aTzZPeGxkMFVOVU1SMGE0dWtWUnRxR0V3YWhxb2diemdRRDVLRHc0V3d4NEpLalZEd201REswLzFpdENUTTFodWY4VjR3R3JBVHFZRDdFNmdOKzJxa2dIbjZ3OW01TlAyREdIblZQSXpqTE9WOUdjd1ZheGM0c1h1ak1WaXlDWVhTV2wxL09tNjFPbHd6bU1UM0lZMkp0YnE0TWppcFlhUnM3Vzd5U0pjd1dlM2dTVDdkZHhxNlp6d0pCNTc4NzJEZWx6MktVN3FCb1c1Ujl3QVlROFpBSmpicnp2TDdMN3A3SE1qOXIvZTFZemM1dEJrTHdBamR3eEc1ZTRLVGRjZmZuREJSNzI3TnMxK2trZ0tsbEZ0U29INUxvZEhlWVBVNDBPZXI2WG83ZDRvR3FJNVFNNnpsVnhsWk9BRldRaGo5dnFnNmpBc0tNQVo1QkNLOGNxMVdqeDhyWkxmSXRwL0tpQU9PTWREemFuZnA2MGpUZ21BcVFvempVeXFiRktEY280NFRqcjdnZE5aUkFqc2FoOENHYU5SdjM3UFczMHZhY0t1QUV5Uks1UGU4ZUhndlBEWE8vNGJSNG5ua1dGMGlNYStOYnk0QjB6MTJ0ck5tMm56c2tKWmorQjNJNXU5NmhQOWlNZGlZdUE4R3JVME9BQVRycVdmQnI0Y25HK2ZjNlJYK2FmRmJsekFGd2hEbDY1VVNvOGZvc3phbGMxZW5IajUyY0Uvdm5SdkNDa0pyUFNhTGRDYjIydy9NR3dlZ2g3QmRXL3N5RkZZcVpKV3ZsMXJ3NnRON0RFU0FhcUtiOXBJK1R0dU80VGtsalBpTnRlWFVIRVJTN2tzNEc4TXI5eklYVVRPOVR5K0dFdDJLMytQSzRCWUJJZXZGdjBJUExlcGQ1NnRpc3BrQUZzeGwyRzNpVDRjVjB5cDFCeUtjMXJoZWJHQjlyMkVHK2lBWXdydDVuY1AzRmF0ZzZjc1RaZXEwajBGYk1taWRxdi9USmc1Zi9qWjArRVlwZEJ5YkMzcHUvNmNBRk5NaE9ybkFvTzk4WTlVRnA1Nit0KyszaHN4MzgzeTU1M01XLy9CVDdmdjFUcUo3M0RoV2M4WnRmWXJGci8vZEw1cDlYL3R2UDhQUU94NTdyT20yVCswYWRzUnRTYXRERnVqMW1BU2NkMituelg4dEoxckZnWHUvOHBqUE80SFpHbmJPajJqaHZlUDF6WFg3dktFUDlQZS8vN1BtdWYzM0FmenhmQkF5MVZSeW0rOEFUKzJ0YWJqdkl5bXJoUTF5emhXVDNoSGdIZSs4dkovYWw5MCtiMTlFV0RHaG9XSC9rZStVemdqd0Fkb0tSR25iOUhJanpyQytmU2pxTGFDTlE5SmtYWnFaRkIvc3VvOVZuTXZqNDRFZXh2dG5vZkxVa3NaME9pZ2VOeEZuRFJEeTJCMzY2ZktMNkZ1Ti9PTWh6Um9VejFWeWFOTmc3UU8vZVRwNWo5ZTFYckxhaW53cHBpRVVEbmo4TldqcjBmYzE0Q2N2M1hhdlZYNXYwOTF0SUNhN3pVREl3ZHd0T1FBZ1RrUWQvWVdxRFhadllrOWNSQm1VN1IvZ0k2YzBhbVd0NURFenY0VFN6d0NxaXN0WWJCdE4vTm9FTmNVWFZ2d1duckdFZnYzNDdGTlFSY0o0MDhhNXdkWTg2K3V4ZjhBWE9tRnZMVm5mdytKM3Q2ejZPdkhNMmNYVjJKWllFWUx1YUNuZU9IOWluRmlWZmxxUGFUSHhPZkxOMUlOakNid0lFUGJmMGZ2eDY1K0IybUNzc2tvWFJ4ZXBRNCsxR3c5S1JLL3Y3djl1aEl5ZmJ5czlaQldqZm9xTVpyQzJ3V1QyZlV5YUgxWFZPLy84emF1V2NKWlp4cGUwdDhiSVl4a2s1M1FtNU5pVG96VjRqTTdnQThlOVg4Ni95b1FBcU1xK0Rld0wwSlBzRXVBTmMrbkd3OThVS2VKbHQ3UUUzUDRPeHN6ZCtrNGVzeE40aG1DRjNZenJkb3NqOGNadnhXRnp1WEliang1RDBxenZHY3o4bmlLSHZyVGJtWkxQaWJNd1pNbXF6VGdkYW9uUUJSdW5vM2Y0NlhkSnVtbkRuQ2NWdFRxdCt6VkRKSGVNYWhqeUJkZmFtT0VqUUdDOEtnVm0rMjdiY2FscUNPVTVlRURmYThSUEd3aGNvK0tyMXpJYVlRcVRtQ0lPMnh1TkpLZklLbTVReEl1MWRIdGpscVZGRzBJeS9BL0tjTXhWQ2RneUVzUkdXWVkxaUF5dEs0OFFBNTQyYkM3WUxZTnRKNkltWXpkUFdLamltQzEwZGlyZXNLM0RlM2tuSXdXblptTmRZemF0QnhzRkJHQjE5WlFlM2pYek9Gc1dGaFhQZ21BSFdSekRrbE9wcS80NVRCVjdJU2djZTR6bFhPeHJ5Wi9TdXAydkFkeE9BRU40SWJ1RkMvT2NjRFFkY1BMMm1hdU5wSHBaUVlRWHFQblgrc05nejZXZTlEalRCdkw0T0VKbFEvV1dCOTdaSFBEbnUxUW1tQTlLUDZRQUNkdFlEYWNKcHJRZXBnRUpnOUFLSUpUc1haTThITjdsZ0pVOWU2RFk0eTVZK2JMVEhVRFJQV3pLR0hIakd4M0pwUWZaMndCaWtKanRFYm4zT3piYkg3QTdiNEpQUkZkVFc3cmxselpxSnc1RnN0RHZiOThEWlBCT3c1V2p5MzlOVjJEVTczTGVueGxodzRpR3NPem56RnZBeUVCM256TmdEYzN1Y1hDLy9NZ3Zid3FZeS92VFRycitaczV6Ly9xMS8vYzRabW1uYTBJSFl3K0Y0UzlTUXpubHNGakpWcURrZ3k1NDlKMzRqMS9FYzFWTnRRUnVucmdZaFRzbngwSmJjSUFqYjNyTFZGcDdmOGV6RGFjVDFnajBEOG5KMElNWXBiYkpMNVQwWmlQa2pkdUNrLys3ckczUUtDYXM5Tm9jcHNKbzVRSjZxYzJaYXNNRTZ6M040MFd0SU5XRzduajRkNjNwbVROczBkUXBJbXhYL0FHOGUrWWtYRnN5dzhUWTFmbHNOOWo5OHBtS2ZmQndEbXJXT3EwcTFTcThmRUplZUZ4S0FaUTZ2aFl5ZkI5dkJBWmI3MW9LVkFsOHpjT3RKVFhaNVBFNFp4b1JYNnlLQTBtMUQwVzB5ZDZiU2lTTFhYMlRZczI0TVVuaTRubU1oNDVsWWdwTjBydkNKdStWd3JZVjdtVmJvTzlvUjhaaXY0WVBxcUJjd045dDRuai8vNmEvL0RRYTNtZXNjOTJVbTZNaEx2STY0SEdGaDFmNHBTUEhmdmk1OTNicXFmQkQvYTBHRFZZdFdtc0FFZXJ5SzNTZ0E4d3E3M3NYSTJGcWVCd0J5SEE3L2RDWXpiTTA1ZG5Za3hOcUNuaU9ZK1JlZFA1S2hDSVc0TmRyc1dMSVlmOGsxazNOajJWL0RpY01tdkEvVzBJMktuS21yd1ZybjRyRmNGbEk0SWVXazFhLy9OcS91bVhiMllldTRVWWN6a0FvRzRsUVV5UFAwRUtVQldoU000OFB5SmZDK25VeGdCYmZSUUtlZ3JlbjhTNk9aZzgxM3FMZVZMdnM5YzZzdDA5SmFhRS9EbTlGOVF3WVhNS01EVENRUWNMSnVJSEtoaFBtdVRsVi9uQ051QjJIOW5ML0V6MGhMMGpuQXprSG9BLzU5ZzRiZ0ltd2hPM1huQXVwbzVuMC9SMTZCTlp3VU5rMEdkU25lNjd3TFJKQTEzQVpyc0VpR3J6M2lZSUFzYzRjYzgzT21ML3M5U21HM3BtY3VuQnBtMkxWSUJhdmxxWmlJUEk2U0hmSGNTS2crVHN5bXJWR0h1WWpud29BQmNZemRMTlNnVFV3OHJnL28rUzRMOFo3SHR1bmkzTnhzTyszbm9CZ2I3eXdaYm5mQlRCZWpwL0IrVEthbkFWVHJoTE4xRS9HYzNnT2d2SGZGY0g5R0hFQmlXRldMV0lZRDQ3ZERNTG4xNjdsTnNFN2VCRjJ6dkIrSGV0Y0tCbkcwZVA4OHhJN25OR2NUbjJkWVovZm55Q3VQd29IUy9zN0lhcmdvdytYaEhKeUVxN0gvKzNNTXR1ZXdObWUwNEM3UllLUm9mUlVid1NXZFUrUVl6SEp5TGE5aHlBekJCZTE0RWtPdWwzUEhXN1dYd25sdHJPOEh0a2FlbllrbGxQdHpHaU9nRVE3eDA3eFBMTzNRaG5lZHpqbFk1MFQ3YjRQbU94NmxnZi85YjM3VW9IWTk4WVRxSkpYaWFXZkJUbmRXMU1DNFUrNnNuSmJtZTlBZGd2NzhBTldOdEpuZ0c4bE1DVnpkbXdIdEhBRXp6bEdScTZEWW9ER25ERGY3MHhNd3FZS1FuRFg3SENMdHlOSzdmZFhUT3owNTljeDNRZnJyY0R5RGRyTEFMSUQ3RGxENUtydW14SnlJaVpUSHMxODhaUS9rN2FHNHcrSCt3U0ZMOFQ3Qmxwb2R2Z2VLVjU1UGR2QnJUcXF6VzB4bzRQUzY0Y1JGRDBldFFLSzZQQ1BTOFN4ZHN1eXI4azlBaFZVL3ozMGFBVHlmMDdwNGJFbnY3VHFKRjlDbGcyYVZpZWloNVpDOVIrb3ZCN0RCQW9kUTdIQW8vVlFhMjBKbDFROG0wSEdKU04xYkFLTnJuek1ub0dCQi9adU8vQm92YkJzRGFrMmRaNTNZbG92aVBBR2kxUDNCZGViVm9qT2V3NGJKYTVmcC9qcks0MFFLWE16ekxEM2RFZ2tKMnUzYVQvWXpkclBsWUdnd0ZKL0pmNTEzV3IrVCsyK1hkWUgzT2RySEJLNVJUTXUxcW9uaVlEdExZVjJBTnBESUkySi9CQXhrekZZYmN3ZGwyaUNZRWNoVHNXODk4ZkFvd0hsS1psNm5IamhRRTJWemlwNTl5UkNkZld1dHYyakY3ajZObk5PQmRaQ3Zqb1hzdjRraHk5RVA2VitWd29nL01CYnoyNm9IbW9KYVdjRURuVzE1bFgwWDV6eDdDb01UYjA2eDJZdXVCeVVWTTJ3MHhWTnVZckFGclZycDQ2a3RrQWZyR2YvMmlrZUhqZ1pkOXpsQ3B0V0Q2SXNUS29LWml2dmJ4VGtZY1hoZ0FZVFVIdXZYOGRlNWVBNFpodFVVK3R4V2lHREIzOHVXQkNkdzJXdDc2di96TDBiQzR0WlFmMlhwMzUvM3p2aVArRHBrT0dJYllybmxaZjEwSHEvTGcyWFFWQ2ZRVEg0WXhGcXNUNDIvbmhZYzFmcmZYZnJrcllLRDA2OGwrTFp0QVJpTU9GcmRoam1ZeDQ5NTJOQTU2UTYvRmZSWDVvdXR6RVB6RFZ4Q0FZUHRPaWJBTDMyQ2dTZURqWTZiRHg0UGdHTENjczdad0k3QWZEenBHTFY1MDFoMnVLZmJ3ZmJ2OGEzZ1c2aFdIRmM5N1dhbWRPWHlSVnhjelMzb2Y3Y1ZFY09od0NhMUM0N0trNUE5Wm1NYmdCcWVWWHNMdWt5d09ISVhMQ243aTZiY1BxY3RHdE1zUVVwMFRpbHFKNmQ1bzMybUl4OG5WNWFENWhIK2FJTnptUFA2cFNvRmFzSDB0Tk9mMDJEOWxxTjNuZEViNHpyVG1jMnN0VE9ZelVEZjQ0bW96aDdwSnkzem9tdmpOdDFqcVdKeGlxT2xNL3lZODFNcUsvVUFwUjJtV1crUHV3UkhGRHRjQUJrdGdmZGU1eUszUC9OcWVVaVk4TW5Rek5TZEMyU2UrSDR3QUx1ZVNQR011OGJrTWI3WkRCZU91bnFlRk16UU10MTRDbUcrQ3dkV0grY0N2bVUxc0E5NDJuNWJ6MzUxdk1BNlkxdzgwZXh4TGsvK2RWTThmODdWd3NCdFQ2NEJkRjFXVE51UTcvR0FyTE9UL2ZjNUhPWjh0QjYzUEpvbm9Kd0lUc0M3cjRvcmk1NTYrcDFScXg3TW1PRDlWckZBUUowWGpiZXlpTC84VFMwOS8vdUZCTWZtYVFwT2RUUUVacU9EU2Z1VEVUeERVQzlNakdiWmVRZkl5RzBGblFPbUhIYTBUenF0NU44NVB0WmRGYWVzMjBING4vcC82VUtkby9DZHZQM2ZLODNmWnZBV1JITGFCVDNsN1UzNHhWb2RURkE4M3ZKek9Qbjc0ZyszWi9ud285cEtlSWhkM2s2VUN3NTl5MGlRMjQzOFZLTXIwMk5Wc0g4blR2U2UwN1doQ2oxWURjb25ybmhxVFpEa1UzblRuWjU0c3lMb3dMelBJUU9qMlc2SkVFOG5LTnA4YjNHeUliYnlPRGtaaGdEb1NKY05MdGFQV1RtMmh2UGhrc2ZrZ2FFZmg4TUhKNWEvbmdyNjJnemRuTzJwTDNMNnFSV1lucldCdkVIWDM5Zmp3OFR4ai9OOCtSbW5PK0NJZGFaVzdLN29zTTl1L1E0Tyt3WjJPM3I4T2NWeWVBQjJhRHBNNERvaEZBQzUrR1U2MmdGZzViQWdnOVBSVThLRHh4RTUvTXpEVDZ5dGhPeDc4dDN5YURsSWhBS1M4UDAvMG9LY04xTmlnR1pEMTJFNnJjYUoycStORGluODh0SDJiaWZVOFBXY0tTdXRjZVhKUXVkUTdzdGNkUXdaMW0rZWR6aXVZdDNDUWp2UkRldWJLNUl4enhPVHczMldPVEFsb3g4azBldUlLRE9vMXJNU2tXWGRUSUZJMktsUkRKbitDaXcxVE02ZTN0RkRmSzN4N1JhRWJ1TUwyR0hrZFR2MHNUblo2ODlrMDduUElYTWUwcERGYUd4ckd5ZlZoS2tmMjlsbUVtalBTMHltZjh6ai84NDdBdXI5WnJLOEMxT0JlUzJlK1B4cmdiUW1wSjRobmtYRzZRR04xVm5pRmlaaDRxMW1mbXgxeEtmYmpIUTZXS1pudnp6YndWTzRqVGVlZkIydjNlOXdzdWFPbnJSb3pCU1Z3NXo1VEE3QWh2cjFnOWJ2RHlYRHRYbTJXSmFZcHRrU0Fvem1PdEhmRTZsTjRRR2x6cEZHTnBRQTh5d0xIUjYxM2gyaTNKNXFzNEg5V002cmxXQTg1dDNSeXhoMlFHTU1uajJtRHgzUVVCMmNXeXllbHVadExIZ3pjZUV1TzVEV0pDT3N0bDFud2l3MjIvTy95K2U1Z3ZhTlRKZGx0R001a2NQbjlJMDZDT0oyQm9PRFloVE5aRnZyT1FzbExZOXlhaWY1eDI0YVhiSHhxV25lVHZyT1pKd3pSdFhZN1duQVZreGdFdUgxL3RqZGpWTGpBNnRERkpNQmJxOS9oMk1oRHBIU1hFSGVsdG45bU01Uld4N0F4TDdaRzh1NzJyaWhxelljdWJIMmw5VWVyem56Y3pTOURHZW5NN2FwV2ZOd0NsZFc1elhmOTNSOFk1RndtZG5HRzZPQW52c1R6N0hmRitUTmdqVkxTNXI4SXVPNTd6dzhkQ0pqNlJaYllDVkZFaDA2K1EwM2pYM1RJWGd2K1pCZHA5YXd2eDdlaWcyd0VNYUtKcnc2VDJYMGRGcDMrbVhyWVQ4dUNNSEN1WmZsb1IzWXg5SU5aVDN1Z01uVHkwMVlaOTc5NE1udTVaRVlDSUJ6Um9Ta0ZtK0pvTGZGM0dkbTFobG83UkN3dXM4QjMxYTdsUFpkQVMvWjdNMEtUdHdkOXpuc09WblR0RHpCUWpWOXpDdWJFblM0UFBhZWIyZUh3bGI3MTdPbkZmZStMOXVqSFQrRjNtVlAzK3JPQnZEY1AvdFh3bk1PVlBMUUdBOXhxaWJnMkYvSlp2ZkllZyt0d2F6cGY2NXpMQ3JJNWZyL0FwWVRxQThhSmVyWUFBQUJnMmxEUTFCSlEwTWdjSEp2Wm1sc1pRQUFlSng5a1QxSXcwQWN4VjlUcGFJVkJUdUlPR1NvVGhaRVJSeTFDa1dvRUdxRlZoMU1MdjJDSmcxSmlvdWo0RnB3OEdPeDZ1RGlyS3VEcXlBSWZvQTRPVG9wdWtpSi8wc0tMV0k4T083SHUzdVB1M2VBVUM4enplb1lCelRkTmxPSnVKakpyb3FoVjRRZ29CODlDTWpNTXVZa0tRbmY4WFdQQUYvdllqekwvOXlmbzFmTldRd0lpTVN6ekRCdDRnM2k2VTNiNEx4UEhHRkZXU1UrSng0ejZZTEVqMXhYUEg3alhIQlo0SmtSTTUyYUo0NFFpNFUyVnRxWUZVMk5lSW80cW1vNjVRc1pqMVhPVzV5MWNwVTE3OGxmR003cEs4dGNwem1NQkJheEJBa2lGRlJSUWhrMllyVHFwRmhJMFg3Y3h6L2sraVZ5S2VRcWdaRmpBUlZva0YwLytCLzg3dGJLVDA1NFNlRTQwUG5pT0I4alFHZ1hhTlFjNS92WWNSb25RUEFadU5KYi9rb2RtUGtrdmRiU29rZEEzelp3Y2QzU2xEM2djZ2NZZkRKa1UzYWxJRTBobndmZXoraWJzc0RBTGRDOTV2WFczTWZwQTVDbXJwSTN3TUVoTUZxZzdIV2ZkM2UxOS9idm1XWi9QOGE3Y21MdzBYeHZBQUFBQm1KTFIwUUEvd0QvQVArZ3ZhZVRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUIzUkpUVVVINUFjQ0VDUVNSMS9VTVFBQUlBQkpSRUZVZU5yc1hXZDRGRlhidnMvTTFuVFNFd0pKcUVLb1NxK0NTRkVzS0tKK29vQ2dpSXJTdXdndnZTZ2RRU2tXUkgxRlJJb0ZDL0tDZ0NDQ1FpQzBrSkMydThsdXl2YWRjcjRmT3pOc0dvWVNpdXh6WFhOdHNqdTdNM1Btbkh1ZWVqK0VVb3E3VmY3ODgwK01HREVDZi8vOU44TER3OUd6WjAvRXhzYmlxNisrd3Rtelp3RUFHemR1eE96WnM1R2JtNHRISDMwVUxNc2lKQ1FFYTlhc0FRRHMzYnNYSTBlT3hPblRwNUdZbUloR2pScmh0OTkrdzlpeFkyR3oyYkI1ODJZVUZoYmkwVWNmaGR2dGhzUGh3TkdqUjJFeW1RQUFvYUdoU0U1T2hpaUs0SGtlZ2lBb3I0SWdRQlJGMzcrSktJcnczU2lsOGl1aGxFTGVBSkN5cndCQUtTWFM1U3V2WmQ0ajU4NmRpNG1JaUlqVGFyVXhMTXZHTUF3VHhUQk1CQ0VrSEVBTkFDR0VrQkFBZ1FBQ0FPZ0JhS1NOQmNCSXZ5Y0NFQUI0cE0wSndBSEFUaWt0QVZCQ0tTMmlsRm9vcFdaQkVBbzRqak82WEM1VFhsNWVYdlBtelUzUzcxQ2ZyZHovaEpDeW44bnZBUUFsaEpSNzlka293ekFnaElCaG1MSWJaVmtXTE11Q1lSaklmNnRVS3VWVjN0UnFOZFJxTlRRYURUUWFEYlJhTGJSYUxmUjZQZlI2UFFJREF4RVVGSVRnNEdDRWhZV2hSbzBhaUl5TVJIUjBOT0xqNDNINDhHSFVyWDhQL0hKamhOek53SFk5NHZGNGtKdWJDNFBCZ0lLQ0FsZ3NGaFFWRmFHa3BBUTJtdzEydXgwT2h3TXVsd3N1bHd0dXR4c2Vqd2NlandjY3g0SGpPUEE4WDJxVEFjeDNFMFdSeUFCWEJzeEtBWm44ZnhrQUt3Vll2djl2MjdhdGdWNnZyOGV5YkYyR1llb0FTQ0tFSkFKSUJLQzdUWWJaQmVBU3BUU1RVcG9oaXVKRmp1UFNyVmJyaFFFREJweVh3YzBIMkNvRHZISUFTQWloMG5oUkVISjVZQWdwQlh5K0lPY0xlbVhCemhmMGZNRk9wOWREcDlVaU5EUVVNVEV4Q3NDRmhJUWdMQ3dNNGVIaGlJeU1SRVpHQnRxMjd3UzFXdTFmWEg1Z3UzWVpPWElrVnE1Y2VWdWRVM1IwdEZmTnFRRE1aSzFNQmpiNTNzbWFtaTk0K2Y2L2IvL0I2SmpZMktacXRib3B3ekFwaEpBVUFJMEFhTy93VytnR2NGb1V4Vk9DSUp4eXVaeXA2UmZTVXgvcDI2ZEEwaFI5UVUwc0E0Q2dsQ3IvWDBHam80Umh3QkFHREVQQU1ES1lNWlJoMkFwQmpWV3hVS25VVUt0VVVLblYwS2pWRWhnU3FEVWExRXBJUUVCQUFBSURBeEVjSEl5UWtCRFVxRkVET1RrNWFOcXNKUVJCUUV4TWpCK1ovTUIyODhSb05DSTNOeGNta3drRkJRVW9MQ3hFY1hFeHJGWXJiRFliSEE0SG5FNm5vcVdWMWREK1FVc2pzdGxaQnRCOE5iTlMybGhaVUh1NDd5UHM0bmVXdE5icGRLMFlocm1QRUhJdmdBWjMyVzA2SjRyaW43azVXY2MwR3ZXZlk4ZU0rWFB2M3IyaUQ5aUpsUUNlWk1ZU1NnZ29RRUJJWlNESGdHRVpzQXdEaG1GcEtZQlRzVkN4bDdVMmxXeWlxdFVRUlJIQndVR0lpSWlBWHE5SFFFQ0FZcDRhalViVWIzQVBha2dhWEd4TUxDS2pvdnlMemc5czFTZkZ4Y1hJeWNtQndXQkFmbjUraFdhbjArbUUwK21FMisxV3pFNk80K0R4ZU1EemZDbFE4L0dqRVY4L1dnV2FHYW5BWDZab1ptUEhqbVVmZSt6eFR1R1JVZTJEZ29JN0VFTGFBd2p5M3pIQWJyZkJXbEtNVnZmZGE2T1VIdUo1L3BEVmFqMzg2cXV2SHZyaWl5OTRRa2hab0JNck1tM0xhSEcwbEYrT1VjQU5MTXVBWWIwZ3AySlpzTDdnSmdFY3d6QmdpRmN6TCt0L001dk5xRlU3Q2FHaG9WNFROU0lDMGRIUmlJdUxRM0J3aVArRytvSHR4Z25IY2NqS3lpcWxwUlVWRlNsYVdsWDhhR1cxTkZrNzh3ME95SnFaYkdiNmFHUyt2akpDS1dVc0ZrdmpvS0NnKzFtVzdRS1Fya2VPSEFtTlQ2anR2MWtWU0c3T0piUnAzYnJjYytyUTc0ZjNSVVhIN2k4b3lOL2Z2bTNyTkFuVUt0THF4RXBBN3JJbXh6Q1VJVDRhSE11Q2xiVzRjdHFiQ3FJZ0lqSXlRZ2t3NkhRNjZIUTZGQlVWSVM2dUpnS0RBaEVjSElMUTBGQkZlNHVKaVVWd1VCQ3lzekpodDlzcXZkN0F3Q0FrSmRkRlNHam9MUnZ6a3VKaVpGeThjTXZQVTNXM1RYWktLUXdHQTB3bUUzaEJnTTFxclhBL2k4VUNrOGxVU2p1ejIrMktkdVlMWlA4QVloVkdOV1dIdjJUL2dQajR4OHFDbWNQaDZLYlJhSG93RE5NRFFGUGY4M1E2SFg0RXEwU2NqZ3JISnRUdGN2YlZhclY5YTlaTXdLWHN2Sk04ei85aXM5bCtiWnJTYUQ4aEVIeUJqbEphVHFPVC9ITUFJWlNJSWtSQ3dJZ01CTUpRaGhIQXNneGhHQllzejFLZTVhRlNTUm9jcDRJZzhMRFp0TkJvTklwMjczSzVVRkpTQXExT0Q2ZkxxL2s3SE42NVpyTmFVVkpTZ2lKTEFRSURBeEVXRm5aRkxUWGo0Z1UwYTNIdkxSdnppK25uNFhEWS8xR2JydTd6Vk4xdG9IYnMyREdBTUFnTUNrWmdZQkJpWWt2djQzQTRrSk9URGJlSEI4ZUw0QVFSZ2tnaFVpaXZGS1QwUmxGbW82QVVFQ21GS0ZJaUtwRkw3MWJXeEtTVUVpcVptY1Ficm1PY1RtY2ZqVWJUaHhEU0IwRE5hNzNtSDNmL2dJMGIxc05rTWlJK1BoNGZiL29NNTg2ZHhkQWhnNVI5SmsyWmhvY2Vldmh1eGI4bUtwV3FTVmhZMkJ0Wk9YazVnaUQ4WUxmYmYwcHAxT0FueVZ3VktnVTVTaWtGb2Q0QUt3VWhJa1NSUUJCOEFJNWx3Zk1zV0JWUFZid0tvaWpBNFhDQTR6aW8xV3JGWFdHMzI2RXBMbGFBVG5adE9CeDIyT3cyRkppTUNBME5oYzFtUTJSa0pIUTZYYVdnY1N2bG4wRHRacDNuWFFWc0JvTUJJQXlpWStJcU5sMXljNUdYbXd0VHZnbG1zeGxGaFlXS0g4M2hzTU1wbTUxdU56eHVOenljQjV4SDB0WjRIeDhhTDBBUWVNbmNGQ0dLc3NsSkNhVWlLQVVCS0xsc2Nuci8vKzIzQTkwVEUycy9HaDhmMy9kNndNejNlaGJNbjR1WnMrYWdkZXMyS0NrcEFRRFVxMWNmUC83OEt3RGdwYUdEcTIyOE42eGZoOGNlNzRlSWlJaHk1N1ZzeVRzNGNlSnZhRFFhOUhpd0YwYTgraHBZbGdVQVpHZG5ZOFd5SlRoeDhnUzBXaTE2OXV5Rmw0ZVBVRDZ2RHBHT1dmUEV5Uk12YXJYYUY2ZE1uWll6ZE5qTDM5bnQ5dSthTldtMFh3STRvWXpaV2xhTGs0SVBJa1NSZ1NnU3lnZ0NCSVlGS3pCRVlIbUlva2lkVG1jNVlITTRIRkNyTlY1WGhqUy8zRzQzbkU0WEhBNG5DaTBGRXRBNVlMZmJFUkVSZ2NqSVNMOWE3Z2Myd0dUS1IyQlFjTG4zYlRZYnNyT3p2RGxwK2Ztd0ZGcFFYQ1Q3MFM1SE85MHVGOXdlTnp4dWp4ZlVPQTQ4eDRGVEFJMEhMd2NFRkZBVEpUQ1RFMmk5SUNhYm1hZE9uMjBTRUJqWWoyR1l4KzEyVytQOC9IekV4OGZma09zOWszWWFrWkdSNk5peEV3QW9DNEVRQXExV3EveGRYZkxoeHZYbzNLVkxPV0NiOGZZME5HblNGUCtaUFJmRlJVVVlNL3BOMUV5b2lYNzlub1FvaXBnMFlSeTZkWDhBcytiTWc4bG94TGl4b3hBVkZZMytUdzJvbHZPczVKZzFvNktpaC9WL2FzQ3dyQnpENmM0ZDIrMzR6K3k1Mzc0dzhQOU9BUkFrN1UwZ3hLdVlYOWJrS0tXVVVFSUVTaWtob2loU1FrUUlBa05aMXV1T2NMbGNVS2xVVkE0cXFkVnF1Rnd1cU5SMnlhWGg5ZE82UFI3SlhIV2h1S2hRMGVaY0xoY2NEZ2NjRGdlaW9xS2cxK3V2NmJxLzJ2SWwzbHU5RWovOXNoY0E4TXJMdzJDeFdFcTVZeVpObm9JZUQvWUVBSncrZlFxN2R1NUE4K1l0OEdEUFh0VytYaGZNbjR0dmQrMVU1dWpySTk5RS82Y0dJRDA5SFV2ZVhZeVM0aUlFaDRSaTRxVEpxRlhMNjJjK2VPQTNyRm16K3U0Q05sN2dFUmdZVkVaN3lFRnVUaTZNUmlQTVptOEtoMWRMczE3MnA4blJUby9rVS9QSS9qUXZxQWs4RDU3M0RRZ0l2bWthcEhSQUFNeEhIMytpNjl5bDYxTXN5L1luaFBUeWRhcmFTb3F1K3pxUEh6K0dHZE9uS1pyQTQ0OTZ6Y3grVC9USG9NRkRxdlFiaHc0ZXdNb1Z5MkV3NUNFeE1RbGp4bzVIU3BNbXl1ZDdmOTJERFJ2V0lkOWtRa3hzTElZUEg0RjI3VHNBQUVhKy9pcXlMbVVDQUVhLytRWlVLaFlKQ2JXd2N2VWFpS0tJcmwyNzRlRytmYUhWYWhFZEU0TldyVnZqN0prenltS3FFUjZPNXdZT2hFYWpRVUt0V3VqWXFUUFMwazVYMjd5b3dqRWJFVUlheGNiR1RyaVVuYmZiNlhSc256SDlyUjJmZmJiWkNZQ1hORGNaN0JTUWszMXhoRkJRNmpWVEthWFU3WGFENTNraUJSVW96L053dTkxZ1dSVjROUStPdit5ejVhUmdsTFdrUkFsTWVUeWVVZ0FYR1JsWm9mWW1paUlZaGluM053RGs1ZVhoMjEwN1MrMi81djExeXQ5dWx3dERCcitBanAwNkF3QldyMXFKOVBRTGNOanRxRmV2L3RYWitrMmFLSW5zVnpySHN2OWJ6R2E4dCtZRE5FNUpLZldkV2Y5NUc2TkdqVUh6RmkyeGErY09MRisyRklzV3Z3dVh5NG1GQytaaDVlcTFZTzRtWVBNTkZEaWRUcHc1Y3dabno1N0Z4WXZweU03T1FsNWVIdkx6VFFyQUZSY1h3eXFab2phN0hRNjdBMDZIMHlkWHpRMjMyMDNjYmcveEJoRTg0SG1PU0RscFJCUkZSaFJGaGxMS1VrcloxTk5ubTJkY3lwN2RyZnNESjFRcTFRZStvT2FyUFY2dnRHalJFdHUyNzhLYm84YWdaczBFYk51K0M5dTI3Nm95cUYwNGZ4NXZUWnVDRWErOWpsM2Y3Y1pUQTU3R21ORnZ3R1EwQWdBeU16TXdlOVpNVEp3NEJUdS8vUUdQUFBJWXBrNmRESWZrckYreGNqVzJiZDhGQUZpeWJEbTJiZCtGbGF1OUpXZ013K0M1Z2M4akxLeUcxOWw4TVIwSGZ2c05iZHUyVTdUS0ZTdFhRNmZUS3hQOStMRmphTmFzZWJYTmk2czVKaUdrWjBCQTRNb0ZpOTdaWDc5Qmd5bHIzMS9YakZLcWhUZmhXUU5BRFZBVnBWUWwzM2Q1SGtoemduQWNSenlTTnVaeXVZakw1U0l5V0RtZFRqZ2RUampzRHRqc2R0aHNObGlsd0pYTlprTnhjVEVLQ3d0aE5wdGhNcG1RbDVlSHJLd3NYTHAwQ1c2M1d6blBJMGNPWStya2llQTREaGFMQlM4TkhWSktHMXUwY0Q1R3Z2Rm1wV1B5M1hmZm9sUG5Mb28yT095bGw3SDRuU1dvVTdmdVZZOXZTRWdJTkJwTmhaK3RYL2MrTm4rNkNRQnc0c1RmZVBPTjE4czljTXI2eVI5OTdIRTBiOUVTQUhEUFBZMWdsZ0F6THk4UFlXRTFVTE5temJzdkt1bzFTWTNJenNxV25pTDVLQ3kwNE1LRkM5ajl3L2ZvMXUwQnVGeE9PRjJ1eTZhbnBLVmxabVlnckVZTkVFSWc4RHpoZWErRzV2RzRJUWdDWVZVcThCeEhaSkhOemQ2OSsvUlorOEg2Wi9mOWIrOVRIMjdjQUk3alVMZGVQVXlhUEVWWlRMZVQ3Tnk1SFYzdjc2YVlzTDM3UElUdnZ0dUYzYnQvd01EblgwQkVSQ1EyYlB3WXRXcDcxZjlISG4wTVM1ZThnNnlzUzJqWXNHcjFqcWtuVDJMMHFKRnd1Vnk0djF0M2RPbDZmNFg3clhsdkZmUUJBWGpvNGI0MzdmcXJja3hDU0sySThJaFJRY0hCb3pLemNyZVdsQlIvMVRTbDBTOEE0YVhJcWlCcGJZS3ZCZ2VBOGp4UEdZYVI4eGVwbE5kSUdJWUJMNmdvTC9nbWNYdjl0MDZIbzFRK3BLelJlUlJ6MVd1bVJrbEp2YTFhdGNhdmUzN0J6Qm5Ua1pPVGpTZWZmQXJoRWtocy8yWWI2dGF0aDBhTlV5bzF6YmQrOVNVV0xuNVhlYTh5WUxwZWVmYi9CbUwwcURkZ05oZGczLy8raDFsejVpcWZtUzFtVEo4MkJXYUxHVzNhdE1Yb01lT2cxV3JScjkrVHlqNWZmUDRaZXZidURRQ0lqWTJEeFdKR2VucjYzYVd4aWFLSTlQUUxPSFBtaktTbFhVSmVYaDVNSmhQT3BLV0I1M2xjeXJxa1ZCTEllV3BPaHhOT2x4T1VVbmpjSHVKeHUwdHBhRkxhQnFHaXlCQkNHRW9wMCsrSkoxVVhMbDRhUEc3OGhCKzdkTDEvcTlsc2ZtckY4bVY0ZCtreWZQTHBaMUNyMU5qNjFWZTNiWkFsTHE2MG42OTI3U1FZREhrQWdLQ2dJQnc5K2dlR3Z6d1V6ejM3TkFhL01GQVozNnBLU3BNbTJQM1RIbnp4NVZiazVlVmh3L3AxNWZiNStLTVA4ZnZ2aHpCMzdueW9WRGZuR1Z6VlkxSktZU20wSUNnd0NBekRQQkVXVnVQVFM5bDVXOUxPbm4rMmVmTVdla3FwRHBlSkFYdzFPSVpTeWdpQ3dQQThUM2llSnh6SEVaN241Y0FCY2J2Y3hPVnllVk0vSEU0bFYxSU9IdkE4cjFRc2hJYUdRcS9YdzJReUlUYzNGMWxaV1VoUHZ3QktLWVlQSDRFL2ovNEJyVWFyZ0xUUmFNQ083ZDlnMkxDWEtyMjIzL2J2UTFKeUhjVEd4bDNYV1BidTNSdjkrL2RIZkh3OE9uVG9nUDc5KzZOeDQ4YWw5Z2tLQ3NJcnI3eUtMLy83QmJwMTcxN3F3VGgrL0VTODgrNVNiUHIwYzVqTlpueTlkVXVwNzI3NThyOG9NQmZncWFlZUJnRG85WHBNbmpJTjgrZk52bnMwdHFLaUlwdy9meDZzU2d0VHZoRVdzemMveldyMW1wcFpXWmNRR3hlSDNOd2N4TVRFS0U5Q1ExNGVPSTRESVFTVVVzSnhIZ0FFSE1jUlFlQ0IwaldhWlBOblh3UXZXamgvOEpLbHl3Y1JRcG9lUEhnQTgrWXZCQlZGdkRGcXRHS0NOYnpuSHVUbDVkNldZeFVURXdORFhsNnA5M0p5c3RHeXBUZnZhTi8vOXVMVFRaOWd5ZExsU0toVkN3RFFwVlA3aXJTYWNtRG5kcm53M1hmZm9rK2ZoNkRWNlJBWEY0Y2VQUjdFL3YzN3lrM2FIM2YvZ0dVclZ0MjBoTk9yT2VhUkk0ZWhVYXZSb0dGRDMrdnRHQmdZMkhIN3ptOWZkcnZkbjMzOTlWZi9uVEJ1YkFraFJKQjhjYklXcC9qaUJFR2dsRklxaWlJNGpvTWdpSlJsUlFpaVFBUkJvSUpLZ0NCNFFjODNKOUp1dDBPajBVQ24weW5sV2JMLzdmeTU4eWpJTDhDYU5hc3c4UGxCT0hzbURRdm16OFdreVZPeGM4Y09XRzFXdkRMOEpZQjR5UnlHREhvZWE5WitBSzJVUXZMRjU1L2g1VmRHWFBkNGZ2Lzk5d0NBRGgwNklDTWpBN201NWVmN2hRc1hNSC9lSFB4bjFoeHMzTEFPdFJPVDhQRERmU0VJQWxxMHZGY3hoWHYyN0lYRHYvK3VmTy9YUGIvZ3h4OS93THRMbHBlS2xyZHIzd0h0Mm5lNE96UzI3T3hzbkR4NUVsbFpXY2pLdW9TODNEeVlUSmVEQlVhREFZSWdJaWd3Q0VXRmhZb2ZyU0EvSDRJZ0lDUWtsR2kxT2tJcGhTQUloQmQ0SWdnOFlTUUJ3RHo1WlAvd2k1blpZenQxN25Jb0pqWjJjZHJwVTAyenNpNEJBSktTa2hFVkhZM09uYnNvaTN2SGptL1FvOGVEdHk2UUlwazZBRUFseWlRWmhCN3Urd2oyN3QyRHc0ZC9COC96K09XWG41RjY4Z1I2OXZLNkJNMW1Nd2dCR0paRmNYR1I0aU9oWXVrcWxyajRlQnc2ZUJBY3h5RmZvbW5TYUxYNDVPT1A4UG5ubThGeEhJcUtDckZ2My8vUXJGbXp5NmJ3anUzWTl2VldMRjIrVWpHZnF0MzhydUl4M1c0M2ZqOTBFUFBuemNId1YxNUZZR0JnUllEZVJLZlR6WG4yMmVlK1AzOGhZOFRxOTlaR1NScWNsbEtxb1pTcWZUVTR5US9MZU1rUGVNTHhIUEVHRGR6RTdYWVRsOHNOSDU5Y0tlM05icmZES2lYeHlyNjNyS3hMT0hUb0FPclVxWXR1M1IvQXRPa3pvTkZvWWJGWU1IVFlTL2o4aXkzWStORW5XTE4ySFRRYURUWis5SWtDYXFkUG5ZTGI0NmxXbjZhdkhQM2pDQ1pObm9yN3UzWEh1MHRYNEZUcVNWQktVVnhjakJjRy9wK1NvblQ4K0RFa0pTY3JmMy8wNFViTVg3Q293dkVIL3VYcEhwUlNuRDE3RnBtWm1RckZFS3RTbzZTNEJGYWJGUTY3SFE2bkU5azUyUWdJMEV2T1Y0TGk0bUlRaHNEbGNoTzFXZ1VQNTRFb0NnQkFmT2lCR0FEa2h4OS9DYmwwS1hQWWdmMzdoakVNVXhjQU9uYnNqSU1IRHlJd01CQ2RPM2N0Wnc3UG1UTUxEenpRbzFJZlIzVkwyUVRkQmZQbllzSDh1WGl3WnkrOE5YMEc2dGR2Z0xkbnpzSjdxMWZDa0plSDJvbUpXTGo0WGNSSTJjeDlIbm9ZSjArZXdOQWhMNEJsVlhqczhYNm9YNzhCTElXV1VzY1pNMlljRmk5YTZIMFMxNjZOZFJzK2drYWp3WUtGaTdGeXhUSjg4ZmxuVUt2VjZIcC9Od3dhL0NJQVFCQUVMRnJvTlFPZmZicC9hVE54MCtick5vOHFrcW9lYytScnI0SVFJREV4Q1dQSFRWQjhrRmVRdWxxZGJrYmZSeDU5b2NlRFBULytadHZYbjQwYk83cFkxdDRrLzV1aXhYbFRRNGhJS0FYMVZxaFFRUlFoaWdMaGVSNHN5MUs1Y3FVaWlpdjVZV1V3NUtGR2pYQTBhTkFRWjgrZWdjUGh3Sml4NDZxVTJ2UDVaNS9pcVJ1Y1ZuUGd3SUZLUHh2dzlEUEszeEVSRVJnL1lSSUFJRHc4SEM4T0c0YlhYeDBPU29Ia09uWFE3d212YjIzK3ZEbHd1OTBZNVJOb21QclcyMmpRb0NFS0N5MTRlZGpRZjIrdHFOVnF4Zm56NTNIcDBtVS8ybDkvL1FXR1ZjRnVzOEh1azV1V2xuYjZzdlpDS2RScU5kSHBkTEJhclRMdkZwR0lJQW5ETUlSU3lpUWxKYkY3OXU1L21XWFpsMy82NmNmRysvKzNGelArTXhzQWtKNmVqbmx6WnlNb01CQ0RYeHlLNXMxYktPZTFiT203NERnTzQ4WlByRGdpZVM0TlhidDJyZkoxN3QyNzEwOVFXSWxVTnBhM2NNeE9wNTQ0L3RIeTVjczNmL2ZkZHg0SjRCUVRGZDdhVlBtVnlzWDJETU5RUVJBVS9qZVZTa1ZabG9WYXJZWktwVkxJTFdYVE5DbTVqc1QzSnBGWnhzU2daczBFSkNjbmxVdDN1dEZ5OExmL1ZYbmY5aDI3Vk50NS9DczFOcVBSaUFzWExpQXJ5NXZDNFVzRXliQXFyelBXNllUTDdZTGRiZ2ZQODRpT2lRSFBjWEM2WE1SaHQ0TmhXUkJDaUNBSWNpNmFFdVU4ZmViOE15OE0vTDhSUnFPeGJYeDhQUExLK0E3cTFLa0R1ODJHZ29KOE5HMTYyY1RhL09rbW1NMW16Smc1NjRaZHExNGY0RWV3cXh5Yld6aG1qV3JVQ0orL2MrZk9KMHBLU2o0TUN3dmJRUWpoZkFGTzB1S0lWNHNEcFZTZ29sU3JKL25qSUlvaVVhbFUxSmNWUnRiYUFJS2lvaUx3SEs4ays3cmRicmhkTHJoY1RpUWxKbFVySFZKQVFHQ1Z5cW9DQWdLcmRhRC9kY0NXa1pHQjlQUjBaR2RuSzBtQmN0S3QxV29GdzdCS0tvZkg0NEhGYklGS3BZTGI1U1k4ejROS0JlcmV0QTJHaUNKUEJFRWdBSmcyYmRwMmYyZkowbGNEQXdQN1Rwb3lGVk1uVDBTTjhIQ29WQ3dDeWl5V2pwMDZvNlM0U0VrMk5Cb05XUFBlS2lRazFNS1FRZDRvSXNPdzJQalJKOWQxdlN6THdtNjNWZnVUK0U0VHU4MWFhUWtXYzR2R3pHNnpnbFdwUUFocEV4b2Eya1lRaEw0bWsrbkR1TGk0QTRRUWpsTEtFMEprZ0JOQklJSkNoQ2dxQkptaTZNMGFrYW10UkZGVXpGTUEwT24wc0phVWVGTkNlRGtsaEx0Y3llQnl3K2x5b1pZVTlMblJrbHluM2o4V3dnY0VCQ0s1VHIxcUhldC9qU2xLS2NXWk0yZVFucDZPbkp3Y0dJMUdoV1pJcnZmTXlja0JZUmd2SzBlcHNpaWVlTms0ZUYvNklGbExZMDZrcGpVSURnNStqUkR5eXEweW55b0g4a3lZTFJiRXhNYjcwY3hYYXpma0lqSXlBb20xeTFNNlpXUm13bXkrK1dObU5PUWlJaUlDU1ltbHo0bmp1SFdwcWFrZnQyelo4Z0lBRGdBdlJWSVZINXpNSCtmTENlZERjRW5MbXFVeUpaSWNNWlZUUThMRHd4RVZGWVc0dURqVXJsMjdXa3ZxYnFYOEt6UTJ1WW9nSXlOREFUV3oyWXppNG1LZkluWUgzRzQzUkVwOXk2SUl6L1BnQlI2aVFpdEVDUVVsb0pUMGYyb0F1M0RST3lOWmxuMERRTUxOdUphZzRPQ3Iyajh4c1RieTgwMHdHbklSRkJ4eTEydHVkcHNWTnBzVkFzOVhDR29Ba0pTWUNKUHA1bzJaZkU2aUlKUUROUUJRcTlYRFdyUm8wY2R1dDYvdDNMbnp4OGVPSGZQSUFBZHZrTXEzQUYvaGhwTkJqbUVZSXZuZnFFeFI3dHRjUmdZNFg5WmV1ZWRDdzRZTnI3blc5SGFXTzE1akt5d3N4Tm16WjVVOEdWOE90Ykpra0lXRmhmQldDL0RnS3RmU0dBRGszSVdNbmhxTlpoU0FCMjdtb25TN25Xald0T2xWYTZzWE16SmhzWmdoOENKY3JydVRvMDJ2RHdERHNvaU1pRVJpWXExLzFFWXlNeThodjZBQUFpOVUyNWpwOVFGZ1Zhb0tOYldLUkJURlBTYVRhVjFjWE53K1FvaHZnSUdYTkRkQkFqUlJEaTZ3TEV0OXdJeXExZXBTSkphK1BSYmtCakp5ZDZ5a3BDUTBhTkFBTldyVThBUGJiV051R0kybDBqbGsydTZLR0c3ZGJqZnNkanRjTGhjUktZVWdFVUVxV2hxbEJLRE1rYVBIWXFPaW9rY1JRa2JmN09zeEdmTVFGeHVEdUxnNCtPWHVGby9IcytxWFgzN1oyS2RQSDRNVVlKQTFPTUVuY2lxREc1VzFOVmxUVTZ2VlZHNEJXQmJjZkUzUytQaDRKQ1ltb2tHREJ2K3FKakozckNtYWxaV0ZjK2ZPSVRNelUwbm44RzJ1SXRPNitETGRDb0pBUEI2dUl2WU5CZ0J6NGVLbC9pcVZhalNBKzI3bXRUanNOdGlzSlFDb0g5VDhBZ0RRYURTdjllclZxNFBaYkY0YkVSSHhIU0dFbGNDTjg4bC9JMTRsVHhSOUd2NVFINnA1V2xtdVcyVjFwOVVWVlBBRFd4WGt3b1VMT0gvK3ZBSnFjanBIMmVZcVplaTdDY2R4QUtoODArVXVUOHkyYmR0cWhZU0VqTW04ZVA3Vm0zMHR3Y0hCVUtsVWlJK1BRMnhzckg5RisrV3lPVVZJeS9EdzhEVWVqK2VEMzM3N2JVTzNidDJ5Q1NHTWJKcFNTbmxjWmw0V3ZWNEo2aHNwSmI1UjA3THBJVEo5dlMrMXZjZmpRZDFyWVBEd0E5dDFTbHBhbXBKNEszZU5LaXpGZE9zb0MyckVweGVCNGt1RFZEbmdkcnVmVUt2Vll3RzA4aThsdjl5T29sYXJYK3JhdGV0OStmbjVhNktpb25aTHZqZEdBalZaZTVOVFFjcHFiK1hTUXNwV0x2aDJUcE1CN3A1Nzd1eWtiNUtSa1hGSG5LaGNIaVVIQ1h6OWFXVzFOSjlPVWNSYldPenREQ1duY0ZCS3ljOC8veHlXbUpnNGptR1lDZjZsNDVjN3lQZTJiT3ZXcmVzblRacFVDTURqaytBcnlQNDN1V3BCU2dueDliMVIzd29GdWZWZlVGQlFPYitiSEZTNFU5TkJWSW1KaWJmOVNYSWNoOVRVVk1WM1ZsR0hxQXE2UXZsMlUvY0ZOY1p1dDNmUmFyWGpDU0U5L1V2RkwzZVl2RGwrL1BpVVo1NTVabTFTVXRJUkFDd0FPWHBLVUpySkY2SW9naEFpbDJRUm1mK3RySWJtVzJUdmNEaGd0VnBSVkZTRWxKUVVxTlZxdnlsNm84WGxjaUUxTlZVcGtaS3JDWHhiNGlrOUNTVENQVmxUazAxUENkZ1lTaW5qOFhpR3N5dzdFWUEvbzlVdmQ2UXdETk1qTVRHeGNVbEp5Y3FRa0pBdkFEQ1NlU29ubFpjS0xNZ1dEL1VLa2FzWGZQclk0a3JGOVNrcEtaVjJ4YnB0VGRIYk9kM0RicmVYQXJXeTFRUmxHeGJML2pUSi9KVHJQQmxSRkVsdWJtNThkSFQwQkVMSXEvNmw0WmZiMWQxaU1CaGdOSm9nQ0FKc051cy9mb2ZuK1hWSGpoeFpOM255NUZ4SmM1TXJGNVRpZXArOE4waXBJWElTcjVMekpuZW1MMXVsRUIwZGpabzFheUk1T2ZtMkFMZmc0QkN3TElQbzZPZ3JaaERjdGhxYjFXcXRGTlJraGx1NTk2SnZrRUFHTlovSUoyTzMyenRydGRxSmhKQUgvY3ZITDdjcnFCMDdkZ3dVUkttR3FHSlcyYkQ2RFJ2WDZkcnRnZmM2dEd2ekJ3QUczc2lwVElEcXBVWHkva09sdnJkZWpZMVNMME9TMUFkWDN1UWV1b0pJd1FzVUhDL0M3UkdRbUp5QW9LQmJYOWxpdDl1UW0yZEFibDRlN3J2MzNqc0gySXFMaXhWUWs0dlp6V1p6aFpwYUpaRlB4Wi9tZHJzSHFsU3F5UURxK1plUFgyNVhNUmdNb0NEWFZML0tNRXozV3JWcUo1NU1UVnZSSk9XZUhhQ1VvWUJ2M3cxQm9nc1J2YkVBQ3NrQ0JienJoQ29tcVJ4UmxjeFVVYVFRcVJSTnBTSWFObWlJNEpDUVd6cFdnWUZCQ0F3TWdzbVlCNFBCVUdHYTFHM0ZvUHZERHorZ2ZmdjJpSW1KUWRldVhURmh3Z1RzMmJOSFllaW9LQUxxVnZvUGVIMXEwc2FJb3FpYVAzLytsUFQwOUxYZmYvLzliUU5xUE05ajFLaFJpSTZPUm1ob0tJWVBINjUwZC9MTDNTc21VejZDZ3E4TE1PcUdob1V0UG5mKzR2Q0c5elFLQUtDVHVtZkpQUmRZU3NGU0tuZkxFZ2pQYy9Cd25KZXAxK1dXZWl4NHUyTlpyVllVRnhYQllqSERaRFFoSnljSEdSY3ZJdTFNR2txS2kyK0xNUXNNQ29aUjZweFdWdGdaTTJiY0ZpZTVkKzllOU96WkV5a3BLWGpnZ1FlUWxKU0VvcUlpSEQ1OFdJN3NLSUJXMXZ5VXRUUXZ0YkxBcEtTazFQcjg4OC9uZHUzYWRjeUFBUU9Za0pBUWRPblM1YmE0em9rVEoyTGJ0bTM0OU5OUDhleXp6MkxwMHFVNGRlb1VIbnZzTWYvcXZvc2xOemNYTmNJanJ2cDdwMCtsWXQ1VTdNZUhBQUFnQUVsRVFWU2MyZWpWdXc4QU1DcTF1dU96Ly9kY1NLdldiUzU4dmZVckIrQlYzU296ZnlsQWNMbVJ0MlNPMHN1YnBLa1ZGT1RqME1HREtDd3NSRVJFQklLQ2dxSFQ2ZkQxMTE5aC90eloyTFp0S3dvdGhXZ3BtWWI1K2ZsNGE5b1ViTjY4Q1QvLzlCT2FORzJLME5Bd0FNQmZmeDNIdENtVHNIWHJGaHcvOWlkYXQybDdUVjJ3TkJvTnJOWml4RmZnYTd0dFRORzFhOWVpYWRPbWVPYVpaNUNWbFFWQ0NGcTJiSW1DZ2dLY09YTUdLU2twbFNYZWxnb1NQUGpnZzYwYU5XbzBwVnUzYm4zbG0zZTdpTjF1eDZwVnE3QnAweWFGbXVqOTk5OUh6NTQ5c1dEQmdncWIzdnJsN2hDcnRRVFIxMkNHTnJ5bkVkNmUrWjlTNzZuVjZrRmR1blNKL3VYWC82M3BmbitYRTVSU1JrSTN4VFNWc1UwVUJKR1hmRzJBOTlVTGVCS3dnZUpDK2dWd0hBZVdZUkVSRVlHTWpBeFFBSUdCZ2RpNlpRdldmckFlR28wR1k4ZThpU05IRHFOMTZ6Wll2V29GdW5kL0FIMGZlUlIvL0hFRUMrYk54YXIzMW9MbmVjeWJNd3Z6Rnk1R1VsSXkxbjNnN1N2NjBzdkRyMm5jZkhzRjMzYW1hRkZSRWV4Mk8zSnljbkRod29WU1ByWEV4RVFrSmlZcUtSMTJ1eDM1K2Zta3NMQVFOcHVOdUZ3dUlnZ0NJNG9pazVTVTFQdkhIMzljc256NThyNkVFSFRwMGdWSGp4N0ZXMis5aFhidHZBMTUyN1ZyaDltelo2Tjc5KzRJQ0FoQXZYcjE4UDMzMzJQWnNtVklTRWhBYUdnb2hnMGJwaEQzVVVveGI5NDgxSzlmSHhxTkJoRVJFUmcwYUJEc2RqczhIZythTm0yS0J4KzhISlBZdEdrVHRGb3RqaDgvRGdEbzM3OC9Xclh5RmpVY08zWU1UcWV6Rk45YTU4N2VUdHNIRHg3MHIyNi9sQk96Mll5eFkwWmgwUFAvaDhHREJ1TDNROTU1a3AyZGpRSDluOENUL1I3RnFEZEdsdnJPNUluak1XVFE4MzFtLzJmRzFKU1VsQzRBZEtEVXQ1RU1LNG9pSzY4YnBZa014NkdrcEpnWURIbGVRa3FudDNGelpHUWtHalpvQ0kxV2c1S1NFdVRtNWlBekl3TzdmL2dCS1UyYUlDREFTN0phSTZ3Ry9wTG0vVjkvSFVlWEx0NTVIaG9haXJTMDAvQjRQRERrNVVHbjF5TXB5ZHVZSlR3OEhIOGRQM2JEeCsyV2EyeHlvS0JkdTNiNDl0dHZNWGZ1WE1URnhTRWtKQVI2dlI0eTE3dWMwbUUybXdrQXFGUXFRaW1WdTY0elZxdjFXWTFHTTdWdjM3NzFHelpzaUVXTEZvRmhHTFJ2M3g2UFBQSUlwa3lab2h4ei92ejUyTEZqQnpwMTZvUlhYbmtGL2ZyMXcrT1BQNDdUcDAvajFLbFQ2TmF0R3g1NjZDRTg4Y1FUV0xWcUZSWXVYSWpObXplamNlUEdPSDc4T0FZT0hJam16WnRqekpneCtQREREOUd1WFR0ODhza242TjY5TzBhT0hJbVpNMmVpUllzV0NyQVZGaFlDQUhKeWNoUnc5SG02SWlJaUF0bloyZjVWN0pkeThzWG5tOUdzV1RNTUd2d2kwdFBUc1hyVkNyUnQxeDRKQ1FuNDc1YXRPSGZ1TE9iT0xrMDFQMi9CSW1sdEZiVVovdExROEE4LyttVEY0RUhQZnlzcE1rU3lUamtLQ040SE9CR2xmRjRRUXFoS3BTSnV0OXVyeEFHZ29DQ0VnZHZsZ3MxbVE3NHBId0JCWm1ZR0FnSUNjUEZpT2xZc1d3cEJGQkFzK1FtTGk0dWgxZW13WS9zMytPbW4zZEJvTkxEWmJDZ3BLWUZXcTRYSDQ4SEtGY3VRbTV1TG9xS2lHejV1dDFSajgwM3BFRVVSQXdjT1JOMjZkV0V5bVhEcTFDa2NQWG9VcWFtcEtDa3BnZHZ0UmtsSkNaSEFRSW40TUF6REJBY0h2L0xsbDE4dTBtZzA5ZVdHRnpxZERocU5Cb1FRaFZsVWxuNzkrcUZidDI1UXE5VjQ0b2tuNEhLNU1IZnVYQVFIQjZOdDI3Wm8wcVFKVWxOVEFRQkpTVWxZdjM0OSt2VHBnOFRFUkR6MjJHUG8ycldyOHZsOTk5MkhTWk1tWWZ6NDhSZ3laQWlhTkdtQ0NSTXVWMms5ODh3ekdESEMyNlBSNFhCVW1BdWsxV3FsRGxsKzhVdHBhZDJtTFg3KzZVZDg5T0ZHdUYwdUxINW5TWlcrSjRvaVpzNTRHdy8zZmJUZUF6MGVuSFlxN2R3QUFEcHAwMUJLMWFCVUJZQUZLS09rUndHRVpWWGdPQS94dUQwK3JmN3NjSHM4Y0RnY3NCUmFrSjl2UWxGUkVVNzgvUmZHanh1RDU1NS9BZDI2bGFZdW5EZG5Gakl5TG1MeE8wdWgxV3BMS1ROalJyK0p4bzFUTVBLTk42dGwzRzRac1BrbTM4b3BIUzZYQzNYcTFFR3JWcTNRdUhGalJFUkVRQkFFR0kxRzRuYTdKWFlPN3hOSHpsSGpPRzU4U2tyS2d0VFUxQ3AzcVBBdEk1TUhQQ0Vob1pSVFVnYWF2bjM3b25idDJwZzVjeWFlZSs0NXRHalJBdDk5OTUzVU9NTXIwNmRQUjBSRUJQYnMyWU9QUC81WTZYTlFWdlI2UFR3ZVQ3bjMzVzUzcGYwUi9YS1hBMXZyTmxpNWFnMXFKaVRnNDQ4MjR1MjNwbGJwZSt2WHZRK2RUb2VCejc4QUFGSEJ3Y0Z2ZmYzTjlzRUE5Qks0YVFraGFrS0lpbExLQW1COEFuQ0U0M2g0T0E5UklxWk9KemlQRitoS2lvdGhzVmpnY2J0UlhGS0N4eDkvQWdRRUpkWVNoSWFGS2Vabmg0NmRNUEtOVVZDcjFmQjRQQXB6YjBseE1VYVBHWWZlZlI2Q3krVkNtUFNkT3g3WWZNdWtzck96a1pPVGd5MWJ0dURpeFl0S25ockhjZERyOVFnSkNTR0FsLzdiRjlSV3IxNnQ1amh1T3NNd3MwVlIxSlh0T0g1RisxdFYzZ0t2ck5oM3laSWw2TkNoQXpJek05R2hRd2VzWGJzV3ZYdjNMcldQMFdoRVRrNE9LS1g0OWRkZkt6MXVRa0lDWEM1WEtkV2I0emlZeldiVXJGblR2NHI5VWs3bXpaMk53MGNPbzBlUEJ6RjV5alFjT25RUS96VFg5Ky9maDcyLy9vb3BVOS95bmRlNkprMmFUcm4zM251SE4ydldQQkJTT2dpbFZBMHBIUVFBUzBXUjhEeEhCSUVuUEZjNkhZVG5lYmpkYnNXa1ZHczBjRGdjS0NqSXg4V0w2ZGo5dy9kbzFMZ3hBS0JGaTViS2VmNTU5Q2lTa3BLaDBXZ1FHeGVIMExBd2FDVUxhdisrZldqZW9zV2Q3Mk9UQzlwOWF6K0xpb3FRbjU4UGg4T0I1T1JrMytSYkltczRjdnM3QUdUbnpwMUJQWHYybk1vd3pMaWlvaUtjT25VS1E0Y09yZkI0MTh0T3NHVEpFa3llUEJrelo4NVUzc3ZJeUNnVndYenBwWmZRb2tVTDlPdlhENk5IajBiUG5qMHJCS3FXTFZ0Q3I5ZGozNzU5ZU9TUlI2Ukp1QjhNd3lqQkRiLzR4VmNHRG53Qml4Y3Z3T2ViUDRVb2loZ3pkandZaGtGMmRqYkdqSG9ESE9kQmNYRXhCdlIvQXZmZWR4OG1UWjZLbGN1WHd1Vnk0YlVSTHl1L3MzTDFXZ1FIQjJQQm9uZEd2N05vb2FhZ0lIOWRibTZ1L0lTVm82Vzh0TllFYjJNc3dldGlrL2JoZVlGNk9LODVDZ0lFQndVakxpNGVuMjd5ZHBLLzk5NzdFQndjREo3bjhlcHJJekYvM2h4OCtkOHZvTmZyTVhIeUZFV3BtREwxTGN5YU5RT2NoME90V3JVd1lkS1VPeHZZS0tYbHlxVGs2R2R5Y2pMT256K1AxTlJVQkFRRVFCQUV1TjNlcHdRaFJDYlRJeWtwS1RWbXo1NDlOU0lpNGsyMVdvMHBVNllnSkNRRUF3WlUzTDA2S0NnSUJ3OGV4S0ZEaDY0SlBNTER3M0hnd0FIazV1WkNFQVFzWExnUXAwNmRRbE9wTDhINjlldXhaODhlL1AzMzM2aFhyeDQyYmRxRWwxNTZDZDkrK3kwQTRQUFBQMGRoWVNGR2pCaUJ3TUJBREIwNkZLKy8vanFDZzRPaDBXZ3dmUGh3REJreUJPSGg0ZjVWN0pkeVVxdDJiU3hidnFwQzdmKy9XN1pXK0ozUC8vdFZwYjkzenoyTjhNSDZqYSs1M1c3VjVrODNyWnYrMWxTenRMWjhsQUVHbElxQ0tES2x3QzBvS0FnYXJVYTJua0JBVUNNc0RFbEpTWWlJaUVCTVRDd3lNekxBc2l3YU4wNnAxQi9ZdEdrenJIMS9mYldPMjAwMVJhOVUwQjRVRklUWTJGaUlvaWlibzBRR05aWmxDYVdVWExod0llTDc3NzkvS3k0dTdzMEhIbmdBWGJwMGdWYXJ4Zjc5K3l1MTAxOTc3VFVjT0hBQWd3Y1B2cVp6M3JCaEEwcEtTbEMzYmwyMGE5Y09OcHNOa3laTndwOS8vb21zckN5TUdUTUdVNmRPUllNR0RjQXdERDc0NEFQOCtPT1AyTEJoQXdCZ3k1WXRXTC8rOGsxY3ZIZ3hIbnJvSVR6KytPUG8yN2N2N3IvL2ZpeGJ0c3kvZ3YxeVUwV3IxUTUvYnVEQWwrY3RXQlFGUUN0VkthaTl5bzVTcFVCRTBadDU0RzNBN0Ewb3VOM2VLZ1dIdytFMVN5V2ZtOGxrUW01dUxqSXlNbkQyekpsYmVuMDNqZDBqTFMwTmFXbHBTb3M4dVp1VVhDYmx5M3hiSnZtV1VFckptVE5uYXRTcFUrY3RRc2hJLzdRc0xhSW9JaVB6RWl3V0N3UkJnTXQ1ZDVabzZmUjZzQ3lMOEJvUlNFcXFYV2tRUjdZZXZHTm1CczlYMzVqcDlIcW9WQ3BFaEVjZ0thbHk3c085ZS9laWJ2MmJ6MXJyY2JzLzJMVHBrL2Zmbmo3TkFzQkZDSEZEYVJ4REJFSWdFTUlvRFdQVWFoWFVHZzNWYXFTK3BRRUJDQW9NUkxEVXppOGlJaEt4c2JHb1hiczI2dGFyajNyMXFyZWFzYkkrdkRmRkZKVjdGSlRsVTVNN1NSMC9mdHkzUW9ENDJ2M1NGbFN2WHIycEFQN1ZvR1l3R0s2NlU1RGI3Y0ZmZi8wRlZxVkNjRWlvdjYrbzNZYkNva0lVSE0xSGkrWXRvTkdvS3dTMVAvNDRDb1psRVJSYy9XTm10OXRndGxpUVg1Q1AxcTJ1ekVDZmMvUHpHVi9xMXEyN2VISElpMnMvM0xoQldZZGUwOVJiWWdXSWdpaFNVRzh4UEJVRWtRaThRSlZ1OHo0a2xVNkhBM2E3RFZackNZb0tpMkF1S0NpVmNYQWpwZVlWZnJmYWdTMHJLNnRVajRLeTNka2REZ2RxMTY2dGFHb2VqNmRVN2VmcTFhdlZ3NFlObThvd3pKdndTem5KTStTQlZhbjhuZUFsa1prZmpJWmM1T2JsSXFrQ2h1aUxHWmxnV1BhbWpabnZPV1ZtWGtMaUZmcUwxa3hJdUJYRE5uenF0T2w4UmtiRzJsLzMvRktaaGl0Y0JqdVJVaW9TU3N2M1VlQWxabDZQaDRQTDQ4MkJJNFFnL2laSC9hc1YySXhHbzlJaXIyempsUW82U1pHS3VOUWtVQnZuWDdJVmk3bkFqS0NRVVA5QWxKR2c0QkFVRkpnckJEYUx4WUxnV3pCbVFjRWhLREFYWEJIWWJwa1pyOU85OXY0SDZ6ME42aVd2bDdWYU9hQkF2ZEVGS3BiS015RVVJQVFnY2xkNkVFTEFlTWtzd1RBc1dKYUZpbFZCNVRWZkVSVVZkZWNEbTl5aFhXNlJsNStmWHltZGQxbWZtbS95TGNNd1UvM0x0REkvRVNBSXdsMXZmbGFtSlJVWFdTcjg3RmFOV1dCZ0VJb0xMZGYwM1pMaVltUmN2QUM3M1hiRjMwOUtyb3VRMEdzRGJiMWVQenJ0N0FYWFBRM3FicEx3VEpscVBtTW5YbTdmeDFHTzh4QUorRUFZQXNJd0VyQXhZRmtHS3BYQzFndU5Sb1BRME5BN0Y5aWNUbWNwVUN2THAxWUpTYVRjZklWSXZRbGVZUmhtMnBVWDl0VlRLZDl1VWxXcTQ0cUVFTURwOUhPNVZUb1BLK0c1dTVYQmxXdTlYeGZUejhQaHNGOXhIN3ZkaG95TEY5Q3N4YjNYQWI2Qm8wK2VPdU5vMHJqaFZoOVFvMlUwT0JFQUZVV1I4RHhQblU0SFlWbVdNb1NBRUFZTVF5Q1hObm8zRlZScU5UUnFEUm8xYm54VEtNWnZPTEJSU25IbXpCbWxUWjRjL1N5cnFaV0pmc3FOSlJpSjlmWlpsbVdud1Z2NlVlbHhycEZLK2JhVHFsQWRYNnY4dVBzSGJOeXdIaWFURWZIeDhmaDQwMmM0ZCs0c2hnNFpwT3d6YWNvMFBQVFF3MzRrdkkzbG4wRE5keTVkcjFVYUdocjZ4ckcvVHRwYk5tL3l2YSsyVmdiY0FFQ2tsSHA5YXB5SGVIc3JYQVkyaG1YQk1oS3d5VnFiVm9QR2pWT3F2YTNmRFFjMlgxQXIyOHpZYnJkWFNPZnQ2MWR6T3AyOVZDclZWQUJYTk1pdmgwcjVkalNiL29ucStGb2tOemNYQytiUHhjeFpjOUM2ZFJ1VWxKUUFBT3JWcTQ4ZmYvNFZBUERTME1IVmRsMGIxcS9EWTQvM0s4Vm1JcC9Yc2lYdjRNU0p2NkhSYU5EandWNFk4ZXByWUZrV2dKZVNaOFd5SlRoeDhnUzBXaTE2OXV5Rmw0ZVBVRDZ2RHZtblkzYnAxQjVxdFJxRU1FaEtTc0tRb2NQUXNXT25meXVPUmtWRVJMeTZjdVhLa3RkZmYvMUFHYzJORWtLbzlEK1JtMkR4SE9mbEltY0lKUXdCUXlRL202UzVLY0NtMWtDcjBhSmUvZnJWZWdFM05FRTNJeU1ENmVucGxlYXB5ZFJEVW9zOCtMTGZVa29acTlYYVNxUFJUQVh3ajFkOUE2aVVieitBdXdMVjhUVTlaTkpPSXpJeUVoMDdkb0pHbzFIS3dBZ2hTbWVpNm54eWZyaHhQU3dXYzduM1o3dzlEVFVURXZEMU56dngvZ2NiY09qZ0FXemZ2ZzJBTnlkdjBvUnhhTkR3SG16N1ppZFdyRmlOdmIvdXdkZGJ2NnEyODZ6cU1WZXVYb01kdTc3RGtLSERzSGpoZkd6OWFzc3RtU2VFRU54Nzc3M28yYk1uZXZUb2dmajRxM3U0QzRLQTMzN2JqOGtUeHlNN0s2dXlZOVNMaW9vYXZtREJnc2FTNVNUVGpLdVZ1bEpLNVc3MGhPZDU4SnczOWNOVEt2WERqc0tpUXZ6MDQyNnNYZk1lNXMrZmcvMzc5eUZMT203V3BVc1krZnFyZVBhWnB6Qm0xQnNvS2lwVXp1R2pEemZpdVdlZnhqTlA5OGV1blR0dWpjWm1OQm9WVURNYWpRcW95YmxxdmwzYWZUcTBLNkJtTUJocTZmWDZLUURhVnZYbS9OdWM1b0dCUWJCWnI1OVAvdmp4WTVneGZSbzhFczNNNDQ5NnpjeCtUL1RIb01GRHF2UWJodzRld01vVnkyRXc1Q0V4TVFsanhvNUhTcE1teXVkN2Y5MkREUnZXSWQ5a1FreHNMSVlQSDRGMjdUc0FBRWErL2lxeUxtVUNBRWEvK1FaVUtoWUpDYld3Y3ZVYWlLS0lybDI3NGVHK2ZhSFZhaEVkRTROV3JWc3JtZW9XaXdVMXdzUHgzTUNCMEdnMFNLaFZDeDA3ZFVaYTJ1bHFHL2VyT2FaZXIwZkhqcDJnbmpJTmIwK2ZobDY5Kzl4MFpwYms1R1N3TEl2ZHUzZERxOVdpZS9mdXlNL1BoOFIrVXdxdzVTUmwzNy9mZk9OMTFLeFpFNmRQbjRJZ0NsY0MwTmFKaVluRHhvNGR1K2lkZDk3SmtiVTJINStiSEdBUUJVRUVJYnkzN3BFd2xEQU1DRVBBc0F4eWMzTkJDTUVEUFhvQWxHTEQrbldvVjc4KzlEb2RsaTU1QjQ4OTNnODllanlJTHo3L0RPK3RYb1hKVTZiaHhJbS92WE5zNDBkd3U5MFlQbndZV3Q1N1g1VkIvSVpvYkZhclZXSHE4SzMvbER1M1h5bXRnMUpLWG56eFJUWWlJbUl5SWFSdjFZOVpja01uaTlsc3h1UkpFL0RjczA5ajN0elp0d3pjS3FNNnZocHAwYUlsdG0zZmhUZEhqVUhObWduWXRuMFh0bTNmVldWUXUzRCtQTjZhTmdValhuc2R1NzdiamFjR1BJMHhvOStBU2RJbU16TXpNSHZXVEV5Y09BVTd2LzBCanp6eUdLWk9uYXcwcFZteGNqVzJiZDhGQUZpeWJEbTJiZCtGbGF2WGVDY2N3K0M1Z2M4akxLeUcxeWwrTVIwSGZ2c05iZHQ2NjNnakl5T3hZdVZxNkhSNlpVRWVQM1lNelpvMXI3WXh2NVpqdG03VEZoNk91eVdsUTVHUmtjak56VlY4WGFJb29rYU5HcVgyT1hMa01LWk9uZ2lPNDJDeFdQRFMwQ0d3V0x3UjJYZVhMTVBrS2RPcXBCZ3dETlA3dnZ2dUd4d1RFNk9YdERhZjBpdXdBQmh2UnppUnVGd3U0bks1d0hFZVlqR2JrWmViQzVmVGhlTGlJZ1FHQnFLa3BBUXF0UnFDSUNEMTVBbGtaR1lnTGUyMGN1OGZlcmd2RHY5K0NBQncvdHhadEdqWkVscWREaUdob1dqZnZnUCtPSEw0NXBtaWxOSnlWUVcrbXBwdkJOUzNRN3R2QkhUTm1qV1RDQ0hEYnNSTi8yckxsM2p1MmFmeDdETlBZZjY4T1hDN1hGWDYzdnRyMzhNOTl6VENwNTk5Z2JIakxoTkZtb3hHN055eC9hNXlWTy9jdVIxZDcrK0dqaDA3UWF2Vm9uZWZoM0JQbzBiWXZmc0hBRUJFUkNRMmJQd1lqVk5Td0RBTUhubjBNWEFlRDdLeUxsWDVHS2tuVDZKbmoyNFk5UHh6dUtkUkkzVHBlbitGKzYxNWJ4WDBBUUY0Nk9HK04rMzZxM0pNUWdqQ2E0VERkdjNPK3FzV2pVWURRUkFRRVJHQlRwMDZRUlRGVWtTT0FOQ3FWV3VFUjBSZzVvenBHRHZtVGZSNzRrbUZhT0ZxRzZlb1ZLcm5GeTFhTkJCZUxqZGZrMVFsWVFnalVrb1lob0hINHlFMm13MHVsNHNFQmdiQzdYWkRwVkxCWU1pRDFXcEZkblkyQ2dzdHlNM05SVzVPRGlJam95QW5CUjg2ZUFCV3EzYzg2OVN0aDZOL0hGRW9rbEpUVDhKbXM5MDhZRHQ3OWl3dVhicWtwSFZVcGZkbm1Ram93QnVWcTNiaXhOL1lzdVcvV1B2QmVueTYrUXN3RElQMTY5ZFY2YnZuejUxRGg0NGR5OTM0L1B4ODdOanh6VjBGYkFhREFYRnhwVlgrMnJXVFlERGtBZkN5UEJ3OStnZUd2endVenozN05BYS9NRkRSZEtvcUtVMmFZUGRQZS9ERmwxdVJsNWVIRFJYY3A0OC8raEMvLzM0SWMrZk9yNUJEcnpxa3FzZWtsTUpTYUVIUUxYS0hKQ2NubzFHalJ2anR0OStVb0ZCWjRCMCtmQVQrUFBvSHRCcnRkVDBZOUhvOUJnNGMrS2JCWU9oWmdiL05xN2w1L1cwTUlRU0NJRUN0MWtBUUJPTHh1QkVVRkF4ZUVIRDQ5ME00ZlNvVkRNUEE0WERBWkRLaFY2L2UrT2FicnpGazhQTklUVDJKd0VCdi80VG16VnVnWjY4K0dQbjZDRXlmTmdVQitnRG9BL1EzeDhlV25aMWRMbGZOdDFUS0I5UlFVUVRVYnJkM2xwb1ozNUJaYTdOYUVSUVVqSUNBQURBTWd4ZUh2b1NMRjlPbHhacUhSUXNYSU45a1JHaFlEWXdiUHdHSmlVbjQrZWVmOE44dlBrTm1aaWJtenBrRmpVYUQ1NTU3SGwyNjNvK2xTOTdCc1QrUHdtQXdZUGpMWHI2M3RlK3Z4NGIxNi9Ebm4wZGhOQmlRMHFRSkxxWmZRR1JVTk41NWR5a29wVmk5YWlYKytPTXdPQStIOWgwNjRyWFhSNEpTaW5GalJ1SCtidDN4eUtPUDRjU0p2ekZuOW4rd2J2Mkh0MFYzYlYrSmlZbUJJUyt2MUhzNU9kbG8yZEtiaXJMdmYzdng2YVpQc0dUcGNpVFVxZ1hBR3pXc2FIR1ZCVHUzeTRYdnZ2c1dmZm84QksxT2g3aTRPUFRvOFNEMjc5OVhhcjh0WC80WFArNytBY3RXckxybWhOT3JsYXM1NXBFamg2RlJxOUdnWWNPYmZuK2tza1A4K2VlZkFBQ1daY3RSeTl0c05vd2ZQd1lEbngrRXMyZlNzR0QrWEV5YVBQV2Fna1ZPcHhOYnRteFJBWGpscjcvK01qUnYzdnhQeWRjbVN2NDJKV0pLS1NVTXc4TGpjVk9uMDl1VW5qQU1vcUtpRUJBUUFKMU9oNy8vK2d1aUlNSmlNVU1iRjQvblh4aU1CZzBhNG1KNk9pNWxaaXJIZlc3ZzgzaHU0UE1BZ0plR3ZZaTZkYXRlVUgvTkdsdFJVVkdGdVdxVmdCb3AwNldkeWMzTmpkZHF0Uk54QXp1MHQyN1RGalZyMXNUTHcxN0UxMXUzUUtmVG9YWHJOZ0NBT2JObm9XZlBYdmg0MDJkNC9vVkJtQzVSTEQvd1FBK3NmWDg5YXRhTXg3UzNabUR0KytzVnMyalU2TEdZTUhFS2twS1RzZmI5OWFVNHBOcTJiWWNaTTJjaE16TURIMzJ5R1pjeU0yR3hXR0EwR2hBWUdJQU5Hei9HeDVzMkkvWGtDUncvZmd5RUVFeVpOaDJmYnZvWWFXbW5NWGZPTEV4NzYrMWJCbXJTL2ZCcUg2S29hTklBOEhEZlI3QjM3eDRjUHZ3N2VKN0hMNy84ak5TVEo5Q3pWeS9GSDBrSXdMQXNpb3VMc1BuVFRkTHZsR2FLaVl1UHg2R0RCOEZ4SFBKTkpxODJyTlhpazQ4L3d1ZWZid2JIY1NncUtzUytmZjlEczJiTkxwdkNPN1pqMjlkYnNYVDV5cHZHVTFmVlk3cmRidngrNkNEbXo1dUQ0YSs4ZWtzbzNmUHo4eFdBMG1nMENBc0xLOWNRNWNLRjgramF0UnYrNzdtQm1EWjlCalFhcmVKanV3NnBXNzkrL1JkSGpSb1ZXNUcvalZMS01BekR5RlJqSG84SEhNOFJ6c1BCNDNiRFlYZmd6Smt6aUlxS2d0MWhSMUZSRVFvS0NtQTBHUERISDBld2ZOa1NQUGxVYVY1Rmp1T3c2Wk9QUVlpWHg2MWFOVFpCRUpDZW5xNEVDM3dqb0JXa2RaQXlhUjJFVXNwRVIwZFBJSVE4ZUNOdnVFcWx3b3laczNENlZDcSsvZlpiREg1aElHYk5ub3M2ZGV2aTdKazA5RnpoSmV4cjA2WXQzblc1WURJYUVSMXpiV205V3EwV09yMWVNVnNEQXZUZ09RNnhzWEdJakl6Q3hBbGp3VElzREVhdjM5SHJtNHJBNkRIajhQcXJyK0Q1RndhalNaT210d1RVeWlib0xwZy9Gd3ZtejhXRFBYdmhyZWt6VUw5K0E3dzljeGJlVzcwU2hydzgxRTVNeE1MRjd5SW14cHRmMStlaGgzSHk1QWtNSGZJQ1dGYUZ4eDd2aC9yMUc4QlNwbHhvekpoeFdMeG9JVFp1V0lmYXRXdGozWWFQb05Gb3NHRGhZcXhjc1F4ZmZQNFoxR28xdXQ3ZkRZTUd2NmpNclVVTHZXYmdzMC8zTDIwbWJ0cU0yTmk0R3o0ZVZUM215TmRlQlNGQVltSVN4bzZiY0VQejJJS0RnNnU4YjBaR0JzTEN3dENqUnc4QXdQSGp4OHYxMG1qZXZBV2FOMitockl1eDQ4YmZJUC9yem02dFc3Zk9BTERDUjJzVEFWQkNpRGRHU2tVcTE0dnlQRThad3BBU2F3bmxPUTZob1dHSWpvbUYzVzZIV3FXR1dxM0dybDA3d0RJc25ucjZhYlNYSXV1QWwrSjgrZEozMGJ4NVM4eGZzTGhDYmJPeWNic21ZUE9OZ0ZiR3FWWUcxR1FHQUxsY2FqZ2g1TlViUFVGUG56NEZuVTZIUm8xVDBLaHhDcjc5dGpFKytHQXQ1czFib0poR2lwbkVNS0M0OFZ4MGYvMTFITHQyN3NEU1pTdWcxZWt3WTNycHFqQ0h3d0cxV2cyWHkxbnRBTmFyZHgrNVEzZ3BxVisvQWY2My84cDlURHQyN0ZUcHd0VnF0WmoyMXR1bDNxdW80VzJidHUwcVpIbXRWNzgrbGk1ZldlRnZzeXlMdmZzTzNGU2dyOG94LzJtOGJzUTUyTzIyS2tVcTVhcWI2NVZQUC92aW1yNm5WcXVIYk5pd0llUEZGMS9jQmkvRnJrZ0JLcldTcC9DbWdZaWlLRktCRjhBVERvRUJBVVNyMVZHZFhnZTMyd1dudzF1Tm9GS3IwSzFiZDhUR3hxRldyZHJJeUxpSU9uWHFBZ0E2ZGVxTVRwMDZWM29lZHB1MVVqL29WWnVpZVhsNUNnV1JiMXBIQlJGUStJQ2FvcTNaN2ZZdUxNdE9ySTdKa1hYcEVoYk9ud2U3M1Z0K1lpNG9RR2hvS0xRNkhlbzNhSWdmcGFqZUgzOGNnVnFsUW5UMFAydHJvYUdoS01ndnFMQzdWRVZpTnB1aDErdWgxbWlRbjUvdnpZV1Npb2tOaGp5OHQzb2wzdjlnQXc3Ly9qdU9YRVg0dW5MSGJnRDhjblZqY3l2SHJMSmpSMGRIdzNHRld1ZUFnS3FadkZYZDczcC9LeWdvNkpWMzMzMjNoUkpNa0pyQ3lDYXBuQUlpaWdMaGVRRWN6NFBqUFBCNFpBWmVGeHdPQit3MkcwcUtTN3dNdlBsR0tibS9ha25xZHBzVjBkSFIxdzlzRG9lakZGdkhQd1FMeWlYaHBxV2xoV20xMnZFQXFxVU9xbWV2M3VqY3BTdGVIdllpbm4zbUthU2VQSUhYUjNwcDNLWk9tNDV2ZCszRTRFRURzWEg5T3N6NHo1d3FPVklUYXRWQzIzYnQ4UFNBSi9IQ3dHZGhOQnF1dUgrblRwMmgwK3Z4MUpQOU1IM2FGTlN0Vng5MnV4MDh6MlBtMjlQeDBzdXZvRmJ0MnBqNjF0dFl2SEQrZGZzOTVDZTlYOHBQK3NwS3NKaGJOR1oybXhWc0pScEdYRndjS0JXUmI4eXI4TnlTNjlUN1I5QUtDQWhFY3AwYngxajdEOGVNaTQrUEgvVENDNE5xeU9CR3k0TWJReWtsb2lnUWdlZkJjYnprYi9QQTdYTEI1WFRDN25EQWFyT2l1TGdJRnJNRkpxTVIyVm5aU2wrRnlzYlJaTWdGQ0NvdFA3d3FhdkRVMUZTa3BhVWhNek5UcVFYMU5VVjlLZ3lJckxWSnZqVkdvaUdheFRETWhCc3g2TGVLU3JtNnBUS3E0OHI5TFprd1d5eCtvc2t5WWpUa0lqSXlBb20xeTNPZlpXUm13bXkrK1dObU5PUWlJaUlDU1ZmZ1l6T1pUREFZRE9CNUhsYnI3YzlXNDNLNVZ2WHUzWHM5QUllMHVRQjRDQ0VjQUo0UUloSkNSSWxhWEtZdm9scXRsMW84SUNBQWdZR0JDQTRPUm8wYU5SQVJFWUc0dURqVXJsMGJ5Y25KNVRYRjRHQ29WU3JFeHNaV3FxMWRsWTh0S3lzTDJkblpNSmxNTUp2TkZRWUxQQjVQdWRRT09Wamdjcm1ldUZHZ2RyWE8xanRKcnZhNkVoTnJJei9mQktNaFYyRTV1ZHMxTlp2TkNvSG5Ld1ExQUVoS1RJVEpkUFBHVEQ0blVSQ3VDR3F5U1hxbEJYc2J5bXRaV1ZsbmE5V3F0VmYydHhGQ2xJQUNBSGhaUHdoa2NGT3BWTkJvTk5CcXRkRHI5UXF3aFlhR0lqdzhIRkZSVVlpTGkwT2RPblZRUzBvbnVscXBFckJaclZhbHNxQXNxUG5XZ1BxbWR2aWFvRWFqc1paYXJSNTdxNXl0ZDlLaXZOcEVWRUlJV3JWcWhZc1ptYkJZekNpeVdPQnkzWjBjYlhwOUFCaVdSV1JFSkJJVHI3d2cyclJ1amN6TVM4Z3ZLS2pXTWRQckE4Q3FWUCtvcWQzSlVyTm16Y0ZmZnZubDJhZWVlaW9ibDZPa01yQlJPWkxnSmFma0tjTXdoR1ZaeXJJc1hDNVhLU0pLR2V3Q0FnSVFISnRnME53QUFDQUFTVVJCVkJ5TXNMQ3dhMUppcXJTS1pOUFROd20zZ3NvQ1gxQ1Rxd3NJcFpTSmlJZ1lBNkRWalJ6TTZPaG9HQXpHZngyd3hjZGZmVG9ESVFSMWtwTlFKem5KYjROZXBiYWIrQzhGbTVzcGhKQ1dmZnYySFFCZ0ZRQkI2by9nalpaS3BKVHdFbE5TQ2R6QWNad0NiaXFWcWtKd0N3d01SRWhJQ0pyNGtDOVVWZjR4ZUpDVmxZV2NuQnpGbjFZWnFGM0JCTzFmSGFrZGlyUFZaSURqRG5lZU8rdzJyek1VOUlaeHNmbkZMemRUZERyZGtPenM3TTZReXEwb3BScEl5YnUrZ1FSQkVJZ0ViQXB1eUIydUhCTE5VVW1KTjBxYW41K1BuSndjaGVMb2htbHNkcnU5d253MVg4SklHZGg0bmk5bmdtWm5aOGVxMWVyUjFUV1k5OTU3TDR4R0k0d21FNndseFhja05ianNERTFJcUhtbitWYjg0cGRTRWg4ZlAyamp4bzJwUTRZTUVTUi9tK0JybHBZMVNhWHFCT3BMUkdtMzJ4V3RUUTRzaElTRUlEdzgvS3FxUEs0SWJHWHoxY3BFUG4zejFTb3lRVWxNVE13b0FQZFY1MkRHeE1SY2RTOU92L2pGTDlWaWtyWVlNR0JBL3lGRGhud0FnUGN4U1FYSkpCWGhaZDFWVEZLR1lZaEtwYUl5QzRodllLR29xS2lVcjYxUm8wWlZCN1pNbjZKVFg4blB6OGVaTTJkS01YZVU5YStWRFJ6NGNxeWxwYVgxek1yS0d1Mi8zWDd4eTEwbEwrL1pzK2RvdDI3ZERzdmdCaWxTS2hmTFMwMWc1S3A1aFZQdWN2ZXJ5NlpxV1RPMXFpMzhWSWxoUDVSN2srTUY1Ri9NQW5FYVFOeG1FRTh4Q0djREk5aEJCQmNndUFEQjQ5MUVqbEJSQUNnbDhqYjQvOXF3OWFQM2pQTGZZNy80NWU2VGhHYmkvOVZMcnZIMytZdUZQQUNCQUFKQVpiT1VnUmZOQUNxQ2lqeUY2Q1lRWEJTQ0F4Q3NJSUlPakdBQjRmSkJQTGtnN2t3UTV6bkFsb3I0NUZwUXEvNjU5MFdGd1lPc2JBc01wbUtZTFRZVUZUdGhzN25nY0xyaGRISnd1emw0UER3OEhBK09GOER6SWdTQlFoUXBSRW9KQlpqM2x3MGVDZUFCL3kzMmkxK3VUU2k5YzgrZFpabXVoL2RNZndSeUlNRWJSSkFEQ1N5VmlDbEZrVUlRS0hoZUJNY0w4SEE4UEI0ZWJqY0hwNU9EdyttR3plWkNVYkVUWm9zTkJsTXhMbVZWclZLbm5JK3R1TVNKM0x3aUZCUllVVmprZ05YcWhOM2hCVFdYbTRQYnc4UGpFY0J4QW5oZUpMeEFJUWlVaUpRU1VCREx4WGNic0N6emhuOXErc1V2VnljaUJReVdTSmdLd3lDSUxHeDNkanJpb0FVTEZoeVpPSEhpUmE5SjZnMG1lRTFTaUpJRlNrUkt3QXVFY2dKRFBEeEwzWndLVG84YU5wY2FKVTR0Q20wNkZGajFNQllGSXRzY0JFTnhDUEpLNGxBbmdVTmNlQUVxcTRvc0IydzV1WVV3NVpmQVVtaEhpZFVKbTkwTmg5TURsOHNqZ1JvUGp1UEIrMnByRktBVWhBSk1TSWorTlFBSi9tbnFGNzljSGFnZE8xY2ZZTU1RRkhKbjk4bVZwR1pDN2VUSEowNmN1Qm9BRDIrRVZINFZRUWdGdkczOENDRWdVck5sSXRFZHNTbzFWQ28xVkdvTjFCb3RORm9kdExvQWlDUVF4VFkxOG9vU2tHY093NzMxejFjSWJxVk1VV04rQ1F6R1loUlliQ2dxZHNCcWM4SGg4TURwNHVCeXk2QW15Q1lvNGIwbUtLRWlKWlNDT1BKV2RDZUV2UEp2bW5EanBtM0IvWDNmdVdHL3gvTUNSazMrQXRIMXhpRzA5cHNZUG1vVEhBNlBmMlhmNVdJb2pBVFlNTVRFeHY5cmtzNjFXdTJnUGIvdWE0N0xWT0lhU3VGREplN05uaEJGa1FpQ0FGN2dDYzk1QXdlYzUvL1pPKy93S0tvMml2OW10bVZUSUUxNkNVaEhhVkpFMEFBZlVrUkJCQ3NsSUFncUxZTFNsZDZEOU41RXBTZ0lpaUJLRVpBZWxDSUlVZ1VFRXRKN3NtVm12ajltZDVKTkl5Qk4yZk04KzBCMlpuYnUzcDE1NTIzM0hDc1dxd1dMUThaUDFUNUlKRDR1anVTVUZIUTZBK2dLY3pQZUw5ZHp1eGkyR3hFSlJNY21rNUNnR3JYVU5BdnBHZGJNdkpyRHNObnRzbUMzTzBKUUdVRUJBUkNOUnNQNzdrczBmd3diczVGTlAvek91czk2c1dsMUgzYnUrWk4rZzllNkorWVJSMVI4b2YrY1RpNUF1ZkxsTzJReGJBWlFER1NxVzRuTzFqQkpsZ1hKTG1HMzJ3V2IzWlpaRmJWbVZrVlRVbEpJVEV3a0xqYVd5SnVSZVB2NDN0cXcvWDA5VGcxQjQxSkpURW9qSmRWQ2VwcVZqQXdiRm91aldKRHByU0ZKTXJLc09Bc2NZa2JVdkRjRWdSZmRsMmplU0UyMU1HL3Bic0xHZHlDNGNTV0NHMWRpOGF6T3JGeHprSmhZTi9YUW93cEZBVW5TMzVHbmR1YjBId3dNdmZjcDdUTm5UaE0yYllyR2FlakV4bzNmRU5MbExVSzZkbklSNUltT2ptYmdCd040dTN2WGxpMWF0bXBNRmlweFJWSFVJb0tpaUE3bUh4UkhxNGNrMmJWMkR5ZkZVWWFqNVNNMU5aWGs1Q1NOVWp3eE1RbTdyTSsxMENJQ1dHMTJOUVNOVFNFaEtZM2tGQXRwYVJiU25VYk5XVEN3UzlqdGttQ1haQ1FaeDdJcHhJOC9hcTB6NkhYdlBlZ0w1T25ta3drZDloWEJiY0lJcWpHY0p4cU80ZnV0SjdUdGRadE1aUGpZalZTdFA0cmlsVC9pN1BsSUxCWWJZeVp2cG56TkVYZ1U3VU85cGhQWnNkdFZLTmRtaytnZCtpWGVKZnRUdlBKSGZEcHZlK1lQR0pQTUs1MFg0bGYyQTd4TDl1ZUZWK2R3NFZLVXRyMWoxMFhVYlRJUmdHTy8vMDE2dW8zZ1JwVzA3YzgyVkVYdkQ0WmZkTi9oanlnRUFWTFNoRHM2dG5LVnFvd2FNL2Flam0vK3ZMa3NXN3FFU3hjdmFpU3VBRmV2WG1IRCt2VXNXTFNVWmN0WGN1TEVNWTA4ZGY2OE9UUnI5ajlXZnI2S2Q5OTcvMVVQRDdPSE14ekZVU0VWQkVFSE9JMmJ5dHNtU1VpT1ZVdzJtdzJyTFl1eWZIbzZxU21wSkNhcUlXbDBWQlFKaVZLdU9UWTl3STBiQ1VUSEpCT2ZrRXBTa2xvRlRYTzBkbGlzZHF5YXB5YmhxSUk2dkRVMURQMTQ4RXU5S0tDQys3M0dnbVcvc0hWOVA1bzlWNFhOUC83T0sxMFdjbmpuVUdyWFVCYzd6NWkvazVVTHVtRXk2cWxVb1NnOSszM0JqenYvWU9HbmIxR3BRbEdXZnI2UEYxNmR3L0c5STZsV1JlWHJPbkQ0SXVYS0JuQjB6d2lPbnJoS2ozNmZVOGpIVE0rdWpRa2Q5alVXcTQzd240Y0MwRy93VjRTODl4bjdmMUlabWpxMnEwTjhnbHJldWg2UmdOR29KOEEvODhsc01PZ0k4UGZpMm8wRTl4M3VSZzdFeHNZeWNjSTRZcUtqRUVTUjk5N3JRNE9uRzNMdDJqVUdodmJIWnJQaTYrdkhpcFZmWktZN2huekVqUnZYQVZWMHlkUExpelZyMXdFcXJmK2NXVE5JVEVyRTM4K2Z3VU9IYVZvV0FPdSsvb29ORzlacit3UDBmS2NYUnFPUnNHbFRYTWIyKzRrVFBGVzNMcDZlbnRqdGR2eDgvVGh4L0RqMTZ0WG54SW5qZlBDQlN1amo2K3RicjBTSjRpMHVYYnEwR2JBNVhsb2hRVkVVMlJHU09sWWtTT2gwZHV4Mkd6YWJIcXZOMGFpYm5rNmFTUTFKRXhJU2lJbU53V1RJdmFkTm41NXUxWHJXRXBPeVZFRTFvK2JJcXpseWE0NFExT210Q1NmMmZWeElweE43UFN3WHdsc2Q2OUhzT1pXQThzVldOV2plcENvTGwvL0NvcG1xOW1XYkZrL3lXbnVWYUNRdVBwWFBWaDlnMVpJZXZOUmFWZjJlTnE0amgzNzlpeW16Zm1MbEFsVTV2VmpSUWl5YjB4V1R5VUNsQ2tYNTdmZ1Y1aXplUmMrdWpibDhOWmJTSmYwb1dkd1BUMDhqeStkMjVkcU5lRzA4YjNTb3AvMC9MZDJLaDRjK2x5U3JIb3ZWN3I2TDNjaUJyOWF1cGthTkdvUjBlNXRMbHk0eGY5NGNHanpka0ZLbFN2SDErZzJjUDMrT2llUEh1Und6YWNvMEFCSVRFK2o5VGc4K0dQZ2hvTXIyVFJ3L2x2RVRKMU84ZUhGKytuRXJDK2JQWS9TWXpPTnIxcXFWZzNrNEw0SGx4TVJFUER3OGlJNk9adEtFY1VpeWhJOGpUNWlZbUlqSnc0UHZOMzNIamgzYjhQVDBmTFZIejNmMkxGdTZ4T28wYkk1VkNaSWozNmJJaWlJSWFraXEyQ1c3WUxQckZMMHpKRFdvSVdsNmVqcXBxU2xxU0JvZmowRXZrcDR1WXphN2psRzhFYW1Hb1BHSm1UMXJHZW1aQlFPYnpkbXpsdFZiQTluaHJWV3RYTHduVU8xaHVSRHExSFNsb2FsZXBUaW56dHpRL3E3NGVPWkM4ek5uSTVCbGhZYjF5cnNjMC9qcEN2eHhKbE5YczI3dElFd21nL1ozL2FmSzhlZTVTR1JaWnNpQWxuei80KzhFUGo2UU5xL040YnNmVGxDOVN1N01yR1lQQTFhcmxPTjlpOFdPbDZmUmZSZTdrUVAxNmpkZzU0N3RyUHhzQlphTURNS216eWpRY2JJc00yYjBLTnE4MkpiNjlkVmc2cSsvTG5IdDJ0OE1IenFZN2lGZFdMMzZTNkp1dXVvTFZLcFVtVmM2ZEN6dytFNmYvb09SSTRieVR1OTNhZHJVdFNkLzBvUnhYTDc4RjJIVFoySXltYXAwNjk3amVWd0tDWTRLcVpvU0UxQzlObVJaUXJKTFNIYTdReXRCclpKYUxSWXlMQm1rcDZWcmhZVEV4RVJ1UkNibTlOalVuclVVa2h6ZVdyclRXN000UWxCbno1b2tDNUpkOWRhY3piaG53c2Y0NlhSaXo0ZnBRcEN6YVZ0bVdPem9kSm5GMzZ3R0pMdVZ6L29aV1lWK2pkbmNYYjFlUks4WEVVV1J0aS9VNVBxWktYeS85WGQrM1BrSHc4ZCt5L3hsdXptOFl4aWUyWXhWcVJKK1pHVFlTRWhNdzdld3A1YS9pNDFMcFdSeFgvZGQ3RVpPdzFhdlBuUG5MU1Q4U0RpZnIxeUIwV2hrekxnSnR6eHUyZExGZUhoNDBMbEwxeXk1WWh2RmloVnpDVnYvQ1FvWExreEdSZ1poMDJkU3FGQWhUcHc0VG1GZlgyM2JNNDBhMDZKbEs4MWJMRjY4K0t1OWVyMjdjL0hpaGRZczRhaWRMTHh0TGw2YlhSSjBkcnZpVWlXMVdFalBTQ2MxTlkzazVHVDBPb0dvYUpsaVJRdmg1V25LOU5oaVlwTkpTRXhYZTliU3JWckJ3S1pWUWVWTWIwMVd2VFZuYnUzeGNvKzlEVHorTUYwSTRVY3Z1L3g5Nk1nbGF0ZkluVTIxWXZraTZQVWlCNDljY25uL1FQaEZxbFRLekR1Y3ZlRDZWRHQrOG0rcVZWWUpJWWVNMnNENWkxRjBlZU5wVmkzcHdmNmZQdUxVNlJzY1A1bVRRNnAyamRLWXpRYjJIaml2dmJmdjBBVkVVZURwYkY2akcyNEFUSm80bnZBajRUUnYvanpEaG8vazBLR0RMZy9kM0xCdjMxNzI3TjdOOEJFZnV3Z1dWYWhRZ2FTa0pIN1pzMXZMdDMyLzZUdVhZOCtmUDhmR2pkOFVhR3hQMXFpQjFXckZaREloU1JJSEQreW5aaTFWeTdSV3JkcmFPSS8rOWh0QlFlVXdtVXpsKy9UdDE1eHNSWVRzWHB2czlOclVRa0ptbGRTbUNpOWJNakpJVDFkemJTa3BLY1RFSmhONTA5VnIwOGNucUNzTVVoM2Vtc1ZpVTlkc09VTlFtOE5iazF5OXRkLzJEUGZSNmNTM0g3cWN4SVpmZWFiKzR6emZ0Q29yVmgzZzVPbnJyRnJTSTlkOWZYdzg2TmVyR1lOR3JzZmJ5MFNsQ2tWWi91VitEb1pmWXVyV0Q3WDkvamh6ZzRYTDkvRHUyOEVjL3ZVdjVpemF4ZEk1WFJ4R0w1SStINjVoWHRpYkJQaDdzV0xWQWJ5OVRacGhYUHZORWVJVDBuaXZSekJlWGlaNmRHbE0zOEZyOGZIeHdHalEwenYwUzdwM2VnWi9QeS8zWGV4R0RuVHUzSld3c0Ntc1hiMEtXWllaT09nalJGRjBLUjRrSmlieVdzZFhxUFBVVXd3ZE5vSzVzMmVTa1pGQm4vY3lVOTl6NXkvQ3g4ZUhTVk9tTWZQVDZTeGF1QUJQVDA4R1poTlNQbmIwS0JzMnJLZDkrdzYzSEZ2WnNrRzBiOStCZDN2MVJFSGgyV2VEcVZldlBnRHY5K25INUVrVFdQZjFWNWpOWm9ZTUd3NkFuNzkvaC9hdmROaStjY00zTnNEcU1HNTJWR1VybFcxWGJkcDE1TnBVcnkxcmxkUml0V3E5YlRvUjRoTWtvcUtUS1Y3VVY0dVNoRm1UWCtWR1JEeFJNY25FeDZlU21Ld3VlazlOczJwTHFUSXNrbUMxU3RqdGlpREppcWdvaU5ibytmMTBPakhzWWJvSW5tNCttU2VxbHVEQ1g5RWNPbktKR3RWTE1YMThSNTU5Um0ycHFOdGtJaSszcWNuSWo5cG94MWl0ZGthTy80NHZ2anBFUW1JNnRaNHN6ZmlSYmZsZnNNcjk5T0hJOVp3NUY0R2ZyeWMvLzNJV25VNWthR2dyK3J6VEJGRGJQUVlNL1lydHU4NlFuSkpCblpwbG1EYTJBNDJlVm1YUU9uWmR4T1dyc2Z5NmU3Z2puMllqZE5qWHJQbm1DS0lnMExGZEhXWlBlUU1QRDRQN0xuNkVzZWQ0NWYrazZscHVpSStQbjFqamlhcmZBeWxBS3BBbUNJSUZWZDNLN2xDMWtuVTZuV0l3R2pFWlRZcUhod2tQc3hsUHN5ZGUzbDc0K0JUQ3Q3QXZvZ2dOYTBtVUQzcU1hbFZLVUQ1SXBUVVN4bzk4eVhVWmxjTjdTMDJ6a3A1aEpTUERKbGlzRWphYklraVNMTWd5WXVmWDYray9XOURqTVBEa3cyYllXald2enVpaEx6MnlONGlpZ0NDNHYvdkRNbWNGL2V4SHliQXBpdkpIbzRZTjN2Lzc3NnNwRHVPV0pnaENPbUJCbGV5VFJGR1VSVkZVREFhRG9oSlBlaWdlSGg2WVBjMTRlbnJoN2UxTjRVS0ZFUVNGZWsvS2xDbmxUNlVLeGFqNVJHazhQQXpvVXh5NXRZd01HMVpMMXRVRldSYTVaK3RiV3pxblc1ZUh6YWhsaCtEYisxLzNnMGVlbTBiUklyZS9yRVpTOUZ5T3FreDhraDVKRnNsSWZ6UlZxanpNWm5TaWduOGhPMEZGemlJS2ViZlF5QXBjaWFsTWJJSUpTZGJkc3psVHh5UVRXTmhDMmNmTzN0TElYYjkyN1ZINHFhb3ZXTGo0MlJmYnROcnB5TFhaRkVXeGdXQVhCTFdRSU11eUFDZzJteTNUSU9KWTZTU3JLeFU4VENhMXVUbEZJakVwazlvb3FFd2crdFEwaTRPNUkxdHVUWktSSkZtUUpNV3h5a0I5b1NEcTlib3VELzFUSVdIUkkzRXpwOXY5K1AxQ0tmUUdEM3dLdTNWRlUxTlRpRTlPSWlhaEtqVWZ2NHBKbjVpclVmdjEzQlBvOU9iN01tZXBxU25FSmljUkZmOEU5U3FkeXRlNGxTejFhQkRqRkM5Um9nM3dpOE93V1FHOUlLREgwZGVHcW13bHFNdlFCUVVFUVJRRVJSVFZiZ1JScDhOaXRTS2drSm9ta1p5Y1FYeENHakV4eVpRcTRZZVlubTVUdlRXclN5TXVkcnVFSk1scUpkUkJucVNBa0haemJtdWc4Y000V1lkMkRIM2t3dERJdUNMb0RSNy9LVmFJZndJdkwyK0tGaXVCVHU5QlJGenVpbCtYbzZ1aDA1dnYyNXhsanNuTWxaakt1QUdpS0RiY3MvZEFMVEpKS0EyS291aFFLNlNxTlZNVUZFVldLNlN5TTRyTXVwWlVsU1JJVDdlUmtwcEJZbElhc2ZHcFJFWWxJYVpyUEd0cXo1ck5MbUdYSEViTkdZSm1NbmdJUm9QdVRmZlA4dkFnTnRIMG4yU0YrS2Z3OWlsRVRLSXAxMjF4aWZvSE1tZmVQb1dJU1RDNWZ4d0hTcGN1bmIzMXc4bjhvWE95Zmpob2paQWx0ZjNEN2xna2I3ZlpzRHBhUU5JenJLU21XVWxPeVNBaElZMlkyR1QwRmtzbWVhVFdzNmJtMWdTMWIwMXhXRTZFaENzem54UUU0ZFhiQ2drZjRXVDJ2WjRmU2RZaHlUcTNwNWFIbDVRWUg0c3NneWk2enZlRG1qTjFUSEYzOUpzbkpTWnkrYStMcE9ham9ldmw1VTFRdWNjcFZMandYUm52dlQ2bndXQm91L2FyOVYrOThYckhDMlJTaCtzRlFiQTd3bEZabGV4VEJFbVNGVW1TQk1rdUtVNnZ6VzZ6QVFvV2kweDZ1cFhVVkF1SnllbkV4YVdpVjNOcldaZE55UTV2VFZhTEJnbzQrZGE4dkV5dkYyVEEvekdLNDN2N0ZQY0VuVTZpaUc5Q3ZsVEh1VUVuU285c29hQWdTRTlQZHpGcW9CcVVCemxuNmVscGQvUWcrK3ZTQmRMU1V2UGRKelUxaGN0L1hhUkdyVHAzWmF6MzQ1eTE2OVIrRHJpYUpkZG1kWGh0a3FLb3VUWkZrUlZWeFVweXBUYXkyeEZRc0ZnbE1pdzIxV3RMemlBK01RMTlGdjBDTmE5bXp5d2F5QTVYRUFWaDgxZDlQRVJSZUwwZ1J1MC9SbkY4ejVHYW1rSkVnbCsrVk1kM2l1M2JmbUxGOG1WRVJkMmtSSWtTZlA3bEdzNmZQMGVQN2lIYVBrT0hqK1NGRjlxNGY0aUhHTGN5TUZtdnBYL1RPVDA5dmRxMGU3bjkrdSsrM1dqSnpMVmhFd1JFVUJ5NU5rRlFGQmxKa2hWSmxnUzd1a2dldTkyR0FGaXRNaGtXRytucFZsSlNNMGhLU2tlZm5VRFNuaVczbG5YNVZQT20xVjRGU3Q5cW9Ga3BqdDBvZUlqaTVlWE56VWlabS9GK0ZQT1B2eXVmZStQR0RhWk1uc2lZY1JPb1Y2OCtTVWxKQUZTb1VKSHRPM2NEOEU2UGJ2ZnNleTFmdHBSMkw3Y25JQ0FneDdobXpaak95Wk8vWXpRYWFmNThTOTU3djQvR0tuSHQyalhtekpyQnlWTW5NWmxNdEdqUmtsNjkzOHZCT25FM2NhdHpQdGU0SVFhREFVRVFDUW9Lb251UG5qUnExTmg5OGY1emxCcjU4YWdHMzMyN2NSZmFFaXRGRDBLbVBvSktJYTVremJXcGkrUWxRTUZxazdGWTdHUlliS1NscTdrMjBSbUNTcEtjMmVJaFo3WjQ0R3p4ME9rS3RPVC92MHB4ZkYvQzBueW9qdThFWi84OFEyQmdJSTBhTmNab05CSVlHT2dJeHdSTUpoTW1rOGxsTGVIZHhtY3JsaEVYRjV2ai9kR2pSbEt5VkNrMmZyZVp4VXVXYytqZ0FUWnQrbGIxK0dXWm9ZTS9wRkxsS256NzNXYm16Sm5QbnQyNzJMamhtM3Myem9LZWMrNzhoWHkvWlN2ZGUvUWtiT3BrTm55ei9vRmNKNElnVUtkT0hWcTBhRUh6NXMwcFVlTDJuQWhKa3RpL2Z4L0RobnpFdGIvL3ZpOHBnYkZqUnZIV0c2L1J2VnNYenB3K3JXMzcrK3BWeG84YjA0d3MxVkVjNjBlZERMdVNKQW1TSkFtS0lndVNhdHdFcDdDeUpLa1JwOVZxZC9IYU5NUG0wdDRoT1NtLzFSYVArS3N6bmhBRVd0N3FDL3dUaW1NM1ZNOHRMNnJqMjhIeDQ4ZDR1VzBicGsyZFRHUmtKQyszYmNQTGJkdXc4ck1WQmY2TVF3Y1AwUG10TjJqZUxKZ2UzVVA0NDlRcGwrMTdkdThpcEdzblhtajFQTjI3ZGVIUXdRUGF0bjU5MytmbHRtcG8rOEdBL3J6Y3RnMTkzMzlYTXlMQndVM3BHdElOazhsRWthSkZxVnV2SHVmT25nVWdMaTRPUDM5L09uWHVqTkZvcEZUcDBqUnEvQ3gvL25ubW5zMzc3WnpUYkRiVHFGRmpoZzBmeVpMRkMxMFlaZThYeXBVcmgwNm5ZOXUyYmV6ZHU1ZWFOV3RpTUJoeU5kaTUvWDlBLzc3OHNtYzNaODZjUnBLbDJ6cDM0OGFOMGV2MWVUNGdjdnQ3M2RkZjRlbnB5ZXExWHpONDhGREdqeHVENHJqSVo4Nll6c3Z0WDJtMlp1MjYwbVRUSHdWMGdpQUlvaWc2MTQ0aWF6VUFTWHM1cWRXc0Zqc1pHVGJTMHF5SXpvS0JYU3NZT0xVTXRLS0I0TzNsMGI1Z1Q1STdwemgyUTBWS3F2Q1BjMnkxYXRYbTIwMWJHQkE2a0pJbFMvSHRwaTE4dTJrTElkMjZGK2o0aXhjdThQSEk0YnpYcHk5YnRtN2oxZGRlWitBSC9UWHVyaXRYTGpOKzNCaUdEQm5PNWg5KzRxV1gyakZpeEREUzB0U2svSnk1OC9sMjB4WUFac3lhemJlYnRqQjMva0lBUkZHa1UrY3UrUHFxbnVsZmYxM2l3UDc5Tkdqd05BQ0JnWUhNbVRzZkR3K3pkbk1jUDNhTUdqVnEzck01djVOejFxdmZBS3ZOcGhuays0bkF3RUJ1M0xqaGNDWlVpaTAvUDFkUC84aVJjRVlNRzRMTlppTXVMbzUzZW5RbkxrNFZHLzUweGl5R0RSOTVSdzVJUUVCQW5sNytod05ET1g3c3FHYk1Gc3lmNTdpZXptdS9iOVZxMVRFYWpWeTdwbnFLNTgrZm8wR0RwNmxWdTFhRFhMdzJFUkFWQlVFUUJMWHRROGxhUkhDMGdOaXplbTEyMGpPc2lIWkoxc1JabkdHb3JHU3llS0FvZ2lnS0wvK1RIMkxRd0ZCZTY5aWVrQzV2MGJYem0yelovTDJXMTNpdDR5dTBiL2NpM1VQdTdXS0c3aUZkdUhqeDluUUZ0djMwSTY5MWZJVVhXcmRnOXF5OENmNTI3TmpPNkU5Ry9tZU02K2JObXdodTBwUkdqUnBqTXBsbzFmb0ZxbFN0eWphSGtFZEFRQ0RMVjN4T3RlclZFVVdSbDlxMncyYTE4dmZmVnd0OGpqOU9uYUpGODZhRWRPbEVsYXBWZVM2NFNhNzdMVnd3RDdPbkp5KzB1WDg2UVFVNXB5QUkrUHY1azVKNi8wVjRqRVlqa2lRUkVCQkE0OGFOa1dVWms4bTFQNjV1M1hyNEJ3UXdadlFuREJvNGdQYXZkTURmMzE4Ny9sNmdUOS8rVEp3d25ybHpaclAxaHkxMDZhb1dxQjZ2VUlGZjl1eEJsbVV1WGJyRXpadVJwQ1NyOC9iNDR4WFlzM3NYWGw3ZXpiTVpOWDJtY2N2c2FWTmtSempxMUVlUVZNZE1WWktYc0ZodHBHZllFTE1ZTmExZ0lDdUFvMmlRR2pHM0dYZUJJZmVqSWNOWStjVnE1c3hid09jclYzRHAwaVdOM25ocTJLY1A1UTNlb21VcnZsNi9nVzdkM3VaUlFtUmtKTVdMdStadHlwUUpJakpTWlJYMjl2Ym10OTkrcFhldkhuUjY4M1c2ZGUyY2F5aVNINm8vOFFUYmR1emlxM1ViaUlpSWNGRTRjdUx6bFo5eCtQQWhKazZjbkdmNGM3ZFIwSE1xaWtKY2ZCemVEeWp0VXE1Y09hcFdyY3IrL2Z1MW9sQjJ3OXU3OTNzYy9lMVhURWJUUDNvd21NMW1PbmJzU01lT0hURVlETFJyMTQ2T0hUdnkyR09QdWV6M2VJVUs2ajN6MVJwNjlYNlhRb1hVWFB1cnI3MkJUcStqZTdjdWZQSDVaM2g3ZTJQMlZMM2pRUjhPNXVlZmQvSjI5NjVWdW9hRVZIRVlzNng1TnAyaUtDcFhtM00xZ2l3ak9VTlRXZFk2T2xTdlRjSmlzYUdYc3F3eWNEVGtPc05RQU1GazByZTltejlJNGNLK1BQRmtEUzVlT0UvNThubVRLeVltSmpCNTRnU2lvcUt3MjIxMDZ0eFZZK004YytZME0yZE1KejB0alNKRml6RjAyQWd0TWI1NzE4K3NYdjBsbG93TXFqL3hKQjhNL0ZETFArejZlU2RqUjM5TWVub0dmZnYxMTd5RWI5YXZVNVBYaWtMVFp2K2pXL2NldC93ZVI0NkU4K24wYVlpQ1NNbFNKZkUwZTJyYjhodEQ4MmJCOUIvd0FVdVhMRUpSNFBzdFd4ODZ3MWEwYUZFaUl5SmMzcnQrL1JxMWE2dTlTbnQvMmNPcUw3OWd4c3pabENxdEZzcWZhOXd3MTVzcnU3R3paR1N3ZGVzUHRHNzlBaVlQRDRvWEwwN3o1cyt6Yjk5ZWwvM1dyL3VhN2R0K1l0YWNlWGV0NGZSV3VKMXpIamtTanRGZ29GTGwrNzlFeW1xMVlyZmJPWHBVRGZ0ME9oMFdpOFUxcFpHU3drY2ZEYVJ6bHhET25mMlRLWk1uTW5UWWlEc3FGcVducDdOK3ZWb29hZGV1SFQvODhBTlpGNmRualhCMjcvcVo4Uk1tTVQxc0doTW1UYVpTcGNxWXpXYUdEaHNCUUZKU0VtKzgxb0VTSlVvQ1VLcDBhVDZkTWN0eDMreHErUG5LbFg5a05XeUNJRGpDVVVYSUducXJLVE1KUlJHUUpBVzdYZlhhYkRZN0ZvdGREVVZWYjAwV0hFVURUYWhGVVJSUkVJUzdHZ05FUjBWeDZ1VHZWS2xTTmQvOXpwMDd4LythUDgreUZTdVpNM2NCczJiT3dPcFlHemJxNHhHRWhnN2s4eS9YOE13empWaXlhSUdXcjFtL2ZoMXo1c3huNVJlckFmaGh5MmJ0TTMxOGZGajV4V3BHanhuSC9QbHpBWlZZYi9QbVRTeGN0SlFseXo3anQ5OStZOWZQTy9NZG04VmlZY0s0TVl3YVBaWXZWNitsVE9teTJyWmJqY0Z1dHhNVkZjVzZiNzVsL1RjYkg1anhjblp2QXlpeWpOMXUxNHhRbXhkZllzK2VYWVNISDhadXQvUHp6enY1NDlSSldyUlU2MGV4c2JFSUFvZzZIWW1KQ2F4ZTlhWGpjMXlySHNWTGxPRFF3WVBZYkRhaW8xUkpRcVBKeEJlZnIyVHQydFhZYkRZU0V1TFp1L2NYYXRTb2tSa0tmNytKYnpkdVlPYnN1VnI0ZE0vRDd3S2UwMkt4Y1BqUVFTWlBta0R2ZDkvSHkrditFNFJHUjBkckJzcG9OT0xyNjB0Q2dxdksyY1dMRndnT2JzcGJuVG96OHBQUkdJMG1MY2QycjNEeTVFaytuVEdMNTRLYk1PTGpUL2p0MXlNdTI1T1NrcGcyZFRJdnZ0UTJSemo4OTk5WFdiWjBjYk1zSWFoV1JIQjRiS0lnQ0M3THJGUWFOZGxSSTNETnRlblZTcWlzZVd1eXltRXBBRUo2NUx6V1FNbTc4YVduaDAzRjdHSEdhRExTcDI5L1NwY3BrKy8rTld2V1l2bXlKV3piOWlNNm5SNkxKWVBrNUdRUzR1UHg5dmFoYXJYcUFMelV0aDFObXpVRDRQRGhRMXo3K3lydjluNUhlN0o1ZS90azVoMGM3SjVWcTFYVEV1SGg0WWQ0L3ZtV21NMnFhL3ppaXk4UkhuNllwczMrbCtmWXJsNjl3bU9QRmRHTWM1VnExZGozeTU0Q2pRR2dhMGkzZTVibktBaXlOK2hPbVR5UktaTW44bnlMbG56OHlXZ3FWcXpFcURIaldEQi9McEVSRVpRcFc1YXBZWjlxTW0ydFgyakRxVk1uNmRHOUt6cWRubll2dDZkaXhVckV4YnZlT0FNSGZrall0S21zV0w2VU1tWEtzSFQ1U294R0kxT21oakYzeml5K1dyc0dnOEZBY0pPbWhEakNmVW1TbURaVkRRUGZmTjIxdytqekwxZFRyRmp4dXo0ZkJUMW52ejd2SXdncWMreWdEd2ZmdFQ0MlJRRnZ6NEtYd2k5ZnZveXZyeS9ObXpjSDRQang0MWl0MWh6M3c2MkF1UUFBSUFCSlJFRlVUODJhS2syM1hxOW5VRGFtM0R2RmQ5OTlsM2N1UGNzNWF0V3FUYTFhdGJXL0Z5OWF3TzVkdS9oZjgrZHpGTEg2OTN1ZmxPUVVRcnEvWFdMMDJQRlBObm11MGEvWjhtdzJRYlhrem5CVVVZc0lNb0tnZW15U28xYmd6TFhwSmFmeWxIUDVsSnBiQXhDTVJsM3J1M1h4RFBwd3NFWWJYQkNzWGJNS3U4M09sS25URVFSQmF4OXdoamhPR0F3Ry9QelVKNnpOYWlPNFNWTk5iaXkveEcvV0VDbXJkeTRJZ2xhS3ppKy9rbGV6YUVIR0lHWmY1M09QMExKVmExcTJ5dmtUVnF4WWlWLzJIY3ozMkVhTkd1ZDU0NXBNSmtaK1BNcmx2WGQ2NWVTL3E5L2dhYjVldnlISCt4VXFWbVRtN0xtNWZyWk9wMlBQM2dQMzFkQVg1SnkzbXE5L0FrRUF2YzVPYW1wS2dTcVZpcUp3N05peGYzemVWV3UrdW05ejNLdjNlL1RxbmJ1bSt1dzU4N09tS3VvQng3T0ZvN3BzNGFpZ3lMSWlTWFpFUVVTU0JNZmlna3l2VFpTZFlhaWpHcXFTdVdsaGFHc2VFS0tqWS9EMjhVWVFCSTRmUDBaU1VoS0tvbEM2VEJtU2s1TTVmLzRjQUQvOXVGVVRjcTFYdno0Lzc5eko5ZXVxV096T25UczRlZkwzZk05VHQyNTl0bS9iUm5wNk9qYWJqUisyYkthK296U2RGOHFXRFNJNk9sb3J1VWZjeUpUM3U1TXgvSk1udlRsTGJzK043RWx2enh3OWdROTZ6bkliRTBBUjN3UlNrL01XemZiMExGaklXOUQ5N3VabjNjMXptanc4bW1UejFwdzliYUxqNVNEbFVBUkpraEFFdXlBN284NHNYcHRlQzBNVkJTVkxHSm9XTWJmcDNRcEQ4MEorZ2hTdnZmWTZZOGVNNG9jdFc2aGNwUW9WS2xZa01TR0J3TUJBeG93Yno2ZGgwN0JZTEFRK0ZzaVFvV3Bpc2txVnF2VHJQNENoZ3ovRVpyZFJMcWdjZzRjT3kzY01UOVd0Uzh0V3JYbTNsMW93ZVBhNUpqUnQya3hMaGk1ZHNwaVUxQlJrU1dMZjNyMTA2UnJDUzIzYk1YVDRDRVlNRzRLZnZ6OTZ2VTRySHR6SkdQN0prMTRVNVFJLzZSOGxwS1lrSTRweWpwNUFkYzZrQnpKbnFTbko2RVFwMXo3Rll2NXgzSWoxSnlwU3djdkhMOGZZeXBXdmNNdEY2WjZlWHBRclgrR3VqZmRCbkJNb3NYM0hyc3JQTjI5NmdpdzBSazZqcGhvMkJGbVdIZTRiU0xLZ2RYWTRLNlJDa1VBekZxdGRzRnBsN0pJaXlLcFlpODRXczJDU0tBb2YzTzZvSGlYdTludUJpK2YvSkxoV3dacytMMGRWSmphNWtIdHRiamJjakx4QlFLRWtnaDdMT1plWG95c1RtM1QvNXl5L01UbTl5YWo0UWtUR0IyQ1RqS1Erb3NRdDZlbnBTMXUzYnIwS1ZROGhHVlh3SmQwaCtHSVRCQ1JSRkdTRFhsQ01SaEdUVWErWVBReVl6UVk4elNhOHZFem9uV0dva29YSlExRVVVUlNGNXZjNkNlcEdUbmg3S3JmRjExVW04RHhSOGRXNUdYa0RieDgzTlhocVNqSXBLY25ZYlJtVUNUaVhleW9oOEN4UmNVL2V0emx6amtteXAxTTI4R3krSG5oUi95U0sraWM5NHFJOFNrUGdxeXpocU03QjlxRldSeEVjQytOQmxoVkZWcHQyRlVsUzFBcXBYVUtmclNrWEJZUzR5ek9xY1FkaUxiZWJCSFVqNXcyZzE5bHY2NElXUlptNmxjNXdPYm95Y1lsV0V1TGl5TWg0TkIvMVpyTW5vaWdUVU5oRzJjZk9JUXBLbnRkcHZVb251UkpUbVpnRXl6MmRNN1BaRTUwb0VlQnJvV3pnMlFML3RvOHlPYXNnQ05XM3J1OWJ2SFhIdVg5cHhrMUJoK0RJc1lFZ0tLck5rbVhVYmc1SFpkVDUwcXZVMzluV2hucDdOTG5UUVJYeFRTQWlJY0Z0Mk80QUtTbUpsUFM3ZmNvaVViQlR2c2dmbEMvaWx0KzdIY01SOU5oWmdoNTdPT1QzM0hERlU3V0NxZ0YvT3cyYkFqb2hhd0ZCemJVcGlxTk5UWEtzUm5EMHR5RTZ2RFVCYlcwb2drNFVuN3ZUQVJYemowT1JFb2k2ZVkyMEI3Q083dCtJdE5RVW9pS3VncFJJVWI5L3hzWDJhRC9wSDc0NWN4dTFPNE92cjJjdDFLS0Juc3dDZ2lyMG90R3BLWUtzSURpOE5rR1dsU3dlbTVPZXlPR3hEZXJYVENjSUJQK1RIL0twU3BlNEdlL0R6ZmdBa2hPTnBLUzZmNmk4NE8wRkJwMlZVb0Z4RlBGTmNrK0lHMjRBQnIydVljM3F4UXduL29qVVp3bEhSUVJFQlVVQVFWQVV4eElyeGJHNHdFRzdKc2t5Z3BkWko5anNpaUNwMVZBeCtmcnNwcDVtNDQvdXFYWEREVGNlSkk2ZXVOTG5xZUNKcDhoU0hSVUUwZ0dySUFnMlFVRFdhZFZSSFI0bXZlTGhZY0JzTnFLM1Mxa1d2aXVLY0RNcXNlSDk2b3gzd3cwMzNNalRhelBvS2dOL1pnMUZGUVZSRUZBN09CQ1FaUVc3QklKTlJoRHNhc2dvZ09EaDRTSGE3WFpCVVJSUlVSU2QzVzdmSkFqQzgrNXBkY01OTng0azdIYjdib1BCTURHTHg1WWlDRUlxWUJFRXdTb0lnaVFJZ3F6WDZ4V2owYWc0Nk80VnM5bU02RndYcVNpSzhPcXJyK29FUVdqb25sSTMzSERqUVVPdjE5Y3RXN1pzMXNLQlZrQndPR0t1VkVaWlhvTFJhQlFsU1JJVlJkRWxKaVkyOVBiMjN1V2VVamZjdVA5UUZJWEl5RWh1M294Q2tpUlNVcElmK1RrNWRlcFU3NzU5KzU1MWVteU9WN29nQ0ZiQTd2VGFkRHFkb3Rmck1SZ01pc2xrUXArVnljTER3Nk91Ky9KeXc0MEhZOVNPSFR1R2dxQ3RobkRyOFlLdi8yUGxnUXRrYWZ0d2tFOXFqVFNDSUNBSUFxS29RNi9YbzljYk1oZVdBb0pPcDN2cTMvamxRME5EYWRXcVZZSDJUVWxKUVJBRWR1L2VmY2ZucTFXckZwTW5UNzdUdkFHaG9hRVVLVktFd29VTDA3dDNiMDBFeFkxSEY1R1JrU2dJRkMxV3d0M2NuZ1UrUGo2VnM0V2hvcE40TXF2dFVobUpaTFdmVFpIVkhKdHpuYWdnQ0hYY1UzbHZNV3pZTURadDJzUzZkZXZZdEdrVE8zZnVwRisvZnU2SmVjUVJGUlh0MXVQTkJRYUQ0UWx5NXRpeUdUVUZsVzVOUVZGa0ZGbldkdUQ4K2ZORmdFcnVxYngzU0UxTlpkNjhlWVNGaFJFY0hFeHdjRENMRnk5bTVjcVZ4TVRFdUNmb0VZWWtTWGZrcVowNS9RY0RRL3ZmOC9HZE9YT2FzR2xUMk81UUtuTmk0OFp2Q09ueUZpRmRPN2tJOGtSSFJ6UHdnd0dFZE8xRTN6N3ZjZlhxRlczYmlSUEg2ZmwyTjdxRmRHYjBKeVB6MVdZVkJLSEN5STlIZWVkajNBQUVIQXNObk0yNnpxcW9VS0pFaVNmL0t4ZkpkOTk5Ui8zNjlUR2J6WGg1ZWRHOGVYUE9uWE5sZXZqbGwxK29WcTBhSGg0ZU5HdldqTC8rK2t2Ykpzc3lZOGVPcFhUcDBuaDdlOU9vVVNQMjc5K2Y2N21pbzZONTVaVlg4UFB6dzl2Ym14ZGVlSUVMRnk1bzJ3TURBL253UTVWTjk5aXhZNlNucHhNY25MbXc0OWxubndYZzRNR0Q3cnY3RVVaeThwMnRPcWxjcFNxanhveTlwMk9iUDI4dXk1WXU0ZExGaXk1RzZPclZLMnhZdjU0Rmk1YXliUGxLVHB3NHhwRWo0WTVqNXRDczJmOVkrZmtxdW5WL215bVRKbXFwbUVrVHhqSHlrMUY4dHZKTFNwVXVvMmxtNUlWbm53c3U0VEJrTG9TVGpyQlVXNEdnS2xpcFhwdm0waGtNaHYrRVlmdjk5OTk1NVpWWDZOeTVNMmZPbkdISGpoM2N2SGxUTXk1T3pKbzFpMG1USm5IOCtIRzh2YjFwMXF5WnByd3pjZUpFbGl4WndwSWxTemg1OGlRZE9uU2dlZlBtbk0xRkhEYzBOQlNMeFVKNGVEakhqaDFEbG1WQ1FqTDFCQVlOR3FSeDAxKy9maDJqMFVoQVFFQldWNXVBZ0FDdVhidm12cnZkeUlIWTJGZ0dEUXdscE10YmRBdnB6T0ZENmdQUXFjbmJvWDFiUXZ1N3BqS0dEZmxJOWFLNnZFVzdsMTdnelRkZTFiWmR2SGlSMFA1OTZkNnRDNE0rR01ETm01RXV4Njc3K2l1WC9RRjZ2dE9Mc09rektQLzQ0NjczMm9rVFBGVzNMcDZlS3NtcW42OGZKNDRmMTd5eTU1NVRIK0NGQ3hmbXp6L1BZTFZhaVl5SXdNTnNKaWlvSEFEKy92NmNPSjQvelhueFlzWEtaREZxamp4YjFuQlV5UXhKMVR3YmVsQjcySFE2WGZYL3dvV2dLQXFmZnZvcC9mdXI3bmxRVUJBaElTRXNXTERBWmI5UFB2bUVkdTNhQWJCaXhRcEtsU3JGNXMyYmVlbWxsNWc4ZVRMTGx5L1hDaElEQnc1azE2NWR6Snc1TThmblhMNThtZEtsUzFPeVpFazhQVDFadm55NWk1RWFOaXlUUFRjdExRMFBENDhjWXphWlREbmswOXh3QStDcnRhdXBVYU1HSWQzZTV0S2xTOHlmTjRjR1R6ZlVOSG5QbnovSHhQSGpYSTZaTkdVYW9FcFk5bjZuaDZhL1liVmFtVGgrTE9NblRxWjQ4ZUw4OU9OV0ZzeWZ4K2d4bWNmWHJGVXJoNTVIWHNKRGlZbUplSGg0RUIwZHphUUo0NUJrQ1I5SG5qQXhNUkdUaHdmZmIvcU9IVHUyWVRRYVNVbEpJU2twQ1pQSmhOVnFaZTZjV2R5NGNTT0h3bFoyZUhsN2w4dGkxQndHVGhFZEZBT09YamFjdFFKRlVSUkI3Mnh5RXdUaFAySFlhdGFzU1VCQUFOT25UK2ZNbVRPY1BYdVdYMy85bGFKRlhZdm5qUnRuQ3BVRUJBUlF2bng1L3ZqakQ1NTg4a2xTVTFQcDFxMGJiNytkS1pSc3RWcGRqbkZpeUpBaHZQbm1td1FHQnRLMGFWTmVmUEZGdW5idG11dll6R1p6RGpVaFVDWGRIb1NNbXhzUFArclZiOENjV1RNQWdmcjFHeEEyZlVhQmpwTmxtVEdqUjlIbXhiYlVyOThBVUtVaHIxMzdtK0ZEQjZ2N0tESmUyZlFLS2xXcVRLVktCZGRLUFgzNkQ0Nk5HRXJvQjRNNCsrZWZYTXlTaHBrMFlSd0JnWUdFVFovSnF4MWVkakdJQXo4WXdJc3Z2a1NIanE4eVl0alFmTTloTUJncVpNdXQ1Y3l4b2FDQVZrRFFaMjZnNm4vaFFqaDQ4Q0RObWpXalNaTW1ORzNhbE5kZWU0M3c4SENXTGwyYTcxTklyOWRqTkJvMXJjMDFhOVpRdmJxcnJjL04yMnJidGkzWHIxL24rKysvNThjZmYyVDQ4T0hNbnorZnc0Y1BheTY2RTZWS2xTSWpJNE9FaEFSOGZYMEJzTmxzeE1iR1VySmtTZmRkN0VaT3cxYXZQblBuTFNUOFNEaWZyMXlCMFdoa3pMZ0p0enh1MmRMRmVIaDQwTGxMNWtQV1pyTlJyRmd4VnF6ODRxNk1yWERod21Sa1pCQTJmU2FGQ2hYaXhJbmpGSFpjMTRVTEYrYVpSbzAxa1hOVmh0S2JRb1VLa1pTWXlJU0pVM2o4OGNjNWUvWlA3VjdJQzRJZ1ZNNlNXOHVhWjh0ZVFGQ2NCUVFSRUtLaW9pb0Jwdi9DaGJCZ3dRTHExNi9QMXExYkdUeDRNQzFhdE9ER2pSczVKUFd5NXN1U2s1TzVlUEVpMWF0WHAzejU4cGhNSmk1Y3VFQ0ZDaFcwMTZKRmk5aXlaVXV1SHR2NTgrZnAwcVVMcTFhdFl2LysvWnc2ZFlyampseERWdFN1WFJ1ejJjemV2Wm1xNS92MjdVTVVSWjUrK21uM1hleEdEa3lhT0o3d0krRTBiLzQ4dzRhUDVOQ2hneTdTa2JsaDM3Njk3Tm05bStFalBuYVJxcXhRb1FKSlNVbjhzbWUzbG0vN2ZwT3JUdWo1OCtmWXVQR2JBbzN0eVJvMXNGcXRtRXdtSkVuaTRJSDkxS3lsYXBuV3FsVmJHK2ZSMzM0aktLZ2NScU9SWXNXTFU5alhGNVBEc2RpM2Q2OTJURDR3TFY2NlBEQVhnNmIxc0FGWlBEWkhqczNiMjd2Q2YrVkM4UGYzWitmT25adzhlWktTSlV1eWJ0MDZsaTFiaHArZm44dCs0OGVQcDNIanh2ajYraElhR2tyRmloVnAzYm8xb2lneWNPQkF4bzRkUzdGaXhXallzQ0hyMTY5bnhvd1piTisrUGNmNXpwNDlTNTgrZlpnM2J4NEJBUUdzV0xFQ2IyOXZxbFJSQlcwbVRacEU3ZHExYWRXcUZWNWVYdlRvMFlPK2Zmdmk0K09EMFdpa2QrL2VkTy9lL2I0cG5ydng3MExuemwwSkM1dkMydFdya0dXWmdZTStRaFRGZkJYZTVzNmVTVVpHQm4zZTY2Vjl6dHo1aS9EeDhXSFNsR25NL0hRNml4WXV3TlBUazRIWmhKU1BIVDNLaGczcmFkKyt3eTNIVnJac0VPM2JkK0RkWGoxUlVIajIyV0JOTy9qOVB2MllQR2tDNjc3K0NyUFp6SkJodzdYSWFQaUlqeGszYmpRMnE0M1NwVXN6ZU9qd1c1NnJRb1dLandIWGMvZllIRG9oR3Jla2dpQ0tvb2ZGWWhtZzErc24vMXQvL05EUVVQNzg4MDkrL1BGSFltTmo2ZG16Snp0MzdzUmdNUERVVTAveHhodHYwTE5uVDY1ZXZZcXZyeTgrUGo1TW5UcVZsU3RYOHZmZmY5T29VU01XTGx4SUdZYzZ2YzFtWTh5WU1YejIyV2ZFeE1SUXVYSmxQdm5rRXpwMDZPQjRHdFhpalRmZVlPalFvVVJIUnpOZ3dBQzJiOTlPY25JeWRlclVZZHEwYVRScTFBaFEyejI2ZGV0R1dGaVlsazhMRFExbHpabzFpS0pJeDQ0ZG1UMTdkcTVocmh1UER2YnMyZU5XZDhzSGNiR3hZVFZyVk4rT3VtYlUrVW9UQkNFRFZTbGVFa1ZSWFROcU1DaUNJQWhtdTkwK1V4VEZYdTdwYzhNTnQyRjdHSkdSbnI2NllvVnlYMlF6YktsWkRKdGRFRVJacHhNVnZjR2c2QjNKdWFCLzZ4ZWVOMjhlZmZ2Mi9VLzhlSkdSa1RtcXR3V0JMTXRjdm5LVnVMZzRKRWtpSS8zUlhIdnFZVGFqMCtudzl3c2dLS2dNK1JHbUtvcmltTE5ZN1BaN04yY2Vaak42dlo0QS93Q0Nnc3JlY3YvcjduN0dYQ0ZKVW5FY1RibFpYNHFpcGhIVjdnNFpXUWJKTGlFSWd1QXB5L0pSb0xKNyt2NTlzRmlzbkRoeEFwMWU3OVlWQlZKVFUwaEpUa0tTN05TcVdRdWowWkNyVWZ2MTE5OFFkYnI3b3l2cUdKTXNTOVNyVzlmdHNkMEJGRVU1WDZaVThRL0lKSjEwRWs4NnFjTHRqbkJVMGV2MWlyTzZVTlk5ZGY5T1JFUkdvTlByM2F3UURuaDVlVk8wV0FsME9qMDNJbTdrdXM5Zmw2OGc2blQzYmM2Y1l4SkZIVmV1WEhWZnRIY0FRUkJLWi9QWXN2L2ZwVmxYUEgvK2ZGSEFuYm4rbHlJMkp0Yk5DcEVMdkgwS0VSTVRtK3UydUxpNEJ6Sm4zajZGaUlsMWt4M2NhVlQveWVneDN1VFo4dUhVYlFGUTBBY0VCQlIzejltLzFUMi9jMWFJUjhGelMweUl5M1hiZzVvekx5OXZFdVBqN3VqWXBNUkVMdjkxa2RSOHRIcTl2THdKS3ZjNGhRb1hmbUR6ZmkvSFdiVkt0VUpBVEM3ZW12T093Tm42b1RlWlRFWHYvZzNucGpndUtIeDhDcUhUaVJRcFVvVGl4Vy92R1NNSWtKN3VKcW5NQytsNUVIZyt5T0xLbmY1ZWYxMjZRRnBhL2dLOXFha3BYUDdySWpWcVBUaGF4WHM1enNlS0ZDbVUzVnR6RkE4RTEzQlVVZlE2bmU2dUdqWTN4Zkh0SXpVMWhSc1JrZHlJaU9DcE9uZjNvdHkrN1NkV0xGOUdWTlJOU3BRb3dlZGZydUg4K1hQMDZKN0pRREowK0VoZWVLR04rNGQ0aUhFclk1SDFXdnF2anJOUW9VS0ZzaGd3WjNPdTRGZ01ueldTRWZTaUtENTJONzlZVm9wak53b2Vvbmg1ZVJOMU00TEl5RWlLRlN0MlZ6NzN4bzBiVEprOGtUSGpKbEN2WG4yU2tsVE9yd29WS3JKOTUyNEEzdW5SN1o1OXIrWExsdEx1NWZZdU5FM09jYzJhTVoyVEozL0hhRFRTL1BtV3ZQZCtINDFWNHRxMWE4eVpOWU9UcDA1aU1wbG8wYUlsdlhxL2w0TjE0bTdpVnVkOHJuRkREQVlEZ2lBU0ZCUkU5eDQ5YWRTb3Nmdml2WTh3bXowS3VScTFIQy9IMGtrRlVSVEZnTHQ1Y2pmRjhUOHdjTjQrM0x4NTg2NTkzdGsvenhBWUdFaWpSbzB4R28wRUJnWTZRbGdCaHdhankxckN1NDNQVml3akxpNW5Bbi8wcUpHVUxGV0tqZDl0WnZHUzVSdzZlSUJObTc0RjFKNjhvWU0vcEZMbEtuejczV2JtekpuUG50MjcyTGpobTNzMnpvS2VjKzc4aFh5L1pTdmRlL1FrYk9wa05ueXovb0ZjSjRJZ1VLZE9IVnEwYUVIejVzMHBVZUwybklpREIvWVQwclVUcjcvNkNqTStEZFBXZE5wc05zS21UU0dreTF0MEQrbkN2bjJaYTVyelk4UzlkNUZNS3B1Kys1YWhnMVhhSllQQm1OMWpFM0VVRHJKR2pGYXJGVkVRaEx1NlNOR2R6UDVubnB0ZGt2N3g1eHcvZm95WDI3WmgydFRKUkVaRzhuTGJOcnpjdGcwclAxdFI0TTg0ZFBBQW5kOTZnK2JOZ3VuUlBZUS9UcDF5MmI1bjl5NUN1bmJpaFZiUDA3MWJGdzRkUEtCdDY5ZjNmVjV1cTRhMkh3em96OHR0MjlEMy9YYzFJeEljM0pTdUlkMHdtVXdVS1ZxVXV2WHFjYzVCU2hBWEY0ZWZ2eitkT25mR2FEUlNxblJwR2pWK2xqLy9QSFBQNXYxMnptazJtMm5VcURIRGhvOWt5ZUtGK2RKYTN5dVVLMWNPblU3SHRtM2IyTHQzTHpWcjFzUmdNT1Jxc0xQL1B5TWpuYWxUSmpGeDBsUldyMTFIVEV3TTIzNzZFWUN0UDJ3aEl5T0RsVitzWnZxTVdjeWUrYW5tNWVmRmlGc1FQUEhFRTlwRE5iOHhadjA3SmlhR2QzcDA1OEtGODlydm9OZnJDK1hocVdrdldaYlI2L1dJZ04vZG5QUTdwVGgyUTBWSzhqOHZ0TlNxVlp0dk4yMWhRT2hBU3BZc3hiZWJ0dkR0cGkyRWRPdGVvT012WHJqQXh5T0g4MTZmdm16WnVvMVhYM3VkZ1IvMEo4cmhUVjY1Y3BueDQ4WXdaTWh3TnYvd0V5KzkxSTRSSTRacGFsdHo1czduMjAwcUU4cU1XYlA1ZHRNVzVzNWZDSUFvaW5UcTNBVmZYL1d5Kyt1dlN4ell2NThHRFZSMms4REFRT2JNblkrSGgxbTcwSThmTzBhTkdqWHYyWnpmeVRucjFXK0ExV2JURFBMOVJHQmdJRGR1M05BOEZGbVdjNUE4SERrU3pvaGhRN0RaYk1URnhmRk9qKzdFeGNVUkVSR0JyNjhmSlV1V1JLZlQwYXBWYXc0ZlBnU29yTGZQUHZ1YzQzY1NNQmlNbkR0M1Z0dVdHeU51QVhOamVaSlZMbHU2V0tNR1Azbnlkd2IwVjFjUitmcjY4c1dxTllSMHkrUkUxT2wwdVlXaXVJYWhxa2NyQXZjOGJodzBNSlRYT3JZbnBNdGJkTzM4SmxzMmY2L2xOVjdyK0FydDI3MUk5NUF1OTNRTTNVTzZjUEhpeGRzNlp0dFBQL0pheDFkNG9YVUxacy9LbStCdng0N3RqUDVrNUgvR3VHN2V2SW5nSmsxcDFLZ3hKcE9KVnExZm9FclZxbXh6Q0hrRUJBU3lmTVhuVkt0ZUhWRVVlYWx0TzJ4V0szLy9YZkRtMHo5T25hSkY4NmFFZE9sRWxhcFZlUzY0U2E3N0xWd3dEN09uSnkrMGVmRytmZitDbkZNUUJQejkvRWw1QU1sNm85R0lKRWtFQkFUUXVIRmpaRm5HWkhKbEhhdGJ0eDcrQVFHTUdmMEpnd1lPb1AwckhmRDM5NmRZc2VMRXhjVnk2ZElsN0hZNzRlSGhwS1NvMzhISmlIdnExRW1HRFA0UW84bElZbUtpdHMzSmlEdDN6aXlORWZlZjRzMjNPck5yMTgvTW1UMlRjV05HMDdkZmY2ZDNsaU9uS2dpQ2R6NjVOUmNqcHhjRTRiNGt4RDRhTW94NjllcVRtSmhBcjU1dlU3V2F5bjJXRjczeHc0QVdMVnZSb21VcnZ2NXFMWkdSRVkrTTF4Z1pHVW1GQ2hWZDNpdFRKa2liQTI5dmIzWnMzOGI0OFdOSVNVN0pNNnpJRDlXZmVJSnRPM1lSRVJIQkp4K1BZUG15cGZSOHg1V0g0Zk9WbjNINDhDSG16Sm1QWHErL0w5KzlvT2RVRklXNCtEaThIMURheFJtTzd0Ky9uMXE1OEprSmdrRHYzdS94eHVzZEtWT21yR2FreldZenc0YVBaUEtrOFk3ZnRTeWVack4yM1BmZmJ5STlQWjFKazZjeGUrYW5McCtaRnlOdVhtalZxaFhlM3VyOE9QT0FwMCtmNXZUcDA5byszdDdldlB2dSszd1EybzgzMytwRTVjcDVMeXNUUmRFN256QlVNMm8ybXcwOWNGODVxUXNYOXVXSkoydHc4Y0o1eXBjdm4rZCtpWWtKVEo0NGdhaW9LT3gyRzUwNmQ5WFlPTStjT2MzTUdkTkpUMHVqU05GaURCMDJRb3ZoZCsvNm1kV3J2OFNTa1VIMUo1N2tnNEVmYXZtSFhUL3ZaT3pvajBsUHo2QnZ2LzZhbC9ETituVnE4bHBSYU5yc2YzVHIzdU9XMytQSWtYQStuVDROVVJBcFdhb2tudVpNdHR6OHh0QzhXVEQ5QjN6QTBpV0xVQlQ0ZnN2V2g4NndGUzFhbE1nSVYwTisvZm8xYXRkV1cxSDIvcktIVlY5K3dZeVpzeWxWdWpTZ1ZnMXp1N215R3p0TFJnWmJ0LzVBNjlZdllQTHdvSGp4NGpSdi9yeExvaHBnL2JxdjJiN3RKMmJObVhmZkdrNXY1NXhIam9Sak5CaW9WUG4rTDdHMldxM1k3WGFPSGozcURORnlhR2FrcEtUdzBVY0Q2ZHdsaEhObi8yVEs1SWtNSFRZQ1FSQjR1dUV6UE4zd0dVZnViSzVHUzErNGNHSE1aak5qeDAxQUZFVXNGZ3VGSGZPUUZ5TnVmdmp4UnpWMzk4d3p6M0Q1OG1VdGZIWkplMXk4eU9SSkV4ZzdiZ0lybGkrbFROa2cydVR0S1h0bE0ySlpqSnFRTldSRkJEenY1NDhTSFJYRnFaTy9VNlZLL2t6azU4NmQ0My9ObjJmWmlwWE1tYnVBV1RObllMVmFzVnF0alBwNEJLR2hBL244eXpVODgwd2psaXhhb09WcjFxOWZ4NXc1ODFuNXhXb0FmdGl5V2Z0TUh4OGZWbjZ4bXRGanhqRi8vbHhBSmRiYnZIa1RDeGN0WmNteXovanR0OS9ZOWZQT2ZNZG1zVmlZTUc0TW8wYVA1Y3ZWYXlsVE9uT3A3YTNHWUxmYmlZcUtZdDAzMzdMK200MFB6SGpaN1hhTkJsMlJaZXgydTJhRTJyejRFbnYyN0NJOC9EQjJ1NTJmZjk3Skg2ZE8wcUpsUzBCVlRoSUVFSFU2RWhNVHRCeUpJcnV5RkJjdlVZSkRCdzlpczltSWpvcFN3eWlUaVM4K1g4bmF0YXV4Mld3a0pNU3pkKzh2MUtoUkl6TVUvbjRUMzI3Y3dNelpjKzhiQVdkQnoybXhXRGg4NkNDVEowMmc5N3Z2UHhDdGl1am9hSzJhYlRRYThmWDF6U0dJY3ZIaUJZS0RtL0pXcDg2TS9HUTBScU9KdURqWFZRK0hEeDFreDQ1dFdnOWpyVnExc2R2dGlLSklRa0k4Rnk5ZXBGTEZTdHEyM0JoeC95bCsrL1VJUTRlTm9FblRabnc2Y3c2bi96aVZnKzA2eTRQU25NMm9aWDJHdXBUMzlZRDVmdndZMDhPbVl2WXdZelFaNmRPM1A2VWRwSTU1b1diTldpeGZ0b1J0MjM1RXA5TmpzV1NRbkp4TVFudzgzdDQrVksybTZoRzgxTFlkVFpzMVUzK293NGU0OXZkVjN1MzlUcGFuaWs5bTNzSEI3bG0xV2pVdEVSNGVmb2pubjIrSjJlR092L2ppUzRTSEg2WnBzLy9sT2JhclY2L3cyR05GTk9OY3BWbzE5djJ5cDBCakFPZ2EwdTJ1WEJSM2l1d051bE1tVDJUSzVJazgzNklsSDM4eW1vb1ZLekZxekRnV3pKOUxaRVFFWmNxV1pXcllweFF0cXZiWHRYNmhEYWRPbmFSSDk2N29kSHJhdmR5ZWloVXJFWmR0dWREQWdSOFNObTJxK2lRdVU0YWx5MWRpTkJxWk1qV011WE5tOGRYYU5SZ01Cb0tiTk5XU3hKSWtNVzNxWlBSNlBXKyszdEUxVFB4eU5jV0szZjBWZ0FVOVo3OCs3eU1JS25Qc29BOEgzOVUrTmg4Zm53THZlL255Wlh4OWZUVlp4K1BIaitkSTVOZXNXWXVhTld0cCthcEJXWmh5NCtQajZOV3pCNlZMbDJiaXBDazhWcVNJOXJ1ZU8zZE95M2YzR3hDcWVhNTVNZUlXQkFjT0hNaHoyMnV2djZIOVB5QWdnSThHNXl2czRwRlBHT3F3Y0NLU0pLRUg3c3NkTnVqRHdScHRjRUd3ZHMwcTdEWTdVNlpPUnhBRXJYM0FhWjZkTUJnTStQbXBUMWliMVVad2s2YWEzRmgraWQrc0lWTFdWaTVCRVBKOFltVE5yK1RWTEZxUU1lVEhFM1kzMGJKVmExcTJhcDNqL1lvVksvSEx2dndGbWhzMWFwem5qV3N5bVJqNThTaVg5OTdwMVR2SGZ2VWJQTTNYNnpma2VMOUN4WXJNbkQwMzE4L1c2WFRzMlh2Z3ZocjZncHp6VnZOMU44YVFtcHBTb0ZZcDUrcWVPNFdmbnovcmNva1dzaHZBckFnTURDeXdRdGJkUkVCQWdGWmh6OFZXQ2RudGdTQ0FUcWUyZXp3NDF5RmZkenNHYng5dkJFSGcrUEZqSkNVbG9TZ0twY3VVSVRrNW1mUG5WV1gzbjM3Y1N0aTBLUURVcTErZm4zZnU1UHIxNndEczNMbURreWQvei9jOGRldldaL3UyYmFTbnAyT3oyZmhoeTJicU44aGZXS1ZzMlNDaW82TzFuRUZFbHR6Qm5ZemhuOEJzOXNTTjI1dWJCemxuZVoyN1NKRWlwT1d6cHRyVHMyQWhiMEgzdTFlNHgrTTA1dUtwQ1VvMnI4MFppdW9lMUNUa0owangybXV2TTNiTUtIN1lzb1hLVmFwUW9XSkZFaE1TQ0F3TVpNeTQ4WHdhTmcyTHhVTGdZNEVNR1RwQ0RRbXJWS1ZmL3dFTUhmd2hOcnVOY2tIbEdEeDBXTDVqZUtwdVhWcTJhczI3dmRTQ3diUFBOYUZwVXpXMDNmYlRqeXhkc3BpVTFCUmtTV0xmM3IxMDZSckNTMjNiTVhUNENFWU1HNEtmdno5NnZVNHJIdHpKR083WGsvNVJRbXBLY3A1ZXRmaUE1aXcxSlJsZEhwWFc0c1dMRXhFUlFmVE5DRHk5ZlhLTXJWejVDcmRjWU83cDZVVzU4ZzlXbCtrZWoxT1htOGVXVzk1TlVHNFZkOTBtamg0OVNwRmlibzNNTzBWVTVIWHEzTVpDK011WHJ4QWJGK2RlbTVzTk55TnZFQmdZUU5sY2NybVhyMXdoTnZiK3o5bk55QnNFQkFRUVZEYnYvSEpVVkJTUmtaSFk3WGFTazkyc09OblJwRW1UOWtBYUtvTnVFcG1pTGhZMDdRTkJ2dXZOUVc0UDRwODkwVyszWDZ0czJUSkVSMGNqbnRxUEFBQWdBRWxFUVZSeE0vS0dteHJjTVljcEtjbElkbnV1UmcwZ3FHeFpvcUx1MzV3NXh5UkxVcjVHelJtU0ZuRWs4OTNJRmRuRFRzR1pZeE1FUVYxMUlJcUNvQ2lLaExwRTRhNGdJaUtDeU1pYlBGYlV6Vjk1Kzk3YURVcVVLSDdiN0I2S292RFg1U3ZFeGNVaTJXVXlNaDVOamphejJSTlJweU13SUpDeVpVdmZjb0gvbFN0WGlZNkpRYkpMOTJ6T3pHWlBkSHI5TFQwMU53b0VXUkNFamtCcUZvOHRSUkNFVk1BaUNJSk5FQVM3S0lxS29DaUtGVERjN1hCVUVIVjRlWG5qNmZiY2JvazBoOWdIS0xjVmhycmh4aU1HbXlBSXIyY3hiTWxBc2lBSWFVQkdWc09tQis2NllhdFRwdzQzYjk3a1psUVV5VW1KYmdiZGZPRHQ0NE5CcjZkVXFaTHVFTVFOTi9LSHRhQTdPZzNiWGE4UkZ5MWE5STQwTXQxd3d3MDNDbWpZbEd6L2FoQ0JkUGQ4dWVHR0cvOENaQlRZWTd0eTVZcGJEY1FOTjl4NDZLRW9Tbm91M3BtaU9CUmRuSjFyaXFJbytySmx5NmE2cDh3Tk45eDQyQ0hMY21xVzBGTXpjTm5iUFFSQlFGUVV4VTE1NjRZYmJ2d2JQTGJzekpaS3R2OXJmK3RSZTBIY2NNT05CMy9qdXZWNDg0SGRiay9KWXNDVUxLR29ralVVbFdVWnZhSW9DZmRTcWNnTk45d29tRkZ6Ni9IbUQ0dkZrcHlieCtacXZ6SkQwYmhIYllKS2xTcEZ0V3JWY2hXajhQYjI1clBQUHJ1WFR4MUNRME1wVXFRSWhRc1hwbmZ2M3BvSWlodVBMckxxOGJxWEkrWjU3eVJsODlnVWNtbjFBTld3eFQ2S2szVG16QmttVFpwMDM4ODdiTmd3Tm0zYXhMcDE2OWkwYVJNN2QrNmtYNzkrN3F2MkVZZGJqL2ZXc0ZxdFNWazh0Vnp5YTRMS3JTaUFLRWxTektNNFNlWEtsV1BpeEltY09YUG12cDB6TlRXVmVmUG1FUllXUm5Cd01NSEJ3U3hldkppVksxY1NFeFBqdm5JZllkeXBIdStaMDM4d01MVC9mWEFFVGhNMmJRcmJIVXBsVG16YytBMGhYZDRpcEdzbmxpOWJxcjJmbjhEeWlSUEg2ZmwyTjdxRmRHYjBKeU1Mck0yYW5wNldqR3RUYnJicXFOTmZBOUZtczkxOEZDK2szcjE3VTcxNmRkNTU1NTE4R1hQWHIxL1BrMDgraWRsc3BucjE2aXhkdXRSbCs4OC8vMHlkT25Vd204M1VxMWVQc0xBd0YzSFl3TUJBUHZ4UVpkTTlkdXdZNmVucEJBY0hhOXVmZmZaWkFBNGVQT2krdXg5aDNLa2ViK1VxVlJrMVp1dzlIZHY4ZVhOWnRuUUpseTVlZERGQ1Y2OWVZY1A2OVN4WXRKUmx5MWR5NHNReGpod0pkeHlUdThDeTNXNW4wb1J4alB4a0ZKK3QvSkpTcGN0b21obTNRbEppVWw2aGFJNFZDUHFNakl5b1c2bk4vQmVoMCtsWXNtUUpEUm8wWU5HaVJiejc3cnM1OXRtN2R5K2RPblZpOXV6WnRHclZpcU5IajlLN2QyOTBPaDNkdTNmbjRzV0x0R25UaHI1OSs3Sm16UnArK2VVWCt2ZnY3eUx3TVdqUUlHclhyZzNBOWV2WE1ScU5CQVFFYU5zTkJnTUJBUUZjdTNiTmZYZTdrUU94c2JGTW5EQ09tT2dvQkZIa3ZmZjYwT0RwaGk0a3JiNitmcXhZK1VWbXVtUElSOXk0b1RJNEp5UWs0T25seFpxMTZ3QlZGV3JPckJra0ppWGk3K2ZQNEtIRE5DMExnSFZmZjhXR0RldTEvUUY2dnRNTG85R29NVlU3OGZ1SkV6eFZ0eTZlbnA3WTdYYjhmUDA0Y2Z3NDllclY1OFNKNDN6d3dTREFWV0E1NnVaTlBNeG1nb0xLQWVEdjc4L1BPM2NVYUM1dVJ0MU1Mb0JSVXdEMEVSRVJFWG5Kei8vWDhkUlRUeEVhR3NxUUlVTm8yN2F0cG4zb3hJUUpFK2pSb3dlOWU2dDgvbVhMbHVYU3BVdE1uVHFWN3QyN3MzRGhRcXBVcWNLMGFkUFVwMmZseXB3OGVaTFZxMWU3NU5TY1NFdEx3OFBESThjNFRDWlREdmswTjl3QStHcnRhbXJVcUVGSXQ3ZTVkT2tTOCtmTm9jSFREU2xWcWxTZW1yeVRwcWpYWTJKaUFyM2Y2YUhwYjFpdFZpYU9IOHY0aVpNcFhydzRQLzI0bFFYejV6RjZUT2J4Tld2VnlzRThuSmZ3a0ZOZ09UbzZta2tUeGlISkVqNk9QR0ZXZ2VVZE83WnBBc3RKU1VtWVRDYXNWaXR6NTh6aXhvMGJPUlMyOGc2N1R6dmJQZVM4UERWbk1DcldyRmt6aXR0WWcvVmZ3OWl4WXdrSUNLQnYzNzQ1dHAwNmRZcGx5NWJoN2UydHZVYU9ITW1GQ3hlUUpJbmp4NDlUdjc2clFFMmpSbzN5UEpmWmJNNjFFbXV4V0I2SWpKc2JEei9xMVcvQXpoM2JXZm5aQ2l3WkdRVVdWSkZsbVRHalI5SG14YmJVcjk4QVVLVWhyMTM3bStGREI5TTlwQXVyVjMrcHFiVTVVYWxTWlY3cDBMSEE0enQ5K2c5R2poaktPNzNmcFdsVFYyVzNTUlBHY2ZueVg0Uk5uK21pVkorWW1NakFEd1pRclZwMSt2VWZVTkJUWlV3WVB6WXRuMUJVTTNTQ29EYm9BbHdGS2oyS0Y0Nm5weWNMRnk2a1pjdVdiTnpvcXR4anQ5c1pOR2dRYjcvOWRvN2pSRkZFcjlmbkVBVE9MMTlYcWxRcE1qSXlTRWhJd05mWEYxQlZxMk5qWXlsWjBrMm43a1l1aHExZWZlYk9XMGo0a1hBK1g3a0NvOUhJbUhFVGJubmNzcVdMOGZEd29IT1hydHA3TnB1TllzV0t1WVN0L3dTRkN4Y21JeU9Ec09rektWU29FQ2RPSEtldzQ3ck9TMkM1VUtGQ0pDVW1NbUhpRkI1Ly9ISE9udjFUdXhmeWc2SW9mMmN6WUhJV3p5M24vYWtlbzF4NWxDK2VGaTFhMExselovcjI3YXVKQ0FOVXExYU5reWRQVXFGQ0JlMTE0TUFCWnMyYWhTQUlQUG5ra3h3NWNzVGxzN0wvblJXMWE5ZkdiRGF6ZDIrbTZ2bStmZnNRUlpHbm4zN2FmUmU3a1FPVEpvNG4vRWc0elpzL3o3RGhJemwwNkdDT2gybDI3TnUzbHoyN2R6Tjh4TWN1emFzVktsUWdLU21KWC9iczF2SnQzMi82enVYWTgrZlBzWEhqTndVYTI1TTFhbUMxV2pHWlRFaVN4TUVEKzZsWlM5VXl6VXRndVZqeDRoVDI5Y1hrQ0cvMzdkMnJIWk1mSkVtNm5zMm81ZUd0cWYwZWVrQ1JaZmx5WG9vK2p3cG16SmhCMWFwVlhYSmRRNFlNb1ZXclZvd2VQWnBPblRweCt2UnArdmZ2ejhDQkF3SG8yN2N2czJmUFp1alFvYno5OXRzY09uU0lCUXNXdUlTVmt5Wk5vbmJ0MnJScTFRb3ZMeTk2OU9oQjM3NTk4Zkh4d1dnMDBydDNiN3AzNzM3ZkZNL2QrSGVoYytldWhJVk5ZZTNxVmNpeXpNQkJIeUdLWXI0S2IzTm56eVFqSTRNKzcvWFNQbWZ1L0VYNCtQZ3dhY28wWm40Nm5VVUxGK0RwNmNuQWJEcWl4NDRlWmNPRzliUnYzK0dXWXl0Yk5vajI3VHZ3YnErZUtDZzgrMnl3cGgyY2w4Q3lYcTluK0lpUEdUZHVORGFyamRLbFN6TjQ2SzNGbDIwMlcwUXVIcHVpcXUrNWVtMkNnQ0lJZ3VDZGtaSFJ6MmcwVG54VUxwWlNwVW9SR2hxcXRXRTQ4Y1VYWDlDMWExZFdyRmhCdDI3ZEFGaTFhaFVUSjA3a3dvVUxGQ3RXako0OWV6Snk1RWp0U2ZqVFR6OHhjT0JBTGx5NFFPM2F0V25Rb0FIcjE2L1hkRVVEQXdQcDFxMGJZV0ZoV2o0dE5EU1VOV3ZXSUlvaUhUdDJaUGJzMmJrV0ZkeDRkTEJueng0ZXIxakZQUkY1SUNZbTV0UGFOWi80QlZkYThCUW5MVGdxYmJna2lxS3MwK2xWdzVhVWxOVEcyOXQ3clh2NmJnOG5UNTRrTFMyTkJnMGFhTytOSGoyYUgzNzRnZkR3OFBzMkRsbVd1WHpsS25GeGNVaVNSRWI2bzdsRXk4TnNScWZUNGU4WFFGQlFHVVJSekM5bjQ1aXpXT3oyZXpkbkhtWXplcjJlQVA4QWdvTEt1ZzNiSGVMc24zOE9hLzYvSnFmSktlU1NEamlrOTBSSkZFVlpyOWNwZWtDSmo0Ky8rQ2owc2ttU2ROdnlkdm5kR0JjdVhLQkxseTZzV3JXS1dyVnFjZkxrU2ViTm04Znc0Y1BKalBjTGpzakl5TnVtVTdkWXJKdzRjUUtkWG85UG9jSnUrYjNVRk9JVDRvbjVMWnBhTld0aE5CcHkvZTErL2ZVM1JKME9iNTk3UDJlcHFTbkV4c1VSSFJOTnZicDE4OTMzdXJ1Zk1WY2NPbmdnbHN5Q2dWWTRjREI3T0VKUkJRVUZXWllSQkVId0JJei9aKys3NDV1by8vK2ZkNWRjZHZlbXBZVzJERkdnU0FFL0ZCRi9iQnpnRjBVRlJDeFlrQ0VnSWhRVUZHUXJRZ3NpVTVDbElHSlpBckpreWlwWWhteVEwcWJwYnRPUmNYZS9QMjQwU2ROU29HWG05WGhFYWRaZDNuZjN2TmQ4UGxtVzFRTlF1SmJ3N216cTFLbFl2SGd4MHRMU0VCd2NqTGk0T0l3ZVBicFNiNkU2N1dHSi96N3F4b3NUZXlFc3RMeVhkTzM2RGVUbTVqNFV3V1FmYjIrRU9wSGhjM2xzbGQrL1Eyb0Y5QUV2WTJCMENFVkxBSmdGb1dTR0pFbE9KcE54Sk1xU2NSZGM2M2YzRmg4ZmordlhyOE5rTXVIcTFhc1lNMmJNQXdNMUFNak95bllOVHpzeHJjNE5XVm5PK1IxeWNuSWV5cHBwZFc3SXluYk5CTjlEcXVVaTdGczhiRnM5N0lzSElvT3U2SjJ6TEh2ZXRZU1BsM0hjdlE5UFArbW0wV2pCc2t5RktZbUhzV1lhalJhTWxYRWRuTHMwaThWeUZlWDcxeHo3MkhoMkR3SGNaQVJCY0J6SGNWYXI5WHhGb3hNdWV6U05JSUNTRWhlWFcwVldVZ0hQM2NNc3J0enI4U3JJejhlTjYxZFJWR1NzRkRqRDZvVER6ZDM5b2YyK210aFBvN0h3cGhOQUsrZXhFVVNaN29GTWZLR2twT1NjQzlncTg0NTQybWFEd1FBcnc4QllXRDIwelZxdERqSzVESDYrdmdnTURLejIvZDYxY3dlV0wxc0tneUVEUVVGQldMbHFMUzVmdm9UWS92Mms5NHlObjRDdVhidTVEdklqYk5ldlhVRnhjZVgwUGtWRlJ0eTRmaFdObXpaN292Yno5dTIwMnc2QXhnQmdoYUpCdVljSWJBREFYYnAwNlZ4MGRMVHJES29BMUpLVGt3R0NoRWFyNDJtYkE2cnYrNHVLakVqWFp5QTlQUjNObWxYZlNabVdsb1laMDZmaXk4bGZJenE2QlFvS2VHcWNpSWhJN05xOUR3QXdNUGI5R2x1M1pVdVg0UFh1UGV6WVRNVDltanZuRzZTay9BT2FwdEcrUXljTS9taUlOSHlkbXBxS2hMbHprSEkyQlFxRkFoMDdkc0tIY1lOUmswM2tkOXJtaXpFdlFDNlhneUJJaElXRm9YL3NBTFJ1SGZQQXpzRTdnWVh0dWZRd3JTYjJjLysrdlJrQ2FERWlxTmw3YmJ5WEJsdVZLaEhsV3Jac21RWGdzZ3ZHeXB0ZXJ3Y0lFbjcrZ1RXU205Rm90UER6RHdSQUlEMDl2ZHErOStLL0YrRGo0NFBXcldOQTA3VEVFMGNRQkJRS0JSUUtCV3BTNytMSDVVdVJrMU0rZ1Q5cDRnVFVDZzdHYjc5dndhTEZ5M0QweUdFa0pXMEN3UGZralIwekd2WHFOOENtMzdjZ0lXRUI5dS9iaTk4Mi9scGorMW5WYlNZdVdJak5XN2VqZit3QXpKNDVIUnQvM2VDNk9HcmVxYmd5YzhhMGtzckNVSUlRUWxIWWg2SVEzc0N5TEh1S0pNbEkxM0xhbThHUUNZMVdWK1BiMGVqY1lEQVk3anNrUFgwNkdaTyttQUN6Mll6aTRtSjBmNDBQTTN1ODBSUDkzdTlmcGU4NGV1UXdFaFBtUWE5UFIyaG9HRVo5OGlrYVBmdXM3VjBVeTVZdFFhYkJBUCtBQU1URkRVYXJGLzRIQUJnMjlDUGNFaGhUUjM0OEhESVpoZURnRUNRdVdBaVdaZEcyYlR0MGUrVVZLQlFLK1BuN28zbDBOQzVkdkFpQXIxaDZlbm1oZDU4K29Ha2F3U0VoYUIzVEJ2LytXM05GKzd2WnBrcWxRdXZXTVpESFQ4REVMeWFnVStjdWp4MHpDOE13T0hyMENMWWsvWTRoUTRjak9DUUVBRDhrUC9lN2I1SHl6eG1RSklYWWdSOGlKb1luUXMzTXpNUzBxVk9RblowRm5jNE5ZejRiaTlxMVF5dmREa0VRaUlxS2dvK1BEMWlXeGZuejU1R1dsbGJsL1Z6eDQzTDhzWDNiT1dkaEtBQ1c0emkyTEw5R2NDQUl2a0c5b0VBcUhnQUFaN0ZZa2hVS1JTOFhsTm1ibGJFK2tDcWFScU9Gc1NEdnZyK25hZE1vYkVyYWloMS9iTWZLRlQ5aTlkcWY3K3J6VjY5Y3dlY1Q0akhwcXlsbzNqd2FlL2ZzeHFpUncvSFRxclh3OC9mSHpaczNNR1h5bDVnN2J6NGFOR3lJVGI5dHhQang0N0I1eTNhbzFXb2tKQzZRd3JjNWMrY2hNcktNT0lZa1NmVHUwN2NzSjNQOUdnNGZPb1NQaHZDMFVUNCtQdExuUlcvcWRISXlYdS9lbzhiVy9WNjJHZDJpSmN3V0N5NWR2SWlvWnMwZXlmT1daVm1wOWNqMjN4OFBINHBhdFdyaHdvWHpZR3dxeDl1M2JVVnBhU2xXL0xRR09UazVHUFJoTEJvM2JnSTNOemVKRWZlVlYxL0RpUlBITVdQYVZNei8vb2RLdDErblRoMVFGSVdkTzNkQ29WRGc1WmRmUm1abUppd1dpOU45dFAwN0plVWY3TiszRjdObWYzdmxoVmJSam1Hb2JZNE5Jb0FSQWpocnRWcSszVU5Nd2hVVUZKeHl3Vmg1cTY1Q1FaVzJaVFErOU4rN1pVc1MycjdVRHExYngwQ2hVS0J6bDY1bzBMQWhkZ3A4OTk3ZVBsaTJmQ1dlYWRRSUpFbmkxZGRlaDhWc3hxMWIvMVY1RytmT25rWEg5dTNRcjI5dk5HallFQysyZmNucCt4WitQeDhxdFJwZHU3M3l3SDUvVmJaSkVBUzhQTDFnTERJK2t1ZnM4ZVBITUg3Y1o3QllMTWpKeWNIQTJQN0l5ZUVGNmI2ZE14Zmo0aWVVdTFtZk9YTWFiZHE4S055QUNNamxOQzVkdWlpOTl1S0xQS1c5TFNQdW5XNFlvb2ZHY2Z4RWdLZW5wOTE3bGk1WkpGR0RwNlQ4ZzQrSDh6ZTRLNWN2b1dsVUZHN3hycit0dDhZNENVZkJjWndFY0hJNWJkZWd5NzMxMWx1bndIZjJ1cXdTTzNQbU5EcDFlQmw1ZWJtU2g5T3Y3N3RQVkU0eE1OQytLNzkyN1REbzlYeitUNnZWNHVUSkU0ajdNQmE5MyttRjk5L3JJOTF0cTJxTm5uMFdPLy9jaTUvWGIwUjZlcnFkRUlob0sxZjhpTC8vUG9xcFU2ZFgyeWpjbmF5cTIrUTREam01T2RBK29qMkV6WnRIdzh2YkcxOU8rZ0tmalBvWVBkNzRQNGxCNWs2TXVHZlBwdUN6TWFOQksyams1K2RMcjRtTXVJa0pjeVZHM01xTXBta3dEQU52YjIvRXhNU0FaVms3d2trQWVPZmRQdGk3ZHc4UzVuMkh5VjlPd3RCaHZEQk4zZkFJbkR4eDNEaDB5RWNaRGlHb0hiQUpZRlpPMUlVVWtzY2NBSGIvL3Ywc3gzRkhYZEIxWnlzcEtjR2ExYXVmeU4vbTcrOFB2VU1SNC9idFZJa2IvOEJmKzdGNjFVLzQvUE5KV0wzMjV3cERYWUlneW9HZHFiUVVtMzdiQ0ZNcFQ5b2NHQmlJOXUwNzRNeVowM2J2MjdEK0YremF1UU56dmt0NFlIMVpkN1BONDhlUGdaYkxVYTkrL1lkeWZEcDI3Q2c5SEZtY3hiV1BpeHVNVXlkUFFFRXJxdXp4YnQ2Y2hPWExsbUxhOUZrSWRjaWhWY1NJZTZkd3RHSERoamgwNkpCVWxiYzFyVmFMUVlNK3d2cGZma2E3bDE5Ry9mcjhXRm1USmszUnZrT25rd1pEUm1XZ3hwYk5pWXJCS0svelFNS2VONXkxV3EwdVlLdmlBZHU3WjdmazN0dmF2cjE3OE9IQUQ5Q3Y3N3VZT1dPYWxGTklTMHZEb0E4SG9QYzd2VEJyNW5RcHFmOVE4b1pXcTBTcXliRXNyRmFyQkVMZFhua1YrL2Z2eGJGamY4TnF0V0xQbnQwNGR6WUZIVHQxQXNBTGpCQUVRRklVOHZQenBGQ0NZKzNKVEFPRGduRDB5QkZZTEJaa0dnejhYVnlod0U4clYyRGR1ald3V0N6SXk4dkZnUU4vb1hIanhtV2g4T1lrYlBwdEk3NmJsL2pBZU9xcXVrMlR5WVMvang3QjlHbGZJMjdRUncrbGNKQ1JrWUdkTzNkS0QyZE1Na2FqRVo5K09ncDkrdlpEUUVBQVpreWZXaW03c3hoaWVuaDRZTmJzYitIbDVRV1R5UVIzQWVCRlJ0eGh3MGRBTHBkTGpMaVZtZGxzaHNsa3dzR0RCMkV5bVVCUlZEbHRqNnRYcjJMNnRLL3gxZVN2Y2ZUSVlXemR1a1Y2N2RWWFh6dnJKQXhsYkhOc29tTkdFSVNVcTNOemQ0ZE1LSTl5b2x0WFdGaDR6RVY2ZUdkVHF6WG8yS2tMVnE5YWlTNWR5Z0RxK3ZWcjJMQmhQUklTRmtDaFZHTG1qR25ZdG5VTFh1L2VBM1BuZklQMkhUcWk1NXR2NGRqZlIzSG80SUdIc3UrT0Rib3pway9Gak9sVDBhRmpKM3oreFNSRVJ0YkR4QzhuNC9zRmlkQ25wNk4yYUNobXp2NVc4dGk2ZE8yR3MyZFRFTnYvUFZDVURLOTM3NEhJeUhySXliVUgrVkdqUm1QMnJKbFl2bXdKYXRldWpTWExWb0NtYWN5WU9SdUpDWFB4ODdxMWtNdmxhUHRTTy9SN242ZGZaeGdHczJieVllQTd2ZXk1OTFldVdvT0FnT3B2WXE3cU5vY04rUWdFd1JNc2ZqSjZ6QVB0WTd0YnUzcjFDdHEyYllkM2UvZUIxV3JGM08vbUlDY25wMXhQb2EwMWJScUZjK2ZPZ2lSSjVPWGw0dXJWcTZnbkZINHFZc1N0ekRJek0rM0NYdzhQajNMQ0xTZFBITWZZY2VQeGZQUG1lSzV4RXl4YnVoaGR1M1lEUVJDNGR2M2F0WXBBRFE1VEJ5UkpRU2FqWURZREZFbVZUUjZJSHR0SEgzMTBkTjI2ZGZrQTNGM3dWYm05OFg4OTBhOXZiNGsxRkFEKy92c29VbS85aDBGeEE2VzdsbFpvRlVsSitRY1RCVVdnOElpYTc2cnAxTGtMT25YdVV1NzV5TWg2K090ZzVUcW1yVnZIVkhqaEtoUUtUUGg4b3QxekF6K01LL2UrRmkxYjRaY05HOHM5SHhFWmllL21KVHI5Ym9xaXNQL0E0UWQ2SEt1eXpUdXQxLzJhVGxlOTdVUk5talJGa3lZODViWk1Kc01uRGt5NXpxeEwxMjY0ZE9rUyt2ZmpxOWJEUGg0aGhlUVZNZUpXWmpkdTNJQ0hod2ZhdDI4UEFEaDkrblM1Z3NOYnZkNlcvdTN0N1kxUHg0eVZVbjV4QTJOVG5ZSWFRYkRnT0pZVGpDUkpqaVFKamlCSWFMVmFMamMzaC9mWWJIT2l2L3p5aTNYTm1qVUhTSko4eFFWZEZSdEJFRkNwVkhpalowK3NXbFVtam1FeFc5RDJwWGFTNUpsandya21HMkpkOXZnYVJWRW9LakkrME9GOHg5eG9aUURvNCtOVFpZVXMyL005T1RuNW52Yk5Zckg4cmRmcmJjTlFxd2h1QkE5dW5EUmxRSklnQ0JJa1NZQldLT0R1N3NFWER4eG1ybGlMeFhMUWRhcmRHZGdBb0VmM04zQTc5WmIwZkhTTEZ0aXplN2RFRGI1Nzk1OUlTZmxIY3VlM2I5dktoNE5DR2YxK1RhVlN1dzdHWGE3TncxeXppcmJ0NStlSFltTmhwYW1QcXFaSUhuYUtwanJlbDV1YiswOGxZYWhES0NxTVVwRWtTSUlFU1pKU1ZSUkNJbzRGd0dWa1pMaUFyWXFtVUNyUnAyOVp2cXBCZzRZWU52eGpqQjB6R20vMzZvay9kKzVBY0hBd0FHRDRpRkhZdWVNUDlINm5GN1p0MndxeUdtWWZ4VHU5eSt5dHlGaFk0V3dwK1pEV3JNaFlDS3FDRnBMQXdFQndISXZNakhTbisxYW5ic1Fkd1VDdDFxQk8zWWlIdXU3VnRaK25UcDY0NmdUVXhFZVptQXRCOElVc2tpZ0ROWklFb1ZLcENLdlZTckFzUzNJY1IzRWNKd2VnWUZsMkg0Qm5YWmNJY1BMVUtmZ0gzTC91NTRVTDUxR3JWakRjM055d1o4OXViTisyRmJObWYydjNuZ3o5YlR4L0Y1M3NOMjdjUkhhT2kwSFgwVEwwYWZEeDhVWm83ZkpzdFErTGRaaG45ZlZHbUJNR1hkRU1CZ1AwZWoyc1Zpc0tIMkJqK0tOa0hNZWRiOWV1M1NUd0lpMjI0aTFGQUlvSmdoQTBEZ2lHSUFpV0pFbU9vaWpRTk0zUk5BMkZRZ0VaSDU5S2VSOHBITFZhclh0a01wa0wyQURJcWluL1VWcFNpakdqUi9ISzcxb3RQaHM3cnR3ZFhTNlgzOVYzaG9iV1JtYW1BUm42TkdoMWJpN05BMk1oak1aQ01GYXJVMUFEZ0xEUVVCZ01EMjdOeEgxaUdhWlNVQk5EVWo4L3Y2ZjZHQllXRnY0Tko3azFBSXdZVllxdEhoUkZRUzZYZzZacEtKVktLSlZLcUZRcUVGcXRsckJZTEFURE1BVExzaFRIY1JRQU9pc3I2MlV2TDYrTkxsZ0QwdFBUa2E3UEVCZzRhczRNR2VrSURQQy82eUY0anVOdy9jWk41T1JrZzdHeUtDMTlPc2tuVlNvMVNJcUNqN2NQUWtORDdsaW91WG56UDJSbVpZR3hNalcyWmlxVkdwUk1ka2RQeldWbGR1TEVpVStqbzZPdkFpaEdtY2FCa1NDSUlzR0xNd3Y2Qmd4RlVaeGNMdWNVQ2dXVVNpV25WQ3FoVnF0QnVMbTVFV2F6V1FRMjIzQlV5YkpzTW9CYXJxVUdUcDFLQmtFUTBHaDFVRmZ6SGI2NHlBaGpZUUVBcmxyNTJGem1zc2N3REUwalNYS2tUUmhxQzJ3bEFFb0pnckRSRUtVNG1xWWxZRk9wVkZDcjFYd29TcElreHpDTWJTaktBV0FZaHRsQlVkUUhydVVHbWpXTFFucDZPZ3lHVEJRVzVGWGJzTHBPcDROTUprTlFVQ0FDQWdKY0MrMnlwOXBLU2tyK2duMDExQzRVZGNBb29ZZU54ekNTSkVGUkZDaUtLc3V4aVcwZndsQXBDNEF0TEN6ODA4UER3d1ZzZ2dVR0J0WUlmYmZMWE9ZeTNxNWN1WExHQWRTc0FLd0VRZGkxZWhBT2ZXd2lvSW4vSnNYeXFEaG5aZFBUeG5wNWVmMEo0TFpydVYzbU1wYzlpREMwU1pNbTF3WHdzam84R0Z0UUF3QmI3TElGTjRxaUlHTlpsdU00cm94dDBzWmpBOEJldTNadE8wVlJBMXpMN2pLWHVheUd3OUI5anA2YUE2aUp6TG1jR0YwS1BHOGN3ekJnR0FaV3F4VVdpd1V5aFVJaGtyUkowLzhDMkxFQUdIZDM5KzNlM3Q0dVlIT1p5MXhXbzNiOCtQSGtTc0pRaWRGRDlOQmtNaG5rY2ptRXdnSEV3b0ZXcXdWcEc1dmFjTE5KNGFpdnIrOUJ1RlRpWGVZeWw5VnNHSHF4UllzVy96bUFtZ1VWTUhvNDV0YWtFRlFtNHg4MkZRV0NKRW1PWlZsQ2lHRkZzUVRHYkRadnBtbTZvV3Y1WGVheUdyMjRvZGZya1pGaEFNTXdNQnFmbnNtRHdzTENmYkJ2eXBVZUhNZUpqYmtpd1NSWWx1VXNGZ3RzZEEvQWNad1Vqc3BzUFRiQmErT0lNb1VYRmdDVGxwYTJMU3dzYkl6cjFIT1p5Mm9PMUpLVGs4R0JrS1loL0oraTM3OXp4eDlubkhoclZ2RFRCbmJFa2lSSmNwUk1CbHBPUTZHZ29WQXFvVktxb0ZLcm9GRnJvTlBweWtKUlczQnpERWZyMXExN25tWFpuVS9hWWlZbUprS3BWRDdRYlZxdFZvd1lNUUorZm41d2QzZEhYRndjaW91TFhWZjJVMjU2dlI0Y0NQZ0hCRDExWTNGV3EzVnY3QWZ2WjlzQW04WEJheXNmaG9vRDc3WmhLQ1dEVEM2SFhDNEhLWlBKUkZEamJEdzJ6b2J0Z3dYQUZCY1hKN2xPdi91M2NlUEdJU2twQ2V2WHIwZFNVaEoyNzk2TlljT0d1UmJtS1RlRElSTmFuZHRUK2R2VDA5TU9PUWxCTGFpNGYwMW94aVU1aWhTQVRjYm4xK1F5R2VRMFhSYUtPaFlSQ0lLd2EvMUlTRWpZUEc3Y3VNOEFoTGhPdzN1em9xSWl6SjgvSDZ0V3JVTGJ0cnlVMmFKRmk5Q3hZMGZNbURGRFVtcDMyZE5uRE1QY2s2ZDI0Znc1TEY3MEE3NzlibDZON3QrRkMrZXhkY3RtTkduU0ZCMDZkcEtlLysyM1g3RnA0NjhBUWFCdDIzYjRJSlp2b0toTVlQbk1tZE5JbVBzZHJJd1ZZYUZocWRldVg3L2c0SzFKWWFpSVA0NE51U1JGZ2lRZHZEV2hTa3JUZEpuSFpodUtpdUdvamRmR2pCOC92c1Jpc2Z6NnRKMXdhOWV1UlpNbVRhQlNxVkMzYmwzTW0yZC9BdTNac3dmTm1qV0RTcVZDZEhRMFpzK2ViUWRRUFh2MlJQUG16UUVBeWNuSktDa3BrVUFOQU5xMDRaVzJqeHc1NHJxNm4ySXJMQ3k0cDgvVmI5QVFFNy84cWtiM2JjSDhSQ3hkc2hqWHJsNUZVVkdSOVB4Ly85M0V4ZzBiOFAwUFM3QjAyUXFjT1pPTTQ4ZVBDWi9oQlpaWHJGeU45L3QvZ0JuVHBrcXBtR2xmVDhhRUx5Yml4eFdyNE9QcnQyUHZudDBXWjk0YVFOaFhSRVZ3STBsUXR1TlRBcWpKNUhMSVJkb2lzVHdxdkltaktJcGdHSVlqU1JJTXcwaDVOZ0RXVzdkdWJhcGJ0KzZJcCtWaysrbW5ueEFiRzR0dnZ2a0duVHQzeGw5Ly9ZWGh3NGREclZaandJQUJ1SHIxS3JwMTY0YWhRNGRpN2RxMTB1dTJ5a1U5ZS9aRWJpNnZQM3I3OW0zUU5HMG5xQ0dYeStIdDdZM1UxRlRYMWUyeWNwYWRuWTJwWDA5R1ZxWUJCRWxpOE9BaGFObnFCYVNtcG1MVWlPR3dXTXp3OFBERThoVmw5UFRqUHZzVWFXbjh3RkJlWGg3VUdnM1dybHNQZ0ZlRlNwZzdCL2tGK2ZEeTlNS1lzZU1ra1I0QVdQL0x6OWk0Y1lQMGZnQVlNUEJEMERTTjJiTm0yTzNiUDJmTzRQbm16YUZXcTJHMVd1SHA0WWt6cDA4ak9yb0Z6cHc1alpFalB3RmdMN0JzeU1pQVVxVkNXRmdkMGJNN1ZZRzNaaVVJTWI5R2NBREJFUUJIa0NSSGtTUklrdUtrU0ZNTVF3VnZUYUZRbGdHYlRhN05OaHkxbXgyTmlJaTRZTFZhTjVJaytjYlRjRko5ODgwMytPQ0RENlFjV0dSa0pHN2N1SUhKa3lkandJQUJXTGh3SVJvMGFJQlpzMmJ4ZDgvNjlaR1Nrb0kxYTlaSTMvSDIyMlZpRmNYRnhVNkxGUXFGb3B3c21jdGNCZ0EvcjF1RHhvMGJvOS83SCtEYXRXdFlNRDhCTFZ1OWdPRGdZUHl5WVNNdVg3NkVxVk1tMjMxbTJneitmTXpQejBQY3dGaEpmOE5zTm1QcWxLOHdaZXAwQkFZR1lzY2YyL0g5Z3ZtWTlQak83clFBQUNBQVNVUkJWR1haNTVzMGJWcU9lZmhPQXN1Wm1abVk5dlZrTUN3RG5aQW50QlZZL3ZQUG5aTEFja0ZCQVJRS0JjeG1NK1orOSsyV1pVc1haemw0YXJiZ0pvU2g0UGlIV0RTd1NaL0p5cncxV21qV1ZhbVVJT1Z5T1J5OE5qZ094Z3U5SWd3QUppOHY3NmtKUjgrZlA0OFhYbmpCN3JtWW1Cajg5OTkvTUJxTk9IMzZkRG14MnRhdFcxZjRmU3FWcXB4S0Q4QnJWVDRNZlVxWFBmb1czYUlsZHYrNUN5dCtYQTVUYVdtVkJWVllsc1dYa3lhaTJ5dXZvVVdMbGdCNGFjalUxRnVJSHpzRy9mdjF4Wm8xcTJESXlMRDdYTDE2OWZIRy8vVzhpMnZrSENhTUg0dUJjWVBRcnQzL3N3ZllDZ1NXOC9Qek1Xcmt4L0J3OXpqa3hGdXpMUnBJYkI2MnVUV0tzZ2xEWlJSa01ybU50NmFBU3FXR1RBUTJzV3RYREVjcGl1SUVIVUhiMlZIR3g4ZG5EOE13aHdpQ2FQMmtuMVFxbGNycENTUCtYeWFUbFZNNnIweVVOamc0R0tXbHBjakx5NE9IaHdjQXdHS3hJRHM3RzdWcXVXanZYT1lFMktKYklISCtRaHc3Zmd3clZ5d0hUZFA0Y3ZMWGQvemMwaVdMb0ZRcTBhZnZlOUp6Rm9zRkFRRUJkbUhyL1ppN3V6dEtTMHN4KzV2djRPYm1oak5uVHNOZE9LOUZnZVdPblRwTDNxSldxNFdibXhzSzh2TXhlY3Ewb3krLzFPWjZKZDZhMkx2R2xuVnBDR0VvajFHU1F5YVh5VURMNWFBVkNpaVZLcWcxYXBBMFRVTXU5SDVVRUpMYUZSRUFXSXVLaW41K0drNnFoZzBibGt2cUh6NThHSUdCZ1hCemM4Tnp6ejJINDhlUDI3M3UrTGV0UlVWRlFhVlM0Y0NCTXFIa2d3Y1BnaVJKdEdyVnluVVZ1NnljVFpzNkJjZU9IMFA3OWgwd0xuNENqaDQ5VXU1bTZtZ0hEeDdBL24zN0VELytjenNXNFlpSUNCUVVGT0N2L2Z1a2ZOdm1wTi90UG52NThpWDg5bHZWZ3JMbkdqZUcyV3lHUXFFQXd6QTRjdmdRbWpUbHRVd3JFbGdPQ0F5RXU0Y0g4bkp6ZDFma3JRR0VIWnNIUU5oNGJHVjVOY3JPVzFOQXFWQkNyVlpCcTlGQ0pnSmJSVVVFbTdZUGFSS2hmZnYydng0NWN1UkRnaUFlZTAwRWxtWHh4eDkvbEh1K2JkdTJpSStQUjgrZVBmSHNzOCtpYytmT09IandJT2JNbVlPSkUzbXg0S0ZEaDJMZXZIa1lPM1lzUHZqZ0F4dzllaFRmZi8rOVhWaTVidDA2NU9ibVl2RGd3ZEJvTklpTmpjWFFvVU9oMCtsQTB6VGk0dUxRdjM5L1NUSGJaUzZ6dFQ1OTNzUHMyVE93YnMxcXNDeUxVWjk4Q3BJazdZb0grZm41ZUt2bkcyajIvUE1ZTzI0OEV1ZDloOUxTVWd3Wi9LSDBQWWtMZm9CT3A4TzBHYlB3M2JmZjRJZUYzME90Vm1PVWc0NW84cWxUMkxoeEEzcjArTDg3N2x0b2FCaDY5UGcvRFBwd0FEaHdhTk9tclNRZVhwSEFza3dtdzdqNENlZGZlNlhyMlFxOE5RdEJpS0FtRkEwSThONGFSWUlpS1U0bVZVTGxVdDhhcmFDaFZDbWhGaVlQaUo0OWV5SS9QeCtGaFlVb0tpcENjWEV4U2twS1lES1pDSlBKQkJzOUJKTGpPQmtBT1FCbFVWSFJBSlZLOWZYamZOSWtKaVpXMkJ4Ny9mcDFoSVdGWWRteVpaZ3hZd1p1M0xpQnNMQXdEQjgrSEVPR0RKSGV0MlBIRG93YU5RcFhybHhCVkZRVVdyWnNpUTBiTmtpNm9qMTc5c1NOR3pkdzRzUUpLWjgyWXNRSXJGMjdGaVJKb21mUG5wZzNiOTREbjRCdzJhTmwrL2Z2UjNoa2c2Zml0eG9NaG0rZmoycDhCRHo5dDZocllBUlBCVjVDRUVRcEQzQ0VsVmVob2ppWlRDWXFVSEcyVEI0YXJSWTZuUTZlbnA3dzhmRkZVRkFRd3NMQ1FQVHUzUnQ1ZVhrb0tDaEFVVkVSaW9xS1VGSlNndExTVXBoTUpzSnNOc05xdFpJc3l4STJlZ2owNHNXTHZXSmpZLzhBRVA2MG5vd3BLU2tvTGk1R3k1WXRwZWNtVFpxRWJkdTI0ZGl4WXcvVTY3eHg4ei9rNU9TQVlSaVVsanlkSTFwS2xRb1VSY0hMMHh0aFliVWw4bFJueG5HY3NHYlpzRnByYnMyVUtoVmtNaG04dmJ3UkZoYjYxQU1ieDNIWFBoc3pldUxhTmF1TEFKU2dUTmZBQ0Y1YXJ3U0FXUUEyUnBEV1k0VndrMU1vRmZ4Y3FFb0Z0VVlEblZZTE4zZDNlSGw1dzkvZkQ4SEJJUWlQaUlCTXBWS2hwS1FFTkUzRGJEWkRMcGZEWXJFNFZraHRRMUlHQUROdzRNQ0MzcjE3LzZSVUtpYzlqZ3M4Yk5nd0pDWW0zczhCd3BVclY5QzNiMStzWHIwYVRaczJSVXBLQ3ViUG40LzRlTjd0dnBOS2txUHA5WHI0KzkvZDZMUEpaTWFaTTJkQXlXVFF1Ym03NVBlS2pNak55MFhXeVV3MGJkSVVOQzEzZXV4T25EZ0prcUtnMWRYOG1oVVZHWkdkazRQTXJFeEVDODNhRmRudEo3eWZNVGMzZC9QYU5hdE5OaUdvV1FReUFCWU9ZQWdIYlFQeFB4ekhnV001c0N3TGxtVjVKZytCemNOcXRjQmlzY0JpTnNOc012UEFwbFFxVVZKU1lwZHJrOGxrc0ZxdG9DZ0tETU9BNHppSk5wempPQVlBczNuejVwL2ZmUFBOOXdEVWZkd1dPQ0VoQVFrSkNmZjFIVDE2OUVCOGZEeEdqQmlCdExRMEJBY0g0OU5QUDhYSEgzOHNYVUExYmVuNmRGQXltVXN3V1RDTlJndU5Sb3NNZlJyUzB0TVFGbHJlUzdwKzR5WklpbnBnYTJhN1R6ZHYvb2ZRU21UNGFnVUhQOG5lMnZXbFM1ZWNkQUExbTl4YVdZdEhHYUVrQmJsTTFBM2xxNTZpdDZiVmF1SHU3ZzVQVHkvNCtma2hPRGdZZGNQRDBhalJzeUExR2cyVVNpVVVDZ1ZvbW9adE1VRW9Jb0NpS002bW4wMXMvYkQyNnRVcnQ2U2taT1hUZkNIRng4ZmordlhyTUpsTXVIcjFLc2FNR1ZOcENGVGRscDJWL2RRT1QxZG1XcDBic3JLeW5iNldrNVB6VU5aTXEzTkRWbmJXVTN0TXNyT3preFl2V2xnSys0S0JDRzRTazRkdGl3Y2ZpcEtnWkJSSFVRN051TUtVZ1ZxdGtrRE8yOHNiTXBrTXBGYXJoVnF0aGxLcHhMMjBmcXhidDI0dHgzRXVodDJIY2dlODkrSHBwOEZ6WTFuRzZXc1BhODAwR2kwWUsvT1VucXZjeFc5bXp6cmhCTlRFZkZvNXdSWmU2WjEwbUFmbFI2ZmtBcWlwVkVwb05CcTR1Ym5CdzlNVHZuNitBQUNaVHFlVEtxSkN3Y0F1MXlhVHlUaXIxVW93RE9PMFlUYzJOamIvcmJmZVdxSFJhS1kvNFFjR2VyMGVCb01CVm9hQnNiQjYyRTIxV2gxa2NobjhmSDN2V3RxUElJQ1NFaGVYVzBWV1VnSFAzY01zcnR6cjhTS1NNMEhNVHdhdTVOM2JoaU04d0EySkFoZmxXeTIvb3lBL0h6ZXVYMFZSa2JGU0lBK3JFdzQzZDNka1pHUWtyZnBwUllXNU5UaHB5Q1ZKa3VQNzFtU2NURWJ4b0NhVGc2YkxkQTU0alFNZDc2MTUrMENoNExzTFpCNGVIaWdvS0lEUmFKU3FvV2F6V1FJM3E5VUttVXdHaG1IRXBKM1UweWJrMnF4dnZmWFdtaTFidHJ4QkVFU0xKeFhVa3BPVEFZS0VScXZqMlUyclVkdTRxTWlJZEgwRzB0UFRxMTBKZnRmT0hWaStiQ2tNaGd3RUJRVmg1YXExdUh6NUVtTDc5NVBlTXpaK0FycDI3ZVpDd2tmWkVwT0JxM24zL3ZrcmVTRG1KNE5iMHJGYWR1ZjZ0U3NvTGk2NjQzbDk0L3BWUE51NDZZbDNlcjJaN0FUVW5IcHJrSmh5YllmYzVaREw1SkRUZkRPdVFxR0FVcVdDUnNOUE0zaDY4WGsyMFdTZW5wN0l5OHREWVdHaGJROGJhSnJtcXd3T1hwc042NGVrMXJ4OSszWnpRVUhCais3dTdrOGtzT24xZW9BZzRlZGZNMkxKWW5MWm9FOURlbnA2dFlreXA2V2xZY2IwcWZoeTh0ZUlqbTZCZ2dLZUdpY2lJaEs3ZHU4REFBeU1mYi9HMW0zWjBpVjR2WHNQT3pZVGNiL216dmtHS1NuL2dLWnB0Ty9RQ1lNL0dpSU5YNmVtcGlKaDdoeWtuRTJCUXFGQXg0NmQ4R0hjNEhMRDJkVnBkOXJtaXpFdlFDNlhneUJJaElXRm9YL3NBTFJ1SGZQQXprSGlma0ROQnR5cXkrNEVhcmJnOXQvTm0xdXZYTGxzdllPM3hwVFByVkdRVVJRbmpVN0o1VHdkT0UyWGVXczZMZHc5UE9EdDdXTTNBa242K1BqQXc4TURPcDBPYXJVYUtwVUtDb1ZDeXJVNXk3YzV5N1Y1ZUhoc1psbDIyNU1JYkFaREpqUmFYYzNuWUhSdU1CZ00xZlo5Ri8rOUFCOGZIN1J1SFFPYXBpV2VPSUlnb0ZEd2Q3MjdiVW01Ry90eCtWTGs1SlJQNEUrYU9BRzFnb1B4Mis5YnNHanhNaHc5Y2hoSlNac0E4RDE1WThlTVJyMzZEYkRwOXkxSVNGaUEvZnYyNHJlTk5jZTlVTlZ0Smk1WWlNMWJ0Nk4vN0FETW5qa2RHMy9kNFBJazcyQldxM1ZYbTVnWExqangxQ3IwMWtnN2I2ME0xT1RDUEtoQ3FZUkt4Y3ZzdWJ1NXc4dlRDLzQyM2hvQWtINStmdkR5OG9LYm14dTBXaTNFOWcreFNtb0RiSndOaGJqZGlCWDRhWHlMd1dENDhZazhPSXoxZ1NTYk5Sb3RyRmJyZlgvUDZkUEo2UDVhTjh5YU9SMTZ2UjdkWCt1RzdxOTF3NG9mbDFmNU80NGVPWXcrNzc2TjlpKzNSV3ovZmpoMzlxemQ2L3YzN1VXLzkzcWphK2NPNlA5K1h4dzljbGg2YmRqUWo5RDlOVDYwSGZueGNIUi9yUnVHZmpSSUFwRzJiZHZodlg3dlE2RlF3TS9mSDgyam8zSHA0a1VBZk1YUzA4c0x2ZnYwQVUzVENBNEpRZXVZTnZqMzM1cXJUOTNOTmxVcUZWcTNqc0c0K0FsWXZHaWhIZkhpazJCRlJVVkkrbjBUeG80WlhUMGg2L1hyTzJFL0Uyb0hiQnpIV1RtT1l6aU9ZMW1XNVFoQTh0WktTb3E1VElNQnFiZHVvYUNnb0l5OVE2bUNScU9HUXFIQWd2bUpPSGp3TDZqVWFudGdDd29LZ28rUER6dzlQYUhUNmVEWS9sRkpsYlNjMXhZWUdIallZckVzZWRLQXJib0tCVlhhbHRGNDM5L1J0R2tVTmlWdHhjY2pScUZXcldCc1N0cUtUVWxiMGUvOS9sWDYvTlVyVi9ENWhIZ01IaklVVzdmdnhKdHY5Y0tva2NNbGlwdWJOMjlneXVRdjhkbG44ZGl5YlFkZWZmVjFqQjgvVGhLbFNVaGNnRTFKV3dFQWMrYk93NmFrclVoY3NKQS80VWdTdmZ2MGhZZUhwM0RpWDhQaFE0ZlFzaVZQQXVEajQ0T0V4QVZRS2xVU0VKNU9Ua2JqeGsxcWJNM3ZaWnZSTFZyQ2JMRklnUHc0bWVNUXZmaDNWbFlXQnNiMng1VXJsNnZsUmxKYVdycG0vUGp4dHh4QXplVG9yZkZqVXp5ZU1Bd0RrcVRBc2d3c0Zncy9TUkFlanN5c1RMQWNCNlZDQ1pYUTNuSHMyRkVvbFVxNHVibVgyemFwVXFrUUVCQUFiMjl2dUx1N3c3Yjlvekt2elZsZkcwRVFsblBuenEwRWNOdmxoRCsrdG1WTEV0cSsxQTZ0VzhkQW9WQ2djNWV1YU5Dd0lYYnUzQUVBOFBiMndiTGxLL0ZNbzBZZ1NSS3Z2dlk2TEdZemJ0MzZyOHJiT0hmMkxEcTJiNGQrZlh1alFjT0dlTEh0UzA3ZnQvRDcrVkNwMWVqYTdaVUg5dnVyc2syQ0lPRGw2UVZqa2ZIUk9YQUVvUDBnQ202ai93ZENLWVBxdGZwd0c5Y0doSnZDN20yalI0M0E2ZVJUQUhqRzNPOFh6QWNBZUhoNDRLZlZhOUh2L1ErcVkyOXVIenQyN0s4S1BEWGIzalVXNEhOckZFVnhITWR4RkVXQlpWbE9vVkFJdyswcWVIdDV3V2dzaEVvb0dPVGw1Y0ZzTXVIRkYxK0VYRjUrdW9RRWdLQ2dJUGo2K3NMVDB4TnVibTdRYURSUXE5VlNIc1laQTBoRnViYW9xS2lyeGNYRlB6enBGMy9YemgxUVdQaGtDdHJxOVhvRUJ0cDM1ZGV1SFFhOVBoMEFvTlZxY2ZMa0NjUjlHSXZlNy9UQysrLzFjZW9KVkdhTm5uMFdPLy9jaTUvWGIwUjZlanFXTFMzdjZLOWM4U1ArL3Zzb3BrNmREcGxNOWtCK2UxVzN5WEVjY25Kem9IMkVlZ2lWSFNOQXFPUmdjMHJndmZRMXFOOW9pTkkvcjhMOVUzdnF4Q0ZEaDJQcTExT1FtREFQMjdkdFJkLzMrQXE1ZUcxWGgrWGw1ZjJTbUppWTYrQ3BtWnpuMWppdVRNb1lrTWtvS0pSS21NMW1VQ1NQTmNYRnhTQUlRbkM2RkRoODZCQUdESWlEenMxNW83VU00S2wvQXdJQ2tKT1RVMkhyaDhWaUVXYXlySnpBOXNHeExBdUNJRmlPNHdqYlhGdWJObTFXSGo5K3ZCMUprdTFjL3MvalovNysvdENucDl2ZmZtK25JaXFLYjBVNThOZCtyRjcxRStaOE53L0JJYnhvMllzeEx6ajFhaHpCemxSYWl1M2J0NkZMbDY1UUtKVUlEQXhFKy9ZZGNQRGdBYnYzYlZqL0MzYnQzSUc1Q2ZQaDV1NytRSDczM1d6eitQRmpvT1Z5MUt0Zi80RWZIMFhyRUxqSHZ5ajliZmszRTdtZjdJUzhuamRLdGwyRzlYb3VkTU5iSW5ma0RwaVBwMEg3Z1gwTFVYaEVCRHAyNm95Vks1Wmo1cXh2NE9aMjcxTVljcmtjN2RyWlgrWTdkdXc0TUhyMDZPTlY4TllZQVQ5WXE5WEtDWkVnS0ptTVV5cVVJQWtDTjI1Y2w0WUhlRFlQRFU2ZlRzWkw3VjVHdlFZTjhPL0ZDeFVER3dDRWhJUWdLeXZMYWV1SENHd2l1REVNSXoyRUdWSVdBQ0gydFNVbko1c05Cc09TZ0lDQXB4TFlmdDJ3bnEveWNSemF2ZnovOEg3L1dBQjhtOE5Yazc1QVlXRWhta1pGNGREQkExSXU2a0diYlpHQ1kxbFlyVlpwd3FUYks2OWl5T0E0ZE9qVUNjMmFQWSsvL3RxUGMyZFQ4Tm5ZY1FCNGdSR0NBRWlLUW41K0hyWnUyU0o4ai8xc2JHQlFFSTRlT1lLNmRjT1JsNXNMWHo4LzBBb0ZmbHE1QXZuNWVYaTNkMThVRlJseDRNQmZhTktrTEorMVpYTVNOdjIyRVhNVDVqOHducnFxYnROa011RjA4aW5NbURFTmNZTStlaWlVN3FaRHQyRG90cnI4TWIyZUM3cUpQK1RQK2NGNk13K3FWK3ZCY2prYmNEZ3VPM2Y4Z1gxNzkyREsxOVB3emV4WitIcmFkTlNyZDI4QWJiRllzSE9udlpiNnRXdlh0aFlVRkRoT0Y0Z2VXem1HWElxaVFGSVV3SEZTMzZ4Y0xrZEFZQ0EwR2cxMFdoMysrZWNNL1AwRFFOTUtYTDF5QllVRmhiajQ3d1hrNUdTREpFbkk1WEwwZXZ1ZDhzQW1ocVM1dWJuSXo4K0gwV2hFY1hFeFRDYVRIYmpaZW0wTXczQWN4MEY0U05NSUFDeUJnWUVIVENiVGZKcW1oenhOb0paODZoUzJiRW5Dd2grV2dLSW9mREpxQkVKRHc5RHU1ZitIdVhPK1Fmc09IZEh6emJkdzdPK2pPT1RncFR3b2MyelFuVEY5S21aTW40b09IVHZoOHk4bUlUS3lIaVorT1JuZkwwaUVQajBkdFVORE1YUDJ0NUthVVpldTNYRDJiQXBpKzc4SGlwTGg5ZTQ5RUJsWkR6bTVPWGJiR1RWcU5HYlBtb25seTVhZ2R1M2FXTEpzQldpYXhveVpzNUdZTUJjL3Ixc0x1VnlPdGkrMWsvSTZETU5nMWt3K0RIeW5sejMzL3NwVmF4QVFVUDI5aEZYZDVyQWhINEVnZUlMRlQwYVBlYUI5YkZXeGt1Mlg0ZmJKLzBENXFKSFZleU0wYno0RDk4OWlrRC9qb04zN1VsSlM4TzJjdWZEejk0ZWJ1enRPbmpoK3o4QldiaDlLU240Y04yN2NEUUc4ekk0RkExUXdaUUNBczFnczBHaTFuTnhHdzBBdXA1R1duZ2FaVElZNmRlckN6ODhQMDJmT1JvUDZEZURqNjR1RjM4K0hWcXV6QTdWeXdPYnY3NC9zN0d6azVlVkp3Q2FPV1lrZW00M1g1aGlTMmswakVBUmgzck5uei9KT25UcjlqeUNJcUtjRjJJNGRPNG9PSFRwSnpZS3Z2UElxamgzN0crMWUvbjlJU2ZrSEV3VkZvUENJeUJyZmwwNmR1NkJUNXk3bG5vK01ySWUvRGxhdVk5cTZkVXlGRjY1Q29jQ0V6eWZhUFRmd3c3aHk3MnZSc2hWKzJiQ3gzUE1Sa1pINGJwNXp5aWlLb3JEL3dPRUhlc3lxc3MwN3JkZjltazVYRFgyU0RJZUNtWWVrUDQzTFR3UExUNWQ3MnljMnJMbE5tMGFoYWRQcXVUdzVqanZ6eHg5L09CWU1iSE5yWmltM1JoQ3NRUG5OV2ExV0RnQ1VTaVduMCtta1dkQ2lvbUpjdW5nUi92NEI2TkN4RTgva0lVd1krUGhXUGhwV0xqdGFxMWF0Y3JrMjBXTno4TnFrY0pSbFdWdlZlSWJqT0JLQXRVdVhMdnJzN093ZnZMeThGajVOWHB0dHo2dkFZeWNsbkd1eUlkWmxqNjlSRklXaUl1TWpRV2pnN2UxOVR5bVN0TFMwald2WHJqVTZBVFdUSGFqeG5Hc3NRWUFqU1pLbjlwYnpQV3JpMkpTQ3B1SHQ1WVg2OWVzTHRFUys4UER3Z0krUGo5MWt6cURCemdQQ2N2dzY3dTd1Y05iYlZrSGpMaWZTRzFYVXRPdnQ3YjNkWXJFc2ZscE8wT2JOVzJEWHpwMG9LU21CeFdMQnRxMWIwRUxvMFdyYU5BcmJ0L0Vuek9WTDFkUC9wRktwWGFod2wydnpNTmVzb20zNytmbWgyRmh4bFowTDk3aC9qNm9hdmtNMHRkbyt0MWhhV3JwNjVNaVJGMjFDVUpPRHQyWlhNQ0FJZ2lPRVpuOFpyempGeWVVeVlSYVVsbVpCK1NGM2dTWFgyeHYrL2dHU2R1bGRlV3dBWDBnUXZUWmJxbkJIcjgyMmlDQjZiU3hmQm1PRVNpbEpFQVIxNk5DaFpXM2J0bjJlSUlobVQ5S0ZNK0NEZmlBRTdqVmZYejhrSkM3QTg4MmJvMVBuTGhqMElWOHdhUFBpUzJqWDdtVUF3UEFSby9EbHhNL3g2NGIxQ0krSTRCT21UOUNkL2xHeUltTmhoYTBMNUVOYXN5SmpJYWdLV2tnQ0F3T1JucDZPekl4MHFBV2lCVHNiR2dVdU1mbWVaMGE1Y0E5Z2FQVmxoT3JValpBRzRUbU9PNzFuejU2OVR2SnF0dTBkamtVRGZuUktISnVTeXlDWEM1NGJMWTVObFEyNWUzbDZ3Yy9YcjhveWxVNVhXUzZYSXpnNDJLNklZRXRwSklhaWp1MGZUZ29KVmdDV2R1M2FwV1ptWmk3MDhmRlo5RGhlSkZvbitZOXRmK3lxOFAyOTNuNm5YRElUQVBMeWNqRno5cmR3YzNQRG5qMjdVVkpTVXFWdDNTbHN5TTdKY1FHYmd4bU5oZkR4OVhINm1vK1BON0t6SC95YUdZMkY1UWdCYksxWnMyWXdHQXpRNi9Vb0tzeTM3NVBVQWhoYkcwRHQrOWlEYk9CeWR2VmRGMW9OdEZvTmJ0Njh1ZkhISDM4c3FDZ0VoWU95TzUrVkVaVHZPQTRjeTNJY3k0SmxHVENNbFg5WUxiQmF6TENZUzJFeGw4SlVXZ3hUYVJGdVhyOXk3OEFHQUFFQkFjak56Ylh6MnB6bDJtdzlOb2RDZ3VpMVdRaUNJSDE5ZlhlV2xwYk9WU2dVSHo5dUY0bXNtdTd3cFNXbEdETjZGSy84cnRWSzdSTzJkM1JuWGRTVldXaG9iV1JtR3BDaFQ0Tlc1K2JTUERBV3dtZ3NCR08xSXJTMmN4QUlDdzJGd2ZEZzFremNKNVpoRUJaYU9URDUrZm5aMGU4ODZwYWZuNy9rcFpkZXVsU1J0MFlRaEFoc0RFRVFqTWpjSWFwTzBUUU5sVW9sZUdkbGROOWVYbDd3OVMxVG5XclFvQUVhTm14WTlXdTJzaGRyMTY1ZFlWK2JvOWZHc2l6aFVFZ29WeVZkdFdyVjB2NzkremNpU2JMOTQzU3grUG41SVYyZmNkOFhRRlN6WmxpNHFPSlIycUlpSXdJRDdrN01oU0FJTkcvZUhOZHYzRVJPVGpieWNuSlFXdnAwa2srcVZHcVFGQVVmYngrRWhvWlUrdDRXMGRHNGVmTS9aR1psMWVpYXFWUnFVREladkwyOTd3aHFqNXRacmRaOUV5ZE9QT0FBYXFVaXNBbWdacDlYRTdRTVJDVjN1VnpPeWVWbHhKRzJBT2ZoNFFGdmIyOEVCQVNnZHUyN1d6dmlUb0lqdDI3ZHd2bno1M0h0MmpXa3BxYkNZREFnSnlkSEFqeEhMVklCOUFpV1pRbVdaU21PNHlqd1dxUTB4M0hLR3pkdXRBb05EWjBMNExGU0h6bDFLaGtFUVVDajFVRmR6WGY0NGlJampJVUZBTGhxSjVwMG1jdHF5TklQSFRvME95WW01cFlBWkNYZ05VS0xZSzhQYWl1bHg5aDZhd3FGZ3BQMFFUVzgwTEdIaHdlOHZHekVXZXJXeFRQUFBJT1FrSkM3aTdMdTlJYVFrQkJKVU5reDErYlkraUhLWW5HODJVNGtXSG5uZ2lERHdzS09GeFFVSk9wMHVxbVAwMUZzMWl3SzZlbnBNQmd5VVZpUVZ5MHNIQURmdnlTVHlSQVVGSWlBZ0FEWDVlS3l4OEp1Mzc2OUtpWW1KbFVJTThYUXM5UkpDR29WdkRWcDBGMGlqUlJDVVZ1YWIxRy9RQXhGYTlXcWRkZWdWaVZnNC9NNG9VNXpiVTU2MnNSQ2dtTnZtemh1WlNFSWduSnpjL3ZaWkRMVnBXbDZ3T04wTUFNREE2dU4zZFpsTG50Y3pXZzByZzRPRGo0Ris5WU94eERVWWhPQ3NzNUMwSXBBalZkMTkwRlFVQkJDUTBQdmFSK3JwQk9uMCtrUUVoSmlSMjlreTdnckRxa0svVzEydlcyQzF5YjF0b2tMc1d2WHJpVXN5KzV4blNZdWM5bGpsVmZidjNEaHdqMXdYZ0dWUERZNHpJTUs1SkdjTGFqUkFzVzNHSTdxZEtJb0M1OVhDd2tKdWVlSkRObk5temVyam9JOFZaSFQ3bm54T2ZGMTRTRW04RmloQTU4UXdlMlZWMTVKTzNEZ3dQY2hJU0doQU1KZHA0ekxYUFpvRzhkeDEwNmNPSkgwNmFlZkZqb0pRY3VCbWlDQWJDZW5aNHNmRmVFSUwrUkNnbVZaM0EwKzJRSGIzYmg2dnI2K1RpY1JiQVNXWVVNZlRwaE1KaEFFQVVHNlQyb0JJZmhmUkxacDArWkVUazVPZ3FlbjUreXFoc1V1YzVuTEhvNnpkdTNhdFRWdnZ2bG1xb08zNWl3RXRkcTJkb2pocDhEdktCVU10RnF0WGVncFZqOGpJeVBSdUhGanFOWDNQaUZ5VjJDaVZxc1JHaHBhYm9hMGd2bFJqbVZaUWl3a2NCekhDZ1VGMjZrRTBzdkxhM054Y1hHUVNxVWE0enAzWE9heVI5T3lzN01YaDRlSG43WHgxRXB0SHdSQm1HeEJ6VEVFRlNRR3l1WFZiTUhOVjlEV0RRME52UzlRdTJ0Z0EvZ0Vla1Y4YmM3R3JNVEdYUUhjT0dFcVFjeTNrUURJVnExYUxUbHg0b1MvWEM3djV6cUZYUFlVaDNyUTYvWEl5RENBWVJnWWpZOEdRM05wYWVuUDc3NzdybTIvV3JrUWxPTTRDZFE0am1NRlJseU9aVm1PWVJnN3ZqOHhzaE1mWXBWVW9WQkFyVlpETHBmajBxVkxEeGJZQUNBOFBOenBxSldUYVFSTzZHY1RSNjNFV1ZMYkZoRGluMy8rSWZmczJiTzRmZnYyZmhSRmRYR2Q0aTU3R2tFdE9Ua1pIQWhwR3NML0VkZ3ZpOFh5NTA4clYrekt5Y214T0FFMTJ3a0RmbXlLSUZnQ1lQbDBGSy9lTGpCM2NFb2xMOFNpMFdqNW5qVjNEM2g1ZThIZlB3QzFnb01SWGpkYzB0RzRYN3VuYjZBb0NuWHIxa1Z3Y0REOC9mM2g1ZVZsVnlsVktwVzIrVGRPWkFLeFZiWVMzRlVyK0JZUWMrZk9uVk12WGJxMGtPTzRZNC96Q2JwcDB5WW9sY3FLRXhWV0swYU1HQUUvUHorNHU3c2pMaTVPVW5keTJkTnJlcjBlSEFqNEJ3UTlNbU54TE11ZVBIVHdZTkxFTHlZVU9PVFVTb1JIcVIyb1NYUkVKRmUrQ2xwK3VrRG5wb09IaDZkRVJWUTdOTFJhUU8yZWdRM2dGVzNDd3NJUUZCUUVSMjFTSnlwWG9wcXpYUXVJQTdpWm5ubm1tWlMwdExRRkhNZGRlVkpQNEhIanhpRXBLUW5yMTY5SFVsSVNkdS9laldIRGhybXU3S2ZjRElaTWFIVnVqOHorY0J4MzlkeTVjK3Y3OW5rbnd3SFViQ3VnSmp0UUUzcldTRkthQjRWY0p1Zmt0Q2gwcklCS1pUOWw0T1BqQS8rQUFJU0UxTDR2N1lWcUF6WUFDQTRPUm1ob0tBSURBeVgrdGtyQURiYjliUUovbTBRbExqeE13Y0hCQjNKeWNoSUFaRDVwSjI5UlVSSG16NStQMmJObm8yM2J0bWpidGkwV0xWcUVGU3RXSUNzcnkzVjFQOFhHTU13OWVXb1h6cC9EcUJIRHEzdDNzbTdldkxtNmErY08xMkUvMkc0SGJBUkJXRGlPczRpQ3h4ekhDUnhyRkVlUUpJcUtqTWpOelVHbXdRQUN2TmkwUnEyRzJXVENnYi8rd3BZdG0vSG5ycDN3OXZhdTlzYjMrL2I3NnRXcmg5cTFhMHZnNXVIaFlTZmhad051WWtncTlzT3h6a0pTQUNZZkg1OXQrZm41M3drTFdLUFdxbFVyVEpreUJTKy8vRExVYWpVaUlpTHd4eDkvWU83Y3VRZ09Eb2E3dXpzR0RCZ2dxUzJOR0RFQ25UdDN0dnVPN3QyN1k5Q2dRVTYvdjJmUG5tamV2RGtBSURrNUdTVWxKV2pidHEzMGVwczJiUUFBUjQ0Y2NWM2RUN0VWRmhiYzArZnFOMmlJaVY5K1ZaMjdVcXJYcHk5djA3clZlWlMxZFpUYWhKNjh0MmJYMmtFeUpFbXhITWV4NERqSVpCVE1KaE5VS2pVWEVsSWIvZ0VCU0U5UGgxcXRnVnFqUVVyS1AzamwxVmN4ZXZRWVJFUkU0dkNoUTlXK252ZmRPMFlRQkNJaUlwd3FXam1yam9vdElBQUlBRTZMQ1J6SGtSNGVIdXVOUnFOR285SEUxL1JKTlgzNmRHemV2Qmt4TVRFWU5HZ1FldlRvZ2U3ZHUrUENoUXM0Zi80ODJyVnJoNjVkdStLTk45NjQ2Ky91MmJNbmNuTnpBUUMzYjk4R1RkTjJuRnh5dVJ6ZTN0NUlUVTExWGQwdUsyZloyZG1ZK3ZWa1pHVWFRSkFrQmc4ZWdwYXRYa0JxYWlwR2pSZ09pOFVNRHc5UExGL3hVMW02NDdOUGtaYkdhNWJuNWVWQnJkRmc3YnIxQUlDclY2OGlZZTRjNUJma3c4dlRDMlBHanBORWVnQmcrYktsaTcvNGZQd3BCMUFydFFFM3ZsZ0FXSVJybGlVSXNBUkpjQVJIZ09NNFRpYVRnV1ZaenQzREhRcUZBZ1JCUUorZURyVktEWXFpb0ZhclViOUJRd1RWcW9XaUlpTU9IVHo0TXJuRXdBQUFJQUJKUkVGVTZBRWJ3STljaFllSGx5T2pGTXU4VGdia2JmdmJJSVNrNG1TQ0NHNkVWcXRkV1Z4Y3JGS3BWQ05yOHVUcDBhT0hwSTM0eGh0dllObXlaWmc2ZFNwME9oMWF0bXlKWjU5OUZ1Zk9uYnNuWUh2NzdiZWxmeGNYRnpzdExDZ1VDcGhNSnRkVjdMSnk5dk82TldqY3VESDZ2ZjhCcmwyN2hnWHpFOUN5MVFzSURnN0dMeHMyNHZMbFM1ZzZaYkxkWjZiTm1BVUF5TS9QUTl6QVdJd2NOUm9BWURhYk1YWEtWNWd5ZFRvQ0F3T3g0NC90K0g3QmZFd1NCSWJ5OC9OKytPTHo4WWVkaEo0bGQ4aXJjU3pEaUZSbGtNdHBVWndGUlVWRk1BcHN4a29WSDcxcHRGcjQrdnBpKzdhdHlNL1BSMTVlM3FNSmJBQ3ZjR1ZMSVc3YnRHdmpzZG4ydFVuZ3hwYXA2aklDMEVuZzl0WmJieTFadjM0OXJWUXFhMHpHejNiNlFxRlFTUGxEMFdpYXJoYmdVYWxVTUp2TjVaNDNtVXdQUlovU1pZKytSYmRvaVlTNWN3QVFhTkdpSldaL002ZEtuMk5aRmw5T21vaHVyN3lHRmkxYUFnQ3VYNytHMU5SYmlCL0w5OEt6SEF1Tm9GMVFXRmk0N0oxZWIrMUgrYWtDK3hEVVJrSlBGRHRtR0lhVHkrVWM3NXlBbzJtZUxEWFRZSUJHbzBWMGRBdjgvZmRSdUx0N1FLVlVnbVZaclBoeE9YcjFlaHNObjNrRzQ4ZU5mWFNCRFFEQ3dzTHN0QkVjcHhGc2lDaGg0NjF4QXZpSmt3a1FtdjFBRUFTeFpjc1dZdHEwYVV2aTQrTmxDb1VpcmlaT0hwa1RIdnFLMUtTY1BXK3hXS3EwbmVEZ1lKU1dsaUl2THc4ZUhoN1NaN096czZ2TTVlNnlwd3pZb2xzZ2NmNUNIRHQrREN0WExBZE4wL2h5OHRkMy9OelNKWXVnVkNyUnArOTdkdWRwUUVDQVhkZ0tBRWFqY2NXRStIRjdVMUwrY2V4VGN3UTFPelpjb2RtZW94VUtqcGJMWWJaWVFKRWthSVVDRkVYQjE5Y1hkZXJVaGJ1N0J3aUNRR0JRSUhSYUhSaXJGUk0rbjRqdzhIQmN2UGl2ZEMwOHNzQUdBUFhyMXkrblJlb1lqanA0YlNLOUVXeHlib3lRZ3lNSWdpQysrdXFyUEY5ZjN5VURCdzRrRlFyRndJZDVvdEUwWGM1MXZuVHBVcFU0bzZLaW9xQlNxWERnd0FHOCt1cXJBSUNEQncrQ0pFbTBhdFhLZFJXN3JKeE5tem9GMFMxYW9uMzdEbWdSM1FKdjl1d0JsbVVyN2ZjNmVQQUE5dS9iaDRXTGx0amRpQ01pSWxCUVVJQy85dS9EaTIxZnd0V3JWM0hxNUltZnpwNDl1MmZqeGcwbE5wNWFpY1BEUkJDRVdjaXAyYkhoTWl6THlTZ1paREk1U2twS09IY3ZieWlWU3VoMGJsQW8rUCtYbWtyNUp0eGF3UWdMRFVOQVlDQVVOTTN2NjRFRGFOSzA2YU1QYkFSQm9INzkraEt3T1hwc0RNUFllbXkyNEFaaEZBTkN2czN1TzRjTkc1Wk4wL1NTZnYzNjRXR0NXOHVXTFRGNzltd3NXN1lNelpzM3g2SkZpNUNlbmw3aCs5ZXRXNGZjM0Z3TUhqd1lHbzBHc2JHeEdEcDBLSFE2SFdpYVJseGNIUHIzN3c4dkx5L1hWZXl5Y3RhbnozdVlQWHNHMXExWkRaWmxNZXFUVDBHU3BGM3hJRDgvSDIvMWZBUE5ubjhlWThlTlIrSzg3MUJhV29vaGd6K1V2aWR4d1EvUTZYU1lObU1XdnZ2MkcveXc4SHZRTlAyVGg2Zm5ueHZXLzFJRSswS0JiUU91eVhFT1ZPcFhveWdRRElPU2ttS1VscFp3YXJVYW5sNWVVS2xVcUZlL1BtN2V1SUdqUnc5RHA5T2gxOXZ2SWlRNEJQWHExMGY4K004eGVmSWtXTXdXaElTRVlNelkrRWNmMk1SY1VyMTY5ZXdxcExhNU5pR3ZWcTZZQVB0S3FTMjRFUVJCRUhGeGNaa21rMm5Sd0lFRFdhVlNHZmN3VHJUWFgzOGRJMGVPeE9qUm84R3lMUHIxNjRjQkF3YWd0TlI1WjhxR0RSdHc0OFlOREI0OEdBQXdlL1pzV0sxV2RPL2VIU1JKb21mUG5wZzdkNjdyQ25hWlV3dXBYUnR6NTgxM210YjRaY05HNXpmVFgzNnQ4UHNhTkdpSWhZdVd3R2cwcnBnMWM4YWVaVXNYVndScWtxY21naHBKa2d4UVJob3BveWhPcmxTQ3BoVWMzM3dyaUxLb05YQnpkMGRrWkNUOC9Qd1FGRlFMWVhYcW9HNTRPSlJLSlo1N3JqRitXTFMwUnRmdGpwb0g5Mk1aR1JrNGQrNGNybHk1Z3RUVVZPajFlbVJuWjVmVFN4QkNWMElBUUVKZzRTVTRqaU50TkJQa0hNY3BBQ2duVEpqZ0hoOGZINnRTcVlhNFRuMCtVWHpqNW4vSXlja0J3ekFvTFhrNlI3U1VLaFVvaW9LWHB6ZkN3bXBYR3E1eEhDZXNXVGFzMXBwYk02VktCWmxNQm04dmI0U0ZWVXdSdG4vL2ZvUkhObmdnNjFSWVdMaHNRdnk0dlRiaHB6TlFzMlhzc0lpTUhXSnpQVVhKT0lIZW13YzFwYjI0c2Fkbm1jcFVhRmdZNnRkdkFGOWYzd2QyTHRRb0I1cS92Mys1NFhnbkZWTFk1Tm1rU3Fsd3dkcjJ1SW1GQlV5Wk1nVW5UNTc4WWNPR0RXYTFXbjNQclNBZE9uVEFuMy8rK2NoY21IcTlIdjcrZHpmNmJES1pjZWJNR1ZBeUdYUnU3aTc1dlNJamN2TnlrWFV5RTAyYk5JVllvWE1FdFJNblRvS2tLR2gxTmI5bVJVVkdaT2ZrSURNckU5RkNzM1pGZHJ1Ryt4a0xDZ3ArR0RwazhQNUxseTZhS3dNMWxGVkFKVDFRZ1RoV1VKb2lJSXhPU2F3ZEpDVlFmMU1VNURJWnhQbFF0VklGczhsVTQ3L3RnUUVid0l2QmlPQldXWFZVckpBS3ZXeWMxV29Wd1kyeERVdEZjTnUrZlRzMEdzM1N3c0xDVXExV094S0E4bTczYmRldVhZLzloWnl1VHdjbGs4RS9JQWd1QXpRYUxUUWFMVEwwYVVoTFQwT1lFeUxWNnpkdWdxU29CN1ptdHZ0MDgrWi9DSzFFaHErV1RadFJOVnRwZG5iMjRsWXRteDlHZWZiYmlqdzFLd2lDSVFDR0VEdzFHVVZ4TXBuZ3FZbEQ3V28xdEJvTmRIYWtrWUdvWFRzVWtaR1JDQTBMZStEbndRTmhyUTBQRDY5SVlGa0NPSnU3cVpScnMxcXQ0bXRPd1EwQWREcmRxdHpjM0dJUEQ0L2hBSHlmdGdzNU95c2JXamQzRjZJNW1GYm5ocXlzYktmQWxwT1RBOTFEV0RPdHpnMVoyVm1WQWxzTldaWmVuNzQ4K3Ztb1U3Q2YvWFQwMHV4QkRRS29FU1JIRWlSSGtRSmJCMjFER0NuTWYyb0Z2UUkrQlBWRHJWcDhYdTFoZ05vREF6WSthZG5BS2JBNWVtMmk1eWFDRzhBUENGY0NicHlucCtmR2pJeU1JbDlmMzQ4SWdvaDRXaTVlanJ2MzRlbW53WFBMejh0eCt0ckRXak9OUm92ODNKeDcraXlSbkFsaWZqSnc1ZTY2OURsd1YyK2FzbGEzL20veStUdDRhcVp5b0VZSW9FWVNBZ3V1REhJNXpTbG9rYWxEQURXSkJkY0xiam9kTE9aUzVPVm1Jek5EZzh5TU5LZnJFRlluSEc3dTdvOC9zQUZBbzBhTnlvRmJCY0FtZ1p1WWNLc0kzTVMvL2YzOS83aCsvWHBCN2RxMTQwaVNqSzUrRU9IWlRRMEdBNndNQTJOaDliQ2JhclU2eU9ReStBbTB5SGQxc2hOQVNZbUx5NjBpSzZtQTUrNWhGbGZ1K1hnbEpnTlg3dzdVV0hBbno1WGNXdDg1ZGZaMWxKLzl0Ry9wc011cGxRYzFtUUJxdElMMzFCeUxCYUxJc2RWaWdvZUhSNlhLN1VWRlJ0eTRmaFdObXpaN01vQ05JQWcwYXRTb1FxL05HWmpZZUhCT3dVMzRYbzdqT0s1T25UcUhrNU9UODU1Nzdya0JGRVYxcms1UVMwNU9CZ2dTR3EyT1p6ZXRSbTNqb2lJajB2VVpTRTlQcjNZbCtGMDdkMkQ1c3FVd0dESVFGQlNFbGF2VzR2TGxTNGp0WDhiQ1BqWitBcnAyN2VaQ3drZllpTHNFTlF2SC9IbXc4R0pTbjR5RkdUYmhwK1BzWjRrQWF1WnlPVFU3VUpPREZnU09sUXBCTGsvaldBSDFRMkJRRUl3RmVaV0NtdTA1LzBTRW9xTEo1WElKM083Z3Nkbm0yeW9DTjNId2xoTkQwNmlvcUhNYk4yNmMxYTFidDB5YXB2dFd4ejdyOVhxQUlPSG5Yek5peVdKeTJhQlBRM3A2ZXJWeFU2V2xwV0hHOUtuNGN2TFhpSTV1Z1lJQ25ob25JaUlTdTNidkF3QU1qSDIveG83MXNxVkw4SHIzSG5ac0p1Sit6WjN6RFZKUy9nRk4wMmpmb1JNR2Z6UUVGRVVCQUZKVFU1RXdkdzVTenFaQW9WQ2dZOGRPK0RCdXNQUjZUZGlkdHZsaXpBdVF5K1VnQ0JKaFlXSG9IenNBclZ2SFBKcWVLbXYrZVUzMm9WMWY1UDFXVUFtb2xmUFVCQUxZQ2tDTjcxVlRxa1FSRmwwWnFQbnhiUjFob1dISXo4dXUwZU5VVlNNZnhrYVZTaVVhTldxRThQQndCQWNIUzBMTXRseHVZck9mUXFHUXhGVmxNaGxuSThUTTJISzVDVG1DVWdBbGI3enh4dTBtVFpwOGF6UWF2eEZldnk4ekdES2gwZXBxZkYwME9qY1lESVpxKzc2TC8xNkFqNDhQV3JlT0FVM1Q4UEh4a1R4blFRcXR3cG5ZNnJBZmx5OUZUazUydWVjblRaeUFXc0hCK08zM0xWaTBlQm1PSGptTXBLUk5mUGpFc2hnN1pqVHExVytBVGI5dlFVTENBdXpmdHhlL2JmeTF4dmF6cXR0TVhMQVFtN2R1Ui8vWUFaZzljem8yL3JyaG9WeTAzajkyaDl2by8wbC9leVYwaGJKVEJBQlljNjFGMzdlK052SDNML0oreTNmSXBSVUxqN0xxcHkyb2dXQmdVLzJrS0ZrNVVBTUhaR1ptb3JpNFdNcXArZnI2SWlnd0NLR2hZYWhYdno1b1lWUktQTSthTld1R2poMDdvbjM3OWdnS3Vyc3E5SW9mbDZQM083M3dkcStlMkxwbGM1azNhckZnOXF3WjZOZjNYZlR2MXhjSER4NTQrQjVibVplaVFhTkdqWndOeFpjTFMwV3hWZGhVUzRVVDBuRkNnUlBEMG4vLy9aZlY2WFFyTXpJeTlMNit2b01JZ3JoblVXWXJZMzBneVdhTlJndGp3ZjFUdUp3K25ZeEpYMHlBMld4R2NYRXh1ci9HaDVrOTN1aUpmdS8zcjlKM0hEMXlHSWtKODZEWHB5TTBOQXlqUHZrVWpaNTlWbnA5Lzc2OVdMWnNDVElOQnZnSEJDQXViakJhdmNCZmJNT0dmb1JiLy9GQ3R5TS9IZzZaakVKd2NBZ1NGeXdFeTdKbzI3WWR1cjN5Q2hRS0JmejgvZEU4T2hxWExsNEV3RmNzUGIyODBMdFBIOUEwamVDUUVMU09hWU4vLzcxUVkrdCtOOXRVcVZSbzNUb0c4dmdKbVBqRkJIVHEzT1doTUxObytqU0djVmt5Mkp3U0laemhydjFuemxyendzMnZ6c0plVGNvWm41b1FmaEpXZ0JOQmplVWRCdEttVUNEbmFLRlFrSitmRDBaUW1xSnBHbDVlWlo1YWFCZ1BhbzZTZVhYcTFBRkZVZGk1Y3ljVUNnVmVmdmxsWkdabTJwRkdPTTY5aW4rbnBQekRuMlBMVjhCa01pRXViZ0NpbWoyUG9LQWdiTisyRmFXbHBWangweHJrNU9SZzBJZXhhTnk0aVVRdG5wNmUvbkE4TnRGME9wMVR6ODNUMHhNNm5jNFp4YmlkTUl5b24rRGd1WmtGejYwVVFMRy92LzhmLy83Nzd5U0dZZmJlNjM1V1Y2R2dTdHN5M24vdW9XblRLR3hLMm9xUFI0eENyVnJCMkpTMEZadVN0bFlaMUs1ZXVZTFBKOFJqOEpDaDJMcDlKOTU4cXhkR2pSd09RMFlHQU9EbXpSdVlNdmxMZlBaWlBMWnMyNEZYWDMwZDQ4ZVBrMFJwRWhJWFlGUFNWZ0RBbkxuenNDbHBLeElYTE9SREJKSkU3ejU5NGVIaENZQ24wamw4NkJCYXR1UkpBSHg4ZkpDUXVBQktwVW82MFU4bko2Tng0eVkxdHViM3NzM29GaTFodGxna1FIN1FaamxyZ1BiRDUva2JMMnZkLy9mdGMvTmZ1UGxWQ3V3WmI0c2RIcVVFL3pBRGhBVUV5a0NOeit4d1ZxdUZrOGw1Q3YrOHZIekk1REtvVkNyVUNhdURxR2JQdzh2YkcxcXRGcjYrZnJ5bkZoYUcrdlhxUTZ2Vk9sM1h0TFEweVZsaFdSYWVucDUyNzFtNlpCSFdyRjRGQUVoSitRY2ZEeDhLQUxoeStSS2FSa1ZCb1ZUQ3pkMGRMN3p3UDV3NHp1czhuVGx6R20zYXZDaWNUd1RrY2hxWExwVWRoMWt6cHo5Y1lBTUFkM2QzQ2R4Q1FrTHN3TzBPRk9PMllTa3JoS2JpblVvRXR4SUF4Yzg4ODh5cG4zLytlVXBwYWVseVZ4cjZ6clpsU3hMYXZ0UU9yVnZIUUtGUW9IT1hybWpRc0NGMjd0ekJoMExlUGxpMmZLVWtsZmJxYTYvRFlqYmoxcTMvcXJ5TmMyZlBvbVA3ZHVqWHR6Y2FOR3lJRjl1KzVQUjlDNytmRDVWYWphN2RYbmxndjc4cTJ5UUlBbDZlWGpEV2NCSzh3aHZneWpOUWRZNUFpU2UxT3VIWDVTdTcvVGJtbGdPb09RSmJDUUdVQW9TWmY4QktDS3BTSk1DUklEaWFwam1TSkZGU1hNd1ZGQlRBM2NNZE9xMk9uLzEwYzRPN3V6dFVLaFhjM056NG5Kb0Fhcm9LUkZob21nYkRNUEQyOWtaTVRBeFlscFg0RGtWNzU5MCsyTHQzRHhMbWZZZkpYMDdDMEdHOGZrUGQ4QWljUEhFY1JxTVJCUVVGT0hmdXJIVFR6OC9QaDFLcHhObXpLZmhzekdqUUNocjUrZmtBZ0tUZk55RThQT0xoaGFLMjV1SGhnVWFOR2xWNkVvbi9GeDRjUVJDRXhXTGhiT3NNTE10eXR2MXRZbGdLZ092ZHUzY2FnSVRzN093YlhsNWVnd0RjYzRiK3dvWHppQnNZaTJYTFZ5SWlNaEpMbHl6RzVxUk5rcGRTa1gwMzV4c2NQblFJT1RrNW1EanBTN1I1c2UwakNXeDZ2UjRSRVpGMno5V3VIUWE5bm1jeDBXcTErSFBYVGt5WjhpV01oVWE3TUtLcTF1alpaN0h6ejcxSVQwL0hGNStQeDdLbFN6Qmc0SWQyNzFtNTRrZjgvZmRSSkNRc2NNcVpWeE5XMVcxeUhJZWMzQnhvSDFJUElWZGtTYjg4Zi9lcWhzZUduTUl4aWZ4UkJEWlRCYUduQmVCRXBYYUdBTUVKd0FZS0JDZVh5NkZVcXJpOHZGeFFsQXdCL2dGQzlWTUhOemMzZUhsNVFhL1h3TlBMU3dnL0c5eXhGMDBNUnc4ZE9vU21UdWlKdEZvdEJnMzZDQ05IRE1NNzcvWkcvZnI4dkd5VEprM1JzVk1YREJzNkdPNXU3bENyMUZDcFZkTG5ObTlPUWtsSkNhWk5uNFY1MzMwTEFNakkwR056MHU5SW5QLzlvd0ZzQU9EcDZXa0hiallnVmc3WXhHT0xzaVpld21hdVZBUTZhYTROQUN1UzRubDdlMjg2Zi83OGpYcjE2dldqS09ybGU5MWZ1VnlPdi83YWo0aklTQncrVkRYTzloRWpQOEdJa1o5Z25NQmcrcWlhdjc4LzlBNVVUTGR2cHlJcWltOUZPZkRYZnF4ZTlSUG1mRGNQd1FJUDNZc3hMemk5SVRtQ25hbTBGTnUzYjBPWExsMmhVQ29SR0JpSTl1MDdsRXNBYjFqL0MzYnQzSUc1Q2ZOcnRKSHpYcmQ1L1BneDBISTU2dFd2LzhDUGo1V3g3dnRiZjM1enR4L2pVMUdKT3J0OWdZQ1FldFFBZ2lVSmdpVkFjQ1RIZ2dMSnlVQkNKcE56K2ZsNWNITjNCMk8xd21ESXdMUFBOUzZiS1BEemhWdnFMZmo2K3FGKy9mL2YzcG5IUjFYZSsvL3puR1gyeWI0TXlZU0VrSVJjdHVDbHdyVmlYUzR1VkZzcHVLK1hxcTAvL2ZXNklsYTlyYlYxQlpjcXlxMTZSYXUxZXVVVmJkVWY5ZDY2d3IwZ29sR0pDWVFrSkNRa0lTR1FaU2FabWJNOHZ6L09lVTZlT1psSlFBRkp6UE42SGVaa01wTVp6cHg1bjg5M0wwZnFLTWVJTlp2OTdMUFBBQmp6aU8yZHFCc2FHdkRBL2ZmaW50L2VpN1hQUFl2SmhVVTQyMVRLbDE1Mk9TNjl6RWhzdU9icW4yTHExQkxMeW5PNzNiam50L2RDRUFSRW8xR2twcWJpclRmZlJIK29IOWYrL0pwdjN4UzF3MjNtekprb0tTbEJRVUZCM0ZpLzFOUlV5K2ZtZHJ1WmFVclozRktiV2NyOGJvck5OQjFncHVtcVZhdnVIaGdZZVBMcnZ0ZC9tRDRESDMrOENYVjFPeERnMGpNKzNyd0pLNWJmWXYzODZDT3J2clhvMlloZkRyTzdNUUJRWGJmYVNnSEEyZWY4Q0I5KytENjJiUGtZcXFyaXZmZmV4VmZWMjNER21XY0NNQWFNRUFJSW9vamUzaDdMUjBMMStLRFBwTHc4Yk42MENZcWlvTXVNOWpxY1RyejR4eGZ3eWlzdlExRVU5UFFjd0lZTkgySDI3TmxEcHZDYmY4VWJyMWZpc2NkWEg3VStkUWY3bXRGb0ZCOXYzb1FIN3I4WFA3LzJ1cU1lT09qVEJwKzkvZkhmclQzN2IzZU1abm9PQUlpWTA2UmlBQlJDeklIR0ZMb2dpVlFrQXBVZ1VCa0NIRVNraEFCK2Z3cnk4NE9ZVnY0UGNMbmNjTHZjeU1qSVJFNU9Edkx6OHBHZWxvNjh2THhSb1FZWUVWUW1SQndPQjlMUzBvWTFhZjEwNnllNC9aZDM0cFJUVDhNamp6MkJtcStxNDRLSGlxTGdwUmYvQ0VLQVdiTm1XejVrMVF4azlQUWNRRU5EQThwS3kzRFYxZGZnbFZmWFllMExMeDQ3aW8wM1MyZk9uRGxNc1kyd1VXSXNFRUtzTnVPbWtxTmNncS9PZXJRRDBHKy8vWGI5OXR0di80K1dscGE2L1B6OGZ5R0VISGNvNzlNaHkvQjZQSGp4ank5Z3dVa240YXZxYldQR2gyWlAwSDN3Z2Z2dzRBUDM0ZlF6enNTLy9lcHVsSmFXNGRlLytTM1dQTFVhSGUzdG1GeFlpSWRXUFdKTk0xcjB3N05SWGIwTlZ5MjdBcUlvNGR6RlAwRnBhUm4yMjhxRmJyNzVWcXhhK1pCeEpaNDhHYzgrOXdJY0RnY2VmR2dWVmoveGU3ejZ5cDhoeXpKT1B1VlVYUGt2UHdWZzVDbXVmT2dCU0pLRWl5ODhMOTVNZk9sbEJBS0hQNWZ3WUYvekY5ZGZCMEtBd3NJaTNITHJiVWMxajAwSC9id2hzcmZ5bEpiNzZ0QTRsT0prVTJyV0xjRlFIelVBUmlVQmlBNVFLZ0JVcElSS2dnQlJBMlFpVWlja09OUFNoMm8vZlQ0VUZCUU01YW1aZ1lJZE83WVBpMzRtVzAxTlRVaExTOFBDaFFzQkFKOS8vdm13bVI4WFhEZzA3Q2d6TXhQTGJ4dWFmN0J4NHdZOC90Z2pxS2c0RGc4OHVNcUM1S0lmbm8yNnVqb3N1OUpRYzcrNDRjWmhDbHM2RnI5NHFhbXBtRFZybHRVT2hSQmkzZkw3M0gwVzNBQlFycXBCNTN4d2lVeFRyYUNnNE1QWFhudXQ3cHh6enJuQTVYSXRPOWozcUtncVR2dm5oZmo5WTQvZ2hodHZ4aC9XUEhYTUhjY3p6MXFFTTg5YU5PeiswdEl5ZkxSeDVEbW1KNTY0SU9rWDErbDA0cTUvKzNYY2ZkZjhiSGpmejNuei95bGhNOFNTMGxJODl2anFoSDliRkVWOHVPRi9qK3B4T3BqWEhPMTRmZFBsOXlmUGt4d0loLy8wMnI0UDM3L3JRR1VmWjNyR0VnSE45S2NwQURXZ1JnMmdFUXFkZ0ZJQ1FrVVFLaW9hSkFBeWtReW9RWWJiNHpHU2IvMURQclhzN0J3anBjUE1VL3ZlOXc2K1d0R3EyUG1hYThHQ2s3Qmd3VW5EN3Bja0NiZmN1bnpFNXg2VFlHTWZOQTgzKzVZQWNCYmNGRVdoWm9VQ0gxU2dYS1VDVTI4YUFPMzg4ODl2QmZCa2EydnJsM2w1ZVZjU1FrWnR3cTVyR3I1LzRnSTBOVFhGUlhvRVVZUitCSnQzVHF6eHVVUlJSRGdjaXN1WDFIWDlpMTI3ZGxXZThvTVRkNEJMWnhvQmFqRXlwTkpZZHc2ZEFHYVFnRUFFb1JJRXlCQXNxTGtndytYMHdPUHp3ZWZ6V1Q2MW5CeWpUS3FvTUhHZVdxTGw4WGd4TUJBK3FNY2R5U1VkeXgrMjErdkY3Tm16SVlxaXRZMENPbW9xT0JZeHRRY1ZtRzJxMjAxVEFGb3dHUHhnN2RxMVgxMXd3UVhuZVR5ZW40MzIvakl5TXZCL2YvR3Y2T2Z5M1BMemc5amQzSVJZTEFhcTY2aXRyVUZoWWRFUk8wWnV0MmVDQ29kNGJMN05ZNWJzdFhOeWN0RFJzZGNDV3lqVS8vd2ZYM2orby92dnV6ZGtVMmw4NUpQZmVLaVpaaWQwRTJqVWlId0tWQUtCVEVUcWdBZ0haTGlJRExmREEwOUpEbnhtU2dlREd0LzkxcDZta1d4TktTN0Jyc2I2RWVIbThYZ3hwYmprdXdzMndDaS9zc1BORHJrRUppcFRiL1lxQmNyNTNwaHBxcHVtcVFaQVhiWnNtYlpzMmJKbjZ1cnFQaTB1THI1RUZNVkR5c25JeTh2RHFhZjlNeTYvOUNLa3BLUmFaVXhBZkxySFY5WGI4TVRqdjhmOUR6eUVxU1ZmLzBOT2RLV2ZXRURZSE5LYmFBbmYwakVMaC9vaEpra2htVFJwRXRyYjI5SFIxcnBoZDB2cjIwdVhMRzVLb3RKNG54b0xqTVdHVkpveFJjcTRjQnMxbjRJZ1Vra1NJVWxtaHc2SERBZHJFbW5PS0dEOTFDenpNei9meUZPYlZuNUlxVFlwcWFtb09HN3V0Lzc1SDlHWkI0ZHpVVXF0K1FrdExTM282T2hBVjFjWGVucDYwTnZiaTNBNGpIQTRqRWdrd28vL0k5emdacUxyT3B1bFFBQ3dlUXFpQ1hpWlV1b0E0QURnQk9Bc0tTbHhiZG15NVVlTnUzWmRtUnM0T29NLzkzYnN3ZHhENlBEUjFOU003djM3Snpyb0RqdU9iY2pLeWtSaGdrNFRUYzNONk80KytzZHNiMGNiTWpNelVaU2cwU1NsZEU5blorZC96cGt6NTVPT2pnN0ZCclZvSW9VR0s5cEpWQmlOSVRUVEVxRnNNeXQwSUVrU0pNbWFVd0FuQnphUHh3Ty8zNCswdERSa1pHUWdOemNYK2ZuNW1ESmx5aEd0SmY1T0t6YUx3SVJnNXN5WjdBTWFwdHpzdCtZMkxHSktDS0VtM01Bck4yYWF3cGhHcndGUTYrdnIxWXlNak1vbm4zenlrd1UvT0dWeFJrYm1sVWY2aWk3TDhpRTlwN0J3TXJxNk9yRzNvdzArZjhyRXpJTlFQMEtoZm1pcW1oQnFBRkJVV0lqT3pxTjN6Tmg3MGpVdElkVEM0ZkRMYjd6eHhrZVhYWGJaZ1ZGVVdwUlRhTlpFZGxPbGFTYk1kQTVtUnNkYjJkYksyODMxVWpQYmVXZG5aeU1RQ0dEeTVNa29LU2xCZVhuNW1ENFB4b3hpNDFkRFF3UHE2K3ZSM055TTl2WjI3TnUzRC92MzcwZGZYeDlDb1JEQzRUQUdCd2N0NVdiT1hDRGNHRUJldlFtbWVoTk0wRXNBSkU2OVdRcnUvUTgyVkV3cExsNHFpdUtaUitMLzFibTNIWk1DdVlmY3RvaFNpbDFOemRpL3Z4dWFxaU1TK1c0Mm4zUzdQUkJFRVZtWldTZ3NMQmhWYlRRMzcwYlh2bjNRVk8ySUhUTzMyd05Sa2hJcU5VVlIvcnVxcXVxLzVzK2YzOElCTFJuVUVwbWQ2cERaYVFITm1FMWdBczBvWkk5WGFGNnYxNEphUmtZR3NyS3lNR25TSkJRV0ZxS2twQVJUcDA0ZDgrZkNtQVFiQUxTMHRHRG56cDBXM0RvN08zSGd3QUgwOXZhaXY3OGZBd01EL0dpL1lYRFROSTJZdzV2Wm1EOEdOMmFlc3BGL01nODNBTTVQUHExYWtKT1RlLzdoNnRRN0VBNGgxTjhIZ0I3MlJwTVQ2OWhidXE1dmJXeHNmTHUwdExUV1ZGeDJsUlpMb05LVUJDcE41elpxV2pCSm9lWXgwem44MW55Q2RDUHlhVUt0dExRVUJXWWx5VmhmMGxoOTR3VUZCVENyRG1BV3hWdTNpY3hWMDBTbGdpQVFRUkNnS0FvbGhMQ0dsL2JBZ2hVcEpZUXcwOVE2QVkrZmU5ejdKU1VsbXg1KytPRXpVbEpTemllRWZHM2Q3dmY3SVVrUzh2SW1JUkFJVEh6cngvR2lsTzVvYjIvLzY4S0ZDNnRxYTJzWnpPeSt0SmpOaDhaRHpSWWNzSVlYVTFFVXFTaUsxdmRCbG1YS2V1NHhxSG05WGd0cVJwREFiRHRVV0lpeXNySkRIdjA0QWJZanRISnpjOEdhVVBLQVN3UTF6dmZHWmlFU1JWRkFDR0VKdlpRT0RUWFZiV2toR2dEVm5HK3FtUDQzNWR4enozM3JqanZ1K1BEV1cyODlQUzB0N1h4Q1NQSEUxM2RpSlFEYXJxNnVyci9lZmZmZFc5ZXNXUlBsVE1sWUF0T1QzU3AyczVPZGk4eVh4aWF5MjFXYUxNc1cwT3hRWXdFQ2xzNVJWRlNFc3JLeVllMkV4cndwMnRUVU5PYi9FNUZJQkkyTmpWYTBkTisrZlZhME5CUUtZV0JnQUlPRGc0aEdvNVpaYWhib0VsWXp5Y3hTTG1wS2JLYXBTQ21WbUluSytkOGNBSnkzM0hKTHloVlhYTEV3SlNWbDZUZHBham14eGhYUUd2ZnYzLy9tbWpWclBuMzIyV2NqSEtDVUpFQ0xjYkN6Unp1WlVyT2luY3o4NUt3VXE5czBVMnQ4b0NBMU5SVnBhV25tM004QUNnb0tVRnhjREpmTE5lNk8vWmoxc1NVNGliQmp4dzQwTmpaaXo1NDkyTHQzcndVNEZsUmdnT1A5YnN6M3hnR09tRjE5Q2ZPL0lUNDFSSVFSWEVnRU9NZnk1Y3Y5SzFhc09EVWpJK05jUXNpTWlhLzNkOUtIVnRQWjJmbTNYLzNxVjFYUFBQTk1kQVNnMlRmRk5EdFZEbVlhYjNiYVZacXAxT0tBbGlqeXlZREdVam1LaTRzeGJkcTBNWnZPOFowQkcxdE5UVTFvYkd4RWEydXJwZDRPSERpQXZyNitwRUdGQklHRnVNZ3BVMjhNY2hqS2ZVc0t1T0xpWXNmR2pSdFB5czNOUFZzUWhCTW12dTdqZjJtYXRybWxwZVhkazA0NnFicTF0WlhCaVFlYWNoQkFZOCt6QWdNQUtCL3haQ3FORHhBa0N4S2t4RTFuRHlBWURLSzR1QmhGMzlJZzR3a2YyOWRjUlVWRmZGdWpPQi9jS0FFR2RpVms2bzFxbW1ibHZjSE1kVFBWVzF4d3dlWi9pd0Z3TkRZMk92THk4dDRGOEZGZFhkMmNvcUtpaGJJcy8zamk2ei8rVmpRYWZXdjc5dTMvTTJmT25GMGN6SGlWRmtzQU5TVUowUGpnUUZ5U0xhL1NlTFBUNFhBTTg2Y3gwNU5QNXlnb0tNRFVxVlBIVlpEZ093TTJ3QWdxOEgzYlhDNFgrSlBBRHJkSUpHSUJMaGFMV1pGVEJqY3V1RUQ0a1grc1F3aU1mQ0lWZ0dJcU9BdHdBQnhsWldWYkFIeis3cnZ2dmpwdjNyd2YrSHkrc3dFRUo1QXdwbDBmcmYzOS9lKzgvLzc3bnkxZXZIaGZFcUFsZ3BveWtrSXpMNWg4bEI0c3BzV3RrSlR5QUFBVFRrbEVRVlRtQnVpNlRuVmRoNlpwVmw4eVJWR3NCSFdtNkJ3T0I4TGhNTnh1Ti9yNys5SGIyNHZ0MjdkaisvYnRoK1VZK1AwcEVFWEJTaG1aTUVXUG90K3RycTRPemMzTmFHdHJ3OTY5ZTdGLy8vNFIvVzVtS1ZiQzRBS1gxQXZUTkdXbFdYRkJCcHVKeXB1cU1nREhKWmRjNGxxNWN1WDhuSnljMHlSSk9tMENFMk5ucWFyNmZrdEx5Ly9jZE5OTnRYLzV5MStVZ3dTYWtnQm85cUFBZzVsT2lBQ2p4bE9nZ2loQ0VrV0lyQ1JLa2lFN1pEaGtCNHlwN0taU2M3dmg4WHJoOS9tUmttcU14c3ZLeWtKdUlJQmcwQWdTSEFsL1dwakx3Wng3RE9WZ2ppdXdYWFRSUlhqMTFWZHgvZlhYWS9YcW9YNWZyYTJ0YUdwcXdnMDMzSURQUHZzTTU1NTdMZ29LQ3BMNjNiaUVYcGgrdDVHQ0MyUVV3RWxKQUNjRGtCY3RXbFN3ZHUzYStUazVPUXUvU1Q3Y3hEcWlGOGdkUFQwOUgzejAwVWRmTEY2OHVKdURVaUtnS1VtQXBpWURtdGtqa0RKZkdoRUVpS1l2VFJRTm9FbXlXUm9sT3lBN0hIQ2FVSE83WEhESDVhZ1o2UnhaMmRtbStUbjVxS2lwenIzdHlKc1VPR1p5TWNlZEtTckxNdDU0NHcwODhjUVQxaFVxR0F4Q0VBUlVWMWNETURwMUJnS0JZVDQ0ZXk1Y0xCYURLSXBRRklWbGRaTkU1cW5OQjhjNmhRaW1pU3B4SnFwa252QVcyTmF2WDE4ZkNBU2FBYnkrYmR1MjhxbFRwNTdnZHJ0UEF6QlIxZjd0d3F4dFlHRGdnNXFhbXFwNTgrYnRaajdWZ3dBYXY2bW1RdE1TbVp3TWFJSWdVRXFwbVY5cEpOcUtrZ2hKWkxXZUVtVFpZU2cxRmlSd0dwRlB0eG41OVB1TnlHZEdaZ1p5c25PUmw1ZUh5WVdGMXF6Tkk3MjhQai8yN3QwN0FiWWp0UllzV0lBTkd6Wmd5NVl0bUQ5L3ZuWC94bzBiTVdmT0hHemR1dFVxOWpVbnpjY0JMaHdPVzBHR1NDUmlBYzVVYjlRZVhOQjFuUTh3SkFveWFBQkU4NG90VVVvWjJPeEtUcDQxYTlibkFMNEM4UHoyN2R0bkZSWVdIdTl5dVU2WmdOelJnOW5nNE9CSDlmWDFYMVJVVk96aTFWVVNvS2tIQ2JPRVFPTURBN3F1VTFtV01VeWx4Wm1lVHJqNGRBNnZGN0ZvRkZzLytRUVhYM0lKTWpPemtHT21jeFFWVFlrYlJQeE5WMjF0RGQ1KzYwMVVWTXpCNldjTUw1WDJlbjBJOWZjZU01L2x1QU5iUmtZR1RqMzFWRlJXVnNhQmJkMjZkYmpnZ2d2dzZhZWZJaGdNb3JTMEZCNlBCelUxTmFpc3JFUlBUdy9jYmpmS3k4dVJuNStQd2NGQlNKS0VuVHQzWXQrK2ZkYWdFMG1TYUdabUprUlJKS0ZRQ0pGSWhJcWlDTmF4RndBUlJkRUNuSzdyZ21sMmlHYmtWRFJQZkdhbVNnbEFKNVdYbDI4RjhEbUF0VjkrK2VXMDR1TGlPUjZQNTRTSjNMakR1M1JkcndtSHd4L3YyTEdqNXZqamorZVZtYzZCYVNTZ3FSelE3T1ltaTV6VFpFQmo2UnVxcXNMaGNFQmtIVGtrMDRKZ0tzM2hoTk0xM1BUMHA2Umd6bkhISVJpY2JLUnpGQVNSazNONG81NVBQYmthalkwTkdBaUhoNDFsNU5mUkhDeituUU1iQUN4ZHVoUVBQL3d3SG56d1FRREE0T0FnMXE5Zmo1VXJWMkxGaWhWSVQwL0g3Tm16VVZkWGgrZWZmeDZYWEhJSkNnb0tVRnRiaXpmZmZCT3lMQ01ZREdMMzd0M282dXBDYVdrcFpGbEdUMDhQOXV6Wmc0R0JBYVNtcHRKWUxJWklKRUowWFlmWDY2V2FwaUVTaVVEWGRTcEpFdUdpcU1TOFdnczJNNVd2YU9BM0huVFM3Tm16dnpDVjNLdnIxNitmTkhmdTNPbHBhV2x6WkZrK0FVRHFCSjRPYWZVcWl2SnhkM2YzbDVzMmJXcFlzbVJKTjRZaWtjblVXU0tvOFIwMlZOdHpkVTZoVWI0L0drdXdGU3dmbWhIQkZBU0JPcDB1UGo4TnNzTUJnUkRzM3IwYm1xcENsQ1RNbmpVYitjRWdLQVgrMzl0dlFSQUVwS2RuNEpISEhyZXNrRit1V0k2MnRqMEFnSjZlSG5pOFh2ejVsZGNBR0oxeG52ajlvK2p0NjBWR2VnWnV1LzJYMXBBZUFIanRQMTlGWmVVNjYvRUFjUFUxUDRQRDRjQ3FsUStPbVE5NVhJSnQ4ZUxGdU82NjYxQmRYWTJaTTJkaS9mcjFtRDU5T2dvTEM2M0hlRHdldlB6eXk3ajQ0b3R4N2JYWG9xMnREY0ZnRUtGUUNKczJiVUpGUlFWeWMzUGg5L3VSbFpXRlNDUUNuOCtIZmZ2MlFkTTB1TjF1UkNJUkFLRHA2ZWtRQk1FeVVWVlZoU2lLYk5ZQ2k2SVMwelFWelBzWTRFVHppeUtacWs2MFFZNEhuYlJvMGFKZEFGb0EvTDJpb2tKKzdybm5pb3VMaTZmNWZMN1praVI5RDhCRUsxMmJrRkJWOWRPK3ZyN3F1cnE2eHF1dXVxcTFwcVpHdHlrenpXWTZKZ01hRHpQK09ick4zTFFVbXJraEdkQll6elJDQ0Z3dTF6Q1Z0cWR0RDNLeWN6Qjl4Z3lvcW9ydHRiV1kvMDhuSUQwOUhkLy8vb21JeGFKNDlaVS9ZeG8zMy9UK0IxY2FCTy90d2MrdnVRbzMzWHdyQUdQTzUzMi91d2UvdSs4QlRKbzBDZS84YlQzV1BQVWs3djdOYjYzblZzeVpNNnp6c01QaEdITWYrcmpOWTF1d1lBRmVmLzExekp3NUUrdldyY041NTUwMzdISFYxZFhvNnVwQ1pXVWx1TWxXMEhVZDJkblpjTGxjYUd4c3hNNmRPNjAwRVVWUmtKS1NBcS9YaTRFQm80ZVgzKytIcG1sVVZWVU1EZzRTVlZVaHk3S1ZhMlJHVVZrK0VqWEhhUTFUY0thWmFsVTJjSkJMQkR2cGl5KytrT2JPblZzTllEdUF0d29MQzhXWFgzNTVjbWxwYVhGcWF1bzBXWlpuRWtKS3Zrc1VvNVRXeDJLeHJ3NGNPRkMvZmZ2MjVzc3Z2M3h2YTJ1cmJsTmxpZFJaTXBWbS9ZNGxZOXYrQnU4M2l6TTNlYUJ4Q2VCeFFHTUtqUkFDdDhjOWxNWmhtcDdCWUFGMjF1MUFXMXNiU2twS2NNbGxseUVqM1loNkJnSUJSS05SdU4zdVJDWTJmblAzcjNIMk9UL0d2SG1HUzJiWHJrYTB0cmJnRG5OZ3QwNTFlRzFEVmNyS3BxR3NiTnFZUHcrazhYcUNMMTI2Rkd2WHJzVnR0OTJHdDk5K0cvZmVlKyt3eDZpcWlsdHV1UVUvL2FreDA3Szl2ZDFxT1M2S0l0NTQ0dzI4ODg0N0tDNHV4dVRKa3pGanhneFVWVlZCa2lUNGZENXJpSXZYNjdWU1EyUlpwdEZvRkU2bms1alJVMnFMb0RLd1dWUHNLYVc2ZVIrRG5BQWpSWUF2d0JkdGdCdTIzOXpjTEo1NDRvazdBTlFEZUJlQXVHclZLdC9wcDUrZWw1K2ZQOW5uODAyUlpibEVFSVJwTUhyTGplVVYxWFY5Unl3V2EranY3Mi9ldlh2M25uZmVlV2Z2blhmZU9RZ3VKMndFbUNXRFd0dytwOHppekV5Yk9xTTJvRkcra3d6ZlljWU9OTFlCZ05mampROFFlRHpJeTh2SGpPblRjYUNuQnp2cmRxQzlyUTAzM25RTEp1WGxJUzh2RHp0MzFpVThPUC94N05Od3VWeTQ3UElyclBzVVJVRWdFTURhRjE0Yzl4ZTRjUXUySlV1VzRNWWJiOFRUVHorTnNySXlUSmt5WmRoanBrK2ZqbTNidHFIRUhLWlNVbEtDWjU1NUJoczNic1JWVjEyRlRaczJZZUhDaFZpd1lJR1Y4N1o1ODJhNDNXNzQvWDVycXJYWDY3VWlwdzZIZzVrVmxHOW9xV2thQkVHZ3FxcUNVZ3BSRkNtbGxKaEJCOEtwT0ZaNFR6aklDU2JraEFTUUczSC8xbHR2SFFUUURhQ0dNMzJGeXNyS3JQTHk4dXlzckt4Y244K1hKOHZ5SkZFVWc0U1FBZ0RIU3J1SENLVzBSZE8wUGJGWXJEMFVDclYzZG5aMjFkVFVkRjk0NFlVSE1KU2RyNDhDczJRS0xlRStCelBkRGpNTURRQ2l5ZFJaSXFEWml0YXRqVVhqQWNEbjk4ZVZSdmw4UG16ZCtnbW1UU3ZIcWFlZUJyZmJqWHQvZHcrbWxaZkQ1MHZ1Y2RpNGNRTSsvT0FEL1B2VHo4WWw1WmFVbEtDdnJ3OGZmZmdCZm5EeUtXaG9hRUROVjlYNDBZL1B0UjZ6YzJjZHFxdTM0U2MvV1RvQnRtTnhCWU5CekpzM0QzZmRkUmZ1dlBQT2hJOVpzV0lGempyckxOeDk5OTI0OU5KTFVWTlRnK1hMbCtQbW0yL0dqQmt6a0pXVmhZNk9Edmo5ZmlpS2d2ZmVldytSU0FTeUxDTTlQUjM3OXh1VHozMCtuMVd4d0U1U3Q5c05WVld4Zi85K3FpZ0tmRDRmSkVraWc0T0QwRFNOTWo4R1N4Y1JCSUVWMjRNQmJnVElXWUN5ZFIwWmFlT1RoNFVsUzVZTUFOakQvVjMyR3VUUlJ4LzF6Wm8xS3lVUUNLU2twcWFtZUR5ZUZJZkRrU0pKVW9vb2lpbUNJUGdJSVQ1Q2lKY1E0alpCeUJvQXNOY0NCd1pyYkJ5bGRKQlNHcWFVaG5SZEQybWExcStxYWw4MEd1MGJHQmpvNytucDZXdHZiKy8vOHNzdlE4dVhMeC9nNEVWdElLTWp3RXkzS1N4dHRJMTEwVWdBc2ppWThTQURTNmcxcDZUeDVpYURtYTJ0VUJ6UVdOODBwOU1KU2lsU1UxTnRyYnRUY2RaWlA4Uzc3LzQzR2h2cTRYUTZjZWRkdjRMUDUwTnJheXR1dnZGZm9TZ3g5UGIyNG9Memx1QWY1ODdGN2IrOEU2c2Zmd3lSU0FUWC81K2hDWktybi9vRC9INC83bjl3SlI1NzVHSDg0ZC9Yd09QeDRHYmI0T0dxeno1RFplVzZNUSsyY1ZkNW9Lb3ExcTFiQndCWXVYSWxicnZ0TmpRME5LQzQyT2dCS1VrU1hucnBKVngwMFVVQWdELzk2VSs0Nzc3N1VGOWZqMEFnZ0t1dnZocDMzWFVYQ0NIWXNtVUxycjc2YXRUVzFzTGo4YUM4M0ppdldGVlZoV1hMbHFHMnRoWi8vL3Zmc1hqeFlxdHFZZGV1WFdodWJrWkZSUVVVUmNIT25UdWhxaXFDd1NDYmxvWHU3bTZtMUNBSUFqdXhDZWVMc3lESDloTkFMZzUybkpvVEVvRXN3VDUvbTJqalgyZWtEUWx1N2Z0eGJyQUUrL3p0U0pzZFpQWXRtVW9idHM4Rzl5U0MyR2d3WS91MnhxVUhCVFJlcGZITklIdDZlakJwVWo2OFBpLzhmbk8rcDFuQW5wc2JRSDUrL2lHTndmczJWc1BPN1RqNTVKTW53RFpXVm05dkwvYnMyV1A1Myt6MXBteDRqTDJaSlZkekNtNE1vRlc4ek14VVBzakF5clc0c2kzK2N5STIwTVZCamxJUWdBNkQzU0grbkFoc1BPQ0VCRkFiQ1hBandjME9OQ1NBMkVnS1RVK2kxdXlPL1ZFaFpuczkzbS9HWUdiZGNxYW5mWEEzdFhkdFpqQnp1ZHhJU2ZFUGF3TEpGRnAzZHpjS0poZFp6U0F6TWpPdDRuSy9QMlZNZkUrT0piQ05HMVAwaEJOT3dPYk5tOGRjRUkrL3lLU21wakx6bEhKZEhBalgzWUVRUXVKVUhJeHhnY1R3MDBFQUNFa0VKVW9oMktCSFJnSGFTSEE3Rk9WMktHQTdGTE16R2VDb0RXZ2pBVXkzQXd3Z2xCQlFnSUFRQzJRR3pBUUJBakVoSmdvUStSSW90aG1sVUVOcVRaWWhDQVFDSVZBMURkbXBxY01hUWZyOWZoQkNFQXdHb1drYWZENC9VbE5TNGZWNDBkZmJoNzdldm1QK1JNNFBIbHZOYXNZTjJEWnQyblRVWG9zZjJOemQzUjNYeURJY0RvL1VxZGRTYm9xaVdNck5WRzk4RFNyaEZCemxsQnk3cFRaVGxjRkU1OVVkcjdJSUFVa0VQUTZTbzRGTUdBVm95YUJHRWtCOE5MVkdreWkzWktCamNOSkhlZzV6OXJPWnNwenpQNUVxczhHTVFCRFk3RnFCQ3NMd21ScVNKQmxnazJUSUp0UWNacUt0MCtHQXJ1dVFKQm1abVpsVzVRQnJCQ21LSW9xTHB5TGJuRVV3c1NiQWR0UlhRVUVCY25OejBkYldablhwVFdTZXNvNGhJd0dPM3hqWVJvTWNCemhvbWtZSmt4aERRSXVEalUzaHhVR1BTejBaQmpEVHRCMEpaRWZTeDJiN21TbXBwTUNqaVo3UGRjN0FzSDJEOWdiUUNBRUJBUkVJRlFoQm5Eb3pGQm9WQlFHQ0tFSzBRMDJTSUVuTXAyWkFUWFk0NEpCbE9FeXowNmdxRUNHS0FnS0JnTld1bXpXQ2xHVVowMmZNT09TQjJSTnJBbXlIZFRrY0RoUVZGVm1BNit6c3ROcVE5L1Qwb0wrL2YwVC9XekxBY2Y0M3E0TUlEemt1aWRpQ25HbWVJbjY0UGEvY0NFeEFZUWgySU93N25neFlOcFUzcWorTnNuMDZpbUlqMXMzQlFHNFU0UEUvRytZai8zZHNUbjhBb0xwT0lRZ0NESjRSYXZZL0E3R1VtY0FGQmtUVDdEUnZlWVVtTW9YR0FjMVVhUEhCQVRjOEhzT1hwaW9LSmsrZWJMWHJadE9pb3RIb2lGQWpWVjBnVDFZQjlUMkgvMlF1U1FPOS9qalE0N0lud0RZZUY2VVVIUjBkNk96c2hLcHBoMVRVRzRsRTBOL2ZiNW1qYkV2V3lKSnRsQUk2cFpBa0NVNm5jeVRBUWRNMHZwckJncHdnaUtCVXA3cE9UY0Rwb0JTZ29LejlLZ0JDVFBDWjMzZVlJQndPS2k2Z1JFYTVqZHUzZUhWdy9RenBJU3E1K0RlZjRIZGN6aFpsK2MraUtGclBZZWFscG1rUVJXa1l6QWlmZzJiNHp5eW9qZVpIazAyejArRnd3dUYweEFITjR4bWF2RDRRN2tkcGFTbHljbklRQ0FUZzlYb1A3Z1JiWFFVMDlCeVpFNysrQitUSkt0Qm56NWdBMjNpRVdsVlZGVUFFZUgxK2VMMCs1SDZOMWxLRGc0UG83T3hFZC9jKzlKaVQ2ZnY2K3hBT2hSQU9EMkJ3Y0FDUndRZ2kwUWhpcG5vYkdCeEVKRElJVlZHTXEzcGk4elJ1WTRwTlZWVklrZ1JkcDBTbk9xaXV3d0NjTVJxVlJXVk5BQkRaNFlCdW1ycU1SeXk2TjhRbkFrN05JWWw1eVlNU0IyR0NqZ0kyQWtLU0FpNE9XUEdQNDM0bWhKZWFvSlJhZFpqcy8wZ0lNU3BFSEE3bU82TU1haGJNREQvYWNMTnpSS0N4dGtJdXVOd3V1TjBlZUwwZWVIMCtwSmpwRzJucDZRajM5Nktpb2dJZWorZVF6aXR5cEtER3dXM0NGQjJIcTZPakF5QUNjbksvV2JkUnQ5dU53c0pDQkFLNTZPcnNRdmQrTTdqUTIydVpwd01EWVF3TUdEQ0xScU53ZXp5SXhXTG83K3VGSkVsd3U5MGptcWhNdFdtYUJrVlJJRW55VUpCaENHNUVWWTIvNFhRNnpjZVkvamhSaEs0YjFsczBHaldVaWloaXlKWkZITmdTcEFReGZtQW9ka0VUWGl5U3RhTm1iYURpMVpUMVBHci92Wm5ReklQTkFsZ0NwejhJSWRBMERRNkh3d0lhTXk4QndPbHd4cWRxaUlMMUdWRks0VExyTkYxdUYwUlJ3aGVmVjFsLzErUHhvS1MwRkhtWm1YSHBHM2FGNXZmN2taS2FpdlQwZEdSbVpDSTdKeHV0dTVzT0dXb1Rhd0pzWDN0MWRuYkI2L01mdHIvbmRMb1FMQ2hBWU5Ja00vZXQyMUp3L2YzOUNJVkRHREFWM09CZ0JORm9CQTVaeHVEZ0FIdyszNGcrT0g2THhXS1FaVWRjQWI4Sk9LcUdGQkJDNFBmN1RSVkhDYVU2ZE1wTVZtb01yeUVDWkVuaS9YU2N2MjdJRmNZQnovcUhETzBOZ3g4Yk5HS0RHMVZWMVlJVnBZQ21xU0NFUWhDTWFneEZVVUFFQVpKb3ZDZFZWYURybEJyRjRrTXF6WEw2MnphQkdDYW1wcW5VNVhJTnl6ZGo0T0toRmdxRkVBcUZVRnc4RlM2M0czczdPdERXdGdlelpzMEdVMzNmTzM0ZTB0TFMwTmZYaCtwdFg4THBjR0xHekZsd213ck40L1hBNS9XWkxib05oWmFSa1luczdPekRtbHliK2Z4aUtOV2Q2RnYxdndDQWpDZCtpSUczNmhCNXB6N3BjL3pYSFEvbktVWFlkNEhSanNoNytXeElVOUxSZTgrSEIvMjZveldiUEpiVy93Y2FMdGJ3dU9MVHF3QUFBQUJKUlU1RXJrSmdnZz09Il0sWyJzcmMiLCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVRZQUFBRTJDQVlBQUFEcnZMNnBBQUJLb25wVVdIUlNZWGNnY0hKdlptbHNaU0IwZVhCbElHVjRhV1lBQUhqYXJaMXRsdVc0cldYL2F4UnZDQksvT1J6eFEydjFESHI0dlRjanMxeFZ0bC83clc2WHF5SXo0c2E5RWdrY25BTUMwTFgvOS8vNnJ2LzZyLzk2U212aFNybTIwa3U1K1YvcXFZZVhQN1Q3NTMvOS9QZTUwL252K1Y4c3YvNzAvUFg3MXg4L0NIeU52dkxuQi9YOStmcThmRC8vNHhkK2Y4WXovdnI5cS8zNlNXaS8zdWpYRDNqam55dndrLzN6K3ZORjh2M3c4LzBuL1hxanZuLytVSHFyZjc3VThldU41cThYbmt2NTlXLzY0N0ordnZqMzZ5L2ZxS3pTeW54UURHSEhKOTduditubkN1TFB2eS8vMXZQZndPdWVHUG56RTl0MXZ2eStKUmJrTDdmMysrdDkvM21CL3JMSXYvOTAvWDMxLy9qVDN4WS92TCsrSC8rMmx1WFhHdDNsWC8vZ3lYLzdmdnpqWThKZnpPR1BLd3AvL2NFWTZaOXY1OWUvMzdmYTkrMmZ1M3RUWVVYTEw0czZpLzM4Zmh0ZU9GanllSDZ0OEUvbDM4eWY2L21uODArNzMzdXk1ZXVlOStDZitmUW5zQ3ZmOWFSblBlL3pQZnQ4bmMva0VsUFlvZkkxaEJuaStWNkxOZlF3by91VS9PZjVRbzA5cnRqWXl4bjJ4ZmFsR1A2NGx1ZDhiaitmTjUvR0o2K0hsNGFITjN2NGxYLzd6L1hmL2ZCLzhzLzFmZE1sZXU3MngxcHhYVUc3NWpMY09mL0xxOWlENS91MWIva3M4TzkvZm0zLy9TZjd3VlRad1h5V3VYR0Q3ejErM21MazV4KzJGYzgrUjE2WCtmcXp5YzlWMTY4M1lJbjQ3TXpGUEpFZHVNc1Q4MU9ldTRaUW40ZDFiR3pReTVXSG1NSmdCNTZjdytJaVE0cXhoS3VHRnZ4c2ZxYys1N1VoaHhMOE50akVSdVJZOEszR0RyMXNWa29aKzZtcFlVTnZqam5sbkV1dXVWMjU1N2ZFa2tvdXBkUWl5TDAxMWxSekxiWFdWbnQ5VzJ5cDVWWmFiYTMxOXZiUUl4aVllK20xdDk3Nys0YnI1WU5lM3V2bDlTL2ZHV0hFa1VZZVpkVFJSaC92eEh4bW1ubVdXV2ViZmI0cnJMaUFpVlZXWFczMTllN24yaURGVGp2dnN1dHV1Ky8zdzlhKytLVXZmK1dyWC92NjkvNnhhNzkyOVovKytSL3Mydk5yMThMWktWOVgvOWcxdm52Vit2c3RIdUVrdTJmc1dFZ1BPMTdkQVF3NnVHZDNlMUlLN3B4N2R2ZUFVK1RBUldiMzVscVBPOFlXcHYyRS9EMS83TjAvZHU0LzJyY3J0LzlvMzhML2JlY3V0KzcveDg1ZGJOMC83OXUvMkxWbG5KdG54MzY4MERXOUk5N0hhOTdBRlgxamZmeTF4QysvOGF2ajI3TnVZZElmLytjL3ZWN3ZaNy8xNFY3THUrcFRjMGlsdld4dUhKM0xHSFBpVjJsRUwyVy9pWmVNSGRMWFdueTVnOW5XTSs4OXJqQm5ITHUySis4NmRzeGZlNEc2Yit5MVY1NEplOXFUejFxMTMydnQ4WEFmTSs5M2pUVkNHbnp1RS9vTXFWNVA0NjBtNjRYMTNYdlhtUVkyc0wrWTcvNThOZTM2OExPWTU3M21IcDN0SFBVZVQ4cGpzMk9BLzhzdVlsVFhUS0xWcythcUw4UWt4MDE0ZmRmTE9uUXVNZVRCbmxiV0o0elNBZlkzei9xTlZOL3dMU3hyZmlYT1hFZTZJRFYxM2l4R2JRbUQ3a1NaM3N2M3NNRmYzU3pHSFB4eHhhL05MOXhjbnY0em9DRjE4cTZ4em9CenpxOWRiZVdTMG1LZFpyNUh1VnNQN1BzY1FIN2ZxNFUxUzF4aHJQdEwrVnNZMEZ6NFFZOTVyeHBxM3lXd0VTbVhxN1NIUGZscTV1YU1OK3U3Mll6TzY5ellmN1A1ejh5cmNUSEFRU3o5dTBjcTF6RGd4YnVVdFFhd3dxMkZ1UEVqREJPempXc1V0amx5S1hQRS9QSUpCY2QvQjUrODQ2aGN5b01oOEd2WEdNZXEvanVMK3hjL202V01XUGFZOGNPcDkyemZGZFlxSGZlT2liRE9QV01iS1V4WHBzYzJWL2JXMWo2MytYd3ZZUC9IVzJNdEliQWhSUHIyZkJlaC9RRjlGbUNDS2ZXNXVjZit4bEF4NG1lWHdYS1g4UlUrdlJSODh5UENZeWZ0VGZlYldudDVUOHg5cm5XMTh1VUppSDNIbk1xTERYNy83Z3ErZnZQaXI2VnZ4L3B4UVRHTnNIdGJvT1Axc29QOHRYd1JBTUs3dVVwUUROOEhGVWJuZm5NQVNjU3MyT1YrNzdOZWJDQWFCUmYvNW85WDc2OWVVaDR1dnRmdmlkL1ovZjAxWGVGbGkyckJXcDVaZ3VheTg0UW1ManhrOC82c0lleUdUMzIwbFRCaHRZU1R4SWNrUFF4My9QYWo1dzVzYW9SbnZQVmpLN2orWTVjZE1LNndCUmN1MWRiZkwvTGhrWGU0TmxHNmw4YU9EdWdTSzFSVCtiQmpYamxITDl0N1h2eWhGWmFraDZmbkcyc0xLUWZ1YjcvUzc3ckc4MTZwakZXZWQvSXBnR3R2QkFLd0dPTi84bHZ6UitCdk5VN3dsTC9PQXo0enB4YjN5Q3pNZmpUSGNXTlUxOE05Vlp6MFRiTTI3aDVIZTlkUkVKbTlsSTdKTGxMQTEwSmdKZitkeVY3L3VUMC9YdkhLR3c0WEpqZk5CUmNpVCtjZXBEVTN4amVCVlR4YU9scER3VEtKcnZVdEd5TnM3eTdsRzREQWdwRGxjdmZSaW12RVJZOUtHSjFWVEhvSFY5UXpWREVCcHBPUXBya1dQclR6eWcxdXdubjQvL2V5aXJFTllKS1Y0cDc1MHpEMkFUdnN5VnBQdjhyVGRMV09OUUpRZk9KdThkQ3V6WHM5aEM4Q1lreEV4TWRQR1J1OGlnUlZJbWtwc2QwRTgvUmlHdnRhL1U0NWdvK2RuY2VuUzhaUUhseXJQeDE4WUo5bTVCY3FjY1pQV3FXK1h3dDdFakluL3NSdmJhSUFjWTM3d0ZyWjVrQkVYdW5leE0vK2VOc3ZpQU95RGRCMTE0Sm9Xa0REQTBaaE1jL2dkMGRxL1Q3c0crKzVRT0ZrVkRXQ0RZSmMyMVhreGVpK0F0QmtRaFBvY0UrQy9pRCtzN0oxUGp2aTl4M0dVeDlEenE0NVhXUGk3dkVSRU1EWXhrSnkrYnpsbkFUK0dybWlNY3F6dU0zYjBBUVJnT2g4SFN3Qi9pTitHU0FyZk85SzhTVThjaHY4elNVaHFtQzY1ZGtwRzhiQUpWWi84NHRuOFRHTGxnRnJJeFcvanprbHNBRXlFYStSRm9zT1FJNmF4U2hvRlB6cS9uYUFPc0MyOW9kWUxRTkNSZFFqWG96QUhjQWlxbWphMGlJY2Y1TjF1elpPQ0laRlNFZXF3RDZVWTBsQ3B0WURqRVNRc1M4aVRTRzRWakNzTkw2dXZaOEpmTVNWaGJFdnZWZEphOThnd2Q3M093aTNrV0NlWHV3OEF5OGY3L0h0WXBDNVUyRWxaOXZJY2JBSy8wT0xzVnZZUHB6dEprQytoT1FidXBkMHB6dXZ0VUltM0w3YkN3VUVTc3o1V2JsQkhPdUhTM1BSbU1LUUpSTFNZREVmc0JIWU5SeStsd3gyOWxzdEJiemlRUnZDeHdkamZkQVVHQ0F4elVXRnhMVmFDT0ZqQTlEZ3hRZmRaSE1KSlJlNnpIQ0N6UlBlSVVoNE41ZlA0c1AxUUhaNDNzME5zVTRwRGFJbWRuQUxCaktuL3Y1Y0ZqZVc0eFV5UkdpK0hYTFlDLzZDeEFLVmNDUDhqaHNocU9abnZ3VG1zRGIybkVEVmlUTVFaZS9haVg3WUtKYXY4SXZReGc1bTk0RjVZRXozQjlvQUc0bUw3OEF3OUtqZzNVUjBkaDRFWjNYZW5OaFozcGRieFdUNzNudGRTMzVCTkFvWWQ0c0R6M2c3THZwSkEvQWFLQlp2Z0JNWDFuMjlXTW1jSGRiUmN5Q1lKU1ZXNVhkNnZmU2VSUGdJOEJ0QzlhdWR3Q2dtdUE2bEkvN2NCL1dRQmtBTVpCSytXTjVRRndxaDVBRlkxYzZQQm0vVWVQbHMzblhpVnJFTXBDQjBubzFEWDFlTUl4dm5lb05KZ2dFTHJjNmFha3ViVlhsWWw0VmxCUUlrYk1yTlRjMGRSY2VrR2dob3FJYzJjK3Q1NG9rVE13QXVRQWJlZTJFMWkxRDZRTVlDMGdDcVNlUllGOHl1bVNLQWpxVXFIaUJJY0E1NUdWRXdzWlJRcERrL3NHK3hJWVNyQ1UwQlIzWnVXZ3BzWWNMNTJEWEF2R3ZLUFVhaUF3SUtsd1dwV0hQelBmd1dWQk5ranRBd1RDT1diNzVnbm90K1FoV3Z3S25ydm5yQ205WUwyelR5UFRVQXpJUUw0REprZEFXWERncWhQa0NZWjIzZUhSd0JhTnhxMkdycU9BZzdlb1BaZ0FoNER1SnFodmRUalROcXNCY0pYVERDUkhSOTJNRHBad2dPTjJFN3c4cEJhd0l6RGxvRDRIb0I1SENMVURKNDlRYldDeFRpQW9uK3lBRHM1ZTJ3aS9LQ25FUVhqSGIzNXg0dkN4ekJVb0lJVzhyV29VV2dyMFFiL0hPTnBCV2ovMWl4VHVCaFkrK3B6NTUwR3lzRVJ0eHc1cDRqSVRkT0loaVVBRUo4QS9JUXJTZVZoWVlKUWpzNzdIMitjQ1F1R1g4a0hCQzhPemlGSEcwaEpjSXNZVk1nTHRndlVxVVNQOVVNRjBRcGp1OHVIeDZzV2duell6SG5VOEhrcitjS3h6ZFNBVHlURFlJa1RyYnVnVEFDUEJXVGZyR3JoRzllTDlIS1A2Sk0rUk5HVUpQKzZ5OTFiaVhCczdpcWdKNEMxQUhMaFFSQ1ZnU2tUSlE5WWtlNExOUVB2SWtkSm9DT2lsSTVDZEdBazlVWGhJNEVLWng4KzhHR090OFhxcGJDeTlvRFU1Q0t5cEsxV2NlRmZVd1l3cmNDb2hYOTNSTXNFSDdvVHNBRTBibThBUWd3Q01QcFViUkIwSTNGTDZRRW5JYTBzTXQzdmRBazMwTmNoS0d5cEhEYUpqWGV0MUliVStxVGk5azlaSmdmOVBnMWpIa0ZFektHRzZLRjc3SWgxd25oUjZqMXBpRGpqU1VPb05JTkZCcHJCeUdPLytCWmVzejc1YzUxRlJUbEJvbGJJT0psL0JwSngxWmVFY3YrakkxM2w0K0N3b0VZOUxLMlJFVmV5SjB2VE4wUFlWTUpGeDJUYXdneGdqT1lpeEh0UElDa0M3Y1lIKzhQNG4xTFRmNjlOMDZ2amdUbVVtaGdDNHVIdzRFbzJDVE9BZ0VENmlCVm53dUdSWS84dGdzMGpIc2hCRkFGRGZjTm1FcjJjeEM0aStCdUtxeXo2Z01uN3FBUXdaTm9qbmMxMVN2bUdIQzh1SEVSWGdrTWJzeEc1TWlHWVFKUWZrdDZBTmUzNFZITm5XY05EaUQxazFaRTQzNXZPekZwNGpBRDRjZkhzaE1Kd2hKZzVUQUZGdWY4MWdBOE1DZURVZHNHSWx5NUp4T2FJeExwMkRzd0Nza01uc0I4THZnQWZKeDlOd29Nd1ByZUlOM052UkM3TWVNWE80YkVUcFlmUHY2Q2cxd0ZpOFYxMXdUcmVnc2IyVWE0WkhNZ0Jhb2VpV3N1RmFOSlhMTThwQk5wOXRFb21NZUlDZUQ3eXJHemw2VmxLVEUvU0RaTFA1RVFnQXZrK05YamwyWkc0QWRsb0JPNFNDVlN3ZmlJSVpWL3YvNUVNelJJaVVlWEptcE9CZDRJWTh6clRSZzhrUVcrelc5WFdHRTBSVEpDeDRlSkVnQWdkd0h5ZkZONVh6RVMxUDQ5c0Z6bzMzb0VRWllsWHkwWjdER0w3M083SWpJY1RjbDZ2UUNJdjA0VWJrWm9maVdQRDFJK0V5U0JlQVBIYmZ6cFhRaUpIUzUwWU02OXcydkwvZ3k2QlBQS1Z2eGFEaGNqRVloUWliMmJnSUFDc3poUFRUZFJxYkcxeUFRV3RKbGhmL2c3M3hYSFM1QUJiS1FzMW82akNPeUFVaW96ZWJBd0VUVmZSZzM2U1lnM0tHM0pOK3ZORzdYd0JOamQ0SEtJK01BUGNha2k1SEJ0RERlais5Z3pqR0tZTU1USmlBQWcyNTM0WEZrTi9DR0doY1ZkRTB2ZUNrNms1YmNpSy8xelFkeUVseVRxSGE3MjVVR1lRREh6dVpHL29ucEI1WXJTZlJDVGZVTkdZZFkzbkhQSVpBSnlELzZjWHp3S0JvblBjU1BBRlpyUGU0WlZ3ampHcU1Yd1NpUjhOUERPeFNDenF2RDVyNWFWZ0lpWVJKTVVSRDVlOGI0cVB2aTdGNU1DNzBjb2J4Z3BrcEFyWWkraEtZcUxwZDhrNGlOMyttSHBrS3FnWnNtNWhIUGtsWGx2K0lxWnRJNDc4VDJFMjI5YnYvN3BRaEFlS1BCekpnRlNZWTZzQ094dEMzaDNBS0lEMmlqZVJsbFcrOEdMSGlSUnV2aGw2VHVjSytKVmhJWU1PVUlPUURVS1pQOExMTWhtbFhCc3lEQWh5andtbDcvK3Rqdlg5M3R6Y05FY0Rqdm1EYmloblJPT2ovYVJma2MyQ3laMUNHRGJrREZ3RnhTcUs1dlVLMTlaRi9ybUlSd1Q3THhUajJaTUZXZjJGaWIvblpNNUtCd29RSGpkM0JaczlnOXovY2RGc1ViYks2OFpLL2x1MUU4d3pPK2g2MEs4d0d6OERWblJlSzhscjBWYXhOZE1MNlJ1OTNHYjZVV1dobmpCZkZPcnBzclVaVmtVaFhHRW9mMzlxMDhtWmtpMVRYK2lMWUFhK1hKOXVLSjltOXRtSFdDRkhicXlaaURXb0xpQWZDekhDQWRZWXFjbXZCRlFEMytEdDJic0dWNEhxUWFuMEtrUTlnNFRPNG1udHlKQ1MvdzNWOElLNkxHeHdqaFlyRkFOZjhwK0lCVXllUkd1Q3RFVE1ZVkE4SlIybTBNQzg5K0IvWDUxdythZ0tPd09rZmRPNXVLV3ltaWdCQXZxTEdnSzRNNTFuOHY0L3V5b2Y3NlFqejBHOXBDeGpTaEM3TVlQd1IrMkZPV05yL0QrY1BUU0c4Q0dWbWdOSlh0L0JWWUcrMFBCaHlHaEJOdzdJVFBCQUdXcVJQL3hxbzBnYVpnWTRQN2VBRGlrQVRWeTdlZUZ0dTZ0OW9KT1FjNEZGUmc2dlByRjFNR2VYVC9FK2dQcXBnOVdodFNGZ0FPK0NJZVozSXNLeEY3UVFlTDFjendqbTNzc0NNaUNlcXZUbzVTNGh6a24yUTF2bkRvNkhWb2tocXNMd1RUQzJBTUQyUmVobnNXQU0zU28yd2Z0aHlaQUdENTM1WG41VmFRbHdtdW13bTBRTk1DRkNEM0NOY3Z1N0RNZURVeU9aajc3aHg3aDVOZ0hVdElzMkRzVmlJYktiQ29hVnAwQ01haDVqQVAzZlRGTGVCVUVsaWdIUCtTU0wvVXVsa3pRM3JmSEhKQU9VQ3g2cXR5MGN5a0FlcnNYa3lVVEdCei9HZ2F2aEdRK1p3UGxIRmluUS8vUU8vREJWL2tIY0dXY0FkblU0RzRnYXpEQjRRN3lsakJicmpkci8zZy9QMkwxa1c5bXNCQVNZNkZZUk0xMzRaS1lEZnNpQVFFdkNTZDhDanNQaTNpZjIwVElSR3M4eE96cmcvM2locUJQV0RDTFlXb01BTnZiN0JiTFNweUcxU0NRUUY1QUdDZHBHeWYvekxtaVRKLzJGYyt1SUZxL1R2bUZyTWRmT0JueHlXVkxXN0R2aVZFaWtlRHhBMVdGbTBYc2hIVUI1ekJyTk1HRTFtNlBNd2hSWUUwenc1blFIZXphRFZqZUlCTnZqQTc1N3A4VTc0UmpMUE9rM1BkNGJ1K2ZVQlJaK3ZUR2N2a2x2OG85SW5CUDZBK3BKSnZoa1ZoQkl4ZFRoQkRlZ3hCUU5xSmtJQWlHai8vNG5UdGo4TisrVkxyZkNiWHc1NFZCQlJPaUd3R0E1Yk5sdkMxdlRPQUpDaXpUY1laMG9nSUI3bU5sWlE0dnRnOGVnWVZRUVM0K2VLYk5kaURjQ2FzREJ6Uk41QkY5TitXSlZ1bUhQUlYrQk1pOFQvbU1mcWw1MUMwYmVmZEVXdyt3cm5rd0F5MEU0d2xoRHh3VGkwRFRXSDR3M0V2b1l6L1pIUlYyQjd3emVJMndOK25yWWtUUHI1UTlpcFhGL3pLTWluai9JZ01CWFd4cHRpWnY3M2pqby9HQ2FXeWZLUUsyYzBFVEw2d05JYm9udXhYREFKbU8zR2tSaHRGdWRyaWFha1ZKODVZMzhTU1pSTWRBdUZ6SVUzeHVYbStlWjE0bWFqMEJ3eWFBL2N3T3NzcW1HRUJTTG4xZ0diZUhtaE5HVVFNQkNVYkt5N2lVMFJWak5jQ1NBbmdFYXJrc21kWEFJVmozQ25TakRKSS94Y3lCVEdRek82SThCNTJSMWR5NGFHZ3VLM2RBR2tCby9XTFZva2Vxc3M5c0R1NHhWeUFQVUdXK3o4UitzZlIxa3NFcG4zT3VBRkEwejRWMGpxbVNlK0tCRWFpLzBvVjFZRmZMQitlRFBZTVd3NlFGd1FkMmpJd2JnTnMzNEZxTEhZTUlSWVR2czhka2orSFIxNEtOTmMyZFQ5Q2JIOHdvOUM5NDZOV00vK0lzc2NuckpLQkRMd0xYTkY1b25tZUJoSVpCbk9ySnpPaVJ6Z002UmhEazM5aUpjMGhvRXgxM3JIQzhXYWJXdlcrY0JUaDdNaVRaL0RyeElSSEtzRGRDZG9OWThSVkhLQUR6OXF6UVE4ZTVJQU5RL08rY2xqNEJHWUI4Ukk0OEFSVG5nckVuM0J5RmpSRGJyUGlGcStVWUFXaENUWmxkb3d3djhjak0yRjQzbDJDKytiNkp0ODFjWHM5bmZZZ29BMFlJUGdMc1FOcDNlZnp0U1RCRzBIQ2I2YUhXTEo1d3VraTdScys4QWJTSFQ0V0RaVVRwalNjWGVZZnBYVDRjV0N4Z05wdTFjNFFWRXNDNWE2eWRwUnY2Z2pvd1BtcThrbkVKTkFEZzRubkJCMU9RcWQwSW5JRFlBc20vcTU4ak1OZzBQZ2pId084OHFuampTK3dKVUI4d0NnN1hJSlZRSFVEUU9MbDJuaDBIbmF6Zm5IeGE3ZFpFK0tYaVpNRWNqd29jM3Y2a0trWDZDQkFMRmgxTXNXV3VBbFQ5OW92cDRBYmZJcFJnMjFnWDZIdmwwbk5KcllzQkgveCttVWd6NW54b0hvZ1ZMR3NTM3lzd2hneGhkU3FMRkU1MGNrc3NCWUJBMStmaU0vT1RRQ1RJRFBqSmRYc1lpRDI5dGIxY1VvUWJ3dVhQZ2NPUXk2QUZjeXRtZzdjbnVSOVdoNnlMdkJHOENSYWJNcEg5UFd3SE81ZFFCNVQ5RjVJNkttTWRreGcvQ1p1WUhhdkpIc043MExZWW82eG1zbXZmbmMwOFlLRnBIQVQ0SUxFc0ZSL1ZOdkVQcy85a2g2d0tPck9oUHpQVzRXRkRmV0R4ZURuc2s4Vk83Z1g2RXdhU1lXYStjVWxSOFh0elNXQXFYQTRYR2NyZXdkM2s3bkVRNzdtUTBPOTNrdCtzL2NWR0pwT2trZjgwMWhhVlFjU0lyaUVPeko1aXhDdzh6R01jZGM3bUJ2VlN2TkVMajlpTkMvTXAyTkVEUzlrZllRTFcwSUVtTkllcUhsNFVqS1Ric3liUXROMTRXSXRZSzM4RHFUSWJXR2NrSm1Rek9KYzZlbnE0YlYxVHpQTGlEalJYN053RVRVb0pPMExhY2htSWZGbkZrcUZHa3dPdHN4ejNTb1VQdmdqZGNBc1V5a2xEd1RBd055N1ZFMCtXTUo2REcrSnNndzF6ZjZzUXVzZk45ZCtmbXNManpHektmbHpLUWNCL1F5OWdKN0QzaWVhMmtxWUFjdUZRQWh6M3k2WW9QMDljZjMwbDNEZUxUMjdZeWd0M3ZvSk9uWTM5aEk1VWdwOEZ5dVFQNnM3N3dpTHhCNEgrZVZqb2dvL2liM3cxaUp1UEJMT0pWMWgyOEl2NVd5STdzYWl1VHJBK0JSaXl2bWF4Z1d5V1dJYlFSZ2doemw1cDVWZ1FtbVhVQXNzaGlWZlBwcG90WnlqejNtYjVaR0t5Z1FRL0FoTUFYMFNlL3M1dFRFSUhFV2NyTldHUE9XMDBIMEhyQzlmSHZXWWlEQmJ2TVhEN3pWbHVTNDkrY1JZczhKQVd2LzZtTFloNS9JemwvMzRZME9WNUVKZHJqVXpHVnEyQXlJcVFMbkZxUDVVUjZCemUzK05wZkFVNCsvV0RYOTltTy9qQlpkVnFPblVHZUVvM2tmZXd5Y1NqWUtrU3pySlkwWURkQU9sdzVLVlQreFBqblp3NlFRdVEzT2tDUWFMUms5am1BY05NMlhJbHdqWVV0djJjU1NTREF6SDhzVzRsK2RvSm5udnVGc3Q0VDZWSnd0ZWdUU1ZzWHEyY1l5OE5SZHdmRjIvUVFnZG1lQWd1bU0zOFJlakpoS1ZIVndsNys5UXBpQWJ6a0lzWUlPaEVNL3RhRXVvR1NNRTlWT3NlcDdMTmc0MElyQVhoWG00RmtySHFucXh0REJ6OUJCNmg5RUhDNEFuSVVqMTlvU1ZqR3dvQ3ZHaWV0ZDBWcnVqQjdDczMwRS9lZkZzVGdUNUNUOFl4UFlMdVVHYmM0Z1Z5SStvdi9OYjZaaXdKWjRNWVdjdzR4V2FWSWp3aG4rTndaQ2ZpbDBqYlFYWW85N3BZZmdnazVBblVKdUtCRG9WWUFIc1lhZ3Jlc0hsK0RpeVc1c2NCZUZod1NhalRHM09GRTh3UDB2YXVhOTFjRWlJZGNLNHB2cWFNTVlMQ0JzQ1gyUDNqSkFETDEwWG1BTWdSQ0RjUmdzdUhmU1dKMmdJdUxndDdJS2UzQ0pDZTEzd2p2amJVQ3A0YXFoTFp5anBaSmpZZVFOTWV1MGtFendxNGR6WjFMZXdJNFpWYmdvUllWUWJQM2RDVzVmMmdRUmNYa3p5SUF3ZHhWL1FNMU1sVVRBZ25TbmJQa3ZCc0REeGN4SWx1THVnRy9rQ05lSkxqcnlJL0lCcFp2VmNqbU0zZ2dreVRJNFZ6TnZteWJjQ0ZyS1N5SU5mUmQ2ZzFCRkVxVDBxWXg0Q2RtM2oxdkJ5dVpDR0psSGF0RHdHUmNGSHJiS1pWWE5HalFleUp2MThlRk03aWdmWExDeXVZZzU1ODJGd1FGdmtMdVRXQmcwSXBhWEovY0l0OHZ4NjBiajB6RzlPN1NkZnJ1U1hqYUU5TTcrM3FjR1Q5bm50Q0xLelZZZzhDYnhQdVVhZmxZMDByR3BpQUZSZ0VCVGdnYWk3QWo1VENWaVgyNTJZOURTWEU3SVp5NUJmaEo1NHhFbTJJMU5FMWg3RUhhd0x3akFJcCtGN3ZCdjVhTGphUHhTZEFoNmN2ck1ManVWODZ6MlJwUmV0OGVnOE1EUGE4Q0hDc0FSalNJQTR4bnRTaFpTUHpNdGV3UGxRQ1dEZ3RsVWlzTWs2VndaTlFMQytCdVJQQThwczhJd0NOUjNyaTF1ZzlvMEp5ZTJ5ZCsyWFZtalU3MENQSVFtRmhrWGd4d20xYUxPN0lQT1ZSckR1OEZESzRnckMwNWI3OGc2UzIvcUwxNzFJWm5tejZ0S3BrZWtxSENzRWlzUGJhTWlDRDd4S1Q4V29ZMEloR0dTTCtZelVSVElSVmc0dncyOWZEajZBczBORUd1MStvOUtQOVB6eVl5M3lRYzMxN3dLV2ROZVFUc29kSUlpTVIxM0YvbENvV3ZLOHlkcnZOYVlFR1hQQ0cwelpQWDk2QXAyWXIxbUJtV0JwMHlsTW1naVp1aXNRR0t3WjMrcDFqUG13Y3FJV0FGQ0JuNERTU0sxSFpQSVduYVEraDRVUHlXVTdTTVAvazBXZ2xkT0h1T3hkVUIzdC9kMGpBdkU0MkIvZlM0TURaTHhENEpscHllN0tOOFdZZ2s0aUFtdjN3S0lncjhkd0NDZllpVzUxMUV6b2VOTnBGOEo0UFNKSFEwRjVreEtQakI4NWpEQW5SQXVONTljSkRZMTVQZ1hCOWhNczg1WUhFR2VCQzJMaHFoZm1EK096N1Nxd3ZoSlQxakUrYzM3MDhXdWU5RWFkVnM0SmhHZEMrVTFoMWt0eTlLT3gxOUN0Q01WWEVwWnRpeWRZMkE0Z20xdnNBN1ZvYXQvazI0ZXpUeGh2RzNpeFh3aThKWk1OeU8yNG5YRVFmMUw1SEwrWWZlVnQ4SW5ETkNPZlFCdXVaVlNqZDAraVp3azhkMnd4QXlNTzJ6NGdmSFpIYk1FaENDdHpIWWdGWVRGdk4wbU5DMVNMMlZpVU91TElIak5yaWt3MWZTd1ppWXQwSDBDb3d1WUhBclJHd1lCRUJzbnZ5bGVhTXVaekhjbDlXZWxxSVN4eXR3MHpIbnJuLzhKWmthWUZISU9NN29zakRUSEQ1WkVSWTBmTVZEdjJOTUhJQTJZaU1oMjE4WUQ1czYyUm5XTW56dGNKMzRLMlE1R0RSSGVybzV3MmFxdnB3RVdJRkhDVDgvT0RQMzRaWEV3d2VaRGkwTENORkUydzdBZWczV0VhQUJQSUkrK2lYQjlDS3lZTktYTnlUU2NpSnVSVEVaeGp3Tll2WmlaWkViaUJabzBrL25DbXozNTk1U0ZQWFZ1QVRZcUVERU1nVzhROHp3NUQvdUFpWTRaWDVWaWdUZG1vUlQ4QWlwYjJnS3k0NFp1YUtDSE1BNml1ZkgwYjdZdkVPWWU5RnoyR2NnTUhPbGlud1RsQ0E1ZDRRYzlOWDNsMDkrUVZEQ1FEeGFyQ29oazVBN3ZLR2ozbUtsdy9IZU9EbG5rOStmZ3B5NXowVjNIQzlZZ1VNdUJXaExWa2pCQmdHZUlRTlY5QURVV1BKaVE1SCtNeFEwVVdjL3p3bmhQZGdIY1hjUlJFQ2lURnJZWGdFcVJ1SFJ2UGl4bGNObmpLaEJJZ3pzbUlRR0p3d2M1Z3N2SHpoaU1QMWdMdjRaWjM4QlRjMzkvWkk1eVJIYWx3VzZHWk1IT1d3TW5hREdPSnRsZnlZSmg2STU0bHJubTlrczFjMUhjazdYMTVpRWFISjNMNFRGMzZ4bXl4a3kzQjdBSld3VjRDUURNK3pCbzhRb0ZLS0NDSVA4cjlkejJrNm9paFpNb3RWZ0ZHdlJSbnpRcDY0NzVtd2xqYU1vaWduUGR2NHV2S2RMUUhLU3VjalVyZjIwdnFTR3kzQWxRSGpBNXBrenVaTk9HMzBIVitQZWpldVQzVHl5Sjd3MDBNRm8yQWNqVTFtLy9rS0FwdjNCZFM5S1N0VkxKZjBpQ0JmK1NsV1Z1TFZaaEN4NTNtRHFBVS9nWWRiUVc3ZWZwdE9XTlhhTTZ2MlRmNHMrU3JVQ21xUWlJRHpncFdXYlhFWnNTeUtEcDJWRzN3R1lUNlpqSzlmNWRWZGhXTnR3Y1pNMFNLb2JuaHZEQjRBd3BGRHZONUgvNEdlSSt6RlNVOTBYV2dnVFNwSGVBa2g1QnQwNWgxZG9tcWxGdHdVaUVQM1lhSHFqVlF2MHlMRm5wVXZlb1pyd2hodisxREI4T3dNc0M1N2l4RHEzMnVsZGl0NGJKRm9LVEZteThTSU9VMnllT3BjTFJ4SjFveXFXWkRWcWtaVzYzM01vaXJkY09CczBjQmp3a09yVDUvdERueUc5U29RalhoSmFWKzJXZThDbUZzM3RYQmJWMmR4aHBXUGVMRjVTbk1ZMVZESGRxTk1zYUY5SjZRSkVoZVhiTmpSU2JobU9OdFU3cko1c0RyaTQvUWtaWGxZaGZoQTVRSDl3M3dWb3ZTekZTRjhDdmxxUW9kWGpNczZsVFpPcTQ4eDFDby9VTTZLR3FUd3ViL05sWE9EeTJhZ1JCaHY1aTNSL2phTlFGYk9yNWQySFVqcjFzVDA5L0VNL3hSWG5hUWpNUkQrMVFqZ1hIQUxudS9Cc09SdHVCRHJWNnltenljZmNwZEwveURHNFpWSmJjL1ZFQ3A5TzI0MlpRRmc1SWRkc1I2TU9JZUVZWWt3NkJpeXJvUXZoSk1ydWp5d3hnQzJ4NlpGYVpVczlrVitjdUdiV0JIYjl5YlB1b3E4VzhlNzdaUkJFY0pFVk9vQ0FKZDAzZDlKOUFLRUhsd1BQMVZGQ0tTK1pnSmhhVUhMdDNqNHNXMXYyd0JSb0pIWVA0dUJ1WG0rL3F6TEUxbDNpazBCdkRwbzEwek5RRFJ2NnljYVBOYVR3R0xoSGdTWVNNYS9DRE5vMlhyVmNZWDNnbmRkRFo1UElNU0lYdXZoZXo1SDB1aG5xSENzeXp3dkp2d04zclBld1NLZjIxUkVWa2Zla0g2Qy8zb0F1d3N6MmdWQ1lTOEVpd3JxWUFMWkpQTzR0MWsyY0JNMWlId0hZUzFYOXpUMTIxQlkxbVkvSGtTdEZ5ZStibXpodGxwMnZlVldiNGIyZVVMd0pRdFE5b3NVakI5ZUNHVUtjQUNiSDlnUWM0YW5JTW5jYUpTbFhBdDIrTHpRR21FeVd2RUhrUFlPVnlFU1k0OUpOZnhwQnpBVzVUQjZoTHZDVVY4RW5Ha3NwR1NEUkp5NEQ3OUZCSlU1VWVJc3R2bWJFdUFlamIydnB1cE5NbHFUWEMxM3h6cWdVNFFGbHZRSjFkT1N1Uy9MSkluRm1FVWxESUFVY0h2VFczVnd6N24zV2xnc2tOZ2lENklmRWV5OVR4VXpxcXRZM3lZdmhBWmNpTitmYmt3cmVURW44UUV3ZUhzd28zTWJnTGNGbWhtaVRnUkFzWUJuQTE1azlBRmZYR253WlZsV2JVa1o4ZnRVOHlLNENXa0txU2V0VTNlQUlJSFFzakFUMVEySjhLZ2pEZlJNaDUyNzUyd3lDQWpQUHRYMGxpVGVOeG9kYWRWM3R0aWhEbzNOSXVtMGpESzVTbmVGSlZ1ODJ0OHlUZGQvbm1yNnQ1a21JREtuQytQSXA0cCszaDdZV2M1YTJvMC9QMmh1di9IYWoveC8vM3I5SnkvRVFMK210QTY3Ym9zM1FkeDQ5aGVzY3VObWV5L3VENldQQ2xEMGdSSTVxcTRKWmNHTXdla0hHcXZVbzFaUHFScEVRK2gzajFIdnRxZnM1ME5Dd0p5elo5K1F6V2w1L3BRMDIrRlFvUmtWL1BNd2JzM1h1a0VMT09wOWloeU4xN0NRNUZudWE4ZldaU21lYUZ0dEFTbFRrWVlyUlE4MUtzSWh2eFdxQVNFQWcxQmRIZ2lpa3BEV3VHRERYd2xoZnJ1bmkvaGI5eWxRdEdUV2c3bnlVMWFSMEt3Wk5nMHJUczAybXZzaFVCREZUTzVhOEUrNEdxajV0TzI3YVZmZjJnb3N0N0hwUzRLMVFaNkE1eHhiaDhwQ1BzeC9WR0xQVDBaNWVraHlqcmI1VUpRbVNpYy9Wd2Fsckx0NnJGSURBUDVoUE5qVUwvT0JtbWxBZnRXQU5KLzhWd0h4cE92ZkNBaDhiMkhmNEF1SVpHRkVCbER1Y3p4dWt5QStyRUo4Z2tTbVRValJ4WTVpNXg1OTI3a1FaQ1d0ZXlqWElFVUd6bXJZR3paL2VmQitFMnFJdy8zZTdHdTBIK1d6eWFMZTE0Wnp4ZUdoMnB1aDV6Z3M0ZDNERDVzN29oMWdGamExSWlHQzBzTDR0Z2JJVXNJVUlWaUp1d2R3N2N5MHpoRG1tS3hsSnd4b1JlalZJeElNVHkva2lJVjh2bUw4QWs2Z1Z3YUZkSCtJWmhEcjUvU1hYY3ZhRHNETGlvSTc5b0ZIR1p0Wkh5dHhOaHdFaklKQzh0YmJWdU8xTEgzOGlvTUtDT0xwTmFWKzNlZDArZzc0UXJUTzlBVW91V1VUR1BhQ1RJdE5pOGVHcTRHSDJLYmNGUEhvWWVoTGtMREpHMVZhTDh1OHh2c2huVHo1Tm1jYTMzZGFTNVROaXNyZ3A4MUxyTU93MkMxNlY0UUxuRGQ1L3RlbkRSbHBYajhWNTZsbXk3clk3aDFnQ2NOT0VINFgvNFFVUGZPd0phOE05dmphSE9SWlNOVk83WlBPL0hoZC9JZHR2S3NubnVGV0FWYjd2NExudERKY1hCbXc5dWhWQ1JjOHJiZlhnTUF5OGVVTXNGdXFrUE1GdFZYekFyQ3NkN0UwSXdSNzFCSVh4TW9qUVNlL3h0dmk0ekRMNTYwUWlJNXJOdTBoeGc5OXdFYU5xMmNDdWNLNW40NkIvbXBBbzJXUEttN2RLVTU3NWxGQkg0VC9GVmMyRnUwcGVid0pvcWVXRlpwRDdFZXRRQnJTWTQzeDZmK0ltQ0NLRnA1dlRZMG81WGtYdkxvcHFnRHp6MnBLWWpNcVMxVUgyTXVQaExwdm5Qd290OUh3b3Bvd0R1TGFPWjE0QlNDMkZLS0JheXhnRFM0TUg4TStKV0ZRb0tkQjV1QkhaWjV5U21KOFptTThYbUxGWUx4c09wb2p0UEhlZk1jUURrTGNMZzlBY1h1bUltU28yYzVYU3oybmFZRmxVU01CQmFPVFFXZXIwRUdLMFdYbnFYK2IrOTVvd3pzRTlia2xKRE1haDh4YzR5YlhTZ1JsN2czZWJEa2FabFRhNXc1UHUwN1pPS1Q2ZDV2d1hhYU5NRDNDT1lyZlBqVStQZFNmdkZIeFhNUVNHc25wdGxMSFhNMnJYbjR0bkVSNm9HbWU2bkV4R3RPYVlEU054VmJ2dW9uWFlOd2dTQUl5MTJONVZMUmFQeE4xWUd4UUxTd3J2S2I0UFFjMXRJMTRUcWZrNzJBR0xtOURIMjZDcVZpWTVwbkNsYy9Gd3NwdjAwZUJOVWZjTi9qelkrRHhYSkxiUW1UWTl4VFBlZGZja0duclR0R1pZRHgwejJrQ2w2bWRuUTZQTU50ZFQ0S25tT0Y1ZjUxTS9TWEQ4NTNXUWZINUI1MFBOanNMNVBwVGZ1Y0h0WC95T3ovWm5aUGJzVFRuait6Tzd4d09RZWVQMUk3aUQ2ZVZldUlVaXhWNWJabi9VTGpJN1owbHFGOExsbUVaaWROdForWXRzd2tTU01XN1p3TEVQSkhoUXVoN0JJQTJ0d1NBblFzbXczTUZ5bTBraVd6VEdzQkdQTjNGTWwzN2tpcnhMUk1JOGJUYVBXMGNGNVFMWHFYWVJ6Qit0cC9jTXRENTN0WTZ2VGF2SXBKWlB4UW9Rb1lyZ0NsN09wV0c0aUtBcmEwQzhkZDBaVTk5aUYwNHQ1b1Vyd2hXTHRoc0FEWVFFb3FkTFEyWmMwL3pSVnRUV3F6YThPQXBZTG9RZGhRdUpOYWdnZ3lHbzRTSWlKNmpIV21CVVBQVXN5VEJSQ1FoWkVHMVY4UkQ4ZnJjVDgrL2ZUTDFnc21pWXZDM2srTWlpbVdQZGowSUZWQ3Q5YTBiMzM4TGdzUHVyV0hSSENyVkUrL2JPSEFUaXI4WGNkeE5UcktpcUlhQVp4ZTQ5bGRxQnBHNWVKajFNbjlJckd1djlTUGRjb0EycmZDeVJXVW9YYjZSRzZMR1BsTFA4MGFCNlZ0RGxpd3YrT2J0TVJxK3ZPUkNhT0ZUSXptOVpYNktyTWRhb0tFMjFCR2hRcjdRclVSaU9EaExFazl1R0NRWWQ3WVJGQ1RCWWZrUUMvUTlzN01TaUFWOThWYTRHTGFFVVd6YnFFdTkyR0hvVTdjWUhDSCtKcWpFQXFxRVpweVl6NUFzKzJud2VqUGFiM0RLUWlKWVJ6MHhQdVZVYnJGclg3YWREU25XTFVmRk5ZajJwZHNsQUpzd2hyTVJIbXMwZWN5Sy9MRDVTUzM5MnBEbmxYUkZ0MzloazhtU0htU01LUU03Wksxb2JUYnAzZ2RKOC8zSFY2ejZCcDBoTC9qZUhaNW9EY0c4TDNZY2k5ejM5NHkxSVQ1clE3Rnd0aU9DV1V5VEpKV0wrQ3lOZUg0VDRtQ2JTRHQwZUthdjhXYW9JL2ozcDBES0pzak1aU1E0aGIyK21DcEFzQ3d6Nm05VloyNURWSnZXWFpzVnJlRXpiTVVQTG5EWjE3MzZHQ1lJaHF6TlhtWVlMM3paeXRMa29ZS3RGWHFTTGMzRUNBREhtbHhya2pDM3VMbEpGcnVzWlU5TExCa1Z1b3NGQjdqU3lXNkNqZlp6ZG9oVndlL3RCT3I3SHRhd294SWVLN1pDTG1ZUGlPNFhxMk11MUtSSzlqaUdUY1BDaDBtZmFvYlpUblhMMTZFTnhmUTkvQW9EWVhmaE5YZzBHL1ZZOGRpdTAvcVMyVHY3cDlFcVdCQzNaWGRWdUFmRXhXS3RHTjdxK1pMdWE5ZWJkUytJYk1pa1djcWtwb1dON09VcGFEU2hTNHo3cWZnYjBOT0QyS1BHTzNRcDQyTjNwb1k5MmRGcENqUUNzTW1aUzhEK3dQdC91aVRadTA2MFlDOVllVnVINFBPKzJ0QkRsQVBXUTdlbm9FTzNoaVg3RzU1cmRGSDFFMWI3WlFVYzNnV3U0b2dmOE5YdHRRbjJDT0duWUljamE5Z1JaUHV3OVJWN3dGQWtsaWVLejljR2VSaWgzYXZJYUhTMDRhaENNaGJhTjMwZVM4Y0JWVHA1TEh2T2lCZ0lMV0xHd0JwcXEvQ2NpWTl3a1o4V2Y5bVhoN01EYjhxTGhCb0haanhWdEQwWkFuamJCbzBDWnhzQXhtRTVDbFNIQmJ1ZisvVG9SR000bHAxaHVCcU44MEZLdHVFQURkUis4bytMcUlxb1FGbmNsa3gzeFY1MlJzckNQdGlqVTZac1VlNVQ5bVVoWlRSeGl5blhFK3kzOHJ6MjArS0VXME5qMlZqQ1l2WThzdjM1TDhOaFdaK0NhNlhMR2trTERnUEIxSnplYlNWMGhSdHZEekdzRWJUdlBpZVBGay9ONHVuUnQrM0pVc3N4d3k0MiswQkdvY292c1k4b0JMQ2RzL0liem1FbnlOTDJ1RWVXMDhraGhWVTNFZnR1QUFUL3RrZXZ5dUVRd2QweXh1SEJJdllSN3R3cUJNQ1QrZmdrRzNyczVnLzhQeEZZSFAwd2pWZVlTekxwOVVYQUF1amo5M0R5QzVyT2o5d0FTRlA3d0M5aVJNSTR0K1ZYSFhPMzhPSjk3alFWaXZLd2MrQ0RMVGxPQVdNMHk5SFdoU0xISmducG5wdDlOdDIyRXU3WEkyZy8yS0pwMnhVZ0pYYXFDcVNQUjdwMk9DZG9LVktqZ2FYaHVleUd4NWt4bnVlcmc3ajN2ZCtwb3cwVFViQjRqeVNCSk9TalpaK2JBTHZNUFVIb2dLSjVpdlB4NzRid2UvTnlIbGg3ZmlaNWdLckE2WUF3blRhZGFwVTJ2NFZmUHhqdVJKVEEzKzBwT3QyMzdOeHA0QnJqOGlJZEpXRWRRbjZJWWc0bXdSNzV0SURXQTY3aStvemNJTnhJN0NKWElBbTBzdkJVb1RtOEFLTzZUbFVRSC9DNlN0MzBwYk5pR2l5RGhaWC9lbFpoSlRHTHg0SUU1eDZ3VTU1VzVSdjVaK21hSnlLWGZUQUJMT3RXY01HUzBaM29Qa1NneFJpd1RsUTNEREU2MWFNTjk2aDZoQVBnajJkcFFEWTFRZGpDRlp1Tlk4bDQ1a2duR2FDREpyVGNSd1ZhVDY0UjQ4Y2tyU3o3ODEvazNHQXpwdkxXQ3dJOVpSdFFaRHpnQmtBZ3I3WVhZNk5Xd1V2bU16cEcxcCtUMVEvTkE3SEhSb0RhUkpMR25nV0gzL0ZEYTN1SkhzUktMVEJDbjVOZHNzOFAzcXpibmd5TDRJSVZBWVh3THNPeHB3bWVPZzBjL2J2K2pJNVFTR1RKemJKTUEycXlOQUR1OUowZ2w4NVFnNXV0dWdXMmZXYUFDRld2UndIOVVoUjhBV0Z6R3IvNkdnUmRDOW1pWjMyWWRTSzhZVURJVTNQRkpwV3dRYnVCVG5FeGZ0UTJUbUJmOXNPcU9CcmtDTU0vcmFPSlJyUEdPSnBGMWcrMDNlSmVHRlN4emhJejhLd2V2NnhIa1RsS0pVbGtVZlZuSjRkNTNna3p0MTdIQXp4RXNIMlF4VjVjYXdxM0tOSWVSOGw0b0FKRkErZ2ZNTHUrWjRvSTRHTEhiTFJwMXJpWVBWRzZrNDVzaWYrZmNiSHg0Mlh6cjRITlFtVHM4YnNpVUptc2wrSDZvWWpkZFBTUmNwWWQzd0xuUG9UY1psSkxtOTMvWllWcnFuek95MVhhWWJiamhiREcrc1luZ09wSm5uK3JpdGYzVEJNcnNJM0hEbm1FWUJxblpVaUNONUVoajdLbndLQjdobXBlcktBelpqN0xXdUFjeDVCZW0wbXNqMEFXbFFwVzIyR1Rta0l5VFp0bFRwRTBETnVLWG10UFUzTmtJV3lneVZOMW8zcWEwN0lDZ0t0c1o1NE9RSUVrS0Zicm1LdDBsazB3ako0cFFoRm90VDIrWGl6RytPeGJyUXRVWURYc3JWbXdobURiTzl1MWdhVnFqU25mWEJHR1V4M1kwckZSOEc4NUVNVlZUUkN0YVNyeWpPcXhoT05NQWJxamZjb2Y5TDNaUmJPa3lZMUxnL1RCcVc3TGZ4OWwxeW5ZdTYwT09ydG05U3Fhbkh1MWRyVlZtMktSWG9udklUdG1iNmNmRkpiU05yR0lxM2pYVDY2d251RWhwcER1ZFlId2Q3WUI5a1c5dHBvSk85dTVRc1BYZUw2dUJJSTlJSW9lak55aEFNc1VFT3diRnNIVzN2ZEpaZUVpUDZNVnVHdFVpQVhNZHpJbkFtZHA0NGRheDcvWFAveXI4b2ZyZjF6L0FINWFPR1FaTzNiTnhSSWRINXVYblJBVFBVaTlaVFhiaW1yekRjc1RkL1RkQWhKcXNsRVhNL0ZrRG5jaGRqdkt4c2s1WVo1RTAvMWM1L1RhT3N6dVNKTFFHc1E3R3kvNTNHM2xhbkR3VGJXSEFsY2ZpdTlSRnBiWmk1MHQzU2lCV0E1WHNFbGFpWlEvSEx5YUVpY1FJL0JPU01iVmI0OVJrdFZRTnNlY21UNUlaTStKYW0rWUp5TFdaTmlGZ1dCaXUzNGQ0N0pjblRBU1RkM09CVlhEVnp4Q2hwSlZodzBzUHFObkM4blBJRkQ5K0g1c25yTjdGU1QyWW9aVk90Z3pyM0pZeHkwbGRCcEI5OERaUVRoSHZZUDFFVjNMZFJNWitLa2R5ZG1FU0xtS3N6WGdudWd4akRvSGxGK0hlRUdRdWhNdWNMc1Z6L1REMTBXcVQ3SlBNSHVBd0d1czVqd2RpUytXalVxcjR5SGFGUFNEMVJCMjRYeTFJZ2tzY0pxMlh6dThJSnlZK2swLzFjbC8wcDZSY2VRNjJBVkx6d0YreTd5SmNud2lXOUJ0V1B5UURPcStBQ0V5dFczOTFqUUxqWm1Bdml4aWtsOU5XN1pzSDBDdVY4ZC9uZUZVTDFqK1RSdTkyTndQN28wOW1SMDdkYmIzWjR0MlJCU2pNNHZWWmMrWlJRRGxSZnpOY2RtUkJiV3hsZk8wUXJXZndYTklXZDRndnV4Y0VqRyszRVU5SkoxQzJ1enB0SEpLUWhTVkNNM2hkNkROdUtYWFp1ZkFBVnN1QUJUZTN4NU9JZ25zZGxxeGx4emdZRjFCMWJXSnhPYVZJYlUyQUYxbDhPbGNtMlVhSlhKOWRiUC83SDdDMEx1cEM5TU5UN2NzaE5XcDlzODlGZzRvS3IvS2ZnQ29oUGlyRVhtYkxkNG11clZpR3llZGFUbzlSYkpQZmZ3YTdtSDdEUEFNUzdGRVhyRTB6c2dSMU5NNE0xbGd5cmVqUkNwNFI2Z3dHV0hWeHZUOHVoTFdxaTJINkJ0SDNqaUpZbHJuaVpzY29wZ3l3WUtZTTYvMzdyemFnUWhPYXVHdXNQZXE4czltdys2MVNpVW8xUVFkdDN2ZW5HTWh5R0tVNFpFbWhBZmsrM0s0Ymt2ZExJalowYWJLOTV5THoyN3dOWXNMKy9QWURrRkRPUE8wOGxTZ2NrZlZSWWQ1UnV2ZFVLU1hjNGxRbEl1QWczaUFONXhDY1NzK1grZ0FTaGpMNmw0SktBcGZmNVRYd1lLakttM3kzRjloTmVQRk84Tzc3R3gweW9WRE5NdkhoVUFBOFBYRng4RW5wMk9BeW50UzhDd2lhMmRGcnlQdkhOWEczMUFUNE5GVzRrRHpsN3lPRURYVWsrYWtBdTV6NmhFOU1Oc3F5WTI2c3lpMXY5MGpWL3piN2hkRTJrM3NQKzJ1TmRtejIyNHo1T0tNS1FHUDZpMFFLa1E0TzBLU3M4S1NVeXpEWitIRU16ZEUxYXBTL2VWYWV6bXZBQ09Id3J5WkMyNFFFSEFBMTEyVzZlSmRrSEE3V2VQNEdYbGtTWHl3NnJiYUFFdVlRenNML2s0SkdTdHN4elFndm14UHNGdDYyV0J1M1M1MFZjaXFHeXJ3Z1diTjJYNndnZDR0Y1dCWDRCYjdKbVFEc0RkeDhTeHNzMTRkVS9DdU1GdVluSzNlanZjc3paWXZRTE56ZzQ3VU8zVWgraHdxRTdlRFo3OW5kcW1kL2JBdnErbXhISlFYL28vTG9wbzduMkZuZkpsSXMxak9YTFBJV3c1Mk5tK2gwcGxlbDFQZ0xJaCtvWUp3QXhUeCtJZ2NMd3AxT2F2RmdHRnl4aFBtWXBSNGkzWEphYU5seDVrMFo0Rlh5cGMrbWV4YWFTZFh4MzVVczNaYXA2TXlXOVdobG1uS2RVWUlXdEQ3aE0rSVlTUDQ4dEFjNVFIUHRuOG1CaWVEZkI2Nm5vNk1XdzZKcUYzT25IM3N4YzI0REI1cDNReU1aellIWGtBOVV3SVI3Wi90RjlxMm01NG1hbitDbG5xMk9tdm1sTTUwQndRa1N3Tk5SVzVIWGpvRXhnaEpSTEpSSFJvL2xhUTRMU1F4ZXJwUjdKREVlKzZHZkhxSks4RWFXT2szTjNSN0taOTlScWZrdnBqZnhEYlE1Tnk4UXordUZ1L3RkSmRLR0Z6TzdKQ2tUWWZ1ZVlScDI4YzBMWHlmWXR5SzJPR05xL09Nbks0UVBUNjR0ekhnc2dFU0lac3dZdFRnYTYvNXM3bVp5bkkwUy9VZEhRc1lzQkhUdVRTZEtCUk12endxRFhDVWlPSTBwR3RHdTBZdE9CMjNnOExFSFlkUnNNVU9RYW04dS9sS0xPekdnWkZLRUtCb0Nna0ttS0VoZXFIb2NGazhiTCtVZmdOTG05dEdNa2RMd1I2eGs5NnpoY05lUjdmdTB4NDVaeGpsSkRzQnUwUitzMmpYLzFOTHpvWml6MWZ6Y2hKejlBRGp6T09ESFNFRDBpTXZ6V001R2NCMlFQZ3UyNGNtNmhrYkNlZEllZGxsazA4K3RTY2tyWE8wVmhOQmJYOTcwVTdKWnY5eldvOGF2SlhOQmFBQ1g5N1hZaVNyZG8xVnRzVkFkWHJOWitvQUxrSkljbTdIZXJJdDdjWFpRZXhOaSt1endSQVBGbVd5bEE1Y2w5ZVpzTEFTZXdEZmdKazdiVGZFdFZuMU90NW8rbEl5dHZkalVmM0tZSUIxNVJDRmJuY0xoS2ZwMlVvRWk1blNpelZsdDZKeC93RmdLOUJuaTlqNE83SEtvKy9IVXZWNmNxM0JvY3IyY3hTMFBJamk0QmF1Nkp3cW9BR2l1ZE83bThxemhwMGRkdzRlRE14QlkzZzhrWStZMXEzT01qdG4vcWZIYzJGZVJETjk3L0RJTVRNaDBQbDR0ZmJyY2ZJSThxemVWZ0RjUVBISjg1ZzVLSTREYWY5aE1jdjErdzk4Tkc3MlJhVU9YQkRUN3k5YWg4dmJyUGVZYUhQSEI1VXpWVE9ZMzNRalVDL3d4TTlCQWFkZS91NE9oU1ZzT2hIcjZVNjdPK2RXMkFvQjFTUEhJeVN5d3dDeXJqZi9paTBKNW0vYkNRUmludkdvZTZ4cGV0S3FlWlRXWjh1djlBWEZEbE5BSEhZMWlEM3M5cHVBQ2ZsTTVRWHg2dVhzOGVkTU1ZQ1BEWUpSc2UrMW5sRTNkczF1YUY2QWtpVG5OY0JpYmlkeHZhNy9HYk5pbHNmeDErMUNONFRUQVdEblViUTljL3ZCWGd4Ym83ME5KMSt6U084dzdXTHhiSGV3WGlldW51b2FYQmYvMWZ1M3ZZZ09vYjJuazRzYzZmWFp4SXc5Z09kRmVFTXhES0NzT1JqcU0xTGIvUDBSOXdoNmpyN3plTFdqOHNxcEt0NzJvaUNXbkxsY0ZZTmdWbWdlVEZoYXRNNkFyaGJ3cCtic1EydUtBSURQQ3Z6KzFNdm84anFIcFhvVjFxSVVELzF3TmNjZGpYYkt5MkVPQ1lXeFBmTW1KaUFycHNXTm52VGZaN3ozR3k2bzJEK2hVUnBLMEw5cXloY3pRNzZKMEt6aEdXN1dYWW9KTzMzeDVzdUZjd1RWNC9nak8ybUtReVQzR1ZudC9Ebkl2UFV6VXVaaHZhUGRPWksvZ2JkT3EvOFFSUTV5UVdVVGw5MmtaZThFYTJuQ0RTOThBWExIMkVYVnBTMTA0VFF2VFJPYk1DTUgrVTVGcDNsNHEyYXV0d0hKQVd0SURyUkdGaGFiUkFoNnpsb3RIbHR1aHdFNHdvYVZjemoyN3pxVnc4WEJEbFByQldCRGRBMUZhUFNReWZxUUdSeU1MUTVYdU4xWURqRXVqb1NkaWRkdDFwUGRXNlp4UDVEVzUzYVk1cjZjRTF5Y2grYzBSTXpaMDVwd0wyQVNvcy9scERNdmRZR2Y2UnlSOGdjNCtUSU56bWRtUzdrSjdjOWp5YkNlYUhjcksycWdzcmtQaWNqMmVOdjhCSm9CQndubTlqd3VjSlpvNmRHUkhpd2dsTVVzdUk4RldaYW5lSTU2MHJ1WmJ6ZzFCRHEwQ3JSdFdwandPcGpOL0M0WEhkd1NJT1d4TkdRNjQ4R3BWK3VLRURJZnJZRzJRcEJPT3gybUpUdk5VWUxXdTZPM3krZVBjTUNpdUwyZCtDQWtMK2lDclVNRURKaC8rZGdrRHhDY3pTQmIzUGxSdkZzREFYME85WlNpT3NuNjdiY25xdG54VkIydVBaSmptMEdiWlkzeGhkcy9zMlFrcTdNV0ljVDNHZU5iWWNoNWIvbVBPMlcxbG1lUFZnN2REaE1KMDJFYmM4cDZJUmJsdVR3MmkwN0E0ejRyZk5SQmprR1ZINTB6YjlZZ3JRN3ZNVlVNdDBKRUo4aEY2aUNiOVNLSVRXaGJTZW1hTHAxSGRwQUt6emlxaCtqQkk4eHp5YnhOVWc0N1RNMlRkV3hFUGh5TXZnN1pjZFpuWEpDOWl3WE1HWDcwZHNmdG9UNlJNdWhhaDdvNUUrQUk0dGN5V0JhRG41bUpQS1YxRG5xNVh5c0VpcjBGblN1S1o3NEhSTFBZclUwZzlzaFhkK08zKzR5Q3c3SWtKd2NmNDJFcTB0TDBQVEUvYk9IQjJlWit5M1ZzYnVPMGh6SHg0YTNacnV4Z09FemJUbTNyNW0rVmRiS3MzK0lsNXpUQ1ZJN3NhTTdObm5uWndmSjVFalJPOWlLQVF3VFpEV0t4V2w5M3d1RmcvNGFkNWNGYXhETzQ3TU9PaWhWd3pzZzhSKy96cWkzcmp6Yk5nZFhSbW1SRWFZMm42UHVGU2pnblNmWVF6b21PZmVRWUJLTE1ydmt6d2M3Tzhad3Z4KzZmNGZZUEJFbmNlQ1ZLejZsV1RhWXJtMjJwY1RSTEVkQTkycXYxTWM1VXVDSGEyLzcyQlJzQkxCMTJBSzZJSHBQTHhyUGY1QnhjQjBiWmVCZnRGTEdVekVjQjVGZGV0VTMyRUJmTDNSeGZpYnE2QVBJVXJiNjAyVDZmS2RLUXZBQXZZNDN0NXEwMnljVjVZT3FnWFB1c0REV3I5VnFOOEpYOTYva2kySVRWVUQ3VVlWb1hvUFRuc2ozL2J0eUNqY1lqK1JxY3l6cU54eTRiZWVYam1NbmJVMldnNHhxS3Ivc2RVWDJLUUswMnJzZXlwN3gzRUorUkNDOWZRS3ZsNUIrUmZHM0huZHNSbEFhM1F3QUltVjFMSnZlZTR1aGxRa1JHNzd3SktaZnNDSzN6T1FmVVp5cW13ekJ0VjBxRU5MWVd1RnltZHFxalZzRHN3ajNzRXV3dE5sbm90Q0t6L1U2ZkhVc21ET2RlR29menMzZWQ1czZuZGFyN0RHUU1XMGxlaUxRK2djTlIyRnhvSFIwQWUrQ0lRTDZIU2NWNER4K1lFMlpla2FrWUZySUtzaWNMYkFaZ0c3VHRSTDdPSTRHc0JIcFEwUTZpOWpFUm5VaDRTbWxOOWNWZnFmeDdRdWVRRGk5NFZRbkVEb29NVHRYYWxTRERHdG5QQ29JUTBWbHNBN1dILzI4OVk1d3M0ZmxyNkhZaWMydFNBS0R3VEh6R0E5QXMxeW51dENvcCtjd0lUL0JSYmF1ZTJSWk9Jbko4cVZ4UG1udE9XSnhKamlKYkJWVnhqdUNRWnFpQ3k3WnJaMCtZUFlsT1JBeUVZUFNpRkx0MS9nVmN4emwzc1RYa09aTzRuTTFvbC9RWkxzUnJQTSsvd25RdUhJRENJanB1Ymx1SnZ6NUJ6Sjc2aEI2M05OS1pYTzhyNnh2ZFk0SmtkNUJKcStLMGJydDh0bU0vU25Xb3NNT0RNREUwNEhKaTNGMkR4NFhQOHJFdjV1OGR3dU5RTHRNUDNUNituS3hiQ2NOK2hpdkRiL09aaWV1QUdRZE9aUDJJRzk1bzFmYzhwTXFTcHRQYnJmSlRnQVlmS0dOdmt2T1J0MDhibVJmMjBXMXRzTFR5UytFcDQzYWM0bk82L1oxSXZ1MHdSN1hFNnV4aS9ObVNhZjYrN1FKODdHaVM1VGl1R0pia2RVckhpcE8yVGpzaFB0dXp0VTFXUEVWa3htc2prR2NzSHRhNHpLOWpwR0F4WERraFpWOVdoTFBRWTBoQ1FmWlluQzl2bnNsR0QwZW5UbzhOTFNzMmVMQ2d0aUVMRmtRUE1CcS9RazNFZEtFU0I5eDNPR0cvT3F6YmMrVTdPL1FNRW1wOW96TTVZWFZPN1FrZTNUa3NJVTRmSXdNOVpJTlptekhxWlJkZXQzNFpXVVUwSFFTYXgwSUFFQjFPakhrUjhmRkMzT1huK1ZVek5iT3dUbk0yZ2VUSTdHWGRuTlBQVnRXajkrMUo4bm1FVHNzZTFUVHNPWW1pcVp6Snp0MUNVamJFa2xsSWdoSnJubWRiRlFkTFhlTThtQ0crQ0NzNzNWczhQVTU5bnRIMEhpd0ZqKzNudVQwck42MkVocWNpcU9lcHNiRlhRV1JDaXd5dTNjZFZDSVBnekhTS2w5VVZoQS83alh5YUZWeDNueUZ4enVjYkV1RkRhZ2VDRWZScHhyS0xHTWNHMWVjOHhvVkZDNVpNcnMvMlVnTEhaOE5kUHNPYXNzWS9IT0FTcEp5OXJRY2RoYy9zY3hoNVdSVDlBbGtlakJJQzJGckhyZkxTUmNDUDh1VVd3bWtuVEU2T1YyRFk0Rk9ySmc2ZHJhZEg4Q3ZYcXhjL25nd0F6TTJuWFpTTnBHdnloR2FDZ3FCS1dKNHdsQk1VWHJNYVBsZkRNOTA1TGJua1hVdTVIQnkxYnQ0aG9JbWNRL1FZbWp4ckg1QWRic1daeUNVNUJzNEhqSG1VTzgvTWhtenJ1TWhrdytBTGh3VG1wSnJyZzFUcEgxODFUTE55TVNBZklZVHJObitFSllSMENvbzl3Zkt3YTV4blJ0Z3dOQ3FSRm5yaTBIbUhQVXJoY3YyaVUxb2NnMi9lSHZObiszQmNaektrZFVveFhnTGtaaGNNbE9xNE0wejc0azFaTTBjcVA3YUdtdlpYZ0htNHBFTngwMzA1VGVGaytlNHpzdlI5YlNnYlUvVk9qRWRzRnd3eTN6YTJuMmVaZk9ZWjRKdXc1bUJ2RzA3eFJNZjdRMnhZUkNkZVdwd1JnOGZqenVEMEVTTFRtOE1qcndvdGRFaGxRK1pEZjE1UFU2RWh6WW5oMzJtRWRjS01GZDNiaWdVbnA4WDcxTkYvdGpsTE0xZ09wQ2pVYUp1SFJIUi9aMDQzR0dDM3lMZjluOG5RblJFTUhpNmZLdjc5eVVCQXRNVUYzMWE0cWJxTGJJUzFVN3R2SE1YaVYrZE9PdExENmhOWUtpRS96dURKT0QrTk1qWjdQczlQMTgvSUgyd0VzTCtjWWdTWHh0aWpFOEVzTlR3dHpxOEEvZDIyeHovMkNIVDJ4T1lXSkNPT0MyRUdYKzQvcXNhSi9RN2JRUUJab1ljR3VsV3UxZW92ck5FNXJ0c3BSNThZYk1VTDdLQTZvL2g5NjVscnVUQk0xTllHTjg4QW5EdGdBOEZobVFqTjZTRG9CZVpEQkxPUEJiRGpIRUx3VmQ1Y2ZZbU90cFVDVFFJMzJtZEkwaGZTWlcxdlA0L1ZJYXBEeGw2azludkxBQk9vS2ZLdU03TkNQTENqdnlLMVJPcWViYzk0N0FoU3Q5L1h1TzJVS0krak1ud0NEalF1Mis0RVBLbFdOTnRuMnZJeXZFa3ZkcVRFcFE0Tmp0MDd6LzBnNE5qQ01CMitEblREbUJEMFRzZjNJVkJ6Z052UTYvWXpobE5hcnJwU2xVR2Z1K2ZGelFIRjg4VWc0OGV0b1dBOGdCL3dNenZNYXpuVi9BN3d0cXJxN3M2VWVuMTJoRjFRdk5kdElWcFlCTWtKMDZzRlRNUlJMN080bGhVMnM4Q0IySFlHYUVxd1QvWGZhWUh5Y01peCtYMzRrTUpNSkIwT25MYzQwclpyS2ZnSHJYRldnNmpOKy91NEhNVDY0Yy9iS0dlV0RRSmpnWXhqNzUwNmhpZ2tERm5GQTRLbWVWdDVERmU4UUJZWTlMZDZJTTVqOEhiVHpQRU4wNjBkOHdVb1BYRWtmaTBQUFFpa1FQN3kyUWpzMm16Qi9GVktsbnZZSHg1OE9BOXMzUHlTVFVmdVI4RjFMQTgzQ1ZpNE13ZEwzMjl3WXBXeDNqNituL0tvYXVNcHJOYnVzbjZlOFRNT2hYWFdQUXI5Y1FkOUxCRHMwVWtuWnBudDA0QTlxS3pZNG9uYThhelRxZGQ1WHM0dzdhYXpRSXdrRkNEcEFCQWd3cm1jcitjMHNwWFp6SXRtdUJzUm9Eb1VHZzJmNURhbllkRTVFZEZJTG1xZGd2Qm1kdER4ZE1OWDFXb052UTl1RVFpYmRhREpQRFhyTFVMYi9EREhlU2JhZXcxand1TmtmdmppeWF0YnRHZEJ1UFhEeU5IN1Y1bmM1OEQrNFBTMUJ3TDVGb2poNlpFNVU3UXh5TjVmSDVQblU4aFlUWjhRVWN5ckJ5S29UZFlCSCs0UHdZbkk1cU1lc3pPeWJTYTFOc3BzTVNDVG5NZCtmVUt5VTM1OElwVVBFd2lPa3JXYi9OVGhZMUNGTlZiazJGUHNPQjNFckpWcWIvSTVLcGFQeUt6TE5aMUFjMG9kbzQ5dXlFRlF4cThRQ2ZlWnhEekVUWjlUMXFXekRuVGNIcUM5ZkZyMGpNMG42T3dGclFsT0RTdjJmU1ZyVnNycGhNVkpVTmRueUNDWTBJRk1JOTZRMkp3ODNqN1BsNHlPV0s4UmVmTEJJWi93dFh4U0hqYVVtK29aNzdRckpXUHhYRTV4VUN3SzFBZXNiS09TVGZHT2ZQbTZSUG5NZ2NWNnpOVVN3eTJzSGlYYU8wdjRTSU1YT2VRU05EeEowdFA0ZmFiYXFmRmgvc3RhSkFJQ3YvWTRienQ5VnhZcEpGVU8wWFl1VHpxNS9ua291L0hBMU94SkxIdjJ2SjIwQjdOcDVyUEdNdkJ4WHl4Rmd2b3REdzZYQitqRmJzKzUrbGlPM0xmUUdlZElwK3Jlc3JHNTd1amMzWTNkT3NZZlkrL2V2b08xNzh2QkVuZXlCQU1pNUVBUjliUWRMdU8wY3ltOXp6UlZyTXNEVHNOZ1JtNTZHL2JRbUNZN1FZUEZ2c0VXM3B3TEpGWjlUa2FXSWpoenhFZnZRV0tjQXUvNGNYalZOZ2ZwV1NGclhXZEJxdnVBaDRvZFh3ZzZmb1hQNVBxd0creG9Cbno2dElSYnRNOGlPYVNwT2ZmVXNibU9rbmpPdUl6cHVmQWN5cmZ3NXNzUnJ5eUpGUFBYczlNd3lHa1R1TTg2ZVRFK1lOYjV6NDRyOGZ6RWRvVFB5QXY0UFU1WG1WMTI0T2dDcTNkdU1MbkliQ3RvKzhnRkFGbWsxRHF6bzN6b25PeUxCZVJtcGFNZVJjRkp6VDZaUHZ1ZWk0MW5TNTdYR3UzZ3VZL1RXUUJUS0hlRlY2OXRUWmtIK3lvbWkyek9jOXVlSGNiblF4LzBGeCtPMWEvM1RDaTExTWhPWUdJSHJMSDdiQ2Vyc3RsREo4ZFZKK2g2ek9mRFBSd2xrcDA1V253S1RQSXVUZDFjSTdwWHp6UHlUNWxlTmx3NjNnSkc5cUFDbEhDUExmdFFpczhDaGpQUHp3NDU2MUVjVnBsZlIvWmUySWxQbllPYXhBd244M2daY0lnb0MvVDZ5VnFEYlBZOG5LZGR6V292K3NOS0I0UFI4L2o0Rnk1cytyQTdhM0Y4b3BaMW15bWNaRngwM051cHQvWXhkUDB0VUg2ODlSMW5XcFdITnV3S011V1IwUU1ITTY3cnUwLzVLZnZ6aFZWT1Z0L1NONURVSjhRNVVNYUhQVmhxTk15VW1PcUx4QitXbVkvM3NZY0llN2EyWFk2WGRpaWliVzQ0Njg5TVpHd2F4dnU1SnlPY3h6anNiZi9UWTE3Zk1qdWJDeUNiem1tNG13ZWI0enFSTy9sWVllaHc4ckdQeTlRdzZINnlzZHNIMStLMjU3QTIyaFpqaDJVeGt4TjloQThNRVplRStEcHJiTmtza2FNUDgrMCtvYzdSVEVmd0xpdkdpSVJlQ25iaDhZSHN2cHN5Y0p3NkVJc2Y1VlBTYzVsV1VMZjZZTHZuSEdEWWVLMGNSSjdBVHg3aUJjeUwzZlJKSXc0L3hQTTlLWDBqN2xyc3V6bG5sbGREeXZpSWhlYzJMWTI1ZlBGTUJ3L0xUcjVnZllSVGh3ZzJ4QWUyMnRrRTZPemhVK0hXY3Y2NG8rUzBvMjFmb01tamU1eEhlNWJ3Rkorck1RRmx4MWg5QkhNZit1UmpIR0JSK2Rlb3FmdjB6NWlZUFg0TUhqa1N4L05xV0dVajJHMkhERHJnS3hOcFlYSGRacFhpUTVrTHVPQ2NzbWJ3UlFJYVh5eXo4RFBmZW9tODZWYy9JNHJxdGF3Zk5lcTBVajJBM2JJNHgwYzMyYm5zUTE3c1FEMVB1YktwR05zdzd6ejJSYlNZUmhXSG5wcXQ0cmN0bXlaOEVvQW14QmI1WnJxYmtCM25NeDViYVh3aXhPY2pIaDNEaVRwc0Z1Z0NsczJ1TXF0d3k3YlNCRG4zc0RoOEVnQlB3UGhUVHlQQjVQbmRuVjdGRXZ2L2VaOHhoN045N0NLTVNDR2ZBRnNKUmg2Ym5UR3JZenE1UFh1c1daMkNHSWZQZDRJRi9yM2hrZFc0dGtkNFBuN3JrWUdicUhMZUVPOEM2ekJZRTJuRVRaT2dUanFSUVRzSUNYZUsyZWVjZHNjNnhMYXVVMVdyQlppdE9nUGJhMjFPRi9TUXp2RzNWa3hndVh0R0I1V2RweUNkVnY3dVdDWVRVeUxzZUM0SFdGcnRZTXRLZEFvUWlzUUo2K056TkN2WThaeVJLdzQ4eFFDaGE4Z2NPS05aVkN1S2drOHBmWHpDUUZYS3J2QTVFOThPMmV6akI2cjl2aWpmNVROL0crSzFPUHk2TzhvU1VuSTdHcjlEZTdGOEkrRHNubVdqOVQyZnh5aUxISW9GZ0krNjhKNTc0U3hPM2E3TDU4UDRiSjBBL3IzcXBTUkIvRXp4ZVJxUmZRSVR4aGlBVnBqRm1EN2NiSnUyOVJqZmt2MHpYdTA3QngrTzV4QytmVzVXUHVtb2Vjb1lFVjhBY3J2MlBMTk1rR2Z3UlZaS1VNU0pzeVVpSGpIRzE5bUhxVHUrM3g2VEhzNnpTYUJld0lmRCtvb1BkQTcySEgrVnV4eldKOW1wQnV0M2pIeTJyUXpGM0Nyb2FtSWZtTHVkTU1DTlFkUnNyL0E1ajVzM3cyQlp2ZXZNQVNrL2xjU09MRHpQSjRXT0wrTkdzUmx5cUR6ZlhqMjFEejQyT1B0b2ljZmtjYlNtZkoyejI0dWxIbzdFNWlxUWloYWtUeCtUR3BEZU16MUMyVWY0ekIzMTVmTlVMUFc1MitOanFaOTcrMXluWUJIVTR5TlRuVFJ6cGplaWMzMEdlZmw1eHRncEgvTEpBc1FZNDd3ZGFXQ1ZBNEpXY1RUcE1OM3R3VFQvc211N1Y4KysrQzdyQURrRTl4N0hDVmh3OG5wZzdJT3BIWFhvOHhwOXFPT3AvdkZoeUw0WWszN1UwOUZCa3piSDNhZ0RCeHV3V3QyNE9rYTFOV0FsajBJUkZENnphWllHZVhyaU9jQzNXSi9scmN1V3UrODg3YXlmcnY3aGdhWGo4cHkrVnlKbWQ1cUhJYzJXcmpqTXdHTWdLQmZVMk5vOHkrVXIwdmkrY1Z1ajgrVjRnMjBCazArc3c0WTlodVhDaVVHT1RYZnFHcFRaSnlGNStqNWZuN3NtZjl2MjR6cXgvd1Q0dXVwVlBISWdOSGdXNUlGdVA3TTl2b1JMZmRWSEQ4R0lBZmZzQWNSOUd2ZVREMEFiQmRtSEEzeVBlZUVYTGRLR200cjdvWjdQWEVmOEJDSnZuUnF2OXhtTlZ0MUdIdzU5aHAxakg4UnRLMVVzaTJGbGZZYnRERDZwd256N3poSEVjNXp6cnFkUURCYW1oU3pwNTVuelphc1p2b0U1TGduazRaVEpzMXZsZkVuVGNYenoxSmRFSDV4bWtpRHlCcTlEOHJGamJJY0ZsL0xPeGZXYmc3UW15aEhXRHdTQno3NC9icWY3bkdPczZ2VTB3UWZOQVJuT3JMdHQ1YWhxNi9jOHhXUGVPVG5jczBXVGZGWXIzUjRwcHpPZ1R6ekJSeTZybkFDRTg4eTBKdzJXTXFtbmkrTjliYWF4ZThDR2ZvbUN3d0xzL2ZnOGV6WVZQQnhrcml0YWdXQ1RnZ2N6UFR2RTM0ZHVKcCtpbUIyd2RTcjFYMnZaQUVGajZEZUF6V0theElkd1B6QTN1M2tpb3VNNkQxSktYNXFlZk10S3VkSmxocHRvMkgxTXdadWR0d1hFcXVlYzh3dWFzV09BckdPKzY3UWppK1crUGg5Lys0cVRGaVcwRGlCNlNOS0cwL2h0ejBXNHdwaTJSbDgzdTVFUzhnUGR5Zlo0UG9pUkdidmlaYm1sTllhV2ZGb2xpTEJZcGpTZmQzWUY0T3VFRkx1WDF2REp1MnZZOHUyRDZ0LzJaV1FJZHU1VW0zd1ZDOVc2YytSdDhiUFpHbWRqeVozWXhCcmJNWHRiN3ZuNkNIRWN3L1A1NnBBVmJLbFpPa0M0NUlyUzlWa01kZHVVWjhORXNOM2t0a04zd2JibDdHQnBRd0MybmcwK25vbzQ4amlhcjhkajdMVUFadjhQUFBmdkVhNk8wVTRBQUFHRGFVTkRVRWxEUXlCd2NtOW1hV3hsQUFCNG5IMlJQVWpEUUJ6RlgxT2xvaFVGTzRnNFpLaE9Ga1JGSExVS1JhZ1Fhb1ZXSFV3dS9ZSW1EVW1LaTZQZ1duRHdZN0hxNE9Lc3E0T3JJQWgrZ0RnNU9pbTZTSW4vU3dvdFlqdzQ3c2U3ZTQrN2Q0QlFMelBONmhnSE5OMDJVNG00bU1tdWlxRlhoQ0NnSHowSXlNd3k1aVFwQ2QveGRZOEFYKzlpUE12LzNKK2pWODFaREFpSXhMUE1NRzNpRGVMcFRkdmd2RThjWVVWWkpUNG5IalBwZ3NTUFhGYzhmdU5jY0ZuZ21SRXpuWm9uamhDTGhUWlcycGdWVFkxNGlqaXFhanJsQ3htUFZjNWJuTFZ5bFRYdnlWOFl6dWtyeTF5bk9Zd0VGckVFQ1NJVVZGRkNHVFppdE9xa1dFalJmdHpIUCtUNkpYSXA1Q3FCa1dNQkZXaVFYVC80SC96dTFzcFBUbmhKNFRqUStlSTRIeU5BYUJkbzFCem4rOWh4R2lkQThCbTQwbHYrU2gyWStTUzkxdEtpUjBEZk5uQngzZEtVUGVCeUJ4aDhNbVJUZHFVZ1RTR2ZCOTdQNkp1eXdNQXQwTDNtOWRiY3gra0RrS2F1a2pmQXdTRXdXcURzZFo5M2Q3WDM5dStaWm44L3hydHlZdkRSZkc4QUFBQUdZa3RIUkFEL0FQOEEvNkM5cDVNQUFBQUpjRWhaY3dBQUN4TUFBQXNUQVFDYW5CZ0FBQUFIZEVsTlJRZmtCd0lSRWcrc2gwT3FBQUFnQUVsRVFWUjQydXhkZDNnVTFkNSt6MnpMcHZlRWtJUmlDQzBRYWdoZE9xR0lOQkZFVWNFR0lvSUZwUGhodVY3QWNtM1gzcEFyS2dvaUlDQWl2WWwwRWtwQ1NPOWxlNXZabWZQOXNUdkQ3R1pEVVVUVS9UM1BQSnZkemN5ZU9YUG1uZmZYQ2FVVWZ2bnRZclBaVUY1ZWp1cnFhdFRXMWtLbjAwR3YxOE5rTXNGc05zTmlzY0JtczhGbXM4SGhjTURoY0lCbFdiQXNDNDdqd0hFY25FNm50UEU4TDczeVBBOUJFT1IvRTBFUUlOOG9wZUlyb1pSQzNBQVE3MWNBb0pRUzk5Q2xWNi9QU0Y1ZVhseFVWRlFUalVZVHAxQW80aGlHaVdFWUpvb1FFZ2tnQWtBb0lTUVVRQkNBUUFCYUFHcjNwZ0RBdUk4bkFPQUJzTzdOQnNBS3dFSXBOUUl3VWtyMWxOSjZTbWtkei9PMUhNZFYyZTMyNm9xS2lvcjA5UFJxOTNHb2JHdnduaERpL1ozNEdRQlFRa2lEVjlsR0dZWUJJUVFNdzBBUUJLalZhakFNQTRaaHFFS2hnRUtoQU1Nd0VQOVdLcFhTcTdpcFZDcW9WQ3FvMVdxbzFXcG9OQnBvTkJwb3RWcG90Vm9FQlFVaE9EZ1lJU0VoQ0E4UFIwUkVCS0tqb3hFYkc0dUVoQVJvdFZyL3pYUWRoZmlCN2JjSnk3SW9MeTlIWldVbGFtdHJVVjlmRDcxZUQ2UFJLQUdhMVdxRjNXNkgzVzYvSXFESndVeStDWUpBUklEekFqTVBJQlBCU1E1UzNvQWxmMTlkWFowYUhCeWNvbFFxYjJFWXBpVWhwRGtocEJtQVpnQUNicEpwdGdNb3BwUVdDWUpReVBOOEFjdXlGM1U2WFg2elpzMHVlQUVjdlF6Z05RQkFFZmdJSVI1QVJ5bWxTcVZTQkRZSjBPUWdKOS9rNE5ZWXdBVUVCQ0FnSUFDQmdZRVN3SVdHaGlJOFBCeVJrWkdJam81R2ZIdzhFaElTb0Zhci9UZVhIOWorSENrcEtVRmxaU1ZxYW1wUVYxY0huVTRIbzlFSWs4a2tBWnJOWnJzc29IRWNKN0V6YjFEekJXWWlLeE9CVGJ4MlBvRE00MzFlWGw1c1FrSkNCNVZLMVVHaFVMUW5oTFFIMEJhQTVxOThEWGllZDVTV2xwNU5Ta282NDNRNno5aHN0cHpjM055Y0hqMTYxTHFab2h6VUJEZFQ4MkIyM2tBbkFwc0lhQ0tidXhMSWlhQ21VQ2lnVXFrdUMzQmFyVllDdUpDUUVJU0doaUlpSWdKUlVWR0lpWWxCZkh3OGtwS1MvRGVaSDlodW5GUlZWVFZRT3cwR2c2UjJ5Z0hOYnJjM0FMUXJzRFFpcXAxZWdFWWFZV1VOR05uRWlSTVZIMzMwVWZlQWdJQnVDb1dpS3lHa0M0RFV2K08xNEhrZXBhV2xhTmFzbWZkWGVZSWdIT000N3JqUmFEeDJ4eDEzSE51OWU3Y2dBenNKOUFnaGdqZWpjd05iQXpiSE1BejFBWEJRS0JUMFN1eE5EbkFpZXhNQlRsUlB3OExDR3FpbmNYRngvcHZPRDJ4L25CZ01CcFNWbFVrc3paZmE2Y3VPeG5FY1dKYVZHSm9QT3hxUjI5RjhNRFBpdzE0bXNqTHl4Qk5QS0pZdVhkcEhvOUgwWkJpbUZ5R2tKNERnZjhJMXVReXdlWXVaVW5ySTZYUWVNcGxNaDJmT25IbG96Wm8xVGg5QUo0akE1Z1kwNnNNdVI3MlpuSmY5alhyYjMwUUdwMWFySllCcnpQNG1WMDlGOXRhMGFWT0VoWVg1YjBJL3NGMC80VGdPSlNVbEhpeE5yOWRMTE8xcTdHaStuQU1pb0hteE0wbk5sREV5eUlHTVVzclUxOWUzQ3c0T3ZsV2hVUFFqaFBRSDhJOWM5ZGNBYkEyZVU0SWc3T1U0Ymw5VlZkVys1czJibjNPRFd3TldKMmQwSW51VC95MDZHT1FnSndKY1k4NkZLOW5mUlBZV0hoN3V3ZDZTa3BLZ1VxbjhONlVmMkg2ZlZGWldvclMwdElGelFLNTJpcUFtc2pTUm9WMHRvUEU4TDZtWmdpQTBDbVpXcTNXQVdxMGV6RERNWUFBZC9GZm5kd0didDJRN25jNGRScU54VjNSMDlENjR2TGlDTjlnMUJuSU13MGpxcWtLaG9GY0xjQ0tERTltYkNHNXk5ZFRidVpDWW1JajQrSGoveGZjRDI3V0x4V0pCY1hFeHlzdkxVVlZWNWRNNWNLWHdEUysxazNnNUJ1VHNqSGd4TkFuTWJEWmJsbHF0emlLRVpBRm82cjh5TjBUS2VKNy8wV1F5YlkrTWpOeU9TK0VxUGtGT3BxNTZxS29paS9QeW9OSXJzVGR2OWRUYnVSQVhGNGVFaEFRa0p5Y2pLQ2pJZjdYOHdIWjFVbEpTSXJFMHVTM05sM1BBMjVibWc2VmRDZENJdDgzTVlyRU0xR2cwdHhGQ1J2bkI3S1lBdVMxNnZYNUxURXlNeU9ROFFNNmJ4Y2xBcmxHQVV5cVZqUUtjbkwxNU94ZThiVytKaVlsKzc2a2YyQzR2SnBNSlJVVkZLQ3NyODJCcEJvUEJJeWJ0S29Oc2lhaDZpdXJtWmRnWm85UHAwb0tEZzhjeURITTdnSGIrSlhsVHlsbVdaVGVXbDVkdmJ0bXk1Umtad1BFeWtLT3kxd1lzVHE2bXVvR05YazF3cnp6MlRmU2NpdXl0YWRPbWFOYXNHVUpDUXZ4WHlBOXNEVm1hNkNEdzVmRnNMSVJEQkRWZmdDYlBFcEFEbWdobW16WnRDaGc4ZVBCRXBWSTVnUkF5ekw4TS96b2lDTUkycTlXNjRhMjMzdHE0YU5FaUd3Q25IT1JrTEU0UTJadTNtdW9WSHVJQmNDSzROUllhNHUwNUZSMExmdmJtQnpZQWdOVnFSVUZCUVFNSGdjalN6R2F6WkV1N1F1YkE1UUNOeU5WT3ZWN2ZJU2dvYUJMRE1KTUErRmZpWC95WnlISGMycEtTa3ZVcEtTbG5aYW9xNzYycXlnQ09YZ25nTGhmWXE5VnFFUndjTExFM2I4ZENpeFl0RUJnWTZMOHkvMVJncTZpb2tGVFA2dXBxRHdmQmxlTFNaS0RtRTlEY0FiVWU2cWJWYXMxU3E5V1RDU0VUL1V2dWI4bmkxdW4xK3JYUjBkRTczQXhPRG5DOEx6VlZGaWJTQU9BYXM3MzVpbnNUVmRQWTJGaEpOVzNTcE1rLy9wb28vMGtueS9NODh2UHpVVnhjaklxS0Npa2x5bUF3d0dnMHdtS3hTS0RtY0RoOFpnK0lnQ2F6by9rRXRMdnZ2bHZ4MFVjZjNhMVVLdThHME1kLysvOTloV0dZY1pHUmtlTjRudDl2c1ZpK0hqeDQ4TnJEaHc4N1JaQ2psRGJ3clBJOFR3VkJvR0xpUGMvelZCNFM1SFE2cVR4Y1NOUVE1S1lROGFFclBvU3RWaXZNWmpOTUpoTnV1ZVVXS0JTS2Z5NWpLeXdzL0VlY3FORm85QWxvb3NkVHJuWmV6bzdtUytXVXNUT3lhZE9ta05hdFc5K3JVQ2ltd1I5ejlvOFVTbW0ydytINGN2MzY5V3NXTEZoZ0pJVHdNaWJYUUUyVnNUaHZCbmRaKzV0Y1BSVURlOFdjMHlaTm1pQTVPUm1ob2FIL1RHRGpPTzV2ZjVKbFpXVW9MQ3lVdko1aUJvRzM2dGxZR0llWDJrbGthVThTcUdWblowZTBiTm55Zm9WQ2NUK0FGUC90N1JjQStYYTdmZFdtVFp1K25qSmxpczVMVGVYZDRDYXBxTzVnWHlyUFFmVldUMzJGaFhpblpFVkhSMHRlMCtiTm02TnAwMzllNU5EZjJzWkdLVVZ1Ymk2S2lvcWtnTnZMZVQyOU13Z2FVVHRGTHlkREtTVW5UNTRNYmR1MjdReUZRakVEd0MzK2U5a3ZQdVNpeldiNy9LdXZ2dnB5K3ZUcGhzc0JIQ0ZFa0NYZGUyY3VVRjhaQzQxNVRjV0EzbWJObWlFMU5SWHViQWsvc1AyVnhXUXk0Y0tGQzVMNldWMWRMWGs5NVFHM2plUjVFdTlVS0M5UEo3Tmt5UkxGa2lWTEhsUW9GQS9DSDMvbWw2dDcwSjYxV3Ewcjc3ampqdFZidG14aDNRQW5xYWd5Z0JQa0hsVHYxQ3lWU2tVYnl6ZVZxNldSa1pHSWpZMlYxTktVbEpSL1RNemIzeExZcXFxcWtKK2ZqNUtTRWxSVVZEUUk1ZkJPWHBmYjFMeFltb2RqUVBSeTJ1MzJPMVVxMVNNQWV2aHZWNy84Qm9BN2JEUWFQd3NQRDk5SUNPRzhBTTZid1ZGWkJnUDFabS9lTVcvZUFiMWlTRWlUSmsyUWxKU0VXMjY1NVI5UkR1bHY1eFV0TEN6RXhZc1hQZUxUNUxtZTNzbnJjcFltT2dya2FxZk1qc1pZcmRhQmFyVjZwanZseVM5KytXMXNncENNc0xDd0RKN25SMVZYVjMvV3BFbVRBM0tBOC9haThqeFAzUUpCRUtoWC9UN3hQWHg1VVVXeml1aEZ0ZHZ0c05sc2FONjh1Ui9ZL2lyMnRQUG56K1BpeFl1Tk9na3VVOW0yQVV1VHE1MzE5Zldwb2FHaHN3Z2hEL3R2Uzc5Y0wyRVlaa1I4ZlB3SWxtVS95c25KK2J4ejU4NzVNb0FUdzBSNEFJSWdDSUxZMzhLOVVURmxUdzV1M2lBbk9zQzh3YzF1dDZOMTY5Wi9XN3ZiM3dMWWJEWWJ6cDgvNytINWxNZW5OV1pQODJacGJsQ1QxTTU3NzcxWDhjRUhIOHhXS0JTUEFVajAzNHArK1NORXBWTE42TlNwVTViRllubS9iOSsrbng4L2Zwd0Z3TG5aR3lPcXFKUlNxUmltMjRGRjVjVVZ2QUhPdTFxekhPQllscFhBN2UvWVNPWXZEMnc2blE2NXVia29MQ3lVQ2tMS3EzTDRLZ2JwZm9ySlFVM08waGhLS2JGYXJVTTFHczNqQUFiNWJ6Mi8zQUJwR2hnWStQeXZ2LzQ2b0xxNitxTW1UWnJzSllTd012V1U0RkpPS3ZWaWNIS0FvNzZhQXZsU1Q4VW9nTlRVVkVSRVJQaUI3V2FScXFvcWozQU9NWW5kVjRWYldTZ0hFZW01RDViR2xKYVd4c2ZGeFQzT01NeGMvNzNtbHo5QlBSMFFIeDgvd09Gdy9IZkhqaDJmWm1WbFZiclZVMFlPY0s0SzVrUm9qTDNKVkZWY2pacWFtcHI2dDNJcS9HV0JyYVNrQkhsNWVTZ3FLcExDT2VUTlZYdzVDYnhaR3MvemNwYkcyTzMyQ1NxVmFtN3B1ZU5keXgzQnlFaHZkVk9kYzMxOVBXcHJhNUdhbXVwSGdMK0E2UFY2Yk5xMENRNkhBNE1HRGJvbWc3MWFyWjQxYk5pd1huVjFkZTlIUlVWdElZUW8zT29wSjdPOUVibjlUUTV3TE1zU2xtVWJ0YjE1TXppTzQxQlRVd096MlF3QWlJaUlRT3ZXclg4MzhTZ29LQUFBeE1mSFg5WDVWMVJVd09Gdy9HN25CdFBvTjZ3ZW55eDdFb1A3WnlJanN6OGVXZmdxeWt6T20yTEI1T2ZuNDh5Wk14NXhhcGZZbWc3RkY4N2cySkZma1oyZGc4TGlNbGhzZGpnY0RpSUNuRHMxaWdpQ3dBaUNvS2lzckV4Mk9wMnZxVlNxL3dIb3V2by84M0RQd25kdWluTTlmUGd3M256elRRREFrU05IOE5wcnIvMnBZL2c5d25FY0JnMGFCSVBCOEtlTjRYckwyYk5uWWJmYkczenVkRG94WWNJRUZCVVZJVEF3RUZhcjlacVBUUWpwSEJrWitSN0xzb3QzN05qUmpGSWFRQ25Wd05XWVdrVXBWVkJLRllJZ0tBUkJZSGllSjA2bms3QXNDNVBKQktQUlNFUXZxRHlQMUdBd1NGV2lLeW9xVUZ4Y2pBc1hMdURRb1VQNCtPT1A4ZmJiYi8vbWRmYlNTeS9oekprekFJQ0NnZ0tzVzdjT0sxYXN3S3BWcTY1cVBXelpzc1huLzE3cmVtZ1UyTFo5OEN4ZS9IUTNSazUvQnYrMzREN2svZmdlSG5uMjR6OTlJWjA3ZHc1bno1NUZmbjYrUjdWYmthMVZGZWNodjZRYXlzQlFoQVFIZ0hOWVNIMjlub2lNemMzVWlDQUlJa3NiRngwZC9SVWhaT2JOK05ULzhzc3ZrWkdSOGJjWWcwcWx3dnZ2di8rYnVpN2REUFBnUytiTW1ZT1NrcElHbitmbDVZRVFna1dMRm1IeTVNbG8xNjdkNzVtM0IvcjM3Ly9mRXlkT1pBSFF3dFVUVmdRM3BSdmdHQkhjM0wwMENNL3pjRGdjeEc2M0V4SGNMQllMVENZVFRwNDhpWUtDQXRUVTFFajlQVmlXeFpneFl6Qnc0TURmTkU2VHlZVGR1M2VqVFpzMkFJRE16RXlzV0xFQ3Q5MTIydzFmRDQwQ1cxRlJFVWhFYzB5Wk5BWWpiNzhYTHk5L0VjTzZKTUVKUUY5NEZIUHZuNENNakV6Y052a2g3RDVYQlFBNHV2NU5ETSs2RjNrMkFIRGl4WWRHNHVGbFg3cDUrVWxNeWhxT2Q3L1lpRGxUYjBkbVJpWSsyMTNvWW1DSHZzYzk0NFlpSTZNWHBqNzZIUEpySFNKdHhOWlBsbVAwZ0w3STdEc1lEeTU0QmFmUG5VTkJRWUhVRHMrN0owRkZlVFhBcUJBYUZBQ1ZXa3ZVU2dXbzRIU0JtdE5KT0k1bG5FNG4wMlBBaVBCdjlwMTVRYVZTZlFtZzI0RnYzOFR3L3IwdzhMWjdjTGpRSktldUhtTlk4dVlhT0c3UVRXTTBHbkgyN0ZuMDZIRXBEdGhxdFdMZXZIbm8zNzgvSG52c01UZ2NydEdZeldZODlkUlRHRHAwS0NaTm1vUlRwMDRCQUw3NDRnczgrdWlqR0RCZ0FCWXZYb3lzckN6TW1UTkhiTHFNdFd2WFl1VElrY2pLeXZMNXBQUTFobDkrK1FYang0L0g0TUdEc1dUSkV0aHNOZ0JBYlcwdFpzK2VqYXlzTEl3ZlB4Ni8vUEtMdE05ZGQ5MkZrU05IWXM2Y09aSzZJOHFubjM2SzRjT0hZOGlRSVhqdHRkZmdIVFR1UFlidnYvOGU3NzMzbnZUOTZkT25zV0RCQW9rcExWdTJERU9IRHNYWXNXT2xNWmpOWmt5ZlBoMnZ2LzQ2aGd3Wmdva1RKNktvcUFnQThNSUxMMkQvL3YzUzhWYXZYbzNWcTFkZjl0cnMyYk1IRXlkT1JHbHBLZWJPbll1SkV5ZGk1ODZkQUlDbm4zNGFUenp4QkNvcUtqQng0a1JNbkRnUkxNdGU5bmpyMTYvSDY2Ky9qaGt6WnFCZnYzNVl1blNwTkEvTGx5L0hxRkdqdWl4Y3VQQ0RYYnQyemYzd3d3K2pLYVVCQURTVVVoV2xWQ2tJZ3BMbmVVYmMzTUJHREFZRGFtdHJVVnRiUzJ3MkczUTZIVTZmUGcyajBZanM3R3hzMjdZTlI0OGVSV1ZsSmNyS3lsQlFVSURpNG1MVTFkVkp2NStYbDRkNzdya0hnaUJJNDUwOWV6YU9IajNxY1E0Yk4yN0VxRkdqd0RETUZkZjI1ZGJEdVhQbk1HSENCQXdZTUFDZmZ2cnBGZGZraFFzWE1IUG1URHp3d0FQbzM3OC9GaTVjQ01oMGM0K3Q4c1FHOUdqZkVwMTZqY0RTVjk3QjZSTFhpVkxlZ0Zrak9xSDdzR240YnRONnpKcHdLMXIzbUlBU084V3VqK2VqUllzK09HbW1vSlRESTROU01HejJXNjc5cXZlaFM0c1dhTm02RTJiTW00OUY4NS9FM253eitMb1RHTkMrSlVZLytDdzJyRitOMFQzYll0VGpybjFPckZ1R2xpM2FZdjdySy9ISzBqbElpb2xDMXJRbk1ILytmRXlmUGgzanhvM0Q0TUdEa1ptWmlZNGRPeUkxTlJVYUJRRlJhaEFaR1VsQ1FrS0lWcXNsYXJXYVVTcVZDdUt5S2FwWHJmbDI4T0lIUi8vWXNtMGZlcXlhbzQ3U1BiUnJTZ3M2OXFHbGRQM2FsWFJZdDFUYWVzVGpsRkpLVDZ4YlJsdTJhRXVmZWV0L2RPMm5LMmlubEpaMDJib1Q5RWJJcWxXcjZOdHZ2eTI5Ly9ISEgybi8vdjFwV1ZrWmRUZ2M5TTQ3NzZScjE2NmxsRks2WU1FQytxOS8vWXNLZ2tBUEh6NU1lL1RvUWExV0szMzk5ZGZwZi83ekgzcmt5QkU2ZE9oUXluRWM3ZFdyRjYydHJhVUhEeDZrSTBlT3BIcTludXIxZWpwa3lCQjY4dVRKeTQ1QnA5UFI3dDI3MDdObnoxS2U1K25DaFF2cEcyKzhRU21sOVAzMzM2ZWZmLzQ1cFpUU1E0Y08wWDc5K2tuN21Vd21halFhYVhwNk9qVVlETkxuNTgrZnAvMzY5YU1XaTRWYUxCWTZaY29VK3NzdnYxeDJERFUxTmJSMzc5NlU0emhLS2FWTGxpeWhhOWFzb1pSUyt2cnJyOU9ubjM2YU9wMU9ldmJzV1pxWm1VbnRkanMxR0F3MEpTV0ZIamh3Z0ZKSzZZb1ZLK2o4K2ZPbGVaMDVjNlowL0dIRGh0SEN3c0tydWtaRGhneWh1Ym01RFQ0L2NlSUVIVE5tekZWZjY0OC8vcGplZHR0dFZLZlRVYlBaVEFjT0hFaC8vZlZYU2ltbE5wdU5HbzFHT21QR0RQcmpqejlTbnVkL0tpd3NuQUNnR1lBbUFLSUlJV0VBZ2dBRU1BeWpKb1FvQ1NFS3RWck5CQVFFRUFBa0xDeU14TWZISXprNUdRRUJBV2pldkRreU16TXhlUEJnakJzM0R0T25UOGY4K2ZQeDBFTVBZZURBZ1RoKy9EaFlsZ1dsRkdQR2pNSE9uVHRCS2NXNWMrZlF0MjlmT0oxT0Q4d1lOMjRjeXNyS0dtREpwNTkraXVlZmY5N2pNN2VxalBUMGRCZ01CdW56anovK0dHUEhqb1haYkVaVlZSVXlNek9SblozdHNlK3FWYXZ3OXR0dlMrOVBuejZOcmwyN29xeXNERmFyRlJNblRteWNzY1dsajhiV3JkL2p2cXdPMlAvTmV4Z3plQWcrK2ZrY2hPSUQySEhXZ0lrUFBvM2JSNDdCb3NmdUJsdDlGTHRQMWw4VkN4bjE2SEo4K09veXZManNaZlJwR1lTQ2c3dFJhR1V3ZmQ0aWpCNHpHVys4K3dGbWp1dnRlZ0o4dndFMExBRjh4Um5rRkJrUW9IRGk5UEdqVXB5YWQwaUh6V1lEVHlrZzhCNnFwOHZyS1RBVVVNeCtZOVBEVXllT1g3bGsvc3loR25zWnR1M09SZjZ2aDFEUEIrREJwNS9CbUhIM1lHQ1hoRXRQb2U4M0FCRkpTRkFZVVdVTFJHSUVnMTI3OXQwUXhyWjI3VnFNR3pmTzQ3TTJiZG9nSVNFQmFyVWEzYnAxUTBWRkJRRGdwNTkrd293Wk0wQUlRZmZ1M1pHY25Jd1RKMDRBZ0ZSMU5TUWtCRXFsRWtGQlFXQlpGcHMzYjBhVEprMndkdTFhckYyN0ZqRXhNVGgwNk5CbHgzRDQ4R0YwNk5BQmJkcTBBY013V0xCZ0FjYVBIdzhBbURGakJoSVNFdkQyMjI5ajU4NmRxS21wa2ZZVGY5ODdJRFF1TGc0cWxRcnZ2UE1PVHA4K2paVXJWelpRTWJ6SEVCMGRqUzVkdW1EMzd0MWdXUmE3ZCsvR3FGR3VaSkFmZnZnQklTRWhXTGx5SlE0Y09BQ0dZWEQrL0hscEREMTc5Z1FBWkdSa29LcktwV2tNSERnUU9UazUwT2wwT0hueUpPTGk0cTVIVzc5cmx1N2R1eU04UEJ4QlFVRm8zNzQ5S2lzckFRQUJBUUVJQ1FtUjZxc3hERE80V2JObWIzenp6VGRUM0twcGdLaWFBaEJWVXdVQVJzeWVJWVFRdHlPTjJPMTI4RHdQdTkwdXFhWjZ2UjUxZFhWU1lMdlJhRVJ1Ymk1T25Ub0Z1OTJPR1RObTRQUFBQd2NBZlBYVlY3am5ubnM4NnIzbDV1WWlKQ1FFQ1FrSlYzV3VqYTBIQU9qY3VUT0Nnb0lRR3h1TFljT0dlVEQveHU2TGhJUUVKQ1FrUUt2VjRxNjc3bW9NMkZoc1cvTVo5aGN5ZUd6eE1temJzeGUzZDFEaGxkZmVkM2xRQUdnMHJ1YXRLdmNyeC9MdWZRWElHR3NEQ2ZlS2wyRTVCd0FGTkJxWGc3WkZlaDlrOWUzc29wd21DemliSGhmT24wZGhZUkhDazFJUkc2SzhYUGNvUWtFSXBZSlVPODNwNUJpZTU1bml2TzBKdlZxMmVDMUFxMzBEUUlKU280WUNBTWV6NEp3OEFBV1Vtb1pPWXJ2TkRpWERvNmF5RXBXVjFlaVNOUVZadmRyZUVGdGllSGo0WmF1aE1nd2pxUXNjeDBHajBVamZhYlhhSzZvL05wc05vYUdoMGpaMjdGajA2ZFBuc21QZ09BNXF0VnA2SHhJU0lwWEZlZTIxMTdCKy9YcjA2TkVESTBhTXVLcnpEQXNMdzhhTkc1R2Ftb3B2dnZrR3c0WU5RMWxaMlJYblllclVxZmoyMjIreGZmdDJEQm8wU0FveXRkbHNpSXlNbE01cDd0eTVQdWRRUG5kS3BSTGp4NC9IOTk5L2ozWHIxdUd1dSs3NjAyMTNoQkJjSVk4N1FhMVd2elJ6NXN4bk5tM2FsQ2lxcGpLQUU0R05jZHVUSVFnQ2NRZm5Fa0VRaU1QaDhIQXE2UFY2NmQ2eVdDd29MQ3lVd0sxdjM3N0l6OC9IdVhQbnNHM2JOa3lhTk1sak1HdldyTUdFQ1JPdSt6eW8xV3JJUzZ0ZHpYMmgwV2dhQXpZbGp2KzRFazh0ZUJaN1QrYWp0TFFRZXJQcnhsRTA2NFpPMFNyOHNPNS9LQ3d0eGFvdk53Q0JMZEd0WXd6aVkrSUExT0dYZzluSVA3a0xGNnI1S3c2OFpaY01SQ2hZYlBwbUhjcEs4L0RZdUV6MHZ1ZEZtRXdtTkVtK0JaYmFLZ2loOGJpbFpUTW9CUllCYWtXRE9EVjN4VnZDc2l3VWhBQlVJQ3pMRVo3bkdVR2d6TkNIWCszWHBIbm1oNW50dzJidTJyZ0c1NHBMOGUycU5iQ1FFR1IwYVkxYk9uUkVJQ3hZdjJvZENzOGZ4Y204T21sOGZYcjNCS2ZYSVNFakN3OC9PQTF0NHNPUWtkSGxEMS9ZYTlhc3dSMTMzSEZOVC9zdFc3WklidmJzN0d4MDdOanhpdnRVVlZWaHpKZ3htREJoQWxxM2J1MnhZSHlOb1hQbnpqaDY5Q2owZXIzMFB4OTg4SUhrdFIwM2JoeTZkKzh1cVFsWGtsMjdkdUhsbDEvR2JiZmRobGRlZVFWdDI3YkZ3WU1IcnpnUDNidDNSMmxwS1ZhdVhJa3BVNlpJbjJka1pJQmxXVXlZTUFFVEpreEFRa0xDVlFXZlRwbzBDZXZYcjhmaHc0ZXZ5WGl1MVdwUlYxZjNwNEJmZW5vNmpoNDlPcU5YcjE0dkZSUVU5UERsV0FDZ0VBU0JFZG1iNkRXbGxNS1hVMEhNMXJIWmJGSUovYnk4UEp3OWV4YVRKazNDbzQ4K2lxRkRoM3BVQ2VFNERydDI3Y0xRb1VPdnkza1ZGaGFDVWdxSHc0SGR1M2VqUTRjT1Yxd1BPcDFPc2pmLzlOTlBqY1d4TVhqc3BmK2lldjVDekJnM0JCd0ZvbHQyd2Nzdno0RlMzUVRMWHY4WFpzNTdIZ1A3cllJNnJDbWVlZVZ0cElVQ0dId25ScVY5ZytVUDM0WlBXL2REaTZaaDBGM2hKRFRKL2ZISzBnZngxTDhYb2UrN0hLS2FkOFZ6QzZmZzlPblRpTzQ0QkptdEwrRG5iejRENitTaDBJYWdaWW9HQVhCNng2aEo4V2xRS0FnUkJDSUlQQUhBREo3NHlOVFgvKy9oWndqUnBpeDQrWFVVUFRJUEkyN3RCMFZBQk81YitocUd0dElDR0lvbER3N0JzeDgralI5WHg2Sjl3cVdxbzhNZmZoNlBsejZCTng2Zmd1VThFTjJxSzE3cVB4bEErQisyWUZtV3haNDlleVNEK05YSTBxVkxNWFBtVEd6YXRBa1ZGUlZZdW5UcEZXL284ZVBINC9UcDA4akt5a0pNVEF3VUNvWGs1bTlzREFrSkNaZzdkeTRtVEppQW1KZ1lBSkRjN2pObXpNRENoUXNSR3h1TDJOaFlDSUlBZzhHQXNMQXdqQnMzRHZYMTlUQ1pUQmcxYWhTQ2dvS3daY3NXWkdabVl2WHExUmd6Wm96cndhbFFTRGZJNWVhQkVJS0pFeWRpeTVZdFNFbTVWTmR6NGNLRmVQVFJSekYyN0ZoUVN0R3VYYnVyOHFhS1BRTmF0V29GcGZMcXd6dW5UcDJLT1hQbW9Ibno1aGc5ZWpTbVRwMTYzZGZEODg4L2p4MDdkcUMydGhiSGpoM0RTeSs5aFBmZmZ4K3RXN2ZHMUtsVE1XclVxSUZ4Y1hITkJnMGE5TmJQUC8rODBaMkdKYS9zekFNQXBWUnd4MjVDb1ZCUWtSQ28xV29hSHg4UHM5bU1VNmRPU1d6eHM4OCtRL3YyN1RGeTVFZ0lnb0EyYmRxZ3VMZ1k5OTU3cjhmNGZ2NzVaL1R0MjllRHlRUEFoZzBiOE5wcnI4RmtNc0hwZE9Mbm4zL0dJNDg4Z2ttVEpqVzZIa1NRR2p0MkxQUjZQWHIwNkNHWkR5NjNIaHdPQis2OTkxNHA5T2FLWll0WWh3bFdCNFB3VUsvTzA0SVQ5WG85Z2tPam9mWllCd0wwOVhvRVIwWmVVL1N2d0RxZ045c0FCamliaytNUnpsRmRYWVhhZWgwY05sdURiQUk1cU1teUNKaHBkMDlWTFAvUGZ4ZEVod2N0Z2tjZ3NtdDgydUJ3YU5TZWhOVm0wUVBLWUdoOXFLU3N3d0tqalVkMCtCOWZhdm5zMmJNNGN1UUk3cjc3N212ZXQ2NnVEcUdob1ZDcFZGZTlqODFtQThkeEhtV2tyelFHbG1WaE5wc1JHUm5aWUlIWmJEYUVoMThiOEp0TUpoQkNFQndjZkYzbXdXQXdRSzFXLys0OHlDbFRwalNJdTl1NGNhT0g1MC9za1hHbGN5NHVMc1lqanp6aThWbjc5dTJ4WXNXSzN6eSttcG9hYUxWYU1BeURmLzNyWDg3RXhNVFgzbnZ2dlk5T25UcGxkNmRrY2U3TjZhN3pKaEJDQkhraFM0MUdBN1ZhVGNYYWJtTHBJN0ZvWlZSVUZPTGo0MkUwR3BHVGs0TlZxMVo1bk91bm4zNktQbjM2b0ZXcjZ4ZlFMaWJyeTBOQkdsc1AyZG5aV0xod0liNzc3anZvOVhwRVJrYmVYUFhZZERvZGNyeEFUWFFTaU0xVzVOMmpaS0FtcjV2R1ZGWldKa1ZGUlQxRENKa0J2L2psYnlxQ0lPRHV1KzlHMDZaTndmTThUcDA2aGErLy9ob2hJU0VyZCt6WThlSHc0Y05MQ1NFT0wzRGp2Y0JOS2owdWdwdThHNVlJYnFXbHBTZ29LTUNzV2JQUXAwOGZ0Ry9mL3FiSkx4V0JiY09HRFpjWS9jMENiSEpRS3lrcDhRQTFlY01WSDB4TlRJMWlCRUVnSnBPcG0xYXJYZWl2bWVhWGZ3cTRaV2RudzI2M0l6MDlYWElnOFR5L0pUYzM5NzEyN2RxZEJ1Q1FzVGVudTdrTTcrNnhJSWlOWStUZ0pwWWNGNzJYWWcyM2xKUVVxV0RselFKdVZxc1ZoWVdGSGtIUU53V3c2ZlY2Wkdkbit3UTFrYW41VWo5bFdRU0VVc3JZYkxaaGFyVjZFZnlWYmYzaUYxQktENWVYbDcrVG1KaTQxd3ZjT0RlNFNjek5YWDY4QWJnMXBwYUs0SmFXbG5iTlpvY2JJWDk2RXJ6QllQREoxSFE2bmM4S0hWN3Fwd1JxRG9kanNsS3BYQVNnbFg5Sis4VXZya3E5Q1FrSmtiVzF0VzlGUjBkdnBwUXl4QlU0UmlpbEhOeE9CY0dkVXVBbU9SUXV4d1AxQVpTK2ZnTnBhV20vS1MzcWJ3dHNKcFBKcDAxTkJMWExxWjl5VUdOWjltR0ZRckVZUUl4L09mdkZMeDdBa3hJVkZiVllyOWNIaDRlSGYrTXVkMFM4TlRZUjNKeE9wMDl3YXd6VXhLMURodzQzVmFNWTVzLzZZWXZGMHFpandFY1RZOUlZcUhFYzk1UkNvVmp1QjdYRzdRLzMzWGZmVFRXbXdzSkMvTlVhZGIvODhzdm8zYnMzaGc0ZEtxVWFUWjQ4R1pNblQ4YjA2ZE92KysvdDM3OGYxN0huYjB4WVdOZ1NzOWw4THdDdExKaFhucWtnWlNrNG5VN2lybHBKUjdRQUFDQUFTVVJCVk5NbUpkRGJiRGFQUU42NnVqb3BlVDQvUHg4NU9UbXdXQ3c0ZS9hc2xOSGhMZlBtelpNeVpScVR6WnMzU3hrT2Z6bGdzOXZ0MStMOUpQSU9VcUpON1oxMzNsRnhIUGNzd3pBdndwVlM0aGNmd3ZNOGpodzVjbE9ONmNVWFg0VEZZcEhlRzQxR3pKNDkrNmFkdzVNblQyTExsaTM0NmFlZnNHM2JOblRxMUFrcWxRcXZ2UElLbm52dXVlcyt2elUxTlZpK2ZQazFoZXo0a29zWEwrSzU1NTRUM3dZRUJRVXRyS3lzZkVpajBRUTFBbTRLUVJDSXZQeVJ1OUt1Qkc0V2l3VkdvN0ZSY0h2aWlTYzhVcTNrY3VyVUthbGdRbU5TV1ZrcEZTZjRTNm1pSE1kZDF2dnBaVk1UY3o0aEw4Znk2NisvQnFlbnB5OWlHT2JKdnlNWUhUaHdBTTJiTjhmKy9mc1JGeGVIdm4zN1NqbDFack1aMjdkdkJ3RDA2ZE1IMGRIUjBuN2w1ZVhZdDI4ZklpTWpNWERnUUo5VkZrNmRPZ1dOUmlNVkVheXRyY1hPblRzUkdCaUlmdjM2ZWFnVFI0OGVSVjVlSHZyMTY0ZmMzRnpjZXV1dGtscXliOTgrbEplWG8zZnYza2hNdk5RT29xeXNEUHYyN1VOb2FDZ0dEaHpva2VZRnVMSWlhbXBxMEw1OWV3QkFUazRPenA0OWk5MjdkMlBidG0wQWdMNTkrMHJ4WjhYRnhUaHc0QUNTazVQUnExY3ZDUWd2WExpQW1KZ1k3TisvSDZtcHFlalNwY3NWeDBBcHhkNjllMUZSVVlHZVBYc2lPVGxaMmljbkp3ZFJVVkVvTFMxRmJtNHUrdlhyaDhURVJPemN1Uk9IRGgxQ1JFUUU5dTNiQjdWYUxjMUQwNlpOWVRLWkdtV2xodzRkUWxKU0VucjE2Z1ZDQ0k0ZE80YlUxRlJvdFZxY1BuMGFuVHAxd29VTEZ4QVlHT2lSWTdsdTNUcU1IVHYyaXV2aCtQSGppSTZPUmxKU0VnQkllYk9EQmczQ3NXUEhjUFRvVWV6YXRVc0tjQjA2ZENpMFd1M2MxcTFicTRjTkcvYlJ5eSsvckhlcmxLTGR6ZWxXUzNsM3FYeFJMWVhENFNDQ0lGQ2owUWkxV28zRXhFUVBWWlFRZ3BLU0VnUUVCSGpZMjhUcjU2dHMwOUdqUjVHYm00dHUzYnA1eE1BSmdvQWRPM2FndnI0ZVE0WU1rWTczeXkrL29FMmJOZ2dMQ3dQTHNqaHc0SUIwTGV4Mk83WnQyd2FsVW9sMjdkcmRXTVpHS2ZVQU5Ya3l1M2ZURlZsdkFnOVFPMy8rZkVSNmV2clN2eXVvQWE0eU9rOCsrU1QwZWoyV0xWc21aUVBvZERyY2R0dHRLQzB0UldGaElVYVBIbzNhMmxvQXdMRmp4ekJwMGlUbzlYcHMzcndaRHp6d1FJUGpidG15QmZQbno1ZkE4T0xGaTVnNGNhS1UvRDFtekJncExXWDE2dFY0K3VtbllUUWFzV2pSSWp6OTlOTWVLc1hYWDM4Tm85R0lLVk9tSURzN0d3QncvUGh4M0gzMzNUQWFqZGk1Y3ljbVQ1N2N3RGF6YnQwNmp3VG11cm82bEphV1FoQUVGQlVWb2Fpb1NMVHpZT2ZPblhqZ2dRZGdzVmp3N3J2dlNvR3NwYVdsbURWckZ0NTQ0dzNvZERyTW1qVUx1M2J0dXVJWTVzMmJoeSsrK0FJbWt3bFRwMDcxS0ZXMGF0VXFUSjgrSGUrKyt5NXljbkpRWCs4cTZsQlNVb0thbWhyWWJEWVVGUldodExUMGl0ZHY1ODZkdU8rKysyQ3hXUERSUng5SmtmSWJOMjdFa1NOSGNQYnNXVHp4eEJNQWdQZmZmOTlEUGFPVTR2dnZ2OGZ0dDk5K3hmVncvdng1UFAvODg5TC9iZDI2Rlo5Ly9qa1loa0YxZFRVcUt5dkJzcXcwcjZLd0xEdkw0WEE4UEhIaXhHZ0FZdkZLRlFDbElBZ0tBQXBLS1dGWlZsSkxUU1lUcXFxcVlMRllVRjFkalp5Y0hBL21WbFZWaGExYnQ2SmR1M2JJeWNrQnBSUm56cHpCK1BIalVWMWRqYzgvLzl4ajdsNTk5Vlc4L3ZycnNGcXRlT1NSUjdCanh3N3B1dzBiTnVEbzBhTTRmZm8weG93Wkk3SDc1Y3VYU3lZTW85R0lKNTk4VWdMQ3FWT25ZdnYyN2NqUHozZGxmelJXdHVpUDJFNmZQbzF2di8wV3I3enlDdWJObTRlcFU2ZGk1TWlSNk5PbkR6cDE2b1RVMUZRa0pTVWhOallXNGVIaEpDZ29pR2cwR2thcFZDb1VDb1d5c0xBd1RoQ0VOK25mWElZUEgwNnpzN01wcFpTV2xwYlNEaDA2VUtmVFNXdHJhK214WThjb3BaU3lMRXRuekpoQnQyelpRaW1sOVA3Nzc2ZWJObTJpN3RMUWRNR0NCVlNuMDFHajBValQwdExvMXExYjZaQWhRMmhWVlpYME82V2xwZlRNbVRQUzhiS3lzdWpwMDZjcHBaVDI3OTlmR2tONWVUbnQzcjA3cFpUUzQ4ZVAweEVqUmxCWE5XcEt2L25tRy9yVVUwOVJTaW45OU5OUDZlelpzNm5UNlpTK3M5bHMwdThKZ2tDenNyS29UcWZ6T04rYW1ocmF0V3ZYQnZNd2VQQmdhUXdXaTRWMjd0eVpPaHdPbXBPVFF3Y05HaVNONFlNUFBxRFBQZmZjWmNkdzVzd1pldXV0dDFLeFIrZXVYYnZvK1BIanBkK2FQMzgrZmY3NTUzMWVqMDJiTnRGWnMyYjUvTTVvTk5LT0hUdDZmRFpxMUNoNitQQmhTaW1sSE1mUm5qMTcwdno4ZlByZGQ5L1JkOTU1aDM3NDRZZDA0TUNCdExLeWtvNGRPOVpqam80Y09kTGd0eHBiRDNhN25XWmtaTkRpNG1KS0thVjMzbmtuM2JGangyVkxKeGtNQnBxV2xrWTVqcU4ydS8yRDJiTm5ad0JvQVNBQlFCU0FVRUpJSU1Nd0dnQktobUVVR28yR0lZU1F3TUJBRWhzYmk0U0VCREFNZzA2ZE9xRlBuejRZT1hJa0prK2VqQ1pObW1ERmloWDQ5dHR2cFJwNUgzLzhzWFQvOSt2WEQvbjUrYWlzckVSR1JnYnNkanNvcFRoNDhDQ21USmtpbFMxYXRHaVJ0TS8wNmRPeGZ2MTZVRW94ZHV4WW5EaHhBcFJTMU5UVW9HdlhycUNVNHBkZmZzR0lFU01nc3N5MzNucnJ4cW1pNTg2ZHc0VUxGeVQxVTk3elU3U3BOUko4S3pHMTVPVGtSWVNRMmZnSGlKaXYyTFJwVXpBTUE2UFJpSkNRRUt4ZXZSb3JWcXhBYUdnb2NuSnlwQ2Q3WVdHaHBGNFNRdkR2Zi84YmdNdnpiTGZiTVgvK2ZQVHMyVlBLN3dSY3BXT2VmLzU1V0N3V0JBY0hvNktpQWp6UFM2eElQSjdjMXBPYm00dnk4bktNSERsU3N1RzFiZXVxZGpKNThtUVVGUlZoMkxCaFNFMU54YlJwMHhBUWNNbjhlZVRJRWFTa3BGeFYzQlBQODhqUHo4ZFRUejNsTVY0eCtWNnIxVXJxZVhCd3NGVEpwTEV4RkJRVW9HM2J0cEo2bnBhV0p0WGpGK1Y2cFFSZHZIaFJVcjJVU2lYYXRHbUR3c0pDcEtlblkrZk9uWEE0SEpnNmRTb09IandJcFZMcE1VZU5KWG43V2c4UkVSR1lPblVxVnExYWhjbVRKNk9tcGdiOSsvZS9xclhsM2g0WU4yNGM5dTdkKzhHSkV5ZnF2YlVyZDg0b0wrYVg4anhQV1pZVisvL0Jack5KYW1oNWVUbGlZMk5SWFYwTmxVb0ZoVUtCMDZkUFMrV2s1T3NvUHo4ZkZvdEZVcmNGUWZCWUUzTHpSV3BxcWtlMUYxOVNWbGJtMFNOVnBWTGRHR0RMejgvM0NXbytLblEwQ09rUWJXb3RXclQ0eDRDYVhJeEdJMWlXUlhCd01MWnMyUUtqMFlndnYzUlZKWDcwMFVlbC80dU9qa1pGUllXVUVMNW56eDUwNzk3ZDVTRmlHR3pldkJuejVzM0RlKys5SitVcnJsNjlHb21KaVZpeVpBa0FlS2cvVVZGUnFLeXM5TENmaVorM2JkdldaNFhadkx3OFBQend3M2oyMldkeDdOZ3hQUGpnZzlpMmJSdWlvcUl1ZTlNU1FqeXFzd0tBUXFGQWVIZzRQdnp3UTZrc2tpaWkrdTFMR2h0RFRFeU14dzFTVmxibUFmTFhVOFRmRXB2dWlML1Z2SGx6VkZaV0lqQXdFSU1HRGNMaXhZczlHcVpZTEJZY1AzNWNlaWhkYVQwQXJpVDhFU05HZ0dWWlRKczJ6Y091Nm10ZXZVV3RWai9RcGswYllkU29VZSsvK09LTGFBemNSQURpT0U0S0JSRWRBWVFRWEx4NEVkMjZkVU50YlMwVUNvWGtRRGgrL0RoNjkrNHRIVTljUTlIUjBkaTBhWk5QTzdCOHpPWGw1Y2pNekJUSEtqM0E1Q2FPcUtpb0J1cjhIdzVzSlNVbFV0TVZiNmJtYlZQekZkTHh6anZ2cU55T2dqbi9KRUI3NzczM01HWEtGS3hhdFFvalJveUFTcVZDYkd5c1ZBK3J1TGdZdTNidGtrcnNUSnMyVGZLazVlYm00cXV2dnNLR0RSdmdkRHFoVnF1UmtKQ0F0OTU2QzdmZmZqdmF0V3VIL3YzN0l5WW1CbHUzYnNXT0hUdHc0c1FKbkRselJyS3hUWm8wQ1FzWExzU0REejdva1lQWHQyOWZ2UExLSzNqMTFWZlJ2MzkvN05peEEwbEpTWmc4ZVRLT0hEbUNiZHUyWWM2Y09haXBxWUZhclphZXZtTGxpT1hMbHpjNDEvRHdjQ2dVQ256MTFWZG8wcVFKMnJWcmg1aVlHRHp3d0FPWU0yY081czJiaDdxNk9telpzZ1gvL2U5L0x6dHZqWTJoYTlldUlJVGc3YmZmUmtaR0JwWXRXOWFnU3NXMWVwczNiTmdBdTkwT2p1UHczWGZmSVRRMEZJTUdEY0w5OTkrUEpVdVc0TWtubjhUZXZYc1JGaGFHdExRMEVFSVFHQmlJdG0zYklqazVHVVZGUlI3OUFEWnYzb3podzRmN3ZObDlyUWZBMVUxcThPREIyTEJoQS9idDh5eUFtcFNVaE9MaVl2end3dzhJQ0FpUUFNSmJGQXJGUXdzWExuVHUzTG56L2YzNzl6ZXdpN3JmODRJZ1NIRnVsRkxpY0Rnb0lRVHlwdU42dlY0Q3R0VFVWTHo3N3J1SWpJeUV6V1pEY1hFeEFLQjE2OVpvM3J3NUZpMWFoUEhqeCtQWXNXT3dXQ3lZTzNldU5BOWR1M2FGeVdUQy92MzdzWGp4WWdCQTE2NWQ4Zm5ubjhQaGNPQ0hIMzZReHBlWm1Zbi8rNy8vdzN2dnZZZFdyVnBoelpvMVVDeGR1dlFQdXptcnFxcHd6dDJqUU43TTJHQXdlQlNJOUU2VGtzZXByVisvZmduRE1BditTYUQyeFJkZllOU29VVGg0OENCYXRHaUJ1WFBuUXFWU0lURXhFWW1KaWRpM2J4L2k0K014WWNJRVJFVkZJVEV4RWExYXRVSlNVcEtyRnBWU2lSZGVlRUh5TENvVUNuVHYzaDFCUVVIbzBhTUh6cHc1Zy9UMGRMUnIxdzRxbFFxSERoMUNXbG9haGc0ZGlvU0VCTVRFeENBakl3TldxeFZIamh4QnQyN2RjT2pRSVV5ZlBoMEtoUUszM1hZYmNuTnpjZlRvVWJScDB3WVRKa3dBd3pCSVQwOUhVRkFRZHU3Y0NZdkZnc1dMRjB1OUt0ZXRXNGNtVFpwSUhqcTVNQXlEWHIxNllkKytmYWlvcUVCYVdocENRME9saXJLaStqWnIxaXlKcVFRR0JuclU2WXFMaTBPTEZpMGFIUU1oQkNOSGprUjJkamFPSHorT2lSTW5ObWd5MHJKbFM4VEd4dnE4SmxGUlVRMDhkOXUzYjRmRllrRzNidDFnTUJqZ2REcVJucDZPOVBSMGhJV0ZZZnYyN1lpS2lzS3p6ejRybGZTSmlJaEF0MjdkRUIwZGplam9hR1JtWmtxZTZPZWVldzZQUC81NGd5ait4dGFEbkR3MGI5NGNBd1lNOE5oUHE5V2lZOGVPMkxObkQzUTZIVHAxNm9TQWdBQW9GQXAwNjlaTityK3dzREIwN05neDQ4NDc3N1MvOU5KTHAyV01UMFE0S3FxY2NpYW5WQ3FKNk5RS0NRbnhxS1JDS1VWa1pDU2FOV3VHRXlkT0lDa3BDVmxaV1VoTFM0TldxMFZXVmhhcXE2dHg4T0JCeE1iRzR0NTc3NVhVN2Q2OWV5TXZMdzlsWldWNDl0bG5KZTkxdDI3ZFVGcGFpcHljSEV5YU5BbXhzYkhvMnJXclZPcnE4T0hEcUtxcVFueDgvQitYSzZyVDZaQ2RuZTNCMXJ5ekNyekRPdVJ4YW1Md3JUdE96UzkrOGNzTkVMUFovTytRa0pEL0FiQzVLNE00QUxDUVZRWVJjMHVWU2lWMU0ySXE1cFdLU2ZNUkVSRlNYbWx5Y2pKU1VsS1FscFoydzVMbS94QlYxR2F6U1IzYUt5b3FVRnRiSzdYSHU1ejZ5Zk04NUdsU0RNTXM5aTgxdi9qbHhrbHdjUEJjblU1bmpZaUlXT2RtWmhUdVdEYXY5Q3ZxSW5YRWxhTkZDR1VZQmd6RGdCQUM4VytsVWdtVlNnVjNjajA2ZHV6NHUydmsvU25BUmluRitmUG5VVmhZNktGK3lxdDBpQjVRZVpGSXQ2dVdFUlBhM2JtZi9vd0N2L2pseGtwQWVIajRZMVZWVlphNHVMaXQxSlZjNm0xdmc3dUhndUIwT2tYUHFBaHlJSVJJZGpaeEV3Rk9vOUVnUFQzZFp4T1hteHJZNUtBbU5qSVdIUVVXaStXeWxXOEZRU0EybTIyWXUwcUhQL2ZUTDM3NWN5UW1KaVptWmtGQmdiRkZpeFlIdkpnYkJVQUZRUkM5bzVBQkdoR0xWNHFiSE5SRVlBc0lDSkNhS3Y4bGdLMndzQkFYTDE1RVdWbVpUMGVCM1c1dmtGVWdDK3RnVENaVE4zYzlOWC9wSWIvNDVVOFVRa2hLY25MeVE4ZVBIOWQzN3R3NXg4M2NSSldVaW4wUlJOWUdtWU5CVkVXOUdadFNxWVJhcllaYXJaYjZtdjVSY3QyOG9sVlZWWkpkcmJ5ODNLZGRyVEVQcUZqT096UTA5Q1ZDeUVEL3N2S0xYMjRLY0dzYUV4TVQycWxUcDlOZmYvMjF6UTFla3FjVVBtcTJ1VlZTOFcvNTU1Qi9Mb2EreUh0Y1hGZkdkajFhaDVuTlpwdzVjMFppYTJJT3FIZWJQSWZENGVFQkZkWFB1KzY2U3dIZ21mcjZlbjg1YjcvNDVlYVM0Wm1abVRVcEtTbXZYYmh3UVpBeE4xZjZnZnNQOXl2Y1dRbkVuVUlIK2VaME9xWE5YVFVFN2RxMSswUEFUZmw3YXo1UlNwR1hsNGZpNG1KVVZGUTBzS3MxVnRMYjdTd2dBSmhseTVZdGNEcWRONlR4aXRoVDBidnF4SlhFWXJFZ01GQUxRaGovVXZmTFA0MjUzYjExNjlicWxKU1V6OTA0SnNqQmpSQVJ4d1RLOHp6aE9JNjZhUnNWdmFSeUZkWGJZOXErZmZ2cjdreFFCZ1VGL3E0RDVPWGxvYmEyQm5xOURtYXpDVmFyQlhhN3BITEtLblE0aVJpZExQZUExdGJXVEhVN0MyNkk4THdUVGllUGF6MXZuVTZIeU1pSWErbzVhVEFZRVJJUzdET1MzQzkrK1N0SlVGRGduUHo4QzVXMzNKS3lGWUEzYzVQK1R4QUVnZWQ1T0oxT0tCUU00VGlPS3BWS2lhSFo3VFpZclJhWXpTYm85VHJVMXRhZ29xTDh1cmJ1QXdEbHRkeW8zbEpXVm9heXNuSlVWOWVndmw0SGc4RUlzN2xCandJM3VFbWdSdHhVbGRUVzF2UU5DQWg0Qmpld0xwenJhU0hndDV5M2FBQzlXakdaVEFnTEM4WHZtV08vK09VbUVXVjhmUHpEeDQ4ZnEremN1Y3N4WDh6Ti9Vb0VRUURQODVUam5HQVl6aXZrUXdtVlNnMjFXZ09OSmdCYWJTQ0Nnb0lSR2hyYUlDZjRkdzIyc1dxWFY1TFM4akljUDNzQk9uZEdnY0Z3S2FuZGJMYkFiTFdCdlFSc0lsc2p2Q0FRS2xDbXFLZ3dJU2dvYUQ2QWxCdExxeGtwenVaYVZXNTVjdThmdGM4ZklmcGplNkJvbG9HUXFCc1RGa2c1TzZ3MTlWQkdSRU9qVlFOd29tTHJKdGhzZ0twcEd5Umx0UGxiM09tL1pWNXRoVG13T0tNUm5STFh5SC9ZVWJYak1DSnY3UWVWbStnN2lrNmo3RmcrQUlMWVFhTVJITXBjeDdGRUlEb2w0V3AzdWFWMTY5YjNyMXk1c256YXRHbmxBTVJBWGZHVmlwNVNudWZoRHRxVlFrQXVlVWN0N3RBUHRic1RsaGJCd1VFSUN3dTdwcVl3anRKY0dJeGF4TFpMYW5CT3ltdFdrNmdWaXo3WWdQMUY1U0IxWlNpdnFVZlh1RkFvTFNaWUxHYVVsSldoc040TXd0a2dDRUNJRXNUcGRNTEpjY1RCT1FuZ3NxdTlrMnQrK3JuNCtDSGtUMWlRbE9LYTFVTXhQKzVhOXZzdCsvd1JVdkxaY2dSTi9neGh2UVAvOE4rcTIvWVpEci95SmJUTldzQlJWb0JtODk5Rm0vNUpVQVVFd25KdU44NGRxRUt6ekhaL0MyRDdMZk5xT0xBR2hmcE14S2FPYkl6bkkvKzl6eERZOTFabzNFU2ZVV3FnMWdiZzR0c3ZRSjErRzBMREc2Nm55dTgvUnNEdGFRaUw4UnhMd2Z0TG9lejFHSkk2UkRiWXgzemlSNVFZT2lNMk5mRmFOSjRCNDhhTks1dzJiZHBiTXRZbXlGZ2I0SXB6ZzFzbHBRekRFSVdDb1E2SEFrcWxheE16RWRUcVMyMytnb09EMGJGang2c21BcGJqbTNIMlZCTGkwNW8xT0tkckJ6YW8wVCt0RFhvMkRVRmhvUnE3OXBaaTd6a2R1a2NvWU5iWDRXS2RGWW5oZ2VEdFFFVjFIVEVybFZBSVRuQ3VDR1ZDQU1aU20vL1F5RGYyek16SlRFWEhHNXhiSURkaS9qWTFsdm5EOXdFRVVEQnc2cXZBMFNBRVJuaDZqU2dFRURDd1Y1VkQwSVFqTVB6U1lyWlhsWUpYaGlJb0t2VFNEcXdkb0FUT3Vtb0ltakFFaEhxbXREaU5kYkFaSFFpTWk0ZEM5ZHRCbUMvZGovMkxWNkxIMm8xbzBpd1VFR3l3MW5OZ0dBM2lCNDlBTUZPTy9BS0xqL2tRNEtpcEJzY3BFSlFRQTgrSEhROWJlUVVFVlRBQ1k4STl2cU1PSzh4VnRkREV4RUd0MWR4azgrcjduQWpQZ1RvRlVLc0JOZ3NRSEJmaE9UNW5EUHArK3htSWJJNjB6ZHFoZWJOMnFQeG9DWUNHYTVjNm5Xai8zQ29RWmNQUHphY09RTmxxT29nUURpaVYwamlvNEVUODdmTVFML3ZzMGpBNFdNc3J3RVRHSVNCUTAyQ3Q4RWJIZlZVVlZZVnhUZUxXQStCOXFhU0NJQWlFRU9wME9zRXdCQTRiSllRdzFLWEJLS0ZVdXRPc1ZHb0VhTlJRT096UUtMVUlEUTExMjlzRTJDckxRUU1pUGE0REFIQzZLbkFrQkVUZ1FKMjhOQi95YzFKZXF6ZWlvcUllYWs2UGtxcEsxTlhWZ3poWjJNd21XTlFxMU9vTUlBb0NjQzY3bW9KUWNDd0xFRXFvcTZZNnNWaE0vWlRPdXZrY28wU3drb0NRR3cxc2x3RHV0ekMyYTludnQrd0RBT2VmbVlpTHVTb3dTaVdFeW9zSXZuMGgrczRkN2ZyU2VBcnIreitEcEdFeHFEeWxBOHc2ZFBqa0p6UkxNdUxRZlZOUlo0MkV5bElHa2pZUnQ3NDZHeW9Hb0U0T2hXL05SN0ZLQVh2QkdjVFBYb0h1ZDdrS0VoYis1MUdjM0ZTQ2lPWVJNRjZvUThaM0d4RXJQZHdkT1Bua1RLZ0d6VUs3ckM1WFhocy9ySWVxK3dRa05IZXJFNHBBQk1ueVJ3Z1ZRSG5CYXo2cXNYUHdlTEF4TGFHQ0FTWmRLUHF1K2hDUk1ScFFVekgyVExrSDl0Q1dVQXM2MkJNR0l1dFZWMGsrL2U3UHNXZlJKd2h0bXdKNzJVVWtQL2tKMmcxc2ZwUE1hK1BuQklHSDhlZVYySDdnS3pDV01xRDFuUmo0eGl3b0FWU3UreTlPZmJrRCttTjFHSHhtTHlLOXNacmpBSGl1Si9ic3o5ajkvRWV3blA0VnJkL2VpN2EzTm5HcFpNYzJZZC9MWDhDU1V3SlM4RGpLUDlFaStyWkgwR1Z5UHdCbE9IRDNrOUFWbmtmSTdZdlIvK2xMcGRydHVYdXdlOVlpTUUxYWdTM01ROXhETDZIYlhYMTlyWldIOXh6SUx1elhLKzJZU3hXbEFrQUVVUzExdTBrSno3SncydTFVU1Fqc09oMzQ2SGczYTFPQzZNdFE5UXVMV3BVZFFlcGdYRlQraUlCM1hrQ2d2UXg1enp3SE5yUVpVSDhSUVVQbm92Y1Q0MEFnNE9KcnMzRnlZeUhDWWpYZ1dBZEltMlQzZkhpZTB6VUJtOVZxbGNJNmFtdnJvSyt2eHZIQ1NzUUZoN3JhYzluc0lMd0FvOUVHbzhOSkZGUUFGU2loREFoRHdJeGJzaUw4a1RVN242cXYweWRNR3o4WUtlby9ReEg5YmNEMmUvYTdaaERsblhCRzlzS29qNTRDTWVYaGg4enhxSmd5QWdueFNoZXZxRGtGUmVabWpGN2VFUUFMSjZ0RTFlbzNVYVhxaDlIZkw0YkNhY0N1SVpuSTJ6TU83UWNrQXJ3VHlyUXNESDV1Q3B6bGU3Rit3QkswR3JjTEVZSFZPUGZoWG1Uc09vV0VPQUJPRmp3amY5Z0lNSnc2QWsxNzNWV2RnK1hDQlFRbjkyejhmNmtBd2VrTmJCSG9zMzQ3MUNFdTZwNzN3aFNjK1dvWCtqNDJIT1lEUDZBK2JEREdmZUVxaE1tenJMUnY0ZWNmb05uVG42SFRHTmZUbldlRks0N3h4czFyNCtjRWdZY1Z5Umo3N1p0UUN3YnNITlFEK1lmdVFKdWVzV2d5Zmc2YWpCK0xIOXBNZEFPWTEvaWRIRUE5Z1UzVGJqQ0dmalVZUis3cUJ0QkxheTJ3NjJnTS9XbzBqdC9mRzZvNzMwTGEwR1Raa1JMUjU4dXZVUEwrWTdoUVQyWEhzK0xJWTNPUXNPQnJkQnpjR29McFBEYjNtNEg2TVhzUkZkSmdyVFJocVdMYXNtWC9MbGl3NEJtQlVnaUVRSURNWTBvcEJRVUV5aWlnMEFaUUZaekVYRnREdGFHQlVDanNJQ3dMYzEwMTRvZVBSR3lMSm9pTGprWnRSUVYyL3VkVkpJMThHY05uRFFHY091d1lPQUNsNDBhaXFmb1FqbjV5QVVNUGIwVjRrSURqOXc5R2xmU2c5RHluYTNMWEZSUVVvS3pNblFOYVg0dURKODdBb1FwQ3NzSUpzOWtPam1VaGNBS2MxRW5BUzRudEVBUVFRYURFa2R6cHlibjkydzJ0THptUFY3Y2Z3YWpVRVloVHdTOCtKTFpQTDFlbm5aQldpR2tEMUo4cVIwSzhlM0ZxVW5ITDZJNlNhVUNwQm5RblR5S3U3NU5RQUlBeURFMTZ0MGYxNmRQQUFKZjlKSzZucTRxcE1xRTdvcUl1b2o3ZmpvZ09rWWp2R1lrakQweEQ4cEIraUI4NERQSHQ1ZmFXUVBULzZkUWZmS1lNcWplK2c5enZkc05tdG9PdExrS0l1NXkwTnEwcm1GTVBZTmNjQitKNmRFWHl5SkVJVXJ2bnAyY3ZIUGpYTERqUGprQlVqMzVJSHREbEpwcFhaYVBuQkFCUm1abFFNd0NZTU1SM2I0WDY3R3lnNTAyUWNHUEtSWFcyRFlxOTMrRFlRWmRxVHAybDBCV1lFZFhSNTFvWk9IdjI3TE1MRmp6enNWc2w1YjNzYmRTTjBKVG5lVEFxQmdMbGljM09VcVZDQWNKeWNBWkdRQ0FzakVZak5Cb05BbXNLVUgrc0NIejBlaHlyL3dVVUFPdDBvRDZuQkJHcU0yRFNNaEFleEFCZ0VOKzNKNnJPTkxhcXJ0WlFXbEtDMHRKU1ZGZFhvYTZ1RmtkT25FS0pRNEhXb1VyWTdhNXFIVlFRSUhBY0dNSkF6UUM4UUFsQUNhV1VtZmI4ZjhaTkhkcm42WjdONHpHeWJ4KzA1d3F4cmREaVI3Qkc2Y1ZsdnRNRzRmZEZrQkQzbFZlaTgwZmIwSHZ4ZEtpNU11d2ZQeFI1eDJwKzgxR0RXamFIc2FENG12YXg3RitKZ3grZlJKZDMvb2VSVzdhZzYvMUQzZG9Nb0V6c2dkSDdma0xLa0U0dzdWcUZIMjUvREt4N3Y2WVB2SXdSWDY1QWVId0F6aSs1QjRmZTMzSFR6T3ZsenNublhvemlKbGwwQXFDS1JQeklMQ1JtWlNFcGF5UjZmTG9XVFc4SmJIU3RCQVlHemlvcEtlNExWeVVlRGFWVURWZjRsb0pTcXFBQVF5bDE5eXJsd1FQZ09CWXM2NENENDhCQmdOVnFoY2xraHNGZ1FGMmREanFPQWR1cUxVaVhMa2pLeWtLWE4vK0hsRjdYRmdweVZjQm1NcGs4ZW9BZVAzVUtaNHdVSGFJMFlPMDIyTzBPc0t3RENnQ1V0Uk9ISzJhTlVFRWdCR0NxcWtxVFFnUFZUeFRWR2x6VFp6ZWd4RUlRSE9DUDcycE1xdmNlY0JrclRIbW9PUWRFZHJ5OFN6NGl2UU9xOXU0RkR3Qk9BeXIyNXlCU1ZtRzI2dUJlbC9HMy9GZlU2Vm9ocWtVQUFCYXNSVUJVUmorMG0vY3NVdnJGd3BndjcrTE5JdWYvNXVEODlxdGpiUW1qeDRIZHR4cGxCUWIzZldLRnBkcHd5ZTBVR1FtMnJBUk91WG1qckF3QnJkSVJIaE1FQ0JhVS9iVDNrcUhhWkFMQzRwQTRhZ0s2djdZVXlwSnpzTHAzWmswbUJOM1NDU24zUG94T0Q5NEcvYm04bTJaZUwzZE9BRkMzYng5WXdYVzh5bC96RU5raDdlcmNkcEhoc0Z5aHNZbTNLRFVhc0hYMVYvZlBJVzBRMjlvR3F5a2NzZDI2SXJaYlY0UzNhQVpWRUhQWnRkSzBhZE43di9sbVRSTVIzQUJJNEFhQW9RTFB1T3h0VHNJVFFIQnloR1U1T0RnbldONEptODBWdE9zQ053NjBhU0RLQ3F0Z2l3aUh0blVxb2xxM2hEb2tFRUdkT29CbUg0YmVJZ0J3b25MdndjYlArMnJPMTVYWTdpNFlXVk9LQTNtVnNMRjI3Q20zUVdEdGdBQWtCQ25ocENBcXh0VzlCdFJWaDQ0Qm1LaW91SG1QanV6ZDdZRnZOK0xva1Jqb2EydVIwTEVuUmlScC9BaldpQ2hxRCtMSGNYZUFyNzZJMEFkZWNOdUJHcGY0T3g5SDNBOTM0b2NSSjZDeWxZR2tQWVJXL1MrcGxkekpMZGc2Y1N2c0JXZlFmTWxiY0RtYXFyRnIyRmp3Q2FsUW94NUc4eTBZT0ZRZWlzR2hjdE0zVU1jT1IrdkJIYTk4RXlYM1I3OS9UOEgrMi9zam9FVUxPRXFMa2ZMU2FuUVk2bkltYUxxTVJLdVdYMkY5dDk3UWRCbUIwUjhzUXRTZ1NWQy9kUmUyVER3S3hsYVBnT2hMRGdEendmL2g1OFZmSXFKTkM5Z0t6aUI2NWdLRXVhZmg3SUk3VUhSUmk1QVlOWFM1MWVqNndlTTN6YndLbHprbkFOQXF5dkhUN2VQQVdNckFkSG9NdDJSRUFkRGg0RDMzUUZmdmdORlFnUVBqUmtPcGJZRSthOStFMk1LNjlkejUyUG5ZT09RdkRVYjdsNzlFcTU0SnlGdnhLUEwyRk1HYVd3MVNjaThLWDlNaWJmbi9rTnpldFZmeVBROWoxeE9Qb095VEVNVGQrVFF5cGc5RzdkWjNjUGp0TFdBckw4TEIvWXJOKzFlaXlYMEwwWGw4VDNSNzgzWHNmbkFxU3Q1TGdaS3JoZG1TZ0NFL2ZZemd5NndWUWtqblVhTkczUUhndnpLVmxIZlRWSUZTU2dXbmt3b0FWU3JWY0RxZDREaU9FSjZubkVCaHQ5dmR3YnV1eWg5UlBRZWdhdnRLYkR6K0UzSWlBeEJsRFVQZkRkOGpKcjR2dWo3UUVqOFBHNDdRV0MxNHFuRTFEQVFhbkJPaEdtblFnUUFBSUFCSlJFRlVWTGlpQ2lvbXVKZVdpdVdJNnFEWEczeDFtWEludUhPRTV3VkNLVlhZN2JhSktwWHFmeTdyTDRkeWd3VWFiUkNpdEgrT2NhMjZ1aG9zeXlFeDhkcW9iWFoyRGxKVFcwbTE2LytvZlFEZzdGT2pZZW02RkIySEpZSVRnaEVVRlhUVis3ckNFa0lRRk5VdzBORlJVd2toSUJUYWtFQVA5Y05XV1FrblZBaU9qOEgxY09kUTFncHplVFZVTWZFSUNMcUtlQjZCaGFtNEV1cllCR2dDbFY1ZldXR3BySVVxSWhZQklaN0hZZzAxY0JnY0NFeEloRUo1azgzclpjNEpBSGhMSFd4bXhpdmM0MllSQWRieVVsQk5CSUtpUXE1NnJaU1ZsYzFOVEV6YUJjQUNWMmx4TzZXVUpZUnc3ckxpdkhkSmNhMVdpOERBUUFRRkJTRWtKQVRoNFdHSWpJeENiR3dzNGtJRDBheFpLM1R1bllua3BFdEJ1R3hkRlp4TU1BSWpnbjRiWTdOWUxDZ3RMVVZWbGJ5Mm1na1dpOVdkRDNvcGJjcnBsSEpCaVNDNGduQkxTMHZpVlNyVjNFdVBTeFVTSXNQaGw2c1RkVVFjMU5lNFQwQmM0OEdXbXBoNG45WUliWHpDZFIwM1VRY2k1RnBxYlRGcWhEUlBidVNyUUlRaysvNU9IUllEZGRoTk9xK1hPU2NBVUFSRklUam9abDE1REFJVGtxOTVyU1FrSkV6NzlOTlBjdTY3NzM0ZUFBOVFpYlhoVW9GS01aZVVLaFFLd3JJc2RXVWtLS0JTS1dHeHFLVE9Zb0dCV2hoWU84cEtTeEVWR1ltZ0lOZUVxYU91ZlAwdWEyTzcxSVRGMVRKUEJEVlhhVzhISEE0V0hPZVJNaVY2UWdtbGxNVEZ4VDBPb0tzZm9xNU5FbWY4SDFKdVRmRlBoSDllLzFKQ0NPbDB4eDEzVEhEYjJUU1VRdTVJWUVSY2tHVWxnT000d25Fc0hBNFdkcnNETnBzTkZvdlZuU1N2UjExZExTb3JLNlhXZlZkdFcyenNpOHJLU3EveTNpYVl6UmJZYkZZUHBzYXluRlJqU1JCNEtjSGRhclVNWlJobXJ2OXlYN3VFdE83bW53VC92UDRsSlRBdzhNSGMzUE5IVTFOYkh3YmdkREczUzdZMlNJbnlVcm9WV0phRFFzRktTZkkybXdwbXM5cWRKSzlEVUZBUVFrTkRFUkVSZ2ZqNCtLdmtuRDZFNHpndkZkUlZXODFtczhKbXM3dTlvS3hVMmx1dWdsSkt5YjMzVGxOb05KckgvWmZaTDM3NTUwbkxsaTJucEtTa3lEMmtLamVKWXVBTy94QUVNUVRFQ2FmVFNUaU9BOHVLck0wT204MEtzOWtNZzhHSSt2cDZWRlZWbzdTMEZGZGJQOUluc0xsQ082cmNLcWhCcXJObXM4bVpHdXZSQWRwZEpaTlFTcGtQUHZoZ05vQkIva3Q4N1ZKZFhZM1MwakwvUlBqbEx5c0toYUwvNGNPL2pCYUJqVktxRXNHTlVxcWdsREx1NnRseWxWVENGWWZEQlc2WDZyWVozQ3BwRlVwS1NuNGJzQmtNQm5mUGdocm9kSHFZVEs2MmVXTExQSG1OTmFlVEkvSXVVd0JJZlgxZHFrS2hlTXgvZWYzaWwzK3VSRVJFVE51eVpYT1NGN2hKc1cwQWlDQUlNdGJHU2F6TlZaRFM3cmEzV1dBeUdhSFQ2VkZiVzRQeThuSVlESVpyQnpaNWh5bFhlVzhMckZaUFVET2F6S2cxbUtBM1dXRmpPYm5EZ0JFNDY2eFhOdXhNWExCdUwvYVdtUzRkMkduSE43c1A0Y212dHVIZjIwK2d5a0g5Vi85Nmk5T0MydFBuWGNHa3YxTXFWcitBZys5dnUrNUQ1Q3QveFk3Wnl6M0dhRGkySGNlV3pNZSsyWE54NXJ1OUVIN1hMd2pRbjlpUDh4KytneE52cm9URDY3dXFyU3R4Y1Baak9QTEtoN0JhWmIva3JNTysrMmZDNUUrR3VWN1M5TlpiYjczZERXd2VRYnNpYS9OMEpIZ3lOeEhjckZZYnpHWUxqRWFYU2xwZFhZMnlxd2hTOWdDMnFxb3FWRlpXdWhMYzNYRnFMaFhVSnJPcjJXR3cyTUVRVnlFUHdja1JweXRtalZnTkZRTm5mN1Q1WVM0cUVTTmIvajk3NXgwZlJaMy8vK2ZNbHV4bTAzczJnU1FraEJZZ0dDRFNJUUtDb0tBQ0l2WUduT1c4czVldkRVODV6M0xxejNZcWxrTlJFYkZncEJjRlJLUUhDTTJRaFBSZU45dG5mbi9zSnRrVVVoQ1UwM2s5ekFPem01bjV6T2Z6bWZlODYrdHQ0S0gzdnVGQXZXc0xmNVQrSFV0emJNd2RNWWpnMmp4dVh2SHpyOXpBQ3RyQWRKUXQxejdhVkhiMHEyUmtYUm1XeXRxelBzVGpMejFMOE1VejhTd2l5dmxpSlg3REp4RTNZeFRaajk5TTVvYmNYM0dGS2pKZmVJWHF6RDFrdnZweGk3bW8zdncyUC96amE2TG5Yb2UyYUNPYjdudTF1Y0pLSFV6TUVDMEgzdCtnN0tPekJKMU9kME5tNXVIQkhscmI2YUtrTGJTMmx2NjJ4cW9FbDBsYVhsNUJjWEV4SlNVbFhSZHNoWVd1Wml6VjFWVXRURkNyMVlMTjFpallKUHk5dFlKV0ZCQUZCTkZWeGk4QVl1SEo3TnVQK01WeS82amVqRW0rZ0xrSkFpdjJGd0JXTmh3dTRkWkpJeGthRThIOFMwZGdQM2FVZzJabDhjOFdpcjVld3Y2WGx1S29POG5oeFl2WnYvaDVxaXFrUmlsRjFwdlBzLzJPTzluNzhoSWFURjE3cGNoMWhSeGEvQWpiNzMyRWdveDhUNmxIOWpzdnNmMk9POW45MHBLV21rK0hndmNJeDlhYWlKdmNwOFhIZzU5NWc0UkxKeEkxY1JhUktTR1lDb3QveFV3RU0vS2o1YVRlZncydEt6Q3pQMXhLN01LSDZURnFHSU1XUFlMOXUvOVM1bUhWUk0yK25PTC92b2RGZWVPZU5mVHUzZnRLV2dZUk5CN21hS1BXMWxSTDZobElzTm1zV0swdFRkTHE2aXJLeXNvb0xDenFtbURMeTNNVnVMZU9ncnBNVUZkYWgwZVQ0K2FBZ1N1Q0sxb3M1cm5IeTZ1bkowU0U0R3lvNTFTZGxjU0lFSTZYVmdGT0hKS01TdVcrbktoQ0pkZHpzdEt1clB4WmdrLy9ZWVNOR1lLb0NTSTRMWTJ3dExIbzlhNzVQdkgwQW83dXFTSCt0bHZSNUc5a3c5MHZka2xiTGxyeEdlb2gwNGlkRU1kUDE4eWp2TUlCT01pNGV3Ni9aRHBKV0RBZkgvTWVOdjcxMzEwNlg5M1BQMkJQSEk3ZmFiSXJpNWN0SWp1M0YvMHVIM1lPWnNoQzlkRTgvUHNuVW4veUdEYXZSQUlpeXFuSmFuYVhpQkVwQklsN0tjNnlLUnZxTEVHdFZsK2NuNTgzbXFiY3RtWmZXMk5ESnplZGVJdEFna3U0MmQzNWJXMmpwS1dsSmVUbDVYY3MyR3cyRzhYRnJsclE2dXBxdHduYTRCRUZQVTE2aDlNcHlMSXMzdkhRWXlxTlJ2TVhzODJHdDFiRnAydldjczJLbjlGcjFOVGFIWUEzSStLRFdQRmpCbVgxRGF6ZHVvOWNXY0JzZFNncmY1YmcyM3NReG1GSmlMb0FJbEpUTWFhbW92TUdLQ043NVM2U0huMmNpT1JrQmk1NkZPZTY1VlRVZDM1Ty82bFgwM2ZLS0tLbTMwYjhNQ2M1R3pLUVMzZHliS09Ub1l2dUlpZ3hrZmk3NzBYY3NZS3FoczdQVjN2eUpJYm9tSGEvYTlpL2dtMnY3U050K1JMOGZNOEZsYm9KbXhsVW1tSzJUQnhMWm5vdWFqMDQ2anpOQmg5OFluVFVaUlVyRytvc0lqSXljblpLU29yT3JiVzFDU1EwbXFYdHBYKzR0TGJHS0dtRDJ5U3Rwcnk4bk9MaUlteTI5bDlDYXBjSld0aWlINmlyL3JPeFpLcFpXMnRNeEhVNm5hNDJkcElrQ0lJZ3ZQTDBZL09CVkwxV1M0UEp5ZFhUTCtFU3A1cTlPemZqcDNIVmhONDJZd3JXdFR1NWZXa1dBL3YwWlh6UUNid1Zkbzl6RDBjMURkWCtlSWU1MVNUdlVQUysxVmdxZ1U3NjFCbzhraUgxeGtqS0s4dHhsTlppdFJTeTY5WWJtOVI5cjZRa3NBS2RVUC9MT09BME5Pa1ZPN1lSY1BGc0FrUFBGVmU4QWEwZW5QWUlKdjYwRDAxSUVEOHNCcld2dnUyZlNrNWwzNXhGaUtJNGJNMmExWk5EUThPK0JlenVId2R1V25GY3lidUN1eTlwazV6eDFOcTBXbGNnUWFkekJSS3FxaHBOMGtKaTJ5bmZVNXZONWlZNklsY3RxR2VUNDViNWFnNkhRM0FMTmNIdWNBbTFqQVA3L1ZRcTFYeUFQcUdCL0hLMEhORnJNS0hBOGVKeUVudTRPaEpwdlFPNDUvS0wzUzZhUWlaczgrWCtVSVZsOHV6dUlBRkJjcmFrSEZNSDRCMVFRME9wRGVLMFlDckRYQmVBTHFnTE9vNkhyOHRjV0lSK3NCRjFtQUV2UXp5alB2NFVRemZmUzM2UmNaZzN0SitIRkRUeFdwSnNvZTBia1NYNTRCMkl6dmZYRkZmcUNPamZnNXJNNCtndUdBYW1ES3BMd3hnUTc5dkNYRzBvTUJFU0Y5bnVHSnhhZnd5QnZzbytPeFBQWjNEdzdFY2VlZmo3WjU5ZGJBUHNzaXc3M0F3Z1RyZlcxcUoxbjlzeWxKdWpwRFozbExUUkpLMmhvc0lWU0FnUEQwZXZiL21DRXB2b2lLb2EyK2MxZURROHRqYldndUp3TlByV0hOaHNEZ0FCV1JiMjFEaHVYYmIvVkgrQTJMNTk2VmVidy9QYlQ3QmwvMTQrelpLWmxld3FIaTQ2bGN0SGUwNnc2ZUF4L3I1MEU0TXVIRXFjSXRmT3NsSVNnNi82QkpudmZVSGV1ZzAwbUFCQ2liMWlHSWVlK1FmRkdmczUrTVJpVkpQbkVPelQrZWxxMW43TTBUWGJLZmoySGJMMmFPZzVzVDlDV0NwOXh0cjQ4ZjduS2Q2ZlFkSG1OZXgrNFowdXBaajRqUmlKa0xrSFV6c2VpTXBOS3ptK2VuZTd4KzI1ZGd6YlgxN1Y1V2tvK3ZZampueStBYWU5bkt3UFBpUjcreUVBZWwxM1BUbHZQRVB1OXpzNThQaXphS1pjUzZoSEViMWNjWUJ5MHlBaStyVFZHZy9jTVlYdm4xMnU3TEV6aENBSWZlKzc3NzVKdEsxRzhFejlhSkcwNjNBMCt2V2JUVktMeFZWTFdsZFg1ODV0SzI4M2tLQ2FPL2Nxajl5MUttcHJhOXBwZW16RlpuT0ZZcDBPUnhON3h5UHZmUmFrOXZaNTNTcHFnNFpIQjRIS2k3UitVUnc0bGtWR3BaTTdMeDNITUhlZlE2Zk53cGJNYlBhWDFESXdhVEFQaklubjkrQU5OWmxNT0owU2ZuNSszVHF1dExTTTRPRGdidlVJUFpOanpuUjhydDNqalhIU2haaU9IcVFodndqRHdBdlJld3NFajVtTXF1d3dlYXUzSU1hT1pQaWpmMEhiaFg0VHdlTW1ZenV3bHBMTVdnWSsvVS9DWS93QWtmQXBNMUNWSGlRdmZRTzFoYlVFanh4TFVGeGs1NVJIK2tqc0dVdXA4UjVEV0srV0xDK1N0UUYxV0N4QmNhMXFBYVZpRHYvemJZeDNQRVpZYk5lWVlhcCsya1JEclphdzRRTVJHa3lJZmowSjdtMUVGM2NCSVZGMlRxV3ZSWWdlemZCSEZxRFZOSSs2NkpQWGFPZzFuY1F4N2ZjOTlSc3dqT0Q0U0VWS25hbk9yTk1aTlJyTitrMmJObHR4MTQ4MlVva0xndERZV2Q2ems1d2dpZ0tpcUhML2lPNE9WeXAzbHlzMVdxMFduYzZMb0tDZ0Z2Umd3amZmZk8zUnk2QlJ1Tlc2bVR3YWszUE5XQ3lOWEdzT3dlbDBpcklzaXphYjlWNlZTdlhzLzlMa251OThiR2M2dnY4VjJMSTJzUEhwSDVuOHdlTmRlckhaTXI1ZzFTTS9NK1BiNXppbkhsbEhCVnV1K0F1RFB2eVVvRUJSa1VMbkNOWFYxZjhLREF4YWlZdXp6U1FJUWdNdUQ2MU5FQVNISUFpU1NxV1NHam5iZERvdldhZlQ0KzJ0eDJBdzRPUGppNStmSDBGQmdZU0doaEVWWlNRdUxvNysvZnNUSHgvZmJJcDZCZ3pjWkpHTkdocDJ1OE90RWpvRmQzcEhVK25VbmoyN2ZWVXExYzNLVWlub0RyVHhFNW5hUmFFR29FMmF3ZVZmTGVhY2g1blV3WXovWnJraTFNNHgvUDM5cjd6Ly92dDhHODFSZDRSVVJhdFNLM2R1R3c2SEsxSnF0enV3MmV3ZVVWSlhibHRqSUtHMHRKU0dodWJRdk9ncWNxOXZaWHEyekZscmoydHQ0TUNCTndJS3VaV0Njd3RSamFoV2hNMGZ5TmNXLytDREQwNXdDN1oyZlcydE9kdmE1clpaV3dRU1hFWHlya0JDMDdacFdlVGVtSy9XTmhMcVp1NFFBT0c2NjY1VnFWU3FHNVJsVXFCQVFYY1JGQlEwbzFldlh0cDJ0RGF4VVd2enFFaG95cDF0RGlSNGtsSTJGc203MGo4c0ZvdExzTG0wTlZlUmV6dEN6Wk9TcUVsYmUvZmRkNjhEQmlwTGRQYmhJdFZUVWdvVS9LRzF0Z0hidG0wZDB4V3RyWDNOclZHNE5SYkp0MHovQUJCYnBuZllXdmpXbkU2bk8yK3RtUmtYRU5WcTlYWEs4cHhMd2VhblRJU0NQelRDdzhPbnVRVmFvOWFtcGhVWlpXTTFRcU1NYXVscnM1MDIvY1BoY0tCdXJBZHQxTllhODlXYUt3eWFmR3U0S2IrbkFxT3JhMnVwc1l0RUJmclFyZ3ZFS1lPcWRRS0FrNktxT2d6ZXZ2aDVxWlRWUFEySzEzeEtWYkVWTWFRWGZhYVA2ZEl4dHZ3amxCU0s5QmplcDh2WHNSY2ZJV3ZOejhoQStNUXJDSW8rVjVxaWhPUm9XMDBxcU5WbnBTdFdpeXRWNVpLenQ0eGVGM1dEQnJ3dW4yTmZiRVFDQWxNdkpxSmYxK2luSzdhdlJ0VjdIQUZoM2wyK1ZNWFdkRXF6eWhGMDRjVFBuY0xaU3VXVUdpb28zTElOcTBuRWVPbWw2SFcvM1g0MW5kaE5yVFdVeUtTWUxoOGppdUtJNDhlUEpic3B4QnVMNCsxdXJjM3BOa2ViTkRhbjA0bkRac0ZVWDQ5VHE0WFFTTHk4dkZyVmtUWnFiU1dJcm5yUTVnb0REMjJ0VGNBQUVMUnEyOVYzL2ZzRHByMzFMWC8vNkV0R3Y3U0NIYVdOOVhaV252dm9DMFkrOVI4U0ZpM0hzMFRWWWFwZy9pc2ZzZUN6elZ6NjRsSStQRkttU0xEVFFPVmxRRk56aEQydmZON2xZeHIyZmN1K0Q5WjJ6eVFRdFdnTUJvby9lWkhDektwemRqK24zbm1ZbFNsRFdabVN6Q2ZHYUQ0Zk1wU1ZLVVBaK01SSHYrcTgrUjh0NXNpR0l5MWZuUVc3K1BtRi8zYnZSS0lhamNGQTVkb1B5Zjd4ZUpjUHkzN2pNWW9PVlhmdlVsNTZ0R0k1KzU5Nm5iTlhhdTlnOTAyWDhNdW1RNWhMeTVIT0lUdkp3WWR1b3JpdzVRVXFOeTBqODh0ZDNUNVhiR3pzUkU5enRGV0VWR2dkU0hBNm5UaGxHV3QxT2ZXVmRVMFZDV2F6cFVscmM5V1JsaUUyVWhKNUNqVjNoWUZuMEFCWmxvWHE2cXFCZ2tvN2U4R3NtV3gvWUI0cjc3Nk9CL3A3c1dqRHdjWkhrc2tqTDJUVmdvdG8vZTVmOWYyUDFQVWN6RGNMTDJmbE5VTjUrYXZ0VkNqME1PMGlkTUtsOUpxY2VucnRyS0tFMmxPRk9OdVpQMmRESFhYNXBiU2g4WlJzbUU3bFlERlptajVTaDhVVFAzc1dnVkcrcDMxZ0d2SlBVVjlTeGEraEJlMTUyM1BNT3JDZldRZFc0ZWNkeUtpMSs1bDFZRDhUbjdxMmVYaVNTN016NWVkZ3FiTjBycUU0SEppT0hhRG1WRG1TdzBHYjlyaVNqYnFjZk95Mkxtd3lRd1M5WnM4aU5QRTByZVVjTmt6NXB6QlZ0TS9jYWkwdHhGelQwTTVhMUZDYms5OWluUUtIcHhFLzR5Sk9GK2lWTENacWMzS3dObGk2T0xzU2tpT2ZzbjBpU1lzZXBQOWZic0Rnb1VBNlRSWFVuY3B2ZDYvSUFBNExkVGs1WFpvbnllR2dldWNXVERVMjE1eTN1L2VLMnpLOXVLOWhiV2haY3FMUmFDN2J1SEZERHcrTnJja2NiZksxdVZzT3VJUWFndWp0RFJvVkRtZGpMYWtIdFZGZERhVTUyUlJrNTZIMlRPOW9McHR5NG5SS1NGS3p4Z2FJQm9QaEtoQko4dWpnM2pQSUgwdEpJLzJRbWlHOW9xQW1wODBVN3NncVpNSkZZd0VJanVsRlA4ZFdkcFk1dVNSY01VbTdZOUx0dkdvTVplWkl2SDBscXJNYlNIMy9FNkw2dUpydTJnNnZaczJzeldpb3dxd2Z4dVJQbmtldkJmT3hMV3llL3lBcVl5TFc3T05FM1A0dmhsOC9yc01yeVhXNWJKazlENHR2TDdSeUpaYW9TVXg3cGJrL2orM1lKcll1V2s3eUcyOFI3UDhyNytySWwzeXk0SE1TZXRWUlZpUmhyM0l3ZXYxYUxKL2V3L0hTa1Z6MDJDekF3cGFSL1lqOU9Kc1l6UTdXL2UxRkxDY09ZamM4UmZWM0FSaEd6bUhNUFhQYzVtZ1dXNjZiaTYydW51cFNQeWF2WDBIQUdWclo5aFByV0hYTjAvajI3b1ZVZmhJcGJqb1h2ZkVnV3JkZ3luNzFYbkxWS2l6Wm1VVGUvUktwMTQ4SEpFNjk4d2k3bC95RWYzd1F0ZmwyUm42NGpQRFlqZ2RSdmZsOU5qLzRMdjc5RTdBVVpCSHo0RklHVEl6cjhKaTg5LzdCNFc5MlVsdFR4RS96NXFKV0J6RHMvWGNKOW9XQzl4N2hwemUyRVJBWFNIV3VqWkdmZlVwa25HdXhDcGZjejRHZEVtTDJMcHdhYjZ6K3ljejg1SituZFEyVXIvc1B1OTllUTEyMm1ZcDdydWFFUVVYUCtVL1JmL0lBQU16N3ZtYjl0Y3VSS241QjZuTU5VOSsrRnhWUXZXTTVQOXo5UFBvK2ZURWQrNFhFZjd6YmRBekE4T0dwWTRGVGJxM05CcklOQkJXeTdKUmxXWlJBbHB4T1dSQkUxR3FYNWlaTE1vTGtiSkgrMFZCeWdyMHJ2aVF5MmtpSjFJQzZ0Vyt0MFZIbjB0YWFUZEJ2di8xV0o0cmlWUzFYM2NSN083T1lNK215VHJhSGxiSTZCeVA4UkY3NGJBM0pvMGNSN2dObHRXWUk5MUhrVmRjTkdZYTh1d2F0citzQktmcmdFZmEvczVLb0YyNXh6WEsxbHFscnY4U2dzN0g3cWxGa2ZyMmZsTm1KN1A3cjM0aCs3RE1HVGV5RFZIZU03OGJlU3NYbFd3bnU0RG1yMzU1T1ZmQVVydmo0TWRmYnVCVTlqTE91bElyOWg3Q2RKWHRLUHJHSHdCYzJrenJjQ0E0TFRxRHdkQ1owOUFpbXJGakI4U2ZtVWhYM2QxSnZiS25kU3FVbUJxNzltbUIva2QxWERTZjMreXdDcHNlZm1Wc2dhZ1NYL3JnVmpSckF3cllwUThuZFBaL2V3MTB2RSszZ1M1bjQxRHdjaFZ2NWFzSmpKTTdhZ2lGN05Udi9jNHlMTjIvQ3oxZWsvSXRuK09uNTk1bitlc2V0UUxLWHZrdmNveCtRUEtNM0lPSHNnaGJWNCtiSDZYSHpLVllsWE0zSUZTc0lhc3hrcnN2ZzUzK3VaL1MycllTSDZjaC8vVzUyUGZjK2w3M1YvSEtxMm5tVVN6YXRJeUJZaDlOaTZkRGZHVEo1QVZNbUwyRHJoRGlpWHYyY1hyMWJwa3liSFVZdS8rWTUxSlljMGdmTnBLemlYaUo4QzlsNSt6OUlXcnFSWGttaDJQTzM4UFhNcDRpYnVCdzNWU0ErUG9acDgrYk5XN0ZzMlRLcnl4eEZJeURiWlJBRndmV2Y0Q0t6eGVsMHlrNm5VNUFsV1JhY1RuY3RxYnNCakNHQTZObXppSXdNcDJmUENOU05VVkNYR2VyMFNQRm82VitiT0hIaWJLQzV6N3hrNS9VdlZ1TklTR1ZCLytDdWVuVXc2RFJvUkVHUlVXZUltdTByeWZ3NEhWTkZIWTdxRXFTK3plOGFROHBvRERvQUxTR2poM0g4d0NHWUFxV0h6S2kyZnM3ZUhTQWpJVHZ5cWNxdUozalE2VjhxK3FRVXhJemIySEszbGZEVUZIcE9tNGJCb3pKTVAzUXVjdzdQUFhzM0ZuTWh2WWE3VFVHMTdsZlZFYXZpa3dqMmR6MTRodWhJNnFxcnovaGNnbWpoeFBPTHlkOTVBTHRWd3B4VFMwQmxEZUFTYk9FalJybUdiQnhHY1BCSktyTXNtSGR2QTIvSWV2bFpWd3YweWhQVUhQVEM2WFllblE1aEkwYnk0ek4zNERoeUNjR3BZK2s1NFlJekhyZmxXQWJtcUdHRWhibWlDQkZqeDFDN05MM0ZHQUltemlUQVhjdXQwdjI2YUVOZ3loQlhkWWd1QWtOSURaWmFjSmJ2b3J6R2k2QXYvMFBWbDRCa1Jxek1wS1lLOU0waUkvcjU1LytWdW16WnNzMk41cWpzTWtjZElEdGxHY25sYjVOa1NYSzIwdGc4b3FSYU04VS9iYUdpcHA0Q2pSZnFSaFBVNld5ZDR0R2NrQXVJYXJWcWxzZjdtazlYcldhckdNZjdVL3ZUZVY2NEY2Rythc3BxbmZ4bHhrVkFBLytwaDFBL3ZTS3BPclk4VzdvcVRxNWp5NlBMR2ZmRmZ3bUxEYWJxNnhmWjhyV3RJd1hQZFJKTkVCSFRwdUxqWHFnZVU2ZmpHKy9kNGJYVTBhbGN1bTA5UlZ1M1V2ak5VdExmV2N2TXpXK2hQVWUzS3VvTnA5bEhVdE8vY2hkNVNRVlBCMVkzaWhiYWU5MW12L29RK2FVcGpGMjJDSjIzbXQzWERVT1c1Tk9md1gwOXI1akJSRTJkNnY1OEtqMXZEbWd4bFBhdUZYWGI4MXlTdHAraXJUOXg3TEhyS2J6dVZVWXRTRHRuMjB2cmMvYWVQMEU4VGRHYmZ6UlJVNmMybGNUMW1EYTdqVnNnTEN3c0Rkald5dGZtbWJBcnUxSS9YSlJHc293Z09KMnlTMmE1M0doVm1ZZEJOakpnU2hyUlBZeUl6Y200enZiU081QmxXYWlxcWt3U0JPSGlSbjlaK3ZyMWZGWVh3anRYcGpTcGxKMXRtWkdKUmpZZnl3YWdMUGNreDlTUnBJWXEvclhUemxod0NPcnlYRXdlY3N0ZVZJUWMyWmZnMkdEQVFkNjZsbzFIVEh1MlVXOEJzRkcrYlJlaEF3ZUJiMS9DK3BocHFBc2diR2dLWVVOVENJaUxRV05vWGpodFNBaDFCUzBicURqcTZzQS9uT2pwc3hqMjBwT284NDdpNmZ1MVpXMWwrMTBQVTFsMzd1YkFLeUNBQmpmOXM3UDRBSlZGTGNtUjFIb0Rsc3J5cy9lZ2h3UmhPdFdTYnJxaG9JQ0FJY1BRZWF0eFZoeWlhR2RMUHJtU0hWdGQ4MVc0aTRxcTNnVEg2UWdaUGhwcjFpSDAvWVkwemJtZk1haFptQm1DMERxS01WVzFsTlMydWpvTThja2szTGlRNVBtWFVYMzB4Qm5maTY3UElIUUZ1eWd0ZFFVaGluL1lpbC95NEYvTnFLUDIxV01yNzFvRVhSVTNqQkJ5c1JwaW0rY2hMZ3BOcTdlaldxMU8yN0JoZlk5MkJKdXEwV0pzbEVlU0pDRUw0TERaV25TMnNwZ2FFUHo5Y1RpdDFKZG5vMjRVYW0yckRKcUNCb0tQajgvbHpjWjBDWXMzWlZHcjh5THRXVmVvWFJ2YWkrMExKd0R3NU5zZmtGNXNvODdtWU1haUpTUU5Ic2FITXdZeGZjd292bnRuRlplOWVaS2FxbHIrZXZrMGdwVVN3Tk1MdHJBUkRKNFp3dW9MUjZBMnBuRHh0NitoSHpZVkkyK3pldVpjdEdJZHVxQ1Fsb0lnU09LSFdaZWpwZ3FMNzBRbXp4Z0V3TkJYWCtiNytkZVM5MVlDYW5zNTlTWWprOVl2YVNMUTdYWExQV3k2K1Q2K2ZGOUgzTjlmSlBuS29kVHYrSWlOLy9jSmdYM2pNR2RuRW5MN1EvaDd2SlNkNVNmSi91d3JZaDViVE5BNVNuOExtWGdGcW4vT0lYM21UNmo5SXRHRnROUnpqSmRmejlGYkgrS2IxYS9nTi81NnhqOTY3YSs2WHZUY0JaeVlONStWSTk4azRwcUhHSG5ITkdLdXVaWDFDeFpRdDNFZ2xoclFKN1JrWGJFZldNMmEyV3V3WkdjUys5ai9JOEFiR0RDVjFKdTJzMzdDT1B6N3hXSStsWTNmcFE4eTlwNUwzVTl5VHdiZmR4RmIwMGFnOG90aFRQb0tnbjNneUVOenlEMnB4emRVUzlYeFVsTGUvdHVaMzR6dklGSWZ1cGp0MHlmakh4OU1kYmFOa1o4cyt0VnJrbkRUUXJiZlBaTmYvQTNFM1AwU0E2Y25kZkNtTUpMNjJrTnN2V2tLSitMN0lsZVZZZ2xLWmZwSGk5b0kyR0hEaHFVQ3VaN0NUWlpsdStDS2tFcXlJTGpOVVFtVmx3N0pWRTlWdGdsYllEamFXQzkwNFVacU0zOGlxL3drSllJT1lmRGd3ZTcrQm1Zc0ZvdGd0VnF4MisyQ3crRVEzQ0ZYbGRQcDJBUDBQeHUyVlVsVlBYcURBVC90NzZPdG5lKzBSWjNEZ1NrL0gxVmdCRHBEVzcrSXM2R09obG9MUGhHaHJjd2RpWWJDZkdTdlFBekJYWk5Fa3EwQlUzRTVtc0F3ZEw2NjMyVzlaSnVKK3RJNnZLTWorTDMwZTJkREhRMmxOWGozakViVnpzdllXbGFNcFBORDc5dlN2SmNzSmt5bEZYaUZSYURWZFcwUDJHcktzTlpZOFRaR296b0xsQ1pPVXcwTkZTYThvNDN0anYyM2NhbllNT1VYSS9xSG9QZHZQNWxabHVXam9xaTZBNmdINm5CUkdwa0JpNEJnRjBUQktRaUNwRmFyWlkxR0kzdDVlYUhUNldTOVhvKzN0N2VMMHNoYmo0OVdUMWpQSGk2TnJka0ViZGJZY0NmSW1VejFhV2RIcUxrY0h1R0JTcm5RcnpRR01FVEhubDc5OS9iRjE5dTMzYm4zTnZiczNtcHB2Zkh0MmZOM3ZWdEJhOEEzMnZDN2prSGw3WXR2QjZrYVhxSHRWeXFJT2dPK1BiczNkcTEvS0ZyL3N6aDJneisrQnYvZmQ4dUtXZ3lkN0NOQkVQb2VQSmpSZCtEQVFmdmJtS1BJVG1Ra1FSQUVTWEpwYlkyQkJNODZVb2NrSTJuVjJHd1d4TWJHTE0yNWE4MytOVUR3OHZLNlRCRW1DaFFvT05lSWo0OGYwY29VYmMzNFFYT1psWVNuN1BJc2tMZGFiWWdldmpYQjdWc1RQQngyb2lBSTA1VXBWNkJBd2JtR1hxOVBvN242b04wV2ZhNGZxWkg1UTJpaHNUVjF0ckkxYW15U1IrREFwYWtCZ3RuY01CV0lVcVpjZ1FJRnZ3R01SNDhlR1VqTDhxcEd4by9HMUROQmtqeUw0NXMxdDJiMmp5YkIxb1p6emVYZTBHcW5LblA5MjZLMHRKVDgvQUpsSWhUOEtSRVRFelBNVTJOem02T3FWdVpvQzY0Mk40VjRDNjFOZEFjTW1sUzd4Z1BkWnFnaTJCUW9VUENiUWFmVGpXK2xyYlZuanJhUVdhMERDWGE3SGRIVERHM1UxQUNob2NFMG9YMHoxTW5Pak1Nc1dybUJlNWR2NHYxOXVSNzBLekpaZVhsOHVtMHZyMjQ4U0szSFVRNXJBOXNQSGVldGpUdFpubG1pck9CdmlFUDNYY0dKSGNYbndVZ2tmcjU2UEFXbi9qaHpheXZOcGJxdzRneVBybVBiWlpkUzJxWERiVlJsSE1KK0ZoaHhhamN0WWNNVFM4L3FQTWdORlpRZXlXM3orYy9YakNVdnAzdm1hRWJHZ1Q0ZVdsc0xqYTN4cHlWWG05UW1RaXEyTWtQeE1FTW50cjgzNi9ocWJ5RjlZbVBFelJLVUFBQWdBRWxFUVZTNHRIOFVtN2RzNFBFZkdrZHU1cjMxZXpoU1hNSmJQMlMyRUd5bGVUbThzemViL2IrYzVJdGppbUQ3TFdFdEs4QnV0cDBISXhHSm5yY1F2OEEva090ZzFTdnNXYkwrakFXOXBTQVBSMWU2VFZQT2pxdHZwTnA4Rmw0dnBrb2F5czR1LzU2VSt3TWIvdnBpbTg4dGVUblk3ZDA3VjY5ZXZaSTlOYmJUbUtONG1xUE5XcHRMc0ttYm82R05UQjR1TTFRVXhmWUZteGpBNGhzbk5mMGEyRkRHWC9ibnd0aFl3SnRuYnA0Sk5UbDhjM0JuU3pHYzBKOFBFdnF6ZXNOYVBxaFRoTTI1UVBYT2RJNHZYNDhkRFFFanA5SC95dkZOU2JxMjRxUHNlK3gxekZaZkV2OTJOeUZHWDhCQzNySVBLZHA3Rkx0ZFRmQ2tXZlNabm9vQVZQK2NUbVdsbm9ZOUc2aXBGSW03NlhhTVNlNGlkVWNkMmUrL1ErSCtrM2pGRDZIL3dwdnc5dTQ0KzlOMDZBZE9yTm9Pb2hidjBhMEViODUrTXBkOGdxbmFpaUYrQ0gwWDN0QTVBK3hweGxDemR3MUZCZjcwdlhRRUFKV2JWMUlsSlJKL1VSSmw2ejZpUVcya2NuTTZGbWN3Q2ZQdklEVFczLzJ3bDNMOG5YZW95Q3JCa0RTTy9yZGNpVmJkcUkyVWNlSzk5eWc3VW9CWHowUVNicjZWQVA5cU1sOStuNG85R2RUVmxiRi9jVFpDWkRLRGIzUjVieHdWV1J4OTkwT3FUOVVTTVBZeStsMlY1azR3dHBIMzBWdWMybm1TZ0xUSmRFVUJxL3grQmFkKzNJL1pWTU9KRnhaVG9CV0puTE9ROEhoLzEvbVd2VXZlanFPb2pRa2t6cC9mVk5qZXNRSll6YkdYbjZVOHU0cklXVGZUYTB5L0pzMHcvL1AzeVB2aEVLcUlSQklYZG42KzNBOWVvdkxnQWVUaVhQWXRYb3lnQ3FUMzN4WTJrU2FZVCt4azk1SlBzWHRGTStDZXUvRnpsN0JZOGpNNDlzN0gxRlU3Q0oxNk5ZbFRoaUlBM3Q3ZUk0RFBXcHVpamVZb3NpUTVKVW5BNlVRbHFtVkpJd2xPdTAwMjFkUmdreVFzWHQ2SWpWTFBuWlNMTENOVVZsYjBwNHZOV282VWxwTm9ERkdreXU4TXVXUW5HK1kvVCtqTWErbHozUlVJNXBvV1JJQW5sMzlGNkNXekNkQmxzL1hCMTVwTW9acENPMUd6cjZQM3ZHa1V2WEk3QjljY0E2Qm1Wem83L3ZZNG1wUnB4RTdvd1k2cnI2V2lSZ0ljWk53OWgxOHluU1FzbUkrUGVROGIvL3J2VGg5UVRYZ3NZV21qS2ZuOFZWcVNiVFN3ODZicmNmYTVtSDd6YjhRL1FNTGE2UnYrOUdQdzZ6dUl3bGZ2NDhUdVFteFpXL25oNGY4UU1DalJwZk9zLzR3ZEQ3eEk0T1M1R0JNZGJMbjJUc3dPbHhXeTg1b1psSm1NSk41Mkl4ejlqQitlVzk1a29mdzA3eklLQ24xSnVHMCs0YjI4cU0ydEJMVXZ3ZVBTOEU4TVF4dmRsN0MwTk1LSEpycHZLWjh0TStmUUVKQkNuOXV1b3Y3Ylo5bjl3WFlBU2o1OWxsMmZIaUx1cGhzUjlxMmtyTER6eW41ZDNFREMwbEpSYTcwSUhKTkdXTnA0ZklKY25JaUZTeDVqMTZjWnhONTBNd0dhazZ5ZmQxK1htSG5yMW4xS1ErU0Z4TThjeWFFN3J5TDNtSXRFTSt1NXY3Qi9WVGF4Tjgwbk5LeVV6ZGM5MU9uNS9JZU9JV1JZRXZoR0VKNldSdGk0QzkwMFR5NnROR2RGT3NaWjE2QXQzY0pQenk5ek9iUks5N051NWkySWd5YlJaOTVsRkw1OEI0YzNaUUd1WmkrclYzOFgyWjZmRFZrV1pBUkJFQVFRYUhLak9lMVduS2pSQkllaURkQ2hibDN3anFzMmRIeFhIcVpUMllkNTg3Q1RkKzdzcDBpVzM5dDcxVkNKdzZGSGI0d21KRDZDa09TVzM4ZGRkeWZSSS9valIxMU54dVVmWUFPMGhETGdyemRSc1g4LzVtb2Ivb1BpS045MUVLYTQraVlFWEh3TmZhYU1Ba1lSdCtJOWNqY2RJMmhVSmNjMk9wbTQ2eTU4TkJCMDk3MWtwVjVMVmNPOUJIZEEvYThON1lreDFNZ3ZiVFE3SzVacUs0RmhZUVFNU0NKNFlITG5RcngwWndkak1ETHl0YWRaYzh0dDVCaHE2ZnZpUndTSE5wY3pSYzViU095WVlUQm1NTGtmRGlCL2J4VXg2dlhrbHZkbjVyMVhvd0w4NzcyRHIyZThqdVhST1lnWnE4a3BUdURLcjI1M01ac2tOOWRHaHFlbVlqOFVRWmsySG1OcU15ZGMxZnJsMUJpbk1mNkdpNUdCUVhmZHlLcEZYekg4eGxIa3JsaEo3NzkramZHQ09Jejk3K2ZFaDFkMmVyL2VQZnZnM2RNWGpVWkhTR29xb1labW9aRzk0aXY2UHZROXhnc2lJUGtKY3BaZVFNR0psNGpyM1hFSmwrYUNTMG0rS2cwQjZEZnpNM0xUZnlBbWZqQkhsdXdpZWRPUGhJYW9rZnZmVCs3U0VSUmxPWWlKUDMxOVYwRFNNSHhWK1FpR3ZCYnowSWplQy8rT2NXZ2dnZlpackhyT1ZWOWU4UG43YU1iZlN2OXBvNUdBZ1F1dVlNZnlkSkxTWEp4MUtTa3AvWUU4VDNOVUVJU21aRjBFUVVBVVpVSEVwWmhwdk5ENWFuQTZyTmdGTDVkZ2ErenUzdmlqVXFuR2RqYlpGVVU1TFBqOEFJdHVtRW1pUWFsbS83MmhpcHZFeUhzeU9IRG5ISDRvdEdLODV1K01lR0J1VTMybFY2Q3I1RjNRYVJFY0RpVEFXWkhKK2hrMzRUMXlLZ0VSL2pRVTF5UDVORk5TZTBlRU52Mi9QalNNNnNvU0hLWGxXQzJGN0xyMXhpWWFIcStrSkxBQzNtY3k4a0NHdmZvTSsxOTltQy8rbmtmQWlNc1k4Y3FUK0hhd3B4eWxSUjJPUWRkblBER0ppemhlTUpqeG8xbzJHTkdITmRKL2EvRTIrdE5RWGsyRHN4aXBNb050Tjl6WVBLb0I4VWlBdGJBWVRVeDh0K2lhNm92emNSemR3NVlibXZzbkJQY2U3anBmYVIxQllXRnVWU3dDUThDdktRZzFZeWsxbzJ1MG1NUkFER0ZncTZ3RE91WkkxSVZGTmJrcGRNWXdHcklxb2FZSXM5bk1vWHR2NVdqVG0rQUNWTmpjOHVYTS9LcnFRSmRUVmFWUklWdXRycEVYRldENjhRaWJiOWpjclBrTmFTNXlDZ2dJU0FZMmVHaHJyaDhCQVZrV0pLZFRrSjJTSUlvcUpFbVNIZVphb2FiVUtodDhmQkYwdHJZYTI3MzMzcXNTQktGRDN1aTZpZ0p1K1dnYmQ4NmR3YmdJYjBXcW5CZFEwL09XQitsNXk0UFlTak5ZTjI0MlJkZk9KZHJZZ2U5bTR3b2NRMjVnN0w5dUIrRDRFN3Z3REZnMkZEYzMzREdYbGVKMVlUanFNQTFlaG5oR2Zmd3BCdlhaR1huZ21GbE1HRE1MMlZMRmpubVRPZjdkSEZKbW41NDFRaDBXMmVFWXlyOTVrZHpxSWNUMytvV2ZYOS9BcUR1YTNjWG00a0lnQmJEUlVGaERaRWdBM3VvSVZKR3BUUGpzdFRhRjlqWmpCUGJjbmRna211akFQU0VJQW5LcjdpaytFZEY0cFlReThiMkgyd3FVY0gvTXBhVkFIRmlLTVZVN3Vpd2dCRkZxMWR0Qmp5NU1qNld3SEhwSGdGU0ZxUlNNWGFCYnNaUVdJTHMxR1V0aEtkNFJRZUFmanQ3Z3o1QzNsaEVlZUFiS1NqZTZ5T2dqamZoZk5KT0pUN2ZQeUtMUmFFWU1IanhJYytCQVJxdEVYVUYwNld1Q2dDemh0TnVSTkdyc1pnc2FuMkIwWWY3b3ZIV29XNW1oUFBua0U2T0IwMWZOMnV1NGMwazZ1dWcrVkJaa3M3UUFWUG9BNWlXN2lseTNIempFeVlweXJFNHpYMjdQSUNFOGtxa0pvVWdOMVN3N2NJckRwNm9wdFVrczNRR3BBL3FSNktkUlpOSlpnQzFyTzBjMkZSQ1pPZ0JIL2s2czJoaDhBam94Y2FKNjBMQW5uWUtmUjBQeExvNTl1dy85OUV1YWd4RnJQK2JvbWtINE9nNlJ2Yy9BK0ZmNklQaEw5QmxyNDhmN24yZmdEUmNqVnhWU3NDZVBJZmZkMWlIN1J0WCs3WmhxckpoTlRpcDNia0Y5eW91UTFCSG9kS1VjL05jS2dzYU5SRXNsOWFWMmdtUENPeHkzRUpaNjJqRTRzN2F6N1I5ckdmWE5ONFQ0bHJGK3loeE9wUGFuOTFDWGhDLzY1QzF5VWlNUXNsZFRZcitRWVJjRW9oV24wdFAzUmJZL3M0UStsNmJpS0R4R1NiYkVCWCtaalhiUVZHSWovczMyLzN1RC9uUEhZc3ZkZ3h3NWlaN3U4L25IOTZYcWc2ODRPVFFJYldnTTBjUDdFVGhwRGo0dlhNN1BiL1ltYmt3aTVxeERWSnZDR0RSdklqRnpybVRicTRzSkNibWRxcS9lb0w2cmNvMFFBbUljbkhoektkYmtTQUpTUnVNYnJDTnUxa3grZXZGSkFud1hVci9wQTJvaXBoSFZ1M1A5MHI0M25YMmZYWXd4b29ZajN4eGx5S2ZqUWUxTHY1c0dzdnV1aDBuKzZ6V283ZVVVYmRwUHdtUDMwQm1CdnlvNkhuM0JNeHo2ZkJYK2dVR0VqeC9WRkh4cEQxR3piK1RBSlg4aG8zOEl4Z0ZHNm83dXhPcVRUTjlMaGpVcGNPKzk5MzZ2bEpTVVF6UTNVMVlKSUNJSUlyTHNSRVpBRkdSWmxwRkZBYnU1Rmx1REJybTZGSlZhclJiY2lia0NJRDcxMUpOWGk2SjRlaCtiWktmS3BpTGNvTUZpZDJDeE83Q0tXb1pIQndGd0xQY1VlVlkxUTJORHdlRkFyZmNsS2N3WDJWclBEOWxsK1BnSDBpL0lHNHZkUVZSNEJCSDYzNWFNeG1ReTRYUkszVzVLWEZwYVJuQndNQ3FWNnB3ZWM2YmpRM0JTdFdzN1JaczJVMXNxTUhEUjA0UWFtN2VqYjc4VURJSHU2SlltZ0xCaC9kSDFIRXhnVUEwNVg2N0JqSkdrMjJaajZKRkFZRnc0TmJ2U2NjUmNoTDVzRDZYSFRReDgrcCtFOS9BRlJNS256RUJWZXBDODlBM1VGdFlTUEhJc1FYR1JIWExtbDYxYlNkWHhmSHlUVWhGckN6RVhsT0J6UVNvNkx6Qm5IYUJvMHliS0R1Y1FmY3VqSkk1TjZGUjdPZDBZeXJkdkpuVDJYekQyalVEUUJoQTVvaThWaHdzSkdSaFB4ZnBQMEkyZGkrUGdKcXJLZkVoNTdnbjhBM1FnZUJGMTJVeHNSN2VUdis0SFRGVjJ3c2FPd3o4cUJBUXZvaStiZ1QxN0ovbHJmOERxQ01BNFlRUTZiOWRUcTQwZFRFaVVRUFhoNDFqTVdzSUg5d2FOSHoxblRLTHU1ODBVYk55SzFhb2xZdXg0Zk1OOE1Rd1lnYStZVCs0M205R05tVTFNU2krQ2hnN0ZxMU5aSkJJK01RMWIxaUhxOC9MUnhTVmpDTkxoZThFNGZPUUNUcTFhajgwUXovQm5IOGJnM2JrcWJSaWVobGZCeitUL25FWEMvYzhTayt3UzFFR2pMOEZIS0NJdi9UdXFzb3J4dTJBMFlmMWlPaWNpOWdvbmFtdy9haklPWVM2c3huOTRDbzNNWkFISkk5QzdEVHZCTjV5d1FRbUloa2hpTHhsQnhaWTFGRzc3Q1ljWVRPVFkwWGdITkZ1QWVyMCs2N25ubmp1QnE5K29IWEFJNEFDY2dDUUlvaXlxUkZrUUJOUmVPbFNTRTZuQmd0b1FpS0RUNlVSUDdqV0h3LzZOSUFpVC9xaWF6Zm5PeDNhbTR6dmJ5SDM5ZHJKTmt4ai93T1YvbUxVL2N2K2xtRktlWk9qY0ZFWEYveCtBdytIWW90Rm9uNldabzYxZUVBUVRZQlVFd1NZSXpSeHRXcTJMbzgzTHk4WFJKcm9UY3BGbFdaZzllNVpLRUlRUnlwUXE4QXFMd3ljaTZBOTFUN3FZUkx4REZKL3cvNHpYV0swZUdoTVQweHc0YU5sTVdXeDBuN21TZFJ0L1hLbHJhczgwajNmZmZYY1lvUFREVTBERTdQdUorSVBkVTl5ZEx5b0wrNzhGbjJYTFB1NDVhdFRvWXpUM1FCRGRhUitOcFZXQ0xNdXlMRGZuNDBxUzFLeXhBZWgwdXFIS1hDcFFvT0I4UWUvZXZYdTVoWnBuMmtlallLT2x4dWJxMVNKSlVzdkNVcFZLcFRnZnppTEN3a0s3RlRnQU1CZ00rUG41S3BPblFBSGc3Ky9mcDVVWktucjhDSzAwTnlUSlJXbWs5cUFwRWdSQnVFQ1p5ck1wMk1LNmZZekJZRkFtVG9FQ056UWFUUkp0Zld5TnhmQk5UQitlUmZHZUdoc25UaHdQQXhLN2VzSHEybHB5SytweG5DNG56OW0ycWF6VmJDYTNyQnF6UTFaV1RJRUNCWjFDRUlTRUYxNTQzcWVsWUpOYm02TkNjejZ1Ui9BQUVJeEdZNWVLM3BIcXVldVZGZXkxYXduM2NsSm8xL1B2NjZjeElrd1BXSG51bzIvNU9xdWNVaW1BTFU5ZFJiVDdzUGRYcnVTTnpEcDZCSGlSVjJWaHdSV1hjT3VBTUdYbEZDaFEwQ0VtVFpwa0JDcG9JcHhFRkFRRUQ4ME5hUGExeWJLRXV0RkcxV2kwWFJOc29vWUZzMmFTMU1PVjFyN3l1MVVzMm5DUTFmT0dBeW9tajd5UVd5ZWFtZmptbmhhSGpVZ2R4VFV6dzlHS2tIOTBENU5YYk9QeUFWZDBVdEdtUUlHQ1B6dWlvcUo2QXBsdVFkYWljeFZ0b3FNdTRTYTZKWjJnVW9rRHVuWVpyeWFoQnRBenlCOUxFOCtNbWlHOW9nald0ODE4N2hzVjNsUnJGeGJraCtpd1k1V1VSVk9nUUVISDhQSHhpZk1RYXExYjhqWGxzcms3V0NGSmt0Q1U1Q1lJd29CdVg5RnU0cjJkV2N4SjdkdU5nMlErMlhxUVljT1RNQ3FrSUFvVUtPZ0VHbzBtb1pWUWErRmphNTJvSzh0eVV3bVlBSFNQVkUyeTgvb1hxM0VrcExLZ2Y5Y055aDAvYitYamNqOWVtRFJBV1RFRkNoUjBDbEVVKzNob2FXNmhKbnVhbzlBaWdPQVNiRUpwYVVraTROWDFTem41ZE5WcXRvcHh2REsxUDExVnZBNW03T0t4bjJwNTU3bzBnaFZTRHdVS0ZIUU5YaXRYZmhIaUlkeEVXYVlGaDZSbkFFR1dYZWtlK1BqNEpIVDlHakxwNjlmeldWMEk3MXlaZ3I2TFV1M0U4UVA4ZlZNQmI5dzBoUmh2eFFaVm9FQkIxOUczYjk5UVRwK2s2eUhVWE9hb0doRFVhblY4bDY5Z0xtSHhwaXhxZFY2a1BldWkrZFdHOW1MN3dna0FQUG4yQjZRWDI2aXpPWml4YUFsSmc0Zng0WXhCL0dmMURnb3JSYTU1K1VQM2lmUzhkOTg4QnVxVlJWT2dRRUhIQ0FrSkRXOXJqcmJVMmp6TVVWa1FCRUh2Y05oZkZrVngvcDloZ241TDJpSUZDaFNjSFpqTjVtWGUzb2FsdU9pTDZvQTZONFdSQmJBTGd1QVFSVkZTcTlXeVJxT1JSUUJCRUdLVnFWT2dRTUg1Q28xR0Urbld5c1RUbUtLZWFSK3VMd1JCaUZHbVRvRUNCZWNyVkNwVjlHbUVtdUFoM0FBWmtKdStWQVNiQWdVS3psc0lndENqbGNZbXlIS0xsQTkzOVFISU1vZ25UaHdQQjNUSzFDbFFvT0E4aHU3Zi8zN0pwM09OeldXT2lzSEJ3WkhLbkNsUW9PQjh4OENCQS8wOEJGbWJkSTlHb1NiTE1xS1hsMWY0bVZ6a1RHaUx6T1lHY3N1cU1kbi9QTFJGc3VSQWtwU2lXQVVLZmkwaUlpTDhUcU90dGY1QnJWS3B1aWZZenBDMjZLT3ZWdkxtVVJQaHZsb0tLMDNjT0dNcUN3Zjl3WlhGd2swc1Q3NGVWWThJWkpzRnI3Z1Voci80RWhHOU95OUJNKzMrbWdQYkhZeTgrMHBsUnl0UUFQajcrN2ZXMkU1bmlncWlLSXFoM1RxN203Wm8rd1B6V0huM2RUelEzNHRGR3c2NnYzVFJGcTFhY0JHdHlhMnZuRHFkN1E5ZHg4bzdyaUw5MnFHOCtzMVBWUHdaVnNNcmtVbDdkalA3NEg3NkRuR3cvZi8rWDR1dkhUVmwxT1lYSTdYUThpVHN4ZG1VSHZ3RnlkRTlqVThHY0Zpb3k4bkJicFBjNTNOOVo2c3FvNzYwcHMweDlwb3lhay9sNDdBcG1xV0M4eGZlM3Q1K3B4RnFUZFRnamFWVmFsRVV1MG1KNWtWU2orYXkwcDVCL2xoS1d0SVdVWlBUNWlpOVIwZFlDVkNyeEE0YjdQN3hvQ1pzZUFxV3pVZHhBaW9zSEh2NkxnNXZ5TU0vVkVOdGJSQVRQbHRDUUdBZE8rZmZSc1dKSEJyS0pOYk4zUVVCU1V4NDkwbThLQ1M5NytVTTM3T1RVQU5VZnJtWWJlc05YUGJHWDEwSzRwTDdPYkJUUXN6ZWhWUGpqZFUvbVptZi9KTzlONlZTSVF4Qk5sWFRjRFNEaUwrL3hZaWJ4d0tRL2NKQzluMlRTMkJzRUxXL2xIUGhxcldFTiswSUMvdi92Z0QxUlhlUk5GM3A4NlBnOTRWV3ErM1V4K2JXMkZBTGduRG16U01iYVlzbVhkYWxQLzlwenk1ZTNaWE55UW9yLzVoM0tVRi9odFdRNmlqZXRJbHFTdzBuWC91Q3VHdWVRZ1ZVYjNpUGpCMGFMdHU0Qmk4MTVMdzhuMzF2cldMQ3c1ZHo0YnNycVBudVZUWi9aV1hLMi9kMzYzSlZPNDl5eWFaMUJBVHJjRm9zVGF1dTZUZVZDUS9Pd0xKN0dWL2V1NHpoTjQ5RlJTbEhsL3pJaFZzeU1JWUREaHZPRm1XOEVqV0g5dUUxc0ZwNXFoVDgvcXFCV3UxSHg3NDFvVm1OZ01BemUyQzdUMXMwc0c4L25qTEdzRzN2SGw3ZHVKK0xiaDNQSDc1MWlWUkw4YXB2RVlxUFVhTWZ5dVFiSmdKUXRuMDdHa1F5Ri84RENiRG5WbEJsUFFUOHVzN3JBUk5uRWhEc3l0NVI2WnF6ZU1LR0RBWkFGeDJOV0YyTkhWQVJSTVNJSUhiZmRnTTlKNDBsSXUxaUlnWkVleXIvakZ1Zm9UeFJDczRMcUZTcWRreFJHUkNFMWc0WkVmRHIvaVhPakxiSVlQQ2hkMlFZTjAwZGpWLytNWDZzK0JORVI5VlJKUC83SmNaK3NvcGVrY2ZZOVZwNjArUWJrbEtKbWpxVkhsT24wbXZoSTR4OS9KYXVTTXJtNVdzbkpLMzFhWjlWUUZDN1YwbHNhUjRQZVhjZG8vN3ZGclQyQXJaZk9aa1RlOHVVSjBqQmVRbFJGSDFvNDF0cldWTGwvZ3hSRUlSdUNyWXpvUzJTS0tveE5mMVdXVnBNbmtOTG9PN1A1R1VUNlhmL0E1UXNlWjdLR29uUVVTT3B6VHlCZjNJS1lVTlRDQnM2R0VOUXMvNnE5alZnTDYra3Blanl4Y3VubG9iQ0JwZld0Mi9Qcnh5VERadEpJbmo0V1ByZjh6Z0pZOE9velNwcDhmM2hKKzdtMkFaRmExUHcrME1RQko5T1ROQW1YalkxZE5NYVBDUGFvcjY4c3ZRenRwdDFoT3BGY2l0TXpKbCtFVVAvWkMwME5iRnA5QjMvTEFmL2s4NjRCMjRsYWNmZHBJK2JURUN2Y09wemZ5SHFqcGRJdVdxRVM3dE5tVW9rTi9MTnVJbG9JbEs0NkxQbjBPRkw3K3Nuc1hQV3hSeExDRWRyRU1IbjE0eW9sQzBYWDQ3VG1JaVdTbXJyNDBtYjNOL2plenZGMzM2T05td0tmU1lPVXA0c0JiKzNZRFBRc3VpOVRhb0h6UkpPS2dDTXY4WEFUQTBtS2l3T2duMTlNV2grSDdMSjg0MjJ5R21xb2FHcURuMllFYlcyYTNOaUxTdEUwZ1dnOS9VK0N5T1FNQmNYNDBDRFQwVG9ueXhTcmVCL0RFV0NJQzRFVExpb2kycUJla0VReklCVkVBUzdJQWhPbFVvbHFZSGZqT3JSNEczQTRLMnNqaWRVQm45OERmN2RPc1lyOUd5K2gwVDBFVVpsSVJUOEwwRFhnUm5xQVZmd1FHRk9WS0JBd2Y4Q1dzdXFkZzBNV1VZUmJBb1VLUGlmRW14dEFnYnRDYmhHL25BRkNoUW9PTitoNmtCamF5SGdHc3NTRkp3REhEcDBHSnZOcGt5RUFnVm5CMkpIV2xwN2Y2aEFnUUlGL3dzUU92a2RRQkNCYmxJNk9ObVpjWmhGS3pkdzcvSk52TDh2bDJhZFJDWXJMNDlQdCszbDFZMEhxVzN2Y0llSjl6Zit4SmI4R21XSk9vS3RtTXgvUFVmZS90emY1ZksvdkhRdjZaZE1Zdm5vRzJnNGg5Y3haNlNUUHYxU1ZnNGZ3dEh2ODMvWEthL1BPb1NwUnRHd3oyTjBXVmFKZ0xON3A2N2pxNzJGOUltTjRkTCtVV3plc29ISGY4aHAzS2E4dDM0UFI0cExlT3VIekhZRjIrb3QyM2pqeHd5MkZOUXF5OVRSUTdiamF3NTlzSlQ5Ly9ueWQ3bCt3ajB2TXUyVDV4R3JLam1YaFcvNlFkT1k5dTBxZWlWNTQ3RCt2clJKSjU1WlFQYk9ZbVh6bmI5d25rWmJhNk8xcVFFYm9PbTZsUnZBNGhzbk5mMGEyRkRHWC9ibnd0aFl3SnRuYnA0Sk5UbDhjM0JubTBOcmk3TlpXdWpEN0RqdmM2b0YvQkdRdDNvTnZlNTlpUHlYUDZiVzlqZjh1aEM3cnQ2Wnp2SGw2N0dqSVdEa05QcGZPYjVweFUxSHRuTnMyVGVZYXlYOEw3eVlmbGRQUklXRnZHVWZVclQzS0hhN211QkpzK2d6UGJYVEpOMks3YXZJWGYwakRWVW1mQWVOb2U5TnMybGtwYXJidTQ3U21pQzhTbjRpZCt0UmZNWmN3ZUM1YVdmOGdpNzViaW5aYTNlQlh4VHh0eXdrTk5iRjJTQTNsSExzN1hjb1AxR0VsekdHWGpjc0pEamF4UUpvT3J5Vkl4K3V4R29WOFJrMGx2NjN6T2h3ZzF1emRuRmsrUVpLanBZanJuZ1R4eDQvL0VaZVNxOXhTVTNuTzdiMEs4eFdMVkZ6YnlRMnRROEFoVis4ZzJ3Y1JPbDNLekZiZlVuODI5MkVHRjFqc09ic0ozUEpKNWlxclJqaWg5QjM0UTNvZFIzZkU1ZzQ4ZnBTZ3FkY1NNNlNwVmdjdnZUNTIvMEVHdzNLQStHMlk3cWpzZjBxM2Z0SWFUbUp4cEF1N0ZFYnozMzdNd3VuRHNOTFNXL3ZaSzZxeUYrWFRlVFVPVVFtbHBEZkJTMUNMdG5KaHZuUEV6cnpXdnBjZHdXQ3VhWkowN0ljV2NPYWVRK2dHM294Zlc2YWcxRFc2RDZvbzZiUVR0VHM2K2c5YnhwRnI5ek93VFhIT3IxV1hWWXVnV25UNmJmZ2VxVE16L2pobVkrYXY5dTNucjMzL1kxVDJWN0V6SnFKMmxGM3hocGY5WWJYK09IWmRLTG0za3hrbkpNdFY5NUVyZnVOZVB6WjI4a3ZES1R2N1F1SkhOSURTNlc3RnRtV3ovZno3c0k3YlE1OWI1bUxIaE9PVHE2akRvb2lMQzBON3hBRFBvTXVKQ3d0RGYrNDhPYTV1LzVSZk5KbWtuREZPSTdlZXozWkI2c0FLUHJtWFhZKzl5R2hsOHdtUUpmTjFnZGZjNSt4Z1owM1hZK3p6OFgwbTM4ai9nRVNWbnZuOXdRbXNsNTdrUi8vN3pYOFIxNU05S2dFTE9WMXl2Tndlc0VtdC9xM2hjWm01Z3lwaTA1bEgrYk53MDdldWJOZnAzLzc4ODRkVlBkSVpteW9sbjNLQW5VSWE4WkdLbnhTQ1RkcWtkTEdjR1R0T3ZxUHViNWpXZGhRaWNPaFIyK01KaVErZ3BEazV1OXlscjVONkhXUDBuK0dTM01LU1I3bS9pYVVBWCs5aVlyOSt6RlgyL0FmRkVmNXJvTXdwVStIMTRxOS9uWnFqK3lucHFBYy82VCtIRnV4RzdpMitXMlprTWFJaDI5REFLSi94VHprTGw5QjNPMHYwV1BFQlRCaUVJVXJCNUgzVXo0RDBxS3hWbGFpaVFyQkw3NHZJUU9TUExaK05WYVRDbDFZQklHRDRnZ2VOS3pUNjZnQ2pSaFRqWlNFNk5Fa0RzR1kyck41N3Q3L0QyRTNQRVN2c2NPUWdiNnpoNUdkdm9tNGdTN0s5cmpyN2lSNlJIL2txS3ZKdVB3RGJJQVdLNVpxSzRGaFlRUU1TQ0o0WUhLWDdzbjFpSnJwYys5enhBOE5WaDZFdHJCMFIyTTdJNnV3b2lpSEJaOGZZTkVOVTBrMGRCSmN0Vlh3ajQzWkRBM1hzUDd3U1U3VzJNa3JMT1pRaFVsWnFuWlF1RzR0R3IyRm82Ky9RVVZlUFdWcjEyTHQ3T0dNbThUSWU4Wno0TTQ1TEIrY3lyWi9mZHJra0RBWEZPQWJGOWZXWVZHUnlkcTBOREpYcktmcTBHRWFpdXVSSEozdEhSTzdyNytZSDUvOUw1WDdEMU9YWFlSa3M3VjRaZm9tSnA2Vm1sTkxaU1hlSVdGTjcyQjlXQ0NXMG5JQStqendBbDU1WC9QdGlLRjhmY20xRko1d0U4MzdKREh5cGRzNCtlUUN2aGlRektZSFhzYnFPUE14bUVvS0tmdnlUYmJjY0NQZjMzQWp2L3hZams5d3Mybm9GZWhpSVJCMFdnU0h3KzNkRG1UWXE4OVEvczdEZkRFd21YVzNQazZkU2VyMG5sd0xHWUp2dkNMVTJyVktaTm5jam5iV25rRWdxM0VWbEhZTGRSVUYzUExSTnU2Y080TnhFVjBvL3BSVmpCMFlTMjd1S1hLQjdIbzc5dEpTVGxURWtoU3MrQTlhdjVUeTEyOGxmTUs5cUF4YVZIMUhFcEQrVHdvT211ZzFzS081VXRQemxnZnBlY3VEMkVveldEZHVOa1hYemlYYUNQb2VVWlJrWndNdE5ldktqU3R3RExtQnNmKzYzV1hlUGJHTFV5MmtwUnJSNFdpeGMrVDhIWnc0SE1HVmUxNUdDOVJ1ZUkzRE96SmRkSCtOYjhzelNDSVMxQ3FrUm52TkRWMVFFQTNscFVCUHdJRzV0QXEvTUpmYnd5djJBaTU4NjJQQVFkYmlCZXgvYXdYR0Z4Y0FFSDdaUXNJdlc0aXpKcDh0MHlhUXMvY0crZ3p2b2xIU3FyK0VJZHhJNU9oN0dISGJtRzdkVCtDWVdVd1lNd3ZaVXNXT2VaTTUvdDBjVW1ZbmRYaFBkREovdG9waWJBNHZmTUlELzZ5Q3plUWh6RHIwY0tobFdhNFZoRzY4WCsxMTNMa2tIVjEwSHlvTHNsbGFBQ3A5QVBPU1hlcjc5Z09IT0ZsUmp0VnA1c3Z0R1NTRVJ6STFJWlQ3Wm94dk9zVXJIK2RUbFRDSXl4TkRGVG5XV292Sy81SEMzSjVNdmUrMnBvQ0JmUEFyOGpkK1Q2K0JsNXhlS2M3YXpwRk5CVVNtRHNDUnZ4T3JOZ2FmQUxmcGVNMThEczk3aXN4NEhXRnh2cFIrbjBIY1hiZmdIZFdEaGozcEZQdzhHb3AzY2V6YmZlaW5lMXpEcHhlaHNVVmt2UEFoRVgwaU1VNmRqQzR3Q20velFiTFc3U0RZWU9Md3F4OERRMzcxZlllbWptRFhmMS9CSUUzQ2Y5Q0ZoTVNGMG5QT0xEWTgrUy9DNHg1Q3lscE5mbEVpRjEvb010bXlQM2dWb2Vjd2ZFTTFWSnpJd3lmNUtyY3BjWWdEeS9ZUVBpWUZvU2FMQnBNdnZsMTB2dnYxVHVEWThuZnhGY2ZpSFRlSTBONFJ4TjZ3Z01NM1BNYlJ5Q2NKNmVsSDlkNGZFSHZQb05lb3VBN09WTXJCZjYwZ2FOeEl0RlJTWDJvbk9NYmxzK3ZvbmpyREwwOWVUMmJwU0daOTl1U2ZWYkRWZDZDdHRSQjJxaWVlZU9KS1FSQVN1KzdZdGxObFV4RnUwR0N4TzdEWUhWaEZMY09qWFIwTWp1V2VJcytxWm1oc0tEZ2NxUFcrSklYNXRqbE5kSGc0c1g2L2ZiY09zaXdBQUNBQVNVUkJWQU42azhtRTB5bmg1OWM5ZnMzUzBqS0NnNE5ScVZUbjlCaHJRU0hxdnNQb2tSemY5SmwzbEJHSFhVTm8vOWdPVkI0blZidTJVN1JwTTdXbEFnTVhQVTJvMFdVbXFVTVRpQmszZ0pLMTZSVC9mQWg5NzFUQ0I4YmkxWE13Z1VFMTVIeTVCak5Ha202YmphRkhBb0Z4alIwWk5SZ3Z2Z2p6c1F3c0pTWUNocWFnOVE3Rm1CcEx3Y292cWNxdHA5OWR0K01kSGtWNGNyUDU2UlVaNzNHT3JzRTNlUXcrWWlXMVdibW9JeFB4and4QTMyc1lvVVlicDc1S3gxUWZ4SkIvTGlJbzFFVkc0NmpNcFdqVFprcCszSWNoZFM3SnQxNkNTZ1JFZ2RxTUhSUnQyVVRsTDFVa1B2ZzAwZjNDdXFabERSdVAybHhNM1M4NTRCZEZZR3dZNnJBRVlzYjBwbmhOT3NVL0hVRHdqY1U0YmpnNmd5dk82dHN2QlVPZ2V4OXJBZ2diNW1LVU5tY2RvR2pUSnNvTzV4Qjl5Nk1ramswQTZQQ2VYTkFTTkd3b1duWDdZelQwSGt6b2dOZy81MHZmNlR6NjlOUC8rQmxYRU1IYStLOGdDSGJBS1FpQ0pBaUNMQWlDTERpZGpvOUVVYnptenpJNXZ5VWYyN25pY0ZPZzRFL3BwTEZZVnVyMTN2K2xMUjliQXkzNDJFUkpsR1c1VXBreUJRb1VuTzl3T0J5MUhpYW5mSHBmbTRBb3kzS0ZNbVVLRkNnNDMyRzFXaHZMbFZvTHREWUNUblE2bmVYS2xDbFFvT0I4UjBORFF4MHRrM0pQR3gwVjdYWjdpVEpsNXdaaFlhSGRDaHdvVUtEZzlLaXVyajZkS2RvazdCb3pQRVNMeFZLcVRObTVFbXhoaW1CVG9PQXNvYWlvcUs2MVFCT0VObVZWc2lDQVdGUlVYSFJHMHJPMmx0eUtlaHluSTJSd3R0SVFKUm1IVTJyNmthUS96NExJN254MHVSM1dsZE1WdXpWOUxpa2JXb0VDZ0l5TWcvWHVSME5xRm01Q080K1BnSHJ3NE1HbGt1UzA0T29BMHpta2V1NTZaUVY3N1ZyQ3Zad1Uydlg4Ky9wcGpBalRBMWFlKytoYnZzNHFwMVFLWU10VFZ6WFZDbjYxYmpXUDdDakF6NTJnTS9yQ1VieHdVZUlmZnpWcTl2REZwSDh6NCtjblNCOXdENU1PcjJwcTVKcS81QjVPMWt5Z24vRUFCNDRrTVBHcHVVMkhiWnVRUk95SGh5aThKNW5RcDNmVHE1OWEyZGtLL3N5dzNILy8vUTBkbUtJdC9HMk5UOHNwb0d0U1J0U3dZTlpNa25xNDB0cFhmcmVLUlJzT3NucmVjRURGNUpFWGN1dEVNeFBmYk51bGZPcUVDYnc0UGtGWklnVUtGSFRQNnBIbHZGWUNUUExRM0ZycWE0S0E2RHBHN2daTnExZVRVQVBvR2VTUHBhbkdUODJRWGxFRTY5dlhMcXFycTloeUpJZnNHc3VmYUVrRVZGNWVnSWhLcjI5UkhDNnF2QkMxSW9KS2hkZ3ExVnpVNjBFRTBVdnY0amxXb09CUERLZlRXZEJLcUxYeXRRbXlJQWcwQmcvVWdDeEpVczRaT2JudEp0N2JtY1djU1pkMStxY2FMeDMya25KVzdTOWg2L0oxVEo4eWhjYzk2R0grc1BDL2dNdTNMZ0hnMHQzTFczeGx2SEV4cmxiRjAyaE54VGpxdTEwQTlQaDRoN0tyRmZ6cFliUFppdHJSMk5wTitSQUVRVllEc3RQcHpPNjJZSlBzdlA3RmFod0pxU3pvM3puTnlyUUphVXh6LzM5WjdtRW12TGVkNnkvb1NheEdXVFFGQ2hSMGpQcjYrcUoyVE5EVCt0bEV0elE4MlUzRmtFOVhyV2FyR01jclUvdDN1OVZWYUhRa1VZNTZUaW44NEFvVUtPZ0NTa3RMeStpQ2o2M1JIQlVCdWFxcUtxdnJsNUJKWDcrZXorcENlT2ZLRlBSaTE0NnByRGMzL1paMTdDUUYrbUQ2K0NnTHBrQ0JnczZSbVpsWjRTSE1wRTVNVVFSQkVMd0JyU1E1aXdHdlRxOWdMbWIwb2krbzFYbmhKYm9jZGRyUVhteGZPQUdBSjkvK2dQUmlHMVZtQi81Nkw1SUdEK1BER1FPNDc1WDMyT1B3d1Y4amtWY3JjZS9zcWN6ckUvS2JUOUJ2eWU2aFFJR0Nzd0tySUlqWDRtcGpVSStMMmFOT0VJUjY5MmMyUVJBY29pZzZWU3BSMW1nMHNpQUlndDR0MkxZQXllZHViQkpsMWZXWW5RTGhBYjU0L1U0SitZcGdVNkRnZnd1U0pHV29WT3BGdU5vWWVBbzJrNGRnYzdvRW0wcldhRFJ5WTQ2QkxFbFNwaWlLNTFDd2lZUUcrQ21ycEVDQmdtN0Jack5sMGRhMzF0ckhKbnVZb1lpQ0lNaUE3SEE0TXBVcFZLQkF3Zm1HdXJxNjNIWUVXcE9QclhVT1cxUHdBSkROWnZOaFpRb1ZLRkJ3dnVIVXFWTUZyUVNhazlPa2ZEUUt1Y2FZcG56OCtBbEZzQ2xRb09DOHc5cTE2MHJjZ3N2cElkVGFwSHMwbWFHaTRLbzhBT1RVMU5SeVNYS2VBSHIvcHFOKzU5SzJuMTF3TmFUTVUxWlVnWUkvT1dSWi91WFJSeDgxdHpaRDNYUkZucHFhaDNBVG00cmdaVUNTSkdtdktJcTkvOGdUNVZXVGk2b3dFNnE3MTVUVzc5UXBSTWNKVUNzc0d3b1UvRmF3MmV5SDJ6VkRaU1FFV1FKQlJwWkJsbVJCbGhHY0lEamtwdUFCZ0d5MzIvZDFmaWtuT3pNT3MyamxCdTVkdm9uMzkrVmlhNWF2Wk9YbDhlbTJ2Ynk2OFNDMXJXM2wvQnllK1hJajk2M1l6RWVaaFgrNlJTcmZ0NW14VDM3UjRyT1QyNzVsK3I5V3QvdjNQNjVad2VqWmQ1RTg2MUgyMW5oODRhaGwwWlAvWU5BVmQzUEo0cTkvMjV0d0ZIUHRUUTh5OUlxRlhQdkdEMTArN0lVbkgrRy9lNnU2ZGFsbC8zbU4wZGYrbmVnWnozQTIyVkMvVzduNi83TjM3bkZSMWZuL2Y1NHpGNFpoR0VZWVlFUkVSRkpEUkVNeUpEVXpjODNNekZ4enk4eTFzakl6MTNWYmExMXovZlUxdDIyN21HdG1kak16MTh6TVRNMVlORFBYeXN6SUM1a1JJUklpSWd6RE1NemxmSDUveklVWndHdnFWczc3OFRnUFpjN2w4em5uOHptdjg3NitQcHpSN0hNM3NLdW9sQk10S0wvbWpaZkpHVFdabm1QL1NjVjVlL0F1OXUwcnh0YU1uMi81aTA4ejUvMXZ6K2hLQmF0ZnArKzQ2YVJkK3dkMjI4NWhGeFViVTZiUDQ0RDkzSkVJSHJmYURyWmloZ2I3MlBDVFRVcEl5RkpUOEFCL1pOUnF0ZTQ2ZGVmcldMT3JuQzZwSGJnaG94MmJ0K1F6YTJ1SmIyY0RMMy80QmZzcmpyQm82NzRRWUR0V2RvRGZ2YnFOdUxiSkRMMDBHZG5sdnVpQXplMm9wL1JvYmNodnNSMHl1T3ZxTHEwY1hjZnNmNzdIelBsUHNudlYvNUVkMDdTbi9MT1BlTGs4Z1oycm4yWDl3emRlMkp0UVcxajJ5dCtaTnlxTEdydnI5RUg5YUNWV3UrZU1tcnIxbnNsc1d6Z0pkYTJWYy9HcTVHOTRqNElEeHppdzV4dXE3Y2VaLy9KYXFrNW5HdHBMR1g3L2k3UzZPSWk5bUJrdkZySnM2YlBzWHZaSExPZnR3ZGN5Y2RKY2lwb1I0MWlycTZtdWQ1M1JsUWFPdkoxdFMvOUNrcXZ1eEVTeFp5R0ZtOWF5cjAwV25mWG5qbzZtcVBqUUQ4MjB0V0FmbTVEODRPWURPRitxaDFBSDI2bWpSOSt5YS9QbUFodHc0bUluMmNUajQ2OE4vTm5HZnBUN2R2OEEvVk1CUGY4M1lRVFVsckQyNjA5RFRsdXhiUmZYRFJySXZibEpGeFdZT1k0ZjVzbVgxMUpjcjJWb3VpN2tDN3pzdGJjb3NpcFlMczBPT1dmbnR2K3c1c3R2S2F4MnMzcmxXMnhUUlRMeHpwdEppYlN6K01WMzJMWDNheHhWR3VZOHQ0ellqcGxNRzlielozR3ZibHNWaTFmbXMvdjdDaFNka2RFMzNjRGdqUGdtY0N2OWhvZm12SWxObjhDVTM0K2dhNXkzME1WKy9EQUwzdGpJbm5JYm1ibDltVHE4RjZkS2cxWWFqck5vMlh2cytQNFlzWW1KakJzOWd1eTIrcE8vMEFPdVl0bkt0Yno4U1NGYmxEVThOUDRtektmd0xHejVZQjM1WHhkanJUL01FODh0UTQvTXJXUEhrTkZHSnYvOXRXelo4eTFsamdhV3ZQUW1lbDBjMCs2K0R0TUpyOWJJMHRjM1VlT3E1cUE5Z2FHZG5LejgvQmpUNzcrZGpEZ051ei8vaEJVRmV5aXZiU0R0MGg1TUhYTTFKZzNzL3U5bVZ1MDhTSW05bmtXTGxtSFJTQXk5NFVieVVnMCtCYjZLSnhjc1pzOVJHRC8ydHd5NHBNMVBHRVE3eTk5WXc2WnZqbURwZUFsVGJ4dUt4UWRVWlVXN2VXTEZSeWh0a2htZUZZOGp0aFBEZTdRTFdIS0wvbDNBclZPZkRySHVWaXgvQjJOcWU5Wi84Q202eEk1TS8vMzFXSHgxbURVbCsxbTIzMG1POWtlV0ZCU1IwT2t5Wms2NENqMHUxcTlleDZvdmZyQzlzV0hya1daYW1nZFFoTmNjOVZPREMwbENLSXFDcmNHRHJkR0Y3SE82Q1VENTZLT1BGQ0hFampONUR2c3JxK2ljZEtyU0tCZDdTMnVKRWNlNWMvRmIzUHJ5Qmo3NG9lWmk4QkF3ZmRwc0R1cTdNR2xZTnN2ZXlRL2FweUk3cHlkZHRVZFpsQithUXBqY0laMGh1ZDB3U1JIazVXWXpKSzg3UmcyQWh0NjlMeU92Y3lJR2N5SkRyc3ltLzZWdFQ5b0Q2NkVEekZuNEpyT2JiWnVLenYzaVpNN3FDcXExQ1l5L1pUaGorN1ZuNm9OL1lYdFZrNWEyNUowdERCbzJoTnlvSHhueWh4ZXhBelFjWmRTRVI2bU02Y3lVVzYraFpOUHJUUC8zMTZkc2E4bjhwMWgvSkpwcGQ5ekkwTzRKVkIxdk9PVTV4UWYycytPSE9wTGo0MG5RT2RqMHlkNFdwbDF6U2V0OEtVTjZYNEpPWTZUL2xka011YkluQ1Rydmk1bmU5VktHNUtTajB4a1llR1UyZ3kvdmNnb2E2a2FXdnZJbWNxZmVsSCs4bk1WN3RlUkdWZkRFdTE4QmNMQ2tncHdyODVnMmRnZ2NLR0RNczVzQVNFcnB4SkFyTTRqVmFPamRPNXNoVjE1R1Nwc202Ris5N2orazllckxzSTZDMFg5NWlaL0NMZkhxTS85Z2ZtRTlFMjhkUnV5UFh6RDRyeXU4NmxGdE1VTW56U2NsOXlwRzl6SXliZlo4Vm44WlpORGJmbURUZ1NqNmRvc09BYlpWYjc3QmpOYy9aL1NvNjRpdDNNbkl1VTJ1azVvZmlwajk1SFBNLzI4Tkk2Ky9pbFNkQ3dkUXNId0pVOTc5anR0K2U5MFhUcGRiYWNVRTladWhpaUtFa1BEcWJZMXVCWTFHVFl4ZUc0aUtCc0RON1hidjBHZzBnMDduSVpSK3Y1Zm45M3A0Y2ZLbHAvb01ZSE81V2IvdkNNK1BHWWF0L0JzbXZMYVJqZytONGRkTURxNVU3R1hGOTNIc2VXa2dGaGxtM3Q2ZlVSLzRIN2RNUnJjTTVNTzc0ZnZROHl6dE8yQnByOE9naVNDblZ3YVpBYTFDUTg4ZUdhakxkMk1vajZSdmRzYXBMVWVObGdSelN4M0NvRG4zTlczNmxFeW1ENi9oczIrK3d5Wk1aQ1E0K0d4Zk5Ybjl2VnJibU50K3krRHNTNkRuSGJ6ODFuMXNPVHlKMUQwRjdFdnN3NnJSVnlBRGMrNGNTc2JUVzVsL1MvZVR0bFY5M0lxK2JReHBxUjNvMlNYdHRQb25HeXpNZStRK1hwNzdERU5tM0FkRjN5T2Z3bXBLNmRpSmxEZzNXbTAwdWRrWklhWm1hcWRMU0kycFJ4Y1JUVjUyeGtrMHRlRHZXUnlEK2wySzgwTXpTcS9MR09DcFo5VVgzby9NcU4vZVJQRzNCeW42c1piTXJxbk1YMWNFRENhaFhRb0o3ZlFZTlZxeXN6UElhYWFZRGh4MkhTUDdaTURsMGN4ZU9JOFNKMlNjVmVWZkRVdlg3MmZtcTQrUWw2SWhyOU00bHZTZnkyNzdyY2dmZjRJemF4RFRoM2l0Z3dsWGYwaGg4RWZ0eHpMS1l4SklhVVVEdnZmTzIrbmZQWWIrS1dOWStKdEZGRDk2RTJtKzQreUdOQmJQSE9NMUVmTUFGSmEvL3pGVEpqL0haUjIxZTFveFF6MkFSNUs4NENZRUlDSDhhN3FvMVNvaUl5SlErM0kvaFBjZ0llcnE2ajZMalkwOTVTTTQ5bU1KOTd6MUZYUHVHRUhucUZQWjFHcjBhaGpXK3pKU2paRmd6S0pQMUhZK0s3Zi9xb0hOV1ZPTHJVMGNadC9qc2NUR0F4ZDJVVEE1UW9mRjNOSTBNZXBQSGQxZHR1QkpacTdkRDhnODhkeDhSbmVKUFBtSGJsYytnMmEreTVCQnVTUkVxYW15ZTNDNG0vdy95V2JmdkpLTldHSmNWTlkwSWxkV1lqMzREU01mUEJRNHJuZkhTMUhncEhSWTk5NS9QNDhzV0VIMnNOZlJKWFprL3YrYnlzQ09KeS9aUyt2VUFZQWhOMTlQRW1EczJ2SENUd3BaalZvR1dhVkMxa2hvWlJYMlJnRTBNSFBLSTJ3UnFRenFab0hqVlRoY3B4ZUJOeHQ5OTYxV29WYTVVY1JaK3hLb3JEVmdNZnRJRWlOTkpFVFpLRDhPNnRvYUxPWW1XditFMkpqUWp6aWd5RklyRjlXUWxPQTdOaWFXQk1sS3BSM1NmRjFPN3BqY3pPL1ZTRVZWSTBNc0pnNlVmRnZjR3FnRis5ZUVkME9TWmJRbzFEYzRzTmtkaFBqWUFHWFNwUHQzckZqeFppMFFjNkw3cnp0Mm1EdVhiV1B5bUJ1NXlxSS9qU2Vtb1dPaUFaZmJIWGdNTG8rRVJ2NTFMMDJualRWaFBINk1LZ1VzTWxSVUhiM3dQcjdxbzZ6LzZQTVd6dmNocGxReTIwYWY5Tnl4azZjemR2SUo3azJqeHVFS0RRYXNlbWNESXlkT1pkNklUb0NMNGkzdmhPd3ZxNm9DektCWXFhalZrUlFiUVhKQ0FnbFpiZGo0MU5nVGFEZ3FaTGVuUlVUUzFMNHpDLzgrQy9Dd2JQNC9tUG5hRnJiUEhuNWF6NlJydHpQTWFKSWxaTVZ6eGdFTW03V1dLcnNnMVhJYXV0eVBlMW40VFJ5bEh6eUlBU2paK2paUGZGRVNkSUFFMHBtdjd1YTAyeWcvM2toeXV6aWFrYytqVlNrNGdvZFFiU0FoeGtaRmxRdFNOR0N2b2JMZVFGSWIwSm5qS2QzV0ZQTXRxemdLUWQ4UlhXSThDY2NyS1ZjZ1RRNTFRNVVmcVlFVUU5UldVeW1NbUlNZ1EyNEJoaEZZekJHVVY5VFVQdnI0TTJVbkFMV1FraXJaVjNFUXFkUFNScXNSR2hWZWpTMUl4TXFWSzkzTGw3L3hzU3pMdzFwM2w5VXgrYVgzMFNWM29mcnc5N3grR0ZTUkptN3Q2YVg1L3VTclBSUWZxNkxSMDhBN254U1NudGlXNjlManViSFhwVXdvK0M4OWpUblVIejdJNTRxRnY3YUwrRlVEbTV5UXdhM3B4NWp4d21ZbVgySGlzVGMraG9TK1hzQ3BQY3EyZlljcFBmQWo5cU5xOHYrN0cxTkNNam1kemkyVms2bFRkeGIvcmZzNXY3ZXM3dDBvZXVrZEZtZnBTVTF1eitBZUhVaHBsOENLclZ2WTJWVmkzOGNmc1A0SEpVUWpYL25HMnd4T0dVM2xwKzlUMnFFZmZkdks2RTBEU1Z2MENOTmVhOGV0VjZSUVdWTE1IbnNiSGhxWjR6MHBxaDBEMmg5anp2TWJHTnpKek1DQmx4T3JobFgvWGdYdHV0TFpyR2JuOTVXa1oxNXovZ1pTbjBoWGRSa0xWbnhFWHRzb2NpN1A0WFMrNXh2ZlhNeVlkUjVzNzgwNDlSSndNZkVrT2I1ajJVZDd5TkU3ZU9LbER3bk5sVGVSMGQ3RG9xVWJxZXhtSmlNcmk3UTJwN1kzQ3plOXplVnpkL0h0Wjg4U3VveFNEUDE3UlBIVW9yY3A3MlVoTDY4UHlRWVQ0NFpleW1QUExpWDJ6djVzVy9VbXV2NVgwMU1QY3I5K0pEODlrK212cFpBVFdjV3JueDRoTjNod2pla003bGpMOXFJRzBqSkNOZnRGTHk4ak0vSTNiRisxa3VSckI1QitVa1ZVNXRiciszSFA4eTk5ZXZENzhtQXoxQjBDYnNLL01xV3ZSbFFvMURzRWtpU2p1RDJvMUdxMUpJUkFDQ0g1dEgvNTRZY2ZUbENyMWEzNzJSUVh4NTBxRXFNME9GeHVIQzQzamJLVzNzbGVNK09iSDBvNTFLZ21KelVlM0c3VWtkRmtKa1JqVGt5aW03NlJEVi8vd0k5S0pBK1A2RWNuZ3hwMnZkbXlqYmJkSWFuN2VabWpqZFhsS0hWSDBldjFaM1JlYlcwdDBkSFJ5UEtaaExKVkRPaVh3NEdkTy9qUC9xUGNjY3N3T3FVa2tkdTVMYmFLVWxaK3ZJZGFLWm9lU1ZHVVZsUmgxNXJJN2hnTWJGcDZaWGNtcWhVTlB5b3VnWnlPOGY4ejBOYVpVeGpjMWNnWFJUOVFyNG1oZDNvaUdkMnpFT1VIZVB1alFxSXU3Y3U5MTNTa1UzcG5VdHA0UDJEWFgzVTUvOG5mekE5U0lnditmQ3VKa1NyUVJISHpiM0w0OXNzdldmZkpWMVE2dFF6c2N4a2Q0dlFCTjhZMUEzTDQ4YnRpU3FvYTZOR2pDOUZxc05kVXNPbVRYZVIvZm9DVTdFSE12aldYaVBPMTZJMms0emY5dTFGOHNKamk4bU9rWFpwQmZHVFFvR2dNOU9tUlNtdnZhM3hTQ2xkMVR3a3lxMVgwNkpGT0pKRGNzUlBKTVZwMEpqT1hYWkxHNE95MnJGdS9sYy9MR25oZ3drMjBpemZUcjF2N3dBdC9WYjllVkpWOHo3ZUhqNUtZa2s1N2s5WVhYT2hJZWtKVVlNN2taSGNoMkRzVWJiWXdvTmNsTkhjazlMM3lDdW9yU3ZqdXgrT2tkZTFHZ2w2aVorL2U2S3UvWitYbUw5RWtaN0xnd1p1STFraWdNWExUb0N3T2ZGMUVqYjQ5L1JJYU9HcnF5ZzNkTFlIN1NoQlZMTmhWejIxOU9nYUNCeXZmZkk4YnhvNWllLzRXR2kwWkxIamdCcUkwVGM5T1p6TFRPejAwU2Faajk1N0VXZys5ODg3MnZZY0FKOUFJT0h6L09nR1hIK0JVc3F5b0pBbTFTa1pSQkU2M0I2Y2lJZWwwT3RudGRrdENDRmtJb1JKQ2FFdEt2dStla3BLeTdZSzhJUmU0cEtyMjI4OXhsKzhqTHU3TUtnOUtTMHRKU2twQ0hhNDhDTXRGS2tYZmZFZHFwMDZvbmNlNTlmZC9aT2pNcHhuZlBjaGo1YXBoMUwxUE1lZloyV1FZWk1ESnFCdkdNWGJSQ2thY0dmMGg3K1J2djIva0grYjlTQ2dIbTAyQ2VpUWFKU1NuSk9HUkpFbFJ5N0xRcW1VUm9kVVFFYUVSL3VDQmtDUUo0WTB2Q0VCSlRlMVlwQ2llUFVCbWVEakRFcGF3QUd6OWNBM2pacGVoU0pFTUhUV0pjZDJidWVFMUpsYTlOQ2ZFTDVqZXRST3haN2hna3lMRXZwRi9tSGVzbVJucXBtVzZoNUI4T1d6K0lLaEtrbEhKRW1wWmxnbnlzd1hBemUxMkY2alY2bDhkc0xralluREhwa0ZDNHBtWnNMVVNJajRWTk9GbHRjSnljY3JFT1M4dzhRelBtZmZhVzJmY1RyMnQvdE1UK05ZOFNKSVgxQ1FFa29Ra3k5NElzMXFMU3FORjFrWWdSK2dDNlI1SWt1UlQycnlJYUxWYXQ4VEd4azc1dFEyT1IyZkNKVWRCd3BucHhvMlZMa1Q4SlJDbUJnOUxXTTZyZkZPNmN4K2hhUjV1d0NOSlVwREdKaUZKc3BCa0ZaSktnNnpSSW10MXlGb2RxZ2g5azhiV0xKOU5NWnZqdHltSzV6RFE3cnplUmZidld2N1d0bnQ0ZE1NU2xvdFFoQkRsbDEvZXU3U1pDZXJmZkpSRlVnaHJyaXpMZ1UybFVxRlN5VjVnazJWWmVEeWVZRk5VQUI2UHgvT0JTcVdhY0Y3dkpNeTdGcGF3aE1VbkRRME5XMXZUMW9LMkVCNDJXWmFGSDhPOHdPWUZON2sxamMyUGpIVjF0dndUZGFER2F1V0hZN1lUc3dONFF0T2ZGVVhCN1FuZGZ2V2lWTE5pOFNJV0xWckUrdTFGdjdyYnF5a3ZZdldLNVN4ZmR5RUM2RTRLVnErbTBuRVJ2TjJPS3RibmYzYkMzZnUyYjZTd05MVFdldmVXTlJSVnRGNGxXbG04azVYTGw3Tm15KzVtODlQSlp3VnJXYjVzR1h0S203aDRQaXRZVDVYemYzUHJCdzkrOTFVelVITUQ3bEF6bEJZYVd4T2dxVkNwMUY1ZzgyOFE0RFlTZ0JJYkc1c1BIQTU5R0RZZWVQcFZybCswamo4c2U0ZStUNjNpdjVYK0F1UkcvcjdzYmZMKzlnTHBjMVpTRmpqSnhVUC9lbzIrODN6YjR5OXo2Y3dsZkZRamZ1VXpWTVpnTUZDNjR5MFdydDd4aSt1OXUyUUxvNmM4MWZwTzZ4NEc1VjNQOXFKU0tpcHJPUCtmS1R0UFRIdVF3b3VBTzJIZE0zOWkvYjRURTZXdFgvd3dxN2VYaGZ5MjhkVy9zKzJBdFNWR2xtd2lkK0NkN0NrdG83STY5T0d0bmZkNzduM2liY3JLSzdEYW0ybzdiSHZXTUgzK3h2K0pHZHFqUjQvdmZlRFYzQXh0S3FYeUZZWUdZNWNYMEpvMnRVK0ZrNXJTUGlRaFNTaENDQVZRUEI3UEJwVktkVmZUdTZyaG5sRWp5R3p2TFJOWnZmNDk1dVIvellaYmV3TXFCdWZsY3RlZ0JnWTkvMFZRbHpVOCtjRHZBMytWRjMzSnlNM0g2V09TZnVXNFptTFlyV1BSVlg5Q1lja0p0SjdLTW1yY09sS2JNNlFvVHNwS3k1QU5acExNb1RXUURsczE1WlZXekVuSkdIWG5LYTlPVVhEVWxMRnArMWU0M1c2UVpkVCs1R1JGd1ZxMGsxTExRT2JObk82ZFdLZDFUVUFHZTAwVmxUWklUVzY2WjZlOWhySUtLMG1wS2VpQ0wrWjJVRkpXaVNYbERKZHVWSnlVbFphamo3VVFhOVNGZEtLeXJCUzMza3hTck9IMEFONWhwY29HbGxndFplVTFKQ1ZibXU3WE4wNDZjeEptUTJnNzFSWGxXSjFxVWxJc0ljOUhBUlM3bGJJcUc4a3BTYUdKdmM1UzVpM1p5Y0xkcjdSNGVCV2xwZWpNTFdtL0ZMZWI2VXMrUWEyV1cxaEp4VHQyWU9oN0M3T21UME9XMVNIbmJOKytnM0ZUTmpONWNHaCs1c0R4azVpYS9RQ2xVNGFRY2dGalpYYTdmY3NKZkd1ZUlQK2FBZ0VmVzhBTTlXdHNhclVLdFZxTjJtZVBFbXlTK3NLakN1Q3BxYW5aRUJjWDF3UnNSSkRadnFrVUtpVTJCc2NSZjZHem1zdlMya0Z0eVVsdjRLMmRleG1XZlRVWGRYeFJzVEYzL0EyOFd1Z21SVjlEbGJFdkc5YzhqMFVIOXJJZERCNTBHN3IwbnNqV01tTDczOCtLeDhZQnNPWFZ2M0RYM1BWa1phWlFldUFBTTVaL3pxZ3N3em52M2hPVGg3Tis1dy9ZRGxReGFNaDFxT1ZFRnE1ZFJtY2RQRFp4Q0p0Mkg2Ym1ZQTFEaGx5SG5Ib1ZHNWZNUENXNGplL2RCbjMvQ1d6TjM0SmVkakJneWdzOE1TR1B0Zk1mWk9xQ3JXUjBObE5VMnNpcmE5YlROODJJclhRN2d3YjlEbDE2Rmc2SGk1b2dqcUV4bVpHTVd0WEFxSzVRczJNSlhhZCtTc1dPRndFNHNHMHBvOGMvU216bkxKeFZKUXlhOWlLengvVEdYcjZMMFNOdW84cVlCbFVIU0IzeEtNdG5qejFwdjhmbnRxWEVuRXZwcnMvb210c0hhL0ZYOUp6NEFnc21EYVJ5M3laR2pya2ZiWElHTlFmM01YRDY4enc1Y1JCUXdjaXNmbFFtZENhV0dnNVVtMWk1L20yeUxEbzJQbk0zajZ3OVFpeU4yS3VLY0diY3lmWVZzd0x2UWtuQktpbzYvNGFRSVhWV01XbkVOV3lyU2NDRUE3ZXRtc0ZEZklwejRUcEdUbnVXb2wzYm1MNzhXNllPU2ZhZFZNV1VrYjlqNThFREZGZktEQm15R1V2dUxTeDc3QzVLdHk1andwelhLTnBWanFIOE50WTlwV1BjckpjWTE5OWJGb214SjRNN2w3T3FvSVJwUTFJdjJDdXhiOS8rTDA5aWhnWnBiS0ZCZ3lZVDFHdUdxdFZxU0U1dWg5bHNscUtqbzZXSWlBaFpyVmFyWkZuV1NKSVVLVW1TVVpLa0JDR1VmVUlvb3NYbXJCUDNQZk9TV0xqM2FPanZOY1dpNTZ3M3hhRld6bkhWSFJKNXM1ZUsvUTJ0WE84Q2JFZU9WSWhEaHc2ZDhYbGZmLzIxYUd4MG5GV2JIejUzajdqK2p5K0gvUGJEQjArS3hGNjNpRnFQSW9Sd2lEOWZmNmw0OElXdFFnaEYvT2U1ZThYVjl5ME1IQnZjN3UyWHhZaFhQcmY2L25hS3hrYjNTZHYrOGFQRm9tMWlva2hzdGozNnhtZW43SGZEMTh0RlRLODdXdDEzL1BPWFJlS1Y5NXpSYzdpalY1UzQ1cjVuaE10Ly9RYTdxUDFxbFVqc2VKWDR2dFo3SDErOE1VUDB1bjJ1RUVJUno5N2RSL3p1OFRYZTlyNWFJV0trUlBIaGo5NXpiK2tXSWQ3YTcrdkxmeGVMeEN2dTlMYmpLaE5YdDQ4WHIzeFM1bXZYTFk0ZHJ4RkNLT0xSbTd1TCs1N045eDFYSlc3czFrNjgrNjM5NUgyK0lsRzh0ZDhwWHZ2ejllTDJmNndSeHo1WklycjlkbzRRd2laK2Yzazc4ZmYzOXdnaEZPR3AzU042dGI5VWZGSHJIYy9hMnFicnZ2Ym42OFR0dnZ2WThQU2RvbDIvZTBXOVVJUm9PQ2g2dFdrblBqN2ExTjViZjd0RjNQancwcEErZlBIR0k2TGp0ZE5FbzFDRWFDZ1ZWN1hUaUVmZkxBdzU1cy9YZHhCUGJ5aHRPVy9mbkNWNjNQRkVxL2YyeCtzN2lPYytMRzkxMytzUDN5aHUrZHZLQy9aZUtvcW5DQmdOREFjR0FibEFOeUJWa3FRRUh4WkZ5cktzVWF2VnFvaUlDRGs2T2xveW04MVNjbkk3MHRQVHljcktvaytmUGx4NzdiV29aVm5sanloSXNpd0xSVkVrWHhEQmI0NTZuRTduZTFxdE5wUjBUWEh4cjdjMzRFNi9nbnN5VHI4OGFkdk8vY1JmMnBXdU9pNXEyYlhyUzNyMnZRYWpES0Jsd09BOEh0dTVHeWIySmJOM2Z3N00vVFBqNVJMNjV2Vmw1TWloK0lta0JnenN5NXk3YnVUQXlPdm9PMmdvUS9OT3pzbG02WDhYNVJWMy9XeDhqbVBHamcyWVhqcWRqaDNiQ2xEMHNHanVYN3pUcXFxSVBidDBLTUN1blhzWU9NRkxHbURLR2tCUDg2a05YdmVCYlh3bTkyWnRYbEtnelZpVEVhaGt5OVlEeEpvL1lNYU1ENzA2amR0QjRlNFNocWQzUGNrVjlSZ01hakFhTUJsaU1SanRPT3cyc081ankyNDdjc0hyek5qcU5SV2Q3bEwySExTUm5hMWp4Nm9uV2JqaVF5cXREbW9xaWtrZGRYUGdpajF6ZTZNSDBDV1JtbEJEVlEzZ3M4cXJxNnN3SllleWdSVHUvcEs4QVhkNnRUcGRNZ1B6MHMrN1Q5TVlhNktxN01JNU5HdHFhcmJRc3RJZ3hCU1ZKRWtKckJzYUVnME44cTJwMVdnMEdxOHAyc3djRlZKVHRxNENlTXJMeTllbnBxWStGQlR5Wk1WN0cvaFk3c2dyMTJWdzJyWEhTaU1yc1NPZ3BBQUFJQUJKUkVGVWR4WXpjc1JGbHVKeGhzWFpDYjNIc0c5M0xnWDVCYXhlK2plZVhMR2RmV3ZuSWdNVG5ueVgvcnUyVWJCbEN6Tkc5V1Azd285NFpNU0pDMFFxZDZ4ZzhMMS9iL0g3dU5tdk1XMUUxb1VQcGhoYmtnOVkwbm94WW9SLzdZWWJHVFU1OXBTUHpPdlY4enJ0RkVWcGV0RlBlcUtlQVVOdm9uZUM5NjhSSTI0a0pUM2w5QVpQOWpGRWVPRVRVRkMwWmdhUHZKRVUyWCs5bTBucnJLZDh5MEltTFBpQy9JM3YwVFhCd1BvbjcyUitSUk1VcWVVVCswV05KaE5XcTdXVlBzZ1hkS1JzVmlzbWsrR0N0YmQxNjhkZk5RTTExMG5NVUJHYXR4YmtXL01CbSt4UGFHc0N0d0JWZUNBNm1wYldhWitpS0p0OHNRdmUvL0JEL2wxbjVzV2JleEY1QnMvNzZBL2Y4SW1uTGNQVERCY1ZybGxpMjFKY1hCTHlsYzNPdm96ZDIvNkRWUUZ3c21YamRuSnllZ1ltbFNFaGxSRzNUbUR4TXc5VHNXOC9EcDhEMldxMWs1N2RuNG5UWnZIUStMN3MyWGZncEcyYnM0ZXpmdDE3ckd1MjNUVzQ2eW43cmRYcFVLcXJmSDA4ZlZuMnhCVG1MczAvcldPeit3Nms2c0JYSkdYMkpqYzNsOXpjWE5KOFFZWHMzSjRVYlBHbWt0UVVibUZYVlZOSFlzMUdTa3U4a2NFZDIzWUVucTA2dlMrOWxjOVlHWWdhS3RUVVdJRUVCdlJQNW1DRk05Qk9ka2JuVm9IMjlGU2FUQVptMkNtMXhnYXVsNW1laHRFZ1UxRmFTa0xYWG5STk1JQmlZKzI2Z3RPK2JFNTJML2J0Q2FXS3o4NitqTzFidG5sWGczT1VrYi85NFBuM2QrM1pRMDUyemdWNVA5eHU5K1lSSTBZY0N3STJGeTBUYzROeTE2U1FaTnhnMzVwR28wYXIxYUpXcTlWK1VQTkZSMlVoU1FyTnpWRzd2V0d0d1JBMW1JWWpQRjd3SFZaZEJBUG43dmUrQVBGcGZITHYxUURNWHZ3cTcxYzRxWE82dVhIT1MyVDJ1SnpYYnZScUJtOS92cDkrdlhwaGtpOHFYQ056K0FUeVhyNkp0SzV2a1RYMFB0WStOWm1VUVJPWnN2eDljbkt1SWtWbnBjclluNDNqdkdiWFp5dG1NL0daajhuc21rSng0VzRtUGZLUzEzVEJ6VVBEZTdCTFNTZko2S1N3eE0zeTlZTlBybTlvOVNRbG45M0xLNmNQWkdydlo4bkp1Z3lqSVpWbEJlL1E5VFF1dFdQVFcreE83OHdqNDA3Tk1HL01Hc0hpU1I4eHNHZDN1bWFtVTFWeWtLNmovc2FyTTBkeDF5Ti9aK1hnM3pGZzY0czQzWUxrSUZOMDNNUzdHVHErSDV1eU9tTXhSeURqVy90Qm5jU2k1ZjlnekxpcldOWTFFNldxakVGVG4yZm1tTjQ4TlA4VnhvNjhuWnpseVZpMERnNldDWlp0M1VyT1dWSGc2Wm4zNmt1TUhuTURhNS9xaXM1WlNhbXRIZms3VjVFMWREem1KNjRuYi9DbjZPeFZXQkxTVHZ1cTZZTkdZcGgyR3djZGorRmYreWRyMUJTR0xiMkduTHhyaVpWZEtPWW1tcCtYWjkvQnkvbkZGTytyUUZkeUU2c2Uwek5qNFhzTXl6S2UvWVMxSDJEakxpUExsNlZma1BmajBLR3lUMW94UVYwbk1FT0ZKTWxCMGRBbVRjMnZyV20xV3FSdTNiclIwTkJBUTBNRGpZME9xYkhSaWN2bGtoUkZrUlZGa1lVUWFrRDdmLy8zbVBIaGh4L2VCclQvSllOTVpXVWxUcWVMNU9RenF4VGJzMmN2blR0Zmd2WWMxNHJXVkpWamRXdEpzWVMrWFU2N2xmTEtha3dKU1pqMDJoYm5WTnRsVXBJdHFIOGxId20zdzBaNVJSV3hsaVFNT20zd0Rzcktxa2hJU1ViYjdGNXRWZVhZTUdJeHQySUJLRTdLUzh2Um1TM0VHa0lkdXRVVnBUalFZN0dZejRHQnAxQlJWZ3E2V0N6QmFUbUtrOUtTY295V1pFejZNMHZKV1Q3ckpuYW5QY3dUNDN1SHRGTlpYb2JPbEhSYXRPNC9SYll2bWNhVHBUbXNublArWFVaQ2lMS2JiaHI1NTNmZmZkZE9FMFdSRGJCSmttVEh5OFBtbENUSkxjdXlJc3V5b3RGb1JFU0Vsb2dJbllpTWpDUXlNcEtvcUNnTUJnTkdvNUhZMkRaSVBYcjB3RzYzMDlEUWdNUGhrQm9iRzNHNVhGSXpqallOb0d0c2REeWkwV2ltaG9FdExHRTVmNkpZaTFtNnFZVHhvd2IrVDlvdldQVXE2VVBHa1dJNC8xOU5xOVg2VWt5TTZRT2dnVkR1dFhwSmtob0FoeVJKTGttU3ZOeHJhclh3QWxzRU9wMFgyUFI2UFZGUlVVUkhSeE1URTBOY1hKelhGUFdib3lxVlNxaFVLc25qOFFoWmx2QjRSSENKbGZ2UW9VTnIwdExTcG9hblhsaCtQVkxEOG9YTHFHN0ZqMmpKN011b0FSZCt6VmJabU1iNFVXbi9zeWN5Y05UNEM5Ylc1czFiZGpYenJaM1F2eWJMa3ZDYm56NnNDakpCMVdpMUdpSWlJb2lNMVBtQlRVV1FyODBYSFpYeHhrWUQwVkVsUGYyUy9XNjNhN1VzeXlQREwwUllmaDFpNHRaSms4T1A0WDhnalkyTjYwYU1HRkZGcUYvTkJiZ2tTUXF3ZVJDb0RRMWw4UWpHTHI5dlRhZUxJREpTajZ6UmFBSUhCS2QrQkJmRyt3SUpIcnlWQ0crSGh5UXNZUW5MVDVXaW9xSlBXdEhXZ29NR250WW9pcHFuZUdnMEdqUWFMVnB0QkRxZERyMCtBR3lhUUxqVXIrS3BWTEpvenZZQmVNem0rQUloeENmaFlRbExXTUp5dHVMeGVIYjA3SG5aOXlmUjFscXdlYWhVVFdhb0Y2dlVxTldhRnRxYXdSQ0ZXcXZWb05GNGJWU1h5NHVBYnJjYmIwV0NncUlvQVhBVFFuZ0FkMzE5L2IvZGluSmxyVXVtWFJ0RDY1RTVqd0JWc3lKM2o0dnk0ellpb2d6RVJZWXB0bi9Pc3J0Z05Uc09WSUl1aVhIamg2TVBQNUt3bkVNNWRLanNQeWZSMXZ5TXVVcG9zYnNxeEFUMTQ1YmZ0NmJUZVFNSjBkSFJxTFZhTFJxTkZyWGEyVW9Rd2QxaW9SZkFrOUlsOCsxTEg1dzdNVEhDazFudWl1VHBjZGZUSnlFU0wyM1JPdDc5cm9wS3hjU1d2OTJDdnlUM3lLRnZHYjlzRzNHV2VJNVhIcVZ6cnp6K09hZ0xjbmlNVzVYeUhUQm5DeXlhOGI5cFg2dlRZNUFybWZyUUc0d0lBMXRZenFFb2lyS3ZYNysrZTFyWDFwcVcxc08vWUlza0NWbVdXZ2thK0UxUXY3WVdpY0VRaGRFWWd4d1JFWUZYYS9PYXBFM2dKdnUwTmptUXJPc0h0dVBsaDl6NUQ5ejA1dW9IYitlaGpBam01SC90NjdLWHR1aTllNjZoK1JyamIyejlsTzU1VjdQczk4TjRkOUsxZkxwNU8xODFYQ1FENmZ2WFdnVmxGYUg3N0RWUVhFcklTdWVLQXJaeTJMb0wzRzdPYVBWdkJlOVVLU2tHdXpPMEE3YnFsdTJmU0RMeWhqQjI5RkJPRlBGM082d1VGNWRnZDdic1hFMWxHU1dsNWJUWXBUZ3BLeW1tdk1vYWZyc3ZZcW1zck54WVZuWTRHTlNjQk5ZTERTbWhVa0sxdGVDZ2dkOEViZExXb3FLODJscWJOaWJraUFnZFdtMkV6d0hYbE1HclVxbUZ2eUloS0lqZ2F3ejM4dVhMVndMZnBjVEc0R2dNcFMyS2kyeVpRR2pRYWxINWw3T1hBTFVXZytyaUdNaitGcGoyRU9RTmd1R0RZSUd2T0czeERPalpINlpNZ0t6ZVVGVHQvZjJoTVRCdU5wUnNnU0ZEWVBBWThPMGkxd3k3ZlJ5RWUxWkF6N0ZON2VRdmdBRmpZSEF1akJrTDJTTzh2ODhZQ1VOR3dzZ3hNQ2diSmkvOGlXYnEybWZvM0xrWFU2YmNROWZPUFZpNW85UzN4OG1URTYraDc5QTdtRHI1OS9UTUhvNS9qNzFzQjMwekxtWDg1RDh4ZnVTMWpKbTVOUHlHWDRRaWhDaWVOZXZSTDA5aGhyWW9lUGVWVFluZzlBNHZzRVVRRWFIekpla2FpSW1KSVRZMkZuVmtwSTZHQnE4NjUzUnFmTDQyZGZNSWFiQko2Z0U4ZDk4OTBYcmI2Qkd2di96cGQ3TkhYenY4bERkMHgzWFg4TURybXhoZnZKZnFZelhjT2ZwYUxybFljbDNkRXRXeGdqMCtabWFIQTRyWHcyTmJvWEFYbU5Td2RpNDg5QlNzZlF5ZVhBa0gxOENJRlpDLzRzeWEycmtOZHU2R0RMTzNuY0NISlJOV3pZR2FIWkE2RVo2WkJHZVZ2NjVVTW0zUy8rT3h0ZDl3YTdhWmZhdG1NMkRhWTR6WXZoaHR6VzRXckxLeXBlcHpVbVZRbk02QXRycGp6VkswQS85RS9zSjd2UkRvZEliZjhvdFFqaDQ5K3Q2TEw3N1kySnEySmttUzN3ejEwRVQvTFVJam9jR2dwaVVpUWt0a3BDNmdyWmxNSnN6bWVPVElTRDA2blk0bVg1dUdaa203d2VrZklha2ZrMmIrMzcvZDZWY1VudzV0MFpiUHZxQlNaK0dlcTdLNTUvSjJ2Skcva3dBLzVhOWRaTUd0UVpxVlRnZmJ0b0FlbURjVFpzeUFqYnRoVCtGUGI2cm5VQytvK2R2eFM1NnZPc2VVQXJwcWIzcjMyVG4vQ2ltMFp6QWcyOXRJeHNCQnFBcy9wMVFCak9uMFQ2OWt6TERibWZ2TUluYVgxUVRBTTdOM2Z3NnNlWnp4azJld1pQazZiSW82L0paZmZOcmE5MDg4OGNRWHpVQXRXR05ya2VMUkhOUmErdFowdmtpb0lWQjFZTEVrSWtkRjZkSHBJdkg2MnJUNG82U2hxUjhxRVFScUN0NElxZnVWK2M4Yy8vdUFqa3RQSFFCb1pPV24zM0xidFZmU0o5WEM5ZjM2MHMxVndxYVMrb3NFMk1Cb2FPa0xTK2tKSTBaNHQzSFRZTlVUWithelU5d3Q5eGxQVVBzY1lNbzVuOUVhT1phbDIvY3lmL290eUJXN0dOejdjcmFXZVRVekx4WFRSNHpJNjh6V3BYOGpiL1JNbFBDN2ZyRnBhMnYvK2MrbkhNMU1VTCsyMXVvU2U4RVlGRnhoNE5YV1d2cld6R1l6YXJVYTJXQXdvTmRIaG1odFRVbTc2dGE0Mm56Z0pua2tTWEt2V2JuaVRTSEUvcFBma2dwRGhJb2ZxbXE5TDZTamxrUDFFZ2JkeGZ2VjdqOEFEaFJDMXh6SXpmVnVLVUYxOEhvaldDdERnd29BQ1VZbzlUSHliUHZzUEhmU1lNYnNMcWVrT3FnWFNabGs2ZmV4WlZjVkFQc0s4bkZuWGU3bEpIUGFzTHIxOUI0NGpCbnpGaklpM1VGUmlWYzNQREVWVTFndUVtM3RtOW16Wis5c0JkU2NRZjYxVmxJOFpFSkxwMEsxTmIwK3NwbTI1bVUrVVVkSEc2bXJxNk8rM283RDBVQmpZeU5PcHhhTnhvWEw1VUt0Vmd1MzJ5MTVQQjZoZU1OelFnZ1VFSW9RZUNaTXVMUDJoVHJMYXp1bVhEY1BUa3hiTlBuNks3bDcxWHQ4c1RPZW1xb3Frckw2TURSbzdZU0xUZEtHd3N5dGtKTUZtZW5lS09iUWgyRHVPQjkrNUhyNWtiT3l3SkFFR3pkQ0xEQmhJdHcxQ0JaMkJiTUJPSi9VZHVwVVpzOGF5cTA5dTZBM3BiRmkrNGRrR2l3OHRlQ3ZqQnJaaCtXWmFlelpWODZDNWU5NzJWMXJDdW1mZXp2bWpDemttaEpxRXNZd0w5ZkwvWHRpS3Fhd1hBenk0NDgvcm4zKytVV244cTJGSk9RRzBSS0pscUFXRVdEMWlJNDIwcVpORytMajQ5SDUvQy9TYTYrOVNtbHBLUlVWUnpoMnJJcWFtbHJxNnF6WWJQV255L3FodmU2NklmcDE2OWF0a2lTcDkwbnZ6dU9pdkxhZWlNaW8vMW1DN3MrTjNjTmhnNHBxc0ZoQWQ1cVhycTRFUlFkbTQvOXVvcm9kTnNvcXFraElUa0VmbktHdE9LbW9LTWV0TnBHY0VFcHhmVElxcHJEOGVrVlJsSjJabWQyZjJyOS92d012aTBlOWI3TUJkaCtMaC9OMFdEd01CaStRbVV3eHhNV1pzVmdTU1VsSjRaSkxMcUZIang3bzlkN1BwYnBObXpiVTFOUlFWMmZEYnErbm9jRkJZMk1FV3EwVGw4c2JJVldyVmNMdDlyTit5SGc4bmtDeUx1RFpzR0dqMDJxMXZob1RFM055WUZOcFNJbzFoVWM2U0hRR1NEMURyU3MyNFgvZmI3WE9RR3BySFplMVdKSlNXejFIcXplU21tb01EL3BGSnNYRnhlL3YzNy9memFram9RcE5xN3Y3dExYbXZyVUlINE9IVjFzekdyM2FXa0pDUWdEVUFHU3oyWXpKWkNJNjJvQmVIMFZrcEk2SWlBaWZyNjExZjF0UTFDS3crSUxKMU9ZOVJWSFdoNGN4TEdFSmkxOWNMdGVIbDF6U2VYOHpRRHVsYjYwMXY1cEdvdzNRRXVuMVVVUkhHM3pwSGVhQWJ5MEFiQWtKaWNUR3htSTB4bUF3Uk9GTi80aWdxU0pCN1VzQlVZa2dDdkdRRWl1OGl5NjRLaXNyWHcwUFpWakNFaGEvZlBubGw1c0lUY1lOQUp0UFczT2ZYRnZUTktzSGJTcDBOeHE5eWJnSkNZbEVSVVdGQWx0U1Vsdk1aak50MnBpSWpvNG1OUDBqSWtocjB6U1BrcmJRMnRxMlRkcnVjcm1XaEljekxHRUpTMzE5L2ZJcnJzZzkxQXpVR2sra3JmbVgxR3RlTnVXbkpEcFJla2RTVXR1V0hwSEl5RWdzRmd0eGNYSEV4TVRnVGYvd0p1MUdSR2g5S1NBQmN6UzR6RW8wcXlGMVM1TGsycnQzNzFMZzhLOXRrREl6dTRWcHdjTVNsdE1VSWNUaE5XdldiRzFOVTJ1bXJZWGtyYlVXQ2ZWWEdQaTUxcHFuZDBSR1JyWUVOb0NrcENUaTQrTnAwNllOUnFPUnFLZ285UHBJSWlMODRLWTViVi9iWlpkbGYyZTMyMThJRDIxWXduTHhTbVZsNWNxeFkyOC8za3hUTzZHMmRpTGZtdGNFMVJJUjRjMVpDdzRZeE1mSGs1U1UxR3I3M25YSXRWb3NGcTlKNmcwa1JLUFg2d09CQkswMklsaHpFNG9RT04wZTRmWW9RaEZOckI5K2RPN2FJM3Zwcy9tRm0wTTRITndPM3Zwb0I5TlhiT0x4L04wY2FSVGgwUTlMV0g2RjRuYTdQODdKeWZuOE5MUzFrS1gxL05VRnZsUVBYeVZVUkZEQUlMZ2UxSXpGMHZhRVZsUWdBYWw5KzJUOGdZU1lHQ01HZ3dGL0hXbXcxcWJSeURqZG9OWm9VS2xVSUFUQzF6ay91QjA2ZU1DNVlNTi9sd1FEMjdMMzEvTjZpWk14ZmJLSXN4NWl3cXJQd2lVMVlRbkxyMUFLQ3d2Zkx5czczTHk2b0JGb0RBWTFINkFwd1RXaFRWSFFKbTB0dEI3VUdBZ1l0RytmZk1JK2hGUU9KaVcxSlQ0K0hwT3BEZEhSWHBNME10SnJralpwYlRyTWJhS0ZJVEtDQ0sxR3FGU3k4R0pid0ZiMlNCS3VnMC9kOTdITDZmeVg5OHFONU84OXdsM1g1cEhUd2NMRUcvcmcrcWFJcnh2Q2t5QXNZZmsxaWRWcWZiVlhyNXdTSDNnRmcxcHd3WHR6dmpXZnRxWnFSVnZUaFZRWW1FeCtFN1R0U2ZzUkFteUppWWxZTEJiTTVqaE1waGlmU2VvRk41MnV5UnoxUlVtRldxMUdCTkdMTkdsdGtodHdiaXNvZUVVSThTVjRjQ3NDbGNyWG5LeENKV3dVVjd2Q015RXNZZm1WaUtJb1h6My8vS0xtQVlPQWIwMlNKQ2V0KzlaOEpxaEdOR2xyVFdWVDNweTFhRXltR014bWI4QWdNVEh4OUlFTm9GMjdkaVFrSlBoeTI0d1lERkdCSW5rL0E0Zy9rQUFLaXBCUWE5UUJJa3BKQ2pCZ3VzZGRON1RpK1BIakw0Q2VQcDFpV2JXOWtLTTJPeDk4L0NVL0NJbUdSbmQ0Tm9RbExMOFMrZmJiYjFmUG1ESEQxZ3FvK1RVMlA2Z0ZwM2kwV0hHcWlibkRYK1FlNVZ2aFBaYUVoQVRhdFR0MU9XUUxZSXVKaVNFcEtRbXpPZDZYMjlaa2tnYURteXhCbmNNamRIbzlHcFdxMWFSZEpNa1ZGMmZlNEhLNVhyejd4aUYwNXdpVFh0L0FwMG9pQTJKVjZIVmhUcTZ3aE9YWElEYWI3WTJ1WFMvOUpzZ0ViV3ltcmJXYWpOc1VNTkNJNXFBV1d1VHVKWkJNU2tvaUppYm1sUDFwRlZuYXQyOVBkWFUxVnF1Vit2cDZYeUY4STA2bkU2ZlRpYU9obmlPMlJvd21FMnFQazhaR0JVVlJFRUlJUlZFVUVCNGhrQ1NRa1NUVko1OTg4dkpWVjEzVmE5cE52OGtHY05lVmMvVzJhUDRVSDE2cEtpeGgrUldZb0x0ZmZmVzF6YTM0MVlKQnpZVTMxOVVqU1pMU1BCbTN5YThXV2pabE1FU0hGTHkzYjkvK3RQclVLckJwTkJxU2s1T3ByYTNGWnF2RGJyZmpjRGk4bEVhT0JyNCtWb2NxTWdwSnVHaHdLOEl0SkVtdFVna2hGRHdlOE5JYVNZb0FOd0xYMVZjUExOdno1YTVGWDNxaUZpZHBGZDc1K0hPeWNudlRNWXhyWVFuTEwxNisrZWFiMVE4ODhJRDFKQ1pvaTJSYzM2cFRMZEk3dkg2MWxsSFF4TVFFa3BPVDBXaE9EelJPeUtkcXNWaWFKZTVHKzJwSkk0bVBpOE9randDVkNrbWxRcEs5cUN2TEtpRkpDQ1JKU0pLdllsL0NKVW1TTS9PeTdFMmxKU1hQcmk4NlRNL2VmWGw2Y09md2pBaExXSDdoVWx0YnV5UWpvOXVCazJocmZtRHorOVo4QVlNQXFJVXc0bnFqb1A1YTBPaVFSTnptaGU1bnJMSDVKU1VsSllqU3lPNmpOR29rUFZueGNiYlpxSyszMDlEUUlCb2JHeVdQeDROYXJjYmo4UWlmQkJaWmxpVEptVmhUK3RLTTMvKytteXpMZzhKVElpeGgrV1dMMiszZTh1aWpzejl1Qm1vT21uTFdUaFFGRFRaQmhaZTFJNWc4VXU4elFVMCtFOVJDU2tyS0dmWHRwQXo0VVZGUkpDY25rNWlZNEV2Y2pjRmdDQzZVYndvbStHdTdWTDVBZ24rcFBvSXFFdTY2Nis3amh3NGRlZ0VvRDArTHNJVGxGeTAvZnZycHArODkrK3l6RGEyWW9JNW1KbWlnd2lBMFlLQVd3WnFhdjhEZFlJZ09MS1BuTjBHYnMzZjhKSTBOdklHRTJ0cmFnTllXOExVNXZkVGhicmNidDl1TngrTkJVWnFDQ0VJSWZPQW1DU0hjZ0NSSmtweWEydkZ6cTdWMlFYUjA5Tnp3M0FoTFdINlpjdmp3NFdWOSsvWXI4NEZYTUtBMU4wSGRRUlVHb21sUmx0QmdnYi9BUFNySzRFdnRhRU44dkRlMTQzUURCbWNFYkFBZE9uVHdSVWh0TkRRMDBOam93T2wwNG5JNWc0RE5qY2ZqRVI2UFJ3b0dPSi9XSnZsTVVwY2tTU3FqTWViZmpZMk9OSzFXZTFkNGlvUWxMTDhzc2Rsc2J5UW50OTlGYUdwSGN4UFVSV2paVkFzVHRJbGpMYmpBUFpTT3FFT0hEbWZWeDlOYWpDMDZPcHIyN2RzSDBSc0ZNKzc2cXhMOHhKU2FVNW1rVHFEeHd3L3pseWlLVWhDZUptRUp5eTlIM0c3M1I0c1dMU3FnOVFob1FHTTdtUW5xQnpXdE5xSlpkWUdCbUJoVGdJNm9mZnYyUkVkSG4xVS9UenREdG4zNzlsaXQza1ZlUXJVMnYwbnF3ZVB4NFBFb0p6SkpFVUpJUHRYVU9XellzUEx2dnk5K3ZrT0gxQTZTUktmd2xBbExXSDdlSW9RbzNyRmp4OW8vL2VtaHVsWk1VQWN0QXdhZUU1dWdYazFOcDR2MHNYYjRPZGE4QmU3SnljbG5aWUtla2NibWw0NGRPOUt1blRjRkpGS3ZCMDBrK3Fpb0lHTEtDTFFhRFpJc0MxbmxYMGsraEcwM0VFaVFKTW5ac1dQYXpwcWE0OC9SY3ZuTWkwYXNwWHRZdjIzUHVibk85bjBYcE0vYjFxK2d6UHB6ZjY2d2Z0dUZhczFPd2ZvdE9IOGhjNlc1ZkxacE5RZXJUL2tLdW91Ly91L3lmdjM2bHpYVDFsb3pRZjJKdUw3cUFxOEpxdEg0dGJWUXY1cS9aS3BObTFqaTQrTnAxeTZKamgwNy9xUjdPaU5nMCt2MWRHaHY1cTFQQ25uOTZ6SStLU2xuMDNlVk5LaTlOcklrUEpSVTEzSE03c1JxZHdpN1MwRldxWVVzUzBLU1VCVGhYWXRVQ09FV0FwY2tTWTJ4c1hIdk5UUTBQUFZMQWFJbkpvOWtXOW01STF5cUxNem5tWlZiZnZKMXlqOWJ4U01MMTE2UWUxcncwTy9aOFRPUGExY1d3ak1yVzNsT08rRGVlZWUycmQwcjUvRmt3VUcwdjVDNTBseGVubk0vMjRwdEp6M20yTEhxRjlONzlOMFRwS2s1Z2pkSmtocURRYTNKQkpXRVNxVVdYbERUaWhQVmdYcnoxY3kwYlp0RWh3NGRRbGFjT3UvQUJ0QzJYWHNtL200TTgzOC9nZ2R1R0VTLzlrYjIxemlKaW9yQ0VCM0RwUjNha1o2VVFMdUVOa2hDd1lXTUxLdUVJb1FBU2NpeXYxQmUrQmtBR25OemM1ZTRYSzdYZmdIK0JRcTNmVWhaalRkb0VpcmVDYXc0YkJRWGwrSU1tcy8ybWlxS2kwdXd1ME1udWFJb3BBNlp6TWI1azF1OWxzTldSVWxaMVpuMTBXNmxwTFNpQmRlZHcxWkRTWEV4Tm9mN0RPN0p1MzVvY1VrcGRtZkxGN1Ntc295SzZwWXZoSzJxdk5WK0swNDdKY1hGVkZudDUzV2NGQVZTaDhERytTMS90NVhEMWwzZ2Rudi9EdG52Z0pJU3NMZWllaWw0N1lxUzR1Yjc3VHo1eEJ0TW1qVDJselZYRkNkbEpTWFlXaG5YNXVOa3Q5di8zYU5IaitCOHRSWW1LQzFUTzN4ckdLaEVNTWRhODJDQm56aXlLVit0UFczYnR2M0pjK0FzcXRBanVLNXZUNzc2U3NadWJ5REZrc0NudGRVWURCRzRYRzRrV2NhR2dzZmpRYTFSQzZGU1Myb1pISTFPWkZrU0VpS1FBaUs4S1NCU1llSFhja0ZCd1l1REJnMUtVS2xVMS8wY1FhMXczVE5NZStaZENnL2EyWDNYZFN3eHFCazI5WjlNSFpZRndLdlRiMlIxVFVjcVA5c01laDNxekp2WnRtUUdUOXc3aUdXN1BhUWw2Tml6cjV6WnI3N04yTDdwZ0lOWjQ0YVRYL2dOdHF6NzJMTnNScUN0UlZOL3c0b0RjYWpkeDZrNldFaks2TWRaTzIvOEtmdFlYYmlHQVlNK1FFYzFGZm84Q3RZL1Q0SVdWczRaeTZ6VjM5TTUxY3pCd2lMR1AvRUdENDNLT2VVOXJWdndJRk9lMmtSR1ZtZktEeFF6ZCswWERFbjM2aVhMWm85bnNmVUkrM2J1WXVyTC8ySDZzRXh3VnpOci9NMnNMRkpJMGR1cE52Um0zZXAvWWRGQnhlNDFEQjcxSjFJeXM3QlZIaVI3L05NOE5YSGdlUm1yV2VNZ3Z4QnNXYkJuV2RQdkQ0MkJiVVZRVWdGRGhnQ3hzSElseEFJN1ZzTDRHWkNlQ1FlS1lPNXlHSlhqUFM5L0FjelpCcnFEWU5WQ2pRbUtmQXROT29yV1UyRFBZVW1hN2hjelY1U2FnNHdjL0JzcURGMlI3UTA0S3Azayt2WTFINmVldC84alA4MzF6WWVIRHg5dUxWZXROUk5VQ2E0RjlhOEpxdEZvUmRNcVU1R0JPdENZR0JPeHNYRWtKaWFTbk55ZVRwM09rYnRkQ09Xc3R1UEhxL2w0OHdmMHYyVTgxOTMvWis2Nzd6NUdqLzR0MTE1N0xWZGNjUVdkTDBsRE5zUVJiMmxMYkd3YlNWS3BKSlZXSzB1eXJKSmtXUU5TQkpJVUpVbVNTWktrUktERHZuMTdoeXVLNTFOdndjTDUyWTRjcVJDSERoMDY2L052NnhFbDN0cnZiUEg3SzMrOFhzVDNHaVYrckhjTElSVFIwR2dYUWlpaXRyWW1jTXozRzU0UUhhNmRHbkxlL3JkbWlXNjN6UTM1N2ZrSHJ4R1gzelpYZUlRaVhJY0xSTHU0SzhRUG5wUDNhLzliczRTbVhUOXhxRUVSUWpqRUgzL1RVZnpwOWM5YTlLRnUveW9SMytWbVVYK0tlNnI5YXBXSWEzZUYySC9NNGYydHNVWWNyL1BlMnkzZFZPS1BMMjRYUWloaTc3OW5pazQzekJCQ0tHTHpjNU5FajVzZkVZMUNFVUs0eGROM1h5bis4T0kyMy9PNVR0enhqN1dCNnpjMk9rNytyQnYzaVQ1dEUwVmlZdWgyOWYzelQydWM5citsaUc2M3RmejkyM2NVMGUyVzBOODhSeFhSS1ZFUm54ejIvdjNqeDRwbzMwOFJMdC8rRDU5VFJHUTdSZXc5NnYyN29hSHAzQzllbXlHNi8rNnhYOVJjZWZmeHNhTGZmZDduMkhoa2grZ1VxUkt2ZkY3ZFlwemNidGZPOTk1Yit3RHdXMkE0TUJqb0MyUURYWUVPa2lRbCt0N2hLRm1XSTFRcWxVYXRWcXNpSWlKa2c4RWd4Y2JHU20zYnRpVXRyU09abWQyNDRvb3J1UGJhYXhrOStyZmNkOTk5L08xdmYrT1ZWMTdtNDQrM2N2eDQ5Vm5qVWZQdHJIbURUTVlvdHV3dEpySmJINGJGZXlndksvTkZTTjAwTnRSenlPckNraGlIeHQySVEzaUVKTW1TSkt1RTEveVdGQ0Y1a0x4cXF3VElraVJKR1JuZHZpNHJPN1F3S1NrcFZwS2s5RjlhSUdEd3lGdXg2TDNXdlU3ci9ZSlhGRzVpOGpPdmNLQ3NHc1ZSUmFXY2Qxclg2cDJYaXd6SVNjbVluZFZZbllEdTVPZWs1VjVOc2c1QVMvK0JlU3pjdVJ2RzVtQXIzY21NZWY5aTk4RUtGTGVObW1valZ1QmtYb3hkT3dwSUhYUXpYV045bmlPdEVaTzJTZEh2bmVkVlo1SlNVckJWZlE3QTFxMmIwZHB6bURYallRQktTK3hVNkFxQlBMTDc5bVBHNUQ5eGI4Vm41UFh0ejZoaGd6anBtbC9hcm13di8vR0NqRnZKZGloWHc1cjVzTlpycFdIZDR5MlA4UmZ5OUJ3S0dXYnYvM1ZCNDFCWmZSU2pNZmtYTlZkMjdmeWMvaU9uZXg5elFnNTlNNHlCZlUzajlPbDNTVzJUM25wMCt2MUhtZ1VLZ2lPZ0ovQ3J5YUpwQlhkL3NLQXBBbW93R0h4cmdyWWhJY0ZiQjVxYW1vckpaRHBuWTNxV3dPWmh4WHNiMkJPZnd4UFhHUGorbXlLY1Bsb2poNzJPVDQ3VzBTNDVtV2pGUVgyOTF6OGdxMVJJc3BvSUxjTGpjZU5VRUVpU2dpOXgxdzl3eWNudFA2NnFPdnBjWEZ6Y1RDRCtsd1JzT3FPaG1iT3BrRkdqL3NwajZ6OWdXSFlLOWwxTHNVejQ4UFFHUmc0YUd2bk1IZENLMzRPcVZERmgrRzBNVy9RaDh3ZG5vcTdjZ2lYenJ6ODVEQzBIOTgvbnJGS0FyTnhyR1RIWTkwMGFjU1BHaEZRQXNrYk1ZRi9PY1BJM0ZiQjAzbjBzM2ZKSDhwKzU5OFFOT0E4eUl1KzNsRFRyYU5kaEQ3RGlzUW5uZk95TXlUQnlSTlBmSThkQVF2QitZK3ZubVkzUjJPeldYOVpja2VYVzNIVEI0MVMxN1BWL3YvSGc5UHUvSjdTdzNkR0tYeTFBOVIyMDJMSHdyd25hTWdKcThBVUx2UHhxYmR0NmszQ1RrNVBQNlhpZUJiQUozdi93US81ZFoyYnA3M3Boa0FXZWhnWWNEZ2NPV3czcmRod2pPUzJkUkJ4WXJiVjR6Rk5pQUFBZ0FFbEVRVlNCVXF1b3lBaFI1eFNTVHExRzhiZ0JTWkVsQ1FGNEN4UzgvalloaEdRMng2K3ZxVGx1aUltSitldXA5WlFMS3dham5xckthdWlhY09xRHE4c29WYWZRdDJjS01yQit6YnU0MForM3ZoWHYyRXlaWXpiSk9pZmJDcmFUTS9ZUDRLNmt0TnBJLzd4TTFNQ085ZXVwVkU1OVQ5bTVBeW1aOHcrS3FxZDR0VGEzbFJxSEFaUGh4UEdtQWYydjVxRnR4V1RQR3V2VnhoUTdWVFhleHF4V0s3SEpHWXlla0VGdWtwdThKNHRPZmpQYVZCYXZmWS9tdm0ydDRhZDkxZlZHc0ZaNnZkeit5WithQjRaU2tGT2h0NDlBb3FycTlDWmUxNTQ1bEQrekFTZTAwRUIvcm5PbGQwNHY1bTNiQ3JkbTRhemN5YllpS3dOOCs2eFdxNk5CaW5ubHdVZiszejZhMGpvY1FFTUlxTFZNN2ZCcmE4SDhhcUsxeWdML0tsTnQyMXBJU2VsQTU4N25udW5ueklHdDRRaVBGM3lIVlJmQndMbjdBVkJGVzNpcWR3cUZoVjl5U05HaVBuS01iK3gxdUJ2c3RORkhZdGJwaURYRlVIL2ttS2h2OUVqQ0k0UktyWlprL01TVUlmV2traEJDTnBuYXZHV3oxVVZGUlVVOThuTUN0Z21UL3NENENWZXgyR1JnekNNdjh0REluaWMrT0dVQVUvSWVwVy91TmFRWkZNd3A4WUVIWHJGakJhT20vd3Q3VlFrbFZUSjkrNzVQNXJBSFdUUmoxRm4zeldMMk1IYlExYWlwcHRJNGxJTFIyYUJWbUQ2aE04TnorOUF6V1krYzFCNkxmT3A3TW1hTjROVVpIekUwcHdjWldaMnBMQzNsc1pXZk1qajl4QWJrZ0lsekdQclpiOG5zZVNVWktTWU9IaWhtOG9MM3VYZVFnYlZQak9leDlVZkpTSTFsWDJFUmp5eDgrNVJUTXlIcHpML2lGVHRnMUhTd1YwRkpGZlR0QzVuRFlKSFAzNTZVQzRPQXJDd3dKTUhHalJCcmh1WHpZVnllTjNoZ0xRZHREdVF2T28wUFhjK2g1TGtmWld1WmswSEoybC9FWEJseTd5eGVIblE5dVFNL1FPMTBZYlEwcWFQTEh2M2RpL2MvczJGWE0xQnpCSUdidHhhMGxXQ0JmNkZqWHdSVXRCWUJqWWt4QmRZdGFOOCtoZlQwVGtpU2RNN2ZVMG1JYzVObmMrVElFZmJ1M2N0MzMzM0hvVU5sSERsU3diRmp4emgrdklhNnVqcnE2NzFGOVBYMURUaGRUc250TGFDWFBCNlBKSVNRZlpzYTBBQmFJWVFPaUxUYjYrK0pqSXo4dzdtNjRjcktTcHhPRjhuSjdTNFlHRmFWbGVEV203SEVHczU3VzI2N2xmSWFCOGxKQ1NHNVBEV1ZaZGd3a0p4d1pocVAyMkdqdkxJYXN5VVp2ZmIwc29Qc05aVlVXZDFZa3BMUUJuMDZIYllxeXF0c1dKSlNUdnRhRjFJVU41U1ZnZEVNcGpNWXFtMUxwaksvTkkrVmMwYi9ndWFLbS9MU2NreEI0M3I4K1BFWFltUGp0alF6UFJzQXUrOWZyOVltU1U3Sm0yUWZBRFpmWllFL1QwMDBBWnFCNkdodi9XZGNYQnlKaVJiYXQwK21VNmRPZE92VzdaU0xzcHl0cUdiUGZ2VGNtR2dHQTVJazBkam9MWTUzdWZ5RjhRcUs0dkdYV1BsRHNUNVFGVTIvQmR1NlhzME5nSysrK21yUHlKRWpVYXZWdmM5RlArdnI2L0Y0Rkl3bmNwcWNCOUViVFJnaXRSZWtMVmtUUVV4MEZNMi9nYm9vSThhb003ZnFaYldXbUpnWU5LclQvNnBxZEZIRXhFU2phb1pkYXEyZU5pYlRHVjNyUW9va1E0d0pkR2M0VkNsWnZXazhYRWJYSGwxUi9XTG1pa3gwMExqVzF0YStQR2pRdFp0Ly9QRkhWeXZBNWszQzlmblZKRWx5TlRNL0E2RG1Oei85Q3h6N0F3VnQyclR4clZuUU5tQitubXUvMmprSUhyUXVxYW1wT0J3T25FNHZyWkhiN1FwUUduazhpZy9rdkdEV0JHcENlSk1sRmNWWFY0b1F3dVYzdXExYjk3NzArT1B6bGp6eXlNUHFpSWlJZTdob3BZYmxDNWRSM1lxQ2JjbnN5NmdCUFFuTC8walVzWXdkTitJWE8xZnE2dXBlZStDQkJ6Wi84Y1VYemZQVW1rRE5Hd0gxYTJvZWZNd2QvZ2hvOHdSY2J3VFVuNnNXdXNKVVdscEhVbE5UeisrUW5Pc0xkdW5TeGNmWjVneWtmL2dMNVAyYW0yOFRRZ2lmMWtaQWxWTVU0V2NDa2Z3K3R6bHo1dFRFeDV1WDNIMzMzWEpFUk1UZEYrZmJZK0xXU1pQRElCS1djenBYNnVycVh2L3JYMmNWdlA3NnNvWWdUYTBoZVBPREdrR1ZCYklzdFJZQkRmalZ2SVNSaHFBYTBJUkFXa2VYTGwzTy83Zm1uS3Z6a2tTWExsMW9iR3owOGJXNS9GeHRBYzJ0S1pGT0JJR2JRQWloK0loQVFreFVTWko0NElFcHg3UmE3Wkk3N3JpRGl4ZmN3aEtXY3lkMWRYV3ZQL2JZWS9uUFB2dHNQYUdCZ29BL3pRZHFJZmxxWGhOVWJoRUI5Uy9FMHB3dzBwdXIxcGJVMUE1MDZkTGx2QVFMemp1d0FVUkdSdEs1YytjZ1dpT3YxdGJrYS9PYXBENnoxQTl1d3FlbCtTT2x3ZUFtU1JMU1BmZmNlN1N4c1hIeDNYZmZyZWgwdW52Q1V6TXNZVGxyVUh2dHIzK2RWWEFTVUd1UXBOQlZwb0tYemd1T2dEWnBhazBKdURFeHhvQmZ6WityMXJselp5SWpJeS9JL1oyejRFRnI0S2JUNlFMZzV2SDR3UzNBMWViWDJ2eWJEOGJGaVhSQkFiQmh3MGFYSkVsNyt2VEpkV3MwbWpNT0tQd3ZnZ2RoQ2N2UFNXcHJhMStlUEhseXdlTEZMOXBQcEtuUlNtVkJFNmpKd3IvQWNXZ0VOS3JGZWdWK245cWxsMTZLMld5K1lQZDRGakYzRDU4VzdtWE82bnordUxLQVY3NzhJY0JEMVZoZncvS1BQbVhHdnpmeGwzZTNVNnhFY2NrbGw5Q2hRd29KNWpnYUZJbkQ5WTNVQ0sxdmRYbDk4T3J5UXFQUm9GS3BoVCtEMlI5MW9ZbkRyUkZ3UFBiWVk3VTMzenpxQmJ2ZC92U0ZuaFFIOSt5azJuR3VydVprMzY3ZDJFNDc0NmFja1RtLzRjQlpFSDlaSzRvcE9nUDJoMjJ2UHNLOVQ2NzUyYitrSTNPZ3FKWG5zVzhYWi9CY1QwZmN6THRyTkZ0SzdEL3B1WjVLS2t1TEtLazhTN0k3OXdHR1pOOU0yVWtPT1g3OCtBdlhYRE1vUDhpbjFrSlRveVVOVVhCaHU0K0dLTlNuRmhtcDl5WGdlcXNLNHVQTldDeHQ2ZEFoaFVzdXVlUzhwWFdjTzJCVDZsaXpxNXd1cVIyNElhTWRtN2ZrTTJ0ckNRQS9GSmZ3ZGIzTTFkMDdreDByZU9DRlZSdzJ0Q1U5UFoxb25ZYjlEUkwxSHNFUlJZUFJhTVJnYUVaUzZRTTN0ZG9QYmw1eXltWUVsWTJBWThPR0RmVlJVWWFYYkRiYjQ3NkJ1U0F5ZSt6VkZKU2NLMTdNU2lZT3ZZa2krK2tEWVdsSk1jNnplR0UvVy9VNDB4ZXNPKzNqYlRWSHFhaXkvZXlCYmZ4VVNHaGxGazhjeWhrODE5TVlxUjFMV1ZHUlJ2OVUvVTk2cnFlU3RmUC93THpWaFdmOW9Td3BMajFSdVp6ajZOR2p6OFhHeG0wSmluNmVEcWg1SkVueStJTUZMYzNQVUxKSWYxV0JuNElvUFQzOUp6SGhYamdmbTJ6aThmSFhCdjVzWXovS2ZidC9nUDZwZE83ZWs4ZTcrL2Vrc212dmZyWitYODFEMloxd3VRWVNrOUNPOXpldXA2RGNnY2trK2N6U1FOb0hQcjlhd05mbWR1TXJKY1VUN0hQenBZUUFFQjF0WEhiOGVMWGRaREpONFR6V2xwYnVYTWZpTlo5U1dPSEUvc3lqN0RiTDVJNjRtMkU1M2pMcGZWdFhzMlQ1KzFqbE5veTVkeXFEc3J3NU9vcTlna1hQekdkSDBXRmlrenN5N3Q1cFpLY1kyWjIvakZWYnZxREVWc09pT1gvRm9wVVpPdTRQNUhVK2RRTHQ3dnlsekYrMW1ZU01xNWcrYlR3bU5iaXRaU3hlOURLN2k3NUgwY2N4ZXNJVUJtZW5nTE9jcCtZK3o4NGR1emhncldUbXpPL1FKZmRpNXIwakFpOUQvc3JGck5yNEJSamFNbXJDSkFiMTlQWGRXYzJTdVkrdzdlQXhoazM0STZQNitrcGYzRlpXTEp6UHBwM2ZrdEQ1Y3FaT214UW82TjYzYlRXTGxyNlBEUzBaQTI1aTJxMkRPUitwdVB1Mnd2Sk4zaG5jTytUWndLb3RVR0tEUlhQQW9vV2g0eURQMS9YdDYyRFpHbkFiWU9JMHlQRlh1VHZnbVFVd1pEQXNYZ0IyQTB5ZkJlbSs0WGgxOFFzTUgvdEMwNzJjNHJuYXF3NndZUDRpOXBUVWtqbm90MHdkTnlSUWNyVmozV0plWGYxZm5Gb2plY052NDY2aHZWR3E5akhuLzdkMzd1RlJsSGY3Lzh6c0ladk5ack1zSVFraGlURmdpQ0hFaUJnUkl5SWlJbEpFUktTSWlKUWlXcXJXb3JWS0tTOHZQenpVSXFVVXJWSThJWjRRRVJFcElxVVVFUkFSTVVhTU1jUVFZZ2doaEdXejJlek96dlA3WS9Zd3V6bUFlS0srUHRjMTE1NW5abWVldWVmK251N3Z3aGZZdGJXQ3VySy9NNnZtbjZRVlhzYU1jWU5Qd05KY0xGLzRDQnRMdjJMSTJJdWprYXloZ29VTEYxTldmYXdoUGpuOXFTY2VmV0EzMGJXZkxUSG1aN3VncG10d0hBVnFrVUJCQW9tSjBhQ21WUlgwK3Zaa2lMNXpZSXNabjlZM2tKdCtWdHNQL01lcE9LSXlLVFVKZ0x5OFBCUkZvVnRLTitKYldraE9SdWRyQ3kxaDhBcURHMEFnMENtNGlTNWRuS3NPSGFwcjd0YXQyMjNmbFNxSVBTT1A0Y050YkgveEVZcEtMbU5JdHBtMERNMVBWNzVoRVNQdWZJMEZpLzZYWkY4bE04WmN4ZEp0NzFPY1ltYnBmVGV5em5jRjgyYU9vNzV5RHcwTmJzaXlrOTZySDhNdEZ0WXNlWkhpSVZlUWI0T3M1Sk5Jb0ZXcVdQWnlPUS9lL2t0V3pMK0R5WE1zcko0M0hsOTlKWTJXYkNiZk5ncGYvVzV1RzMwWlMzZCt5c0FVTzRPR1hvSHMyazFsYlIrR0Q3OEMyUmFwWFh4eDlnM00yMlpud1p4YnNYcHFLTjFYSGdhMkxTOC94OGdsRHpFaGV4c1R4dDVNY2ZXN1pKa1ZIcHh5Qlp2TlZ6RDd6anNvWGZrb0l5WTNzdXZsMlZDM2xSSGovNGNGei82ZGJMdVBiWHMwd2N2T2dHM2Jxc2Zac1BkUXpNMnpLN2ZkTjRPVVRtWm5TallNSHdwVFI4UFlleUV0K04zMFhqRGNBbXVXUVBFUWdzYzFhRjR2ZzZsUHdNSkhnRm9ZUHd3MjdZRXNTeERZNXNHNjdUQjFNdEFJalM3QUFkREErdldWM0RldlVIZmxkSEpjUGRXTUhYd0YrVk1mNHZaUmFTeWIreHRtZWl3c21qNll4dDByR0QzekZaWXZld2lIMnNEdWFzMk1sYTBwREIxK0JkN3lEY2haRnpCOGVCSFc1Qk0zQ1Y0NTd4Y3MzSnZCb3Z0K3licEY5MUtobzJ0enB2Nk0rbk5uZlhIOTliYm5SNDY4SmxUN0dadW5GbHBhT3dLMVVGVkJaK2FuQm1wZFNVdExKVE16azE2OWVwS1hsL2VETWZsdkJHelYrei9oc1U4Q1BEbmo3Rmg3bFdmV2JDVHU3QUZjMlNNdS9HNmZQbjFJVDA4bm9ibVoxRlE2Q2lJRXZ5MEVoS09sSFlJYmFJQ1ltcHEyZnYvKy9hNnNyTXhiWkZrKy85cytVSTYwWHBTazlTTE5aaVMvL3lCSzhpS0hidW5DdnpCeDFxdU1LTWtEK2pOMTZGT3NXTHVMNGlrRGFXeG93SnFWUWs1dUFVV0ZSYm9MTTUrVWJEdDJzNFYrSlNYMFA5a0tHdG5LekxsektNNDJVamozdDZTTWVnN1h2UEhZZXcxaTVxUThkdTdaalZ0TklUL2R6YzdkdFF3Y2tVWC9raEthOXFTVGJNNmxwS1JFQjVMVkxGeThsUVY3dm1SWWxoa29SdmNwQlNOdlpOcW9JVUF4QTJmOW1iMjFrR1haeXNKMUNwc3I3eVhiRFAzdSt3TlA5UG9acFo3WjVMc2JhRktzcEdSazBTODNuWDc5VC94M0xBNG5hV2x0YmlNWVQwRHprck9nSkF0c3hyYUFsNUlOZGpQMEt5SHF1QzU2Qk81NkFnWUg5MnYwMDdCNks5dytOUGdGRDl5N0NJYWt4MnlzcVpKS1Z3YloraUpiMmRiaGNTMWIreXhsR2Rld2N2b29aR0R1dmJlU2Y4K0xMSm8rR0c5REk2ckZSbHBHTmdWWi9RZ2ZJbXN5SlNVbDdGdnRwS2xYVWZSNTZ0aGh3UElWRzVtNTZpQURDNndVejcySEphdi9FUEduSFdyOG9MWFYvY3JJa1RmdXAyM3RwNjVFaWxhSmprSE5ZREFJazhtSTJXelNnVnBzVVh1b1hDb3pYQzcxUTQ1VEJyWWpYMVZ4eXlzZk1mZW0wZVFtNkdlaFlNT21qYng2UEpubE54WkczYTBsU1NJN081dkU0eTR5TTlDWm9tcVVPUnBhajhiZ29EUG1CaElhZVJQaXpEUFAzUGJoaDd1Yit2YnRPOVZnTUF6L3ZnNWlkWFV0Wll0L3g2NW5RLy9Xd3RDaDJ2UHBjLy9PZmJQK2wzNjU5MlBKS0dMUnNxY1lrdmNOb2tOeUN1bEJlbUpKeThEYVZFOGowTFQxYVlaT2ZwVGhZNjRteFc2bXdhM2c5WjBneXVDdXBVWk5JeWVyL1JLZVpJY3pQRTNNWmdWRkFXOWREWTNlR3U0Y2QwM2tlMFhub0hyQjJHc2t6ODdhemF4SlYxQmU0Mlg0MVB0NWZNN2tUblhYYkk0VTB0Sml2aUhidjVNOHBPcGFXRG9MVnVtSWNULzloaHlRbTk2dVl4bEYvanJiK1JKWDZYYkdqUDQwL0Y1eDNrV29RUHJReVR3NHBvS3BJeStrMmlVeitkNUhtVC85VktkcUUzWDFGaktTTmIrZk1TME5aM0EvL1g3L3hvc24zcjdteGhtM0h0S1puM3BRQ3hlMVM3UlI2b2dCTlJNbVUzc05XRUt5M20xQjdmdklWZnZXZ2UzNGtZUDhZdmxXWm95L21rdlNvcDJwNzc3M0gvN3l1Y3pUTjErTXZaM0NPWVBSZ0NPckp6M1BGS2hxSUlhdGhZQXM1RzhMbTZRZGdWc0lEVVhJTkQzMzNINmZyRnIxNnArdXV1cXF3MmF6K2NadlBkb2l5Nmd4WXZsWldSa1VUZjhiOTQ1cWF3VTdjb3Bac3VJTlFHSDVySjh6YThGeXRqMXhaeVIySTZ0dHRQYzdEOTdVVTFPclVKUmp4RnRYZzhlWlFUTHd4TExIR0RQcktSNmMzQS93VWJubXo3RTczbWEvc2FXVElkZFJXZTJqVjliSjFTZWEwekp3Mm5KNWV1MWJZZk5QUDUxR3paakxxQmx6Y2RYdFpuRGg1V3llT3BsaG5aUUVWdTdad3RwdEIySldrMHJ4aUNIWXY0bHpUbTdiMHlBckhjWXNodkVGWHpPVTVzZ214MUpIVFFQMFN1R0V4elVyL1F4U0JxU3lmdVc4ZHJaaFk4cnNoVXladlpENjBsVVVEZnc5VTZZT3A1ZFJQNzlPTmpqbElEM0ZTMDJEQjlLc0tIVjFOS3JRNHZHODlOalNmN3g5eHgxL2NIVUNhbDZkV2FxUGZyWUJ0VWhoZTd4T3FjT3U2MVdRR2l4c3o2RlBuejZZVEtZZlBLajA5WUhOZjV3Wi8zZ1RTMFp2R2cvdTU3bURZSWgzTUtFb2kvM2xlN2oxcmMrNTRkTCtyUDlBaSt5Y2RjYVpERWhQUlBVMHNlS2phajZwYnVLSVQyVnZOeWYydERQSVVLTjliRHBRQ3owWElhdlQ3OWR5MmJSRVh3SVJiQXN6UWlHRUVHUEdYSHN3THk5dndmdnY3NnkzMld4MzhDMG1JdWZuOTJMNW9nVllSaGJRcTNBZytWbE9wdDc1SzRiZjlVdHl6UDlEcmxObTU2YjE1SXk2aDZINWRsWSsvaUJrRHlRM3pjeXVmVlgwNm4rVDNuQWlQMGZoOFFWUFVOOC9nL3dCUThnNWtaOU45Ykpneml4U2JoL0ZpdmwvWnRqRTMyRURzckt6ZVhIdDgrd3FraWxiOXdUcnloWDBLbGU1dVgzWXZlUWxYaHlRakNNdGgrRURDOENZeFowelNyaHJ5cTBzbVBNcnJONGE5alhhbURxdTQxNEVjbG9KZHc3MU1YbjZIR1pOSHdXTk5hemRYc1hjMmJmaks5L01vdlhWRENrcHdsTzlsUVp6RHRuT3p2L084Q216R1g0S3VwRzd0MEtqRjF3KzJMNEpHcXd3Y0hCRUZUZy9CeDVmQVBYOUlYOEE1Q1REN1ROaDZqU3d6ZGVDQ2x2V3crRGJvZDhKQ1hRYXc0YW1zRzE3T1lOSFJXdUh0WGRjODBkT0ltZnVwZHkxSUk4SlEvS3BMOTlEcVR1TmU2YU1vR3JyYWxhVit4amNMNWZhM2J1UXM3SkoxczNPdkY1bjgrQ0tmN0FxdzAxeVJoNkQrblhtTXJZeGNlSnc1cysrbjZ6N2ZzNmFSWThveHhYbHlVdHplLy9uVU5zZUJYcEE4MHFTMUNxRWFDZjVWaDhvTUlhWW1vaVBENW1mTmgxVDAwQXQxS3VnVDU4K1dDeW5oM3ppMTAvUVZmMGM5UmxJVFREaDlTdDQvUXF0c3BuaURDZkhtMXV3Mm15WVJDRDhXVklYSnpsSkZrU3JteTM3RDJOTDZzTFpUaXQrSVpHWG00dlRLRkFVQlZXTmxGdXBxZ2lib2pxeVJvaTlDZEhoM2dsSmtnUWdHaG9hMUFjZWVLRHN0dHR1cmJKYXJUMGxTWExDTjAvUUxSNXlGVXJkUGo2dHFDSytSeDl5MDVQbzJuTUFWeFk1V2ZQcXEyeCt2d3hyWmwrR1hud2VpWEV5bm9aS05xei9KeHMzN3lTclpESnpmajJhT0RsQ0VTNFpjU1VONVh2NGZIODFxYjM2azluMUJCTkRUbVhVc0RONC9wbVZPTS85T1EvZE01NDRHZkl2dUJSUnRZTlgzL2dYQ2YzR01YMTBFVDM3RkpPVnJHVjZKK1djeDRBc2lkMGZmVXFkeDh6RjUybU8zWUpMUjVOcnFlTzFWMS9uNDJvWEZ3KzlndXhVN2RnNE0zcFRrSk1hM3RjK3hSZVRIQzlUTW1vY2xyb1BXYlZxSFo4ZU9FYS9TNFp5VHE4ZUdDU0ZEN2Y5aXczci8wblpWeEovV1BBbzUvVkkvRTRtN3RzdncwY1YwUGRDY0IrRTZobzRkMUFFMkM0WkFRM2w4UGwrU08wRm1WMGg2MXdZMEIxV3ZRbzdQb0swUGpENGZMQVlJcmY1QVFNaHJwM3RaWGZ4TStmcFhVd2JlMG5VKyswZVYxTVMxNDY3aXMvZlhjL2F0elpSM3hySGtLSERPQ1BWam95WDdadmY1cTMxNy9CbFN6Y2Uvc3NEbkprVU9lZVo1NVp3VnR3eFBpd3J4MjEwY241K2RxZkg0ZXlMaG1FLzlBRXZyWHUzTW1mdzFZK3RYL25ZKzgzSGozZWswS0ZQNS9BRkFTMHErVFkyK2hscXZoSWZyNW1maVluMm9BU1JKaFNwQlFwNlVWQlFnTTFtNDNRWjM1b2UyNm1PWThlT1VWcGFTa1hGRnh3NGNJQzZ1anFPSEdtSTBYRnJDUmJXdCtMeitTUi9VTXROVlZWSlZkV1FucHNCTUtEcHVabUVFSEZvYzlSU1Z2WkpVVzV1N2hTRHdYRHBENkhIOXRQNE1Rd1BkNDYra2xFTDMySkl0dlcwMmpORlVmNjlmZnYyTlIwME0rNmdUNEh3QzBGQWx1V0FQdm0yL1R5MVdGMjFVRXFIRnYwc0tDZ2dLU25wdERvbXhoOTZCNUtTa3VqVHA0L085TlNibGxGRVRVL2ZKTkI2SjJpbWFkakpJVUordDZCWnFnSnFmbjZmM2M4Ly8zenRtREhYVkFFM244NlhUL211VGV5dGFtem5FenZEeGc3anAwS3dIMnBZV2JqNjM5LzdWbjBORmF6WnZLZmR6M0tMaDVMak5ENy8rT09QYjdyNzdudU9FNTNPRVd0KzZ0dmsrU1ZKRGtnU3FyNU1xcjJLZ2xDZVdxejVxUmVMUE4xQTdiUUFOZ0NIdzBHZlB2azZVSk4wajFJWTRDUkpDaTFDa2lSSjg3a3BRVUJUVVZVaDlQbHRJWjhiSUc2NDRZWmE0SytmZmJhdnltcE5tQTUwUHgwdm40eThJdXdaN1VRelpTTzJuOURsLzl3dzJqTVlWR0tqSGJ2cUs3Zkh0VHd4TVRzazQ2MVA1OUNib08zMS9nd0FBYTJ5UjFiYkwyalhmR29oOHpNVS9kU1lXZ2pVOHIvVnpsSS9PbUFENk5LbFN6RDNKUUptR29pRm1Kc1VmaDNMM0FCSlZTVVZWQ2tFYW5ybUJxaEI5aVo2OTg1YnZXblRwcXJ1M2ROdU1oZ01RMDYzRTJLMU9iSCtoR0EvamREOXpHd2hKU2JSVDFHVXpUdDI3SGlqcE9UaUdqcnZ6cTZ2SkdpdjhVcW9xWEdiaW9KSThtMUhnWUo4dW5UcGN0b2V0KzlNM2VOVVJueDhQSGE3UGF6ZkZnb2toTEk2T2dnYWRKWXdFN1p0UXdBSGlHZWVlZWF3MVdyZDBhOWZQOCtwS0lUOE5INGFQOVE0ZHV6WTB2dnV1Ly8xVzI2NTVZak85RHhSeldkVU1idE9laWdtbmNPaTY5SWVLejJrOTZuMU9hMUJEVTZENEVFSEo0OVBQaW5qaXkrK29LYm1BSFYxaHpoeTVBaE5UVTI0WEM2YW01dnhlRHp0QkJUOEtFb2dGRkNJRFNvWTBZSUtab0pCQlNEdXdJSHFpM3YwNkRGWmtxUnpmN3BzZmhxbjYxQlZkYzlubjMyMktqKy9UM21RcGNYNjAvUW1hSlRwaVNiakhXSnFJdExRMkVUSFBqVzkrUm5OMUU1SG45cTN4dGlhWEM0T3VmM1lMR1prUFdjS0tOUTJIc01qRE5qTTBSbTZyUzB0SEd4cUppNHVEcFBjTWRHeVdDdzRISTV3VDlMbzZnVEN2cmlZNUdhcEkvSVdTZ0hSbTZhaDE0OCsrdWpCZ29LQ25UazVPWDZqMGZpOWc1dXJ1cFIzUHE3bnJLeVVrLytSdDU1VmEzYlE4K3d6djNIemtOTnBWTzNkeXZwM3RsRFhZaUduUjlmdmZ3ZE84Ymh1WGZzaWNsb0I5cmp2WnJmY2J2ZnpUejY1OU9XUkkwY2VwUDE2VDMwcWgxZnF1T2VucnU3VEhHWnFRdkZodGptdzJ4SklUSXcwWHdsSkQ0VlVPZ29LQ2s2WUpyVjN5em9DWFh1U2FKWkFiZVRGSjU5aDYvdTdxUGZaT0N2eis5TmorL28rTnRYTnIvK3lrdDErTTZseEFXcjk4VHc2NlNvdVRJbW41dk9QdWU3RkhUZ2Rkanl1NDNUdjFaZS9YMWRNb2d4UHJWckZrckxqWkRyaU9IRFV5eTFqUmpDMVQ4Y1hjMkppSW4zNzlrV1daV1RaRUh5TUxKS2tmNHdFRkNSSnd1LzNpMkNGZ2hCQ29LcHFWQ0FocVBHbUNrMDZKSERkZGVOcWdML1YxQnpZbTU2ZWZwTWtTZDlxWjVUMVMyZFJrVDZlR1NQYXByelg3OTNJd2cxR1JwUVVuUHdLUFZYTWYzQXBnOGNNd2ZsZkJGeDcxaXhrVldNQmN5Y1BiZk5aM2JZbkdEVGxPYVpQL2hseWl1YzcyNGZhN1M4emQ3UEM0L2RPK0phT3E4cUtCWDlrVk1GNE1yN2xrTFdxcWg5OS92bm5xL0x5enY1TXg5SmlPN04zeE5JVVNaSUNRcWlxRUFqWmFGSU5CZ09SRXFsSW5scmRvYTh3ZGMwaU1URXhxcUE5VWlhbFZSUWtKQ1IwZmwrbzNzemtXUyt3WmN1SWtJY1FtODNHM2cxUHNiYkN3b2lCZWFjeHNNa21iaGs3bW9KTUxScXlhdDBiek4zNE1XOU5LTWJxVE9mVjM5NUV1dFdFNm5NemFjRnp2RlNleDlROE94ZGVjQkUzakU3RkxFUE52ZzhZdG5JcjEvUVpRMmYzNVlTRUJBb0xDOUZPaUl6QjBCN0lTVUZna3dtS1U2SkZUUDNCb0VLNElUTmhwTk1ZbXlwSlVpaW9vQUtCakl6TXpVODl0ZXlUY2VQR2piVmFyZFBhdlhzMjFWUHZVc25LU29zNmVDcmdkVFhRNEpiSlNvOWNGcXFpVUYzMkFhVytJU2lLZ2l3YmtlWHd4Q1Y3K0F6V2p6UzJ1VmpjamZYNHpFN3Nzb2M2dDB4R2lqMzhtV0x2eDg3dHk5dFVBQ2xLZENtT2JEUkd2cVA2cUttdXdaS2NUckxORXJzNWtGWHFxcXN3T3RKSnRuLzcyZU9xcWxCWDlRbTdhK3p0SEFlRm5kdmVvOS9ZVzdobjVuaGs0OGxOUzhYcm9ycTJrYlNNbUQ2bEtxaUttK3JhSnRLek04SzFxcXFxNHE2dFlNdHViM0FmdERsMHd1UHFkZEhnaGpTbm1acmFKdEl6MHNMZlVSU1ZSUnMvYlZPMHJ5cEtWQ1JULzM4Qm11cXFjY3YyTm4xZVEyb29CL2VYUC8yM2Y2elk4c0QvbStzbUVpRFFsMGZwemREMlRFOVZraVJWVlRYclJLZ2l1cG14Mll3c3k4UlpySmhraUUrdzRYQTR0TVZ1dzJLT0l5MDlnOXpjczRJVkJXWnREdFUya3A2UlJrTk5OYmEwTEt5NlUvWHN3Z2NZTXZsL0l0RjcyY0hJQ1JPeE5MN0wzcW9PN3RGTjlkUzVGTEt5MHFPdUo4WHJwcWEySGtkS09vN1krUm84U28yMTFmZ3N6cWdlcktyUFEzVnR3NmxFUmVNb3lJeHc3aXhuRXQ1RGZnQ2NYU013SlpzVHlMQWJhZkZwRjF0ZWo0aUNab3JUanF6NGFUMlJwazNRTEkyQW15RUc1Q0tzTGNMZ3BCREFTWklraWRERkhnUTRnUzVpMmc1N1UyNitlVXJnNXB1blBGbGUvdGtIT1RrNUV3d0d3eVdoZy9uMGZUOW56dXBLOHROa0t0enByRjczRXZuSlpsWS9jaU96Vmg3QWJqUWdlNm94RjkzQ3VtVXpNVmR2WWZpVS82Vm0zMjZhYkhkVHNjcEo5dUFiV1RwckV1Qmw5cVJSYk56N0dlN0NXeWxkSG14Vjd0NURidGJQS0NqSlkvdmVSZ2IwUzJQZjdyM01XLzB4WTRvY3JIeDRCbyt2MmNHMktpZlZOVzhUSnZjMVd4ZysvdjZnNHFhUDBwMjdXYlQ5S0pQNjJhZ3YyOENZOGIvQ25KRlBVMFVaUTJZK3hpUFROTmFrbEw2SVkveHpUTWs5eHRZYWdhZFJZY1d1SGZUN05xUDQzbkltamZvVlpkV2xWTG0zTVh6M0MxaHlMMmZ0a252QVZjcjRzYitodkx5VUduVVh3N2MvUTlIb08zaGt4c2dUc3I4eE0vNUdmbUVPZTB0cmVlVEZOeGszSUl1bTdVdkptZkFZUlNsV0xGYUZmZTUwTm14OGhWNzJKdTRaZnoxYjkxVlFWYWN5ZlBoNzREeUhsMTkrQkNkMGVGd25EK2hPVmZJQXFuZnZKRy9BaGJncVA2Sm8ydDlaZk5zUXlqY3M1YmFIbjJmdjl1MHMyZFBDMkhEMWs0dTd4djJNWGZVYXRGWHYyODNRV2ErdzdNNFJxSzVLcG8yOWp0MGVKdzVmUFJUOG5MWEw3ZzFXVE5SeGNXci8vNXd4ck9qTkY1YXZxK3FBcGVuTlVGOFEwSHg2bGhhNmFVdGF1RTNFbVF5aVZWRUo5ZjAwRytHcjJvT29CaFB5VjRlUVZMQW1KdEcxcTVORG4veUgxeXM5WkdlazhQd3p5N25sMFpjNTd6d0x5Kys5aHZtYm1yRzdQOFdZY1I0MjVTdnFrNjlrOTh0emdwZEhQUysrWE1ic2UwODJGdWZsaWFjeHZEZ0FBQ0FBU1VSQlZIdHY0cEYxVmVTbW1LbDBKYk5xL1N2a09ZMXNmZm8rSmovOE5nVzU2VlNYbFRMd3RyK3crTTdnZkdqYVJYYmVyWXdkbmNxR1hVZFFYSTNNVy9NUithV1BNUHpoTFJRNUJFMU50ZWc2UnAzQzRqdk9yUXYvd1pKUERyZjVySFovS1JmT2Y0VUQzdGpmQlhoNjVVb212L254MTlxV3FnYjQrT085dlBiYWF5eGE5QmZ1dSsvMy9QS1h2K1M2NjhZeWJOZ3dMcnBvSUVWRlJlVGw5U1k3TzV2dTNidVRuSndzSlNVbFNRa0pWaWt1TGs0Mm1Vd0dnOEZnbEdYWkpNdHluQ1JKVmttU0VpVko2aUpKVWdxUUFlUUFad05GdlhyMUd0RFllT1QvQ2FIV05IKzZTblR0ZnFIWTM2d0lJVlR4dDE5ZEtuNTIvN05DQ0ZXODlxY2JSTGNMSm92akFWVUlmNE80K3V5dTRxa2REVUlJVlFpaGlpZC9lNFc0NWJFdDRkZjY1ZE5YWm9zK044eVB2SGQ4dHppcng2WGlzRkRFemVjbGlYKzgzeWhlZStBRzhhdkhOa1crYzNpTDZOSGpNbkc0bmZVSm9ZcDNIdnUxT1BmcWU3VDlFVzV4OC9rOXhFTnZsZ29oVkJFNFZpck95enhiZkhCTSs2Ny80eFhDWU9naW5ucTNXdnU5M3lOYS9PMnZWd2hWdlAvOGJKR2FtaHF6ZEJkUC9ydTJ3OStFbHJmLytndHgxZStXdGZ2WkczKzZTVno3eHhVblhJY1FxaENCT25GcGp5N2krUS9xaFJDcStPU1YyYUxiaFZORnExREYwZmVlRUliNHM4U093MTRoaENyKy9NdUx4RTBQclEzLzl2UFg1b3MrMTg5dWY3M3RITmViTGtnVnIzenFFOC84N2lweDQ1OVdpeVB2TGhWOXJwdXIrNTFQWE44blFienllZnY3K3RXSEswWHYzaVhpNCtEK1BIWDNWZUxLM3k0VEFhRUtJVHppanN2T0VuOTVwMXFvYXFDbXJ1NmpCVEw4SEJnTGpBYXVBaTRIQmdFWEFFWEJ1WmtEWkVpU2xCS2N1NG1TSkZsbFdZNlRaZGxrTUJpTUpwUEpZSlFsR2NrZ0pka1RKQWtrWjJwM3NyT3pTWFBFWWJLbmN0RkZBN2w4OFBtWUpDaTVlaEwzM2ZkN0hucm9JVjU3N1RVKy9uZ3ZycktWZE90OUxjMUM1Ym5mWGMydkg5dk1sMjg4VE9aVmR5SUM1Wng3NWlVY0NsNmZnZjNyNk5MOU1nNjNjKzIrL2RkYnVPcTN5NkxlKytMTmg4bTg4QWFPK3JYWHIvKy82L25aL1NzUVF1WDRzU1lDb2ZVZTNVN1BydWZ5UmZCNzR1aE96akNaK01NTHU0THI4dExTcXZEcEszT0pQL01LRHJXcUNPSDZCbmxzcXArL3Zmb1dTcThMdUNVLzJxQnNidnlLVzEvK2dQdHZ1SWFNR0lmcWV6di93L01OZGw2WTh2WDBtaVJKb3FDZ0FLUFJpTkZvd0dBd2hobWNMT3NmbzN4eFliK2JKQ2toOWlaVVZRMHJodWpZVzZpL1FpREUzaW9xS2hTbnMrdXF0OTVhOTM3WFE5dEhPd2RjZWxOMlVDbDI2SkRMbVAvRWJtQWlBTVdEQm1HVEFkbko0SUU1N05wZHl1VGlRYWQwYUdXYkhSc3lkb2NkdTgyT3pXYkQ3VGs1bWU3cXJjOHlmVWs1NjdhOG9lMlBxNHpOZXp6SW01N2ozaTBhOC9RcDFaUld1T25YVDZQdzVweEJqQjhZbE9Bd1d1ak1FTzAvWVE1MUUrYjhzTTY2MnIzczllUXpPRmk5bmo5a0tNYkp2NlphaFdUQW5qK1Evc21hQVRwazBNVXNXN3NMR0hHS0c3TmlzeG5CYnNOaGMyS3plL0NlNUxud05aUXlidno5ekgveFh4UUU5MmZUeGkzNGNyTzU3OTdQQUNoM3F4eDVmL3VLRlYrMWJwazQ4Y2FqSjJCcG9ScFBueVJKb1RTT2dDN3FLZlQ1YVQ3Rkw0eHg4WmpqNGpFYlBLTFZEOWF1OGJnUCtlbmFvenQyZXhKMmV5S1o5dDBrZFUyaFI0OE1Fa1FqTHk1ZFRIV0RCMVZ4MDlSb0o5U0J3VzZ6WTNYWWNkbzhJTnV3NGlia0RmVTJOZUN4T3poWm9yOTE4Nyt4SXZQZ3JOOXJITGV5bmxMdkhtQThhbE1GOTk3MUozYVdWZUZWZmRTN0cyaHdRMDVvNVpaOEpvM3RGM3hoeGhMME5XVDN2NEFVTTREdFZJRXR3SXR2dk1WLzVETjU2c3I4S0d1eTFkM0FyYzl1NU5xcnIrS3FyT2hNMDQvM3ZzOGZ0cnY0eDlRUmREMUZaWk84dkR4Q3prK2owWWpCRUFLNmlKbXErZUhDdmpnUmZKU0NFVkdkYnpZSzRGUWR3SVhBTFFBb1YxNDVZait3SlBPeVg3NnJLTXExUnFQeGlwTnhLbi96SVVkczlaTlluYWQyTitPbi9KbkZxLzlGTDRjeHZCK3FPWmxoWTY0bUs3aXEwYU92SlNjM1V1OG9XMjJjckZkdDcrb0ZUSnJ6WEp2MzczMzhuNHdma01LUGI4amhoOGpaT0FsWklhV0oyOGZmUU1uc3B4aFRsQmExdmdGRHIyWmtnUTFGVWQ0KzY2eGVHNlpPSFhkZ2VRVFFPZ0kxdlk5TjBabWVZWDl4cUUrSUxCdUUwU0R3ZWtIMXVrVkRhek1JZ2IvRlMwS0NqVGl6ak1scW8wdVhMamlkRHF4R2lhNnBQZWg1WmxmbS9mSVBYTDlzTTlPSEZXQ3MzMHhhd1I5aS9tMzdjOUppdDJQMnVIQkIyOENMM043Vm9aSlZkREdqUjRkdS9sY3oxWkVCS053MzZXb3NrNTVud3hPRE1GTk5jZkpGMGRQZmFzUFNEbkxKc3ZFYkJBOFF2UG4yMjd4MFBKbG5mMzRlOGJxZFZqeE4zUEhVZWdZT0djYU52YVAvM3VmbEgvR2JUUWRaOG91Um5HSDlaaXI0UFh2MnhHdzJCd0hPaU1rVURYRHRNTGNnd0VsU1JIbzhVcUVRWW0yNndFSkF4OTdDaytqQU8wOStZREk5V1ZwVGMrQ2R0OS9aZUYyLy9sUENTcjA3dDJ6QnJVN0dwamF5ZVZzbG82WkdaS1J0Vmh1TkRmWGY3ZlhucTJmNnVCc1krZUFMRE12WEhYdDdBVVB5UFZTN25Jd2Jya251dUJzYU1OcE83UnprRFp2SzJ2N2oyc3hjWjhxSlEvbFdheUlORFYrM281T1BoVE9uWXgweWcya2pnbmZwOUFJS3JXVnMzdDNBaEg3SmxHM2FpRko0UGxreWVBQlgyVloyTmZnb1RqYXphY3QvNk4vdjk1RjlzTnR3MWRlZzhGMlczYWdzdmVkR2FncC96WklKQTZJK0dUSjBJSzkrWHJOcjB1Q1NOM3VmbGZ0cDZPWVpBMmp0Z0pya2x5UU4rSVFRQVFFQk9aeHdpeG9JcUFMSmdObG9Fa2FqRWVGckJ0a2t6c2hNMXdRaVpTOGZmL1lWUmxzaTZhbGQrZHp0b1Z1M2JqaXRYZzQyQlJpZWNTYjV1UWtjY1hkbDBNQUNqTUQyZGV1b1A4bjdzNXpkajBMZlBzb2FvU1FHMmRLYzNhbmNXQlVsRXo5bzhDWE1tZjhaZWYzdlFic0hLNXBzUGg2cXF6MU1MU25HTEVQVnBqWHNQWVdtWFYvLzNMWWM0b0ZOWCtDeXhERmt2cVlRYXU2V3c3dlRMMlhIaHgreXNlNDRIN3krbG4rOEhtUUhsdy9qL2dHWi9QMnQ5Nmh0bExsaDRUUEJGY1d6Yk9ZRStwNWkvOVRNekV3ZHVKblFrZzJOWVZNMW1zV0ZnVTRJSWFSZ1BhbVFwRUFvVnk0Y1dOQ3h0eERBUmJFM3dKK1JrZmt2MlJqLzNyOC9lWDZZRU9JNklDK0ZTb1lOdWd5anB3Wnp5ZStaTUNCeWRvZU52NFZGNDM1RjBlb0h5QnQyQ3kvT24wcmQ5aGNaTy9OdmVCcXFxR3FRS1NsNWs0S1JkL0Q0akU3MHQ3ejdHRGZzbDlSNlhkVFhWek95NUdMTUdSZXo4Y1g1MUc5NmtlVzc2aWljZXpNdno5Vk83YndWLzJaa3ZwVUhuLzRINDhiL2pEVUw4ckQ0NnFsMjkyRGpycFZrbk1KeE4xdnRaRmhQTGEraC84aEpPQjYvZ1lLaUYzQVdYY09XcDJlZEZMQnRYUGtjanJSUkVXQ1QwMWl3K0ErTUhYTWhLd3B5S0MyclpmR0tOekdqQVpzOXpjNjlJeS9GYWxVcGQyZXc3cEdJUW0zNmdORU01Um9LQzgvRGxuNEI2OWN2d2RuSmNlMXN6SjkyQmV2SzNPeXI5TEIzM0VVc3REcFlzT3BOaXUxN2VYRFJlc2lyb1YvUjM3VHJZT1pmK2VNTkYzMDI5QmV6MXZ5cTc2QVBlejhjVUhSUlRMMGloeStXb1VuZ0Y1b2FoeEtjaDJvRTFDUWh5d2hGRVVKSU1tYXpkajBjYjNZSmMwSnl1QXVjMWVyRVlUeUFxeldPNHVLTGFGajNUMTUrelVXODBZU3phendaUGZQSTdObUxtVk55R1RYZ1Fvb3lyTWpwbWFTZDdQMVB6bURjNkN6V2I5aER5ZmpvYkttQ1VWTVl1T3dhY3ZKZW9YREVyYXhaTUlPY0ViY3phOHZOOUM4OG40SmU2VlJWN21QRVBVOHlmOUlnYnJ0ekFsT0hYOEN5Z2pTODF1NzBPb1djcHRPeTh1RHJqS05IajFKZVhrNVYxWmZVMXRaU1gxOVBZK01SbXBxT0JXV1BRbFVLTFhpOXJYZzhIbncrSDBLb2t0YWhYaUVRQ0VqQi9ndWhhZ1VwV0xFZ0I4SGZDQmlEVlFzbXRNb0ZNeEIzMzMyL1R6emJVbkg1NnNBMTF5Mi9hMmhPZzFjbUkrVjB6QzVUcWF1cEJvdVR0T1FmaDBhSTRuVlRVOWRBU2tZVzFtQytSZFAycGVUTi9JRGFUWCtpcHM1RmVrd2F3UTh4aEJEN0R4OCt2R2JPbkRtN0hudnM4VmFkS2VscngvUU1QZnFERVU5RnQ2aDZYMXF3aW9CZzBtM1FlakdIR2hsanNVUzZzMnVxdDRrNEhFazRuVjFKU2VsS3ZObkMyZWVjUjJHZjNsRWxVazMxTmJpeHRVbEZPZEZ3bGEyaFpNWUdkbTVhZk5LdURhKzdpYnBHRjJscEdWaDBLVHZ1eG5vYVBESlpHY21uMU9YTStOOCt1YnQwNlVKaFlTRnhjWEhFeFpuRGR5dzlnOU16TnlIVVVJY3JJY3QrU1pabEZFVVJnVUFVZXdzVjE4c3g1bWtBVUlMbXFSL3d6NS8vZ0E5NHJmY2c4WTczenVGRGUzUkx1aGJvZWZvZEtabTBqT3dmbGZmTGFMR1JuZDIrWW9Cc3RwR1ZaZnVoQWEzeThPSERieno4OE1NZi9QblBDN3c2Z1BKM0FHaXhnUUZGSHh3SUFwc0lsVVVGNWJ2UlFFM0xUd3RXRTBTQm1zMm1xZDRtSllYNkUyZ2Qyck96cytuZHV6Zng4ZEZta3lNbGcxUEo5ckhuajJMaGpFWnFYU281SjZucmJyRTV5TGExM1pyTm1ZTHRHL0NELzNyR3BwdEVmUGJaWjFSVzd1Zmd3Um9PSFRwRVEwT2t2dFR0ZHVQeGVIQzVqdEhTNGtVSWdjL253K2Z6NGZmN0pVVnBsNzFKUWdnNUNIQ2htbE5Ea0wyWmd1ek5yRi91dm50bTR1OSs5N3RMblU3bjFaSWs5ZUduOGYyeXVLWWF0dXh6TVdSQS9nL0hqVlcxckw2K2Z2M3MyWC84OE1rbm4yenRCTkJpRjM4UTFOb0RORDJvaFZsYUVOUkVNRWNOdmVSUUJOVDAxUVNwOU9pUlFVN09tZlR1M2ZzSGI3cnlYWTBmRGJDRlJsVlZGWldWbGRUVTFGQlhWMGREZzZiRzYzSWQ0L2h4TjBlUEhzWGo4U0NFQ0JiUXQrTHorZkg3L1NGbDNpQnpDMGlxS3FSZzVEUmtvb1pDUWdhZGVkb3V3T1hrNUppM2J2M1B4YW1wcVZmSnNuemhUNUR6NHgrQlFHRDdnUU0xNzF4OGNVbHBUYzFCSlNZdzBCbW82UUV0N0VjTFZROEFRaC94Yk12U1RKak5jZWdWYjYxV2ZkMW5wSkZ4UmtZR09UazVaR2RuLzZqUGhmSEg5b2V5czdPSmo0L0hZb2tuTGk0T3N6a3VIR1F3R2swRUFnRmtXVVlJb1ROVFd6RVlES0U3WVlpOWlVQWdnQ1JKb2J5M2tFa3F4d1lYWXN4VEgyQ3VyS3cwcDZmM2VBZllVbDcrV1ZGMmR2WlFrOGswNnFmTC84YzNXbHRiMSs3YnQrL2RvcUp6OSt2QVRNL1NmTzJBbXI4RFFBdm9VampDWm1jc1N6TWFqVUdXcG9HYXhXTFJ5WGduWUxNbGtwU1VoTk9wbHgzS29tZlBIRkpUVTMvMDU4VDRZL3hUcWFtcFdLM1dJTUJac0ZnaUFCY0lLQmdNQmxSVkRVZFF2VjVqQ056dytYeENsdVgyZkc4aWFKckdSazhEQkp0aW9JWGlUWHFBQTh5NXViMTNBbnZlZVdmalM4WEZGd3l5MlJLdWdsTUtTdjQwVGgvWFI4M3g0OGYvK2E5L2JkNDlldlRvaGc0QXJUMVE4M2ZHMERveU8wTXNyWDNUVSs5UDA0SUVTVWtPbkU0bktTbmQ2TjY5TzFsWlo5Q3JWMDhTRXhQL1Q1eWZVelpGbTF3dWp2bGxlblN4UlJjQUJ4UnFqeDdIRUo5QWFrSjByOHFXRmcvMWJoL0pqaVFTVE5MM01ma29MeS9ueXkrMWlPbWhRL1VjT0ZETjBhTk5xR29BdDF1TG1MYTBSSnJGdExhMjR2Zjc4UG0waGpFNjN4dWg1akZxUUtBS0lRZmJtWVpNMUk1OGNIcFQxUVNZSjB5WVlQblRueDYrSUNVbFpZalJhT3hReFhmUDV0Vlk4b2FSbDNieXpVTnF5NkJDZ1VHRlA2NkpXckZyTTJwR01ibmhZNkdpS0ZGbDVoaURFL0ZFSmNpcXF1cUszNk0rb2I2bUdwL1owU1lpMk5SUVE2TWIwdExUL25Yb1lNMjd2L25OYno1OS9mWFgvU2NKYVA1MkFDM1FBVU5UUS9YT3dRQUIwU3d0MHJ5NHJUOHRvcVBtZEdwQmd2VDBkTTQ0NHd4eWMzTy9VMzlhOWQ2dHVKMkY1R2VjSGhIMzcwMjJhUG5xVlR5MnI1blVSRE8xamMxTXZ2cEtwaGQrdDIwSEpFbWlkKy9lSkNRa0JQTjU0dkg3L1JnTVJsUTFFSlhrRzVrOEJscGJqUmdNUHZ4K3Y5QytMMHVLRWtCUkZLSDRBdmhWRlVrU0t0cE5OYXdXRXN4M013UW5hNGpCR1lPQTVnc0IyNG9WSzFwWHJGanhMMkRyeG8xdlAzWCsrZWRma0ppWU9GU1NwQ2hkbC9WUFAwVHlsQUZmQzlqMmJZTVZqVDh1WUZOZDVVeVordjlZc2YzdDhIc3I1OTNBeEFmWGsreXdoYWZ5STJzK1lueS9Sb3B0NXpKdjMxR0d0OGVKUFdVVXBCVmdIL2N3MjVmT2pBQlh4VmJHamJ1SldtTUdkcVVldWZCbXRqNTlEM2pydVdQQzFaK3Qvc1MzT2NuUS9OSEhuNVlmMFlGU2U0RG03d0RRbEJNQW1tZy9PR0RBYURUcHBZYUlpek1URjJkcHg1K21LZDUyN1pwTWFtb3FHUms5MlAzNll0elhMYUwzZHh3a3NDazFqSm0rbG0xckg4UjhHc3laVTJCc3JaUWVhSW1TTFhxeUtaVzNKaFRUZU9RSTNuaDdsR3pSNE5FM01EWFBUa3Vyai9nNDdTOGYyYitYaTUvL2d2L011b2J2UzA2d3FhbUp5c3I5bEphV1VsdGJTeUFRNE9qUlJvNGQwNElLc2ZsdVFXWGVVTlFVUlZIdysvMVM4L0VBZmpWQW5Ea1NQZFVGR0NRaGtLRk5rTUVRWkhER0dCWVh0WHo4OGQ2OG5qMTdYaGdmSHo5RVZaUjBWY2RDVGdvQVZHMlJqVEdNSlVoaDNJM1E1SU9NdEs4SkxGNm9xb1dNYkFpbEdubWFvSzRSMHJLSWtxNEoxYjVVVjBGeUJsaDFzMXp4UW5VZFpHVzN2YU9xd2M5UzBxTi9BN0J4MFRTV05BNWgxWnp4T21EN09RdHJMbUhyNDlOajFsUkYvMDZBclhMdGc0eGRzZ3QzMldFMlYveWJkQ09BbTBuOWUyS2Y5aEtMcHcwR29MUzByUGJNTTgvWS9OSkQwejc4eGYrK1VCM3lxWjRFb09rWEpjalFBdTJabkFTRlQ0TTF6VEZtcHdHRHdSUnNXbXlpSTlNeklTR0JSSnNWQ1lrdUtlbjB6TTRJQmdreXljN0s0cEZwQTNGTWZwTzdSbVJIeTFnQjdvWmFHcnhtc2pPUzI4eVZ4cnBxRkdzeUtmYm9tNnFucVo2NkppOXA2Um5SVWxING1ENm9ENE1YdnMvNGZqOThnNWZ2VGJZb0JHcWhZMmMweUh5ZmdXYUh3OEU1NXhUUzJ1ckZaREtoS0g3aTR5M0V4Vm1DUVFiTkVkdmNiTUpvYk1Ga011TDFhaXpPNS9QaGIvVnpwTUVnVkZXUkJBcXRyWXFRNUFCbWs0cUVKSHgrRGR4Q1FRWlpEZ2NaQWtKZ0FDbFl4U05DekswTnlQWHRXN2dIK0FSNCtvSUxMdWg3NExNUHo3LzdoWXJCZHc3UFNEK1ovemh0T095cWdPd0pzSHBlNVAxN3g4QWVHVlEzVkpmQzBGbXcrTFlUcisvcG1iQ3FDZXAzQWxZd0ZzRFdwZkR3ZEZpK0IzSlNvTFFNNWp3TkUwdkF2UWN5eHNISVhHaHd3WjQ2MkxJTGN1MVF0eHNHajRhTVF1MmY3OXNNVzVzZ0c5aitNa3krRjNvVlFQayttTDhDeHZZUHd5RXJWcnpPNkVVUGZ5dnpZTTNxTnhnNjRWRzhTNjlsN2ZZR3BwVWs0OTIzbnRVVldleVpmRW10eCtQWlVsSHh4VWZubkhQT2ZqMjc2Z0RRMmdPMjBIdWhvRklnREdpeXJFcENxR3FvSXpnSUpFa1lUU1lNc2lTOExTM0k1Z1M2V09QQTN5d2FqcnJJek03R2F0RkF6V0tKSXk0dTFKSGRTa0tDalhqSnplc3Z2NEUxN1F6aTFHWlNpc2Z4NUp6QjJCcDJNMjc4UFpUdnFjRlllUk1iRmxrWk1QNXU1azBkQmtvanN5ZGZ5OHY3VkxLc0hocHR4YXhkOVRmU0xEQnpSQ2JiUEgweG1nM1VWKzVsOU96bmVIQ3lWcy81NHR3Ym1QVnlKWVc5a3FuWVY4OFRXM2N3SUl5SlprYU51b2dsTDY5bGZMK0pVY2ZjVmJhZUNmYzh5N3psS3loeW5MYkFwaHYrWnBidCtJSnhsN2NOOW4xVjlTbGJqamw1V1ZjenV2MkQ5MW4wL240cWo3UXliOExQdm5mMVY0UEJRTStlUFltTHMrRHp0V0sxSmdTN1hNY0NuSm1XRmkySzJ0cmFxb0diMGNjWjJVYU8xdm1GSytDblM2SVdQUTBFQXFMRkZ3Qkp4V3hTaGFxcWtxSWdDUkNTRkk2aUJnQ0RKS0dBWkFoT2ZHUFFURFcyQTNUR0hUdDI3QUwyL09iS3JLY3UyL3RSNzV5Y25DS3IxWHBoWjdseFN6ZkEyb1d3dEoxeVRGc0JySndMVGRzaGV4b3N2TzNrVHY3MlBiQjNPNlJad1J2c0NqajlZYmduNkVxcFdnK0Q1OExFRGNFN2VoM2NzeE1LSFhEUGNGaTVFZTRiQXcvZkMyTWZoSGtUb0dvRDlOb1l2TWsxd01UYjRkbmRNREFkNnJaQzhWMHdla3R3LzN3VjdDeTFjM3RCMnl1aWRNMWZHRnJ4cWphUjB5NWc5Zko1bldlOHEzV3NYbGZGN0huOThkUmV5dU5yMXpGMTRNU3k4Zy8zN2ZCMGNaVDFqRFBvbVptcVkxbWRBWnFpWTJlS0hzd2tDVFhZbEZob2lndVNrR1JKR01PUlRvbFdiNnRRaFlGNHM0bjRPQk9OVGNkRmdIaU9IV3NoTGFzblNiYjRzRDh0MGozS2lzMm1xZDBlK2JTVWhMNGplZml1Y2ZUb2tVNTZlanBaV1ZtUW04dkdqZU9aTmZac0hKT2ZaK2JJN1BCaDJQejRiTlo0TDJMdnJubVlVVms0N1JJZVhyNk5CVk1IYWlSZ3dEaldQVHdaVC9WR2V2Vy9tMm5qZDVCanFXUEo0czBzMjN1UVFXbUE0c01YWTB3VUZoYXg2OEdkaEJSdndyY21WeDI3ZG4yRTIvZmZFQlU5QmRtaXZubG44ei9wWjdCMTl3Y3NlbWNQbDAwZFRNSVBRRk5UVWxKd09ydVFtSmlJelpZUUZVSFZKdEZ4M0c0elpyT0hsaGFONFlWTTAyYXpEOGx2eEdMeGkyQmdRZks0RlF5bWdEQWF0UjROQVVVVklDUlpEa2RSSlEza2hCeThVT1RnaFdBSW1xbmhzcTEyZ001WVdIak9SMEVtOTlKYmI2M3JmdDU1NStVN0hJNGlrOGwwSVhCU25UVUdCdlgvSEZsZ2FRUTNuRlIyK2JBeEdxZ0JZWG1ZdXIwd1l5R1UxMmdtWkwxdWd0dHlOVkFEeU1xQ1VPL25YYnRoOXRQYTgreUJrQkdjZVZYYm9OWUlxeGZCR2tEMWdhc1Vhb0VzQUZjRGpVWUhqbmJjakRtRHJtUHhuS0RFdDlGMlF0OU80L2ExbEtaZGR1ejhyb0VkOVVYRmU5K1o5TmN2REE5TlBoTHlrWGJDenRvRE5iM0NSclR2REZTQnBHcVBRb1I3YnNpeU1NZ0k3WWFvQ0pDMDNwRUdJeGFMUlJpTlJ0S05jUEJ3QS9iVWJMcDN0ZXNDQkJxbzJXelJxUnpaQ2VmeitxS1ZQTHN5Z1dIRFJwQmJkR0toeHkxYi9vWFowNS9aOS80KzZEYndVR2ZaQzJqQU5tU1FabzVic3daU2JDOWxkNVZDVGw0eVF3WWxjOXU0YXhnMzhqSUdEeC9Gb01Lc3FQWGFuUTVjOVVmYWJNODVZREoxZFpOUGQxTVVUbFcyS0NIQnhsa0pOczY2c29RMzVxNWcyNUZMdUx6ckQ1UDViTFZhNmRPbkQzYTduY1RFUkJJU2JGaXRWcXpXZUpxYU5BYm5kc2RoTmpkak5wdndlazE0dmEwY054c3g0Q2MrUHV4N0U3TGtCMk5BTXBzMUJ1ZHIxUmljTEdzcElvR0FRSktGaEFnSDdLVGdYVjNXbUp6azEvbmlEREVncHdjNlkxQkM2UUN3OFp4ekNrM0xsajJWazVOelptK2J6VlpvTkJyN1EvdDlsY09LTGwrejhNNFNHK1J5dzlpeE1HOGRqT3dIbnQyUU5xV2Q3Y1JzU3phQ1Q0bjRJdlNlWFhzR2pCa2RlVDFtUElRRmtPd083SW9MbHhkaTZaalZrVTVlM2dsMTlOMktvbnpnY3JsS0Z6NytWT1dSRDdmWDJNM0wxUmhtRm9qeGczVUVhSG93MC85RzFmdlBnbzBpVlVsQ0lCQ3lMS01HQWtLV0RhaEtxeERJSk5vVE1adU1IR3RzRUFhVEJsNG1rd21QNXdpeUxPSHpLOWdTYmNUSHRNUUw5ZmwwT3AxMDY1WkNldnFGYkx2bUpqNzc5Rk5XUGZzZ2YzM3RBOHJXek84OEtnd1VEcmljMGNPQ2dndWpyOGFla24xQ3FKano4dnVNM3I2RkxaczJNSEhJK1R5NDdtTW1GRWVrcXR4Tkxtek8wNk9EMWZja1c2VHkxYkVXdWlkcC9LeXh2bzREaXBrdWxoKytuQ016TXhPSHd4RUVPRnNZNE9MamoyS3hhT0NtQlJaYU1KbGFPQlpud29DUGhBUmpxR0tCaERnakxzVXZMSFlEaWk4Z3VZV0N5UndRSmxrbEVBamc5NnRJa2lEWVR5YlU2Rmx2cHNyQkM4UWdTVkk0NktBRHVmYkF6dmpSUjN1TjU1MTNYaW13RDFoN3hobG5HRzRiOVh4V3ErR3NISjh2cWJmSlpDcVFKS25YdDNyQUdxSGFDQ1ZGMms2dlczMVM2bVFNR2dqcjE4Q0lHYkIzUGRRb0VmWm1xd1k1RzRxRFFZMkdCaDJHbVhNcHptMmt0TnhEWWVHSm84TkNpQXBWaUUrT0hxNnIyRnl4NzhzYmI1eDBxS2FtUm8xaFplMnhzNDVZV3Zpem9OS0xFck1PVlFpaFQ5VVFXZ3RjU2NneUJGU0V3V0JBOGZ1RndXUkNWVm94bU9LeHhzY0pneFJBVVNFK1RtdDdKN3hOZkhWTTBLKzRtT3E5SDFEanl1YjhOSWN1NFZZZjlkVHFQYnQyNlVKcWp4NmNmZTZGRE8vbklHM2tjM2cxbDZqR29DMFc2aHNhMEx5WjJoZzg2Rkx1MlZwSnY5a1ROWmFyZW1ob2l0eHFObTNaeE15UlUvQlViMk9ucTRBRjJVYkFoOHV0VWpSd0tFVURoOUpVK2svS3ltdEJCMnhsWmFVVTlXL0xHTjNsbTVneGZ4WDNMRnBNdnYxMEJiWlRraTFLNVMvUHZjUzdMUmE2eGN0OGVhU1pjU012bzMvQ2FRSHVKQ1ltVWxCUVFGSlNrZzdnRXJCYUcybHFpc2RpY1JFWDEweGNuSm5HT0RNbTRjVm1NOUhhcWtWTjB6Sjl1Q3RNMUIvMkkxUkZ5R1lGZTRJaUJaTjdoZGNiUURhcVFoYXFGRXIwMVFVYVFpQVhabkhCdkRnLzBibHhoaGlBYS9QOHl5Ky9OUHp1cnlXZkFSVnhDM2tITUR6eXlKOXNoNW91VDA5MDljaHFiYldkYVJLbVhpRDNSbE1vK2ZvakMyNGZDQ1VESU1jR3lWa25ONG51ZWhoR2o0SDhwWkRiSDdLQ2RxT2NEQ3NXd2FTQld2REFWUXZtL3JEeDhZaFRldXk0SzFpNWZpTVRDa2RGaCtlRitNenI5WDV4L1BqeEw2dXJxdy8rODU4YkR0MS8vLzB0Z0RxaFg3bzRBWmgxQkdxeHo4Tkw4UHhFSmRJRzJ3TUppS1JySUVsQ1FzSm9rSVJmMGRLS2ZLMWVUT1k0TENaVkhHbHljN2pCQzBMQ2FKQXd4OFZqTmNQZWZYWGs5UnRJYWxjN0dZTXY0dTJOTy9Iazl5YTdXM0pRbGNOSnQyN2R3cVZSbVptWmJIcmlMaTVlK0I4SzhyS28zTHVIMis3N0IzcjRIenZ0TjR5ZGRnTWJGOXNaUFBsL1dEQmpCSU9ueldYRXp1c29LTHFJL0N3SEZlV1Z6Rmo4SnRPSGFtUy9hZnZMREJyNkdrMlZwVXg2K0JseUxBQjFqQysrRkhkR1BuWWFxSFRuc21aa1lSUjVXYnZtMzR5ZE82L051ZmZXbC9QTU15OHg4Y0h2RDlpKzExclJaazh6Ujd3S1hSTVRTVERKUHdpSTFkZlg0L1A1eWNqbzBmNCtOamRUWFYwZFR1ZzljaVJVYStvS3l5QzF0R2krdDlaV2J4RGN0SHBUajl1SEloU0VxcVdIaElycVE5VUx3UnBVZ2pXb29VSjdRa0NuZTVTRGdDZnJscENNa2lHbUNmU0puaHRpZncvSXExYTltcHlYbDljdE9ibGJxczJXa0c0eW1ib2JESVlNU1pJeTJ4cDliVWRERFNoV1NQdWFFU0JGQVdvaGF5aVVsMGZzWmxXQm1ocXdKNE1qWWt4N2hSQUhXZy92T2podytCKy9XckgyNmErVXh2ckRaV1ZsUjY2L2Z2eFJJaHA2NGZTSkRzQ3NJNGJXNGZOUThibnU5L29ValhDcVJ1Z3gyQjB0cU5Zc2laQmN2VzZKbEVNWlpBUVMxZ1FibHJoUW5hYzVHUEVNQlFnU3d1M3d1blJ4aEZsYUtEaWdiNFhuODdpb3JXL1VPanBaVHo2THpOTlVUNE5MSVMwOUhYUHc3alJ6ZUNiWk05OW5ZcUdDWW5HU0hKWHVvZEpRVzRzYk0xbnBLZEdwSS92V01uRDZPclp2WG9MMU5DQXJQN29pK0c4S2JLRlJWMWNYTEtRL1JFUERZUm9iRzRNYWJ4R2xFSStuL1lvRnY5OGZ6bjNUVnk0RUFvb1VDS2hoZ0FzRTFDQ3dxYWhxR05UUU1icU9RQzRNVURHcUk1MHRjc3h6T2VaNWFCdlNvNDh1c1BYdDI5ZWVscFptVDBwS3NsdXRWcnZaYkxZYmpVYTd3V0N3eTdKc2t5VEpKa2xTZ2lSSjhVRWdEQWtBR0hUZXRSQXcrR3EzNHB2NUxONXplNHVXYmErSjV2UUp3cjN3bDZvN0VBZ2NWeFRGMWRyYTZ2SjRQTWVibXBwY1gzMzExZkc5ZXo5MjMzMzMzUjRkZUlrWUlCT2RiKy8wNGdBQUM4eEpSRUZVZ0prZXlEcGlhbEZMSjBBV0JXWjZJQU9FTEV0QzY1SW1ZVERJT2tDVE1SaU1zWlVEUkJKdDIxWVFhTW0ybWlKSFlxSTl6TktTazdzRnU3RnJPV3JmNVFnQjI0eWhYMjg3KzdhdHBjRlJURW4rNlNFUC94T3dkWmJONHZkejRNQ0JzSUNsSm9OMGxHUEhYTzJLV0VhcmhmaUNBS2UwQTNBUkZxZDF1bGRENVZyRU1Mak9RSzVkc05PVmQ4bWRnSnFoSFdDTFhmVGI2V3lobmNmWTU5Rk8ycmJQOVkrZExiRkFGcnQweE5MYVBBOUp2N2NIWWljQ3M5RHptSjRhVWV5c0xhQ0ZRQzFTdU42UkdHUlNraDJIb3d2SnlWMXh5RzcrODJFbERtY1hESWJvL3ZUOWg0MW5RTzYzMjExOTM4N05XSHNOSk10cC9xKyt6bjhDdHBNWXg0NGQ0K0RCZzlUVjFYSDRjSWk5UlhUZW1wczlPdk0wVXJVUXFUbU5CcmhBSUJCbHBxcXFHZ1Z5UXFpU3FvcXdxVXE0NGJPUWhFQVBkRkk3SUJRRFVNS2dWVU8weTlJNkF6ZXBBNENUMndHMXpnQ3VNM0NMQlRUYUFiSE9HSnJhQVZ1TGVxMmwya2lkZ2xqUVo2YnJOeHYybTRYQUxHaHFTa2hTTkpqcFFFMkVGR1AwZ0dZMFJoaGFxSHFnYlY2YVRWZm5HZkdsOWVqUmc2U2tKSDRhMzNsVTlQL2VTRXBLSWlrcGlhNWR1MUpiK3hYMTlZZUNPbTlIZ3lWWng0TUY5YzNoZ25xdlYxK1NwV2R2SVJNMUVLVWVvZ2xjQmdnRVZGUlZGVUdRRTZxcVNxRitNMXEvQnFKWVhQQUNqbVYwT2dDU1pFbUtCVHdoQndHeU0wRHJETnkrRG5QN09zRDJkY3pPZGdFdUNFaWRBaGpSemJMRG9LcjNtWVZlQndFdGlwbHBRQ2FIMmo2S0VGT0wxSFlhd3dyT0VaWVdxUjZ3UktWd2hGaGFFbDI2ZENFNU9abVVsRlRTMDd2L241QVgrZ25ZZnVCUld2b0p1Ymxua1pxYXlvRUROZFRWZmNYaHc0YzVjdVJJbEpCbHlEelZLNGJvYTA0MTM1c0djb0ZBR09BSUJBSjZpU1JKeCtCRWhNbUowS09JTVZYUlIxY2piRnhJN1lOU0ZOaEZmYWNkYzFjNkFiQjF4TnBpVFZMUkNiaDFCbkJxZTY5MW9OUVpzNHY5VGRTMjlLOWpURTFrV2RZRkEvU0FaaUNrdWhFTGFBWkRoS0hwaTliYlU3YlZ6TTZJRUdUWHJsMkRMSzA3bVprL0tWcjlCR3cvd01qTXpDQTFOWVhhMnRxd1NtOWI4N1E1R0Z3SUFad3Z4di9XaHIyRkFneEJrRk03QkRrZHdCSE41cVJZb0l0NjNzNW5iWlpnSGwwbnpFeEwwdm91Zld4QjFuV3lUSzZqQmIxcEdmT2E5bGhaaUpucC9HZnRnRm5JN0RSMnd0TDBmalJ6VUJNd1hpY0NHVzEyaHRSdDA5UFRNWnZOUDExZ1B3eXdCZGl4ZHgvL3JQaUtZNHBNd1ZrOXVlSGNNekFEcmMxTnZMcnJNL2JXSGNOZ3NUR3l1SkFMdThja3dpdk5QUFh2anptejk5a016dmp2OVIyWXpXYXlzN05KVFUxdFk1N3FvNmZSL2pjOWcrczRlcW9vQ29xL2xaWldDWXRaaWdJNVhiQ2hQWkFqMGlZVktmWlJWVlVrV1E0SjJNUXlPenBoWXJyWFVralc2MlRCckNQR0Z2V2VDTm5aSjJaeWRBSmdrZDhMSVZSVllERElVVXhNNXk5RG42SVJDMmFod0lDK0NiZWVvWFVXN1l6NDBTeHQvR2loYUdlczJSbmJVS1c5VWJZYnNvcWczWmF3N2lvbVRIbVl4U3VXNE5SZDFiWGxlNUJUOGtsemZEdUE2U2xkeGVDNXU5ajU4dnh2dko0aGMzZXgvUlRXY3pMLzZSVDAySTZ6ZW5jdFJZWFpwSnBWbHIyOWtjK09YOGFEZzdMNXNyS0tqNXRsTHUyYmkvdklRWDc5OTVVc3ZtTWlBN3BFTnZQVzVxMHNlZTlMcnJMMStLOEd0dENJajQrblo4OGMwdEpTcWF1cm83NitQbWllNnYxdklZQnJhU09MMUZIMHRMbmhDSWNiQStSa3BlalRRNFRPRDZjSE9ZUlFoUlp3VUFrR0hzSkFGN3pPSlNFRWtpd2pSY0NPazJGZE1jQjNJakE3MlhLU05xYXBpUHc0Q3FSQzdLb2p0cWNIeFBEejRQOHpHQXpoOTJNQ0FFUWVZOEZNMWpYZDFnT2FJZGlZdTZOb1o3U3NVRWlGUXdPMGlCK3RhOWV1cEtTa2tKYVdGcFdQZHFJeGJRUXNySUQrN1JUTnJWc3lCOHVBOFZHZ0JyRGt2cC9qbVB4V1ZCSDhON3FocHhWdys2UnZudEtoZWwxVVZSOCtwZCtlekgvNitzQW1PM2hnOHVYaGwxMDhoN2wxejVjd0tKdmN2a1U4MERmMFNUYTdQL21VTGZzYkdkQkZPeEN1dXYwOFYydmp1ak90ZUg1azFEY2hJWUdlUFh2U3ZYdjNjUFQwU08xblBQL0NlL1F0S2NIZWNoelhvVW8yZlZKTG43NjVKTFMyQkFNTXNRek95NEV2dnFEcFdETkNFUnc1Y2dSVk1wR1M0b1JBZ0lEaTVmRGhZMWl0Um5ITTVVSkZ4cDdrUUJaK3llVnlvd1MwV0lJcHppSk1SZ2toQkFHL0QxOGdJQUJKbGcxSWhNQk9SVkZVTFNDaHFxQ3hscE1GclRZQXBrWFlwVENsQzZia0k3Y3ZjaWpDM3dtQnJQYjlZRjRZWVlBSzdtMlExV21BSklRcWhOQitMMGt5UnFNaEJIQUVGRDhDQ1VuV29wUWhVQXY0VzFFeG9yUzJFaEJndGRteHhwbkNRTlpPMmdadGZXbnRNelN0NzBBUTBJeng3UG5FU3U0Wk5uWnNTNlJiVGhJM1QzU1EzazN6b3gydFNPTnZ6MWh4eVRCK09nd3RCRHl3Y0JHTXZ4UFNMT0NyaDBlZWhSbDNRZVVtV0xrWnF0encrRnhJTThPSVNUQXdONFFTalN4KzRsL2N0V1ZwK09BMmxXOWp3Yk52c2JtMEhzdnlQOU8wM1VIZTRHdVpPRlJyWmx5NWN5MWJtNUpKcWQzQ2k1cytJWGZJejdsdjhuQXFkMjNnNlpmZm9ycXVrZlRjODVseCszVFM3UnBNckh2NlliWlZITWVhZFg3VWlhell2b2J0alhhOGV6YXd0ZUlJSTZmOGxyRWx1U2R4MWZoWXZXUWVhM1orU2IrUk4zSGIyQkprb0w1OE8wdWZYVVY1OVNHY0diMlpkdnVkNUtWWlQvaWZWRTg5eXhZdlptdnBBYjV4K3YrbjlRM2twcmVUUytNL1RzVVJsVDZwUVZhbStuaG83VTZtWDNrK2NUL09qbCtBVmx5Zms1UERPZWVjUS82NWd6akgwY0NMRzh2SXlrcGp4L28xbURQeXlVeExwVnUzRkpLVHUrSjBPbkU0dW9UTHVleDJPNms5TWtoMUppS1pFMGhMU3lNMXBTc0pWbzBCeE1jWmNMdVBjK1JvTTNhSEU3dk5ndEVjUjV4UkZySXBUdGlUa29RdHdTeDhMYzFnREdhMFd6UTVKczAyTXdtVHlTU01ScU13R2lRUkJBaGhNQnFFMXNSQlVnMEdneXJMY250TElMaUVHdmRHTDVyMm5DSkprcVo0b2RWVmhsL0hMQUZKa2dLeUpBVmtXUTRteVdycmxtVXB2QjJCVUlXR3VtcHd1NnJCWUZBbHRJNU5KcE5SU0toQ0NhakNhRFFLazhra1RDYXpNRWlJZ0NwMGlyTnhpSUJDYTJ1cnNDUWtDcHRaRm03WGNSRVhyL20vSW83OTRIR09qOGRxdFhDOHNaNURodzVSVjFkSGJXMHRCdzhlNUtzamJ1eDJPMGxKU1RnY1hZSitzcTUwNjVaQ2Ftb3E2Y25kZVc5TEJtVU5aM0Q5OVRrMDdzeGxXMTArNTV4ekRrcEZEdGZlYWFWa0xFd2FDWGVOZ1ozMWdCV3lmRERwSGswc2ROWVVjS1dCWFliMFhqQjhPRGpOVUR4RWU1Nmx1K1I4NVp2WUtmZG5RSHFFcDFpU3N4ZzIvQXF5VTJ6MDZuY3h3NGRmUWI5ZUVWbS95cDF2Y3QrMFg3Q3F3c0w0aWRkalZWd0FWRldVMDJ2QWxkeCsxeDFrdWQ5ajJKUjVZY0dDdkg2REtja0s4TWl5TjJLQTdRMW1UTHNidFdBb0U0Wm1NbjNzelZTZmhFUlIwKzVWYkhEMVl2cVVhMWs5K3pvV2I2Z0VvS2F5QW1kK0NYZmVkUWNsS1ljWU51SVczQ2Y2VDZxTEdTTXVabDJObldtMzMvSE5nZ2ZWK3ovaHNVOENQRG5qN0ZpaXlUTnJOaEozOWdDdTdLR1ZKTzdjOFI1Tm1VVU02bWJtdy84RHprdUx4VUoyZGpaM0xYNkJUeSsvbU1jZi80REd6SkhNdnU0UzNDNTlpb2luVFltVzFacUlUYmlvOVBqSnlNaUk5c0VadFJtVGNWWnZFZzFDWjZaYU1NZjdhUFkwbzBqeHlIS0xVREVRRjJkR21NM0VXVlFhV3IyUzBSeEhuQ0Zvc2lxQ0ZxOWZ4TnNTa0lXZ3RhVVpSWURSYUNSaXdZcVFPUm9tV2tFaUZrVytoTkRpcHFvL0FMS01qQ29GQW1Bd0dKR2xqazFRaldSSitIMCtKSU1Sb3h4NUQwQUVBZ1FrQ1lzbExzcWtOSnROQkJTRmdDb3dHbVI4QVVGY25CbEprcEVzRnBRV0Y2NVdTVmdzY1dGenMvVzRoQ2t1aVdTbkExbEs0SGhsTFhKY1BQRkdmYldBUGpBZzAycExKSTVvYzlTYzJBV25zMHVVRDAzZlNNVk9FaWFqZzkvKzBVbS8xRzUwUDU3S3F6VkdMQlpZdWhBbXpvSVJKZHIvbnpvVVZxeUY0aWt3Wmhac0hnRmp4a0JUQ213TXlwcWxaR3VMM1F6OVN0cWFvclhsVlZoeU1xTmtYU3pPREVwS01saWZZc1dSWDB4SlNWdXp6WmgzQlkvUHV4MFpHQjU4YjhqNEdkUlc3R1Z2ZVEwWmhlZFM5K3hiTkFMSlFFNWhNU20rTXVSbGJVM0lncEUzTW0zVUVLQ1lnYlArek41YVRTbTUwNUUraVBuM2pzY0J6SnB4RGZlOHVJcmJoODJrMy9DSlpGZnZZMDlaSmVaZTUyQ3BmSUFLTnhSMThwOWN1MWV6dkRhUG1zMHpzUVAvSDNpeGdKbVFPNXd1QUFBQUFFbEZUa1N1UW1DQyJdLFsxLCJkZXRhaWxzLWNvbnRhaW5lciJdLFsxLCJkZXRhaWxzIl0sWyJocmVmIiwiaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL2RlYnVnZ2luZy9leHBlcmltZW50YWwvZW5hYmxlX2R1bXBfZGVidWdfaW5mbyIsInRhcmdldCIsImJsYW5rIiwicmVsIiwibm9yZWZlcnJlciBub29wZW5lciJdLFsiaHJlZiIsImh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2FwaV9kb2NzL3B5dGhvbi90Zi9kZWJ1Z2dpbmciLCJ0YXJnZXQiLCJibGFuayIsInJlbCIsIm5vcmVmZXJyZXIgbm9vcGVuZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihmKDAsImRpdiIsMCkoMSwiZGl2IiwxKSxUKDIsIkRlYnVnZ2VyIFYyIGlzIGluYWN0aXZlIGJlY2F1c2Ugbm8gZGF0YSBpcyBhdmFpbGFibGUuIiksZygpLGYoMywiZGl2IiksVCg0LCJUbyB1c2UgdGhlIGRlYnVnZ2VyLCIpLGcoKSxmKDUsImRpdiIpKDYsIm9sIikoNywibGkiKSxUKDgsIiBBZGQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIHRoZSBiZWdpbm5pbmcgb2YgeW91ciBwcm9ncmFtOiAiKSxmKDksImRpdiIsMikoMTAsInNwYW4iKSxUKDExLCJ0Zi5kZWJ1Z2dpbmcuZXhwZXJpbWVudGFsLmVuYWJsZV9kdW1wX2RlYnVnX2luZm8oIiksZygpLGYoMTIsInNwYW4iLDMpLFQoMTMsImxvZ2RpciIpLGcoKSxUKDE0LCIsICIpLGYoMTUsInNwYW4iLDMpLFQoMTYsJ3RlbnNvcl9kZWJ1Z19tb2RlPSJGVUxMX0hFQUxUSCInKSxnKCksVCgxNywiLCAiKSxmKDE4LCJzcGFuIiwzKSxUKDE5LCJjaXJjdWxhcl9idWZmZXJfc2l6ZT0tMSIpLGcoKSxmKDIwLCJzcGFuIiksVCgyMSwiKSIpLGcoKSgpKCksZigyMiwibGkiKSxUKDIzLCJSZS1ydW4gdGhlIHByb2dyYW0uIiksZygpKCkoKSxmKDI0LCJkaXYiLDQpKDI1LCJkaXYiLDUpKDI2LCJkaXYiLDYpLGsoMjcsImltZyIsNyksZygpLGYoMjgsImRpdiIsOCksVCgyOSwiQXV0by1hbGVydHMgZm9yIHByb2JsZW1zIGZvdW5kIiksZygpKCksZigzMCwiZGl2Iiw1KSgzMSwiZGl2Iiw2KSxrKDMyLCJpbWciLDkpLGcoKSxmKDMzLCJkaXYiLDgpLFQoMzQsIiBJbnRlZ3JhdGVkIGRlYnVnZ2luZyB0byB0cmFjZSBwcm9ibGVtcyB0byB0aGVpciBjYXVzZXMgIiksZygpKCksZigzNSwiZGl2Iiw1KSgzNiwiZGl2Iiw2KSxrKDM3LCJpbWciLDEwKSxnKCksZigzOCwiZGl2Iiw4KSxUKDM5LCJMaW5rIGxvZyB0byBjb2RlIiksZygpKCkoKSxmKDQwLCJkaXYiLDExKSg0MSwiZGl2IiwxMiksVCg0MiwiIFRoZSBsb2cgZGlyZWN0b3J5IG11c3QgY29udGFpbiBUZW5zb3JGbG93IERlYnVnZ2VyIChWMikgZGF0YS4gdGYuZGVidWdnaW5nLmV4cGVyaW1lbnRhbC5lbmFibGVfZHVtcF9kZWJ1Z19pbmZvKCkgd2lsbCBjb2xsZWN0IHRlbnNvciBkYXRhLCBncmFwaCBzdHJ1Y3R1cmVzLCB0aGUgYXNzb2NpYXRlZCBzdGFjayB0cmFjZXMsIGFuZCBzb3VyY2UgY29kZSB0byB0aGUgc3BlY2lmaWNlZCBkaXJlY3RvcnkgbG9nZGlyIGFzIHRoZSBpbnN0cnVtZW50ZWQgVGVuc29yRmxvdyBwcm9ncmFtIGV4ZWN1dGVzLiAiKSxnKCksZig0MywiZGl2IiwxMikoNDQsImRpdiIpLFQoNDUsIiBTZWUgIiksZig0NiwiYSIsMTMpLFQoNDcsIiBkb2N1bWVudGF0aW9uICIpLGcoKSxUKDQ4LCIgb2YgdGhlIFB5dGhvbiBBUEkgb2YgRGVidWdnZXIgVjIuICIpLGcoKSxmKDQ5LCJkaXYiKSxUKDUwLCIgU2VlICIpLGYoNTEsImEiLDE0KSxUKDUyLCIgaGVyZSAiKSxnKCksVCg1MywiIGZvciBvdGhlciBUZW5zb3JGbG93IGRlYnVnZ2luZyBBUElzLiAiKSxnKCkoKSgpKCkpfSxzdHlsZXM6WyIuYXJnW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGNvbG9yOiBsaWdodGJsdWU7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgbWFyZ2luOiAycHg7XG59XG5cbi5jb2RlW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nLCBtb25vc3BhY2U7XG4gIG1hcmdpbjogMTBweDtcbn1cblxuLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0ge1xuICBoZWlnaHQ6IDEwMCU7XG4gIGZvbnQtZmFtaWx5OiBSb2JvdG87XG4gIGZvbnQtc2l6ZTogMTVweDtcbiAgb3ZlcmZsb3cteTogYXV0bztcbiAgcGFkZGluZzogNTBweDtcbn1cblxuLmRldGFpbHMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aWR0aDogMTAwJTtcbn1cblxuLmRldGFpbHNbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW46IDEwcHggNjBweDtcbiAgd2lkdGg6IDUwJTtcbn1cblxuLmV4aGliaXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4uZXhoaWJpdFtfbmdjb250ZW50LSVDT01QJV0ge1xuICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWFyZ2luOiAxMHB4IDYwcHg7XG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gIHdpZHRoOiAzMTBweDtcbn1cblxuLmV4aGliaXRbX25nY29udGVudC0lQ09NUCVdICAgLmRlc2NyaXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHdpZHRoOiAzMTBweDtcbn1cblxuLmV4aGliaXRbX25nY29udGVudC0lQ09NUCVdICAgLnNjcmVlbnNob3RbX25nY29udGVudC0lQ09NUCVdICAgY2FudmFzW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGhlaWdodDogMjAwcHg7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4udGl0bGVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZm9udC1zaXplOiAxMzUlO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgbWFyZ2luLWJvdHRvbTogMjVweDtcbn0iXX0pLG59KSgpLHdZPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEllKSl9LG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1sidGYtZGVidWdnZXItdjItaW5hY3RpdmUiXV0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJmsoMCwiaW5hY3RpdmUtY29tcG9uZW50Iil9LGRlcGVuZGVuY2llczpbTVldLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLEVZPXtnZXRXaW5kb3c6ZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93fX07ZnVuY3Rpb24gU1kobil7bGV0IHQ9RVkuZ2V0V2luZG93KCkucmVxdWlyZTtyZXR1cm4gbmV3IFByb21pc2UoZT0+e3QobixlKX0pfXZhciBiTl9sb2FkTW9uYWNvPWFzeW5jIGZ1bmN0aW9uKCl7bGV0IG49RVkuZ2V0V2luZG93KCk7aWYodm9pZCAwPT09bi5tb25hY28pe2lmKCFuLnJlcXVpcmUpdGhyb3cgbmV3IEVycm9yKCJsb2FkTW9uYWNvKCkgZmFpbGVkIGJlY2F1c2UgZnVuY3Rpb24gcmVxdWlyZSgpIGlzIHVuYXZhaWxhYmxlIik7bi5yZXF1aXJlLmNvbmZpZyh7cGF0aHM6e3ZzOiIvdGYtaW1wb3J0cy92cyJ9fSksYXdhaXQgU1koWyJ2cy9lZGl0b3IvZWRpdG9yLm1haW4iXSksYXdhaXQgU1koWyJ2cy9weXRob24vcHl0aG9uLmNvbnRyaWJ1dGlvbiJdKX19O2Z1bmN0aW9uICRFKG4pe3JldHVybiBuPyJ2cy1kYXJrIjoidnMifXZhciBWaD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMucmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXM9MTAwLHRoaXMub25SZXNpemU9bmV3IEYsdGhpcy5uZ1Vuc3Vic2NyaWJlJD1uZXcgRWUsdGhpcy5vblJlc2l6ZSQ9bmV3IEVlO2xldCBpPW5ldyBSZXNpemVPYnNlcnZlcigoKT0+e3RoaXMub25SZXNpemUkLm5leHQoKX0pO2kub2JzZXJ2ZShlLm5hdGl2ZUVsZW1lbnQpLHRoaXMubmdVbnN1YnNjcmliZSQuc3Vic2NyaWJlKCgpPT57aS51bm9ic2VydmUoZS5uYXRpdmVFbGVtZW50KX0pfW5nT25Jbml0KCl7dGhpcy5vblJlc2l6ZSQucGlwZShvcygxKSxDcih0aGlzLnJlc2l6ZUV2ZW50RGVib3VuY2VQZXJpb2RJbk1zKSxpdCh0aGlzLm5nVW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5vblJlc2l6ZS5lbWl0KCl9KX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZSQubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZSQuY29tcGxldGUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyh4ZSkpfSxuLlx1MDI3NWRpcj1NZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJkZXRlY3RSZXNpemUiLCIiXV0saW5wdXRzOntyZXNpemVFdmVudERlYm91bmNlUGVyaW9kSW5NczoicmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXMifSxvdXRwdXRzOntvblJlc2l6ZToib25SZXNpemUifX0pLG59KSgpLEZ3ZT1bImNvZGVWaWV3ZXJDb250YWluZXIiXSxBWT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5saW5lcz1udWxsLHRoaXMuZm9jdXNlZExpbmVubz1udWxsLHRoaXMubW9uYWNvPW51bGwsdGhpcy5lZGl0b3I9bnVsbCx0aGlzLmRlY29yYXRpb25zPVtdLHRoaXMuUkVTSVpFX0RFQk9VTkNFX0lOVEVSVkFMX01TPTUwfW9uUmVzaXplKCl7dGhpcy5lZGl0b3ImJnRoaXMuZWRpdG9yLmxheW91dCgpfW5nT25DaGFuZ2VzKGUpe2lmKG51bGw9PT10aGlzLm1vbmFjbylyZXR1cm47bGV0IGk9ZS5tb25hY28mJm51bGw9PT10aGlzLmVkaXRvcjtudWxsPT09dGhpcy5lZGl0b3ImJih0aGlzLmVkaXRvcj10aGlzLm1vbmFjby5lZGl0b3IuY3JlYXRlKHRoaXMuY29kZVZpZXdlckNvbnRhaW5lci5uYXRpdmVFbGVtZW50LHt2YWx1ZToodGhpcy5saW5lcz8/W10pLmpvaW4oIlxuIiksbGFuZ3VhZ2U6InB5dGhvbiIscmVhZE9ubHk6ITAsZm9udFNpemU6MTAsbWluaW1hcDp7ZW5hYmxlZDohMH0sdGhlbWU6JEUodGhpcy51c2VEYXJrTW9kZSl9KSksZS5saW5lcyYmdGhpcy5saW5lcyYmdGhpcy5lZGl0b3Iuc2V0VmFsdWUodGhpcy5saW5lcy5qb2luKCJcbiIpKTtsZXQgcj1pfHxlLmZvY3VzZWRMaW5lbm8/dGhpcy5mb2N1c2VkTGluZW5vOm51bGw7aWYociYmdGhpcy5saW5lcyl7dGhpcy5lZGl0b3IucmV2ZWFsTGluZUluQ2VudGVyKHIsdGhpcy5tb25hY28uZWRpdG9yLlNjcm9sbFR5cGUuU21vb3RoKTtsZXQgbz10aGlzLmxpbmVzW3ItMV0ubGVuZ3RoO3RoaXMuZGVjb3JhdGlvbnM9dGhpcy5lZGl0b3IuZGVsdGFEZWNvcmF0aW9ucyh0aGlzLmRlY29yYXRpb25zLFt7cmFuZ2U6bmV3IHRoaXMubW9uYWNvLlJhbmdlKHIsMSxyLDEpLG9wdGlvbnM6e2lzV2hvbGVMaW5lOiEwLGxpbmVzRGVjb3JhdGlvbnNDbGFzc05hbWU6ImhpZ2hsaWdodC1ndXR0ZXIifX0se3JhbmdlOm5ldyB0aGlzLm1vbmFjby5SYW5nZShyLDEscixvKzEpLG9wdGlvbnM6e2lubGluZUNsYXNzTmFtZToiaGlnaGxpZ2h0LWxpbmUifX1dKX1lLnVzZURhcmtNb2RlJiZ0aGlzLm1vbmFjby5lZGl0b3Iuc2V0VGhlbWUoJEUodGhpcy51c2VEYXJrTW9kZSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJzb3VyY2UtY29kZS1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZVZShGd2UsNyx4ZSksMiZlKXtsZXQgcjtiZShyPXZlKCkpJiYoaS5jb2RlVmlld2VyQ29udGFpbmVyPXIuZmlyc3QpfX0saW5wdXRzOntsaW5lczoibGluZXMiLGZvY3VzZWRMaW5lbm86ImZvY3VzZWRMaW5lbm8iLG1vbmFjbzoibW9uYWNvIix1c2VEYXJrTW9kZToidXNlRGFya01vZGUifSxmZWF0dXJlczpbcXRdLGRlY2xzOjIsdmFyczoxLGNvbnN0czpbWyJkZXRlY3RSZXNpemUiLCIiLDEsImNvZGUtdmlld2VyLWNvbnRhaW5lciIsMywicmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXMiLCJvblJlc2l6ZSJdLFsiY29kZVZpZXdlckNvbnRhaW5lciIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGYoMCwiZGl2IiwwLDEpLEEoIm9uUmVzaXplIixmdW5jdGlvbigpe3JldHVybiBpLm9uUmVzaXplKCl9KSxnKCkpLDImZSYmYigicmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXMiLGkuUkVTSVpFX0RFQk9VTkNFX0lOVEVSVkFMX01TKX0sZGVwZW5kZW5jaWVzOltWaF0sc3R5bGVzOlsiLmNvZGUtdmlld2VyLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0ge1xuICBoZWlnaHQ6IDEwMCU7XG59XG5cbltfbmdob3N0LSVDT01QJV0gICAgIC5oaWdobGlnaHQtZ3V0dGVyIHtcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDExMSwgMCwgMC43KTtcbiAgd2lkdGg6IDVweCAhaW1wb3J0YW50O1xufVxuXG5bX25naG9zdC0lQ09NUCVdICAgICAuaGlnaGxpZ2h0LWxpbmUge1xuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMTExLCAwLCAwLjMpO1xufSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksUlk9KCgpPT57Y2xhc3MgbntuZ09uSW5pdCgpe3RoaXMubW9uYWNvJD1KcihiTl9sb2FkTW9uYWNvKCkpLnBpcGUocSgoKT0+d2luZG93Lm1vbmFjbykpfWNvbnN0cnVjdG9yKCl7dGhpcy5saW5lcz1udWxsLHRoaXMuZm9jdXNlZExpbmVubz1udWxsLHRoaXMudXNlRGFya01vZGU9ITEsdGhpcy5tb25hY28kPW51bGx9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbInNvdXJjZS1jb2RlIl1dLGlucHV0czp7bGluZXM6ImxpbmVzIixmb2N1c2VkTGluZW5vOiJmb2N1c2VkTGluZW5vIix1c2VEYXJrTW9kZToidXNlRGFya01vZGUifSxkZWNsczoyLHZhcnM6Nixjb25zdHM6W1szLCJsaW5lcyIsImZvY3VzZWRMaW5lbm8iLCJtb25hY28iLCJ1c2VEYXJrTW9kZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGsoMCwic291cmNlLWNvZGUtY29tcG9uZW50IiwwKSxVKDEsImFzeW5jIikpLDImZSYmYigibGluZXMiLGkubGluZXMpKCJmb2N1c2VkTGluZW5vIixpLmZvY3VzZWRMaW5lbm8pKCJtb25hY28iLEcoMSw0LGkubW9uYWNvJCkpKCJ1c2VEYXJrTW9kZSIsaS51c2VEYXJrTW9kZSl9LGRlcGVuZGVuY2llczpbQVksY3RdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpO2Z1bmN0aW9uIEJ3ZShuLHQpe2lmKDEmbiYmKGYoMCwiZGl2Iiw2KSxUKDEpLGcoKSksMiZuKXtsZXQgZT13KCk7digxKSxWZSgiICIsZS5mb2N1c2VkU291cmNlTGluZVNwZWMuZmlsZV9wYXRoLCIgIil9fWZ1bmN0aW9uIFZ3ZShuLHQpezEmbiYmKGYoMCwiZGl2Iiw3KSxUKDEsIiBObyBmaWxlIHNlbGVjdGVkLiBDbGljayBhIGxpbmUgbnVtYmVyIGluIHRoZSBTdGFjayBUcmFjZSBzZWN0aW9uIHRvIHNob3cgdGhlIHNvdXJjZSBjb2RlLiAiKSxnKCkpfWZ1bmN0aW9uIEh3ZShuLHQpe2lmKDEmbiYmaygwLCJzb3VyY2UtY29kZSIsOCksMiZuKXtsZXQgZT13KCk7YigibGluZXMiLGUuZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50LmxpbmVzKSgiZm9jdXNlZExpbmVubyIsZS5mb2N1c2VkU291cmNlTGluZVNwZWMubGluZW5vKSgidXNlRGFya01vZGUiLGUudXNlRGFya01vZGUpfX12YXIgUFk9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50PW51bGwsdGhpcy5mb2N1c2VkU291cmNlTGluZVNwZWM9bnVsbH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1sic291cmNlLWZpbGVzLWNvbXBvbmVudCJdXSxpbnB1dHM6e2ZvY3VzZWRTb3VyY2VGaWxlQ29udGVudDoiZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50Iixmb2N1c2VkU291cmNlTGluZVNwZWM6ImZvY3VzZWRTb3VyY2VMaW5lU3BlYyIsdXNlRGFya01vZGU6InVzZURhcmtNb2RlIn0sZGVjbHM6OCx2YXJzOjMsY29uc3RzOltbMSwic291cmNlLWZpbGVzLWNvbnRhaW5lciJdLFsxLCJoZWFkZXItc2VjdGlvbiJdLFsxLCJ0aXRsZS10YWciXSxbImNsYXNzIiwiZmlsZS1sYWJlbCIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJub0ZpbGVTZWxlY3RlZCIsIiJdLFszLCJsaW5lcyIsImZvY3VzZWRMaW5lbm8iLCJ1c2VEYXJrTW9kZSIsNCwibmdJZiJdLFsxLCJmaWxlLWxhYmVsIl0sWzEsIm5vLWZpbGUtc2VsZWN0ZWQiXSxbMywibGluZXMiLCJmb2N1c2VkTGluZW5vIiwidXNlRGFya01vZGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihmKDAsImRpdiIsMCkoMSwiZGl2IiwxKSgyLCJkaXYiLDIpLFQoMywiU291cmNlIENvZGUiKSxnKCksUyg0LEJ3ZSwyLDEsImRpdiIsMyksUyg1LFZ3ZSwyLDAsIm5nLXRlbXBsYXRlIixudWxsLDQsanQpLGcoKSxTKDcsSHdlLDEsMywic291cmNlLWNvZGUiLDUpLGcoKSksMiZlKXtsZXQgcj1zdCg2KTt2KDQpLGIoIm5nSWYiLG51bGwhPT1pLmZvY3VzZWRTb3VyY2VMaW5lU3BlYykoIm5nSWZFbHNlIixyKSx2KDMpLGIoIm5nSWYiLG51bGwhPT1pLmZvY3VzZWRTb3VyY2VGaWxlQ29udGVudCYmbnVsbCE9PWkuZm9jdXNlZFNvdXJjZUxpbmVTcGVjJiZudWxsIT09aS5mb2N1c2VkU291cmNlRmlsZUNvbnRlbnQubGluZXMpfX0sZGVwZW5kZW5jaWVzOltOZSxSWV0sc3R5bGVzOlsnLmhlYWRlci1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6ZmxleDtoZWlnaHQ6MjRweDtwYWRkaW5nLWJvdHRvbTo2cHg7dmVydGljYWwtYWxpZ246bWlkZGxlO3doaXRlLXNwYWNlOm5vd3JhcDt3aWR0aDoxMDAlfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5oZWFkZXItc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5oZWFkZXItc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX0uZmlsZS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC13ZWlnaHQ6bm9ybWFsO3doaXRlLXNwYWNlOm5vcm1hbDtvdmVyZmxvdy13cmFwOmFueXdoZXJlO292ZXJmbG93LXk6YXV0bztwYWRkaW5nOjAgMjBweH0ubm8tZmlsZS1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29sb3I6IzY2NjtwYWRkaW5nOjAgMjBweDt3aGl0ZS1zcGFjZTpub3JtYWx9LnNvdXJjZS1maWxlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Zm9udC1mYW1pbHk6IlJvYm90byBNb25vIixtb25vc3BhY2U7Zm9udC1zaXplOjEwcHg7aGVpZ2h0OjEwMCV9LnRpdGxlLXRhZ1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC13ZWlnaHQ6Ym9sZDtoZWlnaHQ6MTAwJTtwYWRkaW5nLWxlZnQ6NnB4O3ZlcnRpY2FsLWFsaWduOnRvcH1zb3VyY2UtY29kZVtfbmdjb250ZW50LSVDT01QJV17ZmxleC1ncm93OjE7d2lkdGg6MTAwJX0nXX0pLG59KSgpLGtZPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50JD10aGlzLnN0b3JlLnNlbGVjdChRRSksdGhpcy5mb2N1c2VkU291cmNlTGluZVNwZWMkPXRoaXMuc3RvcmUuc2VsZWN0KFpFKSx0aGlzLnVzZURhcmtNb2RlJD10aGlzLnN0b3JlLnNlbGVjdChQbCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoSWUpKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12Mi1zb3VyY2UtZmlsZXMiXV0sZGVjbHM6NCx2YXJzOjksY29uc3RzOltbMywiZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50IiwiZm9jdXNlZFNvdXJjZUxpbmVTcGVjIiwidXNlRGFya01vZGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihrKDAsInNvdXJjZS1maWxlcy1jb21wb25lbnQiLDApLFUoMSwiYXN5bmMiKSxVKDIsImFzeW5jIiksVSgzLCJhc3luYyIpKSwyJmUmJmIoImZvY3VzZWRTb3VyY2VGaWxlQ29udGVudCIsRygxLDMsaS5mb2N1c2VkU291cmNlRmlsZUNvbnRlbnQkKSkoImZvY3VzZWRTb3VyY2VMaW5lU3BlYyIsRygyLDUsaS5mb2N1c2VkU291cmNlTGluZVNwZWMkKSkoInVzZURhcmtNb2RlIixHKDMsNyxpLnVzZURhcmtNb2RlJCkpfSxkZXBlbmRlbmNpZXM6W1BZLGN0XSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxqd2U9WyJzdGFja0ZyYW1lQXJyYXkiXTtmdW5jdGlvbiBHd2Uobix0KXtpZigxJm4mJihmKDAsInNwYW4iLDEzKSxUKDEpLGcoKSksMiZuKXtsZXQgZT13KDMpO3YoMSksVmUoIiAjIixlLmV4ZWN1dGlvbkluZGV4LCI6ICIpfX1mdW5jdGlvbiBXd2Uobix0KXtpZigxJm4mJihmKDAsInNwYW4iLDE0KSxUKDEpLGcoKSksMiZuKXtsZXQgZT13KDMpO3YoMSksVmUoIiAiLGUub3BUeXBlLCIgIil9fWZ1bmN0aW9uIHF3ZShuLHQpe2lmKDEmbiYmKGYoMCwiZGl2IiksVCgxLCIgRWFnZXIgZXhlY3V0aW9uICIpLFMoMixHd2UsMiwxLCJzcGFuIiwxMSksUygzLFd3ZSwyLDEsInNwYW4iLDEyKSxnKCkpLDImbil7bGV0IGU9dygyKTt2KDIpLGIoIm5nSWYiLG51bGwhPT1lLm9wVHlwZSksdigxKSxiKCJuZ0lmIixudWxsIT09ZS5vcFR5cGUpfX1mdW5jdGlvbiBYd2Uobix0KXtpZigxJm4mJihmKDAsInNwYW4iLDE2KSxUKDEpLGcoKSksMiZuKXtsZXQgZT13KDMpO3YoMSksVmUoJyAiJyxlLm9wTmFtZSwnIiAnKX19ZnVuY3Rpb24gWXdlKG4sdCl7aWYoMSZuJiYoZigwLCJzcGFuIiwxNCksVCgxKSxnKCkpLDImbil7bGV0IGU9dygzKTt2KDEpLFZlKCIgIixlLm9wVHlwZSwiICIpfX1mdW5jdGlvbiBRd2Uobix0KXtpZigxJm4mJihmKDAsImRpdiIpLFQoMSwiIENyZWF0aW9uIG9mIGdyYXBoIG9wICIpLFMoMixYd2UsMiwxLCJzcGFuIiwxNSksUygzLFl3ZSwyLDEsInNwYW4iLDEyKSxnKCkpLDImbil7bGV0IGU9dygyKTt2KDIpLGIoIm5nSWYiLG51bGwhPT1lLm9wTmFtZSksdigxKSxiKCJuZ0lmIixudWxsIT09ZS5vcFR5cGUpfX1mdW5jdGlvbiBad2Uobix0KXtpZigxJm4mJihmKDAsInNwYW4iLDE3KSxUKDEpLGcoKSksMiZuKXtsZXQgZT13KDIpO3YoMSksVmUoIiAoSG9zdCBuYW1lOiAiLGUuc3RhY2tGcmFtZXNGb3JEaXNwbGF5WzBdLmhvc3RfbmFtZSwiKSAiKX19ZnVuY3Rpb24gS3dlKG4sdCl7aWYoMSZuJiYoZigwLCJkaXYiLDcpKDEsInNwYW4iKSgyLCJzcGFuIiw4KSxTKDMscXdlLDQsMiwiZGl2Iiw5KSxTKDQsUXdlLDQsMiwiZGl2Iiw5KSxnKCkoKSxmKDUsImRpdiIpLFMoNixad2UsMiwxLCJzcGFuIiwxMCksZygpKCkpLDImbil7bGV0IGU9dygpO3YoMiksYigibmdTd2l0Y2giLGUuY29kZUxvY2F0aW9uVHlwZSksdigxKSxiKCJuZ1N3aXRjaENhc2UiLGUuQ29kZUxvY2F0aW9uVHlwZS5FWEVDVVRJT04pLHYoMSksYigibmdTd2l0Y2hDYXNlIixlLkNvZGVMb2NhdGlvblR5cGUuR1JBUEhfT1BfQ1JFQVRJT04pLHYoMiksYigibmdJZiIsbnVsbCE9PWUuc3RhY2tGcmFtZXNGb3JEaXNwbGF5JiZlLnN0YWNrRnJhbWVzRm9yRGlzcGxheS5sZW5ndGg+MCl9fWZ1bmN0aW9uIEp3ZShuLHQpezEmbiYmKGYoMCwiZGl2IiwxOCksVCgxLCIgQ2xpY2sgYW4gZWFnZXIgZXhlY3V0aW9uIG9yIGdyYXBoIG9wIHRvIHNob3cgaXRzIG9yaWdpbmFsIHN0YWNrIHRyYWNlLiAiKSxnKCkpfWZ1bmN0aW9uICR3ZShuLHQpezEmbiYmKGYoMCwiZGl2IiwyOCksVCgxLCIgXHUyOTEzICIpLGcoKSl9dmFyIGVTZT1mdW5jdGlvbihuLHQpe3JldHVybltuLHRdfTtmdW5jdGlvbiB0U2Uobix0KXtpZigxJm4pe2xldCBlPVRlKCk7ZigwLCJkaXYiLDIyKSgxLCJkaXYiLDIzKSxUKDIpLGcoKSxmKDMsImRpdiIsMjQpLFMoNCwkd2UsMiwwLCJkaXYiLDI1KSxmKDUsImRpdiIsMjYpLEEoImNsaWNrIixmdW5jdGlvbigpe2xldCBvPW5lKGUpLiRpbXBsaWNpdDtyZXR1cm4gaWUodygyKS5vblNvdXJjZUxpbmVDbGlja2VkLmVtaXQobykpfSksVCg2KSxnKCksZig3LCJkaXYiLDI3KSxUKDgpLGcoKSgpKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXcoMik7YigibmdDbGFzcyIsU28oNixlU2UsZS5iZWxvbmdzVG9Gb2N1c2VkRmlsZT8iZm9jdXNlZC1maWxlIjoiIixlLmZvY3VzZWQ/ImZvY3VzZWQtc3RhY2stZnJhbWUiOiIiKSksdigxKSxaaSgidGl0bGUiLGUuZmlsZV9wYXRoKSx2KDEpLFZlKCIgIixlLmNvbmNpc2VfZmlsZV9wYXRoLCIgIiksdigyKSxiKCJuZ0lmIixpLnN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlJiZlLmZvY3VzZWQpLHYoMiksVmUoIiBMaW5lICIsZS5saW5lbm8sIiAiKSx2KDIpLFZlKCIgIixlLmZ1bmN0aW9uX25hbWUsIiAiKX19ZnVuY3Rpb24gblNlKG4sdCl7aWYoMSZuJiYoZigwLCJkaXYiLDE5LDIwKSxTKDIsdFNlLDksOSwiZGl2IiwyMSksZygpKSwyJm4pe2xldCBlPXcoKTt2KDIpLGIoIm5nRm9yT2YiLGUuc3RhY2tGcmFtZXNGb3JEaXNwbGF5KX19ZnVuY3Rpb24gaVNlKG4sdCl7fXZhciBPWT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5zdGFja0ZyYW1lc0ZvckRpc3BsYXk9bnVsbCx0aGlzLm9uU291cmNlTGluZUNsaWNrZWQ9bmV3IEYsdGhpcy5Db2RlTG9jYXRpb25UeXBlPXpvfW5nQWZ0ZXJWaWV3Q2hlY2tlZCgpe2lmKHZvaWQgMD09PXRoaXMuc3RhY2tGcmFtZUFycmF5KXJldHVybjtsZXQgZT10aGlzLnN0YWNrRnJhbWVBcnJheS5uYXRpdmVFbGVtZW50LGk9ZS5xdWVyeVNlbGVjdG9yKCIuZm9jdXNlZC1zdGFjay1mcmFtZSIpO2lmKG51bGwhPT1pKXJldHVybiB2b2lkIHRoaXMuc2Nyb2xsVG9FbGVtZW50KGUsaSk7bGV0IHI9ZS5xdWVyeVNlbGVjdG9yKCIuc3RhY2stZnJhbWUtY29udGFpbmVyOmxhc3QtY2hpbGQiKTtudWxsIT09ciYmdGhpcy5zY3JvbGxUb0VsZW1lbnQoZSxyKX1zY3JvbGxUb0VsZW1lbnQoZSxpKXtlLnNjcm9sbFRvcD1pLm9mZnNldFRvcH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1sic3RhY2stdHJhY2UtY29tcG9uZW50Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmVWUoandlLDUpLDImZSl7bGV0IHI7YmUocj12ZSgpKSYmKGkuc3RhY2tGcmFtZUFycmF5PXIuZmlyc3QpfX0saW5wdXRzOntjb2RlTG9jYXRpb25UeXBlOiJjb2RlTG9jYXRpb25UeXBlIixvcFR5cGU6Im9wVHlwZSIsb3BOYW1lOiJvcE5hbWUiLGV4ZWN1dGlvbkluZGV4OiJleGVjdXRpb25JbmRleCIsc3RpY2tUb0JvdHRvbW1vc3RGcmFtZUluRm9jdXNlZEZpbGU6InN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlIixzdGFja0ZyYW1lc0ZvckRpc3BsYXk6InN0YWNrRnJhbWVzRm9yRGlzcGxheSJ9LG91dHB1dHM6e29uU291cmNlTGluZUNsaWNrZWQ6Im9uU291cmNlTGluZUNsaWNrZWQifSxkZWNsczoxMCx2YXJzOjQsY29uc3RzOltbMSwic3RhY2stdHJhY2UtY29udGFpbmVyIl0sWzEsInN0YWNrLXRyYWNlLWhlYWRlciJdLFsxLCJzdGFjay10cmFjZS10aXRsZSJdLFsiY2xhc3MiLCJzdGFjay10cmFjZS1hdXgtaW5mbyIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJub1N0YWNrVHJhY2UiLCIiXSxbImNsYXNzIiwic3RhY2stZnJhbWUtYXJyYXkiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibG9hZGluZ1NlY3Rpb24iLCIiXSxbMSwic3RhY2stdHJhY2UtYXV4LWluZm8iXSxbMSwiY29kZS1sb2NhdGlvbi1vcmlnaW4iLDMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJzdGFjay10cmFjZS1ob3N0LW5hbWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiZWFnZXItZXhlY3V0aW9uLWluZGV4Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm9wLXR5cGUiLDQsIm5nSWYiXSxbMSwiZWFnZXItZXhlY3V0aW9uLWluZGV4Il0sWzEsIm9wLXR5cGUiXSxbImNsYXNzIiwib3AtbmFtZSIsNCwibmdJZiJdLFsxLCJvcC1uYW1lIl0sWzEsInN0YWNrLXRyYWNlLWhvc3QtbmFtZSJdLFsxLCJzdGFjay10cmFjZS1hdXgtaW5mbyIsIm5vLXN0YWNrLXRyYWNlIl0sWzEsInN0YWNrLWZyYW1lLWFycmF5Il0sWyJzdGFja0ZyYW1lQXJyYXkiLCIiXSxbImNsYXNzIiwic3RhY2stZnJhbWUtY29udGFpbmVyIiwzLCJuZ0NsYXNzIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwic3RhY2stZnJhbWUtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWzEsInN0YWNrLWZyYW1lLWZpbGUtcGF0aCIsMywidGl0bGUiXSxbMSwic3RhY2stZnJhbWUtbGluZW5vLWZ1bmN0aW9uIl0sWyJjbGFzcyIsInN0aWNrLXRvLWJvdHRvbW1vc3QtaW5kaWNhdG9yIiwidGl0bGUiLCJTdGlja2luZyB0byB0aGUgYm90dG9tbW9zdCBmcmFtZSBpbiB0aGUgY3VycmVudCBzb3VyY2UgZmlsZSB3aGVuIG5hdmlnYXRpbmcgZXhlY3V0aW9ucyBhbmQgZ3JhcGggb3BzLiBUbyByZW1vdmUgdGhpcyBzdGlja2luZywgY2xpY2sgYW55IG5vbi1ib3R0b21tb3N0IHN0YWNrIGZyYW1lLiIsNCwibmdJZiJdLFsxLCJzdGFjay1mcmFtZS1saW5lbm8iLDMsImNsaWNrIl0sWzEsInN0YWNrLWZyYW1lLWZ1bmN0aW9uIl0sWyJ0aXRsZSIsIlN0aWNraW5nIHRvIHRoZSBib3R0b21tb3N0IGZyYW1lIGluIHRoZSBjdXJyZW50IHNvdXJjZSBmaWxlIHdoZW4gbmF2aWdhdGluZyBleGVjdXRpb25zIGFuZCBncmFwaCBvcHMuIFRvIHJlbW92ZSB0aGlzIHN0aWNraW5nLCBjbGljayBhbnkgbm9uLWJvdHRvbW1vc3Qgc3RhY2sgZnJhbWUuIiwxLCJzdGljay10by1ib3R0b21tb3N0LWluZGljYXRvciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGYoMCwiZGl2IiwwKSgxLCJkaXYiLDEpKDIsInNwYW4iLDIpLFQoMywiIFN0YWNrIFRyYWNlICIpLGcoKSxTKDQsS3dlLDcsNCwiZGl2IiwzKSxTKDUsSndlLDIsMCwibmctdGVtcGxhdGUiLG51bGwsNCxqdCksZygpLFMoNyxuU2UsMywxLCJkaXYiLDUpLFMoOCxpU2UsMCwwLCJuZy10ZW1wbGF0ZSIsbnVsbCw2LGp0KSxnKCkpLDImZSl7bGV0IHI9c3QoNiksbz1zdCg5KTt2KDQpLGIoIm5nSWYiLG51bGwhPT1pLmNvZGVMb2NhdGlvblR5cGUpKCJuZ0lmRWxzZSIsciksdigzKSxiKCJuZ0lmIixudWxsIT09aS5zdGFja0ZyYW1lc0ZvckRpc3BsYXkpKCJuZ0lmRWxzZSIsbyl9fSxkZXBlbmRlbmNpZXM6W3duLG5uLE5lLG1yLGtyXSxzdHlsZXM6WycuZm9jdXNlZC1maWxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpib2xkfS5mb2N1c2VkLXN0YWNrLWZyYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDExMSwwLC4zKX0ubm8tc3RhY2stdHJhY2VbX25nY29udGVudC0lQ09NUCVde2NvbG9yOmdyYXl9Lm9wLW5hbWVbX25nY29udGVudC0lQ09NUCVde3dvcmQtd3JhcDphbnl3aGVyZX0ub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZWNlZmYxO2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtib3JkZXItcmFkaXVzOjRweDtmb250LWZhbWlseToiUm9ib3RvIE1vbm8iLG1vbm9zcGFjZTtmb250LXNpemU6MTBweDtoZWlnaHQ6MTRweDtsaW5lLWhlaWdodDoxNHB4O3BhZGRpbmc6MXB4IDNweDt3aWR0aDptYXgtY29udGVudH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojNDU1YTY0fS5zdGFjay1mcmFtZS1hcnJheVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3cteDpoaWRkZW47b3ZlcmZsb3cteTphdXRvO3dpZHRoOmNhbGMoMTAwJSAtIDhweCl9LnN0YWNrLWZyYW1lLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2EwYTBhMH0uc3RhY2stZnJhbWUtZmlsZS1wYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXttYXgtd2lkdGg6MTgwcHg7d2lkdGg6MTgwcHh9LnN0YWNrLWZyYW1lLWxpbmVuby1mdW5jdGlvbltfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpyaWdodDt3aGl0ZS1zcGFjZTpub3dyYXB9LnN0YWNrLWZyYW1lLWZ1bmN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jazttYXgtd2lkdGg6MjAwcHg7cGFkZGluZy1sZWZ0OjEwcHg7dGV4dC1hbGlnbjpsZWZ0O3doaXRlLXNwYWNlOm5vcm1hbDt3aWR0aDoyMDBweDt3b3JkLXdyYXA6YW55d2hlcmV9LnN0YWNrLWZyYW1lLWxpbmVub1tfbmdjb250ZW50LSVDT01QJV17Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWF4LXdpZHRoOjgwcHg7dGV4dC1hbGlnbjpsZWZ0O3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7d2lkdGg6ODBweH0uc3RhY2stdHJhY2UtYXV4LWluZm9bX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MTVweDtwYWRkaW5nLWxlZnQ6MjRweH0uc3RhY2stdHJhY2UtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoxcHggc29saWQgI2ViZWJlYjtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpjb2x1bW47Zm9udC1zaXplOjEwcHg7Zm9udC1mYW1pbHk6IlJvYm90byBNb25vIixtb25vc3BhY2U7aGVpZ2h0OjEwMCU7bWFyZ2luLWxlZnQ6OHB4O21heC1oZWlnaHQ6MzYwcHg7b3ZlcmZsb3cteDpoaWRkZW47b3ZlcmZsb3cteTpoaWRkZW47cGFkZGluZy1sZWZ0OjhweDt3aWR0aDoxMDAlfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zdGFjay10cmFjZS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc3RhY2stdHJhY2UtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoxcHggc29saWQgIzU1NX0uc3RhY2stdHJhY2UtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2hhZG93OjAgNXB4IDNweCAtM3B4ICNjY2M7cGFkZGluZy1ib3R0b206M3B4fS5zdGFjay10cmFjZS1ob3N0LW5hbWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOmdyYXl9LnN0YWNrLXRyYWNlLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpib2xkfS5zdGljay10by1ib3R0b21tb3N0LWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC13ZWlnaHQ6Ym9sZDtmb250LXNpemU6MTJweDtwYWRkaW5nLXJpZ2h0OjNweH0nXX0pLG59KSgpLEZZPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuY29kZUxvY2F0aW9uVHlwZSQ9dGhpcy5zdG9yZS5waXBlKHVuKFcoZnksaT0+bnVsbD09PWk/bnVsbDppLmNvZGVMb2NhdGlvblR5cGUpKSksdGhpcy5vcFR5cGUkPXRoaXMuc3RvcmUucGlwZSh1bihXKGZ5LGk9Pm51bGw9PT1pP251bGw6aS5vcFR5cGUpKSksdGhpcy5vcE5hbWUkPXRoaXMuc3RvcmUucGlwZSh1bihXKGZ5LGk9Pm51bGw9PT1pfHxpLmNvZGVMb2NhdGlvblR5cGUhPT16by5HUkFQSF9PUF9DUkVBVElPTj9udWxsOmkub3BOYW1lKSkpLHRoaXMuZXhlY3V0aW9uSW5kZXgkPXRoaXMuc3RvcmUucGlwZSh1bihXKGZ5LGk9Pm51bGw9PT1pfHxpLmNvZGVMb2NhdGlvblR5cGUhPT16by5FWEVDVVRJT04/bnVsbDppLmV4ZWN1dGlvbkluZGV4KSkpLHRoaXMuc3RpY2tUb0JvdHRvbW1vc3RGcmFtZUluRm9jdXNlZEZpbGUkPXRoaXMuc3RvcmUucGlwZSh1bihoWSkpLHRoaXMuc3RhY2tGcmFtZXNGb3JEaXNwbGF5JD10aGlzLnN0b3JlLnBpcGUodW4oVyh1WSxaRSwoaSxyKT0+e2lmKG51bGw9PT1pKXJldHVybiBudWxsO2xldCBvPVtdO2ZvcihsZXQgYSBvZiBpKXtsZXR7aG9zdF9uYW1lOnMsZmlsZV9wYXRoOmwsbGluZW5vOmMsZnVuY3Rpb25fbmFtZTpkfT1hLHU9bC5zcGxpdCgiLyIpLGg9bnVsbCE9PXImJnM9PT1yLmhvc3RfbmFtZSYmbD09PXIuZmlsZV9wYXRoO28ucHVzaCh7aG9zdF9uYW1lOnMsZmlsZV9wYXRoOmwsY29uY2lzZV9maWxlX3BhdGg6dVt1Lmxlbmd0aC0xXSxsaW5lbm86YyxmdW5jdGlvbl9uYW1lOmQsYmVsb25nc1RvRm9jdXNlZEZpbGU6aCxmb2N1c2VkOmgmJmM9PT1yLmxpbmVub30pfXJldHVybiBvfSkpKX1vblNvdXJjZUxpbmVDbGlja2VkKGUpe2xldHtob3N0X25hbWU6aSxmaWxlX3BhdGg6cixsaW5lbm86byxmdW5jdGlvbl9uYW1lOmF9PWU7dGhpcy5zdG9yZS5kaXNwYXRjaChOZyh7c3RhY2tGcmFtZTp7aG9zdF9uYW1lOmksZmlsZV9wYXRoOnIsbGluZW5vOm8sZnVuY3Rpb25fbmFtZTphfX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhJZSkpfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbInRmLWRlYnVnZ2VyLXYyLXN0YWNrLXRyYWNlIl1dLGRlY2xzOjcsdmFyczoxOCxjb25zdHM6W1szLCJjb2RlTG9jYXRpb25UeXBlIiwib3BUeXBlIiwib3BOYW1lIiwiZXhlY3V0aW9uSW5kZXgiLCJzdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSIsInN0YWNrRnJhbWVzRm9yRGlzcGxheSIsIm9uU291cmNlTGluZUNsaWNrZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihmKDAsInN0YWNrLXRyYWNlLWNvbXBvbmVudCIsMCksQSgib25Tb3VyY2VMaW5lQ2xpY2tlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25Tb3VyY2VMaW5lQ2xpY2tlZChvKX0pLFUoMSwiYXN5bmMiKSxVKDIsImFzeW5jIiksVSgzLCJhc3luYyIpLFUoNCwiYXN5bmMiKSxVKDUsImFzeW5jIiksVSg2LCJhc3luYyIpLGcoKSksMiZlJiZiKCJjb2RlTG9jYXRpb25UeXBlIixHKDEsNixpLmNvZGVMb2NhdGlvblR5cGUkKSkoIm9wVHlwZSIsRygyLDgsaS5vcFR5cGUkKSkoIm9wTmFtZSIsRygzLDEwLGkub3BOYW1lJCkpKCJleGVjdXRpb25JbmRleCIsRyg0LDEyLGkuZXhlY3V0aW9uSW5kZXgkKSkoInN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlIixHKDUsMTQsaS5zdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSQpKSgic3RhY2tGcmFtZXNGb3JEaXNwbGF5IixHKDYsMTYsaS5zdGFja0ZyYW1lc0ZvckRpc3BsYXkkKSl9LGRlcGVuZGVuY2llczpbT1ksY3RdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLGFTZT1mdW5jdGlvbihuLHQpe3JldHVybnt0ZW5zb3JEZWJ1Z01vZGU6bixhcnJheTp0fX07ZnVuY3Rpb24gc1NlKG4sdCl7aWYoMSZuJiYoZigwLCJkaXYiLDEyKSgxLCJkaXYiLDEzKSxUKDIpLGcoKSxmKDMsImRpdiIsMTQpLGsoNCwiZGVidWctdGVuc29yLXZhbHVlIiwxNSksZygpKCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT10LmluZGV4LHI9dygzKTt2KDIpLFZlKCJPdXRwdXQgc2xvdCAiLGksIjoiKSx2KDIpLGIoImRlYnVnVGVuc29yVmFsdWUiLHIucGFyc2VEZWJ1Z1RlbnNvclZhbHVlKFNvKDIsYVNlLHIudGVuc29yRGVidWdNb2RlLGUpKSl9fWZ1bmN0aW9uIGxTZShuLHQpe2lmKDEmbiYmKGYoMCwiZGl2IiwxMCksUygxLHNTZSw1LDUsImRpdiIsMTEpLGcoKSksMiZuKXtsZXQgZT13KDIpO3YoMSksYigibmdGb3JPZiIsZS5kZWJ1Z1RlbnNvclZhbHVlcyl9fWZ1bmN0aW9uIGNTZShuLHQpe2lmKDEmbiYmKGYoMCwiZGl2IikoMSwiZGl2IikoMiwiZGl2IiwzKSgzLCJzcGFuIiw0KSxUKDQsIiBPcDogIiksZygpLGYoNSwic3BhbiIsNSksVCg2KSxnKCkoKSxmKDcsImRpdiIsMykoOCwic3BhbiIsNCksVCg5LCIgIyBvZiBpbnB1dCB0ZW5zb3JzOiAiKSxnKCksZigxMCwic3BhbiIsNiksVCgxMSksZygpKCksZigxMiwiZGl2IiwzKSgxMywic3BhbiIsNCksVCgxNCwiICMgb2Ygb3V0cHV0IHRlbnNvcnM6ICIpLGcoKSxmKDE1LCJzcGFuIiw3KSxUKDE2KSxnKCksZigxNywic3BhbiIsOCksVCgxOCksZygpKCksUygxOSxsU2UsMiwxLCJkaXYiLDkpLGcoKSgpKSwyJm4pe2xldCBlPXcoKTt2KDYpLFZlKCIgIixlLmZvY3VzZWRFeGVjdXRpb25EYXRhLm9wX3R5cGUsIiAiKSx2KDUpLFZlKCIgIixudWxsPT1lLmZvY3VzZWRFeGVjdXRpb25EYXRhLmlucHV0X3RlbnNvcl9pZHM/MDplLmZvY3VzZWRFeGVjdXRpb25EYXRhLmlucHV0X3RlbnNvcl9pZHMubGVuZ3RoLCIgIiksdig1KSxWZSgiICIsbnVsbD09ZS5mb2N1c2VkRXhlY3V0aW9uRGF0YS5vdXRwdXRfdGVuc29yX2lkcz8wOmUuZm9jdXNlZEV4ZWN1dGlvbkRhdGEub3V0cHV0X3RlbnNvcl9pZHMubGVuZ3RoLCIgIiksdigyKSxWZSgiIChkZWJ1ZyBtb2RlOiAiLGUuVGVuc29yRGVidWdNb2RlW2UudGVuc29yRGVidWdNb2RlXSwiKSAiKSx2KDEpLGIoIm5nSWYiLGUuaGFzRGVidWdUZW5zb3JWYWx1ZXMpfX1mdW5jdGlvbiBkU2Uobix0KXt9dmFyIE5ZPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLnRlbnNvckRlYnVnTW9kZT1Bby5VTlNQRUNJRklFRCx0aGlzLmhhc0RlYnVnVGVuc29yVmFsdWVzPSExLHRoaXMuZGVidWdUZW5zb3JWYWx1ZXM9bnVsbCx0aGlzLmRlYnVnVGVuc29yRHR5cGVzPW51bGwsdGhpcy5UZW5zb3JEZWJ1Z01vZGU9QW8sdGhpcy5wYXJzZURlYnVnVGVuc29yVmFsdWU9S0V9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbImV4ZWN1dGlvbi1kYXRhLWNvbXBvbmVudCJdXSxpbnB1dHM6e2ZvY3VzZWRFeGVjdXRpb25JbmRleDoiZm9jdXNlZEV4ZWN1dGlvbkluZGV4Iixmb2N1c2VkRXhlY3V0aW9uRGF0YToiZm9jdXNlZEV4ZWN1dGlvbkRhdGEiLHRlbnNvckRlYnVnTW9kZToidGVuc29yRGVidWdNb2RlIixoYXNEZWJ1Z1RlbnNvclZhbHVlczoiaGFzRGVidWdUZW5zb3JWYWx1ZXMiLGRlYnVnVGVuc29yVmFsdWVzOiJkZWJ1Z1RlbnNvclZhbHVlcyIsZGVidWdUZW5zb3JEdHlwZXM6ImRlYnVnVGVuc29yRHR5cGVzIn0sZGVjbHM6Nyx2YXJzOjMsY29uc3RzOltbMSwiZm9jdXMtZXhlY3V0aW9uLWNvbnRhaW5lciJdLFs0LCJuZ0lmIiwibmdJZkVsc2UiXSxbImxvYWRpbmdfc2VjdGlvbiIsIiJdLFsxLCJleGVjdXRpb24tZGF0YS1maWVsZCJdLFsxLCJleGVjdXRpb24tZGF0YS1rZXkiXSxbMSwiZXhlY3V0aW9uLWRhdGEtdmFsdWUiLCJvcC10eXBlIl0sWzEsImV4ZWN1dGlvbi1kYXRhLXZhbHVlIiwiaW5wdXQtdGVuc29ycyJdLFsxLCJleGVjdXRpb24tZGF0YS12YWx1ZSIsIm91dHB1dC10ZW5zb3JzIl0sWzEsImV4ZWN1dGlvbi1kYXRhLXZhbHVlIl0sWyJjbGFzcyIsIm91dHB1dC1zbG90cyIsNCwibmdJZiJdLFsxLCJvdXRwdXQtc2xvdHMiXSxbImNsYXNzIiwib3V0cHV0LXNsb3QtY29udGFpbmVyIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwib3V0cHV0LXNsb3QtY29udGFpbmVyIl0sWzEsIm91dHB1dC1zbG90LW51bWJlciJdLFsxLCJvdXRwdXQtc2xvdC1kZWJ1Zy10ZW5zb3ItdmFsdWUiXSxbMywiZGVidWdUZW5zb3JWYWx1ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGYoMCwiZGl2IiwwKSgxLCJkaXYiKSgyLCJzcGFuIiksVCgzKSxnKCkoKSxTKDQsY1NlLDIwLDUsImRpdiIsMSksUyg1LGRTZSwwLDAsIm5nLXRlbXBsYXRlIixudWxsLDIsanQpLGcoKSksMiZlKXtsZXQgcj1zdCg2KTt2KDMpLFZlKCIgUHl0aG9uIEV4ZWN1dGlvbiAjIixpLmZvY3VzZWRFeGVjdXRpb25JbmRleCwiICIpLHYoMSksYigibmdJZiIsbnVsbCE9PWkuZm9jdXNlZEV4ZWN1dGlvbkRhdGEpKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W25uLE5lLEpFXSxzdHlsZXM6WycuZGVidWctdGVuc29yLXZhbHVlcy10YWJsZVtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uZGVidWctdGVuc29yLXZhbHVlcy10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICB0ZFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzAwMDt0ZXh0LWFsaWduOmxlZnR9LmRlYnVnLXRlbnNvci12YWx1ZXMtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246bGVmdH0uZXhlY3V0aW9uLWRhdGEtZmllbGRbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH0uZXhlY3V0aW9uLWRhdGEta2V5W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jazttYXgtd2lkdGg6MTIwcHg7dGV4dC1hbGlnbjpyaWdodDt3aWR0aDoxMjBweH0uZXhlY3V0aW9uLWRhdGEtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1sZWZ0OjEwcHh9LmZvY3VzLWV4ZWN1dGlvbi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmY2M4MDtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MTJweDtoZWlnaHQ6MTIwcHg7cGFkZGluZzo1cHg7d2lkdGg6MzYwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmZvY3VzLWV4ZWN1dGlvbi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZm9jdXMtZXhlY3V0aW9uLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZTY1MTAwfS5vdXRwdXQtc2xvdHNbX25nY29udGVudC0lQ09NUCVde2hlaWdodDo2MHB4O292ZXJmbG93LXg6YXV0bztvdmVyZmxvdy15OmF1dG99Lm91dHB1dC1zbG90LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgI2ViZWJlYjttYXJnaW4tdG9wOjVweDtwYWRkaW5nOjJweCAwO3ZlcnRpY2FsLWFsaWduOnRvcH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub3V0cHV0LXNsb3QtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm91dHB1dC1zbG90LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzU1NX0ub3V0cHV0LXNsb3QtbnVtYmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrO2ZvbnQtZmFtaWx5OiJSb2JvdG8gTW9ubyIsbW9ub3NwYWNlfS5vdXRwdXQtc2xvdC1kZWJ1Zy10ZW5zb3ItdmFsdWVbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjNweCAwIDNweCAzMHB4fS5vdXRwdXQtdGVuc29yc1tfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDo1cHh9J119KSxufSkoKSxMWT0iVW5rbm93biBkdHlwZSIsQlk9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5mb2N1c2VkRXhlY3V0aW9uRGF0YSQ9dGhpcy5zdG9yZS5waXBlKHVuKEJoKSksdGhpcy50ZW5zb3JEZWJ1Z01vZGUkPXRoaXMuc3RvcmUucGlwZSh1bihXKEJoLGk9Pm51bGw9PT1pP0FvLlVOU1BFQ0lGSUVEOmkudGVuc29yX2RlYnVnX21vZGUpKSksdGhpcy5oYXNEZWJ1Z1RlbnNvclZhbHVlcyQ9dGhpcy5zdG9yZS5waXBlKHVuKFcoQmgsaT0+e2lmKG51bGw9PT1pfHxudWxsPT09aS5kZWJ1Z190ZW5zb3JfdmFsdWVzKXJldHVybiExO2ZvcihsZXQgciBvZiBpLmRlYnVnX3RlbnNvcl92YWx1ZXMpaWYobnVsbCE9PXImJnIubGVuZ3RoPjApcmV0dXJuITA7cmV0dXJuITF9KSkpLHRoaXMuZGVidWdUZW5zb3JWYWx1ZXMkPXRoaXMuc3RvcmUucGlwZSh1bihXKEJoLGk9Pm51bGw9PT1pP251bGw6aS5kZWJ1Z190ZW5zb3JfdmFsdWVzKSkpLHRoaXMuZGVidWdUZW5zb3JEdHlwZXMkPXRoaXMuc3RvcmUucGlwZSh1bihXKEJoLGk9PntpZihudWxsPT09aXx8bnVsbD09PWkuZGVidWdfdGVuc29yX3ZhbHVlc3x8aS50ZW5zb3JfZGVidWdfbW9kZSE9PUFvLkZVTExfSEVBTFRIJiZpLnRlbnNvcl9kZWJ1Z19tb2RlIT09QW8uU0hBUEUpcmV0dXJuIG51bGw7bGV0IHI9W107Zm9yKGxldCBvIG9mIGkuZGVidWdfdGVuc29yX3ZhbHVlcylpZihudWxsPT09bylyLnB1c2goTFkpO2Vsc2V7bGV0IGE9U3RyaW5nKGkudGVuc29yX2RlYnVnX21vZGU9PT1Bby5GVUxMX0hFQUxUSD9vWzJdOm9bMV0pO3IucHVzaChneVthXXx8TFkpfXJldHVybiByfSkpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhJZSkpfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbInRmLWRlYnVnZ2VyLXYyLWV4ZWN1dGlvbi1kYXRhIl1dLGlucHV0czp7Zm9jdXNlZEV4ZWN1dGlvbkluZGV4OiJmb2N1c2VkRXhlY3V0aW9uSW5kZXgifSxkZWNsczo2LHZhcnM6MTYsY29uc3RzOltbMywiZm9jdXNlZEV4ZWN1dGlvbkluZGV4IiwiZm9jdXNlZEV4ZWN1dGlvbkRhdGEiLCJ0ZW5zb3JEZWJ1Z01vZGUiLCJoYXNEZWJ1Z1RlbnNvclZhbHVlcyIsImRlYnVnVGVuc29yVmFsdWVzIiwiZGVidWdUZW5zb3JEdHlwZXMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihrKDAsImV4ZWN1dGlvbi1kYXRhLWNvbXBvbmVudCIsMCksVSgxLCJhc3luYyIpLFUoMiwiYXN5bmMiKSxVKDMsImFzeW5jIiksVSg0LCJhc3luYyIpLFUoNSwiYXN5bmMiKSksMiZlJiZiKCJmb2N1c2VkRXhlY3V0aW9uSW5kZXgiLGkuZm9jdXNlZEV4ZWN1dGlvbkluZGV4KSgiZm9jdXNlZEV4ZWN1dGlvbkRhdGEiLEcoMSw2LGkuZm9jdXNlZEV4ZWN1dGlvbkRhdGEkKSkoInRlbnNvckRlYnVnTW9kZSIsRygyLDgsaS50ZW5zb3JEZWJ1Z01vZGUkKSkoImhhc0RlYnVnVGVuc29yVmFsdWVzIixHKDMsMTAsaS5oYXNEZWJ1Z1RlbnNvclZhbHVlcyQpKSgiZGVidWdUZW5zb3JWYWx1ZXMiLEcoNCwxMixpLmRlYnVnVGVuc29yVmFsdWVzJCkpKCJkZWJ1Z1RlbnNvckR0eXBlcyIsRyg1LDE0LGkuZGVidWdUZW5zb3JEdHlwZXMkKSl9LGRlcGVuZGVuY2llczpbTlksY3RdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLGhTZT1bImtub2IiXSxtU2U9WyJ2YWx1ZUluZGljYXRvckNvbnRhaW5lciJdO2Z1bmN0aW9uIGZTZShuLHQpe2lmKDEmbiYmKGYoMCwiZGl2Iiw0LDUpKDIsImRpdiIsNikoMywic3BhbiIsNyksVCg0KSxnKCkoKSgpKSwyJm4pe2xldCBlPXcoKTt2KDQpLGt0KGUudmFsdWVJbmRpY2F0b3JUZXh0KX19dmFyIGdTZT1bInRyYWNrQWN0aXZlIl07ZnVuY3Rpb24gX1NlKG4sdCl7aWYoMSZuJiZrKDAsImRpdiIpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT10LmluZGV4LHI9dygzKTtYbygwPT09ZT8ibWRjLXNsaWRlcl9fdGljay1tYXJrLS1hY3RpdmUiOiJtZGMtc2xpZGVyX190aWNrLW1hcmstLWluYWN0aXZlIiksQnQoInRyYW5zZm9ybSIsci5fY2FsY1RpY2tNYXJrVHJhbnNmb3JtKGkpKX19ZnVuY3Rpb24gYlNlKG4sdCl7aWYoMSZuJiYoR3QoMCksUygxLF9TZSwxLDQsImRpdiIsMTEpLFd0KCkpLDImbil7bGV0IGU9dygyKTt2KDEpLGIoIm5nRm9yT2YiLGUuX3RpY2tNYXJrcyl9fWZ1bmN0aW9uIHZTZShuLHQpe2lmKDEmbiYmKGYoMCwiZGl2Iiw4LDkpLFMoMixiU2UsMiwxLCJuZy1jb250YWluZXIiLDEwKSxnKCkpLDImbil7bGV0IGU9dygpO3YoMiksYigibmdJZiIsZS5fY2FjaGVkV2lkdGgpfX1mdW5jdGlvbiB5U2Uobix0KXtpZigxJm4mJmsoMCwibWF0LXNsaWRlci12aXN1YWwtdGh1bWIiLDcpLDImbil7bGV0IGU9dygpO2IoImRpc2NyZXRlIixlLmRpc2NyZXRlKSgidGh1bWJQb3NpdGlvbiIsMSkoInZhbHVlSW5kaWNhdG9yVGV4dCIsZS5zdGFydFZhbHVlSW5kaWNhdG9yVGV4dCl9fXZhciB4U2U9WyIqIl0sdFQ9bmV3IHRlKCJfTWF0U2xpZGVyIiksVlk9bmV3IHRlKCJfTWF0U2xpZGVyVGh1bWIiKSxIWT1uZXcgdGUoIl9NYXRTbGlkZXJSYW5nZVRodW1iIikselk9bmV3IHRlKCJfTWF0U2xpZGVyVmlzdWFsVGh1bWIiKSxDU2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLl9jZHI9ZSx0aGlzLl9uZ1pvbmU9aSx0aGlzLl9zbGlkZXI9byx0aGlzLl9pc0hvdmVyZWQ9ITEsdGhpcy5faXNBY3RpdmU9ITEsdGhpcy5faXNWYWx1ZUluZGljYXRvclZpc2libGU9ITEsdGhpcy5fb25Qb2ludGVyTW92ZT1hPT57aWYodGhpcy5fc2xpZGVySW5wdXQuX2lzRm9jdXNlZClyZXR1cm47bGV0IHM9dGhpcy5faG9zdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbD10aGlzLl9pc1NsaWRlclRodW1iSG92ZXJlZChhLHMpO3RoaXMuX2lzSG92ZXJlZD1sLGw/dGhpcy5fc2hvd0hvdmVyUmlwcGxlKCk6dGhpcy5faGlkZVJpcHBsZSh0aGlzLl9ob3ZlclJpcHBsZVJlZil9LHRoaXMuX29uTW91c2VMZWF2ZT0oKT0+e3RoaXMuX2lzSG92ZXJlZD0hMSx0aGlzLl9oaWRlUmlwcGxlKHRoaXMuX2hvdmVyUmlwcGxlUmVmKX0sdGhpcy5fb25Gb2N1cz0oKT0+e3RoaXMuX2hpZGVSaXBwbGUodGhpcy5faG92ZXJSaXBwbGVSZWYpLHRoaXMuX3Nob3dGb2N1c1JpcHBsZSgpLHRoaXMuX2hvc3RFbGVtZW50LmNsYXNzTGlzdC5hZGQoIm1kYy1zbGlkZXJfX3RodW1iLS1mb2N1c2VkIil9LHRoaXMuX29uQmx1cj0oKT0+e3RoaXMuX2lzQWN0aXZlfHx0aGlzLl9oaWRlUmlwcGxlKHRoaXMuX2ZvY3VzUmlwcGxlUmVmKSx0aGlzLl9pc0hvdmVyZWQmJnRoaXMuX3Nob3dIb3ZlclJpcHBsZSgpLHRoaXMuX2hvc3RFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoIm1kYy1zbGlkZXJfX3RodW1iLS1mb2N1c2VkIil9LHRoaXMuX29uRHJhZ1N0YXJ0PSgpPT57dGhpcy5faXNBY3RpdmU9ITAsdGhpcy5fc2hvd0FjdGl2ZVJpcHBsZSgpfSx0aGlzLl9vbkRyYWdFbmQ9KCk9Pnt0aGlzLl9pc0FjdGl2ZT0hMSx0aGlzLl9oaWRlUmlwcGxlKHRoaXMuX2FjdGl2ZVJpcHBsZVJlZiksdGhpcy5fc2xpZGVySW5wdXQuX2lzRm9jdXNlZHx8dGhpcy5faGlkZVJpcHBsZSh0aGlzLl9mb2N1c1JpcHBsZVJlZil9LHRoaXMuX2hvc3RFbGVtZW50PXIubmF0aXZlRWxlbWVudH1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9yaXBwbGUucmFkaXVzPTI0LHRoaXMuX3NsaWRlcklucHV0PXRoaXMuX3NsaWRlci5fZ2V0SW5wdXQodGhpcy50aHVtYlBvc2l0aW9uKSx0aGlzLl9zbGlkZXJJbnB1dEVsPXRoaXMuX3NsaWRlcklucHV0Ll9ob3N0RWxlbWVudDtsZXQgZT10aGlzLl9zbGlkZXJJbnB1dEVsO3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2UuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLHRoaXMuX29uUG9pbnRlck1vdmUpLGUuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLHRoaXMuX29uRHJhZ1N0YXJ0KSxlLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsdGhpcy5fb25EcmFnRW5kKSxlLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJsZWF2ZSIsdGhpcy5fb25Nb3VzZUxlYXZlKSxlLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9vbkZvY3VzKSxlLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX29uQmx1cil9KX1uZ09uRGVzdHJveSgpe2xldCBlPXRoaXMuX3NsaWRlcklucHV0RWw7ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsdGhpcy5fb25Qb2ludGVyTW92ZSksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsdGhpcy5fb25EcmFnU3RhcnQpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIix0aGlzLl9vbkRyYWdFbmQpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmxlYXZlIix0aGlzLl9vbk1vdXNlTGVhdmUpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuX29uRm9jdXMpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsdGhpcy5fb25CbHVyKX1fc2hvd0hvdmVyUmlwcGxlKCl7dGhpcy5faXNTaG93aW5nUmlwcGxlKHRoaXMuX2hvdmVyUmlwcGxlUmVmKXx8KHRoaXMuX2hvdmVyUmlwcGxlUmVmPXRoaXMuX3Nob3dSaXBwbGUoe2VudGVyRHVyYXRpb246MCxleGl0RHVyYXRpb246MH0pLHRoaXMuX2hvdmVyUmlwcGxlUmVmPy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoIm1hdC1tZGMtc2xpZGVyLWhvdmVyLXJpcHBsZSIpKX1fc2hvd0ZvY3VzUmlwcGxlKCl7dGhpcy5faXNTaG93aW5nUmlwcGxlKHRoaXMuX2ZvY3VzUmlwcGxlUmVmKXx8KHRoaXMuX2ZvY3VzUmlwcGxlUmVmPXRoaXMuX3Nob3dSaXBwbGUoe2VudGVyRHVyYXRpb246MCxleGl0RHVyYXRpb246MH0sITApLHRoaXMuX2ZvY3VzUmlwcGxlUmVmPy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoIm1hdC1tZGMtc2xpZGVyLWZvY3VzLXJpcHBsZSIpKX1fc2hvd0FjdGl2ZVJpcHBsZSgpe3RoaXMuX2lzU2hvd2luZ1JpcHBsZSh0aGlzLl9hY3RpdmVSaXBwbGVSZWYpfHwodGhpcy5fYWN0aXZlUmlwcGxlUmVmPXRoaXMuX3Nob3dSaXBwbGUoe2VudGVyRHVyYXRpb246MjI1LGV4aXREdXJhdGlvbjo0MDB9KSx0aGlzLl9hY3RpdmVSaXBwbGVSZWY/LmVsZW1lbnQuY2xhc3NMaXN0LmFkZCgibWF0LW1kYy1zbGlkZXItYWN0aXZlLXJpcHBsZSIpKX1faXNTaG93aW5nUmlwcGxlKGUpe3JldHVybiAwPT09ZT8uc3RhdGV8fDE9PT1lPy5zdGF0ZX1fc2hvd1JpcHBsZShlLGkpe2lmKCF0aGlzLl9zbGlkZXIuZGlzYWJsZWQmJih0aGlzLl9zaG93VmFsdWVJbmRpY2F0b3IoKSx0aGlzLl9zbGlkZXIuX2lzUmFuZ2UmJnRoaXMuX3NsaWRlci5fZ2V0VGh1bWIoMT09PXRoaXMudGh1bWJQb3NpdGlvbj8yOjEpLl9zaG93VmFsdWVJbmRpY2F0b3IoKSwhdGhpcy5fc2xpZGVyLl9nbG9iYWxSaXBwbGVPcHRpb25zPy5kaXNhYmxlZHx8aSkpcmV0dXJuIHRoaXMuX3JpcHBsZS5sYXVuY2goe2FuaW1hdGlvbjp0aGlzLl9zbGlkZXIuX25vb3BBbmltYXRpb25zP3tlbnRlckR1cmF0aW9uOjAsZXhpdER1cmF0aW9uOjB9OmUsY2VudGVyZWQ6ITAscGVyc2lzdGVudDohMH0pfV9oaWRlUmlwcGxlKGUpe2lmKGU/LmZhZGVPdXQoKSx0aGlzLl9pc1Nob3dpbmdBbnlSaXBwbGUoKSlyZXR1cm47dGhpcy5fc2xpZGVyLl9pc1JhbmdlfHx0aGlzLl9oaWRlVmFsdWVJbmRpY2F0b3IoKTtsZXQgaT10aGlzLl9nZXRTaWJsaW5nKCk7aS5faXNTaG93aW5nQW55UmlwcGxlKCl8fCh0aGlzLl9oaWRlVmFsdWVJbmRpY2F0b3IoKSxpLl9oaWRlVmFsdWVJbmRpY2F0b3IoKSl9X3Nob3dWYWx1ZUluZGljYXRvcigpe3RoaXMuX2hvc3RFbGVtZW50LmNsYXNzTGlzdC5hZGQoIm1kYy1zbGlkZXJfX3RodW1iLS13aXRoLWluZGljYXRvciIpfV9oaWRlVmFsdWVJbmRpY2F0b3IoKXt0aGlzLl9ob3N0RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCJtZGMtc2xpZGVyX190aHVtYi0td2l0aC1pbmRpY2F0b3IiKX1fZ2V0U2libGluZygpe3JldHVybiB0aGlzLl9zbGlkZXIuX2dldFRodW1iKDE9PT10aGlzLnRodW1iUG9zaXRpb24/MjoxKX1fZ2V0VmFsdWVJbmRpY2F0b3JDb250YWluZXIoKXtyZXR1cm4gdGhpcy5fdmFsdWVJbmRpY2F0b3JDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnR9X2dldEtub2IoKXtyZXR1cm4gdGhpcy5fa25vYi5uYXRpdmVFbGVtZW50fV9pc1Nob3dpbmdBbnlSaXBwbGUoKXtyZXR1cm4gdGhpcy5faXNTaG93aW5nUmlwcGxlKHRoaXMuX2hvdmVyUmlwcGxlUmVmKXx8dGhpcy5faXNTaG93aW5nUmlwcGxlKHRoaXMuX2ZvY3VzUmlwcGxlUmVmKXx8dGhpcy5faXNTaG93aW5nUmlwcGxlKHRoaXMuX2FjdGl2ZVJpcHBsZVJlZil9X2lzU2xpZGVyVGh1bWJIb3ZlcmVkKGUsaSl7bGV0IHI9aS53aWR0aC8yLGw9ZS5jbGllbnRZLShpLnkrcik7cmV0dXJuIE1hdGgucG93KGUuY2xpZW50WC0oaS54K3IpLDIpK01hdGgucG93KGwsMik8TWF0aC5wb3cociwyKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhRdCksQyhvdCksQyh4ZSksQyh0VCkpfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1zbGlkZXItdmlzdWFsLXRodW1iIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKFVlKEtpLDUpLFVlKGhTZSw1KSxVZShtU2UsNSkpLDImZSl7bGV0IHI7YmUocj12ZSgpKSYmKGkuX3JpcHBsZT1yLmZpcnN0KSxiZShyPXZlKCkpJiYoaS5fa25vYj1yLmZpcnN0KSxiZShyPXZlKCkpJiYoaS5fdmFsdWVJbmRpY2F0b3JDb250YWluZXI9ci5maXJzdCl9fSxob3N0QXR0cnM6WzEsIm1kYy1zbGlkZXJfX3RodW1iIiwibWF0LW1kYy1zbGlkZXItdmlzdWFsLXRodW1iIl0saW5wdXRzOntkaXNjcmV0ZToiZGlzY3JldGUiLHRodW1iUG9zaXRpb246InRodW1iUG9zaXRpb24iLHZhbHVlSW5kaWNhdG9yVGV4dDoidmFsdWVJbmRpY2F0b3JUZXh0In0sZmVhdHVyZXM6W1Z0KFt7cHJvdmlkZTp6WSx1c2VFeGlzdGluZzpufV0pXSxkZWNsczo0LHZhcnM6Mixjb25zdHM6W1siY2xhc3MiLCJtZGMtc2xpZGVyX192YWx1ZS1pbmRpY2F0b3ItY29udGFpbmVyIiw0LCJuZ0lmIl0sWzEsIm1kYy1zbGlkZXJfX3RodW1iLWtub2IiXSxbImtub2IiLCIiXSxbIm1hdFJpcHBsZSIsIiIsMSwibWF0LW1kYy1mb2N1cy1pbmRpY2F0b3IiLDMsIm1hdFJpcHBsZURpc2FibGVkIl0sWzEsIm1kYy1zbGlkZXJfX3ZhbHVlLWluZGljYXRvci1jb250YWluZXIiXSxbInZhbHVlSW5kaWNhdG9yQ29udGFpbmVyIiwiIl0sWzEsIm1kYy1zbGlkZXJfX3ZhbHVlLWluZGljYXRvciJdLFsxLCJtZGMtc2xpZGVyX192YWx1ZS1pbmRpY2F0b3ItdGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKFMoMCxmU2UsNSwxLCJkaXYiLDApLGsoMSwiZGl2IiwxLDIpKDMsImRpdiIsMykpLDImZSYmKGIoIm5nSWYiLGkuZGlzY3JldGUpLHYoMyksYigibWF0UmlwcGxlRGlzYWJsZWQiLCEwKSl9LGRlcGVuZGVuY2llczpbTmUsS2ldLHN0eWxlczpbIi5tYXQtbWRjLXNsaWRlci12aXN1YWwtdGh1bWIgLm1hdC1yaXBwbGV7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0ubWF0LW1kYy1zbGlkZXIgLm1kYy1zbGlkZXJfX3RpY2stbWFya3N7anVzdGlmeS1jb250ZW50OnN0YXJ0fS5tYXQtbWRjLXNsaWRlciAubWRjLXNsaWRlcl9fdGljay1tYXJrcyAubWRjLXNsaWRlcl9fdGljay1tYXJrLS1hY3RpdmUsLm1hdC1tZGMtc2xpZGVyIC5tZGMtc2xpZGVyX190aWNrLW1hcmtzIC5tZGMtc2xpZGVyX190aWNrLW1hcmstLWluYWN0aXZle3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MnB4fSJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLE1TZT1LbyhnbyhjbGFzc3tjb25zdHJ1Y3RvcihuKXt0aGlzLl9lbGVtZW50UmVmPW59fSksInByaW1hcnkiKSxKdT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgTVNle2dldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoZSl7dGhpcy5fZGlzYWJsZWQ9dnQoZSk7bGV0IGk9dGhpcy5fZ2V0SW5wdXQoMikscj10aGlzLl9nZXRJbnB1dCgxKTtpJiYoaS5kaXNhYmxlZD10aGlzLl9kaXNhYmxlZCksciYmKHIuZGlzYWJsZWQ9dGhpcy5fZGlzYWJsZWQpfWdldCBkaXNjcmV0ZSgpe3JldHVybiB0aGlzLl9kaXNjcmV0ZX1zZXQgZGlzY3JldGUoZSl7dGhpcy5fZGlzY3JldGU9dnQoZSksdGhpcy5fdXBkYXRlVmFsdWVJbmRpY2F0b3JVSXMoKX1nZXQgc2hvd1RpY2tNYXJrcygpe3JldHVybiB0aGlzLl9zaG93VGlja01hcmtzfXNldCBzaG93VGlja01hcmtzKGUpe3RoaXMuX3Nob3dUaWNrTWFya3M9dnQoZSl9Z2V0IG1pbigpe3JldHVybiB0aGlzLl9taW59c2V0IG1pbihlKXtsZXQgaT1taShlLHRoaXMuX21pbik7dGhpcy5fbWluIT09aSYmdGhpcy5fdXBkYXRlTWluKGkpfV91cGRhdGVNaW4oZSl7bGV0IGk9dGhpcy5fbWluO3RoaXMuX21pbj1lLHRoaXMuX2lzUmFuZ2U/dGhpcy5fdXBkYXRlTWluUmFuZ2Uoe29sZDppLG5ldzplfSk6dGhpcy5fdXBkYXRlTWluTm9uUmFuZ2UoZSksdGhpcy5fb25NaW5NYXhPclN0ZXBDaGFuZ2UoKX1fdXBkYXRlTWluUmFuZ2UoZSl7bGV0IGk9dGhpcy5fZ2V0SW5wdXQoMikscj10aGlzLl9nZXRJbnB1dCgxKSxvPWkudmFsdWUsYT1yLnZhbHVlO3IubWluPWUubmV3LGkubWluPU1hdGgubWF4KGUubmV3LHIudmFsdWUpLHIubWF4PU1hdGgubWluKGkubWF4LGkudmFsdWUpLHIuX3VwZGF0ZVdpZHRoSW5hY3RpdmUoKSxpLl91cGRhdGVXaWR0aEluYWN0aXZlKCksZS5uZXc8ZS5vbGQ/dGhpcy5fb25UcmFuc2xhdGVYQ2hhbmdlQnlTaWRlRWZmZWN0KGkscik6dGhpcy5fb25UcmFuc2xhdGVYQ2hhbmdlQnlTaWRlRWZmZWN0KHIsaSksbyE9PWkudmFsdWUmJnRoaXMuX29uVmFsdWVDaGFuZ2UoaSksYSE9PXIudmFsdWUmJnRoaXMuX29uVmFsdWVDaGFuZ2Uocil9X3VwZGF0ZU1pbk5vblJhbmdlKGUpe2xldCBpPXRoaXMuX2dldElucHV0KDIpO2lmKGkpe2xldCByPWkudmFsdWU7aS5taW49ZSxpLl91cGRhdGVUaHVtYlVJQnlWYWx1ZSgpLHRoaXMuX3VwZGF0ZVRyYWNrVUkoaSksciE9PWkudmFsdWUmJnRoaXMuX29uVmFsdWVDaGFuZ2UoaSl9fWdldCBtYXgoKXtyZXR1cm4gdGhpcy5fbWF4fXNldCBtYXgoZSl7bGV0IGk9bWkoZSx0aGlzLl9tYXgpO3RoaXMuX21heCE9PWkmJnRoaXMuX3VwZGF0ZU1heChpKX1fdXBkYXRlTWF4KGUpe2xldCBpPXRoaXMuX21heDt0aGlzLl9tYXg9ZSx0aGlzLl9pc1JhbmdlP3RoaXMuX3VwZGF0ZU1heFJhbmdlKHtvbGQ6aSxuZXc6ZX0pOnRoaXMuX3VwZGF0ZU1heE5vblJhbmdlKGUpLHRoaXMuX29uTWluTWF4T3JTdGVwQ2hhbmdlKCl9X3VwZGF0ZU1heFJhbmdlKGUpe2xldCBpPXRoaXMuX2dldElucHV0KDIpLHI9dGhpcy5fZ2V0SW5wdXQoMSksbz1pLnZhbHVlLGE9ci52YWx1ZTtpLm1heD1lLm5ldyxyLm1heD1NYXRoLm1pbihlLm5ldyxpLnZhbHVlKSxpLm1pbj1yLnZhbHVlLGkuX3VwZGF0ZVdpZHRoSW5hY3RpdmUoKSxyLl91cGRhdGVXaWR0aEluYWN0aXZlKCksZS5uZXc+ZS5vbGQ/dGhpcy5fb25UcmFuc2xhdGVYQ2hhbmdlQnlTaWRlRWZmZWN0KHIsaSk6dGhpcy5fb25UcmFuc2xhdGVYQ2hhbmdlQnlTaWRlRWZmZWN0KGksciksbyE9PWkudmFsdWUmJnRoaXMuX29uVmFsdWVDaGFuZ2UoaSksYSE9PXIudmFsdWUmJnRoaXMuX29uVmFsdWVDaGFuZ2Uocil9X3VwZGF0ZU1heE5vblJhbmdlKGUpe2xldCBpPXRoaXMuX2dldElucHV0KDIpO2lmKGkpe2xldCByPWkudmFsdWU7aS5tYXg9ZSxpLl91cGRhdGVUaHVtYlVJQnlWYWx1ZSgpLHRoaXMuX3VwZGF0ZVRyYWNrVUkoaSksciE9PWkudmFsdWUmJnRoaXMuX29uVmFsdWVDaGFuZ2UoaSl9fWdldCBzdGVwKCl7cmV0dXJuIHRoaXMuX3N0ZXB9c2V0IHN0ZXAoZSl7bGV0IGk9bWkoZSx0aGlzLl9zdGVwKTt0aGlzLl9zdGVwIT09aSYmdGhpcy5fdXBkYXRlU3RlcChpKX1fdXBkYXRlU3RlcChlKXt0aGlzLl9zdGVwPWUsdGhpcy5faXNSYW5nZT90aGlzLl91cGRhdGVTdGVwUmFuZ2UoKTp0aGlzLl91cGRhdGVTdGVwTm9uUmFuZ2UoKSx0aGlzLl9vbk1pbk1heE9yU3RlcENoYW5nZSgpfV91cGRhdGVTdGVwUmFuZ2UoKXtsZXQgZT10aGlzLl9nZXRJbnB1dCgyKSxpPXRoaXMuX2dldElucHV0KDEpLHI9ZS52YWx1ZSxvPWkudmFsdWUsYT1pLnZhbHVlO2UubWluPXRoaXMuX21pbixpLm1heD10aGlzLl9tYXgsZS5zdGVwPXRoaXMuX3N0ZXAsaS5zdGVwPXRoaXMuX3N0ZXAsdGhpcy5fcGxhdGZvcm0uU0FGQVJJJiYoZS52YWx1ZT1lLnZhbHVlLGkudmFsdWU9aS52YWx1ZSksZS5taW49TWF0aC5tYXgodGhpcy5fbWluLGkudmFsdWUpLGkubWF4PU1hdGgubWluKHRoaXMuX21heCxlLnZhbHVlKSxpLl91cGRhdGVXaWR0aEluYWN0aXZlKCksZS5fdXBkYXRlV2lkdGhJbmFjdGl2ZSgpLGUudmFsdWU8YT90aGlzLl9vblRyYW5zbGF0ZVhDaGFuZ2VCeVNpZGVFZmZlY3QoaSxlKTp0aGlzLl9vblRyYW5zbGF0ZVhDaGFuZ2VCeVNpZGVFZmZlY3QoZSxpKSxyIT09ZS52YWx1ZSYmdGhpcy5fb25WYWx1ZUNoYW5nZShlKSxvIT09aS52YWx1ZSYmdGhpcy5fb25WYWx1ZUNoYW5nZShpKX1fdXBkYXRlU3RlcE5vblJhbmdlKCl7bGV0IGU9dGhpcy5fZ2V0SW5wdXQoMik7aWYoZSl7bGV0IGk9ZS52YWx1ZTtlLnN0ZXA9dGhpcy5fc3RlcCx0aGlzLl9wbGF0Zm9ybS5TQUZBUkkmJihlLnZhbHVlPWUudmFsdWUpLGUuX3VwZGF0ZVRodW1iVUlCeVZhbHVlKCksaSE9PWUudmFsdWUmJnRoaXMuX29uVmFsdWVDaGFuZ2UoZSl9fWNvbnN0cnVjdG9yKGUsaSxyLG8sYSxzLGwpe3N1cGVyKG8pLHRoaXMuX25nWm9uZT1lLHRoaXMuX2Nkcj1pLHRoaXMuX3BsYXRmb3JtPXIsdGhpcy5fZGlyPWEsdGhpcy5fZ2xvYmFsUmlwcGxlT3B0aW9ucz1zLHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuX2Rpc2NyZXRlPSExLHRoaXMuX3Nob3dUaWNrTWFya3M9ITEsdGhpcy5fbWluPTAsdGhpcy5fbWF4PTEwMCx0aGlzLl9zdGVwPTAsdGhpcy5kaXNwbGF5V2l0aD1jPT5gJHtjfWAsdGhpcy5fcmlwcGxlUmFkaXVzPTI0LHRoaXMuc3RhcnRWYWx1ZUluZGljYXRvclRleHQ9IiIsdGhpcy5lbmRWYWx1ZUluZGljYXRvclRleHQ9IiIsdGhpcy5faXNSYW5nZT0hMSx0aGlzLl9pc1J0bD0hMSx0aGlzLl9oYXNWaWV3SW5pdGlhbGl6ZWQ9ITEsdGhpcy5fdGlja01hcmtUcmFja1dpZHRoPTAsdGhpcy5faGFzQW5pbWF0aW9uPSExLHRoaXMuX3Jlc2l6ZVRpbWVyPW51bGwsdGhpcy5fa25vYlJhZGl1cz04LHRoaXMuX3RodW1ic092ZXJsYXA9ITEsdGhpcy5fbm9vcEFuaW1hdGlvbnM9Ik5vb3BBbmltYXRpb25zIj09PWwsdGhpcy5fZGlyQ2hhbmdlU3Vic2NyaXB0aW9uPXRoaXMuX2Rpci5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT50aGlzLl9vbkRpckNoYW5nZSgpKSx0aGlzLl9pc1J0bD0icnRsIj09PXRoaXMuX2Rpci52YWx1ZX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJnRoaXMuX3VwZGF0ZURpbWVuc2lvbnMoKTtsZXQgZT10aGlzLl9nZXRJbnB1dCgyKSxpPXRoaXMuX2dldElucHV0KDEpO3RoaXMuX2lzUmFuZ2U9ISFlJiYhIWksdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtsZXQgcj10aGlzLl9nZXRUaHVtYigyKTt0aGlzLl9yaXBwbGVSYWRpdXM9ci5fcmlwcGxlLnJhZGl1cyx0aGlzLl9pbnB1dFBhZGRpbmc9dGhpcy5fcmlwcGxlUmFkaXVzLXRoaXMuX2tub2JSYWRpdXMsdGhpcy5faW5wdXRPZmZzZXQ9dGhpcy5fa25vYlJhZGl1cyx0aGlzLl9pc1JhbmdlP3RoaXMuX2luaXRVSVJhbmdlKGUsaSk6dGhpcy5faW5pdFVJTm9uUmFuZ2UoZSksdGhpcy5fdXBkYXRlVHJhY2tVSShlKSx0aGlzLl91cGRhdGVUaWNrTWFya1VJKCksdGhpcy5fdXBkYXRlVGlja01hcmtUcmFja1VJKCksdGhpcy5fb2JzZXJ2ZUhvc3RSZXNpemUoKSx0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpfV9pbml0VUlOb25SYW5nZShlKXtlLmluaXRQcm9wcygpLGUuaW5pdFVJKCksdGhpcy5fdXBkYXRlVmFsdWVJbmRpY2F0b3JVSShlKSx0aGlzLl9oYXNWaWV3SW5pdGlhbGl6ZWQ9ITAsZS5fdXBkYXRlVGh1bWJVSUJ5VmFsdWUoKX1faW5pdFVJUmFuZ2UoZSxpKXtlLmluaXRQcm9wcygpLGUuaW5pdFVJKCksaS5pbml0UHJvcHMoKSxpLmluaXRVSSgpLGUuX3VwZGF0ZU1pbk1heCgpLGkuX3VwZGF0ZU1pbk1heCgpLGUuX3VwZGF0ZVN0YXRpY1N0eWxlcygpLGkuX3VwZGF0ZVN0YXRpY1N0eWxlcygpLHRoaXMuX3VwZGF0ZVZhbHVlSW5kaWNhdG9yVUlzKCksdGhpcy5faGFzVmlld0luaXRpYWxpemVkPSEwLGUuX3VwZGF0ZVRodW1iVUlCeVZhbHVlKCksaS5fdXBkYXRlVGh1bWJVSUJ5VmFsdWUoKX1uZ09uRGVzdHJveSgpe3RoaXMuX2RpckNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Jlc2l6ZU9ic2VydmVyPy5kaXNjb25uZWN0KCksdGhpcy5fcmVzaXplT2JzZXJ2ZXI9bnVsbH1fb25EaXJDaGFuZ2UoKXt0aGlzLl9pc1J0bD0icnRsIj09PXRoaXMuX2Rpci52YWx1ZSx0aGlzLl9pc1JhbmdlP3RoaXMuX29uRGlyQ2hhbmdlUmFuZ2UoKTp0aGlzLl9vbkRpckNoYW5nZU5vblJhbmdlKCksdGhpcy5fdXBkYXRlVGlja01hcmtVSSgpfV9vbkRpckNoYW5nZVJhbmdlKCl7bGV0IGU9dGhpcy5fZ2V0SW5wdXQoMiksaT10aGlzLl9nZXRJbnB1dCgxKTtlLl9zZXRJc0xlZnRUaHVtYigpLGkuX3NldElzTGVmdFRodW1iKCksZS50cmFuc2xhdGVYPWUuX2NhbGNUcmFuc2xhdGVYQnlWYWx1ZSgpLGkudHJhbnNsYXRlWD1pLl9jYWxjVHJhbnNsYXRlWEJ5VmFsdWUoKSxlLl91cGRhdGVTdGF0aWNTdHlsZXMoKSxpLl91cGRhdGVTdGF0aWNTdHlsZXMoKSxlLl91cGRhdGVXaWR0aEluYWN0aXZlKCksaS5fdXBkYXRlV2lkdGhJbmFjdGl2ZSgpLGUuX3VwZGF0ZVRodW1iVUlCeVZhbHVlKCksaS5fdXBkYXRlVGh1bWJVSUJ5VmFsdWUoKX1fb25EaXJDaGFuZ2VOb25SYW5nZSgpe3RoaXMuX2dldElucHV0KDIpLl91cGRhdGVUaHVtYlVJQnlWYWx1ZSgpfV9vYnNlcnZlSG9zdFJlc2l6ZSgpe3R5cGVvZiBSZXNpemVPYnNlcnZlcj4idSJ8fCFSZXNpemVPYnNlcnZlcnx8dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fcmVzaXplT2JzZXJ2ZXI9bmV3IFJlc2l6ZU9ic2VydmVyKCgpPT57dGhpcy5faXNBY3RpdmUoKXx8KHRoaXMuX3Jlc2l6ZVRpbWVyJiZjbGVhclRpbWVvdXQodGhpcy5fcmVzaXplVGltZXIpLHRoaXMuX29uUmVzaXplKCkpfSksdGhpcy5fcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpfSl9X2lzQWN0aXZlKCl7cmV0dXJuIHRoaXMuX2dldFRodW1iKDEpLl9pc0FjdGl2ZXx8dGhpcy5fZ2V0VGh1bWIoMikuX2lzQWN0aXZlfV9nZXRWYWx1ZShlPTIpe2xldCBpPXRoaXMuX2dldElucHV0KGUpO3JldHVybiBpP2kudmFsdWU6dGhpcy5taW59X3NraXBVcGRhdGUoKXtyZXR1cm4hKCF0aGlzLl9nZXRJbnB1dCgxKT8uX3NraXBVSVVwZGF0ZSYmIXRoaXMuX2dldElucHV0KDIpPy5fc2tpcFVJVXBkYXRlKX1fdXBkYXRlRGltZW5zaW9ucygpe3RoaXMuX2NhY2hlZFdpZHRoPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCx0aGlzLl9jYWNoZWRMZWZ0PXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0fV9zZXRUcmFja0FjdGl2ZVN0eWxlcyhlKXtsZXQgaT10aGlzLl90cmFja0FjdGl2ZS5uYXRpdmVFbGVtZW50LnN0eWxlLHI9ZS5sZWZ0IT09aS5sZWZ0JiZlLnJpZ2h0IT09aS5yaWdodDtpLmxlZnQ9ZS5sZWZ0LGkucmlnaHQ9ZS5yaWdodCxpLnRyYW5zZm9ybU9yaWdpbj1lLnRyYW5zZm9ybU9yaWdpbixyPyh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgibWF0LW1kYy1zbGlkZXItZGlzYWJsZS10cmFjay1hbmltYXRpb24iKSx0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZShMdCgxKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoIm1hdC1tZGMtc2xpZGVyLWRpc2FibGUtdHJhY2stYW5pbWF0aW9uIiksaS50cmFuc2Zvcm09ZS50cmFuc2Zvcm19KSk6aS50cmFuc2Zvcm09ZS50cmFuc2Zvcm19X2NhbGNUaWNrTWFya1RyYW5zZm9ybShlKXtyZXR1cm5gdHJhbnNsYXRlWCgke2UqKHRoaXMuX3RpY2tNYXJrVHJhY2tXaWR0aC8odGhpcy5fdGlja01hcmtzLmxlbmd0aC0xKSl9cHhgfV9vblRyYW5zbGF0ZVhDaGFuZ2UoZSl7IXRoaXMuX2hhc1ZpZXdJbml0aWFsaXplZHx8KHRoaXMuX3VwZGF0ZVRodW1iVUkoZSksdGhpcy5fdXBkYXRlVHJhY2tVSShlKSx0aGlzLl91cGRhdGVPdmVybGFwcGluZ1RodW1iVUkoZSkpfV9vblRyYW5zbGF0ZVhDaGFuZ2VCeVNpZGVFZmZlY3QoZSxpKXshdGhpcy5faGFzVmlld0luaXRpYWxpemVkfHwoZS5fdXBkYXRlVGh1bWJVSUJ5VmFsdWUoKSxpLl91cGRhdGVUaHVtYlVJQnlWYWx1ZSgpKX1fb25WYWx1ZUNoYW5nZShlKXshdGhpcy5faGFzVmlld0luaXRpYWxpemVkfHwodGhpcy5fdXBkYXRlVmFsdWVJbmRpY2F0b3JVSShlKSx0aGlzLl91cGRhdGVUaWNrTWFya1VJKCksdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKSl9X29uTWluTWF4T3JTdGVwQ2hhbmdlKCl7IXRoaXMuX2hhc1ZpZXdJbml0aWFsaXplZHx8KHRoaXMuX3VwZGF0ZVRpY2tNYXJrVUkoKSx0aGlzLl91cGRhdGVUaWNrTWFya1RyYWNrVUkoKSx0aGlzLl9jZHIubWFya0ZvckNoZWNrKCkpfV9vblJlc2l6ZSgpe2lmKHRoaXMuX2hhc1ZpZXdJbml0aWFsaXplZCl7aWYodGhpcy5fdXBkYXRlRGltZW5zaW9ucygpLHRoaXMuX2lzUmFuZ2Upe2xldCBlPXRoaXMuX2dldElucHV0KDIpLGk9dGhpcy5fZ2V0SW5wdXQoMSk7ZS5fdXBkYXRlVGh1bWJVSUJ5VmFsdWUoKSxpLl91cGRhdGVUaHVtYlVJQnlWYWx1ZSgpLGUuX3VwZGF0ZVN0YXRpY1N0eWxlcygpLGkuX3VwZGF0ZVN0YXRpY1N0eWxlcygpLGUuX3VwZGF0ZU1pbk1heCgpLGkuX3VwZGF0ZU1pbk1heCgpLGUuX3VwZGF0ZVdpZHRoSW5hY3RpdmUoKSxpLl91cGRhdGVXaWR0aEluYWN0aXZlKCl9ZWxzZXtsZXQgZT10aGlzLl9nZXRJbnB1dCgyKTtlJiZlLl91cGRhdGVUaHVtYlVJQnlWYWx1ZSgpfXRoaXMuX3VwZGF0ZVRpY2tNYXJrVUkoKSx0aGlzLl91cGRhdGVUaWNrTWFya1RyYWNrVUkoKSx0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpfX1fYXJlVGh1bWJzT3ZlcmxhcHBpbmcoKXtsZXQgZT10aGlzLl9nZXRJbnB1dCgxKSxpPXRoaXMuX2dldElucHV0KDIpO3JldHVybiEoIWV8fCFpKSYmaS50cmFuc2xhdGVYLWUudHJhbnNsYXRlWDwyMH1fdXBkYXRlT3ZlcmxhcHBpbmdUaHVtYkNsYXNzTmFtZXMoZSl7bGV0IGk9ZS5nZXRTaWJsaW5nKCkscj10aGlzLl9nZXRUaHVtYihlLnRodW1iUG9zaXRpb24pO3RoaXMuX2dldFRodW1iKGkudGh1bWJQb3NpdGlvbikuX2hvc3RFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoIm1kYy1zbGlkZXJfX3RodW1iLS10b3AiKSxyLl9ob3N0RWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKCJtZGMtc2xpZGVyX190aHVtYi0tdG9wIix0aGlzLl90aHVtYnNPdmVybGFwKX1fdXBkYXRlT3ZlcmxhcHBpbmdUaHVtYlVJKGUpeyF0aGlzLl9pc1JhbmdlfHx0aGlzLl9za2lwVXBkYXRlKCl8fHRoaXMuX3RodW1ic092ZXJsYXAhPT10aGlzLl9hcmVUaHVtYnNPdmVybGFwcGluZygpJiYodGhpcy5fdGh1bWJzT3ZlcmxhcD0hdGhpcy5fdGh1bWJzT3ZlcmxhcCx0aGlzLl91cGRhdGVPdmVybGFwcGluZ1RodW1iQ2xhc3NOYW1lcyhlKSl9X3VwZGF0ZVRodW1iVUkoZSl7dGhpcy5fc2tpcFVwZGF0ZSgpfHwodGhpcy5fZ2V0VGh1bWIoMj09PWUudGh1bWJQb3NpdGlvbj8yOjEpLl9ob3N0RWxlbWVudC5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZVgoJHtlLnRyYW5zbGF0ZVh9cHgpYCl9X3VwZGF0ZVZhbHVlSW5kaWNhdG9yVUkoZSl7aWYodGhpcy5fc2tpcFVwZGF0ZSgpKXJldHVybjtsZXQgaT10aGlzLmRpc3BsYXlXaXRoKGUudmFsdWUpO2lmKHRoaXMuX2hhc1ZpZXdJbml0aWFsaXplZD9lLl92YWx1ZXRleHQ9aTplLl9ob3N0RWxlbWVudC5zZXRBdHRyaWJ1dGUoImFyaWEtdmFsdWV0ZXh0IixpKSx0aGlzLmRpc2NyZXRlKXsxPT09ZS50aHVtYlBvc2l0aW9uP3RoaXMuc3RhcnRWYWx1ZUluZGljYXRvclRleHQ9aTp0aGlzLmVuZFZhbHVlSW5kaWNhdG9yVGV4dD1pO2xldCByPXRoaXMuX2dldFRodW1iKGUudGh1bWJQb3NpdGlvbik7aS5sZW5ndGg8Mz9yLl9ob3N0RWxlbWVudC5jbGFzc0xpc3QuYWRkKCJtZGMtc2xpZGVyX190aHVtYi0tc2hvcnQtdmFsdWUiKTpyLl9ob3N0RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCJtZGMtc2xpZGVyX190aHVtYi0tc2hvcnQtdmFsdWUiKX19X3VwZGF0ZVZhbHVlSW5kaWNhdG9yVUlzKCl7bGV0IGU9dGhpcy5fZ2V0SW5wdXQoMiksaT10aGlzLl9nZXRJbnB1dCgxKTtlJiZ0aGlzLl91cGRhdGVWYWx1ZUluZGljYXRvclVJKGUpLGkmJnRoaXMuX3VwZGF0ZVZhbHVlSW5kaWNhdG9yVUkoaSl9X3VwZGF0ZVRpY2tNYXJrVHJhY2tVSSgpe2lmKCF0aGlzLnNob3dUaWNrTWFya3N8fHRoaXMuX3NraXBVcGRhdGUoKSlyZXR1cm47bGV0IGU9dGhpcy5fc3RlcCYmdGhpcy5fc3RlcD4wP3RoaXMuX3N0ZXA6MSxyPShNYXRoLmZsb29yKHRoaXMubWF4L2UpKmUtdGhpcy5taW4pLyh0aGlzLm1heC10aGlzLm1pbik7dGhpcy5fdGlja01hcmtUcmFja1dpZHRoPXRoaXMuX2NhY2hlZFdpZHRoKnItNn1fdXBkYXRlVHJhY2tVSShlKXt0aGlzLl9za2lwVXBkYXRlKCl8fCh0aGlzLl9pc1JhbmdlP3RoaXMuX3VwZGF0ZVRyYWNrVUlSYW5nZShlKTp0aGlzLl91cGRhdGVUcmFja1VJTm9uUmFuZ2UoZSkpfV91cGRhdGVUcmFja1VJUmFuZ2UoZSl7bGV0IGk9ZS5nZXRTaWJsaW5nKCk7aWYoIWl8fCF0aGlzLl9jYWNoZWRXaWR0aClyZXR1cm47bGV0IHI9TWF0aC5hYnMoaS50cmFuc2xhdGVYLWUudHJhbnNsYXRlWCkvdGhpcy5fY2FjaGVkV2lkdGg7dGhpcy5fc2V0VHJhY2tBY3RpdmVTdHlsZXMoZS5faXNMZWZ0VGh1bWImJnRoaXMuX2NhY2hlZFdpZHRoP3tsZWZ0OiJhdXRvIixyaWdodDp0aGlzLl9jYWNoZWRXaWR0aC1pLnRyYW5zbGF0ZVgrInB4Iix0cmFuc2Zvcm1PcmlnaW46InJpZ2h0Iix0cmFuc2Zvcm06YHNjYWxlWCgke3J9KWB9OntsZWZ0OmAke2kudHJhbnNsYXRlWH1weGAscmlnaHQ6ImF1dG8iLHRyYW5zZm9ybU9yaWdpbjoibGVmdCIsdHJhbnNmb3JtOmBzY2FsZVgoJHtyfSlgfSl9X3VwZGF0ZVRyYWNrVUlOb25SYW5nZShlKXt0aGlzLl9zZXRUcmFja0FjdGl2ZVN0eWxlcyh0aGlzLl9pc1J0bD97bGVmdDoiYXV0byIscmlnaHQ6IjBweCIsdHJhbnNmb3JtT3JpZ2luOiJyaWdodCIsdHJhbnNmb3JtOmBzY2FsZVgoJHsxLWUuZmlsbFBlcmNlbnRhZ2V9KWB9OntsZWZ0OiIwcHgiLHJpZ2h0OiJhdXRvIix0cmFuc2Zvcm1PcmlnaW46ImxlZnQiLHRyYW5zZm9ybTpgc2NhbGVYKCR7ZS5maWxsUGVyY2VudGFnZX0pYH0pfV91cGRhdGVUaWNrTWFya1VJKCl7aWYoIXRoaXMuc2hvd1RpY2tNYXJrc3x8dm9pZCAwPT09dGhpcy5zdGVwfHx2b2lkIDA9PT10aGlzLm1pbnx8dm9pZCAwPT09dGhpcy5tYXgpcmV0dXJuO2xldCBlPXRoaXMuc3RlcD4wP3RoaXMuc3RlcDoxO3RoaXMuX2lzUmFuZ2U/dGhpcy5fdXBkYXRlVGlja01hcmtVSVJhbmdlKGUpOnRoaXMuX3VwZGF0ZVRpY2tNYXJrVUlOb25SYW5nZShlKSx0aGlzLl9pc1J0bCYmdGhpcy5fdGlja01hcmtzLnJldmVyc2UoKX1fdXBkYXRlVGlja01hcmtVSU5vblJhbmdlKGUpe2xldCBpPXRoaXMuX2dldFZhbHVlKCkscj1NYXRoLm1heChNYXRoLnJvdW5kKChpLXRoaXMubWluKS9lKSwwKSxvPU1hdGgubWF4KE1hdGgucm91bmQoKHRoaXMubWF4LWkpL2UpLDApO3RoaXMuX2lzUnRsP3IrKzpvKyssdGhpcy5fdGlja01hcmtzPUFycmF5KHIpLmZpbGwoMCkuY29uY2F0KEFycmF5KG8pLmZpbGwoMSkpfV91cGRhdGVUaWNrTWFya1VJUmFuZ2UoZSl7bGV0IGk9dGhpcy5fZ2V0VmFsdWUoKSxyPXRoaXMuX2dldFZhbHVlKDEpLG89TWF0aC5tYXgoTWF0aC5mbG9vcigoci10aGlzLm1pbikvZSksMCksYT1NYXRoLm1heChNYXRoLmZsb29yKChpLXIpL2UpKzEsMCkscz1NYXRoLm1heChNYXRoLmZsb29yKCh0aGlzLm1heC1pKS9lKSwwKTt0aGlzLl90aWNrTWFya3M9QXJyYXkobykuZmlsbCgxKS5jb25jYXQoQXJyYXkoYSkuZmlsbCgwKSxBcnJheShzKS5maWxsKDEpKX1fZ2V0SW5wdXQoZSl7cmV0dXJuIDI9PT1lJiZ0aGlzLl9pbnB1dD90aGlzLl9pbnB1dDp0aGlzLl9pbnB1dHM/Lmxlbmd0aD8xPT09ZT90aGlzLl9pbnB1dHMuZmlyc3Q6dGhpcy5faW5wdXRzLmxhc3Q6dm9pZCAwfV9nZXRUaHVtYihlKXtyZXR1cm4gMj09PWU/dGhpcy5fdGh1bWJzPy5sYXN0OnRoaXMuX3RodW1icz8uZmlyc3R9X3NldFRyYW5zaXRpb24oZSl7dGhpcy5faGFzQW5pbWF0aW9uPWUmJiF0aGlzLl9ub29wQW5pbWF0aW9ucyx0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZSgibWF0LW1kYy1zbGlkZXItd2l0aC1hbmltYXRpb24iLHRoaXMuX2hhc0FuaW1hdGlvbil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMob3QpLEMoUXQpLEMoVm4pLEMoeGUpLEMoemksOCksQyhUaCw4KSxDKHBpLDgpKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtc2xpZGVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGUsaSxyKXtpZigxJmUmJihCbihyLFZZLDUpLEJuKHIsSFksNCkpLDImZSl7bGV0IG87YmUobz12ZSgpKSYmKGkuX2lucHV0PW8uZmlyc3QpLGJlKG89dmUoKSkmJihpLl9pbnB1dHM9byl9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihVZShnU2UsNSksVWUoelksNSkpLDImZSl7bGV0IHI7YmUocj12ZSgpKSYmKGkuX3RyYWNrQWN0aXZlPXIuZmlyc3QpLGJlKHI9dmUoKSkmJihpLl90aHVtYnM9cil9fSxob3N0QXR0cnM6WzEsIm1hdC1tZGMtc2xpZGVyIiwibWRjLXNsaWRlciJdLGhvc3RWYXJzOjEwLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmbnQoIm1kYy1zbGlkZXItLXJhbmdlIixpLl9pc1JhbmdlKSgibWRjLXNsaWRlci0tZGlzYWJsZWQiLGkuZGlzYWJsZWQpKCJtZGMtc2xpZGVyLS1kaXNjcmV0ZSIsaS5kaXNjcmV0ZSkoIm1kYy1zbGlkZXItLXRpY2stbWFya3MiLGkuc2hvd1RpY2tNYXJrcykoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIixpLl9ub29wQW5pbWF0aW9ucyl9LGlucHV0czp7Y29sb3I6ImNvbG9yIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIixkaXNhYmxlZDoiZGlzYWJsZWQiLGRpc2NyZXRlOiJkaXNjcmV0ZSIsc2hvd1RpY2tNYXJrczoic2hvd1RpY2tNYXJrcyIsbWluOiJtaW4iLG1heDoibWF4IixzdGVwOiJzdGVwIixkaXNwbGF5V2l0aDoiZGlzcGxheVdpdGgifSxleHBvcnRBczpbIm1hdFNsaWRlciJdLGZlYXR1cmVzOltWdChbe3Byb3ZpZGU6dFQsdXNlRXhpc3Rpbmc6bn1dKSxYZV0sbmdDb250ZW50U2VsZWN0b3JzOnhTZSxkZWNsczo5LHZhcnM6NSxjb25zdHM6W1sxLCJtZGMtc2xpZGVyX190cmFjayJdLFsxLCJtZGMtc2xpZGVyX190cmFjay0taW5hY3RpdmUiXSxbMSwibWRjLXNsaWRlcl9fdHJhY2stLWFjdGl2ZSJdLFsxLCJtZGMtc2xpZGVyX190cmFjay0tYWN0aXZlX2ZpbGwiXSxbInRyYWNrQWN0aXZlIiwiIl0sWyJjbGFzcyIsIm1kYy1zbGlkZXJfX3RpY2stbWFya3MiLDQsIm5nSWYiXSxbMywiZGlzY3JldGUiLCJ0aHVtYlBvc2l0aW9uIiwidmFsdWVJbmRpY2F0b3JUZXh0Iiw0LCJuZ0lmIl0sWzMsImRpc2NyZXRlIiwidGh1bWJQb3NpdGlvbiIsInZhbHVlSW5kaWNhdG9yVGV4dCJdLFsxLCJtZGMtc2xpZGVyX190aWNrLW1hcmtzIl0sWyJ0aWNrTWFya0NvbnRhaW5lciIsIiJdLFs0LCJuZ0lmIl0sWzMsImNsYXNzIiwidHJhbnNmb3JtIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihmbigpLFR0KDApLGYoMSwiZGl2IiwwKSxrKDIsImRpdiIsMSksZigzLCJkaXYiLDIpLGsoNCwiZGl2IiwzLDQpLGcoKSxTKDYsdlNlLDMsMSwiZGl2Iiw1KSxnKCksUyg3LHlTZSwxLDMsIm1hdC1zbGlkZXItdmlzdWFsLXRodW1iIiw2KSxrKDgsIm1hdC1zbGlkZXItdmlzdWFsLXRodW1iIiw3KSksMiZlJiYodig2KSxiKCJuZ0lmIixpLnNob3dUaWNrTWFya3MpLHYoMSksYigibmdJZiIsaS5faXNSYW5nZSksdigxKSxiKCJkaXNjcmV0ZSIsaS5kaXNjcmV0ZSkoInRodW1iUG9zaXRpb24iLDIpKCJ2YWx1ZUluZGljYXRvclRleHQiLGkuZW5kVmFsdWVJbmRpY2F0b3JUZXh0KSl9LGRlcGVuZGVuY2llczpbbm4sTmUsQ1NlXSxzdHlsZXM6WycubWRjLXNsaWRlcntjdXJzb3I6cG9pbnRlcjtoZWlnaHQ6NDhweDttYXJnaW46MCAyNHB4O3Bvc2l0aW9uOnJlbGF0aXZlO3RvdWNoLWFjdGlvbjpwYW4teX0ubWRjLXNsaWRlciAubWRjLXNsaWRlcl9fdHJhY2t7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKTt3aWR0aDoxMDAlfS5tZGMtc2xpZGVyIC5tZGMtc2xpZGVyX190cmFjay0tYWN0aXZlLC5tZGMtc2xpZGVyIC5tZGMtc2xpZGVyX190cmFjay0taW5hY3RpdmV7ZGlzcGxheTpmbGV4O2hlaWdodDoxMDAlO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjEwMCV9Lm1kYy1zbGlkZXIgLm1kYy1zbGlkZXJfX3RyYWNrLS1hY3RpdmV7b3ZlcmZsb3c6aGlkZGVufS5tZGMtc2xpZGVyIC5tZGMtc2xpZGVyX190cmFjay0tYWN0aXZlX2ZpbGx7Ym9yZGVyLXRvcC1zdHlsZTpzb2xpZDtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46bGVmdDt0cmFuc2Zvcm0tb3JpZ2luOmxlZnR9W2Rpcj1ydGxdIC5tZGMtc2xpZGVyIC5tZGMtc2xpZGVyX190cmFjay0tYWN0aXZlX2ZpbGwsLm1kYy1zbGlkZXIgLm1kYy1zbGlkZXJfX3RyYWNrLS1hY3RpdmVfZmlsbFtkaXI9cnRsXXstd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46cmlnaHQ7dHJhbnNmb3JtLW9yaWdpbjpyaWdodH0ubWRjLXNsaWRlciAubWRjLXNsaWRlcl9fdHJhY2stLWluYWN0aXZle2xlZnQ6MDt0b3A6MH0ubWRjLXNsaWRlciAubWRjLXNsaWRlcl9fdHJhY2stLWluYWN0aXZlOjpiZWZvcmV7cG9zaXRpb246YWJzb2x1dGU7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7dG9wOjA7bGVmdDowO2JvcmRlcjoxcHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItcmFkaXVzOmluaGVyaXQ7Y29udGVudDoiIjtwb2ludGVyLWV2ZW50czpub25lfUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpey5tZGMtc2xpZGVyIC5tZGMtc2xpZGVyX190cmFjay0taW5hY3RpdmU6OmJlZm9yZXtib3JkZXItY29sb3I6Q2FudmFzVGV4dH19Lm1kYy1zbGlkZXIgLm1kYy1zbGlkZXJfX3ZhbHVlLWluZGljYXRvci1jb250YWluZXJ7Ym90dG9tOjQ0cHg7bGVmdDp2YXIoLS1zbGlkZXItdmFsdWUtaW5kaWNhdG9yLWNvbnRhaW5lci1sZWZ0LCA1MCUpO3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6dmFyKC0tc2xpZGVyLXZhbHVlLWluZGljYXRvci1jb250YWluZXItcmlnaHQpO3RyYW5zZm9ybTp2YXIoLS1zbGlkZXItdmFsdWUtaW5kaWNhdG9yLWNvbnRhaW5lci10cmFuc2Zvcm0sIHRyYW5zbGF0ZVgoLTUwJSkpfS5tZGMtc2xpZGVyIC5tZGMtc2xpZGVyX192YWx1ZS1pbmRpY2F0b3J7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gMTAwbXMgMG1zIGN1YmljLWJlemllcigwLjQsIDAsIDEsIDEpO2FsaWduLWl0ZW1zOmNlbnRlcjtib3JkZXItcmFkaXVzOjRweDtkaXNwbGF5OmZsZXg7aGVpZ2h0OjMycHg7cGFkZGluZzowIDEycHg7dHJhbnNmb3JtOnNjYWxlKDApO3RyYW5zZm9ybS1vcmlnaW46Ym90dG9tfS5tZGMtc2xpZGVyIC5tZGMtc2xpZGVyX192YWx1ZS1pbmRpY2F0b3I6OmJlZm9yZXtib3JkZXItbGVmdDo2cHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItcmlnaHQ6NnB4IHNvbGlkIHJnYmEoMCwwLDAsMCk7Ym9yZGVyLXRvcDo2cHggc29saWQ7Ym90dG9tOi01cHg7Y29udGVudDoiIjtoZWlnaHQ6MDtsZWZ0OnZhcigtLXNsaWRlci12YWx1ZS1pbmRpY2F0b3ItY2FyZXQtbGVmdCwgNTAlKTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDp2YXIoLS1zbGlkZXItdmFsdWUtaW5kaWNhdG9yLWNhcmV0LXJpZ2h0KTt0cmFuc2Zvcm06dmFyKC0tc2xpZGVyLXZhbHVlLWluZGljYXRvci1jYXJldC10cmFuc2Zvcm0sIHRyYW5zbGF0ZVgoLTUwJSkpO3dpZHRoOjB9Lm1kYy1zbGlkZXIgLm1kYy1zbGlkZXJfX3ZhbHVlLWluZGljYXRvcjo6YWZ0ZXJ7cG9zaXRpb246YWJzb2x1dGU7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7dG9wOjA7bGVmdDowO2JvcmRlcjoxcHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItcmFkaXVzOmluaGVyaXQ7Y29udGVudDoiIjtwb2ludGVyLWV2ZW50czpub25lfUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpey5tZGMtc2xpZGVyIC5tZGMtc2xpZGVyX192YWx1ZS1pbmRpY2F0b3I6OmFmdGVye2JvcmRlci1jb2xvcjpDYW52YXNUZXh0fX0ubWRjLXNsaWRlciAubWRjLXNsaWRlcl9fdGh1bWItLXdpdGgtaW5kaWNhdG9yIC5tZGMtc2xpZGVyX192YWx1ZS1pbmRpY2F0b3ItY29udGFpbmVye3BvaW50ZXItZXZlbnRzOmF1dG99Lm1kYy1zbGlkZXIgLm1kYy1zbGlkZXJfX3RodW1iLS13aXRoLWluZGljYXRvciAubWRjLXNsaWRlcl9fdmFsdWUtaW5kaWNhdG9ye3RyYW5zaXRpb246dHJhbnNmb3JtIDEwMG1zIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMSl9QG1lZGlhKHByZWZlcnMtcmVkdWNlZC1tb3Rpb24pey5tZGMtc2xpZGVyIC5tZGMtc2xpZGVyX192YWx1ZS1pbmRpY2F0b3IsLm1kYy1zbGlkZXIgLm1kYy1zbGlkZXJfX3RodW1iLS13aXRoLWluZGljYXRvciAubWRjLXNsaWRlcl9fdmFsdWUtaW5kaWNhdG9ye3RyYW5zaXRpb246bm9uZX19Lm1kYy1zbGlkZXIgLm1kYy1zbGlkZXJfX3RodW1ie2Rpc3BsYXk6ZmxleDtsZWZ0Oi0yNHB4O291dGxpbmU6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt1c2VyLXNlbGVjdDpub25lO2hlaWdodDo0OHB4O3dpZHRoOjQ4cHh9Lm1kYy1zbGlkZXIgLm1kYy1zbGlkZXJfX3RodW1iLS10b3B7ei1pbmRleDoxfS5tZGMtc2xpZGVyIC5tZGMtc2xpZGVyX190aHVtYi0tdG9wIC5tZGMtc2xpZGVyX190aHVtYi1rbm9iLC5tZGMtc2xpZGVyIC5tZGMtc2xpZGVyX190aHVtYi0tdG9wLm1kYy1zbGlkZXJfX3RodW1iOmhvdmVyIC5tZGMtc2xpZGVyX190aHVtYi1rbm9iLC5tZGMtc2xpZGVyIC5tZGMtc2xpZGVyX190aHVtYi0tdG9wLm1kYy1zbGlkZXJfX3RodW1iLS1mb2N1c2VkIC5tZGMtc2xpZGVyX190aHVtYi1rbm9ie2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MXB4O2JveC1zaXppbmc6Y29udGVudC1ib3h9Lm1kYy1zbGlkZXIgLm1kYy1zbGlkZXJfX3RodW1iLWtub2J7Ym94LXNpemluZzpib3JkZXItYm94O2xlZnQ6NTAlO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKX0ubWRjLXNsaWRlciAubWRjLXNsaWRlcl9fdGljay1tYXJrc3thbGlnbi1pdGVtczpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtoZWlnaHQ6MTAwJTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtwYWRkaW5nOjAgMXB4O3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjEwMCV9Lm1kYy1zbGlkZXItLWRpc2NyZXRlIC5tZGMtc2xpZGVyX190aHVtYiwubWRjLXNsaWRlci0tZGlzY3JldGUgLm1kYy1zbGlkZXJfX3RyYWNrLS1hY3RpdmVfZmlsbHt0cmFuc2l0aW9uOnRyYW5zZm9ybSA4MG1zIGVhc2V9QG1lZGlhKHByZWZlcnMtcmVkdWNlZC1tb3Rpb24pey5tZGMtc2xpZGVyLS1kaXNjcmV0ZSAubWRjLXNsaWRlcl9fdGh1bWIsLm1kYy1zbGlkZXItLWRpc2NyZXRlIC5tZGMtc2xpZGVyX190cmFjay0tYWN0aXZlX2ZpbGx7dHJhbnNpdGlvbjpub25lfX0ubWRjLXNsaWRlci0tZGlzYWJsZWR7Y3Vyc29yOmF1dG99Lm1kYy1zbGlkZXItLWRpc2FibGVkIC5tZGMtc2xpZGVyX190aHVtYntwb2ludGVyLWV2ZW50czpub25lfS5tZGMtc2xpZGVyX19pbnB1dHtjdXJzb3I6cG9pbnRlcjtsZWZ0OjA7bWFyZ2luOjA7aGVpZ2h0OjEwMCU7b3BhY2l0eTowO3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6MTAwJX0ubWF0LW1kYy1zbGlkZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi1yaWdodDo4cHg7d2lkdGg6YXV0bzttaW4td2lkdGg6MTEycHg7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCl9Lm1hdC1tZGMtc2xpZGVyIC5tZGMtc2xpZGVyX190aHVtYi1rbm9ie2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLXNsaWRlci1oYW5kbGUtY29sb3IsIHZhcigtLW1kYy10aGVtZS1wcmltYXJ5LCAjNjIwMGVlKSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy1zbGlkZXItaGFuZGxlLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtcHJpbWFyeSwgIzYyMDBlZSkpfS5tYXQtbWRjLXNsaWRlciAubWRjLXNsaWRlcl9fdGh1bWItLXRvcCAubWRjLXNsaWRlcl9fdGh1bWIta25vYiwubWF0LW1kYy1zbGlkZXIgLm1kYy1zbGlkZXJfX3RodW1iLS10b3AubWRjLXNsaWRlcl9fdGh1bWI6aG92ZXIgLm1kYy1zbGlkZXJfX3RodW1iLWtub2IsLm1hdC1tZGMtc2xpZGVyIC5tZGMtc2xpZGVyX190aHVtYi0tdG9wLm1kYy1zbGlkZXJfX3RodW1iLS1mb2N1c2VkIC5tZGMtc2xpZGVyX190aHVtYi1rbm9ie2JvcmRlci1jb2xvcjojZmZmfS5tYXQtbWRjLXNsaWRlci5tZGMtc2xpZGVyLS1kaXNhYmxlZCAubWRjLXNsaWRlcl9fdGh1bWIta25vYntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy1zbGlkZXItZGlzYWJsZWQtaGFuZGxlLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgIzAwMCkpO2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtc2xpZGVyLWRpc2FibGVkLWhhbmRsZS1jb2xvciwgdmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApKX0ubWF0LW1kYy1zbGlkZXIubWRjLXNsaWRlci0tZGlzYWJsZWQgLm1kYy1zbGlkZXJfX3RodW1iLS10b3AgLm1kYy1zbGlkZXJfX3RodW1iLWtub2IsLm1hdC1tZGMtc2xpZGVyLm1kYy1zbGlkZXItLWRpc2FibGVkIC5tZGMtc2xpZGVyX190aHVtYi0tdG9wLm1kYy1zbGlkZXJfX3RodW1iOmhvdmVyIC5tZGMtc2xpZGVyX190aHVtYi1rbm9iLC5tYXQtbWRjLXNsaWRlci5tZGMtc2xpZGVyLS1kaXNhYmxlZCAubWRjLXNsaWRlcl9fdGh1bWItLXRvcC5tZGMtc2xpZGVyX190aHVtYi0tZm9jdXNlZCAubWRjLXNsaWRlcl9fdGh1bWIta25vYntib3JkZXItY29sb3I6I2ZmZn0ubWF0LW1kYy1zbGlkZXIgLm1kYy1zbGlkZXJfX3RodW1iOjpiZWZvcmUsLm1hdC1tZGMtc2xpZGVyIC5tZGMtc2xpZGVyX190aHVtYjo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtc2xpZGVyLWhhbmRsZS1jb2xvciwgdmFyKC0tbWRjLXRoZW1lLXByaW1hcnksICM2MjAwZWUpKX0ubWF0LW1kYy1zbGlkZXIgLm1kYy1zbGlkZXJfX3RodW1iOmhvdmVyOjpiZWZvcmUsLm1hdC1tZGMtc2xpZGVyIC5tZGMtc2xpZGVyX190aHVtYi5tZGMtcmlwcGxlLXN1cmZhY2UtLWhvdmVyOjpiZWZvcmV7b3BhY2l0eTp2YXIoLS1tZGMtcmlwcGxlLWhvdmVyLW9wYWNpdHksIDAuMDQpfS5tYXQtbWRjLXNsaWRlciAubWRjLXNsaWRlcl9fdGh1bWIubWRjLXJpcHBsZS11cGdyYWRlZC0tYmFja2dyb3VuZC1mb2N1c2VkOjpiZWZvcmUsLm1hdC1tZGMtc2xpZGVyIC5tZGMtc2xpZGVyX190aHVtYjpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzOjpiZWZvcmV7dHJhbnNpdGlvbi1kdXJhdGlvbjo3NW1zO29wYWNpdHk6dmFyKC0tbWRjLXJpcHBsZS1mb2N1cy1vcGFjaXR5LCAwLjEyKX0ubWF0LW1kYy1zbGlkZXIgLm1kYy1zbGlkZXJfX3RodW1iOm5vdCgubWRjLXJpcHBsZS11cGdyYWRlZCk6OmFmdGVye3RyYW5zaXRpb246b3BhY2l0eSAxNTBtcyBsaW5lYXJ9Lm1hdC1tZGMtc2xpZGVyIC5tZGMtc2xpZGVyX190aHVtYjpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmFjdGl2ZTo6YWZ0ZXJ7dHJhbnNpdGlvbi1kdXJhdGlvbjo3NW1zO29wYWNpdHk6dmFyKC0tbWRjLXJpcHBsZS1wcmVzcy1vcGFjaXR5LCAwLjEyKX0ubWF0LW1kYy1zbGlkZXIgLm1kYy1zbGlkZXJfX3RodW1iLm1kYy1yaXBwbGUtdXBncmFkZWR7LS1tZGMtcmlwcGxlLWZnLW9wYWNpdHk6dmFyKC0tbWRjLXJpcHBsZS1wcmVzcy1vcGFjaXR5LCAwLjEyKX0ubWF0LW1kYy1zbGlkZXIgLm1kYy1zbGlkZXJfX3RyYWNrLS1hY3RpdmVfZmlsbHtib3JkZXItY29sb3I6dmFyKC0tbWRjLXNsaWRlci1hY3RpdmUtdHJhY2stY29sb3IsIHZhcigtLW1kYy10aGVtZS1wcmltYXJ5LCAjNjIwMGVlKSl9Lm1hdC1tZGMtc2xpZGVyLm1kYy1zbGlkZXItLWRpc2FibGVkIC5tZGMtc2xpZGVyX190cmFjay0tYWN0aXZlX2ZpbGx7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy1zbGlkZXItZGlzYWJsZWQtYWN0aXZlLXRyYWNrLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgIzAwMCkpfS5tYXQtbWRjLXNsaWRlciAubWRjLXNsaWRlcl9fdHJhY2stLWluYWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLXNsaWRlci1pbmFjdGl2ZS10cmFjay1jb2xvciwgdmFyKC0tbWRjLXRoZW1lLXByaW1hcnksICM2MjAwZWUpKTtvcGFjaXR5Oi4yNH0ubWF0LW1kYy1zbGlkZXIubWRjLXNsaWRlci0tZGlzYWJsZWQgLm1kYy1zbGlkZXJfX3RyYWNrLS1pbmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy1zbGlkZXItZGlzYWJsZWQtaW5hY3RpdmUtdHJhY2stY29sb3IsIHZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKSk7b3BhY2l0eTouMjR9Lm1hdC1tZGMtc2xpZGVyIC5tZGMtc2xpZGVyX190aWNrLW1hcmstLWFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy1zbGlkZXItd2l0aC10aWNrLW1hcmtzLWFjdGl2ZS1jb250YWluZXItY29sb3IsIHZhcigtLW1kYy10aGVtZS1vbi1wcmltYXJ5LCAjZmZmKSk7b3BhY2l0eTp2YXIoLS1tZGMtc2xpZGVyLXdpdGgtdGljay1tYXJrcy1hY3RpdmUtY29udGFpbmVyLW9wYWNpdHksIDAuNil9Lm1hdC1tZGMtc2xpZGVyLm1kYy1zbGlkZXItLWRpc2FibGVkIC5tZGMtc2xpZGVyX190aWNrLW1hcmstLWFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy1zbGlkZXItd2l0aC10aWNrLW1hcmtzLWFjdGl2ZS1jb250YWluZXItY29sb3IsIHZhcigtLW1kYy10aGVtZS1vbi1wcmltYXJ5LCAjZmZmKSk7b3BhY2l0eTp2YXIoLS1tZGMtc2xpZGVyLXdpdGgtdGljay1tYXJrcy1hY3RpdmUtY29udGFpbmVyLW9wYWNpdHksIDAuNil9Lm1hdC1tZGMtc2xpZGVyIC5tZGMtc2xpZGVyX190aWNrLW1hcmstLWluYWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLXNsaWRlci13aXRoLXRpY2stbWFya3MtaW5hY3RpdmUtY29udGFpbmVyLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtcHJpbWFyeSwgIzYyMDBlZSkpO29wYWNpdHk6dmFyKC0tbWRjLXNsaWRlci13aXRoLXRpY2stbWFya3MtaW5hY3RpdmUtY29udGFpbmVyLW9wYWNpdHksIDAuNil9Lm1hdC1tZGMtc2xpZGVyLm1kYy1zbGlkZXItLWRpc2FibGVkIC5tZGMtc2xpZGVyX190aWNrLW1hcmstLWluYWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLXNsaWRlci13aXRoLXRpY2stbWFya3MtZGlzYWJsZWQtY29udGFpbmVyLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgIzAwMCkpO29wYWNpdHk6dmFyKC0tbWRjLXNsaWRlci13aXRoLXRpY2stbWFya3MtaW5hY3RpdmUtY29udGFpbmVyLW9wYWNpdHksIDAuNil9Lm1hdC1tZGMtc2xpZGVyIC5tZGMtc2xpZGVyX192YWx1ZS1pbmRpY2F0b3J7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtc2xpZGVyLWxhYmVsLWNvbnRhaW5lci1jb2xvciwgIzY2NjY2Nik7b3BhY2l0eToxfS5tYXQtbWRjLXNsaWRlciAubWRjLXNsaWRlcl9fdmFsdWUtaW5kaWNhdG9yOjpiZWZvcmV7Ym9yZGVyLXRvcC1jb2xvcjp2YXIoLS1tZGMtc2xpZGVyLWxhYmVsLWNvbnRhaW5lci1jb2xvciwgIzY2NjY2Nil9Lm1hdC1tZGMtc2xpZGVyIC5tZGMtc2xpZGVyX192YWx1ZS1pbmRpY2F0b3J7Y29sb3I6dmFyKC0tbWRjLXNsaWRlci1sYWJlbC1sYWJlbC10ZXh0LWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtb24tcHJpbWFyeSwgI2ZmZikpfS5tYXQtbWRjLXNsaWRlciAubWRjLXNsaWRlcl9fdHJhY2t7aGVpZ2h0OnZhcigtLW1kYy1zbGlkZXItaW5hY3RpdmUtdHJhY2staGVpZ2h0LCA0cHgpfS5tYXQtbWRjLXNsaWRlciAubWRjLXNsaWRlcl9fdHJhY2stLWFjdGl2ZXtoZWlnaHQ6dmFyKC0tbWRjLXNsaWRlci1hY3RpdmUtdHJhY2staGVpZ2h0LCA2cHgpO3RvcDpjYWxjKCh2YXIoLS1tZGMtc2xpZGVyLWluYWN0aXZlLXRyYWNrLWhlaWdodCwgNHB4KSAtIHZhcigtLW1kYy1zbGlkZXItYWN0aXZlLXRyYWNrLWhlaWdodCwgNnB4KSkgLyAyKX0ubWF0LW1kYy1zbGlkZXIgLm1kYy1zbGlkZXJfX3RyYWNrLS1hY3RpdmVfZmlsbHtib3JkZXItdG9wLXdpZHRoOnZhcigtLW1kYy1zbGlkZXItYWN0aXZlLXRyYWNrLWhlaWdodCwgNnB4KX0ubWF0LW1kYy1zbGlkZXIgLm1kYy1zbGlkZXJfX3RyYWNrLS1pbmFjdGl2ZXtoZWlnaHQ6dmFyKC0tbWRjLXNsaWRlci1pbmFjdGl2ZS10cmFjay1oZWlnaHQsIDRweCl9Lm1hdC1tZGMtc2xpZGVyIC5tZGMtc2xpZGVyX190aWNrLW1hcmstLWFjdGl2ZSwubWF0LW1kYy1zbGlkZXIgLm1kYy1zbGlkZXJfX3RpY2stbWFyay0taW5hY3RpdmV7aGVpZ2h0OnZhcigtLW1kYy1zbGlkZXItd2l0aC10aWNrLW1hcmtzLWNvbnRhaW5lci1zaXplLCAycHgpO3dpZHRoOnZhcigtLW1kYy1zbGlkZXItd2l0aC10aWNrLW1hcmtzLWNvbnRhaW5lci1zaXplLCAycHgpfS5tYXQtbWRjLXNsaWRlci5tZGMtc2xpZGVyLS1kaXNhYmxlZHtvcGFjaXR5OjAuMzh9Lm1hdC1tZGMtc2xpZGVyIC5tZGMtc2xpZGVyX192YWx1ZS1pbmRpY2F0b3ItdGV4dHtsZXR0ZXItc3BhY2luZzp2YXIoLS1tZGMtc2xpZGVyLWxhYmVsLWxhYmVsLXRleHQtdHJhY2tpbmcsIDAuMDA3MTQyODU3MWVtKTtmb250LXNpemU6dmFyKC0tbWRjLXNsaWRlci1sYWJlbC1sYWJlbC10ZXh0LXNpemUsIDAuODc1cmVtKTtmb250LWZhbWlseTp2YXIoLS1tZGMtc2xpZGVyLWxhYmVsLWxhYmVsLXRleHQtZm9udCwgUm9ib3RvLCBzYW5zLXNlcmlmKTtmb250LXdlaWdodDp2YXIoLS1tZGMtc2xpZGVyLWxhYmVsLWxhYmVsLXRleHQtd2VpZ2h0LCA1MDApO2xpbmUtaGVpZ2h0OnZhcigtLW1kYy1zbGlkZXItbGFiZWwtbGFiZWwtdGV4dC1saW5lLWhlaWdodCwgMS4zNzVyZW0pfS5tYXQtbWRjLXNsaWRlciAubWRjLXNsaWRlcl9fdHJhY2stLWFjdGl2ZXtib3JkZXItcmFkaXVzOnZhcigtLW1kYy1zbGlkZXItYWN0aXZlLXRyYWNrLXNoYXBlLCA5OTk5cHgpfS5tYXQtbWRjLXNsaWRlciAubWRjLXNsaWRlcl9fdHJhY2stLWluYWN0aXZle2JvcmRlci1yYWRpdXM6dmFyKC0tbWRjLXNsaWRlci1pbmFjdGl2ZS10cmFjay1zaGFwZSwgOTk5OXB4KX0ubWF0LW1kYy1zbGlkZXIgLm1kYy1zbGlkZXJfX3RodW1iLWtub2J7Ym9yZGVyLXJhZGl1czp2YXIoLS1tZGMtc2xpZGVyLWhhbmRsZS1zaGFwZSwgNTAlKTt3aWR0aDp2YXIoLS1tZGMtc2xpZGVyLWhhbmRsZS13aWR0aCwgMjBweCk7aGVpZ2h0OnZhcigtLW1kYy1zbGlkZXItaGFuZGxlLWhlaWdodCwgMjBweCk7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDpjYWxjKHZhcigtLW1kYy1zbGlkZXItaGFuZGxlLWhlaWdodCwgMjBweCkgLyAyKSBjYWxjKHZhcigtLW1kYy1zbGlkZXItaGFuZGxlLXdpZHRoLCAyMHB4KSAvIDIpfS5tYXQtbWRjLXNsaWRlciAubWRjLXNsaWRlcl9fdGljay1tYXJrLS1hY3RpdmUsLm1hdC1tZGMtc2xpZGVyIC5tZGMtc2xpZGVyX190aWNrLW1hcmstLWluYWN0aXZle2JvcmRlci1yYWRpdXM6dmFyKC0tbWRjLXNsaWRlci13aXRoLXRpY2stbWFya3MtY29udGFpbmVyLXNoYXBlLCA1MCUpfS5tYXQtbWRjLXNsaWRlciAubWRjLXNsaWRlcl9fdGh1bWIta25vYntib3gtc2hhZG93OnZhcigtLW1kYy1zbGlkZXItaGFuZGxlLWVsZXZhdGlvbiwgMHB4IDJweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxcHggMXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKSl9Lm1hdC1tZGMtc2xpZGVyIC5tZGMtc2xpZGVyX190aHVtYjpob3ZlciAubWRjLXNsaWRlcl9fdGh1bWIta25vYntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy1zbGlkZXItaG92ZXItaGFuZGxlLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtcHJpbWFyeSwgIzYyMDBlZSkpO2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtc2xpZGVyLWhvdmVyLWhhbmRsZS1jb2xvciwgdmFyKC0tbWRjLXRoZW1lLXByaW1hcnksICM2MjAwZWUpKX0ubWF0LW1kYy1zbGlkZXIgLm1kYy1zbGlkZXJfX3RodW1iOmhvdmVyIC5tZGMtc2xpZGVyX190aHVtYi0tdG9wIC5tZGMtc2xpZGVyX190aHVtYi1rbm9iLC5tYXQtbWRjLXNsaWRlciAubWRjLXNsaWRlcl9fdGh1bWI6aG92ZXIgLm1kYy1zbGlkZXJfX3RodW1iLS10b3AubWRjLXNsaWRlcl9fdGh1bWI6aG92ZXIgLm1kYy1zbGlkZXJfX3RodW1iLWtub2IsLm1hdC1tZGMtc2xpZGVyIC5tZGMtc2xpZGVyX190aHVtYjpob3ZlciAubWRjLXNsaWRlcl9fdGh1bWItLXRvcC5tZGMtc2xpZGVyX190aHVtYi0tZm9jdXNlZCAubWRjLXNsaWRlcl9fdGh1bWIta25vYntib3JkZXItY29sb3I6I2ZmZn0ubWF0LW1kYy1zbGlkZXIgLm1kYy1zbGlkZXJfX3RodW1iLS1mb2N1c2VkIC5tZGMtc2xpZGVyX190aHVtYi1rbm9ie2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLXNsaWRlci1mb2N1cy1oYW5kbGUtY29sb3IsIHZhcigtLW1kYy10aGVtZS1wcmltYXJ5LCAjNjIwMGVlKSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy1zbGlkZXItZm9jdXMtaGFuZGxlLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtcHJpbWFyeSwgIzYyMDBlZSkpfS5tYXQtbWRjLXNsaWRlciAubWRjLXNsaWRlcl9fdGh1bWItLWZvY3VzZWQgLm1kYy1zbGlkZXJfX3RodW1iLS10b3AgLm1kYy1zbGlkZXJfX3RodW1iLWtub2IsLm1hdC1tZGMtc2xpZGVyIC5tZGMtc2xpZGVyX190aHVtYi0tZm9jdXNlZCAubWRjLXNsaWRlcl9fdGh1bWItLXRvcC5tZGMtc2xpZGVyX190aHVtYjpob3ZlciAubWRjLXNsaWRlcl9fdGh1bWIta25vYiwubWF0LW1kYy1zbGlkZXIgLm1kYy1zbGlkZXJfX3RodW1iLS1mb2N1c2VkIC5tZGMtc2xpZGVyX190aHVtYi0tdG9wLm1kYy1zbGlkZXJfX3RodW1iLS1mb2N1c2VkIC5tZGMtc2xpZGVyX190aHVtYi1rbm9ie2JvcmRlci1jb2xvcjojZmZmfS5tYXQtbWRjLXNsaWRlciAubWRjLXNsaWRlcl9fdGh1bWI6bm90KDpkaXNhYmxlZCk6YWN0aXZlIC5tZGMtc2xpZGVyX190aHVtYi0tdG9wIC5tZGMtc2xpZGVyX190aHVtYi1rbm9iLC5tYXQtbWRjLXNsaWRlciAubWRjLXNsaWRlcl9fdGh1bWI6bm90KDpkaXNhYmxlZCk6YWN0aXZlIC5tZGMtc2xpZGVyX190aHVtYi0tdG9wLm1kYy1zbGlkZXJfX3RodW1iOmhvdmVyIC5tZGMtc2xpZGVyX190aHVtYi1rbm9iLC5tYXQtbWRjLXNsaWRlciAubWRjLXNsaWRlcl9fdGh1bWI6bm90KDpkaXNhYmxlZCk6YWN0aXZlIC5tZGMtc2xpZGVyX190aHVtYi0tdG9wLm1kYy1zbGlkZXJfX3RodW1iLS1mb2N1c2VkIC5tZGMtc2xpZGVyX190aHVtYi1rbm9ie2JvcmRlci1jb2xvcjojZmZmfS5tYXQtbWRjLXNsaWRlciAubWRjLXNsaWRlcl9fdGh1bWItLXRvcCAubWRjLXNsaWRlcl9fdGh1bWIta25vYiwubWF0LW1kYy1zbGlkZXIgLm1kYy1zbGlkZXJfX3RodW1iLS10b3AubWRjLXNsaWRlcl9fdGh1bWI6aG92ZXIgLm1kYy1zbGlkZXJfX3RodW1iLWtub2IsLm1hdC1tZGMtc2xpZGVyIC5tZGMtc2xpZGVyX190aHVtYi0tdG9wLm1kYy1zbGlkZXJfX3RodW1iLS1mb2N1c2VkIC5tZGMtc2xpZGVyX190aHVtYi1rbm9ie2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtc2xpZGVyLXdpdGgtb3ZlcmxhcC1oYW5kbGUtb3V0bGluZS1jb2xvciwgI2ZmZik7Ym9yZGVyLXdpZHRoOnZhcigtLW1kYy1zbGlkZXItd2l0aC1vdmVybGFwLWhhbmRsZS1vdXRsaW5lLXdpZHRoLCAxcHgpfS5tYXQtbWRjLXNsaWRlciAubWRjLXNsaWRlcl9faW5wdXR7Ym94LXNpemluZzpjb250ZW50LWJveDtwb2ludGVyLWV2ZW50czphdXRvfS5tYXQtbWRjLXNsaWRlciAubWRjLXNsaWRlcl9faW5wdXQubWF0LW1kYy1zbGlkZXItaW5wdXQtbm8tcG9pbnRlci1ldmVudHN7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LW1kYy1zbGlkZXIgLm1kYy1zbGlkZXJfX2lucHV0Lm1hdC1zbGlkZXJfX3JpZ2h0LWlucHV0e2xlZnQ6YXV0bztyaWdodDowfS5tYXQtbWRjLXNsaWRlciAubWRjLXNsaWRlcl9fdGh1bWIsLm1hdC1tZGMtc2xpZGVyIC5tZGMtc2xpZGVyX190cmFjay0tYWN0aXZlX2ZpbGx7dHJhbnNpdGlvbi1kdXJhdGlvbjowbXN9Lm1hdC1tZGMtc2xpZGVyLm1hdC1tZGMtc2xpZGVyLXdpdGgtYW5pbWF0aW9uIC5tZGMtc2xpZGVyX190aHVtYiwubWF0LW1kYy1zbGlkZXIubWF0LW1kYy1zbGlkZXItd2l0aC1hbmltYXRpb24gLm1kYy1zbGlkZXJfX3RyYWNrLS1hY3RpdmVfZmlsbHt0cmFuc2l0aW9uLWR1cmF0aW9uOjgwbXN9Lm1hdC1tZGMtc2xpZGVyLm1hdC1tZGMtc2xpZGVyLXdpdGgtYW5pbWF0aW9uLm1hdC1tZGMtc2xpZGVyLWRpc2FibGUtdHJhY2stYW5pbWF0aW9uIC5tZGMtc2xpZGVyX190cmFjay0tYWN0aXZlX2ZpbGx7dHJhbnNpdGlvbi1kdXJhdGlvbjowbXN9Lm1hdC1tZGMtc2xpZGVyLm1kYy1zbGlkZXItLWRpc2NyZXRlIC5tZGMtc2xpZGVyX190aHVtYiwubWF0LW1kYy1zbGlkZXIubWRjLXNsaWRlci0tZGlzY3JldGUgLm1kYy1zbGlkZXJfX3RyYWNrLS1hY3RpdmVfZmlsbHt0cmFuc2l0aW9uLWR1cmF0aW9uOjBtc30ubWF0LW1kYy1zbGlkZXIubWF0LW1kYy1zbGlkZXItd2l0aC1hbmltYXRpb24gLm1kYy1zbGlkZXJfX3RodW1iLC5tYXQtbWRjLXNsaWRlci5tYXQtbWRjLXNsaWRlci13aXRoLWFuaW1hdGlvbiAubWRjLXNsaWRlcl9fdHJhY2stLWFjdGl2ZV9maWxse3RyYW5zaXRpb24tZHVyYXRpb246ODBtc30ubWF0LW1kYy1zbGlkZXIubWF0LW1kYy1zbGlkZXItd2l0aC1hbmltYXRpb24ubWF0LW1kYy1zbGlkZXItZGlzYWJsZS10cmFjay1hbmltYXRpb24gLm1kYy1zbGlkZXJfX3RyYWNrLS1hY3RpdmVfZmlsbHt0cmFuc2l0aW9uLWR1cmF0aW9uOjBtc30ubWF0LW1kYy1zbGlkZXIgLm1kYy1zbGlkZXJfX3RyYWNrLC5tYXQtbWRjLXNsaWRlciAubWRjLXNsaWRlcl9fdGh1bWJ7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LW1kYy1zbGlkZXIgLm1kYy1zbGlkZXJfX3ZhbHVlLWluZGljYXRvcntvcGFjaXR5OnZhcigtLW1hdC1tZGMtc2xpZGVyLXZhbHVlLWluZGljYXRvci1vcGFjaXR5LCAxKX0ubWF0LW1kYy1zbGlkZXIgLm1hdC1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1hdC1tZGMtc2xpZGVyLXJpcHBsZS1jb2xvciwgdHJhbnNwYXJlbnQpfS5tYXQtbWRjLXNsaWRlciAubWF0LXJpcHBsZSAubWF0LW1kYy1zbGlkZXItaG92ZXItcmlwcGxle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWF0LW1kYy1zbGlkZXItaG92ZXItcmlwcGxlLWNvbG9yLCB0cmFuc3BhcmVudCl9Lm1hdC1tZGMtc2xpZGVyIC5tYXQtcmlwcGxlIC5tYXQtbWRjLXNsaWRlci1mb2N1cy1yaXBwbGUsLm1hdC1tZGMtc2xpZGVyIC5tYXQtcmlwcGxlIC5tYXQtbWRjLXNsaWRlci1hY3RpdmUtcmlwcGxle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWF0LW1kYy1zbGlkZXItZm9jdXMtcmlwcGxlLWNvbG9yLCB0cmFuc3BhcmVudCl9Lm1hdC1tZGMtc2xpZGVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1kYy1zbGlkZXItLWRpc2NyZXRlIC5tZGMtc2xpZGVyX190aHVtYiwubWF0LW1kYy1zbGlkZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUubWRjLXNsaWRlci0tZGlzY3JldGUgLm1kYy1zbGlkZXJfX3RyYWNrLS1hY3RpdmVfZmlsbCwubWF0LW1kYy1zbGlkZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1kYy1zbGlkZXJfX3ZhbHVlLWluZGljYXRvcnt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1tZGMtc2xpZGVyIC5tYXQtbWRjLWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle2JvcmRlci1yYWRpdXM6NTAlfS5tZGMtc2xpZGVyX190aHVtYi0tZm9jdXNlZCAubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtjb250ZW50OiIifSddLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHdTZT17cHJvdmlkZTpYcix1c2VFeGlzdGluZzpXbigoKT0+JHUpLG11bHRpOiEwfSxTU2U9e3Byb3ZpZGU6WHIsdXNlRXhpc3Rpbmc6V24oKCk9PnZOKSxtdWx0aTohMH0sJHU9KCgpPT57Y2xhc3MgbntnZXQgdmFsdWUoKXtyZXR1cm4gbWkodGhpcy5faG9zdEVsZW1lbnQudmFsdWUpfXNldCB2YWx1ZShlKXtsZXQgaT1taShlKS50b1N0cmluZygpO3RoaXMuX2hhc1NldEluaXRpYWxWYWx1ZT90aGlzLl9pc0FjdGl2ZXx8KHRoaXMuX2hvc3RFbGVtZW50LnZhbHVlPWksdGhpcy5fdXBkYXRlVGh1bWJVSUJ5VmFsdWUoKSx0aGlzLl9zbGlkZXIuX29uVmFsdWVDaGFuZ2UodGhpcyksdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKSk6dGhpcy5faW5pdGlhbFZhbHVlPWl9Z2V0IHRyYW5zbGF0ZVgoKXtyZXR1cm4gdGhpcy5fc2xpZGVyLm1pbj49dGhpcy5fc2xpZGVyLm1heD8odGhpcy5fdHJhbnNsYXRlWD0wLHRoaXMuX3RyYW5zbGF0ZVgpOih2b2lkIDA9PT10aGlzLl90cmFuc2xhdGVYJiYodGhpcy5fdHJhbnNsYXRlWD10aGlzLl9jYWxjVHJhbnNsYXRlWEJ5VmFsdWUoKSksdGhpcy5fdHJhbnNsYXRlWCl9c2V0IHRyYW5zbGF0ZVgoZSl7dGhpcy5fdHJhbnNsYXRlWD1lfWdldCBtaW4oKXtyZXR1cm4gbWkodGhpcy5faG9zdEVsZW1lbnQubWluKX1zZXQgbWluKGUpe3RoaXMuX2hvc3RFbGVtZW50Lm1pbj1taShlKS50b1N0cmluZygpLHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCl9Z2V0IG1heCgpe3JldHVybiBtaSh0aGlzLl9ob3N0RWxlbWVudC5tYXgpfXNldCBtYXgoZSl7dGhpcy5faG9zdEVsZW1lbnQubWF4PW1pKGUpLnRvU3RyaW5nKCksdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKX1nZXQgc3RlcCgpe3JldHVybiBtaSh0aGlzLl9ob3N0RWxlbWVudC5zdGVwKX1zZXQgc3RlcChlKXt0aGlzLl9ob3N0RWxlbWVudC5zdGVwPW1pKGUpLnRvU3RyaW5nKCksdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdnQodGhpcy5faG9zdEVsZW1lbnQuZGlzYWJsZWQpfXNldCBkaXNhYmxlZChlKXt0aGlzLl9ob3N0RWxlbWVudC5kaXNhYmxlZD12dChlKSx0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuX3NsaWRlci5kaXNhYmxlZCE9PXRoaXMuZGlzYWJsZWQmJih0aGlzLl9zbGlkZXIuZGlzYWJsZWQ9dGhpcy5kaXNhYmxlZCl9Z2V0IHBlcmNlbnRhZ2UoKXtyZXR1cm4gdGhpcy5fc2xpZGVyLm1pbj49dGhpcy5fc2xpZGVyLm1heD90aGlzLl9zbGlkZXIuX2lzUnRsPzE6MDoodGhpcy52YWx1ZS10aGlzLl9zbGlkZXIubWluKS8odGhpcy5fc2xpZGVyLm1heC10aGlzLl9zbGlkZXIubWluKX1nZXQgZmlsbFBlcmNlbnRhZ2UoKXtyZXR1cm4gdGhpcy5fc2xpZGVyLl9jYWNoZWRXaWR0aD8wPT09dGhpcy5fdHJhbnNsYXRlWD8wOnRoaXMudHJhbnNsYXRlWC90aGlzLl9zbGlkZXIuX2NhY2hlZFdpZHRoOnRoaXMuX3NsaWRlci5faXNSdGw/MTowfV9zZXRJc0ZvY3VzZWQoZSl7dGhpcy5faXNGb2N1c2VkPWV9Y29uc3RydWN0b3IoZSxpLHIsbyl7dGhpcy5fbmdab25lPWUsdGhpcy5fZWxlbWVudFJlZj1pLHRoaXMuX2Nkcj1yLHRoaXMuX3NsaWRlcj1vLHRoaXMudmFsdWVDaGFuZ2U9bmV3IEYsdGhpcy5kcmFnU3RhcnQ9bmV3IEYsdGhpcy5kcmFnRW5kPW5ldyBGLHRoaXMudGh1bWJQb3NpdGlvbj0yLHRoaXMuX2tub2JSYWRpdXM9OCx0aGlzLl9pc0FjdGl2ZT0hMSx0aGlzLl9pc0ZvY3VzZWQ9ITEsdGhpcy5faGFzU2V0SW5pdGlhbFZhbHVlPSExLHRoaXMuX2Rlc3Ryb3llZD1uZXcgRWUsdGhpcy5fc2tpcFVJVXBkYXRlPSExLHRoaXMuX29uQ2hhbmdlRm49KCk9Pnt9LHRoaXMuX29uVG91Y2hlZEZuPSgpPT57fSx0aGlzLl9ob3N0RWxlbWVudD1pLm5hdGl2ZUVsZW1lbnQsdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5faG9zdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLHRoaXMuX29uUG9pbnRlckRvd24uYmluZCh0aGlzKSksdGhpcy5faG9zdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLHRoaXMuX29uUG9pbnRlck1vdmUuYmluZCh0aGlzKSksdGhpcy5faG9zdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIix0aGlzLl9vblBvaW50ZXJVcC5iaW5kKHRoaXMpKX0pfW5nT25EZXN0cm95KCl7dGhpcy5faG9zdEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLHRoaXMuX29uUG9pbnRlckRvd24pLHRoaXMuX2hvc3RFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIix0aGlzLl9vblBvaW50ZXJNb3ZlKSx0aGlzLl9ob3N0RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLHRoaXMuX29uUG9pbnRlclVwKSx0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpLHRoaXMuZHJhZ1N0YXJ0LmNvbXBsZXRlKCksdGhpcy5kcmFnRW5kLmNvbXBsZXRlKCl9aW5pdFByb3BzKCl7dGhpcy5fdXBkYXRlV2lkdGhJbmFjdGl2ZSgpLHRoaXMuZGlzYWJsZWQhPT10aGlzLl9zbGlkZXIuZGlzYWJsZWQmJih0aGlzLl9zbGlkZXIuZGlzYWJsZWQ9ITApLHRoaXMuc3RlcD10aGlzLl9zbGlkZXIuc3RlcCx0aGlzLm1pbj10aGlzLl9zbGlkZXIubWluLHRoaXMubWF4PXRoaXMuX3NsaWRlci5tYXgsdGhpcy5faW5pdFZhbHVlKCl9aW5pdFVJKCl7dGhpcy5fdXBkYXRlVGh1bWJVSUJ5VmFsdWUoKX1faW5pdFZhbHVlKCl7dGhpcy5faGFzU2V0SW5pdGlhbFZhbHVlPSEwLHZvaWQgMD09PXRoaXMuX2luaXRpYWxWYWx1ZT90aGlzLnZhbHVlPXRoaXMuX2dldERlZmF1bHRWYWx1ZSgpOih0aGlzLl9ob3N0RWxlbWVudC52YWx1ZT10aGlzLl9pbml0aWFsVmFsdWUsdGhpcy5fdXBkYXRlVGh1bWJVSUJ5VmFsdWUoKSx0aGlzLl9zbGlkZXIuX29uVmFsdWVDaGFuZ2UodGhpcyksdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKSl9X2dldERlZmF1bHRWYWx1ZSgpe3JldHVybiB0aGlzLm1pbn1fb25CbHVyKCl7dGhpcy5fc2V0SXNGb2N1c2VkKCExKSx0aGlzLl9vblRvdWNoZWRGbigpfV9vbkZvY3VzKCl7dGhpcy5fc2V0SXNGb2N1c2VkKCEwKX1fb25DaGFuZ2UoKXt0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSksdGhpcy5faXNBY3RpdmUmJnRoaXMuX3VwZGF0ZVRodW1iVUlCeVZhbHVlKHt3aXRoQW5pbWF0aW9uOiEwfSl9X29uSW5wdXQoKXt0aGlzLl9vbkNoYW5nZUZuKHRoaXMudmFsdWUpLCh0aGlzLl9zbGlkZXIuc3RlcHx8IXRoaXMuX2lzQWN0aXZlKSYmdGhpcy5fdXBkYXRlVGh1bWJVSUJ5VmFsdWUoe3dpdGhBbmltYXRpb246ITB9KSx0aGlzLl9zbGlkZXIuX29uVmFsdWVDaGFuZ2UodGhpcyl9X29uTmdDb250cm9sVmFsdWVDaGFuZ2UoKXsoIXRoaXMuX2lzQWN0aXZlfHwhdGhpcy5faXNGb2N1c2VkKSYmKHRoaXMuX3NsaWRlci5fb25WYWx1ZUNoYW5nZSh0aGlzKSx0aGlzLl91cGRhdGVUaHVtYlVJQnlWYWx1ZSgpKSx0aGlzLl9zbGlkZXIuZGlzYWJsZWQ9dGhpcy5fZm9ybUNvbnRyb2wuZGlzYWJsZWR9X29uUG9pbnRlckRvd24oZSl7dGhpcy5kaXNhYmxlZHx8MCE9PWUuYnV0dG9ufHwodGhpcy5faXNBY3RpdmU9ITAsdGhpcy5fc2V0SXNGb2N1c2VkKCEwKSx0aGlzLl91cGRhdGVXaWR0aEFjdGl2ZSgpLHRoaXMuX3NsaWRlci5fdXBkYXRlRGltZW5zaW9ucygpLHRoaXMuX3NsaWRlci5zdGVwfHx0aGlzLl91cGRhdGVUaHVtYlVJQnlQb2ludGVyRXZlbnQoZSx7d2l0aEFuaW1hdGlvbjohMH0pLHRoaXMuZGlzYWJsZWR8fCh0aGlzLl9oYW5kbGVWYWx1ZUNvcnJlY3Rpb24oZSksdGhpcy5kcmFnU3RhcnQuZW1pdCh7c291cmNlOnRoaXMscGFyZW50OnRoaXMuX3NsaWRlcix2YWx1ZTp0aGlzLnZhbHVlfSkpKX1faGFuZGxlVmFsdWVDb3JyZWN0aW9uKGUpe3RoaXMuX3NraXBVSVVwZGF0ZT0hMCxzZXRUaW1lb3V0KCgpPT57dGhpcy5fc2tpcFVJVXBkYXRlPSExLHRoaXMuX2ZpeFZhbHVlKGUpfSwwKX1fZml4VmFsdWUoZSl7bGV0IGk9ZS5jbGllbnRYLXRoaXMuX3NsaWRlci5fY2FjaGVkTGVmdCxyPXRoaXMuX3NsaWRlci5fY2FjaGVkV2lkdGgsbz0wPT09dGhpcy5fc2xpZGVyLnN0ZXA/MTp0aGlzLl9zbGlkZXIuc3RlcCxhPU1hdGguZmxvb3IoKHRoaXMuX3NsaWRlci5tYXgtdGhpcy5fc2xpZGVyLm1pbikvbyksYz1NYXRoLnJvdW5kKCh0aGlzLl9zbGlkZXIuX2lzUnRsPzEtaS9yOmkvcikqYSkvYSoodGhpcy5fc2xpZGVyLm1heC10aGlzLl9zbGlkZXIubWluKSt0aGlzLl9zbGlkZXIubWluLGQ9TWF0aC5yb3VuZChjL28pKm87aWYoZD09PXRoaXMudmFsdWUpcmV0dXJuIHRoaXMuX3NsaWRlci5fb25WYWx1ZUNoYW5nZSh0aGlzKSx2b2lkKHRoaXMuX3NsaWRlci5zdGVwPjA/dGhpcy5fdXBkYXRlVGh1bWJVSUJ5VmFsdWUoKTp0aGlzLl91cGRhdGVUaHVtYlVJQnlQb2ludGVyRXZlbnQoZSx7d2l0aEFuaW1hdGlvbjp0aGlzLl9zbGlkZXIuX2hhc0FuaW1hdGlvbn0pKTt0aGlzLnZhbHVlPWQsdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpLHRoaXMuX29uQ2hhbmdlRm4odGhpcy52YWx1ZSksdGhpcy5fc2xpZGVyLl9vblZhbHVlQ2hhbmdlKHRoaXMpLHRoaXMuX3NsaWRlci5zdGVwPjA/dGhpcy5fdXBkYXRlVGh1bWJVSUJ5VmFsdWUoKTp0aGlzLl91cGRhdGVUaHVtYlVJQnlQb2ludGVyRXZlbnQoZSx7d2l0aEFuaW1hdGlvbjp0aGlzLl9zbGlkZXIuX2hhc0FuaW1hdGlvbn0pfV9vblBvaW50ZXJNb3ZlKGUpeyF0aGlzLl9zbGlkZXIuc3RlcCYmdGhpcy5faXNBY3RpdmUmJnRoaXMuX3VwZGF0ZVRodW1iVUlCeVBvaW50ZXJFdmVudChlKX1fb25Qb2ludGVyVXAoKXt0aGlzLl9pc0FjdGl2ZSYmKHRoaXMuX2lzQWN0aXZlPSExLHRoaXMuZHJhZ0VuZC5lbWl0KHtzb3VyY2U6dGhpcyxwYXJlbnQ6dGhpcy5fc2xpZGVyLHZhbHVlOnRoaXMudmFsdWV9KSxzZXRUaW1lb3V0KCgpPT50aGlzLl91cGRhdGVXaWR0aEluYWN0aXZlKCkpKX1fY2xhbXAoZSl7cmV0dXJuIE1hdGgubWF4KE1hdGgubWluKGUsdGhpcy5fc2xpZGVyLl9jYWNoZWRXaWR0aCksMCl9X2NhbGNUcmFuc2xhdGVYQnlWYWx1ZSgpe3JldHVybiB0aGlzLl9zbGlkZXIuX2lzUnRsPygxLXRoaXMucGVyY2VudGFnZSkqdGhpcy5fc2xpZGVyLl9jYWNoZWRXaWR0aDp0aGlzLnBlcmNlbnRhZ2UqdGhpcy5fc2xpZGVyLl9jYWNoZWRXaWR0aH1fY2FsY1RyYW5zbGF0ZVhCeVBvaW50ZXJFdmVudChlKXtyZXR1cm4gZS5jbGllbnRYLXRoaXMuX3NsaWRlci5fY2FjaGVkTGVmdH1fdXBkYXRlV2lkdGhBY3RpdmUoKXt0aGlzLl9ob3N0RWxlbWVudC5zdHlsZS5wYWRkaW5nPWAwICR7dGhpcy5fc2xpZGVyLl9pbnB1dFBhZGRpbmd9cHhgLHRoaXMuX2hvc3RFbGVtZW50LnN0eWxlLndpZHRoPWBjYWxjKDEwMCUgKyAke3RoaXMuX3NsaWRlci5faW5wdXRQYWRkaW5nfXB4KWB9X3VwZGF0ZVdpZHRoSW5hY3RpdmUoKXt0aGlzLl9ob3N0RWxlbWVudC5zdHlsZS5wYWRkaW5nPSIwcHgiLHRoaXMuX2hvc3RFbGVtZW50LnN0eWxlLndpZHRoPSJjYWxjKDEwMCUgKyA0OHB4KSIsdGhpcy5faG9zdEVsZW1lbnQuc3R5bGUubGVmdD0iLTI0cHgifV91cGRhdGVUaHVtYlVJQnlWYWx1ZShlKXt0aGlzLnRyYW5zbGF0ZVg9dGhpcy5fY2xhbXAodGhpcy5fY2FsY1RyYW5zbGF0ZVhCeVZhbHVlKCkpLHRoaXMuX3VwZGF0ZVRodW1iVUkoZSl9X3VwZGF0ZVRodW1iVUlCeVBvaW50ZXJFdmVudChlLGkpe3RoaXMudHJhbnNsYXRlWD10aGlzLl9jbGFtcCh0aGlzLl9jYWxjVHJhbnNsYXRlWEJ5UG9pbnRlckV2ZW50KGUpKSx0aGlzLl91cGRhdGVUaHVtYlVJKGkpfV91cGRhdGVUaHVtYlVJKGUpe3RoaXMuX3NsaWRlci5fc2V0VHJhbnNpdGlvbighIWU/LndpdGhBbmltYXRpb24pLHRoaXMuX3NsaWRlci5fb25UcmFuc2xhdGVYQ2hhbmdlKHRoaXMpfXdyaXRlVmFsdWUoZSl7dGhpcy52YWx1ZT1lfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5fb25DaGFuZ2VGbj1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMuX29uVG91Y2hlZEZuPWV9c2V0RGlzYWJsZWRTdGF0ZShlKXt0aGlzLmRpc2FibGVkPWV9Zm9jdXMoKXt0aGlzLl9ob3N0RWxlbWVudC5mb2N1cygpfWJsdXIoKXt0aGlzLl9ob3N0RWxlbWVudC5ibHVyKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMob3QpLEMoeGUpLEMoUXQpLEModFQpKX0sbi5cdTAyNzVkaXI9TWUoe3R5cGU6bixzZWxlY3RvcnM6W1siaW5wdXQiLCJtYXRTbGlkZXJUaHVtYiIsIiJdXSxob3N0QXR0cnM6WyJ0eXBlIiwicmFuZ2UiLDEsIm1kYy1zbGlkZXJfX2lucHV0Il0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJkEoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fb25DaGFuZ2UoKX0pKCJpbnB1dCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fb25JbnB1dCgpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uQmx1cigpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBpLl9vbkZvY3VzKCl9KSwyJmUmJkJlKCJhcmlhLXZhbHVldGV4dCIsaS5fdmFsdWV0ZXh0KX0saW5wdXRzOnt2YWx1ZToidmFsdWUifSxvdXRwdXRzOnt2YWx1ZUNoYW5nZToidmFsdWVDaGFuZ2UiLGRyYWdTdGFydDoiZHJhZ1N0YXJ0IixkcmFnRW5kOiJkcmFnRW5kIn0sZXhwb3J0QXM6WyJtYXRTbGlkZXJUaHVtYiJdLGZlYXR1cmVzOltWdChbd1NlLHtwcm92aWRlOlZZLHVzZUV4aXN0aW5nOm59XSldfSksbn0pKCksdk49KCgpPT57Y2xhc3MgbiBleHRlbmRzICR1e2dldFNpYmxpbmcoKXtyZXR1cm4gdGhpcy5fc2libGluZ3x8KHRoaXMuX3NpYmxpbmc9dGhpcy5fc2xpZGVyLl9nZXRJbnB1dCh0aGlzLl9pc0VuZFRodW1iPzE6MikpLHRoaXMuX3NpYmxpbmd9Z2V0TWluUG9zKCl7bGV0IGU9dGhpcy5nZXRTaWJsaW5nKCk7cmV0dXJuIXRoaXMuX2lzTGVmdFRodW1iJiZlP2UudHJhbnNsYXRlWDowfWdldE1heFBvcygpe2xldCBlPXRoaXMuZ2V0U2libGluZygpO3JldHVybiB0aGlzLl9pc0xlZnRUaHVtYiYmZT9lLnRyYW5zbGF0ZVg6dGhpcy5fc2xpZGVyLl9jYWNoZWRXaWR0aH1fc2V0SXNMZWZ0VGh1bWIoKXt0aGlzLl9pc0xlZnRUaHVtYj10aGlzLl9pc0VuZFRodW1iJiZ0aGlzLl9zbGlkZXIuX2lzUnRsfHwhdGhpcy5faXNFbmRUaHVtYiYmIXRoaXMuX3NsaWRlci5faXNSdGx9Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIoZSxyLG8saSksdGhpcy5fY2RyPW8sdGhpcy5faXNFbmRUaHVtYj10aGlzLl9ob3N0RWxlbWVudC5oYXNBdHRyaWJ1dGUoIm1hdFNsaWRlckVuZFRodW1iIiksdGhpcy5fc2V0SXNMZWZ0VGh1bWIoKSx0aGlzLnRodW1iUG9zaXRpb249dGhpcy5faXNFbmRUaHVtYj8yOjF9X2dldERlZmF1bHRWYWx1ZSgpe3JldHVybiB0aGlzLl9pc0VuZFRodW1iJiZ0aGlzLl9zbGlkZXIuX2lzUmFuZ2U/dGhpcy5tYXg6dGhpcy5taW59X29uSW5wdXQoKXtzdXBlci5fb25JbnB1dCgpLHRoaXMuX3VwZGF0ZVNpYmxpbmcoKSx0aGlzLl9pc0FjdGl2ZXx8dGhpcy5fdXBkYXRlV2lkdGhJbmFjdGl2ZSgpfV9vbk5nQ29udHJvbFZhbHVlQ2hhbmdlKCl7c3VwZXIuX29uTmdDb250cm9sVmFsdWVDaGFuZ2UoKSx0aGlzLmdldFNpYmxpbmcoKT8uX3VwZGF0ZU1pbk1heCgpfV9vblBvaW50ZXJEb3duKGUpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLl9zaWJsaW5nJiYodGhpcy5fc2libGluZy5fdXBkYXRlV2lkdGhBY3RpdmUoKSx0aGlzLl9zaWJsaW5nLl9ob3N0RWxlbWVudC5jbGFzc0xpc3QuYWRkKCJtYXQtbWRjLXNsaWRlci1pbnB1dC1uby1wb2ludGVyLWV2ZW50cyIpKSxzdXBlci5fb25Qb2ludGVyRG93bihlKSl9X29uUG9pbnRlclVwKCl7c3VwZXIuX29uUG9pbnRlclVwKCksdGhpcy5fc2libGluZyYmc2V0VGltZW91dCgoKT0+e3RoaXMuX3NpYmxpbmcuX3VwZGF0ZVdpZHRoSW5hY3RpdmUoKSx0aGlzLl9zaWJsaW5nLl9ob3N0RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCJtYXQtbWRjLXNsaWRlci1pbnB1dC1uby1wb2ludGVyLWV2ZW50cyIpfSl9X29uUG9pbnRlck1vdmUoZSl7c3VwZXIuX29uUG9pbnRlck1vdmUoZSksIXRoaXMuX3NsaWRlci5zdGVwJiZ0aGlzLl9pc0FjdGl2ZSYmdGhpcy5fdXBkYXRlU2libGluZygpfV9maXhWYWx1ZShlKXtzdXBlci5fZml4VmFsdWUoZSksdGhpcy5fc2libGluZz8uX3VwZGF0ZU1pbk1heCgpfV9jbGFtcChlKXtyZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4oZSx0aGlzLmdldE1heFBvcygpKSx0aGlzLmdldE1pblBvcygpKX1fdXBkYXRlTWluTWF4KCl7bGV0IGU9dGhpcy5nZXRTaWJsaW5nKCk7IWV8fCh0aGlzLl9pc0VuZFRodW1iPyh0aGlzLm1pbj1NYXRoLm1heCh0aGlzLl9zbGlkZXIubWluLGUudmFsdWUpLHRoaXMubWF4PXRoaXMuX3NsaWRlci5tYXgpOih0aGlzLm1pbj10aGlzLl9zbGlkZXIubWluLHRoaXMubWF4PU1hdGgubWluKHRoaXMuX3NsaWRlci5tYXgsZS52YWx1ZSkpKX1fdXBkYXRlV2lkdGhBY3RpdmUoKXtsZXQgZT0yKnRoaXMuX3NsaWRlci5fcmlwcGxlUmFkaXVzLTIqdGhpcy5fc2xpZGVyLl9pbnB1dFBhZGRpbmc7dGhpcy5faG9zdEVsZW1lbnQuc3R5bGUud2lkdGg9YCR7KHRoaXMuX3NsaWRlci5fY2FjaGVkV2lkdGgrdGhpcy5fc2xpZGVyLl9pbnB1dFBhZGRpbmctZSkqKHRoaXMuX3NsaWRlci5taW48dGhpcy5fc2xpZGVyLm1heD8odGhpcy5tYXgtdGhpcy5taW4pLyh0aGlzLl9zbGlkZXIubWF4LXRoaXMuX3NsaWRlci5taW4pOjEpK2V9cHhgLHRoaXMuX2hvc3RFbGVtZW50LnN0eWxlLnBhZGRpbmc9YDAgJHt0aGlzLl9zbGlkZXIuX2lucHV0UGFkZGluZ31weGB9X3VwZGF0ZVdpZHRoSW5hY3RpdmUoKXtsZXQgZT10aGlzLmdldFNpYmxpbmcoKTtpZighZSlyZXR1cm47bGV0IHI9dGhpcy5faXNFbmRUaHVtYj90aGlzLnZhbHVlLSh0aGlzLnZhbHVlLWUudmFsdWUpLzI6dGhpcy52YWx1ZSsoZS52YWx1ZS10aGlzLnZhbHVlKS8yO3RoaXMuX2hvc3RFbGVtZW50LnN0eWxlLndpZHRoPXRoaXMuX3NsaWRlci5fY2FjaGVkV2lkdGgqKHRoaXMuX3NsaWRlci5taW48dGhpcy5fc2xpZGVyLm1heD90aGlzLl9pc0VuZFRodW1iPyh0aGlzLm1heC1yKS8odGhpcy5fc2xpZGVyLm1heC10aGlzLl9zbGlkZXIubWluKTooci10aGlzLm1pbikvKHRoaXMuX3NsaWRlci5tYXgtdGhpcy5fc2xpZGVyLm1pbik6MSkrMjQrInB4Iix0aGlzLl9ob3N0RWxlbWVudC5zdHlsZS5wYWRkaW5nPSIwcHgiLHRoaXMuX2lzTGVmdFRodW1iPyh0aGlzLl9ob3N0RWxlbWVudC5zdHlsZS5sZWZ0PSItMjRweCIsdGhpcy5faG9zdEVsZW1lbnQuc3R5bGUucmlnaHQ9ImF1dG8iKToodGhpcy5faG9zdEVsZW1lbnQuc3R5bGUubGVmdD0iYXV0byIsdGhpcy5faG9zdEVsZW1lbnQuc3R5bGUucmlnaHQ9Ii0yNHB4Iil9X3VwZGF0ZVN0YXRpY1N0eWxlcygpe3RoaXMuX2hvc3RFbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoIm1hdC1zbGlkZXJfX3JpZ2h0LWlucHV0IiwhdGhpcy5faXNMZWZ0VGh1bWIpfV91cGRhdGVTaWJsaW5nKCl7bGV0IGU9dGhpcy5nZXRTaWJsaW5nKCk7IWV8fChlLl91cGRhdGVNaW5NYXgoKSx0aGlzLl9pc0FjdGl2ZT9lLl91cGRhdGVXaWR0aEFjdGl2ZSgpOmUuX3VwZGF0ZVdpZHRoSW5hY3RpdmUoKSl9d3JpdGVWYWx1ZShlKXt0aGlzLnZhbHVlPWUsdGhpcy5fdXBkYXRlV2lkdGhJbmFjdGl2ZSgpLHRoaXMuX3VwZGF0ZVNpYmxpbmcoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhvdCksQyh0VCksQyh4ZSksQyhRdCkpfSxuLlx1MDI3NWRpcj1NZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsIm1hdFNsaWRlclN0YXJ0VGh1bWIiLCIiXSxbImlucHV0IiwibWF0U2xpZGVyRW5kVGh1bWIiLCIiXV0sZXhwb3J0QXM6WyJtYXRTbGlkZXJSYW5nZVRodW1iIl0sZmVhdHVyZXM6W1Z0KFtTU2Use3Byb3ZpZGU6SFksdXNlRXhpc3Rpbmc6bn1dKSxYZV19KSxufSkoKSxlcD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9SCh7aW1wb3J0czpbZG4sRGUsX2FdfSksbn0pKCk7ZnVuY3Rpb24gRVNlKG4sdCl7aWYoMSZuKXtsZXQgZT1UZSgpO2YoMCwibWF0LXNsaWRlciIsMTEpKDEsImlucHV0IiwxMiksQSgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiBuZShlKSxpZSh3KDIpLm9uU2xpZGVyQ2hhbmdlLmVtaXQocikpfSksZygpKCl9aWYoMiZuKXtsZXQgZT13KDIpO2IoIm1pbiIsMCkoIm1heCIsZS5zY3JvbGxCZWdpbkluZGV4VXBwZXJMaW1pdCksdigxKSxiKCJ2YWx1ZSIsZS5zY3JvbGxCZWdpbkluZGV4KX19ZnVuY3Rpb24gVFNlKG4sdCl7aWYoMSZuKXtsZXQgZT1UZSgpO2YoMCwiZGl2Iiw2KSgxLCJidXR0b24iLDcpLEEoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBuZShlKSxpZSh3KCkub25OYXZpZ2F0ZUxlZnQuZW1pdCgpKX0pLFQoMiwiIDwgIiksZygpLGYoMywiZGl2Iiw4KSxUKDQpLGcoKSxmKDUsImJ1dHRvbiIsOSksQSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIG5lKGUpLGllKHcoKS5vbk5hdmlnYXRlUmlnaHQuZW1pdCgpKX0pLFQoNiwiID4gIiksZygpLFMoNyxFU2UsMiwzLCJtYXQtc2xpZGVyIiwxMCksZygpfWlmKDImbil7bGV0IGU9dygpO3YoNCksR00oIiAiLGUuc2Nyb2xsQmVnaW5JbmRleCwiIH4gIixlLnNjcm9sbEJlZ2luSW5kZXgrZS5kaXNwbGF5Q291bnQtMSwiIG9mICIsZS5udW1FeGVjdXRpb25zLCIgIiksdigzKSxiKCJuZ0lmIixlLnNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0PjApfX12YXIgRFNlPWZ1bmN0aW9uKG4sdCxlKXtyZXR1cm5bbix0LGVdfTtmdW5jdGlvbiBJU2Uobix0KXtpZigxJm4pe2xldCBlPVRlKCk7ZigwLCJkaXYiLDE1KSxBKCJjbGljayIsZnVuY3Rpb24oKXtsZXQgbz1uZShlKS5pbmRleDtyZXR1cm4gaWUodygyKS5vbkV4ZWN1dGlvbkRpZ2VzdENsaWNrZWQuZW1pdChvKSl9KSxmKDEsImRpdiIsMTYpLFQoMiksZygpKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXQuaW5kZXgscj13KDIpO3YoMSksWmkoInRpdGxlIixlLm9wX3R5cGUpLGIoIm5nQ2xhc3MiLHliKDMsRFNlLGUuaXNfZ3JhcGg/ImZ1bmMtZ3JhcGgtZXhlY3V0aW9uIjoiIixpPT09ci5mb2N1c2VkRXhlY3V0aW9uRGlzcGxheUluZGV4PyJmb2N1c2VkIjoiIixyLmRpc3BsYXlGb2N1c2VkQWxlcnRUeXBlc1tpXXx8IiIpKSx2KDEpLFZlKCIgIixlLnNob3J0X29wX3R5cGUsIiAiKX19ZnVuY3Rpb24gQVNlKG4sdCl7aWYoMSZuJiYoZigwLCJkaXYiLDEzKSxTKDEsSVNlLDMsNywiZGl2IiwxNCksZygpKSwyJm4pe2xldCBlPXcoKTt2KDEpLGIoIm5nRm9yT2YiLGUuZGlzcGxheUV4ZWN1dGlvbkRpZ2VzdHMpfX1mdW5jdGlvbiBSU2Uobix0KXtpZigxJm4mJihHdCgwKSxrKDEsInRmLWRlYnVnZ2VyLXYyLWV4ZWN1dGlvbi1kYXRhIiwxNyksV3QoKSksMiZuKXtsZXQgZT13KCk7digxKSxiKCJmb2N1c2VkRXhlY3V0aW9uSW5kZXgiLGUuZm9jdXNlZEV4ZWN1dGlvbkluZGV4KX19dmFyIFVZPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmFjdGl2ZVJ1bklkPW51bGwsdGhpcy5sb2FkaW5nTnVtRXhlY3V0aW9ucz0hMSx0aGlzLm51bUV4ZWN1dGlvbnM9MCx0aGlzLnNjcm9sbEJlZ2luSW5kZXg9MCx0aGlzLnNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0PTAsdGhpcy5wYWdlU2l6ZT0wLHRoaXMuZGlzcGxheUNvdW50PTAsdGhpcy5kaXNwbGF5RXhlY3V0aW9uRGlnZXN0cz1bXSx0aGlzLmRpc3BsYXlGb2N1c2VkQWxlcnRUeXBlcz1bXSx0aGlzLmZvY3VzZWRFeGVjdXRpb25JbmRleD1udWxsLHRoaXMuZm9jdXNlZEV4ZWN1dGlvbkRpc3BsYXlJbmRleD1udWxsLHRoaXMuZm9jdXNlZEV4ZWN1dGlvbkRhdGE9bnVsbCx0aGlzLm9uTmF2aWdhdGVMZWZ0PW5ldyBGLHRoaXMub25OYXZpZ2F0ZVJpZ2h0PW5ldyBGLHRoaXMub25FeGVjdXRpb25EaWdlc3RDbGlja2VkPW5ldyBGLHRoaXMub25TbGlkZXJDaGFuZ2U9bmV3IEZ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbInRpbWVsaW5lLWNvbXBvbmVudCJdXSxpbnB1dHM6e2FjdGl2ZVJ1bklkOiJhY3RpdmVSdW5JZCIsbG9hZGluZ051bUV4ZWN1dGlvbnM6ImxvYWRpbmdOdW1FeGVjdXRpb25zIixudW1FeGVjdXRpb25zOiJudW1FeGVjdXRpb25zIixzY3JvbGxCZWdpbkluZGV4OiJzY3JvbGxCZWdpbkluZGV4IixzY3JvbGxCZWdpbkluZGV4VXBwZXJMaW1pdDoic2Nyb2xsQmVnaW5JbmRleFVwcGVyTGltaXQiLHBhZ2VTaXplOiJwYWdlU2l6ZSIsZGlzcGxheUNvdW50OiJkaXNwbGF5Q291bnQiLGRpc3BsYXlFeGVjdXRpb25EaWdlc3RzOiJkaXNwbGF5RXhlY3V0aW9uRGlnZXN0cyIsZGlzcGxheUZvY3VzZWRBbGVydFR5cGVzOiJkaXNwbGF5Rm9jdXNlZEFsZXJ0VHlwZXMiLGZvY3VzZWRFeGVjdXRpb25JbmRleDoiZm9jdXNlZEV4ZWN1dGlvbkluZGV4Iixmb2N1c2VkRXhlY3V0aW9uRGlzcGxheUluZGV4OiJmb2N1c2VkRXhlY3V0aW9uRGlzcGxheUluZGV4Iixmb2N1c2VkRXhlY3V0aW9uRGF0YToiZm9jdXNlZEV4ZWN1dGlvbkRhdGEifSxvdXRwdXRzOntvbk5hdmlnYXRlTGVmdDoib25OYXZpZ2F0ZUxlZnQiLG9uTmF2aWdhdGVSaWdodDoib25OYXZpZ2F0ZVJpZ2h0IixvbkV4ZWN1dGlvbkRpZ2VzdENsaWNrZWQ6Im9uRXhlY3V0aW9uRGlnZXN0Q2xpY2tlZCIsb25TbGlkZXJDaGFuZ2U6Im9uU2xpZGVyQ2hhbmdlIn0sZGVjbHM6OSx2YXJzOjQsY29uc3RzOltbMSwidGltZWxpbmUtdGl0bGUiXSxbMSwiZXhlY3V0aW9uLWNvdW50Il0sWzEsInRvcC1sZXZlbC1leGVjdXRpb25zIl0sWyJjbGFzcyIsIm5hdmlnYXRpb24tc2VjdGlvbiIsNCwibmdJZiJdLFsiY2xhc3MiLCJleGVjdXRpb24tdGltZWxpbmUiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJuYXZpZ2F0aW9uLXNlY3Rpb24iXSxbIm1hdC1idXR0b24iLCIiLDEsIm5hdmlnYXRpb24tYnV0dG9uLWxlZnQiLDMsImNsaWNrIl0sWzEsIm5hdmlnYXRpb24tcG9zaXRpb24taW5mbyJdLFsibWF0LWJ1dHRvbiIsIiIsMSwibmF2aWdhdGlvbi1idXR0b24tcmlnaHQiLDMsImNsaWNrIl0sWyJjbGFzcyIsInRpbWVsaW5lLXNsaWRlciIsInN0ZXAiLCIxIiwzLCJtaW4iLCJtYXgiLDQsIm5nSWYiXSxbInN0ZXAiLCIxIiwxLCJ0aW1lbGluZS1zbGlkZXIiLDMsIm1pbiIsIm1heCJdLFsibWF0U2xpZGVyVGh1bWIiLCIiLDMsInZhbHVlIiwidmFsdWVDaGFuZ2UiXSxbMSwiZXhlY3V0aW9uLXRpbWVsaW5lIl0sWzMsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywiY2xpY2siXSxbMSwiZXhlY3V0aW9uLWRpZ2VzdCIsMywibmdDbGFzcyIsInRpdGxlIl0sWzMsImZvY3VzZWRFeGVjdXRpb25JbmRleCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGYoMCwiZGl2IikoMSwiZGl2IiwwKSxUKDIsIiBQeXRob24gRXhlY3V0aW9uIFRpbWVsaW5lICIpLGYoMywic3BhbiIsMSksVCg0KSxnKCkoKSxmKDUsImRpdiIsMiksUyg2LFRTZSw4LDQsImRpdiIsMyksUyg3LEFTZSwyLDEsImRpdiIsNCksUyg4LFJTZSwyLDEsIm5nLWNvbnRhaW5lciIsNSksZygpKCkpLDImZSYmKHYoNCksVmUoIiAoIixpLm51bUV4ZWN1dGlvbnMsIikgIiksdigyKSxiKCJuZ0lmIixpLm51bUV4ZWN1dGlvbnMpLHYoMSksYigibmdJZiIsaS5udW1FeGVjdXRpb25zKSx2KDEpLGIoIm5nSWYiLG51bGwhPT1pLmFjdGl2ZVJ1bklkJiZudWxsIT09aS5mb2N1c2VkRXhlY3V0aW9uSW5kZXgpKX0sZGVwZW5kZW5jaWVzOlt3bixubixOZSxCWSxraSxKdSwkdV0sc3R5bGVzOlsiLmV4ZWN1dGlvbi1kaWdlc3RbX25nY29udGVudC0lQ09NUCVdIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UzZTVlODtcbiAgYm9yZGVyOiAxcHggc29saWQgI2MwYzBjMDtcbiAgY29sb3I6ICM0MjUwNjY7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udC1zaXplOiAxMHB4O1xuICBoZWlnaHQ6IDE1cHg7XG4gIHBhZGRpbmc6IDFweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aWR0aDogMTJweDtcbn1cblxuLmV4ZWN1dGlvbi1kaWdlc3QuZnVuYy1ncmFwaC1leGVjdXRpb25bX25nY29udGVudC0lQ09NUCVdIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M3ZGJmNTtcbiAgY29sb3I6ICM0ZTU2NjQ7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG4uZXhlY3V0aW9uLWRpZ2VzdC5mb2N1c2VkW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmQ0YjM7XG4gIGJvcmRlcjogMXB4IHNvbGlkICMwMDA7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG4uZXhlY3V0aW9uLWRpZ2VzdC5JbmZOYW5BbGVydFtfbmdjb250ZW50LSVDT01QJV0ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTUyNTkyO1xuICBjb2xvcjogI2ZmZjtcbn1cblxuXG4uZXhlY3V0aW9uLWRpZ2VzdFtfbmdjb250ZW50LSVDT01QJV06aG92ZXIge1xuICBib3JkZXI6IDFweCBzb2xpZCAjMDAwO1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuLmV4ZWN1dGlvbi10aW1lbGluZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBvdmVyZmxvdy14OiBoaWRkZW47XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW4tdG9wOiA1cHg7XG4gIG1hcmdpbi1ib3R0b206IDVweDtcbn1cblxuLnRpbWVsaW5lLXNsaWRlcltfbmdjb250ZW50LSVDT01QJV0ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGhlaWdodDogNDhweDtcbiAgbGVmdDogMzQwcHg7IFxuICBwYWRkaW5nOiAwO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiA0MHB4O1xuICAtLW1kYy1zbGlkZXItaGFuZGxlLXdpZHRoOiA4MHB4O1xuICAtLW1kYy1zbGlkZXItaGFuZGxlLWhlaWdodDogMTZweDtcbiAgLS1tZGMtc2xpZGVyLWhhbmRsZS1zaGFwZTogNXB4O1xufVxuXG4gIC5tYXQtbWRjLWZvY3VzLWluZGljYXRvciB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5uYXZpZ2F0aW9uLXBvc2l0aW9uLWluZm9bX25nY29udGVudC0lQ09NUCVdIHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbiAgbWF4LXdpZHRoOiAyMDBweDtcbiAgcGFkZGluZy1sZWZ0OiAxMHB4O1xuICBwYWRkaW5nLXJpZ2h0OiAxMHB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cbi5uYXZpZ2F0aW9uLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVdIHtcbiAgaGVpZ2h0OiA0OHB4O1xuICBsaW5lLWhlaWdodDogNDhweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aWR0aDogMTAwJTtcbn0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGtTZT1bIl9fZm9yd2FyZF8iLCJfX2JhY2t3YXJkXyIsIl9faW5mZXJlbmNlXyJdLGpZPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuYWN0aXZlUnVuSWQkPXRoaXMuc3RvcmUucGlwZSh1bigkbykpLHRoaXMubG9hZGluZ051bUV4ZWN1dGlvbnMkPXRoaXMuc3RvcmUucGlwZSh1bihXKHFFLGk9Pmkuc3RhdGU9PVJlLkxPQURJTkcpKSksdGhpcy5zY3JvbGxCZWdpbkluZGV4JD10aGlzLnN0b3JlLnBpcGUodW4oaHkpKSx0aGlzLnNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0JD10aGlzLnN0b3JlLnBpcGUodW4oVyhadSxIZywoaSxyKT0+TWF0aC5tYXgoMCxpLXIpKSkpLHRoaXMucGFnZVNpemUkPXRoaXMuc3RvcmUucGlwZSh1bihWZykpLHRoaXMuZGlzcGxheUNvdW50JD10aGlzLnN0b3JlLnBpcGUodW4oSGcpKSx0aGlzLmRpc3BsYXlFeGVjdXRpb25EaWdlc3RzJD10aGlzLnN0b3JlLnBpcGUodW4oVygkWCxpPT5pLm1hcChyPT5mdW5jdGlvbihuLHQ9MSl7aWYoIW4pcmV0dXJue29wX3R5cGU6IihOL0EpIixzaG9ydF9vcF90eXBlOiIuLiIsaXNfZ3JhcGg6ITF9O2xldCBlPWtTZS5maWx0ZXIoaT0+bi5vcF90eXBlLnN0YXJ0c1dpdGgoaSkpO2lmKGUubGVuZ3RoKXtsZXQgaT1uLm9wX3R5cGUuc2xpY2UoZVswXS5sZW5ndGgpO3JldHVybntvcF90eXBlOm4ub3BfdHlwZSxzaG9ydF9vcF90eXBlOmkuc2xpY2UoMCx0KSxpc19ncmFwaDohMH19cmV0dXJue29wX3R5cGU6bi5vcF90eXBlLHNob3J0X29wX3R5cGU6bi5vcF90eXBlLnNsaWNlKDAsdCksaXNfZ3JhcGg6ITF9fShyKSkpKSksdGhpcy5kaXNwbGF5Rm9jdXNlZEFsZXJ0VHlwZXMkPXRoaXMuc3RvcmUucGlwZSh1bihsWSkpLHRoaXMuZm9jdXNlZEV4ZWN1dGlvbkluZGV4JD10aGlzLnN0b3JlLnBpcGUodW4ocE4pKSx0aGlzLmZvY3VzZWRFeGVjdXRpb25EaXNwbGF5SW5kZXgkPXRoaXMuc3RvcmUucGlwZSh1bihjWSkpLHRoaXMubnVtRXhlY3V0aW9ucyQ9dGhpcy5zdG9yZS5waXBlKHVuKFp1KSl9b25OYXZpZ2F0ZUxlZnQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKElnKCkpfW9uTmF2aWdhdGVSaWdodCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goQWcoKSl9b25FeGVjdXRpb25EaWdlc3RDbGlja2VkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goUGcoe2Rpc3BsYXlJbmRleDplfSkpfW9uU2xpZGVyQ2hhbmdlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goUmcoe2luZGV4OmV9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoSWUpKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12Mi10aW1lbGluZSJdXSxkZWNsczoxMix2YXJzOjMzLGNvbnN0czpbWzMsImFjdGl2ZVJ1bklkIiwibG9hZGluZ051bUV4ZWN1dGlvbnMiLCJudW1FeGVjdXRpb25zIiwic2Nyb2xsQmVnaW5JbmRleCIsInNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0IiwicGFnZVNpemUiLCJkaXNwbGF5Q291bnQiLCJkaXNwbGF5RXhlY3V0aW9uRGlnZXN0cyIsImRpc3BsYXlGb2N1c2VkQWxlcnRUeXBlcyIsImZvY3VzZWRFeGVjdXRpb25JbmRleCIsImZvY3VzZWRFeGVjdXRpb25EaXNwbGF5SW5kZXgiLCJvbk5hdmlnYXRlTGVmdCIsIm9uTmF2aWdhdGVSaWdodCIsIm9uRXhlY3V0aW9uRGlnZXN0Q2xpY2tlZCIsIm9uU2xpZGVyQ2hhbmdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZigwLCJ0aW1lbGluZS1jb21wb25lbnQiLDApLEEoIm9uTmF2aWdhdGVMZWZ0IixmdW5jdGlvbigpe3JldHVybiBpLm9uTmF2aWdhdGVMZWZ0KCl9KSgib25OYXZpZ2F0ZVJpZ2h0IixmdW5jdGlvbigpe3JldHVybiBpLm9uTmF2aWdhdGVSaWdodCgpfSkoIm9uRXhlY3V0aW9uRGlnZXN0Q2xpY2tlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25FeGVjdXRpb25EaWdlc3RDbGlja2VkKG8pfSkoIm9uU2xpZGVyQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblNsaWRlckNoYW5nZShvKX0pLFUoMSwiYXN5bmMiKSxVKDIsImFzeW5jIiksVSgzLCJhc3luYyIpLFUoNCwiYXN5bmMiKSxVKDUsImFzeW5jIiksVSg2LCJhc3luYyIpLFUoNywiYXN5bmMiKSxVKDgsImFzeW5jIiksVSg5LCJhc3luYyIpLFUoMTAsImFzeW5jIiksVSgxMSwiYXN5bmMiKSxnKCkpLDImZSYmYigiYWN0aXZlUnVuSWQiLEcoMSwxMSxpLmFjdGl2ZVJ1bklkJCkpKCJsb2FkaW5nTnVtRXhlY3V0aW9ucyIsRygyLDEzLGkubG9hZGluZ051bUV4ZWN1dGlvbnMkKSkoIm51bUV4ZWN1dGlvbnMiLEcoMywxNSxpLm51bUV4ZWN1dGlvbnMkKSkoInNjcm9sbEJlZ2luSW5kZXgiLEcoNCwxNyxpLnNjcm9sbEJlZ2luSW5kZXgkKSkoInNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0IixHKDUsMTksaS5zY3JvbGxCZWdpbkluZGV4VXBwZXJMaW1pdCQpKSgicGFnZVNpemUiLEcoNiwyMSxpLnBhZ2VTaXplJCkpKCJkaXNwbGF5Q291bnQiLEcoNywyMyxpLmRpc3BsYXlDb3VudCQpKSgiZGlzcGxheUV4ZWN1dGlvbkRpZ2VzdHMiLEcoOCwyNSxpLmRpc3BsYXlFeGVjdXRpb25EaWdlc3RzJCkpKCJkaXNwbGF5Rm9jdXNlZEFsZXJ0VHlwZXMiLEcoOSwyNyxpLmRpc3BsYXlGb2N1c2VkQWxlcnRUeXBlcyQpKSgiZm9jdXNlZEV4ZWN1dGlvbkluZGV4IixHKDEwLDI5LGkuZm9jdXNlZEV4ZWN1dGlvbkluZGV4JCkpKCJmb2N1c2VkRXhlY3V0aW9uRGlzcGxheUluZGV4IixHKDExLDMxLGkuZm9jdXNlZEV4ZWN1dGlvbkRpc3BsYXlJbmRleCQpKX0sZGVwZW5kZW5jaWVzOltVWSxjdF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gTlNlKG4sdCl7MSZuJiZrKDAsInRmLWRlYnVnZ2VyLXYyLWluYWN0aXZlIil9ZnVuY3Rpb24gTFNlKG4sdCl7MSZuJiYoZigwLCJkaXYiLDMpLGsoMSwidGYtZGVidWdnZXItdjItYWxlcnRzIiksZigyLCJkaXYiLDQpLGsoMywidGYtZGVidWdnZXItdjItdGltZWxpbmUiKSg0LCJ0Zi1kZWJ1Z2dlci12Mi1ncmFwaCIpLGcoKSxrKDUsInRmLWRlYnVnZ2VyLXYyLWdyYXBoLWV4ZWN1dGlvbnMiKSxnKCksZig2LCJkaXYiLDUpLGsoNywidGYtZGVidWdnZXItdjItc291cmNlLWZpbGVzIikoOCwidGYtZGVidWdnZXItdjItc3RhY2stdHJhY2UiKSxnKCkpfXZhciBHWT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5ydW5zPXt9LHRoaXMucnVuSWRzPVtdLHRoaXMuYWN0aXZlUnVuSWQ9bnVsbH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1siZGVidWdnZXItY29tcG9uZW50Il1dLGlucHV0czp7cnVuczoicnVucyIscnVuSWRzOiJydW5JZHMiLGFjdGl2ZVJ1bklkOiJhY3RpdmVSdW5JZCJ9LGRlY2xzOjQsdmFyczoyLGNvbnN0czpbWzEsImRlYnVnZ2VyLWNvbnRhaW5lciJdLFs0LCJuZ0lmIiwibmdJZkVsc2UiXSxbImRhdGFBdmFpbGFibGUiLCIiXSxbMSwidG9wLXNlY3Rpb24iXSxbMSwidG9wLWNlbnRlci1zZWN0aW9uIl0sWzEsImJvdHRvbS1zZWN0aW9uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoZigwLCJkaXYiLDApLFMoMSxOU2UsMSwwLCJ0Zi1kZWJ1Z2dlci12Mi1pbmFjdGl2ZSIsMSksUygyLExTZSw5LDAsIm5nLXRlbXBsYXRlIixudWxsLDIsanQpLGcoKSksMiZlKXtsZXQgcj1zdCgzKTt2KDEpLGIoIm5nSWYiLDA9PT1pLnJ1bklkcy5sZW5ndGgpKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W2dZLE5lLHZZLENZLHdZLGtZLEZZLGpZXSxzdHlsZXM6WyIuYm90dG9tLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItdG9wOjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6ZmxleDtmbGV4LWdyb3c6MTtoZWlnaHQ6MzQlO3BhZGRpbmctdG9wOjZweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuYm90dG9tLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuYm90dG9tLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MXB4IHNvbGlkICM1NTV9LmRlYnVnZ2VyLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym94LXNpemluZzpib3JkZXItYm94O2hlaWdodDoxMDAlO292ZXJmbG93OmhpZGRlbn0udG9wLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7ZmxleC1ncm93OjE7aGVpZ2h0OjY2JTtwYWRkaW5nOjZweCAwfXRmLWRlYnVnZ2VyLXYyLWFsZXJ0c1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDoxMHB4O21pbi13aWR0aDoxNjBweDt3aWR0aDpjYWxjKDE1JSAtIDExcHgpfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIHRmLWRlYnVnZ2VyLXYyLWFsZXJ0c1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIHRmLWRlYnVnZ2VyLXYyLWFsZXJ0c1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjNTU1fXRmLWRlYnVnZ2VyLXYyLWdyYXBoLWV4ZWN1dGlvbnNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZsZXgtZ3JvdzoxO21pbi13aWR0aDo1NDBweDt3aWR0aDo1NDBweH10Zi1kZWJ1Z2dlci12Mi1zb3VyY2UtZmlsZXNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMDAlO3dpZHRoOjcwJX10Zi1kZWJ1Z2dlci12Mi1zdGFjay10cmFjZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmxleC1ncm93OjE7aGVpZ2h0OjEwMCU7bWluLXdpZHRoOjU0MHB4O3dpZHRoOjU0MHB4fS50b3AtY2VudGVyLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO292ZXJmbG93OmF1dG87d2lkdGg6NTUlfXRmLWRlYnVnZ2VyLXYyLXRpbWVsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrfXRmLWRlYnVnZ2VyLXYyLWdyYXBoW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLXRvcDo1cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgdGYtZGVidWdnZXItdjItZ3JhcGhbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICB0Zi1kZWJ1Z2dlci12Mi1ncmFwaFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzU1NX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFdZPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMucnVucyQ9dGhpcy5zdG9yZS5waXBlKHVuKE5oKSksdGhpcy5ydW5zSWRzJD10aGlzLnN0b3JlLnBpcGUodW4oVyhOaCxpPT5PYmplY3Qua2V5cyhpKSkpKSx0aGlzLmFjdGl2ZVJ1bklkJD10aGlzLnN0b3JlLnBpcGUodW4oJG8pKX1uZ09uSW5pdCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goTUUoKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHdFKCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEllKSl9LG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1sidGYtZGVidWdnZXItdjIiXV0sZGVjbHM6NCx2YXJzOjksY29uc3RzOltbMywicnVucyIsInJ1bklkcyIsImFjdGl2ZVJ1bklkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaygwLCJkZWJ1Z2dlci1jb21wb25lbnQiLDApLFUoMSwiYXN5bmMiKSxVKDIsImFzeW5jIiksVSgzLCJhc3luYyIpKSwyJmUmJmIoInJ1bnMiLEcoMSwzLGkucnVucyQpKSgicnVuSWRzIixHKDIsNSxpLnJ1bnNJZHMkKSkoImFjdGl2ZVJ1bklkIixHKDMsNyxpLmFjdGl2ZVJ1bklkJCkpfSxkZXBlbmRlbmNpZXM6W0dZLGN0XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH0iXX0pLG59KSgpLGlUPSJkZWJ1Z2dlci12MiI7ZnVuY3Rpb24geU4obix0LGUsaSxyKXtpZihlPD0wfHwhTnVtYmVyLmlzSW50ZWdlcihlKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGFnZVNpemU6ICR7ZX1gKTtpZih0PmkpdGhyb3cgbmV3IEVycm9yKGBlbmQgaW5kZXggKCR7dH0pIGV4Y2VlZHMgdG90YWwgbnVtYmVyIG9mIGl0ZW1zICgke2l9KWApO2lmKHQtbj5lKXRocm93IG5ldyBFcnJvcigiYmVnaW4tZW5kIHNwYW4gZXhjZWVkcyBwYWdlIHNpemUsIHdoaWNoIGlzIG5vdCBhbGxvd2VkIik7bGV0IG89W10sYT1NYXRoLmZsb29yKG4vZSk7KCEoYSBpbiByKXx8clthXTxlJiZhKmUrclthXTxpKSYmby5wdXNoKGEpO2xldCBzPU1hdGguZmxvb3IoKHQtMSkvZSk7cmV0dXJuIHMhPT1hJiYoIShzIGluIHIpfHxzKmUrcltzXTx0JiZ0PGkpJiZvLnB1c2gocyksb312YXIgWVk9KCgpPT57Y2xhc3MgbntvbkRlYnVnZ2VyRGF0YVBvbGwoKXtyZXR1cm4gdGhpcy5hY3Rpb25zJC5waXBlKFpuKE1FKSxKbihlPT5mdW5jdGlvbihuLHQsZSl7cmV0dXJuIG4ucGlwZShmdW5jdGlvbihuKXtyZXR1cm4gWXQoKHQsZSk9PntsZXQgaSxvLHI9ITEsYT0hMSxzPSExLGw9KCk9PnMmJmEmJihlLmNvbXBsZXRlKCksITApLGQ9KCk9PntzPSExLGk9dC5zdWJzY3JpYmUoSHQoZSx2b2lkIDAsKCk9PntzPSEwLCFsKCkmJihvfHwobz1uZXcgRWUsbihvKS5zdWJzY3JpYmUoSHQoZSwoKT0+e2k/ZCgpOnI9ITB9LCgpPT57YT0hMCxsKCl9KSkpLG8pLm5leHQoKX0pKSxyJiYoaS51bnN1YnNjcmliZSgpLGk9bnVsbCxyPSExLGQoKSl9O2QoKX0pfShpPT5pLnBpcGUoSXQodCksSG0oKFsscl0pPT5ycyhyKSkpKSxpdChlKSxxKCgpPT57fSkpfSgkdChlKSx0aGlzLnN0b3JlLnNlbGVjdChZWCkucGlwZShxKGk9PmZ1bmN0aW9uKG4pe3JldHVybiBuPjZlND82ZTQ6bj40ZTM/bjoyZTN9KGkpKSksdGhpcy5hY3Rpb25zJC5waXBlKFpuKHdFKSkpKSxEdCgoKT0+dGhpcy5zdG9yZS5kaXNwYXRjaChzeSgpKSkscSgoKT0+e30pKX1vbkNvcmVSZWxvYWQoKXtyZXR1cm4gdG4odGhpcy5hY3Rpb25zJC5waXBlKFpuKEJhLG1hKSksdGhpcy5hY3Rpb25zJC5waXBlKFpuKHljKSkucGlwZShJdCh0aGlzLnN0b3JlLnNlbGVjdChvTikpLE9lKChbLGVdKT0+ZS5zdGF0ZT09PVJlLk5PVF9MT0FERUR8fGUuc3RhdGU9PT1SZS5GQUlMRUQmJm51bGw9PT1lLmxhc3RMb2FkZWRUaW1lSW5NcykpKS5waXBlKEl0KHRoaXMuc3RvcmUuc2VsZWN0KFpvKSksT2UoKFssZV0pPT5lPT09aVQpLER0KCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKHN5KCkpKSxxKCgpPT57fSkpfWxvYWREZWJ1Z2dlclJ1bnMoZSl7cmV0dXJuIGUucGlwZShJdCh0aGlzLnN0b3JlLnNlbGVjdChvTikpLE9lKChbLHtzdGF0ZTppfV0pPT5pIT09UmUuTE9BRElORyksRHQoKCk9PnRoaXMuc3RvcmUuZGlzcGF0Y2goU0UoKSkpLHhuKCgpPT50aGlzLmRhdGFTb3VyY2UuZmV0Y2hSdW5zKCkucGlwZShEdChpPT57dGhpcy5zdG9yZS5kaXNwYXRjaChFRSh7cnVuczppfSkpfSkscSgoKT0+e30pKSkpfWNyZWF0ZU51bUV4ZWN1dGlvbkxvYWRlcihlKXtyZXR1cm4gZS5waXBlKEl0KHRoaXMuc3RvcmUuc2VsZWN0KE5oKSx0aGlzLnN0b3JlLnNlbGVjdChxRSkpLE9lKChbLGkscl0pPT5PYmplY3Qua2V5cyhpKS5sZW5ndGg+MCYmci5zdGF0ZSE9PVJlLkxPQURJTkcpLER0KCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKElFKCkpKSx4bigoWyxpXSk9PntsZXQgcj1PYmplY3Qua2V5cyhpKVswXTtyZXR1cm4gdGhpcy5kYXRhU291cmNlLmZldGNoRXhlY3V0aW9uRGlnZXN0cyhyLDAsMCkucGlwZShEdChzPT57dGhpcy5zdG9yZS5kaXNwYXRjaChBRSh7bnVtRXhlY3V0aW9uczpzLm51bV9kaWdlc3RzfSkpfSkscSgoKT0+e30pKX0pKX1jcmVhdGVOdW1HcmFwaEV4ZWN1dGlvbkxvYWRlcihlKXtyZXR1cm4gZS5waXBlKEl0KHRoaXMuc3RvcmUuc2VsZWN0KE5oKSx0aGlzLnN0b3JlLnNlbGVjdChlWSkpLE9lKChbLGkscl0pPT5PYmplY3Qua2V5cyhpKS5sZW5ndGg+MCYmci5zdGF0ZSE9PVJlLkxPQURJTkcpLER0KCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKE9FKCkpKSx4bigoWyxpXSk9PntsZXQgcj1PYmplY3Qua2V5cyhpKVswXTtyZXR1cm4gdGhpcy5kYXRhU291cmNlLmZldGNoR3JhcGhFeGVjdXRpb25EaWdlc3RzKHIsMCwwKS5waXBlKER0KHM9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKEZFKHtudW1HcmFwaEV4ZWN1dGlvbnM6cy5udW1fZGlnZXN0c30pKX0pLHEoKCk9Pnt9KSl9KSl9Y3JlYXRlTnVtQWxlcnRzQW5kQnJlYWtkb3duTG9hZGVyKGUpe3JldHVybiBlLnBpcGUoSXQodGhpcy5zdG9yZS5zZWxlY3QoTmgpLHRoaXMuc3RvcmUuc2VsZWN0KGFOKSksT2UoKFssaSxyXSk9Pk9iamVjdC5rZXlzKGkpLmxlbmd0aD4wJiZyLnN0YXRlIT09UmUuTE9BRElORyksRHQoKCk9PnRoaXMuc3RvcmUuZGlzcGF0Y2gobHkoKSkpLHhuKChbLGldKT0+e2xldCByPU9iamVjdC5rZXlzKGkpWzBdO3JldHVybiB0aGlzLmRhdGFTb3VyY2UuZmV0Y2hBbGVydHMociwwLDApLnBpcGUoRHQocz0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goVEUoe251bUFsZXJ0czpzLm51bV9hbGVydHMsYWxlcnRzQnJlYWtkb3duOnMuYWxlcnRzX2JyZWFrZG93bn0pKX0pLHEoKCk9Pnt9KSl9KSl9Y3JlYXRlSW5pdGlhbEV4ZWN1dGlvbkRldGVjdG9yKGUpe3JldHVybiBlLnBpcGUoSXQodGhpcy5zdG9yZS5zZWxlY3QoWnUpLHRoaXMuc3RvcmUuc2VsZWN0KHB5KSksT2UoKFssaSxyXSk9Pmk+MCYmMD09PU9iamVjdC5rZXlzKHIucGFnZUxvYWRlZFNpemVzKS5sZW5ndGgpLHEoKCk9Pnt9KSl9Y3JlYXRlSW5pdGlhbEV4ZWN1dGlvbkRpZ2VzdChlKXtyZXR1cm4gZS5waXBlKEl0KHRoaXMuc3RvcmUuc2VsZWN0KFp1KSx0aGlzLnN0b3JlLnNlbGVjdCgkbyksdGhpcy5zdG9yZS5zZWxlY3QoVmcpKSxPZSgoWywsaV0pPT5udWxsIT09aSkscSgoWyxpLHIsb10pPT4oe2JlZ2luOjAsZW5kOk1hdGgubWluKGksbykscnVuSWQ6cn0pKSl9b25FeGVjdXRpb25TY3JvbGwoKXtyZXR1cm4gdGhpcy5hY3Rpb25zJC5waXBlKFpuKElnLEFnLFJnKSxJdCh0aGlzLnN0b3JlLnNlbGVjdCgkbyksdGhpcy5zdG9yZS5zZWxlY3QoaHkpLHRoaXMuc3RvcmUuc2VsZWN0KFp1KSx0aGlzLnN0b3JlLnNlbGVjdChIZyksdGhpcy5zdG9yZS5zZWxlY3QoVmcpKSxPZSgoW2VdKT0+bnVsbCE9PWUpLHEoKFssZSxpLHIsbyxhXSk9Pih7cnVuSWQ6ZSxiZWdpbjppLGVuZDpNYXRoLm1pbihyLGkrbykscGFnZVNpemU6YX0pKSxJdCh0aGlzLnN0b3JlLnNlbGVjdChweSkpLHEoKFtlLGldKT0+KHtwcm9wczplLGxvYWRlZDppLG1pc3NpbmdQYWdlczp5TihlLmJlZ2luLGUuZW5kLGUucGFnZVNpemUsaS5udW1FeGVjdXRpb25zLGkucGFnZUxvYWRlZFNpemVzKX0pKSxPZSgoe21pc3NpbmdQYWdlczplfSk9PmUubGVuZ3RoPjApLHEoKHtwcm9wczplLGxvYWRlZDppLG1pc3NpbmdQYWdlczpyfSk9PntsZXR7cnVuSWQ6byxwYWdlU2l6ZTphfT1lO3JldHVybntiZWdpbjpyWzBdKmEsZW5kOk1hdGgubWluKGkubnVtRXhlY3V0aW9ucywocltyLmxlbmd0aC0xXSsxKSphKSxydW5JZDpvfX0pKX1jcmVhdGVFeGVjdXRpb25EaWdlc3RMb2FkZXIoZSl7cmV0dXJuIGUucGlwZShJdCh0aGlzLnN0b3JlLnNlbGVjdChweSkpLE9lKChbe2JlZ2luOmksZW5kOnJ9LG9dKT0+cj5pJiYhZnVuY3Rpb24obix0LGUpe2lmKHQ+PWUpdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBiZWdpbiB0byBiZSBsZXNzIHRoYW4gZW5kLCBidXQgZ290IGJlZ2luPSR7dH0sIGVuZD0ke2V9YCk7cmV0dXJuLTEhPT1uLmZpbmRJbmRleChpPT5pLmJlZ2luPj10JiZpLmVuZDw9ZSl9KG8ubG9hZGluZ1JhbmdlcyxpLHIpKSxEdCgoW3tiZWdpbjppLGVuZDpyfV0pPT57dGhpcy5zdG9yZS5kaXNwYXRjaChSRSh7YmVnaW46aSxlbmQ6cn0pKX0pLHhuKChbe3J1bklkOmksYmVnaW46cixlbmQ6b31dKT0+dGhpcy5kYXRhU291cmNlLmZldGNoRXhlY3V0aW9uRGlnZXN0cyhpLHIsbykucGlwZShEdChhPT57dGhpcy5zdG9yZS5kaXNwYXRjaChQRShhKSl9KSxxKCgpPT57fSkpKSl9b25FeGVjdXRpb25EaWdlc3RGb2N1c2VkKCl7cmV0dXJuIHRoaXMuYWN0aW9ucyQucGlwZShabihQZyksSXQodGhpcy5zdG9yZS5zZWxlY3QoJG8pLHRoaXMuc3RvcmUuc2VsZWN0KGhOKSx0aGlzLnN0b3JlLnNlbGVjdChoeSkpLHEoKFtlLGkscixvXSk9Pih7YWN0aXZlUnVuSWQ6aSxsb2FkZWRFeGVjdXRpb25EYXRhOnIsZm9jdXNJbmRleDpvK2UuZGlzcGxheUluZGV4fSkpKX1jcmVhdGVFeGVjdXRpb25EYXRhQW5kU3RhY2tGcmFtZXNMb2FkZXIoZSl7cmV0dXJuIGUucGlwZShPZSgoe2FjdGl2ZVJ1bklkOmksbG9hZGVkRXhlY3V0aW9uRGF0YTpyLGZvY3VzSW5kZXg6b30pPT5udWxsIT09aSYmbnVsbCE9PW8mJnZvaWQgMD09PXJbb10pLHhuKCh7YWN0aXZlUnVuSWQ6aSxmb2N1c0luZGV4OnJ9KT0+e2xldCBvPXIsYT1vKzE7cmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5mZXRjaEV4ZWN1dGlvbkRhdGEoaSxvLGEpLnBpcGUoRHQocz0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goa0UocykpfSkscShzPT4oe2V4ZWN1dGlvbkRhdGE6cyxiZWdpbjpvLGVuZDphfSkpKX0pLHEoKHtleGVjdXRpb25EYXRhOml9KT0+aS5leGVjdXRpb25zWzBdKSxJdCh0aGlzLnN0b3JlLnNlbGVjdCgkbyksdGhpcy5zdG9yZS5zZWxlY3QobU4pKSxPZSgoW2kscixvXSk9PntpZihudWxsPT09cilyZXR1cm4hMTtmb3IobGV0IGEgb2YgaS5zdGFja19mcmFtZV9pZHMpaWYodm9pZCAwPT09b1thXSlyZXR1cm4hMDtyZXR1cm4hMX0pLHhuKChbaSxyXSk9PntsZXQgbz1pLnN0YWNrX2ZyYW1lX2lkcztyZXR1cm4gdGhpcy5kYXRhU291cmNlLmZldGNoU3RhY2tGcmFtZXMocixvKS5waXBlKER0KGE9PntsZXQgcz17fTtmb3IobGV0IGw9MDtsPG8ubGVuZ3RoOysrbClzW29bbF1dPWEuc3RhY2tfZnJhbWVzW2xdO3RoaXMuc3RvcmUuZGlzcGF0Y2goY3koe3N0YWNrRnJhbWVzOnN9KSl9KSxxKCgpPT57fSkpfSkpfW9uR3JhcGhFeGVjdXRpb25TY3JvbGwoKXtyZXR1cm4gdGhpcy5hY3Rpb25zJC5waXBlKFpuKGtnKSxDcigxMDApLEl0KHRoaXMuc3RvcmUuc2VsZWN0KCRvKSx0aGlzLnN0b3JlLnNlbGVjdChteSksdGhpcy5zdG9yZS5zZWxlY3QodFkpKSxPZSgoWyxlLGldKT0+bnVsbCE9PWUmJmk+MCkscSgoWyxlLGkscl0pPT4oe3J1bklkOmUsbnVtR3JhcGhFeGVjdXRpb25zOmksc2Nyb2xsQmVnaW5JbmRleDpyfSkpLEl0KHRoaXMuc3RvcmUuc2VsZWN0KGlZKSx0aGlzLnN0b3JlLnNlbGVjdChuWSksdGhpcy5zdG9yZS5zZWxlY3QoclkpLHRoaXMuc3RvcmUuc2VsZWN0KG9ZKSkscSgoW3tydW5JZDplLG51bUdyYXBoRXhlY3V0aW9uczppLHNjcm9sbEJlZ2luSW5kZXg6cn0sbyxhLHMsbF0pPT57bGV0IGM9eU4ocixNYXRoLm1pbihyK2EsaSksbyxpLGwpO3JldHVybiBjPWMuZmlsdGVyKGQ9Pi0xPT09cy5pbmRleE9mKGQpKSx7cnVuSWQ6ZSxtaXNzaW5nUGFnZXM6YyxwYWdlU2l6ZTpvLG51bUdyYXBoRXhlY3V0aW9uczppfX0pKX1sb2FkR3JhcGhFeGVjdXRpb25QYWdlcyhlKXtyZXR1cm4gZS5waXBlKE9lKCh7bWlzc2luZ1BhZ2VzOml9KT0+aS5sZW5ndGg+MCksRHQoKHttaXNzaW5nUGFnZXM6aX0pPT57aS5mb3JFYWNoKHI9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKE5FKHtwYWdlSW5kZXg6cn0pKX0pfSkseG4oKHtydW5JZDppLG1pc3NpbmdQYWdlczpyLHBhZ2VTaXplOm8sbnVtR3JhcGhFeGVjdXRpb25zOmF9KT0+e2xldCBzPXJbMF0qbyxsPU1hdGgubWluKChyW3IubGVuZ3RoLTFdKzEpKm8sYSk7cmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5mZXRjaEdyYXBoRXhlY3V0aW9uRGF0YShpLHMsbCkucGlwZShEdChjPT57dGhpcy5zdG9yZS5kaXNwYXRjaChMRShjKSl9KSxxKCgpPT57fSkpfSkpfWxvYWRHcmFwaE9wSW5mbygpe3JldHVybiB0aGlzLmFjdGlvbnMkLnBpcGUoWm4oRmcsT2cpLEl0KHRoaXMuc3RvcmUuc2VsZWN0KCRvKSx0aGlzLnN0b3JlLnNlbGVjdChkWSkpLE9lKChbZSxpLHJdKT0+e2xldHtncmFwaF9pZDpvLG9wX25hbWU6YX09ZTtyZXR1cm4hKG51bGw9PT1pfHx2b2lkIDAhPT1yW29dJiZyW29dLmhhcyhhKSYmKHJbb10uZ2V0KGEpPT09UmUuTE9BRElOR3x8cltvXS5nZXQoYSk9PT1SZS5MT0FERUQpKX0pLER0KChbe2dyYXBoX2lkOmUsb3BfbmFtZTppfV0pPT50aGlzLnN0b3JlLmRpc3BhdGNoKEJFKHtncmFwaF9pZDplLG9wX25hbWU6aX0pKSkseG4oKFtlLGldKT0+e2xldHtncmFwaF9pZDpyLG9wX25hbWU6b309ZTtyZXR1cm4gdGhpcy5kYXRhU291cmNlLmZldGNoR3JhcGhPcEluZm8oaSxyLG8pLnBpcGUoRHQoYT0+dGhpcy5zdG9yZS5kaXNwYXRjaChWRSh7Z3JhcGhPcEluZm9SZXNwb25zZTphfSkpKSxxKGE9Pih7cnVuSWQ6aSxzdGFja0ZyYW1lSWRzOmEuc3RhY2tfZnJhbWVfaWRzfSkpKX0pKX1sb2FkR3JhcGhPcFN0YWNrRnJhbWVzKGUpe3JldHVybiBlLnBpcGUoSXQodGhpcy5zdG9yZS5zZWxlY3QobU4pKSxxKChbe3J1bklkOmksc3RhY2tGcmFtZUlkczpyfSxvXSk9Pih7cnVuSWQ6aSxtaXNzaW5nU3RhY2tGcmFtZUlkczpyLmZpbHRlcihzPT52b2lkIDA9PT1vW3NdKX0pKSxPZSgoe3J1bklkOmksbWlzc2luZ1N0YWNrRnJhbWVJZHM6cn0pPT5udWxsIT09aSYmci5sZW5ndGg+MCkseG4oKHtydW5JZDppLG1pc3NpbmdTdGFja0ZyYW1lSWRzOnJ9KT0+dGhpcy5kYXRhU291cmNlLmZldGNoU3RhY2tGcmFtZXMoaSxyKS5waXBlKER0KG89PntsZXQgYT17fTtmb3IobGV0IHM9MDtzPHIubGVuZ3RoOysrcylhW3Jbc11dPW8uc3RhY2tfZnJhbWVzW3NdO3RoaXMuc3RvcmUuZGlzcGF0Y2goY3koe3N0YWNrRnJhbWVzOmF9KSl9KSxxKCgpPT57fSkpKSl9b25BbGVydFR5cGVGb2N1c2VkKCl7cmV0dXJuIHRoaXMuYWN0aW9ucyQucGlwZShabihEZyksSXQodGhpcy5zdG9yZS5zZWxlY3QoJG8pLHRoaXMuc3RvcmUuc2VsZWN0KFdFKSx0aGlzLnN0b3JlLnNlbGVjdChaWCksdGhpcy5zdG9yZS5zZWxlY3QoS1gpLHRoaXMuc3RvcmUuc2VsZWN0KGFOKSksT2UoKFssZSxpLHIsbyxhXSk9Pm51bGwhPT1lJiZudWxsIT09aSYmcj4wJiYobnVsbD09PW98fE9iamVjdC5rZXlzKG8pLmxlbmd0aDxyKSYmYS5zdGF0ZSE9PVJlLkxPQURJTkcpLER0KCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKGx5KCkpKSx4bigoWyxlLGldKT0+dGhpcy5kYXRhU291cmNlLmZldGNoQWxlcnRzKGUsMCwtMSxpKSksRHQoKHtudW1fYWxlcnRzOmUsYWxlcnRzX2JyZWFrZG93bjppLGFsZXJ0X3R5cGU6cixiZWdpbjpvLGVuZDphLGFsZXJ0czpzfSk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKERFKHtudW1BbGVydHM6ZSxhbGVydHNCcmVha2Rvd246aSxhbGVydFR5cGU6cixiZWdpbjpvLGVuZDphLGFsZXJ0czpzfSkpfSkpfWZldGNoRXhlY3V0aW9uRGlnZXN0c0ZvckFsZXJ0VHlwZUZvY3VzKGUpe3JldHVybiBlLnBpcGUoSXQodGhpcy5zdG9yZS5zZWxlY3QoVmcpLHRoaXMuc3RvcmUuc2VsZWN0KEhnKSx0aGlzLnN0b3JlLnNlbGVjdChadSksdGhpcy5zdG9yZS5zZWxlY3QocHkpLHRoaXMuc3RvcmUuc2VsZWN0KCRvKSkscSgoW2kscixvLGEscyxsXSk9PntsZXQgZD1pLmFsZXJ0c1swXS5leGVjdXRpb25faW5kZXgsdT15TihNYXRoLm1heCgwLGQtTWF0aC5mbG9vcihvLzIpKSxNYXRoLm1pbihkK01hdGguZmxvb3Ioby8yKSxhKSxyLGEscy5wYWdlTG9hZGVkU2l6ZXMpO3JldHVybiAwPT09dS5sZW5ndGg/e3J1bklkOmwsYmVnaW46MCxlbmQ6MH06e3J1bklkOmwsYmVnaW46dVswXSpyLGVuZDpNYXRoLm1pbihzLm51bUV4ZWN1dGlvbnMsKHVbdS5sZW5ndGgtMV0rMSkqcil9fSkpfWxvYWRTb3VyY2VGaWxlTGlzdChlKXtyZXR1cm4gZS5waXBlKEl0KHRoaXMuc3RvcmUuc2VsZWN0KCRvKSx0aGlzLnN0b3JlLnNlbGVjdChwWSkpLE9lKChbLGkscl0pPT5udWxsIT09aSYmci5zdGF0ZSE9PVJlLkxPQURJTkcpLER0KCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKEhFKCkpKSx4bigoWyxpXSk9PnRoaXMuZGF0YVNvdXJjZS5mZXRjaFNvdXJjZUZpbGVMaXN0KGkpLnBpcGUoRHQocj0+e2xldCBvPVtdO3IuZm9yRWFjaCgoW2Esc10pPT57by5wdXNoKHtob3N0X25hbWU6YSxmaWxlX3BhdGg6c30pfSksdGhpcy5zdG9yZS5kaXNwYXRjaCh6RSh7c291cmNlRmlsZXM6b30pKX0pLHEoKCk9Pnt9KSkpKX1vblNvdXJjZUZpbGVGb2N1c2VkKCl7cmV0dXJuIHRoaXMuYWN0aW9ucyQucGlwZShabihOZyksSXQodGhpcy5zdG9yZS5zZWxlY3QoJG8pLHRoaXMuc3RvcmUuc2VsZWN0KGZOKSx0aGlzLnN0b3JlLnNlbGVjdChRRSkpLHEoKFtlLGkscixvXSk9Pih7cnVuSWQ6aSxzdGFja0ZyYW1lOmUuc3RhY2tGcmFtZSxmaWxlSW5kZXg6cixmaWxlQ29udGVudDpvfSkpLE9lKCh7cnVuSWQ6ZSxmaWxlQ29udGVudDppfSk9Pm51bGwhPT1lJiZudWxsIT09aSYmaS5sb2FkU3RhdGU9PT1SZS5OT1RfTE9BREVEKSxEdCgoe3N0YWNrRnJhbWU6ZX0pPT50aGlzLnN0b3JlLmRpc3BhdGNoKFVFKHtob3N0X25hbWU6ZS5ob3N0X25hbWUsZmlsZV9wYXRoOmUuZmlsZV9wYXRofSkpKSx4bigoe2ZpbGVJbmRleDplLHJ1bklkOml9KT0+dGhpcy5kYXRhU291cmNlLmZldGNoU291cmNlRmlsZShpLGUpLnBpcGUoRHQocj0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goakUocikpfSkscSgoKT0+e30pKSkpfWNvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLmFjdGlvbnMkPWUsdGhpcy5zdG9yZT1pLHRoaXMuZGF0YVNvdXJjZT1yLHRoaXMubG9hZERhdGEkPV9yKCgpPT57bGV0IG89dGhpcy5sb2FkRGVidWdnZXJSdW5zKHRuKHRoaXMub25EZWJ1Z2dlckRhdGFQb2xsKCksdGhpcy5vbkNvcmVSZWxvYWQoKSkpLnBpcGUoVGEoKSksYT10aGlzLmxvYWRTb3VyY2VGaWxlTGlzdChvKSxzPXRoaXMuY3JlYXRlTnVtRXhlY3V0aW9uTG9hZGVyKG8pLGw9dGhpcy5jcmVhdGVOdW1BbGVydHNBbmRCcmVha2Rvd25Mb2FkZXIobyksYz10aGlzLm9uQWxlcnRUeXBlRm9jdXNlZCgpLGQ9dGhpcy5mZXRjaEV4ZWN1dGlvbkRpZ2VzdHNGb3JBbGVydFR5cGVGb2N1cyhjKSx1PXRoaXMuY3JlYXRlSW5pdGlhbEV4ZWN1dGlvbkRldGVjdG9yKHMpLnBpcGUoVGEoKSkscD10aGlzLmNyZWF0ZUV4ZWN1dGlvbkRpZ2VzdExvYWRlcih0bih0aGlzLm9uRXhlY3V0aW9uU2Nyb2xsKCksdGhpcy5jcmVhdGVJbml0aWFsRXhlY3V0aW9uRGlnZXN0KHUpLGQpKSxoPXRoaXMuY3JlYXRlRXhlY3V0aW9uRGF0YUFuZFN0YWNrRnJhbWVzTG9hZGVyKHRuKHRoaXMub25FeGVjdXRpb25EaWdlc3RGb2N1c2VkKCksdS5waXBlKEl0KHRoaXMuc3RvcmUuc2VsZWN0KCRvKSx0aGlzLnN0b3JlLnNlbGVjdChoTikpLHEoKFsseCxSXSk9Pih7YWN0aXZlUnVuSWQ6eCxsb2FkZWRFeGVjdXRpb25EYXRhOlIsZm9jdXNJbmRleDowfSkpKSkpO3JldHVybiB0bihsLHAsaCx0aGlzLmNyZWF0ZU51bUdyYXBoRXhlY3V0aW9uTG9hZGVyKG8pLGEsdGhpcy5vblNvdXJjZUZpbGVGb2N1c2VkKCksdGhpcy5sb2FkR3JhcGhFeGVjdXRpb25QYWdlcyh0aGlzLm9uR3JhcGhFeGVjdXRpb25TY3JvbGwoKSksdGhpcy5sb2FkR3JhcGhPcFN0YWNrRnJhbWVzKHRoaXMubG9hZEdyYXBoT3BJbmZvKCkpKS5waXBlKHEoKCk9Pih7fSkpKX0se2Rpc3BhdGNoOiExfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oRW8pLE8oSWUpLE8oQ0UpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxRWT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9SCh7aW1wb3J0czpbRGVdfSksbn0pKCksWlk9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe2ltcG9ydHM6W0RlXX0pLG59KSgpLHJUPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1IKHtpbXBvcnRzOltEZV19KSxufSkoKSxLWT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9SCh7aW1wb3J0czpbRGUsclQsQ2RdfSksbn0pKCksSlk9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe30pLG59KSgpLHRwPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1IKHt9KSxufSkoKSxvVD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9SCh7aW1wb3J0czpbRGUsdHBdfSksbn0pKCksJFk9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe2ltcG9ydHM6W0RlLG9UXX0pLG59KSgpLGVRPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1IKHtpbXBvcnRzOltEZSxvVF19KSxufSkoKSx0UT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9SCh7aW1wb3J0czpbRGUsclRdfSksbn0pKCksblE9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe2ltcG9ydHM6W0RlLHRRLEtuLGVwXX0pLG59KSgpLGlRPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1IKHtpbXBvcnRzOltRWSxEZSxRcyxLWSxaWSxKWSwkWSxlUSxVWCxuUSx3ci5mb3JGZWF0dXJlKGR5LFhYKSx0by5mb3JGZWF0dXJlKFtZWV0pLE9jLmZvclBsdWdpbihpVCxXWSldfSksbn0pKCksYVQ9ZmUoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmdzIFBhbmUgQ2xvc2VkIiksc1Q9ZmUoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmdzIFBhbmUgVG9nZ2xlZCIpLGxUPWZlKCJbTWV0cmljc10gU2xpZGUgb3V0IHNldHRpbmdzIG1lbnUgdG9nZ2xlZCIpLGNUPWZlKCJbTWV0cmljc10gVXNlciByZXF1ZXN0ZWQgdG8gb3BlbiB0aGUgc2xpZGUgb3V0IG1lbnUiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxkVD1mZSgiW01ldHJpY3NdIFVzZXIgY2hhbmdlZCB0aGUgdGFiIGluIHRoZSB0YWJsZSBlZGl0b3IiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx1VD1mZSgiW01ldHJpY3NdIFNsaWRlIG91dCBzZXR0aW5ncyBtZW51IGNsb3NlZCIpLHBUPWZlKCJbTWV0cmljc10gTWV0cmljcyBUYWcgTWV0YWRhdGEgUmVxdWVzdGVkIiksaFQ9ZmUoIltNZXRyaWNzXSBNZXRyaWNzIFRhZyBNZXRhZGF0YSBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxtVD1mZSgiW01ldHJpY3NdIE1ldHJpY3MgVGFnIE1ldGFkYXRhIEZhaWxlZCIpLGZUPWZlKCJbTWV0cmljc10gTWV0cmljcyBDYXJkIFN0YXRlIFVwZGF0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx6Zz1mZSgiW01ldHJpY3NdIE1ldHJpY3MgQ2FyZCBGdWxsIFNpemUgVG9nZ2xlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGdUPWZlKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5ncyBDaGFuZ2UgVG9vbHRpcCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLF9UPShmZSgiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZ3MgVG9nZ2xlIFNob3cgRGF0YSBEb3dubG9hZCIpLGZlKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIFRvZ2dsZSBJZ25vcmUgT3V0bGllciIpKSxiVD1mZSgiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZyBDaGFuZ2UgWCBBeGlzIFR5cGUiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx2VD1mZSgiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZyBDaGFuZ2UgQ2FyZCBXaWR0aCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHlUPWZlKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIFJlc2V0IENhcmQgV2lkdGgiKSx4VD1mZSgiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZyBDaGFuZ2UgU2NhbGFyIFNtb290aGluZyIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLENUPWZlKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIFBhcnRpdGlvbiBOb24gTW9ub3RvbmljIFggVG9nZ2xlZCIpLE1UPWZlKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIENoYW5nZSBJbWFnZSBCcmlnaHRuZXNzIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksd1Q9ZmUoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmcgQ2hhbmdlIEltYWdlIENvbnRyYXN0Iix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksU1Q9ZmUoIltNZXRyaWNzXSBJbWFnZSBCcmlnaHRuZXNzIFNldHRpbmcgUmVzZXQiKSxFVD1mZSgiW01ldHJpY3NdIEltYWdlIENvbnRyYXN0IFNldHRpbmcgUmVzZXQiKSxUVD1mZSgiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZyBUb2dnbGUgSW1hZ2UgU2hvdyBBY3R1YWwgU2l6ZSIpLERUPWZlKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIENoYW5nZSBIaXN0b2dyYW0gTW9kZSIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLElUPWZlKCJbTWV0cmljc10gTXVsdGlwbGUgVGltZSBTZXJpZXMgUmVxdWVzdGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksQVQ9ZmUoIltNZXRyaWNzXSBGZXRjaCBUaW1lIFNlcmllcyBSZXF1ZXN0IEZhaWxlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFJUPWZlKCJbTWV0cmljc10gRmV0Y2ggVGltZSBTZXJpZXMgUmVzcG9uc2UgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksVWc9ZmUoIltNZXRyaWNzXSBDYXJkIFZpc2liaWxpdHkgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFBUPWZlKCJbTWV0cmljc10gQ2FyZCBTdGVwIFNsaWRlciBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksa1Q9ZmUoIltNZXRyaWNzXSBUYWcgRmlsdGVyIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxPVD1mZSgiW01ldHJpY3NdIE1ldHJpY3MgVGFnIEdyb3VwIEV4cGFuc2lvbiBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksbnA9ZmUoIltNZXRyaWNzXSBDYXJkIFBpbiBTdGF0ZSBUb2dnbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksRlQ9ZmUoIltNZXRyaWNzXSBUb2dnbGUgVmlzaWJsZSBQbHVnaW4iLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxOVD1mZSgiW01ldHJpY3NdIFRvZ2dsZSBTaG93IEFsbCBQbHVnaW5zIiksSGg9ZmUoIltNZXRyaWNzXSBUaW1lIFNlbGVjdGlvbiBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksX3k9ZmUoIltNZXRyaWNzXSBDYXJkIFVzZXIgVmlldyBCb3ggQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLExUPWZlKCJbTWV0cmljc10gTGlua2VkIFRpbWUgRW5hYmxlIFRvZ2dsZSIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHJRPWZlKCJbTWV0cmljc10gU29ydGluZyBEYXRhIFRhYmxlIEJ5IEhlYWRlciIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGpnPWZlKCJbTWV0cmljc10gRGF0YSB0YWJsZSBjb2x1bW5zIG9yZGVyIGNoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxHZz1mZSgiW01ldHJpY3NdIERhdGEgdGFibGUgY29sdW1uIHRvZ2dsZWQgaW4gZWRpdCBtZW51IG9yIGRlbGV0ZSBidXR0b24gY2xpY2tlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFRkPWZlKCJbTWV0cmljc10gVGltZSBTZWxlY3RvciBFbmFibGUgVG9nZ2xlIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksQlQ9ZmUoIltNZXRyaWNzXSBSYW5nZSBTZWxlY3Rpb24gVG9nZ2xlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLG9RPWZlKCJbTWV0cmljc10gSGlkZSBFbXB0eSBDYXJkcyBDaGFuZ2VkIiksVlQ9ZmUoIltNZXRyaWNzXSBVbnJlc29sdmVkIFBpbm5lZCBDYXJkcyBGcm9tIExvY2FsIFN0b3JhZ2UgQWRkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxXZz1mZSgiW01ldHJpY3NdIENsZWFyIGFsbCBwaW5uZWQgY2FyZHMiKSx6aD1mZSgiW01ldHJpY3NdIEVuYWJsZSBTYXZpbmcgUGlucyBUb2dnbGVkIik7ZnVuY3Rpb24gYnkobix0KXtsZXQgZT17fTtmb3IobGV0IGkgb2YgT2JqZWN0LmtleXMobikpZVtpXT10KG5baV0saSk7cmV0dXJuIGV9dmFyIFFhPSgoKT0+KGZ1bmN0aW9uKG4pe24uTk9ORT0ibm8gYWZmb3JkYW5jZSIsbi5FWFRFTkRFRF9MSU5FPSJleHRlbmRlZExpbmUiLG4uRk9CPSJmb2IiLG4uRk9CX1JFTU9WRUQ9ImZvYlJlbW92ZWQiLG4uRk9CX1RFWFQ9ImZvYlRleHQiLG4uSElTVE9HUkFNX0NMSUNLX1RPX1JBTkdFPSJoaXN0b2dyYW1DbGlja1RvUmFuZ2UiLG4uRk9CX0FEREVEPSJmb2JBZGRlZCJ9KFFhfHwoUWE9e30pKSxRYSkpKCksWmE9KCgpPT4oZnVuY3Rpb24obil7bi5OT05FPSJubyB0b2dnbGUgYWZmb3JkYW5jZSIsbi5GT0JfREVTRUxFQ1Q9ImZvYkRlc2VsZWN0IixuLkNIRUNLX0JPWD0iY2hlY2tCb3gifShaYXx8KFphPXt9KSksWmEpKSgpLHZhPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5IT1JJWk9OVEFMPTBdPSJIT1JJWk9OVEFMIixuW24uVkVSVElDQUw9MV09IlZFUlRJQ0FMIn0odmF8fCh2YT17fSkpLHZhKSkoKTtmdW5jdGlvbiBIVChuKXtsZXQgdD1uZXcgTWFwLGU9bi5zbGljZSgpLnNvcnQoKGkscik9PnZ5KGkudGFnLHIudGFnKSk7Zm9yKGxldCBpIG9mIGUpe2xldCByPWpTZShpLnRhZyk7dC5oYXMocil8fHQuc2V0KHIse2dyb3VwTmFtZTpyLGl0ZW1zOltdfSksdC5nZXQocikuaXRlbXMucHVzaChpKX1yZXR1cm5bLi4udC52YWx1ZXMoKV19ZnVuY3Rpb24galNlKG4pe3JldHVybiBuLnNwbGl0KCIvIiwxKVswXX1mdW5jdGlvbiB2eShuLHQpe2xldCBlPTAsaT0wO2Zvcig7Oyl7aWYoZT09PW4ubGVuZ3RoKXJldHVybiBpPT09dC5sZW5ndGg/MDotMTtpZihpPT09dC5sZW5ndGgpcmV0dXJuIDE7aWYoVWgobltlXSkmJlVoKHRbaV0pKXtsZXQgcj1lLG89aTtlPWFRKG4sZSsxKSxpPWFRKHQsaSsxKTtsZXQgYT1OdW1iZXIobi5zbGljZShyLGUpKSxzPU51bWJlcih0LnNsaWNlKG8saSkpO2lmKGE8cylyZXR1cm4tMTtpZihhPnMpcmV0dXJuIDF9ZWxzZXtpZih4TihuW2VdKSl7aWYoIXhOKHRbaV0pKXJldHVybi0xfWVsc2V7aWYoeE4odFtpXSkpcmV0dXJuIDE7aWYobltlXTx0W2ldKXJldHVybi0xO2lmKG5bZV0+dFtpXSlyZXR1cm4gMX1lKyssaSsrfX19ZnVuY3Rpb24gYVEobix0KXtsZXQgZTt2YXIgbzsobz1lfHwoZT17fSkpW28uTkFUVVJBTD0wXT0iTkFUVVJBTCIsb1tvLlJFQUw9MV09IlJFQUwiLG9bby5FWFBPTkVOVF9TSUdOPTJdPSJFWFBPTkVOVF9TSUdOIixvW28uRVhQT05FTlQ9M109IkVYUE9ORU5UIjtsZXQgaT1lLk5BVFVSQUwscj10O2Zvcig7cjxuLmxlbmd0aDtyKyspaWYoaT09PWUuTkFUVVJBTCl7aWYoIi4iPT09bltyXSlpPWUuUkVBTDtlbHNlIGlmKCJlIj09PW5bcl18fCJFIj09PW5bcl0paT1lLkVYUE9ORU5UX1NJR047ZWxzZSBpZighVWgobltyXSkpYnJlYWt9ZWxzZSBpZihpPT09ZS5SRUFMKXtpZigiZSI9PT1uW3JdfHwiRSI9PT1uW3JdKWk9ZS5FWFBPTkVOVF9TSUdOO2Vsc2UgaWYoIVVoKG5bcl0pKWJyZWFrfWVsc2UgaWYoaT09PWUuRVhQT05FTlRfU0lHTil7aWYoIVVoKG5bcl0pJiYiKyIhPT1uW3JdJiYiLSIhPT1uW3JdKWJyZWFrO2k9ZS5FWFBPTkVOVH1lbHNlIGlmKGk9PT1lLkVYUE9ORU5UJiYhVWgobltyXSkpYnJlYWs7cmV0dXJuIHJ9ZnVuY3Rpb24gVWgobil7cmV0dXJuIjAiPD1uJiZuPD0iOSJ9ZnVuY3Rpb24geE4obil7cmV0dXJuIi8iPT09bnx8VWgobil9ZnVuY3Rpb24gQ04obix0LGUpe2xldHtwbHVnaW46aSx0YWc6cixydW5JZDpvLHNhbXBsZTphfT10W25dLHM9ZmQoZSxpLHIsYSk7aWYocyl7aWYobnVsbCE9PW8mJnMucnVuVG9TZXJpZXMuaGFzT3duUHJvcGVydHkobykpe2xldCBjPXMucnVuVG9TZXJpZXNbb10ubGVuZ3RoO3JldHVybiBjPjA/Yy0xOm51bGx9bGV0IGw9T2JqZWN0LnZhbHVlcyhzLnJ1blRvU2VyaWVzKS5tYXAoYz0+Yy5sZW5ndGgpO2lmKGwubGVuZ3RoKXJldHVybiBNYXRoLm1heCguLi5sKS0xfXJldHVybiBudWxsfWZ1bmN0aW9uIFdTZShuLHQsZSxpKXtsZXQgcj17Li4udH07Zm9yKGxldCBvIGluIG4pe2lmKCFuLmhhc093blByb3BlcnR5KG8pKWNvbnRpbnVlO2xldCBhPUNOKG8sbixlKTtpZihudWxsPT09YSljb250aW51ZTtsZXQgcz10Lmhhc093blByb3BlcnR5KG8pP3Rbb10uaW5kZXg6bnVsbCxsPUNOKG8sbixpKTsobnVsbCE9PXMmJnM+YXx8bnVsbD09PXN8fG51bGwhPT1zJiZzPT09bCkmJihyW29dPXtpbmRleDphLGlzQ2xvc2VzdDohMX0pfXJldHVybiByfWZ1bmN0aW9uIHNRKG4pe2xldCB0PWJ5KG4ucnVuVG9Mb2FkU3RhdGUsZT0+ZT09PVJlLkxPQURJTkc/UmUuTE9BRElORzpSZS5OT1RfTE9BREVEKTtyZXR1cm57Li4ubixydW5Ub0xvYWRTdGF0ZTp0fX1mdW5jdGlvbiBsUShuLHQsZSxpKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoW24sdCxlfHwiIixpXSl9dmFye2luaXRpYWxTdGF0ZTpkUSxyZWR1Y2VyczpxU2V9PV9oKHt0YWdNZXRhZGF0YUxvYWRTdGF0ZTp7c3RhdGU6UmUuTk9UX0xPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6bnVsbH0sdGFnTWV0YWRhdGE6e3NjYWxhcnM6e3RhZ0Rlc2NyaXB0aW9uczp7fSx0YWdUb1J1bnM6e319LGhpc3RvZ3JhbXM6e3RhZ0Rlc2NyaXB0aW9uczp7fSx0YWdUb1J1bnM6e319LGltYWdlczp7dGFnRGVzY3JpcHRpb25zOnt9LHRhZ1J1blNhbXBsZWRJbmZvOnt9fX0sY2FyZExpc3Q6W10sY2FyZFRvUGlubmVkQ29weTpuZXcgTWFwLGNhcmRUb1Bpbm5lZENvcHlDYWNoZTpuZXcgTWFwLHBpbm5lZENhcmRUb09yaWdpbmFsOm5ldyBNYXAsdW5yZXNvbHZlZEltcG9ydGVkUGlubmVkQ2FyZHM6W10sY2FyZE1ldGFkYXRhTWFwOnt9LGNhcmRTdGF0ZU1hcDp7fSxjYXJkU3RlcEluZGV4Ont9LHRhZ0ZpbHRlcjoiIix0YWdHcm91cEV4cGFuZGVkOm5ldyBNYXAsbGlua2VkVGltZVNlbGVjdGlvbjpudWxsLGxpbmtlZFRpbWVFbmFibGVkOiExLHN0ZXBTZWxlY3RvckVuYWJsZWQ6ITAscmFuZ2VTZWxlY3Rpb25FbmFibGVkOiExLHNpbmdsZVNlbGVjdGlvbkhlYWRlcnM6W3t0eXBlOmd0LlJVTixuYW1lOiJydW4iLGRpc3BsYXlOYW1lOiJSdW4iLGVuYWJsZWQ6ITAscmVtb3ZhYmxlOiExLHNvcnRhYmxlOiEwLG1vdmFibGU6ITF9LHt0eXBlOmd0LlNNT09USEVELG5hbWU6InNtb290aGVkIixkaXNwbGF5TmFtZToiU21vb3RoZWQiLGVuYWJsZWQ6ITAscmVtb3ZhYmxlOiEwLHNvcnRhYmxlOiEwLG1vdmFibGU6ITB9LHt0eXBlOmd0LlZBTFVFLG5hbWU6InZhbHVlIixkaXNwbGF5TmFtZToiVmFsdWUiLGVuYWJsZWQ6ITAscmVtb3ZhYmxlOiEwLHNvcnRhYmxlOiEwLG1vdmFibGU6ITB9LHt0eXBlOmd0LlNURVAsbmFtZToic3RlcCIsZGlzcGxheU5hbWU6IlN0ZXAiLGVuYWJsZWQ6ITAscmVtb3ZhYmxlOiEwLHNvcnRhYmxlOiEwLG1vdmFibGU6ITB9LHt0eXBlOmd0LlJFTEFUSVZFX1RJTUUsbmFtZToicmVsYXRpdmUiLGRpc3BsYXlOYW1lOiJSZWxhdGl2ZSIsZW5hYmxlZDohMCxyZW1vdmFibGU6ITAsc29ydGFibGU6ITAsbW92YWJsZTohMH1dLHJhbmdlU2VsZWN0aW9uSGVhZGVyczpbe3R5cGU6Z3QuUlVOLG5hbWU6InJ1biIsZGlzcGxheU5hbWU6IlJ1biIsZW5hYmxlZDohMCxyZW1vdmFibGU6ITEsc29ydGFibGU6ITAsbW92YWJsZTohMH0se3R5cGU6Z3QuTUlOX1ZBTFVFLG5hbWU6Im1pbiIsZGlzcGxheU5hbWU6Ik1pbiIsZW5hYmxlZDohMCxyZW1vdmFibGU6ITAsc29ydGFibGU6ITAsbW92YWJsZTohMH0se3R5cGU6Z3QuTUFYX1ZBTFVFLG5hbWU6Im1heCIsZGlzcGxheU5hbWU6Ik1heCIsZW5hYmxlZDohMCxyZW1vdmFibGU6ITAsc29ydGFibGU6ITAsbW92YWJsZTohMH0se3R5cGU6Z3QuU1RBUlRfVkFMVUUsbmFtZToic3RhcnQiLGRpc3BsYXlOYW1lOiJTdGFydCBWYWx1ZSIsZW5hYmxlZDohMCxyZW1vdmFibGU6ITAsc29ydGFibGU6ITAsbW92YWJsZTohMH0se3R5cGU6Z3QuRU5EX1ZBTFVFLG5hbWU6ImVuZCIsZGlzcGxheU5hbWU6IkVuZCBWYWx1ZSIsZW5hYmxlZDohMCxyZW1vdmFibGU6ITAsc29ydGFibGU6ITAsbW92YWJsZTohMH0se3R5cGU6Z3QuVkFMVUVfQ0hBTkdFLG5hbWU6InZhbHVlQ2hhbmdlIixkaXNwbGF5TmFtZToiVmFsdWUiLGVuYWJsZWQ6ITAscmVtb3ZhYmxlOiEwLHNvcnRhYmxlOiEwLG1vdmFibGU6ITB9LHt0eXBlOmd0LlBFUkNFTlRBR0VfQ0hBTkdFLG5hbWU6InBlcmNlbnRhZ2VDaGFuZ2UiLGRpc3BsYXlOYW1lOiIlIixlbmFibGVkOiEwLHJlbW92YWJsZTohMCxzb3J0YWJsZTohMCxtb3ZhYmxlOiEwfSx7dHlwZTpndC5TVEFSVF9TVEVQLG5hbWU6InN0YXJ0U3RlcCIsZGlzcGxheU5hbWU6IlN0YXJ0IFN0ZXAiLGVuYWJsZWQ6ITAscmVtb3ZhYmxlOiEwLHNvcnRhYmxlOiEwLG1vdmFibGU6ITB9LHt0eXBlOmd0LkVORF9TVEVQLG5hbWU6ImVuZFN0ZXAiLGRpc3BsYXlOYW1lOiJFbmQgU3RlcCIsZW5hYmxlZDohMCxyZW1vdmFibGU6ITAsc29ydGFibGU6ITAsbW92YWJsZTohMH0se3R5cGU6Z3QuU1RFUF9BVF9NQVgsbmFtZToic3RlcEF0TWF4IixkaXNwbGF5TmFtZToiU3RlcCBBdCBNYXgiLGVuYWJsZWQ6ITEscmVtb3ZhYmxlOiEwLHNvcnRhYmxlOiEwLG1vdmFibGU6ITB9LHt0eXBlOmd0LlNURVBfQVRfTUlOLG5hbWU6InN0ZXBBdE1pbiIsZGlzcGxheU5hbWU6IlN0ZXAgQXQgTWluIixlbmFibGVkOiExLHJlbW92YWJsZTohMCxzb3J0YWJsZTohMCxtb3ZhYmxlOiEwfSx7dHlwZTpndC5NRUFOLG5hbWU6Im1lYW4iLGRpc3BsYXlOYW1lOiJNZWFuIixlbmFibGVkOiExLHJlbW92YWJsZTohMCxzb3J0YWJsZTohMCxtb3ZhYmxlOiEwfSx7dHlwZTpndC5SQVdfQ0hBTkdFLG5hbWU6InJhd0NoYW5nZSIsZGlzcGxheU5hbWU6IlJhdyIsZW5hYmxlZDohMSxyZW1vdmFibGU6ITAsc29ydGFibGU6ITAsbW92YWJsZTohMH1dLGZpbHRlcmVkUGx1Z2luVHlwZXM6bmV3IFNldCxzdGVwTWluTWF4OnttaW46MS8wLG1heDotMS8wfX0se2lzU2V0dGluZ3NQYW5lT3BlbjohMCxpc1NsaWRlb3V0TWVudU9wZW46ITEsbGFzdFBpbm5lZENhcmRUaW1lOjAsdGFibGVFZGl0b3JTZWxlY3RlZFRhYjpXci5TSU5HTEUsdGltZVNlcmllc0RhdGE6e3NjYWxhcnM6e30saGlzdG9ncmFtczp7fSxpbWFnZXM6e319LHNldHRpbmdzOiRTLHNldHRpbmdPdmVycmlkZXM6e30sdmlzaWJsZUNhcmRNYXA6bmV3IE1hcCxwcmV2aW91c0NhcmRJbnRlcmFjdGlvbnM6e3RhZ0ZpbHRlcnM6W10scGluczpbXSxjbGlja3M6W119LG5ld0NhcmRJbnRlcmFjdGlvbnM6e3RhZ0ZpbHRlcnM6W10scGluczpbXSxjbGlja3M6W119fSwobix0LGUpPT5Wbyh0LGUpP246ey4uLm4sdGFnTWV0YWRhdGFMb2FkU3RhdGU6e3N0YXRlOlJlLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGx9LHRhZ01ldGFkYXRhOntzY2FsYXJzOnt0YWdEZXNjcmlwdGlvbnM6e30sdGFnVG9SdW5zOnt9fSxoaXN0b2dyYW1zOnt0YWdEZXNjcmlwdGlvbnM6e30sdGFnVG9SdW5zOnt9fSxpbWFnZXM6e3RhZ0Rlc2NyaXB0aW9uczp7fSx0YWdSdW5TYW1wbGVkSW5mbzp7fX19LGNhcmRMaXN0OltdLGNhcmRNZXRhZGF0YU1hcDp7fSx2aXNpYmxlQ2FyZE1hcDpuZXcgTWFwfSksTU49ZFEsWFNlPWdyKGRRLHllKGZ1LChuLHtyb3V0ZUtpbmQ6dCxwYXJ0aWFsU3RhdGU6ZX0pPT57aWYodCE9PUNuLkVYUEVSSU1FTlQmJnQhPT1Dbi5DT01QQVJFX0VYUEVSSU1FTlQpcmV0dXJuIG47bGV0IGk9bmV3IFNldDtmb3IobGV0IGQgb2Ygbi5waW5uZWRDYXJkVG9PcmlnaW5hbC5rZXlzKCkpe2xldHtwbHVnaW46dSx0YWc6cCxydW5JZDpoLHNhbXBsZTptfT1uLmNhcmRNZXRhZGF0YU1hcFtkXTtpLmFkZChsUSh1LHAsaCxtKSl9bGV0IHI9ZSxvPVtdO2ZvcihsZXQgZCBvZlsuLi5uLnVucmVzb2x2ZWRJbXBvcnRlZFBpbm5lZENhcmRzLC4uLnIubWV0cmljcy5waW5uZWRDYXJkc10pe2xldCB1PWxRKGQucGx1Z2luLGQudGFnLGQucnVuSWQsZC5zYW1wbGUpO2kuaGFzKHUpfHwoaS5hZGQodSksby5wdXNoKGQpKX1sZXQgYT1HRihvLG4uY2FyZExpc3Qsbi5jYXJkTWV0YWRhdGFNYXAsbi5jYXJkVG9QaW5uZWRDb3B5LG4uY2FyZFRvUGlubmVkQ29weUNhY2hlLG4ucGlubmVkQ2FyZFRvT3JpZ2luYWwsbi5jYXJkU3RlcEluZGV4LG4uY2FyZFN0YXRlTWFwKSxzPXIubWV0cmljcy5zbW9vdGhpbmcsbD1uLnNldHRpbmdPdmVycmlkZXM7aWYoTnVtYmVyLmlzRmluaXRlKHMpJiZudWxsIT09cyl7bGV0IGQ9TWF0aC5tYXgoMCxNYXRoLm1pbiguOTk5LE51bWJlcihzLnRvUHJlY2lzaW9uKDMpKSkpO2w9ey4uLm4uc2V0dGluZ092ZXJyaWRlcyxzY2FsYXJTbW9vdGhpbmc6ZH19bGV0IGM9ey4uLm4sLi4uYSxzZXR0aW5nT3ZlcnJpZGVzOmx9O3JldHVybiBudWxsIT09ci5tZXRyaWNzLnRhZ0ZpbHRlciYmKGMudGFnRmlsdGVyPXIubWV0cmljcy50YWdGaWx0ZXIpLGN9KSx5ZShocywobix7cGFydGlhbFNldHRpbmdzOnR9KT0+e2xldCBlPXt9O3QudG9vbHRpcFNvcnQmJk9iamVjdC52YWx1ZXMob28pLmluY2x1ZGVzKHQudG9vbHRpcFNvcnQpJiYoZS50b29sdGlwU29ydD10LnRvb2x0aXBTb3J0KSwibnVtYmVyIj09dHlwZW9mIHQudGltZVNlcmllc0NhcmRNaW5XaWR0aCYmKGUuY2FyZE1pbldpZHRoPXQudGltZVNlcmllc0NhcmRNaW5XaWR0aCksImJvb2xlYW4iPT10eXBlb2YgdC5pZ25vcmVPdXRsaWVycyYmKGUuaWdub3JlT3V0bGllcnM9dC5pZ25vcmVPdXRsaWVycyksIm51bWJlciI9PXR5cGVvZiB0LnNjYWxhclNtb290aGluZyYmKGUuc2NhbGFyU21vb3RoaW5nPXQuc2NhbGFyU21vb3RoaW5nKSwiYm9vbGVhbiI9PXR5cGVvZiB0LnNhdmluZ1BpbnNFbmFibGVkJiYoZS5zYXZpbmdQaW5zRW5hYmxlZD10LnNhdmluZ1BpbnNFbmFibGVkKTtsZXQgaT10LnRpbWVTZXJpZXNTZXR0aW5nc1BhbmVPcGVuZWQ/P24uaXNTZXR0aW5nc1BhbmVPcGVuLHI9dC5zdGVwU2VsZWN0b3JFbmFibGVkPz9uLnN0ZXBTZWxlY3RvckVuYWJsZWQsbz10LnJhbmdlU2VsZWN0aW9uRW5hYmxlZD8/bi5yYW5nZVNlbGVjdGlvbkVuYWJsZWQsYT10LmxpbmtlZFRpbWVFbmFibGVkPz9uLmxpbmtlZFRpbWVFbmFibGVkLHM9dC5zaW5nbGVTZWxlY3Rpb25IZWFkZXJzPz9uLnNpbmdsZVNlbGVjdGlvbkhlYWRlcnMsbD10LnJhbmdlU2VsZWN0aW9uSGVhZGVycz8/bi5yYW5nZVNlbGVjdGlvbkhlYWRlcnM7cmV0dXJuey4uLm4saXNTZXR0aW5nc1BhbmVPcGVuOmksc3RlcFNlbGVjdG9yRW5hYmxlZDpyLHJhbmdlU2VsZWN0aW9uRW5hYmxlZDpvLGxpbmtlZFRpbWVFbmFibGVkOmEsc2luZ2xlU2VsZWN0aW9uSGVhZGVyczpzLHJhbmdlU2VsZWN0aW9uSGVhZGVyczpsLHNldHRpbmdzOnsuLi5uLnNldHRpbmdzLC4uLmV9fX0pLHllKG1hLEJhLG49PntsZXQgdD1uLnRhZ01ldGFkYXRhTG9hZFN0YXRlLnN0YXRlPT09UmUuTE9BRElORz9SZS5MT0FESU5HOlJlLk5PVF9MT0FERUQsZT1ieShuLnRpbWVTZXJpZXNEYXRhLChpLHIpPT5ieShpLG89PmZzKHIpP2J5KG8sYT0+c1EoYSkpOnNRKG8pKSk7cmV0dXJuey4uLm4sdGFnTWV0YWRhdGFMb2FkU3RhdGU6ey4uLm4udGFnTWV0YWRhdGFMb2FkU3RhdGUsc3RhdGU6dH0sdGltZVNlcmllc0RhdGE6ZX19KSx5ZShwVCxuPT4oey4uLm4sdGFnTWV0YWRhdGFMb2FkU3RhdGU6ey4uLm4udGFnTWV0YWRhdGFMb2FkU3RhdGUsc3RhdGU6UmUuTE9BRElOR319KSkseWUobVQsbj0+KHsuLi5uLHRhZ01ldGFkYXRhTG9hZFN0YXRlOnsuLi5uLnRhZ01ldGFkYXRhTG9hZFN0YXRlLHN0YXRlOlJlLkZBSUxFRH19KSkseWUoaFQsKG4se3RhZ01ldGFkYXRhOnR9KT0+e2xldCBlPXtzY2FsYXJzOmNRKHQsQW4uU0NBTEFSUyksaGlzdG9ncmFtczpjUSh0LEFuLkhJU1RPR1JBTVMpLGltYWdlczp0W0FuLklNQUdFU119LGk9e30scj1mdW5jdGlvbihuKXtsZXQgdD1bXTtmb3IobGV0IGUgb2YgT2JqZWN0LmtleXMobikpe2xldCByLGk9ZTtpZihmcyhpKSl7aWYoIWdzKGkpKXRocm93IG5ldyBFcnJvcigiTXVsdGktcnVuLCBzYW1wbGVkIHBsdWdpbiBzdXBwb3J0IG5vdCB5ZXQgaW1wbGVtZW50ZWQiKTt7bGV0IG89bltpXS50YWdSdW5TYW1wbGVkSW5mbztmb3IobGV0IGEgb2YgT2JqZWN0LmtleXMobykpZm9yKGxldCBzIG9mIE9iamVjdC5rZXlzKG9bYV0pKXtsZXR7bWF4U2FtcGxlc1BlclN0ZXA6bH09b1thXVtzXTtmb3IobGV0IGM9MDtjPGw7YysrKXQucHVzaCh7cGx1Z2luOmksdGFnOmEscnVuSWQ6cyxzYW1wbGU6YyxudW1TYW1wbGU6bH0pfX19ZWxzZSBpZihncyhpKSl7cj1uW2ldLnRhZ1RvUnVucztmb3IobGV0IG8gb2YgT2JqZWN0LmtleXMocikpZm9yKGxldCBhIG9mIHJbb10pdC5wdXNoKHtwbHVnaW46aSx0YWc6byxydW5JZDphfSl9ZWxzZXtyPW5baV0udGFnVG9SdW5zO2ZvcihsZXQgbyBvZiBPYmplY3Qua2V5cyhyKSl0LnB1c2goe3BsdWdpbjppLHRhZzpvLHJ1bklkOm51bGx9KX19cmV0dXJuIHR9KGUpLG89W107Zm9yKGxldCBoIG9mIHIpe2xldCBtPWpGKGgpO2lbbV09aCxvLnB1c2gobSl9bGV0IGE9bi50YWdHcm91cEV4cGFuZGVkO2lmKDA9PT1uLnRhZ0dyb3VwRXhwYW5kZWQuc2l6ZSl7bGV0IG09SFQoby5tYXAoXz0+KHsuLi5pW19dLGNhcmRJZDpffSkpLmZpbHRlcihCb29sZWFuKSk7YT1uZXcgTWFwKG4udGFnR3JvdXBFeHBhbmRlZCk7Zm9yKGxldCBfIG9mIG0uc2xpY2UoMCwyKSlhLnNldChfLmdyb3VwTmFtZSwhMCl9bGV0e25leHRDYXJkVG9QaW5uZWRDb3B5OnMsbmV4dFBpbm5lZENhcmRUb09yaWdpbmFsOmwscGlubmVkQ2FyZE1ldGFkYXRhTWFwOmN9PWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1uZXcgTWFwLHI9bmV3IE1hcCxvPXt9O3JldHVybiBuLmZvckVhY2goKGEscyk9PnstMSE9PWUuaW5kZXhPZihzKSYmKGkuc2V0KHMsYSksci5zZXQoYSxzKSxvW2FdPXRbc10pfSkse25leHRDYXJkVG9QaW5uZWRDb3B5OmksbmV4dFBpbm5lZENhcmRUb09yaWdpbmFsOnIscGlubmVkQ2FyZE1ldGFkYXRhTWFwOm99fShuLmNhcmRUb1Bpbm5lZENvcHlDYWNoZSxpLG8pLGQ9ey4uLmksLi4uY30sdT1mdW5jdGlvbihuLHQpe2xldCBlPXt9O3JldHVybiBPYmplY3QuZW50cmllcyhuKS5mb3JFYWNoKChbaSxyXSk9Pnt0W2ldJiYoZVtpXT1yKX0pLGV9KG4uY2FyZFN0ZXBJbmRleCxkKSxwPUdGKG4udW5yZXNvbHZlZEltcG9ydGVkUGlubmVkQ2FyZHMsbyxkLHMsbi5jYXJkVG9QaW5uZWRDb3B5Q2FjaGUsbCx1LG4uY2FyZFN0YXRlTWFwKTtyZXR1cm57Li4ubiwuLi5wLHRhZ0dyb3VwRXhwYW5kZWQ6YSx0YWdNZXRhZGF0YUxvYWRTdGF0ZTp7c3RhdGU6UmUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpfSx0YWdNZXRhZGF0YTplLGNhcmRMaXN0Om99fSkseWUoZlQsKG4se2NhcmRJZDp0LHNldHRpbmdzOmV9KT0+e2xldCBpPXsuLi5uLmNhcmRTdGF0ZU1hcH07cmV0dXJuIGlbdF09ey4uLmlbdF0sLi4uZX0sey4uLm4sY2FyZFN0YXRlTWFwOml9fSkseWUoemcsKG4se2NhcmRJZDp0fSk9PntsZXQgZT17Li4ubi5jYXJkU3RhdGVNYXB9O3JldHVybiBlW3RdPXsuLi5lW3RdLGZ1bGxXaWR0aDohZVt0XT8uZnVsbFdpZHRoLHRhYmxlRXhwYW5kZWQ6IWVbdF0/LmZ1bGxXaWR0aH0sey4uLm4sY2FyZFN0YXRlTWFwOmV9fSkseWUoa1QsKG4se3RhZ0ZpbHRlcjp0fSk9Pih7Li4ubix0YWdGaWx0ZXI6dH0pKSx5ZShnVCwobix7c29ydDp0fSk9Pih7Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMsdG9vbHRpcFNvcnQ6dH19KSkseWUoX1Qsbj0+e2xldCB0PSEobi5zZXR0aW5nT3ZlcnJpZGVzLmlnbm9yZU91dGxpZXJzPz9uLnNldHRpbmdzLmlnbm9yZU91dGxpZXJzKTtyZXR1cm57Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMsaWdub3JlT3V0bGllcnM6dH19fSkseWUoYlQsKG4se3hBeGlzVHlwZTp0fSk9Pih7Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMseEF4aXNUeXBlOnR9fSkpLHllKHhULChuLHtzbW9vdGhpbmc6dH0pPT4oey4uLm4sc2V0dGluZ092ZXJyaWRlczp7Li4ubi5zZXR0aW5nT3ZlcnJpZGVzLHNjYWxhclNtb290aGluZzp0fX0pKSx5ZShDVCxuPT57bGV0IHQ9IShuLnNldHRpbmdPdmVycmlkZXMuc2NhbGFyUGFydGl0aW9uTm9uTW9ub3RvbmljWD8/bi5zZXR0aW5ncy5zY2FsYXJQYXJ0aXRpb25Ob25Nb25vdG9uaWNYKTtyZXR1cm57Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMsc2NhbGFyUGFydGl0aW9uTm9uTW9ub3RvbmljWDp0fX19KSx5ZShNVCwobix7YnJpZ2h0bmVzc0luTWlsbGk6dH0pPT4oey4uLm4sc2V0dGluZ092ZXJyaWRlczp7Li4ubi5zZXR0aW5nT3ZlcnJpZGVzLGltYWdlQnJpZ2h0bmVzc0luTWlsbGk6dH19KSkseWUod1QsKG4se2NvbnRyYXN0SW5NaWxsaTp0fSk9Pih7Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMsaW1hZ2VDb250cmFzdEluTWlsbGk6dH19KSkseWUoU1Qsbj0+e2xldHtpbWFnZUJyaWdodG5lc3NJbk1pbGxpOnQsLi4uZX09bi5zZXR0aW5nT3ZlcnJpZGVzO3JldHVybnsuLi5uLHNldHRpbmdPdmVycmlkZXM6ZX19KSx5ZShFVCxuPT57bGV0e2ltYWdlQ29udHJhc3RJbk1pbGxpOnQsLi4uZX09bi5zZXR0aW5nT3ZlcnJpZGVzO3JldHVybnsuLi5uLHNldHRpbmdPdmVycmlkZXM6ZX19KSx5ZShUVCxuPT57bGV0IHQ9IShuLnNldHRpbmdPdmVycmlkZXMuaW1hZ2VTaG93QWN0dWFsU2l6ZT8/bi5zZXR0aW5ncy5pbWFnZVNob3dBY3R1YWxTaXplKTtyZXR1cm57Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMsaW1hZ2VTaG93QWN0dWFsU2l6ZTp0fX19KSx5ZShEVCwobix7aGlzdG9ncmFtTW9kZTp0fSk9Pih7Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMsaGlzdG9ncmFtTW9kZTp0fX0pKSx5ZSh2VCwobix7Y2FyZE1pbldpZHRoOnR9KT0+KHsuLi5uLHNldHRpbmdPdmVycmlkZXM6ey4uLm4uc2V0dGluZ092ZXJyaWRlcyxjYXJkTWluV2lkdGg6dH19KSkseWUoeVQsbj0+KHsuLi5uLHNldHRpbmdPdmVycmlkZXM6ey4uLm4uc2V0dGluZ092ZXJyaWRlcyxjYXJkTWluV2lkdGg6bnVsbH19KSkseWUob1Esbj0+KHsuLi5uLHNldHRpbmdPdmVycmlkZXM6ey4uLm4uc2V0dGluZ092ZXJyaWRlcyxoaWRlRW1wdHlDYXJkczohbi5zZXR0aW5nT3ZlcnJpZGVzLmhpZGVFbXB0eUNhcmRzfX0pKSx5ZSh6aCxuPT57bGV0IHQ9IShuLnNldHRpbmdPdmVycmlkZXMuc2F2aW5nUGluc0VuYWJsZWQ/P24uc2V0dGluZ3Muc2F2aW5nUGluc0VuYWJsZWQpO3JldHVybnsuLi5uLHNldHRpbmdPdmVycmlkZXM6ey4uLm4uc2V0dGluZ092ZXJyaWRlcyxzYXZpbmdQaW5zRW5hYmxlZDp0fX19KSx5ZShJVCwobix7cmVxdWVzdHM6dH0pPT57aWYoIXQubGVuZ3RoKXJldHVybiBuO2xldCBlPXsuLi5uLnRpbWVTZXJpZXNEYXRhfTtmb3IobGV0IGkgb2YgdCl7bGV0e3BsdWdpbjpyLHRhZzpvLHNhbXBsZTphfT1pO2Vbcl09ZTEoZSxyLG8sYSk7bGV0IHM9ZmQoZSxyLG8sYSksbD1ORihpKT9baS5ydW5JZF06WmYobi50YWdNZXRhZGF0YSxyLG8sYSk7cy5ydW5Ub0xvYWRTdGF0ZT10MShSZS5MT0FESU5HLGwscy5ydW5Ub0xvYWRTdGF0ZSl9cmV0dXJuey4uLm4sdGltZVNlcmllc0RhdGE6ZX19KSx5ZShBVCwobix7cmVxdWVzdDp0fSk9PntsZXQgZT17Li4ubi50aW1lU2VyaWVzRGF0YX0se3BsdWdpbjppLHRhZzpyLHNhbXBsZTpvfT10O2VbaV09ZTEoZSxpLHIsbyk7bGV0IGE9ZmQoZSxpLHIsbykscz1ORih0KT9bdC5ydW5JZF06WmYobi50YWdNZXRhZGF0YSxpLHIsbyk7cmV0dXJuIGEucnVuVG9Mb2FkU3RhdGU9dDEoUmUuRkFJTEVELHMsYS5ydW5Ub0xvYWRTdGF0ZSksey4uLm4sdGltZVNlcmllc0RhdGE6ZX19KSx5ZShSVCwobix7cmVzcG9uc2U6dH0pPT57bGV0IGU9ey4uLm4uc3RlcE1pbk1heH0saT17Li4ubi5jYXJkU3RhdGVNYXB9LHI9ey4uLm4udGltZVNlcmllc0RhdGF9LHtwbHVnaW46byx0YWc6YSxydW5JZDpzLHNhbXBsZTpsfT10O3Jbb109ZTEocixvLGEsbCk7bGV0IGM9ZmQocixvLGEsbCk7aWYocVModCkpe2xldCB1PXM/W3NdOlpmKG4udGFnTWV0YWRhdGEsbyxhLGwpO2MucnVuVG9Mb2FkU3RhdGU9dDEoUmUuRkFJTEVELHUsYy5ydW5Ub0xvYWRTdGF0ZSl9ZWxzZXtsZXQgdT10LnJ1blRvU2VyaWVzO2MucnVuVG9TZXJpZXM9ey4uLmMucnVuVG9TZXJpZXN9LGMucnVuVG9Mb2FkU3RhdGU9ey4uLmMucnVuVG9Mb2FkU3RhdGV9O2ZvcihsZXQgcCBpbiB1KWlmKHUuaGFzT3duUHJvcGVydHkocCkpe2MucnVuVG9TZXJpZXNbcF09dVtwXSxjLnJ1blRvTG9hZFN0YXRlW3BdPVJlLkxPQURFRDtmb3IobGV0IGggb2YgdVtwXSllLm1pbj1NYXRoLm1pbihlLm1pbixoLnN0ZXApLGUubWF4PU1hdGgubWF4KGUubWF4LGguc3RlcCl9fWlmKHQucnVuVG9TZXJpZXMmJnQucGx1Z2luPT09QW4uU0NBTEFSUyl7bGV0IHU9akYoe3BsdWdpbjpvLHRhZzphLHJ1bklkOm51bGx9KSxwPWZ1bmN0aW9uKG4pe2xldCB0PTEvMCxlPS0xLzA7cmV0dXJuIE9iamVjdC52YWx1ZXMobikuZmxhdCgpLmZvckVhY2goaT0+e3Q9TWF0aC5taW4odCxpLnN0ZXApLGU9TWF0aC5tYXgoZSxpLnN0ZXApfSkse21pblN0ZXA6dCxtYXhTdGVwOmV9fShjLnJ1blRvU2VyaWVzKTtpW3VdPXsuLi5pW3VdLGRhdGFNaW5NYXg6cH07bGV0IGg9bi5jYXJkVG9QaW5uZWRDb3B5LmdldCh1KTtoJiYoaVtoXT17Li4uaVtoXSxkYXRhTWluTWF4OnB9KX1yZXR1cm57Li4ubix0aW1lU2VyaWVzRGF0YTpyLGNhcmRTdGVwSW5kZXg6V1NlKG4uY2FyZE1ldGFkYXRhTWFwLG4uY2FyZFN0ZXBJbmRleCxyLG4udGltZVNlcmllc0RhdGEpLHN0ZXBNaW5NYXg6ZSxjYXJkU3RhdGVNYXA6aX19KSx5ZShQVCwobix7Y2FyZElkOnQsc3RlcEluZGV4OmV9KT0+e2xldCBpPUNOKHQsbi5jYXJkTWV0YWRhdGFNYXAsbi50aW1lU2VyaWVzRGF0YSkscj1lO3JldHVybiBudWxsPT09aT9yPW51bGw6ZT5pJiYocj1pKSx7Li4ubixjYXJkU3RlcEluZGV4OnsuLi5uLmNhcmRTdGVwSW5kZXgsW3RdOntpbmRleDpyLGlzQ2xvc2VzdDohMX19fX0pLHllKE9ULChuLHt0YWdHcm91cDp0fSk9PntsZXQgZT1uZXcgTWFwKG4udGFnR3JvdXBFeHBhbmRlZCk7cmV0dXJuIGUuc2V0KHQsIWUuZ2V0KHQpKSx7Li4ubix0YWdHcm91cEV4cGFuZGVkOmV9fSkseWUoVWcsKG4se2VudGVyZWRDYXJkczp0LGV4aXRlZENhcmRzOmV9KT0+e2lmKCF0Lmxlbmd0aCYmIWUubGVuZ3RoKXJldHVybiBuO2xldCBpPW5ldyBNYXAobi52aXNpYmxlQ2FyZE1hcCk7cmV0dXJuIHQuZm9yRWFjaCgoe2VsZW1lbnRJZDpyLGNhcmRJZDpvfSk9PntsZXQgYT1pLmdldChyKT8/bnVsbDtpZihudWxsIT09YSYmYSE9PW8pdGhyb3cgbmV3IEVycm9yKCJBIERPTSBlbGVtZW50IGNhbm5vdCBiZSByZXVzZWQgZm9yIG1vcmUgdGhhbiAxIHVuaXF1ZSBjYXJkIG1ldGFkYXRhIik7aS5zZXQocixvKX0pLGUuZm9yRWFjaCgoe2VsZW1lbnRJZDpyfSk9PntpLmRlbGV0ZShyKX0pLHsuLi5uLHZpc2libGVDYXJkTWFwOml9fSkseWUobnAsKG4se2NhcmRJZDp0fSk9PntsZXQgZT1uLnBpbm5lZENhcmRUb09yaWdpbmFsLmhhcyh0KSxpPSFlJiYhbi5jYXJkVG9QaW5uZWRDb3B5Lmhhcyh0KTtpZihpJiYhbjEobikpcmV0dXJuIG47bGV0IHI9bmV3IE1hcChuLmNhcmRUb1Bpbm5lZENvcHkpLG89bmV3IE1hcChuLmNhcmRUb1Bpbm5lZENvcHlDYWNoZSksYT1uZXcgTWFwKG4ucGlubmVkQ2FyZFRvT3JpZ2luYWwpLHM9ey4uLm4uY2FyZE1ldGFkYXRhTWFwfSxsPXsuLi5uLmNhcmRTdGVwSW5kZXh9LGM9ey4uLm4uY2FyZFN0YXRlTWFwfSxkPW4ubGFzdFBpbm5lZENhcmRUaW1lO2lmKGUpe2xldCB1PW4ucGlubmVkQ2FyZFRvT3JpZ2luYWwuZ2V0KHQpO3IuZGVsZXRlKHUpLG8uZGVsZXRlKHUpLGEuZGVsZXRlKHQpLGRlbGV0ZSBzW3RdLGRlbGV0ZSBsW3RdLGRlbGV0ZSBjW3RdfWVsc2UgaWYoaSl7bGV0IHU9V0YodCxyLG8sYSxsLHMsYyk7cj11LmNhcmRUb1Bpbm5lZENvcHksbz11LmNhcmRUb1Bpbm5lZENvcHlDYWNoZSxhPXUucGlubmVkQ2FyZFRvT3JpZ2luYWwscz11LmNhcmRNZXRhZGF0YU1hcCxsPXUuY2FyZFN0ZXBJbmRleCxjPXUuY2FyZFN0YXRlTWFwLGQ9RGF0ZS5ub3coKX1lbHNle2xldCB1PW4uY2FyZFRvUGlubmVkQ29weS5nZXQodCk7ci5kZWxldGUodCksby5kZWxldGUodCksYS5kZWxldGUodSksZGVsZXRlIHNbdV0sZGVsZXRlIGxbdV0sZGVsZXRlIGNbdF19cmV0dXJuey4uLm4sY2FyZE1ldGFkYXRhTWFwOnMsY2FyZFN0YXRlTWFwOmMsY2FyZFN0ZXBJbmRleDpsLGNhcmRUb1Bpbm5lZENvcHk6cixjYXJkVG9QaW5uZWRDb3B5Q2FjaGU6byxwaW5uZWRDYXJkVG9PcmlnaW5hbDphLGxhc3RQaW5uZWRDYXJkVGltZTpkfX0pLHllKExULG49PntsZXQgdD0hbi5saW5rZWRUaW1lRW5hYmxlZCxlPXsuLi5uLmNhcmRTdGVwSW5kZXh9LGk9bi5saW5rZWRUaW1lU2VsZWN0aW9uLHI9bi5zdGVwU2VsZWN0b3JFbmFibGVkLG89bi5yYW5nZVNlbGVjdGlvbkVuYWJsZWQ7aWYodCl7bGV0e21heDphfT1uLnN0ZXBNaW5NYXg7aT1uLmxpbmtlZFRpbWVTZWxlY3Rpb24/P3tzdGFydDp7c3RlcDphPT09LTEvMD8wOmF9LGVuZDpudWxsfSxlPXFGKG4uY2FyZFN0ZXBJbmRleCxuLmNhcmRNZXRhZGF0YU1hcCxuLnRpbWVTZXJpZXNEYXRhLGkpLHI9dCxvPUJvb2xlYW4oaS5lbmQpfXJldHVybnsuLi5uLGNhcmRTdGVwSW5kZXg6ZSxsaW5rZWRUaW1lRW5hYmxlZDp0LGxpbmtlZFRpbWVTZWxlY3Rpb246aSxzdGVwU2VsZWN0b3JFbmFibGVkOnIscmFuZ2VTZWxlY3Rpb25FbmFibGVkOm99fSkseWUoQlQsbj0+e2xldCB0PSFuLnJhbmdlU2VsZWN0aW9uRW5hYmxlZCxlPW4uc3RlcFNlbGVjdG9yRW5hYmxlZCxpPW4ubGlua2VkVGltZVNlbGVjdGlvbixyPU9iamVjdC5lbnRyaWVzKG4uY2FyZFN0YXRlTWFwKS5yZWR1Y2UoKG8sW2Esc10pPT4ob1thXT17Li4ucyxzdGVwU2VsZWN0aW9uT3ZlcnJpZGU6VmEuTk9ORSxyYW5nZVNlbGVjdGlvbk92ZXJyaWRlOlZhLk5PTkV9LG8pLHt9KTtyZXR1cm4gdD8oZT10LGl8fChpPXtzdGFydDp7c3RlcDpuLnN0ZXBNaW5NYXgubWlufSxlbmQ6e3N0ZXA6bi5zdGVwTWluTWF4Lm1heH19KSxpLmVuZHx8KGk9e3N0YXJ0OntzdGVwOm4uc3RlcE1pbk1heC5taW59LGVuZDppLnN0YXJ0fSkpOmkmJihpPXtzdGFydDppLmVuZD8/aS5zdGFydCxlbmQ6bnVsbH0pLHsuLi5uLHN0ZXBTZWxlY3RvckVuYWJsZWQ6ZSxyYW5nZVNlbGVjdGlvbkVuYWJsZWQ6dCxsaW5rZWRUaW1lU2VsZWN0aW9uOmksY2FyZFN0YXRlTWFwOnJ9fSkseWUoSGgsKG4sdCk9PntsZXR7Y2FyZElkOmUsdGltZVNlbGVjdGlvbjppfT10LHI9aS5zdGFydC5zdGVwLG89aS5lbmQ/LnN0ZXAscz1uLnJhbmdlU2VsZWN0aW9uRW5hYmxlZDtuLmxpbmtlZFRpbWVFbmFibGVkJiYocz12b2lkIDAhPT1vKTtsZXQgbD17c3RhcnQ6e3N0ZXA6cn0sZW5kOnZvaWQgMD09PW8/bnVsbDp7c3RlcDpyPm8/cjpvfX0sYz1xRihuLmNhcmRTdGVwSW5kZXgsbi5jYXJkTWV0YWRhdGFNYXAsbi50aW1lU2VyaWVzRGF0YSxsKSxkPXsuLi5uLmNhcmRTdGF0ZU1hcH07cmV0dXJuIGUmJihkW2VdPXsuLi5kW2VdLHRpbWVTZWxlY3Rpb246bCxzdGVwU2VsZWN0aW9uT3ZlcnJpZGU6VmEuT1ZFUlJJREVfQVNfRU5BQkxFRCxyYW5nZVNlbGVjdGlvbk92ZXJyaWRlOnZvaWQgMD09PWwuZW5kPy5zdGVwP1ZhLk9WRVJSSURFX0FTX0RJU0FCTEVEOlZhLk9WRVJSSURFX0FTX0VOQUJMRUR9KSx7Li4ubixsaW5rZWRUaW1lU2VsZWN0aW9uOmwsY2FyZFN0ZXBJbmRleDpjLGNhcmRTdGF0ZU1hcDpkLHJhbmdlU2VsZWN0aW9uRW5hYmxlZDpzfX0pLHllKF95LChuLHtjYXJkSWQ6dCx1c2VyVmlld0JveDplfSk9PntsZXQgaT17Li4ubi5jYXJkU3RhdGVNYXB9O3JldHVybiBpW3RdPXsuLi5pW3RdLHVzZXJWaWV3Qm94OmV9LHsuLi5uLGNhcmRTdGF0ZU1hcDppfX0pLHllKFRkLChuLHthZmZvcmRhbmNlOnQsY2FyZElkOmV9KT0+e2xldCBpPXsuLi5uLmNhcmRTdGF0ZU1hcH07aWYoZSl7bGV0e3RpbWVTZWxlY3Rpb246cywuLi5sfT1pW2VdfHx7fTtpW2VdPXsuLi5sLHN0ZXBTZWxlY3Rpb25PdmVycmlkZTpWYS5PVkVSUklERV9BU19ESVNBQkxFRH19ZWxzZSBPYmplY3Qua2V5cyhpKS5mb3JFYWNoKHM9PntpW3NdPXsuLi5pW3NdLHN0ZXBTZWxlY3Rpb25PdmVycmlkZTpWYS5OT05FfX0pO2lmKCFuLmxpbmtlZFRpbWVFbmFibGVkJiZ0IT09WmEuQ0hFQ0tfQk9YKXJldHVybnsuLi5uLGNhcmRTdGF0ZU1hcDppfTtsZXQgcj0hbi5zdGVwU2VsZWN0b3JFbmFibGVkLG89ciYmbi5saW5rZWRUaW1lRW5hYmxlZCxhPXImJm4ucmFuZ2VTZWxlY3Rpb25FbmFibGVkO3JldHVybnsuLi5uLGxpbmtlZFRpbWVFbmFibGVkOm8sc3RlcFNlbGVjdG9yRW5hYmxlZDpyLHJhbmdlU2VsZWN0aW9uRW5hYmxlZDphLGNhcmRTdGF0ZU1hcDppfX0pLHllKGRULChuLHt0YWI6dH0pPT4oey4uLm4sdGFibGVFZGl0b3JTZWxlY3RlZFRhYjp0fSkpLHllKGpnLChuLHtzb3VyY2U6dCxkZXN0aW5hdGlvbjplLHNpZGU6aSxkYXRhVGFibGVNb2RlOnJ9KT0+e2xldCBvPXI9PT1Xci5SQU5HRT9bLi4ubi5yYW5nZVNlbGVjdGlvbkhlYWRlcnNdOlsuLi5uLnNpbmdsZVNlbGVjdGlvbkhlYWRlcnNdO3JldHVybiBvPWtsLm1vdmVDb2x1bW4obyx0LGUsaSkscj09PVdyLlJBTkdFP3suLi5uLHJhbmdlU2VsZWN0aW9uSGVhZGVyczpvfTp7Li4ubixzaW5nbGVTZWxlY3Rpb25IZWFkZXJzOm99fSkseWUoR2csKG4se2RhdGFUYWJsZU1vZGU6dCxoZWFkZXI6ZSxjYXJkSWQ6aX0pPT57bGV0e2NhcmRTdGF0ZU1hcDpyLHJhbmdlU2VsZWN0aW9uRW5hYmxlZDpvLGxpbmtlZFRpbWVFbmFibGVkOmF9PW4scz1pP3IxKHIsbyxhLGkpOnQ9PT1Xci5SQU5HRSxjPShzP24ucmFuZ2VTZWxlY3Rpb25IZWFkZXJzOm4uc2luZ2xlU2VsZWN0aW9uSGVhZGVycykubWFwKGQ9PntsZXQgdT17Li4uZH07cmV0dXJuIGQubmFtZT09PWUubmFtZSYmKHUuZW5hYmxlZD0hdS5lbmFibGVkKSx1fSk7cmV0dXJuIHM/ey4uLm4scmFuZ2VTZWxlY3Rpb25IZWFkZXJzOmN9OnsuLi5uLHNpbmdsZVNlbGVjdGlvbkhlYWRlcnM6Y319KSx5ZShGVCwobix7cGx1Z2luOnR9KT0+e2xldCBlPW5ldyBTZXQobi5maWx0ZXJlZFBsdWdpblR5cGVzKTtyZXR1cm4gZS5oYXModCk/ZS5kZWxldGUodCk6ZS5hZGQodCksT2JqZWN0LnZhbHVlcyhBbikuZXZlcnkoaT0+ZS5oYXMoaSkpJiYoZT1uZXcgU2V0KSx7Li4ubixmaWx0ZXJlZFBsdWdpblR5cGVzOmV9fSkseWUoTlQsbj0+KHsuLi5uLGZpbHRlcmVkUGx1Z2luVHlwZXM6bmV3IFNldH0pKSx5ZShzVCxuPT4oey4uLm4saXNTZXR0aW5nc1BhbmVPcGVuOiFuLmlzU2V0dGluZ3NQYW5lT3Blbn0pKSx5ZShhVCxuPT4oey4uLm4saXNTZXR0aW5nc1BhbmVPcGVuOiExfSkpLHllKGxULG49Pih7Li4ubixpc1NsaWRlb3V0TWVudU9wZW46IW4uaXNTbGlkZW91dE1lbnVPcGVufSkpLHllKGNULChuLHttb2RlOnR9KT0+KHsuLi5uLGlzU2xpZGVvdXRNZW51T3BlbjohMCxpc1NldHRpbmdzUGFuZU9wZW46ITAsdGFibGVFZGl0b3JTZWxlY3RlZFRhYjp0fSkpLHllKHVULG49Pih7Li4ubixpc1NsaWRlb3V0TWVudU9wZW46ITF9KSkseWUoVlQsKG4se2NhcmRzOnR9KT0+KHsuLi5uLHVucmVzb2x2ZWRJbXBvcnRlZFBpbm5lZENhcmRzOlsuLi5uLnVucmVzb2x2ZWRJbXBvcnRlZFBpbm5lZENhcmRzLC4uLnRdfSkpLHllKFdnLG49PntsZXQgdD17Li4ubi5jYXJkTWV0YWRhdGFNYXB9LGU9ey4uLm4uY2FyZFN0ZXBJbmRleH0saT17Li4ubi5jYXJkU3RhdGVNYXB9O2ZvcihsZXQgciBvZiBuLnBpbm5lZENhcmRUb09yaWdpbmFsLmtleXMoKSlkZWxldGUgdFtyXSxkZWxldGUgZVtyXSxkZWxldGUgaVtyXTtyZXR1cm57Li4ubixjYXJkTWV0YWRhdGFNYXA6dCxjYXJkU3RhdGVNYXA6aSxjYXJkU3RlcEluZGV4OmUsY2FyZFRvUGlubmVkQ29weTpuZXcgTWFwLGNhcmRUb1Bpbm5lZENvcHlDYWNoZTpuZXcgTWFwLHBpbm5lZENhcmRUb09yaWdpbmFsOm5ldyBNYXB9fSkpO2Z1bmN0aW9uIHVRKG4sdCl7cmV0dXJuIGJoKFhTZSxxU2UpKG4sdCl9ZnVuY3Rpb24gY1Eobix0KXtyZXR1cm57dGFnRGVzY3JpcHRpb25zOm5bdF0udGFnRGVzY3JpcHRpb25zLHRhZ1RvUnVuczpZU2Uoblt0XS5ydW5UYWdJbmZvKX19ZnVuY3Rpb24gWVNlKG4pe2xldCB0PXt9O2ZvcihsZXQgZSBpbiBuKWZvcihsZXQgaSBvZiBuW2VdKXRbaV09Wy4uLnRbaV18fFtdLGVdO3JldHVybiB0fXZhciBRU2U9VyhnZCxLcywobix0LGUpPT50P3suLi50LGxvYWRTdGF0ZTpuLGlkOmV9Om51bGwpLHdOPWZlKCJbTWV0cmljcyBFZmZlY3RzXSBJbml0IikscFE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLmFjdGlvbnMkPWUsdGhpcy5zdG9yZT1pLHRoaXMubWV0cmljc0RhdGFTb3VyY2U9cix0aGlzLnNhdmVkUGluc0RhdGFTb3VyY2U9byx0aGlzLmRhc2hib2FyZFNob3duV2l0aG91dERhdGEkPXRoaXMuYWN0aW9ucyQucGlwZShabih3Tix5YyxnaCxOYSksSXQodGhpcy5zdG9yZS5zZWxlY3QoWm8pLHRoaXMuc3RvcmUuc2VsZWN0KHh2KSksT2UoKFssYSxzXSk9PmE9PT1fdiYmcy5zdGF0ZT09PVJlLk5PVF9MT0FERUQpKSx0aGlzLnJlbG9hZFJlcXVlc3RlZFdoaWxlU2hvd24kPXRoaXMuYWN0aW9ucyQucGlwZShabihtYSxCYSksSXQodGhpcy5zdG9yZS5zZWxlY3QoWm8pKSxPZSgoWyxhXSk9PmE9PT1fdikpLHRoaXMubG9hZFRhZ01ldGFkYXRhJD10bih0aGlzLmRhc2hib2FyZFNob3duV2l0aG91dERhdGEkLHRoaXMucmVsb2FkUmVxdWVzdGVkV2hpbGVTaG93biQpLnBpcGUoSXQodGhpcy5zdG9yZS5zZWxlY3QoeHYpLHRoaXMuc3RvcmUuc2VsZWN0KG9yKSksT2UoKFssYSxzXSk9PmEuc3RhdGUhPT1SZS5MT0FESU5HJiZudWxsIT09cyksaWMoMTApLER0KCgpPT57dGhpcy5zdG9yZS5kaXNwYXRjaChwVCgpKX0pLEpuKChbLCxhXSk9PnRoaXMubWV0cmljc0RhdGFTb3VyY2UuZmV0Y2hUYWdNZXRhZGF0YShhKS5waXBlKER0KHM9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKGhUKHt0YWdNZXRhZGF0YTpzfSkpfSksY28oKCk9Pih0aGlzLnN0b3JlLmRpc3BhdGNoKG1UKCkpLCR0KG51bGwpKSkpKSksdGhpcy52aXNpYmxlQ2FyZHNXaXRob3V0RGF0YUNoYW5nZWQkPXRoaXMuYWN0aW9ucyQucGlwZShabihVZyksSXQodGhpcy5nZXRWaXNpYmxlQ2FyZEZldGNoSW5mb3MoKSkscSgoWyxhXSk9PmEuZmlsdGVyKHM9PnMubG9hZFN0YXRlPT09UmUuTk9UX0xPQURFRCkpKSx0aGlzLnZpc2libGVDYXJkc1JlbG9hZGVkJD10aGlzLnJlbG9hZFJlcXVlc3RlZFdoaWxlU2hvd24kLnBpcGUoSXQodGhpcy5nZXRWaXNpYmxlQ2FyZEZldGNoSW5mb3MoKSkscSgoWyxhXSk9PmEuZmlsdGVyKHM9PnMubG9hZFN0YXRlIT09UmUuTE9BRElORykpKSx0aGlzLmxvYWRUaW1lU2VyaWVzJD10bih0aGlzLnZpc2libGVDYXJkc1dpdGhvdXREYXRhQ2hhbmdlZCQsdGhpcy52aXNpYmxlQ2FyZHNSZWxvYWRlZCQpLnBpcGUoT2UoYT0+YS5sZW5ndGg+MCksSXQodGhpcy5zdG9yZS5zZWxlY3Qob3IpLnBpcGUoT2UoYT0+bnVsbCE9PWEpKSkseG4oKFthLHNdKT0+dGhpcy5mZXRjaFRpbWVTZXJpZXNGb3JDYXJkcyhhLHMpKSksdGhpcy5hZGRPclJlbW92ZVBpbiQ9dGhpcy5hY3Rpb25zJC5waXBlKFpuKG5wKSxJdCh0aGlzLmdldFZpc2libGVDYXJkRmV0Y2hJbmZvcygpLHRoaXMuc3RvcmUuc2VsZWN0KHBkKSx0aGlzLnN0b3JlLnNlbGVjdChwaCksdGhpcy5zdG9yZS5zZWxlY3QoYmQpKSxPZSgoWywsYSxzLGxdKT0+YSYmcyYmbCksRHQoKFt7Y2FyZElkOmEsY2FuQ3JlYXRlTmV3UGluczpzLHdhc1Bpbm5lZDpsfSxjXSk9PntsZXQgZD1jLmZpbmQodT0+dS5pZD09PWEpOyFkfHxkLnBsdWdpbiE9PUFuLlNDQUxBUlN8fChsP3RoaXMuc2F2ZWRQaW5zRGF0YVNvdXJjZS5yZW1vdmVTY2FsYXJQaW4oZC50YWcpOnMmJnRoaXMuc2F2ZWRQaW5zRGF0YVNvdXJjZS5zYXZlU2NhbGFyUGluKGQudGFnKSl9KSksdGhpcy5sb2FkU2F2ZWRQaW5zJD10aGlzLmFjdGlvbnMkLnBpcGUoWm4od04pLEl0KHRoaXMuc3RvcmUuc2VsZWN0KHBkKSx0aGlzLnN0b3JlLnNlbGVjdChwaCksdGhpcy5zdG9yZS5zZWxlY3QoYmQpKSxPZSgoWyxhLHMsbF0pPT5hJiZzJiZsKSxEdCgoKT0+e2xldCBhPXRoaXMuc2F2ZWRQaW5zRGF0YVNvdXJjZS5nZXRTYXZlZFNjYWxhclBpbnMoKTtpZighYXx8MD09PWEubGVuZ3RoKXJldHVybjtsZXQgcz1hLm1hcChsPT4oe3BsdWdpbjpBbi5TQ0FMQVJTLHRhZzpsfSkpO3RoaXMuc3RvcmUuZGlzcGF0Y2goVlQoe2NhcmRzOnN9KSl9KSksdGhpcy5yZW1vdmVBbGxQaW5zJD10aGlzLmFjdGlvbnMkLnBpcGUoWm4oV2cpLEl0KHRoaXMuc3RvcmUuc2VsZWN0KHBkKSx0aGlzLnN0b3JlLnNlbGVjdChwaCksdGhpcy5zdG9yZS5zZWxlY3QoYmQpKSxPZSgoWyxhLHMsbF0pPT5hJiZzJiZsKSxEdCgoKT0+e3RoaXMuc2F2ZWRQaW5zRGF0YVNvdXJjZS5yZW1vdmVBbGxTY2FsYXJQaW5zKCl9KSksdGhpcy5hZGRPclJlbW92ZVBpbnNPblRvZ2dsZSQ9dGhpcy5hY3Rpb25zJC5waXBlKFpuKHpoKSxJdCh0aGlzLnN0b3JlLnNlbGVjdChLZiksdGhpcy5zdG9yZS5zZWxlY3QocGQpLHRoaXMuc3RvcmUuc2VsZWN0KHBoKSx0aGlzLnN0b3JlLnNlbGVjdChiZCkpLE9lKChbLCxhLHNdKT0+YSYmcyksRHQoKFssYSwsLHNdKT0+e2lmKHMpe2xldCBsPWEubWFwKGM9PmMucGx1Z2luPT09QW4uU0NBTEFSUz9jLnRhZzpudWxsKS5maWx0ZXIoYz0+bnVsbCE9PWMpO3RoaXMuc2F2ZWRQaW5zRGF0YVNvdXJjZS5zYXZlU2NhbGFyUGlucyhsKX1lbHNlIHRoaXMuc2F2ZWRQaW5zRGF0YVNvdXJjZS5yZW1vdmVBbGxTY2FsYXJQaW5zKCl9KSksdGhpcy5kYXRhRWZmZWN0cyQ9X3IoKCk9PnRuKHRoaXMubG9hZFRhZ01ldGFkYXRhJCx0aGlzLmxvYWRUaW1lU2VyaWVzJCx0aGlzLmFkZE9yUmVtb3ZlUGluJCx0aGlzLmxvYWRTYXZlZFBpbnMkLHRoaXMucmVtb3ZlQWxsUGlucyQsdGhpcy5hZGRPclJlbW92ZVBpbnNPblRvZ2dsZSQpLHtkaXNwYXRjaDohMX0pfW5ncnhPbkluaXRFZmZlY3RzKCl7cmV0dXJuIHdOKCl9Z2V0VmlzaWJsZUNhcmRGZXRjaEluZm9zKCl7cmV0dXJuIHRoaXMuc3RvcmUuc2VsZWN0KElXKS5waXBlKEpuKGk9Pmkuc2l6ZT9DbyhbLi4uaV0ubWFwKG89PnRoaXMuc3RvcmUuc2VsZWN0KFFTZSxvKS5waXBlKEx0KDEpKSkpOiR0KFtdKSkscShpPT5pLmZpbHRlcihCb29sZWFuKSkpfWZldGNoVGltZVNlcmllcyhlKXtyZXR1cm4gdGhpcy5tZXRyaWNzRGF0YVNvdXJjZS5mZXRjaFRpbWVTZXJpZXMoW2VdKS5waXBlKER0KGk9PntsZXQgcj1pLmZpbHRlcihxUyk7ci5sZW5ndGgmJmNvbnNvbGUuZXJyb3IoIlRpbWUgc2VyaWVzIHJlc3BvbnNlIGNvbnRhaW5lZCBlcnJvcnM6IixyKSx0aGlzLnN0b3JlLmRpc3BhdGNoKFJUKHtyZXNwb25zZTppWzBdfSkpfSksY28oKCk9Pih0aGlzLnN0b3JlLmRpc3BhdGNoKEFUKHtyZXF1ZXN0OmV9KSksJHQobnVsbCkpKSl9ZmV0Y2hUaW1lU2VyaWVzRm9yQ2FyZHMoZSxpKXtyZXR1cm4gJHQoZS5tYXAobz0+e2xldHtwbHVnaW46YSx0YWc6cyxydW5JZDpsLHNhbXBsZTpjfT1vLGQ9Z3MoYSk/e3BsdWdpbjphLHRhZzpzLHJ1bklkOmx9OntwbHVnaW46YSx0YWc6cyxleHBlcmltZW50SWRzOml9O3JldHVybiB2b2lkIDAhPT1jJiYoZC5zYW1wbGU9YyksZH0pKS5waXBlKER0KG89Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKElUKHtyZXF1ZXN0czpvfSkpfSkseG4obz0+dG4oLi4uby5tYXAocz0+dGhpcy5mZXRjaFRpbWVTZXJpZXMocykpKSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKEVvKSxPKEllKSxPKHdjKSxPKFhTKSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksU049bmV3IHRlKCJNZXRyaWNzIFN0b3JlIENvbmZpZyIpLEVOPW5ldyB0ZSgiTWV0cmljcyBJbml0aWFsIFNldHRpbmdzIENvbmZpZyIpO2Z1bmN0aW9uIGhRKG4pe3JldHVybiBuP3tpbml0aWFsU3RhdGU6ey4uLk1OLHNldHRpbmdzOm59fTp7aW5pdGlhbFN0YXRlOk1OfX12YXIgQ3M9KCgpPT4oZnVuY3Rpb24obil7bltuLkxFRlQ9MV09IkxFRlQiLG5bbi5SSUdIVD0yXT0iUklHSFQiLG5bbi5NSURETEU9NF09Ik1JRERMRSIsbltuLkZPVVJUSD04XT0iRk9VUlRIIixuW24uRklGVEg9MzJdPSJGSUZUSCJ9KENzfHwoQ3M9e30pKSxDcykpKCksbVE9MDtmdW5jdGlvbiBaU2Uobix0KXtpZigxJm4pe2xldCBlPVRlKCk7ZigwLCJidXR0b24iLDMpLEEoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBuZShlKSxpZSh3KCkuZXhwYW5kU2lkZWJhcigpKX0pLGsoMSwibWF0LWljb24iLDQpLGcoKX19dmFyIEtTZT1mdW5jdGlvbihuKXtyZXR1cm57ImZ1bGwtc2NyZWVuIjpufX07ZnVuY3Rpb24gSlNlKG4sdCl7aWYoMSZuKXtsZXQgZT1UZSgpO2YoMCwibmF2Iiw1KSxVKDEsImFzeW5jIiksVSgyLCJhc3luYyIpLFR0KDMsMSksZig0LCJkaXYiLDYpLFUoNSwiYXN5bmMiKSxmKDYsImJ1dHRvbiIsNyksQSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIG5lKGUpLGllKHcoKS50b2dnbGVGdWxsU2NyZWVuKCkpfSksVSg3LCJhc3luYyIpLGsoOCwibWF0LWljb24iLDgpLFUoOSwiYXN5bmMiKSxnKCkoKSgpfWlmKDImbil7bGV0IGU9dygpO0J0KCJ3aWR0aCIsRygxLDksZS53aWR0aCQpLCIlIikoIm1pbi13aWR0aCIsZS5NSU5JTVVNX1NJREVCQVJfV0lEVEhfSU5fUFgsInB4IikoIm1heC13aWR0aCIsRygyLDExLGUucnVuc1RhYmxlRnVsbFNjcmVlbiQpPzEwMDoiIiwiJSIpLHYoNCksYigibmdDbGFzcyIsVW4oMTksS1NlLEcoNSwxMyxlLnJ1bnNUYWJsZUZ1bGxTY3JlZW4kKSkpLHYoMiksYigibmdDbGFzcyIsRyg3LDE1LGUucnVuc1RhYmxlRnVsbFNjcmVlbiQpPyJjb2xsYXBzZSI6ImV4cGFuZCIpLHYoMiksYigic3ZnSWNvbiIsRyg5LDE3LGUucnVuc1RhYmxlRnVsbFNjcmVlbiQpPyJhcnJvd19iYWNrXzI0cHgiOiJhcnJvd19mb3J3YXJkXzI0cHgiKX19ZnVuY3Rpb24gJFNlKG4sdCl7aWYoMSZuKXtsZXQgZT1UZSgpO2YoMCwiZGl2Iiw5KSxBKCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7cmV0dXJuIG5lKGUpLGllKHcoKS5yZXNpemVHcmFiYmVkKCkpfSksZygpfX12YXIgZTFlPVtbWyIiLCJtYWluIiwiIl1dLFtbIiIsInNpZGViYXIiLCIiXV1dLHQxZT1bIlttYWluXSIsIltzaWRlYmFyXSJdLF9RPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnN0b3JlPWUsdGhpcy5ydW5zVGFibGVGdWxsU2NyZWVuJD10aGlzLnN0b3JlLnNlbGVjdCh3UyksdGhpcy53aWR0aCQ9dGhpcy5zdG9yZS5zZWxlY3QoTVMpLnBpcGUoVmkodGhpcy5ydW5zVGFibGVGdWxsU2NyZWVuJCkscSgoW3Isb10pPT5vPzEwMDpyKSksdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBFZSx0aGlzLnJlc2l6aW5nPSExLHRoaXMuTUlOSU1VTV9TSURFQkFSX1dJRFRIX0lOX1BYPTc1LEVpKGkubmF0aXZlRWxlbWVudCwibW91c2Vtb3ZlIikucGlwZShpdCh0aGlzLm5nVW5zdWJzY3JpYmUpLE9lKCgpPT50aGlzLnJlc2l6aW5nKSkuc3Vic2NyaWJlKHI9PntpZigoci5idXR0b25zJkNzLkxFRlQpIT09Q3MuTEVGVClyZXR1cm4gdm9pZCh0aGlzLnJlc2l6aW5nPSExKTtyLnByZXZlbnREZWZhdWx0KCk7bGV0e3dpZHRoOm99PWkubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLnN0b3JlLmRpc3BhdGNoKFVmKHt3aWR0aEluUGVyY2VudDpyLmNsaWVudFg8PXRoaXMuTUlOSU1VTV9TSURFQkFSX1dJRFRIX0lOX1BYPzA6ci5jbGllbnRYL28qMTAwfSkpfSksRWkoaS5uYXRpdmVFbGVtZW50LCJtb3VzZXVwIix7cGFzc2l2ZTohMH0pLnBpcGUoaXQodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5yZXNpemluZz0hMX0pfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX1yZXNpemVHcmFiYmVkKCl7dGhpcy5yZXNpemluZz0hMH1leHBhbmRTaWRlYmFyKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChVZih7d2lkdGhJblBlcmNlbnQ6MjB9KSl9dG9nZ2xlRnVsbFNjcmVlbigpe3RoaXMuc3RvcmUuZGlzcGF0Y2godlMoKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoSWUpLEMoeGUpKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Yi1kYXNoYm9hcmQtbGF5b3V0Il1dLG5nQ29udGVudFNlbGVjdG9yczp0MWUsZGVjbHM6Nyx2YXJzOjksY29uc3RzOltbImNsYXNzIiwiZXhwYW5kLWNvbGxhcHNlZC1zaWRlYmFyIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xhc3MiLCJzaWRlYmFyIiwzLCJ3aWR0aCIsIm1pbldpZHRoIiwibWF4V2lkdGgiLDQsIm5nSWYiXSxbImNsYXNzIiwicmVzaXplciIsMywibW91c2Vkb3duIiw0LCJuZ0lmIl0sWzEsImV4cGFuZC1jb2xsYXBzZWQtc2lkZWJhciIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJleHBhbmRfbW9yZV8yNHB4Il0sWzEsInNpZGViYXIiXSxbMSwiZnVsbC1zY3JlZW4tdG9nZ2xlIiwzLCJuZ0NsYXNzIl0sWyJtYXQtYnV0dG9uIiwiIiwxLCJmdWxsLXNjcmVlbi1idG4iLDMsIm5nQ2xhc3MiLCJjbGljayJdLFsxLCJleHBhbmQtY29sbGFwc2UtaWNvbiIsMywic3ZnSWNvbiJdLFsxLCJyZXNpemVyIiwzLCJtb3VzZWRvd24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihmbihlMWUpLFMoMCxaU2UsMiwwLCJidXR0b24iLDApLFUoMSwiYXN5bmMiKSxTKDIsSlNlLDEwLDIxLCJuYXYiLDEpLFUoMywiYXN5bmMiKSxTKDQsJFNlLDEsMCwiZGl2IiwyKSxVKDUsImFzeW5jIiksVHQoNikpLDImZSYmKGIoIm5nSWYiLDA9PT1HKDEsMyxpLndpZHRoJCkpLHYoMiksYigibmdJZiIsRygzLDUsaS53aWR0aCQpPjApLHYoMiksYigibmdJZiIsRyg1LDcsaS53aWR0aCQpPjApKX0sZGVwZW5kZW5jaWVzOlt3bixOZSxibixraSxjdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7cG9zaXRpb246cmVsYXRpdmV9LnNpZGViYXJbX25nY29udGVudC0lQ09NUCVde21heC13aWR0aDo4MHZ3O3Bvc2l0aW9uOnJlbGF0aXZlfS5yZXNpemVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmV4cGFuZC1jb2xsYXBzZWQtc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWNvbG9yOiNlYmViZWI7Ym94LXNpemluZzpib3JkZXItYm94O2ZsZXg6MCAwO2p1c3RpZnktc2VsZjpzdHJldGNofWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5yZXNpemVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnJlc2l6ZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1jb2xvcjojNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5leHBhbmQtY29sbGFwc2VkLXNpZGViYXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZXhwYW5kLWNvbGxhcHNlZC1zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6IzU1NX0uZXhwYW5kLWNvbGxhcHNlZC1zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoyMHB4O2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMCk7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDowIDFweCAwIDA7Y29sb3I6aW5oZXJpdDtjb250YWluOmNvbnRlbnQ7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2p1c3RpZnktc2VsZjpzdHJldGNoO3BhZGRpbmc6MH0uZXhwYW5kLWNvbGxhcHNlZC1zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06cm90YXRlKC05MGRlZyk7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXJ9LnJlc2l6ZXJbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjAgMnB4O2N1cnNvcjpldy1yZXNpemU7Y29udGFpbjpzdHJpY3Q7ZGlzcGxheTpmbGV4O2p1c3RpZnktc2VsZjpzdHJldGNofS5yZXNpemVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0ucmVzaXplcltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7Ym9yZGVyLWNvbG9yOiNjY2M7b3V0bGluZTozcHggc29saWQgI2NjYzt6LWluZGV4OjF9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnJlc2l6ZXJbX25nY29udGVudC0lQ09NUCVdOmhvdmVyLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAucmVzaXplcltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7b3V0bGluZS1jb2xvcjojNzc3O2JvcmRlci1jb2xvcjojNzc3fS5mdWxsLXNjcmVlbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MDtwb3NpdGlvbjphYnNvbHV0ZTtoZWlnaHQ6MTAwJTtsZWZ0OmNhbGMoMTAwJSArIDJweCk7dG9wOjA7ei1pbmRleDoxO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9LmZ1bGwtc2NyZWVuLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7b3BhY2l0eTouOH0uZnVsbC1zY3JlZW4tdG9nZ2xlLmZ1bGwtc2NyZWVuW19uZ2NvbnRlbnQtJUNPTVAlXXtsZWZ0OnVuc2V0O3JpZ2h0OjB9LmZ1bGwtc2NyZWVuLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV0gICAuZnVsbC1zY3JlZW4tYnRuW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOmdyYXk7cGFkZGluZzowO21pbi13aWR0aDoyMHB4O3dpZHRoOjIwcHh9LmZ1bGwtc2NyZWVuLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV0gICAuZnVsbC1zY3JlZW4tYnRuLmV4cGFuZFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJhZGl1czowIDIwcHggMjBweCAwfS5mdWxsLXNjcmVlbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVdICAgLmZ1bGwtc2NyZWVuLWJ0bi5jb2xsYXBzZVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJhZGl1czoyMHB4IDAgMCAyMHB4fS5mdWxsLXNjcmVlbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVdICAgLmZ1bGwtc2NyZWVuLWJ0bltfbmdjb250ZW50LSVDT01QJV0gICAuZXhwYW5kLWNvbGxhcHNlLWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4O21hcmdpbi1yaWdodDowfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksVE49bmV3IFdlYWtNYXAseXk9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnJvb3Q9dCx0aGlzLmJ1ZmZlcj1lLHRoaXMuZGVzdHJveWVkVGFyZ2V0cz1uZXcgV2Vha1NldH1pbml0aWFsaXplKHQpe2lmKHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIpcmV0dXJuO3RoaXMuaW50ZXJzZWN0aW9uQ2FsbGJhY2s9dDtsZXQgZT17dGhyZXNob2xkOjAscm9vdDp0aGlzLnJvb3Q/P251bGx9O3RoaXMuYnVmZmVyJiYoZS5yb290TWFyZ2luPXRoaXMuYnVmZmVyKSx0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcih0aGlzLm9uQ2FyZEludGVyc2VjdGlvbi5iaW5kKHRoaXMpLGUpfWFkZCh0KXt0aGlzLmVuc3VyZUluaXRpYWxpemVkKCkmJnRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSh0KX13aWxsRGVzdHJveSh0KXt0aGlzLmVuc3VyZUluaXRpYWxpemVkKCkmJnRoaXMuZGVzdHJveWVkVGFyZ2V0cy5hZGQodCl9ZW5zdXJlSW5pdGlhbGl6ZWQoKXtpZighdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlcil0aHJvdyBuZXcgRXJyb3IoIkNhcmRPYnNlcnZlciBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UiKTtyZXR1cm4hMH1vbkNhcmRJbnRlcnNlY3Rpb24odCl7dC5zb3J0KChyLG8pPT5yLnRpbWUtby50aW1lKTtsZXQgZT1uZXcgU2V0LGk9bmV3IFNldDtmb3IobGV0e2lzSW50ZXJzZWN0aW5nOnIsdGFyZ2V0Om99b2YgdClyPyhlLmFkZChvKSxpLmRlbGV0ZShvKSk6KGUuZGVsZXRlKG8pLGkuYWRkKG8pKSx0aGlzLmRlc3Ryb3llZFRhcmdldHMuaGFzKG8pJiYhciYmKHRoaXMuZGVzdHJveWVkVGFyZ2V0cy5kZWxldGUobyksdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci51bm9ic2VydmUobykpO3RoaXMuaW50ZXJzZWN0aW9uQ2FsbGJhY2soZSxpKX1vbkNhcmRJbnRlcnNlY3Rpb25Gb3JUZXN0KHQpe3RoaXMub25DYXJkSW50ZXJzZWN0aW9uKHQpfX0sYlE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuaG9zdD1lLHRoaXMuc3RvcmU9aX1vbkNhcmRJbnRlcnNlY3Rpb24oZSxpKXtsZXQgcj1bLi4uZV0ubWFwKGE9PntsZXQgcz1UTi5nZXQoYSk7aWYoIXMpdGhyb3cgbmV3IEVycm9yKCJBIENhcmRPYnNlcnZlciBlbGVtZW50IG11c3QgaGF2ZSBhbiBhc3NvY2lhdGVkIGVsZW1lbnQgaWQgYW5kIGNhcmQgaWQuIik7cmV0dXJue2VsZW1lbnRJZDpzLmVsZW1lbnRJZCxjYXJkSWQ6cy5jYXJkSWR9fSksbz1bLi4uaV0ubWFwKGE9PntsZXQgcz1UTi5nZXQoYSk7aWYoIXMpdGhyb3cgbmV3IEVycm9yKCJBIENhcmRPYnNlcnZlciBlbGVtZW50IG11c3QgaGF2ZSBhbiBhc3NvY2lhdGVkIGVsZW1lbnQgaWQgYW5kIGNhcmQgaWQuIik7cmV0dXJue2VsZW1lbnRJZDpzLmVsZW1lbnRJZCxjYXJkSWQ6cy5jYXJkSWR9fSk7dGhpcy5zdG9yZS5kaXNwYXRjaChVZyh7ZW50ZXJlZENhcmRzOnIsZXhpdGVkQ2FyZHM6b30pKX1uZ09uSW5pdCgpe2xldCBlPXRoaXMuaG9zdC5uYXRpdmVFbGVtZW50O1ROLnNldChlLHtlbGVtZW50SWQ6KG1RKyssU3ltYm9sKG1RKSksY2FyZElkOnRoaXMuY2FyZElkfSksdGhpcy5jYXJkT2JzZXJ2ZXJ8fCh0aGlzLmNhcmRPYnNlcnZlcj1uZXcgeXkpLHRoaXMuY2FyZE9ic2VydmVyLmluaXRpYWxpemUodGhpcy5vbkNhcmRJbnRlcnNlY3Rpb24uYmluZCh0aGlzKSksdGhpcy5jYXJkT2JzZXJ2ZXIuYWRkKGUpfW5nT25EZXN0cm95KCl7dGhpcy5jYXJkT2JzZXJ2ZXImJnRoaXMuY2FyZE9ic2VydmVyLndpbGxEZXN0cm95KHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50KX1ob3N0Rm9yVGVzdCgpe3JldHVybiB0aGlzLmhvc3R9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoeGUpLEMoSWUpKX0sbi5cdTAyNzVkaXI9TWUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2FyZExhenlMb2FkZXIiLCIiXV0saW5wdXRzOntjYXJkSWQ6WyJjYXJkTGF6eUxvYWRlciIsImNhcmRJZCJdLGNhcmRPYnNlcnZlcjoiY2FyZE9ic2VydmVyIn19KSxufSkoKTtmdW5jdGlvbiByMWUobix0KXsxJm4mJihHdCgwKSxUdCgxKSxXdCgpKX12YXIgbzFlPVsiKiJdLHZRPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnZpZXdDb250YWluZXJSZWY9ZSx0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1pfW5nT25Jbml0KCl7aWYodGhpcy5jdXN0b21pemFibGVDb21wb25lbnQpe2xldCBlPXRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHRoaXMuY3VzdG9taXphYmxlQ29tcG9uZW50LmNvbnN0cnVjdG9yKTt0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGUpfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhlaSksQyhobykpfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLWN1c3RvbWl6YXRpb24iXV0saW5wdXRzOntjdXN0b21pemFibGVDb21wb25lbnQ6ImN1c3RvbWl6YWJsZUNvbXBvbmVudCJ9LG5nQ29udGVudFNlbGVjdG9yczpvMWUsZGVjbHM6MSx2YXJzOjEsY29uc3RzOltbNCwibmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGZuKCksUygwLHIxZSwyLDAsIm5nLWNvbnRhaW5lciIsMCkpLDImZSYmYigibmdJZiIsIWkuY3VzdG9taXphYmxlQ29tcG9uZW50KX0sZGVwZW5kZW5jaWVzOltOZV0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksczFlPVsiYnV0dG9uIl0sbDFlPVsiKiJdLHlRPW5ldyB0ZSgiTUFUX0JVVFRPTl9UT0dHTEVfREVGQVVMVF9PUFRJT05TIikseFE9bmV3IHRlKCJNYXRCdXR0b25Ub2dnbGVHcm91cCIpLGMxZT17cHJvdmlkZTpYcix1c2VFeGlzdGluZzpXbigoKT0+RE4pLG11bHRpOiEwfSxDUT0wLHpUPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5zb3VyY2U9dCx0aGlzLnZhbHVlPWV9fSxETj0oKCk9PntjbGFzcyBue2dldCBuYW1lKCl7cmV0dXJuIHRoaXMuX25hbWV9c2V0IG5hbWUoZSl7dGhpcy5fbmFtZT1lLHRoaXMuX21hcmtCdXR0b25zRm9yQ2hlY2soKX1nZXQgdmVydGljYWwoKXtyZXR1cm4gdGhpcy5fdmVydGljYWx9c2V0IHZlcnRpY2FsKGUpe3RoaXMuX3ZlcnRpY2FsPXZ0KGUpfWdldCB2YWx1ZSgpe2xldCBlPXRoaXMuX3NlbGVjdGlvbk1vZGVsP3RoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkOltdO3JldHVybiB0aGlzLm11bHRpcGxlP2UubWFwKGk9PmkudmFsdWUpOmVbMF0/ZVswXS52YWx1ZTp2b2lkIDB9c2V0IHZhbHVlKGUpe3RoaXMuX3NldFNlbGVjdGlvbkJ5VmFsdWUoZSksdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpfWdldCBzZWxlY3RlZCgpe2xldCBlPXRoaXMuX3NlbGVjdGlvbk1vZGVsP3RoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkOltdO3JldHVybiB0aGlzLm11bHRpcGxlP2U6ZVswXXx8bnVsbH1nZXQgbXVsdGlwbGUoKXtyZXR1cm4gdGhpcy5fbXVsdGlwbGV9c2V0IG11bHRpcGxlKGUpe3RoaXMuX211bHRpcGxlPXZ0KGUpLHRoaXMuX21hcmtCdXR0b25zRm9yQ2hlY2soKX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9c2V0IGRpc2FibGVkKGUpe3RoaXMuX2Rpc2FibGVkPXZ0KGUpLHRoaXMuX21hcmtCdXR0b25zRm9yQ2hlY2soKX1jb25zdHJ1Y3RvcihlLGkpe3RoaXMuX2NoYW5nZURldGVjdG9yPWUsdGhpcy5fdmVydGljYWw9ITEsdGhpcy5fbXVsdGlwbGU9ITEsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5fY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbj0oKT0+e30sdGhpcy5fb25Ub3VjaGVkPSgpPT57fSx0aGlzLl9uYW1lPSJtYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC0iK0NRKyssdGhpcy52YWx1ZUNoYW5nZT1uZXcgRix0aGlzLmNoYW5nZT1uZXcgRix0aGlzLmFwcGVhcmFuY2U9aSYmaS5hcHBlYXJhbmNlP2kuYXBwZWFyYW5jZToic3RhbmRhcmQifW5nT25Jbml0KCl7dGhpcy5fc2VsZWN0aW9uTW9kZWw9bmV3IGZnKHRoaXMubXVsdGlwbGUsdm9pZCAwLCExKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoLi4udGhpcy5fYnV0dG9uVG9nZ2xlcy5maWx0ZXIoZT0+ZS5jaGVja2VkKSl9d3JpdGVWYWx1ZShlKXt0aGlzLnZhbHVlPWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5fb25Ub3VjaGVkPWV9c2V0RGlzYWJsZWRTdGF0ZShlKXt0aGlzLmRpc2FibGVkPWV9X2VtaXRDaGFuZ2VFdmVudChlKXtsZXQgaT1uZXcgelQoZSx0aGlzLnZhbHVlKTt0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuKGkudmFsdWUpLHRoaXMuY2hhbmdlLmVtaXQoaSl9X3N5bmNCdXR0b25Ub2dnbGUoZSxpLHI9ITEsbz0hMSl7IXRoaXMubXVsdGlwbGUmJnRoaXMuc2VsZWN0ZWQmJiFlLmNoZWNrZWQmJih0aGlzLnNlbGVjdGVkLmNoZWNrZWQ9ITEpLHRoaXMuX3NlbGVjdGlvbk1vZGVsP2k/dGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGUpOnRoaXMuX3NlbGVjdGlvbk1vZGVsLmRlc2VsZWN0KGUpOm89ITAsbz9Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT50aGlzLl91cGRhdGVNb2RlbFZhbHVlKGUscikpOnRoaXMuX3VwZGF0ZU1vZGVsVmFsdWUoZSxyKX1faXNTZWxlY3RlZChlKXtyZXR1cm4gdGhpcy5fc2VsZWN0aW9uTW9kZWwmJnRoaXMuX3NlbGVjdGlvbk1vZGVsLmlzU2VsZWN0ZWQoZSl9X2lzUHJlY2hlY2tlZChlKXtyZXR1cm4hKHR5cGVvZiB0aGlzLl9yYXdWYWx1ZT4idSIpJiYodGhpcy5tdWx0aXBsZSYmQXJyYXkuaXNBcnJheSh0aGlzLl9yYXdWYWx1ZSk/dGhpcy5fcmF3VmFsdWUuc29tZShpPT5udWxsIT1lLnZhbHVlJiZpPT09ZS52YWx1ZSk6ZS52YWx1ZT09PXRoaXMuX3Jhd1ZhbHVlKX1fc2V0U2VsZWN0aW9uQnlWYWx1ZShlKXt0aGlzLl9yYXdWYWx1ZT1lLHRoaXMuX2J1dHRvblRvZ2dsZXMmJih0aGlzLm11bHRpcGxlJiZlPyhBcnJheS5pc0FycmF5KGUpLHRoaXMuX2NsZWFyU2VsZWN0aW9uKCksZS5mb3JFYWNoKGk9PnRoaXMuX3NlbGVjdFZhbHVlKGkpKSk6KHRoaXMuX2NsZWFyU2VsZWN0aW9uKCksdGhpcy5fc2VsZWN0VmFsdWUoZSkpKX1fY2xlYXJTZWxlY3Rpb24oKXt0aGlzLl9zZWxlY3Rpb25Nb2RlbC5jbGVhcigpLHRoaXMuX2J1dHRvblRvZ2dsZXMuZm9yRWFjaChlPT5lLmNoZWNrZWQ9ITEpfV9zZWxlY3RWYWx1ZShlKXtsZXQgaT10aGlzLl9idXR0b25Ub2dnbGVzLmZpbmQocj0+bnVsbCE9ci52YWx1ZSYmci52YWx1ZT09PWUpO2kmJihpLmNoZWNrZWQ9ITAsdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGkpKX1fdXBkYXRlTW9kZWxWYWx1ZShlLGkpe2kmJnRoaXMuX2VtaXRDaGFuZ2VFdmVudChlKSx0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSl9X21hcmtCdXR0b25zRm9yQ2hlY2soKXt0aGlzLl9idXR0b25Ub2dnbGVzPy5mb3JFYWNoKGU9PmUuX21hcmtGb3JDaGVjaygpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhRdCksQyh5USw4KSl9LG4uXHUwMjc1ZGlyPU1lKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGUsaSxyKXtpZigxJmUmJkJuKHIsdTFlLDUpLDImZSl7bGV0IG87YmUobz12ZSgpKSYmKGkuX2J1dHRvblRvZ2dsZXM9byl9fSxob3N0QXR0cnM6WyJyb2xlIiwiZ3JvdXAiLDEsIm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIl0saG9zdFZhcnM6NSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJihCZSgiYXJpYS1kaXNhYmxlZCIsaS5kaXNhYmxlZCksbnQoIm1hdC1idXR0b24tdG9nZ2xlLXZlcnRpY2FsIixpLnZlcnRpY2FsKSgibWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZCIsInN0YW5kYXJkIj09PWkuYXBwZWFyYW5jZSkpfSxpbnB1dHM6e2FwcGVhcmFuY2U6ImFwcGVhcmFuY2UiLG5hbWU6Im5hbWUiLHZlcnRpY2FsOiJ2ZXJ0aWNhbCIsdmFsdWU6InZhbHVlIixtdWx0aXBsZToibXVsdGlwbGUiLGRpc2FibGVkOiJkaXNhYmxlZCJ9LG91dHB1dHM6e3ZhbHVlQ2hhbmdlOiJ2YWx1ZUNoYW5nZSIsY2hhbmdlOiJjaGFuZ2UifSxleHBvcnRBczpbIm1hdEJ1dHRvblRvZ2dsZUdyb3VwIl0sZmVhdHVyZXM6W1Z0KFtjMWUse3Byb3ZpZGU6eFEsdXNlRXhpc3Rpbmc6bn1dKV19KSxufSkoKSxkMWU9Z28oY2xhc3N7fSksdTFlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBkMWV7Z2V0IGJ1dHRvbklkKCl7cmV0dXJuYCR7dGhpcy5pZH0tYnV0dG9uYH1nZXQgYXBwZWFyYW5jZSgpe3JldHVybiB0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwP3RoaXMuYnV0dG9uVG9nZ2xlR3JvdXAuYXBwZWFyYW5jZTp0aGlzLl9hcHBlYXJhbmNlfXNldCBhcHBlYXJhbmNlKGUpe3RoaXMuX2FwcGVhcmFuY2U9ZX1nZXQgY2hlY2tlZCgpe3JldHVybiB0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwP3RoaXMuYnV0dG9uVG9nZ2xlR3JvdXAuX2lzU2VsZWN0ZWQodGhpcyk6dGhpcy5fY2hlY2tlZH1zZXQgY2hlY2tlZChlKXtsZXQgaT12dChlKTtpIT09dGhpcy5fY2hlY2tlZCYmKHRoaXMuX2NoZWNrZWQ9aSx0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwJiZ0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwLl9zeW5jQnV0dG9uVG9nZ2xlKHRoaXMsdGhpcy5fY2hlY2tlZCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZHx8dGhpcy5idXR0b25Ub2dnbGVHcm91cCYmdGhpcy5idXR0b25Ub2dnbGVHcm91cC5kaXNhYmxlZH1zZXQgZGlzYWJsZWQoZSl7dGhpcy5fZGlzYWJsZWQ9dnQoZSl9Y29uc3RydWN0b3IoZSxpLHIsbyxhLHMpe3N1cGVyKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9aSx0aGlzLl9lbGVtZW50UmVmPXIsdGhpcy5fZm9jdXNNb25pdG9yPW8sdGhpcy5fY2hlY2tlZD0hMSx0aGlzLmFyaWFMYWJlbGxlZGJ5PW51bGwsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5jaGFuZ2U9bmV3IEY7bGV0IGw9TnVtYmVyKGEpO3RoaXMudGFiSW5kZXg9bHx8MD09PWw/bDpudWxsLHRoaXMuYnV0dG9uVG9nZ2xlR3JvdXA9ZSx0aGlzLmFwcGVhcmFuY2U9cyYmcy5hcHBlYXJhbmNlP3MuYXBwZWFyYW5jZToic3RhbmRhcmQifW5nT25Jbml0KCl7bGV0IGU9dGhpcy5idXR0b25Ub2dnbGVHcm91cDt0aGlzLmlkPXRoaXMuaWR8fCJtYXQtYnV0dG9uLXRvZ2dsZS0iK0NRKyssZSYmKGUuX2lzUHJlY2hlY2tlZCh0aGlzKT90aGlzLmNoZWNrZWQ9ITA6ZS5faXNTZWxlY3RlZCh0aGlzKSE9PXRoaXMuX2NoZWNrZWQmJmUuX3N5bmNCdXR0b25Ub2dnbGUodGhpcyx0aGlzLl9jaGVja2VkKSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IodGhpcy5fZWxlbWVudFJlZiwhMCl9bmdPbkRlc3Ryb3koKXtsZXQgZT10aGlzLmJ1dHRvblRvZ2dsZUdyb3VwO3RoaXMuX2ZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmKSxlJiZlLl9pc1NlbGVjdGVkKHRoaXMpJiZlLl9zeW5jQnV0dG9uVG9nZ2xlKHRoaXMsITEsITEsITApfWZvY3VzKGUpe3RoaXMuX2J1dHRvbkVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cyhlKX1fb25CdXR0b25DbGljaygpe2xldCBlPSEhdGhpcy5faXNTaW5nbGVTZWxlY3RvcigpfHwhdGhpcy5fY2hlY2tlZDtlIT09dGhpcy5fY2hlY2tlZCYmKHRoaXMuX2NoZWNrZWQ9ZSx0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwJiYodGhpcy5idXR0b25Ub2dnbGVHcm91cC5fc3luY0J1dHRvblRvZ2dsZSh0aGlzLHRoaXMuX2NoZWNrZWQsITApLHRoaXMuYnV0dG9uVG9nZ2xlR3JvdXAuX29uVG91Y2hlZCgpKSksdGhpcy5jaGFuZ2UuZW1pdChuZXcgelQodGhpcyx0aGlzLnZhbHVlKSl9X21hcmtGb3JDaGVjaygpe3RoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfV9nZXRCdXR0b25OYW1lKCl7cmV0dXJuIHRoaXMuX2lzU2luZ2xlU2VsZWN0b3IoKT90aGlzLmJ1dHRvblRvZ2dsZUdyb3VwLm5hbWU6dGhpcy5uYW1lfHxudWxsfV9pc1NpbmdsZVNlbGVjdG9yKCl7cmV0dXJuIHRoaXMuYnV0dG9uVG9nZ2xlR3JvdXAmJiF0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwLm11bHRpcGxlfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKHhRLDgpLEMoUXQpLEMoeGUpLEMoZm8pLE1vKCJ0YWJpbmRleCIpLEMoeVEsOCkpfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1idXR0b24tdG9nZ2xlIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmVWUoczFlLDUpLDImZSl7bGV0IHI7YmUocj12ZSgpKSYmKGkuX2J1dHRvbkVsZW1lbnQ9ci5maXJzdCl9fSxob3N0QXR0cnM6WyJyb2xlIiwicHJlc2VudGF0aW9uIiwxLCJtYXQtYnV0dG9uLXRvZ2dsZSJdLGhvc3RWYXJzOjEyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmQSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuZm9jdXMoKX0pLDImZSYmKEJlKCJhcmlhLWxhYmVsIixudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixudWxsKSgiaWQiLGkuaWQpKCJuYW1lIixudWxsKSxudCgibWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZSIsIWkuYnV0dG9uVG9nZ2xlR3JvdXApKCJtYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2VkIixpLmNoZWNrZWQpKCJtYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZCIsaS5kaXNhYmxlZCkoIm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQiLCJzdGFuZGFyZCI9PT1pLmFwcGVhcmFuY2UpKX0saW5wdXRzOntkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIixhcmlhTGFiZWw6WyJhcmlhLWxhYmVsIiwiYXJpYUxhYmVsIl0sYXJpYUxhYmVsbGVkYnk6WyJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhTGFiZWxsZWRieSJdLGlkOiJpZCIsbmFtZToibmFtZSIsdmFsdWU6InZhbHVlIix0YWJJbmRleDoidGFiSW5kZXgiLGFwcGVhcmFuY2U6ImFwcGVhcmFuY2UiLGNoZWNrZWQ6ImNoZWNrZWQiLGRpc2FibGVkOiJkaXNhYmxlZCJ9LG91dHB1dHM6e2NoYW5nZToiY2hhbmdlIn0sZXhwb3J0QXM6WyJtYXRCdXR0b25Ub2dnbGUiXSxmZWF0dXJlczpbWGVdLG5nQ29udGVudFNlbGVjdG9yczpsMWUsZGVjbHM6Nix2YXJzOjksY29uc3RzOltbInR5cGUiLCJidXR0b24iLDEsIm1hdC1idXR0b24tdG9nZ2xlLWJ1dHRvbiIsIm1hdC1mb2N1cy1pbmRpY2F0b3IiLDMsImlkIiwiZGlzYWJsZWQiLCJjbGljayJdLFsiYnV0dG9uIiwiIl0sWzEsIm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnQiXSxbMSwibWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheSJdLFsibWF0UmlwcGxlIiwiIiwxLCJtYXQtYnV0dG9uLXRvZ2dsZS1yaXBwbGUiLDMsIm1hdFJpcHBsZVRyaWdnZXIiLCJtYXRSaXBwbGVEaXNhYmxlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGZuKCksZigwLCJidXR0b24iLDAsMSksQSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uQnV0dG9uQ2xpY2soKX0pLGYoMiwic3BhbiIsMiksVHQoMyksZygpKCksayg0LCJzcGFuIiwzKSg1LCJzcGFuIiw0KSksMiZlKXtsZXQgcj1zdCgxKTtiKCJpZCIsaS5idXR0b25JZCkoImRpc2FibGVkIixpLmRpc2FibGVkfHxudWxsKSxCZSgidGFiaW5kZXgiLGkuZGlzYWJsZWQ/LTE6aS50YWJJbmRleCkoImFyaWEtcHJlc3NlZCIsaS5jaGVja2VkKSgibmFtZSIsaS5fZ2V0QnV0dG9uTmFtZSgpKSgiYXJpYS1sYWJlbCIsaS5hcmlhTGFiZWwpKCJhcmlhLWxhYmVsbGVkYnkiLGkuYXJpYUxhYmVsbGVkYnkpLHYoNSksYigibWF0UmlwcGxlVHJpZ2dlciIscikoIm1hdFJpcHBsZURpc2FibGVkIixpLmRpc2FibGVSaXBwbGV8fGkuZGlzYWJsZWQpfX0sZGVwZW5kZW5jaWVzOltLaV0sc3R5bGVzOlsiLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUsLm1hdC1idXR0b24tdG9nZ2xlLWdyb3Vwe3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWZsZXg7ZmxleC1kaXJlY3Rpb246cm93O3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47Ym9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZSwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cHtvdXRsaW5lOnNvbGlkIDFweH0ubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJke2JvcmRlci1yYWRpdXM6NHB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJke291dGxpbmU6MH0ubWF0LWJ1dHRvbi10b2dnbGUtdmVydGljYWx7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5tYXQtYnV0dG9uLXRvZ2dsZS12ZXJ0aWNhbCAubWF0LWJ1dHRvbi10b2dnbGUtbGFiZWwtY29udGVudHtkaXNwbGF5OmJsb2NrfS5tYXQtYnV0dG9uLXRvZ2dsZXt3aGl0ZS1zcGFjZTpub3dyYXA7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1idXR0b24tdG9nZ2xlIC5tYXQtaWNvbiBzdmd7dmVydGljYWwtYWxpZ246dG9wfS5tYXQtYnV0dG9uLXRvZ2dsZS5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjF9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQ6bm90KC5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZCk6aG92ZXIgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMDR9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZCkgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMTJ9QG1lZGlhKGhvdmVyOiBub25lKXsubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZDpub3QoLm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkKTpob3ZlciAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtkaXNwbGF5Om5vbmV9fS5tYXQtYnV0dG9uLXRvZ2dsZS1sYWJlbC1jb250ZW50ey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnR7cGFkZGluZzowIDEycHh9Lm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnQ+Knt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czppbmhlcml0O3BvaW50ZXItZXZlbnRzOm5vbmU7b3BhY2l0eTowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWQgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7Ym9yZGVyLWJvdHRvbTpzb2xpZCAzNnB4O29wYWNpdHk6LjU7aGVpZ2h0OjB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZDpob3ZlciAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi42fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWQubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtib3JkZXItYm90dG9tOnNvbGlkIDUwMHB4fS5tYXQtYnV0dG9uLXRvZ2dsZSAubWF0LWJ1dHRvbi10b2dnbGUtcmlwcGxle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1hdC1idXR0b24tdG9nZ2xlLWJ1dHRvbntib3JkZXI6MDtiYWNrZ3JvdW5kOm5vbmU7Y29sb3I6aW5oZXJpdDtwYWRkaW5nOjA7bWFyZ2luOjA7Zm9udDppbmhlcml0O291dGxpbmU6bm9uZTt3aWR0aDoxMDAlO2N1cnNvcjpwb2ludGVyfS5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZCAubWF0LWJ1dHRvbi10b2dnbGUtYnV0dG9ue2N1cnNvcjpkZWZhdWx0fS5tYXQtYnV0dG9uLXRvZ2dsZS1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksVVQ9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe2ltcG9ydHM6W2RuLF9hLGRuXX0pLG59KSgpLGgxZT1bImRldGVybWluYXRlU3Bpbm5lciJdO2Z1bmN0aW9uIG0xZShuLHQpe2lmKDEmbiYmKHFuKCksZigwLCJzdmciLDExKSxrKDEsImNpcmNsZSIsMTIpLGcoKSksMiZuKXtsZXQgZT13KCk7QmUoInZpZXdCb3giLGUuX3ZpZXdCb3goKSksdigxKSxCdCgic3Ryb2tlLWRhc2hhcnJheSIsZS5fc3Ryb2tlQ2lyY3VtZmVyZW5jZSgpLCJweCIpKCJzdHJva2UtZGFzaG9mZnNldCIsZS5fc3Ryb2tlQ2lyY3VtZmVyZW5jZSgpLzIsInB4IikoInN0cm9rZS13aWR0aCIsZS5fY2lyY2xlU3Ryb2tlV2lkdGgoKSwiJSIpLEJlKCJyIixlLl9jaXJjbGVSYWRpdXMoKSl9fXZhciBmMWU9S28oY2xhc3N7Y29uc3RydWN0b3Iobil7dGhpcy5fZWxlbWVudFJlZj1ufX0sInByaW1hcnkiKSxnMWU9bmV3IHRlKCJtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1kZWZhdWx0LW9wdGlvbnMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJue2RpYW1ldGVyOk1RfX19KSxNUT0xMDAsTmM9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGYxZXtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoZSksdGhpcy5tb2RlPSJtYXQtc3Bpbm5lciI9PT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKT8iaW5kZXRlcm1pbmF0ZSI6ImRldGVybWluYXRlIix0aGlzLl92YWx1ZT0wLHRoaXMuX2RpYW1ldGVyPU1RLHRoaXMuX25vb3BBbmltYXRpb25zPSJOb29wQW5pbWF0aW9ucyI9PT1pJiYhIXImJiFyLl9mb3JjZUFuaW1hdGlvbnMsciYmKHIuY29sb3ImJih0aGlzLmNvbG9yPXRoaXMuZGVmYXVsdENvbG9yPXIuY29sb3IpLHIuZGlhbWV0ZXImJih0aGlzLmRpYW1ldGVyPXIuZGlhbWV0ZXIpLHIuc3Ryb2tlV2lkdGgmJih0aGlzLnN0cm9rZVdpZHRoPXIuc3Ryb2tlV2lkdGgpKX1nZXQgdmFsdWUoKXtyZXR1cm4iZGV0ZXJtaW5hdGUiPT09dGhpcy5tb2RlP3RoaXMuX3ZhbHVlOjB9c2V0IHZhbHVlKGUpe3RoaXMuX3ZhbHVlPU1hdGgubWF4KDAsTWF0aC5taW4oMTAwLG1pKGUpKSl9Z2V0IGRpYW1ldGVyKCl7cmV0dXJuIHRoaXMuX2RpYW1ldGVyfXNldCBkaWFtZXRlcihlKXt0aGlzLl9kaWFtZXRlcj1taShlKX1nZXQgc3Ryb2tlV2lkdGgoKXtyZXR1cm4gdGhpcy5fc3Ryb2tlV2lkdGg/P3RoaXMuZGlhbWV0ZXIvMTB9c2V0IHN0cm9rZVdpZHRoKGUpe3RoaXMuX3N0cm9rZVdpZHRoPW1pKGUpfV9jaXJjbGVSYWRpdXMoKXtyZXR1cm4odGhpcy5kaWFtZXRlci0xMCkvMn1fdmlld0JveCgpe2xldCBlPTIqdGhpcy5fY2lyY2xlUmFkaXVzKCkrdGhpcy5zdHJva2VXaWR0aDtyZXR1cm5gMCAwICR7ZX0gJHtlfWB9X3N0cm9rZUNpcmN1bWZlcmVuY2UoKXtyZXR1cm4gMipNYXRoLlBJKnRoaXMuX2NpcmNsZVJhZGl1cygpfV9zdHJva2VEYXNoT2Zmc2V0KCl7cmV0dXJuImRldGVybWluYXRlIj09PXRoaXMubW9kZT90aGlzLl9zdHJva2VDaXJjdW1mZXJlbmNlKCkqKDEwMC10aGlzLl92YWx1ZSkvMTAwOm51bGx9X2NpcmNsZVN0cm9rZVdpZHRoKCl7cmV0dXJuIHRoaXMuc3Ryb2tlV2lkdGgvdGhpcy5kaWFtZXRlcioxMDB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoeGUpLEMocGksOCksQyhnMWUpKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciJdLFsibWF0LXNwaW5uZXIiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZVZShoMWUsNSksMiZlKXtsZXQgcjtiZShyPXZlKCkpJiYoaS5fZGV0ZXJtaW5hdGVDaXJjbGU9ci5maXJzdCl9fSxob3N0QXR0cnM6WyJyb2xlIiwicHJvZ3Jlc3NiYXIiLCJ0YWJpbmRleCIsIi0xIiwxLCJtYXQtbWRjLXByb2dyZXNzLXNwaW5uZXIiLCJtZGMtY2lyY3VsYXItcHJvZ3Jlc3MiXSxob3N0VmFyczoxMixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJihCZSgiYXJpYS12YWx1ZW1pbiIsMCkoImFyaWEtdmFsdWVtYXgiLDEwMCkoImFyaWEtdmFsdWVub3ciLCJkZXRlcm1pbmF0ZSI9PT1pLm1vZGU/aS52YWx1ZTpudWxsKSgibW9kZSIsaS5tb2RlKSxCdCgid2lkdGgiLGkuZGlhbWV0ZXIsInB4IikoImhlaWdodCIsaS5kaWFtZXRlciwicHgiKSxudCgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLGkuX25vb3BBbmltYXRpb25zKSgibWRjLWNpcmN1bGFyLXByb2dyZXNzLS1pbmRldGVybWluYXRlIiwiaW5kZXRlcm1pbmF0ZSI9PT1pLm1vZGUpKX0saW5wdXRzOntjb2xvcjoiY29sb3IiLG1vZGU6Im1vZGUiLHZhbHVlOiJ2YWx1ZSIsZGlhbWV0ZXI6ImRpYW1ldGVyIixzdHJva2VXaWR0aDoic3Ryb2tlV2lkdGgifSxleHBvcnRBczpbIm1hdFByb2dyZXNzU3Bpbm5lciJdLGZlYXR1cmVzOltYZV0sZGVjbHM6MTQsdmFyczoxMSxjb25zdHM6W1siY2lyY2xlIiwiIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1kYy1jaXJjdWxhci1wcm9ncmVzc19fZGV0ZXJtaW5hdGUtY29udGFpbmVyIl0sWyJkZXRlcm1pbmF0ZVNwaW5uZXIiLCIiXSxbInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJmb2N1c2FibGUiLCJmYWxzZSIsMSwibWRjLWNpcmN1bGFyLXByb2dyZXNzX19kZXRlcm1pbmF0ZS1jaXJjbGUtZ3JhcGhpYyJdLFsiY3giLCI1MCUiLCJjeSIsIjUwJSIsMSwibWRjLWNpcmN1bGFyLXByb2dyZXNzX19kZXRlcm1pbmF0ZS1jaXJjbGUiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibWRjLWNpcmN1bGFyLXByb2dyZXNzX19pbmRldGVybWluYXRlLWNvbnRhaW5lciJdLFsxLCJtZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX3NwaW5uZXItbGF5ZXIiXSxbMSwibWRjLWNpcmN1bGFyLXByb2dyZXNzX19jaXJjbGUtY2xpcHBlciIsIm1kYy1jaXJjdWxhci1wcm9ncmVzc19fY2lyY2xlLWxlZnQiXSxbMywibmdUZW1wbGF0ZU91dGxldCJdLFsxLCJtZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX2dhcC1wYXRjaCJdLFsxLCJtZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX2NpcmNsZS1jbGlwcGVyIiwibWRjLWNpcmN1bGFyLXByb2dyZXNzX19jaXJjbGUtcmlnaHQiXSxbInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJmb2N1c2FibGUiLCJmYWxzZSIsMSwibWRjLWNpcmN1bGFyLXByb2dyZXNzX19pbmRldGVybWluYXRlLWNpcmNsZS1ncmFwaGljIl0sWyJjeCIsIjUwJSIsImN5IiwiNTAlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoUygwLG0xZSwyLDgsIm5nLXRlbXBsYXRlIixudWxsLDAsanQpLGYoMiwiZGl2IiwxLDIpLHFuKCksZig0LCJzdmciLDMpLGsoNSwiY2lyY2xlIiw0KSxnKCkoKSx1YSgpLGYoNiwiZGl2Iiw1KSg3LCJkaXYiLDYpKDgsImRpdiIsNyksaGkoOSw4KSxnKCksZigxMCwiZGl2Iiw5KSxoaSgxMSw4KSxnKCksZigxMiwiZGl2IiwxMCksaGkoMTMsOCksZygpKCkoKSksMiZlKXtsZXQgcj1zdCgxKTt2KDQpLEJlKCJ2aWV3Qm94IixpLl92aWV3Qm94KCkpLHYoMSksQnQoInN0cm9rZS1kYXNoYXJyYXkiLGkuX3N0cm9rZUNpcmN1bWZlcmVuY2UoKSwicHgiKSgic3Ryb2tlLWRhc2hvZmZzZXQiLGkuX3N0cm9rZURhc2hPZmZzZXQoKSwicHgiKSgic3Ryb2tlLXdpZHRoIixpLl9jaXJjbGVTdHJva2VXaWR0aCgpLCIlIiksQmUoInIiLGkuX2NpcmNsZVJhZGl1cygpKSx2KDQpLGIoIm5nVGVtcGxhdGVPdXRsZXQiLHIpLHYoMiksYigibmdUZW1wbGF0ZU91dGxldCIsciksdigyKSxiKCJuZ1RlbXBsYXRlT3V0bGV0IixyKX19LGRlcGVuZGVuY2llczpbZW9dLHN0eWxlczpbIkBrZXlmcmFtZXMgbWRjLWNpcmN1bGFyLXByb2dyZXNzLWNvbnRhaW5lci1yb3RhdGV7dG97dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpfX1Aa2V5ZnJhbWVzIG1kYy1jaXJjdWxhci1wcm9ncmVzcy1zcGlubmVyLWxheWVyLXJvdGF0ZXsxMi41JXt0cmFuc2Zvcm06cm90YXRlKDEzNWRlZyl9MjUle3RyYW5zZm9ybTpyb3RhdGUoMjcwZGVnKX0zNy41JXt0cmFuc2Zvcm06cm90YXRlKDQwNWRlZyl9NTAle3RyYW5zZm9ybTpyb3RhdGUoNTQwZGVnKX02Mi41JXt0cmFuc2Zvcm06cm90YXRlKDY3NWRlZyl9NzUle3RyYW5zZm9ybTpyb3RhdGUoODEwZGVnKX04Ny41JXt0cmFuc2Zvcm06cm90YXRlKDk0NWRlZyl9MTAwJXt0cmFuc2Zvcm06cm90YXRlKDEwODBkZWcpfX1Aa2V5ZnJhbWVzIG1kYy1jaXJjdWxhci1wcm9ncmVzcy1jb2xvci0xLWZhZGUtaW4tb3V0e2Zyb217b3BhY2l0eTouOTl9MjUle29wYWNpdHk6Ljk5fTI2JXtvcGFjaXR5OjB9ODkle29wYWNpdHk6MH05MCV7b3BhY2l0eTouOTl9dG97b3BhY2l0eTouOTl9fUBrZXlmcmFtZXMgbWRjLWNpcmN1bGFyLXByb2dyZXNzLWNvbG9yLTItZmFkZS1pbi1vdXR7ZnJvbXtvcGFjaXR5OjB9MTUle29wYWNpdHk6MH0yNSV7b3BhY2l0eTouOTl9NTAle29wYWNpdHk6Ljk5fTUxJXtvcGFjaXR5OjB9dG97b3BhY2l0eTowfX1Aa2V5ZnJhbWVzIG1kYy1jaXJjdWxhci1wcm9ncmVzcy1jb2xvci0zLWZhZGUtaW4tb3V0e2Zyb217b3BhY2l0eTowfTQwJXtvcGFjaXR5OjB9NTAle29wYWNpdHk6Ljk5fTc1JXtvcGFjaXR5Oi45OX03NiV7b3BhY2l0eTowfXRve29wYWNpdHk6MH19QGtleWZyYW1lcyBtZGMtY2lyY3VsYXItcHJvZ3Jlc3MtY29sb3ItNC1mYWRlLWluLW91dHtmcm9te29wYWNpdHk6MH02NSV7b3BhY2l0eTowfTc1JXtvcGFjaXR5Oi45OX05MCV7b3BhY2l0eTouOTl9dG97b3BhY2l0eTowfX1Aa2V5ZnJhbWVzIG1kYy1jaXJjdWxhci1wcm9ncmVzcy1sZWZ0LXNwaW57ZnJvbXt0cmFuc2Zvcm06cm90YXRlKDI2NWRlZyl9NTAle3RyYW5zZm9ybTpyb3RhdGUoMTMwZGVnKX10b3t0cmFuc2Zvcm06cm90YXRlKDI2NWRlZyl9fUBrZXlmcmFtZXMgbWRjLWNpcmN1bGFyLXByb2dyZXNzLXJpZ2h0LXNwaW57ZnJvbXt0cmFuc2Zvcm06cm90YXRlKC0yNjVkZWcpfTUwJXt0cmFuc2Zvcm06cm90YXRlKC0xMzBkZWcpfXRve3RyYW5zZm9ybTpyb3RhdGUoLTI2NWRlZyl9fS5tZGMtY2lyY3VsYXItcHJvZ3Jlc3N7ZGlzcGxheTppbmxpbmUtZmxleDtwb3NpdGlvbjpyZWxhdGl2ZTtkaXJlY3Rpb246bHRyO2xpbmUtaGVpZ2h0OjA7dHJhbnNpdGlvbjpvcGFjaXR5IDI1MG1zIDBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpfS5tZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX2RldGVybWluYXRlLWNvbnRhaW5lciwubWRjLWNpcmN1bGFyLXByb2dyZXNzX19pbmRldGVybWluYXRlLWNpcmNsZS1ncmFwaGljLC5tZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX2luZGV0ZXJtaW5hdGUtY29udGFpbmVyLC5tZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX3NwaW5uZXItbGF5ZXJ7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJX0ubWRjLWNpcmN1bGFyLXByb2dyZXNzX19kZXRlcm1pbmF0ZS1jb250YWluZXJ7dHJhbnNmb3JtOnJvdGF0ZSgtOTBkZWcpfS5tZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX2luZGV0ZXJtaW5hdGUtY29udGFpbmVye2ZvbnQtc2l6ZTowO2xldHRlci1zcGFjaW5nOjA7d2hpdGUtc3BhY2U6bm93cmFwO29wYWNpdHk6MH0ubWRjLWNpcmN1bGFyLXByb2dyZXNzX19kZXRlcm1pbmF0ZS1jaXJjbGUtZ3JhcGhpYywubWRjLWNpcmN1bGFyLXByb2dyZXNzX19pbmRldGVybWluYXRlLWNpcmNsZS1ncmFwaGlje2ZpbGw6cmdiYSgwLDAsMCwwKX0ubWRjLWNpcmN1bGFyLXByb2dyZXNzX19kZXRlcm1pbmF0ZS1jaXJjbGV7dHJhbnNpdGlvbjpzdHJva2UtZGFzaG9mZnNldCA1MDBtcyAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSl9Lm1kYy1jaXJjdWxhci1wcm9ncmVzc19fZ2FwLXBhdGNoe3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6NDcuNSU7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjUlO2hlaWdodDoxMDAlO292ZXJmbG93OmhpZGRlbn0ubWRjLWNpcmN1bGFyLXByb2dyZXNzX19nYXAtcGF0Y2ggLm1kYy1jaXJjdWxhci1wcm9ncmVzc19faW5kZXRlcm1pbmF0ZS1jaXJjbGUtZ3JhcGhpY3tsZWZ0Oi05MDAlO3dpZHRoOjIwMDAlO3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX0ubWRjLWNpcmN1bGFyLXByb2dyZXNzX19jaXJjbGUtY2xpcHBlcntkaXNwbGF5OmlubGluZS1mbGV4O3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjUwJTtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59Lm1kYy1jaXJjdWxhci1wcm9ncmVzc19fY2lyY2xlLWNsaXBwZXIgLm1kYy1jaXJjdWxhci1wcm9ncmVzc19faW5kZXRlcm1pbmF0ZS1jaXJjbGUtZ3JhcGhpY3t3aWR0aDoyMDAlfS5tZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX2NpcmNsZS1yaWdodCAubWRjLWNpcmN1bGFyLXByb2dyZXNzX19pbmRldGVybWluYXRlLWNpcmNsZS1ncmFwaGlje2xlZnQ6LTEwMCV9Lm1kYy1jaXJjdWxhci1wcm9ncmVzcy0taW5kZXRlcm1pbmF0ZSAubWRjLWNpcmN1bGFyLXByb2dyZXNzX19kZXRlcm1pbmF0ZS1jb250YWluZXJ7b3BhY2l0eTowfS5tZGMtY2lyY3VsYXItcHJvZ3Jlc3MtLWluZGV0ZXJtaW5hdGUgLm1kYy1jaXJjdWxhci1wcm9ncmVzc19faW5kZXRlcm1pbmF0ZS1jb250YWluZXJ7b3BhY2l0eToxfS5tZGMtY2lyY3VsYXItcHJvZ3Jlc3MtLWluZGV0ZXJtaW5hdGUgLm1kYy1jaXJjdWxhci1wcm9ncmVzc19faW5kZXRlcm1pbmF0ZS1jb250YWluZXJ7YW5pbWF0aW9uOm1kYy1jaXJjdWxhci1wcm9ncmVzcy1jb250YWluZXItcm90YXRlIDE1NjguMjM1Mjk0MTE3Nm1zIGxpbmVhciBpbmZpbml0ZX0ubWRjLWNpcmN1bGFyLXByb2dyZXNzLS1pbmRldGVybWluYXRlIC5tZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX3NwaW5uZXItbGF5ZXJ7YW5pbWF0aW9uOm1kYy1jaXJjdWxhci1wcm9ncmVzcy1zcGlubmVyLWxheWVyLXJvdGF0ZSA1MzMybXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RofS5tZGMtY2lyY3VsYXItcHJvZ3Jlc3MtLWluZGV0ZXJtaW5hdGUgLm1kYy1jaXJjdWxhci1wcm9ncmVzc19fY29sb3ItMXthbmltYXRpb246bWRjLWNpcmN1bGFyLXByb2dyZXNzLXNwaW5uZXItbGF5ZXItcm90YXRlIDUzMzJtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIGluZmluaXRlIGJvdGgsbWRjLWNpcmN1bGFyLXByb2dyZXNzLWNvbG9yLTEtZmFkZS1pbi1vdXQgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUgYm90aH0ubWRjLWNpcmN1bGFyLXByb2dyZXNzLS1pbmRldGVybWluYXRlIC5tZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX2NvbG9yLTJ7YW5pbWF0aW9uOm1kYy1jaXJjdWxhci1wcm9ncmVzcy1zcGlubmVyLWxheWVyLXJvdGF0ZSA1MzMybXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoLG1kYy1jaXJjdWxhci1wcm9ncmVzcy1jb2xvci0yLWZhZGUtaW4tb3V0IDUzMzJtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIGluZmluaXRlIGJvdGh9Lm1kYy1jaXJjdWxhci1wcm9ncmVzcy0taW5kZXRlcm1pbmF0ZSAubWRjLWNpcmN1bGFyLXByb2dyZXNzX19jb2xvci0ze2FuaW1hdGlvbjptZGMtY2lyY3VsYXItcHJvZ3Jlc3Mtc3Bpbm5lci1sYXllci1yb3RhdGUgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUgYm90aCxtZGMtY2lyY3VsYXItcHJvZ3Jlc3MtY29sb3ItMy1mYWRlLWluLW91dCA1MzMybXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RofS5tZGMtY2lyY3VsYXItcHJvZ3Jlc3MtLWluZGV0ZXJtaW5hdGUgLm1kYy1jaXJjdWxhci1wcm9ncmVzc19fY29sb3ItNHthbmltYXRpb246bWRjLWNpcmN1bGFyLXByb2dyZXNzLXNwaW5uZXItbGF5ZXItcm90YXRlIDUzMzJtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIGluZmluaXRlIGJvdGgsbWRjLWNpcmN1bGFyLXByb2dyZXNzLWNvbG9yLTQtZmFkZS1pbi1vdXQgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUgYm90aH0ubWRjLWNpcmN1bGFyLXByb2dyZXNzLS1pbmRldGVybWluYXRlIC5tZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX2NpcmNsZS1sZWZ0IC5tZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX2luZGV0ZXJtaW5hdGUtY2lyY2xlLWdyYXBoaWN7YW5pbWF0aW9uOm1kYy1jaXJjdWxhci1wcm9ncmVzcy1sZWZ0LXNwaW4gMTMzM21zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUgYm90aH0ubWRjLWNpcmN1bGFyLXByb2dyZXNzLS1pbmRldGVybWluYXRlIC5tZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX2NpcmNsZS1yaWdodCAubWRjLWNpcmN1bGFyLXByb2dyZXNzX19pbmRldGVybWluYXRlLWNpcmNsZS1ncmFwaGlje2FuaW1hdGlvbjptZGMtY2lyY3VsYXItcHJvZ3Jlc3MtcmlnaHQtc3BpbiAxMzMzbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RofS5tZGMtY2lyY3VsYXItcHJvZ3Jlc3MtLWNsb3NlZHtvcGFjaXR5OjB9Lm1hdC1tZGMtcHJvZ3Jlc3Mtc3Bpbm5lcntkaXNwbGF5OmJsb2NrO292ZXJmbG93OmhpZGRlbjtsaW5lLWhlaWdodDowfS5tYXQtbWRjLXByb2dyZXNzLXNwaW5uZXIgLm1kYy1jaXJjdWxhci1wcm9ncmVzc19fZGV0ZXJtaW5hdGUtY2lyY2xlLC5tYXQtbWRjLXByb2dyZXNzLXNwaW5uZXIgLm1kYy1jaXJjdWxhci1wcm9ncmVzc19faW5kZXRlcm1pbmF0ZS1jaXJjbGUtZ3JhcGhpY3tzdHJva2U6dmFyKC0tbWRjLWNpcmN1bGFyLXByb2dyZXNzLWFjdGl2ZS1pbmRpY2F0b3ItY29sb3IsIHRyYW5zcGFyZW50KX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKSwoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSl7Lm1hdC1tZGMtcHJvZ3Jlc3Mtc3Bpbm5lciAubWRjLWNpcmN1bGFyLXByb2dyZXNzX19kZXRlcm1pbmF0ZS1jaXJjbGUsLm1hdC1tZGMtcHJvZ3Jlc3Mtc3Bpbm5lciAubWRjLWNpcmN1bGFyLXByb2dyZXNzX19pbmRldGVybWluYXRlLWNpcmNsZS1ncmFwaGlje3N0cm9rZTpDYW52YXNUZXh0fX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKSwoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSl7Lm1hdC1tZGMtcHJvZ3Jlc3Mtc3Bpbm5lciAubWRjLWNpcmN1bGFyLXByb2dyZXNzLS1mb3VyLWNvbG9yIC5tZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX2NvbG9yLTEgLm1kYy1jaXJjdWxhci1wcm9ncmVzc19faW5kZXRlcm1pbmF0ZS1jaXJjbGUtZ3JhcGhpY3tzdHJva2U6Q2FudmFzVGV4dH19QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSksKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpey5tYXQtbWRjLXByb2dyZXNzLXNwaW5uZXIgLm1kYy1jaXJjdWxhci1wcm9ncmVzcy0tZm91ci1jb2xvciAubWRjLWNpcmN1bGFyLXByb2dyZXNzX19jb2xvci0yIC5tZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX2luZGV0ZXJtaW5hdGUtY2lyY2xlLWdyYXBoaWN7c3Ryb2tlOkNhbnZhc1RleHR9fUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXsubWF0LW1kYy1wcm9ncmVzcy1zcGlubmVyIC5tZGMtY2lyY3VsYXItcHJvZ3Jlc3MtLWZvdXItY29sb3IgLm1kYy1jaXJjdWxhci1wcm9ncmVzc19fY29sb3ItMyAubWRjLWNpcmN1bGFyLXByb2dyZXNzX19pbmRldGVybWluYXRlLWNpcmNsZS1ncmFwaGlje3N0cm9rZTpDYW52YXNUZXh0fX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKSwoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSl7Lm1hdC1tZGMtcHJvZ3Jlc3Mtc3Bpbm5lciAubWRjLWNpcmN1bGFyLXByb2dyZXNzLS1mb3VyLWNvbG9yIC5tZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX2NvbG9yLTQgLm1kYy1jaXJjdWxhci1wcm9ncmVzc19faW5kZXRlcm1pbmF0ZS1jaXJjbGUtZ3JhcGhpY3tzdHJva2U6Q2FudmFzVGV4dH19Lm1hdC1tZGMtcHJvZ3Jlc3Mtc3Bpbm5lci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSwubWF0LW1kYy1wcm9ncmVzcy1zcGlubmVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX2RldGVybWluYXRlLWNpcmNsZXt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1tZGMtcHJvZ3Jlc3Mtc3Bpbm5lci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWRjLWNpcmN1bGFyLXByb2dyZXNzX19pbmRldGVybWluYXRlLWNpcmNsZS1ncmFwaGljLC5tYXQtbWRjLXByb2dyZXNzLXNwaW5uZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1kYy1jaXJjdWxhci1wcm9ncmVzc19fc3Bpbm5lci1sYXllciwubWF0LW1kYy1wcm9ncmVzcy1zcGlubmVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX2luZGV0ZXJtaW5hdGUtY29udGFpbmVye2FuaW1hdGlvbjpub25lfS5tYXQtbWRjLXByb2dyZXNzLXNwaW5uZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1kYy1jaXJjdWxhci1wcm9ncmVzc19faW5kZXRlcm1pbmF0ZS1jb250YWluZXIgY2lyY2xle3N0cm9rZS1kYXNoYXJyYXk6MCAhaW1wb3J0YW50fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZGMtcHJvZ3Jlc3Mtc3Bpbm5lciAubWRjLWNpcmN1bGFyLXByb2dyZXNzX19pbmRldGVybWluYXRlLWNpcmNsZS1ncmFwaGljLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZGMtcHJvZ3Jlc3Mtc3Bpbm5lciAubWRjLWNpcmN1bGFyLXByb2dyZXNzX19kZXRlcm1pbmF0ZS1jaXJjbGV7c3Ryb2tlOmN1cnJlbnRDb2xvcjtzdHJva2U6Q2FudmFzVGV4dH0iXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxvbD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9SCh7aW1wb3J0czpbRGUsZG5dfSksbn0pKCksd1E9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmRpYWxvZ1JlZj1lfWNsb3NlV2l0aG91dERpc2FibGluZygpe3RoaXMuZGlhbG9nUmVmLmNsb3NlKHtzaG91bGREaXNhYmxlOiExfSl9Y2xvc2VBbmREaXNhYmxlKCl7dGhpcy5kaWFsb2dSZWYuY2xvc2Uoe3Nob3VsZERpc2FibGU6ITB9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhWbCkpfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbInNhdmluZy1waW5zLWRpYWxvZyJdXSxkZWNsczoxMSx2YXJzOjAsY29uc3RzOltbMSwidGl0bGUiXSxbMSwiYm90dG9tLWJ1dHRvbnMiXSxbIm1hdC1mbGF0LWJ1dHRvbiIsIiIsMSwiY2FuY2VsLWJ1dHRvbiIsMywiY2xpY2siXSxbIm1hdC1mbGF0LWJ1dHRvbiIsIiIsMSwiZGlzYWJsZS1idXR0b24iLDMsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZigwLCJoMyIsMCksVCgxLCJEaXNhYmxlIFNhdmluZyBQaW5zPyIpLGcoKSxmKDIsInAiKSxUKDMsIiBEaXNhYmxpbmcgc2F2aW5nIHBpbnMgd2lsbCByZW1vdmUgbG9jYWxseSBzdG9yZWQgcGlubmVkIGNhcmQgZGF0YSBhbmQgbm8gbG9uZ2VyIGFsbG93IHBpbm5lZCBjYXJkcyB0byBiZSBzaGFyZWQgYWNyb3NzIG11bHRpcGxlIGV4cGVyaW1lbnRzLiIpLGsoNCwiYnIiKSxUKDUsIllvdSBjYW4gcmUtZW5hYmxlIHRoZSBmZWF0dXJlIGFuZCByZS1waW4gY2FyZHMgYXQgYW55IHRpbWUuXG4iKSxnKCksZig2LCJkaXYiLDEpKDcsImJ1dHRvbiIsMiksQSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkuY2xvc2VXaXRob3V0RGlzYWJsaW5nKCl9KSxUKDgsIiBDYW5jZWwgIiksZygpLGYoOSwiYnV0dG9uIiwzKSxBKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5jbG9zZUFuZERpc2FibGUoKX0pLFQoMTAsIiBEaXNhYmxlICIpLGcoKSgpKX0sZGVwZW5kZW5jaWVzOltraV0sc3R5bGVzOlsiLnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTlweDtmb250LXdlaWdodDo1MDA7bWFyZ2luOjB9LmJvdHRvbS1idXR0b25zW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO21hcmdpbi10b3A6MTBweDtnYXA6MTBweH0uYm90dG9tLWJ1dHRvbnNbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiB2MWUobix0KXtpZigxJm4mJihmKDAsImIiKSxUKDEpLGcoKSksMiZuKXtsZXQgZT13KCkuJGltcGxpY2l0O3YoMSksVmUoIiIsZS5kaXNwbGF5QWxpYXMsIjoiKX19ZnVuY3Rpb24geTFlKG4sdCl7aWYoMSZuJiYoZigwLCJtYXQtb3B0aW9uIiwyKSgxLCJzcGFuIiwzKSxTKDIsdjFlLDIsMSwiYiIsNCksVCgzKSxnKCkoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdDtiKCJ2YWx1ZSIsZS52YWx1ZSkoImRpc2FibGVkIixlLmRpc2FibGVkKSx2KDEpLGpNKCJ0aXRsZSIsIiIsZS5kaXNwbGF5QWxpYXMsIjogIixlLmRpc3BsYXlUZXh0LCIiKSx2KDEpLGIoIm5nSWYiLGUuZGlzcGxheUFsaWFzKSx2KDEpLFZlKCIgIixlLmRpc3BsYXlUZXh0LCIgIil9fXZhciBTUT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy52YWx1ZT0iIix0aGlzLm9wdGlvbnM9W10sdGhpcy5zZWxlY3Rpb25DaGFuZ2U9bmV3IEZ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLWRyb3Bkb3duIl1dLGlucHV0czp7dmFsdWU6InZhbHVlIixvcHRpb25zOiJvcHRpb25zIn0sb3V0cHV0czp7c2VsZWN0aW9uQ2hhbmdlOiJzZWxlY3Rpb25DaGFuZ2UifSxkZWNsczoyLHZhcnM6Myxjb25zdHM6W1szLCJ2YWx1ZSIsImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IiLCJzZWxlY3Rpb25DaGFuZ2UiXSxbMywidmFsdWUiLCJkaXNhYmxlZCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsInZhbHVlIiwiZGlzYWJsZWQiXSxbMSwib3B0aW9uLWNvbnRlbnQiLDMsInRpdGxlIl0sWzQsIm5nSWYiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihmKDAsIm1hdC1zZWxlY3QiLDApLEEoInNlbGVjdGlvbkNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoby52YWx1ZSl9KSxTKDEseTFlLDQsNiwibWF0LW9wdGlvbiIsMSksZygpKSwyJmUmJihiKCJ2YWx1ZSIsaS52YWx1ZSkoImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IiLCEwKSx2KDEpLGIoIm5nRm9yT2YiLGkub3B0aW9ucykpfSxkZXBlbmRlbmNpZXM6W25uLE5lLFd1LGphXSxzdHlsZXM6WyJtYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICM4ZTk4YTM7Ym9yZGVyLXJhZGl1czozcHg7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6NnB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0Om5vcm1hbH1tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLm1hdC1tZGMtc2VsZWN0LWFycm93LXdyYXBwZXJ7aGVpZ2h0OjEycHh9bWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV06Zm9jdXN7b3V0bGluZS1jb2xvcjotd2Via2l0LWZvY3VzLXJpbmctY29sb3I7b3V0bGluZS1zdHlsZTphdXRvfSAgLm1hdC1tZGMtc2VsZWN0LXBhbmVse21heC13aWR0aDo3MHZ3fSAgbWF0LW9wdGlvbi5tYXQtbWRjLW9wdGlvbnttaW4taGVpZ2h0OjMycHg7Zm9udC1zaXplOjEycHh9Il19KSxufSkoKSxFUT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5vbkNoZWNrYm94VG9nZ2xlZD1uZXcgRn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1sic2F2aW5nLXBpbnMtY2hlY2tib3giXV0saW5wdXRzOntpc0NoZWNrZWQ6ImlzQ2hlY2tlZCJ9LG91dHB1dHM6e29uQ2hlY2tib3hUb2dnbGVkOiJvbkNoZWNrYm94VG9nZ2xlZCJ9LGZlYXR1cmVzOltWdChbe3Byb3ZpZGU6WjIsdXNlVmFsdWU6e2NsaWNrQWN0aW9uOiJub29wIn19XSldLGRlY2xzOjQsdmFyczoxLGNvbnN0czpbWzEsInNhdmluZy1waW5zLWNoZWNrYm94Il0sWyJjb2xvciIsInByaW1hcnkiLDMsImNoZWNrZWQiLCJjbGljayJdLFsic3ZnSWNvbiIsImhlbHBfb3V0bGluZV8yNHB4IiwidGl0bGUiLCJXaGVuIHNhdmluZyBwaW5zIGFyZSBlbmFibGVkLCBwaW5uZWQgY2FyZHMgd2lsbCBiZSB2aXNpYmxlIGFjcm9zcyBtdWx0aXBsZSBleHBlcmltZW50cy4iLDEsImluZm8iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihmKDAsImRpdiIsMCkoMSwibWF0LWNoZWNrYm94IiwxKSxBKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkNoZWNrYm94VG9nZ2xlZC5lbWl0KCl9KSxUKDIsIkVuYWJsZSBzYXZpbmcgcGlucyAoU2NhbGFycyBvbmx5KSIpLGcoKSxrKDMsIm1hdC1pY29uIiwyKSxnKCkpLDImZSYmKHYoMSksYigiY2hlY2tlZCIsaS5pc0NoZWNrZWQpKX0sZGVwZW5kZW5jaWVzOlt4cyxibl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtjb2xvcjojNjE2MTYxO2ZvbnQtc2l6ZToxMnB4fWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1tYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde21hcmdpbi1sZWZ0Oi0xMXB4fW1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV0gICAgIGxhYmVse2NvbG9yOiM2MTYxNjE7Zm9udC1zaXplOjEycHg7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO3BhZGRpbmctbGVmdDowcHg7d2hpdGUtc3BhY2U6bm93cmFwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIG1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV0gICAgIGxhYmVsLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBtYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVdICAgICBsYWJlbHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0uc2F2aW5nLXBpbnMtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXh9LnNhdmluZy1waW5zLWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTVweDttYXJnaW4tbGVmdDo1cHg7d2lkdGg6MTVweDttaW4td2lkdGg6MTVweH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLE0xZT1mdW5jdGlvbihuKXtyZXR1cm57ImNvbHVtbi1lZGl0LW1lbnUtdG9nZ2xlIjohMCwidG9nZ2xlLW9wZW5lZCI6bn19O2Z1bmN0aW9uIHcxZShuLHQpe2lmKDEmbil7bGV0IGU9VGUoKTtmKDAsImJ1dHRvbiIsMzMpLEEoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBuZShlKSxpZSh3KCkub25TbGlkZU91dFRvZ2dsZWQuZW1pdCgpKX0pLGsoMSwibWF0LWljb24iLDM0KSxUKDIsIiBFZGl0IFRhYmxlIENvbHVtbnMgIiksZygpfWlmKDImbil7bGV0IGU9dygpO2IoIm5nQ2xhc3MiLFVuKDEsTTFlLGUuaXNTbGlkZU91dE1lbnVPcGVuKSl9fWZ1bmN0aW9uIFMxZShuLHQpe2lmKDEmbil7bGV0IGU9VGUoKTtmKDAsImRpdiIsMzUpKDEsInNhdmluZy1waW5zLWNoZWNrYm94IiwzNiksQSgib25DaGVja2JveFRvZ2dsZWQiLGZ1bmN0aW9uKCl7bmUoZSk7bGV0IHI9dygpO3JldHVybiBpZShyLm9uRW5hYmxlU2F2aW5nUGluc1RvZ2dsZWQuZW1pdChyLmlzU2F2aW5nUGluc0VuYWJsZWQpKX0pLGcoKSgpfWlmKDImbil7bGV0IGU9dygpO3YoMSksYigiaXNDaGVja2VkIixlLmlzU2F2aW5nUGluc0VuYWJsZWQpfX1mdW5jdGlvbiBFMWUobix0KXtpZigxJm4pe2xldCBlPVRlKCk7ZigwLCJzZWN0aW9uIiwzNykoMSwiaDMiLDEpLFQoMiwiSW1hZ2VzIiksZygpLGYoMywiZGl2IiwzOCkoNCwiZGl2IiwzOSksVCg1LCJCcmlnaHRuZXNzIiksZygpLGYoNiwiZGl2IiwxMykoNywibWF0LXNsaWRlciIsNDApKDgsImlucHV0IiwxNSksQSgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiBuZShlKSxpZSh3KCkuaW1hZ2VCcmlnaHRuZXNzU2xpZGVyQ2hhbmdlZCQuZW1pdChyKSl9KSxnKCkoKSxmKDksImJ1dHRvbiIsNDEpLEEoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBuZShlKSxpZSh3KCkuaW1hZ2VCcmlnaHRuZXNzUmVzZXQuZW1pdCgpKX0pLGsoMTAsIm1hdC1pY29uIiwxNyksZygpKCkoKSxmKDExLCJkaXYiLDQyKSgxMiwiZGl2Iiw0MyksVCgxMywiQ29udHJhc3QiKSxnKCksZigxNCwiZGl2IiwxMykoMTUsIm1hdC1zbGlkZXIiLDQ0KSgxNiwiaW5wdXQiLDE1KSxBKCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIG5lKGUpLGllKHcoKS5pbWFnZUNvbnRyYXN0U2xpZGVyQ2hhbmdlZCQuZW1pdChyKSl9KSxnKCkoKSxmKDE3LCJidXR0b24iLDQ1KSxBKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gbmUoZSksaWUodygpLmltYWdlQ29udHJhc3RSZXNldC5lbWl0KCkpfSksaygxOCwibWF0LWljb24iLDE3KSxnKCkoKSgpLGYoMTksImRpdiIsNDYpKDIwLCJtYXQtY2hlY2tib3giLDI3KSxBKCJjaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiBuZShlKSxpZSh3KCkuaW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQuZW1pdChyLmNoZWNrZWQpKX0pLFQoMjEsIlNob3cgYWN0dWFsIGltYWdlIHNpemUiKSxnKCkoKSgpfWlmKDImbil7bGV0IGU9dygpO3YoNyksYigibWF4IiwyZTMpKCJtaW4iLDApKCJzdGVwIiwxMCkoImRpc3BsYXlXaXRoIixlLmZvcm1hdE1pbGxpVG9aZXJvdGgpLHYoMSksYigidmFsdWUiLGUuaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaSksdig3KSxiKCJtYXgiLDVlMykoIm1pbiIsMCkoInN0ZXAiLDEwKSgiZGlzcGxheVdpdGgiLGUuZm9ybWF0TWlsbGlUb1plcm90aCksdigxKSxiKCJ2YWx1ZSIsZS5pbWFnZUNvbnRyYXN0SW5NaWxsaSksdig0KSxiKCJjaGVja2VkIixlLmltYWdlU2hvd0FjdHVhbFNpemUpfX12YXIgRFE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmxvY2FsZT1lLHRoaXMuZ2xvYmFsUGluc0ZlYXR1cmVFbmFibGVkPSExLHRoaXMubGlua2VkVGltZVRvZ2dsZWQ9bmV3IEYsdGhpcy5zdGVwU2VsZWN0b3JUb2dnbGVkPW5ldyBGLHRoaXMucmFuZ2VTZWxlY3Rpb25Ub2dnbGVkPW5ldyBGLHRoaXMub25TbGlkZU91dFRvZ2dsZWQ9bmV3IEYsdGhpcy5vbkVuYWJsZVNhdmluZ1BpbnNUb2dnbGVkPW5ldyBGLHRoaXMuVG9vbHRpcFNvcnREcm9wZG93bk9wdGlvbnM9W3t2YWx1ZTpvby5BTFBIQUJFVElDQUwsZGlzcGxheVRleHQ6IkFscGhhYmV0aWNhbCJ9LHt2YWx1ZTpvby5BU0NFTkRJTkcsZGlzcGxheVRleHQ6IkFzY2VuZGluZyJ9LHt2YWx1ZTpvby5ERVNDRU5ESU5HLGRpc3BsYXlUZXh0OiJEZXNjZW5kaW5nIn0se3ZhbHVlOm9vLk5FQVJFU1QsZGlzcGxheVRleHQ6Ik5lYXJlc3QgUGl4ZWwifSx7dmFsdWU6b28uTkVBUkVTVF9ZLGRpc3BsYXlUZXh0OiJOZWFyZXN0IFkifV0sdGhpcy50b29sdGlwU29ydENoYW5nZWQ9bmV3IEYsdGhpcy5pZ25vcmVPdXRsaWVyc0NoYW5nZWQ9bmV3IEYsdGhpcy5YQXhpc1R5cGU9UGksdGhpcy5YQXhpc1R5cGVEcm9wZG93bk9wdGlvbnM9W3t2YWx1ZTpQaS5TVEVQLGRpc3BsYXlUZXh0OiJTdGVwIn0se3ZhbHVlOlBpLlJFTEFUSVZFLGRpc3BsYXlUZXh0OiJSZWxhdGl2ZSJ9LHt2YWx1ZTpQaS5XQUxMX1RJTUUsZGlzcGxheVRleHQ6IldhbGwifV0sdGhpcy54QXhpc1R5cGVDaGFuZ2VkPW5ldyBGLHRoaXMuTUFYX0NBUkRfV0lEVEhfU0xJREVSX1ZBTFVFPTczNSx0aGlzLk1JTl9DQVJEX1dJRFRIX1NMSURFUl9WQUxVRT0zMzUsdGhpcy5jYXJkV2lkdGhTbGlkZXJDaGFuZ2VkJD1uZXcgRix0aGlzLmNhcmRXaWR0aENoYW5nZWQ9dGhpcy5jYXJkV2lkdGhTbGlkZXJDaGFuZ2VkJC5waXBlKG5jKDI1MCkpLHRoaXMuY2FyZFdpZHRoUmVzZXQ9bmV3IEYsdGhpcy5IaXN0b2dyYW1Nb2RlRHJvcGRvd25PcHRpb25zPVt7dmFsdWU6U3IuT0ZGU0VULGRpc3BsYXlUZXh0OiJPZmZzZXQifSx7dmFsdWU6U3IuT1ZFUkxBWSxkaXNwbGF5VGV4dDoiT3ZlcmxheSJ9XSx0aGlzLmhpc3RvZ3JhbU1vZGVDaGFuZ2VkPW5ldyBGLHRoaXMuTUFYX1NNT09USElOR19WQUxVRT0uOTk5LHRoaXMuTUFYX1NNT09USElOR19TTElERVJfVkFMVUU9Ljk5LHRoaXMuc2NhbGFyU21vb3RoaW5nQ29udHJvbENoYW5nZWQkPW5ldyBGLHRoaXMuc2NhbGFyU21vb3RoaW5nPTEwLHRoaXMuc2NhbGFyU21vb3RoaW5nQ2hhbmdlZD10aGlzLnNjYWxhclNtb290aGluZ0NvbnRyb2xDaGFuZ2VkJC5waXBlKG5jKDI1MCkpLHRoaXMuc2NhbGFyUGFydGl0aW9uWFRvZ2dsZWQ9bmV3IEYsdGhpcy5pbWFnZUJyaWdodG5lc3NTbGlkZXJDaGFuZ2VkJD1uZXcgRix0aGlzLmltYWdlQnJpZ2h0bmVzc0luTWlsbGlDaGFuZ2VkPXRoaXMuaW1hZ2VCcmlnaHRuZXNzU2xpZGVyQ2hhbmdlZCQucGlwZShuYygyNTApKSx0aGlzLmltYWdlQnJpZ2h0bmVzc1Jlc2V0PW5ldyBGLHRoaXMuaW1hZ2VDb250cmFzdFNsaWRlckNoYW5nZWQkPW5ldyBGLHRoaXMuaW1hZ2VDb250cmFzdEluTWlsbGlDaGFuZ2VkPXRoaXMuaW1hZ2VDb250cmFzdFNsaWRlckNoYW5nZWQkLnBpcGUobmMoMjUwKSksdGhpcy5pbWFnZUNvbnRyYXN0UmVzZXQ9bmV3IEYsdGhpcy5pbWFnZVNob3dBY3R1YWxTaXplQ2hhbmdlZD1uZXcgRn1vblNjYWxhclNtb290aGluZ0lucHV0KGUpe2xldCBpPWUudGFyZ2V0O2lmKCFpLnZhbHVlKXJldHVybjtsZXQgcj1NYXRoLm1pbihNYXRoLm1heCgwLHBhcnNlRmxvYXQoaS52YWx1ZSkpLC45OTkpO3IhPT1wYXJzZUZsb2F0KGkudmFsdWUpJiYoaS52YWx1ZT1TdHJpbmcocikpLHRoaXMuc2NhbGFyU21vb3RoaW5nQ29udHJvbENoYW5nZWQkLmVtaXQocil9Zm9ybWF0TWlsbGlUb1plcm90aChlKXtyZXR1cm4gZU8oZS8xZTMsdGhpcy5sb2NhbGV8fCJlbi1VUyIsIjEuMC0yIil9Z2V0TGlua2VkVGltZVNlbGVjdGlvblN0YXJ0U3RlcCgpe3JldHVybiB0aGlzLmlzTGlua2VkVGltZUVuYWJsZWR8fG51bGw9PT10aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb258fG51bGwhPT10aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24uZW5kPyIiOnRoaXMubGlua2VkVGltZVNlbGVjdGlvbi5zdGFydC5zdGVwfWlzQXhpc1R5cGVTdGVwKCl7cmV0dXJuIHRoaXMueEF4aXNUeXBlPT09UGkuU1RFUH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhhZCkpfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtZGFzaGJvYXJkLXNldHRpbmdzLWNvbXBvbmVudCJdXSxpbnB1dHM6e2lzTGlua2VkVGltZUVuYWJsZWQ6ImlzTGlua2VkVGltZUVuYWJsZWQiLGlzU2NhbGFyU3RlcFNlbGVjdG9yRW5hYmxlZDoiaXNTY2FsYXJTdGVwU2VsZWN0b3JFbmFibGVkIixpc1NjYWxhclN0ZXBTZWxlY3RvclJhbmdlRW5hYmxlZDoiaXNTY2FsYXJTdGVwU2VsZWN0b3JSYW5nZUVuYWJsZWQiLGlzU2NhbGFyQ29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQ6ImlzU2NhbGFyQ29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQiLGxpbmtlZFRpbWVTZWxlY3Rpb246ImxpbmtlZFRpbWVTZWxlY3Rpb24iLHN0ZXBNaW5NYXg6InN0ZXBNaW5NYXgiLGlzU2xpZGVPdXRNZW51T3BlbjoiaXNTbGlkZU91dE1lbnVPcGVuIixpc1NhdmluZ1BpbnNFbmFibGVkOiJpc1NhdmluZ1BpbnNFbmFibGVkIixnbG9iYWxQaW5zRmVhdHVyZUVuYWJsZWQ6Imdsb2JhbFBpbnNGZWF0dXJlRW5hYmxlZCIsaXNJbWFnZVN1cHBvcnRFbmFibGVkOiJpc0ltYWdlU3VwcG9ydEVuYWJsZWQiLHRvb2x0aXBTb3J0OiJ0b29sdGlwU29ydCIsaWdub3JlT3V0bGllcnM6Imlnbm9yZU91dGxpZXJzIix4QXhpc1R5cGU6InhBeGlzVHlwZSIsY2FyZE1pbldpZHRoOiJjYXJkTWluV2lkdGgiLGhpc3RvZ3JhbU1vZGU6Imhpc3RvZ3JhbU1vZGUiLHNjYWxhclNtb290aGluZzoic2NhbGFyU21vb3RoaW5nIixzY2FsYXJQYXJ0aXRpb25YOiJzY2FsYXJQYXJ0aXRpb25YIixpbWFnZUJyaWdodG5lc3NJbk1pbGxpOiJpbWFnZUJyaWdodG5lc3NJbk1pbGxpIixpbWFnZUNvbnRyYXN0SW5NaWxsaToiaW1hZ2VDb250cmFzdEluTWlsbGkiLGltYWdlU2hvd0FjdHVhbFNpemU6ImltYWdlU2hvd0FjdHVhbFNpemUifSxvdXRwdXRzOntsaW5rZWRUaW1lVG9nZ2xlZDoibGlua2VkVGltZVRvZ2dsZWQiLHN0ZXBTZWxlY3RvclRvZ2dsZWQ6InN0ZXBTZWxlY3RvclRvZ2dsZWQiLHJhbmdlU2VsZWN0aW9uVG9nZ2xlZDoicmFuZ2VTZWxlY3Rpb25Ub2dnbGVkIixvblNsaWRlT3V0VG9nZ2xlZDoib25TbGlkZU91dFRvZ2dsZWQiLG9uRW5hYmxlU2F2aW5nUGluc1RvZ2dsZWQ6Im9uRW5hYmxlU2F2aW5nUGluc1RvZ2dsZWQiLHRvb2x0aXBTb3J0Q2hhbmdlZDoidG9vbHRpcFNvcnRDaGFuZ2VkIixpZ25vcmVPdXRsaWVyc0NoYW5nZWQ6Imlnbm9yZU91dGxpZXJzQ2hhbmdlZCIseEF4aXNUeXBlQ2hhbmdlZDoieEF4aXNUeXBlQ2hhbmdlZCIsY2FyZFdpZHRoQ2hhbmdlZDoiY2FyZFdpZHRoQ2hhbmdlZCIsY2FyZFdpZHRoUmVzZXQ6ImNhcmRXaWR0aFJlc2V0IixoaXN0b2dyYW1Nb2RlQ2hhbmdlZDoiaGlzdG9ncmFtTW9kZUNoYW5nZWQiLHNjYWxhclNtb290aGluZ0NoYW5nZWQ6InNjYWxhclNtb290aGluZ0NoYW5nZWQiLHNjYWxhclBhcnRpdGlvblhUb2dnbGVkOiJzY2FsYXJQYXJ0aXRpb25YVG9nZ2xlZCIsaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaUNoYW5nZWQ6ImltYWdlQnJpZ2h0bmVzc0luTWlsbGlDaGFuZ2VkIixpbWFnZUJyaWdodG5lc3NSZXNldDoiaW1hZ2VCcmlnaHRuZXNzUmVzZXQiLGltYWdlQ29udHJhc3RJbk1pbGxpQ2hhbmdlZDoiaW1hZ2VDb250cmFzdEluTWlsbGlDaGFuZ2VkIixpbWFnZUNvbnRyYXN0UmVzZXQ6ImltYWdlQ29udHJhc3RSZXNldCIsaW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQ6ImltYWdlU2hvd0FjdHVhbFNpemVDaGFuZ2VkIn0sZGVjbHM6NTcsdmFyczoyOSxjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdCxlLGk7cmV0dXJuIHQ9JGxvY2FsaXplYDpBIGJ1dHRvbiB0byByZXNldCB0aGUgY2FyZCB3aWR0aCBzZXR0aW5n4pCfY2NkYzk2YjAwM2ZiYmE5MGRiN2E2OTU5YjViMjZlM2NjNThmN2Q4MOKQnzUyMjMxMTEwNDc5NjgxMDI0NjY6UmVzZXQgY2FyZCB3aWR0aGAsZT0kbG9jYWxpemVgOkEgYnV0dG9uIHRvIHJlc2V0IHRoZSBpbWFnZSBicmlnaHRuZXNzIHNldHRpbmfikJ9jNDgyYjNhNDdlYTA5NzVmYThiZTAxYWZiM2ZiZWM5Yjc2NjI4YmQ34pCfMTE4OTE2MTg1NzI0MDM3ODM5NTpSZXNldCBicmlnaHRuZXNzYCxpPSRsb2NhbGl6ZWA6QSBidXR0b24gdG8gcmVzZXQgdGhlIGltYWdlIGNvbnRyYXN0IHNldHRpbmfikJ9lZDcxMmE4YjkyNzA0MWJlMTUyNTJiMjllYjUyMWViYjEzNzRiYWQ44pCfNTM3MDcwMzM0MjkyMzYxMTk1NTpSZXNldCBjb250cmFzdGAsW1sxLCJnZW5lcmFsIl0sWzEsInNlY3Rpb24tdGl0bGUiXSxbMSwiY29udHJvbC1yb3ciLCJ4LWF4aXMtdHlwZSJdLFsiaWQiLCJ4LWF4aXMtdHlwZS1sYWJlbCIsMSwiY29udHJvbC1uYW1lIl0sWzMsInZhbHVlIiwib3B0aW9ucyIsInNlbGVjdGlvbkNoYW5nZSJdLFsxLCJjb250cm9sLXJvdyIsInNjYWxhcnMtc3RlcC1zZWxlY3RvciIsMywidGl0bGUiXSxbMywiY2hlY2tlZCIsImRpc2FibGVkIiwiY2hhbmdlIl0sWzEsImluZGVudCJdLFsxLCJpbmRlbnQiLCJyYW5nZS1zZWxlY3Rpb24iXSxbMSwiY29udHJvbC1yb3ciLCJsaW5rZWQtdGltZSIsImluZGVudCJdLFsibWF0LWJ1dHRvbiIsIiIsMywibmdDbGFzcyIsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImNvbnRyb2wtcm93IiwiY2FyZC13aWR0aCJdLFsiaWQiLCJjYXJkLXdpZHRoLWxhYmVsIiwxLCJjb250cm9sLW5hbWUiXSxbMSwic2xpZGVyLXJvdyJdLFsiYXJpYS1sYWJlbGxlZGJ5IiwiY2FyZC13aWR0aC1sYWJlbCIsImNvbG9yIiwicHJpbWFyeSIsMywibWF4IiwibWluIiwic3RlcCJdLFsibWF0U2xpZGVyVGh1bWIiLCIiLDMsInZhbHVlIiwidmFsdWVDaGFuZ2UiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsInRpdGxlIiwiUmVzZXQgY2FyZCB3aWR0aCIsMSwicmVzZXQtYnV0dG9uIiwzLCJjbGljayJdLFsic3ZnSWNvbiIsInNldHRpbmdzX2JhY2t1cF9yZXN0b3JlXzI0cHgiXSxbImNsYXNzIiwiY29udHJvbC1yb3cgc2F2aW5nLXBpbnMiLDQsIm5nSWYiXSxbMSwic2NhbGFycyJdLFsxLCJjb250cm9sLXJvdyIsInNjYWxhcnMtc21vb3RoaW5nIl0sWyJpZCIsInNjYWxhcnMtc21vb3RoaW5nLWxhYmVsIiwxLCJjb250cm9sLW5hbWUiXSxbImFyaWEtbGFiZWxsZWRieSIsInNjYWxhcnMtc21vb3RoaW5nLWxhYmVsIiwiY29sb3IiLCJwcmltYXJ5IiwiZGlzY3JldGUiLCIiLDMsIm1heCIsIm1pbiIsInN0ZXAiXSxbImFyaWEtbGFiZWxsZWRieSIsInNjYWxhcnMtc21vb3RoaW5nLWxhYmVsIiwidHlwZSIsIm51bWJlciIsIm1pbiIsIjAiLCJzdGVwIiwiMC4wMDEiLDEsInNsaWRlci1pbnB1dCIsMywibWF4IiwidmFsdWUiLCJpbnB1dCJdLFsxLCJjb250cm9sLXJvdyIsInRvb2x0aXAtc29ydCJdLFsxLCJjb250cm9sLW5hbWUiXSxbMSwiY29udHJvbC1yb3ciLCJzY2FsYXJzLWlnbm9yZS1vdXRsaWVycyJdLFszLCJjaGVja2VkIiwiY2hhbmdlIl0sWzEsImNvbnRyb2wtcm93Iiwic2NhbGFycy1wYXJ0aXRpb24teCJdLFsic3ZnSWNvbiIsImhlbHBfb3V0bGluZV8yNHB4IiwidGl0bGUiLCJOb24tbW9ub3RvbmljIHN0ZXBzIGNhbiBvY2N1ciB3aGVuIHJldXNpbmcgYSBsb2dkaXIgd2l0aCBtdWx0aXBsZSBzdW1tYXJ5IHdyaXRlcnMgYW5kIG92ZXJsYXBwaW5nIHN0ZXBzLiBMaW5lIGNoYXJ0cywgd2l0aG91dCB0aGlzIG9wdGlvbiBlbmFibGVkLCBjYW4gYXBwZWFyIHppZyB6YWdnZWQuIFRoaXMgaXMgY29tbW9uIHdoZW4gcmVzdGFydGluZyBmcm9tIGEgY2hlY2twb2ludC5cblxuV2hlbiBlbmFibGVkLCBhIG5vbi1tb25vdG9uaWMgdGltZSBzZXJpZXMgY29tcG9zZWQgb2YgTiBtb25vdG9uaWMgcGllY2VzIHdpbGwgYmUgc2hvd24gYXMgTiBtb25vdG9uaWMgbGluZXMuIiwxLCJpbmZvIl0sWzEsIkhpc3RvZ3JhbXMiXSxbMSwiY29udHJvbC1yb3ciLCJoaXN0b2dyYW0tbW9kZSJdLFsiY2xhc3MiLCJpbWFnZSIsNCwibmdJZiJdLFsibWF0LWJ1dHRvbiIsIiIsMywibmdDbGFzcyIsImNsaWNrIl0sWyJzdmdJY29uIiwiZWRpdF8yNHB4Il0sWzEsImNvbnRyb2wtcm93Iiwic2F2aW5nLXBpbnMiXSxbMywiaXNDaGVja2VkIiwib25DaGVja2JveFRvZ2dsZWQiXSxbMSwiaW1hZ2UiXSxbMSwiY29udHJvbC1yb3ciLCJpbWFnZS1icmlnaHRuZXNzIl0sWyJpZCIsImltYWdlLWJyaWdodG5lc3MtbGFiZWwiLDEsImNvbnRyb2wtbmFtZSJdLFsiYXJpYS1sYWJlbGxlZGJ5IiwiaW1hZ2UtYnJpZ2h0bmVzcy1sYWJlbCIsImNvbG9yIiwicHJpbWFyeSIsImRpc2NyZXRlIiwiIiwzLCJtYXgiLCJtaW4iLCJzdGVwIiwiZGlzcGxheVdpdGgiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLGUsInRpdGxlIiwiUmVzZXQgYnJpZ2h0bmVzcyIsMSwicmVzZXQtYnV0dG9uIiwzLCJjbGljayJdLFsxLCJjb250cm9sLXJvdyIsImltYWdlLWNvbnRyYXN0Il0sWyJpZCIsImltYWdlLWNvbnN0cmFzdC1sYWJlbCIsMSwiY29udHJvbC1uYW1lIl0sWyJhcmlhLWxhYmVsbGVkYnkiLCJpbWFnZS1jb25zdHJhc3QtbGFiZWwiLCJjb2xvciIsInByaW1hcnkiLCJkaXNjcmV0ZSIsIiIsMywibWF4IiwibWluIiwic3RlcCIsImRpc3BsYXlXaXRoIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixpLCJ0aXRsZSIsIlJlc2V0IGNvbnRyYXN0IiwxLCJyZXNldC1idXR0b24iLDMsImNsaWNrIl0sWzEsImNvbnRyb2wtcm93IiwiaW1hZ2Utc2hvdy1hY3R1YWwtc2l6ZSJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihmKDAsInNlY3Rpb24iLDApKDEsImgzIiwxKSxUKDIsIkdlbmVyYWwiKSxnKCksZigzLCJkaXYiLDIpKDQsImRpdiIsMyksVCg1LCJIb3Jpem9udGFsIEF4aXMiKSxnKCksZig2LCJ0Yi1kcm9wZG93biIsNCksQSgic2VsZWN0aW9uQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS54QXhpc1R5cGVDaGFuZ2VkLmVtaXQobyl9KSxnKCkoKSxmKDcsImRpdiIsNSkoOCwibWF0LWNoZWNrYm94Iiw2KSxBKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuc3RlcFNlbGVjdG9yVG9nZ2xlZC5lbWl0KCl9KSxUKDksIkVuYWJsZSBzdGVwIHNlbGVjdGlvbiBhbmQgZGF0YSB0YWJsZSAiKSxnKCksZigxMCwic3BhbiIsNyksVCgxMSwiKFNjYWxhcnMgb25seSkiKSxnKCksZigxMiwiZGl2Iiw4KSgxMywibWF0LWNoZWNrYm94Iiw2KSxBKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGkucmFuZ2VTZWxlY3Rpb25Ub2dnbGVkLmVtaXQoKX0pLFQoMTQsIkVuYWJsZSBSYW5nZSBTZWxlY3Rpb24gIiksZygpKCksZigxNSwiZGl2Iiw5KSgxNiwibWF0LWNoZWNrYm94Iiw2KSxBKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGkubGlua2VkVGltZVRvZ2dsZWQuZW1pdCgpfSksVCgxNyksZygpKCksUygxOCx3MWUsMywzLCJidXR0b24iLDEwKSxnKCksZigxOSwiZGl2IiwxMSkoMjAsImRpdiIsMTIpLFQoMjEsIkNhcmQgV2lkdGgiKSxnKCksZigyMiwiZGl2IiwxMykoMjMsIm1hdC1zbGlkZXIiLDE0KSgyNCwiaW5wdXQiLDE1KSxBKCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkuY2FyZFdpZHRoU2xpZGVyQ2hhbmdlZCQuZW1pdChvKX0pLGcoKSgpLGYoMjUsImJ1dHRvbiIsMTYpLEEoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLmNhcmRXaWR0aFJlc2V0LmVtaXQoKX0pLGsoMjYsIm1hdC1pY29uIiwxNyksZygpKCkoKSxTKDI3LFMxZSwyLDEsImRpdiIsMTgpLGcoKSxmKDI4LCJzZWN0aW9uIiwxOSkoMjksImgzIiwxKSxUKDMwLCJTY2FsYXJzIiksZygpLGYoMzEsImRpdiIsMjApKDMyLCJkaXYiLDIxKSxUKDMzLCJTbW9vdGhpbmciKSxnKCksZigzNCwiZGl2IiwxMykoMzUsIm1hdC1zbGlkZXIiLDIyKSgzNiwiaW5wdXQiLDE1KSxBKCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkuc2NhbGFyU21vb3RoaW5nQ29udHJvbENoYW5nZWQkLmVtaXQobyl9KSxnKCkoKSxmKDM3LCJpbnB1dCIsMjMpLEEoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblNjYWxhclNtb290aGluZ0lucHV0KG8pfSksZygpKCkoKSxmKDM4LCJkaXYiLDI0KSgzOSwiZGl2IiwyNSksVCg0MCwiVG9vbHRpcCBzb3J0aW5nIG1ldGhvZCIpLGcoKSxmKDQxLCJ0Yi1kcm9wZG93biIsNCksQSgic2VsZWN0aW9uQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS50b29sdGlwU29ydENoYW5nZWQuZW1pdChvKX0pLGcoKSgpLGYoNDIsImRpdiIsMjYpKDQzLCJtYXQtY2hlY2tib3giLDI3KSxBKCJjaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmlnbm9yZU91dGxpZXJzQ2hhbmdlZC5lbWl0KG8uY2hlY2tlZCl9KSxUKDQ0LCJJZ25vcmUgb3V0bGllcnMgaW4gY2hhcnQgc2NhbGluZyIpLGcoKSgpLGYoNDUsImRpdiIsMjgpKDQ2LCJtYXQtY2hlY2tib3giLDI3KSxBKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuc2NhbGFyUGFydGl0aW9uWFRvZ2dsZWQuZW1pdCgpfSksVCg0NywiUGFydGl0aW9uIG5vbi1tb25vdG9uaWMgWCBheGlzIiksZygpLGsoNDgsIm1hdC1pY29uIiwyOSksZygpKCksZig0OSwic2VjdGlvbiIsMzApKDUwLCJoMyIsMSksVCg1MSwiSGlzdG9ncmFtcyIpLGcoKSxmKDUyLCJkaXYiLDMxKSg1MywiZGl2IiwyNSksVCg1NCwiTW9kZSIpLGcoKSxmKDU1LCJ0Yi1kcm9wZG93biIsNCksQSgic2VsZWN0aW9uQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5oaXN0b2dyYW1Nb2RlQ2hhbmdlZC5lbWl0KG8pfSksZygpKCkoKSxTKDU2LEUxZSwyMiwxMSwic2VjdGlvbiIsMzIpKSwyJmUmJih2KDYpLGIoInZhbHVlIixpLnhBeGlzVHlwZSkoIm9wdGlvbnMiLGkuWEF4aXNUeXBlRHJvcGRvd25PcHRpb25zKSx2KDEpLGIoInRpdGxlIixpLmlzQXhpc1R5cGVTdGVwKCk/IiI6Ik9ubHkgYXZhaWxhYmxlIHdoZW4gSG9yaXpvbnRhbCBBeGlzIGlzIHNldCB0byBzdGVwIiksdigxKSxiKCJjaGVja2VkIixpLmlzU2NhbGFyU3RlcFNlbGVjdG9yRW5hYmxlZCkoImRpc2FibGVkIiwhaS5pc0F4aXNUeXBlU3RlcCgpKSx2KDUpLGIoImNoZWNrZWQiLGkuaXNTY2FsYXJTdGVwU2VsZWN0b3JSYW5nZUVuYWJsZWQpKCJkaXNhYmxlZCIsIWkuaXNBeGlzVHlwZVN0ZXAoKSksdigzKSxiKCJjaGVja2VkIixpLmlzTGlua2VkVGltZUVuYWJsZWQpKCJkaXNhYmxlZCIsIWkuaXNBeGlzVHlwZVN0ZXAoKSksdigxKSxWZSgiTGluayBieSBzdGVwICIsaS5nZXRMaW5rZWRUaW1lU2VsZWN0aW9uU3RhcnRTdGVwKCksIiAiKSx2KDEpLGIoIm5nSWYiLGkuaXNTY2FsYXJDb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCksdig1KSxiKCJtYXgiLGkuTUFYX0NBUkRfV0lEVEhfU0xJREVSX1ZBTFVFKSgibWluIixpLk1JTl9DQVJEX1dJRFRIX1NMSURFUl9WQUxVRSkoInN0ZXAiLDUwKSx2KDEpLGIoInZhbHVlIixpLmNhcmRNaW5XaWR0aCksdigzKSxiKCJuZ0lmIixpLmdsb2JhbFBpbnNGZWF0dXJlRW5hYmxlZCksdig4KSxiKCJtYXgiLGkuTUFYX1NNT09USElOR19TTElERVJfVkFMVUUpKCJtaW4iLDApKCJzdGVwIiwuMDEpLHYoMSksYigidmFsdWUiLGkuc2NhbGFyU21vb3RoaW5nKSx2KDEpLGIoIm1heCIsaS5NQVhfU01PT1RISU5HX1ZBTFVFKSgidmFsdWUiLGkuc2NhbGFyU21vb3RoaW5nKSx2KDQpLGIoInZhbHVlIixpLnRvb2x0aXBTb3J0KSgib3B0aW9ucyIsaS5Ub29sdGlwU29ydERyb3Bkb3duT3B0aW9ucyksdigyKSxiKCJjaGVja2VkIixpLmlnbm9yZU91dGxpZXJzKSx2KDMpLGIoImNoZWNrZWQiLGkuc2NhbGFyUGFydGl0aW9uWCksdig5KSxiKCJ2YWx1ZSIsaS5oaXN0b2dyYW1Nb2RlKSgib3B0aW9ucyIsaS5IaXN0b2dyYW1Nb2RlRHJvcGRvd25PcHRpb25zKSx2KDEpLGIoIm5nSWYiLGkuaXNJbWFnZVN1cHBvcnRFbmFibGVkKSl9LGRlcGVuZGVuY2llczpbd24sTmUsU1Esa2ksRXIseHMsYm4sSnUsJHUsRVFdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17Y29sb3I6IzYxNjE2MTtmb250LXNpemU6MTJweH1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9c2VjdGlvbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjtwYWRkaW5nOjE2cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIHNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9LnNlY3Rpb24tdGl0bGVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiMyMTIxMjE7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2ZvbnQtd2VpZ2h0OjUwMDtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDpub3JtYWw7bWFyZ2luOjAgMCAxMnB4IDB9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNlY3Rpb24tdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2VjdGlvbi10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2ZmZn1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250cm9sLXJvd1tfbmdjb250ZW50LSVDT01QJV06bm90KDpoYXMoICsgLmNvbnRyb2wtcm93W19uZ2NvbnRlbnQtJUNPTVAlXSA+IG1hdC1jaGVja2JveCkpW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhc3QtY2hpbGQpe21hcmdpbi1ib3R0b206MTJweH0uY29udHJvbC1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tYm90dG9tOjhweH0uc2xpZGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6MjhweH0uc2xpZGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV0gICAucmVzZXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tbGVmdDo2cHh9LnNsaWRlci1yb3dbX25nY29udGVudC0lQ09NUCVdICAgLnNsaWRlci1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjppbmhlcml0O2JvcmRlcjoxcHggc29saWQgIzhlOThhMztib3JkZXItcmFkaXVzOjJweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6aW5oZXJpdDtoZWlnaHQ6MTAwJTttYXJnaW4tbGVmdDoxMnB4O3BhZGRpbmc6MCA0cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlci1yb3dbX25nY29udGVudC0lQ09NUCVdICAgLnNsaWRlci1pbnB1dFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zbGlkZXItaW5wdXRbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1jb2xvcjojNDI1MDY2fS5zY2FsYXJzLXNtb290aGluZ1tfbmdjb250ZW50LSVDT01QJV0gICAuc2xpZGVyLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4Om5vbmU7d2lkdGg6NWVtfS5zY2FsYXJzLXBhcnRpdGlvbi14W19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4fS5zY2FsYXJzLXBhcnRpdGlvbi14W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTVweDttYXJnaW4tbGVmdDo1cHg7d2lkdGg6MTVweDttaW4td2lkdGg6MTVweH1tYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde21hcmdpbi1sZWZ0Oi0xMXB4fW1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV0gICAgIGxhYmVse2NvbG9yOiM2MTYxNjE7Zm9udC1zaXplOjEycHg7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO3BhZGRpbmctbGVmdDowcHg7d2hpdGUtc3BhY2U6bm93cmFwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIG1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV0gICAgIGxhYmVsLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBtYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVdICAgICBsYWJlbHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1tYXQtc2xpZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjE7bWFyZ2luLWxlZnQ6MHB4O21hcmdpbi1yaWdodDowcHh9LmNvbHVtbi1lZGl0LW1lbnUtdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZTppbmhlcml0O2hlaWdodDoyOHB4O3BhZGRpbmctbGVmdDo1cHg7cGFkZGluZy1yaWdodDoxMnB4fS5jb2x1bW4tZWRpdC1tZW51LXRvZ2dsZS5tYXQtYnV0dG9uLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5jb2x1bW4tZWRpdC1tZW51LXRvZ2dsZS50b2dnbGUtb3BlbmVkW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNlZWV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmNvbHVtbi1lZGl0LW1lbnUtdG9nZ2xlLnRvZ2dsZS1vcGVuZWRbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuY29sdW1uLWVkaXQtbWVudS10b2dnbGUudG9nZ2xlLW9wZW5lZFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojNDI0MjQyfS5jb2x1bW4tZWRpdC1tZW51LXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXJpZ2h0OjZweH10Yi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpibG9ja30uY29udHJvbC1yb3dbX25nY29udGVudC0lQ09NUCVdICAgLmluZGVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWxlZnQ6MjhweH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLElRPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnN0b3JlPWUsdGhpcy5kaWFsb2c9aSx0aGlzLmlzU2NhbGFyU3RlcFNlbGVjdG9yRW5hYmxlZCQ9dGhpcy5zdG9yZS5zZWxlY3QoQ3YpLHRoaXMuaXNTY2FsYXJTdGVwU2VsZWN0b3JSYW5nZUVuYWJsZWQkPXRoaXMuc3RvcmUuc2VsZWN0KFR1KSx0aGlzLmlzTGlua2VkVGltZUVuYWJsZWQkPXRoaXMuc3RvcmUuc2VsZWN0KEV1KSx0aGlzLmlzU2NhbGFyQ29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQkPXRoaXMuc3RvcmUuc2VsZWN0KHVTKSx0aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24kPXRoaXMuc3RvcmUuc2VsZWN0KEpGKSx0aGlzLnN0ZXBNaW5NYXgkPXRoaXMuc3RvcmUuc2VsZWN0KEtGKSx0aGlzLmlzU2xpZGVPdXRNZW51T3BlbiQ9dGhpcy5zdG9yZS5zZWxlY3QoaDEpLHRoaXMuaXNJbWFnZVN1cHBvcnRFbmFibGVkJD10aGlzLnN0b3JlLnNlbGVjdChidSkucGlwZShPZShCb29sZWFuKSxMdCgxKSxJdCh0aGlzLnN0b3JlLnNlbGVjdChkUykpLHEoKFsscl0pPT5yKSksdGhpcy50b29sdGlwU29ydCQ9dGhpcy5zdG9yZS5zZWxlY3QoeGgpLHRoaXMuaWdub3JlT3V0bGllcnMkPXRoaXMuc3RvcmUuc2VsZWN0KENoKSx0aGlzLnhBeGlzVHlwZSQ9dGhpcy5zdG9yZS5zZWxlY3QoT2wpLHRoaXMuY2FyZE1pbldpZHRoJD10aGlzLnN0b3JlLnNlbGVjdChKZiksdGhpcy5oaXN0b2dyYW1Nb2RlJD10aGlzLnN0b3JlLnNlbGVjdChhMSksdGhpcy5zY2FsYXJTbW9vdGhpbmckPXRoaXMuc3RvcmUuc2VsZWN0KF9kKSx0aGlzLnNjYWxhclBhcnRpdGlvblgkPXRoaXMuc3RvcmUuc2VsZWN0KHMxKSx0aGlzLmltYWdlQnJpZ2h0bmVzc0luTWlsbGkkPXRoaXMuc3RvcmUuc2VsZWN0KGwxKSx0aGlzLmltYWdlQ29udHJhc3RJbk1pbGxpJD10aGlzLnN0b3JlLnNlbGVjdChjMSksdGhpcy5pbWFnZVNob3dBY3R1YWxTaXplJD10aGlzLnN0b3JlLnNlbGVjdChkMSksdGhpcy5pc1NhdmluZ1BpbnNFbmFibGVkJD10aGlzLnN0b3JlLnNlbGVjdChiZCksdGhpcy5nbG9iYWxQaW5zRmVhdHVyZUVuYWJsZWQkPXRoaXMuc3RvcmUuc2VsZWN0KHBkKX1vblRvb2x0aXBTb3J0Q2hhbmdlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGdUKHtzb3J0OmV9KSl9b25JZ25vcmVPdXRsaWVyc0NoYW5nZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKF9UKCkpfW9uWEF4aXNUeXBlQ2hhbmdlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGJUKHt4QXhpc1R5cGU6ZX0pKX1vbkNhcmRXaWR0aENoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaCh2VCh7Y2FyZE1pbldpZHRoOmV9KSl9b25DYXJkV2lkdGhSZXNldCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goeVQoKSl9b25IaXN0b2dyYW1Nb2RlQ2hhbmdlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKERUKHtoaXN0b2dyYW1Nb2RlOmV9KSl9b25TY2FsYXJTbW9vdGhpbmdDaGFuZ2VkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goeFQoe3Ntb290aGluZzplfSkpfW9uU2NhbGFyUGFydGl0aW9uWFRvZ2dsZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKENUKCkpfW9uSW1hZ2VCcmlnaHRuZXNzSW5NaWxsaUNoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChNVCh7YnJpZ2h0bmVzc0luTWlsbGk6ZX0pKX1vbkltYWdlQnJpZ2h0bmVzc1Jlc2V0KCl7dGhpcy5zdG9yZS5kaXNwYXRjaChTVCgpKX1vbkltYWdlQ29udHJhc3RSZXNldCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goRVQoKSl9b25JbWFnZUNvbnRyYXN0SW5NaWxsaUNoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaCh3VCh7Y29udHJhc3RJbk1pbGxpOmV9KSl9b25JbWFnZVNob3dBY3R1YWxTaXplQ2hhbmdlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goVFQoKSl9b25MaW5rZWRUaW1lVG9nZ2xlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goTFQoe2FmZm9yZGFuY2U6WmEuQ0hFQ0tfQk9YfSkpfW9uU3RlcFNlbGVjdG9yVG9nZ2xlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goVGQoe2FmZm9yZGFuY2U6WmEuQ0hFQ0tfQk9YfSkpfW9uUmFuZ2VTZWxlY3Rpb25Ub2dnbGVkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChCVCh7YWZmb3JkYW5jZTpaYS5DSEVDS19CT1h9KSl9b25TbGlkZU91dFRvZ2dsZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGxUKCkpfW9uRW5hYmxlU2F2aW5nUGluc1RvZ2dsZWQoZSl7ZT90aGlzLmRpYWxvZy5vcGVuKHdRKS5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyPT57cj8uc2hvdWxkRGlzYWJsZSYmdGhpcy5zdG9yZS5kaXNwYXRjaCh6aCgpKX0pOnRoaXMuc3RvcmUuZGlzcGF0Y2goemgoKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoSWUpLEMoeXMpKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWRhc2hib2FyZC1zZXR0aW5ncyJdXSxkZWNsczoyMSx2YXJzOjYwLGNvbnN0czpbWzMsImlzSW1hZ2VTdXBwb3J0RW5hYmxlZCIsInRvb2x0aXBTb3J0IiwiaWdub3JlT3V0bGllcnMiLCJ4QXhpc1R5cGUiLCJjYXJkTWluV2lkdGgiLCJoaXN0b2dyYW1Nb2RlIiwic2NhbGFyU21vb3RoaW5nIiwic2NhbGFyUGFydGl0aW9uWCIsImltYWdlQnJpZ2h0bmVzc0luTWlsbGkiLCJpbWFnZUNvbnRyYXN0SW5NaWxsaSIsImltYWdlU2hvd0FjdHVhbFNpemUiLCJpc1NjYWxhclN0ZXBTZWxlY3RvckVuYWJsZWQiLCJpc1NjYWxhclN0ZXBTZWxlY3RvclJhbmdlRW5hYmxlZCIsImlzTGlua2VkVGltZUVuYWJsZWQiLCJpc1NjYWxhckNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIiwibGlua2VkVGltZVNlbGVjdGlvbiIsInN0ZXBNaW5NYXgiLCJpc1NsaWRlT3V0TWVudU9wZW4iLCJpc1NhdmluZ1BpbnNFbmFibGVkIiwiZ2xvYmFsUGluc0ZlYXR1cmVFbmFibGVkIiwidG9vbHRpcFNvcnRDaGFuZ2VkIiwiaWdub3JlT3V0bGllcnNDaGFuZ2VkIiwieEF4aXNUeXBlQ2hhbmdlZCIsImNhcmRXaWR0aENoYW5nZWQiLCJjYXJkV2lkdGhSZXNldCIsImhpc3RvZ3JhbU1vZGVDaGFuZ2VkIiwic2NhbGFyU21vb3RoaW5nQ2hhbmdlZCIsInNjYWxhclBhcnRpdGlvblhUb2dnbGVkIiwiaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaUNoYW5nZWQiLCJpbWFnZUJyaWdodG5lc3NSZXNldCIsImltYWdlQ29udHJhc3RJbk1pbGxpQ2hhbmdlZCIsImltYWdlQ29udHJhc3RSZXNldCIsImltYWdlU2hvd0FjdHVhbFNpemVDaGFuZ2VkIiwibGlua2VkVGltZVRvZ2dsZWQiLCJzdGVwU2VsZWN0b3JUb2dnbGVkIiwicmFuZ2VTZWxlY3Rpb25Ub2dnbGVkIiwib25TbGlkZU91dFRvZ2dsZWQiLCJvbkVuYWJsZVNhdmluZ1BpbnNUb2dnbGVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZigwLCJtZXRyaWNzLWRhc2hib2FyZC1zZXR0aW5ncy1jb21wb25lbnQiLDApLEEoInRvb2x0aXBTb3J0Q2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25Ub29sdGlwU29ydENoYW5nZWQobyl9KSgiaWdub3JlT3V0bGllcnNDaGFuZ2VkIixmdW5jdGlvbigpe3JldHVybiBpLm9uSWdub3JlT3V0bGllcnNDaGFuZ2VkKCl9KSgieEF4aXNUeXBlQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25YQXhpc1R5cGVDaGFuZ2VkKG8pfSkoImNhcmRXaWR0aENoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uQ2FyZFdpZHRoQ2hhbmdlZChvKX0pKCJjYXJkV2lkdGhSZXNldCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkNhcmRXaWR0aFJlc2V0KCl9KSgiaGlzdG9ncmFtTW9kZUNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uSGlzdG9ncmFtTW9kZUNoYW5nZWQobyl9KSgic2NhbGFyU21vb3RoaW5nQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25TY2FsYXJTbW9vdGhpbmdDaGFuZ2VkKG8pfSkoInNjYWxhclBhcnRpdGlvblhUb2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBpLm9uU2NhbGFyUGFydGl0aW9uWFRvZ2dsZWQoKX0pKCJpbWFnZUJyaWdodG5lc3NJbk1pbGxpQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25JbWFnZUJyaWdodG5lc3NJbk1pbGxpQ2hhbmdlZChvKX0pKCJpbWFnZUJyaWdodG5lc3NSZXNldCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkltYWdlQnJpZ2h0bmVzc1Jlc2V0KCl9KSgiaW1hZ2VDb250cmFzdEluTWlsbGlDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkltYWdlQ29udHJhc3RJbk1pbGxpQ2hhbmdlZChvKX0pKCJpbWFnZUNvbnRyYXN0UmVzZXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25JbWFnZUNvbnRyYXN0UmVzZXQoKX0pKCJpbWFnZVNob3dBY3R1YWxTaXplQ2hhbmdlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkltYWdlU2hvd0FjdHVhbFNpemVDaGFuZ2VkKCl9KSgibGlua2VkVGltZVRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25MaW5rZWRUaW1lVG9nZ2xlZCgpfSkoInN0ZXBTZWxlY3RvclRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25TdGVwU2VsZWN0b3JUb2dnbGVkKCl9KSgicmFuZ2VTZWxlY3Rpb25Ub2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBpLm9uUmFuZ2VTZWxlY3Rpb25Ub2dnbGVkKCl9KSgib25TbGlkZU91dFRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25TbGlkZU91dFRvZ2dsZWQoKX0pKCJvbkVuYWJsZVNhdmluZ1BpbnNUb2dnbGVkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkVuYWJsZVNhdmluZ1BpbnNUb2dnbGVkKG8pfSksVSgxLCJhc3luYyIpLFUoMiwiYXN5bmMiKSxVKDMsImFzeW5jIiksVSg0LCJhc3luYyIpLFUoNSwiYXN5bmMiKSxVKDYsImFzeW5jIiksVSg3LCJhc3luYyIpLFUoOCwiYXN5bmMiKSxVKDksImFzeW5jIiksVSgxMCwiYXN5bmMiKSxVKDExLCJhc3luYyIpLFUoMTIsImFzeW5jIiksVSgxMywiYXN5bmMiKSxVKDE0LCJhc3luYyIpLFUoMTUsImFzeW5jIiksVSgxNiwiYXN5bmMiKSxVKDE3LCJhc3luYyIpLFUoMTgsImFzeW5jIiksVSgxOSwiYXN5bmMiKSxVKDIwLCJhc3luYyIpLGcoKSksMiZlJiZiKCJpc0ltYWdlU3VwcG9ydEVuYWJsZWQiLEcoMSwyMCxpLmlzSW1hZ2VTdXBwb3J0RW5hYmxlZCQpKSgidG9vbHRpcFNvcnQiLEcoMiwyMixpLnRvb2x0aXBTb3J0JCkpKCJpZ25vcmVPdXRsaWVycyIsRygzLDI0LGkuaWdub3JlT3V0bGllcnMkKSkoInhBeGlzVHlwZSIsRyg0LDI2LGkueEF4aXNUeXBlJCkpKCJjYXJkTWluV2lkdGgiLEcoNSwyOCxpLmNhcmRNaW5XaWR0aCQpKSgiaGlzdG9ncmFtTW9kZSIsRyg2LDMwLGkuaGlzdG9ncmFtTW9kZSQpKSgic2NhbGFyU21vb3RoaW5nIixHKDcsMzIsaS5zY2FsYXJTbW9vdGhpbmckKSkoInNjYWxhclBhcnRpdGlvblgiLEcoOCwzNCxpLnNjYWxhclBhcnRpdGlvblgkKSkoImltYWdlQnJpZ2h0bmVzc0luTWlsbGkiLEcoOSwzNixpLmltYWdlQnJpZ2h0bmVzc0luTWlsbGkkKSkoImltYWdlQ29udHJhc3RJbk1pbGxpIixHKDEwLDM4LGkuaW1hZ2VDb250cmFzdEluTWlsbGkkKSkoImltYWdlU2hvd0FjdHVhbFNpemUiLEcoMTEsNDAsaS5pbWFnZVNob3dBY3R1YWxTaXplJCkpKCJpc1NjYWxhclN0ZXBTZWxlY3RvckVuYWJsZWQiLEcoMTIsNDIsaS5pc1NjYWxhclN0ZXBTZWxlY3RvckVuYWJsZWQkKSkoImlzU2NhbGFyU3RlcFNlbGVjdG9yUmFuZ2VFbmFibGVkIixHKDEzLDQ0LGkuaXNTY2FsYXJTdGVwU2VsZWN0b3JSYW5nZUVuYWJsZWQkKSkoImlzTGlua2VkVGltZUVuYWJsZWQiLEcoMTQsNDYsaS5pc0xpbmtlZFRpbWVFbmFibGVkJCkpKCJpc1NjYWxhckNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIixHKDE1LDQ4LGkuaXNTY2FsYXJDb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCQpKSgibGlua2VkVGltZVNlbGVjdGlvbiIsRygxNiw1MCxpLmxpbmtlZFRpbWVTZWxlY3Rpb24kKSkoInN0ZXBNaW5NYXgiLEcoMTcsNTIsaS5zdGVwTWluTWF4JCkpKCJpc1NsaWRlT3V0TWVudU9wZW4iLEcoMTgsNTQsaS5pc1NsaWRlT3V0TWVudU9wZW4kKSkoImlzU2F2aW5nUGluc0VuYWJsZWQiLEcoMTksNTYsaS5pc1NhdmluZ1BpbnNFbmFibGVkJCkpKCJnbG9iYWxQaW5zRmVhdHVyZUVuYWJsZWQiLEcoMjAsNTgsaS5nbG9iYWxQaW5zRmVhdHVyZUVuYWJsZWQkKSl9LGRlcGVuZGVuY2llczpbRFEsY3RdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLEFRPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtZGFzaGJvYXJkLXJpZ2h0LXBhbmUiXV0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJmsoMCwibWV0cmljcy1kYXNoYm9hcmQtc2V0dGluZ3MiKX0sZGVwZW5kZW5jaWVzOltJUV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksazFlPVsidG9vbHRpcCJdLGtRPW5ldyB0ZSgibWF0LXRvb2x0aXAtc2Nyb2xsLXN0cmF0ZWd5IiksTjFlPXtwcm92aWRlOmtRLGRlcHM6W09pXSx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4pe3JldHVybigpPT5uLnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbih7c2Nyb2xsVGhyb3R0bGU6MjB9KX19LEIxZT1uZXcgdGUoIm1hdC10b29sdGlwLWRlZmF1bHQtb3B0aW9ucyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm57c2hvd0RlbGF5OjAsaGlkZURlbGF5OjAsdG91Y2hlbmRIaWRlRGVsYXk6MTUwMH19fSksUlE9InRvb2x0aXAtcGFuZWwiLFBRPXphKHtwYXNzaXZlOiEwfSksRzFlPSgoKT0+e2NsYXNzIG57Z2V0IHBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9ufXNldCBwb3NpdGlvbihlKXtlIT09dGhpcy5fcG9zaXRpb24mJih0aGlzLl9wb3NpdGlvbj1lLHRoaXMuX292ZXJsYXlSZWYmJih0aGlzLl91cGRhdGVQb3NpdGlvbih0aGlzLl9vdmVybGF5UmVmKSx0aGlzLl90b29sdGlwSW5zdGFuY2U/LnNob3coMCksdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpKSl9Z2V0IHBvc2l0aW9uQXRPcmlnaW4oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb25BdE9yaWdpbn1zZXQgcG9zaXRpb25BdE9yaWdpbihlKXt0aGlzLl9wb3NpdGlvbkF0T3JpZ2luPXZ0KGUpLHRoaXMuX2RldGFjaCgpLHRoaXMuX292ZXJsYXlSZWY9bnVsbH1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9c2V0IGRpc2FibGVkKGUpe3RoaXMuX2Rpc2FibGVkPXZ0KGUpLHRoaXMuX2Rpc2FibGVkP3RoaXMuaGlkZSgwKTp0aGlzLl9zZXR1cFBvaW50ZXJFbnRlckV2ZW50c0lmTmVlZGVkKCl9Z2V0IHNob3dEZWxheSgpe3JldHVybiB0aGlzLl9zaG93RGVsYXl9c2V0IHNob3dEZWxheShlKXt0aGlzLl9zaG93RGVsYXk9bWkoZSl9Z2V0IGhpZGVEZWxheSgpe3JldHVybiB0aGlzLl9oaWRlRGVsYXl9c2V0IGhpZGVEZWxheShlKXt0aGlzLl9oaWRlRGVsYXk9bWkoZSksdGhpcy5fdG9vbHRpcEluc3RhbmNlJiYodGhpcy5fdG9vbHRpcEluc3RhbmNlLl9tb3VzZUxlYXZlSGlkZURlbGF5PXRoaXMuX2hpZGVEZWxheSl9Z2V0IG1lc3NhZ2UoKXtyZXR1cm4gdGhpcy5fbWVzc2FnZX1zZXQgbWVzc2FnZShlKXt0aGlzLl9hcmlhRGVzY3JpYmVyLnJlbW92ZURlc2NyaXB0aW9uKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCx0aGlzLl9tZXNzYWdlLCJ0b29sdGlwIiksdGhpcy5fbWVzc2FnZT1udWxsIT1lP1N0cmluZyhlKS50cmltKCk6IiIsIXRoaXMuX21lc3NhZ2UmJnRoaXMuX2lzVG9vbHRpcFZpc2libGUoKT90aGlzLmhpZGUoMCk6KHRoaXMuX3NldHVwUG9pbnRlckVudGVyRXZlbnRzSWZOZWVkZWQoKSx0aGlzLl91cGRhdGVUb29sdGlwTWVzc2FnZSgpLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pnt0aGlzLl9hcmlhRGVzY3JpYmVyLmRlc2NyaWJlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCx0aGlzLm1lc3NhZ2UsInRvb2x0aXAiKX0pfSkpfWdldCB0b29sdGlwQ2xhc3MoKXtyZXR1cm4gdGhpcy5fdG9vbHRpcENsYXNzfXNldCB0b29sdGlwQ2xhc3MoZSl7dGhpcy5fdG9vbHRpcENsYXNzPWUsdGhpcy5fdG9vbHRpcEluc3RhbmNlJiZ0aGlzLl9zZXRUb29sdGlwQ2xhc3ModGhpcy5fdG9vbHRpcENsYXNzKX1jb25zdHJ1Y3RvcihlLGkscixvLGEscyxsLGMsZCx1LHAsaCl7dGhpcy5fb3ZlcmxheT1lLHRoaXMuX2VsZW1lbnRSZWY9aSx0aGlzLl9zY3JvbGxEaXNwYXRjaGVyPXIsdGhpcy5fdmlld0NvbnRhaW5lclJlZj1vLHRoaXMuX25nWm9uZT1hLHRoaXMuX3BsYXRmb3JtPXMsdGhpcy5fYXJpYURlc2NyaWJlcj1sLHRoaXMuX2ZvY3VzTW9uaXRvcj1jLHRoaXMuX2Rpcj11LHRoaXMuX2RlZmF1bHRPcHRpb25zPXAsdGhpcy5fcG9zaXRpb249ImJlbG93Iix0aGlzLl9wb3NpdGlvbkF0T3JpZ2luPSExLHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuX3ZpZXdJbml0aWFsaXplZD0hMSx0aGlzLl9wb2ludGVyRXhpdEV2ZW50c0luaXRpYWxpemVkPSExLHRoaXMuX3ZpZXdwb3J0TWFyZ2luPTgsdGhpcy5fY3NzQ2xhc3NQcmVmaXg9Im1hdCIsdGhpcy5fc2hvd0RlbGF5PXRoaXMuX2RlZmF1bHRPcHRpb25zLnNob3dEZWxheSx0aGlzLl9oaWRlRGVsYXk9dGhpcy5fZGVmYXVsdE9wdGlvbnMuaGlkZURlbGF5LHRoaXMudG91Y2hHZXN0dXJlcz0iYXV0byIsdGhpcy5fbWVzc2FnZT0iIix0aGlzLl9wYXNzaXZlTGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3llZD1uZXcgRWUsdGhpcy5fc2Nyb2xsU3RyYXRlZ3k9ZCx0aGlzLl9kb2N1bWVudD1oLHAmJihwLnBvc2l0aW9uJiYodGhpcy5wb3NpdGlvbj1wLnBvc2l0aW9uKSxwLnBvc2l0aW9uQXRPcmlnaW4mJih0aGlzLnBvc2l0aW9uQXRPcmlnaW49cC5wb3NpdGlvbkF0T3JpZ2luKSxwLnRvdWNoR2VzdHVyZXMmJih0aGlzLnRvdWNoR2VzdHVyZXM9cC50b3VjaEdlc3R1cmVzKSksdS5jaGFuZ2UucGlwZShpdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9vdmVybGF5UmVmJiZ0aGlzLl91cGRhdGVQb3NpdGlvbih0aGlzLl9vdmVybGF5UmVmKX0pfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX3ZpZXdJbml0aWFsaXplZD0hMCx0aGlzLl9zZXR1cFBvaW50ZXJFbnRlckV2ZW50c0lmTmVlZGVkKCksdGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IodGhpcy5fZWxlbWVudFJlZikucGlwZShpdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoZT0+e2U/ImtleWJvYXJkIj09PWUmJnRoaXMuX25nWm9uZS5ydW4oKCk9PnRoaXMuc2hvdygpKTp0aGlzLl9uZ1pvbmUucnVuKCgpPT50aGlzLmhpZGUoMCkpfSl9bmdPbkRlc3Ryb3koKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7Y2xlYXJUaW1lb3V0KHRoaXMuX3RvdWNoc3RhcnRUaW1lb3V0KSx0aGlzLl9vdmVybGF5UmVmJiYodGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKCksdGhpcy5fdG9vbHRpcEluc3RhbmNlPW51bGwpLHRoaXMuX3Bhc3NpdmVMaXN0ZW5lcnMuZm9yRWFjaCgoW2kscl0pPT57ZS5yZW1vdmVFdmVudExpc3RlbmVyKGkscixQUSl9KSx0aGlzLl9wYXNzaXZlTGlzdGVuZXJzLmxlbmd0aD0wLHRoaXMuX2Rlc3Ryb3llZC5uZXh0KCksdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCksdGhpcy5fYXJpYURlc2NyaWJlci5yZW1vdmVEZXNjcmlwdGlvbihlLHRoaXMubWVzc2FnZSwidG9vbHRpcCIpLHRoaXMuX2ZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyhlKX1zaG93KGU9dGhpcy5zaG93RGVsYXksaSl7aWYodGhpcy5kaXNhYmxlZHx8IXRoaXMubWVzc2FnZXx8dGhpcy5faXNUb29sdGlwVmlzaWJsZSgpKXJldHVybiB2b2lkIHRoaXMuX3Rvb2x0aXBJbnN0YW5jZT8uX2NhbmNlbFBlbmRpbmdBbmltYXRpb25zKCk7bGV0IHI9dGhpcy5fY3JlYXRlT3ZlcmxheShpKTt0aGlzLl9kZXRhY2goKSx0aGlzLl9wb3J0YWw9dGhpcy5fcG9ydGFsfHxuZXcgTGwodGhpcy5fdG9vbHRpcENvbXBvbmVudCx0aGlzLl92aWV3Q29udGFpbmVyUmVmKTtsZXQgbz10aGlzLl90b29sdGlwSW5zdGFuY2U9ci5hdHRhY2godGhpcy5fcG9ydGFsKS5pbnN0YW5jZTtvLl90cmlnZ2VyRWxlbWVudD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsby5fbW91c2VMZWF2ZUhpZGVEZWxheT10aGlzLl9oaWRlRGVsYXksby5hZnRlckhpZGRlbigpLnBpcGUoaXQodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpPT50aGlzLl9kZXRhY2goKSksdGhpcy5fc2V0VG9vbHRpcENsYXNzKHRoaXMuX3Rvb2x0aXBDbGFzcyksdGhpcy5fdXBkYXRlVG9vbHRpcE1lc3NhZ2UoKSxvLnNob3coZSl9aGlkZShlPXRoaXMuaGlkZURlbGF5KXtsZXQgaT10aGlzLl90b29sdGlwSW5zdGFuY2U7aSYmKGkuaXNWaXNpYmxlKCk/aS5oaWRlKGUpOihpLl9jYW5jZWxQZW5kaW5nQW5pbWF0aW9ucygpLHRoaXMuX2RldGFjaCgpKSl9dG9nZ2xlKGUpe3RoaXMuX2lzVG9vbHRpcFZpc2libGUoKT90aGlzLmhpZGUoKTp0aGlzLnNob3codm9pZCAwLGUpfV9pc1Rvb2x0aXBWaXNpYmxlKCl7cmV0dXJuISF0aGlzLl90b29sdGlwSW5zdGFuY2UmJnRoaXMuX3Rvb2x0aXBJbnN0YW5jZS5pc1Zpc2libGUoKX1fY3JlYXRlT3ZlcmxheShlKXtpZih0aGlzLl9vdmVybGF5UmVmKXtsZXQgbz10aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLnBvc2l0aW9uU3RyYXRlZ3k7aWYoKCF0aGlzLnBvc2l0aW9uQXRPcmlnaW58fCFlKSYmby5fb3JpZ2luIGluc3RhbmNlb2YgeGUpcmV0dXJuIHRoaXMuX292ZXJsYXlSZWY7dGhpcy5fZGV0YWNoKCl9bGV0IGk9dGhpcy5fc2Nyb2xsRGlzcGF0Y2hlci5nZXRBbmNlc3RvclNjcm9sbENvbnRhaW5lcnModGhpcy5fZWxlbWVudFJlZikscj10aGlzLl9vdmVybGF5LnBvc2l0aW9uKCkuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLnBvc2l0aW9uQXRPcmlnaW4mJmV8fHRoaXMuX2VsZW1lbnRSZWYpLndpdGhUcmFuc2Zvcm1PcmlnaW5PbihgLiR7dGhpcy5fY3NzQ2xhc3NQcmVmaXh9LXRvb2x0aXBgKS53aXRoRmxleGlibGVEaW1lbnNpb25zKCExKS53aXRoVmlld3BvcnRNYXJnaW4odGhpcy5fdmlld3BvcnRNYXJnaW4pLndpdGhTY3JvbGxhYmxlQ29udGFpbmVycyhpKTtyZXR1cm4gci5wb3NpdGlvbkNoYW5nZXMucGlwZShpdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUobz0+e3RoaXMuX3VwZGF0ZUN1cnJlbnRQb3NpdGlvbkNsYXNzKG8uY29ubmVjdGlvblBhaXIpLHRoaXMuX3Rvb2x0aXBJbnN0YW5jZSYmby5zY3JvbGxhYmxlVmlld1Byb3BlcnRpZXMuaXNPdmVybGF5Q2xpcHBlZCYmdGhpcy5fdG9vbHRpcEluc3RhbmNlLmlzVmlzaWJsZSgpJiZ0aGlzLl9uZ1pvbmUucnVuKCgpPT50aGlzLmhpZGUoMCkpfSksdGhpcy5fb3ZlcmxheVJlZj10aGlzLl9vdmVybGF5LmNyZWF0ZSh7ZGlyZWN0aW9uOnRoaXMuX2Rpcixwb3NpdGlvblN0cmF0ZWd5OnIscGFuZWxDbGFzczpgJHt0aGlzLl9jc3NDbGFzc1ByZWZpeH0tJHtSUX1gLHNjcm9sbFN0cmF0ZWd5OnRoaXMuX3Njcm9sbFN0cmF0ZWd5KCl9KSx0aGlzLl91cGRhdGVQb3NpdGlvbih0aGlzLl9vdmVybGF5UmVmKSx0aGlzLl9vdmVybGF5UmVmLmRldGFjaG1lbnRzKCkucGlwZShpdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9PnRoaXMuX2RldGFjaCgpKSx0aGlzLl9vdmVybGF5UmVmLm91dHNpZGVQb2ludGVyRXZlbnRzKCkucGlwZShpdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3Rvb2x0aXBJbnN0YW5jZT8uX2hhbmRsZUJvZHlJbnRlcmFjdGlvbigpKSx0aGlzLl9vdmVybGF5UmVmLmtleWRvd25FdmVudHMoKS5waXBlKGl0KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShvPT57dGhpcy5faXNUb29sdGlwVmlzaWJsZSgpJiYyNz09PW8ua2V5Q29kZSYmIU9yKG8pJiYoby5wcmV2ZW50RGVmYXVsdCgpLG8uc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5fbmdab25lLnJ1bigoKT0+dGhpcy5oaWRlKDApKSl9KSx0aGlzLl9kZWZhdWx0T3B0aW9ucz8uZGlzYWJsZVRvb2x0aXBJbnRlcmFjdGl2aXR5JiZ0aGlzLl9vdmVybGF5UmVmLmFkZFBhbmVsQ2xhc3MoYCR7dGhpcy5fY3NzQ2xhc3NQcmVmaXh9LXRvb2x0aXAtcGFuZWwtbm9uLWludGVyYWN0aXZlYCksdGhpcy5fb3ZlcmxheVJlZn1fZGV0YWNoKCl7dGhpcy5fb3ZlcmxheVJlZiYmdGhpcy5fb3ZlcmxheVJlZi5oYXNBdHRhY2hlZCgpJiZ0aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpLHRoaXMuX3Rvb2x0aXBJbnN0YW5jZT1udWxsfV91cGRhdGVQb3NpdGlvbihlKXtsZXQgaT1lLmdldENvbmZpZygpLnBvc2l0aW9uU3RyYXRlZ3kscj10aGlzLl9nZXRPcmlnaW4oKSxvPXRoaXMuX2dldE92ZXJsYXlQb3NpdGlvbigpO2kud2l0aFBvc2l0aW9ucyhbdGhpcy5fYWRkT2Zmc2V0KHsuLi5yLm1haW4sLi4uby5tYWlufSksdGhpcy5fYWRkT2Zmc2V0KHsuLi5yLmZhbGxiYWNrLC4uLm8uZmFsbGJhY2t9KV0pfV9hZGRPZmZzZXQoZSl7cmV0dXJuIGV9X2dldE9yaWdpbigpe2xldCByLGU9IXRoaXMuX2Rpcnx8Imx0ciI9PXRoaXMuX2Rpci52YWx1ZSxpPXRoaXMucG9zaXRpb247ImFib3ZlIj09aXx8ImJlbG93Ij09aT9yPXtvcmlnaW5YOiJjZW50ZXIiLG9yaWdpblk6ImFib3ZlIj09aT8idG9wIjoiYm90dG9tIn06ImJlZm9yZSI9PWl8fCJsZWZ0Ij09aSYmZXx8InJpZ2h0Ij09aSYmIWU/cj17b3JpZ2luWDoic3RhcnQiLG9yaWdpblk6ImNlbnRlciJ9OigiYWZ0ZXIiPT1pfHwicmlnaHQiPT1pJiZlfHwibGVmdCI9PWkmJiFlKSYmKHI9e29yaWdpblg6ImVuZCIsb3JpZ2luWToiY2VudGVyIn0pO2xldHt4Om8seTphfT10aGlzLl9pbnZlcnRQb3NpdGlvbihyLm9yaWdpblgsci5vcmlnaW5ZKTtyZXR1cm57bWFpbjpyLGZhbGxiYWNrOntvcmlnaW5YOm8sb3JpZ2luWTphfX19X2dldE92ZXJsYXlQb3NpdGlvbigpe2xldCByLGU9IXRoaXMuX2Rpcnx8Imx0ciI9PXRoaXMuX2Rpci52YWx1ZSxpPXRoaXMucG9zaXRpb247ImFib3ZlIj09aT9yPXtvdmVybGF5WDoiY2VudGVyIixvdmVybGF5WToiYm90dG9tIn06ImJlbG93Ij09aT9yPXtvdmVybGF5WDoiY2VudGVyIixvdmVybGF5WToidG9wIn06ImJlZm9yZSI9PWl8fCJsZWZ0Ij09aSYmZXx8InJpZ2h0Ij09aSYmIWU/cj17b3ZlcmxheVg6ImVuZCIsb3ZlcmxheVk6ImNlbnRlciJ9OigiYWZ0ZXIiPT1pfHwicmlnaHQiPT1pJiZlfHwibGVmdCI9PWkmJiFlKSYmKHI9e292ZXJsYXlYOiJzdGFydCIsb3ZlcmxheVk6ImNlbnRlciJ9KTtsZXR7eDpvLHk6YX09dGhpcy5faW52ZXJ0UG9zaXRpb24oci5vdmVybGF5WCxyLm92ZXJsYXlZKTtyZXR1cm57bWFpbjpyLGZhbGxiYWNrOntvdmVybGF5WDpvLG92ZXJsYXlZOmF9fX1fdXBkYXRlVG9vbHRpcE1lc3NhZ2UoKXt0aGlzLl90b29sdGlwSW5zdGFuY2UmJih0aGlzLl90b29sdGlwSW5zdGFuY2UubWVzc2FnZT10aGlzLm1lc3NhZ2UsdGhpcy5fdG9vbHRpcEluc3RhbmNlLl9tYXJrRm9yQ2hlY2soKSx0aGlzLl9uZ1pvbmUub25NaWNyb3Rhc2tFbXB0eS5waXBlKEx0KDEpLGl0KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3Rvb2x0aXBJbnN0YW5jZSYmdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpfSkpfV9zZXRUb29sdGlwQ2xhc3MoZSl7dGhpcy5fdG9vbHRpcEluc3RhbmNlJiYodGhpcy5fdG9vbHRpcEluc3RhbmNlLnRvb2x0aXBDbGFzcz1lLHRoaXMuX3Rvb2x0aXBJbnN0YW5jZS5fbWFya0ZvckNoZWNrKCkpfV9pbnZlcnRQb3NpdGlvbihlLGkpe3JldHVybiJhYm92ZSI9PT10aGlzLnBvc2l0aW9ufHwiYmVsb3ciPT09dGhpcy5wb3NpdGlvbj8idG9wIj09PWk/aT0iYm90dG9tIjoiYm90dG9tIj09PWkmJihpPSJ0b3AiKToiZW5kIj09PWU/ZT0ic3RhcnQiOiJzdGFydCI9PT1lJiYoZT0iZW5kIikse3g6ZSx5Oml9fV91cGRhdGVDdXJyZW50UG9zaXRpb25DbGFzcyhlKXtsZXQgYSx7b3ZlcmxheVk6aSxvcmlnaW5YOnIsb3JpZ2luWTpvfT1lO2lmKGE9ImNlbnRlciI9PT1pP3RoaXMuX2RpciYmInJ0bCI9PT10aGlzLl9kaXIudmFsdWU/ImVuZCI9PT1yPyJsZWZ0IjoicmlnaHQiOiJzdGFydCI9PT1yPyJsZWZ0IjoicmlnaHQiOiJib3R0b20iPT09aSYmInRvcCI9PT1vPyJhYm92ZSI6ImJlbG93IixhIT09dGhpcy5fY3VycmVudFBvc2l0aW9uKXtsZXQgcz10aGlzLl9vdmVybGF5UmVmO2lmKHMpe2xldCBsPWAke3RoaXMuX2Nzc0NsYXNzUHJlZml4fS0ke1JRfS1gO3MucmVtb3ZlUGFuZWxDbGFzcyhsK3RoaXMuX2N1cnJlbnRQb3NpdGlvbikscy5hZGRQYW5lbENsYXNzKGwrYSl9dGhpcy5fY3VycmVudFBvc2l0aW9uPWF9fV9zZXR1cFBvaW50ZXJFbnRlckV2ZW50c0lmTmVlZGVkKCl7dGhpcy5fZGlzYWJsZWR8fCF0aGlzLm1lc3NhZ2V8fCF0aGlzLl92aWV3SW5pdGlhbGl6ZWR8fHRoaXMuX3Bhc3NpdmVMaXN0ZW5lcnMubGVuZ3RofHwodGhpcy5fcGxhdGZvcm1TdXBwb3J0c01vdXNlRXZlbnRzKCk/dGhpcy5fcGFzc2l2ZUxpc3RlbmVycy5wdXNoKFsibW91c2VlbnRlciIsZT0+e2xldCBpO3RoaXMuX3NldHVwUG9pbnRlckV4aXRFdmVudHNJZk5lZWRlZCgpLHZvaWQgMCE9PWUueCYmdm9pZCAwIT09ZS55JiYoaT1lKSx0aGlzLnNob3codm9pZCAwLGkpfV0pOiJvZmYiIT09dGhpcy50b3VjaEdlc3R1cmVzJiYodGhpcy5fZGlzYWJsZU5hdGl2ZUdlc3R1cmVzSWZOZWNlc3NhcnkoKSx0aGlzLl9wYXNzaXZlTGlzdGVuZXJzLnB1c2goWyJ0b3VjaHN0YXJ0IixlPT57bGV0IGk9ZS50YXJnZXRUb3VjaGVzPy5bMF0scj1pP3t4OmkuY2xpZW50WCx5OmkuY2xpZW50WX06dm9pZCAwO3RoaXMuX3NldHVwUG9pbnRlckV4aXRFdmVudHNJZk5lZWRlZCgpLGNsZWFyVGltZW91dCh0aGlzLl90b3VjaHN0YXJ0VGltZW91dCksdGhpcy5fdG91Y2hzdGFydFRpbWVvdXQ9c2V0VGltZW91dCgoKT0+dGhpcy5zaG93KHZvaWQgMCxyKSw1MDApfV0pKSx0aGlzLl9hZGRMaXN0ZW5lcnModGhpcy5fcGFzc2l2ZUxpc3RlbmVycykpfV9zZXR1cFBvaW50ZXJFeGl0RXZlbnRzSWZOZWVkZWQoKXtpZih0aGlzLl9wb2ludGVyRXhpdEV2ZW50c0luaXRpYWxpemVkKXJldHVybjt0aGlzLl9wb2ludGVyRXhpdEV2ZW50c0luaXRpYWxpemVkPSEwO2xldCBlPVtdO2lmKHRoaXMuX3BsYXRmb3JtU3VwcG9ydHNNb3VzZUV2ZW50cygpKWUucHVzaChbIm1vdXNlbGVhdmUiLGk9PntsZXQgcj1pLnJlbGF0ZWRUYXJnZXQ7KCFyfHwhdGhpcy5fb3ZlcmxheVJlZj8ub3ZlcmxheUVsZW1lbnQuY29udGFpbnMocikpJiZ0aGlzLmhpZGUoKX1dLFsid2hlZWwiLGk9PnRoaXMuX3doZWVsTGlzdGVuZXIoaSldKTtlbHNlIGlmKCJvZmYiIT09dGhpcy50b3VjaEdlc3R1cmVzKXt0aGlzLl9kaXNhYmxlTmF0aXZlR2VzdHVyZXNJZk5lY2Vzc2FyeSgpO2xldCBpPSgpPT57Y2xlYXJUaW1lb3V0KHRoaXMuX3RvdWNoc3RhcnRUaW1lb3V0KSx0aGlzLmhpZGUodGhpcy5fZGVmYXVsdE9wdGlvbnMudG91Y2hlbmRIaWRlRGVsYXkpfTtlLnB1c2goWyJ0b3VjaGVuZCIsaV0sWyJ0b3VjaGNhbmNlbCIsaV0pfXRoaXMuX2FkZExpc3RlbmVycyhlKSx0aGlzLl9wYXNzaXZlTGlzdGVuZXJzLnB1c2goLi4uZSl9X2FkZExpc3RlbmVycyhlKXtlLmZvckVhY2goKFtpLHJdKT0+e3RoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGkscixQUSl9KX1fcGxhdGZvcm1TdXBwb3J0c01vdXNlRXZlbnRzKCl7cmV0dXJuIXRoaXMuX3BsYXRmb3JtLklPUyYmIXRoaXMuX3BsYXRmb3JtLkFORFJPSUR9X3doZWVsTGlzdGVuZXIoZSl7aWYodGhpcy5faXNUb29sdGlwVmlzaWJsZSgpKXtsZXQgaT10aGlzLl9kb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KGUuY2xpZW50WCxlLmNsaWVudFkpLHI9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O2khPT1yJiYhci5jb250YWlucyhpKSYmdGhpcy5oaWRlKCl9fV9kaXNhYmxlTmF0aXZlR2VzdHVyZXNJZk5lY2Vzc2FyeSgpe2xldCBlPXRoaXMudG91Y2hHZXN0dXJlcztpZigib2ZmIiE9PWUpe2xldCBpPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxyPWkuc3R5bGU7KCJvbiI9PT1lfHwiSU5QVVQiIT09aS5ub2RlTmFtZSYmIlRFWFRBUkVBIiE9PWkubm9kZU5hbWUpJiYoci51c2VyU2VsZWN0PXIubXNVc2VyU2VsZWN0PXIud2Via2l0VXNlclNlbGVjdD1yLk1velVzZXJTZWxlY3Q9Im5vbmUiKSwoIm9uIj09PWV8fCFpLmRyYWdnYWJsZSkmJihyLndlYmtpdFVzZXJEcmFnPSJub25lIiksci50b3VjaEFjdGlvbj0ibm9uZSIsci53ZWJraXRUYXBIaWdobGlnaHRDb2xvcj0idHJhbnNwYXJlbnQifX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe2NzKCl9LG4uXHUwMjc1ZGlyPU1lKHt0eXBlOm4saW5wdXRzOntwb3NpdGlvbjpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsInBvc2l0aW9uIl0scG9zaXRpb25BdE9yaWdpbjpbIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwicG9zaXRpb25BdE9yaWdpbiJdLGRpc2FibGVkOlsibWF0VG9vbHRpcERpc2FibGVkIiwiZGlzYWJsZWQiXSxzaG93RGVsYXk6WyJtYXRUb29sdGlwU2hvd0RlbGF5Iiwic2hvd0RlbGF5Il0saGlkZURlbGF5OlsibWF0VG9vbHRpcEhpZGVEZWxheSIsImhpZGVEZWxheSJdLHRvdWNoR2VzdHVyZXM6WyJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsInRvdWNoR2VzdHVyZXMiXSxtZXNzYWdlOlsibWF0VG9vbHRpcCIsIm1lc3NhZ2UiXSx0b29sdGlwQ2xhc3M6WyJtYXRUb29sdGlwQ2xhc3MiLCJ0b29sdGlwQ2xhc3MiXX19KSxufSkoKSxHVD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgRzFle2NvbnN0cnVjdG9yKGUsaSxyLG8sYSxzLGwsYyxkLHUscCxoKXtzdXBlcihlLGkscixvLGEscyxsLGMsZCx1LHAsaCksdGhpcy5fdG9vbHRpcENvbXBvbmVudD1xMWUsdGhpcy5fY3NzQ2xhc3NQcmVmaXg9Im1hdC1tZGMiLHRoaXMuX3ZpZXdwb3J0TWFyZ2luPTh9X2FkZE9mZnNldChlKXtsZXQgcj0hdGhpcy5fZGlyfHwibHRyIj09dGhpcy5fZGlyLnZhbHVlO3JldHVybiJ0b3AiPT09ZS5vcmlnaW5ZP2Uub2Zmc2V0WT0tODoiYm90dG9tIj09PWUub3JpZ2luWT9lLm9mZnNldFk9ODoic3RhcnQiPT09ZS5vcmlnaW5YP2Uub2Zmc2V0WD1yPy04Ojg6ImVuZCI9PT1lLm9yaWdpblgmJihlLm9mZnNldFg9cj84Oi04KSxlfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKE9pKSxDKHhlKSxDKEx1KSxDKGVpKSxDKG90KSxDKFZuKSxDKFQ3KSxDKGZvKSxDKGtRKSxDKHppLDgpLEMoQjFlLDgpLEMoTnQpKX0sbi5cdTAyNzVkaXI9TWUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibWF0VG9vbHRpcCIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1tZGMtdG9vbHRpcC10cmlnZ2VyIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl0sZmVhdHVyZXM6W1hlXX0pLG59KSgpLFcxZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9ZSx0aGlzLl9jbG9zZU9uSW50ZXJhY3Rpb249ITEsdGhpcy5faXNWaXNpYmxlPSExLHRoaXMuX29uSGlkZT1uZXcgRWUsdGhpcy5fYW5pbWF0aW9uc0Rpc2FibGVkPSJOb29wQW5pbWF0aW9ucyI9PT1pfXNob3coZSl7Y2xlYXJUaW1lb3V0KHRoaXMuX2hpZGVUaW1lb3V0SWQpLHRoaXMuX3Nob3dUaW1lb3V0SWQ9c2V0VGltZW91dCgoKT0+e3RoaXMuX3RvZ2dsZVZpc2liaWxpdHkoITApLHRoaXMuX3Nob3dUaW1lb3V0SWQ9dm9pZCAwfSxlKX1oaWRlKGUpe2NsZWFyVGltZW91dCh0aGlzLl9zaG93VGltZW91dElkKSx0aGlzLl9oaWRlVGltZW91dElkPXNldFRpbWVvdXQoKCk9Pnt0aGlzLl90b2dnbGVWaXNpYmlsaXR5KCExKSx0aGlzLl9oaWRlVGltZW91dElkPXZvaWQgMH0sZSl9YWZ0ZXJIaWRkZW4oKXtyZXR1cm4gdGhpcy5fb25IaWRlfWlzVmlzaWJsZSgpe3JldHVybiB0aGlzLl9pc1Zpc2libGV9bmdPbkRlc3Ryb3koKXt0aGlzLl9jYW5jZWxQZW5kaW5nQW5pbWF0aW9ucygpLHRoaXMuX29uSGlkZS5jb21wbGV0ZSgpLHRoaXMuX3RyaWdnZXJFbGVtZW50PW51bGx9X2hhbmRsZUJvZHlJbnRlcmFjdGlvbigpe3RoaXMuX2Nsb3NlT25JbnRlcmFjdGlvbiYmdGhpcy5oaWRlKDApfV9tYXJrRm9yQ2hlY2soKXt0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX1faGFuZGxlTW91c2VMZWF2ZSh7cmVsYXRlZFRhcmdldDplfSl7KCFlfHwhdGhpcy5fdHJpZ2dlckVsZW1lbnQuY29udGFpbnMoZSkpJiYodGhpcy5pc1Zpc2libGUoKT90aGlzLmhpZGUodGhpcy5fbW91c2VMZWF2ZUhpZGVEZWxheSk6dGhpcy5fZmluYWxpemVBbmltYXRpb24oITEpKX1fb25TaG93KCl7fV9oYW5kbGVBbmltYXRpb25FbmQoe2FuaW1hdGlvbk5hbWU6ZX0peyhlPT09dGhpcy5fc2hvd0FuaW1hdGlvbnx8ZT09PXRoaXMuX2hpZGVBbmltYXRpb24pJiZ0aGlzLl9maW5hbGl6ZUFuaW1hdGlvbihlPT09dGhpcy5fc2hvd0FuaW1hdGlvbil9X2NhbmNlbFBlbmRpbmdBbmltYXRpb25zKCl7Y2xlYXJUaW1lb3V0KHRoaXMuX3Nob3dUaW1lb3V0SWQpLGNsZWFyVGltZW91dCh0aGlzLl9oaWRlVGltZW91dElkKSx0aGlzLl9zaG93VGltZW91dElkPXRoaXMuX2hpZGVUaW1lb3V0SWQ9dm9pZCAwfV9maW5hbGl6ZUFuaW1hdGlvbihlKXtlP3RoaXMuX2Nsb3NlT25JbnRlcmFjdGlvbj0hMDp0aGlzLmlzVmlzaWJsZSgpfHx0aGlzLl9vbkhpZGUubmV4dCgpfV90b2dnbGVWaXNpYmlsaXR5KGUpe2xldCBpPXRoaXMuX3Rvb2x0aXAubmF0aXZlRWxlbWVudCxyPXRoaXMuX3Nob3dBbmltYXRpb24sbz10aGlzLl9oaWRlQW5pbWF0aW9uO2lmKGkuY2xhc3NMaXN0LnJlbW92ZShlP286ciksaS5jbGFzc0xpc3QuYWRkKGU/cjpvKSx0aGlzLl9pc1Zpc2libGU9ZSxlJiYhdGhpcy5fYW5pbWF0aW9uc0Rpc2FibGVkJiYiZnVuY3Rpb24iPT10eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZSl7bGV0IGE9Z2V0Q29tcHV0ZWRTdHlsZShpKTsoIjBzIj09PWEuZ2V0UHJvcGVydHlWYWx1ZSgiYW5pbWF0aW9uLWR1cmF0aW9uIil8fCJub25lIj09PWEuZ2V0UHJvcGVydHlWYWx1ZSgiYW5pbWF0aW9uLW5hbWUiKSkmJih0aGlzLl9hbmltYXRpb25zRGlzYWJsZWQ9ITApfWUmJnRoaXMuX29uU2hvdygpLHRoaXMuX2FuaW1hdGlvbnNEaXNhYmxlZCYmKGkuY2xhc3NMaXN0LmFkZCgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiKSx0aGlzLl9maW5hbGl6ZUFuaW1hdGlvbihlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoUXQpLEMocGksOCkpfSxuLlx1MDI3NWRpcj1NZSh7dHlwZTpufSksbn0pKCkscTFlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBXMWV7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKGUsciksdGhpcy5fZWxlbWVudFJlZj1pLHRoaXMuX2lzTXVsdGlsaW5lPSExLHRoaXMuX3Nob3dBbmltYXRpb249Im1hdC1tZGMtdG9vbHRpcC1zaG93Iix0aGlzLl9oaWRlQW5pbWF0aW9uPSJtYXQtbWRjLXRvb2x0aXAtaGlkZSJ9X29uU2hvdygpe3RoaXMuX2lzTXVsdGlsaW5lPXRoaXMuX2lzVG9vbHRpcE11bHRpbGluZSgpLHRoaXMuX21hcmtGb3JDaGVjaygpfV9pc1Rvb2x0aXBNdWx0aWxpbmUoKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIGUuaGVpZ2h0PjI0JiZlLndpZHRoPj0yMDB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoUXQpLEMoeGUpLEMocGksOCkpfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC10b29sdGlwLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJlVlKGsxZSw3KSwyJmUpe2xldCByO2JlKHI9dmUoKSkmJihpLl90b29sdGlwPXIuZmlyc3QpfX0saG9zdEF0dHJzOlsiYXJpYS1oaWRkZW4iLCJ0cnVlIl0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJkEoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9oYW5kbGVNb3VzZUxlYXZlKG8pfSksMiZlJiZCdCgiem9vbSIsaS5pc1Zpc2libGUoKT8xOm51bGwpfSxmZWF0dXJlczpbWGVdLGRlY2xzOjQsdmFyczo0LGNvbnN0czpbWzEsIm1kYy10b29sdGlwIiwibWRjLXRvb2x0aXAtLXNob3duIiwibWF0LW1kYy10b29sdGlwIiwzLCJuZ0NsYXNzIiwiYW5pbWF0aW9uZW5kIl0sWyJ0b29sdGlwIiwiIl0sWzEsIm1kYy10b29sdGlwX19zdXJmYWNlIiwibWRjLXRvb2x0aXBfX3N1cmZhY2UtYW5pbWF0aW9uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZigwLCJkaXYiLDAsMSksQSgiYW5pbWF0aW9uZW5kIixmdW5jdGlvbihvKXtyZXR1cm4gaS5faGFuZGxlQW5pbWF0aW9uRW5kKG8pfSksZigyLCJkaXYiLDIpLFQoMyksZygpKCkpLDImZSYmKG50KCJtZGMtdG9vbHRpcC0tbXVsdGlsaW5lIixpLl9pc011bHRpbGluZSksYigibmdDbGFzcyIsaS50b29sdGlwQ2xhc3MpLHYoMyksa3QoaS5tZXNzYWdlKSl9LGRlcGVuZGVuY2llczpbd25dLHN0eWxlczpbJy5tZGMtdG9vbHRpcF9fc3VyZmFjZXt3b3JkLWJyZWFrOnZhcigtLW1kYy10b29sdGlwLXdvcmQtYnJlYWssIG5vcm1hbCk7b3ZlcmZsb3ctd3JhcDphbnl3aGVyZX0ubWRjLXRvb2x0aXB7cG9zaXRpb246Zml4ZWQ7ZGlzcGxheTpub25lO3otaW5kZXg6OX0ubWRjLXRvb2x0aXAtd3JhcHBlci0tcmljaHtwb3NpdGlvbjpyZWxhdGl2ZX0ubWRjLXRvb2x0aXAtLXNob3duLC5tZGMtdG9vbHRpcC0tc2hvd2luZywubWRjLXRvb2x0aXAtLWhpZGV7ZGlzcGxheTppbmxpbmUtZmxleH0ubWRjLXRvb2x0aXAtLXNob3duLm1kYy10b29sdGlwLS1yaWNoLC5tZGMtdG9vbHRpcC0tc2hvd2luZy5tZGMtdG9vbHRpcC0tcmljaCwubWRjLXRvb2x0aXAtLWhpZGUubWRjLXRvb2x0aXAtLXJpY2h7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGVmdDotMzIwcHg7cG9zaXRpb246YWJzb2x1dGV9Lm1kYy10b29sdGlwX19zdXJmYWNle2xpbmUtaGVpZ2h0OjE2cHg7cGFkZGluZzo0cHggOHB4O21pbi13aWR0aDo0MHB4O21heC13aWR0aDoyMDBweDttaW4taGVpZ2h0OjI0cHg7bWF4LWhlaWdodDo0MHZoO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpoaWRkZW47dGV4dC1hbGlnbjpjZW50ZXJ9Lm1kYy10b29sdGlwX19zdXJmYWNlOjpiZWZvcmV7cG9zaXRpb246YWJzb2x1dGU7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7dG9wOjA7bGVmdDowO2JvcmRlcjoxcHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItcmFkaXVzOmluaGVyaXQ7Y29udGVudDoiIjtwb2ludGVyLWV2ZW50czpub25lfUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpey5tZGMtdG9vbHRpcF9fc3VyZmFjZTo6YmVmb3Jle2JvcmRlci1jb2xvcjpDYW52YXNUZXh0fX0ubWRjLXRvb2x0aXAtLXJpY2ggLm1kYy10b29sdGlwX19zdXJmYWNle2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4taGVpZ2h0OjI0cHg7bWluLXdpZHRoOjQwcHg7bWF4LXdpZHRoOjMyMHB4O3Bvc2l0aW9uOnJlbGF0aXZlfS5tZGMtdG9vbHRpcC0tbXVsdGlsaW5lIC5tZGMtdG9vbHRpcF9fc3VyZmFjZXt0ZXh0LWFsaWduOmxlZnR9W2Rpcj1ydGxdIC5tZGMtdG9vbHRpcC0tbXVsdGlsaW5lIC5tZGMtdG9vbHRpcF9fc3VyZmFjZSwubWRjLXRvb2x0aXAtLW11bHRpbGluZSAubWRjLXRvb2x0aXBfX3N1cmZhY2VbZGlyPXJ0bF17dGV4dC1hbGlnbjpyaWdodH0ubWRjLXRvb2x0aXBfX3N1cmZhY2UgLm1kYy10b29sdGlwX190aXRsZXttYXJnaW46MCA4cHh9Lm1kYy10b29sdGlwX19zdXJmYWNlIC5tZGMtdG9vbHRpcF9fY29udGVudHttYXgtd2lkdGg6Y2FsYygyMDBweCAtICgyICogOHB4KSk7bWFyZ2luOjhweDt0ZXh0LWFsaWduOmxlZnR9W2Rpcj1ydGxdIC5tZGMtdG9vbHRpcF9fc3VyZmFjZSAubWRjLXRvb2x0aXBfX2NvbnRlbnQsLm1kYy10b29sdGlwX19zdXJmYWNlIC5tZGMtdG9vbHRpcF9fY29udGVudFtkaXI9cnRsXXt0ZXh0LWFsaWduOnJpZ2h0fS5tZGMtdG9vbHRpcC0tcmljaCAubWRjLXRvb2x0aXBfX3N1cmZhY2UgLm1kYy10b29sdGlwX19jb250ZW50e21heC13aWR0aDpjYWxjKDMyMHB4IC0gKDIgKiA4cHgpKTthbGlnbi1zZWxmOnN0cmV0Y2h9Lm1kYy10b29sdGlwX19zdXJmYWNlIC5tZGMtdG9vbHRpcF9fY29udGVudC1saW5re3RleHQtZGVjb3JhdGlvbjpub25lfS5tZGMtdG9vbHRpcC0tcmljaC1hY3Rpb25zLC5tZGMtdG9vbHRpcF9fY29udGVudCwubWRjLXRvb2x0aXBfX3RpdGxle3otaW5kZXg6MX0ubWRjLXRvb2x0aXBfX3N1cmZhY2UtYW5pbWF0aW9ue29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoMC44KTt3aWxsLWNoYW5nZTp0cmFuc2Zvcm0sb3BhY2l0eX0ubWRjLXRvb2x0aXAtLXNob3duIC5tZGMtdG9vbHRpcF9fc3VyZmFjZS1hbmltYXRpb257dHJhbnNmb3JtOnNjYWxlKDEpO29wYWNpdHk6MX0ubWRjLXRvb2x0aXAtLWhpZGUgLm1kYy10b29sdGlwX19zdXJmYWNlLWFuaW1hdGlvbnt0cmFuc2Zvcm06c2NhbGUoMSl9Lm1kYy10b29sdGlwX19jYXJldC1zdXJmYWNlLXRvcCwubWRjLXRvb2x0aXBfX2NhcmV0LXN1cmZhY2UtYm90dG9te3Bvc2l0aW9uOmFic29sdXRlO2hlaWdodDoyNHB4O3dpZHRoOjI0cHg7dHJhbnNmb3JtOnJvdGF0ZSgzNWRlZykgc2tld1koMjBkZWcpIHNjYWxlWCgwLjkzOTY5MjYyMDgpfS5tZGMtdG9vbHRpcF9fY2FyZXQtc3VyZmFjZS10b3AgLm1kYy1lbGV2YXRpb24tb3ZlcmxheSwubWRjLXRvb2x0aXBfX2NhcmV0LXN1cmZhY2UtYm90dG9tIC5tZGMtZWxldmF0aW9uLW92ZXJsYXl7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt0b3A6MDtsZWZ0OjB9Lm1kYy10b29sdGlwX19jYXJldC1zdXJmYWNlLWJvdHRvbXtvdXRsaW5lOjFweCBzb2xpZCByZ2JhKDAsMCwwLDApO3otaW5kZXg6LTF9QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSl7Lm1kYy10b29sdGlwX19jYXJldC1zdXJmYWNlLWJvdHRvbXtvdXRsaW5lLWNvbG9yOkNhbnZhc1RleHR9fS5tZGMtdG9vbHRpcF9fc3VyZmFjZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy1wbGFpbi10b29sdGlwLWNvbnRhaW5lci1jb2xvciwgI2ZmZil9Lm1kYy10b29sdGlwX19zdXJmYWNle2JvcmRlci1yYWRpdXM6dmFyKC0tbWRjLXBsYWluLXRvb2x0aXAtY29udGFpbmVyLXNoYXBlLCB2YXIoLS1tZGMtc2hhcGUtc21hbGwsIDRweCkpfS5tZGMtdG9vbHRpcF9fY2FyZXQtc3VyZmFjZS10b3AsLm1kYy10b29sdGlwX19jYXJldC1zdXJmYWNlLWJvdHRvbXtib3JkZXItcmFkaXVzOnZhcigtLW1kYy1wbGFpbi10b29sdGlwLWNvbnRhaW5lci1zaGFwZSwgdmFyKC0tbWRjLXNoYXBlLXNtYWxsLCA0cHgpKX0ubWRjLXRvb2x0aXBfX3N1cmZhY2V7Y29sb3I6dmFyKC0tbWRjLXBsYWluLXRvb2x0aXAtc3VwcG9ydGluZy10ZXh0LWNvbG9yLCAjMDAwKX0ubWRjLXRvb2x0aXBfX3N1cmZhY2V7Zm9udC1mYW1pbHk6dmFyKC0tbWRjLXBsYWluLXRvb2x0aXAtc3VwcG9ydGluZy10ZXh0LWZvbnQsIGluaGVyaXQpO2ZvbnQtc2l6ZTp2YXIoLS1tZGMtcGxhaW4tdG9vbHRpcC1zdXBwb3J0aW5nLXRleHQtc2l6ZSwgaW5oZXJpdCk7Zm9udC13ZWlnaHQ6dmFyKC0tbWRjLXBsYWluLXRvb2x0aXAtc3VwcG9ydGluZy10ZXh0LXdlaWdodCwgaW5oZXJpdCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tbWRjLXBsYWluLXRvb2x0aXAtc3VwcG9ydGluZy10ZXh0LXRyYWNraW5nLCBpbmhlcml0KX0ubWF0LW1kYy10b29sdGlwe3Bvc2l0aW9uOnJlbGF0aXZlO3RyYW5zZm9ybTpzY2FsZSgwKX0ubWF0LW1kYy10b29sdGlwOjpiZWZvcmV7Y29udGVudDoiIjt0b3A6MDtyaWdodDowO2JvdHRvbTowO2xlZnQ6MDt6LWluZGV4Oi0xO3Bvc2l0aW9uOmFic29sdXRlfS5tYXQtbWRjLXRvb2x0aXAtcGFuZWwtYmVsb3cgLm1hdC1tZGMtdG9vbHRpcDo6YmVmb3Jle3RvcDotOHB4fS5tYXQtbWRjLXRvb2x0aXAtcGFuZWwtYWJvdmUgLm1hdC1tZGMtdG9vbHRpcDo6YmVmb3Jle2JvdHRvbTotOHB4fS5tYXQtbWRjLXRvb2x0aXAtcGFuZWwtcmlnaHQgLm1hdC1tZGMtdG9vbHRpcDo6YmVmb3Jle2xlZnQ6LThweH0ubWF0LW1kYy10b29sdGlwLXBhbmVsLWxlZnQgLm1hdC1tZGMtdG9vbHRpcDo6YmVmb3Jle3JpZ2h0Oi04cHh9Lm1hdC1tZGMtdG9vbHRpcC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXthbmltYXRpb246bm9uZTt0cmFuc2Zvcm06c2NhbGUoMSl9Lm1hdC1tZGMtdG9vbHRpcC1wYW5lbC1ub24taW50ZXJhY3RpdmV7cG9pbnRlci1ldmVudHM6bm9uZX1Aa2V5ZnJhbWVzIG1hdC1tZGMtdG9vbHRpcC1zaG93ezAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoMC44KX0xMDAle29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGUoMSl9fUBrZXlmcmFtZXMgbWF0LW1kYy10b29sdGlwLWhpZGV7MCV7b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZSgxKX0xMDAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoMC44KX19Lm1hdC1tZGMtdG9vbHRpcC1zaG93e2FuaW1hdGlvbjptYXQtbWRjLXRvb2x0aXAtc2hvdyAxNTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSBmb3J3YXJkc30ubWF0LW1kYy10b29sdGlwLWhpZGV7YW5pbWF0aW9uOm1hdC1tZGMtdG9vbHRpcC1oaWRlIDc1bXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMSwgMSkgZm9yd2FyZHN9J10sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksWGc9KGZyKCJzdGF0ZSIsW1NpKCJpbml0aWFsLCB2b2lkLCBoaWRkZW4iLHJuKHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJzY2FsZSgwLjgpIn0pKSxTaSgidmlzaWJsZSIscm4oe3RyYW5zZm9ybToic2NhbGUoMSkifSkpLGJpKCIqID0+IHZpc2libGUiLE1pKCIxNTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSIpKSxiaSgiKiA9PiBoaWRkZW4iLE1pKCI3NW1zIGN1YmljLWJlemllcigwLjQsIDAsIDEsIDEpIikpXSksKCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe3Byb3ZpZGVyczpbTjFlXSxpbXBvcnRzOltwZyxEZSxEbyxkbixkbixJY119KSxufSkoKSk7ZnVuY3Rpb24gWDFlKG4sdCl7MSZuJiZrKDAsIm1hdC1pY29uIiw0KX1mdW5jdGlvbiBZMWUobix0KXsxJm4mJmsoMCwibWF0LWljb24iLDQpfWZ1bmN0aW9uIFExZShuLHQpezEmbiYmaygwLCJtYXQtaWNvbiIsNCl9ZnVuY3Rpb24gWjFlKG4sdCl7MSZuJiZrKDAsImRpdiIsNSl9dmFyIEsxZT1mdW5jdGlvbigpe3JldHVybntzZW5zaXRpdml0eToiYWNjZW50In19LFdUPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLkNvbHVtbkhlYWRlclR5cGU9Z3R9Z2V0U3BlY2lhbFR5cGVDbGFzc2VzKGUpe3N3aXRjaChlKXtjYXNlIGd0LlNURVBfQVRfTUlOOnJldHVybiJzdGVwLWF0LW1pbiI7Y2FzZSBndC5TVEVQX0FUX01BWDpyZXR1cm4ic3RlcC1hdC1tYXgiO2RlZmF1bHQ6cmV0dXJuIiJ9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Yi1kYXRhLXRhYmxlLWhlYWRlciJdXSxpbnB1dHM6e2hlYWRlcjoiaGVhZGVyIn0sZGVjbHM6Nyx2YXJzOjksY29uc3RzOltbMSwiaGVhZGVyLWNvbnRhaW5lciIsMywibmdTd2l0Y2giXSxbInN2Z0ljb24iLCJjaGFuZ2VfaGlzdG9yeV8yNHB4Iiw0LCJuZ1N3aXRjaENhc2UiXSxbImNsYXNzIiwiZXh0cmEtcmlnaHQtcGFkZGluZyIsNCwibmdTd2l0Y2hEZWZhdWx0Il0sWzMsIm5nQ2xhc3MiLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIl0sWyJzdmdJY29uIiwiY2hhbmdlX2hpc3RvcnlfMjRweCJdLFsxLCJleHRyYS1yaWdodC1wYWRkaW5nIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZigwLCJkaXYiLDApLFMoMSxYMWUsMSwwLCJtYXQtaWNvbiIsMSksUygyLFkxZSwxLDAsIm1hdC1pY29uIiwxKSxTKDMsUTFlLDEsMCwibWF0LWljb24iLDEpLFMoNCxaMWUsMSwwLCJkaXYiLDIpLGYoNSwic3BhbiIsMyksVCg2KSxnKCkoKSksMiZlJiYoYigibmdTd2l0Y2giLGkuaGVhZGVyLnR5cGUpLHYoMSksYigibmdTd2l0Y2hDYXNlIixpLkNvbHVtbkhlYWRlclR5cGUuVkFMVUVfQ0hBTkdFKSx2KDEpLGIoIm5nU3dpdGNoQ2FzZSIsaS5Db2x1bW5IZWFkZXJUeXBlLlBFUkNFTlRBR0VfQ0hBTkdFKSx2KDEpLGIoIm5nU3dpdGNoQ2FzZSIsaS5Db2x1bW5IZWFkZXJUeXBlLlJBV19DSEFOR0UpLHYoMiksYigibmdDbGFzcyIsaS5nZXRTcGVjaWFsVHlwZUNsYXNzZXMoaS5oZWFkZXIudHlwZSkpKCJtYXRUb29sdGlwIixpLmhlYWRlci5uYW1lKSgibWF0VG9vbHRpcERpc2FibGVkIiwwPT09aS5oZWFkZXIubmFtZS5sb2NhbGVDb21wYXJlKGkuaGVhZGVyLmRpc3BsYXlOYW1lLHZvaWQgMCxtYyg4LEsxZSkpKSx2KDEpLGt0KGkuaGVhZGVyLmRpc3BsYXlOYW1lKSl9LGRlcGVuZGVuY2llczpbd24sbXIsa3IsZHUsYm4sR1RdLHN0eWxlczpbIi5oZWFkZXItY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4fS5leHRyYS1yaWdodC1wYWRkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLXJpZ2h0OjFweH1tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEycHg7d2lkdGg6MTJweDttaW4td2lkdGg6MTJweDtsaW5lLWhlaWdodDoxMnB4fS5zdGVwLWF0LW1pbltfbmdjb250ZW50LSVDT01QJV17bWluLXdpZHRoOjM3cHh9LnN0ZXAtYXQtbWF4W19uZ2NvbnRlbnQtJUNPTVAlXXttaW4td2lkdGg6NDBweH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIEoxZShuLHQpe2lmKDEmbil7bGV0IGU9VGUoKTtmKDAsImRpdiIsOCksQSgiZHJhZ3N0YXJ0IixmdW5jdGlvbigpe2xldCBvPW5lKGUpLiRpbXBsaWNpdDtyZXR1cm4gaWUodygyKS5kcmFnU3RhcnQobykpfSkoImRyYWdlbmQiLGZ1bmN0aW9uKCl7bmUoZSk7bGV0IHI9dygpLmRhdGFUYWJsZU1vZGU7cmV0dXJuIGllKHcoKS5kcmFnRW5kKHIpKX0pKCJkcmFnZW50ZXIiLGZ1bmN0aW9uKCl7bGV0IG89bmUoZSkuJGltcGxpY2l0LGE9dygpLmRhdGFUYWJsZU1vZGU7cmV0dXJuIGllKHcoKS5kcmFnRW50ZXIobyxhKSl9KSxmKDEsIm1hdC1jaGVja2JveCIsOSksQSgiY2hhbmdlIixmdW5jdGlvbigpe2xldCBvPW5lKGUpLiRpbXBsaWNpdCxhPXcoKS5kYXRhVGFibGVNb2RlO3JldHVybiBpZSh3KCkudG9nZ2xlSGVhZGVyKG8sYSkpfSksaygyLCJ0Yi1kYXRhLXRhYmxlLWhlYWRlciIsMTApLGcoKSgpfWlmKDImbil7bGV0IGU9dC4kaW1wbGljaXQ7YigibmdDbGFzcyIsdygyKS5nZXRIaWdobGlnaHRDbGFzc2VzKGUpKSx2KDEpLGIoImNoZWNrZWQiLGUuZW5hYmxlZCksdigxKSxiKCJoZWFkZXIiLGUpfX1mdW5jdGlvbiAkMWUobix0KXsxJm4mJlMoMCxKMWUsMywzLCJkaXYiLDcpLDImbiYmYigibmdGb3JPZiIsdC5oZWFkZXJzKX12YXIgTlE9ZnVuY3Rpb24obix0KXtyZXR1cm57aGVhZGVyczpuLGRhdGFUYWJsZU1vZGU6dH19LElOPW49PntuLnByZXZlbnREZWZhdWx0KCl9LExRPShuLHQpPT50LmZpbmRJbmRleChlPT5lLm5hbWU9PT1uLm5hbWUpLERkPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5UT1A9MF09IlRPUCIsbltuLkJPVFRPTT0xXT0iQk9UVE9NIn0oRGR8fChEZD17fSkpLERkKSkoKSxCUT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuaG9zdEVsZW1lbnQ9ZSx0aGlzLkRhdGFUYWJsZU1vZGU9V3IsdGhpcy5oaWdobGlnaHRFZGdlPURkLlRPUCx0aGlzLm9uU2NhbGFyVGFibGVDb2x1bW5FZGl0PW5ldyBGLHRoaXMub25TY2FsYXJUYWJsZUNvbHVtblRvZ2dsZWQ9bmV3IEYsdGhpcy5vblNjYWxhclRhYmxlQ29sdW1uRWRpdG9yQ2xvc2VkPW5ldyBGLHRoaXMub25UYWJDaGFuZ2U9bmV3IEZ9bmdPbkRlc3Ryb3koKXt0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZHJhZ292ZXIiLElOKX10YWJDaGFuZ2UoZSl7dGhpcy5vblRhYkNoYW5nZS5lbWl0KDA9PT1lLmluZGV4P1dyLlNJTkdMRTpXci5SQU5HRSl9ZHJhZ1N0YXJ0KGUpe3RoaXMuZHJhZ2dpbmdIZWFkZXI9ZSx0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ292ZXIiLElOKX1kcmFnRW5kKGUpe2lmKCF0aGlzLmRyYWdnaW5nSGVhZGVyfHwhdGhpcy5oaWdobGlnaHRlZEhlYWRlcilyZXR1cm47dGhpcy5nZXRIZWFkZXJzRm9yTW9kZShlKTtsZXQgcj17Li4udGhpcy5kcmFnZ2luZ0hlYWRlcn0sbz17Li4udGhpcy5oaWdobGlnaHRlZEhlYWRlcn07ciYmbyYmci5uYW1lIT09by5uYW1lJiZ0aGlzLm9uU2NhbGFyVGFibGVDb2x1bW5FZGl0LmVtaXQoe3NvdXJjZTpyLGRlc3RpbmF0aW9uOm8sc2lkZTp0aGlzLmhpZ2hsaWdodEVkZ2U9PT1EZC5UT1A/bW8uTEVGVDptby5SSUdIVCxkYXRhVGFibGVNb2RlOmV9KSx0aGlzLmRyYWdnaW5nSGVhZGVyPXZvaWQgMCx0aGlzLmhpZ2hsaWdodGVkSGVhZGVyPXZvaWQgMCx0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZHJhZ292ZXIiLElOKX1kcmFnRW50ZXIoZSxpKXtpZighdGhpcy5kcmFnZ2luZ0hlYWRlcilyZXR1cm47bGV0IHI9dGhpcy5nZXRIZWFkZXJzRm9yTW9kZShpKTt0aGlzLmhpZ2hsaWdodEVkZ2U9TFEoZSxyKTxMUSh0aGlzLmRyYWdnaW5nSGVhZGVyLHIpP0RkLlRPUDpEZC5CT1RUT00sdGhpcy5oaWdobGlnaHRlZEhlYWRlcj1lfXRvZ2dsZUhlYWRlcihlLGkpe3RoaXMub25TY2FsYXJUYWJsZUNvbHVtblRvZ2dsZWQuZW1pdCh7ZGF0YVRhYmxlTW9kZTppLGhlYWRlcjplfSl9Z2V0SGlnaGxpZ2h0Q2xhc3NlcyhlKXtyZXR1cm4gZS5uYW1lIT09dGhpcy5oaWdobGlnaHRlZEhlYWRlcj8ubmFtZT97fTp7aGlnaGxpZ2h0ZWQ6ITAsImhpZ2hsaWdodC10b3AiOnRoaXMuaGlnaGxpZ2h0RWRnZT09PURkLlRPUCwiaGlnaGxpZ2h0LWJvdHRvbSI6dGhpcy5oaWdobGlnaHRFZGdlPT09RGQuQk9UVE9NfX1nZXRTZWxlY3RlZFRhYkluZGV4KCl7cmV0dXJuIHRoaXMuc2VsZWN0ZWRUYWI9PT1Xci5TSU5HTEU/MDoxfWdldEhlYWRlcnNGb3JNb2RlKGUpe3JldHVybiBlPT09V3IuU0lOR0xFP3RoaXMuc2luZ2xlSGVhZGVyczp0aGlzLnJhbmdlSGVhZGVyc319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyh4ZSkpfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3Mtc2NhbGFyLWNvbHVtbi1lZGl0b3ItY29tcG9uZW50Il1dLGlucHV0czp7cmFuZ2VIZWFkZXJzOiJyYW5nZUhlYWRlcnMiLHNpbmdsZUhlYWRlcnM6InNpbmdsZUhlYWRlcnMiLHNlbGVjdGVkVGFiOiJzZWxlY3RlZFRhYiJ9LG91dHB1dHM6e29uU2NhbGFyVGFibGVDb2x1bW5FZGl0OiJvblNjYWxhclRhYmxlQ29sdW1uRWRpdCIsb25TY2FsYXJUYWJsZUNvbHVtblRvZ2dsZWQ6Im9uU2NhbGFyVGFibGVDb2x1bW5Ub2dnbGVkIixvblNjYWxhclRhYmxlQ29sdW1uRWRpdG9yQ2xvc2VkOiJvblNjYWxhclRhYmxlQ29sdW1uRWRpdG9yQ2xvc2VkIixvblRhYkNoYW5nZToib25UYWJDaGFuZ2UifSxkZWNsczoxMSx2YXJzOjEzLGNvbnN0czpmdW5jdGlvbigpe2xldCB0O3JldHVybiB0PSRsb2NhbGl6ZWA6TGFiZWwgb24gYSBidXR0b24gdG8gY2xvc2UgdGhlIGNvbHVtbiBlZGl0b3Iu4pCfY2I2MTZjZTliNDMyN2I0MWU2YmRiOTM0NDY2OWJhN2M3MmUyYzcwZeKQnzcyMDU2MzU3NjQ3MTMwMzQ4NDI6Q2xvc2UgY29sdW1uIGVkaXRvcmAsW1sxLCJlZGl0b3ItY29udHJvbHMiXSxbMSwidGFiLWdyb3VwIiwzLCJzZWxlY3RlZEluZGV4Iiwic2VsZWN0ZWRUYWJDaGFuZ2UiXSxbMywibGFiZWwiXSxbMywibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Il0sWzEsImZvb3RlciJdLFsibWF0LWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsMSwiY2xvc2UtYnV0dG9uIiwzLCJjbGljayJdLFsiaGVhZGVyTGlzdCIsIiJdLFsiY2xhc3MiLCJoZWFkZXItbGlzdC1pdGVtIiwiZHJhZ2dhYmxlIiwidHJ1ZSIsMywibmdDbGFzcyIsImRyYWdzdGFydCIsImRyYWdlbmQiLCJkcmFnZW50ZXIiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiZHJhZ2dhYmxlIiwidHJ1ZSIsMSwiaGVhZGVyLWxpc3QtaXRlbSIsMywibmdDbGFzcyIsImRyYWdzdGFydCIsImRyYWdlbmQiLCJkcmFnZW50ZXIiXSxbMywiY2hlY2tlZCIsImNoYW5nZSJdLFszLCJoZWFkZXIiXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoZigwLCJkaXYiLDApKDEsIm1hdC10YWItZ3JvdXAiLDEpLEEoInNlbGVjdGVkVGFiQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS50YWJDaGFuZ2Uobyl9KSxmKDIsIm1hdC10YWIiLDIpLGhpKDMsMyksZygpLGYoNCwibWF0LXRhYiIsMiksaGkoNSwzKSxnKCkoKSgpLGYoNiwiZGl2Iiw0KSg3LCJidXR0b24iLDUpLEEoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uU2NhbGFyVGFibGVDb2x1bW5FZGl0b3JDbG9zZWQuZW1pdCgpfSksVCg4LCIgQ2xvc2UgIiksZygpKCksUyg5LCQxZSwxLDEsIm5nLXRlbXBsYXRlIixudWxsLDYsanQpKSwyJmUpe2xldCByPXN0KDEwKTt2KDEpLGIoInNlbGVjdGVkSW5kZXgiLGkuZ2V0U2VsZWN0ZWRUYWJJbmRleCgpKSx2KDEpLGIoImxhYmVsIiwiU2luZ2xlIiksdigxKSxiKCJuZ1RlbXBsYXRlT3V0bGV0IixyKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLFNvKDcsTlEsaS5zaW5nbGVIZWFkZXJzLGkuRGF0YVRhYmxlTW9kZS5TSU5HTEUpKSx2KDEpLGIoImxhYmVsIiwiUmFuZ2UiKSx2KDEpLGIoIm5nVGVtcGxhdGVPdXRsZXQiLHIpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsU28oMTAsTlEsaS5yYW5nZUhlYWRlcnMsaS5EYXRhVGFibGVNb2RlLlJBTkdFKSl9fSxkZXBlbmRlbmNpZXM6W3duLG5uLGVvLFdULHhzLGF5LHZFLGtpXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdICAgICAubWF0LXRhYi1sYWJlbHttaW4td2lkdGg6MDtwYWRkaW5nOjAgMzBweH0uZWRpdG9yLWNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6Y2FsYygxMDAlIC0gNDVweCl9LnRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDowO2hlaWdodDoxMDAlfS5oZWFkZXItbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjNweDtoZWlnaHQ6MjRweH0uaGlnaGxpZ2h0ZWRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2VlZX0uaGlnaGxpZ2h0LWJvdHRvbVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToycHggc29saWQgI2ZmOTgwMH0uaGlnaGxpZ2h0LXRvcFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoycHggc29saWQgI2ZmOTgwMH0uZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO2JvdHRvbTowO2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aWR0aDoxMDAlO2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7cGFkZGluZzo0cHg7Ym9yZGVyLXRvcDoxcHggc29saWQgI2ViZWJlYn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWNvbG9yOiM1NTV9LmNsb3NlLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTt3aWR0aDo4NHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5jbG9zZS1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuY2xvc2UtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0gIC5tYXQtbWRjLXRhYi1ib2R5LXdyYXBwZXJ7ZmxleDoxfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gVlEobil7cmV0dXJuIG4uZmlsdGVyKHQ9PiJSVU4iIT09dC50eXBlKX12YXIgSFE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5zaW5nbGVIZWFkZXJzJD10aGlzLnN0b3JlLnNlbGVjdChNdikucGlwZShxKFZRKSksdGhpcy5yYW5nZUhlYWRlcnMkPXRoaXMuc3RvcmUuc2VsZWN0KHd2KS5waXBlKHEoVlEpKSx0aGlzLnNlbGVjdGVkVGFiJD10aGlzLnN0b3JlLnNlbGVjdChMVyl9b25TY2FsYXJUYWJsZUNvbHVtblRvZ2dsZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChHZyhlKSl9b25TY2FsYXJUYWJsZUNvbHVtbkVkaXQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChqZyhlKSl9b25TY2FsYXJUYWJsZUNvbHVtbkVkaXRvckNsb3NlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2godVQoKSl9b25UYWJDaGFuZ2UoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChkVCh7dGFiOmV9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoSWUpKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLXNjYWxhci1jb2x1bW4tZWRpdG9yIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsInNpbmdsZUhlYWRlcnMiLCJyYW5nZUhlYWRlcnMiLCJzZWxlY3RlZFRhYiIsIm9uU2NhbGFyVGFibGVDb2x1bW5Ub2dnbGVkIiwib25TY2FsYXJUYWJsZUNvbHVtbkVkaXQiLCJvblNjYWxhclRhYmxlQ29sdW1uRWRpdG9yQ2xvc2VkIiwib25UYWJDaGFuZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihmKDAsIm1ldHJpY3Mtc2NhbGFyLWNvbHVtbi1lZGl0b3ItY29tcG9uZW50IiwwKSxBKCJvblNjYWxhclRhYmxlQ29sdW1uVG9nZ2xlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25TY2FsYXJUYWJsZUNvbHVtblRvZ2dsZWQobyl9KSgib25TY2FsYXJUYWJsZUNvbHVtbkVkaXQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uU2NhbGFyVGFibGVDb2x1bW5FZGl0KG8pfSkoIm9uU2NhbGFyVGFibGVDb2x1bW5FZGl0b3JDbG9zZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25TY2FsYXJUYWJsZUNvbHVtbkVkaXRvckNsb3NlZCgpfSkoIm9uVGFiQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblRhYkNoYW5nZShvKX0pLFUoMSwiYXN5bmMiKSxVKDIsImFzeW5jIiksVSgzLCJhc3luYyIpLGcoKSksMiZlJiZiKCJzaW5nbGVIZWFkZXJzIixHKDEsMyxpLnNpbmdsZUhlYWRlcnMkKSkoInJhbmdlSGVhZGVycyIsRygyLDUsaS5yYW5nZUhlYWRlcnMkKSkoInNlbGVjdGVkVGFiIixHKDMsNyxpLnNlbGVjdGVkVGFiJCkpfSxkZXBlbmRlbmNpZXM6W0JRLGN0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxZZz0oKCk9PihmdW5jdGlvbihuKXtuW24uT1JJR0lOQUw9MF09Ik9SSUdJTkFMIixuW24uREVSSVZFRD0xXT0iREVSSVZFRCJ9KFlnfHwoWWc9e30pKSxZZykpKCksbkVlPVcoRFcsUnUsKG4sdCk9Pm5ldyBTZXQoT2JqZWN0LmVudHJpZXMobi5zY2FsYXJzLnRhZ1RvUnVucykuZmlsdGVyKChbLGVdKT0+IXR8fCF0LnNpemV8fGUuc29tZShpPT50Py5nZXQoaSkpKS5tYXAoKFtlXSk9PmUpKSksaUVlPVcobzEsUnUsTlcsbkVlLChuLHQsZSxpKT0+e2xldCByPUFycmF5LmZyb20odD8udmFsdWVzKCl8fFtdKS5zb21lKEJvb2xlYW4pO3JldHVybiBuLmZpbHRlcihvPT5ncyhvLnBsdWdpbik/Qm9vbGVhbih0JiZ0LmdldChvLnJ1bklkKSk6IWV8fCFyfHxvLnBsdWdpbiE9PUFuLlNDQUxBUlN8fGkuaGFzKG8udGFnKSl9KSxqaD1XKGlFZSxuPT5uLnNvcnQoKHQsZSk9PnZ5KHQudGFnLGUudGFnKSkpLHFUPXtmaWx0ZXJSdW5JdGVtc0J5UmVnZXg6KG4sdCxlKT0+dD9uLmZpbHRlcihpPT5TMSh7cnVuTmFtZTppLnJ1bi5uYW1lLGV4cGVyaW1lbnRBbGlhczppLmV4cGVyaW1lbnRBbGlhc30sdCxlKSk6bixtYXRjaEZpbHRlcjoobix0KT0+dm9pZCAwPT09dD9uLmluY2x1ZGVVbmRlZmluZWQ6bi50eXBlPT09aW8uRElTQ1JFVEU/bi5maWx0ZXJWYWx1ZXMuaW5jbHVkZXModCk6bi50eXBlPT09aW8uSU5URVJWQUwmJiJudW1iZXIiPT10eXBlb2YgdCYmbi5maWx0ZXJMb3dlclZhbHVlPD10JiZ0PD1uLmZpbHRlclVwcGVyVmFsdWUsZmlsdGVyUnVuSXRlbXNCeUhwYXJhbUFuZE1ldHJpY0ZpbHRlcjoobix0LGUpPT5uLmZpbHRlcigoe2hwYXJhbXM6aSxtZXRyaWNzOnJ9KT0+e2xldCBvPVsuLi50LmVudHJpZXMoKV0uZXZlcnkoKFtzLGxdKT0+e2xldCBjPWkuZ2V0KHMpO3JldHVybiBxVC5tYXRjaEZpbHRlcihsLGMpfSksYT1bLi4uZS5lbnRyaWVzKCldLmV2ZXJ5KChbcyxsXSk9PntsZXQgYz1yLmdldChzKTtyZXR1cm4gcVQubWF0Y2hGaWx0ZXIobCxjKX0pO3JldHVybiBvJiZhfSl9LFhUPVcoUkYsSVMsQVMsKG4sdCxlKT0+bmV3IE1hcChbLi4ubiwuLi50LC4uLmVdKSksckVlPVcodjEseXUsUnUsUHUscXMsKG4sdCxlLGkscik9Pm4ubWFwKG89PntsZXQgYT1uZXcgTWFwOyhvLmhwYXJhbXN8fFtdKS5mb3JFYWNoKGw9PnthLnNldChsLm5hbWUsbC52YWx1ZSl9KTtsZXQgcz1uZXcgTWFwO3JldHVybihvLm1ldHJpY3N8fFtdKS5mb3JFYWNoKGw9PntzLnNldChsLnRhZyxsLnZhbHVlKX0pLHtydW46byxleHBlcmltZW50TmFtZTp0W28uZXhwZXJpbWVudElkXXx8IiIsZXhwZXJpbWVudEFsaWFzOnJbby5leHBlcmltZW50SWRdLHNlbGVjdGVkOkJvb2xlYW4oZSYmZS5nZXQoby5pZCkpLHJ1bkNvbG9yOmlbby5pZF0saHBhcmFtczphLG1ldHJpY3M6c319KSksQU49VyhBdSxyRWUsSVMsQVMsV3MsKG4sdCxlLGkscik9PntsZXQgbz1xVC5maWx0ZXJSdW5JdGVtc0J5UmVnZXgodCxuLHI9PT1Dbi5DT01QQVJFX0VYUEVSSU1FTlQpO3JldHVybiBxVC5maWx0ZXJSdW5JdGVtc0J5SHBhcmFtQW5kTWV0cmljRmlsdGVyKG8sZSxpKX0pLHpRPVcoQU4sbj0+bmV3IFNldChuLm1hcCgoe3J1bjp7aWQ6dH19KT0+dCkpKSxVUT1XKERTLG9yLChuLHQpPT50P24ubWFwKGU9Pih7dHlwZTpndC5IUEFSQU0sbmFtZTplLm5hbWUsZGlzcGxheU5hbWU6ZS5kaXNwbGF5TmFtZXx8ZS5uYW1lLGVuYWJsZWQ6ITEsdGFnczplLmRpZmZlcnM/WyJkaWZmZXJzIl06W10scmVtb3ZhYmxlOiEwLHNvcnRhYmxlOiEwLG1vdmFibGU6ITAsZmlsdGVyYWJsZTohMH0pKTpbXSksWVQ9VyhVUSxtZCwobix0KT0+e2xldCBlPW5ldyBTZXQodC5tYXAoKHtuYW1lOml9KT0+aSkpO3JldHVybiBuLmZpbHRlcihpPT4hZS5oYXMoaS5uYW1lKSl9KSxRZz0oX3Mobj0+VyhlMihuKSxVUSwodCxlKT0+Wy4uLnQsLi4uZV0pKSwoKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5yZWY9ZSx0aGlzLmNka1Njcm9sbGFibGU9aSx0aGlzLm9uVmlzaWJpbGl0eUNoYW5nZT1uZXcgRix0aGlzLm5nVW5zdWJzY3JpYmUkPW5ldyBFZSx0aGlzLm9uRXZlbnQkPW5ldyBFZX1uZ09uSW5pdCgpe2xldCBlPXtyb290OnRoaXMuY2RrU2Nyb2xsYWJsZT90aGlzLmNka1Njcm9sbGFibGUuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQ6bnVsbH07dGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlck1hcmdpbiYmKGUucm9vdE1hcmdpbj10aGlzLmludGVyc2VjdGlvbk9ic2VydmVyTWFyZ2luKTtsZXQgaT1uZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIocj0+e3RoaXMub25FdmVudCQubmV4dChyKX0sZSk7aS5vYnNlcnZlKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQpLHRoaXMubmdVbnN1YnNjcmliZSQuc3Vic2NyaWJlKCgpPT57aS51bm9ic2VydmUodGhpcy5yZWYubmF0aXZlRWxlbWVudCl9KSx0aGlzLm9uRXZlbnQkLnBpcGUoaXQodGhpcy5uZ1Vuc3Vic2NyaWJlJCkpLnN1YnNjcmliZShyPT57bGV0IG89ci5zbGljZSgtMSlbMF07dGhpcy5vblZpc2liaWxpdHlDaGFuZ2UuZW1pdCh7dmlzaWJsZTpvLmlzSW50ZXJzZWN0aW5nfSl9KX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZSQubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZSQuY29tcGxldGUoKX13YWl0Rm9yRXZlbnRGb3JUZXN0T25seSgpe3JldHVybiBuZXcgUHJvbWlzZShlPT50aGlzLm9uRXZlbnQkLnBpcGUoTHQoMSkpLnN1YnNjcmliZSgoKT0+e2UoKX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyh4ZSksQyh4ZCw4KSl9LG4uXHUwMjc1ZGlyPU1lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm9ic2VydmVJbnRlcnNlY3Rpb24iLCIiXV0saW5wdXRzOntpbnRlcnNlY3Rpb25PYnNlcnZlck1hcmdpbjoiaW50ZXJzZWN0aW9uT2JzZXJ2ZXJNYXJnaW4ifSxvdXRwdXRzOntvblZpc2liaWxpdHlDaGFuZ2U6Im9uVmlzaWJpbGl0eUNoYW5nZSJ9fSksbn0pKCkpLGpRPSIvc2NhbGFyX3N1bW1hcnkiO2Z1bmN0aW9uIFpnKG4sdCl7bGV0IGU9bjtyZXR1cm4gdCYmbi5zdGFydHNXaXRoKHQrIi8iKSYmKGU9bi5zbGljZSh0Lmxlbmd0aCsxKSksZS5lbmRzV2l0aChqUSkmJihlPWUuc2xpY2UoMCwtalEubGVuZ3RoKSksZXx8bn12YXIgUVQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuc3RvcmU9ZSx0aGlzLmNoYW5nZURldGVjdG9yUmVmPWksdGhpcy5ocmVmQXR0cj12b2lkIDAsdGhpcy5zcmNBdHRyPXZvaWQgMCx0aGlzLmluY2x1ZGVGZWF0dXJlRmxhZ3M9ITB9Z2V0VXJsV2l0aEZlYXR1cmVGbGFncyhlKXtyZXR1cm4gdGhpcy5zdG9yZS5zZWxlY3QoSGYpLnBpcGUocShpPT57aWYoT2JqZWN0LmtleXMoaSkubGVuZ3RoPjApe2xldCByPW5ldyBVUkxTZWFyY2hQYXJhbXMoW1sidGVuc29yQm9hcmRGZWF0dXJlRmxhZ3MiLEpTT04uc3RyaW5naWZ5KGkpXV0pLG89ZS5pbmNsdWRlcygiPyIpPyImIjoiPyI7cmV0dXJuIGUrbytTdHJpbmcocil9cmV0dXJuIGV9KSl9c2V0IGhyZWYoZSl7ZSYmQUModGhpcy5nZXRVcmxXaXRoRmVhdHVyZUZsYWdzKGUpKS50aGVuKGk9Pnt0aGlzLmhyZWZBdHRyPWksdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCl9KX1zZXQgc3JjKGUpe2UmJkFDKHRoaXMuZ2V0VXJsV2l0aEZlYXR1cmVGbGFncyhlKSkudGhlbihpPT57dGhpcy5zcmNBdHRyPWksdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCl9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhJZSksQyhRdCkpfSxuLlx1MDI3NWRpcj1NZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJhIiwiaW5jbHVkZUZlYXR1cmVGbGFncyIsIiJdLFsiaW1nIiwiaW5jbHVkZUZlYXR1cmVGbGFncyIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmQmUoImhyZWYiLGkuaHJlZkF0dHIsVnMpKCJzcmMiLGkuc3JjQXR0cixWcyl9LGlucHV0czp7aW5jbHVkZUZlYXR1cmVGbGFnczoiaW5jbHVkZUZlYXR1cmVGbGFncyIsaHJlZjoiaHJlZiIsc3JjOiJzcmMifX0pLG59KSgpLG9FZT1bIm1lYXN1cmVyIl0sYUVlPVsiaW5wdXQiXSxXUT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuY2hhbmdlRGV0ZWN0b3I9ZSx0aGlzLnBsYWNlaG9sZGVyPSIiLHRoaXMuc3R5bGU9ImRlZmF1bHQiLHRoaXMucGF0dGVyblJlZ2V4PW5ldyBSZWdFeHAoIi4qIiksdGhpcy5pc1ZhbGlkPSEwLHRoaXMub25WYWx1ZUNoYW5nZT1uZXcgRix0aGlzLmJsdXI9bmV3IEYsdGhpcy5mb2N1cz1uZXcgRix0aGlzLmtleWRvd249bmV3IEYsdGhpcy5rZXl1cD1uZXcgRix0aGlzLmludGVybmFsVmFsdWU9IiIsdGhpcy5mb250Q2hhbmdlTGlzdGVuZXI9dGhpcy51cGRhdGVJbnB1dFdpZHRoLmJpbmQodGhpcyl9bmdPbkluaXQoKXtkb2N1bWVudC5mb250cyYmZG9jdW1lbnQuZm9udHMuYWRkRXZlbnRMaXN0ZW5lcigibG9hZGluZ2RvbmUiLHRoaXMuZm9udENoYW5nZUxpc3RlbmVyKX1uZ09uRGVzdHJveSgpe2RvY3VtZW50LmZvbnRzJiZkb2N1bWVudC5mb250cy5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkaW5nZG9uZSIsdGhpcy5mb250Q2hhbmdlTGlzdGVuZXIpfW5nT25DaGFuZ2VzKGUpe2UucGF0dGVybiYmKHRoaXMucGF0dGVyblJlZ2V4PW5ldyBSZWdFeHAodGhpcy5wYXR0ZXJuPz8iIikpLGUudmFsdWUmJih0aGlzLmludGVybmFsVmFsdWU9dGhpcy52YWx1ZSksdGhpcy5pc1ZhbGlkPXRoaXMucGF0dGVyblJlZ2V4LnRlc3QodGhpcy5pbnRlcm5hbFZhbHVlKX1uZ0FmdGVyVmlld0NoZWNrZWQoKXt0aGlzLnVwZGF0ZUlucHV0V2lkdGgoKX1vbklucHV0KGUpe2xldCBpPXRoaXMuaW50ZXJuYWxWYWx1ZTt0aGlzLmludGVybmFsVmFsdWU9dGhpcy5pbnB1dEVsUmVmLm5hdGl2ZUVsZW1lbnQudmFsdWUsdGhpcy5pbnRlcm5hbFZhbHVlIT09aSYmKHRoaXMuaXNWYWxpZD10aGlzLnBhdHRlcm5SZWdleC50ZXN0KHRoaXMuaW50ZXJuYWxWYWx1ZSksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSksdGhpcy5vblZhbHVlQ2hhbmdlLmVtaXQoe3ZhbHVlOnRoaXMuaW50ZXJuYWxWYWx1ZX0pfXVwZGF0ZUlucHV0V2lkdGgoKXtsZXR7d2lkdGg6ZX09dGhpcy5tZWFzdXJlckVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5pbnB1dEVsUmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUud2lkdGg9YCR7ZX1weGB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoUXQpKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJjb250ZW50LXdyYXBwaW5nLWlucHV0Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKFVlKG9FZSw3LHhlKSxVZShhRWUsNyx4ZSkpLDImZSl7bGV0IHI7YmUocj12ZSgpKSYmKGkubWVhc3VyZXJFbFJlZj1yLmZpcnN0KSxiZShyPXZlKCkpJiYoaS5pbnB1dEVsUmVmPXIuZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJlhvKGkuc3R5bGUpfSxpbnB1dHM6e3ZhbHVlOiJ2YWx1ZSIscGxhY2Vob2xkZXI6InBsYWNlaG9sZGVyIixzdHlsZToic3R5bGUiLHBhdHRlcm46InBhdHRlcm4ifSxvdXRwdXRzOntvblZhbHVlQ2hhbmdlOiJvblZhbHVlQ2hhbmdlIixibHVyOiJibHVyIixmb2N1czoiZm9jdXMiLGtleWRvd246ImtleWRvd24iLGtleXVwOiJrZXl1cCJ9LGZlYXR1cmVzOltxdF0sZGVjbHM6Nix2YXJzOjcsY29uc3RzOltbImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibWVhc3VyZXIiXSxbIm1lYXN1cmVyIiwiIl0sWyJhdXRvY29tcGxldGUiLCJvZmYiLCJzcGVsbGNoZWNrIiwiZmFsc2UiLCJ0eXBlIiwidGV4dCIsMywidmFsdWUiLCJwbGFjZWhvbGRlciIsImJsdXIiLCJmb2N1cyIsImlucHV0Iiwia2V5ZG93biIsImtleXVwIl0sWyJpbnB1dCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGYoMCwic3BhbiIpKDEsInNwYW4iLDAsMSksVCgzKSxnKCksZig0LCJpbnB1dCIsMiwzKSxBKCJibHVyIixmdW5jdGlvbihvKXtyZXR1cm4gaS5ibHVyLmVtaXQobyl9KSgiZm9jdXMiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmZvY3VzLmVtaXQobyl9KSgiaW5wdXQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uSW5wdXQobyl9KSgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkua2V5ZG93bi5lbWl0KG8pfSkoImtleXVwIixmdW5jdGlvbihvKXtyZXR1cm4gaS5rZXl1cC5lbWl0KG8pfSksZygpKCkpLDImZSYmKG50KCJjb250YWluZXIiLCEwKSgiaXMtdmFsaWQiLGkuaXNWYWxpZCksdigzKSxrdChpLmludGVybmFsVmFsdWV8fGkucGxhY2Vob2xkZXIpLHYoMSksYigidmFsdWUiLGkudmFsdWUpKCJwbGFjZWhvbGRlciIsaS5wbGFjZWhvbGRlcikpfSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWZsZXg7d2lkdGg6bWF4LWNvbnRlbnR9W19uZ2hvc3QtJUNPTVAlXTpmb2N1cy13aXRoaW4gICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6I2Y1N2MwMH0uZGVmYXVsdFtfbmdob3N0LSVDT01QJV06aG92ZXIgICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6I2ViZWJlYn0uZXJyb3JbX25naG9zdC0lQ09NUCVdICAgLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIFtfbmdob3N0LSVDT01QJV0gICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoLmlzLXZhbGlkKXtib3JkZXItY29sb3I6I2VmOWE5YX0uZXJyb3JbX25naG9zdC0lQ09NUCVdICAgLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06aG92ZXIsIC5lcnJvcltfbmdob3N0LSVDT01QJV0gICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cy13aXRoaW4sIFtfbmdob3N0LSVDT01QJV0gICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoLmlzLXZhbGlkKTpob3ZlciwgW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOm5vdCguaXMtdmFsaWQpOmZvY3VzLXdpdGhpbntib3JkZXItY29sb3I6I2VmOWE5YX0uaGlnaC1jb250cmFzdFtfbmdob3N0LSVDT01QJV0gICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6I2JkYmRiZH0uaGlnaC1jb250cmFzdFtfbmdob3N0LSVDT01QJV0gICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpob3Zlcntib3JkZXItY29sb3I6Izc1NzU3NX0uY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItcmFkaXVzOjRweDtib3JkZXI6MnB4IHNvbGlkIHJnYmEoMCwwLDAsMCk7cGFkZGluZzoxcHggMnB4O3Bvc2l0aW9uOnJlbGF0aXZlfS5tZWFzdXJlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt2aXNpYmlsaXR5OmhpZGRlbn0ubWVhc3VyZXJbX25nY29udGVudC0lQ09NUCVdLCBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtsaW5lLWhlaWdodDoxLjQ7cGFkZGluZzowO3doaXRlLXNwYWNlOnByZX0ubWVhc3VyZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5LCBpbnB1dFtfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7d2lkdGg6MmNofWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXthcHBlYXJhbmNlOm5vbmU7YmFja2dyb3VuZC1jb2xvcjppbmhlcml0O2JvcmRlcjowO2NvbG9yOmluaGVyaXQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1mYW1pbHk6aW5oZXJpdDtvdXRsaW5lOjB9aW5wdXRbX25nY29udGVudC0lQ09NUCVdOmZvY3Vze3BhZGRpbmctcmlnaHQ6MWNofSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gbEVlKG4sdCl7aWYoMSZuKXtsZXQgZT1UZSgpO2YoMCwiY29udGVudC13cmFwcGluZy1pbnB1dCIsMyksQSgib25WYWx1ZUNoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIG5lKGUpLGllKHcoKS5hbGlhc0NoYW5nZWQuZW1pdChyKSl9KSxnKCl9aWYoMiZuKXtsZXQgZT13KCk7SHMoZS5pc0FsaWFzTmFtZUxlZ2FsPyJoaWdoLWNvbnRyYXN0IjoiZXJyb3IiKSxiKCJ2YWx1ZSIsZS5hbGlhcy5hbGlhc1RleHQpfX1mdW5jdGlvbiBjRWUobix0KXtpZigxJm4mJihmKDAsInNwYW4iLDQpLFQoMSksZygpKSwyJm4pe2xldCBlPXcoKTtudCgiaWxsZWdhbCIsIWUuaXNBbGlhc05hbWVMZWdhbCksYigidGl0bGUiLGUudGl0bGUpLHYoMSksa3QoZS5hbGlhcy5hbGlhc1RleHQpfX12YXIgS2c9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuaXNBbGlhc05hbWVMZWdhbD0hMCx0aGlzLmFsaWFzQ2hhbmdlZD1uZXcgRn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1sidGItZXhwZXJpbWVudC1hbGlhcyJdXSxpbnB1dHM6e2FsaWFzOiJhbGlhcyIsYWxpYXNFZGl0YWJsZToiYWxpYXNFZGl0YWJsZSIsdGl0bGU6InRpdGxlIixpc0FsaWFzTmFtZUxlZ2FsOiJpc0FsaWFzTmFtZUxlZ2FsIn0sb3V0cHV0czp7YWxpYXNDaGFuZ2VkOiJhbGlhc0NoYW5nZWQifSxkZWNsczo1LHZhcnM6Myxjb25zdHM6W1sxLCJhbGlhcy1udW1iZXIiXSxbInBsYWNlaG9sZGVyIiwiQWxpYXMgZm9yIGV4cGVyaW1lbnQiLDMsInN0eWxlIiwidmFsdWUiLCJvblZhbHVlQ2hhbmdlIiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbIm5vRWRpdEFsaWFzTmFtZSIsIiJdLFsicGxhY2Vob2xkZXIiLCJBbGlhcyBmb3IgZXhwZXJpbWVudCIsMywidmFsdWUiLCJvblZhbHVlQ2hhbmdlIl0sWzMsInRpdGxlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoZigwLCJzcGFuIiwwKSxUKDEpLGcoKSxTKDIsbEVlLDEsMywiY29udGVudC13cmFwcGluZy1pbnB1dCIsMSksUygzLGNFZSwyLDQsIm5nLXRlbXBsYXRlIixudWxsLDIsanQpKSwyJmUpe2xldCByPXN0KDQpO3YoMSksa3QoaS5hbGlhcy5hbGlhc051bWJlciksdigxKSxiKCJuZ0lmIixpLmFsaWFzRWRpdGFibGUpKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W05lLFdRXSxzdHlsZXM6WyIuYWxpYXMtbnVtYmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTA7Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmViO2NvbG9yOiMyMTIxMjE7Ym9yZGVyLXJhZGl1czoycHg7bWFyZ2luLXJpZ2h0OjJweDtwYWRkaW5nOjAgMnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5hbGlhcy1udW1iZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuYWxpYXMtbnVtYmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmFsaWFzLW51bWJlcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5hbGlhcy1udW1iZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQgIzU1NX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuYWxpYXMtbnVtYmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmFsaWFzLW51bWJlcltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2ZmZn1bX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmV9Il19KSxufSkoKTtmdW5jdGlvbiBkRWUobix0KXsxJm4mJmsoMCwidGItZXhwZXJpbWVudC1hbGlhcyIsMiksMiZuJiZiKCJhbGlhcyIsdygpLmV4cGVyaW1lbnRBbGlhcyl9ZnVuY3Rpb24gdUVlKG4sdCl7MSZuJiYoZigwLCJzcGFuIiksVCgxLCIvIiksZygpKX12YXIgcVE9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1siY2FyZC1ydW4tbmFtZS1jb21wb25lbnQiXV0saW5wdXRzOntuYW1lOiJuYW1lIixleHBlcmltZW50QWxpYXM6ImV4cGVyaW1lbnRBbGlhcyJ9LGRlY2xzOjQsdmFyczozLGNvbnN0czpbWzMsImFsaWFzIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMywiYWxpYXMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihTKDAsZEVlLDEsMSwidGItZXhwZXJpbWVudC1hbGlhcyIsMCksUygxLHVFZSwyLDAsInNwYW4iLDEpLGYoMiwic3BhbiIpLFQoMyksZygpKSwyJmUmJihiKCJuZ0lmIixudWxsIT1pLmV4cGVyaW1lbnRBbGlhcyksdigxKSxiKCJuZ0lmIixudWxsIT1pLmV4cGVyaW1lbnRBbGlhcyksdigyKSxrdChpLm5hbWUpKX0sZGVwZW5kZW5jaWVzOltOZSxLZ10sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFpUPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lfW5nT25Jbml0KCl7dGhpcy5uYW1lJD1JbihbdGhpcy5zdG9yZS5zZWxlY3QoYjEse3J1bklkOnRoaXMucnVuSWR9KV0pLnBpcGUocSgoW2VdKT0+ZnVuY3Rpb24obix0LGUpe2lmKCF0KXJldHVybiBuO2xldCBpPXQ/Lm5hbWU/PyIuLi4iO3JldHVybiBpfSh0aGlzLnJ1bklkLGUpKSksdGhpcy5leHBlcmltZW50QWxpYXMkPUluKFt0aGlzLnN0b3JlLnNlbGVjdChfMSx7cnVuSWQ6dGhpcy5ydW5JZH0pLHRoaXMuc3RvcmUuc2VsZWN0KHFzKV0pLnBpcGUocSgoW2UsaV0pPT5lP2lbZV06bnVsbCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEllKSl9LG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1siY2FyZC1ydW4tbmFtZSJdXSxpbnB1dHM6e3J1bklkOiJydW5JZCJ9LGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsIm5hbWUiLCJleHBlcmltZW50QWxpYXMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihrKDAsImNhcmQtcnVuLW5hbWUtY29tcG9uZW50IiwwKSxVKDEsImFzeW5jIiksVSgyLCJhc3luYyIpLFUoMywiYXN5bmMiKSksMiZlJiYoYigibmFtZSIsRygxLDMsaS5uYW1lJCkpKCJleHBlcmltZW50QWxpYXMiLEcoMyw3LGkuZXhwZXJpbWVudEFsaWFzJCkpLEJlKCJ0aXRsZSIsRygyLDUsaS5uYW1lJCkpKX0sZGVwZW5kZW5jaWVzOltxUSxjdF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gaEVlKG4sdCl7aWYoMSZuJiYoZigwLCJzcGFuIiwyKSxUKDEpLGcoKSksMiZuKXtsZXQgZT13KCk7digxKSxrdChlLmZpcnN0VGV4dFBhcnQoKSl9fXZhciBKZz0oKCk9PntjbGFzcyBue3BhcnNlVmFsdWUoKXtsZXQgZT10aGlzLnZhbHVlLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuLTE9PT1lP3tmaXJzdDoiIixzZWNvbmQ6dGhpcy52YWx1ZX06e2ZpcnN0OnRoaXMudmFsdWUuc2xpY2UoMCxlKSxzZWNvbmQ6dGhpcy52YWx1ZS5zbGljZShlKX19Zmlyc3RUZXh0UGFydCgpe3JldHVybiB0aGlzLnBhcnNlVmFsdWUoKS5maXJzdH1zZWNvbmRUZXh0UGFydCgpe3JldHVybiB0aGlzLnBhcnNlVmFsdWUoKS5zZWNvbmR9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLXRydW5jYXRlZC1wYXRoIl1dLGlucHV0czp7dmFsdWU6InZhbHVlIn0sZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbImNsYXNzIiwiZmlyc3QtdGV4dC1wYXJ0Iiw0LCJuZ0lmIl0sWzEsInNlY29uZC10ZXh0LXBhcnQiXSxbMSwiZmlyc3QtdGV4dC1wYXJ0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoUygwLGhFZSwyLDEsInNwYW4iLDApLGYoMSwic3BhbiIsMSksVCgyKSxnKCkpLDImZSYmKGIoIm5nSWYiLGkuZmlyc3RUZXh0UGFydCgpLmxlbmd0aD4wKSx2KDIpLGt0KGkuc2Vjb25kVGV4dFBhcnQoKSkpfSxkZXBlbmRlbmNpZXM6W05lXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWZsZXg7d2hpdGUtc3BhY2U6bm93cmFwfS5maXJzdC10ZXh0LXBhcnRbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MSAxIDRjaDttYXgtd2lkdGg6bWF4LWNvbnRlbnR9LmZpcnN0LXRleHQtcGFydFtfbmdjb250ZW50LSVDT01QJV0sIC5zZWNvbmQtdGV4dC1wYXJ0W19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc30iXX0pLG59KSgpO2Z1bmN0aW9uIG1FZShuLHQpezEmbiYmaygwLCJtYXQtaWNvbiIsMil9ZnVuY3Rpb24gZkVlKG4sdCl7MSZuJiZrKDAsIm1hdC1pY29uIiwzKX12YXIgJGc9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuaXNDbGlwcGVkPSExLHRoaXMuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkPSExfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJ2aXMtbGlua2VkLXRpbWUtc2VsZWN0aW9uLXdhcm5pbmciXV0saW5wdXRzOntpc0NsaXBwZWQ6ImlzQ2xpcHBlZCIsaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkOiJpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQifSxkZWNsczoyLHZhcnM6Mixjb25zdHM6W1siZGF0YS12YWx1ZSIsImNsaXBwZWQiLCJzdmdJY29uIiwiaW5mb19vdXRsaW5lXzI0cHgiLCJ0aXRsZSIsIkxpbmtlZCBzdGVwIGlzIG5vdCBmb3VuZCBpbiB0aGlzIHZpc3VhbGl6YXRpb24uIFdlIGhpZ2hsaWdodGVkIHRoZSBjbG9zZXN0IHN0ZXAgZm9yIHlvdS4iLDQsIm5nSWYiXSxbImRhdGEtdmFsdWUiLCJjbG9zZXN0U3RlcEhpZ2hsaWdodGVkIiwic3ZnSWNvbiIsImluZm9fb3V0bGluZV8yNHB4IiwidGl0bGUiLCJEYXRhIGlzIG5vdCBmb3VuZCBvbiBzZWxlY3RlZCBzdGVwLiBXZSBoaWdobGlnaHRlZCB0aGUgY2xvc2VzdCBzdGVwIGZvciB5b3UuIiw0LCJuZ0lmIl0sWyJkYXRhLXZhbHVlIiwiY2xpcHBlZCIsInN2Z0ljb24iLCJpbmZvX291dGxpbmVfMjRweCIsInRpdGxlIiwiTGlua2VkIHN0ZXAgaXMgbm90IGZvdW5kIGluIHRoaXMgdmlzdWFsaXphdGlvbi4gV2UgaGlnaGxpZ2h0ZWQgdGhlIGNsb3Nlc3Qgc3RlcCBmb3IgeW91LiJdLFsiZGF0YS12YWx1ZSIsImNsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQiLCJzdmdJY29uIiwiaW5mb19vdXRsaW5lXzI0cHgiLCJ0aXRsZSIsIkRhdGEgaXMgbm90IGZvdW5kIG9uIHNlbGVjdGVkIHN0ZXAuIFdlIGhpZ2hsaWdodGVkIHRoZSBjbG9zZXN0IHN0ZXAgZm9yIHlvdS4iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihTKDAsbUVlLDEsMCwibWF0LWljb24iLDApLFMoMSxmRWUsMSwwLCJtYXQtaWNvbiIsMSkpLDImZSYmKGIoIm5nSWYiLGkuaXNDbGlwcGVkKSx2KDEpLGIoIm5nSWYiLGkuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkKSl9LGRlcGVuZGVuY2llczpbTmUsYm5dLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17Y29sb3I6I2QzMmYyZjtoZWlnaHQ6MWVtO2xpbmUtaGVpZ2h0OjA7ZGlzcGxheTppbmxpbmUtZmxleH1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV17Y29sb3I6I2QzMmYyZn1bX25naG9zdC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBnRWUobix0KXtpZigxJm4mJihmKDAsInNwYW4iLDE5KSxUKDEpLFUoMiwibnVtYmVyIiksZygpKSwyJm4pe2xldCBlPXcoKTt2KDEpLFZlKCJTdGVwICIsRygyLDEsZS5zdGVwc1tlLnN0ZXBJbmRleF0pLCIiKX19ZnVuY3Rpb24gX0VlKG4sdCl7aWYoMSZuJiYoZigwLCJzcGFuIiwyMCksVCgxKSxVKDIsIm51bWJlciIpLFUoMywibnVtYmVyIiksZygpKSwyJm4pe2xldCBlPXcoKTt2KDEpLGx1KCJTYW1wbGUgIixHKDIsMixlLnNhbXBsZSsxKSwiLyIsRygzLDQsZS5udW1TYW1wbGUpLCIiKX19ZnVuY3Rpb24gYkVlKG4sdCl7MSZuJiZrKDAsIm1hdC1zcGlubmVyIiwyMSl9ZnVuY3Rpb24gdkVlKG4sdCl7aWYoMSZuJiZrKDAsImRpdiIsMzApLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT13KDMpO0J0KCJsZWZ0IixpLmdldExpbmtlZFRpbWVUaWNrTGVmdFN0eWxlKGUpKSgibWFyZ2luLWxlZnQiLGkuZ2V0TGlua2VkVGltZVRpY2tNYXJnaW5MZWZ0U3R5bGUoZSkpfX1mdW5jdGlvbiB5RWUobix0KXtpZigxJm4mJihmKDAsImRpdiIsMjgpLFMoMSx2RWUsMSw0LCJkaXYiLDI5KSxnKCkpLDImbil7bGV0IGU9dygyKTt2KDEpLGIoIm5nRm9yT2YiLGUuc2VsZWN0ZWRTdGVwcyl9fXZhciB4RWU9ZnVuY3Rpb24obil7cmV0dXJue2ZpbHRlcjpufX07ZnVuY3Rpb24gQ0VlKG4sdCl7aWYoMSZuKXtsZXQgZT1UZSgpO0d0KDApLGYoMSwiZGl2IiwyMikoMiwibWF0LXNsaWRlciIsMjMpKDMsImlucHV0IiwyNCksQSgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiBuZShlKSxpZSh3KCkub25TbGlkZXJJbnB1dChyKSl9KSxnKCkoKSxTKDQseUVlLDIsMSwiZGl2IiwyNSksZygpLGYoNSwiZGl2IiwyNiksayg2LCJpbWciLDI3KSxnKCksV3QoKX1pZigyJm4pe2xldCBlPXcoKTt2KDIpLGIoImRpc2FibGVkIixlLnN0ZXBzLmxlbmd0aDw9MSkoIm1pbiIsMCkoIm1heCIsZS5zdGVwcy5sZW5ndGgtMSkoInN0ZXAiLDEpLHYoMSksYigidmFsdWUiLGUuc3RlcEluZGV4KSx2KDEpLGIoIm5nSWYiLGUubGlua2VkVGltZVNlbGVjdGlvbiksdigyKSxfYigiYWx0IiwiSW1hZ2UgYXQgc3RlcCAiLGUuc3RlcHNbZS5zdGVwSW5kZXhdLCIiKSxaaSgic3JjIixlLmltYWdlVXJsLFZzKSxiKCJuZ1N0eWxlIixVbig5LHhFZSxlLmNzc0ZpbHRlcigpKSl9fWZ1bmN0aW9uIE1FZShuLHQpezEmbiYmKGYoMCwiZGl2IiwzMiksVCgxLCIgRGF0YSBmYWlsZWQgdG8gbG9hZC4gIiksZygpKX1mdW5jdGlvbiB3RWUobix0KXtpZigxJm4mJlMoMCxNRWUsMiwwLCJkaXYiLDMxKSwyJm4pe2xldCBlPXcoKTtiKCJuZ0lmIixlLmxvYWRTdGF0ZT09PWUuRGF0YUxvYWRTdGF0ZS5GQUlMRUQpfX12YXIgU0VlPWZ1bmN0aW9uKG4pe3JldHVybntiYWNrZ3JvdW5kQ29sb3I6bn19LFlRPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLkRhdGFMb2FkU3RhdGU9UmUsdGhpcy5zbGlkZXJTdGFydFBvc2l0aW9uPSIiLHRoaXMuc2xpZGVyVHJhY2tXaWR0aD0iIix0aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb249bnVsbCx0aGlzLmlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZD0hMSx0aGlzLm9uQWN0dWFsU2l6ZVRvZ2dsZT1uZXcgRix0aGlzLnN0ZXBJbmRleENoYW5nZT1uZXcgRix0aGlzLm9uUGluQ2xpY2tlZD1uZXcgRn1jc3NGaWx0ZXIoKXtyZXR1cm5gY29udHJhc3QoJHt0aGlzLmNvbnRyYXN0SW5NaWxsaS8xMH0lKSBicmlnaHRuZXNzKCR7dGhpcy5icmlnaHRuZXNzSW5NaWxsaS8xZTN9KWB9b25TbGlkZXJJbnB1dChlKXt0aGlzLnN0ZXBJbmRleENoYW5nZS5lbWl0KGUpfWNoYW5nZURpc3RpbmN0KGUpe3JldHVybiBlLmN1cnJlbnRWYWx1ZSE9PWUucHJldmlvdXNWYWx1ZX1uZ09uQ2hhbmdlcyhlKXsoZS5zZWxlY3RlZFN0ZXBzJiZ0aGlzLmNoYW5nZURpc3RpbmN0KGUuc2VsZWN0ZWRTdGVwcyl8fGUubGlua2VkVGltZVNlbGVjdGlvbiYmdGhpcy5jaGFuZ2VEaXN0aW5jdChlLmxpbmtlZFRpbWVTZWxlY3Rpb24pKSYmdGhpcy5yZW5kZXJSYW5nZVNsaWRlcigpfXJlbmRlclJhbmdlU2xpZGVyKCl7aWYoIXRoaXMubGlua2VkVGltZVNlbGVjdGlvbnx8IXRoaXMubGlua2VkVGltZVNlbGVjdGlvbi5lbmRTdGVwKXJldHVybjtsZXQgZT10aGlzLnN0ZXBzLmxlbmd0aC0xLGk9dGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uLnN0YXJ0U3RlcDx0aGlzLnN0ZXBzWzBdP3RoaXMuc3RlcHNbMF06dGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uLnN0YXJ0U3RlcCxyPXRoaXMubGlua2VkVGltZVNlbGVjdGlvbi5lbmRTdGVwPnRoaXMuc3RlcHNbZV0/dGhpcy5zdGVwc1tlXTp0aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24uZW5kU3RlcCx7c3RhcnRQb3NpdGlvbjpvLHdpZHRoOmF9PXRoaXMuZ2V0VHJhY2tTdGFydFBvc2l0aW9uQW5kV2lkdGgoaSxyLGUpO3RoaXMuc2xpZGVyU3RhcnRQb3NpdGlvbj0xMDAqbysiJSIsdGhpcy5zbGlkZXJUcmFja1dpZHRoPTEwMCphKyIlIn1nZXRUcmFja1N0YXJ0UG9zaXRpb25BbmRXaWR0aChlLGkscil7bGV0IG89MS9yLGE9MCxzPTAsbD0wO2Zvcig7bDx0aGlzLnN0ZXBzLmxlbmd0aC0xO2wrKyl7bGV0IGM9dGhpcy5zdGVwc1tsXSxkPXRoaXMuc3RlcHNbbCsxXTtpZihjPD1lJiZlPD1kKXthKz0oZS1jKS8oZC1jKTticmVha319Zm9yKGE9KGErbCkqbztsPHRoaXMuc3RlcHMubGVuZ3RoLTE7bCsrKXtsZXQgYz10aGlzLnN0ZXBzW2xdLGQ9dGhpcy5zdGVwc1tsKzFdO2lmKGU+PWMmJmk8PWQpe3M9KGktZSkvKGQtYyk7YnJlYWt9aWYoZT49YyYmaT49ZClzKz0oZC1lKS8oZC1jKTtlbHNle2lmKCEoaT49ZCkpe3MrPShpLWMpLyhkLWMpO2JyZWFrfXMrPTF9fXJldHVybiBzKj1vLChhPjF8fGE8MCkmJihhPTApLHtzdGFydFBvc2l0aW9uOmEsd2lkdGg6c319Z2V0TGlua2VkVGltZVRpY2tMZWZ0U3R5bGUoZSl7aWYoLTE9PXRoaXMuc3RlcHMuaW5kZXhPZihlKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RlcEluZGV4OiBzdGVwSW5kZXggdmFsdWUgaXMgbm90IGluY2x1ZGVkIGluIHN0ZXBzIik7cmV0dXJuIHRoaXMuc3RlcHMuaW5kZXhPZihlKS8odGhpcy5zdGVwcy5sZW5ndGgtMSkqMTAwKyIlIn1nZXRMaW5rZWRUaW1lVGlja01hcmdpbkxlZnRTdHlsZShlKXtpZigtMT09dGhpcy5zdGVwcy5pbmRleE9mKGUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdGVwSW5kZXg6IHN0ZXBJbmRleCB2YWx1ZSBpcyBub3QgaW5jbHVkZWQgaW4gc3RlcHMiKTtyZXR1cm5gLSR7dGhpcy5zdGVwcy5pbmRleE9mKGUpLyh0aGlzLnN0ZXBzLmxlbmd0aC0xKSoxMn1weGB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbImltYWdlLWNhcmQtY29tcG9uZW50Il1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZudCgiYWN0dWFsLXNpemUiLGkuc2hvd0FjdHVhbFNpemUpfSxpbnB1dHM6e2xvYWRTdGF0ZToibG9hZFN0YXRlIix0aXRsZToidGl0bGUiLHRhZzoidGFnIixydW5JZDoicnVuSWQiLHNhbXBsZToic2FtcGxlIixudW1TYW1wbGU6Im51bVNhbXBsZSIsaW1hZ2VVcmw6ImltYWdlVXJsIixzdGVwSW5kZXg6InN0ZXBJbmRleCIsc3RlcHM6InN0ZXBzIixicmlnaHRuZXNzSW5NaWxsaToiYnJpZ2h0bmVzc0luTWlsbGkiLGNvbnRyYXN0SW5NaWxsaToiY29udHJhc3RJbk1pbGxpIixzaG93QWN0dWFsU2l6ZToic2hvd0FjdHVhbFNpemUiLHJ1bkNvbG9yU2NhbGU6InJ1bkNvbG9yU2NhbGUiLGFsbG93VG9nZ2xlQWN0dWFsU2l6ZToiYWxsb3dUb2dnbGVBY3R1YWxTaXplIixpc1Bpbm5lZDoiaXNQaW5uZWQiLHNlbGVjdGVkU3RlcHM6InNlbGVjdGVkU3RlcHMiLGxpbmtlZFRpbWVTZWxlY3Rpb246ImxpbmtlZFRpbWVTZWxlY3Rpb24iLGlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZDoiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIn0sb3V0cHV0czp7b25BY3R1YWxTaXplVG9nZ2xlOiJvbkFjdHVhbFNpemVUb2dnbGUiLHN0ZXBJbmRleENoYW5nZToic3RlcEluZGV4Q2hhbmdlIixvblBpbkNsaWNrZWQ6Im9uUGluQ2xpY2tlZCJ9LGZlYXR1cmVzOltxdF0sZGVjbHM6MjEsdmFyczoxNixjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdCxlO3JldHVybiB0PSRsb2NhbGl6ZWA6QSBidXR0b24gdG8gcGluIGEgY2FyZC7ikJ9lNjY1ZGM3MTJiZDVmMThkNGRmYTNhMjllMTI1ZDU2NWNjNTFlMmY24pCfNzI4NDYwNjQyNjIzNDM3NTM0NDpQaW4gY2FyZGAsZT0kbG9jYWxpemVgOkEgYnV0dG9uIG9uIGFuIGltYWdlIGNhcmQgdGhhdCB0b2dnbGVzIGFjdHVhbCBpbWFnZSBzaXplLuKQnzNjYTA1ZWYzYTZlM2EzNzA2NWY1ZTBmNjljNWQ1YTIxNzhkOTA3OTHikJ83NjM1MTAxOTM2NjY0Nzg5MTQwOlRvZ2dsZSBhY3R1YWwgaW1hZ2Ugc2l6ZWAsW1sxLCJoZWFkaW5nIl0sWzEsImxpbmUiXSxbMSwidGFnIl0sWzEsInRhZy1wYXRoIiwzLCJ0aXRsZSIsInZhbHVlIl0sWzMsImlzQ2xpcHBlZCIsImlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCJdLFsxLCJjb250cm9scyJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsdCwzLCJjbGljayJdLFszLCJzdmdJY29uIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixlLCJ0aXRsZSIsIlRvZ2dsZSBhY3R1YWwgaW1hZ2Ugc2l6ZSIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsic3ZnSWNvbiIsImltYWdlX3NlYXJjaF8yNHB4Il0sWzEsInJ1biJdLFsxLCJkb3QiLDMsIm5nU3R5bGUiXSxbMSwicnVuLXRleHQiLDMsInJ1bklkIl0sWzEsIm1ldGFkYXRhIl0sWyJjbGFzcyIsInN0ZXAiLDQsIm5nSWYiXSxbImNsYXNzIiwic2FtcGxlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImxvYWRpbmciLCJkaWFtZXRlciIsIjE4Iiw0LCJuZ0lmIl0sWzQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9JbWFnZURhdGEiLCIiXSxbMSwic3RlcCJdLFsxLCJzYW1wbGUiXSxbImRpYW1ldGVyIiwiMTgiLDEsImxvYWRpbmciXSxbMSwic2xpZGVyLXJvdyJdLFsiY29sb3IiLCJwcmltYXJ5IiwxLCJzdGVwLXNsaWRlciIsMywiZGlzYWJsZWQiLCJtaW4iLCJtYXgiLCJzdGVwIl0sWyJtYXRTbGlkZXJUaHVtYiIsIiIsMywidmFsdWUiLCJ2YWx1ZUNoYW5nZSJdLFsiY2xhc3MiLCJsaW5rZWQtdGltZS13cmFwcGVyIiw0LCJuZ0lmIl0sWzEsImltZy1jb250YWluZXIiXSxbMywiYWx0Iiwic3JjIiwibmdTdHlsZSIsImluY2x1ZGVGZWF0dXJlRmxhZ3MiXSxbMSwibGlua2VkLXRpbWUtd3JhcHBlciJdLFsiY2xhc3MiLCJsaW5rZWQtdGltZS10aWNrIiwzLCJsZWZ0IiwibWFyZ2luLWxlZnQiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJsaW5rZWQtdGltZS10aWNrIl0sWyJjbGFzcyIsImVtcHR5LW1lc3NhZ2UiLDQsIm5nSWYiXSxbMSwiZW1wdHktbWVzc2FnZSJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihmKDAsImRpdiIsMCkoMSwiZGl2IiwxKSgyLCJzcGFuIiwyKSxrKDMsInRiLXRydW5jYXRlZC1wYXRoIiwzKSg0LCJ2aXMtbGlua2VkLXRpbWUtc2VsZWN0aW9uLXdhcm5pbmciLDQpLGcoKSxmKDUsInNwYW4iLDUpKDYsImJ1dHRvbiIsNiksQSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25QaW5DbGlja2VkLmVtaXQoIWkuaXNQaW5uZWQpfSksayg3LCJtYXQtaWNvbiIsNyksZygpLGYoOCwiYnV0dG9uIiw4KSxBKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkFjdHVhbFNpemVUb2dnbGUuZW1pdCgpfSksayg5LCJtYXQtaWNvbiIsOSksZygpKCkoKSxmKDEwLCJkaXYiLDEpKDExLCJzcGFuIiwxMCksaygxMiwic3BhbiIsMTEpKDEzLCJjYXJkLXJ1bi1uYW1lIiwxMiksZygpLGYoMTQsImRpdiIsMTMpLFMoMTUsZ0VlLDMsMywic3BhbiIsMTQpLFMoMTYsX0VlLDQsNiwic3BhbiIsMTUpLFMoMTcsYkVlLDEsMCwibWF0LXNwaW5uZXIiLDE2KSxnKCkoKSgpLFMoMTgsQ0VlLDcsMTEsIm5nLWNvbnRhaW5lciIsMTcpLFMoMTksd0VlLDEsMSwibmctdGVtcGxhdGUiLG51bGwsMTgsanQpKSwyJmUpe2xldCByPXN0KDIwKTt2KDMpLFppKCJ0aXRsZSIsaS50YWcpLFppKCJ2YWx1ZSIsaS50aXRsZSksdigxKSxiKCJpc0NsaXBwZWQiLGkubGlua2VkVGltZVNlbGVjdGlvbiYmaS5saW5rZWRUaW1lU2VsZWN0aW9uLmNsaXBwZWQpKCJpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQiLGkuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkKSx2KDIpLEJlKCJ0aXRsZSIsaS5pc1Bpbm5lZD8iVW5waW4gY2FyZCI6IlBpbiBjYXJkIiksdigxKSxiKCJzdmdJY29uIixpLmlzUGlubmVkPyJrZWVwXzI0cHgiOiJrZWVwX291dGxpbmVfMjRweCIpLHYoMSksYigiZGlzYWJsZWQiLCFpLmFsbG93VG9nZ2xlQWN0dWFsU2l6ZSksdig0KSxiKCJuZ1N0eWxlIixVbigxNCxTRWUsaS5ydW5Db2xvclNjYWxlKGkucnVuSWQpKSksdigxKSxiKCJydW5JZCIsaS5ydW5JZCksdigyKSxiKCJuZ0lmIixudWxsIT09aS5zdGVwSW5kZXgmJmkuc3RlcEluZGV4PGkuc3RlcHMubGVuZ3RoKSx2KDEpLGIoIm5nSWYiLGkubnVtU2FtcGxlPjEpLHYoMSksYigibmdJZiIsaS5sb2FkU3RhdGU9PT1pLkRhdGFMb2FkU3RhdGUuTE9BRElORyksdigxKSxiKCJuZ0lmIixudWxsIT09aS5zdGVwSW5kZXgmJmkuc3RlcEluZGV4PGkuc3RlcHMubGVuZ3RoKSgibmdJZkVsc2UiLHIpfX0sZGVwZW5kZW5jaWVzOltubixOZSxNZixRVCxFcixibixOYyxKdSwkdSxaVCxKZywkZyxVc10sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2ZsZXgtYmFzaXM6MzE4cHg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtZ3JvdzoxO2hlaWdodDoxMDAlO292ZXJmbG93OmF1dG87cGFkZGluZzoxNnB4O3BhZGRpbmctdG9wOjRweH0uYWN0dWFsLXNpemVbX25naG9zdC0lQ09NUCVde2hlaWdodDphdXRvfS5oZWFkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Zm9udC1zaXplOjE0cHg7bWFyZ2luLWJvdHRvbTo0cHg7cG9zaXRpb246cmVsYXRpdmV9LmxpbmVbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciBtYXgtY29udGVudH0udGFnW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2dhcDo1cHh9Lm1ldGFkYXRhW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjVweDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7bWF4LXdpZHRoOjE3NXB4O3RleHQtYWxpZ246ZW5kfS50YWctcGF0aFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVufS5ydW5bX25nY29udGVudC0lQ09NUCVde2FsaWduLXNlbGY6YmFzZWxpbmU7ZGlzcGxheTpmbGV4O292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXB9LnJ1bltfbmdjb250ZW50LSVDT01QJV0gICAuZG90W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4Om5vbmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTNweDtoZWlnaHQ6MTNweDtib3JkZXItcmFkaXVzOjUwJTttYXJnaW4tcmlnaHQ6NHB4fS5ydW5bX25nY29udGVudC0lQ09NUCVdICAgLnJ1bi10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczttYXgtd2lkdGg6MTIwcHh9LnJ1bltfbmdjb250ZW50LSVDT01QJV0sIC5zYW1wbGVbX25nY29udGVudC0lQ09NUCVdLCAuc3RlcFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTtmb250LXNpemU6MTNweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAucnVuW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnJ1bltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNhbXBsZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zYW1wbGVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zdGVwW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnN0ZXBbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTt3aGl0ZS1zcGFjZTpub3dyYXA7anVzdGlmeS1zZWxmOmZsZXgtZW5kO2ZsZXgtc2hyaW5rOjA7bWFyZ2luLXJpZ2h0Oi0xMnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LmltZy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZsZXgtZ3JvdzoxO292ZXJmbG93LXk6YXV0bztwb3NpdGlvbjpyZWxhdGl2ZX0uaW1nLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICBpbWdbX25nY29udGVudC0lQ09NUCVde2ltYWdlLXJlbmRlcmluZzotbW96LWNyaXNwLWVkZ2VzO2ltYWdlLXJlbmRlcmluZzpwaXhlbGF0ZWR9LmFjdHVhbC1zaXplW19uZ2hvc3QtJUNPTVAlXSAgIC5pbWctY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzphdXRvO2ZsZXg6bm9uZX1bX25naG9zdC0lQ09NUCVdOm5vdCguYWN0dWFsLXNpemUpICAgaW1nW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTttYXgtaGVpZ2h0OjEwMCU7bWF4LXdpZHRoOjEwMCU7d2lkdGg6YXV0bztoZWlnaHQ6MTAwJTtvYmplY3QtZml0OmNvbnRhaW59LnNsaWRlci1yb3dbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7aGVpZ2h0OjI0cHg7cG9zaXRpb246cmVsYXRpdmV9LnNsaWRlci1yb3dbX25nY29udGVudC0lQ09NUCVdICAgbWF0LXNsaWRlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWxlZnQ6NnB4fS5zdGVwLXNsaWRlcltfbmdjb250ZW50LSVDT01QJV17ZmxleDoxfVtfbmdob3N0LSVDT01QJV0gICAgIC5tYXQtc2xpZGVyLW1pbi12YWx1ZSAubWF0LXNsaWRlci10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmhpZGUtc2xpZGVyLm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10cmFjay13cmFwcGVye2hlaWdodDowfS5lbXB0eS1tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjFlbTtmb250LXNpemU6MTNweH0ubGlua2VkLXRpbWUtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjVweDt3aWR0aDoxMDAlfS5saW5rZWQtdGltZS10aWNrW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTA7Ym9yZGVyLXJhZGl1czo1MCU7aGVpZ2h0OjEycHg7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTJweDt6LWluZGV4Oi0xfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5saW5rZWQtdGltZS10aWNrW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmxpbmtlZC10aW1lLXRpY2tbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzIxMjEyMX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFFRPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnN0b3JlPWUsdGhpcy5kYXRhU291cmNlPWksdGhpcy5mdWxsV2lkdGhDaGFuZ2VkPW5ldyBGLHRoaXMucGluU3RhdGVDaGFuZ2VkPW5ldyBGLHRoaXMuYnJpZ2h0bmVzc0luTWlsbGkkPXRoaXMuc3RvcmUuc2VsZWN0KGwxKSx0aGlzLmNvbnRyYXN0SW5NaWxsaSQ9dGhpcy5zdG9yZS5zZWxlY3QoYzEpLHRoaXMuYWN0dWFsU2l6ZUdsb2JhbFNldHRpbmckPXRoaXMuc3RvcmUuc2VsZWN0KGQxKSx0aGlzLnNob3dBY3R1YWxTaXplPSExLHRoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlZD0hMSx0aGlzLmFjdHVhbFNpemVVaVRvZ2dsZVN1YmplY3Q9bmV3IHhyKHRoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlZCksdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBFZX1vblN0ZXBJbmRleENoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChQVCh7Y2FyZElkOnRoaXMuY2FyZElkLHN0ZXBJbmRleDplfSkpfWlzSW1hZ2VDYXJkTWV0YWRhdGEoZSl7bGV0e3BsdWdpbjppfT1lO3JldHVybiBpPT09QW4uSU1BR0VTfW9uQWN0dWFsU2l6ZVRvZ2dsZSgpe3RoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlZD0hdGhpcy5hY3R1YWxTaXplVWlUb2dnbGVkLHRoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlU3ViamVjdC5uZXh0KHRoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlZCl9bmdPbkluaXQoKXtJbihbdGhpcy5hY3R1YWxTaXplR2xvYmFsU2V0dGluZyQsdGhpcy5hY3R1YWxTaXplVWlUb2dnbGVTdWJqZWN0XSkucGlwZShpdCh0aGlzLm5nVW5zdWJzY3JpYmUpLER0KChbbCxjXSk9Pnt0aGlzLnNob3dBY3R1YWxTaXplPWx8fGMsdGhpcy5mdWxsV2lkdGhDaGFuZ2VkLmVtaXQodGhpcy5zaG93QWN0dWFsU2l6ZSl9KSkuc3Vic2NyaWJlKCgpPT57fSk7bGV0IGk9dGhpcy5zdG9yZS5zZWxlY3QoS3MsdGhpcy5jYXJkSWQpLnBpcGUoaXQodGhpcy5uZ1Vuc3Vic2NyaWJlKSxPZShsPT4hIWwmJnRoaXMuaXNJbWFnZUNhcmRNZXRhZGF0YShsKSkscShsPT5sKSxEYSgxKSksbz1JbihbaSx0aGlzLnN0b3JlLnNlbGVjdCh3dSx0aGlzLmNhcmRJZCldKS5waXBlKGl0KHRoaXMubmdVbnN1YnNjcmliZSkscSgoW2wsY10pPT57bGV0IGQ9bC5ydW5JZDtyZXR1cm4gYyYmYy5oYXNPd25Qcm9wZXJ0eShkKT9jW2RdOltdfSkscmkoKGwsYyk9PmwubGVuZ3RoPT09Yy5sZW5ndGgmJjA9PT1sLmxlbmd0aHx8bD09PWMpLERhKDEpKTt0aGlzLnN0ZXBJbmRleCQ9dGhpcy5zdG9yZS5zZWxlY3QoWkYsdGhpcy5jYXJkSWQpLnBpcGUocShsPT5sP2wuaW5kZXg6bnVsbCkpLHRoaXMuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkJD10aGlzLnN0b3JlLnNlbGVjdChaRix0aGlzLmNhcmRJZCkucGlwZShxKGw9PiEhbCYmbC5pc0Nsb3Nlc3QpKSx0aGlzLmxvYWRTdGF0ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoZ2QsdGhpcy5jYXJkSWQpLHRoaXMudGFnJD1pLnBpcGUocShsPT5sLnRhZykpLHRoaXMudGl0bGUkPXRoaXMudGFnJC5waXBlKHEobD0+WmcobCx0aGlzLmdyb3VwTmFtZSkpKSx0aGlzLnJ1bklkJD1pLnBpcGUocShsPT5sLnJ1bklkKSksdGhpcy5zYW1wbGUkPWkucGlwZShxKGw9Pmwuc2FtcGxlKSksdGhpcy5udW1TYW1wbGUkPWkucGlwZShxKGw9PmwubnVtU2FtcGxlKSksdGhpcy5zdGVwcyQ9dGhpcy5zdG9yZS5zZWxlY3QoQVcsdGhpcy5jYXJkSWQpLHRoaXMuaXNQaW5uZWQkPXRoaXMuc3RvcmUuc2VsZWN0KFN1LHRoaXMuY2FyZElkKSx0aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24kPXRoaXMuc3RvcmUuc2VsZWN0KER1KS5waXBlKFZpKHRoaXMuc3RlcHMkKSxxKChbbCxjXSk9Pmw/WWYobCxNYXRoLm1pbiguLi5jKSxNYXRoLm1heCguLi5jKSk6bnVsbCkpLHRoaXMuc2VsZWN0ZWRTdGVwcyQ9dGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uJC5waXBlKFZpKHRoaXMuc3RlcHMkKSxxKChbbCxjXSk9Pmw/bnVsbD09PWwuZW5kU3RlcD8tMSE9PWMuaW5kZXhPZihsLnN0YXJ0U3RlcCk/W2wuc3RhcnRTdGVwXTpbXTpjLmZpbHRlcihkPT5kPj1sLnN0YXJ0U3RlcCYmZDw9bC5lbmRTdGVwKTpbXSkpO2xldCBzPUluKFtvLHRoaXMuc3RlcEluZGV4JF0pLnBpcGUocSgoW2wsY10pPT5udWxsIT09YyYmbFtjXT9sW2NdOm51bGwpKTt0aGlzLmltYWdlVXJsJD1zLnBpcGUocShsPT5sP3RoaXMuZGF0YVNvdXJjZS5pbWFnZVVybChsLmltYWdlSWQpOm51bGwpKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoSWUpLEMod2MpKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbWFnZS1jYXJkIl1dLGlucHV0czp7Y2FyZElkOiJjYXJkSWQiLGdyb3VwTmFtZToiZ3JvdXBOYW1lIixydW5Db2xvclNjYWxlOiJydW5Db2xvclNjYWxlIn0sb3V0cHV0czp7ZnVsbFdpZHRoQ2hhbmdlZDoiZnVsbFdpZHRoQ2hhbmdlZCIscGluU3RhdGVDaGFuZ2VkOiJwaW5TdGF0ZUNoYW5nZWQifSxkZWNsczoxNyx2YXJzOjUwLGNvbnN0czpbWzMsImxvYWRTdGF0ZSIsInRpdGxlIiwidGFnIiwicnVuSWQiLCJzYW1wbGUiLCJudW1TYW1wbGUiLCJpbWFnZVVybCIsInN0ZXBJbmRleCIsInN0ZXBzIiwiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIiwiYnJpZ2h0bmVzc0luTWlsbGkiLCJjb250cmFzdEluTWlsbGkiLCJydW5Db2xvclNjYWxlIiwic2hvd0FjdHVhbFNpemUiLCJhbGxvd1RvZ2dsZUFjdHVhbFNpemUiLCJpc1Bpbm5lZCIsImxpbmtlZFRpbWVTZWxlY3Rpb24iLCJzZWxlY3RlZFN0ZXBzIiwic3RlcEluZGV4Q2hhbmdlIiwib25BY3R1YWxTaXplVG9nZ2xlIiwib25QaW5DbGlja2VkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZigwLCJpbWFnZS1jYXJkLWNvbXBvbmVudCIsMCksQSgic3RlcEluZGV4Q2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblN0ZXBJbmRleENoYW5nZWQobyl9KSgib25BY3R1YWxTaXplVG9nZ2xlIixmdW5jdGlvbigpe3JldHVybiBpLm9uQWN0dWFsU2l6ZVRvZ2dsZSgpfSkoIm9uUGluQ2xpY2tlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkucGluU3RhdGVDaGFuZ2VkLmVtaXQobyl9KSxVKDEsImFzeW5jIiksVSgyLCJhc3luYyIpLFUoMywiYXN5bmMiKSxVKDQsImFzeW5jIiksVSg1LCJhc3luYyIpLFUoNiwiYXN5bmMiKSxVKDcsImFzeW5jIiksVSg4LCJhc3luYyIpLFUoOSwiYXN5bmMiKSxVKDEwLCJhc3luYyIpLFUoMTEsImFzeW5jIiksVSgxMiwiYXN5bmMiKSxVKDEzLCJhc3luYyIpLFUoMTQsImFzeW5jIiksVSgxNSwiYXN5bmMiKSxVKDE2LCJhc3luYyIpLGcoKSksMiZlJiZiKCJsb2FkU3RhdGUiLEcoMSwxOCxpLmxvYWRTdGF0ZSQpKSgidGl0bGUiLEcoMiwyMCxpLnRpdGxlJCkpKCJ0YWciLEcoMywyMixpLnRhZyQpKSgicnVuSWQiLEcoNCwyNCxpLnJ1bklkJCkpKCJzYW1wbGUiLEcoNSwyNixpLnNhbXBsZSQpKSgibnVtU2FtcGxlIixHKDYsMjgsaS5udW1TYW1wbGUkKSkoImltYWdlVXJsIixHKDcsMzAsaS5pbWFnZVVybCQpKSgic3RlcEluZGV4IixHKDgsMzIsaS5zdGVwSW5kZXgkKSkoInN0ZXBzIixHKDksMzQsaS5zdGVwcyQpKSgiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIixHKDEwLDM2LGkuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkJCkpKCJicmlnaHRuZXNzSW5NaWxsaSIsRygxMSwzOCxpLmJyaWdodG5lc3NJbk1pbGxpJCkpKCJjb250cmFzdEluTWlsbGkiLEcoMTIsNDAsaS5jb250cmFzdEluTWlsbGkkKSkoInJ1bkNvbG9yU2NhbGUiLGkucnVuQ29sb3JTY2FsZSkoInNob3dBY3R1YWxTaXplIixpLnNob3dBY3R1YWxTaXplKSgiYWxsb3dUb2dnbGVBY3R1YWxTaXplIiwhMT09PUcoMTMsNDIsaS5hY3R1YWxTaXplR2xvYmFsU2V0dGluZyQpKSgiaXNQaW5uZWQiLEcoMTQsNDQsaS5pc1Bpbm5lZCQpKSgibGlua2VkVGltZVNlbGVjdGlvbiIsRygxNSw0NixpLmxpbmtlZFRpbWVTZWxlY3Rpb24kKSkoInNlbGVjdGVkU3RlcHMiLEcoMTYsNDgsaS5zZWxlY3RlZFN0ZXBzJCkpfSxkZXBlbmRlbmNpZXM6W1lRLGN0XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksWWk9KCgpPT4oZnVuY3Rpb24obil7bltuLlNWRz0wXT0iU1ZHIixuW24uV0VCR0w9MV09IldFQkdMIn0oWWl8fChZaT17fSkpLFlpKSkoKSx0cj0oKCk9PihmdW5jdGlvbihuKXtuW24uTElORUFSPTBdPSJMSU5FQVIiLG5bbi5MT0cxMD0xXT0iTE9HMTAiLG5bbi5USU1FPTJdPSJUSU1FIn0odHJ8fCh0cj17fSkpLHRyKSkoKSxUcj0oKCk9PihmdW5jdGlvbihuKXtuLk5PTkU9Ik5PTkUiLG4uRFJBR19aT09NSU5HPSJEUkFHX1pPT01JTkciLG4uU0NST0xMX1pPT01JTkc9IlNDUk9MTF9aT09NSU5HIixuLlBBTk5JTkc9IlBBTk5JTkcifShUcnx8KFRyPXt9KSksVHIpKSgpO2Z1bmN0aW9uIElFZShuLHQpezEmbiYmKGYoMCwic3BhbiIpLFQoMSwic2NhbGFyIiksZygpKX1mdW5jdGlvbiBBRWUobix0KXsxJm4mJihmKDAsInNwYW4iKSxUKDEsImhpc3RvZ3JhbSIpLGcoKSl9ZnVuY3Rpb24gUkVlKG4sdCl7MSZuJiYoZigwLCJzcGFuIiksVCgxLCJ1bmtub3duIiksZygpKX1mdW5jdGlvbiBQRWUobix0KXtpZigxJm4mJihHdCgwLDEzKSxTKDEsSUVlLDIsMCwic3BhbiIsMTQpLFMoMixBRWUsMiwwLCJzcGFuIiwxNCksUygzLFJFZSwyLDAsInNwYW4iLDE1KSxXdCgpKSwyJm4pe2xldCBlPXcoMik7YigibmdTd2l0Y2giLGUuY2FyZE1ldGFkYXRhLnBsdWdpbiksdigxKSxiKCJuZ1N3aXRjaENhc2UiLGUuUGx1Z2luVHlwZS5TQ0FMQVJTKSx2KDEpLGIoIm5nU3dpdGNoQ2FzZSIsZS5QbHVnaW5UeXBlLkhJU1RPR1JBTVMpfX1mdW5jdGlvbiBrRWUobix0KXsxJm4mJmhpKDApfWZ1bmN0aW9uIE9FZShuLHQpe2lmKDEmbiYmKGYoMCwib3B0aW9uIiwxNiksVCgxKSxnKCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQ7YigidmFsdWUiLGUuaWQpLHYoMSksa3QoZS5uYW1lKX19ZnVuY3Rpb24gRkVlKG4sdCl7aWYoMSZuKXtsZXQgZT1UZSgpO0d0KDApLGYoMSwiaDIiKSxTKDIsUEVlLDQsMywibmctdGVtcGxhdGUiLG51bGwsMixqdCksZig0LCJzcGFuIiksVCg1LCJEb3dubG9hZFx4YTAiKSxnKCksUyg2LGtFZSwxLDAsIm5nLWNvbnRhaW5lciIsMyksZig3LCJzcGFuIiksVCg4LCJceGEwZGF0YSBmb3JceGEwIiksZygpLGYoOSwiY29kZSIsNCksVCgxMCksZygpKCksZigxMSwibWF0LWRpYWxvZy1jb250ZW50IikoMTIsIm1hdC1mb3JtLWZpZWxkIiw1KSgxMywibWF0LWxhYmVsIiksVCgxNCwiU2VsZWN0IGEgcnVuIHRvIGRvd25sb2FkIGEgZGF0YSBmb3IgYSBzZXJpZXMiKSxnKCksZigxNSwic2VsZWN0Iiw2KSxBKCJjaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiBuZShlKSxpZSh3KCkucnVuU2VsZWN0ZWQuZW1pdChyLnRhcmdldC52YWx1ZSkpfSksZigxNiwib3B0aW9uIiw3KSxUKDE3LCItIiksZygpLFMoMTgsT0VlLDIsMiwib3B0aW9uIiw4KSxnKCkoKSxmKDE5LCJkaXYiLDkpKDIwLCJzcGFuIiksVCgyMSwiRG93bmxvYWQgYXNcdTIwMjYiKSxnKCksVCgyMiwiXHhhMCIpLGYoMjMsImEiLDEwKSxUKDI0LCJKU09OIiksZygpLGYoMjUsImEiLDEwKSxUKDI2LCJDU1YiKSxnKCkoKSgpLGYoMjcsIm1hdC1kaWFsb2ctYWN0aW9ucyIsMTEpKDI4LCJidXR0b24iLDEyKSxUKDI5LCJDbG9zZSIpLGcoKSgpLFd0KCl9aWYoMiZuKXtsZXQgZT1zdCgzKSxpPXcoKTt2KDYpLGIoIm5nVGVtcGxhdGVPdXRsZXQiLGUpLHYoMyksYigidGl0bGUiLGkuY2FyZE1ldGFkYXRhLnRhZyksdigxKSxrdChpLmNhcmRNZXRhZGF0YS50YWcpLHYoNSksYigidmFsdWUiLGkuc2VsZWN0ZWRSdW5JZHx8IiIpLHYoMSksYigidmFsdWUiLCIiKSx2KDIpLGIoIm5nRm9yT2YiLGkucnVucyksdig1KSxiKCJkaXNhYmxlZCIsIWkuZG93bmxvYWRVcmxKc29uKSgiZG93bmxvYWQiLGkuZ2V0RG93bmxvYWROYW1lKCJqc29uIikpKCJocmVmIixpLmRvd25sb2FkVXJsSnNvbixWcyksdigyKSxiKCJkaXNhYmxlZCIsIWkuZG93bmxvYWRVcmxDc3YpKCJkb3dubG9hZCIsaS5nZXREb3dubG9hZE5hbWUoImNzdiIpKSgiaHJlZiIsaS5kb3dubG9hZFVybENzdixWcyl9fWZ1bmN0aW9uIE5FZShuLHQpezEmbiYmVCgwLCJMb2FkaW5nLi4uIil9dmFyIEtRPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLnJ1blNlbGVjdGVkPW5ldyBGLHRoaXMuUGx1Z2luVHlwZT1Bbn1nZXREb3dubG9hZE5hbWUoZSl7bGV0IGk9dGhpcy5ydW5zLmZpbmQocj0+ci5pZD09PXRoaXMuc2VsZWN0ZWRSdW5JZCk7cmV0dXJuIGk/YCR7aS5uYW1lfS4ke2V9YDoiIn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1siZGF0YV9kb3dubG9hZF9kaWFsb2dfY29tcG9uZW50Il1dLGlucHV0czp7Y2FyZE1ldGFkYXRhOiJjYXJkTWV0YWRhdGEiLHJ1bnM6InJ1bnMiLHNlbGVjdGVkUnVuSWQ6InNlbGVjdGVkUnVuSWQiLGRvd25sb2FkVXJsQ3N2OiJkb3dubG9hZFVybENzdiIsZG93bmxvYWRVcmxKc29uOiJkb3dubG9hZFVybEpzb24ifSxvdXRwdXRzOntydW5TZWxlY3RlZDoicnVuU2VsZWN0ZWQifSxkZWNsczozLHZhcnM6Mixjb25zdHM6W1s0LCJuZ0lmIiwibmdJZkVsc2UiXSxbIm5vQ2FyZE1ldGFkYXRhIiwiIl0sWyJkYXRhTmFtZSIsIiJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0Il0sWzEsInRhZy1uYW1lIiwzLCJ0aXRsZSJdLFsiYXBwZWFyYW5jZSIsImZpbGwiLDEsInJ1bi1zZWxlY3RvciJdLFsibWF0TmF0aXZlQ29udHJvbCIsIiIsIm5hbWUiLCJydW4iLCJjZGtGb2N1c0luaXRpYWwiLCIiLCJyZXF1aXJlZCIsIiIsMywidmFsdWUiLCJjaGFuZ2UiXSxbInNlbGVjdGVkIiwiIiwzLCJ2YWx1ZSJdLFszLCJ2YWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImRvd25sb2FkLWNvbnRyb2xzIl0sWyJtYXQtc3Ryb2tlZC1idXR0b24iLCIiLDMsImRpc2FibGVkIiwiZG93bmxvYWQiLCJocmVmIiwiaW5jbHVkZUZlYXR1cmVGbGFncyJdLFsiYWxpZ24iLCJlbmQiXSxbIm1hdC1idXR0b24iLCIiLCJtYXQtZGlhbG9nLWNsb3NlIiwiIl0sWzMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFs0LCJOZ1N3aXRjaERlZmF1bHQiXSxbMywidmFsdWUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihTKDAsRkVlLDMwLDEyLCJuZy1jb250YWluZXIiLDApLFMoMSxORWUsMSwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwxLGp0KSksMiZlKXtsZXQgcj1zdCgyKTtiKCJuZ0lmIixpLmNhcmRNZXRhZGF0YSkoIm5nSWZFbHNlIixyKX19LGRlcGVuZGVuY2llczpbbm4sTmUsZW8sbXIsa3IsUVQseHEsTXEsejcsa2ksWjEsSzEsSjEscXUsUGMsbmxdLHN0eWxlczpbImgyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MS4yNWVtO292ZXJmbG93LXdyYXA6YnJlYWstd29yZH0ucnVuLXNlbGVjdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6LjllbTt3aWR0aDoxMDAlfS5kb3dubG9hZC1jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOi45ZW19LmRvd25sb2FkLWNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGFbX25nY29udGVudC0lQ09NUCVde21hcmdpbjozcHggMTBweCAzcHggMH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLEpRPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuc2VsZWN0ZWRSdW5JZCQ9bmV3IHhyKG51bGwpLHRoaXMuY2FyZE1ldGFkYXRhJD1lLnNlbGVjdChLcyxyLmNhcmRJZCkucGlwZShPZShvPT5Cb29sZWFuKG8pKSksdGhpcy5kb3dubG9hZFVybENzdiQ9SW4oW2Uuc2VsZWN0KEtzLHIuY2FyZElkKSx0aGlzLnNlbGVjdGVkUnVuSWQkXSkucGlwZShxKChbbyxhXSk9Pm8mJmE/aS5kb3dubG9hZFVybChvLnBsdWdpbixvLnRhZyxhLCJjc3YiKTpudWxsKSxrbihudWxsKSksdGhpcy5kb3dubG9hZFVybEpzb24kPUluKFtlLnNlbGVjdChLcyxyLmNhcmRJZCksdGhpcy5zZWxlY3RlZFJ1bklkJF0pLnBpcGUocSgoW28sYV0pPT5vJiZhP2kuZG93bmxvYWRVcmwoby5wbHVnaW4sby50YWcsYSwianNvbiIpOm51bGwpLGtuKG51bGwpKSx0aGlzLnJ1bnMkPUluKFtlLnNlbGVjdChRVyksZS5zZWxlY3Qod3Usci5jYXJkSWQpXSkucGlwZShxKChbbyxhXSk9PmE/T2JqZWN0LmtleXMoYSkubWFwKHM9Pm8uZ2V0KHMpKS5maWx0ZXIoQm9vbGVhbik6W10pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhJZSksQyh3YyksQyhYdikpfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbImRhdGFfZG93bmxvYWRfZGlhbG9nIl1dLGRlY2xzOjYsdmFyczoxNSxjb25zdHM6W1szLCJjYXJkTWV0YWRhdGEiLCJydW5zIiwic2VsZWN0ZWRSdW5JZCIsImRvd25sb2FkVXJsQ3N2IiwiZG93bmxvYWRVcmxKc29uIiwicnVuU2VsZWN0ZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihmKDAsImRhdGFfZG93bmxvYWRfZGlhbG9nX2NvbXBvbmVudCIsMCksQSgicnVuU2VsZWN0ZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLnNlbGVjdGVkUnVuSWQkLm5leHQobyl9KSxVKDEsImFzeW5jIiksVSgyLCJhc3luYyIpLFUoMywiYXN5bmMiKSxVKDQsImFzeW5jIiksVSg1LCJhc3luYyIpLGcoKSksMiZlJiZiKCJjYXJkTWV0YWRhdGEiLEcoMSw1LGkuY2FyZE1ldGFkYXRhJCkpKCJydW5zIixHKDIsNyxpLnJ1bnMkKSkoInNlbGVjdGVkUnVuSWQiLEcoMyw5LGkuc2VsZWN0ZWRSdW5JZCQpKSgiZG93bmxvYWRVcmxDc3YiLEcoNCwxMSxpLmRvd25sb2FkVXJsQ3N2JCkpKCJkb3dubG9hZFVybEpzb24iLEcoNSwxMyxpLmRvd25sb2FkVXJsSnNvbiQpKX0sZGVwZW5kZW5jaWVzOltLUSxjdF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gYWwobix0KXtyZXR1cm4gbjx0Py0xOm4+dD8xOm4+PXQ/MDpOYU59ZnVuY3Rpb24gQ3kobil7cmV0dXJuIDE9PT1uLmxlbmd0aCYmKG49ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFsKG4odCksZSl9fShuKSkse2xlZnQ6ZnVuY3Rpb24odCxlLGkscil7Zm9yKG51bGw9PWkmJihpPTApLG51bGw9PXImJihyPXQubGVuZ3RoKTtpPHI7KXt2YXIgbz1pK3I+Pj4xO24odFtvXSxlKTwwP2k9bysxOnI9b31yZXR1cm4gaX0scmlnaHQ6ZnVuY3Rpb24odCxlLGkscil7Zm9yKG51bGw9PWkmJihpPTApLG51bGw9PXImJihyPXQubGVuZ3RoKTtpPHI7KXt2YXIgbz1pK3I+Pj4xO24odFtvXSxlKT4wP3I9bzppPW8rMX1yZXR1cm4gaX19fXZhciBMYz1DeShhbCkucmlnaHQsRk49TWF0aC5zcXJ0KDUwKSxOTj1NYXRoLnNxcnQoMTApLExOPU1hdGguc3FydCgyKTtmdW5jdGlvbiBNeShuLHQsZSl7dmFyIGksbyxhLHMscj0tMTtpZihlPStlLChuPStuKT09KHQ9K3QpJiZlPjApcmV0dXJuW25dO2lmKChpPXQ8bikmJihvPW4sbj10LHQ9byksMD09PShzPWUwKG4sdCxlKSl8fCFpc0Zpbml0ZShzKSlyZXR1cm5bXTtpZihzPjApZm9yKG49TWF0aC5jZWlsKG4vcyksdD1NYXRoLmZsb29yKHQvcyksYT1uZXcgQXJyYXkobz1NYXRoLmNlaWwodC1uKzEpKTsrK3I8bzspYVtyXT0obityKSpzO2Vsc2UgZm9yKG49TWF0aC5mbG9vcihuKnMpLHQ9TWF0aC5jZWlsKHQqcyksYT1uZXcgQXJyYXkobz1NYXRoLmNlaWwobi10KzEpKTsrK3I8bzspYVtyXT0obi1yKS9zO3JldHVybiBpJiZhLnJldmVyc2UoKSxhfWZ1bmN0aW9uIGUwKG4sdCxlKXt2YXIgaT0odC1uKS9NYXRoLm1heCgwLGUpLHI9TWF0aC5mbG9vcihNYXRoLmxvZyhpKS9NYXRoLkxOMTApLG89aS9NYXRoLnBvdygxMCxyKTtyZXR1cm4gcj49MD8obz49Rk4/MTA6bz49Tk4/NTpvPj1MTj8yOjEpKk1hdGgucG93KDEwLHIpOi1NYXRoLnBvdygxMCwtcikvKG8+PUZOPzEwOm8+PU5OPzU6bz49TE4/MjoxKX1mdW5jdGlvbiBJZChuLHQsZSl7dmFyIGk9TWF0aC5hYnModC1uKS9NYXRoLm1heCgwLGUpLHI9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhpKS9NYXRoLkxOMTApKSxvPWkvcjtyZXR1cm4gbz49Rk4/cio9MTA6bz49Tk4/cio9NTpvPj1MTiYmKHIqPTIpLHQ8bj8tcjpyfXZhciBKVD1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gcloobil7cmV0dXJuIG59dmFyIFZOPTEsZUQ9MixITj0zLCRUPTQsb1o9MWUtNjtmdW5jdGlvbiBYRWUobil7cmV0dXJuInRyYW5zbGF0ZSgiKyhuKy41KSsiLDApIn1mdW5jdGlvbiBZRWUobil7cmV0dXJuInRyYW5zbGF0ZSgwLCIrKG4rLjUpKyIpIn1mdW5jdGlvbiBRRWUobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybituKHQpfX1mdW5jdGlvbiBaRWUobil7dmFyIHQ9TWF0aC5tYXgoMCxuLmJhbmR3aWR0aCgpLTEpLzI7cmV0dXJuIG4ucm91bmQoKSYmKHQ9TWF0aC5yb3VuZCh0KSksZnVuY3Rpb24oZSl7cmV0dXJuK24oZSkrdH19ZnVuY3Rpb24gS0VlKCl7cmV0dXJuIXRoaXMuX19heGlzfWZ1bmN0aW9uIGFaKG4sdCl7dmFyIGU9W10saT1udWxsLHI9bnVsbCxvPTYsYT02LHM9MyxsPW49PT1WTnx8bj09PSRUPy0xOjEsYz1uPT09JFR8fG49PT1lRD8ieCI6InkiLGQ9bj09PVZOfHxuPT09SE4/WEVlOllFZTtmdW5jdGlvbiB1KHApe3ZhciBoPWk/Pyh0LnRpY2tzP3QudGlja3MuYXBwbHkodCxlKTp0LmRvbWFpbigpKSxtPXI/Pyh0LnRpY2tGb3JtYXQ/dC50aWNrRm9ybWF0LmFwcGx5KHQsZSk6clopLF89TWF0aC5tYXgobywwKStzLE09dC5yYW5nZSgpLHk9K01bMF0rLjUseD0rTVtNLmxlbmd0aC0xXSsuNSxSPSh0LmJhbmR3aWR0aD9aRWU6UUVlKSh0LmNvcHkoKSksST1wLnNlbGVjdGlvbj9wLnNlbGVjdGlvbigpOnAsQj1JLnNlbGVjdEFsbCgiLmRvbWFpbiIpLmRhdGEoW251bGxdKSxlZT1JLnNlbGVjdEFsbCgiLnRpY2siKS5kYXRhKGgsdCkub3JkZXIoKSxRPWVlLmV4aXQoKSx3ZT1lZS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidGljayIpLFFlPWVlLnNlbGVjdCgibGluZSIpLEFlPWVlLnNlbGVjdCgidGV4dCIpO0I9Qi5tZXJnZShCLmVudGVyKCkuaW5zZXJ0KCJwYXRoIiwiLnRpY2siKS5hdHRyKCJjbGFzcyIsImRvbWFpbiIpLmF0dHIoInN0cm9rZSIsImN1cnJlbnRDb2xvciIpKSxlZT1lZS5tZXJnZSh3ZSksUWU9UWUubWVyZ2Uod2UuYXBwZW5kKCJsaW5lIikuYXR0cigic3Ryb2tlIiwiY3VycmVudENvbG9yIikuYXR0cihjKyIyIixsKm8pKSxBZT1BZS5tZXJnZSh3ZS5hcHBlbmQoInRleHQiKS5hdHRyKCJmaWxsIiwiY3VycmVudENvbG9yIikuYXR0cihjLGwqXykuYXR0cigiZHkiLG49PT1WTj8iMGVtIjpuPT09SE4/IjAuNzFlbSI6IjAuMzJlbSIpKSxwIT09SSYmKEI9Qi50cmFuc2l0aW9uKHApLGVlPWVlLnRyYW5zaXRpb24ocCksUWU9UWUudHJhbnNpdGlvbihwKSxBZT1BZS50cmFuc2l0aW9uKHApLFE9US50cmFuc2l0aW9uKHApLmF0dHIoIm9wYWNpdHkiLG9aKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKEQpe3JldHVybiBpc0Zpbml0ZShEPVIoRCkpP2QoRCk6dGhpcy5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpfSksd2UuYXR0cigib3BhY2l0eSIsb1opLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oRCl7dmFyIHJlPXRoaXMucGFyZW50Tm9kZS5fX2F4aXM7cmV0dXJuIGQocmUmJmlzRmluaXRlKHJlPXJlKEQpKT9yZTpSKEQpKX0pKSxRLnJlbW92ZSgpLEIuYXR0cigiZCIsbj09PSRUfHxuPT1lRD9hPyJNIitsKmErIiwiK3krIkgwLjVWIit4KyJIIitsKmE6Ik0wLjUsIit5KyJWIit4OmE/Ik0iK3krIiwiK2wqYSsiVjAuNUgiK3grIlYiK2wqYToiTSIreSsiLDAuNUgiK3gpLGVlLmF0dHIoIm9wYWNpdHkiLDEpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oRCl7cmV0dXJuIGQoUihEKSl9KSxRZS5hdHRyKGMrIjIiLGwqbyksQWUuYXR0cihjLGwqXykudGV4dChtKSxJLmZpbHRlcihLRWUpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZm9udC1zaXplIiwxMCkuYXR0cigiZm9udC1mYW1pbHkiLCJzYW5zLXNlcmlmIikuYXR0cigidGV4dC1hbmNob3IiLG49PT1lRD8ic3RhcnQiOm49PT0kVD8iZW5kIjoibWlkZGxlIiksSS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5fX2F4aXM9Un0pfXJldHVybiB1LnNjYWxlPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXAsdSk6dH0sdS50aWNrcz1mdW5jdGlvbigpe3JldHVybiBlPUpULmNhbGwoYXJndW1lbnRzKSx1fSx1LnRpY2tBcmd1bWVudHM9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09cD9bXTpKVC5jYWxsKHApLHUpOmUuc2xpY2UoKX0sdS50aWNrVmFsdWVzPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PXA/bnVsbDpKVC5jYWxsKHApLHUpOmkmJmkuc2xpY2UoKX0sdS50aWNrRm9ybWF0PWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXAsdSk6cn0sdS50aWNrU2l6ZT1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1hPStwLHUpOm99LHUudGlja1NpemVJbm5lcj1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rcCx1KTpvfSx1LnRpY2tTaXplT3V0ZXI9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9K3AsdSk6YX0sdS50aWNrUGFkZGluZz1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0rcCx1KTpzfSx1fXZhciBKRWU9e3ZhbHVlOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gbFooKXtmb3IodmFyIGksbj0wLHQ9YXJndW1lbnRzLmxlbmd0aCxlPXt9O248dDsrK24pe2lmKCEoaT1hcmd1bWVudHNbbl0rIiIpfHxpIGluIGV8fC9bXHMuXS8udGVzdChpKSl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgdHlwZTogIitpKTtlW2ldPVtdfXJldHVybiBuZXcgdEQoZSl9ZnVuY3Rpb24gdEQobil7dGhpcy5fPW59ZnVuY3Rpb24gZVRlKG4sdCl7Zm9yKHZhciByLGU9MCxpPW4ubGVuZ3RoO2U8aTsrK2UpaWYoKHI9bltlXSkubmFtZT09PXQpcmV0dXJuIHIudmFsdWV9ZnVuY3Rpb24gc1oobix0LGUpe2Zvcih2YXIgaT0wLHI9bi5sZW5ndGg7aTxyOysraSlpZihuW2ldLm5hbWU9PT10KXtuW2ldPUpFZSxuPW4uc2xpY2UoMCxpKS5jb25jYXQobi5zbGljZShpKzEpKTticmVha31yZXR1cm4gbnVsbCE9ZSYmbi5wdXNoKHtuYW1lOnQsdmFsdWU6ZX0pLG59dEQucHJvdG90eXBlPWxaLnByb3RvdHlwZT17Y29uc3RydWN0b3I6dEQsb246ZnVuY3Rpb24obix0KXt2YXIgcixlPXRoaXMuXyxpPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4udHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbihlKXt2YXIgaT0iIixyPWUuaW5kZXhPZigiLiIpO2lmKHI+PTAmJihpPWUuc2xpY2UocisxKSxlPWUuc2xpY2UoMCxyKSksZSYmIXQuaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7cmV0dXJue3R5cGU6ZSxuYW1lOml9fSl9KG4rIiIsZSksbz0tMSxhPWkubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7aWYobnVsbCE9dCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK3QpO2Zvcig7KytvPGE7KWlmKHI9KG49aVtvXSkudHlwZSllW3JdPXNaKGVbcl0sbi5uYW1lLHQpO2Vsc2UgaWYobnVsbD09dClmb3IociBpbiBlKWVbcl09c1ooZVtyXSxuLm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9Zm9yKDsrK288YTspaWYoKHI9KG49aVtvXSkudHlwZSkmJihyPWVUZShlW3JdLG4ubmFtZSkpKXJldHVybiByfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIG49e30sdD10aGlzLl87Zm9yKHZhciBlIGluIHQpbltlXT10W2VdLnNsaWNlKCk7cmV0dXJuIG5ldyB0RChuKX0sY2FsbDpmdW5jdGlvbihuLHQpe2lmKChyPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHIsbyxlPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSllW2ldPWFyZ3VtZW50c1tpKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkobikpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrbik7Zm9yKGk9MCxyPShvPXRoaXMuX1tuXSkubGVuZ3RoO2k8cjsrK2kpb1tpXS52YWx1ZS5hcHBseSh0LGUpfSxhcHBseTpmdW5jdGlvbihuLHQsZSl7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShuKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIituKTtmb3IodmFyIGk9dGhpcy5fW25dLHI9MCxvPWkubGVuZ3RoO3I8bzsrK3IpaVtyXS52YWx1ZS5hcHBseSh0LGUpfX07dmFyIGpOPWxaLG5EPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixHTj17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6bkQseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiBBZChuKXt2YXIgdD1uKz0iIixlPXQuaW5kZXhPZigiOiIpO3JldHVybiBlPj0wJiYieG1sbnMiIT09KHQ9bi5zbGljZSgwLGUpKSYmKG49bi5zbGljZShlKzEpKSxHTi5oYXNPd25Qcm9wZXJ0eSh0KT97c3BhY2U6R05bdF0sbG9jYWw6bn06bn1mdW5jdGlvbiB0VGUobil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vd25lckRvY3VtZW50LGU9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIGU9PT1uRCYmdC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09bkQ/dC5jcmVhdGVFbGVtZW50KG4pOnQuY3JlYXRlRWxlbWVudE5TKGUsbil9fWZ1bmN0aW9uIG5UZShuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhuLnNwYWNlLG4ubG9jYWwpfX1mdW5jdGlvbiBpRChuKXt2YXIgdD1BZChuKTtyZXR1cm4odC5sb2NhbD9uVGU6dFRlKSh0KX1mdW5jdGlvbiBpVGUoKXt9ZnVuY3Rpb24gR2gobil7cmV0dXJuIG51bGw9PW4/aVRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihuKX19ZnVuY3Rpb24gclRlKCl7cmV0dXJuW119ZnVuY3Rpb24gU3kobil7cmV0dXJuIG51bGw9PW4/clRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChuKX19ZnVuY3Rpb24gRXkobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyhuKX19ZnVuY3Rpb24gckQobil7cmV0dXJuIG5ldyBBcnJheShuLmxlbmd0aCl9ZnVuY3Rpb24gVHkobix0KXt0aGlzLm93bmVyRG9jdW1lbnQ9bi5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPW4ubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9bix0aGlzLl9fZGF0YV9fPXR9VHkucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpUeSxhcHBlbmRDaGlsZDpmdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShuLHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24obix0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShuLHQpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvcihuKX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwobil9fTt2YXIgbVo9IiQiO2Z1bmN0aW9uIG9UZShuLHQsZSxpLHIsbyl7Zm9yKHZhciBzLGE9MCxsPXQubGVuZ3RoLGM9by5sZW5ndGg7YTxjOysrYSkocz10W2FdKT8ocy5fX2RhdGFfXz1vW2FdLGlbYV09cyk6ZVthXT1uZXcgVHkobixvW2FdKTtmb3IoO2E8bDsrK2EpKHM9dFthXSkmJihyW2FdPXMpfWZ1bmN0aW9uIGFUZShuLHQsZSxpLHIsbyxhKXt2YXIgcyxsLGgsYz17fSxkPXQubGVuZ3RoLHU9by5sZW5ndGgscD1uZXcgQXJyYXkoZCk7Zm9yKHM9MDtzPGQ7KytzKShsPXRbc10pJiYocFtzXT1oPW1aK2EuY2FsbChsLGwuX19kYXRhX18scyx0KSxoIGluIGM/cltzXT1sOmNbaF09bCk7Zm9yKHM9MDtzPHU7KytzKShsPWNbaD1tWithLmNhbGwobixvW3NdLHMsbyldKT8oaVtzXT1sLGwuX19kYXRhX189b1tzXSxjW2hdPW51bGwpOmVbc109bmV3IFR5KG4sb1tzXSk7Zm9yKHM9MDtzPGQ7KytzKShsPXRbc10pJiZjW3Bbc11dPT09bCYmKHJbc109bCl9ZnVuY3Rpb24gc1RlKG4sdCl7cmV0dXJuIG48dD8tMTpuPnQ/MTpuPj10PzA6TmFOfWZ1bmN0aW9uIGxUZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShuKX19ZnVuY3Rpb24gY1RlKG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKX19ZnVuY3Rpb24gZFRlKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUobix0KX19ZnVuY3Rpb24gdVRlKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwsdCl9fWZ1bmN0aW9uIHBUZShuLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWU/dGhpcy5yZW1vdmVBdHRyaWJ1dGUobik6dGhpcy5zZXRBdHRyaWJ1dGUobixlKX19ZnVuY3Rpb24gaFRlKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09ZT90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwsZSl9fWZ1bmN0aW9uIG9EKG4pe3JldHVybiBuLm93bmVyRG9jdW1lbnQmJm4ub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8bi5kb2N1bWVudCYmbnx8bi5kZWZhdWx0Vmlld31mdW5jdGlvbiBtVGUobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKX19ZnVuY3Rpb24gZlRlKG4sdCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KG4sdCxlKX19ZnVuY3Rpb24gZ1RlKG4sdCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1pP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobik6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuLGksZSl9fWZ1bmN0aW9uIGlwKG4sdCl7cmV0dXJuIG4uc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSh0KXx8b0QobikuZ2V0Q29tcHV0ZWRTdHlsZShuLG51bGwpLmdldFByb3BlcnR5VmFsdWUodCl9ZnVuY3Rpb24gX1RlKG4pe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW25dfX1mdW5jdGlvbiBiVGUobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW25dPXR9fWZ1bmN0aW9uIHZUZShuLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWU/ZGVsZXRlIHRoaXNbbl06dGhpc1tuXT1lfX1mdW5jdGlvbiBBWihuKXtyZXR1cm4gbi50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24gV04obil7cmV0dXJuIG4uY2xhc3NMaXN0fHxuZXcgUloobil9ZnVuY3Rpb24gUloobil7dGhpcy5fbm9kZT1uLHRoaXMuX25hbWVzPUFaKG4uZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gUFoobix0KXtmb3IodmFyIGU9V04obiksaT0tMSxyPXQubGVuZ3RoOysraTxyOyllLmFkZCh0W2ldKX1mdW5jdGlvbiBrWihuLHQpe2Zvcih2YXIgZT1XTihuKSxpPS0xLHI9dC5sZW5ndGg7KytpPHI7KWUucmVtb3ZlKHRbaV0pfWZ1bmN0aW9uIHlUZShuKXtyZXR1cm4gZnVuY3Rpb24oKXtQWih0aGlzLG4pfX1mdW5jdGlvbiB4VGUobil7cmV0dXJuIGZ1bmN0aW9uKCl7a1oodGhpcyxuKX19ZnVuY3Rpb24gQ1RlKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7KHQuYXBwbHkodGhpcyxhcmd1bWVudHMpP1BaOmtaKSh0aGlzLG4pfX1mdW5jdGlvbiBNVGUoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIHdUZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PW59fWZ1bmN0aW9uIFNUZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PXQ/PyIifX1mdW5jdGlvbiBFVGUoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBUVGUobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9bn19ZnVuY3Rpb24gRFRlKG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPXQ/PyIifX1mdW5jdGlvbiBJVGUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gQVRlKCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gUlRlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gUFRlKCl7dmFyIG49dGhpcy5wYXJlbnROb2RlO24mJm4ucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24ga1RlKCl7dmFyIG49dGhpcy5jbG9uZU5vZGUoITEpLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKG4sdGhpcy5uZXh0U2libGluZyk6bn1mdW5jdGlvbiBPVGUoKXt2YXIgbj10aGlzLmNsb25lTm9kZSghMCksdD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIHQ/dC5pbnNlcnRCZWZvcmUobix0aGlzLm5leHRTaWJsaW5nKTpufVJaLnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKG4pe3RoaXMuX25hbWVzLmluZGV4T2Yobik8MCYmKHRoaXMuX25hbWVzLnB1c2gobiksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2Yobik7dD49MCYmKHRoaXMuX25hbWVzLnNwbGljZSh0LDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKG4pPj0wfX07dmFyIFdaPXt9LHFOPW51bGw7ZnVuY3Rpb24gRlRlKG4sdCxlKXtyZXR1cm4gbj1xWihuLHQsZSksZnVuY3Rpb24oaSl7dmFyIHI9aS5yZWxhdGVkVGFyZ2V0Oyghcnx8ciE9PXRoaXMmJiEoOCZyLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRoaXMpKSkmJm4uY2FsbCh0aGlzLGkpfX1mdW5jdGlvbiBxWihuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciByPXFOO3FOPWk7dHJ5e24uY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sdCxlKX1maW5hbGx5e3FOPXJ9fX1mdW5jdGlvbiBMVGUobil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX29uO2lmKHQpe2Zvcih2YXIgbyxlPTAsaT0tMSxyPXQubGVuZ3RoO2U8cjsrK2Upbz10W2VdLG4udHlwZSYmby50eXBlIT09bi50eXBlfHxvLm5hbWUhPT1uLm5hbWU/dFsrK2ldPW86dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG8udHlwZSxvLmxpc3RlbmVyLG8uY2FwdHVyZSk7KytpP3QubGVuZ3RoPWk6ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIEJUZShuLHQsZSl7dmFyIGk9V1ouaGFzT3duUHJvcGVydHkobi50eXBlKT9GVGU6cVo7cmV0dXJuIGZ1bmN0aW9uKHIsbyxhKXt2YXIgbCxzPXRoaXMuX19vbixjPWkodCxvLGEpO2lmKHMpZm9yKHZhciBkPTAsdT1zLmxlbmd0aDtkPHU7KytkKWlmKChsPXNbZF0pLnR5cGU9PT1uLnR5cGUmJmwubmFtZT09PW4ubmFtZSlyZXR1cm4gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyLGwuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyPWMsbC5jYXB0dXJlPWUpLHZvaWQobC52YWx1ZT10KTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIobi50eXBlLGMsZSksbD17dHlwZTpuLnR5cGUsbmFtZTpuLm5hbWUsdmFsdWU6dCxsaXN0ZW5lcjpjLGNhcHR1cmU6ZX0scz9zLnB1c2gobCk6dGhpcy5fX29uPVtsXX19ZnVuY3Rpb24gWVoobix0LGUpe3ZhciBpPW9EKG4pLHI9aS5DdXN0b21FdmVudDsiZnVuY3Rpb24iPT10eXBlb2Ygcj9yPW5ldyByKHQsZSk6KHI9aS5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxlPyhyLmluaXRFdmVudCh0LGUuYnViYmxlcyxlLmNhbmNlbGFibGUpLHIuZGV0YWlsPWUuZGV0YWlsKTpyLmluaXRFdmVudCh0LCExLCExKSksbi5kaXNwYXRjaEV2ZW50KHIpfWZ1bmN0aW9uIFZUZShuLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBZWih0aGlzLG4sdCl9fWZ1bmN0aW9uIEhUZShuLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBZWih0aGlzLG4sdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX10eXBlb2YgZG9jdW1lbnQ8InUiJiYoIm9ubW91c2VlbnRlciJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnR8fChXWj17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KSk7dmFyIFhOPVtudWxsXTtmdW5jdGlvbiBCcihuLHQpe3RoaXMuX2dyb3Vwcz1uLHRoaXMuX3BhcmVudHM9dH1mdW5jdGlvbiBaWigpe3JldHVybiBuZXcgQnIoW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSxYTil9QnIucHJvdG90eXBlPVpaLnByb3RvdHlwZT17Y29uc3RydWN0b3I6QnIsc2VsZWN0OmZ1bmN0aW9uKG4peyJmdW5jdGlvbiIhPXR5cGVvZiBuJiYobj1HaChuKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPXQubGVuZ3RoLGk9bmV3IEFycmF5KGUpLHI9MDtyPGU7KytyKWZvcih2YXIgbCxjLG89dFtyXSxhPW8ubGVuZ3RoLHM9aVtyXT1uZXcgQXJyYXkoYSksZD0wO2Q8YTsrK2QpKGw9b1tkXSkmJihjPW4uY2FsbChsLGwuX19kYXRhX18sZCxvKSkmJigiX19kYXRhX18iaW4gbCYmKGMuX19kYXRhX189bC5fX2RhdGFfXyksc1tkXT1jKTtyZXR1cm4gbmV3IEJyKGksdGhpcy5fcGFyZW50cyl9LHNlbGVjdEFsbDpmdW5jdGlvbihuKXsiZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49U3kobikpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT10Lmxlbmd0aCxpPVtdLHI9W10sbz0wO288ZTsrK28pZm9yKHZhciBsLGE9dFtvXSxzPWEubGVuZ3RoLGM9MDtjPHM7KytjKShsPWFbY10pJiYoaS5wdXNoKG4uY2FsbChsLGwuX19kYXRhX18sYyxhKSksci5wdXNoKGwpKTtyZXR1cm4gbmV3IEJyKGkscil9LGZpbHRlcjpmdW5jdGlvbihuKXsiZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49RXkobikpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT10Lmxlbmd0aCxpPW5ldyBBcnJheShlKSxyPTA7cjxlOysrcilmb3IodmFyIGwsbz10W3JdLGE9by5sZW5ndGgscz1pW3JdPVtdLGM9MDtjPGE7KytjKShsPW9bY10pJiZuLmNhbGwobCxsLl9fZGF0YV9fLGMsbykmJnMucHVzaChsKTtyZXR1cm4gbmV3IEJyKGksdGhpcy5fcGFyZW50cyl9LGRhdGE6ZnVuY3Rpb24obix0KXtpZighbilyZXR1cm4gaD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLGM9LTEsdGhpcy5lYWNoKGZ1bmN0aW9uKGVlKXtoWysrY109ZWV9KSxoO3ZhciBlPXQ/YVRlOm9UZSxpPXRoaXMuX3BhcmVudHMscj10aGlzLl9ncm91cHM7ImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihuPWZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBufX0obikpO2Zvcih2YXIgbz1yLmxlbmd0aCxhPW5ldyBBcnJheShvKSxzPW5ldyBBcnJheShvKSxsPW5ldyBBcnJheShvKSxjPTA7YzxvOysrYyl7dmFyIGQ9aVtjXSx1PXJbY10scD11Lmxlbmd0aCxoPW4uY2FsbChkLGQmJmQuX19kYXRhX18sYyxpKSxtPWgubGVuZ3RoLF89c1tjXT1uZXcgQXJyYXkobSksTT1hW2NdPW5ldyBBcnJheShtKTtlKGQsdSxfLE0sbFtjXT1uZXcgQXJyYXkocCksaCx0KTtmb3IodmFyIEksQix4PTAsUj0wO3g8bTsrK3gpaWYoST1fW3hdKXtmb3IoeD49UiYmKFI9eCsxKTshKEI9TVtSXSkmJisrUjxtOyk7SS5fbmV4dD1CfHxudWxsfX1yZXR1cm4oYT1uZXcgQnIoYSxpKSkuX2VudGVyPXMsYS5fZXhpdD1sLGF9LGVudGVyOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBCcih0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcChyRCksdGhpcy5fcGFyZW50cyl9LGV4aXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEJyKHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAockQpLHRoaXMuX3BhcmVudHMpfSxqb2luOmZ1bmN0aW9uKG4sdCxlKXt2YXIgaT10aGlzLmVudGVyKCkscj10aGlzLG89dGhpcy5leGl0KCk7cmV0dXJuIGk9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bihpKTppLmFwcGVuZChuKyIiKSxudWxsIT10JiYocj10KHIpKSxudWxsPT1lP28ucmVtb3ZlKCk6ZShvKSxpJiZyP2kubWVyZ2Uocikub3JkZXIoKTpyfSxtZXJnZTpmdW5jdGlvbihuKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9bi5fZ3JvdXBzLGk9dC5sZW5ndGgsbz1NYXRoLm1pbihpLGUubGVuZ3RoKSxhPW5ldyBBcnJheShpKSxzPTA7czxvOysrcylmb3IodmFyIHAsbD10W3NdLGM9ZVtzXSxkPWwubGVuZ3RoLHU9YVtzXT1uZXcgQXJyYXkoZCksaD0wO2g8ZDsrK2gpKHA9bFtoXXx8Y1toXSkmJih1W2hdPXApO2Zvcig7czxpOysrcylhW3NdPXRbc107cmV0dXJuIG5ldyBCcihhLHRoaXMuX3BhcmVudHMpfSxvcmRlcjpmdW5jdGlvbigpe2Zvcih2YXIgbj10aGlzLl9ncm91cHMsdD0tMSxlPW4ubGVuZ3RoOysrdDxlOylmb3IodmFyIGEsaT1uW3RdLHI9aS5sZW5ndGgtMSxvPWlbcl07LS1yPj0wOykoYT1pW3JdKSYmKG8mJjReYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihvKSYmby5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLG8pLG89YSk7cmV0dXJuIHRoaXN9LHNvcnQ6ZnVuY3Rpb24obil7ZnVuY3Rpb24gdCh1LHApe3JldHVybiB1JiZwP24odS5fX2RhdGFfXyxwLl9fZGF0YV9fKTohdS0hcH1ufHwobj1zVGUpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsaT1lLmxlbmd0aCxyPW5ldyBBcnJheShpKSxvPTA7bzxpOysrbyl7Zm9yKHZhciBjLGE9ZVtvXSxzPWEubGVuZ3RoLGw9cltvXT1uZXcgQXJyYXkocyksZD0wO2Q8czsrK2QpKGM9YVtkXSkmJihsW2RdPWMpO2wuc29ydCh0KX1yZXR1cm4gbmV3IEJyKHIsdGhpcy5fcGFyZW50cykub3JkZXIoKX0sY2FsbDpmdW5jdGlvbigpe3ZhciBuPWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsbi5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc30sbm9kZXM6ZnVuY3Rpb24oKXt2YXIgbj1uZXcgQXJyYXkodGhpcy5zaXplKCkpLHQ9LTE7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe25bKyt0XT10aGlzfSksbn0sbm9kZTpmdW5jdGlvbigpe2Zvcih2YXIgbj10aGlzLl9ncm91cHMsdD0wLGU9bi5sZW5ndGg7dDxlOysrdClmb3IodmFyIGk9blt0XSxyPTAsbz1pLmxlbmd0aDtyPG87KytyKXt2YXIgYT1pW3JdO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9LHNpemU6ZnVuY3Rpb24oKXt2YXIgbj0wO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXsrK259KSxufSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiF0aGlzLm5vZGUoKX0sZWFjaDpmdW5jdGlvbihuKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9MCxpPXQubGVuZ3RoO2U8aTsrK2UpZm9yKHZhciBzLHI9dFtlXSxvPTAsYT1yLmxlbmd0aDtvPGE7KytvKShzPXJbb10pJiZuLmNhbGwocyxzLl9fZGF0YV9fLG8scik7cmV0dXJuIHRoaXN9LGF0dHI6ZnVuY3Rpb24obix0KXt2YXIgZT1BZChuKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBpPXRoaXMubm9kZSgpO3JldHVybiBlLmxvY2FsP2kuZ2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTppLmdldEF0dHJpYnV0ZShlKX1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT10P2UubG9jYWw/Y1RlOmxUZToiZnVuY3Rpb24iPT10eXBlb2YgdD9lLmxvY2FsP2hUZTpwVGU6ZS5sb2NhbD91VGU6ZFRlKShlLHQpKX0sc3R5bGU6ZnVuY3Rpb24obix0LGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT10P21UZToiZnVuY3Rpb24iPT10eXBlb2YgdD9nVGU6ZlRlKShuLHQsZT8/IiIpKTppcCh0aGlzLm5vZGUoKSxuKX0scHJvcGVydHk6ZnVuY3Rpb24obix0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09dD9fVGU6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dlRlOmJUZSkobix0KSk6dGhpcy5ub2RlKClbbl19LGNsYXNzZWQ6ZnVuY3Rpb24obix0KXt2YXIgZT1BWihuKyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgaT1XTih0aGlzLm5vZGUoKSkscj0tMSxvPWUubGVuZ3RoOysrcjxvOylpZighaS5jb250YWlucyhlW3JdKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgdD9DVGU6dD95VGU6eFRlKShlLHQpKX0sdGV4dDpmdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09bj9NVGU6KCJmdW5jdGlvbiI9PXR5cGVvZiBuP1NUZTp3VGUpKG4pKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH0saHRtbDpmdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09bj9FVGU6KCJmdW5jdGlvbiI9PXR5cGVvZiBuP0RUZTpUVGUpKG4pKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9LHJhaXNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChJVGUpfSxsb3dlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goQVRlKX0sYXBwZW5kOmZ1bmN0aW9uKG4pe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246aUQobik7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQodC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9LGluc2VydDpmdW5jdGlvbihuLHQpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246aUQobiksaT1udWxsPT10P1JUZToiZnVuY3Rpb24iPT10eXBlb2YgdD90OkdoKHQpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX0scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChQVGUpfSxjbG9uZTpmdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5zZWxlY3Qobj9PVGU6a1RlKX0sZGF0dW06ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLG4pOnRoaXMubm9kZSgpLl9fZGF0YV9ffSxvbjpmdW5jdGlvbihuLHQsZSl7dmFyIHIsYSxpPWZ1bmN0aW9uKG4pe3JldHVybiBuLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24odCl7dmFyIGU9IiIsaT10LmluZGV4T2YoIi4iKTtyZXR1cm4gaT49MCYmKGU9dC5zbGljZShpKzEpLHQ9dC5zbGljZSgwLGkpKSx7dHlwZTp0LG5hbWU6ZX19KX0obisiIiksbz1pLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2ZvcihzPXQ/QlRlOkxUZSxudWxsPT1lJiYoZT0hMSkscj0wO3I8bzsrK3IpdGhpcy5lYWNoKHMoaVtyXSx0LGUpKTtyZXR1cm4gdGhpc312YXIgcz10aGlzLm5vZGUoKS5fX29uO2lmKHMpZm9yKHZhciBkLGw9MCxjPXMubGVuZ3RoO2w8YzsrK2wpZm9yKHI9MCxkPXNbbF07cjxvOysrcilpZigoYT1pW3JdKS50eXBlPT09ZC50eXBlJiZhLm5hbWU9PT1kLm5hbWUpcmV0dXJuIGQudmFsdWV9LGRpc3BhdGNoOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIHQ/SFRlOlZUZSkobix0KSl9fTt2YXIgUmQ9Wlo7ZnVuY3Rpb24gYUQobil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBuP25ldyBCcihbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IobildXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IEJyKFtbbl1dLFhOKX1mdW5jdGlvbiBXaChuLHQsZSl7bi5wcm90b3R5cGU9dC5wcm90b3R5cGU9ZSxlLmNvbnN0cnVjdG9yPW59ZnVuY3Rpb24gdDAobix0KXt2YXIgZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKTtmb3IodmFyIGkgaW4gdCllW2ldPXRbaV07cmV0dXJuIGV9ZnVuY3Rpb24gcnAoKXt9dmFyIGxEPTEvLjcsbjA9IlxccyooWystXT9cXGQrKVxccyoiLEl5PSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLFZjPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIix6VGU9L14jKFswLTlhLWZdezMsOH0pJC8sVVRlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tuMCxuMCxuMF0rIlxcKSQiKSxqVGU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW1ZjLFZjLFZjXSsiXFwpJCIpLEdUZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW24wLG4wLG4wLEl5XSsiXFwpJCIpLFdUZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW1ZjLFZjLFZjLEl5XSsiXFwpJCIpLHFUZT1uZXcgUmVnRXhwKCJeaHNsXFwoIitbSXksVmMsVmNdKyJcXCkkIiksWFRlPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbSXksVmMsVmMsSXldKyJcXCkkIiksS1o9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07ZnVuY3Rpb24gSlooKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiAkWigpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIEhsKG4pe3ZhciB0LGU7cmV0dXJuIG49KG4rIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLCh0PXpUZS5leGVjKG4pKT8oZT10WzFdLmxlbmd0aCx0PXBhcnNlSW50KHRbMV0sMTYpLDY9PT1lP2VLKHQpOjM9PT1lP25ldyBlYSh0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8MjQwJnQsKDE1JnQpPDw0fDE1JnQsMSk6OD09PWU/c0QodD4+MjQmMjU1LHQ+PjE2JjI1NSx0Pj44JjI1NSwoMjU1JnQpLzI1NSk6ND09PWU/c0QodD4+MTImMTV8dD4+OCYyNDAsdD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fDI0MCZ0LCgoMTUmdCk8PDR8MTUmdCkvMjU1KTpudWxsKToodD1VVGUuZXhlYyhuKSk/bmV3IGVhKHRbMV0sdFsyXSx0WzNdLDEpOih0PWpUZS5leGVjKG4pKT9uZXcgZWEoMjU1KnRbMV0vMTAwLDI1NSp0WzJdLzEwMCwyNTUqdFszXS8xMDAsMSk6KHQ9R1RlLmV4ZWMobikpP3NEKHRbMV0sdFsyXSx0WzNdLHRbNF0pOih0PVdUZS5leGVjKG4pKT9zRCgyNTUqdFsxXS8xMDAsMjU1KnRbMl0vMTAwLDI1NSp0WzNdLzEwMCx0WzRdKToodD1xVGUuZXhlYyhuKSk/aUsodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCwxKToodD1YVGUuZXhlYyhuKSk/aUsodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCx0WzRdKTpLWi5oYXNPd25Qcm9wZXJ0eShuKT9lSyhLWltuXSk6InRyYW5zcGFyZW50Ij09PW4/bmV3IGVhKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gZUsobil7cmV0dXJuIG5ldyBlYShuPj4xNiYyNTUsbj4+OCYyNTUsMjU1Jm4sMSl9ZnVuY3Rpb24gc0Qobix0LGUsaSl7cmV0dXJuIGk8PTAmJihuPXQ9ZT1OYU4pLG5ldyBlYShuLHQsZSxpKX1mdW5jdGlvbiBaTihuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIHJwfHwobj1IbChuKSksbj9uZXcgZWEoKG49bi5yZ2IoKSkucixuLmcsbi5iLG4ub3BhY2l0eSk6bmV3IGVhfWZ1bmN0aW9uIGkwKG4sdCxlLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9aTihuKTpuZXcgZWEobix0LGUsaT8/MSl9ZnVuY3Rpb24gZWEobix0LGUsaSl7dGhpcy5yPStuLHRoaXMuZz0rdCx0aGlzLmI9K2UsdGhpcy5vcGFjaXR5PStpfWZ1bmN0aW9uIHRLKCl7cmV0dXJuIiMiK1lOKHRoaXMucikrWU4odGhpcy5nKStZTih0aGlzLmIpfWZ1bmN0aW9uIG5LKCl7dmFyIG49dGhpcy5vcGFjaXR5O3JldHVybigxPT09KG49aXNOYU4obik/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsbikpKT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKygxPT09bj8iKSI6IiwgIituKyIpIil9ZnVuY3Rpb24gWU4obil7cmV0dXJuKChuPU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQobil8fDApKSk8MTY/IjAiOiIiKStuLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBpSyhuLHQsZSxpKXtyZXR1cm4gaTw9MD9uPXQ9ZT1OYU46ZTw9MHx8ZT49MT9uPXQ9TmFOOnQ8PTAmJihuPU5hTiksbmV3IEJjKG4sdCxlLGkpfWZ1bmN0aW9uIHJLKG4pe2lmKG4gaW5zdGFuY2VvZiBCYylyZXR1cm4gbmV3IEJjKG4uaCxuLnMsbi5sLG4ub3BhY2l0eSk7aWYobiBpbnN0YW5jZW9mIHJwfHwobj1IbChuKSksIW4pcmV0dXJuIG5ldyBCYztpZihuIGluc3RhbmNlb2YgQmMpcmV0dXJuIG47dmFyIHQ9KG49bi5yZ2IoKSkuci8yNTUsZT1uLmcvMjU1LGk9bi5iLzI1NSxyPU1hdGgubWluKHQsZSxpKSxvPU1hdGgubWF4KHQsZSxpKSxhPU5hTixzPW8tcixsPShvK3IpLzI7cmV0dXJuIHM/KGE9dD09PW8/KGUtaSkvcys2KihlPGkpOmU9PT1vPyhpLXQpL3MrMjoodC1lKS9zKzQscy89bDwuNT9vK3I6Mi1vLXIsYSo9NjApOnM9bD4wJiZsPDE/MDphLG5ldyBCYyhhLHMsbCxuLm9wYWNpdHkpfWZ1bmN0aW9uIHFoKG4sdCxlLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9ySyhuKTpuZXcgQmMobix0LGUsaT8/MSl9ZnVuY3Rpb24gQmMobix0LGUsaSl7dGhpcy5oPStuLHRoaXMucz0rdCx0aGlzLmw9K2UsdGhpcy5vcGFjaXR5PStpfWZ1bmN0aW9uIFFOKG4sdCxlKXtyZXR1cm4gMjU1KihuPDYwP3QrKGUtdCkqbi82MDpuPDE4MD9lOm48MjQwP3QrKGUtdCkqKDI0MC1uKS82MDp0KX1XaChycCxIbCx7Y29weTpmdW5jdGlvbihuKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLG4pfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDpKWixmb3JtYXRIZXg6SlosZm9ybWF0SHNsOmZ1bmN0aW9uKCl7cmV0dXJuIHJLKHRoaXMpLmZvcm1hdEhzbCgpfSxmb3JtYXRSZ2I6JFosdG9TdHJpbmc6JFp9KSxXaChlYSxpMCx0MChycCx7YnJpZ2h0ZXI6ZnVuY3Rpb24obil7cmV0dXJuIG49bnVsbD09bj9sRDpNYXRoLnBvdyhsRCxuKSxuZXcgZWEodGhpcy5yKm4sdGhpcy5nKm4sdGhpcy5iKm4sdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKG4pe3JldHVybiBuPW51bGw9PW4/Ljc6TWF0aC5wb3coLjcsbiksbmV3IGVhKHRoaXMucipuLHRoaXMuZypuLHRoaXMuYipuLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6dEssZm9ybWF0SGV4OnRLLGZvcm1hdFJnYjpuSyx0b1N0cmluZzpuS30pKSxXaChCYyxxaCx0MChycCx7YnJpZ2h0ZXI6ZnVuY3Rpb24obil7cmV0dXJuIG49bnVsbD09bj9sRDpNYXRoLnBvdyhsRCxuKSxuZXcgQmModGhpcy5oLHRoaXMucyx0aGlzLmwqbix0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24obil7cmV0dXJuIG49bnVsbD09bj8uNzpNYXRoLnBvdyguNyxuKSxuZXcgQmModGhpcy5oLHRoaXMucyx0aGlzLmwqbix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgbj10aGlzLmglMzYwKzM2MCoodGhpcy5oPDApLHQ9aXNOYU4obil8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMsZT10aGlzLmwsaT1lKyhlPC41P2U6MS1lKSp0LHI9MiplLWk7cmV0dXJuIG5ldyBlYShRTihuPj0yNDA/bi0yNDA6bisxMjAscixpKSxRTihuLHIsaSksUU4objwxMjA/bisyNDA6bi0xMjAscixpKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsOmZ1bmN0aW9uKCl7dmFyIG49dGhpcy5vcGFjaXR5O3JldHVybigxPT09KG49aXNOYU4obik/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsbikpKT8iaHNsKCI6ImhzbGEoIikrKHRoaXMuaHx8MCkrIiwgIisxMDAqKHRoaXMuc3x8MCkrIiUsICIrMTAwKih0aGlzLmx8fDApKyIlIisoMT09PW4/IikiOiIsICIrbisiKSIpfX0pKTt2YXIgb0s9TWF0aC5QSS8xODAsYUs9MTgwL01hdGguUEksc0s9Ljk2NDIyLGxLPTEsY0s9LjgyNTIxLGRLPTQvMjkscjA9Ni8yOSx1Sz0zKnIwKnIwLFFUZT1yMCpyMCpyMDtmdW5jdGlvbiBwSyhuKXtpZihuIGluc3RhbmNlb2YgSGMpcmV0dXJuIG5ldyBIYyhuLmwsbi5hLG4uYixuLm9wYWNpdHkpO2lmKG4gaW5zdGFuY2VvZiBQZClyZXR1cm4gaEsobik7biBpbnN0YW5jZW9mIGVhfHwobj1aTihuKSk7dmFyIG8sYSx0PWVMKG4uciksZT1lTChuLmcpLGk9ZUwobi5iKSxyPUtOKCguMjIyNTA0NSp0Ky43MTY4Nzg2KmUrLjA2MDYxNjkqaSkvbEspO3JldHVybiB0PT09ZSYmZT09PWk/bz1hPXI6KG89S04oKC40MzYwNzQ3KnQrLjM4NTA2NDkqZSsuMTQzMDgwNCppKS9zSyksYT1LTigoLjAxMzkzMjIqdCsuMDk3MTA0NSplKy43MTQxNzMzKmkpL2NLKSksbmV3IEhjKDExNipyLTE2LDUwMCooby1yKSwyMDAqKHItYSksbi5vcGFjaXR5KX1mdW5jdGlvbiBIYyhuLHQsZSxpKXt0aGlzLmw9K24sdGhpcy5hPSt0LHRoaXMuYj0rZSx0aGlzLm9wYWNpdHk9K2l9ZnVuY3Rpb24gS04obil7cmV0dXJuIG4+UVRlP01hdGgucG93KG4sMS8zKTpuL3VLK2RLfWZ1bmN0aW9uIEpOKG4pe3JldHVybiBuPnIwP24qbipuOnVLKihuLWRLKX1mdW5jdGlvbiAkTihuKXtyZXR1cm4gMjU1KihuPD0uMDAzMTMwOD8xMi45MipuOjEuMDU1Kk1hdGgucG93KG4sMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIGVMKG4pe3JldHVybihuLz0yNTUpPD0uMDQwNDU/bi8xMi45MjpNYXRoLnBvdygobisuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIFhoKG4sdCxlLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9mdW5jdGlvbihuKXtpZihuIGluc3RhbmNlb2YgUGQpcmV0dXJuIG5ldyBQZChuLmgsbi5jLG4ubCxuLm9wYWNpdHkpO2lmKG4gaW5zdGFuY2VvZiBIY3x8KG49cEsobikpLDA9PT1uLmEmJjA9PT1uLmIpcmV0dXJuIG5ldyBQZChOYU4sMDxuLmwmJm4ubDwxMDA/MDpOYU4sbi5sLG4ub3BhY2l0eSk7dmFyIHQ9TWF0aC5hdGFuMihuLmIsbi5hKSphSztyZXR1cm4gbmV3IFBkKHQ8MD90KzM2MDp0LE1hdGguc3FydChuLmEqbi5hK24uYipuLmIpLG4ubCxuLm9wYWNpdHkpfShuKTpuZXcgUGQobix0LGUsaT8/MSl9ZnVuY3Rpb24gUGQobix0LGUsaSl7dGhpcy5oPStuLHRoaXMuYz0rdCx0aGlzLmw9K2UsdGhpcy5vcGFjaXR5PStpfWZ1bmN0aW9uIGhLKG4pe2lmKGlzTmFOKG4uaCkpcmV0dXJuIG5ldyBIYyhuLmwsMCwwLG4ub3BhY2l0eSk7dmFyIHQ9bi5oKm9LO3JldHVybiBuZXcgSGMobi5sLE1hdGguY29zKHQpKm4uYyxNYXRoLnNpbih0KSpuLmMsbi5vcGFjaXR5KX1mdW5jdGlvbiBuTChuLHQsZSxpLHIpe3ZhciBvPW4qbixhPW8qbjtyZXR1cm4oKDEtMypuKzMqby1hKSp0Kyg0LTYqbyszKmEpKmUrKDErMypuKzMqby0zKmEpKmkrYSpyKS82fWZ1bmN0aW9uIG8wKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBufX1mdW5jdGlvbiBnSyhuLHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gbitlKnR9fWZ1bmN0aW9uIGREKG4sdCl7dmFyIGU9dC1uO3JldHVybiBlP2dLKG4sZT4xODB8fGU8LTE4MD9lLTM2MCpNYXRoLnJvdW5kKGUvMzYwKTplKTpvMChpc05hTihuKT90Om4pfWZ1bmN0aW9uIEthKG4sdCl7dmFyIGU9dC1uO3JldHVybiBlP2dLKG4sZSk6bzAoaXNOYU4obik/dDpuKX1XaChIYyxmdW5jdGlvbihuLHQsZSxpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/cEsobik6bmV3IEhjKG4sdCxlLGk/PzEpfSx0MChycCx7YnJpZ2h0ZXI6ZnVuY3Rpb24obil7cmV0dXJuIG5ldyBIYyh0aGlzLmwrMTgqKG4/PzEpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKG4pe3JldHVybiBuZXcgSGModGhpcy5sLTE4KihuPz8xKSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBuPSh0aGlzLmwrMTYpLzExNix0PWlzTmFOKHRoaXMuYSk/bjpuK3RoaXMuYS81MDAsZT1pc05hTih0aGlzLmIpP246bi10aGlzLmIvMjAwO3JldHVybiBuZXcgZWEoJE4oMy4xMzM4NTYxKih0PXNLKkpOKHQpKS0xLjYxNjg2NjcqKG49bEsqSk4obikpLS40OTA2MTQ2KihlPWNLKkpOKGUpKSksJE4oLS45Nzg3Njg0KnQrMS45MTYxNDE1Km4rLjAzMzQ1NCplKSwkTiguMDcxOTQ1Myp0LS4yMjg5OTE0Km4rMS40MDUyNDI3KmUpLHRoaXMub3BhY2l0eSl9fSkpLFdoKFBkLFhoLHQwKHJwLHticmlnaHRlcjpmdW5jdGlvbihuKXtyZXR1cm4gbmV3IFBkKHRoaXMuaCx0aGlzLmMsdGhpcy5sKzE4KihuPz8xKSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24obil7cmV0dXJuIG5ldyBQZCh0aGlzLmgsdGhpcy5jLHRoaXMubC0xOCoobj8/MSksdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIGhLKHRoaXMpLnJnYigpfX0pKTt2YXIgWWg9ZnVuY3Rpb24gbih0KXt2YXIgZT1mdW5jdGlvbihuKXtyZXR1cm4gMT09KG49K24pP0thOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUtdD9mdW5jdGlvbihuLHQsZSl7cmV0dXJuIG49TWF0aC5wb3cobixlKSx0PU1hdGgucG93KHQsZSktbixlPTEvZSxmdW5jdGlvbihpKXtyZXR1cm4gTWF0aC5wb3cobitpKnQsZSl9fSh0LGUsbik6bzAoaXNOYU4odCk/ZTp0KX19KHQpO2Z1bmN0aW9uIGkocixvKXt2YXIgYT1lKChyPWkwKHIpKS5yLChvPWkwKG8pKS5yKSxzPWUoci5nLG8uZyksbD1lKHIuYixvLmIpLGM9S2Eoci5vcGFjaXR5LG8ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybiByLnI9YShkKSxyLmc9cyhkKSxyLmI9bChkKSxyLm9wYWNpdHk9YyhkKSxyKyIifX1yZXR1cm4gaS5nYW1tYT1uLGl9KDEpO2Z1bmN0aW9uIGJLKG4pe3JldHVybiBmdW5jdGlvbih0KXt2YXIgYSxzLGU9dC5sZW5ndGgsaT1uZXcgQXJyYXkoZSkscj1uZXcgQXJyYXkoZSksbz1uZXcgQXJyYXkoZSk7Zm9yKGE9MDthPGU7KythKXM9aTAodFthXSksaVthXT1zLnJ8fDAsclthXT1zLmd8fDAsb1thXT1zLmJ8fDA7cmV0dXJuIGk9bihpKSxyPW4ociksbz1uKG8pLHMub3BhY2l0eT0xLGZ1bmN0aW9uKGwpe3JldHVybiBzLnI9aShsKSxzLmc9cihsKSxzLmI9byhsKSxzKyIifX19ZnVuY3Rpb24gdksobix0KXt0fHwodD1bXSk7dmFyIHIsZT1uP01hdGgubWluKHQubGVuZ3RoLG4ubGVuZ3RoKTowLGk9dC5zbGljZSgpO3JldHVybiBmdW5jdGlvbihvKXtmb3Iocj0wO3I8ZTsrK3IpaVtyXT1uW3JdKigxLW8pK3Rbcl0qbztyZXR1cm4gaX19ZnVuY3Rpb24geEsobix0KXt2YXIgYSxlPXQ/dC5sZW5ndGg6MCxpPW4/TWF0aC5taW4oZSxuLmxlbmd0aCk6MCxyPW5ldyBBcnJheShpKSxvPW5ldyBBcnJheShlKTtmb3IoYT0wO2E8aTsrK2EpclthXT1RaChuW2FdLHRbYV0pO2Zvcig7YTxlOysrYSlvW2FdPXRbYV07cmV0dXJuIGZ1bmN0aW9uKHMpe2ZvcihhPTA7YTxpOysrYSlvW2FdPXJbYV0ocyk7cmV0dXJuIG99fWZ1bmN0aW9uIENLKG4sdCl7dmFyIGU9bmV3IERhdGU7cmV0dXJuIG49K24sdD0rdCxmdW5jdGlvbihpKXtyZXR1cm4gZS5zZXRUaW1lKG4qKDEtaSkrdCppKSxlfX1mdW5jdGlvbiBVbyhuLHQpe3JldHVybiBuPStuLHQ9K3QsZnVuY3Rpb24oZSl7cmV0dXJuIG4qKDEtZSkrdCplfX1mdW5jdGlvbiBNSyhuLHQpe3ZhciByLGU9e30saT17fTtmb3IociBpbihudWxsPT09bnx8Im9iamVjdCIhPXR5cGVvZiBuKSYmKG49e30pLChudWxsPT09dHx8Im9iamVjdCIhPXR5cGVvZiB0KSYmKHQ9e30pLHQpciBpbiBuP2Vbcl09UWgobltyXSx0W3JdKTppW3JdPXRbcl07cmV0dXJuIGZ1bmN0aW9uKG8pe2ZvcihyIGluIGUpaVtyXT1lW3JdKG8pO3JldHVybiBpfX1iSyhmdW5jdGlvbihuKXt2YXIgdD1uLmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihlKXt2YXIgaT1lPD0wP2U9MDplPj0xPyhlPTEsdC0xKTpNYXRoLmZsb29yKGUqdCkscj1uW2ldLG89bltpKzFdO3JldHVybiBuTCgoZS1pL3QpKnQsaT4wP25baS0xXToyKnItbyxyLG8saTx0LTE/bltpKzJdOjIqby1yKX19KSxiSyhmdW5jdGlvbihuKXt2YXIgdD1uLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIGk9TWF0aC5mbG9vcigoKGUlPTEpPDA/KytlOmUpKnQpO3JldHVybiBuTCgoZS1pL3QpKnQsblsoaSt0LTEpJXRdLG5baSV0XSxuWyhpKzEpJXRdLG5bKGkrMikldF0pfX0pO3ZhciByTD0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csaUw9bmV3IFJlZ0V4cChyTC5zb3VyY2UsImciKTtmdW5jdGlvbiBBeShuLHQpe3ZhciBpLHIsbyxlPXJMLmxhc3RJbmRleD1pTC5sYXN0SW5kZXg9MCxhPS0xLHM9W10sbD1bXTtmb3Iobis9IiIsdCs9IiI7KGk9ckwuZXhlYyhuKSkmJihyPWlMLmV4ZWModCkpOykobz1yLmluZGV4KT5lJiYobz10LnNsaWNlKGUsbyksc1thXT9zW2FdKz1vOnNbKythXT1vKSwoaT1pWzBdKT09PShyPXJbMF0pP3NbYV0/c1thXSs9cjpzWysrYV09cjooc1srK2FdPW51bGwsbC5wdXNoKHtpOmEseDpVbyhpLHIpfSkpLGU9aUwubGFzdEluZGV4O3JldHVybiBlPHQubGVuZ3RoJiYobz10LnNsaWNlKGUpLHNbYV0/c1thXSs9bzpzWysrYV09bykscy5sZW5ndGg8Mj9sWzBdP2Z1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbih0KSsiIn19KGxbMF0ueCk6ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG59fSh0KToodD1sLmxlbmd0aCxmdW5jdGlvbihjKXtmb3IodmFyIHUsZD0wO2Q8dDsrK2Qpc1sodT1sW2RdKS5pXT11LngoYyk7cmV0dXJuIHMuam9pbigiIil9KX1mdW5jdGlvbiBRaChuLHQpe3ZhciBpLGU9dHlwZW9mIHQ7cmV0dXJuIG51bGw9PXR8fCJib29sZWFuIj09PWU/bzAodCk6KCJudW1iZXIiPT09ZT9Vbzoic3RyaW5nIj09PWU/KGk9SGwodCkpPyh0PWksWWgpOkF5OnQgaW5zdGFuY2VvZiBIbD9ZaDp0IGluc3RhbmNlb2YgRGF0ZT9DSzpmdW5jdGlvbihuKXtyZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KG4pJiYhKG4gaW5zdGFuY2VvZiBEYXRhVmlldyl9KHQpP3ZLOkFycmF5LmlzQXJyYXkodCk/eEs6ImZ1bmN0aW9uIiE9dHlwZW9mIHQudmFsdWVPZiYmImZ1bmN0aW9uIiE9dHlwZW9mIHQudG9TdHJpbmd8fGlzTmFOKHQpP01LOlVvKShuLHQpfWZ1bmN0aW9uIG9MKG4sdCl7cmV0dXJuIG49K24sdD0rdCxmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChuKigxLWUpK3QqZSl9fXZhciBSeSxzTCxTSyxwRCx3Sz0xODAvTWF0aC5QSSx1RD17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfTtmdW5jdGlvbiBhTChuLHQsZSxpLHIsbyl7dmFyIGEscyxsO3JldHVybihhPU1hdGguc3FydChuKm4rdCp0KSkmJihuLz1hLHQvPWEpLChsPW4qZSt0KmkpJiYoZS09bipsLGktPXQqbCksKHM9TWF0aC5zcXJ0KGUqZStpKmkpKSYmKGUvPXMsaS89cyxsLz1zKSxuKmk8dCplJiYobj0tbix0PS10LGw9LWwsYT0tYSkse3RyYW5zbGF0ZVg6cix0cmFuc2xhdGVZOm8scm90YXRlOk1hdGguYXRhbjIodCxuKSp3Syxza2V3WDpNYXRoLmF0YW4obCkqd0ssc2NhbGVYOmEsc2NhbGVZOnN9fWZ1bmN0aW9uIERLKG4sdCxlLGkpe2Z1bmN0aW9uIHIoYyl7cmV0dXJuIGMubGVuZ3RoP2MucG9wKCkrIiAiOiIifXJldHVybiBmdW5jdGlvbihjLGQpe3ZhciB1PVtdLHA9W107cmV0dXJuIGM9bihjKSxkPW4oZCksZnVuY3Rpb24oYyxkLHUscCxoLG0pe2lmKGMhPT11fHxkIT09cCl7dmFyIF89aC5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLHQsbnVsbCxlKTttLnB1c2goe2k6Xy00LHg6VW8oYyx1KX0se2k6Xy0yLHg6VW8oZCxwKX0pfWVsc2UodXx8cCkmJmgucHVzaCgidHJhbnNsYXRlKCIrdSt0K3ArZSl9KGMudHJhbnNsYXRlWCxjLnRyYW5zbGF0ZVksZC50cmFuc2xhdGVYLGQudHJhbnNsYXRlWSx1LHApLGZ1bmN0aW9uKGMsZCx1LHApe2MhPT1kPyhjLWQ+MTgwP2QrPTM2MDpkLWM+MTgwJiYoYys9MzYwKSxwLnB1c2goe2k6dS5wdXNoKHIodSkrInJvdGF0ZSgiLG51bGwsaSktMix4OlVvKGMsZCl9KSk6ZCYmdS5wdXNoKHIodSkrInJvdGF0ZSgiK2QraSl9KGMucm90YXRlLGQucm90YXRlLHUscCksZnVuY3Rpb24oYyxkLHUscCl7YyE9PWQ/cC5wdXNoKHtpOnUucHVzaChyKHUpKyJza2V3WCgiLG51bGwsaSktMix4OlVvKGMsZCl9KTpkJiZ1LnB1c2gocih1KSsic2tld1goIitkK2kpfShjLnNrZXdYLGQuc2tld1gsdSxwKSxmdW5jdGlvbihjLGQsdSxwLGgsbSl7aWYoYyE9PXV8fGQhPT1wKXt2YXIgXz1oLnB1c2gocihoKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7bS5wdXNoKHtpOl8tNCx4OlVvKGMsdSl9LHtpOl8tMix4OlVvKGQscCl9KX1lbHNlKDEhPT11fHwxIT09cCkmJmgucHVzaChyKGgpKyJzY2FsZSgiK3UrIiwiK3ArIikiKX0oYy5zY2FsZVgsYy5zY2FsZVksZC5zY2FsZVgsZC5zY2FsZVksdSxwKSxjPWQ9bnVsbCxmdW5jdGlvbihoKXtmb3IodmFyIE0sbT0tMSxfPXAubGVuZ3RoOysrbTxfOyl1WyhNPXBbbV0pLmldPU0ueChoKTtyZXR1cm4gdS5qb2luKCIiKX19fXZhciBsTD1ESyhmdW5jdGlvbihuKXtyZXR1cm4ibm9uZSI9PT1uP3VEOihSeXx8KFJ5PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLHNMPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxTSz1kb2N1bWVudC5kZWZhdWx0VmlldyksUnkuc3R5bGUudHJhbnNmb3JtPW4sbj1TSy5nZXRDb21wdXRlZFN0eWxlKHNMLmFwcGVuZENoaWxkKFJ5KSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxzTC5yZW1vdmVDaGlsZChSeSksYUwoKyhuPW4uc2xpY2UoNywtMSkuc3BsaXQoIiwiKSlbMF0sK25bMV0sK25bMl0sK25bM10sK25bNF0sK25bNV0pKX0sInB4LCAiLCJweCkiLCJkZWcpIiksY0w9REsoZnVuY3Rpb24obil7cmV0dXJuIG51bGw9PW4/dUQ6KHBEfHwocEQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSkscEQuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLG4pLChuPXBELnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpP2FMKChuPW4ubWF0cml4KS5hLG4uYixuLmMsbi5kLG4uZSxuLmYpOnVEKX0sIiwgIiwiKSIsIikiKTtmdW5jdGlvbiBJSyhuKXtyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgaT1uKCh0PXFoKHQpKS5oLChlPXFoKGUpKS5oKSxyPUthKHQucyxlLnMpLG89S2EodC5sLGUubCksYT1LYSh0Lm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIHQuaD1pKHMpLHQucz1yKHMpLHQubD1vKHMpLHQub3BhY2l0eT1hKHMpLHQrIiJ9fX12YXIgZEw9SUsoZEQpO2Z1bmN0aW9uIEFLKG4pe3JldHVybiBmdW5jdGlvbih0LGUpe3ZhciBpPW4oKHQ9WGgodCkpLmgsKGU9WGgoZSkpLmgpLHI9S2EodC5jLGUuYyksbz1LYSh0LmwsZS5sKSxhPUthKHQub3BhY2l0eSxlLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihzKXtyZXR1cm4gdC5oPWkocyksdC5jPXIocyksdC5sPW8ocyksdC5vcGFjaXR5PWEocyksdCsiIn19fUlLKEthKTt2YXIgaEQsT3ksdUw9QUsoZEQpLGEwPShBSyhLYSksMCksa3k9MCxQeT0wLFBLPTFlMyxtRD0wLFpoPTAsZkQ9MCxGeT0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxrSz0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbihuKXtzZXRUaW1lb3V0KG4sMTcpfTtmdW5jdGlvbiBzMCgpe3JldHVybiBaaHx8KGtLKHJEZSksWmg9Rnkubm93KCkrZkQpfWZ1bmN0aW9uIHJEZSgpe1poPTB9ZnVuY3Rpb24gTnkoKXt0aGlzLl9jYWxsPXRoaXMuX3RpbWU9dGhpcy5fbmV4dD1udWxsfWZ1bmN0aW9uIGdEKG4sdCxlKXt2YXIgaT1uZXcgTnk7cmV0dXJuIGkucmVzdGFydChuLHQsZSksaX1mdW5jdGlvbiBSSygpe1poPShtRD1GeS5ub3coKSkrZkQsYTA9a3k9MDt0cnl7IWZ1bmN0aW9uKCl7czAoKSwrK2EwO2Zvcih2YXIgdCxuPWhEO247KSh0PVpoLW4uX3RpbWUpPj0wJiZuLl9jYWxsLmNhbGwobnVsbCx0KSxuPW4uX25leHQ7LS1hMH0oKX1maW5hbGx5e2EwPTAsZnVuY3Rpb24oKXtmb3IodmFyIG4sZSx0PWhELGk9MS8wO3Q7KXQuX2NhbGw/KGk+dC5fdGltZSYmKGk9dC5fdGltZSksbj10LHQ9dC5fbmV4dCk6KGU9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1uP24uX25leHQ9ZTpoRD1lKTtPeT1uLHBMKGkpfSgpLFpoPTB9fWZ1bmN0aW9uIG9EZSgpe3ZhciBuPUZ5Lm5vdygpLHQ9bi1tRDt0PlBLJiYoZkQtPXQsbUQ9bil9ZnVuY3Rpb24gcEwobil7YTB8fChreSYmKGt5PWNsZWFyVGltZW91dChreSkpLG4tWmg+MjQ/KG48MS8wJiYoa3k9c2V0VGltZW91dChSSyxuLUZ5Lm5vdygpLWZEKSksUHkmJihQeT1jbGVhckludGVydmFsKFB5KSkpOihQeXx8KG1EPUZ5Lm5vdygpLFB5PXNldEludGVydmFsKG9EZSxQSykpLGEwPTEsa0soUkspKSl9ZnVuY3Rpb24gX0Qobix0LGUpe3ZhciBpPW5ldyBOeTtyZXR1cm4gaS5yZXN0YXJ0KGZ1bmN0aW9uKHIpe2kuc3RvcCgpLG4ocit0KX0sdD1udWxsPT10PzA6K3QsZSksaX1OeS5wcm90b3R5cGU9Z0QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpOeSxyZXN0YXJ0OmZ1bmN0aW9uKG4sdCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO2U9KG51bGw9PWU/czAoKTorZSkrKG51bGw9PXQ/MDordCksIXRoaXMuX25leHQmJk95IT09dGhpcyYmKE95P095Ll9uZXh0PXRoaXM6aEQ9dGhpcyxPeT10aGlzKSx0aGlzLl9jYWxsPW4sdGhpcy5fdGltZT1lLHBMKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLHBMKCkpfX07dmFyIHNEZT1qTigic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxsRGU9W10sTks9MCxoTD0xLHZEPTIsYkQ9MyxGSz00LHlEPTUsTHk9NjtmdW5jdGlvbiBvcChuLHQsZSxpLHIsbyl7dmFyIGE9bi5fX3RyYW5zaXRpb247aWYoYSl7aWYoZSBpbiBhKXJldHVybn1lbHNlIG4uX190cmFuc2l0aW9uPXt9OyFmdW5jdGlvbihuLHQsZSl7dmFyIHIsaT1uLl9fdHJhbnNpdGlvbjtmdW5jdGlvbiBhKGMpe3ZhciBkLHUscCxoO2lmKGUuc3RhdGUhPT1oTClyZXR1cm4gbCgpO2ZvcihkIGluIGkpaWYoKGg9aVtkXSkubmFtZT09PWUubmFtZSl7aWYoaC5zdGF0ZT09PWJEKXJldHVybiBfRChhKTtoLnN0YXRlPT09Rks/KGguc3RhdGU9THksaC50aW1lci5zdG9wKCksaC5vbi5jYWxsKCJpbnRlcnJ1cHQiLG4sbi5fX2RhdGFfXyxoLmluZGV4LGguZ3JvdXApLGRlbGV0ZSBpW2RdKTorZDx0JiYoaC5zdGF0ZT1MeSxoLnRpbWVyLnN0b3AoKSxoLm9uLmNhbGwoImNhbmNlbCIsbixuLl9fZGF0YV9fLGguaW5kZXgsaC5ncm91cCksZGVsZXRlIGlbZF0pfWlmKF9EKGZ1bmN0aW9uKCl7ZS5zdGF0ZT09PWJEJiYoZS5zdGF0ZT1GSyxlLnRpbWVyLnJlc3RhcnQocyxlLmRlbGF5LGUudGltZSkscyhjKSl9KSxlLnN0YXRlPXZELGUub24uY2FsbCgic3RhcnQiLG4sbi5fX2RhdGFfXyxlLmluZGV4LGUuZ3JvdXApLGUuc3RhdGU9PT12RCl7Zm9yKGUuc3RhdGU9YkQscj1uZXcgQXJyYXkocD1lLnR3ZWVuLmxlbmd0aCksZD0wLHU9LTE7ZDxwOysrZCkoaD1lLnR3ZWVuW2RdLnZhbHVlLmNhbGwobixuLl9fZGF0YV9fLGUuaW5kZXgsZS5ncm91cCkpJiYoclsrK3VdPWgpO3IubGVuZ3RoPXUrMX19ZnVuY3Rpb24gcyhjKXtmb3IodmFyIGQ9YzxlLmR1cmF0aW9uP2UuZWFzZS5jYWxsKG51bGwsYy9lLmR1cmF0aW9uKTooZS50aW1lci5yZXN0YXJ0KGwpLGUuc3RhdGU9eUQsMSksdT0tMSxwPXIubGVuZ3RoOysrdTxwOylyW3VdLmNhbGwobixkKTtlLnN0YXRlPT09eUQmJihlLm9uLmNhbGwoImVuZCIsbixuLl9fZGF0YV9fLGUuaW5kZXgsZS5ncm91cCksbCgpKX1mdW5jdGlvbiBsKCl7Zm9yKHZhciBjIGluIGUuc3RhdGU9THksZS50aW1lci5zdG9wKCksZGVsZXRlIGlbdF0saSlyZXR1cm47ZGVsZXRlIG4uX190cmFuc2l0aW9ufWlbdF09ZSxlLnRpbWVyPWdEKGZ1bmN0aW9uKGMpe2Uuc3RhdGU9aEwsZS50aW1lci5yZXN0YXJ0KGEsZS5kZWxheSxlLnRpbWUpLGUuZGVsYXk8PWMmJmEoYy1lLmRlbGF5KX0sMCxlLnRpbWUpfShuLGUse25hbWU6dCxpbmRleDppLGdyb3VwOnIsb246c0RlLHR3ZWVuOmxEZSx0aW1lOm8udGltZSxkZWxheTpvLmRlbGF5LGR1cmF0aW9uOm8uZHVyYXRpb24sZWFzZTpvLmVhc2UsdGltZXI6bnVsbCxzdGF0ZTpOS30pfWZ1bmN0aW9uIEJ5KG4sdCl7dmFyIGU9X28obix0KTtpZihlLnN0YXRlPk5LKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgc2NoZWR1bGVkIik7cmV0dXJuIGV9ZnVuY3Rpb24geWEobix0KXt2YXIgZT1fbyhuLHQpO2lmKGUuc3RhdGU+YkQpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBydW5uaW5nIik7cmV0dXJuIGV9ZnVuY3Rpb24gX28obix0KXt2YXIgZT1uLl9fdHJhbnNpdGlvbjtpZighZXx8IShlPWVbdF0pKXRocm93IG5ldyBFcnJvcigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gZX1mdW5jdGlvbiBkRGUobix0KXt2YXIgZSxpO3JldHVybiBmdW5jdGlvbigpe3ZhciByPXlhKHRoaXMsbiksbz1yLnR3ZWVuO2lmKG8hPT1lKWZvcih2YXIgYT0wLHM9KGk9ZT1vKS5sZW5ndGg7YTxzOysrYSlpZihpW2FdLm5hbWU9PT10KXsoaT1pLnNsaWNlKCkpLnNwbGljZShhLDEpO2JyZWFrfXIudHdlZW49aX19ZnVuY3Rpb24gdURlKG4sdCxlKXt2YXIgaSxyO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz15YSh0aGlzLG4pLGE9by50d2VlbjtpZihhIT09aSl7cj0oaT1hKS5zbGljZSgpO2Zvcih2YXIgcz17bmFtZTp0LHZhbHVlOmV9LGw9MCxjPXIubGVuZ3RoO2w8YzsrK2wpaWYocltsXS5uYW1lPT09dCl7cltsXT1zO2JyZWFrfWw9PT1jJiZyLnB1c2gocyl9by50d2Vlbj1yfX1mdW5jdGlvbiBsMChuLHQsZSl7dmFyIGk9bi5faWQ7cmV0dXJuIG4uZWFjaChmdW5jdGlvbigpe3ZhciByPXlhKHRoaXMsaSk7KHIudmFsdWV8fChyLnZhbHVlPXt9KSlbdF09ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxmdW5jdGlvbihyKXtyZXR1cm4gX28ocixpKS52YWx1ZVt0XX19ZnVuY3Rpb24geEQobix0KXt2YXIgZTtyZXR1cm4oIm51bWJlciI9PXR5cGVvZiB0P1VvOnQgaW5zdGFuY2VvZiBIbD9ZaDooZT1IbCh0KSk/KHQ9ZSxZaCk6QXkpKG4sdCl9ZnVuY3Rpb24gcERlKG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKG4pfX1mdW5jdGlvbiBoRGUobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpfX1mdW5jdGlvbiBtRGUobix0LGUpe3ZhciBpLG8scj1lKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlKG4pO3JldHVybiBhPT09cj9udWxsOmE9PT1pP286bz10KGk9YSxlKX19ZnVuY3Rpb24gZkRlKG4sdCxlKXt2YXIgaSxvLHI9ZSsiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCk7cmV0dXJuIGE9PT1yP251bGw6YT09PWk/bzpvPXQoaT1hLGUpfX1mdW5jdGlvbiBnRGUobix0LGUpe3ZhciBpLHIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxsLHM9ZSh0aGlzKTtyZXR1cm4gbnVsbD09cz92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKG4pOihhPXRoaXMuZ2V0QXR0cmlidXRlKG4pKT09PShsPXMrIiIpP251bGw6YT09PWkmJmw9PT1yP286KHI9bCxvPXQoaT1hLHMpKX19ZnVuY3Rpb24gX0RlKG4sdCxlKXt2YXIgaSxyLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGEsbCxzPWUodGhpcyk7cmV0dXJuIG51bGw9PXM/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCk6KGE9dGhpcy5nZXRBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpKT09PShsPXMrIiIpP251bGw6YT09PWkmJmw9PT1yP286KHI9bCxvPXQoaT1hLHMpKX19ZnVuY3Rpb24geURlKG4sdCl7dmFyIGUsaTtmdW5jdGlvbiByKCl7dmFyIG89dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG8hPT1pJiYoZT0oaT1vKSYmZnVuY3Rpb24obix0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dGhpcy5zZXRBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwsdC5jYWxsKHRoaXMsZSkpfX0obixvKSksZX1yZXR1cm4gci5fdmFsdWU9dCxyfWZ1bmN0aW9uIHhEZShuLHQpe3ZhciBlLGk7ZnVuY3Rpb24gcigpe3ZhciBvPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBvIT09aSYmKGU9KGk9bykmJmZ1bmN0aW9uKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMuc2V0QXR0cmlidXRlKG4sdC5jYWxsKHRoaXMsZSkpfX0obixvKSksZX1yZXR1cm4gci5fdmFsdWU9dCxyfWZ1bmN0aW9uIENEZShuLHQpe3JldHVybiBmdW5jdGlvbigpe0J5KHRoaXMsbikuZGVsYXk9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBNRGUobix0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe0J5KHRoaXMsbikuZGVsYXk9dH19ZnVuY3Rpb24gd0RlKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7eWEodGhpcyxuKS5kdXJhdGlvbj0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIFNEZShuLHQpe3JldHVybiB0PSt0LGZ1bmN0aW9uKCl7eWEodGhpcyxuKS5kdXJhdGlvbj10fX12YXIgQURlPVJkLnByb3RvdHlwZS5jb25zdHJ1Y3RvcjtmdW5jdGlvbiBLSyhuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pfX12YXIgekRlPTA7ZnVuY3Rpb24gdGEobix0LGUsaSl7dGhpcy5fZ3JvdXBzPW4sdGhpcy5fcGFyZW50cz10LHRoaXMuX25hbWU9ZSx0aGlzLl9pZD1pfWZ1bmN0aW9uIENEKCl7cmV0dXJuKyt6RGV9dmFyIGMwPVJkLnByb3RvdHlwZTt0YS5wcm90b3R5cGU9ZnVuY3Rpb24obil7cmV0dXJuIFJkKCkudHJhbnNpdGlvbihuKX0ucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp0YSxzZWxlY3Q6ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5fbmFtZSxlPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiBuJiYobj1HaChuKSk7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLG89bmV3IEFycmF5KHIpLGE9MDthPHI7KythKWZvcih2YXIgZCx1LHM9aVthXSxsPXMubGVuZ3RoLGM9b1thXT1uZXcgQXJyYXkobCkscD0wO3A8bDsrK3ApKGQ9c1twXSkmJih1PW4uY2FsbChkLGQuX19kYXRhX18scCxzKSkmJigiX19kYXRhX18iaW4gZCYmKHUuX19kYXRhX189ZC5fX2RhdGFfXyksY1twXT11LG9wKGNbcF0sdCxlLHAsYyxfbyhkLGUpKSk7cmV0dXJuIG5ldyB0YShvLHRoaXMuX3BhcmVudHMsdCxlKX0sc2VsZWN0QWxsOmZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMuX25hbWUsZT10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49U3kobikpO2Zvcih2YXIgaT10aGlzLl9ncm91cHMscj1pLmxlbmd0aCxvPVtdLGE9W10scz0wO3M8cjsrK3MpZm9yKHZhciBkLGw9aVtzXSxjPWwubGVuZ3RoLHU9MDt1PGM7Kyt1KWlmKGQ9bFt1XSl7Zm9yKHZhciBoLHA9bi5jYWxsKGQsZC5fX2RhdGFfXyx1LGwpLG09X28oZCxlKSxfPTAsTT1wLmxlbmd0aDtfPE07KytfKShoPXBbX10pJiZvcChoLHQsZSxfLHAsbSk7by5wdXNoKHApLGEucHVzaChkKX1yZXR1cm4gbmV3IHRhKG8sYSx0LGUpfSxmaWx0ZXI6ZnVuY3Rpb24obil7ImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihuPUV5KG4pKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9dC5sZW5ndGgsaT1uZXcgQXJyYXkoZSkscj0wO3I8ZTsrK3IpZm9yKHZhciBsLG89dFtyXSxhPW8ubGVuZ3RoLHM9aVtyXT1bXSxjPTA7YzxhOysrYykobD1vW2NdKSYmbi5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyB0YShpLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LG1lcmdlOmZ1bmN0aW9uKG4pe2lmKG4uX2lkIT09dGhpcy5faWQpdGhyb3cgbmV3IEVycm9yO2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT1uLl9ncm91cHMsaT10Lmxlbmd0aCxvPU1hdGgubWluKGksZS5sZW5ndGgpLGE9bmV3IEFycmF5KGkpLHM9MDtzPG87KytzKWZvcih2YXIgcCxsPXRbc10sYz1lW3NdLGQ9bC5sZW5ndGgsdT1hW3NdPW5ldyBBcnJheShkKSxoPTA7aDxkOysraCkocD1sW2hdfHxjW2hdKSYmKHVbaF09cCk7Zm9yKDtzPGk7KytzKWFbc109dFtzXTtyZXR1cm4gbmV3IHRhKGEsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sc2VsZWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBBRGUodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfSx0cmFuc2l0aW9uOmZ1bmN0aW9uKCl7Zm9yKHZhciBuPXRoaXMuX25hbWUsdD10aGlzLl9pZCxlPUNEKCksaT10aGlzLl9ncm91cHMscj1pLmxlbmd0aCxvPTA7bzxyOysrbylmb3IodmFyIGwsYT1pW29dLHM9YS5sZW5ndGgsYz0wO2M8czsrK2MpaWYobD1hW2NdKXt2YXIgZD1fbyhsLHQpO29wKGwsbixlLGMsYSx7dGltZTpkLnRpbWUrZC5kZWxheStkLmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246ZC5kdXJhdGlvbixlYXNlOmQuZWFzZX0pfXJldHVybiBuZXcgdGEoaSx0aGlzLl9wYXJlbnRzLG4sZSl9LGNhbGw6YzAuY2FsbCxub2RlczpjMC5ub2Rlcyxub2RlOmMwLm5vZGUsc2l6ZTpjMC5zaXplLGVtcHR5OmMwLmVtcHR5LGVhY2g6YzAuZWFjaCxvbjpmdW5jdGlvbihuLHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/X28odGhpcy5ub2RlKCksZSkub24ub24obik6dGhpcy5lYWNoKGZ1bmN0aW9uKG4sdCxlKXt2YXIgaSxyLG89ZnVuY3Rpb24obil7cmV0dXJuKG4rIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbih0KXt2YXIgZT10LmluZGV4T2YoIi4iKTtyZXR1cm4gZT49MCYmKHQ9dC5zbGljZSgwLGUpKSwhdHx8InN0YXJ0Ij09PXR9KX0odCk/Qnk6eWE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9byh0aGlzLG4pLHM9YS5vbjtzIT09aSYmKHI9KGk9cykuY29weSgpKS5vbih0LGUpLGEub249cn19KGUsbix0KSl9LGF0dHI6ZnVuY3Rpb24obix0KXt2YXIgZT1BZChuKSxpPSJ0cmFuc2Zvcm0iPT09ZT9jTDp4RDtyZXR1cm4gdGhpcy5hdHRyVHdlZW4obiwiZnVuY3Rpb24iPT10eXBlb2YgdD8oZS5sb2NhbD9fRGU6Z0RlKShlLGksbDAodGhpcywiYXR0ci4iK24sdCkpOm51bGw9PXQ/KGUubG9jYWw/aERlOnBEZSkoZSk6KGUubG9jYWw/ZkRlOm1EZSkoZSxpLHQpKX0sYXR0clR3ZWVuOmZ1bmN0aW9uKG4sdCl7dmFyIGU9ImF0dHIuIituO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4oZT10aGlzLnR3ZWVuKGUpKSYmZS5fdmFsdWU7aWYobnVsbD09dClyZXR1cm4gdGhpcy50d2VlbihlLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjt2YXIgaT1BZChuKTtyZXR1cm4gdGhpcy50d2VlbihlLChpLmxvY2FsP3lEZTp4RGUpKGksdCkpfSxzdHlsZTpmdW5jdGlvbihuLHQsZSl7dmFyIGk9InRyYW5zZm9ybSI9PShuKz0iIik/bEw6eEQ7cmV0dXJuIG51bGw9PXQ/dGhpcy5zdHlsZVR3ZWVuKG4sZnVuY3Rpb24obix0KXt2YXIgZSxpLHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89aXAodGhpcyxuKSxhPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pLGlwKHRoaXMsbikpO3JldHVybiBvPT09YT9udWxsOm89PT1lJiZhPT09aT9yOnI9dChlPW8saT1hKX19KG4saSkpLm9uKCJlbmQuc3R5bGUuIituLEtLKG4pKToiZnVuY3Rpb24iPT10eXBlb2YgdD90aGlzLnN0eWxlVHdlZW4obixmdW5jdGlvbihuLHQsZSl7dmFyIGkscixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPWlwKHRoaXMsbikscz1lKHRoaXMpLGw9cysiIjtyZXR1cm4gbnVsbD09cyYmKHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobiksbD1zPWlwKHRoaXMsbikpLGE9PT1sP251bGw6YT09PWkmJmw9PT1yP286KHI9bCxvPXQoaT1hLHMpKX19KG4saSxsMCh0aGlzLCJzdHlsZS4iK24sdCkpKS5lYWNoKGZ1bmN0aW9uKG4sdCl7dmFyIGUsaSxyLHMsbz0ic3R5bGUuIit0LGE9ImVuZC4iK287cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGw9eWEodGhpcyxuKSxjPWwub24sZD1udWxsPT1sLnZhbHVlW29dP3N8fChzPUtLKHQpKTp2b2lkIDA7KGMhPT1lfHxyIT09ZCkmJihpPShlPWMpLmNvcHkoKSkub24oYSxyPWQpLGwub249aX19KHRoaXMuX2lkLG4pKTp0aGlzLnN0eWxlVHdlZW4obixmdW5jdGlvbihuLHQsZSl7dmFyIGksbyxyPWUrIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9aXAodGhpcyxuKTtyZXR1cm4gYT09PXI/bnVsbDphPT09aT9vOm89dChpPWEsZSl9fShuLGksdCksZSkub24oImVuZC5zdHlsZS4iK24sbnVsbCl9LHN0eWxlVHdlZW46ZnVuY3Rpb24obix0LGUpe3ZhciBpPSJzdHlsZS4iKyhuKz0iIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihpPXRoaXMudHdlZW4oaSkpJiZpLl92YWx1ZTtpZihudWxsPT10KXJldHVybiB0aGlzLnR3ZWVuKGksbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKGksZnVuY3Rpb24obix0LGUpe3ZhciBpLHI7ZnVuY3Rpb24gbygpe3ZhciBhPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBhIT09ciYmKGk9KHI9YSkmJmZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gZnVuY3Rpb24oaSl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuLHQuY2FsbCh0aGlzLGkpLGUpfX0obixhLGUpKSxpfXJldHVybiBvLl92YWx1ZT10LG99KG4sdCxlPz8iIikpfSx0ZXh0OmZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0IiwiZnVuY3Rpb24iPT10eXBlb2Ygbj9mdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1uKHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9dD8/IiJ9fShsMCh0aGlzLCJ0ZXh0IixuKSk6ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1ufX0obnVsbD09bj8iIjpuKyIiKSl9LHRleHRUd2VlbjpmdW5jdGlvbihuKXt2YXIgdD0idGV4dCI7aWYoYXJndW1lbnRzLmxlbmd0aDwxKXJldHVybih0PXRoaXMudHdlZW4odCkpJiZ0Ll92YWx1ZTtpZihudWxsPT1uKXJldHVybiB0aGlzLnR3ZWVuKHQsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKHQsZnVuY3Rpb24obil7dmFyIHQsZTtmdW5jdGlvbiBpKCl7dmFyIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHIhPT1lJiYodD0oZT1yKSYmZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKHQpe3RoaXMudGV4dENvbnRlbnQ9bi5jYWxsKHRoaXMsdCl9fShyKSksdH1yZXR1cm4gaS5fdmFsdWU9bixpfShuKSl9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9uKCJlbmQucmVtb3ZlIixmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciBlIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCtlIT09bilyZXR1cm47dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX19KHRoaXMuX2lkKSl9LHR3ZWVuOmZ1bmN0aW9uKG4sdCl7dmFyIGU9dGhpcy5faWQ7aWYobis9IiIsYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIGEsaT1fbyh0aGlzLm5vZGUoKSxlKS50d2VlbixyPTAsbz1pLmxlbmd0aDtyPG87KytyKWlmKChhPWlbcl0pLm5hbWU9PT1uKXJldHVybiBhLnZhbHVlO3JldHVybiBudWxsfXJldHVybiB0aGlzLmVhY2goKG51bGw9PXQ/ZERlOnVEZSkoZSxuLHQpKX0sZGVsYXk6ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2Ygbj9DRGU6TURlKSh0LG4pKTpfbyh0aGlzLm5vZGUoKSx0KS5kZWxheX0sZHVyYXRpb246ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2Ygbj93RGU6U0RlKSh0LG4pKTpfbyh0aGlzLm5vZGUoKSx0KS5kdXJhdGlvbn0sZWFzZTpmdW5jdGlvbihuKXt2YXIgdD10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZnVuY3Rpb24obix0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7eWEodGhpcyxuKS5lYXNlPXR9fSh0LG4pKTpfbyh0aGlzLm5vZGUoKSx0KS5lYXNlfSxlbmQ6ZnVuY3Rpb24oKXt2YXIgbix0LGU9dGhpcyxpPWUuX2lkLHI9ZS5zaXplKCk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG8sYSl7dmFyIHM9e3ZhbHVlOmF9LGw9e3ZhbHVlOmZ1bmN0aW9uKCl7MD09LS1yJiZvKCl9fTtlLmVhY2goZnVuY3Rpb24oKXt2YXIgYz15YSh0aGlzLGkpLGQ9Yy5vbjtkIT09biYmKCh0PShuPWQpLmNvcHkoKSkuXy5jYW5jZWwucHVzaChzKSx0Ll8uaW50ZXJydXB0LnB1c2gocyksdC5fLmVuZC5wdXNoKGwpKSxjLm9uPXR9KX0pfX07dmFyIGZMPXt0aW1lOm51bGwsZGVsYXk6MCxkdXJhdGlvbjoyNTAsZWFzZTpmdW5jdGlvbihuKXtyZXR1cm4oKG4qPTIpPD0xP24qbipuOihuLT0yKSpuKm4rMikvMn19O2Z1bmN0aW9uIFVEZShuLHQpe2Zvcih2YXIgZTshKGU9bi5fX3RyYW5zaXRpb24pfHwhKGU9ZVt0XSk7KWlmKCEobj1uLnBhcmVudE5vZGUpKXJldHVybiBmTC50aW1lPXMwKCksZkw7cmV0dXJuIGV9ZnVuY3Rpb24gZ0wobil7cmV0dXJue3R5cGU6bn19UmQucHJvdG90eXBlLmludGVycnVwdD1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKG4sdCl7dmFyIGkscixhLGU9bi5fX3RyYW5zaXRpb24sbz0hMDtpZihlKXtmb3IoYSBpbiB0PW51bGw9PXQ/bnVsbDp0KyIiLGUpKGk9ZVthXSkubmFtZT09PXQ/KHI9aS5zdGF0ZT52RCYmaS5zdGF0ZTx5RCxpLnN0YXRlPUx5LGkudGltZXIuc3RvcCgpLGkub24uY2FsbChyPyJpbnRlcnJ1cHQiOiJjYW5jZWwiLG4sbi5fX2RhdGFfXyxpLmluZGV4LGkuZ3JvdXApLGRlbGV0ZSBlW2FdKTpvPSExO28mJmRlbGV0ZSBuLl9fdHJhbnNpdGlvbn19KHRoaXMsbil9KX0sUmQucHJvdG90eXBlLnRyYW5zaXRpb249ZnVuY3Rpb24obil7dmFyIHQsZTtuIGluc3RhbmNlb2YgdGE/KHQ9bi5faWQsbj1uLl9uYW1lKToodD1DRCgpLChlPWZMKS50aW1lPXMwKCksbj1udWxsPT1uP251bGw6bisiIik7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLG89MDtvPHI7KytvKWZvcih2YXIgbCxhPWlbb10scz1hLmxlbmd0aCxjPTA7YzxzOysrYykobD1hW2NdKSYmb3AobCxuLHQsYyxhLGV8fFVEZShsLHQpKTtyZXR1cm4gbmV3IHRhKGksdGhpcy5fcGFyZW50cyxuLHQpfSxbInciLCJlIl0ubWFwKGdMKSxbIm4iLCJzIl0ubWFwKGdMKSxbIm4iLCJ3IiwiZSIsInMiLCJudyIsIm5lIiwic3ciLCJzZSJdLm1hcChnTCksTWF0aDt2YXIgTXM9IiQiO2Z1bmN0aW9uIHdEKCl7fWZ1bmN0aW9uIHNKKG4sdCl7dmFyIGU9bmV3IHdEO2lmKG4gaW5zdGFuY2VvZiB3RCluLmVhY2goZnVuY3Rpb24ocyxsKXtlLnNldChsLHMpfSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KG4pKXt2YXIgbyxpPS0xLHI9bi5sZW5ndGg7aWYobnVsbD09dClmb3IoOysraTxyOyllLnNldChpLG5baV0pO2Vsc2UgZm9yKDsrK2k8cjspZS5zZXQodChvPW5baV0saSxuKSxvKX1lbHNlIGlmKG4pZm9yKHZhciBhIGluIG4pZS5zZXQoYSxuW2FdKTtyZXR1cm4gZX1mdW5jdGlvbiBTRCgpe313RC5wcm90b3R5cGU9c0oucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp3RCxoYXM6ZnVuY3Rpb24obil7cmV0dXJuIE1zK24gaW4gdGhpc30sZ2V0OmZ1bmN0aW9uKG4pe3JldHVybiB0aGlzW01zK25dfSxzZXQ6ZnVuY3Rpb24obix0KXtyZXR1cm4gdGhpc1tNcytuXT10LHRoaXN9LHJlbW92ZTpmdW5jdGlvbihuKXt2YXIgdD1NcytuO3JldHVybiB0IGluIHRoaXMmJmRlbGV0ZSB0aGlzW3RdfSxjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgbiBpbiB0aGlzKW5bMF09PT1NcyYmZGVsZXRlIHRoaXNbbl19LGtleXM6ZnVuY3Rpb24oKXt2YXIgbj1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09TXMmJm4ucHVzaCh0LnNsaWNlKDEpKTtyZXR1cm4gbn0sdmFsdWVzOmZ1bmN0aW9uKCl7dmFyIG49W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PU1zJiZuLnB1c2godGhpc1t0XSk7cmV0dXJuIG59LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgbj1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09TXMmJm4ucHVzaCh7a2V5OnQuc2xpY2UoMSksdmFsdWU6dGhpc1t0XX0pO3JldHVybiBufSxzaXplOmZ1bmN0aW9uKCl7dmFyIG49MDtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09TXMmJisrbjtyZXR1cm4gbn0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIG4gaW4gdGhpcylpZihuWzBdPT09TXMpcmV0dXJuITE7cmV0dXJuITB9LGVhY2g6ZnVuY3Rpb24obil7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PU1zJiZuKHRoaXNbdF0sdC5zbGljZSgxKSx0aGlzKX19O3ZhciBKaD1zSi5wcm90b3R5cGU7ZnVuY3Rpb24gJGgobix0KXtpZigoZT0obj10P24udG9FeHBvbmVudGlhbCh0LTEpOm4udG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKCJlIikpPDApcmV0dXJuIG51bGw7dmFyIGUsaT1uLnNsaWNlKDAsZSk7cmV0dXJuW2kubGVuZ3RoPjE/aVswXStpLnNsaWNlKDIpOmksK24uc2xpY2UoZSsxKV19ZnVuY3Rpb24gemMobil7cmV0dXJuKG49JGgoTWF0aC5hYnMobikpKT9uWzFdOk5hTn1TRC5wcm90b3R5cGU9ZnVuY3Rpb24obix0KXt2YXIgZT1uZXcgU0Q7aWYobiBpbnN0YW5jZW9mIFNEKW4uZWFjaChmdW5jdGlvbihvKXtlLmFkZChvKX0pO2Vsc2UgaWYobil7dmFyIGk9LTEscj1uLmxlbmd0aDtpZihudWxsPT10KWZvcig7KytpPHI7KWUuYWRkKG5baV0pO2Vsc2UgZm9yKDsrK2k8cjspZS5hZGQodChuW2ldLGksbikpfXJldHVybiBlfS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlNELGhhczpKaC5oYXMsYWRkOmZ1bmN0aW9uKG4pe3JldHVybiB0aGlzW01zKyhuKz0iIildPW4sdGhpc30scmVtb3ZlOkpoLnJlbW92ZSxjbGVhcjpKaC5jbGVhcix2YWx1ZXM6Smgua2V5cyxzaXplOkpoLnNpemUsZW1wdHk6SmguZW1wdHksZWFjaDpKaC5lYWNofSxNYXRoLE1hdGguc3FydCg1KTt2YXIgX0wsS0RlPS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLSggXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuXGQrKT8ofik/KFthLXolXSk/JC9pO2Z1bmN0aW9uIGFwKG4pe2lmKCEodD1LRGUuZXhlYyhuKSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIituKTt2YXIgdDtyZXR1cm4gbmV3IEVEKHtmaWxsOnRbMV0sYWxpZ246dFsyXSxzaWduOnRbM10sc3ltYm9sOnRbNF0semVybzp0WzVdLHdpZHRoOnRbNl0sY29tbWE6dFs3XSxwcmVjaXNpb246dFs4XSYmdFs4XS5zbGljZSgxKSx0cmltOnRbOV0sdHlwZTp0WzEwXX0pfWZ1bmN0aW9uIEVEKG4pe3RoaXMuZmlsbD12b2lkIDA9PT1uLmZpbGw/IiAiOm4uZmlsbCsiIix0aGlzLmFsaWduPXZvaWQgMD09PW4uYWxpZ24/Ij4iOm4uYWxpZ24rIiIsdGhpcy5zaWduPXZvaWQgMD09PW4uc2lnbj8iLSI6bi5zaWduKyIiLHRoaXMuc3ltYm9sPXZvaWQgMD09PW4uc3ltYm9sPyIiOm4uc3ltYm9sKyIiLHRoaXMuemVybz0hIW4uemVybyx0aGlzLndpZHRoPXZvaWQgMD09PW4ud2lkdGg/dm9pZCAwOituLndpZHRoLHRoaXMuY29tbWE9ISFuLmNvbW1hLHRoaXMucHJlY2lzaW9uPXZvaWQgMD09PW4ucHJlY2lzaW9uP3ZvaWQgMDorbi5wcmVjaXNpb24sdGhpcy50cmltPSEhbi50cmltLHRoaXMudHlwZT12b2lkIDA9PT1uLnR5cGU/IiI6bi50eXBlKyIifWZ1bmN0aW9uIGJMKG4sdCl7dmFyIGU9JGgobix0KTtpZighZSlyZXR1cm4gbisiIjt2YXIgaT1lWzBdLHI9ZVsxXTtyZXR1cm4gcjwwPyIwLiIrbmV3IEFycmF5KC1yKS5qb2luKCIwIikraTppLmxlbmd0aD5yKzE/aS5zbGljZSgwLHIrMSkrIi4iK2kuc2xpY2UocisxKTppK25ldyBBcnJheShyLWkubGVuZ3RoKzIpLmpvaW4oIjAiKX1hcC5wcm90b3R5cGU9RUQucHJvdG90eXBlLEVELnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbGwrdGhpcy5hbGlnbit0aGlzLnNpZ24rdGhpcy5zeW1ib2wrKHRoaXMuemVybz8iMCI6IiIpKyh2b2lkIDA9PT10aGlzLndpZHRoPyIiOk1hdGgubWF4KDEsMHx0aGlzLndpZHRoKSkrKHRoaXMuY29tbWE/IiwiOiIiKSsodm9pZCAwPT09dGhpcy5wcmVjaXNpb24/IiI6Ii4iK01hdGgubWF4KDAsMHx0aGlzLnByZWNpc2lvbikpKyh0aGlzLnRyaW0/In4iOiIiKSt0aGlzLnR5cGV9O3ZhciB2TD17IiUiOmZ1bmN0aW9uKG4sdCl7cmV0dXJuKDEwMCpuKS50b0ZpeGVkKHQpfSxiOmZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDIpfSxjOmZ1bmN0aW9uKG4pe3JldHVybiBuKyIifSxkOmZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLmFicyhuPU1hdGgucm91bmQobikpPj0xZTIxP24udG9Mb2NhbGVTdHJpbmcoImVuIikucmVwbGFjZSgvLC9nLCIiKTpuLnRvU3RyaW5nKDEwKX0sZTpmdW5jdGlvbihuLHQpe3JldHVybiBuLnRvRXhwb25lbnRpYWwodCl9LGY6ZnVuY3Rpb24obix0KXtyZXR1cm4gbi50b0ZpeGVkKHQpfSxnOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4udG9QcmVjaXNpb24odCl9LG86ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucm91bmQobikudG9TdHJpbmcoOCl9LHA6ZnVuY3Rpb24obix0KXtyZXR1cm4gYkwoMTAwKm4sdCl9LHI6YkwsczpmdW5jdGlvbihuLHQpe3ZhciBlPSRoKG4sdCk7aWYoIWUpcmV0dXJuIG4rIiI7dmFyIGk9ZVswXSxyPWVbMV0sbz1yLShfTD0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihyLzMpKSkpKzEsYT1pLmxlbmd0aDtyZXR1cm4gbz09PWE/aTpvPmE/aStuZXcgQXJyYXkoby1hKzEpLmpvaW4oIjAiKTpvPjA/aS5zbGljZSgwLG8pKyIuIitpLnNsaWNlKG8pOiIwLiIrbmV3IEFycmF5KDEtbykuam9pbigiMCIpKyRoKG4sTWF0aC5tYXgoMCx0K28tMSkpWzBdfSxYOmZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSx4OmZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDE2KX19O2Z1bmN0aW9uIHlMKG4pe3JldHVybiBufXZhciBURCxZcixERCxmSj1BcnJheS5wcm90b3R5cGUubWFwLGdKPVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiXHhiNSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdO2Z1bmN0aW9uIHNsKCl7cmV0dXJuIE1hdGgucmFuZG9tKCl9VEQ9ZnVuY3Rpb24obil7dmFyIHQ9dm9pZCAwPT09bi5ncm91cGluZ3x8dm9pZCAwPT09bi50aG91c2FuZHM/eUw6ZnVuY3Rpb24obix0KXtyZXR1cm4gZnVuY3Rpb24oZSxpKXtmb3IodmFyIHI9ZS5sZW5ndGgsbz1bXSxhPTAscz1uWzBdLGw9MDtyPjAmJnM+MCYmKGwrcysxPmkmJihzPU1hdGgubWF4KDEsaS1sKSksby5wdXNoKGUuc3Vic3RyaW5nKHItPXMscitzKSksISgobCs9cysxKT5pKSk7KXM9blthPShhKzEpJW4ubGVuZ3RoXTtyZXR1cm4gby5yZXZlcnNlKCkuam9pbih0KX19KGZKLmNhbGwobi5ncm91cGluZyxOdW1iZXIpLG4udGhvdXNhbmRzKyIiKSxlPXZvaWQgMD09PW4uY3VycmVuY3k/IiI6bi5jdXJyZW5jeVswXSsiIixpPXZvaWQgMD09PW4uY3VycmVuY3k/IiI6bi5jdXJyZW5jeVsxXSsiIixyPXZvaWQgMD09PW4uZGVjaW1hbD8iLiI6bi5kZWNpbWFsKyIiLG89dm9pZCAwPT09bi5udW1lcmFscz95TDpmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbihlKXtyZXR1cm4gblsrZV19KX19KGZKLmNhbGwobi5udW1lcmFscyxTdHJpbmcpKSxhPXZvaWQgMD09PW4ucGVyY2VudD8iJSI6bi5wZXJjZW50KyIiLHM9dm9pZCAwPT09bi5taW51cz8iLSI6bi5taW51cysiIixsPXZvaWQgMD09PW4ubmFuPyJOYU4iOm4ubmFuKyIiO2Z1bmN0aW9uIGModSl7dmFyIHA9KHU9YXAodSkpLmZpbGwsaD11LmFsaWduLG09dS5zaWduLF89dS5zeW1ib2wsTT11Lnplcm8seT11LndpZHRoLHg9dS5jb21tYSxSPXUucHJlY2lzaW9uLEk9dS50cmltLEI9dS50eXBlOyJuIj09PUI/KHg9ITAsQj0iZyIpOnZMW0JdfHwodm9pZCAwPT09UiYmKFI9MTIpLEk9ITAsQj0iZyIpLChNfHwiMCI9PT1wJiYiPSI9PT1oKSYmKE09ITAscD0iMCIsaD0iPSIpO3ZhciBlZT0iJCI9PT1fP2U6IiMiPT09XyYmL1tib3hYXS8udGVzdChCKT8iMCIrQi50b0xvd2VyQ2FzZSgpOiIiLFE9IiQiPT09Xz9pOi9bJXBdLy50ZXN0KEIpP2E6IiIsd2U9dkxbQl0sUWU9L1tkZWZncHJzJV0vLnRlc3QoQik7ZnVuY3Rpb24gQWUoRCl7dmFyIGhlLF9lLCQscmU9ZWUsY2U9UTtpZigiYyI9PT1CKWNlPXdlKEQpK2NlLEQ9IiI7ZWxzZXt2YXIgZGU9KEQ9K0QpPDB8fDEvRDwwO2lmKEQ9aXNOYU4oRCk/bDp3ZShNYXRoLmFicyhEKSxSKSxJJiYoRD1mdW5jdGlvbihuKXtlOmZvcih2YXIgcix0PW4ubGVuZ3RoLGU9MSxpPS0xO2U8dDsrK2Upc3dpdGNoKG5bZV0pe2Nhc2UiLiI6aT1yPWU7YnJlYWs7Y2FzZSIwIjowPT09aSYmKGk9ZSkscj1lO2JyZWFrO2RlZmF1bHQ6aWYoIStuW2VdKWJyZWFrIGU7aT4wJiYoaT0wKX1yZXR1cm4gaT4wP24uc2xpY2UoMCxpKStuLnNsaWNlKHIrMSk6bn0oRCkpLGRlJiYwPT0rRCYmIisiIT09bSYmKGRlPSExKSxyZT0oZGU/IigiPT09bT9tOnM6Ii0iPT09bXx8IigiPT09bT8iIjptKStyZSxjZT0oInMiPT09Qj9nSls4K19MLzNdOiIiKStjZSsoZGUmJiIoIj09PW0/IikiOiIiKSxRZSlmb3IoaGU9LTEsX2U9RC5sZW5ndGg7KytoZTxfZTspaWYoNDg+KCQ9RC5jaGFyQ29kZUF0KGhlKSl8fCQ+NTcpe2NlPSg0Nj09PSQ/citELnNsaWNlKGhlKzEpOkQuc2xpY2UoaGUpKStjZSxEPUQuc2xpY2UoMCxoZSk7YnJlYWt9fXgmJiFNJiYoRD10KEQsMS8wKSk7dmFyIHBlPXJlLmxlbmd0aCtELmxlbmd0aCtjZS5sZW5ndGgsR2U9cGU8eT9uZXcgQXJyYXkoeS1wZSsxKS5qb2luKHApOiIiO3N3aXRjaCh4JiZNJiYoRD10KEdlK0QsR2UubGVuZ3RoP3ktY2UubGVuZ3RoOjEvMCksR2U9IiIpLGgpe2Nhc2UiPCI6RD1yZStEK2NlK0dlO2JyZWFrO2Nhc2UiPSI6RD1yZStHZStEK2NlO2JyZWFrO2Nhc2UiXiI6RD1HZS5zbGljZSgwLHBlPUdlLmxlbmd0aD4+MSkrcmUrRCtjZStHZS5zbGljZShwZSk7YnJlYWs7ZGVmYXVsdDpEPUdlK3JlK0QrY2V9cmV0dXJuIG8oRCl9cmV0dXJuIFI9dm9pZCAwPT09Uj82Oi9bZ3Byc10vLnRlc3QoQik/TWF0aC5tYXgoMSxNYXRoLm1pbigyMSxSKSk6TWF0aC5tYXgoMCxNYXRoLm1pbigyMCxSKSksQWUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdSsiIn0sQWV9cmV0dXJue2Zvcm1hdDpjLGZvcm1hdFByZWZpeDpmdW5jdGlvbih1LHApe3ZhciBoPWMoKCh1PWFwKHUpKS50eXBlPSJmIix1KSksbT0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcih6YyhwKS8zKSkpLF89TWF0aC5wb3coMTAsLW0pLE09Z0pbOCttLzNdO3JldHVybiBmdW5jdGlvbih5KXtyZXR1cm4gaChfKnkpK019fX19KHtkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXSxtaW51czoiLSJ9KSxZcj1URC5mb3JtYXQsREQ9VEQuZm9ybWF0UHJlZml4LGZ1bmN0aW9uIG4odCl7ZnVuY3Rpb24gZShpLHIpe3JldHVybiBpPW51bGw9PWk/MDoraSxyPW51bGw9PXI/MTorciwxPT09YXJndW1lbnRzLmxlbmd0aD8ocj1pLGk9MCk6ci09aSxmdW5jdGlvbigpe3JldHVybiB0KCkqcitpfX1yZXR1cm4gZS5zb3VyY2U9bixlfShzbCk7dmFyIFNMPWZ1bmN0aW9uIG4odCl7ZnVuY3Rpb24gZShpLHIpe3ZhciBvLGE7cmV0dXJuIGk9bnVsbD09aT8wOitpLHI9bnVsbD09cj8xOityLGZ1bmN0aW9uKCl7dmFyIHM7aWYobnVsbCE9bylzPW8sbz1udWxsO2Vsc2UgZG97bz0yKnQoKS0xLHM9Mip0KCktMSxhPW8qbytzKnN9d2hpbGUoIWF8fGE+MSk7cmV0dXJuIGkrcipzKk1hdGguc3FydCgtMipNYXRoLmxvZyhhKS9hKX19cmV0dXJuIGUuc291cmNlPW4sZX0oc2wpLEVMPShmdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoKXt2YXIgaT1TTC5zb3VyY2UodCkuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBNYXRoLmV4cChpKCkpfX1yZXR1cm4gZS5zb3VyY2U9bixlfShzbCksZnVuY3Rpb24gbih0KXtmdW5jdGlvbiBlKGkpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgcj0wLG89MDtvPGk7KytvKXIrPXQoKTtyZXR1cm4gcn19cmV0dXJuIGUuc291cmNlPW4sZX0oc2wpKTtmdW5jdGlvbiBKYShuLHQpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnRoaXMucmFuZ2Uobik7YnJlYWs7ZGVmYXVsdDp0aGlzLnJhbmdlKHQpLmRvbWFpbihuKX1yZXR1cm4gdGhpc30oZnVuY3Rpb24gbih0KXtmdW5jdGlvbiBlKGkpe3ZhciByPUVMLnNvdXJjZSh0KShpKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcigpL2l9fXJldHVybiBlLnNvdXJjZT1uLGV9KShzbCksZnVuY3Rpb24gbih0KXtmdW5jdGlvbiBlKGkpe3JldHVybiBmdW5jdGlvbigpe3JldHVybi1NYXRoLmxvZygxLXQoKSkvaX19cmV0dXJuIGUuc291cmNlPW4sZX0oc2wpO3ZhciBiSj1BcnJheS5wcm90b3R5cGUsenk9YkoubWFwLGVtPWJKLnNsaWNlO2Z1bmN0aW9uIFRMKG4pe3JldHVybitufXZhciB5Sj1bMCwxXTtmdW5jdGlvbiAkYShuKXtyZXR1cm4gbn1mdW5jdGlvbiBETChuLHQpe3JldHVybih0LT1uPStuKT9mdW5jdGlvbihlKXtyZXR1cm4oZS1uKS90fTpmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbn19KGlzTmFOKHQpP05hTjouNSl9ZnVuY3Rpb24geEoobil7dmFyIGksdD1uWzBdLGU9bltuLmxlbmd0aC0xXTtyZXR1cm4gdD5lJiYoaT10LHQ9ZSxlPWkpLGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLm1heCh0LE1hdGgubWluKGUscikpfX1mdW5jdGlvbiBpSWUobix0LGUpe3ZhciBpPW5bMF0scj1uWzFdLG89dFswXSxhPXRbMV07cmV0dXJuIHI8aT8oaT1ETChyLGkpLG89ZShhLG8pKTooaT1ETChpLHIpLG89ZShvLGEpKSxmdW5jdGlvbihzKXtyZXR1cm4gbyhpKHMpKX19ZnVuY3Rpb24gckllKG4sdCxlKXt2YXIgaT1NYXRoLm1pbihuLmxlbmd0aCx0Lmxlbmd0aCktMSxyPW5ldyBBcnJheShpKSxvPW5ldyBBcnJheShpKSxhPS0xO2ZvcihuW2ldPG5bMF0mJihuPW4uc2xpY2UoKS5yZXZlcnNlKCksdD10LnNsaWNlKCkucmV2ZXJzZSgpKTsrK2E8aTspclthXT1ETChuW2FdLG5bYSsxXSksb1thXT1lKHRbYV0sdFthKzFdKTtyZXR1cm4gZnVuY3Rpb24ocyl7dmFyIGw9TGMobixzLDEsaSktMTtyZXR1cm4gb1tsXShyW2xdKHMpKX19ZnVuY3Rpb24gc3Aobix0KXtyZXR1cm4gdC5kb21haW4obi5kb21haW4oKSkucmFuZ2Uobi5yYW5nZSgpKS5pbnRlcnBvbGF0ZShuLmludGVycG9sYXRlKCkpLmNsYW1wKG4uY2xhbXAoKSkudW5rbm93bihuLnVua25vd24oKSl9ZnVuY3Rpb24gVXkoKXt2YXIgaSxyLG8scyxsLGMsbj15Six0PXlKLGU9UWgsYT0kYTtmdW5jdGlvbiBkKCl7cmV0dXJuIHM9TWF0aC5taW4obi5sZW5ndGgsdC5sZW5ndGgpPjI/ckllOmlJZSxsPWM9bnVsbCx1fWZ1bmN0aW9uIHUocCl7cmV0dXJuIGlzTmFOKHA9K3ApP286KGx8fChsPXMobi5tYXAoaSksdCxlKSkpKGkoYShwKSkpfXJldHVybiB1LmludmVydD1mdW5jdGlvbihwKXtyZXR1cm4gYShyKChjfHwoYz1zKHQsbi5tYXAoaSksVW8pKSkocCkpKX0sdS5kb21haW49ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49enkuY2FsbChwLFRMKSxhPT09JGF8fChhPXhKKG4pKSxkKCkpOm4uc2xpY2UoKX0sdS5yYW5nZT1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lbS5jYWxsKHApLGQoKSk6dC5zbGljZSgpfSx1LnJhbmdlUm91bmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHQ9ZW0uY2FsbChwKSxlPW9MLGQoKX0sdS5jbGFtcD1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1wP3hKKG4pOiRhLHUpOmEhPT0kYX0sdS5pbnRlcnBvbGF0ZT1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1wLGQoKSk6ZX0sdS51bmtub3duPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXAsdSk6b30sZnVuY3Rpb24ocCxoKXtyZXR1cm4gaT1wLHI9aCxkKCl9fWZ1bmN0aW9uIGp5KG4sdCl7cmV0dXJuIFV5KCkobix0KX1mdW5jdGlvbiB6bCgpe3ZhciBuPWp5KCRhLCRhKTtyZXR1cm4gbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHNwKG4semwoKSl9LEphLmFwcGx5KG4sYXJndW1lbnRzKSxmdW5jdGlvbihuKXt2YXIgdD1uLmRvbWFpbjtyZXR1cm4gbi50aWNrcz1mdW5jdGlvbihlKXt2YXIgaT10KCk7cmV0dXJuIE15KGlbMF0saVtpLmxlbmd0aC0xXSxlPz8xMCl9LG4udGlja0Zvcm1hdD1mdW5jdGlvbihlLGkpe3ZhciByPXQoKTtyZXR1cm4gZnVuY3Rpb24obix0LGUsaSl7dmFyIG8scj1JZChuLHQsZSk7c3dpdGNoKChpPWFwKGk/PyIsZiIpKS50eXBlKXtjYXNlInMiOnZhciBhPU1hdGgubWF4KE1hdGguYWJzKG4pLE1hdGguYWJzKHQpKTtyZXR1cm4gbnVsbD09aS5wcmVjaXNpb24mJiFpc05hTihvPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIE1hdGgubWF4KDAsMypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoemModCkvMykpKS16YyhNYXRoLmFicyhuKSkpfShyLGEpKSYmKGkucHJlY2lzaW9uPW8pLEREKGksYSk7Y2FzZSIiOmNhc2UiZSI6Y2FzZSJnIjpjYXNlInAiOmNhc2UiciI6bnVsbD09aS5wcmVjaXNpb24mJiFpc05hTihvPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG49TWF0aC5hYnMobiksdD1NYXRoLmFicyh0KS1uLE1hdGgubWF4KDAsemModCktemMobikpKzF9KHIsTWF0aC5tYXgoTWF0aC5hYnMobiksTWF0aC5hYnModCkpKSkmJihpLnByZWNpc2lvbj1vLSgiZSI9PT1pLnR5cGUpKTticmVhaztjYXNlImYiOmNhc2UiJSI6bnVsbD09aS5wcmVjaXNpb24mJiFpc05hTihvPWZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLm1heCgwLC16YyhNYXRoLmFicyhuKSkpfShyKSkmJihpLnByZWNpc2lvbj1vLTIqKCIlIj09PWkudHlwZSkpfXJldHVybiBZcihpKX0oclswXSxyW3IubGVuZ3RoLTFdLGU/PzEwLGkpfSxuLm5pY2U9ZnVuY3Rpb24oZSl7bnVsbD09ZSYmKGU9MTApO3ZhciBsLGk9dCgpLHI9MCxvPWkubGVuZ3RoLTEsYT1pW3JdLHM9aVtvXTtyZXR1cm4gczxhJiYobD1hLGE9cyxzPWwsbD1yLHI9byxvPWwpLChsPWUwKGEscyxlKSk+MD9sPWUwKGE9TWF0aC5mbG9vcihhL2wpKmwscz1NYXRoLmNlaWwocy9sKSpsLGUpOmw8MCYmKGw9ZTAoYT1NYXRoLmNlaWwoYSpsKS9sLHM9TWF0aC5mbG9vcihzKmwpL2wsZSkpLGw+MD8oaVtyXT1NYXRoLmZsb29yKGEvbCkqbCxpW29dPU1hdGguY2VpbChzL2wpKmwsdChpKSk6bDwwJiYoaVtyXT1NYXRoLmNlaWwoYSpsKS9sLGlbb109TWF0aC5mbG9vcihzKmwpL2wsdChpKSksbn0sbn0obil9ZnVuY3Rpb24gSUQobix0KXt2YXIgYSxlPTAsaT0obj1uLnNsaWNlKCkpLmxlbmd0aC0xLHI9bltlXSxvPW5baV07cmV0dXJuIG88ciYmKGE9ZSxlPWksaT1hLGE9cixyPW8sbz1hKSxuW2VdPXQuZmxvb3IociksbltpXT10LmNlaWwobyksbn1mdW5jdGlvbiBDSihuKXtyZXR1cm4gTWF0aC5sb2cobil9ZnVuY3Rpb24gTUoobil7cmV0dXJuIE1hdGguZXhwKG4pfWZ1bmN0aW9uIG9JZShuKXtyZXR1cm4tTWF0aC5sb2coLW4pfWZ1bmN0aW9uIGFJZShuKXtyZXR1cm4tTWF0aC5leHAoLW4pfWZ1bmN0aW9uIHNJZShuKXtyZXR1cm4gaXNGaW5pdGUobik/KygiMWUiK24pOm48MD8wOm59ZnVuY3Rpb24gd0oobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybi1uKC10KX19ZnVuY3Rpb24gR3koKXt2YXIgbj1mdW5jdGlvbihuKXt2YXIgcixvLHQ9bihDSixNSiksZT10LmRvbWFpbixpPTEwO2Z1bmN0aW9uIGEoKXtyZXR1cm4gcj1mdW5jdGlvbihuKXtyZXR1cm4gbj09PU1hdGguRT9NYXRoLmxvZzoxMD09PW4mJk1hdGgubG9nMTB8fDI9PT1uJiZNYXRoLmxvZzJ8fChuPU1hdGgubG9nKG4pLGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KS9ufSl9KGkpLG89ZnVuY3Rpb24obil7cmV0dXJuIDEwPT09bj9zSWU6bj09PU1hdGguRT9NYXRoLmV4cDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5wb3cobix0KX19KGkpLGUoKVswXTwwPyhyPXdKKHIpLG89d0oobyksbihvSWUsYUllKSk6bihDSixNSiksdH1yZXR1cm4gdC5iYXNlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPStzLGEoKSk6aX0sdC5kb21haW49ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGUocyksYSgpKTplKCl9LHQudGlja3M9ZnVuY3Rpb24ocyl7dmFyIHUsbD1lKCksYz1sWzBdLGQ9bFtsLmxlbmd0aC0xXTsodT1kPGMpJiYocD1jLGM9ZCxkPXApO3ZhciBtLF8sTSxwPXIoYyksaD1yKGQpLHk9bnVsbD09cz8xMDorcyx4PVtdO2lmKCEoaSUxKSYmaC1wPHkpe2lmKHA9TWF0aC5yb3VuZChwKS0xLGg9TWF0aC5yb3VuZChoKSsxLGM+MCl7Zm9yKDtwPGg7KytwKWZvcihfPTEsbT1vKHApO188aTsrK18paWYoISgoTT1tKl8pPGMpKXtpZihNPmQpYnJlYWs7eC5wdXNoKE0pfX1lbHNlIGZvcig7cDxoOysrcClmb3IoXz1pLTEsbT1vKHApO18+PTE7LS1fKWlmKCEoKE09bSpfKTxjKSl7aWYoTT5kKWJyZWFrO3gucHVzaChNKX19ZWxzZSB4PU15KHAsaCxNYXRoLm1pbihoLXAseSkpLm1hcChvKTtyZXR1cm4gdT94LnJldmVyc2UoKTp4fSx0LnRpY2tGb3JtYXQ9ZnVuY3Rpb24ocyxsKXtpZihudWxsPT1sJiYobD0xMD09PWk/Ii4wZSI6IiwiKSwiZnVuY3Rpb24iIT10eXBlb2YgbCYmKGw9WXIobCkpLHM9PT0xLzApcmV0dXJuIGw7bnVsbD09cyYmKHM9MTApO3ZhciBjPU1hdGgubWF4KDEsaSpzL3QudGlja3MoKS5sZW5ndGgpO3JldHVybiBmdW5jdGlvbihkKXt2YXIgdT1kL28oTWF0aC5yb3VuZChyKGQpKSk7cmV0dXJuIHUqaTxpLS41JiYodSo9aSksdTw9Yz9sKGQpOiIifX0sdC5uaWNlPWZ1bmN0aW9uKCl7cmV0dXJuIGUoSUQoZSgpLHtmbG9vcjpmdW5jdGlvbihzKXtyZXR1cm4gbyhNYXRoLmZsb29yKHIocykpKX0sY2VpbDpmdW5jdGlvbihzKXtyZXR1cm4gbyhNYXRoLmNlaWwocihzKSkpfX0pKX0sdH0oVXkoKSkuZG9tYWluKFsxLDEwXSk7cmV0dXJuIG4uY29weT1mdW5jdGlvbigpe3JldHVybiBzcChuLEd5KCkpLmJhc2Uobi5iYXNlKCkpfSxKYS5hcHBseShuLGFyZ3VtZW50cyksbn12YXIgUkw9bmV3IERhdGUsUEw9bmV3IERhdGU7ZnVuY3Rpb24gbnIobix0LGUsaSl7ZnVuY3Rpb24gcihvKXtyZXR1cm4gbihvPTA9PT1hcmd1bWVudHMubGVuZ3RoP25ldyBEYXRlOm5ldyBEYXRlKCtvKSksb31yZXR1cm4gci5mbG9vcj1mdW5jdGlvbihvKXtyZXR1cm4gbihvPW5ldyBEYXRlKCtvKSksb30sci5jZWlsPWZ1bmN0aW9uKG8pe3JldHVybiBuKG89bmV3IERhdGUoby0xKSksdChvLDEpLG4obyksb30sci5yb3VuZD1mdW5jdGlvbihvKXt2YXIgYT1yKG8pLHM9ci5jZWlsKG8pO3JldHVybiBvLWE8cy1vP2E6c30sci5vZmZzZXQ9ZnVuY3Rpb24obyxhKXtyZXR1cm4gdChvPW5ldyBEYXRlKCtvKSxudWxsPT1hPzE6TWF0aC5mbG9vcihhKSksb30sci5yYW5nZT1mdW5jdGlvbihvLGEscyl7dmFyIGMsbD1bXTtpZihvPXIuY2VpbChvKSxzPW51bGw9PXM/MTpNYXRoLmZsb29yKHMpLCEobzxhJiZzPjApKXJldHVybiBsO2Rve2wucHVzaChjPW5ldyBEYXRlKCtvKSksdChvLHMpLG4obyl9d2hpbGUoYzxvJiZvPGEpO3JldHVybiBsfSxyLmZpbHRlcj1mdW5jdGlvbihvKXtyZXR1cm4gbnIoZnVuY3Rpb24oYSl7aWYoYT49YSlmb3IoO24oYSksIW8oYSk7KWEuc2V0VGltZShhLTEpfSxmdW5jdGlvbihhLHMpe2lmKGE+PWEpaWYoczwwKWZvcig7KytzPD0wOylmb3IoO3QoYSwtMSksIW8oYSk7KTtlbHNlIGZvcig7LS1zPj0wOylmb3IoO3QoYSwxKSwhbyhhKTspO30pfSxlJiYoci5jb3VudD1mdW5jdGlvbihvLGEpe3JldHVybiBSTC5zZXRUaW1lKCtvKSxQTC5zZXRUaW1lKCthKSxuKFJMKSxuKFBMKSxNYXRoLmZsb29yKGUoUkwsUEwpKX0sci5ldmVyeT1mdW5jdGlvbihvKXtyZXR1cm4gbz1NYXRoLmZsb29yKG8pLGlzRmluaXRlKG8pJiZvPjA/bz4xP3IuZmlsdGVyKGk/ZnVuY3Rpb24oYSl7cmV0dXJuIGkoYSklbz09MH06ZnVuY3Rpb24oYSl7cmV0dXJuIHIuY291bnQoMCxhKSVvPT0wfSk6cjpudWxsfSkscn12YXIgQUQ9bnIoZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKG4sdCl7bi5zZXRUaW1lKCtuK3QpfSxmdW5jdGlvbihuLHQpe3JldHVybiB0LW59KTtBRC5ldmVyeT1mdW5jdGlvbihuKXtyZXR1cm4gbj1NYXRoLmZsb29yKG4pLGlzRmluaXRlKG4pJiZuPjA/bj4xP25yKGZ1bmN0aW9uKHQpe3Quc2V0VGltZShNYXRoLmZsb29yKHQvbikqbil9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2Uqbil9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvbn0pOkFEOm51bGx9O3ZhciBSRD1BRCxrZD02ZTQsa0Q9NjA0OGU1LEVKPW5yKGZ1bmN0aW9uKG4pe24uc2V0VGltZShuLW4uZ2V0TWlsbGlzZWNvbmRzKCkpfSxmdW5jdGlvbihuLHQpe24uc2V0VGltZSgrbisxZTMqdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuKHQtbikvMWUzfSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENTZWNvbmRzKCl9KSxPRD1FSixESj1ucihmdW5jdGlvbihuKXtuLnNldFRpbWUobi1uLmdldE1pbGxpc2Vjb25kcygpLTFlMypuLmdldFNlY29uZHMoKSl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRUaW1lKCtuK3Qqa2QpfSxmdW5jdGlvbihuLHQpe3JldHVybih0LW4pL2tkfSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRNaW51dGVzKCl9KSxPTD1ESixJSj1ucihmdW5jdGlvbihuKXtuLnNldFRpbWUobi1uLmdldE1pbGxpc2Vjb25kcygpLTFlMypuLmdldFNlY29uZHMoKS1uLmdldE1pbnV0ZXMoKSprZCl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRUaW1lKCtuKzM2ZTUqdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuKHQtbikvMzZlNX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0SG91cnMoKX0pLEZMPUlKLEFKPW5yKGZ1bmN0aW9uKG4pe24uc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKG4sdCl7bi5zZXREYXRlKG4uZ2V0RGF0ZSgpK3QpfSxmdW5jdGlvbihuLHQpe3JldHVybih0LW4tKHQuZ2V0VGltZXpvbmVPZmZzZXQoKS1uLmdldFRpbWV6b25lT2Zmc2V0KCkpKmtkKS84NjRlNX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0RGF0ZSgpLTF9KSxkMD1BSjtmdW5jdGlvbiBpbShuKXtyZXR1cm4gbnIoZnVuY3Rpb24odCl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpLSh0LmdldERheSgpKzctbiklNyksdC5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrNyplKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10LShlLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSprZCkva0R9KX12YXIgcm09aW0oMCksdTA9aW0oMSksbHA9KGltKDIpLGltKDMpLGltKDQpKSxOSj0oaW0oNSksaW0oNiksbnIoZnVuY3Rpb24obil7bi5zZXREYXRlKDEpLG4uc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRNb250aChuLmdldE1vbnRoKCkrdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQuZ2V0TW9udGgoKS1uLmdldE1vbnRoKCkrMTIqKHQuZ2V0RnVsbFllYXIoKS1uLmdldEZ1bGxZZWFyKCkpfSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRNb250aCgpfSkpLE5MPU5KLExMPW5yKGZ1bmN0aW9uKG4pe24uc2V0TW9udGgoMCwxKSxuLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihuLHQpe24uc2V0RnVsbFllYXIobi5nZXRGdWxsWWVhcigpK3QpfSxmdW5jdGlvbihuLHQpe3JldHVybiB0LmdldEZ1bGxZZWFyKCktbi5nZXRGdWxsWWVhcigpfSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRGdWxsWWVhcigpfSk7TEwuZXZlcnk9ZnVuY3Rpb24obil7cmV0dXJuIGlzRmluaXRlKG49TWF0aC5mbG9vcihuKSkmJm4+MD9ucihmdW5jdGlvbih0KXt0LnNldEZ1bGxZZWFyKE1hdGguZmxvb3IodC5nZXRGdWxsWWVhcigpL24pKm4pLHQuc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpK2Uqbil9KTpudWxsfTt2YXIgT2Q9TEwsTEo9bnIoZnVuY3Rpb24obil7bi5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24obix0KXtuLnNldFVUQ0RhdGUobi5nZXRVVENEYXRlKCkrdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuKHQtbikvODY0ZTV9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldFVUQ0RhdGUoKS0xfSksRkQ9TEo7ZnVuY3Rpb24gb20obil7cmV0dXJuIG5yKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKS0odC5nZXRVVENEYXkoKSs3LW4pJTcpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpKzcqZSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkva0R9KX12YXIgV3k9b20oMCkscDA9b20oMSksY3A9KG9tKDIpLG9tKDMpLG9tKDQpKSxCTD0ob20oNSksb20oNiksbnIoZnVuY3Rpb24obil7bi5zZXRVVENNb250aCgwLDEpLG4uc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRVVENGdWxsWWVhcihuLmdldFVUQ0Z1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQuZ2V0VVRDRnVsbFllYXIoKS1uLmdldFVUQ0Z1bGxZZWFyKCl9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldFVUQ0Z1bGxZZWFyKCl9KSk7QkwuZXZlcnk9ZnVuY3Rpb24obil7cmV0dXJuIGlzRmluaXRlKG49TWF0aC5mbG9vcihuKSkmJm4+MD9ucihmdW5jdGlvbih0KXt0LnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IodC5nZXRVVENGdWxsWWVhcigpL24pKm4pLHQuc2V0VVRDTW9udGgoMCwxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0VVRDRnVsbFllYXIodC5nZXRVVENGdWxsWWVhcigpK2Uqbil9KTpudWxsfTt2YXIgYW09Qkw7ZnVuY3Rpb24gVkwobil7aWYoMDw9bi55JiZuLnk8MTAwKXt2YXIgdD1uZXcgRGF0ZSgtMSxuLm0sbi5kLG4uSCxuLk0sbi5TLG4uTCk7cmV0dXJuIHQuc2V0RnVsbFllYXIobi55KSx0fXJldHVybiBuZXcgRGF0ZShuLnksbi5tLG4uZCxuLkgsbi5NLG4uUyxuLkwpfWZ1bmN0aW9uIEhMKG4pe2lmKDA8PW4ueSYmbi55PDEwMCl7dmFyIHQ9bmV3IERhdGUoRGF0ZS5VVEMoLTEsbi5tLG4uZCxuLkgsbi5NLG4uUyxuLkwpKTtyZXR1cm4gdC5zZXRVVENGdWxsWWVhcihuLnkpLHR9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKG4ueSxuLm0sbi5kLG4uSCxuLk0sbi5TLG4uTCkpfWZ1bmN0aW9uIHF5KG4sdCxlKXtyZXR1cm57eTpuLG06dCxkOmUsSDowLE06MCxTOjAsTDowfX12YXIgaDAsbTAsako9eyItIjoiIixfOiIgIiwwOiIwIn0sUG89L15ccypcZCsvLElJZT0vXiUvLEFJZT0vW1xcXiQqKz98W1xdKCkue31dL2c7ZnVuY3Rpb24gRmkobix0LGUpe3ZhciBpPW48MD8iLSI6IiIscj0oaT8tbjpuKSsiIixvPXIubGVuZ3RoO3JldHVybiBpKyhvPGU/bmV3IEFycmF5KGUtbysxKS5qb2luKHQpK3I6cil9ZnVuY3Rpb24gUkllKG4pe3JldHVybiBuLnJlcGxhY2UoQUllLCJcXCQmIil9ZnVuY3Rpb24gWHkobil7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK24ubWFwKFJJZSkuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIFl5KG4pe2Zvcih2YXIgdD17fSxlPS0xLGk9bi5sZW5ndGg7KytlPGk7KXRbbltlXS50b0xvd2VyQ2FzZSgpXT1lO3JldHVybiB0fWZ1bmN0aW9uIFBJZShuLHQsZSl7dmFyIGk9UG8uZXhlYyh0LnNsaWNlKGUsZSsxKSk7cmV0dXJuIGk/KG4udz0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBrSWUobix0LGUpe3ZhciBpPVBvLmV4ZWModC5zbGljZShlLGUrMSkpO3JldHVybiBpPyhuLnU9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gT0llKG4sdCxlKXt2YXIgaT1Qby5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gaT8obi5VPStpWzBdLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEZJZShuLHQsZSl7dmFyIGk9UG8uZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uVj0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBOSWUobix0LGUpe3ZhciBpPVBvLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLlc9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gR0oobix0LGUpe3ZhciBpPVBvLmV4ZWModC5zbGljZShlLGUrNCkpO3JldHVybiBpPyhuLnk9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gV0oobix0LGUpe3ZhciBpPVBvLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLnk9K2lbMF0rKCtpWzBdPjY4PzE5MDA6MmUzKSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBMSWUobix0LGUpe3ZhciBpPS9eKFopfChbKy1dXGRcZCkoPzo6PyhcZFxkKSk/Ly5leGVjKHQuc2xpY2UoZSxlKzYpKTtyZXR1cm4gaT8obi5aPWlbMV0/MDotKGlbMl0rKGlbM118fCIwMCIpKSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBCSWUobix0LGUpe3ZhciBpPVBvLmV4ZWModC5zbGljZShlLGUrMSkpO3JldHVybiBpPyhuLnE9MyppWzBdLTMsZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gVkllKG4sdCxlKXt2YXIgaT1Qby5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gaT8obi5tPWlbMF0tMSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBxSihuLHQsZSl7dmFyIGk9UG8uZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uZD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBISWUobix0LGUpe3ZhciBpPVBvLmV4ZWModC5zbGljZShlLGUrMykpO3JldHVybiBpPyhuLm09MCxuLmQ9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWEoobix0LGUpe3ZhciBpPVBvLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLkg9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gekllKG4sdCxlKXt2YXIgaT1Qby5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gaT8obi5NPStpWzBdLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFVJZShuLHQsZSl7dmFyIGk9UG8uZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uUz0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBqSWUobix0LGUpe3ZhciBpPVBvLmV4ZWModC5zbGljZShlLGUrMykpO3JldHVybiBpPyhuLkw9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gR0llKG4sdCxlKXt2YXIgaT1Qby5leGVjKHQuc2xpY2UoZSxlKzYpKTtyZXR1cm4gaT8obi5MPU1hdGguZmxvb3IoaVswXS8xZTMpLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFdJZShuLHQsZSl7dmFyIGk9SUllLmV4ZWModC5zbGljZShlLGUrMSkpO3JldHVybiBpP2UraVswXS5sZW5ndGg6LTF9ZnVuY3Rpb24gcUllKG4sdCxlKXt2YXIgaT1Qby5leGVjKHQuc2xpY2UoZSkpO3JldHVybiBpPyhuLlE9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWEllKG4sdCxlKXt2YXIgaT1Qby5leGVjKHQuc2xpY2UoZSkpO3JldHVybiBpPyhuLnM9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWUoobix0KXtyZXR1cm4gRmkobi5nZXREYXRlKCksdCwyKX1mdW5jdGlvbiBZSWUobix0KXtyZXR1cm4gRmkobi5nZXRIb3VycygpLHQsMil9ZnVuY3Rpb24gUUllKG4sdCl7cmV0dXJuIEZpKG4uZ2V0SG91cnMoKSUxMnx8MTIsdCwyKX1mdW5jdGlvbiBaSWUobix0KXtyZXR1cm4gRmkoMStkMC5jb3VudChPZChuKSxuKSx0LDMpfWZ1bmN0aW9uICRKKG4sdCl7cmV0dXJuIEZpKG4uZ2V0TWlsbGlzZWNvbmRzKCksdCwzKX1mdW5jdGlvbiBLSWUobix0KXtyZXR1cm4gJEoobix0KSsiMDAwIn1mdW5jdGlvbiBKSWUobix0KXtyZXR1cm4gRmkobi5nZXRNb250aCgpKzEsdCwyKX1mdW5jdGlvbiAkSWUobix0KXtyZXR1cm4gRmkobi5nZXRNaW51dGVzKCksdCwyKX1mdW5jdGlvbiBlQWUobix0KXtyZXR1cm4gRmkobi5nZXRTZWNvbmRzKCksdCwyKX1mdW5jdGlvbiB0QWUobil7dmFyIHQ9bi5nZXREYXkoKTtyZXR1cm4gMD09PXQ/Nzp0fWZ1bmN0aW9uIG5BZShuLHQpe3JldHVybiBGaShybS5jb3VudChPZChuKS0xLG4pLHQsMil9ZnVuY3Rpb24gZSQobil7dmFyIHQ9bi5nZXREYXkoKTtyZXR1cm4gdD49NHx8MD09PXQ/bHAobik6bHAuY2VpbChuKX1mdW5jdGlvbiBpQWUobix0KXtyZXR1cm4gbj1lJChuKSxGaShscC5jb3VudChPZChuKSxuKSsoND09PU9kKG4pLmdldERheSgpKSx0LDIpfWZ1bmN0aW9uIHJBZShuKXtyZXR1cm4gbi5nZXREYXkoKX1mdW5jdGlvbiBvQWUobix0KXtyZXR1cm4gRmkodTAuY291bnQoT2QobiktMSxuKSx0LDIpfWZ1bmN0aW9uIGFBZShuLHQpe3JldHVybiBGaShuLmdldEZ1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gc0FlKG4sdCl7cmV0dXJuIEZpKChuPWUkKG4pKS5nZXRGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIGxBZShuLHQpe3JldHVybiBGaShuLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gY0FlKG4sdCl7dmFyIGU9bi5nZXREYXkoKTtyZXR1cm4gRmkoKG49ZT49NHx8MD09PWU/bHAobik6bHAuY2VpbChuKSkuZ2V0RnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiBkQWUobil7dmFyIHQ9bi5nZXRUaW1lem9uZU9mZnNldCgpO3JldHVybih0PjA/Ii0iOih0Kj0tMSwiKyIpKStGaSh0LzYwfDAsIjAiLDIpK0ZpKHQlNjAsIjAiLDIpfWZ1bmN0aW9uIFFKKG4sdCl7cmV0dXJuIEZpKG4uZ2V0VVRDRGF0ZSgpLHQsMil9ZnVuY3Rpb24gdUFlKG4sdCl7cmV0dXJuIEZpKG4uZ2V0VVRDSG91cnMoKSx0LDIpfWZ1bmN0aW9uIHBBZShuLHQpe3JldHVybiBGaShuLmdldFVUQ0hvdXJzKCklMTJ8fDEyLHQsMil9ZnVuY3Rpb24gaEFlKG4sdCl7cmV0dXJuIEZpKDErRkQuY291bnQoYW0obiksbiksdCwzKX1mdW5jdGlvbiB0JChuLHQpe3JldHVybiBGaShuLmdldFVUQ01pbGxpc2Vjb25kcygpLHQsMyl9ZnVuY3Rpb24gbUFlKG4sdCl7cmV0dXJuIHQkKG4sdCkrIjAwMCJ9ZnVuY3Rpb24gZkFlKG4sdCl7cmV0dXJuIEZpKG4uZ2V0VVRDTW9udGgoKSsxLHQsMil9ZnVuY3Rpb24gZ0FlKG4sdCl7cmV0dXJuIEZpKG4uZ2V0VVRDTWludXRlcygpLHQsMil9ZnVuY3Rpb24gX0FlKG4sdCl7cmV0dXJuIEZpKG4uZ2V0VVRDU2Vjb25kcygpLHQsMil9ZnVuY3Rpb24gYkFlKG4pe3ZhciB0PW4uZ2V0VVRDRGF5KCk7cmV0dXJuIDA9PT10Pzc6dH1mdW5jdGlvbiB2QWUobix0KXtyZXR1cm4gRmkoV3kuY291bnQoYW0obiktMSxuKSx0LDIpfWZ1bmN0aW9uIG4kKG4pe3ZhciB0PW4uZ2V0VVRDRGF5KCk7cmV0dXJuIHQ+PTR8fDA9PT10P2NwKG4pOmNwLmNlaWwobil9ZnVuY3Rpb24geUFlKG4sdCl7cmV0dXJuIG49biQobiksRmkoY3AuY291bnQoYW0obiksbikrKDQ9PT1hbShuKS5nZXRVVENEYXkoKSksdCwyKX1mdW5jdGlvbiB4QWUobil7cmV0dXJuIG4uZ2V0VVRDRGF5KCl9ZnVuY3Rpb24gQ0FlKG4sdCl7cmV0dXJuIEZpKHAwLmNvdW50KGFtKG4pLTEsbiksdCwyKX1mdW5jdGlvbiBNQWUobix0KXtyZXR1cm4gRmkobi5nZXRVVENGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIHdBZShuLHQpe3JldHVybiBGaSgobj1uJChuKSkuZ2V0VVRDRnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBTQWUobix0KXtyZXR1cm4gRmkobi5nZXRVVENGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIEVBZShuLHQpe3ZhciBlPW4uZ2V0VVRDRGF5KCk7cmV0dXJuIEZpKChuPWU+PTR8fDA9PT1lP2NwKG4pOmNwLmNlaWwobikpLmdldFVUQ0Z1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gVEFlKCl7cmV0dXJuIiswMDAwIn1mdW5jdGlvbiBaSigpe3JldHVybiIlIn1mdW5jdGlvbiBLSihuKXtyZXR1cm4rbn1mdW5jdGlvbiBKSihuKXtyZXR1cm4gTWF0aC5mbG9vcigrbi8xZTMpfWgwPWZ1bmN0aW9uKG4pe3ZhciB0PW4uZGF0ZVRpbWUsZT1uLmRhdGUsaT1uLnRpbWUscj1uLnBlcmlvZHMsbz1uLmRheXMsYT1uLnNob3J0RGF5cyxzPW4ubW9udGhzLGw9bi5zaG9ydE1vbnRocyxjPVh5KHIpLGQ9WXkociksdT1YeShvKSxwPVl5KG8pLGg9WHkoYSksbT1ZeShhKSxfPVh5KHMpLE09WXkocykseT1YeShsKSx4PVl5KGwpLFI9e2E6ZnVuY3Rpb24oQ2Upe3JldHVybiBhW0NlLmdldERheSgpXX0sQTpmdW5jdGlvbihDZSl7cmV0dXJuIG9bQ2UuZ2V0RGF5KCldfSxiOmZ1bmN0aW9uKENlKXtyZXR1cm4gbFtDZS5nZXRNb250aCgpXX0sQjpmdW5jdGlvbihDZSl7cmV0dXJuIHNbQ2UuZ2V0TW9udGgoKV19LGM6bnVsbCxkOllKLGU6WUosZjpLSWUsZzpzQWUsRzpjQWUsSDpZSWUsSTpRSWUsajpaSWUsTDokSixtOkpJZSxNOiRJZSxwOmZ1bmN0aW9uKENlKXtyZXR1cm4gclsrKENlLmdldEhvdXJzKCk+PTEyKV19LHE6ZnVuY3Rpb24oQ2Upe3JldHVybiAxK35+KENlLmdldE1vbnRoKCkvMyl9LFE6S0osczpKSixTOmVBZSx1OnRBZSxVOm5BZSxWOmlBZSx3OnJBZSxXOm9BZSx4Om51bGwsWDpudWxsLHk6YUFlLFk6bEFlLFo6ZEFlLCIlIjpaSn0sST17YTpmdW5jdGlvbihDZSl7cmV0dXJuIGFbQ2UuZ2V0VVRDRGF5KCldfSxBOmZ1bmN0aW9uKENlKXtyZXR1cm4gb1tDZS5nZXRVVENEYXkoKV19LGI6ZnVuY3Rpb24oQ2Upe3JldHVybiBsW0NlLmdldFVUQ01vbnRoKCldfSxCOmZ1bmN0aW9uKENlKXtyZXR1cm4gc1tDZS5nZXRVVENNb250aCgpXX0sYzpudWxsLGQ6UUosZTpRSixmOm1BZSxnOndBZSxHOkVBZSxIOnVBZSxJOnBBZSxqOmhBZSxMOnQkLG06ZkFlLE06Z0FlLHA6ZnVuY3Rpb24oQ2Upe3JldHVybiByWysoQ2UuZ2V0VVRDSG91cnMoKT49MTIpXX0scTpmdW5jdGlvbihDZSl7cmV0dXJuIDErfn4oQ2UuZ2V0VVRDTW9udGgoKS8zKX0sUTpLSixzOkpKLFM6X0FlLHU6YkFlLFU6dkFlLFY6eUFlLHc6eEFlLFc6Q0FlLHg6bnVsbCxYOm51bGwseTpNQWUsWTpTQWUsWjpUQWUsIiUiOlpKfSxCPXthOmZ1bmN0aW9uKENlLG10LGh0KXt2YXIgb2U9aC5leGVjKG10LnNsaWNlKGh0KSk7cmV0dXJuIG9lPyhDZS53PW1bb2VbMF0udG9Mb3dlckNhc2UoKV0saHQrb2VbMF0ubGVuZ3RoKTotMX0sQTpmdW5jdGlvbihDZSxtdCxodCl7dmFyIG9lPXUuZXhlYyhtdC5zbGljZShodCkpO3JldHVybiBvZT8oQ2Uudz1wW29lWzBdLnRvTG93ZXJDYXNlKCldLGh0K29lWzBdLmxlbmd0aCk6LTF9LGI6ZnVuY3Rpb24oQ2UsbXQsaHQpe3ZhciBvZT15LmV4ZWMobXQuc2xpY2UoaHQpKTtyZXR1cm4gb2U/KENlLm09eFtvZVswXS50b0xvd2VyQ2FzZSgpXSxodCtvZVswXS5sZW5ndGgpOi0xfSxCOmZ1bmN0aW9uKENlLG10LGh0KXt2YXIgb2U9Xy5leGVjKG10LnNsaWNlKGh0KSk7cmV0dXJuIG9lPyhDZS5tPU1bb2VbMF0udG9Mb3dlckNhc2UoKV0saHQrb2VbMF0ubGVuZ3RoKTotMX0sYzpmdW5jdGlvbihDZSxtdCxodCl7cmV0dXJuIHdlKENlLHQsbXQsaHQpfSxkOnFKLGU6cUosZjpHSWUsZzpXSixHOkdKLEg6WEosSTpYSixqOkhJZSxMOmpJZSxtOlZJZSxNOnpJZSxwOmZ1bmN0aW9uKENlLG10LGh0KXt2YXIgb2U9Yy5leGVjKG10LnNsaWNlKGh0KSk7cmV0dXJuIG9lPyhDZS5wPWRbb2VbMF0udG9Mb3dlckNhc2UoKV0saHQrb2VbMF0ubGVuZ3RoKTotMX0scTpCSWUsUTpxSWUsczpYSWUsUzpVSWUsdTprSWUsVTpPSWUsVjpGSWUsdzpQSWUsVzpOSWUseDpmdW5jdGlvbihDZSxtdCxodCl7cmV0dXJuIHdlKENlLGUsbXQsaHQpfSxYOmZ1bmN0aW9uKENlLG10LGh0KXtyZXR1cm4gd2UoQ2UsaSxtdCxodCl9LHk6V0osWTpHSixaOkxJZSwiJSI6V0llfTtmdW5jdGlvbiBlZShDZSxtdCl7cmV0dXJuIGZ1bmN0aW9uKGh0KXt2YXIgdXQsYW4seW4sb2U9W10sYXQ9LTEsWWU9MCxfdD1DZS5sZW5ndGg7Zm9yKGh0IGluc3RhbmNlb2YgRGF0ZXx8KGh0PW5ldyBEYXRlKCtodCkpOysrYXQ8X3Q7KTM3PT09Q2UuY2hhckNvZGVBdChhdCkmJihvZS5wdXNoKENlLnNsaWNlKFllLGF0KSksbnVsbCE9KGFuPWpKW3V0PUNlLmNoYXJBdCgrK2F0KV0pP3V0PUNlLmNoYXJBdCgrK2F0KTphbj0iZSI9PT11dD8iICI6IjAiLCh5bj1tdFt1dF0pJiYodXQ9eW4oaHQsYW4pKSxvZS5wdXNoKHV0KSxZZT1hdCsxKTtyZXR1cm4gb2UucHVzaChDZS5zbGljZShZZSxhdCkpLG9lLmpvaW4oIiIpfX1mdW5jdGlvbiBRKENlLG10KXtyZXR1cm4gZnVuY3Rpb24oaHQpe3ZhciBZZSxfdCxvZT1xeSgxOTAwLHZvaWQgMCwxKTtpZih3ZShvZSxDZSxodCs9IiIsMCkhPWh0Lmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBvZSlyZXR1cm4gbmV3IERhdGUob2UuUSk7aWYoInMiaW4gb2UpcmV0dXJuIG5ldyBEYXRlKDFlMypvZS5zKygiTCJpbiBvZT9vZS5MOjApKTtpZihtdCYmISgiWiJpbiBvZSkmJihvZS5aPTApLCJwImluIG9lJiYob2UuSD1vZS5IJTEyKzEyKm9lLnApLHZvaWQgMD09PW9lLm0mJihvZS5tPSJxImluIG9lP29lLnE6MCksIlYiaW4gb2Upe2lmKG9lLlY8MXx8b2UuVj41MylyZXR1cm4gbnVsbDsidyJpbiBvZXx8KG9lLnc9MSksIloiaW4gb2U/KF90PShZZT1ITChxeShvZS55LDAsMSkpKS5nZXRVVENEYXkoKSxZZT1fdD40fHwwPT09X3Q/cDAuY2VpbChZZSk6cDAoWWUpLFllPUZELm9mZnNldChZZSw3KihvZS5WLTEpKSxvZS55PVllLmdldFVUQ0Z1bGxZZWFyKCksb2UubT1ZZS5nZXRVVENNb250aCgpLG9lLmQ9WWUuZ2V0VVRDRGF0ZSgpKyhvZS53KzYpJTcpOihfdD0oWWU9VkwocXkob2UueSwwLDEpKSkuZ2V0RGF5KCksWWU9X3Q+NHx8MD09PV90P3UwLmNlaWwoWWUpOnUwKFllKSxZZT1kMC5vZmZzZXQoWWUsNyoob2UuVi0xKSksb2UueT1ZZS5nZXRGdWxsWWVhcigpLG9lLm09WWUuZ2V0TW9udGgoKSxvZS5kPVllLmdldERhdGUoKSsob2Uudys2KSU3KX1lbHNlKCJXImluIG9lfHwiVSJpbiBvZSkmJigidyJpbiBvZXx8KG9lLnc9InUiaW4gb2U/b2UudSU3OiJXImluIG9lPzE6MCksX3Q9IloiaW4gb2U/SEwocXkob2UueSwwLDEpKS5nZXRVVENEYXkoKTpWTChxeShvZS55LDAsMSkpLmdldERheSgpLG9lLm09MCxvZS5kPSJXImluIG9lPyhvZS53KzYpJTcrNypvZS5XLShfdCs1KSU3Om9lLncrNypvZS5VLShfdCs2KSU3KTtyZXR1cm4iWiJpbiBvZT8ob2UuSCs9b2UuWi8xMDB8MCxvZS5NKz1vZS5aJTEwMCxITChvZSkpOlZMKG9lKX19ZnVuY3Rpb24gd2UoQ2UsbXQsaHQsb2Upe2Zvcih2YXIgdXQsYW4sYXQ9MCxZZT1tdC5sZW5ndGgsX3Q9aHQubGVuZ3RoO2F0PFllOyl7aWYob2U+PV90KXJldHVybi0xO2lmKDM3PT09KHV0PW10LmNoYXJDb2RlQXQoYXQrKykpKXtpZih1dD1tdC5jaGFyQXQoYXQrKyksIShhbj1CW3V0IGluIGpKP210LmNoYXJBdChhdCsrKTp1dF0pfHwob2U9YW4oQ2UsaHQsb2UpKTwwKXJldHVybi0xfWVsc2UgaWYodXQhPWh0LmNoYXJDb2RlQXQob2UrKykpcmV0dXJuLTF9cmV0dXJuIG9lfXJldHVybiBSLng9ZWUoZSxSKSxSLlg9ZWUoaSxSKSxSLmM9ZWUodCxSKSxJLng9ZWUoZSxJKSxJLlg9ZWUoaSxJKSxJLmM9ZWUodCxJKSx7Zm9ybWF0OmZ1bmN0aW9uKENlKXt2YXIgbXQ9ZWUoQ2UrPSIiLFIpO3JldHVybiBtdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBDZX0sbXR9LHBhcnNlOmZ1bmN0aW9uKENlKXt2YXIgbXQ9UShDZSs9IiIsITEpO3JldHVybiBtdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBDZX0sbXR9LHV0Y0Zvcm1hdDpmdW5jdGlvbihDZSl7dmFyIG10PWVlKENlKz0iIixJKTtyZXR1cm4gbXQudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gQ2V9LG10fSx1dGNQYXJzZTpmdW5jdGlvbihDZSl7dmFyIG10PVEoQ2UrPSIiLCEwKTtyZXR1cm4gbXQudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gQ2V9LG10fX19KHtkYXRlVGltZToiJXgsICVYIixkYXRlOiIlLW0vJS1kLyVZIix0aW1lOiIlLUk6JU06JVMgJXAiLHBlcmlvZHM6WyJBTSIsIlBNIl0sZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnREYXlzOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydE1vbnRoczpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdfSksbTA9aDAuZm9ybWF0O3ZhciBReT0xZTMsWnk9NjAqUXksS3k9NjAqWnksSnk9MjQqS3ksREFlPTcqSnksYSQ9MzAqSnksakw9MzY1Kkp5O2Z1bmN0aW9uIElBZShuKXtyZXR1cm4gbmV3IERhdGUobil9ZnVuY3Rpb24gQUFlKG4pe3JldHVybiBuIGluc3RhbmNlb2YgRGF0ZT8rbjorbmV3IERhdGUoK24pfWZ1bmN0aW9uIEdMKG4sdCxlLGkscixvLGEscyxsKXt2YXIgYz1qeSgkYSwkYSksZD1jLmludmVydCx1PWMuZG9tYWluLHA9bCgiLiVMIiksaD1sKCI6JVMiKSxtPWwoIiVJOiVNIiksXz1sKCIlSSAlcCIpLE09bCgiJWEgJWQiKSx5PWwoIiViICVkIikseD1sKCIlQiIpLFI9bCgiJVkiKSxJPVtbYSwxLFF5XSxbYSw1LDUqUXldLFthLDE1LDE1KlF5XSxbYSwzMCwzMCpReV0sW28sMSxaeV0sW28sNSw1Klp5XSxbbywxNSwxNSpaeV0sW28sMzAsMzAqWnldLFtyLDEsS3ldLFtyLDMsMypLeV0sW3IsNiw2Kkt5XSxbciwxMiwxMipLeV0sW2ksMSxKeV0sW2ksMiwyKkp5XSxbZSwxLERBZV0sW3QsMSxhJF0sW3QsMywzKmEkXSxbbiwxLGpMXV07ZnVuY3Rpb24gQihRKXtyZXR1cm4oYShRKTxRP3A6byhRKTxRP2g6cihRKTxRP206aShRKTxRP186dChRKTxRP2UoUSk8UT9NOnk6bihRKTxRP3g6UikoUSl9ZnVuY3Rpb24gZWUoUSx3ZSxRZSxBZSl7aWYobnVsbD09USYmKFE9MTApLCJudW1iZXIiPT10eXBlb2YgUSl7dmFyIEQ9TWF0aC5hYnMoUWUtd2UpL1EscmU9Q3koZnVuY3Rpb24oY2Upe3JldHVybiBjZVsyXX0pLnJpZ2h0KEksRCk7cmU9PT1JLmxlbmd0aD8oQWU9SWQod2UvakwsUWUvakwsUSksUT1uKTpyZT8oQWU9KHJlPUlbRC9JW3JlLTFdWzJdPElbcmVdWzJdL0Q/cmUtMTpyZV0pWzFdLFE9cmVbMF0pOihBZT1NYXRoLm1heChJZCh3ZSxRZSxRKSwxKSxRPXMpfXJldHVybiBudWxsPT1BZT9ROlEuZXZlcnkoQWUpfXJldHVybiBjLmludmVydD1mdW5jdGlvbihRKXtyZXR1cm4gbmV3IERhdGUoZChRKSl9LGMuZG9tYWluPWZ1bmN0aW9uKFEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3UoenkuY2FsbChRLEFBZSkpOnUoKS5tYXAoSUFlKX0sYy50aWNrcz1mdW5jdGlvbihRLHdlKXt2YXIgY2UsUWU9dSgpLEFlPVFlWzBdLEQ9UWVbUWUubGVuZ3RoLTFdLHJlPUQ8QWU7cmV0dXJuIHJlJiYoY2U9QWUsQWU9RCxEPWNlKSxjZT0oY2U9ZWUoUSxBZSxELHdlKSk/Y2UucmFuZ2UoQWUsRCsxKTpbXSxyZT9jZS5yZXZlcnNlKCk6Y2V9LGMudGlja0Zvcm1hdD1mdW5jdGlvbihRLHdlKXtyZXR1cm4gbnVsbD09d2U/QjpsKHdlKX0sYy5uaWNlPWZ1bmN0aW9uKFEsd2Upe3ZhciBRZT11KCk7cmV0dXJuKFE9ZWUoUSxRZVswXSxRZVtRZS5sZW5ndGgtMV0sd2UpKT91KElEKFFlLFEpKTpjfSxjLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gc3AoYyxHTChuLHQsZSxpLHIsbyxhLHMsbCkpfSxjfWZ1bmN0aW9uIHNtKCl7cmV0dXJuIEphLmFwcGx5KEdMKE9kLE5MLHJtLGQwLEZMLE9MLE9ELFJELG0wKS5kb21haW4oW25ldyBEYXRlKDJlMywwLDEpLG5ldyBEYXRlKDJlMywwLDIpXSksYXJndW1lbnRzKX1mdW5jdGlvbiBXTCgpe3RoaXMuXz1udWxsfWZ1bmN0aW9uIGYwKG4pe24uVT1uLkM9bi5MPW4uUj1uLlA9bi5OPW51bGx9ZnVuY3Rpb24gJHkobix0KXt2YXIgZT10LGk9dC5SLHI9ZS5VO3I/ci5MPT09ZT9yLkw9aTpyLlI9aTpuLl89aSxpLlU9cixlLlU9aSxlLlI9aS5MLGUuUiYmKGUuUi5VPWUpLGkuTD1lfWZ1bmN0aW9uIGV4KG4sdCl7dmFyIGU9dCxpPXQuTCxyPWUuVTtyP3IuTD09PWU/ci5MPWk6ci5SPWk6bi5fPWksaS5VPXIsZS5VPWksZS5MPWkuUixlLkwmJihlLkwuVT1lKSxpLlI9ZX1mdW5jdGlvbiBsJChuKXtmb3IoO24uTDspbj1uLkw7cmV0dXJuIG59V0wucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpXTCxpbnNlcnQ6ZnVuY3Rpb24obix0KXt2YXIgZSxpLHI7aWYobil7aWYodC5QPW4sdC5OPW4uTixuLk4mJihuLk4uUD10KSxuLk49dCxuLlIpe2ZvcihuPW4uUjtuLkw7KW49bi5MO24uTD10fWVsc2Ugbi5SPXQ7ZT1ufWVsc2UgdGhpcy5fPyhuPWwkKHRoaXMuXyksdC5QPW51bGwsdC5OPW4sbi5QPW4uTD10LGU9bik6KHQuUD10Lk49bnVsbCx0aGlzLl89dCxlPW51bGwpO2Zvcih0Lkw9dC5SPW51bGwsdC5VPWUsdC5DPSEwLG49dDtlJiZlLkM7KWU9PT0oaT1lLlUpLkw/KHI9aS5SKSYmci5DPyhlLkM9ci5DPSExLGkuQz0hMCxuPWkpOihuPT09ZS5SJiYoJHkodGhpcyxlKSxlPShuPWUpLlUpLGUuQz0hMSxpLkM9ITAsZXgodGhpcyxpKSk6KHI9aS5MKSYmci5DPyhlLkM9ci5DPSExLGkuQz0hMCxuPWkpOihuPT09ZS5MJiYoZXgodGhpcyxlKSxlPShuPWUpLlUpLGUuQz0hMSxpLkM9ITAsJHkodGhpcyxpKSksZT1uLlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbihuKXtuLk4mJihuLk4uUD1uLlApLG4uUCYmKG4uUC5OPW4uTiksbi5OPW4uUD1udWxsO3ZhciBlLG8sYSx0PW4uVSxpPW4uTCxyPW4uUjtpZihvPWk/cj9sJChyKTppOnIsdD90Lkw9PT1uP3QuTD1vOnQuUj1vOnRoaXMuXz1vLGkmJnI/KGE9by5DLG8uQz1uLkMsby5MPWksaS5VPW8sbyE9PXI/KHQ9by5VLG8uVT1uLlUsdC5MPW49by5SLG8uUj1yLHIuVT1vKTooby5VPXQsdD1vLG49by5SKSk6KGE9bi5DLG49byksbiYmKG4uVT10KSwhYSl7aWYobiYmbi5DKXJldHVybiB2b2lkKG4uQz0hMSk7ZG97aWYobj09PXRoaXMuXylicmVhaztpZihuPT09dC5MKXtpZigoZT10LlIpLkMmJihlLkM9ITEsdC5DPSEwLCR5KHRoaXMsdCksZT10LlIpLGUuTCYmZS5MLkN8fGUuUiYmZS5SLkMpeyghZS5SfHwhZS5SLkMpJiYoZS5MLkM9ITEsZS5DPSEwLGV4KHRoaXMsZSksZT10LlIpLGUuQz10LkMsdC5DPWUuUi5DPSExLCR5KHRoaXMsdCksbj10aGlzLl87YnJlYWt9fWVsc2UgaWYoKGU9dC5MKS5DJiYoZS5DPSExLHQuQz0hMCxleCh0aGlzLHQpLGU9dC5MKSxlLkwmJmUuTC5DfHxlLlImJmUuUi5DKXsoIWUuTHx8IWUuTC5DKSYmKGUuUi5DPSExLGUuQz0hMCwkeSh0aGlzLGUpLGU9dC5MKSxlLkM9dC5DLHQuQz1lLkwuQz0hMSxleCh0aGlzLHQpLG49dGhpcy5fO2JyZWFrfWUuQz0hMCxuPXQsdD10LlV9d2hpbGUoIW4uQyk7biYmKG4uQz0hMSl9fX07dmFyIHFMPVdMO2Z1bmN0aW9uIGcwKG4sdCxlLGkpe3ZhciByPVtudWxsLG51bGxdLG89a28ucHVzaChyKS0xO3JldHVybiByLmxlZnQ9bixyLnJpZ2h0PXQsZSYmdHgocixuLHQsZSksaSYmdHgocix0LG4saSkseGFbbi5pbmRleF0uaGFsZmVkZ2VzLnB1c2gobykseGFbdC5pbmRleF0uaGFsZmVkZ2VzLnB1c2gobykscn1mdW5jdGlvbiBfMChuLHQsZSl7dmFyIGk9W3QsZV07cmV0dXJuIGkubGVmdD1uLGl9ZnVuY3Rpb24gdHgobix0LGUsaSl7blswXXx8blsxXT9uLmxlZnQ9PT1lP25bMV09aTpuWzBdPWk6KG5bMF09aSxuLmxlZnQ9dCxuLnJpZ2h0PWUpfWZ1bmN0aW9uIGtBZShuLHQsZSxpLHIpe3ZhciBfLG89blswXSxhPW5bMV0scz1vWzBdLGw9b1sxXSx1PTAscD0xLGg9YVswXS1zLG09YVsxXS1sO2lmKF89dC1zLGh8fCEoXz4wKSl7aWYoXy89aCxoPDApe2lmKF88dSlyZXR1cm47XzxwJiYocD1fKX1lbHNlIGlmKGg+MCl7aWYoXz5wKXJldHVybjtfPnUmJih1PV8pfWlmKF89aS1zLGh8fCEoXzwwKSl7aWYoXy89aCxoPDApe2lmKF8+cClyZXR1cm47Xz51JiYodT1fKX1lbHNlIGlmKGg+MCl7aWYoXzx1KXJldHVybjtfPHAmJihwPV8pfWlmKF89ZS1sLG18fCEoXz4wKSl7aWYoXy89bSxtPDApe2lmKF88dSlyZXR1cm47XzxwJiYocD1fKX1lbHNlIGlmKG0+MCl7aWYoXz5wKXJldHVybjtfPnUmJih1PV8pfWlmKF89ci1sLG18fCEoXzwwKSl7aWYoXy89bSxtPDApe2lmKF8+cClyZXR1cm47Xz51JiYodT1fKX1lbHNlIGlmKG0+MCl7aWYoXzx1KXJldHVybjtfPHAmJihwPV8pfXJldHVybiEodT4wKSYmIShwPDEpfHwodT4wJiYoblswXT1bcyt1KmgsbCt1Km1dKSxwPDEmJihuWzFdPVtzK3AqaCxsK3AqbV0pKSwhMH19fX19ZnVuY3Rpb24gT0FlKG4sdCxlLGkscil7dmFyIG89blsxXTtpZihvKXJldHVybiEwO3ZhciBfLE0sYT1uWzBdLHM9bi5sZWZ0LGw9bi5yaWdodCxjPXNbMF0sZD1zWzFdLHU9bFswXSxwPWxbMV0saD0oYyt1KS8yO2lmKHA9PT1kKXtpZihoPHR8fGg+PWkpcmV0dXJuO2lmKGM+dSl7aWYoYSl7aWYoYVsxXT49cilyZXR1cm59ZWxzZSBhPVtoLGVdO289W2gscl19ZWxzZXtpZihhKXtpZihhWzFdPGUpcmV0dXJufWVsc2UgYT1baCxyXTtvPVtoLGVdfX1lbHNlIGlmKE09KGQrcCkvMi0oXz0oYy11KS8ocC1kKSkqaCxfPC0xfHxfPjEpaWYoYz51KXtpZihhKXtpZihhWzFdPj1yKXJldHVybn1lbHNlIGE9WyhlLU0pL18sZV07bz1bKHItTSkvXyxyXX1lbHNle2lmKGEpe2lmKGFbMV08ZSlyZXR1cm59ZWxzZSBhPVsoci1NKS9fLHJdO289WyhlLU0pL18sZV19ZWxzZSBpZihkPHApe2lmKGEpe2lmKGFbMF0+PWkpcmV0dXJufWVsc2UgYT1bdCxfKnQrTV07bz1baSxfKmkrTV19ZWxzZXtpZihhKXtpZihhWzBdPHQpcmV0dXJufWVsc2UgYT1baSxfKmkrTV07bz1bdCxfKnQrTV19cmV0dXJuIG5bMF09YSxuWzFdPW8sITB9ZnVuY3Rpb24gRkFlKG4sdCl7dmFyIGU9bi5zaXRlLGk9dC5sZWZ0LHI9dC5yaWdodDtyZXR1cm4gZT09PXImJihyPWksaT1lKSxyP01hdGguYXRhbjIoclsxXS1pWzFdLHJbMF0taVswXSk6KGU9PT1pPyhpPXRbMV0scj10WzBdKTooaT10WzBdLHI9dFsxXSksTWF0aC5hdGFuMihpWzBdLXJbMF0sclsxXS1pWzFdKSl9ZnVuY3Rpb24gWEwobix0KXtyZXR1cm4gdFsrKHQubGVmdCE9PW4uc2l0ZSldfWZ1bmN0aW9uIE5BZShuLHQpe3JldHVybiB0WysodC5sZWZ0PT09bi5zaXRlKV19dmFyIE5ELGgkPVtdO2Z1bmN0aW9uIExBZSgpe2YwKHRoaXMpLHRoaXMueD10aGlzLnk9dGhpcy5hcmM9dGhpcy5zaXRlPXRoaXMuY3k9bnVsbH1mdW5jdGlvbiBsbShuKXt2YXIgdD1uLlAsZT1uLk47aWYodCYmZSl7dmFyIGk9dC5zaXRlLHI9bi5zaXRlLG89ZS5zaXRlO2lmKGkhPT1vKXt2YXIgYT1yWzBdLHM9clsxXSxsPWlbMF0tYSxjPWlbMV0tcyxkPW9bMF0tYSx1PW9bMV0tcyxwPTIqKGwqdS1jKmQpO2lmKCEocD49LW0kKSl7dmFyIGg9bCpsK2MqYyxtPWQqZCt1KnUsXz0odSpoLWMqbSkvcCxNPShsKm0tZCpoKS9wLHk9aCQucG9wKCl8fG5ldyBMQWU7eS5hcmM9bix5LnNpdGU9cix5Lng9XythLHkueT0oeS5jeT1NK3MpK01hdGguc3FydChfKl8rTSpNKSxuLmNpcmNsZT15O2Zvcih2YXIgeD1udWxsLFI9YjAuXztSOylpZih5Lnk8Ui55fHx5Lnk9PT1SLnkmJnkueDw9Ui54KXtpZighUi5MKXt4PVIuUDticmVha31SPVIuTH1lbHNle2lmKCFSLlIpe3g9UjticmVha31SPVIuUn1iMC5pbnNlcnQoeCx5KSx4fHwoTkQ9eSl9fX19ZnVuY3Rpb24gY20obil7dmFyIHQ9bi5jaXJjbGU7dCYmKHQuUHx8KE5EPXQuTiksYjAucmVtb3ZlKHQpLGgkLnB1c2godCksZjAodCksbi5jaXJjbGU9bnVsbCl9dmFyIGckPVtdO2Z1bmN0aW9uIEJBZSgpe2YwKHRoaXMpLHRoaXMuZWRnZT10aGlzLnNpdGU9dGhpcy5jaXJjbGU9bnVsbH1mdW5jdGlvbiBmJChuKXt2YXIgdD1nJC5wb3AoKXx8bmV3IEJBZTtyZXR1cm4gdC5zaXRlPW4sdH1mdW5jdGlvbiBZTChuKXtjbShuKSxkbS5yZW1vdmUobiksZyQucHVzaChuKSxmMChuKX1mdW5jdGlvbiBfJChuKXt2YXIgdD1uLmNpcmNsZSxlPXQueCxpPXQuY3kscj1bZSxpXSxvPW4uUCxhPW4uTixzPVtuXTtZTChuKTtmb3IodmFyIGw9bztsLmNpcmNsZSYmTWF0aC5hYnMoZS1sLmNpcmNsZS54KTxKaSYmTWF0aC5hYnMoaS1sLmNpcmNsZS5jeSk8Smk7KW89bC5QLHMudW5zaGlmdChsKSxZTChsKSxsPW87cy51bnNoaWZ0KGwpLGNtKGwpO2Zvcih2YXIgYz1hO2MuY2lyY2xlJiZNYXRoLmFicyhlLWMuY2lyY2xlLngpPEppJiZNYXRoLmFicyhpLWMuY2lyY2xlLmN5KTxKaTspYT1jLk4scy5wdXNoKGMpLFlMKGMpLGM9YTtzLnB1c2goYyksY20oYyk7dmFyIHUsZD1zLmxlbmd0aDtmb3IodT0xO3U8ZDsrK3UpdHgoKGM9c1t1XSkuZWRnZSwobD1zW3UtMV0pLnNpdGUsYy5zaXRlLHIpOyhjPXNbZC0xXSkuZWRnZT1nMCgobD1zWzBdKS5zaXRlLGMuc2l0ZSxudWxsLHIpLGxtKGwpLGxtKGMpfWZ1bmN0aW9uIGIkKG4pe2Zvcih2YXIgaSxyLG8sYSx0PW5bMF0sZT1uWzFdLHM9ZG0uXztzOylpZigobz12JChzLGUpLXQpPkppKXM9cy5MO2Vsc2V7aWYoISgoYT10LVZBZShzLGUpKT5KaSkpe28+LUppPyhpPXMuUCxyPXMpOmE+LUppPyhpPXMscj1zLk4pOmk9cj1zO2JyZWFrfWlmKCFzLlIpe2k9czticmVha31zPXMuUn0hZnVuY3Rpb24obil7eGFbbi5pbmRleF09e3NpdGU6bixoYWxmZWRnZXM6W119fShuKTt2YXIgbD1mJChuKTtpZihkbS5pbnNlcnQoaSxsKSxpfHxyKXtpZihpPT09cilyZXR1cm4gY20oaSkscj1mJChpLnNpdGUpLGRtLmluc2VydChsLHIpLGwuZWRnZT1yLmVkZ2U9ZzAoaS5zaXRlLGwuc2l0ZSksbG0oaSksdm9pZCBsbShyKTtpZighcilyZXR1cm4gdm9pZChsLmVkZ2U9ZzAoaS5zaXRlLGwuc2l0ZSkpO2NtKGkpLGNtKHIpO3ZhciBjPWkuc2l0ZSxkPWNbMF0sdT1jWzFdLHA9blswXS1kLGg9blsxXS11LG09ci5zaXRlLF89bVswXS1kLE09bVsxXS11LHk9MioocCpNLWgqXykseD1wKnAraCpoLFI9XypfK00qTSxJPVsoTSp4LWgqUikveStkLChwKlItXyp4KS95K3VdO3R4KHIuZWRnZSxjLG0sSSksbC5lZGdlPWcwKGMsbixudWxsLEkpLHIuZWRnZT1nMChuLG0sbnVsbCxJKSxsbShpKSxsbShyKX19ZnVuY3Rpb24gdiQobix0KXt2YXIgZT1uLnNpdGUsaT1lWzBdLHI9ZVsxXSxvPXItdDtpZighbylyZXR1cm4gaTt2YXIgYT1uLlA7aWYoIWEpcmV0dXJuLTEvMDt2YXIgcz0oZT1hLnNpdGUpWzBdLGw9ZVsxXSxjPWwtdDtpZighYylyZXR1cm4gczt2YXIgZD1zLWksdT0xL28tMS9jLHA9ZC9jO3JldHVybiB1PygtcCtNYXRoLnNxcnQocCpwLTIqdSooZCpkLygtMipjKS1sK2MvMityLW8vMikpKS91K2k6KGkrcykvMn1mdW5jdGlvbiBWQWUobix0KXt2YXIgZT1uLk47aWYoZSlyZXR1cm4gdiQoZSx0KTt2YXIgaT1uLnNpdGU7cmV0dXJuIGlbMV09PT10P2lbMF06MS8wfXZhciBkbSx4YSxiMCxrbyxKaT0xZS02LG0kPTFlLTEyO2Z1bmN0aW9uIEhBZShuLHQsZSl7cmV0dXJuKG5bMF0tZVswXSkqKHRbMV0tblsxXSktKG5bMF0tdFswXSkqKGVbMV0tblsxXSl9ZnVuY3Rpb24gekFlKG4sdCl7cmV0dXJuIHRbMV0tblsxXXx8dFswXS1uWzBdfWZ1bmN0aW9uIExEKG4sdCl7dmFyIGkscixvLGU9bi5zb3J0KHpBZSkucG9wKCk7Zm9yKGtvPVtdLHhhPW5ldyBBcnJheShuLmxlbmd0aCksZG09bmV3IHFMLGIwPW5ldyBxTDs7KWlmKG89TkQsZSYmKCFvfHxlWzFdPG8ueXx8ZVsxXT09PW8ueSYmZVswXTxvLngpKShlWzBdIT09aXx8ZVsxXSE9PXIpJiYoYiQoZSksaT1lWzBdLHI9ZVsxXSksZT1uLnBvcCgpO2Vsc2V7aWYoIW8pYnJlYWs7XyQoby5hcmMpfWlmKGZ1bmN0aW9uKCl7Zm9yKHZhciBlLGkscixvLG49MCx0PXhhLmxlbmd0aDtuPHQ7KytuKWlmKChlPXhhW25dKSYmKG89KGk9ZS5oYWxmZWRnZXMpLmxlbmd0aCkpe3ZhciBhPW5ldyBBcnJheShvKSxzPW5ldyBBcnJheShvKTtmb3Iocj0wO3I8bzsrK3IpYVtyXT1yLHNbcl09RkFlKGUsa29baVtyXV0pO2ZvcihhLnNvcnQoZnVuY3Rpb24obCxjKXtyZXR1cm4gc1tjXS1zW2xdfSkscj0wO3I8bzsrK3Ipc1tyXT1pW2Fbcl1dO2ZvcihyPTA7cjxvOysrcilpW3JdPXNbcl19fSgpLHQpe3ZhciBhPSt0WzBdWzBdLHM9K3RbMF1bMV0sbD0rdFsxXVswXSxjPSt0WzFdWzFdOyhmdW5jdGlvbihuLHQsZSxpKXtmb3IodmFyIG8scj1rby5sZW5ndGg7ci0tOylPQWUobz1rb1tyXSxuLHQsZSxpKSYma0FlKG8sbix0LGUsaSkmJihNYXRoLmFicyhvWzBdWzBdLW9bMV1bMF0pPkppfHxNYXRoLmFicyhvWzBdWzFdLW9bMV1bMV0pPkppKXx8ZGVsZXRlIGtvW3JdfSkoYSxzLGwsYyksZnVuY3Rpb24obix0LGUsaSl7dmFyIG8sYSxzLGwsYyxkLHUscCxoLG0sXyxNLHI9eGEubGVuZ3RoLHk9ITA7Zm9yKG89MDtvPHI7KytvKWlmKGE9eGFbb10pe2ZvcihzPWEuc2l0ZSxsPShjPWEuaGFsZmVkZ2VzKS5sZW5ndGg7bC0tOylrb1tjW2xdXXx8Yy5zcGxpY2UobCwxKTtmb3IobD0wLGQ9Yy5sZW5ndGg7bDxkOylfPShtPU5BZShhLGtvW2NbbF1dKSlbMF0sTT1tWzFdLHA9KHU9WEwoYSxrb1tjWysrbCVkXV0pKVswXSxoPXVbMV0sKE1hdGguYWJzKF8tcCk+Sml8fE1hdGguYWJzKE0taCk+SmkpJiYoYy5zcGxpY2UobCwwLGtvLnB1c2goXzAocyxtLE1hdGguYWJzKF8tbik8SmkmJmktTT5KaT9bbixNYXRoLmFicyhwLW4pPEppP2g6aV06TWF0aC5hYnMoTS1pKTxKaSYmZS1fPkppP1tNYXRoLmFicyhoLWkpPEppP3A6ZSxpXTpNYXRoLmFicyhfLWUpPEppJiZNLXQ+Smk/W2UsTWF0aC5hYnMocC1lKTxKaT9oOnRdOk1hdGguYWJzKE0tdCk8SmkmJl8tbj5KaT9bTWF0aC5hYnMoaC10KTxKaT9wOm4sdF06bnVsbCkpLTEpLCsrZCk7ZCYmKHk9ITEpfWlmKHkpe3ZhciB4LFIsSSxCPTEvMDtmb3Iobz0wLHk9bnVsbDtvPHI7KytvKShhPXhhW29dKSYmKEk9KHg9KHM9YS5zaXRlKVswXS1uKSp4KyhSPXNbMV0tdCkqUik8QiYmKEI9SSx5PWEpO2lmKHkpe3ZhciBlZT1bbix0XSxRPVtuLGldLHdlPVtlLGldLFFlPVtlLHRdO3kuaGFsZmVkZ2VzLnB1c2goa28ucHVzaChfMChzPXkuc2l0ZSxlZSxRKSktMSxrby5wdXNoKF8wKHMsUSx3ZSkpLTEsa28ucHVzaChfMChzLHdlLFFlKSktMSxrby5wdXNoKF8wKHMsUWUsZWUpKS0xKX19Zm9yKG89MDtvPHI7KytvKShhPXhhW29dKSYmKGEuaGFsZmVkZ2VzLmxlbmd0aHx8ZGVsZXRlIHhhW29dKX0oYSxzLGwsYyl9dGhpcy5lZGdlcz1rbyx0aGlzLmNlbGxzPXhhLGRtPWIwPWtvPXhhPW51bGx9ZnVuY3Rpb24gdW0obix0LGUpe3RoaXMuaz1uLHRoaXMueD10LHRoaXMueT1lfUxELnByb3RvdHlwZT17Y29uc3RydWN0b3I6TEQscG9seWdvbnM6ZnVuY3Rpb24oKXt2YXIgbj10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLm1hcChmdW5jdGlvbih0KXt2YXIgZT10LmhhbGZlZGdlcy5tYXAoZnVuY3Rpb24oaSl7cmV0dXJuIFhMKHQsbltpXSl9KTtyZXR1cm4gZS5kYXRhPXQuc2l0ZS5kYXRhLGV9KX0sdHJpYW5nbGVzOmZ1bmN0aW9uKCl7dmFyIG49W10sdD10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLmZvckVhY2goZnVuY3Rpb24oZSxpKXtpZihzPShvPWUuaGFsZmVkZ2VzKS5sZW5ndGgpZm9yKHZhciBvLHMsbCxyPWUuc2l0ZSxhPS0xLGM9dFtvW3MtMV1dLGQ9Yy5sZWZ0PT09cj9jLnJpZ2h0OmMubGVmdDsrK2E8czspbD1kLGQ9KGM9dFtvW2FdXSkubGVmdD09PXI/Yy5yaWdodDpjLmxlZnQsbCYmZCYmaTxsLmluZGV4JiZpPGQuaW5kZXgmJkhBZShyLGwsZCk8MCYmbi5wdXNoKFtyLmRhdGEsbC5kYXRhLGQuZGF0YV0pfSksbn0sbGlua3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGdlcy5maWx0ZXIoZnVuY3Rpb24obil7cmV0dXJuIG4ucmlnaHR9KS5tYXAoZnVuY3Rpb24obil7cmV0dXJue3NvdXJjZTpuLmxlZnQuZGF0YSx0YXJnZXQ6bi5yaWdodC5kYXRhfX0pfSxmaW5kOmZ1bmN0aW9uKG4sdCxlKXtmb3IodmFyIHIscyxpPXRoaXMsbz1pLl9mb3VuZHx8MCxhPWkuY2VsbHMubGVuZ3RoOyEocz1pLmNlbGxzW29dKTspaWYoKytvPj1hKXJldHVybiBudWxsO3ZhciBsPW4tcy5zaXRlWzBdLGM9dC1zLnNpdGVbMV0sZD1sKmwrYypjO2Rve3M9aS5jZWxsc1tyPW9dLG89bnVsbCxzLmhhbGZlZGdlcy5mb3JFYWNoKGZ1bmN0aW9uKHUpe3ZhciBwPWkuZWRnZXNbdV0saD1wLmxlZnQ7aWYoaCE9PXMuc2l0ZSYmaHx8KGg9cC5yaWdodCkpe3ZhciBtPW4taFswXSxfPXQtaFsxXSxNPW0qbStfKl87TTxkJiYoZD1NLG89aC5pbmRleCl9fSl9d2hpbGUobnVsbCE9PW8pO3JldHVybiBpLl9mb3VuZD1yLG51bGw9PWV8fGQ8PWUqZT9zLnNpdGU6bnVsbH19LHVtLnByb3RvdHlwZT17Y29uc3RydWN0b3I6dW0sc2NhbGU6ZnVuY3Rpb24obil7cmV0dXJuIDE9PT1uP3RoaXM6bmV3IHVtKHRoaXMuaypuLHRoaXMueCx0aGlzLnkpfSx0cmFuc2xhdGU6ZnVuY3Rpb24obix0KXtyZXR1cm4gMD09PW4mMD09PXQ/dGhpczpuZXcgdW0odGhpcy5rLHRoaXMueCt0aGlzLmsqbix0aGlzLnkrdGhpcy5rKnQpfSxhcHBseTpmdW5jdGlvbihuKXtyZXR1cm5bblswXSp0aGlzLmsrdGhpcy54LG5bMV0qdGhpcy5rK3RoaXMueV19LGFwcGx5WDpmdW5jdGlvbihuKXtyZXR1cm4gbip0aGlzLmsrdGhpcy54fSxhcHBseVk6ZnVuY3Rpb24obil7cmV0dXJuIG4qdGhpcy5rK3RoaXMueX0saW52ZXJ0OmZ1bmN0aW9uKG4pe3JldHVyblsoblswXS10aGlzLngpL3RoaXMuaywoblsxXS10aGlzLnkpL3RoaXMua119LGludmVydFg6ZnVuY3Rpb24obil7cmV0dXJuKG4tdGhpcy54KS90aGlzLmt9LGludmVydFk6ZnVuY3Rpb24obil7cmV0dXJuKG4tdGhpcy55KS90aGlzLmt9LHJlc2NhbGVYOmZ1bmN0aW9uKG4pe3JldHVybiBuLmNvcHkoKS5kb21haW4obi5yYW5nZSgpLm1hcCh0aGlzLmludmVydFgsdGhpcykubWFwKG4uaW52ZXJ0LG4pKX0scmVzY2FsZVk6ZnVuY3Rpb24obil7cmV0dXJuIG4uY29weSgpLmRvbWFpbihuLnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WSx0aGlzKS5tYXAobi5pbnZlcnQsbikpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJ0cmFuc2xhdGUoIit0aGlzLngrIiwiK3RoaXMueSsiKSBzY2FsZSgiK3RoaXMuaysiKSJ9fSxuZXcgdW0oMSwwLDApO3ZhciBpMz0xZTQscjM9LjAwMSxNJD1ZcigiLjJ+ZSIpLFVBZT1ZcigiLjR+ciIpLHkkPVlyKCIsfiIpO2Z1bmN0aW9uIHgkKG4pe2lmKDA9PT1uKXJldHVybiIwIjtsZXQgdD1NYXRoLmFicyhuKTtyZXR1cm4gdD49aTN8fHQ8cjM/TSQobik6VUFlKG4pfXZhciBkcD17Zm9ybWF0VGljazp4JCxmb3JtYXRTaG9ydDp4JCxmb3JtYXRSZWFkYWJsZShuKXtsZXQgdD1NYXRoLmFicyhuKTtyZXR1cm4gdD49aTN8fHQ8cjM/TSQobik6eSQobil9LGZvcm1hdExvbmc6eSR9LGpBZT1uZXcgSW50bC5OdW1iZXJGb3JtYXQodm9pZCAwLHttYXhpbXVtRnJhY3Rpb25EaWdpdHM6NH0pO2Z1bmN0aW9uIEJEKG4pe3JldHVybiBqQWUuZm9ybWF0KG4pfXZhciB5MD17Zm9ybWF0VGljazpCRCxmb3JtYXRTaG9ydDpCRCxmb3JtYXRSZWFkYWJsZTpCRCxmb3JtYXRMb25nOkJEfSxHQWU9WXIoIjAuM35zIiksV0FlPVlyKCIsLjN+ZiIpO2Z1bmN0aW9uIFZEKG4pe2xldCB0PU1hdGguYWJzKG4pO3JldHVybiB0Pj1pM3x8dDxyMz9HQWUobik6V0FlKG4pfXZhciBvMz17Zm9ybWF0VGljazpWRCxmb3JtYXRTaG9ydDpWRCxmb3JtYXRSZWFkYWJsZTpWRCxmb3JtYXRMb25nOlZEfSwkTD0xZTMsZTM9NjAqJEwsdDM9NjAqZTMsbjM9MjQqdDMsQyQ9MzY1Km4zLHYwPVlyKCIuNH4iKTtmdW5jdGlvbiBIRChuKXtpZigwPT09bilyZXR1cm4iMCI7bGV0IHQ9TWF0aC5zaWduKG4pPjA/IiI6Ii0iLGU9TWF0aC5hYnMobik7cmV0dXJuIHQrPWU8JEw/YCR7djAoZSl9IG1zYDplPGUzP2Ake3YwKGUvJEwpfSBzZWNgOmU8dDM/YCR7djAoZS9lMyl9IG1pbmA6ZTxuMz9gJHt2MChlL3QzKX0gaHJgOmU8QyQ/YCR7djAoZS9uMyl9IGRheWA6YCR7djAoZS9DJCl9IHlyYCx0fXZhciBKTCx4MD17Zm9ybWF0VGljazpIRCxmb3JtYXRTaG9ydDpIRCxmb3JtYXRSZWFkYWJsZTpIRCxmb3JtYXRMb25nOkhEfSxxQWU9c20oKS50aWNrRm9ybWF0KCksdyQ9e2Zvcm1hdFRpY2s6bj0+cUFlKG5ldyBEYXRlKG4pKSxmb3JtYXRTaG9ydDpuPT5uZXcgRGF0ZShuKS50b0xvY2FsZVN0cmluZyhKTCx7eWVhcjoibnVtZXJpYyIsbW9udGg6InNob3J0IixkYXk6Im51bWVyaWMiLGhvdXI6Im51bWVyaWMiLG1pbnV0ZToibnVtZXJpYyIsc2Vjb25kOiJudW1lcmljIn0pLGZvcm1hdFJlYWRhYmxlOm49Pm5ldyBEYXRlKG4pLnRvTG9jYWxlU3RyaW5nKEpMLHt5ZWFyOiJudW1lcmljIixtb250aDoic2hvcnQiLGRheToibnVtZXJpYyIsaG91cjoibnVtZXJpYyIsbWludXRlOiJudW1lcmljIixzZWNvbmQ6Im51bWVyaWMiLHRpbWVab25lTmFtZToic2hvcnQifSksZm9ybWF0TG9uZzpuPT5uZXcgRGF0ZShuKS50b0xvY2FsZVN0cmluZyhKTCx7eWVhcjoibnVtZXJpYyIsbW9udGg6ImxvbmciLGRheToibnVtZXJpYyIsaG91cjoibnVtZXJpYyIsbWludXRlOiJudW1lcmljIixzZWNvbmQ6Im51bWVyaWMiLHRpbWVab25lTmFtZToic2hvcnQiLGZyYWN0aW9uYWxTZWNvbmREaWdpdHM6M30pfTtmdW5jdGlvbiBVbChuKXtzd2l0Y2gobil7Y2FzZSB0ci5MSU5FQVI6cmV0dXJuIG5ldyBueDtjYXNlIHRyLkxPRzEwOnJldHVybiBuZXcgYTM7Y2FzZSB0ci5USU1FOnJldHVybiBuZXcgaXg7ZGVmYXVsdDp0aHJvdyBuZXcgUmFuZ2VFcnJvcihgU2NhbGVUeXBlICR7bn0gbm90IHN1cHBvcnRlZC5gKX19dmFyIG54PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5kZWZhdWx0Rm9ybWF0dGVyPWRwfXRyYW5zZm9ybSh0LGUsaSl7bGV0W3Isb109dCxhPW8tcixbcyxsXT1lO3JldHVybiAwPT09YT9zOihsLXMpL2EqKGktcikrc31mb3J3YXJkKHQsZSxpKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0odCxlLGkpfXJldmVyc2UodCxlLGkpe3JldHVybiB0aGlzLnRyYW5zZm9ybShlLHQsaSl9bmljZURvbWFpbih0KXtsZXRbZSxpXT10O2lmKGk8ZSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgaW5wdXQ6IG1pbiBpcyBsYXJnZXIgdGhhbiBtYXgiKTtpZihpPT09ZSlyZXR1cm4gMD09PWU/Wy0xLDFdOmU8MD9bMiplLDBdOlswLDIqZV07bGV0IHI9emwoKSxvPS4wNSooaS1lK051bWJlci5FUFNJTE9OKSxbYSxzXT1yLmRvbWFpbihbZS1vLGkrb10pLm5pY2UoKS5kb21haW4oKTtyZXR1cm5bYSxzXX10aWNrcyh0LGUpe3JldHVybiB6bCgpLmRvbWFpbih0KS50aWNrcyhlKX1pc1NhZmVOdW1iZXIodCl7cmV0dXJuIE51bWJlci5pc0Zpbml0ZSh0KX19LGEzPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5kZWZhdWx0Rm9ybWF0dGVyPWRwfXRyYW5zZm9ybSh0KXtyZXR1cm4gTWF0aC5sb2cxMCh0PjA/dDpOdW1iZXIuTUlOX1ZBTFVFKX11bnRyYW5zZm9ybSh0KXtyZXR1cm4gTWF0aC5leHAodC9NYXRoLkxPRzEwRSl9Zm9yd2FyZCh0LGUsaSl7aWYoaTw9MClyZXR1cm4gZVswXTtsZXRbcixvXT10LFthLHNdPWUsbD10aGlzLnRyYW5zZm9ybShyKSxkPXRoaXMudHJhbnNmb3JtKG8pLWwsdT1zLWE7cmV0dXJuIGk9dGhpcy50cmFuc2Zvcm0oaSksdS8oZCtOdW1iZXIuRVBTSUxPTikqKGktbCkrYX1yZXZlcnNlKHQsZSxpKXtsZXRbcixvXT10LFthLHNdPWUsbD10aGlzLnRyYW5zZm9ybShyKSxkPXRoaXMudHJhbnNmb3JtKG8pLWw7cmV0dXJuIHRoaXMudW50cmFuc2Zvcm0oZC8ocy1hK051bWJlci5FUFNJTE9OKSooaS1hKStsKX1uaWNlRG9tYWluKHQpe2xldFtlLGldPXQ7aWYoZT5pKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2xldCByPU1hdGgubWF4KGUsTnVtYmVyLk1JTl9WQUxVRSksbz1NYXRoLm1heChpLE51bWJlci5NSU5fVkFMVUUpO3JldHVybiBpPD0wP1tOdW1iZXIuTUlOX1ZBTFVFLDFdOltNYXRoLm1heChOdW1iZXIuTUlOX1ZBTFVFLC41KnIpLDIqb119dGlja3ModCxlKXtsZXQgaT10WzBdPD0wP051bWJlci5NSU5fVkFMVUU6dFswXSxyPXRbMV08PTA/TnVtYmVyLk1JTl9WQUxVRTp0WzFdLG89R3koKS5kb21haW4oW2kscl0pLnRpY2tzKGUpO3JldHVybiBvLmxlbmd0aD9vOnR9aXNTYWZlTnVtYmVyKHQpe3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCkmJnQ+MH19LGl4PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zY2FsZT1zbSgpLHRoaXMuZGVmYXVsdEZvcm1hdHRlcj13JH1mb3J3YXJkKHQsZSxpKXtyZXR1cm4gdGhpcy5zY2FsZS5kb21haW4odCkucmFuZ2UoZSkoaSl9cmV2ZXJzZSh0LGUsaSl7cmV0dXJuIHRoaXMuc2NhbGUuZG9tYWluKHQpLnJhbmdlKGUpLmludmVydChpKS5nZXRUaW1lKCl9bmljZURvbWFpbih0KXtsZXRbZSxpXT10aGlzLnNjYWxlLmRvbWFpbih0KS5uaWNlKCkuZG9tYWluKCk7cmV0dXJuW2UuZ2V0VGltZSgpLGkuZ2V0VGltZSgpXX10aWNrcyh0LGUpe3JldHVybiB0aGlzLnNjYWxlLmRvbWFpbih0KS50aWNrcyhlKS5tYXAoaT0+aS5nZXRUaW1lKCkpfWlzU2FmZU51bWJlcih0KXtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpfX0sczM9ITE7aWYoc2VsZi5oYXNPd25Qcm9wZXJ0eSgiV2ViR0wyUmVuZGVyaW5nQ29udGV4dCIpJiZzZWxmLmhhc093blByb3BlcnR5KCJkb2N1bWVudCIpKXtsZXQgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtuLmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGNyZWF0aW9uZXJyb3IiLCgpPT57czM9ITF9KTtsZXQgdD1uLmdldENvbnRleHQoIndlYmdsMiIpO3MzPUJvb2xlYW4odCl9dmFyIGpsX2NvbnZlcnRSZWN0VG9FeHRlbnQ9ZnVuY3Rpb24obil7cmV0dXJue3g6W24ueCxuLngrbi53aWR0aF0seTpbbi55LG4ueStuLmhlaWdodF19fSxqbF9pc1dlYkdsMlN1cHBvcnRlZD1mdW5jdGlvbigpe3JldHVybiBzM30samxfaXNXZWJHbDJPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ9ZnVuY3Rpb24oKXtpZighc2VsZi5oYXNPd25Qcm9wZXJ0eSgiT2Zmc2NyZWVuQ2FudmFzIikpcmV0dXJuITE7bGV0IG49bmV3IE9mZnNjcmVlbkNhbnZhcygwLDApLmdldENvbnRleHQoIndlYmdsMiIpO3JldHVybiBCb29sZWFuKG4pfSxqbF9hcmVQb2x5bGluZXNFcXVhbD1mdW5jdGlvbihuLHQpe2lmKG4ubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspaWYobltlXSE9PXRbZV0pcmV0dXJuITE7cmV0dXJuITB9LEMwPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy54U2NhbGU9VWwodHIuTElORUFSKSx0aGlzLnlTY2FsZT1VbCh0ci5MSU5FQVIpLHRoaXMuZG9tQ29udGFpbmVyUmVjdD17eDowLHdpZHRoOjEseTowLGhlaWdodDoxfSx0aGlzLmxhc3RVcGRhdGVkPTAsdGhpcy5jdXJyZW50Vmlld0JveFJlY3Q9e3g6MCx3aWR0aDoxLHk6MCxoZWlnaHQ6MX19Z2V0VXBkYXRlSWRlbnRpZmllcigpe3JldHVybiB0aGlzLmxhc3RVcGRhdGVkfXVwZGF0ZUlkZW50aWZpZXIoKXt0aGlzLmxhc3RVcGRhdGVkKyt9aXNZQXhpc1BvaW50ZWREb3duKCl7cmV0dXJuITB9c2V0WFNjYWxlKHQpe3RoaXMueFNjYWxlPXQsdGhpcy51cGRhdGVJZGVudGlmaWVyKCl9c2V0WVNjYWxlKHQpe3RoaXMueVNjYWxlPXQsdGhpcy51cGRhdGVJZGVudGlmaWVyKCl9Z2V0Q3VycmVudFZpZXdCb3hSZWN0KCl7cmV0dXJuIHRoaXMuY3VycmVudFZpZXdCb3hSZWN0fXNldFZpZXdCb3hSZWN0KHQpe3RoaXMuY3VycmVudFZpZXdCb3hSZWN0PXQsdGhpcy51cGRhdGVJZGVudGlmaWVyKCl9c2V0RG9tQ29udGFpbmVyUmVjdCh0KXt0aGlzLmRvbUNvbnRhaW5lclJlY3Q9dCx0aGlzLnVwZGF0ZUlkZW50aWZpZXIoKX10cmFuc2Zvcm1EYXRhVG9VaUNvb3JkKHQsZSl7bGV0IGk9dCxyPWpsX2NvbnZlcnRSZWN0VG9FeHRlbnQodGhpcy5jdXJyZW50Vmlld0JveFJlY3QpO3JldHVyblt0aGlzLnhTY2FsZS5mb3J3YXJkKHIueCxbaS54LGkueCtpLndpZHRoXSxlWzBdKSx0aGlzLnlTY2FsZS5mb3J3YXJkKHIueSx0aGlzLmlzWUF4aXNQb2ludGVkRG93bigpP1tpLnkraS5oZWlnaHQsaS55XTpbaS55LGkueStpLmhlaWdodF0sZVsxXSldfX07ZnVuY3Rpb24gekQobix0LGUsaSl7bGV0e2NvbG9yOnIsdmlzaWJsZTpvLG9wYWNpdHk6YX09aSxzPW47cmV0dXJuIHN8fG8/KHM9cz8/dCgpLHM9ZShzKSxzLnN0eWxlLmRpc3BsYXk9bz8iIjoibm9uZSIscy5zdHlsZS5zdHJva2U9cixzLnN0eWxlLm9wYWNpdHk9U3RyaW5nKGE/PzEpLHMpOm51bGx9dmFyIHNWPSIxMzciLCRBZT0wLFMkPTEsZVJlPTIsc3RlPTEsdFJlPTIsbXg9Myx5eD0wLGJvPTEsWjA9Mix2cD0wLGd4PTEsRSQ9MixUJD0zLEQkPTQsblJlPTUsVTA9MTAwLGlSZT0xMDEsclJlPTEwMixJJD0xMDMsQSQ9MTA0LG9SZT0yMDAsYVJlPTIwMSxzUmU9MjAyLGxSZT0yMDMsY3RlPTIwNCxkdGU9MjA1LGNSZT0yMDYsZFJlPTIwNyx1UmU9MjA4LHBSZT0yMDksaFJlPTIxMCxtUmU9MCxmUmU9MSxnUmU9MixYMz0zLF9SZT00LGJSZT01LHZSZT02LHlSZT03LEtJPTAseFJlPTEsQ1JlPTIseXA9MCxNUmU9MSx3UmU9MixTUmU9MyxFUmU9NCxUUmU9NSxXeD0zMDEscXg9MzAyLFkzPTMwMyxRMz0zMDQsSkk9MzA2LGxWPTMwNyxaMz0xZTMsRXM9MTAwMSxLMz0xMDAyLHZvPTEwMDMsUiQ9MTAwNCxQJD0xMDA1LGlhPTEwMDYsRFJlPTEwMDcsJEk9MTAwOCx4cD0xMDA5LElSZT0xMDEwLEFSZT0xMDExLHh4PTEwMTIsUlJlPTEwMTMseEk9MTAxNCxnbT0xMDE1LHEwPTEwMTYsUFJlPTEwMTcsa1JlPTEwMTgsWDA9MTAyMCxPUmU9MTAyMSxDYT0xMDIzLEZSZT0xMDI0LE5SZT0xMDI1LGJtPTEwMjYsSzA9MTAyNyxMUmU9MTAyOCxCUmU9MTAyOSxWUmU9MTAzMCxIUmU9MTAzMSx6UmU9MTAzMyxsMz0zMzc3NixjMz0zMzc3NyxkMz0zMzc3OCx1Mz0zMzc3OSxrJD0zNTg0MCxPJD0zNTg0MSxGJD0zNTg0MixOJD0zNTg0MyxVUmU9MzYxOTYsTCQ9Mzc0OTIsQiQ9Mzc0OTYsViQ9Mzc4MDgsSCQ9Mzc4MDkseiQ9Mzc4MTAsVSQ9Mzc4MTEsaiQ9Mzc4MTIsRyQ9Mzc4MTMsVyQ9Mzc4MTQscSQ9Mzc4MTUsWCQ9Mzc4MTYsWSQ9Mzc4MTcsUSQ9Mzc4MTgsWiQ9Mzc4MTksSyQ9Mzc4MjAsSiQ9Mzc4MjEsJCQ9MzY0OTIsajA9MjQwMCxHMD0yNDAxLHdwPTNlMyxEcj0zMDAxLFlSZT0zMjAxLGNfPTAsUVJlPTEsQ3g9MzUwNDQsU0k9MzUwNDgsZWVlPSIzMDAgZXMiLEozPTEwMzUsemQ9Y2xhc3N7YWRkRXZlbnRMaXN0ZW5lcih0LGUpe3ZvaWQgMD09PXRoaXMuX2xpc3RlbmVycyYmKHRoaXMuX2xpc3RlbmVycz17fSk7bGV0IGk9dGhpcy5fbGlzdGVuZXJzO3ZvaWQgMD09PWlbdF0mJihpW3RdPVtdKSwtMT09PWlbdF0uaW5kZXhPZihlKSYmaVt0XS5wdXNoKGUpfWhhc0V2ZW50TGlzdGVuZXIodCxlKXtpZih2b2lkIDA9PT10aGlzLl9saXN0ZW5lcnMpcmV0dXJuITE7bGV0IGk9dGhpcy5fbGlzdGVuZXJzO3JldHVybiB2b2lkIDAhPT1pW3RdJiYtMSE9PWlbdF0uaW5kZXhPZihlKX1yZW1vdmVFdmVudExpc3RlbmVyKHQsZSl7aWYodm9pZCAwPT09dGhpcy5fbGlzdGVuZXJzKXJldHVybjtsZXQgcj10aGlzLl9saXN0ZW5lcnNbdF07aWYodm9pZCAwIT09cil7bGV0IG89ci5pbmRleE9mKGUpOy0xIT09byYmci5zcGxpY2UobywxKX19ZGlzcGF0Y2hFdmVudCh0KXtpZih2b2lkIDA9PT10aGlzLl9saXN0ZW5lcnMpcmV0dXJuO2xldCBpPXRoaXMuX2xpc3RlbmVyc1t0LnR5cGVdO2lmKHZvaWQgMCE9PWkpe3QudGFyZ2V0PXRoaXM7bGV0IHI9aS5zbGljZSgwKTtmb3IobGV0IG89MCxhPXIubGVuZ3RoO288YTtvKyspcltvXS5jYWxsKHRoaXMsdCk7dC50YXJnZXQ9bnVsbH19fSxqbz1bXTtmb3IobGV0IG49MDtuPDI1NjtuKyspam9bbl09KG48MTY/IjAiOiIiKStuLnRvU3RyaW5nKDE2KTt2YXIgbTM9TWF0aC5QSS8xODAsJDM9MTgwL01hdGguUEk7ZnVuY3Rpb24gWWwoKXtsZXQgbj00Mjk0OTY3Mjk1Kk1hdGgucmFuZG9tKCl8MCx0PTQyOTQ5NjcyOTUqTWF0aC5yYW5kb20oKXwwLGU9NDI5NDk2NzI5NSpNYXRoLnJhbmRvbSgpfDAsaT00Mjk0OTY3Mjk1Kk1hdGgucmFuZG9tKCl8MDtyZXR1cm4oam9bMjU1Jm5dK2pvW24+PjgmMjU1XStqb1tuPj4xNiYyNTVdK2pvW24+PjI0JjI1NV0rIi0iK2pvWzI1NSZ0XStqb1t0Pj44JjI1NV0rIi0iK2pvW3Q+PjE2JjE1fDY0XStqb1t0Pj4yNCYyNTVdKyItIitqb1s2MyZlfDEyOF0ram9bZT4+OCYyNTVdKyItIitqb1tlPj4xNiYyNTVdK2pvW2U+PjI0JjI1NV0ram9bMjU1JmldK2pvW2k+PjgmMjU1XStqb1tpPj4xNiYyNTVdK2pvW2k+PjI0JjI1NV0pLnRvVXBwZXJDYXNlKCl9ZnVuY3Rpb24gZXMobix0LGUpe3JldHVybiBNYXRoLm1heCh0LE1hdGgubWluKGUsbikpfWZ1bmN0aW9uIGYzKG4sdCxlKXtyZXR1cm4oMS1lKSpuK2UqdH1mdW5jdGlvbiB0ZWUobil7cmV0dXJuIDA9PShuJm4tMSkmJjAhPT1ufWZ1bmN0aW9uIEpSZShuKXtyZXR1cm4gTWF0aC5wb3coMixNYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4yKSl9dmFyICRlPWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxlPTApe3RoaXMueD10LHRoaXMueT1lfWdldCB3aWR0aCgpe3JldHVybiB0aGlzLnh9c2V0IHdpZHRoKHQpe3RoaXMueD10fWdldCBoZWlnaHQoKXtyZXR1cm4gdGhpcy55fXNldCBoZWlnaHQodCl7dGhpcy55PXR9c2V0KHQsZSl7cmV0dXJuIHRoaXMueD10LHRoaXMueT1lLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9dCx0aGlzfXNldFgodCl7cmV0dXJuIHRoaXMueD10LHRoaXN9c2V0WSh0KXtyZXR1cm4gdGhpcy55PXQsdGhpc31zZXRDb21wb25lbnQodCxlKXtzd2l0Y2godCl7Y2FzZSAwOnRoaXMueD1lO2JyZWFrO2Nhc2UgMTp0aGlzLnk9ZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfXJldHVybiB0aGlzfWdldENvbXBvbmVudCh0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLng7Y2FzZSAxOnJldHVybiB0aGlzLnk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX19Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSl9Y29weSh0KXtyZXR1cm4gdGhpcy54PXQueCx0aGlzLnk9dC55LHRoaXN9YWRkKHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuYWRkVmVjdG9ycyh0LGUpKToodGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpcyl9YWRkU2NhbGFyKHQpe3JldHVybiB0aGlzLngrPXQsdGhpcy55Kz10LHRoaXN9YWRkVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54K2UueCx0aGlzLnk9dC55K2UueSx0aGlzfWFkZFNjYWxlZFZlY3Rvcih0LGUpe3JldHVybiB0aGlzLngrPXQueCplLHRoaXMueSs9dC55KmUsdGhpc31zdWIodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKHQsZSkpOih0aGlzLngtPXQueCx0aGlzLnktPXQueSx0aGlzKX1zdWJTY2FsYXIodCl7cmV0dXJuIHRoaXMueC09dCx0aGlzLnktPXQsdGhpc31zdWJWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngtZS54LHRoaXMueT10LnktZS55LHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpc31kaXZpZGUodCl7cmV0dXJuIHRoaXMueC89dC54LHRoaXMueS89dC55LHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9YXBwbHlNYXRyaXgzKHQpe2xldCBlPXRoaXMueCxpPXRoaXMueSxyPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1yWzBdKmUrclszXSppK3JbNl0sdGhpcy55PXJbMV0qZStyWzRdKmkrcls3XSx0aGlzfW1pbih0KXtyZXR1cm4gdGhpcy54PU1hdGgubWluKHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1pbih0aGlzLnksdC55KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzfWNsYW1wKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LngsTWF0aC5taW4oZS54LHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LnksTWF0aC5taW4oZS55LHRoaXMueSkpLHRoaXN9Y2xhbXBTY2FsYXIodCxlKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueSkpLHRoaXN9Y2xhbXBMZW5ndGgodCxlKXtsZXQgaT10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihpfHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKGUsaSkpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpc31jZWlsKCl7cmV0dXJuIHRoaXMueD1NYXRoLmNlaWwodGhpcy54KSx0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpc31yb3VuZFRvWmVybygpe3JldHVybiB0aGlzLng9dGhpcy54PDA/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT10aGlzLnk8MD9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSksdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy54PS10aGlzLngsdGhpcy55PS10aGlzLnksdGhpc31kb3QodCl7cmV0dXJuIHRoaXMueCp0LngrdGhpcy55KnQueX1jcm9zcyh0KXtyZXR1cm4gdGhpcy54KnQueS10aGlzLnkqdC54fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueX1sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSl9bWFuaGF0dGFuTGVuZ3RoKCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueCkrTWF0aC5hYnModGhpcy55KX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9YW5nbGUoKXtyZXR1cm4gTWF0aC5hdGFuMigtdGhpcy55LC10aGlzLngpK01hdGguUEl9ZGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlVG9TcXVhcmVkKHQpe2xldCBlPXRoaXMueC10LngsaT10aGlzLnktdC55O3JldHVybiBlKmUraSppfW1hbmhhdHRhbkRpc3RhbmNlVG8odCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueC10LngpK01hdGguYWJzKHRoaXMueS10LnkpfXNldExlbmd0aCh0KXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KX1sZXJwKHQsZSl7cmV0dXJuIHRoaXMueCs9KHQueC10aGlzLngpKmUsdGhpcy55Kz0odC55LXRoaXMueSkqZSx0aGlzfWxlcnBWZWN0b3JzKHQsZSxpKXtyZXR1cm4gdGhpcy54PXQueCsoZS54LXQueCkqaSx0aGlzLnk9dC55KyhlLnktdC55KSppLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lng9PT10aGlzLngmJnQueT09PXRoaXMueX1mcm9tQXJyYXkodCxlPTApe3JldHVybiB0aGlzLng9dFtlXSx0aGlzLnk9dFtlKzFdLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy54LHRbZSsxXT10aGlzLnksdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSxpKXtyZXR1cm4gdm9pZCAwIT09aSYmY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy54PXQuZ2V0WChlKSx0aGlzLnk9dC5nZXRZKGUpLHRoaXN9cm90YXRlQXJvdW5kKHQsZSl7bGV0IGk9TWF0aC5jb3MoZSkscj1NYXRoLnNpbihlKSxvPXRoaXMueC10LngsYT10aGlzLnktdC55O3JldHVybiB0aGlzLng9byppLWEqcit0LngsdGhpcy55PW8qcithKmkrdC55LHRoaXN9cmFuZG9tKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJhbmRvbSgpLHRoaXMueT1NYXRoLnJhbmRvbSgpLHRoaXN9KltTeW1ib2wuaXRlcmF0b3JdKCl7eWllbGQgdGhpcy54LHlpZWxkIHRoaXMueX19OyRlLnByb3RvdHlwZS5pc1ZlY3RvcjI9ITA7dmFyIHlvPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5lbGVtZW50cz1bMSwwLDAsMCwxLDAsMCwwLDFdLGFyZ3VtZW50cy5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogdGhlIGNvbnN0cnVjdG9yIG5vIGxvbmdlciByZWFkcyBhcmd1bWVudHMuIHVzZSAuc2V0KCkgaW5zdGVhZC4iKX1zZXQodCxlLGkscixvLGEscyxsLGMpe2xldCBkPXRoaXMuZWxlbWVudHM7cmV0dXJuIGRbMF09dCxkWzFdPXIsZFsyXT1zLGRbM109ZSxkWzRdPW8sZFs1XT1sLGRbNl09aSxkWzddPWEsZFs4XT1jLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwxLDAsMCwwLDEpLHRoaXN9Y29weSh0KXtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC5lbGVtZW50cztyZXR1cm4gZVswXT1pWzBdLGVbMV09aVsxXSxlWzJdPWlbMl0sZVszXT1pWzNdLGVbNF09aVs0XSxlWzVdPWlbNV0sZVs2XT1pWzZdLGVbN109aVs3XSxlWzhdPWlbOF0sdGhpc31leHRyYWN0QmFzaXModCxlLGkpe3JldHVybiB0LnNldEZyb21NYXRyaXgzQ29sdW1uKHRoaXMsMCksZS5zZXRGcm9tTWF0cml4M0NvbHVtbih0aGlzLDEpLGkuc2V0RnJvbU1hdHJpeDNDb2x1bW4odGhpcywyKSx0aGlzfXNldEZyb21NYXRyaXg0KHQpe2xldCBlPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMuc2V0KGVbMF0sZVs0XSxlWzhdLGVbMV0sZVs1XSxlWzldLGVbMl0sZVs2XSxlWzEwXSksdGhpc31tdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKHRoaXMsdCl9cHJlbXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0LHRoaXMpfW11bHRpcGx5TWF0cmljZXModCxlKXtsZXQgaT10LmVsZW1lbnRzLHI9ZS5lbGVtZW50cyxvPXRoaXMuZWxlbWVudHMsYT1pWzBdLHM9aVszXSxsPWlbNl0sYz1pWzFdLGQ9aVs0XSx1PWlbN10scD1pWzJdLGg9aVs1XSxtPWlbOF0sXz1yWzBdLE09clszXSx5PXJbNl0seD1yWzFdLFI9cls0XSxJPXJbN10sQj1yWzJdLGVlPXJbNV0sUT1yWzhdO3JldHVybiBvWzBdPWEqXytzKngrbCpCLG9bM109YSpNK3MqUitsKmVlLG9bNl09YSp5K3MqSStsKlEsb1sxXT1jKl8rZCp4K3UqQixvWzRdPWMqTStkKlIrdSplZSxvWzddPWMqeStkKkkrdSpRLG9bMl09cCpfK2gqeCttKkIsb1s1XT1wKk0raCpSK20qZWUsb1s4XT1wKnkraCpJK20qUSx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe2xldCBlPXRoaXMuZWxlbWVudHM7cmV0dXJuIGVbMF0qPXQsZVszXSo9dCxlWzZdKj10LGVbMV0qPXQsZVs0XSo9dCxlWzddKj10LGVbMl0qPXQsZVs1XSo9dCxlWzhdKj10LHRoaXN9ZGV0ZXJtaW5hbnQoKXtsZXQgdD10aGlzLmVsZW1lbnRzLGU9dFswXSxpPXRbMV0scj10WzJdLG89dFszXSxhPXRbNF0scz10WzVdLGw9dFs2XSxjPXRbN10sZD10WzhdO3JldHVybiBlKmEqZC1lKnMqYy1pKm8qZCtpKnMqbCtyKm8qYy1yKmEqbH1pbnZlcnQoKXtsZXQgdD10aGlzLmVsZW1lbnRzLGU9dFswXSxpPXRbMV0scj10WzJdLG89dFszXSxhPXRbNF0scz10WzVdLGw9dFs2XSxjPXRbN10sZD10WzhdLHU9ZCphLXMqYyxwPXMqbC1kKm8saD1jKm8tYSpsLG09ZSp1K2kqcCtyKmg7aWYoMD09PW0pcmV0dXJuIHRoaXMuc2V0KDAsMCwwLDAsMCwwLDAsMCwwKTtsZXQgXz0xL207cmV0dXJuIHRbMF09dSpfLHRbMV09KHIqYy1kKmkpKl8sdFsyXT0ocyppLXIqYSkqXyx0WzNdPXAqXyx0WzRdPShkKmUtcipsKSpfLHRbNV09KHIqby1zKmUpKl8sdFs2XT1oKl8sdFs3XT0oaSpsLWMqZSkqXyx0WzhdPShhKmUtaSpvKSpfLHRoaXN9dHJhbnNwb3NlKCl7bGV0IHQsZT10aGlzLmVsZW1lbnRzO3JldHVybiB0PWVbMV0sZVsxXT1lWzNdLGVbM109dCx0PWVbMl0sZVsyXT1lWzZdLGVbNl09dCx0PWVbNV0sZVs1XT1lWzddLGVbN109dCx0aGlzfWdldE5vcm1hbE1hdHJpeCh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tTWF0cml4NCh0KS5pbnZlcnQoKS50cmFuc3Bvc2UoKX10cmFuc3Bvc2VJbnRvQXJyYXkodCl7bGV0IGU9dGhpcy5lbGVtZW50cztyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVszXSx0WzJdPWVbNl0sdFszXT1lWzFdLHRbNF09ZVs0XSx0WzVdPWVbN10sdFs2XT1lWzJdLHRbN109ZVs1XSx0WzhdPWVbOF0sdGhpc31zZXRVdlRyYW5zZm9ybSh0LGUsaSxyLG8sYSxzKXtsZXQgbD1NYXRoLmNvcyhvKSxjPU1hdGguc2luKG8pO3JldHVybiB0aGlzLnNldChpKmwsaSpjLC1pKihsKmErYypzKSthK3QsLXIqYyxyKmwsLXIqKC1jKmErbCpzKStzK2UsMCwwLDEpLHRoaXN9c2NhbGUodCxlKXtsZXQgaT10aGlzLmVsZW1lbnRzO3JldHVybiBpWzBdKj10LGlbM10qPXQsaVs2XSo9dCxpWzFdKj1lLGlbNF0qPWUsaVs3XSo9ZSx0aGlzfXJvdGF0ZSh0KXtsZXQgZT1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpLHI9dGhpcy5lbGVtZW50cyxvPXJbMF0sYT1yWzNdLHM9cls2XSxsPXJbMV0sYz1yWzRdLGQ9cls3XTtyZXR1cm4gclswXT1lKm8raSpsLHJbM109ZSphK2kqYyxyWzZdPWUqcytpKmQsclsxXT0taSpvK2UqbCxyWzRdPS1pKmErZSpjLHJbN109LWkqcytlKmQsdGhpc310cmFuc2xhdGUodCxlKXtsZXQgaT10aGlzLmVsZW1lbnRzO3JldHVybiBpWzBdKz10KmlbMl0saVszXSs9dCppWzVdLGlbNl0rPXQqaVs4XSxpWzFdKz1lKmlbMl0saVs0XSs9ZSppWzVdLGlbN10rPWUqaVs4XSx0aGlzfWVxdWFscyh0KXtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC5lbGVtZW50cztmb3IobGV0IHI9MDtyPDk7cisrKWlmKGVbcl0hPT1pW3JdKXJldHVybiExO3JldHVybiEwfWZyb21BcnJheSh0LGU9MCl7Zm9yKGxldCBpPTA7aTw5O2krKyl0aGlzLmVsZW1lbnRzW2ldPXRbaStlXTtyZXR1cm4gdGhpc310b0FycmF5KHQ9W10sZT0wKXtsZXQgaT10aGlzLmVsZW1lbnRzO3JldHVybiB0W2VdPWlbMF0sdFtlKzFdPWlbMV0sdFtlKzJdPWlbMl0sdFtlKzNdPWlbM10sdFtlKzRdPWlbNF0sdFtlKzVdPWlbNV0sdFtlKzZdPWlbNl0sdFtlKzddPWlbN10sdFtlKzhdPWlbOF0sdH1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuZnJvbUFycmF5KHRoaXMuZWxlbWVudHMpfX07ZnVuY3Rpb24gaHRlKG4pe2ZvcihsZXQgdD1uLmxlbmd0aC0xO3Q+PTA7LS10KWlmKG5bdF0+NjU1MzUpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gTXgobil7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsbil9eW8ucHJvdG90eXBlLmlzTWF0cml4Mz0hMDt2YXIgbmVlPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9LEdsPXtoOjAsczowLGw6MH0sVUQ9e2g6MCxzOjAsbDowfTtmdW5jdGlvbiBnMyhuLHQsZSl7cmV0dXJuIGU8MCYmKGUrPTEpLGU+MSYmKGUtPTEpLGU8MS82P24rNioodC1uKSplOmU8LjU/dDplPDIvMz9uKzYqKHQtbikqKDIvMy1lKTpufWZ1bmN0aW9uIFkwKG4pe3JldHVybiBuPC4wNDA0NT8uMDc3Mzk5MzgwOCpuOk1hdGgucG93KC45NDc4NjcyOTg2Km4rLjA1MjEzMjcwMTQsMi40KX1mdW5jdGlvbiBfMyhuKXtyZXR1cm4gbjwuMDAzMTMwOD8xMi45MipuOjEuMDU1Kk1hdGgucG93KG4sLjQxNjY2KS0uMDU1fXZhciBzbj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXtyZXR1cm4gdm9pZCAwPT09aSYmdm9pZCAwPT09cj90aGlzLnNldChlKTp0aGlzLnNldFJHQihlLGkscil9c2V0KGUpe3JldHVybiBlJiZlLmlzQ29sb3I/dGhpcy5jb3B5KGUpOiJudW1iZXIiPT10eXBlb2YgZT90aGlzLnNldEhleChlKToic3RyaW5nIj09dHlwZW9mIGUmJnRoaXMuc2V0U3R5bGUoZSksdGhpc31zZXRTY2FsYXIoZSl7cmV0dXJuIHRoaXMucj1lLHRoaXMuZz1lLHRoaXMuYj1lLHRoaXN9c2V0SGV4KGUpe3JldHVybiBlPU1hdGguZmxvb3IoZSksdGhpcy5yPShlPj4xNiYyNTUpLzI1NSx0aGlzLmc9KGU+PjgmMjU1KS8yNTUsdGhpcy5iPSgyNTUmZSkvMjU1LHRoaXN9c2V0UkdCKGUsaSxyKXtyZXR1cm4gdGhpcy5yPWUsdGhpcy5nPWksdGhpcy5iPXIsdGhpc31zZXRIU0woZSxpLHIpe2lmKGU9ZnVuY3Rpb24obix0KXtyZXR1cm4obiUxKzEpJTF9KGUpLGk9ZXMoaSwwLDEpLHI9ZXMociwwLDEpLDA9PT1pKXRoaXMucj10aGlzLmc9dGhpcy5iPXI7ZWxzZXtsZXQgbz1yPD0uNT9yKigxK2kpOnIraS1yKmksYT0yKnItbzt0aGlzLnI9ZzMoYSxvLGUrMS8zKSx0aGlzLmc9ZzMoYSxvLGUpLHRoaXMuYj1nMyhhLG8sZS0xLzMpfXJldHVybiB0aGlzfXNldFN0eWxlKGUpe2Z1bmN0aW9uIGkobyl7dm9pZCAwIT09byYmcGFyc2VGbG9hdChvKTwxJiZjb25zb2xlLndhcm4oIlRIUkVFLkNvbG9yOiBBbHBoYSBjb21wb25lbnQgb2YgIitlKyIgd2lsbCBiZSBpZ25vcmVkLiIpfWxldCByO2lmKHI9L14oKD86cmdifGhzbClhPylcKChbXlwpXSopXCkvLmV4ZWMoZSkpe2xldCBvLHM9clsyXTtzd2l0Y2goclsxXSl7Y2FzZSJyZ2IiOmNhc2UicmdiYSI6aWYobz0vXlxzKihcZCspXHMqLFxzKihcZCspXHMqLFxzKihcZCspXHMqKD86LFxzKihcZCpcLj9cZCspXHMqKT8kLy5leGVjKHMpKXJldHVybiB0aGlzLnI9TWF0aC5taW4oMjU1LHBhcnNlSW50KG9bMV0sMTApKS8yNTUsdGhpcy5nPU1hdGgubWluKDI1NSxwYXJzZUludChvWzJdLDEwKSkvMjU1LHRoaXMuYj1NYXRoLm1pbigyNTUscGFyc2VJbnQob1szXSwxMCkpLzI1NSxpKG9bNF0pLHRoaXM7aWYobz0vXlxzKihcZCspXCVccyosXHMqKFxkKylcJVxzKixccyooXGQrKVwlXHMqKD86LFxzKihcZCpcLj9cZCspXHMqKT8kLy5leGVjKHMpKXJldHVybiB0aGlzLnI9TWF0aC5taW4oMTAwLHBhcnNlSW50KG9bMV0sMTApKS8xMDAsdGhpcy5nPU1hdGgubWluKDEwMCxwYXJzZUludChvWzJdLDEwKSkvMTAwLHRoaXMuYj1NYXRoLm1pbigxMDAscGFyc2VJbnQob1szXSwxMCkpLzEwMCxpKG9bNF0pLHRoaXM7YnJlYWs7Y2FzZSJoc2wiOmNhc2UiaHNsYSI6aWYobz0vXlxzKihcZCpcLj9cZCspXHMqLFxzKihcZCspXCVccyosXHMqKFxkKylcJVxzKig/OixccyooXGQqXC4/XGQrKVxzKik/JC8uZXhlYyhzKSl7bGV0IGw9cGFyc2VGbG9hdChvWzFdKS8zNjAsYz1wYXJzZUludChvWzJdLDEwKS8xMDAsZD1wYXJzZUludChvWzNdLDEwKS8xMDA7cmV0dXJuIGkob1s0XSksdGhpcy5zZXRIU0wobCxjLGQpfX19ZWxzZSBpZihyPS9eXCMoW0EtRmEtZlxkXSspJC8uZXhlYyhlKSl7bGV0IG89clsxXSxhPW8ubGVuZ3RoO2lmKDM9PT1hKXJldHVybiB0aGlzLnI9cGFyc2VJbnQoby5jaGFyQXQoMCkrby5jaGFyQXQoMCksMTYpLzI1NSx0aGlzLmc9cGFyc2VJbnQoby5jaGFyQXQoMSkrby5jaGFyQXQoMSksMTYpLzI1NSx0aGlzLmI9cGFyc2VJbnQoby5jaGFyQXQoMikrby5jaGFyQXQoMiksMTYpLzI1NSx0aGlzO2lmKDY9PT1hKXJldHVybiB0aGlzLnI9cGFyc2VJbnQoby5jaGFyQXQoMCkrby5jaGFyQXQoMSksMTYpLzI1NSx0aGlzLmc9cGFyc2VJbnQoby5jaGFyQXQoMikrby5jaGFyQXQoMyksMTYpLzI1NSx0aGlzLmI9cGFyc2VJbnQoby5jaGFyQXQoNCkrby5jaGFyQXQoNSksMTYpLzI1NSx0aGlzfXJldHVybiBlJiZlLmxlbmd0aD4wP3RoaXMuc2V0Q29sb3JOYW1lKGUpOnRoaXN9c2V0Q29sb3JOYW1lKGUpe2xldCBpPW5lZVtlLnRvTG93ZXJDYXNlKCldO3JldHVybiB2b2lkIDAhPT1pP3RoaXMuc2V0SGV4KGkpOmNvbnNvbGUud2FybigiVEhSRUUuQ29sb3I6IFVua25vd24gY29sb3IgIitlKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMucix0aGlzLmcsdGhpcy5iKX1jb3B5KGUpe3JldHVybiB0aGlzLnI9ZS5yLHRoaXMuZz1lLmcsdGhpcy5iPWUuYix0aGlzfWNvcHlTUkdCVG9MaW5lYXIoZSl7cmV0dXJuIHRoaXMucj1ZMChlLnIpLHRoaXMuZz1ZMChlLmcpLHRoaXMuYj1ZMChlLmIpLHRoaXN9Y29weUxpbmVhclRvU1JHQihlKXtyZXR1cm4gdGhpcy5yPV8zKGUuciksdGhpcy5nPV8zKGUuZyksdGhpcy5iPV8zKGUuYiksdGhpc31jb252ZXJ0U1JHQlRvTGluZWFyKCl7cmV0dXJuIHRoaXMuY29weVNSR0JUb0xpbmVhcih0aGlzKSx0aGlzfWNvbnZlcnRMaW5lYXJUb1NSR0IoKXtyZXR1cm4gdGhpcy5jb3B5TGluZWFyVG9TUkdCKHRoaXMpLHRoaXN9Z2V0SGV4KCl7cmV0dXJuIDI1NSp0aGlzLnI8PDE2XjI1NSp0aGlzLmc8PDheMjU1KnRoaXMuYjw8MH1nZXRIZXhTdHJpbmcoKXtyZXR1cm4oIjAwMDAwMCIrdGhpcy5nZXRIZXgoKS50b1N0cmluZygxNikpLnNsaWNlKC02KX1nZXRIU0woZSl7bGV0IGwsYyxpPXRoaXMucixyPXRoaXMuZyxvPXRoaXMuYixhPU1hdGgubWF4KGkscixvKSxzPU1hdGgubWluKGkscixvKSxkPShzK2EpLzI7aWYocz09PWEpbD0wLGM9MDtlbHNle2xldCB1PWEtcztzd2l0Y2goYz1kPD0uNT91LyhhK3MpOnUvKDItYS1zKSxhKXtjYXNlIGk6bD0oci1vKS91KyhyPG8/NjowKTticmVhaztjYXNlIHI6bD0oby1pKS91KzI7YnJlYWs7Y2FzZSBvOmw9KGktcikvdSs0fWwvPTZ9cmV0dXJuIGUuaD1sLGUucz1jLGUubD1kLGV9Z2V0U3R5bGUoKXtyZXR1cm4icmdiKCIrKDI1NSp0aGlzLnJ8MCkrIiwiKygyNTUqdGhpcy5nfDApKyIsIisoMjU1KnRoaXMuYnwwKSsiKSJ9b2Zmc2V0SFNMKGUsaSxyKXtyZXR1cm4gdGhpcy5nZXRIU0woR2wpLEdsLmgrPWUsR2wucys9aSxHbC5sKz1yLHRoaXMuc2V0SFNMKEdsLmgsR2wucyxHbC5sKSx0aGlzfWFkZChlKXtyZXR1cm4gdGhpcy5yKz1lLnIsdGhpcy5nKz1lLmcsdGhpcy5iKz1lLmIsdGhpc31hZGRDb2xvcnMoZSxpKXtyZXR1cm4gdGhpcy5yPWUucitpLnIsdGhpcy5nPWUuZytpLmcsdGhpcy5iPWUuYitpLmIsdGhpc31hZGRTY2FsYXIoZSl7cmV0dXJuIHRoaXMucis9ZSx0aGlzLmcrPWUsdGhpcy5iKz1lLHRoaXN9c3ViKGUpe3JldHVybiB0aGlzLnI9TWF0aC5tYXgoMCx0aGlzLnItZS5yKSx0aGlzLmc9TWF0aC5tYXgoMCx0aGlzLmctZS5nKSx0aGlzLmI9TWF0aC5tYXgoMCx0aGlzLmItZS5iKSx0aGlzfW11bHRpcGx5KGUpe3JldHVybiB0aGlzLnIqPWUucix0aGlzLmcqPWUuZyx0aGlzLmIqPWUuYix0aGlzfW11bHRpcGx5U2NhbGFyKGUpe3JldHVybiB0aGlzLnIqPWUsdGhpcy5nKj1lLHRoaXMuYio9ZSx0aGlzfWxlcnAoZSxpKXtyZXR1cm4gdGhpcy5yKz0oZS5yLXRoaXMucikqaSx0aGlzLmcrPShlLmctdGhpcy5nKSppLHRoaXMuYis9KGUuYi10aGlzLmIpKmksdGhpc31sZXJwQ29sb3JzKGUsaSxyKXtyZXR1cm4gdGhpcy5yPWUucisoaS5yLWUucikqcix0aGlzLmc9ZS5nKyhpLmctZS5nKSpyLHRoaXMuYj1lLmIrKGkuYi1lLmIpKnIsdGhpc31sZXJwSFNMKGUsaSl7dGhpcy5nZXRIU0woR2wpLGUuZ2V0SFNMKFVEKTtsZXQgcj1mMyhHbC5oLFVELmgsaSksbz1mMyhHbC5zLFVELnMsaSksYT1mMyhHbC5sLFVELmwsaSk7cmV0dXJuIHRoaXMuc2V0SFNMKHIsbyxhKSx0aGlzfWVxdWFscyhlKXtyZXR1cm4gZS5yPT09dGhpcy5yJiZlLmc9PT10aGlzLmcmJmUuYj09PXRoaXMuYn1mcm9tQXJyYXkoZSxpPTApe3JldHVybiB0aGlzLnI9ZVtpXSx0aGlzLmc9ZVtpKzFdLHRoaXMuYj1lW2krMl0sdGhpc310b0FycmF5KGU9W10saT0wKXtyZXR1cm4gZVtpXT10aGlzLnIsZVtpKzFdPXRoaXMuZyxlW2krMl09dGhpcy5iLGV9ZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLGkpe3JldHVybiB0aGlzLnI9ZS5nZXRYKGkpLHRoaXMuZz1lLmdldFkoaSksdGhpcy5iPWUuZ2V0WihpKSwhMD09PWUubm9ybWFsaXplZCYmKHRoaXMuci89MjU1LHRoaXMuZy89MjU1LHRoaXMuYi89MjU1KSx0aGlzfXRvSlNPTigpe3JldHVybiB0aGlzLmdldEhleCgpfX1yZXR1cm4gbi5OQU1FUz1uZWUsbn0pKCk7c24ucHJvdG90eXBlLmlzQ29sb3I9ITAsc24ucHJvdG90eXBlLnI9MSxzbi5wcm90b3R5cGUuZz0xLHNuLnByb3RvdHlwZS5iPTE7dmFyIE0wLFVkPWNsYXNze3N0YXRpYyBnZXREYXRhVVJMKHQpe2lmKC9eZGF0YTovaS50ZXN0KHQuc3JjKXx8dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50PiJ1IilyZXR1cm4gdC5zcmM7bGV0IGU7aWYodCBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50KWU9dDtlbHNle3ZvaWQgMD09PU0wJiYoTTA9TXgoImNhbnZhcyIpKSxNMC53aWR0aD10LndpZHRoLE0wLmhlaWdodD10LmhlaWdodDtsZXQgaT1NMC5nZXRDb250ZXh0KCIyZCIpO3QgaW5zdGFuY2VvZiBJbWFnZURhdGE/aS5wdXRJbWFnZURhdGEodCwwLDApOmkuZHJhd0ltYWdlKHQsMCwwLHQud2lkdGgsdC5oZWlnaHQpLGU9TTB9cmV0dXJuIGUud2lkdGg+MjA0OHx8ZS5oZWlnaHQ+MjA0OD8oY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLmdldERhdGFVUkw6IEltYWdlIGNvbnZlcnRlZCB0byBqcGcgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMiLHQpLGUudG9EYXRhVVJMKCJpbWFnZS9qcGVnIiwuNikpOmUudG9EYXRhVVJMKCJpbWFnZS9wbmciKX1zdGF0aWMgc1JHQlRvTGluZWFyKHQpe2lmKHR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50PCJ1IiYmdCBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudDwidSImJnQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8dHlwZW9mIEltYWdlQml0bWFwPCJ1IiYmdCBpbnN0YW5jZW9mIEltYWdlQml0bWFwKXtsZXQgZT1NeCgiY2FudmFzIik7ZS53aWR0aD10LndpZHRoLGUuaGVpZ2h0PXQuaGVpZ2h0O2xldCBpPWUuZ2V0Q29udGV4dCgiMmQiKTtpLmRyYXdJbWFnZSh0LDAsMCx0LndpZHRoLHQuaGVpZ2h0KTtsZXQgcj1pLmdldEltYWdlRGF0YSgwLDAsdC53aWR0aCx0LmhlaWdodCksbz1yLmRhdGE7Zm9yKGxldCBhPTA7YTxvLmxlbmd0aDthKyspb1thXT0yNTUqWTAob1thXS8yNTUpO3JldHVybiBpLnB1dEltYWdlRGF0YShyLDAsMCksZX1pZih0LmRhdGEpe2xldCBlPXQuZGF0YS5zbGljZSgwKTtmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyllW2ldPWUgaW5zdGFuY2VvZiBVaW50OEFycmF5fHxlIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXk/TWF0aC5mbG9vcigyNTUqWTAoZVtpXS8yNTUpKTpZMChlW2ldKTtyZXR1cm57ZGF0YTplLHdpZHRoOnQud2lkdGgsaGVpZ2h0OnQuaGVpZ2h0fX1yZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLnNSR0JUb0xpbmVhcigpOiBVbnN1cHBvcnRlZCBpbWFnZSB0eXBlLiBObyBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGFwcGxpZWQuIiksdH19LCRSZT0wLGxvPWNsYXNzIGV4dGVuZHMgemR7Y29uc3RydWN0b3IodD1sby5ERUZBVUxUX0lNQUdFLGU9bG8uREVGQVVMVF9NQVBQSU5HLGk9RXMscj1FcyxvPWlhLGE9JEkscz1DYSxsPXhwLGM9MSxkPXdwKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOiRSZSsrfSksdGhpcy51dWlkPVlsKCksdGhpcy5uYW1lPSIiLHRoaXMuaW1hZ2U9dCx0aGlzLm1pcG1hcHM9W10sdGhpcy5tYXBwaW5nPWUsdGhpcy53cmFwUz1pLHRoaXMud3JhcFQ9cix0aGlzLm1hZ0ZpbHRlcj1vLHRoaXMubWluRmlsdGVyPWEsdGhpcy5hbmlzb3Ryb3B5PWMsdGhpcy5mb3JtYXQ9cyx0aGlzLmludGVybmFsRm9ybWF0PW51bGwsdGhpcy50eXBlPWwsdGhpcy5vZmZzZXQ9bmV3ICRlKDAsMCksdGhpcy5yZXBlYXQ9bmV3ICRlKDEsMSksdGhpcy5jZW50ZXI9bmV3ICRlKDAsMCksdGhpcy5yb3RhdGlvbj0wLHRoaXMubWF0cml4QXV0b1VwZGF0ZT0hMCx0aGlzLm1hdHJpeD1uZXcgeW8sdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITAsdGhpcy5wcmVtdWx0aXBseUFscGhhPSExLHRoaXMuZmxpcFk9ITAsdGhpcy51bnBhY2tBbGlnbm1lbnQ9NCx0aGlzLmVuY29kaW5nPWQsdGhpcy51c2VyRGF0YT17fSx0aGlzLnZlcnNpb249MCx0aGlzLm9uVXBkYXRlPW51bGwsdGhpcy5pc1JlbmRlclRhcmdldFRleHR1cmU9ITEsdGhpcy5uZWVkc1BNUkVNVXBkYXRlPSExfXVwZGF0ZU1hdHJpeCgpe3RoaXMubWF0cml4LnNldFV2VHJhbnNmb3JtKHRoaXMub2Zmc2V0LngsdGhpcy5vZmZzZXQueSx0aGlzLnJlcGVhdC54LHRoaXMucmVwZWF0LnksdGhpcy5yb3RhdGlvbix0aGlzLmNlbnRlci54LHRoaXMuY2VudGVyLnkpfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMubmFtZT10Lm5hbWUsdGhpcy5pbWFnZT10LmltYWdlLHRoaXMubWlwbWFwcz10Lm1pcG1hcHMuc2xpY2UoMCksdGhpcy5tYXBwaW5nPXQubWFwcGluZyx0aGlzLndyYXBTPXQud3JhcFMsdGhpcy53cmFwVD10LndyYXBULHRoaXMubWFnRmlsdGVyPXQubWFnRmlsdGVyLHRoaXMubWluRmlsdGVyPXQubWluRmlsdGVyLHRoaXMuYW5pc290cm9weT10LmFuaXNvdHJvcHksdGhpcy5mb3JtYXQ9dC5mb3JtYXQsdGhpcy5pbnRlcm5hbEZvcm1hdD10LmludGVybmFsRm9ybWF0LHRoaXMudHlwZT10LnR5cGUsdGhpcy5vZmZzZXQuY29weSh0Lm9mZnNldCksdGhpcy5yZXBlYXQuY29weSh0LnJlcGVhdCksdGhpcy5jZW50ZXIuY29weSh0LmNlbnRlciksdGhpcy5yb3RhdGlvbj10LnJvdGF0aW9uLHRoaXMubWF0cml4QXV0b1VwZGF0ZT10Lm1hdHJpeEF1dG9VcGRhdGUsdGhpcy5tYXRyaXguY29weSh0Lm1hdHJpeCksdGhpcy5nZW5lcmF0ZU1pcG1hcHM9dC5nZW5lcmF0ZU1pcG1hcHMsdGhpcy5wcmVtdWx0aXBseUFscGhhPXQucHJlbXVsdGlwbHlBbHBoYSx0aGlzLmZsaXBZPXQuZmxpcFksdGhpcy51bnBhY2tBbGlnbm1lbnQ9dC51bnBhY2tBbGlnbm1lbnQsdGhpcy5lbmNvZGluZz10LmVuY29kaW5nLHRoaXMudXNlckRhdGE9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0LnVzZXJEYXRhKSksdGhpc310b0pTT04odCl7bGV0IGU9dm9pZCAwPT09dHx8InN0cmluZyI9PXR5cGVvZiB0O2lmKCFlJiZ2b2lkIDAhPT10LnRleHR1cmVzW3RoaXMudXVpZF0pcmV0dXJuIHQudGV4dHVyZXNbdGhpcy51dWlkXTtsZXQgaT17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IlRleHR1cmUiLGdlbmVyYXRvcjoiVGV4dHVyZS50b0pTT04ifSx1dWlkOnRoaXMudXVpZCxuYW1lOnRoaXMubmFtZSxtYXBwaW5nOnRoaXMubWFwcGluZyxyZXBlYXQ6W3RoaXMucmVwZWF0LngsdGhpcy5yZXBlYXQueV0sb2Zmc2V0Olt0aGlzLm9mZnNldC54LHRoaXMub2Zmc2V0LnldLGNlbnRlcjpbdGhpcy5jZW50ZXIueCx0aGlzLmNlbnRlci55XSxyb3RhdGlvbjp0aGlzLnJvdGF0aW9uLHdyYXA6W3RoaXMud3JhcFMsdGhpcy53cmFwVF0sZm9ybWF0OnRoaXMuZm9ybWF0LHR5cGU6dGhpcy50eXBlLGVuY29kaW5nOnRoaXMuZW5jb2RpbmcsbWluRmlsdGVyOnRoaXMubWluRmlsdGVyLG1hZ0ZpbHRlcjp0aGlzLm1hZ0ZpbHRlcixhbmlzb3Ryb3B5OnRoaXMuYW5pc290cm9weSxmbGlwWTp0aGlzLmZsaXBZLHByZW11bHRpcGx5QWxwaGE6dGhpcy5wcmVtdWx0aXBseUFscGhhLHVucGFja0FsaWdubWVudDp0aGlzLnVucGFja0FsaWdubWVudH07aWYodm9pZCAwIT09dGhpcy5pbWFnZSl7bGV0IHI9dGhpcy5pbWFnZTtpZih2b2lkIDA9PT1yLnV1aWQmJihyLnV1aWQ9WWwoKSksIWUmJnZvaWQgMD09PXQuaW1hZ2VzW3IudXVpZF0pe2xldCBvO2lmKEFycmF5LmlzQXJyYXkocikpe289W107Zm9yKGxldCBhPTAscz1yLmxlbmd0aDthPHM7YSsrKW8ucHVzaChiMyhyW2FdLmlzRGF0YVRleHR1cmU/clthXS5pbWFnZTpyW2FdKSl9ZWxzZSBvPWIzKHIpO3QuaW1hZ2VzW3IudXVpZF09e3V1aWQ6ci51dWlkLHVybDpvfX1pLmltYWdlPXIudXVpZH1yZXR1cm4ie30iIT09SlNPTi5zdHJpbmdpZnkodGhpcy51c2VyRGF0YSkmJihpLnVzZXJEYXRhPXRoaXMudXNlckRhdGEpLGV8fCh0LnRleHR1cmVzW3RoaXMudXVpZF09aSksaX1kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfXRyYW5zZm9ybVV2KHQpe2lmKDMwMCE9PXRoaXMubWFwcGluZylyZXR1cm4gdDtpZih0LmFwcGx5TWF0cml4Myh0aGlzLm1hdHJpeCksdC54PDB8fHQueD4xKXN3aXRjaCh0aGlzLndyYXBTKXtjYXNlIFozOnQueD10LngtTWF0aC5mbG9vcih0LngpO2JyZWFrO2Nhc2UgRXM6dC54PXQueDwwPzA6MTticmVhaztjYXNlIEszOnQueD0xPT09TWF0aC5hYnMoTWF0aC5mbG9vcih0LngpJTIpP01hdGguY2VpbCh0LngpLXQueDp0LngtTWF0aC5mbG9vcih0LngpfWlmKHQueTwwfHx0Lnk+MSlzd2l0Y2godGhpcy53cmFwVCl7Y2FzZSBaMzp0Lnk9dC55LU1hdGguZmxvb3IodC55KTticmVhaztjYXNlIEVzOnQueT10Lnk8MD8wOjE7YnJlYWs7Y2FzZSBLMzp0Lnk9MT09PU1hdGguYWJzKE1hdGguZmxvb3IodC55KSUyKT9NYXRoLmNlaWwodC55KS10Lnk6dC55LU1hdGguZmxvb3IodC55KX1yZXR1cm4gdGhpcy5mbGlwWSYmKHQueT0xLXQueSksdH1zZXQgbmVlZHNVcGRhdGUodCl7ITA9PT10JiZ0aGlzLnZlcnNpb24rK319O2Z1bmN0aW9uIGIzKG4pe3JldHVybiB0eXBlb2YgSFRNTEltYWdlRWxlbWVudDwidSImJm4gaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50fHx0eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQ8InUiJiZuIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnR8fHR5cGVvZiBJbWFnZUJpdG1hcDwidSImJm4gaW5zdGFuY2VvZiBJbWFnZUJpdG1hcD9VZC5nZXREYXRhVVJMKG4pOm4uZGF0YT97ZGF0YTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuLmRhdGEpLHdpZHRoOm4ud2lkdGgsaGVpZ2h0Om4uaGVpZ2h0LHR5cGU6bi5kYXRhLmNvbnN0cnVjdG9yLm5hbWV9Oihjb25zb2xlLndhcm4oIlRIUkVFLlRleHR1cmU6IFVuYWJsZSB0byBzZXJpYWxpemUgVGV4dHVyZS4iKSx7fSl9bG8uREVGQVVMVF9JTUFHRT12b2lkIDAsbG8uREVGQVVMVF9NQVBQSU5HPTMwMCxsby5wcm90b3R5cGUuaXNUZXh0dXJlPSEwO3ZhciBRaT1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT0wLGk9MCxyPTEpe3RoaXMueD10LHRoaXMueT1lLHRoaXMuej1pLHRoaXMudz1yfWdldCB3aWR0aCgpe3JldHVybiB0aGlzLnp9c2V0IHdpZHRoKHQpe3RoaXMuej10fWdldCBoZWlnaHQoKXtyZXR1cm4gdGhpcy53fXNldCBoZWlnaHQodCl7dGhpcy53PXR9c2V0KHQsZSxpLHIpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9ZSx0aGlzLno9aSx0aGlzLnc9cix0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXQsdGhpcy56PXQsdGhpcy53PXQsdGhpc31zZXRYKHQpe3JldHVybiB0aGlzLng9dCx0aGlzfXNldFkodCl7cmV0dXJuIHRoaXMueT10LHRoaXN9c2V0Wih0KXtyZXR1cm4gdGhpcy56PXQsdGhpc31zZXRXKHQpe3JldHVybiB0aGlzLnc9dCx0aGlzfXNldENvbXBvbmVudCh0LGUpe3N3aXRjaCh0KXtjYXNlIDA6dGhpcy54PWU7YnJlYWs7Y2FzZSAxOnRoaXMueT1lO2JyZWFrO2Nhc2UgMjp0aGlzLno9ZTticmVhaztjYXNlIDM6dGhpcy53PWU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX1yZXR1cm4gdGhpc31nZXRDb21wb25lbnQodCl7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2Nhc2UgMjpyZXR1cm4gdGhpcy56O2Nhc2UgMzpyZXR1cm4gdGhpcy53O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnksdGhpcy56LHRoaXMudyl9Y29weSh0KXtyZXR1cm4gdGhpcy54PXQueCx0aGlzLnk9dC55LHRoaXMuej10LnosdGhpcy53PXZvaWQgMCE9PXQudz90Lnc6MSx0aGlzfWFkZCh0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnModCxlKSk6KHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXMueis9dC56LHRoaXMudys9dC53LHRoaXMpfWFkZFNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kz10LHRoaXMueSs9dCx0aGlzLnorPXQsdGhpcy53Kz10LHRoaXN9YWRkVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54K2UueCx0aGlzLnk9dC55K2UueSx0aGlzLno9dC56K2Uueix0aGlzLnc9dC53K2Uudyx0aGlzfWFkZFNjYWxlZFZlY3Rvcih0LGUpe3JldHVybiB0aGlzLngrPXQueCplLHRoaXMueSs9dC55KmUsdGhpcy56Kz10LnoqZSx0aGlzLncrPXQudyplLHRoaXN9c3ViKHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuc3ViVmVjdG9ycyh0LGUpKToodGhpcy54LT10LngsdGhpcy55LT10LnksdGhpcy56LT10LnosdGhpcy53LT10LncsdGhpcyl9c3ViU2NhbGFyKHQpe3JldHVybiB0aGlzLngtPXQsdGhpcy55LT10LHRoaXMuei09dCx0aGlzLnctPXQsdGhpc31zdWJWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngtZS54LHRoaXMueT10LnktZS55LHRoaXMuej10LnotZS56LHRoaXMudz10LnctZS53LHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXMueio9dC56LHRoaXMudyo9dC53LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpcy56Kj10LHRoaXMudyo9dCx0aGlzfWFwcGx5TWF0cml4NCh0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnosbz10aGlzLncsYT10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9YVswXSplK2FbNF0qaSthWzhdKnIrYVsxMl0qbyx0aGlzLnk9YVsxXSplK2FbNV0qaSthWzldKnIrYVsxM10qbyx0aGlzLno9YVsyXSplK2FbNl0qaSthWzEwXSpyK2FbMTRdKm8sdGhpcy53PWFbM10qZSthWzddKmkrYVsxMV0qcithWzE1XSpvLHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9c2V0QXhpc0FuZ2xlRnJvbVF1YXRlcm5pb24odCl7dGhpcy53PTIqTWF0aC5hY29zKHQudyk7bGV0IGU9TWF0aC5zcXJ0KDEtdC53KnQudyk7cmV0dXJuIGU8MWUtND8odGhpcy54PTEsdGhpcy55PTAsdGhpcy56PTApOih0aGlzLng9dC54L2UsdGhpcy55PXQueS9lLHRoaXMuej10LnovZSksdGhpc31zZXRBeGlzQW5nbGVGcm9tUm90YXRpb25NYXRyaXgodCl7bGV0IGUsaSxyLG8sbD10LmVsZW1lbnRzLGM9bFswXSxkPWxbNF0sdT1sWzhdLHA9bFsxXSxoPWxbNV0sbT1sWzldLF89bFsyXSxNPWxbNl0seT1sWzEwXTtpZihNYXRoLmFicyhkLXApPC4wMSYmTWF0aC5hYnModS1fKTwuMDEmJk1hdGguYWJzKG0tTSk8LjAxKXtpZihNYXRoLmFicyhkK3ApPC4xJiZNYXRoLmFicyh1K18pPC4xJiZNYXRoLmFicyhtK00pPC4xJiZNYXRoLmFicyhjK2greS0zKTwuMSlyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCksdGhpcztlPU1hdGguUEk7bGV0IFI9KGMrMSkvMixJPShoKzEpLzIsQj0oeSsxKS8yLGVlPShkK3ApLzQsUT0odStfKS80LHdlPShtK00pLzQ7cmV0dXJuIFI+SSYmUj5CP1I8LjAxPyhpPTAscj0uNzA3MTA2NzgxLG89LjcwNzEwNjc4MSk6KGk9TWF0aC5zcXJ0KFIpLHI9ZWUvaSxvPVEvaSk6ST5CP0k8LjAxPyhpPS43MDcxMDY3ODEscj0wLG89LjcwNzEwNjc4MSk6KHI9TWF0aC5zcXJ0KEkpLGk9ZWUvcixvPXdlL3IpOkI8LjAxPyhpPS43MDcxMDY3ODEscj0uNzA3MTA2NzgxLG89MCk6KG89TWF0aC5zcXJ0KEIpLGk9US9vLHI9d2UvbyksdGhpcy5zZXQoaSxyLG8sZSksdGhpc31sZXQgeD1NYXRoLnNxcnQoKE0tbSkqKE0tbSkrKHUtXykqKHUtXykrKHAtZCkqKHAtZCkpO3JldHVybiBNYXRoLmFicyh4KTwuMDAxJiYoeD0xKSx0aGlzLng9KE0tbSkveCx0aGlzLnk9KHUtXykveCx0aGlzLno9KHAtZCkveCx0aGlzLnc9TWF0aC5hY29zKChjK2greS0xKS8yKSx0aGlzfW1pbih0KXtyZXR1cm4gdGhpcy54PU1hdGgubWluKHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1pbih0aGlzLnksdC55KSx0aGlzLno9TWF0aC5taW4odGhpcy56LHQueiksdGhpcy53PU1hdGgubWluKHRoaXMudyx0LncpLHRoaXN9bWF4KHQpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodGhpcy54LHQueCksdGhpcy55PU1hdGgubWF4KHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1heCh0aGlzLnosdC56KSx0aGlzLnc9TWF0aC5tYXgodGhpcy53LHQudyksdGhpc31jbGFtcCh0LGUpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodC54LE1hdGgubWluKGUueCx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodC55LE1hdGgubWluKGUueSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodC56LE1hdGgubWluKGUueix0aGlzLnopKSx0aGlzLnc9TWF0aC5tYXgodC53LE1hdGgubWluKGUudyx0aGlzLncpKSx0aGlzfWNsYW1wU2NhbGFyKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueikpLHRoaXMudz1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy53KSksdGhpc31jbGFtcExlbmd0aCh0LGUpe2xldCBpPXRoaXMubGVuZ3RoKCk7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKGl8fDEpLm11bHRpcGx5U2NhbGFyKE1hdGgubWF4KHQsTWF0aC5taW4oZSxpKSkpfWZsb29yKCl7cmV0dXJuIHRoaXMueD1NYXRoLmZsb29yKHRoaXMueCksdGhpcy55PU1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9TWF0aC5mbG9vcih0aGlzLnopLHRoaXMudz1NYXRoLmZsb29yKHRoaXMudyksdGhpc31jZWlsKCl7cmV0dXJuIHRoaXMueD1NYXRoLmNlaWwodGhpcy54KSx0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSksdGhpcy56PU1hdGguY2VpbCh0aGlzLnopLHRoaXMudz1NYXRoLmNlaWwodGhpcy53KSx0aGlzfXJvdW5kKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJvdW5kKHRoaXMueCksdGhpcy55PU1hdGgucm91bmQodGhpcy55KSx0aGlzLno9TWF0aC5yb3VuZCh0aGlzLnopLHRoaXMudz1NYXRoLnJvdW5kKHRoaXMudyksdGhpc31yb3VuZFRvWmVybygpe3JldHVybiB0aGlzLng9dGhpcy54PDA/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT10aGlzLnk8MD9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSksdGhpcy56PXRoaXMuejwwP01hdGguY2VpbCh0aGlzLnopOk1hdGguZmxvb3IodGhpcy56KSx0aGlzLnc9dGhpcy53PDA/TWF0aC5jZWlsKHRoaXMudyk6TWF0aC5mbG9vcih0aGlzLncpLHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMueD0tdGhpcy54LHRoaXMueT0tdGhpcy55LHRoaXMuej0tdGhpcy56LHRoaXMudz0tdGhpcy53LHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLngqdC54K3RoaXMueSp0LnkrdGhpcy56KnQueit0aGlzLncqdC53fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56K3RoaXMudyp0aGlzLnd9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMueit0aGlzLncqdGhpcy53KX1tYW5oYXR0YW5MZW5ndGgoKXtyZXR1cm4gTWF0aC5hYnModGhpcy54KStNYXRoLmFicyh0aGlzLnkpK01hdGguYWJzKHRoaXMueikrTWF0aC5hYnModGhpcy53KX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9c2V0TGVuZ3RoKHQpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHQpfWxlcnAodCxlKXtyZXR1cm4gdGhpcy54Kz0odC54LXRoaXMueCkqZSx0aGlzLnkrPSh0LnktdGhpcy55KSplLHRoaXMueis9KHQuei10aGlzLnopKmUsdGhpcy53Kz0odC53LXRoaXMudykqZSx0aGlzfWxlcnBWZWN0b3JzKHQsZSxpKXtyZXR1cm4gdGhpcy54PXQueCsoZS54LXQueCkqaSx0aGlzLnk9dC55KyhlLnktdC55KSppLHRoaXMuej10LnorKGUuei10LnopKmksdGhpcy53PXQudysoZS53LXQudykqaSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC54PT09dGhpcy54JiZ0Lnk9PT10aGlzLnkmJnQuej09PXRoaXMueiYmdC53PT09dGhpcy53fWZyb21BcnJheSh0LGU9MCl7cmV0dXJuIHRoaXMueD10W2VdLHRoaXMueT10W2UrMV0sdGhpcy56PXRbZSsyXSx0aGlzLnc9dFtlKzNdLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy54LHRbZSsxXT10aGlzLnksdFtlKzJdPXRoaXMueix0W2UrM109dGhpcy53LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsaSl7cmV0dXJuIHZvaWQgMCE9PWkmJmNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMueD10LmdldFgoZSksdGhpcy55PXQuZ2V0WShlKSx0aGlzLno9dC5nZXRaKGUpLHRoaXMudz10LmdldFcoZSksdGhpc31yYW5kb20oKXtyZXR1cm4gdGhpcy54PU1hdGgucmFuZG9tKCksdGhpcy55PU1hdGgucmFuZG9tKCksdGhpcy56PU1hdGgucmFuZG9tKCksdGhpcy53PU1hdGgucmFuZG9tKCksdGhpc30qW1N5bWJvbC5pdGVyYXRvcl0oKXt5aWVsZCB0aGlzLngseWllbGQgdGhpcy55LHlpZWxkIHRoaXMueix5aWVsZCB0aGlzLnd9fTtRaS5wcm90b3R5cGUuaXNWZWN0b3I0PSEwO3ZhciB0cz1jbGFzcyBleHRlbmRzIHpke2NvbnN0cnVjdG9yKHQsZSxpPXt9KXtzdXBlcigpLHRoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMuZGVwdGg9MSx0aGlzLnNjaXNzb3I9bmV3IFFpKDAsMCx0LGUpLHRoaXMuc2Npc3NvclRlc3Q9ITEsdGhpcy52aWV3cG9ydD1uZXcgUWkoMCwwLHQsZSksdGhpcy50ZXh0dXJlPW5ldyBsbyh2b2lkIDAsaS5tYXBwaW5nLGkud3JhcFMsaS53cmFwVCxpLm1hZ0ZpbHRlcixpLm1pbkZpbHRlcixpLmZvcm1hdCxpLnR5cGUsaS5hbmlzb3Ryb3B5LGkuZW5jb2RpbmcpLHRoaXMudGV4dHVyZS5pc1JlbmRlclRhcmdldFRleHR1cmU9ITAsdGhpcy50ZXh0dXJlLmltYWdlPXt3aWR0aDp0LGhlaWdodDplLGRlcHRoOjF9LHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9dm9pZCAwIT09aS5nZW5lcmF0ZU1pcG1hcHMmJmkuZ2VuZXJhdGVNaXBtYXBzLHRoaXMudGV4dHVyZS5pbnRlcm5hbEZvcm1hdD12b2lkIDAhPT1pLmludGVybmFsRm9ybWF0P2kuaW50ZXJuYWxGb3JtYXQ6bnVsbCx0aGlzLnRleHR1cmUubWluRmlsdGVyPXZvaWQgMCE9PWkubWluRmlsdGVyP2kubWluRmlsdGVyOmlhLHRoaXMuZGVwdGhCdWZmZXI9dm9pZCAwPT09aS5kZXB0aEJ1ZmZlcnx8aS5kZXB0aEJ1ZmZlcix0aGlzLnN0ZW5jaWxCdWZmZXI9dm9pZCAwIT09aS5zdGVuY2lsQnVmZmVyJiZpLnN0ZW5jaWxCdWZmZXIsdGhpcy5kZXB0aFRleHR1cmU9dm9pZCAwIT09aS5kZXB0aFRleHR1cmU/aS5kZXB0aFRleHR1cmU6bnVsbH1zZXRUZXh0dXJlKHQpe3QuaW1hZ2U9e3dpZHRoOnRoaXMud2lkdGgsaGVpZ2h0OnRoaXMuaGVpZ2h0LGRlcHRoOnRoaXMuZGVwdGh9LHRoaXMudGV4dHVyZT10fXNldFNpemUodCxlLGk9MSl7KHRoaXMud2lkdGghPT10fHx0aGlzLmhlaWdodCE9PWV8fHRoaXMuZGVwdGghPT1pKSYmKHRoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMuZGVwdGg9aSx0aGlzLnRleHR1cmUuaW1hZ2Uud2lkdGg9dCx0aGlzLnRleHR1cmUuaW1hZ2UuaGVpZ2h0PWUsdGhpcy50ZXh0dXJlLmltYWdlLmRlcHRoPWksdGhpcy5kaXNwb3NlKCkpLHRoaXMudmlld3BvcnQuc2V0KDAsMCx0LGUpLHRoaXMuc2Npc3Nvci5zZXQoMCwwLHQsZSl9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy53aWR0aD10LndpZHRoLHRoaXMuaGVpZ2h0PXQuaGVpZ2h0LHRoaXMuZGVwdGg9dC5kZXB0aCx0aGlzLnZpZXdwb3J0LmNvcHkodC52aWV3cG9ydCksdGhpcy50ZXh0dXJlPXQudGV4dHVyZS5jbG9uZSgpLHRoaXMudGV4dHVyZS5pbWFnZT1PYmplY3QuYXNzaWduKHt9LHQudGV4dHVyZS5pbWFnZSksdGhpcy5kZXB0aEJ1ZmZlcj10LmRlcHRoQnVmZmVyLHRoaXMuc3RlbmNpbEJ1ZmZlcj10LnN0ZW5jaWxCdWZmZXIsdGhpcy5kZXB0aFRleHR1cmU9dC5kZXB0aFRleHR1cmUsdGhpc31kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfX07dHMucHJvdG90eXBlLmlzV2ViR0xSZW5kZXJUYXJnZXQ9ITAsY2xhc3MgZXh0ZW5kcyB0c3tjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIodCxlKTtsZXQgcj10aGlzLnRleHR1cmU7dGhpcy50ZXh0dXJlPVtdO2ZvcihsZXQgbz0wO288aTtvKyspdGhpcy50ZXh0dXJlW29dPXIuY2xvbmUoKX1zZXRTaXplKHQsZSxpPTEpe2lmKHRoaXMud2lkdGghPT10fHx0aGlzLmhlaWdodCE9PWV8fHRoaXMuZGVwdGghPT1pKXt0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9ZSx0aGlzLmRlcHRoPWk7Zm9yKGxldCByPTAsbz10aGlzLnRleHR1cmUubGVuZ3RoO3I8bztyKyspdGhpcy50ZXh0dXJlW3JdLmltYWdlLndpZHRoPXQsdGhpcy50ZXh0dXJlW3JdLmltYWdlLmhlaWdodD1lLHRoaXMudGV4dHVyZVtyXS5pbWFnZS5kZXB0aD1pO3RoaXMuZGlzcG9zZSgpfXJldHVybiB0aGlzLnZpZXdwb3J0LnNldCgwLDAsdCxlKSx0aGlzLnNjaXNzb3Iuc2V0KDAsMCx0LGUpLHRoaXN9Y29weSh0KXt0aGlzLmRpc3Bvc2UoKSx0aGlzLndpZHRoPXQud2lkdGgsdGhpcy5oZWlnaHQ9dC5oZWlnaHQsdGhpcy5kZXB0aD10LmRlcHRoLHRoaXMudmlld3BvcnQuc2V0KDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSx0aGlzLnNjaXNzb3Iuc2V0KDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSx0aGlzLmRlcHRoQnVmZmVyPXQuZGVwdGhCdWZmZXIsdGhpcy5zdGVuY2lsQnVmZmVyPXQuc3RlbmNpbEJ1ZmZlcix0aGlzLmRlcHRoVGV4dHVyZT10LmRlcHRoVGV4dHVyZSx0aGlzLnRleHR1cmUubGVuZ3RoPTA7Zm9yKGxldCBlPTAsaT10LnRleHR1cmUubGVuZ3RoO2U8aTtlKyspdGhpcy50ZXh0dXJlW2VdPXQudGV4dHVyZVtlXS5jbG9uZSgpO3JldHVybiB0aGlzfX0ucHJvdG90eXBlLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHM9ITA7dmFyIHd4PWNsYXNzIGV4dGVuZHMgdHN7Y29uc3RydWN0b3IodCxlLGk9e30pe3N1cGVyKHQsZSxpKSx0aGlzLnNhbXBsZXM9NCx0aGlzLmlnbm9yZURlcHRoRm9yTXVsdGlzYW1wbGVDb3B5PXZvaWQgMD09PWkuaWdub3JlRGVwdGh8fGkuaWdub3JlRGVwdGgsdGhpcy51c2VSZW5kZXJUb1RleHR1cmU9dm9pZCAwIT09aS51c2VSZW5kZXJUb1RleHR1cmUmJmkudXNlUmVuZGVyVG9UZXh0dXJlLHRoaXMudXNlUmVuZGVyYnVmZmVyPSExPT09dGhpcy51c2VSZW5kZXJUb1RleHR1cmV9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weS5jYWxsKHRoaXMsdCksdGhpcy5zYW1wbGVzPXQuc2FtcGxlcyx0aGlzLnVzZVJlbmRlclRvVGV4dHVyZT10LnVzZVJlbmRlclRvVGV4dHVyZSx0aGlzLnVzZVJlbmRlcmJ1ZmZlcj10LnVzZVJlbmRlcmJ1ZmZlcix0aGlzfX07d3gucHJvdG90eXBlLmlzV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldD0hMDt2YXIgb2E9Y2xhc3N7Y29uc3RydWN0b3IodD0wLGU9MCxpPTAscj0xKXt0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3o9aSx0aGlzLl93PXJ9c3RhdGljIHNsZXJwKHQsZSxpLHIpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IFN0YXRpYyAuc2xlcnAoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgcW0uc2xlcnBRdWF0ZXJuaW9ucyggcWEsIHFiLCB0ICkgaW5zdGVhZC4iKSxpLnNsZXJwUXVhdGVybmlvbnModCxlLHIpfXN0YXRpYyBzbGVycEZsYXQodCxlLGkscixvLGEscyl7bGV0IGw9aVtyKzBdLGM9aVtyKzFdLGQ9aVtyKzJdLHU9aVtyKzNdLHA9b1thKzBdLGg9b1thKzFdLG09b1thKzJdLF89b1thKzNdO2lmKDA9PT1zKXJldHVybiB0W2UrMF09bCx0W2UrMV09Yyx0W2UrMl09ZCx2b2lkKHRbZSszXT11KTtpZigxPT09cylyZXR1cm4gdFtlKzBdPXAsdFtlKzFdPWgsdFtlKzJdPW0sdm9pZCh0W2UrM109Xyk7aWYodSE9PV98fGwhPT1wfHxjIT09aHx8ZCE9PW0pe2xldCBNPTEtcyx5PWwqcCtjKmgrZCptK3UqXyx4PXk+PTA/MTotMSxSPTEteSp5O2lmKFI+TnVtYmVyLkVQU0lMT04pe2xldCBCPU1hdGguc3FydChSKSxlZT1NYXRoLmF0YW4yKEIseSp4KTtNPU1hdGguc2luKE0qZWUpL0Iscz1NYXRoLnNpbihzKmVlKS9CfWxldCBJPXMqeDtpZihsPWwqTStwKkksYz1jKk0raCpJLGQ9ZCpNK20qSSx1PXUqTStfKkksTT09PTEtcyl7bGV0IEI9MS9NYXRoLnNxcnQobCpsK2MqYytkKmQrdSp1KTtsKj1CLGMqPUIsZCo9Qix1Kj1CfX10W2VdPWwsdFtlKzFdPWMsdFtlKzJdPWQsdFtlKzNdPXV9c3RhdGljIG11bHRpcGx5UXVhdGVybmlvbnNGbGF0KHQsZSxpLHIsbyxhKXtsZXQgcz1pW3JdLGw9aVtyKzFdLGM9aVtyKzJdLGQ9aVtyKzNdLHU9b1thXSxwPW9bYSsxXSxoPW9bYSsyXSxtPW9bYSszXTtyZXR1cm4gdFtlXT1zKm0rZCp1K2wqaC1jKnAsdFtlKzFdPWwqbStkKnArYyp1LXMqaCx0W2UrMl09YyptK2QqaCtzKnAtbCp1LHRbZSszXT1kKm0tcyp1LWwqcC1jKmgsdH1nZXQgeCgpe3JldHVybiB0aGlzLl94fXNldCB4KHQpe3RoaXMuX3g9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHkoKXtyZXR1cm4gdGhpcy5feX1zZXQgeSh0KXt0aGlzLl95PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB6KCl7cmV0dXJuIHRoaXMuX3p9c2V0IHoodCl7dGhpcy5fej10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgdygpe3JldHVybiB0aGlzLl93fXNldCB3KHQpe3RoaXMuX3c9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9c2V0KHQsZSxpLHIpe3JldHVybiB0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3o9aSx0aGlzLl93PXIsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5feCx0aGlzLl95LHRoaXMuX3osdGhpcy5fdyl9Y29weSh0KXtyZXR1cm4gdGhpcy5feD10LngsdGhpcy5feT10LnksdGhpcy5fej10LnosdGhpcy5fdz10LncsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbUV1bGVyKHQsZSl7aWYoIXR8fCF0LmlzRXVsZXIpdGhyb3cgbmV3IEVycm9yKCJUSFJFRS5RdWF0ZXJuaW9uOiAuc2V0RnJvbUV1bGVyKCkgbm93IGV4cGVjdHMgYW4gRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4iKTtsZXQgaT10Ll94LHI9dC5feSxvPXQuX3osYT10Ll9vcmRlcixzPU1hdGguY29zLGw9TWF0aC5zaW4sYz1zKGkvMiksZD1zKHIvMiksdT1zKG8vMikscD1sKGkvMiksaD1sKHIvMiksbT1sKG8vMik7c3dpdGNoKGEpe2Nhc2UiWFlaIjp0aGlzLl94PXAqZCp1K2MqaCptLHRoaXMuX3k9YypoKnUtcCpkKm0sdGhpcy5fej1jKmQqbStwKmgqdSx0aGlzLl93PWMqZCp1LXAqaCptO2JyZWFrO2Nhc2UiWVhaIjp0aGlzLl94PXAqZCp1K2MqaCptLHRoaXMuX3k9YypoKnUtcCpkKm0sdGhpcy5fej1jKmQqbS1wKmgqdSx0aGlzLl93PWMqZCp1K3AqaCptO2JyZWFrO2Nhc2UiWlhZIjp0aGlzLl94PXAqZCp1LWMqaCptLHRoaXMuX3k9YypoKnUrcCpkKm0sdGhpcy5fej1jKmQqbStwKmgqdSx0aGlzLl93PWMqZCp1LXAqaCptO2JyZWFrO2Nhc2UiWllYIjp0aGlzLl94PXAqZCp1LWMqaCptLHRoaXMuX3k9YypoKnUrcCpkKm0sdGhpcy5fej1jKmQqbS1wKmgqdSx0aGlzLl93PWMqZCp1K3AqaCptO2JyZWFrO2Nhc2UiWVpYIjp0aGlzLl94PXAqZCp1K2MqaCptLHRoaXMuX3k9YypoKnUrcCpkKm0sdGhpcy5fej1jKmQqbS1wKmgqdSx0aGlzLl93PWMqZCp1LXAqaCptO2JyZWFrO2Nhc2UiWFpZIjp0aGlzLl94PXAqZCp1LWMqaCptLHRoaXMuX3k9YypoKnUtcCpkKm0sdGhpcy5fej1jKmQqbStwKmgqdSx0aGlzLl93PWMqZCp1K3AqaCptO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAuc2V0RnJvbUV1bGVyKCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogIithKX1yZXR1cm4hMSE9PWUmJnRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21BeGlzQW5nbGUodCxlKXtsZXQgaT1lLzIscj1NYXRoLnNpbihpKTtyZXR1cm4gdGhpcy5feD10Lngqcix0aGlzLl95PXQueSpyLHRoaXMuX3o9dC56KnIsdGhpcy5fdz1NYXRoLmNvcyhpKSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tUm90YXRpb25NYXRyaXgodCl7bGV0IGU9dC5lbGVtZW50cyxpPWVbMF0scj1lWzRdLG89ZVs4XSxhPWVbMV0scz1lWzVdLGw9ZVs5XSxjPWVbMl0sZD1lWzZdLHU9ZVsxMF0scD1pK3MrdTtpZihwPjApe2xldCBoPS41L01hdGguc3FydChwKzEpO3RoaXMuX3c9LjI1L2gsdGhpcy5feD0oZC1sKSpoLHRoaXMuX3k9KG8tYykqaCx0aGlzLl96PShhLXIpKmh9ZWxzZSBpZihpPnMmJmk+dSl7bGV0IGg9MipNYXRoLnNxcnQoMStpLXMtdSk7dGhpcy5fdz0oZC1sKS9oLHRoaXMuX3g9LjI1KmgsdGhpcy5feT0ocithKS9oLHRoaXMuX3o9KG8rYykvaH1lbHNlIGlmKHM+dSl7bGV0IGg9MipNYXRoLnNxcnQoMStzLWktdSk7dGhpcy5fdz0oby1jKS9oLHRoaXMuX3g9KHIrYSkvaCx0aGlzLl95PS4yNSpoLHRoaXMuX3o9KGwrZCkvaH1lbHNle2xldCBoPTIqTWF0aC5zcXJ0KDErdS1pLXMpO3RoaXMuX3c9KGEtcikvaCx0aGlzLl94PShvK2MpL2gsdGhpcy5feT0obCtkKS9oLHRoaXMuX3o9LjI1Kmh9cmV0dXJuIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21Vbml0VmVjdG9ycyh0LGUpe2xldCBpPXQuZG90KGUpKzE7cmV0dXJuIGk8TnVtYmVyLkVQU0lMT04/KGk9MCxNYXRoLmFicyh0LngpPk1hdGguYWJzKHQueik/KHRoaXMuX3g9LXQueSx0aGlzLl95PXQueCx0aGlzLl96PTAsdGhpcy5fdz1pKToodGhpcy5feD0wLHRoaXMuX3k9LXQueix0aGlzLl96PXQueSx0aGlzLl93PWkpKToodGhpcy5feD10LnkqZS56LXQueiplLnksdGhpcy5feT10LnoqZS54LXQueCplLnosdGhpcy5fej10LngqZS55LXQueSplLngsdGhpcy5fdz1pKSx0aGlzLm5vcm1hbGl6ZSgpfWFuZ2xlVG8odCl7cmV0dXJuIDIqTWF0aC5hY29zKE1hdGguYWJzKGVzKHRoaXMuZG90KHQpLC0xLDEpKSl9cm90YXRlVG93YXJkcyh0LGUpe2xldCBpPXRoaXMuYW5nbGVUbyh0KTtpZigwPT09aSlyZXR1cm4gdGhpcztsZXQgcj1NYXRoLm1pbigxLGUvaSk7cmV0dXJuIHRoaXMuc2xlcnAodCxyKSx0aGlzfWlkZW50aXR5KCl7cmV0dXJuIHRoaXMuc2V0KDAsMCwwLDEpfWludmVydCgpe3JldHVybiB0aGlzLmNvbmp1Z2F0ZSgpfWNvbmp1Z2F0ZSgpe3JldHVybiB0aGlzLl94Kj0tMSx0aGlzLl95Kj0tMSx0aGlzLl96Kj0tMSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31kb3QodCl7cmV0dXJuIHRoaXMuX3gqdC5feCt0aGlzLl95KnQuX3krdGhpcy5feip0Ll96K3RoaXMuX3cqdC5fd31sZW5ndGhTcSgpe3JldHVybiB0aGlzLl94KnRoaXMuX3grdGhpcy5feSp0aGlzLl95K3RoaXMuX3oqdGhpcy5feit0aGlzLl93KnRoaXMuX3d9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLl94KnRoaXMuX3grdGhpcy5feSp0aGlzLl95K3RoaXMuX3oqdGhpcy5feit0aGlzLl93KnRoaXMuX3cpfW5vcm1hbGl6ZSgpe2xldCB0PXRoaXMubGVuZ3RoKCk7cmV0dXJuIDA9PT10Pyh0aGlzLl94PTAsdGhpcy5feT0wLHRoaXMuX3o9MCx0aGlzLl93PTEpOih0PTEvdCx0aGlzLl94PXRoaXMuX3gqdCx0aGlzLl95PXRoaXMuX3kqdCx0aGlzLl96PXRoaXMuX3oqdCx0aGlzLl93PXRoaXMuX3cqdCksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9bXVsdGlwbHkodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseVF1YXRlcm5pb25zKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLm11bHRpcGx5UXVhdGVybmlvbnModCxlKSk6dGhpcy5tdWx0aXBseVF1YXRlcm5pb25zKHRoaXMsdCl9cHJlbXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyh0LHRoaXMpfW11bHRpcGx5UXVhdGVybmlvbnModCxlKXtsZXQgaT10Ll94LHI9dC5feSxvPXQuX3osYT10Ll93LHM9ZS5feCxsPWUuX3ksYz1lLl96LGQ9ZS5fdztyZXR1cm4gdGhpcy5feD1pKmQrYSpzK3IqYy1vKmwsdGhpcy5feT1yKmQrYSpsK28qcy1pKmMsdGhpcy5fej1vKmQrYSpjK2kqbC1yKnMsdGhpcy5fdz1hKmQtaSpzLXIqbC1vKmMsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2xlcnAodCxlKXtpZigwPT09ZSlyZXR1cm4gdGhpcztpZigxPT09ZSlyZXR1cm4gdGhpcy5jb3B5KHQpO2xldCBpPXRoaXMuX3gscj10aGlzLl95LG89dGhpcy5feixhPXRoaXMuX3cscz1hKnQuX3craSp0Ll94K3IqdC5feStvKnQuX3o7aWYoczwwPyh0aGlzLl93PS10Ll93LHRoaXMuX3g9LXQuX3gsdGhpcy5feT0tdC5feSx0aGlzLl96PS10Ll96LHM9LXMpOnRoaXMuY29weSh0KSxzPj0xKXJldHVybiB0aGlzLl93PWEsdGhpcy5feD1pLHRoaXMuX3k9cix0aGlzLl96PW8sdGhpcztsZXQgbD0xLXMqcztpZihsPD1OdW1iZXIuRVBTSUxPTil7bGV0IGg9MS1lO3JldHVybiB0aGlzLl93PWgqYStlKnRoaXMuX3csdGhpcy5feD1oKmkrZSp0aGlzLl94LHRoaXMuX3k9aCpyK2UqdGhpcy5feSx0aGlzLl96PWgqbytlKnRoaXMuX3osdGhpcy5ub3JtYWxpemUoKSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31sZXQgYz1NYXRoLnNxcnQobCksZD1NYXRoLmF0YW4yKGMscyksdT1NYXRoLnNpbigoMS1lKSpkKS9jLHA9TWF0aC5zaW4oZSpkKS9jO3JldHVybiB0aGlzLl93PWEqdSt0aGlzLl93KnAsdGhpcy5feD1pKnUrdGhpcy5feCpwLHRoaXMuX3k9cip1K3RoaXMuX3kqcCx0aGlzLl96PW8qdSt0aGlzLl96KnAsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2xlcnBRdWF0ZXJuaW9ucyh0LGUsaSl7cmV0dXJuIHRoaXMuY29weSh0KS5zbGVycChlLGkpfXJhbmRvbSgpe2xldCB0PU1hdGgucmFuZG9tKCksZT1NYXRoLnNxcnQoMS10KSxpPU1hdGguc3FydCh0KSxyPTIqTWF0aC5QSSpNYXRoLnJhbmRvbSgpLG89MipNYXRoLlBJKk1hdGgucmFuZG9tKCk7cmV0dXJuIHRoaXMuc2V0KGUqTWF0aC5jb3MociksaSpNYXRoLnNpbihvKSxpKk1hdGguY29zKG8pLGUqTWF0aC5zaW4ocikpfWVxdWFscyh0KXtyZXR1cm4gdC5feD09PXRoaXMuX3gmJnQuX3k9PT10aGlzLl95JiZ0Ll96PT09dGhpcy5feiYmdC5fdz09PXRoaXMuX3d9ZnJvbUFycmF5KHQsZT0wKXtyZXR1cm4gdGhpcy5feD10W2VdLHRoaXMuX3k9dFtlKzFdLHRoaXMuX3o9dFtlKzJdLHRoaXMuX3c9dFtlKzNdLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXRvQXJyYXkodD1bXSxlPTApe3JldHVybiB0W2VdPXRoaXMuX3gsdFtlKzFdPXRoaXMuX3ksdFtlKzJdPXRoaXMuX3osdFtlKzNdPXRoaXMuX3csdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSl7cmV0dXJuIHRoaXMuX3g9dC5nZXRYKGUpLHRoaXMuX3k9dC5nZXRZKGUpLHRoaXMuX3o9dC5nZXRaKGUpLHRoaXMuX3c9dC5nZXRXKGUpLHRoaXN9X29uQ2hhbmdlKHQpe3JldHVybiB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrPXQsdGhpc31fb25DaGFuZ2VDYWxsYmFjaygpe319O29hLnByb3RvdHlwZS5pc1F1YXRlcm5pb249ITA7dmFyIEs9Y2xhc3N7Y29uc3RydWN0b3IodD0wLGU9MCxpPTApe3RoaXMueD10LHRoaXMueT1lLHRoaXMuej1pfXNldCh0LGUsaSl7cmV0dXJuIHZvaWQgMD09PWkmJihpPXRoaXMueiksdGhpcy54PXQsdGhpcy55PWUsdGhpcy56PWksdGhpc31zZXRTY2FsYXIodCl7cmV0dXJuIHRoaXMueD10LHRoaXMueT10LHRoaXMuej10LHRoaXN9c2V0WCh0KXtyZXR1cm4gdGhpcy54PXQsdGhpc31zZXRZKHQpe3JldHVybiB0aGlzLnk9dCx0aGlzfXNldFoodCl7cmV0dXJuIHRoaXMuej10LHRoaXN9c2V0Q29tcG9uZW50KHQsZSl7c3dpdGNoKHQpe2Nhc2UgMDp0aGlzLng9ZTticmVhaztjYXNlIDE6dGhpcy55PWU7YnJlYWs7Y2FzZSAyOnRoaXMuej1lO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9cmV0dXJuIHRoaXN9Z2V0Q29tcG9uZW50KHQpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIHRoaXMueDtjYXNlIDE6cmV0dXJuIHRoaXMueTtjYXNlIDI6cmV0dXJuIHRoaXMuejtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLngsdGhpcy55LHRoaXMueil9Y29weSh0KXtyZXR1cm4gdGhpcy54PXQueCx0aGlzLnk9dC55LHRoaXMuej10LnosdGhpc31hZGQodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuYWRkKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuYWRkVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5hZGRWZWN0b3JzKHQsZSkpOih0aGlzLngrPXQueCx0aGlzLnkrPXQueSx0aGlzLnorPXQueix0aGlzKX1hZGRTY2FsYXIodCl7cmV0dXJuIHRoaXMueCs9dCx0aGlzLnkrPXQsdGhpcy56Kz10LHRoaXN9YWRkVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54K2UueCx0aGlzLnk9dC55K2UueSx0aGlzLno9dC56K2Uueix0aGlzfWFkZFNjYWxlZFZlY3Rvcih0LGUpe3JldHVybiB0aGlzLngrPXQueCplLHRoaXMueSs9dC55KmUsdGhpcy56Kz10LnoqZSx0aGlzfXN1Yih0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5zdWIoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5zdWJWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLnN1YlZlY3RvcnModCxlKSk6KHRoaXMueC09dC54LHRoaXMueS09dC55LHRoaXMuei09dC56LHRoaXMpfXN1YlNjYWxhcih0KXtyZXR1cm4gdGhpcy54LT10LHRoaXMueS09dCx0aGlzLnotPXQsdGhpc31zdWJWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngtZS54LHRoaXMueT10LnktZS55LHRoaXMuej10LnotZS56LHRoaXN9bXVsdGlwbHkodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseVZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMubXVsdGlwbHlWZWN0b3JzKHQsZSkpOih0aGlzLngqPXQueCx0aGlzLnkqPXQueSx0aGlzLnoqPXQueix0aGlzKX1tdWx0aXBseVNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kj10LHRoaXMueSo9dCx0aGlzLnoqPXQsdGhpc31tdWx0aXBseVZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueCplLngsdGhpcy55PXQueSplLnksdGhpcy56PXQueiplLnosdGhpc31hcHBseUV1bGVyKHQpe3JldHVybiB0JiZ0LmlzRXVsZXJ8fGNvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjM6IC5hcHBseUV1bGVyKCkgbm93IGV4cGVjdHMgYW4gRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4iKSx0aGlzLmFwcGx5UXVhdGVybmlvbihpZWUuc2V0RnJvbUV1bGVyKHQpKX1hcHBseUF4aXNBbmdsZSh0LGUpe3JldHVybiB0aGlzLmFwcGx5UXVhdGVybmlvbihpZWUuc2V0RnJvbUF4aXNBbmdsZSh0LGUpKX1hcHBseU1hdHJpeDModCl7bGV0IGU9dGhpcy54LGk9dGhpcy55LHI9dGhpcy56LG89dC5lbGVtZW50cztyZXR1cm4gdGhpcy54PW9bMF0qZStvWzNdKmkrb1s2XSpyLHRoaXMueT1vWzFdKmUrb1s0XSppK29bN10qcix0aGlzLno9b1syXSplK29bNV0qaStvWzhdKnIsdGhpc31hcHBseU5vcm1hbE1hdHJpeCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDModCkubm9ybWFsaXplKCl9YXBwbHlNYXRyaXg0KHQpe2xldCBlPXRoaXMueCxpPXRoaXMueSxyPXRoaXMueixvPXQuZWxlbWVudHMsYT0xLyhvWzNdKmUrb1s3XSppK29bMTFdKnIrb1sxNV0pO3JldHVybiB0aGlzLng9KG9bMF0qZStvWzRdKmkrb1s4XSpyK29bMTJdKSphLHRoaXMueT0ob1sxXSplK29bNV0qaStvWzldKnIrb1sxM10pKmEsdGhpcy56PShvWzJdKmUrb1s2XSppK29bMTBdKnIrb1sxNF0pKmEsdGhpc31hcHBseVF1YXRlcm5pb24odCl7bGV0IGU9dGhpcy54LGk9dGhpcy55LHI9dGhpcy56LG89dC54LGE9dC55LHM9dC56LGw9dC53LGM9bCplK2Eqci1zKmksZD1sKmkrcyplLW8qcix1PWwqcitvKmktYSplLHA9LW8qZS1hKmktcypyO3JldHVybiB0aGlzLng9YypsK3AqLW8rZCotcy11Ki1hLHRoaXMueT1kKmwrcCotYSt1Ki1vLWMqLXMsdGhpcy56PXUqbCtwKi1zK2MqLWEtZCotbyx0aGlzfXByb2plY3QodCl7cmV0dXJuIHRoaXMuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGRJbnZlcnNlKS5hcHBseU1hdHJpeDQodC5wcm9qZWN0aW9uTWF0cml4KX11bnByb2plY3QodCl7cmV0dXJuIHRoaXMuYXBwbHlNYXRyaXg0KHQucHJvamVjdGlvbk1hdHJpeEludmVyc2UpLmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKX10cmFuc2Zvcm1EaXJlY3Rpb24odCl7bGV0IGU9dGhpcy54LGk9dGhpcy55LHI9dGhpcy56LG89dC5lbGVtZW50cztyZXR1cm4gdGhpcy54PW9bMF0qZStvWzRdKmkrb1s4XSpyLHRoaXMueT1vWzFdKmUrb1s1XSppK29bOV0qcix0aGlzLno9b1syXSplK29bNl0qaStvWzEwXSpyLHRoaXMubm9ybWFsaXplKCl9ZGl2aWRlKHQpe3JldHVybiB0aGlzLngvPXQueCx0aGlzLnkvPXQueSx0aGlzLnovPXQueix0aGlzfWRpdmlkZVNjYWxhcih0KXtyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhcigxL3QpfW1pbih0KXtyZXR1cm4gdGhpcy54PU1hdGgubWluKHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1pbih0aGlzLnksdC55KSx0aGlzLno9TWF0aC5taW4odGhpcy56LHQueiksdGhpc31tYXgodCl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5tYXgodGhpcy55LHQueSksdGhpcy56PU1hdGgubWF4KHRoaXMueix0LnopLHRoaXN9Y2xhbXAodCxlKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQueCxNYXRoLm1pbihlLngsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQueSxNYXRoLm1pbihlLnksdGhpcy55KSksdGhpcy56PU1hdGgubWF4KHQueixNYXRoLm1pbihlLnosdGhpcy56KSksdGhpc31jbGFtcFNjYWxhcih0LGUpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy55KSksdGhpcy56PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLnopKSx0aGlzfWNsYW1wTGVuZ3RoKHQsZSl7bGV0IGk9dGhpcy5sZW5ndGgoKTtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIoaXx8MSkubXVsdGlwbHlTY2FsYXIoTWF0aC5tYXgodCxNYXRoLm1pbihlLGkpKSl9Zmxvb3IoKXtyZXR1cm4gdGhpcy54PU1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpLHRoaXMuej1NYXRoLmZsb29yKHRoaXMueiksdGhpc31jZWlsKCl7cmV0dXJuIHRoaXMueD1NYXRoLmNlaWwodGhpcy54KSx0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSksdGhpcy56PU1hdGguY2VpbCh0aGlzLnopLHRoaXN9cm91bmQoKXtyZXR1cm4gdGhpcy54PU1hdGgucm91bmQodGhpcy54KSx0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpLHRoaXMuej1NYXRoLnJvdW5kKHRoaXMueiksdGhpc31yb3VuZFRvWmVybygpe3JldHVybiB0aGlzLng9dGhpcy54PDA/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT10aGlzLnk8MD9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSksdGhpcy56PXRoaXMuejwwP01hdGguY2VpbCh0aGlzLnopOk1hdGguZmxvb3IodGhpcy56KSx0aGlzfW5lZ2F0ZSgpe3JldHVybiB0aGlzLng9LXRoaXMueCx0aGlzLnk9LXRoaXMueSx0aGlzLno9LXRoaXMueix0aGlzfWRvdCh0KXtyZXR1cm4gdGhpcy54KnQueCt0aGlzLnkqdC55K3RoaXMueip0Lnp9bGVuZ3RoU3EoKXtyZXR1cm4gdGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnp9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMueil9bWFuaGF0dGFuTGVuZ3RoKCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueCkrTWF0aC5hYnModGhpcy55KStNYXRoLmFicyh0aGlzLnopfW5vcm1hbGl6ZSgpe3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcih0aGlzLmxlbmd0aCgpfHwxKX1zZXRMZW5ndGgodCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIodCl9bGVycCh0LGUpe3JldHVybiB0aGlzLngrPSh0LngtdGhpcy54KSplLHRoaXMueSs9KHQueS10aGlzLnkpKmUsdGhpcy56Kz0odC56LXRoaXMueikqZSx0aGlzfWxlcnBWZWN0b3JzKHQsZSxpKXtyZXR1cm4gdGhpcy54PXQueCsoZS54LXQueCkqaSx0aGlzLnk9dC55KyhlLnktdC55KSppLHRoaXMuej10LnorKGUuei10LnopKmksdGhpc31jcm9zcyh0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5jcm9zcygpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmNyb3NzVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5jcm9zc1ZlY3RvcnModCxlKSk6dGhpcy5jcm9zc1ZlY3RvcnModGhpcyx0KX1jcm9zc1ZlY3RvcnModCxlKXtsZXQgaT10Lngscj10Lnksbz10LnosYT1lLngscz1lLnksbD1lLno7cmV0dXJuIHRoaXMueD1yKmwtbypzLHRoaXMueT1vKmEtaSpsLHRoaXMuej1pKnMtciphLHRoaXN9cHJvamVjdE9uVmVjdG9yKHQpe2xldCBlPXQubGVuZ3RoU3EoKTtpZigwPT09ZSlyZXR1cm4gdGhpcy5zZXQoMCwwLDApO2xldCBpPXQuZG90KHRoaXMpL2U7cmV0dXJuIHRoaXMuY29weSh0KS5tdWx0aXBseVNjYWxhcihpKX1wcm9qZWN0T25QbGFuZSh0KXtyZXR1cm4gdjMuY29weSh0aGlzKS5wcm9qZWN0T25WZWN0b3IodCksdGhpcy5zdWIodjMpfXJlZmxlY3QodCl7cmV0dXJuIHRoaXMuc3ViKHYzLmNvcHkodCkubXVsdGlwbHlTY2FsYXIoMip0aGlzLmRvdCh0KSkpfWFuZ2xlVG8odCl7bGV0IGU9TWF0aC5zcXJ0KHRoaXMubGVuZ3RoU3EoKSp0Lmxlbmd0aFNxKCkpO2lmKDA9PT1lKXJldHVybiBNYXRoLlBJLzI7bGV0IGk9dGhpcy5kb3QodCkvZTtyZXR1cm4gTWF0aC5hY29zKGVzKGksLTEsMSkpfWRpc3RhbmNlVG8odCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RhbmNlVG9TcXVhcmVkKHQpKX1kaXN0YW5jZVRvU3F1YXJlZCh0KXtsZXQgZT10aGlzLngtdC54LGk9dGhpcy55LXQueSxyPXRoaXMuei10Lno7cmV0dXJuIGUqZStpKmkrcipyfW1hbmhhdHRhbkRpc3RhbmNlVG8odCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueC10LngpK01hdGguYWJzKHRoaXMueS10LnkpK01hdGguYWJzKHRoaXMuei10LnopfXNldEZyb21TcGhlcmljYWwodCl7cmV0dXJuIHRoaXMuc2V0RnJvbVNwaGVyaWNhbENvb3Jkcyh0LnJhZGl1cyx0LnBoaSx0LnRoZXRhKX1zZXRGcm9tU3BoZXJpY2FsQ29vcmRzKHQsZSxpKXtsZXQgcj1NYXRoLnNpbihlKSp0O3JldHVybiB0aGlzLng9cipNYXRoLnNpbihpKSx0aGlzLnk9TWF0aC5jb3MoZSkqdCx0aGlzLno9cipNYXRoLmNvcyhpKSx0aGlzfXNldEZyb21DeWxpbmRyaWNhbCh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tQ3lsaW5kcmljYWxDb29yZHModC5yYWRpdXMsdC50aGV0YSx0LnkpfXNldEZyb21DeWxpbmRyaWNhbENvb3Jkcyh0LGUsaSl7cmV0dXJuIHRoaXMueD10Kk1hdGguc2luKGUpLHRoaXMueT1pLHRoaXMuej10Kk1hdGguY29zKGUpLHRoaXN9c2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQpe2xldCBlPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1lWzEyXSx0aGlzLnk9ZVsxM10sdGhpcy56PWVbMTRdLHRoaXN9c2V0RnJvbU1hdHJpeFNjYWxlKHQpe2xldCBlPXRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LDApLmxlbmd0aCgpLGk9dGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMSkubGVuZ3RoKCkscj10aGlzLnNldEZyb21NYXRyaXhDb2x1bW4odCwyKS5sZW5ndGgoKTtyZXR1cm4gdGhpcy54PWUsdGhpcy55PWksdGhpcy56PXIsdGhpc31zZXRGcm9tTWF0cml4Q29sdW1uKHQsZSl7cmV0dXJuIHRoaXMuZnJvbUFycmF5KHQuZWxlbWVudHMsNCplKX1zZXRGcm9tTWF0cml4M0NvbHVtbih0LGUpe3JldHVybiB0aGlzLmZyb21BcnJheSh0LmVsZW1lbnRzLDMqZSl9ZXF1YWxzKHQpe3JldHVybiB0Lng9PT10aGlzLngmJnQueT09PXRoaXMueSYmdC56PT09dGhpcy56fWZyb21BcnJheSh0LGU9MCl7cmV0dXJuIHRoaXMueD10W2VdLHRoaXMueT10W2UrMV0sdGhpcy56PXRbZSsyXSx0aGlzfXRvQXJyYXkodD1bXSxlPTApe3JldHVybiB0W2VdPXRoaXMueCx0W2UrMV09dGhpcy55LHRbZSsyXT10aGlzLnosdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSxpKXtyZXR1cm4gdm9pZCAwIT09aSYmY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy54PXQuZ2V0WChlKSx0aGlzLnk9dC5nZXRZKGUpLHRoaXMuej10LmdldFooZSksdGhpc31yYW5kb20oKXtyZXR1cm4gdGhpcy54PU1hdGgucmFuZG9tKCksdGhpcy55PU1hdGgucmFuZG9tKCksdGhpcy56PU1hdGgucmFuZG9tKCksdGhpc31yYW5kb21EaXJlY3Rpb24oKXtsZXQgdD0yKihNYXRoLnJhbmRvbSgpLS41KSxlPU1hdGgucmFuZG9tKCkqTWF0aC5QSSoyLGk9TWF0aC5zcXJ0KDEtdCoqMik7cmV0dXJuIHRoaXMueD1pKk1hdGguY29zKGUpLHRoaXMueT1pKk1hdGguc2luKGUpLHRoaXMuej10LHRoaXN9KltTeW1ib2wuaXRlcmF0b3JdKCl7eWllbGQgdGhpcy54LHlpZWxkIHRoaXMueSx5aWVsZCB0aGlzLnp9fTtLLnByb3RvdHlwZS5pc1ZlY3RvcjM9ITA7dmFyIHYzPW5ldyBLLGllZT1uZXcgb2EsVHM9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgSygxLzAsMS8wLDEvMCksZT1uZXcgSygtMS8wLC0xLzAsLTEvMCkpe3RoaXMubWluPXQsdGhpcy5tYXg9ZX1zZXQodCxlKXtyZXR1cm4gdGhpcy5taW4uY29weSh0KSx0aGlzLm1heC5jb3B5KGUpLHRoaXN9c2V0RnJvbUFycmF5KHQpe2xldCBlPTEvMCxpPTEvMCxyPTEvMCxvPS0xLzAsYT0tMS8wLHM9LTEvMDtmb3IobGV0IGw9MCxjPXQubGVuZ3RoO2w8YztsKz0zKXtsZXQgZD10W2xdLHU9dFtsKzFdLHA9dFtsKzJdO2Q8ZSYmKGU9ZCksdTxpJiYoaT11KSxwPHImJihyPXApLGQ+byYmKG89ZCksdT5hJiYoYT11KSxwPnMmJihzPXApfXJldHVybiB0aGlzLm1pbi5zZXQoZSxpLHIpLHRoaXMubWF4LnNldChvLGEscyksdGhpc31zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpe2xldCBlPTEvMCxpPTEvMCxyPTEvMCxvPS0xLzAsYT0tMS8wLHM9LTEvMDtmb3IobGV0IGw9MCxjPXQuY291bnQ7bDxjO2wrKyl7bGV0IGQ9dC5nZXRYKGwpLHU9dC5nZXRZKGwpLHA9dC5nZXRaKGwpO2Q8ZSYmKGU9ZCksdTxpJiYoaT11KSxwPHImJihyPXApLGQ+byYmKG89ZCksdT5hJiYoYT11KSxwPnMmJihzPXApfXJldHVybiB0aGlzLm1pbi5zZXQoZSxpLHIpLHRoaXMubWF4LnNldChvLGEscyksdGhpc31zZXRGcm9tUG9pbnRzKHQpe3RoaXMubWFrZUVtcHR5KCk7Zm9yKGxldCBlPTAsaT10Lmxlbmd0aDtlPGk7ZSsrKXRoaXMuZXhwYW5kQnlQb2ludCh0W2VdKTtyZXR1cm4gdGhpc31zZXRGcm9tQ2VudGVyQW5kU2l6ZSh0LGUpe2xldCBpPXBtLmNvcHkoZSkubXVsdGlwbHlTY2FsYXIoLjUpO3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLnN1YihpKSx0aGlzLm1heC5jb3B5KHQpLmFkZChpKSx0aGlzfXNldEZyb21PYmplY3QodCxlPSExKXtyZXR1cm4gdGhpcy5tYWtlRW1wdHkoKSx0aGlzLmV4cGFuZEJ5T2JqZWN0KHQsZSl9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5taW4uY29weSh0Lm1pbiksdGhpcy5tYXguY29weSh0Lm1heCksdGhpc31tYWtlRW1wdHkoKXtyZXR1cm4gdGhpcy5taW4ueD10aGlzLm1pbi55PXRoaXMubWluLno9MS8wLHRoaXMubWF4Lng9dGhpcy5tYXgueT10aGlzLm1heC56PS0xLzAsdGhpc31pc0VtcHR5KCl7cmV0dXJuIHRoaXMubWF4Lng8dGhpcy5taW4ueHx8dGhpcy5tYXgueTx0aGlzLm1pbi55fHx0aGlzLm1heC56PHRoaXMubWluLnp9Z2V0Q2VudGVyKHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90LnNldCgwLDAsMCk6dC5hZGRWZWN0b3JzKHRoaXMubWluLHRoaXMubWF4KS5tdWx0aXBseVNjYWxhciguNSl9Z2V0U2l6ZSh0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dC5zZXQoMCwwLDApOnQuc3ViVmVjdG9ycyh0aGlzLm1heCx0aGlzLm1pbil9ZXhwYW5kQnlQb2ludCh0KXtyZXR1cm4gdGhpcy5taW4ubWluKHQpLHRoaXMubWF4Lm1heCh0KSx0aGlzfWV4cGFuZEJ5VmVjdG9yKHQpe3JldHVybiB0aGlzLm1pbi5zdWIodCksdGhpcy5tYXguYWRkKHQpLHRoaXN9ZXhwYW5kQnlTY2FsYXIodCl7cmV0dXJuIHRoaXMubWluLmFkZFNjYWxhcigtdCksdGhpcy5tYXguYWRkU2NhbGFyKHQpLHRoaXN9ZXhwYW5kQnlPYmplY3QodCxlPSExKXt0LnVwZGF0ZVdvcmxkTWF0cml4KCExLCExKTtsZXQgaT10Lmdlb21ldHJ5O2lmKHZvaWQgMCE9PWkpaWYoZSYmbnVsbCE9aS5hdHRyaWJ1dGVzJiZ2b2lkIDAhPT1pLmF0dHJpYnV0ZXMucG9zaXRpb24pe2xldCBvPWkuYXR0cmlidXRlcy5wb3NpdGlvbjtmb3IobGV0IGE9MCxzPW8uY291bnQ7YTxzO2ErKylwbS5mcm9tQnVmZmVyQXR0cmlidXRlKG8sYSkuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpLHRoaXMuZXhwYW5kQnlQb2ludChwbSl9ZWxzZSBudWxsPT09aS5ib3VuZGluZ0JveCYmaS5jb21wdXRlQm91bmRpbmdCb3goKSx5My5jb3B5KGkuYm91bmRpbmdCb3gpLHkzLmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKSx0aGlzLnVuaW9uKHkzKTtsZXQgcj10LmNoaWxkcmVuO2ZvcihsZXQgbz0wLGE9ci5sZW5ndGg7bzxhO28rKyl0aGlzLmV4cGFuZEJ5T2JqZWN0KHJbb10sZSk7cmV0dXJuIHRoaXN9Y29udGFpbnNQb2ludCh0KXtyZXR1cm4hKHQueDx0aGlzLm1pbi54fHx0Lng+dGhpcy5tYXgueHx8dC55PHRoaXMubWluLnl8fHQueT50aGlzLm1heC55fHx0Lno8dGhpcy5taW4uenx8dC56PnRoaXMubWF4LnopfWNvbnRhaW5zQm94KHQpe3JldHVybiB0aGlzLm1pbi54PD10Lm1pbi54JiZ0Lm1heC54PD10aGlzLm1heC54JiZ0aGlzLm1pbi55PD10Lm1pbi55JiZ0Lm1heC55PD10aGlzLm1heC55JiZ0aGlzLm1pbi56PD10Lm1pbi56JiZ0Lm1heC56PD10aGlzLm1heC56fWdldFBhcmFtZXRlcih0LGUpe3JldHVybiBlLnNldCgodC54LXRoaXMubWluLngpLyh0aGlzLm1heC54LXRoaXMubWluLngpLCh0LnktdGhpcy5taW4ueSkvKHRoaXMubWF4LnktdGhpcy5taW4ueSksKHQuei10aGlzLm1pbi56KS8odGhpcy5tYXguei10aGlzLm1pbi56KSl9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4hKHQubWF4Lng8dGhpcy5taW4ueHx8dC5taW4ueD50aGlzLm1heC54fHx0Lm1heC55PHRoaXMubWluLnl8fHQubWluLnk+dGhpcy5tYXgueXx8dC5tYXguejx0aGlzLm1pbi56fHx0Lm1pbi56PnRoaXMubWF4LnopfWludGVyc2VjdHNTcGhlcmUodCl7cmV0dXJuIHRoaXMuY2xhbXBQb2ludCh0LmNlbnRlcixwbSkscG0uZGlzdGFuY2VUb1NxdWFyZWQodC5jZW50ZXIpPD10LnJhZGl1cyp0LnJhZGl1c31pbnRlcnNlY3RzUGxhbmUodCl7bGV0IGUsaTtyZXR1cm4gdC5ub3JtYWwueD4wPyhlPXQubm9ybWFsLngqdGhpcy5taW4ueCxpPXQubm9ybWFsLngqdGhpcy5tYXgueCk6KGU9dC5ub3JtYWwueCp0aGlzLm1heC54LGk9dC5ub3JtYWwueCp0aGlzLm1pbi54KSx0Lm5vcm1hbC55PjA/KGUrPXQubm9ybWFsLnkqdGhpcy5taW4ueSxpKz10Lm5vcm1hbC55KnRoaXMubWF4LnkpOihlKz10Lm5vcm1hbC55KnRoaXMubWF4LnksaSs9dC5ub3JtYWwueSp0aGlzLm1pbi55KSx0Lm5vcm1hbC56PjA/KGUrPXQubm9ybWFsLnoqdGhpcy5taW4ueixpKz10Lm5vcm1hbC56KnRoaXMubWF4LnopOihlKz10Lm5vcm1hbC56KnRoaXMubWF4LnosaSs9dC5ub3JtYWwueip0aGlzLm1pbi56KSxlPD0tdC5jb25zdGFudCYmaT49LXQuY29uc3RhbnR9aW50ZXJzZWN0c1RyaWFuZ2xlKHQpe2lmKHRoaXMuaXNFbXB0eSgpKXJldHVybiExO3RoaXMuZ2V0Q2VudGVyKG94KSxqRC5zdWJWZWN0b3JzKHRoaXMubWF4LG94KSx3MC5zdWJWZWN0b3JzKHQuYSxveCksUzAuc3ViVmVjdG9ycyh0LmIsb3gpLEUwLnN1YlZlY3RvcnModC5jLG94KSx1cC5zdWJWZWN0b3JzKFMwLHcwKSxwcC5zdWJWZWN0b3JzKEUwLFMwKSxobS5zdWJWZWN0b3JzKHcwLEUwKTtsZXQgZT1bMCwtdXAueix1cC55LDAsLXBwLnoscHAueSwwLC1obS56LGhtLnksdXAueiwwLC11cC54LHBwLnosMCwtcHAueCxobS56LDAsLWhtLngsLXVwLnksdXAueCwwLC1wcC55LHBwLngsMCwtaG0ueSxobS54LDBdO3JldHVybiEoIXgzKGUsdzAsUzAsRTAsakQpfHwoZT1bMSwwLDAsMCwxLDAsMCwwLDFdLCF4MyhlLHcwLFMwLEUwLGpEKSkpJiYoR0QuY3Jvc3NWZWN0b3JzKHVwLHBwKSxlPVtHRC54LEdELnksR0Quel0seDMoZSx3MCxTMCxFMCxqRCkpfWNsYW1wUG9pbnQodCxlKXtyZXR1cm4gZS5jb3B5KHQpLmNsYW1wKHRoaXMubWluLHRoaXMubWF4KX1kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIHBtLmNvcHkodCkuY2xhbXAodGhpcy5taW4sdGhpcy5tYXgpLnN1Yih0KS5sZW5ndGgoKX1nZXRCb3VuZGluZ1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5nZXRDZW50ZXIodC5jZW50ZXIpLHQucmFkaXVzPS41KnRoaXMuZ2V0U2l6ZShwbSkubGVuZ3RoKCksdH1pbnRlcnNlY3QodCl7cmV0dXJuIHRoaXMubWluLm1heCh0Lm1pbiksdGhpcy5tYXgubWluKHQubWF4KSx0aGlzLmlzRW1wdHkoKSYmdGhpcy5tYWtlRW1wdHkoKSx0aGlzfXVuaW9uKHQpe3JldHVybiB0aGlzLm1pbi5taW4odC5taW4pLHRoaXMubWF4Lm1heCh0Lm1heCksdGhpc31hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpfHwoRmRbMF0uc2V0KHRoaXMubWluLngsdGhpcy5taW4ueSx0aGlzLm1pbi56KS5hcHBseU1hdHJpeDQodCksRmRbMV0uc2V0KHRoaXMubWluLngsdGhpcy5taW4ueSx0aGlzLm1heC56KS5hcHBseU1hdHJpeDQodCksRmRbMl0uc2V0KHRoaXMubWluLngsdGhpcy5tYXgueSx0aGlzLm1pbi56KS5hcHBseU1hdHJpeDQodCksRmRbM10uc2V0KHRoaXMubWluLngsdGhpcy5tYXgueSx0aGlzLm1heC56KS5hcHBseU1hdHJpeDQodCksRmRbNF0uc2V0KHRoaXMubWF4LngsdGhpcy5taW4ueSx0aGlzLm1pbi56KS5hcHBseU1hdHJpeDQodCksRmRbNV0uc2V0KHRoaXMubWF4LngsdGhpcy5taW4ueSx0aGlzLm1heC56KS5hcHBseU1hdHJpeDQodCksRmRbNl0uc2V0KHRoaXMubWF4LngsdGhpcy5tYXgueSx0aGlzLm1pbi56KS5hcHBseU1hdHJpeDQodCksRmRbN10uc2V0KHRoaXMubWF4LngsdGhpcy5tYXgueSx0aGlzLm1heC56KS5hcHBseU1hdHJpeDQodCksdGhpcy5zZXRGcm9tUG9pbnRzKEZkKSksdGhpc310cmFuc2xhdGUodCl7cmV0dXJuIHRoaXMubWluLmFkZCh0KSx0aGlzLm1heC5hZGQodCksdGhpc31lcXVhbHModCl7cmV0dXJuIHQubWluLmVxdWFscyh0aGlzLm1pbikmJnQubWF4LmVxdWFscyh0aGlzLm1heCl9fTtUcy5wcm90b3R5cGUuaXNCb3gzPSEwO3ZhciBGZD1bbmV3IEssbmV3IEssbmV3IEssbmV3IEssbmV3IEssbmV3IEssbmV3IEssbmV3IEtdLHBtPW5ldyBLLHkzPW5ldyBUcyx3MD1uZXcgSyxTMD1uZXcgSyxFMD1uZXcgSyx1cD1uZXcgSyxwcD1uZXcgSyxobT1uZXcgSyxveD1uZXcgSyxqRD1uZXcgSyxHRD1uZXcgSyxtbT1uZXcgSztmdW5jdGlvbiB4MyhuLHQsZSxpLHIpe2ZvcihsZXQgbz0wLGE9bi5sZW5ndGgtMztvPD1hO28rPTMpe21tLmZyb21BcnJheShuLG8pO2xldCBzPXIueCpNYXRoLmFicyhtbS54KStyLnkqTWF0aC5hYnMobW0ueSkrci56Kk1hdGguYWJzKG1tLnopLGw9dC5kb3QobW0pLGM9ZS5kb3QobW0pLGQ9aS5kb3QobW0pO2lmKE1hdGgubWF4KC1NYXRoLm1heChsLGMsZCksTWF0aC5taW4obCxjLGQpKT5zKXJldHVybiExfXJldHVybiEwfXZhciBlUGU9bmV3IFRzLHJlZT1uZXcgSyxXRD1uZXcgSyxDMz1uZXcgSyxTcD1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBLLGU9LTEpe3RoaXMuY2VudGVyPXQsdGhpcy5yYWRpdXM9ZX1zZXQodCxlKXtyZXR1cm4gdGhpcy5jZW50ZXIuY29weSh0KSx0aGlzLnJhZGl1cz1lLHRoaXN9c2V0RnJvbVBvaW50cyh0LGUpe2xldCBpPXRoaXMuY2VudGVyO3ZvaWQgMCE9PWU/aS5jb3B5KGUpOmVQZS5zZXRGcm9tUG9pbnRzKHQpLmdldENlbnRlcihpKTtsZXQgcj0wO2ZvcihsZXQgbz0wLGE9dC5sZW5ndGg7bzxhO28rKylyPU1hdGgubWF4KHIsaS5kaXN0YW5jZVRvU3F1YXJlZCh0W29dKSk7cmV0dXJuIHRoaXMucmFkaXVzPU1hdGguc3FydChyKSx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMuY2VudGVyLmNvcHkodC5jZW50ZXIpLHRoaXMucmFkaXVzPXQucmFkaXVzLHRoaXN9aXNFbXB0eSgpe3JldHVybiB0aGlzLnJhZGl1czwwfW1ha2VFbXB0eSgpe3JldHVybiB0aGlzLmNlbnRlci5zZXQoMCwwLDApLHRoaXMucmFkaXVzPS0xLHRoaXN9Y29udGFpbnNQb2ludCh0KXtyZXR1cm4gdC5kaXN0YW5jZVRvU3F1YXJlZCh0aGlzLmNlbnRlcik8PXRoaXMucmFkaXVzKnRoaXMucmFkaXVzfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gdC5kaXN0YW5jZVRvKHRoaXMuY2VudGVyKS10aGlzLnJhZGl1c31pbnRlcnNlY3RzU3BoZXJlKHQpe2xldCBlPXRoaXMucmFkaXVzK3QucmFkaXVzO3JldHVybiB0LmNlbnRlci5kaXN0YW5jZVRvU3F1YXJlZCh0aGlzLmNlbnRlcik8PWUqZX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiB0LmludGVyc2VjdHNTcGhlcmUodGhpcyl9aW50ZXJzZWN0c1BsYW5lKHQpe3JldHVybiBNYXRoLmFicyh0LmRpc3RhbmNlVG9Qb2ludCh0aGlzLmNlbnRlcikpPD10aGlzLnJhZGl1c31jbGFtcFBvaW50KHQsZSl7bGV0IGk9dGhpcy5jZW50ZXIuZGlzdGFuY2VUb1NxdWFyZWQodCk7cmV0dXJuIGUuY29weSh0KSxpPnRoaXMucmFkaXVzKnRoaXMucmFkaXVzJiYoZS5zdWIodGhpcy5jZW50ZXIpLm5vcm1hbGl6ZSgpLGUubXVsdGlwbHlTY2FsYXIodGhpcy5yYWRpdXMpLmFkZCh0aGlzLmNlbnRlcikpLGV9Z2V0Qm91bmRpbmdCb3godCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpPyh0Lm1ha2VFbXB0eSgpLHQpOih0LnNldCh0aGlzLmNlbnRlcix0aGlzLmNlbnRlciksdC5leHBhbmRCeVNjYWxhcih0aGlzLnJhZGl1cyksdCl9YXBwbHlNYXRyaXg0KHQpe3JldHVybiB0aGlzLmNlbnRlci5hcHBseU1hdHJpeDQodCksdGhpcy5yYWRpdXM9dGhpcy5yYWRpdXMqdC5nZXRNYXhTY2FsZU9uQXhpcygpLHRoaXN9dHJhbnNsYXRlKHQpe3JldHVybiB0aGlzLmNlbnRlci5hZGQodCksdGhpc31leHBhbmRCeVBvaW50KHQpe0MzLnN1YlZlY3RvcnModCx0aGlzLmNlbnRlcik7bGV0IGU9QzMubGVuZ3RoU3EoKTtpZihlPnRoaXMucmFkaXVzKnRoaXMucmFkaXVzKXtsZXQgaT1NYXRoLnNxcnQoZSkscj0uNSooaS10aGlzLnJhZGl1cyk7dGhpcy5jZW50ZXIuYWRkKEMzLm11bHRpcGx5U2NhbGFyKHIvaSkpLHRoaXMucmFkaXVzKz1yfXJldHVybiB0aGlzfXVuaW9uKHQpe3JldHVybiEwPT09dGhpcy5jZW50ZXIuZXF1YWxzKHQuY2VudGVyKT9XRC5zZXQoMCwwLDEpLm11bHRpcGx5U2NhbGFyKHQucmFkaXVzKTpXRC5zdWJWZWN0b3JzKHQuY2VudGVyLHRoaXMuY2VudGVyKS5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0LnJhZGl1cyksdGhpcy5leHBhbmRCeVBvaW50KHJlZS5jb3B5KHQuY2VudGVyKS5hZGQoV0QpKSx0aGlzLmV4cGFuZEJ5UG9pbnQocmVlLmNvcHkodC5jZW50ZXIpLnN1YihXRCkpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0LmNlbnRlci5lcXVhbHModGhpcy5jZW50ZXIpJiZ0LnJhZGl1cz09PXRoaXMucmFkaXVzfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfX0sTmQ9bmV3IEssTTM9bmV3IEsscUQ9bmV3IEssaHA9bmV3IEssdzM9bmV3IEssWEQ9bmV3IEssUzM9bmV3IEssRXA9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgSyxlPW5ldyBLKDAsMCwtMSkpe3RoaXMub3JpZ2luPXQsdGhpcy5kaXJlY3Rpb249ZX1zZXQodCxlKXtyZXR1cm4gdGhpcy5vcmlnaW4uY29weSh0KSx0aGlzLmRpcmVjdGlvbi5jb3B5KGUpLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5vcmlnaW4uY29weSh0Lm9yaWdpbiksdGhpcy5kaXJlY3Rpb24uY29weSh0LmRpcmVjdGlvbiksdGhpc31hdCh0LGUpe3JldHVybiBlLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKHQpLmFkZCh0aGlzLm9yaWdpbil9bG9va0F0KHQpe3JldHVybiB0aGlzLmRpcmVjdGlvbi5jb3B5KHQpLnN1Yih0aGlzLm9yaWdpbikubm9ybWFsaXplKCksdGhpc31yZWNhc3QodCl7cmV0dXJuIHRoaXMub3JpZ2luLmNvcHkodGhpcy5hdCh0LE5kKSksdGhpc31jbG9zZXN0UG9pbnRUb1BvaW50KHQsZSl7ZS5zdWJWZWN0b3JzKHQsdGhpcy5vcmlnaW4pO2xldCBpPWUuZG90KHRoaXMuZGlyZWN0aW9uKTtyZXR1cm4gaTwwP2UuY29weSh0aGlzLm9yaWdpbik6ZS5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihpKS5hZGQodGhpcy5vcmlnaW4pfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VTcVRvUG9pbnQodCkpfWRpc3RhbmNlU3FUb1BvaW50KHQpe2xldCBlPU5kLnN1YlZlY3RvcnModCx0aGlzLm9yaWdpbikuZG90KHRoaXMuZGlyZWN0aW9uKTtyZXR1cm4gZTwwP3RoaXMub3JpZ2luLmRpc3RhbmNlVG9TcXVhcmVkKHQpOihOZC5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihlKS5hZGQodGhpcy5vcmlnaW4pLE5kLmRpc3RhbmNlVG9TcXVhcmVkKHQpKX1kaXN0YW5jZVNxVG9TZWdtZW50KHQsZSxpLHIpe00zLmNvcHkodCkuYWRkKGUpLm11bHRpcGx5U2NhbGFyKC41KSxxRC5jb3B5KGUpLnN1Yih0KS5ub3JtYWxpemUoKSxocC5jb3B5KHRoaXMub3JpZ2luKS5zdWIoTTMpO2xldCB1LHAsaCxtLG89LjUqdC5kaXN0YW5jZVRvKGUpLGE9LXRoaXMuZGlyZWN0aW9uLmRvdChxRCkscz1ocC5kb3QodGhpcy5kaXJlY3Rpb24pLGw9LWhwLmRvdChxRCksYz1ocC5sZW5ndGhTcSgpLGQ9TWF0aC5hYnMoMS1hKmEpO2lmKGQ+MClpZih1PWEqbC1zLHA9YSpzLWwsbT1vKmQsdT49MClpZihwPj0tbSlpZihwPD1tKXtsZXQgXz0xL2Q7dSo9XyxwKj1fLGg9dSoodSthKnArMipzKStwKihhKnUrcCsyKmwpK2N9ZWxzZSBwPW8sdT1NYXRoLm1heCgwLC0oYSpwK3MpKSxoPS11KnUrcCoocCsyKmwpK2M7ZWxzZSBwPS1vLHU9TWF0aC5tYXgoMCwtKGEqcCtzKSksaD0tdSp1K3AqKHArMipsKStjO2Vsc2UgcDw9LW0/KHU9TWF0aC5tYXgoMCwtKC1hKm8rcykpLHA9dT4wPy1vOk1hdGgubWluKE1hdGgubWF4KC1vLC1sKSxvKSxoPS11KnUrcCoocCsyKmwpK2MpOnA8PW0/KHU9MCxwPU1hdGgubWluKE1hdGgubWF4KC1vLC1sKSxvKSxoPXAqKHArMipsKStjKToodT1NYXRoLm1heCgwLC0oYSpvK3MpKSxwPXU+MD9vOk1hdGgubWluKE1hdGgubWF4KC1vLC1sKSxvKSxoPS11KnUrcCoocCsyKmwpK2MpO2Vsc2UgcD1hPjA/LW86byx1PU1hdGgubWF4KDAsLShhKnArcykpLGg9LXUqdStwKihwKzIqbCkrYztyZXR1cm4gaSYmaS5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcih1KS5hZGQodGhpcy5vcmlnaW4pLHImJnIuY29weShxRCkubXVsdGlwbHlTY2FsYXIocCkuYWRkKE0zKSxofWludGVyc2VjdFNwaGVyZSh0LGUpe05kLnN1YlZlY3RvcnModC5jZW50ZXIsdGhpcy5vcmlnaW4pO2xldCBpPU5kLmRvdCh0aGlzLmRpcmVjdGlvbikscj1OZC5kb3QoTmQpLWkqaSxvPXQucmFkaXVzKnQucmFkaXVzO2lmKHI+bylyZXR1cm4gbnVsbDtsZXQgYT1NYXRoLnNxcnQoby1yKSxzPWktYSxsPWkrYTtyZXR1cm4gczwwJiZsPDA/bnVsbDp0aGlzLmF0KHM8MD9sOnMsZSl9aW50ZXJzZWN0c1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5kaXN0YW5jZVNxVG9Qb2ludCh0LmNlbnRlcik8PXQucmFkaXVzKnQucmFkaXVzfWRpc3RhbmNlVG9QbGFuZSh0KXtsZXQgZT10Lm5vcm1hbC5kb3QodGhpcy5kaXJlY3Rpb24pO2lmKDA9PT1lKXJldHVybiAwPT09dC5kaXN0YW5jZVRvUG9pbnQodGhpcy5vcmlnaW4pPzA6bnVsbDtsZXQgaT0tKHRoaXMub3JpZ2luLmRvdCh0Lm5vcm1hbCkrdC5jb25zdGFudCkvZTtyZXR1cm4gaT49MD9pOm51bGx9aW50ZXJzZWN0UGxhbmUodCxlKXtsZXQgaT10aGlzLmRpc3RhbmNlVG9QbGFuZSh0KTtyZXR1cm4gbnVsbD09PWk/bnVsbDp0aGlzLmF0KGksZSl9aW50ZXJzZWN0c1BsYW5lKHQpe2xldCBlPXQuZGlzdGFuY2VUb1BvaW50KHRoaXMub3JpZ2luKTtyZXR1cm4gMD09PWV8fHQubm9ybWFsLmRvdCh0aGlzLmRpcmVjdGlvbikqZTwwfWludGVyc2VjdEJveCh0LGUpe2xldCBpLHIsbyxhLHMsbCxjPTEvdGhpcy5kaXJlY3Rpb24ueCxkPTEvdGhpcy5kaXJlY3Rpb24ueSx1PTEvdGhpcy5kaXJlY3Rpb24ueixwPXRoaXMub3JpZ2luO3JldHVybiBjPj0wPyhpPSh0Lm1pbi54LXAueCkqYyxyPSh0Lm1heC54LXAueCkqYyk6KGk9KHQubWF4LngtcC54KSpjLHI9KHQubWluLngtcC54KSpjKSxkPj0wPyhvPSh0Lm1pbi55LXAueSkqZCxhPSh0Lm1heC55LXAueSkqZCk6KG89KHQubWF4LnktcC55KSpkLGE9KHQubWluLnktcC55KSpkKSxpPmF8fG8+cnx8KChvPml8fGkhPWkpJiYoaT1vKSwoYTxyfHxyIT1yKSYmKHI9YSksdT49MD8ocz0odC5taW4uei1wLnopKnUsbD0odC5tYXguei1wLnopKnUpOihzPSh0Lm1heC56LXAueikqdSxsPSh0Lm1pbi56LXAueikqdSksaT5sfHxzPnIpfHwoKHM+aXx8aSE9aSkmJihpPXMpLChsPHJ8fHIhPXIpJiYocj1sKSxyPDApP251bGw6dGhpcy5hdChpPj0wP2k6cixlKX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiBudWxsIT09dGhpcy5pbnRlcnNlY3RCb3godCxOZCl9aW50ZXJzZWN0VHJpYW5nbGUodCxlLGkscixvKXt3My5zdWJWZWN0b3JzKGUsdCksWEQuc3ViVmVjdG9ycyhpLHQpLFMzLmNyb3NzVmVjdG9ycyh3MyxYRCk7bGV0IHMsYT10aGlzLmRpcmVjdGlvbi5kb3QoUzMpO2lmKGE+MCl7aWYocilyZXR1cm4gbnVsbDtzPTF9ZWxzZXtpZighKGE8MCkpcmV0dXJuIG51bGw7cz0tMSxhPS1hfWhwLnN1YlZlY3RvcnModGhpcy5vcmlnaW4sdCk7bGV0IGw9cyp0aGlzLmRpcmVjdGlvbi5kb3QoWEQuY3Jvc3NWZWN0b3JzKGhwLFhEKSk7aWYobDwwKXJldHVybiBudWxsO2xldCBjPXMqdGhpcy5kaXJlY3Rpb24uZG90KHczLmNyb3NzKGhwKSk7aWYoYzwwfHxsK2M+YSlyZXR1cm4gbnVsbDtsZXQgZD0tcypocC5kb3QoUzMpO3JldHVybiBkPDA/bnVsbDp0aGlzLmF0KGQvYSxvKX1hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMub3JpZ2luLmFwcGx5TWF0cml4NCh0KSx0aGlzLmRpcmVjdGlvbi50cmFuc2Zvcm1EaXJlY3Rpb24odCksdGhpc31lcXVhbHModCl7cmV0dXJuIHQub3JpZ2luLmVxdWFscyh0aGlzLm9yaWdpbikmJnQuZGlyZWN0aW9uLmVxdWFscyh0aGlzLmRpcmVjdGlvbil9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9fSx2bj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZWxlbWVudHM9WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdLGFyZ3VtZW50cy5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogdGhlIGNvbnN0cnVjdG9yIG5vIGxvbmdlciByZWFkcyBhcmd1bWVudHMuIHVzZSAuc2V0KCkgaW5zdGVhZC4iKX1zZXQodCxlLGkscixvLGEscyxsLGMsZCx1LHAsaCxtLF8sTSl7bGV0IHk9dGhpcy5lbGVtZW50cztyZXR1cm4geVswXT10LHlbNF09ZSx5WzhdPWkseVsxMl09cix5WzFdPW8seVs1XT1hLHlbOV09cyx5WzEzXT1sLHlbMl09Yyx5WzZdPWQseVsxMF09dSx5WzE0XT1wLHlbM109aCx5WzddPW0seVsxMV09Xyx5WzE1XT1NLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMSksdGhpc31jbG9uZSgpe3JldHVybihuZXcgdm4pLmZyb21BcnJheSh0aGlzLmVsZW1lbnRzKX1jb3B5KHQpe2xldCBlPXRoaXMuZWxlbWVudHMsaT10LmVsZW1lbnRzO3JldHVybiBlWzBdPWlbMF0sZVsxXT1pWzFdLGVbMl09aVsyXSxlWzNdPWlbM10sZVs0XT1pWzRdLGVbNV09aVs1XSxlWzZdPWlbNl0sZVs3XT1pWzddLGVbOF09aVs4XSxlWzldPWlbOV0sZVsxMF09aVsxMF0sZVsxMV09aVsxMV0sZVsxMl09aVsxMl0sZVsxM109aVsxM10sZVsxNF09aVsxNF0sZVsxNV09aVsxNV0sdGhpc31jb3B5UG9zaXRpb24odCl7bGV0IGU9dGhpcy5lbGVtZW50cyxpPXQuZWxlbWVudHM7cmV0dXJuIGVbMTJdPWlbMTJdLGVbMTNdPWlbMTNdLGVbMTRdPWlbMTRdLHRoaXN9c2V0RnJvbU1hdHJpeDModCl7bGV0IGU9dC5lbGVtZW50cztyZXR1cm4gdGhpcy5zZXQoZVswXSxlWzNdLGVbNl0sMCxlWzFdLGVbNF0sZVs3XSwwLGVbMl0sZVs1XSxlWzhdLDAsMCwwLDAsMSksdGhpc31leHRyYWN0QmFzaXModCxlLGkpe3JldHVybiB0LnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywwKSxlLnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywxKSxpLnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywyKSx0aGlzfW1ha2VCYXNpcyh0LGUsaSl7cmV0dXJuIHRoaXMuc2V0KHQueCxlLngsaS54LDAsdC55LGUueSxpLnksMCx0LnosZS56LGkueiwwLDAsMCwwLDEpLHRoaXN9ZXh0cmFjdFJvdGF0aW9uKHQpe2xldCBlPXRoaXMuZWxlbWVudHMsaT10LmVsZW1lbnRzLHI9MS9UMC5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMCkubGVuZ3RoKCksbz0xL1QwLnNldEZyb21NYXRyaXhDb2x1bW4odCwxKS5sZW5ndGgoKSxhPTEvVDAuc2V0RnJvbU1hdHJpeENvbHVtbih0LDIpLmxlbmd0aCgpO3JldHVybiBlWzBdPWlbMF0qcixlWzFdPWlbMV0qcixlWzJdPWlbMl0qcixlWzNdPTAsZVs0XT1pWzRdKm8sZVs1XT1pWzVdKm8sZVs2XT1pWzZdKm8sZVs3XT0wLGVbOF09aVs4XSphLGVbOV09aVs5XSphLGVbMTBdPWlbMTBdKmEsZVsxMV09MCxlWzEyXT0wLGVbMTNdPTAsZVsxNF09MCxlWzE1XT0xLHRoaXN9bWFrZVJvdGF0aW9uRnJvbUV1bGVyKHQpe3QmJnQuaXNFdWxlcnx8Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLm1ha2VSb3RhdGlvbkZyb21FdWxlcigpIG5vdyBleHBlY3RzIGEgRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4iKTtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC54LHI9dC55LG89dC56LGE9TWF0aC5jb3MoaSkscz1NYXRoLnNpbihpKSxsPU1hdGguY29zKHIpLGM9TWF0aC5zaW4ociksZD1NYXRoLmNvcyhvKSx1PU1hdGguc2luKG8pO2lmKCJYWVoiPT09dC5vcmRlcil7bGV0IHA9YSpkLGg9YSp1LG09cypkLF89cyp1O2VbMF09bCpkLGVbNF09LWwqdSxlWzhdPWMsZVsxXT1oK20qYyxlWzVdPXAtXypjLGVbOV09LXMqbCxlWzJdPV8tcCpjLGVbNl09bStoKmMsZVsxMF09YSpsfWVsc2UgaWYoIllYWiI9PT10Lm9yZGVyKXtsZXQgcD1sKmQsaD1sKnUsbT1jKmQsXz1jKnU7ZVswXT1wK18qcyxlWzRdPW0qcy1oLGVbOF09YSpjLGVbMV09YSp1LGVbNV09YSpkLGVbOV09LXMsZVsyXT1oKnMtbSxlWzZdPV8rcCpzLGVbMTBdPWEqbH1lbHNlIGlmKCJaWFkiPT09dC5vcmRlcil7bGV0IHA9bCpkLGg9bCp1LG09YypkLF89Yyp1O2VbMF09cC1fKnMsZVs0XT0tYSp1LGVbOF09bStoKnMsZVsxXT1oK20qcyxlWzVdPWEqZCxlWzldPV8tcCpzLGVbMl09LWEqYyxlWzZdPXMsZVsxMF09YSpsfWVsc2UgaWYoIlpZWCI9PT10Lm9yZGVyKXtsZXQgcD1hKmQsaD1hKnUsbT1zKmQsXz1zKnU7ZVswXT1sKmQsZVs0XT1tKmMtaCxlWzhdPXAqYytfLGVbMV09bCp1LGVbNV09XypjK3AsZVs5XT1oKmMtbSxlWzJdPS1jLGVbNl09cypsLGVbMTBdPWEqbH1lbHNlIGlmKCJZWlgiPT09dC5vcmRlcil7bGV0IHA9YSpsLGg9YSpjLG09cypsLF89cypjO2VbMF09bCpkLGVbNF09Xy1wKnUsZVs4XT1tKnUraCxlWzFdPXUsZVs1XT1hKmQsZVs5XT0tcypkLGVbMl09LWMqZCxlWzZdPWgqdSttLGVbMTBdPXAtXyp1fWVsc2UgaWYoIlhaWSI9PT10Lm9yZGVyKXtsZXQgcD1hKmwsaD1hKmMsbT1zKmwsXz1zKmM7ZVswXT1sKmQsZVs0XT0tdSxlWzhdPWMqZCxlWzFdPXAqdStfLGVbNV09YSpkLGVbOV09aCp1LW0sZVsyXT1tKnUtaCxlWzZdPXMqZCxlWzEwXT1fKnUrcH1yZXR1cm4gZVszXT0wLGVbN109MCxlWzExXT0wLGVbMTJdPTAsZVsxM109MCxlWzE0XT0wLGVbMTVdPTEsdGhpc31tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbih0KXtyZXR1cm4gdGhpcy5jb21wb3NlKHRQZSx0LG5QZSl9bG9va0F0KHQsZSxpKXtsZXQgcj10aGlzLmVsZW1lbnRzO3JldHVybiB3cy5zdWJWZWN0b3JzKHQsZSksMD09PXdzLmxlbmd0aFNxKCkmJih3cy56PTEpLHdzLm5vcm1hbGl6ZSgpLG1wLmNyb3NzVmVjdG9ycyhpLHdzKSwwPT09bXAubGVuZ3RoU3EoKSYmKDE9PT1NYXRoLmFicyhpLnopP3dzLngrPTFlLTQ6d3Mueis9MWUtNCx3cy5ub3JtYWxpemUoKSxtcC5jcm9zc1ZlY3RvcnMoaSx3cykpLG1wLm5vcm1hbGl6ZSgpLFlELmNyb3NzVmVjdG9ycyh3cyxtcCksclswXT1tcC54LHJbNF09WUQueCxyWzhdPXdzLngsclsxXT1tcC55LHJbNV09WUQueSxyWzldPXdzLnksclsyXT1tcC56LHJbNl09WUQueixyWzEwXT13cy56LHRoaXN9bXVsdGlwbHkodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseU1hdHJpY2VzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLm11bHRpcGx5TWF0cmljZXModCxlKSk6dGhpcy5tdWx0aXBseU1hdHJpY2VzKHRoaXMsdCl9cHJlbXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0LHRoaXMpfW11bHRpcGx5TWF0cmljZXModCxlKXtsZXQgaT10LmVsZW1lbnRzLHI9ZS5lbGVtZW50cyxvPXRoaXMuZWxlbWVudHMsYT1pWzBdLHM9aVs0XSxsPWlbOF0sYz1pWzEyXSxkPWlbMV0sdT1pWzVdLHA9aVs5XSxoPWlbMTNdLG09aVsyXSxfPWlbNl0sTT1pWzEwXSx5PWlbMTRdLHg9aVszXSxSPWlbN10sST1pWzExXSxCPWlbMTVdLGVlPXJbMF0sUT1yWzRdLHdlPXJbOF0sUWU9clsxMl0sQWU9clsxXSxEPXJbNV0scmU9cls5XSxjZT1yWzEzXSxoZT1yWzJdLF9lPXJbNl0sJD1yWzEwXSxkZT1yWzE0XSxwZT1yWzNdLEdlPXJbN10sU2U9clsxMV0sRmU9clsxNV07cmV0dXJuIG9bMF09YSplZStzKkFlK2wqaGUrYypwZSxvWzRdPWEqUStzKkQrbCpfZStjKkdlLG9bOF09YSp3ZStzKnJlK2wqJCtjKlNlLG9bMTJdPWEqUWUrcypjZStsKmRlK2MqRmUsb1sxXT1kKmVlK3UqQWUrcCpoZStoKnBlLG9bNV09ZCpRK3UqRCtwKl9lK2gqR2Usb1s5XT1kKndlK3UqcmUrcCokK2gqU2Usb1sxM109ZCpRZSt1KmNlK3AqZGUraCpGZSxvWzJdPW0qZWUrXypBZStNKmhlK3kqcGUsb1s2XT1tKlErXypEK00qX2UreSpHZSxvWzEwXT1tKndlK18qcmUrTSokK3kqU2Usb1sxNF09bSpRZStfKmNlK00qZGUreSpGZSxvWzNdPXgqZWUrUipBZStJKmhlK0IqcGUsb1s3XT14KlErUipEK0kqX2UrQipHZSxvWzExXT14KndlK1IqcmUrSSokK0IqU2Usb1sxNV09eCpRZStSKmNlK0kqZGUrQipGZSx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe2xldCBlPXRoaXMuZWxlbWVudHM7cmV0dXJuIGVbMF0qPXQsZVs0XSo9dCxlWzhdKj10LGVbMTJdKj10LGVbMV0qPXQsZVs1XSo9dCxlWzldKj10LGVbMTNdKj10LGVbMl0qPXQsZVs2XSo9dCxlWzEwXSo9dCxlWzE0XSo9dCxlWzNdKj10LGVbN10qPXQsZVsxMV0qPXQsZVsxNV0qPXQsdGhpc31kZXRlcm1pbmFudCgpe2xldCB0PXRoaXMuZWxlbWVudHMsZT10WzBdLGk9dFs0XSxyPXRbOF0sbz10WzEyXSxhPXRbMV0scz10WzVdLGw9dFs5XSxjPXRbMTNdLGQ9dFsyXSx1PXRbNl0scD10WzEwXSxoPXRbMTRdO3JldHVybiB0WzNdKigrbypsKnUtcipjKnUtbypzKnAraSpjKnArcipzKmgtaSpsKmgpK3RbN10qKCtlKmwqaC1lKmMqcCtvKmEqcC1yKmEqaCtyKmMqZC1vKmwqZCkrdFsxMV0qKCtlKmMqdS1lKnMqaC1vKmEqdStpKmEqaCtvKnMqZC1pKmMqZCkrdFsxNV0qKC1yKnMqZC1lKmwqdStlKnMqcCtyKmEqdS1pKmEqcCtpKmwqZCl9dHJhbnNwb3NlKCl7bGV0IGUsdD10aGlzLmVsZW1lbnRzO3JldHVybiBlPXRbMV0sdFsxXT10WzRdLHRbNF09ZSxlPXRbMl0sdFsyXT10WzhdLHRbOF09ZSxlPXRbNl0sdFs2XT10WzldLHRbOV09ZSxlPXRbM10sdFszXT10WzEyXSx0WzEyXT1lLGU9dFs3XSx0WzddPXRbMTNdLHRbMTNdPWUsZT10WzExXSx0WzExXT10WzE0XSx0WzE0XT1lLHRoaXN9c2V0UG9zaXRpb24odCxlLGkpe2xldCByPXRoaXMuZWxlbWVudHM7cmV0dXJuIHQuaXNWZWN0b3IzPyhyWzEyXT10LngsclsxM109dC55LHJbMTRdPXQueik6KHJbMTJdPXQsclsxM109ZSxyWzE0XT1pKSx0aGlzfWludmVydCgpe2xldCB0PXRoaXMuZWxlbWVudHMsZT10WzBdLGk9dFsxXSxyPXRbMl0sbz10WzNdLGE9dFs0XSxzPXRbNV0sbD10WzZdLGM9dFs3XSxkPXRbOF0sdT10WzldLHA9dFsxMF0saD10WzExXSxtPXRbMTJdLF89dFsxM10sTT10WzE0XSx5PXRbMTVdLHg9dSpNKmMtXypwKmMrXypsKmgtcypNKmgtdSpsKnkrcypwKnksUj1tKnAqYy1kKk0qYy1tKmwqaCthKk0qaCtkKmwqeS1hKnAqeSxJPWQqXypjLW0qdSpjK20qcypoLWEqXypoLWQqcyp5K2EqdSp5LEI9bSp1KmwtZCpfKmwtbSpzKnArYSpfKnArZCpzKk0tYSp1Kk0sZWU9ZSp4K2kqUityKkkrbypCO2lmKDA9PT1lZSlyZXR1cm4gdGhpcy5zZXQoMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCk7bGV0IFE9MS9lZTtyZXR1cm4gdFswXT14KlEsdFsxXT0oXypwKm8tdSpNKm8tXypyKmgraSpNKmgrdSpyKnktaSpwKnkpKlEsdFsyXT0ocypNKm8tXypsKm8rXypyKmMtaSpNKmMtcypyKnkraSpsKnkpKlEsdFszXT0odSpsKm8tcypwKm8tdSpyKmMraSpwKmMrcypyKmgtaSpsKmgpKlEsdFs0XT1SKlEsdFs1XT0oZCpNKm8tbSpwKm8rbSpyKmgtZSpNKmgtZCpyKnkrZSpwKnkpKlEsdFs2XT0obSpsKm8tYSpNKm8tbSpyKmMrZSpNKmMrYSpyKnktZSpsKnkpKlEsdFs3XT0oYSpwKm8tZCpsKm8rZCpyKmMtZSpwKmMtYSpyKmgrZSpsKmgpKlEsdFs4XT1JKlEsdFs5XT0obSp1Km8tZCpfKm8tbSppKmgrZSpfKmgrZCppKnktZSp1KnkpKlEsdFsxMF09KGEqXypvLW0qcypvK20qaSpjLWUqXypjLWEqaSp5K2Uqcyp5KSpRLHRbMTFdPShkKnMqby1hKnUqby1kKmkqYytlKnUqYythKmkqaC1lKnMqaCkqUSx0WzEyXT1CKlEsdFsxM109KGQqXypyLW0qdSpyK20qaSpwLWUqXypwLWQqaSpNK2UqdSpNKSpRLHRbMTRdPShtKnMqci1hKl8qci1tKmkqbCtlKl8qbCthKmkqTS1lKnMqTSkqUSx0WzE1XT0oYSp1KnItZCpzKnIrZCppKmwtZSp1KmwtYSppKnArZSpzKnApKlEsdGhpc31zY2FsZSh0KXtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC54LHI9dC55LG89dC56O3JldHVybiBlWzBdKj1pLGVbNF0qPXIsZVs4XSo9byxlWzFdKj1pLGVbNV0qPXIsZVs5XSo9byxlWzJdKj1pLGVbNl0qPXIsZVsxMF0qPW8sZVszXSo9aSxlWzddKj1yLGVbMTFdKj1vLHRoaXN9Z2V0TWF4U2NhbGVPbkF4aXMoKXtsZXQgdD10aGlzLmVsZW1lbnRzO3JldHVybiBNYXRoLnNxcnQoTWF0aC5tYXgodFswXSp0WzBdK3RbMV0qdFsxXSt0WzJdKnRbMl0sdFs0XSp0WzRdK3RbNV0qdFs1XSt0WzZdKnRbNl0sdFs4XSp0WzhdK3RbOV0qdFs5XSt0WzEwXSp0WzEwXSkpfW1ha2VUcmFuc2xhdGlvbih0LGUsaSl7cmV0dXJuIHRoaXMuc2V0KDEsMCwwLHQsMCwxLDAsZSwwLDAsMSxpLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uWCh0KXtsZXQgZT1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpO3JldHVybiB0aGlzLnNldCgxLDAsMCwwLDAsZSwtaSwwLDAsaSxlLDAsMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25ZKHQpe2xldCBlPU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCk7cmV0dXJuIHRoaXMuc2V0KGUsMCxpLDAsMCwxLDAsMCwtaSwwLGUsMCwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvbloodCl7bGV0IGU9TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KTtyZXR1cm4gdGhpcy5zZXQoZSwtaSwwLDAsaSxlLDAsMCwwLDAsMSwwLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uQXhpcyh0LGUpe2xldCBpPU1hdGguY29zKGUpLHI9TWF0aC5zaW4oZSksbz0xLWksYT10Lngscz10LnksbD10LnosYz1vKmEsZD1vKnM7cmV0dXJuIHRoaXMuc2V0KGMqYStpLGMqcy1yKmwsYypsK3IqcywwLGMqcytyKmwsZCpzK2ksZCpsLXIqYSwwLGMqbC1yKnMsZCpsK3IqYSxvKmwqbCtpLDAsMCwwLDAsMSksdGhpc31tYWtlU2NhbGUodCxlLGkpe3JldHVybiB0aGlzLnNldCh0LDAsMCwwLDAsZSwwLDAsMCwwLGksMCwwLDAsMCwxKSx0aGlzfW1ha2VTaGVhcih0LGUsaSxyLG8sYSl7cmV0dXJuIHRoaXMuc2V0KDEsaSxvLDAsdCwxLGEsMCxlLHIsMSwwLDAsMCwwLDEpLHRoaXN9Y29tcG9zZSh0LGUsaSl7bGV0IHI9dGhpcy5lbGVtZW50cyxvPWUuX3gsYT1lLl95LHM9ZS5feixsPWUuX3csYz1vK28sZD1hK2EsdT1zK3MscD1vKmMsaD1vKmQsbT1vKnUsXz1hKmQsTT1hKnUseT1zKnUseD1sKmMsUj1sKmQsST1sKnUsQj1pLngsZWU9aS55LFE9aS56O3JldHVybiByWzBdPSgxLShfK3kpKSpCLHJbMV09KGgrSSkqQixyWzJdPShtLVIpKkIsclszXT0wLHJbNF09KGgtSSkqZWUscls1XT0oMS0ocCt5KSkqZWUscls2XT0oTSt4KSplZSxyWzddPTAscls4XT0obStSKSpRLHJbOV09KE0teCkqUSxyWzEwXT0oMS0ocCtfKSkqUSxyWzExXT0wLHJbMTJdPXQueCxyWzEzXT10LnksclsxNF09dC56LHJbMTVdPTEsdGhpc31kZWNvbXBvc2UodCxlLGkpe2xldCByPXRoaXMuZWxlbWVudHMsbz1UMC5zZXQoclswXSxyWzFdLHJbMl0pLmxlbmd0aCgpLGE9VDAuc2V0KHJbNF0scls1XSxyWzZdKS5sZW5ndGgoKSxzPVQwLnNldChyWzhdLHJbOV0sclsxMF0pLmxlbmd0aCgpO3RoaXMuZGV0ZXJtaW5hbnQoKTwwJiYobz0tbyksdC54PXJbMTJdLHQueT1yWzEzXSx0Lno9clsxNF0sV2wuY29weSh0aGlzKTtsZXQgYz0xL28sZD0xL2EsdT0xL3M7cmV0dXJuIFdsLmVsZW1lbnRzWzBdKj1jLFdsLmVsZW1lbnRzWzFdKj1jLFdsLmVsZW1lbnRzWzJdKj1jLFdsLmVsZW1lbnRzWzRdKj1kLFdsLmVsZW1lbnRzWzVdKj1kLFdsLmVsZW1lbnRzWzZdKj1kLFdsLmVsZW1lbnRzWzhdKj11LFdsLmVsZW1lbnRzWzldKj11LFdsLmVsZW1lbnRzWzEwXSo9dSxlLnNldEZyb21Sb3RhdGlvbk1hdHJpeChXbCksaS54PW8saS55PWEsaS56PXMsdGhpc31tYWtlUGVyc3BlY3RpdmUodCxlLGkscixvLGEpe3ZvaWQgMD09PWEmJmNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm1ha2VQZXJzcGVjdGl2ZSgpIGhhcyBiZWVuIHJlZGVmaW5lZCBhbmQgaGFzIGEgbmV3IHNpZ25hdHVyZS4gUGxlYXNlIGNoZWNrIHRoZSBkb2NzLiIpO2xldCBzPXRoaXMuZWxlbWVudHMsYz0yKm8vKGktciksZD0oZSt0KS8oZS10KSx1PShpK3IpLyhpLXIpLHA9LShhK28pLyhhLW8pLGg9LTIqYSpvLyhhLW8pO3JldHVybiBzWzBdPTIqby8oZS10KSxzWzRdPTAsc1s4XT1kLHNbMTJdPTAsc1sxXT0wLHNbNV09YyxzWzldPXUsc1sxM109MCxzWzJdPTAsc1s2XT0wLHNbMTBdPXAsc1sxNF09aCxzWzNdPTAsc1s3XT0wLHNbMTFdPS0xLHNbMTVdPTAsdGhpc31tYWtlT3J0aG9ncmFwaGljKHQsZSxpLHIsbyxhKXtsZXQgcz10aGlzLmVsZW1lbnRzLGw9MS8oZS10KSxjPTEvKGktciksZD0xLyhhLW8pLHU9KGUrdCkqbCxwPShpK3IpKmMsaD0oYStvKSpkO3JldHVybiBzWzBdPTIqbCxzWzRdPTAsc1s4XT0wLHNbMTJdPS11LHNbMV09MCxzWzVdPTIqYyxzWzldPTAsc1sxM109LXAsc1syXT0wLHNbNl09MCxzWzEwXT0tMipkLHNbMTRdPS1oLHNbM109MCxzWzddPTAsc1sxMV09MCxzWzE1XT0xLHRoaXN9ZXF1YWxzKHQpe2xldCBlPXRoaXMuZWxlbWVudHMsaT10LmVsZW1lbnRzO2ZvcihsZXQgcj0wO3I8MTY7cisrKWlmKGVbcl0hPT1pW3JdKXJldHVybiExO3JldHVybiEwfWZyb21BcnJheSh0LGU9MCl7Zm9yKGxldCBpPTA7aTwxNjtpKyspdGhpcy5lbGVtZW50c1tpXT10W2krZV07cmV0dXJuIHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7bGV0IGk9dGhpcy5lbGVtZW50cztyZXR1cm4gdFtlXT1pWzBdLHRbZSsxXT1pWzFdLHRbZSsyXT1pWzJdLHRbZSszXT1pWzNdLHRbZSs0XT1pWzRdLHRbZSs1XT1pWzVdLHRbZSs2XT1pWzZdLHRbZSs3XT1pWzddLHRbZSs4XT1pWzhdLHRbZSs5XT1pWzldLHRbZSsxMF09aVsxMF0sdFtlKzExXT1pWzExXSx0W2UrMTJdPWlbMTJdLHRbZSsxM109aVsxM10sdFtlKzE0XT1pWzE0XSx0W2UrMTVdPWlbMTVdLHR9fTt2bi5wcm90b3R5cGUuaXNNYXRyaXg0PSEwO3ZhciBUMD1uZXcgSyxXbD1uZXcgdm4sdFBlPW5ldyBLKDAsMCwwKSxuUGU9bmV3IEsoMSwxLDEpLG1wPW5ldyBLLFlEPW5ldyBLLHdzPW5ldyBLLG9lZT1uZXcgdm4sYWVlPW5ldyBvYSxUcD1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT0wLGk9MCxyPVRwLkRlZmF1bHRPcmRlcil7dGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl96PWksdGhpcy5fb3JkZXI9cn1nZXQgeCgpe3JldHVybiB0aGlzLl94fXNldCB4KHQpe3RoaXMuX3g9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHkoKXtyZXR1cm4gdGhpcy5feX1zZXQgeSh0KXt0aGlzLl95PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB6KCl7cmV0dXJuIHRoaXMuX3p9c2V0IHoodCl7dGhpcy5fej10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgb3JkZXIoKXtyZXR1cm4gdGhpcy5fb3JkZXJ9c2V0IG9yZGVyKHQpe3RoaXMuX29yZGVyPXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfXNldCh0LGUsaSxyPXRoaXMuX29yZGVyKXtyZXR1cm4gdGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl96PWksdGhpcy5fb3JkZXI9cix0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLl94LHRoaXMuX3ksdGhpcy5feix0aGlzLl9vcmRlcil9Y29weSh0KXtyZXR1cm4gdGhpcy5feD10Ll94LHRoaXMuX3k9dC5feSx0aGlzLl96PXQuX3osdGhpcy5fb3JkZXI9dC5fb3JkZXIsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVJvdGF0aW9uTWF0cml4KHQsZT10aGlzLl9vcmRlcixpPSEwKXtsZXQgcj10LmVsZW1lbnRzLG89clswXSxhPXJbNF0scz1yWzhdLGw9clsxXSxjPXJbNV0sZD1yWzldLHU9clsyXSxwPXJbNl0saD1yWzEwXTtzd2l0Y2goZSl7Y2FzZSJYWVoiOnRoaXMuX3k9TWF0aC5hc2luKGVzKHMsLTEsMSkpLE1hdGguYWJzKHMpPC45OTk5OTk5Pyh0aGlzLl94PU1hdGguYXRhbjIoLWQsaCksdGhpcy5fej1NYXRoLmF0YW4yKC1hLG8pKToodGhpcy5feD1NYXRoLmF0YW4yKHAsYyksdGhpcy5fej0wKTticmVhaztjYXNlIllYWiI6dGhpcy5feD1NYXRoLmFzaW4oLWVzKGQsLTEsMSkpLE1hdGguYWJzKGQpPC45OTk5OTk5Pyh0aGlzLl95PU1hdGguYXRhbjIocyxoKSx0aGlzLl96PU1hdGguYXRhbjIobCxjKSk6KHRoaXMuX3k9TWF0aC5hdGFuMigtdSxvKSx0aGlzLl96PTApO2JyZWFrO2Nhc2UiWlhZIjp0aGlzLl94PU1hdGguYXNpbihlcyhwLC0xLDEpKSxNYXRoLmFicyhwKTwuOTk5OTk5OT8odGhpcy5feT1NYXRoLmF0YW4yKC11LGgpLHRoaXMuX3o9TWF0aC5hdGFuMigtYSxjKSk6KHRoaXMuX3k9MCx0aGlzLl96PU1hdGguYXRhbjIobCxvKSk7YnJlYWs7Y2FzZSJaWVgiOnRoaXMuX3k9TWF0aC5hc2luKC1lcyh1LC0xLDEpKSxNYXRoLmFicyh1KTwuOTk5OTk5OT8odGhpcy5feD1NYXRoLmF0YW4yKHAsaCksdGhpcy5fej1NYXRoLmF0YW4yKGwsbykpOih0aGlzLl94PTAsdGhpcy5fej1NYXRoLmF0YW4yKC1hLGMpKTticmVhaztjYXNlIllaWCI6dGhpcy5fej1NYXRoLmFzaW4oZXMobCwtMSwxKSksTWF0aC5hYnMobCk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMigtZCxjKSx0aGlzLl95PU1hdGguYXRhbjIoLXUsbykpOih0aGlzLl94PTAsdGhpcy5feT1NYXRoLmF0YW4yKHMsaCkpO2JyZWFrO2Nhc2UiWFpZIjp0aGlzLl96PU1hdGguYXNpbigtZXMoYSwtMSwxKSksTWF0aC5hYnMoYSk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMihwLGMpLHRoaXMuX3k9TWF0aC5hdGFuMihzLG8pKToodGhpcy5feD1NYXRoLmF0YW4yKC1kLGgpLHRoaXMuX3k9MCk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLkV1bGVyOiAuc2V0RnJvbVJvdGF0aW9uTWF0cml4KCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogIitlKX1yZXR1cm4gdGhpcy5fb3JkZXI9ZSwhMD09PWkmJnRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21RdWF0ZXJuaW9uKHQsZSxpKXtyZXR1cm4gb2VlLm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHQpLHRoaXMuc2V0RnJvbVJvdGF0aW9uTWF0cml4KG9lZSxlLGkpfXNldEZyb21WZWN0b3IzKHQsZT10aGlzLl9vcmRlcil7cmV0dXJuIHRoaXMuc2V0KHQueCx0LnksdC56LGUpfXJlb3JkZXIodCl7cmV0dXJuIGFlZS5zZXRGcm9tRXVsZXIodGhpcyksdGhpcy5zZXRGcm9tUXVhdGVybmlvbihhZWUsdCl9ZXF1YWxzKHQpe3JldHVybiB0Ll94PT09dGhpcy5feCYmdC5feT09PXRoaXMuX3kmJnQuX3o9PT10aGlzLl96JiZ0Ll9vcmRlcj09PXRoaXMuX29yZGVyfWZyb21BcnJheSh0KXtyZXR1cm4gdGhpcy5feD10WzBdLHRoaXMuX3k9dFsxXSx0aGlzLl96PXRbMl0sdm9pZCAwIT09dFszXSYmKHRoaXMuX29yZGVyPXRbM10pLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXRvQXJyYXkodD1bXSxlPTApe3JldHVybiB0W2VdPXRoaXMuX3gsdFtlKzFdPXRoaXMuX3ksdFtlKzJdPXRoaXMuX3osdFtlKzNdPXRoaXMuX29yZGVyLHR9dG9WZWN0b3IzKHQpe3JldHVybiB0P3Quc2V0KHRoaXMuX3gsdGhpcy5feSx0aGlzLl96KTpuZXcgSyh0aGlzLl94LHRoaXMuX3ksdGhpcy5feil9X29uQ2hhbmdlKHQpe3JldHVybiB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrPXQsdGhpc31fb25DaGFuZ2VDYWxsYmFjaygpe319O1RwLnByb3RvdHlwZS5pc0V1bGVyPSEwLFRwLkRlZmF1bHRPcmRlcj0iWFlaIixUcC5Sb3RhdGlvbk9yZGVycz1bIlhZWiIsIllaWCIsIlpYWSIsIlhaWSIsIllYWiIsIlpZWCJdO3ZhciBFST1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMubWFzaz0xfXNldCh0KXt0aGlzLm1hc2s9KDE8PHR8MCk+Pj4wfWVuYWJsZSh0KXt0aGlzLm1hc2t8PTE8PHR8MH1lbmFibGVBbGwoKXt0aGlzLm1hc2s9LTF9dG9nZ2xlKHQpe3RoaXMubWFza149MTw8dHwwfWRpc2FibGUodCl7dGhpcy5tYXNrJj1+KDE8PHR8MCl9ZGlzYWJsZUFsbCgpe3RoaXMubWFzaz0wfXRlc3QodCl7cmV0dXJuIDAhPSh0aGlzLm1hc2smdC5tYXNrKX1pc0VuYWJsZWQodCl7cmV0dXJuIDAhPSh0aGlzLm1hc2smKDE8PHR8MCkpfX0saVBlPTAsc2VlPW5ldyBLLEQwPW5ldyBvYSxMZD1uZXcgdm4sUUQ9bmV3IEssYXg9bmV3IEssclBlPW5ldyBLLG9QZT1uZXcgb2EsbGVlPW5ldyBLKDEsMCwwKSxjZWU9bmV3IEsoMCwxLDApLGRlZT1uZXcgSygwLDAsMSksYVBlPXt0eXBlOiJhZGRlZCJ9LHVlZT17dHlwZToicmVtb3ZlZCJ9LFVpPWNsYXNzIGV4dGVuZHMgemR7Y29uc3RydWN0b3IoKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOmlQZSsrfSksdGhpcy51dWlkPVlsKCksdGhpcy5uYW1lPSIiLHRoaXMudHlwZT0iT2JqZWN0M0QiLHRoaXMucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbj1bXSx0aGlzLnVwPVVpLkRlZmF1bHRVcC5jbG9uZSgpO2xldCB0PW5ldyBLLGU9bmV3IFRwLGk9bmV3IG9hLHI9bmV3IEsoMSwxLDEpO2UuX29uQ2hhbmdlKGZ1bmN0aW9uKCl7aS5zZXRGcm9tRXVsZXIoZSwhMSl9KSxpLl9vbkNoYW5nZShmdW5jdGlvbigpe2Uuc2V0RnJvbVF1YXRlcm5pb24oaSx2b2lkIDAsITEpfSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7cG9zaXRpb246e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOnR9LHJvdGF0aW9uOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTplfSxxdWF0ZXJuaW9uOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTppfSxzY2FsZTp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6cn0sbW9kZWxWaWV3TWF0cml4Ont2YWx1ZTpuZXcgdm59LG5vcm1hbE1hdHJpeDp7dmFsdWU6bmV3IHlvfX0pLHRoaXMubWF0cml4PW5ldyB2bix0aGlzLm1hdHJpeFdvcmxkPW5ldyB2bix0aGlzLm1hdHJpeEF1dG9VcGRhdGU9VWkuRGVmYXVsdE1hdHJpeEF1dG9VcGRhdGUsdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSExLHRoaXMubGF5ZXJzPW5ldyBFSSx0aGlzLnZpc2libGU9ITAsdGhpcy5jYXN0U2hhZG93PSExLHRoaXMucmVjZWl2ZVNoYWRvdz0hMSx0aGlzLmZydXN0dW1DdWxsZWQ9ITAsdGhpcy5yZW5kZXJPcmRlcj0wLHRoaXMuYW5pbWF0aW9ucz1bXSx0aGlzLnVzZXJEYXRhPXt9fW9uQmVmb3JlUmVuZGVyKCl7fW9uQWZ0ZXJSZW5kZXIoKXt9YXBwbHlNYXRyaXg0KHQpe3RoaXMubWF0cml4QXV0b1VwZGF0ZSYmdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLm1hdHJpeC5wcmVtdWx0aXBseSh0KSx0aGlzLm1hdHJpeC5kZWNvbXBvc2UodGhpcy5wb3NpdGlvbix0aGlzLnF1YXRlcm5pb24sdGhpcy5zY2FsZSl9YXBwbHlRdWF0ZXJuaW9uKHQpe3JldHVybiB0aGlzLnF1YXRlcm5pb24ucHJlbXVsdGlwbHkodCksdGhpc31zZXRSb3RhdGlvbkZyb21BeGlzQW5nbGUodCxlKXt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbUF4aXNBbmdsZSh0LGUpfXNldFJvdGF0aW9uRnJvbUV1bGVyKHQpe3RoaXMucXVhdGVybmlvbi5zZXRGcm9tRXVsZXIodCwhMCl9c2V0Um90YXRpb25Gcm9tTWF0cml4KHQpe3RoaXMucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgodCl9c2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbih0KXt0aGlzLnF1YXRlcm5pb24uY29weSh0KX1yb3RhdGVPbkF4aXModCxlKXtyZXR1cm4gRDAuc2V0RnJvbUF4aXNBbmdsZSh0LGUpLHRoaXMucXVhdGVybmlvbi5tdWx0aXBseShEMCksdGhpc31yb3RhdGVPbldvcmxkQXhpcyh0LGUpe3JldHVybiBEMC5zZXRGcm9tQXhpc0FuZ2xlKHQsZSksdGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KEQwKSx0aGlzfXJvdGF0ZVgodCl7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKGxlZSx0KX1yb3RhdGVZKHQpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyhjZWUsdCl9cm90YXRlWih0KXtyZXR1cm4gdGhpcy5yb3RhdGVPbkF4aXMoZGVlLHQpfXRyYW5zbGF0ZU9uQXhpcyh0LGUpe3JldHVybiBzZWUuY29weSh0KS5hcHBseVF1YXRlcm5pb24odGhpcy5xdWF0ZXJuaW9uKSx0aGlzLnBvc2l0aW9uLmFkZChzZWUubXVsdGlwbHlTY2FsYXIoZSkpLHRoaXN9dHJhbnNsYXRlWCh0KXtyZXR1cm4gdGhpcy50cmFuc2xhdGVPbkF4aXMobGVlLHQpfXRyYW5zbGF0ZVkodCl7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKGNlZSx0KX10cmFuc2xhdGVaKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyhkZWUsdCl9bG9jYWxUb1dvcmxkKHQpe3JldHVybiB0LmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKX13b3JsZFRvTG9jYWwodCl7cmV0dXJuIHQuYXBwbHlNYXRyaXg0KExkLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCkpfWxvb2tBdCh0LGUsaSl7dC5pc1ZlY3RvcjM/UUQuY29weSh0KTpRRC5zZXQodCxlLGkpO2xldCByPXRoaXMucGFyZW50O3RoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLGF4LnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKSx0aGlzLmlzQ2FtZXJhfHx0aGlzLmlzTGlnaHQ/TGQubG9va0F0KGF4LFFELHRoaXMudXApOkxkLmxvb2tBdChRRCxheCx0aGlzLnVwKSx0aGlzLnF1YXRlcm5pb24uc2V0RnJvbVJvdGF0aW9uTWF0cml4KExkKSxyJiYoTGQuZXh0cmFjdFJvdGF0aW9uKHIubWF0cml4V29ybGQpLEQwLnNldEZyb21Sb3RhdGlvbk1hdHJpeChMZCksdGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KEQwLmludmVydCgpKSl9YWRkKHQpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSl7Zm9yKGxldCBlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0aGlzLmFkZChhcmd1bWVudHNbZV0pO3JldHVybiB0aGlzfXJldHVybiB0PT09dGhpcz8oY29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0M0QuYWRkOiBvYmplY3QgY2FuJ3QgYmUgYWRkZWQgYXMgYSBjaGlsZCBvZiBpdHNlbGYuIix0KSx0aGlzKToodCYmdC5pc09iamVjdDNEPyhudWxsIT09dC5wYXJlbnQmJnQucGFyZW50LnJlbW92ZSh0KSx0LnBhcmVudD10aGlzLHRoaXMuY2hpbGRyZW4ucHVzaCh0KSx0LmRpc3BhdGNoRXZlbnQoYVBlKSk6Y29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0M0QuYWRkOiBvYmplY3Qgbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLk9iamVjdDNELiIsdCksdGhpcyl9cmVtb3ZlKHQpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSl7Zm9yKGxldCBpPTA7aTxhcmd1bWVudHMubGVuZ3RoO2krKyl0aGlzLnJlbW92ZShhcmd1bWVudHNbaV0pO3JldHVybiB0aGlzfWxldCBlPXRoaXMuY2hpbGRyZW4uaW5kZXhPZih0KTtyZXR1cm4tMSE9PWUmJih0LnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW4uc3BsaWNlKGUsMSksdC5kaXNwYXRjaEV2ZW50KHVlZSkpLHRoaXN9cmVtb3ZlRnJvbVBhcmVudCgpe2xldCB0PXRoaXMucGFyZW50O3JldHVybiBudWxsIT09dCYmdC5yZW1vdmUodGhpcyksdGhpc31jbGVhcigpe2ZvcihsZXQgdD0wO3Q8dGhpcy5jaGlsZHJlbi5sZW5ndGg7dCsrKXtsZXQgZT10aGlzLmNoaWxkcmVuW3RdO2UucGFyZW50PW51bGwsZS5kaXNwYXRjaEV2ZW50KHVlZSl9cmV0dXJuIHRoaXMuY2hpbGRyZW4ubGVuZ3RoPTAsdGhpc31hdHRhY2godCl7cmV0dXJuIHRoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLExkLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCksbnVsbCE9PXQucGFyZW50JiYodC5wYXJlbnQudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLExkLm11bHRpcGx5KHQucGFyZW50Lm1hdHJpeFdvcmxkKSksdC5hcHBseU1hdHJpeDQoTGQpLHRoaXMuYWRkKHQpLHQudXBkYXRlV29ybGRNYXRyaXgoITEsITApLHRoaXN9Z2V0T2JqZWN0QnlJZCh0KXtyZXR1cm4gdGhpcy5nZXRPYmplY3RCeVByb3BlcnR5KCJpZCIsdCl9Z2V0T2JqZWN0QnlOYW1lKHQpe3JldHVybiB0aGlzLmdldE9iamVjdEJ5UHJvcGVydHkoIm5hbWUiLHQpfWdldE9iamVjdEJ5UHJvcGVydHkodCxlKXtpZih0aGlzW3RdPT09ZSlyZXR1cm4gdGhpcztmb3IobGV0IGk9MCxyPXRoaXMuY2hpbGRyZW4ubGVuZ3RoO2k8cjtpKyspe2xldCBhPXRoaXMuY2hpbGRyZW5baV0uZ2V0T2JqZWN0QnlQcm9wZXJ0eSh0LGUpO2lmKHZvaWQgMCE9PWEpcmV0dXJuIGF9fWdldFdvcmxkUG9zaXRpb24odCl7cmV0dXJuIHRoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpfWdldFdvcmxkUXVhdGVybmlvbih0KXtyZXR1cm4gdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdGhpcy5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoYXgsdCxyUGUpLHR9Z2V0V29ybGRTY2FsZSh0KXtyZXR1cm4gdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdGhpcy5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoYXgsb1BlLHQpLHR9Z2V0V29ybGREaXJlY3Rpb24odCl7dGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSk7bGV0IGU9dGhpcy5tYXRyaXhXb3JsZC5lbGVtZW50cztyZXR1cm4gdC5zZXQoZVs4XSxlWzldLGVbMTBdKS5ub3JtYWxpemUoKX1yYXljYXN0KCl7fXRyYXZlcnNlKHQpe3QodGhpcyk7bGV0IGU9dGhpcy5jaGlsZHJlbjtmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2k8cjtpKyspZVtpXS50cmF2ZXJzZSh0KX10cmF2ZXJzZVZpc2libGUodCl7aWYoITE9PT10aGlzLnZpc2libGUpcmV0dXJuO3QodGhpcyk7bGV0IGU9dGhpcy5jaGlsZHJlbjtmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2k8cjtpKyspZVtpXS50cmF2ZXJzZVZpc2libGUodCl9dHJhdmVyc2VBbmNlc3RvcnModCl7bGV0IGU9dGhpcy5wYXJlbnQ7bnVsbCE9PWUmJih0KGUpLGUudHJhdmVyc2VBbmNlc3RvcnModCkpfXVwZGF0ZU1hdHJpeCgpe3RoaXMubWF0cml4LmNvbXBvc2UodGhpcy5wb3NpdGlvbix0aGlzLnF1YXRlcm5pb24sdGhpcy5zY2FsZSksdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe3RoaXMubWF0cml4QXV0b1VwZGF0ZSYmdGhpcy51cGRhdGVNYXRyaXgoKSwodGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlfHx0KSYmKG51bGw9PT10aGlzLnBhcmVudD90aGlzLm1hdHJpeFdvcmxkLmNvcHkodGhpcy5tYXRyaXgpOnRoaXMubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcyh0aGlzLnBhcmVudC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeCksdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSExLHQ9ITApO2xldCBlPXRoaXMuY2hpbGRyZW47Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpPHI7aSsrKWVbaV0udXBkYXRlTWF0cml4V29ybGQodCl9dXBkYXRlV29ybGRNYXRyaXgodCxlKXtsZXQgaT10aGlzLnBhcmVudDtpZighMD09PXQmJm51bGwhPT1pJiZpLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0aGlzLm1hdHJpeEF1dG9VcGRhdGUmJnRoaXMudXBkYXRlTWF0cml4KCksbnVsbD09PXRoaXMucGFyZW50P3RoaXMubWF0cml4V29ybGQuY29weSh0aGlzLm1hdHJpeCk6dGhpcy5tYXRyaXhXb3JsZC5tdWx0aXBseU1hdHJpY2VzKHRoaXMucGFyZW50Lm1hdHJpeFdvcmxkLHRoaXMubWF0cml4KSwhMD09PWUpe2xldCByPXRoaXMuY2hpbGRyZW47Zm9yKGxldCBvPTAsYT1yLmxlbmd0aDtvPGE7bysrKXJbb10udXBkYXRlV29ybGRNYXRyaXgoITEsITApfX10b0pTT04odCl7bGV0IGU9dm9pZCAwPT09dHx8InN0cmluZyI9PXR5cGVvZiB0LGk9e307ZSYmKHQ9e2dlb21ldHJpZXM6e30sbWF0ZXJpYWxzOnt9LHRleHR1cmVzOnt9LGltYWdlczp7fSxzaGFwZXM6e30sc2tlbGV0b25zOnt9LGFuaW1hdGlvbnM6e319LGkubWV0YWRhdGE9e3ZlcnNpb246NC41LHR5cGU6Ik9iamVjdCIsZ2VuZXJhdG9yOiJPYmplY3QzRC50b0pTT04ifSk7bGV0IHI9e307ZnVuY3Rpb24gbyhzLGwpe3JldHVybiB2b2lkIDA9PT1zW2wudXVpZF0mJihzW2wudXVpZF09bC50b0pTT04odCkpLGwudXVpZH1pZihyLnV1aWQ9dGhpcy51dWlkLHIudHlwZT10aGlzLnR5cGUsIiIhPT10aGlzLm5hbWUmJihyLm5hbWU9dGhpcy5uYW1lKSwhMD09PXRoaXMuY2FzdFNoYWRvdyYmKHIuY2FzdFNoYWRvdz0hMCksITA9PT10aGlzLnJlY2VpdmVTaGFkb3cmJihyLnJlY2VpdmVTaGFkb3c9ITApLCExPT09dGhpcy52aXNpYmxlJiYoci52aXNpYmxlPSExKSwhMT09PXRoaXMuZnJ1c3R1bUN1bGxlZCYmKHIuZnJ1c3R1bUN1bGxlZD0hMSksMCE9PXRoaXMucmVuZGVyT3JkZXImJihyLnJlbmRlck9yZGVyPXRoaXMucmVuZGVyT3JkZXIpLCJ7fSIhPT1KU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJEYXRhKSYmKHIudXNlckRhdGE9dGhpcy51c2VyRGF0YSksci5sYXllcnM9dGhpcy5sYXllcnMubWFzayxyLm1hdHJpeD10aGlzLm1hdHJpeC50b0FycmF5KCksITE9PT10aGlzLm1hdHJpeEF1dG9VcGRhdGUmJihyLm1hdHJpeEF1dG9VcGRhdGU9ITEpLHRoaXMuaXNJbnN0YW5jZWRNZXNoJiYoci50eXBlPSJJbnN0YW5jZWRNZXNoIixyLmNvdW50PXRoaXMuY291bnQsci5pbnN0YW5jZU1hdHJpeD10aGlzLmluc3RhbmNlTWF0cml4LnRvSlNPTigpLG51bGwhPT10aGlzLmluc3RhbmNlQ29sb3ImJihyLmluc3RhbmNlQ29sb3I9dGhpcy5pbnN0YW5jZUNvbG9yLnRvSlNPTigpKSksdGhpcy5pc1NjZW5lKXRoaXMuYmFja2dyb3VuZCYmKHRoaXMuYmFja2dyb3VuZC5pc0NvbG9yP3IuYmFja2dyb3VuZD10aGlzLmJhY2tncm91bmQudG9KU09OKCk6dGhpcy5iYWNrZ3JvdW5kLmlzVGV4dHVyZSYmKHIuYmFja2dyb3VuZD10aGlzLmJhY2tncm91bmQudG9KU09OKHQpLnV1aWQpKSx0aGlzLmVudmlyb25tZW50JiZ0aGlzLmVudmlyb25tZW50LmlzVGV4dHVyZSYmKHIuZW52aXJvbm1lbnQ9dGhpcy5lbnZpcm9ubWVudC50b0pTT04odCkudXVpZCk7ZWxzZSBpZih0aGlzLmlzTWVzaHx8dGhpcy5pc0xpbmV8fHRoaXMuaXNQb2ludHMpe3IuZ2VvbWV0cnk9byh0Lmdlb21ldHJpZXMsdGhpcy5nZW9tZXRyeSk7bGV0IHM9dGhpcy5nZW9tZXRyeS5wYXJhbWV0ZXJzO2lmKHZvaWQgMCE9PXMmJnZvaWQgMCE9PXMuc2hhcGVzKXtsZXQgbD1zLnNoYXBlcztpZihBcnJheS5pc0FycmF5KGwpKWZvcihsZXQgYz0wLGQ9bC5sZW5ndGg7YzxkO2MrKylvKHQuc2hhcGVzLGxbY10pO2Vsc2Ugbyh0LnNoYXBlcyxsKX19aWYodGhpcy5pc1NraW5uZWRNZXNoJiYoci5iaW5kTW9kZT10aGlzLmJpbmRNb2RlLHIuYmluZE1hdHJpeD10aGlzLmJpbmRNYXRyaXgudG9BcnJheSgpLHZvaWQgMCE9PXRoaXMuc2tlbGV0b24mJihvKHQuc2tlbGV0b25zLHRoaXMuc2tlbGV0b24pLHIuc2tlbGV0b249dGhpcy5za2VsZXRvbi51dWlkKSksdm9pZCAwIT09dGhpcy5tYXRlcmlhbClpZihBcnJheS5pc0FycmF5KHRoaXMubWF0ZXJpYWwpKXtsZXQgcz1bXTtmb3IobGV0IGw9MCxjPXRoaXMubWF0ZXJpYWwubGVuZ3RoO2w8YztsKyspcy5wdXNoKG8odC5tYXRlcmlhbHMsdGhpcy5tYXRlcmlhbFtsXSkpO3IubWF0ZXJpYWw9c31lbHNlIHIubWF0ZXJpYWw9byh0Lm1hdGVyaWFscyx0aGlzLm1hdGVyaWFsKTtpZih0aGlzLmNoaWxkcmVuLmxlbmd0aD4wKXtyLmNoaWxkcmVuPVtdO2ZvcihsZXQgcz0wO3M8dGhpcy5jaGlsZHJlbi5sZW5ndGg7cysrKXIuY2hpbGRyZW4ucHVzaCh0aGlzLmNoaWxkcmVuW3NdLnRvSlNPTih0KS5vYmplY3QpfWlmKHRoaXMuYW5pbWF0aW9ucy5sZW5ndGg+MCl7ci5hbmltYXRpb25zPVtdO2ZvcihsZXQgcz0wO3M8dGhpcy5hbmltYXRpb25zLmxlbmd0aDtzKyspci5hbmltYXRpb25zLnB1c2gobyh0LmFuaW1hdGlvbnMsdGhpcy5hbmltYXRpb25zW3NdKSl9aWYoZSl7bGV0IHM9YSh0Lmdlb21ldHJpZXMpLGw9YSh0Lm1hdGVyaWFscyksYz1hKHQudGV4dHVyZXMpLGQ9YSh0LmltYWdlcyksdT1hKHQuc2hhcGVzKSxwPWEodC5za2VsZXRvbnMpLGg9YSh0LmFuaW1hdGlvbnMpO3MubGVuZ3RoPjAmJihpLmdlb21ldHJpZXM9cyksbC5sZW5ndGg+MCYmKGkubWF0ZXJpYWxzPWwpLGMubGVuZ3RoPjAmJihpLnRleHR1cmVzPWMpLGQubGVuZ3RoPjAmJihpLmltYWdlcz1kKSx1Lmxlbmd0aD4wJiYoaS5zaGFwZXM9dSkscC5sZW5ndGg+MCYmKGkuc2tlbGV0b25zPXApLGgubGVuZ3RoPjAmJihpLmFuaW1hdGlvbnM9aCl9cmV0dXJuIGkub2JqZWN0PXIsaTtmdW5jdGlvbiBhKHMpe2xldCBsPVtdO2ZvcihsZXQgYyBpbiBzKXtsZXQgZD1zW2NdO2RlbGV0ZSBkLm1ldGFkYXRhLGwucHVzaChkKX1yZXR1cm4gbH19Y2xvbmUodCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMsdCl9Y29weSh0LGU9ITApe2lmKHRoaXMubmFtZT10Lm5hbWUsdGhpcy51cC5jb3B5KHQudXApLHRoaXMucG9zaXRpb24uY29weSh0LnBvc2l0aW9uKSx0aGlzLnJvdGF0aW9uLm9yZGVyPXQucm90YXRpb24ub3JkZXIsdGhpcy5xdWF0ZXJuaW9uLmNvcHkodC5xdWF0ZXJuaW9uKSx0aGlzLnNjYWxlLmNvcHkodC5zY2FsZSksdGhpcy5tYXRyaXguY29weSh0Lm1hdHJpeCksdGhpcy5tYXRyaXhXb3JsZC5jb3B5KHQubWF0cml4V29ybGQpLHRoaXMubWF0cml4QXV0b1VwZGF0ZT10Lm1hdHJpeEF1dG9VcGRhdGUsdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPXQubWF0cml4V29ybGROZWVkc1VwZGF0ZSx0aGlzLmxheWVycy5tYXNrPXQubGF5ZXJzLm1hc2ssdGhpcy52aXNpYmxlPXQudmlzaWJsZSx0aGlzLmNhc3RTaGFkb3c9dC5jYXN0U2hhZG93LHRoaXMucmVjZWl2ZVNoYWRvdz10LnJlY2VpdmVTaGFkb3csdGhpcy5mcnVzdHVtQ3VsbGVkPXQuZnJ1c3R1bUN1bGxlZCx0aGlzLnJlbmRlck9yZGVyPXQucmVuZGVyT3JkZXIsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSwhMD09PWUpZm9yKGxldCBpPTA7aTx0LmNoaWxkcmVuLmxlbmd0aDtpKyspdGhpcy5hZGQodC5jaGlsZHJlbltpXS5jbG9uZSgpKTtyZXR1cm4gdGhpc319O1VpLkRlZmF1bHRVcD1uZXcgSygwLDEsMCksVWkuRGVmYXVsdE1hdHJpeEF1dG9VcGRhdGU9ITAsVWkucHJvdG90eXBlLmlzT2JqZWN0M0Q9ITA7dmFyIHFsPW5ldyBLLEJkPW5ldyBLLEUzPW5ldyBLLFZkPW5ldyBLLEkwPW5ldyBLLEEwPW5ldyBLLHBlZT1uZXcgSyxUMz1uZXcgSyxEMz1uZXcgSyxJMz1uZXcgSyxWcj1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBLLGU9bmV3IEssaT1uZXcgSyl7dGhpcy5hPXQsdGhpcy5iPWUsdGhpcy5jPWl9c3RhdGljIGdldE5vcm1hbCh0LGUsaSxyKXtyLnN1YlZlY3RvcnMoaSxlKSxxbC5zdWJWZWN0b3JzKHQsZSksci5jcm9zcyhxbCk7bGV0IG89ci5sZW5ndGhTcSgpO3JldHVybiBvPjA/ci5tdWx0aXBseVNjYWxhcigxL01hdGguc3FydChvKSk6ci5zZXQoMCwwLDApfXN0YXRpYyBnZXRCYXJ5Y29vcmQodCxlLGkscixvKXtxbC5zdWJWZWN0b3JzKHIsZSksQmQuc3ViVmVjdG9ycyhpLGUpLEUzLnN1YlZlY3RvcnModCxlKTtsZXQgYT1xbC5kb3QocWwpLHM9cWwuZG90KEJkKSxsPXFsLmRvdChFMyksYz1CZC5kb3QoQmQpLGQ9QmQuZG90KEUzKSx1PWEqYy1zKnM7aWYoMD09PXUpcmV0dXJuIG8uc2V0KC0yLC0xLC0xKTtsZXQgcD0xL3UsaD0oYypsLXMqZCkqcCxtPShhKmQtcypsKSpwO3JldHVybiBvLnNldCgxLWgtbSxtLGgpfXN0YXRpYyBjb250YWluc1BvaW50KHQsZSxpLHIpe3JldHVybiB0aGlzLmdldEJhcnljb29yZCh0LGUsaSxyLFZkKSxWZC54Pj0wJiZWZC55Pj0wJiZWZC54K1ZkLnk8PTF9c3RhdGljIGdldFVWKHQsZSxpLHIsbyxhLHMsbCl7cmV0dXJuIHRoaXMuZ2V0QmFyeWNvb3JkKHQsZSxpLHIsVmQpLGwuc2V0KDAsMCksbC5hZGRTY2FsZWRWZWN0b3IobyxWZC54KSxsLmFkZFNjYWxlZFZlY3RvcihhLFZkLnkpLGwuYWRkU2NhbGVkVmVjdG9yKHMsVmQueiksbH1zdGF0aWMgaXNGcm9udEZhY2luZyh0LGUsaSxyKXtyZXR1cm4gcWwuc3ViVmVjdG9ycyhpLGUpLEJkLnN1YlZlY3RvcnModCxlKSxxbC5jcm9zcyhCZCkuZG90KHIpPDB9c2V0KHQsZSxpKXtyZXR1cm4gdGhpcy5hLmNvcHkodCksdGhpcy5iLmNvcHkoZSksdGhpcy5jLmNvcHkoaSksdGhpc31zZXRGcm9tUG9pbnRzQW5kSW5kaWNlcyh0LGUsaSxyKXtyZXR1cm4gdGhpcy5hLmNvcHkodFtlXSksdGhpcy5iLmNvcHkodFtpXSksdGhpcy5jLmNvcHkodFtyXSksdGhpc31zZXRGcm9tQXR0cmlidXRlQW5kSW5kaWNlcyh0LGUsaSxyKXtyZXR1cm4gdGhpcy5hLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxlKSx0aGlzLmIuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGkpLHRoaXMuYy5mcm9tQnVmZmVyQXR0cmlidXRlKHQsciksdGhpc31jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLmEuY29weSh0LmEpLHRoaXMuYi5jb3B5KHQuYiksdGhpcy5jLmNvcHkodC5jKSx0aGlzfWdldEFyZWEoKXtyZXR1cm4gcWwuc3ViVmVjdG9ycyh0aGlzLmMsdGhpcy5iKSxCZC5zdWJWZWN0b3JzKHRoaXMuYSx0aGlzLmIpLC41KnFsLmNyb3NzKEJkKS5sZW5ndGgoKX1nZXRNaWRwb2ludCh0KXtyZXR1cm4gdC5hZGRWZWN0b3JzKHRoaXMuYSx0aGlzLmIpLmFkZCh0aGlzLmMpLm11bHRpcGx5U2NhbGFyKDEvMyl9Z2V0Tm9ybWFsKHQpe3JldHVybiBWci5nZXROb3JtYWwodGhpcy5hLHRoaXMuYix0aGlzLmMsdCl9Z2V0UGxhbmUodCl7cmV0dXJuIHQuc2V0RnJvbUNvcGxhbmFyUG9pbnRzKHRoaXMuYSx0aGlzLmIsdGhpcy5jKX1nZXRCYXJ5Y29vcmQodCxlKXtyZXR1cm4gVnIuZ2V0QmFyeWNvb3JkKHQsdGhpcy5hLHRoaXMuYix0aGlzLmMsZSl9Z2V0VVYodCxlLGkscixvKXtyZXR1cm4gVnIuZ2V0VVYodCx0aGlzLmEsdGhpcy5iLHRoaXMuYyxlLGkscixvKX1jb250YWluc1BvaW50KHQpe3JldHVybiBWci5jb250YWluc1BvaW50KHQsdGhpcy5hLHRoaXMuYix0aGlzLmMpfWlzRnJvbnRGYWNpbmcodCl7cmV0dXJuIFZyLmlzRnJvbnRGYWNpbmcodGhpcy5hLHRoaXMuYix0aGlzLmMsdCl9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzVHJpYW5nbGUodGhpcyl9Y2xvc2VzdFBvaW50VG9Qb2ludCh0LGUpe2xldCBhLHMsaT10aGlzLmEscj10aGlzLmIsbz10aGlzLmM7STAuc3ViVmVjdG9ycyhyLGkpLEEwLnN1YlZlY3RvcnMobyxpKSxUMy5zdWJWZWN0b3JzKHQsaSk7bGV0IGw9STAuZG90KFQzKSxjPUEwLmRvdChUMyk7aWYobDw9MCYmYzw9MClyZXR1cm4gZS5jb3B5KGkpO0QzLnN1YlZlY3RvcnModCxyKTtsZXQgZD1JMC5kb3QoRDMpLHU9QTAuZG90KEQzKTtpZihkPj0wJiZ1PD1kKXJldHVybiBlLmNvcHkocik7bGV0IHA9bCp1LWQqYztpZihwPD0wJiZsPj0wJiZkPD0wKXJldHVybiBhPWwvKGwtZCksZS5jb3B5KGkpLmFkZFNjYWxlZFZlY3RvcihJMCxhKTtJMy5zdWJWZWN0b3JzKHQsbyk7bGV0IGg9STAuZG90KEkzKSxtPUEwLmRvdChJMyk7aWYobT49MCYmaDw9bSlyZXR1cm4gZS5jb3B5KG8pO2xldCBfPWgqYy1sKm07aWYoXzw9MCYmYz49MCYmbTw9MClyZXR1cm4gcz1jLyhjLW0pLGUuY29weShpKS5hZGRTY2FsZWRWZWN0b3IoQTAscyk7bGV0IE09ZCptLWgqdTtpZihNPD0wJiZ1LWQ+PTAmJmgtbT49MClyZXR1cm4gcGVlLnN1YlZlY3RvcnMobyxyKSxzPSh1LWQpLyh1LWQrKGgtbSkpLGUuY29weShyKS5hZGRTY2FsZWRWZWN0b3IocGVlLHMpO2xldCB5PTEvKE0rXytwKTtyZXR1cm4gYT1fKnkscz1wKnksZS5jb3B5KGkpLmFkZFNjYWxlZFZlY3RvcihJMCxhKS5hZGRTY2FsZWRWZWN0b3IoQTAscyl9ZXF1YWxzKHQpe3JldHVybiB0LmEuZXF1YWxzKHRoaXMuYSkmJnQuYi5lcXVhbHModGhpcy5iKSYmdC5jLmVxdWFscyh0aGlzLmMpfX0sc1BlPTAsRm89Y2xhc3MgZXh0ZW5kcyB6ZHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6c1BlKyt9KSx0aGlzLnV1aWQ9WWwoKSx0aGlzLm5hbWU9IiIsdGhpcy50eXBlPSJNYXRlcmlhbCIsdGhpcy5mb2c9ITAsdGhpcy5ibGVuZGluZz1neCx0aGlzLnNpZGU9eXgsdGhpcy52ZXJ0ZXhDb2xvcnM9ITEsdGhpcy5vcGFjaXR5PTEsdGhpcy50cmFuc3BhcmVudD0hMSx0aGlzLmJsZW5kU3JjPWN0ZSx0aGlzLmJsZW5kRHN0PWR0ZSx0aGlzLmJsZW5kRXF1YXRpb249VTAsdGhpcy5ibGVuZFNyY0FscGhhPW51bGwsdGhpcy5ibGVuZERzdEFscGhhPW51bGwsdGhpcy5ibGVuZEVxdWF0aW9uQWxwaGE9bnVsbCx0aGlzLmRlcHRoRnVuYz1YMyx0aGlzLmRlcHRoVGVzdD0hMCx0aGlzLmRlcHRoV3JpdGU9ITAsdGhpcy5zdGVuY2lsV3JpdGVNYXNrPTI1NSx0aGlzLnN0ZW5jaWxGdW5jPTUxOSx0aGlzLnN0ZW5jaWxSZWY9MCx0aGlzLnN0ZW5jaWxGdW5jTWFzaz0yNTUsdGhpcy5zdGVuY2lsRmFpbD03NjgwLHRoaXMuc3RlbmNpbFpGYWlsPTc2ODAsdGhpcy5zdGVuY2lsWlBhc3M9NzY4MCx0aGlzLnN0ZW5jaWxXcml0ZT0hMSx0aGlzLmNsaXBwaW5nUGxhbmVzPW51bGwsdGhpcy5jbGlwSW50ZXJzZWN0aW9uPSExLHRoaXMuY2xpcFNoYWRvd3M9ITEsdGhpcy5zaGFkb3dTaWRlPW51bGwsdGhpcy5jb2xvcldyaXRlPSEwLHRoaXMuYWxwaGFXcml0ZT0hMCx0aGlzLnByZWNpc2lvbj1udWxsLHRoaXMucG9seWdvbk9mZnNldD0hMSx0aGlzLnBvbHlnb25PZmZzZXRGYWN0b3I9MCx0aGlzLnBvbHlnb25PZmZzZXRVbml0cz0wLHRoaXMuZGl0aGVyaW5nPSExLHRoaXMuYWxwaGFUb0NvdmVyYWdlPSExLHRoaXMucHJlbXVsdGlwbGllZEFscGhhPSExLHRoaXMudmlzaWJsZT0hMCx0aGlzLnRvbmVNYXBwZWQ9ITAsdGhpcy51c2VyRGF0YT17fSx0aGlzLnZlcnNpb249MCx0aGlzLl9hbHBoYVRlc3Q9MH1nZXQgYWxwaGFUZXN0KCl7cmV0dXJuIHRoaXMuX2FscGhhVGVzdH1zZXQgYWxwaGFUZXN0KHQpe3RoaXMuX2FscGhhVGVzdD4wIT10PjAmJnRoaXMudmVyc2lvbisrLHRoaXMuX2FscGhhVGVzdD10fW9uQnVpbGQoKXt9b25CZWZvcmVSZW5kZXIoKXt9b25CZWZvcmVDb21waWxlKCl7fWN1c3RvbVByb2dyYW1DYWNoZUtleSgpe3JldHVybiB0aGlzLm9uQmVmb3JlQ29tcGlsZS50b1N0cmluZygpfXNldFZhbHVlcyh0KXtpZih2b2lkIDAhPT10KWZvcihsZXQgZSBpbiB0KXtsZXQgaT10W2VdO2lmKHZvaWQgMD09PWkpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6ICciK2UrIicgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZC4iKTtjb250aW51ZX1pZigic2hhZGluZyI9PT1lKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKSx0aGlzLmZsYXRTaGFkaW5nPTE9PT1pO2NvbnRpbnVlfWxldCByPXRoaXNbZV07dm9pZCAwIT09cj9yJiZyLmlzQ29sb3I/ci5zZXQoaSk6ciYmci5pc1ZlY3RvcjMmJmkmJmkuaXNWZWN0b3IzP3IuY29weShpKTp0aGlzW2VdPWk6Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAnIitlKyInIGlzIG5vdCBhIHByb3BlcnR5IG9mIHRoaXMgbWF0ZXJpYWwuIil9fXRvSlNPTih0KXtsZXQgZT12b2lkIDA9PT10fHwic3RyaW5nIj09dHlwZW9mIHQ7ZSYmKHQ9e3RleHR1cmVzOnt9LGltYWdlczp7fX0pO2xldCBpPXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiTWF0ZXJpYWwiLGdlbmVyYXRvcjoiTWF0ZXJpYWwudG9KU09OIn19O2Z1bmN0aW9uIHIobyl7bGV0IGE9W107Zm9yKGxldCBzIGluIG8pe2xldCBsPW9bc107ZGVsZXRlIGwubWV0YWRhdGEsYS5wdXNoKGwpfXJldHVybiBhfWlmKGkudXVpZD10aGlzLnV1aWQsaS50eXBlPXRoaXMudHlwZSwiIiE9PXRoaXMubmFtZSYmKGkubmFtZT10aGlzLm5hbWUpLHRoaXMuY29sb3ImJnRoaXMuY29sb3IuaXNDb2xvciYmKGkuY29sb3I9dGhpcy5jb2xvci5nZXRIZXgoKSksdm9pZCAwIT09dGhpcy5yb3VnaG5lc3MmJihpLnJvdWdobmVzcz10aGlzLnJvdWdobmVzcyksdm9pZCAwIT09dGhpcy5tZXRhbG5lc3MmJihpLm1ldGFsbmVzcz10aGlzLm1ldGFsbmVzcyksdm9pZCAwIT09dGhpcy5zaGVlbiYmKGkuc2hlZW49dGhpcy5zaGVlbiksdGhpcy5zaGVlbkNvbG9yJiZ0aGlzLnNoZWVuQ29sb3IuaXNDb2xvciYmKGkuc2hlZW5Db2xvcj10aGlzLnNoZWVuQ29sb3IuZ2V0SGV4KCkpLHZvaWQgMCE9PXRoaXMuc2hlZW5Sb3VnaG5lc3MmJihpLnNoZWVuUm91Z2huZXNzPXRoaXMuc2hlZW5Sb3VnaG5lc3MpLHRoaXMuZW1pc3NpdmUmJnRoaXMuZW1pc3NpdmUuaXNDb2xvciYmKGkuZW1pc3NpdmU9dGhpcy5lbWlzc2l2ZS5nZXRIZXgoKSksdGhpcy5lbWlzc2l2ZUludGVuc2l0eSYmMSE9PXRoaXMuZW1pc3NpdmVJbnRlbnNpdHkmJihpLmVtaXNzaXZlSW50ZW5zaXR5PXRoaXMuZW1pc3NpdmVJbnRlbnNpdHkpLHRoaXMuc3BlY3VsYXImJnRoaXMuc3BlY3VsYXIuaXNDb2xvciYmKGkuc3BlY3VsYXI9dGhpcy5zcGVjdWxhci5nZXRIZXgoKSksdm9pZCAwIT09dGhpcy5zcGVjdWxhckludGVuc2l0eSYmKGkuc3BlY3VsYXJJbnRlbnNpdHk9dGhpcy5zcGVjdWxhckludGVuc2l0eSksdGhpcy5zcGVjdWxhckNvbG9yJiZ0aGlzLnNwZWN1bGFyQ29sb3IuaXNDb2xvciYmKGkuc3BlY3VsYXJDb2xvcj10aGlzLnNwZWN1bGFyQ29sb3IuZ2V0SGV4KCkpLHZvaWQgMCE9PXRoaXMuc2hpbmluZXNzJiYoaS5zaGluaW5lc3M9dGhpcy5zaGluaW5lc3MpLHZvaWQgMCE9PXRoaXMuY2xlYXJjb2F0JiYoaS5jbGVhcmNvYXQ9dGhpcy5jbGVhcmNvYXQpLHZvaWQgMCE9PXRoaXMuY2xlYXJjb2F0Um91Z2huZXNzJiYoaS5jbGVhcmNvYXRSb3VnaG5lc3M9dGhpcy5jbGVhcmNvYXRSb3VnaG5lc3MpLHRoaXMuY2xlYXJjb2F0TWFwJiZ0aGlzLmNsZWFyY29hdE1hcC5pc1RleHR1cmUmJihpLmNsZWFyY29hdE1hcD10aGlzLmNsZWFyY29hdE1hcC50b0pTT04odCkudXVpZCksdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAmJnRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwLmlzVGV4dHVyZSYmKGkuY2xlYXJjb2F0Um91Z2huZXNzTWFwPXRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmNsZWFyY29hdE5vcm1hbE1hcCYmdGhpcy5jbGVhcmNvYXROb3JtYWxNYXAuaXNUZXh0dXJlJiYoaS5jbGVhcmNvYXROb3JtYWxNYXA9dGhpcy5jbGVhcmNvYXROb3JtYWxNYXAudG9KU09OKHQpLnV1aWQsaS5jbGVhcmNvYXROb3JtYWxTY2FsZT10aGlzLmNsZWFyY29hdE5vcm1hbFNjYWxlLnRvQXJyYXkoKSksdGhpcy5tYXAmJnRoaXMubWFwLmlzVGV4dHVyZSYmKGkubWFwPXRoaXMubWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLm1hdGNhcCYmdGhpcy5tYXRjYXAuaXNUZXh0dXJlJiYoaS5tYXRjYXA9dGhpcy5tYXRjYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuYWxwaGFNYXAmJnRoaXMuYWxwaGFNYXAuaXNUZXh0dXJlJiYoaS5hbHBoYU1hcD10aGlzLmFscGhhTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmxpZ2h0TWFwJiZ0aGlzLmxpZ2h0TWFwLmlzVGV4dHVyZSYmKGkubGlnaHRNYXA9dGhpcy5saWdodE1hcC50b0pTT04odCkudXVpZCxpLmxpZ2h0TWFwSW50ZW5zaXR5PXRoaXMubGlnaHRNYXBJbnRlbnNpdHkpLHRoaXMuYW9NYXAmJnRoaXMuYW9NYXAuaXNUZXh0dXJlJiYoaS5hb01hcD10aGlzLmFvTWFwLnRvSlNPTih0KS51dWlkLGkuYW9NYXBJbnRlbnNpdHk9dGhpcy5hb01hcEludGVuc2l0eSksdGhpcy5idW1wTWFwJiZ0aGlzLmJ1bXBNYXAuaXNUZXh0dXJlJiYoaS5idW1wTWFwPXRoaXMuYnVtcE1hcC50b0pTT04odCkudXVpZCxpLmJ1bXBTY2FsZT10aGlzLmJ1bXBTY2FsZSksdGhpcy5ub3JtYWxNYXAmJnRoaXMubm9ybWFsTWFwLmlzVGV4dHVyZSYmKGkubm9ybWFsTWFwPXRoaXMubm9ybWFsTWFwLnRvSlNPTih0KS51dWlkLGkubm9ybWFsTWFwVHlwZT10aGlzLm5vcm1hbE1hcFR5cGUsaS5ub3JtYWxTY2FsZT10aGlzLm5vcm1hbFNjYWxlLnRvQXJyYXkoKSksdGhpcy5kaXNwbGFjZW1lbnRNYXAmJnRoaXMuZGlzcGxhY2VtZW50TWFwLmlzVGV4dHVyZSYmKGkuZGlzcGxhY2VtZW50TWFwPXRoaXMuZGlzcGxhY2VtZW50TWFwLnRvSlNPTih0KS51dWlkLGkuZGlzcGxhY2VtZW50U2NhbGU9dGhpcy5kaXNwbGFjZW1lbnRTY2FsZSxpLmRpc3BsYWNlbWVudEJpYXM9dGhpcy5kaXNwbGFjZW1lbnRCaWFzKSx0aGlzLnJvdWdobmVzc01hcCYmdGhpcy5yb3VnaG5lc3NNYXAuaXNUZXh0dXJlJiYoaS5yb3VnaG5lc3NNYXA9dGhpcy5yb3VnaG5lc3NNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMubWV0YWxuZXNzTWFwJiZ0aGlzLm1ldGFsbmVzc01hcC5pc1RleHR1cmUmJihpLm1ldGFsbmVzc01hcD10aGlzLm1ldGFsbmVzc01hcC50b0pTT04odCkudXVpZCksdGhpcy5lbWlzc2l2ZU1hcCYmdGhpcy5lbWlzc2l2ZU1hcC5pc1RleHR1cmUmJihpLmVtaXNzaXZlTWFwPXRoaXMuZW1pc3NpdmVNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuc3BlY3VsYXJNYXAmJnRoaXMuc3BlY3VsYXJNYXAuaXNUZXh0dXJlJiYoaS5zcGVjdWxhck1hcD10aGlzLnNwZWN1bGFyTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwJiZ0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwLmlzVGV4dHVyZSYmKGkuc3BlY3VsYXJJbnRlbnNpdHlNYXA9dGhpcy5zcGVjdWxhckludGVuc2l0eU1hcC50b0pTT04odCkudXVpZCksdGhpcy5zcGVjdWxhckNvbG9yTWFwJiZ0aGlzLnNwZWN1bGFyQ29sb3JNYXAuaXNUZXh0dXJlJiYoaS5zcGVjdWxhckNvbG9yTWFwPXRoaXMuc3BlY3VsYXJDb2xvck1hcC50b0pTT04odCkudXVpZCksdGhpcy5lbnZNYXAmJnRoaXMuZW52TWFwLmlzVGV4dHVyZSYmKGkuZW52TWFwPXRoaXMuZW52TWFwLnRvSlNPTih0KS51dWlkLHZvaWQgMCE9PXRoaXMuY29tYmluZSYmKGkuY29tYmluZT10aGlzLmNvbWJpbmUpKSx2b2lkIDAhPT10aGlzLmVudk1hcEludGVuc2l0eSYmKGkuZW52TWFwSW50ZW5zaXR5PXRoaXMuZW52TWFwSW50ZW5zaXR5KSx2b2lkIDAhPT10aGlzLnJlZmxlY3Rpdml0eSYmKGkucmVmbGVjdGl2aXR5PXRoaXMucmVmbGVjdGl2aXR5KSx2b2lkIDAhPT10aGlzLnJlZnJhY3Rpb25SYXRpbyYmKGkucmVmcmFjdGlvblJhdGlvPXRoaXMucmVmcmFjdGlvblJhdGlvKSx0aGlzLmdyYWRpZW50TWFwJiZ0aGlzLmdyYWRpZW50TWFwLmlzVGV4dHVyZSYmKGkuZ3JhZGllbnRNYXA9dGhpcy5ncmFkaWVudE1hcC50b0pTT04odCkudXVpZCksdm9pZCAwIT09dGhpcy50cmFuc21pc3Npb24mJihpLnRyYW5zbWlzc2lvbj10aGlzLnRyYW5zbWlzc2lvbiksdGhpcy50cmFuc21pc3Npb25NYXAmJnRoaXMudHJhbnNtaXNzaW9uTWFwLmlzVGV4dHVyZSYmKGkudHJhbnNtaXNzaW9uTWFwPXRoaXMudHJhbnNtaXNzaW9uTWFwLnRvSlNPTih0KS51dWlkKSx2b2lkIDAhPT10aGlzLnRoaWNrbmVzcyYmKGkudGhpY2tuZXNzPXRoaXMudGhpY2tuZXNzKSx0aGlzLnRoaWNrbmVzc01hcCYmdGhpcy50aGlja25lc3NNYXAuaXNUZXh0dXJlJiYoaS50aGlja25lc3NNYXA9dGhpcy50aGlja25lc3NNYXAudG9KU09OKHQpLnV1aWQpLHZvaWQgMCE9PXRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZSYmKGkuYXR0ZW51YXRpb25EaXN0YW5jZT10aGlzLmF0dGVudWF0aW9uRGlzdGFuY2UpLHZvaWQgMCE9PXRoaXMuYXR0ZW51YXRpb25Db2xvciYmKGkuYXR0ZW51YXRpb25Db2xvcj10aGlzLmF0dGVudWF0aW9uQ29sb3IuZ2V0SGV4KCkpLHZvaWQgMCE9PXRoaXMuc2l6ZSYmKGkuc2l6ZT10aGlzLnNpemUpLG51bGwhPT10aGlzLnNoYWRvd1NpZGUmJihpLnNoYWRvd1NpZGU9dGhpcy5zaGFkb3dTaWRlKSx2b2lkIDAhPT10aGlzLnNpemVBdHRlbnVhdGlvbiYmKGkuc2l6ZUF0dGVudWF0aW9uPXRoaXMuc2l6ZUF0dGVudWF0aW9uKSx0aGlzLmJsZW5kaW5nIT09Z3gmJihpLmJsZW5kaW5nPXRoaXMuYmxlbmRpbmcpLHRoaXMuc2lkZSE9PXl4JiYoaS5zaWRlPXRoaXMuc2lkZSksdGhpcy52ZXJ0ZXhDb2xvcnMmJihpLnZlcnRleENvbG9ycz0hMCksdGhpcy5vcGFjaXR5PDEmJihpLm9wYWNpdHk9dGhpcy5vcGFjaXR5KSwhMD09PXRoaXMudHJhbnNwYXJlbnQmJihpLnRyYW5zcGFyZW50PXRoaXMudHJhbnNwYXJlbnQpLGkuZGVwdGhGdW5jPXRoaXMuZGVwdGhGdW5jLGkuZGVwdGhUZXN0PXRoaXMuZGVwdGhUZXN0LGkuZGVwdGhXcml0ZT10aGlzLmRlcHRoV3JpdGUsaS5jb2xvcldyaXRlPXRoaXMuY29sb3JXcml0ZSxpLmFscGhhV3JpdGU9dGhpcy5hbHBoYVdyaXRlLGkuc3RlbmNpbFdyaXRlPXRoaXMuc3RlbmNpbFdyaXRlLGkuc3RlbmNpbFdyaXRlTWFzaz10aGlzLnN0ZW5jaWxXcml0ZU1hc2ssaS5zdGVuY2lsRnVuYz10aGlzLnN0ZW5jaWxGdW5jLGkuc3RlbmNpbFJlZj10aGlzLnN0ZW5jaWxSZWYsaS5zdGVuY2lsRnVuY01hc2s9dGhpcy5zdGVuY2lsRnVuY01hc2ssaS5zdGVuY2lsRmFpbD10aGlzLnN0ZW5jaWxGYWlsLGkuc3RlbmNpbFpGYWlsPXRoaXMuc3RlbmNpbFpGYWlsLGkuc3RlbmNpbFpQYXNzPXRoaXMuc3RlbmNpbFpQYXNzLHRoaXMucm90YXRpb24mJjAhPT10aGlzLnJvdGF0aW9uJiYoaS5yb3RhdGlvbj10aGlzLnJvdGF0aW9uKSwhMD09PXRoaXMucG9seWdvbk9mZnNldCYmKGkucG9seWdvbk9mZnNldD0hMCksMCE9PXRoaXMucG9seWdvbk9mZnNldEZhY3RvciYmKGkucG9seWdvbk9mZnNldEZhY3Rvcj10aGlzLnBvbHlnb25PZmZzZXRGYWN0b3IpLDAhPT10aGlzLnBvbHlnb25PZmZzZXRVbml0cyYmKGkucG9seWdvbk9mZnNldFVuaXRzPXRoaXMucG9seWdvbk9mZnNldFVuaXRzKSx0aGlzLmxpbmV3aWR0aCYmMSE9PXRoaXMubGluZXdpZHRoJiYoaS5saW5ld2lkdGg9dGhpcy5saW5ld2lkdGgpLHZvaWQgMCE9PXRoaXMuZGFzaFNpemUmJihpLmRhc2hTaXplPXRoaXMuZGFzaFNpemUpLHZvaWQgMCE9PXRoaXMuZ2FwU2l6ZSYmKGkuZ2FwU2l6ZT10aGlzLmdhcFNpemUpLHZvaWQgMCE9PXRoaXMuc2NhbGUmJihpLnNjYWxlPXRoaXMuc2NhbGUpLCEwPT09dGhpcy5kaXRoZXJpbmcmJihpLmRpdGhlcmluZz0hMCksdGhpcy5hbHBoYVRlc3Q+MCYmKGkuYWxwaGFUZXN0PXRoaXMuYWxwaGFUZXN0KSwhMD09PXRoaXMuYWxwaGFUb0NvdmVyYWdlJiYoaS5hbHBoYVRvQ292ZXJhZ2U9dGhpcy5hbHBoYVRvQ292ZXJhZ2UpLCEwPT09dGhpcy5wcmVtdWx0aXBsaWVkQWxwaGEmJihpLnByZW11bHRpcGxpZWRBbHBoYT10aGlzLnByZW11bHRpcGxpZWRBbHBoYSksITA9PT10aGlzLndpcmVmcmFtZSYmKGkud2lyZWZyYW1lPXRoaXMud2lyZWZyYW1lKSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD4xJiYoaS53aXJlZnJhbWVMaW5ld2lkdGg9dGhpcy53aXJlZnJhbWVMaW5ld2lkdGgpLCJyb3VuZCIhPT10aGlzLndpcmVmcmFtZUxpbmVjYXAmJihpLndpcmVmcmFtZUxpbmVjYXA9dGhpcy53aXJlZnJhbWVMaW5lY2FwKSwicm91bmQiIT09dGhpcy53aXJlZnJhbWVMaW5lam9pbiYmKGkud2lyZWZyYW1lTGluZWpvaW49dGhpcy53aXJlZnJhbWVMaW5lam9pbiksITA9PT10aGlzLmZsYXRTaGFkaW5nJiYoaS5mbGF0U2hhZGluZz10aGlzLmZsYXRTaGFkaW5nKSwhMT09PXRoaXMudmlzaWJsZSYmKGkudmlzaWJsZT0hMSksITE9PT10aGlzLnRvbmVNYXBwZWQmJihpLnRvbmVNYXBwZWQ9ITEpLCJ7fSIhPT1KU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJEYXRhKSYmKGkudXNlckRhdGE9dGhpcy51c2VyRGF0YSksZSl7bGV0IG89cih0LnRleHR1cmVzKSxhPXIodC5pbWFnZXMpO28ubGVuZ3RoPjAmJihpLnRleHR1cmVzPW8pLGEubGVuZ3RoPjAmJihpLmltYWdlcz1hKX1yZXR1cm4gaX1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3RoaXMubmFtZT10Lm5hbWUsdGhpcy5mb2c9dC5mb2csdGhpcy5ibGVuZGluZz10LmJsZW5kaW5nLHRoaXMuc2lkZT10LnNpZGUsdGhpcy52ZXJ0ZXhDb2xvcnM9dC52ZXJ0ZXhDb2xvcnMsdGhpcy5vcGFjaXR5PXQub3BhY2l0eSx0aGlzLnRyYW5zcGFyZW50PXQudHJhbnNwYXJlbnQsdGhpcy5ibGVuZFNyYz10LmJsZW5kU3JjLHRoaXMuYmxlbmREc3Q9dC5ibGVuZERzdCx0aGlzLmJsZW5kRXF1YXRpb249dC5ibGVuZEVxdWF0aW9uLHRoaXMuYmxlbmRTcmNBbHBoYT10LmJsZW5kU3JjQWxwaGEsdGhpcy5ibGVuZERzdEFscGhhPXQuYmxlbmREc3RBbHBoYSx0aGlzLmJsZW5kRXF1YXRpb25BbHBoYT10LmJsZW5kRXF1YXRpb25BbHBoYSx0aGlzLmRlcHRoRnVuYz10LmRlcHRoRnVuYyx0aGlzLmRlcHRoVGVzdD10LmRlcHRoVGVzdCx0aGlzLmRlcHRoV3JpdGU9dC5kZXB0aFdyaXRlLHRoaXMuc3RlbmNpbFdyaXRlTWFzaz10LnN0ZW5jaWxXcml0ZU1hc2ssdGhpcy5zdGVuY2lsRnVuYz10LnN0ZW5jaWxGdW5jLHRoaXMuc3RlbmNpbFJlZj10LnN0ZW5jaWxSZWYsdGhpcy5zdGVuY2lsRnVuY01hc2s9dC5zdGVuY2lsRnVuY01hc2ssdGhpcy5zdGVuY2lsRmFpbD10LnN0ZW5jaWxGYWlsLHRoaXMuc3RlbmNpbFpGYWlsPXQuc3RlbmNpbFpGYWlsLHRoaXMuc3RlbmNpbFpQYXNzPXQuc3RlbmNpbFpQYXNzLHRoaXMuc3RlbmNpbFdyaXRlPXQuc3RlbmNpbFdyaXRlO2xldCBlPXQuY2xpcHBpbmdQbGFuZXMsaT1udWxsO2lmKG51bGwhPT1lKXtsZXQgcj1lLmxlbmd0aDtpPW5ldyBBcnJheShyKTtmb3IobGV0IG89MDtvIT09cjsrK28paVtvXT1lW29dLmNsb25lKCl9cmV0dXJuIHRoaXMuY2xpcHBpbmdQbGFuZXM9aSx0aGlzLmNsaXBJbnRlcnNlY3Rpb249dC5jbGlwSW50ZXJzZWN0aW9uLHRoaXMuY2xpcFNoYWRvd3M9dC5jbGlwU2hhZG93cyx0aGlzLnNoYWRvd1NpZGU9dC5zaGFkb3dTaWRlLHRoaXMuY29sb3JXcml0ZT10LmNvbG9yV3JpdGUsdGhpcy5hbHBoYVdyaXRlPXQuYWxwaGFXcml0ZSx0aGlzLnByZWNpc2lvbj10LnByZWNpc2lvbix0aGlzLnBvbHlnb25PZmZzZXQ9dC5wb2x5Z29uT2Zmc2V0LHRoaXMucG9seWdvbk9mZnNldEZhY3Rvcj10LnBvbHlnb25PZmZzZXRGYWN0b3IsdGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHM9dC5wb2x5Z29uT2Zmc2V0VW5pdHMsdGhpcy5kaXRoZXJpbmc9dC5kaXRoZXJpbmcsdGhpcy5hbHBoYVRlc3Q9dC5hbHBoYVRlc3QsdGhpcy5hbHBoYVRvQ292ZXJhZ2U9dC5hbHBoYVRvQ292ZXJhZ2UsdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGE9dC5wcmVtdWx0aXBsaWVkQWxwaGEsdGhpcy52aXNpYmxlPXQudmlzaWJsZSx0aGlzLnRvbmVNYXBwZWQ9dC50b25lTWFwcGVkLHRoaXMudXNlckRhdGE9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0LnVzZXJEYXRhKSksdGhpc31kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfXNldCBuZWVkc1VwZGF0ZSh0KXshMD09PXQmJnRoaXMudmVyc2lvbisrfX07Rm8ucHJvdG90eXBlLmlzTWF0ZXJpYWw9ITA7dmFyIHZtPWNsYXNzIGV4dGVuZHMgRm97Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hCYXNpY01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBzbigxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5zcGVjdWxhck1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuY29tYmluZT1LSSx0aGlzLnJlZmxlY3Rpdml0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5zcGVjdWxhck1hcD10LnNwZWN1bGFyTWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmVudk1hcD10LmVudk1hcCx0aGlzLmNvbWJpbmU9dC5jb21iaW5lLHRoaXMucmVmbGVjdGl2aXR5PXQucmVmbGVjdGl2aXR5LHRoaXMucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXN9fTt2bS5wcm90b3R5cGUuaXNNZXNoQmFzaWNNYXRlcmlhbD0hMDt2YXIgc3I9bmV3IEssWkQ9bmV3ICRlLEFyPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXtpZihBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogYXJyYXkgc2hvdWxkIGJlIGEgVHlwZWQgQXJyYXkuIik7dGhpcy5uYW1lPSIiLHRoaXMuYXJyYXk9dCx0aGlzLml0ZW1TaXplPWUsdGhpcy5jb3VudD12b2lkIDAhPT10P3QubGVuZ3RoL2U6MCx0aGlzLm5vcm1hbGl6ZWQ9ITA9PT1pLHRoaXMudXNhZ2U9Q3gsdGhpcy51cGRhdGVSYW5nZT17b2Zmc2V0OjAsY291bnQ6LTF9LHRoaXMudmVyc2lvbj0wfW9uVXBsb2FkQ2FsbGJhY2soKXt9c2V0IG5lZWRzVXBkYXRlKHQpeyEwPT09dCYmdGhpcy52ZXJzaW9uKyt9c2V0VXNhZ2UodCl7cmV0dXJuIHRoaXMudXNhZ2U9dCx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMubmFtZT10Lm5hbWUsdGhpcy5hcnJheT1uZXcgdC5hcnJheS5jb25zdHJ1Y3Rvcih0LmFycmF5KSx0aGlzLml0ZW1TaXplPXQuaXRlbVNpemUsdGhpcy5jb3VudD10LmNvdW50LHRoaXMubm9ybWFsaXplZD10Lm5vcm1hbGl6ZWQsdGhpcy51c2FnZT10LnVzYWdlLHRoaXN9Y29weUF0KHQsZSxpKXt0Kj10aGlzLml0ZW1TaXplLGkqPWUuaXRlbVNpemU7Zm9yKGxldCByPTAsbz10aGlzLml0ZW1TaXplO3I8bztyKyspdGhpcy5hcnJheVt0K3JdPWUuYXJyYXlbaStyXTtyZXR1cm4gdGhpc31jb3B5QXJyYXkodCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQpLHRoaXN9Y29weUNvbG9yc0FycmF5KHQpe2xldCBlPXRoaXMuYXJyYXksaT0wO2ZvcihsZXQgcj0wLG89dC5sZW5ndGg7cjxvO3IrKyl7bGV0IGE9dFtyXTt2b2lkIDA9PT1hJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weUNvbG9yc0FycmF5KCk6IGNvbG9yIGlzIHVuZGVmaW5lZCIsciksYT1uZXcgc24pLGVbaSsrXT1hLnIsZVtpKytdPWEuZyxlW2krK109YS5ifXJldHVybiB0aGlzfWNvcHlWZWN0b3Iyc0FycmF5KHQpe2xldCBlPXRoaXMuYXJyYXksaT0wO2ZvcihsZXQgcj0wLG89dC5sZW5ndGg7cjxvO3IrKyl7bGV0IGE9dFtyXTt2b2lkIDA9PT1hJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjJzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIsciksYT1uZXcgJGUpLGVbaSsrXT1hLngsZVtpKytdPWEueX1yZXR1cm4gdGhpc31jb3B5VmVjdG9yM3NBcnJheSh0KXtsZXQgZT10aGlzLmFycmF5LGk9MDtmb3IobGV0IHI9MCxvPXQubGVuZ3RoO3I8bztyKyspe2xldCBhPXRbcl07dm9pZCAwPT09YSYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Izc0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLHIpLGE9bmV3IEspLGVbaSsrXT1hLngsZVtpKytdPWEueSxlW2krK109YS56fXJldHVybiB0aGlzfWNvcHlWZWN0b3I0c0FycmF5KHQpe2xldCBlPXRoaXMuYXJyYXksaT0wO2ZvcihsZXQgcj0wLG89dC5sZW5ndGg7cjxvO3IrKyl7bGV0IGE9dFtyXTt2b2lkIDA9PT1hJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjRzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIsciksYT1uZXcgUWkpLGVbaSsrXT1hLngsZVtpKytdPWEueSxlW2krK109YS56LGVbaSsrXT1hLnd9cmV0dXJuIHRoaXN9YXBwbHlNYXRyaXgzKHQpe2lmKDI9PT10aGlzLml0ZW1TaXplKWZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKVpELmZyb21CdWZmZXJBdHRyaWJ1dGUodGhpcyxlKSxaRC5hcHBseU1hdHJpeDModCksdGhpcy5zZXRYWShlLFpELngsWkQueSk7ZWxzZSBpZigzPT09dGhpcy5pdGVtU2l6ZSlmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylzci5mcm9tQnVmZmVyQXR0cmlidXRlKHRoaXMsZSksc3IuYXBwbHlNYXRyaXgzKHQpLHRoaXMuc2V0WFlaKGUsc3IueCxzci55LHNyLnopO3JldHVybiB0aGlzfWFwcGx5TWF0cml4NCh0KXtmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylzci54PXRoaXMuZ2V0WChlKSxzci55PXRoaXMuZ2V0WShlKSxzci56PXRoaXMuZ2V0WihlKSxzci5hcHBseU1hdHJpeDQodCksdGhpcy5zZXRYWVooZSxzci54LHNyLnksc3Iueik7cmV0dXJuIHRoaXN9YXBwbHlOb3JtYWxNYXRyaXgodCl7Zm9yKGxldCBlPTAsaT10aGlzLmNvdW50O2U8aTtlKyspc3IueD10aGlzLmdldFgoZSksc3IueT10aGlzLmdldFkoZSksc3Iuej10aGlzLmdldFooZSksc3IuYXBwbHlOb3JtYWxNYXRyaXgodCksdGhpcy5zZXRYWVooZSxzci54LHNyLnksc3Iueik7cmV0dXJuIHRoaXN9dHJhbnNmb3JtRGlyZWN0aW9uKHQpe2ZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKXNyLng9dGhpcy5nZXRYKGUpLHNyLnk9dGhpcy5nZXRZKGUpLHNyLno9dGhpcy5nZXRaKGUpLHNyLnRyYW5zZm9ybURpcmVjdGlvbih0KSx0aGlzLnNldFhZWihlLHNyLngsc3IueSxzci56KTtyZXR1cm4gdGhpc31zZXQodCxlPTApe3JldHVybiB0aGlzLmFycmF5LnNldCh0LGUpLHRoaXN9Z2V0WCh0KXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemVdfXNldFgodCxlKXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemVdPWUsdGhpc31nZXRZKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsxXX1zZXRZKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzFdPWUsdGhpc31nZXRaKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsyXX1zZXRaKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzJdPWUsdGhpc31nZXRXKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSszXX1zZXRXKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzNdPWUsdGhpc31zZXRYWSh0LGUsaSl7cmV0dXJuIHRoaXMuYXJyYXlbMCsodCo9dGhpcy5pdGVtU2l6ZSldPWUsdGhpcy5hcnJheVt0KzFdPWksdGhpc31zZXRYWVoodCxlLGkscil7cmV0dXJuIHRoaXMuYXJyYXlbMCsodCo9dGhpcy5pdGVtU2l6ZSldPWUsdGhpcy5hcnJheVt0KzFdPWksdGhpcy5hcnJheVt0KzJdPXIsdGhpc31zZXRYWVpXKHQsZSxpLHIsbyl7cmV0dXJuIHRoaXMuYXJyYXlbMCsodCo9dGhpcy5pdGVtU2l6ZSldPWUsdGhpcy5hcnJheVt0KzFdPWksdGhpcy5hcnJheVt0KzJdPXIsdGhpcy5hcnJheVt0KzNdPW8sdGhpc31vblVwbG9hZCh0KXtyZXR1cm4gdGhpcy5vblVwbG9hZENhbGxiYWNrPXQsdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmFycmF5LHRoaXMuaXRlbVNpemUpLmNvcHkodGhpcyl9dG9KU09OKCl7bGV0IHQ9e2l0ZW1TaXplOnRoaXMuaXRlbVNpemUsdHlwZTp0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5hcnJheSksbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9O3JldHVybiIiIT09dGhpcy5uYW1lJiYodC5uYW1lPXRoaXMubmFtZSksdGhpcy51c2FnZSE9PUN4JiYodC51c2FnZT10aGlzLnVzYWdlKSwoMCE9PXRoaXMudXBkYXRlUmFuZ2Uub2Zmc2V0fHwtMSE9PXRoaXMudXBkYXRlUmFuZ2UuY291bnQpJiYodC51cGRhdGVSYW5nZT10aGlzLnVwZGF0ZVJhbmdlKSx0fX07QXIucHJvdG90eXBlLmlzQnVmZmVyQXR0cmlidXRlPSEwO3ZhciBUST1jbGFzcyBleHRlbmRzIEFye2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcihuZXcgVWludDE2QXJyYXkodCksZSxpKX19LERJPWNsYXNzIGV4dGVuZHMgQXJ7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKG5ldyBVaW50MzJBcnJheSh0KSxlLGkpfX07KGNsYXNzIGV4dGVuZHMgQXJ7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKG5ldyBVaW50MTZBcnJheSh0KSxlLGkpfX0pLnByb3RvdHlwZS5pc0Zsb2F0MTZCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIE5yPWNsYXNzIGV4dGVuZHMgQXJ7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKG5ldyBGbG9hdDMyQXJyYXkodCksZSxpKX19LGxQZT0wLGxsPW5ldyB2bixBMz1uZXcgVWksUjA9bmV3IEssU3M9bmV3IFRzLHN4PW5ldyBUcyxPbz1uZXcgSyxHaT1jbGFzcyBleHRlbmRzIHpke2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpsUGUrK30pLHRoaXMudXVpZD1ZbCgpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9IkJ1ZmZlckdlb21ldHJ5Iix0aGlzLmluZGV4PW51bGwsdGhpcy5hdHRyaWJ1dGVzPXt9LHRoaXMubW9ycGhBdHRyaWJ1dGVzPXt9LHRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU9ITEsdGhpcy5ncm91cHM9W10sdGhpcy5ib3VuZGluZ0JveD1udWxsLHRoaXMuYm91bmRpbmdTcGhlcmU9bnVsbCx0aGlzLmRyYXdSYW5nZT17c3RhcnQ6MCxjb3VudDoxLzB9LHRoaXMudXNlckRhdGE9e319Z2V0SW5kZXgoKXtyZXR1cm4gdGhpcy5pbmRleH1zZXRJbmRleCh0KXtyZXR1cm4gdGhpcy5pbmRleD1BcnJheS5pc0FycmF5KHQpP25ldyhodGUodCk/REk6VEkpKHQsMSk6dCx0aGlzfWdldEF0dHJpYnV0ZSh0KXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW3RdfXNldEF0dHJpYnV0ZSh0LGUpe3JldHVybiB0aGlzLmF0dHJpYnV0ZXNbdF09ZSx0aGlzfWRlbGV0ZUF0dHJpYnV0ZSh0KXtyZXR1cm4gZGVsZXRlIHRoaXMuYXR0cmlidXRlc1t0XSx0aGlzfWhhc0F0dHJpYnV0ZSh0KXtyZXR1cm4gdm9pZCAwIT09dGhpcy5hdHRyaWJ1dGVzW3RdfWFkZEdyb3VwKHQsZSxpPTApe3RoaXMuZ3JvdXBzLnB1c2goe3N0YXJ0OnQsY291bnQ6ZSxtYXRlcmlhbEluZGV4Oml9KX1jbGVhckdyb3Vwcygpe3RoaXMuZ3JvdXBzPVtdfXNldERyYXdSYW5nZSh0LGUpe3RoaXMuZHJhd1JhbmdlLnN0YXJ0PXQsdGhpcy5kcmF3UmFuZ2UuY291bnQ9ZX1hcHBseU1hdHJpeDQodCl7bGV0IGU9dGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uO3ZvaWQgMCE9PWUmJihlLmFwcGx5TWF0cml4NCh0KSxlLm5lZWRzVXBkYXRlPSEwKTtsZXQgaT10aGlzLmF0dHJpYnV0ZXMubm9ybWFsO2lmKHZvaWQgMCE9PWkpe2xldCBvPShuZXcgeW8pLmdldE5vcm1hbE1hdHJpeCh0KTtpLmFwcGx5Tm9ybWFsTWF0cml4KG8pLGkubmVlZHNVcGRhdGU9ITB9bGV0IHI9dGhpcy5hdHRyaWJ1dGVzLnRhbmdlbnQ7cmV0dXJuIHZvaWQgMCE9PXImJihyLnRyYW5zZm9ybURpcmVjdGlvbih0KSxyLm5lZWRzVXBkYXRlPSEwKSxudWxsIT09dGhpcy5ib3VuZGluZ0JveCYmdGhpcy5jb21wdXRlQm91bmRpbmdCb3goKSxudWxsIT09dGhpcy5ib3VuZGluZ1NwaGVyZSYmdGhpcy5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSx0aGlzfWFwcGx5UXVhdGVybmlvbih0KXtyZXR1cm4gbGwubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCksdGhpcy5hcHBseU1hdHJpeDQobGwpLHRoaXN9cm90YXRlWCh0KXtyZXR1cm4gbGwubWFrZVJvdGF0aW9uWCh0KSx0aGlzLmFwcGx5TWF0cml4NChsbCksdGhpc31yb3RhdGVZKHQpe3JldHVybiBsbC5tYWtlUm90YXRpb25ZKHQpLHRoaXMuYXBwbHlNYXRyaXg0KGxsKSx0aGlzfXJvdGF0ZVoodCl7cmV0dXJuIGxsLm1ha2VSb3RhdGlvbloodCksdGhpcy5hcHBseU1hdHJpeDQobGwpLHRoaXN9dHJhbnNsYXRlKHQsZSxpKXtyZXR1cm4gbGwubWFrZVRyYW5zbGF0aW9uKHQsZSxpKSx0aGlzLmFwcGx5TWF0cml4NChsbCksdGhpc31zY2FsZSh0LGUsaSl7cmV0dXJuIGxsLm1ha2VTY2FsZSh0LGUsaSksdGhpcy5hcHBseU1hdHJpeDQobGwpLHRoaXN9bG9va0F0KHQpe3JldHVybiBBMy5sb29rQXQodCksQTMudXBkYXRlTWF0cml4KCksdGhpcy5hcHBseU1hdHJpeDQoQTMubWF0cml4KSx0aGlzfWNlbnRlcigpe3JldHVybiB0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpLHRoaXMuYm91bmRpbmdCb3guZ2V0Q2VudGVyKFIwKS5uZWdhdGUoKSx0aGlzLnRyYW5zbGF0ZShSMC54LFIwLnksUjAueiksdGhpc31zZXRGcm9tUG9pbnRzKHQpe2xldCBlPVtdO2ZvcihsZXQgaT0wLHI9dC5sZW5ndGg7aTxyO2krKyl7bGV0IG89dFtpXTtlLnB1c2goby54LG8ueSxvLnp8fDApfXJldHVybiB0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBOcihlLDMpKSx0aGlzfWNvbXB1dGVCb3VuZGluZ0JveCgpe251bGw9PT10aGlzLmJvdW5kaW5nQm94JiYodGhpcy5ib3VuZGluZ0JveD1uZXcgVHMpO2xldCB0PXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbixlPXRoaXMubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKHQmJnQuaXNHTEJ1ZmZlckF0dHJpYnV0ZSlyZXR1cm4gY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KCk6IEdMQnVmZmVyQXR0cmlidXRlIHJlcXVpcmVzIGEgbWFudWFsIGJvdW5kaW5nIGJveC4gQWx0ZXJuYXRpdmVseSBzZXQgIm1lc2guZnJ1c3R1bUN1bGxlZCIgdG8gImZhbHNlIi4nLHRoaXMpLHZvaWQgdGhpcy5ib3VuZGluZ0JveC5zZXQobmV3IEsoLTEvMCwtMS8wLC0xLzApLG5ldyBLKDEvMCwxLzAsMS8wKSk7aWYodm9pZCAwIT09dCl7aWYodGhpcy5ib3VuZGluZ0JveC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpLGUpZm9yKGxldCBpPTAscj1lLmxlbmd0aDtpPHI7aSsrKVNzLnNldEZyb21CdWZmZXJBdHRyaWJ1dGUoZVtpXSksdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT8oT28uYWRkVmVjdG9ycyh0aGlzLmJvdW5kaW5nQm94Lm1pbixTcy5taW4pLHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChPbyksT28uYWRkVmVjdG9ycyh0aGlzLmJvdW5kaW5nQm94Lm1heCxTcy5tYXgpLHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChPbykpOih0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoU3MubWluKSx0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoU3MubWF4KSl9ZWxzZSB0aGlzLmJvdW5kaW5nQm94Lm1ha2VFbXB0eSgpOyhpc05hTih0aGlzLmJvdW5kaW5nQm94Lm1pbi54KXx8aXNOYU4odGhpcy5ib3VuZGluZ0JveC5taW4ueSl8fGlzTmFOKHRoaXMuYm91bmRpbmdCb3gubWluLnopKSYmY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KCk6IENvbXB1dGVkIG1pbi9tYXggaGF2ZSBOYU4gdmFsdWVzLiBUaGUgInBvc2l0aW9uIiBhdHRyaWJ1dGUgaXMgbGlrZWx5IHRvIGhhdmUgTmFOIHZhbHVlcy4nLHRoaXMpfWNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpe251bGw9PT10aGlzLmJvdW5kaW5nU3BoZXJlJiYodGhpcy5ib3VuZGluZ1NwaGVyZT1uZXcgU3ApO2xldCB0PXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbixlPXRoaXMubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKHQmJnQuaXNHTEJ1ZmZlckF0dHJpYnV0ZSlyZXR1cm4gY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk6IEdMQnVmZmVyQXR0cmlidXRlIHJlcXVpcmVzIGEgbWFudWFsIGJvdW5kaW5nIHNwaGVyZS4gQWx0ZXJuYXRpdmVseSBzZXQgIm1lc2guZnJ1c3R1bUN1bGxlZCIgdG8gImZhbHNlIi4nLHRoaXMpLHZvaWQgdGhpcy5ib3VuZGluZ1NwaGVyZS5zZXQobmV3IEssMS8wKTtpZih0KXtsZXQgaT10aGlzLmJvdW5kaW5nU3BoZXJlLmNlbnRlcjtpZihTcy5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpLGUpZm9yKGxldCBvPTAsYT1lLmxlbmd0aDtvPGE7bysrKXN4LnNldEZyb21CdWZmZXJBdHRyaWJ1dGUoZVtvXSksdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT8oT28uYWRkVmVjdG9ycyhTcy5taW4sc3gubWluKSxTcy5leHBhbmRCeVBvaW50KE9vKSxPby5hZGRWZWN0b3JzKFNzLm1heCxzeC5tYXgpLFNzLmV4cGFuZEJ5UG9pbnQoT28pKTooU3MuZXhwYW5kQnlQb2ludChzeC5taW4pLFNzLmV4cGFuZEJ5UG9pbnQoc3gubWF4KSk7U3MuZ2V0Q2VudGVyKGkpO2xldCByPTA7Zm9yKGxldCBvPTAsYT10LmNvdW50O288YTtvKyspT28uZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LG8pLHI9TWF0aC5tYXgocixpLmRpc3RhbmNlVG9TcXVhcmVkKE9vKSk7aWYoZSlmb3IobGV0IG89MCxhPWUubGVuZ3RoO288YTtvKyspe2xldCBzPWVbb10sbD10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlO2ZvcihsZXQgYz0wLGQ9cy5jb3VudDtjPGQ7YysrKU9vLmZyb21CdWZmZXJBdHRyaWJ1dGUocyxjKSxsJiYoUjAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGMpLE9vLmFkZChSMCkpLHI9TWF0aC5tYXgocixpLmRpc3RhbmNlVG9TcXVhcmVkKE9vKSl9dGhpcy5ib3VuZGluZ1NwaGVyZS5yYWRpdXM9TWF0aC5zcXJ0KHIpLGlzTmFOKHRoaXMuYm91bmRpbmdTcGhlcmUucmFkaXVzKSYmY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk6IENvbXB1dGVkIHJhZGl1cyBpcyBOYU4uIFRoZSAicG9zaXRpb24iIGF0dHJpYnV0ZSBpcyBsaWtlbHkgdG8gaGF2ZSBOYU4gdmFsdWVzLicsdGhpcyl9fWNvbXB1dGVUYW5nZW50cygpe2xldCB0PXRoaXMuaW5kZXgsZT10aGlzLmF0dHJpYnV0ZXM7aWYobnVsbD09PXR8fHZvaWQgMD09PWUucG9zaXRpb258fHZvaWQgMD09PWUubm9ybWFsfHx2b2lkIDA9PT1lLnV2KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY29tcHV0ZVRhbmdlbnRzKCkgZmFpbGVkLiBNaXNzaW5nIHJlcXVpcmVkIGF0dHJpYnV0ZXMgKGluZGV4LCBwb3NpdGlvbiwgbm9ybWFsIG9yIHV2KSIpO2xldCBpPXQuYXJyYXkscj1lLnBvc2l0aW9uLmFycmF5LG89ZS5ub3JtYWwuYXJyYXksYT1lLnV2LmFycmF5LHM9ci5sZW5ndGgvMzt2b2lkIDA9PT1lLnRhbmdlbnQmJnRoaXMuc2V0QXR0cmlidXRlKCJ0YW5nZW50IixuZXcgQXIobmV3IEZsb2F0MzJBcnJheSg0KnMpLDQpKTtsZXQgbD1lLnRhbmdlbnQuYXJyYXksYz1bXSxkPVtdO2ZvcihsZXQgQWU9MDtBZTxzO0FlKyspY1tBZV09bmV3IEssZFtBZV09bmV3IEs7bGV0IHU9bmV3IEsscD1uZXcgSyxoPW5ldyBLLG09bmV3ICRlLF89bmV3ICRlLE09bmV3ICRlLHk9bmV3IEsseD1uZXcgSztmdW5jdGlvbiBSKEFlLEQscmUpe3UuZnJvbUFycmF5KHIsMypBZSkscC5mcm9tQXJyYXkociwzKkQpLGguZnJvbUFycmF5KHIsMypyZSksbS5mcm9tQXJyYXkoYSwyKkFlKSxfLmZyb21BcnJheShhLDIqRCksTS5mcm9tQXJyYXkoYSwyKnJlKSxwLnN1Yih1KSxoLnN1Yih1KSxfLnN1YihtKSxNLnN1YihtKTtsZXQgY2U9MS8oXy54Kk0ueS1NLngqXy55KTshaXNGaW5pdGUoY2UpfHwoeS5jb3B5KHApLm11bHRpcGx5U2NhbGFyKE0ueSkuYWRkU2NhbGVkVmVjdG9yKGgsLV8ueSkubXVsdGlwbHlTY2FsYXIoY2UpLHguY29weShoKS5tdWx0aXBseVNjYWxhcihfLngpLmFkZFNjYWxlZFZlY3RvcihwLC1NLngpLm11bHRpcGx5U2NhbGFyKGNlKSxjW0FlXS5hZGQoeSksY1tEXS5hZGQoeSksY1tyZV0uYWRkKHkpLGRbQWVdLmFkZCh4KSxkW0RdLmFkZCh4KSxkW3JlXS5hZGQoeCkpfWxldCBJPXRoaXMuZ3JvdXBzOzA9PT1JLmxlbmd0aCYmKEk9W3tzdGFydDowLGNvdW50OmkubGVuZ3RofV0pO2ZvcihsZXQgQWU9MCxEPUkubGVuZ3RoO0FlPEQ7KytBZSl7bGV0IHJlPUlbQWVdLGNlPXJlLnN0YXJ0O2ZvcihsZXQgX2U9Y2UsJD1jZStyZS5jb3VudDtfZTwkO19lKz0zKVIoaVtfZSswXSxpW19lKzFdLGlbX2UrMl0pfWxldCBCPW5ldyBLLGVlPW5ldyBLLFE9bmV3IEssd2U9bmV3IEs7ZnVuY3Rpb24gUWUoQWUpe1EuZnJvbUFycmF5KG8sMypBZSksd2UuY29weShRKTtsZXQgRD1jW0FlXTtCLmNvcHkoRCksQi5zdWIoUS5tdWx0aXBseVNjYWxhcihRLmRvdChEKSkpLm5vcm1hbGl6ZSgpLGVlLmNyb3NzVmVjdG9ycyh3ZSxEKTtsZXQgY2U9ZWUuZG90KGRbQWVdKTwwPy0xOjE7bFs0KkFlXT1CLngsbFs0KkFlKzFdPUIueSxsWzQqQWUrMl09Qi56LGxbNCpBZSszXT1jZX1mb3IobGV0IEFlPTAsRD1JLmxlbmd0aDtBZTxEOysrQWUpe2xldCByZT1JW0FlXSxjZT1yZS5zdGFydDtmb3IobGV0IF9lPWNlLCQ9Y2UrcmUuY291bnQ7X2U8JDtfZSs9MylRZShpW19lKzBdKSxRZShpW19lKzFdKSxRZShpW19lKzJdKX19Y29tcHV0ZVZlcnRleE5vcm1hbHMoKXtsZXQgdD10aGlzLmluZGV4LGU9dGhpcy5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIik7aWYodm9pZCAwIT09ZSl7bGV0IGk9dGhpcy5nZXRBdHRyaWJ1dGUoIm5vcm1hbCIpO2lmKHZvaWQgMD09PWkpaT1uZXcgQXIobmV3IEZsb2F0MzJBcnJheSgzKmUuY291bnQpLDMpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLGkpO2Vsc2UgZm9yKGxldCBwPTAsaD1pLmNvdW50O3A8aDtwKyspaS5zZXRYWVoocCwwLDAsMCk7bGV0IHI9bmV3IEssbz1uZXcgSyxhPW5ldyBLLHM9bmV3IEssbD1uZXcgSyxjPW5ldyBLLGQ9bmV3IEssdT1uZXcgSztpZih0KWZvcihsZXQgcD0wLGg9dC5jb3VudDtwPGg7cCs9Myl7bGV0IG09dC5nZXRYKHArMCksXz10LmdldFgocCsxKSxNPXQuZ2V0WChwKzIpO3IuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLG0pLG8uZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLF8pLGEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLE0pLGQuc3ViVmVjdG9ycyhhLG8pLHUuc3ViVmVjdG9ycyhyLG8pLGQuY3Jvc3ModSkscy5mcm9tQnVmZmVyQXR0cmlidXRlKGksbSksbC5mcm9tQnVmZmVyQXR0cmlidXRlKGksXyksYy5mcm9tQnVmZmVyQXR0cmlidXRlKGksTSkscy5hZGQoZCksbC5hZGQoZCksYy5hZGQoZCksaS5zZXRYWVoobSxzLngscy55LHMueiksaS5zZXRYWVooXyxsLngsbC55LGwueiksaS5zZXRYWVooTSxjLngsYy55LGMueil9ZWxzZSBmb3IobGV0IHA9MCxoPWUuY291bnQ7cDxoO3ArPTMpci5mcm9tQnVmZmVyQXR0cmlidXRlKGUscCswKSxvLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxwKzEpLGEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHArMiksZC5zdWJWZWN0b3JzKGEsbyksdS5zdWJWZWN0b3JzKHIsbyksZC5jcm9zcyh1KSxpLnNldFhZWihwKzAsZC54LGQueSxkLnopLGkuc2V0WFlaKHArMSxkLngsZC55LGQueiksaS5zZXRYWVoocCsyLGQueCxkLnksZC56KTt0aGlzLm5vcm1hbGl6ZU5vcm1hbHMoKSxpLm5lZWRzVXBkYXRlPSEwfX1tZXJnZSh0LGUpe2lmKCF0fHwhdC5pc0J1ZmZlckdlb21ldHJ5KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckdlb21ldHJ5Lm1lcmdlKCk6IGdlb21ldHJ5IG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5CdWZmZXJHZW9tZXRyeS4iLHQpO3ZvaWQgMD09PWUmJihlPTAsY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS5tZXJnZSgpOiBPdmVyd3JpdGluZyBvcmlnaW5hbCBnZW9tZXRyeSwgc3RhcnRpbmcgYXQgb2Zmc2V0PTAuIFVzZSBCdWZmZXJHZW9tZXRyeVV0aWxzLm1lcmdlQnVmZmVyR2VvbWV0cmllcygpIGZvciBsb3NzbGVzcyBtZXJnZS4iKSk7bGV0IGk9dGhpcy5hdHRyaWJ1dGVzO2ZvcihsZXQgciBpbiBpKXtpZih2b2lkIDA9PT10LmF0dHJpYnV0ZXNbcl0pY29udGludWU7bGV0IGE9aVtyXS5hcnJheSxzPXQuYXR0cmlidXRlc1tyXSxsPXMuYXJyYXksYz1zLml0ZW1TaXplKmUsZD1NYXRoLm1pbihsLmxlbmd0aCxhLmxlbmd0aC1jKTtmb3IobGV0IHU9MCxwPWM7dTxkO3UrKyxwKyspYVtwXT1sW3VdfXJldHVybiB0aGlzfW5vcm1hbGl6ZU5vcm1hbHMoKXtsZXQgdD10aGlzLmF0dHJpYnV0ZXMubm9ybWFsO2ZvcihsZXQgZT0wLGk9dC5jb3VudDtlPGk7ZSsrKU9vLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxlKSxPby5ub3JtYWxpemUoKSx0LnNldFhZWihlLE9vLngsT28ueSxPby56KX10b05vbkluZGV4ZWQoKXtmdW5jdGlvbiB0KHMsbCl7bGV0IGM9cy5hcnJheSxkPXMuaXRlbVNpemUsdT1zLm5vcm1hbGl6ZWQscD1uZXcgYy5jb25zdHJ1Y3RvcihsLmxlbmd0aCpkKSxoPTAsbT0wO2ZvcihsZXQgXz0wLE09bC5sZW5ndGg7XzxNO18rKyl7aD1zLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU/bFtfXSpzLmRhdGEuc3RyaWRlK3Mub2Zmc2V0OmxbX10qZDtmb3IobGV0IHk9MDt5PGQ7eSsrKXBbbSsrXT1jW2grK119cmV0dXJuIG5ldyBBcihwLGQsdSl9aWYobnVsbD09PXRoaXMuaW5kZXgpcmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnkudG9Ob25JbmRleGVkKCk6IEJ1ZmZlckdlb21ldHJ5IGlzIGFscmVhZHkgbm9uLWluZGV4ZWQuIiksdGhpcztsZXQgZT1uZXcgR2ksaT10aGlzLmluZGV4LmFycmF5LHI9dGhpcy5hdHRyaWJ1dGVzO2ZvcihsZXQgcyBpbiByKXtsZXQgYz10KHJbc10saSk7ZS5zZXRBdHRyaWJ1dGUocyxjKX1sZXQgbz10aGlzLm1vcnBoQXR0cmlidXRlcztmb3IobGV0IHMgaW4gbyl7bGV0IGw9W10sYz1vW3NdO2ZvcihsZXQgZD0wLHU9Yy5sZW5ndGg7ZDx1O2QrKyl7bGV0IGg9dChjW2RdLGkpO2wucHVzaChoKX1lLm1vcnBoQXR0cmlidXRlc1tzXT1sfWUubW9ycGhUYXJnZXRzUmVsYXRpdmU9dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZTtsZXQgYT10aGlzLmdyb3Vwcztmb3IobGV0IHM9MCxsPWEubGVuZ3RoO3M8bDtzKyspe2xldCBjPWFbc107ZS5hZGRHcm91cChjLnN0YXJ0LGMuY291bnQsYy5tYXRlcmlhbEluZGV4KX1yZXR1cm4gZX10b0pTT04oKXtsZXQgdD17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IkJ1ZmZlckdlb21ldHJ5IixnZW5lcmF0b3I6IkJ1ZmZlckdlb21ldHJ5LnRvSlNPTiJ9fTtpZih0LnV1aWQ9dGhpcy51dWlkLHQudHlwZT10aGlzLnR5cGUsIiIhPT10aGlzLm5hbWUmJih0Lm5hbWU9dGhpcy5uYW1lKSxPYmplY3Qua2V5cyh0aGlzLnVzZXJEYXRhKS5sZW5ndGg+MCYmKHQudXNlckRhdGE9dGhpcy51c2VyRGF0YSksdm9pZCAwIT09dGhpcy5wYXJhbWV0ZXJzKXtsZXQgbD10aGlzLnBhcmFtZXRlcnM7Zm9yKGxldCBjIGluIGwpdm9pZCAwIT09bFtjXSYmKHRbY109bFtjXSk7cmV0dXJuIHR9dC5kYXRhPXthdHRyaWJ1dGVzOnt9fTtsZXQgZT10aGlzLmluZGV4O251bGwhPT1lJiYodC5kYXRhLmluZGV4PXt0eXBlOmUuYXJyYXkuY29uc3RydWN0b3IubmFtZSxhcnJheTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLmFycmF5KX0pO2xldCBpPXRoaXMuYXR0cmlidXRlcztmb3IobGV0IGwgaW4gaSl0LmRhdGEuYXR0cmlidXRlc1tsXT1pW2xdLnRvSlNPTih0LmRhdGEpO2xldCByPXt9LG89ITE7Zm9yKGxldCBsIGluIHRoaXMubW9ycGhBdHRyaWJ1dGVzKXtsZXQgYz10aGlzLm1vcnBoQXR0cmlidXRlc1tsXSxkPVtdO2ZvcihsZXQgdT0wLHA9Yy5sZW5ndGg7dTxwO3UrKylkLnB1c2goY1t1XS50b0pTT04odC5kYXRhKSk7ZC5sZW5ndGg+MCYmKHJbbF09ZCxvPSEwKX1vJiYodC5kYXRhLm1vcnBoQXR0cmlidXRlcz1yLHQuZGF0YS5tb3JwaFRhcmdldHNSZWxhdGl2ZT10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlKTtsZXQgYT10aGlzLmdyb3VwczthLmxlbmd0aD4wJiYodC5kYXRhLmdyb3Vwcz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGEpKSk7bGV0IHM9dGhpcy5ib3VuZGluZ1NwaGVyZTtyZXR1cm4gbnVsbCE9PXMmJih0LmRhdGEuYm91bmRpbmdTcGhlcmU9e2NlbnRlcjpzLmNlbnRlci50b0FycmF5KCkscmFkaXVzOnMucmFkaXVzfSksdH1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3RoaXMuaW5kZXg9bnVsbCx0aGlzLmF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaEF0dHJpYnV0ZXM9e30sdGhpcy5ncm91cHM9W10sdGhpcy5ib3VuZGluZ0JveD1udWxsLHRoaXMuYm91bmRpbmdTcGhlcmU9bnVsbDtsZXQgZT17fTt0aGlzLm5hbWU9dC5uYW1lO2xldCBpPXQuaW5kZXg7bnVsbCE9PWkmJnRoaXMuc2V0SW5kZXgoaS5jbG9uZShlKSk7bGV0IHI9dC5hdHRyaWJ1dGVzO2ZvcihsZXQgYyBpbiByKXRoaXMuc2V0QXR0cmlidXRlKGMscltjXS5jbG9uZShlKSk7bGV0IG89dC5tb3JwaEF0dHJpYnV0ZXM7Zm9yKGxldCBjIGluIG8pe2xldCBkPVtdLHU9b1tjXTtmb3IobGV0IHA9MCxoPXUubGVuZ3RoO3A8aDtwKyspZC5wdXNoKHVbcF0uY2xvbmUoZSkpO3RoaXMubW9ycGhBdHRyaWJ1dGVzW2NdPWR9dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT10Lm1vcnBoVGFyZ2V0c1JlbGF0aXZlO2xldCBhPXQuZ3JvdXBzO2ZvcihsZXQgYz0wLGQ9YS5sZW5ndGg7YzxkO2MrKyl7bGV0IHU9YVtjXTt0aGlzLmFkZEdyb3VwKHUuc3RhcnQsdS5jb3VudCx1Lm1hdGVyaWFsSW5kZXgpfWxldCBzPXQuYm91bmRpbmdCb3g7bnVsbCE9PXMmJih0aGlzLmJvdW5kaW5nQm94PXMuY2xvbmUoKSk7bGV0IGw9dC5ib3VuZGluZ1NwaGVyZTtyZXR1cm4gbnVsbCE9PWwmJih0aGlzLmJvdW5kaW5nU3BoZXJlPWwuY2xvbmUoKSksdGhpcy5kcmF3UmFuZ2Uuc3RhcnQ9dC5kcmF3UmFuZ2Uuc3RhcnQsdGhpcy5kcmF3UmFuZ2UuY291bnQ9dC5kcmF3UmFuZ2UuY291bnQsdGhpcy51c2VyRGF0YT10LnVzZXJEYXRhLHZvaWQgMCE9PXQucGFyYW1ldGVycyYmKHRoaXMucGFyYW1ldGVycz1PYmplY3QuYXNzaWduKHt9LHQucGFyYW1ldGVycykpLHRoaXN9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19O0dpLnByb3RvdHlwZS5pc0J1ZmZlckdlb21ldHJ5PSEwO3ZhciBoZWU9bmV3IHZuLFAwPW5ldyBFcCxSMz1uZXcgU3AsZnA9bmV3IEssZ3A9bmV3IEssX3A9bmV3IEssUDM9bmV3IEssazM9bmV3IEssTzM9bmV3IEssS0Q9bmV3IEssSkQ9bmV3IEssJEQ9bmV3IEssZUk9bmV3ICRlLHRJPW5ldyAkZSxuST1uZXcgJGUsRjM9bmV3IEssaUk9bmV3IEssc289Y2xhc3MgZXh0ZW5kcyBVaXtjb25zdHJ1Y3Rvcih0PW5ldyBHaSxlPW5ldyB2bSl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2giLHRoaXMuZ2VvbWV0cnk9dCx0aGlzLm1hdGVyaWFsPWUsdGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHZvaWQgMCE9PXQubW9ycGhUYXJnZXRJbmZsdWVuY2VzJiYodGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9dC5tb3JwaFRhcmdldEluZmx1ZW5jZXMuc2xpY2UoKSksdm9pZCAwIT09dC5tb3JwaFRhcmdldERpY3Rpb25hcnkmJih0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT1PYmplY3QuYXNzaWduKHt9LHQubW9ycGhUYXJnZXREaWN0aW9uYXJ5KSksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXMuZ2VvbWV0cnk9dC5nZW9tZXRyeSx0aGlzfXVwZGF0ZU1vcnBoVGFyZ2V0cygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgZT10Lm1vcnBoQXR0cmlidXRlcyxpPU9iamVjdC5rZXlzKGUpO2lmKGkubGVuZ3RoPjApe2xldCByPWVbaVswXV07aWYodm9pZCAwIT09cil7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9W10sdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9e307Zm9yKGxldCBvPTAsYT1yLmxlbmd0aDtvPGE7bysrKXtsZXQgcz1yW29dLm5hbWV8fFN0cmluZyhvKTt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKDApLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5W3NdPW99fX19ZWxzZXtsZXQgZT10Lm1vcnBoVGFyZ2V0czt2b2lkIDAhPT1lJiZlLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoLnVwZGF0ZU1vcnBoVGFyZ2V0cygpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9fXJheWNhc3QodCxlKXtsZXQgYSxpPXRoaXMuZ2VvbWV0cnkscj10aGlzLm1hdGVyaWFsLG89dGhpcy5tYXRyaXhXb3JsZDtpZih2b2lkIDAhPT1yJiYobnVsbD09PWkuYm91bmRpbmdTcGhlcmUmJmkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCksUjMuY29weShpLmJvdW5kaW5nU3BoZXJlKSxSMy5hcHBseU1hdHJpeDQobyksITEhPT10LnJheS5pbnRlcnNlY3RzU3BoZXJlKFIzKSkmJihoZWUuY29weShvKS5pbnZlcnQoKSxQMC5jb3B5KHQucmF5KS5hcHBseU1hdHJpeDQoaGVlKSxudWxsPT09aS5ib3VuZGluZ0JveHx8ITEhPT1QMC5pbnRlcnNlY3RzQm94KGkuYm91bmRpbmdCb3gpKSlpZihpLmlzQnVmZmVyR2VvbWV0cnkpe2xldCBzPWkuaW5kZXgsbD1pLmF0dHJpYnV0ZXMucG9zaXRpb24sYz1pLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbixkPWkubW9ycGhUYXJnZXRzUmVsYXRpdmUsdT1pLmF0dHJpYnV0ZXMudXYscD1pLmF0dHJpYnV0ZXMudXYyLGg9aS5ncm91cHMsbT1pLmRyYXdSYW5nZTtpZihudWxsIT09cylpZihBcnJheS5pc0FycmF5KHIpKWZvcihsZXQgXz0wLE09aC5sZW5ndGg7XzxNO18rKyl7bGV0IHk9aFtfXSx4PXJbeS5tYXRlcmlhbEluZGV4XTtmb3IobGV0IEI9TWF0aC5tYXgoeS5zdGFydCxtLnN0YXJ0KSxlZT1NYXRoLm1pbihzLmNvdW50LE1hdGgubWluKHkuc3RhcnQreS5jb3VudCxtLnN0YXJ0K20uY291bnQpKTtCPGVlO0IrPTMpe2xldCBRPXMuZ2V0WChCKSx3ZT1zLmdldFgoQisxKSxRZT1zLmdldFgoQisyKTthPXJJKHRoaXMseCx0LFAwLGwsYyxkLHUscCxRLHdlLFFlKSxhJiYoYS5mYWNlSW5kZXg9TWF0aC5mbG9vcihCLzMpLGEuZmFjZS5tYXRlcmlhbEluZGV4PXkubWF0ZXJpYWxJbmRleCxlLnB1c2goYSkpfX1lbHNlIGZvcihsZXQgeT1NYXRoLm1heCgwLG0uc3RhcnQpLHg9TWF0aC5taW4ocy5jb3VudCxtLnN0YXJ0K20uY291bnQpO3k8eDt5Kz0zKXtsZXQgUj1zLmdldFgoeSksST1zLmdldFgoeSsxKSxCPXMuZ2V0WCh5KzIpO2E9ckkodGhpcyxyLHQsUDAsbCxjLGQsdSxwLFIsSSxCKSxhJiYoYS5mYWNlSW5kZXg9TWF0aC5mbG9vcih5LzMpLGUucHVzaChhKSl9ZWxzZSBpZih2b2lkIDAhPT1sKWlmKEFycmF5LmlzQXJyYXkocikpZm9yKGxldCBfPTAsTT1oLmxlbmd0aDtfPE07XysrKXtsZXQgeT1oW19dLHg9clt5Lm1hdGVyaWFsSW5kZXhdO2ZvcihsZXQgQj1NYXRoLm1heCh5LnN0YXJ0LG0uc3RhcnQpLGVlPU1hdGgubWluKGwuY291bnQsTWF0aC5taW4oeS5zdGFydCt5LmNvdW50LG0uc3RhcnQrbS5jb3VudCkpO0I8ZWU7Qis9MylhPXJJKHRoaXMseCx0LFAwLGwsYyxkLHUscCxCLEIrMSxCKzIpLGEmJihhLmZhY2VJbmRleD1NYXRoLmZsb29yKEIvMyksYS5mYWNlLm1hdGVyaWFsSW5kZXg9eS5tYXRlcmlhbEluZGV4LGUucHVzaChhKSl9ZWxzZSBmb3IobGV0IHk9TWF0aC5tYXgoMCxtLnN0YXJ0KSx4PU1hdGgubWluKGwuY291bnQsbS5zdGFydCttLmNvdW50KTt5PHg7eSs9MylhPXJJKHRoaXMscix0LFAwLGwsYyxkLHUscCx5LHkrMSx5KzIpLGEmJihhLmZhY2VJbmRleD1NYXRoLmZsb29yKHkvMyksZS5wdXNoKGEpKX1lbHNlIGkuaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTWVzaC5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19O2Z1bmN0aW9uIHJJKG4sdCxlLGkscixvLGEscyxsLGMsZCx1KXtmcC5mcm9tQnVmZmVyQXR0cmlidXRlKHIsYyksZ3AuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLGQpLF9wLmZyb21CdWZmZXJBdHRyaWJ1dGUocix1KTtsZXQgcD1uLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztpZihvJiZwKXtLRC5zZXQoMCwwLDApLEpELnNldCgwLDAsMCksJEQuc2V0KDAsMCwwKTtmb3IobGV0IG09MCxfPW8ubGVuZ3RoO208XzttKyspe2xldCBNPXBbbV0seT1vW21dOzAhPT1NJiYoUDMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh5LGMpLGszLmZyb21CdWZmZXJBdHRyaWJ1dGUoeSxkKSxPMy5mcm9tQnVmZmVyQXR0cmlidXRlKHksdSksYT8oS0QuYWRkU2NhbGVkVmVjdG9yKFAzLE0pLEpELmFkZFNjYWxlZFZlY3RvcihrMyxNKSwkRC5hZGRTY2FsZWRWZWN0b3IoTzMsTSkpOihLRC5hZGRTY2FsZWRWZWN0b3IoUDMuc3ViKGZwKSxNKSxKRC5hZGRTY2FsZWRWZWN0b3IoazMuc3ViKGdwKSxNKSwkRC5hZGRTY2FsZWRWZWN0b3IoTzMuc3ViKF9wKSxNKSkpfWZwLmFkZChLRCksZ3AuYWRkKEpEKSxfcC5hZGQoJEQpfW4uaXNTa2lubmVkTWVzaCYmKG4uYm9uZVRyYW5zZm9ybShjLGZwKSxuLmJvbmVUcmFuc2Zvcm0oZCxncCksbi5ib25lVHJhbnNmb3JtKHUsX3ApKTtsZXQgaD1mdW5jdGlvbihuLHQsZSxpLHIsbyxhLHMpe2xldCBsO2lmKGw9dC5zaWRlPT09Ym8/aS5pbnRlcnNlY3RUcmlhbmdsZShhLG8sciwhMCxzKTppLmludGVyc2VjdFRyaWFuZ2xlKHIsbyxhLHQuc2lkZSE9PVowLHMpLG51bGw9PT1sKXJldHVybiBudWxsO2lJLmNvcHkocyksaUkuYXBwbHlNYXRyaXg0KG4ubWF0cml4V29ybGQpO2xldCBjPWUucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKGlJKTtyZXR1cm4gYzxlLm5lYXJ8fGM+ZS5mYXI/bnVsbDp7ZGlzdGFuY2U6Yyxwb2ludDppSS5jbG9uZSgpLG9iamVjdDpufX0obix0LGUsaSxmcCxncCxfcCxGMyk7aWYoaCl7cyYmKGVJLmZyb21CdWZmZXJBdHRyaWJ1dGUocyxjKSx0SS5mcm9tQnVmZmVyQXR0cmlidXRlKHMsZCksbkkuZnJvbUJ1ZmZlckF0dHJpYnV0ZShzLHUpLGgudXY9VnIuZ2V0VVYoRjMsZnAsZ3AsX3AsZUksdEksbkksbmV3ICRlKSksbCYmKGVJLmZyb21CdWZmZXJBdHRyaWJ1dGUobCxjKSx0SS5mcm9tQnVmZmVyQXR0cmlidXRlKGwsZCksbkkuZnJvbUJ1ZmZlckF0dHJpYnV0ZShsLHUpLGgudXYyPVZyLmdldFVWKEYzLGZwLGdwLF9wLGVJLHRJLG5JLG5ldyAkZSkpO2xldCBtPXthOmMsYjpkLGM6dSxub3JtYWw6bmV3IEssbWF0ZXJpYWxJbmRleDowfTtWci5nZXROb3JtYWwoZnAsZ3AsX3AsbS5ub3JtYWwpLGguZmFjZT1tfXJldHVybiBofXNvLnByb3RvdHlwZS5pc01lc2g9ITA7dmFyIHltPWNsYXNzIGV4dGVuZHMgR2l7Y29uc3RydWN0b3IodD0xLGU9MSxpPTEscj0xLG89MSxhPTEpe3N1cGVyKCksdGhpcy50eXBlPSJCb3hHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDp0LGhlaWdodDplLGRlcHRoOmksd2lkdGhTZWdtZW50czpyLGhlaWdodFNlZ21lbnRzOm8sZGVwdGhTZWdtZW50czphfTtsZXQgcz10aGlzO3I9TWF0aC5mbG9vcihyKSxvPU1hdGguZmxvb3IobyksYT1NYXRoLmZsb29yKGEpO2xldCBsPVtdLGM9W10sZD1bXSx1PVtdLHA9MCxoPTA7ZnVuY3Rpb24gbShfLE0seSx4LFIsSSxCLGVlLFEsd2UsUWUpe2xldCBBZT1JL1EsRD1CL3dlLHJlPUkvMixjZT1CLzIsaGU9ZWUvMixfZT1RKzEsJD13ZSsxLGRlPTAscGU9MCxHZT1uZXcgSztmb3IobGV0IFNlPTA7U2U8JDtTZSsrKXtsZXQgRmU9U2UqRC1jZTtmb3IobGV0IGx0PTA7bHQ8X2U7bHQrKylHZVtfXT0obHQqQWUtcmUpKngsR2VbTV09RmUqUixHZVt5XT1oZSxjLnB1c2goR2UueCxHZS55LEdlLnopLEdlW19dPTAsR2VbTV09MCxHZVt5XT1lZT4wPzE6LTEsZC5wdXNoKEdlLngsR2UueSxHZS56KSx1LnB1c2gobHQvUSksdS5wdXNoKDEtU2Uvd2UpLGRlKz0xfWZvcihsZXQgU2U9MDtTZTx3ZTtTZSsrKWZvcihsZXQgRmU9MDtGZTxRO0ZlKyspe2xldCBNdD1wK0ZlK19lKihTZSsxKSxwdD1wKyhGZSsxKStfZSooU2UrMSksa2U9cCsoRmUrMSkrX2UqU2U7bC5wdXNoKHArRmUrX2UqU2UsTXQsa2UpLGwucHVzaChNdCxwdCxrZSkscGUrPTZ9cy5hZGRHcm91cChoLHBlLFFlKSxoKz1wZSxwKz1kZX1tKCJ6IiwieSIsIngiLC0xLC0xLGksZSx0LGEsbywwKSxtKCJ6IiwieSIsIngiLDEsLTEsaSxlLC10LGEsbywxKSxtKCJ4IiwieiIsInkiLDEsMSx0LGksZSxyLGEsMiksbSgieCIsInoiLCJ5IiwxLC0xLHQsaSwtZSxyLGEsMyksbSgieCIsInkiLCJ6IiwxLC0xLHQsZSxpLHIsbyw0KSxtKCJ4IiwieSIsInoiLC0xLC0xLHQsZSwtaSxyLG8sNSksdGhpcy5zZXRJbmRleChsKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBOcihjLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgTnIoZCwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgTnIodSwyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgeW0odC53aWR0aCx0LmhlaWdodCx0LmRlcHRoLHQud2lkdGhTZWdtZW50cyx0LmhlaWdodFNlZ21lbnRzLHQuZGVwdGhTZWdtZW50cyl9fTtmdW5jdGlvbiBKMChuKXtsZXQgdD17fTtmb3IobGV0IGUgaW4gbil7dFtlXT17fTtmb3IobGV0IGkgaW4gbltlXSl7bGV0IHI9bltlXVtpXTt0W2VdW2ldPXImJihyLmlzQ29sb3J8fHIuaXNNYXRyaXgzfHxyLmlzTWF0cml4NHx8ci5pc1ZlY3RvcjJ8fHIuaXNWZWN0b3IzfHxyLmlzVmVjdG9yNHx8ci5pc1RleHR1cmV8fHIuaXNRdWF0ZXJuaW9uKT9yLmNsb25lKCk6QXJyYXkuaXNBcnJheShyKT9yLnNsaWNlKCk6cn19cmV0dXJuIHR9ZnVuY3Rpb24gbmEobil7bGV0IHQ9e307Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspe2xldCBpPUowKG5bZV0pO2ZvcihsZXQgciBpbiBpKXRbcl09aVtyXX1yZXR1cm4gdH12YXIgZFBlPXtjbG9uZTpKMCxtZXJnZTpuYX0samQ9Y2xhc3MgZXh0ZW5kcyBGb3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iU2hhZGVyTWF0ZXJpYWwiLHRoaXMuZGVmaW5lcz17fSx0aGlzLnVuaWZvcm1zPXt9LHRoaXMudmVydGV4U2hhZGVyPSJ2b2lkIG1haW4oKSB7XG5cdGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcbn0iLHRoaXMuZnJhZ21lbnRTaGFkZXI9InZvaWQgbWFpbigpIHtcblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggMS4wLCAwLjAsIDAuMCwgMS4wICk7XG59Iix0aGlzLmxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy5mb2c9ITEsdGhpcy5saWdodHM9ITEsdGhpcy5jbGlwcGluZz0hMSx0aGlzLmV4dGVuc2lvbnM9e2Rlcml2YXRpdmVzOiExLGZyYWdEZXB0aDohMSxkcmF3QnVmZmVyczohMSxzaGFkZXJUZXh0dXJlTE9EOiExfSx0aGlzLmRlZmF1bHRBdHRyaWJ1dGVWYWx1ZXM9e2NvbG9yOlsxLDEsMV0sdXY6WzAsMF0sdXYyOlswLDBdfSx0aGlzLmluZGV4MEF0dHJpYnV0ZU5hbWU9dm9pZCAwLHRoaXMudW5pZm9ybXNOZWVkVXBkYXRlPSExLHRoaXMuZ2xzbFZlcnNpb249bnVsbCx2b2lkIDAhPT10JiYodm9pZCAwIT09dC5hdHRyaWJ1dGVzJiZjb25zb2xlLmVycm9yKCJUSFJFRS5TaGFkZXJNYXRlcmlhbDogYXR0cmlidXRlcyBzaG91bGQgbm93IGJlIGRlZmluZWQgaW4gVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKSx0aGlzLnNldFZhbHVlcyh0KSl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmZyYWdtZW50U2hhZGVyPXQuZnJhZ21lbnRTaGFkZXIsdGhpcy52ZXJ0ZXhTaGFkZXI9dC52ZXJ0ZXhTaGFkZXIsdGhpcy51bmlmb3Jtcz1KMCh0LnVuaWZvcm1zKSx0aGlzLmRlZmluZXM9T2JqZWN0LmFzc2lnbih7fSx0LmRlZmluZXMpLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMubGlnaHRzPXQubGlnaHRzLHRoaXMuY2xpcHBpbmc9dC5jbGlwcGluZyx0aGlzLmV4dGVuc2lvbnM9T2JqZWN0LmFzc2lnbih7fSx0LmV4dGVuc2lvbnMpLHRoaXMuZ2xzbFZlcnNpb249dC5nbHNsVmVyc2lvbix0aGlzfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7ZS5nbHNsVmVyc2lvbj10aGlzLmdsc2xWZXJzaW9uLGUudW5pZm9ybXM9e307Zm9yKGxldCByIGluIHRoaXMudW5pZm9ybXMpe2xldCBhPXRoaXMudW5pZm9ybXNbcl0udmFsdWU7ZS51bmlmb3Jtc1tyXT1hJiZhLmlzVGV4dHVyZT97dHlwZToidCIsdmFsdWU6YS50b0pTT04odCkudXVpZH06YSYmYS5pc0NvbG9yP3t0eXBlOiJjIix2YWx1ZTphLmdldEhleCgpfTphJiZhLmlzVmVjdG9yMj97dHlwZToidjIiLHZhbHVlOmEudG9BcnJheSgpfTphJiZhLmlzVmVjdG9yMz97dHlwZToidjMiLHZhbHVlOmEudG9BcnJheSgpfTphJiZhLmlzVmVjdG9yND97dHlwZToidjQiLHZhbHVlOmEudG9BcnJheSgpfTphJiZhLmlzTWF0cml4Mz97dHlwZToibTMiLHZhbHVlOmEudG9BcnJheSgpfTphJiZhLmlzTWF0cml4ND97dHlwZToibTQiLHZhbHVlOmEudG9BcnJheSgpfTp7dmFsdWU6YX19T2JqZWN0LmtleXModGhpcy5kZWZpbmVzKS5sZW5ndGg+MCYmKGUuZGVmaW5lcz10aGlzLmRlZmluZXMpLGUudmVydGV4U2hhZGVyPXRoaXMudmVydGV4U2hhZGVyLGUuZnJhZ21lbnRTaGFkZXI9dGhpcy5mcmFnbWVudFNoYWRlcjtsZXQgaT17fTtmb3IobGV0IHIgaW4gdGhpcy5leHRlbnNpb25zKSEwPT09dGhpcy5leHRlbnNpb25zW3JdJiYoaVtyXT0hMCk7cmV0dXJuIE9iamVjdC5rZXlzKGkpLmxlbmd0aD4wJiYoZS5leHRlbnNpb25zPWkpLGV9fTtqZC5wcm90b3R5cGUuaXNTaGFkZXJNYXRlcmlhbD0hMDt2YXIgU3g9Y2xhc3MgZXh0ZW5kcyBVaXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJDYW1lcmEiLHRoaXMubWF0cml4V29ybGRJbnZlcnNlPW5ldyB2bix0aGlzLnByb2plY3Rpb25NYXRyaXg9bmV3IHZuLHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2U9bmV3IHZufWNvcHkodCxlKXtyZXR1cm4gc3VwZXIuY29weSh0LGUpLHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodC5tYXRyaXhXb3JsZEludmVyc2UpLHRoaXMucHJvamVjdGlvbk1hdHJpeC5jb3B5KHQucHJvamVjdGlvbk1hdHJpeCksdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHQucHJvamVjdGlvbk1hdHJpeEludmVyc2UpLHRoaXN9Z2V0V29ybGREaXJlY3Rpb24odCl7dGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSk7bGV0IGU9dGhpcy5tYXRyaXhXb3JsZC5lbGVtZW50cztyZXR1cm4gdC5zZXQoLWVbOF0sLWVbOV0sLWVbMTBdKS5ub3JtYWxpemUoKX11cGRhdGVNYXRyaXhXb3JsZCh0KXtzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KSx0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpfXVwZGF0ZVdvcmxkTWF0cml4KHQsZSl7c3VwZXIudXBkYXRlV29ybGRNYXRyaXgodCxlKSx0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfX07U3gucHJvdG90eXBlLmlzQ2FtZXJhPSEwO3ZhciByYT1jbGFzcyBleHRlbmRzIFN4e2NvbnN0cnVjdG9yKHQ9NTAsZT0xLGk9LjEscj0yZTMpe3N1cGVyKCksdGhpcy50eXBlPSJQZXJzcGVjdGl2ZUNhbWVyYSIsdGhpcy5mb3Y9dCx0aGlzLnpvb209MSx0aGlzLm5lYXI9aSx0aGlzLmZhcj1yLHRoaXMuZm9jdXM9MTAsdGhpcy5hc3BlY3Q9ZSx0aGlzLnZpZXc9bnVsbCx0aGlzLmZpbG1HYXVnZT0zNSx0aGlzLmZpbG1PZmZzZXQ9MCx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jb3B5KHQsZSl7cmV0dXJuIHN1cGVyLmNvcHkodCxlKSx0aGlzLmZvdj10LmZvdix0aGlzLnpvb209dC56b29tLHRoaXMubmVhcj10Lm5lYXIsdGhpcy5mYXI9dC5mYXIsdGhpcy5mb2N1cz10LmZvY3VzLHRoaXMuYXNwZWN0PXQuYXNwZWN0LHRoaXMudmlldz1udWxsPT09dC52aWV3P251bGw6T2JqZWN0LmFzc2lnbih7fSx0LnZpZXcpLHRoaXMuZmlsbUdhdWdlPXQuZmlsbUdhdWdlLHRoaXMuZmlsbU9mZnNldD10LmZpbG1PZmZzZXQsdGhpc31zZXRGb2NhbExlbmd0aCh0KXtsZXQgZT0uNSp0aGlzLmdldEZpbG1IZWlnaHQoKS90O3RoaXMuZm92PTIqJDMqTWF0aC5hdGFuKGUpLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWdldEZvY2FsTGVuZ3RoKCl7bGV0IHQ9TWF0aC50YW4oLjUqbTMqdGhpcy5mb3YpO3JldHVybi41KnRoaXMuZ2V0RmlsbUhlaWdodCgpL3R9Z2V0RWZmZWN0aXZlRk9WKCl7cmV0dXJuIDIqJDMqTWF0aC5hdGFuKE1hdGgudGFuKC41Km0zKnRoaXMuZm92KS90aGlzLnpvb20pfWdldEZpbG1XaWR0aCgpe3JldHVybiB0aGlzLmZpbG1HYXVnZSpNYXRoLm1pbih0aGlzLmFzcGVjdCwxKX1nZXRGaWxtSGVpZ2h0KCl7cmV0dXJuIHRoaXMuZmlsbUdhdWdlL01hdGgubWF4KHRoaXMuYXNwZWN0LDEpfXNldFZpZXdPZmZzZXQodCxlLGkscixvLGEpe3RoaXMuYXNwZWN0PXQvZSxudWxsPT09dGhpcy52aWV3JiYodGhpcy52aWV3PXtlbmFibGVkOiEwLGZ1bGxXaWR0aDoxLGZ1bGxIZWlnaHQ6MSxvZmZzZXRYOjAsb2Zmc2V0WTowLHdpZHRoOjEsaGVpZ2h0OjF9KSx0aGlzLnZpZXcuZW5hYmxlZD0hMCx0aGlzLnZpZXcuZnVsbFdpZHRoPXQsdGhpcy52aWV3LmZ1bGxIZWlnaHQ9ZSx0aGlzLnZpZXcub2Zmc2V0WD1pLHRoaXMudmlldy5vZmZzZXRZPXIsdGhpcy52aWV3LndpZHRoPW8sdGhpcy52aWV3LmhlaWdodD1hLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWNsZWFyVmlld09mZnNldCgpe251bGwhPT10aGlzLnZpZXcmJih0aGlzLnZpZXcuZW5hYmxlZD0hMSksdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9dXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpe2xldCB0PXRoaXMubmVhcixlPXQqTWF0aC50YW4oLjUqbTMqdGhpcy5mb3YpL3RoaXMuem9vbSxpPTIqZSxyPXRoaXMuYXNwZWN0Kmksbz0tLjUqcixhPXRoaXMudmlldztpZihudWxsIT09dGhpcy52aWV3JiZ0aGlzLnZpZXcuZW5hYmxlZCl7bGV0IGw9YS5mdWxsV2lkdGgsYz1hLmZ1bGxIZWlnaHQ7bys9YS5vZmZzZXRYKnIvbCxlLT1hLm9mZnNldFkqaS9jLHIqPWEud2lkdGgvbCxpKj1hLmhlaWdodC9jfWxldCBzPXRoaXMuZmlsbU9mZnNldDswIT09cyYmKG8rPXQqcy90aGlzLmdldEZpbG1XaWR0aCgpKSx0aGlzLnByb2plY3Rpb25NYXRyaXgubWFrZVBlcnNwZWN0aXZlKG8sbytyLGUsZS1pLHQsdGhpcy5mYXIpLHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2UuY29weSh0aGlzLnByb2plY3Rpb25NYXRyaXgpLmludmVydCgpfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7cmV0dXJuIGUub2JqZWN0LmZvdj10aGlzLmZvdixlLm9iamVjdC56b29tPXRoaXMuem9vbSxlLm9iamVjdC5uZWFyPXRoaXMubmVhcixlLm9iamVjdC5mYXI9dGhpcy5mYXIsZS5vYmplY3QuZm9jdXM9dGhpcy5mb2N1cyxlLm9iamVjdC5hc3BlY3Q9dGhpcy5hc3BlY3QsbnVsbCE9PXRoaXMudmlldyYmKGUub2JqZWN0LnZpZXc9T2JqZWN0LmFzc2lnbih7fSx0aGlzLnZpZXcpKSxlLm9iamVjdC5maWxtR2F1Z2U9dGhpcy5maWxtR2F1Z2UsZS5vYmplY3QuZmlsbU9mZnNldD10aGlzLmZpbG1PZmZzZXQsZX19O3JhLnByb3RvdHlwZS5pc1BlcnNwZWN0aXZlQ2FtZXJhPSEwO3ZhciBFeD1jbGFzcyBleHRlbmRzIFVpe2NvbnN0cnVjdG9yKHQsZSxpKXtpZihzdXBlcigpLHRoaXMudHlwZT0iQ3ViZUNhbWVyYSIsITAhPT1pLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLkN1YmVDYW1lcmE6IFRoZSBjb25zdHJ1Y3RvciBub3cgZXhwZWN0cyBhbiBpbnN0YW5jZSBvZiBXZWJHTEN1YmVSZW5kZXJUYXJnZXQgYXMgdGhpcmQgcGFyYW1ldGVyLiIpO3RoaXMucmVuZGVyVGFyZ2V0PWk7bGV0IHI9bmV3IHJhKDkwLDEsdCxlKTtyLmxheWVycz10aGlzLmxheWVycyxyLnVwLnNldCgwLC0xLDApLHIubG9va0F0KG5ldyBLKDEsMCwwKSksdGhpcy5hZGQocik7bGV0IG89bmV3IHJhKDkwLDEsdCxlKTtvLmxheWVycz10aGlzLmxheWVycyxvLnVwLnNldCgwLC0xLDApLG8ubG9va0F0KG5ldyBLKC0xLDAsMCkpLHRoaXMuYWRkKG8pO2xldCBhPW5ldyByYSg5MCwxLHQsZSk7YS5sYXllcnM9dGhpcy5sYXllcnMsYS51cC5zZXQoMCwwLDEpLGEubG9va0F0KG5ldyBLKDAsMSwwKSksdGhpcy5hZGQoYSk7bGV0IHM9bmV3IHJhKDkwLDEsdCxlKTtzLmxheWVycz10aGlzLmxheWVycyxzLnVwLnNldCgwLDAsLTEpLHMubG9va0F0KG5ldyBLKDAsLTEsMCkpLHRoaXMuYWRkKHMpO2xldCBsPW5ldyByYSg5MCwxLHQsZSk7bC5sYXllcnM9dGhpcy5sYXllcnMsbC51cC5zZXQoMCwtMSwwKSxsLmxvb2tBdChuZXcgSygwLDAsMSkpLHRoaXMuYWRkKGwpO2xldCBjPW5ldyByYSg5MCwxLHQsZSk7Yy5sYXllcnM9dGhpcy5sYXllcnMsYy51cC5zZXQoMCwtMSwwKSxjLmxvb2tBdChuZXcgSygwLDAsLTEpKSx0aGlzLmFkZChjKX11cGRhdGUodCxlKXtudWxsPT09dGhpcy5wYXJlbnQmJnRoaXMudXBkYXRlTWF0cml4V29ybGQoKTtsZXQgaT10aGlzLnJlbmRlclRhcmdldCxbcixvLGEscyxsLGNdPXRoaXMuY2hpbGRyZW4sZD10LnhyLmVuYWJsZWQsdT10LmdldFJlbmRlclRhcmdldCgpO3QueHIuZW5hYmxlZD0hMTtsZXQgcD1pLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzO2kudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ITEsdC5zZXRSZW5kZXJUYXJnZXQoaSwwKSx0LnJlbmRlcihlLHIpLHQuc2V0UmVuZGVyVGFyZ2V0KGksMSksdC5yZW5kZXIoZSxvKSx0LnNldFJlbmRlclRhcmdldChpLDIpLHQucmVuZGVyKGUsYSksdC5zZXRSZW5kZXJUYXJnZXQoaSwzKSx0LnJlbmRlcihlLHMpLHQuc2V0UmVuZGVyVGFyZ2V0KGksNCksdC5yZW5kZXIoZSxsKSxpLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPXAsdC5zZXRSZW5kZXJUYXJnZXQoaSw1KSx0LnJlbmRlcihlLGMpLHQuc2V0UmVuZGVyVGFyZ2V0KHUpLHQueHIuZW5hYmxlZD1kLGkudGV4dHVyZS5uZWVkc1BNUkVNVXBkYXRlPSEwfX0sJDA9Y2xhc3MgZXh0ZW5kcyBsb3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8sYSxzLGwsYyxkKXtzdXBlcih0PXZvaWQgMCE9PXQ/dDpbXSxlPXZvaWQgMCE9PWU/ZTpXeCxpLHIsbyxhLHMsbCxjLGQpLHRoaXMuZmxpcFk9ITF9Z2V0IGltYWdlcygpe3JldHVybiB0aGlzLmltYWdlfXNldCBpbWFnZXModCl7dGhpcy5pbWFnZT10fX07JDAucHJvdG90eXBlLmlzQ3ViZVRleHR1cmU9ITA7dmFyIElJPWNsYXNzIGV4dGVuZHMgdHN7Y29uc3RydWN0b3IodCxlLGkpe051bWJlci5pc0ludGVnZXIoZSkmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMQ3ViZVJlbmRlclRhcmdldDogY29uc3RydWN0b3Igc2lnbmF0dXJlIGlzIG5vdyBXZWJHTEN1YmVSZW5kZXJUYXJnZXQoIHNpemUsIG9wdGlvbnMgKSIpLGU9aSksc3VwZXIodCx0LGUpLHRoaXMudGV4dHVyZT1uZXcgJDAodm9pZCAwLChlPWV8fHt9KS5tYXBwaW5nLGUud3JhcFMsZS53cmFwVCxlLm1hZ0ZpbHRlcixlLm1pbkZpbHRlcixlLmZvcm1hdCxlLnR5cGUsZS5hbmlzb3Ryb3B5LGUuZW5jb2RpbmcpLHRoaXMudGV4dHVyZS5pc1JlbmRlclRhcmdldFRleHR1cmU9ITAsdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz12b2lkIDAhPT1lLmdlbmVyYXRlTWlwbWFwcyYmZS5nZW5lcmF0ZU1pcG1hcHMsdGhpcy50ZXh0dXJlLm1pbkZpbHRlcj12b2lkIDAhPT1lLm1pbkZpbHRlcj9lLm1pbkZpbHRlcjppYX1mcm9tRXF1aXJlY3Rhbmd1bGFyVGV4dHVyZSh0LGUpe3RoaXMudGV4dHVyZS50eXBlPWUudHlwZSx0aGlzLnRleHR1cmUuZm9ybWF0PUNhLHRoaXMudGV4dHVyZS5lbmNvZGluZz1lLmVuY29kaW5nLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ZS5nZW5lcmF0ZU1pcG1hcHMsdGhpcy50ZXh0dXJlLm1pbkZpbHRlcj1lLm1pbkZpbHRlcix0aGlzLnRleHR1cmUubWFnRmlsdGVyPWUubWFnRmlsdGVyO2xldCBpX3VuaWZvcm1zPXt0RXF1aXJlY3Q6e3ZhbHVlOm51bGx9fSxpX3ZlcnRleFNoYWRlcj0iXG5cblx0XHRcdFx0dmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcblxuXHRcdFx0XHR2ZWMzIHRyYW5zZm9ybURpcmVjdGlvbiggaW4gdmVjMyBkaXIsIGluIG1hdDQgbWF0cml4ICkge1xuXG5cdFx0XHRcdFx0cmV0dXJuIG5vcm1hbGl6ZSggKCBtYXRyaXggKiB2ZWM0KCBkaXIsIDAuMCApICkueHl6ICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZvaWQgbWFpbigpIHtcblxuXHRcdFx0XHRcdHZXb3JsZERpcmVjdGlvbiA9IHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7XG5cblx0XHRcdFx0XHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHRcdFx0XHRcdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblxuXHRcdFx0XHR9XG5cdFx0XHQiLGlfZnJhZ21lbnRTaGFkZXI9IlxuXG5cdFx0XHRcdHVuaWZvcm0gc2FtcGxlcjJEIHRFcXVpcmVjdDtcblxuXHRcdFx0XHR2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uO1xuXG5cdFx0XHRcdCNpbmNsdWRlIDxjb21tb24+XG5cblx0XHRcdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHRcdFx0dmVjMyBkaXJlY3Rpb24gPSBub3JtYWxpemUoIHZXb3JsZERpcmVjdGlvbiApO1xuXG5cdFx0XHRcdFx0dmVjMiBzYW1wbGVVViA9IGVxdWlyZWN0VXYoIGRpcmVjdGlvbiApO1xuXG5cdFx0XHRcdFx0Z2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKCB0RXF1aXJlY3QsIHNhbXBsZVVWICk7XG5cblx0XHRcdFx0fVxuXHRcdFx0IixyPW5ldyB5bSg1LDUsNSksbz1uZXcgamQoe25hbWU6IkN1YmVtYXBGcm9tRXF1aXJlY3QiLHVuaWZvcm1zOkowKGlfdW5pZm9ybXMpLHZlcnRleFNoYWRlcjppX3ZlcnRleFNoYWRlcixmcmFnbWVudFNoYWRlcjppX2ZyYWdtZW50U2hhZGVyLHNpZGU6Ym8sYmxlbmRpbmc6dnB9KTtvLnVuaWZvcm1zLnRFcXVpcmVjdC52YWx1ZT1lO2xldCBhPW5ldyBzbyhyLG8pLHM9ZS5taW5GaWx0ZXI7cmV0dXJuIGUubWluRmlsdGVyPT09JEkmJihlLm1pbkZpbHRlcj1pYSksbmV3IEV4KDEsMTAsdGhpcykudXBkYXRlKHQsYSksZS5taW5GaWx0ZXI9cyxhLmdlb21ldHJ5LmRpc3Bvc2UoKSxhLm1hdGVyaWFsLmRpc3Bvc2UoKSx0aGlzfWNsZWFyKHQsZSxpLHIpe2xldCBvPXQuZ2V0UmVuZGVyVGFyZ2V0KCk7Zm9yKGxldCBhPTA7YTw2O2ErKyl0LnNldFJlbmRlclRhcmdldCh0aGlzLGEpLHQuY2xlYXIoZSxpLHIpO3Quc2V0UmVuZGVyVGFyZ2V0KG8pfX07SUkucHJvdG90eXBlLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0PSEwO3ZhciBOMz1uZXcgSyxoUGU9bmV3IEssbVBlPW5ldyB5byxYbD1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBLKDEsMCwwKSxlPTApe3RoaXMubm9ybWFsPXQsdGhpcy5jb25zdGFudD1lfXNldCh0LGUpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQpLHRoaXMuY29uc3RhbnQ9ZSx0aGlzfXNldENvbXBvbmVudHModCxlLGkscil7cmV0dXJuIHRoaXMubm9ybWFsLnNldCh0LGUsaSksdGhpcy5jb25zdGFudD1yLHRoaXN9c2V0RnJvbU5vcm1hbEFuZENvcGxhbmFyUG9pbnQodCxlKXtyZXR1cm4gdGhpcy5ub3JtYWwuY29weSh0KSx0aGlzLmNvbnN0YW50PS1lLmRvdCh0aGlzLm5vcm1hbCksdGhpc31zZXRGcm9tQ29wbGFuYXJQb2ludHModCxlLGkpe2xldCByPU4zLnN1YlZlY3RvcnMoaSxlKS5jcm9zcyhoUGUuc3ViVmVjdG9ycyh0LGUpKS5ub3JtYWxpemUoKTtyZXR1cm4gdGhpcy5zZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludChyLHQpLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5ub3JtYWwuY29weSh0Lm5vcm1hbCksdGhpcy5jb25zdGFudD10LmNvbnN0YW50LHRoaXN9bm9ybWFsaXplKCl7bGV0IHQ9MS90aGlzLm5vcm1hbC5sZW5ndGgoKTtyZXR1cm4gdGhpcy5ub3JtYWwubXVsdGlwbHlTY2FsYXIodCksdGhpcy5jb25zdGFudCo9dCx0aGlzfW5lZ2F0ZSgpe3JldHVybiB0aGlzLmNvbnN0YW50Kj0tMSx0aGlzLm5vcm1hbC5uZWdhdGUoKSx0aGlzfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gdGhpcy5ub3JtYWwuZG90KHQpK3RoaXMuY29uc3RhbnR9ZGlzdGFuY2VUb1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5kaXN0YW5jZVRvUG9pbnQodC5jZW50ZXIpLXQucmFkaXVzfXByb2plY3RQb2ludCh0LGUpe3JldHVybiBlLmNvcHkodGhpcy5ub3JtYWwpLm11bHRpcGx5U2NhbGFyKC10aGlzLmRpc3RhbmNlVG9Qb2ludCh0KSkuYWRkKHQpfWludGVyc2VjdExpbmUodCxlKXtsZXQgaT10LmRlbHRhKE4zKSxyPXRoaXMubm9ybWFsLmRvdChpKTtpZigwPT09cilyZXR1cm4gMD09PXRoaXMuZGlzdGFuY2VUb1BvaW50KHQuc3RhcnQpP2UuY29weSh0LnN0YXJ0KTpudWxsO2xldCBvPS0odC5zdGFydC5kb3QodGhpcy5ub3JtYWwpK3RoaXMuY29uc3RhbnQpL3I7cmV0dXJuIG88MHx8bz4xP251bGw6ZS5jb3B5KGkpLm11bHRpcGx5U2NhbGFyKG8pLmFkZCh0LnN0YXJ0KX1pbnRlcnNlY3RzTGluZSh0KXtsZXQgZT10aGlzLmRpc3RhbmNlVG9Qb2ludCh0LnN0YXJ0KSxpPXRoaXMuZGlzdGFuY2VUb1BvaW50KHQuZW5kKTtyZXR1cm4gZTwwJiZpPjB8fGk8MCYmZT4wfWludGVyc2VjdHNCb3godCl7cmV0dXJuIHQuaW50ZXJzZWN0c1BsYW5lKHRoaXMpfWludGVyc2VjdHNTcGhlcmUodCl7cmV0dXJuIHQuaW50ZXJzZWN0c1BsYW5lKHRoaXMpfWNvcGxhbmFyUG9pbnQodCl7cmV0dXJuIHQuY29weSh0aGlzLm5vcm1hbCkubXVsdGlwbHlTY2FsYXIoLXRoaXMuY29uc3RhbnQpfWFwcGx5TWF0cml4NCh0LGUpe2xldCBpPWV8fG1QZS5nZXROb3JtYWxNYXRyaXgodCkscj10aGlzLmNvcGxhbmFyUG9pbnQoTjMpLmFwcGx5TWF0cml4NCh0KSxvPXRoaXMubm9ybWFsLmFwcGx5TWF0cml4MyhpKS5ub3JtYWxpemUoKTtyZXR1cm4gdGhpcy5jb25zdGFudD0tci5kb3QobyksdGhpc310cmFuc2xhdGUodCl7cmV0dXJuIHRoaXMuY29uc3RhbnQtPXQuZG90KHRoaXMubm9ybWFsKSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5ub3JtYWwuZXF1YWxzKHRoaXMubm9ybWFsKSYmdC5jb25zdGFudD09PXRoaXMuY29uc3RhbnR9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9fTtYbC5wcm90b3R5cGUuaXNQbGFuZT0hMDt2YXIgRjA9bmV3IFNwLG9JPW5ldyBLLGVfPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IFhsLGU9bmV3IFhsLGk9bmV3IFhsLHI9bmV3IFhsLG89bmV3IFhsLGE9bmV3IFhsKXt0aGlzLnBsYW5lcz1bdCxlLGkscixvLGFdfXNldCh0LGUsaSxyLG8sYSl7bGV0IHM9dGhpcy5wbGFuZXM7cmV0dXJuIHNbMF0uY29weSh0KSxzWzFdLmNvcHkoZSksc1syXS5jb3B5KGkpLHNbM10uY29weShyKSxzWzRdLmNvcHkobyksc1s1XS5jb3B5KGEpLHRoaXN9Y29weSh0KXtsZXQgZT10aGlzLnBsYW5lcztmb3IobGV0IGk9MDtpPDY7aSsrKWVbaV0uY29weSh0LnBsYW5lc1tpXSk7cmV0dXJuIHRoaXN9c2V0RnJvbVByb2plY3Rpb25NYXRyaXgodCl7bGV0IGU9dGhpcy5wbGFuZXMsaT10LmVsZW1lbnRzLHI9aVswXSxvPWlbMV0sYT1pWzJdLHM9aVszXSxsPWlbNF0sYz1pWzVdLGQ9aVs2XSx1PWlbN10scD1pWzhdLGg9aVs5XSxtPWlbMTBdLF89aVsxMV0sTT1pWzEyXSx5PWlbMTNdLHg9aVsxNF0sUj1pWzE1XTtyZXR1cm4gZVswXS5zZXRDb21wb25lbnRzKHMtcix1LWwsXy1wLFItTSkubm9ybWFsaXplKCksZVsxXS5zZXRDb21wb25lbnRzKHMrcix1K2wsXytwLFIrTSkubm9ybWFsaXplKCksZVsyXS5zZXRDb21wb25lbnRzKHMrbyx1K2MsXytoLFIreSkubm9ybWFsaXplKCksZVszXS5zZXRDb21wb25lbnRzKHMtbyx1LWMsXy1oLFIteSkubm9ybWFsaXplKCksZVs0XS5zZXRDb21wb25lbnRzKHMtYSx1LWQsXy1tLFIteCkubm9ybWFsaXplKCksZVs1XS5zZXRDb21wb25lbnRzKHMrYSx1K2QsXyttLFIreCkubm9ybWFsaXplKCksdGhpc31pbnRlcnNlY3RzT2JqZWN0KHQpe2xldCBlPXQuZ2VvbWV0cnk7cmV0dXJuIG51bGw9PT1lLmJvdW5kaW5nU3BoZXJlJiZlLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLEYwLmNvcHkoZS5ib3VuZGluZ1NwaGVyZSkuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpLHRoaXMuaW50ZXJzZWN0c1NwaGVyZShGMCl9aW50ZXJzZWN0c1Nwcml0ZSh0KXtyZXR1cm4gRjAuY2VudGVyLnNldCgwLDAsMCksRjAucmFkaXVzPS43MDcxMDY3ODExODY1NDc2LEYwLmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKSx0aGlzLmludGVyc2VjdHNTcGhlcmUoRjApfWludGVyc2VjdHNTcGhlcmUodCl7bGV0IGU9dGhpcy5wbGFuZXMsaT10LmNlbnRlcixyPS10LnJhZGl1cztmb3IobGV0IG89MDtvPDY7bysrKWlmKGVbb10uZGlzdGFuY2VUb1BvaW50KGkpPHIpcmV0dXJuITE7cmV0dXJuITB9aW50ZXJzZWN0c0JveCh0KXtsZXQgZT10aGlzLnBsYW5lcztmb3IobGV0IGk9MDtpPDY7aSsrKXtsZXQgcj1lW2ldO2lmKG9JLng9ci5ub3JtYWwueD4wP3QubWF4Lng6dC5taW4ueCxvSS55PXIubm9ybWFsLnk+MD90Lm1heC55OnQubWluLnksb0kuej1yLm5vcm1hbC56PjA/dC5tYXguejp0Lm1pbi56LHIuZGlzdGFuY2VUb1BvaW50KG9JKTwwKXJldHVybiExfXJldHVybiEwfWNvbnRhaW5zUG9pbnQodCl7bGV0IGU9dGhpcy5wbGFuZXM7Zm9yKGxldCBpPTA7aTw2O2krKylpZihlW2ldLmRpc3RhbmNlVG9Qb2ludCh0KTwwKXJldHVybiExO3JldHVybiEwfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfX07ZnVuY3Rpb24gbXRlKCl7bGV0IG49bnVsbCx0PSExLGU9bnVsbCxpPW51bGw7ZnVuY3Rpb24gcihvLGEpe2UobyxhKSxpPW4ucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHIpfXJldHVybntzdGFydDpmdW5jdGlvbigpeyEwIT09dCYmbnVsbCE9PWUmJihpPW4ucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHIpLHQ9ITApfSxzdG9wOmZ1bmN0aW9uKCl7bi5jYW5jZWxBbmltYXRpb25GcmFtZShpKSx0PSExfSxzZXRBbmltYXRpb25Mb29wOmZ1bmN0aW9uKG8pe2U9b30sc2V0Q29udGV4dDpmdW5jdGlvbihvKXtuPW99fX1mdW5jdGlvbiBmUGUobix0KXtsZXQgZT10LmlzV2ViR0wyLGk9bmV3IFdlYWtNYXA7cmV0dXJue2dldDpmdW5jdGlvbihjKXtyZXR1cm4gYy5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlJiYoYz1jLmRhdGEpLGkuZ2V0KGMpfSxyZW1vdmU6ZnVuY3Rpb24oYyl7Yy5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlJiYoYz1jLmRhdGEpO2xldCBkPWkuZ2V0KGMpO2QmJihuLmRlbGV0ZUJ1ZmZlcihkLmJ1ZmZlciksaS5kZWxldGUoYykpfSx1cGRhdGU6ZnVuY3Rpb24oYyxkKXtpZihjLmlzR0xCdWZmZXJBdHRyaWJ1dGUpe2xldCBwPWkuZ2V0KGMpO3JldHVybiB2b2lkKCghcHx8cC52ZXJzaW9uPGMudmVyc2lvbikmJmkuc2V0KGMse2J1ZmZlcjpjLmJ1ZmZlcix0eXBlOmMudHlwZSxieXRlc1BlckVsZW1lbnQ6Yy5lbGVtZW50U2l6ZSx2ZXJzaW9uOmMudmVyc2lvbn0pKX1jLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSk7bGV0IHU9aS5nZXQoYyk7dm9pZCAwPT09dT9pLnNldChjLGZ1bmN0aW9uKGMsZCl7bGV0IHU9Yy5hcnJheSxwPWMudXNhZ2UsaD1uLmNyZWF0ZUJ1ZmZlcigpO24uYmluZEJ1ZmZlcihkLGgpLG4uYnVmZmVyRGF0YShkLHUscCksYy5vblVwbG9hZENhbGxiYWNrKCk7bGV0IG09NTEyNjtyZXR1cm4gdSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheT9tPTUxMjY6dSBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheT9jb25zb2xlLndhcm4oIlRIUkVFLldlYkdMQXR0cmlidXRlczogVW5zdXBwb3J0ZWQgZGF0YSBidWZmZXIgZm9ybWF0OiBGbG9hdDY0QXJyYXkuIik6dSBpbnN0YW5jZW9mIFVpbnQxNkFycmF5P2MuaXNGbG9hdDE2QnVmZmVyQXR0cmlidXRlP2U/bT01MTMxOmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xBdHRyaWJ1dGVzOiBVc2FnZSBvZiBGbG9hdDE2QnVmZmVyQXR0cmlidXRlIHJlcXVpcmVzIFdlYkdMMi4iKTptPTUxMjM6dSBpbnN0YW5jZW9mIEludDE2QXJyYXk/bT01MTIyOnUgaW5zdGFuY2VvZiBVaW50MzJBcnJheT9tPTUxMjU6dSBpbnN0YW5jZW9mIEludDMyQXJyYXk/bT01MTI0OnUgaW5zdGFuY2VvZiBJbnQ4QXJyYXk/bT01MTIwOih1IGluc3RhbmNlb2YgVWludDhBcnJheXx8dSBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KSYmKG09NTEyMSkse2J1ZmZlcjpoLHR5cGU6bSxieXRlc1BlckVsZW1lbnQ6dS5CWVRFU19QRVJfRUxFTUVOVCx2ZXJzaW9uOmMudmVyc2lvbn19KGMsZCkpOnUudmVyc2lvbjxjLnZlcnNpb24mJihmdW5jdGlvbihjLGQsdSl7bGV0IHA9ZC5hcnJheSxoPWQudXBkYXRlUmFuZ2U7bi5iaW5kQnVmZmVyKHUsYyksLTE9PT1oLmNvdW50P24uYnVmZmVyU3ViRGF0YSh1LDAscCk6KGU/bi5idWZmZXJTdWJEYXRhKHUsaC5vZmZzZXQqcC5CWVRFU19QRVJfRUxFTUVOVCxwLGgub2Zmc2V0LGguY291bnQpOm4uYnVmZmVyU3ViRGF0YSh1LGgub2Zmc2V0KnAuQllURVNfUEVSX0VMRU1FTlQscC5zdWJhcnJheShoLm9mZnNldCxoLm9mZnNldCtoLmNvdW50KSksaC5jb3VudD0tMSl9KHUuYnVmZmVyLGMsZCksdS52ZXJzaW9uPWMudmVyc2lvbil9fX12YXIgVHg9Y2xhc3MgZXh0ZW5kcyBHaXtjb25zdHJ1Y3Rvcih0PTEsZT0xLGk9MSxyPTEpe3N1cGVyKCksdGhpcy50eXBlPSJQbGFuZUdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3dpZHRoOnQsaGVpZ2h0OmUsd2lkdGhTZWdtZW50czppLGhlaWdodFNlZ21lbnRzOnJ9O2xldCBvPXQvMixhPWUvMixzPU1hdGguZmxvb3IoaSksbD1NYXRoLmZsb29yKHIpLGM9cysxLGQ9bCsxLHU9dC9zLHA9ZS9sLGg9W10sbT1bXSxfPVtdLE09W107Zm9yKGxldCB5PTA7eTxkO3krKyl7bGV0IHg9eSpwLWE7Zm9yKGxldCBSPTA7UjxjO1IrKyltLnB1c2goUip1LW8sLXgsMCksXy5wdXNoKDAsMCwxKSxNLnB1c2goUi9zKSxNLnB1c2goMS15L2wpfWZvcihsZXQgeT0wO3k8bDt5KyspZm9yKGxldCB4PTA7eDxzO3grKyl7bGV0IEk9eCtjKih5KzEpLEI9eCsxK2MqKHkrMSksZWU9eCsxK2MqeTtoLnB1c2goeCtjKnksSSxlZSksaC5wdXNoKEksQixlZSl9dGhpcy5zZXRJbmRleChoKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBOcihtLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgTnIoXywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgTnIoTSwyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgVHgodC53aWR0aCx0LmhlaWdodCx0LndpZHRoU2VnbWVudHMsdC5oZWlnaHRTZWdtZW50cyl9fSx2aT17YWxwaGFtYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQUxQSEFNQVBcblx0ZGlmZnVzZUNvbG9yLmEgKj0gdGV4dHVyZTJEKCBhbHBoYU1hcCwgdlV2ICkuZztcbiNlbmRpZiIsYWxwaGFtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9BTFBIQU1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBhbHBoYU1hcDtcbiNlbmRpZiIsYWxwaGF0ZXN0X2ZyYWdtZW50OiIjaWZkZWYgVVNFX0FMUEhBVEVTVFxuXHRpZiAoIGRpZmZ1c2VDb2xvci5hIDwgYWxwaGFUZXN0ICkgZGlzY2FyZDtcbiNlbmRpZiIsYWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQUxQSEFURVNUXG5cdHVuaWZvcm0gZmxvYXQgYWxwaGFUZXN0O1xuI2VuZGlmIixhb21hcF9mcmFnbWVudDoiI2lmZGVmIFVTRV9BT01BUFxuXHRmbG9hdCBhbWJpZW50T2NjbHVzaW9uID0gKCB0ZXh0dXJlMkQoIGFvTWFwLCB2VXYyICkuciAtIDEuMCApICogYW9NYXBJbnRlbnNpdHkgKyAxLjA7XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBhbWJpZW50T2NjbHVzaW9uO1xuXHQjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFNUQU5EQVJEIClcblx0XHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciApICk7XG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciAqPSBjb21wdXRlU3BlY3VsYXJPY2NsdXNpb24oIGRvdE5WLCBhbWJpZW50T2NjbHVzaW9uLCBtYXRlcmlhbC5yb3VnaG5lc3MgKTtcblx0I2VuZGlmXG4jZW5kaWYiLGFvbWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQU9NQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgYW9NYXA7XG5cdHVuaWZvcm0gZmxvYXQgYW9NYXBJbnRlbnNpdHk7XG4jZW5kaWYiLGJlZ2luX3ZlcnRleDoidmVjMyB0cmFuc2Zvcm1lZCA9IHZlYzMoIHBvc2l0aW9uICk7IixiZWdpbm5vcm1hbF92ZXJ0ZXg6InZlYzMgb2JqZWN0Tm9ybWFsID0gdmVjMyggbm9ybWFsICk7XG4jaWZkZWYgVVNFX1RBTkdFTlRcblx0dmVjMyBvYmplY3RUYW5nZW50ID0gdmVjMyggdGFuZ2VudC54eXogKTtcbiNlbmRpZiIsYnNkZnM6InZlYzMgQlJERl9MYW1iZXJ0KCBjb25zdCBpbiB2ZWMzIGRpZmZ1c2VDb2xvciApIHtcblx0cmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiBkaWZmdXNlQ29sb3I7XG59XG52ZWMzIEZfU2NobGljayggY29uc3QgaW4gdmVjMyBmMCwgY29uc3QgaW4gZmxvYXQgZjkwLCBjb25zdCBpbiBmbG9hdCBkb3RWSCApIHtcblx0ZmxvYXQgZnJlc25lbCA9IGV4cDIoICggLSA1LjU1NDczICogZG90VkggLSA2Ljk4MzE2ICkgKiBkb3RWSCApO1xuXHRyZXR1cm4gZjAgKiAoIDEuMCAtIGZyZXNuZWwgKSArICggZjkwICogZnJlc25lbCApO1xufVxuZmxvYXQgVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkwsIGNvbnN0IGluIGZsb2F0IGRvdE5WICkge1xuXHRmbG9hdCBhMiA9IHBvdzIoIGFscGhhICk7XG5cdGZsb2F0IGd2ID0gZG90TkwgKiBzcXJ0KCBhMiArICggMS4wIC0gYTIgKSAqIHBvdzIoIGRvdE5WICkgKTtcblx0ZmxvYXQgZ2wgPSBkb3ROViAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TkwgKSApO1xuXHRyZXR1cm4gMC41IC8gbWF4KCBndiArIGdsLCBFUFNJTE9OICk7XG59XG5mbG9hdCBEX0dHWCggY29uc3QgaW4gZmxvYXQgYWxwaGEsIGNvbnN0IGluIGZsb2F0IGRvdE5IICkge1xuXHRmbG9hdCBhMiA9IHBvdzIoIGFscGhhICk7XG5cdGZsb2F0IGRlbm9tID0gcG93MiggZG90TkggKSAqICggYTIgLSAxLjAgKSArIDEuMDtcblx0cmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiBhMiAvIHBvdzIoIGRlbm9tICk7XG59XG52ZWMzIEJSREZfR0dYKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIGYwLCBjb25zdCBpbiBmbG9hdCBmOTAsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHtcblx0ZmxvYXQgYWxwaGEgPSBwb3cyKCByb3VnaG5lc3MgKTtcblx0dmVjMyBoYWxmRGlyID0gbm9ybWFsaXplKCBsaWdodERpciArIHZpZXdEaXIgKTtcblx0ZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGxpZ2h0RGlyICkgKTtcblx0ZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApO1xuXHRmbG9hdCBkb3ROSCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7XG5cdGZsb2F0IGRvdFZIID0gc2F0dXJhdGUoIGRvdCggdmlld0RpciwgaGFsZkRpciApICk7XG5cdHZlYzMgRiA9IEZfU2NobGljayggZjAsIGY5MCwgZG90VkggKTtcblx0ZmxvYXQgViA9IFZfR0dYX1NtaXRoQ29ycmVsYXRlZCggYWxwaGEsIGRvdE5MLCBkb3ROViApO1xuXHRmbG9hdCBEID0gRF9HR1goIGFscGhhLCBkb3ROSCApO1xuXHRyZXR1cm4gRiAqICggViAqIEQgKTtcbn1cbnZlYzIgTFRDX1V2KCBjb25zdCBpbiB2ZWMzIE4sIGNvbnN0IGluIHZlYzMgViwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRjb25zdCBmbG9hdCBMVVRfU0laRSA9IDY0LjA7XG5cdGNvbnN0IGZsb2F0IExVVF9TQ0FMRSA9ICggTFVUX1NJWkUgLSAxLjAgKSAvIExVVF9TSVpFO1xuXHRjb25zdCBmbG9hdCBMVVRfQklBUyA9IDAuNSAvIExVVF9TSVpFO1xuXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIE4sIFYgKSApO1xuXHR2ZWMyIHV2ID0gdmVjMiggcm91Z2huZXNzLCBzcXJ0KCAxLjAgLSBkb3ROViApICk7XG5cdHV2ID0gdXYgKiBMVVRfU0NBTEUgKyBMVVRfQklBUztcblx0cmV0dXJuIHV2O1xufVxuZmxvYXQgTFRDX0NsaXBwZWRTcGhlcmVGb3JtRmFjdG9yKCBjb25zdCBpbiB2ZWMzIGYgKSB7XG5cdGZsb2F0IGwgPSBsZW5ndGgoIGYgKTtcblx0cmV0dXJuIG1heCggKCBsICogbCArIGYueiApIC8gKCBsICsgMS4wICksIDAuMCApO1xufVxudmVjMyBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvbnN0IGluIHZlYzMgdjEsIGNvbnN0IGluIHZlYzMgdjIgKSB7XG5cdGZsb2F0IHggPSBkb3QoIHYxLCB2MiApO1xuXHRmbG9hdCB5ID0gYWJzKCB4ICk7XG5cdGZsb2F0IGEgPSAwLjg1NDM5ODUgKyAoIDAuNDk2NTE1NSArIDAuMDE0NTIwNiAqIHkgKSAqIHk7XG5cdGZsb2F0IGIgPSAzLjQxNzU5NDAgKyAoIDQuMTYxNjcyNCArIHkgKSAqIHk7XG5cdGZsb2F0IHYgPSBhIC8gYjtcblx0ZmxvYXQgdGhldGFfc2ludGhldGEgPSAoIHggPiAwLjAgKSA/IHYgOiAwLjUgKiBpbnZlcnNlc3FydCggbWF4KCAxLjAgLSB4ICogeCwgMWUtNyApICkgLSB2O1xuXHRyZXR1cm4gY3Jvc3MoIHYxLCB2MiApICogdGhldGFfc2ludGhldGE7XG59XG52ZWMzIExUQ19FdmFsdWF0ZSggY29uc3QgaW4gdmVjMyBOLCBjb25zdCBpbiB2ZWMzIFYsIGNvbnN0IGluIHZlYzMgUCwgY29uc3QgaW4gbWF0MyBtSW52LCBjb25zdCBpbiB2ZWMzIHJlY3RDb29yZHNbIDQgXSApIHtcblx0dmVjMyB2MSA9IHJlY3RDb29yZHNbIDEgXSAtIHJlY3RDb29yZHNbIDAgXTtcblx0dmVjMyB2MiA9IHJlY3RDb29yZHNbIDMgXSAtIHJlY3RDb29yZHNbIDAgXTtcblx0dmVjMyBsaWdodE5vcm1hbCA9IGNyb3NzKCB2MSwgdjIgKTtcblx0aWYoIGRvdCggbGlnaHROb3JtYWwsIFAgLSByZWN0Q29vcmRzWyAwIF0gKSA8IDAuMCApIHJldHVybiB2ZWMzKCAwLjAgKTtcblx0dmVjMyBUMSwgVDI7XG5cdFQxID0gbm9ybWFsaXplKCBWIC0gTiAqIGRvdCggViwgTiApICk7XG5cdFQyID0gLSBjcm9zcyggTiwgVDEgKTtcblx0bWF0MyBtYXQgPSBtSW52ICogdHJhbnNwb3NlTWF0MyggbWF0MyggVDEsIFQyLCBOICkgKTtcblx0dmVjMyBjb29yZHNbIDQgXTtcblx0Y29vcmRzWyAwIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDAgXSAtIFAgKTtcblx0Y29vcmRzWyAxIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDEgXSAtIFAgKTtcblx0Y29vcmRzWyAyIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDIgXSAtIFAgKTtcblx0Y29vcmRzWyAzIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDMgXSAtIFAgKTtcblx0Y29vcmRzWyAwIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMCBdICk7XG5cdGNvb3Jkc1sgMSBdID0gbm9ybWFsaXplKCBjb29yZHNbIDEgXSApO1xuXHRjb29yZHNbIDIgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAyIF0gKTtcblx0Y29vcmRzWyAzIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMyBdICk7XG5cdHZlYzMgdmVjdG9yRm9ybUZhY3RvciA9IHZlYzMoIDAuMCApO1xuXHR2ZWN0b3JGb3JtRmFjdG9yICs9IExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAwIF0sIGNvb3Jkc1sgMSBdICk7XG5cdHZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDEgXSwgY29vcmRzWyAyIF0gKTtcblx0dmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMiBdLCBjb29yZHNbIDMgXSApO1xuXHR2ZWN0b3JGb3JtRmFjdG9yICs9IExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAzIF0sIGNvb3Jkc1sgMCBdICk7XG5cdGZsb2F0IHJlc3VsdCA9IExUQ19DbGlwcGVkU3BoZXJlRm9ybUZhY3RvciggdmVjdG9yRm9ybUZhY3RvciApO1xuXHRyZXR1cm4gdmVjMyggcmVzdWx0ICk7XG59XG5mbG9hdCBHX0JsaW5uUGhvbmdfSW1wbGljaXQoICkge1xuXHRyZXR1cm4gMC4yNTtcbn1cbmZsb2F0IERfQmxpbm5QaG9uZyggY29uc3QgaW4gZmxvYXQgc2hpbmluZXNzLCBjb25zdCBpbiBmbG9hdCBkb3ROSCApIHtcblx0cmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiAoIHNoaW5pbmVzcyAqIDAuNSArIDEuMCApICogcG93KCBkb3ROSCwgc2hpbmluZXNzICk7XG59XG52ZWMzIEJSREZfQmxpbm5QaG9uZyggY29uc3QgaW4gdmVjMyBsaWdodERpciwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyBzcGVjdWxhckNvbG9yLCBjb25zdCBpbiBmbG9hdCBzaGluaW5lc3MgKSB7XG5cdHZlYzMgaGFsZkRpciA9IG5vcm1hbGl6ZSggbGlnaHREaXIgKyB2aWV3RGlyICk7XG5cdGZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTtcblx0ZmxvYXQgZG90VkggPSBzYXR1cmF0ZSggZG90KCB2aWV3RGlyLCBoYWxmRGlyICkgKTtcblx0dmVjMyBGID0gRl9TY2hsaWNrKCBzcGVjdWxhckNvbG9yLCAxLjAsIGRvdFZIICk7XG5cdGZsb2F0IEcgPSBHX0JsaW5uUGhvbmdfSW1wbGljaXQoICk7XG5cdGZsb2F0IEQgPSBEX0JsaW5uUGhvbmcoIHNoaW5pbmVzcywgZG90TkggKTtcblx0cmV0dXJuIEYgKiAoIEcgKiBEICk7XG59XG4jaWYgZGVmaW5lZCggVVNFX1NIRUVOIClcbmZsb2F0IERfQ2hhcmxpZSggZmxvYXQgcm91Z2huZXNzLCBmbG9hdCBkb3ROSCApIHtcblx0ZmxvYXQgYWxwaGEgPSBwb3cyKCByb3VnaG5lc3MgKTtcblx0ZmxvYXQgaW52QWxwaGEgPSAxLjAgLyBhbHBoYTtcblx0ZmxvYXQgY29zMmggPSBkb3ROSCAqIGRvdE5IO1xuXHRmbG9hdCBzaW4yaCA9IG1heCggMS4wIC0gY29zMmgsIDAuMDA3ODEyNSApO1xuXHRyZXR1cm4gKCAyLjAgKyBpbnZBbHBoYSApICogcG93KCBzaW4yaCwgaW52QWxwaGEgKiAwLjUgKSAvICggMi4wICogUEkgKTtcbn1cbmZsb2F0IFZfTmV1YmVsdCggZmxvYXQgZG90TlYsIGZsb2F0IGRvdE5MICkge1xuXHRyZXR1cm4gc2F0dXJhdGUoIDEuMCAvICggNC4wICogKCBkb3ROTCArIGRvdE5WIC0gZG90TkwgKiBkb3ROViApICkgKTtcbn1cbnZlYzMgQlJERl9TaGVlbiggY29uc3QgaW4gdmVjMyBsaWdodERpciwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgdmVjMyBzaGVlbkNvbG9yLCBjb25zdCBpbiBmbG9hdCBzaGVlblJvdWdobmVzcyApIHtcblx0dmVjMyBoYWxmRGlyID0gbm9ybWFsaXplKCBsaWdodERpciArIHZpZXdEaXIgKTtcblx0ZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGxpZ2h0RGlyICkgKTtcblx0ZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApO1xuXHRmbG9hdCBkb3ROSCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7XG5cdGZsb2F0IEQgPSBEX0NoYXJsaWUoIHNoZWVuUm91Z2huZXNzLCBkb3ROSCApO1xuXHRmbG9hdCBWID0gVl9OZXViZWx0KCBkb3ROViwgZG90TkwgKTtcblx0cmV0dXJuIHNoZWVuQ29sb3IgKiAoIEQgKiBWICk7XG59XG4jZW5kaWYiLGJ1bXBtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9CVU1QTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGJ1bXBNYXA7XG5cdHVuaWZvcm0gZmxvYXQgYnVtcFNjYWxlO1xuXHR2ZWMyIGRIZHh5X2Z3ZCgpIHtcblx0XHR2ZWMyIGRTVGR4ID0gZEZkeCggdlV2ICk7XG5cdFx0dmVjMiBkU1RkeSA9IGRGZHkoIHZVdiApO1xuXHRcdGZsb2F0IEhsbCA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICkueDtcblx0XHRmbG9hdCBkQnggPSBidW1wU2NhbGUgKiB0ZXh0dXJlMkQoIGJ1bXBNYXAsIHZVdiArIGRTVGR4ICkueCAtIEhsbDtcblx0XHRmbG9hdCBkQnkgPSBidW1wU2NhbGUgKiB0ZXh0dXJlMkQoIGJ1bXBNYXAsIHZVdiArIGRTVGR5ICkueCAtIEhsbDtcblx0XHRyZXR1cm4gdmVjMiggZEJ4LCBkQnkgKTtcblx0fVxuXHR2ZWMzIHBlcnR1cmJOb3JtYWxBcmIoIHZlYzMgc3VyZl9wb3MsIHZlYzMgc3VyZl9ub3JtLCB2ZWMyIGRIZHh5LCBmbG9hdCBmYWNlRGlyZWN0aW9uICkge1xuXHRcdHZlYzMgdlNpZ21hWCA9IHZlYzMoIGRGZHgoIHN1cmZfcG9zLnggKSwgZEZkeCggc3VyZl9wb3MueSApLCBkRmR4KCBzdXJmX3Bvcy56ICkgKTtcblx0XHR2ZWMzIHZTaWdtYVkgPSB2ZWMzKCBkRmR5KCBzdXJmX3Bvcy54ICksIGRGZHkoIHN1cmZfcG9zLnkgKSwgZEZkeSggc3VyZl9wb3MueiApICk7XG5cdFx0dmVjMyB2TiA9IHN1cmZfbm9ybTtcblx0XHR2ZWMzIFIxID0gY3Jvc3MoIHZTaWdtYVksIHZOICk7XG5cdFx0dmVjMyBSMiA9IGNyb3NzKCB2TiwgdlNpZ21hWCApO1xuXHRcdGZsb2F0IGZEZXQgPSBkb3QoIHZTaWdtYVgsIFIxICkgKiBmYWNlRGlyZWN0aW9uO1xuXHRcdHZlYzMgdkdyYWQgPSBzaWduKCBmRGV0ICkgKiAoIGRIZHh5LnggKiBSMSArIGRIZHh5LnkgKiBSMiApO1xuXHRcdHJldHVybiBub3JtYWxpemUoIGFicyggZkRldCApICogc3VyZl9ub3JtIC0gdkdyYWQgKTtcblx0fVxuI2VuZGlmIixjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ6IiNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMFxuXHR2ZWM0IHBsYW5lO1xuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IFVOSU9OX0NMSVBQSU5HX1BMQU5FUzsgaSArKyApIHtcblx0XHRwbGFuZSA9IGNsaXBwaW5nUGxhbmVzWyBpIF07XG5cdFx0aWYgKCBkb3QoIHZDbGlwUG9zaXRpb24sIHBsYW5lLnh5eiApID4gcGxhbmUudyApIGRpc2NhcmQ7XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2lmIFVOSU9OX0NMSVBQSU5HX1BMQU5FUyA8IE5VTV9DTElQUElOR19QTEFORVNcblx0XHRib29sIGNsaXBwZWQgPSB0cnVlO1xuXHRcdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0XHRmb3IgKCBpbnQgaSA9IFVOSU9OX0NMSVBQSU5HX1BMQU5FUzsgaSA8IE5VTV9DTElQUElOR19QTEFORVM7IGkgKysgKSB7XG5cdFx0XHRwbGFuZSA9IGNsaXBwaW5nUGxhbmVzWyBpIF07XG5cdFx0XHRjbGlwcGVkID0gKCBkb3QoIHZDbGlwUG9zaXRpb24sIHBsYW5lLnh5eiApID4gcGxhbmUudyApICYmIGNsaXBwZWQ7XG5cdFx0fVxuXHRcdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG5cdFx0aWYgKCBjbGlwcGVkICkgZGlzY2FyZDtcblx0I2VuZGlmXG4jZW5kaWYiLGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50OiIjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDBcblx0dmFyeWluZyB2ZWMzIHZDbGlwUG9zaXRpb247XG5cdHVuaWZvcm0gdmVjNCBjbGlwcGluZ1BsYW5lc1sgTlVNX0NMSVBQSU5HX1BMQU5FUyBdO1xuI2VuZGlmIixjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg6IiNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMFxuXHR2YXJ5aW5nIHZlYzMgdkNsaXBQb3NpdGlvbjtcbiNlbmRpZiIsY2xpcHBpbmdfcGxhbmVzX3ZlcnRleDoiI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwXG5cdHZDbGlwUG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xuI2VuZGlmIixjb2xvcl9mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApXG5cdGRpZmZ1c2VDb2xvciAqPSB2Q29sb3I7XG4jZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKVxuXHRkaWZmdXNlQ29sb3IucmdiICo9IHZDb2xvcjtcbiNlbmRpZiIsY29sb3JfcGFyc19mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApXG5cdHZhcnlpbmcgdmVjNCB2Q29sb3I7XG4jZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKVxuXHR2YXJ5aW5nIHZlYzMgdkNvbG9yO1xuI2VuZGlmIixjb2xvcl9wYXJzX3ZlcnRleDoiI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApXG5cdHZhcnlpbmcgdmVjNCB2Q29sb3I7XG4jZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKSB8fCBkZWZpbmVkKCBVU0VfSU5TVEFOQ0lOR19DT0xPUiApXG5cdHZhcnlpbmcgdmVjMyB2Q29sb3I7XG4jZW5kaWYiLGNvbG9yX3ZlcnRleDoiI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApXG5cdHZDb2xvciA9IHZlYzQoIDEuMCApO1xuI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SICkgfHwgZGVmaW5lZCggVVNFX0lOU1RBTkNJTkdfQ09MT1IgKVxuXHR2Q29sb3IgPSB2ZWMzKCAxLjAgKTtcbiNlbmRpZlxuI2lmZGVmIFVTRV9DT0xPUlxuXHR2Q29sb3IgKj0gY29sb3I7XG4jZW5kaWZcbiNpZmRlZiBVU0VfSU5TVEFOQ0lOR19DT0xPUlxuXHR2Q29sb3IueHl6ICo9IGluc3RhbmNlQ29sb3IueHl6O1xuI2VuZGlmIixjb21tb246IiNkZWZpbmUgUEkgMy4xNDE1OTI2NTM1ODk3OTNcbiNkZWZpbmUgUEkyIDYuMjgzMTg1MzA3MTc5NTg2XG4jZGVmaW5lIFBJX0hBTEYgMS41NzA3OTYzMjY3OTQ4OTY2XG4jZGVmaW5lIFJFQ0lQUk9DQUxfUEkgMC4zMTgzMDk4ODYxODM3OTA3XG4jZGVmaW5lIFJFQ0lQUk9DQUxfUEkyIDAuMTU5MTU0OTQzMDkxODk1MzVcbiNkZWZpbmUgRVBTSUxPTiAxZS02XG4jaWZuZGVmIHNhdHVyYXRlXG4jZGVmaW5lIHNhdHVyYXRlKCBhICkgY2xhbXAoIGEsIDAuMCwgMS4wIClcbiNlbmRpZlxuI2RlZmluZSB3aGl0ZUNvbXBsZW1lbnQoIGEgKSAoIDEuMCAtIHNhdHVyYXRlKCBhICkgKVxuZmxvYXQgcG93MiggY29uc3QgaW4gZmxvYXQgeCApIHsgcmV0dXJuIHgqeDsgfVxuZmxvYXQgcG93MyggY29uc3QgaW4gZmxvYXQgeCApIHsgcmV0dXJuIHgqeCp4OyB9XG5mbG9hdCBwb3c0KCBjb25zdCBpbiBmbG9hdCB4ICkgeyBmbG9hdCB4MiA9IHgqeDsgcmV0dXJuIHgyKngyOyB9XG5mbG9hdCBtYXgzKCBjb25zdCBpbiB2ZWMzIHYgKSB7IHJldHVybiBtYXgoIG1heCggdi54LCB2LnkgKSwgdi56ICk7IH1cbmZsb2F0IGF2ZXJhZ2UoIGNvbnN0IGluIHZlYzMgY29sb3IgKSB7IHJldHVybiBkb3QoIGNvbG9yLCB2ZWMzKCAwLjMzMzMgKSApOyB9XG5oaWdocCBmbG9hdCByYW5kKCBjb25zdCBpbiB2ZWMyIHV2ICkge1xuXHRjb25zdCBoaWdocCBmbG9hdCBhID0gMTIuOTg5OCwgYiA9IDc4LjIzMywgYyA9IDQzNzU4LjU0NTM7XG5cdGhpZ2hwIGZsb2F0IGR0ID0gZG90KCB1di54eSwgdmVjMiggYSxiICkgKSwgc24gPSBtb2QoIGR0LCBQSSApO1xuXHRyZXR1cm4gZnJhY3QoIHNpbiggc24gKSAqIGMgKTtcbn1cbiNpZmRlZiBISUdIX1BSRUNJU0lPTlxuXHRmbG9hdCBwcmVjaXNpb25TYWZlTGVuZ3RoKCB2ZWMzIHYgKSB7IHJldHVybiBsZW5ndGgoIHYgKTsgfVxuI2Vsc2Vcblx0ZmxvYXQgcHJlY2lzaW9uU2FmZUxlbmd0aCggdmVjMyB2ICkge1xuXHRcdGZsb2F0IG1heENvbXBvbmVudCA9IG1heDMoIGFicyggdiApICk7XG5cdFx0cmV0dXJuIGxlbmd0aCggdiAvIG1heENvbXBvbmVudCApICogbWF4Q29tcG9uZW50O1xuXHR9XG4jZW5kaWZcbnN0cnVjdCBJbmNpZGVudExpZ2h0IHtcblx0dmVjMyBjb2xvcjtcblx0dmVjMyBkaXJlY3Rpb247XG5cdGJvb2wgdmlzaWJsZTtcbn07XG5zdHJ1Y3QgUmVmbGVjdGVkTGlnaHQge1xuXHR2ZWMzIGRpcmVjdERpZmZ1c2U7XG5cdHZlYzMgZGlyZWN0U3BlY3VsYXI7XG5cdHZlYzMgaW5kaXJlY3REaWZmdXNlO1xuXHR2ZWMzIGluZGlyZWN0U3BlY3VsYXI7XG59O1xuc3RydWN0IEdlb21ldHJpY0NvbnRleHQge1xuXHR2ZWMzIHBvc2l0aW9uO1xuXHR2ZWMzIG5vcm1hbDtcblx0dmVjMyB2aWV3RGlyO1xuI2lmZGVmIFVTRV9DTEVBUkNPQVRcblx0dmVjMyBjbGVhcmNvYXROb3JtYWw7XG4jZW5kaWZcbn07XG52ZWMzIHRyYW5zZm9ybURpcmVjdGlvbiggaW4gdmVjMyBkaXIsIGluIG1hdDQgbWF0cml4ICkge1xuXHRyZXR1cm4gbm9ybWFsaXplKCAoIG1hdHJpeCAqIHZlYzQoIGRpciwgMC4wICkgKS54eXogKTtcbn1cbnZlYzMgaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggaW4gdmVjMyBkaXIsIGluIG1hdDQgbWF0cml4ICkge1xuXHRyZXR1cm4gbm9ybWFsaXplKCAoIHZlYzQoIGRpciwgMC4wICkgKiBtYXRyaXggKS54eXogKTtcbn1cbm1hdDMgdHJhbnNwb3NlTWF0MyggY29uc3QgaW4gbWF0MyBtICkge1xuXHRtYXQzIHRtcDtcblx0dG1wWyAwIF0gPSB2ZWMzKCBtWyAwIF0ueCwgbVsgMSBdLngsIG1bIDIgXS54ICk7XG5cdHRtcFsgMSBdID0gdmVjMyggbVsgMCBdLnksIG1bIDEgXS55LCBtWyAyIF0ueSApO1xuXHR0bXBbIDIgXSA9IHZlYzMoIG1bIDAgXS56LCBtWyAxIF0ueiwgbVsgMiBdLnogKTtcblx0cmV0dXJuIHRtcDtcbn1cbmZsb2F0IGxpbmVhclRvUmVsYXRpdmVMdW1pbmFuY2UoIGNvbnN0IGluIHZlYzMgY29sb3IgKSB7XG5cdHZlYzMgd2VpZ2h0cyA9IHZlYzMoIDAuMjEyNiwgMC43MTUyLCAwLjA3MjIgKTtcblx0cmV0dXJuIGRvdCggd2VpZ2h0cywgY29sb3IucmdiICk7XG59XG5ib29sIGlzUGVyc3BlY3RpdmVNYXRyaXgoIG1hdDQgbSApIHtcblx0cmV0dXJuIG1bIDIgXVsgMyBdID09IC0gMS4wO1xufVxudmVjMiBlcXVpcmVjdFV2KCBpbiB2ZWMzIGRpciApIHtcblx0ZmxvYXQgdSA9IGF0YW4oIGRpci56LCBkaXIueCApICogUkVDSVBST0NBTF9QSTIgKyAwLjU7XG5cdGZsb2F0IHYgPSBhc2luKCBjbGFtcCggZGlyLnksIC0gMS4wLCAxLjAgKSApICogUkVDSVBST0NBTF9QSSArIDAuNTtcblx0cmV0dXJuIHZlYzIoIHUsIHYgKTtcbn0iLGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudDoiI2lmZGVmIEVOVk1BUF9UWVBFX0NVQkVfVVZcblx0I2RlZmluZSBjdWJlVVZfbWF4TWlwTGV2ZWwgOC4wXG5cdCNkZWZpbmUgY3ViZVVWX21pbk1pcExldmVsIDQuMFxuXHQjZGVmaW5lIGN1YmVVVl9tYXhUaWxlU2l6ZSAyNTYuMFxuXHQjZGVmaW5lIGN1YmVVVl9taW5UaWxlU2l6ZSAxNi4wXG5cdGZsb2F0IGdldEZhY2UoIHZlYzMgZGlyZWN0aW9uICkge1xuXHRcdHZlYzMgYWJzRGlyZWN0aW9uID0gYWJzKCBkaXJlY3Rpb24gKTtcblx0XHRmbG9hdCBmYWNlID0gLSAxLjA7XG5cdFx0aWYgKCBhYnNEaXJlY3Rpb24ueCA+IGFic0RpcmVjdGlvbi56ICkge1xuXHRcdFx0aWYgKCBhYnNEaXJlY3Rpb24ueCA+IGFic0RpcmVjdGlvbi55IClcblx0XHRcdFx0ZmFjZSA9IGRpcmVjdGlvbi54ID4gMC4wID8gMC4wIDogMy4wO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRmYWNlID0gZGlyZWN0aW9uLnkgPiAwLjAgPyAxLjAgOiA0LjA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICggYWJzRGlyZWN0aW9uLnogPiBhYnNEaXJlY3Rpb24ueSApXG5cdFx0XHRcdGZhY2UgPSBkaXJlY3Rpb24ueiA+IDAuMCA/IDIuMCA6IDUuMDtcblx0XHRcdGVsc2Vcblx0XHRcdFx0ZmFjZSA9IGRpcmVjdGlvbi55ID4gMC4wID8gMS4wIDogNC4wO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFjZTtcblx0fVxuXHR2ZWMyIGdldFVWKCB2ZWMzIGRpcmVjdGlvbiwgZmxvYXQgZmFjZSApIHtcblx0XHR2ZWMyIHV2O1xuXHRcdGlmICggZmFjZSA9PSAwLjAgKSB7XG5cdFx0XHR1diA9IHZlYzIoIGRpcmVjdGlvbi56LCBkaXJlY3Rpb24ueSApIC8gYWJzKCBkaXJlY3Rpb24ueCApO1xuXHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMS4wICkge1xuXHRcdFx0dXYgPSB2ZWMyKCAtIGRpcmVjdGlvbi54LCAtIGRpcmVjdGlvbi56ICkgLyBhYnMoIGRpcmVjdGlvbi55ICk7XG5cdFx0fSBlbHNlIGlmICggZmFjZSA9PSAyLjAgKSB7XG5cdFx0XHR1diA9IHZlYzIoIC0gZGlyZWN0aW9uLngsIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi56ICk7XG5cdFx0fSBlbHNlIGlmICggZmFjZSA9PSAzLjAgKSB7XG5cdFx0XHR1diA9IHZlYzIoIC0gZGlyZWN0aW9uLnosIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi54ICk7XG5cdFx0fSBlbHNlIGlmICggZmFjZSA9PSA0LjAgKSB7XG5cdFx0XHR1diA9IHZlYzIoIC0gZGlyZWN0aW9uLngsIGRpcmVjdGlvbi56ICkgLyBhYnMoIGRpcmVjdGlvbi55ICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHV2ID0gdmVjMiggZGlyZWN0aW9uLngsIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi56ICk7XG5cdFx0fVxuXHRcdHJldHVybiAwLjUgKiAoIHV2ICsgMS4wICk7XG5cdH1cblx0dmVjMyBiaWxpbmVhckN1YmVVViggc2FtcGxlcjJEIGVudk1hcCwgdmVjMyBkaXJlY3Rpb24sIGZsb2F0IG1pcEludCApIHtcblx0XHRmbG9hdCBmYWNlID0gZ2V0RmFjZSggZGlyZWN0aW9uICk7XG5cdFx0ZmxvYXQgZmlsdGVySW50ID0gbWF4KCBjdWJlVVZfbWluTWlwTGV2ZWwgLSBtaXBJbnQsIDAuMCApO1xuXHRcdG1pcEludCA9IG1heCggbWlwSW50LCBjdWJlVVZfbWluTWlwTGV2ZWwgKTtcblx0XHRmbG9hdCBmYWNlU2l6ZSA9IGV4cDIoIG1pcEludCApO1xuXHRcdGZsb2F0IHRleGVsU2l6ZSA9IDEuMCAvICggMy4wICogY3ViZVVWX21heFRpbGVTaXplICk7XG5cdFx0dmVjMiB1diA9IGdldFVWKCBkaXJlY3Rpb24sIGZhY2UgKSAqICggZmFjZVNpemUgLSAxLjAgKSArIDAuNTtcblx0XHRpZiAoIGZhY2UgPiAyLjAgKSB7XG5cdFx0XHR1di55ICs9IGZhY2VTaXplO1xuXHRcdFx0ZmFjZSAtPSAzLjA7XG5cdFx0fVxuXHRcdHV2LnggKz0gZmFjZSAqIGZhY2VTaXplO1xuXHRcdGlmICggbWlwSW50IDwgY3ViZVVWX21heE1pcExldmVsICkge1xuXHRcdFx0dXYueSArPSAyLjAgKiBjdWJlVVZfbWF4VGlsZVNpemU7XG5cdFx0fVxuXHRcdHV2LnkgKz0gZmlsdGVySW50ICogMi4wICogY3ViZVVWX21pblRpbGVTaXplO1xuXHRcdHV2LnggKz0gMy4wICogbWF4KCAwLjAsIGN1YmVVVl9tYXhUaWxlU2l6ZSAtIDIuMCAqIGZhY2VTaXplICk7XG5cdFx0dXYgKj0gdGV4ZWxTaXplO1xuXHRcdHJldHVybiB0ZXh0dXJlMkQoIGVudk1hcCwgdXYgKS5yZ2I7XG5cdH1cblx0I2RlZmluZSByMCAxLjBcblx0I2RlZmluZSB2MCAwLjMzOVxuXHQjZGVmaW5lIG0wIC0gMi4wXG5cdCNkZWZpbmUgcjEgMC44XG5cdCNkZWZpbmUgdjEgMC4yNzZcblx0I2RlZmluZSBtMSAtIDEuMFxuXHQjZGVmaW5lIHI0IDAuNFxuXHQjZGVmaW5lIHY0IDAuMDQ2XG5cdCNkZWZpbmUgbTQgMi4wXG5cdCNkZWZpbmUgcjUgMC4zMDVcblx0I2RlZmluZSB2NSAwLjAxNlxuXHQjZGVmaW5lIG01IDMuMFxuXHQjZGVmaW5lIHI2IDAuMjFcblx0I2RlZmluZSB2NiAwLjAwMzhcblx0I2RlZmluZSBtNiA0LjBcblx0ZmxvYXQgcm91Z2huZXNzVG9NaXAoIGZsb2F0IHJvdWdobmVzcyApIHtcblx0XHRmbG9hdCBtaXAgPSAwLjA7XG5cdFx0aWYgKCByb3VnaG5lc3MgPj0gcjEgKSB7XG5cdFx0XHRtaXAgPSAoIHIwIC0gcm91Z2huZXNzICkgKiAoIG0xIC0gbTAgKSAvICggcjAgLSByMSApICsgbTA7XG5cdFx0fSBlbHNlIGlmICggcm91Z2huZXNzID49IHI0ICkge1xuXHRcdFx0bWlwID0gKCByMSAtIHJvdWdobmVzcyApICogKCBtNCAtIG0xICkgLyAoIHIxIC0gcjQgKSArIG0xO1xuXHRcdH0gZWxzZSBpZiAoIHJvdWdobmVzcyA+PSByNSApIHtcblx0XHRcdG1pcCA9ICggcjQgLSByb3VnaG5lc3MgKSAqICggbTUgLSBtNCApIC8gKCByNCAtIHI1ICkgKyBtNDtcblx0XHR9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjYgKSB7XG5cdFx0XHRtaXAgPSAoIHI1IC0gcm91Z2huZXNzICkgKiAoIG02IC0gbTUgKSAvICggcjUgLSByNiApICsgbTU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1pcCA9IC0gMi4wICogbG9nMiggMS4xNiAqIHJvdWdobmVzcyApO1x0XHR9XG5cdFx0cmV0dXJuIG1pcDtcblx0fVxuXHR2ZWM0IHRleHR1cmVDdWJlVVYoIHNhbXBsZXIyRCBlbnZNYXAsIHZlYzMgc2FtcGxlRGlyLCBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdFx0ZmxvYXQgbWlwID0gY2xhbXAoIHJvdWdobmVzc1RvTWlwKCByb3VnaG5lc3MgKSwgbTAsIGN1YmVVVl9tYXhNaXBMZXZlbCApO1xuXHRcdGZsb2F0IG1pcEYgPSBmcmFjdCggbWlwICk7XG5cdFx0ZmxvYXQgbWlwSW50ID0gZmxvb3IoIG1pcCApO1xuXHRcdHZlYzMgY29sb3IwID0gYmlsaW5lYXJDdWJlVVYoIGVudk1hcCwgc2FtcGxlRGlyLCBtaXBJbnQgKTtcblx0XHRpZiAoIG1pcEYgPT0gMC4wICkge1xuXHRcdFx0cmV0dXJuIHZlYzQoIGNvbG9yMCwgMS4wICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZlYzMgY29sb3IxID0gYmlsaW5lYXJDdWJlVVYoIGVudk1hcCwgc2FtcGxlRGlyLCBtaXBJbnQgKyAxLjAgKTtcblx0XHRcdHJldHVybiB2ZWM0KCBtaXgoIGNvbG9yMCwgY29sb3IxLCBtaXBGICksIDEuMCApO1xuXHRcdH1cblx0fVxuI2VuZGlmIixkZWZhdWx0bm9ybWFsX3ZlcnRleDoidmVjMyB0cmFuc2Zvcm1lZE5vcm1hbCA9IG9iamVjdE5vcm1hbDtcbiNpZmRlZiBVU0VfSU5TVEFOQ0lOR1xuXHRtYXQzIG0gPSBtYXQzKCBpbnN0YW5jZU1hdHJpeCApO1xuXHR0cmFuc2Zvcm1lZE5vcm1hbCAvPSB2ZWMzKCBkb3QoIG1bIDAgXSwgbVsgMCBdICksIGRvdCggbVsgMSBdLCBtWyAxIF0gKSwgZG90KCBtWyAyIF0sIG1bIDIgXSApICk7XG5cdHRyYW5zZm9ybWVkTm9ybWFsID0gbSAqIHRyYW5zZm9ybWVkTm9ybWFsO1xuI2VuZGlmXG50cmFuc2Zvcm1lZE5vcm1hbCA9IG5vcm1hbE1hdHJpeCAqIHRyYW5zZm9ybWVkTm9ybWFsO1xuI2lmZGVmIEZMSVBfU0lERURcblx0dHJhbnNmb3JtZWROb3JtYWwgPSAtIHRyYW5zZm9ybWVkTm9ybWFsO1xuI2VuZGlmXG4jaWZkZWYgVVNFX1RBTkdFTlRcblx0dmVjMyB0cmFuc2Zvcm1lZFRhbmdlbnQgPSAoIG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIG9iamVjdFRhbmdlbnQsIDAuMCApICkueHl6O1xuXHQjaWZkZWYgRkxJUF9TSURFRFxuXHRcdHRyYW5zZm9ybWVkVGFuZ2VudCA9IC0gdHJhbnNmb3JtZWRUYW5nZW50O1xuXHQjZW5kaWZcbiNlbmRpZiIsZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBkaXNwbGFjZW1lbnRNYXA7XG5cdHVuaWZvcm0gZmxvYXQgZGlzcGxhY2VtZW50U2NhbGU7XG5cdHVuaWZvcm0gZmxvYXQgZGlzcGxhY2VtZW50QmlhcztcbiNlbmRpZiIsZGlzcGxhY2VtZW50bWFwX3ZlcnRleDoiI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVBcblx0dHJhbnNmb3JtZWQgKz0gbm9ybWFsaXplKCBvYmplY3ROb3JtYWwgKSAqICggdGV4dHVyZTJEKCBkaXNwbGFjZW1lbnRNYXAsIHZVdiApLnggKiBkaXNwbGFjZW1lbnRTY2FsZSArIGRpc3BsYWNlbWVudEJpYXMgKTtcbiNlbmRpZiIsZW1pc3NpdmVtYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRU1JU1NJVkVNQVBcblx0dmVjNCBlbWlzc2l2ZUNvbG9yID0gdGV4dHVyZTJEKCBlbWlzc2l2ZU1hcCwgdlV2ICk7XG5cdHRvdGFsRW1pc3NpdmVSYWRpYW5jZSAqPSBlbWlzc2l2ZUNvbG9yLnJnYjtcbiNlbmRpZiIsZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9FTUlTU0lWRU1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBlbWlzc2l2ZU1hcDtcbiNlbmRpZiIsZW5jb2RpbmdzX2ZyYWdtZW50OiJnbF9GcmFnQ29sb3IgPSBsaW5lYXJUb091dHB1dFRleGVsKCBnbF9GcmFnQ29sb3IgKTsiLGVuY29kaW5nc19wYXJzX2ZyYWdtZW50OiJ2ZWM0IExpbmVhclRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlICkge1xuXHRyZXR1cm4gdmFsdWU7XG59XG52ZWM0IExpbmVhclRvc1JHQiggaW4gdmVjNCB2YWx1ZSApIHtcblx0cmV0dXJuIHZlYzQoIG1peCggcG93KCB2YWx1ZS5yZ2IsIHZlYzMoIDAuNDE2NjYgKSApICogMS4wNTUgLSB2ZWMzKCAwLjA1NSApLCB2YWx1ZS5yZ2IgKiAxMi45MiwgdmVjMyggbGVzc1RoYW5FcXVhbCggdmFsdWUucmdiLCB2ZWMzKCAwLjAwMzEzMDggKSApICkgKSwgdmFsdWUuYSApO1xufSIsZW52bWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0VOVk1BUFxuXHQjaWZkZWYgRU5WX1dPUkxEUE9TXG5cdFx0dmVjMyBjYW1lcmFUb0ZyYWc7XG5cdFx0aWYgKCBpc09ydGhvZ3JhcGhpYyApIHtcblx0XHRcdGNhbWVyYVRvRnJhZyA9IG5vcm1hbGl6ZSggdmVjMyggLSB2aWV3TWF0cml4WyAwIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAxIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAyIF1bIDIgXSApICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNhbWVyYVRvRnJhZyA9IG5vcm1hbGl6ZSggdldvcmxkUG9zaXRpb24gLSBjYW1lcmFQb3NpdGlvbiApO1xuXHRcdH1cblx0XHR2ZWMzIHdvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7XG5cdFx0I2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT05cblx0XHRcdHZlYzMgcmVmbGVjdFZlYyA9IHJlZmxlY3QoIGNhbWVyYVRvRnJhZywgd29ybGROb3JtYWwgKTtcblx0XHQjZWxzZVxuXHRcdFx0dmVjMyByZWZsZWN0VmVjID0gcmVmcmFjdCggY2FtZXJhVG9GcmFnLCB3b3JsZE5vcm1hbCwgcmVmcmFjdGlvblJhdGlvICk7XG5cdFx0I2VuZGlmXG5cdCNlbHNlXG5cdFx0dmVjMyByZWZsZWN0VmVjID0gdlJlZmxlY3Q7XG5cdCNlbmRpZlxuXHQjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRVxuXHRcdHZlYzQgZW52Q29sb3IgPSB0ZXh0dXJlQ3ViZSggZW52TWFwLCB2ZWMzKCBmbGlwRW52TWFwICogcmVmbGVjdFZlYy54LCByZWZsZWN0VmVjLnl6ICkgKTtcblx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApXG5cdFx0dmVjNCBlbnZDb2xvciA9IHRleHR1cmVDdWJlVVYoIGVudk1hcCwgcmVmbGVjdFZlYywgMC4wICk7XG5cdCNlbHNlXG5cdFx0dmVjNCBlbnZDb2xvciA9IHZlYzQoIDAuMCApO1xuXHQjZW5kaWZcblx0I2lmZGVmIEVOVk1BUF9CTEVORElOR19NVUxUSVBMWVxuXHRcdG91dGdvaW5nTGlnaHQgPSBtaXgoIG91dGdvaW5nTGlnaHQsIG91dGdvaW5nTGlnaHQgKiBlbnZDb2xvci54eXosIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0aXZpdHkgKTtcblx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX0JMRU5ESU5HX01JWCApXG5cdFx0b3V0Z29pbmdMaWdodCA9IG1peCggb3V0Z29pbmdMaWdodCwgZW52Q29sb3IueHl6LCBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5ICk7XG5cdCNlbGlmIGRlZmluZWQoIEVOVk1BUF9CTEVORElOR19BREQgKVxuXHRcdG91dGdvaW5nTGlnaHQgKz0gZW52Q29sb3IueHl6ICogc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eTtcblx0I2VuZGlmXG4jZW5kaWYiLGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9FTlZNQVBcblx0dW5pZm9ybSBmbG9hdCBlbnZNYXBJbnRlbnNpdHk7XG5cdHVuaWZvcm0gZmxvYXQgZmxpcEVudk1hcDtcblx0I2lmZGVmIEVOVk1BUF9UWVBFX0NVQkVcblx0XHR1bmlmb3JtIHNhbXBsZXJDdWJlIGVudk1hcDtcblx0I2Vsc2Vcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7XG5cdCNlbmRpZlxuXHRcbiNlbmRpZiIsZW52bWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRU5WTUFQXG5cdHVuaWZvcm0gZmxvYXQgcmVmbGVjdGl2aXR5O1xuXHQjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggUEhPTkcgKVxuXHRcdCNkZWZpbmUgRU5WX1dPUkxEUE9TXG5cdCNlbmRpZlxuXHQjaWZkZWYgRU5WX1dPUkxEUE9TXG5cdFx0dmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuXHRcdHVuaWZvcm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvO1xuXHQjZWxzZVxuXHRcdHZhcnlpbmcgdmVjMyB2UmVmbGVjdDtcblx0I2VuZGlmXG4jZW5kaWYiLGVudm1hcF9wYXJzX3ZlcnRleDoiI2lmZGVmIFVTRV9FTlZNQVBcblx0I2lmIGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8ZGVmaW5lZCggUEhPTkcgKVxuXHRcdCNkZWZpbmUgRU5WX1dPUkxEUE9TXG5cdCNlbmRpZlxuXHQjaWZkZWYgRU5WX1dPUkxEUE9TXG5cdFx0XG5cdFx0dmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuXHQjZWxzZVxuXHRcdHZhcnlpbmcgdmVjMyB2UmVmbGVjdDtcblx0XHR1bmlmb3JtIGZsb2F0IHJlZnJhY3Rpb25SYXRpbztcblx0I2VuZGlmXG4jZW5kaWYiLGVudm1hcF9waHlzaWNhbF9wYXJzX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApXG5cdCNpZmRlZiBFTlZNQVBfTU9ERV9SRUZSQUNUSU9OXG5cdFx0dW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87XG5cdCNlbmRpZlxuXHR2ZWMzIGdldElCTElycmFkaWFuY2UoIGNvbnN0IGluIHZlYzMgbm9ybWFsICkge1xuXHRcdCNpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWIClcblx0XHRcdHZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTtcblx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlQ3ViZVVWKCBlbnZNYXAsIHdvcmxkTm9ybWFsLCAxLjAgKTtcblx0XHRcdHJldHVybiBQSSAqIGVudk1hcENvbG9yLnJnYiAqIGVudk1hcEludGVuc2l0eTtcblx0XHQjZWxzZVxuXHRcdFx0cmV0dXJuIHZlYzMoIDAuMCApO1xuXHRcdCNlbmRpZlxuXHR9XG5cdHZlYzMgZ2V0SUJMUmFkaWFuY2UoIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHtcblx0XHQjaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApXG5cdFx0XHR2ZWMzIHJlZmxlY3RWZWM7XG5cdFx0XHQjaWZkZWYgRU5WTUFQX01PREVfUkVGTEVDVElPTlxuXHRcdFx0XHRyZWZsZWN0VmVjID0gcmVmbGVjdCggLSB2aWV3RGlyLCBub3JtYWwgKTtcblx0XHRcdFx0cmVmbGVjdFZlYyA9IG5vcm1hbGl6ZSggbWl4KCByZWZsZWN0VmVjLCBub3JtYWwsIHJvdWdobmVzcyAqIHJvdWdobmVzcykgKTtcblx0XHRcdCNlbHNlXG5cdFx0XHRcdHJlZmxlY3RWZWMgPSByZWZyYWN0KCAtIHZpZXdEaXIsIG5vcm1hbCwgcmVmcmFjdGlvblJhdGlvICk7XG5cdFx0XHQjZW5kaWZcblx0XHRcdHJlZmxlY3RWZWMgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCByZWZsZWN0VmVjLCB2aWV3TWF0cml4ICk7XG5cdFx0XHR2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmVVViggZW52TWFwLCByZWZsZWN0VmVjLCByb3VnaG5lc3MgKTtcblx0XHRcdHJldHVybiBlbnZNYXBDb2xvci5yZ2IgKiBlbnZNYXBJbnRlbnNpdHk7XG5cdFx0I2Vsc2Vcblx0XHRcdHJldHVybiB2ZWMzKCAwLjAgKTtcblx0XHQjZW5kaWZcblx0fVxuI2VuZGlmIixlbnZtYXBfdmVydGV4OiIjaWZkZWYgVVNFX0VOVk1BUFxuXHQjaWZkZWYgRU5WX1dPUkxEUE9TXG5cdFx0dldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejtcblx0I2Vsc2Vcblx0XHR2ZWMzIGNhbWVyYVRvVmVydGV4O1xuXHRcdGlmICggaXNPcnRob2dyYXBoaWMgKSB7XG5cdFx0XHRjYW1lcmFUb1ZlcnRleCA9IG5vcm1hbGl6ZSggdmVjMyggLSB2aWV3TWF0cml4WyAwIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAxIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAyIF1bIDIgXSApICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNhbWVyYVRvVmVydGV4ID0gbm9ybWFsaXplKCB3b3JsZFBvc2l0aW9uLnh5eiAtIGNhbWVyYVBvc2l0aW9uICk7XG5cdFx0fVxuXHRcdHZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCB0cmFuc2Zvcm1lZE5vcm1hbCwgdmlld01hdHJpeCApO1xuXHRcdCNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OXG5cdFx0XHR2UmVmbGVjdCA9IHJlZmxlY3QoIGNhbWVyYVRvVmVydGV4LCB3b3JsZE5vcm1hbCApO1xuXHRcdCNlbHNlXG5cdFx0XHR2UmVmbGVjdCA9IHJlZnJhY3QoIGNhbWVyYVRvVmVydGV4LCB3b3JsZE5vcm1hbCwgcmVmcmFjdGlvblJhdGlvICk7XG5cdFx0I2VuZGlmXG5cdCNlbmRpZlxuI2VuZGlmIixmb2dfdmVydGV4OiIjaWZkZWYgVVNFX0ZPR1xuXHR2Rm9nRGVwdGggPSAtIG12UG9zaXRpb24uejtcbiNlbmRpZiIsZm9nX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX0ZPR1xuXHR2YXJ5aW5nIGZsb2F0IHZGb2dEZXB0aDtcbiNlbmRpZiIsZm9nX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0ZPR1xuXHQjaWZkZWYgRk9HX0VYUDJcblx0XHRmbG9hdCBmb2dGYWN0b3IgPSAxLjAgLSBleHAoIC0gZm9nRGVuc2l0eSAqIGZvZ0RlbnNpdHkgKiB2Rm9nRGVwdGggKiB2Rm9nRGVwdGggKTtcblx0I2Vsc2Vcblx0XHRmbG9hdCBmb2dGYWN0b3IgPSBzbW9vdGhzdGVwKCBmb2dOZWFyLCBmb2dGYXIsIHZGb2dEZXB0aCApO1xuXHQjZW5kaWZcblx0Z2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggZ2xfRnJhZ0NvbG9yLnJnYiwgZm9nQ29sb3IsIGZvZ0ZhY3RvciApO1xuI2VuZGlmIixmb2dfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9GT0dcblx0dW5pZm9ybSB2ZWMzIGZvZ0NvbG9yO1xuXHR2YXJ5aW5nIGZsb2F0IHZGb2dEZXB0aDtcblx0I2lmZGVmIEZPR19FWFAyXG5cdFx0dW5pZm9ybSBmbG9hdCBmb2dEZW5zaXR5O1xuXHQjZWxzZVxuXHRcdHVuaWZvcm0gZmxvYXQgZm9nTmVhcjtcblx0XHR1bmlmb3JtIGZsb2F0IGZvZ0Zhcjtcblx0I2VuZGlmXG4jZW5kaWYiLGdyYWRpZW50bWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfR1JBRElFTlRNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgZ3JhZGllbnRNYXA7XG4jZW5kaWZcbnZlYzMgZ2V0R3JhZGllbnRJcnJhZGlhbmNlKCB2ZWMzIG5vcm1hbCwgdmVjMyBsaWdodERpcmVjdGlvbiApIHtcblx0ZmxvYXQgZG90TkwgPSBkb3QoIG5vcm1hbCwgbGlnaHREaXJlY3Rpb24gKTtcblx0dmVjMiBjb29yZCA9IHZlYzIoIGRvdE5MICogMC41ICsgMC41LCAwLjAgKTtcblx0I2lmZGVmIFVTRV9HUkFESUVOVE1BUFxuXHRcdHJldHVybiB2ZWMzKCB0ZXh0dXJlMkQoIGdyYWRpZW50TWFwLCBjb29yZCApLnIgKTtcblx0I2Vsc2Vcblx0XHRyZXR1cm4gKCBjb29yZC54IDwgMC43ICkgPyB2ZWMzKCAwLjcgKSA6IHZlYzMoIDEuMCApO1xuXHQjZW5kaWZcbn0iLGxpZ2h0bWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0xJR0hUTUFQXG5cdHZlYzQgbGlnaHRNYXBUZXhlbCA9IHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKTtcblx0dmVjMyBsaWdodE1hcElycmFkaWFuY2UgPSBsaWdodE1hcFRleGVsLnJnYiAqIGxpZ2h0TWFwSW50ZW5zaXR5O1xuXHQjaWZuZGVmIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFNcblx0XHRsaWdodE1hcElycmFkaWFuY2UgKj0gUEk7XG5cdCNlbmRpZlxuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRNYXBJcnJhZGlhbmNlO1xuI2VuZGlmIixsaWdodG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0xJR0hUTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGxpZ2h0TWFwO1xuXHR1bmlmb3JtIGZsb2F0IGxpZ2h0TWFwSW50ZW5zaXR5O1xuI2VuZGlmIixsaWdodHNfbGFtYmVydF92ZXJ0ZXg6InZlYzMgZGlmZnVzZSA9IHZlYzMoIDEuMCApO1xuR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeTtcbmdlb21ldHJ5LnBvc2l0aW9uID0gbXZQb3NpdGlvbi54eXo7XG5nZW9tZXRyeS5ub3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XG5nZW9tZXRyeS52aWV3RGlyID0gKCBpc09ydGhvZ3JhcGhpYyApID8gdmVjMyggMCwgMCwgMSApIDogbm9ybWFsaXplKCAtbXZQb3NpdGlvbi54eXogKTtcbkdlb21ldHJpY0NvbnRleHQgYmFja0dlb21ldHJ5O1xuYmFja0dlb21ldHJ5LnBvc2l0aW9uID0gZ2VvbWV0cnkucG9zaXRpb247XG5iYWNrR2VvbWV0cnkubm9ybWFsID0gLWdlb21ldHJ5Lm5vcm1hbDtcbmJhY2tHZW9tZXRyeS52aWV3RGlyID0gZ2VvbWV0cnkudmlld0RpcjtcbnZMaWdodEZyb250ID0gdmVjMyggMC4wICk7XG52SW5kaXJlY3RGcm9udCA9IHZlYzMoIDAuMCApO1xuI2lmZGVmIERPVUJMRV9TSURFRFxuXHR2TGlnaHRCYWNrID0gdmVjMyggMC4wICk7XG5cdHZJbmRpcmVjdEJhY2sgPSB2ZWMzKCAwLjAgKTtcbiNlbmRpZlxuSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodDtcbmZsb2F0IGRvdE5MO1xudmVjMyBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG52SW5kaXJlY3RGcm9udCArPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApO1xudkluZGlyZWN0RnJvbnQgKz0gZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGxpZ2h0UHJvYmUsIGdlb21ldHJ5Lm5vcm1hbCApO1xuI2lmZGVmIERPVUJMRV9TSURFRFxuXHR2SW5kaXJlY3RCYWNrICs9IGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoIGFtYmllbnRMaWdodENvbG9yICk7XG5cdHZJbmRpcmVjdEJhY2sgKz0gZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGxpZ2h0UHJvYmUsIGJhY2tHZW9tZXRyeS5ub3JtYWwgKTtcbiNlbmRpZlxuI2lmIE5VTV9QT0lOVF9MSUdIVFMgPiAwXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUUzsgaSArKyApIHtcblx0XHRnZXRQb2ludExpZ2h0SW5mbyggcG9pbnRMaWdodHNbIGkgXSwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0ZG90TkwgPSBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0ZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlID0gZGlyZWN0TGlnaHQuY29sb3I7XG5cdFx0dkxpZ2h0RnJvbnQgKz0gc2F0dXJhdGUoIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdFx0dkxpZ2h0QmFjayArPSBzYXR1cmF0ZSggLSBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xuXHRcdCNlbmRpZlxuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG4jZW5kaWZcbiNpZiBOVU1fU1BPVF9MSUdIVFMgPiAwXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRTOyBpICsrICkge1xuXHRcdGdldFNwb3RMaWdodEluZm8oIHNwb3RMaWdodHNbIGkgXSwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0ZG90TkwgPSBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0ZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlID0gZGlyZWN0TGlnaHQuY29sb3I7XG5cdFx0dkxpZ2h0RnJvbnQgKz0gc2F0dXJhdGUoIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdFx0dkxpZ2h0QmFjayArPSBzYXR1cmF0ZSggLSBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xuXHRcdCNlbmRpZlxuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG4jZW5kaWZcbiNpZiBOVU1fRElSX0xJR0hUUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUUzsgaSArKyApIHtcblx0XHRnZXREaXJlY3Rpb25hbExpZ2h0SW5mbyggZGlyZWN0aW9uYWxMaWdodHNbIGkgXSwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0ZG90TkwgPSBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0ZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlID0gZGlyZWN0TGlnaHQuY29sb3I7XG5cdFx0dkxpZ2h0RnJvbnQgKz0gc2F0dXJhdGUoIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdFx0dkxpZ2h0QmFjayArPSBzYXR1cmF0ZSggLSBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xuXHRcdCNlbmRpZlxuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG4jZW5kaWZcbiNpZiBOVU1fSEVNSV9MSUdIVFMgPiAwXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0hFTUlfTElHSFRTOyBpICsrICkge1xuXHRcdHZJbmRpcmVjdEZyb250ICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgZ2VvbWV0cnkubm9ybWFsICk7XG5cdFx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdFx0dkluZGlyZWN0QmFjayArPSBnZXRIZW1pc3BoZXJlTGlnaHRJcnJhZGlhbmNlKCBoZW1pc3BoZXJlTGlnaHRzWyBpIF0sIGJhY2tHZW9tZXRyeS5ub3JtYWwgKTtcblx0XHQjZW5kaWZcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuI2VuZGlmIixsaWdodHNfcGFyc19iZWdpbjoidW5pZm9ybSBib29sIHJlY2VpdmVTaGFkb3c7XG51bmlmb3JtIHZlYzMgYW1iaWVudExpZ2h0Q29sb3I7XG51bmlmb3JtIHZlYzMgbGlnaHRQcm9iZVsgOSBdO1xudmVjMyBzaEdldElycmFkaWFuY2VBdCggaW4gdmVjMyBub3JtYWwsIGluIHZlYzMgc2hDb2VmZmljaWVudHNbIDkgXSApIHtcblx0ZmxvYXQgeCA9IG5vcm1hbC54LCB5ID0gbm9ybWFsLnksIHogPSBub3JtYWwuejtcblx0dmVjMyByZXN1bHQgPSBzaENvZWZmaWNpZW50c1sgMCBdICogMC44ODYyMjc7XG5cdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMSBdICogMi4wICogMC41MTE2NjQgKiB5O1xuXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDIgXSAqIDIuMCAqIDAuNTExNjY0ICogejtcblx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyAzIF0gKiAyLjAgKiAwLjUxMTY2NCAqIHg7XG5cdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgNCBdICogMi4wICogMC40MjkwNDMgKiB4ICogeTtcblx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA1IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHkgKiB6O1xuXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDYgXSAqICggMC43NDMxMjUgKiB6ICogeiAtIDAuMjQ3NzA4ICk7XG5cdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgNyBdICogMi4wICogMC40MjkwNDMgKiB4ICogejtcblx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA4IF0gKiAwLjQyOTA0MyAqICggeCAqIHggLSB5ICogeSApO1xuXHRyZXR1cm4gcmVzdWx0O1xufVxudmVjMyBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggY29uc3QgaW4gdmVjMyBsaWdodFByb2JlWyA5IF0sIGNvbnN0IGluIHZlYzMgbm9ybWFsICkge1xuXHR2ZWMzIHdvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7XG5cdHZlYzMgaXJyYWRpYW5jZSA9IHNoR2V0SXJyYWRpYW5jZUF0KCB3b3JsZE5vcm1hbCwgbGlnaHRQcm9iZSApO1xuXHRyZXR1cm4gaXJyYWRpYW5jZTtcbn1cbnZlYzMgZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggY29uc3QgaW4gdmVjMyBhbWJpZW50TGlnaHRDb2xvciApIHtcblx0dmVjMyBpcnJhZGlhbmNlID0gYW1iaWVudExpZ2h0Q29sb3I7XG5cdHJldHVybiBpcnJhZGlhbmNlO1xufVxuZmxvYXQgZ2V0RGlzdGFuY2VBdHRlbnVhdGlvbiggY29uc3QgaW4gZmxvYXQgbGlnaHREaXN0YW5jZSwgY29uc3QgaW4gZmxvYXQgY3V0b2ZmRGlzdGFuY2UsIGNvbnN0IGluIGZsb2F0IGRlY2F5RXhwb25lbnQgKSB7XG5cdCNpZiBkZWZpbmVkICggUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUUyApXG5cdFx0ZmxvYXQgZGlzdGFuY2VGYWxsb2ZmID0gMS4wIC8gbWF4KCBwb3coIGxpZ2h0RGlzdGFuY2UsIGRlY2F5RXhwb25lbnQgKSwgMC4wMSApO1xuXHRcdGlmICggY3V0b2ZmRGlzdGFuY2UgPiAwLjAgKSB7XG5cdFx0XHRkaXN0YW5jZUZhbGxvZmYgKj0gcG93Miggc2F0dXJhdGUoIDEuMCAtIHBvdzQoIGxpZ2h0RGlzdGFuY2UgLyBjdXRvZmZEaXN0YW5jZSApICkgKTtcblx0XHR9XG5cdFx0cmV0dXJuIGRpc3RhbmNlRmFsbG9mZjtcblx0I2Vsc2Vcblx0XHRpZiAoIGN1dG9mZkRpc3RhbmNlID4gMC4wICYmIGRlY2F5RXhwb25lbnQgPiAwLjAgKSB7XG5cdFx0XHRyZXR1cm4gcG93KCBzYXR1cmF0ZSggLSBsaWdodERpc3RhbmNlIC8gY3V0b2ZmRGlzdGFuY2UgKyAxLjAgKSwgZGVjYXlFeHBvbmVudCApO1xuXHRcdH1cblx0XHRyZXR1cm4gMS4wO1xuXHQjZW5kaWZcbn1cbmZsb2F0IGdldFNwb3RBdHRlbnVhdGlvbiggY29uc3QgaW4gZmxvYXQgY29uZUNvc2luZSwgY29uc3QgaW4gZmxvYXQgcGVudW1icmFDb3NpbmUsIGNvbnN0IGluIGZsb2F0IGFuZ2xlQ29zaW5lICkge1xuXHRyZXR1cm4gc21vb3Roc3RlcCggY29uZUNvc2luZSwgcGVudW1icmFDb3NpbmUsIGFuZ2xlQ29zaW5lICk7XG59XG4jaWYgTlVNX0RJUl9MSUdIVFMgPiAwXG5cdHN0cnVjdCBEaXJlY3Rpb25hbExpZ2h0IHtcblx0XHR2ZWMzIGRpcmVjdGlvbjtcblx0XHR2ZWMzIGNvbG9yO1xuXHR9O1xuXHR1bmlmb3JtIERpcmVjdGlvbmFsTGlnaHQgZGlyZWN0aW9uYWxMaWdodHNbIE5VTV9ESVJfTElHSFRTIF07XG5cdHZvaWQgZ2V0RGlyZWN0aW9uYWxMaWdodEluZm8oIGNvbnN0IGluIERpcmVjdGlvbmFsTGlnaHQgZGlyZWN0aW9uYWxMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgb3V0IEluY2lkZW50TGlnaHQgbGlnaHQgKSB7XG5cdFx0bGlnaHQuY29sb3IgPSBkaXJlY3Rpb25hbExpZ2h0LmNvbG9yO1xuXHRcdGxpZ2h0LmRpcmVjdGlvbiA9IGRpcmVjdGlvbmFsTGlnaHQuZGlyZWN0aW9uO1xuXHRcdGxpZ2h0LnZpc2libGUgPSB0cnVlO1xuXHR9XG4jZW5kaWZcbiNpZiBOVU1fUE9JTlRfTElHSFRTID4gMFxuXHRzdHJ1Y3QgUG9pbnRMaWdodCB7XG5cdFx0dmVjMyBwb3NpdGlvbjtcblx0XHR2ZWMzIGNvbG9yO1xuXHRcdGZsb2F0IGRpc3RhbmNlO1xuXHRcdGZsb2F0IGRlY2F5O1xuXHR9O1xuXHR1bmlmb3JtIFBvaW50TGlnaHQgcG9pbnRMaWdodHNbIE5VTV9QT0lOVF9MSUdIVFMgXTtcblx0dm9pZCBnZXRQb2ludExpZ2h0SW5mbyggY29uc3QgaW4gUG9pbnRMaWdodCBwb2ludExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBsaWdodCApIHtcblx0XHR2ZWMzIGxWZWN0b3IgPSBwb2ludExpZ2h0LnBvc2l0aW9uIC0gZ2VvbWV0cnkucG9zaXRpb247XG5cdFx0bGlnaHQuZGlyZWN0aW9uID0gbm9ybWFsaXplKCBsVmVjdG9yICk7XG5cdFx0ZmxvYXQgbGlnaHREaXN0YW5jZSA9IGxlbmd0aCggbFZlY3RvciApO1xuXHRcdGxpZ2h0LmNvbG9yID0gcG9pbnRMaWdodC5jb2xvcjtcblx0XHRsaWdodC5jb2xvciAqPSBnZXREaXN0YW5jZUF0dGVudWF0aW9uKCBsaWdodERpc3RhbmNlLCBwb2ludExpZ2h0LmRpc3RhbmNlLCBwb2ludExpZ2h0LmRlY2F5ICk7XG5cdFx0bGlnaHQudmlzaWJsZSA9ICggbGlnaHQuY29sb3IgIT0gdmVjMyggMC4wICkgKTtcblx0fVxuI2VuZGlmXG4jaWYgTlVNX1NQT1RfTElHSFRTID4gMFxuXHRzdHJ1Y3QgU3BvdExpZ2h0IHtcblx0XHR2ZWMzIHBvc2l0aW9uO1xuXHRcdHZlYzMgZGlyZWN0aW9uO1xuXHRcdHZlYzMgY29sb3I7XG5cdFx0ZmxvYXQgZGlzdGFuY2U7XG5cdFx0ZmxvYXQgZGVjYXk7XG5cdFx0ZmxvYXQgY29uZUNvcztcblx0XHRmbG9hdCBwZW51bWJyYUNvcztcblx0fTtcblx0dW5pZm9ybSBTcG90TGlnaHQgc3BvdExpZ2h0c1sgTlVNX1NQT1RfTElHSFRTIF07XG5cdHZvaWQgZ2V0U3BvdExpZ2h0SW5mbyggY29uc3QgaW4gU3BvdExpZ2h0IHNwb3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgb3V0IEluY2lkZW50TGlnaHQgbGlnaHQgKSB7XG5cdFx0dmVjMyBsVmVjdG9yID0gc3BvdExpZ2h0LnBvc2l0aW9uIC0gZ2VvbWV0cnkucG9zaXRpb247XG5cdFx0bGlnaHQuZGlyZWN0aW9uID0gbm9ybWFsaXplKCBsVmVjdG9yICk7XG5cdFx0ZmxvYXQgYW5nbGVDb3MgPSBkb3QoIGxpZ2h0LmRpcmVjdGlvbiwgc3BvdExpZ2h0LmRpcmVjdGlvbiApO1xuXHRcdGZsb2F0IHNwb3RBdHRlbnVhdGlvbiA9IGdldFNwb3RBdHRlbnVhdGlvbiggc3BvdExpZ2h0LmNvbmVDb3MsIHNwb3RMaWdodC5wZW51bWJyYUNvcywgYW5nbGVDb3MgKTtcblx0XHRpZiAoIHNwb3RBdHRlbnVhdGlvbiA+IDAuMCApIHtcblx0XHRcdGZsb2F0IGxpZ2h0RGlzdGFuY2UgPSBsZW5ndGgoIGxWZWN0b3IgKTtcblx0XHRcdGxpZ2h0LmNvbG9yID0gc3BvdExpZ2h0LmNvbG9yICogc3BvdEF0dGVudWF0aW9uO1xuXHRcdFx0bGlnaHQuY29sb3IgKj0gZ2V0RGlzdGFuY2VBdHRlbnVhdGlvbiggbGlnaHREaXN0YW5jZSwgc3BvdExpZ2h0LmRpc3RhbmNlLCBzcG90TGlnaHQuZGVjYXkgKTtcblx0XHRcdGxpZ2h0LnZpc2libGUgPSAoIGxpZ2h0LmNvbG9yICE9IHZlYzMoIDAuMCApICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxpZ2h0LmNvbG9yID0gdmVjMyggMC4wICk7XG5cdFx0XHRsaWdodC52aXNpYmxlID0gZmFsc2U7XG5cdFx0fVxuXHR9XG4jZW5kaWZcbiNpZiBOVU1fUkVDVF9BUkVBX0xJR0hUUyA+IDBcblx0c3RydWN0IFJlY3RBcmVhTGlnaHQge1xuXHRcdHZlYzMgY29sb3I7XG5cdFx0dmVjMyBwb3NpdGlvbjtcblx0XHR2ZWMzIGhhbGZXaWR0aDtcblx0XHR2ZWMzIGhhbGZIZWlnaHQ7XG5cdH07XG5cdHVuaWZvcm0gc2FtcGxlcjJEIGx0Y18xO1x0dW5pZm9ybSBzYW1wbGVyMkQgbHRjXzI7XG5cdHVuaWZvcm0gUmVjdEFyZWFMaWdodCByZWN0QXJlYUxpZ2h0c1sgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgXTtcbiNlbmRpZlxuI2lmIE5VTV9IRU1JX0xJR0hUUyA+IDBcblx0c3RydWN0IEhlbWlzcGhlcmVMaWdodCB7XG5cdFx0dmVjMyBkaXJlY3Rpb247XG5cdFx0dmVjMyBza3lDb2xvcjtcblx0XHR2ZWMzIGdyb3VuZENvbG9yO1xuXHR9O1xuXHR1bmlmb3JtIEhlbWlzcGhlcmVMaWdodCBoZW1pc3BoZXJlTGlnaHRzWyBOVU1fSEVNSV9MSUdIVFMgXTtcblx0dmVjMyBnZXRIZW1pc3BoZXJlTGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiBIZW1pc3BoZXJlTGlnaHQgaGVtaUxpZ2h0LCBjb25zdCBpbiB2ZWMzIG5vcm1hbCApIHtcblx0XHRmbG9hdCBkb3ROTCA9IGRvdCggbm9ybWFsLCBoZW1pTGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0ZmxvYXQgaGVtaURpZmZ1c2VXZWlnaHQgPSAwLjUgKiBkb3ROTCArIDAuNTtcblx0XHR2ZWMzIGlycmFkaWFuY2UgPSBtaXgoIGhlbWlMaWdodC5ncm91bmRDb2xvciwgaGVtaUxpZ2h0LnNreUNvbG9yLCBoZW1pRGlmZnVzZVdlaWdodCApO1xuXHRcdHJldHVybiBpcnJhZGlhbmNlO1xuXHR9XG4jZW5kaWYiLGxpZ2h0c190b29uX2ZyYWdtZW50OiJUb29uTWF0ZXJpYWwgbWF0ZXJpYWw7XG5tYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiOyIsbGlnaHRzX3Rvb25fcGFyc19mcmFnbWVudDoidmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG5zdHJ1Y3QgVG9vbk1hdGVyaWFsIHtcblx0dmVjMyBkaWZmdXNlQ29sb3I7XG59O1xudm9pZCBSRV9EaXJlY3RfVG9vbiggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gVG9vbk1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0dmVjMyBpcnJhZGlhbmNlID0gZ2V0R3JhZGllbnRJcnJhZGlhbmNlKCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XG59XG52b2lkIFJFX0luZGlyZWN0RGlmZnVzZV9Ub29uKCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFRvb25NYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcbn1cbiNkZWZpbmUgUkVfRGlyZWN0XHRcdFx0XHRSRV9EaXJlY3RfVG9vblxuI2RlZmluZSBSRV9JbmRpcmVjdERpZmZ1c2VcdFx0UkVfSW5kaXJlY3REaWZmdXNlX1Rvb25cbiNkZWZpbmUgTWF0ZXJpYWxfTGlnaHRQcm9iZUxPRCggbWF0ZXJpYWwgKVx0KDApIixsaWdodHNfcGhvbmdfZnJhZ21lbnQ6IkJsaW5uUGhvbmdNYXRlcmlhbCBtYXRlcmlhbDtcbm1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGRpZmZ1c2VDb2xvci5yZ2I7XG5tYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gc3BlY3VsYXI7XG5tYXRlcmlhbC5zcGVjdWxhclNoaW5pbmVzcyA9IHNoaW5pbmVzcztcbm1hdGVyaWFsLnNwZWN1bGFyU3RyZW5ndGggPSBzcGVjdWxhclN0cmVuZ3RoOyIsbGlnaHRzX3Bob25nX3BhcnNfZnJhZ21lbnQ6InZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuc3RydWN0IEJsaW5uUGhvbmdNYXRlcmlhbCB7XG5cdHZlYzMgZGlmZnVzZUNvbG9yO1xuXHR2ZWMzIHNwZWN1bGFyQ29sb3I7XG5cdGZsb2F0IHNwZWN1bGFyU2hpbmluZXNzO1xuXHRmbG9hdCBzcGVjdWxhclN0cmVuZ3RoO1xufTtcbnZvaWQgUkVfRGlyZWN0X0JsaW5uUGhvbmcoIGNvbnN0IGluIEluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIEJsaW5uUGhvbmdNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XG5cdGZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApO1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBkb3ROTCAqIGRpcmVjdExpZ2h0LmNvbG9yO1xuXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xuXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBpcnJhZGlhbmNlICogQlJERl9CbGlublBob25nKCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJTaGluaW5lc3MgKSAqIG1hdGVyaWFsLnNwZWN1bGFyU3RyZW5ndGg7XG59XG52b2lkIFJFX0luZGlyZWN0RGlmZnVzZV9CbGlublBob25nKCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIEJsaW5uUGhvbmdNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcbn1cbiNkZWZpbmUgUkVfRGlyZWN0XHRcdFx0XHRSRV9EaXJlY3RfQmxpbm5QaG9uZ1xuI2RlZmluZSBSRV9JbmRpcmVjdERpZmZ1c2VcdFx0UkVfSW5kaXJlY3REaWZmdXNlX0JsaW5uUGhvbmdcbiNkZWZpbmUgTWF0ZXJpYWxfTGlnaHRQcm9iZUxPRCggbWF0ZXJpYWwgKVx0KDApIixsaWdodHNfcGh5c2ljYWxfZnJhZ21lbnQ6IlBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWw7XG5tYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiICogKCAxLjAgLSBtZXRhbG5lc3NGYWN0b3IgKTtcbnZlYzMgZHh5ID0gbWF4KCBhYnMoIGRGZHgoIGdlb21ldHJ5Tm9ybWFsICkgKSwgYWJzKCBkRmR5KCBnZW9tZXRyeU5vcm1hbCApICkgKTtcbmZsb2F0IGdlb21ldHJ5Um91Z2huZXNzID0gbWF4KCBtYXgoIGR4eS54LCBkeHkueSApLCBkeHkueiApO1xubWF0ZXJpYWwucm91Z2huZXNzID0gbWF4KCByb3VnaG5lc3NGYWN0b3IsIDAuMDUyNSApO21hdGVyaWFsLnJvdWdobmVzcyArPSBnZW9tZXRyeVJvdWdobmVzcztcbm1hdGVyaWFsLnJvdWdobmVzcyA9IG1pbiggbWF0ZXJpYWwucm91Z2huZXNzLCAxLjAgKTtcbiNpZmRlZiBJT1Jcblx0I2lmZGVmIFNQRUNVTEFSXG5cdFx0ZmxvYXQgc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IgPSBzcGVjdWxhckludGVuc2l0eTtcblx0XHR2ZWMzIHNwZWN1bGFyQ29sb3JGYWN0b3IgPSBzcGVjdWxhckNvbG9yO1xuXHRcdCNpZmRlZiBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVBcblx0XHRcdHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yICo9IHRleHR1cmUyRCggc3BlY3VsYXJJbnRlbnNpdHlNYXAsIHZVdiApLmE7XG5cdFx0I2VuZGlmXG5cdFx0I2lmZGVmIFVTRV9TUEVDVUxBUkNPTE9STUFQXG5cdFx0XHRzcGVjdWxhckNvbG9yRmFjdG9yICo9IHRleHR1cmUyRCggc3BlY3VsYXJDb2xvck1hcCwgdlV2ICkucmdiO1xuXHRcdCNlbmRpZlxuXHRcdG1hdGVyaWFsLnNwZWN1bGFyRjkwID0gbWl4KCBzcGVjdWxhckludGVuc2l0eUZhY3RvciwgMS4wLCBtZXRhbG5lc3NGYWN0b3IgKTtcblx0I2Vsc2Vcblx0XHRmbG9hdCBzcGVjdWxhckludGVuc2l0eUZhY3RvciA9IDEuMDtcblx0XHR2ZWMzIHNwZWN1bGFyQ29sb3JGYWN0b3IgPSB2ZWMzKCAxLjAgKTtcblx0XHRtYXRlcmlhbC5zcGVjdWxhckY5MCA9IDEuMDtcblx0I2VuZGlmXG5cdG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBtaXgoIG1pbiggcG93MiggKCBpb3IgLSAxLjAgKSAvICggaW9yICsgMS4wICkgKSAqIHNwZWN1bGFyQ29sb3JGYWN0b3IsIHZlYzMoIDEuMCApICkgKiBzcGVjdWxhckludGVuc2l0eUZhY3RvciwgZGlmZnVzZUNvbG9yLnJnYiwgbWV0YWxuZXNzRmFjdG9yICk7XG4jZWxzZVxuXHRtYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gbWl4KCB2ZWMzKCAwLjA0ICksIGRpZmZ1c2VDb2xvci5yZ2IsIG1ldGFsbmVzc0ZhY3RvciApO1xuXHRtYXRlcmlhbC5zcGVjdWxhckY5MCA9IDEuMDtcbiNlbmRpZlxuI2lmZGVmIFVTRV9DTEVBUkNPQVRcblx0bWF0ZXJpYWwuY2xlYXJjb2F0ID0gY2xlYXJjb2F0O1xuXHRtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgPSBjbGVhcmNvYXRSb3VnaG5lc3M7XG5cdG1hdGVyaWFsLmNsZWFyY29hdEYwID0gdmVjMyggMC4wNCApO1xuXHRtYXRlcmlhbC5jbGVhcmNvYXRGOTAgPSAxLjA7XG5cdCNpZmRlZiBVU0VfQ0xFQVJDT0FUTUFQXG5cdFx0bWF0ZXJpYWwuY2xlYXJjb2F0ICo9IHRleHR1cmUyRCggY2xlYXJjb2F0TWFwLCB2VXYgKS54O1xuXHQjZW5kaWZcblx0I2lmZGVmIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQXG5cdFx0bWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzICo9IHRleHR1cmUyRCggY2xlYXJjb2F0Um91Z2huZXNzTWFwLCB2VXYgKS55O1xuXHQjZW5kaWZcblx0bWF0ZXJpYWwuY2xlYXJjb2F0ID0gc2F0dXJhdGUoIG1hdGVyaWFsLmNsZWFyY29hdCApO1x0bWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzID0gbWF4KCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MsIDAuMDUyNSApO1xuXHRtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKz0gZ2VvbWV0cnlSb3VnaG5lc3M7XG5cdG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IG1pbiggbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzLCAxLjAgKTtcbiNlbmRpZlxuI2lmZGVmIFVTRV9TSEVFTlxuXHRtYXRlcmlhbC5zaGVlbkNvbG9yID0gc2hlZW5Db2xvcjtcblx0I2lmZGVmIFVTRV9TSEVFTkNPTE9STUFQXG5cdFx0bWF0ZXJpYWwuc2hlZW5Db2xvciAqPSB0ZXh0dXJlMkQoIHNoZWVuQ29sb3JNYXAsIHZVdiApLnJnYjtcblx0I2VuZGlmXG5cdG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzID0gY2xhbXAoIHNoZWVuUm91Z2huZXNzLCAwLjA3LCAxLjAgKTtcblx0I2lmZGVmIFVTRV9TSEVFTlJPVUdITkVTU01BUFxuXHRcdG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzICo9IHRleHR1cmUyRCggc2hlZW5Sb3VnaG5lc3NNYXAsIHZVdiApLmE7XG5cdCNlbmRpZlxuI2VuZGlmIixsaWdodHNfcGh5c2ljYWxfcGFyc19mcmFnbWVudDoic3RydWN0IFBoeXNpY2FsTWF0ZXJpYWwge1xuXHR2ZWMzIGRpZmZ1c2VDb2xvcjtcblx0ZmxvYXQgcm91Z2huZXNzO1xuXHR2ZWMzIHNwZWN1bGFyQ29sb3I7XG5cdGZsb2F0IHNwZWN1bGFyRjkwO1xuXHQjaWZkZWYgVVNFX0NMRUFSQ09BVFxuXHRcdGZsb2F0IGNsZWFyY29hdDtcblx0XHRmbG9hdCBjbGVhcmNvYXRSb3VnaG5lc3M7XG5cdFx0dmVjMyBjbGVhcmNvYXRGMDtcblx0XHRmbG9hdCBjbGVhcmNvYXRGOTA7XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX1NIRUVOXG5cdFx0dmVjMyBzaGVlbkNvbG9yO1xuXHRcdGZsb2F0IHNoZWVuUm91Z2huZXNzO1xuXHQjZW5kaWZcbn07XG52ZWMzIGNsZWFyY29hdFNwZWN1bGFyID0gdmVjMyggMC4wICk7XG52ZWMzIHNoZWVuU3BlY3VsYXIgPSB2ZWMzKCAwLjAgKTtcbmZsb2F0IElCTFNoZWVuQlJERiggY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzKSB7XG5cdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTtcblx0ZmxvYXQgcjIgPSByb3VnaG5lc3MgKiByb3VnaG5lc3M7XG5cdGZsb2F0IGEgPSByb3VnaG5lc3MgPCAwLjI1ID8gLTMzOS4yICogcjIgKyAxNjEuNCAqIHJvdWdobmVzcyAtIDI1LjkgOiAtOC40OCAqIHIyICsgMTQuMyAqIHJvdWdobmVzcyAtIDkuOTU7XG5cdGZsb2F0IGIgPSByb3VnaG5lc3MgPCAwLjI1ID8gNDQuMCAqIHIyIC0gMjMuNyAqIHJvdWdobmVzcyArIDMuMjYgOiAxLjk3ICogcjIgLSAzLjI3ICogcm91Z2huZXNzICsgMC43Mjtcblx0ZmxvYXQgREcgPSBleHAoIGEgKiBkb3ROViArIGIgKSArICggcm91Z2huZXNzIDwgMC4yNSA/IDAuMCA6IDAuMSAqICggcm91Z2huZXNzIC0gMC4yNSApICk7XG5cdHJldHVybiBzYXR1cmF0ZSggREcgKiBSRUNJUFJPQ0FMX1BJICk7XG59XG52ZWMyIERGR0FwcHJveCggY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7XG5cdGNvbnN0IHZlYzQgYzAgPSB2ZWM0KCAtIDEsIC0gMC4wMjc1LCAtIDAuNTcyLCAwLjAyMiApO1xuXHRjb25zdCB2ZWM0IGMxID0gdmVjNCggMSwgMC4wNDI1LCAxLjA0LCAtIDAuMDQgKTtcblx0dmVjNCByID0gcm91Z2huZXNzICogYzAgKyBjMTtcblx0ZmxvYXQgYTAwNCA9IG1pbiggci54ICogci54LCBleHAyKCAtIDkuMjggKiBkb3ROViApICkgKiByLnggKyByLnk7XG5cdHZlYzIgZmFiID0gdmVjMiggLSAxLjA0LCAxLjA0ICkgKiBhMDA0ICsgci56dztcblx0cmV0dXJuIGZhYjtcbn1cbnZlYzMgRW52aXJvbm1lbnRCUkRGKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNwZWN1bGFyRjkwLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdHZlYzIgZmFiID0gREZHQXBwcm94KCBub3JtYWwsIHZpZXdEaXIsIHJvdWdobmVzcyApO1xuXHRyZXR1cm4gc3BlY3VsYXJDb2xvciAqIGZhYi54ICsgc3BlY3VsYXJGOTAgKiBmYWIueTtcbn1cbnZvaWQgY29tcHV0ZU11bHRpc2NhdHRlcmluZyggY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gdmVjMyBzcGVjdWxhckNvbG9yLCBjb25zdCBpbiBmbG9hdCBzcGVjdWxhckY5MCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBpbm91dCB2ZWMzIHNpbmdsZVNjYXR0ZXIsIGlub3V0IHZlYzMgbXVsdGlTY2F0dGVyICkge1xuXHR2ZWMyIGZhYiA9IERGR0FwcHJveCggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTtcblx0dmVjMyBGc3NFc3MgPSBzcGVjdWxhckNvbG9yICogZmFiLnggKyBzcGVjdWxhckY5MCAqIGZhYi55O1xuXHRmbG9hdCBFc3MgPSBmYWIueCArIGZhYi55O1xuXHRmbG9hdCBFbXMgPSAxLjAgLSBFc3M7XG5cdHZlYzMgRmF2ZyA9IHNwZWN1bGFyQ29sb3IgKyAoIDEuMCAtIHNwZWN1bGFyQ29sb3IgKSAqIDAuMDQ3NjE5O1x0dmVjMyBGbXMgPSBGc3NFc3MgKiBGYXZnIC8gKCAxLjAgLSBFbXMgKiBGYXZnICk7XG5cdHNpbmdsZVNjYXR0ZXIgKz0gRnNzRXNzO1xuXHRtdWx0aVNjYXR0ZXIgKz0gRm1zICogRW1zO1xufVxuI2lmIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMFxuXHR2b2lkIFJFX0RpcmVjdF9SZWN0QXJlYV9QaHlzaWNhbCggY29uc3QgaW4gUmVjdEFyZWFMaWdodCByZWN0QXJlYUxpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0XHR2ZWMzIG5vcm1hbCA9IGdlb21ldHJ5Lm5vcm1hbDtcblx0XHR2ZWMzIHZpZXdEaXIgPSBnZW9tZXRyeS52aWV3RGlyO1xuXHRcdHZlYzMgcG9zaXRpb24gPSBnZW9tZXRyeS5wb3NpdGlvbjtcblx0XHR2ZWMzIGxpZ2h0UG9zID0gcmVjdEFyZWFMaWdodC5wb3NpdGlvbjtcblx0XHR2ZWMzIGhhbGZXaWR0aCA9IHJlY3RBcmVhTGlnaHQuaGFsZldpZHRoO1xuXHRcdHZlYzMgaGFsZkhlaWdodCA9IHJlY3RBcmVhTGlnaHQuaGFsZkhlaWdodDtcblx0XHR2ZWMzIGxpZ2h0Q29sb3IgPSByZWN0QXJlYUxpZ2h0LmNvbG9yO1xuXHRcdGZsb2F0IHJvdWdobmVzcyA9IG1hdGVyaWFsLnJvdWdobmVzcztcblx0XHR2ZWMzIHJlY3RDb29yZHNbIDQgXTtcblx0XHRyZWN0Q29vcmRzWyAwIF0gPSBsaWdodFBvcyArIGhhbGZXaWR0aCAtIGhhbGZIZWlnaHQ7XHRcdHJlY3RDb29yZHNbIDEgXSA9IGxpZ2h0UG9zIC0gaGFsZldpZHRoIC0gaGFsZkhlaWdodDtcblx0XHRyZWN0Q29vcmRzWyAyIF0gPSBsaWdodFBvcyAtIGhhbGZXaWR0aCArIGhhbGZIZWlnaHQ7XG5cdFx0cmVjdENvb3Jkc1sgMyBdID0gbGlnaHRQb3MgKyBoYWxmV2lkdGggKyBoYWxmSGVpZ2h0O1xuXHRcdHZlYzIgdXYgPSBMVENfVXYoIG5vcm1hbCwgdmlld0Rpciwgcm91Z2huZXNzICk7XG5cdFx0dmVjNCB0MSA9IHRleHR1cmUyRCggbHRjXzEsIHV2ICk7XG5cdFx0dmVjNCB0MiA9IHRleHR1cmUyRCggbHRjXzIsIHV2ICk7XG5cdFx0bWF0MyBtSW52ID0gbWF0Myhcblx0XHRcdHZlYzMoIHQxLngsIDAsIHQxLnkgKSxcblx0XHRcdHZlYzMoICAgIDAsIDEsICAgIDAgKSxcblx0XHRcdHZlYzMoIHQxLnosIDAsIHQxLncgKVxuXHRcdCk7XG5cdFx0dmVjMyBmcmVzbmVsID0gKCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yICogdDIueCArICggdmVjMyggMS4wICkgLSBtYXRlcmlhbC5zcGVjdWxhckNvbG9yICkgKiB0Mi55ICk7XG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz0gbGlnaHRDb2xvciAqIGZyZXNuZWwgKiBMVENfRXZhbHVhdGUoIG5vcm1hbCwgdmlld0RpciwgcG9zaXRpb24sIG1JbnYsIHJlY3RDb29yZHMgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICs9IGxpZ2h0Q29sb3IgKiBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKiBMVENfRXZhbHVhdGUoIG5vcm1hbCwgdmlld0RpciwgcG9zaXRpb24sIG1hdDMoIDEuMCApLCByZWN0Q29vcmRzICk7XG5cdH1cbiNlbmRpZlxudm9pZCBSRV9EaXJlY3RfUGh5c2ljYWwoIGNvbnN0IGluIEluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHRmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKTtcblx0dmVjMyBpcnJhZGlhbmNlID0gZG90TkwgKiBkaXJlY3RMaWdodC5jb2xvcjtcblx0I2lmZGVmIFVTRV9DTEVBUkNPQVRcblx0XHRmbG9hdCBkb3ROTGNjID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApO1xuXHRcdHZlYzMgY2NJcnJhZGlhbmNlID0gZG90TkxjYyAqIGRpcmVjdExpZ2h0LmNvbG9yO1xuXHRcdGNsZWFyY29hdFNwZWN1bGFyICs9IGNjSXJyYWRpYW5jZSAqIEJSREZfR0dYKCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjAsIG1hdGVyaWFsLmNsZWFyY29hdEY5MCwgbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzICk7XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX1NIRUVOXG5cdFx0c2hlZW5TcGVjdWxhciArPSBpcnJhZGlhbmNlICogQlJERl9TaGVlbiggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNoZWVuQ29sb3IsIG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzICk7XG5cdCNlbmRpZlxuXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBpcnJhZGlhbmNlICogQlJERl9HR1goIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkubm9ybWFsLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCwgbWF0ZXJpYWwucm91Z2huZXNzICk7XG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XG59XG52b2lkIFJFX0luZGlyZWN0RGlmZnVzZV9QaHlzaWNhbCggY29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xufVxudm9pZCBSRV9JbmRpcmVjdFNwZWN1bGFyX1BoeXNpY2FsKCBjb25zdCBpbiB2ZWMzIHJhZGlhbmNlLCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIHZlYzMgY2xlYXJjb2F0UmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0KSB7XG5cdCNpZmRlZiBVU0VfQ0xFQVJDT0FUXG5cdFx0Y2xlYXJjb2F0U3BlY3VsYXIgKz0gY2xlYXJjb2F0UmFkaWFuY2UgKiBFbnZpcm9ubWVudEJSREYoIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciwgbWF0ZXJpYWwuY2xlYXJjb2F0RjAsIG1hdGVyaWFsLmNsZWFyY29hdEY5MCwgbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzICk7XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX1NIRUVOXG5cdFx0c2hlZW5TcGVjdWxhciArPSBpcnJhZGlhbmNlICogbWF0ZXJpYWwuc2hlZW5Db2xvciAqIElCTFNoZWVuQlJERiggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5zaGVlblJvdWdobmVzcyApO1xuXHQjZW5kaWZcblx0dmVjMyBzaW5nbGVTY2F0dGVyaW5nID0gdmVjMyggMC4wICk7XG5cdHZlYzMgbXVsdGlTY2F0dGVyaW5nID0gdmVjMyggMC4wICk7XG5cdHZlYzMgY29zaW5lV2VpZ2h0ZWRJcnJhZGlhbmNlID0gaXJyYWRpYW5jZSAqIFJFQ0lQUk9DQUxfUEk7XG5cdGNvbXB1dGVNdWx0aXNjYXR0ZXJpbmcoIGdlb21ldHJ5Lm5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJGOTAsIG1hdGVyaWFsLnJvdWdobmVzcywgc2luZ2xlU2NhdHRlcmluZywgbXVsdGlTY2F0dGVyaW5nICk7XG5cdHZlYzMgZGlmZnVzZSA9IG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqICggMS4wIC0gKCBzaW5nbGVTY2F0dGVyaW5nICsgbXVsdGlTY2F0dGVyaW5nICkgKTtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArPSByYWRpYW5jZSAqIHNpbmdsZVNjYXR0ZXJpbmc7XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKz0gbXVsdGlTY2F0dGVyaW5nICogY29zaW5lV2VpZ2h0ZWRJcnJhZGlhbmNlO1xuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gZGlmZnVzZSAqIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZTtcbn1cbiNkZWZpbmUgUkVfRGlyZWN0XHRcdFx0XHRSRV9EaXJlY3RfUGh5c2ljYWxcbiNkZWZpbmUgUkVfRGlyZWN0X1JlY3RBcmVhXHRcdFJFX0RpcmVjdF9SZWN0QXJlYV9QaHlzaWNhbFxuI2RlZmluZSBSRV9JbmRpcmVjdERpZmZ1c2VcdFx0UkVfSW5kaXJlY3REaWZmdXNlX1BoeXNpY2FsXG4jZGVmaW5lIFJFX0luZGlyZWN0U3BlY3VsYXJcdFx0UkVfSW5kaXJlY3RTcGVjdWxhcl9QaHlzaWNhbFxuZmxvYXQgY29tcHV0ZVNwZWN1bGFyT2NjbHVzaW9uKCBjb25zdCBpbiBmbG9hdCBkb3ROViwgY29uc3QgaW4gZmxvYXQgYW1iaWVudE9jY2x1c2lvbiwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRyZXR1cm4gc2F0dXJhdGUoIHBvdyggZG90TlYgKyBhbWJpZW50T2NjbHVzaW9uLCBleHAyKCAtIDE2LjAgKiByb3VnaG5lc3MgLSAxLjAgKSApIC0gMS4wICsgYW1iaWVudE9jY2x1c2lvbiApO1xufSIsbGlnaHRzX2ZyYWdtZW50X2JlZ2luOiJcbkdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnk7XG5nZW9tZXRyeS5wb3NpdGlvbiA9IC0gdlZpZXdQb3NpdGlvbjtcbmdlb21ldHJ5Lm5vcm1hbCA9IG5vcm1hbDtcbmdlb21ldHJ5LnZpZXdEaXIgPSAoIGlzT3J0aG9ncmFwaGljICkgPyB2ZWMzKCAwLCAwLCAxICkgOiBub3JtYWxpemUoIHZWaWV3UG9zaXRpb24gKTtcbiNpZmRlZiBVU0VfQ0xFQVJDT0FUXG5cdGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCA9IGNsZWFyY29hdE5vcm1hbDtcbiNlbmRpZlxuSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodDtcbiNpZiAoIE5VTV9QT0lOVF9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0IClcblx0UG9pbnRMaWdodCBwb2ludExpZ2h0O1xuXHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxuXHRQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHRTaGFkb3c7XG5cdCNlbmRpZlxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVFM7IGkgKysgKSB7XG5cdFx0cG9pbnRMaWdodCA9IHBvaW50TGlnaHRzWyBpIF07XG5cdFx0Z2V0UG9pbnRMaWdodEluZm8oIHBvaW50TGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xuXHRcdCNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgKCBVTlJPTExFRF9MT09QX0lOREVYIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgKVxuXHRcdHBvaW50TGlnaHRTaGFkb3cgPSBwb2ludExpZ2h0U2hhZG93c1sgaSBdO1xuXHRcdGRpcmVjdExpZ2h0LmNvbG9yICo9IGFsbCggYnZlYzIoIGRpcmVjdExpZ2h0LnZpc2libGUsIHJlY2VpdmVTaGFkb3cgKSApID8gZ2V0UG9pbnRTaGFkb3coIHBvaW50U2hhZG93TWFwWyBpIF0sIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93TWFwU2l6ZSwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dCaWFzLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd1JhZGl1cywgdlBvaW50U2hhZG93Q29vcmRbIGkgXSwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dDYW1lcmFOZWFyLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYUZhciApIDogMS4wO1xuXHRcdCNlbmRpZlxuXHRcdFJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuI2VuZGlmXG4jaWYgKCBOVU1fU1BPVF9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0IClcblx0U3BvdExpZ2h0IHNwb3RMaWdodDtcblx0I2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMFxuXHRTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0U2hhZG93O1xuXHQjZW5kaWZcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVFM7IGkgKysgKSB7XG5cdFx0c3BvdExpZ2h0ID0gc3BvdExpZ2h0c1sgaSBdO1xuXHRcdGdldFNwb3RMaWdodEluZm8oIHNwb3RMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0I2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiAoIFVOUk9MTEVEX0xPT1BfSU5ERVggPCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIClcblx0XHRzcG90TGlnaHRTaGFkb3cgPSBzcG90TGlnaHRTaGFkb3dzWyBpIF07XG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggZGlyZWN0TGlnaHQudmlzaWJsZSwgcmVjZWl2ZVNoYWRvdyApICkgPyBnZXRTaGFkb3coIHNwb3RTaGFkb3dNYXBbIGkgXSwgc3BvdExpZ2h0U2hhZG93LnNoYWRvd01hcFNpemUsIHNwb3RMaWdodFNoYWRvdy5zaGFkb3dCaWFzLCBzcG90TGlnaHRTaGFkb3cuc2hhZG93UmFkaXVzLCB2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDtcblx0XHQjZW5kaWZcblx0XHRSRV9EaXJlY3QoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmICggTlVNX0RJUl9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0IClcblx0RGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0O1xuXHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDBcblx0RGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0U2hhZG93O1xuXHQjZW5kaWZcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUUzsgaSArKyApIHtcblx0XHRkaXJlY3Rpb25hbExpZ2h0ID0gZGlyZWN0aW9uYWxMaWdodHNbIGkgXTtcblx0XHRnZXREaXJlY3Rpb25hbExpZ2h0SW5mbyggZGlyZWN0aW9uYWxMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0I2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiAoIFVOUk9MTEVEX0xPT1BfSU5ERVggPCBOVU1fRElSX0xJR0hUX1NIQURPV1MgKVxuXHRcdGRpcmVjdGlvbmFsTGlnaHRTaGFkb3cgPSBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgaSBdO1xuXHRcdGRpcmVjdExpZ2h0LmNvbG9yICo9IGFsbCggYnZlYzIoIGRpcmVjdExpZ2h0LnZpc2libGUsIHJlY2VpdmVTaGFkb3cgKSApID8gZ2V0U2hhZG93KCBkaXJlY3Rpb25hbFNoYWRvd01hcFsgaSBdLCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93LnNoYWRvd01hcFNpemUsIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3cuc2hhZG93QmlhcywgZGlyZWN0aW9uYWxMaWdodFNoYWRvdy5zaGFkb3dSYWRpdXMsIHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDtcblx0XHQjZW5kaWZcblx0XHRSRV9EaXJlY3QoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmICggTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0X1JlY3RBcmVhIClcblx0UmVjdEFyZWFMaWdodCByZWN0QXJlYUxpZ2h0O1xuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9SRUNUX0FSRUFfTElHSFRTOyBpICsrICkge1xuXHRcdHJlY3RBcmVhTGlnaHQgPSByZWN0QXJlYUxpZ2h0c1sgaSBdO1xuXHRcdFJFX0RpcmVjdF9SZWN0QXJlYSggcmVjdEFyZWFMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG4jZW5kaWZcbiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdERpZmZ1c2UgKVxuXHR2ZWMzIGlibElycmFkaWFuY2UgPSB2ZWMzKCAwLjAgKTtcblx0dmVjMyBpcnJhZGlhbmNlID0gZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggYW1iaWVudExpZ2h0Q29sb3IgKTtcblx0aXJyYWRpYW5jZSArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgZ2VvbWV0cnkubm9ybWFsICk7XG5cdCNpZiAoIE5VTV9IRU1JX0xJR0hUUyA+IDAgKVxuXHRcdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0XHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fSEVNSV9MSUdIVFM7IGkgKysgKSB7XG5cdFx0XHRpcnJhZGlhbmNlICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgZ2VvbWV0cnkubm9ybWFsICk7XG5cdFx0fVxuXHRcdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG5cdCNlbmRpZlxuI2VuZGlmXG4jaWYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxhciApXG5cdHZlYzMgcmFkaWFuY2UgPSB2ZWMzKCAwLjAgKTtcblx0dmVjMyBjbGVhcmNvYXRSYWRpYW5jZSA9IHZlYzMoIDAuMCApO1xuI2VuZGlmIixsaWdodHNfZnJhZ21lbnRfbWFwczoiI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApXG5cdCNpZmRlZiBVU0VfTElHSFRNQVBcblx0XHR2ZWM0IGxpZ2h0TWFwVGV4ZWwgPSB0ZXh0dXJlMkQoIGxpZ2h0TWFwLCB2VXYyICk7XG5cdFx0dmVjMyBsaWdodE1hcElycmFkaWFuY2UgPSBsaWdodE1hcFRleGVsLnJnYiAqIGxpZ2h0TWFwSW50ZW5zaXR5O1xuXHRcdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdFx0bGlnaHRNYXBJcnJhZGlhbmNlICo9IFBJO1xuXHRcdCNlbmRpZlxuXHRcdGlycmFkaWFuY2UgKz0gbGlnaHRNYXBJcnJhZGlhbmNlO1xuXHQjZW5kaWZcblx0I2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSAmJiBkZWZpbmVkKCBTVEFOREFSRCApICYmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKVxuXHRcdGlibElycmFkaWFuY2UgKz0gZ2V0SUJMSXJyYWRpYW5jZSggZ2VvbWV0cnkubm9ybWFsICk7XG5cdCNlbmRpZlxuI2VuZGlmXG4jaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKVxuXHRyYWRpYW5jZSArPSBnZXRJQkxSYWRpYW5jZSggZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkubm9ybWFsLCBtYXRlcmlhbC5yb3VnaG5lc3MgKTtcblx0I2lmZGVmIFVTRV9DTEVBUkNPQVRcblx0XHRjbGVhcmNvYXRSYWRpYW5jZSArPSBnZXRJQkxSYWRpYW5jZSggZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKTtcblx0I2VuZGlmXG4jZW5kaWYiLGxpZ2h0c19mcmFnbWVudF9lbmQ6IiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdERpZmZ1c2UgKVxuXHRSRV9JbmRpcmVjdERpZmZ1c2UoIGlycmFkaWFuY2UsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcbiNlbmRpZlxuI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKVxuXHRSRV9JbmRpcmVjdFNwZWN1bGFyKCByYWRpYW5jZSwgaWJsSXJyYWRpYW5jZSwgY2xlYXJjb2F0UmFkaWFuY2UsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcbiNlbmRpZiIsbG9nZGVwdGhidWZfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUYgKSAmJiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUZfRVhUIClcblx0Z2xfRnJhZ0RlcHRoRVhUID0gdklzUGVyc3BlY3RpdmUgPT0gMC4wID8gZ2xfRnJhZ0Nvb3JkLnogOiBsb2cyKCB2RnJhZ0RlcHRoICkgKiBsb2dEZXB0aEJ1ZkZDICogMC41O1xuI2VuZGlmIixsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGICkgJiYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGX0VYVCApXG5cdHVuaWZvcm0gZmxvYXQgbG9nRGVwdGhCdWZGQztcblx0dmFyeWluZyBmbG9hdCB2RnJhZ0RlcHRoO1xuXHR2YXJ5aW5nIGZsb2F0IHZJc1BlcnNwZWN0aXZlO1xuI2VuZGlmIixsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleDoiI2lmZGVmIFVTRV9MT0dERVBUSEJVRlxuXHQjaWZkZWYgVVNFX0xPR0RFUFRIQlVGX0VYVFxuXHRcdHZhcnlpbmcgZmxvYXQgdkZyYWdEZXB0aDtcblx0XHR2YXJ5aW5nIGZsb2F0IHZJc1BlcnNwZWN0aXZlO1xuXHQjZWxzZVxuXHRcdHVuaWZvcm0gZmxvYXQgbG9nRGVwdGhCdWZGQztcblx0I2VuZGlmXG4jZW5kaWYiLGxvZ2RlcHRoYnVmX3ZlcnRleDoiI2lmZGVmIFVTRV9MT0dERVBUSEJVRlxuXHQjaWZkZWYgVVNFX0xPR0RFUFRIQlVGX0VYVFxuXHRcdHZGcmFnRGVwdGggPSAxLjAgKyBnbF9Qb3NpdGlvbi53O1xuXHRcdHZJc1BlcnNwZWN0aXZlID0gZmxvYXQoIGlzUGVyc3BlY3RpdmVNYXRyaXgoIHByb2plY3Rpb25NYXRyaXggKSApO1xuXHQjZWxzZVxuXHRcdGlmICggaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApICkge1xuXHRcdFx0Z2xfUG9zaXRpb24ueiA9IGxvZzIoIG1heCggRVBTSUxPTiwgZ2xfUG9zaXRpb24udyArIDEuMCApICkgKiBsb2dEZXB0aEJ1ZkZDIC0gMS4wO1xuXHRcdFx0Z2xfUG9zaXRpb24ueiAqPSBnbF9Qb3NpdGlvbi53O1xuXHRcdH1cblx0I2VuZGlmXG4jZW5kaWYiLG1hcF9mcmFnbWVudDoiI2lmZGVmIFVTRV9NQVBcblx0dmVjNCBzYW1wbGVkRGlmZnVzZUNvbG9yID0gdGV4dHVyZTJEKCBtYXAsIHZVdiApO1xuXHQjaWZkZWYgREVDT0RFX1ZJREVPX1RFWFRVUkVcblx0XHRzYW1wbGVkRGlmZnVzZUNvbG9yID0gdmVjNCggbWl4KCBwb3coIHNhbXBsZWREaWZmdXNlQ29sb3IucmdiICogMC45NDc4NjcyOTg2ICsgdmVjMyggMC4wNTIxMzI3MDE0ICksIHZlYzMoIDIuNCApICksIHNhbXBsZWREaWZmdXNlQ29sb3IucmdiICogMC4wNzczOTkzODA4LCB2ZWMzKCBsZXNzVGhhbkVxdWFsKCBzYW1wbGVkRGlmZnVzZUNvbG9yLnJnYiwgdmVjMyggMC4wNDA0NSApICkgKSApLCBzYW1wbGVkRGlmZnVzZUNvbG9yLncgKTtcblx0I2VuZGlmXG5cdGRpZmZ1c2VDb2xvciAqPSBzYW1wbGVkRGlmZnVzZUNvbG9yO1xuI2VuZGlmIixtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9NQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgbWFwO1xuI2VuZGlmIixtYXBfcGFydGljbGVfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfTUFQICkgfHwgZGVmaW5lZCggVVNFX0FMUEhBTUFQIClcblx0dmVjMiB1diA9ICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCBnbF9Qb2ludENvb3JkLngsIDEuMCAtIGdsX1BvaW50Q29vcmQueSwgMSApICkueHk7XG4jZW5kaWZcbiNpZmRlZiBVU0VfTUFQXG5cdGRpZmZ1c2VDb2xvciAqPSB0ZXh0dXJlMkQoIG1hcCwgdXYgKTtcbiNlbmRpZlxuI2lmZGVmIFVTRV9BTFBIQU1BUFxuXHRkaWZmdXNlQ29sb3IuYSAqPSB0ZXh0dXJlMkQoIGFscGhhTWFwLCB1diApLmc7XG4jZW5kaWYiLG1hcF9wYXJ0aWNsZV9wYXJzX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX01BUCApIHx8IGRlZmluZWQoIFVTRV9BTFBIQU1BUCApXG5cdHVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTtcbiNlbmRpZlxuI2lmZGVmIFVTRV9NQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgbWFwO1xuI2VuZGlmXG4jaWZkZWYgVVNFX0FMUEhBTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGFscGhhTWFwO1xuI2VuZGlmIixtZXRhbG5lc3NtYXBfZnJhZ21lbnQ6ImZsb2F0IG1ldGFsbmVzc0ZhY3RvciA9IG1ldGFsbmVzcztcbiNpZmRlZiBVU0VfTUVUQUxORVNTTUFQXG5cdHZlYzQgdGV4ZWxNZXRhbG5lc3MgPSB0ZXh0dXJlMkQoIG1ldGFsbmVzc01hcCwgdlV2ICk7XG5cdG1ldGFsbmVzc0ZhY3RvciAqPSB0ZXhlbE1ldGFsbmVzcy5iO1xuI2VuZGlmIixtZXRhbG5lc3NtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgbWV0YWxuZXNzTWFwO1xuI2VuZGlmIixtb3JwaG5vcm1hbF92ZXJ0ZXg6IiNpZmRlZiBVU0VfTU9SUEhOT1JNQUxTXG5cdG9iamVjdE5vcm1hbCAqPSBtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2U7XG5cdCNpZmRlZiBNT1JQSFRBUkdFVFNfVEVYVFVSRVxuXHRcdGZvciAoIGludCBpID0gMDsgaSA8IE1PUlBIVEFSR0VUU19DT1VOVDsgaSArKyApIHtcblx0XHRcdGlmICggbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gIT0gMC4wICkgb2JqZWN0Tm9ybWFsICs9IGdldE1vcnBoKCBnbF9WZXJ0ZXhJRCwgaSwgMSwgMiApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF07XG5cdFx0fVxuXHQjZWxzZVxuXHRcdG9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDAgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDAgXTtcblx0XHRvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwxICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAxIF07XG5cdFx0b2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMiAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMiBdO1xuXHRcdG9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDMgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDMgXTtcblx0I2VuZGlmXG4jZW5kaWYiLG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX01PUlBIVEFSR0VUU1xuXHR1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTtcblx0I2lmZGVmIE1PUlBIVEFSR0VUU19URVhUVVJFXG5cdFx0dW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIE1PUlBIVEFSR0VUU19DT1VOVCBdO1xuXHRcdHVuaWZvcm0gc2FtcGxlcjJEQXJyYXkgbW9ycGhUYXJnZXRzVGV4dHVyZTtcblx0XHR1bmlmb3JtIHZlYzIgbW9ycGhUYXJnZXRzVGV4dHVyZVNpemU7XG5cdFx0dmVjMyBnZXRNb3JwaCggY29uc3QgaW4gaW50IHZlcnRleEluZGV4LCBjb25zdCBpbiBpbnQgbW9ycGhUYXJnZXRJbmRleCwgY29uc3QgaW4gaW50IG9mZnNldCwgY29uc3QgaW4gaW50IHN0cmlkZSApIHtcblx0XHRcdGZsb2F0IHRleGVsSW5kZXggPSBmbG9hdCggdmVydGV4SW5kZXggKiBzdHJpZGUgKyBvZmZzZXQgKTtcblx0XHRcdGZsb2F0IHkgPSBmbG9vciggdGV4ZWxJbmRleCAvIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLnggKTtcblx0XHRcdGZsb2F0IHggPSB0ZXhlbEluZGV4IC0geSAqIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLng7XG5cdFx0XHR2ZWMzIG1vcnBoVVYgPSB2ZWMzKCAoIHggKyAwLjUgKSAvIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLngsIHkgLyBtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZS55LCBtb3JwaFRhcmdldEluZGV4ICk7XG5cdFx0XHRyZXR1cm4gdGV4dHVyZSggbW9ycGhUYXJnZXRzVGV4dHVyZSwgbW9ycGhVViApLnh5ejtcblx0XHR9XG5cdCNlbHNlXG5cdFx0I2lmbmRlZiBVU0VfTU9SUEhOT1JNQUxTXG5cdFx0XHR1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgOCBdO1xuXHRcdCNlbHNlXG5cdFx0XHR1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNCBdO1xuXHRcdCNlbmRpZlxuXHQjZW5kaWZcbiNlbmRpZiIsbW9ycGh0YXJnZXRfdmVydGV4OiIjaWZkZWYgVVNFX01PUlBIVEFSR0VUU1xuXHR0cmFuc2Zvcm1lZCAqPSBtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2U7XG5cdCNpZmRlZiBNT1JQSFRBUkdFVFNfVEVYVFVSRVxuXHRcdGZvciAoIGludCBpID0gMDsgaSA8IE1PUlBIVEFSR0VUU19DT1VOVDsgaSArKyApIHtcblx0XHRcdCNpZm5kZWYgVVNFX01PUlBITk9STUFMU1xuXHRcdFx0XHRpZiAoIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdICE9IDAuMCApIHRyYW5zZm9ybWVkICs9IGdldE1vcnBoKCBnbF9WZXJ0ZXhJRCwgaSwgMCwgMSApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF07XG5cdFx0XHQjZWxzZVxuXHRcdFx0XHRpZiAoIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdICE9IDAuMCApIHRyYW5zZm9ybWVkICs9IGdldE1vcnBoKCBnbF9WZXJ0ZXhJRCwgaSwgMCwgMiApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF07XG5cdFx0XHQjZW5kaWZcblx0XHR9XG5cdCNlbHNlXG5cdFx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQwICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAwIF07XG5cdFx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQxICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAxIF07XG5cdFx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQyICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAyIF07XG5cdFx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQzICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAzIF07XG5cdFx0I2lmbmRlZiBVU0VfTU9SUEhOT1JNQUxTXG5cdFx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDQgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDQgXTtcblx0XHRcdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNSBdO1xuXHRcdFx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ2ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA2IF07XG5cdFx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDcgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDcgXTtcblx0XHQjZW5kaWZcblx0I2VuZGlmXG4jZW5kaWYiLG5vcm1hbF9mcmFnbWVudF9iZWdpbjoiZmxvYXQgZmFjZURpcmVjdGlvbiA9IGdsX0Zyb250RmFjaW5nID8gMS4wIDogLSAxLjA7XG4jaWZkZWYgRkxBVF9TSEFERURcblx0dmVjMyBmZHggPSB2ZWMzKCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnggKSwgZEZkeCggdlZpZXdQb3NpdGlvbi55ICksIGRGZHgoIHZWaWV3UG9zaXRpb24ueiApICk7XG5cdHZlYzMgZmR5ID0gdmVjMyggZEZkeSggdlZpZXdQb3NpdGlvbi54ICksIGRGZHkoIHZWaWV3UG9zaXRpb24ueSApLCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnogKSApO1xuXHR2ZWMzIG5vcm1hbCA9IG5vcm1hbGl6ZSggY3Jvc3MoIGZkeCwgZmR5ICkgKTtcbiNlbHNlXG5cdHZlYzMgbm9ybWFsID0gbm9ybWFsaXplKCB2Tm9ybWFsICk7XG5cdCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRub3JtYWwgPSBub3JtYWwgKiBmYWNlRGlyZWN0aW9uO1xuXHQjZW5kaWZcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0dmVjMyB0YW5nZW50ID0gbm9ybWFsaXplKCB2VGFuZ2VudCApO1xuXHRcdHZlYzMgYml0YW5nZW50ID0gbm9ybWFsaXplKCB2Qml0YW5nZW50ICk7XG5cdFx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdFx0dGFuZ2VudCA9IHRhbmdlbnQgKiBmYWNlRGlyZWN0aW9uO1xuXHRcdFx0Yml0YW5nZW50ID0gYml0YW5nZW50ICogZmFjZURpcmVjdGlvbjtcblx0XHQjZW5kaWZcblx0XHQjaWYgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQoIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQIClcblx0XHRcdG1hdDMgdlRCTiA9IG1hdDMoIHRhbmdlbnQsIGJpdGFuZ2VudCwgbm9ybWFsICk7XG5cdFx0I2VuZGlmXG5cdCNlbmRpZlxuI2VuZGlmXG52ZWMzIGdlb21ldHJ5Tm9ybWFsID0gbm9ybWFsOyIsbm9ybWFsX2ZyYWdtZW50X21hcHM6IiNpZmRlZiBPQkpFQ1RTUEFDRV9OT1JNQUxNQVBcblx0bm9ybWFsID0gdGV4dHVyZTJEKCBub3JtYWxNYXAsIHZVdiApLnh5eiAqIDIuMCAtIDEuMDtcblx0I2lmZGVmIEZMSVBfU0lERURcblx0XHRub3JtYWwgPSAtIG5vcm1hbDtcblx0I2VuZGlmXG5cdCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRub3JtYWwgPSBub3JtYWwgKiBmYWNlRGlyZWN0aW9uO1xuXHQjZW5kaWZcblx0bm9ybWFsID0gbm9ybWFsaXplKCBub3JtYWxNYXRyaXggKiBub3JtYWwgKTtcbiNlbGlmIGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKVxuXHR2ZWMzIG1hcE4gPSB0ZXh0dXJlMkQoIG5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wO1xuXHRtYXBOLnh5ICo9IG5vcm1hbFNjYWxlO1xuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHRub3JtYWwgPSBub3JtYWxpemUoIHZUQk4gKiBtYXBOICk7XG5cdCNlbHNlXG5cdFx0bm9ybWFsID0gcGVydHVyYk5vcm1hbDJBcmIoIC0gdlZpZXdQb3NpdGlvbiwgbm9ybWFsLCBtYXBOLCBmYWNlRGlyZWN0aW9uICk7XG5cdCNlbmRpZlxuI2VsaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKVxuXHRub3JtYWwgPSBwZXJ0dXJiTm9ybWFsQXJiKCAtIHZWaWV3UG9zaXRpb24sIG5vcm1hbCwgZEhkeHlfZndkKCksIGZhY2VEaXJlY3Rpb24gKTtcbiNlbmRpZiIsbm9ybWFsX3BhcnNfZnJhZ21lbnQ6IiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdHZhcnlpbmcgdmVjMyB2VGFuZ2VudDtcblx0XHR2YXJ5aW5nIHZlYzMgdkJpdGFuZ2VudDtcblx0I2VuZGlmXG4jZW5kaWYiLG5vcm1hbF9wYXJzX3ZlcnRleDoiI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0dmFyeWluZyB2ZWMzIHZUYW5nZW50O1xuXHRcdHZhcnlpbmcgdmVjMyB2Qml0YW5nZW50O1xuXHQjZW5kaWZcbiNlbmRpZiIsbm9ybWFsX3ZlcnRleDoiI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2Tm9ybWFsID0gbm9ybWFsaXplKCB0cmFuc2Zvcm1lZE5vcm1hbCApO1xuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2VGFuZ2VudCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWRUYW5nZW50ICk7XG5cdFx0dkJpdGFuZ2VudCA9IG5vcm1hbGl6ZSggY3Jvc3MoIHZOb3JtYWwsIHZUYW5nZW50ICkgKiB0YW5nZW50LncgKTtcblx0I2VuZGlmXG4jZW5kaWYiLG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX05PUk1BTE1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBub3JtYWxNYXA7XG5cdHVuaWZvcm0gdmVjMiBub3JtYWxTY2FsZTtcbiNlbmRpZlxuI2lmZGVmIE9CSkVDVFNQQUNFX05PUk1BTE1BUFxuXHR1bmlmb3JtIG1hdDMgbm9ybWFsTWF0cml4O1xuI2VuZGlmXG4jaWYgISBkZWZpbmVkICggVVNFX1RBTkdFTlQgKSAmJiAoIGRlZmluZWQgKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCAoIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQICkgKVxuXHR2ZWMzIHBlcnR1cmJOb3JtYWwyQXJiKCB2ZWMzIGV5ZV9wb3MsIHZlYzMgc3VyZl9ub3JtLCB2ZWMzIG1hcE4sIGZsb2F0IGZhY2VEaXJlY3Rpb24gKSB7XG5cdFx0dmVjMyBxMCA9IHZlYzMoIGRGZHgoIGV5ZV9wb3MueCApLCBkRmR4KCBleWVfcG9zLnkgKSwgZEZkeCggZXllX3Bvcy56ICkgKTtcblx0XHR2ZWMzIHExID0gdmVjMyggZEZkeSggZXllX3Bvcy54ICksIGRGZHkoIGV5ZV9wb3MueSApLCBkRmR5KCBleWVfcG9zLnogKSApO1xuXHRcdHZlYzIgc3QwID0gZEZkeCggdlV2LnN0ICk7XG5cdFx0dmVjMiBzdDEgPSBkRmR5KCB2VXYuc3QgKTtcblx0XHR2ZWMzIE4gPSBzdXJmX25vcm07XG5cdFx0dmVjMyBxMXBlcnAgPSBjcm9zcyggcTEsIE4gKTtcblx0XHR2ZWMzIHEwcGVycCA9IGNyb3NzKCBOLCBxMCApO1xuXHRcdHZlYzMgVCA9IHExcGVycCAqIHN0MC54ICsgcTBwZXJwICogc3QxLng7XG5cdFx0dmVjMyBCID0gcTFwZXJwICogc3QwLnkgKyBxMHBlcnAgKiBzdDEueTtcblx0XHRmbG9hdCBkZXQgPSBtYXgoIGRvdCggVCwgVCApLCBkb3QoIEIsIEIgKSApO1xuXHRcdGZsb2F0IHNjYWxlID0gKCBkZXQgPT0gMC4wICkgPyAwLjAgOiBmYWNlRGlyZWN0aW9uICogaW52ZXJzZXNxcnQoIGRldCApO1xuXHRcdHJldHVybiBub3JtYWxpemUoIFQgKiAoIG1hcE4ueCAqIHNjYWxlICkgKyBCICogKCBtYXBOLnkgKiBzY2FsZSApICsgTiAqIG1hcE4ueiApO1xuXHR9XG4jZW5kaWYiLGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfYmVnaW46IiNpZmRlZiBVU0VfQ0xFQVJDT0FUXG5cdHZlYzMgY2xlYXJjb2F0Tm9ybWFsID0gZ2VvbWV0cnlOb3JtYWw7XG4jZW5kaWYiLGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfbWFwczoiI2lmZGVmIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQXG5cdHZlYzMgY2xlYXJjb2F0TWFwTiA9IHRleHR1cmUyRCggY2xlYXJjb2F0Tm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7XG5cdGNsZWFyY29hdE1hcE4ueHkgKj0gY2xlYXJjb2F0Tm9ybWFsU2NhbGU7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdGNsZWFyY29hdE5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIGNsZWFyY29hdE1hcE4gKTtcblx0I2Vsc2Vcblx0XHRjbGVhcmNvYXROb3JtYWwgPSBwZXJ0dXJiTm9ybWFsMkFyYiggLSB2Vmlld1Bvc2l0aW9uLCBjbGVhcmNvYXROb3JtYWwsIGNsZWFyY29hdE1hcE4sIGZhY2VEaXJlY3Rpb24gKTtcblx0I2VuZGlmXG4jZW5kaWYiLGNsZWFyY29hdF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0NMRUFSQ09BVE1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBjbGVhcmNvYXRNYXA7XG4jZW5kaWZcbiNpZmRlZiBVU0VfQ0xFQVJDT0FUX1JPVUdITkVTU01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBjbGVhcmNvYXRSb3VnaG5lc3NNYXA7XG4jZW5kaWZcbiNpZmRlZiBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBjbGVhcmNvYXROb3JtYWxNYXA7XG5cdHVuaWZvcm0gdmVjMiBjbGVhcmNvYXROb3JtYWxTY2FsZTtcbiNlbmRpZiIsb3V0cHV0X2ZyYWdtZW50OiIjaWZkZWYgT1BBUVVFXG5kaWZmdXNlQ29sb3IuYSA9IDEuMDtcbiNlbmRpZlxuI2lmZGVmIFVTRV9UUkFOU01JU1NJT05cbmRpZmZ1c2VDb2xvci5hICo9IHRyYW5zbWlzc2lvbkFscGhhICsgMC4xO1xuI2VuZGlmXG5nbF9GcmFnQ29sb3IgPSB2ZWM0KCBvdXRnb2luZ0xpZ2h0LCBkaWZmdXNlQ29sb3IuYSApOyIscGFja2luZzoidmVjMyBwYWNrTm9ybWFsVG9SR0IoIGNvbnN0IGluIHZlYzMgbm9ybWFsICkge1xuXHRyZXR1cm4gbm9ybWFsaXplKCBub3JtYWwgKSAqIDAuNSArIDAuNTtcbn1cbnZlYzMgdW5wYWNrUkdCVG9Ob3JtYWwoIGNvbnN0IGluIHZlYzMgcmdiICkge1xuXHRyZXR1cm4gMi4wICogcmdiLnh5eiAtIDEuMDtcbn1cbmNvbnN0IGZsb2F0IFBhY2tVcHNjYWxlID0gMjU2LiAvIDI1NS47Y29uc3QgZmxvYXQgVW5wYWNrRG93bnNjYWxlID0gMjU1LiAvIDI1Ni47XG5jb25zdCB2ZWMzIFBhY2tGYWN0b3JzID0gdmVjMyggMjU2LiAqIDI1Ni4gKiAyNTYuLCAyNTYuICogMjU2LiwgMjU2LiApO1xuY29uc3QgdmVjNCBVbnBhY2tGYWN0b3JzID0gVW5wYWNrRG93bnNjYWxlIC8gdmVjNCggUGFja0ZhY3RvcnMsIDEuICk7XG5jb25zdCBmbG9hdCBTaGlmdFJpZ2h0OCA9IDEuIC8gMjU2LjtcbnZlYzQgcGFja0RlcHRoVG9SR0JBKCBjb25zdCBpbiBmbG9hdCB2ICkge1xuXHR2ZWM0IHIgPSB2ZWM0KCBmcmFjdCggdiAqIFBhY2tGYWN0b3JzICksIHYgKTtcblx0ci55encgLT0gci54eXogKiBTaGlmdFJpZ2h0ODtcdHJldHVybiByICogUGFja1Vwc2NhbGU7XG59XG5mbG9hdCB1bnBhY2tSR0JBVG9EZXB0aCggY29uc3QgaW4gdmVjNCB2ICkge1xuXHRyZXR1cm4gZG90KCB2LCBVbnBhY2tGYWN0b3JzICk7XG59XG52ZWM0IHBhY2sySGFsZlRvUkdCQSggdmVjMiB2ICkge1xuXHR2ZWM0IHIgPSB2ZWM0KCB2LngsIGZyYWN0KCB2LnggKiAyNTUuMCApLCB2LnksIGZyYWN0KCB2LnkgKiAyNTUuMCApICk7XG5cdHJldHVybiB2ZWM0KCByLnggLSByLnkgLyAyNTUuMCwgci55LCByLnogLSByLncgLyAyNTUuMCwgci53ICk7XG59XG52ZWMyIHVucGFja1JHQkFUbzJIYWxmKCB2ZWM0IHYgKSB7XG5cdHJldHVybiB2ZWMyKCB2LnggKyAoIHYueSAvIDI1NS4wICksIHYueiArICggdi53IC8gMjU1LjAgKSApO1xufVxuZmxvYXQgdmlld1pUb09ydGhvZ3JhcGhpY0RlcHRoKCBjb25zdCBpbiBmbG9hdCB2aWV3WiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xuXHRyZXR1cm4gKCB2aWV3WiArIG5lYXIgKSAvICggbmVhciAtIGZhciApO1xufVxuZmxvYXQgb3J0aG9ncmFwaGljRGVwdGhUb1ZpZXdaKCBjb25zdCBpbiBmbG9hdCBsaW5lYXJDbGlwWiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xuXHRyZXR1cm4gbGluZWFyQ2xpcFogKiAoIG5lYXIgLSBmYXIgKSAtIG5lYXI7XG59XG5mbG9hdCB2aWV3WlRvUGVyc3BlY3RpdmVEZXB0aCggY29uc3QgaW4gZmxvYXQgdmlld1osIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHtcblx0cmV0dXJuICggKCBuZWFyICsgdmlld1ogKSAqIGZhciApIC8gKCAoIGZhciAtIG5lYXIgKSAqIHZpZXdaICk7XG59XG5mbG9hdCBwZXJzcGVjdGl2ZURlcHRoVG9WaWV3WiggY29uc3QgaW4gZmxvYXQgaW52Q2xpcFosIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHtcblx0cmV0dXJuICggbmVhciAqIGZhciApIC8gKCAoIGZhciAtIG5lYXIgKSAqIGludkNsaXBaIC0gZmFyICk7XG59IixwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50OiIjaWZkZWYgUFJFTVVMVElQTElFRF9BTFBIQVxuXHRnbF9GcmFnQ29sb3IucmdiICo9IGdsX0ZyYWdDb2xvci5hO1xuI2VuZGlmIixwcm9qZWN0X3ZlcnRleDoidmVjNCBtdlBvc2l0aW9uID0gdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xuI2lmZGVmIFVTRV9JTlNUQU5DSU5HXG5cdG12UG9zaXRpb24gPSBpbnN0YW5jZU1hdHJpeCAqIG12UG9zaXRpb247XG4jZW5kaWZcbm12UG9zaXRpb24gPSBtb2RlbFZpZXdNYXRyaXggKiBtdlBvc2l0aW9uO1xuZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjsiLGRpdGhlcmluZ19mcmFnbWVudDoiI2lmZGVmIERJVEhFUklOR1xuXHRnbF9GcmFnQ29sb3IucmdiID0gZGl0aGVyaW5nKCBnbF9GcmFnQ29sb3IucmdiICk7XG4jZW5kaWYiLGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50OiIjaWZkZWYgRElUSEVSSU5HXG5cdHZlYzMgZGl0aGVyaW5nKCB2ZWMzIGNvbG9yICkge1xuXHRcdGZsb2F0IGdyaWRfcG9zaXRpb24gPSByYW5kKCBnbF9GcmFnQ29vcmQueHkgKTtcblx0XHR2ZWMzIGRpdGhlcl9zaGlmdF9SR0IgPSB2ZWMzKCAwLjI1IC8gMjU1LjAsIC0wLjI1IC8gMjU1LjAsIDAuMjUgLyAyNTUuMCApO1xuXHRcdGRpdGhlcl9zaGlmdF9SR0IgPSBtaXgoIDIuMCAqIGRpdGhlcl9zaGlmdF9SR0IsIC0yLjAgKiBkaXRoZXJfc2hpZnRfUkdCLCBncmlkX3Bvc2l0aW9uICk7XG5cdFx0cmV0dXJuIGNvbG9yICsgZGl0aGVyX3NoaWZ0X1JHQjtcblx0fVxuI2VuZGlmIixyb3VnaG5lc3NtYXBfZnJhZ21lbnQ6ImZsb2F0IHJvdWdobmVzc0ZhY3RvciA9IHJvdWdobmVzcztcbiNpZmRlZiBVU0VfUk9VR0hORVNTTUFQXG5cdHZlYzQgdGV4ZWxSb3VnaG5lc3MgPSB0ZXh0dXJlMkQoIHJvdWdobmVzc01hcCwgdlV2ICk7XG5cdHJvdWdobmVzc0ZhY3RvciAqPSB0ZXhlbFJvdWdobmVzcy5nO1xuI2VuZGlmIixyb3VnaG5lc3NtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgcm91Z2huZXNzTWFwO1xuI2VuZGlmIixzaGFkb3dtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9TSEFET1dNQVBcblx0I2lmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDBcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCBkaXJlY3Rpb25hbFNoYWRvd01hcFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcblx0XHRzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodFNoYWRvdyB7XG5cdFx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93Tm9ybWFsQmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHRcdHZlYzIgc2hhZG93TWFwU2l6ZTtcblx0XHR9O1xuXHRcdHVuaWZvcm0gRGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDBcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCBzcG90U2hhZG93TWFwWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZTcG90U2hhZG93Q29vcmRbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTtcblx0XHRzdHJ1Y3QgU3BvdExpZ2h0U2hhZG93IHtcblx0XHRcdGZsb2F0IHNoYWRvd0JpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dOb3JtYWxCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdFx0dmVjMiBzaGFkb3dNYXBTaXplO1xuXHRcdH07XG5cdFx0dW5pZm9ybSBTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0U2hhZG93c1sgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdO1xuXHQjZW5kaWZcblx0I2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIHBvaW50U2hhZG93TWFwWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHZhcnlpbmcgdmVjNCB2UG9pbnRTaGFkb3dDb29yZFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTtcblx0XHRzdHJ1Y3QgUG9pbnRMaWdodFNoYWRvdyB7XG5cdFx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93Tm9ybWFsQmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHRcdHZlYzIgc2hhZG93TWFwU2l6ZTtcblx0XHRcdGZsb2F0IHNoYWRvd0NhbWVyYU5lYXI7XG5cdFx0XHRmbG9hdCBzaGFkb3dDYW1lcmFGYXI7XG5cdFx0fTtcblx0XHR1bmlmb3JtIFBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodFNoYWRvd3NbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07XG5cdCNlbmRpZlxuXHRmbG9hdCB0ZXh0dXJlMkRDb21wYXJlKCBzYW1wbGVyMkQgZGVwdGhzLCB2ZWMyIHV2LCBmbG9hdCBjb21wYXJlICkge1xuXHRcdHJldHVybiBzdGVwKCBjb21wYXJlLCB1bnBhY2tSR0JBVG9EZXB0aCggdGV4dHVyZTJEKCBkZXB0aHMsIHV2ICkgKSApO1xuXHR9XG5cdHZlYzIgdGV4dHVyZTJERGlzdHJpYnV0aW9uKCBzYW1wbGVyMkQgc2hhZG93LCB2ZWMyIHV2ICkge1xuXHRcdHJldHVybiB1bnBhY2tSR0JBVG8ySGFsZiggdGV4dHVyZTJEKCBzaGFkb3csIHV2ICkgKTtcblx0fVxuXHRmbG9hdCBWU01TaGFkb3cgKHNhbXBsZXIyRCBzaGFkb3csIHZlYzIgdXYsIGZsb2F0IGNvbXBhcmUgKXtcblx0XHRmbG9hdCBvY2NsdXNpb24gPSAxLjA7XG5cdFx0dmVjMiBkaXN0cmlidXRpb24gPSB0ZXh0dXJlMkREaXN0cmlidXRpb24oIHNoYWRvdywgdXYgKTtcblx0XHRmbG9hdCBoYXJkX3NoYWRvdyA9IHN0ZXAoIGNvbXBhcmUgLCBkaXN0cmlidXRpb24ueCApO1xuXHRcdGlmIChoYXJkX3NoYWRvdyAhPSAxLjAgKSB7XG5cdFx0XHRmbG9hdCBkaXN0YW5jZSA9IGNvbXBhcmUgLSBkaXN0cmlidXRpb24ueCA7XG5cdFx0XHRmbG9hdCB2YXJpYW5jZSA9IG1heCggMC4wMDAwMCwgZGlzdHJpYnV0aW9uLnkgKiBkaXN0cmlidXRpb24ueSApO1xuXHRcdFx0ZmxvYXQgc29mdG5lc3NfcHJvYmFiaWxpdHkgPSB2YXJpYW5jZSAvICh2YXJpYW5jZSArIGRpc3RhbmNlICogZGlzdGFuY2UgKTtcdFx0XHRzb2Z0bmVzc19wcm9iYWJpbGl0eSA9IGNsYW1wKCAoIHNvZnRuZXNzX3Byb2JhYmlsaXR5IC0gMC4zICkgLyAoIDAuOTUgLSAwLjMgKSwgMC4wLCAxLjAgKTtcdFx0XHRvY2NsdXNpb24gPSBjbGFtcCggbWF4KCBoYXJkX3NoYWRvdywgc29mdG5lc3NfcHJvYmFiaWxpdHkgKSwgMC4wLCAxLjAgKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9jY2x1c2lvbjtcblx0fVxuXHRmbG9hdCBnZXRTaGFkb3coIHNhbXBsZXIyRCBzaGFkb3dNYXAsIHZlYzIgc2hhZG93TWFwU2l6ZSwgZmxvYXQgc2hhZG93QmlhcywgZmxvYXQgc2hhZG93UmFkaXVzLCB2ZWM0IHNoYWRvd0Nvb3JkICkge1xuXHRcdGZsb2F0IHNoYWRvdyA9IDEuMDtcblx0XHRzaGFkb3dDb29yZC54eXogLz0gc2hhZG93Q29vcmQudztcblx0XHRzaGFkb3dDb29yZC56ICs9IHNoYWRvd0JpYXM7XG5cdFx0YnZlYzQgaW5GcnVzdHVtVmVjID0gYnZlYzQgKCBzaGFkb3dDb29yZC54ID49IDAuMCwgc2hhZG93Q29vcmQueCA8PSAxLjAsIHNoYWRvd0Nvb3JkLnkgPj0gMC4wLCBzaGFkb3dDb29yZC55IDw9IDEuMCApO1xuXHRcdGJvb2wgaW5GcnVzdHVtID0gYWxsKCBpbkZydXN0dW1WZWMgKTtcblx0XHRidmVjMiBmcnVzdHVtVGVzdFZlYyA9IGJ2ZWMyKCBpbkZydXN0dW0sIHNoYWRvd0Nvb3JkLnogPD0gMS4wICk7XG5cdFx0Ym9vbCBmcnVzdHVtVGVzdCA9IGFsbCggZnJ1c3R1bVRlc3RWZWMgKTtcblx0XHRpZiAoIGZydXN0dW1UZXN0ICkge1xuXHRcdCNpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0YgKVxuXHRcdFx0dmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvIHNoYWRvd01hcFNpemU7XG5cdFx0XHRmbG9hdCBkeDAgPSAtIHRleGVsU2l6ZS54ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0ZmxvYXQgZHkwID0gLSB0ZXhlbFNpemUueSAqIHNoYWRvd1JhZGl1cztcblx0XHRcdGZsb2F0IGR4MSA9ICsgdGV4ZWxTaXplLnggKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRmbG9hdCBkeTEgPSArIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0ZmxvYXQgZHgyID0gZHgwIC8gMi4wO1xuXHRcdFx0ZmxvYXQgZHkyID0gZHkwIC8gMi4wO1xuXHRcdFx0ZmxvYXQgZHgzID0gZHgxIC8gMi4wO1xuXHRcdFx0ZmxvYXQgZHkzID0gZHkxIC8gMi4wO1xuXHRcdFx0c2hhZG93ID0gKFxuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCBkeTIgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkyICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDMsIGR5MiApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MiwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDMsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MiwgZHkzICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MyApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgzLCBkeTMgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MCwgZHkxICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MSApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCBkeTEgKSwgc2hhZG93Q29vcmQueiApXG5cdFx0XHQpICogKCAxLjAgLyAxNy4wICk7XG5cdFx0I2VsaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQgKVxuXHRcdFx0dmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvIHNoYWRvd01hcFNpemU7XG5cdFx0XHRmbG9hdCBkeCA9IHRleGVsU2l6ZS54O1xuXHRcdFx0ZmxvYXQgZHkgPSB0ZXhlbFNpemUueTtcblx0XHRcdHZlYzIgdXYgPSBzaGFkb3dDb29yZC54eTtcblx0XHRcdHZlYzIgZiA9IGZyYWN0KCB1diAqIHNoYWRvd01hcFNpemUgKyAwLjUgKTtcblx0XHRcdHV2IC09IGYgKiB0ZXhlbFNpemU7XG5cdFx0XHRzaGFkb3cgPSAoXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYsIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCBkeCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAwLjAsIGR5ICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB0ZXhlbFNpemUsIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSwgXG5cdFx0XHRcdFx0IHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSxcblx0XHRcdFx0XHQgZi54ICkgK1xuXHRcdFx0XHRtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwgXG5cdFx0XHRcdFx0IHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgZHkgKSwgc2hhZG93Q29vcmQueiApLFxuXHRcdFx0XHRcdCBmLnggKSArXG5cdFx0XHRcdG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSwgXG5cdFx0XHRcdFx0IHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAwLjAsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSxcblx0XHRcdFx0XHQgZi55ICkgK1xuXHRcdFx0XHRtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCBkeCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSwgXG5cdFx0XHRcdFx0IHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCBkeCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLFxuXHRcdFx0XHRcdCBmLnkgKSArXG5cdFx0XHRcdG1peCggbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCAtZHkgKSwgc2hhZG93Q29vcmQueiApLCBcblx0XHRcdFx0XHRcdCAgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCAtZHkgKSwgc2hhZG93Q29vcmQueiApLFxuXHRcdFx0XHRcdFx0ICBmLnggKSxcblx0XHRcdFx0XHQgbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksIFxuXHRcdFx0XHRcdFx0ICB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSxcblx0XHRcdFx0XHRcdCAgZi54ICksXG5cdFx0XHRcdFx0IGYueSApXG5cdFx0XHQpICogKCAxLjAgLyA5LjAgKTtcblx0XHQjZWxpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9WU00gKVxuXHRcdFx0c2hhZG93ID0gVlNNU2hhZG93KCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5LCBzaGFkb3dDb29yZC56ICk7XG5cdFx0I2Vsc2Vcblx0XHRcdHNoYWRvdyA9IHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKTtcblx0XHQjZW5kaWZcblx0XHR9XG5cdFx0cmV0dXJuIHNoYWRvdztcblx0fVxuXHR2ZWMyIGN1YmVUb1VWKCB2ZWMzIHYsIGZsb2F0IHRleGVsU2l6ZVkgKSB7XG5cdFx0dmVjMyBhYnNWID0gYWJzKCB2ICk7XG5cdFx0ZmxvYXQgc2NhbGVUb0N1YmUgPSAxLjAgLyBtYXgoIGFic1YueCwgbWF4KCBhYnNWLnksIGFic1YueiApICk7XG5cdFx0YWJzViAqPSBzY2FsZVRvQ3ViZTtcblx0XHR2ICo9IHNjYWxlVG9DdWJlICogKCAxLjAgLSAyLjAgKiB0ZXhlbFNpemVZICk7XG5cdFx0dmVjMiBwbGFuYXIgPSB2Lnh5O1xuXHRcdGZsb2F0IGFsbW9zdEFUZXhlbCA9IDEuNSAqIHRleGVsU2l6ZVk7XG5cdFx0ZmxvYXQgYWxtb3N0T25lID0gMS4wIC0gYWxtb3N0QVRleGVsO1xuXHRcdGlmICggYWJzVi56ID49IGFsbW9zdE9uZSApIHtcblx0XHRcdGlmICggdi56ID4gMC4wIClcblx0XHRcdFx0cGxhbmFyLnggPSA0LjAgLSB2Lng7XG5cdFx0fSBlbHNlIGlmICggYWJzVi54ID49IGFsbW9zdE9uZSApIHtcblx0XHRcdGZsb2F0IHNpZ25YID0gc2lnbiggdi54ICk7XG5cdFx0XHRwbGFuYXIueCA9IHYueiAqIHNpZ25YICsgMi4wICogc2lnblg7XG5cdFx0fSBlbHNlIGlmICggYWJzVi55ID49IGFsbW9zdE9uZSApIHtcblx0XHRcdGZsb2F0IHNpZ25ZID0gc2lnbiggdi55ICk7XG5cdFx0XHRwbGFuYXIueCA9IHYueCArIDIuMCAqIHNpZ25ZICsgMi4wO1xuXHRcdFx0cGxhbmFyLnkgPSB2LnogKiBzaWduWSAtIDIuMDtcblx0XHR9XG5cdFx0cmV0dXJuIHZlYzIoIDAuMTI1LCAwLjI1ICkgKiBwbGFuYXIgKyB2ZWMyKCAwLjM3NSwgMC43NSApO1xuXHR9XG5cdGZsb2F0IGdldFBvaW50U2hhZG93KCBzYW1wbGVyMkQgc2hhZG93TWFwLCB2ZWMyIHNoYWRvd01hcFNpemUsIGZsb2F0IHNoYWRvd0JpYXMsIGZsb2F0IHNoYWRvd1JhZGl1cywgdmVjNCBzaGFkb3dDb29yZCwgZmxvYXQgc2hhZG93Q2FtZXJhTmVhciwgZmxvYXQgc2hhZG93Q2FtZXJhRmFyICkge1xuXHRcdHZlYzIgdGV4ZWxTaXplID0gdmVjMiggMS4wICkgLyAoIHNoYWRvd01hcFNpemUgKiB2ZWMyKCA0LjAsIDIuMCApICk7XG5cdFx0dmVjMyBsaWdodFRvUG9zaXRpb24gPSBzaGFkb3dDb29yZC54eXo7XG5cdFx0ZmxvYXQgZHAgPSAoIGxlbmd0aCggbGlnaHRUb1Bvc2l0aW9uICkgLSBzaGFkb3dDYW1lcmFOZWFyICkgLyAoIHNoYWRvd0NhbWVyYUZhciAtIHNoYWRvd0NhbWVyYU5lYXIgKTtcdFx0ZHAgKz0gc2hhZG93Qmlhcztcblx0XHR2ZWMzIGJkM0QgPSBub3JtYWxpemUoIGxpZ2h0VG9Qb3NpdGlvbiApO1xuXHRcdCNpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0YgKSB8fCBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCApIHx8IGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1ZTTSApXG5cdFx0XHR2ZWMyIG9mZnNldCA9IHZlYzIoIC0gMSwgMSApICogc2hhZG93UmFkaXVzICogdGV4ZWxTaXplLnk7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh5eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXl5LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eXgsIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl5eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QsIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh4eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXh5LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eHgsIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl4eCwgdGV4ZWxTaXplLnkgKSwgZHAgKVxuXHRcdFx0KSAqICggMS4wIC8gOS4wICk7XG5cdFx0I2Vsc2Vcblx0XHRcdHJldHVybiB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNELCB0ZXhlbFNpemUueSApLCBkcCApO1xuXHRcdCNlbmRpZlxuXHR9XG4jZW5kaWYiLHNoYWRvd21hcF9wYXJzX3ZlcnRleDoiI2lmZGVmIFVTRV9TSEFET1dNQVBcblx0I2lmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDBcblx0XHR1bmlmb3JtIG1hdDQgZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHZhcnlpbmcgdmVjNCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07XG5cdFx0c3RydWN0IERpcmVjdGlvbmFsTGlnaHRTaGFkb3cge1xuXHRcdFx0ZmxvYXQgc2hhZG93Qmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd05vcm1hbEJpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dSYWRpdXM7XG5cdFx0XHR2ZWMyIHNoYWRvd01hcFNpemU7XG5cdFx0fTtcblx0XHR1bmlmb3JtIERpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdO1xuXHQjZW5kaWZcblx0I2lmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFx0dW5pZm9ybSBtYXQ0IHNwb3RTaGFkb3dNYXRyaXhbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdlNwb3RTaGFkb3dDb29yZFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHN0cnVjdCBTcG90TGlnaHRTaGFkb3cge1xuXHRcdFx0ZmxvYXQgc2hhZG93Qmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd05vcm1hbEJpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dSYWRpdXM7XG5cdFx0XHR2ZWMyIHNoYWRvd01hcFNpemU7XG5cdFx0fTtcblx0XHR1bmlmb3JtIFNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHRTaGFkb3dzWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFx0dW5pZm9ybSBtYXQ0IHBvaW50U2hhZG93TWF0cml4WyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHZhcnlpbmcgdmVjNCB2UG9pbnRTaGFkb3dDb29yZFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTtcblx0XHRzdHJ1Y3QgUG9pbnRMaWdodFNoYWRvdyB7XG5cdFx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93Tm9ybWFsQmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHRcdHZlYzIgc2hhZG93TWFwU2l6ZTtcblx0XHRcdGZsb2F0IHNoYWRvd0NhbWVyYU5lYXI7XG5cdFx0XHRmbG9hdCBzaGFkb3dDYW1lcmFGYXI7XG5cdFx0fTtcblx0XHR1bmlmb3JtIFBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodFNoYWRvd3NbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07XG5cdCNlbmRpZlxuI2VuZGlmIixzaGFkb3dtYXBfdmVydGV4OiIjaWZkZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMCB8fCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMCB8fCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDBcblx0XHR2ZWMzIHNoYWRvd1dvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggdHJhbnNmb3JtZWROb3JtYWwsIHZpZXdNYXRyaXggKTtcblx0XHR2ZWM0IHNoYWRvd1dvcmxkUG9zaXRpb247XG5cdCNlbmRpZlxuXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRfU0hBRE9XUzsgaSArKyApIHtcblx0XHRzaGFkb3dXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbiArIHZlYzQoIHNoYWRvd1dvcmxkTm9ybWFsICogZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIGkgXS5zaGFkb3dOb3JtYWxCaWFzLCAwICk7XG5cdFx0dkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIGkgXSA9IGRpcmVjdGlvbmFsU2hhZG93TWF0cml4WyBpIF0gKiBzaGFkb3dXb3JsZFBvc2l0aW9uO1xuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG5cdCNlbmRpZlxuXHQjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTOyBpICsrICkge1xuXHRcdHNoYWRvd1dvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uICsgdmVjNCggc2hhZG93V29ybGROb3JtYWwgKiBzcG90TGlnaHRTaGFkb3dzWyBpIF0uc2hhZG93Tm9ybWFsQmlhcywgMCApO1xuXHRcdHZTcG90U2hhZG93Q29vcmRbIGkgXSA9IHNwb3RTaGFkb3dNYXRyaXhbIGkgXSAqIHNoYWRvd1dvcmxkUG9zaXRpb247XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG5cdCNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUzsgaSArKyApIHtcblx0XHRzaGFkb3dXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbiArIHZlYzQoIHNoYWRvd1dvcmxkTm9ybWFsICogcG9pbnRMaWdodFNoYWRvd3NbIGkgXS5zaGFkb3dOb3JtYWxCaWFzLCAwICk7XG5cdFx0dlBvaW50U2hhZG93Q29vcmRbIGkgXSA9IHBvaW50U2hhZG93TWF0cml4WyBpIF0gKiBzaGFkb3dXb3JsZFBvc2l0aW9uO1xuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG5cdCNlbmRpZlxuI2VuZGlmIixzaGFkb3dtYXNrX3BhcnNfZnJhZ21lbnQ6ImZsb2F0IGdldFNoYWRvd01hc2soKSB7XG5cdGZsb2F0IHNoYWRvdyA9IDEuMDtcblx0I2lmZGVmIFVTRV9TSEFET1dNQVBcblx0I2lmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDBcblx0RGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0O1xuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRfU0hBRE9XUzsgaSArKyApIHtcblx0XHRkaXJlY3Rpb25hbExpZ2h0ID0gZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIGkgXTtcblx0XHRzaGFkb3cgKj0gcmVjZWl2ZVNoYWRvdyA/IGdldFNoYWRvdyggZGlyZWN0aW9uYWxTaGFkb3dNYXBbIGkgXSwgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dNYXBTaXplLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd0JpYXMsIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93UmFkaXVzLCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG5cdCNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMFxuXHRTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0O1xuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7XG5cdFx0c3BvdExpZ2h0ID0gc3BvdExpZ2h0U2hhZG93c1sgaSBdO1xuXHRcdHNoYWRvdyAqPSByZWNlaXZlU2hhZG93ID8gZ2V0U2hhZG93KCBzcG90U2hhZG93TWFwWyBpIF0sIHNwb3RMaWdodC5zaGFkb3dNYXBTaXplLCBzcG90TGlnaHQuc2hhZG93Qmlhcywgc3BvdExpZ2h0LnNoYWRvd1JhZGl1cywgdlNwb3RTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG5cdCNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDBcblx0UG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0O1xuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTOyBpICsrICkge1xuXHRcdHBvaW50TGlnaHQgPSBwb2ludExpZ2h0U2hhZG93c1sgaSBdO1xuXHRcdHNoYWRvdyAqPSByZWNlaXZlU2hhZG93ID8gZ2V0UG9pbnRTaGFkb3coIHBvaW50U2hhZG93TWFwWyBpIF0sIHBvaW50TGlnaHQuc2hhZG93TWFwU2l6ZSwgcG9pbnRMaWdodC5zaGFkb3dCaWFzLCBwb2ludExpZ2h0LnNoYWRvd1JhZGl1cywgdlBvaW50U2hhZG93Q29vcmRbIGkgXSwgcG9pbnRMaWdodC5zaGFkb3dDYW1lcmFOZWFyLCBwb2ludExpZ2h0LnNoYWRvd0NhbWVyYUZhciApIDogMS4wO1xuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG5cdCNlbmRpZlxuXHQjZW5kaWZcblx0cmV0dXJuIHNoYWRvdztcbn0iLHNraW5iYXNlX3ZlcnRleDoiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHRtYXQ0IGJvbmVNYXRYID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnggKTtcblx0bWF0NCBib25lTWF0WSA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC55ICk7XG5cdG1hdDQgYm9uZU1hdFogPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueiApO1xuXHRtYXQ0IGJvbmVNYXRXID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LncgKTtcbiNlbmRpZiIsc2tpbm5pbmdfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfU0tJTk5JTkdcblx0dW5pZm9ybSBtYXQ0IGJpbmRNYXRyaXg7XG5cdHVuaWZvcm0gbWF0NCBiaW5kTWF0cml4SW52ZXJzZTtcblx0I2lmZGVmIEJPTkVfVEVYVFVSRVxuXHRcdHVuaWZvcm0gaGlnaHAgc2FtcGxlcjJEIGJvbmVUZXh0dXJlO1xuXHRcdHVuaWZvcm0gaW50IGJvbmVUZXh0dXJlU2l6ZTtcblx0XHRtYXQ0IGdldEJvbmVNYXRyaXgoIGNvbnN0IGluIGZsb2F0IGkgKSB7XG5cdFx0XHRmbG9hdCBqID0gaSAqIDQuMDtcblx0XHRcdGZsb2F0IHggPSBtb2QoIGosIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKSApO1xuXHRcdFx0ZmxvYXQgeSA9IGZsb29yKCBqIC8gZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApICk7XG5cdFx0XHRmbG9hdCBkeCA9IDEuMCAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKTtcblx0XHRcdGZsb2F0IGR5ID0gMS4wIC8gZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApO1xuXHRcdFx0eSA9IGR5ICogKCB5ICsgMC41ICk7XG5cdFx0XHR2ZWM0IHYxID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAwLjUgKSwgeSApICk7XG5cdFx0XHR2ZWM0IHYyID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAxLjUgKSwgeSApICk7XG5cdFx0XHR2ZWM0IHYzID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAyLjUgKSwgeSApICk7XG5cdFx0XHR2ZWM0IHY0ID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAzLjUgKSwgeSApICk7XG5cdFx0XHRtYXQ0IGJvbmUgPSBtYXQ0KCB2MSwgdjIsIHYzLCB2NCApO1xuXHRcdFx0cmV0dXJuIGJvbmU7XG5cdFx0fVxuXHQjZWxzZVxuXHRcdHVuaWZvcm0gbWF0NCBib25lTWF0cmljZXNbIE1BWF9CT05FUyBdO1xuXHRcdG1hdDQgZ2V0Qm9uZU1hdHJpeCggY29uc3QgaW4gZmxvYXQgaSApIHtcblx0XHRcdG1hdDQgYm9uZSA9IGJvbmVNYXRyaWNlc1sgaW50KGkpIF07XG5cdFx0XHRyZXR1cm4gYm9uZTtcblx0XHR9XG5cdCNlbmRpZlxuI2VuZGlmIixza2lubmluZ192ZXJ0ZXg6IiNpZmRlZiBVU0VfU0tJTk5JTkdcblx0dmVjNCBza2luVmVydGV4ID0gYmluZE1hdHJpeCAqIHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTtcblx0dmVjNCBza2lubmVkID0gdmVjNCggMC4wICk7XG5cdHNraW5uZWQgKz0gYm9uZU1hdFggKiBza2luVmVydGV4ICogc2tpbldlaWdodC54O1xuXHRza2lubmVkICs9IGJvbmVNYXRZICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQueTtcblx0c2tpbm5lZCArPSBib25lTWF0WiAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lno7XG5cdHNraW5uZWQgKz0gYm9uZU1hdFcgKiBza2luVmVydGV4ICogc2tpbldlaWdodC53O1xuXHR0cmFuc2Zvcm1lZCA9ICggYmluZE1hdHJpeEludmVyc2UgKiBza2lubmVkICkueHl6O1xuI2VuZGlmIixza2lubm9ybWFsX3ZlcnRleDoiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHRtYXQ0IHNraW5NYXRyaXggPSBtYXQ0KCAwLjAgKTtcblx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnggKiBib25lTWF0WDtcblx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnkgKiBib25lTWF0WTtcblx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnogKiBib25lTWF0Wjtcblx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LncgKiBib25lTWF0Vztcblx0c2tpbk1hdHJpeCA9IGJpbmRNYXRyaXhJbnZlcnNlICogc2tpbk1hdHJpeCAqIGJpbmRNYXRyaXg7XG5cdG9iamVjdE5vcm1hbCA9IHZlYzQoIHNraW5NYXRyaXggKiB2ZWM0KCBvYmplY3ROb3JtYWwsIDAuMCApICkueHl6O1xuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHRvYmplY3RUYW5nZW50ID0gdmVjNCggc2tpbk1hdHJpeCAqIHZlYzQoIG9iamVjdFRhbmdlbnQsIDAuMCApICkueHl6O1xuXHQjZW5kaWZcbiNlbmRpZiIsc3BlY3VsYXJtYXBfZnJhZ21lbnQ6ImZsb2F0IHNwZWN1bGFyU3RyZW5ndGg7XG4jaWZkZWYgVVNFX1NQRUNVTEFSTUFQXG5cdHZlYzQgdGV4ZWxTcGVjdWxhciA9IHRleHR1cmUyRCggc3BlY3VsYXJNYXAsIHZVdiApO1xuXHRzcGVjdWxhclN0cmVuZ3RoID0gdGV4ZWxTcGVjdWxhci5yO1xuI2Vsc2Vcblx0c3BlY3VsYXJTdHJlbmd0aCA9IDEuMDtcbiNlbmRpZiIsc3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9TUEVDVUxBUk1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhck1hcDtcbiNlbmRpZiIsdG9uZW1hcHBpbmdfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBUT05FX01BUFBJTkcgKVxuXHRnbF9GcmFnQ29sb3IucmdiID0gdG9uZU1hcHBpbmcoIGdsX0ZyYWdDb2xvci5yZ2IgKTtcbiNlbmRpZiIsdG9uZW1hcHBpbmdfcGFyc19mcmFnbWVudDoiI2lmbmRlZiBzYXR1cmF0ZVxuI2RlZmluZSBzYXR1cmF0ZSggYSApIGNsYW1wKCBhLCAwLjAsIDEuMCApXG4jZW5kaWZcbnVuaWZvcm0gZmxvYXQgdG9uZU1hcHBpbmdFeHBvc3VyZTtcbnZlYzMgTGluZWFyVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7XG5cdHJldHVybiB0b25lTWFwcGluZ0V4cG9zdXJlICogY29sb3I7XG59XG52ZWMzIFJlaW5oYXJkVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7XG5cdGNvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmU7XG5cdHJldHVybiBzYXR1cmF0ZSggY29sb3IgLyAoIHZlYzMoIDEuMCApICsgY29sb3IgKSApO1xufVxudmVjMyBPcHRpbWl6ZWRDaW5lb25Ub25lTWFwcGluZyggdmVjMyBjb2xvciApIHtcblx0Y29sb3IgKj0gdG9uZU1hcHBpbmdFeHBvc3VyZTtcblx0Y29sb3IgPSBtYXgoIHZlYzMoIDAuMCApLCBjb2xvciAtIDAuMDA0ICk7XG5cdHJldHVybiBwb3coICggY29sb3IgKiAoIDYuMiAqIGNvbG9yICsgMC41ICkgKSAvICggY29sb3IgKiAoIDYuMiAqIGNvbG9yICsgMS43ICkgKyAwLjA2ICksIHZlYzMoIDIuMiApICk7XG59XG52ZWMzIFJSVEFuZE9EVEZpdCggdmVjMyB2ICkge1xuXHR2ZWMzIGEgPSB2ICogKCB2ICsgMC4wMjQ1Nzg2ICkgLSAwLjAwMDA5MDUzNztcblx0dmVjMyBiID0gdiAqICggMC45ODM3MjkgKiB2ICsgMC40MzI5NTEwICkgKyAwLjIzODA4MTtcblx0cmV0dXJuIGEgLyBiO1xufVxudmVjMyBBQ0VTRmlsbWljVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7XG5cdGNvbnN0IG1hdDMgQUNFU0lucHV0TWF0ID0gbWF0Myhcblx0XHR2ZWMzKCAwLjU5NzE5LCAwLjA3NjAwLCAwLjAyODQwICksXHRcdHZlYzMoIDAuMzU0NTgsIDAuOTA4MzQsIDAuMTMzODMgKSxcblx0XHR2ZWMzKCAwLjA0ODIzLCAwLjAxNTY2LCAwLjgzNzc3IClcblx0KTtcblx0Y29uc3QgbWF0MyBBQ0VTT3V0cHV0TWF0ID0gbWF0Myhcblx0XHR2ZWMzKCAgMS42MDQ3NSwgLTAuMTAyMDgsIC0wLjAwMzI3ICksXHRcdHZlYzMoIC0wLjUzMTA4LCAgMS4xMDgxMywgLTAuMDcyNzYgKSxcblx0XHR2ZWMzKCAtMC4wNzM2NywgLTAuMDA2MDUsICAxLjA3NjAyIClcblx0KTtcblx0Y29sb3IgKj0gdG9uZU1hcHBpbmdFeHBvc3VyZSAvIDAuNjtcblx0Y29sb3IgPSBBQ0VTSW5wdXRNYXQgKiBjb2xvcjtcblx0Y29sb3IgPSBSUlRBbmRPRFRGaXQoIGNvbG9yICk7XG5cdGNvbG9yID0gQUNFU091dHB1dE1hdCAqIGNvbG9yO1xuXHRyZXR1cm4gc2F0dXJhdGUoIGNvbG9yICk7XG59XG52ZWMzIEN1c3RvbVRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkgeyByZXR1cm4gY29sb3I7IH0iLHRyYW5zbWlzc2lvbl9mcmFnbWVudDoiI2lmZGVmIFVTRV9UUkFOU01JU1NJT05cblx0ZmxvYXQgdHJhbnNtaXNzaW9uQWxwaGEgPSAxLjA7XG5cdGZsb2F0IHRyYW5zbWlzc2lvbkZhY3RvciA9IHRyYW5zbWlzc2lvbjtcblx0ZmxvYXQgdGhpY2tuZXNzRmFjdG9yID0gdGhpY2tuZXNzO1xuXHQjaWZkZWYgVVNFX1RSQU5TTUlTU0lPTk1BUFxuXHRcdHRyYW5zbWlzc2lvbkZhY3RvciAqPSB0ZXh0dXJlMkQoIHRyYW5zbWlzc2lvbk1hcCwgdlV2ICkucjtcblx0I2VuZGlmXG5cdCNpZmRlZiBVU0VfVEhJQ0tORVNTTUFQXG5cdFx0dGhpY2tuZXNzRmFjdG9yICo9IHRleHR1cmUyRCggdGhpY2tuZXNzTWFwLCB2VXYgKS5nO1xuXHQjZW5kaWZcblx0dmVjMyBwb3MgPSB2V29ybGRQb3NpdGlvbjtcblx0dmVjMyB2ID0gbm9ybWFsaXplKCBjYW1lcmFQb3NpdGlvbiAtIHBvcyApO1xuXHR2ZWMzIG4gPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTtcblx0dmVjNCB0cmFuc21pc3Npb24gPSBnZXRJQkxWb2x1bWVSZWZyYWN0aW9uKFxuXHRcdG4sIHYsIHJvdWdobmVzc0ZhY3RvciwgbWF0ZXJpYWwuZGlmZnVzZUNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCxcblx0XHRwb3MsIG1vZGVsTWF0cml4LCB2aWV3TWF0cml4LCBwcm9qZWN0aW9uTWF0cml4LCBpb3IsIHRoaWNrbmVzc0ZhY3Rvcixcblx0XHRhdHRlbnVhdGlvbkNvbG9yLCBhdHRlbnVhdGlvbkRpc3RhbmNlICk7XG5cdHRvdGFsRGlmZnVzZSA9IG1peCggdG90YWxEaWZmdXNlLCB0cmFuc21pc3Npb24ucmdiLCB0cmFuc21pc3Npb25GYWN0b3IgKTtcblx0dHJhbnNtaXNzaW9uQWxwaGEgPSBtaXgoIHRyYW5zbWlzc2lvbkFscGhhLCB0cmFuc21pc3Npb24uYSwgdHJhbnNtaXNzaW9uRmFjdG9yICk7XG4jZW5kaWYiLHRyYW5zbWlzc2lvbl9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1RSQU5TTUlTU0lPTlxuXHR1bmlmb3JtIGZsb2F0IHRyYW5zbWlzc2lvbjtcblx0dW5pZm9ybSBmbG9hdCB0aGlja25lc3M7XG5cdHVuaWZvcm0gZmxvYXQgYXR0ZW51YXRpb25EaXN0YW5jZTtcblx0dW5pZm9ybSB2ZWMzIGF0dGVudWF0aW9uQ29sb3I7XG5cdCNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OTUFQXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgdHJhbnNtaXNzaW9uTWFwO1xuXHQjZW5kaWZcblx0I2lmZGVmIFVTRV9USElDS05FU1NNQVBcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCB0aGlja25lc3NNYXA7XG5cdCNlbmRpZlxuXHR1bmlmb3JtIHZlYzIgdHJhbnNtaXNzaW9uU2FtcGxlclNpemU7XG5cdHVuaWZvcm0gc2FtcGxlcjJEIHRyYW5zbWlzc2lvblNhbXBsZXJNYXA7XG5cdHVuaWZvcm0gbWF0NCBtb2RlbE1hdHJpeDtcblx0dW5pZm9ybSBtYXQ0IHByb2plY3Rpb25NYXRyaXg7XG5cdHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcblx0dmVjMyBnZXRWb2x1bWVUcmFuc21pc3Npb25SYXkoIGNvbnN0IGluIHZlYzMgbiwgY29uc3QgaW4gdmVjMyB2LCBjb25zdCBpbiBmbG9hdCB0aGlja25lc3MsIGNvbnN0IGluIGZsb2F0IGlvciwgY29uc3QgaW4gbWF0NCBtb2RlbE1hdHJpeCApIHtcblx0XHR2ZWMzIHJlZnJhY3Rpb25WZWN0b3IgPSByZWZyYWN0KCAtIHYsIG5vcm1hbGl6ZSggbiApLCAxLjAgLyBpb3IgKTtcblx0XHR2ZWMzIG1vZGVsU2NhbGU7XG5cdFx0bW9kZWxTY2FsZS54ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMCBdLnh5eiApICk7XG5cdFx0bW9kZWxTY2FsZS55ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMSBdLnh5eiApICk7XG5cdFx0bW9kZWxTY2FsZS56ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMiBdLnh5eiApICk7XG5cdFx0cmV0dXJuIG5vcm1hbGl6ZSggcmVmcmFjdGlvblZlY3RvciApICogdGhpY2tuZXNzICogbW9kZWxTY2FsZTtcblx0fVxuXHRmbG9hdCBhcHBseUlvclRvUm91Z2huZXNzKCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIGZsb2F0IGlvciApIHtcblx0XHRyZXR1cm4gcm91Z2huZXNzICogY2xhbXAoIGlvciAqIDIuMCAtIDIuMCwgMC4wLCAxLjAgKTtcblx0fVxuXHR2ZWM0IGdldFRyYW5zbWlzc2lvblNhbXBsZSggY29uc3QgaW4gdmVjMiBmcmFnQ29vcmQsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgY29uc3QgaW4gZmxvYXQgaW9yICkge1xuXHRcdGZsb2F0IGZyYW1lYnVmZmVyTG9kID0gbG9nMiggdHJhbnNtaXNzaW9uU2FtcGxlclNpemUueCApICogYXBwbHlJb3JUb1JvdWdobmVzcyggcm91Z2huZXNzLCBpb3IgKTtcblx0XHQjaWZkZWYgVEVYVFVSRV9MT0RfRVhUXG5cdFx0XHRyZXR1cm4gdGV4dHVyZTJETG9kRVhUKCB0cmFuc21pc3Npb25TYW1wbGVyTWFwLCBmcmFnQ29vcmQueHksIGZyYW1lYnVmZmVyTG9kICk7XG5cdFx0I2Vsc2Vcblx0XHRcdHJldHVybiB0ZXh0dXJlMkQoIHRyYW5zbWlzc2lvblNhbXBsZXJNYXAsIGZyYWdDb29yZC54eSwgZnJhbWVidWZmZXJMb2QgKTtcblx0XHQjZW5kaWZcblx0fVxuXHR2ZWMzIGFwcGx5Vm9sdW1lQXR0ZW51YXRpb24oIGNvbnN0IGluIHZlYzMgcmFkaWFuY2UsIGNvbnN0IGluIGZsb2F0IHRyYW5zbWlzc2lvbkRpc3RhbmNlLCBjb25zdCBpbiB2ZWMzIGF0dGVudWF0aW9uQ29sb3IsIGNvbnN0IGluIGZsb2F0IGF0dGVudWF0aW9uRGlzdGFuY2UgKSB7XG5cdFx0aWYgKCBhdHRlbnVhdGlvbkRpc3RhbmNlID09IDAuMCApIHtcblx0XHRcdHJldHVybiByYWRpYW5jZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmVjMyBhdHRlbnVhdGlvbkNvZWZmaWNpZW50ID0gLWxvZyggYXR0ZW51YXRpb25Db2xvciApIC8gYXR0ZW51YXRpb25EaXN0YW5jZTtcblx0XHRcdHZlYzMgdHJhbnNtaXR0YW5jZSA9IGV4cCggLSBhdHRlbnVhdGlvbkNvZWZmaWNpZW50ICogdHJhbnNtaXNzaW9uRGlzdGFuY2UgKTtcdFx0XHRyZXR1cm4gdHJhbnNtaXR0YW5jZSAqIHJhZGlhbmNlO1xuXHRcdH1cblx0fVxuXHR2ZWM0IGdldElCTFZvbHVtZVJlZnJhY3Rpb24oIGNvbnN0IGluIHZlYzMgbiwgY29uc3QgaW4gdmVjMyB2LCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIHZlYzMgZGlmZnVzZUNvbG9yLFxuXHRcdGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgc3BlY3VsYXJGOTAsIGNvbnN0IGluIHZlYzMgcG9zaXRpb24sIGNvbnN0IGluIG1hdDQgbW9kZWxNYXRyaXgsXG5cdFx0Y29uc3QgaW4gbWF0NCB2aWV3TWF0cml4LCBjb25zdCBpbiBtYXQ0IHByb2pNYXRyaXgsIGNvbnN0IGluIGZsb2F0IGlvciwgY29uc3QgaW4gZmxvYXQgdGhpY2tuZXNzLFxuXHRcdGNvbnN0IGluIHZlYzMgYXR0ZW51YXRpb25Db2xvciwgY29uc3QgaW4gZmxvYXQgYXR0ZW51YXRpb25EaXN0YW5jZSApIHtcblx0XHR2ZWMzIHRyYW5zbWlzc2lvblJheSA9IGdldFZvbHVtZVRyYW5zbWlzc2lvblJheSggbiwgdiwgdGhpY2tuZXNzLCBpb3IsIG1vZGVsTWF0cml4ICk7XG5cdFx0dmVjMyByZWZyYWN0ZWRSYXlFeGl0ID0gcG9zaXRpb24gKyB0cmFuc21pc3Npb25SYXk7XG5cdFx0dmVjNCBuZGNQb3MgPSBwcm9qTWF0cml4ICogdmlld01hdHJpeCAqIHZlYzQoIHJlZnJhY3RlZFJheUV4aXQsIDEuMCApO1xuXHRcdHZlYzIgcmVmcmFjdGlvbkNvb3JkcyA9IG5kY1Bvcy54eSAvIG5kY1Bvcy53O1xuXHRcdHJlZnJhY3Rpb25Db29yZHMgKz0gMS4wO1xuXHRcdHJlZnJhY3Rpb25Db29yZHMgLz0gMi4wO1xuXHRcdHZlYzQgdHJhbnNtaXR0ZWRMaWdodCA9IGdldFRyYW5zbWlzc2lvblNhbXBsZSggcmVmcmFjdGlvbkNvb3Jkcywgcm91Z2huZXNzLCBpb3IgKTtcblx0XHR2ZWMzIGF0dGVudWF0ZWRDb2xvciA9IGFwcGx5Vm9sdW1lQXR0ZW51YXRpb24oIHRyYW5zbWl0dGVkTGlnaHQucmdiLCBsZW5ndGgoIHRyYW5zbWlzc2lvblJheSApLCBhdHRlbnVhdGlvbkNvbG9yLCBhdHRlbnVhdGlvbkRpc3RhbmNlICk7XG5cdFx0dmVjMyBGID0gRW52aXJvbm1lbnRCUkRGKCBuLCB2LCBzcGVjdWxhckNvbG9yLCBzcGVjdWxhckY5MCwgcm91Z2huZXNzICk7XG5cdFx0cmV0dXJuIHZlYzQoICggMS4wIC0gRiApICogYXR0ZW51YXRlZENvbG9yICogZGlmZnVzZUNvbG9yLCB0cmFuc21pdHRlZExpZ2h0LmEgKTtcblx0fVxuI2VuZGlmIix1dl9wYXJzX2ZyYWdtZW50OiIjaWYgKCBkZWZpbmVkKCBVU0VfVVYgKSAmJiAhIGRlZmluZWQoIFVWU19WRVJURVhfT05MWSApIClcblx0dmFyeWluZyB2ZWMyIHZVdjtcbiNlbmRpZiIsdXZfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfVVZcblx0I2lmZGVmIFVWU19WRVJURVhfT05MWVxuXHRcdHZlYzIgdlV2O1xuXHQjZWxzZVxuXHRcdHZhcnlpbmcgdmVjMiB2VXY7XG5cdCNlbmRpZlxuXHR1bmlmb3JtIG1hdDMgdXZUcmFuc2Zvcm07XG4jZW5kaWYiLHV2X3ZlcnRleDoiI2lmZGVmIFVTRV9VVlxuXHR2VXYgPSAoIHV2VHJhbnNmb3JtICogdmVjMyggdXYsIDEgKSApLnh5O1xuI2VuZGlmIix1djJfcGFyc19mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9MSUdIVE1BUCApIHx8IGRlZmluZWQoIFVTRV9BT01BUCApXG5cdHZhcnlpbmcgdmVjMiB2VXYyO1xuI2VuZGlmIix1djJfcGFyc192ZXJ0ZXg6IiNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKVxuXHRhdHRyaWJ1dGUgdmVjMiB1djI7XG5cdHZhcnlpbmcgdmVjMiB2VXYyO1xuXHR1bmlmb3JtIG1hdDMgdXYyVHJhbnNmb3JtO1xuI2VuZGlmIix1djJfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQIClcblx0dlV2MiA9ICggdXYyVHJhbnNmb3JtICogdmVjMyggdXYyLCAxICkgKS54eTtcbiNlbmRpZiIsd29ybGRwb3NfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApIHx8IGRlZmluZWQoIERJU1RBTkNFICkgfHwgZGVmaW5lZCAoIFVTRV9TSEFET1dNQVAgKSB8fCBkZWZpbmVkICggVVNFX1RSQU5TTUlTU0lPTiApXG5cdHZlYzQgd29ybGRQb3NpdGlvbiA9IHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTtcblx0I2lmZGVmIFVTRV9JTlNUQU5DSU5HXG5cdFx0d29ybGRQb3NpdGlvbiA9IGluc3RhbmNlTWF0cml4ICogd29ybGRQb3NpdGlvbjtcblx0I2VuZGlmXG5cdHdvcmxkUG9zaXRpb24gPSBtb2RlbE1hdHJpeCAqIHdvcmxkUG9zaXRpb247XG4jZW5kaWYiLGJhY2tncm91bmRfdmVydDoidmFyeWluZyB2ZWMyIHZVdjtcbnVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTtcbnZvaWQgbWFpbigpIHtcblx0dlV2ID0gKCB1dlRyYW5zZm9ybSAqIHZlYzMoIHV2LCAxICkgKS54eTtcblx0Z2xfUG9zaXRpb24gPSB2ZWM0KCBwb3NpdGlvbi54eSwgMS4wLCAxLjAgKTtcbn0iLGJhY2tncm91bmRfZnJhZzoidW5pZm9ybSBzYW1wbGVyMkQgdDJEO1xudmFyeWluZyB2ZWMyIHZVdjtcbnZvaWQgbWFpbigpIHtcblx0Z2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKCB0MkQsIHZVdiApO1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG59IixjdWJlX3ZlcnQ6InZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxudm9pZCBtYWluKCkge1xuXHR2V29ybGREaXJlY3Rpb24gPSB0cmFuc2Zvcm1EaXJlY3Rpb24oIHBvc2l0aW9uLCBtb2RlbE1hdHJpeCApO1xuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdGdsX1Bvc2l0aW9uLnogPSBnbF9Qb3NpdGlvbi53O1xufSIsY3ViZV9mcmFnOiIjaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PlxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcbiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdHZlYzMgdlJlZmxlY3QgPSB2V29ybGREaXJlY3Rpb247XG5cdCNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+XG5cdGdsX0ZyYWdDb2xvciA9IGVudkNvbG9yO1xuXHRnbF9GcmFnQ29sb3IuYSAqPSBvcGFjaXR5O1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG59IixkZXB0aF92ZXJ0OiIjaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52YXJ5aW5nIHZlYzIgdkhpZ2hQcmVjaXNpb25aVztcbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVBcblx0XHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHRcdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdHZIaWdoUHJlY2lzaW9uWlcgPSBnbF9Qb3NpdGlvbi56dztcbn0iLGRlcHRoX2ZyYWc6IiNpZiBERVBUSF9QQUNLSU5HID09IDMyMDBcblx0dW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52YXJ5aW5nIHZlYzIgdkhpZ2hQcmVjaXNpb25aVztcbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCAxLjAgKTtcblx0I2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMFxuXHRcdGRpZmZ1c2VDb2xvci5hID0gb3BhY2l0eTtcblx0I2VuZGlmXG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHRmbG9hdCBmcmFnQ29vcmRaID0gMC41ICogdkhpZ2hQcmVjaXNpb25aV1swXSAvIHZIaWdoUHJlY2lzaW9uWldbMV0gKyAwLjU7XG5cdCNpZiBERVBUSF9QQUNLSU5HID09IDMyMDBcblx0XHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCB2ZWMzKCAxLjAgLSBmcmFnQ29vcmRaICksIG9wYWNpdHkgKTtcblx0I2VsaWYgREVQVEhfUEFDS0lORyA9PSAzMjAxXG5cdFx0Z2xfRnJhZ0NvbG9yID0gcGFja0RlcHRoVG9SR0JBKCBmcmFnQ29vcmRaICk7XG5cdCNlbmRpZlxufSIsZGlzdGFuY2VSR0JBX3ZlcnQ6IiNkZWZpbmUgRElTVEFOQ0VcbnZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVBcblx0XHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHRcdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdHZXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7XG59IixkaXN0YW5jZVJHQkFfZnJhZzoiI2RlZmluZSBESVNUQU5DRVxudW5pZm9ybSB2ZWMzIHJlZmVyZW5jZVBvc2l0aW9uO1xudW5pZm9ybSBmbG9hdCBuZWFyRGlzdGFuY2U7XG51bmlmb3JtIGZsb2F0IGZhckRpc3RhbmNlO1xudmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbiAoKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggMS4wICk7XG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0ZmxvYXQgZGlzdCA9IGxlbmd0aCggdldvcmxkUG9zaXRpb24gLSByZWZlcmVuY2VQb3NpdGlvbiApO1xuXHRkaXN0ID0gKCBkaXN0IC0gbmVhckRpc3RhbmNlICkgLyAoIGZhckRpc3RhbmNlIC0gbmVhckRpc3RhbmNlICk7XG5cdGRpc3QgPSBzYXR1cmF0ZSggZGlzdCApO1xuXHRnbF9GcmFnQ29sb3IgPSBwYWNrRGVwdGhUb1JHQkEoIGRpc3QgKTtcbn0iLGVxdWlyZWN0X3ZlcnQ6InZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxudm9pZCBtYWluKCkge1xuXHR2V29ybGREaXJlY3Rpb24gPSB0cmFuc2Zvcm1EaXJlY3Rpb24oIHBvc2l0aW9uLCBtb2RlbE1hdHJpeCApO1xuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG59IixlcXVpcmVjdF9mcmFnOiJ1bmlmb3JtIHNhbXBsZXIyRCB0RXF1aXJlY3Q7XG52YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbnZvaWQgbWFpbigpIHtcblx0dmVjMyBkaXJlY3Rpb24gPSBub3JtYWxpemUoIHZXb3JsZERpcmVjdGlvbiApO1xuXHR2ZWMyIHNhbXBsZVVWID0gZXF1aXJlY3RVdiggZGlyZWN0aW9uICk7XG5cdGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCggdEVxdWlyZWN0LCBzYW1wbGVVViApO1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG59IixsaW5lZGFzaGVkX3ZlcnQ6InVuaWZvcm0gZmxvYXQgc2NhbGU7XG5hdHRyaWJ1dGUgZmxvYXQgbGluZURpc3RhbmNlO1xudmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHR2TGluZURpc3RhbmNlID0gc2NhbGUgKiBsaW5lRGlzdGFuY2U7XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIsbGluZWRhc2hlZF9mcmFnOiJ1bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbnVuaWZvcm0gZmxvYXQgZGFzaFNpemU7XG51bmlmb3JtIGZsb2F0IHRvdGFsU2l6ZTtcbnZhcnlpbmcgZmxvYXQgdkxpbmVEaXN0YW5jZTtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHRpZiAoIG1vZCggdkxpbmVEaXN0YW5jZSwgdG90YWxTaXplICkgPiBkYXNoU2l6ZSApIHtcblx0XHRkaXNjYXJkO1xuXHR9XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApO1xuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiO1xuXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxufSIsbWVzaGJhc2ljX3ZlcnQ6IiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2lmIGRlZmluZWQgKCBVU0VfRU5WTUFQICkgfHwgZGVmaW5lZCAoIFVTRV9TS0lOTklORyApXG5cdFx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0XHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHRcdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHRcdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cblx0I2VuZGlmXG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxlbnZtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLG1lc2hiYXNpY19mcmFnOiJ1bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHNwZWN1bGFybWFwX2ZyYWdtZW50PlxuXHRSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApO1xuXHQjaWZkZWYgVVNFX0xJR0hUTUFQXG5cdFx0dmVjNCBsaWdodE1hcFRleGVsPSB0ZXh0dXJlMkQoIGxpZ2h0TWFwLCB2VXYyICk7XG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGxpZ2h0TWFwVGV4ZWwucmdiICogbGlnaHRNYXBJbnRlbnNpdHk7XG5cdCNlbHNlXG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IHZlYzMoIDEuMCApO1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PlxuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKj0gZGlmZnVzZUNvbG9yLnJnYjtcblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlO1xuXHQjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50PlxufSIsbWVzaGxhbWJlcnRfdmVydDoiI2RlZmluZSBMQU1CRVJUXG52YXJ5aW5nIHZlYzMgdkxpZ2h0RnJvbnQ7XG52YXJ5aW5nIHZlYzMgdkluZGlyZWN0RnJvbnQ7XG4jaWZkZWYgRE9VQkxFX1NJREVEXG5cdHZhcnlpbmcgdmVjMyB2TGlnaHRCYWNrO1xuXHR2YXJ5aW5nIHZlYzMgdkluZGlyZWN0QmFjaztcbiNlbmRpZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGJzZGZzPlxuI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxlbnZtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8bGlnaHRzX2xhbWJlcnRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG59IixtZXNobGFtYmVydF9mcmFnOiJ1bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gdmVjMyBlbWlzc2l2ZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbnZhcnlpbmcgdmVjMyB2TGlnaHRGcm9udDtcbnZhcnlpbmcgdmVjMyB2SW5kaXJlY3RGcm9udDtcbiNpZmRlZiBET1VCTEVfU0lERURcblx0dmFyeWluZyB2ZWMzIHZMaWdodEJhY2s7XG5cdHZhcnlpbmcgdmVjMyB2SW5kaXJlY3RCYWNrO1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXNrX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtcblx0dmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHNwZWN1bGFybWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+XG5cdCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gKCBnbF9Gcm9udEZhY2luZyApID8gdkluZGlyZWN0RnJvbnQgOiB2SW5kaXJlY3RCYWNrO1xuXHQjZWxzZVxuXHRcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSB2SW5kaXJlY3RGcm9udDtcblx0I2VuZGlmXG5cdCNpbmNsdWRlIDxsaWdodG1hcF9mcmFnbWVudD5cblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICo9IEJSREZfTGFtYmVydCggZGlmZnVzZUNvbG9yLnJnYiApO1xuXHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSA9ICggZ2xfRnJvbnRGYWNpbmcgKSA/IHZMaWdodEZyb250IDogdkxpZ2h0QmFjaztcblx0I2Vsc2Vcblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlID0gdkxpZ2h0RnJvbnQ7XG5cdCNlbmRpZlxuXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICo9IEJSREZfTGFtYmVydCggZGlmZnVzZUNvbG9yLnJnYiApICogZ2V0U2hhZG93TWFzaygpO1xuXHQjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7XG5cdCNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+XG59IixtZXNobWF0Y2FwX3ZlcnQ6IiNkZWZpbmUgTUFUQ0FQXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxub3JtYWxfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cblx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG59IixtZXNobWF0Y2FwX2ZyYWc6IiNkZWZpbmUgTUFUQ0FQXG51bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbnVuaWZvcm0gc2FtcGxlcjJEIG1hdGNhcDtcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+XG5cdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz5cblx0dmVjMyB2aWV3RGlyID0gbm9ybWFsaXplKCB2Vmlld1Bvc2l0aW9uICk7XG5cdHZlYzMgeCA9IG5vcm1hbGl6ZSggdmVjMyggdmlld0Rpci56LCAwLjAsIC0gdmlld0Rpci54ICkgKTtcblx0dmVjMyB5ID0gY3Jvc3MoIHZpZXdEaXIsIHggKTtcblx0dmVjMiB1diA9IHZlYzIoIGRvdCggeCwgbm9ybWFsICksIGRvdCggeSwgbm9ybWFsICkgKSAqIDAuNDk1ICsgMC41O1xuXHQjaWZkZWYgVVNFX01BVENBUFxuXHRcdHZlYzQgbWF0Y2FwQ29sb3IgPSB0ZXh0dXJlMkQoIG1hdGNhcCwgdXYgKTtcblx0I2Vsc2Vcblx0XHR2ZWM0IG1hdGNhcENvbG9yID0gdmVjNCggdmVjMyggbWl4KCAwLjIsIDAuOCwgdXYueSApICksIDEuMCApO1xuXHQjZW5kaWZcblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYiAqIG1hdGNhcENvbG9yLnJnYjtcblx0I2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbn0iLG1lc2hub3JtYWxfdmVydDoiI2RlZmluZSBOT1JNQUxcbiNpZiBkZWZpbmVkKCBGTEFUX1NIQURFRCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApXG5cdHZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxub3JtYWxfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxuI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIClcblx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG4jZW5kaWZcbn0iLG1lc2hub3JtYWxfZnJhZzoiI2RlZmluZSBOT1JNQUxcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpZiBkZWZpbmVkKCBGTEFUX1NIQURFRCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApXG5cdHZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2VuZGlmXG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+XG5cdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz5cblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggcGFja05vcm1hbFRvUkdCKCBub3JtYWwgKSwgb3BhY2l0eSApO1xufSIsbWVzaHBob25nX3ZlcnQ6IiNkZWZpbmUgUEhPTkdcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bm9ybWFsX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx1djJfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxuXHR2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejtcblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLG1lc2hwaG9uZ19mcmFnOiIjZGVmaW5lIFBIT05HXG51bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gdmVjMyBlbWlzc2l2ZTtcbnVuaWZvcm0gdmVjMyBzcGVjdWxhcjtcbnVuaWZvcm0gZmxvYXQgc2hpbmluZXNzO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+XG4jaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bGlnaHRzX3Bob25nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XG5cdHZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdodHNfcGhvbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfYmVnaW4+XG5cdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfbWFwcz5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9lbmQ+XG5cdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcblx0I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbn0iLG1lc2hwaHlzaWNhbF92ZXJ0OiIjZGVmaW5lIFNUQU5EQVJEXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OXG5cdHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcbiNlbmRpZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxub3JtYWxfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdHZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG4jaWZkZWYgVVNFX1RSQU5TTUlTU0lPTlxuXHR2V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24ueHl6O1xuI2VuZGlmXG59IixtZXNocGh5c2ljYWxfZnJhZzoiI2RlZmluZSBTVEFOREFSRFxuI2lmZGVmIFBIWVNJQ0FMXG5cdCNkZWZpbmUgSU9SXG5cdCNkZWZpbmUgU1BFQ1VMQVJcbiNlbmRpZlxudW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIHZlYzMgZW1pc3NpdmU7XG51bmlmb3JtIGZsb2F0IHJvdWdobmVzcztcbnVuaWZvcm0gZmxvYXQgbWV0YWxuZXNzO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2lmZGVmIElPUlxuXHR1bmlmb3JtIGZsb2F0IGlvcjtcbiNlbmRpZlxuI2lmZGVmIFNQRUNVTEFSXG5cdHVuaWZvcm0gZmxvYXQgc3BlY3VsYXJJbnRlbnNpdHk7XG5cdHVuaWZvcm0gdmVjMyBzcGVjdWxhckNvbG9yO1xuXHQjaWZkZWYgVVNFX1NQRUNVTEFSSU5URU5TSVRZTUFQXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgc3BlY3VsYXJJbnRlbnNpdHlNYXA7XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX1NQRUNVTEFSQ09MT1JNQVBcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhckNvbG9yTWFwO1xuXHQjZW5kaWZcbiNlbmRpZlxuI2lmZGVmIFVTRV9DTEVBUkNPQVRcblx0dW5pZm9ybSBmbG9hdCBjbGVhcmNvYXQ7XG5cdHVuaWZvcm0gZmxvYXQgY2xlYXJjb2F0Um91Z2huZXNzO1xuI2VuZGlmXG4jaWZkZWYgVVNFX1NIRUVOXG5cdHVuaWZvcm0gdmVjMyBzaGVlbkNvbG9yO1xuXHR1bmlmb3JtIGZsb2F0IHNoZWVuUm91Z2huZXNzO1xuXHQjaWZkZWYgVVNFX1NIRUVOQ09MT1JNQVBcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCBzaGVlbkNvbG9yTWFwO1xuXHQjZW5kaWZcblx0I2lmZGVmIFVTRV9TSEVFTlJPVUdITkVTU01BUFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIHNoZWVuUm91Z2huZXNzTWFwO1xuXHQjZW5kaWZcbiNlbmRpZlxudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbnZtYXBfcGh5c2ljYWxfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cbiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodHNfcGh5c2ljYWxfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx0cmFuc21pc3Npb25fcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xlYXJjb2F0X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8cm91Z2huZXNzbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWV0YWxuZXNzbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XG5cdHZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxyb3VnaG5lc3NtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtZXRhbG5lc3NtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+XG5cdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz5cblx0I2luY2x1ZGUgPGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfYmVnaW4+XG5cdCNpbmNsdWRlIDxjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X21hcHM+XG5cdCNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGxpZ2h0c19waHlzaWNhbF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD5cblx0I2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PlxuXHR2ZWMzIHRvdGFsRGlmZnVzZSA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2U7XG5cdHZlYzMgdG90YWxTcGVjdWxhciA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhcjtcblx0I2luY2x1ZGUgPHRyYW5zbWlzc2lvbl9mcmFnbWVudD5cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gdG90YWxEaWZmdXNlICsgdG90YWxTcGVjdWxhciArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcblx0I2lmZGVmIFVTRV9TSEVFTlxuXHRcdGZsb2F0IHNoZWVuRW5lcmd5Q29tcCA9IDEuMCAtIDAuMTU3ICogbWF4MyggbWF0ZXJpYWwuc2hlZW5Db2xvciApO1xuXHRcdG91dGdvaW5nTGlnaHQgPSBvdXRnb2luZ0xpZ2h0ICogc2hlZW5FbmVyZ3lDb21wICsgc2hlZW5TcGVjdWxhcjtcblx0I2VuZGlmXG5cdCNpZmRlZiBVU0VfQ0xFQVJDT0FUXG5cdFx0ZmxvYXQgZG90TlZjYyA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciApICk7XG5cdFx0dmVjMyBGY2MgPSBGX1NjaGxpY2soIG1hdGVyaWFsLmNsZWFyY29hdEYwLCBtYXRlcmlhbC5jbGVhcmNvYXRGOTAsIGRvdE5WY2MgKTtcblx0XHRvdXRnb2luZ0xpZ2h0ID0gb3V0Z29pbmdMaWdodCAqICggMS4wIC0gbWF0ZXJpYWwuY2xlYXJjb2F0ICogRmNjICkgKyBjbGVhcmNvYXRTcGVjdWxhciAqIG1hdGVyaWFsLmNsZWFyY29hdDtcblx0I2VuZGlmXG5cdCNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+XG59IixtZXNodG9vbl92ZXJ0OiIjZGVmaW5lIFRPT05cbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxub3JtYWxfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdHZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG59IixtZXNodG9vbl9mcmFnOiIjZGVmaW5lIFRPT05cbnVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSB2ZWMzIGVtaXNzaXZlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGdyYWRpZW50bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+XG4jaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bGlnaHRzX3Rvb25fcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XG5cdHZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+XG5cdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz5cblx0I2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bGlnaHRzX3Rvb25fZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfYmVnaW4+XG5cdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfbWFwcz5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9lbmQ+XG5cdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcblx0I2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbn0iLHBvaW50c192ZXJ0OiJ1bmlmb3JtIGZsb2F0IHNpemU7XG51bmlmb3JtIGZsb2F0IHNjYWxlO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdGdsX1BvaW50U2l6ZSA9IHNpemU7XG5cdCNpZmRlZiBVU0VfU0laRUFUVEVOVUFUSU9OXG5cdFx0Ym9vbCBpc1BlcnNwZWN0aXZlID0gaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApO1xuXHRcdGlmICggaXNQZXJzcGVjdGl2ZSApIGdsX1BvaW50U2l6ZSAqPSAoIHNjYWxlIC8gLSBtdlBvc2l0aW9uLnogKTtcblx0I2VuZGlmXG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLHBvaW50c19mcmFnOiJ1bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFydGljbGVfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSB2ZWMzKCAwLjAgKTtcblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9wYXJ0aWNsZV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHRvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjtcblx0I2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cbn0iLHNoYWRvd192ZXJ0OiIjaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLHNoYWRvd19mcmFnOiJ1bmlmb3JtIHZlYzMgY29sb3I7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c2hhZG93bWFza19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBjb2xvciwgb3BhY2l0eSAqICggMS4wIC0gZ2V0U2hhZG93TWFzaygpICkgKTtcblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxufSIsc3ByaXRlX3ZlcnQ6InVuaWZvcm0gZmxvYXQgcm90YXRpb247XG51bmlmb3JtIHZlYzIgY2VudGVyO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHR2ZWM0IG12UG9zaXRpb24gPSBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCAwLjAsIDAuMCwgMC4wLCAxLjAgKTtcblx0dmVjMiBzY2FsZTtcblx0c2NhbGUueCA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDAgXS54LCBtb2RlbE1hdHJpeFsgMCBdLnksIG1vZGVsTWF0cml4WyAwIF0ueiApICk7XG5cdHNjYWxlLnkgPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAxIF0ueCwgbW9kZWxNYXRyaXhbIDEgXS55LCBtb2RlbE1hdHJpeFsgMSBdLnogKSApO1xuXHQjaWZuZGVmIFVTRV9TSVpFQVRURU5VQVRJT05cblx0XHRib29sIGlzUGVyc3BlY3RpdmUgPSBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICk7XG5cdFx0aWYgKCBpc1BlcnNwZWN0aXZlICkgc2NhbGUgKj0gLSBtdlBvc2l0aW9uLno7XG5cdCNlbmRpZlxuXHR2ZWMyIGFsaWduZWRQb3NpdGlvbiA9ICggcG9zaXRpb24ueHkgLSAoIGNlbnRlciAtIHZlYzIoIDAuNSApICkgKSAqIHNjYWxlO1xuXHR2ZWMyIHJvdGF0ZWRQb3NpdGlvbjtcblx0cm90YXRlZFBvc2l0aW9uLnggPSBjb3MoIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueCAtIHNpbiggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi55O1xuXHRyb3RhdGVkUG9zaXRpb24ueSA9IHNpbiggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi54ICsgY29zKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnk7XG5cdG12UG9zaXRpb24ueHkgKz0gcm90YXRlZFBvc2l0aW9uO1xuXHRnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG59IixzcHJpdGVfZnJhZzoidW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSB2ZWMzKCAwLjAgKTtcblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHRvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjtcblx0I2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxufSJ9LFJ0PXtjb21tb246e2RpZmZ1c2U6e3ZhbHVlOm5ldyBzbigxNjc3NzIxNSl9LG9wYWNpdHk6e3ZhbHVlOjF9LG1hcDp7dmFsdWU6bnVsbH0sdXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyB5b30sdXYyVHJhbnNmb3JtOnt2YWx1ZTpuZXcgeW99LGFscGhhTWFwOnt2YWx1ZTpudWxsfSxhbHBoYVRlc3Q6e3ZhbHVlOjB9fSxzcGVjdWxhcm1hcDp7c3BlY3VsYXJNYXA6e3ZhbHVlOm51bGx9fSxlbnZtYXA6e2Vudk1hcDp7dmFsdWU6bnVsbH0sZmxpcEVudk1hcDp7dmFsdWU6LTF9LHJlZmxlY3Rpdml0eTp7dmFsdWU6MX0saW9yOnt2YWx1ZToxLjV9LHJlZnJhY3Rpb25SYXRpbzp7dmFsdWU6Ljk4fX0sYW9tYXA6e2FvTWFwOnt2YWx1ZTpudWxsfSxhb01hcEludGVuc2l0eTp7dmFsdWU6MX19LGxpZ2h0bWFwOntsaWdodE1hcDp7dmFsdWU6bnVsbH0sbGlnaHRNYXBJbnRlbnNpdHk6e3ZhbHVlOjF9fSxlbWlzc2l2ZW1hcDp7ZW1pc3NpdmVNYXA6e3ZhbHVlOm51bGx9fSxidW1wbWFwOntidW1wTWFwOnt2YWx1ZTpudWxsfSxidW1wU2NhbGU6e3ZhbHVlOjF9fSxub3JtYWxtYXA6e25vcm1hbE1hcDp7dmFsdWU6bnVsbH0sbm9ybWFsU2NhbGU6e3ZhbHVlOm5ldyAkZSgxLDEpfX0sZGlzcGxhY2VtZW50bWFwOntkaXNwbGFjZW1lbnRNYXA6e3ZhbHVlOm51bGx9LGRpc3BsYWNlbWVudFNjYWxlOnt2YWx1ZToxfSxkaXNwbGFjZW1lbnRCaWFzOnt2YWx1ZTowfX0scm91Z2huZXNzbWFwOntyb3VnaG5lc3NNYXA6e3ZhbHVlOm51bGx9fSxtZXRhbG5lc3NtYXA6e21ldGFsbmVzc01hcDp7dmFsdWU6bnVsbH19LGdyYWRpZW50bWFwOntncmFkaWVudE1hcDp7dmFsdWU6bnVsbH19LGZvZzp7Zm9nRGVuc2l0eTp7dmFsdWU6MjVlLTV9LGZvZ05lYXI6e3ZhbHVlOjF9LGZvZ0Zhcjp7dmFsdWU6MmUzfSxmb2dDb2xvcjp7dmFsdWU6bmV3IHNuKDE2Nzc3MjE1KX19LGxpZ2h0czp7YW1iaWVudExpZ2h0Q29sb3I6e3ZhbHVlOltdfSxsaWdodFByb2JlOnt2YWx1ZTpbXX0sZGlyZWN0aW9uYWxMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2RpcmVjdGlvbjp7fSxjb2xvcjp7fX19LGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntzaGFkb3dCaWFzOnt9LHNoYWRvd05vcm1hbEJpYXM6e30sc2hhZG93UmFkaXVzOnt9LHNoYWRvd01hcFNpemU6e319fSxkaXJlY3Rpb25hbFNoYWRvd01hcDp7dmFsdWU6W119LGRpcmVjdGlvbmFsU2hhZG93TWF0cml4Ont2YWx1ZTpbXX0sc3BvdExpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7Y29sb3I6e30scG9zaXRpb246e30sZGlyZWN0aW9uOnt9LGRpc3RhbmNlOnt9LGNvbmVDb3M6e30scGVudW1icmFDb3M6e30sZGVjYXk6e319fSxzcG90TGlnaHRTaGFkb3dzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntzaGFkb3dCaWFzOnt9LHNoYWRvd05vcm1hbEJpYXM6e30sc2hhZG93UmFkaXVzOnt9LHNoYWRvd01hcFNpemU6e319fSxzcG90U2hhZG93TWFwOnt2YWx1ZTpbXX0sc3BvdFNoYWRvd01hdHJpeDp7dmFsdWU6W119LHBvaW50TGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntjb2xvcjp7fSxwb3NpdGlvbjp7fSxkZWNheTp7fSxkaXN0YW5jZTp7fX19LHBvaW50TGlnaHRTaGFkb3dzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntzaGFkb3dCaWFzOnt9LHNoYWRvd05vcm1hbEJpYXM6e30sc2hhZG93UmFkaXVzOnt9LHNoYWRvd01hcFNpemU6e30sc2hhZG93Q2FtZXJhTmVhcjp7fSxzaGFkb3dDYW1lcmFGYXI6e319fSxwb2ludFNoYWRvd01hcDp7dmFsdWU6W119LHBvaW50U2hhZG93TWF0cml4Ont2YWx1ZTpbXX0saGVtaXNwaGVyZUxpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7ZGlyZWN0aW9uOnt9LHNreUNvbG9yOnt9LGdyb3VuZENvbG9yOnt9fX0scmVjdEFyZWFMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2NvbG9yOnt9LHBvc2l0aW9uOnt9LHdpZHRoOnt9LGhlaWdodDp7fX19LGx0Y18xOnt2YWx1ZTpudWxsfSxsdGNfMjp7dmFsdWU6bnVsbH19LHBvaW50czp7ZGlmZnVzZTp7dmFsdWU6bmV3IHNuKDE2Nzc3MjE1KX0sb3BhY2l0eTp7dmFsdWU6MX0sc2l6ZTp7dmFsdWU6MX0sc2NhbGU6e3ZhbHVlOjF9LG1hcDp7dmFsdWU6bnVsbH0sYWxwaGFNYXA6e3ZhbHVlOm51bGx9LGFscGhhVGVzdDp7dmFsdWU6MH0sdXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyB5b319LHNwcml0ZTp7ZGlmZnVzZTp7dmFsdWU6bmV3IHNuKDE2Nzc3MjE1KX0sb3BhY2l0eTp7dmFsdWU6MX0sY2VudGVyOnt2YWx1ZTpuZXcgJGUoLjUsLjUpfSxyb3RhdGlvbjp7dmFsdWU6MH0sbWFwOnt2YWx1ZTpudWxsfSxhbHBoYU1hcDp7dmFsdWU6bnVsbH0sYWxwaGFUZXN0Ont2YWx1ZTowfSx1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IHlvfX19LGpjPXtiYXNpYzp7dW5pZm9ybXM6bmEoW1J0LmNvbW1vbixSdC5zcGVjdWxhcm1hcCxSdC5lbnZtYXAsUnQuYW9tYXAsUnQubGlnaHRtYXAsUnQuZm9nXSksdmVydGV4U2hhZGVyOnZpLm1lc2hiYXNpY192ZXJ0LGZyYWdtZW50U2hhZGVyOnZpLm1lc2hiYXNpY19mcmFnfSxsYW1iZXJ0Ont1bmlmb3JtczpuYShbUnQuY29tbW9uLFJ0LnNwZWN1bGFybWFwLFJ0LmVudm1hcCxSdC5hb21hcCxSdC5saWdodG1hcCxSdC5lbWlzc2l2ZW1hcCxSdC5mb2csUnQubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IHNuKDApfX1dKSx2ZXJ0ZXhTaGFkZXI6dmkubWVzaGxhbWJlcnRfdmVydCxmcmFnbWVudFNoYWRlcjp2aS5tZXNobGFtYmVydF9mcmFnfSxwaG9uZzp7dW5pZm9ybXM6bmEoW1J0LmNvbW1vbixSdC5zcGVjdWxhcm1hcCxSdC5lbnZtYXAsUnQuYW9tYXAsUnQubGlnaHRtYXAsUnQuZW1pc3NpdmVtYXAsUnQuYnVtcG1hcCxSdC5ub3JtYWxtYXAsUnQuZGlzcGxhY2VtZW50bWFwLFJ0LmZvZyxSdC5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgc24oMCl9LHNwZWN1bGFyOnt2YWx1ZTpuZXcgc24oMTExODQ4MSl9LHNoaW5pbmVzczp7dmFsdWU6MzB9fV0pLHZlcnRleFNoYWRlcjp2aS5tZXNocGhvbmdfdmVydCxmcmFnbWVudFNoYWRlcjp2aS5tZXNocGhvbmdfZnJhZ30sc3RhbmRhcmQ6e3VuaWZvcm1zOm5hKFtSdC5jb21tb24sUnQuZW52bWFwLFJ0LmFvbWFwLFJ0LmxpZ2h0bWFwLFJ0LmVtaXNzaXZlbWFwLFJ0LmJ1bXBtYXAsUnQubm9ybWFsbWFwLFJ0LmRpc3BsYWNlbWVudG1hcCxSdC5yb3VnaG5lc3NtYXAsUnQubWV0YWxuZXNzbWFwLFJ0LmZvZyxSdC5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgc24oMCl9LHJvdWdobmVzczp7dmFsdWU6MX0sbWV0YWxuZXNzOnt2YWx1ZTowfSxlbnZNYXBJbnRlbnNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjp2aS5tZXNocGh5c2ljYWxfdmVydCxmcmFnbWVudFNoYWRlcjp2aS5tZXNocGh5c2ljYWxfZnJhZ30sdG9vbjp7dW5pZm9ybXM6bmEoW1J0LmNvbW1vbixSdC5hb21hcCxSdC5saWdodG1hcCxSdC5lbWlzc2l2ZW1hcCxSdC5idW1wbWFwLFJ0Lm5vcm1hbG1hcCxSdC5kaXNwbGFjZW1lbnRtYXAsUnQuZ3JhZGllbnRtYXAsUnQuZm9nLFJ0LmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyBzbigwKX19XSksdmVydGV4U2hhZGVyOnZpLm1lc2h0b29uX3ZlcnQsZnJhZ21lbnRTaGFkZXI6dmkubWVzaHRvb25fZnJhZ30sbWF0Y2FwOnt1bmlmb3JtczpuYShbUnQuY29tbW9uLFJ0LmJ1bXBtYXAsUnQubm9ybWFsbWFwLFJ0LmRpc3BsYWNlbWVudG1hcCxSdC5mb2cse21hdGNhcDp7dmFsdWU6bnVsbH19XSksdmVydGV4U2hhZGVyOnZpLm1lc2htYXRjYXBfdmVydCxmcmFnbWVudFNoYWRlcjp2aS5tZXNobWF0Y2FwX2ZyYWd9LHBvaW50czp7dW5pZm9ybXM6bmEoW1J0LnBvaW50cyxSdC5mb2ddKSx2ZXJ0ZXhTaGFkZXI6dmkucG9pbnRzX3ZlcnQsZnJhZ21lbnRTaGFkZXI6dmkucG9pbnRzX2ZyYWd9LGRhc2hlZDp7dW5pZm9ybXM6bmEoW1J0LmNvbW1vbixSdC5mb2cse3NjYWxlOnt2YWx1ZToxfSxkYXNoU2l6ZTp7dmFsdWU6MX0sdG90YWxTaXplOnt2YWx1ZToyfX1dKSx2ZXJ0ZXhTaGFkZXI6dmkubGluZWRhc2hlZF92ZXJ0LGZyYWdtZW50U2hhZGVyOnZpLmxpbmVkYXNoZWRfZnJhZ30sZGVwdGg6e3VuaWZvcm1zOm5hKFtSdC5jb21tb24sUnQuZGlzcGxhY2VtZW50bWFwXSksdmVydGV4U2hhZGVyOnZpLmRlcHRoX3ZlcnQsZnJhZ21lbnRTaGFkZXI6dmkuZGVwdGhfZnJhZ30sbm9ybWFsOnt1bmlmb3JtczpuYShbUnQuY29tbW9uLFJ0LmJ1bXBtYXAsUnQubm9ybWFsbWFwLFJ0LmRpc3BsYWNlbWVudG1hcCx7b3BhY2l0eTp7dmFsdWU6MX19XSksdmVydGV4U2hhZGVyOnZpLm1lc2hub3JtYWxfdmVydCxmcmFnbWVudFNoYWRlcjp2aS5tZXNobm9ybWFsX2ZyYWd9LHNwcml0ZTp7dW5pZm9ybXM6bmEoW1J0LnNwcml0ZSxSdC5mb2ddKSx2ZXJ0ZXhTaGFkZXI6dmkuc3ByaXRlX3ZlcnQsZnJhZ21lbnRTaGFkZXI6dmkuc3ByaXRlX2ZyYWd9LGJhY2tncm91bmQ6e3VuaWZvcm1zOnt1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IHlvfSx0MkQ6e3ZhbHVlOm51bGx9fSx2ZXJ0ZXhTaGFkZXI6dmkuYmFja2dyb3VuZF92ZXJ0LGZyYWdtZW50U2hhZGVyOnZpLmJhY2tncm91bmRfZnJhZ30sY3ViZTp7dW5pZm9ybXM6bmEoW1J0LmVudm1hcCx7b3BhY2l0eTp7dmFsdWU6MX19XSksdmVydGV4U2hhZGVyOnZpLmN1YmVfdmVydCxmcmFnbWVudFNoYWRlcjp2aS5jdWJlX2ZyYWd9LGVxdWlyZWN0Ont1bmlmb3Jtczp7dEVxdWlyZWN0Ont2YWx1ZTpudWxsfX0sdmVydGV4U2hhZGVyOnZpLmVxdWlyZWN0X3ZlcnQsZnJhZ21lbnRTaGFkZXI6dmkuZXF1aXJlY3RfZnJhZ30sZGlzdGFuY2VSR0JBOnt1bmlmb3JtczpuYShbUnQuY29tbW9uLFJ0LmRpc3BsYWNlbWVudG1hcCx7cmVmZXJlbmNlUG9zaXRpb246e3ZhbHVlOm5ldyBLfSxuZWFyRGlzdGFuY2U6e3ZhbHVlOjF9LGZhckRpc3RhbmNlOnt2YWx1ZToxZTN9fV0pLHZlcnRleFNoYWRlcjp2aS5kaXN0YW5jZVJHQkFfdmVydCxmcmFnbWVudFNoYWRlcjp2aS5kaXN0YW5jZVJHQkFfZnJhZ30sc2hhZG93Ont1bmlmb3JtczpuYShbUnQubGlnaHRzLFJ0LmZvZyx7Y29sb3I6e3ZhbHVlOm5ldyBzbigwKX0sb3BhY2l0eTp7dmFsdWU6MX19XSksdmVydGV4U2hhZGVyOnZpLnNoYWRvd192ZXJ0LGZyYWdtZW50U2hhZGVyOnZpLnNoYWRvd19mcmFnfX07ZnVuY3Rpb24gVU9lKG4sdCxlLGkscixvKXtsZXQgbCxjLGE9bmV3IHNuKDApLHM9ITA9PT1yPzA6MSxkPW51bGwsdT0wLHA9bnVsbDtmdW5jdGlvbiBtKF8sTSl7ZS5idWZmZXJzLmNvbG9yLnNldENsZWFyKF8ucixfLmcsXy5iLE0sbyl9cmV0dXJue2dldENsZWFyQ29sb3I6ZnVuY3Rpb24oKXtyZXR1cm4gYX0sc2V0Q2xlYXJDb2xvcjpmdW5jdGlvbihfLE09MSl7YS5zZXQoXykscz1NLG0oYSxzKX0sZ2V0Q2xlYXJBbHBoYTpmdW5jdGlvbigpe3JldHVybiBzfSxzZXRDbGVhckFscGhhOmZ1bmN0aW9uKF8pe3M9XyxtKGEscyl9LHJlbmRlcjpmdW5jdGlvbihfLE0pe2xldCB5PSExLHg9ITA9PT1NLmlzU2NlbmU/TS5iYWNrZ3JvdW5kOm51bGw7eCYmeC5pc1RleHR1cmUmJih4PXQuZ2V0KHgpKTtsZXQgUj1uLnhyLEk9Ui5nZXRTZXNzaW9uJiZSLmdldFNlc3Npb24oKTtJJiYiYWRkaXRpdmUiPT09SS5lbnZpcm9ubWVudEJsZW5kTW9kZSYmKHg9bnVsbCksbnVsbD09PXg/bShhLHMpOngmJnguaXNDb2xvciYmKG0oeCwxKSx5PSEwKSwobi5hdXRvQ2xlYXJ8fHkpJiZuLmNsZWFyKG4uYXV0b0NsZWFyQ29sb3Isbi5hdXRvQ2xlYXJEZXB0aCxuLmF1dG9DbGVhclN0ZW5jaWwpLHgmJih4LmlzQ3ViZVRleHR1cmV8fHgubWFwcGluZz09PUpJKT8odm9pZCAwPT09YyYmKGM9bmV3IHNvKG5ldyB5bSgxLDEsMSksbmV3IGpkKHtuYW1lOiJCYWNrZ3JvdW5kQ3ViZU1hdGVyaWFsIix1bmlmb3JtczpKMChqYy5jdWJlLnVuaWZvcm1zKSx2ZXJ0ZXhTaGFkZXI6amMuY3ViZS52ZXJ0ZXhTaGFkZXIsZnJhZ21lbnRTaGFkZXI6amMuY3ViZS5mcmFnbWVudFNoYWRlcixzaWRlOmJvLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExLGZvZzohMX0pKSxjLmdlb21ldHJ5LmRlbGV0ZUF0dHJpYnV0ZSgibm9ybWFsIiksYy5nZW9tZXRyeS5kZWxldGVBdHRyaWJ1dGUoInV2IiksYy5vbkJlZm9yZVJlbmRlcj1mdW5jdGlvbihCLGVlLFEpe3RoaXMubWF0cml4V29ybGQuY29weVBvc2l0aW9uKFEubWF0cml4V29ybGQpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYy5tYXRlcmlhbCwiZW52TWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5pZm9ybXMuZW52TWFwLnZhbHVlfX0pLGkudXBkYXRlKGMpKSxjLm1hdGVyaWFsLnVuaWZvcm1zLmVudk1hcC52YWx1ZT14LGMubWF0ZXJpYWwudW5pZm9ybXMuZmxpcEVudk1hcC52YWx1ZT14LmlzQ3ViZVRleHR1cmUmJiExPT09eC5pc1JlbmRlclRhcmdldFRleHR1cmU/LTE6MSwoZCE9PXh8fHUhPT14LnZlcnNpb258fHAhPT1uLnRvbmVNYXBwaW5nKSYmKGMubWF0ZXJpYWwubmVlZHNVcGRhdGU9ITAsZD14LHU9eC52ZXJzaW9uLHA9bi50b25lTWFwcGluZyksXy51bnNoaWZ0KGMsYy5nZW9tZXRyeSxjLm1hdGVyaWFsLDAsMCxudWxsKSk6eCYmeC5pc1RleHR1cmUmJih2b2lkIDA9PT1sJiYobD1uZXcgc28obmV3IFR4KDIsMiksbmV3IGpkKHtuYW1lOiJCYWNrZ3JvdW5kTWF0ZXJpYWwiLHVuaWZvcm1zOkowKGpjLmJhY2tncm91bmQudW5pZm9ybXMpLHZlcnRleFNoYWRlcjpqYy5iYWNrZ3JvdW5kLnZlcnRleFNoYWRlcixmcmFnbWVudFNoYWRlcjpqYy5iYWNrZ3JvdW5kLmZyYWdtZW50U2hhZGVyLHNpZGU6eXgsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITEsZm9nOiExfSkpLGwuZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCJub3JtYWwiKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5tYXRlcmlhbCwibWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5pZm9ybXMudDJELnZhbHVlfX0pLGkudXBkYXRlKGwpKSxsLm1hdGVyaWFsLnVuaWZvcm1zLnQyRC52YWx1ZT14LCEwPT09eC5tYXRyaXhBdXRvVXBkYXRlJiZ4LnVwZGF0ZU1hdHJpeCgpLGwubWF0ZXJpYWwudW5pZm9ybXMudXZUcmFuc2Zvcm0udmFsdWUuY29weSh4Lm1hdHJpeCksKGQhPT14fHx1IT09eC52ZXJzaW9ufHxwIT09bi50b25lTWFwcGluZykmJihsLm1hdGVyaWFsLm5lZWRzVXBkYXRlPSEwLGQ9eCx1PXgudmVyc2lvbixwPW4udG9uZU1hcHBpbmcpLF8udW5zaGlmdChsLGwuZ2VvbWV0cnksbC5tYXRlcmlhbCwwLDAsbnVsbCkpfX19ZnVuY3Rpb24gak9lKG4sdCxlLGkpe2xldCByPW4uZ2V0UGFyYW1ldGVyKDM0OTIxKSxvPWkuaXNXZWJHTDI/bnVsbDp0LmdldCgiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKSxhPWkuaXNXZWJHTDJ8fG51bGwhPT1vLHM9e30sbD1fKG51bGwpLGM9bDtmdW5jdGlvbiBwKGNlKXtyZXR1cm4gaS5pc1dlYkdMMj9uLmJpbmRWZXJ0ZXhBcnJheShjZSk6by5iaW5kVmVydGV4QXJyYXlPRVMoY2UpfWZ1bmN0aW9uIGgoY2Upe3JldHVybiBpLmlzV2ViR0wyP24uZGVsZXRlVmVydGV4QXJyYXkoY2UpOm8uZGVsZXRlVmVydGV4QXJyYXlPRVMoY2UpfWZ1bmN0aW9uIF8oY2Upe2xldCBoZT1bXSxfZT1bXSwkPVtdO2ZvcihsZXQgZGU9MDtkZTxyO2RlKyspaGVbZGVdPTAsX2VbZGVdPTAsJFtkZV09MDtyZXR1cm57Z2VvbWV0cnk6bnVsbCxwcm9ncmFtOm51bGwsd2lyZWZyYW1lOiExLG5ld0F0dHJpYnV0ZXM6aGUsZW5hYmxlZEF0dHJpYnV0ZXM6X2UsYXR0cmlidXRlRGl2aXNvcnM6JCxvYmplY3Q6Y2UsYXR0cmlidXRlczp7fSxpbmRleDpudWxsfX1mdW5jdGlvbiB4KCl7bGV0IGNlPWMubmV3QXR0cmlidXRlcztmb3IobGV0IGhlPTAsX2U9Y2UubGVuZ3RoO2hlPF9lO2hlKyspY2VbaGVdPTB9ZnVuY3Rpb24gUihjZSl7SShjZSwwKX1mdW5jdGlvbiBJKGNlLGhlKXtsZXQgJD1jLmVuYWJsZWRBdHRyaWJ1dGVzLGRlPWMuYXR0cmlidXRlRGl2aXNvcnM7Yy5uZXdBdHRyaWJ1dGVzW2NlXT0xLDA9PT0kW2NlXSYmKG4uZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoY2UpLCRbY2VdPTEpLGRlW2NlXSE9PWhlJiYoKGkuaXNXZWJHTDI/bjp0LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpKVtpLmlzV2ViR0wyPyJ2ZXJ0ZXhBdHRyaWJEaXZpc29yIjoidmVydGV4QXR0cmliRGl2aXNvckFOR0xFIl0oY2UsaGUpLGRlW2NlXT1oZSl9ZnVuY3Rpb24gQigpe2xldCBjZT1jLm5ld0F0dHJpYnV0ZXMsaGU9Yy5lbmFibGVkQXR0cmlidXRlcztmb3IobGV0IF9lPTAsJD1oZS5sZW5ndGg7X2U8JDtfZSsrKWhlW19lXSE9PWNlW19lXSYmKG4uZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KF9lKSxoZVtfZV09MCl9ZnVuY3Rpb24gZWUoY2UsaGUsX2UsJCxkZSxwZSl7ITAhPT1pLmlzV2ViR0wyfHw1MTI0IT09X2UmJjUxMjUhPT1fZT9uLnZlcnRleEF0dHJpYlBvaW50ZXIoY2UsaGUsX2UsJCxkZSxwZSk6bi52ZXJ0ZXhBdHRyaWJJUG9pbnRlcihjZSxoZSxfZSxkZSxwZSl9ZnVuY3Rpb24gRCgpe3JlKCksYyE9PWwmJihjPWwscChjLm9iamVjdCkpfWZ1bmN0aW9uIHJlKCl7bC5nZW9tZXRyeT1udWxsLGwucHJvZ3JhbT1udWxsLGwud2lyZWZyYW1lPSExfXJldHVybntzZXR1cDpmdW5jdGlvbihjZSxoZSxfZSwkLGRlKXtsZXQgcGU9ITE7aWYoYSl7bGV0IEdlPWZ1bmN0aW9uKGNlLGhlLF9lKXtsZXQgJD0hMD09PV9lLndpcmVmcmFtZSxkZT1zW2NlLmlkXTt2b2lkIDA9PT1kZSYmKGRlPXt9LHNbY2UuaWRdPWRlKTtsZXQgcGU9ZGVbaGUuaWRdO3ZvaWQgMD09PXBlJiYocGU9e30sZGVbaGUuaWRdPXBlKTtsZXQgR2U9cGVbJF07cmV0dXJuIHZvaWQgMD09PUdlJiYoR2U9XyhpLmlzV2ViR0wyP24uY3JlYXRlVmVydGV4QXJyYXkoKTpvLmNyZWF0ZVZlcnRleEFycmF5T0VTKCkpLHBlWyRdPUdlKSxHZX0oJCxfZSxoZSk7YyE9PUdlJiYoYz1HZSxwKGMub2JqZWN0KSkscGU9ZnVuY3Rpb24oY2UsaGUpe2xldCBfZT1jLmF0dHJpYnV0ZXMsJD1jZS5hdHRyaWJ1dGVzLGRlPTA7Zm9yKGxldCBwZSBpbiAkKXtsZXQgR2U9X2VbcGVdLFNlPSRbcGVdO2lmKHZvaWQgMD09PUdlfHxHZS5hdHRyaWJ1dGUhPT1TZXx8R2UuZGF0YSE9PVNlLmRhdGEpcmV0dXJuITA7ZGUrK31yZXR1cm4gYy5hdHRyaWJ1dGVzTnVtIT09ZGV8fGMuaW5kZXghPT1oZX0oJCxkZSkscGUmJmZ1bmN0aW9uKGNlLGhlKXtsZXQgX2U9e30sJD1jZS5hdHRyaWJ1dGVzLGRlPTA7Zm9yKGxldCBwZSBpbiAkKXtsZXQgR2U9JFtwZV0sU2U9e307U2UuYXR0cmlidXRlPUdlLEdlLmRhdGEmJihTZS5kYXRhPUdlLmRhdGEpLF9lW3BlXT1TZSxkZSsrfWMuYXR0cmlidXRlcz1fZSxjLmF0dHJpYnV0ZXNOdW09ZGUsYy5pbmRleD1oZX0oJCxkZSl9ZWxzZXtsZXQgR2U9ITA9PT1oZS53aXJlZnJhbWU7KGMuZ2VvbWV0cnkhPT0kLmlkfHxjLnByb2dyYW0hPT1fZS5pZHx8Yy53aXJlZnJhbWUhPT1HZSkmJihjLmdlb21ldHJ5PSQuaWQsYy5wcm9ncmFtPV9lLmlkLGMud2lyZWZyYW1lPUdlLHBlPSEwKX0hMD09PWNlLmlzSW5zdGFuY2VkTWVzaCYmKHBlPSEwKSxudWxsIT09ZGUmJmUudXBkYXRlKGRlLDM0OTYzKSxwZSYmKGZ1bmN0aW9uKGNlLGhlLF9lLCQpe2lmKCExPT09aS5pc1dlYkdMMiYmKGNlLmlzSW5zdGFuY2VkTWVzaHx8JC5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5KSYmbnVsbD09PXQuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIikpcmV0dXJuO3goKTtsZXQgZGU9JC5hdHRyaWJ1dGVzLHBlPV9lLmdldEF0dHJpYnV0ZXMoKSxHZT1oZS5kZWZhdWx0QXR0cmlidXRlVmFsdWVzO2ZvcihsZXQgU2UgaW4gcGUpe2xldCBGZT1wZVtTZV07aWYoRmUubG9jYXRpb24+PTApe2xldCBsdD1kZVtTZV07aWYodm9pZCAwPT09bHQmJigiaW5zdGFuY2VNYXRyaXgiPT09U2UmJmNlLmluc3RhbmNlTWF0cml4JiYobHQ9Y2UuaW5zdGFuY2VNYXRyaXgpLCJpbnN0YW5jZUNvbG9yIj09PVNlJiZjZS5pbnN0YW5jZUNvbG9yJiYobHQ9Y2UuaW5zdGFuY2VDb2xvcikpLHZvaWQgMCE9PWx0KXtsZXQgTXQ9bHQubm9ybWFsaXplZCxwdD1sdC5pdGVtU2l6ZSxrZT1lLmdldChsdCk7aWYodm9pZCAwPT09a2UpY29udGludWU7bGV0IFRuPWtlLmJ1ZmZlcix3dD1rZS50eXBlLG9uPWtlLmJ5dGVzUGVyRWxlbWVudDtpZihsdC5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlKXtsZXQgQ2U9bHQuZGF0YSxtdD1DZS5zdHJpZGUsaHQ9bHQub2Zmc2V0O2lmKENlJiZDZS5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyKXtmb3IobGV0IG9lPTA7b2U8RmUubG9jYXRpb25TaXplO29lKyspSShGZS5sb2NhdGlvbitvZSxDZS5tZXNoUGVyQXR0cmlidXRlKTshMCE9PWNlLmlzSW5zdGFuY2VkTWVzaCYmdm9pZCAwPT09JC5fbWF4SW5zdGFuY2VDb3VudCYmKCQuX21heEluc3RhbmNlQ291bnQ9Q2UubWVzaFBlckF0dHJpYnV0ZSpDZS5jb3VudCl9ZWxzZSBmb3IobGV0IG9lPTA7b2U8RmUubG9jYXRpb25TaXplO29lKyspUihGZS5sb2NhdGlvbitvZSk7bi5iaW5kQnVmZmVyKDM0OTYyLFRuKTtmb3IobGV0IG9lPTA7b2U8RmUubG9jYXRpb25TaXplO29lKyspZWUoRmUubG9jYXRpb24rb2UscHQvRmUubG9jYXRpb25TaXplLHd0LE10LG10Km9uLChodCtwdC9GZS5sb2NhdGlvblNpemUqb2UpKm9uKX1lbHNle2lmKGx0LmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlKXtmb3IobGV0IENlPTA7Q2U8RmUubG9jYXRpb25TaXplO0NlKyspSShGZS5sb2NhdGlvbitDZSxsdC5tZXNoUGVyQXR0cmlidXRlKTshMCE9PWNlLmlzSW5zdGFuY2VkTWVzaCYmdm9pZCAwPT09JC5fbWF4SW5zdGFuY2VDb3VudCYmKCQuX21heEluc3RhbmNlQ291bnQ9bHQubWVzaFBlckF0dHJpYnV0ZSpsdC5jb3VudCl9ZWxzZSBmb3IobGV0IENlPTA7Q2U8RmUubG9jYXRpb25TaXplO0NlKyspUihGZS5sb2NhdGlvbitDZSk7bi5iaW5kQnVmZmVyKDM0OTYyLFRuKTtmb3IobGV0IENlPTA7Q2U8RmUubG9jYXRpb25TaXplO0NlKyspZWUoRmUubG9jYXRpb24rQ2UscHQvRmUubG9jYXRpb25TaXplLHd0LE10LHB0Km9uLHB0L0ZlLmxvY2F0aW9uU2l6ZSpDZSpvbil9fWVsc2UgaWYodm9pZCAwIT09R2Upe2xldCBNdD1HZVtTZV07aWYodm9pZCAwIT09TXQpc3dpdGNoKE10Lmxlbmd0aCl7Y2FzZSAyOm4udmVydGV4QXR0cmliMmZ2KEZlLmxvY2F0aW9uLE10KTticmVhaztjYXNlIDM6bi52ZXJ0ZXhBdHRyaWIzZnYoRmUubG9jYXRpb24sTXQpO2JyZWFrO2Nhc2UgNDpuLnZlcnRleEF0dHJpYjRmdihGZS5sb2NhdGlvbixNdCk7YnJlYWs7ZGVmYXVsdDpuLnZlcnRleEF0dHJpYjFmdihGZS5sb2NhdGlvbixNdCl9fX19QigpfShjZSxoZSxfZSwkKSxudWxsIT09ZGUmJm4uYmluZEJ1ZmZlcigzNDk2MyxlLmdldChkZSkuYnVmZmVyKSl9LHJlc2V0OkQscmVzZXREZWZhdWx0U3RhdGU6cmUsZGlzcG9zZTpmdW5jdGlvbigpe0QoKTtmb3IobGV0IGNlIGluIHMpe2xldCBoZT1zW2NlXTtmb3IobGV0IF9lIGluIGhlKXtsZXQgJD1oZVtfZV07Zm9yKGxldCBkZSBpbiAkKWgoJFtkZV0ub2JqZWN0KSxkZWxldGUgJFtkZV07ZGVsZXRlIGhlW19lXX1kZWxldGUgc1tjZV19fSxyZWxlYXNlU3RhdGVzT2ZHZW9tZXRyeTpmdW5jdGlvbihjZSl7aWYodm9pZCAwPT09c1tjZS5pZF0pcmV0dXJuO2xldCBoZT1zW2NlLmlkXTtmb3IobGV0IF9lIGluIGhlKXtsZXQgJD1oZVtfZV07Zm9yKGxldCBkZSBpbiAkKWgoJFtkZV0ub2JqZWN0KSxkZWxldGUgJFtkZV07ZGVsZXRlIGhlW19lXX1kZWxldGUgc1tjZS5pZF19LHJlbGVhc2VTdGF0ZXNPZlByb2dyYW06ZnVuY3Rpb24oY2Upe2ZvcihsZXQgaGUgaW4gcyl7bGV0IF9lPXNbaGVdO2lmKHZvaWQgMD09PV9lW2NlLmlkXSljb250aW51ZTtsZXQgJD1fZVtjZS5pZF07Zm9yKGxldCBkZSBpbiAkKWgoJFtkZV0ub2JqZWN0KSxkZWxldGUgJFtkZV07ZGVsZXRlIF9lW2NlLmlkXX19LGluaXRBdHRyaWJ1dGVzOngsZW5hYmxlQXR0cmlidXRlOlIsZGlzYWJsZVVudXNlZEF0dHJpYnV0ZXM6Qn19ZnVuY3Rpb24gR09lKG4sdCxlLGkpe2xldCBvLHI9aS5pc1dlYkdMMjt0aGlzLnNldE1vZGU9ZnVuY3Rpb24oYyl7bz1jfSx0aGlzLnJlbmRlcj1mdW5jdGlvbihjLGQpe24uZHJhd0FycmF5cyhvLGMsZCksZS51cGRhdGUoZCxvLDEpfSx0aGlzLnJlbmRlckluc3RhbmNlcz1mdW5jdGlvbihjLGQsdSl7aWYoMD09PXUpcmV0dXJuO2xldCBwLGg7aWYocilwPW4saD0iZHJhd0FycmF5c0luc3RhbmNlZCI7ZWxzZSBpZihwPXQuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIiksaD0iZHJhd0FycmF5c0luc3RhbmNlZEFOR0xFIixudWxsPT09cClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTEJ1ZmZlclJlbmRlcmVyOiB1c2luZyBUSFJFRS5JbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSBidXQgaGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCBleHRlbnNpb24gQU5HTEVfaW5zdGFuY2VkX2FycmF5cy4iKTtwW2hdKG8sYyxkLHUpLGUudXBkYXRlKGQsbyx1KX19ZnVuY3Rpb24gV09lKG4sdCxlKXtsZXQgaTtmdW5jdGlvbiBvKFEpe2lmKCJoaWdocCI9PT1RKXtpZihuLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMywzNjMzOCkucHJlY2lzaW9uPjAmJm4uZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KDM1NjMyLDM2MzM4KS5wcmVjaXNpb24+MClyZXR1cm4iaGlnaHAiO1E9Im1lZGl1bXAifXJldHVybiJtZWRpdW1wIj09PVEmJm4uZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KDM1NjMzLDM2MzM3KS5wcmVjaXNpb24+MCYmbi5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoMzU2MzIsMzYzMzcpLnByZWNpc2lvbj4wPyJtZWRpdW1wIjoibG93cCJ9bGV0IGE9dHlwZW9mIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ8InUiJiZuIGluc3RhbmNlb2YgV2ViR0wyUmVuZGVyaW5nQ29udGV4dHx8dHlwZW9mIFdlYkdMMkNvbXB1dGVSZW5kZXJpbmdDb250ZXh0PCJ1IiYmbiBpbnN0YW5jZW9mIFdlYkdMMkNvbXB1dGVSZW5kZXJpbmdDb250ZXh0LHM9dm9pZCAwIT09ZS5wcmVjaXNpb24/ZS5wcmVjaXNpb246ImhpZ2hwIixsPW8ocyk7bCE9PXMmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IixzLCJub3Qgc3VwcG9ydGVkLCB1c2luZyIsbCwiaW5zdGVhZC4iKSxzPWwpO2xldCBjPWF8fHQuaGFzKCJXRUJHTF9kcmF3X2J1ZmZlcnMiKSxkPSEwPT09ZS5sb2dhcml0aG1pY0RlcHRoQnVmZmVyLHU9bi5nZXRQYXJhbWV0ZXIoMzQ5MzApLHA9bi5nZXRQYXJhbWV0ZXIoMzU2NjApLGg9bi5nZXRQYXJhbWV0ZXIoMzM3OSksbT1uLmdldFBhcmFtZXRlcigzNDA3NiksXz1uLmdldFBhcmFtZXRlcigzNDkyMSksTT1uLmdldFBhcmFtZXRlcigzNjM0NykseT1uLmdldFBhcmFtZXRlcigzNjM0OCkseD1uLmdldFBhcmFtZXRlcigzNjM0OSksUj1wPjAsST1hfHx0LmhhcygiT0VTX3RleHR1cmVfZmxvYXQiKTtyZXR1cm57aXNXZWJHTDI6YSxkcmF3QnVmZmVyczpjLGdldE1heEFuaXNvdHJvcHk6ZnVuY3Rpb24oKXtpZih2b2lkIDAhPT1pKXJldHVybiBpO2lmKCEwPT09dC5oYXMoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpKXtsZXQgUT10LmdldCgiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7aT1uLmdldFBhcmFtZXRlcihRLk1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCl9ZWxzZSBpPTA7cmV0dXJuIGl9LGdldE1heFByZWNpc2lvbjpvLHByZWNpc2lvbjpzLGxvZ2FyaXRobWljRGVwdGhCdWZmZXI6ZCxtYXhUZXh0dXJlczp1LG1heFZlcnRleFRleHR1cmVzOnAsbWF4VGV4dHVyZVNpemU6aCxtYXhDdWJlbWFwU2l6ZTptLG1heEF0dHJpYnV0ZXM6XyxtYXhWZXJ0ZXhVbmlmb3JtczpNLG1heFZhcnlpbmdzOnksbWF4RnJhZ21lbnRVbmlmb3Jtczp4LHZlcnRleFRleHR1cmVzOlIsZmxvYXRGcmFnbWVudFRleHR1cmVzOkksZmxvYXRWZXJ0ZXhUZXh0dXJlczpSJiZJLG1heFNhbXBsZXM6YT9uLmdldFBhcmFtZXRlcigzNjE4Myk6MH19ZnVuY3Rpb24gcU9lKG4pe2xldCB0PXRoaXMsZT1udWxsLGk9MCxyPSExLG89ITEsYT1uZXcgWGwscz1uZXcgeW8sbD17dmFsdWU6bnVsbCxuZWVkc1VwZGF0ZTohMX07ZnVuY3Rpb24gYygpe2wudmFsdWUhPT1lJiYobC52YWx1ZT1lLGwubmVlZHNVcGRhdGU9aT4wKSx0Lm51bVBsYW5lcz1pLHQubnVtSW50ZXJzZWN0aW9uPTB9ZnVuY3Rpb24gZCh1LHAsaCxtKXtsZXQgXz1udWxsIT09dT91Lmxlbmd0aDowLE09bnVsbDtpZigwIT09Xyl7aWYoTT1sLnZhbHVlLCEwIT09bXx8bnVsbD09PU0pe2xldCB5PWgrNCpfLHg9cC5tYXRyaXhXb3JsZEludmVyc2U7cy5nZXROb3JtYWxNYXRyaXgoeCksKG51bGw9PT1NfHxNLmxlbmd0aDx5KSYmKE09bmV3IEZsb2F0MzJBcnJheSh5KSk7Zm9yKGxldCBSPTAsST1oO1IhPT1fOysrUixJKz00KWEuY29weSh1W1JdKS5hcHBseU1hdHJpeDQoeCxzKSxhLm5vcm1hbC50b0FycmF5KE0sSSksTVtJKzNdPWEuY29uc3RhbnR9bC52YWx1ZT1NLGwubmVlZHNVcGRhdGU9ITB9cmV0dXJuIHQubnVtUGxhbmVzPV8sdC5udW1JbnRlcnNlY3Rpb249MCxNfXRoaXMudW5pZm9ybT1sLHRoaXMubnVtUGxhbmVzPTAsdGhpcy5udW1JbnRlcnNlY3Rpb249MCx0aGlzLmluaXQ9ZnVuY3Rpb24odSxwLGgpe2xldCBtPTAhPT11Lmxlbmd0aHx8cHx8MCE9PWl8fHI7cmV0dXJuIHI9cCxlPWQodSxoLDApLGk9dS5sZW5ndGgsbX0sdGhpcy5iZWdpblNoYWRvd3M9ZnVuY3Rpb24oKXtvPSEwLGQobnVsbCl9LHRoaXMuZW5kU2hhZG93cz1mdW5jdGlvbigpe289ITEsYygpfSx0aGlzLnNldFN0YXRlPWZ1bmN0aW9uKHUscCxoKXtsZXQgbT11LmNsaXBwaW5nUGxhbmVzLF89dS5jbGlwSW50ZXJzZWN0aW9uLE09dS5jbGlwU2hhZG93cyx5PW4uZ2V0KHUpO2lmKCFyfHxudWxsPT09bXx8MD09PW0ubGVuZ3RofHxvJiYhTSlvP2QobnVsbCk6YygpO2Vsc2V7bGV0IHg9bz8wOmksUj00KngsST15LmNsaXBwaW5nU3RhdGV8fG51bGw7bC52YWx1ZT1JLEk9ZChtLHAsUixoKTtmb3IobGV0IEI9MDtCIT09UjsrK0IpSVtCXT1lW0JdO3kuY2xpcHBpbmdTdGF0ZT1JLHRoaXMubnVtSW50ZXJzZWN0aW9uPV8/dGhpcy5udW1QbGFuZXM6MCx0aGlzLm51bVBsYW5lcys9eH19fWZ1bmN0aW9uIFhPZShuKXtsZXQgdD1uZXcgV2Vha01hcDtmdW5jdGlvbiBlKGEscyl7cmV0dXJuIHM9PT1ZMz9hLm1hcHBpbmc9V3g6cz09PVEzJiYoYS5tYXBwaW5nPXF4KSxhfWZ1bmN0aW9uIHIoYSl7bGV0IHM9YS50YXJnZXQ7cy5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixyKTtsZXQgbD10LmdldChzKTt2b2lkIDAhPT1sJiYodC5kZWxldGUocyksbC5kaXNwb3NlKCkpfXJldHVybntnZXQ6ZnVuY3Rpb24oYSl7aWYoYSYmYS5pc1RleHR1cmUmJiExPT09YS5pc1JlbmRlclRhcmdldFRleHR1cmUpe2xldCBzPWEubWFwcGluZztpZihzPT09WTN8fHM9PT1RMyl7aWYodC5oYXMoYSkpcmV0dXJuIGUodC5nZXQoYSkudGV4dHVyZSxhLm1hcHBpbmcpO3tsZXQgbD1hLmltYWdlO2lmKGwmJmwuaGVpZ2h0PjApe2xldCBjPW5ldyBJSShsLmhlaWdodC8yKTtyZXR1cm4gYy5mcm9tRXF1aXJlY3Rhbmd1bGFyVGV4dHVyZShuLGEpLHQuc2V0KGEsYyksYS5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixyKSxlKGMudGV4dHVyZSxhLm1hcHBpbmcpfXJldHVybiBudWxsfX19cmV0dXJuIGF9LGRpc3Bvc2U6ZnVuY3Rpb24oKXt0PW5ldyBXZWFrTWFwfX19amMucGh5c2ljYWw9e3VuaWZvcm1zOm5hKFtqYy5zdGFuZGFyZC51bmlmb3Jtcyx7Y2xlYXJjb2F0Ont2YWx1ZTowfSxjbGVhcmNvYXRNYXA6e3ZhbHVlOm51bGx9LGNsZWFyY29hdFJvdWdobmVzczp7dmFsdWU6MH0sY2xlYXJjb2F0Um91Z2huZXNzTWFwOnt2YWx1ZTpudWxsfSxjbGVhcmNvYXROb3JtYWxTY2FsZTp7dmFsdWU6bmV3ICRlKDEsMSl9LGNsZWFyY29hdE5vcm1hbE1hcDp7dmFsdWU6bnVsbH0sc2hlZW46e3ZhbHVlOjB9LHNoZWVuQ29sb3I6e3ZhbHVlOm5ldyBzbigwKX0sc2hlZW5Db2xvck1hcDp7dmFsdWU6bnVsbH0sc2hlZW5Sb3VnaG5lc3M6e3ZhbHVlOjF9LHNoZWVuUm91Z2huZXNzTWFwOnt2YWx1ZTpudWxsfSx0cmFuc21pc3Npb246e3ZhbHVlOjB9LHRyYW5zbWlzc2lvbk1hcDp7dmFsdWU6bnVsbH0sdHJhbnNtaXNzaW9uU2FtcGxlclNpemU6e3ZhbHVlOm5ldyAkZX0sdHJhbnNtaXNzaW9uU2FtcGxlck1hcDp7dmFsdWU6bnVsbH0sdGhpY2tuZXNzOnt2YWx1ZTowfSx0aGlja25lc3NNYXA6e3ZhbHVlOm51bGx9LGF0dGVudWF0aW9uRGlzdGFuY2U6e3ZhbHVlOjB9LGF0dGVudWF0aW9uQ29sb3I6e3ZhbHVlOm5ldyBzbigwKX0sc3BlY3VsYXJJbnRlbnNpdHk6e3ZhbHVlOjF9LHNwZWN1bGFySW50ZW5zaXR5TWFwOnt2YWx1ZTpudWxsfSxzcGVjdWxhckNvbG9yOnt2YWx1ZTpuZXcgc24oMSwxLDEpfSxzcGVjdWxhckNvbG9yTWFwOnt2YWx1ZTpudWxsfX1dKSx2ZXJ0ZXhTaGFkZXI6dmkubWVzaHBoeXNpY2FsX3ZlcnQsZnJhZ21lbnRTaGFkZXI6dmkubWVzaHBoeXNpY2FsX2ZyYWd9O3ZhciB4bT1jbGFzcyBleHRlbmRzIFN4e2NvbnN0cnVjdG9yKHQ9LTEsZT0xLGk9MSxyPS0xLG89LjEsYT0yZTMpe3N1cGVyKCksdGhpcy50eXBlPSJPcnRob2dyYXBoaWNDYW1lcmEiLHRoaXMuem9vbT0xLHRoaXMudmlldz1udWxsLHRoaXMubGVmdD10LHRoaXMucmlnaHQ9ZSx0aGlzLnRvcD1pLHRoaXMuYm90dG9tPXIsdGhpcy5uZWFyPW8sdGhpcy5mYXI9YSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jb3B5KHQsZSl7cmV0dXJuIHN1cGVyLmNvcHkodCxlKSx0aGlzLmxlZnQ9dC5sZWZ0LHRoaXMucmlnaHQ9dC5yaWdodCx0aGlzLnRvcD10LnRvcCx0aGlzLmJvdHRvbT10LmJvdHRvbSx0aGlzLm5lYXI9dC5uZWFyLHRoaXMuZmFyPXQuZmFyLHRoaXMuem9vbT10Lnpvb20sdGhpcy52aWV3PW51bGw9PT10LnZpZXc/bnVsbDpPYmplY3QuYXNzaWduKHt9LHQudmlldyksdGhpc31zZXRWaWV3T2Zmc2V0KHQsZSxpLHIsbyxhKXtudWxsPT09dGhpcy52aWV3JiYodGhpcy52aWV3PXtlbmFibGVkOiEwLGZ1bGxXaWR0aDoxLGZ1bGxIZWlnaHQ6MSxvZmZzZXRYOjAsb2Zmc2V0WTowLHdpZHRoOjEsaGVpZ2h0OjF9KSx0aGlzLnZpZXcuZW5hYmxlZD0hMCx0aGlzLnZpZXcuZnVsbFdpZHRoPXQsdGhpcy52aWV3LmZ1bGxIZWlnaHQ9ZSx0aGlzLnZpZXcub2Zmc2V0WD1pLHRoaXMudmlldy5vZmZzZXRZPXIsdGhpcy52aWV3LndpZHRoPW8sdGhpcy52aWV3LmhlaWdodD1hLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWNsZWFyVmlld09mZnNldCgpe251bGwhPT10aGlzLnZpZXcmJih0aGlzLnZpZXcuZW5hYmxlZD0hMSksdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9dXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpe2xldCB0PSh0aGlzLnJpZ2h0LXRoaXMubGVmdCkvKDIqdGhpcy56b29tKSxlPSh0aGlzLnRvcC10aGlzLmJvdHRvbSkvKDIqdGhpcy56b29tKSxpPSh0aGlzLnJpZ2h0K3RoaXMubGVmdCkvMixyPSh0aGlzLnRvcCt0aGlzLmJvdHRvbSkvMixvPWktdCxhPWkrdCxzPXIrZSxsPXItZTtpZihudWxsIT09dGhpcy52aWV3JiZ0aGlzLnZpZXcuZW5hYmxlZCl7bGV0IGM9KHRoaXMucmlnaHQtdGhpcy5sZWZ0KS90aGlzLnZpZXcuZnVsbFdpZHRoL3RoaXMuem9vbSxkPSh0aGlzLnRvcC10aGlzLmJvdHRvbSkvdGhpcy52aWV3LmZ1bGxIZWlnaHQvdGhpcy56b29tO28rPWMqdGhpcy52aWV3Lm9mZnNldFgsYT1vK2MqdGhpcy52aWV3LndpZHRoLHMtPWQqdGhpcy52aWV3Lm9mZnNldFksbD1zLWQqdGhpcy52aWV3LmhlaWdodH10aGlzLnByb2plY3Rpb25NYXRyaXgubWFrZU9ydGhvZ3JhcGhpYyhvLGEscyxsLHRoaXMubmVhcix0aGlzLmZhciksdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMucHJvamVjdGlvbk1hdHJpeCkuaW52ZXJ0KCl9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3Quem9vbT10aGlzLnpvb20sZS5vYmplY3QubGVmdD10aGlzLmxlZnQsZS5vYmplY3QucmlnaHQ9dGhpcy5yaWdodCxlLm9iamVjdC50b3A9dGhpcy50b3AsZS5vYmplY3QuYm90dG9tPXRoaXMuYm90dG9tLGUub2JqZWN0Lm5lYXI9dGhpcy5uZWFyLGUub2JqZWN0LmZhcj10aGlzLmZhcixudWxsIT09dGhpcy52aWV3JiYoZS5vYmplY3Qudmlldz1PYmplY3QuYXNzaWduKHt9LHRoaXMudmlldykpLGV9fTt4bS5wcm90b3R5cGUuaXNPcnRob2dyYXBoaWNDYW1lcmE9ITA7dmFyIHRfPWNsYXNzIGV4dGVuZHMgamR7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy50eXBlPSJSYXdTaGFkZXJNYXRlcmlhbCJ9fTt0Xy5wcm90b3R5cGUuaXNSYXdTaGFkZXJNYXRlcmlhbD0hMDt2YXIgUTA9NCxDcD04LFVjPU1hdGgucG93KDIsQ3ApLGZ0ZT1bLjEyNSwuMjE1LC4zNSwuNDQ2LC41MjYsLjU4Ml0sZ3RlPUNwLVEwKzErZnRlLmxlbmd0aCxMMz1uZXcgeG0se19sb2RQbGFuZXM6bHgsX3NpemVMb2RzOm1lZSxfc2lnbWFzOmFJfT1ZT2UoKSxmZWU9bmV3IHNuLEIzPW51bGwsZm09KDErTWF0aC5zcXJ0KDUpKS8yLEwwPTEvZm0sZ2VlPVtuZXcgSygxLDEsMSksbmV3IEsoLTEsMSwxKSxuZXcgSygxLDEsLTEpLG5ldyBLKC0xLDEsLTEpLG5ldyBLKDAsZm0sTDApLG5ldyBLKDAsZm0sLUwwKSxuZXcgSyhMMCwwLGZtKSxuZXcgSygtTDAsMCxmbSksbmV3IEsoZm0sTDAsMCksbmV3IEsoLWZtLEwwLDApXSxBST1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9yZW5kZXJlcj10LHRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0PW51bGwsdGhpcy5fYmx1ck1hdGVyaWFsPWZ1bmN0aW9uKG4pe2xldCB0PW5ldyBGbG9hdDMyQXJyYXkoMjApLGU9bmV3IEsoMCwxLDApO3JldHVybiBuZXcgdF8oe25hbWU6IlNwaGVyaWNhbEdhdXNzaWFuQmx1ciIsZGVmaW5lczp7bjoyMH0sdW5pZm9ybXM6e2Vudk1hcDp7dmFsdWU6bnVsbH0sc2FtcGxlczp7dmFsdWU6MX0sd2VpZ2h0czp7dmFsdWU6dH0sbGF0aXR1ZGluYWw6e3ZhbHVlOiExfSxkVGhldGE6e3ZhbHVlOjB9LG1pcEludDp7dmFsdWU6MH0scG9sZUF4aXM6e3ZhbHVlOmV9fSx2ZXJ0ZXhTaGFkZXI6IlxuXG5cdFx0cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cdFx0cHJlY2lzaW9uIG1lZGl1bXAgaW50O1xuXG5cdFx0YXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5cdFx0YXR0cmlidXRlIHZlYzIgdXY7XG5cdFx0YXR0cmlidXRlIGZsb2F0IGZhY2VJbmRleDtcblxuXHRcdHZhcnlpbmcgdmVjMyB2T3V0cHV0RGlyZWN0aW9uO1xuXG5cdFx0Ly8gUkggY29vcmRpbmF0ZSBzeXN0ZW07IFBNUkVNIGZhY2UtaW5kZXhpbmcgY29udmVudGlvblxuXHRcdHZlYzMgZ2V0RGlyZWN0aW9uKCB2ZWMyIHV2LCBmbG9hdCBmYWNlICkge1xuXG5cdFx0XHR1diA9IDIuMCAqIHV2IC0gMS4wO1xuXG5cdFx0XHR2ZWMzIGRpcmVjdGlvbiA9IHZlYzMoIHV2LCAxLjAgKTtcblxuXHRcdFx0aWYgKCBmYWNlID09IDAuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4OyAvLyAoIDEsIHYsIHUgKSBwb3MgeFxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDEuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24ueHp5O1xuXHRcdFx0XHRkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtdSwgMSwgLXYgKSBwb3MgeVxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDIuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24ueCAqPSAtMS4wOyAvLyAoIC11LCB2LCAxICkgcG9zIHpcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAzLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnp5eDtcblx0XHRcdFx0ZGlyZWN0aW9uLnh6ICo9IC0xLjA7IC8vICggLTEsIHYsIC11ICkgbmVnIHhcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSA0LjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTtcblx0XHRcdFx0ZGlyZWN0aW9uLnh5ICo9IC0xLjA7IC8vICggLXUsIC0xLCB2ICkgbmVnIHlcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSA1LjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uLnogKj0gLTEuMDsgLy8gKCB1LCB2LCAtMSApIG5lZyB6XG5cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRpcmVjdGlvbjtcblxuXHRcdH1cblxuXHRcdHZvaWQgbWFpbigpIHtcblxuXHRcdFx0dk91dHB1dERpcmVjdGlvbiA9IGdldERpcmVjdGlvbiggdXYsIGZhY2VJbmRleCApO1xuXHRcdFx0Z2xfUG9zaXRpb24gPSB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7XG5cblx0XHR9XG5cdCIsZnJhZ21lbnRTaGFkZXI6IlxuXG5cdFx0XHRwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblx0XHRcdHByZWNpc2lvbiBtZWRpdW1wIGludDtcblxuXHRcdFx0dmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247XG5cblx0XHRcdHVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDtcblx0XHRcdHVuaWZvcm0gaW50IHNhbXBsZXM7XG5cdFx0XHR1bmlmb3JtIGZsb2F0IHdlaWdodHNbIG4gXTtcblx0XHRcdHVuaWZvcm0gYm9vbCBsYXRpdHVkaW5hbDtcblx0XHRcdHVuaWZvcm0gZmxvYXQgZFRoZXRhO1xuXHRcdFx0dW5pZm9ybSBmbG9hdCBtaXBJbnQ7XG5cdFx0XHR1bmlmb3JtIHZlYzMgcG9sZUF4aXM7XG5cblx0XHRcdCNkZWZpbmUgRU5WTUFQX1RZUEVfQ1VCRV9VVlxuXHRcdFx0I2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cblxuXHRcdFx0dmVjMyBnZXRTYW1wbGUoIGZsb2F0IHRoZXRhLCB2ZWMzIGF4aXMgKSB7XG5cblx0XHRcdFx0ZmxvYXQgY29zVGhldGEgPSBjb3MoIHRoZXRhICk7XG5cdFx0XHRcdC8vIFJvZHJpZ3VlcycgYXhpcy1hbmdsZSByb3RhdGlvblxuXHRcdFx0XHR2ZWMzIHNhbXBsZURpcmVjdGlvbiA9IHZPdXRwdXREaXJlY3Rpb24gKiBjb3NUaGV0YVxuXHRcdFx0XHRcdCsgY3Jvc3MoIGF4aXMsIHZPdXRwdXREaXJlY3Rpb24gKSAqIHNpbiggdGhldGEgKVxuXHRcdFx0XHRcdCsgYXhpcyAqIGRvdCggYXhpcywgdk91dHB1dERpcmVjdGlvbiApICogKCAxLjAgLSBjb3NUaGV0YSApO1xuXG5cdFx0XHRcdHJldHVybiBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXJlY3Rpb24sIG1pcEludCApO1xuXG5cdFx0XHR9XG5cblx0XHRcdHZvaWQgbWFpbigpIHtcblxuXHRcdFx0XHR2ZWMzIGF4aXMgPSBsYXRpdHVkaW5hbCA/IHBvbGVBeGlzIDogY3Jvc3MoIHBvbGVBeGlzLCB2T3V0cHV0RGlyZWN0aW9uICk7XG5cblx0XHRcdFx0aWYgKCBhbGwoIGVxdWFsKCBheGlzLCB2ZWMzKCAwLjAgKSApICkgKSB7XG5cblx0XHRcdFx0XHRheGlzID0gdmVjMyggdk91dHB1dERpcmVjdGlvbi56LCAwLjAsIC0gdk91dHB1dERpcmVjdGlvbi54ICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGF4aXMgPSBub3JtYWxpemUoIGF4aXMgKTtcblxuXHRcdFx0XHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCAwLjAsIDAuMCwgMC4wLCAxLjAgKTtcblx0XHRcdFx0Z2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyAwIF0gKiBnZXRTYW1wbGUoIDAuMCwgYXhpcyApO1xuXG5cdFx0XHRcdGZvciAoIGludCBpID0gMTsgaSA8IG47IGkrKyApIHtcblxuXHRcdFx0XHRcdGlmICggaSA+PSBzYW1wbGVzICkge1xuXG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGZsb2F0IHRoZXRhID0gZFRoZXRhICogZmxvYXQoIGkgKTtcblx0XHRcdFx0XHRnbF9GcmFnQ29sb3IucmdiICs9IHdlaWdodHNbIGkgXSAqIGdldFNhbXBsZSggLTEuMCAqIHRoZXRhLCBheGlzICk7XG5cdFx0XHRcdFx0Z2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyBpIF0gKiBnZXRTYW1wbGUoIHRoZXRhLCBheGlzICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cdFx0IixibGVuZGluZzp2cCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMX0pfSgpLHRoaXMuX2VxdWlyZWN0U2hhZGVyPW51bGwsdGhpcy5fY3ViZW1hcFNoYWRlcj1udWxsLHRoaXMuX2NvbXBpbGVNYXRlcmlhbCh0aGlzLl9ibHVyTWF0ZXJpYWwpfWZyb21TY2VuZSh0LGU9MCxpPS4xLHI9MTAwKXtCMz10aGlzLl9yZW5kZXJlci5nZXRSZW5kZXJUYXJnZXQoKTtsZXQgbz10aGlzLl9hbGxvY2F0ZVRhcmdldHMoKTtyZXR1cm4gdGhpcy5fc2NlbmVUb0N1YmVVVih0LGkscixvKSxlPjAmJnRoaXMuX2JsdXIobywwLDAsZSksdGhpcy5fYXBwbHlQTVJFTShvKSx0aGlzLl9jbGVhbnVwKG8pLG99ZnJvbUVxdWlyZWN0YW5ndWxhcih0LGU9bnVsbCl7cmV0dXJuIHRoaXMuX2Zyb21UZXh0dXJlKHQsZSl9ZnJvbUN1YmVtYXAodCxlPW51bGwpe3JldHVybiB0aGlzLl9mcm9tVGV4dHVyZSh0LGUpfWNvbXBpbGVDdWJlbWFwU2hhZGVyKCl7bnVsbD09PXRoaXMuX2N1YmVtYXBTaGFkZXImJih0aGlzLl9jdWJlbWFwU2hhZGVyPXZlZSgpLHRoaXMuX2NvbXBpbGVNYXRlcmlhbCh0aGlzLl9jdWJlbWFwU2hhZGVyKSl9Y29tcGlsZUVxdWlyZWN0YW5ndWxhclNoYWRlcigpe251bGw9PT10aGlzLl9lcXVpcmVjdFNoYWRlciYmKHRoaXMuX2VxdWlyZWN0U2hhZGVyPWJlZSgpLHRoaXMuX2NvbXBpbGVNYXRlcmlhbCh0aGlzLl9lcXVpcmVjdFNoYWRlcikpfWRpc3Bvc2UoKXt0aGlzLl9ibHVyTWF0ZXJpYWwuZGlzcG9zZSgpLG51bGwhPT10aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldCYmdGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQuZGlzcG9zZSgpLG51bGwhPT10aGlzLl9jdWJlbWFwU2hhZGVyJiZ0aGlzLl9jdWJlbWFwU2hhZGVyLmRpc3Bvc2UoKSxudWxsIT09dGhpcy5fZXF1aXJlY3RTaGFkZXImJnRoaXMuX2VxdWlyZWN0U2hhZGVyLmRpc3Bvc2UoKTtmb3IobGV0IHQ9MDt0PGx4Lmxlbmd0aDt0KyspbHhbdF0uZGlzcG9zZSgpfV9jbGVhbnVwKHQpe3RoaXMuX3JlbmRlcmVyLnNldFJlbmRlclRhcmdldChCMyksdC5zY2lzc29yVGVzdD0hMSxzSSh0LDAsMCx0LndpZHRoLHQuaGVpZ2h0KX1fZnJvbVRleHR1cmUodCxlKXtCMz10aGlzLl9yZW5kZXJlci5nZXRSZW5kZXJUYXJnZXQoKTtsZXQgaT1lfHx0aGlzLl9hbGxvY2F0ZVRhcmdldHModCk7cmV0dXJuIHRoaXMuX3RleHR1cmVUb0N1YmVVVih0LGkpLHRoaXMuX2FwcGx5UE1SRU0oaSksdGhpcy5fY2xlYW51cChpKSxpfV9hbGxvY2F0ZVRhcmdldHModCl7bGV0IGU9e21hZ0ZpbHRlcjppYSxtaW5GaWx0ZXI6aWEsZ2VuZXJhdGVNaXBtYXBzOiExLHR5cGU6cTAsZm9ybWF0OkNhLGVuY29kaW5nOndwLGRlcHRoQnVmZmVyOiExfSxpPV9lZShlKTtyZXR1cm4gaS5kZXB0aEJ1ZmZlcj0hdCxudWxsPT09dGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQmJih0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldD1fZWUoZSkpLGl9X2NvbXBpbGVNYXRlcmlhbCh0KXtsZXQgZT1uZXcgc28obHhbMF0sdCk7dGhpcy5fcmVuZGVyZXIuY29tcGlsZShlLEwzKX1fc2NlbmVUb0N1YmVVVih0LGUsaSxyKXtsZXQgcz1uZXcgcmEoOTAsMSxlLGkpLGw9WzEsLTEsMSwxLDEsMV0sYz1bMSwxLDEsLTEsLTEsLTFdLGQ9dGhpcy5fcmVuZGVyZXIsdT1kLmF1dG9DbGVhcixwPWQudG9uZU1hcHBpbmc7ZC5nZXRDbGVhckNvbG9yKGZlZSksZC50b25lTWFwcGluZz15cCxkLmF1dG9DbGVhcj0hMTtsZXQgaD1uZXcgdm0oe25hbWU6IlBNUkVNLkJhY2tncm91bmQiLHNpZGU6Ym8sZGVwdGhXcml0ZTohMSxkZXB0aFRlc3Q6ITF9KSxtPW5ldyBzbyhuZXcgeW0saCksXz0hMSxNPXQuYmFja2dyb3VuZDtNP00uaXNDb2xvciYmKGguY29sb3IuY29weShNKSx0LmJhY2tncm91bmQ9bnVsbCxfPSEwKTooaC5jb2xvci5jb3B5KGZlZSksXz0hMCk7Zm9yKGxldCB5PTA7eTw2O3krKyl7bGV0IHg9eSUzOzA9PT14PyhzLnVwLnNldCgwLGxbeV0sMCkscy5sb29rQXQoY1t5XSwwLDApKToxPT09eD8ocy51cC5zZXQoMCwwLGxbeV0pLHMubG9va0F0KDAsY1t5XSwwKSk6KHMudXAuc2V0KDAsbFt5XSwwKSxzLmxvb2tBdCgwLDAsY1t5XSkpLHNJKHIseCpVYyx5PjI/VWM6MCxVYyxVYyksZC5zZXRSZW5kZXJUYXJnZXQociksXyYmZC5yZW5kZXIobSxzKSxkLnJlbmRlcih0LHMpfW0uZ2VvbWV0cnkuZGlzcG9zZSgpLG0ubWF0ZXJpYWwuZGlzcG9zZSgpLGQudG9uZU1hcHBpbmc9cCxkLmF1dG9DbGVhcj11LHQuYmFja2dyb3VuZD1NfV90ZXh0dXJlVG9DdWJlVVYodCxlKXtsZXQgaT10aGlzLl9yZW5kZXJlcixyPXQubWFwcGluZz09PVd4fHx0Lm1hcHBpbmc9PT1xeDtyPyhudWxsPT09dGhpcy5fY3ViZW1hcFNoYWRlciYmKHRoaXMuX2N1YmVtYXBTaGFkZXI9dmVlKCkpLHRoaXMuX2N1YmVtYXBTaGFkZXIudW5pZm9ybXMuZmxpcEVudk1hcC52YWx1ZT0hMT09PXQuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPy0xOjEpOm51bGw9PT10aGlzLl9lcXVpcmVjdFNoYWRlciYmKHRoaXMuX2VxdWlyZWN0U2hhZGVyPWJlZSgpKTtsZXQgbz1yP3RoaXMuX2N1YmVtYXBTaGFkZXI6dGhpcy5fZXF1aXJlY3RTaGFkZXIsYT1uZXcgc28obHhbMF0sbykscz1vLnVuaWZvcm1zO3MuZW52TWFwLnZhbHVlPXQscnx8cy50ZXhlbFNpemUudmFsdWUuc2V0KDEvdC5pbWFnZS53aWR0aCwxL3QuaW1hZ2UuaGVpZ2h0KSxzSShlLDAsMCwzKlVjLDIqVWMpLGkuc2V0UmVuZGVyVGFyZ2V0KGUpLGkucmVuZGVyKGEsTDMpfV9hcHBseVBNUkVNKHQpe2xldCBlPXRoaXMuX3JlbmRlcmVyLGk9ZS5hdXRvQ2xlYXI7ZS5hdXRvQ2xlYXI9ITE7Zm9yKGxldCByPTE7cjxndGU7cisrKXtsZXQgbz1NYXRoLnNxcnQoYUlbcl0qYUlbcl0tYUlbci0xXSphSVtyLTFdKTt0aGlzLl9ibHVyKHQsci0xLHIsbyxnZWVbKHItMSklZ2VlLmxlbmd0aF0pfWUuYXV0b0NsZWFyPWl9X2JsdXIodCxlLGkscixvKXtsZXQgYT10aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldDt0aGlzLl9oYWxmQmx1cih0LGEsZSxpLHIsImxhdGl0dWRpbmFsIixvKSx0aGlzLl9oYWxmQmx1cihhLHQsaSxpLHIsImxvbmdpdHVkaW5hbCIsbyl9X2hhbGZCbHVyKHQsZSxpLHIsbyxhLHMpe2xldCBsPXRoaXMuX3JlbmRlcmVyLGM9dGhpcy5fYmx1ck1hdGVyaWFsOyJsYXRpdHVkaW5hbCIhPT1hJiYibG9uZ2l0dWRpbmFsIiE9PWEmJmNvbnNvbGUuZXJyb3IoImJsdXIgZGlyZWN0aW9uIG11c3QgYmUgZWl0aGVyIGxhdGl0dWRpbmFsIG9yIGxvbmdpdHVkaW5hbCEiKTtsZXQgdT1uZXcgc28obHhbcl0sYykscD1jLnVuaWZvcm1zLGg9bWVlW2ldLTEsbT1pc0Zpbml0ZShvKT9NYXRoLlBJLygyKmgpOjIqTWF0aC5QSS8zOSxfPW8vbSxNPWlzRmluaXRlKG8pPzErTWF0aC5mbG9vcigzKl8pOjIwO00+MjAmJmNvbnNvbGUud2Fybihgc2lnbWFSYWRpYW5zLCAke299LCBpcyB0b28gbGFyZ2UgYW5kIHdpbGwgY2xpcCwgYXMgaXQgcmVxdWVzdGVkICR7TX0gc2FtcGxlcyB3aGVuIHRoZSBtYXhpbXVtIGlzIHNldCB0byAyMGApO2xldCB5PVtdLHg9MDtmb3IobGV0IGVlPTA7ZWU8MjA7KytlZSl7bGV0IFE9ZWUvXyx3ZT1NYXRoLmV4cCgtUSpRLzIpO3kucHVzaCh3ZSksMD09PWVlP3grPXdlOmVlPE0mJih4Kz0yKndlKX1mb3IobGV0IGVlPTA7ZWU8eS5sZW5ndGg7ZWUrKyl5W2VlXT15W2VlXS94O3AuZW52TWFwLnZhbHVlPXQudGV4dHVyZSxwLnNhbXBsZXMudmFsdWU9TSxwLndlaWdodHMudmFsdWU9eSxwLmxhdGl0dWRpbmFsLnZhbHVlPSJsYXRpdHVkaW5hbCI9PT1hLHMmJihwLnBvbGVBeGlzLnZhbHVlPXMpLHAuZFRoZXRhLnZhbHVlPW0scC5taXBJbnQudmFsdWU9Q3AtaTtsZXQgUj1tZWVbcl07c0koZSwzKk1hdGgubWF4KDAsVWMtMipSKSwoMD09PXI/MDoyKlVjKSsyKlIqKHI+Q3AtUTA/ci1DcCtRMDowKSwzKlIsMipSKSxsLnNldFJlbmRlclRhcmdldChlKSxsLnJlbmRlcih1LEwzKX19O2Z1bmN0aW9uIFlPZSgpe2xldCBuPVtdLHQ9W10sZT1bXSxpPUNwO2ZvcihsZXQgcj0wO3I8Z3RlO3IrKyl7bGV0IG89TWF0aC5wb3coMixpKTt0LnB1c2gobyk7bGV0IGE9MS9vO3I+Q3AtUTA/YT1mdGVbci1DcCtRMC0xXTowPT09ciYmKGE9MCksZS5wdXNoKGEpO2xldCBzPTEvKG8tMSksbD0tcy8yLGM9MStzLzIsZD1bbCxsLGMsbCxjLGMsbCxsLGMsYyxsLGNdLHU9NixwPTYsaD0zLG09MixfPTEsTT1uZXcgRmxvYXQzMkFycmF5KGgqcCp1KSx5PW5ldyBGbG9hdDMyQXJyYXkobSpwKnUpLHg9bmV3IEZsb2F0MzJBcnJheShfKnAqdSk7Zm9yKGxldCBJPTA7STx1O0krKyl7bGV0IEI9SSUzKjIvMy0xLGVlPUk+Mj8wOi0xO00uc2V0KFtCLGVlLDAsQisyLzMsZWUsMCxCKzIvMyxlZSsxLDAsQixlZSwwLEIrMi8zLGVlKzEsMCxCLGVlKzEsMF0saCpwKkkpLHkuc2V0KGQsbSpwKkkpLHguc2V0KFtJLEksSSxJLEksSV0sXypwKkkpfWxldCBSPW5ldyBHaTtSLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBBcihNLGgpKSxSLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBBcih5LG0pKSxSLnNldEF0dHJpYnV0ZSgiZmFjZUluZGV4IixuZXcgQXIoeCxfKSksbi5wdXNoKFIpLGk+UTAmJmktLX1yZXR1cm57X2xvZFBsYW5lczpuLF9zaXplTG9kczp0LF9zaWdtYXM6ZX19ZnVuY3Rpb24gX2VlKG4pe2xldCB0PW5ldyB0cygzKlVjLDMqVWMsbik7cmV0dXJuIHQudGV4dHVyZS5tYXBwaW5nPUpJLHQudGV4dHVyZS5uYW1lPSJQTVJFTS5jdWJlVXYiLHQuc2Npc3NvclRlc3Q9ITAsdH1mdW5jdGlvbiBzSShuLHQsZSxpLHIpe24udmlld3BvcnQuc2V0KHQsZSxpLHIpLG4uc2Npc3Nvci5zZXQodCxlLGkscil9ZnVuY3Rpb24gYmVlKCl7bGV0IG49bmV3ICRlKDEsMSk7cmV0dXJuIG5ldyB0Xyh7bmFtZToiRXF1aXJlY3Rhbmd1bGFyVG9DdWJlVVYiLHVuaWZvcm1zOntlbnZNYXA6e3ZhbHVlOm51bGx9LHRleGVsU2l6ZTp7dmFsdWU6bn19LHZlcnRleFNoYWRlcjoiXG5cblx0XHRwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblx0XHRwcmVjaXNpb24gbWVkaXVtcCBpbnQ7XG5cblx0XHRhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcblx0XHRhdHRyaWJ1dGUgdmVjMiB1djtcblx0XHRhdHRyaWJ1dGUgZmxvYXQgZmFjZUluZGV4O1xuXG5cdFx0dmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247XG5cblx0XHQvLyBSSCBjb29yZGluYXRlIHN5c3RlbTsgUE1SRU0gZmFjZS1pbmRleGluZyBjb252ZW50aW9uXG5cdFx0dmVjMyBnZXREaXJlY3Rpb24oIHZlYzIgdXYsIGZsb2F0IGZhY2UgKSB7XG5cblx0XHRcdHV2ID0gMi4wICogdXYgLSAxLjA7XG5cblx0XHRcdHZlYzMgZGlyZWN0aW9uID0gdmVjMyggdXYsIDEuMCApO1xuXG5cdFx0XHRpZiAoIGZhY2UgPT0gMC4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi56eXg7IC8vICggMSwgdiwgdSApIHBvcyB4XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMS4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7XG5cdFx0XHRcdGRpcmVjdGlvbi54eiAqPSAtMS4wOyAvLyAoIC11LCAxLCAtdiApIHBvcyB5XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMi4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbi54ICo9IC0xLjA7IC8vICggLXUsIHYsIDEgKSBwb3MgelxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDMuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4O1xuXHRcdFx0XHRkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtMSwgdiwgLXUgKSBuZWcgeFxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDQuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24ueHp5O1xuXHRcdFx0XHRkaXJlY3Rpb24ueHkgKj0gLTEuMDsgLy8gKCAtdSwgLTEsIHYgKSBuZWcgeVxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDUuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24ueiAqPSAtMS4wOyAvLyAoIHUsIHYsIC0xICkgbmVnIHpcblxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGlyZWN0aW9uO1xuXG5cdFx0fVxuXG5cdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHR2T3V0cHV0RGlyZWN0aW9uID0gZ2V0RGlyZWN0aW9uKCB1diwgZmFjZUluZGV4ICk7XG5cdFx0XHRnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcblxuXHRcdH1cblx0IixmcmFnbWVudFNoYWRlcjoiXG5cblx0XHRcdHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXHRcdFx0cHJlY2lzaW9uIG1lZGl1bXAgaW50O1xuXG5cdFx0XHR2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjtcblxuXHRcdFx0dW5pZm9ybSBzYW1wbGVyMkQgZW52TWFwO1xuXHRcdFx0dW5pZm9ybSB2ZWMyIHRleGVsU2l6ZTtcblxuXHRcdFx0I2luY2x1ZGUgPGNvbW1vbj5cblxuXHRcdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHRcdGdsX0ZyYWdDb2xvciA9IHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApO1xuXG5cdFx0XHRcdHZlYzMgb3V0cHV0RGlyZWN0aW9uID0gbm9ybWFsaXplKCB2T3V0cHV0RGlyZWN0aW9uICk7XG5cdFx0XHRcdHZlYzIgdXYgPSBlcXVpcmVjdFV2KCBvdXRwdXREaXJlY3Rpb24gKTtcblxuXHRcdFx0XHR2ZWMyIGYgPSBmcmFjdCggdXYgLyB0ZXhlbFNpemUgLSAwLjUgKTtcblx0XHRcdFx0dXYgLT0gZiAqIHRleGVsU2l6ZTtcblx0XHRcdFx0dmVjMyB0bCA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7XG5cdFx0XHRcdHV2LnggKz0gdGV4ZWxTaXplLng7XG5cdFx0XHRcdHZlYzMgdHIgPSB0ZXh0dXJlMkQgKCBlbnZNYXAsIHV2ICkucmdiO1xuXHRcdFx0XHR1di55ICs9IHRleGVsU2l6ZS55O1xuXHRcdFx0XHR2ZWMzIGJyID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjtcblx0XHRcdFx0dXYueCAtPSB0ZXhlbFNpemUueDtcblx0XHRcdFx0dmVjMyBibCA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7XG5cblx0XHRcdFx0dmVjMyB0bSA9IG1peCggdGwsIHRyLCBmLnggKTtcblx0XHRcdFx0dmVjMyBibSA9IG1peCggYmwsIGJyLCBmLnggKTtcblx0XHRcdFx0Z2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggdG0sIGJtLCBmLnkgKTtcblxuXHRcdFx0fVxuXHRcdCIsYmxlbmRpbmc6dnAsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITF9KX1mdW5jdGlvbiB2ZWUoKXtyZXR1cm4gbmV3IHRfKHtuYW1lOiJDdWJlbWFwVG9DdWJlVVYiLHVuaWZvcm1zOntlbnZNYXA6e3ZhbHVlOm51bGx9LGZsaXBFbnZNYXA6e3ZhbHVlOi0xfX0sdmVydGV4U2hhZGVyOiJcblxuXHRcdHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXHRcdHByZWNpc2lvbiBtZWRpdW1wIGludDtcblxuXHRcdGF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuXHRcdGF0dHJpYnV0ZSB2ZWMyIHV2O1xuXHRcdGF0dHJpYnV0ZSBmbG9hdCBmYWNlSW5kZXg7XG5cblx0XHR2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjtcblxuXHRcdC8vIFJIIGNvb3JkaW5hdGUgc3lzdGVtOyBQTVJFTSBmYWNlLWluZGV4aW5nIGNvbnZlbnRpb25cblx0XHR2ZWMzIGdldERpcmVjdGlvbiggdmVjMiB1diwgZmxvYXQgZmFjZSApIHtcblxuXHRcdFx0dXYgPSAyLjAgKiB1diAtIDEuMDtcblxuXHRcdFx0dmVjMyBkaXJlY3Rpb24gPSB2ZWMzKCB1diwgMS4wICk7XG5cblx0XHRcdGlmICggZmFjZSA9PSAwLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnp5eDsgLy8gKCAxLCB2LCB1ICkgcG9zIHhcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTtcblx0XHRcdFx0ZGlyZWN0aW9uLnh6ICo9IC0xLjA7IC8vICggLXUsIDEsIC12ICkgcG9zIHlcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAyLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uLnggKj0gLTEuMDsgLy8gKCAtdSwgdiwgMSApIHBvcyB6XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMy4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi56eXg7XG5cdFx0XHRcdGRpcmVjdGlvbi54eiAqPSAtMS4wOyAvLyAoIC0xLCB2LCAtdSApIG5lZyB4XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gNC4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7XG5cdFx0XHRcdGRpcmVjdGlvbi54eSAqPSAtMS4wOyAvLyAoIC11LCAtMSwgdiApIG5lZyB5XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gNS4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbi56ICo9IC0xLjA7IC8vICggdSwgdiwgLTEgKSBuZWcgelxuXG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkaXJlY3Rpb247XG5cblx0XHR9XG5cblx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdHZPdXRwdXREaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oIHV2LCBmYWNlSW5kZXggKTtcblx0XHRcdGdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24sIDEuMCApO1xuXG5cdFx0fVxuXHQiLGZyYWdtZW50U2hhZGVyOiJcblxuXHRcdFx0cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cdFx0XHRwcmVjaXNpb24gbWVkaXVtcCBpbnQ7XG5cblx0XHRcdHVuaWZvcm0gZmxvYXQgZmxpcEVudk1hcDtcblxuXHRcdFx0dmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247XG5cblx0XHRcdHVuaWZvcm0gc2FtcGxlckN1YmUgZW52TWFwO1xuXG5cdFx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdFx0Z2xfRnJhZ0NvbG9yID0gdGV4dHVyZUN1YmUoIGVudk1hcCwgdmVjMyggZmxpcEVudk1hcCAqIHZPdXRwdXREaXJlY3Rpb24ueCwgdk91dHB1dERpcmVjdGlvbi55eiApICk7XG5cblx0XHRcdH1cblx0XHQiLGJsZW5kaW5nOnZwLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExfSl9ZnVuY3Rpb24gWk9lKG4pe2xldCB0PW5ldyBXZWFrTWFwLGU9bnVsbDtmdW5jdGlvbiBvKHMpe2xldCBsPXMudGFyZ2V0O2wucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsbyk7bGV0IGM9dC5nZXQobCk7dm9pZCAwIT09YyYmKHQuZGVsZXRlKGwpLGMuZGlzcG9zZSgpKX1yZXR1cm57Z2V0OmZ1bmN0aW9uKHMpe2lmKHMmJnMuaXNUZXh0dXJlKXtsZXQgbD1zLm1hcHBpbmcsYz1sPT09WTN8fGw9PT1RMyxkPWw9PT1XeHx8bD09PXF4O2lmKGN8fGQpe2lmKHMuaXNSZW5kZXJUYXJnZXRUZXh0dXJlJiYhMD09PXMubmVlZHNQTVJFTVVwZGF0ZSl7cy5uZWVkc1BNUkVNVXBkYXRlPSExO2xldCB1PXQuZ2V0KHMpO3JldHVybiBudWxsPT09ZSYmKGU9bmV3IEFJKG4pKSx1PWM/ZS5mcm9tRXF1aXJlY3Rhbmd1bGFyKHMsdSk6ZS5mcm9tQ3ViZW1hcChzLHUpLHQuc2V0KHMsdSksdS50ZXh0dXJlfWlmKHQuaGFzKHMpKXJldHVybiB0LmdldChzKS50ZXh0dXJlO3tsZXQgdT1zLmltYWdlO2lmKGMmJnUmJnUuaGVpZ2h0PjB8fGQmJnUmJmZ1bmN0aW9uKHMpe2xldCBsPTA7Zm9yKGxldCBkPTA7ZDw2O2QrKyl2b2lkIDAhPT1zW2RdJiZsKys7cmV0dXJuIDY9PT1sfSh1KSl7bnVsbD09PWUmJihlPW5ldyBBSShuKSk7bGV0IHA9Yz9lLmZyb21FcXVpcmVjdGFuZ3VsYXIocyk6ZS5mcm9tQ3ViZW1hcChzKTtyZXR1cm4gdC5zZXQocyxwKSxzLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLG8pLHAudGV4dHVyZX1yZXR1cm4gbnVsbH19fXJldHVybiBzfSxkaXNwb3NlOmZ1bmN0aW9uKCl7dD1uZXcgV2Vha01hcCxudWxsIT09ZSYmKGUuZGlzcG9zZSgpLGU9bnVsbCl9fX1mdW5jdGlvbiBLT2Uobil7bGV0IHQ9e307ZnVuY3Rpb24gZShpKXtpZih2b2lkIDAhPT10W2ldKXJldHVybiB0W2ldO2xldCByO3N3aXRjaChpKXtjYXNlIldFQkdMX2RlcHRoX3RleHR1cmUiOnI9bi5nZXRFeHRlbnNpb24oIldFQkdMX2RlcHRoX3RleHR1cmUiKXx8bi5nZXRFeHRlbnNpb24oIk1PWl9XRUJHTF9kZXB0aF90ZXh0dXJlIil8fG4uZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfZGVwdGhfdGV4dHVyZSIpO2JyZWFrO2Nhc2UiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIjpyPW4uZ2V0RXh0ZW5zaW9uKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8bi5nZXRFeHRlbnNpb24oIk1PWl9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8bi5nZXRFeHRlbnNpb24oIldFQktJVF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTticmVhaztjYXNlIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIjpyPW4uZ2V0RXh0ZW5zaW9uKCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpfHxuLmdldEV4dGVuc2lvbigiTU9aX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil8fG4uZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKTticmVhaztjYXNlIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyI6cj1uLmdldEV4dGVuc2lvbigiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIil8fG4uZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIik7YnJlYWs7ZGVmYXVsdDpyPW4uZ2V0RXh0ZW5zaW9uKGkpfXJldHVybiB0W2ldPXIscn1yZXR1cm57aGFzOmZ1bmN0aW9uKGkpe3JldHVybiBudWxsIT09ZShpKX0saW5pdDpmdW5jdGlvbihpKXtpLmlzV2ViR0wyP2UoIkVYVF9jb2xvcl9idWZmZXJfZmxvYXQiKTooZSgiV0VCR0xfZGVwdGhfdGV4dHVyZSIpLGUoIk9FU190ZXh0dXJlX2Zsb2F0IiksZSgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpLGUoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIiksZSgiT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIiksZSgiT0VTX2VsZW1lbnRfaW5kZXhfdWludCIpLGUoIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IiksZSgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpKSxlKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKSxlKCJFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQiKSxlKCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKX0sZ2V0OmZ1bmN0aW9uKGkpe2xldCByPWUoaSk7cmV0dXJuIG51bGw9PT1yJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6ICIraSsiIGV4dGVuc2lvbiBub3Qgc3VwcG9ydGVkLiIpLHJ9fX1mdW5jdGlvbiBKT2Uobix0LGUsaSl7bGV0IHI9e30sbz1uZXcgV2Vha01hcDtmdW5jdGlvbiBhKHUpe2xldCBwPXUudGFyZ2V0O251bGwhPT1wLmluZGV4JiZ0LnJlbW92ZShwLmluZGV4KTtmb3IobGV0IG0gaW4gcC5hdHRyaWJ1dGVzKXQucmVtb3ZlKHAuYXR0cmlidXRlc1ttXSk7cC5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixhKSxkZWxldGUgcltwLmlkXTtsZXQgaD1vLmdldChwKTtoJiYodC5yZW1vdmUoaCksby5kZWxldGUocCkpLGkucmVsZWFzZVN0YXRlc09mR2VvbWV0cnkocCksITA9PT1wLmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkmJmRlbGV0ZSBwLl9tYXhJbnN0YW5jZUNvdW50LGUubWVtb3J5Lmdlb21ldHJpZXMtLX1mdW5jdGlvbiBjKHUpe2xldCBwPVtdLGg9dS5pbmRleCxtPXUuYXR0cmlidXRlcy5wb3NpdGlvbixfPTA7aWYobnVsbCE9PWgpe2xldCB4PWguYXJyYXk7Xz1oLnZlcnNpb247Zm9yKGxldCBSPTAsST14Lmxlbmd0aDtSPEk7Uis9Myl7bGV0IEI9eFtSKzBdLGVlPXhbUisxXSxRPXhbUisyXTtwLnB1c2goQixlZSxlZSxRLFEsQil9fWVsc2V7Xz1tLnZlcnNpb247Zm9yKGxldCBSPTAsST1tLmFycmF5Lmxlbmd0aC8zLTE7UjxJO1IrPTMpe2xldCBCPVIrMCxlZT1SKzEsUT1SKzI7cC5wdXNoKEIsZWUsZWUsUSxRLEIpfX1sZXQgTT1uZXcoaHRlKHApP0RJOlRJKShwLDEpO00udmVyc2lvbj1fO2xldCB5PW8uZ2V0KHUpO3kmJnQucmVtb3ZlKHkpLG8uc2V0KHUsTSl9cmV0dXJue2dldDpmdW5jdGlvbih1LHApe3JldHVybiEwPT09cltwLmlkXXx8KHAuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsYSkscltwLmlkXT0hMCxlLm1lbW9yeS5nZW9tZXRyaWVzKyspLHB9LHVwZGF0ZTpmdW5jdGlvbih1KXtsZXQgcD11LmF0dHJpYnV0ZXM7Zm9yKGxldCBtIGluIHApdC51cGRhdGUocFttXSwzNDk2Mik7bGV0IGg9dS5tb3JwaEF0dHJpYnV0ZXM7Zm9yKGxldCBtIGluIGgpe2xldCBfPWhbbV07Zm9yKGxldCBNPTAseT1fLmxlbmd0aDtNPHk7TSsrKXQudXBkYXRlKF9bTV0sMzQ5NjIpfX0sZ2V0V2lyZWZyYW1lQXR0cmlidXRlOmZ1bmN0aW9uKHUpe2xldCBwPW8uZ2V0KHUpO2lmKHApe2xldCBoPXUuaW5kZXg7bnVsbCE9PWgmJnAudmVyc2lvbjxoLnZlcnNpb24mJmModSl9ZWxzZSBjKHUpO3JldHVybiBvLmdldCh1KX19fWZ1bmN0aW9uICRPZShuLHQsZSxpKXtsZXQgbyxzLGwscj1pLmlzV2ViR0wyO3RoaXMuc2V0TW9kZT1mdW5jdGlvbihwKXtvPXB9LHRoaXMuc2V0SW5kZXg9ZnVuY3Rpb24ocCl7cz1wLnR5cGUsbD1wLmJ5dGVzUGVyRWxlbWVudH0sdGhpcy5yZW5kZXI9ZnVuY3Rpb24ocCxoKXtuLmRyYXdFbGVtZW50cyhvLGgscyxwKmwpLGUudXBkYXRlKGgsbywxKX0sdGhpcy5yZW5kZXJJbnN0YW5jZXM9ZnVuY3Rpb24ocCxoLG0pe2lmKDA9PT1tKXJldHVybjtsZXQgXyxNO2lmKHIpXz1uLE09ImRyYXdFbGVtZW50c0luc3RhbmNlZCI7ZWxzZSBpZihfPXQuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIiksTT0iZHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUiLG51bGw9PT1fKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMSW5kZXhlZEJ1ZmZlclJlbmRlcmVyOiB1c2luZyBUSFJFRS5JbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSBidXQgaGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCBleHRlbnNpb24gQU5HTEVfaW5zdGFuY2VkX2FycmF5cy4iKTtfW01dKG8saCxzLHAqbCxtKSxlLnVwZGF0ZShoLG8sbSl9fWZ1bmN0aW9uIGVGZShuKXtsZXQgZT17ZnJhbWU6MCxjYWxsczowLHRyaWFuZ2xlczowLHBvaW50czowLGxpbmVzOjB9O3JldHVybnttZW1vcnk6e2dlb21ldHJpZXM6MCx0ZXh0dXJlczowfSxyZW5kZXI6ZSxwcm9ncmFtczpudWxsLGF1dG9SZXNldDohMCxyZXNldDpmdW5jdGlvbigpe2UuZnJhbWUrKyxlLmNhbGxzPTAsZS50cmlhbmdsZXM9MCxlLnBvaW50cz0wLGUubGluZXM9MH0sdXBkYXRlOmZ1bmN0aW9uKG8sYSxzKXtzd2l0Y2goZS5jYWxscysrLGEpe2Nhc2UgNDplLnRyaWFuZ2xlcys9cyooby8zKTticmVhaztjYXNlIDE6ZS5saW5lcys9cyooby8yKTticmVhaztjYXNlIDM6ZS5saW5lcys9cyooby0xKTticmVhaztjYXNlIDI6ZS5saW5lcys9cypvO2JyZWFrO2Nhc2UgMDplLnBvaW50cys9cypvO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xJbmZvOiBVbmtub3duIGRyYXcgbW9kZToiLGEpfX19fXZhciBEeD1jbGFzcyBleHRlbmRzIGxve2NvbnN0cnVjdG9yKHQ9bnVsbCxlPTEsaT0xLHI9MSl7c3VwZXIobnVsbCksdGhpcy5pbWFnZT17ZGF0YTp0LHdpZHRoOmUsaGVpZ2h0OmksZGVwdGg6cn0sdGhpcy5tYWdGaWx0ZXI9dm8sdGhpcy5taW5GaWx0ZXI9dm8sdGhpcy53cmFwUj1Fcyx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMSx0aGlzLmZsaXBZPSExLHRoaXMudW5wYWNrQWxpZ25tZW50PTF9fTtmdW5jdGlvbiB0RmUobix0KXtyZXR1cm4gblswXS10WzBdfWZ1bmN0aW9uIG5GZShuLHQpe3JldHVybiBNYXRoLmFicyh0WzFdKS1NYXRoLmFicyhuWzFdKX1mdW5jdGlvbiB5ZWUobix0KXtsZXQgZT0xLGk9dC5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlP3QuZGF0YS5hcnJheTp0LmFycmF5O2kgaW5zdGFuY2VvZiBJbnQ4QXJyYXk/ZT0xMjc6aSBpbnN0YW5jZW9mIEludDE2QXJyYXk/ZT0zMjc2NzppIGluc3RhbmNlb2YgSW50MzJBcnJheT9lPTIxNDc0ODM2NDc6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xNb3JwaHRhcmdldHM6IFVuc3VwcG9ydGVkIG1vcnBoIGF0dHJpYnV0ZSBkYXRhIHR5cGU6ICIsaSksbi5kaXZpZGVTY2FsYXIoZSl9ZnVuY3Rpb24gaUZlKG4sdCxlKXtsZXQgaT17fSxyPW5ldyBGbG9hdDMyQXJyYXkoOCksbz1uZXcgV2Vha01hcCxhPW5ldyBLLHM9W107Zm9yKGxldCBjPTA7Yzw4O2MrKylzW2NdPVtjLDBdO3JldHVybnt1cGRhdGU6ZnVuY3Rpb24oYyxkLHUscCl7bGV0IGg9Yy5tb3JwaFRhcmdldEluZmx1ZW5jZXM7aWYoITA9PT10LmlzV2ViR0wyKXtsZXQgbT1kLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbi5sZW5ndGgsXz1vLmdldChkKTtpZih2b2lkIDA9PT1ffHxfLmNvdW50IT09bSl7bGV0IHJlPWZ1bmN0aW9uKCl7QWUuZGlzcG9zZSgpLG8uZGVsZXRlKGQpLGQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscmUpfTt2b2lkIDAhPT1fJiZfLnRleHR1cmUuZGlzcG9zZSgpO2xldCB4PXZvaWQgMCE9PWQubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCxSPWQubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLEk9ZC5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsfHxbXSxlZT0hMD09PXg/MjoxLFE9ZC5hdHRyaWJ1dGVzLnBvc2l0aW9uLmNvdW50KmVlLHdlPTE7UT50Lm1heFRleHR1cmVTaXplJiYod2U9TWF0aC5jZWlsKFEvdC5tYXhUZXh0dXJlU2l6ZSksUT10Lm1heFRleHR1cmVTaXplKTtsZXQgUWU9bmV3IEZsb2F0MzJBcnJheShRKndlKjQqbSksQWU9bmV3IER4KFFlLFEsd2UsbSk7QWUuZm9ybWF0PUNhLEFlLnR5cGU9Z20sQWUubmVlZHNVcGRhdGU9ITA7bGV0IEQ9NCplZTtmb3IobGV0IGNlPTA7Y2U8bTtjZSsrKXtsZXQgaGU9UltjZV0sX2U9SVtjZV0sJD1RKndlKjQqY2U7Zm9yKGxldCBkZT0wO2RlPGhlLmNvdW50O2RlKyspe2EuZnJvbUJ1ZmZlckF0dHJpYnV0ZShoZSxkZSksITA9PT1oZS5ub3JtYWxpemVkJiZ5ZWUoYSxoZSk7bGV0IHBlPWRlKkQ7UWVbJCtwZSswXT1hLngsUWVbJCtwZSsxXT1hLnksUWVbJCtwZSsyXT1hLnosUWVbJCtwZSszXT0wLCEwPT09eCYmKGEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShfZSxkZSksITA9PT1fZS5ub3JtYWxpemVkJiZ5ZWUoYSxfZSksUWVbJCtwZSs0XT1hLngsUWVbJCtwZSs1XT1hLnksUWVbJCtwZSs2XT1hLnosUWVbJCtwZSs3XT0wKX19Xz17Y291bnQ6bSx0ZXh0dXJlOkFlLHNpemU6bmV3ICRlKFEsd2UpfSxvLnNldChkLF8pLGQuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscmUpfWxldCBNPTA7Zm9yKGxldCB4PTA7eDxoLmxlbmd0aDt4KyspTSs9aFt4XTtsZXQgeT1kLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPzE6MS1NO3AuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShuLCJtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2UiLHkpLHAuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShuLCJtb3JwaFRhcmdldEluZmx1ZW5jZXMiLGgpLHAuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShuLCJtb3JwaFRhcmdldHNUZXh0dXJlIixfLnRleHR1cmUsZSkscC5nZXRVbmlmb3JtcygpLnNldFZhbHVlKG4sIm1vcnBoVGFyZ2V0c1RleHR1cmVTaXplIixfLnNpemUpfWVsc2V7bGV0IG09dm9pZCAwPT09aD8wOmgubGVuZ3RoLF89aVtkLmlkXTtpZih2b2lkIDA9PT1ffHxfLmxlbmd0aCE9PW0pe189W107Zm9yKGxldCBJPTA7STxtO0krKylfW0ldPVtJLDBdO2lbZC5pZF09X31mb3IobGV0IEk9MDtJPG07SSsrKXtsZXQgQj1fW0ldO0JbMF09SSxCWzFdPWhbSV19Xy5zb3J0KG5GZSk7Zm9yKGxldCBJPTA7STw4O0krKylJPG0mJl9bSV1bMV0/KHNbSV1bMF09X1tJXVswXSxzW0ldWzFdPV9bSV1bMV0pOihzW0ldWzBdPU51bWJlci5NQVhfU0FGRV9JTlRFR0VSLHNbSV1bMV09MCk7cy5zb3J0KHRGZSk7bGV0IE09ZC5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24seT1kLm1vcnBoQXR0cmlidXRlcy5ub3JtYWwseD0wO2ZvcihsZXQgST0wO0k8ODtJKyspe2xldCBCPXNbSV0sZWU9QlswXSxRPUJbMV07ZWUhPT1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUiYmUT8oTSYmZC5nZXRBdHRyaWJ1dGUoIm1vcnBoVGFyZ2V0IitJKSE9PU1bZWVdJiZkLnNldEF0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK0ksTVtlZV0pLHkmJmQuZ2V0QXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrSSkhPT15W2VlXSYmZC5zZXRBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIitJLHlbZWVdKSxyW0ldPVEseCs9USk6KE0mJiEwPT09ZC5oYXNBdHRyaWJ1dGUoIm1vcnBoVGFyZ2V0IitJKSYmZC5kZWxldGVBdHRyaWJ1dGUoIm1vcnBoVGFyZ2V0IitJKSx5JiYhMD09PWQuaGFzQXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrSSkmJmQuZGVsZXRlQXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrSSkscltJXT0wKX1sZXQgUj1kLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPzE6MS14O3AuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShuLCJtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2UiLFIpLHAuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShuLCJtb3JwaFRhcmdldEluZmx1ZW5jZXMiLHIpfX19fWZ1bmN0aW9uIHJGZShuLHQsZSxpKXtsZXQgcj1uZXcgV2Vha01hcDtmdW5jdGlvbiBzKGwpe2xldCBjPWwudGFyZ2V0O2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscyksZS5yZW1vdmUoYy5pbnN0YW5jZU1hdHJpeCksbnVsbCE9PWMuaW5zdGFuY2VDb2xvciYmZS5yZW1vdmUoYy5pbnN0YW5jZUNvbG9yKX1yZXR1cm57dXBkYXRlOmZ1bmN0aW9uKGwpe2xldCBjPWkucmVuZGVyLmZyYW1lLHU9dC5nZXQobCxsLmdlb21ldHJ5KTtyZXR1cm4gci5nZXQodSkhPT1jJiYodC51cGRhdGUodSksci5zZXQodSxjKSksbC5pc0luc3RhbmNlZE1lc2gmJighMT09PWwuaGFzRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscykmJmwuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscyksZS51cGRhdGUobC5pbnN0YW5jZU1hdHJpeCwzNDk2MiksbnVsbCE9PWwuaW5zdGFuY2VDb2xvciYmZS51cGRhdGUobC5pbnN0YW5jZUNvbG9yLDM0OTYyKSksdX0sZGlzcG9zZTpmdW5jdGlvbigpe3I9bmV3IFdlYWtNYXB9fX1EeC5wcm90b3R5cGUuaXNEYXRhVGV4dHVyZTJEQXJyYXk9ITA7dmFyIFJJPWNsYXNzIGV4dGVuZHMgbG97Y29uc3RydWN0b3IodD1udWxsLGU9MSxpPTEscj0xKXtzdXBlcihudWxsKSx0aGlzLmltYWdlPXtkYXRhOnQsd2lkdGg6ZSxoZWlnaHQ6aSxkZXB0aDpyfSx0aGlzLm1hZ0ZpbHRlcj12byx0aGlzLm1pbkZpbHRlcj12byx0aGlzLndyYXBSPUVzLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMuZmxpcFk9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MX19O1JJLnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlM0Q9ITA7dmFyIF90ZT1uZXcgbG8sYnRlPW5ldyBEeCx2dGU9bmV3IFJJLHl0ZT1uZXcgJDAseGVlPVtdLENlZT1bXSxNZWU9bmV3IEZsb2F0MzJBcnJheSgxNiksd2VlPW5ldyBGbG9hdDMyQXJyYXkoOSksU2VlPW5ldyBGbG9hdDMyQXJyYXkoNCk7ZnVuY3Rpb24gZF8obix0LGUpe2xldCBpPW5bMF07aWYoaTw9MHx8aT4wKXJldHVybiBuO2xldCByPXQqZSxvPXhlZVtyXTtpZih2b2lkIDA9PT1vJiYobz1uZXcgRmxvYXQzMkFycmF5KHIpLHhlZVtyXT1vKSwwIT09dCl7aS50b0FycmF5KG8sMCk7Zm9yKGxldCBhPTEscz0wO2EhPT10OysrYSlzKz1lLG5bYV0udG9BcnJheShvLHMpfXJldHVybiBvfWZ1bmN0aW9uIE1hKG4sdCl7aWYobi5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IGU9MCxpPW4ubGVuZ3RoO2U8aTtlKyspaWYobltlXSE9PXRbZV0pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gYWEobix0KXtmb3IobGV0IGU9MCxpPXQubGVuZ3RoO2U8aTtlKyspbltlXT10W2VdfWZ1bmN0aW9uIGVBKG4sdCl7bGV0IGU9Q2VlW3RdO3ZvaWQgMD09PWUmJihlPW5ldyBJbnQzMkFycmF5KHQpLENlZVt0XT1lKTtmb3IobGV0IGk9MDtpIT09dDsrK2kpZVtpXT1uLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtyZXR1cm4gZX1mdW5jdGlvbiBvRmUobix0KXtsZXQgZT10aGlzLmNhY2hlO2VbMF0hPT10JiYobi51bmlmb3JtMWYodGhpcy5hZGRyLHQpLGVbMF09dCl9ZnVuY3Rpb24gYUZlKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtpZih2b2lkIDAhPT10LngpKGVbMF0hPT10Lnh8fGVbMV0hPT10LnkpJiYobi51bmlmb3JtMmYodGhpcy5hZGRyLHQueCx0LnkpLGVbMF09dC54LGVbMV09dC55KTtlbHNle2lmKE1hKGUsdCkpcmV0dXJuO24udW5pZm9ybTJmdih0aGlzLmFkZHIsdCksYWEoZSx0KX19ZnVuY3Rpb24gc0ZlKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtpZih2b2lkIDAhPT10LngpKGVbMF0hPT10Lnh8fGVbMV0hPT10Lnl8fGVbMl0hPT10LnopJiYobi51bmlmb3JtM2YodGhpcy5hZGRyLHQueCx0LnksdC56KSxlWzBdPXQueCxlWzFdPXQueSxlWzJdPXQueik7ZWxzZSBpZih2b2lkIDAhPT10LnIpKGVbMF0hPT10LnJ8fGVbMV0hPT10Lmd8fGVbMl0hPT10LmIpJiYobi51bmlmb3JtM2YodGhpcy5hZGRyLHQucix0LmcsdC5iKSxlWzBdPXQucixlWzFdPXQuZyxlWzJdPXQuYik7ZWxzZXtpZihNYShlLHQpKXJldHVybjtuLnVuaWZvcm0zZnYodGhpcy5hZGRyLHQpLGFhKGUsdCl9fWZ1bmN0aW9uIGxGZShuLHQpe2xldCBlPXRoaXMuY2FjaGU7aWYodm9pZCAwIT09dC54KShlWzBdIT09dC54fHxlWzFdIT09dC55fHxlWzJdIT09dC56fHxlWzNdIT09dC53KSYmKG4udW5pZm9ybTRmKHRoaXMuYWRkcix0LngsdC55LHQueix0LncpLGVbMF09dC54LGVbMV09dC55LGVbMl09dC56LGVbM109dC53KTtlbHNle2lmKE1hKGUsdCkpcmV0dXJuO24udW5pZm9ybTRmdih0aGlzLmFkZHIsdCksYWEoZSx0KX19ZnVuY3Rpb24gY0ZlKG4sdCl7bGV0IGU9dGhpcy5jYWNoZSxpPXQuZWxlbWVudHM7aWYodm9pZCAwPT09aSl7aWYoTWEoZSx0KSlyZXR1cm47bi51bmlmb3JtTWF0cml4MmZ2KHRoaXMuYWRkciwhMSx0KSxhYShlLHQpfWVsc2V7aWYoTWEoZSxpKSlyZXR1cm47U2VlLnNldChpKSxuLnVuaWZvcm1NYXRyaXgyZnYodGhpcy5hZGRyLCExLFNlZSksYWEoZSxpKX19ZnVuY3Rpb24gZEZlKG4sdCl7bGV0IGU9dGhpcy5jYWNoZSxpPXQuZWxlbWVudHM7aWYodm9pZCAwPT09aSl7aWYoTWEoZSx0KSlyZXR1cm47bi51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwhMSx0KSxhYShlLHQpfWVsc2V7aWYoTWEoZSxpKSlyZXR1cm47d2VlLnNldChpKSxuLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5hZGRyLCExLHdlZSksYWEoZSxpKX19ZnVuY3Rpb24gdUZlKG4sdCl7bGV0IGU9dGhpcy5jYWNoZSxpPXQuZWxlbWVudHM7aWYodm9pZCAwPT09aSl7aWYoTWEoZSx0KSlyZXR1cm47bi51bmlmb3JtTWF0cml4NGZ2KHRoaXMuYWRkciwhMSx0KSxhYShlLHQpfWVsc2V7aWYoTWEoZSxpKSlyZXR1cm47TWVlLnNldChpKSxuLnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5hZGRyLCExLE1lZSksYWEoZSxpKX19ZnVuY3Rpb24gcEZlKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtlWzBdIT09dCYmKG4udW5pZm9ybTFpKHRoaXMuYWRkcix0KSxlWzBdPXQpfWZ1bmN0aW9uIGhGZShuLHQpe2xldCBlPXRoaXMuY2FjaGU7TWEoZSx0KXx8KG4udW5pZm9ybTJpdih0aGlzLmFkZHIsdCksYWEoZSx0KSl9ZnVuY3Rpb24gbUZlKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtNYShlLHQpfHwobi51bmlmb3JtM2l2KHRoaXMuYWRkcix0KSxhYShlLHQpKX1mdW5jdGlvbiBmRmUobix0KXtsZXQgZT10aGlzLmNhY2hlO01hKGUsdCl8fChuLnVuaWZvcm00aXYodGhpcy5hZGRyLHQpLGFhKGUsdCkpfWZ1bmN0aW9uIGdGZShuLHQpe2xldCBlPXRoaXMuY2FjaGU7ZVswXSE9PXQmJihuLnVuaWZvcm0xdWkodGhpcy5hZGRyLHQpLGVbMF09dCl9ZnVuY3Rpb24gX0ZlKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtNYShlLHQpfHwobi51bmlmb3JtMnVpdih0aGlzLmFkZHIsdCksYWEoZSx0KSl9ZnVuY3Rpb24gYkZlKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtNYShlLHQpfHwobi51bmlmb3JtM3Vpdih0aGlzLmFkZHIsdCksYWEoZSx0KSl9ZnVuY3Rpb24gdkZlKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtNYShlLHQpfHwobi51bmlmb3JtNHVpdih0aGlzLmFkZHIsdCksYWEoZSx0KSl9ZnVuY3Rpb24geUZlKG4sdCxlKXtsZXQgaT10aGlzLmNhY2hlLHI9ZS5hbGxvY2F0ZVRleHR1cmVVbml0KCk7aVswXSE9PXImJihuLnVuaWZvcm0xaSh0aGlzLmFkZHIsciksaVswXT1yKSxlLnNhZmVTZXRUZXh0dXJlMkQodHx8X3RlLHIpfWZ1bmN0aW9uIHhGZShuLHQsZSl7bGV0IGk9dGhpcy5jYWNoZSxyPWUuYWxsb2NhdGVUZXh0dXJlVW5pdCgpO2lbMF0hPT1yJiYobi51bmlmb3JtMWkodGhpcy5hZGRyLHIpLGlbMF09ciksZS5zZXRUZXh0dXJlM0QodHx8dnRlLHIpfWZ1bmN0aW9uIENGZShuLHQsZSl7bGV0IGk9dGhpcy5jYWNoZSxyPWUuYWxsb2NhdGVUZXh0dXJlVW5pdCgpO2lbMF0hPT1yJiYobi51bmlmb3JtMWkodGhpcy5hZGRyLHIpLGlbMF09ciksZS5zYWZlU2V0VGV4dHVyZUN1YmUodHx8eXRlLHIpfWZ1bmN0aW9uIE1GZShuLHQsZSl7bGV0IGk9dGhpcy5jYWNoZSxyPWUuYWxsb2NhdGVUZXh0dXJlVW5pdCgpO2lbMF0hPT1yJiYobi51bmlmb3JtMWkodGhpcy5hZGRyLHIpLGlbMF09ciksZS5zZXRUZXh0dXJlMkRBcnJheSh0fHxidGUscil9ZnVuY3Rpb24gU0ZlKG4sdCl7bi51bmlmb3JtMWZ2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBFRmUobix0KXtsZXQgZT1kXyh0LHRoaXMuc2l6ZSwyKTtuLnVuaWZvcm0yZnYodGhpcy5hZGRyLGUpfWZ1bmN0aW9uIFRGZShuLHQpe2xldCBlPWRfKHQsdGhpcy5zaXplLDMpO24udW5pZm9ybTNmdih0aGlzLmFkZHIsZSl9ZnVuY3Rpb24gREZlKG4sdCl7bGV0IGU9ZF8odCx0aGlzLnNpemUsNCk7bi51bmlmb3JtNGZ2KHRoaXMuYWRkcixlKX1mdW5jdGlvbiBJRmUobix0KXtsZXQgZT1kXyh0LHRoaXMuc2l6ZSw0KTtuLnVuaWZvcm1NYXRyaXgyZnYodGhpcy5hZGRyLCExLGUpfWZ1bmN0aW9uIEFGZShuLHQpe2xldCBlPWRfKHQsdGhpcy5zaXplLDkpO24udW5pZm9ybU1hdHJpeDNmdih0aGlzLmFkZHIsITEsZSl9ZnVuY3Rpb24gUkZlKG4sdCl7bGV0IGU9ZF8odCx0aGlzLnNpemUsMTYpO24udW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEsZSl9ZnVuY3Rpb24gUEZlKG4sdCl7bi51bmlmb3JtMWl2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBrRmUobix0KXtuLnVuaWZvcm0yaXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIE9GZShuLHQpe24udW5pZm9ybTNpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gRkZlKG4sdCl7bi51bmlmb3JtNGl2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBORmUobix0KXtuLnVuaWZvcm0xdWl2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBMRmUobix0KXtuLnVuaWZvcm0ydWl2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBCRmUobix0KXtuLnVuaWZvcm0zdWl2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBWRmUobix0KXtuLnVuaWZvcm00dWl2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBIRmUobix0LGUpe2xldCBpPXQubGVuZ3RoLHI9ZUEoZSxpKTtuLnVuaWZvcm0xaXYodGhpcy5hZGRyLHIpO2ZvcihsZXQgbz0wO28hPT1pOysrbyllLnNhZmVTZXRUZXh0dXJlMkQodFtvXXx8X3RlLHJbb10pfWZ1bmN0aW9uIHpGZShuLHQsZSl7bGV0IGk9dC5sZW5ndGgscj1lQShlLGkpO24udW5pZm9ybTFpdih0aGlzLmFkZHIscik7Zm9yKGxldCBvPTA7byE9PWk7KytvKWUuc2V0VGV4dHVyZTNEKHRbb118fHZ0ZSxyW29dKX1mdW5jdGlvbiBVRmUobix0LGUpe2xldCBpPXQubGVuZ3RoLHI9ZUEoZSxpKTtuLnVuaWZvcm0xaXYodGhpcy5hZGRyLHIpO2ZvcihsZXQgbz0wO28hPT1pOysrbyllLnNhZmVTZXRUZXh0dXJlQ3ViZSh0W29dfHx5dGUscltvXSl9ZnVuY3Rpb24gakZlKG4sdCxlKXtsZXQgaT10Lmxlbmd0aCxyPWVBKGUsaSk7bi51bmlmb3JtMWl2KHRoaXMuYWRkcixyKTtmb3IobGV0IG89MDtvIT09aTsrK28pZS5zZXRUZXh0dXJlMkRBcnJheSh0W29dfHxidGUscltvXSl9ZnVuY3Rpb24gV0ZlKG4sdCxlKXt0aGlzLmlkPW4sdGhpcy5hZGRyPWUsdGhpcy5jYWNoZT1bXSx0aGlzLnNldFZhbHVlPWZ1bmN0aW9uKG4pe3N3aXRjaChuKXtjYXNlIDUxMjY6cmV0dXJuIG9GZTtjYXNlIDM1NjY0OnJldHVybiBhRmU7Y2FzZSAzNTY2NTpyZXR1cm4gc0ZlO2Nhc2UgMzU2NjY6cmV0dXJuIGxGZTtjYXNlIDM1Njc0OnJldHVybiBjRmU7Y2FzZSAzNTY3NTpyZXR1cm4gZEZlO2Nhc2UgMzU2NzY6cmV0dXJuIHVGZTtjYXNlIDUxMjQ6Y2FzZSAzNTY3MDpyZXR1cm4gcEZlO2Nhc2UgMzU2Njc6Y2FzZSAzNTY3MTpyZXR1cm4gaEZlO2Nhc2UgMzU2Njg6Y2FzZSAzNTY3MjpyZXR1cm4gbUZlO2Nhc2UgMzU2Njk6Y2FzZSAzNTY3MzpyZXR1cm4gZkZlO2Nhc2UgNTEyNTpyZXR1cm4gZ0ZlO2Nhc2UgMzYyOTQ6cmV0dXJuIF9GZTtjYXNlIDM2Mjk1OnJldHVybiBiRmU7Y2FzZSAzNjI5NjpyZXR1cm4gdkZlO2Nhc2UgMzU2Nzg6Y2FzZSAzNjE5ODpjYXNlIDM2Mjk4OmNhc2UgMzYzMDY6Y2FzZSAzNTY4MjpyZXR1cm4geUZlO2Nhc2UgMzU2Nzk6Y2FzZSAzNjI5OTpjYXNlIDM2MzA3OnJldHVybiB4RmU7Y2FzZSAzNTY4MDpjYXNlIDM2MzAwOmNhc2UgMzYzMDg6Y2FzZSAzNjI5MzpyZXR1cm4gQ0ZlO2Nhc2UgMzYyODk6Y2FzZSAzNjMwMzpjYXNlIDM2MzExOmNhc2UgMzYyOTI6cmV0dXJuIE1GZX19KHQudHlwZSl9ZnVuY3Rpb24geHRlKG4sdCxlKXt0aGlzLmlkPW4sdGhpcy5hZGRyPWUsdGhpcy5jYWNoZT1bXSx0aGlzLnNpemU9dC5zaXplLHRoaXMuc2V0VmFsdWU9ZnVuY3Rpb24obil7c3dpdGNoKG4pe2Nhc2UgNTEyNjpyZXR1cm4gU0ZlO2Nhc2UgMzU2NjQ6cmV0dXJuIEVGZTtjYXNlIDM1NjY1OnJldHVybiBURmU7Y2FzZSAzNTY2NjpyZXR1cm4gREZlO2Nhc2UgMzU2NzQ6cmV0dXJuIElGZTtjYXNlIDM1Njc1OnJldHVybiBBRmU7Y2FzZSAzNTY3NjpyZXR1cm4gUkZlO2Nhc2UgNTEyNDpjYXNlIDM1NjcwOnJldHVybiBQRmU7Y2FzZSAzNTY2NzpjYXNlIDM1NjcxOnJldHVybiBrRmU7Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnJldHVybiBPRmU7Y2FzZSAzNTY2OTpjYXNlIDM1NjczOnJldHVybiBGRmU7Y2FzZSA1MTI1OnJldHVybiBORmU7Y2FzZSAzNjI5NDpyZXR1cm4gTEZlO2Nhc2UgMzYyOTU6cmV0dXJuIEJGZTtjYXNlIDM2Mjk2OnJldHVybiBWRmU7Y2FzZSAzNTY3ODpjYXNlIDM2MTk4OmNhc2UgMzYyOTg6Y2FzZSAzNjMwNjpjYXNlIDM1NjgyOnJldHVybiBIRmU7Y2FzZSAzNTY3OTpjYXNlIDM2Mjk5OmNhc2UgMzYzMDc6cmV0dXJuIHpGZTtjYXNlIDM1NjgwOmNhc2UgMzYzMDA6Y2FzZSAzNjMwODpjYXNlIDM2MjkzOnJldHVybiBVRmU7Y2FzZSAzNjI4OTpjYXNlIDM2MzAzOmNhc2UgMzYzMTE6Y2FzZSAzNjI5MjpyZXR1cm4gakZlfX0odC50eXBlKX1mdW5jdGlvbiBDdGUobil7dGhpcy5pZD1uLHRoaXMuc2VxPVtdLHRoaXMubWFwPXt9fXh0ZS5wcm90b3R5cGUudXBkYXRlQ2FjaGU9ZnVuY3Rpb24obil7bGV0IHQ9dGhpcy5jYWNoZTtuIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5JiZ0Lmxlbmd0aCE9PW4ubGVuZ3RoJiYodGhpcy5jYWNoZT1uZXcgRmxvYXQzMkFycmF5KG4ubGVuZ3RoKSksYWEodCxuKX0sQ3RlLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbihuLHQsZSl7bGV0IGk9dGhpcy5zZXE7Zm9yKGxldCByPTAsbz1pLmxlbmd0aDtyIT09bzsrK3Ipe2xldCBhPWlbcl07YS5zZXRWYWx1ZShuLHRbYS5pZF0sZSl9fTt2YXIgVjM9LyhcdyspKFxdKT8oXFt8XC4pPy9nO2Z1bmN0aW9uIEVlZShuLHQpe24uc2VxLnB1c2godCksbi5tYXBbdC5pZF09dH1mdW5jdGlvbiBxRmUobix0LGUpe2xldCBpPW4ubmFtZSxyPWkubGVuZ3RoO2ZvcihWMy5sYXN0SW5kZXg9MDs7KXtsZXQgbz1WMy5leGVjKGkpLHM9b1sxXSxjPW9bM107aWYoIl0iPT09b1syXSYmKHN8PTApLHZvaWQgMD09PWN8fCJbIj09PWMmJlYzLmxhc3RJbmRleCsyPT09cil7RWVlKGUsdm9pZCAwPT09Yz9uZXcgV0ZlKHMsbix0KTpuZXcgeHRlKHMsbix0KSk7YnJlYWt9e2xldCB1PWUubWFwW3NdO3ZvaWQgMD09PXUmJih1PW5ldyBDdGUocyksRWVlKGUsdSkpLGU9dX19fWZ1bmN0aW9uIE1wKG4sdCl7dGhpcy5zZXE9W10sdGhpcy5tYXA9e307bGV0IGU9bi5nZXRQcm9ncmFtUGFyYW1ldGVyKHQsMzU3MTgpO2ZvcihsZXQgaT0wO2k8ZTsrK2kpe2xldCByPW4uZ2V0QWN0aXZlVW5pZm9ybSh0LGkpO3FGZShyLG4uZ2V0VW5pZm9ybUxvY2F0aW9uKHQsci5uYW1lKSx0aGlzKX19ZnVuY3Rpb24gVGVlKG4sdCxlKXtsZXQgaT1uLmNyZWF0ZVNoYWRlcih0KTtyZXR1cm4gbi5zaGFkZXJTb3VyY2UoaSxlKSxuLmNvbXBpbGVTaGFkZXIoaSksaX1NcC5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24obix0LGUsaSl7bGV0IHI9dGhpcy5tYXBbdF07dm9pZCAwIT09ciYmci5zZXRWYWx1ZShuLGUsaSl9LE1wLnByb3RvdHlwZS5zZXRPcHRpb25hbD1mdW5jdGlvbihuLHQsZSl7bGV0IGk9dFtlXTt2b2lkIDAhPT1pJiZ0aGlzLnNldFZhbHVlKG4sZSxpKX0sTXAudXBsb2FkPWZ1bmN0aW9uKG4sdCxlLGkpe2ZvcihsZXQgcj0wLG89dC5sZW5ndGg7ciE9PW87KytyKXtsZXQgYT10W3JdLHM9ZVthLmlkXTshMSE9PXMubmVlZHNVcGRhdGUmJmEuc2V0VmFsdWUobixzLnZhbHVlLGkpfX0sTXAuc2VxV2l0aFZhbHVlPWZ1bmN0aW9uKG4sdCl7bGV0IGU9W107Zm9yKGxldCBpPTAscj1uLmxlbmd0aDtpIT09cjsrK2kpe2xldCBvPW5baV07by5pZCBpbiB0JiZlLnB1c2gobyl9cmV0dXJuIGV9O3ZhciBYRmU9MDtmdW5jdGlvbiBEZWUobix0LGUpe2xldCBpPW4uZ2V0U2hhZGVyUGFyYW1ldGVyKHQsMzU3MTMpLHI9bi5nZXRTaGFkZXJJbmZvTG9nKHQpLnRyaW0oKTtyZXR1cm4gaSYmIiI9PT1yPyIiOmUudG9VcHBlckNhc2UoKSsiXG5cbiIrcisiXG5cbiIrZnVuY3Rpb24obil7bGV0IHQ9bi5zcGxpdCgiXG4iKTtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdPWUrMSsiOiAiK3RbZV07cmV0dXJuIHQuam9pbigiXG4iKX0obi5nZXRTaGFkZXJTb3VyY2UodCkpfWZ1bmN0aW9uIFpGZShuLHQpe2xldCBlPWZ1bmN0aW9uKG4pe3N3aXRjaChuKXtjYXNlIHdwOnJldHVyblsiTGluZWFyIiwiKCB2YWx1ZSApIl07Y2FzZSBEcjpyZXR1cm5bInNSR0IiLCIoIHZhbHVlICkiXTtkZWZhdWx0OnJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbTogVW5zdXBwb3J0ZWQgZW5jb2Rpbmc6IixuKSxbIkxpbmVhciIsIiggdmFsdWUgKSJdfX0odCk7cmV0dXJuInZlYzQgIituKyIoIHZlYzQgdmFsdWUgKSB7IHJldHVybiBMaW5lYXJUbyIrZVswXStlWzFdKyI7IH0ifWZ1bmN0aW9uIEtGZShuLHQpe2xldCBlO3N3aXRjaCh0KXtjYXNlIE1SZTplPSJMaW5lYXIiO2JyZWFrO2Nhc2Ugd1JlOmU9IlJlaW5oYXJkIjticmVhaztjYXNlIFNSZTplPSJPcHRpbWl6ZWRDaW5lb24iO2JyZWFrO2Nhc2UgRVJlOmU9IkFDRVNGaWxtaWMiO2JyZWFrO2Nhc2UgVFJlOmU9IkN1c3RvbSI7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbTogVW5zdXBwb3J0ZWQgdG9uZU1hcHBpbmc6Iix0KSxlPSJMaW5lYXIifXJldHVybiJ2ZWMzICIrbisiKCB2ZWMzIGNvbG9yICkgeyByZXR1cm4gIitlKyJUb25lTWFwcGluZyggY29sb3IgKTsgfSJ9ZnVuY3Rpb24gZngobil7cmV0dXJuIiIhPT1ufWZ1bmN0aW9uIEllZShuLHQpe3JldHVybiBuLnJlcGxhY2UoL05VTV9ESVJfTElHSFRTL2csdC5udW1EaXJMaWdodHMpLnJlcGxhY2UoL05VTV9TUE9UX0xJR0hUUy9nLHQubnVtU3BvdExpZ2h0cykucmVwbGFjZSgvTlVNX1JFQ1RfQVJFQV9MSUdIVFMvZyx0Lm51bVJlY3RBcmVhTGlnaHRzKS5yZXBsYWNlKC9OVU1fUE9JTlRfTElHSFRTL2csdC5udW1Qb2ludExpZ2h0cykucmVwbGFjZSgvTlVNX0hFTUlfTElHSFRTL2csdC5udW1IZW1pTGlnaHRzKS5yZXBsYWNlKC9OVU1fRElSX0xJR0hUX1NIQURPV1MvZyx0Lm51bURpckxpZ2h0U2hhZG93cykucmVwbGFjZSgvTlVNX1NQT1RfTElHSFRfU0hBRE9XUy9nLHQubnVtU3BvdExpZ2h0U2hhZG93cykucmVwbGFjZSgvTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MvZyx0Lm51bVBvaW50TGlnaHRTaGFkb3dzKX1mdW5jdGlvbiBBZWUobix0KXtyZXR1cm4gbi5yZXBsYWNlKC9OVU1fQ0xJUFBJTkdfUExBTkVTL2csdC5udW1DbGlwcGluZ1BsYW5lcykucmVwbGFjZSgvVU5JT05fQ0xJUFBJTkdfUExBTkVTL2csdC5udW1DbGlwcGluZ1BsYW5lcy10Lm51bUNsaXBJbnRlcnNlY3Rpb24pfXZhciB0MmU9L15bIFx0XSojaW5jbHVkZSArPChbXHdcZC4vXSspPi9nbTtmdW5jdGlvbiBuQihuKXtyZXR1cm4gbi5yZXBsYWNlKHQyZSxuMmUpfWZ1bmN0aW9uIG4yZShuLHQpe2xldCBlPXZpW3RdO2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IEVycm9yKCJDYW4gbm90IHJlc29sdmUgI2luY2x1ZGUgPCIrdCsiPiIpO3JldHVybiBuQihlKX12YXIgaTJlPS8jcHJhZ21hIHVucm9sbF9sb29wW1xzXSs/Zm9yIFwoIGludCBpIFw9IChcZCspXDsgaSA8IChcZCspXDsgaSBcK1wrIFwpIFx7KFtcc1xTXSs/KSg/PVx9KVx9L2cscjJlPS8jcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XHMrZm9yXHMqXChccyppbnRccytpXHMqPVxzKihcZCspXHMqO1xzKmlccyo8XHMqKFxkKylccyo7XHMqaVxzKlwrXCtccypcKVxzKnsoW1xzXFNdKz8pfVxzKyNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kL2c7ZnVuY3Rpb24gUmVlKG4pe3JldHVybiBuLnJlcGxhY2UocjJlLE10ZSkucmVwbGFjZShpMmUsbzJlKX1mdW5jdGlvbiBvMmUobix0LGUsaSl7cmV0dXJuIGNvbnNvbGUud2FybigiV2ViR0xQcm9ncmFtOiAjcHJhZ21hIHVucm9sbF9sb29wIHNoYWRlciBzeW50YXggaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSAjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0IHN5bnRheCBpbnN0ZWFkLiIpLE10ZSgwLHQsZSxpKX1mdW5jdGlvbiBNdGUobix0LGUsaSl7bGV0IHI9IiI7Zm9yKGxldCBvPXBhcnNlSW50KHQpO288cGFyc2VJbnQoZSk7bysrKXIrPWkucmVwbGFjZSgvXFtccyppXHMqXF0vZywiWyAiK28rIiBdIikucmVwbGFjZSgvVU5ST0xMRURfTE9PUF9JTkRFWC9nLG8pO3JldHVybiByfWZ1bmN0aW9uIFBlZShuKXtsZXQgdD0icHJlY2lzaW9uICIrbi5wcmVjaXNpb24rIiBmbG9hdDtcbnByZWNpc2lvbiAiK24ucHJlY2lzaW9uKyIgaW50OyI7cmV0dXJuImhpZ2hwIj09PW4ucHJlY2lzaW9uP3QrPSJcbiNkZWZpbmUgSElHSF9QUkVDSVNJT04iOiJtZWRpdW1wIj09PW4ucHJlY2lzaW9uP3QrPSJcbiNkZWZpbmUgTUVESVVNX1BSRUNJU0lPTiI6Imxvd3AiPT09bi5wcmVjaXNpb24mJih0Kz0iXG4jZGVmaW5lIExPV19QUkVDSVNJT04iKSx0fWZ1bmN0aW9uIGQyZShuLHQsZSxpKXtsZXQgXyxNLHI9bi5nZXRDb250ZXh0KCksbz1lLmRlZmluZXMsYT1lLnZlcnRleFNoYWRlcixzPWUuZnJhZ21lbnRTaGFkZXIsbD1mdW5jdGlvbihuKXtsZXQgdD0iU0hBRE9XTUFQX1RZUEVfQkFTSUMiO3JldHVybiBuLnNoYWRvd01hcFR5cGU9PT1zdGU/dD0iU0hBRE9XTUFQX1RZUEVfUENGIjpuLnNoYWRvd01hcFR5cGU9PT10UmU/dD0iU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQiOm4uc2hhZG93TWFwVHlwZT09PW14JiYodD0iU0hBRE9XTUFQX1RZUEVfVlNNIiksdH0oZSksYz1mdW5jdGlvbihuKXtsZXQgdD0iRU5WTUFQX1RZUEVfQ1VCRSI7aWYobi5lbnZNYXApc3dpdGNoKG4uZW52TWFwTW9kZSl7Y2FzZSBXeDpjYXNlIHF4OnQ9IkVOVk1BUF9UWVBFX0NVQkUiO2JyZWFrO2Nhc2UgSkk6Y2FzZSBsVjp0PSJFTlZNQVBfVFlQRV9DVUJFX1VWIn1yZXR1cm4gdH0oZSksZD1mdW5jdGlvbihuKXtsZXQgdD0iRU5WTUFQX01PREVfUkVGTEVDVElPTiI7aWYobi5lbnZNYXApc3dpdGNoKG4uZW52TWFwTW9kZSl7Y2FzZSBxeDpjYXNlIGxWOnQ9IkVOVk1BUF9NT0RFX1JFRlJBQ1RJT04ifXJldHVybiB0fShlKSx1PWZ1bmN0aW9uKG4pe2xldCB0PSJFTlZNQVBfQkxFTkRJTkdfTk9ORSI7aWYobi5lbnZNYXApc3dpdGNoKG4uY29tYmluZSl7Y2FzZSBLSTp0PSJFTlZNQVBfQkxFTkRJTkdfTVVMVElQTFkiO2JyZWFrO2Nhc2UgeFJlOnQ9IkVOVk1BUF9CTEVORElOR19NSVgiO2JyZWFrO2Nhc2UgQ1JlOnQ9IkVOVk1BUF9CTEVORElOR19BREQifXJldHVybiB0fShlKSxwPWUuaXNXZWJHTDI/IiI6ZnVuY3Rpb24obil7cmV0dXJuW24uZXh0ZW5zaW9uRGVyaXZhdGl2ZXN8fG4uZW52TWFwQ3ViZVVWfHxuLmJ1bXBNYXB8fG4udGFuZ2VudFNwYWNlTm9ybWFsTWFwfHxuLmNsZWFyY29hdE5vcm1hbE1hcHx8bi5mbGF0U2hhZGluZ3x8InBoeXNpY2FsIj09PW4uc2hhZGVySUQ/IiNleHRlbnNpb24gR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIDogZW5hYmxlIjoiIiwobi5leHRlbnNpb25GcmFnRGVwdGh8fG4ubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcikmJm4ucmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg/IiNleHRlbnNpb24gR0xfRVhUX2ZyYWdfZGVwdGggOiBlbmFibGUiOiIiLG4uZXh0ZW5zaW9uRHJhd0J1ZmZlcnMmJm4ucmVuZGVyZXJFeHRlbnNpb25EcmF3QnVmZmVycz8iI2V4dGVuc2lvbiBHTF9FWFRfZHJhd19idWZmZXJzIDogcmVxdWlyZSI6IiIsKG4uZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRHx8bi5lbnZNYXB8fG4udHJhbnNtaXNzaW9uKSYmbi5yZW5kZXJlckV4dGVuc2lvblNoYWRlclRleHR1cmVMb2Q/IiNleHRlbnNpb24gR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCA6IGVuYWJsZSI6IiJdLmZpbHRlcihmeCkuam9pbigiXG4iKX0oZSksaD1mdW5jdGlvbihuKXtsZXQgdD1bXTtmb3IobGV0IGUgaW4gbil7bGV0IGk9bltlXTshMSE9PWkmJnQucHVzaCgiI2RlZmluZSAiK2UrIiAiK2kpfXJldHVybiB0LmpvaW4oIlxuIil9KG8pLG09ci5jcmVhdGVQcm9ncmFtKCkseT1lLmdsc2xWZXJzaW9uPyIjdmVyc2lvbiAiK2UuZ2xzbFZlcnNpb24rIlxuIjoiIjtlLmlzUmF3U2hhZGVyTWF0ZXJpYWw/KF89W2hdLmZpbHRlcihmeCkuam9pbigiXG4iKSxfLmxlbmd0aD4wJiYoXys9IlxuIiksTT1bcCxoXS5maWx0ZXIoZngpLmpvaW4oIlxuIiksTS5sZW5ndGg+MCYmKE0rPSJcbiIpKTooXz1bUGVlKGUpLCIjZGVmaW5lIFNIQURFUl9OQU1FICIrZS5zaGFkZXJOYW1lLGgsZS5pbnN0YW5jaW5nPyIjZGVmaW5lIFVTRV9JTlNUQU5DSU5HIjoiIixlLmluc3RhbmNpbmdDb2xvcj8iI2RlZmluZSBVU0VfSU5TVEFOQ0lOR19DT0xPUiI6IiIsZS5zdXBwb3J0c1ZlcnRleFRleHR1cmVzPyIjZGVmaW5lIFZFUlRFWF9URVhUVVJFUyI6IiIsIiNkZWZpbmUgTUFYX0JPTkVTICIrZS5tYXhCb25lcyxlLnVzZUZvZyYmZS5mb2c/IiNkZWZpbmUgVVNFX0ZPRyI6IiIsZS51c2VGb2cmJmUuZm9nRXhwMj8iI2RlZmluZSBGT0dfRVhQMiI6IiIsZS5tYXA/IiNkZWZpbmUgVVNFX01BUCI6IiIsZS5lbnZNYXA/IiNkZWZpbmUgVVNFX0VOVk1BUCI6IiIsZS5lbnZNYXA/IiNkZWZpbmUgIitkOiIiLGUubGlnaHRNYXA/IiNkZWZpbmUgVVNFX0xJR0hUTUFQIjoiIixlLmFvTWFwPyIjZGVmaW5lIFVTRV9BT01BUCI6IiIsZS5lbWlzc2l2ZU1hcD8iI2RlZmluZSBVU0VfRU1JU1NJVkVNQVAiOiIiLGUuYnVtcE1hcD8iI2RlZmluZSBVU0VfQlVNUE1BUCI6IiIsZS5ub3JtYWxNYXA/IiNkZWZpbmUgVVNFX05PUk1BTE1BUCI6IiIsZS5ub3JtYWxNYXAmJmUub2JqZWN0U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgT0JKRUNUU1BBQ0VfTk9STUFMTUFQIjoiIixlLm5vcm1hbE1hcCYmZS50YW5nZW50U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgVEFOR0VOVFNQQUNFX05PUk1BTE1BUCI6IiIsZS5jbGVhcmNvYXRNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVE1BUCI6IiIsZS5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVAiOiIiLGUuY2xlYXJjb2F0Tm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQIjoiIixlLmRpc3BsYWNlbWVudE1hcCYmZS5zdXBwb3J0c1ZlcnRleFRleHR1cmVzPyIjZGVmaW5lIFVTRV9ESVNQTEFDRU1FTlRNQVAiOiIiLGUuc3BlY3VsYXJNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSTUFQIjoiIixlLnNwZWN1bGFySW50ZW5zaXR5TWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUCI6IiIsZS5zcGVjdWxhckNvbG9yTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUkNPTE9STUFQIjoiIixlLnJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfUk9VR0hORVNTTUFQIjoiIixlLm1ldGFsbmVzc01hcD8iI2RlZmluZSBVU0VfTUVUQUxORVNTTUFQIjoiIixlLmFscGhhTWFwPyIjZGVmaW5lIFVTRV9BTFBIQU1BUCI6IiIsZS50cmFuc21pc3Npb24/IiNkZWZpbmUgVVNFX1RSQU5TTUlTU0lPTiI6IiIsZS50cmFuc21pc3Npb25NYXA/IiNkZWZpbmUgVVNFX1RSQU5TTUlTU0lPTk1BUCI6IiIsZS50aGlja25lc3NNYXA/IiNkZWZpbmUgVVNFX1RISUNLTkVTU01BUCI6IiIsZS5zaGVlbkNvbG9yTWFwPyIjZGVmaW5lIFVTRV9TSEVFTkNPTE9STUFQIjoiIixlLnNoZWVuUm91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9TSEVFTlJPVUdITkVTU01BUCI6IiIsZS52ZXJ0ZXhUYW5nZW50cz8iI2RlZmluZSBVU0VfVEFOR0VOVCI6IiIsZS52ZXJ0ZXhDb2xvcnM/IiNkZWZpbmUgVVNFX0NPTE9SIjoiIixlLnZlcnRleEFscGhhcz8iI2RlZmluZSBVU0VfQ09MT1JfQUxQSEEiOiIiLGUudmVydGV4VXZzPyIjZGVmaW5lIFVTRV9VViI6IiIsZS51dnNWZXJ0ZXhPbmx5PyIjZGVmaW5lIFVWU19WRVJURVhfT05MWSI6IiIsZS5mbGF0U2hhZGluZz8iI2RlZmluZSBGTEFUX1NIQURFRCI6IiIsZS5za2lubmluZz8iI2RlZmluZSBVU0VfU0tJTk5JTkciOiIiLGUudXNlVmVydGV4VGV4dHVyZT8iI2RlZmluZSBCT05FX1RFWFRVUkUiOiIiLGUubW9ycGhUYXJnZXRzPyIjZGVmaW5lIFVTRV9NT1JQSFRBUkdFVFMiOiIiLGUubW9ycGhOb3JtYWxzJiYhMT09PWUuZmxhdFNoYWRpbmc/IiNkZWZpbmUgVVNFX01PUlBITk9STUFMUyI6IiIsZS5tb3JwaFRhcmdldHMmJmUuaXNXZWJHTDI/IiNkZWZpbmUgTU9SUEhUQVJHRVRTX1RFWFRVUkUiOiIiLGUubW9ycGhUYXJnZXRzJiZlLmlzV2ViR0wyPyIjZGVmaW5lIE1PUlBIVEFSR0VUU19DT1VOVCAiK2UubW9ycGhUYXJnZXRzQ291bnQ6IiIsZS5kb3VibGVTaWRlZD8iI2RlZmluZSBET1VCTEVfU0lERUQiOiIiLGUuZmxpcFNpZGVkPyIjZGVmaW5lIEZMSVBfU0lERUQiOiIiLGUuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSBVU0VfU0hBRE9XTUFQIjoiIixlLnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgIitsOiIiLGUuc2l6ZUF0dGVudWF0aW9uPyIjZGVmaW5lIFVTRV9TSVpFQVRURU5VQVRJT04iOiIiLGUubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcj8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUYiOiIiLGUubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmZS5yZW5kZXJlckV4dGVuc2lvbkZyYWdEZXB0aD8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUZfRVhUIjoiIiwidW5pZm9ybSBtYXQ0IG1vZGVsTWF0cml4OyIsInVuaWZvcm0gbWF0NCBtb2RlbFZpZXdNYXRyaXg7IiwidW5pZm9ybSBtYXQ0IHByb2plY3Rpb25NYXRyaXg7IiwidW5pZm9ybSBtYXQ0IHZpZXdNYXRyaXg7IiwidW5pZm9ybSBtYXQzIG5vcm1hbE1hdHJpeDsiLCJ1bmlmb3JtIHZlYzMgY2FtZXJhUG9zaXRpb247IiwidW5pZm9ybSBib29sIGlzT3J0aG9ncmFwaGljOyIsIiNpZmRlZiBVU0VfSU5TVEFOQ0lORyIsIlx0YXR0cmlidXRlIG1hdDQgaW5zdGFuY2VNYXRyaXg7IiwiI2VuZGlmIiwiI2lmZGVmIFVTRV9JTlNUQU5DSU5HX0NPTE9SIiwiXHRhdHRyaWJ1dGUgdmVjMyBpbnN0YW5jZUNvbG9yOyIsIiNlbmRpZiIsImF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uOyIsImF0dHJpYnV0ZSB2ZWMzIG5vcm1hbDsiLCJhdHRyaWJ1dGUgdmVjMiB1djsiLCIjaWZkZWYgVVNFX1RBTkdFTlQiLCJcdGF0dHJpYnV0ZSB2ZWM0IHRhbmdlbnQ7IiwiI2VuZGlmIiwiI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApIiwiXHRhdHRyaWJ1dGUgdmVjNCBjb2xvcjsiLCIjZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKSIsIlx0YXR0cmlidXRlIHZlYzMgY29sb3I7IiwiI2VuZGlmIiwiI2lmICggZGVmaW5lZCggVVNFX01PUlBIVEFSR0VUUyApICYmICEgZGVmaW5lZCggTU9SUEhUQVJHRVRTX1RFWFRVUkUgKSApIiwiXHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDA7IiwiXHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDE7IiwiXHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDI7IiwiXHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDM7IiwiXHQjaWZkZWYgVVNFX01PUlBITk9STUFMUyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDA7IiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMTsiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwyOyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDM7IiwiXHQjZWxzZSIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDQ7IiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NTsiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ2OyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDc7IiwiXHQjZW5kaWYiLCIjZW5kaWYiLCIjaWZkZWYgVVNFX1NLSU5OSU5HIiwiXHRhdHRyaWJ1dGUgdmVjNCBza2luSW5kZXg7IiwiXHRhdHRyaWJ1dGUgdmVjNCBza2luV2VpZ2h0OyIsIiNlbmRpZiIsIlxuIl0uZmlsdGVyKGZ4KS5qb2luKCJcbiIpLE09W3AsUGVlKGUpLCIjZGVmaW5lIFNIQURFUl9OQU1FICIrZS5zaGFkZXJOYW1lLGgsZS51c2VGb2cmJmUuZm9nPyIjZGVmaW5lIFVTRV9GT0ciOiIiLGUudXNlRm9nJiZlLmZvZ0V4cDI/IiNkZWZpbmUgRk9HX0VYUDIiOiIiLGUubWFwPyIjZGVmaW5lIFVTRV9NQVAiOiIiLGUubWF0Y2FwPyIjZGVmaW5lIFVTRV9NQVRDQVAiOiIiLGUuZW52TWFwPyIjZGVmaW5lIFVTRV9FTlZNQVAiOiIiLGUuZW52TWFwPyIjZGVmaW5lICIrYzoiIixlLmVudk1hcD8iI2RlZmluZSAiK2Q6IiIsZS5lbnZNYXA/IiNkZWZpbmUgIit1OiIiLGUubGlnaHRNYXA/IiNkZWZpbmUgVVNFX0xJR0hUTUFQIjoiIixlLmFvTWFwPyIjZGVmaW5lIFVTRV9BT01BUCI6IiIsZS5lbWlzc2l2ZU1hcD8iI2RlZmluZSBVU0VfRU1JU1NJVkVNQVAiOiIiLGUuYnVtcE1hcD8iI2RlZmluZSBVU0VfQlVNUE1BUCI6IiIsZS5ub3JtYWxNYXA/IiNkZWZpbmUgVVNFX05PUk1BTE1BUCI6IiIsZS5ub3JtYWxNYXAmJmUub2JqZWN0U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgT0JKRUNUU1BBQ0VfTk9STUFMTUFQIjoiIixlLm5vcm1hbE1hcCYmZS50YW5nZW50U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgVEFOR0VOVFNQQUNFX05PUk1BTE1BUCI6IiIsZS5jbGVhcmNvYXQ/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVCI6IiIsZS5jbGVhcmNvYXRNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVE1BUCI6IiIsZS5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVAiOiIiLGUuY2xlYXJjb2F0Tm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQIjoiIixlLnNwZWN1bGFyTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUk1BUCI6IiIsZS5zcGVjdWxhckludGVuc2l0eU1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVAiOiIiLGUuc3BlY3VsYXJDb2xvck1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJDT0xPUk1BUCI6IiIsZS5yb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1JPVUdITkVTU01BUCI6IiIsZS5tZXRhbG5lc3NNYXA/IiNkZWZpbmUgVVNFX01FVEFMTkVTU01BUCI6IiIsZS5hbHBoYU1hcD8iI2RlZmluZSBVU0VfQUxQSEFNQVAiOiIiLGUuYWxwaGFUZXN0PyIjZGVmaW5lIFVTRV9BTFBIQVRFU1QiOiIiLGUuc2hlZW4/IiNkZWZpbmUgVVNFX1NIRUVOIjoiIixlLnNoZWVuQ29sb3JNYXA/IiNkZWZpbmUgVVNFX1NIRUVOQ09MT1JNQVAiOiIiLGUuc2hlZW5Sb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1NIRUVOUk9VR0hORVNTTUFQIjoiIixlLnRyYW5zbWlzc2lvbj8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OIjoiIixlLnRyYW5zbWlzc2lvbk1hcD8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OTUFQIjoiIixlLnRoaWNrbmVzc01hcD8iI2RlZmluZSBVU0VfVEhJQ0tORVNTTUFQIjoiIixlLmRlY29kZVZpZGVvVGV4dHVyZT8iI2RlZmluZSBERUNPREVfVklERU9fVEVYVFVSRSI6IiIsZS52ZXJ0ZXhUYW5nZW50cz8iI2RlZmluZSBVU0VfVEFOR0VOVCI6IiIsZS52ZXJ0ZXhDb2xvcnN8fGUuaW5zdGFuY2luZ0NvbG9yPyIjZGVmaW5lIFVTRV9DT0xPUiI6IiIsZS52ZXJ0ZXhBbHBoYXM/IiNkZWZpbmUgVVNFX0NPTE9SX0FMUEhBIjoiIixlLnZlcnRleFV2cz8iI2RlZmluZSBVU0VfVVYiOiIiLGUudXZzVmVydGV4T25seT8iI2RlZmluZSBVVlNfVkVSVEVYX09OTFkiOiIiLGUuZ3JhZGllbnRNYXA/IiNkZWZpbmUgVVNFX0dSQURJRU5UTUFQIjoiIixlLmZsYXRTaGFkaW5nPyIjZGVmaW5lIEZMQVRfU0hBREVEIjoiIixlLmRvdWJsZVNpZGVkPyIjZGVmaW5lIERPVUJMRV9TSURFRCI6IiIsZS5mbGlwU2lkZWQ/IiNkZWZpbmUgRkxJUF9TSURFRCI6IiIsZS5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lIFVTRV9TSEFET1dNQVAiOiIiLGUuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSAiK2w6IiIsZS5wcmVtdWx0aXBsaWVkQWxwaGE/IiNkZWZpbmUgUFJFTVVMVElQTElFRF9BTFBIQSI6IiIsZS5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cz8iI2RlZmluZSBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTIjoiIixlLmxvZ2FyaXRobWljRGVwdGhCdWZmZXI/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGIjoiIixlLmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJmUucmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGX0VYVCI6IiIsKGUuZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRHx8ZS5lbnZNYXApJiZlLnJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZD8iI2RlZmluZSBURVhUVVJFX0xPRF9FWFQiOiIiLCJ1bmlmb3JtIG1hdDQgdmlld01hdHJpeDsiLCJ1bmlmb3JtIHZlYzMgY2FtZXJhUG9zaXRpb247IiwidW5pZm9ybSBib29sIGlzT3J0aG9ncmFwaGljOyIsZS50b25lTWFwcGluZyE9PXlwPyIjZGVmaW5lIFRPTkVfTUFQUElORyI6IiIsZS50b25lTWFwcGluZyE9PXlwP3ZpLnRvbmVtYXBwaW5nX3BhcnNfZnJhZ21lbnQ6IiIsZS50b25lTWFwcGluZyE9PXlwP0tGZSgidG9uZU1hcHBpbmciLGUudG9uZU1hcHBpbmcpOiIiLGUuZGl0aGVyaW5nPyIjZGVmaW5lIERJVEhFUklORyI6IiIsZS5hbHBoYVdyaXRlPyIiOiIjZGVmaW5lIE9QQVFVRSIsdmkuZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQsWkZlKCJsaW5lYXJUb091dHB1dFRleGVsIixlLm91dHB1dEVuY29kaW5nKSxlLmRlcHRoUGFja2luZz8iI2RlZmluZSBERVBUSF9QQUNLSU5HICIrZS5kZXB0aFBhY2tpbmc6IiIsIlxuIl0uZmlsdGVyKGZ4KS5qb2luKCJcbiIpKSxhPW5CKGEpLGE9SWVlKGEsZSksYT1BZWUoYSxlKSxzPW5CKHMpLHM9SWVlKHMsZSkscz1BZWUocyxlKSxhPVJlZShhKSxzPVJlZShzKSxlLmlzV2ViR0wyJiYhMCE9PWUuaXNSYXdTaGFkZXJNYXRlcmlhbCYmKHk9IiN2ZXJzaW9uIDMwMCBlc1xuIixfPVsicHJlY2lzaW9uIG1lZGl1bXAgc2FtcGxlcjJEQXJyYXk7IiwiI2RlZmluZSBhdHRyaWJ1dGUgaW4iLCIjZGVmaW5lIHZhcnlpbmcgb3V0IiwiI2RlZmluZSB0ZXh0dXJlMkQgdGV4dHVyZSJdLmpvaW4oIlxuIikrIlxuIitfLE09WyIjZGVmaW5lIHZhcnlpbmcgaW4iLGUuZ2xzbFZlcnNpb249PT1lZWU/IiI6ImxheW91dChsb2NhdGlvbiA9IDApIG91dCBoaWdocCB2ZWM0IHBjX2ZyYWdDb2xvcjsiLGUuZ2xzbFZlcnNpb249PT1lZWU/IiI6IiNkZWZpbmUgZ2xfRnJhZ0NvbG9yIHBjX2ZyYWdDb2xvciIsIiNkZWZpbmUgZ2xfRnJhZ0RlcHRoRVhUIGdsX0ZyYWdEZXB0aCIsIiNkZWZpbmUgdGV4dHVyZTJEIHRleHR1cmUiLCIjZGVmaW5lIHRleHR1cmVDdWJlIHRleHR1cmUiLCIjZGVmaW5lIHRleHR1cmUyRFByb2ogdGV4dHVyZVByb2oiLCIjZGVmaW5lIHRleHR1cmUyRExvZEVYVCB0ZXh0dXJlTG9kIiwiI2RlZmluZSB0ZXh0dXJlMkRQcm9qTG9kRVhUIHRleHR1cmVQcm9qTG9kIiwiI2RlZmluZSB0ZXh0dXJlQ3ViZUxvZEVYVCB0ZXh0dXJlTG9kIiwiI2RlZmluZSB0ZXh0dXJlMkRHcmFkRVhUIHRleHR1cmVHcmFkIiwiI2RlZmluZSB0ZXh0dXJlMkRQcm9qR3JhZEVYVCB0ZXh0dXJlUHJvakdyYWQiLCIjZGVmaW5lIHRleHR1cmVDdWJlR3JhZEVYVCB0ZXh0dXJlR3JhZCJdLmpvaW4oIlxuIikrIlxuIitNKTtsZXQgZWUsUSxSPXkrTStzLEk9VGVlKHIsMzU2MzMseStfK2EpLEI9VGVlKHIsMzU2MzIsUik7aWYoci5hdHRhY2hTaGFkZXIobSxJKSxyLmF0dGFjaFNoYWRlcihtLEIpLHZvaWQgMCE9PWUuaW5kZXgwQXR0cmlidXRlTmFtZT9yLmJpbmRBdHRyaWJMb2NhdGlvbihtLDAsZS5pbmRleDBBdHRyaWJ1dGVOYW1lKTohMD09PWUubW9ycGhUYXJnZXRzJiZyLmJpbmRBdHRyaWJMb2NhdGlvbihtLDAsInBvc2l0aW9uIiksci5saW5rUHJvZ3JhbShtKSxuLmRlYnVnLmNoZWNrU2hhZGVyRXJyb3JzKXtsZXQgd2U9ci5nZXRQcm9ncmFtSW5mb0xvZyhtKS50cmltKCksUWU9ci5nZXRTaGFkZXJJbmZvTG9nKEkpLnRyaW0oKSxBZT1yLmdldFNoYWRlckluZm9Mb2coQikudHJpbSgpLEQ9ITAscmU9ITA7aWYoITE9PT1yLmdldFByb2dyYW1QYXJhbWV0ZXIobSwzNTcxNCkpe0Q9ITE7bGV0IGNlPURlZShyLEksInZlcnRleCIpLGhlPURlZShyLEIsImZyYWdtZW50Iik7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xQcm9ncmFtOiBTaGFkZXIgRXJyb3IgIityLmdldEVycm9yKCkrIiAtIFZBTElEQVRFX1NUQVRVUyAiK3IuZ2V0UHJvZ3JhbVBhcmFtZXRlcihtLDM1NzE1KSsiXG5cblByb2dyYW0gSW5mbyBMb2c6ICIrd2UrIlxuIitjZSsiXG4iK2hlKX1lbHNlIiIhPT13ZT9jb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbTogUHJvZ3JhbSBJbmZvIExvZzoiLHdlKTooIiI9PT1RZXx8IiI9PT1BZSkmJihyZT0hMSk7cmUmJih0aGlzLmRpYWdub3N0aWNzPXtydW5uYWJsZTpELHByb2dyYW1Mb2c6d2UsdmVydGV4U2hhZGVyOntsb2c6UWUscHJlZml4Ol99LGZyYWdtZW50U2hhZGVyOntsb2c6QWUscHJlZml4Ok19fSl9cmV0dXJuIHIuZGVsZXRlU2hhZGVyKEkpLHIuZGVsZXRlU2hhZGVyKEIpLHRoaXMuZ2V0VW5pZm9ybXM9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09ZWUmJihlZT1uZXcgTXAocixtKSksZWV9LHRoaXMuZ2V0QXR0cmlidXRlcz1mdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT1RJiYoUT1mdW5jdGlvbihuLHQpe2xldCBlPXt9LGk9bi5nZXRQcm9ncmFtUGFyYW1ldGVyKHQsMzU3MjEpO2ZvcihsZXQgcj0wO3I8aTtyKyspe2xldCBvPW4uZ2V0QWN0aXZlQXR0cmliKHQsciksYT1vLm5hbWUscz0xOzM1Njc0PT09by50eXBlJiYocz0yKSwzNTY3NT09PW8udHlwZSYmKHM9MyksMzU2NzY9PT1vLnR5cGUmJihzPTQpLGVbYV09e3R5cGU6by50eXBlLGxvY2F0aW9uOm4uZ2V0QXR0cmliTG9jYXRpb24odCxhKSxsb2NhdGlvblNpemU6c319cmV0dXJuIGV9KHIsbSkpLFF9LHRoaXMuZGVzdHJveT1mdW5jdGlvbigpe2kucmVsZWFzZVN0YXRlc09mUHJvZ3JhbSh0aGlzKSxyLmRlbGV0ZVByb2dyYW0obSksdGhpcy5wcm9ncmFtPXZvaWQgMH0sdGhpcy5uYW1lPWUuc2hhZGVyTmFtZSx0aGlzLmlkPVhGZSsrLHRoaXMuY2FjaGVLZXk9dCx0aGlzLnVzZWRUaW1lcz0xLHRoaXMucHJvZ3JhbT1tLHRoaXMudmVydGV4U2hhZGVyPUksdGhpcy5mcmFnbWVudFNoYWRlcj1CLHRoaXN9dmFyIHUyZT0wLGlCPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zaGFkZXJDYWNoZT1uZXcgTWFwLHRoaXMubWF0ZXJpYWxDYWNoZT1uZXcgTWFwfXVwZGF0ZSh0KXtsZXQgaT10LmZyYWdtZW50U2hhZGVyLHI9dGhpcy5fZ2V0U2hhZGVyU3RhZ2UodC52ZXJ0ZXhTaGFkZXIpLG89dGhpcy5fZ2V0U2hhZGVyU3RhZ2UoaSksYT10aGlzLl9nZXRTaGFkZXJDYWNoZUZvck1hdGVyaWFsKHQpO3JldHVybiExPT09YS5oYXMocikmJihhLmFkZChyKSxyLnVzZWRUaW1lcysrKSwhMT09PWEuaGFzKG8pJiYoYS5hZGQobyksby51c2VkVGltZXMrKyksdGhpc31yZW1vdmUodCl7bGV0IGU9dGhpcy5tYXRlcmlhbENhY2hlLmdldCh0KTtmb3IobGV0IGkgb2YgZSlpLnVzZWRUaW1lcy0tLDA9PT1pLnVzZWRUaW1lcyYmdGhpcy5zaGFkZXJDYWNoZS5kZWxldGUoaSk7cmV0dXJuIHRoaXMubWF0ZXJpYWxDYWNoZS5kZWxldGUodCksdGhpc31nZXRWZXJ0ZXhTaGFkZXJJRCh0KXtyZXR1cm4gdGhpcy5fZ2V0U2hhZGVyU3RhZ2UodC52ZXJ0ZXhTaGFkZXIpLmlkfWdldEZyYWdtZW50U2hhZGVySUQodCl7cmV0dXJuIHRoaXMuX2dldFNoYWRlclN0YWdlKHQuZnJhZ21lbnRTaGFkZXIpLmlkfWRpc3Bvc2UoKXt0aGlzLnNoYWRlckNhY2hlLmNsZWFyKCksdGhpcy5tYXRlcmlhbENhY2hlLmNsZWFyKCl9X2dldFNoYWRlckNhY2hlRm9yTWF0ZXJpYWwodCl7bGV0IGU9dGhpcy5tYXRlcmlhbENhY2hlO3JldHVybiExPT09ZS5oYXModCkmJmUuc2V0KHQsbmV3IFNldCksZS5nZXQodCl9X2dldFNoYWRlclN0YWdlKHQpe2xldCBlPXRoaXMuc2hhZGVyQ2FjaGU7aWYoITE9PT1lLmhhcyh0KSl7bGV0IGk9bmV3IHJCO2Uuc2V0KHQsaSl9cmV0dXJuIGUuZ2V0KHQpfX0sckI9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmlkPXUyZSsrLHRoaXMudXNlZFRpbWVzPTB9fTtmdW5jdGlvbiBwMmUobix0LGUsaSxyLG8sYSl7bGV0IHM9bmV3IEVJLGw9bmV3IGlCLGM9W10sZD1yLmlzV2ViR0wyLHU9ci5sb2dhcml0aG1pY0RlcHRoQnVmZmVyLHA9ci5mbG9hdFZlcnRleFRleHR1cmVzLGg9ci5tYXhWZXJ0ZXhVbmlmb3JtcyxtPXIudmVydGV4VGV4dHVyZXMsXz1yLnByZWNpc2lvbixNPXtNZXNoRGVwdGhNYXRlcmlhbDoiZGVwdGgiLE1lc2hEaXN0YW5jZU1hdGVyaWFsOiJkaXN0YW5jZVJHQkEiLE1lc2hOb3JtYWxNYXRlcmlhbDoibm9ybWFsIixNZXNoQmFzaWNNYXRlcmlhbDoiYmFzaWMiLE1lc2hMYW1iZXJ0TWF0ZXJpYWw6ImxhbWJlcnQiLE1lc2hQaG9uZ01hdGVyaWFsOiJwaG9uZyIsTWVzaFRvb25NYXRlcmlhbDoidG9vbiIsTWVzaFN0YW5kYXJkTWF0ZXJpYWw6InBoeXNpY2FsIixNZXNoUGh5c2ljYWxNYXRlcmlhbDoicGh5c2ljYWwiLE1lc2hNYXRjYXBNYXRlcmlhbDoibWF0Y2FwIixMaW5lQmFzaWNNYXRlcmlhbDoiYmFzaWMiLExpbmVEYXNoZWRNYXRlcmlhbDoiZGFzaGVkIixQb2ludHNNYXRlcmlhbDoicG9pbnRzIixTaGFkb3dNYXRlcmlhbDoic2hhZG93IixTcHJpdGVNYXRlcmlhbDoic3ByaXRlIn07cmV0dXJue2dldFBhcmFtZXRlcnM6ZnVuY3Rpb24oRCxyZSxjZSxoZSxfZSl7bGV0IEZlLGx0LE10LHB0LCQ9aGUuZm9nLHBlPShELmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/ZTp0KS5nZXQoRC5lbnZNYXB8fChELmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/aGUuZW52aXJvbm1lbnQ6bnVsbCkpLEdlPU1bRC50eXBlXSxTZT1fZS5pc1NraW5uZWRNZXNoP2Z1bmN0aW9uKEQpe2xldCBjZT1ELnNrZWxldG9uLmJvbmVzO2lmKHApcmV0dXJuIDEwMjQ7e2xldCBfZT1NYXRoLmZsb29yKChoLTIwKS80KSwkPU1hdGgubWluKF9lLGNlLmxlbmd0aCk7cmV0dXJuICQ8Y2UubGVuZ3RoPyhjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFNrZWxldG9uIGhhcyAiK2NlLmxlbmd0aCsiIGJvbmVzLiBUaGlzIEdQVSBzdXBwb3J0cyAiKyQrIi4iKSwwKTokfX0oX2UpOjA7aWYobnVsbCE9PUQucHJlY2lzaW9uJiYoXz1yLmdldE1heFByZWNpc2lvbihELnByZWNpc2lvbiksXyE9PUQucHJlY2lzaW9uJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbS5nZXRQYXJhbWV0ZXJzOiIsRC5wcmVjaXNpb24sIm5vdCBzdXBwb3J0ZWQsIHVzaW5nIixfLCJpbnN0ZWFkLiIpKSxHZSl7bGV0IENlPWpjW0dlXTtGZT1DZS52ZXJ0ZXhTaGFkZXIsbHQ9Q2UuZnJhZ21lbnRTaGFkZXJ9ZWxzZSBGZT1ELnZlcnRleFNoYWRlcixsdD1ELmZyYWdtZW50U2hhZGVyLGwudXBkYXRlKEQpLE10PWwuZ2V0VmVydGV4U2hhZGVySUQoRCkscHQ9bC5nZXRGcmFnbWVudFNoYWRlcklEKEQpO2xldCBrZT1uLmdldFJlbmRlclRhcmdldCgpLHd0PUQuY2xlYXJjb2F0PjA7cmV0dXJue2lzV2ViR0wyOmQsc2hhZGVySUQ6R2Usc2hhZGVyTmFtZTpELnR5cGUsdmVydGV4U2hhZGVyOkZlLGZyYWdtZW50U2hhZGVyOmx0LGRlZmluZXM6RC5kZWZpbmVzLGN1c3RvbVZlcnRleFNoYWRlcklEOk10LGN1c3RvbUZyYWdtZW50U2hhZGVySUQ6cHQsaXNSYXdTaGFkZXJNYXRlcmlhbDohMD09PUQuaXNSYXdTaGFkZXJNYXRlcmlhbCxnbHNsVmVyc2lvbjpELmdsc2xWZXJzaW9uLHByZWNpc2lvbjpfLGluc3RhbmNpbmc6ITA9PT1fZS5pc0luc3RhbmNlZE1lc2gsaW5zdGFuY2luZ0NvbG9yOiEwPT09X2UuaXNJbnN0YW5jZWRNZXNoJiZudWxsIT09X2UuaW5zdGFuY2VDb2xvcixzdXBwb3J0c1ZlcnRleFRleHR1cmVzOm0sb3V0cHV0RW5jb2Rpbmc6bnVsbD09PWtlP24ub3V0cHV0RW5jb2Rpbmc6ITA9PT1rZS5pc1hSUmVuZGVyVGFyZ2V0P2tlLnRleHR1cmUuZW5jb2Rpbmc6d3AsbWFwOiEhRC5tYXAsbWF0Y2FwOiEhRC5tYXRjYXAsZW52TWFwOiEhcGUsZW52TWFwTW9kZTpwZSYmcGUubWFwcGluZyxlbnZNYXBDdWJlVVY6ISFwZSYmKHBlLm1hcHBpbmc9PT1KSXx8cGUubWFwcGluZz09PWxWKSxsaWdodE1hcDohIUQubGlnaHRNYXAsYW9NYXA6ISFELmFvTWFwLGVtaXNzaXZlTWFwOiEhRC5lbWlzc2l2ZU1hcCxidW1wTWFwOiEhRC5idW1wTWFwLG5vcm1hbE1hcDohIUQubm9ybWFsTWFwLG9iamVjdFNwYWNlTm9ybWFsTWFwOkQubm9ybWFsTWFwVHlwZT09PVFSZSx0YW5nZW50U3BhY2VOb3JtYWxNYXA6RC5ub3JtYWxNYXBUeXBlPT09Y18sZGVjb2RlVmlkZW9UZXh0dXJlOiEhRC5tYXAmJiEwPT09RC5tYXAuaXNWaWRlb1RleHR1cmUmJkQubWFwLmVuY29kaW5nPT09RHIsY2xlYXJjb2F0Ond0LGNsZWFyY29hdE1hcDp3dCYmISFELmNsZWFyY29hdE1hcCxjbGVhcmNvYXRSb3VnaG5lc3NNYXA6d3QmJiEhRC5jbGVhcmNvYXRSb3VnaG5lc3NNYXAsY2xlYXJjb2F0Tm9ybWFsTWFwOnd0JiYhIUQuY2xlYXJjb2F0Tm9ybWFsTWFwLGRpc3BsYWNlbWVudE1hcDohIUQuZGlzcGxhY2VtZW50TWFwLHJvdWdobmVzc01hcDohIUQucm91Z2huZXNzTWFwLG1ldGFsbmVzc01hcDohIUQubWV0YWxuZXNzTWFwLHNwZWN1bGFyTWFwOiEhRC5zcGVjdWxhck1hcCxzcGVjdWxhckludGVuc2l0eU1hcDohIUQuc3BlY3VsYXJJbnRlbnNpdHlNYXAsc3BlY3VsYXJDb2xvck1hcDohIUQuc3BlY3VsYXJDb2xvck1hcCxhbHBoYU1hcDohIUQuYWxwaGFNYXAsYWxwaGFUZXN0OkQuYWxwaGFUZXN0PjAsYWxwaGFXcml0ZTpELmFscGhhV3JpdGV8fEQudHJhbnNwYXJlbnQsZ3JhZGllbnRNYXA6ISFELmdyYWRpZW50TWFwLHNoZWVuOkQuc2hlZW4+MCxzaGVlbkNvbG9yTWFwOiEhRC5zaGVlbkNvbG9yTWFwLHNoZWVuUm91Z2huZXNzTWFwOiEhRC5zaGVlblJvdWdobmVzc01hcCx0cmFuc21pc3Npb246RC50cmFuc21pc3Npb24+MCx0cmFuc21pc3Npb25NYXA6ISFELnRyYW5zbWlzc2lvbk1hcCx0aGlja25lc3NNYXA6ISFELnRoaWNrbmVzc01hcCxjb21iaW5lOkQuY29tYmluZSx2ZXJ0ZXhUYW5nZW50czohIUQubm9ybWFsTWFwJiYhIV9lLmdlb21ldHJ5JiYhIV9lLmdlb21ldHJ5LmF0dHJpYnV0ZXMudGFuZ2VudCx2ZXJ0ZXhDb2xvcnM6RC52ZXJ0ZXhDb2xvcnMsdmVydGV4QWxwaGFzOiEwPT09RC52ZXJ0ZXhDb2xvcnMmJiEhX2UuZ2VvbWV0cnkmJiEhX2UuZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvciYmND09PV9lLmdlb21ldHJ5LmF0dHJpYnV0ZXMuY29sb3IuaXRlbVNpemUsdmVydGV4VXZzOiEhKEQubWFwfHxELmJ1bXBNYXB8fEQubm9ybWFsTWFwfHxELnNwZWN1bGFyTWFwfHxELmFscGhhTWFwfHxELmVtaXNzaXZlTWFwfHxELnJvdWdobmVzc01hcHx8RC5tZXRhbG5lc3NNYXB8fEQuY2xlYXJjb2F0TWFwfHxELmNsZWFyY29hdFJvdWdobmVzc01hcHx8RC5jbGVhcmNvYXROb3JtYWxNYXB8fEQuZGlzcGxhY2VtZW50TWFwfHxELnRyYW5zbWlzc2lvbk1hcHx8RC50aGlja25lc3NNYXB8fEQuc3BlY3VsYXJJbnRlbnNpdHlNYXB8fEQuc3BlY3VsYXJDb2xvck1hcHx8RC5zaGVlbkNvbG9yTWFwfHxELnNoZWVuUm91Z2huZXNzTWFwKSx1dnNWZXJ0ZXhPbmx5OiEoRC5tYXB8fEQuYnVtcE1hcHx8RC5ub3JtYWxNYXB8fEQuc3BlY3VsYXJNYXB8fEQuYWxwaGFNYXB8fEQuZW1pc3NpdmVNYXB8fEQucm91Z2huZXNzTWFwfHxELm1ldGFsbmVzc01hcHx8RC5jbGVhcmNvYXROb3JtYWxNYXB8fEQudHJhbnNtaXNzaW9uPjB8fEQudHJhbnNtaXNzaW9uTWFwfHxELnRoaWNrbmVzc01hcHx8RC5zcGVjdWxhckludGVuc2l0eU1hcHx8RC5zcGVjdWxhckNvbG9yTWFwfHxELnNoZWVuPjB8fEQuc2hlZW5Db2xvck1hcHx8RC5zaGVlblJvdWdobmVzc01hcHx8IUQuZGlzcGxhY2VtZW50TWFwKSxmb2c6ISEkLHVzZUZvZzpELmZvZyxmb2dFeHAyOiQmJiQuaXNGb2dFeHAyLGZsYXRTaGFkaW5nOiEhRC5mbGF0U2hhZGluZyxzaXplQXR0ZW51YXRpb246RC5zaXplQXR0ZW51YXRpb24sbG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcjp1LHNraW5uaW5nOiEwPT09X2UuaXNTa2lubmVkTWVzaCYmU2U+MCxtYXhCb25lczpTZSx1c2VWZXJ0ZXhUZXh0dXJlOnAsbW9ycGhUYXJnZXRzOiEhX2UuZ2VvbWV0cnkmJiEhX2UuZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLG1vcnBoTm9ybWFsczohIV9lLmdlb21ldHJ5JiYhIV9lLmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWwsbW9ycGhUYXJnZXRzQ291bnQ6X2UuZ2VvbWV0cnkmJl9lLmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbj9fZS5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24ubGVuZ3RoOjAsbnVtRGlyTGlnaHRzOnJlLmRpcmVjdGlvbmFsLmxlbmd0aCxudW1Qb2ludExpZ2h0czpyZS5wb2ludC5sZW5ndGgsbnVtU3BvdExpZ2h0czpyZS5zcG90Lmxlbmd0aCxudW1SZWN0QXJlYUxpZ2h0czpyZS5yZWN0QXJlYS5sZW5ndGgsbnVtSGVtaUxpZ2h0czpyZS5oZW1pLmxlbmd0aCxudW1EaXJMaWdodFNoYWRvd3M6cmUuZGlyZWN0aW9uYWxTaGFkb3dNYXAubGVuZ3RoLG51bVBvaW50TGlnaHRTaGFkb3dzOnJlLnBvaW50U2hhZG93TWFwLmxlbmd0aCxudW1TcG90TGlnaHRTaGFkb3dzOnJlLnNwb3RTaGFkb3dNYXAubGVuZ3RoLG51bUNsaXBwaW5nUGxhbmVzOmEubnVtUGxhbmVzLG51bUNsaXBJbnRlcnNlY3Rpb246YS5udW1JbnRlcnNlY3Rpb24sZGl0aGVyaW5nOkQuZGl0aGVyaW5nLHNoYWRvd01hcEVuYWJsZWQ6bi5zaGFkb3dNYXAuZW5hYmxlZCYmY2UubGVuZ3RoPjAsc2hhZG93TWFwVHlwZTpuLnNoYWRvd01hcC50eXBlLHRvbmVNYXBwaW5nOkQudG9uZU1hcHBlZD9uLnRvbmVNYXBwaW5nOnlwLHBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzOm4ucGh5c2ljYWxseUNvcnJlY3RMaWdodHMscHJlbXVsdGlwbGllZEFscGhhOkQucHJlbXVsdGlwbGllZEFscGhhLGRvdWJsZVNpZGVkOkQuc2lkZT09PVowLGZsaXBTaWRlZDpELnNpZGU9PT1ibyxkZXB0aFBhY2tpbmc6dm9pZCAwIT09RC5kZXB0aFBhY2tpbmcmJkQuZGVwdGhQYWNraW5nLGluZGV4MEF0dHJpYnV0ZU5hbWU6RC5pbmRleDBBdHRyaWJ1dGVOYW1lLGV4dGVuc2lvbkRlcml2YXRpdmVzOkQuZXh0ZW5zaW9ucyYmRC5leHRlbnNpb25zLmRlcml2YXRpdmVzLGV4dGVuc2lvbkZyYWdEZXB0aDpELmV4dGVuc2lvbnMmJkQuZXh0ZW5zaW9ucy5mcmFnRGVwdGgsZXh0ZW5zaW9uRHJhd0J1ZmZlcnM6RC5leHRlbnNpb25zJiZELmV4dGVuc2lvbnMuZHJhd0J1ZmZlcnMsZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRDpELmV4dGVuc2lvbnMmJkQuZXh0ZW5zaW9ucy5zaGFkZXJUZXh0dXJlTE9ELHJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoOmR8fGkuaGFzKCJFWFRfZnJhZ19kZXB0aCIpLHJlbmRlcmVyRXh0ZW5zaW9uRHJhd0J1ZmZlcnM6ZHx8aS5oYXMoIldFQkdMX2RyYXdfYnVmZmVycyIpLHJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZDpkfHxpLmhhcygiRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpLGN1c3RvbVByb2dyYW1DYWNoZUtleTpELmN1c3RvbVByb2dyYW1DYWNoZUtleSgpfX0sZ2V0UHJvZ3JhbUNhY2hlS2V5OmZ1bmN0aW9uKEQpe2xldCByZT1bXTtpZihELnNoYWRlcklEP3JlLnB1c2goRC5zaGFkZXJJRCk6KHJlLnB1c2goRC5jdXN0b21WZXJ0ZXhTaGFkZXJJRCkscmUucHVzaChELmN1c3RvbUZyYWdtZW50U2hhZGVySUQpKSx2b2lkIDAhPT1ELmRlZmluZXMpZm9yKGxldCBjZSBpbiBELmRlZmluZXMpcmUucHVzaChjZSkscmUucHVzaChELmRlZmluZXNbY2VdKTtyZXR1cm4hMT09PUQuaXNSYXdTaGFkZXJNYXRlcmlhbCYmKGZ1bmN0aW9uKEQscmUpe0QucHVzaChyZS5wcmVjaXNpb24pLEQucHVzaChyZS5vdXRwdXRFbmNvZGluZyksRC5wdXNoKHJlLmVudk1hcE1vZGUpLEQucHVzaChyZS5jb21iaW5lKSxELnB1c2gocmUudmVydGV4VXZzKSxELnB1c2gocmUuZm9nRXhwMiksRC5wdXNoKHJlLnNpemVBdHRlbnVhdGlvbiksRC5wdXNoKHJlLm1heEJvbmVzKSxELnB1c2gocmUubW9ycGhUYXJnZXRzQ291bnQpLEQucHVzaChyZS5udW1EaXJMaWdodHMpLEQucHVzaChyZS5udW1Qb2ludExpZ2h0cyksRC5wdXNoKHJlLm51bVNwb3RMaWdodHMpLEQucHVzaChyZS5udW1IZW1pTGlnaHRzKSxELnB1c2gocmUubnVtUmVjdEFyZWFMaWdodHMpLEQucHVzaChyZS5udW1EaXJMaWdodFNoYWRvd3MpLEQucHVzaChyZS5udW1Qb2ludExpZ2h0U2hhZG93cyksRC5wdXNoKHJlLm51bVNwb3RMaWdodFNoYWRvd3MpLEQucHVzaChyZS5zaGFkb3dNYXBUeXBlKSxELnB1c2gocmUudG9uZU1hcHBpbmcpLEQucHVzaChyZS5udW1DbGlwcGluZ1BsYW5lcyksRC5wdXNoKHJlLm51bUNsaXBJbnRlcnNlY3Rpb24pLEQucHVzaChyZS5hbHBoYVdyaXRlKX0ocmUsRCksZnVuY3Rpb24oRCxyZSl7cy5kaXNhYmxlQWxsKCkscmUuaXNXZWJHTDImJnMuZW5hYmxlKDApLHJlLnN1cHBvcnRzVmVydGV4VGV4dHVyZXMmJnMuZW5hYmxlKDEpLHJlLmluc3RhbmNpbmcmJnMuZW5hYmxlKDIpLHJlLmluc3RhbmNpbmdDb2xvciYmcy5lbmFibGUoMykscmUubWFwJiZzLmVuYWJsZSg0KSxyZS5tYXRjYXAmJnMuZW5hYmxlKDUpLHJlLmVudk1hcCYmcy5lbmFibGUoNikscmUuZW52TWFwQ3ViZVVWJiZzLmVuYWJsZSg3KSxyZS5saWdodE1hcCYmcy5lbmFibGUoOCkscmUuYW9NYXAmJnMuZW5hYmxlKDkpLHJlLmVtaXNzaXZlTWFwJiZzLmVuYWJsZSgxMCkscmUuYnVtcE1hcCYmcy5lbmFibGUoMTEpLHJlLm5vcm1hbE1hcCYmcy5lbmFibGUoMTIpLHJlLm9iamVjdFNwYWNlTm9ybWFsTWFwJiZzLmVuYWJsZSgxMykscmUudGFuZ2VudFNwYWNlTm9ybWFsTWFwJiZzLmVuYWJsZSgxNCkscmUuY2xlYXJjb2F0JiZzLmVuYWJsZSgxNSkscmUuY2xlYXJjb2F0TWFwJiZzLmVuYWJsZSgxNikscmUuY2xlYXJjb2F0Um91Z2huZXNzTWFwJiZzLmVuYWJsZSgxNykscmUuY2xlYXJjb2F0Tm9ybWFsTWFwJiZzLmVuYWJsZSgxOCkscmUuZGlzcGxhY2VtZW50TWFwJiZzLmVuYWJsZSgxOSkscmUuc3BlY3VsYXJNYXAmJnMuZW5hYmxlKDIwKSxyZS5yb3VnaG5lc3NNYXAmJnMuZW5hYmxlKDIxKSxyZS5tZXRhbG5lc3NNYXAmJnMuZW5hYmxlKDIyKSxyZS5ncmFkaWVudE1hcCYmcy5lbmFibGUoMjMpLHJlLmFscGhhTWFwJiZzLmVuYWJsZSgyNCkscmUuYWxwaGFUZXN0JiZzLmVuYWJsZSgyNSkscmUudmVydGV4Q29sb3JzJiZzLmVuYWJsZSgyNikscmUudmVydGV4QWxwaGFzJiZzLmVuYWJsZSgyNykscmUudmVydGV4VXZzJiZzLmVuYWJsZSgyOCkscmUudmVydGV4VGFuZ2VudHMmJnMuZW5hYmxlKDI5KSxyZS51dnNWZXJ0ZXhPbmx5JiZzLmVuYWJsZSgzMCkscmUuZm9nJiZzLmVuYWJsZSgzMSksRC5wdXNoKHMubWFzaykscy5kaXNhYmxlQWxsKCkscmUudXNlRm9nJiZzLmVuYWJsZSgwKSxyZS5mbGF0U2hhZGluZyYmcy5lbmFibGUoMSkscmUubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmcy5lbmFibGUoMikscmUuc2tpbm5pbmcmJnMuZW5hYmxlKDMpLHJlLnVzZVZlcnRleFRleHR1cmUmJnMuZW5hYmxlKDQpLHJlLm1vcnBoVGFyZ2V0cyYmcy5lbmFibGUoNSkscmUubW9ycGhOb3JtYWxzJiZzLmVuYWJsZSg2KSxyZS5wcmVtdWx0aXBsaWVkQWxwaGEmJnMuZW5hYmxlKDcpLHJlLnNoYWRvd01hcEVuYWJsZWQmJnMuZW5hYmxlKDgpLHJlLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzJiZzLmVuYWJsZSg5KSxyZS5kb3VibGVTaWRlZCYmcy5lbmFibGUoMTApLHJlLmZsaXBTaWRlZCYmcy5lbmFibGUoMTEpLHJlLmRlcHRoUGFja2luZyYmcy5lbmFibGUoMTIpLHJlLmRpdGhlcmluZyYmcy5lbmFibGUoMTMpLHJlLnNwZWN1bGFySW50ZW5zaXR5TWFwJiZzLmVuYWJsZSgxNCkscmUuc3BlY3VsYXJDb2xvck1hcCYmcy5lbmFibGUoMTUpLHJlLnRyYW5zbWlzc2lvbiYmcy5lbmFibGUoMTYpLHJlLnRyYW5zbWlzc2lvbk1hcCYmcy5lbmFibGUoMTcpLHJlLnRoaWNrbmVzc01hcCYmcy5lbmFibGUoMTgpLHJlLnNoZWVuJiZzLmVuYWJsZSgxOSkscmUuc2hlZW5Db2xvck1hcCYmcy5lbmFibGUoMjApLHJlLnNoZWVuUm91Z2huZXNzTWFwJiZzLmVuYWJsZSgyMSkscmUuZGVjb2RlVmlkZW9UZXh0dXJlJiZzLmVuYWJsZSgyMiksRC5wdXNoKHMubWFzayl9KHJlLEQpLHJlLnB1c2gobi5vdXRwdXRFbmNvZGluZykpLHJlLnB1c2goRC5jdXN0b21Qcm9ncmFtQ2FjaGVLZXkpLHJlLmpvaW4oKX0sZ2V0VW5pZm9ybXM6ZnVuY3Rpb24oRCl7bGV0IGNlLHJlPU1bRC50eXBlXTtyZXR1cm4gY2U9cmU/ZFBlLmNsb25lKGpjW3JlXS51bmlmb3Jtcyk6RC51bmlmb3JtcyxjZX0sYWNxdWlyZVByb2dyYW06ZnVuY3Rpb24oRCxyZSl7bGV0IGNlO2ZvcihsZXQgaGU9MCxfZT1jLmxlbmd0aDtoZTxfZTtoZSsrKXtsZXQgJD1jW2hlXTtpZigkLmNhY2hlS2V5PT09cmUpe2NlPSQsKytjZS51c2VkVGltZXM7YnJlYWt9fXJldHVybiB2b2lkIDA9PT1jZSYmKGNlPW5ldyBkMmUobixyZSxELG8pLGMucHVzaChjZSkpLGNlfSxyZWxlYXNlUHJvZ3JhbTpmdW5jdGlvbihEKXtpZigwPT0tLUQudXNlZFRpbWVzKXtsZXQgcmU9Yy5pbmRleE9mKEQpO2NbcmVdPWNbYy5sZW5ndGgtMV0sYy5wb3AoKSxELmRlc3Ryb3koKX19LHJlbGVhc2VTaGFkZXJDYWNoZTpmdW5jdGlvbihEKXtsLnJlbW92ZShEKX0scHJvZ3JhbXM6YyxkaXNwb3NlOmZ1bmN0aW9uKCl7bC5kaXNwb3NlKCl9fX1mdW5jdGlvbiBoMmUoKXtsZXQgbj1uZXcgV2Vha01hcDtyZXR1cm57Z2V0OmZ1bmN0aW9uKG8pe2xldCBhPW4uZ2V0KG8pO3JldHVybiB2b2lkIDA9PT1hJiYoYT17fSxuLnNldChvLGEpKSxhfSxyZW1vdmU6ZnVuY3Rpb24obyl7bi5kZWxldGUobyl9LHVwZGF0ZTpmdW5jdGlvbihvLGEscyl7bi5nZXQobylbYV09c30sZGlzcG9zZTpmdW5jdGlvbigpe249bmV3IFdlYWtNYXB9fX1mdW5jdGlvbiBtMmUobix0KXtyZXR1cm4gbi5ncm91cE9yZGVyIT09dC5ncm91cE9yZGVyP24uZ3JvdXBPcmRlci10Lmdyb3VwT3JkZXI6bi5yZW5kZXJPcmRlciE9PXQucmVuZGVyT3JkZXI/bi5yZW5kZXJPcmRlci10LnJlbmRlck9yZGVyOm4ubWF0ZXJpYWwuaWQhPT10Lm1hdGVyaWFsLmlkP24ubWF0ZXJpYWwuaWQtdC5tYXRlcmlhbC5pZDpuLnohPT10Lno/bi56LXQuejpuLmlkLXQuaWR9ZnVuY3Rpb24ga2VlKG4sdCl7cmV0dXJuIG4uZ3JvdXBPcmRlciE9PXQuZ3JvdXBPcmRlcj9uLmdyb3VwT3JkZXItdC5ncm91cE9yZGVyOm4ucmVuZGVyT3JkZXIhPT10LnJlbmRlck9yZGVyP24ucmVuZGVyT3JkZXItdC5yZW5kZXJPcmRlcjpuLnohPT10Lno/dC56LW4uejpuLmlkLXQuaWR9ZnVuY3Rpb24gT2VlKCl7bGV0IG49W10sdD0wLGU9W10saT1bXSxyPVtdO2Z1bmN0aW9uIGEodSxwLGgsbSxfLE0pe2xldCB5PW5bdF07cmV0dXJuIHZvaWQgMD09PXk/KHk9e2lkOnUuaWQsb2JqZWN0OnUsZ2VvbWV0cnk6cCxtYXRlcmlhbDpoLGdyb3VwT3JkZXI6bSxyZW5kZXJPcmRlcjp1LnJlbmRlck9yZGVyLHo6Xyxncm91cDpNfSxuW3RdPXkpOih5LmlkPXUuaWQseS5vYmplY3Q9dSx5Lmdlb21ldHJ5PXAseS5tYXRlcmlhbD1oLHkuZ3JvdXBPcmRlcj1tLHkucmVuZGVyT3JkZXI9dS5yZW5kZXJPcmRlcix5Lno9Xyx5Lmdyb3VwPU0pLHQrKyx5fXJldHVybntvcGFxdWU6ZSx0cmFuc21pc3NpdmU6aSx0cmFuc3BhcmVudDpyLGluaXQ6ZnVuY3Rpb24oKXt0PTAsZS5sZW5ndGg9MCxpLmxlbmd0aD0wLHIubGVuZ3RoPTB9LHB1c2g6ZnVuY3Rpb24odSxwLGgsbSxfLE0pe2xldCB5PWEodSxwLGgsbSxfLE0pO2gudHJhbnNtaXNzaW9uPjA/aS5wdXNoKHkpOiEwPT09aC50cmFuc3BhcmVudD9yLnB1c2goeSk6ZS5wdXNoKHkpfSx1bnNoaWZ0OmZ1bmN0aW9uKHUscCxoLG0sXyxNKXtsZXQgeT1hKHUscCxoLG0sXyxNKTtoLnRyYW5zbWlzc2lvbj4wP2kudW5zaGlmdCh5KTohMD09PWgudHJhbnNwYXJlbnQ/ci51bnNoaWZ0KHkpOmUudW5zaGlmdCh5KX0sZmluaXNoOmZ1bmN0aW9uKCl7Zm9yKGxldCB1PXQscD1uLmxlbmd0aDt1PHA7dSsrKXtsZXQgaD1uW3VdO2lmKG51bGw9PT1oLmlkKWJyZWFrO2guaWQ9bnVsbCxoLm9iamVjdD1udWxsLGguZ2VvbWV0cnk9bnVsbCxoLm1hdGVyaWFsPW51bGwsaC5ncm91cD1udWxsfX0sc29ydDpmdW5jdGlvbih1LHApe2UubGVuZ3RoPjEmJmUuc29ydCh1fHxtMmUpLGkubGVuZ3RoPjEmJmkuc29ydChwfHxrZWUpLHIubGVuZ3RoPjEmJnIuc29ydChwfHxrZWUpfX19ZnVuY3Rpb24gZjJlKCl7bGV0IG49bmV3IFdlYWtNYXA7cmV0dXJue2dldDpmdW5jdGlvbihpLHIpe2xldCBvO3JldHVybiExPT09bi5oYXMoaSk/KG89bmV3IE9lZSxuLnNldChpLFtvXSkpOnI+PW4uZ2V0KGkpLmxlbmd0aD8obz1uZXcgT2VlLG4uZ2V0KGkpLnB1c2gobykpOm89bi5nZXQoaSlbcl0sb30sZGlzcG9zZTpmdW5jdGlvbigpe249bmV3IFdlYWtNYXB9fX1mdW5jdGlvbiBnMmUoKXtsZXQgbj17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKHQpe2lmKHZvaWQgMCE9PW5bdC5pZF0pcmV0dXJuIG5bdC5pZF07bGV0IGU7c3dpdGNoKHQudHlwZSl7Y2FzZSJEaXJlY3Rpb25hbExpZ2h0IjplPXtkaXJlY3Rpb246bmV3IEssY29sb3I6bmV3IHNufTticmVhaztjYXNlIlNwb3RMaWdodCI6ZT17cG9zaXRpb246bmV3IEssZGlyZWN0aW9uOm5ldyBLLGNvbG9yOm5ldyBzbixkaXN0YW5jZTowLGNvbmVDb3M6MCxwZW51bWJyYUNvczowLGRlY2F5OjB9O2JyZWFrO2Nhc2UiUG9pbnRMaWdodCI6ZT17cG9zaXRpb246bmV3IEssY29sb3I6bmV3IHNuLGRpc3RhbmNlOjAsZGVjYXk6MH07YnJlYWs7Y2FzZSJIZW1pc3BoZXJlTGlnaHQiOmU9e2RpcmVjdGlvbjpuZXcgSyxza3lDb2xvcjpuZXcgc24sZ3JvdW5kQ29sb3I6bmV3IHNufTticmVhaztjYXNlIlJlY3RBcmVhTGlnaHQiOmU9e2NvbG9yOm5ldyBzbixwb3NpdGlvbjpuZXcgSyxoYWxmV2lkdGg6bmV3IEssaGFsZkhlaWdodDpuZXcgS319cmV0dXJuIG5bdC5pZF09ZSxlfX19dmFyIGIyZT0wO2Z1bmN0aW9uIHYyZShuLHQpe3JldHVybih0LmNhc3RTaGFkb3c/MTowKS0obi5jYXN0U2hhZG93PzE6MCl9ZnVuY3Rpb24geTJlKG4sdCl7bGV0IGU9bmV3IGcyZSxpPWZ1bmN0aW9uKCl7bGV0IG49e307cmV0dXJue2dldDpmdW5jdGlvbih0KXtpZih2b2lkIDAhPT1uW3QuaWRdKXJldHVybiBuW3QuaWRdO2xldCBlO3N3aXRjaCh0LnR5cGUpe2Nhc2UiRGlyZWN0aW9uYWxMaWdodCI6Y2FzZSJTcG90TGlnaHQiOmU9e3NoYWRvd0JpYXM6MCxzaGFkb3dOb3JtYWxCaWFzOjAsc2hhZG93UmFkaXVzOjEsc2hhZG93TWFwU2l6ZTpuZXcgJGV9O2JyZWFrO2Nhc2UiUG9pbnRMaWdodCI6ZT17c2hhZG93QmlhczowLHNoYWRvd05vcm1hbEJpYXM6MCxzaGFkb3dSYWRpdXM6MSxzaGFkb3dNYXBTaXplOm5ldyAkZSxzaGFkb3dDYW1lcmFOZWFyOjEsc2hhZG93Q2FtZXJhRmFyOjFlM319cmV0dXJuIG5bdC5pZF09ZSxlfX19KCkscj17dmVyc2lvbjowLGhhc2g6e2RpcmVjdGlvbmFsTGVuZ3RoOi0xLHBvaW50TGVuZ3RoOi0xLHNwb3RMZW5ndGg6LTEscmVjdEFyZWFMZW5ndGg6LTEsaGVtaUxlbmd0aDotMSxudW1EaXJlY3Rpb25hbFNoYWRvd3M6LTEsbnVtUG9pbnRTaGFkb3dzOi0xLG51bVNwb3RTaGFkb3dzOi0xfSxhbWJpZW50OlswLDAsMF0scHJvYmU6W10sZGlyZWN0aW9uYWw6W10sZGlyZWN0aW9uYWxTaGFkb3c6W10sZGlyZWN0aW9uYWxTaGFkb3dNYXA6W10sZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6W10sc3BvdDpbXSxzcG90U2hhZG93OltdLHNwb3RTaGFkb3dNYXA6W10sc3BvdFNoYWRvd01hdHJpeDpbXSxyZWN0QXJlYTpbXSxyZWN0QXJlYUxUQzE6bnVsbCxyZWN0QXJlYUxUQzI6bnVsbCxwb2ludDpbXSxwb2ludFNoYWRvdzpbXSxwb2ludFNoYWRvd01hcDpbXSxwb2ludFNoYWRvd01hdHJpeDpbXSxoZW1pOltdfTtmb3IobGV0IGQ9MDtkPDk7ZCsrKXIucHJvYmUucHVzaChuZXcgSyk7bGV0IG89bmV3IEssYT1uZXcgdm4scz1uZXcgdm47cmV0dXJue3NldHVwOmZ1bmN0aW9uKGQsdSl7bGV0IHA9MCxoPTAsbT0wO2ZvcihsZXQgUWU9MDtRZTw5O1FlKyspci5wcm9iZVtRZV0uc2V0KDAsMCwwKTtsZXQgXz0wLE09MCx5PTAseD0wLFI9MCxJPTAsQj0wLGVlPTA7ZC5zb3J0KHYyZSk7bGV0IFE9ITAhPT11P01hdGguUEk6MTtmb3IobGV0IFFlPTAsQWU9ZC5sZW5ndGg7UWU8QWU7UWUrKyl7bGV0IEQ9ZFtRZV0scmU9RC5jb2xvcixjZT1ELmludGVuc2l0eSxoZT1ELmRpc3RhbmNlLF9lPUQuc2hhZG93JiZELnNoYWRvdy5tYXA/RC5zaGFkb3cubWFwLnRleHR1cmU6bnVsbDtpZihELmlzQW1iaWVudExpZ2h0KXArPXJlLnIqY2UqUSxoKz1yZS5nKmNlKlEsbSs9cmUuYipjZSpRO2Vsc2UgaWYoRC5pc0xpZ2h0UHJvYmUpZm9yKGxldCAkPTA7JDw5OyQrKylyLnByb2JlWyRdLmFkZFNjYWxlZFZlY3RvcihELnNoLmNvZWZmaWNpZW50c1skXSxjZSk7ZWxzZSBpZihELmlzRGlyZWN0aW9uYWxMaWdodCl7bGV0ICQ9ZS5nZXQoRCk7aWYoJC5jb2xvci5jb3B5KEQuY29sb3IpLm11bHRpcGx5U2NhbGFyKEQuaW50ZW5zaXR5KlEpLEQuY2FzdFNoYWRvdyl7bGV0IGRlPUQuc2hhZG93LHBlPWkuZ2V0KEQpO3BlLnNoYWRvd0JpYXM9ZGUuYmlhcyxwZS5zaGFkb3dOb3JtYWxCaWFzPWRlLm5vcm1hbEJpYXMscGUuc2hhZG93UmFkaXVzPWRlLnJhZGl1cyxwZS5zaGFkb3dNYXBTaXplPWRlLm1hcFNpemUsci5kaXJlY3Rpb25hbFNoYWRvd1tfXT1wZSxyLmRpcmVjdGlvbmFsU2hhZG93TWFwW19dPV9lLHIuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbX109RC5zaGFkb3cubWF0cml4LEkrK31yLmRpcmVjdGlvbmFsW19dPSQsXysrfWVsc2UgaWYoRC5pc1Nwb3RMaWdodCl7bGV0ICQ9ZS5nZXQoRCk7aWYoJC5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oRC5tYXRyaXhXb3JsZCksJC5jb2xvci5jb3B5KHJlKS5tdWx0aXBseVNjYWxhcihjZSpRKSwkLmRpc3RhbmNlPWhlLCQuY29uZUNvcz1NYXRoLmNvcyhELmFuZ2xlKSwkLnBlbnVtYnJhQ29zPU1hdGguY29zKEQuYW5nbGUqKDEtRC5wZW51bWJyYSkpLCQuZGVjYXk9RC5kZWNheSxELmNhc3RTaGFkb3cpe2xldCBkZT1ELnNoYWRvdyxwZT1pLmdldChEKTtwZS5zaGFkb3dCaWFzPWRlLmJpYXMscGUuc2hhZG93Tm9ybWFsQmlhcz1kZS5ub3JtYWxCaWFzLHBlLnNoYWRvd1JhZGl1cz1kZS5yYWRpdXMscGUuc2hhZG93TWFwU2l6ZT1kZS5tYXBTaXplLHIuc3BvdFNoYWRvd1t5XT1wZSxyLnNwb3RTaGFkb3dNYXBbeV09X2Usci5zcG90U2hhZG93TWF0cml4W3ldPUQuc2hhZG93Lm1hdHJpeCxlZSsrfXIuc3BvdFt5XT0kLHkrK31lbHNlIGlmKEQuaXNSZWN0QXJlYUxpZ2h0KXtsZXQgJD1lLmdldChEKTskLmNvbG9yLmNvcHkocmUpLm11bHRpcGx5U2NhbGFyKGNlKSwkLmhhbGZXaWR0aC5zZXQoLjUqRC53aWR0aCwwLDApLCQuaGFsZkhlaWdodC5zZXQoMCwuNSpELmhlaWdodCwwKSxyLnJlY3RBcmVhW3hdPSQseCsrfWVsc2UgaWYoRC5pc1BvaW50TGlnaHQpe2xldCAkPWUuZ2V0KEQpO2lmKCQuY29sb3IuY29weShELmNvbG9yKS5tdWx0aXBseVNjYWxhcihELmludGVuc2l0eSpRKSwkLmRpc3RhbmNlPUQuZGlzdGFuY2UsJC5kZWNheT1ELmRlY2F5LEQuY2FzdFNoYWRvdyl7bGV0IGRlPUQuc2hhZG93LHBlPWkuZ2V0KEQpO3BlLnNoYWRvd0JpYXM9ZGUuYmlhcyxwZS5zaGFkb3dOb3JtYWxCaWFzPWRlLm5vcm1hbEJpYXMscGUuc2hhZG93UmFkaXVzPWRlLnJhZGl1cyxwZS5zaGFkb3dNYXBTaXplPWRlLm1hcFNpemUscGUuc2hhZG93Q2FtZXJhTmVhcj1kZS5jYW1lcmEubmVhcixwZS5zaGFkb3dDYW1lcmFGYXI9ZGUuY2FtZXJhLmZhcixyLnBvaW50U2hhZG93W01dPXBlLHIucG9pbnRTaGFkb3dNYXBbTV09X2Usci5wb2ludFNoYWRvd01hdHJpeFtNXT1ELnNoYWRvdy5tYXRyaXgsQisrfXIucG9pbnRbTV09JCxNKyt9ZWxzZSBpZihELmlzSGVtaXNwaGVyZUxpZ2h0KXtsZXQgJD1lLmdldChEKTskLnNreUNvbG9yLmNvcHkoRC5jb2xvcikubXVsdGlwbHlTY2FsYXIoY2UqUSksJC5ncm91bmRDb2xvci5jb3B5KEQuZ3JvdW5kQ29sb3IpLm11bHRpcGx5U2NhbGFyKGNlKlEpLHIuaGVtaVtSXT0kLFIrK319eD4wJiYodC5pc1dlYkdMMnx8ITA9PT1uLmhhcygiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIik/KHIucmVjdEFyZWFMVEMxPVJ0LkxUQ19GTE9BVF8xLHIucmVjdEFyZWFMVEMyPVJ0LkxUQ19GTE9BVF8yKTohMD09PW4uaGFzKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpPyhyLnJlY3RBcmVhTFRDMT1SdC5MVENfSEFMRl8xLHIucmVjdEFyZWFMVEMyPVJ0LkxUQ19IQUxGXzIpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVuYWJsZSB0byB1c2UgUmVjdEFyZWFMaWdodC4gTWlzc2luZyBXZWJHTCBleHRlbnNpb25zLiIpKSxyLmFtYmllbnRbMF09cCxyLmFtYmllbnRbMV09aCxyLmFtYmllbnRbMl09bTtsZXQgd2U9ci5oYXNoOyh3ZS5kaXJlY3Rpb25hbExlbmd0aCE9PV98fHdlLnBvaW50TGVuZ3RoIT09TXx8d2Uuc3BvdExlbmd0aCE9PXl8fHdlLnJlY3RBcmVhTGVuZ3RoIT09eHx8d2UuaGVtaUxlbmd0aCE9PVJ8fHdlLm51bURpcmVjdGlvbmFsU2hhZG93cyE9PUl8fHdlLm51bVBvaW50U2hhZG93cyE9PUJ8fHdlLm51bVNwb3RTaGFkb3dzIT09ZWUpJiYoci5kaXJlY3Rpb25hbC5sZW5ndGg9XyxyLnNwb3QubGVuZ3RoPXksci5yZWN0QXJlYS5sZW5ndGg9eCxyLnBvaW50Lmxlbmd0aD1NLHIuaGVtaS5sZW5ndGg9UixyLmRpcmVjdGlvbmFsU2hhZG93Lmxlbmd0aD1JLHIuZGlyZWN0aW9uYWxTaGFkb3dNYXAubGVuZ3RoPUksci5wb2ludFNoYWRvdy5sZW5ndGg9QixyLnBvaW50U2hhZG93TWFwLmxlbmd0aD1CLHIuc3BvdFNoYWRvdy5sZW5ndGg9ZWUsci5zcG90U2hhZG93TWFwLmxlbmd0aD1lZSxyLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4Lmxlbmd0aD1JLHIucG9pbnRTaGFkb3dNYXRyaXgubGVuZ3RoPUIsci5zcG90U2hhZG93TWF0cml4Lmxlbmd0aD1lZSx3ZS5kaXJlY3Rpb25hbExlbmd0aD1fLHdlLnBvaW50TGVuZ3RoPU0sd2Uuc3BvdExlbmd0aD15LHdlLnJlY3RBcmVhTGVuZ3RoPXgsd2UuaGVtaUxlbmd0aD1SLHdlLm51bURpcmVjdGlvbmFsU2hhZG93cz1JLHdlLm51bVBvaW50U2hhZG93cz1CLHdlLm51bVNwb3RTaGFkb3dzPWVlLHIudmVyc2lvbj1iMmUrKyl9LHNldHVwVmlldzpmdW5jdGlvbihkLHUpe2xldCBwPTAsaD0wLG09MCxfPTAsTT0wLHk9dS5tYXRyaXhXb3JsZEludmVyc2U7Zm9yKGxldCB4PTAsUj1kLmxlbmd0aDt4PFI7eCsrKXtsZXQgST1kW3hdO2lmKEkuaXNEaXJlY3Rpb25hbExpZ2h0KXtsZXQgQj1yLmRpcmVjdGlvbmFsW3BdO0IuZGlyZWN0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihJLm1hdHJpeFdvcmxkKSxvLnNldEZyb21NYXRyaXhQb3NpdGlvbihJLnRhcmdldC5tYXRyaXhXb3JsZCksQi5kaXJlY3Rpb24uc3ViKG8pLEIuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbih5KSxwKyt9ZWxzZSBpZihJLmlzU3BvdExpZ2h0KXtsZXQgQj1yLnNwb3RbbV07Qi5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oSS5tYXRyaXhXb3JsZCksQi5wb3NpdGlvbi5hcHBseU1hdHJpeDQoeSksQi5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKEkubWF0cml4V29ybGQpLG8uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKEkudGFyZ2V0Lm1hdHJpeFdvcmxkKSxCLmRpcmVjdGlvbi5zdWIobyksQi5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHkpLG0rK31lbHNlIGlmKEkuaXNSZWN0QXJlYUxpZ2h0KXtsZXQgQj1yLnJlY3RBcmVhW19dO0IucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKEkubWF0cml4V29ybGQpLEIucG9zaXRpb24uYXBwbHlNYXRyaXg0KHkpLHMuaWRlbnRpdHkoKSxhLmNvcHkoSS5tYXRyaXhXb3JsZCksYS5wcmVtdWx0aXBseSh5KSxzLmV4dHJhY3RSb3RhdGlvbihhKSxCLmhhbGZXaWR0aC5zZXQoLjUqSS53aWR0aCwwLDApLEIuaGFsZkhlaWdodC5zZXQoMCwuNSpJLmhlaWdodCwwKSxCLmhhbGZXaWR0aC5hcHBseU1hdHJpeDQocyksQi5oYWxmSGVpZ2h0LmFwcGx5TWF0cml4NChzKSxfKyt9ZWxzZSBpZihJLmlzUG9pbnRMaWdodCl7bGV0IEI9ci5wb2ludFtoXTtCLnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihJLm1hdHJpeFdvcmxkKSxCLnBvc2l0aW9uLmFwcGx5TWF0cml4NCh5KSxoKyt9ZWxzZSBpZihJLmlzSGVtaXNwaGVyZUxpZ2h0KXtsZXQgQj1yLmhlbWlbTV07Qi5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKEkubWF0cml4V29ybGQpLEIuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbih5KSxCLmRpcmVjdGlvbi5ub3JtYWxpemUoKSxNKyt9fX0sc3RhdGU6cn19ZnVuY3Rpb24gRmVlKG4sdCl7bGV0IGU9bmV3IHkyZShuLHQpLGk9W10scj1bXTtyZXR1cm57aW5pdDpmdW5jdGlvbigpe2kubGVuZ3RoPTAsci5sZW5ndGg9MH0sc3RhdGU6e2xpZ2h0c0FycmF5Omksc2hhZG93c0FycmF5OnIsbGlnaHRzOmV9LHNldHVwTGlnaHRzOmZ1bmN0aW9uKHUpe2Uuc2V0dXAoaSx1KX0sc2V0dXBMaWdodHNWaWV3OmZ1bmN0aW9uKHUpe2Uuc2V0dXBWaWV3KGksdSl9LHB1c2hMaWdodDpmdW5jdGlvbih1KXtpLnB1c2godSl9LHB1c2hTaGFkb3c6ZnVuY3Rpb24odSl7ci5wdXNoKHUpfX19ZnVuY3Rpb24geDJlKG4sdCl7bGV0IGU9bmV3IFdlYWtNYXA7cmV0dXJue2dldDpmdW5jdGlvbihvLGE9MCl7bGV0IHM7cmV0dXJuITE9PT1lLmhhcyhvKT8ocz1uZXcgRmVlKG4sdCksZS5zZXQobyxbc10pKTphPj1lLmdldChvKS5sZW5ndGg/KHM9bmV3IEZlZShuLHQpLGUuZ2V0KG8pLnB1c2gocykpOnM9ZS5nZXQobylbYV0sc30sZGlzcG9zZTpmdW5jdGlvbigpe2U9bmV3IFdlYWtNYXB9fX12YXIgUEk9Y2xhc3MgZXh0ZW5kcyBGb3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaERlcHRoTWF0ZXJpYWwiLHRoaXMuZGVwdGhQYWNraW5nPTMyMDAsdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLmZvZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZGVwdGhQYWNraW5nPXQuZGVwdGhQYWNraW5nLHRoaXMubWFwPXQubWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzfX07UEkucHJvdG90eXBlLmlzTWVzaERlcHRoTWF0ZXJpYWw9ITA7dmFyIGtJPWNsYXNzIGV4dGVuZHMgRm97Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hEaXN0YW5jZU1hdGVyaWFsIix0aGlzLnJlZmVyZW5jZVBvc2l0aW9uPW5ldyBLLHRoaXMubmVhckRpc3RhbmNlPTEsdGhpcy5mYXJEaXN0YW5jZT0xZTMsdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5mb2c9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnJlZmVyZW5jZVBvc2l0aW9uLmNvcHkodC5yZWZlcmVuY2VQb3NpdGlvbiksdGhpcy5uZWFyRGlzdGFuY2U9dC5uZWFyRGlzdGFuY2UsdGhpcy5mYXJEaXN0YW5jZT10LmZhckRpc3RhbmNlLHRoaXMubWFwPXQubWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzfX07a0kucHJvdG90eXBlLmlzTWVzaERpc3RhbmNlTWF0ZXJpYWw9ITA7dmFyIEMyZT0idm9pZCBtYWluKCkge1xuXHRnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcbn0iLE0yZT0idW5pZm9ybSBzYW1wbGVyMkQgc2hhZG93X3Bhc3M7XG51bmlmb3JtIHZlYzIgcmVzb2x1dGlvbjtcbnVuaWZvcm0gZmxvYXQgcmFkaXVzO1xuI2luY2x1ZGUgPHBhY2tpbmc+XG52b2lkIG1haW4oKSB7XG5cdGNvbnN0IGZsb2F0IHNhbXBsZXMgPSBmbG9hdCggVlNNX1NBTVBMRVMgKTtcblx0ZmxvYXQgbWVhbiA9IDAuMDtcblx0ZmxvYXQgc3F1YXJlZF9tZWFuID0gMC4wO1xuXHRmbG9hdCB1dlN0cmlkZSA9IHNhbXBsZXMgPD0gMS4wID8gMC4wIDogMi4wIC8gKCBzYW1wbGVzIC0gMS4wICk7XG5cdGZsb2F0IHV2U3RhcnQgPSBzYW1wbGVzIDw9IDEuMCA/IDAuMCA6IC0gMS4wO1xuXHRmb3IgKCBmbG9hdCBpID0gMC4wOyBpIDwgc2FtcGxlczsgaSArKyApIHtcblx0XHRmbG9hdCB1dk9mZnNldCA9IHV2U3RhcnQgKyBpICogdXZTdHJpZGU7XG5cdFx0I2lmZGVmIEhPUklaT05UQUxfUEFTU1xuXHRcdFx0dmVjMiBkaXN0cmlidXRpb24gPSB1bnBhY2tSR0JBVG8ySGFsZiggdGV4dHVyZTJEKCBzaGFkb3dfcGFzcywgKCBnbF9GcmFnQ29vcmQueHkgKyB2ZWMyKCB1dk9mZnNldCwgMC4wICkgKiByYWRpdXMgKSAvIHJlc29sdXRpb24gKSApO1xuXHRcdFx0bWVhbiArPSBkaXN0cmlidXRpb24ueDtcblx0XHRcdHNxdWFyZWRfbWVhbiArPSBkaXN0cmlidXRpb24ueSAqIGRpc3RyaWJ1dGlvbi55ICsgZGlzdHJpYnV0aW9uLnggKiBkaXN0cmlidXRpb24ueDtcblx0XHQjZWxzZVxuXHRcdFx0ZmxvYXQgZGVwdGggPSB1bnBhY2tSR0JBVG9EZXB0aCggdGV4dHVyZTJEKCBzaGFkb3dfcGFzcywgKCBnbF9GcmFnQ29vcmQueHkgKyB2ZWMyKCAwLjAsIHV2T2Zmc2V0ICkgKiByYWRpdXMgKSAvIHJlc29sdXRpb24gKSApO1xuXHRcdFx0bWVhbiArPSBkZXB0aDtcblx0XHRcdHNxdWFyZWRfbWVhbiArPSBkZXB0aCAqIGRlcHRoO1xuXHRcdCNlbmRpZlxuXHR9XG5cdG1lYW4gPSBtZWFuIC8gc2FtcGxlcztcblx0c3F1YXJlZF9tZWFuID0gc3F1YXJlZF9tZWFuIC8gc2FtcGxlcztcblx0ZmxvYXQgc3RkX2RldiA9IHNxcnQoIHNxdWFyZWRfbWVhbiAtIG1lYW4gKiBtZWFuICk7XG5cdGdsX0ZyYWdDb2xvciA9IHBhY2sySGFsZlRvUkdCQSggdmVjMiggbWVhbiwgc3RkX2RldiApICk7XG59IjtmdW5jdGlvbiB3dGUobix0LGUpe2xldCBpPW5ldyBlXyxyPW5ldyAkZSxvPW5ldyAkZSxhPW5ldyBRaSxzPW5ldyBQSSh7ZGVwdGhQYWNraW5nOllSZX0pLGw9bmV3IGtJLGM9e30sZD1lLm1heFRleHR1cmVTaXplLHU9ezA6Ym8sMTp5eCwyOlowfSxwPW5ldyBqZCh7ZGVmaW5lczp7VlNNX1NBTVBMRVM6OH0sdW5pZm9ybXM6e3NoYWRvd19wYXNzOnt2YWx1ZTpudWxsfSxyZXNvbHV0aW9uOnt2YWx1ZTpuZXcgJGV9LHJhZGl1czp7dmFsdWU6NH19LHZlcnRleFNoYWRlcjpDMmUsZnJhZ21lbnRTaGFkZXI6TTJlfSksaD1wLmNsb25lKCk7aC5kZWZpbmVzLkhPUklaT05UQUxfUEFTUz0xO2xldCBtPW5ldyBHaTttLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBBcihuZXcgRmxvYXQzMkFycmF5KFstMSwtMSwuNSwzLC0xLC41LC0xLDMsLjVdKSwzKSk7bGV0IF89bmV3IHNvKG0scCksTT10aGlzO2Z1bmN0aW9uIHkoSSxCKXtsZXQgZWU9dC51cGRhdGUoXyk7cC5kZWZpbmVzLlZTTV9TQU1QTEVTIT09SS5ibHVyU2FtcGxlcyYmKHAuZGVmaW5lcy5WU01fU0FNUExFUz1JLmJsdXJTYW1wbGVzLGguZGVmaW5lcy5WU01fU0FNUExFUz1JLmJsdXJTYW1wbGVzLHAubmVlZHNVcGRhdGU9ITAsaC5uZWVkc1VwZGF0ZT0hMCkscC51bmlmb3Jtcy5zaGFkb3dfcGFzcy52YWx1ZT1JLm1hcC50ZXh0dXJlLHAudW5pZm9ybXMucmVzb2x1dGlvbi52YWx1ZT1JLm1hcFNpemUscC51bmlmb3Jtcy5yYWRpdXMudmFsdWU9SS5yYWRpdXMsbi5zZXRSZW5kZXJUYXJnZXQoSS5tYXBQYXNzKSxuLmNsZWFyKCksbi5yZW5kZXJCdWZmZXJEaXJlY3QoQixudWxsLGVlLHAsXyxudWxsKSxoLnVuaWZvcm1zLnNoYWRvd19wYXNzLnZhbHVlPUkubWFwUGFzcy50ZXh0dXJlLGgudW5pZm9ybXMucmVzb2x1dGlvbi52YWx1ZT1JLm1hcFNpemUsaC51bmlmb3Jtcy5yYWRpdXMudmFsdWU9SS5yYWRpdXMsbi5zZXRSZW5kZXJUYXJnZXQoSS5tYXApLG4uY2xlYXIoKSxuLnJlbmRlckJ1ZmZlckRpcmVjdChCLG51bGwsZWUsaCxfLG51bGwpfWZ1bmN0aW9uIHgoSSxCLGVlLFEsd2UsUWUsQWUpe2xldCBEPW51bGwscmU9ITA9PT1RLmlzUG9pbnRMaWdodD9JLmN1c3RvbURpc3RhbmNlTWF0ZXJpYWw6SS5jdXN0b21EZXB0aE1hdGVyaWFsO2lmKEQ9dm9pZCAwIT09cmU/cmU6ITA9PT1RLmlzUG9pbnRMaWdodD9sOnMsbi5sb2NhbENsaXBwaW5nRW5hYmxlZCYmITA9PT1lZS5jbGlwU2hhZG93cyYmMCE9PWVlLmNsaXBwaW5nUGxhbmVzLmxlbmd0aHx8ZWUuZGlzcGxhY2VtZW50TWFwJiYwIT09ZWUuZGlzcGxhY2VtZW50U2NhbGV8fGVlLmFscGhhTWFwJiZlZS5hbHBoYVRlc3Q+MCl7bGV0IGNlPUQudXVpZCxoZT1lZS51dWlkLF9lPWNbY2VdO3ZvaWQgMD09PV9lJiYoX2U9e30sY1tjZV09X2UpO2xldCAkPV9lW2hlXTt2b2lkIDA9PT0kJiYoJD1ELmNsb25lKCksX2VbaGVdPSQpLEQ9JH1yZXR1cm4gRC52aXNpYmxlPWVlLnZpc2libGUsRC53aXJlZnJhbWU9ZWUud2lyZWZyYW1lLEQuc2lkZT1BZT09PW14P251bGwhPT1lZS5zaGFkb3dTaWRlP2VlLnNoYWRvd1NpZGU6ZWUuc2lkZTpudWxsIT09ZWUuc2hhZG93U2lkZT9lZS5zaGFkb3dTaWRlOnVbZWUuc2lkZV0sRC5hbHBoYU1hcD1lZS5hbHBoYU1hcCxELmFscGhhVGVzdD1lZS5hbHBoYVRlc3QsRC5jbGlwU2hhZG93cz1lZS5jbGlwU2hhZG93cyxELmNsaXBwaW5nUGxhbmVzPWVlLmNsaXBwaW5nUGxhbmVzLEQuY2xpcEludGVyc2VjdGlvbj1lZS5jbGlwSW50ZXJzZWN0aW9uLEQuZGlzcGxhY2VtZW50TWFwPWVlLmRpc3BsYWNlbWVudE1hcCxELmRpc3BsYWNlbWVudFNjYWxlPWVlLmRpc3BsYWNlbWVudFNjYWxlLEQuZGlzcGxhY2VtZW50Qmlhcz1lZS5kaXNwbGFjZW1lbnRCaWFzLEQud2lyZWZyYW1lTGluZXdpZHRoPWVlLndpcmVmcmFtZUxpbmV3aWR0aCxELmxpbmV3aWR0aD1lZS5saW5ld2lkdGgsITA9PT1RLmlzUG9pbnRMaWdodCYmITA9PT1ELmlzTWVzaERpc3RhbmNlTWF0ZXJpYWwmJihELnJlZmVyZW5jZVBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihRLm1hdHJpeFdvcmxkKSxELm5lYXJEaXN0YW5jZT13ZSxELmZhckRpc3RhbmNlPVFlKSxEfWZ1bmN0aW9uIFIoSSxCLGVlLFEsd2Upe2lmKCExPT09SS52aXNpYmxlKXJldHVybjtpZihJLmxheWVycy50ZXN0KEIubGF5ZXJzKSYmKEkuaXNNZXNofHxJLmlzTGluZXx8SS5pc1BvaW50cykmJihJLmNhc3RTaGFkb3d8fEkucmVjZWl2ZVNoYWRvdyYmd2U9PT1teCkmJighSS5mcnVzdHVtQ3VsbGVkfHxpLmludGVyc2VjdHNPYmplY3QoSSkpKXtJLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKGVlLm1hdHJpeFdvcmxkSW52ZXJzZSxJLm1hdHJpeFdvcmxkKTtsZXQgRD10LnVwZGF0ZShJKSxyZT1JLm1hdGVyaWFsO2lmKEFycmF5LmlzQXJyYXkocmUpKXtsZXQgY2U9RC5ncm91cHM7Zm9yKGxldCBoZT0wLF9lPWNlLmxlbmd0aDtoZTxfZTtoZSsrKXtsZXQgJD1jZVtoZV0sZGU9cmVbJC5tYXRlcmlhbEluZGV4XTtpZihkZSYmZGUudmlzaWJsZSl7bGV0IHBlPXgoSSwwLGRlLFEsZWUubmVhcixlZS5mYXIsd2UpO24ucmVuZGVyQnVmZmVyRGlyZWN0KGVlLG51bGwsRCxwZSxJLCQpfX19ZWxzZSBpZihyZS52aXNpYmxlKXtsZXQgY2U9eChJLDAscmUsUSxlZS5uZWFyLGVlLmZhcix3ZSk7bi5yZW5kZXJCdWZmZXJEaXJlY3QoZWUsbnVsbCxELGNlLEksbnVsbCl9fWxldCBBZT1JLmNoaWxkcmVuO2ZvcihsZXQgRD0wLHJlPUFlLmxlbmd0aDtEPHJlO0QrKylSKEFlW0RdLEIsZWUsUSx3ZSl9dGhpcy5lbmFibGVkPSExLHRoaXMuYXV0b1VwZGF0ZT0hMCx0aGlzLm5lZWRzVXBkYXRlPSExLHRoaXMudHlwZT1zdGUsdGhpcy5yZW5kZXI9ZnVuY3Rpb24oSSxCLGVlKXtpZighMT09PU0uZW5hYmxlZHx8ITE9PT1NLmF1dG9VcGRhdGUmJiExPT09TS5uZWVkc1VwZGF0ZXx8MD09PUkubGVuZ3RoKXJldHVybjtsZXQgUT1uLmdldFJlbmRlclRhcmdldCgpLHdlPW4uZ2V0QWN0aXZlQ3ViZUZhY2UoKSxRZT1uLmdldEFjdGl2ZU1pcG1hcExldmVsKCksQWU9bi5zdGF0ZTtBZS5zZXRCbGVuZGluZyh2cCksQWUuYnVmZmVycy5jb2xvci5zZXRDbGVhcigxLDEsMSwxKSxBZS5idWZmZXJzLmRlcHRoLnNldFRlc3QoITApLEFlLnNldFNjaXNzb3JUZXN0KCExKTtmb3IobGV0IEQ9MCxyZT1JLmxlbmd0aDtEPHJlO0QrKyl7bGV0IGNlPUlbRF0saGU9Y2Uuc2hhZG93O2lmKHZvaWQgMD09PWhlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMU2hhZG93TWFwOiIsY2UsImhhcyBubyBzaGFkb3cuIik7Y29udGludWV9aWYoITE9PT1oZS5hdXRvVXBkYXRlJiYhMT09PWhlLm5lZWRzVXBkYXRlKWNvbnRpbnVlO3IuY29weShoZS5tYXBTaXplKTtsZXQgX2U9aGUuZ2V0RnJhbWVFeHRlbnRzKCk7aWYoci5tdWx0aXBseShfZSksby5jb3B5KGhlLm1hcFNpemUpLChyLng+ZHx8ci55PmQpJiYoci54PmQmJihvLng9TWF0aC5mbG9vcihkL19lLngpLHIueD1vLngqX2UueCxoZS5tYXBTaXplLng9by54KSxyLnk+ZCYmKG8ueT1NYXRoLmZsb29yKGQvX2UueSksci55PW8ueSpfZS55LGhlLm1hcFNpemUueT1vLnkpKSxudWxsPT09aGUubWFwJiYhaGUuaXNQb2ludExpZ2h0U2hhZG93JiZ0aGlzLnR5cGU9PT1teCl7bGV0IGRlPXttaW5GaWx0ZXI6aWEsbWFnRmlsdGVyOmlhLGZvcm1hdDpDYX07aGUubWFwPW5ldyB0cyhyLngsci55LGRlKSxoZS5tYXAudGV4dHVyZS5uYW1lPWNlLm5hbWUrIi5zaGFkb3dNYXAiLGhlLm1hcFBhc3M9bmV3IHRzKHIueCxyLnksZGUpLGhlLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9bnVsbD09PWhlLm1hcCYmKGhlLm1hcD1uZXcgdHMoci54LHIueSx7bWluRmlsdGVyOnZvLG1hZ0ZpbHRlcjp2byxmb3JtYXQ6Q2F9KSxoZS5tYXAudGV4dHVyZS5uYW1lPWNlLm5hbWUrIi5zaGFkb3dNYXAiLGhlLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkpLG4uc2V0UmVuZGVyVGFyZ2V0KGhlLm1hcCksbi5jbGVhcigpO2xldCAkPWhlLmdldFZpZXdwb3J0Q291bnQoKTtmb3IobGV0IGRlPTA7ZGU8JDtkZSsrKXtsZXQgcGU9aGUuZ2V0Vmlld3BvcnQoZGUpO2Euc2V0KG8ueCpwZS54LG8ueSpwZS55LG8ueCpwZS56LG8ueSpwZS53KSxBZS52aWV3cG9ydChhKSxoZS51cGRhdGVNYXRyaWNlcyhjZSxkZSksaT1oZS5nZXRGcnVzdHVtKCksUihCLGVlLGhlLmNhbWVyYSxjZSx0aGlzLnR5cGUpfSFoZS5pc1BvaW50TGlnaHRTaGFkb3cmJnRoaXMudHlwZT09PW14JiZ5KGhlLGVlKSxoZS5uZWVkc1VwZGF0ZT0hMX1NLm5lZWRzVXBkYXRlPSExLG4uc2V0UmVuZGVyVGFyZ2V0KFEsd2UsUWUpfX1mdW5jdGlvbiB3MmUobix0LGUpe2xldCBpPWUuaXNXZWJHTDIscz1uZXcgZnVuY3Rpb24oKXtsZXQgc2U9ITEsSnQ9bmV3IFFpLFV0PW51bGwsU249bmV3IFFpKDAsMCwwLDApO3JldHVybntzZXRNYXNrOmZ1bmN0aW9uKFdlKXtVdCE9PVdlJiYhc2UmJihuLmNvbG9yTWFzayhXZSxXZSxXZSxXZSksVXQ9V2UpfSxzZXRMb2NrZWQ6ZnVuY3Rpb24oV2Upe3NlPVdlfSxzZXRDbGVhcjpmdW5jdGlvbihXZSxnbixmaSxscixXbyl7ITA9PT1XbyYmKFdlKj1scixnbio9bHIsZmkqPWxyKSxKdC5zZXQoV2UsZ24sZmksbHIpLCExPT09U24uZXF1YWxzKEp0KSYmKG4uY2xlYXJDb2xvcihXZSxnbixmaSxsciksU24uY29weShKdCkpfSxyZXNldDpmdW5jdGlvbigpe3NlPSExLFV0PW51bGwsU24uc2V0KC0xLDAsMCwwKX19fSxsPW5ldyBmdW5jdGlvbigpe2xldCBzZT0hMSxKdD1udWxsLFV0PW51bGwsU249bnVsbDtyZXR1cm57c2V0VGVzdDpmdW5jdGlvbihXZSl7V2U/a2UoMjkyOSk6VG4oMjkyOSl9LHNldE1hc2s6ZnVuY3Rpb24oV2Upe0p0IT09V2UmJiFzZSYmKG4uZGVwdGhNYXNrKFdlKSxKdD1XZSl9LHNldEZ1bmM6ZnVuY3Rpb24oV2Upe2lmKFV0IT09V2Upe2lmKFdlKXN3aXRjaChXZSl7Y2FzZSBtUmU6bi5kZXB0aEZ1bmMoNTEyKTticmVhaztjYXNlIGZSZTpuLmRlcHRoRnVuYyg1MTkpO2JyZWFrO2Nhc2UgZ1JlOm4uZGVwdGhGdW5jKDUxMyk7YnJlYWs7Y2FzZSBYMzpuLmRlcHRoRnVuYyg1MTUpO2JyZWFrO2Nhc2UgX1JlOm4uZGVwdGhGdW5jKDUxNCk7YnJlYWs7Y2FzZSBiUmU6bi5kZXB0aEZ1bmMoNTE4KTticmVhaztjYXNlIHZSZTpuLmRlcHRoRnVuYyg1MTYpO2JyZWFrO2Nhc2UgeVJlOm4uZGVwdGhGdW5jKDUxNyk7YnJlYWs7ZGVmYXVsdDpuLmRlcHRoRnVuYyg1MTUpfWVsc2Ugbi5kZXB0aEZ1bmMoNTE1KTtVdD1XZX19LHNldExvY2tlZDpmdW5jdGlvbihXZSl7c2U9V2V9LHNldENsZWFyOmZ1bmN0aW9uKFdlKXtTbiE9PVdlJiYobi5jbGVhckRlcHRoKFdlKSxTbj1XZSl9LHJlc2V0OmZ1bmN0aW9uKCl7c2U9ITEsSnQ9bnVsbCxVdD1udWxsLFNuPW51bGx9fX0sYz1uZXcgZnVuY3Rpb24oKXtsZXQgc2U9ITEsSnQ9bnVsbCxVdD1udWxsLFNuPW51bGwsV2U9bnVsbCxnbj1udWxsLGZpPW51bGwsbHI9bnVsbCxXbz1udWxsO3JldHVybntzZXRUZXN0OmZ1bmN0aW9uKHZyKXtzZXx8KHZyP2tlKDI5NjApOlRuKDI5NjApKX0sc2V0TWFzazpmdW5jdGlvbih2cil7SnQhPT12ciYmIXNlJiYobi5zdGVuY2lsTWFzayh2ciksSnQ9dnIpfSxzZXRGdW5jOmZ1bmN0aW9uKHZyLElzLHdhKXsoVXQhPT12cnx8U24hPT1Jc3x8V2UhPT13YSkmJihuLnN0ZW5jaWxGdW5jKHZyLElzLHdhKSxVdD12cixTbj1JcyxXZT13YSl9LHNldE9wOmZ1bmN0aW9uKHZyLElzLHdhKXsoZ24hPT12cnx8ZmkhPT1Jc3x8bHIhPT13YSkmJihuLnN0ZW5jaWxPcCh2cixJcyx3YSksZ249dnIsZmk9SXMsbHI9d2EpfSxzZXRMb2NrZWQ6ZnVuY3Rpb24odnIpe3NlPXZyfSxzZXRDbGVhcjpmdW5jdGlvbih2cil7V28hPT12ciYmKG4uY2xlYXJTdGVuY2lsKHZyKSxXbz12cil9LHJlc2V0OmZ1bmN0aW9uKCl7c2U9ITEsSnQ9bnVsbCxVdD1udWxsLFNuPW51bGwsV2U9bnVsbCxnbj1udWxsLGZpPW51bGwsbHI9bnVsbCxXbz1udWxsfX19LGQ9e30sdT17fSxwPW5ldyBXZWFrTWFwLGg9W10sbT1udWxsLF89ITEsTT1udWxsLHk9bnVsbCx4PW51bGwsUj1udWxsLEk9bnVsbCxCPW51bGwsZWU9bnVsbCxRPSExLHdlPW51bGwsUWU9bnVsbCxBZT1udWxsLEQ9bnVsbCxyZT1udWxsLGNlPW4uZ2V0UGFyYW1ldGVyKDM1NjYxKSxoZT0hMSxfZT0wLCQ9bi5nZXRQYXJhbWV0ZXIoNzkzOCk7LTEhPT0kLmluZGV4T2YoIldlYkdMIik/KF9lPXBhcnNlRmxvYXQoL15XZWJHTCAoXGQpLy5leGVjKCQpWzFdKSxoZT1fZT49MSk6LTEhPT0kLmluZGV4T2YoIk9wZW5HTCBFUyIpJiYoX2U9cGFyc2VGbG9hdCgvXk9wZW5HTCBFUyAoXGQpLy5leGVjKCQpWzFdKSxoZT1fZT49Mik7bGV0IGRlPW51bGwscGU9e30sR2U9bi5nZXRQYXJhbWV0ZXIoMzA4OCksU2U9bi5nZXRQYXJhbWV0ZXIoMjk3OCksRmU9KG5ldyBRaSkuZnJvbUFycmF5KEdlKSxsdD0obmV3IFFpKS5mcm9tQXJyYXkoU2UpO2Z1bmN0aW9uIE10KHNlLEp0LFV0KXtsZXQgU249bmV3IFVpbnQ4QXJyYXkoNCksV2U9bi5jcmVhdGVUZXh0dXJlKCk7bi5iaW5kVGV4dHVyZShzZSxXZSksbi50ZXhQYXJhbWV0ZXJpKHNlLDEwMjQxLDk3MjgpLG4udGV4UGFyYW1ldGVyaShzZSwxMDI0MCw5NzI4KTtmb3IobGV0IGduPTA7Z248VXQ7Z24rKyluLnRleEltYWdlMkQoSnQrZ24sMCw2NDA4LDEsMSwwLDY0MDgsNTEyMSxTbik7cmV0dXJuIFdlfWxldCBwdD17fTtmdW5jdGlvbiBrZShzZSl7ITAhPT1kW3NlXSYmKG4uZW5hYmxlKHNlKSxkW3NlXT0hMCl9ZnVuY3Rpb24gVG4oc2UpeyExIT09ZFtzZV0mJihuLmRpc2FibGUoc2UpLGRbc2VdPSExKX1wdFszNTUzXT1NdCgzNTUzLDM1NTMsMSkscHRbMzQwNjddPU10KDM0MDY3LDM0MDY5LDYpLHMuc2V0Q2xlYXIoMCwwLDAsMSksbC5zZXRDbGVhcigxKSxjLnNldENsZWFyKDApLGtlKDI5MjkpLGwuc2V0RnVuYyhYMyksWWUoITEpLF90KFMkKSxrZSgyODg0KSxvZSh2cCk7bGV0IG10PXtbVTBdOjMyNzc0LFtpUmVdOjMyNzc4LFtyUmVdOjMyNzc5fTtpZihpKW10W0kkXT0zMjc3NSxtdFtBJF09MzI3NzY7ZWxzZXtsZXQgc2U9dC5nZXQoIkVYVF9ibGVuZF9taW5tYXgiKTtudWxsIT09c2UmJihtdFtJJF09c2UuTUlOX0VYVCxtdFtBJF09c2UuTUFYX0VYVCl9bGV0IGh0PXtbb1JlXTowLFthUmVdOjEsW3NSZV06NzY4LFtjdGVdOjc3MCxbaFJlXTo3NzYsW3VSZV06Nzc0LFtjUmVdOjc3MixbbFJlXTo3NjksW2R0ZV06NzcxLFtwUmVdOjc3NSxbZFJlXTo3NzN9O2Z1bmN0aW9uIG9lKHNlLEp0LFV0LFNuLFdlLGduLGZpLGxyKXtpZihzZSE9PXZwKXtpZighMT09PV8mJihrZSgzMDQyKSxfPSEwKSxzZT09PW5SZSlXZT1XZXx8SnQsZ249Z258fFV0LGZpPWZpfHxTbiwoSnQhPT15fHxXZSE9PUkpJiYobi5ibGVuZEVxdWF0aW9uU2VwYXJhdGUobXRbSnRdLG10W1dlXSkseT1KdCxJPVdlKSwoVXQhPT14fHxTbiE9PVJ8fGduIT09Qnx8ZmkhPT1lZSkmJihuLmJsZW5kRnVuY1NlcGFyYXRlKGh0W1V0XSxodFtTbl0saHRbZ25dLGh0W2ZpXSkseD1VdCxSPVNuLEI9Z24sZWU9ZmkpLE09c2UsUT1udWxsO2Vsc2UgaWYoc2UhPT1NfHxsciE9PVEpe2lmKCh5IT09VTB8fEkhPT1VMCkmJihuLmJsZW5kRXF1YXRpb24oMzI3NzQpLHk9VTAsST1VMCksbHIpc3dpdGNoKHNlKXtjYXNlIGd4Om4uYmxlbmRGdW5jU2VwYXJhdGUoMSw3NzEsMSw3NzEpO2JyZWFrO2Nhc2UgRSQ6bi5ibGVuZEZ1bmMoMSwxKTticmVhaztjYXNlIFQkOm4uYmxlbmRGdW5jU2VwYXJhdGUoMCw3NjksMCwxKTticmVhaztjYXNlIEQkOm4uYmxlbmRGdW5jU2VwYXJhdGUoMCw3NjgsMCw3NzApO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZTogSW52YWxpZCBibGVuZGluZzogIixzZSl9ZWxzZSBzd2l0Y2goc2Upe2Nhc2UgZ3g6bi5ibGVuZEZ1bmNTZXBhcmF0ZSg3NzAsNzcxLDEsNzcxKTticmVhaztjYXNlIEUkOm4uYmxlbmRGdW5jKDc3MCwxKTticmVhaztjYXNlIFQkOm4uYmxlbmRGdW5jU2VwYXJhdGUoMCw3NjksMCwxKTticmVhaztjYXNlIEQkOm4uYmxlbmRGdW5jKDAsNzY4KTticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IEludmFsaWQgYmxlbmRpbmc6ICIsc2UpfXg9bnVsbCxSPW51bGwsQj1udWxsLGVlPW51bGwsTT1zZSxRPWxyfX1lbHNlITA9PT1fJiYoVG4oMzA0MiksXz0hMSl9ZnVuY3Rpb24gWWUoc2Upe3dlIT09c2UmJihuLmZyb250RmFjZShzZT8yMzA0OjIzMDUpLHdlPXNlKX1mdW5jdGlvbiBfdChzZSl7c2UhPT0kQWU/KGtlKDI4ODQpLHNlIT09UWUmJm4uY3VsbEZhY2Uoc2U9PT1TJD8xMDI5OnNlPT09ZVJlPzEwMjg6MTAzMikpOlRuKDI4ODQpLFFlPXNlfWZ1bmN0aW9uIGFuKHNlLEp0LFV0KXtzZT8oa2UoMzI4MjMpLChEIT09SnR8fHJlIT09VXQpJiYobi5wb2x5Z29uT2Zmc2V0KEp0LFV0KSxEPUp0LHJlPVV0KSk6VG4oMzI4MjMpfWZ1bmN0aW9uIHNpKHNlKXt2b2lkIDA9PT1zZSYmKHNlPTMzOTg0K2NlLTEpLGRlIT09c2UmJihuLmFjdGl2ZVRleHR1cmUoc2UpLGRlPXNlKX1yZXR1cm57YnVmZmVyczp7Y29sb3I6cyxkZXB0aDpsLHN0ZW5jaWw6Y30sZW5hYmxlOmtlLGRpc2FibGU6VG4sYmluZEZyYW1lYnVmZmVyOmZ1bmN0aW9uKHNlLEp0KXtyZXR1cm4gdVtzZV0hPT1KdCYmKG4uYmluZEZyYW1lYnVmZmVyKHNlLEp0KSx1W3NlXT1KdCxpJiYoMzYwMDk9PT1zZSYmKHVbMzYxNjBdPUp0KSwzNjE2MD09PXNlJiYodVszNjAwOV09SnQpKSwhMCl9LGRyYXdCdWZmZXJzOmZ1bmN0aW9uKHNlLEp0KXtsZXQgVXQ9aCxTbj0hMTtpZihzZSlpZihVdD1wLmdldChKdCksdm9pZCAwPT09VXQmJihVdD1bXSxwLnNldChKdCxVdCkpLHNlLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMpe2xldCBXZT1zZS50ZXh0dXJlO2lmKFV0Lmxlbmd0aCE9PVdlLmxlbmd0aHx8MzYwNjQhPT1VdFswXSl7Zm9yKGxldCBnbj0wLGZpPVdlLmxlbmd0aDtnbjxmaTtnbisrKVV0W2duXT0zNjA2NCtnbjtVdC5sZW5ndGg9V2UubGVuZ3RoLFNuPSEwfX1lbHNlIDM2MDY0IT09VXRbMF0mJihVdFswXT0zNjA2NCxTbj0hMCk7ZWxzZSAxMDI5IT09VXRbMF0mJihVdFswXT0xMDI5LFNuPSEwKTtTbiYmKGUuaXNXZWJHTDI/bi5kcmF3QnVmZmVycyhVdCk6dC5nZXQoIldFQkdMX2RyYXdfYnVmZmVycyIpLmRyYXdCdWZmZXJzV0VCR0woVXQpKX0sdXNlUHJvZ3JhbTpmdW5jdGlvbihzZSl7cmV0dXJuIG0hPT1zZSYmKG4udXNlUHJvZ3JhbShzZSksbT1zZSwhMCl9LHNldEJsZW5kaW5nOm9lLHNldE1hdGVyaWFsOmZ1bmN0aW9uKHNlLEp0KXtzZS5zaWRlPT09WjA/VG4oMjg4NCk6a2UoMjg4NCk7bGV0IFV0PXNlLnNpZGU9PT1ibztKdCYmKFV0PSFVdCksWWUoVXQpLHNlLmJsZW5kaW5nPT09Z3gmJiExPT09c2UudHJhbnNwYXJlbnQ/b2UodnApOm9lKHNlLmJsZW5kaW5nLHNlLmJsZW5kRXF1YXRpb24sc2UuYmxlbmRTcmMsc2UuYmxlbmREc3Qsc2UuYmxlbmRFcXVhdGlvbkFscGhhLHNlLmJsZW5kU3JjQWxwaGEsc2UuYmxlbmREc3RBbHBoYSxzZS5wcmVtdWx0aXBsaWVkQWxwaGEpLGwuc2V0RnVuYyhzZS5kZXB0aEZ1bmMpLGwuc2V0VGVzdChzZS5kZXB0aFRlc3QpLGwuc2V0TWFzayhzZS5kZXB0aFdyaXRlKSxzLnNldE1hc2soc2UuY29sb3JXcml0ZSk7bGV0IFNuPXNlLnN0ZW5jaWxXcml0ZTtjLnNldFRlc3QoU24pLFNuJiYoYy5zZXRNYXNrKHNlLnN0ZW5jaWxXcml0ZU1hc2spLGMuc2V0RnVuYyhzZS5zdGVuY2lsRnVuYyxzZS5zdGVuY2lsUmVmLHNlLnN0ZW5jaWxGdW5jTWFzayksYy5zZXRPcChzZS5zdGVuY2lsRmFpbCxzZS5zdGVuY2lsWkZhaWwsc2Uuc3RlbmNpbFpQYXNzKSksYW4oc2UucG9seWdvbk9mZnNldCxzZS5wb2x5Z29uT2Zmc2V0RmFjdG9yLHNlLnBvbHlnb25PZmZzZXRVbml0cyksITA9PT1zZS5hbHBoYVRvQ292ZXJhZ2U/a2UoMzI5MjYpOlRuKDMyOTI2KX0sc2V0RmxpcFNpZGVkOlllLHNldEN1bGxGYWNlOl90LHNldExpbmVXaWR0aDpmdW5jdGlvbihzZSl7c2UhPT1BZSYmKGhlJiZuLmxpbmVXaWR0aChzZSksQWU9c2UpfSxzZXRQb2x5Z29uT2Zmc2V0OmFuLHNldFNjaXNzb3JUZXN0OmZ1bmN0aW9uKHNlKXtzZT9rZSgzMDg5KTpUbigzMDg5KX0sYWN0aXZlVGV4dHVyZTpzaSxiaW5kVGV4dHVyZTpmdW5jdGlvbihzZSxKdCl7bnVsbD09PWRlJiZzaSgpO2xldCBVdD1wZVtkZV07dm9pZCAwPT09VXQmJihVdD17dHlwZTp2b2lkIDAsdGV4dHVyZTp2b2lkIDB9LHBlW2RlXT1VdCksKFV0LnR5cGUhPT1zZXx8VXQudGV4dHVyZSE9PUp0KSYmKG4uYmluZFRleHR1cmUoc2UsSnR8fHB0W3NlXSksVXQudHlwZT1zZSxVdC50ZXh0dXJlPUp0KX0sdW5iaW5kVGV4dHVyZTpmdW5jdGlvbigpe2xldCBzZT1wZVtkZV07dm9pZCAwIT09c2UmJnZvaWQgMCE9PXNlLnR5cGUmJihuLmJpbmRUZXh0dXJlKHNlLnR5cGUsbnVsbCksc2UudHlwZT12b2lkIDAsc2UudGV4dHVyZT12b2lkIDApfSxjb21wcmVzc2VkVGV4SW1hZ2UyRDpmdW5jdGlvbigpe3RyeXtuLmNvbXByZXNzZWRUZXhJbWFnZTJELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaChzZSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLHNlKX19LHRleEltYWdlMkQ6ZnVuY3Rpb24oKXt0cnl7bi50ZXhJbWFnZTJELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaChzZSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLHNlKX19LHRleEltYWdlM0Q6ZnVuY3Rpb24oKXt0cnl7bi50ZXhJbWFnZTNELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaChzZSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLHNlKX19LHRleFN0b3JhZ2UyRDpmdW5jdGlvbigpe3RyeXtuLnRleFN0b3JhZ2UyRC5hcHBseShuLGFyZ3VtZW50cyl9Y2F0Y2goc2Upe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixzZSl9fSx0ZXhTdG9yYWdlM0Q6ZnVuY3Rpb24oKXt0cnl7bi50ZXhTdG9yYWdlM0QuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKHNlKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsc2UpfX0sdGV4U3ViSW1hZ2UyRDpmdW5jdGlvbigpe3RyeXtuLnRleFN1YkltYWdlMkQuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKHNlKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsc2UpfX0sdGV4U3ViSW1hZ2UzRDpmdW5jdGlvbigpe3RyeXtuLnRleFN1YkltYWdlM0QuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKHNlKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsc2UpfX0sY29tcHJlc3NlZFRleFN1YkltYWdlMkQ6ZnVuY3Rpb24oKXt0cnl7bi5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRC5hcHBseShuLGFyZ3VtZW50cyl9Y2F0Y2goc2Upe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixzZSl9fSxzY2lzc29yOmZ1bmN0aW9uKHNlKXshMT09PUZlLmVxdWFscyhzZSkmJihuLnNjaXNzb3Ioc2UueCxzZS55LHNlLnosc2UudyksRmUuY29weShzZSkpfSx2aWV3cG9ydDpmdW5jdGlvbihzZSl7ITE9PT1sdC5lcXVhbHMoc2UpJiYobi52aWV3cG9ydChzZS54LHNlLnksc2UueixzZS53KSxsdC5jb3B5KHNlKSl9LHJlc2V0OmZ1bmN0aW9uKCl7bi5kaXNhYmxlKDMwNDIpLG4uZGlzYWJsZSgyODg0KSxuLmRpc2FibGUoMjkyOSksbi5kaXNhYmxlKDMyODIzKSxuLmRpc2FibGUoMzA4OSksbi5kaXNhYmxlKDI5NjApLG4uZGlzYWJsZSgzMjkyNiksbi5ibGVuZEVxdWF0aW9uKDMyNzc0KSxuLmJsZW5kRnVuYygxLDApLG4uYmxlbmRGdW5jU2VwYXJhdGUoMSwwLDEsMCksbi5jb2xvck1hc2soITAsITAsITAsITApLG4uY2xlYXJDb2xvcigwLDAsMCwwKSxuLmRlcHRoTWFzayghMCksbi5kZXB0aEZ1bmMoNTEzKSxuLmNsZWFyRGVwdGgoMSksbi5zdGVuY2lsTWFzayg0Mjk0OTY3Mjk1KSxuLnN0ZW5jaWxGdW5jKDUxOSwwLDQyOTQ5NjcyOTUpLG4uc3RlbmNpbE9wKDc2ODAsNzY4MCw3NjgwKSxuLmNsZWFyU3RlbmNpbCgwKSxuLmN1bGxGYWNlKDEwMjkpLG4uZnJvbnRGYWNlKDIzMDUpLG4ucG9seWdvbk9mZnNldCgwLDApLG4uYWN0aXZlVGV4dHVyZSgzMzk4NCksbi5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCksITA9PT1pJiYobi5iaW5kRnJhbWVidWZmZXIoMzYwMDksbnVsbCksbi5iaW5kRnJhbWVidWZmZXIoMzYwMDgsbnVsbCkpLG4udXNlUHJvZ3JhbShudWxsKSxuLmxpbmVXaWR0aCgxKSxuLnNjaXNzb3IoMCwwLG4uY2FudmFzLndpZHRoLG4uY2FudmFzLmhlaWdodCksbi52aWV3cG9ydCgwLDAsbi5jYW52YXMud2lkdGgsbi5jYW52YXMuaGVpZ2h0KSxkPXt9LGRlPW51bGwscGU9e30sdT17fSxwPW5ldyBXZWFrTWFwLGg9W10sbT1udWxsLF89ITEsTT1udWxsLHk9bnVsbCx4PW51bGwsUj1udWxsLEk9bnVsbCxCPW51bGwsZWU9bnVsbCxRPSExLHdlPW51bGwsUWU9bnVsbCxBZT1udWxsLEQ9bnVsbCxyZT1udWxsLEZlLnNldCgwLDAsbi5jYW52YXMud2lkdGgsbi5jYW52YXMuaGVpZ2h0KSxsdC5zZXQoMCwwLG4uY2FudmFzLndpZHRoLG4uY2FudmFzLmhlaWdodCkscy5yZXNldCgpLGwucmVzZXQoKSxjLnJlc2V0KCl9fX1mdW5jdGlvbiBTMmUobix0LGUsaSxyLG8sYSl7bGV0IF8scz1yLmlzV2ViR0wyLGw9ci5tYXhUZXh0dXJlcyxjPXIubWF4Q3ViZW1hcFNpemUsZD1yLm1heFRleHR1cmVTaXplLHU9ci5tYXhTYW1wbGVzLGg9dC5oYXMoIldFQkdMX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSIpP3QuZ2V0KCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKTp2b2lkIDAsbT1uZXcgV2Vha01hcCxNPSExO3RyeXtNPXR5cGVvZiBPZmZzY3JlZW5DYW52YXM8InUiJiZudWxsIT09bmV3IE9mZnNjcmVlbkNhbnZhcygxLDEpLmdldENvbnRleHQoIjJkIil9Y2F0Y2h7fWZ1bmN0aW9uIHkoWSxMKXtyZXR1cm4gTT9uZXcgT2Zmc2NyZWVuQ2FudmFzKFksTCk6TXgoImNhbnZhcyIpfWZ1bmN0aW9uIHgoWSxMLEhlLHl0KXtsZXQgZW49MTtpZigoWS53aWR0aD55dHx8WS5oZWlnaHQ+eXQpJiYoZW49eXQvTWF0aC5tYXgoWS53aWR0aCxZLmhlaWdodCkpLGVuPDF8fCEwPT09TCl7aWYodHlwZW9mIEhUTUxJbWFnZUVsZW1lbnQ8InUiJiZZIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudHx8dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50PCJ1IiYmWSBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50fHx0eXBlb2YgSW1hZ2VCaXRtYXA8InUiJiZZIGluc3RhbmNlb2YgSW1hZ2VCaXRtYXApe2xldCBMZT1MP0pSZTpNYXRoLmZsb29yLGhuPUxlKGVuKlkud2lkdGgpLGxuPUxlKGVuKlkuaGVpZ2h0KTt2b2lkIDA9PT1fJiYoXz15KGhuLGxuKSk7bGV0IEZ0PUhlP3koaG4sbG4pOl87cmV0dXJuIEZ0LndpZHRoPWhuLEZ0LmhlaWdodD1sbixGdC5nZXRDb250ZXh0KCIyZCIpLmRyYXdJbWFnZShZLDAsMCxobixsbiksY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIGhhcyBiZWVuIHJlc2l6ZWQgZnJvbSAoIitZLndpZHRoKyJ4IitZLmhlaWdodCsiKSB0byAoIitobisieCIrbG4rIikuIiksRnR9cmV0dXJuImRhdGEiaW4gWSYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBJbWFnZSBpbiBEYXRhVGV4dHVyZSBpcyB0b28gYmlnICgiK1kud2lkdGgrIngiK1kuaGVpZ2h0KyIpLiIpLFl9cmV0dXJuIFl9ZnVuY3Rpb24gUihZKXtyZXR1cm4gdGVlKFkud2lkdGgpJiZ0ZWUoWS5oZWlnaHQpfWZ1bmN0aW9uIEIoWSxMKXtyZXR1cm4gWS5nZW5lcmF0ZU1pcG1hcHMmJkwmJlkubWluRmlsdGVyIT09dm8mJlkubWluRmlsdGVyIT09aWF9ZnVuY3Rpb24gZWUoWSl7bi5nZW5lcmF0ZU1pcG1hcChZKX1mdW5jdGlvbiBRKFksTCxIZSx5dCxlbj0hMSl7aWYoITE9PT1zKXJldHVybiBMO2lmKG51bGwhPT1ZKXtpZih2b2lkIDAhPT1uW1ldKXJldHVybiBuW1ldO2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogQXR0ZW1wdCB0byB1c2Ugbm9uLWV4aXN0aW5nIFdlYkdMIGludGVybmFsIGZvcm1hdCAnIitZKyInIil9bGV0IExlPUw7cmV0dXJuIDY0MDM9PT1MJiYoNTEyNj09PUhlJiYoTGU9MzMzMjYpLDUxMzE9PT1IZSYmKExlPTMzMzI1KSw1MTIxPT09SGUmJihMZT0zMzMyMSkpLDMzMzE5PT09TCYmKDUxMjY9PT1IZSYmKExlPTMzMzI4KSw1MTMxPT09SGUmJihMZT0zMzMyNyksNTEyMT09PUhlJiYoTGU9MzMzMjMpKSw2NDA4PT09TCYmKDUxMjY9PT1IZSYmKExlPTM0ODM2KSw1MTMxPT09SGUmJihMZT0zNDg0MiksNTEyMT09PUhlJiYoTGU9eXQ9PT1EciYmITE9PT1lbj8zNTkwNzozMjg1NiksMzI4MTk9PT1IZSYmKExlPTMyODU0KSwzMjgyMD09PUhlJiYoTGU9MzI4NTUpKSwoMzMzMjU9PT1MZXx8MzMzMjY9PT1MZXx8MzMzMjc9PT1MZXx8MzMzMjg9PT1MZXx8MzQ4NDI9PT1MZXx8MzQ4MzY9PT1MZSkmJnQuZ2V0KCJFWFRfY29sb3JfYnVmZmVyX2Zsb2F0IiksTGV9ZnVuY3Rpb24gd2UoWSxMLEhlKXtyZXR1cm4hMD09PUIoWSxIZSl8fFkuaXNGcmFtZWJ1ZmZlclRleHR1cmUmJlkubWluRmlsdGVyIT09dm8mJlkubWluRmlsdGVyIT09aWE/TWF0aC5sb2cyKE1hdGgubWF4KEwud2lkdGgsTC5oZWlnaHQpKSsxOnZvaWQgMCE9PVkubWlwbWFwcyYmWS5taXBtYXBzLmxlbmd0aD4wP1kubWlwbWFwcy5sZW5ndGg6WS5pc0NvbXByZXNzZWRUZXh0dXJlJiZBcnJheS5pc0FycmF5KFkuaW1hZ2UpP0wubWlwbWFwcy5sZW5ndGg6MX1mdW5jdGlvbiBRZShZKXtyZXR1cm4gWT09PXZvfHxZPT09UiR8fFk9PT1QJD85NzI4Ojk3Mjl9ZnVuY3Rpb24gQWUoWSl7bGV0IEw9WS50YXJnZXQ7TC5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixBZSksZnVuY3Rpb24oWSl7bGV0IEw9aS5nZXQoWSk7dm9pZCAwIT09TC5fX3dlYmdsSW5pdCYmKG4uZGVsZXRlVGV4dHVyZShMLl9fd2ViZ2xUZXh0dXJlKSxpLnJlbW92ZShZKSl9KEwpLEwuaXNWaWRlb1RleHR1cmUmJm0uZGVsZXRlKEwpLGEubWVtb3J5LnRleHR1cmVzLS19ZnVuY3Rpb24gRChZKXtsZXQgTD1ZLnRhcmdldDtMLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLEQpLGZ1bmN0aW9uKFkpe2xldCBMPVkudGV4dHVyZSxIZT1pLmdldChZKSx5dD1pLmdldChMKTtpZihZKXtpZih2b2lkIDAhPT15dC5fX3dlYmdsVGV4dHVyZSYmKG4uZGVsZXRlVGV4dHVyZSh5dC5fX3dlYmdsVGV4dHVyZSksYS5tZW1vcnkudGV4dHVyZXMtLSksWS5kZXB0aFRleHR1cmUmJlkuZGVwdGhUZXh0dXJlLmRpc3Bvc2UoKSxZLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KWZvcihsZXQgZW49MDtlbjw2O2VuKyspbi5kZWxldGVGcmFtZWJ1ZmZlcihIZS5fX3dlYmdsRnJhbWVidWZmZXJbZW5dKSxIZS5fX3dlYmdsRGVwdGhidWZmZXImJm4uZGVsZXRlUmVuZGVyYnVmZmVyKEhlLl9fd2ViZ2xEZXB0aGJ1ZmZlcltlbl0pO2Vsc2Ugbi5kZWxldGVGcmFtZWJ1ZmZlcihIZS5fX3dlYmdsRnJhbWVidWZmZXIpLEhlLl9fd2ViZ2xEZXB0aGJ1ZmZlciYmbi5kZWxldGVSZW5kZXJidWZmZXIoSGUuX193ZWJnbERlcHRoYnVmZmVyKSxIZS5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXImJm4uZGVsZXRlRnJhbWVidWZmZXIoSGUuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKSxIZS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXImJm4uZGVsZXRlUmVuZGVyYnVmZmVyKEhlLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciksSGUuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyJiZuLmRlbGV0ZVJlbmRlcmJ1ZmZlcihIZS5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXIpO2lmKFkuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cylmb3IobGV0IGVuPTAsTGU9TC5sZW5ndGg7ZW48TGU7ZW4rKyl7bGV0IGhuPWkuZ2V0KExbZW5dKTtobi5fX3dlYmdsVGV4dHVyZSYmKG4uZGVsZXRlVGV4dHVyZShobi5fX3dlYmdsVGV4dHVyZSksYS5tZW1vcnkudGV4dHVyZXMtLSksaS5yZW1vdmUoTFtlbl0pfWkucmVtb3ZlKEwpLGkucmVtb3ZlKFkpfX0oTCl9bGV0IGhlPTA7ZnVuY3Rpb24gZGUoWSxMKXtsZXQgSGU9aS5nZXQoWSk7aWYoWS5pc1ZpZGVvVGV4dHVyZSYmZnVuY3Rpb24oWSl7bGV0IEw9YS5yZW5kZXIuZnJhbWU7bS5nZXQoWSkhPT1MJiYobS5zZXQoWSxMKSxZLnVwZGF0ZSgpKX0oWSksWS52ZXJzaW9uPjAmJkhlLl9fdmVyc2lvbiE9PVkudmVyc2lvbil7bGV0IHl0PVkuaW1hZ2U7aWYodm9pZCAwPT09eXQpY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIG1hcmtlZCBmb3IgdXBkYXRlIGJ1dCBpbWFnZSBpcyB1bmRlZmluZWQiKTtlbHNle2lmKCExIT09eXQuY29tcGxldGUpcmV0dXJuIHZvaWQga2UoSGUsWSxMKTtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgbWFya2VkIGZvciB1cGRhdGUgYnV0IGltYWdlIGlzIGluY29tcGxldGUiKX19ZS5hY3RpdmVUZXh0dXJlKDMzOTg0K0wpLGUuYmluZFRleHR1cmUoMzU1MyxIZS5fX3dlYmdsVGV4dHVyZSl9ZnVuY3Rpb24gU2UoWSxMKXtsZXQgSGU9aS5nZXQoWSk7WS52ZXJzaW9uPjAmJkhlLl9fdmVyc2lvbiE9PVkudmVyc2lvbj9mdW5jdGlvbihZLEwsSGUpe2lmKDYhPT1MLmltYWdlLmxlbmd0aClyZXR1cm47cHQoWSxMKSxlLmFjdGl2ZVRleHR1cmUoMzM5ODQrSGUpLGUuYmluZFRleHR1cmUoMzQwNjcsWS5fX3dlYmdsVGV4dHVyZSksbi5waXhlbFN0b3JlaSgzNzQ0MCxMLmZsaXBZKSxuLnBpeGVsU3RvcmVpKDM3NDQxLEwucHJlbXVsdGlwbHlBbHBoYSksbi5waXhlbFN0b3JlaSgzMzE3LEwudW5wYWNrQWxpZ25tZW50KSxuLnBpeGVsU3RvcmVpKDM3NDQzLDApO2xldCB5dD1MJiYoTC5pc0NvbXByZXNzZWRUZXh0dXJlfHxMLmltYWdlWzBdLmlzQ29tcHJlc3NlZFRleHR1cmUpLGVuPUwuaW1hZ2VbMF0mJkwuaW1hZ2VbMF0uaXNEYXRhVGV4dHVyZSxMZT1bXTtmb3IobGV0IFdlPTA7V2U8NjtXZSsrKUxlW1dlXT15dHx8ZW4/ZW4/TC5pbWFnZVtXZV0uaW1hZ2U6TC5pbWFnZVtXZV06eChMLmltYWdlW1dlXSwhMSwhMCxjKSxMZVtXZV09YW4oTCxMZVtXZV0pO2xldCBTbixobj1MZVswXSxsbj1SKGhuKXx8cyxGdD1vLmNvbnZlcnQoTC5mb3JtYXQsTC5lbmNvZGluZyksT3Q9by5jb252ZXJ0KEwudHlwZSksTm49UShMLmludGVybmFsRm9ybWF0LEZ0LE90LEwuZW5jb2RpbmcpLHNlPXMmJiEwIT09TC5pc1ZpZGVvVGV4dHVyZSxKdD12b2lkIDA9PT1ZLl9fdmVyc2lvbixVdD13ZShMLGhuLGxuKTtpZihNdCgzNDA2NyxMLGxuKSx5dCl7c2UmJkp0JiZlLnRleFN0b3JhZ2UyRCgzNDA2NyxVdCxObixobi53aWR0aCxobi5oZWlnaHQpO2ZvcihsZXQgV2U9MDtXZTw2O1dlKyspe1NuPUxlW1dlXS5taXBtYXBzO2ZvcihsZXQgZ249MDtnbjxTbi5sZW5ndGg7Z24rKyl7bGV0IGZpPVNuW2duXTtMLmZvcm1hdCE9PUNhP251bGwhPT1GdD9zZT9lLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKDM0MDY5K1dlLGduLDAsMCxmaS53aWR0aCxmaS5oZWlnaHQsRnQsZmkuZGF0YSk6ZS5jb21wcmVzc2VkVGV4SW1hZ2UyRCgzNDA2OStXZSxnbixObixmaS53aWR0aCxmaS5oZWlnaHQsMCxmaS5kYXRhKTpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gbG9hZCB1bnN1cHBvcnRlZCBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0IGluIC5zZXRUZXh0dXJlQ3ViZSgpIik6c2U/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K1dlLGduLDAsMCxmaS53aWR0aCxmaS5oZWlnaHQsRnQsT3QsZmkuZGF0YSk6ZS50ZXhJbWFnZTJEKDM0MDY5K1dlLGduLE5uLGZpLndpZHRoLGZpLmhlaWdodCwwLEZ0LE90LGZpLmRhdGEpfX19ZWxzZXtTbj1MLm1pcG1hcHMsc2UmJkp0JiYoU24ubGVuZ3RoPjAmJlV0KyssZS50ZXhTdG9yYWdlMkQoMzQwNjcsVXQsTm4sTGVbMF0ud2lkdGgsTGVbMF0uaGVpZ2h0KSk7Zm9yKGxldCBXZT0wO1dlPDY7V2UrKylpZihlbil7c2U/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K1dlLDAsMCwwLExlW1dlXS53aWR0aCxMZVtXZV0uaGVpZ2h0LEZ0LE90LExlW1dlXS5kYXRhKTplLnRleEltYWdlMkQoMzQwNjkrV2UsMCxObixMZVtXZV0ud2lkdGgsTGVbV2VdLmhlaWdodCwwLEZ0LE90LExlW1dlXS5kYXRhKTtmb3IobGV0IGduPTA7Z248U24ubGVuZ3RoO2duKyspe2xldCBscj1Tbltnbl0uaW1hZ2VbV2VdLmltYWdlO3NlP2UudGV4U3ViSW1hZ2UyRCgzNDA2OStXZSxnbisxLDAsMCxsci53aWR0aCxsci5oZWlnaHQsRnQsT3QsbHIuZGF0YSk6ZS50ZXhJbWFnZTJEKDM0MDY5K1dlLGduKzEsTm4sbHIud2lkdGgsbHIuaGVpZ2h0LDAsRnQsT3QsbHIuZGF0YSl9fWVsc2V7c2U/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K1dlLDAsMCwwLEZ0LE90LExlW1dlXSk6ZS50ZXhJbWFnZTJEKDM0MDY5K1dlLDAsTm4sRnQsT3QsTGVbV2VdKTtmb3IobGV0IGduPTA7Z248U24ubGVuZ3RoO2duKyspe2xldCBmaT1Tbltnbl07c2U/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K1dlLGduKzEsMCwwLEZ0LE90LGZpLmltYWdlW1dlXSk6ZS50ZXhJbWFnZTJEKDM0MDY5K1dlLGduKzEsTm4sRnQsT3QsZmkuaW1hZ2VbV2VdKX19fUIoTCxsbikmJmVlKDM0MDY3KSxZLl9fdmVyc2lvbj1MLnZlcnNpb24sTC5vblVwZGF0ZSYmTC5vblVwZGF0ZShMKX0oSGUsWSxMKTooZS5hY3RpdmVUZXh0dXJlKDMzOTg0K0wpLGUuYmluZFRleHR1cmUoMzQwNjcsSGUuX193ZWJnbFRleHR1cmUpKX1sZXQgRmU9e1taM106MTA0OTcsW0VzXTozMzA3MSxbSzNdOjMzNjQ4fSxsdD17W3ZvXTo5NzI4LFtSJF06OTk4NCxbUCRdOjk5ODYsW2lhXTo5NzI5LFtEUmVdOjk5ODUsWyRJXTo5OTg3fTtmdW5jdGlvbiBNdChZLEwsSGUpe2lmKEhlPyhuLnRleFBhcmFtZXRlcmkoWSwxMDI0MixGZVtMLndyYXBTXSksbi50ZXhQYXJhbWV0ZXJpKFksMTAyNDMsRmVbTC53cmFwVF0pLCgzMjg3OT09PVl8fDM1ODY2PT09WSkmJm4udGV4UGFyYW1ldGVyaShZLDMyODgyLEZlW0wud3JhcFJdKSxuLnRleFBhcmFtZXRlcmkoWSwxMDI0MCxsdFtMLm1hZ0ZpbHRlcl0pLG4udGV4UGFyYW1ldGVyaShZLDEwMjQxLGx0W0wubWluRmlsdGVyXSkpOihuLnRleFBhcmFtZXRlcmkoWSwxMDI0MiwzMzA3MSksbi50ZXhQYXJhbWV0ZXJpKFksMTAyNDMsMzMwNzEpLCgzMjg3OT09PVl8fDM1ODY2PT09WSkmJm4udGV4UGFyYW1ldGVyaShZLDMyODgyLDMzMDcxKSwoTC53cmFwUyE9PUVzfHxMLndyYXBUIT09RXMpJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaXMgbm90IHBvd2VyIG9mIHR3by4gVGV4dHVyZS53cmFwUyBhbmQgVGV4dHVyZS53cmFwVCBzaG91bGQgYmUgc2V0IHRvIFRIUkVFLkNsYW1wVG9FZGdlV3JhcHBpbmcuIiksbi50ZXhQYXJhbWV0ZXJpKFksMTAyNDAsUWUoTC5tYWdGaWx0ZXIpKSxuLnRleFBhcmFtZXRlcmkoWSwxMDI0MSxRZShMLm1pbkZpbHRlcikpLEwubWluRmlsdGVyIT09dm8mJkwubWluRmlsdGVyIT09aWEmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBpcyBub3QgcG93ZXIgb2YgdHdvLiBUZXh0dXJlLm1pbkZpbHRlciBzaG91bGQgYmUgc2V0IHRvIFRIUkVFLk5lYXJlc3RGaWx0ZXIgb3IgVEhSRUUuTGluZWFyRmlsdGVyLiIpKSwhMD09PXQuaGFzKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKSl7bGV0IHl0PXQuZ2V0KCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTtpZihMLnR5cGU9PT1nbSYmITE9PT10LmhhcygiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIil8fCExPT09cyYmTC50eXBlPT09cTAmJiExPT09dC5oYXMoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIikpcmV0dXJuOyhMLmFuaXNvdHJvcHk+MXx8aS5nZXQoTCkuX19jdXJyZW50QW5pc290cm9weSkmJihuLnRleFBhcmFtZXRlcmYoWSx5dC5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCxNYXRoLm1pbihMLmFuaXNvdHJvcHksci5nZXRNYXhBbmlzb3Ryb3B5KCkpKSxpLmdldChMKS5fX2N1cnJlbnRBbmlzb3Ryb3B5PUwuYW5pc290cm9weSl9fWZ1bmN0aW9uIHB0KFksTCl7dm9pZCAwPT09WS5fX3dlYmdsSW5pdCYmKFkuX193ZWJnbEluaXQ9ITAsTC5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixBZSksWS5fX3dlYmdsVGV4dHVyZT1uLmNyZWF0ZVRleHR1cmUoKSxhLm1lbW9yeS50ZXh0dXJlcysrKX1mdW5jdGlvbiBrZShZLEwsSGUpe2xldCB5dD0zNTUzO0wuaXNEYXRhVGV4dHVyZTJEQXJyYXkmJih5dD0zNTg2NiksTC5pc0RhdGFUZXh0dXJlM0QmJih5dD0zMjg3OSkscHQoWSxMKSxlLmFjdGl2ZVRleHR1cmUoMzM5ODQrSGUpLGUuYmluZFRleHR1cmUoeXQsWS5fX3dlYmdsVGV4dHVyZSksbi5waXhlbFN0b3JlaSgzNzQ0MCxMLmZsaXBZKSxuLnBpeGVsU3RvcmVpKDM3NDQxLEwucHJlbXVsdGlwbHlBbHBoYSksbi5waXhlbFN0b3JlaSgzMzE3LEwudW5wYWNrQWxpZ25tZW50KSxuLnBpeGVsU3RvcmVpKDM3NDQzLDApO2xldCBlbj1mdW5jdGlvbihZKXtyZXR1cm4hcyYmKFkud3JhcFMhPT1Fc3x8WS53cmFwVCE9PUVzfHxZLm1pbkZpbHRlciE9PXZvJiZZLm1pbkZpbHRlciE9PWlhKX0oTCkmJiExPT09UihMLmltYWdlKSxMZT14KEwuaW1hZ2UsZW4sITEsZCk7TGU9YW4oTCxMZSk7bGV0IGhuPVIoTGUpfHxzLGxuPW8uY29udmVydChMLmZvcm1hdCxMLmVuY29kaW5nKSxGdD1vLmNvbnZlcnQoTC50eXBlKSxPdD1RKEwuaW50ZXJuYWxGb3JtYXQsbG4sRnQsTC5lbmNvZGluZyxMLmlzVmlkZW9UZXh0dXJlKTtNdCh5dCxMLGhuKTtsZXQgTm4sc2U9TC5taXBtYXBzLEp0PXMmJiEwIT09TC5pc1ZpZGVvVGV4dHVyZSxVdD12b2lkIDA9PT1ZLl9fdmVyc2lvbixTbj13ZShMLExlLGhuKTtpZihMLmlzRGVwdGhUZXh0dXJlKU90PTY0MDIscz9PdD1MLnR5cGU9PT1nbT8zNjAxMjpMLnR5cGU9PT14ST8zMzE5MDpMLnR5cGU9PT1YMD8zNTA1NjozMzE4OTpMLnR5cGU9PT1nbSYmY29uc29sZS5lcnJvcigiV2ViR0xSZW5kZXJlcjogRmxvYXRpbmcgcG9pbnQgZGVwdGggdGV4dHVyZSByZXF1aXJlcyBXZWJHTDIuIiksTC5mb3JtYXQ9PT1ibSYmNjQwMj09PU90JiZMLnR5cGUhPT14eCYmTC50eXBlIT09eEkmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVzZSBVbnNpZ25lZFNob3J0VHlwZSBvciBVbnNpZ25lZEludFR5cGUgZm9yIERlcHRoRm9ybWF0IERlcHRoVGV4dHVyZS4iKSxMLnR5cGU9eHgsRnQ9by5jb252ZXJ0KEwudHlwZSkpLEwuZm9ybWF0PT09SzAmJjY0MDI9PT1PdCYmKE90PTM0MDQxLEwudHlwZSE9PVgwJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBVc2UgVW5zaWduZWRJbnQyNDhUeXBlIGZvciBEZXB0aFN0ZW5jaWxGb3JtYXQgRGVwdGhUZXh0dXJlLiIpLEwudHlwZT1YMCxGdD1vLmNvbnZlcnQoTC50eXBlKSkpLEp0JiZVdD9lLnRleFN0b3JhZ2UyRCgzNTUzLDEsT3QsTGUud2lkdGgsTGUuaGVpZ2h0KTplLnRleEltYWdlMkQoMzU1MywwLE90LExlLndpZHRoLExlLmhlaWdodCwwLGxuLEZ0LG51bGwpO2Vsc2UgaWYoTC5pc0RhdGFUZXh0dXJlKWlmKHNlLmxlbmd0aD4wJiZobil7SnQmJlV0JiZlLnRleFN0b3JhZ2UyRCgzNTUzLFNuLE90LHNlWzBdLndpZHRoLHNlWzBdLmhlaWdodCk7Zm9yKGxldCBXZT0wLGduPXNlLmxlbmd0aDtXZTxnbjtXZSsrKU5uPXNlW1dlXSxKdD9lLnRleFN1YkltYWdlMkQoMzU1MywwLDAsMCxObi53aWR0aCxObi5oZWlnaHQsbG4sRnQsTm4uZGF0YSk6ZS50ZXhJbWFnZTJEKDM1NTMsV2UsT3QsTm4ud2lkdGgsTm4uaGVpZ2h0LDAsbG4sRnQsTm4uZGF0YSk7TC5nZW5lcmF0ZU1pcG1hcHM9ITF9ZWxzZSBKdD8oVXQmJmUudGV4U3RvcmFnZTJEKDM1NTMsU24sT3QsTGUud2lkdGgsTGUuaGVpZ2h0KSxlLnRleFN1YkltYWdlMkQoMzU1MywwLDAsMCxMZS53aWR0aCxMZS5oZWlnaHQsbG4sRnQsTGUuZGF0YSkpOmUudGV4SW1hZ2UyRCgzNTUzLDAsT3QsTGUud2lkdGgsTGUuaGVpZ2h0LDAsbG4sRnQsTGUuZGF0YSk7ZWxzZSBpZihMLmlzQ29tcHJlc3NlZFRleHR1cmUpe0p0JiZVdCYmZS50ZXhTdG9yYWdlMkQoMzU1MyxTbixPdCxzZVswXS53aWR0aCxzZVswXS5oZWlnaHQpO2ZvcihsZXQgV2U9MCxnbj1zZS5sZW5ndGg7V2U8Z247V2UrKylObj1zZVtXZV0sTC5mb3JtYXQhPT1DYT9udWxsIT09bG4/SnQ/ZS5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCgzNTUzLFdlLDAsMCxObi53aWR0aCxObi5oZWlnaHQsbG4sTm4uZGF0YSk6ZS5jb21wcmVzc2VkVGV4SW1hZ2UyRCgzNTUzLFdlLE90LE5uLndpZHRoLE5uLmhlaWdodCwwLE5uLmRhdGEpOmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogQXR0ZW1wdCB0byBsb2FkIHVuc3VwcG9ydGVkIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXQgaW4gLnVwbG9hZFRleHR1cmUoKSIpOkp0P2UudGV4U3ViSW1hZ2UyRCgzNTUzLFdlLDAsMCxObi53aWR0aCxObi5oZWlnaHQsbG4sRnQsTm4uZGF0YSk6ZS50ZXhJbWFnZTJEKDM1NTMsV2UsT3QsTm4ud2lkdGgsTm4uaGVpZ2h0LDAsbG4sRnQsTm4uZGF0YSl9ZWxzZSBpZihMLmlzRGF0YVRleHR1cmUyREFycmF5KUp0PyhVdCYmZS50ZXhTdG9yYWdlM0QoMzU4NjYsU24sT3QsTGUud2lkdGgsTGUuaGVpZ2h0LExlLmRlcHRoKSxlLnRleFN1YkltYWdlM0QoMzU4NjYsMCwwLDAsMCxMZS53aWR0aCxMZS5oZWlnaHQsTGUuZGVwdGgsbG4sRnQsTGUuZGF0YSkpOmUudGV4SW1hZ2UzRCgzNTg2NiwwLE90LExlLndpZHRoLExlLmhlaWdodCxMZS5kZXB0aCwwLGxuLEZ0LExlLmRhdGEpO2Vsc2UgaWYoTC5pc0RhdGFUZXh0dXJlM0QpSnQ/KFV0JiZlLnRleFN0b3JhZ2UzRCgzMjg3OSxTbixPdCxMZS53aWR0aCxMZS5oZWlnaHQsTGUuZGVwdGgpLGUudGV4U3ViSW1hZ2UzRCgzMjg3OSwwLDAsMCwwLExlLndpZHRoLExlLmhlaWdodCxMZS5kZXB0aCxsbixGdCxMZS5kYXRhKSk6ZS50ZXhJbWFnZTNEKDMyODc5LDAsT3QsTGUud2lkdGgsTGUuaGVpZ2h0LExlLmRlcHRoLDAsbG4sRnQsTGUuZGF0YSk7ZWxzZSBpZihMLmlzRnJhbWVidWZmZXJUZXh0dXJlKUp0JiZVdD9lLnRleFN0b3JhZ2UyRCgzNTUzLFNuLE90LExlLndpZHRoLExlLmhlaWdodCk6ZS50ZXhJbWFnZTJEKDM1NTMsMCxPdCxMZS53aWR0aCxMZS5oZWlnaHQsMCxsbixGdCxudWxsKTtlbHNlIGlmKHNlLmxlbmd0aD4wJiZobil7SnQmJlV0JiZlLnRleFN0b3JhZ2UyRCgzNTUzLFNuLE90LHNlWzBdLndpZHRoLHNlWzBdLmhlaWdodCk7Zm9yKGxldCBXZT0wLGduPXNlLmxlbmd0aDtXZTxnbjtXZSsrKU5uPXNlW1dlXSxKdD9lLnRleFN1YkltYWdlMkQoMzU1MyxXZSwwLDAsbG4sRnQsTm4pOmUudGV4SW1hZ2UyRCgzNTUzLFdlLE90LGxuLEZ0LE5uKTtMLmdlbmVyYXRlTWlwbWFwcz0hMX1lbHNlIEp0PyhVdCYmZS50ZXhTdG9yYWdlMkQoMzU1MyxTbixPdCxMZS53aWR0aCxMZS5oZWlnaHQpLGUudGV4U3ViSW1hZ2UyRCgzNTUzLDAsMCwwLGxuLEZ0LExlKSk6ZS50ZXhJbWFnZTJEKDM1NTMsMCxPdCxsbixGdCxMZSk7QihMLGhuKSYmZWUoeXQpLFkuX192ZXJzaW9uPUwudmVyc2lvbixMLm9uVXBkYXRlJiZMLm9uVXBkYXRlKEwpfWZ1bmN0aW9uIHd0KFksTCxIZSx5dCxlbil7bGV0IExlPW8uY29udmVydChIZS5mb3JtYXQsSGUuZW5jb2RpbmcpLGhuPW8uY29udmVydChIZS50eXBlKSxsbj1RKEhlLmludGVybmFsRm9ybWF0LExlLGhuLEhlLmVuY29kaW5nKTtpLmdldChMKS5fX2hhc0V4dGVybmFsVGV4dHVyZXN8fCgzMjg3OT09PWVufHwzNTg2Nj09PWVuP2UudGV4SW1hZ2UzRChlbiwwLGxuLEwud2lkdGgsTC5oZWlnaHQsTC5kZXB0aCwwLExlLGhuLG51bGwpOmUudGV4SW1hZ2UyRChlbiwwLGxuLEwud2lkdGgsTC5oZWlnaHQsMCxMZSxobixudWxsKSksZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsWSksTC51c2VSZW5kZXJUb1RleHR1cmU/aC5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlRVhUKDM2MTYwLHl0LGVuLGkuZ2V0KEhlKS5fX3dlYmdsVGV4dHVyZSwwLF90KEwpKTpuLmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLHl0LGVuLGkuZ2V0KEhlKS5fX3dlYmdsVGV4dHVyZSwwKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKX1mdW5jdGlvbiBvbihZLEwsSGUpe2lmKG4uYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxZKSxMLmRlcHRoQnVmZmVyJiYhTC5zdGVuY2lsQnVmZmVyKXtsZXQgeXQ9MzMxODk7aWYoSGV8fEwudXNlUmVuZGVyVG9UZXh0dXJlKXtsZXQgZW49TC5kZXB0aFRleHR1cmU7ZW4mJmVuLmlzRGVwdGhUZXh0dXJlJiYoZW4udHlwZT09PWdtP3l0PTM2MDEyOmVuLnR5cGU9PT14SSYmKHl0PTMzMTkwKSk7bGV0IExlPV90KEwpO0wudXNlUmVuZGVyVG9UZXh0dXJlP2gucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKDM2MTYxLExlLHl0LEwud2lkdGgsTC5oZWlnaHQpOm4ucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLExlLHl0LEwud2lkdGgsTC5oZWlnaHQpfWVsc2Ugbi5yZW5kZXJidWZmZXJTdG9yYWdlKDM2MTYxLHl0LEwud2lkdGgsTC5oZWlnaHQpO24uZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoMzYxNjAsMzYwOTYsMzYxNjEsWSl9ZWxzZSBpZihMLmRlcHRoQnVmZmVyJiZMLnN0ZW5jaWxCdWZmZXIpe2xldCB5dD1fdChMKTtIZSYmTC51c2VSZW5kZXJidWZmZXI/bi5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEseXQsMzUwNTYsTC53aWR0aCxMLmhlaWdodCk6TC51c2VSZW5kZXJUb1RleHR1cmU/aC5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoMzYxNjEseXQsMzUwNTYsTC53aWR0aCxMLmhlaWdodCk6bi5yZW5kZXJidWZmZXJTdG9yYWdlKDM2MTYxLDM0MDQxLEwud2lkdGgsTC5oZWlnaHQpLG4uZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoMzYxNjAsMzMzMDYsMzYxNjEsWSl9ZWxzZXtsZXQgeXQ9ITA9PT1MLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHM/TC50ZXh0dXJlWzBdOkwudGV4dHVyZSxlbj1vLmNvbnZlcnQoeXQuZm9ybWF0LHl0LmVuY29kaW5nKSxMZT1vLmNvbnZlcnQoeXQudHlwZSksaG49USh5dC5pbnRlcm5hbEZvcm1hdCxlbixMZSx5dC5lbmNvZGluZyksbG49X3QoTCk7SGUmJkwudXNlUmVuZGVyYnVmZmVyP24ucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLGxuLGhuLEwud2lkdGgsTC5oZWlnaHQpOkwudXNlUmVuZGVyVG9UZXh0dXJlP2gucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKDM2MTYxLGxuLGhuLEwud2lkdGgsTC5oZWlnaHQpOm4ucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSxobixMLndpZHRoLEwuaGVpZ2h0KX1uLmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsbnVsbCl9ZnVuY3Rpb24gbXQoWSl7bGV0IEw9aS5nZXQoWSksSGU9ITA9PT1ZLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0O2lmKFkuZGVwdGhUZXh0dXJlJiYhTC5fX2F1dG9BbGxvY2F0ZURlcHRoQnVmZmVyKXtpZihIZSl0aHJvdyBuZXcgRXJyb3IoInRhcmdldC5kZXB0aFRleHR1cmUgbm90IHN1cHBvcnRlZCBpbiBDdWJlIHJlbmRlciB0YXJnZXRzIik7IWZ1bmN0aW9uKFksTCl7aWYoTCYmTC5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCl0aHJvdyBuZXcgRXJyb3IoIkRlcHRoIFRleHR1cmUgd2l0aCBjdWJlIHJlbmRlciB0YXJnZXRzIGlzIG5vdCBzdXBwb3J0ZWQiKTtpZihlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxZKSwhTC5kZXB0aFRleHR1cmV8fCFMLmRlcHRoVGV4dHVyZS5pc0RlcHRoVGV4dHVyZSl0aHJvdyBuZXcgRXJyb3IoInJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBUSFJFRS5EZXB0aFRleHR1cmUiKTsoIWkuZ2V0KEwuZGVwdGhUZXh0dXJlKS5fX3dlYmdsVGV4dHVyZXx8TC5kZXB0aFRleHR1cmUuaW1hZ2Uud2lkdGghPT1MLndpZHRofHxMLmRlcHRoVGV4dHVyZS5pbWFnZS5oZWlnaHQhPT1MLmhlaWdodCkmJihMLmRlcHRoVGV4dHVyZS5pbWFnZS53aWR0aD1MLndpZHRoLEwuZGVwdGhUZXh0dXJlLmltYWdlLmhlaWdodD1MLmhlaWdodCxMLmRlcHRoVGV4dHVyZS5uZWVkc1VwZGF0ZT0hMCksZGUoTC5kZXB0aFRleHR1cmUsMCk7bGV0IHl0PWkuZ2V0KEwuZGVwdGhUZXh0dXJlKS5fX3dlYmdsVGV4dHVyZSxlbj1fdChMKTtpZihMLmRlcHRoVGV4dHVyZS5mb3JtYXQ9PT1ibSlMLnVzZVJlbmRlclRvVGV4dHVyZT9oLmZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVFWFQoMzYxNjAsMzYwOTYsMzU1Myx5dCwwLGVuKTpuLmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDM2MDk2LDM1NTMseXQsMCk7ZWxzZXtpZihMLmRlcHRoVGV4dHVyZS5mb3JtYXQhPT1LMCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gZGVwdGhUZXh0dXJlIGZvcm1hdCIpO0wudXNlUmVuZGVyVG9UZXh0dXJlP2guZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUVYVCgzNjE2MCwzMzMwNiwzNTUzLHl0LDAsZW4pOm4uZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzMzMDYsMzU1Myx5dCwwKX19KEwuX193ZWJnbEZyYW1lYnVmZmVyLFkpfWVsc2UgaWYoSGUpe0wuX193ZWJnbERlcHRoYnVmZmVyPVtdO2ZvcihsZXQgeXQ9MDt5dDw2O3l0KyspZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsTC5fX3dlYmdsRnJhbWVidWZmZXJbeXRdKSxMLl9fd2ViZ2xEZXB0aGJ1ZmZlclt5dF09bi5jcmVhdGVSZW5kZXJidWZmZXIoKSxvbihMLl9fd2ViZ2xEZXB0aGJ1ZmZlclt5dF0sWSwhMSl9ZWxzZSBlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxMLl9fd2ViZ2xGcmFtZWJ1ZmZlciksTC5fX3dlYmdsRGVwdGhidWZmZXI9bi5jcmVhdGVSZW5kZXJidWZmZXIoKSxvbihMLl9fd2ViZ2xEZXB0aGJ1ZmZlcixZLCExKTtlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKX1mdW5jdGlvbiBfdChZKXtyZXR1cm4gcyYmKFkudXNlUmVuZGVyYnVmZmVyfHxZLnVzZVJlbmRlclRvVGV4dHVyZSk/TWF0aC5taW4odSxZLnNhbXBsZXMpOjB9ZnVuY3Rpb24gYW4oWSxMKXtsZXQgSGU9WS5lbmNvZGluZyx5dD1ZLmZvcm1hdCxlbj1ZLnR5cGU7cmV0dXJuITA9PT1ZLmlzQ29tcHJlc3NlZFRleHR1cmV8fCEwPT09WS5pc1ZpZGVvVGV4dHVyZXx8WS5mb3JtYXQ9PT1KM3x8SGUhPT13cCYmKEhlPT09RHI/ITE9PT1zPyEwPT09dC5oYXMoIkVYVF9zUkdCIikmJnl0PT09Q2E/KFkuZm9ybWF0PUozLFkubWluRmlsdGVyPWlhLFkuZ2VuZXJhdGVNaXBtYXBzPSExKTpMPVVkLnNSR0JUb0xpbmVhcihMKTooeXQhPT1DYXx8ZW4hPT14cCkmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlczogc1JHQiBlbmNvZGVkIHRleHR1cmVzIGhhdmUgdG8gdXNlIFJHQkFGb3JtYXQgYW5kIFVuc2lnbmVkQnl0ZVR5cGUuIik6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xUZXh0dXJlczogVW5zdXBwb3J0ZWQgdGV4dHVyZSBlbmNvZGluZzoiLEhlKSksTH1sZXQgeW49ITEsc2k9ITE7dGhpcy5hbGxvY2F0ZVRleHR1cmVVbml0PWZ1bmN0aW9uKCl7bGV0IFk9aGU7cmV0dXJuIFk+PWwmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlczogVHJ5aW5nIHRvIHVzZSAiK1krIiB0ZXh0dXJlIHVuaXRzIHdoaWxlIHRoaXMgR1BVIHN1cHBvcnRzIG9ubHkgIitsKSxoZSs9MSxZfSx0aGlzLnJlc2V0VGV4dHVyZVVuaXRzPWZ1bmN0aW9uKCl7aGU9MH0sdGhpcy5zZXRUZXh0dXJlMkQ9ZGUsdGhpcy5zZXRUZXh0dXJlMkRBcnJheT1mdW5jdGlvbihZLEwpe2xldCBIZT1pLmdldChZKTtZLnZlcnNpb24+MCYmSGUuX192ZXJzaW9uIT09WS52ZXJzaW9uP2tlKEhlLFksTCk6KGUuYWN0aXZlVGV4dHVyZSgzMzk4NCtMKSxlLmJpbmRUZXh0dXJlKDM1ODY2LEhlLl9fd2ViZ2xUZXh0dXJlKSl9LHRoaXMuc2V0VGV4dHVyZTNEPWZ1bmN0aW9uKFksTCl7bGV0IEhlPWkuZ2V0KFkpO1kudmVyc2lvbj4wJiZIZS5fX3ZlcnNpb24hPT1ZLnZlcnNpb24/a2UoSGUsWSxMKTooZS5hY3RpdmVUZXh0dXJlKDMzOTg0K0wpLGUuYmluZFRleHR1cmUoMzI4NzksSGUuX193ZWJnbFRleHR1cmUpKX0sdGhpcy5zZXRUZXh0dXJlQ3ViZT1TZSx0aGlzLnJlYmluZFRleHR1cmVzPWZ1bmN0aW9uKFksTCxIZSl7bGV0IHl0PWkuZ2V0KFkpO3ZvaWQgMCE9PUwmJnd0KHl0Ll9fd2ViZ2xGcmFtZWJ1ZmZlcixZLFkudGV4dHVyZSwzNjA2NCwzNTUzKSx2b2lkIDAhPT1IZSYmbXQoWSl9LHRoaXMuc2V0dXBSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oWSl7bGV0IEw9WS50ZXh0dXJlLEhlPWkuZ2V0KFkpLHl0PWkuZ2V0KEwpO1kuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsRCksITAhPT1ZLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMmJih2b2lkIDA9PT15dC5fX3dlYmdsVGV4dHVyZSYmKHl0Ll9fd2ViZ2xUZXh0dXJlPW4uY3JlYXRlVGV4dHVyZSgpKSx5dC5fX3ZlcnNpb249TC52ZXJzaW9uLGEubWVtb3J5LnRleHR1cmVzKyspO2xldCBlbj0hMD09PVkuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQsTGU9ITA9PT1ZLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMsaG49TC5pc0RhdGFUZXh0dXJlM0R8fEwuaXNEYXRhVGV4dHVyZTJEQXJyYXksbG49UihZKXx8cztpZihlbil7SGUuX193ZWJnbEZyYW1lYnVmZmVyPVtdO2ZvcihsZXQgRnQ9MDtGdDw2O0Z0KyspSGUuX193ZWJnbEZyYW1lYnVmZmVyW0Z0XT1uLmNyZWF0ZUZyYW1lYnVmZmVyKCl9ZWxzZSBpZihIZS5fX3dlYmdsRnJhbWVidWZmZXI9bi5jcmVhdGVGcmFtZWJ1ZmZlcigpLExlKWlmKHIuZHJhd0J1ZmZlcnMpe2xldCBGdD1ZLnRleHR1cmU7Zm9yKGxldCBPdD0wLE5uPUZ0Lmxlbmd0aDtPdDxObjtPdCsrKXtsZXQgc2U9aS5nZXQoRnRbT3RdKTt2b2lkIDA9PT1zZS5fX3dlYmdsVGV4dHVyZSYmKHNlLl9fd2ViZ2xUZXh0dXJlPW4uY3JlYXRlVGV4dHVyZSgpLGEubWVtb3J5LnRleHR1cmVzKyspfX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMiBvciBXRUJHTF9kcmF3X2J1ZmZlcnMgZXh0ZW5zaW9uLiIpO2Vsc2UgaWYoWS51c2VSZW5kZXJidWZmZXIpaWYocyl7SGUuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyPW4uY3JlYXRlRnJhbWVidWZmZXIoKSxIZS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXI9bi5jcmVhdGVSZW5kZXJidWZmZXIoKSxuLmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsSGUuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyKTtsZXQgRnQ9by5jb252ZXJ0KEwuZm9ybWF0LEwuZW5jb2RpbmcpLE90PW8uY29udmVydChMLnR5cGUpLE5uPVEoTC5pbnRlcm5hbEZvcm1hdCxGdCxPdCxMLmVuY29kaW5nKSxzZT1fdChZKTtuLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSgzNjE2MSxzZSxObixZLndpZHRoLFkuaGVpZ2h0KSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxIZS5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpLG4uZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoMzYxNjAsMzYwNjQsMzYxNjEsSGUuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyKSxuLmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsbnVsbCksWS5kZXB0aEJ1ZmZlciYmKEhlLl9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlcj1uLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLG9uKEhlLl9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlcixZLCEwKSksZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFdlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMi4iKTtpZihlbil7ZS5iaW5kVGV4dHVyZSgzNDA2Nyx5dC5fX3dlYmdsVGV4dHVyZSksTXQoMzQwNjcsTCxsbik7Zm9yKGxldCBGdD0wO0Z0PDY7RnQrKyl3dChIZS5fX3dlYmdsRnJhbWVidWZmZXJbRnRdLFksTCwzNjA2NCwzNDA2OStGdCk7QihMLGxuKSYmZWUoMzQwNjcpLGUudW5iaW5kVGV4dHVyZSgpfWVsc2UgaWYoTGUpe2xldCBGdD1ZLnRleHR1cmU7Zm9yKGxldCBPdD0wLE5uPUZ0Lmxlbmd0aDtPdDxObjtPdCsrKXtsZXQgc2U9RnRbT3RdLEp0PWkuZ2V0KHNlKTtlLmJpbmRUZXh0dXJlKDM1NTMsSnQuX193ZWJnbFRleHR1cmUpLE10KDM1NTMsc2UsbG4pLHd0KEhlLl9fd2ViZ2xGcmFtZWJ1ZmZlcixZLHNlLDM2MDY0K090LDM1NTMpLEIoc2UsbG4pJiZlZSgzNTUzKX1lLnVuYmluZFRleHR1cmUoKX1lbHNle2xldCBGdD0zNTUzO2huJiYocz9GdD1MLmlzRGF0YVRleHR1cmUzRD8zMjg3OTozNTg2Njpjb25zb2xlLndhcm4oIlRIUkVFLkRhdGFUZXh0dXJlM0QgYW5kIFRIUkVFLkRhdGFUZXh0dXJlMkRBcnJheSBvbmx5IHN1cHBvcnRlZCB3aXRoIFdlYkdMMi4iKSksZS5iaW5kVGV4dHVyZShGdCx5dC5fX3dlYmdsVGV4dHVyZSksTXQoRnQsTCxsbiksd3QoSGUuX193ZWJnbEZyYW1lYnVmZmVyLFksTCwzNjA2NCxGdCksQihMLGxuKSYmZWUoRnQpLGUudW5iaW5kVGV4dHVyZSgpfVkuZGVwdGhCdWZmZXImJm10KFkpfSx0aGlzLnVwZGF0ZVJlbmRlclRhcmdldE1pcG1hcD1mdW5jdGlvbihZKXtsZXQgTD1SKFkpfHxzLEhlPSEwPT09WS5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzP1kudGV4dHVyZTpbWS50ZXh0dXJlXTtmb3IobGV0IHl0PTAsZW49SGUubGVuZ3RoO3l0PGVuO3l0Kyspe2xldCBMZT1IZVt5dF07aWYoQihMZSxMKSl7bGV0IGhuPVkuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ/MzQwNjc6MzU1Myxsbj1pLmdldChMZSkuX193ZWJnbFRleHR1cmU7ZS5iaW5kVGV4dHVyZShobixsbiksZWUoaG4pLGUudW5iaW5kVGV4dHVyZSgpfX19LHRoaXMudXBkYXRlTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oWSl7aWYoWS51c2VSZW5kZXJidWZmZXIpaWYocyl7bGV0IEw9WS53aWR0aCxIZT1ZLmhlaWdodCx5dD0xNjM4NCxlbj1bMzYwNjRdLExlPVkuc3RlbmNpbEJ1ZmZlcj8zMzMwNjozNjA5NjtZLmRlcHRoQnVmZmVyJiZlbi5wdXNoKExlKSxZLmlnbm9yZURlcHRoRm9yTXVsdGlzYW1wbGVDb3B5fHwoWS5kZXB0aEJ1ZmZlciYmKHl0fD0yNTYpLFkuc3RlbmNpbEJ1ZmZlciYmKHl0fD0xMDI0KSk7bGV0IGhuPWkuZ2V0KFkpO2UuYmluZEZyYW1lYnVmZmVyKDM2MDA4LGhuLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciksZS5iaW5kRnJhbWVidWZmZXIoMzYwMDksaG4uX193ZWJnbEZyYW1lYnVmZmVyKSxZLmlnbm9yZURlcHRoRm9yTXVsdGlzYW1wbGVDb3B5JiYobi5pbnZhbGlkYXRlRnJhbWVidWZmZXIoMzYwMDgsW0xlXSksbi5pbnZhbGlkYXRlRnJhbWVidWZmZXIoMzYwMDksW0xlXSkpLG4uYmxpdEZyYW1lYnVmZmVyKDAsMCxMLEhlLDAsMCxMLEhlLHl0LDk3MjgpLG4uaW52YWxpZGF0ZUZyYW1lYnVmZmVyKDM2MDA4LGVuKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOCxudWxsKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSxobi5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIil9LHRoaXMuc2V0dXBEZXB0aFJlbmRlcmJ1ZmZlcj1tdCx0aGlzLnNldHVwRnJhbWVCdWZmZXJUZXh0dXJlPXd0LHRoaXMuc2FmZVNldFRleHR1cmUyRD1mdW5jdGlvbihZLEwpe1kmJlkuaXNXZWJHTFJlbmRlclRhcmdldCYmKCExPT09eW4mJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXMuc2FmZVNldFRleHR1cmUyRDogZG9uJ3QgdXNlIHJlbmRlciB0YXJnZXRzIGFzIHRleHR1cmVzLiBVc2UgdGhlaXIgLnRleHR1cmUgcHJvcGVydHkgaW5zdGVhZC4iKSx5bj0hMCksWT1ZLnRleHR1cmUpLGRlKFksTCl9LHRoaXMuc2FmZVNldFRleHR1cmVDdWJlPWZ1bmN0aW9uKFksTCl7WSYmWS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCYmKCExPT09c2kmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXMuc2FmZVNldFRleHR1cmVDdWJlOiBkb24ndCB1c2UgY3ViZSByZW5kZXIgdGFyZ2V0cyBhcyB0ZXh0dXJlcy4gVXNlIHRoZWlyIC50ZXh0dXJlIHByb3BlcnR5IGluc3RlYWQuIiksc2k9ITApLFk9WS50ZXh0dXJlKSxTZShZLEwpfX1mdW5jdGlvbiBFMmUobix0LGUpe2xldCBpPWUuaXNXZWJHTDI7cmV0dXJue2NvbnZlcnQ6ZnVuY3Rpb24obyxhPW51bGwpe2xldCBzO2lmKG89PT14cClyZXR1cm4gNTEyMTtpZihvPT09UFJlKXJldHVybiAzMjgxOTtpZihvPT09a1JlKXJldHVybiAzMjgyMDtpZihvPT09SVJlKXJldHVybiA1MTIwO2lmKG89PT1BUmUpcmV0dXJuIDUxMjI7aWYobz09PXh4KXJldHVybiA1MTIzO2lmKG89PT1SUmUpcmV0dXJuIDUxMjQ7aWYobz09PXhJKXJldHVybiA1MTI1O2lmKG89PT1nbSlyZXR1cm4gNTEyNjtpZihvPT09cTApcmV0dXJuIGk/NTEzMToocz10LmdldCgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpLG51bGwhPT1zP3MuSEFMRl9GTE9BVF9PRVM6bnVsbCk7aWYobz09PU9SZSlyZXR1cm4gNjQwNjtpZihvPT09Q2EpcmV0dXJuIDY0MDg7aWYobz09PUZSZSlyZXR1cm4gNjQwOTtpZihvPT09TlJlKXJldHVybiA2NDEwO2lmKG89PT1ibSlyZXR1cm4gNjQwMjtpZihvPT09SzApcmV0dXJuIDM0MDQxO2lmKG89PT1MUmUpcmV0dXJuIDY0MDM7aWYobz09PUozKXJldHVybiBzPXQuZ2V0KCJFWFRfc1JHQiIpLG51bGwhPT1zP3MuU1JHQl9BTFBIQV9FWFQ6bnVsbDtpZihvPT09QlJlKXJldHVybiAzNjI0NDtpZihvPT09VlJlKXJldHVybiAzMzMxOTtpZihvPT09SFJlKXJldHVybiAzMzMyMDtpZihvPT09elJlKXJldHVybiAzNjI0OTtpZihvPT09bDN8fG89PT1jM3x8bz09PWQzfHxvPT09dTMpaWYoYT09PURyKXtpZihzPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0Y19zcmdiIiksbnVsbD09PXMpcmV0dXJuIG51bGw7aWYobz09PWwzKXJldHVybiBzLkNPTVBSRVNTRURfU1JHQl9TM1RDX0RYVDFfRVhUO2lmKG89PT1jMylyZXR1cm4gcy5DT01QUkVTU0VEX1NSR0JfQUxQSEFfUzNUQ19EWFQxX0VYVDtpZihvPT09ZDMpcmV0dXJuIHMuQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUM19FWFQ7aWYobz09PXUzKXJldHVybiBzLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9TM1RDX0RYVDVfRVhUfWVsc2V7aWYocz10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKSxudWxsPT09cylyZXR1cm4gbnVsbDtpZihvPT09bDMpcmV0dXJuIHMuQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDtpZihvPT09YzMpcmV0dXJuIHMuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ7aWYobz09PWQzKXJldHVybiBzLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUO2lmKG89PT11MylyZXR1cm4gcy5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVH1pZihvPT09ayR8fG89PT1PJHx8bz09PUYkfHxvPT09TiQpe2lmKHM9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpLG51bGw9PT1zKXJldHVybiBudWxsO2lmKG89PT1rJClyZXR1cm4gcy5DT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HO2lmKG89PT1PJClyZXR1cm4gcy5DT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HO2lmKG89PT1GJClyZXR1cm4gcy5DT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lNRztpZihvPT09TiQpcmV0dXJuIHMuQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUd9aWYobz09PVVSZSlyZXR1cm4gcz10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YzEiKSxudWxsIT09cz9zLkNPTVBSRVNTRURfUkdCX0VUQzFfV0VCR0w6bnVsbDtpZihvPT09TCR8fG89PT1CJCl7aWYocz10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YyIpLG51bGw9PT1zKXJldHVybiBudWxsO2lmKG89PT1MJClyZXR1cm4gYT09PURyP3MuQ09NUFJFU1NFRF9TUkdCOF9FVEMyOnMuQ09NUFJFU1NFRF9SR0I4X0VUQzI7aWYobz09PUIkKXJldHVybiBhPT09RHI/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VBQzpzLkNPTVBSRVNTRURfUkdCQThfRVRDMl9FQUN9aWYobz09PVYkfHxvPT09SCR8fG89PT16JHx8bz09PVUkfHxvPT09aiR8fG89PT1HJHx8bz09PVckfHxvPT09cSR8fG89PT1YJHx8bz09PVkkfHxvPT09USR8fG89PT1aJHx8bz09PUskfHxvPT09SiQpe2lmKHM9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9hc3RjIiksbnVsbD09PXMpcmV0dXJuIG51bGw7aWYobz09PVYkKXJldHVybiBhPT09RHI/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzR4NF9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ180eDRfS0hSO2lmKG89PT1IJClyZXR1cm4gYT09PURyP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDRfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfNXg0X0tIUjtpZihvPT09eiQpcmV0dXJuIGE9PT1Ecj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNXg1X0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzV4NV9LSFI7aWYobz09PVUkKXJldHVybiBhPT09RHI/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzZ4NV9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ182eDVfS0hSO2lmKG89PT1qJClyZXR1cm4gYT09PURyP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDZfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfNng2X0tIUjtpZihvPT09RyQpcmV0dXJuIGE9PT1Ecj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg1X0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4NV9LSFI7aWYobz09PVckKXJldHVybiBhPT09RHI/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4Nl9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ184eDZfS0hSO2lmKG89PT1xJClyZXR1cm4gYT09PURyP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDhfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg4X0tIUjtpZihvPT09WCQpcmV0dXJuIGE9PT1Ecj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4NV9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg1X0tIUjtpZihvPT09WSQpcmV0dXJuIGE9PT1Ecj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4Nl9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg2X0tIUjtpZihvPT09USQpcmV0dXJuIGE9PT1Ecj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4OF9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg4X0tIUjtpZihvPT09WiQpcmV0dXJuIGE9PT1Ecj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4MTBfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4MTBfS0hSO2lmKG89PT1LJClyZXR1cm4gYT09PURyP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMngxMF9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMngxMF9LSFI7aWYobz09PUokKXJldHVybiBhPT09RHI/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEyX0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEyX0tIUn1pZihvPT09JCQpe2lmKHM9dC5nZXQoIkVYVF90ZXh0dXJlX2NvbXByZXNzaW9uX2JwdGMiKSxudWxsPT09cylyZXR1cm4gbnVsbDtpZihvPT09JCQpcmV0dXJuIGE9PT1Ecj9zLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9CUFRDX1VOT1JNX0VYVDpzLkNPTVBSRVNTRURfUkdCQV9CUFRDX1VOT1JNX0VYVH1yZXR1cm4gbz09PVgwP2k/MzQwNDI6KHM9dC5nZXQoIldFQkdMX2RlcHRoX3RleHR1cmUiKSxudWxsIT09cz9zLlVOU0lHTkVEX0lOVF8yNF84X1dFQkdMOm51bGwpOnZvaWQgMH19fXZhciBPST1jbGFzcyBleHRlbmRzIHJhe2NvbnN0cnVjdG9yKHQ9W10pe3N1cGVyKCksdGhpcy5jYW1lcmFzPXR9fTtPSS5wcm90b3R5cGUuaXNBcnJheUNhbWVyYT0hMDt2YXIgX209Y2xhc3MgZXh0ZW5kcyBVaXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJHcm91cCJ9fTtfbS5wcm90b3R5cGUuaXNHcm91cD0hMDt2YXIgVDJlPXt0eXBlOiJtb3ZlIn0sX3g9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl90YXJnZXRSYXk9bnVsbCx0aGlzLl9ncmlwPW51bGwsdGhpcy5faGFuZD1udWxsfWdldEhhbmRTcGFjZSgpe3JldHVybiBudWxsPT09dGhpcy5faGFuZCYmKHRoaXMuX2hhbmQ9bmV3IF9tLHRoaXMuX2hhbmQubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLl9oYW5kLnZpc2libGU9ITEsdGhpcy5faGFuZC5qb2ludHM9e30sdGhpcy5faGFuZC5pbnB1dFN0YXRlPXtwaW5jaGluZzohMX0pLHRoaXMuX2hhbmR9Z2V0VGFyZ2V0UmF5U3BhY2UoKXtyZXR1cm4gbnVsbD09PXRoaXMuX3RhcmdldFJheSYmKHRoaXMuX3RhcmdldFJheT1uZXcgX20sdGhpcy5fdGFyZ2V0UmF5Lm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5fdGFyZ2V0UmF5LnZpc2libGU9ITEsdGhpcy5fdGFyZ2V0UmF5Lmhhc0xpbmVhclZlbG9jaXR5PSExLHRoaXMuX3RhcmdldFJheS5saW5lYXJWZWxvY2l0eT1uZXcgSyx0aGlzLl90YXJnZXRSYXkuaGFzQW5ndWxhclZlbG9jaXR5PSExLHRoaXMuX3RhcmdldFJheS5hbmd1bGFyVmVsb2NpdHk9bmV3IEspLHRoaXMuX3RhcmdldFJheX1nZXRHcmlwU3BhY2UoKXtyZXR1cm4gbnVsbD09PXRoaXMuX2dyaXAmJih0aGlzLl9ncmlwPW5ldyBfbSx0aGlzLl9ncmlwLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5fZ3JpcC52aXNpYmxlPSExLHRoaXMuX2dyaXAuaGFzTGluZWFyVmVsb2NpdHk9ITEsdGhpcy5fZ3JpcC5saW5lYXJWZWxvY2l0eT1uZXcgSyx0aGlzLl9ncmlwLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMSx0aGlzLl9ncmlwLmFuZ3VsYXJWZWxvY2l0eT1uZXcgSyksdGhpcy5fZ3JpcH1kaXNwYXRjaEV2ZW50KHQpe3JldHVybiBudWxsIT09dGhpcy5fdGFyZ2V0UmF5JiZ0aGlzLl90YXJnZXRSYXkuZGlzcGF0Y2hFdmVudCh0KSxudWxsIT09dGhpcy5fZ3JpcCYmdGhpcy5fZ3JpcC5kaXNwYXRjaEV2ZW50KHQpLG51bGwhPT10aGlzLl9oYW5kJiZ0aGlzLl9oYW5kLmRpc3BhdGNoRXZlbnQodCksdGhpc31kaXNjb25uZWN0KHQpe3JldHVybiB0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc2Nvbm5lY3RlZCIsZGF0YTp0fSksbnVsbCE9PXRoaXMuX3RhcmdldFJheSYmKHRoaXMuX3RhcmdldFJheS52aXNpYmxlPSExKSxudWxsIT09dGhpcy5fZ3JpcCYmKHRoaXMuX2dyaXAudmlzaWJsZT0hMSksbnVsbCE9PXRoaXMuX2hhbmQmJih0aGlzLl9oYW5kLnZpc2libGU9ITEpLHRoaXN9dXBkYXRlKHQsZSxpKXtsZXQgcj1udWxsLG89bnVsbCxhPW51bGwscz10aGlzLl90YXJnZXRSYXksbD10aGlzLl9ncmlwLGM9dGhpcy5faGFuZDtpZih0JiYidmlzaWJsZS1ibHVycmVkIiE9PWUuc2Vzc2lvbi52aXNpYmlsaXR5U3RhdGUpaWYobnVsbCE9PXMmJihyPWUuZ2V0UG9zZSh0LnRhcmdldFJheVNwYWNlLGkpLG51bGwhPT1yJiYocy5tYXRyaXguZnJvbUFycmF5KHIudHJhbnNmb3JtLm1hdHJpeCkscy5tYXRyaXguZGVjb21wb3NlKHMucG9zaXRpb24scy5yb3RhdGlvbixzLnNjYWxlKSxyLmxpbmVhclZlbG9jaXR5PyhzLmhhc0xpbmVhclZlbG9jaXR5PSEwLHMubGluZWFyVmVsb2NpdHkuY29weShyLmxpbmVhclZlbG9jaXR5KSk6cy5oYXNMaW5lYXJWZWxvY2l0eT0hMSxyLmFuZ3VsYXJWZWxvY2l0eT8ocy5oYXNBbmd1bGFyVmVsb2NpdHk9ITAscy5hbmd1bGFyVmVsb2NpdHkuY29weShyLmFuZ3VsYXJWZWxvY2l0eSkpOnMuaGFzQW5ndWxhclZlbG9jaXR5PSExLHRoaXMuZGlzcGF0Y2hFdmVudChUMmUpKSksYyYmdC5oYW5kKXthPSEwO2ZvcihsZXQgXyBvZiB0LmhhbmQudmFsdWVzKCkpe2xldCBNPWUuZ2V0Sm9pbnRQb3NlKF8saSk7aWYodm9pZCAwPT09Yy5qb2ludHNbXy5qb2ludE5hbWVdKXtsZXQgeD1uZXcgX207eC5tYXRyaXhBdXRvVXBkYXRlPSExLHgudmlzaWJsZT0hMSxjLmpvaW50c1tfLmpvaW50TmFtZV09eCxjLmFkZCh4KX1sZXQgeT1jLmpvaW50c1tfLmpvaW50TmFtZV07bnVsbCE9PU0mJih5Lm1hdHJpeC5mcm9tQXJyYXkoTS50cmFuc2Zvcm0ubWF0cml4KSx5Lm1hdHJpeC5kZWNvbXBvc2UoeS5wb3NpdGlvbix5LnJvdGF0aW9uLHkuc2NhbGUpLHkuam9pbnRSYWRpdXM9TS5yYWRpdXMpLHkudmlzaWJsZT1udWxsIT09TX1sZXQgcD1jLmpvaW50c1siaW5kZXgtZmluZ2VyLXRpcCJdLnBvc2l0aW9uLmRpc3RhbmNlVG8oYy5qb2ludHNbInRodW1iLXRpcCJdLnBvc2l0aW9uKSxoPS4wMixtPS4wMDU7Yy5pbnB1dFN0YXRlLnBpbmNoaW5nJiZwPmgrbT8oYy5pbnB1dFN0YXRlLnBpbmNoaW5nPSExLHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToicGluY2hlbmQiLGhhbmRlZG5lc3M6dC5oYW5kZWRuZXNzLHRhcmdldDp0aGlzfSkpOiFjLmlucHV0U3RhdGUucGluY2hpbmcmJnA8PWgtbSYmKGMuaW5wdXRTdGF0ZS5waW5jaGluZz0hMCx0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6InBpbmNoc3RhcnQiLGhhbmRlZG5lc3M6dC5oYW5kZWRuZXNzLHRhcmdldDp0aGlzfSkpfWVsc2UgbnVsbCE9PWwmJnQuZ3JpcFNwYWNlJiYobz1lLmdldFBvc2UodC5ncmlwU3BhY2UsaSksbnVsbCE9PW8mJihsLm1hdHJpeC5mcm9tQXJyYXkoby50cmFuc2Zvcm0ubWF0cml4KSxsLm1hdHJpeC5kZWNvbXBvc2UobC5wb3NpdGlvbixsLnJvdGF0aW9uLGwuc2NhbGUpLG8ubGluZWFyVmVsb2NpdHk/KGwuaGFzTGluZWFyVmVsb2NpdHk9ITAsbC5saW5lYXJWZWxvY2l0eS5jb3B5KG8ubGluZWFyVmVsb2NpdHkpKTpsLmhhc0xpbmVhclZlbG9jaXR5PSExLG8uYW5ndWxhclZlbG9jaXR5PyhsLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMCxsLmFuZ3VsYXJWZWxvY2l0eS5jb3B5KG8uYW5ndWxhclZlbG9jaXR5KSk6bC5oYXNBbmd1bGFyVmVsb2NpdHk9ITEpKTtyZXR1cm4gbnVsbCE9PXMmJihzLnZpc2libGU9bnVsbCE9PXIpLG51bGwhPT1sJiYobC52aXNpYmxlPW51bGwhPT1vKSxudWxsIT09YyYmKGMudmlzaWJsZT1udWxsIT09YSksdGhpc319LEl4PWNsYXNzIGV4dGVuZHMgbG97Y29uc3RydWN0b3IodCxlLGkscixvLGEscyxsLGMsZCl7aWYoKGQ9dm9pZCAwIT09ZD9kOmJtKSE9PWJtJiZkIT09SzApdGhyb3cgbmV3IEVycm9yKCJEZXB0aFRleHR1cmUgZm9ybWF0IG11c3QgYmUgZWl0aGVyIFRIUkVFLkRlcHRoRm9ybWF0IG9yIFRIUkVFLkRlcHRoU3RlbmNpbEZvcm1hdCIpO3ZvaWQgMD09PWkmJmQ9PT1ibSYmKGk9eHgpLHZvaWQgMD09PWkmJmQ9PT1LMCYmKGk9WDApLHN1cGVyKG51bGwscixvLGEscyxsLGQsaSxjKSx0aGlzLmltYWdlPXt3aWR0aDp0LGhlaWdodDplfSx0aGlzLm1hZ0ZpbHRlcj12b2lkIDAhPT1zP3M6dm8sdGhpcy5taW5GaWx0ZXI9dm9pZCAwIT09bD9sOnZvLHRoaXMuZmxpcFk9ITEsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITF9fTtJeC5wcm90b3R5cGUuaXNEZXB0aFRleHR1cmU9ITA7dmFyIG9CPWNsYXNzIGV4dGVuZHMgemR7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpO2xldCBpPXRoaXMscj1udWxsLG89MSxhPW51bGwscz0ibG9jYWwtZmxvb3IiLGw9dC5leHRlbnNpb25zLmhhcygiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIiksYz1udWxsLGQ9bnVsbCx1PW51bGwscD1udWxsLGg9ITEsbT1udWxsLF89ZS5nZXRDb250ZXh0QXR0cmlidXRlcygpLE09bnVsbCx5PW51bGwseD1bXSxSPW5ldyBNYXAsST1uZXcgcmE7SS5sYXllcnMuZW5hYmxlKDEpLEkudmlld3BvcnQ9bmV3IFFpO2xldCBCPW5ldyByYTtCLmxheWVycy5lbmFibGUoMiksQi52aWV3cG9ydD1uZXcgUWk7bGV0IGVlPVtJLEJdLFE9bmV3IE9JO1EubGF5ZXJzLmVuYWJsZSgxKSxRLmxheWVycy5lbmFibGUoMik7bGV0IHdlPW51bGwsUWU9bnVsbDtmdW5jdGlvbiBBZShTZSl7bGV0IEZlPVIuZ2V0KFNlLmlucHV0U291cmNlKTtGZSYmRmUuZGlzcGF0Y2hFdmVudCh7dHlwZTpTZS50eXBlLGRhdGE6U2UuaW5wdXRTb3VyY2V9KX1mdW5jdGlvbiBEKCl7Ui5mb3JFYWNoKGZ1bmN0aW9uKFNlLEZlKXtTZS5kaXNjb25uZWN0KEZlKX0pLFIuY2xlYXIoKSx3ZT1udWxsLFFlPW51bGwsdC5zZXRSZW5kZXJUYXJnZXQoTSkscD1udWxsLHU9bnVsbCxkPW51bGwscj1udWxsLHk9bnVsbCxHZS5zdG9wKCksaS5pc1ByZXNlbnRpbmc9ITEsaS5kaXNwYXRjaEV2ZW50KHt0eXBlOiJzZXNzaW9uZW5kIn0pfWZ1bmN0aW9uIHJlKFNlKXtsZXQgRmU9ci5pbnB1dFNvdXJjZXM7Zm9yKGxldCBsdD0wO2x0PHgubGVuZ3RoO2x0KyspUi5zZXQoRmVbbHRdLHhbbHRdKTtmb3IobGV0IGx0PTA7bHQ8U2UucmVtb3ZlZC5sZW5ndGg7bHQrKyl7bGV0IE10PVNlLnJlbW92ZWRbbHRdLHB0PVIuZ2V0KE10KTtwdCYmKHB0LmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc2Nvbm5lY3RlZCIsZGF0YTpNdH0pLFIuZGVsZXRlKE10KSl9Zm9yKGxldCBsdD0wO2x0PFNlLmFkZGVkLmxlbmd0aDtsdCsrKXtsZXQgTXQ9U2UuYWRkZWRbbHRdLHB0PVIuZ2V0KE10KTtwdCYmcHQuZGlzcGF0Y2hFdmVudCh7dHlwZToiY29ubmVjdGVkIixkYXRhOk10fSl9fXRoaXMuY2FtZXJhQXV0b1VwZGF0ZT0hMCx0aGlzLmVuYWJsZWQ9ITEsdGhpcy5pc1ByZXNlbnRpbmc9ITEsdGhpcy5nZXRDb250cm9sbGVyPWZ1bmN0aW9uKFNlKXtsZXQgRmU9eFtTZV07cmV0dXJuIHZvaWQgMD09PUZlJiYoRmU9bmV3IF94LHhbU2VdPUZlKSxGZS5nZXRUYXJnZXRSYXlTcGFjZSgpfSx0aGlzLmdldENvbnRyb2xsZXJHcmlwPWZ1bmN0aW9uKFNlKXtsZXQgRmU9eFtTZV07cmV0dXJuIHZvaWQgMD09PUZlJiYoRmU9bmV3IF94LHhbU2VdPUZlKSxGZS5nZXRHcmlwU3BhY2UoKX0sdGhpcy5nZXRIYW5kPWZ1bmN0aW9uKFNlKXtsZXQgRmU9eFtTZV07cmV0dXJuIHZvaWQgMD09PUZlJiYoRmU9bmV3IF94LHhbU2VdPUZlKSxGZS5nZXRIYW5kU3BhY2UoKX0sdGhpcy5zZXRGcmFtZWJ1ZmZlclNjYWxlRmFjdG9yPWZ1bmN0aW9uKFNlKXtvPVNlLCEwPT09aS5pc1ByZXNlbnRpbmcmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViWFJNYW5hZ2VyOiBDYW5ub3QgY2hhbmdlIGZyYW1lYnVmZmVyIHNjYWxlIHdoaWxlIHByZXNlbnRpbmcuIil9LHRoaXMuc2V0UmVmZXJlbmNlU3BhY2VUeXBlPWZ1bmN0aW9uKFNlKXtzPVNlLCEwPT09aS5pc1ByZXNlbnRpbmcmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViWFJNYW5hZ2VyOiBDYW5ub3QgY2hhbmdlIHJlZmVyZW5jZSBzcGFjZSB0eXBlIHdoaWxlIHByZXNlbnRpbmcuIil9LHRoaXMuZ2V0UmVmZXJlbmNlU3BhY2U9ZnVuY3Rpb24oKXtyZXR1cm4gYX0sdGhpcy5nZXRCYXNlTGF5ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PXU/dTpwfSx0aGlzLmdldEJpbmRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gZH0sdGhpcy5nZXRGcmFtZT1mdW5jdGlvbigpe3JldHVybiBtfSx0aGlzLmdldFNlc3Npb249ZnVuY3Rpb24oKXtyZXR1cm4gcn0sdGhpcy5zZXRTZXNzaW9uPWFzeW5jIGZ1bmN0aW9uKFNlKXtpZihyPVNlLG51bGwhPT1yKXtpZihNPXQuZ2V0UmVuZGVyVGFyZ2V0KCksci5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3QiLEFlKSxyLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdHN0YXJ0IixBZSksci5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RlbmQiLEFlKSxyLmFkZEV2ZW50TGlzdGVuZXIoInNxdWVlemUiLEFlKSxyLmFkZEV2ZW50TGlzdGVuZXIoInNxdWVlemVzdGFydCIsQWUpLHIuYWRkRXZlbnRMaXN0ZW5lcigic3F1ZWV6ZWVuZCIsQWUpLHIuYWRkRXZlbnRMaXN0ZW5lcigiZW5kIixEKSxyLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0c291cmNlc2NoYW5nZSIscmUpLCEwIT09Xy54ckNvbXBhdGlibGUmJmF3YWl0IGUubWFrZVhSQ29tcGF0aWJsZSgpLHZvaWQgMD09PXIucmVuZGVyU3RhdGUubGF5ZXJzfHwhMT09PXQuY2FwYWJpbGl0aWVzLmlzV2ViR0wyKXA9bmV3IFhSV2ViR0xMYXllcihyLGUse2FudGlhbGlhczp2b2lkIDAhPT1yLnJlbmRlclN0YXRlLmxheWVyc3x8Xy5hbnRpYWxpYXMsYWxwaGE6Xy5hbHBoYSxkZXB0aDpfLmRlcHRoLHN0ZW5jaWw6Xy5zdGVuY2lsLGZyYW1lYnVmZmVyU2NhbGVGYWN0b3I6b30pLHIudXBkYXRlUmVuZGVyU3RhdGUoe2Jhc2VMYXllcjpwfSkseT1uZXcgdHMocC5mcmFtZWJ1ZmZlcldpZHRoLHAuZnJhbWVidWZmZXJIZWlnaHQse2Zvcm1hdDpDYSx0eXBlOnhwLGVuY29kaW5nOnQub3V0cHV0RW5jb2Rpbmd9KTtlbHNle2g9Xy5hbnRpYWxpYXM7bGV0IEZlPW51bGwsbHQ9bnVsbCxNdD1udWxsO18uZGVwdGgmJihNdD1fLnN0ZW5jaWw/MzUwNTY6MzMxOTAsRmU9Xy5zdGVuY2lsP0swOmJtLGx0PV8uc3RlbmNpbD9YMDp4eCk7bGV0IHB0PXtjb2xvckZvcm1hdDp0Lm91dHB1dEVuY29kaW5nPT09RHI/MzU5MDc6MzI4NTYsZGVwdGhGb3JtYXQ6TXQsc2NhbGVGYWN0b3I6b307ZD1uZXcgWFJXZWJHTEJpbmRpbmcocixlKSx1PWQuY3JlYXRlUHJvamVjdGlvbkxheWVyKHB0KSxyLnVwZGF0ZVJlbmRlclN0YXRlKHtsYXllcnM6W3VdfSkseT1oP25ldyB3eCh1LnRleHR1cmVXaWR0aCx1LnRleHR1cmVIZWlnaHQse2Zvcm1hdDpDYSx0eXBlOnhwLGRlcHRoVGV4dHVyZTpuZXcgSXgodS50ZXh0dXJlV2lkdGgsdS50ZXh0dXJlSGVpZ2h0LGx0LHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLEZlKSxzdGVuY2lsQnVmZmVyOl8uc3RlbmNpbCxpZ25vcmVEZXB0aDp1Lmlnbm9yZURlcHRoVmFsdWVzLHVzZVJlbmRlclRvVGV4dHVyZTpsLGVuY29kaW5nOnQub3V0cHV0RW5jb2Rpbmd9KTpuZXcgdHModS50ZXh0dXJlV2lkdGgsdS50ZXh0dXJlSGVpZ2h0LHtmb3JtYXQ6Q2EsdHlwZTp4cCxkZXB0aFRleHR1cmU6bmV3IEl4KHUudGV4dHVyZVdpZHRoLHUudGV4dHVyZUhlaWdodCxsdCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCxGZSksc3RlbmNpbEJ1ZmZlcjpfLnN0ZW5jaWwsaWdub3JlRGVwdGg6dS5pZ25vcmVEZXB0aFZhbHVlcyxlbmNvZGluZzp0Lm91dHB1dEVuY29kaW5nfSl9eS5pc1hSUmVuZGVyVGFyZ2V0PSEwLHRoaXMuc2V0Rm92ZWF0aW9uKDEpLGE9YXdhaXQgci5yZXF1ZXN0UmVmZXJlbmNlU3BhY2UocyksR2Uuc2V0Q29udGV4dChyKSxHZS5zdGFydCgpLGkuaXNQcmVzZW50aW5nPSEwLGkuZGlzcGF0Y2hFdmVudCh7dHlwZToic2Vzc2lvbnN0YXJ0In0pfX07bGV0IGNlPW5ldyBLLGhlPW5ldyBLO2Z1bmN0aW9uICQoU2UsRmUpe251bGw9PT1GZT9TZS5tYXRyaXhXb3JsZC5jb3B5KFNlLm1hdHJpeCk6U2UubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcyhGZS5tYXRyaXhXb3JsZCxTZS5tYXRyaXgpLFNlLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KFNlLm1hdHJpeFdvcmxkKS5pbnZlcnQoKX10aGlzLnVwZGF0ZUNhbWVyYT1mdW5jdGlvbihTZSl7aWYobnVsbD09PXIpcmV0dXJuO1EubmVhcj1CLm5lYXI9SS5uZWFyPVNlLm5lYXIsUS5mYXI9Qi5mYXI9SS5mYXI9U2UuZmFyLCh3ZSE9PVEubmVhcnx8UWUhPT1RLmZhcikmJihyLnVwZGF0ZVJlbmRlclN0YXRlKHtkZXB0aE5lYXI6US5uZWFyLGRlcHRoRmFyOlEuZmFyfSksd2U9US5uZWFyLFFlPVEuZmFyKTtsZXQgRmU9U2UucGFyZW50LGx0PVEuY2FtZXJhczskKFEsRmUpO2ZvcihsZXQgcHQ9MDtwdDxsdC5sZW5ndGg7cHQrKykkKGx0W3B0XSxGZSk7US5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoUS5wb3NpdGlvbixRLnF1YXRlcm5pb24sUS5zY2FsZSksU2UucG9zaXRpb24uY29weShRLnBvc2l0aW9uKSxTZS5xdWF0ZXJuaW9uLmNvcHkoUS5xdWF0ZXJuaW9uKSxTZS5zY2FsZS5jb3B5KFEuc2NhbGUpLFNlLm1hdHJpeC5jb3B5KFEubWF0cml4KSxTZS5tYXRyaXhXb3JsZC5jb3B5KFEubWF0cml4V29ybGQpO2xldCBNdD1TZS5jaGlsZHJlbjtmb3IobGV0IHB0PTAsa2U9TXQubGVuZ3RoO3B0PGtlO3B0KyspTXRbcHRdLnVwZGF0ZU1hdHJpeFdvcmxkKCEwKTsyPT09bHQubGVuZ3RoP2Z1bmN0aW9uKFNlLEZlLGx0KXtjZS5zZXRGcm9tTWF0cml4UG9zaXRpb24oRmUubWF0cml4V29ybGQpLGhlLnNldEZyb21NYXRyaXhQb3NpdGlvbihsdC5tYXRyaXhXb3JsZCk7bGV0IE10PWNlLmRpc3RhbmNlVG8oaGUpLHB0PUZlLnByb2plY3Rpb25NYXRyaXguZWxlbWVudHMsa2U9bHQucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50cyxUbj1wdFsxNF0vKHB0WzEwXS0xKSx3dD1wdFsxNF0vKHB0WzEwXSsxKSxvbj0ocHRbOV0rMSkvcHRbNV0sQ2U9KHB0WzldLTEpL3B0WzVdLG10PShwdFs4XS0xKS9wdFswXSxodD0oa2VbOF0rMSkva2VbMF0sb2U9VG4qbXQsYXQ9VG4qaHQsWWU9TXQvKC1tdCtodCksX3Q9WWUqLW10O0ZlLm1hdHJpeFdvcmxkLmRlY29tcG9zZShTZS5wb3NpdGlvbixTZS5xdWF0ZXJuaW9uLFNlLnNjYWxlKSxTZS50cmFuc2xhdGVYKF90KSxTZS50cmFuc2xhdGVaKFllKSxTZS5tYXRyaXhXb3JsZC5jb21wb3NlKFNlLnBvc2l0aW9uLFNlLnF1YXRlcm5pb24sU2Uuc2NhbGUpLFNlLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KFNlLm1hdHJpeFdvcmxkKS5pbnZlcnQoKTtsZXQgdXQ9VG4rWWUsYW49d3QrWWU7U2UucHJvamVjdGlvbk1hdHJpeC5tYWtlUGVyc3BlY3RpdmUob2UtX3QsYXQrKE10LV90KSxvbip3dC9hbip1dCxDZSp3dC9hbip1dCx1dCxhbil9KFEsSSxCKTpRLnByb2plY3Rpb25NYXRyaXguY29weShJLnByb2plY3Rpb25NYXRyaXgpfSx0aGlzLmdldENhbWVyYT1mdW5jdGlvbigpe3JldHVybiBRfSx0aGlzLmdldEZvdmVhdGlvbj1mdW5jdGlvbigpe3JldHVybiBudWxsIT09dT91LmZpeGVkRm92ZWF0aW9uOm51bGwhPT1wP3AuZml4ZWRGb3ZlYXRpb246dm9pZCAwfSx0aGlzLnNldEZvdmVhdGlvbj1mdW5jdGlvbihTZSl7bnVsbCE9PXUmJih1LmZpeGVkRm92ZWF0aW9uPVNlKSxudWxsIT09cCYmdm9pZCAwIT09cC5maXhlZEZvdmVhdGlvbiYmKHAuZml4ZWRGb3ZlYXRpb249U2UpfTtsZXQgZGU9bnVsbCxHZT1uZXcgbXRlO0dlLnNldEFuaW1hdGlvbkxvb3AoZnVuY3Rpb24oU2UsRmUpe2lmKGM9RmUuZ2V0Vmlld2VyUG9zZShhKSxtPUZlLG51bGwhPT1jKXtsZXQgTXQ9Yy52aWV3cztudWxsIT09cCYmKHQuc2V0UmVuZGVyVGFyZ2V0RnJhbWVidWZmZXIoeSxwLmZyYW1lYnVmZmVyKSx0LnNldFJlbmRlclRhcmdldCh5KSk7bGV0IHB0PSExO010Lmxlbmd0aCE9PVEuY2FtZXJhcy5sZW5ndGgmJihRLmNhbWVyYXMubGVuZ3RoPTAscHQ9ITApO2ZvcihsZXQga2U9MDtrZTxNdC5sZW5ndGg7a2UrKyl7bGV0IFRuPU10W2tlXSx3dD1udWxsO2lmKG51bGwhPT1wKXd0PXAuZ2V0Vmlld3BvcnQoVG4pO2Vsc2V7bGV0IENlPWQuZ2V0Vmlld1N1YkltYWdlKHUsVG4pO3d0PUNlLnZpZXdwb3J0LDA9PT1rZSYmKHQuc2V0UmVuZGVyVGFyZ2V0VGV4dHVyZXMoeSxDZS5jb2xvclRleHR1cmUsdS5pZ25vcmVEZXB0aFZhbHVlcz92b2lkIDA6Q2UuZGVwdGhTdGVuY2lsVGV4dHVyZSksdC5zZXRSZW5kZXJUYXJnZXQoeSkpfWxldCBvbj1lZVtrZV07b24ubWF0cml4LmZyb21BcnJheShUbi50cmFuc2Zvcm0ubWF0cml4KSxvbi5wcm9qZWN0aW9uTWF0cml4LmZyb21BcnJheShUbi5wcm9qZWN0aW9uTWF0cml4KSxvbi52aWV3cG9ydC5zZXQod3QueCx3dC55LHd0LndpZHRoLHd0LmhlaWdodCksMD09PWtlJiZRLm1hdHJpeC5jb3B5KG9uLm1hdHJpeCksITA9PT1wdCYmUS5jYW1lcmFzLnB1c2gob24pfX1sZXQgbHQ9ci5pbnB1dFNvdXJjZXM7Zm9yKGxldCBNdD0wO010PHgubGVuZ3RoO010KyspeFtNdF0udXBkYXRlKGx0W010XSxGZSxhKTtkZSYmZGUoU2UsRmUpLG09bnVsbH0pLHRoaXMuc2V0QW5pbWF0aW9uTG9vcD1mdW5jdGlvbihTZSl7ZGU9U2V9LHRoaXMuZGlzcG9zZT1mdW5jdGlvbigpe319fTtmdW5jdGlvbiBEMmUobil7ZnVuY3Rpb24gaSh5LHgpe3kub3BhY2l0eS52YWx1ZT14Lm9wYWNpdHkseC5jb2xvciYmeS5kaWZmdXNlLnZhbHVlLmNvcHkoeC5jb2xvcikseC5lbWlzc2l2ZSYmeS5lbWlzc2l2ZS52YWx1ZS5jb3B5KHguZW1pc3NpdmUpLm11bHRpcGx5U2NhbGFyKHguZW1pc3NpdmVJbnRlbnNpdHkpLHgubWFwJiYoeS5tYXAudmFsdWU9eC5tYXApLHguYWxwaGFNYXAmJih5LmFscGhhTWFwLnZhbHVlPXguYWxwaGFNYXApLHguc3BlY3VsYXJNYXAmJih5LnNwZWN1bGFyTWFwLnZhbHVlPXguc3BlY3VsYXJNYXApLHguYWxwaGFUZXN0PjAmJih5LmFscGhhVGVzdC52YWx1ZT14LmFscGhhVGVzdCk7bGV0IEksQixSPW4uZ2V0KHgpLmVudk1hcDtSJiYoeS5lbnZNYXAudmFsdWU9Uix5LmZsaXBFbnZNYXAudmFsdWU9Ui5pc0N1YmVUZXh0dXJlJiYhMT09PVIuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPy0xOjEseS5yZWZsZWN0aXZpdHkudmFsdWU9eC5yZWZsZWN0aXZpdHkseS5pb3IudmFsdWU9eC5pb3IseS5yZWZyYWN0aW9uUmF0aW8udmFsdWU9eC5yZWZyYWN0aW9uUmF0aW8pLHgubGlnaHRNYXAmJih5LmxpZ2h0TWFwLnZhbHVlPXgubGlnaHRNYXAseS5saWdodE1hcEludGVuc2l0eS52YWx1ZT14LmxpZ2h0TWFwSW50ZW5zaXR5KSx4LmFvTWFwJiYoeS5hb01hcC52YWx1ZT14LmFvTWFwLHkuYW9NYXBJbnRlbnNpdHkudmFsdWU9eC5hb01hcEludGVuc2l0eSkseC5tYXA/ST14Lm1hcDp4LnNwZWN1bGFyTWFwP0k9eC5zcGVjdWxhck1hcDp4LmRpc3BsYWNlbWVudE1hcD9JPXguZGlzcGxhY2VtZW50TWFwOngubm9ybWFsTWFwP0k9eC5ub3JtYWxNYXA6eC5idW1wTWFwP0k9eC5idW1wTWFwOngucm91Z2huZXNzTWFwP0k9eC5yb3VnaG5lc3NNYXA6eC5tZXRhbG5lc3NNYXA/ST14Lm1ldGFsbmVzc01hcDp4LmFscGhhTWFwP0k9eC5hbHBoYU1hcDp4LmVtaXNzaXZlTWFwP0k9eC5lbWlzc2l2ZU1hcDp4LmNsZWFyY29hdE1hcD9JPXguY2xlYXJjb2F0TWFwOnguY2xlYXJjb2F0Tm9ybWFsTWFwP0k9eC5jbGVhcmNvYXROb3JtYWxNYXA6eC5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/ST14LmNsZWFyY29hdFJvdWdobmVzc01hcDp4LnNwZWN1bGFySW50ZW5zaXR5TWFwP0k9eC5zcGVjdWxhckludGVuc2l0eU1hcDp4LnNwZWN1bGFyQ29sb3JNYXA/ST14LnNwZWN1bGFyQ29sb3JNYXA6eC50cmFuc21pc3Npb25NYXA/ST14LnRyYW5zbWlzc2lvbk1hcDp4LnRoaWNrbmVzc01hcD9JPXgudGhpY2tuZXNzTWFwOnguc2hlZW5Db2xvck1hcD9JPXguc2hlZW5Db2xvck1hcDp4LnNoZWVuUm91Z2huZXNzTWFwJiYoST14LnNoZWVuUm91Z2huZXNzTWFwKSx2b2lkIDAhPT1JJiYoSS5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYoST1JLnRleHR1cmUpLCEwPT09SS5tYXRyaXhBdXRvVXBkYXRlJiZJLnVwZGF0ZU1hdHJpeCgpLHkudXZUcmFuc2Zvcm0udmFsdWUuY29weShJLm1hdHJpeCkpLHguYW9NYXA/Qj14LmFvTWFwOngubGlnaHRNYXAmJihCPXgubGlnaHRNYXApLHZvaWQgMCE9PUImJihCLmlzV2ViR0xSZW5kZXJUYXJnZXQmJihCPUIudGV4dHVyZSksITA9PT1CLm1hdHJpeEF1dG9VcGRhdGUmJkIudXBkYXRlTWF0cml4KCkseS51djJUcmFuc2Zvcm0udmFsdWUuY29weShCLm1hdHJpeCkpfWZ1bmN0aW9uIHUoeSx4KXt5LnJvdWdobmVzcy52YWx1ZT14LnJvdWdobmVzcyx5Lm1ldGFsbmVzcy52YWx1ZT14Lm1ldGFsbmVzcyx4LnJvdWdobmVzc01hcCYmKHkucm91Z2huZXNzTWFwLnZhbHVlPXgucm91Z2huZXNzTWFwKSx4Lm1ldGFsbmVzc01hcCYmKHkubWV0YWxuZXNzTWFwLnZhbHVlPXgubWV0YWxuZXNzTWFwKSx4LmVtaXNzaXZlTWFwJiYoeS5lbWlzc2l2ZU1hcC52YWx1ZT14LmVtaXNzaXZlTWFwKSx4LmJ1bXBNYXAmJih5LmJ1bXBNYXAudmFsdWU9eC5idW1wTWFwLHkuYnVtcFNjYWxlLnZhbHVlPXguYnVtcFNjYWxlLHguc2lkZT09PWJvJiYoeS5idW1wU2NhbGUudmFsdWUqPS0xKSkseC5ub3JtYWxNYXAmJih5Lm5vcm1hbE1hcC52YWx1ZT14Lm5vcm1hbE1hcCx5Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5ub3JtYWxTY2FsZSkseC5zaWRlPT09Ym8mJnkubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHguZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpLG4uZ2V0KHgpLmVudk1hcCYmKHkuZW52TWFwSW50ZW5zaXR5LnZhbHVlPXguZW52TWFwSW50ZW5zaXR5KX1yZXR1cm57cmVmcmVzaEZvZ1VuaWZvcm1zOmZ1bmN0aW9uKHkseCl7eS5mb2dDb2xvci52YWx1ZS5jb3B5KHguY29sb3IpLHguaXNGb2c/KHkuZm9nTmVhci52YWx1ZT14Lm5lYXIseS5mb2dGYXIudmFsdWU9eC5mYXIpOnguaXNGb2dFeHAyJiYoeS5mb2dEZW5zaXR5LnZhbHVlPXguZGVuc2l0eSl9LHJlZnJlc2hNYXRlcmlhbFVuaWZvcm1zOmZ1bmN0aW9uKHkseCxSLEksQil7eC5pc01lc2hCYXNpY01hdGVyaWFsP2koeSx4KTp4LmlzTWVzaExhbWJlcnRNYXRlcmlhbD8oaSh5LHgpLGZ1bmN0aW9uKHkseCl7eC5lbWlzc2l2ZU1hcCYmKHkuZW1pc3NpdmVNYXAudmFsdWU9eC5lbWlzc2l2ZU1hcCl9KHkseCkpOnguaXNNZXNoVG9vbk1hdGVyaWFsPyhpKHkseCksZnVuY3Rpb24oeSx4KXt4LmdyYWRpZW50TWFwJiYoeS5ncmFkaWVudE1hcC52YWx1ZT14LmdyYWRpZW50TWFwKSx4LmVtaXNzaXZlTWFwJiYoeS5lbWlzc2l2ZU1hcC52YWx1ZT14LmVtaXNzaXZlTWFwKSx4LmJ1bXBNYXAmJih5LmJ1bXBNYXAudmFsdWU9eC5idW1wTWFwLHkuYnVtcFNjYWxlLnZhbHVlPXguYnVtcFNjYWxlLHguc2lkZT09PWJvJiYoeS5idW1wU2NhbGUudmFsdWUqPS0xKSkseC5ub3JtYWxNYXAmJih5Lm5vcm1hbE1hcC52YWx1ZT14Lm5vcm1hbE1hcCx5Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5ub3JtYWxTY2FsZSkseC5zaWRlPT09Ym8mJnkubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHguZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpfSh5LHgpKTp4LmlzTWVzaFBob25nTWF0ZXJpYWw/KGkoeSx4KSxmdW5jdGlvbih5LHgpe3kuc3BlY3VsYXIudmFsdWUuY29weSh4LnNwZWN1bGFyKSx5LnNoaW5pbmVzcy52YWx1ZT1NYXRoLm1heCh4LnNoaW5pbmVzcywxZS00KSx4LmVtaXNzaXZlTWFwJiYoeS5lbWlzc2l2ZU1hcC52YWx1ZT14LmVtaXNzaXZlTWFwKSx4LmJ1bXBNYXAmJih5LmJ1bXBNYXAudmFsdWU9eC5idW1wTWFwLHkuYnVtcFNjYWxlLnZhbHVlPXguYnVtcFNjYWxlLHguc2lkZT09PWJvJiYoeS5idW1wU2NhbGUudmFsdWUqPS0xKSkseC5ub3JtYWxNYXAmJih5Lm5vcm1hbE1hcC52YWx1ZT14Lm5vcm1hbE1hcCx5Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5ub3JtYWxTY2FsZSkseC5zaWRlPT09Ym8mJnkubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHguZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpfSh5LHgpKTp4LmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/KGkoeSx4KSx4LmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWw/ZnVuY3Rpb24oeSx4LFIpe3UoeSx4KSx5Lmlvci52YWx1ZT14Lmlvcix4LnNoZWVuPjAmJih5LnNoZWVuQ29sb3IudmFsdWUuY29weSh4LnNoZWVuQ29sb3IpLm11bHRpcGx5U2NhbGFyKHguc2hlZW4pLHkuc2hlZW5Sb3VnaG5lc3MudmFsdWU9eC5zaGVlblJvdWdobmVzcyx4LnNoZWVuQ29sb3JNYXAmJih5LnNoZWVuQ29sb3JNYXAudmFsdWU9eC5zaGVlbkNvbG9yTWFwKSx4LnNoZWVuUm91Z2huZXNzTWFwJiYoeS5zaGVlblJvdWdobmVzc01hcC52YWx1ZT14LnNoZWVuUm91Z2huZXNzTWFwKSkseC5jbGVhcmNvYXQ+MCYmKHkuY2xlYXJjb2F0LnZhbHVlPXguY2xlYXJjb2F0LHkuY2xlYXJjb2F0Um91Z2huZXNzLnZhbHVlPXguY2xlYXJjb2F0Um91Z2huZXNzLHguY2xlYXJjb2F0TWFwJiYoeS5jbGVhcmNvYXRNYXAudmFsdWU9eC5jbGVhcmNvYXRNYXApLHguY2xlYXJjb2F0Um91Z2huZXNzTWFwJiYoeS5jbGVhcmNvYXRSb3VnaG5lc3NNYXAudmFsdWU9eC5jbGVhcmNvYXRSb3VnaG5lc3NNYXApLHguY2xlYXJjb2F0Tm9ybWFsTWFwJiYoeS5jbGVhcmNvYXROb3JtYWxTY2FsZS52YWx1ZS5jb3B5KHguY2xlYXJjb2F0Tm9ybWFsU2NhbGUpLHkuY2xlYXJjb2F0Tm9ybWFsTWFwLnZhbHVlPXguY2xlYXJjb2F0Tm9ybWFsTWFwLHguc2lkZT09PWJvJiZ5LmNsZWFyY29hdE5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSkseC50cmFuc21pc3Npb24+MCYmKHkudHJhbnNtaXNzaW9uLnZhbHVlPXgudHJhbnNtaXNzaW9uLHkudHJhbnNtaXNzaW9uU2FtcGxlck1hcC52YWx1ZT1SLnRleHR1cmUseS50cmFuc21pc3Npb25TYW1wbGVyU2l6ZS52YWx1ZS5zZXQoUi53aWR0aCxSLmhlaWdodCkseC50cmFuc21pc3Npb25NYXAmJih5LnRyYW5zbWlzc2lvbk1hcC52YWx1ZT14LnRyYW5zbWlzc2lvbk1hcCkseS50aGlja25lc3MudmFsdWU9eC50aGlja25lc3MseC50aGlja25lc3NNYXAmJih5LnRoaWNrbmVzc01hcC52YWx1ZT14LnRoaWNrbmVzc01hcCkseS5hdHRlbnVhdGlvbkRpc3RhbmNlLnZhbHVlPXguYXR0ZW51YXRpb25EaXN0YW5jZSx5LmF0dGVudWF0aW9uQ29sb3IudmFsdWUuY29weSh4LmF0dGVudWF0aW9uQ29sb3IpKSx5LnNwZWN1bGFySW50ZW5zaXR5LnZhbHVlPXguc3BlY3VsYXJJbnRlbnNpdHkseS5zcGVjdWxhckNvbG9yLnZhbHVlLmNvcHkoeC5zcGVjdWxhckNvbG9yKSx4LnNwZWN1bGFySW50ZW5zaXR5TWFwJiYoeS5zcGVjdWxhckludGVuc2l0eU1hcC52YWx1ZT14LnNwZWN1bGFySW50ZW5zaXR5TWFwKSx4LnNwZWN1bGFyQ29sb3JNYXAmJih5LnNwZWN1bGFyQ29sb3JNYXAudmFsdWU9eC5zcGVjdWxhckNvbG9yTWFwKX0oeSx4LEIpOnUoeSx4KSk6eC5pc01lc2hNYXRjYXBNYXRlcmlhbD8oaSh5LHgpLGZ1bmN0aW9uKHkseCl7eC5tYXRjYXAmJih5Lm1hdGNhcC52YWx1ZT14Lm1hdGNhcCkseC5idW1wTWFwJiYoeS5idW1wTWFwLnZhbHVlPXguYnVtcE1hcCx5LmJ1bXBTY2FsZS52YWx1ZT14LmJ1bXBTY2FsZSx4LnNpZGU9PT1ibyYmKHkuYnVtcFNjYWxlLnZhbHVlKj0tMSkpLHgubm9ybWFsTWFwJiYoeS5ub3JtYWxNYXAudmFsdWU9eC5ub3JtYWxNYXAseS5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KHgubm9ybWFsU2NhbGUpLHguc2lkZT09PWJvJiZ5Lm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSx4LmRpc3BsYWNlbWVudE1hcCYmKHkuZGlzcGxhY2VtZW50TWFwLnZhbHVlPXguZGlzcGxhY2VtZW50TWFwLHkuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eC5kaXNwbGFjZW1lbnRTY2FsZSx5LmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eC5kaXNwbGFjZW1lbnRCaWFzKX0oeSx4KSk6eC5pc01lc2hEZXB0aE1hdGVyaWFsPyhpKHkseCksZnVuY3Rpb24oeSx4KXt4LmRpc3BsYWNlbWVudE1hcCYmKHkuZGlzcGxhY2VtZW50TWFwLnZhbHVlPXguZGlzcGxhY2VtZW50TWFwLHkuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eC5kaXNwbGFjZW1lbnRTY2FsZSx5LmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eC5kaXNwbGFjZW1lbnRCaWFzKX0oeSx4KSk6eC5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPyhpKHkseCksZnVuY3Rpb24oeSx4KXt4LmRpc3BsYWNlbWVudE1hcCYmKHkuZGlzcGxhY2VtZW50TWFwLnZhbHVlPXguZGlzcGxhY2VtZW50TWFwLHkuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eC5kaXNwbGFjZW1lbnRTY2FsZSx5LmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eC5kaXNwbGFjZW1lbnRCaWFzKSx5LnJlZmVyZW5jZVBvc2l0aW9uLnZhbHVlLmNvcHkoeC5yZWZlcmVuY2VQb3NpdGlvbikseS5uZWFyRGlzdGFuY2UudmFsdWU9eC5uZWFyRGlzdGFuY2UseS5mYXJEaXN0YW5jZS52YWx1ZT14LmZhckRpc3RhbmNlfSh5LHgpKTp4LmlzTWVzaE5vcm1hbE1hdGVyaWFsPyhpKHkseCksZnVuY3Rpb24oeSx4KXt4LmJ1bXBNYXAmJih5LmJ1bXBNYXAudmFsdWU9eC5idW1wTWFwLHkuYnVtcFNjYWxlLnZhbHVlPXguYnVtcFNjYWxlLHguc2lkZT09PWJvJiYoeS5idW1wU2NhbGUudmFsdWUqPS0xKSkseC5ub3JtYWxNYXAmJih5Lm5vcm1hbE1hcC52YWx1ZT14Lm5vcm1hbE1hcCx5Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5ub3JtYWxTY2FsZSkseC5zaWRlPT09Ym8mJnkubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHguZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpfSh5LHgpKTp4LmlzTGluZUJhc2ljTWF0ZXJpYWw/KGZ1bmN0aW9uKHkseCl7eS5kaWZmdXNlLnZhbHVlLmNvcHkoeC5jb2xvcikseS5vcGFjaXR5LnZhbHVlPXgub3BhY2l0eX0oeSx4KSx4LmlzTGluZURhc2hlZE1hdGVyaWFsJiZmdW5jdGlvbih5LHgpe3kuZGFzaFNpemUudmFsdWU9eC5kYXNoU2l6ZSx5LnRvdGFsU2l6ZS52YWx1ZT14LmRhc2hTaXplK3guZ2FwU2l6ZSx5LnNjYWxlLnZhbHVlPXguc2NhbGV9KHkseCkpOnguaXNQb2ludHNNYXRlcmlhbD9mdW5jdGlvbih5LHgsUixJKXtsZXQgQjt5LmRpZmZ1c2UudmFsdWUuY29weSh4LmNvbG9yKSx5Lm9wYWNpdHkudmFsdWU9eC5vcGFjaXR5LHkuc2l6ZS52YWx1ZT14LnNpemUqUix5LnNjYWxlLnZhbHVlPS41KkkseC5tYXAmJih5Lm1hcC52YWx1ZT14Lm1hcCkseC5hbHBoYU1hcCYmKHkuYWxwaGFNYXAudmFsdWU9eC5hbHBoYU1hcCkseC5hbHBoYVRlc3Q+MCYmKHkuYWxwaGFUZXN0LnZhbHVlPXguYWxwaGFUZXN0KSx4Lm1hcD9CPXgubWFwOnguYWxwaGFNYXAmJihCPXguYWxwaGFNYXApLHZvaWQgMCE9PUImJighMD09PUIubWF0cml4QXV0b1VwZGF0ZSYmQi51cGRhdGVNYXRyaXgoKSx5LnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoQi5tYXRyaXgpKX0oeSx4LFIsSSk6eC5pc1Nwcml0ZU1hdGVyaWFsP2Z1bmN0aW9uKHkseCl7bGV0IFI7eS5kaWZmdXNlLnZhbHVlLmNvcHkoeC5jb2xvcikseS5vcGFjaXR5LnZhbHVlPXgub3BhY2l0eSx5LnJvdGF0aW9uLnZhbHVlPXgucm90YXRpb24seC5tYXAmJih5Lm1hcC52YWx1ZT14Lm1hcCkseC5hbHBoYU1hcCYmKHkuYWxwaGFNYXAudmFsdWU9eC5hbHBoYU1hcCkseC5hbHBoYVRlc3Q+MCYmKHkuYWxwaGFUZXN0LnZhbHVlPXguYWxwaGFUZXN0KSx4Lm1hcD9SPXgubWFwOnguYWxwaGFNYXAmJihSPXguYWxwaGFNYXApLHZvaWQgMCE9PVImJighMD09PVIubWF0cml4QXV0b1VwZGF0ZSYmUi51cGRhdGVNYXRyaXgoKSx5LnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoUi5tYXRyaXgpKX0oeSx4KTp4LmlzU2hhZG93TWF0ZXJpYWw/KHkuY29sb3IudmFsdWUuY29weSh4LmNvbG9yKSx5Lm9wYWNpdHkudmFsdWU9eC5vcGFjaXR5KTp4LmlzU2hhZGVyTWF0ZXJpYWwmJih4LnVuaWZvcm1zTmVlZFVwZGF0ZT0hMSl9fX1mdW5jdGlvbiBXaShuPXt9KXtsZXQgdD12b2lkIDAhPT1uLmNhbnZhcz9uLmNhbnZhczpmdW5jdGlvbigpe2xldCBuPU14KCJjYW52YXMiKTtyZXR1cm4gbi5zdHlsZS5kaXNwbGF5PSJibG9jayIsbn0oKSxlPXZvaWQgMCE9PW4uY29udGV4dD9uLmNvbnRleHQ6bnVsbCxpPXZvaWQgMCE9PW4uYWxwaGEmJm4uYWxwaGEscj12b2lkIDA9PT1uLmRlcHRofHxuLmRlcHRoLG89dm9pZCAwPT09bi5zdGVuY2lsfHxuLnN0ZW5jaWwsYT12b2lkIDAhPT1uLmFudGlhbGlhcyYmbi5hbnRpYWxpYXMscz12b2lkIDA9PT1uLnByZW11bHRpcGxpZWRBbHBoYXx8bi5wcmVtdWx0aXBsaWVkQWxwaGEsbD12b2lkIDAhPT1uLnByZXNlcnZlRHJhd2luZ0J1ZmZlciYmbi5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIsYz12b2lkIDAhPT1uLnBvd2VyUHJlZmVyZW5jZT9uLnBvd2VyUHJlZmVyZW5jZToiZGVmYXVsdCIsZD12b2lkIDAhPT1uLmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQmJm4uZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCx1PW51bGwscD1udWxsLGg9W10sbT1bXTt0aGlzLmRvbUVsZW1lbnQ9dCx0aGlzLmRlYnVnPXtjaGVja1NoYWRlckVycm9yczohMH0sdGhpcy5hdXRvQ2xlYXI9ITAsdGhpcy5hdXRvQ2xlYXJDb2xvcj0hMCx0aGlzLmF1dG9DbGVhckRlcHRoPSEwLHRoaXMuYXV0b0NsZWFyU3RlbmNpbD0hMCx0aGlzLnNvcnRPYmplY3RzPSEwLHRoaXMuY2xpcHBpbmdQbGFuZXM9W10sdGhpcy5sb2NhbENsaXBwaW5nRW5hYmxlZD0hMSx0aGlzLm91dHB1dEVuY29kaW5nPXdwLHRoaXMucGh5c2ljYWxseUNvcnJlY3RMaWdodHM9ITEsdGhpcy50b25lTWFwcGluZz15cCx0aGlzLnRvbmVNYXBwaW5nRXhwb3N1cmU9MTtsZXQgXz10aGlzLE09ITEseT0wLHg9MCxSPW51bGwsST0tMSxCPW51bGwsZWU9bmV3IFFpLFE9bmV3IFFpLHdlPW51bGwsUWU9dC53aWR0aCxBZT10LmhlaWdodCxEPTEscmU9bnVsbCxjZT1udWxsLGhlPW5ldyBRaSgwLDAsUWUsQWUpLF9lPW5ldyBRaSgwLDAsUWUsQWUpLCQ9ITEsZGU9bmV3IGVfLHBlPSExLEdlPSExLFNlPW51bGwsRmU9bmV3IHZuLGx0PW5ldyBLLE10PXtiYWNrZ3JvdW5kOm51bGwsZm9nOm51bGwsZW52aXJvbm1lbnQ6bnVsbCxvdmVycmlkZU1hdGVyaWFsOm51bGwsaXNTY2VuZTohMH07ZnVuY3Rpb24gcHQoKXtyZXR1cm4gbnVsbD09PVI/RDoxfWxldCB3dCxvbixDZSxtdCxodCxvZSxhdCxZZSxfdCx1dCxhbix5bixzaSxOaSxMaSxZLEwsSGUseXQsZW4sTGUsaG4sbG4sa2U9ZTtmdW5jdGlvbiBUbihFLFYpe2ZvcihsZXQgWD0wO1g8RS5sZW5ndGg7WCsrKXtsZXQgYWU9dC5nZXRDb250ZXh0KEVbWF0sVik7aWYobnVsbCE9PWFlKXJldHVybiBhZX1yZXR1cm4gbnVsbH10cnl7bGV0IEU9e2FscGhhOiEwLGRlcHRoOnIsc3RlbmNpbDpvLGFudGlhbGlhczphLHByZW11bHRpcGxpZWRBbHBoYTpzLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjpsLHBvd2VyUHJlZmVyZW5jZTpjLGZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ6ZH07aWYoInNldEF0dHJpYnV0ZSJpbiB0JiZ0LnNldEF0dHJpYnV0ZSgiZGF0YS1lbmdpbmUiLGB0aHJlZS5qcyByJHtzVn1gKSx0LmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLE5uLCExKSx0LmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dHJlc3RvcmVkIixzZSwhMSksbnVsbD09PWtlKXtsZXQgVj1bIndlYmdsMiIsIndlYmdsIiwiZXhwZXJpbWVudGFsLXdlYmdsIl07aWYoITA9PT1fLmlzV2ViR0wxUmVuZGVyZXImJlYuc2hpZnQoKSxrZT1UbihWLEUpLG51bGw9PT1rZSl0aHJvdyBUbihWKT9uZXcgRXJyb3IoIkVycm9yIGNyZWF0aW5nIFdlYkdMIGNvbnRleHQgd2l0aCB5b3VyIHNlbGVjdGVkIGF0dHJpYnV0ZXMuIik6bmV3IEVycm9yKCJFcnJvciBjcmVhdGluZyBXZWJHTCBjb250ZXh0LiIpfXZvaWQgMD09PWtlLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCYmKGtlLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdD1mdW5jdGlvbigpe3JldHVybntyYW5nZU1pbjoxLHJhbmdlTWF4OjEscHJlY2lzaW9uOjF9fSl9Y2F0Y2goRSl7dGhyb3cgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlcjogIitFLm1lc3NhZ2UpLEV9ZnVuY3Rpb24gRnQoKXt3dD1uZXcgS09lKGtlKSxvbj1uZXcgV09lKGtlLHd0LG4pLHd0LmluaXQob24pLGhuPW5ldyBFMmUoa2Usd3Qsb24pLENlPW5ldyB3MmUoa2Usd3Qsb24pLG10PW5ldyBlRmUoa2UpLGh0PW5ldyBoMmUsb2U9bmV3IFMyZShrZSx3dCxDZSxodCxvbixobixtdCksYXQ9bmV3IFhPZShfKSxZZT1uZXcgWk9lKF8pLF90PW5ldyBmUGUoa2Usb24pLGxuPW5ldyBqT2Uoa2Usd3QsX3Qsb24pLHV0PW5ldyBKT2Uoa2UsX3QsbXQsbG4pLGFuPW5ldyByRmUoa2UsdXQsX3QsbXQpLHl0PW5ldyBpRmUoa2Usb24sb2UpLFk9bmV3IHFPZShodCkseW49bmV3IHAyZShfLGF0LFllLHd0LG9uLGxuLFkpLHNpPW5ldyBEMmUoaHQpLE5pPW5ldyBmMmUsTGk9bmV3IHgyZSh3dCxvbiksSGU9bmV3IFVPZShfLGF0LENlLGFuLGkscyksTD1uZXcgd3RlKF8sYW4sb24pLGVuPW5ldyBHT2Uoa2Usd3QsbXQsb24pLExlPW5ldyAkT2Uoa2Usd3QsbXQsb24pLG10LnByb2dyYW1zPXluLnByb2dyYW1zLF8uY2FwYWJpbGl0aWVzPW9uLF8uZXh0ZW5zaW9ucz13dCxfLnByb3BlcnRpZXM9aHQsXy5yZW5kZXJMaXN0cz1OaSxfLnNoYWRvd01hcD1MLF8uc3RhdGU9Q2UsXy5pbmZvPW10fUZ0KCk7bGV0IE90PW5ldyBvQihfLGtlKTtmdW5jdGlvbiBObihFKXtFLnByZXZlbnREZWZhdWx0KCksY29uc29sZS5sb2coIlRIUkVFLldlYkdMUmVuZGVyZXI6IENvbnRleHQgTG9zdC4iKSxNPSEwfWZ1bmN0aW9uIHNlKCl7Y29uc29sZS5sb2coIlRIUkVFLldlYkdMUmVuZGVyZXI6IENvbnRleHQgUmVzdG9yZWQuIiksTT0hMTtsZXQgRT1tdC5hdXRvUmVzZXQsVj1MLmVuYWJsZWQsWD1MLmF1dG9VcGRhdGUsWj1MLm5lZWRzVXBkYXRlLGFlPUwudHlwZTtGdCgpLG10LmF1dG9SZXNldD1FLEwuZW5hYmxlZD1WLEwuYXV0b1VwZGF0ZT1YLEwubmVlZHNVcGRhdGU9WixMLnR5cGU9YWV9ZnVuY3Rpb24gSnQoRSl7bGV0IFY9RS50YXJnZXQ7Vi5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixKdCksZnVuY3Rpb24oRSl7KGZ1bmN0aW9uKEUpe2xldCBWPWh0LmdldChFKS5wcm9ncmFtczt2b2lkIDAhPT1WJiYoVi5mb3JFYWNoKGZ1bmN0aW9uKFgpe3luLnJlbGVhc2VQcm9ncmFtKFgpfSksRS5pc1NoYWRlck1hdGVyaWFsJiZ5bi5yZWxlYXNlU2hhZGVyQ2FjaGUoRSkpfSkoRSksaHQucmVtb3ZlKEUpfShWKX10aGlzLnhyPU90LHRoaXMuZ2V0Q29udGV4dD1mdW5jdGlvbigpe3JldHVybiBrZX0sdGhpcy5nZXRDb250ZXh0QXR0cmlidXRlcz1mdW5jdGlvbigpe3JldHVybiBrZS5nZXRDb250ZXh0QXR0cmlidXRlcygpfSx0aGlzLmZvcmNlQ29udGV4dExvc3M9ZnVuY3Rpb24oKXtsZXQgRT13dC5nZXQoIldFQkdMX2xvc2VfY29udGV4dCIpO0UmJkUubG9zZUNvbnRleHQoKX0sdGhpcy5mb3JjZUNvbnRleHRSZXN0b3JlPWZ1bmN0aW9uKCl7bGV0IEU9d3QuZ2V0KCJXRUJHTF9sb3NlX2NvbnRleHQiKTtFJiZFLnJlc3RvcmVDb250ZXh0KCl9LHRoaXMuZ2V0UGl4ZWxSYXRpbz1mdW5jdGlvbigpe3JldHVybiBEfSx0aGlzLnNldFBpeGVsUmF0aW89ZnVuY3Rpb24oRSl7dm9pZCAwIT09RSYmKEQ9RSx0aGlzLnNldFNpemUoUWUsQWUsITEpKX0sdGhpcy5nZXRTaXplPWZ1bmN0aW9uKEUpe3JldHVybiBFLnNldChRZSxBZSl9LHRoaXMuc2V0U2l6ZT1mdW5jdGlvbihFLFYsWCl7T3QuaXNQcmVzZW50aW5nP2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogQ2FuJ3QgY2hhbmdlIHNpemUgd2hpbGUgVlIgZGV2aWNlIGlzIHByZXNlbnRpbmcuIik6KFFlPUUsQWU9Vix0LndpZHRoPU1hdGguZmxvb3IoRSpEKSx0LmhlaWdodD1NYXRoLmZsb29yKFYqRCksITEhPT1YJiYodC5zdHlsZS53aWR0aD1FKyJweCIsdC5zdHlsZS5oZWlnaHQ9VisicHgiKSx0aGlzLnNldFZpZXdwb3J0KDAsMCxFLFYpKX0sdGhpcy5nZXREcmF3aW5nQnVmZmVyU2l6ZT1mdW5jdGlvbihFKXtyZXR1cm4gRS5zZXQoUWUqRCxBZSpEKS5mbG9vcigpfSx0aGlzLnNldERyYXdpbmdCdWZmZXJTaXplPWZ1bmN0aW9uKEUsVixYKXtRZT1FLEFlPVYsRD1YLHQud2lkdGg9TWF0aC5mbG9vcihFKlgpLHQuaGVpZ2h0PU1hdGguZmxvb3IoVipYKSx0aGlzLnNldFZpZXdwb3J0KDAsMCxFLFYpfSx0aGlzLmdldEN1cnJlbnRWaWV3cG9ydD1mdW5jdGlvbihFKXtyZXR1cm4gRS5jb3B5KGVlKX0sdGhpcy5nZXRWaWV3cG9ydD1mdW5jdGlvbihFKXtyZXR1cm4gRS5jb3B5KGhlKX0sdGhpcy5zZXRWaWV3cG9ydD1mdW5jdGlvbihFLFYsWCxaKXtFLmlzVmVjdG9yND9oZS5zZXQoRS54LEUueSxFLnosRS53KTpoZS5zZXQoRSxWLFgsWiksQ2Uudmlld3BvcnQoZWUuY29weShoZSkubXVsdGlwbHlTY2FsYXIoRCkuZmxvb3IoKSl9LHRoaXMuZ2V0U2Npc3Nvcj1mdW5jdGlvbihFKXtyZXR1cm4gRS5jb3B5KF9lKX0sdGhpcy5zZXRTY2lzc29yPWZ1bmN0aW9uKEUsVixYLFope0UuaXNWZWN0b3I0P19lLnNldChFLngsRS55LEUueixFLncpOl9lLnNldChFLFYsWCxaKSxDZS5zY2lzc29yKFEuY29weShfZSkubXVsdGlwbHlTY2FsYXIoRCkuZmxvb3IoKSl9LHRoaXMuZ2V0U2Npc3NvclRlc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gJH0sdGhpcy5zZXRTY2lzc29yVGVzdD1mdW5jdGlvbihFKXtDZS5zZXRTY2lzc29yVGVzdCgkPUUpfSx0aGlzLnNldE9wYXF1ZVNvcnQ9ZnVuY3Rpb24oRSl7cmU9RX0sdGhpcy5zZXRUcmFuc3BhcmVudFNvcnQ9ZnVuY3Rpb24oRSl7Y2U9RX0sdGhpcy5nZXRDbGVhckNvbG9yPWZ1bmN0aW9uKEUpe3JldHVybiBFLmNvcHkoSGUuZ2V0Q2xlYXJDb2xvcigpKX0sdGhpcy5zZXRDbGVhckNvbG9yPWZ1bmN0aW9uKCl7SGUuc2V0Q2xlYXJDb2xvci5hcHBseShIZSxhcmd1bWVudHMpfSx0aGlzLmdldENsZWFyQWxwaGE9ZnVuY3Rpb24oKXtyZXR1cm4gSGUuZ2V0Q2xlYXJBbHBoYSgpfSx0aGlzLnNldENsZWFyQWxwaGE9ZnVuY3Rpb24oKXtIZS5zZXRDbGVhckFscGhhLmFwcGx5KEhlLGFyZ3VtZW50cyl9LHRoaXMuY2xlYXI9ZnVuY3Rpb24oRSxWLFgpe2xldCBaPTA7KHZvaWQgMD09PUV8fEUpJiYoWnw9MTYzODQpLCh2b2lkIDA9PT1WfHxWKSYmKFp8PTI1NiksKHZvaWQgMD09PVh8fFgpJiYoWnw9MTAyNCksa2UuY2xlYXIoWil9LHRoaXMuY2xlYXJDb2xvcj1mdW5jdGlvbigpe3RoaXMuY2xlYXIoITAsITEsITEpfSx0aGlzLmNsZWFyRGVwdGg9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCExLCEwLCExKX0sdGhpcy5jbGVhclN0ZW5jaWw9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCExLCExLCEwKX0sdGhpcy5kaXNwb3NlPWZ1bmN0aW9uKCl7dC5yZW1vdmVFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixObiwhMSksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsc2UsITEpLE5pLmRpc3Bvc2UoKSxMaS5kaXNwb3NlKCksaHQuZGlzcG9zZSgpLGF0LmRpc3Bvc2UoKSxZZS5kaXNwb3NlKCksYW4uZGlzcG9zZSgpLGxuLmRpc3Bvc2UoKSx5bi5kaXNwb3NlKCksT3QuZGlzcG9zZSgpLE90LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNlc3Npb25zdGFydCIsZmkpLE90LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNlc3Npb25lbmQiLGxyKSxTZSYmKFNlLmRpc3Bvc2UoKSxTZT1udWxsKSxXby5zdG9wKCl9LHRoaXMucmVuZGVyQnVmZmVyRGlyZWN0PWZ1bmN0aW9uKEUsVixYLFosYWUsemUpe251bGw9PT1WJiYoVj1NdCk7bGV0IGV0PWFlLmlzTWVzaCYmYWUubWF0cml4V29ybGQuZGV0ZXJtaW5hbnQoKTwwLHFlPWZ1bmN0aW9uKEUsVixYLFosYWUpeyEwIT09Vi5pc1NjZW5lJiYoVj1NdCksb2UucmVzZXRUZXh0dXJlVW5pdHMoKTtsZXQgemU9Vi5mb2cscWU9bnVsbD09PVI/Xy5vdXRwdXRFbmNvZGluZzohMD09PVIuaXNYUlJlbmRlclRhcmdldD9SLnRleHR1cmUuZW5jb2Rpbmc6d3AscnQ9KFouaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9ZZTphdCkuZ2V0KFouZW52TWFwfHwoWi5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP1YuZW52aXJvbm1lbnQ6bnVsbCkpLGR0PSEwPT09Wi52ZXJ0ZXhDb2xvcnMmJiEhWC5hdHRyaWJ1dGVzLmNvbG9yJiY0PT09WC5hdHRyaWJ1dGVzLmNvbG9yLml0ZW1TaXplLFN0PSEhWi5ub3JtYWxNYXAmJiEhWC5hdHRyaWJ1dGVzLnRhbmdlbnQsQXQ9ISFYLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbixjbj0hIVgubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCxxaT1YLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbj9YLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbi5sZW5ndGg6MCx5aT1aLnRvbmVNYXBwZWQ/Xy50b25lTWFwcGluZzp5cCxwbj1odC5nZXQoWiksUm49cC5zdGF0ZS5saWdodHM7ITAhPT1wZXx8ITAhPT1HZSYmRT09PUJ8fFkuc2V0U3RhdGUoWixFLEU9PT1CJiZaLmlkPT09SSk7bGV0IEV0PSExO1oudmVyc2lvbj09PXBuLl9fdmVyc2lvbj8ocG4ubmVlZHNMaWdodHMmJnBuLmxpZ2h0c1N0YXRlVmVyc2lvbiE9PVJuLnN0YXRlLnZlcnNpb258fHBuLm91dHB1dEVuY29kaW5nIT09cWV8fGFlLmlzSW5zdGFuY2VkTWVzaCYmITE9PT1wbi5pbnN0YW5jaW5nfHwhYWUuaXNJbnN0YW5jZWRNZXNoJiYhMD09PXBuLmluc3RhbmNpbmd8fGFlLmlzU2tpbm5lZE1lc2gmJiExPT09cG4uc2tpbm5pbmd8fCFhZS5pc1NraW5uZWRNZXNoJiYhMD09PXBuLnNraW5uaW5nfHxwbi5lbnZNYXAhPT1ydHx8Wi5mb2cmJnBuLmZvZyE9PXplfHx2b2lkIDAhPT1wbi5udW1DbGlwcGluZ1BsYW5lcyYmKHBuLm51bUNsaXBwaW5nUGxhbmVzIT09WS5udW1QbGFuZXN8fHBuLm51bUludGVyc2VjdGlvbiE9PVkubnVtSW50ZXJzZWN0aW9uKXx8cG4udmVydGV4QWxwaGFzIT09ZHR8fHBuLnZlcnRleFRhbmdlbnRzIT09U3R8fHBuLm1vcnBoVGFyZ2V0cyE9PUF0fHxwbi5tb3JwaE5vcm1hbHMhPT1jbnx8cG4udG9uZU1hcHBpbmchPT15aXx8ITA9PT1vbi5pc1dlYkdMMiYmcG4ubW9ycGhUYXJnZXRzQ291bnQhPT1xaSkmJihFdD0hMCk6KEV0PSEwLHBuLl9fdmVyc2lvbj1aLnZlcnNpb24pO2xldCBnaT1wbi5jdXJyZW50UHJvZ3JhbTshMD09PUV0JiYoZ2k9U18oWixWLGFlKSk7bGV0IHRpPSExLEhuPSExLFFuPSExLHp0PWdpLmdldFVuaWZvcm1zKCksQmk9cG4udW5pZm9ybXM7aWYoQ2UudXNlUHJvZ3JhbShnaS5wcm9ncmFtKSYmKHRpPSEwLEhuPSEwLFFuPSEwKSxaLmlkIT09SSYmKEk9Wi5pZCxIbj0hMCksdGl8fEIhPT1FKXtpZih6dC5zZXRWYWx1ZShrZSwicHJvamVjdGlvbk1hdHJpeCIsRS5wcm9qZWN0aW9uTWF0cml4KSxvbi5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiZ6dC5zZXRWYWx1ZShrZSwibG9nRGVwdGhCdWZGQyIsMi8oTWF0aC5sb2coRS5mYXIrMSkvTWF0aC5MTjIpKSxCIT09RSYmKEI9RSxIbj0hMCxRbj0hMCksWi5pc1NoYWRlck1hdGVyaWFsfHxaLmlzTWVzaFBob25nTWF0ZXJpYWx8fFouaXNNZXNoVG9vbk1hdGVyaWFsfHxaLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fFouZW52TWFwKXtsZXQgX249enQubWFwLmNhbWVyYVBvc2l0aW9uO3ZvaWQgMCE9PV9uJiZfbi5zZXRWYWx1ZShrZSxsdC5zZXRGcm9tTWF0cml4UG9zaXRpb24oRS5tYXRyaXhXb3JsZCkpfShaLmlzTWVzaFBob25nTWF0ZXJpYWx8fFouaXNNZXNoVG9vbk1hdGVyaWFsfHxaLmlzTWVzaExhbWJlcnRNYXRlcmlhbHx8Wi5pc01lc2hCYXNpY01hdGVyaWFsfHxaLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fFouaXNTaGFkZXJNYXRlcmlhbCkmJnp0LnNldFZhbHVlKGtlLCJpc09ydGhvZ3JhcGhpYyIsITA9PT1FLmlzT3J0aG9ncmFwaGljQ2FtZXJhKSwoWi5pc01lc2hQaG9uZ01hdGVyaWFsfHxaLmlzTWVzaFRvb25NYXRlcmlhbHx8Wi5pc01lc2hMYW1iZXJ0TWF0ZXJpYWx8fFouaXNNZXNoQmFzaWNNYXRlcmlhbHx8Wi5pc01lc2hTdGFuZGFyZE1hdGVyaWFsfHxaLmlzU2hhZGVyTWF0ZXJpYWx8fFouaXNTaGFkb3dNYXRlcmlhbHx8YWUuaXNTa2lubmVkTWVzaCkmJnp0LnNldFZhbHVlKGtlLCJ2aWV3TWF0cml4IixFLm1hdHJpeFdvcmxkSW52ZXJzZSl9aWYoYWUuaXNTa2lubmVkTWVzaCl7enQuc2V0T3B0aW9uYWwoa2UsYWUsImJpbmRNYXRyaXgiKSx6dC5zZXRPcHRpb25hbChrZSxhZSwiYmluZE1hdHJpeEludmVyc2UiKTtsZXQgX249YWUuc2tlbGV0b247X24mJihvbi5mbG9hdFZlcnRleFRleHR1cmVzPyhudWxsPT09X24uYm9uZVRleHR1cmUmJl9uLmNvbXB1dGVCb25lVGV4dHVyZSgpLHp0LnNldFZhbHVlKGtlLCJib25lVGV4dHVyZSIsX24uYm9uZVRleHR1cmUsb2UpLHp0LnNldFZhbHVlKGtlLCJib25lVGV4dHVyZVNpemUiLF9uLmJvbmVUZXh0dXJlU2l6ZSkpOnp0LnNldE9wdGlvbmFsKGtlLF9uLCJib25lTWF0cmljZXMiKSl9cmV0dXJuISFYJiYodm9pZCAwIT09WC5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb258fHZvaWQgMCE9PVgubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCkmJnl0LnVwZGF0ZShhZSxYLFosZ2kpLChIbnx8cG4ucmVjZWl2ZVNoYWRvdyE9PWFlLnJlY2VpdmVTaGFkb3cpJiYocG4ucmVjZWl2ZVNoYWRvdz1hZS5yZWNlaXZlU2hhZG93LHp0LnNldFZhbHVlKGtlLCJyZWNlaXZlU2hhZG93IixhZS5yZWNlaXZlU2hhZG93KSksSG4mJih6dC5zZXRWYWx1ZShrZSwidG9uZU1hcHBpbmdFeHBvc3VyZSIsXy50b25lTWFwcGluZ0V4cG9zdXJlKSxwbi5uZWVkc0xpZ2h0cyYmZnVuY3Rpb24oRSxWKXtFLmFtYmllbnRMaWdodENvbG9yLm5lZWRzVXBkYXRlPVYsRS5saWdodFByb2JlLm5lZWRzVXBkYXRlPVYsRS5kaXJlY3Rpb25hbExpZ2h0cy5uZWVkc1VwZGF0ZT1WLEUuZGlyZWN0aW9uYWxMaWdodFNoYWRvd3MubmVlZHNVcGRhdGU9VixFLnBvaW50TGlnaHRzLm5lZWRzVXBkYXRlPVYsRS5wb2ludExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZT1WLEUuc3BvdExpZ2h0cy5uZWVkc1VwZGF0ZT1WLEUuc3BvdExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZT1WLEUucmVjdEFyZWFMaWdodHMubmVlZHNVcGRhdGU9VixFLmhlbWlzcGhlcmVMaWdodHMubmVlZHNVcGRhdGU9Vn0oQmksUW4pLHplJiZaLmZvZyYmc2kucmVmcmVzaEZvZ1VuaWZvcm1zKEJpLHplKSxzaS5yZWZyZXNoTWF0ZXJpYWxVbmlmb3JtcyhCaSxaLEQsQWUsU2UpLE1wLnVwbG9hZChrZSxwbi51bmlmb3Jtc0xpc3QsQmksb2UpKSxaLmlzU2hhZGVyTWF0ZXJpYWwmJiEwPT09Wi51bmlmb3Jtc05lZWRVcGRhdGUmJihNcC51cGxvYWQoa2UscG4udW5pZm9ybXNMaXN0LEJpLG9lKSxaLnVuaWZvcm1zTmVlZFVwZGF0ZT0hMSksWi5pc1Nwcml0ZU1hdGVyaWFsJiZ6dC5zZXRWYWx1ZShrZSwiY2VudGVyIixhZS5jZW50ZXIpLHp0LnNldFZhbHVlKGtlLCJtb2RlbFZpZXdNYXRyaXgiLGFlLm1vZGVsVmlld01hdHJpeCksenQuc2V0VmFsdWUoa2UsIm5vcm1hbE1hdHJpeCIsYWUubm9ybWFsTWF0cml4KSx6dC5zZXRWYWx1ZShrZSwibW9kZWxNYXRyaXgiLGFlLm1hdHJpeFdvcmxkKSxnaX0oRSxWLFgsWixhZSk7Q2Uuc2V0TWF0ZXJpYWwoWixldCk7bGV0IHJ0PVguaW5kZXgsZHQ9WC5hdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKG51bGw9PT1ydCl7aWYodm9pZCAwPT09ZHR8fDA9PT1kdC5jb3VudClyZXR1cm59ZWxzZSBpZigwPT09cnQuY291bnQpcmV0dXJuO2xldCBTdD0xOyEwPT09Wi53aXJlZnJhbWUmJihydD11dC5nZXRXaXJlZnJhbWVBdHRyaWJ1dGUoWCksU3Q9MiksbG4uc2V0dXAoYWUsWixxZSxYLHJ0KTtsZXQgQXQsY249ZW47bnVsbCE9PXJ0JiYoQXQ9X3QuZ2V0KHJ0KSxjbj1MZSxjbi5zZXRJbmRleChBdCkpO2xldCBxaT1udWxsIT09cnQ/cnQuY291bnQ6ZHQuY291bnQseWk9WC5kcmF3UmFuZ2Uuc3RhcnQqU3QscG49WC5kcmF3UmFuZ2UuY291bnQqU3QsUm49bnVsbCE9PXplP3plLnN0YXJ0KlN0OjAsRXQ9bnVsbCE9PXplP3plLmNvdW50KlN0OjEvMCxnaT1NYXRoLm1heCh5aSxSbiksdGk9TWF0aC5taW4ocWkseWkrcG4sUm4rRXQpLTEsSG49TWF0aC5tYXgoMCx0aS1naSsxKTtpZigwIT09SG4pe2lmKGFlLmlzTWVzaCkhMD09PVoud2lyZWZyYW1lPyhDZS5zZXRMaW5lV2lkdGgoWi53aXJlZnJhbWVMaW5ld2lkdGgqcHQoKSksY24uc2V0TW9kZSgxKSk6Y24uc2V0TW9kZSg0KTtlbHNlIGlmKGFlLmlzTGluZSl7bGV0IFFuPVoubGluZXdpZHRoO3ZvaWQgMD09PVFuJiYoUW49MSksQ2Uuc2V0TGluZVdpZHRoKFFuKnB0KCkpLGNuLnNldE1vZGUoYWUuaXNMaW5lU2VnbWVudHM/MTphZS5pc0xpbmVMb29wPzI6Myl9ZWxzZSBhZS5pc1BvaW50cz9jbi5zZXRNb2RlKDApOmFlLmlzU3ByaXRlJiZjbi5zZXRNb2RlKDQpO2lmKGFlLmlzSW5zdGFuY2VkTWVzaCljbi5yZW5kZXJJbnN0YW5jZXMoZ2ksSG4sYWUuY291bnQpO2Vsc2UgaWYoWC5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5KXtsZXQgUW49TWF0aC5taW4oWC5pbnN0YW5jZUNvdW50LFguX21heEluc3RhbmNlQ291bnQpO2NuLnJlbmRlckluc3RhbmNlcyhnaSxIbixRbil9ZWxzZSBjbi5yZW5kZXIoZ2ksSG4pfX0sdGhpcy5jb21waWxlPWZ1bmN0aW9uKEUsVil7cD1MaS5nZXQoRSkscC5pbml0KCksbS5wdXNoKHApLEUudHJhdmVyc2VWaXNpYmxlKGZ1bmN0aW9uKFgpe1guaXNMaWdodCYmWC5sYXllcnMudGVzdChWLmxheWVycykmJihwLnB1c2hMaWdodChYKSxYLmNhc3RTaGFkb3cmJnAucHVzaFNoYWRvdyhYKSl9KSxwLnNldHVwTGlnaHRzKF8ucGh5c2ljYWxseUNvcnJlY3RMaWdodHMpLEUudHJhdmVyc2UoZnVuY3Rpb24oWCl7bGV0IFo9WC5tYXRlcmlhbDtpZihaKWlmKEFycmF5LmlzQXJyYXkoWikpZm9yKGxldCBhZT0wO2FlPFoubGVuZ3RoO2FlKyspU18oWlthZV0sRSxYKTtlbHNlIFNfKFosRSxYKX0pLG0ucG9wKCkscD1udWxsfTtsZXQgV2U9bnVsbDtmdW5jdGlvbiBmaSgpe1dvLnN0b3AoKX1mdW5jdGlvbiBscigpe1dvLnN0YXJ0KCl9bGV0IFdvPW5ldyBtdGU7ZnVuY3Rpb24gdnIoRSxWLFgsWil7aWYoITE9PT1FLnZpc2libGUpcmV0dXJuO2lmKEUubGF5ZXJzLnRlc3QoVi5sYXllcnMpKWlmKEUuaXNHcm91cClYPUUucmVuZGVyT3JkZXI7ZWxzZSBpZihFLmlzTE9EKSEwPT09RS5hdXRvVXBkYXRlJiZFLnVwZGF0ZShWKTtlbHNlIGlmKEUuaXNMaWdodClwLnB1c2hMaWdodChFKSxFLmNhc3RTaGFkb3cmJnAucHVzaFNoYWRvdyhFKTtlbHNlIGlmKEUuaXNTcHJpdGUpe2lmKCFFLmZydXN0dW1DdWxsZWR8fGRlLmludGVyc2VjdHNTcHJpdGUoRSkpe1omJmx0LnNldEZyb21NYXRyaXhQb3NpdGlvbihFLm1hdHJpeFdvcmxkKS5hcHBseU1hdHJpeDQoRmUpO2xldCBldD1hbi51cGRhdGUoRSkscWU9RS5tYXRlcmlhbDtxZS52aXNpYmxlJiZ1LnB1c2goRSxldCxxZSxYLGx0LnosbnVsbCl9fWVsc2UgaWYoKEUuaXNNZXNofHxFLmlzTGluZXx8RS5pc1BvaW50cykmJihFLmlzU2tpbm5lZE1lc2gmJkUuc2tlbGV0b24uZnJhbWUhPT1tdC5yZW5kZXIuZnJhbWUmJihFLnNrZWxldG9uLnVwZGF0ZSgpLEUuc2tlbGV0b24uZnJhbWU9bXQucmVuZGVyLmZyYW1lKSwhRS5mcnVzdHVtQ3VsbGVkfHxkZS5pbnRlcnNlY3RzT2JqZWN0KEUpKSl7WiYmbHQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKEUubWF0cml4V29ybGQpLmFwcGx5TWF0cml4NChGZSk7bGV0IGV0PWFuLnVwZGF0ZShFKSxxZT1FLm1hdGVyaWFsO2lmKEFycmF5LmlzQXJyYXkocWUpKXtsZXQgcnQ9ZXQuZ3JvdXBzO2ZvcihsZXQgZHQ9MCxTdD1ydC5sZW5ndGg7ZHQ8U3Q7ZHQrKyl7bGV0IEF0PXJ0W2R0XSxjbj1xZVtBdC5tYXRlcmlhbEluZGV4XTtjbiYmY24udmlzaWJsZSYmdS5wdXNoKEUsZXQsY24sWCxsdC56LEF0KX19ZWxzZSBxZS52aXNpYmxlJiZ1LnB1c2goRSxldCxxZSxYLGx0LnosbnVsbCl9bGV0IHplPUUuY2hpbGRyZW47Zm9yKGxldCBldD0wLHFlPXplLmxlbmd0aDtldDxxZTtldCsrKXZyKHplW2V0XSxWLFgsWil9ZnVuY3Rpb24gSXMoRSxWLFgsWil7bGV0IGFlPUUub3BhcXVlLHplPUUudHJhbnNtaXNzaXZlLGV0PUUudHJhbnNwYXJlbnQ7cC5zZXR1cExpZ2h0c1ZpZXcoWCksemUubGVuZ3RoPjAmJmZ1bmN0aW9uKEUsVixYKXtudWxsPT09U2UmJihTZT1uZXcoITA9PT1hJiYhMD09PW9uLmlzV2ViR0wyP3d4OnRzKSgxMDI0LDEwMjQse2dlbmVyYXRlTWlwbWFwczohMCx0eXBlOm51bGwhPT1obi5jb252ZXJ0KHEwKT9xMDp4cCxtaW5GaWx0ZXI6JEksbWFnRmlsdGVyOnZvLHdyYXBTOkVzLHdyYXBUOkVzLHVzZVJlbmRlclRvVGV4dHVyZTp3dC5oYXMoIldFQkdMX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSIpfSkpO2xldCBaPV8uZ2V0UmVuZGVyVGFyZ2V0KCk7Xy5zZXRSZW5kZXJUYXJnZXQoU2UpLF8uY2xlYXIoKTtsZXQgYWU9Xy50b25lTWFwcGluZztfLnRvbmVNYXBwaW5nPXlwLHBsKEUsVixYKSxfLnRvbmVNYXBwaW5nPWFlLG9lLnVwZGF0ZU11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0KFNlKSxvZS51cGRhdGVSZW5kZXJUYXJnZXRNaXBtYXAoU2UpLF8uc2V0UmVuZGVyVGFyZ2V0KFopfShhZSxWLFgpLFomJkNlLnZpZXdwb3J0KGVlLmNvcHkoWikpLGFlLmxlbmd0aD4wJiZwbChhZSxWLFgpLHplLmxlbmd0aD4wJiZwbCh6ZSxWLFgpLGV0Lmxlbmd0aD4wJiZwbChldCxWLFgpfWZ1bmN0aW9uIHBsKEUsVixYKXtsZXQgWj0hMD09PVYuaXNTY2VuZT9WLm92ZXJyaWRlTWF0ZXJpYWw6bnVsbDtmb3IobGV0IGFlPTAsemU9RS5sZW5ndGg7YWU8emU7YWUrKyl7bGV0IGV0PUVbYWVdLHFlPWV0Lm9iamVjdCxydD1ldC5nZW9tZXRyeSxkdD1udWxsPT09Wj9ldC5tYXRlcmlhbDpaLFN0PWV0Lmdyb3VwO3FlLmxheWVycy50ZXN0KFgubGF5ZXJzKSYma0EocWUsVixYLHJ0LGR0LFN0KX19ZnVuY3Rpb24ga0EoRSxWLFgsWixhZSx6ZSl7RS5vbkJlZm9yZVJlbmRlcihfLFYsWCxaLGFlLHplKSxFLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKFgubWF0cml4V29ybGRJbnZlcnNlLEUubWF0cml4V29ybGQpLEUubm9ybWFsTWF0cml4LmdldE5vcm1hbE1hdHJpeChFLm1vZGVsVmlld01hdHJpeCksYWUub25CZWZvcmVSZW5kZXIoXyxWLFgsWixFLHplKSwhMD09PWFlLnRyYW5zcGFyZW50JiZhZS5zaWRlPT09WjA/KGFlLnNpZGU9Ym8sYWUubmVlZHNVcGRhdGU9ITAsXy5yZW5kZXJCdWZmZXJEaXJlY3QoWCxWLFosYWUsRSx6ZSksYWUuc2lkZT15eCxhZS5uZWVkc1VwZGF0ZT0hMCxfLnJlbmRlckJ1ZmZlckRpcmVjdChYLFYsWixhZSxFLHplKSxhZS5zaWRlPVowKTpfLnJlbmRlckJ1ZmZlckRpcmVjdChYLFYsWixhZSxFLHplKSxFLm9uQWZ0ZXJSZW5kZXIoXyxWLFgsWixhZSx6ZSl9ZnVuY3Rpb24gU18oRSxWLFgpeyEwIT09Vi5pc1NjZW5lJiYoVj1NdCk7bGV0IFo9aHQuZ2V0KEUpLGFlPXAuc3RhdGUubGlnaHRzLGV0PWFlLnN0YXRlLnZlcnNpb24scWU9eW4uZ2V0UGFyYW1ldGVycyhFLGFlLnN0YXRlLHAuc3RhdGUuc2hhZG93c0FycmF5LFYsWCkscnQ9eW4uZ2V0UHJvZ3JhbUNhY2hlS2V5KHFlKSxkdD1aLnByb2dyYW1zO1ouZW52aXJvbm1lbnQ9RS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP1YuZW52aXJvbm1lbnQ6bnVsbCxaLmZvZz1WLmZvZyxaLmVudk1hcD0oRS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP1llOmF0KS5nZXQoRS5lbnZNYXB8fFouZW52aXJvbm1lbnQpLHZvaWQgMD09PWR0JiYoRS5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixKdCksZHQ9bmV3IE1hcCxaLnByb2dyYW1zPWR0KTtsZXQgU3Q9ZHQuZ2V0KHJ0KTtpZih2b2lkIDAhPT1TdCl7aWYoWi5jdXJyZW50UHJvZ3JhbT09PVN0JiZaLmxpZ2h0c1N0YXRlVmVyc2lvbj09PWV0KXJldHVybiB0QyhFLHFlKSxTdH1lbHNlIHFlLnVuaWZvcm1zPXluLmdldFVuaWZvcm1zKEUpLEUub25CdWlsZChYLHFlLF8pLEUub25CZWZvcmVDb21waWxlKHFlLF8pLFN0PXluLmFjcXVpcmVQcm9ncmFtKHFlLHJ0KSxkdC5zZXQocnQsU3QpLFoudW5pZm9ybXM9cWUudW5pZm9ybXM7bGV0IEF0PVoudW5pZm9ybXM7KCFFLmlzU2hhZGVyTWF0ZXJpYWwmJiFFLmlzUmF3U2hhZGVyTWF0ZXJpYWx8fCEwPT09RS5jbGlwcGluZykmJihBdC5jbGlwcGluZ1BsYW5lcz1ZLnVuaWZvcm0pLHRDKEUscWUpLFoubmVlZHNMaWdodHM9ZnVuY3Rpb24oRSl7cmV0dXJuIEUuaXNNZXNoTGFtYmVydE1hdGVyaWFsfHxFLmlzTWVzaFRvb25NYXRlcmlhbHx8RS5pc01lc2hQaG9uZ01hdGVyaWFsfHxFLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fEUuaXNTaGFkb3dNYXRlcmlhbHx8RS5pc1NoYWRlck1hdGVyaWFsJiYhMD09PUUubGlnaHRzfShFKSxaLmxpZ2h0c1N0YXRlVmVyc2lvbj1ldCxaLm5lZWRzTGlnaHRzJiYoQXQuYW1iaWVudExpZ2h0Q29sb3IudmFsdWU9YWUuc3RhdGUuYW1iaWVudCxBdC5saWdodFByb2JlLnZhbHVlPWFlLnN0YXRlLnByb2JlLEF0LmRpcmVjdGlvbmFsTGlnaHRzLnZhbHVlPWFlLnN0YXRlLmRpcmVjdGlvbmFsLEF0LmRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzLnZhbHVlPWFlLnN0YXRlLmRpcmVjdGlvbmFsU2hhZG93LEF0LnNwb3RMaWdodHMudmFsdWU9YWUuc3RhdGUuc3BvdCxBdC5zcG90TGlnaHRTaGFkb3dzLnZhbHVlPWFlLnN0YXRlLnNwb3RTaGFkb3csQXQucmVjdEFyZWFMaWdodHMudmFsdWU9YWUuc3RhdGUucmVjdEFyZWEsQXQubHRjXzEudmFsdWU9YWUuc3RhdGUucmVjdEFyZWFMVEMxLEF0Lmx0Y18yLnZhbHVlPWFlLnN0YXRlLnJlY3RBcmVhTFRDMixBdC5wb2ludExpZ2h0cy52YWx1ZT1hZS5zdGF0ZS5wb2ludCxBdC5wb2ludExpZ2h0U2hhZG93cy52YWx1ZT1hZS5zdGF0ZS5wb2ludFNoYWRvdyxBdC5oZW1pc3BoZXJlTGlnaHRzLnZhbHVlPWFlLnN0YXRlLmhlbWksQXQuZGlyZWN0aW9uYWxTaGFkb3dNYXAudmFsdWU9YWUuc3RhdGUuZGlyZWN0aW9uYWxTaGFkb3dNYXAsQXQuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgudmFsdWU9YWUuc3RhdGUuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgsQXQuc3BvdFNoYWRvd01hcC52YWx1ZT1hZS5zdGF0ZS5zcG90U2hhZG93TWFwLEF0LnNwb3RTaGFkb3dNYXRyaXgudmFsdWU9YWUuc3RhdGUuc3BvdFNoYWRvd01hdHJpeCxBdC5wb2ludFNoYWRvd01hcC52YWx1ZT1hZS5zdGF0ZS5wb2ludFNoYWRvd01hcCxBdC5wb2ludFNoYWRvd01hdHJpeC52YWx1ZT1hZS5zdGF0ZS5wb2ludFNoYWRvd01hdHJpeCk7bGV0IGNuPVN0LmdldFVuaWZvcm1zKCkscWk9TXAuc2VxV2l0aFZhbHVlKGNuLnNlcSxBdCk7cmV0dXJuIFouY3VycmVudFByb2dyYW09U3QsWi51bmlmb3Jtc0xpc3Q9cWksU3R9ZnVuY3Rpb24gdEMoRSxWKXtsZXQgWD1odC5nZXQoRSk7WC5vdXRwdXRFbmNvZGluZz1WLm91dHB1dEVuY29kaW5nLFguaW5zdGFuY2luZz1WLmluc3RhbmNpbmcsWC5za2lubmluZz1WLnNraW5uaW5nLFgubW9ycGhUYXJnZXRzPVYubW9ycGhUYXJnZXRzLFgubW9ycGhOb3JtYWxzPVYubW9ycGhOb3JtYWxzLFgubW9ycGhUYXJnZXRzQ291bnQ9Vi5tb3JwaFRhcmdldHNDb3VudCxYLm51bUNsaXBwaW5nUGxhbmVzPVYubnVtQ2xpcHBpbmdQbGFuZXMsWC5udW1JbnRlcnNlY3Rpb249Vi5udW1DbGlwSW50ZXJzZWN0aW9uLFgudmVydGV4QWxwaGFzPVYudmVydGV4QWxwaGFzLFgudmVydGV4VGFuZ2VudHM9Vi52ZXJ0ZXhUYW5nZW50cyxYLnRvbmVNYXBwaW5nPVYudG9uZU1hcHBpbmd9V28uc2V0QW5pbWF0aW9uTG9vcChmdW5jdGlvbihFKXtXZSYmV2UoRSl9KSx0eXBlb2Ygd2luZG93PCJ1IiYmV28uc2V0Q29udGV4dCh3aW5kb3cpLHRoaXMuc2V0QW5pbWF0aW9uTG9vcD1mdW5jdGlvbihFKXtXZT1FLE90LnNldEFuaW1hdGlvbkxvb3AoRSksbnVsbD09PUU/V28uc3RvcCgpOldvLnN0YXJ0KCl9LE90LmFkZEV2ZW50TGlzdGVuZXIoInNlc3Npb25zdGFydCIsZmkpLE90LmFkZEV2ZW50TGlzdGVuZXIoInNlc3Npb25lbmQiLGxyKSx0aGlzLnJlbmRlcj1mdW5jdGlvbihFLFYpe2lmKHZvaWQgMD09PVZ8fCEwPT09Vi5pc0NhbWVyYSl7aWYoITAhPT1NKXtpZighMD09PUUuYXV0b1VwZGF0ZSYmRS51cGRhdGVNYXRyaXhXb3JsZCgpLG51bGw9PT1WLnBhcmVudCYmVi51cGRhdGVNYXRyaXhXb3JsZCgpLCEwPT09T3QuZW5hYmxlZCYmITA9PT1PdC5pc1ByZXNlbnRpbmcmJighMD09PU90LmNhbWVyYUF1dG9VcGRhdGUmJk90LnVwZGF0ZUNhbWVyYShWKSxWPU90LmdldENhbWVyYSgpKSwhMD09PUUuaXNTY2VuZSYmRS5vbkJlZm9yZVJlbmRlcihfLEUsVixSKSxwPUxpLmdldChFLG0ubGVuZ3RoKSxwLmluaXQoKSxtLnB1c2gocCksRmUubXVsdGlwbHlNYXRyaWNlcyhWLnByb2plY3Rpb25NYXRyaXgsVi5tYXRyaXhXb3JsZEludmVyc2UpLGRlLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KEZlKSxHZT10aGlzLmxvY2FsQ2xpcHBpbmdFbmFibGVkLHBlPVkuaW5pdCh0aGlzLmNsaXBwaW5nUGxhbmVzLEdlLFYpLHU9TmkuZ2V0KEUsaC5sZW5ndGgpLHUuaW5pdCgpLGgucHVzaCh1KSx2cihFLFYsMCxfLnNvcnRPYmplY3RzKSx1LmZpbmlzaCgpLCEwPT09Xy5zb3J0T2JqZWN0cyYmdS5zb3J0KHJlLGNlKSwhMD09PXBlJiZZLmJlZ2luU2hhZG93cygpLEwucmVuZGVyKHAuc3RhdGUuc2hhZG93c0FycmF5LEUsViksITA9PT1wZSYmWS5lbmRTaGFkb3dzKCksITA9PT10aGlzLmluZm8uYXV0b1Jlc2V0JiZ0aGlzLmluZm8ucmVzZXQoKSxIZS5yZW5kZXIodSxFKSxwLnNldHVwTGlnaHRzKF8ucGh5c2ljYWxseUNvcnJlY3RMaWdodHMpLFYuaXNBcnJheUNhbWVyYSl7bGV0IFo9Vi5jYW1lcmFzO2ZvcihsZXQgYWU9MCx6ZT1aLmxlbmd0aDthZTx6ZTthZSsrKXtsZXQgZXQ9WlthZV07SXModSxFLGV0LGV0LnZpZXdwb3J0KX19ZWxzZSBJcyh1LEUsVik7bnVsbCE9PVImJihvZS51cGRhdGVNdWx0aXNhbXBsZVJlbmRlclRhcmdldChSKSxvZS51cGRhdGVSZW5kZXJUYXJnZXRNaXBtYXAoUikpLCEwPT09RS5pc1NjZW5lJiZFLm9uQWZ0ZXJSZW5kZXIoXyxFLFYpLENlLmJ1ZmZlcnMuZGVwdGguc2V0VGVzdCghMCksQ2UuYnVmZmVycy5kZXB0aC5zZXRNYXNrKCEwKSxDZS5idWZmZXJzLmNvbG9yLnNldE1hc2soITApLENlLnNldFBvbHlnb25PZmZzZXQoITEpLGxuLnJlc2V0RGVmYXVsdFN0YXRlKCksST0tMSxCPW51bGwsbS5wb3AoKSxwPW0ubGVuZ3RoPjA/bVttLmxlbmd0aC0xXTpudWxsLGgucG9wKCksdT1oLmxlbmd0aD4wP2hbaC5sZW5ndGgtMV06bnVsbH19ZWxzZSBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlbmRlcjogY2FtZXJhIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5DYW1lcmEuIil9LHRoaXMuZ2V0QWN0aXZlQ3ViZUZhY2U9ZnVuY3Rpb24oKXtyZXR1cm4geX0sdGhpcy5nZXRBY3RpdmVNaXBtYXBMZXZlbD1mdW5jdGlvbigpe3JldHVybiB4fSx0aGlzLmdldFJlbmRlclRhcmdldD1mdW5jdGlvbigpe3JldHVybiBSfSx0aGlzLnNldFJlbmRlclRhcmdldFRleHR1cmVzPWZ1bmN0aW9uKEUsVixYKXtodC5nZXQoRS50ZXh0dXJlKS5fX3dlYmdsVGV4dHVyZT1WLGh0LmdldChFLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmU9WDtsZXQgWj1odC5nZXQoRSk7Wi5fX2hhc0V4dGVybmFsVGV4dHVyZXM9ITAsWi5fX2hhc0V4dGVybmFsVGV4dHVyZXMmJihaLl9fYXV0b0FsbG9jYXRlRGVwdGhCdWZmZXI9dm9pZCAwPT09WCxaLl9fYXV0b0FsbG9jYXRlRGVwdGhCdWZmZXJ8fEUudXNlUmVuZGVyVG9UZXh0dXJlJiYoY29uc29sZS53YXJuKCJyZW5kZXItdG8tdGV4dHVyZSBleHRlbnNpb24gd2FzIGRpc2FibGVkIGJlY2F1c2UgYW4gZXh0ZXJuYWwgdGV4dHVyZSB3YXMgcHJvdmlkZWQiKSxFLnVzZVJlbmRlclRvVGV4dHVyZT0hMSxFLnVzZVJlbmRlcmJ1ZmZlcj0hMCkpfSx0aGlzLnNldFJlbmRlclRhcmdldEZyYW1lYnVmZmVyPWZ1bmN0aW9uKEUsVil7bGV0IFg9aHQuZ2V0KEUpO1guX193ZWJnbEZyYW1lYnVmZmVyPVYsWC5fX3VzZURlZmF1bHRGcmFtZWJ1ZmZlcj12b2lkIDA9PT1WfSx0aGlzLnNldFJlbmRlclRhcmdldD1mdW5jdGlvbihFLFY9MCxYPTApe1I9RSx5PVYseD1YO2xldCBaPSEwO2lmKEUpe2xldCBydD1odC5nZXQoRSk7dm9pZCAwIT09cnQuX191c2VEZWZhdWx0RnJhbWVidWZmZXI/KENlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKSxaPSExKTp2b2lkIDA9PT1ydC5fX3dlYmdsRnJhbWVidWZmZXI/b2Uuc2V0dXBSZW5kZXJUYXJnZXQoRSk6cnQuX19oYXNFeHRlcm5hbFRleHR1cmVzJiZvZS5yZWJpbmRUZXh0dXJlcyhFLGh0LmdldChFLnRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlLGh0LmdldChFLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmUpfWxldCBhZT1udWxsLHplPSExLGV0PSExO2lmKEUpe2xldCBydD1FLnRleHR1cmU7KHJ0LmlzRGF0YVRleHR1cmUzRHx8cnQuaXNEYXRhVGV4dHVyZTJEQXJyYXkpJiYoZXQ9ITApO2xldCBkdD1odC5nZXQoRSkuX193ZWJnbEZyYW1lYnVmZmVyO0UuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ/KGFlPWR0W1ZdLHplPSEwKTphZT1FLnVzZVJlbmRlcmJ1ZmZlcj9odC5nZXQoRSkuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyOmR0LGVlLmNvcHkoRS52aWV3cG9ydCksUS5jb3B5KEUuc2Npc3Nvciksd2U9RS5zY2lzc29yVGVzdH1lbHNlIGVlLmNvcHkoaGUpLm11bHRpcGx5U2NhbGFyKEQpLmZsb29yKCksUS5jb3B5KF9lKS5tdWx0aXBseVNjYWxhcihEKS5mbG9vcigpLHdlPSQ7aWYoQ2UuYmluZEZyYW1lYnVmZmVyKDM2MTYwLGFlKSYmb24uZHJhd0J1ZmZlcnMmJlomJkNlLmRyYXdCdWZmZXJzKEUsYWUpLENlLnZpZXdwb3J0KGVlKSxDZS5zY2lzc29yKFEpLENlLnNldFNjaXNzb3JUZXN0KHdlKSx6ZSl7bGV0IHJ0PWh0LmdldChFLnRleHR1cmUpO2tlLmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDM2MDY0LDM0MDY5K1YscnQuX193ZWJnbFRleHR1cmUsWCl9ZWxzZSBpZihldCl7bGV0IHJ0PWh0LmdldChFLnRleHR1cmUpO2tlLmZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKDM2MTYwLDM2MDY0LHJ0Ll9fd2ViZ2xUZXh0dXJlLFh8fDAsVnx8MCl9ST0tMX0sdGhpcy5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzPWZ1bmN0aW9uKEUsVixYLFosYWUsemUsZXQpe2lmKCFFfHwhRS5pc1dlYkdMUmVuZGVyVGFyZ2V0KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVuZGVyVGFyZ2V0IGlzIG5vdCBUSFJFRS5XZWJHTFJlbmRlclRhcmdldC4iKTtsZXQgcWU9aHQuZ2V0KEUpLl9fd2ViZ2xGcmFtZWJ1ZmZlcjtpZihFLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0JiZ2b2lkIDAhPT1ldCYmKHFlPXFlW2V0XSkscWUpe0NlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxxZSk7dHJ5e2xldCBydD1FLnRleHR1cmUsZHQ9cnQuZm9ybWF0LFN0PXJ0LnR5cGU7aWYoZHQhPT1DYSYmaG4uY29udmVydChkdCkhPT1rZS5nZXRQYXJhbWV0ZXIoMzU3MzkpKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVuZGVyVGFyZ2V0IGlzIG5vdCBpbiBSR0JBIG9yIGltcGxlbWVudGF0aW9uIGRlZmluZWQgZm9ybWF0LiIpO2xldCBBdD1TdD09PXEwJiYod3QuaGFzKCJFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQiKXx8b24uaXNXZWJHTDImJnd0LmhhcygiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpKTtpZighKFN0PT09eHB8fGhuLmNvbnZlcnQoU3QpPT09a2UuZ2V0UGFyYW1ldGVyKDM1NzM4KXx8U3Q9PT1nbSYmKG9uLmlzV2ViR0wyfHx3dC5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0Iil8fHd0LmhhcygiV0VCR0xfY29sb3JfYnVmZmVyX2Zsb2F0IikpfHxBdCkpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IGluIFVuc2lnbmVkQnl0ZVR5cGUgb3IgaW1wbGVtZW50YXRpb24gZGVmaW5lZCB0eXBlLiIpOzM2MDUzPT09a2UuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cygzNjE2MCk/Vj49MCYmVjw9RS53aWR0aC1aJiZYPj0wJiZYPD1FLmhlaWdodC1hZSYma2UucmVhZFBpeGVscyhWLFgsWixhZSxobi5jb252ZXJ0KGR0KSxobi5jb252ZXJ0KFN0KSx6ZSk6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZWFkUGl4ZWxzIGZyb20gcmVuZGVyVGFyZ2V0IGZhaWxlZC4gRnJhbWVidWZmZXIgbm90IGNvbXBsZXRlLiIpfWZpbmFsbHl7bGV0IHJ0PW51bGwhPT1SP2h0LmdldChSKS5fX3dlYmdsRnJhbWVidWZmZXI6bnVsbDtDZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAscnQpfX19LHRoaXMuY29weUZyYW1lYnVmZmVyVG9UZXh0dXJlPWZ1bmN0aW9uKEUsVixYPTApe2lmKCEwIT09Vi5pc0ZyYW1lYnVmZmVyVGV4dHVyZSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBjb3B5RnJhbWVidWZmZXJUb1RleHR1cmUoKSBjYW4gb25seSBiZSB1c2VkIHdpdGggRnJhbWVidWZmZXJUZXh0dXJlLiIpO2xldCBaPU1hdGgucG93KDIsLVgpLGFlPU1hdGguZmxvb3IoVi5pbWFnZS53aWR0aCpaKSx6ZT1NYXRoLmZsb29yKFYuaW1hZ2UuaGVpZ2h0KlopO29lLnNldFRleHR1cmUyRChWLDApLGtlLmNvcHlUZXhTdWJJbWFnZTJEKDM1NTMsWCwwLDAsRS54LEUueSxhZSx6ZSksQ2UudW5iaW5kVGV4dHVyZSgpfSx0aGlzLmNvcHlUZXh0dXJlVG9UZXh0dXJlPWZ1bmN0aW9uKEUsVixYLFo9MCl7bGV0IGFlPVYuaW1hZ2Uud2lkdGgsemU9Vi5pbWFnZS5oZWlnaHQsZXQ9aG4uY29udmVydChYLmZvcm1hdCkscWU9aG4uY29udmVydChYLnR5cGUpO29lLnNldFRleHR1cmUyRChYLDApLGtlLnBpeGVsU3RvcmVpKDM3NDQwLFguZmxpcFkpLGtlLnBpeGVsU3RvcmVpKDM3NDQxLFgucHJlbXVsdGlwbHlBbHBoYSksa2UucGl4ZWxTdG9yZWkoMzMxNyxYLnVucGFja0FsaWdubWVudCksVi5pc0RhdGFUZXh0dXJlP2tlLnRleFN1YkltYWdlMkQoMzU1MyxaLEUueCxFLnksYWUsemUsZXQscWUsVi5pbWFnZS5kYXRhKTpWLmlzQ29tcHJlc3NlZFRleHR1cmU/a2UuY29tcHJlc3NlZFRleFN1YkltYWdlMkQoMzU1MyxaLEUueCxFLnksVi5taXBtYXBzWzBdLndpZHRoLFYubWlwbWFwc1swXS5oZWlnaHQsZXQsVi5taXBtYXBzWzBdLmRhdGEpOmtlLnRleFN1YkltYWdlMkQoMzU1MyxaLEUueCxFLnksZXQscWUsVi5pbWFnZSksMD09PVomJlguZ2VuZXJhdGVNaXBtYXBzJiZrZS5nZW5lcmF0ZU1pcG1hcCgzNTUzKSxDZS51bmJpbmRUZXh0dXJlKCl9LHRoaXMuY29weVRleHR1cmVUb1RleHR1cmUzRD1mdW5jdGlvbihFLFYsWCxaLGFlPTApe2lmKF8uaXNXZWJHTDFSZW5kZXJlcilyZXR1cm4gdm9pZCBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXIuY29weVRleHR1cmVUb1RleHR1cmUzRDogY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMi4iKTtsZXQgU3QsemU9RS5tYXgueC1FLm1pbi54KzEsZXQ9RS5tYXgueS1FLm1pbi55KzEscWU9RS5tYXguei1FLm1pbi56KzEscnQ9aG4uY29udmVydChaLmZvcm1hdCksZHQ9aG4uY29udmVydChaLnR5cGUpO2lmKFouaXNEYXRhVGV4dHVyZTNEKW9lLnNldFRleHR1cmUzRChaLDApLFN0PTMyODc5O2Vsc2V7aWYoIVouaXNEYXRhVGV4dHVyZTJEQXJyYXkpcmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q6IG9ubHkgc3VwcG9ydHMgVEhSRUUuRGF0YVRleHR1cmUzRCBhbmQgVEhSRUUuRGF0YVRleHR1cmUyREFycmF5LiIpO29lLnNldFRleHR1cmUyREFycmF5KFosMCksU3Q9MzU4NjZ9a2UucGl4ZWxTdG9yZWkoMzc0NDAsWi5mbGlwWSksa2UucGl4ZWxTdG9yZWkoMzc0NDEsWi5wcmVtdWx0aXBseUFscGhhKSxrZS5waXhlbFN0b3JlaSgzMzE3LFoudW5wYWNrQWxpZ25tZW50KTtsZXQgQXQ9a2UuZ2V0UGFyYW1ldGVyKDMzMTQpLGNuPWtlLmdldFBhcmFtZXRlcigzMjg3OCkscWk9a2UuZ2V0UGFyYW1ldGVyKDMzMTYpLHlpPWtlLmdldFBhcmFtZXRlcigzMzE1KSxwbj1rZS5nZXRQYXJhbWV0ZXIoMzI4NzcpLFJuPVguaXNDb21wcmVzc2VkVGV4dHVyZT9YLm1pcG1hcHNbMF06WC5pbWFnZTtrZS5waXhlbFN0b3JlaSgzMzE0LFJuLndpZHRoKSxrZS5waXhlbFN0b3JlaSgzMjg3OCxSbi5oZWlnaHQpLGtlLnBpeGVsU3RvcmVpKDMzMTYsRS5taW4ueCksa2UucGl4ZWxTdG9yZWkoMzMxNSxFLm1pbi55KSxrZS5waXhlbFN0b3JlaSgzMjg3NyxFLm1pbi56KSxYLmlzRGF0YVRleHR1cmV8fFguaXNEYXRhVGV4dHVyZTNEP2tlLnRleFN1YkltYWdlM0QoU3QsYWUsVi54LFYueSxWLnosemUsZXQscWUscnQsZHQsUm4uZGF0YSk6WC5pc0NvbXByZXNzZWRUZXh0dXJlPyhjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXIuY29weVRleHR1cmVUb1RleHR1cmUzRDogdW50ZXN0ZWQgc3VwcG9ydCBmb3IgY29tcHJlc3NlZCBzcmNUZXh0dXJlLiIpLGtlLmNvbXByZXNzZWRUZXhTdWJJbWFnZTNEKFN0LGFlLFYueCxWLnksVi56LHplLGV0LHFlLHJ0LFJuLmRhdGEpKTprZS50ZXhTdWJJbWFnZTNEKFN0LGFlLFYueCxWLnksVi56LHplLGV0LHFlLHJ0LGR0LFJuKSxrZS5waXhlbFN0b3JlaSgzMzE0LEF0KSxrZS5waXhlbFN0b3JlaSgzMjg3OCxjbiksa2UucGl4ZWxTdG9yZWkoMzMxNixxaSksa2UucGl4ZWxTdG9yZWkoMzMxNSx5aSksa2UucGl4ZWxTdG9yZWkoMzI4NzcscG4pLDA9PT1hZSYmWi5nZW5lcmF0ZU1pcG1hcHMmJmtlLmdlbmVyYXRlTWlwbWFwKFN0KSxDZS51bmJpbmRUZXh0dXJlKCl9LHRoaXMuaW5pdFRleHR1cmU9ZnVuY3Rpb24oRSl7b2Uuc2V0VGV4dHVyZTJEKEUsMCksQ2UudW5iaW5kVGV4dHVyZSgpfSx0aGlzLnJlc2V0U3RhdGU9ZnVuY3Rpb24oKXt5PTAseD0wLFI9bnVsbCxDZS5yZXNldCgpLGxuLnJlc2V0KCl9LHR5cGVvZiBfX1RIUkVFX0RFVlRPT0xTX188InUiJiZfX1RIUkVFX0RFVlRPT0xTX18uZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIm9ic2VydmUiLHtkZXRhaWw6dGhpc30pKX1XaS5wcm90b3R5cGUuaXNXZWJHTFJlbmRlcmVyPSEwLGNsYXNzIGV4dGVuZHMgV2l7fS5wcm90b3R5cGUuaXNXZWJHTDFSZW5kZXJlcj0hMDt2YXIgQXg9Y2xhc3N7Y29uc3RydWN0b3IodCxlPTI1ZS01KXt0aGlzLm5hbWU9IiIsdGhpcy5jb2xvcj1uZXcgc24odCksdGhpcy5kZW5zaXR5PWV9Y2xvbmUoKXtyZXR1cm4gbmV3IEF4KHRoaXMuY29sb3IsdGhpcy5kZW5zaXR5KX10b0pTT04oKXtyZXR1cm57dHlwZToiRm9nRXhwMiIsY29sb3I6dGhpcy5jb2xvci5nZXRIZXgoKSxkZW5zaXR5OnRoaXMuZGVuc2l0eX19fTtBeC5wcm90b3R5cGUuaXNGb2dFeHAyPSEwO3ZhciBSeD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9MSxpPTFlMyl7dGhpcy5uYW1lPSIiLHRoaXMuY29sb3I9bmV3IHNuKHQpLHRoaXMubmVhcj1lLHRoaXMuZmFyPWl9Y2xvbmUoKXtyZXR1cm4gbmV3IFJ4KHRoaXMuY29sb3IsdGhpcy5uZWFyLHRoaXMuZmFyKX10b0pTT04oKXtyZXR1cm57dHlwZToiRm9nIixjb2xvcjp0aGlzLmNvbG9yLmdldEhleCgpLG5lYXI6dGhpcy5uZWFyLGZhcjp0aGlzLmZhcn19fTtSeC5wcm90b3R5cGUuaXNGb2c9ITA7dmFyIG5fPWNsYXNzIGV4dGVuZHMgVWl7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iU2NlbmUiLHRoaXMuYmFja2dyb3VuZD1udWxsLHRoaXMuZW52aXJvbm1lbnQ9bnVsbCx0aGlzLmZvZz1udWxsLHRoaXMub3ZlcnJpZGVNYXRlcmlhbD1udWxsLHRoaXMuYXV0b1VwZGF0ZT0hMCx0eXBlb2YgX19USFJFRV9ERVZUT09MU19fPCJ1IiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJvYnNlcnZlIix7ZGV0YWlsOnRoaXN9KSl9Y29weSh0LGUpe3JldHVybiBzdXBlci5jb3B5KHQsZSksbnVsbCE9PXQuYmFja2dyb3VuZCYmKHRoaXMuYmFja2dyb3VuZD10LmJhY2tncm91bmQuY2xvbmUoKSksbnVsbCE9PXQuZW52aXJvbm1lbnQmJih0aGlzLmVudmlyb25tZW50PXQuZW52aXJvbm1lbnQuY2xvbmUoKSksbnVsbCE9PXQuZm9nJiYodGhpcy5mb2c9dC5mb2cuY2xvbmUoKSksbnVsbCE9PXQub3ZlcnJpZGVNYXRlcmlhbCYmKHRoaXMub3ZlcnJpZGVNYXRlcmlhbD10Lm92ZXJyaWRlTWF0ZXJpYWwuY2xvbmUoKSksdGhpcy5hdXRvVXBkYXRlPXQuYXV0b1VwZGF0ZSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlLHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gbnVsbCE9PXRoaXMuZm9nJiYoZS5vYmplY3QuZm9nPXRoaXMuZm9nLnRvSlNPTigpKSxlfX07bl8ucHJvdG90eXBlLmlzU2NlbmU9ITA7dmFyIENtPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5hcnJheT10LHRoaXMuc3RyaWRlPWUsdGhpcy5jb3VudD12b2lkIDAhPT10P3QubGVuZ3RoL2U6MCx0aGlzLnVzYWdlPUN4LHRoaXMudXBkYXRlUmFuZ2U9e29mZnNldDowLGNvdW50Oi0xfSx0aGlzLnZlcnNpb249MCx0aGlzLnV1aWQ9WWwoKX1vblVwbG9hZENhbGxiYWNrKCl7fXNldCBuZWVkc1VwZGF0ZSh0KXshMD09PXQmJnRoaXMudmVyc2lvbisrfXNldFVzYWdlKHQpe3JldHVybiB0aGlzLnVzYWdlPXQsdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLmFycmF5PW5ldyB0LmFycmF5LmNvbnN0cnVjdG9yKHQuYXJyYXkpLHRoaXMuY291bnQ9dC5jb3VudCx0aGlzLnN0cmlkZT10LnN0cmlkZSx0aGlzLnVzYWdlPXQudXNhZ2UsdGhpc31jb3B5QXQodCxlLGkpe3QqPXRoaXMuc3RyaWRlLGkqPWUuc3RyaWRlO2ZvcihsZXQgcj0wLG89dGhpcy5zdHJpZGU7cjxvO3IrKyl0aGlzLmFycmF5W3Qrcl09ZS5hcnJheVtpK3JdO3JldHVybiB0aGlzfXNldCh0LGU9MCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQsZSksdGhpc31jbG9uZSh0KXt2b2lkIDA9PT10LmFycmF5QnVmZmVycyYmKHQuYXJyYXlCdWZmZXJzPXt9KSx2b2lkIDA9PT10aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCYmKHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPVlsKCkpLHZvaWQgMD09PXQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXSYmKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT10aGlzLmFycmF5LnNsaWNlKDApLmJ1ZmZlcik7bGV0IGU9bmV3IHRoaXMuYXJyYXkuY29uc3RydWN0b3IodC5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdKSxpPW5ldyB0aGlzLmNvbnN0cnVjdG9yKGUsdGhpcy5zdHJpZGUpO3JldHVybiBpLnNldFVzYWdlKHRoaXMudXNhZ2UpLGl9b25VcGxvYWQodCl7cmV0dXJuIHRoaXMub25VcGxvYWRDYWxsYmFjaz10LHRoaXN9dG9KU09OKHQpe3JldHVybiB2b2lkIDA9PT10LmFycmF5QnVmZmVycyYmKHQuYXJyYXlCdWZmZXJzPXt9KSx2b2lkIDA9PT10aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCYmKHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPVlsKCkpLHZvaWQgMD09PXQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXSYmKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuZXcgVWludDMyQXJyYXkodGhpcy5hcnJheS5idWZmZXIpKSkse3V1aWQ6dGhpcy51dWlkLGJ1ZmZlcjp0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCx0eXBlOnRoaXMuYXJyYXkuY29uc3RydWN0b3IubmFtZSxzdHJpZGU6dGhpcy5zdHJpZGV9fX07Q20ucHJvdG90eXBlLmlzSW50ZXJsZWF2ZWRCdWZmZXI9ITA7dmFyIFFyPW5ldyBLLE1tPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHI9ITEpe3RoaXMubmFtZT0iIix0aGlzLmRhdGE9dCx0aGlzLml0ZW1TaXplPWUsdGhpcy5vZmZzZXQ9aSx0aGlzLm5vcm1hbGl6ZWQ9ITA9PT1yfWdldCBjb3VudCgpe3JldHVybiB0aGlzLmRhdGEuY291bnR9Z2V0IGFycmF5KCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheX1zZXQgbmVlZHNVcGRhdGUodCl7dGhpcy5kYXRhLm5lZWRzVXBkYXRlPXR9YXBwbHlNYXRyaXg0KHQpe2ZvcihsZXQgZT0wLGk9dGhpcy5kYXRhLmNvdW50O2U8aTtlKyspUXIueD10aGlzLmdldFgoZSksUXIueT10aGlzLmdldFkoZSksUXIuej10aGlzLmdldFooZSksUXIuYXBwbHlNYXRyaXg0KHQpLHRoaXMuc2V0WFlaKGUsUXIueCxRci55LFFyLnopO3JldHVybiB0aGlzfWFwcGx5Tm9ybWFsTWF0cml4KHQpe2ZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKVFyLng9dGhpcy5nZXRYKGUpLFFyLnk9dGhpcy5nZXRZKGUpLFFyLno9dGhpcy5nZXRaKGUpLFFyLmFwcGx5Tm9ybWFsTWF0cml4KHQpLHRoaXMuc2V0WFlaKGUsUXIueCxRci55LFFyLnopO3JldHVybiB0aGlzfXRyYW5zZm9ybURpcmVjdGlvbih0KXtmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylRci54PXRoaXMuZ2V0WChlKSxRci55PXRoaXMuZ2V0WShlKSxRci56PXRoaXMuZ2V0WihlKSxRci50cmFuc2Zvcm1EaXJlY3Rpb24odCksdGhpcy5zZXRYWVooZSxRci54LFFyLnksUXIueik7cmV0dXJuIHRoaXN9c2V0WCh0LGUpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0XT1lLHRoaXN9c2V0WSh0LGUpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzFdPWUsdGhpc31zZXRaKHQsZSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMl09ZSx0aGlzfXNldFcodCxlKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCszXT1lLHRoaXN9Z2V0WCh0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldF19Z2V0WSh0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsxXX1nZXRaKHQpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzJdfWdldFcodCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrM119c2V0WFkodCxlLGkpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbKHQ9dCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KSswXT1lLHRoaXMuZGF0YS5hcnJheVt0KzFdPWksdGhpc31zZXRYWVoodCxlLGkscil7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVsodD10KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQpKzBdPWUsdGhpcy5kYXRhLmFycmF5W3QrMV09aSx0aGlzLmRhdGEuYXJyYXlbdCsyXT1yLHRoaXN9c2V0WFlaVyh0LGUsaSxyLG8pe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbKHQ9dCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KSswXT1lLHRoaXMuZGF0YS5hcnJheVt0KzFdPWksdGhpcy5kYXRhLmFycmF5W3QrMl09cix0aGlzLmRhdGEuYXJyYXlbdCszXT1vLHRoaXN9Y2xvbmUodCl7aWYodm9pZCAwPT09dCl7Y29uc29sZS5sb2coIlRIUkVFLkludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlLmNsb25lKCk6IENsb25pbmcgYW4gaW50ZXJsYXZlZCBidWZmZXIgYXR0cmlidXRlIHdpbGwgZGVpbnRlcmxlYXZlIGJ1ZmZlciBkYXRhLiIpO2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8dGhpcy5jb3VudDtpKyspe2xldCByPWkqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDtmb3IobGV0IG89MDtvPHRoaXMuaXRlbVNpemU7bysrKWUucHVzaCh0aGlzLmRhdGEuYXJyYXlbcitvXSl9cmV0dXJuIG5ldyBBcihuZXcgdGhpcy5hcnJheS5jb25zdHJ1Y3RvcihlKSx0aGlzLml0ZW1TaXplLHRoaXMubm9ybWFsaXplZCl9cmV0dXJuIHZvaWQgMD09PXQuaW50ZXJsZWF2ZWRCdWZmZXJzJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnM9e30pLHZvaWQgMD09PXQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXSYmKHQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXT10aGlzLmRhdGEuY2xvbmUodCkpLG5ldyBNbSh0LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF0sdGhpcy5pdGVtU2l6ZSx0aGlzLm9mZnNldCx0aGlzLm5vcm1hbGl6ZWQpfXRvSlNPTih0KXtpZih2b2lkIDA9PT10KXtjb25zb2xlLmxvZygiVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUudG9KU09OKCk6IFNlcmlhbGl6aW5nIGFuIGludGVybGF2ZWQgYnVmZmVyIGF0dHJpYnV0ZSB3aWxsIGRlaW50ZXJsZWF2ZSBidWZmZXIgZGF0YS4iKTtsZXQgZT1bXTtmb3IobGV0IGk9MDtpPHRoaXMuY291bnQ7aSsrKXtsZXQgcj1pKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQ7Zm9yKGxldCBvPTA7bzx0aGlzLml0ZW1TaXplO28rKyllLnB1c2godGhpcy5kYXRhLmFycmF5W3Irb10pfXJldHVybntpdGVtU2l6ZTp0aGlzLml0ZW1TaXplLHR5cGU6dGhpcy5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLGFycmF5OmUsbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9fXJldHVybiB2b2lkIDA9PT10LmludGVybGVhdmVkQnVmZmVycyYmKHQuaW50ZXJsZWF2ZWRCdWZmZXJzPXt9KSx2b2lkIDA9PT10LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF0mJih0LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF09dGhpcy5kYXRhLnRvSlNPTih0KSkse2lzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU6ITAsaXRlbVNpemU6dGhpcy5pdGVtU2l6ZSxkYXRhOnRoaXMuZGF0YS51dWlkLG9mZnNldDp0aGlzLm9mZnNldCxub3JtYWxpemVkOnRoaXMubm9ybWFsaXplZH19fTtNbS5wcm90b3R5cGUuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZT0hMDt2YXIgRkk9Y2xhc3MgZXh0ZW5kcyBGb3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iU3ByaXRlTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IHNuKDE2Nzc3MjE1KSx0aGlzLm1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLnJvdGF0aW9uPTAsdGhpcy5zaXplQXR0ZW51YXRpb249ITAsdGhpcy50cmFuc3BhcmVudD0hMCx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5yb3RhdGlvbj10LnJvdGF0aW9uLHRoaXMuc2l6ZUF0dGVudWF0aW9uPXQuc2l6ZUF0dGVudWF0aW9uLHRoaXN9fTtGSS5wcm90b3R5cGUuaXNTcHJpdGVNYXRlcmlhbD0hMDt2YXIgQjAsY3g9bmV3IEssVjA9bmV3IEssSDA9bmV3IEssejA9bmV3ICRlLGR4PW5ldyAkZSxTdGU9bmV3IHZuLGxJPW5ldyBLLHV4PW5ldyBLLGNJPW5ldyBLLE5lZT1uZXcgJGUsSDM9bmV3ICRlLExlZT1uZXcgJGU7ZnVuY3Rpb24gZEkobix0LGUsaSxyLG8pe3owLnN1YlZlY3RvcnMobixlKS5hZGRTY2FsYXIoLjUpLm11bHRpcGx5KGkpLHZvaWQgMCE9PXI/KGR4Lng9byp6MC54LXIqejAueSxkeC55PXIqejAueCtvKnowLnkpOmR4LmNvcHkoejApLG4uY29weSh0KSxuLngrPWR4Lngsbi55Kz1keC55LG4uYXBwbHlNYXRyaXg0KFN0ZSl9KGNsYXNzIGV4dGVuZHMgVWl7Y29uc3RydWN0b3IodCl7aWYoc3VwZXIoKSx0aGlzLnR5cGU9IlNwcml0ZSIsdm9pZCAwPT09QjApe0IwPW5ldyBHaTtsZXQgZT1uZXcgRmxvYXQzMkFycmF5KFstLjUsLS41LDAsMCwwLC41LC0uNSwwLDEsMCwuNSwuNSwwLDEsMSwtLjUsLjUsMCwwLDFdKSxpPW5ldyBDbShlLDUpO0IwLnNldEluZGV4KFswLDEsMiwwLDIsM10pLEIwLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBNbShpLDMsMCwhMSkpLEIwLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBNbShpLDIsMywhMSkpfXRoaXMuZ2VvbWV0cnk9QjAsdGhpcy5tYXRlcmlhbD12b2lkIDAhPT10P3Q6bmV3IEZJLHRoaXMuY2VudGVyPW5ldyAkZSguNSwuNSl9cmF5Y2FzdCh0LGUpe251bGw9PT10LmNhbWVyYSYmY29uc29sZS5lcnJvcignVEhSRUUuU3ByaXRlOiAiUmF5Y2FzdGVyLmNhbWVyYSIgbmVlZHMgdG8gYmUgc2V0IGluIG9yZGVyIHRvIHJheWNhc3QgYWdhaW5zdCBzcHJpdGVzLicpLFYwLnNldEZyb21NYXRyaXhTY2FsZSh0aGlzLm1hdHJpeFdvcmxkKSxTdGUuY29weSh0LmNhbWVyYS5tYXRyaXhXb3JsZCksdGhpcy5tb2RlbFZpZXdNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyh0LmNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UsdGhpcy5tYXRyaXhXb3JsZCksSDAuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubW9kZWxWaWV3TWF0cml4KSx0LmNhbWVyYS5pc1BlcnNwZWN0aXZlQ2FtZXJhJiYhMT09PXRoaXMubWF0ZXJpYWwuc2l6ZUF0dGVudWF0aW9uJiZWMC5tdWx0aXBseVNjYWxhcigtSDAueik7bGV0IHIsbyxpPXRoaXMubWF0ZXJpYWwucm90YXRpb247MCE9PWkmJihvPU1hdGguY29zKGkpLHI9TWF0aC5zaW4oaSkpO2xldCBhPXRoaXMuY2VudGVyO2RJKGxJLnNldCgtLjUsLS41LDApLEgwLGEsVjAscixvKSxkSSh1eC5zZXQoLjUsLS41LDApLEgwLGEsVjAscixvKSxkSShjSS5zZXQoLjUsLjUsMCksSDAsYSxWMCxyLG8pLE5lZS5zZXQoMCwwKSxIMy5zZXQoMSwwKSxMZWUuc2V0KDEsMSk7bGV0IHM9dC5yYXkuaW50ZXJzZWN0VHJpYW5nbGUobEksdXgsY0ksITEsY3gpO2lmKG51bGw9PT1zJiYoZEkodXguc2V0KC0uNSwuNSwwKSxIMCxhLFYwLHIsbyksSDMuc2V0KDAsMSkscz10LnJheS5pbnRlcnNlY3RUcmlhbmdsZShsSSxjSSx1eCwhMSxjeCksbnVsbD09PXMpKXJldHVybjtsZXQgbD10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhjeCk7bDx0Lm5lYXJ8fGw+dC5mYXJ8fGUucHVzaCh7ZGlzdGFuY2U6bCxwb2ludDpjeC5jbG9uZSgpLHV2OlZyLmdldFVWKGN4LGxJLHV4LGNJLE5lZSxIMyxMZWUsbmV3ICRlKSxmYWNlOm51bGwsb2JqZWN0OnRoaXN9KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHZvaWQgMCE9PXQuY2VudGVyJiZ0aGlzLmNlbnRlci5jb3B5KHQuY2VudGVyKSx0aGlzLm1hdGVyaWFsPXQubWF0ZXJpYWwsdGhpc319KS5wcm90b3R5cGUuaXNTcHJpdGU9ITA7dmFyIEJlZT1uZXcgSyxWZWU9bmV3IFFpLEhlZT1uZXcgUWksQTJlPW5ldyBLLHplZT1uZXcgdm4sTkk9Y2xhc3MgZXh0ZW5kcyBzb3tjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJTa2lubmVkTWVzaCIsdGhpcy5iaW5kTW9kZT0iYXR0YWNoZWQiLHRoaXMuYmluZE1hdHJpeD1uZXcgdm4sdGhpcy5iaW5kTWF0cml4SW52ZXJzZT1uZXcgdm59Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmJpbmRNb2RlPXQuYmluZE1vZGUsdGhpcy5iaW5kTWF0cml4LmNvcHkodC5iaW5kTWF0cml4KSx0aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkodC5iaW5kTWF0cml4SW52ZXJzZSksdGhpcy5za2VsZXRvbj10LnNrZWxldG9uLHRoaXN9YmluZCh0LGUpe3RoaXMuc2tlbGV0b249dCx2b2lkIDA9PT1lJiYodGhpcy51cGRhdGVNYXRyaXhXb3JsZCghMCksdGhpcy5za2VsZXRvbi5jYWxjdWxhdGVJbnZlcnNlcygpLGU9dGhpcy5tYXRyaXhXb3JsZCksdGhpcy5iaW5kTWF0cml4LmNvcHkoZSksdGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KGUpLmludmVydCgpfXBvc2UoKXt0aGlzLnNrZWxldG9uLnBvc2UoKX1ub3JtYWxpemVTa2luV2VpZ2h0cygpe2xldCB0PW5ldyBRaSxlPXRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5za2luV2VpZ2h0O2ZvcihsZXQgaT0wLHI9ZS5jb3VudDtpPHI7aSsrKXt0Lng9ZS5nZXRYKGkpLHQueT1lLmdldFkoaSksdC56PWUuZ2V0WihpKSx0Lnc9ZS5nZXRXKGkpO2xldCBvPTEvdC5tYW5oYXR0YW5MZW5ndGgoKTtvIT09MS8wP3QubXVsdGlwbHlTY2FsYXIobyk6dC5zZXQoMSwwLDAsMCksZS5zZXRYWVpXKGksdC54LHQueSx0LnosdC53KX19dXBkYXRlTWF0cml4V29ybGQodCl7c3VwZXIudXBkYXRlTWF0cml4V29ybGQodCksImF0dGFjaGVkIj09PXRoaXMuYmluZE1vZGU/dGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpOiJkZXRhY2hlZCI9PT10aGlzLmJpbmRNb2RlP3RoaXMuYmluZE1hdHJpeEludmVyc2UuY29weSh0aGlzLmJpbmRNYXRyaXgpLmludmVydCgpOmNvbnNvbGUud2FybigiVEhSRUUuU2tpbm5lZE1lc2g6IFVucmVjb2duaXplZCBiaW5kTW9kZTogIit0aGlzLmJpbmRNb2RlKX1ib25lVHJhbnNmb3JtKHQsZSl7bGV0IGk9dGhpcy5za2VsZXRvbixyPXRoaXMuZ2VvbWV0cnk7VmVlLmZyb21CdWZmZXJBdHRyaWJ1dGUoci5hdHRyaWJ1dGVzLnNraW5JbmRleCx0KSxIZWUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLmF0dHJpYnV0ZXMuc2tpbldlaWdodCx0KSxCZWUuY29weShlKS5hcHBseU1hdHJpeDQodGhpcy5iaW5kTWF0cml4KSxlLnNldCgwLDAsMCk7Zm9yKGxldCBvPTA7bzw0O28rKyl7bGV0IGE9SGVlLmdldENvbXBvbmVudChvKTtpZigwIT09YSl7bGV0IHM9VmVlLmdldENvbXBvbmVudChvKTt6ZWUubXVsdGlwbHlNYXRyaWNlcyhpLmJvbmVzW3NdLm1hdHJpeFdvcmxkLGkuYm9uZUludmVyc2VzW3NdKSxlLmFkZFNjYWxlZFZlY3RvcihBMmUuY29weShCZWUpLmFwcGx5TWF0cml4NCh6ZWUpLGEpfX1yZXR1cm4gZS5hcHBseU1hdHJpeDQodGhpcy5iaW5kTWF0cml4SW52ZXJzZSl9fTtOSS5wcm90b3R5cGUuaXNTa2lubmVkTWVzaD0hMCxjbGFzcyBleHRlbmRzIFVpe2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkJvbmUifX0ucHJvdG90eXBlLmlzQm9uZT0hMCxjbGFzcyBleHRlbmRzIGxve2NvbnN0cnVjdG9yKHQ9bnVsbCxlPTEsaT0xLHIsbyxhLHMsbCxjPXZvLGQ9dm8sdSxwKXtzdXBlcihudWxsLGEscyxsLGMsZCxyLG8sdSxwKSx0aGlzLmltYWdlPXtkYXRhOnQsd2lkdGg6ZSxoZWlnaHQ6aX0sdGhpcy5tYWdGaWx0ZXI9Yyx0aGlzLm1pbkZpbHRlcj1kLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMuZmxpcFk9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MX19LnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlPSEwO3ZhciBQeD1jbGFzcyBleHRlbmRzIEFye2NvbnN0cnVjdG9yKHQsZSxpLHI9MSl7Im51bWJlciI9PXR5cGVvZiBpJiYocj1pLGk9ITEsY29uc29sZS5lcnJvcigiVEhSRUUuSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlOiBUaGUgY29uc3RydWN0b3Igbm93IGV4cGVjdHMgbm9ybWFsaXplZCBhcyB0aGUgdGhpcmQgYXJndW1lbnQuIikpLHN1cGVyKHQsZSxpKSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9cn1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMubWVzaFBlckF0dHJpYnV0ZT10Lm1lc2hQZXJBdHRyaWJ1dGUsdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC5tZXNoUGVyQXR0cmlidXRlPXRoaXMubWVzaFBlckF0dHJpYnV0ZSx0LmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlPSEwLHR9fTtQeC5wcm90b3R5cGUuaXNJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIFVlZT1uZXcgdm4samVlPW5ldyB2bix1ST1bXSxweD1uZXcgc287KGNsYXNzIGV4dGVuZHMgc297Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKHQsZSksdGhpcy5pbnN0YW5jZU1hdHJpeD1uZXcgUHgobmV3IEZsb2F0MzJBcnJheSgxNippKSwxNiksdGhpcy5pbnN0YW5jZUNvbG9yPW51bGwsdGhpcy5jb3VudD1pLHRoaXMuZnJ1c3R1bUN1bGxlZD0hMX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuaW5zdGFuY2VNYXRyaXguY29weSh0Lmluc3RhbmNlTWF0cml4KSxudWxsIT09dC5pbnN0YW5jZUNvbG9yJiYodGhpcy5pbnN0YW5jZUNvbG9yPXQuaW5zdGFuY2VDb2xvci5jbG9uZSgpKSx0aGlzLmNvdW50PXQuY291bnQsdGhpc31nZXRDb2xvckF0KHQsZSl7ZS5mcm9tQXJyYXkodGhpcy5pbnN0YW5jZUNvbG9yLmFycmF5LDMqdCl9Z2V0TWF0cml4QXQodCxlKXtlLmZyb21BcnJheSh0aGlzLmluc3RhbmNlTWF0cml4LmFycmF5LDE2KnQpfXJheWNhc3QodCxlKXtsZXQgaT10aGlzLm1hdHJpeFdvcmxkLHI9dGhpcy5jb3VudDtpZihweC5nZW9tZXRyeT10aGlzLmdlb21ldHJ5LHB4Lm1hdGVyaWFsPXRoaXMubWF0ZXJpYWwsdm9pZCAwIT09cHgubWF0ZXJpYWwpZm9yKGxldCBvPTA7bzxyO28rKyl7dGhpcy5nZXRNYXRyaXhBdChvLFVlZSksamVlLm11bHRpcGx5TWF0cmljZXMoaSxVZWUpLHB4Lm1hdHJpeFdvcmxkPWplZSxweC5yYXljYXN0KHQsdUkpO2ZvcihsZXQgYT0wLHM9dUkubGVuZ3RoO2E8czthKyspe2xldCBsPXVJW2FdO2wuaW5zdGFuY2VJZD1vLGwub2JqZWN0PXRoaXMsZS5wdXNoKGwpfXVJLmxlbmd0aD0wfX1zZXRDb2xvckF0KHQsZSl7bnVsbD09PXRoaXMuaW5zdGFuY2VDb2xvciYmKHRoaXMuaW5zdGFuY2VDb2xvcj1uZXcgUHgobmV3IEZsb2F0MzJBcnJheSgzKnRoaXMuaW5zdGFuY2VNYXRyaXguY291bnQpLDMpKSxlLnRvQXJyYXkodGhpcy5pbnN0YW5jZUNvbG9yLmFycmF5LDMqdCl9c2V0TWF0cml4QXQodCxlKXtlLnRvQXJyYXkodGhpcy5pbnN0YW5jZU1hdHJpeC5hcnJheSwxNip0KX11cGRhdGVNb3JwaFRhcmdldHMoKXt9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19KS5wcm90b3R5cGUuaXNJbnN0YW5jZWRNZXNoPSEwO3ZhciBHZD1jbGFzcyBleHRlbmRzIEZve2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJMaW5lQmFzaWNNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgc24oMTY3NzcyMTUpLHRoaXMubGluZXdpZHRoPTEsdGhpcy5saW5lY2FwPSJyb3VuZCIsdGhpcy5saW5lam9pbj0icm91bmQiLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubGluZXdpZHRoPXQubGluZXdpZHRoLHRoaXMubGluZWNhcD10LmxpbmVjYXAsdGhpcy5saW5lam9pbj10LmxpbmVqb2luLHRoaXN9fTtHZC5wcm90b3R5cGUuaXNMaW5lQmFzaWNNYXRlcmlhbD0hMDt2YXIgR2VlPW5ldyBLLFdlZT1uZXcgSyxxZWU9bmV3IHZuLHozPW5ldyBFcCxwST1uZXcgU3Asa3g9Y2xhc3MgZXh0ZW5kcyBVaXtjb25zdHJ1Y3Rvcih0PW5ldyBHaSxlPW5ldyBHZCl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmUiLHRoaXMuZ2VvbWV0cnk9dCx0aGlzLm1hdGVyaWFsPWUsdGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMubWF0ZXJpYWw9dC5tYXRlcmlhbCx0aGlzLmdlb21ldHJ5PXQuZ2VvbWV0cnksdGhpc31jb21wdXRlTGluZURpc3RhbmNlcygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KWlmKG51bGw9PT10LmluZGV4KXtsZXQgZT10LmF0dHJpYnV0ZXMucG9zaXRpb24saT1bMF07Zm9yKGxldCByPTEsbz1lLmNvdW50O3I8bztyKyspR2VlLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxyLTEpLFdlZS5mcm9tQnVmZmVyQXR0cmlidXRlKGUsciksaVtyXT1pW3ItMV0saVtyXSs9R2VlLmRpc3RhbmNlVG8oV2VlKTt0LnNldEF0dHJpYnV0ZSgibGluZURpc3RhbmNlIixuZXcgTnIoaSwxKSl9ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLkxpbmUuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKTogQ29tcHV0YXRpb24gb25seSBwb3NzaWJsZSB3aXRoIG5vbi1pbmRleGVkIEJ1ZmZlckdlb21ldHJ5LiIpO2Vsc2UgdC5pc0dlb21ldHJ5JiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKTtyZXR1cm4gdGhpc31yYXljYXN0KHQsZSl7bGV0IGk9dGhpcy5nZW9tZXRyeSxyPXRoaXMubWF0cml4V29ybGQsbz10LnBhcmFtcy5MaW5lLnRocmVzaG9sZCxhPWkuZHJhd1JhbmdlO2lmKG51bGw9PT1pLmJvdW5kaW5nU3BoZXJlJiZpLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLHBJLmNvcHkoaS5ib3VuZGluZ1NwaGVyZSkscEkuYXBwbHlNYXRyaXg0KHIpLHBJLnJhZGl1cys9bywhMT09PXQucmF5LmludGVyc2VjdHNTcGhlcmUocEkpKXJldHVybjtxZWUuY29weShyKS5pbnZlcnQoKSx6My5jb3B5KHQucmF5KS5hcHBseU1hdHJpeDQocWVlKTtsZXQgcz1vLygodGhpcy5zY2FsZS54K3RoaXMuc2NhbGUueSt0aGlzLnNjYWxlLnopLzMpLGw9cypzLGM9bmV3IEssZD1uZXcgSyx1PW5ldyBLLHA9bmV3IEssaD10aGlzLmlzTGluZVNlZ21lbnRzPzI6MTtpZihpLmlzQnVmZmVyR2VvbWV0cnkpe2xldCBtPWkuaW5kZXgsTT1pLmF0dHJpYnV0ZXMucG9zaXRpb247aWYobnVsbCE9PW0pZm9yKGxldCBSPU1hdGgubWF4KDAsYS5zdGFydCksST1NYXRoLm1pbihtLmNvdW50LGEuc3RhcnQrYS5jb3VudCktMTtSPEk7Uis9aCl7bGV0IEI9bS5nZXRYKFIpLGVlPW0uZ2V0WChSKzEpO2lmKGMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShNLEIpLGQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShNLGVlKSx6My5kaXN0YW5jZVNxVG9TZWdtZW50KGMsZCxwLHUpPmwpY29udGludWU7cC5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCk7bGV0IHdlPXQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKHApO3dlPHQubmVhcnx8d2U+dC5mYXJ8fGUucHVzaCh7ZGlzdGFuY2U6d2UscG9pbnQ6dS5jbG9uZSgpLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxpbmRleDpSLGZhY2U6bnVsbCxmYWNlSW5kZXg6bnVsbCxvYmplY3Q6dGhpc30pfWVsc2UgZm9yKGxldCBSPU1hdGgubWF4KDAsYS5zdGFydCksST1NYXRoLm1pbihNLmNvdW50LGEuc3RhcnQrYS5jb3VudCktMTtSPEk7Uis9aCl7aWYoYy5mcm9tQnVmZmVyQXR0cmlidXRlKE0sUiksZC5mcm9tQnVmZmVyQXR0cmlidXRlKE0sUisxKSx6My5kaXN0YW5jZVNxVG9TZWdtZW50KGMsZCxwLHUpPmwpY29udGludWU7cC5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCk7bGV0IGVlPXQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKHApO2VlPHQubmVhcnx8ZWU+dC5mYXJ8fGUucHVzaCh7ZGlzdGFuY2U6ZWUscG9pbnQ6dS5jbG9uZSgpLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxpbmRleDpSLGZhY2U6bnVsbCxmYWNlSW5kZXg6bnVsbCxvYmplY3Q6dGhpc30pfX1lbHNlIGkuaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZS5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX11cGRhdGVNb3JwaFRhcmdldHMoKXtsZXQgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSl7bGV0IGU9dC5tb3JwaEF0dHJpYnV0ZXMsaT1PYmplY3Qua2V5cyhlKTtpZihpLmxlbmd0aD4wKXtsZXQgcj1lW2lbMF1dO2lmKHZvaWQgMCE9PXIpe3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPVtdLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5PXt9O2ZvcihsZXQgbz0wLGE9ci5sZW5ndGg7bzxhO28rKyl7bGV0IHM9cltvXS5uYW1lfHxTdHJpbmcobyk7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMucHVzaCgwKSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtzXT1vfX19fWVsc2V7bGV0IGU9dC5tb3JwaFRhcmdldHM7dm9pZCAwIT09ZSYmZS5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZS51cGRhdGVNb3JwaFRhcmdldHMoKSBkb2VzIG5vdCBzdXBwb3J0IFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19fTtreC5wcm90b3R5cGUuaXNMaW5lPSEwO3ZhciBYZWU9bmV3IEssWWVlPW5ldyBLLE94PWNsYXNzIGV4dGVuZHMga3h7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iTGluZVNlZ21lbnRzIn1jb21wdXRlTGluZURpc3RhbmNlcygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KWlmKG51bGw9PT10LmluZGV4KXtsZXQgZT10LmF0dHJpYnV0ZXMucG9zaXRpb24saT1bXTtmb3IobGV0IHI9MCxvPWUuY291bnQ7cjxvO3IrPTIpWGVlLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxyKSxZZWUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHIrMSksaVtyXT0wPT09cj8wOmlbci0xXSxpW3IrMV09aVtyXStYZWUuZGlzdGFuY2VUbyhZZWUpO3Quc2V0QXR0cmlidXRlKCJsaW5lRGlzdGFuY2UiLG5ldyBOcihpLDEpKX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuTGluZVNlZ21lbnRzLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCk6IENvbXB1dGF0aW9uIG9ubHkgcG9zc2libGUgd2l0aCBub24taW5kZXhlZCBCdWZmZXJHZW9tZXRyeS4iKTtlbHNlIHQuaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZVNlZ21lbnRzLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKTtyZXR1cm4gdGhpc319O094LnByb3RvdHlwZS5pc0xpbmVTZWdtZW50cz0hMCxjbGFzcyBleHRlbmRzIGt4e2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnR5cGU9IkxpbmVMb29wIn19LnByb3RvdHlwZS5pc0xpbmVMb29wPSEwO3ZhciBMST1jbGFzcyBleHRlbmRzIEZve2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJQb2ludHNNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgc24oMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuc2l6ZT0xLHRoaXMuc2l6ZUF0dGVudWF0aW9uPSEwLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLnNpemU9dC5zaXplLHRoaXMuc2l6ZUF0dGVudWF0aW9uPXQuc2l6ZUF0dGVudWF0aW9uLHRoaXN9fTtMSS5wcm90b3R5cGUuaXNQb2ludHNNYXRlcmlhbD0hMDt2YXIgUWVlPW5ldyB2bixwQj1uZXcgRXAsaEk9bmV3IFNwLG1JPW5ldyBLO2Z1bmN0aW9uIFplZShuLHQsZSxpLHIsbyxhKXtsZXQgcz1wQi5kaXN0YW5jZVNxVG9Qb2ludChuKTtpZihzPGUpe2xldCBsPW5ldyBLO3BCLmNsb3Nlc3RQb2ludFRvUG9pbnQobixsKSxsLmFwcGx5TWF0cml4NChpKTtsZXQgYz1yLnJheS5vcmlnaW4uZGlzdGFuY2VUbyhsKTtpZihjPHIubmVhcnx8Yz5yLmZhcilyZXR1cm47by5wdXNoKHtkaXN0YW5jZTpjLGRpc3RhbmNlVG9SYXk6TWF0aC5zcXJ0KHMpLHBvaW50OmwsaW5kZXg6dCxmYWNlOm51bGwsb2JqZWN0OmF9KX19KGNsYXNzIGV4dGVuZHMgVWl7Y29uc3RydWN0b3IodD1uZXcgR2ksZT1uZXcgTEkpe3N1cGVyKCksdGhpcy50eXBlPSJQb2ludHMiLHRoaXMuZ2VvbWV0cnk9dCx0aGlzLm1hdGVyaWFsPWUsdGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMubWF0ZXJpYWw9dC5tYXRlcmlhbCx0aGlzLmdlb21ldHJ5PXQuZ2VvbWV0cnksdGhpc31yYXljYXN0KHQsZSl7bGV0IGk9dGhpcy5nZW9tZXRyeSxyPXRoaXMubWF0cml4V29ybGQsbz10LnBhcmFtcy5Qb2ludHMudGhyZXNob2xkLGE9aS5kcmF3UmFuZ2U7aWYobnVsbD09PWkuYm91bmRpbmdTcGhlcmUmJmkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCksaEkuY29weShpLmJvdW5kaW5nU3BoZXJlKSxoSS5hcHBseU1hdHJpeDQociksaEkucmFkaXVzKz1vLCExPT09dC5yYXkuaW50ZXJzZWN0c1NwaGVyZShoSSkpcmV0dXJuO1FlZS5jb3B5KHIpLmludmVydCgpLHBCLmNvcHkodC5yYXkpLmFwcGx5TWF0cml4NChRZWUpO2xldCBzPW8vKCh0aGlzLnNjYWxlLngrdGhpcy5zY2FsZS55K3RoaXMuc2NhbGUueikvMyksbD1zKnM7aWYoaS5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgYz1pLmluZGV4LHU9aS5hdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKG51bGwhPT1jKWZvcihsZXQgbT1NYXRoLm1heCgwLGEuc3RhcnQpLF89TWF0aC5taW4oYy5jb3VudCxhLnN0YXJ0K2EuY291bnQpO208XzttKyspe2xldCBNPWMuZ2V0WChtKTttSS5mcm9tQnVmZmVyQXR0cmlidXRlKHUsTSksWmVlKG1JLE0sbCxyLHQsZSx0aGlzKX1lbHNlIGZvcihsZXQgbT1NYXRoLm1heCgwLGEuc3RhcnQpLF89TWF0aC5taW4odS5jb3VudCxhLnN0YXJ0K2EuY291bnQpO208XzttKyspbUkuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh1LG0pLFplZShtSSxtLGwscix0LGUsdGhpcyl9ZWxzZSBjb25zb2xlLmVycm9yKCJUSFJFRS5Qb2ludHMucmF5Y2FzdCgpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9dXBkYXRlTW9ycGhUYXJnZXRzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpe2xldCBlPXQubW9ycGhBdHRyaWJ1dGVzLGk9T2JqZWN0LmtleXMoZSk7aWYoaS5sZW5ndGg+MCl7bGV0IHI9ZVtpWzBdXTtpZih2b2lkIDAhPT1yKXt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcz1bXSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT17fTtmb3IobGV0IG89MCxhPXIubGVuZ3RoO288YTtvKyspe2xldCBzPXJbb10ubmFtZXx8U3RyaW5nKG8pO3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnB1c2goMCksdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnlbc109b319fX1lbHNle2xldCBlPXQubW9ycGhUYXJnZXRzO3ZvaWQgMCE9PWUmJmUubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLlBvaW50cy51cGRhdGVNb3JwaFRhcmdldHMoKSBkb2VzIG5vdCBzdXBwb3J0IFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19fSkucHJvdG90eXBlLmlzUG9pbnRzPSEwLGNsYXNzIGV4dGVuZHMgbG97Y29uc3RydWN0b3IodCxlLGkscixvLGEscyxsLGMpe3N1cGVyKHQsZSxpLHIsbyxhLHMsbCxjKSx0aGlzLm1pbkZpbHRlcj12b2lkIDAhPT1hP2E6aWEsdGhpcy5tYWdGaWx0ZXI9dm9pZCAwIT09bz9vOmlhLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExO2xldCBkPXRoaXM7InJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2siaW4gdCYmdC5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrKGZ1bmN0aW9uIHUoKXtkLm5lZWRzVXBkYXRlPSEwLHQucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayh1KX0pfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuaW1hZ2UpLmNvcHkodGhpcyl9dXBkYXRlKCl7bGV0IHQ9dGhpcy5pbWFnZTsicmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayJpbiB0PT0wJiZ0LnJlYWR5U3RhdGU+PXQuSEFWRV9DVVJSRU5UX0RBVEEmJih0aGlzLm5lZWRzVXBkYXRlPSEwKX19LnByb3RvdHlwZS5pc1ZpZGVvVGV4dHVyZT0hMCxjbGFzcyBleHRlbmRzIGxve2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcih7d2lkdGg6dCxoZWlnaHQ6ZX0pLHRoaXMuZm9ybWF0PWksdGhpcy5tYWdGaWx0ZXI9dm8sdGhpcy5taW5GaWx0ZXI9dm8sdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITEsdGhpcy5uZWVkc1VwZGF0ZT0hMH19LnByb3RvdHlwZS5pc0ZyYW1lYnVmZmVyVGV4dHVyZT0hMCxjbGFzcyBleHRlbmRzIGxve2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxhLHMsbCxjLGQsdSxwKXtzdXBlcihudWxsLGEscyxsLGMsZCxyLG8sdSxwKSx0aGlzLmltYWdlPXt3aWR0aDplLGhlaWdodDppfSx0aGlzLm1pcG1hcHM9dCx0aGlzLmZsaXBZPSExLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExfX0ucHJvdG90eXBlLmlzQ29tcHJlc3NlZFRleHR1cmU9ITAsY2xhc3MgZXh0ZW5kcyBsb3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8sYSxzLGwsYyl7c3VwZXIodCxlLGkscixvLGEscyxsLGMpLHRoaXMubmVlZHNVcGRhdGU9ITB9fS5wcm90b3R5cGUuaXNDYW52YXNUZXh0dXJlPSEwO3ZhciBpXz1jbGFzcyBleHRlbmRzIEdpe2NvbnN0cnVjdG9yKHQ9MSxlPTgsaT0wLHI9MipNYXRoLlBJKXtzdXBlcigpLHRoaXMudHlwZT0iQ2lyY2xlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsc2VnbWVudHM6ZSx0aGV0YVN0YXJ0OmksdGhldGFMZW5ndGg6cn0sZT1NYXRoLm1heCgzLGUpO2xldCBvPVtdLGE9W10scz1bXSxsPVtdLGM9bmV3IEssZD1uZXcgJGU7YS5wdXNoKDAsMCwwKSxzLnB1c2goMCwwLDEpLGwucHVzaCguNSwuNSk7Zm9yKGxldCB1PTAscD0zO3U8PWU7dSsrLHArPTMpe2xldCBoPWkrdS9lKnI7Yy54PXQqTWF0aC5jb3MoaCksYy55PXQqTWF0aC5zaW4oaCksYS5wdXNoKGMueCxjLnksYy56KSxzLnB1c2goMCwwLDEpLGQueD0oYVtwXS90KzEpLzIsZC55PShhW3ArMV0vdCsxKS8yLGwucHVzaChkLngsZC55KX1mb3IobGV0IHU9MTt1PD1lO3UrKylvLnB1c2godSx1KzEsMCk7dGhpcy5zZXRJbmRleChvKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBOcihhLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgTnIocywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgTnIobCwyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgaV8odC5yYWRpdXMsdC5zZWdtZW50cyx0LnRoZXRhU3RhcnQsdC50aGV0YUxlbmd0aCl9fSxucz0obmV3IEssbmV3IEssbmV3IEssbmV3IFZyLGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy50eXBlPSJDdXJ2ZSIsdGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9MjAwfWdldFBvaW50KCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQ3VydmU6IC5nZXRQb2ludCgpIG5vdCBpbXBsZW1lbnRlZC4iKSxudWxsfWdldFBvaW50QXQodCxlKXtsZXQgaT10aGlzLmdldFV0b1RtYXBwaW5nKHQpO3JldHVybiB0aGlzLmdldFBvaW50KGksZSl9Z2V0UG9pbnRzKHQ9NSl7bGV0IGU9W107Zm9yKGxldCBpPTA7aTw9dDtpKyspZS5wdXNoKHRoaXMuZ2V0UG9pbnQoaS90KSk7cmV0dXJuIGV9Z2V0U3BhY2VkUG9pbnRzKHQ9NSl7bGV0IGU9W107Zm9yKGxldCBpPTA7aTw9dDtpKyspZS5wdXNoKHRoaXMuZ2V0UG9pbnRBdChpL3QpKTtyZXR1cm4gZX1nZXRMZW5ndGgoKXtsZXQgdD10aGlzLmdldExlbmd0aHMoKTtyZXR1cm4gdFt0Lmxlbmd0aC0xXX1nZXRMZW5ndGhzKHQ9dGhpcy5hcmNMZW5ndGhEaXZpc2lvbnMpe2lmKHRoaXMuY2FjaGVBcmNMZW5ndGhzJiZ0aGlzLmNhY2hlQXJjTGVuZ3Rocy5sZW5ndGg9PT10KzEmJiF0aGlzLm5lZWRzVXBkYXRlKXJldHVybiB0aGlzLmNhY2hlQXJjTGVuZ3Roczt0aGlzLm5lZWRzVXBkYXRlPSExO2xldCBpLGU9W10scj10aGlzLmdldFBvaW50KDApLG89MDtlLnB1c2goMCk7Zm9yKGxldCBhPTE7YTw9dDthKyspaT10aGlzLmdldFBvaW50KGEvdCksbys9aS5kaXN0YW5jZVRvKHIpLGUucHVzaChvKSxyPWk7cmV0dXJuIHRoaXMuY2FjaGVBcmNMZW5ndGhzPWUsZX11cGRhdGVBcmNMZW5ndGhzKCl7dGhpcy5uZWVkc1VwZGF0ZT0hMCx0aGlzLmdldExlbmd0aHMoKX1nZXRVdG9UbWFwcGluZyh0LGUpe2xldCBhLGk9dGhpcy5nZXRMZW5ndGhzKCkscj0wLG89aS5sZW5ndGg7YT1lfHx0Kmlbby0xXTtsZXQgYyxzPTAsbD1vLTE7Zm9yKDtzPD1sOylpZihyPU1hdGguZmxvb3IocysobC1zKS8yKSxjPWlbcl0tYSxjPDApcz1yKzE7ZWxzZXtpZighKGM+MCkpe2w9cjticmVha31sPXItMX1pZihyPWwsaVtyXT09PWEpcmV0dXJuIHIvKG8tMSk7bGV0IGQ9aVtyXTtyZXR1cm4ocisoYS1kKS8oaVtyKzFdLWQpKS8oby0xKX1nZXRUYW5nZW50KHQsZSl7bGV0IHI9dC0xZS00LG89dCsxZS00O3I8MCYmKHI9MCksbz4xJiYobz0xKTtsZXQgYT10aGlzLmdldFBvaW50KHIpLHM9dGhpcy5nZXRQb2ludChvKSxsPWV8fChhLmlzVmVjdG9yMj9uZXcgJGU6bmV3IEspO3JldHVybiBsLmNvcHkocykuc3ViKGEpLm5vcm1hbGl6ZSgpLGx9Z2V0VGFuZ2VudEF0KHQsZSl7bGV0IGk9dGhpcy5nZXRVdG9UbWFwcGluZyh0KTtyZXR1cm4gdGhpcy5nZXRUYW5nZW50KGksZSl9Y29tcHV0ZUZyZW5ldEZyYW1lcyh0LGUpe2xldCBpPW5ldyBLLHI9W10sbz1bXSxhPVtdLHM9bmV3IEssbD1uZXcgdm47Zm9yKGxldCBoPTA7aDw9dDtoKyspcltoXT10aGlzLmdldFRhbmdlbnRBdChoL3QsbmV3IEspO29bMF09bmV3IEssYVswXT1uZXcgSztsZXQgYz1OdW1iZXIuTUFYX1ZBTFVFLGQ9TWF0aC5hYnMoclswXS54KSx1PU1hdGguYWJzKHJbMF0ueSkscD1NYXRoLmFicyhyWzBdLnopO2Q8PWMmJihjPWQsaS5zZXQoMSwwLDApKSx1PD1jJiYoYz11LGkuc2V0KDAsMSwwKSkscDw9YyYmaS5zZXQoMCwwLDEpLHMuY3Jvc3NWZWN0b3JzKHJbMF0saSkubm9ybWFsaXplKCksb1swXS5jcm9zc1ZlY3RvcnMoclswXSxzKSxhWzBdLmNyb3NzVmVjdG9ycyhyWzBdLG9bMF0pO2ZvcihsZXQgaD0xO2g8PXQ7aCsrKXtpZihvW2hdPW9baC0xXS5jbG9uZSgpLGFbaF09YVtoLTFdLmNsb25lKCkscy5jcm9zc1ZlY3RvcnMocltoLTFdLHJbaF0pLHMubGVuZ3RoKCk+TnVtYmVyLkVQU0lMT04pe3Mubm9ybWFsaXplKCk7bGV0IG09TWF0aC5hY29zKGVzKHJbaC0xXS5kb3QocltoXSksLTEsMSkpO29baF0uYXBwbHlNYXRyaXg0KGwubWFrZVJvdGF0aW9uQXhpcyhzLG0pKX1hW2hdLmNyb3NzVmVjdG9ycyhyW2hdLG9baF0pfWlmKCEwPT09ZSl7bGV0IGg9TWF0aC5hY29zKGVzKG9bMF0uZG90KG9bdF0pLC0xLDEpKTtoLz10LHJbMF0uZG90KHMuY3Jvc3NWZWN0b3JzKG9bMF0sb1t0XSkpPjAmJihoPS1oKTtmb3IobGV0IG09MTttPD10O20rKylvW21dLmFwcGx5TWF0cml4NChsLm1ha2VSb3RhdGlvbkF4aXMoclttXSxoKm0pKSxhW21dLmNyb3NzVmVjdG9ycyhyW21dLG9bbV0pfXJldHVybnt0YW5nZW50czpyLG5vcm1hbHM6byxiaW5vcm1hbHM6YX19Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9dC5hcmNMZW5ndGhEaXZpc2lvbnMsdGhpc310b0pTT04oKXtsZXQgdD17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IkN1cnZlIixnZW5lcmF0b3I6IkN1cnZlLnRvSlNPTiJ9fTtyZXR1cm4gdC5hcmNMZW5ndGhEaXZpc2lvbnM9dGhpcy5hcmNMZW5ndGhEaXZpc2lvbnMsdC50eXBlPXRoaXMudHlwZSx0fWZyb21KU09OKHQpe3JldHVybiB0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz10LmFyY0xlbmd0aERpdmlzaW9ucyx0aGlzfX0pLHJfPWNsYXNzIGV4dGVuZHMgbnN7Y29uc3RydWN0b3IodD0wLGU9MCxpPTEscj0xLG89MCxhPTIqTWF0aC5QSSxzPSExLGw9MCl7c3VwZXIoKSx0aGlzLnR5cGU9IkVsbGlwc2VDdXJ2ZSIsdGhpcy5hWD10LHRoaXMuYVk9ZSx0aGlzLnhSYWRpdXM9aSx0aGlzLnlSYWRpdXM9cix0aGlzLmFTdGFydEFuZ2xlPW8sdGhpcy5hRW5kQW5nbGU9YSx0aGlzLmFDbG9ja3dpc2U9cyx0aGlzLmFSb3RhdGlvbj1sfWdldFBvaW50KHQsZSl7bGV0IGk9ZXx8bmV3ICRlLHI9MipNYXRoLlBJLG89dGhpcy5hRW5kQW5nbGUtdGhpcy5hU3RhcnRBbmdsZSxhPU1hdGguYWJzKG8pPE51bWJlci5FUFNJTE9OO2Zvcig7bzwwOylvKz1yO2Zvcig7bz5yOylvLT1yO288TnVtYmVyLkVQU0lMT04mJihvPWE/MDpyKSwhMD09PXRoaXMuYUNsb2Nrd2lzZSYmIWEmJihvPT09cj9vPS1yOm8tPXIpO2xldCBzPXRoaXMuYVN0YXJ0QW5nbGUrdCpvLGw9dGhpcy5hWCt0aGlzLnhSYWRpdXMqTWF0aC5jb3MocyksYz10aGlzLmFZK3RoaXMueVJhZGl1cypNYXRoLnNpbihzKTtpZigwIT09dGhpcy5hUm90YXRpb24pe2xldCBkPU1hdGguY29zKHRoaXMuYVJvdGF0aW9uKSx1PU1hdGguc2luKHRoaXMuYVJvdGF0aW9uKSxwPWwtdGhpcy5hWCxoPWMtdGhpcy5hWTtsPXAqZC1oKnUrdGhpcy5hWCxjPXAqdStoKmQrdGhpcy5hWX1yZXR1cm4gaS5zZXQobCxjKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuYVg9dC5hWCx0aGlzLmFZPXQuYVksdGhpcy54UmFkaXVzPXQueFJhZGl1cyx0aGlzLnlSYWRpdXM9dC55UmFkaXVzLHRoaXMuYVN0YXJ0QW5nbGU9dC5hU3RhcnRBbmdsZSx0aGlzLmFFbmRBbmdsZT10LmFFbmRBbmdsZSx0aGlzLmFDbG9ja3dpc2U9dC5hQ2xvY2t3aXNlLHRoaXMuYVJvdGF0aW9uPXQuYVJvdGF0aW9uLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQuYVg9dGhpcy5hWCx0LmFZPXRoaXMuYVksdC54UmFkaXVzPXRoaXMueFJhZGl1cyx0LnlSYWRpdXM9dGhpcy55UmFkaXVzLHQuYVN0YXJ0QW5nbGU9dGhpcy5hU3RhcnRBbmdsZSx0LmFFbmRBbmdsZT10aGlzLmFFbmRBbmdsZSx0LmFDbG9ja3dpc2U9dGhpcy5hQ2xvY2t3aXNlLHQuYVJvdGF0aW9uPXRoaXMuYVJvdGF0aW9uLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMuYVg9dC5hWCx0aGlzLmFZPXQuYVksdGhpcy54UmFkaXVzPXQueFJhZGl1cyx0aGlzLnlSYWRpdXM9dC55UmFkaXVzLHRoaXMuYVN0YXJ0QW5nbGU9dC5hU3RhcnRBbmdsZSx0aGlzLmFFbmRBbmdsZT10LmFFbmRBbmdsZSx0aGlzLmFDbG9ja3dpc2U9dC5hQ2xvY2t3aXNlLHRoaXMuYVJvdGF0aW9uPXQuYVJvdGF0aW9uLHRoaXN9fTtyXy5wcm90b3R5cGUuaXNFbGxpcHNlQ3VydmU9ITA7dmFyIEJJPWNsYXNzIGV4dGVuZHMgcl97Y29uc3RydWN0b3IodCxlLGkscixvLGEpe3N1cGVyKHQsZSxpLGkscixvLGEpLHRoaXMudHlwZT0iQXJjQ3VydmUifX07ZnVuY3Rpb24gdVYoKXtsZXQgbj0wLHQ9MCxlPTAsaT0wO2Z1bmN0aW9uIHIobyxhLHMsbCl7bj1vLHQ9cyxlPS0zKm8rMyphLTIqcy1sLGk9MipvLTIqYStzK2x9cmV0dXJue2luaXRDYXRtdWxsUm9tOmZ1bmN0aW9uKG8sYSxzLGwsYyl7cihhLHMsYyoocy1vKSxjKihsLWEpKX0saW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tOmZ1bmN0aW9uKG8sYSxzLGwsYyxkLHUpe2xldCBwPShhLW8pL2MtKHMtbykvKGMrZCkrKHMtYSkvZCxoPShzLWEpL2QtKGwtYSkvKGQrdSkrKGwtcykvdTtwKj1kLGgqPWQscihhLHMscCxoKX0sY2FsYzpmdW5jdGlvbihvKXtsZXQgYT1vKm87cmV0dXJuIG4rdCpvK2UqYStpKihhKm8pfX19QkkucHJvdG90eXBlLmlzQXJjQ3VydmU9ITA7dmFyIGZJPW5ldyBLLFUzPW5ldyB1VixqMz1uZXcgdVYsRzM9bmV3IHVWLFZJPWNsYXNzIGV4dGVuZHMgbnN7Y29uc3RydWN0b3IodD1bXSxlPSExLGk9ImNlbnRyaXBldGFsIixyPS41KXtzdXBlcigpLHRoaXMudHlwZT0iQ2F0bXVsbFJvbUN1cnZlMyIsdGhpcy5wb2ludHM9dCx0aGlzLmNsb3NlZD1lLHRoaXMuY3VydmVUeXBlPWksdGhpcy50ZW5zaW9uPXJ9Z2V0UG9pbnQodCxlPW5ldyBLKXtsZXQgYyxkLGk9ZSxyPXRoaXMucG9pbnRzLG89ci5sZW5ndGgsYT0oby0odGhpcy5jbG9zZWQ/MDoxKSkqdCxzPU1hdGguZmxvb3IoYSksbD1hLXM7dGhpcy5jbG9zZWQ/cys9cz4wPzA6KE1hdGguZmxvb3IoTWF0aC5hYnMocykvbykrMSkqbzowPT09bCYmcz09PW8tMSYmKHM9by0yLGw9MSksdGhpcy5jbG9zZWR8fHM+MD9jPXJbKHMtMSklb106KGZJLnN1YlZlY3RvcnMoclswXSxyWzFdKS5hZGQoclswXSksYz1mSSk7bGV0IHU9cltzJW9dLHA9clsocysxKSVvXTtpZih0aGlzLmNsb3NlZHx8cysyPG8/ZD1yWyhzKzIpJW9dOihmSS5zdWJWZWN0b3JzKHJbby0xXSxyW28tMl0pLmFkZChyW28tMV0pLGQ9ZkkpLCJjZW50cmlwZXRhbCI9PT10aGlzLmN1cnZlVHlwZXx8ImNob3JkYWwiPT09dGhpcy5jdXJ2ZVR5cGUpe2xldCBoPSJjaG9yZGFsIj09PXRoaXMuY3VydmVUeXBlPy41Oi4yNSxtPU1hdGgucG93KGMuZGlzdGFuY2VUb1NxdWFyZWQodSksaCksXz1NYXRoLnBvdyh1LmRpc3RhbmNlVG9TcXVhcmVkKHApLGgpLE09TWF0aC5wb3cocC5kaXN0YW5jZVRvU3F1YXJlZChkKSxoKTtfPDFlLTQmJihfPTEpLG08MWUtNCYmKG09XyksTTwxZS00JiYoTT1fKSxVMy5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYy54LHUueCxwLngsZC54LG0sXyxNKSxqMy5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYy55LHUueSxwLnksZC55LG0sXyxNKSxHMy5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYy56LHUueixwLnosZC56LG0sXyxNKX1lbHNlImNhdG11bGxyb20iPT09dGhpcy5jdXJ2ZVR5cGUmJihVMy5pbml0Q2F0bXVsbFJvbShjLngsdS54LHAueCxkLngsdGhpcy50ZW5zaW9uKSxqMy5pbml0Q2F0bXVsbFJvbShjLnksdS55LHAueSxkLnksdGhpcy50ZW5zaW9uKSxHMy5pbml0Q2F0bXVsbFJvbShjLnosdS56LHAueixkLnosdGhpcy50ZW5zaW9uKSk7cmV0dXJuIGkuc2V0KFUzLmNhbGMobCksajMuY2FsYyhsKSxHMy5jYWxjKGwpKSxpfWNvcHkodCl7c3VwZXIuY29weSh0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXQucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXRoaXMucG9pbnRzLnB1c2godC5wb2ludHNbZV0uY2xvbmUoKSk7cmV0dXJuIHRoaXMuY2xvc2VkPXQuY2xvc2VkLHRoaXMuY3VydmVUeXBlPXQuY3VydmVUeXBlLHRoaXMudGVuc2lvbj10LnRlbnNpb24sdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXRoaXMucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXQucG9pbnRzLnB1c2godGhpcy5wb2ludHNbZV0udG9BcnJheSgpKTtyZXR1cm4gdC5jbG9zZWQ9dGhpcy5jbG9zZWQsdC5jdXJ2ZVR5cGU9dGhpcy5jdXJ2ZVR5cGUsdC50ZW5zaW9uPXRoaXMudGVuc2lvbix0fWZyb21KU09OKHQpe3N1cGVyLmZyb21KU09OKHQpLHRoaXMucG9pbnRzPVtdO2ZvcihsZXQgZT0wLGk9dC5wb2ludHMubGVuZ3RoO2U8aTtlKyspe2xldCByPXQucG9pbnRzW2VdO3RoaXMucG9pbnRzLnB1c2goKG5ldyBLKS5mcm9tQXJyYXkocikpfXJldHVybiB0aGlzLmNsb3NlZD10LmNsb3NlZCx0aGlzLmN1cnZlVHlwZT10LmN1cnZlVHlwZSx0aGlzLnRlbnNpb249dC50ZW5zaW9uLHRoaXN9fTtmdW5jdGlvbiBLZWUobix0LGUsaSxyKXtsZXQgbz0uNSooaS10KSxhPS41KihyLWUpLHM9bipuO3JldHVybigyKmUtMippK28rYSkqKG4qcykrKC0zKmUrMyppLTIqby1hKSpzK28qbitlfWZ1bmN0aW9uIGJ4KG4sdCxlLGkpe3JldHVybiBmdW5jdGlvbihuLHQpe2xldCBlPTEtbjtyZXR1cm4gZSplKnR9KG4sdCkrZnVuY3Rpb24obix0KXtyZXR1cm4gMiooMS1uKSpuKnR9KG4sZSkrZnVuY3Rpb24obix0KXtyZXR1cm4gbipuKnR9KG4saSl9ZnVuY3Rpb24gdngobix0LGUsaSxyKXtyZXR1cm4gZnVuY3Rpb24obix0KXtsZXQgZT0xLW47cmV0dXJuIGUqZSplKnR9KG4sdCkrZnVuY3Rpb24obix0KXtsZXQgZT0xLW47cmV0dXJuIDMqZSplKm4qdH0obixlKStmdW5jdGlvbihuLHQpe3JldHVybiAzKigxLW4pKm4qbip0fShuLGkpK2Z1bmN0aW9uKG4sdCl7cmV0dXJuIG4qbipuKnR9KG4scil9VkkucHJvdG90eXBlLmlzQ2F0bXVsbFJvbUN1cnZlMz0hMDt2YXIgRng9Y2xhc3MgZXh0ZW5kcyBuc3tjb25zdHJ1Y3Rvcih0PW5ldyAkZSxlPW5ldyAkZSxpPW5ldyAkZSxyPW5ldyAkZSl7c3VwZXIoKSx0aGlzLnR5cGU9IkN1YmljQmV6aWVyQ3VydmUiLHRoaXMudjA9dCx0aGlzLnYxPWUsdGhpcy52Mj1pLHRoaXMudjM9cn1nZXRQb2ludCh0LGU9bmV3ICRlKXtsZXQgaT1lLHI9dGhpcy52MCxvPXRoaXMudjEsYT10aGlzLnYyLHM9dGhpcy52MztyZXR1cm4gaS5zZXQodngodCxyLngsby54LGEueCxzLngpLHZ4KHQsci55LG8ueSxhLnkscy55KSksaX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjAuY29weSh0LnYwKSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXMudjMuY29weSh0LnYzKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0LnYzPXRoaXMudjMudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXMudjMuZnJvbUFycmF5KHQudjMpLHRoaXN9fTtGeC5wcm90b3R5cGUuaXNDdWJpY0JlemllckN1cnZlPSEwO3ZhciBIST1jbGFzcyBleHRlbmRzIG5ze2NvbnN0cnVjdG9yKHQ9bmV3IEssZT1uZXcgSyxpPW5ldyBLLHI9bmV3IEspe3N1cGVyKCksdGhpcy50eXBlPSJDdWJpY0JlemllckN1cnZlMyIsdGhpcy52MD10LHRoaXMudjE9ZSx0aGlzLnYyPWksdGhpcy52Mz1yfWdldFBvaW50KHQsZT1uZXcgSyl7bGV0IGk9ZSxyPXRoaXMudjAsbz10aGlzLnYxLGE9dGhpcy52MixzPXRoaXMudjM7cmV0dXJuIGkuc2V0KHZ4KHQsci54LG8ueCxhLngscy54KSx2eCh0LHIueSxvLnksYS55LHMueSksdngodCxyLnosby56LGEueixzLnopKSxpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MC5jb3B5KHQudjApLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpcy52My5jb3B5KHQudjMpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjA9dGhpcy52MC50b0FycmF5KCksdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHQudjM9dGhpcy52My50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MC5mcm9tQXJyYXkodC52MCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpcy52My5mcm9tQXJyYXkodC52MyksdGhpc319O0hJLnByb3RvdHlwZS5pc0N1YmljQmV6aWVyQ3VydmUzPSEwO3ZhciBvXz1jbGFzcyBleHRlbmRzIG5ze2NvbnN0cnVjdG9yKHQ9bmV3ICRlLGU9bmV3ICRlKXtzdXBlcigpLHRoaXMudHlwZT0iTGluZUN1cnZlIix0aGlzLnYxPXQsdGhpcy52Mj1lfWdldFBvaW50KHQsZT1uZXcgJGUpe2xldCBpPWU7cmV0dXJuIDE9PT10P2kuY29weSh0aGlzLnYyKTooaS5jb3B5KHRoaXMudjIpLnN1Yih0aGlzLnYxKSxpLm11bHRpcGx5U2NhbGFyKHQpLmFkZCh0aGlzLnYxKSksaX1nZXRQb2ludEF0KHQsZSl7cmV0dXJuIHRoaXMuZ2V0UG9pbnQodCxlKX1nZXRUYW5nZW50KHQsZSl7bGV0IGk9ZXx8bmV3ICRlO3JldHVybiBpLmNvcHkodGhpcy52Mikuc3ViKHRoaXMudjEpLm5vcm1hbGl6ZSgpLGl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzfX07b18ucHJvdG90eXBlLmlzTGluZUN1cnZlPSEwO3ZhciBOeD1jbGFzcyBleHRlbmRzIG5ze2NvbnN0cnVjdG9yKHQ9bmV3ICRlLGU9bmV3ICRlLGk9bmV3ICRlKXtzdXBlcigpLHRoaXMudHlwZT0iUXVhZHJhdGljQmV6aWVyQ3VydmUiLHRoaXMudjA9dCx0aGlzLnYxPWUsdGhpcy52Mj1pfWdldFBvaW50KHQsZT1uZXcgJGUpe2xldCBpPWUscj10aGlzLnYwLG89dGhpcy52MSxhPXRoaXMudjI7cmV0dXJuIGkuc2V0KGJ4KHQsci54LG8ueCxhLngpLGJ4KHQsci55LG8ueSxhLnkpKSxpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MC5jb3B5KHQudjApLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MD10aGlzLnYwLnRvQXJyYXkoKSx0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MC5mcm9tQXJyYXkodC52MCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319O054LnByb3RvdHlwZS5pc1F1YWRyYXRpY0JlemllckN1cnZlPSEwO3ZhciB6ST1jbGFzcyBleHRlbmRzIG5ze2NvbnN0cnVjdG9yKHQ9bmV3IEssZT1uZXcgSyxpPW5ldyBLKXtzdXBlcigpLHRoaXMudHlwZT0iUXVhZHJhdGljQmV6aWVyQ3VydmUzIix0aGlzLnYwPXQsdGhpcy52MT1lLHRoaXMudjI9aX1nZXRQb2ludCh0LGU9bmV3IEspe2xldCBpPWUscj10aGlzLnYwLG89dGhpcy52MSxhPXRoaXMudjI7cmV0dXJuIGkuc2V0KGJ4KHQsci54LG8ueCxhLngpLGJ4KHQsci55LG8ueSxhLnkpLGJ4KHQsci56LG8ueixhLnopKSxpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MC5jb3B5KHQudjApLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MD10aGlzLnYwLnRvQXJyYXkoKSx0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MC5mcm9tQXJyYXkodC52MCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319O3pJLnByb3RvdHlwZS5pc1F1YWRyYXRpY0JlemllckN1cnZlMz0hMDt2YXIgTHg9Y2xhc3MgZXh0ZW5kcyBuc3tjb25zdHJ1Y3Rvcih0PVtdKXtzdXBlcigpLHRoaXMudHlwZT0iU3BsaW5lQ3VydmUiLHRoaXMucG9pbnRzPXR9Z2V0UG9pbnQodCxlPW5ldyAkZSl7bGV0IGk9ZSxyPXRoaXMucG9pbnRzLG89KHIubGVuZ3RoLTEpKnQsYT1NYXRoLmZsb29yKG8pLHM9by1hLGw9clswPT09YT9hOmEtMV0sYz1yW2FdLGQ9clthPnIubGVuZ3RoLTI/ci5sZW5ndGgtMTphKzFdLHU9clthPnIubGVuZ3RoLTM/ci5sZW5ndGgtMTphKzJdO3JldHVybiBpLnNldChLZWUocyxsLngsYy54LGQueCx1LngpLEtlZShzLGwueSxjLnksZC55LHUueSkpLGl9Y29weSh0KXtzdXBlci5jb3B5KHQpLHRoaXMucG9pbnRzPVtdO2ZvcihsZXQgZT0wLGk9dC5wb2ludHMubGVuZ3RoO2U8aTtlKyspdGhpcy5wb2ludHMucHVzaCh0LnBvaW50c1tlXS5jbG9uZSgpKTtyZXR1cm4gdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXRoaXMucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXQucG9pbnRzLnB1c2godGhpcy5wb2ludHNbZV0udG9BcnJheSgpKTtyZXR1cm4gdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXQucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10LnBvaW50c1tlXTt0aGlzLnBvaW50cy5wdXNoKChuZXcgJGUpLmZyb21BcnJheShyKSl9cmV0dXJuIHRoaXN9fTtMeC5wcm90b3R5cGUuaXNTcGxpbmVDdXJ2ZT0hMDt2YXIgRXRlPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLEFyY0N1cnZlOkJJLENhdG11bGxSb21DdXJ2ZTM6VkksQ3ViaWNCZXppZXJDdXJ2ZTpGeCxDdWJpY0JlemllckN1cnZlMzpISSxFbGxpcHNlQ3VydmU6cl8sTGluZUN1cnZlOm9fLExpbmVDdXJ2ZTM6Y2xhc3MgZXh0ZW5kcyBuc3tjb25zdHJ1Y3Rvcih0PW5ldyBLLGU9bmV3IEspe3N1cGVyKCksdGhpcy50eXBlPSJMaW5lQ3VydmUzIix0aGlzLmlzTGluZUN1cnZlMz0hMCx0aGlzLnYxPXQsdGhpcy52Mj1lfWdldFBvaW50KHQsZT1uZXcgSyl7bGV0IGk9ZTtyZXR1cm4gMT09PXQ/aS5jb3B5KHRoaXMudjIpOihpLmNvcHkodGhpcy52Mikuc3ViKHRoaXMudjEpLGkubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMudjEpKSxpfWdldFBvaW50QXQodCxlKXtyZXR1cm4gdGhpcy5nZXRQb2ludCh0LGUpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319LFF1YWRyYXRpY0JlemllckN1cnZlOk54LFF1YWRyYXRpY0JlemllckN1cnZlMzp6SSxTcGxpbmVDdXJ2ZTpMeH0pLHZCPWNsYXNzIGV4dGVuZHMgbnN7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iQ3VydmVQYXRoIix0aGlzLmN1cnZlcz1bXSx0aGlzLmF1dG9DbG9zZT0hMX1hZGQodCl7dGhpcy5jdXJ2ZXMucHVzaCh0KX1jbG9zZVBhdGgoKXtsZXQgdD10aGlzLmN1cnZlc1swXS5nZXRQb2ludCgwKSxlPXRoaXMuY3VydmVzW3RoaXMuY3VydmVzLmxlbmd0aC0xXS5nZXRQb2ludCgxKTt0LmVxdWFscyhlKXx8dGhpcy5jdXJ2ZXMucHVzaChuZXcgb18oZSx0KSl9Z2V0UG9pbnQodCxlKXtsZXQgaT10KnRoaXMuZ2V0TGVuZ3RoKCkscj10aGlzLmdldEN1cnZlTGVuZ3RocygpLG89MDtmb3IoO288ci5sZW5ndGg7KXtpZihyW29dPj1pKXtsZXQgYT1yW29dLWkscz10aGlzLmN1cnZlc1tvXSxsPXMuZ2V0TGVuZ3RoKCk7cmV0dXJuIHMuZ2V0UG9pbnRBdCgwPT09bD8wOjEtYS9sLGUpfW8rK31yZXR1cm4gbnVsbH1nZXRMZW5ndGgoKXtsZXQgdD10aGlzLmdldEN1cnZlTGVuZ3RocygpO3JldHVybiB0W3QubGVuZ3RoLTFdfXVwZGF0ZUFyY0xlbmd0aHMoKXt0aGlzLm5lZWRzVXBkYXRlPSEwLHRoaXMuY2FjaGVMZW5ndGhzPW51bGwsdGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKX1nZXRDdXJ2ZUxlbmd0aHMoKXtpZih0aGlzLmNhY2hlTGVuZ3RocyYmdGhpcy5jYWNoZUxlbmd0aHMubGVuZ3RoPT09dGhpcy5jdXJ2ZXMubGVuZ3RoKXJldHVybiB0aGlzLmNhY2hlTGVuZ3RocztsZXQgdD1bXSxlPTA7Zm9yKGxldCBpPTAscj10aGlzLmN1cnZlcy5sZW5ndGg7aTxyO2krKyllKz10aGlzLmN1cnZlc1tpXS5nZXRMZW5ndGgoKSx0LnB1c2goZSk7cmV0dXJuIHRoaXMuY2FjaGVMZW5ndGhzPXQsdH1nZXRTcGFjZWRQb2ludHModD00MCl7bGV0IGU9W107Zm9yKGxldCBpPTA7aTw9dDtpKyspZS5wdXNoKHRoaXMuZ2V0UG9pbnQoaS90KSk7cmV0dXJuIHRoaXMuYXV0b0Nsb3NlJiZlLnB1c2goZVswXSksZX1nZXRQb2ludHModD0xMil7bGV0IGksZT1bXTtmb3IobGV0IHI9MCxvPXRoaXMuY3VydmVzO3I8by5sZW5ndGg7cisrKXtsZXQgYT1vW3JdLGw9YS5nZXRQb2ludHMoYSYmYS5pc0VsbGlwc2VDdXJ2ZT8yKnQ6YSYmKGEuaXNMaW5lQ3VydmV8fGEuaXNMaW5lQ3VydmUzKT8xOmEmJmEuaXNTcGxpbmVDdXJ2ZT90KmEucG9pbnRzLmxlbmd0aDp0KTtmb3IobGV0IGM9MDtjPGwubGVuZ3RoO2MrKyl7bGV0IGQ9bFtjXTtpJiZpLmVxdWFscyhkKXx8KGUucHVzaChkKSxpPWQpfX1yZXR1cm4gdGhpcy5hdXRvQ2xvc2UmJmUubGVuZ3RoPjEmJiFlW2UubGVuZ3RoLTFdLmVxdWFscyhlWzBdKSYmZS5wdXNoKGVbMF0pLGV9Y29weSh0KXtzdXBlci5jb3B5KHQpLHRoaXMuY3VydmVzPVtdO2ZvcihsZXQgZT0wLGk9dC5jdXJ2ZXMubGVuZ3RoO2U8aTtlKyspdGhpcy5jdXJ2ZXMucHVzaCh0LmN1cnZlc1tlXS5jbG9uZSgpKTtyZXR1cm4gdGhpcy5hdXRvQ2xvc2U9dC5hdXRvQ2xvc2UsdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LmF1dG9DbG9zZT10aGlzLmF1dG9DbG9zZSx0LmN1cnZlcz1bXTtmb3IobGV0IGU9MCxpPXRoaXMuY3VydmVzLmxlbmd0aDtlPGk7ZSsrKXQuY3VydmVzLnB1c2godGhpcy5jdXJ2ZXNbZV0udG9KU09OKCkpO3JldHVybiB0fWZyb21KU09OKHQpe3N1cGVyLmZyb21KU09OKHQpLHRoaXMuYXV0b0Nsb3NlPXQuYXV0b0Nsb3NlLHRoaXMuY3VydmVzPVtdO2ZvcihsZXQgZT0wLGk9dC5jdXJ2ZXMubGVuZ3RoO2U8aTtlKyspe2xldCByPXQuY3VydmVzW2VdO3RoaXMuY3VydmVzLnB1c2goKG5ldyBFdGVbci50eXBlXSkuZnJvbUpTT04ocikpfXJldHVybiB0aGlzfX0sQng9Y2xhc3MgZXh0ZW5kcyB2Qntjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iUGF0aCIsdGhpcy5jdXJyZW50UG9pbnQ9bmV3ICRlLHQmJnRoaXMuc2V0RnJvbVBvaW50cyh0KX1zZXRGcm9tUG9pbnRzKHQpe3RoaXMubW92ZVRvKHRbMF0ueCx0WzBdLnkpO2ZvcihsZXQgZT0xLGk9dC5sZW5ndGg7ZTxpO2UrKyl0aGlzLmxpbmVUbyh0W2VdLngsdFtlXS55KTtyZXR1cm4gdGhpc31tb3ZlVG8odCxlKXtyZXR1cm4gdGhpcy5jdXJyZW50UG9pbnQuc2V0KHQsZSksdGhpc31saW5lVG8odCxlKXtsZXQgaT1uZXcgb18odGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgJGUodCxlKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2goaSksdGhpcy5jdXJyZW50UG9pbnQuc2V0KHQsZSksdGhpc31xdWFkcmF0aWNDdXJ2ZVRvKHQsZSxpLHIpe2xldCBvPW5ldyBOeCh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyAkZSh0LGUpLG5ldyAkZShpLHIpKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChvKSx0aGlzLmN1cnJlbnRQb2ludC5zZXQoaSxyKSx0aGlzfWJlemllckN1cnZlVG8odCxlLGkscixvLGEpe2xldCBzPW5ldyBGeCh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyAkZSh0LGUpLG5ldyAkZShpLHIpLG5ldyAkZShvLGEpKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChzKSx0aGlzLmN1cnJlbnRQb2ludC5zZXQobyxhKSx0aGlzfXNwbGluZVRocnUodCl7bGV0IGU9W3RoaXMuY3VycmVudFBvaW50LmNsb25lKCldLmNvbmNhdCh0KSxpPW5ldyBMeChlKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChpKSx0aGlzLmN1cnJlbnRQb2ludC5jb3B5KHRbdC5sZW5ndGgtMV0pLHRoaXN9YXJjKHQsZSxpLHIsbyxhKXtyZXR1cm4gdGhpcy5hYnNhcmModCt0aGlzLmN1cnJlbnRQb2ludC54LGUrdGhpcy5jdXJyZW50UG9pbnQueSxpLHIsbyxhKSx0aGlzfWFic2FyYyh0LGUsaSxyLG8sYSl7cmV0dXJuIHRoaXMuYWJzZWxsaXBzZSh0LGUsaSxpLHIsbyxhKSx0aGlzfWVsbGlwc2UodCxlLGkscixvLGEscyxsKXtyZXR1cm4gdGhpcy5hYnNlbGxpcHNlKHQrdGhpcy5jdXJyZW50UG9pbnQueCxlK3RoaXMuY3VycmVudFBvaW50LnksaSxyLG8sYSxzLGwpLHRoaXN9YWJzZWxsaXBzZSh0LGUsaSxyLG8sYSxzLGwpe2xldCBjPW5ldyByXyh0LGUsaSxyLG8sYSxzLGwpO2lmKHRoaXMuY3VydmVzLmxlbmd0aD4wKXtsZXQgdT1jLmdldFBvaW50KDApO3UuZXF1YWxzKHRoaXMuY3VycmVudFBvaW50KXx8dGhpcy5saW5lVG8odS54LHUueSl9dGhpcy5jdXJ2ZXMucHVzaChjKTtsZXQgZD1jLmdldFBvaW50KDEpO3JldHVybiB0aGlzLmN1cnJlbnRQb2ludC5jb3B5KGQpLHRoaXN9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmN1cnJlbnRQb2ludC5jb3B5KHQuY3VycmVudFBvaW50KSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LmN1cnJlbnRQb2ludD10aGlzLmN1cnJlbnRQb2ludC50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy5jdXJyZW50UG9pbnQuZnJvbUFycmF5KHQuY3VycmVudFBvaW50KSx0aGlzfX0sV2Q9Y2xhc3MgZXh0ZW5kcyBCeHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLnV1aWQ9WWwoKSx0aGlzLnR5cGU9IlNoYXBlIix0aGlzLmhvbGVzPVtdfWdldFBvaW50c0hvbGVzKHQpe2xldCBlPVtdO2ZvcihsZXQgaT0wLHI9dGhpcy5ob2xlcy5sZW5ndGg7aTxyO2krKyllW2ldPXRoaXMuaG9sZXNbaV0uZ2V0UG9pbnRzKHQpO3JldHVybiBlfWV4dHJhY3RQb2ludHModCl7cmV0dXJue3NoYXBlOnRoaXMuZ2V0UG9pbnRzKHQpLGhvbGVzOnRoaXMuZ2V0UG9pbnRzSG9sZXModCl9fWNvcHkodCl7c3VwZXIuY29weSh0KSx0aGlzLmhvbGVzPVtdO2ZvcihsZXQgZT0wLGk9dC5ob2xlcy5sZW5ndGg7ZTxpO2UrKyl0aGlzLmhvbGVzLnB1c2godC5ob2xlc1tlXS5jbG9uZSgpKTtyZXR1cm4gdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LnV1aWQ9dGhpcy51dWlkLHQuaG9sZXM9W107Zm9yKGxldCBlPTAsaT10aGlzLmhvbGVzLmxlbmd0aDtlPGk7ZSsrKXQuaG9sZXMucHVzaCh0aGlzLmhvbGVzW2VdLnRvSlNPTigpKTtyZXR1cm4gdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLnV1aWQ9dC51dWlkLHRoaXMuaG9sZXM9W107Zm9yKGxldCBlPTAsaT10LmhvbGVzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10LmhvbGVzW2VdO3RoaXMuaG9sZXMucHVzaCgobmV3IEJ4KS5mcm9tSlNPTihyKSl9cmV0dXJuIHRoaXN9fTtmdW5jdGlvbiBUdGUobix0LGUsaSxyKXtsZXQgbyxhO2lmKHI9PT1mdW5jdGlvbihuLHQsZSxpKXtsZXQgcj0wO2ZvcihsZXQgbz10LGE9ZS1pO288ZTtvKz1pKXIrPShuW2FdLW5bb10pKihuW28rMV0rblthKzFdKSxhPW87cmV0dXJuIHJ9KG4sdCxlLGkpPjApZm9yKG89dDtvPGU7bys9aSlhPUplZShvLG5bb10sbltvKzFdLGEpO2Vsc2UgZm9yKG89ZS1pO28+PXQ7by09aSlhPUplZShvLG5bb10sbltvKzFdLGEpO3JldHVybiBhJiZ0QShhLGEubmV4dCkmJih6eChhKSxhPWEubmV4dCksYX1mdW5jdGlvbiBEcChuLHQpe2lmKCFuKXJldHVybiBuO3R8fCh0PW4pO2xldCBpLGU9bjtkb3tpZihpPSExLGUuc3RlaW5lcnx8IXRBKGUsZS5uZXh0KSYmMCE9PUZyKGUucHJldixlLGUubmV4dCkpZT1lLm5leHQ7ZWxzZXtpZih6eChlKSxlPXQ9ZS5wcmV2LGU9PT1lLm5leHQpYnJlYWs7aT0hMH19d2hpbGUoaXx8ZSE9PXQpO3JldHVybiB0fWZ1bmN0aW9uIFZ4KG4sdCxlLGkscixvLGEpe2lmKCFuKXJldHVybjshYSYmbyYmZnVuY3Rpb24obix0LGUsaSl7bGV0IHI9bjtkb3tudWxsPT09ci56JiYoci56PXlCKHIueCxyLnksdCxlLGkpKSxyLnByZXZaPXIucHJldixyLm5leHRaPXIubmV4dCxyPXIubmV4dH13aGlsZShyIT09bik7ci5wcmV2Wi5uZXh0Wj1udWxsLHIucHJldlo9bnVsbCxmdW5jdGlvbihuKXtsZXQgdCxlLGkscixvLGEscyxsLGM9MTtkb3tmb3IoZT1uLG49bnVsbCxvPW51bGwsYT0wO2U7KXtmb3IoYSsrLGk9ZSxzPTAsdD0wO3Q8YyYmKHMrKyxpPWkubmV4dFosaSk7dCsrKTtmb3IobD1jO3M+MHx8bD4wJiZpOykwIT09cyYmKDA9PT1sfHwhaXx8ZS56PD1pLnopPyhyPWUsZT1lLm5leHRaLHMtLSk6KHI9aSxpPWkubmV4dFosbC0tKSxvP28ubmV4dFo9cjpuPXIsci5wcmV2Wj1vLG89cjtlPWl9by5uZXh0Wj1udWxsLGMqPTJ9d2hpbGUoYT4xKX0ocil9KG4saSxyLG8pO2xldCBsLGMscz1uO2Zvcig7bi5wcmV2IT09bi5uZXh0OylpZihsPW4ucHJldixjPW4ubmV4dCxvP0gyZShuLGkscixvKTpWMmUobikpdC5wdXNoKGwuaS9lKSx0LnB1c2gobi5pL2UpLHQucHVzaChjLmkvZSksengobiksbj1jLm5leHQscz1jLm5leHQ7ZWxzZSBpZigobj1jKT09PXMpe2E/MT09PWE/Vngobj16MmUoRHAobiksdCxlKSx0LGUsaSxyLG8sMik6Mj09PWEmJlUyZShuLHQsZSxpLHIsbyk6VngoRHAobiksdCxlLGkscixvLDEpO2JyZWFrfX1mdW5jdGlvbiBWMmUobil7bGV0IHQ9bi5wcmV2LGU9bixpPW4ubmV4dDtpZihGcih0LGUsaSk+PTApcmV0dXJuITE7bGV0IHI9bi5uZXh0Lm5leHQ7Zm9yKDtyIT09bi5wcmV2Oyl7aWYoVzAodC54LHQueSxlLngsZS55LGkueCxpLnksci54LHIueSkmJkZyKHIucHJldixyLHIubmV4dCk+PTApcmV0dXJuITE7cj1yLm5leHR9cmV0dXJuITB9ZnVuY3Rpb24gSDJlKG4sdCxlLGkpe2xldCByPW4ucHJldixvPW4sYT1uLm5leHQ7aWYoRnIocixvLGEpPj0wKXJldHVybiExO2xldCBjPXIueD5vLng/ci54PmEueD9yLng6YS54Om8ueD5hLng/by54OmEueCxkPXIueT5vLnk/ci55PmEueT9yLnk6YS55Om8ueT5hLnk/by55OmEueSx1PXlCKHIueDxvLng/ci54PGEueD9yLng6YS54Om8ueDxhLng/by54OmEueCxyLnk8by55P3IueTxhLnk/ci55OmEueTpvLnk8YS55P28ueTphLnksdCxlLGkpLHA9eUIoYyxkLHQsZSxpKSxoPW4ucHJldlosbT1uLm5leHRaO2Zvcig7aCYmaC56Pj11JiZtJiZtLno8PXA7KXtpZihoIT09bi5wcmV2JiZoIT09bi5uZXh0JiZXMChyLngsci55LG8ueCxvLnksYS54LGEueSxoLngsaC55KSYmRnIoaC5wcmV2LGgsaC5uZXh0KT49MHx8KGg9aC5wcmV2WixtIT09bi5wcmV2JiZtIT09bi5uZXh0JiZXMChyLngsci55LG8ueCxvLnksYS54LGEueSxtLngsbS55KSYmRnIobS5wcmV2LG0sbS5uZXh0KT49MCkpcmV0dXJuITE7bT1tLm5leHRafWZvcig7aCYmaC56Pj11Oyl7aWYoaCE9PW4ucHJldiYmaCE9PW4ubmV4dCYmVzAoci54LHIueSxvLngsby55LGEueCxhLnksaC54LGgueSkmJkZyKGgucHJldixoLGgubmV4dCk+PTApcmV0dXJuITE7aD1oLnByZXZafWZvcig7bSYmbS56PD1wOyl7aWYobSE9PW4ucHJldiYmbSE9PW4ubmV4dCYmVzAoci54LHIueSxvLngsby55LGEueCxhLnksbS54LG0ueSkmJkZyKG0ucHJldixtLG0ubmV4dCk+PTApcmV0dXJuITE7bT1tLm5leHRafXJldHVybiEwfWZ1bmN0aW9uIHoyZShuLHQsZSl7bGV0IGk9bjtkb3tsZXQgcj1pLnByZXYsbz1pLm5leHQubmV4dDshdEEocixvKSYmRHRlKHIsaSxpLm5leHQsbykmJkh4KHIsbykmJkh4KG8scikmJih0LnB1c2goci5pL2UpLHQucHVzaChpLmkvZSksdC5wdXNoKG8uaS9lKSx6eChpKSx6eChpLm5leHQpLGk9bj1vKSxpPWkubmV4dH13aGlsZShpIT09bik7cmV0dXJuIERwKGkpfWZ1bmN0aW9uIFUyZShuLHQsZSxpLHIsbyl7bGV0IGE9bjtkb3tsZXQgcz1hLm5leHQubmV4dDtmb3IoO3MhPT1hLnByZXY7KXtpZihhLmkhPT1zLmkmJksyZShhLHMpKXtsZXQgbD1JdGUoYSxzKTtyZXR1cm4gYT1EcChhLGEubmV4dCksbD1EcChsLGwubmV4dCksVngoYSx0LGUsaSxyLG8pLHZvaWQgVngobCx0LGUsaSxyLG8pfXM9cy5uZXh0fWE9YS5uZXh0fXdoaWxlKGEhPT1uKX1mdW5jdGlvbiBHMmUobix0KXtyZXR1cm4gbi54LXQueH1mdW5jdGlvbiBXMmUobix0KXtpZih0PWZ1bmN0aW9uKG4sdCl7bGV0IGEsZT10LGk9bi54LHI9bi55LG89LTEvMDtkb3tpZihyPD1lLnkmJnI+PWUubmV4dC55JiZlLm5leHQueSE9PWUueSl7bGV0IHA9ZS54KyhyLWUueSkqKGUubmV4dC54LWUueCkvKGUubmV4dC55LWUueSk7aWYocDw9aSYmcD5vKXtpZihvPXAscD09PWkpe2lmKHI9PT1lLnkpcmV0dXJuIGU7aWYocj09PWUubmV4dC55KXJldHVybiBlLm5leHR9YT1lLng8ZS5uZXh0Lng/ZTplLm5leHR9fWU9ZS5uZXh0fXdoaWxlKGUhPT10KTtpZighYSlyZXR1cm4gbnVsbDtpZihpPT09bylyZXR1cm4gYTtsZXQgdSxzPWEsbD1hLngsYz1hLnksZD0xLzA7ZT1hO2Rve2k+PWUueCYmZS54Pj1sJiZpIT09ZS54JiZXMChyPGM/aTpvLHIsbCxjLHI8Yz9vOmkscixlLngsZS55KSYmKHU9TWF0aC5hYnMoci1lLnkpLyhpLWUueCksSHgoZSxuKSYmKHU8ZHx8dT09PWQmJihlLng+YS54fHxlLng9PT1hLngmJlgyZShhLGUpKSkmJihhPWUsZD11KSksZT1lLm5leHR9d2hpbGUoZSE9PXMpO3JldHVybiBhfShuLHQpLHQpe2xldCBlPUl0ZSh0LG4pO0RwKHQsdC5uZXh0KSxEcChlLGUubmV4dCl9fWZ1bmN0aW9uIFgyZShuLHQpe3JldHVybiBGcihuLnByZXYsbix0LnByZXYpPDAmJkZyKHQubmV4dCxuLG4ubmV4dCk8MH1mdW5jdGlvbiB5QihuLHQsZSxpLHIpe3JldHVybihuPTE0MzE2NTU3NjUmKChuPTg1ODk5MzQ1OSYoKG49MjUyNjQ1MTM1Jigobj0xNjcxMTkzNSYoKG49MzI3NjcqKG4tZSkqcil8bjw8OCkpfG48PDQpKXxuPDwyKSl8bjw8MSkpfCh0PTE0MzE2NTU3NjUmKCh0PTg1ODk5MzQ1OSYoKHQ9MjUyNjQ1MTM1JigodD0xNjcxMTkzNSYoKHQ9MzI3NjcqKHQtaSkqcil8dDw8OCkpfHQ8PDQpKXx0PDwyKSl8dDw8MSkpPDwxfWZ1bmN0aW9uIFoyZShuKXtsZXQgdD1uLGU9bjtkb3sodC54PGUueHx8dC54PT09ZS54JiZ0Lnk8ZS55KSYmKGU9dCksdD10Lm5leHR9d2hpbGUodCE9PW4pO3JldHVybiBlfWZ1bmN0aW9uIFcwKG4sdCxlLGkscixvLGEscyl7cmV0dXJuKHItYSkqKHQtcyktKG4tYSkqKG8tcyk+PTAmJihuLWEpKihpLXMpLShlLWEpKih0LXMpPj0wJiYoZS1hKSooby1zKS0oci1hKSooaS1zKT49MH1mdW5jdGlvbiBLMmUobix0KXtyZXR1cm4gbi5uZXh0LmkhPT10LmkmJm4ucHJldi5pIT09dC5pJiYhZnVuY3Rpb24obix0KXtsZXQgZT1uO2Rve2lmKGUuaSE9PW4uaSYmZS5uZXh0LmkhPT1uLmkmJmUuaSE9PXQuaSYmZS5uZXh0LmkhPT10LmkmJkR0ZShlLGUubmV4dCxuLHQpKXJldHVybiEwO2U9ZS5uZXh0fXdoaWxlKGUhPT1uKTtyZXR1cm4hMX0obix0KSYmKEh4KG4sdCkmJkh4KHQsbikmJmZ1bmN0aW9uKG4sdCl7bGV0IGU9bixpPSExLHI9KG4ueCt0LngpLzIsbz0obi55K3QueSkvMjtkb3tlLnk+byE9ZS5uZXh0Lnk+byYmZS5uZXh0LnkhPT1lLnkmJnI8KGUubmV4dC54LWUueCkqKG8tZS55KS8oZS5uZXh0LnktZS55KStlLngmJihpPSFpKSxlPWUubmV4dH13aGlsZShlIT09bik7cmV0dXJuIGl9KG4sdCkmJihGcihuLnByZXYsbix0LnByZXYpfHxGcihuLHQucHJldix0KSl8fHRBKG4sdCkmJkZyKG4ucHJldixuLG4ubmV4dCk+MCYmRnIodC5wcmV2LHQsdC5uZXh0KT4wKX1mdW5jdGlvbiBGcihuLHQsZSl7cmV0dXJuKHQueS1uLnkpKihlLngtdC54KS0odC54LW4ueCkqKGUueS10LnkpfWZ1bmN0aW9uIHRBKG4sdCl7cmV0dXJuIG4ueD09PXQueCYmbi55PT09dC55fWZ1bmN0aW9uIER0ZShuLHQsZSxpKXtsZXQgcj1fSShGcihuLHQsZSkpLG89X0koRnIobix0LGkpKSxhPV9JKEZyKGUsaSxuKSkscz1fSShGcihlLGksdCkpO3JldHVybiEhKHIhPT1vJiZhIT09c3x8MD09PXImJmdJKG4sZSx0KXx8MD09PW8mJmdJKG4saSx0KXx8MD09PWEmJmdJKGUsbixpKXx8MD09PXMmJmdJKGUsdCxpKSl9ZnVuY3Rpb24gZ0kobix0LGUpe3JldHVybiB0Lng8PU1hdGgubWF4KG4ueCxlLngpJiZ0Lng+PU1hdGgubWluKG4ueCxlLngpJiZ0Lnk8PU1hdGgubWF4KG4ueSxlLnkpJiZ0Lnk+PU1hdGgubWluKG4ueSxlLnkpfWZ1bmN0aW9uIF9JKG4pe3JldHVybiBuPjA/MTpuPDA/LTE6MH1mdW5jdGlvbiBIeChuLHQpe3JldHVybiBGcihuLnByZXYsbixuLm5leHQpPDA/RnIobix0LG4ubmV4dCk+PTAmJkZyKG4sbi5wcmV2LHQpPj0wOkZyKG4sdCxuLnByZXYpPDB8fEZyKG4sbi5uZXh0LHQpPDB9ZnVuY3Rpb24gSXRlKG4sdCl7bGV0IGU9bmV3IHhCKG4uaSxuLngsbi55KSxpPW5ldyB4Qih0LmksdC54LHQueSkscj1uLm5leHQsbz10LnByZXY7cmV0dXJuIG4ubmV4dD10LHQucHJldj1uLGUubmV4dD1yLHIucHJldj1lLGkubmV4dD1lLGUucHJldj1pLG8ubmV4dD1pLGkucHJldj1vLGl9ZnVuY3Rpb24gSmVlKG4sdCxlLGkpe2xldCByPW5ldyB4QihuLHQsZSk7cmV0dXJuIGk/KHIubmV4dD1pLm5leHQsci5wcmV2PWksaS5uZXh0LnByZXY9cixpLm5leHQ9cik6KHIucHJldj1yLHIubmV4dD1yKSxyfWZ1bmN0aW9uIHp4KG4pe24ubmV4dC5wcmV2PW4ucHJldixuLnByZXYubmV4dD1uLm5leHQsbi5wcmV2WiYmKG4ucHJldloubmV4dFo9bi5uZXh0Wiksbi5uZXh0WiYmKG4ubmV4dFoucHJldlo9bi5wcmV2Wil9ZnVuY3Rpb24geEIobix0LGUpe3RoaXMuaT1uLHRoaXMueD10LHRoaXMueT1lLHRoaXMucHJldj1udWxsLHRoaXMubmV4dD1udWxsLHRoaXMuej1udWxsLHRoaXMucHJldlo9bnVsbCx0aGlzLm5leHRaPW51bGwsdGhpcy5zdGVpbmVyPSExfXZhciBHYz1jbGFzc3tzdGF0aWMgYXJlYSh0KXtsZXQgZT10Lmxlbmd0aCxpPTA7Zm9yKGxldCByPWUtMSxvPTA7bzxlO3I9bysrKWkrPXRbcl0ueCp0W29dLnktdFtvXS54KnRbcl0ueTtyZXR1cm4uNSppfXN0YXRpYyBpc0Nsb2NrV2lzZSh0KXtyZXR1cm4gR2MuYXJlYSh0KTwwfXN0YXRpYyB0cmlhbmd1bGF0ZVNoYXBlKHQsZSl7bGV0IGk9W10scj1bXSxvPVtdOyRlZSh0KSxldGUoaSx0KTtsZXQgYT10Lmxlbmd0aDtlLmZvckVhY2goJGVlKTtmb3IobGV0IGw9MDtsPGUubGVuZ3RoO2wrKylyLnB1c2goYSksYSs9ZVtsXS5sZW5ndGgsZXRlKGksZVtsXSk7bGV0IHM9ZnVuY3Rpb24obix0LGU9Mil7bGV0IHMsbCxjLGQsdSxwLGgsaT10JiZ0Lmxlbmd0aCxyPWk/dFswXSplOm4ubGVuZ3RoLG89VHRlKG4sMCxyLGUsITApLGE9W107aWYoIW98fG8ubmV4dD09PW8ucHJldilyZXR1cm4gYTtpZihpJiYobz1mdW5jdGlvbihuLHQsZSxpKXtsZXQgbyxhLHMsbCxjLHI9W107Zm9yKG89MCxhPXQubGVuZ3RoO288YTtvKyspcz10W29dKmksbD1vPGEtMT90W28rMV0qaTpuLmxlbmd0aCxjPVR0ZShuLHMsbCxpLCExKSxjPT09Yy5uZXh0JiYoYy5zdGVpbmVyPSEwKSxyLnB1c2goWjJlKGMpKTtmb3Ioci5zb3J0KEcyZSksbz0wO288ci5sZW5ndGg7bysrKVcyZShyW29dLGUpLGU9RHAoZSxlLm5leHQpO3JldHVybiBlfShuLHQsbyxlKSksbi5sZW5ndGg+ODAqZSl7cz1jPW5bMF0sbD1kPW5bMV07Zm9yKGxldCBtPWU7bTxyO20rPWUpdT1uW21dLHA9blttKzFdLHU8cyYmKHM9dSkscDxsJiYobD1wKSx1PmMmJihjPXUpLHA+ZCYmKGQ9cCk7aD1NYXRoLm1heChjLXMsZC1sKSxoPTAhPT1oPzEvaDowfXJldHVybiBWeChvLGEsZSxzLGwsaCksYX0oaSxyKTtmb3IobGV0IGw9MDtsPHMubGVuZ3RoO2wrPTMpby5wdXNoKHMuc2xpY2UobCxsKzMpKTtyZXR1cm4gb319O2Z1bmN0aW9uICRlZShuKXtsZXQgdD1uLmxlbmd0aDt0PjImJm5bdC0xXS5lcXVhbHMoblswXSkmJm4ucG9wKCl9ZnVuY3Rpb24gZXRlKG4sdCl7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspbi5wdXNoKHRbZV0ueCksbi5wdXNoKHRbZV0ueSl9dmFyIElwPWNsYXNzIGV4dGVuZHMgR2l7Y29uc3RydWN0b3IodD1uZXcgV2QoW25ldyAkZSguNSwuNSksbmV3ICRlKC0uNSwuNSksbmV3ICRlKC0uNSwtLjUpLG5ldyAkZSguNSwtLjUpXSksZT17fSl7c3VwZXIoKSx0aGlzLnR5cGU9IkV4dHJ1ZGVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6dCxvcHRpb25zOmV9LHQ9QXJyYXkuaXNBcnJheSh0KT90Olt0XTtsZXQgaT10aGlzLHI9W10sbz1bXTtmb3IobGV0IHM9MCxsPXQubGVuZ3RoO3M8bDtzKyspYSh0W3NdKTtmdW5jdGlvbiBhKHMpe2xldCBsPVtdLGM9dm9pZCAwIT09ZS5jdXJ2ZVNlZ21lbnRzP2UuY3VydmVTZWdtZW50czoxMixkPXZvaWQgMCE9PWUuc3RlcHM/ZS5zdGVwczoxLHU9dm9pZCAwIT09ZS5kZXB0aD9lLmRlcHRoOjEscD12b2lkIDA9PT1lLmJldmVsRW5hYmxlZHx8ZS5iZXZlbEVuYWJsZWQsaD12b2lkIDAhPT1lLmJldmVsVGhpY2tuZXNzP2UuYmV2ZWxUaGlja25lc3M6LjIsbT12b2lkIDAhPT1lLmJldmVsU2l6ZT9lLmJldmVsU2l6ZTpoLS4xLF89dm9pZCAwIT09ZS5iZXZlbE9mZnNldD9lLmJldmVsT2Zmc2V0OjAsTT12b2lkIDAhPT1lLmJldmVsU2VnbWVudHM/ZS5iZXZlbFNlZ21lbnRzOjMseT1lLmV4dHJ1ZGVQYXRoLHg9dm9pZCAwIT09ZS5VVkdlbmVyYXRvcj9lLlVWR2VuZXJhdG9yOnROZTt2b2lkIDAhPT1lLmFtb3VudCYmKGNvbnNvbGUud2FybigiVEhSRUUuRXh0cnVkZUJ1ZmZlckdlb21ldHJ5OiBhbW91bnQgaGFzIGJlZW4gcmVuYW1lZCB0byBkZXB0aC4iKSx1PWUuYW1vdW50KTtsZXQgUixCLGVlLFEsd2UsST0hMTt5JiYoUj15LmdldFNwYWNlZFBvaW50cyhkKSxJPSEwLHA9ITEsQj15LmNvbXB1dGVGcmVuZXRGcmFtZXMoZCwhMSksZWU9bmV3IEssUT1uZXcgSyx3ZT1uZXcgSykscHx8KE09MCxoPTAsbT0wLF89MCk7bGV0IFFlPXMuZXh0cmFjdFBvaW50cyhjKSxBZT1RZS5zaGFwZSxEPVFlLmhvbGVzO2lmKCFHYy5pc0Nsb2NrV2lzZShBZSkpe0FlPUFlLnJldmVyc2UoKTtmb3IobGV0IG9lPTAsYXQ9RC5sZW5ndGg7b2U8YXQ7b2UrKyl7bGV0IFllPURbb2VdO0djLmlzQ2xvY2tXaXNlKFllKSYmKERbb2VdPVllLnJldmVyc2UoKSl9fWxldCBjZT1HYy50cmlhbmd1bGF0ZVNoYXBlKEFlLEQpLGhlPUFlO2ZvcihsZXQgb2U9MCxhdD1ELmxlbmd0aDtvZTxhdDtvZSsrKUFlPUFlLmNvbmNhdChEW29lXSk7ZnVuY3Rpb24gX2Uob2UsYXQsWWUpe3JldHVybiBhdHx8Y29uc29sZS5lcnJvcigiVEhSRUUuRXh0cnVkZUdlb21ldHJ5OiB2ZWMgZG9lcyBub3QgZXhpc3QiKSxhdC5jbG9uZSgpLm11bHRpcGx5U2NhbGFyKFllKS5hZGQob2UpfWxldCAkPUFlLmxlbmd0aCxkZT1jZS5sZW5ndGg7ZnVuY3Rpb24gcGUob2UsYXQsWWUpe2xldCBfdCx1dCxhbix5bj1vZS54LWF0Lngsc2k9b2UueS1hdC55LE5pPVllLngtb2UueCxMaT1ZZS55LW9lLnksWT15bip5bitzaSpzaTtpZihNYXRoLmFicyh5bipMaS1zaSpOaSk+TnVtYmVyLkVQU0lMT04pe2xldCBIZT1NYXRoLnNxcnQoWSkseXQ9TWF0aC5zcXJ0KE5pKk5pK0xpKkxpKSxlbj1hdC54LXNpL0hlLExlPWF0LnkreW4vSGUsRnQ9KChZZS54LUxpL3l0LWVuKSpMaS0oWWUueStOaS95dC1MZSkqTmkpLyh5bipMaS1zaSpOaSk7X3Q9ZW4reW4qRnQtb2UueCx1dD1MZStzaSpGdC1vZS55O2xldCBPdD1fdCpfdCt1dCp1dDtpZihPdDw9MilyZXR1cm4gbmV3ICRlKF90LHV0KTthbj1NYXRoLnNxcnQoT3QvMil9ZWxzZXtsZXQgSGU9ITE7eW4+TnVtYmVyLkVQU0lMT04/Tmk+TnVtYmVyLkVQU0lMT04mJihIZT0hMCk6eW48LU51bWJlci5FUFNJTE9OP05pPC1OdW1iZXIuRVBTSUxPTiYmKEhlPSEwKTpNYXRoLnNpZ24oc2kpPT09TWF0aC5zaWduKExpKSYmKEhlPSEwKSxIZT8oX3Q9LXNpLHV0PXluLGFuPU1hdGguc3FydChZKSk6KF90PXluLHV0PXNpLGFuPU1hdGguc3FydChZLzIpKX1yZXR1cm4gbmV3ICRlKF90L2FuLHV0L2FuKX1sZXQgR2U9W107Zm9yKGxldCBvZT0wLGF0PWhlLmxlbmd0aCxZZT1hdC0xLF90PW9lKzE7b2U8YXQ7b2UrKyxZZSsrLF90KyspWWU9PT1hdCYmKFllPTApLF90PT09YXQmJihfdD0wKSxHZVtvZV09cGUoaGVbb2VdLGhlW1llXSxoZVtfdF0pO2xldCBGZSxTZT1bXSxsdD1HZS5jb25jYXQoKTtmb3IobGV0IG9lPTAsYXQ9RC5sZW5ndGg7b2U8YXQ7b2UrKyl7bGV0IFllPURbb2VdO0ZlPVtdO2ZvcihsZXQgX3Q9MCx1dD1ZZS5sZW5ndGgsYW49dXQtMSx5bj1fdCsxO190PHV0O190KyssYW4rKyx5bisrKWFuPT09dXQmJihhbj0wKSx5bj09PXV0JiYoeW49MCksRmVbX3RdPXBlKFllW190XSxZZVthbl0sWWVbeW5dKTtTZS5wdXNoKEZlKSxsdD1sdC5jb25jYXQoRmUpfWZvcihsZXQgb2U9MDtvZTxNO29lKyspe2xldCBhdD1vZS9NLFllPWgqTWF0aC5jb3MoYXQqTWF0aC5QSS8yKSxfdD1tKk1hdGguc2luKGF0Kk1hdGguUEkvMikrXztmb3IobGV0IHV0PTAsYW49aGUubGVuZ3RoO3V0PGFuO3V0Kyspe2xldCB5bj1fZShoZVt1dF0sR2VbdXRdLF90KTt3dCh5bi54LHluLnksLVllKX1mb3IobGV0IHV0PTAsYW49RC5sZW5ndGg7dXQ8YW47dXQrKyl7bGV0IHluPURbdXRdO0ZlPVNlW3V0XTtmb3IobGV0IHNpPTAsTmk9eW4ubGVuZ3RoO3NpPE5pO3NpKyspe2xldCBMaT1fZSh5bltzaV0sRmVbc2ldLF90KTt3dChMaS54LExpLnksLVllKX19fWxldCBNdD1tK187Zm9yKGxldCBvZT0wO29lPCQ7b2UrKyl7bGV0IGF0PXA/X2UoQWVbb2VdLGx0W29lXSxNdCk6QWVbb2VdO0k/KFEuY29weShCLm5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKGF0LngpLGVlLmNvcHkoQi5iaW5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKGF0LnkpLHdlLmNvcHkoUlswXSkuYWRkKFEpLmFkZChlZSksd3Qod2UueCx3ZS55LHdlLnopKTp3dChhdC54LGF0LnksMCl9Zm9yKGxldCBvZT0xO29lPD1kO29lKyspZm9yKGxldCBhdD0wO2F0PCQ7YXQrKyl7bGV0IFllPXA/X2UoQWVbYXRdLGx0W2F0XSxNdCk6QWVbYXRdO0k/KFEuY29weShCLm5vcm1hbHNbb2VdKS5tdWx0aXBseVNjYWxhcihZZS54KSxlZS5jb3B5KEIuYmlub3JtYWxzW29lXSkubXVsdGlwbHlTY2FsYXIoWWUueSksd2UuY29weShSW29lXSkuYWRkKFEpLmFkZChlZSksd3Qod2UueCx3ZS55LHdlLnopKTp3dChZZS54LFllLnksdS9kKm9lKX1mb3IobGV0IG9lPU0tMTtvZT49MDtvZS0tKXtsZXQgYXQ9b2UvTSxZZT1oKk1hdGguY29zKGF0Kk1hdGguUEkvMiksX3Q9bSpNYXRoLnNpbihhdCpNYXRoLlBJLzIpK187Zm9yKGxldCB1dD0wLGFuPWhlLmxlbmd0aDt1dDxhbjt1dCsrKXtsZXQgeW49X2UoaGVbdXRdLEdlW3V0XSxfdCk7d3QoeW4ueCx5bi55LHUrWWUpfWZvcihsZXQgdXQ9MCxhbj1ELmxlbmd0aDt1dDxhbjt1dCsrKXtsZXQgeW49RFt1dF07RmU9U2VbdXRdO2ZvcihsZXQgc2k9MCxOaT15bi5sZW5ndGg7c2k8Tmk7c2krKyl7bGV0IExpPV9lKHluW3NpXSxGZVtzaV0sX3QpO0k/d3QoTGkueCxMaS55K1JbZC0xXS55LFJbZC0xXS54K1llKTp3dChMaS54LExpLnksdStZZSl9fX1mdW5jdGlvbiBUbihvZSxhdCl7bGV0IFllPW9lLmxlbmd0aDtmb3IoOy0tWWU+PTA7KXtsZXQgX3Q9WWUsdXQ9WWUtMTt1dDwwJiYodXQ9b2UubGVuZ3RoLTEpO2ZvcihsZXQgYW49MCx5bj1kKzIqTTthbjx5bjthbisrKXtsZXQgc2k9JCphbixOaT0kKihhbisxKTtDZShhdCtfdCtzaSxhdCt1dCtzaSxhdCt1dCtOaSxhdCtfdCtOaSl9fX1mdW5jdGlvbiB3dChvZSxhdCxZZSl7bC5wdXNoKG9lKSxsLnB1c2goYXQpLGwucHVzaChZZSl9ZnVuY3Rpb24gb24ob2UsYXQsWWUpe210KG9lKSxtdChhdCksbXQoWWUpO2xldCBfdD1yLmxlbmd0aC8zLHV0PXguZ2VuZXJhdGVUb3BVVihpLHIsX3QtMyxfdC0yLF90LTEpO2h0KHV0WzBdKSxodCh1dFsxXSksaHQodXRbMl0pfWZ1bmN0aW9uIENlKG9lLGF0LFllLF90KXttdChvZSksbXQoYXQpLG10KF90KSxtdChhdCksbXQoWWUpLG10KF90KTtsZXQgdXQ9ci5sZW5ndGgvMyxhbj14LmdlbmVyYXRlU2lkZVdhbGxVVihpLHIsdXQtNix1dC0zLHV0LTIsdXQtMSk7aHQoYW5bMF0pLGh0KGFuWzFdKSxodChhblszXSksaHQoYW5bMV0pLGh0KGFuWzJdKSxodChhblszXSl9ZnVuY3Rpb24gbXQob2Upe3IucHVzaChsWzMqb2UrMF0pLHIucHVzaChsWzMqb2UrMV0pLHIucHVzaChsWzMqb2UrMl0pfWZ1bmN0aW9uIGh0KG9lKXtvLnB1c2gob2UueCksby5wdXNoKG9lLnkpfShmdW5jdGlvbigpe2xldCBvZT1yLmxlbmd0aC8zO2lmKHApe2xldCBhdD0wLFllPSQqYXQ7Zm9yKGxldCBfdD0wO190PGRlO190Kyspe2xldCB1dD1jZVtfdF07b24odXRbMl0rWWUsdXRbMV0rWWUsdXRbMF0rWWUpfWF0PWQrMipNLFllPSQqYXQ7Zm9yKGxldCBfdD0wO190PGRlO190Kyspe2xldCB1dD1jZVtfdF07b24odXRbMF0rWWUsdXRbMV0rWWUsdXRbMl0rWWUpfX1lbHNle2ZvcihsZXQgYXQ9MDthdDxkZTthdCsrKXtsZXQgWWU9Y2VbYXRdO29uKFllWzJdLFllWzFdLFllWzBdKX1mb3IobGV0IGF0PTA7YXQ8ZGU7YXQrKyl7bGV0IFllPWNlW2F0XTtvbihZZVswXSskKmQsWWVbMV0rJCpkLFllWzJdKyQqZCl9fWkuYWRkR3JvdXAob2Usci5sZW5ndGgvMy1vZSwwKX0pKCksZnVuY3Rpb24oKXtsZXQgb2U9ci5sZW5ndGgvMyxhdD0wO1RuKGhlLGF0KSxhdCs9aGUubGVuZ3RoO2ZvcihsZXQgWWU9MCxfdD1ELmxlbmd0aDtZZTxfdDtZZSsrKXtsZXQgdXQ9RFtZZV07VG4odXQsYXQpLGF0Kz11dC5sZW5ndGh9aS5hZGRHcm91cChvZSxyLmxlbmd0aC8zLW9lLDEpfSgpfXRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IE5yKHIsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IE5yKG8sMikpLHRoaXMuY29tcHV0ZVZlcnRleE5vcm1hbHMoKX10b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gZnVuY3Rpb24obix0LGUpe2lmKGUuc2hhcGVzPVtdLEFycmF5LmlzQXJyYXkobikpZm9yKGxldCBpPTAscj1uLmxlbmd0aDtpPHI7aSsrKWUuc2hhcGVzLnB1c2gobltpXS51dWlkKTtlbHNlIGUuc2hhcGVzLnB1c2gobi51dWlkKTtyZXR1cm4gdm9pZCAwIT09dC5leHRydWRlUGF0aCYmKGUub3B0aW9ucy5leHRydWRlUGF0aD10LmV4dHJ1ZGVQYXRoLnRvSlNPTigpKSxlfSh0aGlzLnBhcmFtZXRlcnMuc2hhcGVzLHRoaXMucGFyYW1ldGVycy5vcHRpb25zLHQpfXN0YXRpYyBmcm9tSlNPTih0LGUpe2xldCBpPVtdO2ZvcihsZXQgbz0wLGE9dC5zaGFwZXMubGVuZ3RoO288YTtvKyspaS5wdXNoKGVbdC5zaGFwZXNbb11dKTtsZXQgcj10Lm9wdGlvbnMuZXh0cnVkZVBhdGg7cmV0dXJuIHZvaWQgMCE9PXImJih0Lm9wdGlvbnMuZXh0cnVkZVBhdGg9KG5ldyBFdGVbci50eXBlXSkuZnJvbUpTT04ocikpLG5ldyBJcChpLHQub3B0aW9ucyl9fSx0TmU9e2dlbmVyYXRlVG9wVVY6ZnVuY3Rpb24obix0LGUsaSxyKXtsZXQgcz10WzMqaV0sbD10WzMqaSsxXSxjPXRbMypyXSxkPXRbMypyKzFdO3JldHVybltuZXcgJGUodFszKmVdLHRbMyplKzFdKSxuZXcgJGUocyxsKSxuZXcgJGUoYyxkKV19LGdlbmVyYXRlU2lkZVdhbGxVVjpmdW5jdGlvbihuLHQsZSxpLHIsbyl7bGV0IGE9dFszKmVdLHM9dFszKmUrMV0sbD10WzMqZSsyXSxjPXRbMyppXSxkPXRbMyppKzFdLHU9dFszKmkrMl0scD10WzMqcl0saD10WzMqcisxXSxtPXRbMypyKzJdLF89dFszKm9dLE09dFszKm8rMV0seT10WzMqbysyXTtyZXR1cm4gTWF0aC5hYnMocy1kKTxNYXRoLmFicyhhLWMpP1tuZXcgJGUoYSwxLWwpLG5ldyAkZShjLDEtdSksbmV3ICRlKHAsMS1tKSxuZXcgJGUoXywxLXkpXTpbbmV3ICRlKHMsMS1sKSxuZXcgJGUoZCwxLXUpLG5ldyAkZShoLDEtbSksbmV3ICRlKE0sMS15KV19fSx3bT1jbGFzcyBleHRlbmRzIEdpe2NvbnN0cnVjdG9yKHQ9bmV3IFdkKFtuZXcgJGUoMCwuNSksbmV3ICRlKC0uNSwtLjUpLG5ldyAkZSguNSwtLjUpXSksZT0xMil7c3VwZXIoKSx0aGlzLnR5cGU9IlNoYXBlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17c2hhcGVzOnQsY3VydmVTZWdtZW50czplfTtsZXQgaT1bXSxyPVtdLG89W10sYT1bXSxzPTAsbD0wO2lmKCExPT09QXJyYXkuaXNBcnJheSh0KSljKHQpO2Vsc2UgZm9yKGxldCBkPTA7ZDx0Lmxlbmd0aDtkKyspYyh0W2RdKSx0aGlzLmFkZEdyb3VwKHMsbCxkKSxzKz1sLGw9MDtmdW5jdGlvbiBjKGQpe2xldCB1PXIubGVuZ3RoLzMscD1kLmV4dHJhY3RQb2ludHMoZSksaD1wLnNoYXBlLG09cC5ob2xlczshMT09PUdjLmlzQ2xvY2tXaXNlKGgpJiYoaD1oLnJldmVyc2UoKSk7Zm9yKGxldCBNPTAseT1tLmxlbmd0aDtNPHk7TSsrKXtsZXQgeD1tW01dOyEwPT09R2MuaXNDbG9ja1dpc2UoeCkmJihtW01dPXgucmV2ZXJzZSgpKX1sZXQgXz1HYy50cmlhbmd1bGF0ZVNoYXBlKGgsbSk7Zm9yKGxldCBNPTAseT1tLmxlbmd0aDtNPHk7TSsrKWg9aC5jb25jYXQobVtNXSk7Zm9yKGxldCBNPTAseT1oLmxlbmd0aDtNPHk7TSsrKXtsZXQgeD1oW01dO3IucHVzaCh4LngseC55LDApLG8ucHVzaCgwLDAsMSksYS5wdXNoKHgueCx4LnkpfWZvcihsZXQgTT0wLHk9Xy5sZW5ndGg7TTx5O00rKyl7bGV0IHg9X1tNXTtpLnB1c2goeFswXSt1LHhbMV0rdSx4WzJdK3UpLGwrPTN9fXRoaXMuc2V0SW5kZXgoaSksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgTnIociwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IE5yKG8sMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IE5yKGEsMikpfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiBmdW5jdGlvbihuLHQpe2lmKHQuc2hhcGVzPVtdLEFycmF5LmlzQXJyYXkobikpZm9yKGxldCBlPTAsaT1uLmxlbmd0aDtlPGk7ZSsrKXQuc2hhcGVzLnB1c2gobltlXS51dWlkKTtlbHNlIHQuc2hhcGVzLnB1c2gobi51dWlkKTtyZXR1cm4gdH0odGhpcy5wYXJhbWV0ZXJzLnNoYXBlcyx0KX1zdGF0aWMgZnJvbUpTT04odCxlKXtsZXQgaT1bXTtmb3IobGV0IHI9MCxvPXQuc2hhcGVzLmxlbmd0aDtyPG87cisrKWkucHVzaChlW3Quc2hhcGVzW3JdXSk7cmV0dXJuIG5ldyB3bShpLHQuY3VydmVTZWdtZW50cyl9fTsoY2xhc3MgZXh0ZW5kcyBGb3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iU2hhZG93TWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IHNuKDApLHRoaXMudHJhbnNwYXJlbnQ9ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpc319KS5wcm90b3R5cGUuaXNTaGFkb3dNYXRlcmlhbD0hMDt2YXIgVUk9Y2xhc3MgZXh0ZW5kcyBGb3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiJ9LHRoaXMudHlwZT0iTWVzaFN0YW5kYXJkTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IHNuKDE2Nzc3MjE1KSx0aGlzLnJvdWdobmVzcz0xLHRoaXMubWV0YWxuZXNzPTAsdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZT1uZXcgc24oMCksdGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmVNYXA9bnVsbCx0aGlzLmJ1bXBNYXA9bnVsbCx0aGlzLmJ1bXBTY2FsZT0xLHRoaXMubm9ybWFsTWFwPW51bGwsdGhpcy5ub3JtYWxNYXBUeXBlPWNfLHRoaXMubm9ybWFsU2NhbGU9bmV3ICRlKDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5yb3VnaG5lc3NNYXA9bnVsbCx0aGlzLm1ldGFsbmVzc01hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuZW52TWFwSW50ZW5zaXR5PTEsdGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4LHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuZmxhdFNoYWRpbmc9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRlZmluZXM9e1NUQU5EQVJEOiIifSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5yb3VnaG5lc3M9dC5yb3VnaG5lc3MsdGhpcy5tZXRhbG5lc3M9dC5tZXRhbG5lc3MsdGhpcy5tYXA9dC5tYXAsdGhpcy5saWdodE1hcD10LmxpZ2h0TWFwLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSx0aGlzLmFvTWFwPXQuYW9NYXAsdGhpcy5hb01hcEludGVuc2l0eT10LmFvTWFwSW50ZW5zaXR5LHRoaXMuZW1pc3NpdmUuY29weSh0LmVtaXNzaXZlKSx0aGlzLmVtaXNzaXZlTWFwPXQuZW1pc3NpdmVNYXAsdGhpcy5lbWlzc2l2ZUludGVuc2l0eT10LmVtaXNzaXZlSW50ZW5zaXR5LHRoaXMuYnVtcE1hcD10LmJ1bXBNYXAsdGhpcy5idW1wU2NhbGU9dC5idW1wU2NhbGUsdGhpcy5ub3JtYWxNYXA9dC5ub3JtYWxNYXAsdGhpcy5ub3JtYWxNYXBUeXBlPXQubm9ybWFsTWFwVHlwZSx0aGlzLm5vcm1hbFNjYWxlLmNvcHkodC5ub3JtYWxTY2FsZSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy5yb3VnaG5lc3NNYXA9dC5yb3VnaG5lc3NNYXAsdGhpcy5tZXRhbG5lc3NNYXA9dC5tZXRhbG5lc3NNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuZW52TWFwSW50ZW5zaXR5PXQuZW52TWFwSW50ZW5zaXR5LHRoaXMucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXMuZmxhdFNoYWRpbmc9dC5mbGF0U2hhZGluZyx0aGlzfX07VUkucHJvdG90eXBlLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw9ITAsY2xhc3MgZXh0ZW5kcyBVSXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiIsUEhZU0lDQUw6IiJ9LHRoaXMudHlwZT0iTWVzaFBoeXNpY2FsTWF0ZXJpYWwiLHRoaXMuY2xlYXJjb2F0TWFwPW51bGwsdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3M9MCx0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcD1udWxsLHRoaXMuY2xlYXJjb2F0Tm9ybWFsU2NhbGU9bmV3ICRlKDEsMSksdGhpcy5jbGVhcmNvYXROb3JtYWxNYXA9bnVsbCx0aGlzLmlvcj0xLjUsT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInJlZmxlY3Rpdml0eSIse2dldDpmdW5jdGlvbigpe3JldHVybiBlcygyLjUqKHRoaXMuaW9yLTEpLyh0aGlzLmlvcisxKSwwLDEpfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5pb3I9KDErLjQqZSkvKDEtLjQqZSl9fSksdGhpcy5zaGVlbkNvbG9yPW5ldyBzbigwKSx0aGlzLnNoZWVuQ29sb3JNYXA9bnVsbCx0aGlzLnNoZWVuUm91Z2huZXNzPTEsdGhpcy5zaGVlblJvdWdobmVzc01hcD1udWxsLHRoaXMudHJhbnNtaXNzaW9uTWFwPW51bGwsdGhpcy50aGlja25lc3M9MCx0aGlzLnRoaWNrbmVzc01hcD1udWxsLHRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZT0wLHRoaXMuYXR0ZW51YXRpb25Db2xvcj1uZXcgc24oMSwxLDEpLHRoaXMuc3BlY3VsYXJJbnRlbnNpdHk9MSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwPW51bGwsdGhpcy5zcGVjdWxhckNvbG9yPW5ldyBzbigxLDEsMSksdGhpcy5zcGVjdWxhckNvbG9yTWFwPW51bGwsdGhpcy5fc2hlZW49MCx0aGlzLl9jbGVhcmNvYXQ9MCx0aGlzLl90cmFuc21pc3Npb249MCx0aGlzLnNldFZhbHVlcyh0KX1nZXQgc2hlZW4oKXtyZXR1cm4gdGhpcy5fc2hlZW59c2V0IHNoZWVuKHQpe3RoaXMuX3NoZWVuPjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fc2hlZW49dH1nZXQgY2xlYXJjb2F0KCl7cmV0dXJuIHRoaXMuX2NsZWFyY29hdH1zZXQgY2xlYXJjb2F0KHQpe3RoaXMuX2NsZWFyY29hdD4wIT10PjAmJnRoaXMudmVyc2lvbisrLHRoaXMuX2NsZWFyY29hdD10fWdldCB0cmFuc21pc3Npb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNtaXNzaW9ufXNldCB0cmFuc21pc3Npb24odCl7dGhpcy5fdHJhbnNtaXNzaW9uPjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fdHJhbnNtaXNzaW9uPXR9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRlZmluZXM9e1NUQU5EQVJEOiIiLFBIWVNJQ0FMOiIifSx0aGlzLmNsZWFyY29hdD10LmNsZWFyY29hdCx0aGlzLmNsZWFyY29hdE1hcD10LmNsZWFyY29hdE1hcCx0aGlzLmNsZWFyY29hdFJvdWdobmVzcz10LmNsZWFyY29hdFJvdWdobmVzcyx0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcD10LmNsZWFyY29hdFJvdWdobmVzc01hcCx0aGlzLmNsZWFyY29hdE5vcm1hbE1hcD10LmNsZWFyY29hdE5vcm1hbE1hcCx0aGlzLmNsZWFyY29hdE5vcm1hbFNjYWxlLmNvcHkodC5jbGVhcmNvYXROb3JtYWxTY2FsZSksdGhpcy5pb3I9dC5pb3IsdGhpcy5zaGVlbj10LnNoZWVuLHRoaXMuc2hlZW5Db2xvci5jb3B5KHQuc2hlZW5Db2xvciksdGhpcy5zaGVlbkNvbG9yTWFwPXQuc2hlZW5Db2xvck1hcCx0aGlzLnNoZWVuUm91Z2huZXNzPXQuc2hlZW5Sb3VnaG5lc3MsdGhpcy5zaGVlblJvdWdobmVzc01hcD10LnNoZWVuUm91Z2huZXNzTWFwLHRoaXMudHJhbnNtaXNzaW9uPXQudHJhbnNtaXNzaW9uLHRoaXMudHJhbnNtaXNzaW9uTWFwPXQudHJhbnNtaXNzaW9uTWFwLHRoaXMudGhpY2tuZXNzPXQudGhpY2tuZXNzLHRoaXMudGhpY2tuZXNzTWFwPXQudGhpY2tuZXNzTWFwLHRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZT10LmF0dGVudWF0aW9uRGlzdGFuY2UsdGhpcy5hdHRlbnVhdGlvbkNvbG9yLmNvcHkodC5hdHRlbnVhdGlvbkNvbG9yKSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5PXQuc3BlY3VsYXJJbnRlbnNpdHksdGhpcy5zcGVjdWxhckludGVuc2l0eU1hcD10LnNwZWN1bGFySW50ZW5zaXR5TWFwLHRoaXMuc3BlY3VsYXJDb2xvci5jb3B5KHQuc3BlY3VsYXJDb2xvciksdGhpcy5zcGVjdWxhckNvbG9yTWFwPXQuc3BlY3VsYXJDb2xvck1hcCx0aGlzfX0ucHJvdG90eXBlLmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWw9ITAsY2xhc3MgZXh0ZW5kcyBGb3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaFBob25nTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IHNuKDE2Nzc3MjE1KSx0aGlzLnNwZWN1bGFyPW5ldyBzbigxMTE4NDgxKSx0aGlzLnNoaW5pbmVzcz0zMCx0aGlzLm1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlPW5ldyBzbigwKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZU1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9Y18sdGhpcy5ub3JtYWxTY2FsZT1uZXcgJGUoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLnNwZWN1bGFyTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5jb21iaW5lPUtJLHRoaXMucmVmbGVjdGl2aXR5PTEsdGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4LHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuZmxhdFNoYWRpbmc9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5zcGVjdWxhci5jb3B5KHQuc3BlY3VsYXIpLHRoaXMuc2hpbmluZXNzPXQuc2hpbmluZXNzLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuc3BlY3VsYXJNYXA9dC5zcGVjdWxhck1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5lbnZNYXA9dC5lbnZNYXAsdGhpcy5jb21iaW5lPXQuY29tYmluZSx0aGlzLnJlZmxlY3Rpdml0eT10LnJlZmxlY3Rpdml0eSx0aGlzLnJlZnJhY3Rpb25SYXRpbz10LnJlZnJhY3Rpb25SYXRpbyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319LnByb3RvdHlwZS5pc01lc2hQaG9uZ01hdGVyaWFsPSEwLGNsYXNzIGV4dGVuZHMgRm97Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmRlZmluZXM9e1RPT046IiJ9LHRoaXMudHlwZT0iTWVzaFRvb25NYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgc24oMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5ncmFkaWVudE1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlPW5ldyBzbigwKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZU1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9Y18sdGhpcy5ub3JtYWxTY2FsZT1uZXcgJGUoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5ncmFkaWVudE1hcD10LmdyYWRpZW50TWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzfX0ucHJvdG90eXBlLmlzTWVzaFRvb25NYXRlcmlhbD0hMCxjbGFzcyBleHRlbmRzIEZve2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoTm9ybWFsTWF0ZXJpYWwiLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9Y18sdGhpcy5ub3JtYWxTY2FsZT1uZXcgJGUoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMuZm9nPSExLHRoaXMuZmxhdFNoYWRpbmc9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMuZmxhdFNoYWRpbmc9dC5mbGF0U2hhZGluZyx0aGlzfX0ucHJvdG90eXBlLmlzTWVzaE5vcm1hbE1hdGVyaWFsPSEwLGNsYXNzIGV4dGVuZHMgRm97Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hMYW1iZXJ0TWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IHNuKDE2Nzc3MjE1KSx0aGlzLm1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlPW5ldyBzbigwKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZU1hcD1udWxsLHRoaXMuc3BlY3VsYXJNYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5lbnZNYXA9bnVsbCx0aGlzLmNvbWJpbmU9S0ksdGhpcy5yZWZsZWN0aXZpdHk9MSx0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTgsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5saWdodE1hcD10LmxpZ2h0TWFwLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSx0aGlzLmFvTWFwPXQuYW9NYXAsdGhpcy5hb01hcEludGVuc2l0eT10LmFvTWFwSW50ZW5zaXR5LHRoaXMuZW1pc3NpdmUuY29weSh0LmVtaXNzaXZlKSx0aGlzLmVtaXNzaXZlTWFwPXQuZW1pc3NpdmVNYXAsdGhpcy5lbWlzc2l2ZUludGVuc2l0eT10LmVtaXNzaXZlSW50ZW5zaXR5LHRoaXMuc3BlY3VsYXJNYXA9dC5zcGVjdWxhck1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5lbnZNYXA9dC5lbnZNYXAsdGhpcy5jb21iaW5lPXQuY29tYmluZSx0aGlzLnJlZmxlY3Rpdml0eT10LnJlZmxlY3Rpdml0eSx0aGlzLnJlZnJhY3Rpb25SYXRpbz10LnJlZnJhY3Rpb25SYXRpbyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzfX0ucHJvdG90eXBlLmlzTWVzaExhbWJlcnRNYXRlcmlhbD0hMCxjbGFzcyBleHRlbmRzIEZve2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtNQVRDQVA6IiJ9LHRoaXMudHlwZT0iTWVzaE1hdGNhcE1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBzbigxNjc3NzIxNSksdGhpcy5tYXRjYXA9bnVsbCx0aGlzLm1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9Y18sdGhpcy5ub3JtYWxTY2FsZT1uZXcgJGUoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5mbGF0U2hhZGluZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZGVmaW5lcz17TUFUQ0FQOiIifSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXRjYXA9dC5tYXRjYXAsdGhpcy5tYXA9dC5tYXAsdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5mbGF0U2hhZGluZz10LmZsYXRTaGFkaW5nLHRoaXN9fS5wcm90b3R5cGUuaXNNZXNoTWF0Y2FwTWF0ZXJpYWw9ITAsY2xhc3MgZXh0ZW5kcyBHZHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTGluZURhc2hlZE1hdGVyaWFsIix0aGlzLnNjYWxlPTEsdGhpcy5kYXNoU2l6ZT0zLHRoaXMuZ2FwU2l6ZT0xLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5zY2FsZT10LnNjYWxlLHRoaXMuZGFzaFNpemU9dC5kYXNoU2l6ZSx0aGlzLmdhcFNpemU9dC5nYXBTaXplLHRoaXN9fS5wcm90b3R5cGUuaXNMaW5lRGFzaGVkTWF0ZXJpYWw9ITA7dmFyIElyPXthcnJheVNsaWNlOmZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gSXIuaXNUeXBlZEFycmF5KG4pP25ldyBuLmNvbnN0cnVjdG9yKG4uc3ViYXJyYXkodCx2b2lkIDAhPT1lP2U6bi5sZW5ndGgpKTpuLnNsaWNlKHQsZSl9LGNvbnZlcnRBcnJheTpmdW5jdGlvbihuLHQsZSl7cmV0dXJuIW58fCFlJiZuLmNvbnN0cnVjdG9yPT09dD9uOiJudW1iZXIiPT10eXBlb2YgdC5CWVRFU19QRVJfRUxFTUVOVD9uZXcgdChuKTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuKX0saXNUeXBlZEFycmF5OmZ1bmN0aW9uKG4pe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcobikmJiEobiBpbnN0YW5jZW9mIERhdGFWaWV3KX0sZ2V0S2V5ZnJhbWVPcmRlcjpmdW5jdGlvbihuKXtsZXQgZT1uLmxlbmd0aCxpPW5ldyBBcnJheShlKTtmb3IobGV0IHI9MDtyIT09ZTsrK3IpaVtyXT1yO3JldHVybiBpLnNvcnQoZnVuY3Rpb24ocixvKXtyZXR1cm4gbltyXS1uW29dfSksaX0sc29ydGVkQXJyYXk6ZnVuY3Rpb24obix0LGUpe2xldCBpPW4ubGVuZ3RoLHI9bmV3IG4uY29uc3RydWN0b3IoaSk7Zm9yKGxldCBvPTAsYT0wO2EhPT1pOysrbyl7bGV0IHM9ZVtvXSp0O2ZvcihsZXQgbD0wO2whPT10OysrbClyW2ErK109bltzK2xdfXJldHVybiByfSxmbGF0dGVuSlNPTjpmdW5jdGlvbihuLHQsZSxpKXtsZXQgcj0xLG89blswXTtmb3IoO3ZvaWQgMCE9PW8mJnZvaWQgMD09PW9baV07KW89bltyKytdO2lmKHZvaWQgMD09PW8pcmV0dXJuO2xldCBhPW9baV07aWYodm9pZCAwIT09YSlpZihBcnJheS5pc0FycmF5KGEpKWRve2E9b1tpXSx2b2lkIDAhPT1hJiYodC5wdXNoKG8udGltZSksZS5wdXNoLmFwcGx5KGUsYSkpLG89bltyKytdfXdoaWxlKHZvaWQgMCE9PW8pO2Vsc2UgaWYodm9pZCAwIT09YS50b0FycmF5KWRve2E9b1tpXSx2b2lkIDAhPT1hJiYodC5wdXNoKG8udGltZSksYS50b0FycmF5KGUsZS5sZW5ndGgpKSxvPW5bcisrXX13aGlsZSh2b2lkIDAhPT1vKTtlbHNlIGRve2E9b1tpXSx2b2lkIDAhPT1hJiYodC5wdXNoKG8udGltZSksZS5wdXNoKGEpKSxvPW5bcisrXX13aGlsZSh2b2lkIDAhPT1vKX0sc3ViY2xpcDpmdW5jdGlvbihuLHQsZSxpLHI9MzApe2xldCBvPW4uY2xvbmUoKTtvLm5hbWU9dDtsZXQgYT1bXTtmb3IobGV0IGw9MDtsPG8udHJhY2tzLmxlbmd0aDsrK2wpe2xldCBjPW8udHJhY2tzW2xdLGQ9Yy5nZXRWYWx1ZVNpemUoKSx1PVtdLHA9W107Zm9yKGxldCBoPTA7aDxjLnRpbWVzLmxlbmd0aDsrK2gpe2xldCBtPWMudGltZXNbaF0qcjtpZighKG08ZXx8bT49aSkpe3UucHVzaChjLnRpbWVzW2hdKTtmb3IobGV0IF89MDtfPGQ7KytfKXAucHVzaChjLnZhbHVlc1toKmQrX10pfX0wIT09dS5sZW5ndGgmJihjLnRpbWVzPUlyLmNvbnZlcnRBcnJheSh1LGMudGltZXMuY29uc3RydWN0b3IpLGMudmFsdWVzPUlyLmNvbnZlcnRBcnJheShwLGMudmFsdWVzLmNvbnN0cnVjdG9yKSxhLnB1c2goYykpfW8udHJhY2tzPWE7bGV0IHM9MS8wO2ZvcihsZXQgbD0wO2w8by50cmFja3MubGVuZ3RoOysrbClzPm8udHJhY2tzW2xdLnRpbWVzWzBdJiYocz1vLnRyYWNrc1tsXS50aW1lc1swXSk7Zm9yKGxldCBsPTA7bDxvLnRyYWNrcy5sZW5ndGg7KytsKW8udHJhY2tzW2xdLnNoaWZ0KC0xKnMpO3JldHVybiBvLnJlc2V0RHVyYXRpb24oKSxvfSxtYWtlQ2xpcEFkZGl0aXZlOmZ1bmN0aW9uKG4sdD0wLGU9bixpPTMwKXtpPD0wJiYoaT0zMCk7bGV0IHI9ZS50cmFja3MubGVuZ3RoLG89dC9pO2ZvcihsZXQgYT0wO2E8cjsrK2Epe2xldCBzPWUudHJhY2tzW2FdLGw9cy5WYWx1ZVR5cGVOYW1lO2lmKCJib29sIj09PWx8fCJzdHJpbmciPT09bCljb250aW51ZTtsZXQgYz1uLnRyYWNrcy5maW5kKGZ1bmN0aW9uKHkpe3JldHVybiB5Lm5hbWU9PT1zLm5hbWUmJnkuVmFsdWVUeXBlTmFtZT09PWx9KTtpZih2b2lkIDA9PT1jKWNvbnRpbnVlO2xldCBkPTAsdT1zLmdldFZhbHVlU2l6ZSgpO3MuY3JlYXRlSW50ZXJwb2xhbnQuaXNJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RHTFRGQ3ViaWNTcGxpbmUmJihkPXUvMyk7bGV0IHA9MCxoPWMuZ2V0VmFsdWVTaXplKCk7Yy5jcmVhdGVJbnRlcnBvbGFudC5pc0ludGVycG9sYW50RmFjdG9yeU1ldGhvZEdMVEZDdWJpY1NwbGluZSYmKHA9aC8zKTtsZXQgXyxtPXMudGltZXMubGVuZ3RoLTE7aWYobzw9cy50aW1lc1swXSlfPUlyLmFycmF5U2xpY2Uocy52YWx1ZXMsZCx1LWQpO2Vsc2UgaWYobz49cy50aW1lc1ttXSl7bGV0IHk9bSp1K2Q7Xz1Jci5hcnJheVNsaWNlKHMudmFsdWVzLHkseSt1LWQpfWVsc2V7bGV0IHk9cy5jcmVhdGVJbnRlcnBvbGFudCgpLHg9ZCxSPXUtZDt5LmV2YWx1YXRlKG8pLF89SXIuYXJyYXlTbGljZSh5LnJlc3VsdEJ1ZmZlcix4LFIpfSJxdWF0ZXJuaW9uIj09PWwmJihuZXcgb2EpLmZyb21BcnJheShfKS5ub3JtYWxpemUoKS5jb25qdWdhdGUoKS50b0FycmF5KF8pO2xldCBNPWMudGltZXMubGVuZ3RoO2ZvcihsZXQgeT0wO3k8TTsrK3kpe2xldCB4PXkqaCtwO2lmKCJxdWF0ZXJuaW9uIj09PWwpb2EubXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQoYy52YWx1ZXMseCxfLDAsYy52YWx1ZXMseCk7ZWxzZXtsZXQgUj1oLTIqcDtmb3IobGV0IEk9MDtJPFI7KytJKWMudmFsdWVzW3grSV0tPV9bSV19fX1yZXR1cm4gbi5ibGVuZE1vZGU9MjUwMSxufX0sV2M9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnM9dCx0aGlzLl9jYWNoZWRJbmRleD0wLHRoaXMucmVzdWx0QnVmZmVyPXZvaWQgMCE9PXI/cjpuZXcgZS5jb25zdHJ1Y3RvcihpKSx0aGlzLnNhbXBsZVZhbHVlcz1lLHRoaXMudmFsdWVTaXplPWksdGhpcy5zZXR0aW5ncz1udWxsLHRoaXMuRGVmYXVsdFNldHRpbmdzXz17fX1ldmFsdWF0ZSh0KXtsZXQgZT10aGlzLnBhcmFtZXRlclBvc2l0aW9ucyxpPXRoaXMuX2NhY2hlZEluZGV4LHI9ZVtpXSxvPWVbaS0xXTtlOnt0OntsZXQgYTtuOntpOmlmKCEodDxyKSl7Zm9yKGxldCBzPWkrMjs7KXtpZih2b2lkIDA9PT1yKXtpZih0PG8pYnJlYWsgaTtyZXR1cm4gaT1lLmxlbmd0aCx0aGlzLl9jYWNoZWRJbmRleD1pLHRoaXMuYWZ0ZXJFbmRfKGktMSx0LG8pfWlmKGk9PT1zKWJyZWFrO2lmKG89cixyPWVbKytpXSx0PHIpYnJlYWsgdH1hPWUubGVuZ3RoO2JyZWFrIG59aWYodD49bylicmVhayBlO3tsZXQgcz1lWzFdO3Q8cyYmKGk9MixvPXMpO2ZvcihsZXQgbD1pLTI7Oyl7aWYodm9pZCAwPT09bylyZXR1cm4gdGhpcy5fY2FjaGVkSW5kZXg9MCx0aGlzLmJlZm9yZVN0YXJ0XygwLHQscik7aWYoaT09PWwpYnJlYWs7aWYocj1vLG89ZVstLWktMV0sdD49bylicmVhayB0fWE9aSxpPTB9fWZvcig7aTxhOyl7bGV0IHM9aSthPj4+MTt0PGVbc10/YT1zOmk9cysxfWlmKHI9ZVtpXSxvPWVbaS0xXSx2b2lkIDA9PT1vKXJldHVybiB0aGlzLl9jYWNoZWRJbmRleD0wLHRoaXMuYmVmb3JlU3RhcnRfKDAsdCxyKTtpZih2b2lkIDA9PT1yKXJldHVybiBpPWUubGVuZ3RoLHRoaXMuX2NhY2hlZEluZGV4PWksdGhpcy5hZnRlckVuZF8oaS0xLG8sdCl9dGhpcy5fY2FjaGVkSW5kZXg9aSx0aGlzLmludGVydmFsQ2hhbmdlZF8oaSxvLHIpfXJldHVybiB0aGlzLmludGVycG9sYXRlXyhpLG8sdCxyKX1nZXRTZXR0aW5nc18oKXtyZXR1cm4gdGhpcy5zZXR0aW5nc3x8dGhpcy5EZWZhdWx0U2V0dGluZ3NffWNvcHlTYW1wbGVWYWx1ZV8odCl7bGV0IGU9dGhpcy5yZXN1bHRCdWZmZXIsaT10aGlzLnNhbXBsZVZhbHVlcyxyPXRoaXMudmFsdWVTaXplLG89dCpyO2ZvcihsZXQgYT0wO2EhPT1yOysrYSllW2FdPWlbbythXTtyZXR1cm4gZX1pbnRlcnBvbGF0ZV8oKXt0aHJvdyBuZXcgRXJyb3IoImNhbGwgdG8gYWJzdHJhY3QgbWV0aG9kIil9aW50ZXJ2YWxDaGFuZ2VkXygpe319O1djLnByb3RvdHlwZS5iZWZvcmVTdGFydF89V2MucHJvdG90eXBlLmNvcHlTYW1wbGVWYWx1ZV8sV2MucHJvdG90eXBlLmFmdGVyRW5kXz1XYy5wcm90b3R5cGUuY29weVNhbXBsZVZhbHVlXzt2YXIgQUI9Y2xhc3MgZXh0ZW5kcyBXY3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcih0LGUsaSxyKSx0aGlzLl93ZWlnaHRQcmV2PS0wLHRoaXMuX29mZnNldFByZXY9LTAsdGhpcy5fd2VpZ2h0TmV4dD0tMCx0aGlzLl9vZmZzZXROZXh0PS0wLHRoaXMuRGVmYXVsdFNldHRpbmdzXz17ZW5kaW5nU3RhcnQ6ajAsZW5kaW5nRW5kOmowfX1pbnRlcnZhbENoYW5nZWRfKHQsZSxpKXtsZXQgcj10aGlzLnBhcmFtZXRlclBvc2l0aW9ucyxvPXQtMixhPXQrMSxzPXJbb10sbD1yW2FdO2lmKHZvaWQgMD09PXMpc3dpdGNoKHRoaXMuZ2V0U2V0dGluZ3NfKCkuZW5kaW5nU3RhcnQpe2Nhc2UgRzA6bz10LHM9MiplLWk7YnJlYWs7Y2FzZSAyNDAyOm89ci5sZW5ndGgtMixzPWUrcltvXS1yW28rMV07YnJlYWs7ZGVmYXVsdDpvPXQscz1pfWlmKHZvaWQgMD09PWwpc3dpdGNoKHRoaXMuZ2V0U2V0dGluZ3NfKCkuZW5kaW5nRW5kKXtjYXNlIEcwOmE9dCxsPTIqaS1lO2JyZWFrO2Nhc2UgMjQwMjphPTEsbD1pK3JbMV0tclswXTticmVhaztkZWZhdWx0OmE9dC0xLGw9ZX1sZXQgYz0uNSooaS1lKSxkPXRoaXMudmFsdWVTaXplO3RoaXMuX3dlaWdodFByZXY9Yy8oZS1zKSx0aGlzLl93ZWlnaHROZXh0PWMvKGwtaSksdGhpcy5fb2Zmc2V0UHJldj1vKmQsdGhpcy5fb2Zmc2V0TmV4dD1hKmR9aW50ZXJwb2xhdGVfKHQsZSxpLHIpe2xldCBvPXRoaXMucmVzdWx0QnVmZmVyLGE9dGhpcy5zYW1wbGVWYWx1ZXMscz10aGlzLnZhbHVlU2l6ZSxsPXQqcyxjPWwtcyxkPXRoaXMuX29mZnNldFByZXYsdT10aGlzLl9vZmZzZXROZXh0LHA9dGhpcy5fd2VpZ2h0UHJldixoPXRoaXMuX3dlaWdodE5leHQsbT0oaS1lKS8oci1lKSxfPW0qbSxNPV8qbSx5PS1wKk0rMipwKl8tcCptLHg9KDErcCkqTSsoLTEuNS0yKnApKl8rKC0uNStwKSptKzEsUj0oLTEtaCkqTSsoMS41K2gpKl8rLjUqbSxJPWgqTS1oKl87Zm9yKGxldCBCPTA7QiE9PXM7KytCKW9bQl09eSphW2QrQl0reCphW2MrQl0rUiphW2wrQl0rSSphW3UrQl07cmV0dXJuIG99fSxqST1jbGFzcyBleHRlbmRzIFdje2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQsZSxpLHIpfWludGVycG9sYXRlXyh0LGUsaSxyKXtsZXQgbz10aGlzLnJlc3VsdEJ1ZmZlcixhPXRoaXMuc2FtcGxlVmFsdWVzLHM9dGhpcy52YWx1ZVNpemUsbD10KnMsYz1sLXMsZD0oaS1lKS8oci1lKSx1PTEtZDtmb3IobGV0IHA9MDtwIT09czsrK3Apb1twXT1hW2MrcF0qdSthW2wrcF0qZDtyZXR1cm4gb319LFJCPWNsYXNzIGV4dGVuZHMgV2N7Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCxlLGkscil9aW50ZXJwb2xhdGVfKHQpe3JldHVybiB0aGlzLmNvcHlTYW1wbGVWYWx1ZV8odC0xKX19LGNsPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe2lmKHZvaWQgMD09PXQpdGhyb3cgbmV3IEVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiB0cmFjayBuYW1lIGlzIHVuZGVmaW5lZCIpO2lmKHZvaWQgMD09PWV8fDA9PT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IG5vIGtleWZyYW1lcyBpbiB0cmFjayBuYW1lZCAiK3QpO3RoaXMubmFtZT10LHRoaXMudGltZXM9SXIuY29udmVydEFycmF5KGUsdGhpcy5UaW1lQnVmZmVyVHlwZSksdGhpcy52YWx1ZXM9SXIuY29udmVydEFycmF5KGksdGhpcy5WYWx1ZUJ1ZmZlclR5cGUpLHRoaXMuc2V0SW50ZXJwb2xhdGlvbihyfHx0aGlzLkRlZmF1bHRJbnRlcnBvbGF0aW9uKX1zdGF0aWMgdG9KU09OKHQpe2xldCBpLGU9dC5jb25zdHJ1Y3RvcjtpZihlLnRvSlNPTiE9PXRoaXMudG9KU09OKWk9ZS50b0pTT04odCk7ZWxzZXtpPXtuYW1lOnQubmFtZSx0aW1lczpJci5jb252ZXJ0QXJyYXkodC50aW1lcyxBcnJheSksdmFsdWVzOklyLmNvbnZlcnRBcnJheSh0LnZhbHVlcyxBcnJheSl9O2xldCByPXQuZ2V0SW50ZXJwb2xhdGlvbigpO3IhPT10LkRlZmF1bHRJbnRlcnBvbGF0aW9uJiYoaS5pbnRlcnBvbGF0aW9uPXIpfXJldHVybiBpLnR5cGU9dC5WYWx1ZVR5cGVOYW1lLGl9SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGUodCl7cmV0dXJuIG5ldyBSQih0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyKHQpe3JldHVybiBuZXcgakkodGhpcy50aW1lcyx0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLHQpfUludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aCh0KXtyZXR1cm4gbmV3IEFCKHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSx0KX1zZXRJbnRlcnBvbGF0aW9uKHQpe2xldCBlO3N3aXRjaCh0KXtjYXNlIDIzMDA6ZT10aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZERpc2NyZXRlO2JyZWFrO2Nhc2UgMjMwMTplPXRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyO2JyZWFrO2Nhc2UgMjMwMjplPXRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RofWlmKHZvaWQgMD09PWUpe2xldCBpPSJ1bnN1cHBvcnRlZCBpbnRlcnBvbGF0aW9uIGZvciAiK3RoaXMuVmFsdWVUeXBlTmFtZSsiIGtleWZyYW1lIHRyYWNrIG5hbWVkICIrdGhpcy5uYW1lO2lmKHZvaWQgMD09PXRoaXMuY3JlYXRlSW50ZXJwb2xhbnQpe2lmKHQ9PT10aGlzLkRlZmF1bHRJbnRlcnBvbGF0aW9uKXRocm93IG5ldyBFcnJvcihpKTt0aGlzLnNldEludGVycG9sYXRpb24odGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbil9cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuS2V5ZnJhbWVUcmFjazoiLGkpLHRoaXN9cmV0dXJuIHRoaXMuY3JlYXRlSW50ZXJwb2xhbnQ9ZSx0aGlzfWdldEludGVycG9sYXRpb24oKXtzd2l0Y2godGhpcy5jcmVhdGVJbnRlcnBvbGFudCl7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZERpc2NyZXRlOnJldHVybiAyMzAwO2Nhc2UgdGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI6cmV0dXJuIDIzMDE7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDpyZXR1cm4gMjMwMn19Z2V0VmFsdWVTaXplKCl7cmV0dXJuIHRoaXMudmFsdWVzLmxlbmd0aC90aGlzLnRpbWVzLmxlbmd0aH1zaGlmdCh0KXtpZigwIT09dCl7bGV0IGU9dGhpcy50aW1lcztmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2khPT1yOysraSllW2ldKz10fXJldHVybiB0aGlzfXNjYWxlKHQpe2lmKDEhPT10KXtsZXQgZT10aGlzLnRpbWVzO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aSE9PXI7KytpKWVbaV0qPXR9cmV0dXJuIHRoaXN9dHJpbSh0LGUpe2xldCBpPXRoaXMudGltZXMscj1pLmxlbmd0aCxvPTAsYT1yLTE7Zm9yKDtvIT09ciYmaVtvXTx0OykrK287Zm9yKDstMSE9PWEmJmlbYV0+ZTspLS1hO2lmKCsrYSwwIT09b3x8YSE9PXIpe28+PWEmJihhPU1hdGgubWF4KGEsMSksbz1hLTEpO2xldCBzPXRoaXMuZ2V0VmFsdWVTaXplKCk7dGhpcy50aW1lcz1Jci5hcnJheVNsaWNlKGksbyxhKSx0aGlzLnZhbHVlcz1Jci5hcnJheVNsaWNlKHRoaXMudmFsdWVzLG8qcyxhKnMpfXJldHVybiB0aGlzfXZhbGlkYXRlKCl7bGV0IHQ9ITAsZT10aGlzLmdldFZhbHVlU2l6ZSgpO2UtTWF0aC5mbG9vcihlKSE9MCYmKGNvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IEludmFsaWQgdmFsdWUgc2l6ZSBpbiB0cmFjay4iLHRoaXMpLHQ9ITEpO2xldCBpPXRoaXMudGltZXMscj10aGlzLnZhbHVlcyxvPWkubGVuZ3RoOzA9PT1vJiYoY29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogVHJhY2sgaXMgZW1wdHkuIix0aGlzKSx0PSExKTtsZXQgYT1udWxsO2ZvcihsZXQgcz0wO3MhPT1vO3MrKyl7bGV0IGw9aVtzXTtpZigibnVtYmVyIj09dHlwZW9mIGwmJmlzTmFOKGwpKXtjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBUaW1lIGlzIG5vdCBhIHZhbGlkIG51bWJlci4iLHRoaXMscyxsKSx0PSExO2JyZWFrfWlmKG51bGwhPT1hJiZhPmwpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IE91dCBvZiBvcmRlciBrZXlzLiIsdGhpcyxzLGwsYSksdD0hMTticmVha31hPWx9aWYodm9pZCAwIT09ciYmSXIuaXNUeXBlZEFycmF5KHIpKWZvcihsZXQgcz0wLGw9ci5sZW5ndGg7cyE9PWw7KytzKXtsZXQgYz1yW3NdO2lmKGlzTmFOKGMpKXtjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBWYWx1ZSBpcyBub3QgYSB2YWxpZCBudW1iZXIuIix0aGlzLHMsYyksdD0hMTticmVha319cmV0dXJuIHR9b3B0aW1pemUoKXtsZXQgdD1Jci5hcnJheVNsaWNlKHRoaXMudGltZXMpLGU9SXIuYXJyYXlTbGljZSh0aGlzLnZhbHVlcyksaT10aGlzLmdldFZhbHVlU2l6ZSgpLHI9MjMwMj09PXRoaXMuZ2V0SW50ZXJwb2xhdGlvbigpLG89dC5sZW5ndGgtMSxhPTE7Zm9yKGxldCBzPTE7czxvOysrcyl7bGV0IGw9ITEsYz10W3NdO2lmKGMhPT10W3MrMV0mJigxIT09c3x8YyE9PXRbMF0pKWlmKHIpbD0hMDtlbHNle2xldCB1PXMqaSxwPXUtaSxoPXUraTtmb3IobGV0IG09MDttIT09aTsrK20pe2xldCBfPWVbdSttXTtpZihfIT09ZVtwK21dfHxfIT09ZVtoK21dKXtsPSEwO2JyZWFrfX19aWYobCl7aWYocyE9PWEpe3RbYV09dFtzXTtsZXQgdT1zKmkscD1hKmk7Zm9yKGxldCBoPTA7aCE9PWk7KytoKWVbcCtoXT1lW3UraF19KythfX1pZihvPjApe3RbYV09dFtvXTtmb3IobGV0IHM9byppLGw9YSppLGM9MDtjIT09aTsrK2MpZVtsK2NdPWVbcytjXTsrK2F9cmV0dXJuIGEhPT10Lmxlbmd0aD8odGhpcy50aW1lcz1Jci5hcnJheVNsaWNlKHQsMCxhKSx0aGlzLnZhbHVlcz1Jci5hcnJheVNsaWNlKGUsMCxhKmkpKToodGhpcy50aW1lcz10LHRoaXMudmFsdWVzPWUpLHRoaXN9Y2xvbmUoKXtsZXQgdD1Jci5hcnJheVNsaWNlKHRoaXMudGltZXMsMCksZT1Jci5hcnJheVNsaWNlKHRoaXMudmFsdWVzLDApLHI9bmV3KDAsdGhpcy5jb25zdHJ1Y3RvcikodGhpcy5uYW1lLHQsZSk7cmV0dXJuIHIuY3JlYXRlSW50ZXJwb2xhbnQ9dGhpcy5jcmVhdGVJbnRlcnBvbGFudCxyfX07Y2wucHJvdG90eXBlLlRpbWVCdWZmZXJUeXBlPUZsb2F0MzJBcnJheSxjbC5wcm90b3R5cGUuVmFsdWVCdWZmZXJUeXBlPUZsb2F0MzJBcnJheSxjbC5wcm90b3R5cGUuRGVmYXVsdEludGVycG9sYXRpb249MjMwMTt2YXIgQXA9Y2xhc3MgZXh0ZW5kcyBjbHt9O0FwLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJib29sIixBcC5wcm90b3R5cGUuVmFsdWVCdWZmZXJUeXBlPUFycmF5LEFwLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj0yMzAwLEFwLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI9dm9pZCAwLEFwLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg9dm9pZCAwO3ZhciBHST1jbGFzcyBleHRlbmRzIGNse307R0kucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9ImNvbG9yIjt2YXIgYV89Y2xhc3MgZXh0ZW5kcyBjbHt9O2FfLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJudW1iZXIiO3ZhciBQQj1jbGFzcyBleHRlbmRzIFdje2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQsZSxpLHIpfWludGVycG9sYXRlXyh0LGUsaSxyKXtsZXQgbz10aGlzLnJlc3VsdEJ1ZmZlcixhPXRoaXMuc2FtcGxlVmFsdWVzLHM9dGhpcy52YWx1ZVNpemUsbD0oaS1lKS8oci1lKSxjPXQqcztmb3IobGV0IGQ9YytzO2MhPT1kO2MrPTQpb2Euc2xlcnBGbGF0KG8sMCxhLGMtcyxhLGMsbCk7cmV0dXJuIG99fSxTbT1jbGFzcyBleHRlbmRzIGNse0ludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcih0KXtyZXR1cm4gbmV3IFBCKHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSx0KX19O1NtLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJxdWF0ZXJuaW9uIixTbS5wcm90b3R5cGUuRGVmYXVsdEludGVycG9sYXRpb249MjMwMSxTbS5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoPXZvaWQgMDt2YXIgUnA9Y2xhc3MgZXh0ZW5kcyBjbHt9O1JwLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJzdHJpbmciLFJwLnByb3RvdHlwZS5WYWx1ZUJ1ZmZlclR5cGU9QXJyYXksUnAucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uPTIzMDAsUnAucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcj12b2lkIDAsUnAucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aD12b2lkIDA7dmFyIHNfPWNsYXNzIGV4dGVuZHMgY2x7fTtzXy5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0idmVjdG9yIjt2YXIgV0k9Y2xhc3N7Y29uc3RydWN0b3IodCxlPS0xLGkscj0yNTAwKXt0aGlzLm5hbWU9dCx0aGlzLnRyYWNrcz1pLHRoaXMuZHVyYXRpb249ZSx0aGlzLmJsZW5kTW9kZT1yLHRoaXMudXVpZD1ZbCgpLHRoaXMuZHVyYXRpb248MCYmdGhpcy5yZXNldER1cmF0aW9uKCl9c3RhdGljIHBhcnNlKHQpe2xldCBlPVtdLGk9dC50cmFja3Mscj0xLyh0LmZwc3x8MSk7Zm9yKGxldCBhPTAscz1pLmxlbmd0aDthIT09czsrK2EpZS5wdXNoKG9OZShpW2FdKS5zY2FsZShyKSk7bGV0IG89bmV3IHRoaXModC5uYW1lLHQuZHVyYXRpb24sZSx0LmJsZW5kTW9kZSk7cmV0dXJuIG8udXVpZD10LnV1aWQsb31zdGF0aWMgdG9KU09OKHQpe2xldCBlPVtdLGk9dC50cmFja3Mscj17bmFtZTp0Lm5hbWUsZHVyYXRpb246dC5kdXJhdGlvbix0cmFja3M6ZSx1dWlkOnQudXVpZCxibGVuZE1vZGU6dC5ibGVuZE1vZGV9O2ZvcihsZXQgbz0wLGE9aS5sZW5ndGg7byE9PWE7KytvKWUucHVzaChjbC50b0pTT04oaVtvXSkpO3JldHVybiByfXN0YXRpYyBDcmVhdGVGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZSh0LGUsaSxyKXtsZXQgbz1lLmxlbmd0aCxhPVtdO2ZvcihsZXQgcz0wO3M8bztzKyspe2xldCBsPVtdLGM9W107bC5wdXNoKChzK28tMSklbyxzLChzKzEpJW8pLGMucHVzaCgwLDEsMCk7bGV0IGQ9SXIuZ2V0S2V5ZnJhbWVPcmRlcihsKTtsPUlyLnNvcnRlZEFycmF5KGwsMSxkKSxjPUlyLnNvcnRlZEFycmF5KGMsMSxkKSwhciYmMD09PWxbMF0mJihsLnB1c2gobyksYy5wdXNoKGNbMF0pKSxhLnB1c2gobmV3IGFfKCIubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyIrZVtzXS5uYW1lKyJdIixsLGMpLnNjYWxlKDEvaSkpfXJldHVybiBuZXcgdGhpcyh0LC0xLGEpfXN0YXRpYyBmaW5kQnlOYW1lKHQsZSl7bGV0IGk9dDtBcnJheS5pc0FycmF5KHQpfHwoaT10Lmdlb21ldHJ5JiZ0Lmdlb21ldHJ5LmFuaW1hdGlvbnN8fHQuYW5pbWF0aW9ucyk7Zm9yKGxldCByPTA7cjxpLmxlbmd0aDtyKyspaWYoaVtyXS5uYW1lPT09ZSlyZXR1cm4gaVtyXTtyZXR1cm4gbnVsbH1zdGF0aWMgQ3JlYXRlQ2xpcHNGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZXModCxlLGkpe2xldCByPXt9LG89L14oW1x3LV0qPykoW1xkXSspJC87Zm9yKGxldCBzPTAsbD10Lmxlbmd0aDtzPGw7cysrKXtsZXQgYz10W3NdLGQ9Yy5uYW1lLm1hdGNoKG8pO2lmKGQmJmQubGVuZ3RoPjEpe2xldCB1PWRbMV0scD1yW3VdO3B8fChyW3VdPXA9W10pLHAucHVzaChjKX19bGV0IGE9W107Zm9yKGxldCBzIGluIHIpYS5wdXNoKHRoaXMuQ3JlYXRlRnJvbU1vcnBoVGFyZ2V0U2VxdWVuY2UocyxyW3NdLGUsaSkpO3JldHVybiBhfXN0YXRpYyBwYXJzZUFuaW1hdGlvbih0LGUpe2lmKCF0KXJldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5BbmltYXRpb25DbGlwOiBObyBhbmltYXRpb24gaW4gSlNPTkxvYWRlciBkYXRhLiIpLG51bGw7bGV0IGk9ZnVuY3Rpb24odSxwLGgsbSxfKXtpZigwIT09aC5sZW5ndGgpe2xldCBNPVtdLHk9W107SXIuZmxhdHRlbkpTT04oaCxNLHksbSksMCE9PU0ubGVuZ3RoJiZfLnB1c2gobmV3IHUocCxNLHkpKX19LHI9W10sbz10Lm5hbWV8fCJkZWZhdWx0IixhPXQuZnBzfHwzMCxzPXQuYmxlbmRNb2RlLGw9dC5sZW5ndGh8fC0xLGM9dC5oaWVyYXJjaHl8fFtdO2ZvcihsZXQgdT0wO3U8Yy5sZW5ndGg7dSsrKXtsZXQgcD1jW3VdLmtleXM7aWYocCYmMCE9PXAubGVuZ3RoKWlmKHBbMF0ubW9ycGhUYXJnZXRzKXtsZXQgbSxoPXt9O2ZvcihtPTA7bTxwLmxlbmd0aDttKyspaWYocFttXS5tb3JwaFRhcmdldHMpZm9yKGxldCBfPTA7XzxwW21dLm1vcnBoVGFyZ2V0cy5sZW5ndGg7XysrKWhbcFttXS5tb3JwaFRhcmdldHNbX11dPS0xO2ZvcihsZXQgXyBpbiBoKXtsZXQgTT1bXSx5PVtdO2ZvcihsZXQgeD0wO3ghPT1wW21dLm1vcnBoVGFyZ2V0cy5sZW5ndGg7Kyt4KXtsZXQgUj1wW21dO00ucHVzaChSLnRpbWUpLHkucHVzaChSLm1vcnBoVGFyZ2V0PT09Xz8xOjApfXIucHVzaChuZXcgYV8oIi5tb3JwaFRhcmdldEluZmx1ZW5jZVsiK18rIl0iLE0seSkpfWw9aC5sZW5ndGgqKGF8fDEpfWVsc2V7bGV0IGg9Ii5ib25lc1siK2VbdV0ubmFtZSsiXSI7aShzXyxoKyIucG9zaXRpb24iLHAsInBvcyIsciksaShTbSxoKyIucXVhdGVybmlvbiIscCwicm90IixyKSxpKHNfLGgrIi5zY2FsZSIscCwic2NsIixyKX19cmV0dXJuIDA9PT1yLmxlbmd0aD9udWxsOm5ldyB0aGlzKG8sbCxyLHMpfXJlc2V0RHVyYXRpb24oKXtsZXQgZT0wO2ZvcihsZXQgaT0wLHI9dGhpcy50cmFja3MubGVuZ3RoO2khPT1yOysraSl7bGV0IG89dGhpcy50cmFja3NbaV07ZT1NYXRoLm1heChlLG8udGltZXNbby50aW1lcy5sZW5ndGgtMV0pfXJldHVybiB0aGlzLmR1cmF0aW9uPWUsdGhpc310cmltKCl7Zm9yKGxldCB0PTA7dDx0aGlzLnRyYWNrcy5sZW5ndGg7dCsrKXRoaXMudHJhY2tzW3RdLnRyaW0oMCx0aGlzLmR1cmF0aW9uKTtyZXR1cm4gdGhpc312YWxpZGF0ZSgpe2xldCB0PSEwO2ZvcihsZXQgZT0wO2U8dGhpcy50cmFja3MubGVuZ3RoO2UrKyl0PXQmJnRoaXMudHJhY2tzW2VdLnZhbGlkYXRlKCk7cmV0dXJuIHR9b3B0aW1pemUoKXtmb3IobGV0IHQ9MDt0PHRoaXMudHJhY2tzLmxlbmd0aDt0KyspdGhpcy50cmFja3NbdF0ub3B0aW1pemUoKTtyZXR1cm4gdGhpc31jbG9uZSgpe2xldCB0PVtdO2ZvcihsZXQgZT0wO2U8dGhpcy50cmFja3MubGVuZ3RoO2UrKyl0LnB1c2godGhpcy50cmFja3NbZV0uY2xvbmUoKSk7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMubmFtZSx0aGlzLmR1cmF0aW9uLHQsdGhpcy5ibGVuZE1vZGUpfXRvSlNPTigpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvSlNPTih0aGlzKX19O2Z1bmN0aW9uIG9OZShuKXtpZih2b2lkIDA9PT1uLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiB0cmFjayB0eXBlIHVuZGVmaW5lZCwgY2FuIG5vdCBwYXJzZSIpO2xldCB0PWZ1bmN0aW9uKG4pe3N3aXRjaChuLnRvTG93ZXJDYXNlKCkpe2Nhc2Uic2NhbGFyIjpjYXNlImRvdWJsZSI6Y2FzZSJmbG9hdCI6Y2FzZSJudW1iZXIiOmNhc2UiaW50ZWdlciI6cmV0dXJuIGFfO2Nhc2UidmVjdG9yIjpjYXNlInZlY3RvcjIiOmNhc2UidmVjdG9yMyI6Y2FzZSJ2ZWN0b3I0IjpyZXR1cm4gc187Y2FzZSJjb2xvciI6cmV0dXJuIEdJO2Nhc2UicXVhdGVybmlvbiI6cmV0dXJuIFNtO2Nhc2UiYm9vbCI6Y2FzZSJib29sZWFuIjpyZXR1cm4gQXA7Y2FzZSJzdHJpbmciOnJldHVybiBScH10aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFVuc3VwcG9ydGVkIHR5cGVOYW1lOiAiK24pfShuLnR5cGUpO2lmKHZvaWQgMD09PW4udGltZXMpe2xldCBlPVtdLGk9W107SXIuZmxhdHRlbkpTT04obi5rZXlzLGUsaSwidmFsdWUiKSxuLnRpbWVzPWUsbi52YWx1ZXM9aX1yZXR1cm4gdm9pZCAwIT09dC5wYXJzZT90LnBhcnNlKG4pOm5ldyB0KG4ubmFtZSxuLnRpbWVzLG4udmFsdWVzLG4uaW50ZXJwb2xhdGlvbil9dmFyIGxfPXtlbmFibGVkOiExLGZpbGVzOnt9LGFkZDpmdW5jdGlvbihuLHQpeyExIT09dGhpcy5lbmFibGVkJiYodGhpcy5maWxlc1tuXT10KX0sZ2V0OmZ1bmN0aW9uKG4pe2lmKCExIT09dGhpcy5lbmFibGVkKXJldHVybiB0aGlzLmZpbGVzW25dfSxyZW1vdmU6ZnVuY3Rpb24obil7ZGVsZXRlIHRoaXMuZmlsZXNbbl19LGNsZWFyOmZ1bmN0aW9uKCl7dGhpcy5maWxlcz17fX19LGFOZT1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe2xldCBsLHI9dGhpcyxvPSExLGE9MCxzPTAsYz1bXTt0aGlzLm9uU3RhcnQ9dm9pZCAwLHRoaXMub25Mb2FkPXQsdGhpcy5vblByb2dyZXNzPWUsdGhpcy5vbkVycm9yPWksdGhpcy5pdGVtU3RhcnQ9ZnVuY3Rpb24oZCl7cysrLCExPT09byYmdm9pZCAwIT09ci5vblN0YXJ0JiZyLm9uU3RhcnQoZCxhLHMpLG89ITB9LHRoaXMuaXRlbUVuZD1mdW5jdGlvbihkKXthKyssdm9pZCAwIT09ci5vblByb2dyZXNzJiZyLm9uUHJvZ3Jlc3MoZCxhLHMpLGE9PT1zJiYobz0hMSx2b2lkIDAhPT1yLm9uTG9hZCYmci5vbkxvYWQoKSl9LHRoaXMuaXRlbUVycm9yPWZ1bmN0aW9uKGQpe3ZvaWQgMCE9PXIub25FcnJvciYmci5vbkVycm9yKGQpfSx0aGlzLnJlc29sdmVVUkw9ZnVuY3Rpb24oZCl7cmV0dXJuIGw/bChkKTpkfSx0aGlzLnNldFVSTE1vZGlmaWVyPWZ1bmN0aW9uKGQpe3JldHVybiBsPWQsdGhpc30sdGhpcy5hZGRIYW5kbGVyPWZ1bmN0aW9uKGQsdSl7cmV0dXJuIGMucHVzaChkLHUpLHRoaXN9LHRoaXMucmVtb3ZlSGFuZGxlcj1mdW5jdGlvbihkKXtsZXQgdT1jLmluZGV4T2YoZCk7cmV0dXJuLTEhPT11JiZjLnNwbGljZSh1LDIpLHRoaXN9LHRoaXMuZ2V0SGFuZGxlcj1mdW5jdGlvbihkKXtmb3IobGV0IHU9MCxwPWMubGVuZ3RoO3U8cDt1Kz0yKXtsZXQgaD1jW3VdLG09Y1t1KzFdO2lmKGguZ2xvYmFsJiYoaC5sYXN0SW5kZXg9MCksaC50ZXN0KGQpKXJldHVybiBtfXJldHVybiBudWxsfX19LHFjPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMubWFuYWdlcj12b2lkIDAhPT10P3Q6YU5lLHRoaXMuY3Jvc3NPcmlnaW49ImFub255bW91cyIsdGhpcy53aXRoQ3JlZGVudGlhbHM9ITEsdGhpcy5wYXRoPSIiLHRoaXMucmVzb3VyY2VQYXRoPSIiLHRoaXMucmVxdWVzdEhlYWRlcj17fX1sb2FkKCl7fWxvYWRBc3luYyh0LGUpe2xldCBpPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsbyl7aS5sb2FkKHQscixlLG8pfSl9cGFyc2UoKXt9c2V0Q3Jvc3NPcmlnaW4odCl7cmV0dXJuIHRoaXMuY3Jvc3NPcmlnaW49dCx0aGlzfXNldFdpdGhDcmVkZW50aWFscyh0KXtyZXR1cm4gdGhpcy53aXRoQ3JlZGVudGlhbHM9dCx0aGlzfXNldFBhdGgodCl7cmV0dXJuIHRoaXMucGF0aD10LHRoaXN9c2V0UmVzb3VyY2VQYXRoKHQpe3JldHVybiB0aGlzLnJlc291cmNlUGF0aD10LHRoaXN9c2V0UmVxdWVzdEhlYWRlcih0KXtyZXR1cm4gdGhpcy5yZXF1ZXN0SGVhZGVyPXQsdGhpc319LEhkPXt9LE9CPWNsYXNzIGV4dGVuZHMgcWN7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LGUsaSxyKXt2b2lkIDA9PT10JiYodD0iIiksdm9pZCAwIT09dGhpcy5wYXRoJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtsZXQgbz1sXy5nZXQodCk7aWYodm9pZCAwIT09bylyZXR1cm4gdGhpcy5tYW5hZ2VyLml0ZW1TdGFydCh0KSxzZXRUaW1lb3V0KCgpPT57ZSYmZShvKSx0aGlzLm1hbmFnZXIuaXRlbUVuZCh0KX0sMCksbztpZih2b2lkIDAhPT1IZFt0XSlyZXR1cm4gdm9pZCBIZFt0XS5wdXNoKHtvbkxvYWQ6ZSxvblByb2dyZXNzOmksb25FcnJvcjpyfSk7SGRbdF09W10sSGRbdF0ucHVzaCh7b25Mb2FkOmUsb25Qcm9ncmVzczppLG9uRXJyb3I6cn0pO2xldCBhPW5ldyBSZXF1ZXN0KHQse2hlYWRlcnM6bmV3IEhlYWRlcnModGhpcy5yZXF1ZXN0SGVhZGVyKSxjcmVkZW50aWFsczp0aGlzLndpdGhDcmVkZW50aWFscz8iaW5jbHVkZSI6InNhbWUtb3JpZ2luIn0pLHM9dGhpcy5taW1lVHlwZSxsPXRoaXMucmVzcG9uc2VUeXBlO2ZldGNoKGEpLnRoZW4oYz0+e2lmKDIwMD09PWMuc3RhdHVzfHwwPT09Yy5zdGF0dXMpe2lmKDA9PT1jLnN0YXR1cyYmY29uc29sZS53YXJuKCJUSFJFRS5GaWxlTG9hZGVyOiBIVFRQIFN0YXR1cyAwIHJlY2VpdmVkLiIpLHR5cGVvZiBSZWFkYWJsZVN0cmVhbT4idSJ8fHZvaWQgMD09PWMuYm9keS5nZXRSZWFkZXIpcmV0dXJuIGM7bGV0IGQ9SGRbdF0sdT1jLmJvZHkuZ2V0UmVhZGVyKCkscD1jLmhlYWRlcnMuZ2V0KCJDb250ZW50LUxlbmd0aCIpLGg9cD9wYXJzZUludChwKTowLG09MCE9PWgsXz0wLE09bmV3IFJlYWRhYmxlU3RyZWFtKHtzdGFydCh5KXshZnVuY3Rpb24geCgpe3UucmVhZCgpLnRoZW4oKHtkb25lOlIsdmFsdWU6SX0pPT57aWYoUil5LmNsb3NlKCk7ZWxzZXtfKz1JLmJ5dGVMZW5ndGg7bGV0IEI9bmV3IFByb2dyZXNzRXZlbnQoInByb2dyZXNzIix7bGVuZ3RoQ29tcHV0YWJsZTptLGxvYWRlZDpfLHRvdGFsOmh9KTtmb3IobGV0IGVlPTAsUT1kLmxlbmd0aDtlZTxRO2VlKyspe2xldCB3ZT1kW2VlXTt3ZS5vblByb2dyZXNzJiZ3ZS5vblByb2dyZXNzKEIpfXkuZW5xdWV1ZShJKSx4KCl9fSl9KCl9fSk7cmV0dXJuIG5ldyBSZXNwb25zZShNKX10aHJvdyBFcnJvcihgZmV0Y2ggZm9yICIke2MudXJsfSIgcmVzcG9uZGVkIHdpdGggJHtjLnN0YXR1c306ICR7Yy5zdGF0dXNUZXh0fWApfSkudGhlbihjPT57c3dpdGNoKGwpe2Nhc2UiYXJyYXlidWZmZXIiOnJldHVybiBjLmFycmF5QnVmZmVyKCk7Y2FzZSJibG9iIjpyZXR1cm4gYy5ibG9iKCk7Y2FzZSJkb2N1bWVudCI6cmV0dXJuIGMudGV4dCgpLnRoZW4oZD0+KG5ldyBET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhkLHMpKTtjYXNlImpzb24iOnJldHVybiBjLmpzb24oKTtkZWZhdWx0OmlmKHZvaWQgMD09PXMpcmV0dXJuIGMudGV4dCgpO3tsZXQgdT0vY2hhcnNldD0iPyhbXjsiXHNdKikiPy9pLmV4ZWMocykscD11JiZ1WzFdP3VbMV0udG9Mb3dlckNhc2UoKTp2b2lkIDAsaD1uZXcgVGV4dERlY29kZXIocCk7cmV0dXJuIGMuYXJyYXlCdWZmZXIoKS50aGVuKG09PmguZGVjb2RlKG0pKX19fSkudGhlbihjPT57bF8uYWRkKHQsYyk7bGV0IGQ9SGRbdF07ZGVsZXRlIEhkW3RdO2ZvcihsZXQgdT0wLHA9ZC5sZW5ndGg7dTxwO3UrKyl7bGV0IGg9ZFt1XTtoLm9uTG9hZCYmaC5vbkxvYWQoYyl9fSkuY2F0Y2goYz0+e2xldCBkPUhkW3RdO2lmKHZvaWQgMD09PWQpdGhyb3cgdGhpcy5tYW5hZ2VyLml0ZW1FcnJvcih0KSxjO2RlbGV0ZSBIZFt0XTtmb3IobGV0IHU9MCxwPWQubGVuZ3RoO3U8cDt1Kyspe2xldCBoPWRbdV07aC5vbkVycm9yJiZoLm9uRXJyb3IoYyl9dGhpcy5tYW5hZ2VyLml0ZW1FcnJvcih0KX0pLmZpbmFsbHkoKCk9Pnt0aGlzLm1hbmFnZXIuaXRlbUVuZCh0KX0pLHRoaXMubWFuYWdlci5pdGVtU3RhcnQodCl9c2V0UmVzcG9uc2VUeXBlKHQpe3JldHVybiB0aGlzLnJlc3BvbnNlVHlwZT10LHRoaXN9c2V0TWltZVR5cGUodCl7cmV0dXJuIHRoaXMubWltZVR5cGU9dCx0aGlzfX0scUk9Y2xhc3MgZXh0ZW5kcyBxY3tjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxpLHIpe3ZvaWQgMCE9PXRoaXMucGF0aCYmKHQ9dGhpcy5wYXRoK3QpLHQ9dGhpcy5tYW5hZ2VyLnJlc29sdmVVUkwodCk7bGV0IG89dGhpcyxhPWxfLmdldCh0KTtpZih2b2lkIDAhPT1hKXJldHVybiBvLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtlJiZlKGEpLG8ubWFuYWdlci5pdGVtRW5kKHQpfSwwKSxhO2xldCBzPU14KCJpbWciKTtmdW5jdGlvbiBsKCl7ZCgpLGxfLmFkZCh0LHRoaXMpLGUmJmUodGhpcyksby5tYW5hZ2VyLml0ZW1FbmQodCl9ZnVuY3Rpb24gYyh1KXtkKCksciYmcih1KSxvLm1hbmFnZXIuaXRlbUVycm9yKHQpLG8ubWFuYWdlci5pdGVtRW5kKHQpfWZ1bmN0aW9uIGQoKXtzLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLGwsITEpLHMucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGMsITEpfXJldHVybiBzLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGwsITEpLHMuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGMsITEpLCJkYXRhOiIhPT10LnN1YnN0cigwLDUpJiZ2b2lkIDAhPT10aGlzLmNyb3NzT3JpZ2luJiYocy5jcm9zc09yaWdpbj10aGlzLmNyb3NzT3JpZ2luKSxvLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLHMuc3JjPXQsc319LEZCPWNsYXNzIGV4dGVuZHMgcWN7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LGUsaSxyKXtsZXQgbz1uZXcgJDAsYT1uZXcgcUkodGhpcy5tYW5hZ2VyKTthLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pLGEuc2V0UGF0aCh0aGlzLnBhdGgpO2xldCBzPTA7ZnVuY3Rpb24gbChjKXthLmxvYWQodFtjXSxmdW5jdGlvbihkKXtvLmltYWdlc1tjXT1kLHMrKyw2PT09cyYmKG8ubmVlZHNVcGRhdGU9ITAsZSYmZShvKSl9LHZvaWQgMCxyKX1mb3IobGV0IGM9MDtjPHQubGVuZ3RoOysrYylsKGMpO3JldHVybiBvfX0sTkI9Y2xhc3MgZXh0ZW5kcyBxY3tjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxpLHIpe2xldCBvPW5ldyBsbyxhPW5ldyBxSSh0aGlzLm1hbmFnZXIpO3JldHVybiBhLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pLGEuc2V0UGF0aCh0aGlzLnBhdGgpLGEubG9hZCh0LGZ1bmN0aW9uKHMpe28uaW1hZ2U9cyxvLm5lZWRzVXBkYXRlPSEwLHZvaWQgMCE9PWUmJmUobyl9LGksciksb319LGRsPWNsYXNzIGV4dGVuZHMgVWl7Y29uc3RydWN0b3IodCxlPTEpe3N1cGVyKCksdGhpcy50eXBlPSJMaWdodCIsdGhpcy5jb2xvcj1uZXcgc24odCksdGhpcy5pbnRlbnNpdHk9ZX1kaXNwb3NlKCl7fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMuaW50ZW5zaXR5PXQuaW50ZW5zaXR5LHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3QuY29sb3I9dGhpcy5jb2xvci5nZXRIZXgoKSxlLm9iamVjdC5pbnRlbnNpdHk9dGhpcy5pbnRlbnNpdHksdm9pZCAwIT09dGhpcy5ncm91bmRDb2xvciYmKGUub2JqZWN0Lmdyb3VuZENvbG9yPXRoaXMuZ3JvdW5kQ29sb3IuZ2V0SGV4KCkpLHZvaWQgMCE9PXRoaXMuZGlzdGFuY2UmJihlLm9iamVjdC5kaXN0YW5jZT10aGlzLmRpc3RhbmNlKSx2b2lkIDAhPT10aGlzLmFuZ2xlJiYoZS5vYmplY3QuYW5nbGU9dGhpcy5hbmdsZSksdm9pZCAwIT09dGhpcy5kZWNheSYmKGUub2JqZWN0LmRlY2F5PXRoaXMuZGVjYXkpLHZvaWQgMCE9PXRoaXMucGVudW1icmEmJihlLm9iamVjdC5wZW51bWJyYT10aGlzLnBlbnVtYnJhKSx2b2lkIDAhPT10aGlzLnNoYWRvdyYmKGUub2JqZWN0LnNoYWRvdz10aGlzLnNoYWRvdy50b0pTT04oKSksZX19O2RsLnByb3RvdHlwZS5pc0xpZ2h0PSEwLGNsYXNzIGV4dGVuZHMgZGx7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKHQsaSksdGhpcy50eXBlPSJIZW1pc3BoZXJlTGlnaHQiLHRoaXMucG9zaXRpb24uY29weShVaS5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy5ncm91bmRDb2xvcj1uZXcgc24oZSl9Y29weSh0KXtyZXR1cm4gZGwucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuZ3JvdW5kQ29sb3IuY29weSh0Lmdyb3VuZENvbG9yKSx0aGlzfX0ucHJvdG90eXBlLmlzSGVtaXNwaGVyZUxpZ2h0PSEwO3ZhciB0dGU9bmV3IHZuLG50ZT1uZXcgSyxpdGU9bmV3IEssVXg9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5jYW1lcmE9dCx0aGlzLmJpYXM9MCx0aGlzLm5vcm1hbEJpYXM9MCx0aGlzLnJhZGl1cz0xLHRoaXMuYmx1clNhbXBsZXM9OCx0aGlzLm1hcFNpemU9bmV3ICRlKDUxMiw1MTIpLHRoaXMubWFwPW51bGwsdGhpcy5tYXBQYXNzPW51bGwsdGhpcy5tYXRyaXg9bmV3IHZuLHRoaXMuYXV0b1VwZGF0ZT0hMCx0aGlzLm5lZWRzVXBkYXRlPSExLHRoaXMuX2ZydXN0dW09bmV3IGVfLHRoaXMuX2ZyYW1lRXh0ZW50cz1uZXcgJGUoMSwxKSx0aGlzLl92aWV3cG9ydENvdW50PTEsdGhpcy5fdmlld3BvcnRzPVtuZXcgUWkoMCwwLDEsMSldfWdldFZpZXdwb3J0Q291bnQoKXtyZXR1cm4gdGhpcy5fdmlld3BvcnRDb3VudH1nZXRGcnVzdHVtKCl7cmV0dXJuIHRoaXMuX2ZydXN0dW19dXBkYXRlTWF0cmljZXModCl7bGV0IGU9dGhpcy5jYW1lcmEsaT10aGlzLm1hdHJpeDtudGUuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQubWF0cml4V29ybGQpLGUucG9zaXRpb24uY29weShudGUpLGl0ZS5zZXRGcm9tTWF0cml4UG9zaXRpb24odC50YXJnZXQubWF0cml4V29ybGQpLGUubG9va0F0KGl0ZSksZS51cGRhdGVNYXRyaXhXb3JsZCgpLHR0ZS5tdWx0aXBseU1hdHJpY2VzKGUucHJvamVjdGlvbk1hdHJpeCxlLm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5fZnJ1c3R1bS5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeCh0dGUpLGkuc2V0KC41LDAsMCwuNSwwLC41LDAsLjUsMCwwLC41LC41LDAsMCwwLDEpLGkubXVsdGlwbHkoZS5wcm9qZWN0aW9uTWF0cml4KSxpLm11bHRpcGx5KGUubWF0cml4V29ybGRJbnZlcnNlKX1nZXRWaWV3cG9ydCh0KXtyZXR1cm4gdGhpcy5fdmlld3BvcnRzW3RdfWdldEZyYW1lRXh0ZW50cygpe3JldHVybiB0aGlzLl9mcmFtZUV4dGVudHN9ZGlzcG9zZSgpe3RoaXMubWFwJiZ0aGlzLm1hcC5kaXNwb3NlKCksdGhpcy5tYXBQYXNzJiZ0aGlzLm1hcFBhc3MuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHRoaXMuY2FtZXJhPXQuY2FtZXJhLmNsb25lKCksdGhpcy5iaWFzPXQuYmlhcyx0aGlzLnJhZGl1cz10LnJhZGl1cyx0aGlzLm1hcFNpemUuY29weSh0Lm1hcFNpemUpLHRoaXN9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9dG9KU09OKCl7bGV0IHQ9e307cmV0dXJuIDAhPT10aGlzLmJpYXMmJih0LmJpYXM9dGhpcy5iaWFzKSwwIT09dGhpcy5ub3JtYWxCaWFzJiYodC5ub3JtYWxCaWFzPXRoaXMubm9ybWFsQmlhcyksMSE9PXRoaXMucmFkaXVzJiYodC5yYWRpdXM9dGhpcy5yYWRpdXMpLCg1MTIhPT10aGlzLm1hcFNpemUueHx8NTEyIT09dGhpcy5tYXBTaXplLnkpJiYodC5tYXBTaXplPXRoaXMubWFwU2l6ZS50b0FycmF5KCkpLHQuY2FtZXJhPXRoaXMuY2FtZXJhLnRvSlNPTighMSkub2JqZWN0LGRlbGV0ZSB0LmNhbWVyYS5tYXRyaXgsdH19LFhJPWNsYXNzIGV4dGVuZHMgVXh7Y29uc3RydWN0b3IoKXtzdXBlcihuZXcgcmEoNTAsMSwuNSw1MDApKSx0aGlzLmZvY3VzPTF9dXBkYXRlTWF0cmljZXModCl7bGV0IGU9dGhpcy5jYW1lcmEsaT0yKiQzKnQuYW5nbGUqdGhpcy5mb2N1cyxyPXRoaXMubWFwU2l6ZS53aWR0aC90aGlzLm1hcFNpemUuaGVpZ2h0LG89dC5kaXN0YW5jZXx8ZS5mYXI7KGkhPT1lLmZvdnx8ciE9PWUuYXNwZWN0fHxvIT09ZS5mYXIpJiYoZS5mb3Y9aSxlLmFzcGVjdD1yLGUuZmFyPW8sZS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkpLHN1cGVyLnVwZGF0ZU1hdHJpY2VzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5mb2N1cz10LmZvY3VzLHRoaXN9fTtYSS5wcm90b3R5cGUuaXNTcG90TGlnaHRTaGFkb3c9ITAsY2xhc3MgZXh0ZW5kcyBkbHtjb25zdHJ1Y3Rvcih0LGUsaT0wLHI9TWF0aC5QSS8zLG89MCxhPTEpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJTcG90TGlnaHQiLHRoaXMucG9zaXRpb24uY29weShVaS5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy50YXJnZXQ9bmV3IFVpLHRoaXMuZGlzdGFuY2U9aSx0aGlzLmFuZ2xlPXIsdGhpcy5wZW51bWJyYT1vLHRoaXMuZGVjYXk9YSx0aGlzLnNoYWRvdz1uZXcgWEl9Z2V0IHBvd2VyKCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5Kk1hdGguUEl9c2V0IHBvd2VyKHQpe3RoaXMuaW50ZW5zaXR5PXQvTWF0aC5QSX1kaXNwb3NlKCl7dGhpcy5zaGFkb3cuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kaXN0YW5jZT10LmRpc3RhbmNlLHRoaXMuYW5nbGU9dC5hbmdsZSx0aGlzLnBlbnVtYnJhPXQucGVudW1icmEsdGhpcy5kZWNheT10LmRlY2F5LHRoaXMudGFyZ2V0PXQudGFyZ2V0LmNsb25lKCksdGhpcy5zaGFkb3c9dC5zaGFkb3cuY2xvbmUoKSx0aGlzfX0ucHJvdG90eXBlLmlzU3BvdExpZ2h0PSEwO3ZhciBydGU9bmV3IHZuLGh4PW5ldyBLLFczPW5ldyBLLFlJPWNsYXNzIGV4dGVuZHMgVXh7Y29uc3RydWN0b3IoKXtzdXBlcihuZXcgcmEoOTAsMSwuNSw1MDApKSx0aGlzLl9mcmFtZUV4dGVudHM9bmV3ICRlKDQsMiksdGhpcy5fdmlld3BvcnRDb3VudD02LHRoaXMuX3ZpZXdwb3J0cz1bbmV3IFFpKDIsMSwxLDEpLG5ldyBRaSgwLDEsMSwxKSxuZXcgUWkoMywxLDEsMSksbmV3IFFpKDEsMSwxLDEpLG5ldyBRaSgzLDAsMSwxKSxuZXcgUWkoMSwwLDEsMSldLHRoaXMuX2N1YmVEaXJlY3Rpb25zPVtuZXcgSygxLDAsMCksbmV3IEsoLTEsMCwwKSxuZXcgSygwLDAsMSksbmV3IEsoMCwwLC0xKSxuZXcgSygwLDEsMCksbmV3IEsoMCwtMSwwKV0sdGhpcy5fY3ViZVVwcz1bbmV3IEsoMCwxLDApLG5ldyBLKDAsMSwwKSxuZXcgSygwLDEsMCksbmV3IEsoMCwxLDApLG5ldyBLKDAsMCwxKSxuZXcgSygwLDAsLTEpXX11cGRhdGVNYXRyaWNlcyh0LGU9MCl7bGV0IGk9dGhpcy5jYW1lcmEscj10aGlzLm1hdHJpeCxvPXQuZGlzdGFuY2V8fGkuZmFyO28hPT1pLmZhciYmKGkuZmFyPW8saS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkpLGh4LnNldEZyb21NYXRyaXhQb3NpdGlvbih0Lm1hdHJpeFdvcmxkKSxpLnBvc2l0aW9uLmNvcHkoaHgpLFczLmNvcHkoaS5wb3NpdGlvbiksVzMuYWRkKHRoaXMuX2N1YmVEaXJlY3Rpb25zW2VdKSxpLnVwLmNvcHkodGhpcy5fY3ViZVVwc1tlXSksaS5sb29rQXQoVzMpLGkudXBkYXRlTWF0cml4V29ybGQoKSxyLm1ha2VUcmFuc2xhdGlvbigtaHgueCwtaHgueSwtaHgueikscnRlLm11bHRpcGx5TWF0cmljZXMoaS5wcm9qZWN0aW9uTWF0cml4LGkubWF0cml4V29ybGRJbnZlcnNlKSx0aGlzLl9mcnVzdHVtLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KHJ0ZSl9fTtZSS5wcm90b3R5cGUuaXNQb2ludExpZ2h0U2hhZG93PSEwLGNsYXNzIGV4dGVuZHMgZGx7Y29uc3RydWN0b3IodCxlLGk9MCxyPTEpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJQb2ludExpZ2h0Iix0aGlzLmRpc3RhbmNlPWksdGhpcy5kZWNheT1yLHRoaXMuc2hhZG93PW5ldyBZSX1nZXQgcG93ZXIoKXtyZXR1cm4gNCp0aGlzLmludGVuc2l0eSpNYXRoLlBJfXNldCBwb3dlcih0KXt0aGlzLmludGVuc2l0eT10Lyg0Kk1hdGguUEkpfWRpc3Bvc2UoKXt0aGlzLnNoYWRvdy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRpc3RhbmNlPXQuZGlzdGFuY2UsdGhpcy5kZWNheT10LmRlY2F5LHRoaXMuc2hhZG93PXQuc2hhZG93LmNsb25lKCksdGhpc319LnByb3RvdHlwZS5pc1BvaW50TGlnaHQ9ITA7dmFyIFFJPWNsYXNzIGV4dGVuZHMgVXh7Y29uc3RydWN0b3IoKXtzdXBlcihuZXcgeG0oLTUsNSw1LC01LC41LDUwMCkpfX07UUkucHJvdG90eXBlLmlzRGlyZWN0aW9uYWxMaWdodFNoYWRvdz0hMCxjbGFzcyBleHRlbmRzIGRse2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnR5cGU9IkRpcmVjdGlvbmFsTGlnaHQiLHRoaXMucG9zaXRpb24uY29weShVaS5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy50YXJnZXQ9bmV3IFVpLHRoaXMuc2hhZG93PW5ldyBRSX1kaXNwb3NlKCl7dGhpcy5zaGFkb3cuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy50YXJnZXQ9dC50YXJnZXQuY2xvbmUoKSx0aGlzLnNoYWRvdz10LnNoYWRvdy5jbG9uZSgpLHRoaXN9fS5wcm90b3R5cGUuaXNEaXJlY3Rpb25hbExpZ2h0PSEwLGNsYXNzIGV4dGVuZHMgZGx7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iQW1iaWVudExpZ2h0In19LnByb3RvdHlwZS5pc0FtYmllbnRMaWdodD0hMCxjbGFzcyBleHRlbmRzIGRse2NvbnN0cnVjdG9yKHQsZSxpPTEwLHI9MTApe3N1cGVyKHQsZSksdGhpcy50eXBlPSJSZWN0QXJlYUxpZ2h0Iix0aGlzLndpZHRoPWksdGhpcy5oZWlnaHQ9cn1nZXQgcG93ZXIoKXtyZXR1cm4gdGhpcy5pbnRlbnNpdHkqdGhpcy53aWR0aCp0aGlzLmhlaWdodCpNYXRoLlBJfXNldCBwb3dlcih0KXt0aGlzLmludGVuc2l0eT10Lyh0aGlzLndpZHRoKnRoaXMuaGVpZ2h0Kk1hdGguUEkpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy53aWR0aD10LndpZHRoLHRoaXMuaGVpZ2h0PXQuaGVpZ2h0LHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3Qud2lkdGg9dGhpcy53aWR0aCxlLm9iamVjdC5oZWlnaHQ9dGhpcy5oZWlnaHQsZX19LnByb3RvdHlwZS5pc1JlY3RBcmVhTGlnaHQ9ITA7dmFyIFpJPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5jb2VmZmljaWVudHM9W107Zm9yKGxldCB0PTA7dDw5O3QrKyl0aGlzLmNvZWZmaWNpZW50cy5wdXNoKG5ldyBLKX1zZXQodCl7Zm9yKGxldCBlPTA7ZTw5O2UrKyl0aGlzLmNvZWZmaWNpZW50c1tlXS5jb3B5KHRbZV0pO3JldHVybiB0aGlzfXplcm8oKXtmb3IobGV0IHQ9MDt0PDk7dCsrKXRoaXMuY29lZmZpY2llbnRzW3RdLnNldCgwLDAsMCk7cmV0dXJuIHRoaXN9Z2V0QXQodCxlKXtsZXQgaT10Lngscj10Lnksbz10LnosYT10aGlzLmNvZWZmaWNpZW50cztyZXR1cm4gZS5jb3B5KGFbMF0pLm11bHRpcGx5U2NhbGFyKC4yODIwOTUpLGUuYWRkU2NhbGVkVmVjdG9yKGFbMV0sLjQ4ODYwMypyKSxlLmFkZFNjYWxlZFZlY3RvcihhWzJdLC40ODg2MDMqbyksZS5hZGRTY2FsZWRWZWN0b3IoYVszXSwuNDg4NjAzKmkpLGUuYWRkU2NhbGVkVmVjdG9yKGFbNF0saSpyKjEuMDkyNTQ4KSxlLmFkZFNjYWxlZFZlY3RvcihhWzVdLHIqbyoxLjA5MjU0OCksZS5hZGRTY2FsZWRWZWN0b3IoYVs2XSwuMzE1MzkyKigzKm8qby0xKSksZS5hZGRTY2FsZWRWZWN0b3IoYVs3XSxpKm8qMS4wOTI1NDgpLGUuYWRkU2NhbGVkVmVjdG9yKGFbOF0sLjU0NjI3NCooaSppLXIqcikpLGV9Z2V0SXJyYWRpYW5jZUF0KHQsZSl7bGV0IGk9dC54LHI9dC55LG89dC56LGE9dGhpcy5jb2VmZmljaWVudHM7cmV0dXJuIGUuY29weShhWzBdKS5tdWx0aXBseVNjYWxhciguODg2MjI3KSxlLmFkZFNjYWxlZFZlY3RvcihhWzFdLDEuMDIzMzI4KnIpLGUuYWRkU2NhbGVkVmVjdG9yKGFbMl0sMS4wMjMzMjgqbyksZS5hZGRTY2FsZWRWZWN0b3IoYVszXSwxLjAyMzMyOCppKSxlLmFkZFNjYWxlZFZlY3RvcihhWzRdLC44NTgwODYqaSpyKSxlLmFkZFNjYWxlZFZlY3RvcihhWzVdLC44NTgwODYqcipvKSxlLmFkZFNjYWxlZFZlY3RvcihhWzZdLC43NDMxMjUqbypvLS4yNDc3MDgpLGUuYWRkU2NhbGVkVmVjdG9yKGFbN10sLjg1ODA4NippKm8pLGUuYWRkU2NhbGVkVmVjdG9yKGFbOF0sLjQyOTA0MyooaSppLXIqcikpLGV9YWRkKHQpe2ZvcihsZXQgZT0wO2U8OTtlKyspdGhpcy5jb2VmZmljaWVudHNbZV0uYWRkKHQuY29lZmZpY2llbnRzW2VdKTtyZXR1cm4gdGhpc31hZGRTY2FsZWRTSCh0LGUpe2ZvcihsZXQgaT0wO2k8OTtpKyspdGhpcy5jb2VmZmljaWVudHNbaV0uYWRkU2NhbGVkVmVjdG9yKHQuY29lZmZpY2llbnRzW2ldLGUpO3JldHVybiB0aGlzfXNjYWxlKHQpe2ZvcihsZXQgZT0wO2U8OTtlKyspdGhpcy5jb2VmZmljaWVudHNbZV0ubXVsdGlwbHlTY2FsYXIodCk7cmV0dXJuIHRoaXN9bGVycCh0LGUpe2ZvcihsZXQgaT0wO2k8OTtpKyspdGhpcy5jb2VmZmljaWVudHNbaV0ubGVycCh0LmNvZWZmaWNpZW50c1tpXSxlKTtyZXR1cm4gdGhpc31lcXVhbHModCl7Zm9yKGxldCBlPTA7ZTw5O2UrKylpZighdGhpcy5jb2VmZmljaWVudHNbZV0uZXF1YWxzKHQuY29lZmZpY2llbnRzW2VdKSlyZXR1cm4hMTtyZXR1cm4hMH1jb3B5KHQpe3JldHVybiB0aGlzLnNldCh0LmNvZWZmaWNpZW50cyl9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9ZnJvbUFycmF5KHQsZT0wKXtsZXQgaT10aGlzLmNvZWZmaWNpZW50cztmb3IobGV0IHI9MDtyPDk7cisrKWlbcl0uZnJvbUFycmF5KHQsZSszKnIpO3JldHVybiB0aGlzfXRvQXJyYXkodD1bXSxlPTApe2xldCBpPXRoaXMuY29lZmZpY2llbnRzO2ZvcihsZXQgcj0wO3I8OTtyKyspaVtyXS50b0FycmF5KHQsZSszKnIpO3JldHVybiB0fXN0YXRpYyBnZXRCYXNpc0F0KHQsZSl7bGV0IGk9dC54LHI9dC55LG89dC56O2VbMF09LjI4MjA5NSxlWzFdPS40ODg2MDMqcixlWzJdPS40ODg2MDMqbyxlWzNdPS40ODg2MDMqaSxlWzRdPTEuMDkyNTQ4KmkqcixlWzVdPTEuMDkyNTQ4KnIqbyxlWzZdPS4zMTUzOTIqKDMqbypvLTEpLGVbN109MS4wOTI1NDgqaSpvLGVbOF09LjU0NjI3NCooaSppLXIqcil9fTtaSS5wcm90b3R5cGUuaXNTcGhlcmljYWxIYXJtb25pY3MzPSEwO3ZhciBqeD1jbGFzcyBleHRlbmRzIGRse2NvbnN0cnVjdG9yKHQ9bmV3IFpJLGU9MSl7c3VwZXIodm9pZCAwLGUpLHRoaXMuc2g9dH1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuc2guY29weSh0LnNoKSx0aGlzfWZyb21KU09OKHQpe3JldHVybiB0aGlzLmludGVuc2l0eT10LmludGVuc2l0eSx0aGlzLnNoLmZyb21BcnJheSh0LnNoKSx0aGlzfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7cmV0dXJuIGUub2JqZWN0LnNoPXRoaXMuc2gudG9BcnJheSgpLGV9fTtqeC5wcm90b3R5cGUuaXNMaWdodFByb2JlPSEwO3ZhciBqQj1jbGFzc3tzdGF0aWMgZGVjb2RlVGV4dCh0KXtpZih0eXBlb2YgVGV4dERlY29kZXI8InUiKXJldHVybihuZXcgVGV4dERlY29kZXIpLmRlY29kZSh0KTtsZXQgZT0iIjtmb3IobGV0IGk9MCxyPXQubGVuZ3RoO2k8cjtpKyspZSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0W2ldKTt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoZSkpfWNhdGNoe3JldHVybiBlfX1zdGF0aWMgZXh0cmFjdFVybEJhc2UodCl7bGV0IGU9dC5sYXN0SW5kZXhPZigiLyIpO3JldHVybi0xPT09ZT8iLi8iOnQuc3Vic3RyKDAsZSsxKX1zdGF0aWMgcmVzb2x2ZVVSTCh0LGUpe3JldHVybiJzdHJpbmciIT10eXBlb2YgdHx8IiI9PT10PyIiOigvXmh0dHBzPzpcL1wvL2kudGVzdChlKSYmL15cLy8udGVzdCh0KSYmKGU9ZS5yZXBsYWNlKC8oXmh0dHBzPzpcL1wvW15cL10rKS4qL2ksIiQxIikpLC9eKGh0dHBzPzopP1wvXC8vaS50ZXN0KHQpfHwvXmRhdGE6LiosLiokL2kudGVzdCh0KXx8L15ibG9iOi4qJC9pLnRlc3QodCk/dDplK3QpfX07KGNsYXNzIGV4dGVuZHMgR2l7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkiLHRoaXMuaW5zdGFuY2VDb3VudD0xLzB9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmluc3RhbmNlQ291bnQ9dC5pbnN0YW5jZUNvdW50LHRoaXN9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKHRoaXMpO3JldHVybiB0Lmluc3RhbmNlQ291bnQ9dGhpcy5pbnN0YW5jZUNvdW50LHQuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeT0hMCx0fX0pLnByb3RvdHlwZS5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PSEwLGNsYXNzIGV4dGVuZHMgcWN7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdHlwZW9mIGNyZWF0ZUltYWdlQml0bWFwPiJ1IiYmY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZUJpdG1hcExvYWRlcjogY3JlYXRlSW1hZ2VCaXRtYXAoKSBub3Qgc3VwcG9ydGVkLiIpLHR5cGVvZiBmZXRjaD4idSImJmNvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VCaXRtYXBMb2FkZXI6IGZldGNoKCkgbm90IHN1cHBvcnRlZC4iKSx0aGlzLm9wdGlvbnM9e3ByZW11bHRpcGx5QWxwaGE6Im5vbmUifX1zZXRPcHRpb25zKHQpe3JldHVybiB0aGlzLm9wdGlvbnM9dCx0aGlzfWxvYWQodCxlLGkscil7dm9pZCAwPT09dCYmKHQ9IiIpLHZvaWQgMCE9PXRoaXMucGF0aCYmKHQ9dGhpcy5wYXRoK3QpLHQ9dGhpcy5tYW5hZ2VyLnJlc29sdmVVUkwodCk7bGV0IG89dGhpcyxhPWxfLmdldCh0KTtpZih2b2lkIDAhPT1hKXJldHVybiBvLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtlJiZlKGEpLG8ubWFuYWdlci5pdGVtRW5kKHQpfSwwKSxhO2xldCBzPXt9O3MuY3JlZGVudGlhbHM9ImFub255bW91cyI9PT10aGlzLmNyb3NzT3JpZ2luPyJzYW1lLW9yaWdpbiI6ImluY2x1ZGUiLHMuaGVhZGVycz10aGlzLnJlcXVlc3RIZWFkZXIsZmV0Y2godCxzKS50aGVuKGZ1bmN0aW9uKGwpe3JldHVybiBsLmJsb2IoKX0pLnRoZW4oZnVuY3Rpb24obCl7cmV0dXJuIGNyZWF0ZUltYWdlQml0bWFwKGwsT2JqZWN0LmFzc2lnbihvLm9wdGlvbnMse2NvbG9yU3BhY2VDb252ZXJzaW9uOiJub25lIn0pKX0pLnRoZW4oZnVuY3Rpb24obCl7bF8uYWRkKHQsbCksZSYmZShsKSxvLm1hbmFnZXIuaXRlbUVuZCh0KX0pLmNhdGNoKGZ1bmN0aW9uKGwpe3ImJnIobCksby5tYW5hZ2VyLml0ZW1FcnJvcih0KSxvLm1hbmFnZXIuaXRlbUVuZCh0KX0pLG8ubWFuYWdlci5pdGVtU3RhcnQodCl9fS5wcm90b3R5cGUuaXNJbWFnZUJpdG1hcExvYWRlcj0hMDt2YXIgYkkscUI9Y2xhc3MgZXh0ZW5kcyBxY3tjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxpLHIpe2xldCBvPXRoaXMsYT1uZXcgT0IodGhpcy5tYW5hZ2VyKTthLnNldFJlc3BvbnNlVHlwZSgiYXJyYXlidWZmZXIiKSxhLnNldFBhdGgodGhpcy5wYXRoKSxhLnNldFJlcXVlc3RIZWFkZXIodGhpcy5yZXF1ZXN0SGVhZGVyKSxhLnNldFdpdGhDcmVkZW50aWFscyh0aGlzLndpdGhDcmVkZW50aWFscyksYS5sb2FkKHQsZnVuY3Rpb24ocyl7dHJ5e2xldCBsPXMuc2xpY2UoMCk7KHZvaWQgMD09PWJJJiYoYkk9bmV3KHdpbmRvdy5BdWRpb0NvbnRleHR8fHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHQpKSxiSSkuZGVjb2RlQXVkaW9EYXRhKGwsZnVuY3Rpb24oZCl7ZShkKX0pfWNhdGNoKGwpe3I/cihsKTpjb25zb2xlLmVycm9yKGwpLG8ubWFuYWdlci5pdGVtRXJyb3IodCl9fSxpLHIpfX07KGNsYXNzIGV4dGVuZHMganh7Y29uc3RydWN0b3IodCxlLGk9MSl7c3VwZXIodm9pZCAwLGkpO2xldCByPShuZXcgc24pLnNldCh0KSxvPShuZXcgc24pLnNldChlKSxhPW5ldyBLKHIucixyLmcsci5iKSxzPW5ldyBLKG8ucixvLmcsby5iKSxsPU1hdGguc3FydChNYXRoLlBJKSxjPWwqTWF0aC5zcXJ0KC43NSk7dGhpcy5zaC5jb2VmZmljaWVudHNbMF0uY29weShhKS5hZGQocykubXVsdGlwbHlTY2FsYXIobCksdGhpcy5zaC5jb2VmZmljaWVudHNbMV0uY29weShhKS5zdWIocykubXVsdGlwbHlTY2FsYXIoYyl9fSkucHJvdG90eXBlLmlzSGVtaXNwaGVyZUxpZ2h0UHJvYmU9ITAsY2xhc3MgZXh0ZW5kcyBqeHtjb25zdHJ1Y3Rvcih0LGU9MSl7c3VwZXIodm9pZCAwLGUpO2xldCBpPShuZXcgc24pLnNldCh0KTt0aGlzLnNoLmNvZWZmaWNpZW50c1swXS5zZXQoaS5yLGkuZyxpLmIpLm11bHRpcGx5U2NhbGFyKDIqTWF0aC5zcXJ0KE1hdGguUEkpKX19LnByb3RvdHlwZS5pc0FtYmllbnRMaWdodFByb2JlPSEwO3ZhciBLQj1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7bGV0IHIsbyxhO3N3aXRjaCh0aGlzLmJpbmRpbmc9dCx0aGlzLnZhbHVlU2l6ZT1pLGUpe2Nhc2UicXVhdGVybmlvbiI6cj10aGlzLl9zbGVycCxvPXRoaXMuX3NsZXJwQWRkaXRpdmUsYT10aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5UXVhdGVybmlvbix0aGlzLmJ1ZmZlcj1uZXcgRmxvYXQ2NEFycmF5KDYqaSksdGhpcy5fd29ya0luZGV4PTU7YnJlYWs7Y2FzZSJzdHJpbmciOmNhc2UiYm9vbCI6cj10aGlzLl9zZWxlY3Qsbz10aGlzLl9zZWxlY3QsYT10aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5T3RoZXIsdGhpcy5idWZmZXI9bmV3IEFycmF5KDUqaSk7YnJlYWs7ZGVmYXVsdDpyPXRoaXMuX2xlcnAsbz10aGlzLl9sZXJwQWRkaXRpdmUsYT10aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5TnVtZXJpYyx0aGlzLmJ1ZmZlcj1uZXcgRmxvYXQ2NEFycmF5KDUqaSl9dGhpcy5fbWl4QnVmZmVyUmVnaW9uPXIsdGhpcy5fbWl4QnVmZmVyUmVnaW9uQWRkaXRpdmU9byx0aGlzLl9zZXRJZGVudGl0eT1hLHRoaXMuX29yaWdJbmRleD0zLHRoaXMuX2FkZEluZGV4PTQsdGhpcy5jdW11bGF0aXZlV2VpZ2h0PTAsdGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmU9MCx0aGlzLnVzZUNvdW50PTAsdGhpcy5yZWZlcmVuY2VDb3VudD0wfWFjY3VtdWxhdGUodCxlKXtsZXQgaT10aGlzLmJ1ZmZlcixyPXRoaXMudmFsdWVTaXplLG89dCpyK3IsYT10aGlzLmN1bXVsYXRpdmVXZWlnaHQ7aWYoMD09PWEpe2ZvcihsZXQgcz0wO3MhPT1yOysrcylpW28rc109aVtzXTthPWV9ZWxzZSBhKz1lLHRoaXMuX21peEJ1ZmZlclJlZ2lvbihpLG8sMCxlL2Escik7dGhpcy5jdW11bGF0aXZlV2VpZ2h0PWF9YWNjdW11bGF0ZUFkZGl0aXZlKHQpe2xldCBlPXRoaXMuYnVmZmVyLGk9dGhpcy52YWx1ZVNpemUscj1pKnRoaXMuX2FkZEluZGV4OzA9PT10aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSYmdGhpcy5fc2V0SWRlbnRpdHkoKSx0aGlzLl9taXhCdWZmZXJSZWdpb25BZGRpdGl2ZShlLHIsMCx0LGkpLHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlKz10fWFwcGx5KHQpe2xldCBlPXRoaXMudmFsdWVTaXplLGk9dGhpcy5idWZmZXIscj10KmUrZSxvPXRoaXMuY3VtdWxhdGl2ZVdlaWdodCxhPXRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlLHM9dGhpcy5iaW5kaW5nO3RoaXMuY3VtdWxhdGl2ZVdlaWdodD0wLHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlPTAsbzwxJiZ0aGlzLl9taXhCdWZmZXJSZWdpb24oaSxyLGUqdGhpcy5fb3JpZ0luZGV4LDEtbyxlKSxhPjAmJnRoaXMuX21peEJ1ZmZlclJlZ2lvbkFkZGl0aXZlKGkscix0aGlzLl9hZGRJbmRleCplLDEsZSk7Zm9yKGxldCBsPWUsYz1lK2U7bCE9PWM7KytsKWlmKGlbbF0hPT1pW2wrZV0pe3Muc2V0VmFsdWUoaSxyKTticmVha319c2F2ZU9yaWdpbmFsU3RhdGUoKXtsZXQgZT10aGlzLmJ1ZmZlcixpPXRoaXMudmFsdWVTaXplLHI9aSp0aGlzLl9vcmlnSW5kZXg7dGhpcy5iaW5kaW5nLmdldFZhbHVlKGUscik7Zm9yKGxldCBvPWksYT1yO28hPT1hOysrbyllW29dPWVbcitvJWldO3RoaXMuX3NldElkZW50aXR5KCksdGhpcy5jdW11bGF0aXZlV2VpZ2h0PTAsdGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmU9MH1yZXN0b3JlT3JpZ2luYWxTdGF0ZSgpe3RoaXMuYmluZGluZy5zZXRWYWx1ZSh0aGlzLmJ1ZmZlciwzKnRoaXMudmFsdWVTaXplKX1fc2V0QWRkaXRpdmVJZGVudGl0eU51bWVyaWMoKXtsZXQgdD10aGlzLl9hZGRJbmRleCp0aGlzLnZhbHVlU2l6ZSxlPXQrdGhpcy52YWx1ZVNpemU7Zm9yKGxldCBpPXQ7aTxlO2krKyl0aGlzLmJ1ZmZlcltpXT0wfV9zZXRBZGRpdGl2ZUlkZW50aXR5UXVhdGVybmlvbigpe3RoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljKCksdGhpcy5idWZmZXJbdGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemUrM109MX1fc2V0QWRkaXRpdmVJZGVudGl0eU90aGVyKCl7bGV0IHQ9dGhpcy5fb3JpZ0luZGV4KnRoaXMudmFsdWVTaXplLGU9dGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemU7Zm9yKGxldCBpPTA7aTx0aGlzLnZhbHVlU2l6ZTtpKyspdGhpcy5idWZmZXJbZStpXT10aGlzLmJ1ZmZlclt0K2ldfV9zZWxlY3QodCxlLGkscixvKXtpZihyPj0uNSlmb3IobGV0IGE9MDthIT09bzsrK2EpdFtlK2FdPXRbaSthXX1fc2xlcnAodCxlLGkscil7b2Euc2xlcnBGbGF0KHQsZSx0LGUsdCxpLHIpfV9zbGVycEFkZGl0aXZlKHQsZSxpLHIsbyl7bGV0IGE9dGhpcy5fd29ya0luZGV4Km87b2EubXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQodCxhLHQsZSx0LGkpLG9hLnNsZXJwRmxhdCh0LGUsdCxlLHQsYSxyKX1fbGVycCh0LGUsaSxyLG8pe2xldCBhPTEtcjtmb3IobGV0IHM9MDtzIT09bzsrK3Mpe2xldCBsPWUrczt0W2xdPXRbbF0qYSt0W2krc10qcn19X2xlcnBBZGRpdGl2ZSh0LGUsaSxyLG8pe2ZvcihsZXQgYT0wO2EhPT1vOysrYSl7bGV0IHM9ZSthO3Rbc109dFtzXSt0W2krYV0qcn19fSxwVj0iXFxbXFxdXFwuOlxcLyIsbE5lPW5ldyBSZWdFeHAoIlsiK3BWKyJdIiwiZyIpLGhWPSJbXiIrcFYrIl0iLGNOZT0iW14iK3BWLnJlcGxhY2UoIlxcLiIsIiIpKyJdIixkTmU9LygoPzpXQytbXC86XSkqKS8uc291cmNlLnJlcGxhY2UoIldDIixoViksdU5lPS8oV0NPRCspPy8uc291cmNlLnJlcGxhY2UoIldDT0QiLGNOZSkscE5lPS8oPzpcLihXQyspKD86XFsoLispXF0pPyk/Ly5zb3VyY2UucmVwbGFjZSgiV0MiLGhWKSxoTmU9L1wuKFdDKykoPzpcWyguKylcXSk/Ly5zb3VyY2UucmVwbGFjZSgiV0MiLGhWKSxtTmU9bmV3IFJlZ0V4cCgiXiIrZE5lK3VOZStwTmUraE5lKyIkIiksZk5lPVsibWF0ZXJpYWwiLCJtYXRlcmlhbHMiLCJib25lcyJdLEpCPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXtsZXQgcj1pfHxici5wYXJzZVRyYWNrTmFtZShlKTt0aGlzLl90YXJnZXRHcm91cD10LHRoaXMuX2JpbmRpbmdzPXQuc3Vic2NyaWJlXyhlLHIpfWdldFZhbHVlKHQsZSl7dGhpcy5iaW5kKCk7bGV0IHI9dGhpcy5fYmluZGluZ3NbdGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfXTt2b2lkIDAhPT1yJiZyLmdldFZhbHVlKHQsZSl9c2V0VmFsdWUodCxlKXtsZXQgaT10aGlzLl9iaW5kaW5ncztmb3IobGV0IHI9dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLG89aS5sZW5ndGg7ciE9PW87KytyKWlbcl0uc2V0VmFsdWUodCxlKX1iaW5kKCl7bGV0IHQ9dGhpcy5fYmluZGluZ3M7Zm9yKGxldCBlPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxpPXQubGVuZ3RoO2UhPT1pOysrZSl0W2VdLmJpbmQoKX11bmJpbmQoKXtsZXQgdD10aGlzLl9iaW5kaW5ncztmb3IobGV0IGU9dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLGk9dC5sZW5ndGg7ZSE9PWk7KytlKXRbZV0udW5iaW5kKCl9fSxicj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLnBhdGg9aSx0aGlzLnBhcnNlZFBhdGg9cnx8bi5wYXJzZVRyYWNrTmFtZShpKSx0aGlzLm5vZGU9bi5maW5kTm9kZShlLHRoaXMucGFyc2VkUGF0aC5ub2RlTmFtZSl8fGUsdGhpcy5yb290Tm9kZT1lLHRoaXMuZ2V0VmFsdWU9dGhpcy5fZ2V0VmFsdWVfdW5ib3VuZCx0aGlzLnNldFZhbHVlPXRoaXMuX3NldFZhbHVlX3VuYm91bmR9c3RhdGljIGNyZWF0ZShlLGkscil7cmV0dXJuIGUmJmUuaXNBbmltYXRpb25PYmplY3RHcm91cD9uZXcgbi5Db21wb3NpdGUoZSxpLHIpOm5ldyBuKGUsaSxyKX1zdGF0aWMgc2FuaXRpemVOb2RlTmFtZShlKXtyZXR1cm4gZS5yZXBsYWNlKC9ccy9nLCJfIikucmVwbGFjZShsTmUsIiIpfXN0YXRpYyBwYXJzZVRyYWNrTmFtZShlKXtsZXQgaT1tTmUuZXhlYyhlKTtpZighaSl0aHJvdyBuZXcgRXJyb3IoIlByb3BlcnR5QmluZGluZzogQ2Fubm90IHBhcnNlIHRyYWNrTmFtZTogIitlKTtsZXQgcj17bm9kZU5hbWU6aVsyXSxvYmplY3ROYW1lOmlbM10sb2JqZWN0SW5kZXg6aVs0XSxwcm9wZXJ0eU5hbWU6aVs1XSxwcm9wZXJ0eUluZGV4OmlbNl19LG89ci5ub2RlTmFtZSYmci5ub2RlTmFtZS5sYXN0SW5kZXhPZigiLiIpO2lmKHZvaWQgMCE9PW8mJi0xIT09byl7bGV0IGE9ci5ub2RlTmFtZS5zdWJzdHJpbmcobysxKTstMSE9PWZOZS5pbmRleE9mKGEpJiYoci5ub2RlTmFtZT1yLm5vZGVOYW1lLnN1YnN0cmluZygwLG8pLHIub2JqZWN0TmFtZT1hKX1pZihudWxsPT09ci5wcm9wZXJ0eU5hbWV8fDA9PT1yLnByb3BlcnR5TmFtZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJQcm9wZXJ0eUJpbmRpbmc6IGNhbiBub3QgcGFyc2UgcHJvcGVydHlOYW1lIGZyb20gdHJhY2tOYW1lOiAiK2UpO3JldHVybiByfXN0YXRpYyBmaW5kTm9kZShlLGkpe2lmKCFpfHwiIj09PWl8fCIuIj09PWl8fC0xPT09aXx8aT09PWUubmFtZXx8aT09PWUudXVpZClyZXR1cm4gZTtpZihlLnNrZWxldG9uKXtsZXQgcj1lLnNrZWxldG9uLmdldEJvbmVCeU5hbWUoaSk7aWYodm9pZCAwIT09cilyZXR1cm4gcn1pZihlLmNoaWxkcmVuKXtsZXQgcj1mdW5jdGlvbihhKXtmb3IobGV0IHM9MDtzPGEubGVuZ3RoO3MrKyl7bGV0IGw9YVtzXTtpZihsLm5hbWU9PT1pfHxsLnV1aWQ9PT1pKXJldHVybiBsO2xldCBjPXIobC5jaGlsZHJlbik7aWYoYylyZXR1cm4gY31yZXR1cm4gbnVsbH0sbz1yKGUuY2hpbGRyZW4pO2lmKG8pcmV0dXJuIG99cmV0dXJuIG51bGx9X2dldFZhbHVlX3VuYXZhaWxhYmxlKCl7fV9zZXRWYWx1ZV91bmF2YWlsYWJsZSgpe31fZ2V0VmFsdWVfZGlyZWN0KGUsaSl7ZVtpXT10aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV19X2dldFZhbHVlX2FycmF5KGUsaSl7bGV0IHI9dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgbz0wLGE9ci5sZW5ndGg7byE9PWE7KytvKWVbaSsrXT1yW29dfV9nZXRWYWx1ZV9hcnJheUVsZW1lbnQoZSxpKXtlW2ldPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdfV9nZXRWYWx1ZV90b0FycmF5KGUsaSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5LnRvQXJyYXkoZSxpKX1fc2V0VmFsdWVfZGlyZWN0KGUsaSl7dGhpcy50YXJnZXRPYmplY3RbdGhpcy5wcm9wZXJ0eU5hbWVdPWVbaV19X3NldFZhbHVlX2RpcmVjdF9zZXROZWVkc1VwZGF0ZShlLGkpe3RoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXT1lW2ldLHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9kaXJlY3Rfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZShlLGkpe3RoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXT1lW2ldLHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2FycmF5KGUsaSl7bGV0IHI9dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgbz0wLGE9ci5sZW5ndGg7byE9PWE7KytvKXJbb109ZVtpKytdfV9zZXRWYWx1ZV9hcnJheV9zZXROZWVkc1VwZGF0ZShlLGkpe2xldCByPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IG89MCxhPXIubGVuZ3RoO28hPT1hOysrbylyW29dPWVbaSsrXTt0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfYXJyYXlfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZShlLGkpe2xldCByPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IG89MCxhPXIubGVuZ3RoO28hPT1hOysrbylyW29dPWVbaSsrXTt0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9hcnJheUVsZW1lbnQoZSxpKXt0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XT1lW2ldfV9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TmVlZHNVcGRhdGUoZSxpKXt0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XT1lW2ldLHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZShlLGkpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdPWVbaV0sdGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfZnJvbUFycmF5KGUsaSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheShlLGkpfV9zZXRWYWx1ZV9mcm9tQXJyYXlfc2V0TmVlZHNVcGRhdGUoZSxpKXt0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KGUsaSksdGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2Zyb21BcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKGUsaSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheShlLGkpLHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9X2dldFZhbHVlX3VuYm91bmQoZSxpKXt0aGlzLmJpbmQoKSx0aGlzLmdldFZhbHVlKGUsaSl9X3NldFZhbHVlX3VuYm91bmQoZSxpKXt0aGlzLmJpbmQoKSx0aGlzLnNldFZhbHVlKGUsaSl9YmluZCgpe2xldCBlPXRoaXMubm9kZSxpPXRoaXMucGFyc2VkUGF0aCxyPWkub2JqZWN0TmFtZSxvPWkucHJvcGVydHlOYW1lLGE9aS5wcm9wZXJ0eUluZGV4O2lmKGV8fChlPW4uZmluZE5vZGUodGhpcy5yb290Tm9kZSxpLm5vZGVOYW1lKXx8dGhpcy5yb290Tm9kZSx0aGlzLm5vZGU9ZSksdGhpcy5nZXRWYWx1ZT10aGlzLl9nZXRWYWx1ZV91bmF2YWlsYWJsZSx0aGlzLnNldFZhbHVlPXRoaXMuX3NldFZhbHVlX3VuYXZhaWxhYmxlLCFlKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogVHJ5aW5nIHRvIHVwZGF0ZSBub2RlIGZvciB0cmFjazogIit0aGlzLnBhdGgrIiBidXQgaXQgd2Fzbid0IGZvdW5kLiIpO2lmKHIpe2xldCBkPWkub2JqZWN0SW5kZXg7c3dpdGNoKHIpe2Nhc2UibWF0ZXJpYWxzIjppZighZS5tYXRlcmlhbClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtYXRlcmlhbCBhcyBub2RlIGRvZXMgbm90IGhhdmUgYSBtYXRlcmlhbC4iLHRoaXMpO2lmKCFlLm1hdGVyaWFsLm1hdGVyaWFscylyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtYXRlcmlhbC5tYXRlcmlhbHMgYXMgbm9kZS5tYXRlcmlhbCBkb2VzIG5vdCBoYXZlIGEgbWF0ZXJpYWxzIGFycmF5LiIsdGhpcyk7ZT1lLm1hdGVyaWFsLm1hdGVyaWFsczticmVhaztjYXNlImJvbmVzIjppZighZS5za2VsZXRvbilyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBib25lcyBhcyBub2RlIGRvZXMgbm90IGhhdmUgYSBza2VsZXRvbi4iLHRoaXMpO2U9ZS5za2VsZXRvbi5ib25lcztmb3IobGV0IHU9MDt1PGUubGVuZ3RoO3UrKylpZihlW3VdLm5hbWU9PT1kKXtkPXU7YnJlYWt9YnJlYWs7ZGVmYXVsdDppZih2b2lkIDA9PT1lW3JdKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG9iamVjdE5hbWUgb2Ygbm9kZSB1bmRlZmluZWQuIix0aGlzKTtlPWVbcl19aWYodm9pZCAwIT09ZCl7aWYodm9pZCAwPT09ZVtkXSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IFRyeWluZyB0byBiaW5kIHRvIG9iamVjdEluZGV4IG9mIG9iamVjdE5hbWUsIGJ1dCBpcyB1bmRlZmluZWQuIix0aGlzLGUpO2U9ZVtkXX19bGV0IHM9ZVtvXTtpZih2b2lkIDA9PT1zKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogVHJ5aW5nIHRvIHVwZGF0ZSBwcm9wZXJ0eSBmb3IgdHJhY2s6ICIraS5ub2RlTmFtZSsiLiIrbysiIGJ1dCBpdCB3YXNuJ3QgZm91bmQuIixlKTtsZXQgbD10aGlzLlZlcnNpb25pbmcuTm9uZTt0aGlzLnRhcmdldE9iamVjdD1lLHZvaWQgMCE9PWUubmVlZHNVcGRhdGU/bD10aGlzLlZlcnNpb25pbmcuTmVlZHNVcGRhdGU6dm9pZCAwIT09ZS5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlJiYobD10aGlzLlZlcnNpb25pbmcuTWF0cml4V29ybGROZWVkc1VwZGF0ZSk7bGV0IGM9dGhpcy5CaW5kaW5nVHlwZS5EaXJlY3Q7aWYodm9pZCAwIT09YSl7aWYoIm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyI9PT1vKXtpZighZS5nZW9tZXRyeSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgYmVjYXVzZSBub2RlIGRvZXMgbm90IGhhdmUgYSBnZW9tZXRyeS4iLHRoaXMpO2lmKCFlLmdlb21ldHJ5LmlzQnVmZmVyR2VvbWV0cnkpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbW9ycGhUYXJnZXRJbmZsdWVuY2VzIG9uIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iLHRoaXMpO2lmKCFlLmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcylyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgYmVjYXVzZSBub2RlIGRvZXMgbm90IGhhdmUgYSBnZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMuIix0aGlzKTt2b2lkIDAhPT1lLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVthXSYmKGE9ZS5tb3JwaFRhcmdldERpY3Rpb25hcnlbYV0pfWM9dGhpcy5CaW5kaW5nVHlwZS5BcnJheUVsZW1lbnQsdGhpcy5yZXNvbHZlZFByb3BlcnR5PXMsdGhpcy5wcm9wZXJ0eUluZGV4PWF9ZWxzZSB2b2lkIDAhPT1zLmZyb21BcnJheSYmdm9pZCAwIT09cy50b0FycmF5PyhjPXRoaXMuQmluZGluZ1R5cGUuSGFzRnJvbVRvQXJyYXksdGhpcy5yZXNvbHZlZFByb3BlcnR5PXMpOkFycmF5LmlzQXJyYXkocyk/KGM9dGhpcy5CaW5kaW5nVHlwZS5FbnRpcmVBcnJheSx0aGlzLnJlc29sdmVkUHJvcGVydHk9cyk6dGhpcy5wcm9wZXJ0eU5hbWU9bzt0aGlzLmdldFZhbHVlPXRoaXMuR2V0dGVyQnlCaW5kaW5nVHlwZVtjXSx0aGlzLnNldFZhbHVlPXRoaXMuU2V0dGVyQnlCaW5kaW5nVHlwZUFuZFZlcnNpb25pbmdbY11bbF19dW5iaW5kKCl7dGhpcy5ub2RlPW51bGwsdGhpcy5nZXRWYWx1ZT10aGlzLl9nZXRWYWx1ZV91bmJvdW5kLHRoaXMuc2V0VmFsdWU9dGhpcy5fc2V0VmFsdWVfdW5ib3VuZH19cmV0dXJuIG4uQ29tcG9zaXRlPUpCLG59KSgpO2JyLnByb3RvdHlwZS5CaW5kaW5nVHlwZT17RGlyZWN0OjAsRW50aXJlQXJyYXk6MSxBcnJheUVsZW1lbnQ6MixIYXNGcm9tVG9BcnJheTozfSxici5wcm90b3R5cGUuVmVyc2lvbmluZz17Tm9uZTowLE5lZWRzVXBkYXRlOjEsTWF0cml4V29ybGROZWVkc1VwZGF0ZToyfSxici5wcm90b3R5cGUuR2V0dGVyQnlCaW5kaW5nVHlwZT1bYnIucHJvdG90eXBlLl9nZXRWYWx1ZV9kaXJlY3QsYnIucHJvdG90eXBlLl9nZXRWYWx1ZV9hcnJheSxici5wcm90b3R5cGUuX2dldFZhbHVlX2FycmF5RWxlbWVudCxici5wcm90b3R5cGUuX2dldFZhbHVlX3RvQXJyYXldLGJyLnByb3RvdHlwZS5TZXR0ZXJCeUJpbmRpbmdUeXBlQW5kVmVyc2lvbmluZz1bW2JyLnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0LGJyLnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0X3NldE5lZWRzVXBkYXRlLGJyLnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdLFtici5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5LGJyLnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlfc2V0TmVlZHNVcGRhdGUsYnIucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlXSxbYnIucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnQsYnIucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TmVlZHNVcGRhdGUsYnIucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZV0sW2JyLnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5LGJyLnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5X3NldE5lZWRzVXBkYXRlLGJyLnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdXSxjbGFzcyBleHRlbmRzIHpke2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fcm9vdD10LHRoaXMuX2luaXRNZW1vcnlNYW5hZ2VyKCksdGhpcy5fYWNjdUluZGV4PTAsdGhpcy50aW1lPTAsdGhpcy50aW1lU2NhbGU9MX1fYmluZEFjdGlvbih0LGUpe2xldCBpPXQuX2xvY2FsUm9vdHx8dGhpcy5fcm9vdCxyPXQuX2NsaXAudHJhY2tzLG89ci5sZW5ndGgsYT10Ll9wcm9wZXJ0eUJpbmRpbmdzLHM9dC5faW50ZXJwb2xhbnRzLGw9aS51dWlkLGM9dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLGQ9Y1tsXTt2b2lkIDA9PT1kJiYoZD17fSxjW2xdPWQpO2ZvcihsZXQgdT0wO3UhPT1vOysrdSl7bGV0IHA9clt1XSxoPXAubmFtZSxtPWRbaF07aWYodm9pZCAwIT09bSkrK20ucmVmZXJlbmNlQ291bnQsYVt1XT1tO2Vsc2V7aWYobT1hW3VdLHZvaWQgMCE9PW0pe251bGw9PT1tLl9jYWNoZUluZGV4JiYoKyttLnJlZmVyZW5jZUNvdW50LHRoaXMuX2FkZEluYWN0aXZlQmluZGluZyhtLGwsaCkpO2NvbnRpbnVlfW09bmV3IEtCKGJyLmNyZWF0ZShpLGgsZSYmZS5fcHJvcGVydHlCaW5kaW5nc1t1XS5iaW5kaW5nLnBhcnNlZFBhdGgpLHAuVmFsdWVUeXBlTmFtZSxwLmdldFZhbHVlU2l6ZSgpKSwrK20ucmVmZXJlbmNlQ291bnQsdGhpcy5fYWRkSW5hY3RpdmVCaW5kaW5nKG0sbCxoKSxhW3VdPW19c1t1XS5yZXN1bHRCdWZmZXI9bS5idWZmZXJ9fV9hY3RpdmF0ZUFjdGlvbih0KXtpZighdGhpcy5faXNBY3RpdmVBY3Rpb24odCkpe2lmKG51bGw9PT10Ll9jYWNoZUluZGV4KXtsZXQgaT0odC5fbG9jYWxSb290fHx0aGlzLl9yb290KS51dWlkLHI9dC5fY2xpcC51dWlkLG89dGhpcy5fYWN0aW9uc0J5Q2xpcFtyXTt0aGlzLl9iaW5kQWN0aW9uKHQsbyYmby5rbm93bkFjdGlvbnNbMF0pLHRoaXMuX2FkZEluYWN0aXZlQWN0aW9uKHQscixpKX1sZXQgZT10Ll9wcm9wZXJ0eUJpbmRpbmdzO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aSE9PXI7KytpKXtsZXQgbz1lW2ldOzA9PW8udXNlQ291bnQrKyYmKHRoaXMuX2xlbmRCaW5kaW5nKG8pLG8uc2F2ZU9yaWdpbmFsU3RhdGUoKSl9dGhpcy5fbGVuZEFjdGlvbih0KX19X2RlYWN0aXZhdGVBY3Rpb24odCl7aWYodGhpcy5faXNBY3RpdmVBY3Rpb24odCkpe2xldCBlPXQuX3Byb3BlcnR5QmluZGluZ3M7Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpIT09cjsrK2kpe2xldCBvPWVbaV07MD09LS1vLnVzZUNvdW50JiYoby5yZXN0b3JlT3JpZ2luYWxTdGF0ZSgpLHRoaXMuX3Rha2VCYWNrQmluZGluZyhvKSl9dGhpcy5fdGFrZUJhY2tBY3Rpb24odCl9fV9pbml0TWVtb3J5TWFuYWdlcigpe3RoaXMuX2FjdGlvbnM9W10sdGhpcy5fbkFjdGl2ZUFjdGlvbnM9MCx0aGlzLl9hY3Rpb25zQnlDbGlwPXt9LHRoaXMuX2JpbmRpbmdzPVtdLHRoaXMuX25BY3RpdmVCaW5kaW5ncz0wLHRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZT17fSx0aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzPVtdLHRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzPTA7bGV0IHQ9dGhpczt0aGlzLnN0YXRzPXthY3Rpb25zOntnZXQgdG90YWwoKXtyZXR1cm4gdC5fYWN0aW9ucy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0Ll9uQWN0aXZlQWN0aW9uc319LGJpbmRpbmdzOntnZXQgdG90YWwoKXtyZXR1cm4gdC5fYmluZGluZ3MubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gdC5fbkFjdGl2ZUJpbmRpbmdzfX0sY29udHJvbEludGVycG9sYW50czp7Z2V0IHRvdGFsKCl7cmV0dXJuIHQuX2NvbnRyb2xJbnRlcnBvbGFudHMubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gdC5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHN9fX19X2lzQWN0aXZlQWN0aW9uKHQpe2xldCBlPXQuX2NhY2hlSW5kZXg7cmV0dXJuIG51bGwhPT1lJiZlPHRoaXMuX25BY3RpdmVBY3Rpb25zfV9hZGRJbmFjdGl2ZUFjdGlvbih0LGUsaSl7bGV0IHI9dGhpcy5fYWN0aW9ucyxvPXRoaXMuX2FjdGlvbnNCeUNsaXAsYT1vW2VdO2lmKHZvaWQgMD09PWEpYT17a25vd25BY3Rpb25zOlt0XSxhY3Rpb25CeVJvb3Q6e319LHQuX2J5Q2xpcENhY2hlSW5kZXg9MCxvW2VdPWE7ZWxzZXtsZXQgcz1hLmtub3duQWN0aW9uczt0Ll9ieUNsaXBDYWNoZUluZGV4PXMubGVuZ3RoLHMucHVzaCh0KX10Ll9jYWNoZUluZGV4PXIubGVuZ3RoLHIucHVzaCh0KSxhLmFjdGlvbkJ5Um9vdFtpXT10fV9yZW1vdmVJbmFjdGl2ZUFjdGlvbih0KXtsZXQgZT10aGlzLl9hY3Rpb25zLGk9ZVtlLmxlbmd0aC0xXSxyPXQuX2NhY2hlSW5kZXg7aS5fY2FjaGVJbmRleD1yLGVbcl09aSxlLnBvcCgpLHQuX2NhY2hlSW5kZXg9bnVsbDtsZXQgbz10Ll9jbGlwLnV1aWQsYT10aGlzLl9hY3Rpb25zQnlDbGlwLHM9YVtvXSxsPXMua25vd25BY3Rpb25zLGM9bFtsLmxlbmd0aC0xXSxkPXQuX2J5Q2xpcENhY2hlSW5kZXg7Yy5fYnlDbGlwQ2FjaGVJbmRleD1kLGxbZF09YyxsLnBvcCgpLHQuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbCxkZWxldGUgcy5hY3Rpb25CeVJvb3RbKHQuX2xvY2FsUm9vdHx8dGhpcy5fcm9vdCkudXVpZF0sMD09PWwubGVuZ3RoJiZkZWxldGUgYVtvXSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKHQpfV9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKHQpe2xldCBlPXQuX3Byb3BlcnR5QmluZGluZ3M7Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpIT09cjsrK2kpe2xldCBvPWVbaV07MD09LS1vLnJlZmVyZW5jZUNvdW50JiZ0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmcobyl9fV9sZW5kQWN0aW9uKHQpe2xldCBlPXRoaXMuX2FjdGlvbnMsaT10Ll9jYWNoZUluZGV4LHI9dGhpcy5fbkFjdGl2ZUFjdGlvbnMrKyxvPWVbcl07dC5fY2FjaGVJbmRleD1yLGVbcl09dCxvLl9jYWNoZUluZGV4PWksZVtpXT1vfV90YWtlQmFja0FjdGlvbih0KXtsZXQgZT10aGlzLl9hY3Rpb25zLGk9dC5fY2FjaGVJbmRleCxyPS0tdGhpcy5fbkFjdGl2ZUFjdGlvbnMsbz1lW3JdO3QuX2NhY2hlSW5kZXg9cixlW3JdPXQsby5fY2FjaGVJbmRleD1pLGVbaV09b31fYWRkSW5hY3RpdmVCaW5kaW5nKHQsZSxpKXtsZXQgcj10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUsbz10aGlzLl9iaW5kaW5ncyxhPXJbZV07dm9pZCAwPT09YSYmKGE9e30scltlXT1hKSxhW2ldPXQsdC5fY2FjaGVJbmRleD1vLmxlbmd0aCxvLnB1c2godCl9X3JlbW92ZUluYWN0aXZlQmluZGluZyh0KXtsZXQgZT10aGlzLl9iaW5kaW5ncyxpPXQuYmluZGluZyxyPWkucm9vdE5vZGUudXVpZCxvPWkucGF0aCxhPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZSxzPWFbcl0sbD1lW2UubGVuZ3RoLTFdLGM9dC5fY2FjaGVJbmRleDtsLl9jYWNoZUluZGV4PWMsZVtjXT1sLGUucG9wKCksZGVsZXRlIHNbb10sMD09PU9iamVjdC5rZXlzKHMpLmxlbmd0aCYmZGVsZXRlIGFbcl19X2xlbmRCaW5kaW5nKHQpe2xldCBlPXRoaXMuX2JpbmRpbmdzLGk9dC5fY2FjaGVJbmRleCxyPXRoaXMuX25BY3RpdmVCaW5kaW5ncysrLG89ZVtyXTt0Ll9jYWNoZUluZGV4PXIsZVtyXT10LG8uX2NhY2hlSW5kZXg9aSxlW2ldPW99X3Rha2VCYWNrQmluZGluZyh0KXtsZXQgZT10aGlzLl9iaW5kaW5ncyxpPXQuX2NhY2hlSW5kZXgscj0tLXRoaXMuX25BY3RpdmVCaW5kaW5ncyxvPWVbcl07dC5fY2FjaGVJbmRleD1yLGVbcl09dCxvLl9jYWNoZUluZGV4PWksZVtpXT1vfV9sZW5kQ29udHJvbEludGVycG9sYW50KCl7bGV0IHQ9dGhpcy5fY29udHJvbEludGVycG9sYW50cyxlPXRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzKyssaT10W2VdO3JldHVybiB2b2lkIDA9PT1pJiYoaT1uZXcgakkobmV3IEZsb2F0MzJBcnJheSgyKSxuZXcgRmxvYXQzMkFycmF5KDIpLDEsdGhpcy5fY29udHJvbEludGVycG9sYW50c1Jlc3VsdEJ1ZmZlciksaS5fX2NhY2hlSW5kZXg9ZSx0W2VdPWkpLGl9X3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KHQpe2xldCBlPXRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHMsaT10Ll9fY2FjaGVJbmRleCxyPS0tdGhpcy5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHMsbz1lW3JdO3QuX19jYWNoZUluZGV4PXIsZVtyXT10LG8uX19jYWNoZUluZGV4PWksZVtpXT1vfWNsaXBBY3Rpb24odCxlLGkpe2xldCByPWV8fHRoaXMuX3Jvb3Qsbz1yLnV1aWQsYT0ic3RyaW5nIj09dHlwZW9mIHQ/V0kuZmluZEJ5TmFtZShyLHQpOnQscz1udWxsIT09YT9hLnV1aWQ6dCxsPXRoaXMuX2FjdGlvbnNCeUNsaXBbc10sYz1udWxsO2lmKHZvaWQgMD09PWkmJihpPW51bGwhPT1hP2EuYmxlbmRNb2RlOjI1MDApLHZvaWQgMCE9PWwpe2xldCB1PWwuYWN0aW9uQnlSb290W29dO2lmKHZvaWQgMCE9PXUmJnUuYmxlbmRNb2RlPT09aSlyZXR1cm4gdTtjPWwua25vd25BY3Rpb25zWzBdLG51bGw9PT1hJiYoYT1jLl9jbGlwKX1pZihudWxsPT09YSlyZXR1cm4gbnVsbDtsZXQgZD1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGk9bnVsbCxyPWUuYmxlbmRNb2RlKXt0aGlzLl9taXhlcj10LHRoaXMuX2NsaXA9ZSx0aGlzLl9sb2NhbFJvb3Q9aSx0aGlzLmJsZW5kTW9kZT1yO2xldCBvPWUudHJhY2tzLGE9by5sZW5ndGgscz1uZXcgQXJyYXkoYSksbD17ZW5kaW5nU3RhcnQ6ajAsZW5kaW5nRW5kOmowfTtmb3IobGV0IGM9MDtjIT09YTsrK2Mpe2xldCBkPW9bY10uY3JlYXRlSW50ZXJwb2xhbnQobnVsbCk7c1tjXT1kLGQuc2V0dGluZ3M9bH10aGlzLl9pbnRlcnBvbGFudFNldHRpbmdzPWwsdGhpcy5faW50ZXJwb2xhbnRzPXMsdGhpcy5fcHJvcGVydHlCaW5kaW5ncz1uZXcgQXJyYXkoYSksdGhpcy5fY2FjaGVJbmRleD1udWxsLHRoaXMuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbCx0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1udWxsLHRoaXMuX3dlaWdodEludGVycG9sYW50PW51bGwsdGhpcy5sb29wPTIyMDEsdGhpcy5fbG9vcENvdW50PS0xLHRoaXMuX3N0YXJ0VGltZT1udWxsLHRoaXMudGltZT0wLHRoaXMudGltZVNjYWxlPTEsdGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlPTEsdGhpcy53ZWlnaHQ9MSx0aGlzLl9lZmZlY3RpdmVXZWlnaHQ9MSx0aGlzLnJlcGV0aXRpb25zPTEvMCx0aGlzLnBhdXNlZD0hMSx0aGlzLmVuYWJsZWQ9ITAsdGhpcy5jbGFtcFdoZW5GaW5pc2hlZD0hMSx0aGlzLnplcm9TbG9wZUF0U3RhcnQ9ITAsdGhpcy56ZXJvU2xvcGVBdEVuZD0hMH1wbGF5KCl7cmV0dXJuIHRoaXMuX21peGVyLl9hY3RpdmF0ZUFjdGlvbih0aGlzKSx0aGlzfXN0b3AoKXtyZXR1cm4gdGhpcy5fbWl4ZXIuX2RlYWN0aXZhdGVBY3Rpb24odGhpcyksdGhpcy5yZXNldCgpfXJlc2V0KCl7cmV0dXJuIHRoaXMucGF1c2VkPSExLHRoaXMuZW5hYmxlZD0hMCx0aGlzLnRpbWU9MCx0aGlzLl9sb29wQ291bnQ9LTEsdGhpcy5fc3RhcnRUaW1lPW51bGwsdGhpcy5zdG9wRmFkaW5nKCkuc3RvcFdhcnBpbmcoKX1pc1J1bm5pbmcoKXtyZXR1cm4gdGhpcy5lbmFibGVkJiYhdGhpcy5wYXVzZWQmJjAhPT10aGlzLnRpbWVTY2FsZSYmbnVsbD09PXRoaXMuX3N0YXJ0VGltZSYmdGhpcy5fbWl4ZXIuX2lzQWN0aXZlQWN0aW9uKHRoaXMpfWlzU2NoZWR1bGVkKCl7cmV0dXJuIHRoaXMuX21peGVyLl9pc0FjdGl2ZUFjdGlvbih0aGlzKX1zdGFydEF0KHQpe3JldHVybiB0aGlzLl9zdGFydFRpbWU9dCx0aGlzfXNldExvb3AodCxlKXtyZXR1cm4gdGhpcy5sb29wPXQsdGhpcy5yZXBldGl0aW9ucz1lLHRoaXN9c2V0RWZmZWN0aXZlV2VpZ2h0KHQpe3JldHVybiB0aGlzLndlaWdodD10LHRoaXMuX2VmZmVjdGl2ZVdlaWdodD10aGlzLmVuYWJsZWQ/dDowLHRoaXMuc3RvcEZhZGluZygpfWdldEVmZmVjdGl2ZVdlaWdodCgpe3JldHVybiB0aGlzLl9lZmZlY3RpdmVXZWlnaHR9ZmFkZUluKHQpe3JldHVybiB0aGlzLl9zY2hlZHVsZUZhZGluZyh0LDAsMSl9ZmFkZU91dCh0KXtyZXR1cm4gdGhpcy5fc2NoZWR1bGVGYWRpbmcodCwxLDApfWNyb3NzRmFkZUZyb20odCxlLGkpe2lmKHQuZmFkZU91dChlKSx0aGlzLmZhZGVJbihlKSxpKXtsZXQgcj10aGlzLl9jbGlwLmR1cmF0aW9uLG89dC5fY2xpcC5kdXJhdGlvbixzPXIvbzt0LndhcnAoMSxvL3IsZSksdGhpcy53YXJwKHMsMSxlKX1yZXR1cm4gdGhpc31jcm9zc0ZhZGVUbyh0LGUsaSl7cmV0dXJuIHQuY3Jvc3NGYWRlRnJvbSh0aGlzLGUsaSl9c3RvcEZhZGluZygpe2xldCB0PXRoaXMuX3dlaWdodEludGVycG9sYW50O3JldHVybiBudWxsIT09dCYmKHRoaXMuX3dlaWdodEludGVycG9sYW50PW51bGwsdGhpcy5fbWl4ZXIuX3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KHQpKSx0aGlzfXNldEVmZmVjdGl2ZVRpbWVTY2FsZSh0KXtyZXR1cm4gdGhpcy50aW1lU2NhbGU9dCx0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9dGhpcy5wYXVzZWQ/MDp0LHRoaXMuc3RvcFdhcnBpbmcoKX1nZXRFZmZlY3RpdmVUaW1lU2NhbGUoKXtyZXR1cm4gdGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlfXNldER1cmF0aW9uKHQpe3JldHVybiB0aGlzLnRpbWVTY2FsZT10aGlzLl9jbGlwLmR1cmF0aW9uL3QsdGhpcy5zdG9wV2FycGluZygpfXN5bmNXaXRoKHQpe3JldHVybiB0aGlzLnRpbWU9dC50aW1lLHRoaXMudGltZVNjYWxlPXQudGltZVNjYWxlLHRoaXMuc3RvcFdhcnBpbmcoKX1oYWx0KHQpe3JldHVybiB0aGlzLndhcnAodGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlLDAsdCl9d2FycCh0LGUsaSl7bGV0IHI9dGhpcy5fbWl4ZXIsbz1yLnRpbWUsYT10aGlzLnRpbWVTY2FsZSxzPXRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50O251bGw9PT1zJiYocz1yLl9sZW5kQ29udHJvbEludGVycG9sYW50KCksdGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ9cyk7bGV0IGw9cy5wYXJhbWV0ZXJQb3NpdGlvbnMsYz1zLnNhbXBsZVZhbHVlcztyZXR1cm4gbFswXT1vLGxbMV09bytpLGNbMF09dC9hLGNbMV09ZS9hLHRoaXN9c3RvcFdhcnBpbmcoKXtsZXQgdD10aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudDtyZXR1cm4gbnVsbCE9PXQmJih0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1udWxsLHRoaXMuX21peGVyLl90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudCh0KSksdGhpc31nZXRNaXhlcigpe3JldHVybiB0aGlzLl9taXhlcn1nZXRDbGlwKCl7cmV0dXJuIHRoaXMuX2NsaXB9Z2V0Um9vdCgpe3JldHVybiB0aGlzLl9sb2NhbFJvb3R8fHRoaXMuX21peGVyLl9yb290fV91cGRhdGUodCxlLGkscil7aWYoIXRoaXMuZW5hYmxlZClyZXR1cm4gdm9pZCB0aGlzLl91cGRhdGVXZWlnaHQodCk7bGV0IG89dGhpcy5fc3RhcnRUaW1lO2lmKG51bGwhPT1vKXtsZXQgbD0odC1vKSppO2lmKGw8MHx8MD09PWkpcmV0dXJuO3RoaXMuX3N0YXJ0VGltZT1udWxsLGU9aSpsfWUqPXRoaXMuX3VwZGF0ZVRpbWVTY2FsZSh0KTtsZXQgYT10aGlzLl91cGRhdGVUaW1lKGUpLHM9dGhpcy5fdXBkYXRlV2VpZ2h0KHQpO2lmKHM+MCl7bGV0IGw9dGhpcy5faW50ZXJwb2xhbnRzLGM9dGhpcy5fcHJvcGVydHlCaW5kaW5ncztpZigyNTAxPT09dGhpcy5ibGVuZE1vZGUpZm9yKGxldCBkPTAsdT1sLmxlbmd0aDtkIT09dTsrK2QpbFtkXS5ldmFsdWF0ZShhKSxjW2RdLmFjY3VtdWxhdGVBZGRpdGl2ZShzKTtlbHNlIGZvcihsZXQgZD0wLHU9bC5sZW5ndGg7ZCE9PXU7KytkKWxbZF0uZXZhbHVhdGUoYSksY1tkXS5hY2N1bXVsYXRlKHIscyl9fV91cGRhdGVXZWlnaHQodCl7bGV0IGU9MDtpZih0aGlzLmVuYWJsZWQpe2U9dGhpcy53ZWlnaHQ7bGV0IGk9dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7aWYobnVsbCE9PWkpe2xldCByPWkuZXZhbHVhdGUodClbMF07ZSo9cix0PmkucGFyYW1ldGVyUG9zaXRpb25zWzFdJiYodGhpcy5zdG9wRmFkaW5nKCksMD09PXImJih0aGlzLmVuYWJsZWQ9ITEpKX19cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVdlaWdodD1lLGV9X3VwZGF0ZVRpbWVTY2FsZSh0KXtsZXQgZT0wO2lmKCF0aGlzLnBhdXNlZCl7ZT10aGlzLnRpbWVTY2FsZTtsZXQgaT10aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudDtudWxsIT09aSYmKGUqPWkuZXZhbHVhdGUodClbMF0sdD5pLnBhcmFtZXRlclBvc2l0aW9uc1sxXSYmKHRoaXMuc3RvcFdhcnBpbmcoKSwwPT09ZT90aGlzLnBhdXNlZD0hMDp0aGlzLnRpbWVTY2FsZT1lKSl9cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT1lLGV9X3VwZGF0ZVRpbWUodCl7bGV0IGU9dGhpcy5fY2xpcC5kdXJhdGlvbixpPXRoaXMubG9vcCxyPXRoaXMudGltZSt0LG89dGhpcy5fbG9vcENvdW50LGE9MjIwMj09PWk7aWYoMD09PXQpcmV0dXJuLTE9PT1vP3I6YSYmMT09KDEmbyk/ZS1yOnI7aWYoMjIwMD09PWkpey0xPT09byYmKHRoaXMuX2xvb3BDb3VudD0wLHRoaXMuX3NldEVuZGluZ3MoITAsITAsITEpKTtlOntpZihyPj1lKXI9ZTtlbHNle2lmKCEocjwwKSl7dGhpcy50aW1lPXI7YnJlYWsgZX1yPTB9dGhpcy5jbGFtcFdoZW5GaW5pc2hlZD90aGlzLnBhdXNlZD0hMDp0aGlzLmVuYWJsZWQ9ITEsdGhpcy50aW1lPXIsdGhpcy5fbWl4ZXIuZGlzcGF0Y2hFdmVudCh7dHlwZToiZmluaXNoZWQiLGFjdGlvbjp0aGlzLGRpcmVjdGlvbjp0PDA/LTE6MX0pfX1lbHNle2lmKC0xPT09byYmKHQ+PTA/KG89MCx0aGlzLl9zZXRFbmRpbmdzKCEwLDA9PT10aGlzLnJlcGV0aXRpb25zLGEpKTp0aGlzLl9zZXRFbmRpbmdzKDA9PT10aGlzLnJlcGV0aXRpb25zLCEwLGEpKSxyPj1lfHxyPDApe2xldCBzPU1hdGguZmxvb3Ioci9lKTtyLT1lKnMsbys9TWF0aC5hYnMocyk7bGV0IGw9dGhpcy5yZXBldGl0aW9ucy1vO2lmKGw8PTApdGhpcy5jbGFtcFdoZW5GaW5pc2hlZD90aGlzLnBhdXNlZD0hMDp0aGlzLmVuYWJsZWQ9ITEscj10PjA/ZTowLHRoaXMudGltZT1yLHRoaXMuX21peGVyLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImZpbmlzaGVkIixhY3Rpb246dGhpcyxkaXJlY3Rpb246dD4wPzE6LTF9KTtlbHNle2lmKDE9PT1sKXtsZXQgYz10PDA7dGhpcy5fc2V0RW5kaW5ncyhjLCFjLGEpfWVsc2UgdGhpcy5fc2V0RW5kaW5ncyghMSwhMSxhKTt0aGlzLl9sb29wQ291bnQ9byx0aGlzLnRpbWU9cix0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHt0eXBlOiJsb29wIixhY3Rpb246dGhpcyxsb29wRGVsdGE6c30pfX1lbHNlIHRoaXMudGltZT1yO2lmKGEmJjE9PSgxJm8pKXJldHVybiBlLXJ9cmV0dXJuIHJ9X3NldEVuZGluZ3ModCxlLGkpe2xldCByPXRoaXMuX2ludGVycG9sYW50U2V0dGluZ3M7aT8oci5lbmRpbmdTdGFydD1HMCxyLmVuZGluZ0VuZD1HMCk6KHIuZW5kaW5nU3RhcnQ9dD90aGlzLnplcm9TbG9wZUF0U3RhcnQ/RzA6ajA6MjQwMixyLmVuZGluZ0VuZD1lP3RoaXMuemVyb1Nsb3BlQXRFbmQ/RzA6ajA6MjQwMil9X3NjaGVkdWxlRmFkaW5nKHQsZSxpKXtsZXQgcj10aGlzLl9taXhlcixvPXIudGltZSxhPXRoaXMuX3dlaWdodEludGVycG9sYW50O251bGw9PT1hJiYoYT1yLl9sZW5kQ29udHJvbEludGVycG9sYW50KCksdGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ9YSk7bGV0IHM9YS5wYXJhbWV0ZXJQb3NpdGlvbnMsbD1hLnNhbXBsZVZhbHVlcztyZXR1cm4gc1swXT1vLGxbMF09ZSxzWzFdPW8rdCxsWzFdPWksdGhpc319KHRoaXMsYSxlLGkpO3JldHVybiB0aGlzLl9iaW5kQWN0aW9uKGQsYyksdGhpcy5fYWRkSW5hY3RpdmVBY3Rpb24oZCxzLG8pLGR9ZXhpc3RpbmdBY3Rpb24odCxlKXtsZXQgaT1lfHx0aGlzLl9yb290LHI9aS51dWlkLG89InN0cmluZyI9PXR5cGVvZiB0P1dJLmZpbmRCeU5hbWUoaSx0KTp0LHM9dGhpcy5fYWN0aW9uc0J5Q2xpcFtvP28udXVpZDp0XTtyZXR1cm4gdm9pZCAwIT09cyYmcy5hY3Rpb25CeVJvb3Rbcl18fG51bGx9c3RvcEFsbEFjdGlvbigpe2xldCB0PXRoaXMuX2FjdGlvbnM7Zm9yKGxldCBpPXRoaXMuX25BY3RpdmVBY3Rpb25zLTE7aT49MDstLWkpdFtpXS5zdG9wKCk7cmV0dXJuIHRoaXN9dXBkYXRlKHQpe2xldCBlPXRoaXMuX2FjdGlvbnMsaT10aGlzLl9uQWN0aXZlQWN0aW9ucyxyPXRoaXMudGltZSs9dCo9dGhpcy50aW1lU2NhbGUsbz1NYXRoLnNpZ24odCksYT10aGlzLl9hY2N1SW5kZXhePTE7Zm9yKGxldCBjPTA7YyE9PWk7KytjKWVbY10uX3VwZGF0ZShyLHQsbyxhKTtsZXQgcz10aGlzLl9iaW5kaW5ncyxsPXRoaXMuX25BY3RpdmVCaW5kaW5ncztmb3IobGV0IGM9MDtjIT09bDsrK2Mpc1tjXS5hcHBseShhKTtyZXR1cm4gdGhpc31zZXRUaW1lKHQpe3RoaXMudGltZT0wO2ZvcihsZXQgZT0wO2U8dGhpcy5fYWN0aW9ucy5sZW5ndGg7ZSsrKXRoaXMuX2FjdGlvbnNbZV0udGltZT0wO3JldHVybiB0aGlzLnVwZGF0ZSh0KX1nZXRSb290KCl7cmV0dXJuIHRoaXMuX3Jvb3R9dW5jYWNoZUNsaXAodCl7bGV0IGU9dGhpcy5fYWN0aW9ucyxpPXQudXVpZCxyPXRoaXMuX2FjdGlvbnNCeUNsaXAsbz1yW2ldO2lmKHZvaWQgMCE9PW8pe2xldCBhPW8ua25vd25BY3Rpb25zO2ZvcihsZXQgcz0wLGw9YS5sZW5ndGg7cyE9PWw7KytzKXtsZXQgYz1hW3NdO3RoaXMuX2RlYWN0aXZhdGVBY3Rpb24oYyk7bGV0IGQ9Yy5fY2FjaGVJbmRleCx1PWVbZS5sZW5ndGgtMV07Yy5fY2FjaGVJbmRleD1udWxsLGMuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbCx1Ll9jYWNoZUluZGV4PWQsZVtkXT11LGUucG9wKCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nc0ZvckFjdGlvbihjKX1kZWxldGUgcltpXX19dW5jYWNoZVJvb3QodCl7bGV0IGU9dC51dWlkLGk9dGhpcy5fYWN0aW9uc0J5Q2xpcDtmb3IobGV0IGEgaW4gaSl7bGV0IGw9aVthXS5hY3Rpb25CeVJvb3RbZV07dm9pZCAwIT09bCYmKHRoaXMuX2RlYWN0aXZhdGVBY3Rpb24obCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVBY3Rpb24obCkpfWxldCBvPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZVtlXTtpZih2b2lkIDAhPT1vKWZvcihsZXQgYSBpbiBvKXtsZXQgcz1vW2FdO3MucmVzdG9yZU9yaWdpbmFsU3RhdGUoKSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmcocyl9fXVuY2FjaGVBY3Rpb24odCxlKXtsZXQgaT10aGlzLmV4aXN0aW5nQWN0aW9uKHQsZSk7bnVsbCE9PWkmJih0aGlzLl9kZWFjdGl2YXRlQWN0aW9uKGkpLHRoaXMuX3JlbW92ZUluYWN0aXZlQWN0aW9uKGkpKX19LnByb3RvdHlwZS5fY29udHJvbEludGVycG9sYW50c1Jlc3VsdEJ1ZmZlcj1uZXcgRmxvYXQzMkFycmF5KDEpO3ZhciBHeD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXsic3RyaW5nIj09dHlwZW9mIHQmJihjb25zb2xlLndhcm4oIlRIUkVFLlVuaWZvcm06IFR5cGUgcGFyYW1ldGVyIGlzIG5vIGxvbmdlciBuZWVkZWQuIiksdD1hcmd1bWVudHNbMV0pLHRoaXMudmFsdWU9dH1jbG9uZSgpe3JldHVybiBuZXcgR3godm9pZCAwPT09dGhpcy52YWx1ZS5jbG9uZT90aGlzLnZhbHVlOnRoaXMudmFsdWUuY2xvbmUoKSl9fTsoY2xhc3MgZXh0ZW5kcyBDbXtjb25zdHJ1Y3Rvcih0LGUsaT0xKXtzdXBlcih0LGUpLHRoaXMubWVzaFBlckF0dHJpYnV0ZT1pfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5tZXNoUGVyQXR0cmlidXRlPXQubWVzaFBlckF0dHJpYnV0ZSx0aGlzfWNsb25lKHQpe2xldCBlPXN1cGVyLmNsb25lKHQpO3JldHVybiBlLm1lc2hQZXJBdHRyaWJ1dGU9dGhpcy5tZXNoUGVyQXR0cmlidXRlLGV9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyPSEwLGUubWVzaFBlckF0dHJpYnV0ZT10aGlzLm1lc2hQZXJBdHRyaWJ1dGUsZX19KS5wcm90b3R5cGUuaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcj0hMDt2YXIgb3RlPW5ldyAkZSxFbT1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyAkZSgxLzAsMS8wKSxlPW5ldyAkZSgtMS8wLC0xLzApKXt0aGlzLm1pbj10LHRoaXMubWF4PWV9c2V0KHQsZSl7cmV0dXJuIHRoaXMubWluLmNvcHkodCksdGhpcy5tYXguY29weShlKSx0aGlzfXNldEZyb21Qb2ludHModCl7dGhpcy5tYWtlRW1wdHkoKTtmb3IobGV0IGU9MCxpPXQubGVuZ3RoO2U8aTtlKyspdGhpcy5leHBhbmRCeVBvaW50KHRbZV0pO3JldHVybiB0aGlzfXNldEZyb21DZW50ZXJBbmRTaXplKHQsZSl7bGV0IGk9b3RlLmNvcHkoZSkubXVsdGlwbHlTY2FsYXIoLjUpO3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLnN1YihpKSx0aGlzLm1heC5jb3B5KHQpLmFkZChpKSx0aGlzfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMubWluLmNvcHkodC5taW4pLHRoaXMubWF4LmNvcHkodC5tYXgpLHRoaXN9bWFrZUVtcHR5KCl7cmV0dXJuIHRoaXMubWluLng9dGhpcy5taW4ueT0xLzAsdGhpcy5tYXgueD10aGlzLm1heC55PS0xLzAsdGhpc31pc0VtcHR5KCl7cmV0dXJuIHRoaXMubWF4Lng8dGhpcy5taW4ueHx8dGhpcy5tYXgueTx0aGlzLm1pbi55fWdldENlbnRlcih0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dC5zZXQoMCwwKTp0LmFkZFZlY3RvcnModGhpcy5taW4sdGhpcy5tYXgpLm11bHRpcGx5U2NhbGFyKC41KX1nZXRTaXplKHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90LnNldCgwLDApOnQuc3ViVmVjdG9ycyh0aGlzLm1heCx0aGlzLm1pbil9ZXhwYW5kQnlQb2ludCh0KXtyZXR1cm4gdGhpcy5taW4ubWluKHQpLHRoaXMubWF4Lm1heCh0KSx0aGlzfWV4cGFuZEJ5VmVjdG9yKHQpe3JldHVybiB0aGlzLm1pbi5zdWIodCksdGhpcy5tYXguYWRkKHQpLHRoaXN9ZXhwYW5kQnlTY2FsYXIodCl7cmV0dXJuIHRoaXMubWluLmFkZFNjYWxhcigtdCksdGhpcy5tYXguYWRkU2NhbGFyKHQpLHRoaXN9Y29udGFpbnNQb2ludCh0KXtyZXR1cm4hKHQueDx0aGlzLm1pbi54fHx0Lng+dGhpcy5tYXgueHx8dC55PHRoaXMubWluLnl8fHQueT50aGlzLm1heC55KX1jb250YWluc0JveCh0KXtyZXR1cm4gdGhpcy5taW4ueDw9dC5taW4ueCYmdC5tYXgueDw9dGhpcy5tYXgueCYmdGhpcy5taW4ueTw9dC5taW4ueSYmdC5tYXgueTw9dGhpcy5tYXgueX1nZXRQYXJhbWV0ZXIodCxlKXtyZXR1cm4gZS5zZXQoKHQueC10aGlzLm1pbi54KS8odGhpcy5tYXgueC10aGlzLm1pbi54KSwodC55LXRoaXMubWluLnkpLyh0aGlzLm1heC55LXRoaXMubWluLnkpKX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiEodC5tYXgueDx0aGlzLm1pbi54fHx0Lm1pbi54PnRoaXMubWF4Lnh8fHQubWF4Lnk8dGhpcy5taW4ueXx8dC5taW4ueT50aGlzLm1heC55KX1jbGFtcFBvaW50KHQsZSl7cmV0dXJuIGUuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCl9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiBvdGUuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCkuc3ViKHQpLmxlbmd0aCgpfWludGVyc2VjdCh0KXtyZXR1cm4gdGhpcy5taW4ubWF4KHQubWluKSx0aGlzLm1heC5taW4odC5tYXgpLHRoaXN9dW5pb24odCl7cmV0dXJuIHRoaXMubWluLm1pbih0Lm1pbiksdGhpcy5tYXgubWF4KHQubWF4KSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5taW4uYWRkKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5taW4uZXF1YWxzKHRoaXMubWluKSYmdC5tYXguZXF1YWxzKHRoaXMubWF4KX19O0VtLnByb3RvdHlwZS5pc0JveDI9ITA7dmFyIGJwPW5ldyBLLHlJPW5ldyB2bixxMz1uZXcgdm47ZnVuY3Rpb24gQXRlKG4pe2xldCB0PVtdO24mJm4uaXNCb25lJiZ0LnB1c2gobik7Zm9yKGxldCBlPTA7ZTxuLmNoaWxkcmVuLmxlbmd0aDtlKyspdC5wdXNoLmFwcGx5KHQsQXRlKG4uY2hpbGRyZW5bZV0pKTtyZXR1cm4gdH12YXIgZ05lPW5ldyBGbG9hdDMyQXJyYXkoMSk7ZnVuY3Rpb24gbVYobix0LGUpe2lmKDE9PT1lKXJldHVybiBuZXcgc24odCk7bGV0IGk9cWgodCk7aWYoIWkpdGhyb3cgbmV3IEVycm9yKGBkMyBmYWlsZWQgdG8gcmVjb2duaXplIHRoZSBjb2xvcjogJHt0fWApO3JldHVybiBuZXcgc24oZEwoaSxuKSgxLWUpKX1uZXcgSW50MzJBcnJheShnTmUuYnVmZmVyKSxucy5jcmVhdGU9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS5sb2coIlRIUkVFLkN1cnZlLmNyZWF0ZSgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQiKSxuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG5zLnByb3RvdHlwZSksbi5wcm90b3R5cGUuY29uc3RydWN0b3I9bixuLnByb3RvdHlwZS5nZXRQb2ludD10LG59LEJ4LnByb3RvdHlwZS5mcm9tUG9pbnRzPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlBhdGg6IC5mcm9tUG9pbnRzKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbVBvaW50cygpLiIpLHRoaXMuc2V0RnJvbVBvaW50cyhuKX0sY2xhc3MgZXh0ZW5kcyBPeHtjb25zdHJ1Y3Rvcih0PTEwLGU9MTAsaT00NDczOTI0LHI9ODk0Nzg0OCl7aT1uZXcgc24oaSkscj1uZXcgc24ocik7bGV0IG89ZS8yLGE9dC9lLHM9dC8yLGw9W10sYz1bXTtmb3IobGV0IHA9MCxoPTAsbT0tcztwPD1lO3ArKyxtKz1hKXtsLnB1c2goLXMsMCxtLHMsMCxtKSxsLnB1c2gobSwwLC1zLG0sMCxzKTtsZXQgXz1wPT09bz9pOnI7Xy50b0FycmF5KGMsaCksaCs9MyxfLnRvQXJyYXkoYyxoKSxoKz0zLF8udG9BcnJheShjLGgpLGgrPTMsXy50b0FycmF5KGMsaCksaCs9M31sZXQgZD1uZXcgR2k7ZC5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgTnIobCwzKSksZC5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcgTnIoYywzKSksc3VwZXIoZCxuZXcgR2Qoe3ZlcnRleENvbG9yczohMCx0b25lTWFwcGVkOiExfSkpLHRoaXMudHlwZT0iR3JpZEhlbHBlciJ9fS5wcm90b3R5cGUuc2V0Q29sb3JzPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuR3JpZEhlbHBlcjogc2V0Q29sb3JzKCkgaGFzIGJlZW4gZGVwcmVjYXRlZCwgcGFzcyB0aGVtIGluIHRoZSBjb25zdHJ1Y3RvciBpbnN0ZWFkLiIpfSxjbGFzcyBleHRlbmRzIE94e2NvbnN0cnVjdG9yKHQpe2xldCBlPUF0ZSh0KSxpPW5ldyBHaSxyPVtdLG89W10sYT1uZXcgc24oMCwwLDEpLHM9bmV3IHNuKDAsMSwwKTtmb3IobGV0IGM9MDtjPGUubGVuZ3RoO2MrKyl7bGV0IGQ9ZVtjXTtkLnBhcmVudCYmZC5wYXJlbnQuaXNCb25lJiYoci5wdXNoKDAsMCwwKSxyLnB1c2goMCwwLDApLG8ucHVzaChhLnIsYS5nLGEuYiksby5wdXNoKHMucixzLmcscy5iKSl9aS5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgTnIociwzKSksaS5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcgTnIobywzKSksc3VwZXIoaSxuZXcgR2Qoe3ZlcnRleENvbG9yczohMCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSx0b25lTWFwcGVkOiExLHRyYW5zcGFyZW50OiEwfSkpLHRoaXMudHlwZT0iU2tlbGV0b25IZWxwZXIiLHRoaXMuaXNTa2VsZXRvbkhlbHBlcj0hMCx0aGlzLnJvb3Q9dCx0aGlzLmJvbmVzPWUsdGhpcy5tYXRyaXg9dC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITF9dXBkYXRlTWF0cml4V29ybGQodCl7bGV0IGU9dGhpcy5ib25lcyxpPXRoaXMuZ2VvbWV0cnkscj1pLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKTtxMy5jb3B5KHRoaXMucm9vdC5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk7Zm9yKGxldCBvPTAsYT0wO288ZS5sZW5ndGg7bysrKXtsZXQgcz1lW29dO3MucGFyZW50JiZzLnBhcmVudC5pc0JvbmUmJih5SS5tdWx0aXBseU1hdHJpY2VzKHEzLHMubWF0cml4V29ybGQpLGJwLnNldEZyb21NYXRyaXhQb3NpdGlvbih5SSksci5zZXRYWVooYSxicC54LGJwLnksYnAueikseUkubXVsdGlwbHlNYXRyaWNlcyhxMyxzLnBhcmVudC5tYXRyaXhXb3JsZCksYnAuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHlJKSxyLnNldFhZWihhKzEsYnAueCxicC55LGJwLnopLGErPTIpfWkuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpLm5lZWRzVXBkYXRlPSEwLHN1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpfX0ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNrZWxldG9uSGVscGVyOiB1cGRhdGUoKSBubyBsb25nZXIgbmVlZHMgdG8gYmUgY2FsbGVkLiIpfSxxYy5wcm90b3R5cGUuZXh0cmFjdFVybEJhc2U9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTG9hZGVyOiAuZXh0cmFjdFVybEJhc2UoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuTG9hZGVyVXRpbHMuZXh0cmFjdFVybEJhc2UoKSBpbnN0ZWFkLiIpLGpCLmV4dHJhY3RVcmxCYXNlKG4pfSxxYy5IYW5kbGVycz17YWRkOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTG9hZGVyOiBIYW5kbGVycy5hZGQoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgTG9hZGluZ01hbmFnZXIuYWRkSGFuZGxlcigpIGluc3RlYWQuIil9LGdldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkxvYWRlcjogSGFuZGxlcnMuZ2V0KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIExvYWRpbmdNYW5hZ2VyLmdldEhhbmRsZXIoKSBpbnN0ZWFkLiIpfX0sRW0ucHJvdG90eXBlLmNlbnRlcj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gyOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIiksdGhpcy5nZXRDZW50ZXIobil9LEVtLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5lbXB0eSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmlzRW1wdHkoKS4iKSx0aGlzLmlzRW1wdHkoKX0sRW0ucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3gobil9LEVtLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5zaXplKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0U2l6ZSgpLiIpLHRoaXMuZ2V0U2l6ZShuKX0sVHMucHJvdG90eXBlLmNlbnRlcj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIiksdGhpcy5nZXRDZW50ZXIobil9LFRzLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5lbXB0eSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmlzRW1wdHkoKS4iKSx0aGlzLmlzRW1wdHkoKX0sVHMucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3gobil9LFRzLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvblNwaGVyZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuaXNJbnRlcnNlY3Rpb25TcGhlcmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzU3BoZXJlKCkuIiksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKG4pfSxUcy5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuc2l6ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldFNpemUoKS4iKSx0aGlzLmdldFNpemUobil9LFNwLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNwaGVyZTogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLiIpLHRoaXMuaXNFbXB0eSgpfSxlXy5wcm90b3R5cGUuc2V0RnJvbU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5GcnVzdHVtOiAuc2V0RnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KCkuIiksdGhpcy5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChuKX0seW8ucHJvdG90eXBlLmZsYXR0ZW5Ub0FycmF5T2Zmc2V0PWZ1bmN0aW9uKG4sdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLmZsYXR0ZW5Ub0FycmF5T2Zmc2V0KCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC50b0FycmF5KCkgaW5zdGVhZC4iKSx0aGlzLnRvQXJyYXkobix0KX0seW8ucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yMz1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDMoIG1hdHJpeCApIGluc3RlYWQuIiksbi5hcHBseU1hdHJpeDModGhpcyl9LHlvLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjNBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDM6IC5tdWx0aXBseVZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHlvLnByb3RvdHlwZS5hcHBseVRvQnVmZmVyQXR0cmlidXRlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5hcHBseVRvQnVmZmVyQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGF0dHJpYnV0ZS5hcHBseU1hdHJpeDMoIG1hdHJpeCApIGluc3RlYWQuIiksbi5hcHBseU1hdHJpeDModGhpcyl9LHlvLnByb3RvdHlwZS5hcHBseVRvVmVjdG9yM0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogLmFwcGx5VG9WZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSx5by5wcm90b3R5cGUuZ2V0SW52ZXJzZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAuZ2V0SW52ZXJzZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBtYXRyaXhJbnYuY29weSggbWF0cml4ICkuaW52ZXJ0KCk7IGluc3RlYWQuIiksdGhpcy5jb3B5KG4pLmludmVydCgpfSx2bi5wcm90b3R5cGUuZXh0cmFjdFBvc2l0aW9uPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5leHRyYWN0UG9zaXRpb24oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5jb3B5UG9zaXRpb24oKS4iKSx0aGlzLmNvcHlQb3NpdGlvbihuKX0sdm4ucHJvdG90eXBlLmZsYXR0ZW5Ub0FycmF5T2Zmc2V0PWZ1bmN0aW9uKG4sdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmZsYXR0ZW5Ub0FycmF5T2Zmc2V0KCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC50b0FycmF5KCkgaW5zdGVhZC4iKSx0aGlzLnRvQXJyYXkobix0KX0sdm4ucHJvdG90eXBlLmdldFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmdldFBvc2l0aW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFZlY3RvcjMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCBtYXRyaXggKSBpbnN0ZWFkLiIpLChuZXcgSykuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDMpfSx2bi5wcm90b3R5cGUuc2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuc2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKCkuIiksdGhpcy5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbihuKX0sdm4ucHJvdG90eXBlLm11bHRpcGx5VG9BcnJheT1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VG9BcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHZuLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yMygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpLG4uYXBwbHlNYXRyaXg0KHRoaXMpfSx2bi5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3I0PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVZlY3RvcjQoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKSxuLmFwcGx5TWF0cml4NCh0aGlzKX0sdm4ucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yM0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sdm4ucHJvdG90eXBlLnJvdGF0ZUF4aXM9ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlQXhpcygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBWZWN0b3IzLnRyYW5zZm9ybURpcmVjdGlvbiggbWF0cml4ICkgaW5zdGVhZC4iKSxuLnRyYW5zZm9ybURpcmVjdGlvbih0aGlzKX0sdm4ucHJvdG90eXBlLmNyb3NzVmVjdG9yPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5jcm9zc1ZlY3RvcigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpLG4uYXBwbHlNYXRyaXg0KHRoaXMpfSx2bi5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnRyYW5zbGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHZuLnByb3RvdHlwZS5yb3RhdGVYPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZVgoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSx2bi5wcm90b3R5cGUucm90YXRlWT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVZKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sdm4ucHJvdG90eXBlLnJvdGF0ZVo9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlWigpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHZuLnByb3RvdHlwZS5yb3RhdGVCeUF4aXM9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlQnlBeGlzKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sdm4ucHJvdG90eXBlLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYXR0cmlidXRlLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKSxuLmFwcGx5TWF0cml4NCh0aGlzKX0sdm4ucHJvdG90eXBlLmFwcGx5VG9WZWN0b3IzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAuYXBwbHlUb1ZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHZuLnByb3RvdHlwZS5tYWtlRnJ1c3R1bT1mdW5jdGlvbihuLHQsZSxpLHIsbyl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm1ha2VGcnVzdHVtKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5tYWtlUGVyc3BlY3RpdmUoIGxlZnQsIHJpZ2h0LCB0b3AsIGJvdHRvbSwgbmVhciwgZmFyICkgaW5zdGVhZC4iKSx0aGlzLm1ha2VQZXJzcGVjdGl2ZShuLHQsaSxlLHIsbyl9LHZuLnByb3RvdHlwZS5nZXRJbnZlcnNlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5nZXRJbnZlcnNlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG1hdHJpeEludi5jb3B5KCBtYXRyaXggKS5pbnZlcnQoKTsgaW5zdGVhZC4iKSx0aGlzLmNvcHkobikuaW52ZXJ0KCl9LFhsLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvbkxpbmU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGxhbmU6IC5pc0ludGVyc2VjdGlvbkxpbmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzTGluZSgpLiIpLHRoaXMuaW50ZXJzZWN0c0xpbmUobil9LG9hLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogLm11bHRpcGx5VmVjdG9yMygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBpcyBub3cgdmVjdG9yLmFwcGx5UXVhdGVybmlvbiggcXVhdGVybmlvbiApIGluc3RlYWQuIiksbi5hcHBseVF1YXRlcm5pb24odGhpcyl9LG9hLnByb3RvdHlwZS5pbnZlcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogLmludmVyc2UoKSBoYXMgYmVlbiByZW5hbWVkIHRvIGludmVydCgpLiIpLHRoaXMuaW52ZXJ0KCl9LEVwLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvbkJveD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3gobil9LEVwLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvblBsYW5lPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlJheTogLmlzSW50ZXJzZWN0aW9uUGxhbmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzUGxhbmUoKS4iKSx0aGlzLmludGVyc2VjdHNQbGFuZShuKX0sRXAucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uU3BoZXJlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlJheTogLmlzSW50ZXJzZWN0aW9uU3BoZXJlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c1NwaGVyZSgpLiIpLHRoaXMuaW50ZXJzZWN0c1NwaGVyZShuKX0sVnIucHJvdG90eXBlLmFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmFyZWEoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRBcmVhKCkuIiksdGhpcy5nZXRBcmVhKCl9LFZyLnByb3RvdHlwZS5iYXJ5Y29vcmRGcm9tUG9pbnQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmJhcnljb29yZEZyb21Qb2ludCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldEJhcnljb29yZCgpLiIpLHRoaXMuZ2V0QmFyeWNvb3JkKG4sdCl9LFZyLnByb3RvdHlwZS5taWRwb2ludD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLm1pZHBvaW50KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0TWlkcG9pbnQoKS4iKSx0aGlzLmdldE1pZHBvaW50KG4pfSxWci5wcm90b3R5cGVub3JtYWw9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5ub3JtYWwoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXROb3JtYWwoKS4iKSx0aGlzLmdldE5vcm1hbChuKX0sVnIucHJvdG90eXBlLnBsYW5lPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAucGxhbmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRQbGFuZSgpLiIpLHRoaXMuZ2V0UGxhbmUobil9LFZyLmJhcnljb29yZEZyb21Qb2ludD1mdW5jdGlvbihuLHQsZSxpLHIpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAuYmFyeWNvb3JkRnJvbVBvaW50KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0QmFyeWNvb3JkKCkuIiksVnIuZ2V0QmFyeWNvb3JkKG4sdCxlLGkscil9LFZyLm5vcm1hbD1mdW5jdGlvbihuLHQsZSxpKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLm5vcm1hbCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE5vcm1hbCgpLiIpLFZyLmdldE5vcm1hbChuLHQsZSxpKX0sV2QucHJvdG90eXBlLmV4dHJhY3RBbGxQb2ludHM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhcGU6IC5leHRyYWN0QWxsUG9pbnRzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5leHRyYWN0UG9pbnRzKCkgaW5zdGVhZC4iKSx0aGlzLmV4dHJhY3RQb2ludHMobil9LFdkLnByb3RvdHlwZS5leHRydWRlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlOiAuZXh0cnVkZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFeHRydWRlR2VvbWV0cnkoKSBpbnN0ZWFkLiIpLG5ldyBJcCh0aGlzLG4pfSxXZC5wcm90b3R5cGUubWFrZUdlb21ldHJ5PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlOiAubWFrZUdlb21ldHJ5KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFNoYXBlR2VvbWV0cnkoKSBpbnN0ZWFkLiIpLG5ldyB3bSh0aGlzLG4pfSwkZS5wcm90b3R5cGUuZnJvbUF0dHJpYnV0ZT1mdW5jdGlvbihuLHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy5mcm9tQnVmZmVyQXR0cmlidXRlKG4sdCxlKX0sJGUucHJvdG90eXBlLmRpc3RhbmNlVG9NYW5oYXR0YW49ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmRpc3RhbmNlVG9NYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5EaXN0YW5jZVRvKCkuIiksdGhpcy5tYW5oYXR0YW5EaXN0YW5jZVRvKG4pfSwkZS5wcm90b3R5cGUubGVuZ3RoTWFuaGF0dGFuPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmxlbmd0aE1hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkxlbmd0aCgpLiIpLHRoaXMubWFuaGF0dGFuTGVuZ3RoKCl9LEsucHJvdG90eXBlLnNldEV1bGVyRnJvbVJvdGF0aW9uTWF0cml4PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuVmVjdG9yMzogLnNldEV1bGVyRnJvbVJvdGF0aW9uTWF0cml4KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEV1bGVyLnNldEZyb21Sb3RhdGlvbk1hdHJpeCgpIGluc3RlYWQuIil9LEsucHJvdG90eXBlLnNldEV1bGVyRnJvbVF1YXRlcm5pb249ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5WZWN0b3IzOiAuc2V0RXVsZXJGcm9tUXVhdGVybmlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFdWxlci5zZXRGcm9tUXVhdGVybmlvbigpIGluc3RlYWQuIil9LEsucHJvdG90eXBlLmdldFBvc2l0aW9uRnJvbU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZ2V0UG9zaXRpb25Gcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCkuIiksdGhpcy5zZXRGcm9tTWF0cml4UG9zaXRpb24obil9LEsucHJvdG90eXBlLmdldFNjYWxlRnJvbU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZ2V0U2NhbGVGcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeFNjYWxlKCkuIiksdGhpcy5zZXRGcm9tTWF0cml4U2NhbGUobil9LEsucHJvdG90eXBlLmdldENvbHVtbkZyb21NYXRyaXg9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZ2V0Q29sdW1uRnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21NYXRyaXhDb2x1bW4oKS4iKSx0aGlzLnNldEZyb21NYXRyaXhDb2x1bW4odCxuKX0sSy5wcm90b3R5cGUuYXBwbHlQcm9qZWN0aW9uPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5hcHBseVByb2plY3Rpb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmFwcGx5TWF0cml4NCggbSApIGluc3RlYWQuIiksdGhpcy5hcHBseU1hdHJpeDQobil9LEsucHJvdG90eXBlLmZyb21BdHRyaWJ1dGU9ZnVuY3Rpb24obix0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShuLHQsZSl9LEsucHJvdG90eXBlLmRpc3RhbmNlVG9NYW5oYXR0YW49ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmRpc3RhbmNlVG9NYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5EaXN0YW5jZVRvKCkuIiksdGhpcy5tYW5oYXR0YW5EaXN0YW5jZVRvKG4pfSxLLnByb3RvdHlwZS5sZW5ndGhNYW5oYXR0YW49ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuTGVuZ3RoKCkuIiksdGhpcy5tYW5oYXR0YW5MZW5ndGgoKX0sUWkucHJvdG90eXBlLmZyb21BdHRyaWJ1dGU9ZnVuY3Rpb24obix0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShuLHQsZSl9LFFpLnByb3RvdHlwZS5sZW5ndGhNYW5oYXR0YW49ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuTGVuZ3RoKCkuIiksdGhpcy5tYW5oYXR0YW5MZW5ndGgoKX0sVWkucHJvdG90eXBlLmdldENoaWxkQnlOYW1lPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuZ2V0Q2hpbGRCeU5hbWUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRPYmplY3RCeU5hbWUoKS4iKSx0aGlzLmdldE9iamVjdEJ5TmFtZShuKX0sVWkucHJvdG90eXBlLnJlbmRlckRlcHRoPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnJlbmRlckRlcHRoIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAucmVuZGVyT3JkZXIsIGluc3RlYWQuIil9LFVpLnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnRyYW5zbGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAudHJhbnNsYXRlT25BeGlzKCBheGlzLCBkaXN0YW5jZSApIGluc3RlYWQuIiksdGhpcy50cmFuc2xhdGVPbkF4aXModCxuKX0sVWkucHJvdG90eXBlLmdldFdvcmxkUm90YXRpb249ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3QzRDogLmdldFdvcmxkUm90YXRpb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuT2JqZWN0M0QuZ2V0V29ybGRRdWF0ZXJuaW9uKCB0YXJnZXQgKSBpbnN0ZWFkLiIpfSxVaS5wcm90b3R5cGUuYXBwbHlNYXRyaXg9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5hcHBseU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmFwcGx5TWF0cml4NCgpLiIpLHRoaXMuYXBwbHlNYXRyaXg0KG4pfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhVaS5wcm90b3R5cGUse2V1bGVyT3JkZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuZXVsZXJPcmRlciBpcyBub3cgLnJvdGF0aW9uLm9yZGVyLiIpLHRoaXMucm90YXRpb24ub3JkZXJ9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuZXVsZXJPcmRlciBpcyBub3cgLnJvdGF0aW9uLm9yZGVyLiIpLHRoaXMucm90YXRpb24ub3JkZXI9bn19LHVzZVF1YXRlcm5pb246e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC51c2VRdWF0ZXJuaW9uIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSBsaWJyYXJ5IG5vdyB1c2VzIHF1YXRlcm5pb25zIGJ5IGRlZmF1bHQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC51c2VRdWF0ZXJuaW9uIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSBsaWJyYXJ5IG5vdyB1c2VzIHF1YXRlcm5pb25zIGJ5IGRlZmF1bHQuIil9fX0pLHNvLnByb3RvdHlwZS5zZXREcmF3TW9kZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2g6IC5zZXREcmF3TW9kZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSByZW5kZXJlciBub3cgYWx3YXlzIGFzc3VtZXMgVEhSRUUuVHJpYW5nbGVzRHJhd01vZGUuIFRyYW5zZm9ybSB5b3VyIGdlb21ldHJ5IHZpYSBCdWZmZXJHZW9tZXRyeVV0aWxzLnRvVHJpYW5nbGVzRHJhd01vZGUoKSBpZiBuZWNlc3NhcnkuIil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHNvLnByb3RvdHlwZSx7ZHJhd01vZGU6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoOiAuZHJhd01vZGUgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4iKSwwfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoOiAuZHJhd01vZGUgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4gVHJhbnNmb3JtIHlvdXIgZ2VvbWV0cnkgdmlhIEJ1ZmZlckdlb21ldHJ5VXRpbHMudG9UcmlhbmdsZXNEcmF3TW9kZSgpIGlmIG5lY2Vzc2FyeS4iKX19fSksTkkucHJvdG90eXBlLmluaXRCb25lcz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNraW5uZWRNZXNoOiBpbml0Qm9uZXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxyYS5wcm90b3R5cGUuc2V0TGVucz1mdW5jdGlvbihuLHQpe2NvbnNvbGUud2FybigiVEhSRUUuUGVyc3BlY3RpdmVDYW1lcmEuc2V0TGVucyBpcyBkZXByZWNhdGVkLiBVc2UgLnNldEZvY2FsTGVuZ3RoIGFuZCAuZmlsbUdhdWdlIGZvciBhIHBob3RvZ3JhcGhpYyBzZXR1cC4iKSx2b2lkIDAhPT10JiYodGhpcy5maWxtR2F1Z2U9dCksdGhpcy5zZXRGb2NhbExlbmd0aChuKX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZGwucHJvdG90eXBlLHtvbmx5U2hhZG93OntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAub25seVNoYWRvdyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sc2hhZG93Q2FtZXJhRm92OntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUZvdiBpcyBub3cgLnNoYWRvdy5jYW1lcmEuZm92LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5mb3Y9bn19LHNoYWRvd0NhbWVyYUxlZnQ6e3NldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhTGVmdCBpcyBub3cgLnNoYWRvdy5jYW1lcmEubGVmdC4iKSx0aGlzLnNoYWRvdy5jYW1lcmEubGVmdD1ufX0sc2hhZG93Q2FtZXJhUmlnaHQ6e3NldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhUmlnaHQgaXMgbm93IC5zaGFkb3cuY2FtZXJhLnJpZ2h0LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5yaWdodD1ufX0sc2hhZG93Q2FtZXJhVG9wOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYVRvcCBpcyBub3cgLnNoYWRvdy5jYW1lcmEudG9wLiIpLHRoaXMuc2hhZG93LmNhbWVyYS50b3A9bn19LHNoYWRvd0NhbWVyYUJvdHRvbTp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFCb3R0b20gaXMgbm93IC5zaGFkb3cuY2FtZXJhLmJvdHRvbS4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuYm90dG9tPW59fSxzaGFkb3dDYW1lcmFOZWFyOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYU5lYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLm5lYXIuIiksdGhpcy5zaGFkb3cuY2FtZXJhLm5lYXI9bn19LHNoYWRvd0NhbWVyYUZhcjp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFGYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLmZhci4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuZmFyPW59fSxzaGFkb3dDYW1lcmFWaXNpYmxlOntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhVmlzaWJsZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkNhbWVyYUhlbHBlciggbGlnaHQuc2hhZG93LmNhbWVyYSApIGluc3RlYWQuIil9fSxzaGFkb3dCaWFzOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0JpYXMgaXMgbm93IC5zaGFkb3cuYmlhcy4iKSx0aGlzLnNoYWRvdy5iaWFzPW59fSxzaGFkb3dEYXJrbmVzczp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0RhcmtuZXNzIGhhcyBiZWVuIHJlbW92ZWQuIil9fSxzaGFkb3dNYXBXaWR0aDp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBXaWR0aCBpcyBub3cgLnNoYWRvdy5tYXBTaXplLndpZHRoLiIpLHRoaXMuc2hhZG93Lm1hcFNpemUud2lkdGg9bn19LHNoYWRvd01hcEhlaWdodDp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBIZWlnaHQgaXMgbm93IC5zaGFkb3cubWFwU2l6ZS5oZWlnaHQuIiksdGhpcy5zaGFkb3cubWFwU2l6ZS5oZWlnaHQ9bn19fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQXIucHJvdG90eXBlLHtsZW5ndGg6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmxlbmd0aCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLmNvdW50IGluc3RlYWQuIiksdGhpcy5hcnJheS5sZW5ndGh9fSxkeW5hbWljOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5keW5hbWljIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudXNhZ2UgaW5zdGVhZC4iKSx0aGlzLnVzYWdlPT09U0l9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuZHluYW1pYyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnVzYWdlIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZShTSSl9fX0pLEFyLnByb3RvdHlwZS5zZXREeW5hbWljPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLnNldER5bmFtaWMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFVzYWdlKCkgaW5zdGVhZC4iKSx0aGlzLnNldFVzYWdlKCEwPT09bj9TSTpDeCksdGhpc30sQXIucHJvdG90eXBlLmNvcHlJbmRpY2VzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5jb3B5SW5kaWNlc0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sQXIucHJvdG90eXBlLnNldEFycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX0sR2kucHJvdG90eXBlLmFkZEluZGV4PWZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGRJbmRleCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEluZGV4KCkuIiksdGhpcy5zZXRJbmRleChuKX0sR2kucHJvdG90eXBlLmFkZEF0dHJpYnV0ZT1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0QXR0cmlidXRlKCkuIiksdCYmdC5pc0J1ZmZlckF0dHJpYnV0ZXx8dCYmdC5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlPyJpbmRleCI9PT1uPyhjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LmFkZEF0dHJpYnV0ZTogVXNlIC5zZXRJbmRleCgpIGZvciBpbmRleCBhdHRyaWJ1dGUuIiksdGhpcy5zZXRJbmRleCh0KSx0aGlzKTp0aGlzLnNldEF0dHJpYnV0ZShuLHQpOihjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgbm93IGV4cGVjdHMgKCBuYW1lLCBhdHRyaWJ1dGUgKS4iKSx0aGlzLnNldEF0dHJpYnV0ZShuLG5ldyBBcihhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdKSkpfSxHaS5wcm90b3R5cGUuYWRkRHJhd0NhbGw9ZnVuY3Rpb24obix0LGUpe3ZvaWQgMCE9PWUmJmNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGREcmF3Q2FsbCgpIG5vIGxvbmdlciBzdXBwb3J0cyBpbmRleE9mZnNldC4iKSxjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkRHJhd0NhbGwoKSBpcyBub3cgLmFkZEdyb3VwKCkuIiksdGhpcy5hZGRHcm91cChuLHQpfSxHaS5wcm90b3R5cGUuY2xlYXJEcmF3Q2FsbHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY2xlYXJEcmF3Q2FsbHMoKSBpcyBub3cgLmNsZWFyR3JvdXBzKCkuIiksdGhpcy5jbGVhckdyb3VwcygpfSxHaS5wcm90b3R5cGUuY29tcHV0ZU9mZnNldHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY29tcHV0ZU9mZnNldHMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxHaS5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAucmVtb3ZlQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZGVsZXRlQXR0cmlidXRlKCkuIiksdGhpcy5kZWxldGVBdHRyaWJ1dGUobil9LEdpLnByb3RvdHlwZS5hcHBseU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFwcGx5TWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuYXBwbHlNYXRyaXg0KCkuIiksdGhpcy5hcHBseU1hdHJpeDQobil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEdpLnByb3RvdHlwZSx7ZHJhd2NhbGxzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5kcmF3Y2FsbHMgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ3JvdXBzLiIpLHRoaXMuZ3JvdXBzfX0sb2Zmc2V0czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5vZmZzZXRzIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdyb3Vwcy4iKSx0aGlzLmdyb3Vwc319fSksQ20ucHJvdG90eXBlLnNldER5bmFtaWM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXI6IC5zZXREeW5hbWljKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRVc2FnZSgpIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZSghMD09PW4/U0k6Q3gpLHRoaXN9LENtLnByb3RvdHlwZS5zZXRBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkludGVybGVhdmVkQnVmZmVyOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX0sSXAucHJvdG90eXBlLmdldEFycmF5cz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogLmdldEFycmF5cygpIGhhcyBiZWVuIHJlbW92ZWQuIil9LElwLnByb3RvdHlwZS5hZGRTaGFwZUxpc3Q9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZUxpc3QoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxJcC5wcm90b3R5cGUuYWRkU2hhcGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LG5fLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2NlbmU6IC5kaXNwb3NlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sR3gucHJvdG90eXBlLm9uVXBkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVW5pZm9ybTogLm9uVXBkYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG9iamVjdC5vbkJlZm9yZVJlbmRlcigpIGluc3RlYWQuIiksdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRm8ucHJvdG90eXBlLHt3cmFwQXJvdW5kOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfX0sb3ZlcmRyYXc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC5vdmVyZHJhdyBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAub3ZlcmRyYXcgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LHdyYXBSR0I6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcFJHQiBoYXMgYmVlbiByZW1vdmVkLiIpLG5ldyBzbn19LHNoYWRpbmc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpLHRoaXMuZmxhdFNoYWRpbmc9MT09PW59fSxzdGVuY2lsTWFzazp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnN0ZW5jaWxNYXNrIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuc3RlbmNpbEZ1bmNNYXNrIGluc3RlYWQuIiksdGhpcy5zdGVuY2lsRnVuY01hc2t9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zdGVuY2lsTWFzayBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnN0ZW5jaWxGdW5jTWFzayBpbnN0ZWFkLiIpLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPW59fSx2ZXJ0ZXhUYW5nZW50czp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAudmVydGV4VGFuZ2VudHMgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAudmVydGV4VGFuZ2VudHMgaGFzIGJlZW4gcmVtb3ZlZC4iKX19fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoamQucHJvdG90eXBlLHtkZXJpdmF0aXZlczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IC5kZXJpdmF0aXZlcyBoYXMgYmVlbiBtb3ZlZCB0byAuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcy4iKSx0aGlzLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXN9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLiBTaGFkZXJNYXRlcmlhbDogLmRlcml2YXRpdmVzIGhhcyBiZWVuIG1vdmVkIHRvIC5leHRlbnNpb25zLmRlcml2YXRpdmVzLiIpLHRoaXMuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcz1ufX19KSxXaS5wcm90b3R5cGUuY2xlYXJUYXJnZXQ9ZnVuY3Rpb24obix0LGUsaSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuY2xlYXJUYXJnZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFJlbmRlclRhcmdldCgpIGFuZCAuY2xlYXIoKSBpbnN0ZWFkLiIpLHRoaXMuc2V0UmVuZGVyVGFyZ2V0KG4pLHRoaXMuY2xlYXIodCxlLGkpfSxXaS5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hbmltYXRlKCkgaXMgbm93IC5zZXRBbmltYXRpb25Mb29wKCkuIiksdGhpcy5zZXRBbmltYXRpb25Mb29wKG4pfSxXaS5wcm90b3R5cGUuZ2V0Q3VycmVudFJlbmRlclRhcmdldD1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRDdXJyZW50UmVuZGVyVGFyZ2V0KCkgaXMgbm93IC5nZXRSZW5kZXJUYXJnZXQoKS4iKSx0aGlzLmdldFJlbmRlclRhcmdldCgpfSxXaS5wcm90b3R5cGUuZ2V0TWF4QW5pc290cm9weT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRNYXhBbmlzb3Ryb3B5KCkgaXMgbm93IC5jYXBhYmlsaXRpZXMuZ2V0TWF4QW5pc290cm9weSgpLiIpLHRoaXMuY2FwYWJpbGl0aWVzLmdldE1heEFuaXNvdHJvcHkoKX0sV2kucHJvdG90eXBlLmdldFByZWNpc2lvbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRQcmVjaXNpb24oKSBpcyBub3cgLmNhcGFiaWxpdGllcy5wcmVjaXNpb24uIiksdGhpcy5jYXBhYmlsaXRpZXMucHJlY2lzaW9ufSxXaS5wcm90b3R5cGUucmVzZXRHTFN0YXRlPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnJlc2V0R0xTdGF0ZSgpIGlzIG5vdyAuc3RhdGUucmVzZXQoKS4iKSx0aGlzLnN0YXRlLnJlc2V0KCl9LFdpLnByb3RvdHlwZS5zdXBwb3J0c0Zsb2F0VGV4dHVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNGbG9hdFRleHR1cmVzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ09FU190ZXh0dXJlX2Zsb2F0JyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIk9FU190ZXh0dXJlX2Zsb2F0Iil9LFdpLnByb3RvdHlwZS5zdXBwb3J0c0hhbGZGbG9hdFRleHR1cmVzPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzSGFsZkZsb2F0VGV4dHVyZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Iil9LFdpLnByb3RvdHlwZS5zdXBwb3J0c1N0YW5kYXJkRGVyaXZhdGl2ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNTdGFuZGFyZERlcml2YXRpdmVzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKX0sV2kucHJvdG90eXBlLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVTM1RDPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVTM1RDKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil9LFdpLnByb3RvdHlwZS5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUFZSVEM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVBWUlRDKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKX0sV2kucHJvdG90eXBlLnN1cHBvcnRzQmxlbmRNaW5NYXg9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNCbGVuZE1pbk1heCgpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdFWFRfYmxlbmRfbWlubWF4JyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIkVYVF9ibGVuZF9taW5tYXgiKX0sV2kucHJvdG90eXBlLnN1cHBvcnRzVmVydGV4VGV4dHVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcygpIGlzIG5vdyAuY2FwYWJpbGl0aWVzLnZlcnRleFRleHR1cmVzLiIpLHRoaXMuY2FwYWJpbGl0aWVzLnZlcnRleFRleHR1cmVzfSxXaS5wcm90b3R5cGUuc3VwcG9ydHNJbnN0YW5jZWRBcnJheXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNJbnN0YW5jZWRBcnJheXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnQU5HTEVfaW5zdGFuY2VkX2FycmF5cycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIil9LFdpLnByb3RvdHlwZS5lbmFibGVTY2lzc29yVGVzdD1mdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5lbmFibGVTY2lzc29yVGVzdCgpIGlzIG5vdyAuc2V0U2Npc3NvclRlc3QoKS4iKSx0aGlzLnNldFNjaXNzb3JUZXN0KG4pfSxXaS5wcm90b3R5cGUuaW5pdE1hdGVyaWFsPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuaW5pdE1hdGVyaWFsKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sV2kucHJvdG90eXBlLmFkZFByZVBsdWdpbj1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFkZFByZVBsdWdpbigpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFdpLnByb3RvdHlwZS5hZGRQb3N0UGx1Z2luPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYWRkUG9zdFBsdWdpbigpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFdpLnByb3RvdHlwZS51cGRhdGVTaGFkb3dNYXA9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC51cGRhdGVTaGFkb3dNYXAoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxXaS5wcm90b3R5cGUuc2V0RmFjZUN1bGxpbmc9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRGYWNlQ3VsbGluZygpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFdpLnByb3RvdHlwZS5hbGxvY1RleHR1cmVVbml0PWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYWxsb2NUZXh0dXJlVW5pdCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFdpLnByb3RvdHlwZS5zZXRUZXh0dXJlPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0VGV4dHVyZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFdpLnByb3RvdHlwZS5zZXRUZXh0dXJlMkQ9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlMkQoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxXaS5wcm90b3R5cGUuc2V0VGV4dHVyZUN1YmU9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlQ3ViZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFdpLnByb3RvdHlwZS5nZXRBY3RpdmVNaXBNYXBMZXZlbD1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRBY3RpdmVNaXBNYXBMZXZlbCgpIGlzIG5vdyAuZ2V0QWN0aXZlTWlwbWFwTGV2ZWwoKS4iKSx0aGlzLmdldEFjdGl2ZU1pcG1hcExldmVsKCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFdpLnByb3RvdHlwZSx7c2hhZG93TWFwRW5hYmxlZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhZG93TWFwLmVuYWJsZWR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBFbmFibGVkIGlzIG5vdyAuc2hhZG93TWFwLmVuYWJsZWQuIiksdGhpcy5zaGFkb3dNYXAuZW5hYmxlZD1ufX0sc2hhZG93TWFwVHlwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhZG93TWFwLnR5cGV9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBUeXBlIGlzIG5vdyAuc2hhZG93TWFwLnR5cGUuIiksdGhpcy5zaGFkb3dNYXAudHlwZT1ufX0sc2hhZG93TWFwQ3VsbEZhY2U6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fSxjb250ZXh0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuY29udGV4dCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmdldENvbnRleHQoKSBpbnN0ZWFkLiIpLHRoaXMuZ2V0Q29udGV4dCgpfX0sdnI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC52ciBoYXMgYmVlbiByZW5hbWVkIHRvIC54ciIpLHRoaXMueHJ9fSxnYW1tYUlucHV0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFJbnB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgdGhlIGVuY29kaW5nIGZvciB0ZXh0dXJlcyB2aWEgVGV4dHVyZS5lbmNvZGluZyBpbnN0ZWFkLiIpLCExfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYUlucHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCB0aGUgZW5jb2RpbmcgZm9yIHRleHR1cmVzIHZpYSBUZXh0dXJlLmVuY29kaW5nIGluc3RlYWQuIil9fSxnYW1tYU91dHB1dDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hT3V0cHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCBXZWJHTFJlbmRlcmVyLm91dHB1dEVuY29kaW5nIGluc3RlYWQuIiksITF9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYU91dHB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgV2ViR0xSZW5kZXJlci5vdXRwdXRFbmNvZGluZyBpbnN0ZWFkLiIpLHRoaXMub3V0cHV0RW5jb2Rpbmc9ITA9PT1uP0RyOndwfX0sdG9uZU1hcHBpbmdXaGl0ZVBvaW50OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudG9uZU1hcHBpbmdXaGl0ZVBvaW50IGhhcyBiZWVuIHJlbW92ZWQuIiksMX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudG9uZU1hcHBpbmdXaGl0ZVBvaW50IGhhcyBiZWVuIHJlbW92ZWQuIil9fSxnYW1tYUZhY3Rvcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hRmFjdG9yIGhhcyBiZWVuIHJlbW92ZWQuIiksMn0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFGYWN0b3IgaGFzIGJlZW4gcmVtb3ZlZC4iKX19fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMod3RlLnByb3RvdHlwZSx7Y3VsbEZhY2U6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5jdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAuY3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19LHJlbmRlclJldmVyc2VTaWRlZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclJldmVyc2VTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyUmV2ZXJzZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fSxyZW5kZXJTaW5nbGVTaWRlZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclNpbmdsZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJTaW5nbGVTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0cy5wcm90b3R5cGUse3dyYXBTOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLndyYXBTIGlzIG5vdyAudGV4dHVyZS53cmFwUy4iKSx0aGlzLnRleHR1cmUud3JhcFN9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFMgaXMgbm93IC50ZXh0dXJlLndyYXBTLiIpLHRoaXMudGV4dHVyZS53cmFwUz1ufX0sd3JhcFQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFQgaXMgbm93IC50ZXh0dXJlLndyYXBULiIpLHRoaXMudGV4dHVyZS53cmFwVH0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwVCBpcyBub3cgLnRleHR1cmUud3JhcFQuIiksdGhpcy50ZXh0dXJlLndyYXBUPW59fSxtYWdGaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWFnRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5tYWdGaWx0ZXIuIiksdGhpcy50ZXh0dXJlLm1hZ0ZpbHRlcn0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5tYWdGaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1hZ0ZpbHRlci4iKSx0aGlzLnRleHR1cmUubWFnRmlsdGVyPW59fSxtaW5GaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWluRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5taW5GaWx0ZXIuIiksdGhpcy50ZXh0dXJlLm1pbkZpbHRlcn0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5taW5GaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1pbkZpbHRlci4iKSx0aGlzLnRleHR1cmUubWluRmlsdGVyPW59fSxhbmlzb3Ryb3B5OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmFuaXNvdHJvcHkgaXMgbm93IC50ZXh0dXJlLmFuaXNvdHJvcHkuIiksdGhpcy50ZXh0dXJlLmFuaXNvdHJvcHl9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuYW5pc290cm9weSBpcyBub3cgLnRleHR1cmUuYW5pc290cm9weS4iKSx0aGlzLnRleHR1cmUuYW5pc290cm9weT1ufX0sb2Zmc2V0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm9mZnNldCBpcyBub3cgLnRleHR1cmUub2Zmc2V0LiIpLHRoaXMudGV4dHVyZS5vZmZzZXR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAub2Zmc2V0IGlzIG5vdyAudGV4dHVyZS5vZmZzZXQuIiksdGhpcy50ZXh0dXJlLm9mZnNldD1ufX0scmVwZWF0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnJlcGVhdCBpcyBub3cgLnRleHR1cmUucmVwZWF0LiIpLHRoaXMudGV4dHVyZS5yZXBlYXR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAucmVwZWF0IGlzIG5vdyAudGV4dHVyZS5yZXBlYXQuIiksdGhpcy50ZXh0dXJlLnJlcGVhdD1ufX0sZm9ybWF0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmZvcm1hdCBpcyBub3cgLnRleHR1cmUuZm9ybWF0LiIpLHRoaXMudGV4dHVyZS5mb3JtYXR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZm9ybWF0IGlzIG5vdyAudGV4dHVyZS5mb3JtYXQuIiksdGhpcy50ZXh0dXJlLmZvcm1hdD1ufX0sdHlwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC50eXBlIGlzIG5vdyAudGV4dHVyZS50eXBlLiIpLHRoaXMudGV4dHVyZS50eXBlfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnR5cGUgaXMgbm93IC50ZXh0dXJlLnR5cGUuIiksdGhpcy50ZXh0dXJlLnR5cGU9bn19LGdlbmVyYXRlTWlwbWFwczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5nZW5lcmF0ZU1pcG1hcHMgaXMgbm93IC50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcy4iKSx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmdlbmVyYXRlTWlwbWFwcyBpcyBub3cgLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzLiIpLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9bn19fSksY2xhc3MgZXh0ZW5kcyBVaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iQXVkaW8iLHRoaXMubGlzdGVuZXI9dCx0aGlzLmNvbnRleHQ9dC5jb250ZXh0LHRoaXMuZ2Fpbj10aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpLHRoaXMuZ2Fpbi5jb25uZWN0KHQuZ2V0SW5wdXQoKSksdGhpcy5hdXRvcGxheT0hMSx0aGlzLmJ1ZmZlcj1udWxsLHRoaXMuZGV0dW5lPTAsdGhpcy5sb29wPSExLHRoaXMubG9vcFN0YXJ0PTAsdGhpcy5sb29wRW5kPTAsdGhpcy5vZmZzZXQ9MCx0aGlzLmR1cmF0aW9uPXZvaWQgMCx0aGlzLnBsYXliYWNrUmF0ZT0xLHRoaXMuaXNQbGF5aW5nPSExLHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSEwLHRoaXMuc291cmNlPW51bGwsdGhpcy5zb3VyY2VUeXBlPSJlbXB0eSIsdGhpcy5fc3RhcnRlZEF0PTAsdGhpcy5fcHJvZ3Jlc3M9MCx0aGlzLl9jb25uZWN0ZWQ9ITEsdGhpcy5maWx0ZXJzPVtdfWdldE91dHB1dCgpe3JldHVybiB0aGlzLmdhaW59c2V0Tm9kZVNvdXJjZSh0KXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITEsdGhpcy5zb3VyY2VUeXBlPSJhdWRpb05vZGUiLHRoaXMuc291cmNlPXQsdGhpcy5jb25uZWN0KCksdGhpc31zZXRNZWRpYUVsZW1lbnRTb3VyY2UodCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSExLHRoaXMuc291cmNlVHlwZT0ibWVkaWFOb2RlIix0aGlzLnNvdXJjZT10aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFFbGVtZW50U291cmNlKHQpLHRoaXMuY29ubmVjdCgpLHRoaXN9c2V0TWVkaWFTdHJlYW1Tb3VyY2UodCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSExLHRoaXMuc291cmNlVHlwZT0ibWVkaWFTdHJlYW1Ob2RlIix0aGlzLnNvdXJjZT10aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2UodCksdGhpcy5jb25uZWN0KCksdGhpc31zZXRCdWZmZXIodCl7cmV0dXJuIHRoaXMuYnVmZmVyPXQsdGhpcy5zb3VyY2VUeXBlPSJidWZmZXIiLHRoaXMuYXV0b3BsYXkmJnRoaXMucGxheSgpLHRoaXN9cGxheSh0PTApe2lmKCEwPT09dGhpcy5pc1BsYXlpbmcpcmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogQXVkaW8gaXMgYWxyZWFkeSBwbGF5aW5nLiIpO2lmKCExPT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wpcmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTt0aGlzLl9zdGFydGVkQXQ9dGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lK3Q7bGV0IGU9dGhpcy5jb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO3JldHVybiBlLmJ1ZmZlcj10aGlzLmJ1ZmZlcixlLmxvb3A9dGhpcy5sb29wLGUubG9vcFN0YXJ0PXRoaXMubG9vcFN0YXJ0LGUubG9vcEVuZD10aGlzLmxvb3BFbmQsZS5vbmVuZGVkPXRoaXMub25FbmRlZC5iaW5kKHRoaXMpLGUuc3RhcnQodGhpcy5fc3RhcnRlZEF0LHRoaXMuX3Byb2dyZXNzK3RoaXMub2Zmc2V0LHRoaXMuZHVyYXRpb24pLHRoaXMuaXNQbGF5aW5nPSEwLHRoaXMuc291cmNlPWUsdGhpcy5zZXREZXR1bmUodGhpcy5kZXR1bmUpLHRoaXMuc2V0UGxheWJhY2tSYXRlKHRoaXMucGxheWJhY2tSYXRlKSx0aGlzLmNvbm5lY3QoKX1wYXVzZSgpe2lmKCExIT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wpcmV0dXJuITA9PT10aGlzLmlzUGxheWluZyYmKHRoaXMuX3Byb2dyZXNzKz1NYXRoLm1heCh0aGlzLmNvbnRleHQuY3VycmVudFRpbWUtdGhpcy5fc3RhcnRlZEF0LDApKnRoaXMucGxheWJhY2tSYXRlLCEwPT09dGhpcy5sb29wJiYodGhpcy5fcHJvZ3Jlc3M9dGhpcy5fcHJvZ3Jlc3MlKHRoaXMuZHVyYXRpb258fHRoaXMuYnVmZmVyLmR1cmF0aW9uKSksdGhpcy5zb3VyY2Uuc3RvcCgpLHRoaXMuc291cmNlLm9uZW5kZWQ9bnVsbCx0aGlzLmlzUGxheWluZz0hMSksdGhpcztjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpfXN0b3AoKXtpZighMSE9PXRoaXMuaGFzUGxheWJhY2tDb250cm9sKXJldHVybiB0aGlzLl9wcm9ncmVzcz0wLHRoaXMuc291cmNlLnN0b3AoKSx0aGlzLnNvdXJjZS5vbmVuZGVkPW51bGwsdGhpcy5pc1BsYXlpbmc9ITEsdGhpcztjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpfWNvbm5lY3QoKXtpZih0aGlzLmZpbHRlcnMubGVuZ3RoPjApe3RoaXMuc291cmNlLmNvbm5lY3QodGhpcy5maWx0ZXJzWzBdKTtmb3IobGV0IHQ9MSxlPXRoaXMuZmlsdGVycy5sZW5ndGg7dDxlO3QrKyl0aGlzLmZpbHRlcnNbdC0xXS5jb25uZWN0KHRoaXMuZmlsdGVyc1t0XSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmNvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7cmV0dXJuIHRoaXMuX2Nvbm5lY3RlZD0hMCx0aGlzfWRpc2Nvbm5lY3QoKXtpZih0aGlzLmZpbHRlcnMubGVuZ3RoPjApe3RoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXJzWzBdKTtmb3IobGV0IHQ9MSxlPXRoaXMuZmlsdGVycy5sZW5ndGg7dDxlO3QrKyl0aGlzLmZpbHRlcnNbdC0xXS5kaXNjb25uZWN0KHRoaXMuZmlsdGVyc1t0XSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uZGlzY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7cmV0dXJuIHRoaXMuX2Nvbm5lY3RlZD0hMSx0aGlzfWdldEZpbHRlcnMoKXtyZXR1cm4gdGhpcy5maWx0ZXJzfXNldEZpbHRlcnModCl7cmV0dXJuIHR8fCh0PVtdKSwhMD09PXRoaXMuX2Nvbm5lY3RlZD8odGhpcy5kaXNjb25uZWN0KCksdGhpcy5maWx0ZXJzPXQuc2xpY2UoKSx0aGlzLmNvbm5lY3QoKSk6dGhpcy5maWx0ZXJzPXQuc2xpY2UoKSx0aGlzfXNldERldHVuZSh0KXtpZih0aGlzLmRldHVuZT10LHZvaWQgMCE9PXRoaXMuc291cmNlLmRldHVuZSlyZXR1cm4hMD09PXRoaXMuaXNQbGF5aW5nJiZ0aGlzLnNvdXJjZS5kZXR1bmUuc2V0VGFyZ2V0QXRUaW1lKHRoaXMuZGV0dW5lLHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9Z2V0RGV0dW5lKCl7cmV0dXJuIHRoaXMuZGV0dW5lfWdldEZpbHRlcigpe3JldHVybiB0aGlzLmdldEZpbHRlcnMoKVswXX1zZXRGaWx0ZXIodCl7cmV0dXJuIHRoaXMuc2V0RmlsdGVycyh0P1t0XTpbXSl9c2V0UGxheWJhY2tSYXRlKHQpe2lmKCExIT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wpcmV0dXJuIHRoaXMucGxheWJhY2tSYXRlPXQsITA9PT10aGlzLmlzUGxheWluZyYmdGhpcy5zb3VyY2UucGxheWJhY2tSYXRlLnNldFRhcmdldEF0VGltZSh0aGlzLnBsYXliYWNrUmF0ZSx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzO2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIil9Z2V0UGxheWJhY2tSYXRlKCl7cmV0dXJuIHRoaXMucGxheWJhY2tSYXRlfW9uRW5kZWQoKXt0aGlzLmlzUGxheWluZz0hMX1nZXRMb29wKCl7cmV0dXJuITE9PT10aGlzLmhhc1BsYXliYWNrQ29udHJvbD8oY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKSwhMSk6dGhpcy5sb29wfXNldExvb3AodCl7aWYoITEhPT10aGlzLmhhc1BsYXliYWNrQ29udHJvbClyZXR1cm4gdGhpcy5sb29wPXQsITA9PT10aGlzLmlzUGxheWluZyYmKHRoaXMuc291cmNlLmxvb3A9dGhpcy5sb29wKSx0aGlzO2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIil9c2V0TG9vcFN0YXJ0KHQpe3JldHVybiB0aGlzLmxvb3BTdGFydD10LHRoaXN9c2V0TG9vcEVuZCh0KXtyZXR1cm4gdGhpcy5sb29wRW5kPXQsdGhpc31nZXRWb2x1bWUoKXtyZXR1cm4gdGhpcy5nYWluLmdhaW4udmFsdWV9c2V0Vm9sdW1lKHQpe3JldHVybiB0aGlzLmdhaW4uZ2Fpbi5zZXRUYXJnZXRBdFRpbWUodCx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzfX0ucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogLmxvYWQgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkF1ZGlvTG9hZGVyIGluc3RlYWQuIik7bGV0IHQ9dGhpcztyZXR1cm4obmV3IHFCKS5sb2FkKG4sZnVuY3Rpb24oaSl7dC5zZXRCdWZmZXIoaSl9KSx0aGlzfSxFeC5wcm90b3R5cGUudXBkYXRlQ3ViZU1hcD1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkN1YmVDYW1lcmE6IC51cGRhdGVDdWJlTWFwKCkgaXMgbm93IC51cGRhdGUoKS4iKSx0aGlzLnVwZGF0ZShuLHQpfSxFeC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24obix0LGUsaSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQ3ViZUNhbWVyYTogLmNsZWFyKCkgaXMgbm93IC5yZW5kZXJUYXJnZXQuY2xlYXIoKS4iKSx0aGlzLnJlbmRlclRhcmdldC5jbGVhcihuLHQsZSxpKX0sVWQuY3Jvc3NPcmlnaW49dm9pZCAwLFVkLmxvYWRUZXh0dXJlPWZ1bmN0aW9uKG4sdCxlLGkpe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuVGV4dHVyZUxvYWRlcigpIGluc3RlYWQuIik7bGV0IHI9bmV3IE5CO3Iuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7bGV0IG89ci5sb2FkKG4sZSx2b2lkIDAsaSk7cmV0dXJuIHQmJihvLm1hcHBpbmc9dCksb30sVWQubG9hZFRleHR1cmVDdWJlPWZ1bmN0aW9uKG4sdCxlLGkpe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZUN1YmUgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkN1YmVUZXh0dXJlTG9hZGVyKCkgaW5zdGVhZC4iKTtsZXQgcj1uZXcgRkI7ci5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtsZXQgbz1yLmxvYWQobixlLHZvaWQgMCxpKTtyZXR1cm4gdCYmKG8ubWFwcGluZz10KSxvfSxVZC5sb2FkQ29tcHJlc3NlZFRleHR1cmU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRERTTG9hZGVyIGluc3RlYWQuIil9LFVkLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLkREU0xvYWRlciBpbnN0ZWFkLiIpfSx0eXBlb2YgX19USFJFRV9ERVZUT09MU19fPCJ1IiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJyZWdpc3RlciIse2RldGFpbDp7cmV2aXNpb246c1Z9fSkpLHR5cGVvZiB3aW5kb3c8InUiJiYod2luZG93Ll9fVEhSRUVfXz9jb25zb2xlLndhcm4oIldBUk5JTkc6IE11bHRpcGxlIGluc3RhbmNlcyBvZiBUaHJlZS5qcyBiZWluZyBpbXBvcnRlZC4iKTp3aW5kb3cuX19USFJFRV9fPXNWKTt2YXIgUWw9KCgpPT4oZnVuY3Rpb24obil7bltuLkNJUkNMRT0wXT0iQ0lSQ0xFIixuW24uTElORT0xXT0iTElORSIsbltuLlRSSUFOR0xFPTJdPSJUUklBTkdMRSIsbltuLlRSQVBFWk9JRD0zXT0iVFJBUEVaT0lEIn0oUWx8fChRbD17fSkpLFFsKSkoKTtmdW5jdGlvbiBQdGUobix0KXtsZXQgZT10Lmxlbmd0aC8yLGk9bi5hdHRyaWJ1dGVzLnBvc2l0aW9uOyghaXx8aS5jb3VudCE9PTMqZSkmJihpPW5ldyBBcihuZXcgRmxvYXQzMkFycmF5KDMqZSksMyksbi5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixpKSk7bGV0IHI9aS5hcnJheTtmb3IobGV0IG89MDtvPGU7bysrKXJbMypvXT10WzIqb10sclszKm8rMV09dFsyKm8rMV07aS5uZWVkc1VwZGF0ZT0hMCxuLnNldERyYXdSYW5nZSgwLDMqZSksbi5jb21wdXRlQm91bmRpbmdTcGhlcmUoKX1mdW5jdGlvbiBrdGUobix0LGUpe2xldCBpPU1hdGgubWF4KHQubGVuZ3RoLzItMSwwKSxyPTIqaSozLG89MypyLGE9bi5hdHRyaWJ1dGVzLnBvc2l0aW9uOyghYXx8YS5jb3VudCE9PXIpJiYoYT1uZXcgQXIobmV3IEZsb2F0MzJBcnJheShvKSwzKSxuLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLGEpKTtsZXQgcz1hLmFycmF5O2ZvcihsZXQgbD0wO2w8aTtsKyspe2xldFtjLGQsdSxwXT1bdFsyKmxdLHRbMipsKzFdLHRbMipsKzJdLHRbMipsKzNdXSxoPW5ldyAkZShjLGQpLG09bmV3ICRlKHUscCksXz1uZXcgJGUodS1jLHAtZCksTT1uZXcgJGUoLV8ueSxfLngpLnNldExlbmd0aChlLzIpLHk9aC5jbG9uZSgpLmFkZChNKSx4PWguY2xvbmUoKS5zdWIoTSksUj1tLmNsb25lKCkuYWRkKE0pLEk9bS5jbG9uZSgpLnN1YihNKSxCPVt5LngseS55LDAseC54LHgueSwwLFIueCxSLnksMCxSLngsUi55LDAseC54LHgueSwwLEkueCxJLnksMF07cy5zZXQoQixsKkIubGVuZ3RoKX1hLm5lZWRzVXBkYXRlPSEwLG4uc2V0RHJhd1JhbmdlKDAsbyksbi5jb21wdXRlQm91bmRpbmdTcGhlcmUoKX1mdW5jdGlvbiBuQShuLHQsZSxpKXtsZXR7dmlzaWJsZTpyLGNvbG9yOm8sb3BhY2l0eTphfT1pO2lmKEFycmF5LmlzQXJyYXkodC5tYXRlcmlhbCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhcmlhbnQgZXJyb3I6IG9ubHkgZXhwZWN0IG9uZSBtYXRlcmlhbCBvbiBhbiBvYmplY3QiKTtsZXQgcz10Lm1hdGVyaWFsO2lmKHMudmlzaWJsZSE9PXImJihzLnZpc2libGU9cixzLm5lZWRzVXBkYXRlPSEwKSwhcilyZXR1cm4hMTtsZXQgbD1tVihuLG8sYT8/MSksYz1lKHQuZ2VvbWV0cnkpO3JldHVybiB0Lmdlb21ldHJ5IT09YyYmKHQuZ2VvbWV0cnk9Yykscy5jb2xvci5lcXVhbHMobCl8fChzLmNvbG9yLnNldChsKSxzLm5lZWRzVXBkYXRlPSEwKSwhMH12YXIgckE9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5yYXdTZXJpZXNEYXRhPVtdLHRoaXMuc2VyaWVzPVtdLHRoaXMucGFpbnREaXJ0eT0hMCx0aGlzLnJlbmRlckNhY2hlPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMucHJldkZyYW1lQ2FjaGU9bmV3IE1hcCx0aGlzLmN1cnJGcmFtZUNhY2hlPW5ldyBNYXB9Z2V0RnJvbVByZXZpb3VzRnJhbWUodCl7cmV0dXJuIHRoaXMucHJldkZyYW1lQ2FjaGUuZ2V0KHQpPz9udWxsfXNldFRvQ3VycmVudEZyYW1lKHQsZSl7dGhpcy5jdXJyRnJhbWVDYWNoZS5zZXQodCxlKX1maW5hbGl6ZUZyYW1lQW5kR2V0UmVtb3ZlZCgpe2xldCB0PVtdO2ZvcihsZXRbZSxpXW9mIHRoaXMucHJldkZyYW1lQ2FjaGUuZW50cmllcygpKXRoaXMuY3VyckZyYW1lQ2FjaGUuaGFzKGUpfHx0LnB1c2goaSk7cmV0dXJuIHRoaXMucHJldkZyYW1lQ2FjaGU9dGhpcy5jdXJyRnJhbWVDYWNoZSx0aGlzLmN1cnJGcmFtZUNhY2hlPW5ldyBNYXAsdH19LHRoaXMuY29vcmRpbmF0ZUlkZW50aWZpZXI9bnVsbCx0aGlzLmxheW91dD17eDowLHdpZHRoOjEseTowLGhlaWdodDoxfSx0aGlzLmdldE1ldGFkYXRhTWFwSW1wbD10LmdldE1ldGFkYXRhTWFwLHRoaXMuY29vcmRpbmF0b3I9dC5jb29yZGluYXRvcix0aGlzLnJlbmRlcmVyPXQucmVuZGVyZXIsdGhpcy5wYWludEJydXNoPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMucmVuZGVyQ2FjaGU9dCx0aGlzLnJlbmRlcmVyPWV9c2V0TGluZSh0LGUsaSl7bGV0IHI9dGhpcy5yZW5kZXJlci5jcmVhdGVPclVwZGF0ZUxpbmVPYmplY3QodGhpcy5yZW5kZXJDYWNoZS5nZXRGcm9tUHJldmlvdXNGcmFtZSh0KSxlLGkpO3ImJnRoaXMucmVuZGVyQ2FjaGUuc2V0VG9DdXJyZW50RnJhbWUodCxyKX1zZXRUcmlhbmdsZSh0LGUsaSl7bGV0IHI9dGhpcy5yZW5kZXJlci5jcmVhdGVPclVwZGF0ZVRyaWFuZ2xlT2JqZWN0KHRoaXMucmVuZGVyQ2FjaGUuZ2V0RnJvbVByZXZpb3VzRnJhbWUodCksZSxpKTtyJiZ0aGlzLnJlbmRlckNhY2hlLnNldFRvQ3VycmVudEZyYW1lKHQscil9c2V0Q2lyY2xlKHQsZSxpKXtsZXQgcj10aGlzLnJlbmRlcmVyLmNyZWF0ZU9yVXBkYXRlQ2lyY2xlT2JqZWN0KHRoaXMucmVuZGVyQ2FjaGUuZ2V0RnJvbVByZXZpb3VzRnJhbWUodCksZSxpKTtyJiZ0aGlzLnJlbmRlckNhY2hlLnNldFRvQ3VycmVudEZyYW1lKHQscil9c2V0VHJhcGV6b2lkKHQsZSxpLHIpe2xldCBvPXRoaXMucmVuZGVyZXIuY3JlYXRlT3JVcGRhdGVUcmFwZXpvaWRPYmplY3QodGhpcy5yZW5kZXJDYWNoZS5nZXRGcm9tUHJldmlvdXNGcmFtZSh0KSxlLGkscik7byYmdGhpcy5yZW5kZXJDYWNoZS5zZXRUb0N1cnJlbnRGcmFtZSh0LG8pfX0odGhpcy5yZW5kZXJDYWNoZSx0aGlzLnJlbmRlcmVyKX1zZXRMYXlvdXRSZWN0KHQpeyh0aGlzLmxheW91dC54IT09dC54fHx0aGlzLmxheW91dC53aWR0aCE9PXQud2lkdGh8fHRoaXMubGF5b3V0LnkhPT10Lnl8fHRoaXMubGF5b3V0LmhlaWdodCE9PXQuaGVpZ2h0KSYmKHRoaXMucGFpbnREaXJ0eT0hMCksdGhpcy5sYXlvdXQ9dH1nZXRMYXlvdXRSZWN0KCl7cmV0dXJuIHRoaXMubGF5b3V0fWdldE1ldGFkYXRhTWFwKCl7cmV0dXJuIHRoaXMuZ2V0TWV0YWRhdGFNYXBJbXBsKCl9bWFya0FzUGFpbnREaXJ0eSgpe3RoaXMucGFpbnREaXJ0eT0hMH1yZW5kZXIoKXtpZih0aGlzLnRyYW5zZm9ybUNvb3JkaW5hdGVzSWZTdGFsZSgpLHRoaXMucGFpbnREaXJ0eSl7dGhpcy5yZWRyYXcoKTtmb3IobGV0IHQgb2YgdGhpcy5yZW5kZXJDYWNoZS5maW5hbGl6ZUZyYW1lQW5kR2V0UmVtb3ZlZCgpKXRoaXMucmVuZGVyZXIuZGVzdHJveU9iamVjdCh0KTt0aGlzLnBhaW50RGlydHk9ITF9fWlzQ29vcmRpbmF0ZVVwZGF0ZWQoKXtyZXR1cm4gdGhpcy5jb29yZGluYXRvci5nZXRVcGRhdGVJZGVudGlmaWVyKCkhPT10aGlzLmNvb3JkaW5hdGVJZGVudGlmaWVyfWNsZWFyQ29vcmRpbmF0ZUlkZW50aWZpZXIoKXt0aGlzLmNvb3JkaW5hdGVJZGVudGlmaWVyPW51bGx9c2V0RGF0YSh0KXt0aGlzLmNsZWFyQ29vcmRpbmF0ZUlkZW50aWZpZXIoKSx0aGlzLnJhd1Nlcmllc0RhdGE9dH10cmFuc2Zvcm1Db29yZGluYXRlc0lmU3RhbGUoKXtpZighdGhpcy5pc0Nvb3JkaW5hdGVVcGRhdGVkKCkpcmV0dXJuO2xldCB0PXRoaXMuZ2V0TGF5b3V0UmVjdCgpO3RoaXMuc2VyaWVzPW5ldyBBcnJheSh0aGlzLnJhd1Nlcmllc0RhdGEubGVuZ3RoKTtmb3IobGV0IGU9MDtlPHRoaXMucmF3U2VyaWVzRGF0YS5sZW5ndGg7ZSsrKXtsZXQgaT10aGlzLnJhd1Nlcmllc0RhdGFbZV07dGhpcy5zZXJpZXNbZV09e2lkOmkuaWQscG9seWxpbmU6bmV3IEZsb2F0MzJBcnJheSgyKmkucG9pbnRzLmxlbmd0aCl9O2ZvcihsZXQgcj0wO3I8aS5wb2ludHMubGVuZ3RoO3IrKyl7bGV0W28sYV09dGhpcy5jb29yZGluYXRvci50cmFuc2Zvcm1EYXRhVG9VaUNvb3JkKHQsW2kucG9pbnRzW3JdLngsaS5wb2ludHNbcl0ueV0pO3RoaXMuc2VyaWVzW2VdLnBvbHlsaW5lWzIqcl09byx0aGlzLnNlcmllc1tlXS5wb2x5bGluZVsyKnIrMV09YX19dGhpcy5jb29yZGluYXRlSWRlbnRpZmllcj10aGlzLmNvb3JkaW5hdG9yLmdldFVwZGF0ZUlkZW50aWZpZXIoKSx0aGlzLm1hcmtBc1BhaW50RGlydHkoKX19LHVfPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5OVU1CRVI9MF09Ik5VTUJFUiIsbltuLk5BTj0xXT0iTkFOIn0odV98fCh1Xz17fSkpLHVfKSkoKSxvQT1jbGFzcyBleHRlbmRzIHJBe3JlY29yZFBhcnRpdGlvbih0LGUsaSl7cmV0dXJuIHQ/e3R5cGU6dV8uTlVNQkVSLHBvbHlsaW5lOmV9Ont0eXBlOnVfLk5BTixwb2x5bGluZTplLm1hcCgocixvKT0+aXNOYU4ocik/byUyPT0wP2kueDppLnk6cil9fXBhcnRpdGlvblBvbHlsaW5lKHQpe2xldCBlPVtdLGk9MCxyPSExLG89dGhpcy5jb29yZGluYXRvci50cmFuc2Zvcm1EYXRhVG9VaUNvb3JkKHRoaXMuZ2V0TGF5b3V0UmVjdCgpLFswLDBdKSxhPXt4Om9bMF0seTpvWzFdfSxzPW51bGw7Zm9yKGxldCBsPTA7bDx0Lmxlbmd0aDtsKz0yKXtsZXQgYz10W2xdLGQ9dFtsKzFdLHU9aXNOYU4oYyl8fGlzTmFOKGQpO3UhPT1yJiZpIT09bCYmKGUucHVzaCh0aGlzLnJlY29yZFBhcnRpdGlvbighcix0LnNsaWNlKGksbCksbnVsbD09PXM/e3g6Yyx5OmR9OnMpKSxpPWwpLHV8fChzPXt4OmMseTpkfSkscj11fXJldHVybiBpIT09dC5sZW5ndGgtMSYmZS5wdXNoKHRoaXMucmVjb3JkUGFydGl0aW9uKCFyLHQuc2xpY2UoaSx0Lmxlbmd0aCkscz8/YSkpLGV9cmVkcmF3KCl7Zm9yKGxldCB0IG9mIHRoaXMuc2VyaWVzKXtsZXQgaT10aGlzLmdldE1ldGFkYXRhTWFwKClbdC5pZF07aWYoIWkpY29udGludWU7aWYodC5wb2x5bGluZS5sZW5ndGglMiE9MCl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBoYXZlIG9kZCBsZW5ndGgtZWQgcG9seWxpbmU6ICR7dC5wb2x5bGluZS5sZW5ndGh9YCk7bGV0IHI9dGhpcy5wYXJ0aXRpb25Qb2x5bGluZSh0LnBvbHlsaW5lKTtmb3IobGV0W28se3R5cGU6YSxwb2x5bGluZTpzfV1vZiByLmVudHJpZXMoKSlpZihhPT09dV8uTlVNQkVSKTI9PT1zLmxlbmd0aD90aGlzLnBhaW50QnJ1c2guc2V0Q2lyY2xlKEpTT04uc3RyaW5naWZ5KFsiY2lyY2xlIix0LmlkLG9dKSx7eDpzWzBdLHk6c1sxXX0se2NvbG9yOmkuY29sb3IsdmlzaWJsZTppLnZpc2libGUsb3BhY2l0eTppLm9wYWNpdHk/PzEscmFkaXVzOjR9KTp0aGlzLnBhaW50QnJ1c2guc2V0TGluZShKU09OLnN0cmluZ2lmeShbImxpbmUiLHQuaWQsb10pLHMse2NvbG9yOmkuY29sb3IsdmlzaWJsZTppLnZpc2libGUsb3BhY2l0eTppLm9wYWNpdHk/PzEsd2lkdGg6Mn0pO2Vsc2UgaWYoIWkuYXV4KWZvcihsZXQgbD0wO2w8cy5sZW5ndGg7bCs9Mil0aGlzLnBhaW50QnJ1c2guc2V0VHJpYW5nbGUoSlNPTi5zdHJpbmdpZnkoWyJOYU4iLHQuaWQsc1tsXSxzW2wrMV1dKSx7eDpzW2xdLHk6c1tsKzFdfSx7Y29sb3I6aS5jb2xvcix2aXNpYmxlOmkudmlzaWJsZSxvcGFjaXR5Omkub3BhY2l0eT8/MSxzaXplOjEyfSl9fX0sYUE9Y2xhc3MgZXh0ZW5kcyBDMHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jYW1lcmE9bmV3IHhtKDAsMWUzLDFlMywwLDAsMTAwKX1pc1lBeGlzUG9pbnRlZERvd24oKXtyZXR1cm4hMX1zZXREb21Db250YWluZXJSZWN0KHQpe3N1cGVyLnNldERvbUNvbnRhaW5lclJlY3QodCksdGhpcy5jYW1lcmEubGVmdD10LngsdGhpcy5jYW1lcmEucmlnaHQ9dC54K3Qud2lkdGgsdGhpcy5jYW1lcmEudG9wPXQueSt0LmhlaWdodCx0aGlzLmNhbWVyYS5ib3R0b209dC55LHRoaXMuY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1nZXRDYW1lcmEoKXtyZXR1cm4gdGhpcy5jYW1lcmF9fSxzQT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXtzd2l0Y2godGhpcy5tZXRhZGF0YU1hcD17fSx0aGlzLnNob3VsZFJlcGFpbnQ9ITEsdGhpcy5jYWxsYmFja3M9dC5jYWxsYmFja3MsdC50eXBlKXtjYXNlIFlpLlNWRzp0aGlzLmNvb3JkaW5hdG9yPW5ldyBDMCx0aGlzLnJlbmRlcmVyPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnN2Zz10fWZsdXNoKCl7fW9uUmVzaXplKHQpe31kZXN0cm95T2JqZWN0KHQpe3RoaXMuc3ZnLnJlbW92ZUNoaWxkKHQuZG9tKX1zZXRVc2VEYXJrTW9kZSh0KXt9Y3JlYXRlUGF0aERTdHJpbmcodCl7aWYoIXQubGVuZ3RoKXJldHVybiIiO2xldCBlPW5ldyBBcnJheSh0Lmxlbmd0aC8yKTtlWzBdPWBNJHt0WzBdfSwke3RbMV19YDtmb3IobGV0IGk9MTtpPHQubGVuZ3RoLzI7aSsrKWVbaV09YEwke3RbMippXX0sJHt0WzIqaSsxXX1gO3JldHVybiBlLmpvaW4oIiIpfWNyZWF0ZU9yVXBkYXRlTGluZU9iamVjdCh0LGUsaSl7bGV0IHI9ekQodD8uZG9tLCgpPT57bGV0IG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInBhdGgiKTtvLnN0eWxlLmZpbGw9Im5vbmUiO2xldCBhPXRoaXMuY3JlYXRlUGF0aERTdHJpbmcoZSk7cmV0dXJuIG8uc2V0QXR0cmlidXRlKCJkIixhKSx0aGlzLnN2Zy5hcHBlbmRDaGlsZChvKSxvfSxvPT57aWYoIXQ/LmRhdGF8fCFqbF9hcmVQb2x5bGluZXNFcXVhbChlLHQ/LmRhdGEpKXtsZXQgYT10aGlzLmNyZWF0ZVBhdGhEU3RyaW5nKGUpO28uc2V0QXR0cmlidXRlKCJkIixhKX1yZXR1cm4gb30saSk7cmV0dXJuIG51bGw9PT1yP251bGw6KHIuc3R5bGUuc3Ryb2tlV2lkdGg9U3RyaW5nKGkud2lkdGgpLHtkb206cixkYXRhOmV9KX1jcmVhdGVPclVwZGF0ZVRyaWFuZ2xlT2JqZWN0KHQsZSxpKXtsZXR7c2l6ZTpyLGNvbG9yOm99PWksYT1yKk1hdGguc3FydCgzKS8yLHM9bmV3IEZsb2F0MzJBcnJheShbZS54LXIvMixlLnkrYS8zLGUueCtyLzIsZS55K2EvMyxlLngsZS55LTIqYS8zXSksbD16RCh0Py5kb20sKCk9PntsZXQgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicGF0aCIpO2MuY2xhc3NMaXN0LmFkZCgidHJpYW5nbGUiKSxjLnN0eWxlLmZpbGw9Im5vbmUiO2xldCBkPXRoaXMuY3JlYXRlUGF0aERTdHJpbmcocyk7cmV0dXJuIGMuc2V0QXR0cmlidXRlKCJkIixkKyJaIiksdGhpcy5zdmcuYXBwZW5kQ2hpbGQoYyksY30sYz0+e2xldCBkPXRoaXMuY3JlYXRlUGF0aERTdHJpbmcocyk7cmV0dXJuIGMuc2V0QXR0cmlidXRlKCJkIixkKyJaIiksY30saSk7cmV0dXJuIG51bGw9PT1sP251bGw6KGwuc3R5bGUuZmlsbD1vLHtkb206bCxkYXRhOnN9KX1jcmVhdGVPclVwZGF0ZUNpcmNsZU9iamVjdCh0LGUsaSl7bGV0e2NvbG9yOnIscmFkaXVzOm99PWksYT16RCh0Py5kb20sKCk9PntsZXQgcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiY2lyY2xlIik7cmV0dXJuIHMuc3R5bGUuZmlsbD1yLHMuc2V0QXR0cmlidXRlKCJjeCIsU3RyaW5nKGUueCkpLHMuc2V0QXR0cmlidXRlKCJjeSIsU3RyaW5nKGUueSkpLHMuc2V0QXR0cmlidXRlKCJyIixTdHJpbmcobykpLHRoaXMuc3ZnLmFwcGVuZENoaWxkKHMpLHN9LHM9PihzLnN0eWxlLmZpbGw9cixzLnNldEF0dHJpYnV0ZSgiY3giLFN0cmluZyhlLngpKSxzLnNldEF0dHJpYnV0ZSgiY3kiLFN0cmluZyhlLnkpKSxzLnNldEF0dHJpYnV0ZSgiciIsU3RyaW5nKG8pKSxzKSxpKTtyZXR1cm4gbnVsbD09PWE/bnVsbDp7ZG9tOmEsZGF0YTplfX1jcmVhdGVPclVwZGF0ZVRyYXBlem9pZE9iamVjdCh0LGUsaSxyKXtpZihlLnkhPT1pLnkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIklucHV0IGVycm9yOiBzdGFydC55ICE9IGVuZC55LiIpO2xldHthbHRpdHVkZTpvLGNvbG9yOmF9PXIscz0yL01hdGguc3FydCgzKSpvLGw9bmV3IEZsb2F0MzJBcnJheShbZS54LXMvMixlLnkrby8yLGUueCxlLnktby8yLGkueCxpLnktby8yLGkueCtzLzIsaS55K28vMl0pLGM9ekQodD8uZG9tLCgpPT57bGV0IGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInBhdGgiKTtkLmNsYXNzTGlzdC5hZGQoInRyYXBlem9pZCIpLGQuc3R5bGUuZmlsbD0ibm9uZSI7bGV0IHU9dGhpcy5jcmVhdGVQYXRoRFN0cmluZyhsKTtyZXR1cm4gZC5zZXRBdHRyaWJ1dGUoImQiLHUrIloiKSx0aGlzLnN2Zy5hcHBlbmRDaGlsZChkKSxkfSxkPT57bGV0IHU9dGhpcy5jcmVhdGVQYXRoRFN0cmluZyhsKTtyZXR1cm4gZC5zZXRBdHRyaWJ1dGUoImQiLHUrIloiKSxkfSxyKTtyZXR1cm4gbnVsbD09PWM/bnVsbDooYy5zdHlsZS5maWxsPWEse2RvbTpjLGRhdGE6bH0pfWRpc3Bvc2UoKXt9fSh0LmNvbnRhaW5lcik7YnJlYWs7Y2FzZSBZaS5XRUJHTDp7bGV0IGU9bmV3IGFBO3RoaXMuY29vcmRpbmF0b3I9ZSx0aGlzLnJlbmRlcmVyPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLmNvb3JkaW5hdG9yPWUsdGhpcy5zY2VuZT1uZXcgbl8sdGhpcy5iYWNrZ3JvdW5kQ29sb3I9IiNmZmYiLGpsX2lzV2ViR2wyT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKCkmJnQgaW5zdGFuY2VvZiBPZmZzY3JlZW5DYW52YXMmJih0LnN0eWxlPXQuc3R5bGV8fHt9KSxyJiZ0LmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLHIpLHRoaXMucmVuZGVyZXI9bmV3IFdpKHtjYW52YXM6dCxhbnRpYWxpYXM6ITAsYWxwaGE6ITB9KSx0aGlzLnJlbmRlcmVyLnNldFBpeGVsUmF0aW8oaSl9b25SZXNpemUodCl7dGhpcy5yZW5kZXJlci5zZXRTaXplKHQud2lkdGgsdC5oZWlnaHQpfWRlc3Ryb3lPYmplY3QodCl7bGV0IGU9dC5vYmozZDtpZih0aGlzLnNjZW5lLnJlbW92ZShlKSxlIGluc3RhbmNlb2Ygc28pe2UuZ2VvbWV0cnkuZGlzcG9zZSgpO2xldCBpPUFycmF5LmlzQXJyYXkoZS5tYXRlcmlhbCk/ZS5tYXRlcmlhbDpbZS5tYXRlcmlhbF07Zm9yKGxldCByIG9mIGkpci5kaXNwb3NlKCl9fXNldFVzZURhcmtNb2RlKHQpe3RoaXMuYmFja2dyb3VuZENvbG9yPXQ/IiMzMDMwMzAiOiIjZmZmIn1jcmVhdGVPclVwZGF0ZUxpbmVPYmplY3QodCxlLGkpe2lmKCF0JiYhaS52aXNpYmxlKXJldHVybiBudWxsO2xldHt2aXNpYmxlOnIsd2lkdGg6b309aTtpZighdCl7bGV0IGQ9bVYodGhpcy5iYWNrZ3JvdW5kQ29sb3IsaS5jb2xvcixpLm9wYWNpdHk/PzEpLHU9bmV3IEdpLHA9bmV3IEdkKHtjb2xvcjpkfSksaD1uZXcgc28odSxwKTtyZXR1cm4gcC52aXNpYmxlPXIsa3RlKHUsZSxvKSx0aGlzLnNjZW5lLmFkZChoKSx7dHlwZTpRbC5MSU5FLGRhdGE6ZSxvYmozZDpoLHdpZHRoOm99fWxldHtkYXRhOmEsb2JqM2Q6cyx3aWR0aDpsfT10O3JldHVybiBuQSh0aGlzLmJhY2tncm91bmRDb2xvcixzLGQ9PigobyE9PWx8fCFhfHwhamxfYXJlUG9seWxpbmVzRXF1YWwoYSxlKSkmJmt0ZShkLGUsbyksZCksaSk/e3R5cGU6UWwuTElORSxkYXRhOmUsb2JqM2Q6cyx3aWR0aDpvfTp0fWNyZWF0ZU1lc2godCxlKXtpZighZS52aXNpYmxlKXJldHVybiBudWxsO2xldHt2aXNpYmxlOmksY29sb3I6cixvcGFjaXR5Om99PWUsYT1tVih0aGlzLmJhY2tncm91bmRDb2xvcixyLG8/PzEpLHM9bmV3IHZtKHtjb2xvcjphLHZpc2libGU6aX0pO3JldHVybiBuZXcgc28odCxzKX1jcmVhdGVPclVwZGF0ZVRyaWFuZ2xlT2JqZWN0KHQsZSxpKXtsZXR7c2l6ZTpyfT1pLG89cipNYXRoLnNxcnQoMykvMixhPW5ldyBGbG9hdDMyQXJyYXkoW2UueC1yLzIsZS55LW8vMyxlLngrci8yLGUueS1vLzMsZS54LGUueSsyKm8vM10pO2lmKCF0KXtsZXQgbD1uZXcgR2k7UHRlKGwsYSk7bGV0IGM9dGhpcy5jcmVhdGVNZXNoKGwsaSk7cmV0dXJuIG51bGw9PT1jP251bGw6KHRoaXMuc2NlbmUuYWRkKGMpLHt0eXBlOlFsLlRSSUFOR0xFLGRhdGE6ZSxvYmozZDpjfSl9cmV0dXJuIG5BKHRoaXMuYmFja2dyb3VuZENvbG9yLHQub2JqM2QsbD0+KFB0ZShsLGEpLGwpLGkpP3t0eXBlOlFsLlRSSUFOR0xFLGRhdGE6ZSxvYmozZDp0Lm9iajNkfTp0fWNyZWF0ZU9yVXBkYXRlQ2lyY2xlT2JqZWN0KHQsZSxpKXtsZXR7cmFkaXVzOnJ9PWksbz1uZXcgaV8oaS5yYWRpdXMpO2lmKCF0KXtsZXQgcz10aGlzLmNyZWF0ZU1lc2gobyxpKTtyZXR1cm4gbnVsbD09PXM/bnVsbDoocy5wb3NpdGlvbi5zZXQoZS54LGUueSwwKSx0aGlzLnNjZW5lLmFkZChzKSx7dHlwZTpRbC5DSVJDTEUsZGF0YTp7bG9jOmUscmFkaXVzOnJ9LG9iajNkOnN9KX1yZXR1cm4gbkEodGhpcy5iYWNrZ3JvdW5kQ29sb3IsdC5vYmozZCwoKT0+byxpKT8odC5vYmozZC5wb3NpdGlvbi5zZXQoZS54LGUueSwwKSx7dHlwZTpRbC5DSVJDTEUsZGF0YTp7bG9jOmUscmFkaXVzOnJ9LG9iajNkOnQub2JqM2R9KTp0fWNyZWF0ZU9yVXBkYXRlVHJhcGV6b2lkT2JqZWN0KHQsZSxpLHIpe2lmKGUueSE9PWkueSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5wdXQgZXJyb3I6IHN0YXJ0LnkgIT0gZW5kLnkuIik7bGV0e2FsdGl0dWRlOm99PXIsYT0yL01hdGguc3FydCgzKSpvLHM9bmV3IFdkKFtuZXcgJGUoZS54LWEvMixlLnktby8yKSxuZXcgJGUoZS54LGUueStvLzIpLG5ldyAkZShpLngsaS55K28vMiksbmV3ICRlKGkueCthLzIsaS55LW8vMildKTtzLmF1dG9DbG9zZT0hMDtsZXQgbD1uZXcgd20ocyk7aWYoIXQpe2xldCBkPXRoaXMuY3JlYXRlTWVzaChsLHIpO3JldHVybiBudWxsPT09ZD9udWxsOih0aGlzLnNjZW5lLmFkZChkKSx7dHlwZTpRbC5UUkFQRVpPSUQsZGF0YTpbZSxpXSxvYmozZDpkfSl9cmV0dXJuIG5BKHRoaXMuYmFja2dyb3VuZENvbG9yLHQub2JqM2QsKCk9Pmwscik/e3R5cGU6UWwuVFJBUEVaT0lELGRhdGE6W2UsaV0sb2JqM2Q6dC5vYmozZH06dH1mbHVzaCgpe3RoaXMucmVuZGVyZXIucmVuZGVyKHRoaXMuc2NlbmUsdGhpcy5jb29yZGluYXRvci5nZXRDYW1lcmEoKSl9ZGlzcG9zZSgpe3RoaXMucmVuZGVyZXIuZGlzcG9zZSgpfX0odC5jb250YWluZXIsZSx0LmRldmljZVBpeGVsUmF0aW8sdC5jYWxsYmFja3Mub25Db250ZXh0TG9zdCk7YnJlYWt9fXRoaXMucmVuZGVyZXIuc2V0VXNlRGFya01vZGUodC51c2VEYXJrTW9kZSksdGhpcy5zZXJpZXNMaW5lVmlldz1uZXcgb0Eoe3JlbmRlcmVyOnRoaXMucmVuZGVyZXIsY29vcmRpbmF0b3I6dGhpcy5jb29yZGluYXRvcixnZXRNZXRhZGF0YU1hcDooKT0+dGhpcy5tZXRhZGF0YU1hcH0pLHRoaXMucmVzaXplKHQuZG9tRGltZW5zaW9uKX1kaXNwb3NlKCl7fXNldFhTY2FsZVR5cGUodCl7dGhpcy5jb29yZGluYXRvci5zZXRYU2NhbGUoVWwodCkpLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0WVNjYWxlVHlwZSh0KXt0aGlzLmNvb3JkaW5hdG9yLnNldFlTY2FsZShVbCh0KSksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1yZXNpemUodCl7dGhpcy5jb29yZGluYXRvci5zZXREb21Db250YWluZXJSZWN0KHt4OjAseTowLC4uLnR9KSx0aGlzLnJlbmRlcmVyLm9uUmVzaXplKHt4OjAseTowLC4uLnR9KSx0aGlzLnNlcmllc0xpbmVWaWV3LnNldExheW91dFJlY3Qoey4uLnQseDowLHk6MH0pLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0TWV0YWRhdGEodCl7bGV0IGU9ITE7T2JqZWN0LmVudHJpZXModCkuZm9yRWFjaCgoW2kscl0pPT57bGV0IG89dGhpcy5tZXRhZGF0YU1hcFtpXTsoIW98fHIuY29sb3IhPT1vLmNvbG9yfHxyLnZpc2libGUhPT1vLnZpc2libGV8fHIub3BhY2l0eSE9PW8ub3BhY2l0eSkmJihlPSEwKSx0aGlzLm1ldGFkYXRhTWFwW2ldPXJ9KSxlJiZ0aGlzLnNlcmllc0xpbmVWaWV3Lm1hcmtBc1BhaW50RGlydHkoKSx0aGlzLnNjaGVkdWxlUmVwYWludCgpfXNldFZpZXdCb3godCl7dGhpcy5jb29yZGluYXRvci5zZXRWaWV3Qm94UmVjdCh7eDp0LnhbMF0sd2lkdGg6dC54WzFdLXQueFswXSx5OnQueVswXSxoZWlnaHQ6dC55WzFdLXQueVswXX0pLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0RGF0YSh0KXt0aGlzLnNlcmllc0xpbmVWaWV3LnNldERhdGEodCksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1zZXRVc2VEYXJrTW9kZSh0KXt0aGlzLnJlbmRlcmVyLnNldFVzZURhcmtNb2RlKHQpLHRoaXMuc2VyaWVzTGluZVZpZXcubWFya0FzUGFpbnREaXJ0eSgpLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2NoZWR1bGVSZXBhaW50KCl7dGhpcy5zaG91bGRSZXBhaW50fHwodGhpcy5zaG91bGRSZXBhaW50PSEwLChuPT57c2VsZi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobil9KSgoKT0+e3RoaXMucmVwYWludCgpLHRoaXMuc2hvdWxkUmVwYWludD0hMX0pKX1yZXBhaW50KCl7dGhpcy5zZXJpZXNMaW5lVmlldy5yZW5kZXIoKSx0aGlzLnJlbmRlcmVyLmZsdXNoKCksdGhpcy5jYWxsYmFja3Mub25EcmF3RW5kKCl9fSxEcz0oKCk9PihmdW5jdGlvbihuKXtuW24uU0VSSUVTX0RBVEFfVVBEQVRFRD0wXT0iU0VSSUVTX0RBVEFfVVBEQVRFRCIsbltuLlNFUklFU19NRVRBREFUQV9DSEFOR0VEPTFdPSJTRVJJRVNfTUVUQURBVEFfQ0hBTkdFRCIsbltuLlNDQUxFX1VQREFURUQ9Ml09IlNDQUxFX1VQREFURUQiLG5bbi5WSUVXX0JPWF9VUERBVEVEPTNdPSJWSUVXX0JPWF9VUERBVEVEIixuW24uSU5JVD00XT0iSU5JVCIsbltuLkRPTV9SRVNJWkVEPTVdPSJET01fUkVTSVpFRCIsbltuLkRBUktfTU9ERV9VUERBVEVEPTZdPSJEQVJLX01PREVfVVBEQVRFRCIsbltuLkRJU1BPU0VEPTddPSJESVNQT1NFRCJ9KERzfHwoRHM9e30pKSxEcykpKCkscF89KCgpPT4oZnVuY3Rpb24obil7bltuLk9OX1JFRFJBV19FTkQ9MF09Ik9OX1JFRFJBV19FTkQiLG5bbi5PTl9DT05URVhUX0xPU1Q9MV09Ik9OX0NPTlRFWFRfTE9TVCJ9KHBffHwocF89e30pKSxwXykpKCk7ZnVuY3Rpb24gRnRlKG4pe2lmKG4uaW5jbHVkZXMoIi8iKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiV29ya2VyIGZhY3Rvcnkgb25seSBhbGxvd3MgZmlsZSBuYW1lIGFuZCBubyByZXNvdXJjZSBwYXRoLiIpO3JldHVybiBuZXcgV29ya2VyKG4pfXZhciBUbT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXtpZih0aGlzLmNhbGxiYWNrcz10LmNhbGxiYWNrcyx0LnR5cGUhPT1ZaS5XRUJHTCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgQ2Fubm90IHVzZSBub24gV0VCR0wgcmVuZGVyZXIgZm9yIHRoZSBvZmZzY3JlZW4gbGluZSBjaGFydC4gUmVjZWl2ZWQgJHtZaVt0LnR5cGVdfSBgKTtsZXQgZT1uZXcgTWVzc2FnZUNoYW5uZWw7ZS5wb3J0MS5vbm1lc3NhZ2U9bz0+e3RoaXMub25NZXNzYWdlRnJvbVdvcmtlcihvLmRhdGEpfSx0aGlzLnR4TWVzc2FnZVBvcnQ9ZS5wb3J0MTtsZXQgaT10LmNvbnRhaW5lci50cmFuc2ZlckNvbnRyb2xUb09mZnNjcmVlbigpO3RoaXMud29ya2VySW5zdGFuY2U9VG0ud29ya2VyUG9vbC5nZXROZXh0KCk7bGV0IHI9e3R5cGU6RHMuSU5JVCxjYW52YXM6aSxkZXZpY2VQaXhlbFJhdGlvOndpbmRvdy5kZXZpY2VQaXhlbFJhdGlvLGRpbTp0LmRvbURpbWVuc2lvbixyZW5kZXJlclR5cGU6dC50eXBlLHVzZURhcmtNb2RlOnQudXNlRGFya01vZGV9O3RoaXMud29ya2VySW5zdGFuY2UucG9zdE1lc3NhZ2UocixbaSxlLnBvcnQyXSl9ZGlzcG9zZSgpe3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6RHMuRElTUE9TRUR9KSx0aGlzLndvcmtlckluc3RhbmNlLmZyZWUoKSx0aGlzLnR4TWVzc2FnZVBvcnQuY2xvc2UoKX1zZXRYU2NhbGVUeXBlKHQpe3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6RHMuU0NBTEVfVVBEQVRFRCxheGlzOiJ4IixzY2FsZVR5cGU6dH0pfXNldFlTY2FsZVR5cGUodCl7dGhpcy5zZW5kTWVzc2FnZSh7dHlwZTpEcy5TQ0FMRV9VUERBVEVELGF4aXM6InkiLHNjYWxlVHlwZTp0fSl9cmVzaXplKHQpe3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6RHMuRE9NX1JFU0laRUQsZGltOnR9KX1zZXRNZXRhZGF0YSh0KXt0aGlzLnNlbmRNZXNzYWdlKHt0eXBlOkRzLlNFUklFU19NRVRBREFUQV9DSEFOR0VELG1ldGFkYXRhOnR9KX1zZXRWaWV3Qm94KHQpe3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6RHMuVklFV19CT1hfVVBEQVRFRCxleHRlbnQ6dH0pfXNldERhdGEodCl7bGV0IGU9ZnVuY3Rpb24obil7bGV0IHQ9bi5yZWR1Y2UoKG8sYSk9Pm8rYS5wb2ludHMubGVuZ3RoLDApLGU9MCxpPW5ldyBGbG9hdDY0QXJyYXkoMip0KSxyPVtdO2ZvcihsZXQgbyBvZiBuKXtyLnB1c2goe2lkOm8uaWQsbGVuZ3RoOm8ucG9pbnRzLmxlbmd0aH0pO2ZvcihsZXQgYT0wO2E8by5wb2ludHMubGVuZ3RoO2ErKylpW2UrK109by5wb2ludHNbYV0ueCxpW2UrK109by5wb2ludHNbYV0ueX1yZXR1cm57aWRzQW5kTGVuZ3RoczpyLGZsYXR0ZW5lZFNlcmllczppLmJ1ZmZlcn19KHQpO3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6RHMuU0VSSUVTX0RBVEFfVVBEQVRFRCxjb21wYWN0RGF0YVNlcmllczplfSxbZS5mbGF0dGVuZWRTZXJpZXNdKX1zZXRVc2VEYXJrTW9kZSh0KXt0aGlzLnNlbmRNZXNzYWdlKHt0eXBlOkRzLkRBUktfTU9ERV9VUERBVEVELHVzZURhcmtNb2RlOnR9KX1zZW5kTWVzc2FnZSh0LGUpe2U/dGhpcy50eE1lc3NhZ2VQb3J0LnBvc3RNZXNzYWdlKHQsZSk6dGhpcy50eE1lc3NhZ2VQb3J0LnBvc3RNZXNzYWdlKHQpfW9uTWVzc2FnZUZyb21Xb3JrZXIodCl7c3dpdGNoKHQudHlwZSl7Y2FzZSBwXy5PTl9SRURSQVdfRU5EOnRoaXMuY2FsbGJhY2tzLm9uRHJhd0VuZCgpO2JyZWFrO2Nhc2UgcF8uT05fQ09OVEVYVF9MT1NUOnRoaXMuY2FsbGJhY2tzLm9uQ29udGV4dExvc3QoKX19fTtmdW5jdGlvbiBYYyhuLHQpe3JldHVybiJ4Ij09PXQ/WzAsbi53aWR0aF06W24uaGVpZ2h0LDBdfWZ1bmN0aW9uIFl4KG4sdCl7bGV0IGU9TWF0aC5mbG9vcihuLzUwKTtyZXR1cm4gTWF0aC5taW4oZSx0KX1mdW5jdGlvbiBjQShuLHQsZSxpKXtyZXR1cm57bWFqb3I6W10sbWlub3I6bi50aWNrcyhpLGUpLm1hcChvPT4oe3ZhbHVlOm8sdGlja0Zvcm1hdHRlZFN0cmluZzp0LmZvcm1hdFRpY2sobyl9KSl9fVRtLndvcmtlclBvb2w9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZT0xMCxpPUZ0ZSl7dGhpcy53b3JrZXJSZXNvdXJjZVBhdGg9dCx0aGlzLm1heFBvb2xTaXplPWUsdGhpcy53b3JrZXJGYWN0b3J5PWksdGhpcy53b3JrZXJzPVtdfWdldE5leHQoKXtsZXQgdDtpZih0aGlzLndvcmtlcnMuZXZlcnkoKHthY3RpdmVDb3VudDppfSk9Pmk+MCkmJnRoaXMud29ya2Vycy5sZW5ndGg8dGhpcy5tYXhQb29sU2l6ZSl7bGV0IGk9dGhpcy53b3JrZXJGYWN0b3J5KHRoaXMud29ya2VyUmVzb3VyY2VQYXRoKTt0PXthY3RpdmVDb3VudDowLHBvc3RNZXNzYWdlOihyLG8pPT57aS5wb3N0TWVzc2FnZShyLG8pfSxmcmVlOigpPT57dC5hY3RpdmVDb3VudD1NYXRoLm1heCh0LmFjdGl2ZUNvdW50LTEsMCl9fSx0aGlzLndvcmtlcnMucHVzaCh0KX1lbHNle2xldCBpPXRoaXMud29ya2Vycy5tYXAoKHthY3RpdmVDb3VudDpvfSk9Pm8pLHI9aS5pbmRleE9mKE1hdGgubWluKC4uLmkpKTt0PXRoaXMud29ya2Vyc1tyXX1yZXR1cm4gdC5hY3RpdmVDb3VudCsrLHR9fSgiY2hhcnRfd29ya2VyLmpzP19maWxlX2hhc2g9MmMxZTcxYzUiKTt2YXIgZ1Y9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikuZ2V0Q29udGV4dCgiMmQiKTtmdW5jdGlvbiBWdGUobil7Zm9yKGxldCB0IG9mIG4paWYoU3RyaW5nKHQpLmluY2x1ZGVzKCJlIikpcmV0dXJuITA7cmV0dXJuITF9dmFyIFF4PXtnZXRTdGFuZGFyZFRpY2tzOmNBLGdldFRpY2tzRm9yVGVtcG9yYWxTY2FsZTpmdW5jdGlvbihuLHQsZSxpKXtsZXRbcixvXT1pLGE9bi50aWNrcyhpLDIpO2lmKG8tcj49ODY0ZTV8fGEubGVuZ3RoPjIpcmV0dXJuIGNBKG4sdCxlLGkpO2xldCBzPW4udGlja3MoaSxlKTtyZXR1cm57bWFqb3I6YS5tYXAobD0+KHtzdGFydDpsLHRpY2tGb3JtYXR0ZWRTdHJpbmc6dC5mb3JtYXRTaG9ydChsKX0pKSxtaW5vcjpzLm1hcChsPT4oe3ZhbHVlOmwsdGlja0Zvcm1hdHRlZFN0cmluZzp0LmZvcm1hdFRpY2sobCl9KSl9fSxnZXRUaWNrc0ZvckxpbmVhclNjYWxlOmZ1bmN0aW9uKG4sdCxlLGkpe2xldFtyLG9dPWksYT1NYXRoLmFicyhvLXIpO2lmKGE+LjAwMSlyZXR1cm4gY0Eobix0LGUsaSk7bGV0IHM9bi50aWNrcyhbcixvXSxlKSxsPW4udGlja3MoW3Isb10sMik7aWYoVnRlKHMpfHxWdGUobCkpcmV0dXJuIGNBKG4sdCxlLGkpO2xldCBjPVtdLGQ9ZnVuY3Rpb24obil7bGV0IHQ9bi50b0V4cG9uZW50aWFsKCkuc3BsaXQoImUtIiwyKTtyZXR1cm4gMj09PXQubGVuZ3RoP051bWJlcih0WzFdKS0xOjB9KGEpO2E8MSYmbC5ldmVyeShoPT57bGV0IG09TWF0aC5hYnMoaCk7cmV0dXJuIG0+PTAmJm08MX0pJiYoZCs9MSk7bGV0IHU9bmV3IE1hcDtmb3IobGV0IGggb2YgbCl7bGV0W20sXz0iIl09U3RyaW5nKGgpLnNwbGl0KCIuIiwyKSxNPU51bWJlcihtKyIuIitfLnNsaWNlKDAsZCkpO3Uuc2V0KE0se3N0YXJ0Ok0sdGlja0Zvcm1hdHRlZFN0cmluZzowPT09TT8iXHUyMDE0Ijp0LmZvcm1hdFJlYWRhYmxlKE0pfSl9bGV0IHA9MTAqTWF0aC5wb3coMTAsLWQpO2ZvcihsZXQgaCBvZiBzKWZvcihsZXQgbSBvZlsuLi51LmtleXMoKV0ucmV2ZXJzZSgpKXtsZXQgXz1oLW07aWYoXz49MCYmXzxwKXtpZigwPT09bSljLnB1c2goe3ZhbHVlOmgsdGlja0Zvcm1hdHRlZFN0cmluZzp0LmZvcm1hdFRpY2soaCl9KTtlbHNle2xldCBNPVN0cmluZyhoKS5zbGljZShTdHJpbmcobSkubGVuZ3RoKTtjLnB1c2goe3ZhbHVlOmgsdGlja0Zvcm1hdHRlZFN0cmluZzpgXHUyMDI2JHtNfHwiMCJ9YH0pfWJyZWFrfX1yZXR1cm57bWFqb3I6QXJyYXkuZnJvbSh1LnZhbHVlcygpKSxtaW5vcjpjfX0sZmlsdGVyVGlja3NCeVZpc2liaWxpdHk6ZnVuY3Rpb24obix0LGUsaSxyPTUpe2lmKCFuLmxlbmd0aHx8IWdWKXJldHVybiBuO2xldCBvPSJ4Ij09PWU/MTotMSxhPW51bGw7cmV0dXJuIG4uZmlsdGVyKHM9PntsZXQgbD10KHMpO2dWLmZvbnQ9aTtsZXQgYz1nVi5tZWFzdXJlVGV4dChzLnRpY2tGb3JtYXR0ZWRTdHJpbmcpLGQ9IngiPT09ZT9jLndpZHRoOmMuYWN0dWFsQm91bmRpbmdCb3hBc2NlbnQtYy5hY3R1YWxCb3VuZGluZ0JveERlc2NlbnQ7cmV0dXJuIG51bGw9PT1hPyEobCtvKmQ8MHx8KGE9bCtvKmQsMCkpOiEobyooYStvKnItbCk+MHx8KGE9bCtvKmQsMCkpfSl9fTtmdW5jdGlvbiBNTmUobix0KXtpZigxJm4mJihxbigpLGYoMCwiZyIsMTcpKDEsInRleHQiKSxUKDIpLGcoKSxmKDMsInRpdGxlIiksVCg0KSxnKCkoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXcoKTt2KDEpLEJ0KCJmb250IixpLmF4aXNGb250KSxCZSgieCIsaS50ZXh0WFBvc2l0aW9uKGUudmFsdWUpKSgieSIsaS50ZXh0WVBvc2l0aW9uKGUudmFsdWUpKSx2KDEpLFZlKCIgIixlLnRpY2tGb3JtYXR0ZWRTdHJpbmcsIiAiKSx2KDIpLGt0KGkuZ2V0Rm9ybWF0dGVyKCkuZm9ybWF0TG9uZyhlLnZhbHVlKSl9fWZ1bmN0aW9uIHdOZShuLHQpe2lmKDEmbiYmKGYoMCwic3BhbiIsMjApKDEsInNwYW4iKSxUKDIpLGcoKSgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dC5pbmRleCxyPXQubGFzdCxvPXcoMik7QnQoImxlZnQiLG8uZ2V0TWFqb3JYUG9zaXRpb24oZSksInB4IikoIndpZHRoIixvLmdldE1ham9yV2lkdGhTdHJpbmcoZSxyLG8ubWFqb3JUaWNrc1tpKzFdKSkoImJvdHRvbSIsby5nZXRNYWpvcllQb3NpdGlvbihlKSwicHgiKSgiaGVpZ2h0IixvLmdldE1ham9ySGVpZ2h0U3RyaW5nKGUscixvLm1ham9yVGlja3NbaSsxXSkpKCJmb250IixvLmF4aXNGb250KSxudCgibWFqb3ItbGFiZWwiLCEwKSgibGFzdCIsciksYigidGl0bGUiLG8uZ2V0Rm9ybWF0dGVyKCkuZm9ybWF0TG9uZyhlLnN0YXJ0KSksdigyKSxrdChlLnRpY2tGb3JtYXR0ZWRTdHJpbmcpfX1mdW5jdGlvbiBTTmUobix0KXtpZigxJm4mJihmKDAsImRpdiIsMTgpLFMoMSx3TmUsMywxNiwic3BhbiIsMTkpLGcoKSksMiZuKXtsZXQgZT13KCk7digxKSxiKCJuZ0Zvck9mIixlLm1ham9yVGlja3MpKCJuZ0ZvclRyYWNrQnkiLGUudHJhY2tCeU1ham9yVGljayl9fXZhciBIdGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMub25WaWV3RXh0ZW50Q2hhbmdlPW5ldyBGLHRoaXMuZWRpdE1lbnVPcGVuZWQ9ITEsdGhpcy5tYWpvclRpY2tzPVtdLHRoaXMubWlub3JUaWNrcz1bXX1uZ09uQ2hhbmdlcygpe2xldCBlPW51bGwscj1ZeCgieCI9PT10aGlzLmF4aXM/dGhpcy5kb21EaW0ud2lkdGg6dGhpcy5kb21EaW0uaGVpZ2h0LHRoaXMuZ3JpZENvdW50KTtlPXRoaXMuc2NhbGUgaW5zdGFuY2VvZiBueD9ReC5nZXRUaWNrc0ZvckxpbmVhclNjYWxlKHRoaXMuc2NhbGUsdGhpcy5nZXRGb3JtYXR0ZXIoKSxyLHRoaXMuYXhpc0V4dGVudCk6dGhpcy5zY2FsZSBpbnN0YW5jZW9mIGl4P1F4LmdldFRpY2tzRm9yVGVtcG9yYWxTY2FsZSh0aGlzLnNjYWxlLHRoaXMuZ2V0Rm9ybWF0dGVyKCkscix0aGlzLmF4aXNFeHRlbnQpOlF4LmdldFN0YW5kYXJkVGlja3ModGhpcy5zY2FsZSx0aGlzLmdldEZvcm1hdHRlcigpLHIsdGhpcy5heGlzRXh0ZW50KSx0aGlzLm1ham9yVGlja3M9ZS5tYWpvcix0aGlzLm1pbm9yVGlja3M9UXguZmlsdGVyVGlja3NCeVZpc2liaWxpdHkoZS5taW5vcixvPT50aGlzLmdldERvbVBvcyhvLnZhbHVlKSx0aGlzLmF4aXMsIjExcHggUm9ib3RvLCBzYW5zLXNlcmlmIil9Z2V0Rm9ybWF0dGVyKCl7cmV0dXJuIHRoaXMuY3VzdG9tRm9ybWF0dGVyPz90aGlzLnNjYWxlLmRlZmF1bHRGb3JtYXR0ZXJ9dHJhY2tCeU1pbm9yVGljayhlKXtyZXR1cm4gZS52YWx1ZX10cmFja0J5TWFqb3JUaWNrKGUpe3JldHVybiBlLnN0YXJ0fWdldERvbVBvcyhlKXtyZXR1cm4gdGhpcy5zY2FsZS5mb3J3YXJkKHRoaXMuYXhpc0V4dGVudCxYYyh0aGlzLmRvbURpbSx0aGlzLmF4aXMpLGUpfXRleHRYUG9zaXRpb24oZSl7cmV0dXJuIngiPT09dGhpcy5heGlzP1N0cmluZyh0aGlzLmdldERvbVBvcyhlKSk6IjEwMCUifXRleHRZUG9zaXRpb24oZSl7cmV0dXJuIngiPT09dGhpcy5heGlzPyIiOlN0cmluZyh0aGlzLmdldERvbVBvcyhlKSl9Z2V0TWFqb3JYUG9zaXRpb24oZSl7cmV0dXJuInkiPT09dGhpcy5heGlzPzA6TWF0aC5taW4odGhpcy5kb21EaW0ud2lkdGgsTWF0aC5tYXgoMCx0aGlzLmdldERvbVBvcyhlLnN0YXJ0KSkpfWdldE1ham9yV2lkdGhTdHJpbmcoZSxpLHIpe3JldHVybiJ5Ij09PXRoaXMuYXhpcz8iIjooaXx8IXI/dGhpcy5kb21EaW0ud2lkdGg6dGhpcy5nZXRNYWpvclhQb3NpdGlvbihyKSktdGhpcy5nZXRNYWpvclhQb3NpdGlvbihlKSsicHgifWdldE1ham9yWVBvc2l0aW9uKGUpe3JldHVybiJ4Ij09PXRoaXMuYXhpcz8wOnRoaXMuZG9tRGltLmhlaWdodC1NYXRoLm1pbih0aGlzLmRvbURpbS5oZWlnaHQsTWF0aC5tYXgoMCx0aGlzLmdldERvbVBvcyhlLnN0YXJ0KSkpfWdldE1ham9ySGVpZ2h0U3RyaW5nKGUsaSxyKXtyZXR1cm4ieCI9PT10aGlzLmF4aXM/IiI6KGl8fCFyP3RoaXMuZG9tRGltLmhlaWdodDp0aGlzLmdldE1ham9yWVBvc2l0aW9uKHIpKS10aGlzLmdldE1ham9yWVBvc2l0aW9uKGUpKyJweCJ9a2V5ZG93blByZXZlbnRDbG9zZShlKXsiRXNjYXBlIiE9PWUua2V5JiZlLnN0b3BQcm9wYWdhdGlvbigpfWV4dGVudENoYW5nZWQoZSxpKXtsZXQgcj1OdW1iZXIoZSksbz1OdW1iZXIoaSk7aWYobzxyKXtsZXQgYT1yO3I9byxvPWF9IU51bWJlci5pc0Zpbml0ZShyKXx8IU51bWJlci5pc0Zpbml0ZShvKXx8dGhpcy5vblZpZXdFeHRlbnRDaGFuZ2UuZW1pdChbcixvXSl9b25BeGlzVXBkYXRlTWVudU9wZW4oZSxpLHIpe2UudmFsdWU9U3RyaW5nKHJbMF0pLGkudmFsdWU9U3RyaW5nKHJbMV0pLGUuZm9jdXMoKX1zZXRFZGl0TWVudU9wZW5lZChlKXt0aGlzLmVkaXRNZW51T3BlbmVkPWV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbImxpbmUtY2hhcnQtYXhpcyJdXSxpbnB1dHM6e2F4aXNFeHRlbnQ6ImF4aXNFeHRlbnQiLGF4aXM6ImF4aXMiLHNjYWxlOiJzY2FsZSIsZ3JpZENvdW50OiJncmlkQ291bnQiLGRvbURpbToiZG9tRGltIixjdXN0b21Gb3JtYXR0ZXI6ImN1c3RvbUZvcm1hdHRlciJ9LG91dHB1dHM6e29uVmlld0V4dGVudENoYW5nZToib25WaWV3RXh0ZW50Q2hhbmdlIn0sZmVhdHVyZXM6W3F0XSxkZWNsczoyNix2YXJzOjExLGNvbnN0czpbWzEsImxpbmUiXSxbMSwibWlub3IiXSxbMSwidGlja3MiXSxbImNsYXNzIiwibWlub3ItdGljay1sYWJlbCIsNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJ0aXRsZSIsIkNsaWNrIHRvIG1hbnVhbGx5IHNldCBtaW4gJiBtYXggdmFsdWVzIiwxLCJleHRlbnQtZWRpdC1idXR0b24iLDMsIm1hdE1lbnVUcmlnZ2VyRm9yIiwibWVudU9wZW5lZCIsIm1lbnVDbG9zZWQiXSxbIm1hdE1lbnVUcmlnZ2VyIiwibWF0TWVudVRyaWdnZXIiXSxbInN2Z0ljb24iLCJlZGl0XzI0cHgiXSxbImNsYXNzIiwibWFqb3IgdGlja3MiLDQsIm5nSWYiXSxbInhQb3NpdGlvbiIsImJlZm9yZSIsMywieVBvc2l0aW9uIl0sWyJtYW51YWxDb250cm9sIiwibWF0TWVudSJdLFsxLCJleHRlbnQtZWRpdC1pbnB1dCIsMywiY2xpY2siLCJrZXlkb3duIl0sWyJ0eXBlIiwibnVtYmVyIiwzLCJ2YWx1ZSJdLFsibWluSW5wdXQiLCIiXSxbIm1heElucHV0IiwiIl0sWzEsImV4dGVudC1lZGl0LWNvbnRyb2wiLDMsImtleWRvd24iXSxbIm1hdC1yYWlzZWQtYnV0dG9uIiwiIiwiY29sb3IiLCJwcmltYXJ5IiwxLCJleHRlbnQtZWRpdC1jaGFuZ2UiLDMsImNsaWNrIl0sWyJtYXQtc3Ryb2tlZC1idXR0b24iLCIiLDEsImV4dGVudC1lZGl0LWNhbmNlbCIsMywiY2xpY2siXSxbMSwibWlub3ItdGljay1sYWJlbCJdLFsxLCJtYWpvciIsInRpY2tzIl0sWzMsIm1ham9yLWxhYmVsIiwibGFzdCIsImxlZnQiLCJ3aWR0aCIsImJvdHRvbSIsImhlaWdodCIsImZvbnQiLCJ0aXRsZSIsNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWzMsInRpdGxlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlKXtsZXQgcj1UZSgpO2YoMCwiZGl2IiksaygxLCJkaXYiLDApLGYoMiwiZGl2IiwxKSxxbigpLGYoMywic3ZnIiwyKSxTKDQsTU5lLDUsNiwiZyIsMyksZygpLHVhKCksZig1LCJidXR0b24iLDQsNSksQSgibWVudU9wZW5lZCIsZnVuY3Rpb24oKXtuZShyKTtsZXQgYT1zdCgxNSkscz1zdCgyMCk7cmV0dXJuIGkub25BeGlzVXBkYXRlTWVudU9wZW4oYSxzLGkuYXhpc0V4dGVudCksaWUoaS5zZXRFZGl0TWVudU9wZW5lZCghMCkpfSkoIm1lbnVDbG9zZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuc2V0RWRpdE1lbnVPcGVuZWQoITEpfSksayg3LCJtYXQtaWNvbiIsNiksZygpKCksUyg4LFNOZSwyLDIsImRpdiIsNyksZygpLGYoOSwibWF0LW1lbnUiLDgsOSkoMTEsImRpdiIsMTApLEEoImNsaWNrIixmdW5jdGlvbihhKXtyZXR1cm4gYS5zdG9wUHJvcGFnYXRpb24oKX0pKCJrZXlkb3duIixmdW5jdGlvbihhKXtyZXR1cm4gaS5rZXlkb3duUHJldmVudENsb3NlKGEpfSksZigxMiwibGFiZWwiKSxUKDEzLCJtaW4iKSxnKCksaygxNCwiaW5wdXQiLDExLDEyKSxnKCksZigxNiwiZGl2IiwxMCksQSgiY2xpY2siLGZ1bmN0aW9uKGEpe3JldHVybiBhLnN0b3BQcm9wYWdhdGlvbigpfSkoImtleWRvd24iLGZ1bmN0aW9uKGEpe3JldHVybiBpLmtleWRvd25QcmV2ZW50Q2xvc2UoYSl9KSxmKDE3LCJsYWJlbCIpLFQoMTgsIm1heCIpLGcoKSxrKDE5LCJpbnB1dCIsMTEsMTMpLGcoKSxmKDIxLCJkaXYiLDE0KSxBKCJrZXlkb3duIixmdW5jdGlvbihhKXtyZXR1cm4gaS5rZXlkb3duUHJldmVudENsb3NlKGEpfSksZigyMiwiYnV0dG9uIiwxNSksQSgiY2xpY2siLGZ1bmN0aW9uKCl7bmUocik7bGV0IGE9c3QoMTUpLHM9c3QoMjApLGw9c3QoNik7cmV0dXJuIGkuZXh0ZW50Q2hhbmdlZChhLnZhbHVlLHMudmFsdWUpLGllKGwuY2xvc2VNZW51KCkpfSksVCgyMywiIENoYW5nZSAiKSxnKCksZigyNCwiYnV0dG9uIiwxNiksQSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIG5lKHIpLGllKHN0KDYpLmNsb3NlTWVudSgpKX0pLFQoMjUsIiBDYW5jZWwgIiksZygpKCkoKX1pZigyJmUpe2xldCByPXN0KDEwKTtYbyhpLmF4aXMrIi1heGlzIGF4aXMiKSx2KDQpLGIoIm5nRm9yT2YiLGkubWlub3JUaWNrcykoIm5nRm9yVHJhY2tCeSIsaS50cmFja0J5TWlub3JUaWNrKSx2KDEpLG50KCJleHRlbnQtZWRpdC1tZW51LW9wZW5lZCIsaS5lZGl0TWVudU9wZW5lZCksYigibWF0TWVudVRyaWdnZXJGb3IiLHIpLHYoMyksYigibmdJZiIsaS5tYWpvclRpY2tzLmxlbmd0aCksdigxKSxiKCJ5UG9zaXRpb24iLCJ5Ij09PWkuYXhpcz8iYWJvdmUiOiJiZWxvdyIpLHYoNSksYigidmFsdWUiLGkuYXhpc0V4dGVudFswXSksdig1KSxiKCJ2YWx1ZSIsaS5heGlzRXh0ZW50WzFdKX19LGRlcGVuZGVuY2llczpbbm4sTmUsa2ksRXIsYm4sWHUsWXVdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17Y29udGFpbjpzdHJpY3Q7ZGlzcGxheTpmbGV4O292ZXJmbG93OmhpZGRlbn0ubWFqb3ItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCB0ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmaWxsOmN1cnJlbnRDb2xvcjtmb250LXNpemU6MTFweDt1c2VyLXNlbGVjdDpub25lfS5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAuZXh0ZW50LWVkaXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXstLXRiLWljb24td2lkdGg6IDE2cHg7LS10Yi1pY29uLWhlaWdodDogMTZweDtoZWlnaHQ6MjRweDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDo1cHg7dG9wOjVweDt2aXNpYmlsaXR5OmhpZGRlbjt3aWR0aDoyNHB4O3BhZGRpbmc6MH0ubWFqb3JbX25nY29udGVudC0lQ09NUCVdLCAubWlub3JbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MSAwO292ZXJmbG93OmhpZGRlbn0ubGluZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojYWFhO2ZsZXg6MCAwIDFweDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH0udGlja3NbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCV9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV17ZmxleC1kaXJlY3Rpb246Y29sdW1ufS54LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLmxpbmVbX25nY29udGVudC0lQ09NUCVde21hcmdpbi1ib3R0b206M3B4fS54LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgdGV4dFtfbmdjb250ZW50LSVDT01QJV17ZG9taW5hbnQtYmFzZWxpbmU6dGV4dC1iZWZvcmUtZWRnZTt0ZXh0LWFuY2hvcjptaWRkbGV9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAudGlja3NbX25nY29udGVudC0lQ09NUCVdey13ZWJraXQtbWFzay1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMCwgMCwgMCwgMCkgMCUsICMwMDAgMTAlLCAjMDAwIDkwJSwgcmdiYSgwLCAwLCAwLCAwKSAxMDAlKTttYXNrLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgwLCAwLCAwLCAwKSAwJSwgIzAwMCAxMCUsICMwMDAgOTAlLCByZ2JhKDAsIDAsIDAsIDApIDEwMCUpfS55LWF4aXNbX25nY29udGVudC0lQ09NUCVde2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlfS55LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLmxpbmVbX25nY29udGVudC0lQ09NUCVde21hcmdpbi1sZWZ0OjVweH0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRleHRbX25nY29udGVudC0lQ09NUCVde2RvbWluYW50LWJhc2VsaW5lOmNlbnRyYWw7dGV4dC1hbmNob3I6ZW5kfS55LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLnRpY2tzW19uZ2NvbnRlbnQtJUNPTVAlXXstd2Via2l0LW1hc2staW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgcmdiYSgwLCAwLCAwLCAwKSAwJSwgIzAwMCAxMCUsICMwMDAgOTAlLCByZ2JhKDAsIDAsIDAsIDApIDEwMCUpO21hc2staW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgcmdiYSgwLCAwLCAwLCAwKSAwJSwgIzAwMCAxMCUsICMwMDAgOTAlLCByZ2JhKDAsIDAsIDAsIDApIDEwMCUpfS5leHRlbnQtZWRpdC1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2NvbHVtbi1nYXA6NXB4O2Rpc3BsYXk6Z3JpZDtmb250LXNpemU6MTJweDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MzBweCBtaW5tYXgoYXV0bywgMTAwcHgpO2hlaWdodDozMHB4O21hcmdpbjoxMHB4IDIwcHh9LmV4dGVudC1lZGl0LWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXQ7Ym9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXN0eWxlOnNvbGlkO2NvbG9yOmluaGVyaXR9LmV4dGVudC1lZGl0LWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2U7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO21hcmdpbjoxMHB4IDIwcHh9LmV4dGVudC1lZGl0LWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtoZWlnaHQ6MzBweDtsaW5lLWhlaWdodDoxLjQ7bWFyZ2luLWxlZnQ6NXB4O3BhZGRpbmc6MCAxMHB4fS5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlciAgIC5leHRlbnQtZWRpdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAuYXhpc1tfbmdjb250ZW50LSVDT01QJV06Zm9jdXMtd2l0aGluICAgLmV4dGVudC1lZGl0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5leHRlbnQtZWRpdC1tZW51LW9wZW5lZFtfbmdjb250ZW50LSVDT01QJV17dmlzaWJpbGl0eTp2aXNpYmxlfS5tYWpvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVuO2NvbnRhaW46c3RyaWN0fS5tYWpvcltfbmdjb250ZW50LSVDT01QJV0gICAubWFqb3ItbGFiZWxbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjphYnNvbHV0ZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1ham9yW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYWpvci1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0gICBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXttYXgtd2lkdGg6MTAwJX0ueC1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYWpvci1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICM5ZTllOWU7cGFkZGluZzowIDVweH0ueC1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYWpvci1sYWJlbC5sYXN0W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICM5ZTllOWV9LnktYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAubWFqb3ItbGFiZWxbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM5ZTllOWU7aGVpZ2h0OjEwMCU7cGFkZGluZzo1cHggMDt3aWR0aDoxMDAlfS55LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLm1ham9yLWxhYmVsLmxhc3RbX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MXB4IHNvbGlkICM5ZTllOWV9LnktYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAubWFqb3ItbGFiZWxbX25nY29udGVudC0lQ09NUCVdID4gc3Bhbltfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnJvdGF0ZSgtOTBkZWcpO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gWngobix0KXtsZXQgZT1NYXRoLm1pbihMYyhuLm1hcCgoe3g6b30pPT5vKSx0KSxuLmxlbmd0aC0xKSxpPU1hdGgubWF4KDAsZS0xKTtyZXR1cm4gTWF0aC5hYnMobltpXS54LXQpLU1hdGguYWJzKG5bZV0ueC10KTw9MD9pOmV9ZnVuY3Rpb24genRlKG4sdCxlLGkscixvKXtsZXQgYTtzd2l0Y2gobi5kZWx0YU1vZGUpe2Nhc2UgV2hlZWxFdmVudC5ET01fREVMVEFfUElYRUw6YT0xO2JyZWFrO2Nhc2UgV2hlZWxFdmVudC5ET01fREVMVEFfTElORTphPTg7YnJlYWs7Y2FzZSBXaGVlbEV2ZW50LkRPTV9ERUxUQV9QQUdFOmE9MjA7YnJlYWs7ZGVmYXVsdDphPTEsY29uc29sZS53YXJuKGBVbmtub3duIFdoZWVsRXZlbnQgZGVsdGFNb2RlOiAke24uZGVsdGFNb2RlfS5gKX1sZXQgcz1uLmRlbHRhWSphLGw9czwwP01hdGgubWF4KHMqaSwtLjk1KTpzKmkse3dpZHRoOmMsaGVpZ2h0OmR9PWUsdT1bci5yZXZlcnNlKHQueCxbMCxjXSwtbi5vZmZzZXRYKmwpLHIucmV2ZXJzZSh0LngsWzAsY10sYysoYy1uLm9mZnNldFgpKmwpXSxwPVtvLnJldmVyc2UodC55LFtkLDBdLC1uLm9mZnNldFkqbCksby5yZXZlcnNlKHQueSxbZCwwXSxkKyhkLW4ub2Zmc2V0WSkqbCldO3JldHVybnt4OnVbMV08dVswXT9bdVsxXSx1WzBdXTp1LHk6cFsxXTxwWzBdP1twWzFdLHBbMF1dOnB9fXZhciBETmU9WyJkb3RzIl07ZnVuY3Rpb24gSU5lKG4sdCl7aWYoMSZuJiYocW4oKSxrKDAsImNpcmNsZSIsMTEpKSwyJm4pe2xldCBlPXcoKS4kaW1wbGljaXQsaT13KDIpO0JlKCJjeCIsaS5nZXREb21YKGUuZGF0YVBvaW50LngpKSgiY3kiLGkuZ2V0RG9tWShlLmRhdGFQb2ludC55KSkoImZpbGwiLGUubWV0YWRhdGEuY29sb3IpfX1mdW5jdGlvbiBBTmUobix0KXtpZigxJm4mJihxbigpLEd0KDApLFMoMSxJTmUsMSwzLCJjaXJjbGUiLDEwKSxXdCgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dygyKTt2KDEpLGIoIm5nSWYiLGkuc2hvdWxkUmVuZGVyVG9vbHRpcFBvaW50KGUuZGF0YVBvaW50KSl9fWZ1bmN0aW9uIFJOZShuLHQpe2lmKDEmbiYmKHFuKCksR3QoMCksUygxLEFOZSwyLDEsIm5nLWNvbnRhaW5lciIsOSksV3QoKSksMiZuKXtsZXQgZT13KCk7digxKSxiKCJuZ0Zvck9mIixlLmN1cnNvcmVkRGF0YSkoIm5nRm9yVHJhY2tCeSIsZS50cmFja0J5U2VyaWVzTmFtZSl9fWZ1bmN0aW9uIFBOZShuLHQpe2lmKDEmbiYmKHFuKCksaygwLCJyZWN0IiwxMikpLDImbil7bGV0IGU9dygpO0JlKCJ4IixlLnpvb21Cb3hJblVpQ29vcmRpbmF0ZS54KSgid2lkdGgiLGUuem9vbUJveEluVWlDb29yZGluYXRlLndpZHRoKSgieSIsZS56b29tQm94SW5VaUNvb3JkaW5hdGUueSkoImhlaWdodCIsZS56b29tQm94SW5VaUNvb3JkaW5hdGUuaGVpZ2h0KX19dmFyIGtOZT1mdW5jdGlvbihuLHQsZSl7cmV0dXJue2RhdGE6bixjdXJzb3JMb2NhdGlvbkluRGF0YUNvb3JkOnQsY3Vyc29yTG9jYXRpb246ZX19O2Z1bmN0aW9uIE9OZShuLHQpe2lmKDEmbiYmKGYoMCwiZGl2IiwxNCksaGkoMSwxNSksZygpKSwyJm4pe2xldCBlPXcoMiksaT1zdCgxMSk7digxKSxiKCJuZ1RlbXBsYXRlT3V0bGV0IixlLnRvb2x0aXBUZW1wbGF0ZT9lLnRvb2x0aXBUZW1wbGF0ZTppKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLHliKDIsa05lLGUuY3Vyc29yZWREYXRhLGUuY3Vyc29yTG9jYXRpb25JbkRhdGFDb29yZCxlLmN1cnNvckxvY2F0aW9uKSl9fWZ1bmN0aW9uIEZOZShuLHQpe2lmKDEmbil7bGV0IGU9VGUoKTtTKDAsT05lLDIsNiwibmctdGVtcGxhdGUiLDEzKSxBKCJkZXRhY2giLGZ1bmN0aW9uKCl7cmV0dXJuIG5lKGUpLGllKHcoKS5vblRvb2x0aXBEaXNwbGF5RGV0YWNoZWQoKSl9KX1pZigyJm4pe2xldCBlPXcoKTtiKCJjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luIixlLnRvb2x0aXBPcmlnaW5FbCkoImNka0Nvbm5lY3RlZE92ZXJsYXlPcGVuIixlLnRvb2x0aXBEaXNwbGF5QXR0YWNoZWQmJmUuc3RhdGUuZ2V0VmFsdWUoKT09PWUuSW50ZXJhY3Rpb25TdGF0ZS5OT05FKSgiY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9ucyIsZS50b29sdGlwUG9zaXRpb25zKSgiY2RrQ29ubmVjdGVkT3ZlcmxheVNjcm9sbFN0cmF0ZWd5IixlLnNjcm9sbFN0cmF0ZWd5KSgiY2RrQ29ubmVjdGVkT3ZlcmxheUxvY2tQb3NpdGlvbiIsITEpKCJjZGtDb25uZWN0ZWRPdmVybGF5RmxleGlibGVEaW1lbnNpb25zIiwhMCkoImNka0Nvbm5lY3RlZE92ZXJsYXlHcm93QWZ0ZXJPcGVuIiwhMCl9fWZ1bmN0aW9uIE5OZShuLHQpe2lmKDEmbiYmKEd0KDApLGYoMSwidHIiLDE3KSgyLCJ0ZCIsMTgpLGsoMywic3BhbiIpLGcoKSxmKDQsInRkIiwxOSksVCg1KSxnKCksZig2LCJ0ZCIpLFQoNyksZygpLGYoOCwidGQiKSxUKDkpLGcoKSgpLFd0KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQ7digzKSxCdCgiYmFja2dyb3VuZC1jb2xvciIsZS5tZXRhZGF0YS5jb2xvciksdigyKSxrdChlLm1ldGFkYXRhLmRpc3BsYXlOYW1lKSx2KDIpLGt0KGUuZGF0YVBvaW50LnkpLHYoMiksa3QoZS5kYXRhUG9pbnQueCl9fWZ1bmN0aW9uIExOZShuLHQpe2lmKDEmbiYmKGYoMCwidGFibGUiKSgxLCJ0aGVhZCIpKDIsInRyIiksaygzLCJ0aCIsMTYpLGYoNCwidGgiKSxUKDUsIk5hbWUiKSxnKCksZig2LCJ0aCIpLFQoNywiWSIpLGcoKSxmKDgsInRoIiksVCg5LCJYIiksZygpKCkoKSxmKDEwLCJ0Ym9keSIpLFMoMTEsTk5lLDEwLDUsIm5nLWNvbnRhaW5lciIsOSksZygpKCkpLDImbil7bGV0IGU9dC5kYXRhLGk9dygpO3YoMTEpLGIoIm5nRm9yT2YiLGUpKCJuZ0ZvclRyYWNrQnkiLGkudHJhY2tCeVNlcmllc05hbWUpfX1mdW5jdGlvbiBWTmUobil7cmV0dXJuIG4uc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCl9dmFyIFV0ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5jaGFuZ2VEZXRlY3Rvcj1lLHRoaXMuc2Nyb2xsU3RyYXRlZ3k9aSx0aGlzLm9uVmlld0V4dGVudENoYW5nZT1uZXcgRix0aGlzLm9uVmlld0V4dGVudFJlc2V0PW5ldyBGLHRoaXMub25JbnRlcmFjdGlvblN0YXRlQ2hhbmdlPW5ldyBGLHRoaXMuSW50ZXJhY3Rpb25TdGF0ZT1Ucix0aGlzLnN0YXRlPW5ldyB4cihUci5OT05FKSx0aGlzLnNwZWNpYWxLZXlQcmVzc2VkPSExLHRoaXMuem9vbUJveEluVWlDb29yZGluYXRlPXt4OjAsd2lkdGg6MCxoZWlnaHQ6MCx5OjB9LHRoaXMudG9vbHRpcFBvc2l0aW9ucz1be29mZnNldFk6NSxvcmlnaW5YOiJzdGFydCIsb3ZlcmxheVg6InN0YXJ0IixvcmlnaW5ZOiJib3R0b20iLG92ZXJsYXlZOiJ0b3AifSx7b2Zmc2V0WTo1LG9yaWdpblg6ImVuZCIsb3ZlcmxheVg6ImVuZCIsb3JpZ2luWToiYm90dG9tIixvdmVybGF5WToidG9wIn0se29mZnNldFk6LTE1LG9yaWdpblg6InN0YXJ0IixvdmVybGF5WDoic3RhcnQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVk6ImJvdHRvbSJ9LHtvZmZzZXRZOi0xNSxvcmlnaW5YOiJlbmQiLG92ZXJsYXlYOiJlbmQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVk6ImJvdHRvbSJ9LHtvZmZzZXRYOjUsb3JpZ2luWDoiZW5kIixvdmVybGF5WDoic3RhcnQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVk6InRvcCJ9LHtvZmZzZXRYOi01LG9yaWdpblg6InN0YXJ0IixvdmVybGF5WDoiZW5kIixvcmlnaW5ZOiJ0b3AiLG92ZXJsYXlZOiJ0b3AifV0sdGhpcy5jdXJzb3JMb2NhdGlvbkluRGF0YUNvb3JkPW51bGwsdGhpcy5jdXJzb3JMb2NhdGlvbj1udWxsLHRoaXMuY3Vyc29yZWREYXRhPVtdLHRoaXMudG9vbHRpcERpc3BsYXlBdHRhY2hlZD0hMSx0aGlzLnNob3dab29tSW5zdHJ1Y3Rpb249ITEsdGhpcy5kcmFnU3RhcnRDb29yZD1udWxsLHRoaXMuaXNDdXJzb3JJbnNpZGU9ITEsdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBFZSx0aGlzLnN1YnNjcmlwdGlvbnM9W119bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5zdGF0ZS5zdWJzY3JpYmUoZT0+e3RoaXMub25JbnRlcmFjdGlvblN0YXRlQ2hhbmdlLmVtaXQoZSl9KSksdGhpcy5uZ1Vuc3Vic2NyaWJlLnBpcGUocSgoKT0+e3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGU9PmUudW5zdWJzY3JpYmUoKSl9KSksRWkodGhpcy5kb3RzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsImRibGNsaWNrIix7cGFzc2l2ZTohMH0pLnBpcGUoaXQodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5vblZpZXdFeHRlbnRSZXNldC5lbWl0KCksdGhpcy5zdGF0ZS5uZXh0KFRyLk5PTkUpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCl9KSxFaSh3aW5kb3csImtleWRvd24iLHtwYXNzaXZlOiEwfSkucGlwZShpdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoZT0+e2xldCBpPXRoaXMuc2hvdWxkUGFuKGUpO2khPT10aGlzLnNwZWNpYWxLZXlQcmVzc2VkJiYodGhpcy5zcGVjaWFsS2V5UHJlc3NlZD1pLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCkpfSksRWkod2luZG93LCJrZXl1cCIse3Bhc3NpdmU6ITB9KS5waXBlKGl0KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShlPT57bGV0IGk9dGhpcy5zaG91bGRQYW4oZSk7aSE9PXRoaXMuc3BlY2lhbEtleVByZXNzZWQmJih0aGlzLnNwZWNpYWxLZXlQcmVzc2VkPWksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSl9KSxFaSh0aGlzLmRvdHNDb250YWluZXIubmF0aXZlRWxlbWVudCwibW91c2Vkb3duIix7cGFzc2l2ZTohMH0pLnBpcGUoaXQodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKGU9PntsZXQgaT10aGlzLnN0YXRlLmdldFZhbHVlKCkscj10aGlzLnNob3VsZFBhbihlKT9Uci5QQU5OSU5HOlRyLkRSQUdfWk9PTUlORztpPT09VHIuTk9ORSYmcj09PVRyLkRSQUdfWk9PTUlORyYmKHRoaXMuZHJhZ1N0YXJ0Q29vcmQ9e3g6ZS5vZmZzZXRYLHk6ZS5vZmZzZXRZfSx0aGlzLnpvb21Cb3hJblVpQ29vcmRpbmF0ZT17eDplLm9mZnNldFgsd2lkdGg6MCx5OmUub2Zmc2V0WSxoZWlnaHQ6MH0pLGkhPT1yJiYodGhpcy5zdGF0ZS5uZXh0KHIpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCkpfSksRWkodGhpcy5kb3RzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIm1vdXNldXAiLHtwYXNzaXZlOiEwfSkucGlwZShpdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoZT0+e2xldCBpPShlLmJ1dHRvbnMmQ3MuTEVGVCk9PT1Dcy5MRUZUO3RoaXMuZHJhZ1N0YXJ0Q29vcmQ9bnVsbDtsZXQgcj10aGlzLnpvb21Cb3hJblVpQ29vcmRpbmF0ZTtpZighaSYmdGhpcy5zdGF0ZS5nZXRWYWx1ZSgpPT09VHIuRFJBR19aT09NSU5HJiZyLndpZHRoPjAmJnIuaGVpZ2h0PjApe2xldCBvPXRoaXMuZ2V0RGF0YVgoci54KSxhPXRoaXMuZ2V0RGF0YVgoci54K3Iud2lkdGgpLHM9dGhpcy5nZXREYXRhWShyLnkrci5oZWlnaHQpLGw9dGhpcy5nZXREYXRhWShyLnkpO3RoaXMub25WaWV3RXh0ZW50Q2hhbmdlLmVtaXQoe2RhdGFFeHRlbnQ6e3g6W28sYV0seTpbcyxsXX19KX10aGlzLnN0YXRlLmdldFZhbHVlKCkhPT1Uci5OT05FJiYodGhpcy5zdGF0ZS5uZXh0KFRyLk5PTkUpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCkpfSksRWkodGhpcy5kb3RzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIm1vdXNlZW50ZXIiLHtwYXNzaXZlOiEwfSkucGlwZShpdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoZT0+e3RoaXMuaXNDdXJzb3JJbnNpZGU9ITAsdGhpcy51cGRhdGVUb29sdGlwKGUpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCl9KSxFaSh0aGlzLmRvdHNDb250YWluZXIubmF0aXZlRWxlbWVudCwibW91c2VsZWF2ZSIse3Bhc3NpdmU6ITB9KS5waXBlKGl0KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShlPT57dGhpcy5kcmFnU3RhcnRDb29yZD1udWxsLHRoaXMuaXNDdXJzb3JJbnNpZGU9ITEsdGhpcy51cGRhdGVUb29sdGlwKGUpLHRoaXMuc3RhdGUubmV4dChUci5OT05FKSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpfSksRWkodGhpcy5kb3RzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIm1vdXNlbW92ZSIse3Bhc3NpdmU6ITB9KS5waXBlKGl0KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShlPT57c3dpdGNoKHRoaXMuc3RhdGUuZ2V0VmFsdWUoKSl7Y2FzZSBUci5TQ1JPTExfWk9PTUlORzp0aGlzLnN0YXRlLm5leHQoVHIuTk9ORSksdGhpcy51cGRhdGVUb29sdGlwKGUpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7YnJlYWs7Y2FzZSBUci5OT05FOnRoaXMudXBkYXRlVG9vbHRpcChlKSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO2JyZWFrO2Nhc2UgVHIuUEFOTklORzp7bGV0IGk9LWUubW92ZW1lbnRYLHI9LWUubW92ZW1lbnRZLHt3aWR0aDpvLGhlaWdodDphfT10aGlzLmRvbURpbSxzPXRoaXMuZ2V0RGF0YVgoaSksbD10aGlzLmdldERhdGFYKG8raSksYz10aGlzLmdldERhdGFZKGErciksZD10aGlzLmdldERhdGFZKHIpO3RoaXMub25WaWV3RXh0ZW50Q2hhbmdlLmVtaXQoe2RhdGFFeHRlbnQ6e3g6W3MsbF0seTpbYyxkXX19KTticmVha31jYXNlIFRyLkRSQUdfWk9PTUlORzp7aWYoIXRoaXMuZHJhZ1N0YXJ0Q29vcmQpYnJlYWs7bGV0IGk9W3RoaXMuZHJhZ1N0YXJ0Q29vcmQueCxlLm9mZnNldFhdLHI9W3RoaXMuZHJhZ1N0YXJ0Q29vcmQueSxlLm9mZnNldFldO3RoaXMuem9vbUJveEluVWlDb29yZGluYXRlPXt4Ok1hdGgubWluKC4uLmkpLHdpZHRoOk1hdGgubWF4KC4uLmkpLU1hdGgubWluKC4uLmkpLHk6TWF0aC5taW4oLi4uciksaGVpZ2h0Ok1hdGgubWF4KC4uLnIpLU1hdGgubWluKC4uLnIpfX10aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpfX0pLEVpKHRoaXMuZG90c0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LCJ3aGVlbCIse3Bhc3NpdmU6ITF9KS5waXBlKGl0KHRoaXMubmdVbnN1YnNjcmliZSksSm4oZT0+e2xldCBpPSFlLmN0cmxLZXkmJiFlLnNoaWZ0S2V5JiZlLmFsdEtleTtyZXR1cm4gdGhpcy5zaG93Wm9vbUluc3RydWN0aW9uPSFpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCksaT8oZS5wcmV2ZW50RGVmYXVsdCgpLCR0KGUpKTpycygzZTMpLnBpcGUoRHQoKCk9Pnt0aGlzLnNob3dab29tSW5zdHJ1Y3Rpb249ITEsdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKX0pLHEoKCk9Pm51bGwpKX0pLE9lKGU9PkJvb2xlYW4oZSkpKS5zdWJzY3JpYmUoZT0+e3RoaXMub25WaWV3RXh0ZW50Q2hhbmdlLmVtaXQoe2RhdGFFeHRlbnQ6enRlKGUsdGhpcy52aWV3RXh0ZW50LHRoaXMuZG9tRGltLC4wMSx0aGlzLnhTY2FsZSx0aGlzLnlTY2FsZSl9KSx0aGlzLnN0YXRlLmdldFZhbHVlKCkhPT1Uci5TQ1JPTExfWk9PTUlORyYmKHRoaXMuc3RhdGUubmV4dChUci5TQ1JPTExfWk9PTUlORyksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSl9KX1uZ09uQ2hhbmdlcygpe3RoaXMudXBkYXRlQ3Vyc29yZWREYXRhQW5kVG9vbHRpcFZpc2liaWxpdHkoKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9c2hvdWxkUGFuKGUpe2xldCBpPWUuc2hpZnRLZXl8fGUuYWx0S2V5O2lmKGUgaW5zdGFuY2VvZiBLZXlib2FyZEV2ZW50KXJldHVybiBpO2xldCByPShlLmJ1dHRvbnMmQ3MuTEVGVCk9PT1Dcy5MRUZULG89KGUuYnV0dG9ucyZDcy5NSURETEUpPT09Q3MuTUlERExFO3JldHVybiEoIXImJiFvKSYmKG8mJiFyfHxpKX10cmFja0J5U2VyaWVzTmFtZShlLGkpe3JldHVybiBpLmlkfWdldERvbVgoZSl7cmV0dXJuIHRoaXMueFNjYWxlLmZvcndhcmQodGhpcy52aWV3RXh0ZW50LngsWGModGhpcy5kb21EaW0sIngiKSxlKX1nZXREYXRhWChlKXtyZXR1cm4gdGhpcy54U2NhbGUucmV2ZXJzZSh0aGlzLnZpZXdFeHRlbnQueCxYYyh0aGlzLmRvbURpbSwieCIpLGUpfWdldERvbVkoZSl7cmV0dXJuIHRoaXMueVNjYWxlLmZvcndhcmQodGhpcy52aWV3RXh0ZW50LnksWGModGhpcy5kb21EaW0sInkiKSxlKX1nZXREYXRhWShlKXtyZXR1cm4gdGhpcy55U2NhbGUucmV2ZXJzZSh0aGlzLnZpZXdFeHRlbnQueSxYYyh0aGlzLmRvbURpbSwieSIpLGUpfXNob3VsZFJlbmRlclRvb2x0aXBQb2ludChlKXtyZXR1cm4gbnVsbCE9PWUmJiFpc05hTihlLngpJiYhaXNOYU4oZS55KX11cGRhdGVUb29sdGlwKGUpe3RoaXMuY3Vyc29yTG9jYXRpb25JbkRhdGFDb29yZD17eDp0aGlzLmdldERhdGFYKGUub2Zmc2V0WCkseTp0aGlzLmdldERhdGFZKGUub2Zmc2V0WSl9LHRoaXMuY3Vyc29yTG9jYXRpb249e3g6ZS5vZmZzZXRYLHk6ZS5vZmZzZXRZfSx0aGlzLnVwZGF0ZUN1cnNvcmVkRGF0YUFuZFRvb2x0aXBWaXNpYmlsaXR5KCl9b25Ub29sdGlwRGlzcGxheURldGFjaGVkKCl7dGhpcy50b29sdGlwRGlzcGxheUF0dGFjaGVkPSExfXVwZGF0ZUN1cnNvcmVkRGF0YUFuZFRvb2x0aXBWaXNpYmlsaXR5KCl7bGV0IGU9dGhpcy5jdXJzb3JMb2NhdGlvbkluRGF0YUNvb3JkO2lmKG51bGw9PT1lKXJldHVybiB0aGlzLmN1cnNvcmVkRGF0YT1bXSx2b2lkKHRoaXMudG9vbHRpcERpc3BsYXlBdHRhY2hlZD0hMSk7dGhpcy5jdXJzb3JlZERhdGE9dGhpcy5pc0N1cnNvckluc2lkZT90aGlzLnNlcmllc0RhdGEubWFwKGk9Pih7c2VyaWVzRGF0dW06aSxtZXRhZGF0YTp0aGlzLnNlcmllc01ldGFkYXRhTWFwW2kuaWRdfSkpLmZpbHRlcigoe21ldGFkYXRhOml9KT0+aSYmaS52aXNpYmxlJiYhQm9vbGVhbihpLmF1eCkpLm1hcCgoe3Nlcmllc0RhdHVtOmksbWV0YWRhdGE6cn0pPT57bGV0IG89WngoaS5wb2ludHMsZS54KSxhPWkucG9pbnRzW29dO3JldHVybntpZDppLmlkLGNsb3Nlc3RQb2ludEluZGV4Om8sZGF0YVBvaW50OmEsZG9tUG9pbnQ6e3g6dGhpcy5nZXREb21YKGEueCkseTp0aGlzLmdldERvbVkoYS55KX0sbWV0YWRhdGE6cn19KS5maWx0ZXIoaT0+aSk6W10sdGhpcy50b29sdGlwRGlzcGxheUF0dGFjaGVkPUJvb2xlYW4odGhpcy5jdXJzb3JlZERhdGEubGVuZ3RoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhRdCksQyhJaCkpfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbImxpbmUtY2hhcnQtaW50ZXJhY3RpdmUtdmlldyJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihVZShETmUsNyx4ZSksVWUoVnUsNSkpLDImZSl7bGV0IHI7YmUocj12ZSgpKSYmKGkuZG90c0NvbnRhaW5lcj1yLmZpcnN0KSxiZShyPXZlKCkpJiYoaS5vdmVybGF5PXIuZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJm50KCJzaG93LXpvb20taW5zdHJ1Y3Rpb24iLGkuc2hvd1pvb21JbnN0cnVjdGlvbil9LGlucHV0czp7c2VyaWVzRGF0YToic2VyaWVzRGF0YSIsc2VyaWVzTWV0YWRhdGFNYXA6InNlcmllc01ldGFkYXRhTWFwIix2aWV3RXh0ZW50OiJ2aWV3RXh0ZW50Iix4U2NhbGU6InhTY2FsZSIseVNjYWxlOiJ5U2NhbGUiLGRvbURpbToiZG9tRGltIix0b29sdGlwT3JpZ2luRWw6InRvb2x0aXBPcmlnaW5FbCIsdG9vbHRpcFRlbXBsYXRlOiJ0b29sdGlwVGVtcGxhdGUiLGRpc2FibGVUb29sdGlwOiJkaXNhYmxlVG9vbHRpcCJ9LG91dHB1dHM6e29uVmlld0V4dGVudENoYW5nZToib25WaWV3RXh0ZW50Q2hhbmdlIixvblZpZXdFeHRlbnRSZXNldDoib25WaWV3RXh0ZW50UmVzZXQiLG9uSW50ZXJhY3Rpb25TdGF0ZUNoYW5nZToib25JbnRlcmFjdGlvblN0YXRlQ2hhbmdlIn0sZmVhdHVyZXM6W1Z0KFt7cHJvdmlkZTpJaCx1c2VGYWN0b3J5OlZOZSxkZXBzOltPaV19XSkscXRdLGRlY2xzOjEyLHZhcnM6OSxjb25zdHM6W1sxLCJkb3RzIl0sWyJkb3RzIiwiIl0sWzQsIm5nSWYiXSxbImNsYXNzIiwiem9vbS1ib3giLDQsIm5nSWYiXSxbMSwiem9vbS1pbnN0cnVjdGlvbiJdLFsxLCJpbnN0cnVjdGlvbi1jb250ZW50Il0sWyJjZGtPdmVybGF5T3JpZ2luIiwiIiwxLCJ0b29sdGlwLW9yaWdpbiJdLFsidG9vbHRpcE9yaWdpbiIsImNka092ZXJsYXlPcmlnaW4iXSxbImRlZmF1bHRUb29sdGlwIiwiIl0sWzQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsiciIsIjQiLDQsIm5nSWYiXSxbInIiLCI0Il0sWzEsInpvb20tYm94Il0sWyJjZGtDb25uZWN0ZWRPdmVybGF5IiwiIiwzLCJjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luIiwiY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW4iLCJjZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25zIiwiY2RrQ29ubmVjdGVkT3ZlcmxheVNjcm9sbFN0cmF0ZWd5IiwiY2RrQ29ubmVjdGVkT3ZlcmxheUxvY2tQb3NpdGlvbiIsImNka0Nvbm5lY3RlZE92ZXJsYXlGbGV4aWJsZURpbWVuc2lvbnMiLCJjZGtDb25uZWN0ZWRPdmVybGF5R3Jvd0FmdGVyT3BlbiIsImRldGFjaCJdLFsxLCJ0b29sdGlwLWNvbnRhaW5lciJdLFszLCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldENvbnRleHQiXSxbMSwiY2lyY2xlLWhlYWRlciJdLFsxLCJ0b29sdGlwLXJvdyJdLFsxLCJ0b29sdGlwLXJvdy1jaXJjbGUiXSxbMSwibmFtZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKHFuKCksZigwLCJzdmciLDAsMSksUygyLFJOZSwyLDIsIm5nLWNvbnRhaW5lciIsMiksUygzLFBOZSwxLDQsInJlY3QiLDMpLGcoKSx1YSgpLGYoNCwiZGl2Iiw0KSg1LCJzcGFuIiw1KSxUKDYsIkFsdCArIFNjcm9sbCB0byBab29tIiksZygpKCksayg3LCJkaXYiLDYsNyksUyg5LEZOZSwxLDcsbnVsbCwyKSxTKDEwLExOZSwxMiwyLCJuZy10ZW1wbGF0ZSIsbnVsbCw4LGp0KSksMiZlJiYobnQoInBhbm5hYmxlIixpLnNwZWNpYWxLZXlQcmVzc2VkKSgiZHJhZ2dhYmxlIixpLnN0YXRlLmdldFZhbHVlKCk9PT1pLkludGVyYWN0aW9uU3RhdGUuTk9ORXx8aS5zdGF0ZS5nZXRWYWx1ZSgpPT09aS5JbnRlcmFjdGlvblN0YXRlLkRSQUdfWk9PTUlORykoInBhbm5pbmciLGkuc3RhdGUuZ2V0VmFsdWUoKT09PWkuSW50ZXJhY3Rpb25TdGF0ZS5QQU5OSU5HKSx2KDIpLGIoIm5nSWYiLGkuc3RhdGUuZ2V0VmFsdWUoKT09PWkuSW50ZXJhY3Rpb25TdGF0ZS5OT05FKSx2KDEpLGIoIm5nSWYiLGkuc3RhdGUuZ2V0VmFsdWUoKT09PWkuSW50ZXJhY3Rpb25TdGF0ZS5EUkFHX1pPT01JTkcpLHYoNiksYigibmdJZiIsIWkuZGlzYWJsZVRvb2x0aXApKX0sZGVwZW5kZW5jaWVzOltubixOZSxlbyxWdSxNZF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246cmVsYXRpdmU7dXNlci1zZWxlY3Q6bm9uZX0uZG90c1tfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uZG90cy5kcmFnZ2FibGVbX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpjcm9zc2hhaXJ9LmRvdHMucGFubmFibGVbX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpncmFifS5kb3RzLnBhbm5pbmdbX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpncmFiYmluZ30udG9vbHRpcC1yb3ctY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTppbmxpbmUtZmxleDtoZWlnaHQ6MTJweDt3aWR0aDoxMnB4fS50b29sdGlwLXJvdy1jaXJjbGVbX25nY29udGVudC0lQ09NUCVdID4gc3Bhbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJhZGl1czo1MCU7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC42KTtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTBweDt3aWR0aDoxMHB4fS50b29sdGlwLW9yaWdpbltfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjA7bGVmdDowO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjB9LnRvb2x0aXAtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjg1KTtib3JkZXItcmFkaXVzOjRweDtjb2xvcjojZmZmO2NvbnRhaW46cGFpbnQgc3R5bGUgbGF5b3V0O2ZvbnQtc2l6ZTouOWVtO292ZXJmbG93OmF1dG87cGFkZGluZzo1cHg7cG9pbnRlci1ldmVudHM6bm9uZTt3aWR0aDoxMDAlfXRoW19uZ2NvbnRlbnQtJUNPTVAlXSwgdGRbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDVweDt0ZXh0LWFsaWduOmxlZnR9dGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjUwMDtwYWRkaW5nLWJvdHRvbTo1cHh9Lnpvb20tYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmaWxsLW9wYWNpdHk6LjAzO2ZpbGw6IzAwMDtzdHJva2U6I2NjY30uem9vbS1pbnN0cnVjdGlvbltfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xlZnQ6MDtvcGFjaXR5OjA7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDoxMHB4O3RyYW5zaXRpb246b3BhY2l0eSAuNXM7ei1pbmRleDoxfS5pbnN0cnVjdGlvbi1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjYpO2JvcmRlci1yYWRpdXM6NXB4O2NvbG9yOiNmZmY7cGFkZGluZzo1cHggMTBweDt1c2VyLXNlbGVjdDpub25lfS5zaG93LXpvb20taW5zdHJ1Y3Rpb25bX25naG9zdC0lQ09NUCVdICAgLnpvb20taW5zdHJ1Y3Rpb25bX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIHpOZShuLHQpe2lmKDEmbiYmKHFuKCksaygwLCJsaW5lIiwyKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXcoKTtudCgiemVybyIsMD09PWUpLEJlKCJ4MSIsaS5nZXREb21YKGUpKSgieDIiLGkuZ2V0RG9tWChlKSkoInkyIixpLmRvbURpbS5oZWlnaHQpfX1mdW5jdGlvbiBVTmUobix0KXtpZigxJm4mJihxbigpLGsoMCwibGluZSIsMykpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT13KCk7bnQoInplcm8iLDA9PT1lKSxCZSgieTEiLGkuZ2V0RG9tWShlKSkoIngyIixpLmRvbURpbS53aWR0aCkoInkyIixpLmdldERvbVkoZSkpfX12YXIganRlPSgoKT0+e2NsYXNzIG57Z2V0RG9tWChlKXtyZXR1cm4gdGhpcy54U2NhbGUuZm9yd2FyZCh0aGlzLnZpZXdFeHRlbnQueCxYYyh0aGlzLmRvbURpbSwieCIpLGUpfWdldERvbVkoZSl7cmV0dXJuIHRoaXMueVNjYWxlLmZvcndhcmQodGhpcy52aWV3RXh0ZW50LnksWGModGhpcy5kb21EaW0sInkiKSxlKX1nZXRYVGlja3MoKXtyZXR1cm4gdGhpcy54U2NhbGUudGlja3ModGhpcy52aWV3RXh0ZW50LngsWXgodGhpcy5kb21EaW0ud2lkdGgsdGhpcy54R3JpZENvdW50KSl9Z2V0WVRpY2tzKCl7cmV0dXJuIHRoaXMueVNjYWxlLnRpY2tzKHRoaXMudmlld0V4dGVudC55LFl4KHRoaXMuZG9tRGltLmhlaWdodCx0aGlzLnlHcmlkQ291bnQpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1sibGluZS1jaGFydC1ncmlkLXZpZXciXV0saW5wdXRzOnt2aWV3RXh0ZW50OiJ2aWV3RXh0ZW50Iix4U2NhbGU6InhTY2FsZSIseEdyaWRDb3VudDoieEdyaWRDb3VudCIseVNjYWxlOiJ5U2NhbGUiLHlHcmlkQ291bnQ6InlHcmlkQ291bnQiLGRvbURpbToiZG9tRGltIn0sZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbInkxIiwiMCIsMywiemVybyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJ4MSIsIjAiLDMsInplcm8iLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsieTEiLCIwIl0sWyJ4MSIsIjAiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihxbigpLGYoMCwic3ZnIiksUygxLHpOZSwxLDUsImxpbmUiLDApLFMoMixVTmUsMSw1LCJsaW5lIiwxKSxnKCkpLDImZSYmKHYoMSksYigibmdGb3JPZiIsaS5nZXRYVGlja3MoKSksdigxKSxiKCJuZ0Zvck9mIixpLmdldFlUaWNrcygpKSl9LGRlcGVuZGVuY2llczpbbm5dLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgfVxuXG4gICAgICBzdmdbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgIH1cblxuICAgICAgbGluZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBzdHJva2U6ICNjY2M7XG4gICAgICAgIHN0cm9rZS13aWR0aDogMXB4O1xuICAgICAgfVxuXG4gICAgICAuemVyb1tfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBzdHJva2U6ICNhYWE7XG4gICAgICAgIHN0cm9rZS13aWR0aDogMS41cHg7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxHTmU9WyJzZXJpZXNWaWV3Il0sV05lPVsieEF4aXMiXSxxTmU9WyJ5QXhpcyJdLFhOZT1bImNoYXJ0RWwiXTtmdW5jdGlvbiBZTmUobix0KXtpZigxJm4mJmsoMCwibGluZS1jaGFydC1ncmlkLXZpZXciLDE2KSwyJm4pe2xldCBlPXcoKTtiKCJ2aWV3RXh0ZW50IixlLnZpZXdCb3gpKCJ4U2NhbGUiLGUueFNjYWxlKSgieVNjYWxlIixlLnlTY2FsZSkoInhHcmlkQ291bnQiLGUuWF9HUklEX0NPVU5UKSgieUdyaWRDb3VudCIsZS5ZX0dSSURfQ09VTlQpKCJkb21EaW0iLGUuZG9tRGltZW5zaW9ucy5tYWluKX19ZnVuY3Rpb24gUU5lKG4sdCl7MSZuJiYocW4oKSxrKDAsInN2ZyIsbnVsbCwxNykpfWZ1bmN0aW9uIFpOZShuLHQpezEmbiYmaygwLCJjYW52YXMiLG51bGwsMTcpfWZ1bmN0aW9uIEtOZShuLHQpe2lmKDEmbiYmKEd0KDApLFMoMSxRTmUsMiwwLCJzdmciLDUpLFMoMixaTmUsMiwwLCJjYW52YXMiLDUpLFd0KCkpLDImbil7bGV0IGU9dygpO3YoMSksYigibmdJZiIsZS5nZXRSZW5kZXJlclR5cGUoKT09PWUuUmVuZGVyZXJUeXBlLlNWRyksdigxKSxiKCJuZ0lmIixlLmdldFJlbmRlcmVyVHlwZSgpPT09ZS5SZW5kZXJlclR5cGUuV0VCR0wpfX1mdW5jdGlvbiBKTmUobix0KXtpZigxJm4pe2xldCBlPVRlKCk7ZigwLCJsaW5lLWNoYXJ0LWludGVyYWN0aXZlLXZpZXciLDE4KSxBKCJvblZpZXdFeHRlbnRDaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiBuZShlKSxpZSh3KCkub25WaWV3Qm94Q2hhbmdlZChyKSl9KSgib25WaWV3RXh0ZW50UmVzZXQiLGZ1bmN0aW9uKCl7cmV0dXJuIG5lKGUpLGllKHcoKS52aWV3Qm94UmVzZXQoKSl9KSgib25JbnRlcmFjdGlvblN0YXRlQ2hhbmdlIixmdW5jdGlvbihyKXtyZXR1cm4gbmUoZSksaWUodygpLm9uSW50ZXJhY3Rpb25TdGF0ZUNoYW5nZShyKSl9KSxnKCl9aWYoMiZuKXtsZXQgZT13KCksaT1zdCgxKTtiKCJzZXJpZXNEYXRhIixlLnNlcmllc0RhdGEpKCJzZXJpZXNNZXRhZGF0YU1hcCIsZS5zZXJpZXNNZXRhZGF0YU1hcCkoInZpZXdFeHRlbnQiLGUudmlld0JveCkoInhTY2FsZSIsZS54U2NhbGUpKCJ5U2NhbGUiLGUueVNjYWxlKSgidG9vbHRpcE9yaWdpbkVsIixpKSgiZG9tRGltIixlLmRvbURpbWVuc2lvbnMubWFpbikoInRvb2x0aXBUZW1wbGF0ZSIsZS50b29sdGlwVGVtcGxhdGUpKCJkaXNhYmxlVG9vbHRpcCIsZS5kaXNhYmxlVG9vbHRpcCl9fXZhciAkTmU9ZnVuY3Rpb24obix0LGUsaSl7cmV0dXJue3hTY2FsZTpuLHlTY2FsZTp0LGRvbURpbWVuc2lvbjplLHZpZXdFeHRlbnQ6aX19O2Z1bmN0aW9uIGVMZShuLHQpe2lmKDEmbiYmKGYoMCwiZGl2IiwxOSksaGkoMSwyMCksZygpKSwyJm4pe2xldCBlPXcoKTt2KDEpLGIoIm5nVGVtcGxhdGVPdXRsZXQiLGUuY3VzdG9tVmlzVGVtcGxhdGUpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsUmsoMiwkTmUsZS54U2NhbGUsZS55U2NhbGUsZS5kb21EaW1lbnNpb25zLm1haW4sZS52aWV3Qm94KSl9fWZ1bmN0aW9uIHRMZShuLHQpe2lmKDEmbil7bGV0IGU9VGUoKTtmKDAsImxpbmUtY2hhcnQtYXhpcyIsMjEpLEEoIm9uVmlld0V4dGVudENoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIG5lKGUpLGllKHcoKS5vblZpZXdCb3hDaGFuZ2VkRnJvbUF4aXMociwieSIpKX0pLGcoKX1pZigyJm4pe2xldCBlPXcoKTtiKCJheGlzRXh0ZW50IixlLnZpZXdCb3gueSkoImN1c3RvbUZvcm1hdHRlciIsZS5jdXN0b21ZRm9ybWF0dGVyKSgiZG9tRGltIixlLmRvbURpbWVuc2lvbnMueUF4aXMpKCJncmlkQ291bnQiLGUuWV9HUklEX0NPVU5UKSgic2NhbGUiLGUueVNjYWxlKX19ZnVuY3Rpb24gbkxlKG4sdCl7aWYoMSZuKXtsZXQgZT1UZSgpO2YoMCwibGluZS1jaGFydC1heGlzIiwyMiksQSgib25WaWV3RXh0ZW50Q2hhbmdlIixmdW5jdGlvbihyKXtyZXR1cm4gbmUoZSksaWUodygpLm9uVmlld0JveENoYW5nZWRGcm9tQXhpcyhyLCJ4IikpfSksZygpfWlmKDImbil7bGV0IGU9dygpO2IoImF4aXNFeHRlbnQiLGUudmlld0JveC54KSgiY3VzdG9tRm9ybWF0dGVyIixlLmN1c3RvbVhGb3JtYXR0ZXIpKCJkb21EaW0iLGUuZG9tRGltZW5zaW9ucy54QXhpcykoImdyaWRDb3VudCIsZS5YX0dSSURfQ09VTlQpKCJzY2FsZSIsZS54U2NhbGUpfX1mdW5jdGlvbiBpTGUobix0KXsxJm4mJihmKDAsImRpdiIsMjMpLGsoMSwic3BhbiIsMjQpLGcoKSl9dmFyIHJMZT1mdW5jdGlvbihuLHQsZSxpLHIpe3JldHVybnt4U2NhbGU6bix5U2NhbGU6dCxkb21EaW1lbnNpb246ZSx2aWV3RXh0ZW50OmksaW50ZXJhY3Rpb25TdGF0ZTpyfX07ZnVuY3Rpb24gb0xlKG4sdCl7aWYoMSZuJiYoZigwLCJkaXYiLDI1LDI2KSxoaSgyLDIwKSxnKCkpLDImbil7bGV0IGU9dygpO3YoMiksYigibmdUZW1wbGF0ZU91dGxldCIsZS5jdXN0b21DaGFydE92ZXJsYXlUZW1wbGF0ZSkoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixQaygyLHJMZSxlLnhTY2FsZSxlLnlTY2FsZSxlLmRvbURpbWVuc2lvbnMubWFpbixlLnZpZXdCb3gsZS5pbnRlcmFjdGlvblN0YXRlKSl9fXZhciBhTGU9ZnVuY3Rpb24obix0KXtyZXR1cm57Y29udGFpbmVyOiEwLCJkYXJrLW1vZGUiOm4sImxpbmUtb25seS1tb2RlIjp0LCJsaW5lLWNoYXJ0IjohMH19LF9WPXt4OlswLDFdLHk6WzAsMV19LGhfPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5jaGFuZ2VEZXRlY3Rvcj1lLHRoaXMuUmVuZGVyZXJUeXBlPVlpLHRoaXMudXNlRGFya01vZGU9ITEsdGhpcy5wcmVmZXJyZWRSZW5kZXJlclR5cGU9WWkuV0VCR0wsdGhpcy54U2NhbGVUeXBlPXRyLkxJTkVBUix0aGlzLnlTY2FsZVR5cGU9dHIuTElORUFSLHRoaXMudXNlclZpZXdCb3g9bnVsbCx0aGlzLmxpbmVPbmx5PSExLHRoaXMuZGlzYWJsZVRvb2x0aXA9ITEsdGhpcy52aWV3Qm94Q2hhbmdlZD1uZXcgRix0aGlzLm9uVmlld0JveE92ZXJyaWRkZW49bmV3IExwKDEpLHRoaXMuaWdub3JlWU91dGxpZXJzPSExLHRoaXMuWV9HUklEX0NPVU5UPTYsdGhpcy5YX0dSSURfQ09VTlQ9MTAsdGhpcy54U2NhbGU9VWwodGhpcy54U2NhbGVUeXBlKSx0aGlzLnlTY2FsZT1VbCh0aGlzLnhTY2FsZVR5cGUpLHRoaXMudmlld0JveD1fVix0aGlzLmRvbURpbWVuc2lvbnM9e21haW46e3dpZHRoOjAsaGVpZ2h0OjB9LHhBeGlzOnt3aWR0aDowLGhlaWdodDowfSx5QXhpczp7d2lkdGg6MCxoZWlnaHQ6MH19LHRoaXMuc2hvd0NoYXJ0UmVuZGVyZXJFbGVtZW50PSEwLHRoaXMuaW50ZXJhY3Rpb25TdGF0ZT1Uci5OT05FLHRoaXMubGluZUNoYXJ0PW51bGwsdGhpcy5pc0RhdGFVcGRhdGVkPSExLHRoaXMuaXNNZXRhZGF0YVVwZGF0ZWQ9ITEsdGhpcy5pc0ZpeGVkVmlld0JveFVwZGF0ZWQ9ITEsdGhpcy5pc1ZpZXdCb3hPdmVycmlkZGVuPSExLHRoaXMudXNlRGFya01vZGVVcGRhdGVkPSExLHRoaXMudXNlclZpZXdCb3hVcGRhdGVkPSExLHRoaXMuaXNWaWV3Qm94Q2hhbmdlZD0hMCx0aGlzLnNjYWxlVXBkYXRlZD0hMCx0aGlzLmlzUmVuZGVyaW5nQ29udGV4dExvc3Q9ITF9bmdPbkluaXQoKXt0aGlzLm9uVmlld0JveE92ZXJyaWRkZW4ubmV4dCh0aGlzLmlzVmlld0JveE92ZXJyaWRkZW4pfW5nT25DaGFuZ2VzKGUpe2UueFNjYWxlVHlwZSYmKHRoaXMueFNjYWxlPVVsKHRoaXMueFNjYWxlVHlwZSksdGhpcy5zY2FsZVVwZGF0ZWQ9ITApLGUueVNjYWxlVHlwZSYmKHRoaXMueVNjYWxlPVVsKHRoaXMueVNjYWxlVHlwZSksdGhpcy5zY2FsZVVwZGF0ZWQ9ITApLGUuc2VyaWVzRGF0YSYmKHRoaXMuaXNEYXRhVXBkYXRlZD0hMCksZS5maXhlZFZpZXdCb3gmJih0aGlzLmlzRml4ZWRWaWV3Qm94VXBkYXRlZD0hMCksZS5zZXJpZXNNZXRhZGF0YU1hcCYmKHRoaXMuaXNNZXRhZGF0YVVwZGF0ZWQ9ITApLGUudXNlRGFya01vZGUmJih0aGlzLnVzZURhcmtNb2RlVXBkYXRlZD0hMCksZS51c2VyVmlld0JveCYmKHRoaXMudXNlclZpZXdCb3hVcGRhdGVkPSEwKSx0aGlzLnVzZXJWaWV3Qm94VXBkYXRlZD90aGlzLnNldElzVmlld0JveE92ZXJyaWRkZW4oISF0aGlzLnVzZXJWaWV3Qm94KTp0aGlzLnNjYWxlVXBkYXRlZCYmdGhpcy5zZXRJc1ZpZXdCb3hPdmVycmlkZGVuKCExKSx0aGlzLmlzVmlld0JveENoYW5nZWQ9dGhpcy5pc1ZpZXdCb3hDaGFuZ2VkfHx0aGlzLnVzZXJWaWV3Qm94VXBkYXRlZHx8dGhpcy5zY2FsZVVwZGF0ZWR8fCF0aGlzLmlzVmlld0JveE92ZXJyaWRkZW4mJnRoaXMuc2hvdWxkVXBkYXRlRGVmYXVsdFZpZXdCb3goZSksdGhpcy51cGRhdGVMaW5lQ2hhcnQoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmluaXRpYWxpemVDaGFydCgpLHRoaXMudXBkYXRlTGluZUNoYXJ0KCksdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCl9cmVjb3ZlclJlbmRlcmVySWZOZWVkZWQoKXshdGhpcy5pc1JlbmRlcmluZ0NvbnRleHRMb3N0fHx0aGlzLmRpc2FibGVVcGRhdGV8fCh0aGlzLnNob3dDaGFydFJlbmRlcmVyRWxlbWVudD0hMSx0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKSx0aGlzLnNob3dDaGFydFJlbmRlcmVyRWxlbWVudD0hMCx0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKSx0aGlzLmluaXRpYWxpemVDaGFydCgpLHRoaXMuc2NhbGVVcGRhdGVkPSEwLHRoaXMuaXNNZXRhZGF0YVVwZGF0ZWQ9ITAsdGhpcy5pc0RhdGFVcGRhdGVkPSEwLHRoaXMudXNlRGFya01vZGVVcGRhdGVkPSEwLHRoaXMuaXNGaXhlZFZpZXdCb3hVcGRhdGVkPSEwLHRoaXMuaXNWaWV3Qm94Q2hhbmdlZD0hMCx0aGlzLmlzUmVuZGVyaW5nQ29udGV4dExvc3Q9ITEpfW9uVmlld1Jlc2l6ZSgpeyF0aGlzLmxpbmVDaGFydHx8KHRoaXMucmVhZEFuZFVwZGF0ZURvbURpbWVuc2lvbnMoKSx0aGlzLmxpbmVDaGFydC5yZXNpemUodGhpcy5kb21EaW1lbnNpb25zLm1haW4pLHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpKX1zaG91bGRVcGRhdGVEZWZhdWx0Vmlld0JveChlKXtpZihlLnhTY2FsZVR5cGV8fGUueVNjYWxlVHlwZXx8ZS5pZ25vcmVZT3V0bGllcnN8fGUuc2VyaWVzRGF0YSlyZXR1cm4hMDtsZXQgcj1lLnNlcmllc01ldGFkYXRhTWFwO2lmKHIpe2xldCBvPXIucHJldmlvdXNWYWx1ZTtpZihPYmplY3Qua2V5cyh0aGlzLnNlcmllc01ldGFkYXRhTWFwKS5sZW5ndGghPT1PYmplY3Qua2V5cyhvPz97fSkubGVuZ3RoKXJldHVybiEwO2ZvcihsZXRbYSxzXW9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2VyaWVzTWV0YWRhdGFNYXApKXtsZXQgbD1vJiZvW2FdO2lmKCFsfHxzLnZpc2libGUhPT1sLnZpc2libGUpcmV0dXJuITB9fXJldHVybiExfW9uQ29udGV4dExvc3QoKXt0aGlzLmlzUmVuZGVyaW5nQ29udGV4dExvc3Q9ITAsdGhpcy5saW5lQ2hhcnQmJih0aGlzLmxpbmVDaGFydC5kaXNwb3NlKCksdGhpcy5saW5lQ2hhcnQ9bnVsbCl9dHJpZ2dlckNvbnRleHRMb3N0Rm9yVGVzdCgpe3RoaXMub25Db250ZXh0TG9zdCgpfWdldExpbmVDaGFydEZvclRlc3QoKXtyZXR1cm4gdGhpcy5saW5lQ2hhcnR9aW5pdGlhbGl6ZUNoYXJ0KCl7dGhpcy5saW5lQ2hhcnQmJnRoaXMubGluZUNoYXJ0LmRpc3Bvc2UoKTtsZXQgZT10aGlzLmdldFJlbmRlcmVyVHlwZSgpLGk9e29uRHJhd0VuZDooKT0+e30sb25Db250ZXh0TG9zdDp0aGlzLm9uQ29udGV4dExvc3QuYmluZCh0aGlzKX0scj1udWxsO3N3aXRjaCh0aGlzLnJlYWRBbmRVcGRhdGVEb21EaW1lbnNpb25zKCksZSl7Y2FzZSBZaS5TVkc6cj17dHlwZTpZaS5TVkcsY29udGFpbmVyOnRoaXMuY2hhcnRFbC5uYXRpdmVFbGVtZW50LGNhbGxiYWNrczppLGRvbURpbWVuc2lvbjp0aGlzLmRvbURpbWVuc2lvbnMubWFpbix1c2VEYXJrTW9kZTp0aGlzLnVzZURhcmtNb2RlfTticmVhaztjYXNlIFlpLldFQkdMOnI9e3R5cGU6WWkuV0VCR0wsY29udGFpbmVyOnRoaXMuY2hhcnRFbC5uYXRpdmVFbGVtZW50LGRldmljZVBpeGVsUmF0aW86d2luZG93LmRldmljZVBpeGVsUmF0aW8sY2FsbGJhY2tzOmksZG9tRGltZW5zaW9uOnRoaXMuZG9tRGltZW5zaW9ucy5tYWluLHVzZURhcmtNb2RlOnRoaXMudXNlRGFya01vZGV9O2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGA8bGluZS1jaGFydD4gZG9lcyBub3QgeWV0IHN1cHBvcnQgcmVuZGVyZXJUeXBlOiAke2V9YCl9bGV0IGE9ZSE9PVlpLlNWRyYmamxfaXNXZWJHbDJPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQoKT9UbTpzQTt0aGlzLmxpbmVDaGFydD1uZXcgYShyKX1uZ09uRGVzdHJveSgpe3RoaXMubGluZUNoYXJ0JiZ0aGlzLmxpbmVDaGFydC5kaXNwb3NlKCl9Z2V0UmVuZGVyZXJUeXBlKCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3N3aXRjaChuKXtjYXNlIFlpLlNWRzpyZXR1cm4gWWkuU1ZHO2Nhc2UgWWkuV0VCR0w6cmV0dXJuIGpsX2lzV2ViR2wyU3VwcG9ydGVkKCk/WWkuV0VCR0w6WWkuU1ZHO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHJlbmRlcmVyVHlwZTogJHtufWApfX0odGhpcy5wcmVmZXJyZWRSZW5kZXJlclR5cGUpfXJlYWRBbmRVcGRhdGVEb21EaW1lbnNpb25zKCl7dGhpcy5kb21EaW1lbnNpb25zPXttYWluOnt3aWR0aDp0aGlzLnNlcmllc1ZpZXcubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCxoZWlnaHQ6dGhpcy5zZXJpZXNWaWV3Lm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0fSx4QXhpczp7d2lkdGg6dGhpcy54QXhpcy5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoLGhlaWdodDp0aGlzLnhBeGlzLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0fSx5QXhpczp7d2lkdGg6dGhpcy55QXhpcy5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoLGhlaWdodDp0aGlzLnlBeGlzLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0fX19dXBkYXRlTGluZUNoYXJ0KCl7aWYodGhpcy5yZWNvdmVyUmVuZGVyZXJJZk5lZWRlZCgpLHRoaXMubGluZUNoYXJ0JiYhdGhpcy5kaXNhYmxlVXBkYXRlKXtpZih0aGlzLnNjYWxlVXBkYXRlZCYmKHRoaXMuc2NhbGVVcGRhdGVkPSExLHRoaXMubGluZUNoYXJ0LnNldFhTY2FsZVR5cGUodGhpcy54U2NhbGVUeXBlKSx0aGlzLmxpbmVDaGFydC5zZXRZU2NhbGVUeXBlKHRoaXMueVNjYWxlVHlwZSkpLHRoaXMuaXNNZXRhZGF0YVVwZGF0ZWQmJih0aGlzLmlzTWV0YWRhdGFVcGRhdGVkPSExLHRoaXMubGluZUNoYXJ0LnNldE1ldGFkYXRhKHRoaXMuc2VyaWVzTWV0YWRhdGFNYXApKSx0aGlzLmlzRGF0YVVwZGF0ZWQmJih0aGlzLmlzRGF0YVVwZGF0ZWQ9ITEsdGhpcy5saW5lQ2hhcnQuc2V0RGF0YSh0aGlzLnNlcmllc0RhdGEpKSx0aGlzLnVzZURhcmtNb2RlVXBkYXRlZCYmKHRoaXMudXNlRGFya01vZGVVcGRhdGVkPSExLHRoaXMubGluZUNoYXJ0LnNldFVzZURhcmtNb2RlKHRoaXMudXNlRGFya01vZGUpKSx0aGlzLnVzZXJWaWV3Qm94VXBkYXRlZCYmKHRoaXMudXNlclZpZXdCb3hVcGRhdGVkPSExKSx0aGlzLmlzVmlld0JveE92ZXJyaWRkZW4mJnRoaXMudXNlclZpZXdCb3gpdGhpcy52aWV3Qm94PXRoaXMudXNlclZpZXdCb3g7ZWxzZSBpZighdGhpcy5pc1ZpZXdCb3hPdmVycmlkZGVuJiZ0aGlzLmZpeGVkVmlld0JveCl0aGlzLnZpZXdCb3g9dGhpcy5maXhlZFZpZXdCb3g7ZWxzZSBpZighdGhpcy5pc1ZpZXdCb3hPdmVycmlkZGVuJiZ0aGlzLmlzVmlld0JveENoYW5nZWQpe2xldCBpPWZ1bmN0aW9uKG4sdCxlLGkscil7bGV0IG89bnVsbCxhPW51bGwscz1bXTtmb3IobGV0e2lkOnUscG9pbnRzOnB9b2Ygbil7bGV0IGg9dFt1XTtpZihoJiYhaC5hdXgmJmgudmlzaWJsZSlmb3IobGV0IG09MDttPHAubGVuZ3RoO20rKyl7bGV0e3g6Xyx5Ok19PXBbbV07aShfKSYmKG89bnVsbD09PW98fF88bz9fOm8sYT1udWxsPT09YXx8Xz5hP186YSkscihNKSYmcy5wdXNoKE0pfX1zLnNvcnQoYWwpO2xldCBjPXNbMF0sZD1zW3MubGVuZ3RoLTFdO3JldHVybiBlJiZzLmxlbmd0aD4yJiYoYz1zW01hdGguY2VpbCguMDUqKHMubGVuZ3RoLTEpKV0sZD1zW01hdGguZmxvb3IoLjk1KihzLmxlbmd0aC0xKSldKSx7eDpudWxsIT09byYmbnVsbCE9PWE/W28sYV06dm9pZCAwLHk6dm9pZCAwIT09YyYmdm9pZCAwIT09ZD9bYyxkXTp2b2lkIDB9fSh0aGlzLnNlcmllc0RhdGEsdGhpcy5zZXJpZXNNZXRhZGF0YU1hcCx0aGlzLmlnbm9yZVlPdXRsaWVycyx0aGlzLnhTY2FsZS5pc1NhZmVOdW1iZXIsdGhpcy55U2NhbGUuaXNTYWZlTnVtYmVyKTt0aGlzLnZpZXdCb3g9e3g6dGhpcy54U2NhbGUubmljZURvbWFpbihpLng/P19WLngpLHk6dGhpcy55U2NhbGUubmljZURvbWFpbihpLnk/P19WLnkpfX0odGhpcy5pc0ZpeGVkVmlld0JveFVwZGF0ZWR8fHRoaXMuaXNWaWV3Qm94Q2hhbmdlZCkmJih0aGlzLmlzRml4ZWRWaWV3Qm94VXBkYXRlZD0hMSx0aGlzLmlzVmlld0JveENoYW5nZWQ9ITEsdGhpcy5saW5lQ2hhcnQuc2V0Vmlld0JveCh0aGlzLnZpZXdCb3gpLHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpKX19b25WaWV3Qm94Q2hhbmdlZCh7ZGF0YUV4dGVudDplfSl7dGhpcy52aWV3Qm94Q2hhbmdlZC5lbWl0KGUpfXZpZXdCb3hSZXNldCgpe3RoaXMudmlld0JveENoYW5nZWQuZW1pdChudWxsKX1zZXRJc1ZpZXdCb3hPdmVycmlkZGVuKGUpe2xldCBpPXRoaXMuaXNWaWV3Qm94T3ZlcnJpZGRlbjt0aGlzLmlzVmlld0JveE92ZXJyaWRkZW49ZSxpIT09ZSYmdGhpcy5vblZpZXdCb3hPdmVycmlkZGVuLm5leHQoZSl9b25JbnRlcmFjdGlvblN0YXRlQ2hhbmdlKGUpe3RoaXMuaW50ZXJhY3Rpb25TdGF0ZT1lfWdldElzVmlld0JveE92ZXJyaWRkZW4oKXtyZXR1cm4gdGhpcy5vblZpZXdCb3hPdmVycmlkZGVufW9uVmlld0JveENoYW5nZWRGcm9tQXhpcyhlLGkpe2xldCByPXsuLi50aGlzLnZpZXdCb3gsW2ldOmV9O3RoaXMub25WaWV3Qm94Q2hhbmdlZCh7ZGF0YUV4dGVudDpyfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoUXQpKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJsaW5lLWNoYXJ0Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKFVlKEdOZSw3LHhlKSxVZShXTmUsNyx4ZSksVWUocU5lLDcseGUpLFVlKFhOZSw1LHhlKSksMiZlKXtsZXQgcjtiZShyPXZlKCkpJiYoaS5zZXJpZXNWaWV3PXIuZmlyc3QpLGJlKHI9dmUoKSkmJihpLnhBeGlzPXIuZmlyc3QpLGJlKHI9dmUoKSkmJihpLnlBeGlzPXIuZmlyc3QpLGJlKHI9dmUoKSkmJihpLmNoYXJ0RWw9ci5maXJzdCl9fSxpbnB1dHM6e2N1c3RvbVZpc1RlbXBsYXRlOiJjdXN0b21WaXNUZW1wbGF0ZSIsY3VzdG9tQ2hhcnRPdmVybGF5VGVtcGxhdGU6ImN1c3RvbUNoYXJ0T3ZlcmxheVRlbXBsYXRlIix1c2VEYXJrTW9kZToidXNlRGFya01vZGUiLHByZWZlcnJlZFJlbmRlcmVyVHlwZToicHJlZmVycmVkUmVuZGVyZXJUeXBlIixzZXJpZXNEYXRhOiJzZXJpZXNEYXRhIixmaXhlZFZpZXdCb3g6ImZpeGVkVmlld0JveCIsc2VyaWVzTWV0YWRhdGFNYXA6InNlcmllc01ldGFkYXRhTWFwIix4U2NhbGVUeXBlOiJ4U2NhbGVUeXBlIix5U2NhbGVUeXBlOiJ5U2NhbGVUeXBlIixjdXN0b21YRm9ybWF0dGVyOiJjdXN0b21YRm9ybWF0dGVyIixjdXN0b21ZRm9ybWF0dGVyOiJjdXN0b21ZRm9ybWF0dGVyIix0b29sdGlwVGVtcGxhdGU6InRvb2x0aXBUZW1wbGF0ZSIsdXNlclZpZXdCb3g6InVzZXJWaWV3Qm94IixsaW5lT25seToibGluZU9ubHkiLGRpc2FibGVUb29sdGlwOiJkaXNhYmxlVG9vbHRpcCIsZGlzYWJsZVVwZGF0ZToiZGlzYWJsZVVwZGF0ZSIsaWdub3JlWU91dGxpZXJzOiJpZ25vcmVZT3V0bGllcnMifSxvdXRwdXRzOnt2aWV3Qm94Q2hhbmdlZDoidmlld0JveENoYW5nZWQifSxmZWF0dXJlczpbcXRdLGRlY2xzOjE2LHZhcnM6MTMsY29uc3RzOltbImRldGVjdFJlc2l6ZSIsIiIsImNka092ZXJsYXlPcmlnaW4iLCIiLDMsIm5nQ2xhc3MiLCJyZXNpemVFdmVudERlYm91bmNlUGVyaW9kSW5NcyIsIm9uUmVzaXplIl0sWyJvdmVybGF5VGFyZ2V0IiwiY2RrT3ZlcmxheU9yaWdpbiJdLFsxLCJzZXJpZXMtdmlldyJdLFsic2VyaWVzVmlldyIsIiJdLFszLCJ2aWV3RXh0ZW50IiwieFNjYWxlIiwieVNjYWxlIiwieEdyaWRDb3VudCIsInlHcmlkQ291bnQiLCJkb21EaW0iLDQsIm5nSWYiXSxbNCwibmdJZiJdLFszLCJzZXJpZXNEYXRhIiwic2VyaWVzTWV0YWRhdGFNYXAiLCJ2aWV3RXh0ZW50IiwieFNjYWxlIiwieVNjYWxlIiwidG9vbHRpcE9yaWdpbkVsIiwiZG9tRGltIiwidG9vbHRpcFRlbXBsYXRlIiwiZGlzYWJsZVRvb2x0aXAiLCJvblZpZXdFeHRlbnRDaGFuZ2UiLCJvblZpZXdFeHRlbnRSZXNldCIsIm9uSW50ZXJhY3Rpb25TdGF0ZUNoYW5nZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjdXN0b20tdmlzIiw0LCJuZ0lmIl0sWzEsInktYXhpcyJdLFsieUF4aXMiLCIiXSxbImF4aXMiLCJ5IiwzLCJheGlzRXh0ZW50IiwiY3VzdG9tRm9ybWF0dGVyIiwiZG9tRGltIiwiZ3JpZENvdW50Iiwic2NhbGUiLCJvblZpZXdFeHRlbnRDaGFuZ2UiLDQsIm5nSWYiXSxbMSwieC1heGlzIl0sWyJ4QXhpcyIsIiJdLFsiYXhpcyIsIngiLDMsImF4aXNFeHRlbnQiLCJjdXN0b21Gb3JtYXR0ZXIiLCJkb21EaW0iLCJncmlkQ291bnQiLCJzY2FsZSIsIm9uVmlld0V4dGVudENoYW5nZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJkb3QiLDQsIm5nSWYiXSxbImNsYXNzIiwiY3VzdG9tLXZpcyBjdXN0b20tY2hhcnQtb3ZlcmxheS12aXMiLDQsIm5nSWYiXSxbMywidmlld0V4dGVudCIsInhTY2FsZSIsInlTY2FsZSIsInhHcmlkQ291bnQiLCJ5R3JpZENvdW50IiwiZG9tRGltIl0sWyJjaGFydEVsIiwiIl0sWzMsInNlcmllc0RhdGEiLCJzZXJpZXNNZXRhZGF0YU1hcCIsInZpZXdFeHRlbnQiLCJ4U2NhbGUiLCJ5U2NhbGUiLCJ0b29sdGlwT3JpZ2luRWwiLCJkb21EaW0iLCJ0b29sdGlwVGVtcGxhdGUiLCJkaXNhYmxlVG9vbHRpcCIsIm9uVmlld0V4dGVudENoYW5nZSIsIm9uVmlld0V4dGVudFJlc2V0Iiwib25JbnRlcmFjdGlvblN0YXRlQ2hhbmdlIl0sWzEsImN1c3RvbS12aXMiXSxbMywibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Il0sWyJheGlzIiwieSIsMywiYXhpc0V4dGVudCIsImN1c3RvbUZvcm1hdHRlciIsImRvbURpbSIsImdyaWRDb3VudCIsInNjYWxlIiwib25WaWV3RXh0ZW50Q2hhbmdlIl0sWyJheGlzIiwieCIsMywiYXhpc0V4dGVudCIsImN1c3RvbUZvcm1hdHRlciIsImRvbURpbSIsImdyaWRDb3VudCIsInNjYWxlIiwib25WaWV3RXh0ZW50Q2hhbmdlIl0sWzEsImRvdCJdLFsxLCJyZWN0Il0sWzEsImN1c3RvbS12aXMiLCJjdXN0b20tY2hhcnQtb3ZlcmxheS12aXMiXSxbImN1c3RvbUNoYXJ0T3ZlcmxheSIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGYoMCwiZGl2IiwwLDEpLEEoIm9uUmVzaXplIixmdW5jdGlvbigpe3JldHVybiBpLm9uVmlld1Jlc2l6ZSgpfSksZigyLCJkaXYiLDIsMyksUyg0LFlOZSwxLDYsImxpbmUtY2hhcnQtZ3JpZC12aWV3Iiw0KSxTKDUsS05lLDMsMiwibmctY29udGFpbmVyIiw1KSxTKDYsSk5lLDEsOSwibGluZS1jaGFydC1pbnRlcmFjdGl2ZS12aWV3Iiw2KSxTKDcsZUxlLDIsNywiZGl2Iiw3KSxnKCksZig4LCJkaXYiLDgsOSksUygxMCx0TGUsMSw1LCJsaW5lLWNoYXJ0LWF4aXMiLDEwKSxnKCksZigxMSwiZGl2IiwxMSwxMiksUygxMyxuTGUsMSw1LCJsaW5lLWNoYXJ0LWF4aXMiLDEzKSxnKCksUygxNCxpTGUsMiwwLCJkaXYiLDE0KSxTKDE1LG9MZSwzLDgsImRpdiIsMTUpLGcoKSksMiZlJiYoYigibmdDbGFzcyIsU28oMTAsYUxlLGkudXNlRGFya01vZGUsaS5saW5lT25seSkpKCJyZXNpemVFdmVudERlYm91bmNlUGVyaW9kSW5NcyIsMCksdig0KSxiKCJuZ0lmIiwhaS5saW5lT25seSksdigxKSxiKCJuZ0lmIixpLnNob3dDaGFydFJlbmRlcmVyRWxlbWVudCksdigxKSxiKCJuZ0lmIiwhaS5saW5lT25seSksdigxKSxiKCJuZ0lmIixpLmN1c3RvbVZpc1RlbXBsYXRlKSx2KDMpLGIoIm5nSWYiLCFpLmxpbmVPbmx5KSx2KDMpLGIoIm5nSWYiLCFpLmxpbmVPbmx5KSx2KDEpLGIoIm5nSWYiLCFpLmxpbmVPbmx5KSx2KDEpLGIoIm5nSWYiLGkuY3VzdG9tQ2hhcnRPdmVybGF5VGVtcGxhdGUpKX0sZGVwZW5kZW5jaWVzOlt3bixOZSxlbyxNZCxIdGUsVXRlLGp0ZSxWaF0sc3R5bGVzOlsnW19uZ2hvc3QtJUNPTVAlXXtjb250YWluOnN0cmljdDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufVtfbmdob3N0LSVDT01QJV0gICAgIC5saW5lLWNoYXJ0OmhhcyguaG9yaXpvbnRhbC1wcm9zcGVjdGl2ZS1hcmVhOmhvdmVyKSAueC1heGlzIC5leHRlbnQtZWRpdC1idXR0b257dmlzaWJpbGl0eTp2aXNpYmxlfVtfbmdob3N0LSVDT01QJV0gICAuY3VzdG9tLXZpc1tfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZX0uY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOmluaGVyaXQ7ZGlzcGxheTpncmlkO2ZsZXgtZ3JvdzoxO2hlaWdodDoxMDAlO292ZXJmbG93OmhpZGRlbjt3aWR0aDoxMDAlO2dyaWQtdGVtcGxhdGUtYXJlYXM6InlheGlzIHNlcmllcyIgImRvdCB4YXhpcyIgIi4gY3VzdG9tQ2hhcnRPdmVybGF5IjtncmlkLXRlbXBsYXRlLWNvbHVtbnM6NTBweCAxZnI7Z3JpZC1hdXRvLXJvd3M6MWZyIDMwcHggMHB4fS5jb250YWluZXIuZGFyay1tb2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZmZmfS5jb250YWluZXIubGluZS1vbmx5LW1vZGVbX25nY29udGVudC0lQ09NUCVde2dyaWQtdGVtcGxhdGUtY29sdW1uczowIDFmcjtncmlkLWF1dG8tcm93czoxZnIgMH0uc2VyaWVzLXZpZXdbX25nY29udGVudC0lQ09NUCVde2dyaWQtYXJlYTpzZXJpZXM7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVufS5zZXJpZXMtdmlld1tfbmdjb250ZW50LSVDT01QJV0gICAuY3VzdG9tLXZpc1tfbmdjb250ZW50LSVDT01QJV0sIC5zZXJpZXMtdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBjYW52YXNbX25nY29udGVudC0lQ09NUCVdLCAuc2VyaWVzLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgc3ZnW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNlcmllcy12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGxpbmUtY2hhcnQtZ3JpZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNlcmllcy12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGxpbmUtY2hhcnQtaW50ZXJhY3RpdmUtdmlld1tfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCU7bGVmdDowO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3dpZHRoOjEwMCV9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAuY3VzdG9tLXZpc1tfbmdjb250ZW50LSVDT01QJV0sIC55LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLmN1c3RvbS12aXNbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO2xlZnQ6MDtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6MTAwJTstd2Via2l0LW1hc2staW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDAsIDAsIDAsIDApIDAlLCAjMDAwIDEwJSwgIzAwMCA5MCUsIHJnYmEoMCwgMCwgMCwgMCkgMTAwJSk7bWFzay1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMCwgMCwgMCwgMCkgMCUsICMwMDAgMTAlLCAjMDAwIDkwJSwgcmdiYSgwLCAwLCAwLCAwKSAxMDAlKX0ueC1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGxpbmUtY2hhcnQtYXhpc1tfbmdjb250ZW50LSVDT01QJV0sIC55LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgbGluZS1jaGFydC1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJX0ueC1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6eGF4aXM7cG9zaXRpb246cmVsYXRpdmV9LnktYXhpc1tfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOnlheGlzfS5kb3RbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7ZGlzcGxheTpmbGV4O2dyaWQtYXJlYTpkb3Q7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5kb3RbX25nY29udGVudC0lQ09NUCVdICAgLnJlY3RbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxcHg7d2lkdGg6MXB4O2JhY2tncm91bmQtY29sb3I6I2FhYX0uY3VzdG9tLWNoYXJ0LW92ZXJsYXktdmlzW19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6Y3VzdG9tQ2hhcnRPdmVybGF5O2dyaWQtcm93LWVuZDoyO2dyaWQtcm93LXN0YXJ0OjF9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBzTGUobix0KXsxJm4mJmhpKDApfXZhciBXdGU9ZnVuY3Rpb24obil7cmV0dXJueyRpbXBsaWNpdDpufX07ZnVuY3Rpb24gbExlKG4sdCl7aWYoMSZuJiYoZigwLCJkaXYiLDQpLFMoMSxzTGUsMSwwLCJuZy1jb250YWluZXIiLDUpLFQoMiksZygpKSwyJm4pe2xldCBlPXcoKSxpPXN0KDYpO3YoMSksYigibmdUZW1wbGF0ZU91dGxldCIsaSkoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixVbigzLFd0ZSxlLmRhdHVtKSksdigxKSxWZSgiICIsZS5nZXRGb3JtYXR0ZWREYXRhRm9yQ29sdW1uKCksIiAiKX19ZnVuY3Rpb24gY0xlKG4sdCl7MSZuJiZoaSgwKX1mdW5jdGlvbiBkTGUobix0KXtpZigxJm4mJihmKDAsImRpdiIsNCksUygxLGNMZSwxLDAsIm5nLWNvbnRhaW5lciIsNSksVCgyKSxnKCkpLDImbil7bGV0IGU9dygpLGk9c3QoNik7digxKSxiKCJuZ1RlbXBsYXRlT3V0bGV0IixpKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLFVuKDMsV3RlLGUuZGF0dW0pKSx2KDEpLFZlKCIgIixlLmdldEZvcm1hdHRlZERhdGFGb3JDb2x1bW4oKSwiICIpfX1mdW5jdGlvbiB1TGUobix0KXtpZigxJm4mJihmKDAsImRpdiIsNiksVCgxKSxnKCkpLDImbil7bGV0IGU9dygpO3YoMSksVmUoIiAiLGUuZ2V0Rm9ybWF0dGVkRGF0YUZvckNvbHVtbigpLCIgIil9fWZ1bmN0aW9uIHBMZShuLHQpezEmbiYmaygwLCJtYXQtaWNvbiIsOSl9ZnVuY3Rpb24gaExlKG4sdCl7MSZuJiZrKDAsIm1hdC1pY29uIiwxMCl9ZnVuY3Rpb24gbUxlKG4sdCl7aWYoMSZuJiYoUygwLHBMZSwxLDAsIm1hdC1pY29uIiw3KSxTKDEsaExlLDEsMCwibWF0LWljb24iLDgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0O2IoIm5nSWYiLGU+PTApLHYoMSksYigibmdJZiIsZTwwKX19dmFyIGZMZT1bIioiXSxtXz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5jb250ZXh0TWVudU9wZW5lZD1uZXcgRix0aGlzLkNvbHVtbkhlYWRlclR5cGU9Z3R9Z2V0Rm9ybWF0dGVkRGF0YUZvckNvbHVtbigpe2lmKHZvaWQgMD09PXRoaXMuZGF0dW0pcmV0dXJuIiI7c3dpdGNoKHRoaXMuaGVhZGVyLnR5cGUpe2Nhc2UgZ3QuUlVOOnJldHVybiB0aGlzLmRhdHVtO2Nhc2UgZ3QuVkFMVUU6Y2FzZSBndC5TVEVQOmNhc2UgZ3QuU01PT1RIRUQ6Y2FzZSBndC5TVEFSVF9TVEVQOmNhc2UgZ3QuRU5EX1NURVA6Y2FzZSBndC5TVEFSVF9WQUxVRTpjYXNlIGd0LkVORF9WQUxVRTpjYXNlIGd0Lk1JTl9WQUxVRTpjYXNlIGd0Lk1BWF9WQUxVRTpjYXNlIGd0LlNURVBfQVRfTUFYOmNhc2UgZ3QuU1RFUF9BVF9NSU46Y2FzZSBndC5NRUFOOmNhc2UgZ3QuSFBBUkFNOnJldHVybiJudW1iZXIiPT10eXBlb2YgdGhpcy5kYXR1bT95MC5mb3JtYXRTaG9ydCh0aGlzLmRhdHVtKTp0aGlzLmRhdHVtO2Nhc2UgZ3QuVElNRTpyZXR1cm4gbmV3IERhdGUodGhpcy5kYXR1bSkudG9JU09TdHJpbmcoKTtjYXNlIGd0LlJFTEFUSVZFX1RJTUU6cmV0dXJuIHgwLmZvcm1hdFJlYWRhYmxlKHRoaXMuZGF0dW0pO2Nhc2UgZ3QuVkFMVUVfQ0hBTkdFOnJldHVybiB5MC5mb3JtYXRTaG9ydChNYXRoLmFicyh0aGlzLmRhdHVtKSk7Y2FzZSBndC5QRVJDRU5UQUdFX0NIQU5HRTpyZXR1cm4gTWF0aC5yb3VuZCgxMDAqdGhpcy5kYXR1bSkudG9TdHJpbmcoKSsiJSI7Y2FzZSBndC5SQVdfQ0hBTkdFOnJldHVybiBkcC5mb3JtYXRTaG9ydChNYXRoLmFicyh0aGlzLmRhdHVtKSk7ZGVmYXVsdDpyZXR1cm4iIn19b25Db250ZXh0TWVudU9wZW5lZChlKXt0aGlzLmNvbnRleHRNZW51T3BlbmVkLmVtaXQoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLWRhdGEtdGFibGUtY29udGVudC1jZWxsIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmQSgiY29udGV4dG1lbnUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uQ29udGV4dE1lbnVPcGVuZWQobyl9KX0saW5wdXRzOntoZWFkZXI6ImhlYWRlciIsZGF0dW06ImRhdHVtIn0sb3V0cHV0czp7Y29udGV4dE1lbnVPcGVuZWQ6ImNvbnRleHRNZW51T3BlbmVkIn0sbmdDb250ZW50U2VsZWN0b3JzOmZMZSxkZWNsczo3LHZhcnM6Myxjb25zdHM6W1szLCJuZ1N3aXRjaCJdLFsiY2xhc3MiLCJjZWxsIiw0LCJuZ1N3aXRjaENhc2UiXSxbImNsYXNzIiwiY2VsbCBleHRyYS1yaWdodC1wYWRkaW5nIiw0LCJuZ1N3aXRjaERlZmF1bHQiXSxbImFycm93IiwiIl0sWzEsImNlbGwiXSxbNCwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Il0sWzEsImNlbGwiLCJleHRyYS1yaWdodC1wYWRkaW5nIl0sWyJzdmdJY29uIiwiYXJyb3dfdXB3YXJkXzI0cHgiLDQsIm5nSWYiXSxbInN2Z0ljb24iLCJhcnJvd19kb3dud2FyZF8yNHB4Iiw0LCJuZ0lmIl0sWyJzdmdJY29uIiwiYXJyb3dfdXB3YXJkXzI0cHgiXSxbInN2Z0ljb24iLCJhcnJvd19kb3dud2FyZF8yNHB4Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZm4oKSxHdCgwLDApLFMoMSxsTGUsMyw1LCJkaXYiLDEpLFMoMixkTGUsMyw1LCJkaXYiLDEpLFMoMyx1TGUsMiwxLCJkaXYiLDIpLFR0KDQpLFd0KCksUyg1LG1MZSwyLDIsIm5nLXRlbXBsYXRlIixudWxsLDMsanQpKSwyJmUmJihiKCJuZ1N3aXRjaCIsaS5oZWFkZXIudHlwZSksdigxKSxiKCJuZ1N3aXRjaENhc2UiLGkuQ29sdW1uSGVhZGVyVHlwZS5WQUxVRV9DSEFOR0UpLHYoMSksYigibmdTd2l0Y2hDYXNlIixpLkNvbHVtbkhlYWRlclR5cGUuUEVSQ0VOVEFHRV9DSEFOR0UpKX0sZGVwZW5kZW5jaWVzOltOZSxlbyxtcixrcixkdSxibl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OnRhYmxlLWNlbGx9LmNlbGxbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXh9LmNlbGxbX25nY29udGVudC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMnB4O3dpZHRoOjEycHh9LmNlbGxbX25nY29udGVudC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVdICAgICBwYXRoe2ZpbGw6dW5zZXR9LmV4dHJhLXJpZ2h0LXBhZGRpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctcmlnaHQ6MXB4fSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksZ0xlPVsiKiJdLGRBPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLWRhdGEtdGFibGUtY29udGVudC1yb3ciXV0sbmdDb250ZW50U2VsZWN0b3JzOmdMZSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGZuKCksVHQoMCkpfSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogdGFibGUtcm93O1xuICAgICAgfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gX0xlKG4sdCl7aWYoMSZuJiZrKDAsIm1hdC1pY29uIiw3KSwyJm4pe2xldCBlPXcoMik7YigibmdDbGFzcyIsZS5oZWFkZXIubmFtZT09PWUuc29ydGluZ0luZm8ubmFtZT8ic2hvdyI6InNob3ctb24taG92ZXIiKX19ZnVuY3Rpb24gYkxlKG4sdCl7aWYoMSZuJiZrKDAsIm1hdC1pY29uIiw4KSwyJm4pe2xldCBlPXcoMik7YigibmdDbGFzcyIsZS5oZWFkZXIubmFtZT09PWUuc29ydGluZ0luZm8ubmFtZT8ic2hvdyI6InNob3ctb24taG92ZXIiKX19ZnVuY3Rpb24gdkxlKG4sdCl7aWYoMSZuKXtsZXQgZT1UZSgpO2YoMCwiYnV0dG9uIiw0KSxBKCJjbGljayIsZnVuY3Rpb24ocil7bmUoZSk7bGV0IG89dygpO3JldHVybiByLnN0b3BQcm9wYWdhdGlvbigpLGllKG8uaGVhZGVyQ2xpY2tlZEhhbmRsZXIoKSl9KSxTKDEsX0xlLDEsMSwibWF0LWljb24iLDUpLFMoMixiTGUsMSwxLCJtYXQtaWNvbiIsNiksZygpfWlmKDImbil7bGV0IGU9dygpO3YoMSksYigibmdJZiIsZS5zb3J0aW5nSW5mby5vcmRlcj09PWUuU29ydGluZ09yZGVyLkFTQ0VORElOR3x8ZS5oZWFkZXIubmFtZSE9PWUuc29ydGluZ0luZm8ubmFtZSksdigxKSxiKCJuZ0lmIixlLnNvcnRpbmdJbmZvLm9yZGVyPT09ZS5Tb3J0aW5nT3JkZXIuREVTQ0VORElORyYmZS5oZWFkZXIubmFtZT09PWUuc29ydGluZ0luZm8ubmFtZSl9fWZ1bmN0aW9uIHlMZShuLHQpe2lmKDEmbil7bGV0IGU9VGUoKTtmKDAsImJ1dHRvbiIsOSksQSgiY2xpY2siLGZ1bmN0aW9uKHIpe3JldHVybiBuZShlKSxpZSh3KCkub25Db250ZXh0TWVudU9wZW5lZChyKSl9KSxrKDEsIm1hdC1pY29uIiwxMCksZygpfX12YXIgeExlPVsiKiJdLGZfPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmRpc2FibGVDb250ZXh0TWVudT0hMSx0aGlzLmRyYWdTdGFydD1uZXcgRix0aGlzLmRyYWdFbmQ9bmV3IEYsdGhpcy5kcmFnRW50ZXI9bmV3IEYsdGhpcy5oZWFkZXJDbGlja2VkPW5ldyBGLHRoaXMuY29udGV4dE1lbnVPcGVuZWQ9bmV3IEYsdGhpcy5oaWdobGlnaHRTdHlsZSQ9bmV3IHhyKHt9KSx0aGlzLlNvcnRpbmdPcmRlcj1Mcn1vbkNvbnRleHRNZW51T3BlbmVkKGUpe3RoaXMuZGlzYWJsZUNvbnRleHRNZW51fHx0aGlzLmNvbnRleHRNZW51T3BlbmVkLmVtaXQoZSl9aGVhZGVyQ2xpY2tlZEhhbmRsZXIoKXt0aGlzLmhlYWRlci5zb3J0YWJsZSYmdGhpcy5oZWFkZXJDbGlja2VkLmVtaXQodGhpcy5oZWFkZXIubmFtZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLWRhdGEtdGFibGUtaGVhZGVyLWNlbGwiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZBKCJjb250ZXh0bWVudSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25Db250ZXh0TWVudU9wZW5lZChvKX0pfSxpbnB1dHM6e2hlYWRlcjoiaGVhZGVyIixzb3J0aW5nSW5mbzoic29ydGluZ0luZm8iLGRpc2FibGVDb250ZXh0TWVudToiZGlzYWJsZUNvbnRleHRNZW51In0sb3V0cHV0czp7ZHJhZ1N0YXJ0OiJkcmFnU3RhcnQiLGRyYWdFbmQ6ImRyYWdFbmQiLGRyYWdFbnRlcjoiZHJhZ0VudGVyIixoZWFkZXJDbGlja2VkOiJoZWFkZXJDbGlja2VkIixjb250ZXh0TWVudU9wZW5lZDoiY29udGV4dE1lbnVPcGVuZWQifSxuZ0NvbnRlbnRTZWxlY3RvcnM6eExlLGRlY2xzOjYsdmFyczo3LGNvbnN0czpbWzEsImNlbGwiLDMsImRyYWdnYWJsZSIsIm5nQ2xhc3MiLCJkcmFnc3RhcnQiLCJkcmFnZW5kIiwiZHJhZ2VudGVyIiwiY2xpY2siXSxbMywiaGVhZGVyIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJjbGFzcyIsInNvcnRpbmctaWNvbi1jb250YWluZXIiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJjbGFzcyIsImNvbnRleHQtbWVudS1jb250YWluZXIgc2hvdy1vbi1ob3ZlciIsMywiY2xpY2siLDQsIm5nSWYiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsMSwic29ydGluZy1pY29uLWNvbnRhaW5lciIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJhcnJvd191cHdhcmRfMjRweCIsMywibmdDbGFzcyIsNCwibmdJZiJdLFsic3ZnSWNvbiIsImFycm93X2Rvd253YXJkXzI0cHgiLDMsIm5nQ2xhc3MiLDQsIm5nSWYiXSxbInN2Z0ljb24iLCJhcnJvd191cHdhcmRfMjRweCIsMywibmdDbGFzcyJdLFsic3ZnSWNvbiIsImFycm93X2Rvd253YXJkXzI0cHgiLDMsIm5nQ2xhc3MiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsMSwiY29udGV4dC1tZW51LWNvbnRhaW5lciIsInNob3ctb24taG92ZXIiLDMsImNsaWNrIl0sWyJzdmdJY29uIiwibW9yZV92ZXJ0XzI0cHgiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihmbigpLGYoMCwiZGl2IiwwKSxBKCJkcmFnc3RhcnQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuZHJhZ1N0YXJ0LmVtaXQoaS5oZWFkZXIpfSkoImRyYWdlbmQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuZHJhZ0VuZC5lbWl0KCl9KSgiZHJhZ2VudGVyIixmdW5jdGlvbigpe3JldHVybiBpLmRyYWdFbnRlci5lbWl0KGkuaGVhZGVyKX0pKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5oZWFkZXJDbGlja2VkSGFuZGxlcigpfSksVSgxLCJhc3luYyIpLFR0KDIpLGsoMywidGItZGF0YS10YWJsZS1oZWFkZXIiLDEpLFMoNCx2TGUsMywyLCJidXR0b24iLDIpLFMoNSx5TGUsMiwwLCJidXR0b24iLDMpLGcoKSksMiZlJiYoYigiZHJhZ2dhYmxlIixpLmhlYWRlci5tb3ZhYmxlKSgibmdDbGFzcyIsRygxLDUsaS5oaWdobGlnaHRTdHlsZSQpKSx2KDMpLGIoImhlYWRlciIsaS5oZWFkZXIpLHYoMSksYigibmdJZiIsaS5oZWFkZXIuc29ydGFibGUpLHYoMSksYigibmdJZiIsKGkuaGVhZGVyLnJlbW92YWJsZXx8aS5oZWFkZXIuc29ydGFibGUpJiYhaS5kaXNhYmxlQ29udGV4dE1lbnUpKX0sZGVwZW5kZW5jaWVzOlt3bixOZSxibixFcixXVCxjdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OnRhYmxlLWNlbGw7dmVydGljYWwtYWxpZ246Ym90dG9tfVtfbmdob3N0LSVDT01QJV06aG92ZXIgICAuc2hvdy1vbi1ob3Zlcltfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouM31bX25naG9zdC0lQ09NUCVdICAgLnNob3ctb24taG92ZXJbX25nY29udGVudC0lQ09NUCVdOmhvdmVye29wYWNpdHk6MX1bX25naG9zdC0lQ09NUCVdICAgLnNob3ctb24taG92ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3Vze29wYWNpdHk6MX0uY2VsbFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleH0uY2VsbFtfbmdjb250ZW50LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEycHg7d2lkdGg6MTJweDtsaW5lLWhlaWdodDoxfS5jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvblttYXQtaWNvbi1idXR0b25dLm1hdC1tZGMtaWNvbi1idXR0b24uc29ydGluZy1pY29uLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvblttYXQtaWNvbi1idXR0b25dLm1hdC1tZGMtaWNvbi1idXR0b24uY29udGV4dC1tZW51LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTZweDtoZWlnaHQ6MTZweDstLXRiLWljb24td2lkdGg6IDEycHg7LS10Yi1pY29uLWhlaWdodDogMTJweDtib3JkZXItcmFkaXVzOjVweDtmb250LXNpemU6MTJweDtwYWRkaW5nOjRweH0uY2VsbFtfbmdjb250ZW50LSVDT01QJV0gICAuc29ydGluZy1pY29uLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAgIHBhdGh7ZmlsbDp1bnNldH0uc2hvd1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5zaG93LW9uLWhvdmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmhpZ2hsaWdodFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZWVlfS5oaWdobGlnaHQtYm9yZGVyLXJpZ2h0W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItcmlnaHQ6MnB4IHNvbGlkICNmZjk4MDB9LmhpZ2hsaWdodC1ib3JkZXItbGVmdFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MnB4IHNvbGlkICNmZjk4MDB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSx1QT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMub3ZlcmxheT1lLHRoaXMuY3VzdG9tTW9kYWxSZWZzPVtdfWNyZWF0ZU5leHRUb0VsZW1lbnQoZSxpLHIsbz17b3JpZ2luWDoiZW5kIixvcmlnaW5ZOiJ0b3AiLG92ZXJsYXlYOiJzdGFydCIsb3ZlcmxheVk6InRvcCJ9KXtsZXQgYT10aGlzLm92ZXJsYXkucG9zaXRpb24oKS5mbGV4aWJsZUNvbm5lY3RlZFRvKGkpO28mJihhPWEud2l0aFBvc2l0aW9ucyhbb10pKTtsZXQgcz10aGlzLm92ZXJsYXkuY3JlYXRlKHtwb3NpdGlvblN0cmF0ZWd5OmEsaGFzQmFja2Ryb3A6ITF9KTtzLmF0dGFjaChuZXcgVG8oZSxyKSk7bGV0IGw9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLm9uQ2xvc2U9bmV3IEVlLHRoaXMub3ZlcmxheVJlZj10fX0ocyk7dGhpcy5jdXN0b21Nb2RhbFJlZnMucHVzaChsKSxzZXRUaW1lb3V0KCgpPT57bGV0IGQ9cy5vdXRzaWRlUG9pbnRlckV2ZW50cygpLnN1YnNjcmliZSh1PT57dGhpcy5jdXN0b21Nb2RhbFJlZnMuZXZlcnkocD0+IWZ1bmN0aW9uKG4sdCl7bGV0IGU9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gZS54PD1uLmNsaWVudFgmJm4uY2xpZW50WDw9ZS54K2Uud2lkdGgmJmUueTw9bi5jbGllbnRZJiZuLmNsaWVudFk8PWUueStlLmhlaWdodH0odSxwLm92ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQpKSYmdGhpcy5jbG9zZUFsbCgpfSk7bC5zdWJzY3JpcHRpb25zLnB1c2goZCl9KTtsZXQgYz1zLmtleWRvd25FdmVudHMoKS5zdWJzY3JpYmUoZD0+eyJFc2NhcGUiPT09ZC5rZXkmJnRoaXMuY2xvc2VBbGwoKX0pO3JldHVybiBsLnN1YnNjcmlwdGlvbnMucHVzaChjKSxsfWNsb3NlKGUpe2xldCBpPXRoaXMuY3VzdG9tTW9kYWxSZWZzLmZpbmRJbmRleChyPT5yPT09ZSk7LTEhPT1pPyhlLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChyPT57ci51bnN1YnNjcmliZSgpfSksZS5zdWJzY3JpcHRpb25zPVtdLGUub3ZlcmxheVJlZj8uZGlzcG9zZSgpLHRoaXMuY3VzdG9tTW9kYWxSZWZzLnNwbGljZShpLDEpLGUub25DbG9zZS5uZXh0KCksZS5vbkNsb3NlLmNvbXBsZXRlKCkpOmNvbnNvbGUud2FybigiQ291bGQgbm90IGZpbmQgY3VzdG9tTW9kYWxSZWYiLGUpfWNsb3NlQWxsKCl7Zm9yKDt0aGlzLmN1c3RvbU1vZGFsUmVmcy5sZW5ndGg7KXRoaXMuY2xvc2UodGhpcy5jdXN0b21Nb2RhbFJlZnNbMF0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKE9pKSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksQ0xlPVsic2VhcmNoIl0sTUxlPVsiY29sdW1uTGlzdCJdO2Z1bmN0aW9uIHdMZShuLHQpe2lmKDEmbil7bGV0IGU9VGUoKTtmKDAsImRpdiIsMTApKDEsImxhYmVsIiksVCgyLCIgV2FybmluZzogVGhlcmUgd2VyZSB0b28gbWFueSBjb2x1bW5zIHRvIGxvYWQgYWxsIG9mIHRoZW0gZWZmaWNpZW50bHkuICIpLGcoKSxmKDMsImJ1dHRvbiIsMTEpLEEoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBuZShlKSxpZSh3KCkubG9hZEFsbENvbHVtbnNDbGlja2VkKCkpfSksVCg0LCIgTG9hZCBhbGwgYW55d2F5ICIpLGcoKSgpfX1mdW5jdGlvbiBTTGUobix0KXtpZigxJm4mJihmKDAsInNwYW4iLDE0KSxUKDEpLGcoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdDt2KDEpLFZlKCIgIixlLCIgIil9fXZhciBFTGU9ZnVuY3Rpb24obil7cmV0dXJue3NlbGVjdGVkOm59fSxUTGU9ZnVuY3Rpb24oKXtyZXR1cm57c2Vuc2l0aXZpdHk6ImFjY2VudCJ9fTtmdW5jdGlvbiBETGUobix0KXtpZigxJm4pe2xldCBlPVRlKCk7ZigwLCJidXR0b24iLDEyKSxBKCJjbGljayIsZnVuY3Rpb24oKXtsZXQgbz1uZShlKS4kaW1wbGljaXQ7cmV0dXJuIGllKHcoKS5zZWxlY3RDb2x1bW4obykpfSksVSgxLCJhc3luYyIpLFQoMiksUygzLFNMZSwyLDEsInNwYW4iLDEzKSxnKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXQuaW5kZXgscj13KCk7YigibmdDbGFzcyIsVW4oNyxFTGUsaT09PUcoMSw1LHIuc2VsZWN0ZWRJbmRleCQpKSkoIm1hdFRvb2x0aXAiLGUubmFtZSkoIm1hdFRvb2x0aXBEaXNhYmxlZCIsMD09PWUubmFtZS5sb2NhbGVDb21wYXJlKGUuZGlzcGxheU5hbWUsdm9pZCAwLG1jKDksVExlKSkpLHYoMiksVmUoIiAiLGUuZGlzcGxheU5hbWUsIiAiKSx2KDEpLGIoIm5nRm9yT2YiLGUudGFncyl9fXZhciBadGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuc2VsZWN0YWJsZUNvbHVtbnM9W10sdGhpcy5jb2x1bW5TZWxlY3RlZD1uZXcgRix0aGlzLmxvYWRBbGxDb2x1bW5zPW5ldyBGLHRoaXMuc2VhcmNoSW5wdXQ9IiIsdGhpcy5zZWxlY3RlZEluZGV4JD1uZXcgeHIoMCksdGhpcy5pc0FjdGl2ZT0hMX1uZ09uSW5pdCgpe3RoaXMuc2VsZWN0ZWRJbmRleCQuc3Vic2NyaWJlKCgpPT57aWYoIXRoaXMuY29sdW1uTGlzdClyZXR1cm47bGV0IGU9dGhpcy5jb2x1bW5MaXN0Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigiYnV0dG9uLnNlbGVjdGVkIik7aWYoIWUpcmV0dXJuO2xldCBpPXRoaXMuY29sdW1uTGlzdC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCxyPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0LG89dGhpcy5jb2x1bW5MaXN0Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wO3RoaXMuc2VsZWN0ZWRJbmRleCQuZ2V0VmFsdWUoKSpyPG8mJih0aGlzLmNvbHVtbkxpc3QubmF0aXZlRWxlbWVudC5zY3JvbGxUb3A9dGhpcy5zZWxlY3RlZEluZGV4JC5nZXRWYWx1ZSgpKnIpLCh0aGlzLnNlbGVjdGVkSW5kZXgkLmdldFZhbHVlKCkrMSkqcj5vK2kmJih0aGlzLmNvbHVtbkxpc3QubmF0aXZlRWxlbWVudC5zY3JvbGxUb3A9KHRoaXMuc2VsZWN0ZWRJbmRleCQuZ2V0VmFsdWUoKSsxKSpyLWkpfSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zZWFyY2hJbnB1dD0iIix0aGlzLnNlbGVjdGVkSW5kZXgkLm5leHQoMCksdGhpcy5hY3RpdmF0ZSgpLHNldFRpbWVvdXQoKCk9Pnt0aGlzLnNlYXJjaEZpZWxkPy5uYXRpdmVFbGVtZW50LmZvY3VzKCl9KX1nZXRGaWx0ZXJlZENvbHVtbnMoKXtyZXR1cm4gdGhpcy5zZWxlY3RhYmxlQ29sdW1ucy5maWx0ZXIoZT0+ZS5uYW1lLnRvTG93ZXJDYXNlKCkubWF0Y2godGhpcy5zZWFyY2hJbnB1dC50b0xvd2VyQ2FzZSgpKXx8ZS5kaXNwbGF5TmFtZS50b0xvd2VyQ2FzZSgpLm1hdGNoKHRoaXMuc2VhcmNoSW5wdXQudG9Mb3dlckNhc2UoKSkpfXNlYXJjaElucHV0Q2hhbmdlZCgpe3RoaXMuc2VsZWN0ZWRJbmRleCQubmV4dChNYXRoLm1pbih0aGlzLnNlbGVjdGVkSW5kZXgkLmdldFZhbHVlKCksdGhpcy5zZWxlY3RhYmxlQ29sdW1ucy5sZW5ndGgtMSkpfXNlbGVjdENvbHVtbihlKXt0aGlzLnNlbGVjdGVkSW5kZXgkLm5leHQoMCksdGhpcy5jb2x1bW5TZWxlY3RlZC5lbWl0KGUpfWxvYWRBbGxDb2x1bW5zQ2xpY2tlZCgpe3RoaXMubG9hZEFsbENvbHVtbnMuZW1pdCgpfWFjdGl2YXRlKCl7dGhpcy5pc0FjdGl2ZT0hMH1kZWFjdGl2YXRlKCl7dGhpcy5pc0FjdGl2ZT0hMX1vblVwQXJyb3coKXshdGhpcy5pc0FjdGl2ZXx8dGhpcy5zZWxlY3RlZEluZGV4JC5uZXh0KE1hdGgubWF4KHRoaXMuc2VsZWN0ZWRJbmRleCQuZ2V0VmFsdWUoKS0xLDApKX1vbkRvd25BcnJvdygpeyF0aGlzLmlzQWN0aXZlfHx0aGlzLnNlbGVjdGVkSW5kZXgkLm5leHQoTWF0aC5taW4odGhpcy5zZWxlY3RlZEluZGV4JC5nZXRWYWx1ZSgpKzEsdGhpcy5nZXRGaWx0ZXJlZENvbHVtbnMoKS5sZW5ndGgtMSkpfW9uRW50ZXJQcmVzc2VkKCl7IXRoaXMuaXNBY3RpdmV8fHRoaXMuc2VsZWN0Q29sdW1uKHRoaXMuZ2V0RmlsdGVyZWRDb2x1bW5zKClbdGhpcy5zZWxlY3RlZEluZGV4JC5nZXRWYWx1ZSgpXSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLWRhdGEtdGFibGUtY29sdW1uLXNlbGVjdG9yLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihVZShDTGUsNSksVWUoTUxlLDUpKSwyJmUpe2xldCByO2JlKHI9dmUoKSkmJihpLnNlYXJjaEZpZWxkPXIuZmlyc3QpLGJlKHI9dmUoKSkmJihpLmNvbHVtbkxpc3Q9ci5maXJzdCl9fSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJkEoImtleWRvd24uYXJyb3d1cCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25VcEFycm93KG8pfSwwLHN1KSgia2V5ZG93bi5hcnJvd2Rvd24iLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uRG93bkFycm93KG8pfSwhMSxzdSkoImtleWRvd24uZW50ZXIiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uRW50ZXJQcmVzc2VkKG8pfSwhMSxzdSl9LGlucHV0czp7c2VsZWN0YWJsZUNvbHVtbnM6InNlbGVjdGFibGVDb2x1bW5zIixudW1Db2x1bW5zTG9hZGVkOiJudW1Db2x1bW5zTG9hZGVkIixoYXNNb3JlQ29sdW1uc1RvTG9hZDoiaGFzTW9yZUNvbHVtbnNUb0xvYWQifSxvdXRwdXRzOntjb2x1bW5TZWxlY3RlZDoiY29sdW1uU2VsZWN0ZWQiLGxvYWRBbGxDb2x1bW5zOiJsb2FkQWxsQ29sdW1ucyJ9LGRlY2xzOjE0LHZhcnM6NCxjb25zdHM6W1sxLCJjb250ZW50cyJdLFsic3Vic2NyaXB0U2l6aW5nIiwiZHluYW1pYyIsMSwic2VhcmNoLWFyZWEiXSxbIm1hdFByZWZpeCIsIiIsInN2Z0ljb24iLCJzZWFyY2hfMjRweCIsMSwic2VhcmNoLWljb24iXSxbIm1hdElucHV0IiwiIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSJdLFsic2VhcmNoIiwiIl0sWzEsImNvbHVtbi1sb2FkLWluZm8iXSxbImNsYXNzIiwibG9hZC1tb3JlLWNvbHVtbnMiLDQsIm5nSWYiXSxbMSwiY29sdW1uLWxpc3QiXSxbImNvbHVtbkxpc3QiLCIiXSxbIm1hdC1idXR0b24iLCIiLCJjbGFzcyIsImNvbHVtbi1idXR0b24iLDMsIm5nQ2xhc3MiLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJsb2FkLW1vcmUtY29sdW1ucyJdLFsibWF0LXN0cm9rZWQtYnV0dG9uIiwiIiwzLCJjbGljayJdLFsibWF0LWJ1dHRvbiIsIiIsMSwiY29sdW1uLWJ1dHRvbiIsMywibmdDbGFzcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJjbGljayJdLFsiY2xhc3MiLCJ0YWciLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJ0YWciXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihmKDAsImRpdiIsMCkoMSwibWF0LWZvcm0tZmllbGQiLDEpLGsoMiwibWF0LWljb24iLDIpLGYoMywibWF0LWxhYmVsIiksVCg0LCJTZWFyY2giKSxnKCksZig1LCJpbnB1dCIsMyw0KSxBKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5zZWFyY2hJbnB1dD1vfSkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuc2VhcmNoSW5wdXRDaGFuZ2VkKCl9KSxnKCkoKSxmKDcsImRpdiIsNSkoOCwibGFiZWwiKSxUKDkpLGcoKSxTKDEwLHdMZSw1LDAsImRpdiIsNiksZygpLGYoMTEsImRpdiIsNyw4KSxTKDEzLERMZSw0LDEwLCJidXR0b24iLDkpLGcoKSgpKSwyJmUmJih2KDUpLGIoIm5nTW9kZWwiLGkuc2VhcmNoSW5wdXQpLHYoNCksVmUoIiIsaS5udW1Db2x1bW5zTG9hZGVkLCIgY29sdW1ucyBsb2FkZWQuIiksdigxKSxiKCJuZ0lmIixpLmhhc01vcmVDb2x1bW5zVG9Mb2FkKSx2KDMpLGIoIm5nRm9yT2YiLGkuZ2V0RmlsdGVyZWRDb2x1bW5zKCkpKX0sZGVwZW5kZW5jaWVzOlt3bixubixOZSxibixxdSxQYyxubCxGOSxraSxVdSx4ZyxpeSxHVCxjdF0sc3R5bGVzOlsiLmNvbnRlbnRzW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7cGFkZGluZzo4cHg7Ym9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyOjFweCBzb2xpZDtib3gtc2hhZG93OjBweCA0cHggNHB4IHJnYmEoMCwwLDAsLjI1KTtib3JkZXItY29sb3I6I2ViZWJlYjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmNvbnRlbnRzW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmNvbnRlbnRzW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6IzU1NTtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9LmNvbnRlbnRzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWFyY2gtYXJlYVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWJvdHRvbToxMnB4fS5jb250ZW50c1tfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uLWxvYWQtaW5mb1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmb250LXNpemU6MTNweDtmb250LXN0eWxlOml0YWxpYzttYXJnaW4tYm90dG9tOjEycHh9LmNvbnRlbnRzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5sb2FkLW1vcmUtY29sdW1uc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2U1MzkzNTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21hcmdpbi10b3A6NnB4fS5jb250ZW50c1tfbmdjb250ZW50LSVDT01QJV0gICAubG9hZC1tb3JlLWNvbHVtbnNbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2hlaWdodDoyNHB4O21hcmdpbi10b3A6OHB4fS5jb250ZW50c1tfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uLWxpc3RbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47d2lkdGg6MTAwJTttYXgtaGVpZ2h0OjMwMHB4O292ZXJmbG93LXk6YXV0b30uY29udGVudHNbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZsZXgtc2hyaW5rOjA7aGVpZ2h0OjQ4cHg7anVzdGlmeS1jb250ZW50OmxlZnQ7d2lkdGg6MTAwJX0uY29udGVudHNbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1idXR0b24uc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2VlZX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuY29udGVudHNbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1idXR0b24uc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuY29udGVudHNbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1idXR0b24uc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2JkYmRiZH0uY29udGVudHNbX25nY29udGVudC0lQ09NUCVdICAgLnRhZ1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwO2JvcmRlci1yYWRpdXM6OHB4O2ZvbnQtc2l6ZToxMnB4O2ZvbnQtc3R5bGU6aXRhbGljO2ZvbnQtd2VpZ2h0Om5vcm1hbDtwYWRkaW5nOjRweH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLEFMZT1bInBhbmVsIl07ZnVuY3Rpb24gUkxlKG4sdCl7aWYoMSZuJiYoZigwLCJkaXYiLDAsMSksVHQoMiksZygpKSwyJm4pe2xldCBlPXQuaWQsaT13KCk7YigiaWQiLGkuaWQpKCJuZ0NsYXNzIixpLl9jbGFzc0xpc3QpKCJAcGFuZWxBbmltYXRpb24iLGkuaXNPcGVuPyJ2aXNpYmxlIjoiaGlkZGVuIiksQmUoImFyaWEtbGFiZWwiLGkuYXJpYUxhYmVsfHxudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixpLl9nZXRQYW5lbEFyaWFMYWJlbGxlZGJ5KGUpKX19dmFyIFBMZT1bIioiXSxrTGU9ZnIoInBhbmVsQW5pbWF0aW9uIixbU2koInZvaWQsIGhpZGRlbiIscm4oe29wYWNpdHk6MCx0cmFuc2Zvcm06InNjYWxlWSgwLjgpIn0pKSxiaSgiOmVudGVyLCBoaWRkZW4gPT4gdmlzaWJsZSIsW0xiKFtNaSgiMC4wM3MgbGluZWFyIixybih7b3BhY2l0eToxfSkpLE1pKCIwLjEycyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSIscm4oe3RyYW5zZm9ybToic2NhbGVZKDEpIn0pKV0pXSksYmkoIjpsZWF2ZSwgdmlzaWJsZSA9PiBoaWRkZW4iLFtNaSgiMC4wNzVzIGxpbmVhciIscm4oe29wYWNpdHk6MH0pKV0pXSksT0xlPTAsRkxlPWdvKGNsYXNze30pLEt0ZT1uZXcgdGUoIm1hdC1hdXRvY29tcGxldGUtZGVmYXVsdC1vcHRpb25zIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybnthdXRvQWN0aXZlRmlyc3RPcHRpb246ITEsYXV0b1NlbGVjdEFjdGl2ZU9wdGlvbjohMSxoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yOiExfX19KSxMTGU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEZMZXtnZXQgaXNPcGVuKCl7cmV0dXJuIHRoaXMuX2lzT3BlbiYmdGhpcy5zaG93UGFuZWx9X3NldENvbG9yKGUpe3RoaXMuX2NvbG9yPWUsdGhpcy5fc2V0VGhlbWVDbGFzc2VzKHRoaXMuX2NsYXNzTGlzdCl9Z2V0IGF1dG9BY3RpdmVGaXJzdE9wdGlvbigpe3JldHVybiB0aGlzLl9hdXRvQWN0aXZlRmlyc3RPcHRpb259c2V0IGF1dG9BY3RpdmVGaXJzdE9wdGlvbihlKXt0aGlzLl9hdXRvQWN0aXZlRmlyc3RPcHRpb249dnQoZSl9Z2V0IGF1dG9TZWxlY3RBY3RpdmVPcHRpb24oKXtyZXR1cm4gdGhpcy5fYXV0b1NlbGVjdEFjdGl2ZU9wdGlvbn1zZXQgYXV0b1NlbGVjdEFjdGl2ZU9wdGlvbihlKXt0aGlzLl9hdXRvU2VsZWN0QWN0aXZlT3B0aW9uPXZ0KGUpfXNldCBjbGFzc0xpc3QoZSl7dGhpcy5fY2xhc3NMaXN0PWUmJmUubGVuZ3RoP2Z1bmN0aW9uKG4sdD0vXHMrLyl7bGV0IGU9W107aWYobnVsbCE9bil7bGV0IGk9QXJyYXkuaXNBcnJheShuKT9uOmAke259YC5zcGxpdCh0KTtmb3IobGV0IHIgb2YgaSl7bGV0IG89YCR7cn1gLnRyaW0oKTtvJiZlLnB1c2gobyl9fXJldHVybiBlfShlKS5yZWR1Y2UoKGkscik9PihpW3JdPSEwLGkpLHt9KTp7fSx0aGlzLl9zZXRWaXNpYmlsaXR5Q2xhc3Nlcyh0aGlzLl9jbGFzc0xpc3QpLHRoaXMuX3NldFRoZW1lQ2xhc3Nlcyh0aGlzLl9jbGFzc0xpc3QpLHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc05hbWU9IiJ9Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1lLHRoaXMuX2VsZW1lbnRSZWY9aSx0aGlzLl9kZWZhdWx0cz1yLHRoaXMuX2FjdGl2ZU9wdGlvbkNoYW5nZXM9RW4uRU1QVFksdGhpcy5zaG93UGFuZWw9ITEsdGhpcy5faXNPcGVuPSExLHRoaXMuZGlzcGxheVdpdGg9bnVsbCx0aGlzLl9hdXRvQWN0aXZlRmlyc3RPcHRpb249ISF0aGlzLl9kZWZhdWx0cy5hdXRvQWN0aXZlRmlyc3RPcHRpb24sdGhpcy5fYXV0b1NlbGVjdEFjdGl2ZU9wdGlvbj0hIXRoaXMuX2RlZmF1bHRzLmF1dG9TZWxlY3RBY3RpdmVPcHRpb24sdGhpcy5vcHRpb25TZWxlY3RlZD1uZXcgRix0aGlzLm9wZW5lZD1uZXcgRix0aGlzLmNsb3NlZD1uZXcgRix0aGlzLm9wdGlvbkFjdGl2YXRlZD1uZXcgRix0aGlzLl9jbGFzc0xpc3Q9e30sdGhpcy5pZD0ibWF0LWF1dG9jb21wbGV0ZS0iK09MZSsrLHRoaXMuaW5lcnRHcm91cHM9bz8uU0FGQVJJfHwhMX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLl9rZXlNYW5hZ2VyPW5ldyBsZyh0aGlzLm9wdGlvbnMpLndpdGhXcmFwKCksdGhpcy5fYWN0aXZlT3B0aW9uQ2hhbmdlcz10aGlzLl9rZXlNYW5hZ2VyLmNoYW5nZS5zdWJzY3JpYmUoZT0+e3RoaXMuaXNPcGVuJiZ0aGlzLm9wdGlvbkFjdGl2YXRlZC5lbWl0KHtzb3VyY2U6dGhpcyxvcHRpb246dGhpcy5vcHRpb25zLnRvQXJyYXkoKVtlXXx8bnVsbH0pfSksdGhpcy5fc2V0VmlzaWJpbGl0eSgpfW5nT25EZXN0cm95KCl7dGhpcy5fa2V5TWFuYWdlcj8uZGVzdHJveSgpLHRoaXMuX2FjdGl2ZU9wdGlvbkNoYW5nZXMudW5zdWJzY3JpYmUoKX1fc2V0U2Nyb2xsVG9wKGUpe3RoaXMucGFuZWwmJih0aGlzLnBhbmVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wPWUpfV9nZXRTY3JvbGxUb3AoKXtyZXR1cm4gdGhpcy5wYW5lbD90aGlzLnBhbmVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wOjB9X3NldFZpc2liaWxpdHkoKXt0aGlzLnNob3dQYW5lbD0hIXRoaXMub3B0aW9ucy5sZW5ndGgsdGhpcy5fc2V0VmlzaWJpbGl0eUNsYXNzZXModGhpcy5fY2xhc3NMaXN0KSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX1fZW1pdFNlbGVjdEV2ZW50KGUpe2xldCBpPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuc291cmNlPXQsdGhpcy5vcHRpb249ZX19KHRoaXMsZSk7dGhpcy5vcHRpb25TZWxlY3RlZC5lbWl0KGkpfV9nZXRQYW5lbEFyaWFMYWJlbGxlZGJ5KGUpe3JldHVybiB0aGlzLmFyaWFMYWJlbD9udWxsOnRoaXMuYXJpYUxhYmVsbGVkYnk/KGU/ZSsiICI6IiIpK3RoaXMuYXJpYUxhYmVsbGVkYnk6ZX1fc2V0VmlzaWJpbGl0eUNsYXNzZXMoZSl7ZVt0aGlzLl92aXNpYmxlQ2xhc3NdPXRoaXMuc2hvd1BhbmVsLGVbdGhpcy5faGlkZGVuQ2xhc3NdPSF0aGlzLnNob3dQYW5lbH1fc2V0VGhlbWVDbGFzc2VzKGUpe2VbIm1hdC1wcmltYXJ5Il09InByaW1hcnkiPT09dGhpcy5fY29sb3IsZVsibWF0LXdhcm4iXT0id2FybiI9PT10aGlzLl9jb2xvcixlWyJtYXQtYWNjZW50Il09ImFjY2VudCI9PT10aGlzLl9jb2xvcn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhRdCksQyh4ZSksQyhLdGUpLEMoVm4pKX0sbi5cdTAyNzVkaXI9TWUoe3R5cGU6bix2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihVZShvaSw3KSxVZShBTGUsNSkpLDImZSl7bGV0IHI7YmUocj12ZSgpKSYmKGkudGVtcGxhdGU9ci5maXJzdCksYmUocj12ZSgpKSYmKGkucGFuZWw9ci5maXJzdCl9fSxpbnB1dHM6e2FyaWFMYWJlbDpbImFyaWEtbGFiZWwiLCJhcmlhTGFiZWwiXSxhcmlhTGFiZWxsZWRieTpbImFyaWEtbGFiZWxsZWRieSIsImFyaWFMYWJlbGxlZGJ5Il0sZGlzcGxheVdpdGg6ImRpc3BsYXlXaXRoIixhdXRvQWN0aXZlRmlyc3RPcHRpb246ImF1dG9BY3RpdmVGaXJzdE9wdGlvbiIsYXV0b1NlbGVjdEFjdGl2ZU9wdGlvbjoiYXV0b1NlbGVjdEFjdGl2ZU9wdGlvbiIscGFuZWxXaWR0aDoicGFuZWxXaWR0aCIsY2xhc3NMaXN0OlsiY2xhc3MiLCJjbGFzc0xpc3QiXX0sb3V0cHV0czp7b3B0aW9uU2VsZWN0ZWQ6Im9wdGlvblNlbGVjdGVkIixvcGVuZWQ6Im9wZW5lZCIsY2xvc2VkOiJjbG9zZWQiLG9wdGlvbkFjdGl2YXRlZDoib3B0aW9uQWN0aXZhdGVkIn0sZmVhdHVyZXM6W1hlXX0pLG59KSgpLEp0ZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgTExle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl92aXNpYmxlQ2xhc3M9Im1hdC1tZGMtYXV0b2NvbXBsZXRlLXZpc2libGUiLHRoaXMuX2hpZGRlbkNsYXNzPSJtYXQtbWRjLWF1dG9jb21wbGV0ZS1oaWRkZW4iLHRoaXMuX2hpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3I9dGhpcy5fZGVmYXVsdHMuaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvcj8/ITF9Z2V0IGhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IoKXtyZXR1cm4gdGhpcy5faGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvcn1zZXQgaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvcihlKXt0aGlzLl9oaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yPXZ0KGUpLHRoaXMuX3N5bmNQYXJlbnRQcm9wZXJ0aWVzKCl9X3N5bmNQYXJlbnRQcm9wZXJ0aWVzKCl7aWYodGhpcy5vcHRpb25zKWZvcihsZXQgZSBvZiB0aGlzLm9wdGlvbnMpZS5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9WG4obikpKShpfHxuKX19KCksbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtYXV0b2NvbXBsZXRlIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGUsaSxyKXtpZigxJmUmJihCbihyLGp2LDUpLEJuKHIsamEsNSkpLDImZSl7bGV0IG87YmUobz12ZSgpKSYmKGkub3B0aW9uR3JvdXBzPW8pLGJlKG89dmUoKSkmJihpLm9wdGlvbnM9byl9fSxob3N0QXR0cnM6WzEsIm1hdC1tZGMtYXV0b2NvbXBsZXRlIl0saW5wdXRzOntkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIixoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yOiJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIn0sZXhwb3J0QXM6WyJtYXRBdXRvY29tcGxldGUiXSxmZWF0dXJlczpbVnQoW3twcm92aWRlOlV2LHVzZUV4aXN0aW5nOm59XSksWGVdLG5nQ29udGVudFNlbGVjdG9yczpQTGUsZGVjbHM6MSx2YXJzOjAsY29uc3RzOltbInJvbGUiLCJsaXN0Ym94IiwxLCJtYXQtbWRjLWF1dG9jb21wbGV0ZS1wYW5lbCIsIm1kYy1tZW51LXN1cmZhY2UiLCJtZGMtbWVudS1zdXJmYWNlLS1vcGVuIiwzLCJpZCIsIm5nQ2xhc3MiXSxbInBhbmVsIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZm4oKSxTKDAsUkxlLDMsNSwibmctdGVtcGxhdGUiKSl9LGRlcGVuZGVuY2llczpbd25dLHN0eWxlczpbIi5tZGMtbWVudS1zdXJmYWNle2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWF4LXdpZHRoOmNhbGMoMTAwdncgLSAzMnB4KTttYXgtd2lkdGg6dmFyKC0tbWRjLW1lbnUtbWF4LXdpZHRoLCBjYWxjKDEwMHZ3IC0gMzJweCkpO21heC1oZWlnaHQ6Y2FsYygxMDB2aCAtIDMycHgpO21heC1oZWlnaHQ6dmFyKC0tbWRjLW1lbnUtbWF4LWhlaWdodCwgY2FsYygxMDB2aCAtIDMycHgpKTttYXJnaW46MDtwYWRkaW5nOjA7dHJhbnNmb3JtOnNjYWxlKDEpO3RyYW5zZm9ybS1vcmlnaW46dG9wIGxlZnQ7b3BhY2l0eTowO292ZXJmbG93OmF1dG87d2lsbC1jaGFuZ2U6dHJhbnNmb3JtLG9wYWNpdHk7ei1pbmRleDo4O2JvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6dmFyKC0tbWRjLXNoYXBlLW1lZGl1bSwgNHB4KTt0cmFuc2Zvcm0tb3JpZ2luLWxlZnQ6dG9wIGxlZnQ7dHJhbnNmb3JtLW9yaWdpbi1yaWdodDp0b3AgcmlnaHR9Lm1kYy1tZW51LXN1cmZhY2U6Zm9jdXN7b3V0bGluZTpub25lfS5tZGMtbWVudS1zdXJmYWNlLS1hbmltYXRpbmctb3BlbntkaXNwbGF5OmlubGluZS1ibG9jazt0cmFuc2Zvcm06c2NhbGUoMC44KTtvcGFjaXR5OjB9Lm1kYy1tZW51LXN1cmZhY2UtLW9wZW57ZGlzcGxheTppbmxpbmUtYmxvY2s7dHJhbnNmb3JtOnNjYWxlKDEpO29wYWNpdHk6MX0ubWRjLW1lbnUtc3VyZmFjZS0tYW5pbWF0aW5nLWNsb3NlZHtkaXNwbGF5OmlubGluZS1ibG9jaztvcGFjaXR5OjB9W2Rpcj1ydGxdIC5tZGMtbWVudS1zdXJmYWNlLC5tZGMtbWVudS1zdXJmYWNlW2Rpcj1ydGxde3RyYW5zZm9ybS1vcmlnaW4tbGVmdDp0b3AgcmlnaHQ7dHJhbnNmb3JtLW9yaWdpbi1yaWdodDp0b3AgbGVmdH0ubWRjLW1lbnUtc3VyZmFjZS0tYW5jaG9ye3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OnZpc2libGV9Lm1kYy1tZW51LXN1cmZhY2UtLWZpeGVke3Bvc2l0aW9uOmZpeGVkfS5tZGMtbWVudS1zdXJmYWNlLS1mdWxsd2lkdGh7d2lkdGg6MTAwJX0ubWRjLW1lbnUtc3VyZmFjZS5tYXQtbWRjLWF1dG9jb21wbGV0ZS1wYW5lbHt3aWR0aDoxMDAlO21heC1oZWlnaHQ6MjU2cHg7cG9zaXRpb246c3RhdGljO3Zpc2liaWxpdHk6aGlkZGVuO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyIHRvcDttYXJnaW46MDtwYWRkaW5nOjhweCAwO2xpc3Qtc3R5bGUtdHlwZTpub25lfS5tZGMtbWVudS1zdXJmYWNlLm1hdC1tZGMtYXV0b2NvbXBsZXRlLXBhbmVsOmZvY3Vze291dGxpbmU6bm9uZX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tZGMtbWVudS1zdXJmYWNlLm1hdC1tZGMtYXV0b2NvbXBsZXRlLXBhbmVse291dGxpbmU6c29saWQgMXB4fS5jZGstb3ZlcmxheS1wYW5lOm5vdCgubWF0LW1kYy1hdXRvY29tcGxldGUtcGFuZWwtYWJvdmUpIC5tZGMtbWVudS1zdXJmYWNlLm1hdC1tZGMtYXV0b2NvbXBsZXRlLXBhbmVse2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowfS5tYXQtbWRjLWF1dG9jb21wbGV0ZS1wYW5lbC1hYm92ZSAubWRjLW1lbnUtc3VyZmFjZS5tYXQtbWRjLWF1dG9jb21wbGV0ZS1wYW5lbHtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlciBib3R0b219Lm1kYy1tZW51LXN1cmZhY2UubWF0LW1kYy1hdXRvY29tcGxldGUtcGFuZWwubWF0LW1kYy1hdXRvY29tcGxldGUtdmlzaWJsZXt2aXNpYmlsaXR5OnZpc2libGV9Lm1kYy1tZW51LXN1cmZhY2UubWF0LW1kYy1hdXRvY29tcGxldGUtcGFuZWwubWF0LW1kYy1hdXRvY29tcGxldGUtaGlkZGVue3Zpc2liaWxpdHk6aGlkZGVufW1hdC1hdXRvY29tcGxldGV7ZGlzcGxheTpub25lfSJdLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W2tMZV19LGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksQkxlPXtwcm92aWRlOlhyLHVzZUV4aXN0aW5nOlduKCgpPT5LeCksbXVsdGk6ITB9LCR0ZT1uZXcgdGUoIm1hdC1hdXRvY29tcGxldGUtc2Nyb2xsLXN0cmF0ZWd5IiksSExlPXtwcm92aWRlOiR0ZSxkZXBzOltPaV0sdXNlRmFjdG9yeTpmdW5jdGlvbihuKXtyZXR1cm4oKT0+bi5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKX19LHpMZT0oKCk9PntjbGFzcyBue2dldCBhdXRvY29tcGxldGVEaXNhYmxlZCgpe3JldHVybiB0aGlzLl9hdXRvY29tcGxldGVEaXNhYmxlZH1zZXQgYXV0b2NvbXBsZXRlRGlzYWJsZWQoZSl7dGhpcy5fYXV0b2NvbXBsZXRlRGlzYWJsZWQ9dnQoZSl9Y29uc3RydWN0b3IoZSxpLHIsbyxhLHMsbCxjLGQsdSxwKXt0aGlzLl9lbGVtZW50PWUsdGhpcy5fb3ZlcmxheT1pLHRoaXMuX3ZpZXdDb250YWluZXJSZWY9cix0aGlzLl96b25lPW8sdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9YSx0aGlzLl9kaXI9bCx0aGlzLl9mb3JtRmllbGQ9Yyx0aGlzLl9kb2N1bWVudD1kLHRoaXMuX3ZpZXdwb3J0UnVsZXI9dSx0aGlzLl9kZWZhdWx0cz1wLHRoaXMuX2NvbXBvbmVudERlc3Ryb3llZD0hMSx0aGlzLl9hdXRvY29tcGxldGVEaXNhYmxlZD0hMSx0aGlzLl9tYW51YWxseUZsb2F0aW5nTGFiZWw9ITEsdGhpcy5fdmlld3BvcnRTdWJzY3JpcHRpb249RW4uRU1QVFksdGhpcy5fY2FuT3Blbk9uTmV4dEZvY3VzPSEwLHRoaXMuX2Nsb3NlS2V5RXZlbnRTdHJlYW09bmV3IEVlLHRoaXMuX3dpbmRvd0JsdXJIYW5kbGVyPSgpPT57dGhpcy5fY2FuT3Blbk9uTmV4dEZvY3VzPXRoaXMuX2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPT10aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnR8fHRoaXMucGFuZWxPcGVufSx0aGlzLl9vbkNoYW5nZT0oKT0+e30sdGhpcy5fb25Ub3VjaGVkPSgpPT57fSx0aGlzLnBvc2l0aW9uPSJhdXRvIix0aGlzLmF1dG9jb21wbGV0ZUF0dHJpYnV0ZT0ib2ZmIix0aGlzLl9vdmVybGF5QXR0YWNoZWQ9ITEsdGhpcy5vcHRpb25TZWxlY3Rpb25zPWlzKCgpPT57bGV0IGg9dGhpcy5hdXRvY29tcGxldGU/dGhpcy5hdXRvY29tcGxldGUub3B0aW9uczpudWxsO3JldHVybiBoP2guY2hhbmdlcy5waXBlKGtuKGgpLEpuKCgpPT50biguLi5oLm1hcChtPT5tLm9uU2VsZWN0aW9uQ2hhbmdlKSkpKTp0aGlzLl96b25lLm9uU3RhYmxlLnBpcGUoTHQoMSksSm4oKCk9PnRoaXMub3B0aW9uU2VsZWN0aW9ucykpfSksdGhpcy5fc2Nyb2xsU3RyYXRlZ3k9c31uZ0FmdGVyVmlld0luaXQoKXtsZXQgZT10aGlzLl9nZXRXaW5kb3coKTt0eXBlb2YgZTwidSImJnRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PmUuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsdGhpcy5fd2luZG93Qmx1ckhhbmRsZXIpKX1uZ09uQ2hhbmdlcyhlKXtlLnBvc2l0aW9uJiZ0aGlzLl9wb3NpdGlvblN0cmF0ZWd5JiYodGhpcy5fc2V0U3RyYXRlZ3lQb3NpdGlvbnModGhpcy5fcG9zaXRpb25TdHJhdGVneSksdGhpcy5wYW5lbE9wZW4mJnRoaXMuX292ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKSl9bmdPbkRlc3Ryb3koKXtsZXQgZT10aGlzLl9nZXRXaW5kb3coKTt0eXBlb2YgZTwidSImJmUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsdGhpcy5fd2luZG93Qmx1ckhhbmRsZXIpLHRoaXMuX3ZpZXdwb3J0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fY29tcG9uZW50RGVzdHJveWVkPSEwLHRoaXMuX2Rlc3Ryb3lQYW5lbCgpLHRoaXMuX2Nsb3NlS2V5RXZlbnRTdHJlYW0uY29tcGxldGUoKX1nZXQgcGFuZWxPcGVuKCl7cmV0dXJuIHRoaXMuX292ZXJsYXlBdHRhY2hlZCYmdGhpcy5hdXRvY29tcGxldGUuc2hvd1BhbmVsfW9wZW5QYW5lbCgpe3RoaXMuX2F0dGFjaE92ZXJsYXkoKSx0aGlzLl9mbG9hdExhYmVsKCl9Y2xvc2VQYW5lbCgpe3RoaXMuX3Jlc2V0TGFiZWwoKSx0aGlzLl9vdmVybGF5QXR0YWNoZWQmJih0aGlzLnBhbmVsT3BlbiYmdGhpcy5fem9uZS5ydW4oKCk9Pnt0aGlzLmF1dG9jb21wbGV0ZS5jbG9zZWQuZW1pdCgpfSksdGhpcy5hdXRvY29tcGxldGUuX2lzT3Blbj10aGlzLl9vdmVybGF5QXR0YWNoZWQ9ITEsdGhpcy5fcGVuZGluZ0F1dG9zZWxlY3RlZE9wdGlvbj1udWxsLHRoaXMuX292ZXJsYXlSZWYmJnRoaXMuX292ZXJsYXlSZWYuaGFzQXR0YWNoZWQoKSYmKHRoaXMuX292ZXJsYXlSZWYuZGV0YWNoKCksdGhpcy5fY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSksdGhpcy5fY29tcG9uZW50RGVzdHJveWVkfHx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCkpfXVwZGF0ZVBvc2l0aW9uKCl7dGhpcy5fb3ZlcmxheUF0dGFjaGVkJiZ0aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCl9Z2V0IHBhbmVsQ2xvc2luZ0FjdGlvbnMoKXtyZXR1cm4gdG4odGhpcy5vcHRpb25TZWxlY3Rpb25zLHRoaXMuYXV0b2NvbXBsZXRlLl9rZXlNYW5hZ2VyLnRhYk91dC5waXBlKE9lKCgpPT50aGlzLl9vdmVybGF5QXR0YWNoZWQpKSx0aGlzLl9jbG9zZUtleUV2ZW50U3RyZWFtLHRoaXMuX2dldE91dHNpZGVDbGlja1N0cmVhbSgpLHRoaXMuX292ZXJsYXlSZWY/dGhpcy5fb3ZlcmxheVJlZi5kZXRhY2htZW50cygpLnBpcGUoT2UoKCk9PnRoaXMuX292ZXJsYXlBdHRhY2hlZCkpOiR0KCkpLnBpcGUocShlPT5lIGluc3RhbmNlb2YgenY/ZTpudWxsKSl9Z2V0IGFjdGl2ZU9wdGlvbigpe3JldHVybiB0aGlzLmF1dG9jb21wbGV0ZSYmdGhpcy5hdXRvY29tcGxldGUuX2tleU1hbmFnZXI/dGhpcy5hdXRvY29tcGxldGUuX2tleU1hbmFnZXIuYWN0aXZlSXRlbTpudWxsfV9nZXRPdXRzaWRlQ2xpY2tTdHJlYW0oKXtyZXR1cm4gdG4oRWkodGhpcy5fZG9jdW1lbnQsImNsaWNrIiksRWkodGhpcy5fZG9jdW1lbnQsImF1eGNsaWNrIiksRWkodGhpcy5fZG9jdW1lbnQsInRvdWNoZW5kIikpLnBpcGUoT2UoZT0+e2xldCBpPWJzKGUpLHI9dGhpcy5fZm9ybUZpZWxkP3RoaXMuX2Zvcm1GaWVsZC5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Om51bGwsbz10aGlzLmNvbm5lY3RlZFRvP3RoaXMuY29ubmVjdGVkVG8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Om51bGw7cmV0dXJuIHRoaXMuX292ZXJsYXlBdHRhY2hlZCYmaSE9PXRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCYmdGhpcy5fZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PXRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCYmKCFyfHwhci5jb250YWlucyhpKSkmJighb3x8IW8uY29udGFpbnMoaSkpJiYhIXRoaXMuX292ZXJsYXlSZWYmJiF0aGlzLl9vdmVybGF5UmVmLm92ZXJsYXlFbGVtZW50LmNvbnRhaW5zKGkpfSkpfXdyaXRlVmFsdWUoZSl7UHJvbWlzZS5yZXNvbHZlKG51bGwpLnRoZW4oKCk9PnRoaXMuX2Fzc2lnbk9wdGlvblZhbHVlKGUpKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMuX29uQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5fb25Ub3VjaGVkPWV9c2V0RGlzYWJsZWRTdGF0ZShlKXt0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZGlzYWJsZWQ9ZX1faGFuZGxlS2V5ZG93bihlKXtsZXQgaT1lLmtleUNvZGUscj1PcihlKTtpZigyNz09PWkmJiFyJiZlLnByZXZlbnREZWZhdWx0KCksdGhpcy5hY3RpdmVPcHRpb24mJjEzPT09aSYmdGhpcy5wYW5lbE9wZW4mJiFyKXRoaXMuYWN0aXZlT3B0aW9uLl9zZWxlY3RWaWFJbnRlcmFjdGlvbigpLHRoaXMuX3Jlc2V0QWN0aXZlSXRlbSgpLGUucHJldmVudERlZmF1bHQoKTtlbHNlIGlmKHRoaXMuYXV0b2NvbXBsZXRlKXtsZXQgbz10aGlzLmF1dG9jb21wbGV0ZS5fa2V5TWFuYWdlci5hY3RpdmVJdGVtLGE9Mzg9PT1pfHw0MD09PWk7OT09PWl8fGEmJiFyJiZ0aGlzLnBhbmVsT3Blbj90aGlzLmF1dG9jb21wbGV0ZS5fa2V5TWFuYWdlci5vbktleWRvd24oZSk6YSYmdGhpcy5fY2FuT3BlbigpJiZ0aGlzLm9wZW5QYW5lbCgpLChhfHx0aGlzLmF1dG9jb21wbGV0ZS5fa2V5TWFuYWdlci5hY3RpdmVJdGVtIT09bykmJih0aGlzLl9zY3JvbGxUb09wdGlvbih0aGlzLmF1dG9jb21wbGV0ZS5fa2V5TWFuYWdlci5hY3RpdmVJdGVtSW5kZXh8fDApLHRoaXMuYXV0b2NvbXBsZXRlLmF1dG9TZWxlY3RBY3RpdmVPcHRpb24mJnRoaXMuYWN0aXZlT3B0aW9uJiYodGhpcy5fcGVuZGluZ0F1dG9zZWxlY3RlZE9wdGlvbnx8KHRoaXMuX3ZhbHVlQmVmb3JlQXV0b1NlbGVjdGlvbj10aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUpLHRoaXMuX3BlbmRpbmdBdXRvc2VsZWN0ZWRPcHRpb249dGhpcy5hY3RpdmVPcHRpb24sdGhpcy5fYXNzaWduT3B0aW9uVmFsdWUodGhpcy5hY3RpdmVPcHRpb24udmFsdWUpKSl9fV9oYW5kbGVJbnB1dChlKXtsZXQgaT1lLnRhcmdldCxyPWkudmFsdWU7Im51bWJlciI9PT1pLnR5cGUmJihyPSIiPT1yP251bGw6cGFyc2VGbG9hdChyKSksdGhpcy5fcHJldmlvdXNWYWx1ZSE9PXImJih0aGlzLl9wcmV2aW91c1ZhbHVlPXIsdGhpcy5fcGVuZGluZ0F1dG9zZWxlY3RlZE9wdGlvbj1udWxsLHRoaXMuX29uQ2hhbmdlKHIpLHRoaXMuX2Nhbk9wZW4oKSYmdGhpcy5fZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PWUudGFyZ2V0JiZ0aGlzLm9wZW5QYW5lbCgpKX1faGFuZGxlRm9jdXMoKXt0aGlzLl9jYW5PcGVuT25OZXh0Rm9jdXM/dGhpcy5fY2FuT3BlbigpJiYodGhpcy5fcHJldmlvdXNWYWx1ZT10aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUsdGhpcy5fYXR0YWNoT3ZlcmxheSgpLHRoaXMuX2Zsb2F0TGFiZWwoITApKTp0aGlzLl9jYW5PcGVuT25OZXh0Rm9jdXM9ITB9X2hhbmRsZUNsaWNrKCl7dGhpcy5fY2FuT3BlbigpJiYhdGhpcy5wYW5lbE9wZW4mJnRoaXMub3BlblBhbmVsKCl9X2Zsb2F0TGFiZWwoZT0hMSl7dGhpcy5fZm9ybUZpZWxkJiYiYXV0byI9PT10aGlzLl9mb3JtRmllbGQuZmxvYXRMYWJlbCYmKGU/dGhpcy5fZm9ybUZpZWxkLl9hbmltYXRlQW5kTG9ja0xhYmVsKCk6dGhpcy5fZm9ybUZpZWxkLmZsb2F0TGFiZWw9ImFsd2F5cyIsdGhpcy5fbWFudWFsbHlGbG9hdGluZ0xhYmVsPSEwKX1fcmVzZXRMYWJlbCgpe3RoaXMuX21hbnVhbGx5RmxvYXRpbmdMYWJlbCYmKHRoaXMuX2Zvcm1GaWVsZCYmKHRoaXMuX2Zvcm1GaWVsZC5mbG9hdExhYmVsPSJhdXRvIiksdGhpcy5fbWFudWFsbHlGbG9hdGluZ0xhYmVsPSExKX1fc3Vic2NyaWJlVG9DbG9zaW5nQWN0aW9ucygpe3JldHVybiB0bih0aGlzLl96b25lLm9uU3RhYmxlLnBpcGUoTHQoMSkpLHRoaXMuYXV0b2NvbXBsZXRlLm9wdGlvbnMuY2hhbmdlcy5waXBlKER0KCgpPT50aGlzLl9wb3NpdGlvblN0cmF0ZWd5LnJlYXBwbHlMYXN0UG9zaXRpb24oKSksUnMoMCkpKS5waXBlKEpuKCgpPT4odGhpcy5fem9uZS5ydW4oKCk9PntsZXQgcj10aGlzLnBhbmVsT3Blbjt0aGlzLl9yZXNldEFjdGl2ZUl0ZW0oKSx0aGlzLmF1dG9jb21wbGV0ZS5fc2V0VmlzaWJpbGl0eSgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKSx0aGlzLnBhbmVsT3BlbiYmdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpLHIhPT10aGlzLnBhbmVsT3BlbiYmKHRoaXMucGFuZWxPcGVuP3RoaXMuYXV0b2NvbXBsZXRlLm9wZW5lZC5lbWl0KCk6dGhpcy5hdXRvY29tcGxldGUuY2xvc2VkLmVtaXQoKSl9KSx0aGlzLnBhbmVsQ2xvc2luZ0FjdGlvbnMpKSxMdCgxKSkuc3Vic2NyaWJlKHI9PnRoaXMuX3NldFZhbHVlQW5kQ2xvc2UocikpfV9kZXN0cm95UGFuZWwoKXt0aGlzLl9vdmVybGF5UmVmJiYodGhpcy5jbG9zZVBhbmVsKCksdGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKCksdGhpcy5fb3ZlcmxheVJlZj1udWxsKX1fYXNzaWduT3B0aW9uVmFsdWUoZSl7bGV0IGk9dGhpcy5hdXRvY29tcGxldGUmJnRoaXMuYXV0b2NvbXBsZXRlLmRpc3BsYXlXaXRoP3RoaXMuYXV0b2NvbXBsZXRlLmRpc3BsYXlXaXRoKGUpOmU7dGhpcy5fdXBkYXRlTmF0aXZlSW5wdXRWYWx1ZShpPz8iIil9X3VwZGF0ZU5hdGl2ZUlucHV0VmFsdWUoZSl7dGhpcy5fZm9ybUZpZWxkP3RoaXMuX2Zvcm1GaWVsZC5fY29udHJvbC52YWx1ZT1lOnRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZT1lLHRoaXMuX3ByZXZpb3VzVmFsdWU9ZX1fc2V0VmFsdWVBbmRDbG9zZShlKXtsZXQgaT1lP2Uuc291cmNlOnRoaXMuX3BlbmRpbmdBdXRvc2VsZWN0ZWRPcHRpb247aSYmKHRoaXMuX2NsZWFyUHJldmlvdXNTZWxlY3RlZE9wdGlvbihpKSx0aGlzLl9hc3NpZ25PcHRpb25WYWx1ZShpLnZhbHVlKSx0aGlzLl9vbkNoYW5nZShpLnZhbHVlKSx0aGlzLmF1dG9jb21wbGV0ZS5fZW1pdFNlbGVjdEV2ZW50KGkpLHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpKSx0aGlzLmNsb3NlUGFuZWwoKX1fY2xlYXJQcmV2aW91c1NlbGVjdGVkT3B0aW9uKGUpe3RoaXMuYXV0b2NvbXBsZXRlLm9wdGlvbnMuZm9yRWFjaChpPT57aSE9PWUmJmkuc2VsZWN0ZWQmJmkuZGVzZWxlY3QoKX0pfV9hdHRhY2hPdmVybGF5KCl7bGV0IGU9dGhpcy5fb3ZlcmxheVJlZjtlPyh0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LnNldE9yaWdpbih0aGlzLl9nZXRDb25uZWN0ZWRFbGVtZW50KCkpLGUudXBkYXRlU2l6ZSh7d2lkdGg6dGhpcy5fZ2V0UGFuZWxXaWR0aCgpfSkpOih0aGlzLl9wb3J0YWw9bmV3IFRvKHRoaXMuYXV0b2NvbXBsZXRlLnRlbXBsYXRlLHRoaXMuX3ZpZXdDb250YWluZXJSZWYse2lkOnRoaXMuX2Zvcm1GaWVsZD8uZ2V0TGFiZWxJZCgpfSksZT10aGlzLl9vdmVybGF5LmNyZWF0ZSh0aGlzLl9nZXRPdmVybGF5Q29uZmlnKCkpLHRoaXMuX292ZXJsYXlSZWY9ZSx0aGlzLl9oYW5kbGVPdmVybGF5RXZlbnRzKGUpLHRoaXMuX3ZpZXdwb3J0U3Vic2NyaXB0aW9uPXRoaXMuX3ZpZXdwb3J0UnVsZXIuY2hhbmdlKCkuc3Vic2NyaWJlKCgpPT57dGhpcy5wYW5lbE9wZW4mJmUmJmUudXBkYXRlU2l6ZSh7d2lkdGg6dGhpcy5fZ2V0UGFuZWxXaWR0aCgpfSl9KSksZSYmIWUuaGFzQXR0YWNoZWQoKSYmKGUuYXR0YWNoKHRoaXMuX3BvcnRhbCksdGhpcy5fY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb249dGhpcy5fc3Vic2NyaWJlVG9DbG9zaW5nQWN0aW9ucygpKTtsZXQgaT10aGlzLnBhbmVsT3Blbjt0aGlzLmF1dG9jb21wbGV0ZS5fc2V0VmlzaWJpbGl0eSgpLHRoaXMuYXV0b2NvbXBsZXRlLl9pc09wZW49dGhpcy5fb3ZlcmxheUF0dGFjaGVkPSEwLHRoaXMuYXV0b2NvbXBsZXRlLl9zZXRDb2xvcih0aGlzLl9mb3JtRmllbGQ/LmNvbG9yKSx0aGlzLnBhbmVsT3BlbiYmaSE9PXRoaXMucGFuZWxPcGVuJiZ0aGlzLmF1dG9jb21wbGV0ZS5vcGVuZWQuZW1pdCgpfV9nZXRPdmVybGF5Q29uZmlnKCl7cmV0dXJuIG5ldyBlbCh7cG9zaXRpb25TdHJhdGVneTp0aGlzLl9nZXRPdmVybGF5UG9zaXRpb24oKSxzY3JvbGxTdHJhdGVneTp0aGlzLl9zY3JvbGxTdHJhdGVneSgpLHdpZHRoOnRoaXMuX2dldFBhbmVsV2lkdGgoKSxkaXJlY3Rpb246dGhpcy5fZGlyPz92b2lkIDAscGFuZWxDbGFzczp0aGlzLl9kZWZhdWx0cz8ub3ZlcmxheVBhbmVsQ2xhc3N9KX1fZ2V0T3ZlcmxheVBvc2l0aW9uKCl7bGV0IGU9dGhpcy5fb3ZlcmxheS5wb3NpdGlvbigpLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5fZ2V0Q29ubmVjdGVkRWxlbWVudCgpKS53aXRoRmxleGlibGVEaW1lbnNpb25zKCExKS53aXRoUHVzaCghMSk7cmV0dXJuIHRoaXMuX3NldFN0cmF0ZWd5UG9zaXRpb25zKGUpLHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3k9ZSxlfV9zZXRTdHJhdGVneVBvc2l0aW9ucyhlKXtsZXQgYSxpPVt7b3JpZ2luWDoic3RhcnQiLG9yaWdpblk6ImJvdHRvbSIsb3ZlcmxheVg6InN0YXJ0IixvdmVybGF5WToidG9wIn0se29yaWdpblg6ImVuZCIsb3JpZ2luWToiYm90dG9tIixvdmVybGF5WDoiZW5kIixvdmVybGF5WToidG9wIn1dLHI9dGhpcy5fYWJvdmVDbGFzcyxvPVt7b3JpZ2luWDoic3RhcnQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVg6InN0YXJ0IixvdmVybGF5WToiYm90dG9tIixwYW5lbENsYXNzOnJ9LHtvcmlnaW5YOiJlbmQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVg6ImVuZCIsb3ZlcmxheVk6ImJvdHRvbSIscGFuZWxDbGFzczpyfV07YT0iYWJvdmUiPT09dGhpcy5wb3NpdGlvbj9vOiJiZWxvdyI9PT10aGlzLnBvc2l0aW9uP2k6Wy4uLmksLi4ub10sZS53aXRoUG9zaXRpb25zKGEpfV9nZXRDb25uZWN0ZWRFbGVtZW50KCl7cmV0dXJuIHRoaXMuY29ubmVjdGVkVG8/dGhpcy5jb25uZWN0ZWRUby5lbGVtZW50UmVmOnRoaXMuX2Zvcm1GaWVsZD90aGlzLl9mb3JtRmllbGQuZ2V0Q29ubmVjdGVkT3ZlcmxheU9yaWdpbigpOnRoaXMuX2VsZW1lbnR9X2dldFBhbmVsV2lkdGgoKXtyZXR1cm4gdGhpcy5hdXRvY29tcGxldGUucGFuZWxXaWR0aHx8dGhpcy5fZ2V0SG9zdFdpZHRoKCl9X2dldEhvc3RXaWR0aCgpe3JldHVybiB0aGlzLl9nZXRDb25uZWN0ZWRFbGVtZW50KCkubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aH1fcmVzZXRBY3RpdmVJdGVtKCl7bGV0IGU9dGhpcy5hdXRvY29tcGxldGU7ZS5hdXRvQWN0aXZlRmlyc3RPcHRpb24/ZS5fa2V5TWFuYWdlci5zZXRGaXJzdEl0ZW1BY3RpdmUoKTplLl9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oLTEpfV9jYW5PcGVuKCl7bGV0IGU9dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50O3JldHVybiFlLnJlYWRPbmx5JiYhZS5kaXNhYmxlZCYmIXRoaXMuX2F1dG9jb21wbGV0ZURpc2FibGVkfV9nZXRXaW5kb3coKXtyZXR1cm4gdGhpcy5fZG9jdW1lbnQ/LmRlZmF1bHRWaWV3fHx3aW5kb3d9X3Njcm9sbFRvT3B0aW9uKGUpe2xldCBpPXRoaXMuYXV0b2NvbXBsZXRlLHI9ejEoZSxpLm9wdGlvbnMsaS5vcHRpb25Hcm91cHMpO2lmKDA9PT1lJiYxPT09cilpLl9zZXRTY3JvbGxUb3AoMCk7ZWxzZSBpZihpLnBhbmVsKXtsZXQgbz1pLm9wdGlvbnMudG9BcnJheSgpW2VdO2lmKG8pe2xldCBhPW8uX2dldEhvc3RFbGVtZW50KCkscz1VMShhLm9mZnNldFRvcCxhLm9mZnNldEhlaWdodCxpLl9nZXRTY3JvbGxUb3AoKSxpLnBhbmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0KTtpLl9zZXRTY3JvbGxUb3Aocyl9fX1faGFuZGxlT3ZlcmxheUV2ZW50cyhlKXtlLmtleWRvd25FdmVudHMoKS5zdWJzY3JpYmUoaT0+eygyNz09PWkua2V5Q29kZSYmIU9yKGkpfHwzOD09PWkua2V5Q29kZSYmT3IoaSwiYWx0S2V5IikpJiYodGhpcy5fcGVuZGluZ0F1dG9zZWxlY3RlZE9wdGlvbiYmKHRoaXMuX3VwZGF0ZU5hdGl2ZUlucHV0VmFsdWUodGhpcy5fdmFsdWVCZWZvcmVBdXRvU2VsZWN0aW9uPz8iIiksdGhpcy5fcGVuZGluZ0F1dG9zZWxlY3RlZE9wdGlvbj1udWxsKSx0aGlzLl9jbG9zZUtleUV2ZW50U3RyZWFtLm5leHQoKSx0aGlzLl9yZXNldEFjdGl2ZUl0ZW0oKSxpLnN0b3BQcm9wYWdhdGlvbigpLGkucHJldmVudERlZmF1bHQoKSl9KSxlLm91dHNpZGVQb2ludGVyRXZlbnRzKCkuc3Vic2NyaWJlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoeGUpLEMoT2kpLEMoZWkpLEMob3QpLEMoUXQpLEMoJHRlKSxDKHppLDgpLEMoUGgsOSksQyhOdCw4KSxDKFdhKSxDKEt0ZSw4KSl9LG4uXHUwMjc1ZGlyPU1lKHt0eXBlOm4saW5wdXRzOnthdXRvY29tcGxldGU6WyJtYXRBdXRvY29tcGxldGUiLCJhdXRvY29tcGxldGUiXSxwb3NpdGlvbjpbIm1hdEF1dG9jb21wbGV0ZVBvc2l0aW9uIiwicG9zaXRpb24iXSxjb25uZWN0ZWRUbzpbIm1hdEF1dG9jb21wbGV0ZUNvbm5lY3RlZFRvIiwiY29ubmVjdGVkVG8iXSxhdXRvY29tcGxldGVBdHRyaWJ1dGU6WyJhdXRvY29tcGxldGUiLCJhdXRvY29tcGxldGVBdHRyaWJ1dGUiXSxhdXRvY29tcGxldGVEaXNhYmxlZDpbIm1hdEF1dG9jb21wbGV0ZURpc2FibGVkIiwiYXV0b2NvbXBsZXRlRGlzYWJsZWQiXX0sZmVhdHVyZXM6W3F0XX0pLG59KSgpLEt4PSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyB6TGV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2Fib3ZlQ2xhc3M9Im1hdC1tZGMtYXV0b2NvbXBsZXRlLXBhbmVsLWFib3ZlIn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1YbihuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1NZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsIm1hdEF1dG9jb21wbGV0ZSIsIiJdLFsidGV4dGFyZWEiLCJtYXRBdXRvY29tcGxldGUiLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtbWRjLWF1dG9jb21wbGV0ZS10cmlnZ2VyIl0saG9zdFZhcnM6Nyxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJkEoImZvY3VzaW4iLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX2hhbmRsZUZvY3VzKCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fb25Ub3VjaGVkKCl9KSgiaW5wdXQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9oYW5kbGVJbnB1dChvKX0pKCJrZXlkb3duIixmdW5jdGlvbihvKXtyZXR1cm4gaS5faGFuZGxlS2V5ZG93bihvKX0pKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5faGFuZGxlQ2xpY2soKX0pLDImZSYmQmUoImF1dG9jb21wbGV0ZSIsaS5hdXRvY29tcGxldGVBdHRyaWJ1dGUpKCJyb2xlIixpLmF1dG9jb21wbGV0ZURpc2FibGVkP251bGw6ImNvbWJvYm94IikoImFyaWEtYXV0b2NvbXBsZXRlIixpLmF1dG9jb21wbGV0ZURpc2FibGVkP251bGw6Imxpc3QiKSgiYXJpYS1hY3RpdmVkZXNjZW5kYW50IixpLnBhbmVsT3BlbiYmaS5hY3RpdmVPcHRpb24/aS5hY3RpdmVPcHRpb24uaWQ6bnVsbCkoImFyaWEtZXhwYW5kZWQiLGkuYXV0b2NvbXBsZXRlRGlzYWJsZWQ/bnVsbDppLnBhbmVsT3Blbi50b1N0cmluZygpKSgiYXJpYS1vd25zIixpLmF1dG9jb21wbGV0ZURpc2FibGVkfHwhaS5wYW5lbE9wZW58fG51bGw9PWkuYXV0b2NvbXBsZXRlP251bGw6aS5hdXRvY29tcGxldGUuaWQpKCJhcmlhLWhhc3BvcHVwIixpLmF1dG9jb21wbGV0ZURpc2FibGVkP251bGw6Imxpc3Rib3giKX0sZXhwb3J0QXM6WyJtYXRBdXRvY29tcGxldGVUcmlnZ2VyIl0sZmVhdHVyZXM6W1Z0KFtCTGVdKSxYZV19KSxufSkoKSxwQT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9SCh7cHJvdmlkZXJzOltITGVdLGltcG9ydHM6W0RvLG1nLGRuLERlLEljLG1nLGRuXX0pLG59KSgpLGdfPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLnZhbHVlPSIiLHRoaXMucGxhY2Vob2xkZXI9IiJ9b25JbnB1dEtleVVwKGUpeyJFbnRlciI9PT1lLmtleSYmdGhpcy5hdXRvY29tcGxldGVUcmlnZ2VyLmNsb3NlUGFuZWwoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1sidGItZmlsdGVyLWlucHV0Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmVWUoS3gsNSksMiZlKXtsZXQgcjtiZShyPXZlKCkpJiYoaS5hdXRvY29tcGxldGVUcmlnZ2VyPXIuZmlyc3QpfX0saW5wdXRzOnt2YWx1ZToidmFsdWUiLG1hdEF1dG9jb21wbGV0ZToibWF0QXV0b2NvbXBsZXRlIixwbGFjZWhvbGRlcjoicGxhY2Vob2xkZXIifSxkZWNsczoyLHZhcnM6NCxjb25zdHM6W1sic3ZnSWNvbiIsInNlYXJjaF8yNHB4Il0sWyJ0eXBlIiwidGV4dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywicGxhY2Vob2xkZXIiLCJtYXRBdXRvY29tcGxldGUiLCJtYXRBdXRvY29tcGxldGVEaXNhYmxlZCIsInZhbHVlIiwia2V5dXAiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihrKDAsIm1hdC1pY29uIiwwKSxmKDEsImlucHV0IiwxKSxBKCJrZXl1cCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25JbnB1dEtleVVwKG8pfSksZygpKSwyJmUmJih2KDEpLGIoInBsYWNlaG9sZGVyIixpLnBsYWNlaG9sZGVyKSgibWF0QXV0b2NvbXBsZXRlIixpLm1hdEF1dG9jb21wbGV0ZSkoIm1hdEF1dG9jb21wbGV0ZURpc2FibGVkIiwhaS5tYXRBdXRvY29tcGxldGUpKCJ2YWx1ZSIsaS52YWx1ZSkpfSxkZXBlbmRlbmNpZXM6W0t4LGJuXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmb250LXNpemU6MTNweDttaW4td2lkdGg6MjEwcHh9bWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7ZmxleDpub25lO21hcmdpbi1yaWdodDo1cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9aW5wdXRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6aW5oZXJpdDtjYXJldC1jb2xvcjpjdXJyZW50Q29sb3I7Y29sb3I6Y3VycmVudENvbG9yO2ZvbnQ6aW5oZXJpdDtib3JkZXI6bm9uZTtvdXRsaW5lOm5vbmU7cGFkZGluZzowO2ZsZXgtZ3JvdzoxfSJdfSksbn0pKCksVUxlPVsiY29udGFpbmVyIl0sSng9KCgpPT4oZnVuY3Rpb24obil7bltuLk5PTkU9MF09Ik5PTkUiLG5bbi5MRUZUPTFdPSJMRUZUIixuW24uUklHSFQ9Ml09IlJJR0hUIn0oSnh8fChKeD17fSkpLEp4KSkoKSx0bmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMudGlja0NvdW50PTIwLHRoaXMuZW5hYmxlZD0hMCx0aGlzLnJhbmdlVmFsdWVzQ2hhbmdlZD1uZXcgRix0aGlzLnNpbmdsZVZhbHVlQ2hhbmdlZD1uZXcgRix0aGlzLlBvc2l0aW9uPUp4fXRodW1iRHJhZygpe3RoaXMucmFuZ2VWYWx1ZXNDaGFuZ2VkLmVtaXQoe2xvd2VyVmFsdWU6dGhpcy5sb3dlclZhbHVlLHVwcGVyVmFsdWU6dGhpcy51cHBlclZhbHVlLHNvdXJjZToiU0xJREVSIn0pfWNhbGN1bGF0ZVN0ZXBTaXplKCl7cmV0dXJuIG51bGw9PT10aGlzLnRpY2tDb3VudHx8dGhpcy50aWNrQ291bnQ8PTA/MToodGhpcy5tYXgtdGhpcy5taW4pL3RoaXMudGlja0NvdW50fWdldENsaXBwZWRWYWx1ZShlKXtyZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgoZSx0aGlzLm1pbiksdGhpcy5tYXgpfW1heWJlTm90aWZ5TmV4dFJhbmdlVmFsdWVzKGUsaSl7bGV0W3Isb109ZS5zb3J0KChhLHMpPT5hLXMpOyh0aGlzLmxvd2VyVmFsdWUhPT1yfHx0aGlzLnVwcGVyVmFsdWUhPT1vKSYmdGhpcy5yYW5nZVZhbHVlc0NoYW5nZWQuZW1pdCh7bG93ZXJWYWx1ZTpyLHVwcGVyVmFsdWU6byxzb3VyY2U6aX0pfWhhbmRsZUlucHV0Q2hhbmdlKGUsaSl7bGV0IG89dGhpcy5nZXRDbGlwcGVkVmFsdWUoTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSk7aXNOYU4obyl8fHRoaXMubWF5YmVOb3RpZnlOZXh0UmFuZ2VWYWx1ZXMoaT09PUp4LkxFRlQ/W28sdGhpcy51cHBlclZhbHVlXTpbdGhpcy5sb3dlclZhbHVlLG9dLCJURVhUIil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLXJhbmdlLWlucHV0Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmVWUoVUxlLDUseGUpLDImZSl7bGV0IHI7YmUocj12ZSgpKSYmKGkuY29udGFpbmVyPXIuZmlyc3QpfX0saW5wdXRzOnttaW46Im1pbiIsbWF4OiJtYXgiLGxvd2VyVmFsdWU6Imxvd2VyVmFsdWUiLHVwcGVyVmFsdWU6InVwcGVyVmFsdWUiLHRpY2tDb3VudDoidGlja0NvdW50IixlbmFibGVkOiJlbmFibGVkIn0sb3V0cHV0czp7cmFuZ2VWYWx1ZXNDaGFuZ2VkOiJyYW5nZVZhbHVlc0NoYW5nZWQiLHNpbmdsZVZhbHVlQ2hhbmdlZDoic2luZ2xlVmFsdWVDaGFuZ2VkIn0sZGVjbHM6NSx2YXJzOjksY29uc3RzOltbInR5cGUiLCJudW1iZXIiLDEsImxvd2VyLWlucHV0IiwzLCJkaXNhYmxlZCIsInZhbHVlIiwiY2hhbmdlIl0sWyJ0eXBlIiwibnVtYmVyIiwxLCJ1cHBlci1pbnB1dCIsMywiZGlzYWJsZWQiLCJ2YWx1ZSIsImNoYW5nZSJdLFsxLCJzbGlkZXIiLDMsIm1pbiIsIm1heCIsInN0ZXAiXSxbIm1hdFNsaWRlclN0YXJ0VGh1bWIiLCIiLDMsIm5nTW9kZWwiLCJ2YWx1ZUNoYW5nZSIsIm5nTW9kZWxDaGFuZ2UiXSxbIm1hdFNsaWRlckVuZFRodW1iIiwiIiwzLCJuZ01vZGVsIiwidmFsdWVDaGFuZ2UiLCJuZ01vZGVsQ2hhbmdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZigwLCJpbnB1dCIsMCksQSgiY2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5oYW5kbGVJbnB1dENoYW5nZShvLGkuUG9zaXRpb24uTEVGVCl9KSxnKCksZigxLCJpbnB1dCIsMSksQSgiY2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5oYW5kbGVJbnB1dENoYW5nZShvLGkuUG9zaXRpb24uUklHSFQpfSksZygpLGYoMiwibWF0LXNsaWRlciIsMikoMywiaW5wdXQiLDMpLEEoInZhbHVlQ2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBpLnRodW1iRHJhZygpfSkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmxvd2VyVmFsdWU9b30pLGcoKSxmKDQsImlucHV0Iiw0KSxBKCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS50aHVtYkRyYWcoKX0pKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS51cHBlclZhbHVlPW99KSxnKCkoKSksMiZlJiYoYigiZGlzYWJsZWQiLCFpLmVuYWJsZWQpKCJ2YWx1ZSIsaS5sb3dlclZhbHVlKSx2KDEpLGIoImRpc2FibGVkIiwhaS5lbmFibGVkKSgidmFsdWUiLGkudXBwZXJWYWx1ZSksdigxKSxiKCJtaW4iLGkubWluKSgibWF4IixpLm1heCkoInN0ZXAiLGkuY2FsY3VsYXRlU3RlcFNpemUoKSksdigxKSxiKCJuZ01vZGVsIixpLmxvd2VyVmFsdWUpLHYoMSksYigibmdNb2RlbCIsaS51cHBlclZhbHVlKSl9LGRlcGVuZGVuY2llczpbSnUsdk4sVXUseGcsaXldLHN0eWxlczpbJ1tfbmdob3N0LSVDT01QJV17Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6aW5saW5lLWdyaWQ7Z3JpZC1nYXA6MTBweDtncmlkLXRlbXBsYXRlLWFyZWFzOiJsb3dlci1pbnB1dCB1cHBlci1pbnB1dCIgInNsaWRlciBzbGlkZXIiO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2ZvbnQtc2l6ZTowO21pbi13aWR0aDoxMDBweH1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjppbmhlcml0O2JvcmRlci1zdHlsZTpzb2xpZDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6aW5oZXJpdDtvdmVyZmxvdzpoaWRkZW47d2lkdGg6MTAwJX0ubG93ZXItaW5wdXRbX25nY29udGVudC0lQ09NUCVde2dyaWQtYXJlYTpsb3dlci1pbnB1dH0udXBwZXItaW5wdXRbX25nY29udGVudC0lQ09NUCVde2dyaWQtYXJlYTp1cHBlci1pbnB1dDtqdXN0aWZ5LXNlbGY6ZmxleC1lbmR9LnNsaWRlcltfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOnNsaWRlcn0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIEdMZShuLHQpe2lmKDEmbil7bGV0IGU9VGUoKTtmKDAsInRiLWZpbHRlci1pbnB1dCIsOSksQSgia2V5dXAiLGZ1bmN0aW9uKHIpe3JldHVybiBuZShlKSxpZSh3KDIpLmRpc2NyZXRlVmFsdWVLZXlVcChyKSl9KSxnKCl9MiZuJiZiKCJ2YWx1ZSIsdygyKS5kaXNjcmV0ZVZhbHVlRmlsdGVyKX1mdW5jdGlvbiBXTGUobix0KXsxJm4mJihmKDAsImRpdiIsMTApLFQoMSwiIE5vIE1hdGNoaW5nIFZhbHVlcyAiKSxnKCkpfWZ1bmN0aW9uIHFMZShuLHQpe2lmKDEmbil7bGV0IGU9VGUoKTtmKDAsImRpdiIsMTMpLEEoImNsaWNrIixmdW5jdGlvbihyKXtyZXR1cm4gci5zdG9wUHJvcGFnYXRpb24oKX0pLGYoMSwibWF0LWNoZWNrYm94IiwzKSxBKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7bGV0IG89bmUoZSkuJGltcGxpY2l0O3JldHVybiBpZSh3KDMpLmRpc2NyZXRlRmlsdGVyQ2hhbmdlZC5lbWl0KG8pKX0pLGYoMiwic3BhbiIpLFQoMyksZygpKCkoKX1pZigyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dygzKTt2KDEpLGIoImNoZWNrZWQiLGkuZmlsdGVyLmZpbHRlclZhbHVlcy5pbmNsdWRlcyhlKSksdigyKSxrdChlKX19ZnVuY3Rpb24gWExlKG4sdCl7aWYoMSZuJiYoZigwLCJkaXYiLDExKSxTKDEscUxlLDQsMiwiZGl2IiwxMiksZygpKSwyJm4pe2xldCBlPXcoMik7digxKSxiKCJuZ0Zvck9mIixlLmdldFBvc3NpYmxlVmFsdWVzKCkpfX1mdW5jdGlvbiBZTGUobix0KXtpZigxJm4mJihmKDAsImRpdiIsNCkoMSwiZGl2Iiw1KSxTKDIsR0xlLDEsMSwidGItZmlsdGVyLWlucHV0Iiw2KSxnKCksUygzLFdMZSwyLDAsImRpdiIsNyksUyg0LFhMZSwyLDEsImRpdiIsOCksZygpKSwyJm4pe2xldCBlPXcoKTt2KDIpLGIoIm5nSWYiLGUuZmlsdGVyLnBvc3NpYmxlVmFsdWVzKSx2KDEpLGIoIm5nSWYiLCFlLmdldFBvc3NpYmxlVmFsdWVzKCkubGVuZ3RoKSx2KDEpLGIoIm5nSWYiLGUuZ2V0UG9zc2libGVWYWx1ZXMoKS5sZW5ndGgpfX1mdW5jdGlvbiBRTGUobix0KXtpZigxJm4pe2xldCBlPVRlKCk7ZigwLCJkaXYiLDE0KSxBKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIHIuc3RvcFByb3BhZ2F0aW9uKCl9KSxmKDEsInRiLXJhbmdlLWlucHV0IiwxNSksQSgicmFuZ2VWYWx1ZXNDaGFuZ2VkIixmdW5jdGlvbihyKXtyZXR1cm4gbmUoZSksaWUodygpLmludGVydmFsRmlsdGVyQ2hhbmdlZC5lbWl0KHIpKX0pLGcoKSgpfWlmKDImbil7bGV0IGU9dygpO3YoMSksYigibWluIixlLmZpbHRlci5taW5WYWx1ZSkoIm1heCIsZS5maWx0ZXIubWF4VmFsdWUpKCJsb3dlclZhbHVlIixlLmZpbHRlci5maWx0ZXJMb3dlclZhbHVlKSgidXBwZXJWYWx1ZSIsZS5maWx0ZXIuZmlsdGVyVXBwZXJWYWx1ZSl9fXZhciBoQT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5Eb21haW5UeXBlPWlvLHRoaXMuZGlzY3JldGVWYWx1ZUZpbHRlcj0iIix0aGlzLmRpc2NyZXRlRmlsdGVyQ2hhbmdlZD1uZXcgRix0aGlzLmludGVydmFsRmlsdGVyQ2hhbmdlZD1uZXcgRix0aGlzLmluY2x1ZGVVbmRlZmluZWRUb2dnbGVkPW5ldyBGfWdldFBvc3NpYmxlVmFsdWVzKCl7bGV0IGU9dGhpcy5maWx0ZXIucG9zc2libGVWYWx1ZXM/P1tdO3JldHVybiB0aGlzLmRpc2NyZXRlVmFsdWVGaWx0ZXI/ZS5maWx0ZXIoaT0+aS50b1N0cmluZygpLm1hdGNoKHRoaXMuZGlzY3JldGVWYWx1ZUZpbHRlcikpOmV9ZGlzY3JldGVWYWx1ZUtleVVwKGUpe3RoaXMuZGlzY3JldGVWYWx1ZUZpbHRlcj1lLnRhcmdldC52YWx1ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1sidGItZGF0YS10YWJsZS1maWx0ZXIiXV0saW5wdXRzOntmaWx0ZXI6ImZpbHRlciJ9LG91dHB1dHM6e2Rpc2NyZXRlRmlsdGVyQ2hhbmdlZDoiZGlzY3JldGVGaWx0ZXJDaGFuZ2VkIixpbnRlcnZhbEZpbHRlckNoYW5nZWQ6ImludGVydmFsRmlsdGVyQ2hhbmdlZCIsaW5jbHVkZVVuZGVmaW5lZFRvZ2dsZWQ6ImluY2x1ZGVVbmRlZmluZWRUb2dnbGVkIn0sZGVjbHM6NSx2YXJzOjMsY29uc3RzOltbMSwiZmlsdGVyLWRpYWxvZyJdLFsiY2xhc3MiLCJmaWx0ZXItY29udGFpbmVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImZpbHRlci1jb250YWluZXIiLCJkaXNhYmxlUmlwcGxlIiwiIiwzLCJjbGljayIsNCwibmdJZiJdLFszLCJjaGVja2VkIiwiY2hhbmdlIl0sWzEsImZpbHRlci1jb250YWluZXIiXSxbMSwiaW5wdXQtY29udGFpbmVyIl0sWyJwbGFjZWhvbGRlciIsIkZpbHRlciBEaXNjcmV0ZSBWYWx1ZXMgKHJlZ2V4KSIsMywidmFsdWUiLCJrZXl1cCIsNCwibmdJZiJdLFsiY2xhc3MiLCJuby1tYXRjaGVzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImRpc2NyZXRlLWZpbHRlcnMtY29udGFpbmVyIiw0LCJuZ0lmIl0sWyJwbGFjZWhvbGRlciIsIkZpbHRlciBEaXNjcmV0ZSBWYWx1ZXMgKHJlZ2V4KSIsMywidmFsdWUiLCJrZXl1cCJdLFsxLCJuby1tYXRjaGVzIl0sWzEsImRpc2NyZXRlLWZpbHRlcnMtY29udGFpbmVyIl0sWyJjbGFzcyIsImRpc2NyZXRlLXZhbHVlIiwzLCJjbGljayIsNCwibmdGb3IiLCJuZ0ZvckluZGV4IiwibmdGb3JPZiJdLFsxLCJkaXNjcmV0ZS12YWx1ZSIsMywiY2xpY2siXSxbImRpc2FibGVSaXBwbGUiLCIiLDEsImZpbHRlci1jb250YWluZXIiLDMsImNsaWNrIl0sWzEsInJhbmdlLWlucHV0IiwzLCJtaW4iLCJtYXgiLCJsb3dlclZhbHVlIiwidXBwZXJWYWx1ZSIsInJhbmdlVmFsdWVzQ2hhbmdlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGYoMCwiZGl2IiwwKSxTKDEsWUxlLDUsMywiZGl2IiwxKSxTKDIsUUxlLDIsNCwiZGl2IiwyKSxmKDMsIm1hdC1jaGVja2JveCIsMyksQSgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBpLmluY2x1ZGVVbmRlZmluZWRUb2dnbGVkLmVtaXQoKX0pLFQoNCwiSW5jbHVkZSBVbmRlZmluZWQiKSxnKCkoKSksMiZlJiYodigxKSxiKCJuZ0lmIixpLmZpbHRlci50eXBlPT09aS5Eb21haW5UeXBlLkRJU0NSRVRFKSx2KDEpLGIoIm5nSWYiLGkuZmlsdGVyLnR5cGU9PT1pLkRvbWFpblR5cGUuSU5URVJWQUwpLHYoMSksYigiY2hlY2tlZCIsaS5maWx0ZXIuaW5jbHVkZVVuZGVmaW5lZCkpfSxkZXBlbmRlbmNpZXM6W25uLE5lLHhzLGdfLHRuZV0sc3R5bGVzOlsiLmZpbHRlci1kaWFsb2dbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MTZweCA4cHg7Ym9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyOjFweCBzb2xpZDtib3gtc2hhZG93OjBweCA0cHggNHB4IHJnYmEoMCwwLDAsLjI1KTtib3JkZXItY29sb3I6I2ViZWJlYjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmZpbHRlci1kaWFsb2dbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZmlsdGVyLWRpYWxvZ1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWNvbG9yOiM1NTU7YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfS5pbnB1dC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi1ib3R0b206OHB4fS5kaXNjcmV0ZS1maWx0ZXJzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWF4LWhlaWdodDozMDBweDtvdmVyZmxvdy15OmF1dG99Lm5vLW1hdGNoZXNbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6OHB4IDEycHh9LmZpbHRlci1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjhweDttYXJnaW4tYm90dG9tOjhweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmVifWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5maWx0ZXItY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmZpbHRlci1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b20tY29sb3I6IzU1NX0ucmFuZ2UtaW5wdXRbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6NHB4IDhweDt3aWR0aDoyMDBweH0uZGlzY3JldGUtdmFsdWVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbn0uZGlzY3JldGUtdmFsdWVbX25nY29udGVudC0lQ09NUCVdICAgICBtYXQtY2hlY2tib3gsIC5kaXNjcmV0ZS12YWx1ZVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5tZGMtZm9ybS1maWVsZCwgLmRpc2NyZXRlLXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgbGFiZWx7d2lkdGg6MTAwJX0iXX0pLG59KSgpO2Z1bmN0aW9uIFpMZShuLHQpezEmbiYmKGYoMCwiZGl2Iiw1KSxUKDEsIiBObyBBY3Rpb25zIEF2YWlsYWJsZSAiKSxnKCkpfWZ1bmN0aW9uIEtMZShuLHQpe2lmKDEmbil7bGV0IGU9VGUoKTtmKDAsImJ1dHRvbiIsNiksQSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIG5lKGUpLGllKHcoKS5jb250ZXh0TWVudVJlbW92ZUNvbHVtbigpKX0pLGsoMSwibWF0LWljb24iLDcpLFQoMiwiUmVtb3ZlICIpLGcoKX19ZnVuY3Rpb24gSkxlKG4sdCl7aWYoMSZuKXtsZXQgZT1UZSgpO2YoMCwiYnV0dG9uIiw4KSxBKCJjbGljayIsZnVuY3Rpb24oKXtuZShlKTtsZXQgcj13KCk7cmV0dXJuIGllKHIuc29ydEJ5SGVhZGVyLmVtaXQobnVsbD09ci5jb250ZXh0TWVudUhlYWRlcj9udWxsOnIuY29udGV4dE1lbnVIZWFkZXIubmFtZSkpfSksaygxLCJtYXQtaWNvbiIsOSksVCgyLCJTb3J0IERlc2NlbmRpbmcgIiksZygpfX1mdW5jdGlvbiAkTGUobix0KXtpZigxJm4pe2xldCBlPVRlKCk7ZigwLCJidXR0b24iLDgpLEEoImNsaWNrIixmdW5jdGlvbigpe25lKGUpO2xldCByPXcoKTtyZXR1cm4gaWUoci5zb3J0QnlIZWFkZXIuZW1pdChudWxsPT1yLmNvbnRleHRNZW51SGVhZGVyP251bGw6ci5jb250ZXh0TWVudUhlYWRlci5uYW1lKSl9KSxrKDEsIm1hdC1pY29uIiwxMCksVCgyLCJTb3J0IEFzY2VuZGluZyAiKSxnKCl9fWZ1bmN0aW9uIGUzZShuLHQpe2lmKDEmbil7bGV0IGU9VGUoKTtmKDAsImJ1dHRvbiIsNiksQSgiY2xpY2siLGZ1bmN0aW9uKHIpe3JldHVybiBuZShlKSxpZSh3KCkub3BlbkZpbHRlck1lbnUuZW1pdChyKSl9KSxrKDEsIm1hdC1pY29uIiwxMSksVCgyLCIgRmlsdGVyICIpLGcoKX19ZnVuY3Rpb24gdDNlKG4sdCl7aWYoMSZuKXtsZXQgZT1UZSgpO2YoMCwiYnV0dG9uIiw2KSxBKCJjbGljayIsZnVuY3Rpb24ocil7bmUoZSk7bGV0IG89dygpO3JldHVybiBpZShvLm9wZW5Db2x1bW5TZWxlY3Rvci5lbWl0KHtldmVudDpyLGluc2VydFRvOm8uU2lkZS5MRUZULGlzU3ViTWVudTohMH0pKX0pLGsoMSwibWF0LWljb24iLDEyKSxUKDIsIkluc2VydCBDb2x1bW4gTGVmdCAiKSxnKCl9fWZ1bmN0aW9uIG4zZShuLHQpe2lmKDEmbil7bGV0IGU9VGUoKTtmKDAsImJ1dHRvbiIsNiksQSgiY2xpY2siLGZ1bmN0aW9uKHIpe25lKGUpO2xldCBvPXcoKTtyZXR1cm4gaWUoby5vcGVuQ29sdW1uU2VsZWN0b3IuZW1pdCh7ZXZlbnQ6cixpbnNlcnRUbzpvLlNpZGUuUklHSFQsaXNTdWJNZW51OiEwfSkpfSksaygxLCJtYXQtaWNvbiIsMTIpLFQoMiwiSW5zZXJ0IENvbHVtbiBSaWdodCAiKSxnKCl9fXZhciBpbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuY29udGV4dE1lbnVIZWFkZXI9dm9pZCAwLHRoaXMucmVtb3ZlQ29sdW1uPW5ldyBGLHRoaXMuc29ydEJ5SGVhZGVyPW5ldyBGLHRoaXMub3BlbkZpbHRlck1lbnU9bmV3IEYsdGhpcy5vcGVuQ29sdW1uU2VsZWN0b3I9bmV3IEYsdGhpcy5TaWRlPW1vLHRoaXMuU29ydGluZ09yZGVyPUxyfWlzQ29udGV4dE1lbnVFbXB0eSgpe3JldHVybiEodGhpcy5jb250ZXh0TWVudUhlYWRlcj8ucmVtb3ZhYmxlfHx0aGlzLmNvbnRleHRNZW51SGVhZGVyPy5zb3J0YWJsZXx8dGhpcy5jYW5Db250ZXh0TWVudUluc2VydCgpfHx0aGlzLmNvbnRleHRNZW51SGVhZGVyPy5maWx0ZXJhYmxlKX1jYW5Db250ZXh0TWVudUluc2VydCgpe3JldHVybiB0aGlzLnNlbGVjdGFibGVDb2x1bW5zPy5sZW5ndGgmJnRoaXMuY29udGV4dE1lbnVIZWFkZXI/Lm1vdmFibGUmJiJIUEFSQU0iPT09dGhpcy5jb250ZXh0TWVudUhlYWRlcj8udHlwZX1jb250ZXh0TWVudVJlbW92ZUNvbHVtbigpe3ZvaWQgMCE9PXRoaXMuY29udGV4dE1lbnVIZWFkZXImJnRoaXMucmVtb3ZlQ29sdW1uLmVtaXQodGhpcy5jb250ZXh0TWVudUhlYWRlcil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLWRhdGEtdGFibGUtY29udGV4dC1tZW51Il1dLGlucHV0czp7Y29udGV4dE1lbnVIZWFkZXI6ImNvbnRleHRNZW51SGVhZGVyIixzZWxlY3RhYmxlQ29sdW1uczoic2VsZWN0YWJsZUNvbHVtbnMiLHNvcnRpbmdJbmZvOiJzb3J0aW5nSW5mbyJ9LG91dHB1dHM6e3JlbW92ZUNvbHVtbjoicmVtb3ZlQ29sdW1uIixzb3J0QnlIZWFkZXI6InNvcnRCeUhlYWRlciIsb3BlbkZpbHRlck1lbnU6Im9wZW5GaWx0ZXJNZW51IixvcGVuQ29sdW1uU2VsZWN0b3I6Im9wZW5Db2x1bW5TZWxlY3RvciJ9LGRlY2xzOjgsdmFyczo3LGNvbnN0czpbWzEsImNvbnRleHQtbWVudSJdLFsiY2xhc3MiLCJuby1hY3Rpb25zLW1lc3NhZ2UiLDQsIm5nSWYiXSxbImNsYXNzIiwiY29udGV4dC1tZW51LWJ1dHRvbiIsIm1hdC1idXR0b24iLCIiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNvbnRleHQtbWVudS1idXR0b24gc29ydC1idXR0b24iLCJtYXQtYnV0dG9uIiwiIiwzLCJjbGljayIsNCwibmdJZiJdLFsibWF0LWJ1dHRvbiIsIiIsImNsYXNzIiwiY29udGV4dC1tZW51LWJ1dHRvbiIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwibm8tYWN0aW9ucy1tZXNzYWdlIl0sWyJtYXQtYnV0dG9uIiwiIiwxLCJjb250ZXh0LW1lbnUtYnV0dG9uIiwzLCJjbGljayJdLFsic3ZnSWNvbiIsImNsb3NlXzI0cHgiXSxbIm1hdC1idXR0b24iLCIiLDEsImNvbnRleHQtbWVudS1idXR0b24iLCJzb3J0LWJ1dHRvbiIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJhcnJvd19kb3dud2FyZF8yNHB4Il0sWyJzdmdJY29uIiwiYXJyb3dfdXB3YXJkXzI0cHgiXSxbInN2Z0ljb24iLCJmaWx0ZXJfYWx0XzI0cHgiXSxbInN2Z0ljb24iLCJhZGRfMjRweCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGYoMCwiZGl2IiwwKSxTKDEsWkxlLDIsMCwiZGl2IiwxKSxTKDIsS0xlLDMsMCwiYnV0dG9uIiwyKSxTKDMsSkxlLDMsMCwiYnV0dG9uIiwzKSxTKDQsJExlLDMsMCwiYnV0dG9uIiwzKSxTKDUsZTNlLDMsMCwiYnV0dG9uIiwyKSxTKDYsdDNlLDMsMCwiYnV0dG9uIiw0KSxTKDcsbjNlLDMsMCwiYnV0dG9uIiw0KSxnKCkpLDImZSYmKHYoMSksYigibmdJZiIsaS5pc0NvbnRleHRNZW51RW1wdHkoKSksdigxKSxiKCJuZ0lmIixudWxsPT1pLmNvbnRleHRNZW51SGVhZGVyP251bGw6aS5jb250ZXh0TWVudUhlYWRlci5yZW1vdmFibGUpLHYoMSksYigibmdJZiIsKG51bGw9PWkuY29udGV4dE1lbnVIZWFkZXI/bnVsbDppLmNvbnRleHRNZW51SGVhZGVyLnNvcnRhYmxlKSYmaS5zb3J0aW5nSW5mby5vcmRlcj09PWkuU29ydGluZ09yZGVyLkFTQ0VORElORyYmaS5zb3J0aW5nSW5mby5uYW1lPT09KG51bGw9PWkuY29udGV4dE1lbnVIZWFkZXI/bnVsbDppLmNvbnRleHRNZW51SGVhZGVyLm5hbWUpKSx2KDEpLGIoIm5nSWYiLChudWxsPT1pLmNvbnRleHRNZW51SGVhZGVyP251bGw6aS5jb250ZXh0TWVudUhlYWRlci5zb3J0YWJsZSkmJihpLnNvcnRpbmdJbmZvLm9yZGVyIT09aS5Tb3J0aW5nT3JkZXIuQVNDRU5ESU5HfHxpLnNvcnRpbmdJbmZvLm5hbWUhPT0obnVsbD09aS5jb250ZXh0TWVudUhlYWRlcj9udWxsOmkuY29udGV4dE1lbnVIZWFkZXIubmFtZSkpKSx2KDEpLGIoIm5nSWYiLG51bGw9PWkuY29udGV4dE1lbnVIZWFkZXI/bnVsbDppLmNvbnRleHRNZW51SGVhZGVyLmZpbHRlcmFibGUpLHYoMSksYigibmdJZiIsaS5jYW5Db250ZXh0TWVudUluc2VydCgpKSx2KDEpLGIoIm5nSWYiLGkuY2FuQ29udGV4dE1lbnVJbnNlcnQoKSkpfSxkZXBlbmRlbmNpZXM6W05lLGJuLGtpXSxzdHlsZXM6WyIuY29udGV4dC1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2JvcmRlci1yYWRpdXM6NHB4O2JvcmRlcjoxcHggc29saWQ7Ym94LXNoYWRvdzowcHggNHB4IDRweCByZ2JhKDAsMCwwLC4yNSk7Ym9yZGVyLWNvbG9yOiNlYmViZWI7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250ZXh0LW1lbnVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuY29udGV4dC1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6IzU1NTtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9LmNvbnRleHQtbWVudVtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGV4dC1tZW51LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17anVzdGlmeS1jb250ZW50OmxlZnQ7d2lkdGg6MTAwJTt0ZXh0LXdyYXA6bm93cmFwfS5jb250ZXh0LW1lbnVbX25nY29udGVudC0lQ09NUCVdICAgLm5vLWFjdGlvbnMtbWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzo4cHg7dGV4dC13cmFwOm5vd3JhcH0uY29udGV4dC1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zb3J0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAgIHBhdGh7ZmlsbDp1bnNldH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHIzZT1bImNvbnRleHRNZW51VGVtcGxhdGUiXSxvM2U9WyJmaWx0ZXJNb2RhbFRlbXBsYXRlIl0sYTNlPVsiY29sdW1uU2VsZWN0b3JNb2RhbFRlbXBsYXRlIl07ZnVuY3Rpb24gczNlKG4sdCl7aWYoMSZuKXtsZXQgZT1UZSgpO2YoMCwidGItZGF0YS10YWJsZS1jb250ZXh0LW1lbnUiLDkpLEEoInJlbW92ZUNvbHVtbiIsZnVuY3Rpb24ocil7cmV0dXJuIG5lKGUpLGllKHcoKS5vblJlbW92ZUNvbHVtbihyKSl9KSgic29ydEJ5SGVhZGVyIixmdW5jdGlvbihyKXtyZXR1cm4gbmUoZSksaWUodygpLnNvcnRCeUhlYWRlcihyKSl9KSgib3BlbkZpbHRlck1lbnUiLGZ1bmN0aW9uKHIpe3JldHVybiBuZShlKSxpZSh3KCkub3BlbkZpbHRlck1lbnUocikpfSkoIm9wZW5Db2x1bW5TZWxlY3RvciIsZnVuY3Rpb24ocil7cmV0dXJuIG5lKGUpLGllKHcoKS5vcGVuQ29sdW1uU2VsZWN0b3IocikpfSksZygpfWlmKDImbil7bGV0IGU9dygpO2IoImNvbnRleHRNZW51SGVhZGVyIixlLmNvbnRleHRNZW51SGVhZGVyKSgic2VsZWN0YWJsZUNvbHVtbnMiLGUuc2VsZWN0YWJsZUNvbHVtbnMpKCJzb3J0aW5nSW5mbyIsZS5zb3J0aW5nSW5mbyl9fWZ1bmN0aW9uIGwzZShuLHQpe2lmKDEmbil7bGV0IGU9VGUoKTtmKDAsInRiLWRhdGEtdGFibGUtY29sdW1uLXNlbGVjdG9yLWNvbXBvbmVudCIsMTApLEEoImNvbHVtblNlbGVjdGVkIixmdW5jdGlvbihyKXtyZXR1cm4gbmUoZSksaWUodygpLm9uQ29sdW1uQWRkZWQocikpfSkoImxvYWRBbGxDb2x1bW5zIixmdW5jdGlvbigpe3JldHVybiBuZShlKSxpZSh3KCkubG9hZEFsbENvbHVtbnMuZW1pdCgpKX0pLGcoKX1pZigyJm4pe2xldCBlPXcoKTtiKCJzZWxlY3RhYmxlQ29sdW1ucyIsZS5zZWxlY3RhYmxlQ29sdW1ucykoIm51bUNvbHVtbnNMb2FkZWQiLGUubnVtQ29sdW1uc0xvYWRlZCkoImhhc01vcmVDb2x1bW5zVG9Mb2FkIixlLmhhc01vcmVDb2x1bW5zVG9Mb2FkKX19ZnVuY3Rpb24gYzNlKG4sdCl7aWYoMSZuKXtsZXQgZT1UZSgpO2YoMCwidGItZGF0YS10YWJsZS1maWx0ZXIiLDExKSxBKCJpbnRlcnZhbEZpbHRlckNoYW5nZWQiLGZ1bmN0aW9uKHIpe3JldHVybiBuZShlKSxpZSh3KCkuaW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkKHIpKX0pKCJkaXNjcmV0ZUZpbHRlckNoYW5nZWQiLGZ1bmN0aW9uKHIpe3JldHVybiBuZShlKSxpZSh3KCkuZGlzY3JldGVGaWx0ZXJDaGFuZ2VkKHIpKX0pKCJpbmNsdWRlVW5kZWZpbmVkVG9nZ2xlZCIsZnVuY3Rpb24oKXtyZXR1cm4gbmUoZSksaWUodygpLmluY2x1ZGVVbmRlZmluZWRUb2dnbGVkKCkpfSksZygpfTImbiYmYigiZmlsdGVyIix3KCkuZ2V0Q3VycmVudENvbHVtbkZpbHRlcigpKX1mdW5jdGlvbiBkM2Uobix0KXtpZigxJm4pe2xldCBlPVRlKCk7ZigwLCJkaXYiLDEyKSgxLCJkaXYiLDEzKSgyLCJidXR0b24iLDE0KSxBKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIG5lKGUpLGllKHcoKS5vcGVuQ29sdW1uU2VsZWN0b3Ioe2V2ZW50OnJ9KSl9KSxrKDMsIm1hdC1pY29uIiwxNSksZygpKCkoKX1pZigyJm4pe2xldCBlPXcoKTt2KDEpLG50KCJzbWFsbC1hZGQtYnV0dG9uIixlLmFkZENvbHVtblNpemU9PT1lLkFkZENvbHVtblNpemUuU01BTEwpfX1mdW5jdGlvbiB1M2Uobix0KXsxJm4mJihmKDAsImRpdiIsMTYpLGsoMSwibWF0LXNwaW5uZXIiLDE3KSxnKCkpfXZhciBwM2U9W1tbIiIsImhlYWRlciIsIiJdXSxbWyIiLCJjb250ZW50IiwiIl1dXSxoM2U9WyJbaGVhZGVyXSIsIltjb250ZW50XSJdLHhWPWZ1bmN0aW9uKG4pe24ucHJldmVudERlZmF1bHQoKX0sbUE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuY3VzdG9tTW9kYWw9ZSx0aGlzLnZpZXdDb250YWluZXJSZWY9aSx0aGlzLmxvYWRpbmc9ITEsdGhpcy5zaG91bGRBZGRCb3JkZXJzPSExLHRoaXMuYWRkQ29sdW1uU2l6ZT12dS5ERUZBVUxULHRoaXMuaGVhZGVyQ2VsbFN1YnNjcmlwdGlvbnM9W10sdGhpcy5jb250ZW50Q2VsbFN1YnNjcmlwdGlvbnM9W10sdGhpcy5jb250ZXh0TWVudUhlYWRlcj12b2lkIDAsdGhpcy5pbnNlcnRDb2x1bW5Ubz12b2lkIDAsdGhpcy5maWx0ZXJDb2x1bW49dm9pZCAwLHRoaXMuc29ydERhdGFCeT1uZXcgRix0aGlzLm9yZGVyQ29sdW1ucz1uZXcgRix0aGlzLnJlbW92ZUNvbHVtbj1uZXcgRix0aGlzLmFkZENvbHVtbj1uZXcgRix0aGlzLmFkZEZpbHRlcj1uZXcgRix0aGlzLmxvYWRBbGxDb2x1bW5zPW5ldyBGLHRoaXMuaGlnaGxpZ2h0U2lkZT1tby5SSUdIVCx0aGlzLlNvcnRpbmdPcmRlcj1Mcix0aGlzLlNpZGU9bW8sdGhpcy5BZGRDb2x1bW5TaXplPXZ1fW5nT25EZXN0cm95KCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZHJhZ292ZXIiLHhWKSx0aGlzLmhlYWRlckNlbGxTdWJzY3JpcHRpb25zLmZvckVhY2goZT0+e2UudW5zdWJzY3JpYmUoKX0pfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc3luY0hlYWRlcnMoKSx0aGlzLmhlYWRlckNlbGxzLmNoYW5nZXMuc3Vic2NyaWJlKHRoaXMuc3luY0hlYWRlcnMuYmluZCh0aGlzKSksdGhpcy5zeW5jQ29udGVudCgpLHRoaXMuY29udGVudENlbGxzLmNoYW5nZXMuc3Vic2NyaWJlKHRoaXMuc3luY0NvbnRlbnQuYmluZCh0aGlzKSl9c3luY0hlYWRlcnMoKXt0aGlzLmhlYWRlckNlbGxTdWJzY3JpcHRpb25zLmZvckVhY2goZT0+e2UudW5zdWJzY3JpYmUoKX0pLHRoaXMuaGVhZGVyQ2VsbFN1YnNjcmlwdGlvbnM9W10sdGhpcy5oZWFkZXJDZWxscy5mb3JFYWNoKGU9Pnt0aGlzLmhlYWRlckNlbGxTdWJzY3JpcHRpb25zLnB1c2goZS5kcmFnU3RhcnQuc3Vic2NyaWJlKHRoaXMuZHJhZ1N0YXJ0LmJpbmQodGhpcykpLGUuZHJhZ0VudGVyLnN1YnNjcmliZSh0aGlzLmRyYWdFbnRlci5iaW5kKHRoaXMpKSxlLmRyYWdFbmQuc3Vic2NyaWJlKHRoaXMuZHJhZ0VuZC5iaW5kKHRoaXMpKSxlLmhlYWRlckNsaWNrZWQuc3Vic2NyaWJlKHRoaXMuc29ydEJ5SGVhZGVyLmJpbmQodGhpcykpLGUuY29udGV4dE1lbnVPcGVuZWQuc3Vic2NyaWJlKHRoaXMub3BlbkNvbnRleHRNZW51LmJpbmQodGhpcyxlLmhlYWRlcikpKX0pfXN5bmNDb250ZW50KCl7dGhpcy5jb250ZW50Q2VsbFN1YnNjcmlwdGlvbnMuZm9yRWFjaChlPT57ZS51bnN1YnNjcmliZSgpfSksdGhpcy5jb250ZW50Q2VsbFN1YnNjcmlwdGlvbnM9dGhpcy5jb250ZW50Q2VsbHMubWFwKGU9PltlLmNvbnRleHRNZW51T3BlbmVkLnN1YnNjcmliZSh0aGlzLm9wZW5Db250ZXh0TWVudS5iaW5kKHRoaXMsZS5oZWFkZXIpKV0pLmZsYXQoKX1zb3J0QnlIZWFkZXIoZSl7dGhpcy5zb3J0RGF0YUJ5LmVtaXQodGhpcy5zb3J0aW5nSW5mby5uYW1lIT09ZXx8dGhpcy5zb3J0aW5nSW5mby5vcmRlciE9PUxyLkFTQ0VORElORz97bmFtZTplLG9yZGVyOkxyLkFTQ0VORElOR306e25hbWU6ZSxvcmRlcjpMci5ERVNDRU5ESU5HfSl9ZHJhZ1N0YXJ0KGUpe3RoaXMuZHJhZ2dpbmdIZWFkZXJOYW1lPWUubmFtZSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIseFYpfWRyYWdFbmQoKXtpZighdGhpcy5kcmFnZ2luZ0hlYWRlck5hbWV8fCF0aGlzLmhpZ2hsaWdodGVkQ29sdW1uTmFtZSlyZXR1cm47bGV0IGU9dGhpcy5nZXRIZWFkZXJCeU5hbWUodGhpcy5kcmFnZ2luZ0hlYWRlck5hbWUpLGk9dGhpcy5nZXRIZWFkZXJCeU5hbWUodGhpcy5oaWdobGlnaHRlZENvbHVtbk5hbWUpO2UmJmkmJmUhPT1pJiZ0aGlzLm9yZGVyQ29sdW1ucy5lbWl0KHtzb3VyY2U6ZSxkZXN0aW5hdGlvbjppLHNpZGU6dGhpcy5oaWdobGlnaHRTaWRlfSksdGhpcy5kcmFnZ2luZ0hlYWRlck5hbWU9dm9pZCAwLHRoaXMuaGlnaGxpZ2h0ZWRDb2x1bW5OYW1lPXZvaWQgMCxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIseFYpLHRoaXMuaGVhZGVyQ2VsbHMuZm9yRWFjaChyPT57ci5oaWdobGlnaHRTdHlsZSQubmV4dCh7fSl9KX1kcmFnRW50ZXIoZSl7aWYoIXRoaXMuZHJhZ2dpbmdIZWFkZXJOYW1lfHwtMT09PXRoaXMuZ2V0SW5kZXhPZkhlYWRlcldpdGhOYW1lKGUubmFtZSkpcmV0dXJuO2xldCBpPXRoaXMuZ2V0SGVhZGVyQnlOYW1lKHRoaXMuZHJhZ2dpbmdIZWFkZXJOYW1lKTtpJiZrbC5jb2x1bW5Ub0dyb3VwKGUpIT09a2wuY29sdW1uVG9Hcm91cChpKXx8KHRoaXMuaGlnaGxpZ2h0U2lkZT10aGlzLmdldEluZGV4T2ZIZWFkZXJXaXRoTmFtZShlLm5hbWUpPHRoaXMuZ2V0SW5kZXhPZkhlYWRlcldpdGhOYW1lKHRoaXMuZHJhZ2dpbmdIZWFkZXJOYW1lKT9tby5MRUZUOm1vLlJJR0hULHRoaXMuaGlnaGxpZ2h0ZWRDb2x1bW5OYW1lPWUubmFtZSx0aGlzLmhlYWRlckNlbGxzLmZvckVhY2gocj0+e3IuaGlnaGxpZ2h0U3R5bGUkLm5leHQodGhpcy5nZXRIZWFkZXJIaWdobGlnaHRTdHlsZShyLmhlYWRlci5uYW1lKSl9KSl9bW92ZUhlYWRlcihlLGkpe2xldCByPVsuLi50aGlzLmhlYWRlcnNdO3JldHVybiByLnNwbGljZShlLDEpLHIuc3BsaWNlKGksMCx0aGlzLmhlYWRlcnNbZV0pLHJ9Z2V0SGVhZGVySGlnaGxpZ2h0U3R5bGUoZSl7cmV0dXJuIGUhPT10aGlzLmhpZ2hsaWdodGVkQ29sdW1uTmFtZT97fTp7aGlnaGxpZ2h0OiEwLCJoaWdobGlnaHQtYm9yZGVyLXJpZ2h0Ijp0aGlzLmhpZ2hsaWdodFNpZGU9PT1tby5SSUdIVCwiaGlnaGxpZ2h0LWJvcmRlci1sZWZ0Ijp0aGlzLmhpZ2hsaWdodFNpZGU9PT1tby5MRUZUfX1nZXRIZWFkZXJCeU5hbWUoZSl7cmV0dXJuIHRoaXMuaGVhZGVycy5maW5kKGk9PmkubmFtZT09PWUpfWdldEluZGV4T2ZIZWFkZXJXaXRoTmFtZShlKXtyZXR1cm4gdGhpcy5oZWFkZXJzLmZpbmRJbmRleChpPT5lPT09aS5uYW1lKX1vcGVuQ29udGV4dE1lbnUoZSxpKXtpLnN0b3BQcm9wYWdhdGlvbigpLGkucHJldmVudERlZmF1bHQoKSx0aGlzLmNvbnRleHRNZW51SGVhZGVyPWU7bGV0IG89aS50YXJnZXQucXVlcnlTZWxlY3RvcigiYnV0dG9uLmNvbnRleHQtbWVudS1jb250YWluZXIiKT8/aS50YXJnZXQ7dGhpcy5jdXN0b21Nb2RhbC5jcmVhdGVOZXh0VG9FbGVtZW50KHRoaXMuY29udGV4dE1lbnVUZW1wbGF0ZSxvLHRoaXMudmlld0NvbnRhaW5lclJlZil9b3BlbkNvbHVtblNlbGVjdG9yKHtldmVudDplLGluc2VydFRvOml9KXtlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuY2xvc2VTdWJtZW51cygpLHRoaXMuaW5zZXJ0Q29sdW1uVG89aSx0aGlzLmNvbHVtblNlbGVjdG9yTW9kYWxSZWY9dGhpcy5jdXN0b21Nb2RhbC5jcmVhdGVOZXh0VG9FbGVtZW50KHRoaXMuY29sdW1uU2VsZWN0b3JNb2RhbFRlbXBsYXRlLGUudGFyZ2V0LmNsb3Nlc3QoImJ1dHRvbiIpLHRoaXMudmlld0NvbnRhaW5lclJlZiksdGhpcy5jb2x1bW5TZWxlY3Rvck1vZGFsUmVmPy5vbkNsb3NlLnBpcGUoem0oKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5jb2x1bW5TZWxlY3Rvck1vZGFsUmVmPXZvaWQgMH0pfWNhbkNvbnRleHRNZW51UmVtb3ZlQ29sdW1uKCl7cmV0dXJuIHRoaXMuY29udGV4dE1lbnVIZWFkZXI/LnJlbW92YWJsZX1vblJlbW92ZUNvbHVtbihlKXt0aGlzLnJlbW92ZUNvbHVtbi5lbWl0KGUpLHRoaXMuY3VzdG9tTW9kYWwuY2xvc2VBbGwoKX1vbkNvbHVtbkFkZGVkKGUpe3RoaXMuYWRkQ29sdW1uLmVtaXQoe2NvbHVtbjplLG5leHRUbzp0aGlzLmNvbnRleHRNZW51SGVhZGVyLHNpZGU6dGhpcy5pbnNlcnRDb2x1bW5Ub30pfWNsb3NlU3VibWVudXMoKXt0aGlzLmZpbHRlck1vZGFsUmVmJiZ0aGlzLmN1c3RvbU1vZGFsLmNsb3NlKHRoaXMuZmlsdGVyTW9kYWxSZWYpLHRoaXMuY29sdW1uU2VsZWN0b3JNb2RhbFJlZiYmdGhpcy5jdXN0b21Nb2RhbC5jbG9zZSh0aGlzLmNvbHVtblNlbGVjdG9yTW9kYWxSZWYpfW9wZW5GaWx0ZXJNZW51KGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5jbG9zZVN1Ym1lbnVzKCksdGhpcy5maWx0ZXJDb2x1bW49dGhpcy5jb250ZXh0TWVudUhlYWRlcix0aGlzLmZpbHRlck1vZGFsUmVmPXRoaXMuY3VzdG9tTW9kYWwuY3JlYXRlTmV4dFRvRWxlbWVudCh0aGlzLmZpbHRlck1vZGFsVGVtcGxhdGUsZS50YXJnZXQuY2xvc2VzdCgiYnV0dG9uIiksdGhpcy52aWV3Q29udGFpbmVyUmVmKSx0aGlzLmZpbHRlck1vZGFsUmVmPy5vbkNsb3NlLnBpcGUoem0oKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5maWx0ZXJNb2RhbFJlZj12b2lkIDB9KX1nZXRDdXJyZW50Q29sdW1uRmlsdGVyKCl7aWYodGhpcy5maWx0ZXJDb2x1bW4pcmV0dXJuIHRoaXMuY29sdW1uRmlsdGVycy5nZXQodGhpcy5maWx0ZXJDb2x1bW4ubmFtZSl9aW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkKGUpe2lmKCF0aGlzLmZpbHRlckNvbHVtbilyZXR1cm47bGV0IGk9dGhpcy5nZXRDdXJyZW50Q29sdW1uRmlsdGVyKCk7IWl8fHRoaXMuYWRkRmlsdGVyLmVtaXQoe25hbWU6dGhpcy5maWx0ZXJDb2x1bW4ubmFtZSx2YWx1ZTp7Li4uaSxmaWx0ZXJMb3dlclZhbHVlOmUubG93ZXJWYWx1ZSxmaWx0ZXJVcHBlclZhbHVlOmUudXBwZXJWYWx1ZX19KX1kaXNjcmV0ZUZpbHRlckNoYW5nZWQoZSl7aWYoIXRoaXMuZmlsdGVyQ29sdW1uKXJldHVybjtsZXQgaT10aGlzLmdldEN1cnJlbnRDb2x1bW5GaWx0ZXIoKTtpZighaSlyZXR1cm47bGV0IHI9bmV3IFNldChbLi4uaS5maWx0ZXJWYWx1ZXNdKTtyLmhhcyhlKT9yLmRlbGV0ZShlKTpyLmFkZChlKSx0aGlzLmFkZEZpbHRlci5lbWl0KHtuYW1lOnRoaXMuZmlsdGVyQ29sdW1uLm5hbWUsdmFsdWU6ey4uLmksZmlsdGVyVmFsdWVzOkFycmF5LmZyb20ocil9fSl9aW5jbHVkZVVuZGVmaW5lZFRvZ2dsZWQoKXtpZighdGhpcy5maWx0ZXJDb2x1bW4pcmV0dXJuO2xldCBlPXRoaXMuZ2V0Q3VycmVudENvbHVtbkZpbHRlcigpOyFlfHx0aGlzLmFkZEZpbHRlci5lbWl0KHtuYW1lOnRoaXMuZmlsdGVyQ29sdW1uLm5hbWUsdmFsdWU6ey4uLmUsaW5jbHVkZVVuZGVmaW5lZDohZS5pbmNsdWRlVW5kZWZpbmVkfX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKHVBKSxDKGVpKSl9LG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1sidGItZGF0YS10YWJsZSJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihlLGkscil7aWYoMSZlJiYoQm4ocixmXyw0KSxCbihyLG1fLDUpKSwyJmUpe2xldCBvO2JlKG89dmUoKSkmJihpLmhlYWRlckNlbGxzPW8pLGJlKG89dmUoKSkmJihpLmNvbnRlbnRDZWxscz1vKX19LHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKFVlKHIzZSw1LG9pKSxVZShvM2UsNSxvaSksVWUoYTNlLDUsb2kpKSwyJmUpe2xldCByO2JlKHI9dmUoKSkmJihpLmNvbnRleHRNZW51VGVtcGxhdGU9ci5maXJzdCksYmUocj12ZSgpKSYmKGkuZmlsdGVyTW9kYWxUZW1wbGF0ZT1yLmZpcnN0KSxiZShyPXZlKCkpJiYoaS5jb2x1bW5TZWxlY3Rvck1vZGFsVGVtcGxhdGU9ci5maXJzdCl9fSxpbnB1dHM6e2hlYWRlcnM6ImhlYWRlcnMiLHNvcnRpbmdJbmZvOiJzb3J0aW5nSW5mbyIsc2VsZWN0YWJsZUNvbHVtbnM6InNlbGVjdGFibGVDb2x1bW5zIixudW1Db2x1bW5zTG9hZGVkOiJudW1Db2x1bW5zTG9hZGVkIixoYXNNb3JlQ29sdW1uc1RvTG9hZDoiaGFzTW9yZUNvbHVtbnNUb0xvYWQiLGNvbHVtbkZpbHRlcnM6ImNvbHVtbkZpbHRlcnMiLGxvYWRpbmc6ImxvYWRpbmciLHNob3VsZEFkZEJvcmRlcnM6InNob3VsZEFkZEJvcmRlcnMiLGFkZENvbHVtblNpemU6ImFkZENvbHVtblNpemUifSxvdXRwdXRzOntzb3J0RGF0YUJ5OiJzb3J0RGF0YUJ5IixvcmRlckNvbHVtbnM6Im9yZGVyQ29sdW1ucyIscmVtb3ZlQ29sdW1uOiJyZW1vdmVDb2x1bW4iLGFkZENvbHVtbjoiYWRkQ29sdW1uIixhZGRGaWx0ZXI6ImFkZEZpbHRlciIsbG9hZEFsbENvbHVtbnM6ImxvYWRBbGxDb2x1bW5zIn0sbmdDb250ZW50U2VsZWN0b3JzOmgzZSxkZWNsczoxNCx2YXJzOjQsY29uc3RzOltbImNvbnRleHRNZW51VGVtcGxhdGUiLCIiXSxbImNvbHVtblNlbGVjdG9yTW9kYWxUZW1wbGF0ZSIsIiJdLFsiZmlsdGVyTW9kYWxUZW1wbGF0ZSIsIiJdLFsxLCJkYXRhLXRhYmxlLXdyYXBwZXIiXSxbMSwibGVmdC1zZWN0aW9uIl0sWzEsImRhdGEtdGFibGUiXSxbMSwiaGVhZGVyIl0sWyJjbGFzcyIsInJpZ2h0LXNlY3Rpb24iLDQsIm5nSWYiXSxbImNsYXNzIiwibG9hZGluZyIsNCwibmdJZiJdLFszLCJjb250ZXh0TWVudUhlYWRlciIsInNlbGVjdGFibGVDb2x1bW5zIiwic29ydGluZ0luZm8iLCJyZW1vdmVDb2x1bW4iLCJzb3J0QnlIZWFkZXIiLCJvcGVuRmlsdGVyTWVudSIsIm9wZW5Db2x1bW5TZWxlY3RvciJdLFszLCJzZWxlY3RhYmxlQ29sdW1ucyIsIm51bUNvbHVtbnNMb2FkZWQiLCJoYXNNb3JlQ29sdW1uc1RvTG9hZCIsImNvbHVtblNlbGVjdGVkIiwibG9hZEFsbENvbHVtbnMiXSxbMywiZmlsdGVyIiwiaW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkIiwiZGlzY3JldGVGaWx0ZXJDaGFuZ2VkIiwiaW5jbHVkZVVuZGVmaW5lZFRvZ2dsZWQiXSxbMSwicmlnaHQtc2VjdGlvbiJdLFsxLCJhZGQtYnV0dG9uLWNvbHVtbiJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwidGl0bGUiLCJBZGQgQ29sdW1uIiwxLCJhZGQtYnV0dG9uIiwzLCJjbGljayJdLFsic3ZnSWNvbiIsImFkZF8yNHB4Il0sWzEsImxvYWRpbmciXSxbIm1vZGUiLCJpbmRldGVybWluYXRlIiwiZGlhbWV0ZXIiLCIyOCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGZuKHAzZSksUygwLHMzZSwxLDMsIm5nLXRlbXBsYXRlIixudWxsLDAsanQpLFMoMixsM2UsMSwzLCJuZy10ZW1wbGF0ZSIsbnVsbCwxLGp0KSxTKDQsYzNlLDEsMSwibmctdGVtcGxhdGUiLG51bGwsMixqdCksZig2LCJkaXYiLDMpKDcsImRpdiIsNCkoOCwiZGl2Iiw1KSg5LCJkaXYiLDYpLFR0KDEwKSxnKCksVHQoMTEsMSksZygpKCksUygxMixkM2UsNCwyLCJkaXYiLDcpLGcoKSxTKDEzLHUzZSwyLDAsImRpdiIsOCkpLDImZSYmKHYoNiksbnQoInNob3VsZC1hZGQtYm9yZGVycyIsaS5zaG91bGRBZGRCb3JkZXJzKSx2KDYpLGIoIm5nSWYiLGkuc2VsZWN0YWJsZUNvbHVtbnMmJmkuc2VsZWN0YWJsZUNvbHVtbnMubGVuZ3RoKSx2KDEpLGIoIm5nSWYiLGkubG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W05lLGJuLEVyLE5jLFp0ZSxoQSxpbmVdLHN0eWxlczpbIi5kYXRhLXRhYmxlLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleH0uZGF0YS10YWJsZS13cmFwcGVyLnNob3VsZC1hZGQtYm9yZGVyc1tfbmdjb250ZW50LSVDT01QJV0gICAubGVmdC1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmRhdGEtdGFibGUtd3JhcHBlci5zaG91bGQtYWRkLWJvcmRlcnNbX25nY29udGVudC0lQ09NUCVdICAgLnJpZ2h0LXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MXB4IHNvbGlkICNlYmViZWJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmRhdGEtdGFibGUtd3JhcHBlci5zaG91bGQtYWRkLWJvcmRlcnNbX25nY29udGVudC0lQ09NUCVdICAgLmxlZnQtc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5kYXRhLXRhYmxlLXdyYXBwZXIuc2hvdWxkLWFkZC1ib3JkZXJzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5sZWZ0LXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmRhdGEtdGFibGUtd3JhcHBlci5zaG91bGQtYWRkLWJvcmRlcnNbX25nY29udGVudC0lQ09NUCVdICAgLnJpZ2h0LXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZGF0YS10YWJsZS13cmFwcGVyLnNob3VsZC1hZGQtYm9yZGVyc1tfbmdjb250ZW50LSVDT01QJV0gICAucmlnaHQtc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzU1NX0uZGF0YS10YWJsZS13cmFwcGVyLnNob3VsZC1hZGQtYm9yZGVyc1tfbmdjb250ZW50LSVDT01QJV0gICAuYWRkLWJ1dHRvbi1jb2x1bW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZWJlYmVifWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5kYXRhLXRhYmxlLXdyYXBwZXIuc2hvdWxkLWFkZC1ib3JkZXJzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5hZGQtYnV0dG9uLWNvbHVtbltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5kYXRhLXRhYmxlLXdyYXBwZXIuc2hvdWxkLWFkZC1ib3JkZXJzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5hZGQtYnV0dG9uLWNvbHVtbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICM1NTV9LmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxM3B4O2Rpc3BsYXk6dGFibGU7d2lkdGg6MTAwJX0uZGF0YS10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAuaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7ZGlzcGxheTp0YWJsZS1yb3c7Zm9udC13ZWlnaHQ6Ym9sZDtwb3NpdGlvbjpzdGlja3k7dGV4dC1hbGlnbjpsZWZ0O3RvcDowO3ZlcnRpY2FsLWFsaWduOmJvdHRvbTt6LWluZGV4OjF9LmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlcltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH0ubG9hZGluZ1tfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2JvcmRlcjowO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTpmbGV4O2hlaWdodDo0OHB4O3BhZGRpbmc6MCAyNHB4O2p1c3RpZnktY29udGVudDpjZW50ZXJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmxvYWRpbmdbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAubG9hZGluZ1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX0ubGVmdC1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWdyb3c6MX0ucmlnaHQtc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmO3Bvc2l0aW9uOnN0aWNreTtyaWdodDotMXB4O3otaW5kZXg6MX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAucmlnaHQtc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5yaWdodC1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9LnJpZ2h0LXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVdICAgLmFkZC1idXR0b24tY29sdW1uW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDo0MHB4O2hlaWdodDoxMDAlfS5yaWdodC1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5hZGQtYnV0dG9uLWNvbHVtbltfbmdjb250ZW50LSVDT01QJV0gICAuYWRkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246c3RpY2t5O3RvcDowfS5yaWdodC1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5hZGQtYnV0dG9uLWNvbHVtbi5zbWFsbC1hZGQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjt3aWR0aDoyNHB4fS5yaWdodC1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5hZGQtYnV0dG9uLWNvbHVtbi5zbWFsbC1hZGQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5hZGQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXstLXRiLWljb24tYnV0dG9uLXdpZHRoOiAyMHB4Oy0tdGItaWNvbi1idXR0b24taGVpZ2h0OiAyMHB4fSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gbTNlKG4sdCl7aWYoMSZuJiZrKDAsInRiLWRhdGEtdGFibGUtaGVhZGVyLWNlbGwiLDUpLDImbil7bGV0IGU9dygpLiRpbXBsaWNpdCxpPXcoKTtiKCJoZWFkZXIiLGUpKCJzb3J0aW5nSW5mbyIsaS5zb3J0aW5nSW5mbykoImRpc2FibGVDb250ZXh0TWVudSIsIWkuY29sdW1uQ29udGV4dE1lbnVzRW5hYmxlZCl9fWZ1bmN0aW9uIGYzZShuLHQpe2lmKDEmbiYmKEd0KDApLFMoMSxtM2UsMSwzLCJ0Yi1kYXRhLXRhYmxlLWhlYWRlci1jZWxsIiw0KSxXdCgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dygpO3YoMSksYigibmdJZiIsZS5lbmFibGVkJiYoZS50eXBlIT09aS5Db2x1bW5IZWFkZXJUeXBlLlNNT09USEVEfHxpLnNtb290aGluZ0VuYWJsZWQpKX19ZnVuY3Rpb24gZzNlKG4sdCl7aWYoMSZuJiYoZigwLCJkaXYiLDkpLGsoMSwic3BhbiIpLGcoKSksMiZuKXtsZXQgZT13KDMpLiRpbXBsaWNpdDt2KDEpLEJ0KCJiYWNrZ3JvdW5kLWNvbG9yIixlLmNvbG9yKX19ZnVuY3Rpb24gXzNlKG4sdCl7aWYoMSZuJiYoZigwLCJ0Yi1kYXRhLXRhYmxlLWNvbnRlbnQtY2VsbCIsNyksUygxLGczZSwyLDIsImRpdiIsOCksZygpKSwyJm4pe2xldCBlPXcoKS4kaW1wbGljaXQsaT13KCkuJGltcGxpY2l0LHI9dygpO2IoImhlYWRlciIsZSkoImRhdHVtIixpW2UubmFtZV0pLHYoMSksYigibmdJZiIsZS50eXBlPT09ci5Db2x1bW5IZWFkZXJUeXBlLkNPTE9SKX19ZnVuY3Rpb24gYjNlKG4sdCl7aWYoMSZuJiYoR3QoMCksUygxLF8zZSwyLDMsInRiLWRhdGEtdGFibGUtY29udGVudC1jZWxsIiw2KSxXdCgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dygyKTt2KDEpLGIoIm5nSWYiLGUuZW5hYmxlZCYmKGUudHlwZSE9PWkuQ29sdW1uSGVhZGVyVHlwZS5TTU9PVEhFRHx8aS5zbW9vdGhpbmdFbmFibGVkKSl9fWZ1bmN0aW9uIHYzZShuLHQpe2lmKDEmbiYmKEd0KDApLGYoMSwidGItZGF0YS10YWJsZS1jb250ZW50LXJvdyIpLFMoMixiM2UsMiwxLCJuZy1jb250YWluZXIiLDIpLGcoKSxXdCgpKSwyJm4pe2xldCBlPXcoKTt2KDIpLGIoIm5nRm9yT2YiLGUuZXh0ZW5kSGVhZGVycyhlLmNvbHVtbkhlYWRlcnMpKX19dmFyIGFuZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5zb3J0RGF0YUJ5PW5ldyBGLHRoaXMuZWRpdENvbHVtbkhlYWRlcnM9bmV3IEYsdGhpcy5hZGRDb2x1bW49bmV3IEYsdGhpcy5yZW1vdmVDb2x1bW49bmV3IEYsdGhpcy5hZGRGaWx0ZXI9bmV3IEYsdGhpcy5sb2FkQWxsQ29sdW1ucz1uZXcgRix0aGlzLkNvbHVtbkhlYWRlclR5cGU9Z3QsdGhpcy5BZGRDb2x1bW5TaXplPXZ1LHRoaXMuZXh0ZW5kSGVhZGVycz1fcyh0aGlzLmludGVybmFsRXh0ZW5kSGVhZGVycyl9aW50ZXJuYWxFeHRlbmRIZWFkZXJzKGUpe3JldHVybltdLmNvbmNhdChbe25hbWU6ImNvbG9yIixkaXNwbGF5TmFtZToiIix0eXBlOmd0LkNPTE9SLGVuYWJsZWQ6ITB9XSxlKX1nZXRNaW5Qb2ludEluUmFuZ2UoZSxpLHIpe2xldCBvPWVbaV0ueSxhPWVbaV07Zm9yKGxldCBzPWk7czw9cjtzKyspbz5lW3NdLnkmJihvPWVbc10ueSxhPWVbc10pO3JldHVybiBhfWdldE1heFBvaW50SW5SYW5nZShlLGkscil7bGV0IG89ZVtpXS55LGE9ZVtpXTtmb3IobGV0IHM9aTtzPD1yO3MrKylvPGVbc10ueSYmKG89ZVtzXS55LGE9ZVtzXSk7cmV0dXJuIGF9Z2V0TWVhbihlLGkscil7bGV0IG89MDtmb3IobGV0IGE9aTthPD1yO2ErKylvKz1lW2FdLnZhbHVlO3JldHVybiBvLyhyLWkrMSl9Z2V0VGltZVNlbGVjdGlvblRhYmxlRGF0YSgpe2lmKCF0aGlzLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24pcmV0dXJuW107bGV0IGU9dGhpcy5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uLnN0YXJ0LnN0ZXAsaT10aGlzLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24uZW5kPy5zdGVwLHI9dGhpcy5kYXRhU2VyaWVzLmZpbHRlcihhPT5HUyhhLHRoaXMuY2hhcnRNZXRhZGF0YU1hcCkpLm1hcChhPT57bGV0IHM9dGhpcy5jaGFydE1ldGFkYXRhTWFwW2EuaWRdLGw9WngoYS5wb2ludHMsZSksYz1hLnBvaW50c1tsXSxkPW51bGwsdT1udWxsO251bGwhPWkmJih1PVp4KGEucG9pbnRzLGkpLGQ9YS5wb2ludHNbdV0pO2xldCBwPXtpZDphLmlkLGNvbG9yOnMuY29sb3J9O2ZvcihsZXQgaCBvZiB0aGlzLmNvbHVtbkhlYWRlcnMpc3dpdGNoKGgudHlwZSl7Y2FzZSBndC5SVU46bGV0IG09IiI7cy5hbGlhcyYmKG09YCR7cy5hbGlhcy5hbGlhc051bWJlcn0gJHtzLmFsaWFzLmFsaWFzVGV4dH0vYCkscFtoLm5hbWVdPWAke219JHtzLmRpc3BsYXlOYW1lfWA7Y29udGludWU7Y2FzZSBndC5TVEVQOnBbaC5uYW1lXT1jLnN0ZXA7Y29udGludWU7Y2FzZSBndC5WQUxVRTpwW2gubmFtZV09Yy52YWx1ZTtjb250aW51ZTtjYXNlIGd0LlJFTEFUSVZFX1RJTUU6cFtoLm5hbWVdPWMucmVsYXRpdmVUaW1lSW5Ncztjb250aW51ZTtjYXNlIGd0LlNNT09USEVEOnBbaC5uYW1lXT1jLnk7Y29udGludWU7Y2FzZSBndC5WQUxVRV9DSEFOR0U6aWYoIWQpY29udGludWU7cFtoLm5hbWVdPWQueS1jLnk7Y29udGludWU7Y2FzZSBndC5TVEFSVF9TVEVQOnBbaC5uYW1lXT1jLnN0ZXA7Y29udGludWU7Y2FzZSBndC5FTkRfU1RFUDppZighZCljb250aW51ZTtwW2gubmFtZV09ZC5zdGVwO2NvbnRpbnVlO2Nhc2UgZ3QuU1RBUlRfVkFMVUU6cFtoLm5hbWVdPWMueTtjb250aW51ZTtjYXNlIGd0LkVORF9WQUxVRTppZighZCljb250aW51ZTtwW2gubmFtZV09ZC55O2NvbnRpbnVlO2Nhc2UgZ3QuTUlOX1ZBTFVFOmlmKCF1KWNvbnRpbnVlO3BbaC5uYW1lXT10aGlzLmdldE1pblBvaW50SW5SYW5nZShhLnBvaW50cyxsLHUpLnk7Y29udGludWU7Y2FzZSBndC5NQVhfVkFMVUU6aWYoIXUpY29udGludWU7cFtoLm5hbWVdPXRoaXMuZ2V0TWF4UG9pbnRJblJhbmdlKGEucG9pbnRzLGwsdSkueTtjb250aW51ZTtjYXNlIGd0LlBFUkNFTlRBR0VfQ0hBTkdFOmlmKCFkKWNvbnRpbnVlO3BbaC5uYW1lXT0oZC55LWMueSkvYy55O2NvbnRpbnVlO2Nhc2UgZ3QuU1RFUF9BVF9NQVg6aWYoIXUpY29udGludWU7cFtoLm5hbWVdPXRoaXMuZ2V0TWF4UG9pbnRJblJhbmdlKGEucG9pbnRzLGwsdSkuc3RlcDtjb250aW51ZTtjYXNlIGd0LlNURVBfQVRfTUlOOmlmKCF1KWNvbnRpbnVlO3BbaC5uYW1lXT10aGlzLmdldE1pblBvaW50SW5SYW5nZShhLnBvaW50cyxsLHUpLnN0ZXA7Y29udGludWU7Y2FzZSBndC5NRUFOOmlmKCF1KWNvbnRpbnVlO3BbaC5uYW1lXT10aGlzLmdldE1lYW4oYS5wb2ludHMsbCx1KTtjb250aW51ZTtjYXNlIGd0LlJBV19DSEFOR0U6aWYoIWQpY29udGludWU7cFtoLm5hbWVdPWQudmFsdWUtYy52YWx1ZTtjb250aW51ZTtjYXNlIGd0LkhQQVJBTTpwW2gubmFtZV09dGhpcy5ydW5Ub0hwYXJhbU1hcD8uW3Mub3JpZ2luYWxTZXJpZXNJZHx8cy5pZF0/LmdldChoLm5hbWUpPz8iIjtjb250aW51ZTtkZWZhdWx0OmNvbnRpbnVlfXJldHVybiBwfSksbz10aGlzLmNvbHVtbkhlYWRlcnMuZmluZChhPT5hLm5hbWU9PT10aGlzLnNvcnRpbmdJbmZvLm5hbWUpO3JldHVybiB2b2lkIDAhPT1vJiZyLnNvcnQoKGEscyk9PntpZighbylyZXR1cm4gMDtsZXQgbD10aGlzLmdldFNvcnRhYmxlVmFsdWUoYSxvKSxjPXRoaXMuZ2V0U29ydGFibGVWYWx1ZShzLG8pO3JldHVybiBsPGM/dGhpcy5zb3J0aW5nSW5mby5vcmRlcj09PUxyLkFTQ0VORElORz8tMToxOmw+Yz90aGlzLnNvcnRpbmdJbmZvLm9yZGVyPT09THIuQVNDRU5ESU5HPzE6LTE6MH0pLHJ9Z2V0U29ydGFibGVWYWx1ZShlLGkpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIG58fE51bWJlci5pc05hTihuKXx8Ik5hTiI9PT1ufHxudWxsPT1uPy0xLzA6bn0oaS50eXBlPT09Z3QuUlVOP3RoaXMuY2hhcnRNZXRhZGF0YU1hcFtlLmlkXS5kaXNwbGF5TmFtZTplW2kubmFtZV0pfWdldERhdGFUYWJsZU1vZGUoKXtyZXR1cm4gdGhpcy5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uLmVuZD9Xci5SQU5HRTpXci5TSU5HTEV9b25PcmRlckNvbHVtbnMoe3NvdXJjZTplLGRlc3RpbmF0aW9uOmksc2lkZTpyfSl7dGhpcy5lZGl0Q29sdW1uSGVhZGVycy5lbWl0KHtzb3VyY2U6ZSxkZXN0aW5hdGlvbjppLHNpZGU6cixkYXRhVGFibGVNb2RlOnRoaXMuZ2V0RGF0YVRhYmxlTW9kZSgpfSl9b25SZW1vdmVDb2x1bW4oZSl7dGhpcy5yZW1vdmVDb2x1bW4uZW1pdCh7aGVhZGVyOmUsZGF0YVRhYmxlTW9kZTp0aGlzLmdldERhdGFUYWJsZU1vZGUoKX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJzY2FsYXItY2FyZC1kYXRhLXRhYmxlIl1dLGlucHV0czp7Y2hhcnRNZXRhZGF0YU1hcDoiY2hhcnRNZXRhZGF0YU1hcCIsZGF0YVNlcmllczoiZGF0YVNlcmllcyIsc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbjoic3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbiIsY29sdW1uSGVhZGVyczoiY29sdW1uSGVhZGVycyIsc29ydGluZ0luZm86InNvcnRpbmdJbmZvIixjb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZDoiY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQiLGNvbHVtbkNvbnRleHRNZW51c0VuYWJsZWQ6ImNvbHVtbkNvbnRleHRNZW51c0VuYWJsZWQiLHNtb290aGluZ0VuYWJsZWQ6InNtb290aGluZ0VuYWJsZWQiLGNvbHVtbkZpbHRlcnM6ImNvbHVtbkZpbHRlcnMiLHNlbGVjdGFibGVDb2x1bW5zOiJzZWxlY3RhYmxlQ29sdW1ucyIsbnVtQ29sdW1uc0xvYWRlZDoibnVtQ29sdW1uc0xvYWRlZCIsbnVtQ29sdW1uc1RvTG9hZDoibnVtQ29sdW1uc1RvTG9hZCIscnVuVG9IcGFyYW1NYXA6InJ1blRvSHBhcmFtTWFwIn0sb3V0cHV0czp7c29ydERhdGFCeToic29ydERhdGFCeSIsZWRpdENvbHVtbkhlYWRlcnM6ImVkaXRDb2x1bW5IZWFkZXJzIixhZGRDb2x1bW46ImFkZENvbHVtbiIscmVtb3ZlQ29sdW1uOiJyZW1vdmVDb2x1bW4iLGFkZEZpbHRlcjoiYWRkRmlsdGVyIixsb2FkQWxsQ29sdW1uczoibG9hZEFsbENvbHVtbnMifSxkZWNsczo1LHZhcnM6OSxjb25zdHM6W1szLCJoZWFkZXJzIiwic29ydGluZ0luZm8iLCJjb2x1bW5GaWx0ZXJzIiwic2VsZWN0YWJsZUNvbHVtbnMiLCJudW1Db2x1bW5zTG9hZGVkIiwiaGFzTW9yZUNvbHVtbnNUb0xvYWQiLCJhZGRDb2x1bW5TaXplIiwic29ydERhdGFCeSIsIm9yZGVyQ29sdW1ucyIsImFkZENvbHVtbiIsInJlbW92ZUNvbHVtbiIsImFkZEZpbHRlciIsImxvYWRBbGxDb2x1bW5zIl0sWyJoZWFkZXIiLCIiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjb250ZW50IiwiIl0sWzMsImhlYWRlciIsInNvcnRpbmdJbmZvIiwiZGlzYWJsZUNvbnRleHRNZW51Iiw0LCJuZ0lmIl0sWzMsImhlYWRlciIsInNvcnRpbmdJbmZvIiwiZGlzYWJsZUNvbnRleHRNZW51Il0sWzMsImhlYWRlciIsImRhdHVtIiw0LCJuZ0lmIl0sWzMsImhlYWRlciIsImRhdHVtIl0sWyJjbGFzcyIsInJvdy1jaXJjbGUiLDQsIm5nSWYiXSxbMSwicm93LWNpcmNsZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGYoMCwidGItZGF0YS10YWJsZSIsMCksQSgic29ydERhdGFCeSIsZnVuY3Rpb24obyl7cmV0dXJuIGkuc29ydERhdGFCeS5lbWl0KG8pfSkoIm9yZGVyQ29sdW1ucyIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25PcmRlckNvbHVtbnMobyl9KSgiYWRkQ29sdW1uIixmdW5jdGlvbihvKXtyZXR1cm4gaS5hZGRDb2x1bW4uZW1pdChvKX0pKCJyZW1vdmVDb2x1bW4iLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uUmVtb3ZlQ29sdW1uKG8pfSkoImFkZEZpbHRlciIsZnVuY3Rpb24obyl7cmV0dXJuIGkuYWRkRmlsdGVyLmVtaXQobyl9KSgibG9hZEFsbENvbHVtbnMiLGZ1bmN0aW9uKCl7cmV0dXJuIGkubG9hZEFsbENvbHVtbnMuZW1pdCgpfSksR3QoMSwxKSxTKDIsZjNlLDIsMSwibmctY29udGFpbmVyIiwyKSxXdCgpLEd0KDMsMyksUyg0LHYzZSwzLDEsIm5nLWNvbnRhaW5lciIsMiksV3QoKSxnKCkpLDImZSYmKGIoImhlYWRlcnMiLGkuY29sdW1uSGVhZGVycykoInNvcnRpbmdJbmZvIixpLnNvcnRpbmdJbmZvKSgiY29sdW1uRmlsdGVycyIsaS5jb2x1bW5GaWx0ZXJzKSgic2VsZWN0YWJsZUNvbHVtbnMiLGkuc2VsZWN0YWJsZUNvbHVtbnMpKCJudW1Db2x1bW5zTG9hZGVkIixpLm51bUNvbHVtbnNMb2FkZWQpKCJoYXNNb3JlQ29sdW1uc1RvTG9hZCIsaS5udW1Db2x1bW5zTG9hZGVkPT09aS5udW1Db2x1bW5zVG9Mb2FkKSgiYWRkQ29sdW1uU2l6ZSIsaS5BZGRDb2x1bW5TaXplLlNNQUxMKSx2KDIpLGIoIm5nRm9yT2YiLGkuZXh0ZW5kSGVhZGVycyhpLmNvbHVtbkhlYWRlcnMpKSx2KDIpLGIoIm5nRm9yT2YiLGkuZ2V0VGltZVNlbGVjdGlvblRhYmxlRGF0YSgpKSl9LGRlcGVuZGVuY2llczpbbm4sTmUsbV8sZEEsbUEsZl9dLHN0eWxlczpbInRiLWRhdGEtdGFibGUtY29udGVudC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgdGItZGF0YS10YWJsZS1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzo0cHh9LnJvdy1jaXJjbGVbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMnB4O3dpZHRoOjEycHh9LnJvdy1jaXJjbGVbX25nY29udGVudC0lQ09NUCVdID4gc3Bhbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJhZGl1czo1MCU7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC40KTtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTBweDt3aWR0aDoxMHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO3ZhciB4M2U9WyJzdGVwU3BhbiJdO2Z1bmN0aW9uIEMzZShuLHQpe2lmKDEmbil7bGV0IGU9VGUoKTtmKDAsImJ1dHRvbiIsNCksQSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIG5lKGUpLGllKHcoKS5mb2JSZW1vdmVkLmVtaXQoKSl9KSxrKDEsIm1hdC1pY29uIiw1KSxnKCl9fWZ1bmN0aW9uIE0zZShuLHQpe2lmKDEmbil7bGV0IGU9VGUoKTtmKDAsImJ1dHRvbiIsNCksQSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIG5lKGUpLGllKHcoKS5mb2JSZW1vdmVkLmVtaXQoKSl9KSxrKDEsIm1hdC1pY29uIiw2KSxnKCl9fXZhciB3M2U9ZnVuY3Rpb24obix0KXtyZXR1cm57Zm9iOiEwLHVucmVtb3ZhYmxlOm4scHJvc3BlY3RpdmU6dH19LHNuZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5hbGxvd1JlbW92YWw9ITAsdGhpcy5pc1Byb3NwZWN0aXZlPSExLHRoaXMuc3RlcENoYW5nZWQ9bmV3IEYsdGhpcy5mb2JSZW1vdmVkPW5ldyBGfW5nT25DaGFuZ2VzKGUpe2Uuc3RlcCYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PXRoaXMuc3RlcFNwYW4ubmF0aXZlRWxlbWVudCYmdGhpcy5zdGVwU3Bhbi5uYXRpdmVFbGVtZW50LmJsdXIoKX12YWxpZGF0ZVN0ZXAoZSl7bGV0IGk9U3RyaW5nLmZyb21DaGFyQ29kZShlLndoaWNoKTsoIiAiPT09ZS5rZXl8fGlzTmFOKE51bWJlcihpKSkpJiZlLnByZXZlbnREZWZhdWx0KCl9c3RlcFR5cGVkKGUpe2UucHJldmVudERlZmF1bHQoKTtsZXQgaT1lLnRhcmdldC5pbm5lclRleHQ7dGhpcy5zdGVwQ2hhbmdlZC5lbWl0KCIiIT09aT9OdW1iZXIoaSk6bnVsbCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbImNhcmQtZm9iIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmVWUoeDNlLDcseGUpLDImZSl7bGV0IHI7YmUocj12ZSgpKSYmKGkuc3RlcFNwYW49ci5maXJzdCl9fSxpbnB1dHM6e3N0ZXA6InN0ZXAiLGFsbG93UmVtb3ZhbDoiYWxsb3dSZW1vdmFsIixpc1Byb3NwZWN0aXZlOiJpc1Byb3NwZWN0aXZlIn0sb3V0cHV0czp7c3RlcENoYW5nZWQ6InN0ZXBDaGFuZ2VkIixmb2JSZW1vdmVkOiJmb2JSZW1vdmVkIn0sZmVhdHVyZXM6W3F0XSxkZWNsczo1LHZhcnM6Nyxjb25zdHM6W1szLCJuZ0NsYXNzIl0sWyJjb250ZW50ZWRpdGFibGUiLCIiLCJyb2xlIiwidGV4dGJveCIsImFyaWEtbGFiZWwiLCJFZGl0IHN0ZXAiLDMsImlubmVySFRNTCIsImJsdXIiLCJrZXlwcmVzcyIsImtleWRvd24uZW50ZXIiLCJrZXlkb3duLnNoaWZ0LmVudGVyIl0sWyJzdGVwU3BhbiIsIiJdLFsiYXJpYS1sYWJlbCIsIkRlc2VsZWN0IGZvYiIsMywiY2xpY2siLDQsIm5nSWYiXSxbImFyaWEtbGFiZWwiLCJEZXNlbGVjdCBmb2IiLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiY2xvc2VfMjRweCJdLFsic3ZnSWNvbiIsImtlZXBfMjRweCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGYoMCwiZGl2IiwwKSgxLCJzcGFuIiwxLDIpLEEoImJsdXIiLGZ1bmN0aW9uKG8pe3JldHVybiBpLnN0ZXBUeXBlZChvKX0pKCJrZXlwcmVzcyIsZnVuY3Rpb24obyl7cmV0dXJuIGkudmFsaWRhdGVTdGVwKG8pfSkoImtleWRvd24uZW50ZXIiLGZ1bmN0aW9uKG8pe3JldHVybiBpLnN0ZXBUeXBlZChvKX0pKCJrZXlkb3duLnNoaWZ0LmVudGVyIixmdW5jdGlvbihvKXtyZXR1cm4gby5wcmV2ZW50RGVmYXVsdCgpfSksZygpLFMoMyxDM2UsMiwwLCJidXR0b24iLDMpLFMoNCxNM2UsMiwwLCJidXR0b24iLDMpLGcoKSksMiZlJiYoYigibmdDbGFzcyIsU28oNCx3M2UsIWkuYWxsb3dSZW1vdmFsLGkuaXNQcm9zcGVjdGl2ZSkpLHYoMSksYigiaW5uZXJIVE1MIixpLnN0ZXAsbWspLHYoMiksYigibmdJZiIsaS5hbGxvd1JlbW92YWwpLHYoMSksYigibmdJZiIsaS5pc1Byb3NwZWN0aXZlKSl9LGRlcGVuZGVuY2llczpbd24sTmUsYm5dLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2t9LmZvYltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtZmxleDtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTA7Ym9yZGVyLXJhZGl1czoyNXB4O3BhZGRpbmc6MnB4IDJweCAycHggNHB4O2ZvbnQtc2l6ZToxMXB4O3RleHQtYWxpZ246Y2VudGVyO3dpZHRoOm1pbi1jb250ZW50fS5mb2JbX25nY29udGVudC0lQ09NUCVdID4gLnByb3NwZWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLXRvcDoxcHh9LmZvYltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7Y3Vyc29yOmdyYWJ9LmZvYltfbmdjb250ZW50LSVDT01QJV06aG92ZXIucHJvc3BlY3RpdmV7Y3Vyc29yOnBvaW50ZXJ9LmZvYltfbmdjb250ZW50LSVDT01QJV06YWN0aXZle2N1cnNvcjpncmFiYmluZ30uZm9iLnVucmVtb3ZhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCA0cHh9LmZvYi5wcm9zcGVjdGl2ZVtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6MXB4IGRhc2hlZCAjOWU5ZTllO2ZvbnQtd2VpZ2h0OmJvbGQ7aGVpZ2h0OjE3cHh9c3Bhbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6aW5oZXJpdDtkaXNwbGF5OmlubGluZS1ibG9ja31ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgc3Bhbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MX1idXR0b25bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1sZWZ0OjJweDtwYWRkaW5nOjA7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo1MCU7Zm9udC1zaXplOjExcHg7d2lkdGg6MTFweDtoZWlnaHQ6MTFweDtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXQ7Y29sb3I6aW5oZXJpdH1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO2hlaWdodDoxMTAlfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MX1idXR0b25bX25nY29udGVudC0lQ09NUCVdOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzllOWU5ZTtjb2xvcjojZWVlO2N1cnNvcjpwb2ludGVyfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV06aG92ZXIsIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjE2MTYxO2NvbG9yOiNlMGUwZTB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxFM2U9WyJzdGFydEZvYldyYXBwZXIiXSxUM2U9WyJlbmRGb2JXcmFwcGVyIl0sRDNlPVsicHJvc3BlY3RpdmVGb2JXcmFwcGVyIl07ZnVuY3Rpb24gSTNlKG4sdCl7MSZuJiZrKDAsImRpdiIsNil9ZnVuY3Rpb24gQTNlKG4sdCl7aWYoMSZuJiYoZigwLCJkaXYiLDIsMyksUygyLEkzZSwxLDAsImRpdiIsNCksaygzLCJjYXJkLWZvYiIsNSksZygpKSwyJm4pe2xldCBlPXcoKTtCdCgidHJhbnNmb3JtIixlLmdldENzc1RyYW5zbGF0ZVB4Rm9yUHJvc3BlY3RpdmVGb2IoKSksdigyKSxiKCJuZ0lmIixlLnNob3dFeHRlbmRlZExpbmUpLHYoMSksYigibmdDbGFzcyIsZS5pc1ZlcnRpY2FsKCk/InZlcnRpY2FsLWZvYiI6Imhvcml6b250YWwtZm9iIikoImFsbG93UmVtb3ZhbCIsITEpKCJpc1Byb3NwZWN0aXZlIiwhMCkoInN0ZXAiLGUucHJvc3BlY3RpdmVTdGVwKX19ZnVuY3Rpb24gUjNlKG4sdCl7aWYoMSZuKXtsZXQgZT1UZSgpO2YoMCwiZGl2IiwxMCksQSgibW91c2Vkb3duIixmdW5jdGlvbihyKXtuZShlKTtsZXQgbz13KDIpO3JldHVybiBpZShvLnN0YXJ0RHJhZyhvLkZvYi5TVEFSVCxvLlRpbWVTZWxlY3Rpb25BZmZvcmRhbmNlLkVYVEVOREVEX0xJTkUscikpfSksZygpfX1mdW5jdGlvbiBQM2Uobix0KXtpZigxJm4pe2xldCBlPVRlKCk7ZigwLCJkaXYiLDIsNyksUygyLFIzZSwxLDAsImRpdiIsOCksZigzLCJjYXJkLWZvYiIsOSksQSgibW91c2Vkb3duIixmdW5jdGlvbihyKXtuZShlKTtsZXQgbz13KCk7cmV0dXJuIGllKG8uc3RhcnREcmFnKG8uRm9iLlNUQVJULG8uVGltZVNlbGVjdGlvbkFmZm9yZGFuY2UuRk9CLHIpKX0pKCJzdGVwQ2hhbmdlZCIsZnVuY3Rpb24ocil7bmUoZSk7bGV0IG89dygpO3JldHVybiBpZShvLnN0ZXBUeXBlZChvLkZvYi5TVEFSVCxyKSl9KSgiZm9iUmVtb3ZlZCIsZnVuY3Rpb24oKXtuZShlKTtsZXQgcj13KCk7cmV0dXJuIGllKHIub25Gb2JSZW1vdmVkKHIuRm9iLlNUQVJUKSl9KSxnKCkoKX1pZigyJm4pe2xldCBlPXcoKTtCdCgidHJhbnNmb3JtIixlLmdldENzc1RyYW5zbGF0ZVB4Rm9yU3RhcnRGb2IoKSksdigyKSxiKCJuZ0lmIixlLnNob3dFeHRlbmRlZExpbmUpLHYoMSksYigiYWxsb3dSZW1vdmFsIiwhIWUuYWxsb3dGb2JSZW1vdmFsfHxlLnRpbWVTZWxlY3Rpb24uZW5kKSgibmdDbGFzcyIsZS5pc1ZlcnRpY2FsKCk/InZlcnRpY2FsLWZvYiI6Imhvcml6b250YWwtZm9iIikoInN0ZXAiLGUudGltZVNlbGVjdGlvbi5zdGFydC5zdGVwKX19ZnVuY3Rpb24gazNlKG4sdCl7aWYoMSZuKXtsZXQgZT1UZSgpO2YoMCwiZGl2IiwxMCksQSgibW91c2Vkb3duIixmdW5jdGlvbihyKXtuZShlKTtsZXQgbz13KDIpO3JldHVybiBpZShvLnN0YXJ0RHJhZyhvLkZvYi5FTkQsby5UaW1lU2VsZWN0aW9uQWZmb3JkYW5jZS5FWFRFTkRFRF9MSU5FLHIpKX0pLGcoKX19ZnVuY3Rpb24gTzNlKG4sdCl7aWYoMSZuKXtsZXQgZT1UZSgpO2YoMCwiZGl2IiwyLDExKSxTKDIsazNlLDEsMCwiZGl2Iiw4KSxmKDMsImNhcmQtZm9iIiwxMiksQSgibW91c2Vkb3duIixmdW5jdGlvbihyKXtuZShlKTtsZXQgbz13KCk7cmV0dXJuIGllKG8uc3RhcnREcmFnKG8uRm9iLkVORCxvLlRpbWVTZWxlY3Rpb25BZmZvcmRhbmNlLkZPQixyKSl9KSgic3RlcENoYW5nZWQiLGZ1bmN0aW9uKHIpe25lKGUpO2xldCBvPXcoKTtyZXR1cm4gaWUoby5zdGVwVHlwZWQoby5Gb2IuRU5ELHIpKX0pKCJmb2JSZW1vdmVkIixmdW5jdGlvbigpe25lKGUpO2xldCByPXcoKTtyZXR1cm4gaWUoci5vbkZvYlJlbW92ZWQoci5Gb2IuRU5EKSl9KSxnKCkoKX1pZigyJm4pe2xldCBlPXcoKTtCdCgidHJhbnNmb3JtIixlLmdldENzc1RyYW5zbGF0ZVB4Rm9yRW5kRm9iKCkpLHYoMiksYigibmdJZiIsZS5zaG93RXh0ZW5kZWRMaW5lKSx2KDEpLGIoIm5nQ2xhc3MiLGUuaXNWZXJ0aWNhbCgpPyJ2ZXJ0aWNhbC1mb2IiOiJob3Jpem9udGFsLWZvYiIpKCJzdGVwIixlLnRpbWVTZWxlY3Rpb24uZW5kLnN0ZXApfX12YXIgUnI9KCgpPT4oZnVuY3Rpb24obil7bltuLk5PTkU9MF09Ik5PTkUiLG5bbi5TVEFSVD0xXT0iU1RBUlQiLG5bbi5FTkQ9Ml09IkVORCJ9KFJyfHwoUnI9e30pKSxScikpKCksRjNlPXtzdGFydDpSci5TVEFSVCxlbmQ6UnIuRU5EfSxmQT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMucm9vdD1lLHRoaXMuc2hvd0V4dGVuZGVkTGluZT0hMSx0aGlzLnByb3NwZWN0aXZlU3RlcD1udWxsLHRoaXMucHJvc3BlY3RpdmVTdGVwQXhpc1Bvc2l0aW9uPW51bGwsdGhpcy5hbGxvd0ZvYlJlbW92YWw9ITAsdGhpcy5vblRpbWVTZWxlY3Rpb25DaGFuZ2VkPW5ldyBGLHRoaXMub25UaW1lU2VsZWN0aW9uVG9nZ2xlZD1uZXcgRix0aGlzLm9uUHJvc3BlY3RpdmVTdGVwQ2hhbmdlZD1uZXcgRix0aGlzLmhhc0ZvYk1vdmVkPSExLHRoaXMuY3VycmVudERyYWdnaW5nRm9iPVJyLk5PTkUsdGhpcy5hZmZvcmRhbmNlPVFhLk5PTkUsdGhpcy5tb3VzZUxpc3RlbmVyPXRoaXMubW91c2VNb3ZlLmJpbmQodGhpcyksdGhpcy5zdG9wTGlzdGVuZXI9dGhpcy5zdG9wRHJhZy5iaW5kKHRoaXMpLHRoaXMuRm9iPVJyLHRoaXMuVGltZVNlbGVjdGlvbkFmZm9yZGFuY2U9UWF9Z2V0Q3NzVHJhbnNsYXRlUHhGb3JTdGFydEZvYigpe3JldHVybiB0aGlzLmF4aXNEaXJlY3Rpb249PT12YS5WRVJUSUNBTD9gdHJhbnNsYXRlKDBweCwgJHt0aGlzLnN0YXJ0U3RlcEF4aXNQb3NpdGlvbn1weClgOmB0cmFuc2xhdGUoJHt0aGlzLnN0YXJ0U3RlcEF4aXNQb3NpdGlvbn1weCwgMHB4KWB9Z2V0Q3NzVHJhbnNsYXRlUHhGb3JFbmRGb2IoKXtyZXR1cm4gbnVsbD09PXRoaXMuZW5kU3RlcEF4aXNQb3NpdGlvbj8iIjp0aGlzLmF4aXNEaXJlY3Rpb249PT12YS5WRVJUSUNBTD9gdHJhbnNsYXRlKDBweCwgJHt0aGlzLmVuZFN0ZXBBeGlzUG9zaXRpb259cHgpYDpgdHJhbnNsYXRlKCR7dGhpcy5lbmRTdGVwQXhpc1Bvc2l0aW9ufXB4LCAwcHgpYH1nZXRDc3NUcmFuc2xhdGVQeEZvclByb3NwZWN0aXZlRm9iKCl7cmV0dXJuIG51bGw9PT10aGlzLnByb3NwZWN0aXZlU3RlcD8iIjp0aGlzLmF4aXNEaXJlY3Rpb249PT12YS5WRVJUSUNBTD9gdHJhbnNsYXRlKDBweCwgJHt0aGlzLnByb3NwZWN0aXZlU3RlcEF4aXNQb3NpdGlvbn1weClgOmB0cmFuc2xhdGUoJHt0aGlzLnByb3NwZWN0aXZlU3RlcEF4aXNQb3NpdGlvbn1weCwgMHB4KWB9c3RvcEV2ZW50UHJvcGFnYXRpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKSxlLnByZXZlbnREZWZhdWx0KCl9c3RhcnREcmFnKGUsaSxyKXtpIT09UWEuRk9CJiZ0aGlzLnN0b3BFdmVudFByb3BhZ2F0aW9uKHIpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5tb3VzZUxpc3RlbmVyKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLnN0b3BMaXN0ZW5lciksdGhpcy5jdXJyZW50RHJhZ2dpbmdGb2I9ZSx0aGlzLmFmZm9yZGFuY2U9aX1zdG9wRHJhZygpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5tb3VzZUxpc3RlbmVyKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLnN0b3BMaXN0ZW5lciksdGhpcy5jdXJyZW50RHJhZ2dpbmdGb2I9UnIuTk9ORSx0aGlzLmhhc0ZvYk1vdmVkJiZ0aGlzLnRpbWVTZWxlY3Rpb24mJnRoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHt0aW1lU2VsZWN0aW9uOnRoaXMudGltZVNlbGVjdGlvbixhZmZvcmRhbmNlOnRoaXMuYWZmb3JkYW5jZX0pLHRoaXMuYWZmb3JkYW5jZT1RYS5OT05FLHRoaXMuaGFzRm9iTW92ZWQ9ITF9aXNWZXJ0aWNhbCgpe3JldHVybiB0aGlzLmF4aXNEaXJlY3Rpb249PT12YS5WRVJUSUNBTH1zaG91bGRTd2FwRm9icyhlKXtyZXR1cm4hKCF0aGlzLnRpbWVTZWxlY3Rpb258fCF0aGlzLnRpbWVTZWxlY3Rpb24uZW5kKSYmKHRoaXMuY3VycmVudERyYWdnaW5nRm9iPT09UnIuRU5EP2U8dGhpcy50aW1lU2VsZWN0aW9uLnN0YXJ0LnN0ZXA6dGhpcy5jdXJyZW50RHJhZ2dpbmdGb2I9PT1Sci5TVEFSVCYmZT50aGlzLnRpbWVTZWxlY3Rpb24uZW5kLnN0ZXApfWdldE5ld1RpbWVTZWxlY3Rpb24oZSxpKXtsZXQgcj17Li4uaX07aWYoIXRoaXMudGltZVNlbGVjdGlvbilyZXR1cm4gcjtpZighdGhpcy50aW1lU2VsZWN0aW9uLmVuZClyZXR1cm4gci5zdGFydD17c3RlcDplfSxyO2lmKHRoaXMuc2hvdWxkU3dhcEZvYnMoZSkpe2xldFtvLGFdPXRoaXMuY3VycmVudERyYWdnaW5nRm9iPT09UnIuRU5EP1siZW5kIiwic3RhcnQiXTpbInN0YXJ0IiwiZW5kIl07cmV0dXJuIHRoaXMuY3VycmVudERyYWdnaW5nRm9iPUYzZVthXSxyW29dPXRoaXMudGltZVNlbGVjdGlvblthXSxyW2FdPXtzdGVwOmV9LHJ9cmV0dXJuIHRoaXMuY3VycmVudERyYWdnaW5nRm9iPT09UnIuRU5EPyhyLmVuZD17c3RlcDplfSxyKTooci5zdGFydD17c3RlcDplfSxyKX1nZXROZXdTdGVwRnJvbU1vdXNlRXZlbnQoZSl7bGV0IGk9bnVsbCxyPXRoaXMuZ2V0TW91c2VQb3NpdGlvbkZyb21FdmVudChlKSxvPXRoaXMuYXhpc0RpcmVjdGlvbj09PXZhLlZFUlRJQ0FMP2UubW92ZW1lbnRZOmUubW92ZW1lbnRYO3JldHVybiB0aGlzLmlzTW92aW5nSGlnaGVyKHIsbyk/aT10aGlzLmNhcmRGb2JIZWxwZXIuZ2V0U3RlcEhpZ2hlclRoYW5BeGlzUG9zaXRpb24ocik6dGhpcy5pc01vdmluZ0xvd2VyKHIsbykmJihpPXRoaXMuY2FyZEZvYkhlbHBlci5nZXRTdGVwTG93ZXJUaGFuQXhpc1Bvc2l0aW9uKHIpKSxudWxsPT09aT9udWxsOml9bW91c2VNb3ZlKGUpe2lmKHRoaXMuY3VycmVudERyYWdnaW5nRm9iPT09UnIuTk9ORSlyZXR1cm47bGV0IGk9dGhpcy5nZXROZXdTdGVwRnJvbU1vdXNlRXZlbnQoZSk7aWYobnVsbD09PWl8fCF0aGlzLnRpbWVTZWxlY3Rpb24pcmV0dXJuO2xldCByPXRoaXMuZ2V0TmV3VGltZVNlbGVjdGlvbihpLHRoaXMudGltZVNlbGVjdGlvbik7dGhpcy5vblRpbWVTZWxlY3Rpb25DaGFuZ2VkLmVtaXQoe3RpbWVTZWxlY3Rpb246cn0pLHRoaXMuaGFzRm9iTW92ZWQ9ITB9bW91c2VPdmVyUHJvc3BlY3RpdmVGb2JBcmVhKGUpe2lmKG51bGwhPXRoaXMudGltZVNlbGVjdGlvbj8uZW5kKXJldHVybjtsZXQgaT10aGlzLmdldE5ld1N0ZXBGcm9tTW91c2VFdmVudChlKTtudWxsIT09aSYmdGhpcy5vblByb3NwZWN0aXZlU3RlcENoYW5nZWQuZW1pdChpKX1pc01vdmluZ0xvd2VyKGUsaSl7aWYodGhpcy5jdXJyZW50RHJhZ2dpbmdGb2I9PT1Sci5OT05FJiZudWxsPT09dGhpcy5wcm9zcGVjdGl2ZVN0ZXApcmV0dXJuITA7bGV0IHI9dGhpcy5nZXRDdXJyZW50Rm9iU3RlcCgpO3JldHVybiB2b2lkIDAhPT1yJiZlPHRoaXMuZ2V0RHJhZ2dpbmdGb2JDZW50ZXIoKSYmaTwwJiZyPnRoaXMubG93ZXN0U3RlcH1pc01vdmluZ0hpZ2hlcihlLGkpe2lmKHRoaXMuY3VycmVudERyYWdnaW5nRm9iPT09UnIuTk9ORSYmbnVsbD09PXRoaXMucHJvc3BlY3RpdmVTdGVwKXJldHVybiEwO2xldCByPXRoaXMuZ2V0Q3VycmVudEZvYlN0ZXAoKTtyZXR1cm4gdm9pZCAwIT09ciYmZT50aGlzLmdldERyYWdnaW5nRm9iQ2VudGVyKCkmJmk+MCYmcjx0aGlzLmhpZ2hlc3RTdGVwfWdldERyYWdnaW5nRm9iQ2VudGVyKCl7bGV0IGU9dGhpcy5nZXRDdXJyZW50Rm9iKCk/Lm5hdGl2ZUVsZW1lbnQ7aWYoIWUpcmV0dXJuIDA7bGV0IGk9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3Ascj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7cmV0dXJuIHRoaXMuYXhpc0RpcmVjdGlvbj09PXZhLlZFUlRJQ0FMP2ktdGhpcy5yb290Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wOnItdGhpcy5yb290Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdH1nZXRDdXJyZW50Rm9iKCl7c3dpdGNoKHRoaXMuY3VycmVudERyYWdnaW5nRm9iKXtjYXNlIFJyLlNUQVJUOnJldHVybiB0aGlzLnN0YXJ0Rm9iV3JhcHBlcjtjYXNlIFJyLkVORDpyZXR1cm4gdGhpcy5lbmRGb2JXcmFwcGVyO2Nhc2UgUnIuTk9ORTpyZXR1cm4gdGhpcy5wcm9zcGVjdGl2ZUZvYldyYXBwZXJ9fWdldEN1cnJlbnRGb2JTdGVwKCl7c3dpdGNoKHRoaXMuY3VycmVudERyYWdnaW5nRm9iKXtjYXNlIFJyLlNUQVJUOnJldHVybiB0aGlzLnRpbWVTZWxlY3Rpb24/LnN0YXJ0LnN0ZXA7Y2FzZSBSci5FTkQ6cmV0dXJuIHRoaXMudGltZVNlbGVjdGlvbj8uZW5kPy5zdGVwO2Nhc2UgUnIuTk9ORTpyZXR1cm4gdGhpcy5wcm9zcGVjdGl2ZVN0ZXA/P3ZvaWQgMH19Z2V0TW91c2VQb3NpdGlvbkZyb21FdmVudChlKXtyZXR1cm4gdGhpcy5heGlzRGlyZWN0aW9uPT09dmEuVkVSVElDQUw/ZS5jbGllbnRZLXRoaXMucm9vdC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDplLmNsaWVudFgtdGhpcy5yb290Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdH1zdGVwVHlwZWQoZSxpKXtpZihudWxsPT09aSlyZXR1cm4gdm9pZChudWxsIT09dGhpcy50aW1lU2VsZWN0aW9uLmVuZCYmdGhpcy5vbkZvYlJlbW92ZWQoZSkpO2xldCByPXsuLi50aGlzLnRpbWVTZWxlY3Rpb259O2U9PT1Sci5TVEFSVD9yLnN0YXJ0PXtzdGVwOml9OmU9PT1Sci5FTkQmJihyLmVuZD17c3RlcDppfSksbnVsbCE9PXIuZW5kJiZyLnN0YXJ0LnN0ZXA+ci5lbmQuc3RlcCYmKHI9e3N0YXJ0OnIuZW5kLGVuZDpyLnN0YXJ0fSksdGhpcy5vblRpbWVTZWxlY3Rpb25DaGFuZ2VkLmVtaXQoe3RpbWVTZWxlY3Rpb246cixhZmZvcmRhbmNlOlFhLkZPQl9URVhUfSl9cHJvc3BlY3RpdmVGb2JDbGlja2VkKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCk7bGV0IGk9dGhpcy5nZXRQcm9zcGVjdGl2ZVRpbWVTZWxlY3Rpb24oKTshaXx8KHRoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHthZmZvcmRhbmNlOlFhLkZPQl9BRERFRCx0aW1lU2VsZWN0aW9uOml9KSx0aGlzLm9uUHJvc3BlY3RpdmVTdGVwQ2hhbmdlZC5lbWl0KG51bGwpKX1nZXRQcm9zcGVjdGl2ZVRpbWVTZWxlY3Rpb24oKXtpZih0aGlzLnByb3NwZWN0aXZlU3RlcClyZXR1cm4gdGhpcy50aW1lU2VsZWN0aW9uP3tzdGFydDp7c3RlcDpNYXRoLm1pbih0aGlzLnRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcCx0aGlzLnByb3NwZWN0aXZlU3RlcCl9LGVuZDp7c3RlcDpNYXRoLm1heCh0aGlzLnRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcCx0aGlzLnByb3NwZWN0aXZlU3RlcCl9fTp7c3RhcnQ6e3N0ZXA6dGhpcy5wcm9zcGVjdGl2ZVN0ZXB9LGVuZDpudWxsfX1vbkZvYlJlbW92ZWQoZSl7ZSE9PVJyLkVORD9udWxsPT09dGhpcy50aW1lU2VsZWN0aW9uLmVuZD90aGlzLm9uVGltZVNlbGVjdGlvblRvZ2dsZWQuZW1pdCgpOnRoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHthZmZvcmRhbmNlOlFhLkZPQl9SRU1PVkVELHRpbWVTZWxlY3Rpb246e3N0YXJ0OnRoaXMudGltZVNlbGVjdGlvbi5lbmQsZW5kOm51bGx9fSk6dGhpcy5vblRpbWVTZWxlY3Rpb25DaGFuZ2VkLmVtaXQoe2FmZm9yZGFuY2U6UWEuRk9CX1JFTU9WRUQsdGltZVNlbGVjdGlvbjp7Li4udGhpcy50aW1lU2VsZWN0aW9uLGVuZDpudWxsfX0pfW9uUHJvc3BlY3RpdmVBcmVhTW91c2VMZWF2ZSgpe3RoaXMub25Qcm9zcGVjdGl2ZVN0ZXBDaGFuZ2VkLmVtaXQobnVsbCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoeGUpKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJjYXJkLWZvYi1jb250cm9sbGVyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKFVlKEUzZSw1KSxVZShUM2UsNSksVWUoRDNlLDUpKSwyJmUpe2xldCByO2JlKHI9dmUoKSkmJihpLnN0YXJ0Rm9iV3JhcHBlcj1yLmZpcnN0KSxiZShyPXZlKCkpJiYoaS5lbmRGb2JXcmFwcGVyPXIuZmlyc3QpLGJlKHI9dmUoKSkmJihpLnByb3NwZWN0aXZlRm9iV3JhcHBlcj1yLmZpcnN0KX19LGlucHV0czp7YXhpc0RpcmVjdGlvbjoiYXhpc0RpcmVjdGlvbiIsdGltZVNlbGVjdGlvbjoidGltZVNlbGVjdGlvbiIsY2FyZEZvYkhlbHBlcjoiY2FyZEZvYkhlbHBlciIsc3RhcnRTdGVwQXhpc1Bvc2l0aW9uOiJzdGFydFN0ZXBBeGlzUG9zaXRpb24iLGVuZFN0ZXBBeGlzUG9zaXRpb246ImVuZFN0ZXBBeGlzUG9zaXRpb24iLGhpZ2hlc3RTdGVwOiJoaWdoZXN0U3RlcCIsbG93ZXN0U3RlcDoibG93ZXN0U3RlcCIsc2hvd0V4dGVuZGVkTGluZToic2hvd0V4dGVuZGVkTGluZSIscHJvc3BlY3RpdmVTdGVwOiJwcm9zcGVjdGl2ZVN0ZXAiLHByb3NwZWN0aXZlU3RlcEF4aXNQb3NpdGlvbjoicHJvc3BlY3RpdmVTdGVwQXhpc1Bvc2l0aW9uIixhbGxvd0ZvYlJlbW92YWw6ImFsbG93Rm9iUmVtb3ZhbCJ9LG91dHB1dHM6e29uVGltZVNlbGVjdGlvbkNoYW5nZWQ6Im9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLG9uVGltZVNlbGVjdGlvblRvZ2dsZWQ6Im9uVGltZVNlbGVjdGlvblRvZ2dsZWQiLG9uUHJvc3BlY3RpdmVTdGVwQ2hhbmdlZDoib25Qcm9zcGVjdGl2ZVN0ZXBDaGFuZ2VkIn0sZGVjbHM6Nix2YXJzOjQsY29uc3RzOltbImNsYXNzIiwidGltZS1mb2Itd3JhcHBlciIsMywidHJhbnNmb3JtIiw0LCJuZ0lmIl0sWzEsInByb3NwZWN0aXZlLWZvYi1hcmVhIiwzLCJuZ0NsYXNzIiwibW91c2Vtb3ZlIiwiY2xpY2siLCJtb3VzZWxlYXZlIl0sWzEsInRpbWUtZm9iLXdyYXBwZXIiXSxbInByb3NwZWN0aXZlRm9iV3JhcHBlciIsIiJdLFsiY2xhc3MiLCJleHRlbmRlZC1saW5lIiw0LCJuZ0lmIl0sWzMsIm5nQ2xhc3MiLCJhbGxvd1JlbW92YWwiLCJpc1Byb3NwZWN0aXZlIiwic3RlcCJdLFsxLCJleHRlbmRlZC1saW5lIl0sWyJzdGFydEZvYldyYXBwZXIiLCIiXSxbImNsYXNzIiwiZXh0ZW5kZWQtbGluZSIsMywibW91c2Vkb3duIiw0LCJuZ0lmIl0sWzEsInN0YXJ0Rm9iIiwzLCJhbGxvd1JlbW92YWwiLCJuZ0NsYXNzIiwic3RlcCIsIm1vdXNlZG93biIsInN0ZXBDaGFuZ2VkIiwiZm9iUmVtb3ZlZCJdLFsxLCJleHRlbmRlZC1saW5lIiwzLCJtb3VzZWRvd24iXSxbImVuZEZvYldyYXBwZXIiLCIiXSxbMSwiZW5kRm9iIiwzLCJuZ0NsYXNzIiwic3RlcCIsIm1vdXNlZG93biIsInN0ZXBDaGFuZ2VkIiwiZm9iUmVtb3ZlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGYoMCwiZGl2IiksR3QoMSksUygyLEEzZSw0LDcsImRpdiIsMCksZigzLCJkaXYiLDEpLEEoIm1vdXNlbW92ZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkubW91c2VPdmVyUHJvc3BlY3RpdmVGb2JBcmVhKG8pfSkoImNsaWNrIixmdW5jdGlvbihvKXtyZXR1cm4gaS5wcm9zcGVjdGl2ZUZvYkNsaWNrZWQobyl9KSgibW91c2VsZWF2ZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblByb3NwZWN0aXZlQXJlYU1vdXNlTGVhdmUoKX0pLGcoKSxXdCgpLFMoNCxQM2UsNCw2LCJkaXYiLDApLFMoNSxPM2UsNCw1LCJkaXYiLDApLGcoKSksMiZlJiYodigyKSxiKCJuZ0lmIixudWxsIT09aS5wcm9zcGVjdGl2ZVN0ZXApLHYoMSksYigibmdDbGFzcyIsaS5pc1ZlcnRpY2FsKCk/InZlcnRpY2FsLXByb3NwZWN0aXZlLWFyZWEiOiJob3Jpem9udGFsLXByb3NwZWN0aXZlLWFyZWEiKSx2KDEpLGIoIm5nSWYiLGkudGltZVNlbGVjdGlvbiksdigxKSxiKCJuZ0lmIixpLnRpbWVTZWxlY3Rpb24mJmkudGltZVNlbGVjdGlvbi5lbmQpKX0sZGVwZW5kZW5jaWVzOlt3bixOZSxzbmVdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17cG9pbnRlci1ldmVudHM6YWxsfS50aW1lLWZvYi13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDowfS52ZXJ0aWNhbC1mb2JbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpfS5ob3Jpem9udGFsLWZvYltfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSl9LmV4dGVuZGVkLWxpbmVbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1zdHlsZTpkYXNoZWQ7Ym9yZGVyLXdpZHRoOjAgMXB4O2hlaWdodDpjYWxjKDEwMCUgLSAzMHB4KX0uZXh0ZW5kZWQtbGluZVtfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHRyYW5zcGFyZW50IDE4cHgsICNjY2MgMTlweCwgI2NjYyAyMXB4LCB0cmFuc3BhcmVudCAyMnB4KTtib3JkZXI6MDtjdXJzb3I6ZXctcmVzaXplO21hcmdpbi1sZWZ0Oi0yMHB4O3BhZGRpbmc6MCAyMHB4fS5ob3Jpem9udGFsLXByb3NwZWN0aXZlLWFyZWFbX25nY29udGVudC0lQ09NUCVde2JvdHRvbTowO2N1cnNvcjpwb2ludGVyO3Bvc2l0aW9uOmFic29sdXRlO2hlaWdodDozMHB4O3dpZHRoOmNhbGMoMTAwJSAtIDc0cHgpfS5wcm9zcGVjdGl2ZS1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksQ1Y9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuZGlzYWJsZUludGVyYWN0aW9uPSExLHRoaXMuYWxsb3dGb2JSZW1vdmFsPSEwLHRoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZD1uZXcgRix0aGlzLm9uVGltZVNlbGVjdGlvblRvZ2dsZWQ9bmV3IEYsdGhpcy5heGlzRGlyZWN0aW9uPXZhLkhPUklaT05UQUwsdGhpcy5jYXJkRm9iSGVscGVyPXtnZXRTdGVwSGlnaGVyVGhhbkF4aXNQb3NpdGlvbjp0aGlzLmdldFN0ZXBIaWdoZXJUaGFuQXhpc1Bvc2l0aW9uLmJpbmQodGhpcyksZ2V0U3RlcExvd2VyVGhhbkF4aXNQb3NpdGlvbjp0aGlzLmdldFN0ZXBMb3dlclRoYW5BeGlzUG9zaXRpb24uYmluZCh0aGlzKX0sdGhpcy5wcm9zcGVjdGl2ZVN0ZXA9bnVsbH1nZXRBeGlzUG9zaXRpb25Gcm9tU3RhcnRTdGVwKCl7cmV0dXJuIHRoaXMudGltZVNlbGVjdGlvbj90aGlzLnNjYWxlLmZvcndhcmQodGhpcy5taW5NYXhIb3Jpem9udGFsVmlld0V4dGVuZCxbMCx0aGlzLmF4aXNTaXplXSx0aGlzLnRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcCk6IiJ9Z2V0QXhpc1Bvc2l0aW9uRnJvbUVuZFN0ZXAoKXtyZXR1cm4gdGhpcy50aW1lU2VsZWN0aW9uPy5lbmQ/dGhpcy5zY2FsZS5mb3J3YXJkKHRoaXMubWluTWF4SG9yaXpvbnRhbFZpZXdFeHRlbmQsWzAsdGhpcy5heGlzU2l6ZV0sdGhpcy50aW1lU2VsZWN0aW9uPy5lbmQuc3RlcD8/dGhpcy5taW5NYXhTdGVwLm1heFN0ZXApOm51bGx9Z2V0QXhpc1Bvc2l0aW9uRnJvbVByb3NwZWN0aXZlU3RlcCgpe3JldHVybiBudWxsPT09dGhpcy5wcm9zcGVjdGl2ZVN0ZXA/bnVsbDp0aGlzLnNjYWxlLmZvcndhcmQodGhpcy5taW5NYXhIb3Jpem9udGFsVmlld0V4dGVuZCxbMCx0aGlzLmF4aXNTaXplXSx0aGlzLnByb3NwZWN0aXZlU3RlcCl9b25Qcm9zcGVjdGl2ZVN0ZXBDaGFuZ2VkKGUpe3RoaXMucHJvc3BlY3RpdmVTdGVwPWV9Z2V0SGlnaGVzdFN0ZXAoKXtyZXR1cm4gdGhpcy5taW5NYXhTdGVwLm1heFN0ZXB9Z2V0TG93ZXN0U3RlcCgpe3JldHVybiB0aGlzLm1pbk1heFN0ZXAubWluU3RlcH1nZXRTdGVwSGlnaGVyVGhhbkF4aXNQb3NpdGlvbihlKXtyZXR1cm4gdGhpcy5nZXRTdGVwQXRNb3VzZVBvc3Rpb24oZSl9Z2V0U3RlcExvd2VyVGhhbkF4aXNQb3NpdGlvbihlKXtyZXR1cm4gdGhpcy5nZXRTdGVwQXRNb3VzZVBvc3Rpb24oZSl9Z2V0U3RlcEF0TW91c2VQb3N0aW9uKGUpe2xldCBpPU1hdGgucm91bmQodGhpcy5zY2FsZS5yZXZlcnNlKHRoaXMubWluTWF4SG9yaXpvbnRhbFZpZXdFeHRlbmQsWzAsdGhpcy5heGlzU2l6ZV0sZSkpO3JldHVybiBpPnRoaXMuZ2V0SGlnaGVzdFN0ZXAoKT90aGlzLmdldEhpZ2hlc3RTdGVwKCk6aTx0aGlzLmdldExvd2VzdFN0ZXAoKT90aGlzLmdldExvd2VzdFN0ZXAoKTppfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJzY2FsYXItY2FyZC1mb2ItY29udHJvbGxlciJdXSxpbnB1dHM6e3RpbWVTZWxlY3Rpb246InRpbWVTZWxlY3Rpb24iLHNjYWxlOiJzY2FsZSIsbWluTWF4SG9yaXpvbnRhbFZpZXdFeHRlbmQ6Im1pbk1heEhvcml6b250YWxWaWV3RXh0ZW5kIixtaW5NYXhTdGVwOiJtaW5NYXhTdGVwIixheGlzU2l6ZToiYXhpc1NpemUiLGRpc2FibGVJbnRlcmFjdGlvbjoiZGlzYWJsZUludGVyYWN0aW9uIixhbGxvd0ZvYlJlbW92YWw6ImFsbG93Rm9iUmVtb3ZhbCJ9LG91dHB1dHM6e29uVGltZVNlbGVjdGlvbkNoYW5nZWQ6Im9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLG9uVGltZVNlbGVjdGlvblRvZ2dsZWQ6Im9uVGltZVNlbGVjdGlvblRvZ2dsZWQifSxkZWNsczoxLHZhcnM6MTMsY29uc3RzOltbMywiYXhpc0RpcmVjdGlvbiIsInRpbWVTZWxlY3Rpb24iLCJzdGFydFN0ZXBBeGlzUG9zaXRpb24iLCJlbmRTdGVwQXhpc1Bvc2l0aW9uIiwicHJvc3BlY3RpdmVTdGVwQXhpc1Bvc2l0aW9uIiwiaGlnaGVzdFN0ZXAiLCJsb3dlc3RTdGVwIiwicHJvc3BlY3RpdmVTdGVwIiwiY2FyZEZvYkhlbHBlciIsInNob3dFeHRlbmRlZExpbmUiLCJhbGxvd0ZvYlJlbW92YWwiLCJvblByb3NwZWN0aXZlU3RlcENoYW5nZWQiLCJvblRpbWVTZWxlY3Rpb25DaGFuZ2VkIiwib25UaW1lU2VsZWN0aW9uVG9nZ2xlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGYoMCwiY2FyZC1mb2ItY29udHJvbGxlciIsMCksQSgib25Qcm9zcGVjdGl2ZVN0ZXBDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblByb3NwZWN0aXZlU3RlcENoYW5nZWQobyl9KSgib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25UaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KG8pfSkoIm9uVGltZVNlbGVjdGlvblRvZ2dsZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVGltZVNlbGVjdGlvblRvZ2dsZWQuZW1pdChvKX0pLGcoKSksMiZlJiYoQnQoInBvaW50ZXItZXZlbnRzIixpLmRpc2FibGVJbnRlcmFjdGlvbj8ibm9uZSI6ImFsbCIpLGIoImF4aXNEaXJlY3Rpb24iLGkuYXhpc0RpcmVjdGlvbikoInRpbWVTZWxlY3Rpb24iLGkudGltZVNlbGVjdGlvbikoInN0YXJ0U3RlcEF4aXNQb3NpdGlvbiIsaS5nZXRBeGlzUG9zaXRpb25Gcm9tU3RhcnRTdGVwKCkpKCJlbmRTdGVwQXhpc1Bvc2l0aW9uIixpLmdldEF4aXNQb3NpdGlvbkZyb21FbmRTdGVwKCkpKCJwcm9zcGVjdGl2ZVN0ZXBBeGlzUG9zaXRpb24iLGkuZ2V0QXhpc1Bvc2l0aW9uRnJvbVByb3NwZWN0aXZlU3RlcCgpKSgiaGlnaGVzdFN0ZXAiLGkuZ2V0SGlnaGVzdFN0ZXAoKSkoImxvd2VzdFN0ZXAiLGkuZ2V0TG93ZXN0U3RlcCgpKSgicHJvc3BlY3RpdmVTdGVwIixpLnByb3NwZWN0aXZlU3RlcCkoImNhcmRGb2JIZWxwZXIiLGkuY2FyZEZvYkhlbHBlcikoInNob3dFeHRlbmRlZExpbmUiLCEwKSgiYWxsb3dGb2JSZW1vdmFsIixpLmFsbG93Rm9iUmVtb3ZhbCkpfSxkZXBlbmRlbmNpZXM6W2ZBXSxzdHlsZXM6WyJzY2FsYXItY2FyZC1mb2ItY29udHJvbGxlciAudGltZS1mb2Itd3JhcHBlcntoZWlnaHQ6MTAwJX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLE4zZT1bImRhdGFUYWJsZUNvbnRhaW5lciJdO2Z1bmN0aW9uIEwzZShuLHQpe2lmKDEmbil7bGV0IGU9VGUoKTtmKDAsImJ1dHRvbiIsMjcpLEEoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBuZShlKSxpZSh3KCkub3BlblRhYmxlRWRpdE1lbnUoKSl9KSxrKDEsIm1hdC1pY29uIiwyOCksZigyLCJzcGFuIiksVCgzLCJFZGl0IFRhYmxlIENvbHVtbnMiKSxnKCkoKX19ZnVuY3Rpb24gQjNlKG4sdCl7MSZuJiZrKDAsIm1hdC1zcGlubmVyIiwyOSl9ZnVuY3Rpb24gVjNlKG4sdCl7MSZuJiYoZigwLCJ0aCIpLFQoMSwiU21vb3RoZWQiKSxnKCkpfWZ1bmN0aW9uIEgzZShuLHQpe2lmKDEmbiYmKEd0KDApLGsoMSwidGItZXhwZXJpbWVudC1hbGlhcyIsMzUpLFQoMiwiLyIpLFd0KCkpLDImbil7bGV0IGU9dygpLiRpbXBsaWNpdDt2KDEpLGIoImFsaWFzIixlLm1ldGFkYXRhLmFsaWFzKX19ZnVuY3Rpb24gejNlKG4sdCl7aWYoMSZuJiYoZigwLCJ0ZCIpLFQoMSksZygpKSwyJm4pe2xldCBlPXcoKS4kaW1wbGljaXQsaT13KDIpO3YoMSksVmUoIiAiLGkudmFsdWVGb3JtYXR0ZXIuZm9ybWF0U2hvcnQoZS5kYXRhUG9pbnQueSksIiAiKX19ZnVuY3Rpb24gVTNlKG4sdCl7aWYoMSZuJiYoR3QoMCksZigxLCJ0ciIsMzMpKDIsInRkIiwzNCksaygzLCJzcGFuIiksZygpLGYoNCwidGQiLDIpLFMoNSxIM2UsMywxLCJuZy1jb250YWluZXIiLDI0KSxUKDYpLGcoKSxTKDcsejNlLDIsMSwidGQiLDI0KSxmKDgsInRkIiksVCg5KSxnKCksZigxMCwidGQiKSxUKDExKSxnKCksZigxMiwidGQiKSxUKDEzKSxVKDE0LCJkYXRlIiksZygpLGYoMTUsInRkIiksVCgxNiksZygpKCksV3QoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXcoMik7digxKSxudCgiY2xvc2VzdCIsZS5tZXRhZGF0YS5jbG9zZXN0KSx2KDIpLEJ0KCJiYWNrZ3JvdW5kLWNvbG9yIixlLm1ldGFkYXRhLmNvbG9yKSx2KDIpLGIoIm5nSWYiLGUubWV0YWRhdGEuYWxpYXMpLHYoMSksVmUoIiIsZS5tZXRhZGF0YS5kaXNwbGF5TmFtZSwiICIpLHYoMSksYigibmdJZiIsaS5zbW9vdGhpbmdFbmFibGVkKSx2KDIpLGt0KGkudmFsdWVGb3JtYXR0ZXIuZm9ybWF0U2hvcnQoZS5kYXRhUG9pbnQudmFsdWUpKSx2KDIpLGt0KGkuc3RlcEZvcm1hdHRlci5mb3JtYXRTaG9ydChlLmRhdGFQb2ludC5zdGVwKSksdigyKSxrdChKcCgxNCwxMSxlLmRhdGFQb2ludC53YWxsVGltZSwic2hvcnQiKSksdigzKSxWZSgiICIsaS5yZWxhdGl2ZVhGb3JtYXR0ZXIuZm9ybWF0UmVhZGFibGUoZS5kYXRhUG9pbnQucmVsYXRpdmVUaW1lSW5NcyksIiAiKX19ZnVuY3Rpb24gajNlKG4sdCl7aWYoMSZuJiYoZigwLCJ0YWJsZSIsMzApKDEsInRoZWFkIikoMiwidHIiKSxrKDMsInRoIiwzMSksZig0LCJ0aCIpLFQoNSwiUnVuIiksZygpLFMoNixWM2UsMiwwLCJ0aCIsMjQpLGYoNywidGgiKSxUKDgsIlZhbHVlIiksZygpLGYoOSwidGgiKSxUKDEwLCJTdGVwIiksZygpLGYoMTEsInRoIiksVCgxMiwiVGltZSIpLGcoKSxmKDEzLCJ0aCIpLFQoMTQsIlJlbGF0aXZlIiksZygpKCkoKSxmKDE1LCJ0Ym9keSIpLFMoMTYsVTNlLDE3LDE0LCJuZy1jb250YWluZXIiLDMyKSxnKCkoKSksMiZuKXtsZXQgZT10LmRhdGEsaT10LmN1cnNvckxvY2F0aW9uSW5EYXRhQ29vcmQscj10LmN1cnNvckxvY2F0aW9uLG89dygpO3YoNiksYigibmdJZiIsby5zbW9vdGhpbmdFbmFibGVkKSx2KDEwKSxiKCJuZ0Zvck9mIixvLmdldEN1cnNvckF3YXJlVG9vbHRpcERhdGEoZSxpLHIpKSgibmdGb3JUcmFja0J5IixvLnRyYWNrQnlUb29sdGlwRGF0dW0pfX1mdW5jdGlvbiBHM2Uobix0KXtpZigxJm4pe2xldCBlPVRlKCk7ZigwLCJidXR0b24iLDQxKSxBKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gbmUoZSksaWUodygyKS50b2dnbGVUYWJsZUV4cGFuZGVkKCkpfSksaygxLCJtYXQtaWNvbiIsOSksZygpfWlmKDImbil7bGV0IGU9dygyKTtiKCJ0aXRsZSIsZS5zaG91bGRFeHBhbmRUYWJsZSgpPyJFeHBhbmQgVGFibGUiOiJDb2xsYXBzZSBUYWJsZSIpLHYoMSksYigic3ZnSWNvbiIsZS5zaG91bGRFeHBhbmRUYWJsZSgpPyJleHBhbmRfbW9yZV8yNHB4IjoiZXhwYW5kX2xlc3NfMjRweCIpfX12YXIgVzNlPWZ1bmN0aW9uKG4pe3JldHVybnsiZGF0YS10YWJsZS1jb250YWluZXIiOiEwLGV4cGFuZGVkOm59fTtmdW5jdGlvbiBxM2Uobix0KXtpZigxJm4pe2xldCBlPVRlKCk7R3QoMCksZigxLCJkaXYiLDM2LDM3KSgzLCJzY2FsYXItY2FyZC1kYXRhLXRhYmxlIiwzOCksQSgic29ydERhdGFCeSIsZnVuY3Rpb24ocil7cmV0dXJuIG5lKGUpLGllKHcoKS5zb3J0RGF0YUJ5KHIpKX0pKCJlZGl0Q29sdW1uSGVhZGVycyIsZnVuY3Rpb24ocil7cmV0dXJuIG5lKGUpLGllKHcoKS5lZGl0Q29sdW1uSGVhZGVycy5lbWl0KHIpKX0pKCJhZGRDb2x1bW4iLGZ1bmN0aW9uKHIpe3JldHVybiBuZShlKSxpZSh3KCkuYWRkQ29sdW1uLmVtaXQocikpfSkoInJlbW92ZUNvbHVtbiIsZnVuY3Rpb24ocil7cmV0dXJuIG5lKGUpLGllKHcoKS5yZW1vdmVDb2x1bW4uZW1pdChyKSl9KSgiaGlkZUNvbHVtbiIsZnVuY3Rpb24ocil7cmV0dXJuIG5lKGUpLGllKHcoKS5oaWRlQ29sdW1uLmVtaXQocikpfSkoImFkZEZpbHRlciIsZnVuY3Rpb24ocil7cmV0dXJuIG5lKGUpLGllKHcoKS5hZGRGaWx0ZXIuZW1pdChyKSl9KSgibG9hZEFsbENvbHVtbnMiLGZ1bmN0aW9uKCl7cmV0dXJuIG5lKGUpLGllKHcoKS5sb2FkQWxsQ29sdW1ucy5lbWl0KCkpfSksZygpKCksZig0LCJkaXYiLDM5KSxTKDUsRzNlLDIsMiwiYnV0dG9uIiw0MCksZygpLFd0KCl9aWYoMiZuKXtsZXQgZT13KCk7digxKSxiKCJuZ0NsYXNzIixVbigxNSxXM2UsZS5jYXJkU3RhdGUudGFibGVFeHBhbmRlZCkpLHYoMiksYigiY2hhcnRNZXRhZGF0YU1hcCIsZS5jaGFydE1ldGFkYXRhTWFwKSgiZGF0YVNlcmllcyIsZS5kYXRhU2VyaWVzKSgic3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbiIsZS5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uKSgiY29sdW1uSGVhZGVycyIsZS5jb2x1bW5IZWFkZXJzKSgic29ydGluZ0luZm8iLGUuc29ydGluZ0luZm8pKCJjb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCIsZS5jb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCkoImNvbHVtbkNvbnRleHRNZW51c0VuYWJsZWQiLGUuY29sdW1uQ29udGV4dE1lbnVzRW5hYmxlZCkoInNtb290aGluZ0VuYWJsZWQiLGUuc21vb3RoaW5nRW5hYmxlZCkoImNvbHVtbkZpbHRlcnMiLGUuY29sdW1uRmlsdGVycykoInJ1blRvSHBhcmFtTWFwIixlLnJ1blRvSHBhcmFtTWFwKSgic2VsZWN0YWJsZUNvbHVtbnMiLGUuc2VsZWN0YWJsZUNvbHVtbnMpKCJudW1Db2x1bW5zTG9hZGVkIixlLm51bUNvbHVtbnNMb2FkZWQpKCJudW1Db2x1bW5zVG9Mb2FkIixlLm51bUNvbHVtbnNUb0xvYWQpLHYoMiksYigibmdJZiIsZS5jYW5FeHBhbmRUYWJsZSgpKX19dmFyIFgzZT1mdW5jdGlvbihuKXtyZXR1cm5bMCxuXX0sWTNlPWZ1bmN0aW9uKCl7cmV0dXJueyJvdXQtb2Ytc2VsZWN0ZWQtdGltZSI6ITAsZW5kOiEwLHJhbmdlOiEwfX07ZnVuY3Rpb24gUTNlKG4sdCl7aWYoMSZuJiZrKDAsImRpdiIsMzYpLDImbil7bGV0IGU9dygyKSxpPWUudmlld0V4dGVudCxyPWUuZG9tRGltZW5zaW9uLG89ZS54U2NhbGUsYT13KCk7QnQoImxlZnQiLG8uZm9yd2FyZChpLngsVW4oMyxYM2Usci53aWR0aCksbnVsbD09YS5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uLmVuZD9udWxsOmEuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbi5lbmQuc3RlcCkrInB4IiksYigibmdDbGFzcyIsbWMoNSxZM2UpKX19dmFyIFozZT1mdW5jdGlvbihuKXtyZXR1cm5bbiwwXX0sSzNlPWZ1bmN0aW9uKG4pe3JldHVybnsib3V0LW9mLXNlbGVjdGVkLXRpbWUiOiEwLHN0YXJ0OiEwLHJhbmdlOm59fTtmdW5jdGlvbiBKM2Uobix0KXtpZigxJm4mJihHdCgwKSxrKDEsImRpdiIsMzYpLFMoMixRM2UsMSw2LCJkaXYiLDQyKSxXdCgpKSwyJm4pe2xldCBlPXcoKSxpPWUudmlld0V4dGVudCxyPWUuZG9tRGltZW5zaW9uLG89ZS54U2NhbGUsYT13KCk7digxKSxCdCgicmlnaHQiLG8uZm9yd2FyZChpLngsVW4oNCxaM2Usci53aWR0aCksYS5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uLnN0YXJ0LnN0ZXApKyJweCIpLGIoIm5nQ2xhc3MiLFVuKDYsSzNlLCEobnVsbD09YS5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uLmVuZHx8IWEuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbi5lbmQuc3RlcCkpKSx2KDEpLGIoIm5nSWYiLG51bGw9PWEuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbi5lbmQ/bnVsbDphLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24uZW5kLnN0ZXApfX1mdW5jdGlvbiAkM2Uobix0KXsxJm4mJlMoMCxKM2UsMyw4LCJuZy1jb250YWluZXIiLDI0KSwyJm4mJmIoIm5nSWYiLHcoKS5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uKX1mdW5jdGlvbiBlQmUobix0KXtpZigxJm4pe2xldCBlPVRlKCk7R3QoMCksZigxLCJzY2FsYXItY2FyZC1mb2ItY29udHJvbGxlciIsNDMpLEEoIm9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLGZ1bmN0aW9uKHIpe3JldHVybiBuZShlKSxpZSh3KDIpLm9uVGltZVNlbGVjdGlvbkNoYW5nZWQuZW1pdChyKSl9KSgib25UaW1lU2VsZWN0aW9uVG9nZ2xlZCIsZnVuY3Rpb24oKXtyZXR1cm4gbmUoZSksaWUodygyKS5vbkZvYlJlbW92ZWQoKSl9KSxnKCksV3QoKX1pZigyJm4pe2xldCBlPXcoKSxpPWUuaW50ZXJhY3Rpb25TdGF0ZSxyPWUueFNjYWxlLG89ZS52aWV3RXh0ZW50LGE9ZS5kb21EaW1lbnNpb24scz13KCk7digxKSxiKCJkaXNhYmxlSW50ZXJhY3Rpb24iLCJOT05FIiE9PWkpKCJ0aW1lU2VsZWN0aW9uIixzLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24pKCJzY2FsZSIscikoIm1pbk1heEhvcml6b250YWxWaWV3RXh0ZW5kIixvLngpKCJtaW5NYXhTdGVwIixzLm1pbk1heFN0ZXApKCJheGlzU2l6ZSIsYS53aWR0aCl9fWZ1bmN0aW9uIHRCZShuLHQpezEmbiYmUygwLGVCZSwyLDYsIm5nLWNvbnRhaW5lciIsMjQpLDImbiYmYigibmdJZiIsdygpLnNob3dGb2JDb250cm9sbGVyKCkpfXZhciBkbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMucmVmPWUsdGhpcy5kaWFsb2c9aSx0aGlzLkRhdGFMb2FkU3RhdGU9UmUsdGhpcy5SZW5kZXJlclR5cGU9WWksdGhpcy5TY2FsZVR5cGU9dHIsdGhpcy5vbkZ1bGxTaXplVG9nZ2xlPW5ldyBGLHRoaXMub25QaW5DbGlja2VkPW5ldyBGLHRoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZD1uZXcgRix0aGlzLm9uU3RlcFNlbGVjdG9yVG9nZ2xlZD1uZXcgRix0aGlzLm9uRGF0YVRhYmxlU29ydGluZz1uZXcgRix0aGlzLmVkaXRDb2x1bW5IZWFkZXJzPW5ldyBGLHRoaXMub3BlblRhYmxlRWRpdE1lbnVUb01vZGU9bmV3IEYsdGhpcy5hZGRDb2x1bW49bmV3IEYsdGhpcy5yZW1vdmVDb2x1bW49bmV3IEYsdGhpcy5hZGRGaWx0ZXI9bmV3IEYsdGhpcy5sb2FkQWxsQ29sdW1ucz1uZXcgRix0aGlzLm9uTGluZUNoYXJ0Wm9vbT1uZXcgRix0aGlzLm9uQ2FyZFN0YXRlQ2hhbmdlZD1uZXcgRix0aGlzLnNvcnRpbmdJbmZvPXtuYW1lOiJydW4iLG9yZGVyOkxyLkFTQ0VORElOR30sdGhpcy55U2NhbGVUeXBlPXRyLkxJTkVBUix0aGlzLmlzVmlld0JveE92ZXJyaWRkZW49ITEsdGhpcy5yZWxhdGl2ZVhGb3JtYXR0ZXI9eDAsdGhpcy52YWx1ZUZvcm1hdHRlcj1kcCx0aGlzLnN0ZXBGb3JtYXR0ZXI9eTB9dG9nZ2xlWVNjYWxlVHlwZSgpe3RoaXMueVNjYWxlVHlwZT10aGlzLnlTY2FsZVR5cGU9PT10ci5MSU5FQVI/dHIuTE9HMTA6dHIuTElORUFSfXNvcnREYXRhQnkoZSl7dGhpcy5zb3J0aW5nSW5mbz1lLHRoaXMub25EYXRhVGFibGVTb3J0aW5nLmVtaXQoZSl9cmVzZXREb21haW4oKXt0aGlzLmxpbmVDaGFydCYmdGhpcy5saW5lQ2hhcnQudmlld0JveFJlc2V0KCl9dHJhY2tCeVRvb2x0aXBEYXR1bShlLGkpe3JldHVybiBpLmlkfWdldEN1c3RvbVhGb3JtYXR0ZXIoKXtzd2l0Y2godGhpcy54QXhpc1R5cGUpe2Nhc2UgUGkuUkVMQVRJVkU6cmV0dXJuIHgwO2Nhc2UgUGkuU1RFUDpyZXR1cm4gbzM7ZGVmYXVsdDpyZXR1cm59fWdldEN1cnNvckF3YXJlVG9vbHRpcERhdGEoZSxpLHIpe2xldCBvPWUubWFwKGw9Pih7Li4ubCxtZXRhZGF0YTp7Li4ubC5tZXRhZGF0YSxjbG9zZXN0OiExLGRpc3RUb0N1cnNvclBpeGVsczpNYXRoLmh5cG90KGwuZG9tUG9pbnQueC1yLngsbC5kb21Qb2ludC55LXIueSksZGlzdFRvQ3Vyc29yWDpsLmRhdGFQb2ludC54LWkueCxkaXN0VG9DdXJzb3JZOmwuZGF0YVBvaW50LnktaS55fX0pKSxhPTEvMCxzPTA7Zm9yKGxldCBsPTA7bDxvLmxlbmd0aDtsKyspYT5vW2xdLm1ldGFkYXRhLmRpc3RUb0N1cnNvclBpeGVscyYmKGE9b1tsXS5tZXRhZGF0YS5kaXN0VG9DdXJzb3JQaXhlbHMscz1sKTtzd2l0Y2goby5sZW5ndGgmJihvW3NdLm1ldGFkYXRhLmNsb3Nlc3Q9ITApLHRoaXMudG9vbHRpcFNvcnQpe2Nhc2Ugb28uQVNDRU5ESU5HOnJldHVybiBvLnNvcnQoKGwsYyk9PmwuZGF0YVBvaW50LnktYy5kYXRhUG9pbnQueSk7Y2FzZSBvby5ERVNDRU5ESU5HOnJldHVybiBvLnNvcnQoKGwsYyk9PmMuZGF0YVBvaW50LnktbC5kYXRhUG9pbnQueSk7Y2FzZSBvby5ORUFSRVNUOnJldHVybiBvLnNvcnQoKGwsYyk9PmwubWV0YWRhdGEuZGlzdFRvQ3Vyc29yUGl4ZWxzLWMubWV0YWRhdGEuZGlzdFRvQ3Vyc29yUGl4ZWxzKTtjYXNlIG9vLk5FQVJFU1RfWTpyZXR1cm4gby5zb3J0KChsLGMpPT5sLm1ldGFkYXRhLmRpc3RUb0N1cnNvclktYy5tZXRhZGF0YS5kaXN0VG9DdXJzb3JZKTtjYXNlIG9vLkRFRkFVTFQ6Y2FzZSBvby5BTFBIQUJFVElDQUw6cmV0dXJuIG8uc29ydCgobCxjKT0+bC5tZXRhZGF0YS5kaXNwbGF5TmFtZTxjLm1ldGFkYXRhLmRpc3BsYXlOYW1lPy0xOmwubWV0YWRhdGEuZGlzcGxheU5hbWU+Yy5tZXRhZGF0YS5kaXNwbGF5TmFtZT8xOjApfX1vcGVuRGF0YURvd25sb2FkRGlhbG9nKCl7dGhpcy5kaWFsb2cub3Blbih0aGlzLkRhdGFEb3dubG9hZENvbXBvbmVudCx7ZGF0YTp7Y2FyZElkOnRoaXMuY2FyZElkfX0pfW9uRm9iUmVtb3ZlZCgpe3RoaXMub25TdGVwU2VsZWN0b3JUb2dnbGVkLmVtaXQoWmEuRk9CX0RFU0VMRUNUKX1zaG93RGF0YVRhYmxlKCl7cmV0dXJuIHRoaXMueEF4aXNUeXBlPT09UGkuU1RFUCYmdGhpcy5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9ufXNob3dGb2JDb250cm9sbGVyKCl7cmV0dXJuIHRoaXMueEF4aXNUeXBlPT09UGkuU1RFUCYmdGhpcy5taW5NYXhTdGVwfWNhbkV4cGFuZFRhYmxlKCl7cmV0dXJuIHRoaXMuZGF0YVNlcmllcy5maWx0ZXIoaT0+R1MoaSx0aGlzLmNoYXJ0TWV0YWRhdGFNYXApKS5sZW5ndGg+M31zaG91bGRFeHBhbmRUYWJsZSgpe3JldHVybiBCb29sZWFuKHRoaXMuZGF0YVRhYmxlQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodHx8IXRoaXMuY2FyZFN0YXRlPy50YWJsZUV4cGFuZGVkKX10b2dnbGVUYWJsZUV4cGFuZGVkKCl7dGhpcy5vbkNhcmRTdGF0ZUNoYW5nZWQuZW1pdCh7Li4udGhpcy5jYXJkU3RhdGUsdGFibGVFeHBhbmRlZDp0aGlzLnNob3VsZEV4cGFuZFRhYmxlKCl9KSx0aGlzLmRhdGFUYWJsZUNvbnRhaW5lciYmKHRoaXMuZGF0YVRhYmxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0PSIiKX1vcGVuVGFibGVFZGl0TWVudSgpe3RoaXMub3BlblRhYmxlRWRpdE1lbnVUb01vZGUuZW1pdCh0aGlzLnJhbmdlRW5hYmxlZD9Xci5SQU5HRTpXci5TSU5HTEUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKHhlKSxDKHlzKSl9LG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1sic2NhbGFyLWNhcmQtY29tcG9uZW50Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKFVlKGhfLDUpLFVlKE4zZSw1KSksMiZlKXtsZXQgcjtiZShyPXZlKCkpJiYoaS5saW5lQ2hhcnQ9ci5maXJzdCksYmUocj12ZSgpKSYmKGkuZGF0YVRhYmxlQ29udGFpbmVyPXIuZmlyc3QpfX0saW5wdXRzOntjYXJkSWQ6ImNhcmRJZCIsY2hhcnRNZXRhZGF0YU1hcDoiY2hhcnRNZXRhZGF0YU1hcCIsY2FyZFN0YXRlOiJjYXJkU3RhdGUiLERhdGFEb3dubG9hZENvbXBvbmVudDoiRGF0YURvd25sb2FkQ29tcG9uZW50IixkYXRhU2VyaWVzOiJkYXRhU2VyaWVzIixpZ25vcmVPdXRsaWVyczoiaWdub3JlT3V0bGllcnMiLGlzQ2FyZFZpc2libGU6ImlzQ2FyZFZpc2libGUiLGlzUGlubmVkOiJpc1Bpbm5lZCIsbG9hZFN0YXRlOiJsb2FkU3RhdGUiLHNob3dGdWxsV2lkdGg6InNob3dGdWxsV2lkdGgiLHNtb290aGluZ0VuYWJsZWQ6InNtb290aGluZ0VuYWJsZWQiLHRhZzoidGFnIix0aXRsZToidGl0bGUiLHRvb2x0aXBTb3J0OiJ0b29sdGlwU29ydCIseEF4aXNUeXBlOiJ4QXhpc1R5cGUiLHhTY2FsZVR5cGU6InhTY2FsZVR5cGUiLHVzZURhcmtNb2RlOiJ1c2VEYXJrTW9kZSIsZm9yY2VTdmc6ImZvcmNlU3ZnIixjb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZDoiY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQiLGNvbHVtbkNvbnRleHRNZW51c0VuYWJsZWQ6ImNvbHVtbkNvbnRleHRNZW51c0VuYWJsZWQiLGxpbmtlZFRpbWVTZWxlY3Rpb246ImxpbmtlZFRpbWVTZWxlY3Rpb24iLHN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb246InN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24iLG1pbk1heFN0ZXA6Im1pbk1heFN0ZXAiLHVzZXJWaWV3Qm94OiJ1c2VyVmlld0JveCIsY29sdW1uSGVhZGVyczoiY29sdW1uSGVhZGVycyIscmFuZ2VFbmFibGVkOiJyYW5nZUVuYWJsZWQiLGNvbHVtbkZpbHRlcnM6ImNvbHVtbkZpbHRlcnMiLHNlbGVjdGFibGVDb2x1bW5zOiJzZWxlY3RhYmxlQ29sdW1ucyIsbnVtQ29sdW1uc0xvYWRlZDoibnVtQ29sdW1uc0xvYWRlZCIsbnVtQ29sdW1uc1RvTG9hZDoibnVtQ29sdW1uc1RvTG9hZCIscnVuVG9IcGFyYW1NYXA6InJ1blRvSHBhcmFtTWFwIn0sb3V0cHV0czp7b25GdWxsU2l6ZVRvZ2dsZToib25GdWxsU2l6ZVRvZ2dsZSIsb25QaW5DbGlja2VkOiJvblBpbkNsaWNrZWQiLG9uVGltZVNlbGVjdGlvbkNoYW5nZWQ6Im9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLG9uU3RlcFNlbGVjdG9yVG9nZ2xlZDoib25TdGVwU2VsZWN0b3JUb2dnbGVkIixvbkRhdGFUYWJsZVNvcnRpbmc6Im9uRGF0YVRhYmxlU29ydGluZyIsZWRpdENvbHVtbkhlYWRlcnM6ImVkaXRDb2x1bW5IZWFkZXJzIixvcGVuVGFibGVFZGl0TWVudVRvTW9kZToib3BlblRhYmxlRWRpdE1lbnVUb01vZGUiLGFkZENvbHVtbjoiYWRkQ29sdW1uIixyZW1vdmVDb2x1bW46InJlbW92ZUNvbHVtbiIsYWRkRmlsdGVyOiJhZGRGaWx0ZXIiLGxvYWRBbGxDb2x1bW5zOiJsb2FkQWxsQ29sdW1ucyIsb25MaW5lQ2hhcnRab29tOiJvbkxpbmVDaGFydFpvb20iLG9uQ2FyZFN0YXRlQ2hhbmdlZDoib25DYXJkU3RhdGVDaGFuZ2VkIn0sZGVjbHM6MzgsdmFyczoyOSxjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdCxlLGkscixvLGE7cmV0dXJuIHQ9JGxvY2FsaXplYDpBIGJ1dHRvbiB0aGF0IHJlc2V0cyBsaW5lIGNoYXJ0IGRvbWFpbiB0byB0aGUgZGF0YeKQn2U2OGE1NTI5NDFhYjQyN2E5OWU3NDM3ZTA4NDQzZjMwYWM3MWNjZDbikJ8zODMwNjQ2NTIxMDU4MjY4NTU4OkZpdCBsaW5lIGNoYXJ0IGRvbWFpbnMgdG8gZGF0YWAsZT0kbG9jYWxpemVgOkEgYnV0dG9uIHRvIHBpbiBhIGNhcmQu4pCfZTY2NWRjNzEyYmQ1ZjE4ZDRkZmEzYTI5ZTEyNWQ1NjVjYzUxZTJmNuKQnzcyODQ2MDY0MjYyMzQzNzUzNDQ6UGluIGNhcmRgLGk9JGxvY2FsaXplYDpBIGJ1dHRvbiBvbiBsaW5lIGNoYXJ0IHRoYXQgdG9nZ2xlcyBmdWxsIHNpemUgbW9kZS7ikJ9mYzhmNzY3ZDBiOWY5MzAxODdhMWJhZTM0NDc3YWQyODczNmVjZTMz4pCfOTE1NzIxNTYzNjM4OTI2NTk3OlRvZ2dsZSBmdWxsIHNpemUgbW9kZWAscj0kbG9jYWxpemVgOkFuIG92ZXJmbG93IG1lbnUgYnV0dG9uIHRoYXQgb3BlbnMgbW9yZSBsaW5lIGNoYXJ0IG9wdGlvbnPikJ9iMjYwZmFiOTQ2YTMwNzdjZTIwZmQyOGUzMzY5NzlmNTg2NzIwZThk4pCfODc4MDUzNzQwMjEwMzM2NDM1Ok1vcmUgbGluZSBjaGFydCBvcHRpb25zYCxvPSRsb2NhbGl6ZWA6QSBidXR0b24gdGhhdCB0b2dnbGVzIGxvZyBzY2FsZSBvbiB5LWF4aXMgb24gYSBsaW5lIGNoYXJ04pCfZmU5MWY5NmFiOWIzYmFjYTVhNDg5MTNmMmIwZmFlODQ0ODNkOTNlM+KQnzMzNzQ2NDU2MjA2Mzg4ODM5MjY6VG9nZ2xlIFktYXhpcyBsb2cgc2NhbGUgb24gbGluZSBjaGFydGAsYT0kbG9jYWxpemVgOkV4cGFuZCBUYWJsZeKQnzllNTlmZjUwYmZjYjQ3OTI3MmUyYjEwM2UxZTliMTE1MThlMmU0Y2XikJ82Mzc0ODgwMzQxMzkzMDIwNjEwOkV4cGFuZCBUYWJsZWAsW1sxLCJhbHdheXMtdmlzaWJsZSJdLFsxLCJoZWFkaW5nIl0sWzEsIm5hbWUiXSxbMSwidGFnIiwzLCJ0aXRsZSIsInZhbHVlIl0sWzMsImlzQ2xpcHBlZCJdLFsxLCJjb250cm9scyJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsdCwzLCJkaXNhYmxlZCIsInRpdGxlIiwiY2xpY2siXSxbInN2Z0ljb24iLCJzZXR0aW5nc19vdmVyc2Nhbl8yNHB4Il0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixlLDMsImNsaWNrIl0sWzMsInN2Z0ljb24iXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLGksInRpdGxlIiwiVG9nZ2xlIGZ1bGwgc2l6ZSBtb2RlIiwzLCJjbGljayJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsciwidGl0bGUiLCJNb3JlIGxpbmUgY2hhcnQgb3B0aW9ucyIsMywibWF0TWVudVRyaWdnZXJGb3IiXSxbInN2Z0ljb24iLCJtb3JlX3ZlcnRfMjRweCJdLFsibWVudSIsIm1hdE1lbnUiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJhcmlhLWxhYmVsIixvLDMsImNsaWNrIl0sWyJzdmdJY29uIiwibGluZV93ZWlnaHRfMjRweCJdLFsibWF0LW1lbnUtaXRlbSIsIiIsImFyaWEtbGFiZWwiLCJPcGVuIGRpYWxvZyB0byBkb3dubG9hZCBkYXRhIiwzLCJjbGljayJdLFsic3ZnSWNvbiIsImdldF9hcHBfMjRweCJdLFsibWF0LW1lbnUtaXRlbSIsIiIsImFyaWEtbGFiZWwiLCJPcGVuIG1lbnUgdG8gZWRpdCBkYXRhIHRhYmxlIGNvbHVtbnMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImNoYXJ0LWNvbnRhaW5lciJdLFsiY2hhcnRDb250YWluZXIiLCIiXSxbImRpYW1ldGVyIiwiMTgiLDQsIm5nSWYiXSxbMywiZGlzYWJsZVVwZGF0ZSIsInByZWZlcnJlZFJlbmRlcmVyVHlwZSIsInNlcmllc0RhdGEiLCJzZXJpZXNNZXRhZGF0YU1hcCIsInhTY2FsZVR5cGUiLCJ5U2NhbGVUeXBlIiwiY3VzdG9tWEZvcm1hdHRlciIsImlnbm9yZVlPdXRsaWVycyIsInRvb2x0aXBUZW1wbGF0ZSIsInVzZURhcmtNb2RlIiwidXNlclZpZXdCb3giLCJjdXN0b21WaXNUZW1wbGF0ZSIsImN1c3RvbUNoYXJ0T3ZlcmxheVRlbXBsYXRlIiwib25WaWV3Qm94T3ZlcnJpZGRlbiIsInZpZXdCb3hDaGFuZ2VkIl0sWyJ0b29sdGlwIiwiIl0sWzQsIm5nSWYiXSxbImxpbmVDaGFydEN1c3RvbVZpcyIsIiJdLFsibGluZUNoYXJ0Q3VzdG9tWEF4aXNWaXMiLCIiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJhcmlhLWxhYmVsIiwiT3BlbiBtZW51IHRvIGVkaXQgZGF0YSB0YWJsZSBjb2x1bW5zIiwzLCJjbGljayJdLFsic3ZnSWNvbiIsImVkaXRfMjRweCJdLFsiZGlhbWV0ZXIiLCIxOCJdLFsxLCJ0b29sdGlwIl0sWzEsImNpcmNsZS1oZWFkZXIiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWzEsInRvb2x0aXAtcm93Il0sWzEsInRvb2x0aXAtcm93LWNpcmNsZSJdLFszLCJhbGlhcyJdLFszLCJuZ0NsYXNzIl0sWyJkYXRhVGFibGVDb250YWluZXIiLCIiXSxbMywiY2hhcnRNZXRhZGF0YU1hcCIsImRhdGFTZXJpZXMiLCJzdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uIiwiY29sdW1uSGVhZGVycyIsInNvcnRpbmdJbmZvIiwiY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQiLCJjb2x1bW5Db250ZXh0TWVudXNFbmFibGVkIiwic21vb3RoaW5nRW5hYmxlZCIsImNvbHVtbkZpbHRlcnMiLCJydW5Ub0hwYXJhbU1hcCIsInNlbGVjdGFibGVDb2x1bW5zIiwibnVtQ29sdW1uc0xvYWRlZCIsIm51bUNvbHVtbnNUb0xvYWQiLCJzb3J0RGF0YUJ5IiwiZWRpdENvbHVtbkhlYWRlcnMiLCJhZGRDb2x1bW4iLCJyZW1vdmVDb2x1bW4iLCJoaWRlQ29sdW1uIiwiYWRkRmlsdGVyIiwibG9hZEFsbENvbHVtbnMiXSxbMSwiYm90dG9tLWFyZWEiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImNsYXNzIiwiZXhwYW5kLWJ1dHRvbiIsImFyaWEtbGFiZWwiLGEsMywidGl0bGUiLCJjbGljayIsNCwibmdJZiJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsYSwxLCJleHBhbmQtYnV0dG9uIiwzLCJ0aXRsZSIsImNsaWNrIl0sWzMsIm5nQ2xhc3MiLCJsZWZ0Iiw0LCJuZ0lmIl0sWzMsImRpc2FibGVJbnRlcmFjdGlvbiIsInRpbWVTZWxlY3Rpb24iLCJzY2FsZSIsIm1pbk1heEhvcml6b250YWxWaWV3RXh0ZW5kIiwibWluTWF4U3RlcCIsImF4aXNTaXplIiwib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsIm9uVGltZVNlbGVjdGlvblRvZ2dsZWQiXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoZigwLCJkaXYiLDApKDEsImRpdiIsMSkoMiwic3BhbiIsMiksaygzLCJ0Yi10cnVuY2F0ZWQtcGF0aCIsMykoNCwidmlzLWxpbmtlZC10aW1lLXNlbGVjdGlvbi13YXJuaW5nIiw0KSxnKCksZig1LCJzcGFuIiw1KSg2LCJidXR0b24iLDYpLEEoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLnJlc2V0RG9tYWluKCl9KSxVKDcsImFzeW5jIiksVSg4LCJhc3luYyIpLGsoOSwibWF0LWljb24iLDcpLGcoKSxmKDEwLCJidXR0b24iLDgpLEEoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uUGluQ2xpY2tlZC5lbWl0KCFpLmlzUGlubmVkKX0pLGsoMTEsIm1hdC1pY29uIiw5KSxnKCksZigxMiwiYnV0dG9uIiwxMCksQSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25GdWxsU2l6ZVRvZ2dsZS5lbWl0KCl9KSxrKDEzLCJtYXQtaWNvbiIsOSksZygpLGYoMTQsImJ1dHRvbiIsMTEpLGsoMTUsIm1hdC1pY29uIiwxMiksZygpLGYoMTYsIm1hdC1tZW51IixudWxsLDEzKSgxOCwiYnV0dG9uIiwxNCksQSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkudG9nZ2xlWVNjYWxlVHlwZSgpfSksaygxOSwibWF0LWljb24iLDE1KSxmKDIwLCJzcGFuIiksVCgyMSwiVG9nZ2xlIFktYXhpcyBsb2cgc2NhbGUiKSxnKCkoKSxmKDIyLCJidXR0b24iLDE2KSxBKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vcGVuRGF0YURvd25sb2FkRGlhbG9nKCl9KSxrKDIzLCJtYXQtaWNvbiIsMTcpLGYoMjQsInNwYW4iKSxUKDI1LCJEb3dubG9hZCBkYXRhIiksZygpKCksUygyNixMM2UsNCwwLCJidXR0b24iLDE4KSxnKCkoKSgpLGYoMjcsImRpdiIsMTksMjApLFMoMjksQjNlLDEsMCwibWF0LXNwaW5uZXIiLDIxKSxmKDMwLCJsaW5lLWNoYXJ0IiwyMiksQSgib25WaWV3Qm94T3ZlcnJpZGRlbiIsZnVuY3Rpb24obyl7cmV0dXJuIGkuaXNWaWV3Qm94T3ZlcnJpZGRlbj1vfSkoInZpZXdCb3hDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkxpbmVDaGFydFpvb20uZW1pdChvKX0pLGcoKSxTKDMxLGozZSwxNywzLCJuZy10ZW1wbGF0ZSIsbnVsbCwyMyxqdCksZygpKCksUygzMyxxM2UsNiwxNywibmctY29udGFpbmVyIiwyNCksUygzNCwkM2UsMSwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwyNSxqdCksUygzNix0QmUsMSwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwyNixqdCkpLDImZSl7bGV0IHI9c3QoMTcpLG89c3QoMzIpLGE9c3QoMzUpLHM9c3QoMzcpO3YoMyksWmkoInRpdGxlIixpLnRhZyksWmkoInZhbHVlIixpLnRpdGxlKSx2KDEpLGIoImlzQ2xpcHBlZCIsaS5saW5rZWRUaW1lU2VsZWN0aW9uJiZpLmxpbmtlZFRpbWVTZWxlY3Rpb24uY2xpcHBlZCksdigyKSxiKCJkaXNhYmxlZCIsIWkubGluZUNoYXJ0fHwhRyg3LDI1LGkubGluZUNoYXJ0LmdldElzVmlld0JveE92ZXJyaWRkZW4oKSkpKCJ0aXRsZSIsaS5saW5lQ2hhcnQmJkcoOCwyNyxpLmxpbmVDaGFydC5nZXRJc1ZpZXdCb3hPdmVycmlkZGVuKCkpPyJMaW5lIGNoYXJ0IGlzIGFscmVhZHkgZml0dGVkIHRvIGRhdGEuIFdoZW4gZGF0YSB1cGRhdGVzLCB0aGUgbGluZSBjaGFydCB3aWxsIGF1dG8gZml0IHRvIGl0cyBkb21haW4uIjoiRml0IGxpbmUgY2hhcnQgZG9tYWlucyB0byBkYXRhIiksdig0KSxCZSgidGl0bGUiLGkuaXNQaW5uZWQ/IlVucGluIGNhcmQiOiJQaW4gY2FyZCIpLHYoMSksYigic3ZnSWNvbiIsaS5pc1Bpbm5lZD8ia2VlcF8yNHB4Ijoia2VlcF9vdXRsaW5lXzI0cHgiKSx2KDIpLGIoInN2Z0ljb24iLGkuc2hvd0Z1bGxXaWR0aD8iZnVsbHNjcmVlbl9leGl0XzI0cHgiOiJmdWxsc2NyZWVuXzI0cHgiKSx2KDEpLGIoIm1hdE1lbnVUcmlnZ2VyRm9yIixyKSx2KDEyKSxiKCJuZ0lmIixpLmNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkKSx2KDMpLGIoIm5nSWYiLGkubG9hZFN0YXRlPT09aS5EYXRhTG9hZFN0YXRlLkxPQURJTkcpLHYoMSksYigiZGlzYWJsZVVwZGF0ZSIsIWkuaXNDYXJkVmlzaWJsZSkoInByZWZlcnJlZFJlbmRlcmVyVHlwZSIsaS5mb3JjZVN2Zz9pLlJlbmRlcmVyVHlwZS5TVkc6aS5SZW5kZXJlclR5cGUuV0VCR0wpKCJzZXJpZXNEYXRhIixpLmRhdGFTZXJpZXMpKCJzZXJpZXNNZXRhZGF0YU1hcCIsaS5jaGFydE1ldGFkYXRhTWFwKSgieFNjYWxlVHlwZSIsaS54U2NhbGVUeXBlKSgieVNjYWxlVHlwZSIsaS55U2NhbGVUeXBlKSgiY3VzdG9tWEZvcm1hdHRlciIsaS5nZXRDdXN0b21YRm9ybWF0dGVyKCkpKCJpZ25vcmVZT3V0bGllcnMiLGkuaWdub3JlT3V0bGllcnMpKCJ0b29sdGlwVGVtcGxhdGUiLG8pKCJ1c2VEYXJrTW9kZSIsaS51c2VEYXJrTW9kZSkoInVzZXJWaWV3Qm94IixpLnVzZXJWaWV3Qm94KSgiY3VzdG9tVmlzVGVtcGxhdGUiLGEpKCJjdXN0b21DaGFydE92ZXJsYXlUZW1wbGF0ZSIscyksdigzKSxiKCJuZ0lmIixpLnNob3dEYXRhVGFibGUoKSl9fSxkZXBlbmRlbmNpZXM6W3duLG5uLE5lLEtnLGhfLEVyLGJuLFh1LEVkLFl1LE5jLGFuZSxDVixKZywkZyxjdCx3Zl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2JveC1zaXppbmc6Ym9yZGVyLWJveDtoZWlnaHQ6MTAwJTtwYWRkaW5nOjE2cHg7cGFkZGluZy10b3A6NHB4fVtfbmdob3N0LSVDT01QJV06aGFzKC5leHBhbmQtYnV0dG9uKXtwYWRkaW5nOjRweCAxNnB4IDB9LmFsd2F5cy12aXNpYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtYmFzaXM6Mjk4cHh9LmFsd2F5cy12aXNpYmxlW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmhhcyguZXhwYW5kLWJ1dHRvbikpe2ZsZXgtZ3JvdzoxfS5oZWFkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtc2l6ZToxNHB4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO21hcmdpbi1ib3R0b206NHB4O3Bvc2l0aW9uOnJlbGF0aXZlfS5oZWFkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpncmlkO2dhcDo1cHg7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG8gYXV0b30uaGVhZGluZ1tfbmdjb250ZW50LSVDT01QJV0gICB2aXMtc2VsZWN0ZWQtdGltZS1jbGlwcGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MS4yZW07bGluZS1oZWlnaHQ6MH0udGFnW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW59LmNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO3doaXRlLXNwYWNlOm5vd3JhcDtmbGV4LXNocmluazowO21hcmdpbi1yaWdodDotMTJweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuY29udHJvbHNbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuY29udHJvbHNbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5jaGFydC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1ncm93OjE7b3ZlcmZsb3c6aGlkZGVuO3Jlc2l6ZTp2ZXJ0aWNhbH0uY2hhcnQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1hdC1zcGlubmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoxMXB4O3RvcDoxMXB4fS5jaGFydC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgbGluZS1jaGFydFtfbmdjb250ZW50LSVDT01QJV17ZmxleC1ncm93OjF9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1zcGFjaW5nOjRweDtmb250LXNpemU6MTNweH0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpsZWZ0fS50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlwLXJvd1tfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwfS50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlwLXJvdy1jaXJjbGVbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmlubGluZS1mbGV4O2hlaWdodDoxMnB4O3dpZHRoOjEycHh9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtcm93LWNpcmNsZVtfbmdjb250ZW50LSVDT01QJV0gPiBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItcmFkaXVzOjUwJTtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjQpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMHB4O3dpZHRoOjEwcHh9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLmNsb3Nlc3RbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtcm93LWNpcmNsZVtfbmdjb250ZW50LSVDT01QJV0gPiBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6I2ZmZjtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCAjZmZmfS5vdXQtb2Ytc2VsZWN0ZWQtdGltZVtfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCU7cG9zaXRpb246YWJzb2x1dGV9Lm91dC1vZi1zZWxlY3RlZC10aW1lLnN0YXJ0W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItcmlnaHQtd2lkdGg6MnB4O21hcmdpbi1sZWZ0Oi0xcHh9Lm91dC1vZi1zZWxlY3RlZC10aW1lLnN0YXJ0LnJhbmdlW19uZ2NvbnRlbnQtJUNPTVAlXXtsZWZ0OjB9Lm91dC1vZi1zZWxlY3RlZC10aW1lLmVuZFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQtd2lkdGg6MnB4O21hcmdpbi1yaWdodDotMXB4O3JpZ2h0OjB9Lm91dC1vZi1zZWxlY3RlZC10aW1lLnJhbmdlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5vdXQtb2Ytc2VsZWN0ZWQtdGltZS5yYW5nZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vdXQtb2Ytc2VsZWN0ZWQtdGltZS5yYW5nZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC40KX0uZGF0YS10YWJsZS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDBweDttaW4taGVpZ2h0OjEwMHB4O21heC1oZWlnaHQ6NTBlbTtvdmVyZmxvdzphdXRvO3Jlc2l6ZTp2ZXJ0aWNhbH0uZGF0YS10YWJsZS1jb250YWluZXIuZXhwYW5kZWRbX25nY29udGVudC0lQ09NUCVde2hlaWdodDphdXRvfS5ib3R0b20tYXJlYVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXJ9LmJvdHRvbS1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBhbmQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ib3R0b20tYXJlYVtfbmdjb250ZW50LSVDT01QJV0gICAuZXhwYW5kLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ib3R0b20tYXJlYVtfbmdjb250ZW50LSVDT01QJV0gICAuZXhwYW5kLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyk7YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gaUJlKG4sdCl7cmV0dXJuIG4ubGVuZ3RoPT09dC5sZW5ndGgmJm4uZXZlcnkoKGUsaSk9PntsZXQgcj10W2ldLG89ZS5wb2ludHMsYT1yLnBvaW50cztyZXR1cm4gZS5ydW5JZD09PXIucnVuSWQmJm8ubGVuZ3RoPT09YS5sZW5ndGgmJm8uZXZlcnkoKHMsbCk9PntsZXQgYz1hW2xdO3JldHVybiBzLng9PT1jLngmJnMueT09PWMueX0pfSl9dmFyIHVuZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLkRhdGFEb3dubG9hZENvbXBvbmVudD1KUSx0aGlzLnBpblN0YXRlQ2hhbmdlZD1uZXcgRix0aGlzLmlzVmlzaWJsZT0hMSx0aGlzLmNvbHVtbkZpbHRlcnMkPXRoaXMuc3RvcmUuc2VsZWN0KFhUKSx0aGlzLm51bUNvbHVtbnNMb2FkZWQkPXRoaXMuc3RvcmUuc2VsZWN0KE1jLmdldE51bURhc2hib2FyZEhwYXJhbXNMb2FkZWQpLHRoaXMubnVtQ29sdW1uc1RvTG9hZCQ9dGhpcy5zdG9yZS5zZWxlY3QoTWMuZ2V0TnVtRGFzaGJvYXJkSHBhcmFtc1RvTG9hZCksdGhpcy51c2VEYXJrTW9kZSQ9dGhpcy5zdG9yZS5zZWxlY3QoUGwpLHRoaXMuaWdub3JlT3V0bGllcnMkPXRoaXMuc3RvcmUuc2VsZWN0KENoKSx0aGlzLnRvb2x0aXBTb3J0JD10aGlzLnN0b3JlLnNlbGVjdCh4aCksdGhpcy54QXhpc1R5cGUkPXRoaXMuc3RvcmUuc2VsZWN0KE9sKSx0aGlzLmZvcmNlU3ZnJD10aGlzLnN0b3JlLnNlbGVjdCh5RiksdGhpcy5jb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCQ9dGhpcy5zdG9yZS5zZWxlY3QodVMpLHRoaXMuY29sdW1uQ29udGV4dE1lbnVzRW5hYmxlZCQ9dGhpcy5zdG9yZS5zZWxlY3QoVDYpLHRoaXMueFNjYWxlVHlwZSQ9dGhpcy5zdG9yZS5zZWxlY3QoT2wpLnBpcGUocShpPT57c3dpdGNoKGkpe2Nhc2UgUGkuU1RFUDpjYXNlIFBpLlJFTEFUSVZFOnJldHVybiB0ci5MSU5FQVI7Y2FzZSBQaS5XQUxMX1RJTUU6cmV0dXJuIHRyLlRJTUU7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgeEF4aXNUeXBlIGZvciBsaW5lIGNoYXJ0LiAke2l9YCl9fSkpLHRoaXMuc2NhbGFyU21vb3RoaW5nJD10aGlzLnN0b3JlLnNlbGVjdChfZCksdGhpcy5zbW9vdGhpbmdFbmFibGVkJD10aGlzLnN0b3JlLnNlbGVjdChfZCkucGlwZShxKGk9Pmk+MCkpLHRoaXMuc2hvd0Z1bGxXaWR0aCQ9dGhpcy5zdG9yZS5zZWxlY3QoSnMpLnBpcGUocShpPT5pW3RoaXMuY2FyZElkXT8uZnVsbFdpZHRoKSksdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBFZX1vblZpc2liaWxpdHlDaGFuZ2Uoe3Zpc2libGU6ZX0pe3RoaXMuaXNWaXNpYmxlPWV9aXNTY2FsYXJDYXJkTWV0YWRhdGEoZSl7bGV0e3BsdWdpbjppfT1lO3JldHVybiBpPT09QW4uU0NBTEFSU31vbkZ1bGxTaXplVG9nZ2xlKCl7dGhpcy5zdG9yZS5kaXNwYXRjaCh6Zyh7Y2FyZElkOnRoaXMuY2FyZElkfSkpfW5nT25Jbml0KCl7bGV0IGk9dGhpcy5zdG9yZS5zZWxlY3QoS3MsdGhpcy5jYXJkSWQpLnBpcGUoT2UobD0+ISFsJiZ0aGlzLmlzU2NhbGFyQ2FyZE1ldGFkYXRhKGwpKSxxKGw9PmwpKTtmdW5jdGlvbiBhKGwpe3JldHVybiBKU09OLnN0cmluZ2lmeShbInNtb290aGVkIixsXSl9bGV0IHM9dGhpcy5zdG9yZS5zZWxlY3Qod3UsdGhpcy5jYXJkSWQpLnBpcGUoaXQodGhpcy5uZ1Vuc3Vic2NyaWJlKSxPZShsPT5Cb29sZWFuKGwpKSxxKGw9PmwpLERhKDEpKS5waXBlKFZpKHRoaXMuc3RvcmUuc2VsZWN0KE9sKSkscSgoW2wsY10pPT5PYmplY3Qua2V5cyhsKS5tYXAocD0+KHtydW5JZDpwLHBvaW50czp0aGlzLnN0ZXBTZXJpZXNUb0xpbmVTZXJpZXMobFtwXSxjKX0pKSkscmkoaUJlKSkucGlwZShWaSh0aGlzLnN0b3JlLnNlbGVjdChzMSkpLGl0KHRoaXMubmdVbnN1YnNjcmliZSkscSgoW2wsY10pPT5jP2Z1bmN0aW9uKG4pe2xldCB0PVtdO2ZvcihsZXQgZSBvZiBuKXtsZXQgaT1bXSxyPU51bWJlci5pc0Zpbml0ZShlLnBvaW50c1swXT8ueCk/ZS5wb2ludHNbMF0ueDotMS8wLG89W107Zm9yKGxldCBhIG9mIGUucG9pbnRzKU51bWJlci5pc0Zpbml0ZShhLngpPyhhLng8ciYmKGkucHVzaCh7c2VyaWVzSWQ6SlNPTi5zdHJpbmdpZnkoW2UucnVuSWQsaS5sZW5ndGhdKSxydW5JZDplLnJ1bklkLHBvaW50czpvfSksbz1bXSksby5wdXNoKGEpLHI9YS54KTpvLnB1c2goYSk7aS5wdXNoKHtzZXJpZXNJZDpKU09OLnN0cmluZ2lmeShbZS5ydW5JZCxpLmxlbmd0aF0pLHJ1bklkOmUucnVuSWQscG9pbnRzOm99KTtmb3IobGV0IGE9MDthPGkubGVuZ3RoO2ErKyl0LnB1c2goey4uLmlbYV0scGFydGl0aW9uSW5kZXg6YSxwYXJ0aXRpb25TaXplOmkubGVuZ3RofSl9cmV0dXJuIHR9KGwpOmwubWFwKGQ9Pih7Li4uZCxzZXJpZXNJZDpkLnJ1bklkLHBhcnRpdGlvbkluZGV4OjAscGFydGl0aW9uU2l6ZToxfSkpKSxxKGw9PmwubWFwKGM9PntsZXQgZD1jLnBvaW50c1swXT8ud2FsbFRpbWU7cmV0dXJuey4uLmMscG9pbnRzOmMucG9pbnRzLm1hcCh1PT4oey4uLnUscmVsYXRpdmVUaW1lSW5Nczp1LndhbGxUaW1lLWR9KSl9fSkpLFZpKHRoaXMuc3RvcmUuc2VsZWN0KE9sKSkscSgoW2wsY10pPT5sLm1hcChkPT4oey4uLmQscG9pbnRzOmQucG9pbnRzLm1hcCh1PT57bGV0IHA7c3dpdGNoKGMpe2Nhc2UgUGkuUkVMQVRJVkU6cD11LnJlbGF0aXZlVGltZUluTXM7YnJlYWs7Y2FzZSBQaS5XQUxMX1RJTUU6cD11LndhbGxUaW1lO2JyZWFrO2RlZmF1bHQ6cD11LnN0ZXB9cmV0dXJuey4uLnUseDpwfX0pfSkpKSxEYSgxKSk7dGhpcy51c2VyVmlld0JveCQ9dGhpcy5zdG9yZS5zZWxlY3QoJEYsdGhpcy5jYXJkSWQpLHRoaXMubWluTWF4U3RlcHMkPUluKFt0aGlzLnN0b3JlLnNlbGVjdChCVyx0aGlzLmNhcmRJZCksdGhpcy5zdG9yZS5zZWxlY3QoVlcsdGhpcy5jYXJkSWQpXSkucGlwZShxKChbbCxjXSk9PntpZihsJiZjKXJldHVybnttaW5TdGVwOk1hdGgubWF4KGw/Lm1pblN0ZXAsYz8ubWluU3RlcCksbWF4U3RlcDpNYXRoLm1pbihsPy5tYXhTdGVwLGM/Lm1heFN0ZXApfX0pKSx0aGlzLmRhdGFTZXJpZXMkPXMucGlwZShWaSh0aGlzLnN0b3JlLnNlbGVjdChfZCkpLEpuKChbbCxjXSk9PntsZXQgZD1sLm1hcCgoe3Nlcmllc0lkOnUscG9pbnRzOnB9KT0+KHtpZDp1LHBvaW50czpwfSkpO3JldHVybiBjPD0wPyR0KGQpOkpyKGFzeW5jIGZ1bmN0aW9uKG4sdCl7TnVtYmVyLmlzRmluaXRlKHQpfHwodD0wKSx0PU1hdGgubWF4KDAsTWF0aC5taW4odCwxKSk7bGV0IGU9W107Zm9yKGxldCBpIG9mIG4pe2xldCByPWkucG9pbnRzWzBdPy55O2lmKGkucG9pbnRzLmV2ZXJ5KGM9PmMueT09cikpe2UucHVzaChpKTtjb250aW51ZX1sZXQgYT1pLnBvaW50cy5sZW5ndGg+MD8wOk5hTixzPTAsbD1pLnBvaW50cy5tYXAoYz0+e2xldCBkPWMueTtpZihOdW1iZXIuaXNGaW5pdGUoZCkpe2E9YSp0KygxLXQpKmQscysrO2xldCB1PTE9PT10PzE6MS1NYXRoLnBvdyh0LHMpO3JldHVybnt4OmMueCx5OmEvdX19cmV0dXJue3g6Yy54LHk6ZH19KTtlLnB1c2goe2lkOmkuaWQscG9pbnRzOmx9KX1yZXR1cm4gZX0oZCxjKSkucGlwZShxKHU9PntsZXQgcD1kLm1hcCgoaCxtKT0+KHtpZDphKGguaWQpLHBvaW50czp1W21dLnBvaW50cy5tYXAoKHt5Ol99LE0pPT4oey4uLmgucG9pbnRzW01dLHk6X30pKX0pKTtyZXR1cm5bLi4uZCwuLi5wXX0pKX0pLGtuKFtdKSksdGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uJD1JbihbdGhpcy5taW5NYXhTdGVwcyQsdGhpcy5zdG9yZS5zZWxlY3QoRXUpLHRoaXMuc3RvcmUuc2VsZWN0KER1KSx0aGlzLnN0b3JlLnNlbGVjdChPbCldKS5waXBlKHEoKFtsLGMsZCx1XSk9PmwmJmMmJnU9PT1QaS5TVEVQJiZkP1lmKGQsbC5taW5TdGVwLGwubWF4U3RlcCk6bnVsbCkpLHRoaXMuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbiQ9dGhpcy5zdG9yZS5zZWxlY3QoSFcsdGhpcy5jYXJkSWQpLHRoaXMuY29sdW1uSGVhZGVycyQ9dGhpcy5zdG9yZS5zZWxlY3QoelcodGhpcy5jYXJkSWQpKSx0aGlzLmNoYXJ0TWV0YWRhdGFNYXAkPXMucGlwZShKbihsPT5JbihsLm1hcChjPT50aGlzLmdldFJ1bkRpc3BsYXlOYW1lQW5kQWxpYXMoYy5ydW5JZCkucGlwZShxKGQ9Pih7Li4uYywuLi5kfSkpKSkpKSxWaSh0aGlzLnN0b3JlLnNlbGVjdChSdSksdGhpcy5zdG9yZS5zZWxlY3QoelEpLHRoaXMuc3RvcmUuc2VsZWN0KFB1KSx0aGlzLnN0b3JlLnNlbGVjdChfZCkpLENyKDApLHEoKFtsLGMsZCx1LHBdKT0+e2xldCBoPXt9LG09cD4wO2ZvcihsZXQgXyBvZiBsKXtsZXR7c2VyaWVzSWQ6TSxydW5JZDp5LGRpc3BsYXlOYW1lOngsYWxpYXM6UixwYXJ0aXRpb25JbmRleDpJLHBhcnRpdGlvblNpemU6Qn09XztoW01dPXt0eXBlOllnLk9SSUdJTkFMLGlkOk0sYWxpYXM6UixkaXNwbGF5TmFtZTpCPjE/YCR7eH06ICR7SX1gOngsdmlzaWJsZTpCb29sZWFuKGMmJmMuZ2V0KHkpJiZkLmhhcyh5KSksY29sb3I6dVt5XT8/IiNmZmYiLGF1eDohMSxvcGFjaXR5OjF9fWlmKCFtKXJldHVybiBoO2ZvcihsZXRbXyxNXW9mIE9iamVjdC5lbnRyaWVzKGgpKXtsZXQgeT1hKF8pO2hbeV09ey4uLk0saWQ6eSx0eXBlOllnLkRFUklWRUQsYXV4OiExLG9yaWdpbmFsU2VyaWVzSWQ6X30sTS5hdXg9ITAsTS5vcGFjaXR5PS4yNX1yZXR1cm4gaH0pLGtuKHt9KSksdGhpcy5sb2FkU3RhdGUkPXRoaXMuc3RvcmUuc2VsZWN0KGdkLHRoaXMuY2FyZElkKSx0aGlzLnRhZyQ9aS5waXBlKHEobD0+bC50YWcpKSx0aGlzLmNhcmRTdGF0ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoSnMpLnBpcGUocShsPT5sW3RoaXMuY2FyZElkXXx8e30pKSx0aGlzLnRpdGxlJD10aGlzLnRhZyQucGlwZShxKGw9PlpnKGwsdGhpcy5ncm91cE5hbWUpKSksdGhpcy5pc1Bpbm5lZCQ9dGhpcy5zdG9yZS5zZWxlY3QoU3UsdGhpcy5jYXJkSWQpLHRoaXMucmFuZ2VFbmFibGVkJD10aGlzLnN0b3JlLnNlbGVjdChtMSh0aGlzLmNhcmRJZCkpLHRoaXMucnVuVG9IcGFyYW1NYXAkPXRoaXMuc3RvcmUuc2VsZWN0KFhXKSx0aGlzLnNlbGVjdGFibGVDb2x1bW5zJD10aGlzLnN0b3JlLnNlbGVjdChZVCl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfWdldFJ1bkRpc3BsYXlOYW1lQW5kQWxpYXMoZSl7cmV0dXJuIEluKFt0aGlzLnN0b3JlLnNlbGVjdChfMSx7cnVuSWQ6ZX0pLHRoaXMuc3RvcmUuc2VsZWN0KHFzKSx0aGlzLnN0b3JlLnNlbGVjdChiMSx7cnVuSWQ6ZX0pXSkucGlwZShxKChbaSxyLG9dKT0+e2xldCBhPW51bGwhPT1pP3JbaV0/P251bGw6bnVsbDtyZXR1cm57ZGlzcGxheU5hbWU6b3x8YT9vPy5uYW1lPz8iLi4uIjplLGFsaWFzOmF9fSkpfXN0ZXBTZXJpZXNUb0xpbmVTZXJpZXMoZSxpKXtsZXQgcj1pPT09UGkuU1RFUDtyZXR1cm4gZS5tYXAobz0+e2xldCBhPTFlMypvLndhbGxUaW1lO3JldHVybnsuLi5vLHg6cj9vLnN0ZXA6YSx5Om8udmFsdWUsd2FsbFRpbWU6YSxyZWxhdGl2ZVRpbWVJbk1zOjB9fSl9b25EYXRhVGFibGVTb3J0aW5nKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goclEoZSkpfW9uQ2FyZFN0YXRlQ2hhbmdlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGZUKHtjYXJkSWQ6dGhpcy5jYXJkSWQsc2V0dGluZ3M6ZX0pKX1vblRpbWVTZWxlY3Rpb25DaGFuZ2VkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goSGgoey4uLmUsY2FyZElkOnRoaXMuY2FyZElkfSkpfW9uU3RlcFNlbGVjdG9yVG9nZ2xlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFRkKHthZmZvcmRhbmNlOmUsY2FyZElkOnRoaXMuY2FyZElkfSkpfW9uTGluZUNoYXJ0Wm9vbShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKF95KHt1c2VyVmlld0JveDplLGNhcmRJZDp0aGlzLmNhcmRJZH0pKX1lZGl0Q29sdW1uSGVhZGVycyh7c291cmNlOmUsZGVzdGluYXRpb246aSxzaWRlOnIsZGF0YVRhYmxlTW9kZTpvfSl7dGhpcy5zdG9yZS5kaXNwYXRjaCgiSFBBUkFNIj09PWUudHlwZT9yby5kYXNoYm9hcmRIcGFyYW1Db2x1bW5PcmRlckNoYW5nZWQoe3NvdXJjZTplLGRlc3RpbmF0aW9uOmksc2lkZTpyfSk6amcoe3NvdXJjZTplLGRlc3RpbmF0aW9uOmksc2lkZTpyLGRhdGFUYWJsZU1vZGU6b30pKX1vcGVuVGFibGVFZGl0TWVudVRvTW9kZShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGNUKHttb2RlOmV9KSl9b25BZGRDb2x1bW4oZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChyby5kYXNoYm9hcmRIcGFyYW1Db2x1bW5BZGRlZChlKSl9b25SZW1vdmVDb2x1bW4oe2hlYWRlcjplLGRhdGFUYWJsZU1vZGU6aX0pe3RoaXMuc3RvcmUuZGlzcGF0Y2goIkhQQVJBTSI9PT1lLnR5cGU/cm8uZGFzaGJvYXJkSHBhcmFtQ29sdW1uUmVtb3ZlZCh7Y29sdW1uOmV9KTpHZyh7aGVhZGVyOmUsY2FyZElkOnRoaXMuY2FyZElkLGRhdGFUYWJsZU1vZGU6aX0pKX1hZGRIcGFyYW1GaWx0ZXIoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChyby5kYXNoYm9hcmRIcGFyYW1GaWx0ZXJBZGRlZCh7bmFtZTplLm5hbWUsZmlsdGVyOmUudmFsdWV9KSl9bG9hZEFsbENvbHVtbnMoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHJvLmxvYWRBbGxEYXNoYm9hcmRIcGFyYW1zKCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEllKSl9LG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1sic2NhbGFyLWNhcmQiXV0saW5wdXRzOntEYXRhRG93bmxvYWRDb21wb25lbnQ6IkRhdGFEb3dubG9hZENvbXBvbmVudCIsY2FyZElkOiJjYXJkSWQiLGdyb3VwTmFtZToiZ3JvdXBOYW1lIn0sb3V0cHV0czp7cGluU3RhdGVDaGFuZ2VkOiJwaW5TdGF0ZUNoYW5nZWQifSxkZWNsczoyOSx2YXJzOjg3LGNvbnN0czpbWyJvYnNlcnZlSW50ZXJzZWN0aW9uIiwiIiwzLCJjYXJkSWQiLCJjaGFydE1ldGFkYXRhTWFwIiwiRGF0YURvd25sb2FkQ29tcG9uZW50IiwiZGF0YVNlcmllcyIsImlnbm9yZU91dGxpZXJzIiwiaXNDYXJkVmlzaWJsZSIsImlzUGlubmVkIiwibG9hZFN0YXRlIiwic2hvd0Z1bGxXaWR0aCIsInNtb290aGluZ0VuYWJsZWQiLCJ0YWciLCJ0aXRsZSIsImNhcmRTdGF0ZSIsInRvb2x0aXBTb3J0IiwieEF4aXNUeXBlIiwieFNjYWxlVHlwZSIsInVzZURhcmtNb2RlIiwibGlua2VkVGltZVNlbGVjdGlvbiIsInN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24iLCJmb3JjZVN2ZyIsImNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIiwiY29sdW1uQ29udGV4dE1lbnVzRW5hYmxlZCIsIm1pbk1heFN0ZXAiLCJ1c2VyVmlld0JveCIsImNvbHVtbkhlYWRlcnMiLCJyYW5nZUVuYWJsZWQiLCJjb2x1bW5GaWx0ZXJzIiwicnVuVG9IcGFyYW1NYXAiLCJzZWxlY3RhYmxlQ29sdW1ucyIsIm51bUNvbHVtbnNMb2FkZWQiLCJudW1Db2x1bW5zVG9Mb2FkIiwib25GdWxsU2l6ZVRvZ2dsZSIsIm9uUGluQ2xpY2tlZCIsIm9uVmlzaWJpbGl0eUNoYW5nZSIsIm9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLCJvblN0ZXBTZWxlY3RvclRvZ2dsZWQiLCJvbkRhdGFUYWJsZVNvcnRpbmciLCJvbkxpbmVDaGFydFpvb20iLCJlZGl0Q29sdW1uSGVhZGVycyIsIm9uQ2FyZFN0YXRlQ2hhbmdlZCIsIm9wZW5UYWJsZUVkaXRNZW51VG9Nb2RlIiwiYWRkQ29sdW1uIiwicmVtb3ZlQ29sdW1uIiwiYWRkRmlsdGVyIiwibG9hZEFsbENvbHVtbnMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihmKDAsInNjYWxhci1jYXJkLWNvbXBvbmVudCIsMCksQSgib25GdWxsU2l6ZVRvZ2dsZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkZ1bGxTaXplVG9nZ2xlKCl9KSgib25QaW5DbGlja2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5waW5TdGF0ZUNoYW5nZWQuZW1pdChvKX0pKCJvblZpc2liaWxpdHlDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVmlzaWJpbGl0eUNoYW5nZShvKX0pKCJvblRpbWVTZWxlY3Rpb25DaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblRpbWVTZWxlY3Rpb25DaGFuZ2VkKG8pfSkoIm9uU3RlcFNlbGVjdG9yVG9nZ2xlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25TdGVwU2VsZWN0b3JUb2dnbGVkKG8pfSkoIm9uRGF0YVRhYmxlU29ydGluZyIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25EYXRhVGFibGVTb3J0aW5nKG8pfSkoIm9uTGluZUNoYXJ0Wm9vbSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25MaW5lQ2hhcnRab29tKG8pfSkoImVkaXRDb2x1bW5IZWFkZXJzIixmdW5jdGlvbihvKXtyZXR1cm4gaS5lZGl0Q29sdW1uSGVhZGVycyhvKX0pKCJvbkNhcmRTdGF0ZUNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uQ2FyZFN0YXRlQ2hhbmdlZChvKX0pKCJvcGVuVGFibGVFZGl0TWVudVRvTW9kZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub3BlblRhYmxlRWRpdE1lbnVUb01vZGUobyl9KSgiYWRkQ29sdW1uIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkFkZENvbHVtbihvKX0pKCJyZW1vdmVDb2x1bW4iLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uUmVtb3ZlQ29sdW1uKG8pfSkoImFkZEZpbHRlciIsZnVuY3Rpb24obyl7cmV0dXJuIGkuYWRkSHBhcmFtRmlsdGVyKG8pfSkoImxvYWRBbGxDb2x1bW5zIixmdW5jdGlvbigpe3JldHVybiBpLmxvYWRBbGxDb2x1bW5zKCl9KSxVKDEsImFzeW5jIiksVSgyLCJhc3luYyIpLFUoMywiYXN5bmMiKSxVKDQsImFzeW5jIiksVSg1LCJhc3luYyIpLFUoNiwiYXN5bmMiKSxVKDcsImFzeW5jIiksVSg4LCJhc3luYyIpLFUoOSwiYXN5bmMiKSxVKDEwLCJhc3luYyIpLFUoMTEsImFzeW5jIiksVSgxMiwiYXN5bmMiKSxVKDEzLCJhc3luYyIpLFUoMTQsImFzeW5jIiksVSgxNSwiYXN5bmMiKSxVKDE2LCJhc3luYyIpLFUoMTcsImFzeW5jIiksVSgxOCwiYXN5bmMiKSxVKDE5LCJhc3luYyIpLFUoMjAsImFzeW5jIiksVSgyMSwiYXN5bmMiKSxVKDIyLCJhc3luYyIpLFUoMjMsImFzeW5jIiksVSgyNCwiYXN5bmMiKSxVKDI1LCJhc3luYyIpLFUoMjYsImFzeW5jIiksVSgyNywiYXN5bmMiKSxVKDI4LCJhc3luYyIpLGcoKSksMiZlJiZiKCJjYXJkSWQiLGkuY2FyZElkKSgiY2hhcnRNZXRhZGF0YU1hcCIsRygxLDMxLGkuY2hhcnRNZXRhZGF0YU1hcCQpKSgiRGF0YURvd25sb2FkQ29tcG9uZW50IixpLkRhdGFEb3dubG9hZENvbXBvbmVudCkoImRhdGFTZXJpZXMiLEcoMiwzMyxpLmRhdGFTZXJpZXMkKSkoImlnbm9yZU91dGxpZXJzIixHKDMsMzUsaS5pZ25vcmVPdXRsaWVycyQpKSgiaXNDYXJkVmlzaWJsZSIsaS5pc1Zpc2libGUpKCJpc1Bpbm5lZCIsRyg0LDM3LGkuaXNQaW5uZWQkKSkoImxvYWRTdGF0ZSIsRyg1LDM5LGkubG9hZFN0YXRlJCkpKCJzaG93RnVsbFdpZHRoIixHKDYsNDEsaS5zaG93RnVsbFdpZHRoJCkpKCJzbW9vdGhpbmdFbmFibGVkIixHKDcsNDMsaS5zbW9vdGhpbmdFbmFibGVkJCkpKCJ0YWciLEcoOCw0NSxpLnRhZyQpKSgidGl0bGUiLEcoOSw0NyxpLnRpdGxlJCkpKCJjYXJkU3RhdGUiLEcoMTAsNDksaS5jYXJkU3RhdGUkKSkoInRvb2x0aXBTb3J0IixHKDExLDUxLGkudG9vbHRpcFNvcnQkKSkoInhBeGlzVHlwZSIsRygxMiw1MyxpLnhBeGlzVHlwZSQpKSgieFNjYWxlVHlwZSIsRygxMyw1NSxpLnhTY2FsZVR5cGUkKSkoInVzZURhcmtNb2RlIixHKDE0LDU3LGkudXNlRGFya01vZGUkKSkoImxpbmtlZFRpbWVTZWxlY3Rpb24iLEcoMTUsNTksaS5saW5rZWRUaW1lU2VsZWN0aW9uJCkpKCJzdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uIixHKDE2LDYxLGkuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbiQpKSgiZm9yY2VTdmciLEcoMTcsNjMsaS5mb3JjZVN2ZyQpKSgiY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQiLEcoMTgsNjUsaS5jb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCQpKSgiY29sdW1uQ29udGV4dE1lbnVzRW5hYmxlZCIsRygxOSw2NyxpLmNvbHVtbkNvbnRleHRNZW51c0VuYWJsZWQkKSkoIm1pbk1heFN0ZXAiLEcoMjAsNjksaS5taW5NYXhTdGVwcyQpKSgidXNlclZpZXdCb3giLEcoMjEsNzEsaS51c2VyVmlld0JveCQpKSgiY29sdW1uSGVhZGVycyIsRygyMiw3MyxpLmNvbHVtbkhlYWRlcnMkKSkoInJhbmdlRW5hYmxlZCIsRygyMyw3NSxpLnJhbmdlRW5hYmxlZCQpKSgiY29sdW1uRmlsdGVycyIsRygyNCw3NyxpLmNvbHVtbkZpbHRlcnMkKSkoInJ1blRvSHBhcmFtTWFwIixHKDI1LDc5LGkucnVuVG9IcGFyYW1NYXAkKSkoInNlbGVjdGFibGVDb2x1bW5zIixHKDI2LDgxLGkuc2VsZWN0YWJsZUNvbHVtbnMkKSkoIm51bUNvbHVtbnNMb2FkZWQiLEcoMjcsODMsaS5udW1Db2x1bW5zTG9hZGVkJCkpKCJudW1Db2x1bW5zVG9Mb2FkIixHKDI4LDg1LGkubnVtQ29sdW1uc1RvTG9hZCQpKX0sZGVwZW5kZW5jaWVzOltRZyxkbmUsY3RdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gYUJlKG4sdCxlKXtsZXQgaT1bXSx7bGVmdDpyLHJpZ2h0Om99PXQsYT0oby1yKS9lLHM9MCxsPTA7Zm9yKGxldCBjPTA7YzxlO2MrKyl7bGV0IGQ9citjKmEsdT1kK2EscD1jPT09ZS0xLGg9bDtmb3IobD0wO3M8bi5sZW5ndGg7KXtsZXQgbT1uW3NdLF89c0JlKG0sZCx1LCFwKTtpZihoKz1fLmN1cnIsbCs9Xy5uZXh0LG0ueCttLmR4PnUpYnJlYWs7cysrfWkucHVzaCh7eDpkLGR4OmEseTpofSl9cmV0dXJuIGl9ZnVuY3Rpb24gc0JlKG4sdCxlLGkpe2xldCByPW4ueCxvPW4ueCtuLmR4O2lmKHI+ZXx8bzx0KXJldHVybntjdXJyOjAsbmV4dDowfTtpZigwPT09bi5keClyZXR1cm4gaSYmbz49ZT97Y3VycjowLG5leHQ6bi55fTp7Y3VycjpuLnksbmV4dDowfTtsZXQgYT1NYXRoLm1pbihvLGUpLU1hdGgubWF4KHIsdCk7cmV0dXJue2N1cnI6bi55KmEvbi5keCxuZXh0OjB9fXZhciBsQmU9MWU0LGNCZT0uMDAxLGRCZT1ZcigiLjJ+cyIpLHVCZT1ZcigiLjR+ciIpLHBCZT1ZcigiLjJ+ZSIpO2Z1bmN0aW9uIGhuZShuKXtpZigwPT09bilyZXR1cm4iMCI7bGV0IHQ9TWF0aC5hYnMobik7cmV0dXJuIHQ+PWxCZT9kQmUobik6dDxjQmU/cEJlKG4pOnVCZShuKX12YXIgaEJlPVsibWFpbiJdLG1CZT1bInhBeGlzIl0sZkJlPVsieUF4aXMiXSxnQmU9WyJjb250ZW50Il0sX0JlPVsiaGlzdG9ncmFtcyJdO2Z1bmN0aW9uIGJCZShuLHQpe2lmKDEmbiYmKHFuKCksZigwLCJnIikoMSwidGV4dCIpLFQoMiksZygpKCkpLDImbil7bGV0IGU9dygpO0J0KCJ0cmFuc2Zvcm0iLGUuZ2V0Q3NzVHJhbnNsYXRlUHgoZS50b29sdGlwRGF0YS54QXhpcy5wb3NpdGlvbiw5KSksdigyKSxrdChlLnRvb2x0aXBEYXRhLnhBeGlzLmxhYmVsKX19ZnVuY3Rpb24gdkJlKG4sdCl7aWYoMSZuJiYocW4oKSxmKDAsImciKSgxLCJ0ZXh0IiksVCgyKSxnKCkoKSksMiZuKXtsZXQgZT13KCk7QnQoInRyYW5zZm9ybSIsZS5nZXRHcm91cFRyYW5zZm9ybShlLnRvb2x0aXBEYXRhLmNsb3Nlc3REYXR1bSkpLHYoMSksQmUoInkiLGUudG9vbHRpcERhdGEueUF4aXMucG9zaXRpb24pLHYoMSksVmUoIiAiLGUudG9vbHRpcERhdGEueUF4aXMubGFiZWwsIiAiKX19ZnVuY3Rpb24geUJlKG4sdCl7aWYoMSZuKXtsZXQgZT1UZSgpO3FuKCksdWEoKSxHdCgwKSxmKDEsImhpc3RvZ3JhbS1jYXJkLWZvYi1jb250cm9sbGVyIiwxNiksQSgib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsZnVuY3Rpb24ocil7cmV0dXJuIG5lKGUpLGllKHcoKS5vbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkLmVtaXQocikpfSkoIm9uVGltZVNlbGVjdGlvblRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIG5lKGUpLGllKHcoKS5vbkxpbmtlZFRpbWVUb2dnbGVkLmVtaXQoKSl9KSxnKCksV3QoKX1pZigyJm4pe2xldCBlPXcoKTt2KDEpLGIoInRpbWVTZWxlY3Rpb24iLGUudGltZVNlbGVjdGlvbikoInN0ZXBzIixlLmdldFN0ZXBzKCkpKCJ0ZW1wb3JhbFNjYWxlIixlLnNjYWxlcy50ZW1wb3JhbFNjYWxlKX19ZnVuY3Rpb24geEJlKG4sdCl7aWYoMSZuJiYocW4oKSxmKDAsImciKSxrKDEsImxpbmUiLDE3KSxnKCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQ7QnQoInRyYW5zZm9ybSIsdygpLmdldENzc1RyYW5zbGF0ZVB4KDAsZSkpfX1mdW5jdGlvbiBDQmUobix0KXsxJm4mJihxbigpLGsoMCwibGluZSIsMjEpKX1mdW5jdGlvbiBNQmUobix0KXtpZigxJm4mJihxbigpLGsoMCwiY2lyY2xlIiwyMikpLDImbil7bGV0IGU9dygpLiRpbXBsaWNpdCxpPXcoKTtCdCgidHJhbnNmb3JtIixpLmdldENzc1RyYW5zbGF0ZVB4KGkuZ2V0VWlDb29yZEZyb21CaW5Gb3JDb250ZW50KGkuZ2V0Q2xvc2VzdEJpbkZyb21CaW5Db29yZGluYXRlKGUsaS50b29sdGlwRGF0YS54UG9zaXRpb25JbkJpbkNvb3JkKSkueCxpLmdldFVpQ29vcmRGcm9tQmluRm9yQ29udGVudChpLmdldENsb3Nlc3RCaW5Gcm9tQmluQ29vcmRpbmF0ZShlLGkudG9vbHRpcERhdGEueFBvc2l0aW9uSW5CaW5Db29yZCkpLnkpKX19ZnVuY3Rpb24gd0JlKG4sdCl7aWYoMSZuKXtsZXQgZT1UZSgpO3FuKCksZigwLCJnIiwxOCksQSgibW91c2VlbnRlciIsZnVuY3Rpb24ocil7bGV0IGE9bmUoZSkuJGltcGxpY2l0O3JldHVybiBpZSh3KCkudXBkYXRlQ29sb3JPbkhvdmVyKHIsYSwhMCkpfSkoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKHIpe2xldCBhPW5lKGUpLiRpbXBsaWNpdDtyZXR1cm4gaWUodygpLnVwZGF0ZUNvbG9yT25Ib3ZlcihyLGEsITEpKX0pKCJjbGljayIsZnVuY3Rpb24oKXtsZXQgbz1uZShlKS4kaW1wbGljaXQ7cmV0dXJuIGllKHcoKS5vbkxpbmtlZFRpbWVSYW5nZUNoYW5nZWQobykpfSksUygxLENCZSwxLDAsImxpbmUiLDE5KSxrKDIsInBhdGgiKSxTKDMsTUJlLDEsMiwiY2lyY2xlIiwyMCksZygpfWlmKDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT13KCk7QnQoInRyYW5zZm9ybSIsaS5nZXRHcm91cFRyYW5zZm9ybShlKSkoImNvbG9yIixpLmdldEhpc3RvZ3JhbUZpbGwoZSkpLG50KCJoaXN0b2dyYW0iLCEwKSgibm8tY29sb3IiLCFpLmlzRGF0dW1JblRpbWVTZWxlY3Rpb25SYW5nZShlKSksdigxKSxiKCJuZ0lmIixpLm1vZGU9PT1pLkhpc3RvZ3JhbU1vZGUuT0ZGU0VUKSx2KDEpLEJlKCJkIixpLmdldEhpc3RvZ3JhbVBhdGgoZSkpLHYoMSksYigibmdJZiIsaS50b29sdGlwRGF0YSl9fWZ1bmN0aW9uIFNCZShuLHQpe2lmKDEmbiYmKHFuKCksaygwLCJjaXJjbGUiLDIyKSksMiZuKXtsZXQgZT13KDIpO0JlKCJjeCIsZS5nZXRVaUNvb3JkRnJvbUJpbkZvckNvbnRlbnQoZS50b29sdGlwRGF0YS5jbG9zZXN0QmluKS54KSgiY3kiLGUuZ2V0VWlDb29yZEZyb21CaW5Gb3JDb250ZW50KGUudG9vbHRpcERhdGEuY2xvc2VzdEJpbikueSl9fWZ1bmN0aW9uIEVCZShuLHQpe2lmKDEmbiYmKHFuKCksZigwLCJnIiw0KSgxLCJnIiksaygyLCJwYXRoIiksUygzLFNCZSwxLDIsImNpcmNsZSIsMjMpLGcoKSxmKDQsImciLDI0KSg1LCJ0ZXh0IiwyNSksVCg2KSxnKCkoKSgpKSwyJm4pe2xldCBlPXcoKTt2KDEpLEJ0KCJ0cmFuc2Zvcm0iLGUuZ2V0R3JvdXBUcmFuc2Zvcm0oZS50b29sdGlwRGF0YS5jbG9zZXN0RGF0dW0pKSx2KDEpLEJlKCJkIixlLmdldEhpc3RvZ3JhbVBhdGgoZS50b29sdGlwRGF0YS5jbG9zZXN0RGF0dW0pKSx2KDEpLGIoIm5nSWYiLGUudG9vbHRpcERhdGEuY2xvc2VzdEJpbiksdigxKSxCdCgidHJhbnNmb3JtIixlLmdldENzc1RyYW5zbGF0ZVB4KGUudG9vbHRpcERhdGEudmFsdWUucG9zaXRpb24ueCxlLnRvb2x0aXBEYXRhLnZhbHVlLnBvc2l0aW9uLnkpKSx2KDIpLGt0KGUudG9vbHRpcERhdGEudmFsdWUubGFiZWwpfX12YXIgZ0E9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmNoYW5nZURldGVjdG9yPWUsdGhpcy5tb2RlPVNyLk9GRlNFVCx0aGlzLnRpbWVQcm9wZXJ0eT1uby5TVEVQLHRoaXMudGltZVNlbGVjdGlvbj1udWxsLHRoaXMub25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZD1uZXcgRix0aGlzLm9uTGlua2VkVGltZVRvZ2dsZWQ9bmV3IEYsdGhpcy5IaXN0b2dyYW1Nb2RlPVNyLHRoaXMuVGltZVByb3BlcnR5PW5vLHRoaXMudG9vbHRpcERhdGE9bnVsbCx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IEVlLHRoaXMubGF5b3V0PXtoaXN0b2dyYW1IZWlnaHQ6MCxjb250ZW50Q2xpZW50UmVjdDp7aGVpZ2h0OjAsd2lkdGg6MH19LHRoaXMuc2NhbGVzPW51bGwsdGhpcy5mb3JtYXR0ZXJzPXtiaW5OdW1iZXI6aG5lLGNvdW50OllyKCIuM24iKSx3YWxsVGltZTptMCgiJW0vJWQgJVgiKSxzdGVwOllyKCIuMGYiKSxyZWxhdGl2ZTppPT5ZcigiLjFyIikoaS8zNmU1KSsiaCJ9LHRoaXMuZG9tVmlzaWJsZT0hMX1uZ09uQ2hhbmdlcygpe3RoaXMudXBkYXRlQ2hhcnRJZlZpc2libGUoKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9bmdBZnRlclZpZXdJbml0KCl7RWkodGhpcy5tYWluLm5hdGl2ZUVsZW1lbnQsIm1vdXNlbW92ZSIse3Bhc3NpdmU6ITB9KS5waXBlKGl0KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShlPT50aGlzLm9uTW91c2VNb3ZlKGUpKX1nZXRDc3NUcmFuc2xhdGVQeChlLGkpe3JldHVybmB0cmFuc2xhdGUoJHtlfXB4LCAke2l9cHgpYH1nZXRDbG9zZXN0QmluRnJvbUJpbkNvb3JkaW5hdGUoZSxpKXtpZighZS5iaW5zLmxlbmd0aClyZXR1cm57eDowLGR4OjAseTowfTtsZXQgcj1lLmJpbnNbMF0sbz1lLmJpbnMuc2xpY2UoLTEpWzBdO3JldHVybiBpPHIueD9yOmk+PW8ueCtvLmR4P286ZS5iaW5zLmZpbmQocz0+cy54PD1pJiZpPHMueCtzLmR4KX1nZXRVaUNvb3JkRnJvbUJpbkZvckNvbnRlbnQoZSl7cmV0dXJuIHRoaXMuc2NhbGVzP3t4OnRoaXMuc2NhbGVzLmJpblNjYWxlKCR4KGUpKSx5OnRoaXMuc2NhbGVzLmNvdW50U2NhbGUoZS55KX06e3g6MCx5OjB9fWdldEhpc3RvZ3JhbVBhdGgoZSl7aWYoIXRoaXMuc2NhbGVzfHwhZS5iaW5zLmxlbmd0aClyZXR1cm4iIjtsZXQgaT10aGlzLnNjYWxlcy5iaW5TY2FsZSxyPXRoaXMuc2NhbGVzLmNvdW50U2NhbGUsbz1lLmJpbnNbMF0sYT1lLmJpbnMuc2xpY2UoLTEpWzBdLHM9W2BNJHtpKCR4KG8pKX0sJHtyKDApfWBdO2ZvcihsZXQgbCBvZiBlLmJpbnMpcy5wdXNoKGBMJHtpKCR4KGwpKX0sJHtyKGwueSl9YCk7cmV0dXJuIHMucHVzaChgTCR7aSgkeChhKSl9LCR7cigwKX1gKSxzLmpvaW4oIiIpfXRyYWNrQnlXYWxsVGltZShlKXtyZXR1cm4gZS53YWxsVGltZX1nZXRHcm91cFRyYW5zZm9ybShlKXtyZXR1cm4gdGhpcy5zY2FsZXMmJnRoaXMubW9kZSE9PVNyLk9WRVJMQVk/dGhpcy5nZXRDc3NUcmFuc2xhdGVQeCgwLHRoaXMuc2NhbGVzLnRlbXBvcmFsU2NhbGUodGhpcy5nZXRUaW1lVmFsdWUoZSkpKToiIn1nZXRTdGVwcygpe3JldHVybiB0aGlzLmRhdGEubWFwKGU9PmUuc3RlcCl9aXNUaW1lU2VsZWN0aW9uRW5hYmxlZChlKXtyZXR1cm4gQm9vbGVhbih0aGlzLm1vZGU9PT1Tci5PRkZTRVQmJnRoaXMudGltZVByb3BlcnR5PT09bm8uU1RFUCYmdGhpcy5zY2FsZXMmJmUpfWlzRGF0dW1JblRpbWVTZWxlY3Rpb25SYW5nZShlKXtyZXR1cm4hdGhpcy5pc1RpbWVTZWxlY3Rpb25FbmFibGVkKHRoaXMudGltZVNlbGVjdGlvbil8fChudWxsPT09dGhpcy50aW1lU2VsZWN0aW9uLmVuZD90aGlzLnRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcD09PWUuc3RlcDp0aGlzLnRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcDw9ZS5zdGVwJiZ0aGlzLnRpbWVTZWxlY3Rpb24uZW5kLnN0ZXA+PWUuc3RlcCl9Z2V0SGlzdG9ncmFtRmlsbChlKXtyZXR1cm4gdGhpcy5zY2FsZXM/dGhpcy5zY2FsZXMuZDNDb2xvclNjYWxlKHRoaXMuZ2V0VGltZVZhbHVlKGUpKToiIn11cGRhdGVDb2xvck9uSG92ZXIoZSxpLHIpeyF0aGlzLmlzVGltZVNlbGVjdGlvbkVuYWJsZWQodGhpcy50aW1lU2VsZWN0aW9uKXx8dGhpcy5pc0RhdHVtSW5UaW1lU2VsZWN0aW9uUmFuZ2UoaSl8fChyP2UudGFyZ2V0LmNsYXNzTGlzdC5yZW1vdmUoIm5vLWNvbG9yIik6ZS50YXJnZXQuY2xhc3NMaXN0LmFkZCgibm8tY29sb3IiKSl9Z2V0R3JpZFRpY2tZTG9jcygpe2lmKCF0aGlzLnNjYWxlc3x8dGhpcy5tb2RlPT09U3IuT0ZGU0VUKXJldHVybltdO2xldCBlPXRoaXMuc2NhbGVzLmNvdW50U2NhbGU7cmV0dXJuIGUudGlja3MoKS5tYXAoaT0+ZShpKSl9b25SZXNpemUoKXt0aGlzLnVwZGF0ZUNsaWVudFJlY3RzKCksdGhpcy51cGRhdGVDaGFydElmVmlzaWJsZSgpfW9uVmlzaWJpbGl0eUNoYW5nZSh7dmlzaWJsZTplfSl7dGhpcy5kb21WaXNpYmxlPWUsZSYmKHRoaXMudXBkYXRlQ2xpZW50UmVjdHMoKSx0aGlzLnVwZGF0ZUNoYXJ0SWZWaXNpYmxlKCkpfW9uTGlua2VkVGltZVJhbmdlQ2hhbmdlZChlKXtpZighdGhpcy5pc1RpbWVTZWxlY3Rpb25FbmFibGVkKHRoaXMudGltZVNlbGVjdGlvbikpcmV0dXJuO2xldCBpPXRoaXMudGltZVNlbGVjdGlvbi5zdGFydC5zdGVwLHI9dGhpcy50aW1lU2VsZWN0aW9uLmVuZD8uc3RlcCxvPWUuc3RlcDxpP2Uuc3RlcDppLGE9cjthPXZvaWQgMD09PWE/ZS5zdGVwPmk/ZS5zdGVwOmk6ZS5zdGVwPmE/ZS5zdGVwOmEsKG8hPT1pfHxhIT09cikmJm8hPT1hJiZ0aGlzLm9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQuZW1pdCh7dGltZVNlbGVjdGlvbjp7c3RhcnQ6e3N0ZXA6b30sZW5kOntzdGVwOmF9fSxhZmZvcmRhbmNlOlFhLkhJU1RPR1JBTV9DTElDS19UT19SQU5HRX0pfWdldFRpbWVWYWx1ZShlKXtzd2l0Y2godGhpcy50aW1lUHJvcGVydHkpe2Nhc2Ugbm8uV0FMTF9USU1FOnJldHVybiBlLndhbGxUaW1lO2Nhc2Ugbm8uU1RFUDpyZXR1cm4gZS5zdGVwO2Nhc2Ugbm8uUkVMQVRJVkU6cmV0dXJuIGUud2FsbFRpbWUtdGhpcy5kYXRhWzBdLndhbGxUaW1lfX11cGRhdGVDbGllbnRSZWN0cygpe3RoaXMuY29udGVudCYmKHRoaXMubGF5b3V0LmNvbnRlbnRDbGllbnRSZWN0PXRoaXMuY29udGVudC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMubGF5b3V0Lmhpc3RvZ3JhbUhlaWdodD10aGlzLmxheW91dC5jb250ZW50Q2xpZW50UmVjdC5oZWlnaHQvMi41KX11cGRhdGVDaGFydElmVmlzaWJsZSgpeyF0aGlzLmRvbVZpc2libGV8fCh0aGlzLnNjYWxlcz10aGlzLmNvbXB1dGVTY2FsZXModGhpcy5kYXRhKSx0aGlzLnJlbmRlclhBeGlzKCksdGhpcy5yZW5kZXJZQXhpcygpLHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpKX1jb21wdXRlU2NhbGVzKGUpe2xldHt3aWR0aDppLGhlaWdodDpyfT10aGlzLmxheW91dC5jb250ZW50Q2xpZW50UmVjdCx7bWluOm8sbWF4OmF9PW1uZShlLHk9PmZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4ucmVkdWNlKChlLGkpPT5NYXRoLm1pbihlLGkueCksMS8wKX0oeS5iaW5zKSx5PT5NVih5LmJpbnMsKHt4OngsZHg6Un0pPT54K1IpKSxzPU1WKGUseT0+TVYoeS5iaW5zLCh7eTp4fSk9PngpKSxsPXpsKCkuZG9tYWluKFtvLGFdKS5uaWNlKCksYz10aGlzLm1vZGUhPT1Tci5PVkVSTEFZJiZ0aGlzLnRpbWVQcm9wZXJ0eT09bm8uV0FMTF9USU1FP3NtKCk6emwoKSxkPWUubWFwKHk9PnRoaXMuZ2V0VGltZVZhbHVlKHkpKSx7bWluOnUsbWF4OnB9PW1uZShkLHk9PnkpLGg9W3UscF07Yy5kb21haW4oaCk7bGV0IG09emwoKTttLmRvbWFpbihbMCxzXSk7bGV0IF89WGgodGhpcy5jb2xvcnx8IiMwMDAiKSxNPXpsKCk7cmV0dXJuIE0uZG9tYWluKGgpLGwucmFuZ2UoWzAsaV0pLE0ucmFuZ2UoW18uYnJpZ2h0ZXIoKSxfLmRhcmtlcigpXSksTS5pbnRlcnBvbGF0ZSh1TCksdGhpcy5tb2RlPT09U3IuT1ZFUkxBWT8oYy5yYW5nZShbcixyXSksbS5yYW5nZShbciwwXSkpOihjLnJhbmdlKFtyLSh0aGlzLm1vZGU9PT1Tci5PRkZTRVQ/ci10aGlzLmxheW91dC5oaXN0b2dyYW1IZWlnaHQ6MCkscl0pLG0ucmFuZ2UoWzAsLXRoaXMubGF5b3V0Lmhpc3RvZ3JhbUhlaWdodF0pKSx7YmluU2NhbGU6bCxkM0NvbG9yU2NhbGU6TSxjb3VudFNjYWxlOm0sdGVtcG9yYWxTY2FsZTpjfX1yZW5kZXJYQXhpcygpe2lmKCF0aGlzLnNjYWxlcylyZXR1cm47bGV0e3dpZHRoOmV9PXRoaXMubGF5b3V0LmNvbnRlbnRDbGllbnRSZWN0LGk9ZnVuY3Rpb24obil7cmV0dXJuIGFaKEhOLG4pfSh0aGlzLnNjYWxlcy5iaW5TY2FsZSkudGlja3MoTWF0aC5tYXgoMixlLzIwKSk7aS50aWNrRm9ybWF0KHRoaXMuZm9ybWF0dGVycy5iaW5OdW1iZXIpLGkoYUQodGhpcy54QXhpcy5uYXRpdmVFbGVtZW50KSl9Z2V0WUF4aXNGb3JtYXR0ZXIoKXtpZih0aGlzLm1vZGU9PT1Tci5PVkVSTEFZKXJldHVybiB0aGlzLmZvcm1hdHRlcnMuY291bnQ7c3dpdGNoKHRoaXMudGltZVByb3BlcnR5KXtjYXNlIG5vLldBTExfVElNRTpyZXR1cm4gdGhpcy5mb3JtYXR0ZXJzLndhbGxUaW1lO2Nhc2Ugbm8uU1RFUDpyZXR1cm4gdGhpcy5mb3JtYXR0ZXJzLnN0ZXA7Y2FzZSBuby5SRUxBVElWRTpyZXR1cm4gdGhpcy5mb3JtYXR0ZXJzLnJlbGF0aXZlO2RlZmF1bHQ6dGhyb3cgUmFuZ2VFcnJvcihgWSBheGlzIGZvcm1hdHRlciBmb3IgJHt0aGlzLnRpbWVQcm9wZXJ0eX0gbXVzdCBiZSBpbXBsZW1lbnRlZGApfX1nZXRNYXhUaWNrcyhlKXtsZXR7aGVpZ2h0Oml9PXRoaXMubGF5b3V0LmNvbnRlbnRDbGllbnRSZWN0LHI9aS8xNTtpZih0aGlzLnRpbWVQcm9wZXJ0eT09PW5vLlNURVApe2xldFtvLGFdPWUuZG9tYWluKCkscz1NYXRoLm1heChhLW8rMSwxKTtyZXR1cm4gTWF0aC5taW4ocyxyKX1yZXR1cm4gcn1yZW5kZXJZQXhpcygpe2lmKCF0aGlzLnNjYWxlcylyZXR1cm47bGV0IGU9dGhpcy5tb2RlPT09U3IuT1ZFUkxBWT90aGlzLnNjYWxlcy5jb3VudFNjYWxlOnRoaXMuc2NhbGVzLnRlbXBvcmFsU2NhbGUsaT10aGlzLmdldE1heFRpY2tzKGUpLHI9ZnVuY3Rpb24obil7cmV0dXJuIGFaKGVELG4pfShlKS50aWNrcyhNYXRoLm1heCgyLGkpKTtyLnRpY2tGb3JtYXQodGhpcy5nZXRZQXhpc0Zvcm1hdHRlcigpKSxyKGFEKHRoaXMueUF4aXMubmF0aXZlRWxlbWVudCkpfWZpbmRDbG9zZXN0RGF0dW1JbmRleChlKXtsZXQgaT1lLnRhcmdldCxyPWk7Zm9yKDtpJiZpIT09dGhpcy5oaXN0b2dyYW1zLm5hdGl2ZUVsZW1lbnQ7KXI9aSxpPWkucGFyZW50RWxlbWVudDtyZXR1cm4gaT9BcnJheS5mcm9tKGkuY2hpbGRyZW4pLmluZGV4T2Yocik6LTF9b25Nb3VzZU1vdmVGb3JUZXN0T25seShlKXtyZXR1cm4gdGhpcy5vbk1vdXNlTW92ZShlKX1vbk1vdXNlTW92ZShlKXtpZighdGhpcy5zY2FsZXMpcmV0dXJuO2xldCBpPWUub2Zmc2V0WCxyPWUub2Zmc2V0WSxvPXRoaXMuZmluZENsb3Nlc3REYXR1bUluZGV4KGUpO2lmKG88MClyZXR1cm47bGV0IGE9dGhpcy5zY2FsZXMuYmluU2NhbGUuaW52ZXJ0KGkpLHM9dGhpcy5kYXRhW29dLGw9dGhpcy5nZXRDbG9zZXN0QmluRnJvbUJpbkNvb3JkaW5hdGUocyxhKTt0aGlzLnRvb2x0aXBEYXRhPXt2YWx1ZTp7cG9zaXRpb246e3g6aSx5OnJ9LGxhYmVsOnRoaXMubW9kZT09PVNyLk9GRlNFVD90aGlzLmZvcm1hdHRlcnMuY291bnQobC55KTpgU3RlcDogJHt0aGlzLmZvcm1hdHRlcnMuc3RlcChzLnN0ZXApfWB9LHhBeGlzOntwb3NpdGlvbjp0aGlzLmdldFVpQ29vcmRGcm9tQmluRm9yQ29udGVudChsKS54LGxhYmVsOnRoaXMuZm9ybWF0dGVycy5iaW5OdW1iZXIoJHgobCkpfSx5QXhpczp7cG9zaXRpb246dGhpcy5zY2FsZXMuY291bnRTY2FsZSh0aGlzLm1vZGU9PT1Tci5PRkZTRVQ/MDpsLnkpLGxhYmVsOnRoaXMubW9kZT09PVNyLk9GRlNFVD90aGlzLmdldFlBeGlzRm9ybWF0dGVyKCkodGhpcy5nZXRUaW1lVmFsdWUocykpOnRoaXMuZm9ybWF0dGVycy5iaW5OdW1iZXIobC55KX0seFBvc2l0aW9uSW5CaW5Db29yZDphLGNsb3Nlc3REYXR1bTpzLGNsb3Nlc3RCaW46bH0sdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoUXQpKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Yi1oaXN0b2dyYW0iXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoVWUoaEJlLDUpLFVlKG1CZSw1KSxVZShmQmUsNSksVWUoZ0JlLDUpLFVlKF9CZSw1KSksMiZlKXtsZXQgcjtiZShyPXZlKCkpJiYoaS5tYWluPXIuZmlyc3QpLGJlKHI9dmUoKSkmJihpLnhBeGlzPXIuZmlyc3QpLGJlKHI9dmUoKSkmJihpLnlBeGlzPXIuZmlyc3QpLGJlKHI9dmUoKSkmJihpLmNvbnRlbnQ9ci5maXJzdCksYmUocj12ZSgpKSYmKGkuaGlzdG9ncmFtcz1yLmZpcnN0KX19LGlucHV0czp7bW9kZToibW9kZSIsdGltZVByb3BlcnR5OiJ0aW1lUHJvcGVydHkiLGNvbG9yOiJjb2xvciIsZGF0YToiZGF0YSIsdGltZVNlbGVjdGlvbjoidGltZVNlbGVjdGlvbiJ9LG91dHB1dHM6e29uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQ6Im9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQiLG9uTGlua2VkVGltZVRvZ2dsZWQ6Im9uTGlua2VkVGltZVRvZ2dsZWQifSxmZWF0dXJlczpbcXRdLGRlY2xzOjIyLHZhcnM6MTUsY29uc3RzOltbImRldGVjdFJlc2l6ZSIsIiIsIm9ic2VydmVJbnRlcnNlY3Rpb24iLCIiLDMsIm9uUmVzaXplIiwib25WaXNpYmlsaXR5Q2hhbmdlIl0sWyJtYWluIiwiIl0sWzEsImF4aXMiLCJ4LWF4aXMiXSxbInhBeGlzIiwiIl0sWzEsInRvb2x0aXAiXSxbMywidHJhbnNmb3JtIiw0LCJuZ0lmIl0sWzEsImF4aXMiLCJ5LWF4aXMiXSxbInlBeGlzIiwiIl0sWzQsIm5nSWYiXSxbMSwiY29udGVudCJdLFsiY29udGVudCIsIiJdLFsxLCJncmlkIl0sWzMsInRyYW5zZm9ybSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJoaXN0b2dyYW1zIiwiIl0sWzMsInRyYW5zZm9ybSIsImhpc3RvZ3JhbSIsIm5vLWNvbG9yIiwiY29sb3IiLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiXSxbImNsYXNzIiwidG9vbHRpcCIsNCwibmdJZiJdLFsxLCJoaXN0b2dyYW0tY2FyZC1mb2IiLDMsInRpbWVTZWxlY3Rpb24iLCJzdGVwcyIsInRlbXBvcmFsU2NhbGUiLCJvblRpbWVTZWxlY3Rpb25DaGFuZ2VkIiwib25UaW1lU2VsZWN0aW9uVG9nZ2xlZCJdLFsieDIiLCIxMDAlIiwxLCJ0aWNrIl0sWzMsIm1vdXNlZW50ZXIiLCJtb3VzZWxlYXZlIiwiY2xpY2siXSxbImNsYXNzIiwiYmFzZWxpbmUiLCJ4MiIsIjEwMCUiLDQsIm5nSWYiXSxbInIiLCIyIiwzLCJ0cmFuc2Zvcm0iLDQsIm5nSWYiXSxbIngyIiwiMTAwJSIsMSwiYmFzZWxpbmUiXSxbInIiLCIyIl0sWyJyIiwiMiIsNCwibmdJZiJdLFsxLCJ2YWx1ZS1sYWJlbCJdLFsieCIsIjMiLCJ5IiwiLTMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihmKDAsImRpdiIsMCwxKSxBKCJvblJlc2l6ZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblJlc2l6ZSgpfSkoIm9uVmlzaWJpbGl0eUNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25WaXNpYmlsaXR5Q2hhbmdlKG8pfSkscW4oKSxmKDIsInN2ZyIsMiksaygzLCJnIixudWxsLDMpLGYoNSwiZyIsNCksUyg2LGJCZSwzLDMsImciLDUpLGcoKSgpLHVhKCksZig3LCJkaXYiLDYpLHFuKCksZig4LCJzdmciKSxrKDksImciLG51bGwsNyksZigxMSwiZyIsNCksUygxMix2QmUsMyw0LCJnIiw1KSxnKCkoKSxTKDEzLHlCZSwyLDMsIm5nLWNvbnRhaW5lciIsOCksZygpLGYoMTQsInN2ZyIsOSwxMCkoMTYsImciLDExKSxTKDE3LHhCZSwyLDIsImciLDEyKSxnKCksZigxOCwiZyIsbnVsbCwxMyksUygyMCx3QmUsNCwxMSwiZyIsMTQpLGcoKSxTKDIxLEVCZSw3LDcsImciLDE1KSxnKCkoKSksMiZlJiYoWG8oIm1haW4gIitpLm1vZGUrIiAiK2kudGltZVByb3BlcnR5KSx2KDYpLGIoIm5nSWYiLGkudG9vbHRpcERhdGEpLHYoNSksQnQoInRyYW5zZm9ybSIsaS5nZXRDc3NUcmFuc2xhdGVQeCg5LDApKSx2KDEpLGIoIm5nSWYiLGkudG9vbHRpcERhdGEpLHYoMSksYigibmdJZiIsaS5pc1RpbWVTZWxlY3Rpb25FbmFibGVkKGkudGltZVNlbGVjdGlvbikpLHYoNCksYigibmdGb3JPZiIsaS5nZXRHcmlkVGlja1lMb2NzKCkpLHYoMSksbnQoImhpc3RvZ3JhbXMiLCEwKSgibGlua2VkLXRpbWUtc2luZ2xlLXN0ZXAiLGkudGltZVNlbGVjdGlvbiYmIWkudGltZVNlbGVjdGlvbi5lbmQpLHYoMiksYigibmdGb3JPZiIsaS5kYXRhKSgibmdGb3JUcmFja0J5IixpLnRyYWNrQnlXYWxsVGltZSksdigxKSxiKCJuZ0lmIixpLnRvb2x0aXBEYXRhKSl9LHN0eWxlczpbJ1tfbmdob3N0LSVDT01QJV0sIC5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfVtfbmdob3N0LSVDT01QJV17Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MTBweH0ubWFpbltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtYXJlYXM6ImNvbnRlbnQgeS1heGlzIiAieC1heGlzIC4iO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgNTBweDtncmlkLXRlbXBsYXRlLXJvd3M6MWZyIDMwcHh9Lm1haW4ud2FsbF90aW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDc1cHh9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdLCAuYmFzZWxpbmVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiMwMDB9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuYmFzZWxpbmVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuYmFzZWxpbmVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZmZ9LmxpbmtlZC10aW1lLWZvYltfbmdjb250ZW50LSVDT01QJV0gICB0ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6Ym9sZDtmb250LXNpemU6MTBweH0ubGlua2VkLXRpbWUtZm9iW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRleHRbX25nY29udGVudC0lQ09NUCVdLCAubGlua2VkLXRpbWUtZm9iW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNpcmNsZVtfbmdjb250ZW50LSVDT01QJV0sIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRleHRbX25nY29udGVudC0lQ09NUCVdLCAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICBjaXJjbGVbX25nY29udGVudC0lQ09NUCVde2ZpbGw6Y3VycmVudENvbG9yfS5saW5rZWQtdGltZS1mb2JbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtkb21pbmFudC1iYXNlbGluZTppZGVvZ3JhcGhpYzt0ZXh0LWFuY2hvcjpzdGFydH0uYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAge2NvbG9yOiM2MTYxNjE7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVufWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAsIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICB7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LmF4aXNbX25nY29udGVudC0lQ09NUCVdICAgICAuZG9tYWluLCAuYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC50aWNrIHRleHR7ZGlzcGxheTpub25lfS5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLnRpY2s6bnRoLWNoaWxkKDJuKzEpIHRleHR7ZGlzcGxheTppbml0aWFsfXN2Z1tfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtwb2ludGVyLWV2ZW50czp2aXNpYmxlUGFpbnRlZH1zdmdbX25nY29udGVudC0lQ09NUCVdICAgbGluZVtfbmdjb250ZW50LSVDT01QJV0sIHN2Z1tfbmdjb250ZW50LSVDT01QJV0gICBjaXJjbGVbX25nY29udGVudC0lQ09NUCVdLCBzdmdbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmV9c3ZnW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGdbX25nY29udGVudC0lQ09NUCVde3dpbGwtY2hhbmdlOnRyYW5zZm9ybX0ueC1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6eC1heGlzfS54LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2RvbWluYW50LWJhc2VsaW5lOmhhbmdpbmc7dGV4dC1hbmNob3I6bWlkZGxlfS55LWF4aXNbX25nY29udGVudC0lQ09NUCVde2dyaWQtYXJlYTp5LWF4aXM7b3ZlcmZsb3c6Y2xpcCB2aXNpYmxlfS55LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2RvbWluYW50LWJhc2VsaW5lOm1pZGRsZTt0ZXh0LWFuY2hvcjpzdGFydH0uaGlzdG9ncmFtLWNhcmQtZm9iW19uZ2NvbnRlbnQtJUNPTVAlXXtsZWZ0OjlweDtwb3NpdGlvbjphYnNvbHV0ZX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAudGlja1tfbmdjb250ZW50LSVDT01QJV0sIC5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLnRpY2sgbGluZXtzdHJva2U6I2RkZH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAudGlja1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aWNrW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2U6IzU1NX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC50aWNrIGxpbmUsIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLnRpY2sgbGluZXtzdHJva2U6IzU1NX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOmNvbnRlbnQ7b3ZlcmZsb3c6dmlzaWJsZTt6LWluZGV4OjF9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLnRpY2tbX25nY29udGVudC0lQ09NUCVde3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWRhc2hhcnJheToyfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNpcmNsZVtfbmdjb250ZW50LSVDT01QJV0sIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBhdGhbX25nY29udGVudC0lQ09NUCVde2ZpbGw6Y3VycmVudENvbG9yO3N0cm9rZS1vcGFjaXR5Oi42O3N0cm9rZS13aWR0aDoxcHh9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmaWx0ZXI6ZHJvcC1zaGFkb3coMCAwIDFweCByZ2JhKDAsIDAsIDAsIDAuNikpO3N0cm9rZTojZmZmO3dpbGwtY2hhbmdlOnRyYW5zZm9ybX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuYmFzZWxpbmVbX25nY29udGVudC0lQ09NUCVde3N0cm9rZS1vcGFjaXR5Oi4xO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlOmN1cnJlbnRDb2xvcjt3aWR0aDoxMDAlfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBhdGhbX25nY29udGVudC0lQ09NUCVde3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlOmN1cnJlbnRDb2xvcjtmaWxsOnJnYmEoMCwwLDAsMCl9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLm5vLWNvbG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDIyMSwyMjEsMjIxLC40KSAhaW1wb3J0YW50fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uby1jb2xvcltfbmdjb250ZW50LSVDT01QJV0gICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2Utb3BhY2l0eTouMn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAubm8tY29sb3JbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAubm8tY29sb3JbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoNTEsNTEsNTEsLjQpICFpbXBvcnRhbnR9Lm9mZnNldFtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuaGlzdG9ncmFtc1tfbmdjb250ZW50LSVDT01QJV0gICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2U6I2ZmZn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub2Zmc2V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oaXN0b2dyYW1zW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBhdGhbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAub2Zmc2V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oaXN0b2dyYW1zW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBhdGhbX25nY29udGVudC0lQ09NUCVde3N0cm9rZTojNTU1fS5vZmZzZXRbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmhpc3RvZ3JhbXMubGlua2VkLXRpbWUtc2luZ2xlLXN0ZXBbX25nY29udGVudC0lQ09NUCVdICAgW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoLm5vLWNvbG9yKSAgIHBhdGhbX25nY29udGVudC0lQ09NUCVde3N0cm9rZTojMDAwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5vZmZzZXRbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmhpc3RvZ3JhbXMubGlua2VkLXRpbWUtc2luZ2xlLXN0ZXBbX25nY29udGVudC0lQ09NUCVdICAgW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoLm5vLWNvbG9yKSAgIHBhdGhbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAub2Zmc2V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oaXN0b2dyYW1zLmxpbmtlZC10aW1lLXNpbmdsZS1zdGVwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtfbmdjb250ZW50LSVDT01QJV06bm90KC5uby1jb2xvcikgICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2U6I2ZmZn0ub3ZlcmxheVtfbmdjb250ZW50LSVDT01QJV0gICAueC1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLnRpY2sgbGluZXtkaXNwbGF5Om5vbmV9Lm92ZXJsYXlbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgcGF0aFtfbmdjb250ZW50LSVDT01QJV17ZmlsbC1vcGFjaXR5OjA7c3Ryb2tlOmN1cnJlbnRDb2xvcn0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0sIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNpcmNsZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlciAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNpcmNsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlciAgIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrfSddLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gTVYobix0KXtyZXR1cm4gbi5yZWR1Y2UoKGUsaSk9Pk1hdGgubWF4KGUsdChpKSksLTEvMCl9ZnVuY3Rpb24gbW5lKG4sdCxlKXtlfHwoZT10KTtsZXQgaT0xLzAscj0tMS8wO2ZvcihsZXQgbyBvZiBuKWk9TWF0aC5taW4oaSx0KG8pKSxyPU1hdGgubWF4KHIsZShvKSk7cmV0dXJue21pbjppLG1heDpyfX1mdW5jdGlvbiAkeChuKXtyZXR1cm4gbi54Ky41Km4uZHh9ZnVuY3Rpb24gSUJlKG4sdCl7MSZuJiYoZigwLCJzcGFuIiwxNCksaygxLCJtYXQtc3Bpbm5lciIsMTUpLGcoKSl9ZnVuY3Rpb24gQUJlKG4sdCl7aWYoMSZuKXtsZXQgZT1UZSgpO2YoMCwidGItaGlzdG9ncmFtIiwxNiksQSgib25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZCIsZnVuY3Rpb24ocil7cmV0dXJuIG5lKGUpLGllKHcoKS5vbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkLmVtaXQocikpfSkoIm9uTGlua2VkVGltZVRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIG5lKGUpLGllKHcoKS5vbkxpbmtlZFRpbWVUb2dnbGVkLmVtaXQoKSl9KSxnKCl9aWYoMiZuKXtsZXQgZT13KCk7YigiZGF0YSIsZS5kYXRhKSgibW9kZSIsZS5tb2RlKSgidGltZVByb3BlcnR5IixlLnRpbWVQcm9wZXJ0eShlLnhBeGlzVHlwZSkpKCJjb2xvciIsZS5ydW5Db2xvclNjYWxlKGUucnVuSWQpKSgidGltZVNlbGVjdGlvbiIsZS5jb252ZXJ0VG9UaW1lU2VsZWN0aW9uKGUubGlua2VkVGltZVNlbGVjdGlvbikpfX1mdW5jdGlvbiBSQmUobix0KXsxJm4mJihmKDAsImRpdiIsMTgpLFQoMSwiIERhdGEgZmFpbGVkIHRvIGxvYWQuICIpLGcoKSl9ZnVuY3Rpb24gUEJlKG4sdCl7aWYoMSZuJiZTKDAsUkJlLDIsMCwiZGl2IiwxNyksMiZuKXtsZXQgZT13KCk7YigibmdJZiIsZS5sb2FkU3RhdGU9PT1lLkRhdGFMb2FkU3RhdGUuRkFJTEVEKX19dmFyIGtCZT1mdW5jdGlvbihuKXtyZXR1cm57YmFja2dyb3VuZENvbG9yOm59fSxmbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuRGF0YUxvYWRTdGF0ZT1SZSx0aGlzLm9uRnVsbFNpemVUb2dnbGU9bmV3IEYsdGhpcy5vblBpbkNsaWNrZWQ9bmV3IEYsdGhpcy5vbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkPW5ldyBGLHRoaXMub25MaW5rZWRUaW1lVG9nZ2xlZD1uZXcgRn10aW1lUHJvcGVydHkoZSl7c3dpdGNoKGUpe2Nhc2UgUGkuU1RFUDpyZXR1cm4gbm8uU1RFUDtjYXNlIFBpLldBTExfVElNRTpyZXR1cm4gbm8uV0FMTF9USU1FO2Nhc2UgUGkuUkVMQVRJVkU6cmV0dXJuIG5vLlJFTEFUSVZFO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHhBeGlzVHlwZSBmb3IgaGlzdG9ncmFtIHRpbWUgcHJvcGVydHkuIil9fWNvbnZlcnRUb1RpbWVTZWxlY3Rpb24oZSl7cmV0dXJuIG51bGw9PT1lP251bGw6e3N0YXJ0OntzdGVwOmUuc3RhcnRTdGVwfSxlbmQ6ZS5lbmRTdGVwP3tzdGVwOmUuZW5kU3RlcH06bnVsbH19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbImhpc3RvZ3JhbS1jYXJkLWNvbXBvbmVudCJdXSxpbnB1dHM6e2xvYWRTdGF0ZToibG9hZFN0YXRlIix0aXRsZToidGl0bGUiLHRhZzoidGFnIixydW5JZDoicnVuSWQiLGRhdGE6ImRhdGEiLG1vZGU6Im1vZGUiLHhBeGlzVHlwZToieEF4aXNUeXBlIixydW5Db2xvclNjYWxlOiJydW5Db2xvclNjYWxlIixzaG93RnVsbFdpZHRoOiJzaG93RnVsbFdpZHRoIixpc1Bpbm5lZDoiaXNQaW5uZWQiLGxpbmtlZFRpbWVTZWxlY3Rpb246ImxpbmtlZFRpbWVTZWxlY3Rpb24iLGlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZDoiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIn0sb3V0cHV0czp7b25GdWxsU2l6ZVRvZ2dsZToib25GdWxsU2l6ZVRvZ2dsZSIsb25QaW5DbGlja2VkOiJvblBpbkNsaWNrZWQiLG9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQ6Im9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQiLG9uTGlua2VkVGltZVRvZ2dsZWQ6Im9uTGlua2VkVGltZVRvZ2dsZWQifSxkZWNsczoxNix2YXJzOjE0LGNvbnN0czpmdW5jdGlvbigpe2xldCB0LGU7cmV0dXJuIHQ9JGxvY2FsaXplYDpBIGJ1dHRvbiB0byBwaW4gYSBjYXJkLuKQn2U2NjVkYzcxMmJkNWYxOGQ0ZGZhM2EyOWUxMjVkNTY1Y2M1MWUyZjbikJ83Mjg0NjA2NDI2MjM0Mzc1MzQ0OlBpbiBjYXJkYCxlPSRsb2NhbGl6ZWA6QSBidXR0b24gb24gYSBoaXN0b2dyYW0gY2FyZCB0aGF0IHRvZ2dsZXMgZnVsbCBzaXplIG1vZGUu4pCfZmM4Zjc2N2QwYjlmOTMwMTg3YTFiYWUzNDQ3N2FkMjg3MzZlY2UzM+KQnzkxNTcyMTU2MzYzODkyNjU5NzpUb2dnbGUgZnVsbCBzaXplIG1vZGVgLFtbMSwiaGVhZGluZyJdLFsxLCJ0YWciXSxbMywidGl0bGUiLCJ2YWx1ZSJdLFszLCJpc0NsaXBwZWQiLCJpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQiXSxbMSwicnVuIl0sWzEsImRvdCIsMywibmdTdHlsZSJdLFsxLCJydW4tdGV4dCIsMywicnVuSWQiXSxbMSwiY29udHJvbHMiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsMywiY2xpY2siXSxbMywic3ZnSWNvbiJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsZSwidGl0bGUiLCJUb2dnbGUgZnVsbCBzaXplIG1vZGUiLDMsImNsaWNrIl0sWyJjbGFzcyIsInNwaW5uZXIiLDQsIm5nSWYiXSxbMywiZGF0YSIsIm1vZGUiLCJ0aW1lUHJvcGVydHkiLCJjb2xvciIsInRpbWVTZWxlY3Rpb24iLCJvbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkIiwib25MaW5rZWRUaW1lVG9nZ2xlZCIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJub0RhdGEiLCIiXSxbMSwic3Bpbm5lciJdLFsiZGlhbWV0ZXIiLCIxOCJdLFszLCJkYXRhIiwibW9kZSIsInRpbWVQcm9wZXJ0eSIsImNvbG9yIiwidGltZVNlbGVjdGlvbiIsIm9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQiLCJvbkxpbmtlZFRpbWVUb2dnbGVkIl0sWyJjbGFzcyIsImVtcHR5LW1lc3NhZ2UiLDQsIm5nSWYiXSxbMSwiZW1wdHktbWVzc2FnZSJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihmKDAsImRpdiIsMCkoMSwiZGl2IiwxKSxrKDIsInRiLXRydW5jYXRlZC1wYXRoIiwyKSgzLCJ2aXMtbGlua2VkLXRpbWUtc2VsZWN0aW9uLXdhcm5pbmciLDMpLGcoKSxmKDQsImRpdiIsNCksayg1LCJzcGFuIiw1KSg2LCJjYXJkLXJ1bi1uYW1lIiw2KSxnKCksZig3LCJzcGFuIiw3KSg4LCJidXR0b24iLDgpLEEoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uUGluQ2xpY2tlZC5lbWl0KCFpLmlzUGlubmVkKX0pLGsoOSwibWF0LWljb24iLDkpLGcoKSxmKDEwLCJidXR0b24iLDEwKSxBKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkZ1bGxTaXplVG9nZ2xlLmVtaXQoKX0pLGsoMTEsIm1hdC1pY29uIiw5KSxnKCkoKSxTKDEyLElCZSwyLDAsInNwYW4iLDExKSxnKCksUygxMyxBQmUsMSw1LCJ0Yi1oaXN0b2dyYW0iLDEyKSxTKDE0LFBCZSwxLDEsIm5nLXRlbXBsYXRlIixudWxsLDEzLGp0KSksMiZlKXtsZXQgcj1zdCgxNSk7digyKSxiKCJ0aXRsZSIsaS50YWcpKCJ2YWx1ZSIsaS50aXRsZSksdigxKSxiKCJpc0NsaXBwZWQiLGkubGlua2VkVGltZVNlbGVjdGlvbiYmaS5saW5rZWRUaW1lU2VsZWN0aW9uLmNsaXBwZWQpKCJpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQiLGkuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkKSx2KDIpLGIoIm5nU3R5bGUiLFVuKDEyLGtCZSxpLnJ1bkNvbG9yU2NhbGUoaS5ydW5JZCkpKSx2KDEpLGIoInJ1bklkIixpLnJ1bklkKSx2KDIpLEJlKCJ0aXRsZSIsaS5pc1Bpbm5lZD8iVW5waW4gY2FyZCI6IlBpbiBjYXJkIiksdigxKSxiKCJzdmdJY29uIixpLmlzUGlubmVkPyJrZWVwXzI0cHgiOiJrZWVwX291dGxpbmVfMjRweCIpLHYoMiksYigic3ZnSWNvbiIsaS5zaG93RnVsbFdpZHRoPyJmdWxsc2NyZWVuX2V4aXRfMjRweCI6ImZ1bGxzY3JlZW5fMjRweCIpLHYoMSksYigibmdJZiIsaS5sb2FkU3RhdGU9PT1pLkRhdGFMb2FkU3RhdGUuTE9BRElORyksdigxKSxiKCJuZ0lmIixpLmRhdGEmJmkuZGF0YS5sZW5ndGgpKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W05lLE1mLGdBLEVyLGJuLE5jLFpULEpnLCRnXSxzdHlsZXM6WydbX25naG9zdC0lQ09NUCVde2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7ZmxleC1iYXNpczozMThweDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1ncm93OjE7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0bztwYWRkaW5nOjE2cHg7cGFkZGluZy10b3A6NHB4fS5oZWFkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtYXJlYXM6InRhZyBjb250cm9scyIgInJ1biBzcGlubmVyIjtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIGF1dG87Zm9udC1zaXplOjE0cHg7bWFyZ2luLWJvdHRvbTo0cHh9LnRhZ1tfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtnYXA6NXB4O2dyaWQtYXJlYTp0YWc7b3ZlcmZsb3c6aGlkZGVufS50YWdbX25nY29udGVudC0lQ09NUCVdICAgdmlzLXNlbGVjdGVkLXRpbWUtY2xpcHBlZFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MH0ucnVuW19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6cnVuO2Rpc3BsYXk6ZmxleDt3aGl0ZS1zcGFjZTpub3dyYXA7Zm9udC1zaXplOjEzcHh9LnJ1bltfbmdjb250ZW50LSVDT01QJV0gICAuZG90W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4Om5vbmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTNweDtoZWlnaHQ6MTNweDtib3JkZXItcmFkaXVzOjUwJTttYXJnaW4tcmlnaHQ6NHB4fS5ydW5bX25nY29udGVudC0lQ09NUCVdICAgLnJ1bi10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczttYXgtd2lkdGg6MTIwcHh9LmNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO3doaXRlLXNwYWNlOm5vd3JhcDtncmlkLWFyZWE6Y29udHJvbHM7anVzdGlmeS1zZWxmOmZsZXgtZW5kO2ZsZXgtc2hyaW5rOjA7bWFyZ2luLXJpZ2h0Oi0xMnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LnNwaW5uZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtncmlkLWFyZWE6c3Bpbm5lcjtoZWlnaHQ6MTAwJTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3Bvc2l0aW9uOnJlbGF0aXZlfW1hdC1zcGlubmVyW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MDtyaWdodDowO3Bvc2l0aW9uOmFic29sdXRlfXRiLWhpc3RvZ3JhbVtfbmdjb250ZW50LSVDT01QJV17ZmxleC1ncm93OjF9LmVtcHR5LW1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MWVtO2ZvbnQtc2l6ZToxM3B4fSddLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksZ25lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMucGluU3RhdGVDaGFuZ2VkPW5ldyBGLHRoaXMubW9kZSQ9dGhpcy5zdG9yZS5zZWxlY3QoYTEpLHRoaXMueEF4aXNUeXBlJD10aGlzLnN0b3JlLnNlbGVjdChPbCksdGhpcy5zaG93RnVsbFdpZHRoJD10aGlzLnN0b3JlLnNlbGVjdChKcykucGlwZShxKGk9PmlbdGhpcy5jYXJkSWRdPy5mdWxsV2lkdGgpKX1pc0hpc3RvZ3JhbUNhcmRNZXRhZGF0YShlKXtsZXR7cGx1Z2luOml9PWU7cmV0dXJuIGk9PT1Bbi5ISVNUT0dSQU1TfW9uRnVsbFNpemVUb2dnbGUoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHpnKHtjYXJkSWQ6dGhpcy5jYXJkSWR9KSl9bmdPbkluaXQoKXtsZXQgaT10aGlzLnN0b3JlLnNlbGVjdChLcyx0aGlzLmNhcmRJZCkucGlwZShPZShvPT4hIW8mJnRoaXMuaXNIaXN0b2dyYW1DYXJkTWV0YWRhdGEobykpLHEobz0+bykpLHI9SW4oW2ksdGhpcy5zdG9yZS5zZWxlY3Qod3UsdGhpcy5jYXJkSWQpXSk7dGhpcy5kYXRhJD1yLnBpcGUocSgoW28sYV0pPT57bGV0IHM9by5ydW5JZDtyZXR1cm4gYSYmYS5oYXNPd25Qcm9wZXJ0eShzKT9mdW5jdGlvbihuLHQ9MzApe2lmKCFuLmxlbmd0aHx8dDwxKXJldHVybltdO2xldCBlPWZ1bmN0aW9uKG4pe2xldCB0PW51bGwsZT1udWxsO2ZvcihsZXR7YmluczppfW9mIG4pe2lmKCFpLmxlbmd0aCljb250aW51ZTtsZXQgcj1pW2kubGVuZ3RoLTFdLG89aVswXS54LGE9ci54K3IuZHg7KG51bGw9PT10fHxvPHQpJiYodD1vKSwobnVsbD09PWV8fGE+ZSkmJihlPWEpfXJldHVybiBudWxsPT09dHx8bnVsbD09PWU/bnVsbDp7bGVmdDp0LHJpZ2h0OmV9fShuKTtyZXR1cm4gZSYmZS5sZWZ0PT09ZS5yaWdodCYmKGUucmlnaHQ9MS4xKmUucmlnaHQrMSxlLmxlZnQ9ZS5sZWZ0LzEuMS0xKSxuLm1hcChpPT4oe3N0ZXA6aS5zdGVwLHdhbGxUaW1lOmkud2FsbFRpbWUsYmluczplP2FCZShpLmJpbnMsZSx0KTpbXX0pKX0oYVtzXS5tYXAoZD0+e2xldHt3YWxsVGltZTp1LHN0ZXA6cH09ZDtyZXR1cm57d2FsbFRpbWU6dSxzdGVwOnAsYmluczpkLmJpbnMubWFwKG09Pih7eDptLm1pbixkeDptLm1heC1tLm1pbix5Om0uY291bnR9KSl9fSkpOltdfSkpLHRoaXMuc3RlcHMkPXRoaXMuZGF0YSQucGlwZShxKG89Pm8ubWFwKGE9PmEuc3RlcCkpKSx0aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24kPUluKFt0aGlzLnN0b3JlLnNlbGVjdChEdSksdGhpcy5zdGVwcyQsdGhpcy5zdG9yZS5zZWxlY3QoVHUpXSkucGlwZShxKChbbyxhLHNdKT0+e2lmKCFvKXJldHVybiBudWxsO2xldCBsPTEvMCxjPS0xLzA7Zm9yKGxldCBwIG9mIGEpbD1NYXRoLm1pbihwLGwpLGM9TWF0aC5tYXgocCxjKTtyZXR1cm4gZnVuY3Rpb24obix0KXtpZihudWxsIT09bi5lbmRTdGVwKXJldHVybiBuO2xldCBlPWZ1bmN0aW9uKG4sdCl7bGV0IGU9MS8wLGk9bnVsbDtmb3IobGV0IHIgb2YgdCl7bGV0IG89TWF0aC5hYnMobi1yKTtvPGUmJihlPW8saT1yKX1yZXR1cm4gaX0obi5zdGFydFN0ZXAsdCk7cmV0dXJuIG51bGwhPT1lP3suLi5uLHN0YXJ0U3RlcDplfTpufShZZihPRihvLHMpLGwsYyksYSl9KSksdGhpcy5pc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQkPUluKFt0aGlzLnN0b3JlLnNlbGVjdChEdSksdGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uJF0pLnBpcGUocSgoW28sYV0pPT5vJiZhJiYhYS5jbGlwcGVkJiZudWxsPT09by5lbmQmJm8uc3RhcnQuc3RlcCE9PWEuc3RhcnRTdGVwKSksdGhpcy5sb2FkU3RhdGUkPXRoaXMuc3RvcmUuc2VsZWN0KGdkLHRoaXMuY2FyZElkKSx0aGlzLnRhZyQ9aS5waXBlKHEobz0+by50YWcpKSx0aGlzLnRpdGxlJD10aGlzLnRhZyQucGlwZShxKG89PlpnKG8sdGhpcy5ncm91cE5hbWUpKSksdGhpcy5ydW5JZCQ9aS5waXBlKHEobz0+by5ydW5JZCkpLHRoaXMuaXNQaW5uZWQkPXRoaXMuc3RvcmUuc2VsZWN0KFN1LHRoaXMuY2FyZElkKX1vbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goSGgoZSkpfW9uTGlua2VkVGltZVRvZ2dsZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFRkKHthZmZvcmRhbmNlOlphLkZPQl9ERVNFTEVDVH0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhJZSkpfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbImhpc3RvZ3JhbS1jYXJkIl1dLGlucHV0czp7Y2FyZElkOiJjYXJkSWQiLGdyb3VwTmFtZToiZ3JvdXBOYW1lIixydW5Db2xvclNjYWxlOiJydW5Db2xvclNjYWxlIn0sb3V0cHV0czp7cGluU3RhdGVDaGFuZ2VkOiJwaW5TdGF0ZUNoYW5nZWQifSxkZWNsczoxMix2YXJzOjM0LGNvbnN0czpbWzMsImxvYWRTdGF0ZSIsInRpdGxlIiwidGFnIiwicnVuSWQiLCJkYXRhIiwibW9kZSIsInhBeGlzVHlwZSIsInJ1bkNvbG9yU2NhbGUiLCJzaG93RnVsbFdpZHRoIiwiaXNQaW5uZWQiLCJpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQiLCJsaW5rZWRUaW1lU2VsZWN0aW9uIiwib25GdWxsU2l6ZVRvZ2dsZSIsIm9uUGluQ2xpY2tlZCIsIm9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQiLCJvbkxpbmtlZFRpbWVUb2dnbGVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZigwLCJoaXN0b2dyYW0tY2FyZC1jb21wb25lbnQiLDApLEEoIm9uRnVsbFNpemVUb2dnbGUiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25GdWxsU2l6ZVRvZ2dsZSgpfSkoIm9uUGluQ2xpY2tlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkucGluU3RhdGVDaGFuZ2VkLmVtaXQobyl9KSgib25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZChvKX0pKCJvbkxpbmtlZFRpbWVUb2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBpLm9uTGlua2VkVGltZVRvZ2dsZWQoKX0pLFUoMSwiYXN5bmMiKSxVKDIsImFzeW5jIiksVSgzLCJhc3luYyIpLFUoNCwiYXN5bmMiKSxVKDUsImFzeW5jIiksVSg2LCJhc3luYyIpLFUoNywiYXN5bmMiKSxVKDgsImFzeW5jIiksVSg5LCJhc3luYyIpLFUoMTAsImFzeW5jIiksVSgxMSwiYXN5bmMiKSxnKCkpLDImZSYmYigibG9hZFN0YXRlIixHKDEsMTIsaS5sb2FkU3RhdGUkKSkoInRpdGxlIixHKDIsMTQsaS50aXRsZSQpKSgidGFnIixHKDMsMTYsaS50YWckKSkoInJ1bklkIixHKDQsMTgsaS5ydW5JZCQpKSgiZGF0YSIsRyg1LDIwLGkuZGF0YSQpKSgibW9kZSIsRyg2LDIyLGkubW9kZSQpKSgieEF4aXNUeXBlIixHKDcsMjQsaS54QXhpc1R5cGUkKSkoInJ1bkNvbG9yU2NhbGUiLGkucnVuQ29sb3JTY2FsZSkoInNob3dGdWxsV2lkdGgiLEcoOCwyNixpLnNob3dGdWxsV2lkdGgkKSkoImlzUGlubmVkIixHKDksMjgsaS5pc1Bpbm5lZCQpKSgiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIixHKDEwLDMwLGkuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkJCkpKCJsaW5rZWRUaW1lU2VsZWN0aW9uIixHKDExLDMyLGkubGlua2VkVGltZVNlbGVjdGlvbiQpKX0sZGVwZW5kZW5jaWVzOltmbmUsY3RdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBOQmUobix0KXtpZigxJm4pe2xldCBlPVRlKCk7ZigwLCJpbWFnZS1jYXJkIiw2KSxBKCJmdWxsV2lkdGhDaGFuZ2VkIixmdW5jdGlvbihyKXtyZXR1cm4gbmUoZSksaWUodygyKS5vbkZ1bGxXaWR0aENoYW5nZWQocikpfSkoInBpblN0YXRlQ2hhbmdlZCIsZnVuY3Rpb24oKXtyZXR1cm4gbmUoZSksaWUodygyKS5vblBpblN0YXRlQ2hhbmdlZCgpKX0pLGcoKX1pZigyJm4pe2xldCBlPXcoMik7YigiY2FyZElkIixlLmNhcmRJZCkoImdyb3VwTmFtZSIsZS5ncm91cE5hbWUpKCJydW5Db2xvclNjYWxlIixlLnJ1bkNvbG9yU2NhbGUpfX1mdW5jdGlvbiBMQmUobix0KXtpZigxJm4pe2xldCBlPVRlKCk7ZigwLCJzY2FsYXItY2FyZCIsNyksQSgicGluU3RhdGVDaGFuZ2VkIixmdW5jdGlvbigpe3JldHVybiBuZShlKSxpZSh3KDIpLm9uUGluU3RhdGVDaGFuZ2VkKCkpfSksZygpfWlmKDImbil7bGV0IGU9dygyKTtiKCJjYXJkSWQiLGUuY2FyZElkKSgiZ3JvdXBOYW1lIixlLmdyb3VwTmFtZSl9fWZ1bmN0aW9uIEJCZShuLHQpe2lmKDEmbil7bGV0IGU9VGUoKTtmKDAsImhpc3RvZ3JhbS1jYXJkIiw4KSxBKCJwaW5TdGF0ZUNoYW5nZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIG5lKGUpLGllKHcoMikub25QaW5TdGF0ZUNoYW5nZWQoKSl9KSxnKCl9aWYoMiZuKXtsZXQgZT13KDIpO2IoImNhcmRJZCIsZS5jYXJkSWQpKCJncm91cE5hbWUiLGUuZ3JvdXBOYW1lKSgicnVuQ29sb3JTY2FsZSIsZS5ydW5Db2xvclNjYWxlKX19ZnVuY3Rpb24gVkJlKG4sdCl7aWYoMSZuJiYoZigwLCJkaXYiKSxUKDEpLGcoKSksMiZuKXtsZXQgZT13KDIpO3YoMSksVmUoIlBsYWNlaG9sZGVyIGVycm9yIGZvcjogIixlLmNhcmRJZCwiIil9fWZ1bmN0aW9uIEhCZShuLHQpe2lmKDEmbiYmKEd0KDAsMSksUygxLE5CZSwxLDMsImltYWdlLWNhcmQiLDIpLFMoMixMQmUsMSwyLCJzY2FsYXItY2FyZCIsMyksUygzLEJCZSwxLDMsImhpc3RvZ3JhbS1jYXJkIiw0KSxTKDQsVkJlLDIsMSwiZGl2Iiw1KSxXdCgpKSwyJm4pe2xldCBlPXcoKTtiKCJuZ1N3aXRjaCIsZS5wbHVnaW5UeXBlKSx2KDEpLGIoIm5nU3dpdGNoQ2FzZSIsZS5QbHVnaW5UeXBlLklNQUdFUyksdigxKSxiKCJuZ1N3aXRjaENhc2UiLGUuUGx1Z2luVHlwZS5TQ0FMQVJTKSx2KDEpLGIoIm5nU3dpdGNoQ2FzZSIsZS5QbHVnaW5UeXBlLkhJU1RPR1JBTVMpfX12YXIgX25lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLlBsdWdpblR5cGU9QW4sdGhpcy5mdWxsV2lkdGhDaGFuZ2VkPW5ldyBGLHRoaXMuZnVsbEhlaWdodENoYW5nZWQ9bmV3IEYsdGhpcy5waW5TdGF0ZUNoYW5nZWQ9bmV3IEZ9b25GdWxsV2lkdGhDaGFuZ2VkKGUpe3RoaXMuZnVsbFdpZHRoQ2hhbmdlZC5lbWl0KGUpfW9uRnVsbEhlaWdodENoYW5nZWQoZSl7dGhpcy5mdWxsSGVpZ2h0Q2hhbmdlZC5lbWl0KGUpfW9uUGluU3RhdGVDaGFuZ2VkKCl7dGhpcy5waW5TdGF0ZUNoYW5nZWQuZW1pdCgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJjYXJkLXZpZXctY29tcG9uZW50Il1dLGlucHV0czp7aXNFdmVyVmlzaWJsZToiaXNFdmVyVmlzaWJsZSIsY2FyZElkOiJjYXJkSWQiLGdyb3VwTmFtZToiZ3JvdXBOYW1lIixwbHVnaW5UeXBlOiJwbHVnaW5UeXBlIixydW5Db2xvclNjYWxlOiJydW5Db2xvclNjYWxlIn0sb3V0cHV0czp7ZnVsbFdpZHRoQ2hhbmdlZDoiZnVsbFdpZHRoQ2hhbmdlZCIsZnVsbEhlaWdodENoYW5nZWQ6ImZ1bGxIZWlnaHRDaGFuZ2VkIixwaW5TdGF0ZUNoYW5nZWQ6InBpblN0YXRlQ2hhbmdlZCJ9LGRlY2xzOjEsdmFyczoxLGNvbnN0czpbWzMsIm5nU3dpdGNoIiw0LCJuZ0lmIl0sWzMsIm5nU3dpdGNoIl0sWzMsImNhcmRJZCIsImdyb3VwTmFtZSIsInJ1bkNvbG9yU2NhbGUiLCJmdWxsV2lkdGhDaGFuZ2VkIiwicGluU3RhdGVDaGFuZ2VkIiw0LCJuZ1N3aXRjaENhc2UiXSxbMywiY2FyZElkIiwiZ3JvdXBOYW1lIiwicGluU3RhdGVDaGFuZ2VkIiw0LCJuZ1N3aXRjaENhc2UiXSxbMywiY2FyZElkIiwiZ3JvdXBOYW1lIiwicnVuQ29sb3JTY2FsZSIsInBpblN0YXRlQ2hhbmdlZCIsNCwibmdTd2l0Y2hDYXNlIl0sWzQsIm5nU3dpdGNoRGVmYXVsdCJdLFszLCJjYXJkSWQiLCJncm91cE5hbWUiLCJydW5Db2xvclNjYWxlIiwiZnVsbFdpZHRoQ2hhbmdlZCIsInBpblN0YXRlQ2hhbmdlZCJdLFszLCJjYXJkSWQiLCJncm91cE5hbWUiLCJwaW5TdGF0ZUNoYW5nZWQiXSxbMywiY2FyZElkIiwiZ3JvdXBOYW1lIiwicnVuQ29sb3JTY2FsZSIsInBpblN0YXRlQ2hhbmdlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmUygwLEhCZSw1LDQsIm5nLWNvbnRhaW5lciIsMCksMiZlJiZiKCJuZ0lmIixpLmlzRXZlclZpc2libGUpfSxkZXBlbmRlbmNpZXM6W05lLG1yLGtyLGR1LFFRLHVuZSxnbmVdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGJuZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmlzRXZlclZpc2libGU9ITEsdGhpcy5mdWxsV2lkdGhDaGFuZ2VkPW5ldyBGLHRoaXMuZnVsbEhlaWdodENoYW5nZWQ9bmV3IEYsdGhpcy5ydW5Db2xvclNjYWxlJD10aGlzLnN0b3JlLnNlbGVjdChQdSkucGlwZShpYygzNTAsdm9pZCAwLHtsZWFkaW5nOiEwLHRyYWlsaW5nOiEwfSkscShpPT5yPT5pLmhhc093blByb3BlcnR5KHIpP2lbcl06IiNmZmYiKSl9b25WaXNpYmlsaXR5Q2hhbmdlKHt2aXNpYmxlOmV9KXt0aGlzLmlzRXZlclZpc2libGU9dGhpcy5pc0V2ZXJWaXNpYmxlfHxlfW9uRnVsbFdpZHRoQ2hhbmdlZChlKXt0aGlzLmZ1bGxXaWR0aENoYW5nZWQuZW1pdChlKX1vbkZ1bGxIZWlnaHRDaGFuZ2VkKGUpe3RoaXMuZnVsbEhlaWdodENoYW5nZWQuZW1pdChlKX1vblBpblN0YXRlQ2hhbmdlZCgpe3RoaXMuc3RvcmUuc2VsZWN0KFN1LHRoaXMuY2FyZElkKS5waXBlKEx0KDEpLEl0KHRoaXMuc3RvcmUuc2VsZWN0KGtXKSkpLnN1YnNjcmliZSgoW2UsaV0pPT57dGhpcy5zdG9yZS5kaXNwYXRjaChucCh7Y2FyZElkOnRoaXMuY2FyZElkLGNhbkNyZWF0ZU5ld1BpbnM6aSx3YXNQaW5uZWQ6ZX0pKX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEllKSl9LG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1siY2FyZC12aWV3Il1dLGlucHV0czp7Y2FyZElkOiJjYXJkSWQiLGdyb3VwTmFtZToiZ3JvdXBOYW1lIixwbHVnaW5UeXBlOiJwbHVnaW5UeXBlIn0sb3V0cHV0czp7ZnVsbFdpZHRoQ2hhbmdlZDoiZnVsbFdpZHRoQ2hhbmdlZCIsZnVsbEhlaWdodENoYW5nZWQ6ImZ1bGxIZWlnaHRDaGFuZ2VkIn0sZGVjbHM6Mix2YXJzOjcsY29uc3RzOltbIm9ic2VydmVJbnRlcnNlY3Rpb24iLCIiLCJpbnRlcnNlY3Rpb25PYnNlcnZlck1hcmdpbiIsIjIwMHB4IDIwMHB4IDIwMHB4IDIwMHB4IiwzLCJpc0V2ZXJWaXNpYmxlIiwiY2FyZElkIiwiZ3JvdXBOYW1lIiwicGx1Z2luVHlwZSIsInJ1bkNvbG9yU2NhbGUiLCJmdWxsV2lkdGhDaGFuZ2VkIiwiZnVsbEhlaWdodENoYW5nZWQiLCJwaW5TdGF0ZUNoYW5nZWQiLCJvblZpc2liaWxpdHlDaGFuZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihmKDAsImNhcmQtdmlldy1jb21wb25lbnQiLDApLEEoImZ1bGxXaWR0aENoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uRnVsbFdpZHRoQ2hhbmdlZChvKX0pKCJmdWxsSGVpZ2h0Q2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25GdWxsSGVpZ2h0Q2hhbmdlZChvKX0pKCJwaW5TdGF0ZUNoYW5nZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25QaW5TdGF0ZUNoYW5nZWQoKX0pKCJvblZpc2liaWxpdHlDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVmlzaWJpbGl0eUNoYW5nZShvKX0pLFUoMSwiYXN5bmMiKSxnKCkpLDImZSYmYigiaXNFdmVyVmlzaWJsZSIsaS5pc0V2ZXJWaXNpYmxlKSgiY2FyZElkIixpLmNhcmRJZCkoImdyb3VwTmFtZSIsaS5ncm91cE5hbWUpKCJwbHVnaW5UeXBlIixpLnBsdWdpblR5cGUpKCJydW5Db2xvclNjYWxlIixHKDEsNSxpLnJ1bkNvbG9yU2NhbGUkKSl9LGRlcGVuZGVuY2llczpbUWcsX25lLGN0XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gR0JlKG4sdCl7MSZuJiZoaSgwKX12YXIgV0JlPWZ1bmN0aW9uKG4sdCl7cmV0dXJueyJmdWxsLXdpZHRoIjpuLCJmdWxsLWhlaWdodCI6dH19O2Z1bmN0aW9uIHFCZShuLHQpe2lmKDEmbil7bGV0IGU9VGUoKTtmKDAsImRpdiIsNSkoMSwiY2FyZC12aWV3Iiw2KSxBKCJmdWxsV2lkdGhDaGFuZ2VkIixmdW5jdGlvbihyKXtsZXQgYT1uZShlKS4kaW1wbGljaXQ7cmV0dXJuIGllKHcoMikub25GdWxsV2lkdGhDaGFuZ2VkKGEuY2FyZElkLHIpKX0pKCJmdWxsSGVpZ2h0Q2hhbmdlZCIsZnVuY3Rpb24ocil7bGV0IGE9bmUoZSkuJGltcGxpY2l0O3JldHVybiBpZSh3KDIpLm9uRnVsbEhlaWdodENoYW5nZWQoYS5jYXJkSWQscikpfSksZygpKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXcoMik7YigibmdDbGFzcyIsU28oNixXQmUsaS5jYXJkc0F0RnVsbFdpZHRoLmhhcyhlLmNhcmRJZCl8fChudWxsPT1pLmNhcmRTdGF0ZU1hcFtlLmNhcmRJZF0/bnVsbDppLmNhcmRTdGF0ZU1hcFtlLmNhcmRJZF0uZnVsbFdpZHRoKSxpLmNhcmRzQXRGdWxsSGVpZ2h0LmhhcyhlLmNhcmRJZCl8fChudWxsPT1pLmNhcmRTdGF0ZU1hcFtlLmNhcmRJZF0/bnVsbDppLmNhcmRTdGF0ZU1hcFtlLmNhcmRJZF0udGFibGVFeHBhbmRlZCkpKSx2KDEpLGIoImNhcmRJZCIsZS5jYXJkSWQpKCJncm91cE5hbWUiLGkuZ3JvdXBOYW1lKSgicGx1Z2luVHlwZSIsZS5wbHVnaW4pKCJjYXJkT2JzZXJ2ZXIiLGkuY2FyZE9ic2VydmVyKSgiY2FyZExhenlMb2FkZXIiLGUuY2FyZElkKX19ZnVuY3Rpb24gWEJlKG4sdCl7MSZuJiZoaSgwKX12YXIgWUJlPWZ1bmN0aW9uKCl7cmV0dXJue2lzQm90dG9tQ29udHJvbDohMX19LFFCZT1mdW5jdGlvbigpe3JldHVybntpc0JvdHRvbUNvbnRyb2w6ITB9fTtmdW5jdGlvbiBaQmUobix0KXtpZigxJm4mJihmKDAsImRpdiIpLFMoMSxHQmUsMSwwLCJuZy1jb250YWluZXIiLDIpLGYoMiwiZGl2IiwzKSxTKDMscUJlLDIsOSwiZGl2Iiw0KSxnKCksUyg0LFhCZSwxLDAsIm5nLWNvbnRhaW5lciIsMiksZygpKSwyJm4pe2xldCBlPXcoKSxpPXN0KDIpO3YoMSksYigibmdUZW1wbGF0ZU91dGxldCIsaSkoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixtYyg4LFlCZSkpLHYoMSksQnQoImdyaWQtdGVtcGxhdGUtY29sdW1ucyIsZS5ncmlkVGVtcGxhdGVDb2x1bW4pLHYoMSksYigibmdGb3JPZiIsZS5jYXJkSWRzV2l0aE1ldGFkYXRhKSgibmdGb3JUcmFja0J5IixlLnRyYWNrQnlDYXJkcyksdigxKSxiKCJuZ1RlbXBsYXRlT3V0bGV0IixpKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLG1jKDksUUJlKSl9fWZ1bmN0aW9uIEtCZShuLHQpe2lmKDEmbil7bGV0IGU9VGUoKTtmKDAsImJ1dHRvbiIsMTIpLEEoImNsaWNrIixmdW5jdGlvbihyKXtuZShlKTtsZXQgbz13KDMpO3JldHVybiBpZShvLmhhbmRsZVBhZ2VDaGFuZ2Uoby5wYWdlSW5kZXgtMSxyLnRhcmdldCkpfSksVCgxLCIgUHJldmlvdXMgIiksZygpfTImbiYmYigiZGlzYWJsZWQiLDA9PT13KDMpLnBhZ2VJbmRleCl9ZnVuY3Rpb24gSkJlKG4sdCl7aWYoMSZuKXtsZXQgZT1UZSgpO2YoMCwic3BhbiIsMTUpKDEsImlucHV0IiwxNiksQSgiaW5wdXQiLGZ1bmN0aW9uKHIpe3JldHVybiBuZShlKSxpZSh3KDQpLm9uUGFnaW5hdGlvbklucHV0Q2hhbmdlKHIpKX0pKCJjaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiBuZShlKSxpZSh3KDQpLm9uUGFnaW5hdGlvbklucHV0Q2hhbmdlKHIpKX0pLGcoKSxUKDIpLGcoKX1pZigyJm4pe2xldCBlPXcoNCk7digxKSxiKCJ2YWx1ZSIsZS5wYWdlSW5kZXgrMSkoIm1heCIsZS5udW1QYWdlcyksdigxKSxWZSgiIG9mICIsZS5udW1QYWdlcywiIil9fWZ1bmN0aW9uICRCZShuLHQpe2lmKDEmbil7bGV0IGU9VGUoKTtmKDAsInNwYW4iKSxTKDEsSkJlLDMsMywic3BhbiIsMTMpLGYoMiwiYnV0dG9uIiwxNCksQSgiY2xpY2siLGZ1bmN0aW9uKHIpe25lKGUpO2xldCBvPXcoMyk7cmV0dXJuIGllKG8uaGFuZGxlUGFnZUNoYW5nZShvLnBhZ2VJbmRleCsxLHIudGFyZ2V0KSl9KSxUKDMsIiBOZXh0ICIpLGcoKSgpfWlmKDImbil7bGV0IGU9dygyKS5pc0JvdHRvbUNvbnRyb2wsaT13KCk7digxKSxiKCJuZ0lmIixpLnNob3dQYWdpbmF0aW9uSW5wdXQoZSkpLHYoMSksYigiZGlzYWJsZWQiLGkucGFnZUluZGV4KzE+PWkubnVtUGFnZXMpfX1mdW5jdGlvbiBlVmUobix0KXtpZigxJm4mJihmKDAsImRpdiIsOCkoMSwic3BhbiIsOSksUygyLEtCZSwyLDEsImJ1dHRvbiIsMTApLGcoKSxmKDMsInNwYW4iLDExKSxTKDQsJEJlLDQsMiwic3BhbiIsMCksZygpKCkpLDImbil7bGV0IGU9dygyKTt2KDIpLGIoIm5nSWYiLGUuc2hvd1BhZ2luYXRpb25Db250cm9scyksdigyKSxiKCJuZ0lmIixlLnNob3dQYWdpbmF0aW9uQ29udHJvbHMpfX1mdW5jdGlvbiB0VmUobix0KXsxJm4mJlMoMCxlVmUsNSwyLCJkaXYiLDcpLDImbiYmYigibmdJZiIsdygpLnNob3dQYWdpbmF0aW9uQ29udHJvbHMpfXZhciB2bmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmNka1Njcm9sbGFibGU9ZSx0aGlzLlBsdWdpblR5cGU9QW4sdGhpcy5ncmlkVGVtcGxhdGVDb2x1bW49IiIsdGhpcy5jYXJkc0F0RnVsbFdpZHRoPW5ldyBTZXQsdGhpcy5jYXJkc0F0RnVsbEhlaWdodD1uZXcgU2V0LHRoaXMucGFnZUluZGV4Q2hhbmdlZD1uZXcgRn1uZ09uSW5pdCgpe3RoaXMuaXNDYXJkV2lkdGhWYWxpZCh0aGlzLmNhcmRNaW5XaWR0aCkmJih0aGlzLmdyaWRUZW1wbGF0ZUNvbHVtbj1gcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KCR7dGhpcy5jYXJkTWluV2lkdGh9cHgsIDFmcikpYCl9bmdPbkNoYW5nZXMoZSl7aWYoZS5jYXJkTWluV2lkdGgpe2xldCBpPWUuY2FyZE1pbldpZHRoLmN1cnJlbnRWYWx1ZTt0aGlzLmlzQ2FyZFdpZHRoVmFsaWQoaSk/KHRoaXMuY2FyZE1pbldpZHRoPWksdGhpcy5ncmlkVGVtcGxhdGVDb2x1bW49YHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heCgke3RoaXMuY2FyZE1pbldpZHRofXB4LCAxZnIpKWApOnRoaXMuZ3JpZFRlbXBsYXRlQ29sdW1uPSIifX1pc0NhcmRXaWR0aFZhbGlkKGUpe3JldHVybiBlJiZlPj0zMzUmJmU8PTczNX1zaG93UGFnaW5hdGlvbklucHV0KGUpe3JldHVybiBlfWhhbmRsZVBhZ2VDaGFuZ2UoZSxpKXtsZXQgcj1pLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtzZXRUaW1lb3V0KCgpPT57dGhpcy5zY3JvbGxUb0tlZXBUYXJnZXRQb3NpdGlvbihpLHIpfSwwKSx0aGlzLnBhZ2VJbmRleENoYW5nZWQuZW1pdChlKX1zY3JvbGxUb0tlZXBUYXJnZXRQb3NpdGlvbihlLGkpe2xldCByPXRoaXMuY2RrU2Nyb2xsYWJsZT8uZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQ7ciYmci5zY3JvbGxUbygwLGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLWkrci5zY3JvbGxUb3ApfXRyYWNrQnlDYXJkcyhlLGkpe3JldHVybiBpLmNhcmRJZH1vblBhZ2luYXRpb25JbnB1dENoYW5nZShlKXtsZXQgaT1lLnRhcmdldDtpZigiaW5wdXQiPT09ZS50eXBlJiYiIj09PWkudmFsdWUpcmV0dXJuO2xldCByPU51bWJlcihpLnZhbHVlKS0xLG89TWF0aC5taW4oTWF0aC5tYXgoMCxyKSx0aGlzLm51bVBhZ2VzLTEpO2kudmFsdWUhPT1TdHJpbmcobysxKSYmKGkudmFsdWU9U3RyaW5nKG8rMSkpLHRoaXMuaGFuZGxlUGFnZUNoYW5nZShvLGkpfW9uRnVsbFdpZHRoQ2hhbmdlZChlLGkpe2k/dGhpcy5jYXJkc0F0RnVsbFdpZHRoLmFkZChlKTp0aGlzLmNhcmRzQXRGdWxsV2lkdGguZGVsZXRlKGUpfW9uRnVsbEhlaWdodENoYW5nZWQoZSxpKXtpP3RoaXMuY2FyZHNBdEZ1bGxIZWlnaHQuYWRkKGUpOnRoaXMuY2FyZHNBdEZ1bGxIZWlnaHQuZGVsZXRlKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKHhkLDgpKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWNhcmQtZ3JpZC1jb21wb25lbnQiXV0saW5wdXRzOntpc0dyb3VwRXhwYW5kZWQ6ImlzR3JvdXBFeHBhbmRlZCIscGFnZUluZGV4OiJwYWdlSW5kZXgiLG51bVBhZ2VzOiJudW1QYWdlcyIsY2FyZElkc1dpdGhNZXRhZGF0YToiY2FyZElkc1dpdGhNZXRhZGF0YSIsY2FyZE1pbldpZHRoOiJjYXJkTWluV2lkdGgiLGNhcmRPYnNlcnZlcjoiY2FyZE9ic2VydmVyIixzaG93UGFnaW5hdGlvbkNvbnRyb2xzOiJzaG93UGFnaW5hdGlvbkNvbnRyb2xzIixjYXJkU3RhdGVNYXA6ImNhcmRTdGF0ZU1hcCJ9LG91dHB1dHM6e3BhZ2VJbmRleENoYW5nZWQ6InBhZ2VJbmRleENoYW5nZWQifSxmZWF0dXJlczpbcXRdLGRlY2xzOjMsdmFyczoxLGNvbnN0czpmdW5jdGlvbigpe2xldCB0LGU7cmV0dXJuIHQ9JGxvY2FsaXplYDpBIGJ1dHRvbiB0aGF0IHNldHMgYSBncm91cCB0byB0aGUgcHJldmlvdXMgcGFnZS7ikJ81NzVlNzgyZmQyN2YyZWU3MGEwMzRhNzc1ZWZlOWFkMTYyNDcyMjUw4pCfMzYyOTk2MDU0NDg3NTM2MDA0NjpQcmV2aW91cyBwYWdlYCxlPSRsb2NhbGl6ZWA6QSBidXR0b24gdGhhdCBzZXRzIGEgZ3JvdXAgdG8gdGhlIG5leHQgcGFnZS7ikJ9jZTNjZWZiMWNkMDA5OWFhNTAwM2RkYTE2ZWM5ZWIyMWZkOGJhNzg54pCfMzMzNzMwMTY5NDIxMDI4NzU5NTpOZXh0IHBhZ2VgLFtbNCwibmdJZiJdLFsiZ3JvdXBDb250cm9scyIsIiJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldENvbnRleHQiXSxbMSwiY2FyZC1ncmlkIl0sWyJjbGFzcyIsImNhcmQtc3BhY2UiLDMsIm5nQ2xhc3MiLDQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsxLCJjYXJkLXNwYWNlIiwzLCJuZ0NsYXNzIl0sWzMsImNhcmRJZCIsImdyb3VwTmFtZSIsInBsdWdpblR5cGUiLCJjYXJkT2JzZXJ2ZXIiLCJjYXJkTGF6eUxvYWRlciIsImZ1bGxXaWR0aENoYW5nZWQiLCJmdWxsSGVpZ2h0Q2hhbmdlZCJdLFsiY2xhc3MiLCJncm91cC1jb250cm9scyIsNCwibmdJZiJdLFsxLCJncm91cC1jb250cm9scyJdLFsxLCJwcmV2LWNvbnRhaW5lciJdLFsiY2xhc3MiLCJwcmV2IHBhZ2luYXRpb24tYnV0dG9uIiwibWF0LWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsMywiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsxLCJpbnB1dC1hbmQtbmV4dC1jb250YWluZXIiXSxbIm1hdC1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LDEsInByZXYiLCJwYWdpbmF0aW9uLWJ1dHRvbiIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsiY2xhc3MiLCJwYWdpbmF0aW9uLWlucHV0Iiw0LCJuZ0lmIl0sWyJtYXQtYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsZSwxLCJuZXh0IiwicGFnaW5hdGlvbi1idXR0b24iLDMsImRpc2FibGVkIiwiY2xpY2siXSxbMSwicGFnaW5hdGlvbi1pbnB1dCJdLFsidHlwZSIsIm51bWJlciIsIm1pbiIsIjEiLDMsInZhbHVlIiwibWF4IiwiaW5wdXQiLCJjaGFuZ2UiXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoUygwLFpCZSw1LDEwLCJkaXYiLDApLFMoMSx0VmUsMSwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwxLGp0KSksMiZlJiZiKCJuZ0lmIixpLmlzR3JvdXBFeHBhbmRlZCl9LGRlcGVuZGVuY2llczpbYlEsYm5lLHduLG5uLE5lLGVvLGtpXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2NvbnRhaW46Y29udGVudH0uY2FyZC1ncmlkW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpbGwsIG1pbm1heCgzMzVweCwgMWZyKSk7Z2FwOjE2cHg7cGFkZGluZzoxNnB4fS5jYXJkLXNwYWNlLmZ1bGwtd2lkdGhbX25nY29udGVudC0lQ09NUCVde2dyaWQtY29sdW1uLXN0YXJ0OjE7Z3JpZC1jb2x1bW4tZW5kOi0xfS5jYXJkLXNwYWNlLmZ1bGwtaGVpZ2h0W19uZ2NvbnRlbnQtJUNPTVAlXXttaW4taGVpZ2h0OjQ4MHB4fS5jYXJkLXNwYWNlLmZ1bGwtaGVpZ2h0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNhcmQtdmlld1tfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCV9Y2FyZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICNlYmViZWI7Ym9yZGVyLXJhZGl1czo0cHg7Ym94LXNpemluZzpib3JkZXItYm94O2NvbnRhaW46bGF5b3V0IHBhaW50O2Rpc3BsYXk6YmxvY2s7bWluLWhlaWdodDozMjBweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICBjYXJkLXZpZXdbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBjYXJkLXZpZXdbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQgIzU1NX0uZ3JvdXAtY29udHJvbHNbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7ZGlzcGxheTpncmlkO2FsaWduLWl0ZW1zOmNlbnRlcjtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6MTZweDtwYWRkaW5nOjAgMTZweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtY29udHJvbHNbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtY29udHJvbHNbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5ncm91cC1jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV06Zmlyc3Qtb2YtdHlwZXtwYWRkaW5nLXRvcDoxNnB4fS5ncm91cC1jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV06bGFzdC1vZi10eXBle3BhZGRpbmctYm90dG9tOjE2cHh9LnByZXYtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtqdXN0aWZ5LXNlbGY6ZmxleC1zdGFydH0uaW5wdXQtYW5kLW5leHQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtqdXN0aWZ5LXNlbGY6ZmxleC1lbmR9LnBhZ2luYXRpb24taW5wdXRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi1yaWdodDoxNnB4fS5wYWdpbmF0aW9uLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMCk7Ym9yZGVyOjFweCBzb2xpZCBjdXJyZW50Q29sb3I7Y29sb3I6aW5oZXJpdDtmb250OmluaGVyaXR9LnBhZ2luYXRpb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnBhZ2luYXRpb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnBhZ2luYXRpb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCl9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxfXz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmdyb3VwTmFtZT1udWxsLHRoaXMuZ3JvdXBOYW1lJD1uZXcgeHIobnVsbCksdGhpcy5wYWdlSW5kZXgkPW5ldyB4cigwKSx0aGlzLml0ZW1zJD1uZXcgeHIoW10pLHRoaXMubmdVbnN1YnNjcmliZT1uZXcgRWUsdGhpcy5jYXJkU3RhdGVNYXAkPXRoaXMuc3RvcmUuc2VsZWN0KEpzKSx0aGlzLm51bVBhZ2VzJD1JbihbdGhpcy5pdGVtcyQsdGhpcy5zdG9yZS5zZWxlY3QoSGEuZ2V0UGFnZVNpemUpXSkucGlwZShxKChbaSxyXSk9Pk1hdGguY2VpbChpLmxlbmd0aC9yKSkpLHRoaXMuaXNHcm91cEV4cGFuZGVkJD10aGlzLmdyb3VwTmFtZSQucGlwZShKbihpPT5udWxsIT09aT90aGlzLnN0b3JlLnNlbGVjdCh1MSxpKTokdCghMCkpKSx0aGlzLnNob3dQYWdpbmF0aW9uQ29udHJvbHMkPXRoaXMubnVtUGFnZXMkLnBpcGUocShpPT5pPjEpKSx0aGlzLm5vcm1hbGl6ZWRQYWdlSW5kZXgkPUluKFt0aGlzLnBhZ2VJbmRleCQsdGhpcy5udW1QYWdlcyRdKS5waXBlKGl0KHRoaXMubmdVbnN1YnNjcmliZSksRHQoKFtpLHJdKT0+ezAhPT1yJiYoaT49cj90aGlzLnBhZ2VJbmRleCQubmV4dChyLTEpOmk8MCYmdGhpcy5wYWdlSW5kZXgkLm5leHQoMCkpfSkscSgoW2kscl0pPT5NYXRoLm1pbihNYXRoLm1heChpLDApLHItMSkpLERhKDEpKSx0aGlzLnBhZ2VkSXRlbXMkPUluKFt0aGlzLml0ZW1zJCx0aGlzLnN0b3JlLnNlbGVjdChIYS5nZXRQYWdlU2l6ZSksdGhpcy5ub3JtYWxpemVkUGFnZUluZGV4JCx0aGlzLmlzR3JvdXBFeHBhbmRlZCRdKS5waXBlKHEoKFtpLHIsbyxhXSk9Pmkuc2xpY2UocipvLHIqbysoYT9yOjApKSkpLHRoaXMuY2FyZE1pbldpZHRoJD10aGlzLnN0b3JlLnNlbGVjdChKZil9bmdPbkNoYW5nZXMoZSl7ZS5jYXJkSWRzV2l0aE1ldGFkYXRhJiZ0aGlzLml0ZW1zJC5uZXh0KHRoaXMuY2FyZElkc1dpdGhNZXRhZGF0YSksZS5ncm91cE5hbWUmJnRoaXMuZ3JvdXBOYW1lJC5uZXh0KHRoaXMuZ3JvdXBOYW1lKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9b25QYWdlSW5kZXhDaGFuZ2VkKGUpe3RoaXMucGFnZUluZGV4JC5uZXh0KGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEllKSl9LG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1jYXJkLWdyaWQiXV0saW5wdXRzOntncm91cE5hbWU6Imdyb3VwTmFtZSIsY2FyZElkc1dpdGhNZXRhZGF0YToiY2FyZElkc1dpdGhNZXRhZGF0YSIsY2FyZE9ic2VydmVyOiJjYXJkT2JzZXJ2ZXIifSxmZWF0dXJlczpbcXRdLGRlY2xzOjgsdmFyczoyMixjb25zdHM6W1szLCJpc0dyb3VwRXhwYW5kZWQiLCJwYWdlSW5kZXgiLCJudW1QYWdlcyIsInNob3dQYWdpbmF0aW9uQ29udHJvbHMiLCJjYXJkSWRzV2l0aE1ldGFkYXRhIiwiY2FyZE1pbldpZHRoIiwiY2FyZE9ic2VydmVyIiwiY2FyZFN0YXRlTWFwIiwicGFnZUluZGV4Q2hhbmdlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGYoMCwibWV0cmljcy1jYXJkLWdyaWQtY29tcG9uZW50IiwwKSxBKCJwYWdlSW5kZXhDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblBhZ2VJbmRleENoYW5nZWQobyl9KSxVKDEsImFzeW5jIiksVSgyLCJhc3luYyIpLFUoMywiYXN5bmMiKSxVKDQsImFzeW5jIiksVSg1LCJhc3luYyIpLFUoNiwiYXN5bmMiKSxVKDcsImFzeW5jIiksZygpKSwyJmUmJmIoImlzR3JvdXBFeHBhbmRlZCIsRygxLDgsaS5pc0dyb3VwRXhwYW5kZWQkKSkoInBhZ2VJbmRleCIsRygyLDEwLGkubm9ybWFsaXplZFBhZ2VJbmRleCQpKSgibnVtUGFnZXMiLEcoMywxMixpLm51bVBhZ2VzJCkpKCJzaG93UGFnaW5hdGlvbkNvbnRyb2xzIixHKDQsMTQsaS5zaG93UGFnaW5hdGlvbkNvbnRyb2xzJCkpKCJjYXJkSWRzV2l0aE1ldGFkYXRhIixHKDUsMTYsaS5wYWdlZEl0ZW1zJCkpKCJjYXJkTWluV2lkdGgiLEcoNiwxOCxpLmNhcmRNaW5XaWR0aCQpKSgiY2FyZE9ic2VydmVyIixpLmNhcmRPYnNlcnZlcikoImNhcmRTdGF0ZU1hcCIsRyg3LDIwLGkuY2FyZFN0YXRlTWFwJCkpfSxkZXBlbmRlbmNpZXM6W3ZuZSxjdF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gb1ZlKG4sdCl7aWYoMSZuJiYoZigwLCJzcGFuIiw3KSxUKDEpLFUoMiwibnVtYmVyIiksZygpKSwyJm4pe2xldCBlPXcoKTt2KDEpLFZlKCIiLEcoMiwxLGUubnVtYmVyT2ZDYXJkcyksIiBjYXJkcyIpfX1mdW5jdGlvbiBhVmUobix0KXsxJm4mJmsoMCwibWF0LWljb24iLDgpfWZ1bmN0aW9uIHNWZShuLHQpezEmbiYmaygwLCJtYXQtaWNvbiIsOSl9dmFyIHluZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5ncm91cEV4cGFuc2lvblRvZ2dsZWQ9bmV3IEZ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtY2FyZC1ncm91cC10b29sYmFyLWNvbXBvbmVudCJdXSxpbnB1dHM6e2dyb3VwTmFtZToiZ3JvdXBOYW1lIixudW1iZXJPZkNhcmRzOiJudW1iZXJPZkNhcmRzIixpc0dyb3VwRXhwYW5kZWQ6ImlzR3JvdXBFeHBhbmRlZCJ9LG91dHB1dHM6e2dyb3VwRXhwYW5zaW9uVG9nZ2xlZDoiZ3JvdXBFeHBhbnNpb25Ub2dnbGVkIn0sZGVjbHM6OSx2YXJzOjUsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIHQ9JGxvY2FsaXplYDpBIGJ1dHRvbiB0aGF0IGFsbG93cyB1c2VyIHRvIGV4cGFuZCBhIHRhZyBncm91cC7ikJ9mZmFhMTE0NzFiODc4YTZkZmZlMmU2OGM2ZjM3MDY0YTllMDc0ODUz4pCfNTM4NjA1NDMyNTI3NDc3OTI1ODpFeHBhbmQgZ3JvdXBgLFtbImFyaWEtbGFiZWwiLHQsMSwiZ3JvdXAtdG9vbGJhciIsMywiY2xpY2siXSxbMSwiZ3JvdXAtdGl0bGUtd3JhcHBlciJdLFsiYXJpYS1yb2xlIiwiaGVhZGluZyIsImFyaWEtbGV2ZWwiLCIzIiwxLCJncm91cC10aXRsZSIsMywidGl0bGUiXSxbImNsYXNzIiwiZ3JvdXAtY2FyZC1jb3VudCIsNCwibmdJZiJdLFsxLCJleHBhbmQtZ3JvdXAtaWNvbiJdLFsic3ZnSWNvbiIsImV4cGFuZF9sZXNzXzI0cHgiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsiZXhwYW5kTW9yZSIsIiJdLFsxLCJncm91cC1jYXJkLWNvdW50Il0sWyJzdmdJY29uIiwiZXhwYW5kX2xlc3NfMjRweCJdLFsic3ZnSWNvbiIsImV4cGFuZF9tb3JlXzI0cHgiXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoZigwLCJidXR0b24iLDApLEEoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLmdyb3VwRXhwYW5zaW9uVG9nZ2xlZC5lbWl0KCl9KSxmKDEsInNwYW4iLDEpKDIsInNwYW4iLDIpLFQoMyksZygpLFMoNCxvVmUsMywzLCJzcGFuIiwzKSxnKCksZig1LCJzcGFuIiw0KSxTKDYsYVZlLDEsMCwibWF0LWljb24iLDUpLFMoNyxzVmUsMSwwLCJuZy10ZW1wbGF0ZSIsbnVsbCw2LGp0KSxnKCkoKSksMiZlKXtsZXQgcj1zdCg4KTt2KDIpLFppKCJ0aXRsZSIsaS5ncm91cE5hbWUpLHYoMSksa3QoaS5ncm91cE5hbWUpLHYoMSksYigibmdJZiIsaS5udW1iZXJPZkNhcmRzPjEpLHYoMiksYigibmdJZiIsaS5pc0dyb3VwRXhwYW5kZWQpKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W05lLGJuLFVzXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7ZGlzcGxheTpmbGV4O2ZsZXg6bm9uZTtoZWlnaHQ6NDJweDttYXJnaW4tYm90dG9tOi0xcHg7cGFkZGluZzowIDE2cHg7cG9zaXRpb246c3RpY2t5O3RvcDowO3otaW5kZXg6MTtib3gtc2hhZG93OjBweCAycHggNHB4IDBweCByZ2JhKDAsMCwwLC4xNSl9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym94LXNoYWRvdzowcHggMnB4IDRweCAwcHggcmdiYSgyNTUsMjU1LDI1NSwuMTUpfVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Ym9yZGVyLXRvcDoxcHggc29saWQgI2ViZWJlYjtjb2xvcjojMjEyMTIxO3RvcDotMXB4O2Rpc3BsYXk6ZmxleDt3aWR0aDoxMDAlO2ZvbnQ6aW5oZXJpdH1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzU1NX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2ZmZn0uY2FyZC1ncm91cDpmaXJzdC1vZi10eXBlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOjB9W19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntjdXJzb3I6cG9pbnRlcn0uZXhwYW5kLWdyb3VwLWljb25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmV4cGFuZC1ncm91cC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmV4cGFuZC1ncm91cC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0uZXhwYW5kLWdyb3VwLWljb25bX25nY29udGVudC0lQ09NUCVdOmRpc2FibGVke2NvbG9yOiM3NTc1NzV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmV4cGFuZC1ncm91cC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXTpkaXNhYmxlZCwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmV4cGFuZC1ncm91cC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXTpkaXNhYmxlZHtjb2xvcjojNjE2MTYxfS5ncm91cC10aXRsZS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWdyb3c6MTt0ZXh0LWFsaWduOmxlZnR9Lmdyb3VwLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lmdyb3VwLWNhcmQtY291bnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojNjE2MTYxO21hcmdpbi1sZWZ0OjZweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtY2FyZC1jb3VudFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC1jYXJkLWNvdW50W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHhuZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmdyb3VwTmFtZT1udWxsLHRoaXMuaXNHcm91cEV4cGFuZGVkJD0kdCghMSl9bmdPbkluaXQoKXt0aGlzLmlzR3JvdXBFeHBhbmRlZCQ9bnVsbCE9PXRoaXMuZ3JvdXBOYW1lP3RoaXMuc3RvcmUuc2VsZWN0KHUxLHRoaXMuZ3JvdXBOYW1lKTokdCghMSl9b25Hcm91cEV4cGFuc2lvblRvZ2dsZWQoKXtpZihudWxsPT09dGhpcy5ncm91cE5hbWUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFyaWFudCBlcnJvcjogZXhwYW5zaW9uIGNhbm5vdCBiZSB0b2dnbGVkIHdoZW4gZ3JvdXBOYW1lIGlzIG51bGwiKTt0aGlzLnN0b3JlLmRpc3BhdGNoKE9UKHt0YWdHcm91cDp0aGlzLmdyb3VwTmFtZX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhJZSkpfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtY2FyZC1ncm91cC10b29sYmFyIl1dLGlucHV0czp7Z3JvdXBOYW1lOiJncm91cE5hbWUiLG51bWJlck9mQ2FyZHM6Im51bWJlck9mQ2FyZHMifSxkZWNsczoyLHZhcnM6NSxjb25zdHM6W1szLCJudW1iZXJPZkNhcmRzIiwiaXNHcm91cEV4cGFuZGVkIiwiZ3JvdXBOYW1lIiwiZ3JvdXBFeHBhbnNpb25Ub2dnbGVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZigwLCJtZXRyaWNzLWNhcmQtZ3JvdXAtdG9vbGJhci1jb21wb25lbnQiLDApLEEoImdyb3VwRXhwYW5zaW9uVG9nZ2xlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkdyb3VwRXhwYW5zaW9uVG9nZ2xlZCgpfSksVSgxLCJhc3luYyIpLGcoKSksMiZlJiZiKCJudW1iZXJPZkNhcmRzIixpLm51bWJlck9mQ2FyZHMpKCJpc0dyb3VwRXhwYW5kZWQiLEcoMSwzLGkuaXNHcm91cEV4cGFuZGVkJCkpKCJncm91cE5hbWUiLGkuZ3JvdXBOYW1lKX0sZGVwZW5kZW5jaWVzOlt5bmUsY3RdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIGRWZShuLHQpe2lmKDEmbiYmKGYoMCwiZGl2IiwxKSxrKDEsIm1ldHJpY3MtY2FyZC1ncm91cC10b29sYmFyIiwyKSgyLCJtZXRyaWNzLWNhcmQtZ3JpZCIsMyksZygpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dygpO3YoMSksYigibnVtYmVyT2ZDYXJkcyIsZS5pdGVtcy5sZW5ndGgpKCJncm91cE5hbWUiLGUuZ3JvdXBOYW1lKSx2KDEpLGIoImNhcmRJZHNXaXRoTWV0YWRhdGEiLGUuaXRlbXMpKCJjYXJkT2JzZXJ2ZXIiLGkuY2FyZE9ic2VydmVyKSgiZ3JvdXBOYW1lIixlLmdyb3VwTmFtZSl9fXZhciBDbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuUGx1Z2luVHlwZT1Bbn10cmFja0J5R3JvdXAoZSxpKXtyZXR1cm4gaS5ncm91cE5hbWV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtY2FyZC1ncm91cHMtY29tcG9uZW50Il1dLGlucHV0czp7Y2FyZEdyb3VwczoiY2FyZEdyb3VwcyIsY2FyZE9ic2VydmVyOiJjYXJkT2JzZXJ2ZXIifSxkZWNsczoxLHZhcnM6Mixjb25zdHM6W1siY2xhc3MiLCJjYXJkLWdyb3VwIiw0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiXSxbMSwiY2FyZC1ncm91cCJdLFszLCJudW1iZXJPZkNhcmRzIiwiZ3JvdXBOYW1lIl0sWzMsImNhcmRJZHNXaXRoTWV0YWRhdGEiLCJjYXJkT2JzZXJ2ZXIiLCJncm91cE5hbWUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJlMoMCxkVmUsMyw1LCJkaXYiLDApLDImZSYmYigibmdGb3JPZiIsaS5jYXJkR3JvdXBzKSgibmdGb3JUcmFja0J5IixpLnRyYWNrQnlHcm91cCl9LGRlcGVuZGVuY2llczpbbm4sX18seG5lXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7ZGlzcGxheTpmbGV4O2ZsZXg6bm9uZTtoZWlnaHQ6NDJweDttYXJnaW4tYm90dG9tOi0xcHg7cGFkZGluZzowIDE2cHg7cG9zaXRpb246c3RpY2t5O3RvcDowO3otaW5kZXg6MTtib3gtc2hhZG93OjBweCAycHggNHB4IDBweCByZ2JhKDAsMCwwLC4xNSl9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym94LXNoYWRvdzowcHggMnB4IDRweCAwcHggcmdiYSgyNTUsMjU1LDI1NSwuMTUpfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksTW5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuY2FyZEdyb3VwcyQ9dGhpcy5zdG9yZS5zZWxlY3QoamgpLnBpcGUoVmkodGhpcy5zdG9yZS5zZWxlY3QoU2MpKSxxKChbaSxyXSk9PnIuc2l6ZT9pLmZpbHRlcihvPT5yLmhhcyhvLnBsdWdpbikpOmkpLHEoaT0+SFQoaSkpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhJZSkpfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtY2FyZC1ncm91cHMiXV0saW5wdXRzOntjYXJkT2JzZXJ2ZXI6ImNhcmRPYnNlcnZlciJ9LGRlY2xzOjIsdmFyczo0LGNvbnN0czpbWzMsImNhcmRHcm91cHMiLCJjYXJkT2JzZXJ2ZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihrKDAsIm1ldHJpY3MtY2FyZC1ncm91cHMtY29tcG9uZW50IiwwKSxVKDEsImFzeW5jIikpLDImZSYmYigiY2FyZEdyb3VwcyIsRygxLDIsaS5jYXJkR3JvdXBzJCkpKCJjYXJkT2JzZXJ2ZXIiLGkuY2FyZE9ic2VydmVyKX0sZGVwZW5kZW5jaWVzOltDbmUsY3RdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIGhWZShuLHQpe2lmKDEmbiYmKGYoMCwic3BhbiIpLFQoMSksZygpKSwyJm4pe2xldCBlPXcoKTt2KDEpLFZlKCIgYW5kICIsZS5nZXRQbHVnaW5UeXBlRmlsdGVyU3RyaW5nKGUucGx1Z2luVHlwZXMpLCIgdmlzdWFsaXphdGlvbiBmaWx0ZXIiKX19dmFyIHduZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5QbHVnaW5UeXBlPUFuLHRoaXMubGlzdEZvcm1hdHRlcj1uZXcgSW50bC5MaXN0Rm9ybWF0KHZvaWQgMCx7c3R5bGU6ImxvbmciLHR5cGU6ImRpc2p1bmN0aW9uIn0pfWdldFBsdWdpblR5cGVGaWx0ZXJTdHJpbmcoZSl7bGV0IGk9Wy4uLmVdLm1hcChyPT57c3dpdGNoKHIpe2Nhc2UgQW4uU0NBTEFSUzpyZXR1cm4ic2NhbGFyIjtjYXNlIEFuLklNQUdFUzpyZXR1cm4iaW1hZ2UiO2Nhc2UgQW4uSElTVE9HUkFNUzpyZXR1cm4iaGlzdG9ncmFtIjtkZWZhdWx0OnRocm93IG5ldyBSYW5nZUVycm9yKGBQbGVhc2UgaW1wbGVtZW50IGh1bWFuIHJlYWRhYmxlIG5hbWUgZm9yIHBsdWdpbiB0eXBlOiAke3J9YCl9fSk7cmV0dXJuIHRoaXMubGlzdEZvcm1hdHRlci5mb3JtYXQoaSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtZW1wdHktdGFnLW1hdGNoLWNvbXBvbmVudCJdXSxpbnB1dHM6e3BsdWdpblR5cGVzOiJwbHVnaW5UeXBlcyIsdGFnRmlsdGVyUmVnZXg6InRhZ0ZpbHRlclJlZ2V4Iix0YWdDb3VudHM6InRhZ0NvdW50cyJ9LGRlY2xzOjYsdmFyczo1LGNvbnN0czpbWzQsIm5nSWYiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihUKDAsIk5vIG1hdGNoZXMgZm9yIHRhZyBmaWx0ZXIgIiksZigxLCJjb2RlIiksVCgyKSxnKCksUygzLGhWZSwyLDEsInNwYW4iLDApLFQoNCksVSg1LCJudW1iZXIiKSksMiZlJiYodigyKSxWZSgiLyIsaS50YWdGaWx0ZXJSZWdleCwiLyIpLHYoMSksYigibmdJZiIsaS5wbHVnaW5UeXBlcy5zaXplKSx2KDEpLFZlKCIgb3V0IG9mICIsRyg1LDMsaS50YWdDb3VudHMpLCIgdGFncy4iKSl9LGRlcGVuZGVuY2llczpbTmUsVXNdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFNuZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLnBsdWdpblR5cGVzJD10aGlzLnN0b3JlLnNlbGVjdChTYyksdGhpcy50YWdGaWx0ZXJSZWdleCQ9dGhpcy5zdG9yZS5zZWxlY3QoRmwpLHRoaXMudGFnQ291bnRzJD10aGlzLnN0b3JlLnNlbGVjdChqaCkucGlwZShxKGk9Pm5ldyBTZXQoaS5tYXAoKHt0YWc6cn0pPT5yKSkuc2l6ZSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEllKSl9LG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1lbXB0eS10YWctbWF0Y2giXV0sZGVjbHM6NCx2YXJzOjksY29uc3RzOltbMywicGx1Z2luVHlwZXMiLCJ0YWdGaWx0ZXJSZWdleCIsInRhZ0NvdW50cyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGsoMCwibWV0cmljcy1lbXB0eS10YWctbWF0Y2gtY29tcG9uZW50IiwwKSxVKDEsImFzeW5jIiksVSgyLCJhc3luYyIpLFUoMywiYXN5bmMiKSksMiZlJiZiKCJwbHVnaW5UeXBlcyIsRygxLDMsaS5wbHVnaW5UeXBlcyQpKSgidGFnRmlsdGVyUmVnZXgiLEcoMiw1LGkudGFnRmlsdGVyUmVnZXgkKSkoInRhZ0NvdW50cyIsRygzLDcsaS50YWdDb3VudHMkKSl9LGRlcGVuZGVuY2llczpbd25lLGN0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBnVmUobix0KXtpZigxJm4mJihmKDAsInNwYW4iLDYpLFQoMSksVSgyLCJudW1iZXIiKSxnKCkpLDImbil7bGV0IGU9dygpO3YoMSksVmUoIiIsRygyLDEsZS5jYXJkSWRzV2l0aE1ldGFkYXRhLmxlbmd0aCksIiBjYXJkcyIpfX1mdW5jdGlvbiBfVmUobix0KXsxJm4mJmsoMCwibWV0cmljcy1lbXB0eS10YWctbWF0Y2giLDcpfXZhciBFbmU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1maWx0ZXJlZC12aWV3LWNvbXBvbmVudCJdXSxpbnB1dHM6e2lzRW1wdHlNYXRjaDoiaXNFbXB0eU1hdGNoIixjYXJkT2JzZXJ2ZXI6ImNhcmRPYnNlcnZlciIsY2FyZElkc1dpdGhNZXRhZGF0YToiY2FyZElkc1dpdGhNZXRhZGF0YSJ9LGRlY2xzOjcsdmFyczo0LGNvbnN0czpbWzEsImdyb3VwLXRvb2xiYXIiXSxbMSwiZ3JvdXAtdGV4dCJdLFsiYXJpYS1yb2xlIiwiaGVhZGluZyIsImFyaWEtbGV2ZWwiLCIzIiwxLCJncm91cC10aXRsZSJdLFsiY2xhc3MiLCJncm91cC1jYXJkLWNvdW50Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsIndhcm4iLDQsIm5nSWYiXSxbMywiY2FyZElkc1dpdGhNZXRhZGF0YSIsImNhcmRPYnNlcnZlciJdLFsxLCJncm91cC1jYXJkLWNvdW50Il0sWzEsIndhcm4iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihmKDAsImRpdiIsMCkoMSwic3BhbiIsMSkoMiwic3BhbiIsMiksVCgzLCJUYWdzIG1hdGNoaW5nIGZpbHRlciIpLGcoKSxTKDQsZ1ZlLDMsMywic3BhbiIsMyksZygpKCksUyg1LF9WZSwxLDAsIm1ldHJpY3MtZW1wdHktdGFnLW1hdGNoIiw0KSxrKDYsIm1ldHJpY3MtY2FyZC1ncmlkIiw1KSksMiZlJiYodig0KSxiKCJuZ0lmIixpLmNhcmRJZHNXaXRoTWV0YWRhdGEubGVuZ3RoPjEpLHYoMSksYigibmdJZiIsaS5pc0VtcHR5TWF0Y2gpLHYoMSksYigiY2FyZElkc1dpdGhNZXRhZGF0YSIsaS5jYXJkSWRzV2l0aE1ldGFkYXRhKSgiY2FyZE9ic2VydmVyIixpLmNhcmRPYnNlcnZlcikpfSxkZXBlbmRlbmNpZXM6W05lLF9fLFNuZSxVc10sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjojZmZmO2Rpc3BsYXk6ZmxleDtmbGV4Om5vbmU7aGVpZ2h0OjQycHg7bWFyZ2luLWJvdHRvbTotMXB4O3BhZGRpbmc6MCAxNnB4O3Bvc2l0aW9uOnN0aWNreTt0b3A6MDt6LWluZGV4OjE7Ym94LXNoYWRvdzowcHggMnB4IDRweCAwcHggcmdiYSgwLDAsMCwuMTUpfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JveC1zaGFkb3c6MHB4IDJweCA0cHggMHB4IHJnYmEoMjU1LDI1NSwyNTUsLjE1KX0uZ3JvdXAtdGV4dFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmJhc2VsaW5lfS5ncm91cC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5ncm91cC1jYXJkLWNvdW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo0MDA7Y29sb3I6IzYxNjE2MTttYXJnaW4tbGVmdDo2cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLWNhcmQtY291bnRbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtY2FyZC1jb3VudFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9bWV0cmljcy1lbXB0eS10YWctbWF0Y2hbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7Zm9udC1zaXplOjEzcHg7Zm9udC1zdHlsZTppdGFsaWM7cGFkZGluZzoxNnB4O3RleHQtYWxpZ246Y2VudGVyO2Rpc3BsYXk6YmxvY2t9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgbWV0cmljcy1lbXB0eS10YWctbWF0Y2hbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBtZXRyaWNzLWVtcHR5LXRhZy1tYXRjaFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxUbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5jYXJkSWRzV2l0aE1ldGFkYXRhJD10aGlzLnN0b3JlLnNlbGVjdChqaCkucGlwZShWaSh0aGlzLnN0b3JlLnNlbGVjdChTYykpLHEoKFtpLHJdKT0+ci5zaXplP2kuZmlsdGVyKG89PnIuaGFzKG8ucGx1Z2luKSk6aSksVmkodGhpcy5zdG9yZS5zZWxlY3QoRmwpKSxDcigyMDApLHEoKFtpLHJdKT0+e3RyeXtyZXR1cm57Y2FyZExpc3Q6aSxyZWdleDpuZXcgUmVnRXhwKHIsImkiKX19Y2F0Y2h7cmV0dXJue2NhcmRMaXN0OmkscmVnZXg6bnVsbH19fSksT2UoKHtyZWdleDppfSk9Pm51bGwhPT1pKSxxKCh7Y2FyZExpc3Q6aSxyZWdleDpyfSk9PmkuZmlsdGVyKCh7dGFnOm99KT0+ci50ZXN0KG8pKSkscmkoKGkscik9PmkubGVuZ3RoPT09ci5sZW5ndGgmJmkuZXZlcnkoKG8sYSk9Pm8uY2FyZElkPT09clthXS5jYXJkSWQpKSxUYSgpLGtuKFtdKSksdGhpcy5pc0VtcHR5TWF0Y2gkPXRoaXMuY2FyZElkc1dpdGhNZXRhZGF0YSQucGlwZShWaSh0aGlzLnN0b3JlLnNlbGVjdChqaCkpLHEoKFtpLHJdKT0+Qm9vbGVhbihyLmxlbmd0aCkmJjA9PT1pLmxlbmd0aCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEllKSl9LG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1maWx0ZXJlZC12aWV3Il1dLGlucHV0czp7Y2FyZE9ic2VydmVyOiJjYXJkT2JzZXJ2ZXIifSxkZWNsczozLHZhcnM6Nyxjb25zdHM6W1szLCJpc0VtcHR5TWF0Y2giLCJjYXJkSWRzV2l0aE1ldGFkYXRhIiwiY2FyZE9ic2VydmVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaygwLCJtZXRyaWNzLWZpbHRlcmVkLXZpZXctY29tcG9uZW50IiwwKSxVKDEsImFzeW5jIiksVSgyLCJhc3luYyIpKSwyJmUmJmIoImlzRW1wdHlNYXRjaCIsRygxLDMsaS5pc0VtcHR5TWF0Y2gkKSkoImNhcmRJZHNXaXRoTWV0YWRhdGEiLEcoMiw1LGkuY2FyZElkc1dpdGhNZXRhZGF0YSQpKSgiY2FyZE9ic2VydmVyIixpLmNhcmRPYnNlcnZlcil9LGRlcGVuZGVuY2llczpbRW5lLGN0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiB4VmUobix0KXsxJm4mJmsoMCwibWF0LWljb24iLDcpfWZ1bmN0aW9uIENWZShuLHQpe2lmKDEmbiYmKGYoMCwibWF0LW9wdGlvbiIsOCksVCgxKSxnKCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQ7YigidmFsdWUiLGUpLEJlKCJ0aXRsZSIsZSksdigxKSxrdChlKX19ZnVuY3Rpb24gTVZlKG4sdCl7aWYoMSZuJiYoZigwLCJkaXYiLDkpKDEsImVtIiksVCgyKSxVKDMsIm51bWJlciIpLGcoKSgpKSwyJm4pe2xldCBlPXcoKTt2KDIpLFZlKCJhbmQgIixHKDMsMSxlLmNvbXBsZXRpb25zLmxlbmd0aC0yNSksIiBtb3JlIHRhZ3MgbWF0Y2hlZCIpfX12YXIgRG5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLm9uUmVnZXhGaWx0ZXJWYWx1ZUNoYW5nZT1uZXcgRn1vbkNvbXBsZXRpb25BY2NlcHRlZChlKXt0aGlzLm9uUmVnZXhGaWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KGZ1bmN0aW9uKG4pe3JldHVybiBuLnJlcGxhY2UoRWJlLCJcXCQmIil9KGUpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy10YWctZmlsdGVyLWNvbXBvbmVudCJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmbnQoInZhbGlkIixpLmlzUmVnZXhGaWx0ZXJWYWxpZCl9LGlucHV0czp7cmVnZXhGaWx0ZXJWYWx1ZToicmVnZXhGaWx0ZXJWYWx1ZSIsaXNSZWdleEZpbHRlclZhbGlkOiJpc1JlZ2V4RmlsdGVyVmFsaWQiLGNvbXBsZXRpb25zOiJjb21wbGV0aW9ucyJ9LG91dHB1dHM6e29uUmVnZXhGaWx0ZXJWYWx1ZUNoYW5nZToib25SZWdleEZpbHRlclZhbHVlQ2hhbmdlIn0sZGVjbHM6Nyx2YXJzOjUsY29uc3RzOltbMSwidGFnLWZpbHRlciJdLFsicGxhY2Vob2xkZXIiLCJGaWx0ZXIgdGFncyAocmVnZXgpIiwzLCJ2YWx1ZSIsIm1hdEF1dG9jb21wbGV0ZSIsImlucHV0Il0sWyJzdmdJY29uIiwiZXJyb3JfMjRweCIsImNsYXNzIiwiZXJyb3ItaWNvbiIsInRpdGxlIiwiSW52YWxpZCByZWdleCBmaWx0ZXIuIFRoZSByZXN1bHQgbWF5IGJlIHN0YWxlLiIsNCwibmdJZiJdLFsxLCJ0YWctb3B0aW9ucyIsMywib3B0aW9uU2VsZWN0ZWQiXSxbImZpbHRlck1hdGNoZXMiLCJtYXRBdXRvY29tcGxldGUiXSxbImNsYXNzIiwib3B0aW9uIiwzLCJ2YWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsImFuZC1tb3JlIiw0LCJuZ0lmIl0sWyJzdmdJY29uIiwiZXJyb3JfMjRweCIsInRpdGxlIiwiSW52YWxpZCByZWdleCBmaWx0ZXIuIFRoZSByZXN1bHQgbWF5IGJlIHN0YWxlLiIsMSwiZXJyb3ItaWNvbiJdLFsxLCJvcHRpb24iLDMsInZhbHVlIl0sWzEsImFuZC1tb3JlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoZigwLCJkaXYiLDApKDEsInRiLWZpbHRlci1pbnB1dCIsMSksQSgiaW5wdXQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uUmVnZXhGaWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KG8udGFyZ2V0LnZhbHVlKX0pLGcoKSxTKDIseFZlLDEsMCwibWF0LWljb24iLDIpLGcoKSxmKDMsIm1hdC1hdXRvY29tcGxldGUiLDMsNCksQSgib3B0aW9uU2VsZWN0ZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uQ29tcGxldGlvbkFjY2VwdGVkKG8ub3B0aW9uLnZhbHVlKX0pLFMoNSxDVmUsMiwzLCJtYXQtb3B0aW9uIiw1KSxTKDYsTVZlLDQsMywiZGl2Iiw2KSxnKCkpLDImZSl7bGV0IHI9c3QoNCk7digxKSxiKCJ2YWx1ZSIsaS5yZWdleEZpbHRlclZhbHVlKSgibWF0QXV0b2NvbXBsZXRlIixyKSx2KDEpLGIoIm5nSWYiLCFpLmlzUmVnZXhGaWx0ZXJWYWxpZCksdigzKSxiKCJuZ0Zvck9mIixudWxsPT1pLmNvbXBsZXRpb25zP251bGw6aS5jb21wbGV0aW9ucy5zbGljZSgwLDI1KSksdigxKSxiKCJuZ0lmIiwobnVsbD09aS5jb21wbGV0aW9ucz9udWxsOmkuY29tcGxldGlvbnMubGVuZ3RoKT4yNSl9fSxkZXBlbmRlbmNpZXM6W25uLE5lLGdfLEp0ZSxqYSxibixVc10sc3R5bGVzOlsiLnRhZy1maWx0ZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjpyZWxhdGl2ZX10Yi1maWx0ZXItaW5wdXRbX25nY29udGVudC0lQ09NUCVde2ZsZXgtZ3JvdzoxfVtfbmdob3N0LSVDT01QJV17Y29sb3I6IzIxMjEyMX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV17Y29sb3I6I2ZmZn1bX25naG9zdC0lQ09NUCVdOm5vdCgudmFsaWQpe2NvbG9yOiNjNjI4Mjh9W19uZ2hvc3QtJUNPTVAlXTpub3QoLnZhbGlkKSAgIC5lcnJvci1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojYzYyODI4O3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjB9ICAudGFnLW9wdGlvbnMgLm9wdGlvbiwgICAudGFnLW9wdGlvbnMgLmFuZC1tb3Jley13ZWJraXQtYm94LW9yaWVudDp2ZXJ0aWNhbDstd2Via2l0LWxpbmUtY2xhbXA6MztkaXNwbGF5Oi13ZWJraXQtYm94O2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjEuNDtwYWRkaW5nOjhweCAxNnB4fSAgLnRhZy1vcHRpb25zIC5hbmQtbW9yZXtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgICAgLnRhZy1vcHRpb25zIC5hbmQtbW9yZSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgICAudGFnLW9wdGlvbnMgLmFuZC1tb3Jle2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksSW5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMudGFnRmlsdGVyJD10aGlzLnN0b3JlLnNlbGVjdChGbCksdGhpcy5pc1RhZ0ZpbHRlclJlZ2V4VmFsaWQkPXRoaXMudGFnRmlsdGVyJC5waXBlKHEoaT0+e3RyeXtyZXR1cm4gbmV3IFJlZ0V4cChpKSwhMH1jYXRjaHtyZXR1cm4hMX19KSksdGhpcy5jb21wbGV0aW9ucyQ9dGhpcy5zdG9yZS5zZWxlY3QobzEpLnBpcGUoVmkodGhpcy5zdG9yZS5zZWxlY3QoU2MpKSxxKChbaSxyXSk9PmkuZmlsdGVyKCh7cGx1Z2luOm99KT0+IXIuc2l6ZXx8ci5oYXMobykpLm1hcCgoe3RhZzpvfSk9Pm8pKSxxKGk9PlsuLi5uZXcgU2V0KGkpXSkscShpPT5pLnNvcnQodnkpKSxWaSh0aGlzLnN0b3JlLnNlbGVjdChGbCkpLHEoKFtpLHJdKT0+e3RyeXtyZXR1cm5baSxuZXcgUmVnRXhwKHIsImkiKV19Y2F0Y2h7cmV0dXJuW2ksbnVsbF19fSksT2UoKFssaV0pPT5udWxsIT09aSkscSgoW2kscl0pPT5pLmZpbHRlcihvPT5yLnRlc3QobykpKSl9b25UYWdGaWx0ZXJDaGFuZ2UoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChrVCh7dGFnRmlsdGVyOmV9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoSWUpKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLXRhZy1maWx0ZXIiXV0sZGVjbHM6NCx2YXJzOjksY29uc3RzOltbMywicmVnZXhGaWx0ZXJWYWx1ZSIsImlzUmVnZXhGaWx0ZXJWYWxpZCIsImNvbXBsZXRpb25zIiwib25SZWdleEZpbHRlclZhbHVlQ2hhbmdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZigwLCJtZXRyaWNzLXRhZy1maWx0ZXItY29tcG9uZW50IiwwKSxBKCJvblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVGFnRmlsdGVyQ2hhbmdlKG8pfSksVSgxLCJhc3luYyIpLFUoMiwiYXN5bmMiKSxVKDMsImFzeW5jIiksZygpKSwyJmUmJmIoInJlZ2V4RmlsdGVyVmFsdWUiLEcoMSwzLGkudGFnRmlsdGVyJCkpKCJpc1JlZ2V4RmlsdGVyVmFsaWQiLEcoMiw1LGkuaXNUYWdGaWx0ZXJSZWdleFZhbGlkJCkpKCJjb21wbGV0aW9ucyIsRygzLDcsaS5jb21wbGV0aW9ucyQpKX0sZGVwZW5kZW5jaWVzOltEbmUsY3RdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIEVWZShuLHQpe2lmKDEmbiYmKGYoMCwic3BhbiIsMTApLFQoMSksZygpKSwyJm4pe2xldCBlPXcoKTt2KDEpLFZlKCIiLGUuY2FyZElkc1dpdGhNZXRhZGF0YS5sZW5ndGgsIiBjYXJkcyIpfX1mdW5jdGlvbiBUVmUobix0KXsxJm4mJihmKDAsInNwYW4iLDEyKSxUKDEsIk5ldyBjYXJkIHBpbm5lZCIpLGcoKSksMiZuJiZCZSgiZGF0YS1pZCIsdC4kaW1wbGljaXQpfXZhciBEVmU9ZnVuY3Rpb24obil7cmV0dXJuW25dfTtmdW5jdGlvbiBJVmUobix0KXtpZigxJm4mJihmKDAsInNwYW4iKSxTKDEsVFZlLDIsMSwic3BhbiIsMTEpLGcoKSksMiZuKXtsZXQgZT13KCk7digxKSxiKCJuZ0Zvck9mIixVbigxLERWZSxlLmxhc3RQaW5uZWRDYXJkVGltZSkpfX1mdW5jdGlvbiBBVmUobix0KXtpZigxJm4pe2xldCBlPVRlKCk7ZigwLCJkaXYiLDEzKSgxLCJidXR0b24iLDE0KSxBKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gbmUoZSksaWUodygpLm9uQ2xlYXJBbGxQaW5zQ2xpY2tlZC5lbWl0KCkpfSksVCgyLCIgQ2xlYXIgYWxsIHBpbnMgIiksZygpKCl9fWZ1bmN0aW9uIFJWZShuLHQpe2lmKDEmbiYmaygwLCJtZXRyaWNzLWNhcmQtZ3JpZCIsMTUpLDImbil7bGV0IGU9dygpO2IoImNhcmRJZHNXaXRoTWV0YWRhdGEiLGUuY2FyZElkc1dpdGhNZXRhZGF0YSkoImNhcmRPYnNlcnZlciIsZS5jYXJkT2JzZXJ2ZXIpfX1mdW5jdGlvbiBQVmUobix0KXsxJm4mJihmKDAsImRpdiIsMTYpLFQoMSwiUGluIGNhcmRzIGZvciBhIHF1aWNrIHZpZXcgYW5kIGNvbXBhcmlzb24iKSxnKCkpfXZhciBBbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuZ2xvYmFsUGluc0VuYWJsZWQ9ITEsdGhpcy5vbkNsZWFyQWxsUGluc0NsaWNrZWQ9bmV3IEZ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtcGlubmVkLXZpZXctY29tcG9uZW50Il1dLGlucHV0czp7Y2FyZE9ic2VydmVyOiJjYXJkT2JzZXJ2ZXIiLGNhcmRJZHNXaXRoTWV0YWRhdGE6ImNhcmRJZHNXaXRoTWV0YWRhdGEiLGxhc3RQaW5uZWRDYXJkVGltZToibGFzdFBpbm5lZENhcmRUaW1lIixnbG9iYWxQaW5zRW5hYmxlZDoiZ2xvYmFsUGluc0VuYWJsZWQifSxvdXRwdXRzOntvbkNsZWFyQWxsUGluc0NsaWNrZWQ6Im9uQ2xlYXJBbGxQaW5zQ2xpY2tlZCJ9LGRlY2xzOjEyLHZhcnM6NSxjb25zdHM6W1sxLCJncm91cC10b29sYmFyIl0sWzEsImxlZnQtaXRlbXMiXSxbInN2Z0ljb24iLCJrZWVwXzI0cHgiXSxbMSwiZ3JvdXAtdGV4dCJdLFsiYXJpYS1yb2xlIiwiaGVhZGluZyIsImFyaWEtbGV2ZWwiLCIzIiwxLCJncm91cC10aXRsZSJdLFsiY2xhc3MiLCJncm91cC1jYXJkLWNvdW50Iiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbImNsYXNzIiwicmlnaHQtaXRlbXMiLDQsIm5nSWYiXSxbMywiY2FyZElkc1dpdGhNZXRhZGF0YSIsImNhcmRPYnNlcnZlciIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJlbXB0eVBpbm5lZFZpZXciLCIiXSxbMSwiZ3JvdXAtY2FyZC1jb3VudCJdLFsiY2xhc3MiLCJuZXctY2FyZC1waW5uZWQiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJuZXctY2FyZC1waW5uZWQiXSxbMSwicmlnaHQtaXRlbXMiXSxbIm1hdC1zdHJva2VkLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLCJDbGVhciBhbGwgcGlubmVkIGNhcmRzIiwzLCJjbGljayJdLFszLCJjYXJkSWRzV2l0aE1ldGFkYXRhIiwiY2FyZE9ic2VydmVyIl0sWzEsImVtcHR5LW1lc3NhZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihmKDAsImRpdiIsMCkoMSwiZGl2IiwxKSxrKDIsIm1hdC1pY29uIiwyKSxmKDMsInNwYW4iLDMpKDQsInNwYW4iLDQpLFQoNSwiUGlubmVkIiksZygpLFMoNixFVmUsMiwxLCJzcGFuIiw1KSxTKDcsSVZlLDIsMywic3BhbiIsNiksZygpKCksUyg4LEFWZSwzLDAsImRpdiIsNyksZygpLFMoOSxSVmUsMSwyLCJtZXRyaWNzLWNhcmQtZ3JpZCIsOCksUygxMCxQVmUsMiwwLCJuZy10ZW1wbGF0ZSIsbnVsbCw5LGp0KSksMiZlKXtsZXQgcj1zdCgxMSk7dig2KSxiKCJuZ0lmIixpLmNhcmRJZHNXaXRoTWV0YWRhdGEubGVuZ3RoPjEpLHYoMSksYigibmdJZiIsaS5sYXN0UGlubmVkQ2FyZFRpbWUpLHYoMSksYigibmdJZiIsaS5jYXJkSWRzV2l0aE1ldGFkYXRhLmxlbmd0aD4wJiZpLmdsb2JhbFBpbnNFbmFibGVkKSx2KDEpLGIoIm5nSWYiLGkuY2FyZElkc1dpdGhNZXRhZGF0YS5sZW5ndGgpKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W25uLE5lLGtpLGJuLF9fXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7ZGlzcGxheTpmbGV4O2ZsZXg6bm9uZTtoZWlnaHQ6NDJweDttYXJnaW4tYm90dG9tOi0xcHg7cGFkZGluZzowIDE2cHg7cG9zaXRpb246c3RpY2t5O3RvcDowO3otaW5kZXg6MTtib3gtc2hhZG93OjBweCAycHggNHB4IDBweCByZ2JhKDAsMCwwLC4xNSl9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym94LXNoYWRvdzowcHggMnB4IDRweCAwcHggcmdiYSgyNTUsMjU1LDI1NSwuMTUpfW1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO2ZsZXg6bm9uZTttYXJnaW4tcmlnaHQ6NXB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIG1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0ubGVmdC1pdGVtc1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0ucmlnaHQtaXRlbXNbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDpub3JtYWw7aGVpZ2h0OjI1cHg7bGluZS1oZWlnaHQ6MjVweH0uZ3JvdXAtdGV4dFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmJhc2VsaW5lO2dhcDo2cHh9Lmdyb3VwLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lmdyb3VwLWNhcmQtY291bnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC1jYXJkLWNvdW50W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLWNhcmQtY291bnRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5lbXB0eS1tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtc3R5bGU6aXRhbGljO3BhZGRpbmc6MTZweDt0ZXh0LWFsaWduOmNlbnRlcn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZW1wdHktbWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5lbXB0eS1tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0ubmV3LWNhcmQtcGlubmVkW19uZ2NvbnRlbnQtJUNPTVAlXXthbmltYXRpb246X25nY29udGVudC0lQ09NUCVfcGlubmVkLXZpZXctZmFkZS1vdXQgM3MgbGluZWFyO2JhY2tncm91bmQ6I2Y0NDMzNjtib3JkZXItcmFkaXVzOjVweDtjb2xvcjojZmZmO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZToxM3B4O29wYWNpdHk6MDtwYWRkaW5nOjNweCA1cHh9QGtleWZyYW1lcyBfbmdjb250ZW50LSVDT01QJV9waW5uZWQtdmlldy1mYWRlLW91dHtmcm9te29wYWNpdHk6MX02NiV7b3BhY2l0eTouOTl9dG97b3BhY2l0eTowfX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFJuZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmNhcmRJZHNXaXRoTWV0YWRhdGEkPXRoaXMuc3RvcmUuc2VsZWN0KEtmKS5waXBlKGtuKFtdKSksdGhpcy5sYXN0UGlubmVkQ2FyZFRpbWUkPXRoaXMuc3RvcmUuc2VsZWN0KE9XKS5waXBlKG9zKDEpKSx0aGlzLmdsb2JhbFBpbnNFbmFibGVkJD10aGlzLnN0b3JlLnNlbGVjdChwZCl9b25DbGVhckFsbFBpbnNDbGlja2VkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChXZygpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhJZSkpfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtcGlubmVkLXZpZXciXV0saW5wdXRzOntjYXJkT2JzZXJ2ZXI6ImNhcmRPYnNlcnZlciJ9LGRlY2xzOjQsdmFyczoxMCxjb25zdHM6W1szLCJjYXJkSWRzV2l0aE1ldGFkYXRhIiwibGFzdFBpbm5lZENhcmRUaW1lIiwiY2FyZE9ic2VydmVyIiwiZ2xvYmFsUGluc0VuYWJsZWQiLCJvbkNsZWFyQWxsUGluc0NsaWNrZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihmKDAsIm1ldHJpY3MtcGlubmVkLXZpZXctY29tcG9uZW50IiwwKSxBKCJvbkNsZWFyQWxsUGluc0NsaWNrZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25DbGVhckFsbFBpbnNDbGlja2VkKCl9KSxVKDEsImFzeW5jIiksVSgyLCJhc3luYyIpLFUoMywiYXN5bmMiKSxnKCkpLDImZSYmYigiY2FyZElkc1dpdGhNZXRhZGF0YSIsRygxLDQsaS5jYXJkSWRzV2l0aE1ldGFkYXRhJCkpKCJsYXN0UGlubmVkQ2FyZFRpbWUiLEcoMiw2LGkubGFzdFBpbm5lZENhcmRUaW1lJCkpKCJjYXJkT2JzZXJ2ZXIiLGkuY2FyZE9ic2VydmVyKSgiZ2xvYmFsUGluc0VuYWJsZWQiLEcoMyw4LGkuZ2xvYmFsUGluc0VuYWJsZWQkKSl9LGRlcGVuZGVuY2llczpbQW5lLGN0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBGVmUobix0KXsxJm4mJmsoMCwibWV0cmljcy1maWx0ZXJlZC12aWV3IiwxMyksMiZuJiZiKCJjYXJkT2JzZXJ2ZXIiLHcoKS5jYXJkT2JzZXJ2ZXIpfWZ1bmN0aW9uIE5WZShuLHQpezEmbiYmKGYoMCwiZGl2IiwxNyksaygxLCJtYXQtc3Bpbm5lciIsMTgpLGcoKSl9dmFyIExWZT1mdW5jdGlvbihuKXtyZXR1cm57InNsaWRlLW91dC1tZW51LWV4cGFuZGVkIjpufX07ZnVuY3Rpb24gQlZlKG4sdCl7aWYoMSZuJiYoZigwLCJkaXYiLDE5KSxrKDEsIm1ldHJpY3Mtc2NhbGFyLWNvbHVtbi1lZGl0b3IiKSxnKCkpLDImbil7bGV0IGU9dygpO2IoIm5nQ2xhc3MiLFVuKDEsTFZlLGUuc2xpZGVPdXRNZW51T3BlbikpfX1mdW5jdGlvbiBWVmUobix0KXtpZigxJm4pe2xldCBlPVRlKCk7ZigwLCJkaXYiLDIwKSgxLCJkaXYiLDIxKSgyLCJoMiIsMjIpLFQoMywiU2V0dGluZ3MiKSxnKCksZig0LCJidXR0b24iLDIzKSxBKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gbmUoZSksaWUodygpLm9uQ2xvc2VTaWRlcGFuZUJ1dHRvbkNsaWNrZWQuZW1pdCgpKX0pLGsoNSwibWF0LWljb24iLDI0KSxnKCkoKSxrKDYsIm1ldHJpY3MtZGFzaGJvYXJkLXJpZ2h0LXBhbmUiKSxnKCl9fXZhciBIVmU9ZnVuY3Rpb24obil7cmV0dXJue2NoZWNrZWQ6biwic2V0dGluZ3MtYnV0dG9uIjohMH19LHpWZT1uZXcgdGUoIkN1c3RvbWl6YWJsZSBTaGFyZSBCdXR0b24iKSxQbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuaG9zdD1lLHRoaXMuY3VzdG9tU2hhcmVCdXR0b249aSx0aGlzLm9uU2V0dGluZ3NCdXR0b25DbGlja2VkPW5ldyBGLHRoaXMub25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZD1uZXcgRix0aGlzLm9uUGx1Z2luVHlwZVRvZ2dsZWQ9bmV3IEYsdGhpcy5vblBsdWdpblR5cGVBbGxUb2dnbGVkPW5ldyBGLHRoaXMuUGx1Z2luVHlwZT1Bbix0aGlzLmNhcmRPYnNlcnZlcj1uZXcgeXkodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQsIjYwMHB4IDBweCA2MDBweCAwcHgiKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyh4ZSksQyh6VmUsOCkpfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtbWFpbi12aWV3LWNvbXBvbmVudCJdXSxpbnB1dHM6e3Nob3dGaWx0ZXJlZFZpZXc6InNob3dGaWx0ZXJlZFZpZXciLGlzU2lkZXBhbmVPcGVuOiJpc1NpZGVwYW5lT3BlbiIsZmlsdGVyZWRQbHVnaW5UeXBlczoiZmlsdGVyZWRQbHVnaW5UeXBlcyIsaW5pdGlhbFRhZ3NMb2FkaW5nOiJpbml0aWFsVGFnc0xvYWRpbmciLHNsaWRlT3V0TWVudU9wZW46InNsaWRlT3V0TWVudU9wZW4ifSxvdXRwdXRzOntvblNldHRpbmdzQnV0dG9uQ2xpY2tlZDoib25TZXR0aW5nc0J1dHRvbkNsaWNrZWQiLG9uQ2xvc2VTaWRlcGFuZUJ1dHRvbkNsaWNrZWQ6Im9uQ2xvc2VTaWRlcGFuZUJ1dHRvbkNsaWNrZWQiLG9uUGx1Z2luVHlwZVRvZ2dsZWQ6Im9uUGx1Z2luVHlwZVRvZ2dsZWQiLG9uUGx1Z2luVHlwZUFsbFRvZ2dsZWQ6Im9uUGx1Z2luVHlwZUFsbFRvZ2dsZWQifSxkZWNsczoyNCx2YXJzOjIzLGNvbnN0czpmdW5jdGlvbigpe2xldCB0LGU7cmV0dXJuIHQ9JGxvY2FsaXplYDpMYWJlbCBvbiBhIHRvb2xiYXIgYnV0dG9uIHRvIHRvZ2dsZSB0aGUgc2V0dGluZ3Mgc2lkZSBwYW5lLuKQn2QzNTE2ZGI2YmJlNjg2MGE1NWJlYWI2NmU0OTY5ZGFjNjI1YjhkNzLikJ83NjU5Mjg1NDQ1NTgwODM4OTI1OlRvZ2dsZSBzZXR0aW5ncyBzaWRlIHBhbmVgLGU9JGxvY2FsaXplYDpMYWJlbCBvbiBhIGJ1dHRvbiB0byBjbG9zZSB0aGUgc2V0dGluZ3Mgc2lkZSBwYW5lLuKQnzA0NTIxZGMwYjZhNjVjZjVjMzgyOTQ0YzlhOGI0Yjg0NGEzZTk1OTjikJ84MTU2NzY2OTk3NzQ3MTY1ODcxOkNsb3NlIHNpZGUgcGFuZWAsW1sxLCJ0b29sYmFyIl0sWyJtdWx0aXBsZSIsIiIsImFwcGVhcmFuY2UiLCJzdGFuZGFyZCIsMSwiZmlsdGVyLXZpZXciXSxbIm1hdC1idXR0b24iLCIiLCJyb2xlIiwiY2hlY2tib3giLCJkYXRhLXZhbHVlIiwiYWxsIiwxLCJmaWx0ZXItdmlldy1idXR0b24iLDMsImNsaWNrIl0sWyJtYXQtYnV0dG9uIiwiIiwicm9sZSIsImNoZWNrYm94IiwiZGF0YS12YWx1ZSIsInNjYWxhcnMiLDEsImZpbHRlci12aWV3LWJ1dHRvbiIsMywiY2xpY2siXSxbIm1hdC1idXR0b24iLCIiLCJyb2xlIiwiY2hlY2tib3giLCJkYXRhLXZhbHVlIiwiaW1hZ2UiLDEsImZpbHRlci12aWV3LWJ1dHRvbiIsMywiY2xpY2siXSxbIm1hdC1idXR0b24iLCIiLCJyb2xlIiwiY2hlY2tib3giLCJkYXRhLXZhbHVlIiwiaGlzdG9ncmFtIiwxLCJmaWx0ZXItdmlldy1idXR0b24iLDMsImNsaWNrIl0sWzMsImN1c3RvbWl6YWJsZUNvbXBvbmVudCJdLFsxLCJyaWdodC1pdGVtcyJdLFsibWF0LXN0cm9rZWQtYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsdCwzLCJuZ0NsYXNzIiwiY2xpY2siXSxbInN2Z0ljb24iLCJzZXR0aW5nc18yNHB4Il0sWzEsInNwbGl0LWNvbnRlbnQiXSxbImNka1Njcm9sbGFibGUiLCIiXSxbMywiY2FyZE9ic2VydmVyIiw0LCJuZ0lmIl0sWzMsImNhcmRPYnNlcnZlciJdLFsiY2xhc3MiLCJsb2FkaW5nLWNvbnRhaW5lciIsNCwibmdJZiJdLFsiY2xhc3MiLCJzbGlkZS1vdXQtbWVudSIsMywibmdDbGFzcyIsNCwibmdJZiJdLFsiY2xhc3MiLCJzaWRlYmFyIiw0LCJuZ0lmIl0sWzEsImxvYWRpbmctY29udGFpbmVyIl0sWyJkaWFtZXRlciIsIjM2Il0sWzEsInNsaWRlLW91dC1tZW51IiwzLCJuZ0NsYXNzIl0sWzEsInNpZGViYXIiXSxbMSwiaGVhZGVyIl0sWzEsInRpdGxlIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixlLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiY2xvc2VfMjRweCJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihmKDAsImRpdiIsMCksaygxLCJtZXRyaWNzLXRhZy1maWx0ZXIiKSxmKDIsIm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIiwxKSgzLCJidXR0b24iLDIpLEEoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uUGx1Z2luVHlwZUFsbFRvZ2dsZWQuZW1pdCgpfSksVCg0LCIgQWxsICIpLGcoKSxmKDUsImJ1dHRvbiIsMyksQSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25QbHVnaW5UeXBlVG9nZ2xlZC5lbWl0KGkuUGx1Z2luVHlwZS5TQ0FMQVJTKX0pLFQoNiwiIFNjYWxhcnMgIiksZygpLGYoNywiYnV0dG9uIiw0KSxBKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblBsdWdpblR5cGVUb2dnbGVkLmVtaXQoaS5QbHVnaW5UeXBlLklNQUdFUyl9KSxUKDgsIiBJbWFnZSAiKSxnKCksZig5LCJidXR0b24iLDUpLEEoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uUGx1Z2luVHlwZVRvZ2dsZWQuZW1pdChpLlBsdWdpblR5cGUuSElTVE9HUkFNUyl9KSxUKDEwLCIgSGlzdG9ncmFtICIpLGcoKSgpLGsoMTEsInRiLWN1c3RvbWl6YXRpb24iLDYpLGYoMTIsImRpdiIsNykoMTMsImJ1dHRvbiIsOCksQSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25TZXR0aW5nc0J1dHRvbkNsaWNrZWQuZW1pdCgpfSksaygxNCwibWF0LWljb24iLDkpLFQoMTUsIiBTZXR0aW5ncyAiKSxnKCkoKSgpLGYoMTYsImRpdiIsMTApKDE3LCJkaXYiLDExKSxTKDE4LEZWZSwxLDEsIm1ldHJpY3MtZmlsdGVyZWQtdmlldyIsMTIpLGsoMTksIm1ldHJpY3MtcGlubmVkLXZpZXciLDEzKSxTKDIwLE5WZSwyLDAsImRpdiIsMTQpLGsoMjEsIm1ldHJpY3MtY2FyZC1ncm91cHMiLDEzKSxnKCksUygyMixCVmUsMiwzLCJkaXYiLDE1KSxTKDIzLFZWZSw3LDAsImRpdiIsMTYpLGcoKSksMiZlJiYodigzKSxCZSgiYXJpYS1jaGVja2VkIiwwPT09aS5maWx0ZXJlZFBsdWdpblR5cGVzLnNpemUpLHYoMiksQmUoImFyaWEtY2hlY2tlZCIsaS5maWx0ZXJlZFBsdWdpblR5cGVzLmhhcyhpLlBsdWdpblR5cGUuU0NBTEFSUykpLHYoMiksQmUoImFyaWEtY2hlY2tlZCIsaS5maWx0ZXJlZFBsdWdpblR5cGVzLmhhcyhpLlBsdWdpblR5cGUuSU1BR0VTKSksdigyKSxCZSgiYXJpYS1jaGVja2VkIixpLmZpbHRlcmVkUGx1Z2luVHlwZXMuaGFzKGkuUGx1Z2luVHlwZS5ISVNUT0dSQU1TKSksdigyKSxiKCJjdXN0b21pemFibGVDb21wb25lbnQiLGkuY3VzdG9tU2hhcmVCdXR0b24pLHYoMiksYigibmdDbGFzcyIsVW4oMjEsSFZlLGkuaXNTaWRlcGFuZU9wZW4pKSxCZSgiYXJpYS1wcmVzc2VkIixpLmlzU2lkZXBhbmVPcGVuKSx2KDQpLG50KCJtYWluIiwhMCkoImZpbHRlci12aWV3IixpLnNob3dGaWx0ZXJlZFZpZXcpLHYoMSksYigibmdJZiIsaS5zaG93RmlsdGVyZWRWaWV3KSx2KDEpLEJ0KCJkaXNwbGF5IixpLnNob3dGaWx0ZXJlZFZpZXc/Im5vbmUiOiIiKSxiKCJjYXJkT2JzZXJ2ZXIiLGkuY2FyZE9ic2VydmVyKSx2KDEpLGIoIm5nSWYiLGkuaW5pdGlhbFRhZ3NMb2FkaW5nKSx2KDEpLEJ0KCJkaXNwbGF5IixpLnNob3dGaWx0ZXJlZFZpZXc/Im5vbmUiOiIiKSxiKCJjYXJkT2JzZXJ2ZXIiLGkuY2FyZE9ic2VydmVyKSx2KDEpLGIoIm5nSWYiLGkuaXNTaWRlcGFuZU9wZW4pLHYoMSksYigibmdJZiIsaS5pc1NpZGVwYW5lT3BlbikpfSxkZXBlbmRlbmNpZXM6W3duLE5lLHZRLHhkLGtpLEVyLEROLGJuLE5jLEFRLEhRLE1uZSxUbmUsSW5lLFJuZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2hlaWdodDoxMDAlfS50b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2ZsZXg6bm9uZTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2hlaWdodDo0OHB4O3BhZGRpbmc6MCAxNnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC50b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9LnRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgbWV0cmljcy10YWctZmlsdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjEgMSAxMDBweH0udG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICAucmlnaHQtaXRlbXNbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZWJlYmViO21hcmdpbi1sZWZ0OjE2cHg7cGFkZGluZy1sZWZ0OjE2cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgLnJpZ2h0LWl0ZW1zW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgLnJpZ2h0LWl0ZW1zW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoxcHggc29saWQgIzU1NX1tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC5maWx0ZXItdmlld1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmVifWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLmZpbHRlci12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgbWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAuZmlsdGVyLXZpZXdbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQgIzU1NX0uZmlsdGVyLXZpZXdbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yYWRpdXM6NHB4O2ZsZXg6bm9uZTttYXJnaW4tcmlnaHQ6NXB4fS5maWx0ZXItdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yYWRpdXM6MDtmb250LXNpemU6MTJweDtmb250LXdlaWdodDpub3JtYWw7aGVpZ2h0OjI1cHg7bGluZS1oZWlnaHQ6MjVweDttaW4td2lkdGg6dW5zZXQ7cGFkZGluZzowIDEycHh9LmZpbHRlci12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gKyBidXR0b25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZWJlYmVifWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5maWx0ZXItdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVdICsgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmZpbHRlci12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gKyBidXR0b25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjNTU1fS5maWx0ZXItdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bYXJpYS1jaGVja2VkPXRydWVdW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTB9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmZpbHRlci12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvblthcmlhLWNoZWNrZWQ9dHJ1ZV1bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZmlsdGVyLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW2FyaWEtY2hlY2tlZD10cnVlXVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMjEyMTIxfS5zcGxpdC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7b3ZlcmZsb3cteTphdXRvO2ZsZXg6MX0ubWFpbltfbmdjb250ZW50LSVDT01QJV0sIC5zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtjb250YWluOnN0cmljdDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7b3ZlcmZsb3cteDpoaWRkZW47b3ZlcmZsb3cteTphdXRvO3dpbGwtY2hhbmdlOnRyYW5zZm9ybSxzY3JvbGwtcG9zaXRpb259Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm1haW5bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAubWFpbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNpZGViYXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH0ubWFpbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZjVmNmY3O2ZsZXg6MSAxO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm1haW5bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAubWFpbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojM2EzYTNhfS5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1ldHJpY3MtZmlsdGVyZWQtdmlld1tfbmdjb250ZW50LSVDT01QJV0sIC5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1ldHJpY3MtcGlubmVkLXZpZXdbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm1haW5bX25nY29udGVudC0lQ09NUCVdICAgbWV0cmljcy1maWx0ZXJlZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm1haW5bX25nY29udGVudC0lQ09NUCVdICAgbWV0cmljcy1maWx0ZXJlZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1ldHJpY3MtcGlubmVkLXZpZXdbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAubWFpbltfbmdjb250ZW50LSVDT01QJV0gICBtZXRyaWNzLXBpbm5lZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fS5tYWluLmZpbHRlci12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW59Lm1haW4uZmlsdGVyLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgbWV0cmljcy1maWx0ZXJlZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtjb250YWluOmNvbnRlbnQ7b3ZlcmZsb3c6YXV0bzt3aWxsLWNoYW5nZTp0cmFuc2Zvcm0sc2Nyb2xsLXBvc2l0aW9ufS5sb2FkaW5nLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmdpbjoyMHB4IDB9LnNpZGViYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZWJlYmViO2ZsZXg6MCAwIDI1MHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNpZGViYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjNTU1fS5zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtoZWlnaHQ6NDJweDtwYWRkaW5nOjAgMTZweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV0gICAuaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNpZGViYXJbX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX0uc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV0gICAuaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHg7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0Om5vcm1hbDttYXJnaW46MH1bX25naG9zdC0lQ09NUCVdICAgLnNldHRpbmdzLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTtkaXNwbGF5OmlubGluZS1mbGV4fWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zZXR0aW5ncy1idXR0b25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfVtfbmdob3N0LSVDT01QJV0gICAuc2V0dGluZ3MtYnV0dG9uLmNoZWNrZWRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2UwZTBlMDtib3JkZXItY29sb3I6I2UwZTBlMH1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2V0dGluZ3MtYnV0dG9uLmNoZWNrZWRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzIxMjEyMX1bX25naG9zdC0lQ09NUCVdICAgLnNldHRpbmdzLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAgIC5tYXQtYnV0dG9uLXdyYXBwZXJ7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9W19uZ2hvc3QtJUNPTVAlXSAgIC5zZXR0aW5ncy1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1yaWdodDo0cHh9LnNsaWRlLW91dC1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7aGVpZ2h0OmNhbGMoMTAwJSAtIDQ5cHgpO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjUwcHg7dG9wOjQ5cHg7dHJhbnNpdGlvbjphbGwgLjc1cyBlYXNlO3Zpc2liaWxpdHk6aGlkZGVuO3dpZHRoOjIwMHB4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZWJlYmVifWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZS1vdXQtbWVudVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZS1vdXQtbWVudVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlLW91dC1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlLW91dC1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9LnNsaWRlLW91dC1tZW51LWV4cGFuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtyaWdodDoyNTBweDt2aXNpYmlsaXR5OnZpc2libGV9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxrbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5pc1NpZGVwYW5lT3BlbiQ9dGhpcy5zdG9yZS5zZWxlY3QocDEpLHRoaXMuaW5pdGlhbFRhZ3NMb2FkaW5nJD10aGlzLnN0b3JlLnNlbGVjdCh4dikucGlwZShPXyhpPT5udWxsPT09aS5sYXN0TG9hZGVkVGltZUluTXMsITApLHEoaT0+aS5zdGF0ZT09PVJlLkxPQURJTkcmJm51bGw9PT1pLmxhc3RMb2FkZWRUaW1lSW5NcykpLHRoaXMuc2hvd0ZpbHRlcmVkVmlldyQ9dGhpcy5zdG9yZS5zZWxlY3QoRmwpLnBpcGUocShpPT5pLmxlbmd0aD4wKSksdGhpcy5maWx0ZXJlZFBsdWdpblR5cGVzJD10aGlzLnN0b3JlLnNlbGVjdChTYyksdGhpcy5pc1NsaWRlb3V0TWVudU9wZW4kPXRoaXMuc3RvcmUuc2VsZWN0KGgxKX1vblNldHRpbmdzQnV0dG9uQ2xpY2tlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goc1QoKSl9b25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goYVQoKSl9b25QbHVnaW5WaXNpYmlsaXR5VG9nZ2xlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKEZUKHtwbHVnaW46ZX0pKX1vblNob3dBbGxQbHVnaW5zKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChOVCgpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhJZSkpfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtbWFpbi12aWV3Il1dLGRlY2xzOjYsdmFyczoxNSxjb25zdHM6W1szLCJzaG93RmlsdGVyZWRWaWV3IiwiaXNTaWRlcGFuZU9wZW4iLCJpbml0aWFsVGFnc0xvYWRpbmciLCJmaWx0ZXJlZFBsdWdpblR5cGVzIiwic2xpZGVPdXRNZW51T3BlbiIsIm9uU2V0dGluZ3NCdXR0b25DbGlja2VkIiwib25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZCIsIm9uUGx1Z2luVHlwZVRvZ2dsZWQiLCJvblBsdWdpblR5cGVBbGxUb2dnbGVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZigwLCJtZXRyaWNzLW1haW4tdmlldy1jb21wb25lbnQiLDApLEEoIm9uU2V0dGluZ3NCdXR0b25DbGlja2VkIixmdW5jdGlvbigpe3JldHVybiBpLm9uU2V0dGluZ3NCdXR0b25DbGlja2VkKCl9KSgib25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkNsb3NlU2lkZXBhbmVCdXR0b25DbGlja2VkKCl9KSgib25QbHVnaW5UeXBlVG9nZ2xlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25QbHVnaW5WaXNpYmlsaXR5VG9nZ2xlZChvKX0pKCJvblBsdWdpblR5cGVBbGxUb2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBpLm9uU2hvd0FsbFBsdWdpbnMoKX0pLFUoMSwiYXN5bmMiKSxVKDIsImFzeW5jIiksVSgzLCJhc3luYyIpLFUoNCwiYXN5bmMiKSxVKDUsImFzeW5jIiksZygpKSwyJmUmJmIoInNob3dGaWx0ZXJlZFZpZXciLEcoMSw1LGkuc2hvd0ZpbHRlcmVkVmlldyQpKSgiaXNTaWRlcGFuZU9wZW4iLEcoMiw3LGkuaXNTaWRlcGFuZU9wZW4kKSkoImluaXRpYWxUYWdzTG9hZGluZyIsRygzLDksaS5pbml0aWFsVGFnc0xvYWRpbmckKSkoImZpbHRlcmVkUGx1Z2luVHlwZXMiLEcoNCwxMSxpLmZpbHRlcmVkUGx1Z2luVHlwZXMkKSkoInNsaWRlT3V0TWVudU9wZW4iLEcoNSwxMyxpLmlzU2xpZGVvdXRNZW51T3BlbiQpKX0sZGVwZW5kZW5jaWVzOltQbmUsY3RdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFpsPSgoKT0+KGZ1bmN0aW9uKG4pe24uQ0hFQ0tCT1g9ImNoZWNrYm94IixuLlJVTl9OQU1FPSJydW5fbmFtZSIsbi5FWFBFUklNRU5UX05BTUU9ImV4cGVyaW1lbnRfbmFtZSIsbi5SVU5fQ09MT1I9InJ1bl9jb2xvciJ9KFpsfHwoWmw9e30pKSxabCkpKCksUHA9KCgpPT4oZnVuY3Rpb24obil7bltuLkJFRk9SRT0wXT0iQkVGT1JFIixuW24uQUZURVI9MV09IkFGVEVSIn0oUHB8fChQcD17fSkpLFBwKSkoKSxPbmU9bmV3IFNldChbInN0cmluZyIsIm51bWJlciJdKSxHVmU9e2luc2VydFVuZGVmaW5lZDpQcC5BRlRFUn07ZnVuY3Rpb24gRm5lKG4pe2lmKCJudW1iZXIiPT10eXBlb2YgbilyZXR1cm4gaXNOYU4obik/dm9pZCAwOm47aWYoIWlzTmFOKHBhcnNlSW50KG4pKSlyZXR1cm4gcGFyc2VJbnQobik7Zm9yKGxldCB0PTA7dDxuLmxlbmd0aDt0KyspaWYoaXNOYU4ocGFyc2VJbnQoblt0XSkpKXJldHVybiAwPT09dD92b2lkIDA6cGFyc2VJbnQobi5zbGljZSgwLHQpKX12YXIgV1ZlPVsiZGlhbG9nUG9wdXAiXSxxVmU9WyJodWVTbGlkZXIiXSxYVmU9WyJhbHBoYVNsaWRlciJdO2Z1bmN0aW9uIFlWZShuLHQpe2lmKDEmbiYmaygwLCJkaXYiKSwyJm4pe2xldCBlPXcoKTtiYigiYXJyb3cgYXJyb3ctIixlLmNwVXNlUG9zaXRpb24sIiIpLEJ0KCJ0b3AiLGUuYXJyb3dUb3AsInB4Iil9fWZ1bmN0aW9uIFFWZShuLHQpe2lmKDEmbil7bGV0IGU9VGUoKTtmKDAsImRpdiIsMjgpLEEoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gbmUoZSksaWUodygpLm9uQ29sb3JDaGFuZ2UocikpfSkoImRyYWdTdGFydCIsZnVuY3Rpb24oKXtyZXR1cm4gbmUoZSksaWUodygpLm9uRHJhZ1N0YXJ0KCJzYXR1cmF0aW9uLWxpZ2h0bmVzcyIpKX0pKCJkcmFnRW5kIixmdW5jdGlvbigpe3JldHVybiBuZShlKSxpZSh3KCkub25EcmFnRW5kKCJzYXR1cmF0aW9uLWxpZ2h0bmVzcyIpKX0pLGsoMSwiZGl2IiwxNCksZygpfWlmKDImbil7bGV0IGU9dygpO0J0KCJiYWNrZ3JvdW5kLWNvbG9yIixlLmh1ZVNsaWRlckNvbG9yKSxiKCJyZ1giLDEpKCJyZ1kiLDEpLHYoMSksQnQoInRvcCIsbnVsbD09ZS5zbGlkZXI/bnVsbDplLnNsaWRlci52LCJweCIpKCJsZWZ0IixudWxsPT1lLnNsaWRlcj9udWxsOmUuc2xpZGVyLnMsInB4Iil9fWZ1bmN0aW9uIFpWZShuLHQpezEmbiYmKHFuKCksZigwLCJzdmciLDI5KSxrKDEsInBhdGgiLDMwKSgyLCJwYXRoIiwzMSksZygpKX1mdW5jdGlvbiBLVmUobix0KXtpZigxJm4pe2xldCBlPVRlKCk7ZigwLCJidXR0b24iLDMyKSxBKCJjbGljayIsZnVuY3Rpb24ocil7bmUoZSk7bGV0IG89dygpO3JldHVybiBpZShvLm9uQWRkUHJlc2V0Q29sb3IocixvLnNlbGVjdGVkQ29sb3IpKX0pLFQoMSksZygpfWlmKDImbil7bGV0IGU9dygpO1hvKGUuY3BBZGRDb2xvckJ1dHRvbkNsYXNzKSxiKCJkaXNhYmxlZCIsZS5jcFByZXNldENvbG9ycyYmZS5jcFByZXNldENvbG9ycy5sZW5ndGg+PWUuY3BNYXhQcmVzZXRDb2xvcnNMZW5ndGgpLHYoMSksVmUoIiAiLGUuY3BBZGRDb2xvckJ1dHRvblRleHQsIiAiKX19ZnVuY3Rpb24gSlZlKG4sdCl7MSZuJiZrKDAsImRpdiIsMzMpfWZ1bmN0aW9uICRWZShuLHQpe2lmKDEmbil7bGV0IGU9VGUoKTtmKDAsImlucHV0IiwzOSksQSgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiBuZShlKSxpZSh3KDIpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gbmUoZSksaWUodygyKS5vbkFscGhhSW5wdXQocikpfSksZygpfWlmKDImbil7bGV0IGU9dygyKTtiKCJyZyIsMSkoInZhbHVlIixudWxsPT1lLmNteWtUZXh0P251bGw6ZS5jbXlrVGV4dC5hKX19ZnVuY3Rpb24gZTRlKG4sdCl7MSZuJiYoZigwLCJkaXYiKSxUKDEsIkEiKSxnKCkpfWZ1bmN0aW9uIHQ0ZShuLHQpe2lmKDEmbil7bGV0IGU9VGUoKTtmKDAsImRpdiIsMzQpKDEsImRpdiIsMzUpKDIsImlucHV0IiwzNiksQSgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiBuZShlKSxpZSh3KCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiBuZShlKSxpZSh3KCkub25DeWFuSW5wdXQocikpfSksZygpLGYoMywiaW5wdXQiLDM2KSxBKCJrZXl1cC5lbnRlciIsZnVuY3Rpb24ocil7cmV0dXJuIG5lKGUpLGllKHcoKS5vbkFjY2VwdENvbG9yKHIpKX0pKCJuZXdWYWx1ZSIsZnVuY3Rpb24ocil7cmV0dXJuIG5lKGUpLGllKHcoKS5vbk1hZ2VudGFJbnB1dChyKSl9KSxnKCksZig0LCJpbnB1dCIsMzYpLEEoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gbmUoZSksaWUodygpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gbmUoZSksaWUodygpLm9uWWVsbG93SW5wdXQocikpfSksZygpLGYoNSwiaW5wdXQiLDM2KSxBKCJrZXl1cC5lbnRlciIsZnVuY3Rpb24ocil7cmV0dXJuIG5lKGUpLGllKHcoKS5vbkFjY2VwdENvbG9yKHIpKX0pKCJuZXdWYWx1ZSIsZnVuY3Rpb24ocil7cmV0dXJuIG5lKGUpLGllKHcoKS5vbkJsYWNrSW5wdXQocikpfSksZygpLFMoNiwkVmUsMSwyLCJpbnB1dCIsMzcpLGcoKSxmKDcsImRpdiIsMzUpKDgsImRpdiIpLFQoOSwiQyIpLGcoKSxmKDEwLCJkaXYiKSxUKDExLCJNIiksZygpLGYoMTIsImRpdiIpLFQoMTMsIlkiKSxnKCksZigxNCwiZGl2IiksVCgxNSwiSyIpLGcoKSxTKDE2LGU0ZSwyLDAsImRpdiIsMzgpLGcoKSgpfWlmKDImbil7bGV0IGU9dygpO0J0KCJkaXNwbGF5IiwzIT09ZS5mb3JtYXQ/Im5vbmUiOiJibG9jayIpLHYoMiksYigicmciLDEwMCkoInZhbHVlIixudWxsPT1lLmNteWtUZXh0P251bGw6ZS5jbXlrVGV4dC5jKSx2KDEpLGIoInJnIiwxMDApKCJ2YWx1ZSIsbnVsbD09ZS5jbXlrVGV4dD9udWxsOmUuY215a1RleHQubSksdigxKSxiKCJyZyIsMTAwKSgidmFsdWUiLG51bGw9PWUuY215a1RleHQ/bnVsbDplLmNteWtUZXh0LnkpLHYoMSksYigicmciLDEwMCkoInZhbHVlIixudWxsPT1lLmNteWtUZXh0P251bGw6ZS5jbXlrVGV4dC5rKSx2KDEpLGIoIm5nSWYiLCJkaXNhYmxlZCIhPT1lLmNwQWxwaGFDaGFubmVsKSx2KDEwKSxiKCJuZ0lmIiwiZGlzYWJsZWQiIT09ZS5jcEFscGhhQ2hhbm5lbCl9fWZ1bmN0aW9uIG40ZShuLHQpe2lmKDEmbil7bGV0IGU9VGUoKTtmKDAsImlucHV0IiwzOSksQSgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiBuZShlKSxpZSh3KDIpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gbmUoZSksaWUodygyKS5vbkFscGhhSW5wdXQocikpfSksZygpfWlmKDImbil7bGV0IGU9dygyKTtiKCJyZyIsMSkoInZhbHVlIixudWxsPT1lLmhzbGFUZXh0P251bGw6ZS5oc2xhVGV4dC5hKX19ZnVuY3Rpb24gaTRlKG4sdCl7MSZuJiYoZigwLCJkaXYiKSxUKDEsIkEiKSxnKCkpfWZ1bmN0aW9uIHI0ZShuLHQpe2lmKDEmbil7bGV0IGU9VGUoKTtmKDAsImRpdiIsNDApKDEsImRpdiIsMzUpKDIsImlucHV0Iiw0MSksQSgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiBuZShlKSxpZSh3KCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiBuZShlKSxpZSh3KCkub25IdWVJbnB1dChyKSl9KSxnKCksZigzLCJpbnB1dCIsMzYpLEEoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gbmUoZSksaWUodygpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gbmUoZSksaWUodygpLm9uU2F0dXJhdGlvbklucHV0KHIpKX0pLGcoKSxmKDQsImlucHV0IiwzNiksQSgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiBuZShlKSxpZSh3KCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiBuZShlKSxpZSh3KCkub25MaWdodG5lc3NJbnB1dChyKSl9KSxnKCksUyg1LG40ZSwxLDIsImlucHV0IiwzNyksZygpLGYoNiwiZGl2IiwzNSkoNywiZGl2IiksVCg4LCJIIiksZygpLGYoOSwiZGl2IiksVCgxMCwiUyIpLGcoKSxmKDExLCJkaXYiKSxUKDEyLCJMIiksZygpLFMoMTMsaTRlLDIsMCwiZGl2IiwzOCksZygpKCl9aWYoMiZuKXtsZXQgZT13KCk7QnQoImRpc3BsYXkiLDIhPT1lLmZvcm1hdD8ibm9uZSI6ImJsb2NrIiksdigyKSxiKCJyZyIsMzYwKSgidmFsdWUiLG51bGw9PWUuaHNsYVRleHQ/bnVsbDplLmhzbGFUZXh0LmgpLHYoMSksYigicmciLDEwMCkoInZhbHVlIixudWxsPT1lLmhzbGFUZXh0P251bGw6ZS5oc2xhVGV4dC5zKSx2KDEpLGIoInJnIiwxMDApKCJ2YWx1ZSIsbnVsbD09ZS5oc2xhVGV4dD9udWxsOmUuaHNsYVRleHQubCksdigxKSxiKCJuZ0lmIiwiZGlzYWJsZWQiIT09ZS5jcEFscGhhQ2hhbm5lbCksdig4KSxiKCJuZ0lmIiwiZGlzYWJsZWQiIT09ZS5jcEFscGhhQ2hhbm5lbCl9fWZ1bmN0aW9uIG80ZShuLHQpe2lmKDEmbil7bGV0IGU9VGUoKTtmKDAsImlucHV0IiwzOSksQSgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiBuZShlKSxpZSh3KDIpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gbmUoZSksaWUodygyKS5vbkFscGhhSW5wdXQocikpfSksZygpfWlmKDImbil7bGV0IGU9dygyKTtiKCJyZyIsMSkoInZhbHVlIixudWxsPT1lLnJnYmFUZXh0P251bGw6ZS5yZ2JhVGV4dC5hKX19ZnVuY3Rpb24gYTRlKG4sdCl7MSZuJiYoZigwLCJkaXYiKSxUKDEsIkEiKSxnKCkpfWZ1bmN0aW9uIHM0ZShuLHQpe2lmKDEmbil7bGV0IGU9VGUoKTtmKDAsImRpdiIsNDIpKDEsImRpdiIsMzUpKDIsImlucHV0Iiw0MyksQSgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiBuZShlKSxpZSh3KCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiBuZShlKSxpZSh3KCkub25SZWRJbnB1dChyKSl9KSxnKCksZigzLCJpbnB1dCIsNDMpLEEoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gbmUoZSksaWUodygpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gbmUoZSksaWUodygpLm9uR3JlZW5JbnB1dChyKSl9KSxnKCksZig0LCJpbnB1dCIsNDMpLEEoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gbmUoZSksaWUodygpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gbmUoZSksaWUodygpLm9uQmx1ZUlucHV0KHIpKX0pLGcoKSxTKDUsbzRlLDEsMiwiaW5wdXQiLDM3KSxnKCksZig2LCJkaXYiLDM1KSg3LCJkaXYiKSxUKDgsIlIiKSxnKCksZig5LCJkaXYiKSxUKDEwLCJHIiksZygpLGYoMTEsImRpdiIpLFQoMTIsIkIiKSxnKCksUygxMyxhNGUsMiwwLCJkaXYiLDM4KSxnKCkoKX1pZigyJm4pe2xldCBlPXcoKTtCdCgiZGlzcGxheSIsMSE9PWUuZm9ybWF0PyJub25lIjoiYmxvY2siKSx2KDIpLGIoInJnIiwyNTUpKCJ2YWx1ZSIsbnVsbD09ZS5yZ2JhVGV4dD9udWxsOmUucmdiYVRleHQuciksdigxKSxiKCJyZyIsMjU1KSgidmFsdWUiLG51bGw9PWUucmdiYVRleHQ/bnVsbDplLnJnYmFUZXh0LmcpLHYoMSksYigicmciLDI1NSkoInZhbHVlIixudWxsPT1lLnJnYmFUZXh0P251bGw6ZS5yZ2JhVGV4dC5iKSx2KDEpLGIoIm5nSWYiLCJkaXNhYmxlZCIhPT1lLmNwQWxwaGFDaGFubmVsKSx2KDgpLGIoIm5nSWYiLCJkaXNhYmxlZCIhPT1lLmNwQWxwaGFDaGFubmVsKX19ZnVuY3Rpb24gbDRlKG4sdCl7aWYoMSZuKXtsZXQgZT1UZSgpO2YoMCwiaW5wdXQiLDM5KSxBKCJrZXl1cC5lbnRlciIsZnVuY3Rpb24ocil7cmV0dXJuIG5lKGUpLGllKHcoMikub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiBuZShlKSxpZSh3KDIpLm9uQWxwaGFJbnB1dChyKSl9KSxnKCl9aWYoMiZuKXtsZXQgZT13KDIpO2IoInJnIiwxKSgidmFsdWUiLGUuaGV4QWxwaGEpfX1mdW5jdGlvbiBjNGUobix0KXsxJm4mJihmKDAsImRpdiIpLFQoMSwiQSIpLGcoKSl9ZnVuY3Rpb24gZDRlKG4sdCl7aWYoMSZuKXtsZXQgZT1UZSgpO2YoMCwiZGl2Iiw0NCkoMSwiZGl2IiwzNSkoMiwiaW5wdXQiLDQ1KSxBKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBuZShlKSxpZSh3KCkub25IZXhJbnB1dChudWxsKSl9KSgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiBuZShlKSxpZSh3KCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiBuZShlKSxpZSh3KCkub25IZXhJbnB1dChyKSl9KSxnKCksUygzLGw0ZSwxLDIsImlucHV0IiwzNyksZygpLGYoNCwiZGl2IiwzNSkoNSwiZGl2IiksVCg2LCJIZXgiKSxnKCksUyg3LGM0ZSwyLDAsImRpdiIsMzgpLGcoKSgpfWlmKDImbil7bGV0IGU9dygpO0J0KCJkaXNwbGF5IiwwIT09ZS5mb3JtYXQ/Im5vbmUiOiJibG9jayIpLG50KCJoZXgtYWxwaGEiLCJmb3JjZWQiPT09ZS5jcEFscGhhQ2hhbm5lbCksdigyKSxiKCJ2YWx1ZSIsZS5oZXhUZXh0KSx2KDEpLGIoIm5nSWYiLCJmb3JjZWQiPT09ZS5jcEFscGhhQ2hhbm5lbCksdig0KSxiKCJuZ0lmIiwiZm9yY2VkIj09PWUuY3BBbHBoYUNoYW5uZWwpfX1mdW5jdGlvbiB1NGUobix0KXtpZigxJm4pe2xldCBlPVRlKCk7ZigwLCJpbnB1dCIsMzkpLEEoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gbmUoZSksaWUodygyKS5vbkFjY2VwdENvbG9yKHIpKX0pKCJuZXdWYWx1ZSIsZnVuY3Rpb24ocil7cmV0dXJuIG5lKGUpLGllKHcoMikub25BbHBoYUlucHV0KHIpKX0pLGcoKX1pZigyJm4pe2xldCBlPXcoMik7YigicmciLDEpKCJ2YWx1ZSIsbnVsbD09ZS5oc2xhVGV4dD9udWxsOmUuaHNsYVRleHQuYSl9fWZ1bmN0aW9uIHA0ZShuLHQpe2lmKDEmbil7bGV0IGU9VGUoKTtmKDAsImRpdiIsNDYpKDEsImRpdiIsMzUpKDIsImlucHV0IiwzNiksQSgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiBuZShlKSxpZSh3KCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiBuZShlKSxpZSh3KCkub25WYWx1ZUlucHV0KHIpKX0pLGcoKSxTKDMsdTRlLDEsMiwiaW5wdXQiLDM3KSxnKCksZig0LCJkaXYiLDM1KSg1LCJkaXYiKSxUKDYsIlYiKSxnKCksZig3LCJkaXYiKSxUKDgsIkEiKSxnKCkoKSgpfWlmKDImbil7bGV0IGU9dygpO3YoMiksYigicmciLDEwMCkoInZhbHVlIixudWxsPT1lLmhzbGFUZXh0P251bGw6ZS5oc2xhVGV4dC5sKSx2KDEpLGIoIm5nSWYiLCJkaXNhYmxlZCIhPT1lLmNwQWxwaGFDaGFubmVsKX19ZnVuY3Rpb24gaDRlKG4sdCl7aWYoMSZuKXtsZXQgZT1UZSgpO2YoMCwiZGl2Iiw0NykoMSwic3BhbiIsNDgpLEEoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBuZShlKSxpZSh3KCkub25Gb3JtYXRUb2dnbGUoLTEpKX0pLGcoKSxmKDIsInNwYW4iLDQ4KSxBKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gbmUoZSksaWUodygpLm9uRm9ybWF0VG9nZ2xlKDEpKX0pLGcoKSgpfX1mdW5jdGlvbiBtNGUobix0KXtpZigxJm4pe2xldCBlPVRlKCk7ZigwLCJzcGFuIiw1NSksQSgiY2xpY2siLGZ1bmN0aW9uKHIpe25lKGUpO2xldCBvPXcoKS4kaW1wbGljaXQ7cmV0dXJuIGllKHcoMykub25SZW1vdmVQcmVzZXRDb2xvcihyLG8pKX0pLGcoKX0yJm4mJlhvKHcoNCkuY3BSZW1vdmVDb2xvckJ1dHRvbkNsYXNzKX1mdW5jdGlvbiBmNGUobix0KXtpZigxJm4pe2xldCBlPVRlKCk7ZigwLCJkaXYiLDUzKSxBKCJjbGljayIsZnVuY3Rpb24oKXtsZXQgbz1uZShlKS4kaW1wbGljaXQ7cmV0dXJuIGllKHcoMykuc2V0Q29sb3JGcm9tU3RyaW5nKG8pKX0pLFMoMSxtNGUsMSwzLCJzcGFuIiw1NCksZygpfWlmKDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT13KDMpO0J0KCJiYWNrZ3JvdW5kLWNvbG9yIixlKSx2KDEpLGIoIm5nSWYiLGkuY3BBZGRDb2xvckJ1dHRvbil9fWZ1bmN0aW9uIGc0ZShuLHQpe2lmKDEmbiYmKGYoMCwiZGl2IiksUygxLGY0ZSwyLDMsImRpdiIsNTIpLGcoKSksMiZuKXtsZXQgZT13KDIpO1hvKGUuY3BQcmVzZXRDb2xvcnNDbGFzcyksdigxKSxiKCJuZ0Zvck9mIixlLmNwUHJlc2V0Q29sb3JzKX19ZnVuY3Rpb24gXzRlKG4sdCl7aWYoMSZuJiYoZigwLCJkaXYiKSxUKDEpLGcoKSksMiZuKXtsZXQgZT13KDIpO1hvKGUuY3BQcmVzZXRFbXB0eU1lc3NhZ2VDbGFzcyksdigxKSxrdChlLmNwUHJlc2V0RW1wdHlNZXNzYWdlKX19ZnVuY3Rpb24gYjRlKG4sdCl7aWYoMSZuJiYoZigwLCJkaXYiLDQ5KSxrKDEsImhyIiksZigyLCJkaXYiLDUwKSxUKDMpLGcoKSxTKDQsZzRlLDIsNCwiZGl2Iiw1MSksUyg1LF80ZSwyLDQsImRpdiIsNTEpLGcoKSksMiZuKXtsZXQgZT13KCk7digzKSxrdChlLmNwUHJlc2V0TGFiZWwpLHYoMSksYigibmdJZiIsbnVsbD09ZS5jcFByZXNldENvbG9ycz9udWxsOmUuY3BQcmVzZXRDb2xvcnMubGVuZ3RoKSx2KDEpLGIoIm5nSWYiLCEobnVsbCE9ZS5jcFByZXNldENvbG9ycyYmZS5jcFByZXNldENvbG9ycy5sZW5ndGgpJiZlLmNwQWRkQ29sb3JCdXR0b24pfX1mdW5jdGlvbiB2NGUobix0KXtpZigxJm4pe2xldCBlPVRlKCk7ZigwLCJidXR0b24iLDU4KSxBKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIG5lKGUpLGllKHcoMikub25DYW5jZWxDb2xvcihyKSl9KSxUKDEpLGcoKX1pZigyJm4pe2xldCBlPXcoMik7WG8oZS5jcENhbmNlbEJ1dHRvbkNsYXNzKSx2KDEpLGt0KGUuY3BDYW5jZWxCdXR0b25UZXh0KX19ZnVuY3Rpb24geTRlKG4sdCl7aWYoMSZuKXtsZXQgZT1UZSgpO2YoMCwiYnV0dG9uIiw1OCksQSgiY2xpY2siLGZ1bmN0aW9uKHIpe3JldHVybiBuZShlKSxpZSh3KDIpLm9uQWNjZXB0Q29sb3IocikpfSksVCgxKSxnKCl9aWYoMiZuKXtsZXQgZT13KDIpO1hvKGUuY3BPS0J1dHRvbkNsYXNzKSx2KDEpLGt0KGUuY3BPS0J1dHRvblRleHQpfX1mdW5jdGlvbiB4NGUobix0KXtpZigxJm4mJihmKDAsImRpdiIsNTYpLFMoMSx2NGUsMiw0LCJidXR0b24iLDU3KSxTKDIseTRlLDIsNCwiYnV0dG9uIiw1NyksZygpKSwyJm4pe2xldCBlPXcoKTt2KDEpLGIoIm5nSWYiLGUuY3BDYW5jZWxCdXR0b24pLHYoMSksYigibmdJZiIsZS5jcE9LQnV0dG9uKX19ZnVuY3Rpb24gQzRlKG4sdCl7MSZuJiZoaSgwKX1mdW5jdGlvbiBNNGUobix0KXtpZigxJm4mJihmKDAsImRpdiIsNTkpLFMoMSxDNGUsMSwwLCJuZy1jb250YWluZXIiLDYwKSxnKCkpLDImbil7bGV0IGU9dygpO3YoMSksYigibmdUZW1wbGF0ZU91dGxldCIsZS5jcEV4dHJhVGVtcGxhdGUpfX12YXIgR289KCgpPT4oZnVuY3Rpb24obil7bltuLkhFWD0wXT0iSEVYIixuW24uUkdCQT0xXT0iUkdCQSIsbltuLkhTTEE9Ml09IkhTTEEiLG5bbi5DTVlLPTNdPSJDTVlLIn0oR298fChHbz17fSkpLEdvKSkoKSxLbD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLnI9dCx0aGlzLmc9ZSx0aGlzLmI9aSx0aGlzLmE9cn19LGJfPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuaD10LHRoaXMucz1lLHRoaXMudj1pLHRoaXMuYT1yfX0scWQ9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5oPXQsdGhpcy5zPWUsdGhpcy5sPWksdGhpcy5hPXJ9fSxEbT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG89MSl7dGhpcy5jPXQsdGhpcy5tPWUsdGhpcy55PWksdGhpcy5rPXIsdGhpcy5hPW99fSxFNGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMubmV3VmFsdWU9bmV3IEZ9aW5wdXRDaGFuZ2UoZSl7bGV0IGk9ZS50YXJnZXQudmFsdWU7aWYodm9pZCAwPT09dGhpcy5yZyl0aGlzLm5ld1ZhbHVlLmVtaXQoaSk7ZWxzZXtsZXQgcj1wYXJzZUZsb2F0KGkpO3RoaXMubmV3VmFsdWUuZW1pdCh7djpyLHJnOnRoaXMucmd9KX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWRpcj1NZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJ0ZXh0IiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmQSgiaW5wdXQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmlucHV0Q2hhbmdlKG8pfSl9LGlucHV0czp7cmc6InJnIix0ZXh0OiJ0ZXh0In0sb3V0cHV0czp7bmV3VmFsdWU6Im5ld1ZhbHVlIn19KSxufSkoKSxUNGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmVsUmVmPWUsdGhpcy5kcmFnRW5kPW5ldyBGLHRoaXMuZHJhZ1N0YXJ0PW5ldyBGLHRoaXMubmV3VmFsdWU9bmV3IEYsdGhpcy5saXN0ZW5lck1vdmU9aT0+dGhpcy5tb3ZlKGkpLHRoaXMubGlzdGVuZXJTdG9wPSgpPT50aGlzLnN0b3AoKX1tb3VzZURvd24oZSl7dGhpcy5zdGFydChlKX10b3VjaFN0YXJ0KGUpe3RoaXMuc3RhcnQoZSl9bW92ZShlKXtlLnByZXZlbnREZWZhdWx0KCksdGhpcy5zZXRDdXJzb3IoZSl9c3RhcnQoZSl7dGhpcy5zZXRDdXJzb3IoZSksZS5zdG9wUHJvcGFnYXRpb24oKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLmxpc3RlbmVyU3RvcCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLHRoaXMubGlzdGVuZXJTdG9wKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMubGlzdGVuZXJNb3ZlKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHRoaXMubGlzdGVuZXJNb3ZlKSx0aGlzLmRyYWdTdGFydC5lbWl0KCl9c3RvcCgpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMubGlzdGVuZXJTdG9wKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsdGhpcy5saXN0ZW5lclN0b3ApLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5saXN0ZW5lck1vdmUpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsdGhpcy5saXN0ZW5lck1vdmUpLHRoaXMuZHJhZ0VuZC5lbWl0KCl9Z2V0WChlKXtsZXQgaT10aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuKHZvaWQgMCE9PWUucGFnZVg/ZS5wYWdlWDplLnRvdWNoZXNbMF0ucGFnZVgpLWkubGVmdC13aW5kb3cucGFnZVhPZmZzZXR9Z2V0WShlKXtsZXQgaT10aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuKHZvaWQgMCE9PWUucGFnZVk/ZS5wYWdlWTplLnRvdWNoZXNbMF0ucGFnZVkpLWkudG9wLXdpbmRvdy5wYWdlWU9mZnNldH1zZXRDdXJzb3IoZSl7bGV0IGk9dGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoLHI9dGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCxvPU1hdGgubWF4KDAsTWF0aC5taW4odGhpcy5nZXRYKGUpLGkpKSxhPU1hdGgubWF4KDAsTWF0aC5taW4odGhpcy5nZXRZKGUpLHIpKTt2b2lkIDAhPT10aGlzLnJnWCYmdm9pZCAwIT09dGhpcy5yZ1k/dGhpcy5uZXdWYWx1ZS5lbWl0KHtzOm8vaSx2OjEtYS9yLHJnWDp0aGlzLnJnWCxyZ1k6dGhpcy5yZ1l9KTp2b2lkIDA9PT10aGlzLnJnWCYmdm9pZCAwIT09dGhpcy5yZ1k/dGhpcy5uZXdWYWx1ZS5lbWl0KHt2OmEvcixyZ1k6dGhpcy5yZ1l9KTp2b2lkIDAhPT10aGlzLnJnWCYmdm9pZCAwPT09dGhpcy5yZ1kmJnRoaXMubmV3VmFsdWUuZW1pdCh7djpvL2kscmdYOnRoaXMucmdYfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoeGUpKX0sbi5cdTAyNzVkaXI9TWUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwic2xpZGVyIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmQSgibW91c2Vkb3duIixmdW5jdGlvbihvKXtyZXR1cm4gaS5tb3VzZURvd24obyl9KSgidG91Y2hzdGFydCIsZnVuY3Rpb24obyl7cmV0dXJuIGkudG91Y2hTdGFydChvKX0pfSxpbnB1dHM6e3JnWDoicmdYIixyZ1k6InJnWSIsc2xpZGVyOiJzbGlkZXIifSxvdXRwdXRzOntkcmFnRW5kOiJkcmFnRW5kIixkcmFnU3RhcnQ6ImRyYWdTdGFydCIsbmV3VmFsdWU6Im5ld1ZhbHVlIn19KSxufSkoKSxfQT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLmg9dCx0aGlzLnM9ZSx0aGlzLnY9aSx0aGlzLmE9cn19LGJBPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuaD10LHRoaXMucz1lLHRoaXMudj1pLHRoaXMuYT1yfX0sU1Y9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuYWN0aXZlPW51bGx9c2V0QWN0aXZlKGUpe3RoaXMuYWN0aXZlJiZ0aGlzLmFjdGl2ZSE9PWUmJiJpbmxpbmUiIT09dGhpcy5hY3RpdmUuY3BEaWFsb2dEaXNwbGF5JiZ0aGlzLmFjdGl2ZS5jbG9zZURpYWxvZygpLHRoaXMuYWN0aXZlPWV9aHN2YTJoc2xhKGUpe2xldCBpPWUuaCxyPWUucyxvPWUudixhPWUuYTtpZigwPT09bylyZXR1cm4gbmV3IHFkKGksMCwwLGEpO2lmKDA9PT1yJiYxPT09bylyZXR1cm4gbmV3IHFkKGksMSwxLGEpO3tsZXQgcz1vKigyLXIpLzI7cmV0dXJuIG5ldyBxZChpLG8qci8oMS1NYXRoLmFicygyKnMtMSkpLHMsYSl9fWhzbGEyaHN2YShlKXtsZXQgaT1NYXRoLm1pbihlLmgsMSkscj1NYXRoLm1pbihlLnMsMSksbz1NYXRoLm1pbihlLmwsMSksYT1NYXRoLm1pbihlLmEsMSk7aWYoMD09PW8pcmV0dXJuIG5ldyBiXyhpLDAsMCxhKTt7bGV0IHM9bytyKigxLU1hdGguYWJzKDIqby0xKSkvMjtyZXR1cm4gbmV3IGJfKGksMioocy1vKS9zLHMsYSl9fWhzdmFUb1JnYmEoZSl7bGV0IGkscixvLGE9ZS5oLHM9ZS5zLGw9ZS52LGM9ZS5hLGQ9TWF0aC5mbG9vcig2KmEpLHU9NiphLWQscD1sKigxLXMpLGg9bCooMS11KnMpLG09bCooMS0oMS11KSpzKTtzd2l0Y2goZCU2KXtjYXNlIDA6aT1sLHI9bSxvPXA7YnJlYWs7Y2FzZSAxOmk9aCxyPWwsbz1wO2JyZWFrO2Nhc2UgMjppPXAscj1sLG89bTticmVhaztjYXNlIDM6aT1wLHI9aCxvPWw7YnJlYWs7Y2FzZSA0Omk9bSxyPXAsbz1sO2JyZWFrO2Nhc2UgNTppPWwscj1wLG89aDticmVhaztkZWZhdWx0Omk9MCxyPTAsbz0wfXJldHVybiBuZXcgS2woaSxyLG8sYyl9Y215a1RvUmdiKGUpe3JldHVybiBuZXcgS2woKDEtZS5jKSooMS1lLmspLCgxLWUubSkqKDEtZS5rKSwoMS1lLnkpKigxLWUuayksZS5hKX1yZ2JhVG9DbXlrKGUpe2xldCBpPTEtTWF0aC5tYXgoZS5yLGUuZyxlLmIpO3JldHVybiAxPT09aT9uZXcgRG0oMCwwLDAsMSxlLmEpOm5ldyBEbSgoMS1lLnItaSkvKDEtaSksKDEtZS5nLWkpLygxLWkpLCgxLWUuYi1pKS8oMS1pKSxpLGUuYSl9cmdiYVRvSHN2YShlKXtsZXQgaSxyLG89TWF0aC5taW4oZS5yLDEpLGE9TWF0aC5taW4oZS5nLDEpLHM9TWF0aC5taW4oZS5iLDEpLGw9TWF0aC5taW4oZS5hLDEpLGM9TWF0aC5tYXgobyxhLHMpLGQ9TWF0aC5taW4obyxhLHMpLHU9YyxwPWMtZDtpZihyPTA9PT1jPzA6cC9jLGM9PT1kKWk9MDtlbHNle3N3aXRjaChjKXtjYXNlIG86aT0oYS1zKS9wKyhhPHM/NjowKTticmVhaztjYXNlIGE6aT0ocy1vKS9wKzI7YnJlYWs7Y2FzZSBzOmk9KG8tYSkvcCs0O2JyZWFrO2RlZmF1bHQ6aT0wfWkvPTZ9cmV0dXJuIG5ldyBiXyhpLHIsdSxsKX1yZ2JhVG9IZXgoZSxpKXtsZXQgcj0iIyIrKDE2Nzc3MjE2fGUucjw8MTZ8ZS5nPDw4fGUuYikudG9TdHJpbmcoMTYpLnN1YnN0cigxKTtyZXR1cm4gaSYmKHIrPSgyNTZ8TWF0aC5yb3VuZCgyNTUqZS5hKSkudG9TdHJpbmcoMTYpLnN1YnN0cigxKSkscn1ub3JtYWxpemVDTVlLKGUpe3JldHVybiBuZXcgRG0oZS5jLzEwMCxlLm0vMTAwLGUueS8xMDAsZS5rLzEwMCxlLmEpfWRlbm9ybWFsaXplQ01ZSyhlKXtyZXR1cm4gbmV3IERtKE1hdGguZmxvb3IoMTAwKmUuYyksTWF0aC5mbG9vcigxMDAqZS5tKSxNYXRoLmZsb29yKDEwMCplLnkpLE1hdGguZmxvb3IoMTAwKmUuayksZS5hKX1kZW5vcm1hbGl6ZVJHQkEoZSl7cmV0dXJuIG5ldyBLbChNYXRoLnJvdW5kKDI1NSplLnIpLE1hdGgucm91bmQoMjU1KmUuZyksTWF0aC5yb3VuZCgyNTUqZS5iKSxlLmEpfXN0cmluZ1RvSHN2YShlPSIiLGk9ITEpe2xldCByPW51bGw7ZT0oZXx8IiIpLnRvTG93ZXJDYXNlKCk7bGV0IG89W3tyZTovKHJnYilhP1woXHMqKFxkezEsM30pXHMqLFxzKihcZHsxLDN9KVxzKiU/LFxzKihcZHsxLDN9KVxzKiU/KD86LFxzKihcZCsoPzpcLlxkKyk/KVxzKik/XCkvLHBhcnNlOmZ1bmN0aW9uKGEpe3JldHVybiBuZXcgS2wocGFyc2VJbnQoYVsyXSwxMCkvMjU1LHBhcnNlSW50KGFbM10sMTApLzI1NSxwYXJzZUludChhWzRdLDEwKS8yNTUsaXNOYU4ocGFyc2VGbG9hdChhWzVdKSk/MTpwYXJzZUZsb2F0KGFbNV0pKX19LHtyZTovKGhzbClhP1woXHMqKFxkezEsM30pXHMqLFxzKihcZHsxLDN9KSVccyosXHMqKFxkezEsM30pJVxzKig/OixccyooXGQrKD86XC5cZCspPylccyopP1wpLyxwYXJzZTpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IHFkKHBhcnNlSW50KGFbMl0sMTApLzM2MCxwYXJzZUludChhWzNdLDEwKS8xMDAscGFyc2VJbnQoYVs0XSwxMCkvMTAwLGlzTmFOKHBhcnNlRmxvYXQoYVs1XSkpPzE6cGFyc2VGbG9hdChhWzVdKSl9fV07by5wdXNoKGk/e3JlOi8jKFthLWZBLUYwLTldezJ9KShbYS1mQS1GMC05XXsyfSkoW2EtZkEtRjAtOV17Mn0pKFthLWZBLUYwLTldezJ9KT8kLyxwYXJzZTpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IEtsKHBhcnNlSW50KGFbMV0sMTYpLzI1NSxwYXJzZUludChhWzJdLDE2KS8yNTUscGFyc2VJbnQoYVszXSwxNikvMjU1LHBhcnNlSW50KGFbNF18fCJGRiIsMTYpLzI1NSl9fTp7cmU6LyMoW2EtZkEtRjAtOV17Mn0pKFthLWZBLUYwLTldezJ9KShbYS1mQS1GMC05XXsyfSkkLyxwYXJzZTpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IEtsKHBhcnNlSW50KGFbMV0sMTYpLzI1NSxwYXJzZUludChhWzJdLDE2KS8yNTUscGFyc2VJbnQoYVszXSwxNikvMjU1LDEpfX0pLG8ucHVzaCh7cmU6LyMoW2EtZkEtRjAtOV0pKFthLWZBLUYwLTldKShbYS1mQS1GMC05XSkkLyxwYXJzZTpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IEtsKHBhcnNlSW50KGFbMV0rYVsxXSwxNikvMjU1LHBhcnNlSW50KGFbMl0rYVsyXSwxNikvMjU1LHBhcnNlSW50KGFbM10rYVszXSwxNikvMjU1LDEpfX0pO2ZvcihsZXQgYSBpbiBvKWlmKG8uaGFzT3duUHJvcGVydHkoYSkpe2xldCBzPW9bYV0sbD1zLnJlLmV4ZWMoZSksYz1sJiZzLnBhcnNlKGwpO2lmKGMpcmV0dXJuIGMgaW5zdGFuY2VvZiBLbD9yPXRoaXMucmdiYVRvSHN2YShjKTpjIGluc3RhbmNlb2YgcWQmJihyPXRoaXMuaHNsYTJoc3ZhKGMpKSxyfXJldHVybiByfW91dHB1dEZvcm1hdChlLGkscil7c3dpdGNoKCJhdXRvIj09PWkmJihpPWUuYTwxPyJyZ2JhIjoiaGV4IiksaSl7Y2FzZSJoc2xhIjpsZXQgbz10aGlzLmhzdmEyaHNsYShlKSxhPW5ldyBxZChNYXRoLnJvdW5kKDM2MCpvLmgpLE1hdGgucm91bmQoMTAwKm8ucyksTWF0aC5yb3VuZCgxMDAqby5sKSxNYXRoLnJvdW5kKDEwMCpvLmEpLzEwMCk7cmV0dXJuIGUuYTwxfHwiYWx3YXlzIj09PXI/ImhzbGEoIithLmgrIiwiK2EucysiJSwiK2EubCsiJSwiK2EuYSsiKSI6ImhzbCgiK2EuaCsiLCIrYS5zKyIlLCIrYS5sKyIlKSI7Y2FzZSJyZ2JhIjpsZXQgcz10aGlzLmRlbm9ybWFsaXplUkdCQSh0aGlzLmhzdmFUb1JnYmEoZSkpO3JldHVybiBlLmE8MXx8ImFsd2F5cyI9PT1yPyJyZ2JhKCIrcy5yKyIsIitzLmcrIiwiK3MuYisiLCIrTWF0aC5yb3VuZCgxMDAqcy5hKS8xMDArIikiOiJyZ2IoIitzLnIrIiwiK3MuZysiLCIrcy5iKyIpIjtkZWZhdWx0OmxldCBsPSJhbHdheXMiPT09cnx8ImZvcmNlZCI9PT1yO3JldHVybiB0aGlzLnJnYmFUb0hleCh0aGlzLmRlbm9ybWFsaXplUkdCQSh0aGlzLmhzdmFUb1JnYmEoZSkpLGwpfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksTG5lPXR5cGVvZiB3aW5kb3c8InUiJiYib250b3VjaHN0YXJ0ImluIHdpbmRvdyxENGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLGEscyl7dGhpcy5uZ1pvbmU9ZSx0aGlzLmVsUmVmPWksdGhpcy5jZFJlZj1yLHRoaXMuZG9jdW1lbnQ9byx0aGlzLnBsYXRmb3JtSWQ9YSx0aGlzLnNlcnZpY2U9cyx0aGlzLmlzSUUxMD0hMSx0aGlzLmRpYWxvZ0Fycm93U2l6ZT0xMCx0aGlzLmRpYWxvZ0Fycm93T2Zmc2V0PTE1LHRoaXMuZGlhbG9nSW5wdXRGaWVsZHM9W0dvLkhFWCxHby5SR0JBLEdvLkhTTEEsR28uQ01ZS10sdGhpcy51c2VSb290Vmlld0NvbnRhaW5lcj0hMSx0aGlzLmV5ZURyb3BwZXJTdXBwb3J0ZWQ9X3codGhpcy5wbGF0Zm9ybUlkKSYmIkV5ZURyb3BwZXIiaW4gdGhpcy5kb2N1bWVudC5kZWZhdWx0Vmlld31oYW5kbGVFc2MoZSl7dGhpcy5zaG93JiYicG9wdXAiPT09dGhpcy5jcERpYWxvZ0Rpc3BsYXkmJnRoaXMub25DYW5jZWxDb2xvcihlKX1oYW5kbGVFbnRlcihlKXt0aGlzLnNob3cmJiJwb3B1cCI9PT10aGlzLmNwRGlhbG9nRGlzcGxheSYmdGhpcy5vbkFjY2VwdENvbG9yKGUpfW5nT25Jbml0KCl7dGhpcy5zbGlkZXI9bmV3IF9BKDAsMCwwLDApLHRoaXMuc2xpZGVyRGltTWF4PW5ldyBiQSh0aGlzLmh1ZVNsaWRlci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRofHwxNDAsdGhpcy5jcFdpZHRoLDEzMCx0aGlzLmFscGhhU2xpZGVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGh8fDE0MCksdGhpcy5mb3JtYXQ9dGhpcy5jcENteWtFbmFibGVkP0dvLkNNWUs6InJnYmEiPT09dGhpcy5jcE91dHB1dEZvcm1hdD9Hby5SR0JBOiJoc2xhIj09PXRoaXMuY3BPdXRwdXRGb3JtYXQ/R28uSFNMQTpHby5IRVgsdGhpcy5saXN0ZW5lck1vdXNlRG93bj1yPT57dGhpcy5vbk1vdXNlRG93bihyKX0sdGhpcy5saXN0ZW5lclJlc2l6ZT0oKT0+e3RoaXMub25SZXNpemUoKX0sdGhpcy5vcGVuRGlhbG9nKHRoaXMuaW5pdGlhbENvbG9yLCExKX1uZ09uRGVzdHJveSgpe3RoaXMuY2xvc2VEaWFsb2coKX1uZ0FmdGVyVmlld0luaXQoKXsyMzA9PT10aGlzLmNwV2lkdGgmJiJpbmxpbmUiIT09dGhpcy5jcERpYWxvZ0Rpc3BsYXl8fCh0aGlzLnNsaWRlckRpbU1heD1uZXcgYkEodGhpcy5odWVTbGlkZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aHx8MTQwLHRoaXMuY3BXaWR0aCwxMzAsdGhpcy5hbHBoYVNsaWRlci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRofHwxNDApLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoITEpLHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpKX1vcGVuRGlhbG9nKGUsaT0hMCl7dGhpcy5zZXJ2aWNlLnNldEFjdGl2ZSh0aGlzKSx0aGlzLndpZHRofHwodGhpcy5jcFdpZHRoPXRoaXMuZGlyZWN0aXZlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoKSx0aGlzLmhlaWdodHx8KHRoaXMuaGVpZ2h0PTMyMCksdGhpcy5zZXRJbml0aWFsQ29sb3IoZSksdGhpcy5zZXRDb2xvckZyb21TdHJpbmcoZSxpKSx0aGlzLm9wZW5Db2xvclBpY2tlcigpfWNsb3NlRGlhbG9nKCl7dGhpcy5jbG9zZUNvbG9yUGlja2VyKCl9c2V0dXBEaWFsb2coZSxpLHIsbyxhLHMsbCxjLGQsdSxwLGgsbSxfLE0seSx4LFIsSSxCLGVlLFEsd2UsUWUsQWUsRCxyZSxjZSxoZSxfZSwkLGRlLHBlLEdlLFNlLEZlLGx0LE10KXt0aGlzLnNldEluaXRpYWxDb2xvcihyKSx0aGlzLnNldENvbG9yTW9kZShjKSx0aGlzLmlzSUUxMD0xMD09PWZ1bmN0aW9uKCl7bGV0IG49IiI7dHlwZW9mIG5hdmlnYXRvcjwidSImJihuPW5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSk7bGV0IHQ9bi5pbmRleE9mKCJtc2llICIpO3JldHVybiB0PjAmJnBhcnNlSW50KG4uc3Vic3RyaW5nKHQrNSxuLmluZGV4T2YoIi4iLHQpKSwxMCl9KCksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZT1lLHRoaXMuZGlyZWN0aXZlRWxlbWVudFJlZj1pLHRoaXMuY3BEaXNhYmxlSW5wdXQ9aCx0aGlzLmNwQ215a0VuYWJsZWQ9ZCx0aGlzLmNwQWxwaGFDaGFubmVsPXUsdGhpcy5jcE91dHB1dEZvcm1hdD1wLHRoaXMuY3BEaWFsb2dEaXNwbGF5PXMsdGhpcy5jcElnbm9yZWRFbGVtZW50cz1tLHRoaXMuY3BTYXZlQ2xpY2tPdXRzaWRlPV8sdGhpcy5jcENsb3NlQ2xpY2tPdXRzaWRlPU0sdGhpcy51c2VSb290Vmlld0NvbnRhaW5lcj15LHRoaXMud2lkdGg9dGhpcy5jcFdpZHRoPXBhcnNlSW50KG8sMTApLHRoaXMuaGVpZ2h0PXRoaXMuY3BIZWlnaHQ9cGFyc2VJbnQoYSwxMCksdGhpcy5jcFBvc2l0aW9uPXgsdGhpcy5jcFBvc2l0aW9uT2Zmc2V0PXBhcnNlSW50KFIsMTApLHRoaXMuY3BPS0J1dHRvbj1ELHRoaXMuY3BPS0J1dHRvblRleHQ9Y2UsdGhpcy5jcE9LQnV0dG9uQ2xhc3M9cmUsdGhpcy5jcENhbmNlbEJ1dHRvbj1oZSx0aGlzLmNwQ2FuY2VsQnV0dG9uVGV4dD0kLHRoaXMuY3BDYW5jZWxCdXR0b25DbGFzcz1fZSx0aGlzLmNwRXllRHJvcHBlcj1GZSx0aGlzLmZhbGxiYWNrQ29sb3I9bHx8IiNmZmYiLHRoaXMuc2V0UHJlc2V0Q29uZmlnKEIsZWUpLHRoaXMuY3BQcmVzZXRDb2xvcnNDbGFzcz1RLHRoaXMuY3BNYXhQcmVzZXRDb2xvcnNMZW5ndGg9d2UsdGhpcy5jcFByZXNldEVtcHR5TWVzc2FnZT1RZSx0aGlzLmNwUHJlc2V0RW1wdHlNZXNzYWdlQ2xhc3M9QWUsdGhpcy5jcEFkZENvbG9yQnV0dG9uPWRlLHRoaXMuY3BBZGRDb2xvckJ1dHRvblRleHQ9R2UsdGhpcy5jcEFkZENvbG9yQnV0dG9uQ2xhc3M9cGUsdGhpcy5jcFJlbW92ZUNvbG9yQnV0dG9uQ2xhc3M9U2UsdGhpcy5jcFRyaWdnZXJFbGVtZW50PWx0LHRoaXMuY3BFeHRyYVRlbXBsYXRlPU10LEl8fCh0aGlzLmRpYWxvZ0Fycm93T2Zmc2V0PTApLCJpbmxpbmUiPT09cyYmKHRoaXMuZGlhbG9nQXJyb3dTaXplPTAsdGhpcy5kaWFsb2dBcnJvd09mZnNldD0wKSwiaGV4Ij09PXAmJiJhbHdheXMiIT09dSYmImZvcmNlZCIhPT11JiYodGhpcy5jcEFscGhhQ2hhbm5lbD0iZGlzYWJsZWQiKX1zZXRDb2xvck1vZGUoZSl7c3dpdGNoKGUudG9TdHJpbmcoKS50b1VwcGVyQ2FzZSgpKXtjYXNlIjEiOmNhc2UiQyI6Y2FzZSJDT0xPUiI6ZGVmYXVsdDp0aGlzLmNwQ29sb3JNb2RlPTE7YnJlYWs7Y2FzZSIyIjpjYXNlIkciOmNhc2UiR1JBWVNDQUxFIjp0aGlzLmNwQ29sb3JNb2RlPTI7YnJlYWs7Y2FzZSIzIjpjYXNlIlAiOmNhc2UiUFJFU0VUUyI6dGhpcy5jcENvbG9yTW9kZT0zfX1zZXRJbml0aWFsQ29sb3IoZSl7dGhpcy5pbml0aWFsQ29sb3I9ZX1zZXRQcmVzZXRDb25maWcoZSxpKXt0aGlzLmNwUHJlc2V0TGFiZWw9ZSx0aGlzLmNwUHJlc2V0Q29sb3JzPWl9c2V0Q29sb3JGcm9tU3RyaW5nKGUsaT0hMCxyPSEwKXtsZXQgbzsiYWx3YXlzIj09PXRoaXMuY3BBbHBoYUNoYW5uZWx8fCJmb3JjZWQiPT09dGhpcy5jcEFscGhhQ2hhbm5lbD8obz10aGlzLnNlcnZpY2Uuc3RyaW5nVG9Ic3ZhKGUsITApLCFvJiYhdGhpcy5oc3ZhJiYobz10aGlzLnNlcnZpY2Uuc3RyaW5nVG9Ic3ZhKGUsITEpKSk6bz10aGlzLnNlcnZpY2Uuc3RyaW5nVG9Ic3ZhKGUsITEpLCFvJiYhdGhpcy5oc3ZhJiYobz10aGlzLnNlcnZpY2Uuc3RyaW5nVG9Ic3ZhKHRoaXMuZmFsbGJhY2tDb2xvciwhMSkpLG8mJih0aGlzLmhzdmE9byx0aGlzLnNsaWRlckg9dGhpcy5oc3ZhLmgsImhleCI9PT10aGlzLmNwT3V0cHV0Rm9ybWF0JiYiZGlzYWJsZWQiPT09dGhpcy5jcEFscGhhQ2hhbm5lbCYmKHRoaXMuaHN2YS5hPTEpLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoaSxyKSl9b25SZXNpemUoKXsiZml4ZWQiPT09dGhpcy5wb3NpdGlvbj90aGlzLnNldERpYWxvZ1Bvc2l0aW9uKCk6ImlubGluZSIhPT10aGlzLmNwRGlhbG9nRGlzcGxheSYmdGhpcy5jbG9zZUNvbG9yUGlja2VyKCl9b25EcmFnRW5kKGUpe3RoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc2xpZGVyRHJhZ0VuZCh7c2xpZGVyOmUsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uRHJhZ1N0YXJ0KGUpe3RoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc2xpZGVyRHJhZ1N0YXJ0KHtzbGlkZXI6ZSxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25Nb3VzZURvd24oZSl7dGhpcy5zaG93JiYhdGhpcy5pc0lFMTAmJiJwb3B1cCI9PT10aGlzLmNwRGlhbG9nRGlzcGxheSYmZS50YXJnZXQhPT10aGlzLmRpcmVjdGl2ZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCYmIXRoaXMuaXNEZXNjZW5kYW50KHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCxlLnRhcmdldCkmJiF0aGlzLmlzRGVzY2VuZGFudCh0aGlzLmRpcmVjdGl2ZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxlLnRhcmdldCkmJjA9PT10aGlzLmNwSWdub3JlZEVsZW1lbnRzLmZpbHRlcihpPT5pPT09ZS50YXJnZXQpLmxlbmd0aCYmdGhpcy5uZ1pvbmUucnVuKCgpPT57dGhpcy5jcFNhdmVDbGlja091dHNpZGU/dGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5jb2xvclNlbGVjdGVkKHRoaXMub3V0cHV0Q29sb3IpOih0aGlzLmhzdmE9bnVsbCx0aGlzLnNldENvbG9yRnJvbVN0cmluZyh0aGlzLmluaXRpYWxDb2xvciwhMSksdGhpcy5jcENteWtFbmFibGVkJiZ0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmNteWtDaGFuZ2VkKHRoaXMuY215a0NvbG9yKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmNvbG9yQ2hhbmdlZCh0aGlzLmluaXRpYWxDb2xvciksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5jb2xvckNhbmNlbGVkKCkpLHRoaXMuY3BDbG9zZUNsaWNrT3V0c2lkZSYmdGhpcy5jbG9zZUNvbG9yUGlja2VyKCl9KX1vbkFjY2VwdENvbG9yKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5vdXRwdXRDb2xvciYmdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5jb2xvclNlbGVjdGVkKHRoaXMub3V0cHV0Q29sb3IpLCJwb3B1cCI9PT10aGlzLmNwRGlhbG9nRGlzcGxheSYmdGhpcy5jbG9zZUNvbG9yUGlja2VyKCl9b25DYW5jZWxDb2xvcihlKXt0aGlzLmhzdmE9bnVsbCxlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY29sb3JDYW5jZWxlZCgpLHRoaXMuc2V0Q29sb3JGcm9tU3RyaW5nKHRoaXMuaW5pdGlhbENvbG9yLCEwKSwicG9wdXAiPT09dGhpcy5jcERpYWxvZ0Rpc3BsYXkmJih0aGlzLmNwQ215a0VuYWJsZWQmJnRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY215a0NoYW5nZWQodGhpcy5jbXlrQ29sb3IpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY29sb3JDaGFuZ2VkKHRoaXMuaW5pdGlhbENvbG9yLCEwKSx0aGlzLmNsb3NlQ29sb3JQaWNrZXIoKSl9b25FeWVEcm9wcGVyKCl7dGhpcy5leWVEcm9wcGVyU3VwcG9ydGVkJiYobmV3IHdpbmRvdy5FeWVEcm9wcGVyKS5vcGVuKCkudGhlbihpPT57dGhpcy5zZXRDb2xvckZyb21TdHJpbmcoaS5zUkdCSGV4LCEwKX0pfW9uRm9ybWF0VG9nZ2xlKGUpe2xldCBpPXRoaXMuZGlhbG9nSW5wdXRGaWVsZHMubGVuZ3RoLSh0aGlzLmNwQ215a0VuYWJsZWQ/MDoxKSxyPSgodGhpcy5kaWFsb2dJbnB1dEZpZWxkcy5pbmRleE9mKHRoaXMuZm9ybWF0KStlKSVpK2kpJWk7dGhpcy5mb3JtYXQ9dGhpcy5kaWFsb2dJbnB1dEZpZWxkc1tyXX1vbkNvbG9yQ2hhbmdlKGUpe3RoaXMuaHN2YS5zPWUucy9lLnJnWCx0aGlzLmhzdmEudj1lLnYvZS5yZ1ksdGhpcy51cGRhdGVDb2xvclBpY2tlcigpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc2xpZGVyQ2hhbmdlZCh7c2xpZGVyOiJsaWdodG5lc3MiLHZhbHVlOnRoaXMuaHN2YS52LGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnNsaWRlckNoYW5nZWQoe3NsaWRlcjoic2F0dXJhdGlvbiIsdmFsdWU6dGhpcy5oc3ZhLnMsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uSHVlQ2hhbmdlKGUpe3RoaXMuaHN2YS5oPWUudi9lLnJnWCx0aGlzLnNsaWRlckg9dGhpcy5oc3ZhLmgsdGhpcy51cGRhdGVDb2xvclBpY2tlcigpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc2xpZGVyQ2hhbmdlZCh7c2xpZGVyOiJodWUiLHZhbHVlOnRoaXMuaHN2YS5oLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vblZhbHVlQ2hhbmdlKGUpe3RoaXMuaHN2YS52PWUudi9lLnJnWCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5zbGlkZXJDaGFuZ2VkKHtzbGlkZXI6InZhbHVlIix2YWx1ZTp0aGlzLmhzdmEudixjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25BbHBoYUNoYW5nZShlKXt0aGlzLmhzdmEuYT1lLnYvZS5yZ1gsdGhpcy51cGRhdGVDb2xvclBpY2tlcigpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc2xpZGVyQ2hhbmdlZCh7c2xpZGVyOiJhbHBoYSIsdmFsdWU6dGhpcy5oc3ZhLmEsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uSGV4SW5wdXQoZSl7aWYobnVsbD09PWUpdGhpcy51cGRhdGVDb2xvclBpY2tlcigpO2Vsc2V7ZSYmIiMiIT09ZVswXSYmKGU9IiMiK2UpO2xldCBpPS9eIyhbYS1mMC05XXszfXxbYS1mMC05XXs2fSkkL2dpOyJhbHdheXMiPT09dGhpcy5jcEFscGhhQ2hhbm5lbCYmKGk9L14jKFthLWYwLTldezN9fFthLWYwLTldezZ9fFthLWYwLTldezh9KSQvZ2kpO2xldCByPWkudGVzdChlKTtyJiYoZS5sZW5ndGg8NSYmKGU9IiMiK2Uuc3Vic3RyaW5nKDEpLnNwbGl0KCIiKS5tYXAobz0+bytvKS5qb2luKCIiKSksImZvcmNlZCI9PT10aGlzLmNwQWxwaGFDaGFubmVsJiYoZSs9TWF0aC5yb3VuZCgyNTUqdGhpcy5oc3ZhLmEpLnRvU3RyaW5nKDE2KSksdGhpcy5zZXRDb2xvckZyb21TdHJpbmcoZSwhMCwhMSkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoiaGV4Iix2YWxpZDpyLHZhbHVlOmUsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfX1vblJlZElucHV0KGUpe2xldCBpPXRoaXMuc2VydmljZS5oc3ZhVG9SZ2JhKHRoaXMuaHN2YSkscj0haXNOYU4oZS52KSYmZS52Pj0wJiZlLnY8PWUucmc7ciYmKGkucj1lLnYvZS5yZyx0aGlzLmhzdmE9dGhpcy5zZXJ2aWNlLnJnYmFUb0hzdmEoaSksdGhpcy5zbGlkZXJIPXRoaXMuaHN2YS5oLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJyZWQiLHZhbGlkOnIsdmFsdWU6aS5yLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkJsdWVJbnB1dChlKXtsZXQgaT10aGlzLnNlcnZpY2UuaHN2YVRvUmdiYSh0aGlzLmhzdmEpLHI9IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnO3ImJihpLmI9ZS52L2UucmcsdGhpcy5oc3ZhPXRoaXMuc2VydmljZS5yZ2JhVG9Ic3ZhKGkpLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoiYmx1ZSIsdmFsaWQ6cix2YWx1ZTppLmIsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uR3JlZW5JbnB1dChlKXtsZXQgaT10aGlzLnNlcnZpY2UuaHN2YVRvUmdiYSh0aGlzLmhzdmEpLHI9IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnO3ImJihpLmc9ZS52L2UucmcsdGhpcy5oc3ZhPXRoaXMuc2VydmljZS5yZ2JhVG9Ic3ZhKGkpLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoiZ3JlZW4iLHZhbGlkOnIsdmFsdWU6aS5nLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkh1ZUlucHV0KGUpe2xldCBpPSFpc05hTihlLnYpJiZlLnY+PTAmJmUudjw9ZS5yZztpJiYodGhpcy5oc3ZhLmg9ZS52L2UucmcsdGhpcy5zbGlkZXJIPXRoaXMuaHN2YS5oLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJodWUiLHZhbGlkOmksdmFsdWU6dGhpcy5oc3ZhLmgsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uVmFsdWVJbnB1dChlKXtsZXQgaT0haXNOYU4oZS52KSYmZS52Pj0wJiZlLnY8PWUucmc7aSYmKHRoaXMuaHN2YS52PWUudi9lLnJnLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJ2YWx1ZSIsdmFsaWQ6aSx2YWx1ZTp0aGlzLmhzdmEudixjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25BbHBoYUlucHV0KGUpe2xldCBpPSFpc05hTihlLnYpJiZlLnY+PTAmJmUudjw9ZS5yZztpJiYodGhpcy5oc3ZhLmE9ZS52L2UucmcsdGhpcy51cGRhdGVDb2xvclBpY2tlcigpKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6ImFscGhhIix2YWxpZDppLHZhbHVlOnRoaXMuaHN2YS5hLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkxpZ2h0bmVzc0lucHV0KGUpe2xldCBpPXRoaXMuc2VydmljZS5oc3ZhMmhzbGEodGhpcy5oc3ZhKSxyPSFpc05hTihlLnYpJiZlLnY+PTAmJmUudjw9ZS5yZztyJiYoaS5sPWUudi9lLnJnLHRoaXMuaHN2YT10aGlzLnNlcnZpY2UuaHNsYTJoc3ZhKGkpLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoibGlnaHRuZXNzIix2YWxpZDpyLHZhbHVlOmkubCxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25TYXR1cmF0aW9uSW5wdXQoZSl7bGV0IGk9dGhpcy5zZXJ2aWNlLmhzdmEyaHNsYSh0aGlzLmhzdmEpLHI9IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnO3ImJihpLnM9ZS52L2UucmcsdGhpcy5oc3ZhPXRoaXMuc2VydmljZS5oc2xhMmhzdmEoaSksdGhpcy5zbGlkZXJIPXRoaXMuaHN2YS5oLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJzYXR1cmF0aW9uIix2YWxpZDpyLHZhbHVlOmkucyxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25DeWFuSW5wdXQoZSl7IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnJiYodGhpcy5jbXlrLmM9ZS52LHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoITEsITAsITApKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6ImN5YW4iLHZhbGlkOiEwLHZhbHVlOnRoaXMuY215ay5jLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbk1hZ2VudGFJbnB1dChlKXshaXNOYU4oZS52KSYmZS52Pj0wJiZlLnY8PWUucmcmJih0aGlzLmNteWsubT1lLnYsdGhpcy51cGRhdGVDb2xvclBpY2tlcighMSwhMCwhMCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoibWFnZW50YSIsdmFsaWQ6ITAsdmFsdWU6dGhpcy5jbXlrLm0sY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uWWVsbG93SW5wdXQoZSl7IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnJiYodGhpcy5jbXlrLnk9ZS52LHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoITEsITAsITApKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6InllbGxvdyIsdmFsaWQ6ITAsdmFsdWU6dGhpcy5jbXlrLnksY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uQmxhY2tJbnB1dChlKXshaXNOYU4oZS52KSYmZS52Pj0wJiZlLnY8PWUucmcmJih0aGlzLmNteWsuaz1lLnYsdGhpcy51cGRhdGVDb2xvclBpY2tlcighMSwhMCwhMCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoiYmxhY2siLHZhbGlkOiEwLHZhbHVlOnRoaXMuY215ay5rLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkFkZFByZXNldENvbG9yKGUsaSl7ZS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmNwUHJlc2V0Q29sb3JzLmZpbHRlcihyPT5yPT09aSkubGVuZ3RofHwodGhpcy5jcFByZXNldENvbG9ycz10aGlzLmNwUHJlc2V0Q29sb3JzLmNvbmNhdChpKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnByZXNldENvbG9yc0NoYW5nZWQodGhpcy5jcFByZXNldENvbG9ycykpfW9uUmVtb3ZlUHJlc2V0Q29sb3IoZSxpKXtlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuY3BQcmVzZXRDb2xvcnM9dGhpcy5jcFByZXNldENvbG9ycy5maWx0ZXIocj0+ciE9PWkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UucHJlc2V0Q29sb3JzQ2hhbmdlZCh0aGlzLmNwUHJlc2V0Q29sb3JzKX1vcGVuQ29sb3JQaWNrZXIoKXt0aGlzLnNob3d8fCh0aGlzLnNob3c9ITAsdGhpcy5oaWRkZW49ITAsc2V0VGltZW91dCgoKT0+e3RoaXMuaGlkZGVuPSExLHRoaXMuc2V0RGlhbG9nUG9zaXRpb24oKSx0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKX0sMCksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5zdGF0ZUNoYW5nZWQoITApLHRoaXMuaXNJRTEwfHx0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e0xuZT9kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix0aGlzLmxpc3RlbmVyTW91c2VEb3duKTpkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMubGlzdGVuZXJNb3VzZURvd24pfSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5saXN0ZW5lclJlc2l6ZSkpfWNsb3NlQ29sb3JQaWNrZXIoKXt0aGlzLnNob3cmJih0aGlzLnNob3c9ITEsdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5zdGF0ZUNoYW5nZWQoITEpLHRoaXMuaXNJRTEwfHwoTG5lP2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMubGlzdGVuZXJNb3VzZURvd24pOmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5saXN0ZW5lck1vdXNlRG93bikpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMubGlzdGVuZXJSZXNpemUpLHRoaXMuY2RSZWYuZGVzdHJveWVkfHx0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKSl9dXBkYXRlQ29sb3JQaWNrZXIoZT0hMCxpPSEwLHI9ITEpe2lmKHRoaXMuc2xpZGVyRGltTWF4KXsyPT09dGhpcy5jcENvbG9yTW9kZSYmKHRoaXMuaHN2YS5zPTApO2xldCBvLGEscyxsPXRoaXMub3V0cHV0Q29sb3I7aWYoYT10aGlzLnNlcnZpY2UuaHN2YTJoc2xhKHRoaXMuaHN2YSksdGhpcy5jcENteWtFbmFibGVkPyhyPyhzPXRoaXMuc2VydmljZS5jbXlrVG9SZ2IodGhpcy5zZXJ2aWNlLm5vcm1hbGl6ZUNNWUsodGhpcy5jbXlrKSksdGhpcy5oc3ZhPXRoaXMuc2VydmljZS5yZ2JhVG9Ic3ZhKHMpKToocz10aGlzLnNlcnZpY2UuaHN2YVRvUmdiYSh0aGlzLmhzdmEpLHRoaXMuY215az10aGlzLnNlcnZpY2UuZGVub3JtYWxpemVDTVlLKHRoaXMuc2VydmljZS5yZ2JhVG9DbXlrKHMpKSkscz10aGlzLnNlcnZpY2UuZGVub3JtYWxpemVSR0JBKHMpLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCk6cz10aGlzLnNlcnZpY2UuZGVub3JtYWxpemVSR0JBKHRoaXMuc2VydmljZS5oc3ZhVG9SZ2JhKHRoaXMuaHN2YSkpLG89dGhpcy5zZXJ2aWNlLmRlbm9ybWFsaXplUkdCQSh0aGlzLnNlcnZpY2UuaHN2YVRvUmdiYShuZXcgYl8odGhpcy5zbGlkZXJIfHx0aGlzLmhzdmEuaCwxLDEsMSkpKSxpJiYodGhpcy5oc2xhVGV4dD1uZXcgcWQoTWF0aC5yb3VuZCgzNjAqYS5oKSxNYXRoLnJvdW5kKDEwMCphLnMpLE1hdGgucm91bmQoMTAwKmEubCksTWF0aC5yb3VuZCgxMDAqYS5hKS8xMDApLHRoaXMucmdiYVRleHQ9bmV3IEtsKHMucixzLmcscy5iLE1hdGgucm91bmQoMTAwKnMuYSkvMTAwKSx0aGlzLmNwQ215a0VuYWJsZWQmJih0aGlzLmNteWtUZXh0PW5ldyBEbSh0aGlzLmNteWsuYyx0aGlzLmNteWsubSx0aGlzLmNteWsueSx0aGlzLmNteWsuayxNYXRoLnJvdW5kKDEwMCp0aGlzLmNteWsuYSkvMTAwKSksdGhpcy5oZXhUZXh0PXRoaXMuc2VydmljZS5yZ2JhVG9IZXgocywiYWx3YXlzIj09PXRoaXMuY3BBbHBoYUNoYW5uZWwpLHRoaXMuaGV4QWxwaGE9dGhpcy5yZ2JhVGV4dC5hKSwiYXV0byI9PT10aGlzLmNwT3V0cHV0Rm9ybWF0JiZ0aGlzLmZvcm1hdCE9PUdvLlJHQkEmJnRoaXMuZm9ybWF0IT09R28uQ01ZSyYmdGhpcy5mb3JtYXQhPT1Hby5IU0xBJiZ0aGlzLmhzdmEuYTwxJiYodGhpcy5mb3JtYXQ9dGhpcy5oc3ZhLmE8MT9Hby5SR0JBOkdvLkhFWCksdGhpcy5odWVTbGlkZXJDb2xvcj0icmdiKCIrby5yKyIsIitvLmcrIiwiK28uYisiKSIsdGhpcy5hbHBoYVNsaWRlckNvbG9yPSJyZ2IoIitzLnIrIiwiK3MuZysiLCIrcy5iKyIpIix0aGlzLm91dHB1dENvbG9yPXRoaXMuc2VydmljZS5vdXRwdXRGb3JtYXQodGhpcy5oc3ZhLHRoaXMuY3BPdXRwdXRGb3JtYXQsdGhpcy5jcEFscGhhQ2hhbm5lbCksdGhpcy5zZWxlY3RlZENvbG9yPXRoaXMuc2VydmljZS5vdXRwdXRGb3JtYXQodGhpcy5oc3ZhLCJyZ2JhIixudWxsKSx0aGlzLmZvcm1hdCE9PUdvLkNNWUspdGhpcy5jbXlrQ29sb3I9IiI7ZWxzZSBpZigiYWx3YXlzIj09PXRoaXMuY3BBbHBoYUNoYW5uZWx8fCJlbmFibGVkIj09PXRoaXMuY3BBbHBoYUNoYW5uZWx8fCJmb3JjZWQiPT09dGhpcy5jcEFscGhhQ2hhbm5lbCl7bGV0IGM9TWF0aC5yb3VuZCgxMDAqdGhpcy5jbXlrLmEpLzEwMDt0aGlzLmNteWtDb2xvcj1gY215a2EoJHt0aGlzLmNteWsuY30sJHt0aGlzLmNteWsubX0sJHt0aGlzLmNteWsueX0sJHt0aGlzLmNteWsua30sJHtjfSlgfWVsc2UgdGhpcy5jbXlrQ29sb3I9YGNteWsoJHt0aGlzLmNteWsuY30sJHt0aGlzLmNteWsubX0sJHt0aGlzLmNteWsueX0sJHt0aGlzLmNteWsua30pYDt0aGlzLnNsaWRlcj1uZXcgX0EoKHRoaXMuc2xpZGVySHx8dGhpcy5oc3ZhLmgpKnRoaXMuc2xpZGVyRGltTWF4LmgtOCx0aGlzLmhzdmEucyp0aGlzLnNsaWRlckRpbU1heC5zLTgsKDEtdGhpcy5oc3ZhLnYpKnRoaXMuc2xpZGVyRGltTWF4LnYtOCx0aGlzLmhzdmEuYSp0aGlzLnNsaWRlckRpbU1heC5hLTgpLGUmJmwhPT10aGlzLm91dHB1dENvbG9yJiYodGhpcy5jcENteWtFbmFibGVkJiZ0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmNteWtDaGFuZ2VkKHRoaXMuY215a0NvbG9yKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmNvbG9yQ2hhbmdlZCh0aGlzLm91dHB1dENvbG9yKSl9fXNldERpYWxvZ1Bvc2l0aW9uKCl7aWYoImlubGluZSI9PT10aGlzLmNwRGlhbG9nRGlzcGxheSl0aGlzLnBvc2l0aW9uPSJyZWxhdGl2ZSI7ZWxzZXtsZXQgcixlPSJzdGF0aWMiLGk9IiIsbz1udWxsLGE9bnVsbCxzPXRoaXMuZGlyZWN0aXZlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGUsbD10aGlzLmRpYWxvZ0VsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQ7Zm9yKDtudWxsIT09cyYmIkhUTUwiIT09cy50YWdOYW1lOyl7aWYocj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShzKSxlPXIuZ2V0UHJvcGVydHlWYWx1ZSgicG9zaXRpb24iKSxpPXIuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIiksInN0YXRpYyIhPT1lJiZudWxsPT09byYmKG89cyksaSYmIm5vbmUiIT09aSYmbnVsbD09PWEmJihhPXMpLCJmaXhlZCI9PT1lKXtvPWE7YnJlYWt9cz1zLnBhcmVudE5vZGV9bGV0IGM9dGhpcy5jcmVhdGVEaWFsb2dCb3godGhpcy5kaXJlY3RpdmVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsImZpeGVkIiE9PWUpO2lmKHRoaXMudXNlUm9vdFZpZXdDb250YWluZXJ8fCJmaXhlZCI9PT1lJiYoIW98fG8gaW5zdGFuY2VvZiBIVE1MVW5rbm93bkVsZW1lbnQpKXRoaXMudG9wPWMudG9wLHRoaXMubGVmdD1jLmxlZnQ7ZWxzZXtudWxsPT09byYmKG89cyk7bGV0IHU9dGhpcy5jcmVhdGVEaWFsb2dCb3gobywiZml4ZWQiIT09ZSk7dGhpcy50b3A9Yy50b3AtdS50b3AsdGhpcy5sZWZ0PWMubGVmdC11LmxlZnR9ImZpeGVkIj09PWUmJih0aGlzLnBvc2l0aW9uPSJmaXhlZCIpO2xldCBkPXRoaXMuY3BQb3NpdGlvbjsiYXV0byI9PT10aGlzLmNwUG9zaXRpb24mJihkPWZ1bmN0aW9uKG4sdCl7bGV0IGU9InJpZ2h0IixpPSJib3R0b20iLHtoZWlnaHQ6cix3aWR0aDpvfT1uLHt0b3A6YSxsZWZ0OnN9PXQsbD1hK3QuaGVpZ2h0LGM9cyt0LndpZHRoLGQ9YS1yPDAsdT1sK3I+KHdpbmRvdy5pbm5lckhlaWdodHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkscD1zLW88MCxoPWMrbz4od2luZG93LmlubmVyV2lkdGh8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCk7cmV0dXJuIHUmJihpPSJ0b3AiKSxkJiYoaT0iYm90dG9tIikscCYmKGU9InJpZ2h0IiksaCYmKGU9ImxlZnQiKSxkJiZ1JiZwJiZoP1sibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIl0ucmVkdWNlKChNLHkpPT5uW01dPm5beV0/TTp5KTpwJiZoP2Q/ImJvdHRvbSI6dXx8YT5sPyJ0b3AiOiJib3R0b20iOmQmJnU/cD8icmlnaHQiOmh8fHM+Yz8ibGVmdCI6InJpZ2h0IjpgJHtpfS0ke2V9YH0odGhpcy5kaWFsb2dFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5jcFRyaWdnZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpKSwidG9wIj09PWQ/KHRoaXMuYXJyb3dUb3A9bC0xLHRoaXMudG9wLT1sK3RoaXMuZGlhbG9nQXJyb3dTaXplLHRoaXMubGVmdCs9dGhpcy5jcFBvc2l0aW9uT2Zmc2V0LzEwMCpjLndpZHRoLXRoaXMuZGlhbG9nQXJyb3dPZmZzZXQpOiJib3R0b20iPT09ZD8odGhpcy50b3ArPWMuaGVpZ2h0K3RoaXMuZGlhbG9nQXJyb3dTaXplLHRoaXMubGVmdCs9dGhpcy5jcFBvc2l0aW9uT2Zmc2V0LzEwMCpjLndpZHRoLXRoaXMuZGlhbG9nQXJyb3dPZmZzZXQpOiJ0b3AtbGVmdCI9PT1kfHwibGVmdC10b3AiPT09ZD8odGhpcy50b3AtPWwtYy5oZWlnaHQrYy5oZWlnaHQqdGhpcy5jcFBvc2l0aW9uT2Zmc2V0LzEwMCx0aGlzLmxlZnQtPXRoaXMuY3BXaWR0aCt0aGlzLmRpYWxvZ0Fycm93U2l6ZS0yLXRoaXMuZGlhbG9nQXJyb3dPZmZzZXQpOiJ0b3AtcmlnaHQiPT09ZHx8InJpZ2h0LXRvcCI9PT1kPyh0aGlzLnRvcC09bC1jLmhlaWdodCtjLmhlaWdodCp0aGlzLmNwUG9zaXRpb25PZmZzZXQvMTAwLHRoaXMubGVmdCs9Yy53aWR0aCt0aGlzLmRpYWxvZ0Fycm93U2l6ZS0yLXRoaXMuZGlhbG9nQXJyb3dPZmZzZXQpOiJsZWZ0Ij09PWR8fCJib3R0b20tbGVmdCI9PT1kfHwibGVmdC1ib3R0b20iPT09ZD8odGhpcy50b3ArPWMuaGVpZ2h0KnRoaXMuY3BQb3NpdGlvbk9mZnNldC8xMDAtdGhpcy5kaWFsb2dBcnJvd09mZnNldCx0aGlzLmxlZnQtPXRoaXMuY3BXaWR0aCt0aGlzLmRpYWxvZ0Fycm93U2l6ZS0yKToodGhpcy50b3ArPWMuaGVpZ2h0KnRoaXMuY3BQb3NpdGlvbk9mZnNldC8xMDAtdGhpcy5kaWFsb2dBcnJvd09mZnNldCx0aGlzLmxlZnQrPWMud2lkdGgrdGhpcy5kaWFsb2dBcnJvd1NpemUtMiksdGhpcy5jcFVzZVBvc2l0aW9uPWR9fWlzRGVzY2VuZGFudChlLGkpe2xldCByPWkucGFyZW50Tm9kZTtmb3IoO251bGwhPT1yOyl7aWYocj09PWUpcmV0dXJuITA7cj1yLnBhcmVudE5vZGV9cmV0dXJuITF9Y3JlYXRlRGlhbG9nQm94KGUsaSl7bGV0e3RvcDpyLGxlZnQ6b309ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57dG9wOnIrKGk/d2luZG93LnBhZ2VZT2Zmc2V0OjApLGxlZnQ6bysoaT93aW5kb3cucGFnZVhPZmZzZXQ6MCksd2lkdGg6ZS5vZmZzZXRXaWR0aCxoZWlnaHQ6ZS5vZmZzZXRIZWlnaHR9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKG90KSxDKHhlKSxDKFF0KSxDKE50KSxDKGZjKSxDKFNWKSl9LG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1siY29sb3ItcGlja2VyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKFVlKFdWZSw3KSxVZShxVmUsNyksVWUoWFZlLDcpKSwyJmUpe2xldCByO2JlKHI9dmUoKSkmJihpLmRpYWxvZ0VsZW1lbnQ9ci5maXJzdCksYmUocj12ZSgpKSYmKGkuaHVlU2xpZGVyPXIuZmlyc3QpLGJlKHI9dmUoKSkmJihpLmFscGhhU2xpZGVyPXIuZmlyc3QpfX0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZBKCJrZXl1cC5lc2MiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmhhbmRsZUVzYyhvKX0sMCxzdSkoImtleXVwLmVudGVyIixmdW5jdGlvbihvKXtyZXR1cm4gaS5oYW5kbGVFbnRlcihvKX0sITEsc3UpfSxkZWNsczozMCx2YXJzOjUxLGNvbnN0czpbWzEsImNvbG9yLXBpY2tlciIsMywiY2xpY2siXSxbImRpYWxvZ1BvcHVwIiwiIl0sWzMsImNsYXNzIiwidG9wIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNhdHVyYXRpb24tbGlnaHRuZXNzIiwzLCJzbGlkZXIiLCJyZ1giLCJyZ1kiLCJiYWNrZ3JvdW5kLWNvbG9yIiwibmV3VmFsdWUiLCJkcmFnU3RhcnQiLCJkcmFnRW5kIiw0LCJuZ0lmIl0sWzEsImh1ZS1hbHBoYSIsImJveCJdLFsxLCJsZWZ0Il0sWzEsInNlbGVjdGVkLWNvbG9yLWJhY2tncm91bmQiXSxbMSwic2VsZWN0ZWQtY29sb3IiLDMsImNsaWNrIl0sWyJjbGFzcyIsImV5ZWRyb3BwZXItaWNvbiIsInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJoZWlnaHQiLCIyNHB4Iiwidmlld0JveCIsIjAgMCAyNCAyNCIsIndpZHRoIiwiMjRweCIsImZpbGwiLCIjMDAwMDAwIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwzLCJjbGFzcyIsImRpc2FibGVkIiwiY2xpY2siLDQsIm5nSWYiXSxbMSwicmlnaHQiXSxbInN0eWxlIiwiaGVpZ2h0OiAxNnB4OyIsNCwibmdJZiJdLFsxLCJodWUiLDMsInNsaWRlciIsInJnWCIsIm5ld1ZhbHVlIiwiZHJhZ1N0YXJ0IiwiZHJhZ0VuZCJdLFsiaHVlU2xpZGVyIiwiIl0sWzEsImN1cnNvciJdLFsxLCJ2YWx1ZSIsMywic2xpZGVyIiwicmdYIiwibmV3VmFsdWUiLCJkcmFnU3RhcnQiLCJkcmFnRW5kIl0sWyJ2YWx1ZVNsaWRlciIsIiJdLFsxLCJhbHBoYSIsMywic2xpZGVyIiwicmdYIiwibmV3VmFsdWUiLCJkcmFnU3RhcnQiLCJkcmFnRW5kIl0sWyJhbHBoYVNsaWRlciIsIiJdLFsiY2xhc3MiLCJjbXlrLXRleHQiLDMsImRpc3BsYXkiLDQsIm5nSWYiXSxbImNsYXNzIiwiaHNsYS10ZXh0IiwzLCJkaXNwbGF5Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsInJnYmEtdGV4dCIsMywiZGlzcGxheSIsNCwibmdJZiJdLFsiY2xhc3MiLCJoZXgtdGV4dCIsMywiaGV4LWFscGhhIiwiZGlzcGxheSIsNCwibmdJZiJdLFsiY2xhc3MiLCJ2YWx1ZS10ZXh0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsInR5cGUtcG9saWN5Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsInByZXNldC1hcmVhIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImJ1dHRvbi1hcmVhIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImV4dHJhLXRlbXBsYXRlIiw0LCJuZ0lmIl0sWzEsInNhdHVyYXRpb24tbGlnaHRuZXNzIiwzLCJzbGlkZXIiLCJyZ1giLCJyZ1kiLCJuZXdWYWx1ZSIsImRyYWdTdGFydCIsImRyYWdFbmQiXSxbInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJoZWlnaHQiLCIyNHB4Iiwidmlld0JveCIsIjAgMCAyNCAyNCIsIndpZHRoIiwiMjRweCIsImZpbGwiLCIjMDAwMDAwIiwxLCJleWVkcm9wcGVyLWljb24iXSxbImQiLCJNMCAwaDI0djI0SDBWMHoiLCJmaWxsIiwibm9uZSJdLFsiZCIsIk0xNy42NiA1LjQxbC45Mi45Mi0yLjY5IDIuNjktLjkyLS45MiAyLjY5LTIuNjlNMTcuNjcgM2MtLjI2IDAtLjUxLjEtLjcxLjI5bC0zLjEyIDMuMTItMS45My0xLjkxLTEuNDEgMS40MSAxLjQyIDEuNDJMMyAxNi4yNVYyMWg0Ljc1bDguOTItOC45MiAxLjQyIDEuNDIgMS40MS0xLjQxLTEuOTItMS45MiAzLjEyLTMuMTJjLjQtLjQuNC0xLjAzLjAxLTEuNDJsLTIuMzQtMi4zNGMtLjItLjE5LS40NS0uMjktLjctLjI5ek02LjkyIDE5TDUgMTcuMDhsOC4wNi04LjA2IDEuOTIgMS45Mkw2LjkyIDE5eiJdLFsidHlwZSIsImJ1dHRvbiIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsyLCJoZWlnaHQiLCIxNnB4Il0sWzEsImNteWstdGV4dCJdLFsxLCJib3giXSxbInR5cGUiLCJudW1iZXIiLCJwYXR0ZXJuIiwiWzAtOV0qIiwibWluIiwiMCIsIm1heCIsIjEwMCIsMywidGV4dCIsInJnIiwidmFsdWUiLCJrZXl1cC5lbnRlciIsIm5ld1ZhbHVlIl0sWyJ0eXBlIiwibnVtYmVyIiwicGF0dGVybiIsIlswLTldKyhbXFwuLF1bMC05XXsxLDJ9KT8iLCJtaW4iLCIwIiwibWF4IiwiMSIsInN0ZXAiLCIwLjEiLDMsInRleHQiLCJyZyIsInZhbHVlIiwia2V5dXAuZW50ZXIiLCJuZXdWYWx1ZSIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWyJ0eXBlIiwibnVtYmVyIiwicGF0dGVybiIsIlswLTldKyhbXFwuLF1bMC05XXsxLDJ9KT8iLCJtaW4iLCIwIiwibWF4IiwiMSIsInN0ZXAiLCIwLjEiLDMsInRleHQiLCJyZyIsInZhbHVlIiwia2V5dXAuZW50ZXIiLCJuZXdWYWx1ZSJdLFsxLCJoc2xhLXRleHQiXSxbInR5cGUiLCJudW1iZXIiLCJwYXR0ZXJuIiwiWzAtOV0qIiwibWluIiwiMCIsIm1heCIsIjM2MCIsMywidGV4dCIsInJnIiwidmFsdWUiLCJrZXl1cC5lbnRlciIsIm5ld1ZhbHVlIl0sWzEsInJnYmEtdGV4dCJdLFsidHlwZSIsIm51bWJlciIsInBhdHRlcm4iLCJbMC05XSoiLCJtaW4iLCIwIiwibWF4IiwiMjU1IiwzLCJ0ZXh0IiwicmciLCJ2YWx1ZSIsImtleXVwLmVudGVyIiwibmV3VmFsdWUiXSxbMSwiaGV4LXRleHQiXSxbMywidGV4dCIsInZhbHVlIiwiYmx1ciIsImtleXVwLmVudGVyIiwibmV3VmFsdWUiXSxbMSwidmFsdWUtdGV4dCJdLFsxLCJ0eXBlLXBvbGljeSJdLFsxLCJ0eXBlLXBvbGljeS1hcnJvdyIsMywiY2xpY2siXSxbMSwicHJlc2V0LWFyZWEiXSxbMSwicHJlc2V0LWxhYmVsIl0sWzMsImNsYXNzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInByZXNldC1jb2xvciIsMywiYmFja2dyb3VuZENvbG9yIiwiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJwcmVzZXQtY29sb3IiLDMsImNsaWNrIl0sWzMsImNsYXNzIiwiY2xpY2siLDQsIm5nSWYiXSxbMywiY2xpY2siXSxbMSwiYnV0dG9uLWFyZWEiXSxbInR5cGUiLCJidXR0b24iLDMsImNsYXNzIiwiY2xpY2siLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDMsImNsaWNrIl0sWzEsImV4dHJhLXRlbXBsYXRlIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihmKDAsImRpdiIsMCwxKSxBKCJjbGljayIsZnVuY3Rpb24obyl7cmV0dXJuIG8uc3RvcFByb3BhZ2F0aW9uKCl9KSxTKDIsWVZlLDEsNSwiZGl2IiwyKSxTKDMsUVZlLDIsOCwiZGl2IiwzKSxmKDQsImRpdiIsNCkoNSwiZGl2Iiw1KSxrKDYsImRpdiIsNiksZig3LCJkaXYiLDcpLEEoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLmV5ZURyb3BwZXJTdXBwb3J0ZWQmJmkuY3BFeWVEcm9wcGVyJiZpLm9uRXllRHJvcHBlcigpfSksUyg4LFpWZSwzLDAsInN2ZyIsOCksZygpLFMoOSxLVmUsMiw1LCJidXR0b24iLDkpLGcoKSxmKDEwLCJkaXYiLDEwKSxTKDExLEpWZSwxLDAsImRpdiIsMTEpLGYoMTIsImRpdiIsMTIsMTMpLEEoIm5ld1ZhbHVlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkh1ZUNoYW5nZShvKX0pKCJkcmFnU3RhcnQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25EcmFnU3RhcnQoImh1ZSIpfSkoImRyYWdFbmQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25EcmFnRW5kKCJodWUiKX0pLGsoMTQsImRpdiIsMTQpLGcoKSxmKDE1LCJkaXYiLDE1LDE2KSxBKCJuZXdWYWx1ZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25WYWx1ZUNoYW5nZShvKX0pKCJkcmFnU3RhcnQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25EcmFnU3RhcnQoInZhbHVlIil9KSgiZHJhZ0VuZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkRyYWdFbmQoInZhbHVlIil9KSxrKDE3LCJkaXYiLDE0KSxnKCksZigxOCwiZGl2IiwxNywxOCksQSgibmV3VmFsdWUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uQWxwaGFDaGFuZ2Uobyl9KSgiZHJhZ1N0YXJ0IixmdW5jdGlvbigpe3JldHVybiBpLm9uRHJhZ1N0YXJ0KCJhbHBoYSIpfSkoImRyYWdFbmQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25EcmFnRW5kKCJhbHBoYSIpfSksaygyMCwiZGl2IiwxNCksZygpKCkoKSxTKDIxLHQ0ZSwxNywxMiwiZGl2IiwxOSksUygyMixyNGUsMTQsMTAsImRpdiIsMjApLFMoMjMsczRlLDE0LDEwLCJkaXYiLDIxKSxTKDI0LGQ0ZSw4LDcsImRpdiIsMjIpLFMoMjUscDRlLDksMywiZGl2IiwyMyksUygyNixoNGUsMywwLCJkaXYiLDI0KSxTKDI3LGI0ZSw2LDMsImRpdiIsMjUpLFMoMjgseDRlLDMsMiwiZGl2IiwyNiksUygyOSxNNGUsMiwxLCJkaXYiLDI3KSxnKCkpLDImZSYmKEJ0KCJkaXNwbGF5IixpLnNob3c/ImJsb2NrIjoibm9uZSIpKCJ2aXNpYmlsaXR5IixpLmhpZGRlbj8iaGlkZGVuIjoidmlzaWJsZSIpKCJ0b3AiLGkudG9wLCJweCIpKCJsZWZ0IixpLmxlZnQsInB4IikoInBvc2l0aW9uIixpLnBvc2l0aW9uKSgiaGVpZ2h0IixpLmNwSGVpZ2h0LCJweCIpKCJ3aWR0aCIsaS5jcFdpZHRoLCJweCIpLG50KCJvcGVuIixpLnNob3cpLHYoMiksYigibmdJZiIsInBvcHVwIj09PWkuY3BEaWFsb2dEaXNwbGF5KSx2KDEpLGIoIm5nSWYiLDE9PT0oaS5jcENvbG9yTW9kZXx8MSkpLHYoNCksQnQoImJhY2tncm91bmQtY29sb3IiLGkuc2VsZWN0ZWRDb2xvcikoImN1cnNvciIsaS5leWVEcm9wcGVyU3VwcG9ydGVkJiZpLmNwRXllRHJvcHBlcj8icG9pbnRlciI6bnVsbCksdigxKSxiKCJuZ0lmIixpLmV5ZURyb3BwZXJTdXBwb3J0ZWQmJmkuY3BFeWVEcm9wcGVyKSx2KDEpLGIoIm5nSWYiLGkuY3BBZGRDb2xvckJ1dHRvbiksdigyKSxiKCJuZ0lmIiwiZGlzYWJsZWQiPT09aS5jcEFscGhhQ2hhbm5lbCksdigxKSxCdCgiZGlzcGxheSIsMT09PShpLmNwQ29sb3JNb2RlfHwxKT8iYmxvY2siOiJub25lIiksYigicmdYIiwxKSx2KDIpLEJ0KCJsZWZ0IixudWxsPT1pLnNsaWRlcj9udWxsOmkuc2xpZGVyLmgsInB4IiksdigxKSxCdCgiZGlzcGxheSIsMj09PShpLmNwQ29sb3JNb2RlfHwxKT8iYmxvY2siOiJub25lIiksYigicmdYIiwxKSx2KDIpLEJ0KCJyaWdodCIsbnVsbD09aS5zbGlkZXI/bnVsbDppLnNsaWRlci52LCJweCIpLHYoMSksQnQoImRpc3BsYXkiLCJkaXNhYmxlZCI9PT1pLmNwQWxwaGFDaGFubmVsPyJub25lIjoiYmxvY2siKSgiYmFja2dyb3VuZC1jb2xvciIsaS5hbHBoYVNsaWRlckNvbG9yKSxiKCJyZ1giLDEpLHYoMiksQnQoImxlZnQiLG51bGw9PWkuc2xpZGVyP251bGw6aS5zbGlkZXIuYSwicHgiKSx2KDEpLGIoIm5nSWYiLCFpLmNwRGlzYWJsZUlucHV0JiYxPT09KGkuY3BDb2xvck1vZGV8fDEpKSx2KDEpLGIoIm5nSWYiLCFpLmNwRGlzYWJsZUlucHV0JiYxPT09KGkuY3BDb2xvck1vZGV8fDEpKSx2KDEpLGIoIm5nSWYiLCFpLmNwRGlzYWJsZUlucHV0JiYxPT09KGkuY3BDb2xvck1vZGV8fDEpKSx2KDEpLGIoIm5nSWYiLCFpLmNwRGlzYWJsZUlucHV0JiYxPT09KGkuY3BDb2xvck1vZGV8fDEpKSx2KDEpLGIoIm5nSWYiLCFpLmNwRGlzYWJsZUlucHV0JiYyPT09KGkuY3BDb2xvck1vZGV8fDEpKSx2KDEpLGIoIm5nSWYiLCFpLmNwRGlzYWJsZUlucHV0JiYxPT09KGkuY3BDb2xvck1vZGV8fDEpKSx2KDEpLGIoIm5nSWYiLChudWxsPT1pLmNwUHJlc2V0Q29sb3JzP251bGw6aS5jcFByZXNldENvbG9ycy5sZW5ndGgpfHxpLmNwQWRkQ29sb3JCdXR0b24pLHYoMSksYigibmdJZiIsaS5jcE9LQnV0dG9ufHxpLmNwQ2FuY2VsQnV0dG9uKSx2KDEpLGIoIm5nSWYiLGkuY3BFeHRyYVRlbXBsYXRlKSl9LGRlcGVuZGVuY2llczpbbm4sTmUsZW8sRTRlLFQ0ZV0sc3R5bGVzOlsnLmNvbG9yLXBpY2tlcntwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7d2lkdGg6MjMwcHg7aGVpZ2h0OmF1dG87Ym9yZGVyOiM3Nzcgc29saWQgMXB4O2N1cnNvcjpkZWZhdWx0Oy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2JhY2tncm91bmQtY29sb3I6I2ZmZn0uY29sb3ItcGlja2VyICp7Ym94LXNpemluZzpib3JkZXItYm94O21hcmdpbjowO2ZvbnQtc2l6ZToxMXB4fS5jb2xvci1waWNrZXIgaW5wdXR7d2lkdGg6MDtoZWlnaHQ6MjZweDttaW4td2lkdGg6MDtmb250LXNpemU6MTNweDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjojMDAwfS5jb2xvci1waWNrZXIgaW5wdXQ6aW52YWxpZCwuY29sb3ItcGlja2VyIGlucHV0Oi1tb3otdWktaW52YWxpZCwuY29sb3ItcGlja2VyIGlucHV0Oi1tb3otc3VibWl0LWludmFsaWR7Ym94LXNoYWRvdzpub25lfS5jb2xvci1waWNrZXIgaW5wdXQ6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sLmNvbG9yLXBpY2tlciBpbnB1dDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbnttYXJnaW46MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX0uY29sb3ItcGlja2VyIC5hcnJvd3twb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4Ojk5OTk5OTt3aWR0aDowO2hlaWdodDowO2JvcmRlci1zdHlsZTpzb2xpZH0uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy10b3B7bGVmdDo4cHg7Ym9yZGVyLXdpZHRoOjEwcHggNXB4O2JvcmRlci1jb2xvcjojNzc3IHJnYmEoMCwwLDAsMCkgcmdiYSgwLDAsMCwwKSByZ2JhKDAsMCwwLDApfS5jb2xvci1waWNrZXIgLmFycm93LmFycm93LWJvdHRvbXt0b3A6LTIwcHg7bGVmdDo4cHg7Ym9yZGVyLXdpZHRoOjEwcHggNXB4O2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDApIHJnYmEoMCwwLDAsMCkgIzc3NyByZ2JhKDAsMCwwLDApfS5jb2xvci1waWNrZXIgLmFycm93LmFycm93LXRvcC1sZWZ0LC5jb2xvci1waWNrZXIgLmFycm93LmFycm93LWxlZnQtdG9we3JpZ2h0Oi0yMXB4O2JvdHRvbTo4cHg7Ym9yZGVyLXdpZHRoOjVweCAxMHB4O2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDApIHJnYmEoMCwwLDAsMCkgcmdiYSgwLDAsMCwwKSAjNzc3fS5jb2xvci1waWNrZXIgLmFycm93LmFycm93LXRvcC1yaWdodCwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1yaWdodC10b3B7Ym90dG9tOjhweDtsZWZ0Oi0yMHB4O2JvcmRlci13aWR0aDo1cHggMTBweDtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwKSAjNzc3IHJnYmEoMCwwLDAsMCkgcmdiYSgwLDAsMCwwKX0uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1sZWZ0LC5jb2xvci1waWNrZXIgLmFycm93LmFycm93LWxlZnQtYm90dG9tLC5jb2xvci1waWNrZXIgLmFycm93LmFycm93LWJvdHRvbS1sZWZ0e3RvcDo4cHg7cmlnaHQ6LTIxcHg7Ym9yZGVyLXdpZHRoOjVweCAxMHB4O2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDApIHJnYmEoMCwwLDAsMCkgcmdiYSgwLDAsMCwwKSAjNzc3fS5jb2xvci1waWNrZXIgLmFycm93LmFycm93LXJpZ2h0LC5jb2xvci1waWNrZXIgLmFycm93LmFycm93LXJpZ2h0LWJvdHRvbSwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1ib3R0b20tcmlnaHR7dG9wOjhweDtsZWZ0Oi0yMHB4O2JvcmRlci13aWR0aDo1cHggMTBweDtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwKSAjNzc3IHJnYmEoMCwwLDAsMCkgcmdiYSgwLDAsMCwwKX0uY29sb3ItcGlja2VyIC5jdXJzb3J7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTZweDtoZWlnaHQ6MTZweDtib3JkZXI6IzIyMiBzb2xpZCAycHg7Ym9yZGVyLXJhZGl1czo1MCU7Y3Vyc29yOmRlZmF1bHR9LmNvbG9yLXBpY2tlciAuYm94e2Rpc3BsYXk6ZmxleDtwYWRkaW5nOjRweCA4cHh9LmNvbG9yLXBpY2tlciAubGVmdHtwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nOjE2cHggOHB4fS5jb2xvci1waWNrZXIgLnJpZ2h0e2ZsZXg6MSAxIGF1dG87cGFkZGluZzoxMnB4IDhweH0uY29sb3ItcGlja2VyIC5idXR0b24tYXJlYXtwYWRkaW5nOjAgMTZweCAxNnB4O3RleHQtYWxpZ246cmlnaHR9LmNvbG9yLXBpY2tlciAuYnV0dG9uLWFyZWEgYnV0dG9ue21hcmdpbi1sZWZ0OjhweH0uY29sb3ItcGlja2VyIC5wcmVzZXQtYXJlYXtwYWRkaW5nOjRweCAxNXB4fS5jb2xvci1waWNrZXIgLnByZXNldC1hcmVhIC5wcmVzZXQtbGFiZWx7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjEwMCU7cGFkZGluZzo0cHg7Zm9udC1zaXplOjExcHg7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtYWxpZ246bGVmdDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2NvbG9yOiM1NTV9LmNvbG9yLXBpY2tlciAucHJlc2V0LWFyZWEgLnByZXNldC1jb2xvcntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxOHB4O2hlaWdodDoxOHB4O21hcmdpbjo0cHggNnB4IDhweDtib3JkZXI6I2E5YTlhOSBzb2xpZCAxcHg7Ym9yZGVyLXJhZGl1czoyNSU7Y3Vyc29yOnBvaW50ZXJ9LmNvbG9yLXBpY2tlciAucHJlc2V0LWFyZWEgLnByZXNldC1lbXB0eS1tZXNzYWdle21pbi1oZWlnaHQ6MThweDttYXJnaW4tdG9wOjRweDttYXJnaW4tYm90dG9tOjhweDtmb250LXN0eWxlOml0YWxpYzt0ZXh0LWFsaWduOmNlbnRlcn0uY29sb3ItcGlja2VyIC5oZXgtdGV4dHt3aWR0aDoxMDAlO3BhZGRpbmc6NHB4IDhweDtmb250LXNpemU6MTFweH0uY29sb3ItcGlja2VyIC5oZXgtdGV4dCAuYm94e3BhZGRpbmc6MCAyNHB4IDhweCA4cHh9LmNvbG9yLXBpY2tlciAuaGV4LXRleHQgLmJveCBkaXZ7ZmxvYXQ6bGVmdDtmbGV4OjEgMSBhdXRvO3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiM1NTU7Y2xlYXI6bGVmdH0uY29sb3ItcGlja2VyIC5oZXgtdGV4dCAuYm94IGlucHV0e2ZsZXg6MSAxIGF1dG87cGFkZGluZzoxcHg7Ym9yZGVyOiNhOWE5YTkgc29saWQgMXB4fS5jb2xvci1waWNrZXIgLmhleC1hbHBoYSAuYm94IGRpdjpmaXJzdC1jaGlsZCwuY29sb3ItcGlja2VyIC5oZXgtYWxwaGEgLmJveCBpbnB1dDpmaXJzdC1jaGlsZHtmbGV4LWdyb3c6MzttYXJnaW4tcmlnaHQ6OHB4fS5jb2xvci1waWNrZXIgLmNteWstdGV4dCwuY29sb3ItcGlja2VyIC5oc2xhLXRleHQsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0LC5jb2xvci1waWNrZXIgLnZhbHVlLXRleHR7d2lkdGg6MTAwJTtwYWRkaW5nOjRweCA4cHg7Zm9udC1zaXplOjExcHh9LmNvbG9yLXBpY2tlciAuY215ay10ZXh0IC5ib3gsLmNvbG9yLXBpY2tlciAuaHNsYS10ZXh0IC5ib3gsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0IC5ib3h7cGFkZGluZzowIDI0cHggOHB4IDhweH0uY29sb3ItcGlja2VyIC52YWx1ZS10ZXh0IC5ib3h7cGFkZGluZzowIDhweCA4cHh9LmNvbG9yLXBpY2tlciAuY215ay10ZXh0IC5ib3ggZGl2LC5jb2xvci1waWNrZXIgLmhzbGEtdGV4dCAuYm94IGRpdiwuY29sb3ItcGlja2VyIC5yZ2JhLXRleHQgLmJveCBkaXYsLmNvbG9yLXBpY2tlciAudmFsdWUtdGV4dCAuYm94IGRpdntmbGV4OjEgMSBhdXRvO21hcmdpbi1yaWdodDo4cHg7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6IzU1NX0uY29sb3ItcGlja2VyIC5jbXlrLXRleHQgLmJveCBkaXY6bGFzdC1jaGlsZCwuY29sb3ItcGlja2VyIC5oc2xhLXRleHQgLmJveCBkaXY6bGFzdC1jaGlsZCwuY29sb3ItcGlja2VyIC5yZ2JhLXRleHQgLmJveCBkaXY6bGFzdC1jaGlsZCwuY29sb3ItcGlja2VyIC52YWx1ZS10ZXh0IC5ib3ggZGl2Omxhc3QtY2hpbGR7bWFyZ2luLXJpZ2h0OjB9LmNvbG9yLXBpY2tlciAuY215ay10ZXh0IC5ib3ggaW5wdXQsLmNvbG9yLXBpY2tlciAuaHNsYS10ZXh0IC5ib3ggaW5wdXQsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0IC5ib3ggaW5wdXQsLmNvbG9yLXBpY2tlciAudmFsdWUtdGV4dCAuYm94IGlucHV0e2Zsb2F0OmxlZnQ7ZmxleDoxO3BhZGRpbmc6MXB4O21hcmdpbjowIDhweCAwIDA7Ym9yZGVyOiNhOWE5YTkgc29saWQgMXB4fS5jb2xvci1waWNrZXIgLmNteWstdGV4dCAuYm94IGlucHV0Omxhc3QtY2hpbGQsLmNvbG9yLXBpY2tlciAuaHNsYS10ZXh0IC5ib3ggaW5wdXQ6bGFzdC1jaGlsZCwuY29sb3ItcGlja2VyIC5yZ2JhLXRleHQgLmJveCBpbnB1dDpsYXN0LWNoaWxkLC5jb2xvci1waWNrZXIgLnZhbHVlLXRleHQgLmJveCBpbnB1dDpsYXN0LWNoaWxke21hcmdpbi1yaWdodDowfS5jb2xvci1waWNrZXIgLmh1ZS1hbHBoYXthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLWJvdHRvbTozcHh9LmNvbG9yLXBpY2tlciAuaHVle2RpcmVjdGlvbjpsdHI7d2lkdGg6MTAwJTtoZWlnaHQ6MTZweDttYXJnaW4tYm90dG9tOjE2cHg7Ym9yZGVyOm5vbmU7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJTtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUpZQUFBQVFDQVlBQUFEMDZJWW5BQUFBQm1KTFIwUUEvd0QvQVArZ3ZhZVRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUIzUkpUVVVINEFJV0R3a1VGV2JDQ0FBQUFGeEpSRUZVYU43dDBrRUtnMEFRQU1FMng4My9uMnF1NXFDZ0QxaURoQ29ZZHBuYlFDOWJiWTFxVk8vanZjNmszYWQ5MXM3LzdGMS9jc2dQcnVqdVExN0JEWVNGc0JBV3dnSmhJU3lFQmNKQ1dBZ0xoSVd3RUJZSWkyZjdBci8xVENnRkgyWDlBQUFBQUVsRlRrU3VRbUNDKX0uY29sb3ItcGlja2VyIC52YWx1ZXtkaXJlY3Rpb246cnRsO3dpZHRoOjEwMCU7aGVpZ2h0OjE2cHg7bWFyZ2luLWJvdHRvbToxNnB4O2JvcmRlcjpub25lO2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCU7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFKWUFBQUFRQ0FZQUFBRDA2SVluQUFBQ1RrbEVRVlI0MnUzU1lVY3JBQmhBNFUyU2ttUkpNbVdTSmtsS0ppV1pacEtVSkpza0tVbWFURkltS1pPVXpNeVNwR1JtbGlSTkppbEpTcEtTSkV0bVNwSXBtV21TZE83MzYvNkQreDdPUDNnVUNvV0N2MWNxbFNRbEpaR2NuRXhLU2dxcHFhbWtwYVdSbnA1T1JrWUdtWm1acUZRcXNyS3l5TTdPSmljbmg5emNYTlJxTlhsNWVlVG41NlBSYUNnb0tLQ3dzSkNpb2lLMFdpM0Z4Y1dVbEpSUVdscEtXVmtaNWVYbFZGUlVVRmxaaVU2bm82cXFpdXJxYW1wcWFxaXRyYVd1cmc2OVhrOTlmVDBHZ3dHajBVaERRd09OalkwME5UWFIzTnhNUzBzTHJhMnR0TFcxMGQ3ZWpzbGt3bXcyMDlIUlFXZG5KMTFkWFhSM2Q5UFQwME52Ynk5OWZYMzA5L2N6TUREQTRPQWdGb3VGb2FFaHJGWXJ3OFBEakl5TU1EbzZ5dGpZR0RhYmpmSHhjU1ltSnBpY25HUnFhZ3E3M2M3MDlEUXpNelBNenM0eU56ZkgvUHc4RG9jRHA5T0p5K1hDN1hhenNMREE0dUlpUzB0TExDOHZzN0t5d3VycUttdHJhM2c4SHJ4ZUx6NmZENy9mei9yNk9oc2JHMnh1YnJLMXRjWDI5amFCUUlDZG5SMkN3U0M3dTd2czdlMnh2Ny9Qd2NFQmg0ZUhIQjBkY1h4OHpNbkpDYWVucDV5ZG5YRitmczdGeFFXWGw1ZGNYVjF4ZlgzTnpjME50N2UzM04zZEVRcUZ1TCsvNStIaGdYQTRUQ1FTNGZIeGthZW5KNTZmbjNsNWVlSDE5WlZvTk1yYjJ4dnY3Kzk4Zkh3UWk4V0l4K044Zm42U1NDVDQrdnJpKy91Ym41OGZmbjkvK1ZjS2dTV3dCSmJBRWxnQ1MyQUpMSUVsc0FTV3dCSllBa3RnQ1N5QkpiQUVsc0FTV0FKTFlBa3NnU1d3QkpiQUVsZ0NTMkFKTElFbHNQNC9XSDhBbUo1WjZqSFM0aDhBQUFBQVNVVk9SSzVDWUlJPSl9LmNvbG9yLXBpY2tlciAuYWxwaGF7ZGlyZWN0aW9uOmx0cjt3aWR0aDoxMDAlO2hlaWdodDoxNnB4O2JvcmRlcjpub25lO2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCU7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFKWUFBQUFRQ0FZQUFBRDA2SVluQUFBQUJtSkxSMFFBL3dEL0FQK2d2YWVUQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDRBSVdEd1lRbFpNYTNnQUFBV1ZKUkVGVWFON3RtRUdPNmpBUVJDc09BckhnQnB5QUpZR2pjR29jeEFtNEEySUhwbW9XRTBlQkgrZXptRmxOdlUwNnNoSjNXNlZFZWxXTVVRQUlJRjlmNnFacGltc0ExTFl0UzJ1RjUxL3UyN1lWQUZaVlJVa0VvR0hkUFYvc0ljYklFSUlrVWRJLzlYYTduZXl2NjErU1dGVVZBVkNTY3QwMFRXbjJmdjZ1MytFY2ZkM3RYenkvMCtuRVV1K1NQam8va3F6cm1pUXBTY042djk4WGV3ZkE4L2xNa2lMSjJXeEdTVW9wY1Q2Zk02VTBOWDkvZnJmYmpldjFXdGZybFpmTGhZZkRRUUhHL0FJT2xuR3dqSU5sSEN4akhDempZSm0vVEpXZEN3cXVKWHNlRkZ6R3dETk5laUtNT0pUTzh4UWREUWFlQjI5K0s5ZWZlTGFCbzlKN3ZkdnRKajFSakZGamZpdjdxdjk1dGp4LzdsZVNRZ2g5M2UxZmZNZUlwNk8rWVFqaG8vTjc5MXQxWFZPU1NJN04vL0srNC9Hb3hXTEJ4K1BCNS9PcDVYTEorLzNPbEpKV3F4VTNtODNvdnY1aUdmOEtqWU5sSEN4akhDempZQmtIeTVnZjVndXN2UVU3VTM3alRBQUFBQUJKUlU1RXJrSmdnZz09KX0uY29sb3ItcGlja2VyIC50eXBlLXBvbGljeXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MjE4cHg7cmlnaHQ6MTJweDt3aWR0aDoxNnB4O2hlaWdodDoyNHB4O2JhY2tncm91bmQtc2l6ZTo4cHggMTZweDtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJJQUFBQWdDQVlBQUFBZmZDanhBQUFBQkhOQ1NWUUlDQWdJZkFoa2lBQUFBQWx3U0ZsekFBQUNld0FBQW5zQjAxQ08zQUFBQUJsMFJWaDBVMjltZEhkaGNtVUFkM2QzTG1sdWEzTmpZWEJsTG05eVo1dnVQQm9BQUFJQVNVUkJWRWlKN1pZOWF4UlJGSWFmc3hNU3RyTFFKcEFncEJGaGkrQzl3MVlTbzAwSTZSWi9nOXZacEJmL1FPcjRHeVJna1NLTlNyQWFkc1pxUUd3Q2t1QVd5UlpKc3lTd3ZoWjdOL3ZoenJnYkxIM0xkODU5N2pseno1MHpKb2t5eFhIOERxRFZhcjBxaTZ2OEJiSXRxU0dwRWNmeGRsbXNGV1hrdlg4QWZBVldnM1VLUEVuVDlHS3VqTXpzQUZnWnNWYUNOMVZUUWQ3N1hVbnJnRTFrdis2OTM1MjY4V1JwenJuSFp2WVJXQzdZdkMzcFJaWmwzd296cXRWcWl5SDlJZ2pBc3BrZDFHcTF4VUpRdFZyZEI5WktJQU90aGRnL1FjNjVMVWs3d05JTW9DVkpPODY1cllGaGtxalg2L2Q3dlY0R1BKd0JNcW9mVVJTNUpFazZGWUJlci9lZVliL01vOVd3Rm5QT3ZRYmVBdmZ1QUFLNEJONHNBSnRBRy9nSklFbG1OdWlKeWJhM0VHTm1aaVBlWnVFVm1WZWxsL1kvNk4rQ3pEbjNBWGhFT09vN0h2LzNCZUF6OEl6UWtNUG5KYnVQeDF3Qyt5WUo3LzBuWUlQNVMvMEZIS2RwK3J3Q0VFWFJTL3JmNUhsMUd0YjJNMGlTcENPcENaelBBVG1YMUV5U3BITUxBc2l5N01qTURvSHJHU0RYWm5hWVpkblJ3Qmg3SjkxdXR3bWN6QUE2Q2JHM0dnUGxlWDRqcVVIL2ExQ2t0cVJHbnVjM2hTQ0FNQjMyZ0tzcGtDdGdiM0tDUU1ta2plUDRXTkpUaHJOTlp2YWwxV3B0VElzdjdKdFE0dG1JZFJhOHFTb0VwV2w2WVdaTm9BTjB6S3haTlBlaHBMU0JadjJ0K1EwQ0o5bExuQVJRTEFBQUFBQkpSVTVFcmtKZ2dnPT0pO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXBvc2l0aW9uOmNlbnRlcn0uY29sb3ItcGlja2VyIC50eXBlLXBvbGljeSAudHlwZS1wb2xpY3ktYXJyb3d7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO2hlaWdodDo1MCV9LmNvbG9yLXBpY2tlciAuc2VsZWN0ZWQtY29sb3J7cG9zaXRpb246YWJzb2x1dGU7dG9wOjE2cHg7bGVmdDo4cHg7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtib3JkZXI6MXB4IHNvbGlkICNhOWE5YTk7Ym9yZGVyLXJhZGl1czo1MCV9LmNvbG9yLXBpY2tlciAuc2VsZWN0ZWQtY29sb3ItYmFja2dyb3VuZHt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQ2dBQUFBb0NBWUFBQUNNL3JodEFBQUFoMGxFUVZSWVIrMlcwUWxBTVFnRDYwemRmd09kcWE4VG1JL3dRTXI1SzBJNWJaTEl6TE9hMm50MzdWVlZiZCtkRHg1b2JnQ0MzS0JMd0oyZmY0UG5WaWRrZit1Y0lodzgwSFFhQ0xvM0RNSDNDUkszaUZzbUFXVmw2aFBORHd0OEV2TkU1cStZdUVYY01na29uVk02U2R5Q29FdkFuWjh2MUhqeDgxN01pbG14U1VCNXJkTEpEeWNaZ1VBWlVjaC9BQUFBQUVsRlRrU3VRbUNDKX0uY29sb3ItcGlja2VyIC5zYXR1cmF0aW9uLWxpZ2h0bmVzc3tkaXJlY3Rpb246bHRyO3dpZHRoOjEwMCU7aGVpZ2h0OjEzMHB4O2JvcmRlcjpub25lO2N1cnNvcjpwb2ludGVyO3RvdWNoLWFjdGlvbjptYW5pcHVsYXRpb247YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJTtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQU9ZQUFBQ0NDQVlBQUFCU0Q3VDNBQUFBQm1KTFIwUUEvd0QvQVArZ3ZhZVRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUIzUkpUVVVINEFJV0R3a3NQV1I2bGdBQUlBQkpSRUZVZU5ydG5WdVQ0N2dSckFITitQLy9Pci82MVk1d09OWjdtWjF1M1hBZUxNakpaR1pWZ2RLc2ZjNXhSM1MwUklJVVcrQ0h6Q3BjMk1jWW83WEd2M2V4N1VpWmQ1N3JqeXp6dit2KzMzWC9SLyszci9mN3ZSMzg2WStUdktOY2Yvd2RoVExQY3Y5cVUyd1pkNzR1dGgwdDE4MjFqa0laTFBjc0kvNm5XYTRYdnV0cXVVMFo4NW1ueDgwUy9aemdwbkxuT3RITnQ3L29meDFUS1hjU056Ti83cWJNUTNqdTdyTlFtTVlZZC80czJqOWFhK1ArZ0dhTWNacmIxTS90ZHJ2ZjcvZDJ2OTlQOS90OTNPLzNjYnZkeHUxMkc5ZnJkVnd1bDNFK244Yy8vL25QKzIrLy9YYjY2YWVmeGwvLyt0Zng1ei8vMllLNUFsMnJndmY0VXNicGRHckI1MmJBdkFyWHB1emptaXFBVlNHejVlRG1HWVh6aGJBWm1Dcm5temRkcFVVKzhZMWRBT1llWEN0RFV3VndWN1lDR0g2dUFteU1jWjlsNXZrVWFCUEdNVVo3L0o1dy83OTIvZnZ2OVhxOTMyNjNkci9mVHhQRUNlTUU4bks1ak0vUHovSFRUei9kdjMzN2R2cmxsMS9HUC83eGovRzN2LzF0L09VdmZ3a1Zzd29uZ2pkT3A5UHpIM1UzRDN6bVdHblpWWG40akNxczd3QzJCS1A0Lzh0QXprWnNvV3g2WHJxZUhaeW12cDRBQkNCSmhUUXdLZkRUOGd6clpDSXFpNUFoaUFDakJmRUIyclA4L1g2M01NN2Y2L1Y2djkvdjdYYTdiWUM4M1c3amNybHNWSElxNWZmdjMwKy8vZmJiK09XWFg4WlBQLzAwL3Y3M3Y0K2ZmLzc1SlN2YmV1K2JMMldNTWFGYkFscEJOTTg1UVgrY3Q2cW9TcWtQQXd1UWxCVktxR05GU1VPQUEzQm11N2dDNWhOT2QxNW5Td3ZBT1VXN0M0Z2lVQ1Y4U2duNUw5aE5GSXFUc3AwR3hJMHlzaW95akFqa1kvdEdKVkVweitmeitPV1hYKzdmdjM4Ly9mNzc3K1BidDIvajExOS9IVC8vL1BQNDlkZGZ4OGZIUndybVRqVjc3OUVYdTJweDJ4aGp3dGRKWlFjQVdRSVBMUElTc01KYVN3aUQ4Z3pJS3J3U3lBVEU1ajVuQWJSNWMxZEJVd0Jsc0VXVzBoNkxxaVlzcUZQQVF4Q3lSWjN3T1NBUnhtbFhNWDVrNjRwUWZ2djI3Zjc1K2RrK1BqNU9IeDhmNC92MzcrUGJ0Mi9qdDk5K0c5KytmUnNmSHgvamNybVVGTE8zMWdZRFdibHhSSXMvVHFmVDdvdXN4SnNBeFhBMkdjN1RBOVhkZ2Zkb0hiRnNqNzZYMisxV0FyZ0kxYWdlR3dBM3F1cHFvSHNtY2JJNkZ1OTNxdWdnRmE5ZDdMZUR0Z0tmQUZIQkorTkVCeUlrY0o1S2VydmRUbWhoR2NnSkpTWjV2bi8vZmorZnorMThQcDgrUHovSDUrZm5tR0QrL3Z2djQvdjM3K1BqNDJOOGZuNk8yKzFXczdKampQNndyYU1JNUU0Ulo4eDJ2VjVUU3drcXVvdFY3L2Q3VHo2SEZXc0QvcU5jZHcwQ1EzcS8zMjFjNjg2VHdEVklkYnV5NzN6TmxkaFNIYjhJMmtsWnpubStJbkJTNFU2bjAzMDJhQkZzTGhIREFLSlZKVmdsZkk5amh2dTUzVzUzc0xBTllOeEFpREE2TUNlVUh4OGY5K3YxMmk2WFM3dGNMcWNaVzU3UDV5ZVk4L2Z6ODNPY3orZm5zU21ZVXlrbldFRzg1V0JzdDlzdHpTTHlNZGZyOVFpMDhpWTE1VVowTGxER0xoUjNvNXpLMmo3T1BVVEQwRStuVTN0azdYYi8xNk5GYmhsb0FNdVkxempMVU9PM0JLZUlEZStaOHMzL0o0Z0ZvNFRNNWpQbXVSZzI4Zm9VS0tWU3dvMTZUZ0E1bnB5d2NXTEhnWWwvUHo4LzczLzYwNS9hYjcvOTFtNjNXN3RjTGllMHNaajRtYW81Z1R5Zno4OEUwZjErajhFY1l6d1RQRUcyY3FqeWZITkYwTThmdXFFaWFPVm5SelpaUU5oNWZ3UXlIZy9IREdmSm84OVExemIvcXV1NVhDNjc3M0kyWEtmVHFkL3Y5K2Qzd3VxV3ZhL1lUZFVkRVYzZmhJdi9WaXlwczZZRTN4M3I0M0s1YkpRUzY2emF4VkdGc3ZkKy8vajRhRisvZm0zZnYzOXZ0OXV0ZmYzNnRmMysrKy90ZHJ1ZHZuMzdadU5MQmFhQ01nVXpDK3JaUmlGb3d4VXVKSThZTXFjQ3A5T3BxNXZhZ2FZVTZsR0pBMVhRcWVqY2h3NkNqMEd3NW5ZQnJHdzAxQTJPMjA2bjA0QkdvdU5OeVRmcC9Gd0VsaFVleTZuWHJJS3c3UVFXZGR4dU4ybGRMNWZMODM5Z1NQRjhhaHUvSnZCTzQ4Q1BTdXFNZjhWcDkvUDUzTDU4K2RMdTkzczduOC90ZnI4LzM5L3Y5L2I1K1RraFBKM1A1Nm1RNDM2L2orL2Z2Ky9pU2diemVyMCtBWngvNSs4OGJ2Nk9NZGE2UzV6NmtkMjFmWUM5ZHh2N2NJSkoyZDlBT1MzMGZQTXp5SGlUTThCNERGNlhVbFlIcDRLUVczVysxdDc3TU5CMXZHSHhXcTdYYTd2Zjc4K3k1L041QStIMWV0Mjl4dVA1ZGJZdHlhUnU0QWtzYlBxNjkzNmZqUnpYUnhCYlByL2IrYjE4K2ZLbGpUSGFCQkJmbjgvbjAvMStIMSsrZkJubjh6bTBzQjhmSDV1NGNyNUd1QmhNVmswRUVuOVJzY3RnVmhNK2l4bEp0TUEyM1I4QjZ5eXNBc3RCT2dGWElLS0NNSWdUb01xTkV1MmZZTUg3enRjNzMyZFFLa0NqMXl0QVp0WTBLeDhwSXI4R0dKK0FUM1YrMkhpcmhsKytmQm1YeTJXejczdytiMTdQOHArZm44L3RVd0dWbGVWa1R5VWI2OERrZmF5V1k0enhOUmloVTRFcExKUFpWcksrdTdKNC9tZ2ZLcWVMVzlYMlJFV2xJdEwxZGl5bmJERGIzK2pYZ1lqUXFuMHJyeFdjK05rSUxQN0Y3eEliTXZ4N3ZWNTN4NDB4bmxiV0pGMTJaU2FnL04wcFc2dCtaem1PTXpIamFqS3dEZm9uZDc4ellUZGZxMTh1cDk3enIycTh2M0lpb0JwclJ0QmwwRVo5b2c1V0JSR09kT0hqSWpYRjdVb3RGYmdPV25YeklKeXpZdmpHNUlZZ3NtTU94SGt6OE9zTVNyVk5XZXE1VDhEYU9jYkV2MU9kNXJiczlhTzdZdk1ldDYzRWtGKytmTUV4cStNUmw0L0w1YkxaTi8rZXorZm5aNkthenVNcVhTUVZPNXNwSlhmbEhBSXplcy94SnNlY2tSSmlETW9nOWQ2VmZScnFYTXI2S3BWVjI3alJ3SmFjR292T0FNMXpNZFFNbndLMUF1Yks2M2tkQ0NodkkxQzdnMHo5bmYvRCtYemUyVmo4SDdHeDRQOWR1UWxzWUNycXlOOFhxRzNIbS8xME9qM2p3L24rY3Jsc3R1TStqUG1teFQyZFR1UHo4M1B6dDJwbjFYc0VIWC9iblBhVnFWbWgweHdPdDBvNlhMTEFIZVBVVTIwM3dIZmNyc3BDd21WM1RyeUI1czBNc2VlZzk3eC9Cd3pDakJsYkIrcFJBUGxhMEJWUXVUNlY2UUhkQmxqM2QwS0cxNDdiK0RxeFFlVXltRE80M1c0ZFFhcitUSWp3bUFkMHo4L2g2NXZmMC95THYzUGI1WExwcnUveWREbzlzN0VUMEkrUGo2ZEtLOVZVRUllS1dRV1BBT3JKOExLZDR2RSt0OTFZM2U3VUZsV2F0ZzJWd0puYitIUG10dm0vc2ZLNTkvT2FXRjN4L2VQMVVQSHZBNUREWURwWVhmYjBkcnYxVjJEa0JreHR3L3RFV1ZWbFhXZEM5cEZZczUvamZoOWRTLzE2dlc3czZsVEcrVGZxc3hTSkh4a1hYcS9YZHIxZXU0THNmRDZQM3ZzVDNONzdEa0wrelBtNWpTZEtMNHpSM0F4UWQ2ckhrTGtZbFNvd3NycTd6bnp1NndTd2RzTUpPWG1BNWZCY2p4dGdNR0JZSGxyNXpva2h0c01DVGdYTFFPVzRYQzZkRXlFTXByTDhtQVF6WFJnZHVpeDJ5WnpvcnhrWXNEbjNoQjFWZU1MR3NYc1Z0Z2wycFc4UzNzdmswdnc3UjRoTmFIdnY0Y0FDbDVIRnp3SUgwS2M2enU0WGpEUFIvanBBVnhXek8xWGsyRERiM3ZUY3hlR1UxaVdaSGttSURXemlXS3ZpckNKNERyYXZzNklKL0dHNmNUcVdkWER5K2ZBclFEVlZrTHFrVmpBb1pJSVRkbW1JcVh3cWE5NU4zK01HWW9aUWRSVk5PNTNZMXhSa2hPMTZ2WTdldTUwN0NhOWxKbmJHcHhPZW1RaFN3L0FRc21tcDV6VTlCaVU4RzZ3dlg3Nk02L1U2UGo0K2RvMEJ6NENwZ2lrblRVZURxd2xLQm1nM3U0T1ZqcloxQStyQWNnYWVqV3E2ZUpDdkNZRkRPTlN3T2dIWDRFUVJ3OGx4YnpET2RFSzZnWjNIazFiKzhnMm8xSkZ0S1h5di9mRWRUWHVXaldYZEFaaUJwNkFEZURyQ0ZpaW03QjZaRm5lZUk3R3ZtL1BNa1VEWDY3Vzd4SThiMEQ3L3Y4ZEE5cWZONW9hQ2Y3NFdaakgwbWYxY21mWTFZMEpVRm1WclRXdTh1emtOY0x0RWo3dTVGWEJUa2ZDNkdPQTVxOFlNeE84S1Z2RjZzQVZHZGNyVWJzS09EY1FLa0xNT01kbWx4dW02NDJZclBtMjZBbGhaVzFZQjFSK3JyR3N3RThUYVlBV2VVTXhkZitXandTdloyRWYzeXRPeWZuNStQcFZQQWFxT240M010TkJxdm1qanhiak00bFpqWlk0Z3FOTUk1a3RhVy9zWUtOd1MrOWxGUXpHaWhtTUNLUGE3K1owVjZFYjBHUm1vYnRwWDhKbGpXdTVGTUxONWphNmhHOWt3UWdacWY1KzFOSDVVeHprRlJlQ2RXaEo4WGRsR1VreE83SFJsWVJtNG1WTzQzVzd0ZXIxMlRQSkV3L3JtRU4zTDVTS0hJV1pnOW16K3BVb0tPWXE1YkpUSmRYMmdtZTFVY3hNWlFGYUVRSWxIY3QzMk0rWTFCekdrR3V6Zml5QU45eit1Z3BsWjFzeW1DckRDWVlrR3hEVHBJOVJ6Qnkwckh5ZURVQzFuV2FlVWFEOW40eGtOeVlNQkRadHpaM0IrK2ZKbFkyMVhGRE9jQVJKbGFiT3lpUzN1Q3BMSTlqclpqQ0RrYVZ2Y0NDandvZ25LU2hXZHpYWldsWk12VlRnRDhMcHFsQ0xycWdiY0IrcVl3cmdLWXBUMGNjQ3FiS3lDVmFsa0VhYm4vRnlub2dDclBLZnFmNTF4SjdzR0IyWlhjWm14b1NPenRqeDMwMERaaTdhMC8yQUlSMFVsQmFnOVN1RHc2S2NBemxhQjd2SFp2V3BqSzkwZHlycTZiS3lEVVpRYlIwQjA1YmlMUWtISWNTVW1nSUsrU3d1cWdIQ25vaW8yUlFVMXlqK0JuQnk5cHBoVktMR3lDN1p6RksxcHhXSytFOEloVkNXTE4vdUx0blVVNGF5b1lMb2FBTno4RmR0YVN2WTRwVjBCRVcybHM2MWN6cWxsQktwVHlLZ01BaHJaMWNkYzFSUk90UG12V05rZGNLWjdaS3hhV2ppUExKTXBwN09aS3hBK3JxRy9vSkxqeGYwcG5KbHFMb0RabzNneVUwbUtHeXMydGFLZWNqL2QxQytySlNwbEJxbFR5QXFnUitEOEtqS2xtUkwyZ3RVY0FkQ3RzTCtpakNOVDFvcXFxa0gyT0hFYkc1c0RGblVnNUFhK3lMb3UyVlUxcHRqMVMyWlFxdjFPUlpOOUlXelJmZ2FSQnhLb0JFOFVXeXFsSkZ0ckljMEF4TmpTamVkOTlDVFkvWERmU3pDejVNMElab1ZFc1duUEZOVHNsOG9vVkMxVHpiR2dxRlpORFNnVndLSysxc0dETUtxeFpDV0dWTUR5c2lFcjFqVlNRSlVZd2o1aUhPbFRoZEh0NDRTUWc5Q04rbmw4RDkwTk1JZ0FkZ3I0NkpxUmlSOUk4dlJkRnZicjE3bS95eFVNS2pOTE1pVlVBRHd1MkNXR2hoaStGNTVUV005TTljb2d6bXMxZG5NNHVPRi9MQUVZV2RjcW5NN3lGbXlxM0lmd21PUk9kN1kxaUZXdE9qb1k4VG80MW1UVjVJeXNnRkZ1UnpzYldGR2JOSUlKQ0R2MWRPbzRsWkc3aldCd1JGdFZUS3VXeWVDQnlKS09hbjhvWjNlcDlYZGRObDB0RHVheXdMejljWFBZZURBQTBTcGtCTzlzYlZjVE9WV2xkUHY0dXl6RWt6eEh0anZvbkhvU2tGRVdOb28xZDhEaGNRcHV0ZDJwcE5vbjRCem9BaUoxaEJGUWcwZFZ0ZGJHSEhEUVd1c2htTkVRdWtMTTJRTzFHMlk4YmdUWHFGaGNCSmo3RWpQZ2NQdHM4VVM4cVBwUEIvZFh6bk9oNVo0Mzh0ekg1ZWM2UWdyT0tyUlJmS215c0JtVURCK1BoWWFiTWxWUEVSK0dDU0lUVHpyN2FtMnRBckgzYmdjRXpQSm0rY3I1ako0Tm5ITkZEVnJGWGNJNUxlOWs1Sm53K2JlZGJWK0ZmUnpaSUhhT09hT3NMWTAvN1VHczU4RGpyR3dLTUlNRklHek9FVzEvakdzZEF0Q042aEVBSTRoQmU5WVhlUlJPQlNWUEFWUEFxdklNNWJ4NWhWS1dBTVA2ekJSeTNpZXNjcmlkVmRGQmluQnhYRG5HMkdSWTJYYkN2cDFsaHZHdE85Qnh1NWg5MDhYUXU0MmxuU0FyTUZkaXpNaW04dXdSQ3hQR25uT1M4bHdwbmJPaURxVEFqc3JSTi9QY29BU2NDYmFBQ3FWTTQweWxuampUQnMrYndXbEFHMjMvVUtiZGtpd0tXSVFQR3pXYWN6cG9TbHhQRWo4MjJjTldrcFM3Rnl6c0RycXBmZ3BHM2phaHcydmdiYVNRQXh1TFdaWXQ3Snp5TmU4Sm9acE5BY3ZERk9kdzB3cVlUOUFLMXJaei9EZGJTbExQcDByeUl4Z1FKbEs5QVpsRXE3SU9YcG9oZzlQSWhyQ25nODhKc094aVY0WldBWWZnNHNpa3gvOGt5Mlo5bDg2MnVxd3Jmc2NJSDgrdWdUbVZHeWlkZGVWWVVnRU1uNEdaemcxNEV3SXNoOXN4MmNLS2lXWFJldU9FNWd6R09RZ2RsUktWVmRsZXZxYjI3OVhxMFFuc3RzMlZEYUJPMGNvZXpzcnVXdEhBcHU2c0tHNElCaE4wYUdVMmtMck1LR1JUTjNIbWJDRHdLVjE0enZrTUVERzRRZlpWc3BWbGFOVTJtaGM1VEVaM04xaC96cVRoZXVMcFcwNVpXVEdWamIzZGJuTm14S1pCbk44SnFpZGFWTEtBT3lBUk5MUytNQjU0WjIrVmFxb01MS3JvVkJsbmdlZm5UUEFjb0hOV0NTdmxmQThDSTBIRW1CTkJuQmxYeU1yelU3QTdXVm05NFBQcVEyZ21xS3grV0RHc252aWxtY1NPQkpxT0sxbll5QUl6dUF5ZXNxM1VkU0szS2ZXY1lLRDk1SG1mWU9VM3FzZXIyQ3RZRVVBK0ZwZnFkTnZnUEJaVUJoRHJHT05SVmxRc2g4ckxjYVVDeWtIRzBPT1V3VGxMQnJzaDVzb0VNR2V6aTFFNEhSVnQxaWNwNXdaRUZYZGliQ2tHOFk4dlg3NXNiTzRFMGlvbTl6K2hqU2lPZnkzRGhwWEl0cFZoRStVR1Fkdm9XanRDaG1yR0hmNFlBektnQk5uR3R1SnhGQ2VHZGhVQWZRTExLOGtCWUFQNmd2RkpaYWpNRzNYa3ljeThLdUMwcTRFeXltd3R3ZHhkdjJNMG1JQnRLMExLbmY2NDBqMDBBdXE0Z1VrZFdHbGhzMjJxSmM2ZFpDc0wxOW94bmxUSkc0U1lWUklHcEQ4VFBGQnVNNk9FbGJTMXBsZGlkNG1HQXlONlpJdXBiQzViWEpOOWZkcGJUaFN4TFVhSThJRzFYSVlCeFczVGpzNktRb3NLY3hmeGNRbWRud1JHTTEwR25GY0N5MlhZdW5MTXlBa2RnazRtZVBpY3pzTHlndGhjQnV0NmdvT3FTN1lWRlhBRExqYW9zQjZzNm9mY1pXQVpTSVJZcVNVa2l6WXd0dFlhYjN2VU9ROXcySFJ4SUlnOFd3UlZlRTY4eGk0VXRMM3pScGh4cGx6d3VacmNxWUNxMUkzalBJNWRuSkl5Z0VvaE1iUHFWSlN6cnd6eEJKVHM1ek4rUmVVU2d4aWtQUVZGM0pWQmVOUXhiSEVOckVNTnZFZEZaVlY5bEg5K09SR0VzTlpRcHlUTmM0QzNBRzdYRjRuZ3pxK0RyTzJ6YnVhYU9YZ2RhRmNka0VvdG9TRkJWWDJxSjBDOE9XWmVHNEtHbHBnaEEwWGZUT1BDcVYycXF3UTI2UVdmRjJQTUxoSTJ3MWxWQWEyYVBzWWQwemEyNU1RUndnY1pONnVRRENpK1p4aUQ0WEVNMmtaeE9UNDFGblpuYVJsY3Bab3V6bFJxcWRiUVZXb3BRb1NCNThSVjUwbEJOckhpL0F3WFM1THJ3RFZscFkzRmMzQnlpWUdjNTJUcmlzdDZrT1hkd0luQVF0SnBwNVFjaHlhcXVZT1Y3U3UrZnhWTWFWM2RjMFJFMlM2bVVZMGdMdDJwTWNZcXJLSVE5dzJsMWdwUVVNdFFZY21tYnQ1RFROeGRoblVDalFxdGJLOVNVU3p2ckMwbW1oaEUxZTJGUzIrb3h5cHkvWkFTdXRrbXRqeDN2Y0JDMjRQWDY1bmJxa0JDUmhmalM5a0lZUG5lZThjTWFnVk9oSS8zVDFmQW1kdEFXWnNDc3dUSkNrUVZOYTBxV0tTS1BPcEhBVWhEOURyYlZjeW9Za3dxaHZoMTd2WUFheVhMUXlLR1lkeGxVREZwNDk0ckJYUmpZZ08xN0REWWV0TklVai9lenA2UzBsbmxwRXdzV21KTWtPd3NLWGVaS0VBaklIbjBFUUpJU2FSQmNPNlVNSU56N3AvYkVqam53NGZ0K3htRHZrc3hYNEcycklyaXM3cWFlS3dBRk1QMk9pN240Y3JpdVp3dHBTVXdwZkx4U25PUlNySXF1c2M1WkZhWHlzcVJXamlaMkR5QVdFSUwzNXRWU29RRWxGQUNqT2VHR1NFN0FIRVFnZG8vTFN2Q09nR0J2a3hzbURidmxTM0ZwNXZoYUIyVEFHcVJLcktLTXJoTFZwYUd6RVZqWjBPUXhEaGFDVEErUXlSUjFkMTVhUXpySm50TDNSaWJzaXBqRzZqbGdMNHlxYlMwc05ZZzFlODR2aGJCVnJFbEs2NENVY1dZWERmS3hocEl1eGlWSlpVeHNiTXkvdVJCS1ROUlE0a1EzTGRSWUxTMHJKalJQbFRQcVk2Z2RKc0VEYythUVhBbitIZ3NOVUNiUnVGME9qMHp3bkE3YldEa2JoTzVFbnMwMHFlUWhTMWxhQk1sNU0vY0FheHNMRjhyS3lxbCtUZjdFTExFR3UvaXhpaW1kQ3ZvMFRqZnBqS3dhZ2dlbjRlaDV2N0xva0xLYkx1eXZIaGNaRzhkaEdyRUR4N0hnOTNacHBKRjdxQnFPM2lWdmVYRURRTkluemVvZThZcTZlUGFaQloySnZpTTNXMlVBR290ZWtSQ0FHcTRFa0YxWDNET25SMTF5UnNCTDF0UmEwUFZjWmlORlhaMmMzNEZza3ZvbUluUVE2bHpwSm9aYkp4azQzTndLSkZCcXVKU3NyQnlIeWR4S09uVHhRQVNCbVMzaitKTW5zSFNsYTNFYzZLOVZXb0pWbjl6Zmp3T003aHFZQUFxSlF3RTJhM25BNDhKMlFHZWdSa3BaTml2U1kreXMzRWtLZDRvSkl3c3ZJSGwzY1dnTHQ1azROSDZPbXRMV2RwdXJPa3dFTXVwWWM3ZU10RFJoT2NJMnVpNUpoVkl6WHpMeXRvL0dBUHVab3lvOHdrb2R1VmdKZ2xDdDdPaEdiZ0lENE1xNHNpKzYzelVTMUZ1RkZYRmxxeWFqMmVtSGxMTWNCcVl1MEZNdVIyOEJiQjdsT3hSTVNpQ1FYRmhDS3V3a2haK3BZRGlHU2dic0tLVjhNaVNSc3VIU0lXTTlya2xSaUlsWlp1cVhqc1FLOG9vWUpNZ3EzSktXVmtoSGJoc1Z4RlV6dGhPV1BrWWlqY2J4NTRJS3NTZFQrdUxyM2NyR0t5b1lnRmlHUjlpQms0a2Zsb1VYK0pJbFFSUXFhYm1wZ25ocXRwUXBiNlJWUTFXSDVEbnJTNGhFb0dacWFlclEyZGhGYno4WGVQeFNobURibzcwZUlTam9vck8ydks4U0pYSTRTVW1FVTR6V0tEelVEdFdUWXc3eFhsYlNURWo0RlJnN3pLbktvR1JBTHYwR3M5VGdjMUJwQ3l3R1pSUUF0cVZ6MnhyQmNBTXpFcGZad0ZTYTJHNVcwUUJGalNNYXBXQUVGYTNIY0dON0N4RHpFQ3lJa0o5N3F3cnFXTlRXVm84NzZQUHNqUGtqMnd2Z3JvTTVsTFpLTUVUS1ZxbC9Ddm5XVkZpRmEvU3pKVVF3a29ac3I2N1k2dmxTUlYzLzJ0bU5UT1kzdm5heFl3TXVvUEtxZHpSMXc3SXFIeW1sUHhhQVRoZlU3S28yWlhZajRBWUpITCtrTmRLd1JRWUVTVFJhNWZzVVovclZDMVRNVHlXVnlZb3FOdHV6YUhzTXl2MnR2b2FyeGRmcXdZZ1UxYXhGby9jbnFsMUZHc3FLK3VBUk9WOEJYNEdVOFdjWlRBVGkycTdRY3lpME8wVitHaFdCTU5SVWtuOEgxU3NXVkU1QnkzR2kwRUNxVWVKb0JmQXREYTRhbWtkWEczN0FHUDVHZ2ViODRwN1VhenBvS1J6ZEZ6ZVE4SGtvSEd4cHJLeS9IcG01dDEycDQ3SjZ4VFlERXo3dUlORVhTdXhZWHZGc2tZQWMreVN4SDlzZjVmdEt6VTZJYndWQmNVR2c1ZTVGTUNFWFNFclpSMHdHYXlWMTl3b005Z3VQalRxSmRWVHFSNHVFNG5KbkxsZFdWa0VDQ1pMZDJWTEYreHRhbWV4N0lwaXJpU0RVcHZycG45bHJ3R01DSHlwcE1IK3BzNkxJTHN1RkdVajFYRU9YaXFicVNIUFVLbkNscFdWNjhrcXRVUlZORFk0VE5hb2N5a29ZZVRVNW5nR0VRYS9TMURubkU0QWVYTWNLakhQQW1GVmpDQkVOYWV5TFZOSGZyM3B4OHhVc3RKOTRoSXBmSDRIS0UvZURhQXJLNmxTeVZWRmJkdDFneFRJVmszcHBwVmxGWGk0cEVoVkJUT2JxdW9oVTg1TUxYbjFpYWh2VWtISmpTQ01jMDF0TEZ2ZVZWQngwRG9kTTZqZnRDdTdET3RJell4cmMwcXAxSkdQMmF5WUZ6MkdiNkh2TXJPOGNuR3RWNkdqbTN1SW1TZkQyR3BXSzZ1b3diWkdNeEZLUUNvMXBPTXRjTVhGcFJzdCtoWEdvQW9tRjNzU1RCR2dUZ2xiQktXd3NRM3RacWFZU3AwWjFDaW1SRFdGY0NKVVBZSjAwQkk1RmtLWU5vaWZ1UXhtTjg4U1dWWFdMTWFVcXFxZ0MwQm1RSlI2c2szdTlOQ2Y2allMWHhBZnFzWUVnVkxBaFJZMkF0Z3RmbFpORm1GeWh4ZHJMa0FkV2xrNEQ4OE0yaXhIeWVwSWRoTUhyRy9pUjFaR3RxME1HcGJEYlJQWU9YZVNZMU02Tnk0WnN0dkdTa3RLK1hiRlBBVGoyRDM3MXNhUEVzQU1YaFhyc1owa20vWFN0a2hoTXlCZnNhNnVYRlplMlZDZStZTXIxK0dLZ3dyUXlOWXExVlJyQitFaXpBb3c2TnNkTktjeVZFa1llTTczeXM2cTRrQUhwNkJpRmtsVGtJclZDNW9ZVjd1endPR0N6NFVKMFN0cTJsV01KeTR3dGIrUmV0TDZ0WkZpY25KbUJ3NVVqQ3ZYWE1aVkpYMk1Ra2JmK1hONUVXZDc4Vno4L0pFc01aVEJpS056c20xaW5MUlVRNzRINE5pZGFxSTY4ajVzQUZneGNSdmVDN2llTEpYZlFZeGpaWjJDc2lXRmV3WlhKbUJJbFoxdGR0clg0aFN1YXRlS3NvL1JaT3RPS1cybm1xMW9UemVLNmRSV0FXdTJOUlZiNGhxMFNYbTFHdnR1Z0hyYnI1SVhxbVNrdGc1Q3VERTJNU2xQd3NZNWtORTJXcDNBcWlaYldWTEF4aUJGKzJpQlpidU5qNk1CNnJzTUxDN0Z5YXNhWUR5bzdLa29QeUV0dzNwRU1YZlB2eEFKaTJqQVFRZ2pyejByTElaU1dabElvTmh3ZDV4SzRBUjltWU5qV0FhTHJudUltSmVCVk45ekJPUk9iVnZicittVFRmRlNFSkxTUm5IbzdoRUpvSWk4TUZxanhtdmdtRjVVUlp6NHpMRmdaWjhDdHUyWDdnZ1ZjY0ttOWdWeElzT0hxeFhnTk1LbkZXWlluZjFkQm5PaGF5WHExN1F3RmxXVzA5ZU5LeVZKRm1YcWFPTkdBNWFDZWdNYkozVVVrR1kxaWMzbktXZ2pxOHFmVllHUUcxZ1J0NnJzNjJhNkhpcXFVT3FkZXNLNU5tWDRuR29mSm9pRTFkMGRGOWxWVmt2VDEva0VFYWFDb1lPd0ZwY1Zjb0xNKzc2NjlQeEM5cldxa3RIMHNXVVlsZDBWQ3B1Qlovc3RWUmNHZ3k5V1gyK1UxUXRoaTlTekFxU3h6WnN5K09pRnpCWW55U0dWNkdrdTQ0ckQ4QkNPWkJWM0J2RDUrQUtSSE53TUVzQjZFekhuSnBrVEFlaVVsRUdrY0VDZUI2R0RaVHA1WUVKVGx2ZHJrbnhZalRsbE1rZk50WHdEak03dVZqSzVKWFVVbjQzcnJxcEsyanl0YXhIVzBNNUc4REM4cnRITVlzN0tTZ2R1VlFNR1RZRnFGdlZTNnJrRDNzREo0NmFmZFlGd29xMTFBT0tDQkxodndvVWdjOElHQU55Y1I2a25acmRKUGRzdXhueWpmZDNGb3ZUbFJNZEVkdE9sNUNNVjVFSHNYUUJpczdUT3d2SURaYUdqMlZucGJoN2NwSzYzVndZRU1Md3Fianp5bDY5OXNhd0ZGa0YxeXFqVVUzMUhmQzZzVzFaRlZGdVhWWFZnejlrZUVhdzB5czFsV2ZtK2F6UUFRU1dBK2hLWVZmc1pqUG5jQWNVQjlvSWF5eS9VWlhSTmNrREdqaTc3R3NXYnZCbzZ0UHJXUHFPeVZrQlVxK0lOZXFwek5kWXMvdTBpZmg1cW1wcUlXKzMzSlZTVWN3WTcwS0w0VTlsWWRVNmxqdFNsczdsbWZpOWczWXplUWZWa2FHRmFWM09EQ25hRDJOOHdzRURGa2xFM1J6TTNaZ2hkWWtXSHNzenE3MEZJZWNuS2tWa3Q4ZXpNelJxOWJrR3VLb2pSTEJWU29kM1kxeVBxS2dZVzdKUlFUUFZ5eTV4SVlMak9neGdUNTJSS0pVWTFkT3JJaVJkNGZ1dFF4L0E1QWNTbUVqejB2Rldya0x6dmJXQXU5SE9XYkdneEZrMVZOVHBuQktrNlRnd2lzSS9IY3hZWFAxdUFXTzcyVUxGbEJUcSthU3UyVlRVczZocnhNMkNGK2hFb3IxVklBOVptRlVhYWIxbFNTZ1pzVnM0c3h6SGxWTG9KSHI5SDREaE9OVGtJMVhDMC93aVkyTm9XQUc1UmxuSEZucTZvTGNjcFFkZE11Si9PMTdKVkE1T0hMaTBCcUN6dHE3WTErK3VjQ2Q5OHFMSThNSUhCVi9jS2p4UVRtZTNoRkJTM015Q3FuRHN1eW0ybzgwSGp2RkZUdHJVUm1OYUdKc21WYWhJbWpUc1VYS3RRWlRBVnM3TXZ2OC8rZnpVclpBWGNMSjZNNGtvZTZYUDBiNlNtV1dORHp5VXBROGJsK0x0V3g0dHVxWjM2Y1JZVjN5dVZ4UE53dklpcWlRQ1NtdTdzcmdUelI2bmt5aHBDYXJYd0Z5MXZHZDVpUDJjWTA2bEZyNU5qaGhnMVk2K05CMjhmdGJLODNzOHJmN2tMSmJLd0RGUGJMZzI1YTBBZFpKRWlxcjVwaGl4S01EbFJVdGNzc3ExaHJpTHFHb0gremVOZ1ZtOU9lbWpzRVRWOEpkRjBOSG5rSUZ4V1kxT0I0WXJwN3J0V0o3TmdBQUFQWGtsRVFWUTNvTnM1bnBseVZmOHUyRm9MdTFKckh2ZWFaV1FqcUFrc2h0RmEyZ3pzU0czWnBrYnZnM0hhZkY5c2xQUGxsZGpGbEs4MEd5c204TXI0TVBobmVOV0VOUEdqQUlwbWlsVFBBVGRUUlRYbENCWUhZQVF1UHdBMzZ4SXBXdEdONHEzWTJNaGlHc1VwdVNTbmxFSlJEOFBvckM3Q0ZZVncrRjUxcVRoZ2FieHNUeFd6Q0dZMFpTc2IzbGZxQXkwT1BOak55OHhpUVFLc0hZRlEySEJaVnZWYkJ1cTNtMW9XS2FqcWFvbnNNNnVaVXI2Q2pYV05aMGw1RTNoM2pVUm1hNmtQM01KSWl5MUxtK2thaFFxNDFOMmlaamE1c2p0bExZTlpIWnJINnFVR200dk1iRHA2UncyQ0ZtdnV5RmtyQmNDeU10RnFCYUVDbXNIb0s5QloyTEEvbEpjUnFTYURxbmFXYnJaZEdhejNETGdJdkJsbjR3b0d6dGJ5Skdxc2x3eGtoaEhyVGpUWUZYQ3RPb0tTOHVMZG9mVmRBYk95bEdVNm5sWXBYV1p0czRuWEJxNld4Sml0TU5va0hVSm5ibkpwbFFtK2FHcFkyYTVHTVYyUUQxaFJ1YkJQRktkdW1mNU9Ia0xIejBGOWx1RTVrakJqUmEwbkZFNUNVR3FIdzMyTW1qWjZ4a2dJTlZuU25aMVZaU3RLMnFLbFJhTGxRZ0s3dVRxN0pGWEp3TSszU09FS3loWk5JK3RKMEk1cU1ZeTlrMnFKRDdkVldkcUtYYTBDS05SMENjamcrQjJJWXUyZmNCWkpaa01GZ00xMXIwWDkyd2lsZ2hGR2d6Vm5leGxxQjd4TDltUzI5U2lZVVZZMm5YT1pqTkJSc3lEc1FQUldXNWhyWjRYY2RDNEhWV1JiamdKcjRzRm9mSzVTempRN3JoSTFVZWJkUGRFYmo2c3FJdlRaUVo1dmEwOHJBQnNBVzBVeGVXeXRBazdBMktKOVpweHpDaW9CMjRYRnRZQWVYWXhyNmFuU3FoTGdwcEVxV2JHd0x1blRnclYrSWpXbEwyOWxqYUFsNEVRTUdzRXJwNGFwZVppcXV3UlhMWEFxT0NlcnUzMm1teWRjNm9XVFNXcEZBR2R6ZVRCOFJUSFZNRXRsTTkwQ2JiUUNZaFBqcTNlZ1lyMUZHZFlJUWppdURHWjV6Wi9Bem9iS0dPeUx4dGk2YzRSd3R2MmFueVdsTElDbmxMaHhKUlh0NkE1ZWJEQldGTk9OYnhXWjJkMDJtbnU0UzlZRUNwZXBwVjF6U1dSQld4SFl6Vkl2MUNYU291d3FxWDNqQkJCRFpkWVFicFRRVzRaUWxTOHI1a0g0c3VTUm1nMisrM0pOMTB4MVBhQW1Fa210WWxFZGVHcEpFTTZrT3VDcUNSMjJvU3VqajVJVjJIZFQwemo1cHJMS1RqWEZBUGpkUWx5cTd4SUJ4QVFQNXlNY3pHNFZ4QUt3MG42aWxaMlFCY2UycEx1bGt1eHhxbm9JekZmZ3F5cWppbDlTMVZOd0JyRm1leWVvcHM4eU9qWlV5YlpkZlM4Q3VhVElKdW16czV0T0RhTnRMcEZEUS9QY0pHd2VMaG1lTDFuQjBLcWlVRFNjc2lVVkQ4OURpM0h0ckt0U1VMdzNSTGl5Z1pEKzdzRjhKVE9iZ1lzckd2RE5VRlJHbDFpeTBMbDFZa1VjMmFKWU1vZzkyMEk4cVc2WURDZzFNcWswSkhKRktYa2JnYlJyZUkrcXBZTk9aSHJWY0RVYmE3cGpzcGhTSk50SzZ1cGdSTkFWb09TMG11Z0JlTjRiSVpnSGh1UFovczFFTmFYNktzVnIrWU5yaDFOYjdpcFIwUEU1emJOUmVnQ2JySFJVdzZZZjA3ZExCSmwxZjhLQjlhczJWMW5OcUFzbDYyTEJCaGVod2FsZXJrSG1CMUpGSUVaS1NFdXNkbDVKUWoxbkpsSFhTQ0YzNDJnSjlDWUdyWGVsa25KSVhxVlA4c0QrcXRwbENSM1hIMnFmS3EweWdNcCtLblZrS3hObFo4bTJZa0lsVk1pQ25YVXdsN3F6bkJLU3ZRejNtM1B0Nm9RYlhPNWI1Rml4Q2gvZkh4VVFXL0FFY0s2ekNOcUtRbkw5c3l3cW1LdXd2cVNZelQvYVBWTk5wVnlodlJXMjFhcWNpQ3NqZFd2QndJTFV2aDVWeUN6YldvQzFwSmpKNjgwQ1dzbCt1ZEtCNlQ1UndHMW1sb2hubHBiZzQ3aXo1VTloYTBGR3RtUkxGWUJ0Tzk5eTk3QXAweitaRFRBb2c2a1NMWnNNSGcvSUZra2dwNkNwdlUyVTBjWVZTZG5ta2p3QmRPbVhieFRXTld6dUliaXBNaW9WeEVja1pFb2FoU09peTJNM0swamNDMUxoVkR3YXFHMFp2a2NXcUNuckc0R0l4eWtycWxiV2R3NkxReUJhWlI4SG1MUkloUVdzSHN3RDQyWlhWTE5rZjlsK0ZsVzBIVlEybHdGc0MvWjFGZHpsUVIwS2FQZm8rRmRmdSsvZHdWUklDdTFDR1I3QUVJaUFoYytBWlVGMGtPQmFQeG1VcWc0aTY0dlFuVTRuRkRZSjlOeisxZlZYdmVIOXFtcitrUElMeDhvS2NSVi9CRmJ4YkUwSk1UMGtTRDR3NkwvbE5ZOG9jc3FhZ1ZkVTNBM01qeGh4Y0d1cXpzUEg0aXJwYW93MXE2T3lyVmp2cDlOcGM1OUU5MUxsZGJvWVZ6SldkaW1XZkFXMlNORUtjRGFYMkZtQkxMQS91S3hsbWhoNjEzSXMxVVJRQXBiS2Z0dHd4TDAycTZPbng1cFF4U2JQb2pBZyt2NWhBbk42TEhWUkRYSXN2S3RSamlTMHFKVXlaVEFYVmJBSzgyRWxGSldhUWRWb3FVQzFVbnQ3QlZhVFF1ZE02U3VxZXhqUUpONCswaWNheHYvdXRiS3Y4M0VUYlQ4SDhnamNPS3hPSm1iVWE2T09WWGh0M2RGWTZySHY5WG9OekZMY2VFQTFvOCtwS20wTEFIUEhaMnJZS2pGcTBoZlpGaXhzcUhKZ0QzZUQ1bitVMGtiMW1GalhrbjJsdk1TU09zTkUvQ2RJQUtGMFN5dHE2dXJPSFVONWd3ZzRHWm9zZ2JtZ2dNNXVjcmEycXJTMklnMWNiaUJCY3hZemd6VUROTEN2TDhHYlpYTnA2T1J5M0xtUytLazgzelJJQUs2QTFpb0thMkk5TmFwSXVpVUZkZkM5NzY2UEZaVXRxVXI2S2JXayt6WlUxYS9acklYRXp0cmpUT2Z6N2h3S3ppQ2VYSWFyYUh0YlpJTXorMnBHZ2F6Q213NHFXQUZ2RWRob2RZcDBYcTBwVjdHMVlXWVdiTzRxaEdxNDIrWjhCWXRyTFd2bHVOUHBaQWVhRkZTMXZ1YlBnYmd4c3FjcG5BYXN6Qm92S2FGb0RROEJHdGpmVU9sNE5BRzJubVFWMDRmZUpndW12WDJmc3JRRVdaZ2hMMEpuVmRZa24zRE9aSWVSTjg2UnFQV0Ntc3ZHVnFFTVJud3hRQXh3UzhFTVlvM0l6bVkyK0JDY0xwNE1LaXV5dWhJbWFtbGJaRmNOb05sN3RwK1JIZDE4WmpRSVJLeVhkRlJoTjk4L2h5S3F3WFdObzdPMXdpYVhvSE4xMDhSRVpaV0VxNmdybklmanplZzhqZFJmMVhFTDRra1hhNWJCakt4b0thbGpCamVIbFZ4UTRHYXljcFc0bERPQUt0blR4SEF0T2Z6T3Rad0hBTTdzcVZYa1Y2eXU2a2FwMW5Ia1hLcVdGLzRYSHFqZW5OS3FCanBSM2wxY2gzRWpnMStFc2dkUWhzZEcwQjRGTTlzV0FWV3B1QXlpd1RQbGVaeHQ5VnlaVlMycVhmUmVXcVRBaWxwcjlBcG9XVGp4eW1pdDdOd1Y0SlRyaVp5T0E5QjBrN0hGZlVMb3VybUtZSFZuUlF2cUdMNUhNSGRxRmNSMnFXcG1jSzZlVHd4MmRpcFdydmlEaWxyK2ZLV3EzT1dSV2RIS3dBNGV1OHdqY2hiZVJ6RmlscWpqWk4zdWZDcGZrSjAvc2NWcG5ZazZMMFBJNzdseGRXQ1o4N1dpV203Qi9BR3F1UVNudWpHS3NCOENKbWlKcThxMXBLSVZXeXFPaVRLNjZyMThCTjhyNzQvQUU3MWZkQzN5UFMyTXhkT3BuRTF0bFZ4RDlKbVZPb2dnTityNFBqQVhWRlBhM0VnNWpWSkdGVlVHTm9sSDIwR1ZyVUI3Qk95U1dxNldxWVFkV1I5MnBjRk1ZTXdja2JTZ0NLQ3FENjdEaWlXdTFnOE1RQzlCeWZjRnFXMUwrakw3MTRxTkN1em5vU3h0MGRhMmd0V04xRzhGMEJLME5OMG51aW1lbFVGOWRJZEFmak80NFVUM0NqUUxvVWVMSEpGVE8zZ21wUnVJSU92d0JRQ2JxTmVvM3F0WjlpRjZ4VksxM0dSbG80enFpbXErQ0dkVGlSMXVSWThvcWdFMDJoWkJhNzlrWlhQTXF1eFJIS2xhMnNhWldONG1ScVpVajB2TENLaGtqS25xT1FITnVTWlZKb0t2QXFTMXdwRXF1dldEQzFCMnlwd3JDUHNSTUVQVlRPRE1MSk1EdjZxZUtYd2kySllWNVNxNHFLeXZnR3NIQ0xpdWoyalI1OVY4Z01xU0oyRkpaUlhFSFZSSGozc0ZQcmN0Nk9wcWxXMUdwYXRRZHQwR3Z3Zk02bjYzSW5zR1ZGaEpHYUJxZ3FxSVY2SXNYbGxaZ3lTUHE0UjNibnQzd2k1Y3YrY04yeXFRTFcxVDk1S1lWc1dXdEtrNGNCOVc1M1dRUWZsUVlSNldsNEhhSlpqdlZFMEQ1eXZxK1JLZ1pDczVxZEJFUDVzRDk0Y0F2UUxsU2dOYVNNQXRIeDg4QnVOUTQxemRGc1gzMHpLYmNzME1MRC9paGtwUXpsMHdpVHFLTFRmYkttQ215WUlDbkswSWJhaWVDNENHOWlTeUxRN2NJTUdRd2F1NlRLb3E2MEFwbDNXTjQwTFpwY2ExQ0tLSzlWUXl5SUVuOHcwRjhGNkNMMmg4bzNpeEd3QzdzN0VXekNPcW1jQXBZeFlENGpzQXpWUzBzbDJ0OThwQTd2cktvcGhDVlNvbmJZcGdINm12U24yNHBUQlY0c2R0VjNCdE1xNWs4MnkrSUFEdlVKMHVBbGtDVlR4SWFQbStVTnUvcWtWNEYxVHpIWENHclhJQXFJdEJLeXBxSzk5VnRBT1ZzNjRPNE9iWDdwSExWQ3BZSGNSbXd2TFI3VHZZQUtCQk41OExHVnpEdUZ6K2hRYldnbmNReUNaQWsrVmJzUFNvdWY5MzI2MWlaZ21mQ3B3UmJBdnFtU3FyaVUyUHdoamFvT3lZcXRJZWdWWFZpVHNteXRhNmJHeVNwWTNneVJycEl5QWVhV0REeHRwc1h3S3lhbE1ES05QN1lCWE1xRXNrVXNpMnVDOEZOQVB4QUtUVmZUMW82VnpNMEUwakYrMXJXY1V1SHZkeWc3dmdvRnBsWDhIcHZIcE1DT01SVVBIelprSW5zcWxGS05YL0VJTzUyRTBTeFN6T3dvYjJWbVJMVzVEMVhJVTByYmdNMUF6V2d5QzdmZThHN3hVQUsvdGFFQmF0N2x1cXR5UDdFbXNhSlFPajVGK21yblpmQ3VZQ2ZCVUFXd1NoeWQ2cE1ZL3ZBSEcxVXFPWXBiSS9neTVUMENNS20rVU8zZ0Z1Qzg1ZGdmRFZlZ3VQRGZJVHJJQkxzTHJjZ2RoM0NGZ0ZaamFLSjRJdjNGOEFORXF2dXhSMXRWS09nTG9DYTFqeGJvQkFrajZ2N2ovaWNGYkE3ZjRyZlJuUURMUlZpRzEzaTB2cUJRcllWcUJiQURaVDBacGlIb1N6dlFwb3BLSUZTM3NFMUhmQldsSFhkMEg3TG5BcnF2b3VnTXRsakhCZ1puaDNFb3ovQktqTE1MNFoyQXEwK2hFSnI5amFWVUJidk56Q0lVaXJvQzdBV21tRnc0bzVBSzNNdEI1VnlwWk1TRmdzMDVKeUdWd2x3QnFzRUdBQWEyWlUxQ2pVZXhYR3NFNHJLcmlpbEJ2RnpPS0tvM0F1QXJvRTZRRlFVM3U4WXBOWHdTNWsrMVRadDVVcndvdU40S2lVRXcrazNaV0RwMVJYSE5ScVhiMjFUczM5OTQ1eVpTZzNWblpGTlE5Q0YzWGVaeXI1RGdCWEtpd0NNYTJNeGVURFlYZ1AxRnNmOVFOS1pjMGs4MVJKazNyNkVRM3JDbUJWeUxMNzVFaloxcElWREhvRnRpT0FIb0IwQmRUVnlscUJzS0tLUytBZUJYSlZMWStDWEFTdUd2Ty9BdXE3R3VFakRmR0tnMW9LYTF6L2RtbWk5STlTVUdOaGwwQXRmdWxIQWF3b1lyblNrbU5YQVZ1R0VockVWWHZVRitBNUN0MlBxTk9qRGV0eW5hNENtZVVvbG1lWExONEFxN0M1U2oxMFE3eWpnbCt0NkNOeFNSSG1JNVgrQ3B3cmVZQjNRZmRxbmE0cTIxS2RCdWM0R29ac240OVpPT2lWaW53SHFLOVd6anZnZXdlRWgyQVU1K3Z0eFo5Q2Q5V3FraDQ5VjE4RTVvajZ2VnluMFJTdEF5R0lPNWVkWFJLZDVCMFZHVlhxMnlyM3hZcCs1VXQrQzRRSjRQMU4zMzlwUU1qUmVqajR2Yi9EY3I2clFjM08vMHJqbXRacGVZQ0JpQ0hmQ2VtUmJOaGJLL3BOVVBjM3dmS3k1ZjJEN09sTDMvdVBodmUvb1U0VDBGOGYrVk5NMnZ5b2l2MGpLK0tIUWZkSHErMGJuY3o0b3o3My8rWTZMYkt3MW8vNUI3ZU9mMVJsLzBkdTlCOXRuLzlidnJmL2ordjBoNnR0bjJ0cC9yLzQ4MTl5NC96djUzOTF1dnp6ZndEaWZ6NnBoVDFNUGdBQUFBQkpSVTVFcmtKZ2dnPT0pfS5jb2xvci1waWNrZXIgLmNwLWFkZC1jb2xvci1idXR0b24tY2xhc3N7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTppbmxpbmU7cGFkZGluZzowO21hcmdpbjozcHggLTNweDtib3JkZXI6MDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50fS5jb2xvci1waWNrZXIgLmNwLWFkZC1jb2xvci1idXR0b24tY2xhc3M6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0uY29sb3ItcGlja2VyIC5jcC1hZGQtY29sb3ItYnV0dG9uLWNsYXNzOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZDtjb2xvcjojOTk5fS5jb2xvci1waWNrZXIgLmNwLWFkZC1jb2xvci1idXR0b24tY2xhc3M6ZGlzYWJsZWQ6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmNvbG9yLXBpY2tlciAuY3AtcmVtb3ZlLWNvbG9yLWJ1dHRvbi1jbGFzc3twb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTVweDtyaWdodDotNXB4O2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTBweDtoZWlnaHQ6MTBweDtib3JkZXItcmFkaXVzOjUwJTtjdXJzb3I6cG9pbnRlcjt0ZXh0LWFsaWduOmNlbnRlcjtiYWNrZ3JvdW5kOiNmZmY7Ym94LXNoYWRvdzoxcHggMXB4IDVweCAjMzMzfS5jb2xvci1waWNrZXIgLmNwLXJlbW92ZS1jb2xvci1idXR0b24tY2xhc3M6YmVmb3Jle2NvbnRlbnQ6IngiO3Bvc2l0aW9uOnJlbGF0aXZlO2JvdHRvbTozLjVweDtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6MTBweH0uY29sb3ItcGlja2VyIC5leWVkcm9wcGVyLWljb257cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSk7ZmlsbDojZmZmO21peC1ibGVuZC1tb2RlOmV4Y2x1c2lvbn1cbiddLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLEJuZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8sYSxzKXt0aGlzLmluamVjdG9yPWUsdGhpcy5jZnI9aSx0aGlzLmFwcFJlZj1yLHRoaXMudmNSZWY9byx0aGlzLmVsUmVmPWEsdGhpcy5fc2VydmljZT1zLHRoaXMuZGlhbG9nQ3JlYXRlZD0hMSx0aGlzLmlnbm9yZUNoYW5nZXM9ITEsdGhpcy52aWV3QXR0YWNoZWRUb0FwcFJlZj0hMSx0aGlzLmNwV2lkdGg9IjIzMHB4Iix0aGlzLmNwSGVpZ2h0PSJhdXRvIix0aGlzLmNwVG9nZ2xlPSExLHRoaXMuY3BEaXNhYmxlZD0hMSx0aGlzLmNwSWdub3JlZEVsZW1lbnRzPVtdLHRoaXMuY3BGYWxsYmFja0NvbG9yPSIiLHRoaXMuY3BDb2xvck1vZGU9ImNvbG9yIix0aGlzLmNwQ215a0VuYWJsZWQ9ITEsdGhpcy5jcE91dHB1dEZvcm1hdD0iYXV0byIsdGhpcy5jcEFscGhhQ2hhbm5lbD0iZW5hYmxlZCIsdGhpcy5jcERpc2FibGVJbnB1dD0hMSx0aGlzLmNwRGlhbG9nRGlzcGxheT0icG9wdXAiLHRoaXMuY3BTYXZlQ2xpY2tPdXRzaWRlPSEwLHRoaXMuY3BDbG9zZUNsaWNrT3V0c2lkZT0hMCx0aGlzLmNwVXNlUm9vdFZpZXdDb250YWluZXI9ITEsdGhpcy5jcFBvc2l0aW9uPSJhdXRvIix0aGlzLmNwUG9zaXRpb25PZmZzZXQ9IjAlIix0aGlzLmNwUG9zaXRpb25SZWxhdGl2ZVRvQXJyb3c9ITEsdGhpcy5jcE9LQnV0dG9uPSExLHRoaXMuY3BPS0J1dHRvblRleHQ9Ik9LIix0aGlzLmNwT0tCdXR0b25DbGFzcz0iY3Atb2stYnV0dG9uLWNsYXNzIix0aGlzLmNwQ2FuY2VsQnV0dG9uPSExLHRoaXMuY3BDYW5jZWxCdXR0b25UZXh0PSJDYW5jZWwiLHRoaXMuY3BDYW5jZWxCdXR0b25DbGFzcz0iY3AtY2FuY2VsLWJ1dHRvbi1jbGFzcyIsdGhpcy5jcEV5ZURyb3BwZXI9ITEsdGhpcy5jcFByZXNldExhYmVsPSJQcmVzZXQgY29sb3JzIix0aGlzLmNwUHJlc2V0Q29sb3JzQ2xhc3M9ImNwLXByZXNldC1jb2xvcnMtY2xhc3MiLHRoaXMuY3BNYXhQcmVzZXRDb2xvcnNMZW5ndGg9Nix0aGlzLmNwUHJlc2V0RW1wdHlNZXNzYWdlPSJObyBjb2xvcnMgYWRkZWQiLHRoaXMuY3BQcmVzZXRFbXB0eU1lc3NhZ2VDbGFzcz0icHJlc2V0LWVtcHR5LW1lc3NhZ2UiLHRoaXMuY3BBZGRDb2xvckJ1dHRvbj0hMSx0aGlzLmNwQWRkQ29sb3JCdXR0b25UZXh0PSJBZGQgY29sb3IiLHRoaXMuY3BBZGRDb2xvckJ1dHRvbkNsYXNzPSJjcC1hZGQtY29sb3ItYnV0dG9uLWNsYXNzIix0aGlzLmNwUmVtb3ZlQ29sb3JCdXR0b25DbGFzcz0iY3AtcmVtb3ZlLWNvbG9yLWJ1dHRvbi1jbGFzcyIsdGhpcy5jcElucHV0Q2hhbmdlPW5ldyBGKCEwKSx0aGlzLmNwVG9nZ2xlQ2hhbmdlPW5ldyBGKCEwKSx0aGlzLmNwU2xpZGVyQ2hhbmdlPW5ldyBGKCEwKSx0aGlzLmNwU2xpZGVyRHJhZ0VuZD1uZXcgRighMCksdGhpcy5jcFNsaWRlckRyYWdTdGFydD1uZXcgRighMCksdGhpcy5jb2xvclBpY2tlck9wZW49bmV3IEYoITApLHRoaXMuY29sb3JQaWNrZXJDbG9zZT1uZXcgRighMCksdGhpcy5jb2xvclBpY2tlckNhbmNlbD1uZXcgRighMCksdGhpcy5jb2xvclBpY2tlclNlbGVjdD1uZXcgRighMCksdGhpcy5jb2xvclBpY2tlckNoYW5nZT1uZXcgRighMSksdGhpcy5jcENteWtDb2xvckNoYW5nZT1uZXcgRighMCksdGhpcy5jcFByZXNldENvbG9yc0NoYW5nZT1uZXcgRighMCl9aGFuZGxlQ2xpY2soKXt0aGlzLmlucHV0Rm9jdXMoKX1oYW5kbGVGb2N1cygpe3RoaXMuaW5wdXRGb2N1cygpfWhhbmRsZUlucHV0KGUpe3RoaXMuaW5wdXRDaGFuZ2UoZSl9bmdPbkRlc3Ryb3koKXtudWxsIT10aGlzLmNtcFJlZiYmKHRoaXMudmlld0F0dGFjaGVkVG9BcHBSZWYmJnRoaXMuYXBwUmVmLmRldGFjaFZpZXcodGhpcy5jbXBSZWYuaG9zdFZpZXcpLHRoaXMuY21wUmVmLmRlc3Ryb3koKSx0aGlzLmNtcFJlZj1udWxsLHRoaXMuZGlhbG9nPW51bGwpfW5nT25DaGFuZ2VzKGUpe2UuY3BUb2dnbGUmJiF0aGlzLmNwRGlzYWJsZWQmJihlLmNwVG9nZ2xlLmN1cnJlbnRWYWx1ZT90aGlzLm9wZW5EaWFsb2coKTplLmNwVG9nZ2xlLmN1cnJlbnRWYWx1ZXx8dGhpcy5jbG9zZURpYWxvZygpKSxlLmNvbG9yUGlja2VyJiYodGhpcy5kaWFsb2cmJiF0aGlzLmlnbm9yZUNoYW5nZXMmJigiaW5saW5lIj09PXRoaXMuY3BEaWFsb2dEaXNwbGF5JiZ0aGlzLmRpYWxvZy5zZXRJbml0aWFsQ29sb3IoZS5jb2xvclBpY2tlci5jdXJyZW50VmFsdWUpLHRoaXMuZGlhbG9nLnNldENvbG9yRnJvbVN0cmluZyhlLmNvbG9yUGlja2VyLmN1cnJlbnRWYWx1ZSwhMSksdGhpcy5jcFVzZVJvb3RWaWV3Q29udGFpbmVyJiYiaW5saW5lIiE9PXRoaXMuY3BEaWFsb2dEaXNwbGF5JiZ0aGlzLmNtcFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCkpLHRoaXMuaWdub3JlQ2hhbmdlcz0hMSksKGUuY3BQcmVzZXRMYWJlbHx8ZS5jcFByZXNldENvbG9ycykmJnRoaXMuZGlhbG9nJiZ0aGlzLmRpYWxvZy5zZXRQcmVzZXRDb25maWcodGhpcy5jcFByZXNldExhYmVsLHRoaXMuY3BQcmVzZXRDb2xvcnMpfW9wZW5EaWFsb2coKXtpZih0aGlzLmRpYWxvZ0NyZWF0ZWQpdGhpcy5kaWFsb2cmJnRoaXMuZGlhbG9nLm9wZW5EaWFsb2codGhpcy5jb2xvclBpY2tlcik7ZWxzZXtsZXQgZT10aGlzLnZjUmVmO2lmKHRoaXMuZGlhbG9nQ3JlYXRlZD0hMCx0aGlzLnZpZXdBdHRhY2hlZFRvQXBwUmVmPSExLHRoaXMuY3BVc2VSb290Vmlld0NvbnRhaW5lciYmImlubGluZSIhPT10aGlzLmNwRGlhbG9nRGlzcGxheSl7bGV0IG89dGhpcy5pbmplY3Rvci5nZXQodGhpcy5hcHBSZWYuY29tcG9uZW50VHlwZXNbMF0sd2kuTlVMTCk7byE9PXdpLk5VTEw/ZT1vLnZjUmVmfHxvLnZpZXdDb250YWluZXJSZWZ8fHRoaXMudmNSZWY6dGhpcy52aWV3QXR0YWNoZWRUb0FwcFJlZj0hMH1sZXQgaT10aGlzLmNmci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShENGUpO2lmKHRoaXMudmlld0F0dGFjaGVkVG9BcHBSZWYpdGhpcy5jbXBSZWY9aS5jcmVhdGUodGhpcy5pbmplY3RvciksdGhpcy5hcHBSZWYuYXR0YWNoVmlldyh0aGlzLmNtcFJlZi5ob3N0VmlldyksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmNtcFJlZi5ob3N0Vmlldy5yb290Tm9kZXNbMF0pO2Vsc2V7bGV0IHI9d2kuY3JlYXRlKHtwcm92aWRlcnM6W10scGFyZW50OmUuaW5qZWN0b3J9KTt0aGlzLmNtcFJlZj1lLmNyZWF0ZUNvbXBvbmVudChpLDAscixbXSl9dGhpcy5jbXBSZWYuaW5zdGFuY2Uuc2V0dXBEaWFsb2codGhpcyx0aGlzLmVsUmVmLHRoaXMuY29sb3JQaWNrZXIsdGhpcy5jcFdpZHRoLHRoaXMuY3BIZWlnaHQsdGhpcy5jcERpYWxvZ0Rpc3BsYXksdGhpcy5jcEZhbGxiYWNrQ29sb3IsdGhpcy5jcENvbG9yTW9kZSx0aGlzLmNwQ215a0VuYWJsZWQsdGhpcy5jcEFscGhhQ2hhbm5lbCx0aGlzLmNwT3V0cHV0Rm9ybWF0LHRoaXMuY3BEaXNhYmxlSW5wdXQsdGhpcy5jcElnbm9yZWRFbGVtZW50cyx0aGlzLmNwU2F2ZUNsaWNrT3V0c2lkZSx0aGlzLmNwQ2xvc2VDbGlja091dHNpZGUsdGhpcy5jcFVzZVJvb3RWaWV3Q29udGFpbmVyLHRoaXMuY3BQb3NpdGlvbix0aGlzLmNwUG9zaXRpb25PZmZzZXQsdGhpcy5jcFBvc2l0aW9uUmVsYXRpdmVUb0Fycm93LHRoaXMuY3BQcmVzZXRMYWJlbCx0aGlzLmNwUHJlc2V0Q29sb3JzLHRoaXMuY3BQcmVzZXRDb2xvcnNDbGFzcyx0aGlzLmNwTWF4UHJlc2V0Q29sb3JzTGVuZ3RoLHRoaXMuY3BQcmVzZXRFbXB0eU1lc3NhZ2UsdGhpcy5jcFByZXNldEVtcHR5TWVzc2FnZUNsYXNzLHRoaXMuY3BPS0J1dHRvbix0aGlzLmNwT0tCdXR0b25DbGFzcyx0aGlzLmNwT0tCdXR0b25UZXh0LHRoaXMuY3BDYW5jZWxCdXR0b24sdGhpcy5jcENhbmNlbEJ1dHRvbkNsYXNzLHRoaXMuY3BDYW5jZWxCdXR0b25UZXh0LHRoaXMuY3BBZGRDb2xvckJ1dHRvbix0aGlzLmNwQWRkQ29sb3JCdXR0b25DbGFzcyx0aGlzLmNwQWRkQ29sb3JCdXR0b25UZXh0LHRoaXMuY3BSZW1vdmVDb2xvckJ1dHRvbkNsYXNzLHRoaXMuY3BFeWVEcm9wcGVyLHRoaXMuZWxSZWYsdGhpcy5jcEV4dHJhVGVtcGxhdGUpLHRoaXMuZGlhbG9nPXRoaXMuY21wUmVmLmluc3RhbmNlLHRoaXMudmNSZWYhPT1lJiZ0aGlzLmNtcFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCl9fWNsb3NlRGlhbG9nKCl7dGhpcy5kaWFsb2cmJiJwb3B1cCI9PT10aGlzLmNwRGlhbG9nRGlzcGxheSYmdGhpcy5kaWFsb2cuY2xvc2VEaWFsb2coKX1jbXlrQ2hhbmdlZChlKXt0aGlzLmNwQ215a0NvbG9yQ2hhbmdlLmVtaXQoZSl9c3RhdGVDaGFuZ2VkKGUpe3RoaXMuY3BUb2dnbGVDaGFuZ2UuZW1pdChlKSxlP3RoaXMuY29sb3JQaWNrZXJPcGVuLmVtaXQodGhpcy5jb2xvclBpY2tlcik6dGhpcy5jb2xvclBpY2tlckNsb3NlLmVtaXQodGhpcy5jb2xvclBpY2tlcil9Y29sb3JDaGFuZ2VkKGUsaT0hMCl7dGhpcy5pZ25vcmVDaGFuZ2VzPWksdGhpcy5jb2xvclBpY2tlckNoYW5nZS5lbWl0KGUpfWNvbG9yU2VsZWN0ZWQoZSl7dGhpcy5jb2xvclBpY2tlclNlbGVjdC5lbWl0KGUpfWNvbG9yQ2FuY2VsZWQoKXt0aGlzLmNvbG9yUGlja2VyQ2FuY2VsLmVtaXQoKX1pbnB1dEZvY3VzKCl7bGV0IGU9dGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LGk9dGhpcy5jcElnbm9yZWRFbGVtZW50cy5maWx0ZXIocj0+cj09PWUpOyF0aGlzLmNwRGlzYWJsZWQmJiFpLmxlbmd0aCYmKHR5cGVvZiBkb2N1bWVudDwidSImJmU9PT1kb2N1bWVudC5hY3RpdmVFbGVtZW50P3RoaXMub3BlbkRpYWxvZygpOnRoaXMuZGlhbG9nJiZ0aGlzLmRpYWxvZy5zaG93P3RoaXMuY2xvc2VEaWFsb2coKTp0aGlzLm9wZW5EaWFsb2coKSl9aW5wdXRDaGFuZ2UoZSl7dGhpcy5kaWFsb2c/dGhpcy5kaWFsb2cuc2V0Q29sb3JGcm9tU3RyaW5nKGUudGFyZ2V0LnZhbHVlLCEwKToodGhpcy5jb2xvclBpY2tlcj1lLnRhcmdldC52YWx1ZSx0aGlzLmNvbG9yUGlja2VyQ2hhbmdlLmVtaXQodGhpcy5jb2xvclBpY2tlcikpfWlucHV0Q2hhbmdlZChlKXt0aGlzLmNwSW5wdXRDaGFuZ2UuZW1pdChlKX1zbGlkZXJDaGFuZ2VkKGUpe3RoaXMuY3BTbGlkZXJDaGFuZ2UuZW1pdChlKX1zbGlkZXJEcmFnRW5kKGUpe3RoaXMuY3BTbGlkZXJEcmFnRW5kLmVtaXQoZSl9c2xpZGVyRHJhZ1N0YXJ0KGUpe3RoaXMuY3BTbGlkZXJEcmFnU3RhcnQuZW1pdChlKX1wcmVzZXRDb2xvcnNDaGFuZ2VkKGUpe3RoaXMuY3BQcmVzZXRDb2xvcnNDaGFuZ2UuZW1pdChlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyh3aSksQyhobyksQyhnYyksQyhlaSksQyh4ZSksQyhTVikpfSxuLlx1MDI3NWRpcj1NZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjb2xvclBpY2tlciIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJkEoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLmhhbmRsZUNsaWNrKCl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuaGFuZGxlRm9jdXMoKX0pKCJpbnB1dCIsZnVuY3Rpb24obyl7cmV0dXJuIGkuaGFuZGxlSW5wdXQobyl9KX0saW5wdXRzOntjb2xvclBpY2tlcjoiY29sb3JQaWNrZXIiLGNwV2lkdGg6ImNwV2lkdGgiLGNwSGVpZ2h0OiJjcEhlaWdodCIsY3BUb2dnbGU6ImNwVG9nZ2xlIixjcERpc2FibGVkOiJjcERpc2FibGVkIixjcElnbm9yZWRFbGVtZW50czoiY3BJZ25vcmVkRWxlbWVudHMiLGNwRmFsbGJhY2tDb2xvcjoiY3BGYWxsYmFja0NvbG9yIixjcENvbG9yTW9kZToiY3BDb2xvck1vZGUiLGNwQ215a0VuYWJsZWQ6ImNwQ215a0VuYWJsZWQiLGNwT3V0cHV0Rm9ybWF0OiJjcE91dHB1dEZvcm1hdCIsY3BBbHBoYUNoYW5uZWw6ImNwQWxwaGFDaGFubmVsIixjcERpc2FibGVJbnB1dDoiY3BEaXNhYmxlSW5wdXQiLGNwRGlhbG9nRGlzcGxheToiY3BEaWFsb2dEaXNwbGF5IixjcFNhdmVDbGlja091dHNpZGU6ImNwU2F2ZUNsaWNrT3V0c2lkZSIsY3BDbG9zZUNsaWNrT3V0c2lkZToiY3BDbG9zZUNsaWNrT3V0c2lkZSIsY3BVc2VSb290Vmlld0NvbnRhaW5lcjoiY3BVc2VSb290Vmlld0NvbnRhaW5lciIsY3BQb3NpdGlvbjoiY3BQb3NpdGlvbiIsY3BQb3NpdGlvbk9mZnNldDoiY3BQb3NpdGlvbk9mZnNldCIsY3BQb3NpdGlvblJlbGF0aXZlVG9BcnJvdzoiY3BQb3NpdGlvblJlbGF0aXZlVG9BcnJvdyIsY3BPS0J1dHRvbjoiY3BPS0J1dHRvbiIsY3BPS0J1dHRvblRleHQ6ImNwT0tCdXR0b25UZXh0IixjcE9LQnV0dG9uQ2xhc3M6ImNwT0tCdXR0b25DbGFzcyIsY3BDYW5jZWxCdXR0b246ImNwQ2FuY2VsQnV0dG9uIixjcENhbmNlbEJ1dHRvblRleHQ6ImNwQ2FuY2VsQnV0dG9uVGV4dCIsY3BDYW5jZWxCdXR0b25DbGFzczoiY3BDYW5jZWxCdXR0b25DbGFzcyIsY3BFeWVEcm9wcGVyOiJjcEV5ZURyb3BwZXIiLGNwUHJlc2V0TGFiZWw6ImNwUHJlc2V0TGFiZWwiLGNwUHJlc2V0Q29sb3JzOiJjcFByZXNldENvbG9ycyIsY3BQcmVzZXRDb2xvcnNDbGFzczoiY3BQcmVzZXRDb2xvcnNDbGFzcyIsY3BNYXhQcmVzZXRDb2xvcnNMZW5ndGg6ImNwTWF4UHJlc2V0Q29sb3JzTGVuZ3RoIixjcFByZXNldEVtcHR5TWVzc2FnZToiY3BQcmVzZXRFbXB0eU1lc3NhZ2UiLGNwUHJlc2V0RW1wdHlNZXNzYWdlQ2xhc3M6ImNwUHJlc2V0RW1wdHlNZXNzYWdlQ2xhc3MiLGNwQWRkQ29sb3JCdXR0b246ImNwQWRkQ29sb3JCdXR0b24iLGNwQWRkQ29sb3JCdXR0b25UZXh0OiJjcEFkZENvbG9yQnV0dG9uVGV4dCIsY3BBZGRDb2xvckJ1dHRvbkNsYXNzOiJjcEFkZENvbG9yQnV0dG9uQ2xhc3MiLGNwUmVtb3ZlQ29sb3JCdXR0b25DbGFzczoiY3BSZW1vdmVDb2xvckJ1dHRvbkNsYXNzIixjcEV4dHJhVGVtcGxhdGU6ImNwRXh0cmFUZW1wbGF0ZSJ9LG91dHB1dHM6e2NwSW5wdXRDaGFuZ2U6ImNwSW5wdXRDaGFuZ2UiLGNwVG9nZ2xlQ2hhbmdlOiJjcFRvZ2dsZUNoYW5nZSIsY3BTbGlkZXJDaGFuZ2U6ImNwU2xpZGVyQ2hhbmdlIixjcFNsaWRlckRyYWdFbmQ6ImNwU2xpZGVyRHJhZ0VuZCIsY3BTbGlkZXJEcmFnU3RhcnQ6ImNwU2xpZGVyRHJhZ1N0YXJ0Iixjb2xvclBpY2tlck9wZW46ImNvbG9yUGlja2VyT3BlbiIsY29sb3JQaWNrZXJDbG9zZToiY29sb3JQaWNrZXJDbG9zZSIsY29sb3JQaWNrZXJDYW5jZWw6ImNvbG9yUGlja2VyQ2FuY2VsIixjb2xvclBpY2tlclNlbGVjdDoiY29sb3JQaWNrZXJTZWxlY3QiLGNvbG9yUGlja2VyQ2hhbmdlOiJjb2xvclBpY2tlckNoYW5nZSIsY3BDbXlrQ29sb3JDaGFuZ2U6ImNwQ215a0NvbG9yQ2hhbmdlIixjcFByZXNldENvbG9yc0NoYW5nZToiY3BQcmVzZXRDb2xvcnNDaGFuZ2UifSxleHBvcnRBczpbIm5neENvbG9yUGlja2VyIl0sZmVhdHVyZXM6W3F0XX0pLG59KSgpLFZuZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9SCh7cHJvdmlkZXJzOltTVl0saW1wb3J0czpbRGVdfSksbn0pKCk7ZnVuY3Rpb24gUjRlKG4sdCl7MSZuJiYoZigwLCJzcGFuIiw4KSxUdCgxLDEpLGcoKSl9ZnVuY3Rpb24gUDRlKG4sdCl7MSZuJiYoZigwLCJzcGFuIiw5KSxUdCgxLDIpLGcoKSl9dmFyIFVuZT1bIioiLFtbIm1hdC1jaGlwLWF2YXRhciJdLFsiIiwibWF0Q2hpcEF2YXRhciIsIiJdXSxbWyJtYXQtY2hpcC10cmFpbGluZy1pY29uIl0sWyIiLCJtYXRDaGlwUmVtb3ZlIiwiIl0sWyIiLCJtYXRDaGlwVHJhaWxpbmdJY29uIiwiIl1dXSxqbmU9WyIqIiwibWF0LWNoaXAtYXZhdGFyLCBbbWF0Q2hpcEF2YXRhcl0iLCJtYXQtY2hpcC10cmFpbGluZy1pY29uLFttYXRDaGlwUmVtb3ZlXSxbbWF0Q2hpcFRyYWlsaW5nSWNvbl0iXTtmdW5jdGlvbiBrNGUobix0KXsxJm4mJihmKDAsInNwYW4iLDkpLFR0KDEsMSksZigyLCJzcGFuIiwxMCkscW4oKSxmKDMsInN2ZyIsMTEpLGsoNCwicGF0aCIsMTIpLGcoKSgpKCkpfWZ1bmN0aW9uIE80ZShuLHQpezEmbiYmKGYoMCwic3BhbiIsMTMpLFR0KDEsMiksZygpKX12YXIgR25lPVsiKiJdLFJWPW5ldyB0ZSgibWF0LWNoaXBzLWRlZmF1bHQtb3B0aW9ucyIpLEhuZT1uZXcgdGUoIk1hdENoaXBBdmF0YXIiKSx6bmU9bmV3IHRlKCJNYXRDaGlwVHJhaWxpbmdJY29uIiksRVY9bmV3IHRlKCJNYXRDaGlwUmVtb3ZlIiksUFY9bmV3IHRlKCJNYXRDaGlwIiksTDRlPURjKGNsYXNze30sLTEpLHZBPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBMNGV7Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfHx0aGlzLl9wYXJlbnRDaGlwLmRpc2FibGVkfXNldCBkaXNhYmxlZChlKXt0aGlzLl9kaXNhYmxlZD12dChlKX1fZ2V0RGlzYWJsZWRBdHRyaWJ1dGUoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZCYmIXRoaXMuX2FsbG93Rm9jdXNXaGVuRGlzYWJsZWQ/IiI6bnVsbH1fZ2V0VGFiaW5kZXgoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZCYmIXRoaXMuX2FsbG93Rm9jdXNXaGVuRGlzYWJsZWR8fCF0aGlzLmlzSW50ZXJhY3RpdmU/bnVsbDp0aGlzLnRhYkluZGV4LnRvU3RyaW5nKCl9Y29uc3RydWN0b3IoZSxpKXtzdXBlcigpLHRoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9wYXJlbnRDaGlwPWksdGhpcy5pc0ludGVyYWN0aXZlPSEwLHRoaXMuX2lzUHJpbWFyeT0hMCx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl9hbGxvd0ZvY3VzV2hlbkRpc2FibGVkPSExLCJCVVRUT04iPT09ZS5uYXRpdmVFbGVtZW50Lm5vZGVOYW1lJiZlLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJ0eXBlIiwiYnV0dG9uIil9Zm9jdXMoKXt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX1faGFuZGxlQ2xpY2soZSl7IXRoaXMuZGlzYWJsZWQmJnRoaXMuaXNJbnRlcmFjdGl2ZSYmdGhpcy5faXNQcmltYXJ5JiYoZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3BhcmVudENoaXAuX2hhbmRsZVByaW1hcnlBY3Rpb25JbnRlcmFjdGlvbigpKX1faGFuZGxlS2V5ZG93bihlKXsoMTM9PT1lLmtleUNvZGV8fDMyPT09ZS5rZXlDb2RlKSYmIXRoaXMuZGlzYWJsZWQmJnRoaXMuaXNJbnRlcmFjdGl2ZSYmdGhpcy5faXNQcmltYXJ5JiYhdGhpcy5fcGFyZW50Q2hpcC5faXNFZGl0aW5nJiYoZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3BhcmVudENoaXAuX2hhbmRsZVByaW1hcnlBY3Rpb25JbnRlcmFjdGlvbigpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyh4ZSksQyhQVikpfSxuLlx1MDI3NWRpcj1NZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXRDaGlwQWN0aW9uIiwiIl1dLGhvc3RBdHRyczpbMSwibWRjLWV2b2x1dGlvbi1jaGlwX19hY3Rpb24iLCJtYXQtbWRjLWNoaXAtYWN0aW9uIl0saG9zdFZhcnM6OSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJkEoImNsaWNrIixmdW5jdGlvbihvKXtyZXR1cm4gaS5faGFuZGxlQ2xpY2sobyl9KSgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUtleWRvd24obyl9KSwyJmUmJihCZSgidGFiaW5kZXgiLGkuX2dldFRhYmluZGV4KCkpKCJkaXNhYmxlZCIsaS5fZ2V0RGlzYWJsZWRBdHRyaWJ1dGUoKSkoImFyaWEtZGlzYWJsZWQiLGkuZGlzYWJsZWQpLG50KCJtZGMtZXZvbHV0aW9uLWNoaXBfX2FjdGlvbi0tcHJpbWFyeSIsaS5faXNQcmltYXJ5KSgibWRjLWV2b2x1dGlvbi1jaGlwX19hY3Rpb24tLXByZXNlbnRhdGlvbmFsIiwhaS5pc0ludGVyYWN0aXZlKSgibWRjLWV2b2x1dGlvbi1jaGlwX19hY3Rpb24tLXRyYWlsaW5nIiwhaS5faXNQcmltYXJ5KSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIix0YWJJbmRleDoidGFiSW5kZXgiLGlzSW50ZXJhY3RpdmU6ImlzSW50ZXJhY3RpdmUiLF9hbGxvd0ZvY3VzV2hlbkRpc2FibGVkOiJfYWxsb3dGb2N1c1doZW5EaXNhYmxlZCJ9LGZlYXR1cmVzOltYZV19KSxufSkoKSxXbmU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHZBe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9pc1ByaW1hcnk9ITF9X2hhbmRsZUNsaWNrKGUpe3RoaXMuZGlzYWJsZWR8fChlLnN0b3BQcm9wYWdhdGlvbigpLGUucHJldmVudERlZmF1bHQoKSx0aGlzLl9wYXJlbnRDaGlwLnJlbW92ZSgpKX1faGFuZGxlS2V5ZG93bihlKXsoMTM9PT1lLmtleUNvZGV8fDMyPT09ZS5rZXlDb2RlKSYmIXRoaXMuZGlzYWJsZWQmJihlLnN0b3BQcm9wYWdhdGlvbigpLGUucHJldmVudERlZmF1bHQoKSx0aGlzLl9wYXJlbnRDaGlwLnJlbW92ZSgpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1YbihuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1NZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXRDaGlwUmVtb3ZlIiwiIl1dLGhvc3RBdHRyczpbInJvbGUiLCJidXR0b24iLDEsIm1hdC1tZGMtY2hpcC1yZW1vdmUiLCJtYXQtbWRjLWNoaXAtdHJhaWxpbmctaWNvbiIsIm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yIiwibWRjLWV2b2x1dGlvbi1jaGlwX19pY29uIiwibWRjLWV2b2x1dGlvbi1jaGlwX19pY29uLS10cmFpbGluZyJdLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZCZSgiYXJpYS1oaWRkZW4iLG51bGwpfSxmZWF0dXJlczpbVnQoW3twcm92aWRlOkVWLHVzZUV4aXN0aW5nOm59XSksWGVdfSksbn0pKCksQjRlPTAsVjRlPURjKEtvKGdvKGFvKGNsYXNze2NvbnN0cnVjdG9yKG4pe3RoaXMuX2VsZW1lbnRSZWY9bn19KSksInByaW1hcnkiKSwtMSksZUM9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFY0ZXtfaGFzRm9jdXMoKXtyZXR1cm4gdGhpcy5faGFzRm9jdXNJbnRlcm5hbH1nZXQgdmFsdWUoKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fdmFsdWU/dGhpcy5fdmFsdWU6dGhpcy5fdGV4dEVsZW1lbnQudGV4dENvbnRlbnQudHJpbSgpfXNldCB2YWx1ZShlKXt0aGlzLl92YWx1ZT1lfWdldCByZW1vdmFibGUoKXtyZXR1cm4gdGhpcy5fcmVtb3ZhYmxlfXNldCByZW1vdmFibGUoZSl7dGhpcy5fcmVtb3ZhYmxlPXZ0KGUpfWdldCBoaWdobGlnaHRlZCgpe3JldHVybiB0aGlzLl9oaWdobGlnaHRlZH1zZXQgaGlnaGxpZ2h0ZWQoZSl7dGhpcy5faGlnaGxpZ2h0ZWQ9dnQoZSl9Y29uc3RydWN0b3IoZSxpLHIsbyxhLHMsbCxjKXtzdXBlcihpKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1lLHRoaXMuX25nWm9uZT1yLHRoaXMuX2ZvY3VzTW9uaXRvcj1vLHRoaXMuX2dsb2JhbFJpcHBsZU9wdGlvbnM9bCx0aGlzLl9pc1JpcHBsZUNlbnRlcmVkPSExLHRoaXMuX29uRm9jdXM9bmV3IEVlLHRoaXMuX29uQmx1cj1uZXcgRWUsdGhpcy5yb2xlPW51bGwsdGhpcy5faGFzRm9jdXNJbnRlcm5hbD0hMSx0aGlzLmlkPSJtYXQtbWRjLWNoaXAtIitCNGUrKyx0aGlzLmFyaWFMYWJlbD1udWxsLHRoaXMuYXJpYURlc2NyaXB0aW9uPW51bGwsdGhpcy5fYXJpYURlc2NyaXB0aW9uSWQ9YCR7dGhpcy5pZH0tYXJpYS1kZXNjcmlwdGlvbmAsdGhpcy5fcmVtb3ZhYmxlPSEwLHRoaXMuX2hpZ2hsaWdodGVkPSExLHRoaXMucmVtb3ZlZD1uZXcgRix0aGlzLmRlc3Ryb3llZD1uZXcgRix0aGlzLmJhc2ljQ2hpcEF0dHJOYW1lPSJtYXQtYmFzaWMtY2hpcCIsdGhpcy5fZG9jdW1lbnQ9YSx0aGlzLl9hbmltYXRpb25zRGlzYWJsZWQ9Ik5vb3BBbmltYXRpb25zIj09PXMsbnVsbCE9YyYmKHRoaXMudGFiSW5kZXg9cGFyc2VJbnQoYyk/P3RoaXMuZGVmYXVsdFRhYkluZGV4KSx0aGlzLl9tb25pdG9yRm9jdXMoKX1uZ09uSW5pdCgpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDt0aGlzLl9pc0Jhc2ljQ2hpcD1lLmhhc0F0dHJpYnV0ZSh0aGlzLmJhc2ljQ2hpcEF0dHJOYW1lKXx8ZS50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PT10aGlzLmJhc2ljQ2hpcEF0dHJOYW1lfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX3RleHRFbGVtZW50PXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCIubWF0LW1kYy1jaGlwLWFjdGlvbi1sYWJlbCIpLHRoaXMuX3BlbmRpbmdGb2N1cyYmKHRoaXMuX3BlbmRpbmdGb2N1cz0hMSx0aGlzLmZvY3VzKCkpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX2FjdGlvbkNoYW5nZXM9dG4odGhpcy5fYWxsTGVhZGluZ0ljb25zLmNoYW5nZXMsdGhpcy5fYWxsVHJhaWxpbmdJY29ucy5jaGFuZ2VzLHRoaXMuX2FsbFJlbW92ZUljb25zLmNoYW5nZXMpLnN1YnNjcmliZSgoKT0+dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfW5nT25EZXN0cm95KCl7dGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnRSZWYpLHRoaXMuX2FjdGlvbkNoYW5nZXM/LnVuc3Vic2NyaWJlKCksdGhpcy5kZXN0cm95ZWQuZW1pdCh7Y2hpcDp0aGlzfSksdGhpcy5kZXN0cm95ZWQuY29tcGxldGUoKX1yZW1vdmUoKXt0aGlzLnJlbW92YWJsZSYmdGhpcy5yZW1vdmVkLmVtaXQoe2NoaXA6dGhpc30pfV9pc1JpcHBsZURpc2FibGVkKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fHRoaXMuZGlzYWJsZVJpcHBsZXx8dGhpcy5fYW5pbWF0aW9uc0Rpc2FibGVkfHx0aGlzLl9pc0Jhc2ljQ2hpcHx8ISF0aGlzLl9nbG9iYWxSaXBwbGVPcHRpb25zPy5kaXNhYmxlZH1faGFzVHJhaWxpbmdJY29uKCl7cmV0dXJuISghdGhpcy50cmFpbGluZ0ljb24mJiF0aGlzLnJlbW92ZUljb24pfV9oYW5kbGVLZXlkb3duKGUpeyg4PT09ZS5rZXlDb2RlfHw0Nj09PWUua2V5Q29kZSkmJihlLnByZXZlbnREZWZhdWx0KCksdGhpcy5yZW1vdmUoKSl9Zm9jdXMoKXt0aGlzLmRpc2FibGVkfHwodGhpcy5wcmltYXJ5QWN0aW9uP3RoaXMucHJpbWFyeUFjdGlvbi5mb2N1cygpOnRoaXMuX3BlbmRpbmdGb2N1cz0hMCl9X2dldFNvdXJjZUFjdGlvbihlKXtyZXR1cm4gdGhpcy5fZ2V0QWN0aW9ucygpLmZpbmQoaT0+e2xldCByPWkuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtyZXR1cm4gcj09PWV8fHIuY29udGFpbnMoZSl9KX1fZ2V0QWN0aW9ucygpe2xldCBlPVtdO3JldHVybiB0aGlzLnByaW1hcnlBY3Rpb24mJmUucHVzaCh0aGlzLnByaW1hcnlBY3Rpb24pLHRoaXMucmVtb3ZlSWNvbiYmZS5wdXNoKHRoaXMucmVtb3ZlSWNvbiksdGhpcy50cmFpbGluZ0ljb24mJmUucHVzaCh0aGlzLnRyYWlsaW5nSWNvbiksZX1faGFuZGxlUHJpbWFyeUFjdGlvbkludGVyYWN0aW9uKCl7fV9tb25pdG9yRm9jdXMoKXt0aGlzLl9mb2N1c01vbml0b3IubW9uaXRvcih0aGlzLl9lbGVtZW50UmVmLCEwKS5zdWJzY3JpYmUoZT0+e2xldCBpPW51bGwhPT1lO2khPT10aGlzLl9oYXNGb2N1c0ludGVybmFsJiYodGhpcy5faGFzRm9jdXNJbnRlcm5hbD1pLGk/dGhpcy5fb25Gb2N1cy5uZXh0KHtjaGlwOnRoaXN9KTp0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZShMdCgxKSkuc3Vic2NyaWJlKCgpPT50aGlzLl9uZ1pvbmUucnVuKCgpPT50aGlzLl9vbkJsdXIubmV4dCh7Y2hpcDp0aGlzfSkpKSl9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhRdCksQyh4ZSksQyhvdCksQyhmbyksQyhOdCksQyhwaSw4KSxDKFRoLDgpLE1vKCJ0YWJpbmRleCIpKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtYmFzaWMtY2hpcCJdLFsiIiwibWF0LWJhc2ljLWNoaXAiLCIiXSxbIm1hdC1jaGlwIl0sWyIiLCJtYXQtY2hpcCIsIiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihlLGkscil7aWYoMSZlJiYoQm4ocixIbmUsNSksQm4ocix6bmUsNSksQm4ocixFViw1KSxCbihyLEhuZSw1KSxCbihyLHpuZSw1KSxCbihyLEVWLDUpKSwyJmUpe2xldCBvO2JlKG89dmUoKSkmJihpLmxlYWRpbmdJY29uPW8uZmlyc3QpLGJlKG89dmUoKSkmJihpLnRyYWlsaW5nSWNvbj1vLmZpcnN0KSxiZShvPXZlKCkpJiYoaS5yZW1vdmVJY29uPW8uZmlyc3QpLGJlKG89dmUoKSkmJihpLl9hbGxMZWFkaW5nSWNvbnM9byksYmUobz12ZSgpKSYmKGkuX2FsbFRyYWlsaW5nSWNvbnM9byksYmUobz12ZSgpKSYmKGkuX2FsbFJlbW92ZUljb25zPW8pfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoVWUoS2ksNSksVWUodkEsNSkpLDImZSl7bGV0IHI7YmUocj12ZSgpKSYmKGkucmlwcGxlPXIuZmlyc3QpLGJlKHI9dmUoKSkmJihpLnByaW1hcnlBY3Rpb249ci5maXJzdCl9fSxob3N0QXR0cnM6WzEsIm1hdC1tZGMtY2hpcCJdLGhvc3RWYXJzOjMwLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmQSgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUtleWRvd24obyl9KSwyJmUmJih3bygiaWQiLGkuaWQpLEJlKCJyb2xlIixpLnJvbGUpKCJ0YWJpbmRleCIsaS5yb2xlP2kudGFiSW5kZXg6bnVsbCkoImFyaWEtbGFiZWwiLGkuYXJpYUxhYmVsKSxudCgibWRjLWV2b2x1dGlvbi1jaGlwIiwhaS5faXNCYXNpY0NoaXApKCJtZGMtZXZvbHV0aW9uLWNoaXAtLWRpc2FibGVkIixpLmRpc2FibGVkKSgibWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXRyYWlsaW5nLWFjdGlvbiIsaS5faGFzVHJhaWxpbmdJY29uKCkpKCJtZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtcHJpbWFyeS1ncmFwaGljIixpLmxlYWRpbmdJY29uKSgibWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXByaW1hcnktaWNvbiIsaS5sZWFkaW5nSWNvbikoIm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC1hdmF0YXIiLGkubGVhZGluZ0ljb24pKCJtYXQtbWRjLWNoaXAtd2l0aC1hdmF0YXIiLGkubGVhZGluZ0ljb24pKCJtYXQtbWRjLWNoaXAtaGlnaGxpZ2h0ZWQiLGkuaGlnaGxpZ2h0ZWQpKCJtYXQtbWRjLWNoaXAtZGlzYWJsZWQiLGkuZGlzYWJsZWQpKCJtYXQtbWRjLWJhc2ljLWNoaXAiLGkuX2lzQmFzaWNDaGlwKSgibWF0LW1kYy1zdGFuZGFyZC1jaGlwIiwhaS5faXNCYXNpY0NoaXApKCJtYXQtbWRjLWNoaXAtd2l0aC10cmFpbGluZy1pY29uIixpLl9oYXNUcmFpbGluZ0ljb24oKSkoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIixpLl9hbmltYXRpb25zRGlzYWJsZWQpKX0saW5wdXRzOntjb2xvcjoiY29sb3IiLGRpc2FibGVkOiJkaXNhYmxlZCIsZGlzYWJsZVJpcHBsZToiZGlzYWJsZVJpcHBsZSIsdGFiSW5kZXg6InRhYkluZGV4Iixyb2xlOiJyb2xlIixpZDoiaWQiLGFyaWFMYWJlbDpbImFyaWEtbGFiZWwiLCJhcmlhTGFiZWwiXSxhcmlhRGVzY3JpcHRpb246WyJhcmlhLWRlc2NyaXB0aW9uIiwiYXJpYURlc2NyaXB0aW9uIl0sdmFsdWU6InZhbHVlIixyZW1vdmFibGU6InJlbW92YWJsZSIsaGlnaGxpZ2h0ZWQ6ImhpZ2hsaWdodGVkIn0sb3V0cHV0czp7cmVtb3ZlZDoicmVtb3ZlZCIsZGVzdHJveWVkOiJkZXN0cm95ZWQifSxleHBvcnRBczpbIm1hdENoaXAiXSxmZWF0dXJlczpbVnQoW3twcm92aWRlOlBWLHVzZUV4aXN0aW5nOm59XSksWGVdLG5nQ29udGVudFNlbGVjdG9yczpqbmUsZGVjbHM6OSx2YXJzOjYsY29uc3RzOltbIm1hdFJpcHBsZSIsIiIsMSwibWF0LW1kYy1jaGlwLXJpcHBsZSIsMywibWF0UmlwcGxlRGlzYWJsZWQiLCJtYXRSaXBwbGVDZW50ZXJlZCIsIm1hdFJpcHBsZVRyaWdnZXIiXSxbMSwibWF0LW1kYy1jaGlwLWZvY3VzLW92ZXJsYXkiXSxbMSwibWRjLWV2b2x1dGlvbi1jaGlwX19jZWxsIiwibWRjLWV2b2x1dGlvbi1jaGlwX19jZWxsLS1wcmltYXJ5Il0sWyJtYXRDaGlwQWN0aW9uIiwiIiwzLCJpc0ludGVyYWN0aXZlIl0sWyJjbGFzcyIsIm1kYy1ldm9sdXRpb24tY2hpcF9fZ3JhcGhpYyBtYXQtbWRjLWNoaXAtZ3JhcGhpYyIsNCwibmdJZiJdLFsxLCJtZGMtZXZvbHV0aW9uLWNoaXBfX3RleHQtbGFiZWwiLCJtYXQtbWRjLWNoaXAtYWN0aW9uLWxhYmVsIl0sWzEsIm1hdC1tZGMtY2hpcC1wcmltYXJ5LWZvY3VzLWluZGljYXRvciIsIm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yIl0sWyJjbGFzcyIsIm1kYy1ldm9sdXRpb24tY2hpcF9fY2VsbCBtZGMtZXZvbHV0aW9uLWNoaXBfX2NlbGwtLXRyYWlsaW5nIiw0LCJuZ0lmIl0sWzEsIm1kYy1ldm9sdXRpb24tY2hpcF9fZ3JhcGhpYyIsIm1hdC1tZGMtY2hpcC1ncmFwaGljIl0sWzEsIm1kYy1ldm9sdXRpb24tY2hpcF9fY2VsbCIsIm1kYy1ldm9sdXRpb24tY2hpcF9fY2VsbC0tdHJhaWxpbmciXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihmbihVbmUpLGsoMCwic3BhbiIsMCkoMSwic3BhbiIsMSksZigyLCJzcGFuIiwyKSgzLCJzcGFuIiwzKSxTKDQsUjRlLDIsMCwic3BhbiIsNCksZig1LCJzcGFuIiw1KSxUdCg2KSxrKDcsInNwYW4iLDYpLGcoKSgpKCksUyg4LFA0ZSwyLDAsInNwYW4iLDcpKSwyJmUmJihiKCJtYXRSaXBwbGVEaXNhYmxlZCIsaS5faXNSaXBwbGVEaXNhYmxlZCgpKSgibWF0UmlwcGxlQ2VudGVyZWQiLGkuX2lzUmlwcGxlQ2VudGVyZWQpKCJtYXRSaXBwbGVUcmlnZ2VyIixpLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLHYoMyksYigiaXNJbnRlcmFjdGl2ZSIsITEpLHYoMSksYigibmdJZiIsaS5sZWFkaW5nSWNvbiksdig0KSxiKCJuZ0lmIixpLl9oYXNUcmFpbGluZ0ljb24oKSkpfSxkZXBlbmRlbmNpZXM6W05lLEtpLHZBXSxzdHlsZXM6WycubWRjLWV2b2x1dGlvbi1jaGlwLC5tZGMtZXZvbHV0aW9uLWNoaXBfX2NlbGwsLm1kYy1ldm9sdXRpb24tY2hpcF9fYWN0aW9ue2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5tZGMtZXZvbHV0aW9uLWNoaXB7cG9zaXRpb246cmVsYXRpdmU7bWF4LXdpZHRoOjEwMCV9Lm1kYy1ldm9sdXRpb24tY2hpcCAubWRjLWVsZXZhdGlvbi1vdmVybGF5e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7dG9wOjA7bGVmdDowfS5tZGMtZXZvbHV0aW9uLWNoaXBfX2NlbGwsLm1kYy1ldm9sdXRpb24tY2hpcF9fYWN0aW9ue2hlaWdodDoxMDAlfS5tZGMtZXZvbHV0aW9uLWNoaXBfX2NlbGwtLXByaW1hcnl7b3ZlcmZsb3cteDpoaWRkZW59Lm1kYy1ldm9sdXRpb24tY2hpcF9fY2VsbC0tdHJhaWxpbmd7ZmxleDoxIDAgYXV0b30ubWRjLWV2b2x1dGlvbi1jaGlwX19hY3Rpb257YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQ6bm9uZTtib3JkZXI6bm9uZTtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtvdXRsaW5lOm5vbmU7cGFkZGluZzowO3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOmluaGVyaXR9Lm1kYy1ldm9sdXRpb24tY2hpcF9fYWN0aW9uLS1wcmVzZW50YXRpb25hbHtjdXJzb3I6YXV0b30ubWRjLWV2b2x1dGlvbi1jaGlwLS1kaXNhYmxlZCwubWRjLWV2b2x1dGlvbi1jaGlwX19hY3Rpb246ZGlzYWJsZWR7cG9pbnRlci1ldmVudHM6bm9uZX0ubWRjLWV2b2x1dGlvbi1jaGlwX19hY3Rpb24tLXByaW1hcnl7b3ZlcmZsb3cteDpoaWRkZW59Lm1kYy1ldm9sdXRpb24tY2hpcF9fYWN0aW9uLS10cmFpbGluZ3twb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzp2aXNpYmxlfS5tZGMtZXZvbHV0aW9uLWNoaXBfX2FjdGlvbi0tcHJpbWFyeTpiZWZvcmV7Ym94LXNpemluZzpib3JkZXItYm94O2NvbnRlbnQ6IiI7aGVpZ2h0OjEwMCU7bGVmdDowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7d2lkdGg6MTAwJTt6LWluZGV4OjF9Lm1kYy1ldm9sdXRpb24tY2hpcC0tdG91Y2h7bWFyZ2luLXRvcDo4cHg7bWFyZ2luLWJvdHRvbTo4cHh9Lm1kYy1ldm9sdXRpb24tY2hpcF9fYWN0aW9uLXRvdWNoe3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7aGVpZ2h0OjQ4cHg7bGVmdDowO3JpZ2h0OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9Lm1kYy1ldm9sdXRpb24tY2hpcF9fdGV4dC1sYWJlbHt3aGl0ZS1zcGFjZTpub3dyYXA7dXNlci1zZWxlY3Q6bm9uZTt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO292ZXJmbG93OmhpZGRlbn0ubWRjLWV2b2x1dGlvbi1jaGlwX19ncmFwaGlje2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7b3ZlcmZsb3c6aGlkZGVuO3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246cmVsYXRpdmU7ZmxleDoxIDAgYXV0b30ubWRjLWV2b2x1dGlvbi1jaGlwX19jaGVja21hcmt7cG9zaXRpb246YWJzb2x1dGU7b3BhY2l0eTowO3RvcDo1MCU7bGVmdDo1MCV9Lm1kYy1ldm9sdXRpb24tY2hpcC0tc2VsZWN0YWJsZTpub3QoLm1kYy1ldm9sdXRpb24tY2hpcC0tc2VsZWN0ZWQpOm5vdCgubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXByaW1hcnktaWNvbikgLm1kYy1ldm9sdXRpb24tY2hpcF9fZ3JhcGhpY3t3aWR0aDowfS5tZGMtZXZvbHV0aW9uLWNoaXBfX2NoZWNrbWFyay1iYWNrZ3JvdW5ke29wYWNpdHk6MH0ubWRjLWV2b2x1dGlvbi1jaGlwX19jaGVja21hcmstc3Zne2Rpc3BsYXk6YmxvY2t9Lm1kYy1ldm9sdXRpb24tY2hpcF9fY2hlY2ttYXJrLXBhdGh7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtZGFzaGFycmF5OjI5Ljc4MzMzODU7c3Ryb2tlLWRhc2hvZmZzZXQ6MjkuNzgzMzM4NTtzdHJva2U6Y3VycmVudENvbG9yfS5tZGMtZXZvbHV0aW9uLWNoaXAtLXNlbGVjdGluZyAubWRjLWV2b2x1dGlvbi1jaGlwX19ncmFwaGlje3RyYW5zaXRpb246d2lkdGggMTUwbXMgMG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSl9Lm1kYy1ldm9sdXRpb24tY2hpcC0tc2VsZWN0aW5nIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2NoZWNrbWFya3t0cmFuc2l0aW9uOnRyYW5zZm9ybSAxNTBtcyAwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06dHJhbnNsYXRlKC03NSUsIC01MCUpfS5tZGMtZXZvbHV0aW9uLWNoaXAtLXNlbGVjdGluZyAubWRjLWV2b2x1dGlvbi1jaGlwX19jaGVja21hcmstcGF0aHt0cmFuc2l0aW9uOnN0cm9rZS1kYXNob2Zmc2V0IDE1MG1zIDQ1bXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKX0ubWRjLWV2b2x1dGlvbi1jaGlwLS1kZXNlbGVjdGluZyAubWRjLWV2b2x1dGlvbi1jaGlwX19ncmFwaGlje3RyYW5zaXRpb246d2lkdGggMTAwbXMgMG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSl9Lm1kYy1ldm9sdXRpb24tY2hpcC0tZGVzZWxlY3RpbmcgLm1kYy1ldm9sdXRpb24tY2hpcF9fY2hlY2ttYXJre3RyYW5zaXRpb246b3BhY2l0eSA1MG1zIDBtcyBsaW5lYXIsdHJhbnNmb3JtIDEwMG1zIDBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTc1JSwgLTUwJSl9Lm1kYy1ldm9sdXRpb24tY2hpcC0tZGVzZWxlY3RpbmcgLm1kYy1ldm9sdXRpb24tY2hpcF9fY2hlY2ttYXJrLXBhdGh7c3Ryb2tlLWRhc2hvZmZzZXQ6MH0ubWRjLWV2b2x1dGlvbi1jaGlwLS1zZWxlY3Rpbmctd2l0aC1wcmltYXJ5LWljb24gLm1kYy1ldm9sdXRpb24tY2hpcF9faWNvbi0tcHJpbWFyeXt0cmFuc2l0aW9uOm9wYWNpdHkgNzVtcyAwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKX0ubWRjLWV2b2x1dGlvbi1jaGlwLS1zZWxlY3Rpbmctd2l0aC1wcmltYXJ5LWljb24gLm1kYy1ldm9sdXRpb24tY2hpcF9fY2hlY2ttYXJrLXBhdGh7dHJhbnNpdGlvbjpzdHJva2UtZGFzaG9mZnNldCAxNTBtcyA3NW1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSl9Lm1kYy1ldm9sdXRpb24tY2hpcC0tZGVzZWxlY3Rpbmctd2l0aC1wcmltYXJ5LWljb24gLm1kYy1ldm9sdXRpb24tY2hpcF9faWNvbi0tcHJpbWFyeXt0cmFuc2l0aW9uOm9wYWNpdHkgMTUwbXMgNzVtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpfS5tZGMtZXZvbHV0aW9uLWNoaXAtLWRlc2VsZWN0aW5nLXdpdGgtcHJpbWFyeS1pY29uIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2NoZWNrbWFya3t0cmFuc2l0aW9uOm9wYWNpdHkgNzVtcyAwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC01MCUpfS5tZGMtZXZvbHV0aW9uLWNoaXAtLWRlc2VsZWN0aW5nLXdpdGgtcHJpbWFyeS1pY29uIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2NoZWNrbWFyay1wYXRoe3N0cm9rZS1kYXNob2Zmc2V0OjB9Lm1kYy1ldm9sdXRpb24tY2hpcC0tc2VsZWN0ZWQgLm1kYy1ldm9sdXRpb24tY2hpcF9faWNvbi0tcHJpbWFyeXtvcGFjaXR5OjB9Lm1kYy1ldm9sdXRpb24tY2hpcC0tc2VsZWN0ZWQgLm1kYy1ldm9sdXRpb24tY2hpcF9fY2hlY2ttYXJre3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwgLTUwJSk7b3BhY2l0eToxfS5tZGMtZXZvbHV0aW9uLWNoaXAtLXNlbGVjdGVkIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2NoZWNrbWFyay1wYXRoe3N0cm9rZS1kYXNob2Zmc2V0OjB9QGtleWZyYW1lcyBtZGMtZXZvbHV0aW9uLWNoaXAtZW50ZXJ7ZnJvbXt0cmFuc2Zvcm06c2NhbGUoMC44KTtvcGFjaXR5Oi40fXRve3RyYW5zZm9ybTpzY2FsZSgxKTtvcGFjaXR5OjF9fS5tZGMtZXZvbHV0aW9uLWNoaXAtLWVudGVye2FuaW1hdGlvbjptZGMtZXZvbHV0aW9uLWNoaXAtZW50ZXIgMTAwbXMgMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpfUBrZXlmcmFtZXMgbWRjLWV2b2x1dGlvbi1jaGlwLWV4aXR7ZnJvbXtvcGFjaXR5OjF9dG97b3BhY2l0eTowfX0ubWRjLWV2b2x1dGlvbi1jaGlwLS1leGl0e2FuaW1hdGlvbjptZGMtZXZvbHV0aW9uLWNoaXAtZXhpdCA3NW1zIDBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAxLCAxKX0ubWRjLWV2b2x1dGlvbi1jaGlwLS1oaWRkZW57b3BhY2l0eTowO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjp3aWR0aCAxNTBtcyAwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMSwgMSl9Lm1hdC1tZGMtc3RhbmRhcmQtY2hpcCAubWRjLWV2b2x1dGlvbi1jaGlwX19jaGVja21hcmt7aGVpZ2h0OjIwcHg7d2lkdGg6MjBweH0ubWF0LW1kYy1zdGFuZGFyZC1jaGlwIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2ljb24tLXRyYWlsaW5ne2hlaWdodDoxOHB4O3dpZHRoOjE4cHg7Zm9udC1zaXplOjE4cHh9Lm1hdC1tZGMtc3RhbmRhcmQtY2hpcCAubWRjLWV2b2x1dGlvbi1jaGlwX19hY3Rpb24tLXByaW1hcnl7cGFkZGluZy1sZWZ0OjEycHg7cGFkZGluZy1yaWdodDoxMnB4fVtkaXI9cnRsXSAubWF0LW1kYy1zdGFuZGFyZC1jaGlwIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2FjdGlvbi0tcHJpbWFyeSwubWF0LW1kYy1zdGFuZGFyZC1jaGlwIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2FjdGlvbi0tcHJpbWFyeVtkaXI9cnRsXXtwYWRkaW5nLWxlZnQ6MTJweDtwYWRkaW5nLXJpZ2h0OjEycHh9Lm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtcHJpbWFyeS1ncmFwaGljIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2dyYXBoaWN7cGFkZGluZy1sZWZ0OjZweDtwYWRkaW5nLXJpZ2h0OjZweH1bZGlyPXJ0bF0gLm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtcHJpbWFyeS1ncmFwaGljIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2dyYXBoaWMsLm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtcHJpbWFyeS1ncmFwaGljIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2dyYXBoaWNbZGlyPXJ0bF17cGFkZGluZy1sZWZ0OjZweDtwYWRkaW5nLXJpZ2h0OjZweH0ubWF0LW1kYy1zdGFuZGFyZC1jaGlwLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC1wcmltYXJ5LWdyYXBoaWMgLm1kYy1ldm9sdXRpb24tY2hpcF9fYWN0aW9uLS1wcmltYXJ5e3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MTJweH1bZGlyPXJ0bF0gLm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtcHJpbWFyeS1ncmFwaGljIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2FjdGlvbi0tcHJpbWFyeSwubWF0LW1kYy1zdGFuZGFyZC1jaGlwLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC1wcmltYXJ5LWdyYXBoaWMgLm1kYy1ldm9sdXRpb24tY2hpcF9fYWN0aW9uLS1wcmltYXJ5W2Rpcj1ydGxde3BhZGRpbmctbGVmdDoxMnB4O3BhZGRpbmctcmlnaHQ6MH0ubWF0LW1kYy1zdGFuZGFyZC1jaGlwLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC10cmFpbGluZy1hY3Rpb24gLm1kYy1ldm9sdXRpb24tY2hpcF9fYWN0aW9uLS10cmFpbGluZ3twYWRkaW5nLWxlZnQ6OHB4O3BhZGRpbmctcmlnaHQ6OHB4fVtkaXI9cnRsXSAubWF0LW1kYy1zdGFuZGFyZC1jaGlwLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC10cmFpbGluZy1hY3Rpb24gLm1kYy1ldm9sdXRpb24tY2hpcF9fYWN0aW9uLS10cmFpbGluZywubWF0LW1kYy1zdGFuZGFyZC1jaGlwLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC10cmFpbGluZy1hY3Rpb24gLm1kYy1ldm9sdXRpb24tY2hpcF9fYWN0aW9uLS10cmFpbGluZ1tkaXI9cnRsXXtwYWRkaW5nLWxlZnQ6OHB4O3BhZGRpbmctcmlnaHQ6OHB4fS5tYXQtbWRjLXN0YW5kYXJkLWNoaXAubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXRyYWlsaW5nLWFjdGlvbiAubWRjLWV2b2x1dGlvbi1jaGlwX19yaXBwbGUtLXRyYWlsaW5ne2xlZnQ6OHB4O3JpZ2h0OmluaXRpYWx9W2Rpcj1ydGxdIC5tYXQtbWRjLXN0YW5kYXJkLWNoaXAubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXRyYWlsaW5nLWFjdGlvbiAubWRjLWV2b2x1dGlvbi1jaGlwX19yaXBwbGUtLXRyYWlsaW5nLC5tYXQtbWRjLXN0YW5kYXJkLWNoaXAubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXRyYWlsaW5nLWFjdGlvbiAubWRjLWV2b2x1dGlvbi1jaGlwX19yaXBwbGUtLXRyYWlsaW5nW2Rpcj1ydGxde2xlZnQ6aW5pdGlhbDtyaWdodDo4cHh9Lm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtdHJhaWxpbmctYWN0aW9uIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2FjdGlvbi0tcHJpbWFyeXtwYWRkaW5nLWxlZnQ6MTJweDtwYWRkaW5nLXJpZ2h0OjB9W2Rpcj1ydGxdIC5tYXQtbWRjLXN0YW5kYXJkLWNoaXAubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXRyYWlsaW5nLWFjdGlvbiAubWRjLWV2b2x1dGlvbi1jaGlwX19hY3Rpb24tLXByaW1hcnksLm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtdHJhaWxpbmctYWN0aW9uIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2FjdGlvbi0tcHJpbWFyeVtkaXI9cnRsXXtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjEycHh9Lm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtcHJpbWFyeS1ncmFwaGljLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC10cmFpbGluZy1hY3Rpb24gLm1kYy1ldm9sdXRpb24tY2hpcF9fZ3JhcGhpY3twYWRkaW5nLWxlZnQ6NnB4O3BhZGRpbmctcmlnaHQ6NnB4fVtkaXI9cnRsXSAubWF0LW1kYy1zdGFuZGFyZC1jaGlwLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC1wcmltYXJ5LWdyYXBoaWMubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXRyYWlsaW5nLWFjdGlvbiAubWRjLWV2b2x1dGlvbi1jaGlwX19ncmFwaGljLC5tYXQtbWRjLXN0YW5kYXJkLWNoaXAubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXByaW1hcnktZ3JhcGhpYy5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtdHJhaWxpbmctYWN0aW9uIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2dyYXBoaWNbZGlyPXJ0bF17cGFkZGluZy1sZWZ0OjZweDtwYWRkaW5nLXJpZ2h0OjZweH0ubWF0LW1kYy1zdGFuZGFyZC1jaGlwLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC1wcmltYXJ5LWdyYXBoaWMubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXRyYWlsaW5nLWFjdGlvbiAubWRjLWV2b2x1dGlvbi1jaGlwX19hY3Rpb24tLXRyYWlsaW5ne3BhZGRpbmctbGVmdDo4cHg7cGFkZGluZy1yaWdodDo4cHh9W2Rpcj1ydGxdIC5tYXQtbWRjLXN0YW5kYXJkLWNoaXAubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXByaW1hcnktZ3JhcGhpYy5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtdHJhaWxpbmctYWN0aW9uIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2FjdGlvbi0tdHJhaWxpbmcsLm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtcHJpbWFyeS1ncmFwaGljLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC10cmFpbGluZy1hY3Rpb24gLm1kYy1ldm9sdXRpb24tY2hpcF9fYWN0aW9uLS10cmFpbGluZ1tkaXI9cnRsXXtwYWRkaW5nLWxlZnQ6OHB4O3BhZGRpbmctcmlnaHQ6OHB4fS5tYXQtbWRjLXN0YW5kYXJkLWNoaXAubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXByaW1hcnktZ3JhcGhpYy5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtdHJhaWxpbmctYWN0aW9uIC5tZGMtZXZvbHV0aW9uLWNoaXBfX3JpcHBsZS0tdHJhaWxpbmd7bGVmdDo4cHg7cmlnaHQ6aW5pdGlhbH1bZGlyPXJ0bF0gLm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtcHJpbWFyeS1ncmFwaGljLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC10cmFpbGluZy1hY3Rpb24gLm1kYy1ldm9sdXRpb24tY2hpcF9fcmlwcGxlLS10cmFpbGluZywubWF0LW1kYy1zdGFuZGFyZC1jaGlwLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC1wcmltYXJ5LWdyYXBoaWMubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXRyYWlsaW5nLWFjdGlvbiAubWRjLWV2b2x1dGlvbi1jaGlwX19yaXBwbGUtLXRyYWlsaW5nW2Rpcj1ydGxde2xlZnQ6aW5pdGlhbDtyaWdodDo4cHh9Lm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtcHJpbWFyeS1ncmFwaGljLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC10cmFpbGluZy1hY3Rpb24gLm1kYy1ldm9sdXRpb24tY2hpcF9fYWN0aW9uLS1wcmltYXJ5e3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MH1bZGlyPXJ0bF0gLm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtcHJpbWFyeS1ncmFwaGljLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC10cmFpbGluZy1hY3Rpb24gLm1kYy1ldm9sdXRpb24tY2hpcF9fYWN0aW9uLS1wcmltYXJ5LC5tYXQtbWRjLXN0YW5kYXJkLWNoaXAubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXByaW1hcnktZ3JhcGhpYy5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtdHJhaWxpbmctYWN0aW9uIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2FjdGlvbi0tcHJpbWFyeVtkaXI9cnRsXXtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjB9Lm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tZGMtZXZvbHV0aW9uLWNoaXAtLWRpc2FibGVkIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2NoZWNrbWFya3tjb2xvcjp2YXIoLS1tZGMtY2hpcC13aXRoLWljb24tc2VsZWN0ZWQtaWNvbi1jb2xvciwgY3VycmVudENvbG9yKX0ubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLWF2YXRhci5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtcHJpbWFyeS1ncmFwaGljIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2dyYXBoaWN7cGFkZGluZy1sZWZ0OjRweDtwYWRkaW5nLXJpZ2h0OjhweH1bZGlyPXJ0bF0gLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC1hdmF0YXIubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXByaW1hcnktZ3JhcGhpYyAubWRjLWV2b2x1dGlvbi1jaGlwX19ncmFwaGljLC5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtYXZhdGFyLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC1wcmltYXJ5LWdyYXBoaWMgLm1kYy1ldm9sdXRpb24tY2hpcF9fZ3JhcGhpY1tkaXI9cnRsXXtwYWRkaW5nLWxlZnQ6OHB4O3BhZGRpbmctcmlnaHQ6NHB4fS5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtYXZhdGFyLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC1wcmltYXJ5LWdyYXBoaWMgLm1kYy1ldm9sdXRpb24tY2hpcF9fYWN0aW9uLS1wcmltYXJ5e3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MTJweH1bZGlyPXJ0bF0gLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC1hdmF0YXIubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXByaW1hcnktZ3JhcGhpYyAubWRjLWV2b2x1dGlvbi1jaGlwX19hY3Rpb24tLXByaW1hcnksLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC1hdmF0YXIubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXByaW1hcnktZ3JhcGhpYyAubWRjLWV2b2x1dGlvbi1jaGlwX19hY3Rpb24tLXByaW1hcnlbZGlyPXJ0bF17cGFkZGluZy1sZWZ0OjEycHg7cGFkZGluZy1yaWdodDowfS5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtYXZhdGFyLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC1wcmltYXJ5LWdyYXBoaWMubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXRyYWlsaW5nLWFjdGlvbiAubWRjLWV2b2x1dGlvbi1jaGlwX19ncmFwaGlje3BhZGRpbmctbGVmdDo0cHg7cGFkZGluZy1yaWdodDo4cHh9W2Rpcj1ydGxdIC5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtYXZhdGFyLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC1wcmltYXJ5LWdyYXBoaWMubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXRyYWlsaW5nLWFjdGlvbiAubWRjLWV2b2x1dGlvbi1jaGlwX19ncmFwaGljLC5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtYXZhdGFyLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC1wcmltYXJ5LWdyYXBoaWMubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXRyYWlsaW5nLWFjdGlvbiAubWRjLWV2b2x1dGlvbi1jaGlwX19ncmFwaGljW2Rpcj1ydGxde3BhZGRpbmctbGVmdDo4cHg7cGFkZGluZy1yaWdodDo0cHh9Lm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC1hdmF0YXIubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXByaW1hcnktZ3JhcGhpYy5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtdHJhaWxpbmctYWN0aW9uIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2FjdGlvbi0tdHJhaWxpbmd7cGFkZGluZy1sZWZ0OjhweDtwYWRkaW5nLXJpZ2h0OjhweH1bZGlyPXJ0bF0gLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC1hdmF0YXIubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXByaW1hcnktZ3JhcGhpYy5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtdHJhaWxpbmctYWN0aW9uIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2FjdGlvbi0tdHJhaWxpbmcsLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC1hdmF0YXIubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXByaW1hcnktZ3JhcGhpYy5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtdHJhaWxpbmctYWN0aW9uIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2FjdGlvbi0tdHJhaWxpbmdbZGlyPXJ0bF17cGFkZGluZy1sZWZ0OjhweDtwYWRkaW5nLXJpZ2h0OjhweH0ubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLWF2YXRhci5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtcHJpbWFyeS1ncmFwaGljLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC10cmFpbGluZy1hY3Rpb24gLm1kYy1ldm9sdXRpb24tY2hpcF9fcmlwcGxlLS10cmFpbGluZ3tsZWZ0OjhweDtyaWdodDppbml0aWFsfVtkaXI9cnRsXSAubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLWF2YXRhci5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtcHJpbWFyeS1ncmFwaGljLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC10cmFpbGluZy1hY3Rpb24gLm1kYy1ldm9sdXRpb24tY2hpcF9fcmlwcGxlLS10cmFpbGluZywubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLWF2YXRhci5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtcHJpbWFyeS1ncmFwaGljLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC10cmFpbGluZy1hY3Rpb24gLm1kYy1ldm9sdXRpb24tY2hpcF9fcmlwcGxlLS10cmFpbGluZ1tkaXI9cnRsXXtsZWZ0OmluaXRpYWw7cmlnaHQ6OHB4fS5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtYXZhdGFyLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC1wcmltYXJ5LWdyYXBoaWMubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXRyYWlsaW5nLWFjdGlvbiAubWRjLWV2b2x1dGlvbi1jaGlwX19hY3Rpb24tLXByaW1hcnl7cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDowfVtkaXI9cnRsXSAubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLWF2YXRhci5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtcHJpbWFyeS1ncmFwaGljLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC10cmFpbGluZy1hY3Rpb24gLm1kYy1ldm9sdXRpb24tY2hpcF9fYWN0aW9uLS1wcmltYXJ5LC5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtYXZhdGFyLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC1wcmltYXJ5LWdyYXBoaWMubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXRyYWlsaW5nLWFjdGlvbiAubWRjLWV2b2x1dGlvbi1jaGlwX19hY3Rpb24tLXByaW1hcnlbZGlyPXJ0bF17cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDowfS5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtYXZhdGFyLm1kYy1ldm9sdXRpb24tY2hpcC0tc2VsZWN0YWJsZTpub3QoLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC1wcmltYXJ5LWljb24pey0tbWRjLWNoaXAtZ3JhcGhpYy1zZWxlY3RlZC13aWR0aDoyNHB4fS5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtYXZhdGFyIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2dyYXBoaWN7aGVpZ2h0OjI0cHg7d2lkdGg6MjRweDtmb250LXNpemU6MjRweH0ubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLWF2YXRhciAubWRjLWV2b2x1dGlvbi1jaGlwX19pY29uLS1wcmltYXJ5e2hlaWdodDoyNHB4O3dpZHRoOjI0cHg7Zm9udC1zaXplOjI0cHh9Lm1hdC1tZGMtc3RhbmRhcmQtY2hpcHstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwwKTtib3JkZXItcmFkaXVzOnZhcigtLW1kYy1jaGlwLWNvbnRhaW5lci1zaGFwZS1yYWRpdXMsIDE2cHggMTZweCAxNnB4IDE2cHgpO2hlaWdodDp2YXIoLS1tZGMtY2hpcC1jb250YWluZXItaGVpZ2h0LCAzMnB4KX0ubWF0LW1kYy1zdGFuZGFyZC1jaGlwIC5tZGMtZXZvbHV0aW9uLWNoaXBfX3JpcHBsZXtib3JkZXItcmFkaXVzOnZhcigtLW1kYy1jaGlwLWNvbnRhaW5lci1zaGFwZS1yYWRpdXMsIDE2cHggMTZweCAxNnB4IDE2cHgpfS5tYXQtbWRjLXN0YW5kYXJkLWNoaXAgLm1kYy1ldm9sdXRpb24tY2hpcF9fYWN0aW9uLS1wcmltYXJ5OmJlZm9yZXtib3JkZXItcmFkaXVzOnZhcigtLW1kYy1jaGlwLWNvbnRhaW5lci1zaGFwZS1yYWRpdXMsIDE2cHggMTZweCAxNnB4IDE2cHgpfS5tYXQtbWRjLXN0YW5kYXJkLWNoaXAgLm1kYy1ldm9sdXRpb24tY2hpcF9faWNvbi0tcHJpbWFyeXtib3JkZXItcmFkaXVzOnZhcigtLW1kYy1jaGlwLXdpdGgtYXZhdGFyLWF2YXRhci1zaGFwZS1yYWRpdXMsIDE0cHggMTRweCAxNHB4IDE0cHgpfS5tYXQtbWRjLXN0YW5kYXJkLWNoaXAubWRjLWV2b2x1dGlvbi1jaGlwLS1zZWxlY3RhYmxlOm5vdCgubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXByaW1hcnktaWNvbil7LS1tZGMtY2hpcC1ncmFwaGljLXNlbGVjdGVkLXdpZHRoOnZhcigtLW1kYy1jaGlwLXdpdGgtYXZhdGFyLWF2YXRhci1zaXplLCAyOHB4KX0ubWF0LW1kYy1zdGFuZGFyZC1jaGlwIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2dyYXBoaWN7aGVpZ2h0OnZhcigtLW1kYy1jaGlwLXdpdGgtYXZhdGFyLWF2YXRhci1zaXplLCAyOHB4KTt3aWR0aDp2YXIoLS1tZGMtY2hpcC13aXRoLWF2YXRhci1hdmF0YXItc2l6ZSwgMjhweCk7Zm9udC1zaXplOnZhcigtLW1kYy1jaGlwLXdpdGgtYXZhdGFyLWF2YXRhci1zaXplLCAyOHB4KX0ubWF0LW1kYy1zdGFuZGFyZC1jaGlwIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2FjdGlvbi0tcHJpbWFyeTpiZWZvcmV7Ym9yZGVyLXdpZHRoOnZhcigtLW1kYy1jaGlwLW91dGxpbmUtd2lkdGgsIDFweCl9Lm1hdC1tZGMtc3RhbmRhcmQtY2hpcCAubWRjLWV2b2x1dGlvbi1jaGlwX19hY3Rpb24tLXByaW1hcnk6YmVmb3Jle2JvcmRlci13aWR0aDp2YXIoLS1tZGMtY2hpcC1mbGF0LW91dGxpbmUtd2lkdGgsIDFweCl9Lm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tZGMtZXZvbHV0aW9uLWNoaXAtLXNlbGVjdGVkIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2FjdGlvbi0tcHJpbWFyeTpiZWZvcmV7Ym9yZGVyLXdpZHRoOnZhcigtLW1kYy1jaGlwLWZsYXQtc2VsZWN0ZWQtb3V0bGluZS13aWR0aCwgMCl9Lm1hdC1tZGMtc3RhbmRhcmQtY2hpcDpub3QoLm1kYy1ldm9sdXRpb24tY2hpcC0tc2VsZWN0ZWQpIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2FjdGlvbi0tcHJpbWFyeTpiZWZvcmV7Ym9yZGVyLXdpZHRoOnZhcigtLW1kYy1jaGlwLWZsYXQtdW5zZWxlY3RlZC1vdXRsaW5lLXdpZHRoLCAxcHgpfS5tYXQtbWRjLXN0YW5kYXJkLWNoaXA6bm90KC5tZGMtZXZvbHV0aW9uLWNoaXAtLWRpc2FibGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy1jaGlwLWVsZXZhdGVkLWNvbnRhaW5lci1jb2xvciwgdHJhbnNwYXJlbnQpfS5tYXQtbWRjLXN0YW5kYXJkLWNoaXAubWRjLWV2b2x1dGlvbi1jaGlwLS1kaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy1jaGlwLWVsZXZhdGVkLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvciwgdHJhbnNwYXJlbnQpfS5tYXQtbWRjLXN0YW5kYXJkLWNoaXAubWRjLWV2b2x1dGlvbi1jaGlwLS1zZWxlY3RlZC5tZGMtZXZvbHV0aW9uLWNoaXAtLWRpc2FibGVke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLWNoaXAtZWxldmF0ZWQtZGlzYWJsZWQtY29udGFpbmVyLWNvbG9yLCB0cmFuc3BhcmVudCl9Lm1hdC1tZGMtc3RhbmRhcmQtY2hpcDpub3QoLm1kYy1ldm9sdXRpb24tY2hpcC0tZGlzYWJsZWQpIC5tZGMtZXZvbHV0aW9uLWNoaXBfX3RleHQtbGFiZWx7Y29sb3I6dmFyKC0tbWRjLWNoaXAtbGFiZWwtdGV4dC1jb2xvciwgY3VycmVudENvbG9yKX0ubWF0LW1kYy1zdGFuZGFyZC1jaGlwLm1kYy1ldm9sdXRpb24tY2hpcC0tZGlzYWJsZWQgLm1kYy1ldm9sdXRpb24tY2hpcF9fdGV4dC1sYWJlbHtjb2xvcjp2YXIoLS1tZGMtY2hpcC1kaXNhYmxlZC1sYWJlbC10ZXh0LWNvbG9yLCBjdXJyZW50Q29sb3IpfS5tYXQtbWRjLXN0YW5kYXJkLWNoaXAubWRjLWV2b2x1dGlvbi1jaGlwLS1zZWxlY3RlZC5tZGMtZXZvbHV0aW9uLWNoaXAtLWRpc2FibGVkIC5tZGMtZXZvbHV0aW9uLWNoaXBfX3RleHQtbGFiZWx7Y29sb3I6dmFyKC0tbWRjLWNoaXAtZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvciwgY3VycmVudENvbG9yKX0ubWF0LW1kYy1zdGFuZGFyZC1jaGlwIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2ljb24tLXByaW1hcnl7aGVpZ2h0OnZhcigtLW1kYy1jaGlwLXdpdGgtaWNvbi1pY29uLXNpemUsIDE4cHgpO3dpZHRoOnZhcigtLW1kYy1jaGlwLXdpdGgtaWNvbi1pY29uLXNpemUsIDE4cHgpO2ZvbnQtc2l6ZTp2YXIoLS1tZGMtY2hpcC13aXRoLWljb24taWNvbi1zaXplLCAxOHB4KX0ubWF0LW1kYy1zdGFuZGFyZC1jaGlwOm5vdCgubWRjLWV2b2x1dGlvbi1jaGlwLS1kaXNhYmxlZCkgLm1kYy1ldm9sdXRpb24tY2hpcF9faWNvbi0tcHJpbWFyeXtjb2xvcjp2YXIoLS1tZGMtY2hpcC13aXRoLWljb24taWNvbi1jb2xvciwgY3VycmVudENvbG9yKX0ubWF0LW1kYy1zdGFuZGFyZC1jaGlwLm1kYy1ldm9sdXRpb24tY2hpcC0tZGlzYWJsZWQgLm1kYy1ldm9sdXRpb24tY2hpcF9faWNvbi0tcHJpbWFyeXtjb2xvcjp2YXIoLS1tZGMtY2hpcC13aXRoLWljb24tZGlzYWJsZWQtaWNvbi1jb2xvciwgY3VycmVudENvbG9yKX0ubWF0LW1kYy1zdGFuZGFyZC1jaGlwOm5vdCgubWRjLWV2b2x1dGlvbi1jaGlwLS1kaXNhYmxlZCkgLm1kYy1ldm9sdXRpb24tY2hpcF9fY2hlY2ttYXJre2NvbG9yOnZhcigtLW1kYy1jaGlwLXdpdGgtaWNvbi1zZWxlY3RlZC1pY29uLWNvbG9yLCBjdXJyZW50Q29sb3IpfS5tYXQtbWRjLXN0YW5kYXJkLWNoaXAubWRjLWV2b2x1dGlvbi1jaGlwLS1kaXNhYmxlZCAubWRjLWV2b2x1dGlvbi1jaGlwX19jaGVja21hcmt7Y29sb3I6dmFyKC0tbWRjLWNoaXAtd2l0aC1pY29uLWRpc2FibGVkLWljb24tY29sb3IsIGN1cnJlbnRDb2xvcil9Lm1hdC1tZGMtc3RhbmRhcmQtY2hpcDpub3QoLm1kYy1ldm9sdXRpb24tY2hpcC0tZGlzYWJsZWQpIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2ljb24tLXRyYWlsaW5ne2NvbG9yOnZhcigtLW1kYy1jaGlwLXdpdGgtdHJhaWxpbmctaWNvbi10cmFpbGluZy1pY29uLWNvbG9yLCBjdXJyZW50Q29sb3IpfS5tYXQtbWRjLXN0YW5kYXJkLWNoaXAubWRjLWV2b2x1dGlvbi1jaGlwLS1kaXNhYmxlZCAubWRjLWV2b2x1dGlvbi1jaGlwX19pY29uLS10cmFpbGluZ3tjb2xvcjp2YXIoLS1tZGMtY2hpcC13aXRoLXRyYWlsaW5nLWljb24tZGlzYWJsZWQtdHJhaWxpbmctaWNvbi1jb2xvciwgY3VycmVudENvbG9yKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWRjLXN0YW5kYXJkLWNoaXB7b3V0bGluZTpzb2xpZCAxcHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1kYy1zdGFuZGFyZC1jaGlwIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2NoZWNrbWFyay1wYXRoe3N0cm9rZTpDYW52YXNUZXh0ICFpbXBvcnRhbnR9Lm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tZGMtZXZvbHV0aW9uLWNoaXAtLWRpc2FibGVke29wYWNpdHk6LjR9Lm1hdC1tZGMtc3RhbmRhcmQtY2hpcCAubWRjLWV2b2x1dGlvbi1jaGlwX19jZWxsLS1wcmltYXJ5LC5tYXQtbWRjLXN0YW5kYXJkLWNoaXAgLm1kYy1ldm9sdXRpb24tY2hpcF9fYWN0aW9uLS1wcmltYXJ5LC5tYXQtbWRjLXN0YW5kYXJkLWNoaXAgLm1hdC1tZGMtY2hpcC1hY3Rpb24tbGFiZWx7b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LW1kYy1zdGFuZGFyZC1jaGlwIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2NlbGwtLXByaW1hcnl7d2lkdGg6MTAwJX0ubWF0LW1kYy1zdGFuZGFyZC1jaGlwIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2FjdGlvbi0tcHJpbWFyeXtmb250OmluaGVyaXQ7bGV0dGVyLXNwYWNpbmc6aW5oZXJpdDt3aGl0ZS1zcGFjZTppbmhlcml0fS5tYXQtbWRjLXN0YW5kYXJkLWNoaXAgLm1hdC1tZGMtY2hpcC1ncmFwaGljLC5tYXQtbWRjLXN0YW5kYXJkLWNoaXAgLm1hdC1tZGMtY2hpcC10cmFpbGluZy1pY29ue2JveC1zaXppbmc6Y29udGVudC1ib3h9Lm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSwubWF0LW1kYy1zdGFuZGFyZC1jaGlwLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2dyYXBoaWMsLm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWRjLWV2b2x1dGlvbi1jaGlwX19jaGVja21hcmssLm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWRjLWV2b2x1dGlvbi1jaGlwX19jaGVja21hcmstcGF0aHt0cmFuc2l0aW9uLWR1cmF0aW9uOjFtczthbmltYXRpb24tZHVyYXRpb246MW1zfS5tYXQtbWRjLWJhc2ljLWNoaXAgLm1kYy1ldm9sdXRpb24tY2hpcF9fYWN0aW9uLS1wcmltYXJ5e2ZvbnQ6aW5oZXJpdH0ubWF0LW1kYy1jaGlwLWZvY3VzLW92ZXJsYXl7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZTtvcGFjaXR5OjA7Ym9yZGVyLXJhZGl1czppbmhlcml0O3RyYW5zaXRpb246b3BhY2l0eSAxNTBtcyBsaW5lYXJ9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtbWRjLWNoaXAtZm9jdXMtb3ZlcmxheXt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1tZGMtYmFzaWMtY2hpcCAubWF0LW1kYy1jaGlwLWZvY3VzLW92ZXJsYXl7ZGlzcGxheTpub25lfS5tYXQtbWRjLWNoaXA6aG92ZXIgLm1hdC1tZGMtY2hpcC1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjA0fS5tYXQtbWRjLWNoaXAuY2RrLWZvY3VzZWQgLm1hdC1tZGMtY2hpcC1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjEyfS5tYXQtbWRjLWNoaXAtcmlwcGxle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmU7Ym9yZGVyLXJhZGl1czppbmhlcml0fS5tYXQtbWRjLWNoaXAtYXZhdGFye3RleHQtYWxpZ246Y2VudGVyO2xpbmUtaGVpZ2h0OjE7Y29sb3I6dmFyKC0tbWRjLWNoaXAtd2l0aC1pY29uLWljb24tY29sb3IsIGN1cnJlbnRDb2xvcil9Lm1hdC1tZGMtY2hpcHtwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjB9Lm1hdC1tZGMtY2hpcC1hY3Rpb24tbGFiZWx7dGV4dC1hbGlnbjpsZWZ0O3otaW5kZXg6MX1bZGlyPXJ0bF0gLm1hdC1tZGMtY2hpcC1hY3Rpb24tbGFiZWx7dGV4dC1hbGlnbjpyaWdodH0ubWF0LW1kYy1jaGlwLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC10cmFpbGluZy1hY3Rpb24gLm1hdC1tZGMtY2hpcC1hY3Rpb24tbGFiZWx7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtY2hpcC1hY3Rpb24tbGFiZWwgLm1hdC1tZGMtY2hpcC1wcmltYXJ5LWZvY3VzLWluZGljYXRvcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtyaWdodDowO2JvdHRvbTowO2xlZnQ6MDtwb2ludGVyLWV2ZW50czpub25lfS5tYXQtbWRjLWNoaXAtYWN0aW9uLWxhYmVsIC5tYXQtbWRjLWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle21hcmdpbjpjYWxjKGNhbGModmFyKC0tbWF0LW1kYy1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXdpZHRoLCAzcHgpICsgMnB4KSAqIC0xKX0ubWF0LW1kYy1jaGlwLXJlbW92ZXtvcGFjaXR5Oi41NH0ubWF0LW1kYy1jaGlwLXJlbW92ZTpmb2N1c3tvcGFjaXR5OjF9Lm1hdC1tZGMtY2hpcC1yZW1vdmU6OmJlZm9yZXttYXJnaW46Y2FsYyh2YXIoLS1tYXQtbWRjLWZvY3VzLWluZGljYXRvci1ib3JkZXItd2lkdGgsIDNweCkgKiAtMSk7bGVmdDo4cHg7cmlnaHQ6OHB4fS5tYXQtbWRjLWNoaXAtcmVtb3ZlIC5tYXQtaWNvbnt3aWR0aDppbmhlcml0O2hlaWdodDppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2JveC1zaXppbmc6Y29udGVudC1ib3h9Lm1hdC1jaGlwLWVkaXQtaW5wdXR7Y3Vyc29yOnRleHQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29sb3I6aW5oZXJpdDtvdXRsaW5lOjB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1kYy1jaGlwLXNlbGVjdGVkOm5vdCgubWF0LW1kYy1jaGlwLW11bHRpcGxlKXtvdXRsaW5lLXdpZHRoOjNweH0ubWF0LW1kYy1jaGlwLWFjdGlvbjpmb2N1cyAubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtjb250ZW50OiIifSddLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLEg0ZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgZUN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2RlZmF1bHRPcHRpb25zPSRuKFJWLHtvcHRpb25hbDohMH0pLHRoaXMuY2hpcExpc3RTZWxlY3RhYmxlPSEwLHRoaXMuX2NoaXBMaXN0TXVsdGlwbGU9ITEsdGhpcy5fY2hpcExpc3RIaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yPXRoaXMuX2RlZmF1bHRPcHRpb25zPy5oaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yPz8hMSx0aGlzLl9zZWxlY3RhYmxlPSEwLHRoaXMuX3NlbGVjdGVkPSExLHRoaXMuYmFzaWNDaGlwQXR0ck5hbWU9Im1hdC1iYXNpYy1jaGlwLW9wdGlvbiIsdGhpcy5zZWxlY3Rpb25DaGFuZ2U9bmV3IEZ9Z2V0IHNlbGVjdGFibGUoKXtyZXR1cm4gdGhpcy5fc2VsZWN0YWJsZSYmdGhpcy5jaGlwTGlzdFNlbGVjdGFibGV9c2V0IHNlbGVjdGFibGUoZSl7dGhpcy5fc2VsZWN0YWJsZT12dChlKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX1nZXQgc2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5fc2VsZWN0ZWR9c2V0IHNlbGVjdGVkKGUpe3RoaXMuX3NldFNlbGVjdGVkU3RhdGUodnQoZSksITEsITApfWdldCBhcmlhU2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5zZWxlY3RhYmxlP3RoaXMuc2VsZWN0ZWQudG9TdHJpbmcoKTpudWxsfW5nT25Jbml0KCl7c3VwZXIubmdPbkluaXQoKSx0aGlzLnJvbGU9InByZXNlbnRhdGlvbiJ9c2VsZWN0KCl7dGhpcy5fc2V0U2VsZWN0ZWRTdGF0ZSghMCwhMSwhMCl9ZGVzZWxlY3QoKXt0aGlzLl9zZXRTZWxlY3RlZFN0YXRlKCExLCExLCEwKX1zZWxlY3RWaWFJbnRlcmFjdGlvbigpe3RoaXMuX3NldFNlbGVjdGVkU3RhdGUoITAsITAsITApfXRvZ2dsZVNlbGVjdGVkKGU9ITEpe3JldHVybiB0aGlzLl9zZXRTZWxlY3RlZFN0YXRlKCF0aGlzLnNlbGVjdGVkLGUsITApLHRoaXMuc2VsZWN0ZWR9X2hhbmRsZVByaW1hcnlBY3Rpb25JbnRlcmFjdGlvbigpe3RoaXMuc2VsZWN0YWJsZSYmIXRoaXMuZGlzYWJsZWQmJnRoaXMudG9nZ2xlU2VsZWN0ZWQoITApfV9oYXNMZWFkaW5nR3JhcGhpYygpe3JldHVybiEhdGhpcy5sZWFkaW5nSWNvbnx8IXRoaXMuX2NoaXBMaXN0SGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvcnx8dGhpcy5fY2hpcExpc3RNdWx0aXBsZX1fc2V0U2VsZWN0ZWRTdGF0ZShlLGkscil7ZSE9PXRoaXMuc2VsZWN0ZWQmJih0aGlzLl9zZWxlY3RlZD1lLHImJnRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoe3NvdXJjZTp0aGlzLGlzVXNlcklucHV0Omksc2VsZWN0ZWQ6dGhpcy5zZWxlY3RlZH0pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1YbihuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1iYXNpYy1jaGlwLW9wdGlvbiJdLFsiIiwibWF0LWJhc2ljLWNoaXAtb3B0aW9uIiwiIl0sWyJtYXQtY2hpcC1vcHRpb24iXSxbIiIsIm1hdC1jaGlwLW9wdGlvbiIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1tZGMtY2hpcCIsIm1hdC1tZGMtY2hpcC1vcHRpb24iXSxob3N0VmFyczozNyxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJih3bygiaWQiLGkuaWQpLEJlKCJ0YWJpbmRleCIsbnVsbCkoImFyaWEtbGFiZWwiLG51bGwpKCJhcmlhLWRlc2NyaXB0aW9uIixudWxsKSgicm9sZSIsaS5yb2xlKSxudCgibWRjLWV2b2x1dGlvbi1jaGlwIiwhaS5faXNCYXNpY0NoaXApKCJtZGMtZXZvbHV0aW9uLWNoaXAtLWZpbHRlciIsIWkuX2lzQmFzaWNDaGlwKSgibWRjLWV2b2x1dGlvbi1jaGlwLS1zZWxlY3RhYmxlIiwhaS5faXNCYXNpY0NoaXApKCJtYXQtbWRjLWNoaXAtc2VsZWN0ZWQiLGkuc2VsZWN0ZWQpKCJtYXQtbWRjLWNoaXAtbXVsdGlwbGUiLGkuX2NoaXBMaXN0TXVsdGlwbGUpKCJtYXQtbWRjLWNoaXAtZGlzYWJsZWQiLGkuZGlzYWJsZWQpKCJtYXQtbWRjLWNoaXAtd2l0aC1hdmF0YXIiLGkubGVhZGluZ0ljb24pKCJtZGMtZXZvbHV0aW9uLWNoaXAtLWRpc2FibGVkIixpLmRpc2FibGVkKSgibWRjLWV2b2x1dGlvbi1jaGlwLS1zZWxlY3RlZCIsaS5zZWxlY3RlZCkoIm1kYy1ldm9sdXRpb24tY2hpcC0tc2VsZWN0aW5nIiwhaS5fYW5pbWF0aW9uc0Rpc2FibGVkKSgibWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXRyYWlsaW5nLWFjdGlvbiIsaS5faGFzVHJhaWxpbmdJY29uKCkpKCJtZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtcHJpbWFyeS1pY29uIixpLmxlYWRpbmdJY29uKSgibWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXByaW1hcnktZ3JhcGhpYyIsaS5faGFzTGVhZGluZ0dyYXBoaWMoKSkoIm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC1hdmF0YXIiLGkubGVhZGluZ0ljb24pKCJtYXQtbWRjLWNoaXAtaGlnaGxpZ2h0ZWQiLGkuaGlnaGxpZ2h0ZWQpKCJtYXQtbWRjLWNoaXAtd2l0aC10cmFpbGluZy1pY29uIixpLl9oYXNUcmFpbGluZ0ljb24oKSkpfSxpbnB1dHM6e2NvbG9yOiJjb2xvciIsZGlzYWJsZWQ6ImRpc2FibGVkIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIix0YWJJbmRleDoidGFiSW5kZXgiLHNlbGVjdGFibGU6InNlbGVjdGFibGUiLHNlbGVjdGVkOiJzZWxlY3RlZCJ9LG91dHB1dHM6e3NlbGVjdGlvbkNoYW5nZToic2VsZWN0aW9uQ2hhbmdlIn0sZmVhdHVyZXM6W1Z0KFt7cHJvdmlkZTplQyx1c2VFeGlzdGluZzpufSx7cHJvdmlkZTpQVix1c2VFeGlzdGluZzpufV0pLFhlXSxuZ0NvbnRlbnRTZWxlY3RvcnM6am5lLGRlY2xzOjExLHZhcnM6MTIsY29uc3RzOltbIm1hdFJpcHBsZSIsIiIsMSwibWF0LW1kYy1jaGlwLXJpcHBsZSIsMywibWF0UmlwcGxlRGlzYWJsZWQiLCJtYXRSaXBwbGVDZW50ZXJlZCIsIm1hdFJpcHBsZVRyaWdnZXIiXSxbMSwibWF0LW1kYy1jaGlwLWZvY3VzLW92ZXJsYXkiXSxbMSwibWRjLWV2b2x1dGlvbi1jaGlwX19jZWxsIiwibWRjLWV2b2x1dGlvbi1jaGlwX19jZWxsLS1wcmltYXJ5Il0sWyJtYXRDaGlwQWN0aW9uIiwiIiwicm9sZSIsIm9wdGlvbiIsMywidGFiSW5kZXgiLCJfYWxsb3dGb2N1c1doZW5EaXNhYmxlZCJdLFsiY2xhc3MiLCJtZGMtZXZvbHV0aW9uLWNoaXBfX2dyYXBoaWMgbWF0LW1kYy1jaGlwLWdyYXBoaWMiLDQsIm5nSWYiXSxbMSwibWRjLWV2b2x1dGlvbi1jaGlwX190ZXh0LWxhYmVsIiwibWF0LW1kYy1jaGlwLWFjdGlvbi1sYWJlbCJdLFsxLCJtYXQtbWRjLWNoaXAtcHJpbWFyeS1mb2N1cy1pbmRpY2F0b3IiLCJtYXQtbWRjLWZvY3VzLWluZGljYXRvciJdLFsiY2xhc3MiLCJtZGMtZXZvbHV0aW9uLWNoaXBfX2NlbGwgbWRjLWV2b2x1dGlvbi1jaGlwX19jZWxsLS10cmFpbGluZyIsNCwibmdJZiJdLFsxLCJjZGstdmlzdWFsbHktaGlkZGVuIiwzLCJpZCJdLFsxLCJtZGMtZXZvbHV0aW9uLWNoaXBfX2dyYXBoaWMiLCJtYXQtbWRjLWNoaXAtZ3JhcGhpYyJdLFsxLCJtZGMtZXZvbHV0aW9uLWNoaXBfX2NoZWNrbWFyayJdLFsidmlld0JveCIsIi0yIC0zIDMwIDMwIiwiZm9jdXNhYmxlIiwiZmFsc2UiLDEsIm1kYy1ldm9sdXRpb24tY2hpcF9fY2hlY2ttYXJrLXN2ZyJdLFsiZmlsbCIsIm5vbmUiLCJzdHJva2UiLCJjdXJyZW50Q29sb3IiLCJkIiwiTTEuNzMsMTIuOTEgOC4xLDE5LjI4IDIyLjc5LDQuNTkiLDEsIm1kYy1ldm9sdXRpb24tY2hpcF9fY2hlY2ttYXJrLXBhdGgiXSxbMSwibWRjLWV2b2x1dGlvbi1jaGlwX19jZWxsIiwibWRjLWV2b2x1dGlvbi1jaGlwX19jZWxsLS10cmFpbGluZyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGZuKFVuZSksaygwLCJzcGFuIiwwKSgxLCJzcGFuIiwxKSxmKDIsInNwYW4iLDIpKDMsImJ1dHRvbiIsMyksUyg0LGs0ZSw1LDAsInNwYW4iLDQpLGYoNSwic3BhbiIsNSksVHQoNiksayg3LCJzcGFuIiw2KSxnKCkoKSgpLFMoOCxPNGUsMiwwLCJzcGFuIiw3KSxmKDksInNwYW4iLDgpLFQoMTApLGcoKSksMiZlJiYoYigibWF0UmlwcGxlRGlzYWJsZWQiLGkuX2lzUmlwcGxlRGlzYWJsZWQoKSkoIm1hdFJpcHBsZUNlbnRlcmVkIixpLl9pc1JpcHBsZUNlbnRlcmVkKSgibWF0UmlwcGxlVHJpZ2dlciIsaS5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSx2KDMpLGIoInRhYkluZGV4IixpLnRhYkluZGV4KSgiX2FsbG93Rm9jdXNXaGVuRGlzYWJsZWQiLCEwKSxCZSgiYXJpYS1zZWxlY3RlZCIsaS5hcmlhU2VsZWN0ZWQpKCJhcmlhLWxhYmVsIixpLmFyaWFMYWJlbCkoImFyaWEtZGVzY3JpYmVkYnkiLGkuX2FyaWFEZXNjcmlwdGlvbklkKSx2KDEpLGIoIm5nSWYiLGkuX2hhc0xlYWRpbmdHcmFwaGljKCkpLHYoNCksYigibmdJZiIsaS5faGFzVHJhaWxpbmdJY29uKCkpLHYoMSksYigiaWQiLGkuX2FyaWFEZXNjcmlwdGlvbklkKSx2KDEpLGt0KGkuYXJpYURlc2NyaXB0aW9uKSl9LGRlcGVuZGVuY2llczpbTmUsS2ksdkFdLHN0eWxlczpbJy5tZGMtZXZvbHV0aW9uLWNoaXAsLm1kYy1ldm9sdXRpb24tY2hpcF9fY2VsbCwubWRjLWV2b2x1dGlvbi1jaGlwX19hY3Rpb257ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9Lm1kYy1ldm9sdXRpb24tY2hpcHtwb3NpdGlvbjpyZWxhdGl2ZTttYXgtd2lkdGg6MTAwJX0ubWRjLWV2b2x1dGlvbi1jaGlwIC5tZGMtZWxldmF0aW9uLW92ZXJsYXl7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt0b3A6MDtsZWZ0OjB9Lm1kYy1ldm9sdXRpb24tY2hpcF9fY2VsbCwubWRjLWV2b2x1dGlvbi1jaGlwX19hY3Rpb257aGVpZ2h0OjEwMCV9Lm1kYy1ldm9sdXRpb24tY2hpcF9fY2VsbC0tcHJpbWFyeXtvdmVyZmxvdy14OmhpZGRlbn0ubWRjLWV2b2x1dGlvbi1jaGlwX19jZWxsLS10cmFpbGluZ3tmbGV4OjEgMCBhdXRvfS5tZGMtZXZvbHV0aW9uLWNoaXBfX2FjdGlvbnthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDpub25lO2JvcmRlcjpub25lO2JveC1zaXppbmc6Y29udGVudC1ib3g7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO291dGxpbmU6bm9uZTtwYWRkaW5nOjA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6aW5oZXJpdH0ubWRjLWV2b2x1dGlvbi1jaGlwX19hY3Rpb24tLXByZXNlbnRhdGlvbmFse2N1cnNvcjphdXRvfS5tZGMtZXZvbHV0aW9uLWNoaXAtLWRpc2FibGVkLC5tZGMtZXZvbHV0aW9uLWNoaXBfX2FjdGlvbjpkaXNhYmxlZHtwb2ludGVyLWV2ZW50czpub25lfS5tZGMtZXZvbHV0aW9uLWNoaXBfX2FjdGlvbi0tcHJpbWFyeXtvdmVyZmxvdy14OmhpZGRlbn0ubWRjLWV2b2x1dGlvbi1jaGlwX19hY3Rpb24tLXRyYWlsaW5ne3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OnZpc2libGV9Lm1kYy1ldm9sdXRpb24tY2hpcF9fYWN0aW9uLS1wcmltYXJ5OmJlZm9yZXtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29udGVudDoiIjtoZWlnaHQ6MTAwJTtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDt3aWR0aDoxMDAlO3otaW5kZXg6MX0ubWRjLWV2b2x1dGlvbi1jaGlwLS10b3VjaHttYXJnaW4tdG9wOjhweDttYXJnaW4tYm90dG9tOjhweH0ubWRjLWV2b2x1dGlvbi1jaGlwX19hY3Rpb24tdG91Y2h7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtoZWlnaHQ6NDhweDtsZWZ0OjA7cmlnaHQ6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKX0ubWRjLWV2b2x1dGlvbi1jaGlwX190ZXh0LWxhYmVse3doaXRlLXNwYWNlOm5vd3JhcDt1c2VyLXNlbGVjdDpub25lO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7b3ZlcmZsb3c6aGlkZGVufS5tZGMtZXZvbHV0aW9uLWNoaXBfX2dyYXBoaWN7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtvdmVyZmxvdzpoaWRkZW47cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjpyZWxhdGl2ZTtmbGV4OjEgMCBhdXRvfS5tZGMtZXZvbHV0aW9uLWNoaXBfX2NoZWNrbWFya3twb3NpdGlvbjphYnNvbHV0ZTtvcGFjaXR5OjA7dG9wOjUwJTtsZWZ0OjUwJX0ubWRjLWV2b2x1dGlvbi1jaGlwLS1zZWxlY3RhYmxlOm5vdCgubWRjLWV2b2x1dGlvbi1jaGlwLS1zZWxlY3RlZCk6bm90KC5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtcHJpbWFyeS1pY29uKSAubWRjLWV2b2x1dGlvbi1jaGlwX19ncmFwaGlje3dpZHRoOjB9Lm1kYy1ldm9sdXRpb24tY2hpcF9fY2hlY2ttYXJrLWJhY2tncm91bmR7b3BhY2l0eTowfS5tZGMtZXZvbHV0aW9uLWNoaXBfX2NoZWNrbWFyay1zdmd7ZGlzcGxheTpibG9ja30ubWRjLWV2b2x1dGlvbi1jaGlwX19jaGVja21hcmstcGF0aHtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1kYXNoYXJyYXk6MjkuNzgzMzM4NTtzdHJva2UtZGFzaG9mZnNldDoyOS43ODMzMzg1O3N0cm9rZTpjdXJyZW50Q29sb3J9Lm1kYy1ldm9sdXRpb24tY2hpcC0tc2VsZWN0aW5nIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2dyYXBoaWN7dHJhbnNpdGlvbjp3aWR0aCAxNTBtcyAwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKX0ubWRjLWV2b2x1dGlvbi1jaGlwLS1zZWxlY3RpbmcgLm1kYy1ldm9sdXRpb24tY2hpcF9fY2hlY2ttYXJre3RyYW5zaXRpb246dHJhbnNmb3JtIDE1MG1zIDBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTc1JSwgLTUwJSl9Lm1kYy1ldm9sdXRpb24tY2hpcC0tc2VsZWN0aW5nIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2NoZWNrbWFyay1wYXRoe3RyYW5zaXRpb246c3Ryb2tlLWRhc2hvZmZzZXQgMTUwbXMgNDVtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpfS5tZGMtZXZvbHV0aW9uLWNoaXAtLWRlc2VsZWN0aW5nIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2dyYXBoaWN7dHJhbnNpdGlvbjp3aWR0aCAxMDBtcyAwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKX0ubWRjLWV2b2x1dGlvbi1jaGlwLS1kZXNlbGVjdGluZyAubWRjLWV2b2x1dGlvbi1jaGlwX19jaGVja21hcmt7dHJhbnNpdGlvbjpvcGFjaXR5IDUwbXMgMG1zIGxpbmVhcix0cmFuc2Zvcm0gMTAwbXMgMG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNzUlLCAtNTAlKX0ubWRjLWV2b2x1dGlvbi1jaGlwLS1kZXNlbGVjdGluZyAubWRjLWV2b2x1dGlvbi1jaGlwX19jaGVja21hcmstcGF0aHtzdHJva2UtZGFzaG9mZnNldDowfS5tZGMtZXZvbHV0aW9uLWNoaXAtLXNlbGVjdGluZy13aXRoLXByaW1hcnktaWNvbiAubWRjLWV2b2x1dGlvbi1jaGlwX19pY29uLS1wcmltYXJ5e3RyYW5zaXRpb246b3BhY2l0eSA3NW1zIDBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpfS5tZGMtZXZvbHV0aW9uLWNoaXAtLXNlbGVjdGluZy13aXRoLXByaW1hcnktaWNvbiAubWRjLWV2b2x1dGlvbi1jaGlwX19jaGVja21hcmstcGF0aHt0cmFuc2l0aW9uOnN0cm9rZS1kYXNob2Zmc2V0IDE1MG1zIDc1bXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKX0ubWRjLWV2b2x1dGlvbi1jaGlwLS1kZXNlbGVjdGluZy13aXRoLXByaW1hcnktaWNvbiAubWRjLWV2b2x1dGlvbi1jaGlwX19pY29uLS1wcmltYXJ5e3RyYW5zaXRpb246b3BhY2l0eSAxNTBtcyA3NW1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSl9Lm1kYy1ldm9sdXRpb24tY2hpcC0tZGVzZWxlY3Rpbmctd2l0aC1wcmltYXJ5LWljb24gLm1kYy1ldm9sdXRpb24tY2hpcF9fY2hlY2ttYXJre3RyYW5zaXRpb246b3BhY2l0eSA3NW1zIDBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwgLTUwJSl9Lm1kYy1ldm9sdXRpb24tY2hpcC0tZGVzZWxlY3Rpbmctd2l0aC1wcmltYXJ5LWljb24gLm1kYy1ldm9sdXRpb24tY2hpcF9fY2hlY2ttYXJrLXBhdGh7c3Ryb2tlLWRhc2hvZmZzZXQ6MH0ubWRjLWV2b2x1dGlvbi1jaGlwLS1zZWxlY3RlZCAubWRjLWV2b2x1dGlvbi1jaGlwX19pY29uLS1wcmltYXJ5e29wYWNpdHk6MH0ubWRjLWV2b2x1dGlvbi1jaGlwLS1zZWxlY3RlZCAubWRjLWV2b2x1dGlvbi1jaGlwX19jaGVja21hcmt7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtvcGFjaXR5OjF9Lm1kYy1ldm9sdXRpb24tY2hpcC0tc2VsZWN0ZWQgLm1kYy1ldm9sdXRpb24tY2hpcF9fY2hlY2ttYXJrLXBhdGh7c3Ryb2tlLWRhc2hvZmZzZXQ6MH1Aa2V5ZnJhbWVzIG1kYy1ldm9sdXRpb24tY2hpcC1lbnRlcntmcm9te3RyYW5zZm9ybTpzY2FsZSgwLjgpO29wYWNpdHk6LjR9dG97dHJhbnNmb3JtOnNjYWxlKDEpO29wYWNpdHk6MX19Lm1kYy1ldm9sdXRpb24tY2hpcC0tZW50ZXJ7YW5pbWF0aW9uOm1kYy1ldm9sdXRpb24tY2hpcC1lbnRlciAxMDBtcyAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSl9QGtleWZyYW1lcyBtZGMtZXZvbHV0aW9uLWNoaXAtZXhpdHtmcm9te29wYWNpdHk6MX10b3tvcGFjaXR5OjB9fS5tZGMtZXZvbHV0aW9uLWNoaXAtLWV4aXR7YW5pbWF0aW9uOm1kYy1ldm9sdXRpb24tY2hpcC1leGl0IDc1bXMgMG1zIGN1YmljLWJlemllcigwLjQsIDAsIDEsIDEpfS5tZGMtZXZvbHV0aW9uLWNoaXAtLWhpZGRlbntvcGFjaXR5OjA7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOndpZHRoIDE1MG1zIDBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAxLCAxKX0ubWF0LW1kYy1zdGFuZGFyZC1jaGlwIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2NoZWNrbWFya3toZWlnaHQ6MjBweDt3aWR0aDoyMHB4fS5tYXQtbWRjLXN0YW5kYXJkLWNoaXAgLm1kYy1ldm9sdXRpb24tY2hpcF9faWNvbi0tdHJhaWxpbmd7aGVpZ2h0OjE4cHg7d2lkdGg6MThweDtmb250LXNpemU6MThweH0ubWF0LW1kYy1zdGFuZGFyZC1jaGlwIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2FjdGlvbi0tcHJpbWFyeXtwYWRkaW5nLWxlZnQ6MTJweDtwYWRkaW5nLXJpZ2h0OjEycHh9W2Rpcj1ydGxdIC5tYXQtbWRjLXN0YW5kYXJkLWNoaXAgLm1kYy1ldm9sdXRpb24tY2hpcF9fYWN0aW9uLS1wcmltYXJ5LC5tYXQtbWRjLXN0YW5kYXJkLWNoaXAgLm1kYy1ldm9sdXRpb24tY2hpcF9fYWN0aW9uLS1wcmltYXJ5W2Rpcj1ydGxde3BhZGRpbmctbGVmdDoxMnB4O3BhZGRpbmctcmlnaHQ6MTJweH0ubWF0LW1kYy1zdGFuZGFyZC1jaGlwLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC1wcmltYXJ5LWdyYXBoaWMgLm1kYy1ldm9sdXRpb24tY2hpcF9fZ3JhcGhpY3twYWRkaW5nLWxlZnQ6NnB4O3BhZGRpbmctcmlnaHQ6NnB4fVtkaXI9cnRsXSAubWF0LW1kYy1zdGFuZGFyZC1jaGlwLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC1wcmltYXJ5LWdyYXBoaWMgLm1kYy1ldm9sdXRpb24tY2hpcF9fZ3JhcGhpYywubWF0LW1kYy1zdGFuZGFyZC1jaGlwLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC1wcmltYXJ5LWdyYXBoaWMgLm1kYy1ldm9sdXRpb24tY2hpcF9fZ3JhcGhpY1tkaXI9cnRsXXtwYWRkaW5nLWxlZnQ6NnB4O3BhZGRpbmctcmlnaHQ6NnB4fS5tYXQtbWRjLXN0YW5kYXJkLWNoaXAubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXByaW1hcnktZ3JhcGhpYyAubWRjLWV2b2x1dGlvbi1jaGlwX19hY3Rpb24tLXByaW1hcnl7cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDoxMnB4fVtkaXI9cnRsXSAubWF0LW1kYy1zdGFuZGFyZC1jaGlwLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC1wcmltYXJ5LWdyYXBoaWMgLm1kYy1ldm9sdXRpb24tY2hpcF9fYWN0aW9uLS1wcmltYXJ5LC5tYXQtbWRjLXN0YW5kYXJkLWNoaXAubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXByaW1hcnktZ3JhcGhpYyAubWRjLWV2b2x1dGlvbi1jaGlwX19hY3Rpb24tLXByaW1hcnlbZGlyPXJ0bF17cGFkZGluZy1sZWZ0OjEycHg7cGFkZGluZy1yaWdodDowfS5tYXQtbWRjLXN0YW5kYXJkLWNoaXAubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXRyYWlsaW5nLWFjdGlvbiAubWRjLWV2b2x1dGlvbi1jaGlwX19hY3Rpb24tLXRyYWlsaW5ne3BhZGRpbmctbGVmdDo4cHg7cGFkZGluZy1yaWdodDo4cHh9W2Rpcj1ydGxdIC5tYXQtbWRjLXN0YW5kYXJkLWNoaXAubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXRyYWlsaW5nLWFjdGlvbiAubWRjLWV2b2x1dGlvbi1jaGlwX19hY3Rpb24tLXRyYWlsaW5nLC5tYXQtbWRjLXN0YW5kYXJkLWNoaXAubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXRyYWlsaW5nLWFjdGlvbiAubWRjLWV2b2x1dGlvbi1jaGlwX19hY3Rpb24tLXRyYWlsaW5nW2Rpcj1ydGxde3BhZGRpbmctbGVmdDo4cHg7cGFkZGluZy1yaWdodDo4cHh9Lm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtdHJhaWxpbmctYWN0aW9uIC5tZGMtZXZvbHV0aW9uLWNoaXBfX3JpcHBsZS0tdHJhaWxpbmd7bGVmdDo4cHg7cmlnaHQ6aW5pdGlhbH1bZGlyPXJ0bF0gLm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtdHJhaWxpbmctYWN0aW9uIC5tZGMtZXZvbHV0aW9uLWNoaXBfX3JpcHBsZS0tdHJhaWxpbmcsLm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtdHJhaWxpbmctYWN0aW9uIC5tZGMtZXZvbHV0aW9uLWNoaXBfX3JpcHBsZS0tdHJhaWxpbmdbZGlyPXJ0bF17bGVmdDppbml0aWFsO3JpZ2h0OjhweH0ubWF0LW1kYy1zdGFuZGFyZC1jaGlwLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC10cmFpbGluZy1hY3Rpb24gLm1kYy1ldm9sdXRpb24tY2hpcF9fYWN0aW9uLS1wcmltYXJ5e3BhZGRpbmctbGVmdDoxMnB4O3BhZGRpbmctcmlnaHQ6MH1bZGlyPXJ0bF0gLm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtdHJhaWxpbmctYWN0aW9uIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2FjdGlvbi0tcHJpbWFyeSwubWF0LW1kYy1zdGFuZGFyZC1jaGlwLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC10cmFpbGluZy1hY3Rpb24gLm1kYy1ldm9sdXRpb24tY2hpcF9fYWN0aW9uLS1wcmltYXJ5W2Rpcj1ydGxde3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MTJweH0ubWF0LW1kYy1zdGFuZGFyZC1jaGlwLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC1wcmltYXJ5LWdyYXBoaWMubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXRyYWlsaW5nLWFjdGlvbiAubWRjLWV2b2x1dGlvbi1jaGlwX19ncmFwaGlje3BhZGRpbmctbGVmdDo2cHg7cGFkZGluZy1yaWdodDo2cHh9W2Rpcj1ydGxdIC5tYXQtbWRjLXN0YW5kYXJkLWNoaXAubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXByaW1hcnktZ3JhcGhpYy5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtdHJhaWxpbmctYWN0aW9uIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2dyYXBoaWMsLm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtcHJpbWFyeS1ncmFwaGljLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC10cmFpbGluZy1hY3Rpb24gLm1kYy1ldm9sdXRpb24tY2hpcF9fZ3JhcGhpY1tkaXI9cnRsXXtwYWRkaW5nLWxlZnQ6NnB4O3BhZGRpbmctcmlnaHQ6NnB4fS5tYXQtbWRjLXN0YW5kYXJkLWNoaXAubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXByaW1hcnktZ3JhcGhpYy5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtdHJhaWxpbmctYWN0aW9uIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2FjdGlvbi0tdHJhaWxpbmd7cGFkZGluZy1sZWZ0OjhweDtwYWRkaW5nLXJpZ2h0OjhweH1bZGlyPXJ0bF0gLm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtcHJpbWFyeS1ncmFwaGljLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC10cmFpbGluZy1hY3Rpb24gLm1kYy1ldm9sdXRpb24tY2hpcF9fYWN0aW9uLS10cmFpbGluZywubWF0LW1kYy1zdGFuZGFyZC1jaGlwLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC1wcmltYXJ5LWdyYXBoaWMubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXRyYWlsaW5nLWFjdGlvbiAubWRjLWV2b2x1dGlvbi1jaGlwX19hY3Rpb24tLXRyYWlsaW5nW2Rpcj1ydGxde3BhZGRpbmctbGVmdDo4cHg7cGFkZGluZy1yaWdodDo4cHh9Lm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtcHJpbWFyeS1ncmFwaGljLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC10cmFpbGluZy1hY3Rpb24gLm1kYy1ldm9sdXRpb24tY2hpcF9fcmlwcGxlLS10cmFpbGluZ3tsZWZ0OjhweDtyaWdodDppbml0aWFsfVtkaXI9cnRsXSAubWF0LW1kYy1zdGFuZGFyZC1jaGlwLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC1wcmltYXJ5LWdyYXBoaWMubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXRyYWlsaW5nLWFjdGlvbiAubWRjLWV2b2x1dGlvbi1jaGlwX19yaXBwbGUtLXRyYWlsaW5nLC5tYXQtbWRjLXN0YW5kYXJkLWNoaXAubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXByaW1hcnktZ3JhcGhpYy5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtdHJhaWxpbmctYWN0aW9uIC5tZGMtZXZvbHV0aW9uLWNoaXBfX3JpcHBsZS0tdHJhaWxpbmdbZGlyPXJ0bF17bGVmdDppbml0aWFsO3JpZ2h0OjhweH0ubWF0LW1kYy1zdGFuZGFyZC1jaGlwLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC1wcmltYXJ5LWdyYXBoaWMubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXRyYWlsaW5nLWFjdGlvbiAubWRjLWV2b2x1dGlvbi1jaGlwX19hY3Rpb24tLXByaW1hcnl7cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDowfVtkaXI9cnRsXSAubWF0LW1kYy1zdGFuZGFyZC1jaGlwLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC1wcmltYXJ5LWdyYXBoaWMubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXRyYWlsaW5nLWFjdGlvbiAubWRjLWV2b2x1dGlvbi1jaGlwX19hY3Rpb24tLXByaW1hcnksLm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtcHJpbWFyeS1ncmFwaGljLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC10cmFpbGluZy1hY3Rpb24gLm1kYy1ldm9sdXRpb24tY2hpcF9fYWN0aW9uLS1wcmltYXJ5W2Rpcj1ydGxde3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MH0ubWF0LW1kYy1zdGFuZGFyZC1jaGlwLm1kYy1ldm9sdXRpb24tY2hpcC0tZGlzYWJsZWQgLm1kYy1ldm9sdXRpb24tY2hpcF9fY2hlY2ttYXJre2NvbG9yOnZhcigtLW1kYy1jaGlwLXdpdGgtaWNvbi1zZWxlY3RlZC1pY29uLWNvbG9yLCBjdXJyZW50Q29sb3IpfS5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtYXZhdGFyLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC1wcmltYXJ5LWdyYXBoaWMgLm1kYy1ldm9sdXRpb24tY2hpcF9fZ3JhcGhpY3twYWRkaW5nLWxlZnQ6NHB4O3BhZGRpbmctcmlnaHQ6OHB4fVtkaXI9cnRsXSAubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLWF2YXRhci5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtcHJpbWFyeS1ncmFwaGljIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2dyYXBoaWMsLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC1hdmF0YXIubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXByaW1hcnktZ3JhcGhpYyAubWRjLWV2b2x1dGlvbi1jaGlwX19ncmFwaGljW2Rpcj1ydGxde3BhZGRpbmctbGVmdDo4cHg7cGFkZGluZy1yaWdodDo0cHh9Lm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC1hdmF0YXIubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXByaW1hcnktZ3JhcGhpYyAubWRjLWV2b2x1dGlvbi1jaGlwX19hY3Rpb24tLXByaW1hcnl7cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDoxMnB4fVtkaXI9cnRsXSAubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLWF2YXRhci5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtcHJpbWFyeS1ncmFwaGljIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2FjdGlvbi0tcHJpbWFyeSwubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLWF2YXRhci5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtcHJpbWFyeS1ncmFwaGljIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2FjdGlvbi0tcHJpbWFyeVtkaXI9cnRsXXtwYWRkaW5nLWxlZnQ6MTJweDtwYWRkaW5nLXJpZ2h0OjB9Lm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC1hdmF0YXIubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXByaW1hcnktZ3JhcGhpYy5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtdHJhaWxpbmctYWN0aW9uIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2dyYXBoaWN7cGFkZGluZy1sZWZ0OjRweDtwYWRkaW5nLXJpZ2h0OjhweH1bZGlyPXJ0bF0gLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC1hdmF0YXIubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXByaW1hcnktZ3JhcGhpYy5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtdHJhaWxpbmctYWN0aW9uIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2dyYXBoaWMsLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC1hdmF0YXIubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXByaW1hcnktZ3JhcGhpYy5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtdHJhaWxpbmctYWN0aW9uIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2dyYXBoaWNbZGlyPXJ0bF17cGFkZGluZy1sZWZ0OjhweDtwYWRkaW5nLXJpZ2h0OjRweH0ubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLWF2YXRhci5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtcHJpbWFyeS1ncmFwaGljLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC10cmFpbGluZy1hY3Rpb24gLm1kYy1ldm9sdXRpb24tY2hpcF9fYWN0aW9uLS10cmFpbGluZ3twYWRkaW5nLWxlZnQ6OHB4O3BhZGRpbmctcmlnaHQ6OHB4fVtkaXI9cnRsXSAubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLWF2YXRhci5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtcHJpbWFyeS1ncmFwaGljLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC10cmFpbGluZy1hY3Rpb24gLm1kYy1ldm9sdXRpb24tY2hpcF9fYWN0aW9uLS10cmFpbGluZywubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLWF2YXRhci5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtcHJpbWFyeS1ncmFwaGljLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC10cmFpbGluZy1hY3Rpb24gLm1kYy1ldm9sdXRpb24tY2hpcF9fYWN0aW9uLS10cmFpbGluZ1tkaXI9cnRsXXtwYWRkaW5nLWxlZnQ6OHB4O3BhZGRpbmctcmlnaHQ6OHB4fS5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtYXZhdGFyLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC1wcmltYXJ5LWdyYXBoaWMubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXRyYWlsaW5nLWFjdGlvbiAubWRjLWV2b2x1dGlvbi1jaGlwX19yaXBwbGUtLXRyYWlsaW5ne2xlZnQ6OHB4O3JpZ2h0OmluaXRpYWx9W2Rpcj1ydGxdIC5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtYXZhdGFyLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC1wcmltYXJ5LWdyYXBoaWMubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXRyYWlsaW5nLWFjdGlvbiAubWRjLWV2b2x1dGlvbi1jaGlwX19yaXBwbGUtLXRyYWlsaW5nLC5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtYXZhdGFyLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC1wcmltYXJ5LWdyYXBoaWMubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXRyYWlsaW5nLWFjdGlvbiAubWRjLWV2b2x1dGlvbi1jaGlwX19yaXBwbGUtLXRyYWlsaW5nW2Rpcj1ydGxde2xlZnQ6aW5pdGlhbDtyaWdodDo4cHh9Lm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC1hdmF0YXIubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXByaW1hcnktZ3JhcGhpYy5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtdHJhaWxpbmctYWN0aW9uIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2FjdGlvbi0tcHJpbWFyeXtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjB9W2Rpcj1ydGxdIC5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtYXZhdGFyLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC1wcmltYXJ5LWdyYXBoaWMubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXRyYWlsaW5nLWFjdGlvbiAubWRjLWV2b2x1dGlvbi1jaGlwX19hY3Rpb24tLXByaW1hcnksLm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC1hdmF0YXIubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXByaW1hcnktZ3JhcGhpYy5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtdHJhaWxpbmctYWN0aW9uIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2FjdGlvbi0tcHJpbWFyeVtkaXI9cnRsXXtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjB9Lm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC1hdmF0YXIubWRjLWV2b2x1dGlvbi1jaGlwLS1zZWxlY3RhYmxlOm5vdCgubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXByaW1hcnktaWNvbil7LS1tZGMtY2hpcC1ncmFwaGljLXNlbGVjdGVkLXdpZHRoOjI0cHh9Lm1kYy1ldm9sdXRpb24tY2hpcC0td2l0aC1hdmF0YXIgLm1kYy1ldm9sdXRpb24tY2hpcF9fZ3JhcGhpY3toZWlnaHQ6MjRweDt3aWR0aDoyNHB4O2ZvbnQtc2l6ZToyNHB4fS5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtYXZhdGFyIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2ljb24tLXByaW1hcnl7aGVpZ2h0OjI0cHg7d2lkdGg6MjRweDtmb250LXNpemU6MjRweH0ubWF0LW1kYy1zdGFuZGFyZC1jaGlwey13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApO2JvcmRlci1yYWRpdXM6dmFyKC0tbWRjLWNoaXAtY29udGFpbmVyLXNoYXBlLXJhZGl1cywgMTZweCAxNnB4IDE2cHggMTZweCk7aGVpZ2h0OnZhcigtLW1kYy1jaGlwLWNvbnRhaW5lci1oZWlnaHQsIDMycHgpfS5tYXQtbWRjLXN0YW5kYXJkLWNoaXAgLm1kYy1ldm9sdXRpb24tY2hpcF9fcmlwcGxle2JvcmRlci1yYWRpdXM6dmFyKC0tbWRjLWNoaXAtY29udGFpbmVyLXNoYXBlLXJhZGl1cywgMTZweCAxNnB4IDE2cHggMTZweCl9Lm1hdC1tZGMtc3RhbmRhcmQtY2hpcCAubWRjLWV2b2x1dGlvbi1jaGlwX19hY3Rpb24tLXByaW1hcnk6YmVmb3Jle2JvcmRlci1yYWRpdXM6dmFyKC0tbWRjLWNoaXAtY29udGFpbmVyLXNoYXBlLXJhZGl1cywgMTZweCAxNnB4IDE2cHggMTZweCl9Lm1hdC1tZGMtc3RhbmRhcmQtY2hpcCAubWRjLWV2b2x1dGlvbi1jaGlwX19pY29uLS1wcmltYXJ5e2JvcmRlci1yYWRpdXM6dmFyKC0tbWRjLWNoaXAtd2l0aC1hdmF0YXItYXZhdGFyLXNoYXBlLXJhZGl1cywgMTRweCAxNHB4IDE0cHggMTRweCl9Lm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tZGMtZXZvbHV0aW9uLWNoaXAtLXNlbGVjdGFibGU6bm90KC5tZGMtZXZvbHV0aW9uLWNoaXAtLXdpdGgtcHJpbWFyeS1pY29uKXstLW1kYy1jaGlwLWdyYXBoaWMtc2VsZWN0ZWQtd2lkdGg6dmFyKC0tbWRjLWNoaXAtd2l0aC1hdmF0YXItYXZhdGFyLXNpemUsIDI4cHgpfS5tYXQtbWRjLXN0YW5kYXJkLWNoaXAgLm1kYy1ldm9sdXRpb24tY2hpcF9fZ3JhcGhpY3toZWlnaHQ6dmFyKC0tbWRjLWNoaXAtd2l0aC1hdmF0YXItYXZhdGFyLXNpemUsIDI4cHgpO3dpZHRoOnZhcigtLW1kYy1jaGlwLXdpdGgtYXZhdGFyLWF2YXRhci1zaXplLCAyOHB4KTtmb250LXNpemU6dmFyKC0tbWRjLWNoaXAtd2l0aC1hdmF0YXItYXZhdGFyLXNpemUsIDI4cHgpfS5tYXQtbWRjLXN0YW5kYXJkLWNoaXAgLm1kYy1ldm9sdXRpb24tY2hpcF9fYWN0aW9uLS1wcmltYXJ5OmJlZm9yZXtib3JkZXItd2lkdGg6dmFyKC0tbWRjLWNoaXAtb3V0bGluZS13aWR0aCwgMXB4KX0ubWF0LW1kYy1zdGFuZGFyZC1jaGlwIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2FjdGlvbi0tcHJpbWFyeTpiZWZvcmV7Ym9yZGVyLXdpZHRoOnZhcigtLW1kYy1jaGlwLWZsYXQtb3V0bGluZS13aWR0aCwgMXB4KX0ubWF0LW1kYy1zdGFuZGFyZC1jaGlwLm1kYy1ldm9sdXRpb24tY2hpcC0tc2VsZWN0ZWQgLm1kYy1ldm9sdXRpb24tY2hpcF9fYWN0aW9uLS1wcmltYXJ5OmJlZm9yZXtib3JkZXItd2lkdGg6dmFyKC0tbWRjLWNoaXAtZmxhdC1zZWxlY3RlZC1vdXRsaW5lLXdpZHRoLCAwKX0ubWF0LW1kYy1zdGFuZGFyZC1jaGlwOm5vdCgubWRjLWV2b2x1dGlvbi1jaGlwLS1zZWxlY3RlZCkgLm1kYy1ldm9sdXRpb24tY2hpcF9fYWN0aW9uLS1wcmltYXJ5OmJlZm9yZXtib3JkZXItd2lkdGg6dmFyKC0tbWRjLWNoaXAtZmxhdC11bnNlbGVjdGVkLW91dGxpbmUtd2lkdGgsIDFweCl9Lm1hdC1tZGMtc3RhbmRhcmQtY2hpcDpub3QoLm1kYy1ldm9sdXRpb24tY2hpcC0tZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLWNoaXAtZWxldmF0ZWQtY29udGFpbmVyLWNvbG9yLCB0cmFuc3BhcmVudCl9Lm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tZGMtZXZvbHV0aW9uLWNoaXAtLWRpc2FibGVke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLWNoaXAtZWxldmF0ZWQtZGlzYWJsZWQtY29udGFpbmVyLWNvbG9yLCB0cmFuc3BhcmVudCl9Lm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tZGMtZXZvbHV0aW9uLWNoaXAtLXNlbGVjdGVkLm1kYy1ldm9sdXRpb24tY2hpcC0tZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtY2hpcC1lbGV2YXRlZC1kaXNhYmxlZC1jb250YWluZXItY29sb3IsIHRyYW5zcGFyZW50KX0ubWF0LW1kYy1zdGFuZGFyZC1jaGlwOm5vdCgubWRjLWV2b2x1dGlvbi1jaGlwLS1kaXNhYmxlZCkgLm1kYy1ldm9sdXRpb24tY2hpcF9fdGV4dC1sYWJlbHtjb2xvcjp2YXIoLS1tZGMtY2hpcC1sYWJlbC10ZXh0LWNvbG9yLCBjdXJyZW50Q29sb3IpfS5tYXQtbWRjLXN0YW5kYXJkLWNoaXAubWRjLWV2b2x1dGlvbi1jaGlwLS1kaXNhYmxlZCAubWRjLWV2b2x1dGlvbi1jaGlwX190ZXh0LWxhYmVse2NvbG9yOnZhcigtLW1kYy1jaGlwLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3IsIGN1cnJlbnRDb2xvcil9Lm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tZGMtZXZvbHV0aW9uLWNoaXAtLXNlbGVjdGVkLm1kYy1ldm9sdXRpb24tY2hpcC0tZGlzYWJsZWQgLm1kYy1ldm9sdXRpb24tY2hpcF9fdGV4dC1sYWJlbHtjb2xvcjp2YXIoLS1tZGMtY2hpcC1kaXNhYmxlZC1sYWJlbC10ZXh0LWNvbG9yLCBjdXJyZW50Q29sb3IpfS5tYXQtbWRjLXN0YW5kYXJkLWNoaXAgLm1kYy1ldm9sdXRpb24tY2hpcF9faWNvbi0tcHJpbWFyeXtoZWlnaHQ6dmFyKC0tbWRjLWNoaXAtd2l0aC1pY29uLWljb24tc2l6ZSwgMThweCk7d2lkdGg6dmFyKC0tbWRjLWNoaXAtd2l0aC1pY29uLWljb24tc2l6ZSwgMThweCk7Zm9udC1zaXplOnZhcigtLW1kYy1jaGlwLXdpdGgtaWNvbi1pY29uLXNpemUsIDE4cHgpfS5tYXQtbWRjLXN0YW5kYXJkLWNoaXA6bm90KC5tZGMtZXZvbHV0aW9uLWNoaXAtLWRpc2FibGVkKSAubWRjLWV2b2x1dGlvbi1jaGlwX19pY29uLS1wcmltYXJ5e2NvbG9yOnZhcigtLW1kYy1jaGlwLXdpdGgtaWNvbi1pY29uLWNvbG9yLCBjdXJyZW50Q29sb3IpfS5tYXQtbWRjLXN0YW5kYXJkLWNoaXAubWRjLWV2b2x1dGlvbi1jaGlwLS1kaXNhYmxlZCAubWRjLWV2b2x1dGlvbi1jaGlwX19pY29uLS1wcmltYXJ5e2NvbG9yOnZhcigtLW1kYy1jaGlwLXdpdGgtaWNvbi1kaXNhYmxlZC1pY29uLWNvbG9yLCBjdXJyZW50Q29sb3IpfS5tYXQtbWRjLXN0YW5kYXJkLWNoaXA6bm90KC5tZGMtZXZvbHV0aW9uLWNoaXAtLWRpc2FibGVkKSAubWRjLWV2b2x1dGlvbi1jaGlwX19jaGVja21hcmt7Y29sb3I6dmFyKC0tbWRjLWNoaXAtd2l0aC1pY29uLXNlbGVjdGVkLWljb24tY29sb3IsIGN1cnJlbnRDb2xvcil9Lm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tZGMtZXZvbHV0aW9uLWNoaXAtLWRpc2FibGVkIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2NoZWNrbWFya3tjb2xvcjp2YXIoLS1tZGMtY2hpcC13aXRoLWljb24tZGlzYWJsZWQtaWNvbi1jb2xvciwgY3VycmVudENvbG9yKX0ubWF0LW1kYy1zdGFuZGFyZC1jaGlwOm5vdCgubWRjLWV2b2x1dGlvbi1jaGlwLS1kaXNhYmxlZCkgLm1kYy1ldm9sdXRpb24tY2hpcF9faWNvbi0tdHJhaWxpbmd7Y29sb3I6dmFyKC0tbWRjLWNoaXAtd2l0aC10cmFpbGluZy1pY29uLXRyYWlsaW5nLWljb24tY29sb3IsIGN1cnJlbnRDb2xvcil9Lm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tZGMtZXZvbHV0aW9uLWNoaXAtLWRpc2FibGVkIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2ljb24tLXRyYWlsaW5ne2NvbG9yOnZhcigtLW1kYy1jaGlwLXdpdGgtdHJhaWxpbmctaWNvbi1kaXNhYmxlZC10cmFpbGluZy1pY29uLWNvbG9yLCBjdXJyZW50Q29sb3IpfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZGMtc3RhbmRhcmQtY2hpcHtvdXRsaW5lOnNvbGlkIDFweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWRjLXN0YW5kYXJkLWNoaXAgLm1kYy1ldm9sdXRpb24tY2hpcF9fY2hlY2ttYXJrLXBhdGh7c3Ryb2tlOkNhbnZhc1RleHQgIWltcG9ydGFudH0ubWF0LW1kYy1zdGFuZGFyZC1jaGlwLm1kYy1ldm9sdXRpb24tY2hpcC0tZGlzYWJsZWR7b3BhY2l0eTouNH0ubWF0LW1kYy1zdGFuZGFyZC1jaGlwIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2NlbGwtLXByaW1hcnksLm1hdC1tZGMtc3RhbmRhcmQtY2hpcCAubWRjLWV2b2x1dGlvbi1jaGlwX19hY3Rpb24tLXByaW1hcnksLm1hdC1tZGMtc3RhbmRhcmQtY2hpcCAubWF0LW1kYy1jaGlwLWFjdGlvbi1sYWJlbHtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtbWRjLXN0YW5kYXJkLWNoaXAgLm1kYy1ldm9sdXRpb24tY2hpcF9fY2VsbC0tcHJpbWFyeXt3aWR0aDoxMDAlfS5tYXQtbWRjLXN0YW5kYXJkLWNoaXAgLm1kYy1ldm9sdXRpb24tY2hpcF9fYWN0aW9uLS1wcmltYXJ5e2ZvbnQ6aW5oZXJpdDtsZXR0ZXItc3BhY2luZzppbmhlcml0O3doaXRlLXNwYWNlOmluaGVyaXR9Lm1hdC1tZGMtc3RhbmRhcmQtY2hpcCAubWF0LW1kYy1jaGlwLWdyYXBoaWMsLm1hdC1tZGMtc3RhbmRhcmQtY2hpcCAubWF0LW1kYy1jaGlwLXRyYWlsaW5nLWljb257Ym94LXNpemluZzpjb250ZW50LWJveH0ubWF0LW1kYy1zdGFuZGFyZC1jaGlwLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLC5tYXQtbWRjLXN0YW5kYXJkLWNoaXAuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1kYy1ldm9sdXRpb24tY2hpcF9fZ3JhcGhpYywubWF0LW1kYy1zdGFuZGFyZC1jaGlwLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2NoZWNrbWFyaywubWF0LW1kYy1zdGFuZGFyZC1jaGlwLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tZGMtZXZvbHV0aW9uLWNoaXBfX2NoZWNrbWFyay1wYXRoe3RyYW5zaXRpb24tZHVyYXRpb246MW1zO2FuaW1hdGlvbi1kdXJhdGlvbjoxbXN9Lm1hdC1tZGMtYmFzaWMtY2hpcCAubWRjLWV2b2x1dGlvbi1jaGlwX19hY3Rpb24tLXByaW1hcnl7Zm9udDppbmhlcml0fS5tYXQtbWRjLWNoaXAtZm9jdXMtb3ZlcmxheXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lO29wYWNpdHk6MDtib3JkZXItcmFkaXVzOmluaGVyaXQ7dHJhbnNpdGlvbjpvcGFjaXR5IDE1MG1zIGxpbmVhcn0uX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1tZGMtY2hpcC1mb2N1cy1vdmVybGF5e3RyYW5zaXRpb246bm9uZX0ubWF0LW1kYy1iYXNpYy1jaGlwIC5tYXQtbWRjLWNoaXAtZm9jdXMtb3ZlcmxheXtkaXNwbGF5Om5vbmV9Lm1hdC1tZGMtY2hpcDpob3ZlciAubWF0LW1kYy1jaGlwLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMDR9Lm1hdC1tZGMtY2hpcC5jZGstZm9jdXNlZCAubWF0LW1kYy1jaGlwLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMTJ9Lm1hdC1tZGMtY2hpcC1yaXBwbGV7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZTtib3JkZXItcmFkaXVzOmluaGVyaXR9Lm1hdC1tZGMtY2hpcC1hdmF0YXJ7dGV4dC1hbGlnbjpjZW50ZXI7bGluZS1oZWlnaHQ6MTtjb2xvcjp2YXIoLS1tZGMtY2hpcC13aXRoLWljb24taWNvbi1jb2xvciwgY3VycmVudENvbG9yKX0ubWF0LW1kYy1jaGlwe3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6MH0ubWF0LW1kYy1jaGlwLWFjdGlvbi1sYWJlbHt0ZXh0LWFsaWduOmxlZnQ7ei1pbmRleDoxfVtkaXI9cnRsXSAubWF0LW1kYy1jaGlwLWFjdGlvbi1sYWJlbHt0ZXh0LWFsaWduOnJpZ2h0fS5tYXQtbWRjLWNoaXAubWRjLWV2b2x1dGlvbi1jaGlwLS13aXRoLXRyYWlsaW5nLWFjdGlvbiAubWF0LW1kYy1jaGlwLWFjdGlvbi1sYWJlbHtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1jaGlwLWFjdGlvbi1sYWJlbCAubWF0LW1kYy1jaGlwLXByaW1hcnktZm9jdXMtaW5kaWNhdG9ye3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3JpZ2h0OjA7Ym90dG9tOjA7bGVmdDowO3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1hdC1tZGMtY2hpcC1hY3Rpb24tbGFiZWwgLm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmV7bWFyZ2luOmNhbGMoY2FsYyh2YXIoLS1tYXQtbWRjLWZvY3VzLWluZGljYXRvci1ib3JkZXItd2lkdGgsIDNweCkgKyAycHgpICogLTEpfS5tYXQtbWRjLWNoaXAtcmVtb3Zle29wYWNpdHk6LjU0fS5tYXQtbWRjLWNoaXAtcmVtb3ZlOmZvY3Vze29wYWNpdHk6MX0ubWF0LW1kYy1jaGlwLXJlbW92ZTo6YmVmb3Jle21hcmdpbjpjYWxjKHZhcigtLW1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yLWJvcmRlci13aWR0aCwgM3B4KSAqIC0xKTtsZWZ0OjhweDtyaWdodDo4cHh9Lm1hdC1tZGMtY2hpcC1yZW1vdmUgLm1hdC1pY29ue3dpZHRoOmluaGVyaXQ7aGVpZ2h0OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Ym94LXNpemluZzpjb250ZW50LWJveH0ubWF0LWNoaXAtZWRpdC1pbnB1dHtjdXJzb3I6dGV4dDtkaXNwbGF5OmlubGluZS1ibG9jaztjb2xvcjppbmhlcml0O291dGxpbmU6MH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWRjLWNoaXAtc2VsZWN0ZWQ6bm90KC5tYXQtbWRjLWNoaXAtbXVsdGlwbGUpe291dGxpbmUtd2lkdGg6M3B4fS5tYXQtbWRjLWNoaXAtYWN0aW9uOmZvY3VzIC5tYXQtbWRjLWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle2NvbnRlbnQ6IiJ9J10sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksejRlPURjKGNsYXNze2NvbnN0cnVjdG9yKHQpe319KSx5QT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgejRle2dldCBjaGlwRm9jdXNDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2dldENoaXBTdHJlYW0oZT0+ZS5fb25Gb2N1cyl9Z2V0IGNoaXBEZXN0cm95ZWRDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2dldENoaXBTdHJlYW0oZT0+ZS5kZXN0cm95ZWQpfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoZSl7dGhpcy5fZGlzYWJsZWQ9dnQoZSksdGhpcy5fc3luY0NoaXBzU3RhdGUoKX1nZXQgZW1wdHkoKXtyZXR1cm4gMD09PXRoaXMuX2NoaXBzLmxlbmd0aH1nZXQgcm9sZSgpe3JldHVybiB0aGlzLl9leHBsaWNpdFJvbGU/dGhpcy5fZXhwbGljaXRSb2xlOnRoaXMuZW1wdHk/bnVsbDp0aGlzLl9kZWZhdWx0Um9sZX1zZXQgcm9sZShlKXt0aGlzLl9leHBsaWNpdFJvbGU9ZX1nZXQgZm9jdXNlZCgpe3JldHVybiB0aGlzLl9oYXNGb2N1c2VkQ2hpcCgpfWNvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcihlKSx0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9aSx0aGlzLl9kaXI9cix0aGlzLl9sYXN0RGVzdHJveWVkRm9jdXNlZENoaXBJbmRleD1udWxsLHRoaXMuX2Rlc3Ryb3llZD1uZXcgRWUsdGhpcy5fZGVmYXVsdFJvbGU9InByZXNlbnRhdGlvbiIsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5fZXhwbGljaXRSb2xlPW51bGwsdGhpcy5fY2hpcEFjdGlvbnM9bmV3IFBhfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX3NldFVwRm9jdXNNYW5hZ2VtZW50KCksdGhpcy5fdHJhY2tDaGlwU2V0Q2hhbmdlcygpLHRoaXMuX3RyYWNrRGVzdHJveWVkRm9jdXNlZENoaXAoKX1uZ09uRGVzdHJveSgpe3RoaXMuX2tleU1hbmFnZXI/LmRlc3Ryb3koKSx0aGlzLl9jaGlwQWN0aW9ucy5kZXN0cm95KCksdGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKX1faGFzRm9jdXNlZENoaXAoKXtyZXR1cm4gdGhpcy5fY2hpcHMmJnRoaXMuX2NoaXBzLnNvbWUoZT0+ZS5faGFzRm9jdXMoKSl9X3N5bmNDaGlwc1N0YXRlKCl7dGhpcy5fY2hpcHMmJnRoaXMuX2NoaXBzLmZvckVhY2goZT0+e2UuZGlzYWJsZWQ9dGhpcy5fZGlzYWJsZWQsZS5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KX1mb2N1cygpe31faGFuZGxlS2V5ZG93bihlKXt0aGlzLl9vcmlnaW5hdGVzRnJvbUNoaXAoZSkmJnRoaXMuX2tleU1hbmFnZXIub25LZXlkb3duKGUpfV9pc1ZhbGlkSW5kZXgoZSl7cmV0dXJuIGU+PTAmJmU8dGhpcy5fY2hpcHMubGVuZ3RofV9hbGxvd0ZvY3VzRXNjYXBlKCl7aWYoLTEhPT10aGlzLnRhYkluZGV4KXtsZXQgZT10aGlzLnRhYkluZGV4O3RoaXMudGFiSW5kZXg9LTEsc2V0VGltZW91dCgoKT0+dGhpcy50YWJJbmRleD1lKX19X2dldENoaXBTdHJlYW0oZSl7cmV0dXJuIHRoaXMuX2NoaXBzLmNoYW5nZXMucGlwZShrbihudWxsKSxKbigoKT0+dG4oLi4udGhpcy5fY2hpcHMubWFwKGUpKSkpfV9vcmlnaW5hdGVzRnJvbUNoaXAoZSl7bGV0IGk9ZS50YXJnZXQ7Zm9yKDtpJiZpIT09dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Oyl7aWYoaS5jbGFzc0xpc3QuY29udGFpbnMoIm1hdC1tZGMtY2hpcCIpKXJldHVybiEwO2k9aS5wYXJlbnRFbGVtZW50fXJldHVybiExfV9zZXRVcEZvY3VzTWFuYWdlbWVudCgpe3RoaXMuX2NoaXBzLmNoYW5nZXMucGlwZShrbih0aGlzLl9jaGlwcykpLnN1YnNjcmliZShlPT57bGV0IGk9W107ZS5mb3JFYWNoKHI9PnIuX2dldEFjdGlvbnMoKS5mb3JFYWNoKG89PmkucHVzaChvKSkpLHRoaXMuX2NoaXBBY3Rpb25zLnJlc2V0KGkpLHRoaXMuX2NoaXBBY3Rpb25zLm5vdGlmeU9uQ2hhbmdlcygpfSksdGhpcy5fa2V5TWFuYWdlcj1uZXcga3UodGhpcy5fY2hpcEFjdGlvbnMpLndpdGhWZXJ0aWNhbE9yaWVudGF0aW9uKCkud2l0aEhvcml6b250YWxPcmllbnRhdGlvbih0aGlzLl9kaXI/dGhpcy5fZGlyLnZhbHVlOiJsdHIiKS53aXRoSG9tZUFuZEVuZCgpLnNraXBQcmVkaWNhdGUoZT0+dGhpcy5fc2tpcFByZWRpY2F0ZShlKSksdGhpcy5jaGlwRm9jdXNDaGFuZ2VzLnBpcGUoaXQodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCh7Y2hpcDplfSk9PntsZXQgaT1lLl9nZXRTb3VyY2VBY3Rpb24oZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7aSYmdGhpcy5fa2V5TWFuYWdlci51cGRhdGVBY3RpdmVJdGVtKGkpfSksdGhpcy5fZGlyPy5jaGFuZ2UucGlwZShpdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoZT0+dGhpcy5fa2V5TWFuYWdlci53aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKGUpKX1fc2tpcFByZWRpY2F0ZShlKXtyZXR1cm4hZS5pc0ludGVyYWN0aXZlfHxlLmRpc2FibGVkfV90cmFja0NoaXBTZXRDaGFuZ2VzKCl7dGhpcy5fY2hpcHMuY2hhbmdlcy5waXBlKGtuKG51bGwpLGl0KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuZGlzYWJsZWQmJlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PnRoaXMuX3N5bmNDaGlwc1N0YXRlKCkpLHRoaXMuX3JlZGlyZWN0RGVzdHJveWVkQ2hpcEZvY3VzKCl9KX1fdHJhY2tEZXN0cm95ZWRGb2N1c2VkQ2hpcCgpe3RoaXMuY2hpcERlc3Ryb3llZENoYW5nZXMucGlwZShpdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoZT0+e2xldCByPXRoaXMuX2NoaXBzLnRvQXJyYXkoKS5pbmRleE9mKGUuY2hpcCk7dGhpcy5faXNWYWxpZEluZGV4KHIpJiZlLmNoaXAuX2hhc0ZvY3VzKCkmJih0aGlzLl9sYXN0RGVzdHJveWVkRm9jdXNlZENoaXBJbmRleD1yKX0pfV9yZWRpcmVjdERlc3Ryb3llZENoaXBGb2N1cygpe2lmKG51bGwhPXRoaXMuX2xhc3REZXN0cm95ZWRGb2N1c2VkQ2hpcEluZGV4KXtpZih0aGlzLl9jaGlwcy5sZW5ndGgpe2xldCBlPU1hdGgubWluKHRoaXMuX2xhc3REZXN0cm95ZWRGb2N1c2VkQ2hpcEluZGV4LHRoaXMuX2NoaXBzLmxlbmd0aC0xKSxpPXRoaXMuX2NoaXBzLnRvQXJyYXkoKVtlXTtpLmRpc2FibGVkPzE9PT10aGlzLl9jaGlwcy5sZW5ndGg/dGhpcy5mb2N1cygpOnRoaXMuX2tleU1hbmFnZXIuc2V0UHJldmlvdXNJdGVtQWN0aXZlKCk6aS5mb2N1cygpfWVsc2UgdGhpcy5mb2N1cygpO3RoaXMuX2xhc3REZXN0cm95ZWRGb2N1c2VkQ2hpcEluZGV4PW51bGx9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKHhlKSxDKFF0KSxDKHppLDgpKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtY2hpcC1zZXQiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxpLHIpe2lmKDEmZSYmQm4ocixlQyw1KSwyJmUpe2xldCBvO2JlKG89dmUoKSkmJihpLl9jaGlwcz1vKX19LGhvc3RBdHRyczpbMSwibWF0LW1kYy1jaGlwLXNldCIsIm1kYy1ldm9sdXRpb24tY2hpcC1zZXQiXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmQSgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUtleWRvd24obyl9KSwyJmUmJkJlKCJyb2xlIixpLnJvbGUpfSxpbnB1dHM6e2Rpc2FibGVkOiJkaXNhYmxlZCIscm9sZToicm9sZSJ9LGZlYXR1cmVzOltYZV0sbmdDb250ZW50U2VsZWN0b3JzOkduZSxkZWNsczoyLHZhcnM6MCxjb25zdHM6W1sicm9sZSIsInByZXNlbnRhdGlvbiIsMSwibWRjLWV2b2x1dGlvbi1jaGlwLXNldF9fY2hpcHMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihmbigpLGYoMCwiZGl2IiwwKSxUdCgxKSxnKCkpfSxzdHlsZXM6WyIubWRjLWV2b2x1dGlvbi1jaGlwLXNldHtkaXNwbGF5OmZsZXh9Lm1kYy1ldm9sdXRpb24tY2hpcC1zZXQ6Zm9jdXN7b3V0bGluZTpub25lfS5tZGMtZXZvbHV0aW9uLWNoaXAtc2V0X19jaGlwc3tkaXNwbGF5OmZsZXg7ZmxleC1mbG93OndyYXA7bWluLXdpZHRoOjB9Lm1kYy1ldm9sdXRpb24tY2hpcC1zZXQtLW92ZXJmbG93IC5tZGMtZXZvbHV0aW9uLWNoaXAtc2V0X19jaGlwc3tmbGV4LWZsb3c6bm93cmFwfS5tZGMtZXZvbHV0aW9uLWNoaXAtc2V0IC5tZGMtZXZvbHV0aW9uLWNoaXAtc2V0X19jaGlwc3ttYXJnaW4tbGVmdDotOHB4O21hcmdpbi1yaWdodDowfVtkaXI9cnRsXSAubWRjLWV2b2x1dGlvbi1jaGlwLXNldCAubWRjLWV2b2x1dGlvbi1jaGlwLXNldF9fY2hpcHMsLm1kYy1ldm9sdXRpb24tY2hpcC1zZXQgLm1kYy1ldm9sdXRpb24tY2hpcC1zZXRfX2NoaXBzW2Rpcj1ydGxde21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0Oi04cHh9Lm1kYy1ldm9sdXRpb24tY2hpcC1zZXQgLm1kYy1ldm9sdXRpb24tY2hpcHttYXJnaW4tbGVmdDo4cHg7bWFyZ2luLXJpZ2h0OjB9W2Rpcj1ydGxdIC5tZGMtZXZvbHV0aW9uLWNoaXAtc2V0IC5tZGMtZXZvbHV0aW9uLWNoaXAsLm1kYy1ldm9sdXRpb24tY2hpcC1zZXQgLm1kYy1ldm9sdXRpb24tY2hpcFtkaXI9cnRsXXttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDo4cHh9Lm1kYy1ldm9sdXRpb24tY2hpcC1zZXQgLm1kYy1ldm9sdXRpb24tY2hpcHttYXJnaW4tdG9wOjRweDttYXJnaW4tYm90dG9tOjRweH0ubWF0LW1kYy1jaGlwLXNldCAubWRjLWV2b2x1dGlvbi1jaGlwLXNldF9fY2hpcHN7bWluLXdpZHRoOjEwMCV9Lm1hdC1tZGMtY2hpcC1zZXQtc3RhY2tlZHtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6ZmxleC1zdGFydH0ubWF0LW1kYy1jaGlwLXNldC1zdGFja2VkIC5tYXQtbWRjLWNoaXB7d2lkdGg6MTAwJX1pbnB1dC5tYXQtbWRjLWNoaXAtaW5wdXR7ZmxleDoxIDAgMTUwcHg7bWFyZ2luLWxlZnQ6OHB4fVtkaXI9cnRsXSBpbnB1dC5tYXQtbWRjLWNoaXAtaW5wdXR7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6OHB4fSJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFU0ZT17cHJvdmlkZTpYcix1c2VFeGlzdGluZzpXbigoKT0+ajRlKSxtdWx0aTohMH0sajRlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyB5QXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fb25Ub3VjaGVkPSgpPT57fSx0aGlzLl9vbkNoYW5nZT0oKT0+e30sdGhpcy5fZGVmYXVsdFJvbGU9Imxpc3Rib3giLHRoaXMuX2RlZmF1bHRPcHRpb25zPSRuKFJWLHtvcHRpb25hbDohMH0pLHRoaXMuX211bHRpcGxlPSExLHRoaXMuYXJpYU9yaWVudGF0aW9uPSJob3Jpem9udGFsIix0aGlzLl9zZWxlY3RhYmxlPSEwLHRoaXMuY29tcGFyZVdpdGg9KGUsaSk9PmU9PT1pLHRoaXMuX3JlcXVpcmVkPSExLHRoaXMuX2hpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3I9dGhpcy5fZGVmYXVsdE9wdGlvbnM/LmhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3I/PyExLHRoaXMuY2hhbmdlPW5ldyBGfWdldCBtdWx0aXBsZSgpe3JldHVybiB0aGlzLl9tdWx0aXBsZX1zZXQgbXVsdGlwbGUoZSl7dGhpcy5fbXVsdGlwbGU9dnQoZSksdGhpcy5fc3luY0xpc3Rib3hQcm9wZXJ0aWVzKCl9Z2V0IHNlbGVjdGVkKCl7bGV0IGU9dGhpcy5fY2hpcHMudG9BcnJheSgpLmZpbHRlcihpPT5pLnNlbGVjdGVkKTtyZXR1cm4gdGhpcy5tdWx0aXBsZT9lOmVbMF19Z2V0IHNlbGVjdGFibGUoKXtyZXR1cm4gdGhpcy5fc2VsZWN0YWJsZX1zZXQgc2VsZWN0YWJsZShlKXt0aGlzLl9zZWxlY3RhYmxlPXZ0KGUpLHRoaXMuX3N5bmNMaXN0Ym94UHJvcGVydGllcygpfWdldCByZXF1aXJlZCgpe3JldHVybiB0aGlzLl9yZXF1aXJlZH1zZXQgcmVxdWlyZWQoZSl7dGhpcy5fcmVxdWlyZWQ9dnQoZSl9Z2V0IGhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IoKXtyZXR1cm4gdGhpcy5faGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvcn1zZXQgaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvcihlKXt0aGlzLl9oaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yPXZ0KGUpLHRoaXMuX3N5bmNMaXN0Ym94UHJvcGVydGllcygpfWdldCBjaGlwU2VsZWN0aW9uQ2hhbmdlcygpe3JldHVybiB0aGlzLl9nZXRDaGlwU3RyZWFtKGU9PmUuc2VsZWN0aW9uQ2hhbmdlKX1nZXQgY2hpcEJsdXJDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2dldENoaXBTdHJlYW0oZT0+ZS5fb25CbHVyKX1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5fdmFsdWV9c2V0IHZhbHVlKGUpe3RoaXMud3JpdGVWYWx1ZShlKSx0aGlzLl92YWx1ZT1lfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3ZvaWQgMCE9PXRoaXMuX3BlbmRpbmdJbml0aWFsVmFsdWUmJlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pnt0aGlzLl9zZXRTZWxlY3Rpb25CeVZhbHVlKHRoaXMuX3BlbmRpbmdJbml0aWFsVmFsdWUsITEpLHRoaXMuX3BlbmRpbmdJbml0aWFsVmFsdWU9dm9pZCAwfSksdGhpcy5fY2hpcHMuY2hhbmdlcy5waXBlKGtuKG51bGwpLGl0KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3N5bmNMaXN0Ym94UHJvcGVydGllcygpfSksdGhpcy5jaGlwQmx1ckNoYW5nZXMucGlwZShpdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9PnRoaXMuX2JsdXIoKSksdGhpcy5jaGlwU2VsZWN0aW9uQ2hhbmdlcy5waXBlKGl0KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShlPT57dGhpcy5tdWx0aXBsZXx8dGhpcy5fY2hpcHMuZm9yRWFjaChpPT57aSE9PWUuc291cmNlJiZpLl9zZXRTZWxlY3RlZFN0YXRlKCExLCExLCExKX0pLGUuaXNVc2VySW5wdXQmJnRoaXMuX3Byb3BhZ2F0ZUNoYW5nZXMoKX0pfWZvY3VzKCl7aWYodGhpcy5kaXNhYmxlZClyZXR1cm47bGV0IGU9dGhpcy5fZ2V0Rmlyc3RTZWxlY3RlZENoaXAoKTtlJiYhZS5kaXNhYmxlZD9lLmZvY3VzKCk6dGhpcy5fY2hpcHMubGVuZ3RoPjA/dGhpcy5fa2V5TWFuYWdlci5zZXRGaXJzdEl0ZW1BY3RpdmUoKTp0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX13cml0ZVZhbHVlKGUpe3RoaXMuX2NoaXBzP3RoaXMuX3NldFNlbGVjdGlvbkJ5VmFsdWUoZSwhMSk6bnVsbCE9ZSYmKHRoaXMuX3BlbmRpbmdJbml0aWFsVmFsdWU9ZSl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLl9vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMuX29uVG91Y2hlZD1lfXNldERpc2FibGVkU3RhdGUoZSl7dGhpcy5kaXNhYmxlZD1lfV9zZXRTZWxlY3Rpb25CeVZhbHVlKGUsaT0hMCl7dGhpcy5fY2xlYXJTZWxlY3Rpb24oKSxBcnJheS5pc0FycmF5KGUpP2UuZm9yRWFjaChyPT50aGlzLl9zZWxlY3RWYWx1ZShyLGkpKTp0aGlzLl9zZWxlY3RWYWx1ZShlLGkpfV9ibHVyKCl7dGhpcy5kaXNhYmxlZHx8c2V0VGltZW91dCgoKT0+e3RoaXMuZm9jdXNlZHx8dGhpcy5fbWFya0FzVG91Y2hlZCgpfSl9X2tleWRvd24oZSl7OT09PWUua2V5Q29kZSYmc3VwZXIuX2FsbG93Rm9jdXNFc2NhcGUoKX1fbWFya0FzVG91Y2hlZCgpe3RoaXMuX29uVG91Y2hlZCgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfV9wcm9wYWdhdGVDaGFuZ2VzKCl7bGV0IGU9bnVsbDtlPUFycmF5LmlzQXJyYXkodGhpcy5zZWxlY3RlZCk/dGhpcy5zZWxlY3RlZC5tYXAoaT0+aS52YWx1ZSk6dGhpcy5zZWxlY3RlZD90aGlzLnNlbGVjdGVkLnZhbHVlOnZvaWQgMCx0aGlzLl92YWx1ZT1lLHRoaXMuY2hhbmdlLmVtaXQobmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5zb3VyY2U9dCx0aGlzLnZhbHVlPWV9fSh0aGlzLGUpKSx0aGlzLl9vbkNoYW5nZShlKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX1fY2xlYXJTZWxlY3Rpb24oZSl7dGhpcy5fY2hpcHMuZm9yRWFjaChpPT57aSE9PWUmJmkuZGVzZWxlY3QoKX0pfV9zZWxlY3RWYWx1ZShlLGkpe2xldCByPXRoaXMuX2NoaXBzLmZpbmQobz0+bnVsbCE9by52YWx1ZSYmdGhpcy5jb21wYXJlV2l0aChvLnZhbHVlLGUpKTtyZXR1cm4gciYmKGk/ci5zZWxlY3RWaWFJbnRlcmFjdGlvbigpOnIuc2VsZWN0KCkpLHJ9X3N5bmNMaXN0Ym94UHJvcGVydGllcygpe3RoaXMuX2NoaXBzJiZQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57dGhpcy5fY2hpcHMuZm9yRWFjaChlPT57ZS5fY2hpcExpc3RNdWx0aXBsZT10aGlzLm11bHRpcGxlLGUuY2hpcExpc3RTZWxlY3RhYmxlPXRoaXMuX3NlbGVjdGFibGUsZS5fY2hpcExpc3RIaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yPXRoaXMuaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvcixlLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pfSl9X2dldEZpcnN0U2VsZWN0ZWRDaGlwKCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy5zZWxlY3RlZCk/dGhpcy5zZWxlY3RlZC5sZW5ndGg/dGhpcy5zZWxlY3RlZFswXTp2b2lkIDA6dGhpcy5zZWxlY3RlZH1fc2tpcFByZWRpY2F0ZShlKXtyZXR1cm4hZS5pc0ludGVyYWN0aXZlfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PVhuKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LWNoaXAtbGlzdGJveCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihlLGkscil7aWYoMSZlJiZCbihyLEg0ZSw1KSwyJmUpe2xldCBvO2JlKG89dmUoKSkmJihpLl9jaGlwcz1vKX19LGhvc3RBdHRyczpbMSwibWRjLWV2b2x1dGlvbi1jaGlwLXNldCIsIm1hdC1tZGMtY2hpcC1saXN0Ym94Il0saG9zdFZhcnM6MTEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZBKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gaS5mb2N1cygpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX2JsdXIoKX0pKCJrZXlkb3duIixmdW5jdGlvbihvKXtyZXR1cm4gaS5fa2V5ZG93bihvKX0pLDImZSYmKHdvKCJ0YWJJbmRleCIsaS5lbXB0eT8tMTppLnRhYkluZGV4KSxCZSgicm9sZSIsaS5yb2xlKSgiYXJpYS1kZXNjcmliZWRieSIsaS5fYXJpYURlc2NyaWJlZGJ5fHxudWxsKSgiYXJpYS1yZXF1aXJlZCIsaS5yb2xlP2kucmVxdWlyZWQ6bnVsbCkoImFyaWEtZGlzYWJsZWQiLGkuZGlzYWJsZWQudG9TdHJpbmcoKSkoImFyaWEtbXVsdGlzZWxlY3RhYmxlIixpLm11bHRpcGxlKSgiYXJpYS1vcmllbnRhdGlvbiIsaS5hcmlhT3JpZW50YXRpb24pLG50KCJtYXQtbWRjLWNoaXAtbGlzdC1kaXNhYmxlZCIsaS5kaXNhYmxlZCkoIm1hdC1tZGMtY2hpcC1saXN0LXJlcXVpcmVkIixpLnJlcXVpcmVkKSl9LGlucHV0czp7dGFiSW5kZXg6InRhYkluZGV4IixtdWx0aXBsZToibXVsdGlwbGUiLGFyaWFPcmllbnRhdGlvbjpbImFyaWEtb3JpZW50YXRpb24iLCJhcmlhT3JpZW50YXRpb24iXSxzZWxlY3RhYmxlOiJzZWxlY3RhYmxlIixjb21wYXJlV2l0aDoiY29tcGFyZVdpdGgiLHJlcXVpcmVkOiJyZXF1aXJlZCIsaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvcjoiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsdmFsdWU6InZhbHVlIn0sb3V0cHV0czp7Y2hhbmdlOiJjaGFuZ2UifSxmZWF0dXJlczpbVnQoW1U0ZV0pLFhlXSxuZ0NvbnRlbnRTZWxlY3RvcnM6R25lLGRlY2xzOjIsdmFyczowLGNvbnN0czpbWyJyb2xlIiwicHJlc2VudGF0aW9uIiwxLCJtZGMtZXZvbHV0aW9uLWNoaXAtc2V0X19jaGlwcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGZuKCksZigwLCJkaXYiLDApLFR0KDEpLGcoKSl9LHN0eWxlczpbIi5tZGMtZXZvbHV0aW9uLWNoaXAtc2V0e2Rpc3BsYXk6ZmxleH0ubWRjLWV2b2x1dGlvbi1jaGlwLXNldDpmb2N1c3tvdXRsaW5lOm5vbmV9Lm1kYy1ldm9sdXRpb24tY2hpcC1zZXRfX2NoaXBze2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6d3JhcDttaW4td2lkdGg6MH0ubWRjLWV2b2x1dGlvbi1jaGlwLXNldC0tb3ZlcmZsb3cgLm1kYy1ldm9sdXRpb24tY2hpcC1zZXRfX2NoaXBze2ZsZXgtZmxvdzpub3dyYXB9Lm1kYy1ldm9sdXRpb24tY2hpcC1zZXQgLm1kYy1ldm9sdXRpb24tY2hpcC1zZXRfX2NoaXBze21hcmdpbi1sZWZ0Oi04cHg7bWFyZ2luLXJpZ2h0OjB9W2Rpcj1ydGxdIC5tZGMtZXZvbHV0aW9uLWNoaXAtc2V0IC5tZGMtZXZvbHV0aW9uLWNoaXAtc2V0X19jaGlwcywubWRjLWV2b2x1dGlvbi1jaGlwLXNldCAubWRjLWV2b2x1dGlvbi1jaGlwLXNldF9fY2hpcHNbZGlyPXJ0bF17bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6LThweH0ubWRjLWV2b2x1dGlvbi1jaGlwLXNldCAubWRjLWV2b2x1dGlvbi1jaGlwe21hcmdpbi1sZWZ0OjhweDttYXJnaW4tcmlnaHQ6MH1bZGlyPXJ0bF0gLm1kYy1ldm9sdXRpb24tY2hpcC1zZXQgLm1kYy1ldm9sdXRpb24tY2hpcCwubWRjLWV2b2x1dGlvbi1jaGlwLXNldCAubWRjLWV2b2x1dGlvbi1jaGlwW2Rpcj1ydGxde21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjhweH0ubWRjLWV2b2x1dGlvbi1jaGlwLXNldCAubWRjLWV2b2x1dGlvbi1jaGlwe21hcmdpbi10b3A6NHB4O21hcmdpbi1ib3R0b206NHB4fS5tYXQtbWRjLWNoaXAtc2V0IC5tZGMtZXZvbHV0aW9uLWNoaXAtc2V0X19jaGlwc3ttaW4td2lkdGg6MTAwJX0ubWF0LW1kYy1jaGlwLXNldC1zdGFja2Vke2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fS5tYXQtbWRjLWNoaXAtc2V0LXN0YWNrZWQgLm1hdC1tZGMtY2hpcHt3aWR0aDoxMDAlfWlucHV0Lm1hdC1tZGMtY2hpcC1pbnB1dHtmbGV4OjEgMCAxNTBweDttYXJnaW4tbGVmdDo4cHh9W2Rpcj1ydGxdIGlucHV0Lm1hdC1tZGMtY2hpcC1pbnB1dHttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDo4cHh9Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCkscW5lPShoZyhjbGFzcyBleHRlbmRzIHlBe2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxhLHMpe3N1cGVyKHQsZSxpKSx0aGlzLl9kZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXI9cix0aGlzLl9wYXJlbnRGb3JtPW8sdGhpcy5fcGFyZW50Rm9ybUdyb3VwPWEsdGhpcy5uZ0NvbnRyb2w9cyx0aGlzLnN0YXRlQ2hhbmdlcz1uZXcgRWV9fSksKCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe3Byb3ZpZGVyczpbRWgse3Byb3ZpZGU6UlYsdXNlVmFsdWU6e3NlcGFyYXRvcktleUNvZGVzOlsxM119fV0saW1wb3J0czpbZG4sRGUsX2EsZG5dfSksbn0pKCkpLFc0ZT1bImZpbHRlck1vZGFsVGVtcGxhdGUiXTtmdW5jdGlvbiBxNGUobix0KXtpZigxJm4pe2xldCBlPVRlKCk7ZigwLCJtYXQtY2hpcCIsNSksQSgicmVtb3ZlZCIsZnVuY3Rpb24oKXtsZXQgbz1uZShlKS4kaW1wbGljaXQ7cmV0dXJuIGllKHcoMikucmVtb3ZlSHBhcmFtRmlsdGVyLmVtaXQobykpfSkoImNsaWNrIixmdW5jdGlvbihyKXtsZXQgYT1uZShlKS4kaW1wbGljaXQ7cmV0dXJuIGllKHcoMikub3BlbkZpbHRlck1lbnUocixhKSl9KSxUKDEpLGYoMiwiYnV0dG9uIiw2KSxrKDMsIm1hdC1pY29uIiw3KSxnKCkoKX1pZigyJm4pe2xldCBlPXQuJGltcGxpY2l0O3YoMSksVmUoIiAiLGUsIiAiKX19ZnVuY3Rpb24gWDRlKG4sdCl7aWYoMSZuJiYoZigwLCJkaXYiLDIpLGsoMSwibWF0LWljb24iLDMpLGYoMiwibWF0LWNoaXAtc2V0IiksUygzLHE0ZSw0LDEsIm1hdC1jaGlwIiw0KSxnKCkoKSksMiZuKXtsZXQgZT13KCk7digzKSxiKCJuZ0Zvck9mIixlLmZpbHRlcnMua2V5cygpKX19ZnVuY3Rpb24gWTRlKG4sdCl7aWYoMSZuKXtsZXQgZT1UZSgpO2YoMCwidGItZGF0YS10YWJsZS1maWx0ZXIiLDgpLEEoImludGVydmFsRmlsdGVyQ2hhbmdlZCIsZnVuY3Rpb24ocil7cmV0dXJuIG5lKGUpLGllKHcoKS5lbWl0SW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkKHIpKX0pKCJkaXNjcmV0ZUZpbHRlckNoYW5nZWQiLGZ1bmN0aW9uKHIpe3JldHVybiBuZShlKSxpZSh3KCkuZW1pdERpc2NyZXRlRmlsdGVyQ2hhbmdlZChyKSl9KSgiaW5jbHVkZVVuZGVmaW5lZFRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIG5lKGUpLGllKHcoKS5lbWl0SW5jbHVkZVVuZGVmaW5lZFRvZ2dsZWQoKSl9KSxnKCl9MiZuJiZiKCJmaWx0ZXIiLHcoKS5zZWxlY3RlZEZpbHRlcil9dmFyIFhuZT0oKCk9PntjbGFzcyBue2dldCBzZWxlY3RlZEZpbHRlck5hbWUoKXtyZXR1cm4gdGhpcy5pbnRlcm5hbFNlbGVjdGVkRmlsdGVyTmFtZX1zZXQgc2VsZWN0ZWRGaWx0ZXJOYW1lKGUpe3RoaXMuaW50ZXJuYWxTZWxlY3RlZEZpbHRlck5hbWU9ZX1nZXQgc2VsZWN0ZWRGaWx0ZXIoKXtyZXR1cm4gdGhpcy5maWx0ZXJzLmdldCh0aGlzLnNlbGVjdGVkRmlsdGVyTmFtZSl9Y29uc3RydWN0b3IoZSxpKXt0aGlzLmN1c3RvbU1vZGFsPWUsdGhpcy52aWV3Q29udGFpbmVyUmVmPWksdGhpcy5yZW1vdmVIcGFyYW1GaWx0ZXI9bmV3IEYsdGhpcy5hZGRGaWx0ZXI9bmV3IEYsdGhpcy5pbnRlcm5hbFNlbGVjdGVkRmlsdGVyTmFtZT0iIn1vcGVuRmlsdGVyTWVudShlLGkpe3RoaXMuc2VsZWN0ZWRGaWx0ZXJOYW1lPWksdGhpcy5jdXN0b21Nb2RhbC5jcmVhdGVOZXh0VG9FbGVtZW50KHRoaXMuZmlsdGVyTW9kYWxUZW1wbGF0ZSxlLnRhcmdldC5jbG9zZXN0KCJtYXQtY2hpcCIpLHRoaXMudmlld0NvbnRhaW5lclJlZil9ZW1pdEludGVydmFsRmlsdGVyQ2hhbmdlZChlKXshdGhpcy5zZWxlY3RlZEZpbHRlcnx8dGhpcy5hZGRGaWx0ZXIuZW1pdCh7bmFtZTp0aGlzLnNlbGVjdGVkRmlsdGVyTmFtZSx2YWx1ZTp7Li4udGhpcy5zZWxlY3RlZEZpbHRlcixmaWx0ZXJMb3dlclZhbHVlOmUubG93ZXJWYWx1ZSxmaWx0ZXJVcHBlclZhbHVlOmUudXBwZXJWYWx1ZX19KX1lbWl0RGlzY3JldGVGaWx0ZXJDaGFuZ2VkKGUpe2lmKCF0aGlzLnNlbGVjdGVkRmlsdGVyKXJldHVybjtsZXQgaT1uZXcgU2V0KFsuLi50aGlzLnNlbGVjdGVkRmlsdGVyLmZpbHRlclZhbHVlc10pO2kuaGFzKGUpP2kuZGVsZXRlKGUpOmkuYWRkKGUpLHRoaXMuYWRkRmlsdGVyLmVtaXQoe25hbWU6dGhpcy5zZWxlY3RlZEZpbHRlck5hbWUsdmFsdWU6ey4uLnRoaXMuc2VsZWN0ZWRGaWx0ZXIsZmlsdGVyVmFsdWVzOkFycmF5LmZyb20oaSl9fSl9ZW1pdEluY2x1ZGVVbmRlZmluZWRUb2dnbGVkKCl7IXRoaXMuc2VsZWN0ZWRGaWx0ZXJ8fHRoaXMuYWRkRmlsdGVyLmVtaXQoe25hbWU6dGhpcy5zZWxlY3RlZEZpbHRlck5hbWUsdmFsdWU6ey4uLnRoaXMuc2VsZWN0ZWRGaWx0ZXIsaW5jbHVkZVVuZGVmaW5lZDohdGhpcy5zZWxlY3RlZEZpbHRlci5pbmNsdWRlVW5kZWZpbmVkfX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKHVBKSxDKGVpKSl9LG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1siZmlsdGVyYmFyLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJlVlKFc0ZSw1LG9pKSwyJmUpe2xldCByO2JlKHI9dmUoKSkmJihpLmZpbHRlck1vZGFsVGVtcGxhdGU9ci5maXJzdCl9fSxpbnB1dHM6e2ZpbHRlcnM6ImZpbHRlcnMifSxvdXRwdXRzOntyZW1vdmVIcGFyYW1GaWx0ZXI6InJlbW92ZUhwYXJhbUZpbHRlciIsYWRkRmlsdGVyOiJhZGRGaWx0ZXIifSxkZWNsczozLHZhcnM6MSxjb25zdHM6W1siY2xhc3MiLCJmaWx0ZXJiYXIiLDQsIm5nSWYiXSxbImZpbHRlck1vZGFsVGVtcGxhdGUiLCIiXSxbMSwiZmlsdGVyYmFyIl0sWyJzdmdJY29uIiwiZmlsdGVyX2xpc3RfMjRweCIsMSwiZmlsdGVyYmFyLWljb24iXSxbImNsYXNzIiwiZmlsdGVyYmFyLWNoaXAiLDMsInJlbW92ZWQiLCJjbGljayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImZpbHRlcmJhci1jaGlwIiwzLCJyZW1vdmVkIiwiY2xpY2siXSxbIm1hdENoaXBSZW1vdmUiLCIiXSxbInN2Z0ljb24iLCJjbG9zZV8yNHB4Il0sWzMsImZpbHRlciIsImludGVydmFsRmlsdGVyQ2hhbmdlZCIsImRpc2NyZXRlRmlsdGVyQ2hhbmdlZCIsImluY2x1ZGVVbmRlZmluZWRUb2dnbGVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoUygwLFg0ZSw0LDEsImRpdiIsMCksUygxLFk0ZSwxLDEsIm5nLXRlbXBsYXRlIixudWxsLDEsanQpKSwyJmUmJmIoIm5nSWYiLGkuZmlsdGVycy5zaXplKX0sZGVwZW5kZW5jaWVzOltubixOZSxoQSxibixlQyxXbmUseUFdLHN0eWxlczpbIi5maWx0ZXJiYXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzoxMHB4IDE0cHggMHB4IDE0cHh9LmZpbHRlcmJhcltfbmdjb250ZW50LSVDT01QJV0gICAuZmlsdGVyYmFyLWljb25bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1yaWdodDoxMHB4fS5maWx0ZXJiYXJbX25nY29udGVudC0lQ09NUCVdICAgLmZpbHRlcmJhci1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MjRweH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFluZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmZpbHRlcnMkPXRoaXMuc3RvcmUuc2VsZWN0KE1jLmdldERhc2hib2FyZEhwYXJhbUZpbHRlck1hcCksdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBFZX1hZGRIcGFyYW1GaWx0ZXIoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChyby5kYXNoYm9hcmRIcGFyYW1GaWx0ZXJBZGRlZCh7bmFtZTplLm5hbWUsZmlsdGVyOmUudmFsdWV9KSl9cmVtb3ZlSHBhcmFtRmlsdGVyKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2gocm8uZGFzaGJvYXJkSHBhcmFtRmlsdGVyUmVtb3ZlZCh7bmFtZTplfSkpfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhJZSkpfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbImZpbHRlcmJhciJdXSxkZWNsczoyLHZhcnM6Myxjb25zdHM6W1szLCJmaWx0ZXJzIiwicmVtb3ZlSHBhcmFtRmlsdGVyIiwiYWRkRmlsdGVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZigwLCJmaWx0ZXJiYXItY29tcG9uZW50IiwwKSxBKCJyZW1vdmVIcGFyYW1GaWx0ZXIiLGZ1bmN0aW9uKG8pe3JldHVybiBpLnJlbW92ZUhwYXJhbUZpbHRlcihvKX0pKCJhZGRGaWx0ZXIiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmFkZEhwYXJhbUZpbHRlcihvKX0pLFUoMSwiYXN5bmMiKSxnKCkpLDImZSYmYigiZmlsdGVycyIsRygxLDEsaS5maWx0ZXJzJCkpfSxkZXBlbmRlbmNpZXM6W1huZSxjdF0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxLNGU9WyJyZWdleFN0cmluZ0lucHV0Il07ZnVuY3Rpb24gSjRlKG4sdCl7MSZuJiYoZigwLCJtYXQtb3B0aW9uIiwzKSxUKDEsIkV4cGVyaW1lbnQgTmFtZSIpLGcoKSksMiZuJiZaaSgidmFsdWUiLHcoKS5SRUdFWF9CWV9FWFBfU1RSKX1mdW5jdGlvbiAkNGUobix0KXtpZigxJm4mJihHdCgwKSxmKDEsImxpIiwyNSksVCgyKSxnKCksV3QoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdDt2KDEpLGIoInRpdGxlIixlLm5hbWUpLHYoMSksa3QoZS5uYW1lKX19ZnVuY3Rpb24gZUhlKG4sdCl7aWYoMSZuJiYoZigwLCJsaSIsMjYpKDEsImVtIiksVCgyKSxVKDMsIm51bWJlciIpLGcoKSgpKSwyJm4pe2xldCBlPXcoKS4kaW1wbGljaXQ7digyKSxWZSgiYW5kICIsRygzLDEsZS5ydW5zLmxlbmd0aC01KSwiIG1vcmUiKX19ZnVuY3Rpb24gdEhlKG4sdCl7MSZuJiYoZigwLCJsaSIsMjcpKDEsImVtIiksVCgyLCJObyBydW5zIGFyZSBpbiB0aGUgZ3JvdXAiKSxnKCkoKSl9dmFyIG5IZT1mdW5jdGlvbihuKXtyZXR1cm57Ym9yZGVyQ29sb3I6bn19LGlIZT1mdW5jdGlvbihuKXtyZXR1cm57YmFja2dyb3VuZENvbG9yOm59fTtmdW5jdGlvbiBySGUobix0KXtpZigxJm4mJihmKDAsInVsIiwxOSkoMSwibGkiKSgyLCJsYWJlbCIpLGsoMywic3BhbiIsMjApLGYoNCwiY29kZSIsMjEpLFQoNSksZygpKCksZig2LCJ1bCIpLFMoNywkNGUsMywyLCJuZy1jb250YWluZXIiLDIyKSxVKDgsInNsaWNlIiksUyg5LGVIZSw0LDMsImxpIiwyMyksUygxMCx0SGUsMywwLCJsaSIsMjQpLGcoKSgpKCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQ7YigibmdTdHlsZSIsVW4oMTEsbkhlLGUuY29sb3IpKSx2KDMpLGIoIm5nU3R5bGUiLFVuKDEzLGlIZSxlLmNvbG9yKSksdigxKSxiKCJ0aXRsZSIsZS5ncm91cElkKSx2KDEpLGt0KGUuZ3JvdXBJZCksdigyKSxiKCJuZ0Zvck9mIixrayg4LDcsZS5ydW5zLDAsNSkpLHYoMiksYigibmdJZiIsZS5ydW5zLmxlbmd0aD41KSx2KDEpLGIoIm5nSWYiLDA9PT1lLnJ1bnMubGVuZ3RoKX19ZnVuY3Rpb24gb0hlKG4sdCl7aWYoMSZuJiYoZigwLCJkaXYiLDE3KSxTKDEsckhlLDExLDE1LCJ1bCIsMTgpLGcoKSksMiZuKXtsZXQgZT13KDIpO3YoMSksYigibmdGb3JPZiIsZS5jb2xvclJ1blBhaXJMaXN0KX19ZnVuY3Rpb24gYUhlKG4sdCl7aWYoMSZuJiYoZigwLCJkaXYiLDI4KSxUKDEsIiBUaGVyZSBhcmUgbm8gcnVucyBtYXRjaGluZyB0aGUgcmVnZXgsICIpLGYoMiwiY29kZSIpLFQoMyksZygpLFQoNCwiLiBQbGVhc2UgY2hlY2sgaWYgeW91ciByZWdleCBzdHJpbmcgaXMgY29ycmVjdC4gIiksZygpKSwyJm4pe2xldCBlPXcoMik7digzKSxWZSgiLyIsZS5yZWdleFN0cmluZywiLyIpfX1mdW5jdGlvbiBzSGUobix0KXtpZigxJm4mJihmKDAsImRpdiIsMTMpKDEsImg0IiksVCgyLCJDb2xvciBncm91cCBwcmV2aWV3IiksZygpLGYoMywiZGl2IiwxNCksUyg0LG9IZSwyLDEsImRpdiIsMTUpLFMoNSxhSGUsNSwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwxNixqdCksZygpKCkpLDImbil7bGV0IGU9c3QoNiksaT13KCk7dig0KSxiKCJuZ0lmIixpLmNvbG9yUnVuUGFpckxpc3QubGVuZ3RoKSgibmdJZkVsc2UiLGUpfX12YXIgUW5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLmRpYWxvZ1JlZj1lLHRoaXMuaG9zdEVsUmVmPWksdGhpcy5vblNhdmU9bmV3IEYsdGhpcy5yZWdleElucHV0T25DaGFuZ2U9bmV3IEYsdGhpcy5yZWdleFR5cGVPbkNoYW5nZT1uZXcgRix0aGlzLlJFR0VYX0JZX1JVTl9TVFI9InJlZ2V4X2J5X3J1biIsdGhpcy5SRUdFWF9CWV9FWFBfU1RSPSJyZWdleF9ieV9leHAiLHRoaXMudGltZU91dElkPTAsdGhpcy5yZWdleFR5cGVGbj1fcyh0aGlzLmludGVybmFsUmVnZXhUeXBlRm4uYmluZCh0aGlzKSl9aW50ZXJuYWxSZWdleFR5cGVGbihlKXtyZXR1cm4gZT09PVluLlJFR0VYX0JZX0VYUD90aGlzLlJFR0VYX0JZX0VYUF9TVFI6dGhpcy5SRUdFWF9CWV9SVU5fU1RSfXJlc2V0Rm9jdXMoKXt0aGlzLmhvc3RFbFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpfHx0aGlzLnJlZ2V4U3RyaW5nSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpfW9uRW50ZXIoKXt0aGlzLm9uU2F2ZUNsaWNrKCksdGhpcy5kaWFsb2dSZWYuY2xvc2UoKX1vblNhdmVDbGljaygpe3RoaXMub25TYXZlLmVtaXQoKX1maWxsRXhhbXBsZShlKXt0aGlzLnJlZ2V4U3RyaW5nPWUsdGhpcy5yZWdleElucHV0Q2hhbmdlKGUpfXJlZ2V4SW5wdXRDaGFuZ2UoZSl7dGhpcy5yZWdleElucHV0T25DaGFuZ2UuZW1pdChlKX1oYW5kbGVGb2N1c091dCgpe2NsZWFyVGltZW91dCh0aGlzLnRpbWVPdXRJZCksdGhpcy50aW1lT3V0SWQ9c2V0VGltZW91dCh0aGlzLnJlc2V0Rm9jdXMuYmluZCh0aGlzKSwwKX1yZWdleFR5cGVDaGFuZ2UoZSl7dGhpcy5yZWdleFR5cGVPbkNoYW5nZS5lbWl0KGUudmFsdWU9PT10aGlzLlJFR0VYX0JZX1JVTl9TVFI/WW4uUkVHRVg6WW4uUkVHRVhfQllfRVhQKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhWbCksQyh4ZSkpfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbInJlZ2V4LWVkaXQtZGlhbG9nLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJlVlKEs0ZSw3KSwyJmUpe2xldCByO2JlKHI9dmUoKSkmJihpLnJlZ2V4U3RyaW5nSW5wdXQ9ci5maXJzdCl9fSxpbnB1dHM6e3JlZ2V4U3RyaW5nOiJyZWdleFN0cmluZyIsY29sb3JSdW5QYWlyTGlzdDoiY29sb3JSdW5QYWlyTGlzdCIsc2VsZWN0ZWRHcm91cEJ5OiJzZWxlY3RlZEdyb3VwQnkiLGVuYWJsZUNvbG9yQnlFeHBlcmltZW50OiJlbmFibGVDb2xvckJ5RXhwZXJpbWVudCJ9LG91dHB1dHM6e29uU2F2ZToib25TYXZlIixyZWdleElucHV0T25DaGFuZ2U6InJlZ2V4SW5wdXRPbkNoYW5nZSIscmVnZXhUeXBlT25DaGFuZ2U6InJlZ2V4VHlwZU9uQ2hhbmdlIn0sZGVjbHM6MzcsdmFyczo1LGNvbnN0czpmdW5jdGlvbigpe2xldCB0O3JldHVybiB0PSRsb2NhbGl6ZWA6Q29sb3IgUnVucyBieSBSZWdleCBRdWVyeeKQnzE1ZWQ5ZjZmZDJkNDkwNmE0ODAzZmMxMjU1ZGUzYzVkYjJjNTY1MzDikJ85MDg4OTg1MTEzOTYwMzEyODA4OkNvbG9yIFJ1bnMgYnkgUmVnZXggUXVlcnlgLFtbMSwicmVnZXgtZWRpdC1kaWFsb2ciLDMsImZvY3Vzb3V0Il0sWyJtYXQtZGlhbG9nLXRpdGxlIiwiIl0sWzMsInZhbHVlIiwic2VsZWN0aW9uQ2hhbmdlIl0sWzMsInZhbHVlIl0sWzMsInZhbHVlIiw0LCJuZ0lmIl0sWyJtYXRJbnB1dCIsIiIsImFyaWEtbGFiZWwiLHQsImNka0ZvY3VzSW5pdGlhbCIsIiIsMywidmFsdWUiLCJrZXlkb3duLmVudGVyIiwiaW5wdXQiXSxbInJlZ2V4U3RyaW5nSW5wdXQiLCIiXSxbMSwiZXhhbXBsZS1kZXRhaWxzIl0sWzMsImNsaWNrIl0sWyJjbGFzcyIsImdyb3VwLWNvbnRhaW5lciIsNCwibmdJZiJdLFsibWF0LWRpYWxvZy1hY3Rpb25zIiwiIiwiYWxpZ24iLCJlbmQiXSxbIm1hdC1idXR0b24iLCIiLCJtYXQtZGlhbG9nLWNsb3NlIiwiIl0sWyJtYXQtcmFpc2VkLWJ1dHRvbiIsIiIsImNvbG9yIiwicHJpbWFyeSIsIm1hdC1kaWFsb2ctY2xvc2UiLCIiLDEsInNhdmUtYnV0dG9uIiwzLCJjbGljayJdLFsxLCJncm91cC1jb250YWluZXIiXSxbMSwiZ3JvdXBpbmctcHJldmlldyJdLFsiY2xhc3MiLCJtYXRjaC1jb250YWluZXIiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsiZW1wdHkiLCIiXSxbMSwibWF0Y2gtY29udGFpbmVyIl0sWyJjbGFzcyIsImdyb3VwIiwzLCJuZ1N0eWxlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiZ3JvdXAiLDMsIm5nU3R5bGUiXSxbMSwiY29sb3Itc3dhdGNoIiwzLCJuZ1N0eWxlIl0sWzEsImdyb3VwLWlkIiwzLCJ0aXRsZSJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwibW9yZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJuby1tYXRjaCIsNCwibmdJZiJdLFszLCJ0aXRsZSJdLFsxLCJtb3JlIl0sWzEsIm5vLW1hdGNoIl0sWzEsIndhcm5pbmciXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZigwLCJkaXYiLDApLEEoImZvY3Vzb3V0IixmdW5jdGlvbigpe3JldHVybiBpLmhhbmRsZUZvY3VzT3V0KCl9KSxmKDEsImgxIiwxKSxUKDIsIkNvbG9yIHJ1bnMgYnkgcmVnZXgiKSxnKCksZigzLCJtYXQtZGlhbG9nLWNvbnRlbnQiKSg0LCJwIiksVCg1LCJFbnRlciBhIHJlZ2V4IHdpdGggY2FwdHVyaW5nIGdyb3VwcyB0byBtYXRjaCBhZ2FpbnN0IHJ1biBuYW1lczoiKSxnKCksZig2LCJtYXQtZm9ybS1maWVsZCIpKDcsIm1hdC1sYWJlbCIpLFQoOCwiUmVnZXggdHlwZSIpLGcoKSxmKDksIm1hdC1zZWxlY3QiLDIpLEEoInNlbGVjdGlvbkNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkucmVnZXhUeXBlQ2hhbmdlKG8pfSksZigxMCwibWF0LW9wdGlvbiIsMyksVCgxMSwiUnVuIE5hbWUiKSxnKCksUygxMixKNGUsMiwxLCJtYXQtb3B0aW9uIiw0KSxnKCkoKSxmKDEzLCJtYXQtZm9ybS1maWVsZCIpKDE0LCJpbnB1dCIsNSw2KSxBKCJrZXlkb3duLmVudGVyIixmdW5jdGlvbigpe3JldHVybiBpLm9uRW50ZXIoKX0pKCJpbnB1dCIsZnVuY3Rpb24obyl7cmV0dXJuIGkucmVnZXhJbnB1dENoYW5nZShvLnRhcmdldC52YWx1ZSl9KSxnKCkoKSgpLGYoMTYsImRpdiIsNykoMTcsInAiKSxUKDE4LCcgRWFjaCBtYXRjaGluZyBydW4gd2lsbCBiZSBhc3NpZ25lZCBhIGNvbG9yIGJhc2VkIG9uIHRoZSAia2V5IiBmb3JtZWQgYnkgaXRzIG1hdGNoZXMgdG8gdGhlIGNhcHR1cmluZyBncm91cHMuICcpLGsoMTksImJyIiksZigyMCwiYnV0dG9uIiw4KSxBKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5maWxsRXhhbXBsZSgiKHRyYWlufGV2YWwpIil9KSxUKDIxLCIgVHJ5ICIpLGYoMjIsImNvZGUiKSxUKDIzLCIodHJhaW58ZXZhbCkiKSxnKCkoKSxUKDI0LCIgdG8gYXNzaWduIGFsbCBydW5zIGNvbnRhaW5pbmcgIiksZigyNSwiY29kZSIpLFQoMjYsInRyYWluIiksZygpLFQoMjcsIiB0byBvbmUgY29sb3IgYW5kIGFsbCBydW5zIGNvbnRhaW5pbmcgIiksZigyOCwiY29kZSIpLFQoMjksImV2YWwiKSxnKCksVCgzMCwiIHRvIGFub3RoZXIgY29sb3IuICIpLGcoKSgpLFMoMzEsc0hlLDcsMiwiZGl2Iiw5KSxmKDMyLCJkaXYiLDEwKSgzMywiYnV0dG9uIiwxMSksVCgzNCwiQ2FuY2VsIiksZygpLGYoMzUsImJ1dHRvbiIsMTIpLEEoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uU2F2ZUNsaWNrKCl9KSxUKDM2LCIgU2F2ZSAiKSxnKCkoKSgpKSwyJmUmJih2KDkpLGIoInZhbHVlIixpLnJlZ2V4VHlwZUZuKGkuc2VsZWN0ZWRHcm91cEJ5KSksdigxKSxaaSgidmFsdWUiLGkuUkVHRVhfQllfUlVOX1NUUiksdigyKSxiKCJuZ0lmIixpLmVuYWJsZUNvbG9yQnlFeHBlcmltZW50KSx2KDIpLFppKCJ2YWx1ZSIsaS5yZWdleFN0cmluZyksdigxNyksYigibmdJZiIsaS5yZWdleFN0cmluZykpfSxkZXBlbmRlbmNpZXM6W25uLE5lLE1mLGtpLFoxLEM5LEsxLEoxLHF1LFBjLG5sLFd1LGphLEtqLFVzXSxzdHlsZXM6WyIuZXhhbXBsZS1kZXRhaWxzW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjE2cHh9LmV4YW1wbGUtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKTtwYWRkaW5nOjA7Ym9yZGVyOm5vbmU7Y3Vyc29yOnBvaW50ZXI7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtjb2xvcjojMTk3NmQyfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5leGFtcGxlLWRldGFpbHNbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmV4YW1wbGUtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM0MmE1ZjV9LmV4YW1wbGUtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVdOnZpc2l0ZWR7Y29sb3I6IzdiMWZhMn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZXhhbXBsZS1kZXRhaWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV06dmlzaXRlZCwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmV4YW1wbGUtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVdOnZpc2l0ZWR7Y29sb3I6I2JhNjhjOH0uZ3JvdXAtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MTZweH0uZ3JvdXAtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tYm90dG9tOjE2cHh9Lmdyb3VwLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAud2FybmluZ1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTtmb250LXNpemU6LjllbX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC53YXJuaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAud2FybmluZ1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Lmdyb3VwaW5nLXByZXZpZXdbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjttYXgtaGVpZ2h0OjUwdmg7b3ZlcmZsb3cteTphdXRvO3BhZGRpbmc6MTZweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBpbmctcHJldmlld1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cGluZy1wcmV2aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICM1NTV9Lm1hdGNoLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6ZmxleC1zdGFydDtkaXNwbGF5OmdyaWQ7ZmxleC13cmFwOndyYXA7Z2FwOjEwcHg7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCgyLCBtaW5tYXgoNTAlLCAxZnIpKX0uY29sb3Itc3dhdGNoW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItcmFkaXVzOjUwJTtib3gtc2hhZG93OjAgMCAycHggIzAwMDtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTVweDt3aWR0aDoxNXB4fXVsW19uZ2NvbnRlbnQtJUNPTVAlXXtsaXN0LXN0eWxlLXR5cGU6bm9uZTtwYWRkaW5nOjB9bWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9Lmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICNlYmViZWI7Ym9yZGVyLXJhZGl1czozcHg7bWFyZ2luOjA7cGFkZGluZzoxNnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjNTU1fS5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICBsYWJlbFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpncmlkO2dhcDoxMHB4O2dyaWQtdGVtcGxhdGUtY29sdW1uczptYXgtY29udGVudCBhdXRvO3BhZGRpbmc6MTZweCAwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICBsYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICBsYWJlbFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX0uZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgbGFiZWxbX25nY29udGVudC0lQ09NUCVdICAgLmdyb3VwLWlkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6Ljk1ZW07b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfS5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICB1bFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOi45ZW19Lmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHVsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGxpW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9Lmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tb3JlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uby1tYXRjaFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTttYXJnaW4tdG9wOjE2cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tb3JlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tb3JlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgLm5vLW1hdGNoW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uby1tYXRjaFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxabmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5zdG9yZT1lLHRoaXMuZGlhbG9nUmVmPWksdGhpcy5leHBOYW1lQnlFeHBJZCQ9dGhpcy5zdG9yZS5zZWxlY3QoeXUpLHRoaXMuZW5hYmxlQ29sb3JCeUV4cGVyaW1lbnQkPXRoaXMuc3RvcmUuc2VsZWN0KEQ2KSx0aGlzLnRlbnRhdGl2ZVJlZ2V4U3RyaW5nJD1uZXcgRWUsdGhpcy50ZW50YXRpdmVSZWdleFR5cGUkPW5ldyBFZSx0aGlzLmdyb3VwQnlSZWdleFN0cmluZyQ9aXMoKCk9PnRuKHRoaXMuc3RvcmUuc2VsZWN0KHkxKS5waXBlKEx0KDEpKSx0aGlzLnRlbnRhdGl2ZVJlZ2V4U3RyaW5nJCkpLnBpcGUoa24oIiIpLERhKDEpKSx0aGlzLmdyb3VwQnlSZWdleFR5cGUkPXRuKHRoaXMuc3RvcmUuc2VsZWN0KER2KS5waXBlKEx0KDEpLHEobz0+by5rZXkpKSx0aGlzLnRlbnRhdGl2ZVJlZ2V4VHlwZSQpLnBpcGUoa24oWW4uUkVHRVgpLE9lKG89Pm89PT1Zbi5SRUdFWHx8bz09PVluLlJFR0VYX0JZX0VYUCksRGEoMSkpLHRoaXMuY29sb3JSdW5QYWlyTGlzdCQ9aXMoKCk9PnRoaXMuZ3JvdXBCeVJlZ2V4U3RyaW5nJC5waXBlKENyKDUwMCksT2Uobz0+e3RyeXtsZXQgYT1uZXcgUmVnRXhwKG8pO3JldHVybiBCb29sZWFuKGEpfWNhdGNoe3JldHVybiExfX0pLFZpKHRoaXMuZ3JvdXBCeVJlZ2V4VHlwZSQsdGhpcy5hbGxSdW5zJCx0aGlzLnJ1bklkVG9FaWQkLHRoaXMuZXhwTmFtZUJ5RXhwSWQkLHRoaXMuc3RvcmUuc2VsZWN0KEhhLmdldENvbG9yUGFsZXR0ZSksdGhpcy5zdG9yZS5zZWxlY3QoUGwpKSxxKChbbyxhLHMsbCxjLGQsdV0pPT57bGV0IGg9RXYoe2tleTphLHJlZ2V4U3RyaW5nOm99LHMsbCxjKSxtPW5ldyBNYXAsXz1bXTtmb3IobGV0W00seV1vZiBPYmplY3QuZW50cmllcyhoLm1hdGNoZXMpKXtsZXQgeD1tLmdldChNKTtpZigheCl7bGV0IFI9ZC5jb2xvcnNbbS5zaXplJWQuY29sb3JzLmxlbmd0aF07eD11P1IuZGFya0hleDpSLmxpZ2h0SGV4LG0uc2V0KE0seCl9Xy5wdXNoKHtncm91cElkOk0sY29sb3I6eCxydW5zOnl9KX1yZXR1cm4gX30pKSkucGlwZShrbihbXSkpLHRoaXMuZXhwZXJpbWVudElkcz1yLmV4cGVyaW1lbnRJZHMsdGhpcy5ydW5JZFRvRWlkJD1Jbih0aGlzLmV4cGVyaW1lbnRJZHMubWFwKG89PnRoaXMuc3RvcmUuc2VsZWN0KFlXLHtleHBlcmltZW50SWQ6b30pLnBpcGUocShhPT4oe2V4cGVyaW1lbnRJZDpvLHJ1bklkczphfSkpKSkpLnBpcGUocShvPT57bGV0IGE9e307Zm9yKGxldHtydW5JZHM6cyxleHBlcmltZW50SWQ6bH1vZiBvKWZvcihsZXQgYyBvZiBzKWFbY109bDtyZXR1cm4gYX0pKSx0aGlzLmFsbFJ1bnMkPUluKHRoaXMuZXhwZXJpbWVudElkcy5tYXAobz0+dGhpcy5zdG9yZS5zZWxlY3QoSXUse2V4cGVyaW1lbnRJZDpvfSkpKS5waXBlKHEobz0+by5mbGF0KCkpKX1vblJlZ2V4SW5wdXRPbkNoYW5nZShlKXt0aGlzLnRlbnRhdGl2ZVJlZ2V4U3RyaW5nJC5uZXh0KGUpfW9uUmVnZXhUeXBlT25DaGFuZ2UoZSl7dGhpcy50ZW50YXRpdmVSZWdleFR5cGUkLm5leHQoZSl9b25TYXZlKCl7SW4oW3RoaXMuZ3JvdXBCeVJlZ2V4U3RyaW5nJCx0aGlzLmdyb3VwQnlSZWdleFR5cGUkLHRoaXMuZXhwTmFtZUJ5RXhwSWQkXSkuc3Vic2NyaWJlKChbZSxpLHJdKT0+e2UmJnRoaXMuc3RvcmUuZGlzcGF0Y2goWGYoe2V4cGVyaW1lbnRJZHM6dGhpcy5leHBlcmltZW50SWRzLGdyb3VwQnk6e2tleTppLHJlZ2V4U3RyaW5nOmV9LGV4cE5hbWVCeUV4cElkOnJ9KSl9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhJZSksQyhWbCksQyhYdikpfSxuLlx1MDI3NWNtcD1QKHt0eXBlOm4sc2VsZWN0b3JzOltbInJlZ2V4LWVkaXQtZGlhbG9nIl1dLGRlY2xzOjUsdmFyczoxMixjb25zdHM6W1szLCJyZWdleFN0cmluZyIsImNvbG9yUnVuUGFpckxpc3QiLCJzZWxlY3RlZEdyb3VwQnkiLCJlbmFibGVDb2xvckJ5RXhwZXJpbWVudCIsIm9uU2F2ZSIsInJlZ2V4SW5wdXRPbkNoYW5nZSIsInJlZ2V4VHlwZU9uQ2hhbmdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZigwLCJyZWdleC1lZGl0LWRpYWxvZy1jb21wb25lbnQiLDApLEEoIm9uU2F2ZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblNhdmUoKX0pKCJyZWdleElucHV0T25DaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uUmVnZXhJbnB1dE9uQ2hhbmdlKG8pfSkoInJlZ2V4VHlwZU9uQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblJlZ2V4VHlwZU9uQ2hhbmdlKG8pfSksVSgxLCJhc3luYyIpLFUoMiwiYXN5bmMiKSxVKDMsImFzeW5jIiksVSg0LCJhc3luYyIpLGcoKSksMiZlJiZiKCJyZWdleFN0cmluZyIsRygxLDQsaS5ncm91cEJ5UmVnZXhTdHJpbmckKSkoImNvbG9yUnVuUGFpckxpc3QiLEcoMiw2LGkuY29sb3JSdW5QYWlyTGlzdCQpKSgic2VsZWN0ZWRHcm91cEJ5IixHKDMsOCxpLmdyb3VwQnlSZWdleFR5cGUkKSkoImVuYWJsZUNvbG9yQnlFeHBlcmltZW50IixHKDQsMTAsaS5lbmFibGVDb2xvckJ5RXhwZXJpbWVudCQpKX0sZGVwZW5kZW5jaWVzOltRbmUsY3RdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0sIHJlZ2V4LWVkaXQtZGlhbG9nLWNvbXBvbmVudFtfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgIH0iXX0pLG59KSgpO2Z1bmN0aW9uIGRIZShuLHQpezEmbiYmaygwLCJtYXQtaWNvbiIsMTQpfWZ1bmN0aW9uIHVIZShuLHQpe2lmKDEmbil7bGV0IGU9VGUoKTtmKDAsImJ1dHRvbiIsMTMpLEEoImNsaWNrIixmdW5jdGlvbigpe25lKGUpO2xldCByPXcoKTtyZXR1cm4gaWUoci5vbkdyb3VwQnlDaGFuZ2UuZW1pdCh7a2V5OnIuR3JvdXBCeUtleS5FWFBFUklNRU5UfSkpfSksUygxLGRIZSwxLDAsIm1hdC1pY29uIiw3KSxmKDIsInNwYW4iKSxUKDMsIkV4cGVyaW1lbnQiKSxnKCkoKX1pZigyJm4pe2xldCBlPXcoKTtCZSgiYXJpYS1jaGVja2VkIixlLnNlbGVjdGVkR3JvdXBCeS5rZXk9PT1lLkdyb3VwQnlLZXkuRVhQRVJJTUVOVCksdigxKSxiKCJuZ0lmIixlLnNlbGVjdGVkR3JvdXBCeS5rZXk9PT1lLkdyb3VwQnlLZXkuRVhQRVJJTUVOVCl9fWZ1bmN0aW9uIHBIZShuLHQpezEmbiYmaygwLCJtYXQtaWNvbiIsMTQpfWZ1bmN0aW9uIGhIZShuLHQpezEmbiYmaygwLCJtYXQtaWNvbiIsMTQpfWZ1bmN0aW9uIG1IZShuLHQpezEmbiYmKGYoMCwic3BhbiIpKDEsInN0cm9uZyIpLFQoMiwiIEJ5IFJ1biBOYW1lIiksZygpKCkpfWZ1bmN0aW9uIGZIZShuLHQpezEmbiYmKGYoMCwic3BhbiIpKDEsInN0cm9uZyIpLFQoMiwiIEJ5IEV4cGVyaW1lbnQgTmFtZSIpLGcoKSgpKX1mdW5jdGlvbiBnSGUobix0KXtpZigxJm4mJihmKDAsInNwYW4iKSxUKDEpLGcoKSksMiZuKXtsZXQgZT13KCk7digxKSxrdChlLnJlZ2V4U3RyaW5nKX19ZnVuY3Rpb24gX0hlKG4sdCl7MSZuJiYoZigwLCJzcGFuIiwxNSksVCgxLCIobm9uZSBzZXQpIiksZygpKX12YXIgS25lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5kaWFsb2c9ZSx0aGlzLkdyb3VwQnlLZXk9WW4sdGhpcy5vbkdyb3VwQnlDaGFuZ2U9bmV3IEZ9b25SZWdleFN0cmluZ0VkaXQoKXt0aGlzLmRpYWxvZy5vcGVuKFpuZSx7bWF4SGVpZ2h0OiI5NXZoIixtYXhXaWR0aDoiODB2dyIsZGF0YTp7ZXhwZXJpbWVudElkczp0aGlzLmV4cGVyaW1lbnRJZHN9fSl9b25Hcm91cEJ5UmVnZXhDbGljaygpe3RoaXMucmVnZXhTdHJpbmc/dGhpcy5vbkdyb3VwQnlDaGFuZ2UuZW1pdCh7a2V5OnRoaXMubGFzdFJlZ2V4R3JvdXBCeUtleSxyZWdleFN0cmluZzp0aGlzLnJlZ2V4U3RyaW5nfSk6dGhpcy5vblJlZ2V4U3RyaW5nRWRpdCgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKHlzKSl9LG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1sicnVucy1ncm91cC1tZW51LWJ1dHRvbi1jb21wb25lbnQiXV0saW5wdXRzOntzaG93RXhwZXJpbWVudHNHcm91cEJ5OiJzaG93RXhwZXJpbWVudHNHcm91cEJ5IixleHBlcmltZW50SWRzOiJleHBlcmltZW50SWRzIixyZWdleFN0cmluZzoicmVnZXhTdHJpbmciLHNlbGVjdGVkR3JvdXBCeToic2VsZWN0ZWRHcm91cEJ5IixsYXN0UmVnZXhHcm91cEJ5S2V5OiJsYXN0UmVnZXhHcm91cEJ5S2V5In0sb3V0cHV0czp7b25Hcm91cEJ5Q2hhbmdlOiJvbkdyb3VwQnlDaGFuZ2UifSxkZWNsczoyMSx2YXJzOjEwLGNvbnN0czpbWyJtYXQtaWNvbi1idXR0b24iLCIiLCJ0aXRsZSIsIkNvbG9yIHJ1bnMgYnkuLi4iLDMsIm1hdE1lbnVUcmlnZ2VyRm9yIl0sWyJzdmdJY29uIiwicGFsZXR0ZV8yNHB4Il0sWzEsInJ1bi10YWJsZS1jb2xvci1ncm91cC1ieSJdLFsiZ3JvdXBCeU1lbnUiLCJtYXRNZW51Il0sWzEsImxhYmVsIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwicm9sZSIsIm1lbnVpdGVtcmFkaW8iLCJkYXRhLXZhbHVlIiwiZXhwZXJpbWVudCIsMywiY2xpY2siLDQsIm5nSWYiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJyb2xlIiwibWVudWl0ZW1yYWRpbyIsImRhdGEtdmFsdWUiLCJydW4iLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiZG9uZV8yNHB4Iiw0LCJuZ0lmIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwicm9sZSIsIm1lbnVpdGVtcmFkaW8iLCJkYXRhLXZhbHVlIiwicmVnZXgiLDMsImNsaWNrIl0sWzQsIm5nSWYiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJyb2xlIiwibWVudWl0ZW0iLCJkYXRhLXZhbHVlIiwicmVnZXgtZWRpdCIsMSwiZGlzcGxheS1yZWdleC1zdHJpbmciLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiZWRpdF8yNHB4Il0sWyJjbGFzcyIsIm5vbmUtc2V0LXN0cmluZyIsNCwibmdJZiJdLFsibWF0LW1lbnUtaXRlbSIsIiIsInJvbGUiLCJtZW51aXRlbXJhZGlvIiwiZGF0YS12YWx1ZSIsImV4cGVyaW1lbnQiLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiZG9uZV8yNHB4Il0sWzEsIm5vbmUtc2V0LXN0cmluZyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGYoMCwiYnV0dG9uIiwwKSxrKDEsIm1hdC1pY29uIiwxKSxnKCksZigyLCJtYXQtbWVudSIsMiwzKSg0LCJkaXYiLDQpLFQoNSwiQ29sb3IgcnVucyBieSIpLGcoKSxTKDYsdUhlLDQsMiwiYnV0dG9uIiw1KSxmKDcsImJ1dHRvbiIsNiksQSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25Hcm91cEJ5Q2hhbmdlLmVtaXQoe2tleTppLkdyb3VwQnlLZXkuUlVOfSl9KSxTKDgscEhlLDEsMCwibWF0LWljb24iLDcpLGYoOSwic3BhbiIpLFQoMTAsIlJ1biIpLGcoKSgpLGYoMTEsImJ1dHRvbiIsOCksQSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25Hcm91cEJ5UmVnZXhDbGljaygpfSksUygxMixoSGUsMSwwLCJtYXQtaWNvbiIsNyksZigxMywic3BhbiIpLFQoMTQsIlJlZ2V4IiksZygpLFMoMTUsbUhlLDMsMCwic3BhbiIsOSksUygxNixmSGUsMywwLCJzcGFuIiw5KSxnKCksZigxNywiYnV0dG9uIiwxMCksQSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25SZWdleFN0cmluZ0VkaXQoKX0pLGsoMTgsIm1hdC1pY29uIiwxMSksUygxOSxnSGUsMiwxLCJzcGFuIiw5KSxTKDIwLF9IZSwyLDAsInNwYW4iLDEyKSxnKCkoKSksMiZlJiYoYigibWF0TWVudVRyaWdnZXJGb3IiLHN0KDMpKSx2KDYpLGIoIm5nSWYiLGkuc2hvd0V4cGVyaW1lbnRzR3JvdXBCeSksdigxKSxCZSgiYXJpYS1jaGVja2VkIixpLnNlbGVjdGVkR3JvdXBCeS5rZXk9PT1pLkdyb3VwQnlLZXkuUlVOKSx2KDEpLGIoIm5nSWYiLGkuc2VsZWN0ZWRHcm91cEJ5LmtleT09PWkuR3JvdXBCeUtleS5SVU4pLHYoMyksQmUoImFyaWEtY2hlY2tlZCIsaS5zZWxlY3RlZEdyb3VwQnkua2V5PT09aS5Hcm91cEJ5S2V5LlJFR0VYfHxpLnNlbGVjdGVkR3JvdXBCeS5rZXk9PT1pLkdyb3VwQnlLZXkuUkVHRVhfQllfRVhQKSx2KDEpLGIoIm5nSWYiLGkuc2VsZWN0ZWRHcm91cEJ5LmtleT09PWkuR3JvdXBCeUtleS5SRUdFWHx8aS5zZWxlY3RlZEdyb3VwQnkua2V5PT09aS5Hcm91cEJ5S2V5LlJFR0VYX0JZX0VYUCksdigzKSxiKCJuZ0lmIixpLnNlbGVjdGVkR3JvdXBCeS5rZXk9PT1pLkdyb3VwQnlLZXkuUkVHRVgpLHYoMSksYigibmdJZiIsaS5zZWxlY3RlZEdyb3VwQnkua2V5PT09aS5Hcm91cEJ5S2V5LlJFR0VYX0JZX0VYUCksdigzKSxiKCJuZ0lmIixpLnJlZ2V4U3RyaW5nKSx2KDEpLGIoIm5nSWYiLCFpLnJlZ2V4U3RyaW5nKSl9LGRlcGVuZGVuY2llczpbTmUsRXIsYm4sWHUsRWQsWXVdLHN0eWxlczpbIi5ydW4tdGFibGUtY29sb3ItZ3JvdXAtYnl7Zm9udC1zaXplOjE2cHh9ICAucnVuLXRhYmxlLWNvbG9yLWdyb3VwLWJ5IC5sYWJlbHtjb2xvcjojNjE2MTYxO2ZvbnQtc2l6ZTouOWVtO21hcmdpbjoxMHB4IDA7cGFkZGluZzowIDE2cHg7cG9pbnRlci1ldmVudHM6bm9uZX0gIC5ydW4tdGFibGUtY29sb3ItZ3JvdXAtYnkgbWF0LWljb257LS1tYXQtbWVudS1pdGVtLWljb24tc2l6ZTogMjBweH0gIC5ydW4tdGFibGUtY29sb3ItZ3JvdXAtYnkgLmRpc3BsYXktcmVnZXgtc3RyaW5ne3BhZGRpbmctbGVmdDo0MHB4fSAgLnJ1bi10YWJsZS1jb2xvci1ncm91cC1ieSAuZGlzcGxheS1yZWdleC1zdHJpbmcgLm5vbmUtc2V0LXN0cmluZ3tjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgICAgLnJ1bi10YWJsZS1jb2xvci1ncm91cC1ieSAuZGlzcGxheS1yZWdleC1zdHJpbmcgLm5vbmUtc2V0LXN0cmluZywgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgICAucnVuLXRhYmxlLWNvbG9yLWdyb3VwLWJ5IC5kaXNwbGF5LXJlZ2V4LXN0cmluZyAubm9uZS1zZXQtc3RyaW5ne2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksSm5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuc2hvd0V4cGVyaW1lbnRzR3JvdXBCeSQ9dGhpcy5zdG9yZS5zZWxlY3QoSjgpLnBpcGUocShpPT5pLmhhcyhDbi5DT01QQVJFX0VYUEVSSU1FTlQpKSksdGhpcy5zZWxlY3RlZEdyb3VwQnkkPXRoaXMuc3RvcmUuc2VsZWN0KER2KSx0aGlzLmxhc3RSZWdleEdyb3VwQnlLZXkkPXRoaXMuc3RvcmUuc2VsZWN0KER2KS5waXBlKHEoaT0+aS5rZXkpLE9lKGk9Pmk9PT1Zbi5SRUdFWHx8aT09PVluLlJFR0VYX0JZX0VYUCksa24oWW4uUkVHRVgpKSx0aGlzLmdyb3VwQnlSZWdleFN0cmluZyQ9dGhpcy5zdG9yZS5zZWxlY3QoeTEpLHRoaXMuZXhwTmFtZUJ5RXhwSWQkPXRoaXMuc3RvcmUuc2VsZWN0KHl1KX1vbkdyb3VwQnlDaGFuZ2UoZSl7dGhpcy5leHBOYW1lQnlFeHBJZCQucGlwZShMdCgxKSkuc3Vic2NyaWJlKGk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKFhmKHtleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkcyxncm91cEJ5OmUsZXhwTmFtZUJ5RXhwSWQ6aX0pKX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEllKSl9LG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1sicnVucy1ncm91cC1tZW51LWJ1dHRvbiJdXSxpbnB1dHM6e2V4cGVyaW1lbnRJZHM6ImV4cGVyaW1lbnRJZHMifSxkZWNsczo1LHZhcnM6MTMsY29uc3RzOltbMywicmVnZXhTdHJpbmciLCJzZWxlY3RlZEdyb3VwQnkiLCJsYXN0UmVnZXhHcm91cEJ5S2V5Iiwic2hvd0V4cGVyaW1lbnRzR3JvdXBCeSIsImV4cGVyaW1lbnRJZHMiLCJvbkdyb3VwQnlDaGFuZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihmKDAsInJ1bnMtZ3JvdXAtbWVudS1idXR0b24tY29tcG9uZW50IiwwKSxBKCJvbkdyb3VwQnlDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uR3JvdXBCeUNoYW5nZShvKX0pLFUoMSwiYXN5bmMiKSxVKDIsImFzeW5jIiksVSgzLCJhc3luYyIpLFUoNCwiYXN5bmMiKSxnKCkpLDImZSYmYigicmVnZXhTdHJpbmciLEcoMSw1LGkuZ3JvdXBCeVJlZ2V4U3RyaW5nJCkpKCJzZWxlY3RlZEdyb3VwQnkiLEcoMiw3LGkuc2VsZWN0ZWRHcm91cEJ5JCkpKCJsYXN0UmVnZXhHcm91cEJ5S2V5IixHKDMsOSxpLmxhc3RSZWdleEdyb3VwQnlLZXkkKSkoInNob3dFeHBlcmltZW50c0dyb3VwQnkiLEcoNCwxMSxpLnNob3dFeHBlcmltZW50c0dyb3VwQnkkKSkoImV4cGVyaW1lbnRJZHMiLGkuZXhwZXJpbWVudElkcyl9LGRlcGVuZGVuY2llczpbS25lLGN0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiB5SGUobix0KXtpZigxJm4pe2xldCBlPVRlKCk7ZigwLCJkaXYiKSgxLCJtYXQtY2hlY2tib3giLDEyKSxBKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIG5lKGUpLGllKHcoMikuaGFuZGxlU2VsZWN0QWxsKHIpKX0pLGcoKSgpfWlmKDImbil7bGV0IGU9dygyKTt2KDEpLGIoImNoZWNrZWQiLGUuYWxsUm93c1NlbGVjdGVkKCkpKCJpbmRldGVybWluYXRlIiwhZS5hbGxSb3dzU2VsZWN0ZWQoKSYmZS5zb21lUm93c1NlbGVjdGVkKCkpfX1mdW5jdGlvbiB4SGUobix0KXtpZigxJm4mJihmKDAsInNwYW4iLDEzKSxrKDEsInJ1bnMtZ3JvdXAtbWVudS1idXR0b24iLDE0KSxnKCkpLDImbil7bGV0IGU9dygyKTt2KDEpLGIoImV4cGVyaW1lbnRJZHMiLGUuZXhwZXJpbWVudElkcyl9fXZhciAkbmU9ZnVuY3Rpb24obil7cmV0dXJuW25dfTtmdW5jdGlvbiBDSGUobix0KXtpZigxJm4mJihHdCgwKSxmKDEsInRiLWRhdGEtdGFibGUtaGVhZGVyLWNlbGwiLDgpLEd0KDIsOSksUygzLHlIZSwyLDIsImRpdiIsMTApLFMoNCx4SGUsMiwxLCJzcGFuIiwxMSksV3QoKSxnKCksV3QoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXcoKTt2KDEpLGIoImhlYWRlciIsZSkoInNvcnRpbmdJbmZvIixpLnNvcnRpbmdJbmZvKSgibmdDbGFzcyIsVW4oNiwkbmUsInRhYmxlLWNvbHVtbi0iK2UubmFtZSkpLHYoMSksYigibmdTd2l0Y2giLGUubmFtZSksdigxKSxiKCJuZ1N3aXRjaENhc2UiLCJzZWxlY3RlZCIpLHYoMSksYigibmdTd2l0Y2hDYXNlIiwiY29sb3IiKX19ZnVuY3Rpb24gTUhlKG4sdCl7aWYoMSZuKXtsZXQgZT1UZSgpO2YoMCwic3BhbiIsMTcpKDEsImJ1dHRvbiIsMTgpLEEoImNvbG9yUGlja2VyQ2hhbmdlIixmdW5jdGlvbihyKXtuZShlKTtsZXQgbz13KDIpLiRpbXBsaWNpdDtyZXR1cm4gaWUodygpLm9uUnVuQ29sb3JDaGFuZ2UuZW1pdCh7cnVuSWQ6by5pZCxuZXdDb2xvcjpyfSkpfSksZygpKCl9aWYoMiZuKXtsZXQgZT13KDIpLiRpbXBsaWNpdDt2KDEpLEJ0KCJiYWNrZ3JvdW5kIixlLmNvbG9yKSxiKCJjb2xvclBpY2tlciIsZS5jb2xvcikoImNwRGlhbG9nRGlzcGxheSIsInBvcHVwIikoImNwUG9zaXRpb25PZmZzZXQiLC0yMCkoImNwVXNlUm9vdFZpZXdDb250YWluZXIiLCEwKSgiY3BPdXRwdXRGb3JtYXQiLCJoZXgiKX19ZnVuY3Rpb24gd0hlKG4sdCl7aWYoMSZuKXtsZXQgZT1UZSgpO2YoMCwiZGl2IikoMSwibWF0LWNoZWNrYm94IiwxOSksQSgiY2xpY2siLGZ1bmN0aW9uKHIpe25lKGUpO2xldCBvPXcoMikuJGltcGxpY2l0O3JldHVybiBpZSh3KCkuc2VsZWN0aW9uQ2xpY2socixvLmlkKSl9KSxnKCkoKX1pZigyJm4pe2xldCBlPXcoMikuJGltcGxpY2l0O3YoMSksYigiY2hlY2tlZCIsZS5zZWxlY3RlZCl9fWZ1bmN0aW9uIFNIZShuLHQpe2lmKDEmbiYmKGYoMCwic3BhbiIpLGsoMSwidGItZXhwZXJpbWVudC1hbGlhcyIsMjApLGcoKSksMiZuKXtsZXQgZT13KDIpLiRpbXBsaWNpdDt2KDEpLGIoImFsaWFzIixlLmV4cGVyaW1lbnRBbGlhcykoInRpdGxlIixlLmV4cGVyaW1lbnROYW1lKX19ZnVuY3Rpb24gRUhlKG4sdCl7aWYoMSZuJiYoR3QoMCksZigxLCJ0Yi1kYXRhLXRhYmxlLWNvbnRlbnQtY2VsbCIsMTUpLEd0KDIsOSksUygzLE1IZSwyLDcsInNwYW4iLDE2KSxTKDQsd0hlLDIsMSwiZGl2IiwxMCksUyg1LFNIZSwyLDIsInNwYW4iLDEwKSxXdCgpLGcoKSxXdCgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dygpLiRpbXBsaWNpdDt2KDEpLGIoImhlYWRlciIsZSkoImRhdHVtIixpW2UubmFtZV0pKCJuZ0NsYXNzIixVbig3LCRuZSwidGFibGUtY29sdW1uLSIrZS5uYW1lKSksdigxKSxiKCJuZ1N3aXRjaCIsZS5uYW1lKSx2KDEpLGIoIm5nU3dpdGNoQ2FzZSIsImNvbG9yIiksdigxKSxiKCJuZ1N3aXRjaENhc2UiLCJzZWxlY3RlZCIpLHYoMSksYigibmdTd2l0Y2hDYXNlIiwiZXhwZXJpbWVudEFsaWFzIil9fWZ1bmN0aW9uIFRIZShuLHQpe2lmKDEmbiYmKEd0KDApLGYoMSwidGItZGF0YS10YWJsZS1jb250ZW50LXJvdyIpLFMoMixFSGUsNiw5LCJuZy1jb250YWluZXIiLDUpLGcoKSxXdCgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dygpO3YoMSksQmUoImRhdGEtaWQiLGUuaWQpLHYoMSksYigibmdGb3JPZiIsaS5leHRlbmRIZWFkZXJzKGkuaGVhZGVycykpfX12YXIgZWllPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLkNvbHVtbkhlYWRlclR5cGU9Z3QsdGhpcy5zb3J0RGF0YUJ5PW5ldyBGLHRoaXMub3JkZXJDb2x1bW5zPW5ldyBGLHRoaXMub25TZWxlY3Rpb25Ub2dnbGU9bmV3IEYsdGhpcy5vbkFsbFNlbGVjdGlvblRvZ2dsZT1uZXcgRix0aGlzLm9uUmVnZXhGaWx0ZXJDaGFuZ2U9bmV3IEYsdGhpcy5vblJ1bkNvbG9yQ2hhbmdlPW5ldyBGLHRoaXMuYWRkQ29sdW1uPW5ldyBGLHRoaXMucmVtb3ZlQ29sdW1uPW5ldyBGLHRoaXMub25TZWxlY3Rpb25EYmxDbGljaz1uZXcgRix0aGlzLmFkZEZpbHRlcj1uZXcgRix0aGlzLmxvYWRBbGxDb2x1bW5zPW5ldyBGLHRoaXMuZXh0ZW5kSGVhZGVycz1fcyh0aGlzLmludGVybmFsRXh0ZW5kSGVhZGVycyl9aW50ZXJuYWxFeHRlbmRIZWFkZXJzKGUpe3JldHVybltdLmNvbmNhdChbe25hbWU6InNlbGVjdGVkIixkaXNwbGF5TmFtZToiIix0eXBlOmd0LkNVU1RPTSxlbmFibGVkOiEwfV0sZSxbe25hbWU6ImNvbG9yIixkaXNwbGF5TmFtZToiIix0eXBlOmd0LkNPTE9SLGVuYWJsZWQ6ITB9XSl9c2VsZWN0aW9uQ2xpY2soZSxpKXtlLnByZXZlbnREZWZhdWx0KCksMT09PWUuZGV0YWlsJiZ0aGlzLm9uU2VsZWN0aW9uVG9nZ2xlLmVtaXQoaSksMj09PWUuZGV0YWlsJiZ0aGlzLm9uU2VsZWN0aW9uRGJsQ2xpY2suZW1pdChpKX1hbGxSb3dzU2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5kYXRhPy5ldmVyeShlPT5lLnNlbGVjdGVkKX1zb21lUm93c1NlbGVjdGVkKCl7cmV0dXJuIHRoaXMuZGF0YT8uc29tZShlPT5lLnNlbGVjdGVkKX1oYW5kbGVTZWxlY3RBbGwoZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMub25BbGxTZWxlY3Rpb25Ub2dnbGUuZW1pdCh0aGlzLmRhdGE/Lm1hcChpPT5pLmlkKSl9b25GaWx0ZXJLZXlVcChlKXt0aGlzLm9uUmVnZXhGaWx0ZXJDaGFuZ2UuZW1pdChlLnRhcmdldC52YWx1ZSl9dHJhY2tCeVJ1bnMoZSxpKXtsZXQgcj17Li4uaX07cmV0dXJuIGRlbGV0ZSByLmNvbG9yLEpTT04uc3RyaW5naWZ5KHIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJydW5zLWRhdGEtdGFibGUiXV0saW5wdXRzOntoZWFkZXJzOiJoZWFkZXJzIixkYXRhOiJkYXRhIixzb3J0aW5nSW5mbzoic29ydGluZ0luZm8iLGV4cGVyaW1lbnRJZHM6ImV4cGVyaW1lbnRJZHMiLHJlZ2V4RmlsdGVyOiJyZWdleEZpbHRlciIsc2VsZWN0YWJsZUNvbHVtbnM6InNlbGVjdGFibGVDb2x1bW5zIixudW1Db2x1bW5zTG9hZGVkOiJudW1Db2x1bW5zTG9hZGVkIixudW1Db2x1bW5zVG9Mb2FkOiJudW1Db2x1bW5zVG9Mb2FkIixsb2FkaW5nOiJsb2FkaW5nIixjb2x1bW5GaWx0ZXJzOiJjb2x1bW5GaWx0ZXJzIn0sb3V0cHV0czp7c29ydERhdGFCeToic29ydERhdGFCeSIsb3JkZXJDb2x1bW5zOiJvcmRlckNvbHVtbnMiLG9uU2VsZWN0aW9uVG9nZ2xlOiJvblNlbGVjdGlvblRvZ2dsZSIsb25BbGxTZWxlY3Rpb25Ub2dnbGU6Im9uQWxsU2VsZWN0aW9uVG9nZ2xlIixvblJlZ2V4RmlsdGVyQ2hhbmdlOiJvblJlZ2V4RmlsdGVyQ2hhbmdlIixvblJ1bkNvbG9yQ2hhbmdlOiJvblJ1bkNvbG9yQ2hhbmdlIixhZGRDb2x1bW46ImFkZENvbHVtbiIscmVtb3ZlQ29sdW1uOiJyZW1vdmVDb2x1bW4iLG9uU2VsZWN0aW9uRGJsQ2xpY2s6Im9uU2VsZWN0aW9uRGJsQ2xpY2siLGFkZEZpbHRlcjoiYWRkRmlsdGVyIixsb2FkQWxsQ29sdW1uczoibG9hZEFsbENvbHVtbnMifSxkZWNsczo5LHZhcnM6MTIsY29uc3RzOltbMSwiZmlsdGVyLXJvdyJdLFsicGxhY2Vob2xkZXIiLCJGaWx0ZXIgcnVucyAocmVnZXgpIiwxLCJydW4tZmlsdGVyIiwzLCJ2YWx1ZSIsImtleXVwIl0sWzEsInRhYmxlLWNvbnRhaW5lciJdLFszLCJoZWFkZXJzIiwic29ydGluZ0luZm8iLCJzZWxlY3RhYmxlQ29sdW1ucyIsIm51bUNvbHVtbnNMb2FkZWQiLCJoYXNNb3JlQ29sdW1uc1RvTG9hZCIsImNvbHVtbkZpbHRlcnMiLCJsb2FkaW5nIiwic2hvdWxkQWRkQm9yZGVycyIsInNvcnREYXRhQnkiLCJvcmRlckNvbHVtbnMiLCJhZGRDb2x1bW4iLCJyZW1vdmVDb2x1bW4iLCJhZGRGaWx0ZXIiLCJsb2FkQWxsQ29sdW1ucyJdLFsiaGVhZGVyIiwiIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY29udGVudCIsIiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiXSxbMywiaGVhZGVyIiwic29ydGluZ0luZm8iLCJuZ0NsYXNzIl0sWzMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJncm91cC1tZW51LWNvbnRhaW5lciIsNCwibmdTd2l0Y2hDYXNlIl0sWzMsImNoZWNrZWQiLCJpbmRldGVybWluYXRlIiwiY2xpY2siXSxbMSwiZ3JvdXAtbWVudS1jb250YWluZXIiXSxbMywiZXhwZXJpbWVudElkcyJdLFszLCJoZWFkZXIiLCJkYXR1bSIsIm5nQ2xhc3MiXSxbImNsYXNzIiwiY29sb3ItY29udGFpbmVyIiw0LCJuZ1N3aXRjaENhc2UiXSxbMSwiY29sb3ItY29udGFpbmVyIl0sWzEsInJ1bi1jb2xvci1zd2F0Y2giLDMsImNvbG9yUGlja2VyIiwiY3BEaWFsb2dEaXNwbGF5IiwiY3BQb3NpdGlvbk9mZnNldCIsImNwVXNlUm9vdFZpZXdDb250YWluZXIiLCJjcE91dHB1dEZvcm1hdCIsImNvbG9yUGlja2VyQ2hhbmdlIl0sWzMsImNoZWNrZWQiLCJjbGljayJdLFszLCJhbGlhcyIsInRpdGxlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZigwLCJkaXYiLDApKDEsInRiLWZpbHRlci1pbnB1dCIsMSksQSgia2V5dXAiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uRmlsdGVyS2V5VXAobyl9KSxnKCkoKSxrKDIsImZpbHRlcmJhciIpLGYoMywiZGl2IiwyKSg0LCJ0Yi1kYXRhLXRhYmxlIiwzKSxBKCJzb3J0RGF0YUJ5IixmdW5jdGlvbihvKXtyZXR1cm4gaS5zb3J0RGF0YUJ5LmVtaXQobyl9KSgib3JkZXJDb2x1bW5zIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vcmRlckNvbHVtbnMuZW1pdChvKX0pKCJhZGRDb2x1bW4iLGZ1bmN0aW9uKG8pe3JldHVybiBpLmFkZENvbHVtbi5lbWl0KG8pfSkoInJlbW92ZUNvbHVtbiIsZnVuY3Rpb24obyl7cmV0dXJuIGkucmVtb3ZlQ29sdW1uLmVtaXQobyl9KSgiYWRkRmlsdGVyIixmdW5jdGlvbihvKXtyZXR1cm4gaS5hZGRGaWx0ZXIuZW1pdChvKX0pKCJsb2FkQWxsQ29sdW1ucyIsZnVuY3Rpb24oKXtyZXR1cm4gaS5sb2FkQWxsQ29sdW1ucy5lbWl0KCl9KSxHdCg1LDQpLFMoNixDSGUsNSw4LCJuZy1jb250YWluZXIiLDUpLFd0KCksR3QoNyw2KSxTKDgsVEhlLDMsMiwibmctY29udGFpbmVyIiw3KSxXdCgpLGcoKSgpKSwyJmUmJih2KDEpLFppKCJ2YWx1ZSIsaS5yZWdleEZpbHRlciksdigzKSxiKCJoZWFkZXJzIixpLmhlYWRlcnMpKCJzb3J0aW5nSW5mbyIsaS5zb3J0aW5nSW5mbykoInNlbGVjdGFibGVDb2x1bW5zIixpLnNlbGVjdGFibGVDb2x1bW5zKSgibnVtQ29sdW1uc0xvYWRlZCIsaS5udW1Db2x1bW5zTG9hZGVkKSgiaGFzTW9yZUNvbHVtbnNUb0xvYWQiLGkubnVtQ29sdW1uc0xvYWRlZD09PWkubnVtQ29sdW1uc1RvTG9hZCkoImNvbHVtbkZpbHRlcnMiLGkuY29sdW1uRmlsdGVycykoImxvYWRpbmciLGkubG9hZGluZykoInNob3VsZEFkZEJvcmRlcnMiLCEwKSx2KDIpLGIoIm5nRm9yT2YiLGkuZXh0ZW5kSGVhZGVycyhpLmhlYWRlcnMpKSx2KDIpLGIoIm5nRm9yT2YiLGkuZGF0YSkoIm5nRm9yVHJhY2tCeSIsaS50cmFja0J5UnVucykpfSxkZXBlbmRlbmNpZXM6W0JuZSx3bixubixtcixrcixtXyxkQSxtQSxmXyxLZyxnXyx4cyxZbmUsSm5lXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde21pbi13aWR0aDoxMDAlfS5jb2xvci1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3dpZHRoOjEwMCV9LnJ1bi1jb2xvci1zd2F0Y2hbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yYWRpdXM6MTAwJTtib3JkZXI6MXB4IHNvbGlkICNlYmViZWI7aGVpZ2h0OjIwcHg7d2lkdGg6MjBweDtvdXRsaW5lOm5vbmV9Lmdyb3VwLW1lbnUtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjt3aWR0aDoxMDAlfXRiLWRhdGEtdGFibGUtY29udGVudC1yb3dbX25nY29udGVudC0lQ09NUCVdLCB0Yi1kYXRhLXRhYmxlLWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6NDhweH10Yi1kYXRhLXRhYmxlLWNvbnRlbnQtY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIHRiLWRhdGEtdGFibGUtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MCA0cHg7dmVydGljYWwtYWxpZ246bWlkZGxlO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgdGItZGF0YS10YWJsZS1jb250ZW50LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICB0Yi1kYXRhLXRhYmxlLWNvbnRlbnQtY2VsbFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICB0Yi1kYXRhLXRhYmxlLWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgdGItZGF0YS10YWJsZS1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX0udGFibGUtY29sdW1uLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnRhYmxlLWNvbHVtbi1jb2xvcltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6NDBweH0uZmlsdGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6NDhweDt3aWR0aDoxMDAlfS5maWx0ZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRiLWZpbHRlci1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1sZWZ0OjE2cHg7ZmxleC1ncm93OjF9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxJSGU9VyhUdixuPT5uLnN0YXRlPT09UmUuTE9BRElORyksdGllPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuc29ydGVkUnVuc1RhYmxlRGF0YSQ9JHQoW10pLHRoaXMubG9hZGluZyQ9bnVsbCx0aGlzLnNvcnRpbmdJbmZvJD10aGlzLnN0b3JlLnNlbGVjdCgkVyksdGhpcy5jb2x1bW5zPVtabC5SVU5fTkFNRV0sdGhpcy5yZWdleEZpbHRlciQ9dGhpcy5zdG9yZS5zZWxlY3QoQXUpLHRoaXMucnVuc0NvbHVtbnMkPXRoaXMuc3RvcmUuc2VsZWN0KGU3KSx0aGlzLnNlbGVjdGFibGVDb2x1bW5zJD10aGlzLnN0b3JlLnNlbGVjdChZVCksdGhpcy5udW1Db2x1bW5zTG9hZGVkJD10aGlzLnN0b3JlLnNlbGVjdChNYy5nZXROdW1EYXNoYm9hcmRIcGFyYW1zTG9hZGVkKSx0aGlzLm51bUNvbHVtbnNUb0xvYWQkPXRoaXMuc3RvcmUuc2VsZWN0KE1jLmdldE51bURhc2hib2FyZEhwYXJhbXNUb0xvYWQpLHRoaXMuY29sdW1uRmlsdGVycyQ9dGhpcy5zdG9yZS5zZWxlY3QoWFQpLHRoaXMuYWxsUnVuc1RhYmxlRGF0YSQ9dGhpcy5zdG9yZS5zZWxlY3QoQU4pLnBpcGUocShpPT5pLm1hcChyPT4oey4uLk9iamVjdC5mcm9tRW50cmllcyhyLmhwYXJhbXMuZW50cmllcygpKSxpZDpyLnJ1bi5pZCxydW46ci5ydW4ubmFtZSxleHBlcmltZW50TmFtZTpyLmV4cGVyaW1lbnROYW1lLGV4cGVyaW1lbnRBbGlhczpyLmV4cGVyaW1lbnRBbGlhcyxzZWxlY3RlZDpyLnNlbGVjdGVkLGNvbG9yOnIucnVuQ29sb3J9KSkpKSx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IEVlfW5nT25Jbml0KCl7bGV0IGU9dGhpcy5leHBlcmltZW50SWRzLm1hcChvPT50aGlzLmdldFJ1blRhYmxlSXRlbXNGb3JFeHBlcmltZW50KG8pKTt0aGlzLnNvcnRlZFJ1bnNUYWJsZURhdGEkPUluKFt0aGlzLmFsbFJ1bnNUYWJsZURhdGEkLHRoaXMuc29ydGluZ0luZm8kXSkucGlwZShxKChbbyxhXSk9PmZ1bmN0aW9uKG4sdCl7bGV0IGU9Wy4uLm5dO3JldHVybiBlLnNvcnQoKHIsbyk9PntsZXQgYT1yW3QubmFtZV0scz1vW3QubmFtZV07aWYoImV4cGVyaW1lbnRBbGlhcyI9PT10Lm5hbWUmJihhPWEuYWxpYXNOdW1iZXIscz1zLmFsaWFzTnVtYmVyKSxhPT09cylyZXR1cm4gMDtpZih2b2lkIDA9PT1hfHx2b2lkIDA9PT1zKXJldHVybiBpKGEscyk7aWYoT25lLmhhcyh0eXBlb2YgYSkmJk9uZS5oYXModHlwZW9mIHMpKXtsZXQgbD1GbmUoYSksYz1GbmUocyk7aWYoKHZvaWQgMD09PWx8fHZvaWQgMD09PWMpJiZsIT09YylyZXR1cm4gaShsLGMse2luc2VydFVuZGVmaW5lZDpQcC5CRUZPUkV9KTtpZih2b2lkIDAhPT1sJiZ2b2lkIDAhPT1jKXJldHVybiBsPT09Yz9pKGEudG9TdHJpbmcoKS5zbGljZShsLnRvU3RyaW5nKCkubGVuZ3RoKXx8dm9pZCAwLHMudG9TdHJpbmcoKS5zbGljZShjLnRvU3RyaW5nKCkubGVuZ3RoKXx8dm9pZCAwLHtpbnNlcnRVbmRlZmluZWQ6UHAuQkVGT1JFfSk6aShsLGMpfXJldHVybiBpKGEscyl9KSxlO2Z1bmN0aW9uIGkocixvLHtpbnNlcnRVbmRlZmluZWQ6YX09R1ZlKXtyZXR1cm4gcj09PW8/MDp2b2lkIDA9PT1yP2E9PT1QcC5BRlRFUj8xOi0xOnZvaWQgMD09PW8/YT09PVBwLkFGVEVSPy0xOjE6cjxvPT0odC5vcmRlcj09PUxyLkFTQ0VORElORyk/LTE6MX19KG8sYSkpKTtsZXQgaT1JbihlKS5waXBlKHEobz0+W10uY29uY2F0KC4uLm8pKSkscj10aGlzLmV4cGVyaW1lbnRJZHMubWFwKG89PnRoaXMuc3RvcmUuc2VsZWN0KElIZSx7ZXhwZXJpbWVudElkOm99KSk7dGhpcy5sb2FkaW5nJD1JbihyKS5waXBlKHEobz0+by5zb21lKGE9PmEpKSksdGhpcy5jb2x1bW5zLmluY2x1ZGVzKFpsLkNIRUNLQk9YKSYmdGhpcy5zdG9yZS5zZWxlY3QoSG8pLnBpcGUoaXQodGhpcy5uZ1Vuc3Vic2NyaWJlKSxyaSgoYSxzKT0+Vm8oYSxzKSksSm4oKCk9PmkucGlwZShPZShhPT5hLmxlbmd0aD41MDApLEx0KDEpKSkpLnN1YnNjcmliZSgoKT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2godGcoe2xvY2FsaXplZE1lc3NhZ2U6IlRoZSBudW1iZXIgb2YgcnVucyBleGNlZWRzIDUwMC4gTmV3IHJ1bnMgYXJlIHVuc2VsZWN0ZWQgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuIn0pKX0pfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX1zb3J0RGF0YUJ5KGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goVlMoe3NvcnRpbmdJbmZvOmV9KSl9Z2V0UnVuVGFibGVJdGVtc0ZvckV4cGVyaW1lbnQoZSl7cmV0dXJuIEluKFt0aGlzLnN0b3JlLnNlbGVjdChJdSx7ZXhwZXJpbWVudElkOmV9KSx0aGlzLnN0b3JlLnNlbGVjdChVUyx7ZXhwZXJpbWVudElkOmV9KSx0aGlzLnN0b3JlLnNlbGVjdChSdSksdGhpcy5zdG9yZS5zZWxlY3QoUHUpLHRoaXMuc3RvcmUuc2VsZWN0KHFzKV0pLnBpcGUocSgoW2kscixvLGEsc10pPT5pLm1hcChsPT57bGV0IGM9bmV3IE1hcDsobC5ocGFyYW1zfHxbXSkuZm9yRWFjaCh1PT57Yy5zZXQodS5uYW1lLHUudmFsdWUpfSk7bGV0IGQ9bmV3IE1hcDtyZXR1cm4obC5tZXRyaWNzfHxbXSkuZm9yRWFjaCh1PT57ZC5zZXQodS50YWcsdS52YWx1ZSl9KSx7cnVuOmwsZXhwZXJpbWVudE5hbWU6cj8ubmFtZXx8IiIsZXhwZXJpbWVudEFsaWFzOnNbZV0sc2VsZWN0ZWQ6Qm9vbGVhbihvJiZvLmdldChsLmlkKSkscnVuQ29sb3I6YVtsLmlkXSxocGFyYW1zOmMsbWV0cmljczpkfX0pKSl9b25SdW5TZWxlY3Rpb25Ub2dnbGUoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChrUyh7cnVuSWQ6ZX0pKX1vblJ1blNlbGVjdGlvbkRibENsaWNrKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goT1Moe3J1bklkOmV9KSl9b25BbGxTZWxlY3Rpb25Ub2dnbGUoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChGUyh7cnVuSWRzOmV9KSl9b25SZWdleEZpbHRlckNoYW5nZShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKE5TKHtyZWdleFN0cmluZzplfSkpfW9uUnVuQ29sb3JDaGFuZ2Uoe3J1bklkOmUsbmV3Q29sb3I6aX0pe3RoaXMuc3RvcmUuZGlzcGF0Y2goTFMoe3J1bklkOmUsbmV3Q29sb3I6aX0pKX1hZGRDb2x1bW4oe2NvbHVtbjplLG5leHRUbzppLHNpZGU6cn0pe3RoaXMuc3RvcmUuZGlzcGF0Y2gocm8uZGFzaGJvYXJkSHBhcmFtQ29sdW1uQWRkZWQoe2NvbHVtbjplLG5leHRUbzppLHNpZGU6cn0pKX1yZW1vdmVDb2x1bW4oZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChyby5kYXNoYm9hcmRIcGFyYW1Db2x1bW5SZW1vdmVkKHtjb2x1bW46ZX0pKX1vcmRlckNvbHVtbnMoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChyby5kYXNoYm9hcmRIcGFyYW1Db2x1bW5PcmRlckNoYW5nZWQoZSkpfWFkZEhwYXJhbUZpbHRlcihlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHJvLmRhc2hib2FyZEhwYXJhbUZpbHRlckFkZGVkKHtuYW1lOmUubmFtZSxmaWx0ZXI6ZS52YWx1ZX0pKX1sb2FkQWxsQ29sdW1ucygpe3RoaXMuc3RvcmUuZGlzcGF0Y2gocm8ubG9hZEFsbERhc2hib2FyZEhwYXJhbXMoKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoSWUpKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJydW5zLXRhYmxlIl1dLGlucHV0czp7Y29sdW1uczoiY29sdW1ucyIsZXhwZXJpbWVudElkczoiZXhwZXJpbWVudElkcyJ9LGRlY2xzOjEwLHZhcnM6MjgsY29uc3RzOltbMywiaGVhZGVycyIsImRhdGEiLCJzZWxlY3RhYmxlQ29sdW1ucyIsIm51bUNvbHVtbnNMb2FkZWQiLCJudW1Db2x1bW5zVG9Mb2FkIiwiY29sdW1uRmlsdGVycyIsInNvcnRpbmdJbmZvIiwiZXhwZXJpbWVudElkcyIsInJlZ2V4RmlsdGVyIiwibG9hZGluZyIsInNvcnREYXRhQnkiLCJvcmRlckNvbHVtbnMiLCJvblNlbGVjdGlvblRvZ2dsZSIsIm9uQWxsU2VsZWN0aW9uVG9nZ2xlIiwib25SdW5Db2xvckNoYW5nZSIsIm9uUmVnZXhGaWx0ZXJDaGFuZ2UiLCJvblNlbGVjdGlvbkRibENsaWNrIiwiYWRkQ29sdW1uIiwicmVtb3ZlQ29sdW1uIiwiYWRkRmlsdGVyIiwibG9hZEFsbENvbHVtbnMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihmKDAsInJ1bnMtZGF0YS10YWJsZSIsMCksQSgic29ydERhdGFCeSIsZnVuY3Rpb24obyl7cmV0dXJuIGkuc29ydERhdGFCeShvKX0pKCJvcmRlckNvbHVtbnMiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9yZGVyQ29sdW1ucyhvKX0pKCJvblNlbGVjdGlvblRvZ2dsZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25SdW5TZWxlY3Rpb25Ub2dnbGUobyl9KSgib25BbGxTZWxlY3Rpb25Ub2dnbGUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uQWxsU2VsZWN0aW9uVG9nZ2xlKG8pfSkoIm9uUnVuQ29sb3JDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uUnVuQ29sb3JDaGFuZ2Uobyl9KSgib25SZWdleEZpbHRlckNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25SZWdleEZpbHRlckNoYW5nZShvKX0pKCJvblNlbGVjdGlvbkRibENsaWNrIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblJ1blNlbGVjdGlvbkRibENsaWNrKG8pfSkoImFkZENvbHVtbiIsZnVuY3Rpb24obyl7cmV0dXJuIGkuYWRkQ29sdW1uKG8pfSkoInJlbW92ZUNvbHVtbiIsZnVuY3Rpb24obyl7cmV0dXJuIGkucmVtb3ZlQ29sdW1uKG8pfSkoImFkZEZpbHRlciIsZnVuY3Rpb24obyl7cmV0dXJuIGkuYWRkSHBhcmFtRmlsdGVyKG8pfSkoImxvYWRBbGxDb2x1bW5zIixmdW5jdGlvbigpe3JldHVybiBpLmxvYWRBbGxDb2x1bW5zKCl9KSxVKDEsImFzeW5jIiksVSgyLCJhc3luYyIpLFUoMywiYXN5bmMiKSxVKDQsImFzeW5jIiksVSg1LCJhc3luYyIpLFUoNiwiYXN5bmMiKSxVKDcsImFzeW5jIiksVSg4LCJhc3luYyIpLFUoOSwiYXN5bmMiKSxnKCkpLDImZSYmYigiaGVhZGVycyIsRygxLDEwLGkucnVuc0NvbHVtbnMkKSkoImRhdGEiLEcoMiwxMixpLnNvcnRlZFJ1bnNUYWJsZURhdGEkKSkoInNlbGVjdGFibGVDb2x1bW5zIixHKDMsMTQsaS5zZWxlY3RhYmxlQ29sdW1ucyQpKSgibnVtQ29sdW1uc0xvYWRlZCIsRyg0LDE2LGkubnVtQ29sdW1uc0xvYWRlZCQpKSgibnVtQ29sdW1uc1RvTG9hZCIsRyg1LDE4LGkubnVtQ29sdW1uc1RvTG9hZCQpKSgiY29sdW1uRmlsdGVycyIsRyg2LDIwLGkuY29sdW1uRmlsdGVycyQpKSgic29ydGluZ0luZm8iLEcoNywyMixpLnNvcnRpbmdJbmZvJCkpKCJleHBlcmltZW50SWRzIixpLmV4cGVyaW1lbnRJZHMpKCJyZWdleEZpbHRlciIsRyg4LDI0LGkucmVnZXhGaWx0ZXIkKSkoImxvYWRpbmciLEcoOSwyNixpLmxvYWRpbmckKSl9LGRlcGVuZGVuY2llczpbZWllLGN0XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgfVxuXG4gICAgICB0Yi1kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxuaWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1sicnVucy1zZWxlY3Rvci1jb21wb25lbnQiXV0saW5wdXRzOntleHBlcmltZW50SWRzOiJleHBlcmltZW50SWRzIixjb2x1bW5zOiJjb2x1bW5zIn0sZGVjbHM6MSx2YXJzOjIsY29uc3RzOltbMywiY29sdW1ucyIsImV4cGVyaW1lbnRJZHMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJmsoMCwicnVucy10YWJsZSIsMCksMiZlJiZiKCJjb2x1bW5zIixpLmNvbHVtbnMpKCJleHBlcmltZW50SWRzIixpLmV4cGVyaW1lbnRJZHMpfSxkZXBlbmRlbmNpZXM6W3RpZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBvdmVyZmxvdzogYXV0bztcbiAgICAgIH1cblxuICAgICAgcnVucy10YWJsZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxpaWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5leHBlcmltZW50SWRzJD10aGlzLnN0b3JlLnNlbGVjdChvcikucGlwZShxKGk9Pmk/P1tdKSksdGhpcy5jb2x1bW5zJD10aGlzLnN0b3JlLnNlbGVjdChvcikucGlwZShxKGk9PltabC5DSEVDS0JPWCxabC5SVU5fTkFNRSxpJiZpLmxlbmd0aD4xP1psLkVYUEVSSU1FTlRfTkFNRTpudWxsLFpsLlJVTl9DT0xPUl0uZmlsdGVyKHI9Pm51bGwhPT1yKSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEllKSl9LG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1sicnVucy1zZWxlY3RvciJdXSxkZWNsczozLHZhcnM6Nixjb25zdHM6W1szLCJleHBlcmltZW50SWRzIiwiY29sdW1ucyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGsoMCwicnVucy1zZWxlY3Rvci1jb21wb25lbnQiLDApLFUoMSwiYXN5bmMiKSxVKDIsImFzeW5jIikpLDImZSYmYigiZXhwZXJpbWVudElkcyIsRygxLDIsaS5leHBlcmltZW50SWRzJCkpKCJjb2x1bW5zIixHKDIsNCxpLmNvbHVtbnMkKSl9LGRlcGVuZGVuY2llczpbbmllLGN0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBrSGUobix0KXsxJm4mJmsoMCwibWV0cmljcy1tYWluLXZpZXciLDIpfXZhciByaWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5ydW5zVGFibGVGdWxsU2NyZWVuJD10aGlzLnN0b3JlLnNlbGVjdCh3Uyl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoSWUpKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWRhc2hib2FyZCJdXSxkZWNsczo0LHZhcnM6Myxjb25zdHM6W1sic2lkZWJhciIsIiJdLFsibWFpbiIsIiIsNCwibmdJZiJdLFsibWFpbiIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGYoMCwidGItZGFzaGJvYXJkLWxheW91dCIpLGsoMSwicnVucy1zZWxlY3RvciIsMCksUygyLGtIZSwxLDAsIm1ldHJpY3MtbWFpbi12aWV3IiwxKSxVKDMsImFzeW5jIiksZygpKSwyJmUmJih2KDIpLGIoIm5nSWYiLCFHKDMsMSxpLnJ1bnNUYWJsZUZ1bGxTY3JlZW4kKSkpfSxkZXBlbmRlbmNpZXM6W05lLF9RLGtuZSxpaWUsY3RdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17Y29udGFpbjpzdHJpY3Q7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtoZWlnaHQ6MTAwJTtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaDtvdmVyZmxvdzpoaWRkZW59Lm5vdGljZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNDUsMTU3LC44NSk7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ZmZWIzYjtjb2xvcjojMjEyMTIxO2Rpc3BsYXk6YmxvY2s7ZmxleDowIDB9dGItZGFzaGJvYXJkLWxheW91dFtfbmdjb250ZW50LSVDT01QJV17ZmxleDoxIDE7b3ZlcmZsb3c6aGlkZGVufW5hdltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1yaWdodDoxcHggc29saWQgI2ViZWJlYjtmbGV4Om5vbmU7d2lkdGg6MzQwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgbmF2W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgbmF2W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzA7Ym9yZGVyLXJpZ2h0LWNvbG9yOiM1NTV9bWV0cmljcy1tYWluLXZpZXdbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MSAxfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksa1Y9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe2ltcG9ydHM6W0RlLGFpLEtuXX0pLG59KSgpLHhBPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1IKHtpbXBvcnRzOltEZV19KSxufSkoKSxPVj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5jaGFuZ2VzPW5ldyBFZSx0aGlzLml0ZW1zUGVyUGFnZUxhYmVsPSJJdGVtcyBwZXIgcGFnZToiLHRoaXMubmV4dFBhZ2VMYWJlbD0iTmV4dCBwYWdlIix0aGlzLnByZXZpb3VzUGFnZUxhYmVsPSJQcmV2aW91cyBwYWdlIix0aGlzLmZpcnN0UGFnZUxhYmVsPSJGaXJzdCBwYWdlIix0aGlzLmxhc3RQYWdlTGFiZWw9Ikxhc3QgcGFnZSIsdGhpcy5nZXRSYW5nZUxhYmVsPShlLGkscik9PntpZigwPT1yfHwwPT1pKXJldHVybmAwIG9mICR7cn1gO2xldCBvPWUqaTtyZXR1cm5gJHtvKzF9IFx1MjAxMyAke288KHI9TWF0aC5tYXgociwwKSk/TWF0aC5taW4obytpLHIpOm8raX0gb2YgJHtyfWB9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxGSGU9e3Byb3ZpZGU6T1YsZGVwczpbW25ldyBrYSxuZXcgaWQsT1ZdXSx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4pe3JldHVybiBufHxuZXcgT1Z9fSxvaWU9KG5ldyB0ZSgiTUFUX1BBR0lOQVRPUl9ERUZBVUxUX09QVElPTlMiKSxhbyhIMShjbGFzc3t9KSksKCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe3Byb3ZpZGVyczpbRkhlXSxpbXBvcnRzOltEZSxLbixYYSxYZ119KSxufSkoKSksa3A9KG5ldyB0ZSgiTUFUX1NPUlRfREVGQVVMVF9PUFRJT05TIiksSDEoYW8oY2xhc3N7fSkpLEw3LkVOVEVSSU5HKyIgIitONy5TVEFOREFSRF9DVVJWRSksRlY9KGZyKCJpbmRpY2F0b3IiLFtTaSgiYWN0aXZlLWFzYywgYXNjIixybih7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDBweCkifSkpLFNpKCJhY3RpdmUtZGVzYywgZGVzYyIscm4oe3RyYW5zZm9ybToidHJhbnNsYXRlWSgxMHB4KSJ9KSksYmkoImFjdGl2ZS1hc2MgPD0+IGFjdGl2ZS1kZXNjIixNaShrcCkpXSksZnIoImxlZnRQb2ludGVyIixbU2koImFjdGl2ZS1hc2MsIGFzYyIscm4oe3RyYW5zZm9ybToicm90YXRlKC00NWRlZykifSkpLFNpKCJhY3RpdmUtZGVzYywgZGVzYyIscm4oe3RyYW5zZm9ybToicm90YXRlKDQ1ZGVnKSJ9KSksYmkoImFjdGl2ZS1hc2MgPD0+IGFjdGl2ZS1kZXNjIixNaShrcCkpXSksZnIoInJpZ2h0UG9pbnRlciIsW1NpKCJhY3RpdmUtYXNjLCBhc2MiLHJuKHt0cmFuc2Zvcm06InJvdGF0ZSg0NWRlZykifSkpLFNpKCJhY3RpdmUtZGVzYywgZGVzYyIscm4oe3RyYW5zZm9ybToicm90YXRlKC00NWRlZykifSkpLGJpKCJhY3RpdmUtYXNjIDw9PiBhY3RpdmUtZGVzYyIsTWkoa3ApKV0pLGZyKCJhcnJvd09wYWNpdHkiLFtTaSgiZGVzYy10by1hY3RpdmUsIGFzYy10by1hY3RpdmUsIGFjdGl2ZSIscm4oe29wYWNpdHk6MX0pKSxTaSgiZGVzYy10by1oaW50LCBhc2MtdG8taGludCwgaGludCIscm4oe29wYWNpdHk6LjU0fSkpLFNpKCJoaW50LXRvLWRlc2MsIGFjdGl2ZS10by1kZXNjLCBkZXNjLCBoaW50LXRvLWFzYywgYWN0aXZlLXRvLWFzYywgYXNjLCB2b2lkIixybih7b3BhY2l0eTowfSkpLGJpKCIqID0+IGFzYywgKiA9PiBkZXNjLCAqID0+IGFjdGl2ZSwgKiA9PiBoaW50LCAqID0+IHZvaWQiLE1pKCIwbXMiKSksYmkoIiogPD0+ICoiLE1pKGtwKSldKSxmcigiYXJyb3dQb3NpdGlvbiIsW2JpKCIqID0+IGRlc2MtdG8taGludCwgKiA9PiBkZXNjLXRvLWFjdGl2ZSIsTWkoa3AsQmIoW3JuKHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoLTI1JSkifSkscm4oe3RyYW5zZm9ybToidHJhbnNsYXRlWSgwKSJ9KV0pKSksYmkoIiogPT4gaGludC10by1kZXNjLCAqID0+IGFjdGl2ZS10by1kZXNjIixNaShrcCxCYihbcm4oe3RyYW5zZm9ybToidHJhbnNsYXRlWSgwKSJ9KSxybih7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDI1JSkifSldKSkpLGJpKCIqID0+IGFzYy10by1oaW50LCAqID0+IGFzYy10by1hY3RpdmUiLE1pKGtwLEJiKFtybih7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDI1JSkifSkscm4oe3RyYW5zZm9ybToidHJhbnNsYXRlWSgwKSJ9KV0pKSksYmkoIiogPT4gaGludC10by1hc2MsICogPT4gYWN0aXZlLXRvLWFzYyIsTWkoa3AsQmIoW3JuKHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMCkifSkscm4oe3RyYW5zZm9ybToidHJhbnNsYXRlWSgtMjUlKSJ9KV0pKSksU2koImRlc2MtdG8taGludCwgYXNjLXRvLWhpbnQsIGhpbnQsIGRlc2MtdG8tYWN0aXZlLCBhc2MtdG8tYWN0aXZlLCBhY3RpdmUiLHJuKHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMCkifSkpLFNpKCJoaW50LXRvLWRlc2MsIGFjdGl2ZS10by1kZXNjLCBkZXNjIixybih7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKC0yNSUpIn0pKSxTaSgiaGludC10by1hc2MsIGFjdGl2ZS10by1hc2MsIGFzYyIscm4oe3RyYW5zZm9ybToidHJhbnNsYXRlWSgyNSUpIn0pKV0pLGZyKCJhbGxvd0NoaWxkcmVuIixbYmkoIiogPD0+ICoiLFtyaCgiQCoiLGloKCkse29wdGlvbmFsOiEwfSldKV0pLCgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmNoYW5nZXM9bmV3IEVlfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSksTEhlPXtwcm92aWRlOkZWLGRlcHM6W1tuZXcga2EsbmV3IGlkLEZWXV0sdXNlRmFjdG9yeTpmdW5jdGlvbihuKXtyZXR1cm4gbnx8bmV3IEZWfX0sYWllPShhbyhjbGFzc3t9KSwoKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9SCh7cHJvdmlkZXJzOltMSGVdLGltcG9ydHM6W0RlLGRuXX0pLG59KSgpKTtmdW5jdGlvbiBWVihuKXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyBue2dldCBzdGlja3koKXtyZXR1cm4gdGhpcy5fc3RpY2t5fXNldCBzdGlja3kodCl7bGV0IGU9dGhpcy5fc3RpY2t5O3RoaXMuX3N0aWNreT12dCh0KSx0aGlzLl9oYXNTdGlja3lDaGFuZ2VkPWUhPT10aGlzLl9zdGlja3l9aGFzU3RpY2t5Q2hhbmdlZCgpe2xldCB0PXRoaXMuX2hhc1N0aWNreUNoYW5nZWQ7cmV0dXJuIHRoaXMuX2hhc1N0aWNreUNoYW5nZWQ9ITEsdH1yZXNldFN0aWNreUNoYW5nZWQoKXt0aGlzLl9oYXNTdGlja3lDaGFuZ2VkPSExfWNvbnN0cnVjdG9yKC4uLnQpe3N1cGVyKC4uLnQpLHRoaXMuX3N0aWNreT0hMSx0aGlzLl9oYXNTdGlja3lDaGFuZ2VkPSExfX19dmFyIEhWPW5ldyB0ZSgiQ0RLX1RBQkxFIiksc2llPShuZXcgdGUoInRleHQtY29sdW1uLW9wdGlvbnMiKSxWVihjbGFzc3t9KSxuZXcgdGUoIl9DT0FMRVNDRURfU1RZTEVfU0NIRURVTEVSIiksKCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMudGVtcGxhdGU9ZSx0aGlzLl9kaWZmZXJzPWl9bmdPbkNoYW5nZXMoZSl7aWYoIXRoaXMuX2NvbHVtbnNEaWZmZXIpe2xldCBpPWUuY29sdW1ucyYmZS5jb2x1bW5zLmN1cnJlbnRWYWx1ZXx8W107dGhpcy5fY29sdW1uc0RpZmZlcj10aGlzLl9kaWZmZXJzLmZpbmQoaSkuY3JlYXRlKCksdGhpcy5fY29sdW1uc0RpZmZlci5kaWZmKGkpfX1nZXRDb2x1bW5zRGlmZigpe3JldHVybiB0aGlzLl9jb2x1bW5zRGlmZmVyLmRpZmYodGhpcy5jb2x1bW5zKX1leHRyYWN0Q2VsbFRlbXBsYXRlKGUpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgbGllP2UuaGVhZGVyQ2VsbC50ZW1wbGF0ZTp0aGlzIGluc3RhbmNlb2YgY2llP2UuZm9vdGVyQ2VsbC50ZW1wbGF0ZTplLmNlbGwudGVtcGxhdGV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMob2kpLEMoVGwpKX0sbi5cdTAyNzVkaXI9TWUoe3R5cGU6bixmZWF0dXJlczpbcXRdfSksbn0pKCkpLFZIZT1WVihjbGFzcyBleHRlbmRzIHNpZXt9KSxsaWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFZIZXtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoZSxpKSx0aGlzLl90YWJsZT1yfW5nT25DaGFuZ2VzKGUpe3N1cGVyLm5nT25DaGFuZ2VzKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKG9pKSxDKFRsKSxDKEhWLDgpKX0sbi5cdTAyNzVkaXI9TWUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2RrSGVhZGVyUm93RGVmIiwiIl1dLGlucHV0czp7Y29sdW1uczpbImNka0hlYWRlclJvd0RlZiIsImNvbHVtbnMiXSxzdGlja3k6WyJjZGtIZWFkZXJSb3dEZWZTdGlja3kiLCJzdGlja3kiXX0sZmVhdHVyZXM6W1hlLHF0XX0pLG59KSgpLEhIZT1WVihjbGFzcyBleHRlbmRzIHNpZXt9KSxjaWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEhIZXtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoZSxpKSx0aGlzLl90YWJsZT1yfW5nT25DaGFuZ2VzKGUpe3N1cGVyLm5nT25DaGFuZ2VzKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKG9pKSxDKFRsKSxDKEhWLDgpKX0sbi5cdTAyNzVkaXI9TWUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2RrRm9vdGVyUm93RGVmIiwiIl1dLGlucHV0czp7Y29sdW1uczpbImNka0Zvb3RlclJvd0RlZiIsImNvbHVtbnMiXSxzdGlja3k6WyJjZGtGb290ZXJSb3dEZWZTdGlja3kiLCJzdGlja3kiXX0sZmVhdHVyZXM6W1hlLHF0XX0pLG59KSgpLGRpZT0obmV3IHRlKCJDREtfU1BMIiksKCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe2ltcG9ydHM6W0NkXX0pLG59KSgpKSx1aWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe2ltcG9ydHM6W2RuLGRpZSxkbl19KSxufSkoKSxDQT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9SCh7aW1wb3J0czpbRGUsYWksWGddfSksbn0pKCkscGllPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1IKHtpbXBvcnRzOltEZSxhaSxybCxLbixHdSxYZ119KSxufSkoKSx2Xz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9SCh7aW1wb3J0czpbRGUsZXAsR3VdfSksbn0pKCkseV89KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe2ltcG9ydHM6W0RlLHBBLGFpXX0pLG59KSgpLE1BPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1IKHtpbXBvcnRzOltEZSxrYyx5Xyx2X119KSxufSkoKSxoaWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe2ltcG9ydHM6W0RlLGFpLEtuXX0pLG59KSgpLHdBPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1IKHtpbXBvcnRzOltEZSxhaSxLbixvbCxDQSxwaWUsTUEsaGllXX0pLG59KSgpLG1pZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9SCh7fSksbn0pKCkseF89KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe2ltcG9ydHM6W0RlLG1pZV19KSxufSkoKSxmaWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe2ltcG9ydHM6W1ZuZSxEZSx3QSx4Xyx5XyxLbixrYyxIdSxybCxNQSxhaSxRdSxxbmUsb2llLG9sLGFpZSx1aWUsdl8sUTEsWGEsdUVdfSksbn0pKCksZ2llPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1IKHtpbXBvcnRzOltEZSxmaWVdfSksbn0pKCksQ189KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe30pLG59KSgpLFNBPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1IKHtpbXBvcnRzOltEZSxhaV19KSxufSkoKSxfaWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZD1uZXcgRix0aGlzLm9uVGltZVNlbGVjdGlvblRvZ2dsZWQ9bmV3IEYsdGhpcy5heGlzRGlyZWN0aW9uPXZhLlZFUlRJQ0FMLHRoaXMuY2FyZEZvYkhlbHBlcj17Z2V0U3RlcEhpZ2hlclRoYW5BeGlzUG9zaXRpb246dGhpcy5nZXRTdGVwSGlnaGVyVGhhbkF4aXNQb3NpdGlvbi5iaW5kKHRoaXMpLGdldFN0ZXBMb3dlclRoYW5BeGlzUG9zaXRpb246dGhpcy5nZXRTdGVwTG93ZXJUaGFuQXhpc1Bvc2l0aW9uLmJpbmQodGhpcyl9fWdldEF4aXNQb3NpdGlvbkZyb21TdGFydFN0ZXAoKXtyZXR1cm4gdGhpcy50ZW1wb3JhbFNjYWxlKHRoaXMudGltZVNlbGVjdGlvbi5zdGFydC5zdGVwKX1nZXRBeGlzUG9zaXRpb25Gcm9tRW5kU3RlcCgpe3JldHVybiBudWxsPT09dGhpcy50aW1lU2VsZWN0aW9uLmVuZD9udWxsOnRoaXMudGVtcG9yYWxTY2FsZSh0aGlzLnRpbWVTZWxlY3Rpb24uZW5kLnN0ZXApfWdldEhpZ2hlc3RTdGVwKCl7cmV0dXJuIHRoaXMuc3RlcHNbdGhpcy5zdGVwcy5sZW5ndGgtMV19Z2V0TG93ZXN0U3RlcCgpe3JldHVybiB0aGlzLnN0ZXBzWzBdfWdldFN0ZXBIaWdoZXJUaGFuQXhpc1Bvc2l0aW9uKGUpe2xldCBpPTA7Zm9yKDtlPnRoaXMudGVtcG9yYWxTY2FsZSh0aGlzLnN0ZXBzW2ldKSYmaTx0aGlzLnN0ZXBzLmxlbmd0aC0xOylpKys7cmV0dXJuIHRoaXMuc3RlcHNbaV19Z2V0U3RlcExvd2VyVGhhbkF4aXNQb3NpdGlvbihlKXtsZXQgaT10aGlzLnN0ZXBzLmxlbmd0aC0xO2Zvcig7ZTx0aGlzLnRlbXBvcmFsU2NhbGUodGhpcy5zdGVwc1tpXSkmJmk+MDspaS0tO3JldHVybiB0aGlzLnN0ZXBzW2ldfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJoaXN0b2dyYW0tY2FyZC1mb2ItY29udHJvbGxlciJdXSxpbnB1dHM6e3N0ZXBzOiJzdGVwcyIsdGltZVNlbGVjdGlvbjoidGltZVNlbGVjdGlvbiIsdGVtcG9yYWxTY2FsZToidGVtcG9yYWxTY2FsZSJ9LG91dHB1dHM6e29uVGltZVNlbGVjdGlvbkNoYW5nZWQ6Im9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLG9uVGltZVNlbGVjdGlvblRvZ2dsZWQ6Im9uVGltZVNlbGVjdGlvblRvZ2dsZWQifSxkZWNsczoxLHZhcnM6Nyxjb25zdHM6W1szLCJheGlzRGlyZWN0aW9uIiwidGltZVNlbGVjdGlvbiIsInN0YXJ0U3RlcEF4aXNQb3NpdGlvbiIsImVuZFN0ZXBBeGlzUG9zaXRpb24iLCJoaWdoZXN0U3RlcCIsImxvd2VzdFN0ZXAiLCJjYXJkRm9iSGVscGVyIiwib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsIm9uVGltZVNlbGVjdGlvblRvZ2dsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihmKDAsImNhcmQtZm9iLWNvbnRyb2xsZXIiLDApLEEoIm9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVGltZVNlbGVjdGlvbkNoYW5nZWQuZW1pdChvKX0pKCJvblRpbWVTZWxlY3Rpb25Ub2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBpLm9uVGltZVNlbGVjdGlvblRvZ2dsZWQuZW1pdCgpfSksZygpKSwyJmUmJmIoImF4aXNEaXJlY3Rpb24iLGkuYXhpc0RpcmVjdGlvbikoInRpbWVTZWxlY3Rpb24iLGkudGltZVNlbGVjdGlvbikoInN0YXJ0U3RlcEF4aXNQb3NpdGlvbiIsaS5nZXRBeGlzUG9zaXRpb25Gcm9tU3RhcnRTdGVwKCkpKCJlbmRTdGVwQXhpc1Bvc2l0aW9uIixpLmdldEF4aXNQb3NpdGlvbkZyb21FbmRTdGVwKCkpKCJoaWdoZXN0U3RlcCIsaS5nZXRIaWdoZXN0U3RlcCgpKSgibG93ZXN0U3RlcCIsaS5nZXRMb3dlc3RTdGVwKCkpKCJjYXJkRm9iSGVscGVyIixpLmNhcmRGb2JIZWxwZXIpfSxkZXBlbmRlbmNpZXM6W2ZBXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxiaWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe2ltcG9ydHM6W1NBLERlLHRwLENfXX0pLG59KSgpO3NiKGdBLFtubixOZSxWaCxRZyxfaWVdLFtdKTt2YXIgTV89KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe2ltcG9ydHM6W0RlXX0pLG59KSgpLEVBPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1IKHtpbXBvcnRzOltEZSx4X119KSxufSkoKSx3Xz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9SCh7aW1wb3J0czpbRGUsYWldfSksbn0pKCksdmllPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1IKHtpbXBvcnRzOltEZSxiaWUsS24sYWksb2wsRUEsTV8sd19dfSksbn0pKCksVEE9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe30pLG59KSgpLHlpZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9SCh7aW1wb3J0czpbRGUsVEEsS24sYWksb2wsZXAsRUEsTV8sd19dfSksbn0pKCkseGllPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1IKHtpbXBvcnRzOltEZSxEbyxLbixhaSxybCxRdV19KSxufSkoKSxEQT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9SCh7aW1wb3J0czpbRGUsRG8seGllLHRwXX0pLG59KSgpLENpZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9SCh7aW1wb3J0czpbRGUsVEEsR3UsS24sSHUscmwsWGEsS1NdfSksbn0pKCksTWllPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1IKHtpbXBvcnRzOltEZSx3QV19KSxufSkoKSx3aWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe2ltcG9ydHM6W1NBLERlLERBXX0pLG59KSgpLFNpZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9SCh7aW1wb3J0czpbRGUsQ2llLHhfLENfLERBLEtuLGFpLFF1LG9sLHRwLE1pZSx3aWUsTV8sd19dfSksbn0pKCksRWllPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1IKHtpbXBvcnRzOltEZSx5aWUsU2llLHZpZSxDX119KSxufSkoKSxUaWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe2ltcG9ydHM6W0RlLFhhXX0pLG59KSgpLERpZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9SCh7aW1wb3J0czpbRGUsS24sSHVdfSksbn0pKCksSUE9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe2ltcG9ydHM6W0RlLFRpZSxLbixVVCxrYyxEaWUsYWksWGEsZXAsTXUsdl9dfSksbn0pKCksSWllPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1IKHtpbXBvcnRzOltEZSxDQSxrYyx5RSxhaSxLbl19KSxufSkoKSxBaWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe2ltcG9ydHM6W0VpZSxEZSx4QSx5XyxwQSxLbixVVCxhaSxybCxvbCxJQSxJaWUsQ2RdfSksbn0pKCksUmllPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1IKHtpbXBvcnRzOltEZSx4QSxrVixBaWUsYWksSUEsZ2llXX0pLG59KSgpLEdIZT0iTWF4IHBpbiBsaW1pdCBleGNlZWRlZC4gUmVtb3ZlIGV4aXN0aW5nIHBpbnMgYmVmb3JlIGFkZGluZyBtb3JlLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvaXNzdWVzLzQyNDIiO2Z1bmN0aW9uIFdIZSgpe3JldHVyblt7YWN0aW9uQ3JlYXRvcjpucCxhbGVydEZyb21BY3Rpb246bj0+e2xldHt3YXNQaW5uZWQ6dCxjYW5DcmVhdGVOZXdQaW5zOmV9PW47cmV0dXJuIHR8fGU/bnVsbDp7bG9jYWxpemVkTWVzc2FnZTpHSGV9fX1dfWZ1bmN0aW9uIHFIZSgpe3JldHVybiBXKF9kLG49Pih7c2NhbGFyU21vb3RoaW5nOm59KSl9ZnVuY3Rpb24gWEhlKCl7cmV0dXJuIFcoQ2gsbj0+KHtpZ25vcmVPdXRsaWVyczpufSkpfWZ1bmN0aW9uIFlIZSgpe3JldHVybiBXKHhoLG49Pih7dG9vbHRpcFNvcnQ6U3RyaW5nKG4pfSkpfWZ1bmN0aW9uIFFIZSgpe3JldHVybiBXKHAxLG49Pih7dGltZVNlcmllc1NldHRpbmdzUGFuZU9wZW5lZDpufSkpfWZ1bmN0aW9uIFpIZSgpe3JldHVybiBXKEpmLG49Pih7dGltZVNlcmllc0NhcmRNaW5XaWR0aDpufSkpfWZ1bmN0aW9uIEtIZSgpe3JldHVybiBXKEN2LG49Pih7c3RlcFNlbGVjdG9yRW5hYmxlZDpufSkpfWZ1bmN0aW9uIEpIZSgpe3JldHVybiBXKFR1LG49Pih7cmFuZ2VTZWxlY3Rpb25FbmFibGVkOm59KSl9ZnVuY3Rpb24gJEhlKCl7cmV0dXJuIFcoRXUsbj0+KHtsaW5rZWRUaW1lRW5hYmxlZDpufSkpfWZ1bmN0aW9uIGU1ZSgpe3JldHVybiBXKGJkLG49Pih7c2F2aW5nUGluc0VuYWJsZWQ6bn0pKX1mdW5jdGlvbiB0NWUoKXtyZXR1cm4gVyhNdixuPT4oe3NpbmdsZVNlbGVjdGlvbkhlYWRlcnM6bn0pKX1mdW5jdGlvbiBuNWUoKXtyZXR1cm4gVyh3dixuPT4oe3JhbmdlU2VsZWN0aW9uSGVhZGVyczpufSkpfXZhciBQaWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe3Byb3ZpZGVyczpbe3Byb3ZpZGU6U04sdXNlRmFjdG9yeTpoUSxkZXBzOltFTl19LHtwcm92aWRlOkVOLHVzZVZhbHVlOiRTfV0saW1wb3J0czpbRGUsTmYsUXMsT2MuZm9yUGx1Z2luKF92LHJpZSksS1MsUmllLHdyLmZvckZlYXR1cmUoSlMsdVEsU04pLENXLE11LGl2LHRvLmZvckZlYXR1cmUoW3BRXSksQ2MucmVnaXN0ZXJBbGVydEFjdGlvbnMoV0hlKSxSaS5kZWZpbmVHbG9iYWxTZXR0aW5nKHFIZSksUmkuZGVmaW5lR2xvYmFsU2V0dGluZyhYSGUpLFJpLmRlZmluZUdsb2JhbFNldHRpbmcoWUhlKSxSaS5kZWZpbmVHbG9iYWxTZXR0aW5nKFFIZSksUmkuZGVmaW5lR2xvYmFsU2V0dGluZyhaSGUpLFJpLmRlZmluZUdsb2JhbFNldHRpbmcoS0hlKSxSaS5kZWZpbmVHbG9iYWxTZXR0aW5nKEpIZSksUmkuZGVmaW5lR2xvYmFsU2V0dGluZygkSGUpLFJpLmRlZmluZUdsb2JhbFNldHRpbmcodDVlKSxSaS5kZWZpbmVHbG9iYWxTZXR0aW5nKG41ZSksUmkuZGVmaW5lR2xvYmFsU2V0dGluZyhlNWUpXX0pLG59KSgpLGtpZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9SCh7aW1wb3J0czpbaVEsUGllXX0pLG59KSgpLFhkPSgoKT0+KGZ1bmN0aW9uKG4pe24uQ1VTVE9NX0VMRU1FTlQ9IkNVU1RPTV9FTEVNRU5UIixuLklGUkFNRT0iSUZSQU1FIixuLk5HX0NPTVBPTkVOVD0iTkdfQ09NUE9ORU5UIixuLk5PTkU9Ik5PTkUifShYZHx8KFhkPXt9KSksWGQpKSgpLGk1ZT1bInBsdWdpbkNvbnRhaW5lciJdLHI1ZT1bIm5nUGx1Z2luQ29udGFpbmVyIl07ZnVuY3Rpb24gbzVlKG4sdCl7MSZuJiZoaSgwKX1mdW5jdGlvbiBhNWUobix0KXtpZigxJm4mJihHdCgwKSxTKDEsbzVlLDEsMCwibmctY29udGFpbmVyIiw5KSxXdCgpKSwyJm4pe2xldCBlPXcoMiksaT1zdCg2KTt2KDEpLGIoIm5nVGVtcGxhdGVPdXRsZXQiLGUuZW52aXJvbm1lbnRGYWlsdXJlTm90Rm91bmRUZW1wbGF0ZT9lLmVudmlyb25tZW50RmFpbHVyZU5vdEZvdW5kVGVtcGxhdGU6aSl9fWZ1bmN0aW9uIHM1ZShuLHQpezEmbiYmaGkoMCl9ZnVuY3Rpb24gbDVlKG4sdCl7aWYoMSZuJiYoR3QoMCksUygxLHM1ZSwxLDAsIm5nLWNvbnRhaW5lciIsOSksV3QoKSksMiZuKXtsZXQgZT13KDIpLGk9c3QoNik7digxKSxiKCJuZ1RlbXBsYXRlT3V0bGV0IixlLmVudmlyb25tZW50RmFpbHVyZVBlcm1pc3Npb25EZW5pZWRUZW1wbGF0ZT9lLmVudmlyb25tZW50RmFpbHVyZVBlcm1pc3Npb25EZW5pZWRUZW1wbGF0ZTppKX19ZnVuY3Rpb24gYzVlKG4sdCl7MSZuJiZoaSgwKX1mdW5jdGlvbiBkNWUobix0KXtpZigxJm4mJihHdCgwKSxTKDEsYzVlLDEsMCwibmctY29udGFpbmVyIiw5KSxXdCgpKSwyJm4pe2xldCBlPXcoMiksaT1zdCg2KTt2KDEpLGIoIm5nVGVtcGxhdGVPdXRsZXQiLGUuZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlP2UuZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlOmkpfX1mdW5jdGlvbiB1NWUobix0KXtpZigxJm4mJihHdCgwKSxmKDEsImgzIiwxMCksVCgyLCIgVGhlcmVcdTIwMTlzIG5vIGRhc2hib2FyZCBieSB0aGUgbmFtZSBvZiBcdTIwMWMiKSxmKDMsImNvZGUiKSxUKDQpLGcoKSxUKDUsIlx1MjAxZC4gIiksZygpLGYoNiwicCIpLFQoNywiWW91IGNhbiBzZWxlY3QgYSBkYXNoYm9hcmQgZnJvbSB0aGUgbGlzdCBhYm92ZS4iKSxnKCksZig4LCJwIiksaGkoOSwxMSksZygpLFd0KCkpLDImbil7bGV0IGU9dygyKSxpPXN0KDgpO3YoNCksa3QoZS5hY3RpdmVQbHVnaW5JZCksdig1KSxiKCJuZ1RlbXBsYXRlT3V0bGV0IixpKX19ZnVuY3Rpb24gcDVlKG4sdCl7aWYoMSZuJiYoR3QoMCksZigxLCJoMyIsMTIpLFQoMiwiIE5vIGRhc2hib2FyZHMgYXJlIGFjdGl2ZSBmb3IgdGhlIGN1cnJlbnQgZGF0YSBzZXQuICIpLGcoKSxmKDMsInAiKSxUKDQsIlByb2JhYmxlIGNhdXNlczoiKSxnKCksZig1LCJ1bCIpKDYsImxpIiksVCg3LCJZb3UgaGF2ZW5cdTIwMTl0IHdyaXR0ZW4gYW55IGRhdGEgdG8geW91ciBldmVudCBmaWxlcy4iKSxnKCksZig4LCJsaSIpLFQoOSwiVGVuc29yQm9hcmQgY2FuXHUyMDE5dCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuIiksZygpKCksVCgxMCwiIElmIHlvdVx1MjAxOXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvIGFkZCBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZSAiKSxmKDExLCJhIiwxMyksVCgxMiwiUkVBRE1FIiksZygpLFQoMTMsIiBhbmQgcGVyaGFwcyB0aGUgIiksZigxNCwiYSIsMTQpLFQoMTUsIlRlbnNvckJvYXJkIHR1dG9yaWFsIiksZygpLFQoMTYsIi4gIiksZigxNywicCIpLFQoMTgsIiBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZSAiKSxmKDE5LCJhIiwxNSksVCgyMCwidGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtcyIpLGcoKSxUKDIxLCIgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuICIpLGcoKSxmKDIyLCJwIiksaGkoMjMsMTEpLGcoKSxXdCgpKSwyJm4pe3coMik7bGV0IGU9c3QoOCk7digyMyksYigibmdUZW1wbGF0ZU91dGxldCIsZSl9fWZ1bmN0aW9uIGg1ZShuLHQpe2lmKDEmbiYmKGYoMCwiZGl2Iiw2KSgxLCJkaXYiLDcpLFMoMixhNWUsMiwxLCJuZy1jb250YWluZXIiLDgpLFMoMyxsNWUsMiwxLCJuZy1jb250YWluZXIiLDgpLFMoNCxkNWUsMiwxLCJuZy1jb250YWluZXIiLDgpLFMoNSx1NWUsMTAsMiwibmctY29udGFpbmVyIiw4KSxTKDYscDVlLDI0LDEsIm5nLWNvbnRhaW5lciIsOCksZygpKCkpLDImbil7bGV0IGU9dygpO2IoIm5nU3dpdGNoIixlLnBsdWdpbkxvYWRTdGF0ZSksdigyKSxiKCJuZ1N3aXRjaENhc2UiLGUuUGx1Z2luTG9hZFN0YXRlLkVOVklST05NRU5UX0ZBSUxVUkVfTk9UX0ZPVU5EKSx2KDEpLGIoIm5nU3dpdGNoQ2FzZSIsZS5QbHVnaW5Mb2FkU3RhdGUuRU5WSVJPTk1FTlRfRkFJTFVSRV9QRVJNSVNTSU9OX0RFTklFRCksdigxKSxiKCJuZ1N3aXRjaENhc2UiLGUuUGx1Z2luTG9hZFN0YXRlLkVOVklST05NRU5UX0ZBSUxVUkVfVU5LTk9XTiksdigxKSxiKCJuZ1N3aXRjaENhc2UiLGUuUGx1Z2luTG9hZFN0YXRlLlVOS05PV05fUExVR0lOX0lEKSx2KDEpLGIoIm5nU3dpdGNoQ2FzZSIsZS5QbHVnaW5Mb2FkU3RhdGUuTk9fRU5BQkxFRF9QTFVHSU5TKX19ZnVuY3Rpb24gbTVlKG4sdCl7aWYoMSZuJiYoZigwLCJoMyIsMTYpLFQoMSwiRGF0YSBjb3VsZCBub3QgYmUgbG9hZGVkLiIpLGcoKSxmKDIsInAiKSxUKDMsIlRoZSBUZW5zb3JCb2FyZCBzZXJ2ZXIgbWF5IGJlIGRvd24gb3IgaW5hY2Nlc3NpYmxlLiIpLGcoKSxmKDQsInAiKSxoaSg1LDExKSxnKCkpLDImbil7dygpO2xldCBlPXN0KDgpO3YoNSksYigibmdUZW1wbGF0ZU91dGxldCIsZSl9fWZ1bmN0aW9uIGY1ZShuLHQpe2lmKDEmbiYmKGYoMCwicCIsMTkpKDEsImkiKSxUKDIsIkxvZyBkaXJlY3Rvcnk6ICIpLGYoMywic3BhbiIpLFQoNCksZygpKCkoKSksMiZuKXtsZXQgZT13KDIpO3YoNCksa3QoZS5kYXRhTG9jYXRpb24pfX1mdW5jdGlvbiBnNWUobix0KXtpZigxJm4mJihmKDAsInNwYW4iLDE3KSxUKDEpLFUoMiwiZGF0ZSIpLGcoKSxTKDMsZjVlLDUsMSwicCIsMTgpKSwyJm4pe2xldCBlPXcoKTt2KDEpLFZlKCJMYXN0IHJlbG9hZDogIixKcCgyLDIsZS5sYXN0VXBkYXRlZCwibWVkaXVtIiksIiIpLHYoMiksYigibmdJZiIsZS5kYXRhTG9jYXRpb24pfX12YXIgXzVlPWZ1bmN0aW9uKG4pe3JldHVybntwbHVnaW5zOiEwLCJpcy1maXJzdC1wYXJ0eS1wbHVnaW4iOm59fSx1bD0oKCk9PihmdW5jdGlvbihuKXtuW24uRU5WSVJPTk1FTlRfRkFJTFVSRV9OT1RfRk9VTkQ9MF09IkVOVklST05NRU5UX0ZBSUxVUkVfTk9UX0ZPVU5EIixuW24uRU5WSVJPTk1FTlRfRkFJTFVSRV9QRVJNSVNTSU9OX0RFTklFRD0xXT0iRU5WSVJPTk1FTlRfRkFJTFVSRV9QRVJNSVNTSU9OX0RFTklFRCIsbltuLkVOVklST05NRU5UX0ZBSUxVUkVfVU5LTk9XTj0yXT0iRU5WSVJPTk1FTlRfRkFJTFVSRV9VTktOT1dOIixuW24uTk9fRU5BQkxFRF9QTFVHSU5TPTNdPSJOT19FTkFCTEVEX1BMVUdJTlMiLG5bbi5VTktOT1dOX1BMVUdJTl9JRD00XT0iVU5LTk9XTl9QTFVHSU5fSUQiLG5bbi5MT0FERUQ9NV09IkxPQURFRCIsbltuLkxPQURJTkc9Nl09IkxPQURJTkcifSh1bHx8KHVsPXt9KSksdWwpKSgpLE9pZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1lLHRoaXMucGx1Z2luUmVnaXN0cnk9aSx0aGlzLnBsdWdpbkFwaUhvc3Q9cix0aGlzLlBsdWdpbkxvYWRTdGF0ZT11bCx0aGlzLkxvYWRpbmdNZWNoYW5pc21UeXBlPVhkLHRoaXMucGx1Z2luSW5zdGFuY2VzPW5ldyBNYXB9bmdPbkNoYW5nZXMoZSl7aWYoIXRoaXMuaXNGZWF0dXJlRmxhZ3NMb2FkZWR8fCF0aGlzLmFjdGl2ZUtub3duUGx1Z2lufHx0aGlzLnNldHRpbmdzTG9hZFN0YXRlPT09UmUuTk9UX0xPQURFRHx8dGhpcy5zZXR0aW5nc0xvYWRTdGF0ZT09PVJlLkxPQURJTkcpcmV0dXJuO2xldCBpPUJvb2xlYW4odGhpcy5hY3RpdmVLbm93blBsdWdpbiYmIXRoaXMucGx1Z2luSW5zdGFuY2VzLmhhcyh0aGlzLmFjdGl2ZUtub3duUGx1Z2luLmlkKSk7aWYoZS5hY3RpdmVLbm93blBsdWdpbnx8ZS5pc0ZlYXR1cmVGbGFnc0xvYWRlZHx8ZS5zZXR0aW5nc0xvYWRTdGF0ZSl7bGV0IHI9ZS5hY3RpdmVLbm93blBsdWdpbj8ucHJldmlvdXNWYWx1ZTtpZihyJiZyLmlkIT09dGhpcy5hY3RpdmVLbm93blBsdWdpbi5pZCYmdGhpcy5oaWRlUGx1Z2luKHIpLGkpe2xldCBvPXRoaXMuY3JlYXRlUGx1Z2luKHRoaXMuYWN0aXZlS25vd25QbHVnaW4pO28mJnRoaXMucGx1Z2luSW5zdGFuY2VzLnNldCh0aGlzLmFjdGl2ZUtub3duUGx1Z2luLmlkLG8pfWVsc2UgdGhpcy5zaG93UGx1Z2luKHRoaXMuYWN0aXZlS25vd25QbHVnaW4pfShpfHxlLmxhc3RVcGRhdGVkKSYmdGhpcy5yZWxvYWQodGhpcy5hY3RpdmVLbm93blBsdWdpbixpKX1oaWRlUGx1Z2luKGUpe2lmKCF0aGlzLnBsdWdpbkluc3RhbmNlcy5oYXMoZS5pZCkpcmV0dXJuO2xldCBpPXRoaXMucGx1Z2luSW5zdGFuY2VzLmdldChlLmlkKTtPYmplY3QuYXNzaWduKGkuc3R5bGUse21heEhlaWdodDowLG92ZXJmbG93OiJoaWRkZW4iLHZpc2liaWxpdHk6ImhpZGRlbiIscG9zaXRpb246ImFic29sdXRlIn0pfXNob3dQbHVnaW4oZSl7aWYoIXRoaXMucGx1Z2luSW5zdGFuY2VzLmhhcyhlLmlkKSlyZXR1cm47bGV0IGk9dGhpcy5wbHVnaW5JbnN0YW5jZXMuZ2V0KGUuaWQpO09iamVjdC5hc3NpZ24oaS5zdHlsZSx7bWF4SGVpZ2h0Om51bGwsb3ZlcmZsb3c6bnVsbCx2aXNpYmlsaXR5Om51bGwscG9zaXRpb246bnVsbH0pfWNyZWF0ZVBsdWdpbihlKXtsZXQgaT1udWxsO3N3aXRjaChlLmxvYWRpbmdfbWVjaGFuaXNtLnR5cGUpe2Nhc2UgWGQuQ1VTVE9NX0VMRU1FTlQ6aT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGUubG9hZGluZ19tZWNoYW5pc20uZWxlbWVudF9uYW1lKSxpLnJlbG9hZE9uUmVhZHk9ITEsaS5mZWF0dXJlRmxhZ3M9dGhpcy5mZWF0dXJlRmxhZ3MsdGhpcy5wbHVnaW5zQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoaSk7YnJlYWs7Y2FzZSBYZC5JRlJBTUU6aWYoIXRoaXMucGx1Z2luQXBpSG9zdCl0aHJvdyBFcnJvcihgSUZSQU1FLWJhc2VkIHBsdWdpbnMgbm90IHN1cHBvcnRlZDogJHtlLmlkfWApO2k9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIiksaS5zZXRBdHRyaWJ1dGUoInNyYyIsYGRhdGEvcGx1Z2luX2VudHJ5Lmh0bWw/bmFtZT0ke2UuaWR9YCksdGhpcy5wbHVnaW5BcGlIb3N0LnJlZ2lzdGVyUGx1Z2luSWZyYW1lKGksZS5pZCksdGhpcy5wbHVnaW5zQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoaSk7YnJlYWs7Y2FzZSBYZC5OR19DT01QT05FTlQ6bGV0IHI9dGhpcy5wbHVnaW5SZWdpc3RyeS5nZXRDb21wb25lbnQoZS5pZCk7aWYocil7bGV0IG89dGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3Rvcnkocik7aT10aGlzLm5nUGx1Z2luQ29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudChvKS5sb2NhdGlvbi5uYXRpdmVFbGVtZW50fWVsc2UgY29uc29sZS5lcnJvcihgTm8gcmVnaXN0ZXJlZCBBbmd1bGFyIGNvbXBvbmVudCBmb3IgcGx1Z2luOiAke2UuaWR9YCk7YnJlYWs7Y2FzZSBYZC5OT05FOmJyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVW5leHBlY3RlZCBwbHVnaW4iKX1yZXR1cm4gaX1yZWxvYWQoZSxpKXtpZighaSYmZS5kaXNhYmxlX3JlbG9hZClyZXR1cm47bGV0IHI9dGhpcy5wbHVnaW5JbnN0YW5jZXMuZ2V0KGUuaWQpO3ImJnIucmVsb2FkJiZyLnJlbG9hZCgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGhvKSxDKE9jKSxDKFIxLDgpKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJwbHVnaW5zLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihVZShpNWUsNyx4ZSksVWUocjVlLDcsZWkpKSwyJmUpe2xldCByO2JlKHI9dmUoKSkmJihpLnBsdWdpbnNDb250YWluZXI9ci5maXJzdCksYmUocj12ZSgpKSYmKGkubmdQbHVnaW5Db250YWluZXI9ci5maXJzdCl9fSxpbnB1dHM6e2FjdGl2ZVBsdWdpbklkOiJhY3RpdmVQbHVnaW5JZCIsYWN0aXZlS25vd25QbHVnaW46ImFjdGl2ZUtub3duUGx1Z2luIixwbHVnaW5Mb2FkU3RhdGU6InBsdWdpbkxvYWRTdGF0ZSIsZGF0YUxvY2F0aW9uOiJkYXRhTG9jYXRpb24iLGlzRmVhdHVyZUZsYWdzTG9hZGVkOiJpc0ZlYXR1cmVGbGFnc0xvYWRlZCIsc2V0dGluZ3NMb2FkU3RhdGU6InNldHRpbmdzTG9hZFN0YXRlIixmZWF0dXJlRmxhZ3M6ImZlYXR1cmVGbGFncyIsbGFzdFVwZGF0ZWQ6Imxhc3RVcGRhdGVkIixlbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlOiJlbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlIixlbnZpcm9ubWVudEZhaWx1cmVQZXJtaXNzaW9uRGVuaWVkVGVtcGxhdGU6ImVudmlyb25tZW50RmFpbHVyZVBlcm1pc3Npb25EZW5pZWRUZW1wbGF0ZSIsZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlOiJlbnZpcm9ubWVudEZhaWx1cmVVbmtub3duVGVtcGxhdGUifSxmZWF0dXJlczpbcXRdLGRlY2xzOjksdmFyczo0LGNvbnN0czpbWzMsIm5nQ2xhc3MiXSxbInBsdWdpbkNvbnRhaW5lciIsIiJdLFsibmdQbHVnaW5Db250YWluZXIiLCIiXSxbImNsYXNzIiwid2FybmluZyIsMywibmdTd2l0Y2giLDQsIm5nSWYiXSxbImVudmlyb25tZW50RmFpbHVyZURlZmF1bHRUZW1wbGF0ZSIsIiJdLFsiZGF0ZUFuZERhdGFMb2NhdGlvbiIsIiJdLFsxLCJ3YXJuaW5nIiwzLCJuZ1N3aXRjaCJdLFsxLCJ3YXJuaW5nLW1lc3NhZ2UiXSxbNCwibmdTd2l0Y2hDYXNlIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiXSxbMSwidW5rbm93bi1wbHVnaW4iXSxbMywibmdUZW1wbGF0ZU91dGxldCJdLFsxLCJuby1hY3RpdmUtcGx1Z2luIl0sWyJocmVmIiwiaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIl0sWyJocmVmIiwiaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCJdLFsiaHJlZiIsImh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciXSxbMSwiZW52aXJvbm1lbnQtbm90LWxvYWRlZCJdLFsxLCJsYXN0LXJlbG9hZC10aW1lIl0sWyJjbGFzcyIsImRhdGEtbG9jYXRpb24iLDQsIm5nSWYiXSxbMSwiZGF0YS1sb2NhdGlvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGYoMCwiZGl2IiwwLDEpLGhpKDIsbnVsbCwyKSxnKCksUyg0LGg1ZSw3LDYsImRpdiIsMyksUyg1LG01ZSw2LDEsIm5nLXRlbXBsYXRlIixudWxsLDQsanQpLFMoNyxnNWUsNCw1LCJuZy10ZW1wbGF0ZSIsbnVsbCw1LGp0KSksMiZlJiYoYigibmdDbGFzcyIsVW4oMixfNWUsKG51bGw9PWkuYWN0aXZlS25vd25QbHVnaW4/bnVsbDppLmFjdGl2ZUtub3duUGx1Z2luLmxvYWRpbmdfbWVjaGFuaXNtLnR5cGUpIT09aS5Mb2FkaW5nTWVjaGFuaXNtVHlwZS5JRlJBTUUpKSx2KDQpLGIoIm5nSWYiLGkucGx1Z2luTG9hZFN0YXRlIT09aS5QbHVnaW5Mb2FkU3RhdGUuTE9BREVEJiZpLnBsdWdpbkxvYWRTdGF0ZSE9PWkuUGx1Z2luTG9hZFN0YXRlLkxPQURJTkcpKX0sZGVwZW5kZW5jaWVzOlt3bixOZSxlbyxtcixrcix3Zl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzIxMjEyMTtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5wbHVnaW5zLmlzLWZpcnN0LXBhcnR5LXBsdWdpbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwO2NvbG9yOiNmZmZ9LnBsdWdpbnNbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlfS53YXJuaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiNmZmY7Ym90dG9tOjA7bGVmdDowO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjB9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLndhcm5pbmdbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAud2FybmluZ1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojMzAzMDMwfS53YXJuaW5nLW1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiMyMTIxMjE7bWFyZ2luOjgwcHggYXV0byAwO21heC13aWR0aDo1NDBweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAud2FybmluZy1tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLndhcm5pbmctbWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2ZmZn0ubGFzdC1yZWxvYWQtdGltZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zdHlsZTppdGFsaWN9LnBsdWdpbnNbX25nY29udGVudC0lQ09NUCVdICAgICBpZnJhbWV7Ym9yZGVyOjA7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksYjVlPVcoR2YsWm8sKG4sdCk9PnQmJm5bdF0/T2JqZWN0LmFzc2lnbih7aWQ6dH0sblt0XSk6bnVsbCksQUE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5hY3RpdmVLbm93blBsdWdpbiQ9dGhpcy5zdG9yZS5zZWxlY3QoYjVlKSx0aGlzLmFjdGl2ZVBsdWdpbklkJD10aGlzLnN0b3JlLnNlbGVjdChabyksdGhpcy5wbHVnaW5Mb2FkU3RhdGUkPUluKHRoaXMuYWN0aXZlS25vd25QbHVnaW4kLHRoaXMuYWN0aXZlUGx1Z2luSWQkLHRoaXMuc3RvcmUuc2VsZWN0KHhTKSkucGlwZShxKChbaSxyLG9dKT0+bnVsbCE9PW8uZmFpbHVyZUNvZGU/by5mYWlsdXJlQ29kZT09PVlzLk5PVF9GT1VORD91bC5FTlZJUk9OTUVOVF9GQUlMVVJFX05PVF9GT1VORDpvLmZhaWx1cmVDb2RlPT09WXMuUEVSTUlTU0lPTl9ERU5JRUQ/dWwuRU5WSVJPTk1FTlRfRkFJTFVSRV9QRVJNSVNTSU9OX0RFTklFRDp1bC5FTlZJUk9OTUVOVF9GQUlMVVJFX1VOS05PV046bnVsbCE9PWk/dWwuTE9BREVEOm51bGw9PT1vLmxhc3RMb2FkZWRUaW1lSW5NcyYmby5zdGF0ZT09PVJlLkxPQURJTkc/dWwuTE9BRElORzpyP3VsLlVOS05PV05fUExVR0lOX0lEOnVsLk5PX0VOQUJMRURfUExVR0lOUykpLHRoaXMubGFzdExvYWRlZFRpbWVJbk1zJD10aGlzLnN0b3JlLnNlbGVjdChqZiksdGhpcy5kYXRhTG9jYXRpb24kPXRoaXMuc3RvcmUuc2VsZWN0KENTKS5waXBlKHEoaT0+aS5kYXRhX2xvY2F0aW9uKSksdGhpcy5pc0ZlYXR1cmVGbGFnc0xvYWRlZCQ9dGhpcy5zdG9yZS5zZWxlY3QoYnUpLHRoaXMuZmVhdHVyZUZsYWdzJD10aGlzLnN0b3JlLnNlbGVjdChRbyksdGhpcy5zZXR0aW5nc0xvYWRTdGF0ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoSGEuZ2V0U2V0dGluZ3NMb2FkU3RhdGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEllKSl9LG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1sicGx1Z2lucyJdXSxpbnB1dHM6e2Vudmlyb25tZW50RmFpbHVyZU5vdEZvdW5kVGVtcGxhdGU6ImVudmlyb25tZW50RmFpbHVyZU5vdEZvdW5kVGVtcGxhdGUiLGVudmlyb25tZW50RmFpbHVyZVBlcm1pc3Npb25EZW5pZWRUZW1wbGF0ZToiZW52aXJvbm1lbnRGYWlsdXJlUGVybWlzc2lvbkRlbmllZFRlbXBsYXRlIixlbnZpcm9ubWVudEZhaWx1cmVVbmtub3duVGVtcGxhdGU6ImVudmlyb25tZW50RmFpbHVyZVVua25vd25UZW1wbGF0ZSJ9LGRlY2xzOjksdmFyczoyNyxjb25zdHM6W1szLCJhY3RpdmVLbm93blBsdWdpbiIsImFjdGl2ZVBsdWdpbklkIiwiZGF0YUxvY2F0aW9uIiwibGFzdFVwZGF0ZWQiLCJwbHVnaW5Mb2FkU3RhdGUiLCJpc0ZlYXR1cmVGbGFnc0xvYWRlZCIsInNldHRpbmdzTG9hZFN0YXRlIiwiZmVhdHVyZUZsYWdzIiwiZW52aXJvbm1lbnRGYWlsdXJlTm90Rm91bmRUZW1wbGF0ZSIsImVudmlyb25tZW50RmFpbHVyZVBlcm1pc3Npb25EZW5pZWRUZW1wbGF0ZSIsImVudmlyb25tZW50RmFpbHVyZVVua25vd25UZW1wbGF0ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGsoMCwicGx1Z2lucy1jb21wb25lbnQiLDApLFUoMSwiYXN5bmMiKSxVKDIsImFzeW5jIiksVSgzLCJhc3luYyIpLFUoNCwiYXN5bmMiKSxVKDUsImFzeW5jIiksVSg2LCJhc3luYyIpLFUoNywiYXN5bmMiKSxVKDgsImFzeW5jIikpLDImZSYmYigiYWN0aXZlS25vd25QbHVnaW4iLEcoMSwxMSxpLmFjdGl2ZUtub3duUGx1Z2luJCkpKCJhY3RpdmVQbHVnaW5JZCIsRygyLDEzLGkuYWN0aXZlUGx1Z2luSWQkKSkoImRhdGFMb2NhdGlvbiIsRygzLDE1LGkuZGF0YUxvY2F0aW9uJCkpKCJsYXN0VXBkYXRlZCIsRyg0LDE3LGkubGFzdExvYWRlZFRpbWVJbk1zJCkpKCJwbHVnaW5Mb2FkU3RhdGUiLEcoNSwxOSxpLnBsdWdpbkxvYWRTdGF0ZSQpKSgiaXNGZWF0dXJlRmxhZ3NMb2FkZWQiLEcoNiwyMSxpLmlzRmVhdHVyZUZsYWdzTG9hZGVkJCkpKCJzZXR0aW5nc0xvYWRTdGF0ZSIsRyg3LDIzLGkuc2V0dGluZ3NMb2FkU3RhdGUkKSkoImZlYXR1cmVGbGFncyIsRyg4LDI1LGkuZmVhdHVyZUZsYWdzJCkpKCJlbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlIixpLmVudmlyb25tZW50RmFpbHVyZU5vdEZvdW5kVGVtcGxhdGUpKCJlbnZpcm9ubWVudEZhaWx1cmVQZXJtaXNzaW9uRGVuaWVkVGVtcGxhdGUiLGkuZW52aXJvbm1lbnRGYWlsdXJlUGVybWlzc2lvbkRlbmllZFRlbXBsYXRlKSgiZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlIixpLmVudmlyb25tZW50RmFpbHVyZVVua25vd25UZW1wbGF0ZSl9LHN0eWxlczpbInBsdWdpbnMtY29tcG9uZW50W19uZ2NvbnRlbnQtJUNPTVAlXSB7IGhlaWdodDogMTAwJTsgfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksUkE9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe2ltcG9ydHM6W1FzLERlLE9jXX0pLG59KSgpO3NiKEFBLFtPaWVdLFtjdF0pO3ZhciBGaWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuc3RvcmU9ZSx0aGlzLmRvY3VtZW50PWksdGhpcy5vblZpc2liaWxpdHlDaGFuZ2U9dGhpcy5vblZpc2liaWxpdHlDaGFuZ2VJbXBsLmJpbmQodGhpcyksdGhpcy5yZWxvYWRFbmFibGVkJD10aGlzLnN0b3JlLnBpcGUodW4oSGEuZ2V0UmVsb2FkRW5hYmxlZCkpLHRoaXMucmVsb2FkUGVyaW9kSW5NcyQ9dGhpcy5zdG9yZS5waXBlKHVuKEhhLmdldFJlbG9hZFBlcmlvZEluTXMpKSx0aGlzLnJlbG9hZFRpbWVySWQ9bnVsbCx0aGlzLm1pc3NlZEF1dG9SZWxvYWQ9ITEsdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBFZX1uZ09uSW5pdCgpe3RoaXMuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsdGhpcy5vblZpc2liaWxpdHlDaGFuZ2UpLEluKHRoaXMucmVsb2FkRW5hYmxlZCQucGlwZShyaSgpKSx0aGlzLnJlbG9hZFBlcmlvZEluTXMkLnBpcGUocmkoKSkpLnBpcGUoaXQodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKChbZSxpXSk9Pnt0aGlzLmNhbmNlbExvYWQoKSxlJiZ0aGlzLmxvYWQoaSl9KX1vblZpc2liaWxpdHlDaGFuZ2VJbXBsKCl7InZpc2libGUiPT09dGhpcy5kb2N1bWVudC52aXNpYmlsaXR5U3RhdGUmJnRoaXMubWlzc2VkQXV0b1JlbG9hZCYmKHRoaXMubWlzc2VkQXV0b1JlbG9hZD0hMSx0aGlzLnN0b3JlLmRpc3BhdGNoKG1hKCkpKX1sb2FkKGUpe3RoaXMucmVsb2FkVGltZXJJZD1zZXRUaW1lb3V0KCgpPT57InZpc2libGUiPT09dGhpcy5kb2N1bWVudC52aXNpYmlsaXR5U3RhdGU/dGhpcy5zdG9yZS5kaXNwYXRjaChtYSgpKTp0aGlzLm1pc3NlZEF1dG9SZWxvYWQ9ITAsdGhpcy5sb2FkKGUpfSxlKX1jYW5jZWxMb2FkKCl7bnVsbCE9PXRoaXMucmVsb2FkVGltZXJJZCYmY2xlYXJUaW1lb3V0KHRoaXMucmVsb2FkVGltZXJJZCksdGhpcy5yZWxvYWRUaW1lcklkPW51bGx9bmdPbkRlc3Ryb3koKXt0aGlzLmNhbmNlbExvYWQoKSx0aGlzLmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHRoaXMub25WaXNpYmlsaXR5Q2hhbmdlKSx0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEllKSxDKE50KSl9LG4uXHUwMjc1Y21wPVAoe3R5cGU6bixzZWxlY3RvcnM6W1sicmVsb2FkZXIiXV0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXt9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLE5pZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9UCh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0ZW5zb3Jib2FyZC13cmFwcGVyLWNvbXBvbmVudCJdXSxkZWNsczoyLHZhcnM6MCxjb25zdHM6W1sxLCJwbHVnaW5zIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiZrKDAsInBsdWdpbnMiLDApKDEsInJlbG9hZGVyIil9LGRlcGVuZGVuY2llczpbQUEsRmllXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfVxuXG4gICAgICAucGx1Z2luc1tfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBmbGV4OiAxIDE7XG4gICAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxMaWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCkselY9InNtb290aGluZyIsVVY9InJ1bkNvbG9yR3JvdXAiLGpWPSJ0YWdGaWx0ZXIiLEdWPSJydW5GaWx0ZXIiLFdWPSJyZWdleDoiLHFWPSJyZWdleF9ieV9leHA6IixQQT1jbGFzcyBleHRlbmRzIExpZXtnZXRNZXRyaWNzUGlubmVkQ2FyZHModCl7cmV0dXJuIEluKFt0LnNlbGVjdChLZiksdC5zZWxlY3QoUFcpXSkucGlwZShxKChbZSxpXSk9PntpZighZS5sZW5ndGgmJiFpLmxlbmd0aClyZXR1cm5bXTtsZXQgbz1bLi4uZS5tYXAoKHtwbHVnaW46YSx0YWc6cyxzYW1wbGU6bCxydW5JZDpjfSk9PntsZXQgZD17cGx1Z2luOmEsdGFnOnN9O3JldHVybiBncyhhKSYmKGQucnVuSWQ9YyksZnMoYSkmJihkLnNhbXBsZT1sKSxkfSksLi4uaV07cmV0dXJuW3trZXk6InBpbm5lZENhcmRzIix2YWx1ZTpKU09OLnN0cmluZ2lmeShvKX1dfSkpfXNlcmlhbGl6ZVN0YXRlVG9RdWVyeVBhcmFtcyh0KXtyZXR1cm4gSW4oW3RoaXMuZ2V0TWV0cmljc1Bpbm5lZENhcmRzKHQpLHQuc2VsZWN0KEZsKS5waXBlKHEoZT0+ZT9be2tleTpqVix2YWx1ZTplfV06W10pKSxJbihbdC5zZWxlY3Qoc3YpLHQuc2VsZWN0KGZoKV0pLnBpcGUocSgoW2UsaV0pPT5mdW5jdGlvbihuLHQpe3JldHVybiBPYmplY3QuZW50cmllcyhuKS5tYXAoKFtlLGldKT0+e2lmKHZvaWQgMD09PWkpcmV0dXJue307bGV0IHI9dFtlXTtyZXR1cm4gciYmci5xdWVyeVBhcmFtT3ZlcnJpZGU/e2tleTpyLnF1ZXJ5UGFyYW1PdmVycmlkZSx2YWx1ZTppPy50b1N0cmluZygpfTp7fX0pLmZpbHRlcigoe2tleTplLHZhbHVlOml9KT0+ZSYmdm9pZCAwIT09aSl9KGUsaSkpKSx0LnNlbGVjdChGVykucGlwZShxKGU9Pk51bWJlci5pc0Zpbml0ZShlLnNjYWxhclNtb290aGluZyk/W3trZXk6elYsdmFsdWU6U3RyaW5nKGUuc2NhbGFyU21vb3RoaW5nKX1dOltdKSksdC5zZWxlY3QodDIpLnBpcGUocShlPT57aWYoIWUpcmV0dXJuW107bGV0IGk7c3dpdGNoKGUua2V5KXtjYXNlIFluLkVYUEVSSU1FTlQ6aT0iZXhwZXJpbWVudCI7YnJlYWs7Y2FzZSBZbi5SVU46aT0icnVuIjticmVhaztjYXNlIFluLlJFR0VYOmk9YCR7V1Z9JHtlLnJlZ2V4U3RyaW5nfWA7YnJlYWs7Y2FzZSBZbi5SRUdFWF9CWV9FWFA6aT1gJHtxVn0ke2UucmVnZXhTdHJpbmd9YDticmVhaztkZWZhdWx0OnRocm93IG5ldyBSYW5nZUVycm9yKCJTZXJpYWxpemF0aW9uIG5vdCBpbXBsZW1lbnRlZCIpfXJldHVyblt7a2V5OlVWLHZhbHVlOml9XX0pKSx0LnNlbGVjdChBdSkucGlwZShxKGU9PmU/W3trZXk6R1YsdmFsdWU6ZX1dOltdKSldKS5waXBlKFZpKHQuc2VsZWN0KEI2KSkscSgoW2UsaV0pPT57bGV0IHI9bmV3IFNldChlLmZsYXQoKS5tYXAoYT0+YS5rZXkpKSxvPU9iamVjdC5lbnRyaWVzKGkpLmZpbHRlcigoW2FdKT0+IXIuaGFzKGEpKS5tYXAoKFthLHNdKT0+KHtrZXk6YSx2YWx1ZTpzfSkpO3JldHVyblsuLi5lLC4uLm9dLmZsYXQoKX0pKX1kZXNlcmlhbGl6ZVF1ZXJ5UGFyYW1zKHQpe2xldCBlPW51bGwsaT1udWxsLHI9bnVsbCxvPW51bGwsYT1udWxsLHM9e307Zm9yKGxldHtrZXk6bCx2YWx1ZTpjfW9mIHQpc3dpdGNoKGwpe2Nhc2UicGlubmVkQ2FyZHMiOmU9eDVlKGMpO2JyZWFrO2Nhc2UgelY6aT1OdW1iZXIoYyk7YnJlYWs7Y2FzZSBVVjpzd2l0Y2goYyl7Y2FzZSJleHBlcmltZW50IjpvPXtrZXk6WW4uRVhQRVJJTUVOVH07YnJlYWs7Y2FzZSJydW4iOm89e2tleTpZbi5SVU59fWlmKGMuc3RhcnRzV2l0aChXVikpe2xldCBkPWMuc2xpY2UoV1YubGVuZ3RoKTtvPXtrZXk6WW4uUkVHRVgscmVnZXhTdHJpbmc6ZH19aWYoYy5zdGFydHNXaXRoKHFWKSl7bGV0IGQ9Yy5zbGljZShxVi5sZW5ndGgpO289e2tleTpZbi5SRUdFWF9CWV9FWFAscmVnZXhTdHJpbmc6ZH19YnJlYWs7Y2FzZSBqVjpyPWM7YnJlYWs7Y2FzZSBHVjphPWM7YnJlYWs7ZGVmYXVsdDpzW2xdPWN9cmV0dXJue3Vua25vd25RdWVyeVBhcmFtczpzLG1ldHJpY3M6e3Bpbm5lZENhcmRzOmV8fFtdLHNtb290aGluZzppLHRhZ0ZpbHRlcjpyfSxydW5zOntncm91cEJ5Om8scmVnZXhGaWx0ZXI6YX19fX07ZnVuY3Rpb24geDVlKG4pe2xldCB0O3RyeXt0PUpTT04ucGFyc2Uobil9Y2F0Y2h7cmV0dXJuIG51bGx9aWYoIUFycmF5LmlzQXJyYXkodCkpcmV0dXJuIG51bGw7bGV0IGU9W107Zm9yKGxldCBpIG9mIHQpe2xldCBvPSJzdHJpbmciPT10eXBlb2YgaS5ydW5JZCxhPSJudW1iZXIiPT10eXBlb2YgaS5zYW1wbGU7aWYoISgic3RyaW5nIj09dHlwZW9mIGkucGx1Z2luJiYic3RyaW5nIj09dHlwZW9mIGkudGFnJiYob3x8dHlwZW9mIGkucnVuSWQ+InUiKSYmKGF8fHR5cGVvZiBpLnNhbXBsZT4idSIpJiZhVyhpLnBsdWdpbikmJmkudGFnKSljb250aW51ZTtpZihncyhpLnBsdWdpbikpe2lmKCFpLnJ1bklkKWNvbnRpbnVlfWVsc2UgaWYoaS5ydW5JZCljb250aW51ZTtpZihhJiYoIWZzKGkucGx1Z2luKXx8IU51bWJlci5pc0ludGVnZXIoaS5zYW1wbGUpfHxpLnNhbXBsZTwwKSljb250aW51ZTtsZXQgZD17cGx1Z2luOmkucGx1Z2luLHRhZzppLnRhZ307byYmKGQucnVuSWQ9aS5ydW5JZCksYSYmKGQuc2FtcGxlPWkuc2FtcGxlKSxlLnB1c2goZCl9cmV0dXJuIGV9ZnVuY3Rpb24gVmllKCl7cmV0dXJuW3tyb3V0ZUtpbmQ6Q24uRVhQRVJJTUVOVCxwYXRoOiIvIixuZ0NvbXBvbmVudDpOaWUsZGVmYXVsdFJvdXRlOiEwLGRlZXBMaW5rUHJvdmlkZXI6bmV3IFBBfV19ZnVuY3Rpb24gSGllKCl7cmV0dXJuIG49Pih0LGUpPT5uKHQsZSl9UEE9VjQoW096KCldLFBBKTt2YXIgemllPW5ldyB0ZSgiUm9vdCByZWR1Y2VycyB0b2tlbiIse2ZhY3Rvcnk6KCk9Pih7fSl9KSxVaWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe3Byb3ZpZGVyczpbe3Byb3ZpZGU6RGYsdXNlRmFjdG9yeTpIaWUsbXVsdGk6ITB9XSxpbXBvcnRzOlt3ci5mb3JSb290KHppZSx7cnVudGltZUNoZWNrczp7c3RyaWN0U3RhdGVJbW11dGFiaWxpdHk6ITAsc3RyaWN0QWN0aW9uSW1tdXRhYmlsaXR5OiEwLHN0cmljdEFjdGlvblNlcmlhbGl6YWJpbGl0eTohMSxzdHJpY3RTdGF0ZVNlcmlhbGl6YWJpbGl0eTohMX19KSx0by5mb3JSb290KFtdKV19KSxufSkoKSxqaWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUgoe30pLG59KSgpLEdpZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9SCh7aW1wb3J0czpbRGUsUkEsamllXX0pLG59KSgpLFhWPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm4sYm9vdHN0cmFwOltUWF19KSxuLlx1MDI3NWluaj1IKHtpbXBvcnRzOltNdSxMWCx3dyxaRyxOZixEWCxSbC5yZWdpc3RlclJvdXRlcyhWaWUpLFExLFkxLElYLEdpZSxRcyxGWCxSWCxWWCxSUyxIWCxQWCxpdixSMSxSQSxFMSx4RSxVaWUsa2llXX0pLG59KSgpOyJsb2FkaW5nIiE9PWRvY3VtZW50LnJlYWR5U3RhdGU/bE8oKS5ib290c3RyYXBNb2R1bGUoWFYpOndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwoKT0+e2xPKCkuYm9vdHN0cmFwTW9kdWxlKFhWKX0pfSkoKTsKLyoqIHZpbTogZXQ6dHM9NDpzdz00OnN0cz00CiAqIEBsaWNlbnNlIFJlcXVpcmVKUyAyLjMuNiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycy4KICogUmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UsIGh0dHBzOi8vZ2l0aHViLmNvbS9yZXF1aXJlanMvcmVxdWlyZWpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0UKICovCi8vTm90IHVzaW5nIHN0cmljdDogdW5ldmVuIHN0cmljdCBzdXBwb3J0IGluIGJyb3dzZXJzLCAjMzkyLCBhbmQgY2F1c2VzCi8vcHJvYmxlbXMgd2l0aCByZXF1aXJlanMuZXhlYygpL3RyYW5zcGlsZXIgcGx1Z2lucyB0aGF0IG1heSBub3QgYmUgc3RyaWN0LgovKmpzbGludCByZWdleHA6IHRydWUsIG5vbWVuOiB0cnVlLCBzbG9wcHk6IHRydWUgKi8KLypnbG9iYWwgd2luZG93LCBuYXZpZ2F0b3IsIGRvY3VtZW50LCBpbXBvcnRTY3JpcHRzLCBzZXRUaW1lb3V0LCBvcGVyYSAqLwoKdmFyIHJlcXVpcmVqcywgcmVxdWlyZSwgZGVmaW5lOwooZnVuY3Rpb24gKGdsb2JhbCwgc2V0VGltZW91dCkgewogICAgdmFyIHJlcSwgcywgaGVhZCwgYmFzZUVsZW1lbnQsIGRhdGFNYWluLCBzcmMsCiAgICAgICAgaW50ZXJhY3RpdmVTY3JpcHQsIGN1cnJlbnRseUFkZGluZ1NjcmlwdCwgbWFpblNjcmlwdCwgc3ViUGF0aCwKICAgICAgICB2ZXJzaW9uID0gJzIuMy42JywKICAgICAgICBjb21tZW50UmVnRXhwID0gL1wvXCpbXHNcU10qP1wqXC98KFteOiInPV18XilcL1wvLiokL21nLAogICAgICAgIGNqc1JlcXVpcmVSZWdFeHAgPSAvW14uXVxzKnJlcXVpcmVccypcKFxzKlsiJ10oW14nIlxzXSspWyInXVxzKlwpL2csCiAgICAgICAganNTdWZmaXhSZWdFeHAgPSAvXC5qcyQvLAogICAgICAgIGN1cnJEaXJSZWdFeHAgPSAvXlwuXC8vLAogICAgICAgIG9wID0gT2JqZWN0LnByb3RvdHlwZSwKICAgICAgICBvc3RyaW5nID0gb3AudG9TdHJpbmcsCiAgICAgICAgaGFzT3duID0gb3AuaGFzT3duUHJvcGVydHksCiAgICAgICAgaXNCcm93c2VyID0gISEodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmRvY3VtZW50KSwKICAgICAgICBpc1dlYldvcmtlciA9ICFpc0Jyb3dzZXIgJiYgdHlwZW9mIGltcG9ydFNjcmlwdHMgIT09ICd1bmRlZmluZWQnLAogICAgICAgIC8vUFMzIGluZGljYXRlcyBsb2FkZWQgYW5kIGNvbXBsZXRlLCBidXQgbmVlZCB0byB3YWl0IGZvciBjb21wbGV0ZQogICAgICAgIC8vc3BlY2lmaWNhbGx5LiBTZXF1ZW5jZSBpcyAnbG9hZGluZycsICdsb2FkZWQnLCBleGVjdXRpb24sCiAgICAgICAgLy8gdGhlbiAnY29tcGxldGUnLiBUaGUgVUEgY2hlY2sgaXMgdW5mb3J0dW5hdGUsIGJ1dCBub3Qgc3VyZSBob3cKICAgICAgICAvL3RvIGZlYXR1cmUgdGVzdCB3L28gY2F1c2luZyBwZXJmIGlzc3Vlcy4KICAgICAgICByZWFkeVJlZ0V4cCA9IGlzQnJvd3NlciAmJiBuYXZpZ2F0b3IucGxhdGZvcm0gPT09ICdQTEFZU1RBVElPTiAzJyA/CiAgICAgICAgICAgICAgICAgICAgICAvXmNvbXBsZXRlJC8gOiAvXihjb21wbGV0ZXxsb2FkZWQpJC8sCiAgICAgICAgZGVmQ29udGV4dE5hbWUgPSAnXycsCiAgICAgICAgLy9PaCB0aGUgdHJhZ2VkeSwgZGV0ZWN0aW5nIG9wZXJhLiBTZWUgdGhlIHVzYWdlIG9mIGlzT3BlcmEgZm9yIHJlYXNvbi4KICAgICAgICBpc09wZXJhID0gdHlwZW9mIG9wZXJhICE9PSAndW5kZWZpbmVkJyAmJiBvcGVyYS50b1N0cmluZygpID09PSAnW29iamVjdCBPcGVyYV0nLAogICAgICAgIGNvbnRleHRzID0ge30sCiAgICAgICAgY2ZnID0ge30sCiAgICAgICAgZ2xvYmFsRGVmUXVldWUgPSBbXSwKICAgICAgICB1c2VJbnRlcmFjdGl2ZSA9IGZhbHNlOwoKICAgIC8vQ291bGQgbWF0Y2ggc29tZXRoaW5nIGxpa2UgJykvL2NvbW1lbnQnLCBkbyBub3QgbG9zZSB0aGUgcHJlZml4IHRvIGNvbW1lbnQuCiAgICBmdW5jdGlvbiBjb21tZW50UmVwbGFjZShtYXRjaCwgc2luZ2xlUHJlZml4KSB7CiAgICAgICAgcmV0dXJuIHNpbmdsZVByZWZpeCB8fCAnJzsKICAgIH0KCiAgICBmdW5jdGlvbiBpc0Z1bmN0aW9uKGl0KSB7CiAgICAgICAgcmV0dXJuIG9zdHJpbmcuY2FsbChpdCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7CiAgICB9CgogICAgZnVuY3Rpb24gaXNBcnJheShpdCkgewogICAgICAgIHJldHVybiBvc3RyaW5nLmNhbGwoaXQpID09PSAnW29iamVjdCBBcnJheV0nOwogICAgfQoKICAgIC8qKgogICAgICogSGVscGVyIGZ1bmN0aW9uIGZvciBpdGVyYXRpbmcgb3ZlciBhbiBhcnJheS4gSWYgdGhlIGZ1bmMgcmV0dXJucwogICAgICogYSB0cnVlIHZhbHVlLCBpdCB3aWxsIGJyZWFrIG91dCBvZiB0aGUgbG9vcC4KICAgICAqLwogICAgZnVuY3Rpb24gZWFjaChhcnksIGZ1bmMpIHsKICAgICAgICBpZiAoYXJ5KSB7CiAgICAgICAgICAgIHZhciBpOwogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJ5Lmxlbmd0aDsgaSArPSAxKSB7CiAgICAgICAgICAgICAgICBpZiAoYXJ5W2ldICYmIGZ1bmMoYXJ5W2ldLCBpLCBhcnkpKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGl0ZXJhdGluZyBvdmVyIGFuIGFycmF5IGJhY2t3YXJkcy4gSWYgdGhlIGZ1bmMKICAgICAqIHJldHVybnMgYSB0cnVlIHZhbHVlLCBpdCB3aWxsIGJyZWFrIG91dCBvZiB0aGUgbG9vcC4KICAgICAqLwogICAgZnVuY3Rpb24gZWFjaFJldmVyc2UoYXJ5LCBmdW5jKSB7CiAgICAgICAgaWYgKGFyeSkgewogICAgICAgICAgICB2YXIgaTsKICAgICAgICAgICAgZm9yIChpID0gYXJ5Lmxlbmd0aCAtIDE7IGkgPiAtMTsgaSAtPSAxKSB7CiAgICAgICAgICAgICAgICBpZiAoYXJ5W2ldICYmIGZ1bmMoYXJ5W2ldLCBpLCBhcnkpKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gaGFzUHJvcChvYmosIHByb3ApIHsKICAgICAgICByZXR1cm4gaGFzT3duLmNhbGwob2JqLCBwcm9wKTsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRPd24ob2JqLCBwcm9wKSB7CiAgICAgICAgcmV0dXJuIGhhc1Byb3Aob2JqLCBwcm9wKSAmJiBvYmpbcHJvcF07CiAgICB9CgogICAgLyoqCiAgICAgKiBDeWNsZXMgb3ZlciBwcm9wZXJ0aWVzIGluIGFuIG9iamVjdCBhbmQgY2FsbHMgYSBmdW5jdGlvbiBmb3IgZWFjaAogICAgICogcHJvcGVydHkgdmFsdWUuIElmIHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgdHJ1dGh5IHZhbHVlLCB0aGVuIHRoZQogICAgICogaXRlcmF0aW9uIGlzIHN0b3BwZWQuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVhY2hQcm9wKG9iaiwgZnVuYykgewogICAgICAgIHZhciBwcm9wOwogICAgICAgIGZvciAocHJvcCBpbiBvYmopIHsKICAgICAgICAgICAgaWYgKGhhc1Byb3Aob2JqLCBwcm9wKSkgewogICAgICAgICAgICAgICAgaWYgKGZ1bmMob2JqW3Byb3BdLCBwcm9wKSkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogU2ltcGxlIGZ1bmN0aW9uIHRvIG1peCBpbiBwcm9wZXJ0aWVzIGZyb20gc291cmNlIGludG8gdGFyZ2V0LAogICAgICogYnV0IG9ubHkgaWYgdGFyZ2V0IGRvZXMgbm90IGFscmVhZHkgaGF2ZSBhIHByb3BlcnR5IG9mIHRoZSBzYW1lIG5hbWUuCiAgICAgKi8KICAgIGZ1bmN0aW9uIG1peGluKHRhcmdldCwgc291cmNlLCBmb3JjZSwgZGVlcFN0cmluZ01peGluKSB7CiAgICAgICAgaWYgKHNvdXJjZSkgewogICAgICAgICAgICBlYWNoUHJvcChzb3VyY2UsIGZ1bmN0aW9uICh2YWx1ZSwgcHJvcCkgewogICAgICAgICAgICAgICAgaWYgKGZvcmNlIHx8ICFoYXNQcm9wKHRhcmdldCwgcHJvcCkpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoZGVlcFN0cmluZ01peGluICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYKICAgICAgICAgICAgICAgICAgICAgICAgIWlzQXJyYXkodmFsdWUpICYmICFpc0Z1bmN0aW9uKHZhbHVlKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAhKHZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSkgewoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0YXJnZXRbcHJvcF0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFtwcm9wXSA9IHt9OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIG1peGluKHRhcmdldFtwcm9wXSwgdmFsdWUsIGZvcmNlLCBkZWVwU3RyaW5nTWl4aW4pOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFtwcm9wXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0YXJnZXQ7CiAgICB9CgogICAgLy9TaW1pbGFyIHRvIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLCBidXQgdGhlICd0aGlzJyBvYmplY3QgaXMgc3BlY2lmaWVkCiAgICAvL2ZpcnN0LCBzaW5jZSBpdCBpcyBlYXNpZXIgdG8gcmVhZC9maWd1cmUgb3V0IHdoYXQgJ3RoaXMnIHdpbGwgYmUuCiAgICBmdW5jdGlvbiBiaW5kKG9iaiwgZm4pIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkob2JqLCBhcmd1bWVudHMpOwogICAgICAgIH07CiAgICB9CgogICAgZnVuY3Rpb24gc2NyaXB0cygpIHsKICAgICAgICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpOwogICAgfQoKICAgIGZ1bmN0aW9uIGRlZmF1bHRPbkVycm9yKGVycikgewogICAgICAgIHRocm93IGVycjsKICAgIH0KCiAgICAvL0FsbG93IGdldHRpbmcgYSBnbG9iYWwgdGhhdCBpcyBleHByZXNzZWQgaW4KICAgIC8vZG90IG5vdGF0aW9uLCBsaWtlICdhLmIuYycuCiAgICBmdW5jdGlvbiBnZXRHbG9iYWwodmFsdWUpIHsKICAgICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgICB9CiAgICAgICAgdmFyIGcgPSBnbG9iYWw7CiAgICAgICAgZWFjaCh2YWx1ZS5zcGxpdCgnLicpLCBmdW5jdGlvbiAocGFydCkgewogICAgICAgICAgICBnID0gZ1twYXJ0XTsKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gZzsKICAgIH0KCiAgICAvKioKICAgICAqIENvbnN0cnVjdHMgYW4gZXJyb3Igd2l0aCBhIHBvaW50ZXIgdG8gYW4gVVJMIHdpdGggbW9yZSBpbmZvcm1hdGlvbi4KICAgICAqIEBwYXJhbSB7U3RyaW5nfSBpZCB0aGUgZXJyb3IgSUQgdGhhdCBtYXBzIHRvIGFuIElEIG9uIGEgd2ViIHBhZ2UuCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBodW1hbiByZWFkYWJsZSBlcnJvci4KICAgICAqIEBwYXJhbSB7RXJyb3J9IFtlcnJdIHRoZSBvcmlnaW5hbCBlcnJvciwgaWYgdGhlcmUgaXMgb25lLgogICAgICoKICAgICAqIEByZXR1cm5zIHtFcnJvcn0KICAgICAqLwogICAgZnVuY3Rpb24gbWFrZUVycm9yKGlkLCBtc2csIGVyciwgcmVxdWlyZU1vZHVsZXMpIHsKICAgICAgICB2YXIgZSA9IG5ldyBFcnJvcihtc2cgKyAnXG5odHRwczovL3JlcXVpcmVqcy5vcmcvZG9jcy9lcnJvcnMuaHRtbCMnICsgaWQpOwogICAgICAgIGUucmVxdWlyZVR5cGUgPSBpZDsKICAgICAgICBlLnJlcXVpcmVNb2R1bGVzID0gcmVxdWlyZU1vZHVsZXM7CiAgICAgICAgaWYgKGVycikgewogICAgICAgICAgICBlLm9yaWdpbmFsRXJyb3IgPSBlcnI7CiAgICAgICAgfQogICAgICAgIHJldHVybiBlOwogICAgfQoKICAgIGlmICh0eXBlb2YgZGVmaW5lICE9PSAndW5kZWZpbmVkJykgewogICAgICAgIC8vSWYgYSBkZWZpbmUgaXMgYWxyZWFkeSBpbiBwbGF5IHZpYSBhbm90aGVyIEFNRCBsb2FkZXIsCiAgICAgICAgLy9kbyBub3Qgb3ZlcndyaXRlLgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAodHlwZW9mIHJlcXVpcmVqcyAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICBpZiAoaXNGdW5jdGlvbihyZXF1aXJlanMpKSB7CiAgICAgICAgICAgIC8vRG8gbm90IG92ZXJ3cml0ZSBhbiBleGlzdGluZyByZXF1aXJlanMgaW5zdGFuY2UuCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY2ZnID0gcmVxdWlyZWpzOwogICAgICAgIHJlcXVpcmVqcyA9IHVuZGVmaW5lZDsKICAgIH0KCiAgICAvL0FsbG93IGZvciBhIHJlcXVpcmUgY29uZmlnIG9iamVjdAogICAgaWYgKHR5cGVvZiByZXF1aXJlICE9PSAndW5kZWZpbmVkJyAmJiAhaXNGdW5jdGlvbihyZXF1aXJlKSkgewogICAgICAgIC8vYXNzdW1lIGl0IGlzIGEgY29uZmlnIG9iamVjdC4KICAgICAgICBjZmcgPSByZXF1aXJlOwogICAgICAgIHJlcXVpcmUgPSB1bmRlZmluZWQ7CiAgICB9CgogICAgZnVuY3Rpb24gbmV3Q29udGV4dChjb250ZXh0TmFtZSkgewogICAgICAgIHZhciBpbkNoZWNrTG9hZGVkLCBNb2R1bGUsIGNvbnRleHQsIGhhbmRsZXJzLAogICAgICAgICAgICBjaGVja0xvYWRlZFRpbWVvdXRJZCwKICAgICAgICAgICAgY29uZmlnID0gewogICAgICAgICAgICAgICAgLy9EZWZhdWx0cy4gRG8gbm90IHNldCBhIGRlZmF1bHQgZm9yIG1hcAogICAgICAgICAgICAgICAgLy9jb25maWcgdG8gc3BlZWQgdXAgbm9ybWFsaXplKCksIHdoaWNoCiAgICAgICAgICAgICAgICAvL3dpbGwgcnVuIGZhc3RlciBpZiB0aGVyZSBpcyBubyBkZWZhdWx0LgogICAgICAgICAgICAgICAgd2FpdFNlY29uZHM6IDcsCiAgICAgICAgICAgICAgICBiYXNlVXJsOiAnLi8nLAogICAgICAgICAgICAgICAgcGF0aHM6IHt9LAogICAgICAgICAgICAgICAgYnVuZGxlczoge30sCiAgICAgICAgICAgICAgICBwa2dzOiB7fSwKICAgICAgICAgICAgICAgIHNoaW06IHt9LAogICAgICAgICAgICAgICAgY29uZmlnOiB7fQogICAgICAgICAgICB9LAogICAgICAgICAgICByZWdpc3RyeSA9IHt9LAogICAgICAgICAgICAvL3JlZ2lzdHJ5IG9mIGp1c3QgZW5hYmxlZCBtb2R1bGVzLCB0byBzcGVlZAogICAgICAgICAgICAvL2N5Y2xlIGJyZWFraW5nIGNvZGUgd2hlbiBsb3RzIG9mIG1vZHVsZXMKICAgICAgICAgICAgLy9hcmUgcmVnaXN0ZXJlZCwgYnV0IG5vdCBhY3RpdmF0ZWQuCiAgICAgICAgICAgIGVuYWJsZWRSZWdpc3RyeSA9IHt9LAogICAgICAgICAgICB1bmRlZkV2ZW50cyA9IHt9LAogICAgICAgICAgICBkZWZRdWV1ZSA9IFtdLAogICAgICAgICAgICBkZWZpbmVkID0ge30sCiAgICAgICAgICAgIHVybEZldGNoZWQgPSB7fSwKICAgICAgICAgICAgYnVuZGxlc01hcCA9IHt9LAogICAgICAgICAgICByZXF1aXJlQ291bnRlciA9IDEsCiAgICAgICAgICAgIHVubm9ybWFsaXplZENvdW50ZXIgPSAxOwoKICAgICAgICAvKioKICAgICAgICAgKiBUcmltcyB0aGUgLiBhbmQgLi4gZnJvbSBhbiBhcnJheSBvZiBwYXRoIHNlZ21lbnRzLgogICAgICAgICAqIEl0IHdpbGwga2VlcCBhIGxlYWRpbmcgcGF0aCBzZWdtZW50IGlmIGEgLi4gd2lsbCBiZWNvbWUKICAgICAgICAgKiB0aGUgZmlyc3QgcGF0aCBzZWdtZW50LCB0byBoZWxwIHdpdGggbW9kdWxlIG5hbWUgbG9va3VwcywKICAgICAgICAgKiB3aGljaCBhY3QgbGlrZSBwYXRocywgYnV0IGNhbiBiZSByZW1hcHBlZC4gQnV0IHRoZSBlbmQgcmVzdWx0LAogICAgICAgICAqIGFsbCBwYXRocyB0aGF0IHVzZSB0aGlzIGZ1bmN0aW9uIHNob3VsZCBsb29rIG5vcm1hbGl6ZWQuCiAgICAgICAgICogTk9URTogdGhpcyBtZXRob2QgTU9ESUZJRVMgdGhlIGlucHV0IGFycmF5LgogICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGFyeSB0aGUgYXJyYXkgb2YgcGF0aCBzZWdtZW50cy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiB0cmltRG90cyhhcnkpIHsKICAgICAgICAgICAgdmFyIGksIHBhcnQ7CiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcnkubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIHBhcnQgPSBhcnlbaV07CiAgICAgICAgICAgICAgICBpZiAocGFydCA9PT0gJy4nKSB7CiAgICAgICAgICAgICAgICAgICAgYXJ5LnNwbGljZShpLCAxKTsKICAgICAgICAgICAgICAgICAgICBpIC09IDE7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcnQgPT09ICcuLicpIHsKICAgICAgICAgICAgICAgICAgICAvLyBJZiBhdCB0aGUgc3RhcnQsIG9yIHByZXZpb3VzIHZhbHVlIGlzIHN0aWxsIC4uLAogICAgICAgICAgICAgICAgICAgIC8vIGtlZXAgdGhlbSBzbyB0aGF0IHdoZW4gY29udmVydGVkIHRvIGEgcGF0aCBpdCBtYXkKICAgICAgICAgICAgICAgICAgICAvLyBzdGlsbCB3b3JrIHdoZW4gY29udmVydGVkIHRvIGEgcGF0aCwgZXZlbiB0aG91Z2gKICAgICAgICAgICAgICAgICAgICAvLyBhcyBhbiBJRCBpdCBpcyBsZXNzIHRoYW4gaWRlYWwuIEluIGxhcmdlciBwb2ludAogICAgICAgICAgICAgICAgICAgIC8vIHJlbGVhc2VzLCBtYXkgYmUgYmV0dGVyIHRvIGp1c3Qga2ljayBvdXQgYW4gZXJyb3IuCiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IDAgfHwgKGkgPT09IDEgJiYgYXJ5WzJdID09PSAnLi4nKSB8fCBhcnlbaSAtIDFdID09PSAnLi4nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgYXJ5LnNwbGljZShpIC0gMSwgMik7CiAgICAgICAgICAgICAgICAgICAgICAgIGkgLT0gMjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEdpdmVuIGEgcmVsYXRpdmUgbW9kdWxlIG5hbWUsIGxpa2UgLi9zb21ldGhpbmcsIG5vcm1hbGl6ZSBpdCB0bwogICAgICAgICAqIGEgcmVhbCBuYW1lIHRoYXQgY2FuIGJlIG1hcHBlZCB0byBhIHBhdGguCiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgdGhlIHJlbGF0aXZlIG5hbWUKICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gYmFzZU5hbWUgYSByZWFsIG5hbWUgdGhhdCB0aGUgbmFtZSBhcmcgaXMgcmVsYXRpdmUKICAgICAgICAgKiB0by4KICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGFwcGx5TWFwIGFwcGx5IHRoZSBtYXAgY29uZmlnIHRvIHRoZSB2YWx1ZS4gU2hvdWxkCiAgICAgICAgICogb25seSBiZSBkb25lIGlmIHRoaXMgbm9ybWFsaXphdGlvbiBpcyBmb3IgYSBkZXBlbmRlbmN5IElELgogICAgICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IG5vcm1hbGl6ZWQgbmFtZQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZShuYW1lLCBiYXNlTmFtZSwgYXBwbHlNYXApIHsKICAgICAgICAgICAgdmFyIHBrZ01haW4sIG1hcFZhbHVlLCBuYW1lUGFydHMsIGksIGosIG5hbWVTZWdtZW50LCBsYXN0SW5kZXgsCiAgICAgICAgICAgICAgICBmb3VuZE1hcCwgZm91bmRJLCBmb3VuZFN0YXJNYXAsIHN0YXJJLCBub3JtYWxpemVkQmFzZVBhcnRzLAogICAgICAgICAgICAgICAgYmFzZVBhcnRzID0gKGJhc2VOYW1lICYmIGJhc2VOYW1lLnNwbGl0KCcvJykpLAogICAgICAgICAgICAgICAgbWFwID0gY29uZmlnLm1hcCwKICAgICAgICAgICAgICAgIHN0YXJNYXAgPSBtYXAgJiYgbWFwWycqJ107CgogICAgICAgICAgICAvL0FkanVzdCBhbnkgcmVsYXRpdmUgcGF0aHMuCiAgICAgICAgICAgIGlmIChuYW1lKSB7CiAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5zcGxpdCgnLycpOwogICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gbmFtZS5sZW5ndGggLSAxOwoKICAgICAgICAgICAgICAgIC8vIElmIHdhbnRpbmcgbm9kZSBJRCBjb21wYXRpYmlsaXR5LCBzdHJpcCAuanMgZnJvbSBlbmQKICAgICAgICAgICAgICAgIC8vIG9mIElEcy4gSGF2ZSB0byBkbyB0aGlzIGhlcmUsIGFuZCBub3QgaW4gbmFtZVRvVXJsCiAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIG5vZGUgYWxsb3dzIGVpdGhlciAuanMgb3Igbm9uIC5qcyB0byBtYXAKICAgICAgICAgICAgICAgIC8vIHRvIHNhbWUgZmlsZS4KICAgICAgICAgICAgICAgIGlmIChjb25maWcubm9kZUlkQ29tcGF0ICYmIGpzU3VmZml4UmVnRXhwLnRlc3QobmFtZVtsYXN0SW5kZXhdKSkgewogICAgICAgICAgICAgICAgICAgIG5hbWVbbGFzdEluZGV4XSA9IG5hbWVbbGFzdEluZGV4XS5yZXBsYWNlKGpzU3VmZml4UmVnRXhwLCAnJyk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gU3RhcnRzIHdpdGggYSAnLicgc28gbmVlZCB0aGUgYmFzZU5hbWUKICAgICAgICAgICAgICAgIGlmIChuYW1lWzBdLmNoYXJBdCgwKSA9PT0gJy4nICYmIGJhc2VQYXJ0cykgewogICAgICAgICAgICAgICAgICAgIC8vQ29udmVydCBiYXNlTmFtZSB0byBhcnJheSwgYW5kIGxvcCBvZmYgdGhlIGxhc3QgcGFydCwKICAgICAgICAgICAgICAgICAgICAvL3NvIHRoYXQgLiBtYXRjaGVzIHRoYXQgJ2RpcmVjdG9yeScgYW5kIG5vdCBuYW1lIG9mIHRoZSBiYXNlTmFtZSdzCiAgICAgICAgICAgICAgICAgICAgLy9tb2R1bGUuIEZvciBpbnN0YW5jZSwgYmFzZU5hbWUgb2YgJ29uZS90d28vdGhyZWUnLCBtYXBzIHRvCiAgICAgICAgICAgICAgICAgICAgLy8nb25lL3R3by90aHJlZS5qcycsIGJ1dCB3ZSB3YW50IHRoZSBkaXJlY3RvcnksICdvbmUvdHdvJyBmb3IKICAgICAgICAgICAgICAgICAgICAvL3RoaXMgbm9ybWFsaXphdGlvbi4KICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkQmFzZVBhcnRzID0gYmFzZVBhcnRzLnNsaWNlKDAsIGJhc2VQYXJ0cy5sZW5ndGggLSAxKTsKICAgICAgICAgICAgICAgICAgICBuYW1lID0gbm9ybWFsaXplZEJhc2VQYXJ0cy5jb25jYXQobmFtZSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdHJpbURvdHMobmFtZSk7CiAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5qb2luKCcvJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vQXBwbHkgbWFwIGNvbmZpZyBpZiBhdmFpbGFibGUuCiAgICAgICAgICAgIGlmIChhcHBseU1hcCAmJiBtYXAgJiYgKGJhc2VQYXJ0cyB8fCBzdGFyTWFwKSkgewogICAgICAgICAgICAgICAgbmFtZVBhcnRzID0gbmFtZS5zcGxpdCgnLycpOwoKICAgICAgICAgICAgICAgIG91dGVyTG9vcDogZm9yIChpID0gbmFtZVBhcnRzLmxlbmd0aDsgaSA+IDA7IGkgLT0gMSkgewogICAgICAgICAgICAgICAgICAgIG5hbWVTZWdtZW50ID0gbmFtZVBhcnRzLnNsaWNlKDAsIGkpLmpvaW4oJy8nKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKGJhc2VQYXJ0cykgewogICAgICAgICAgICAgICAgICAgICAgICAvL0ZpbmQgdGhlIGxvbmdlc3QgYmFzZU5hbWUgc2VnbWVudCBtYXRjaCBpbiB0aGUgY29uZmlnLgogICAgICAgICAgICAgICAgICAgICAgICAvL1NvLCBkbyBqb2lucyBvbiB0aGUgYmlnZ2VzdCB0byBzbWFsbGVzdCBsZW5ndGhzIG9mIGJhc2VQYXJ0cy4KICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gYmFzZVBhcnRzLmxlbmd0aDsgaiA+IDA7IGogLT0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwVmFsdWUgPSBnZXRPd24obWFwLCBiYXNlUGFydHMuc2xpY2UoMCwgaikuam9pbignLycpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2Jhc2VOYW1lIHNlZ21lbnQgaGFzIGNvbmZpZywgZmluZCBpZiBpdCBoYXMgb25lIGZvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy90aGlzIG5hbWUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFwVmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBWYWx1ZSA9IGdldE93bihtYXBWYWx1ZSwgbmFtZVNlZ21lbnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXBWYWx1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL01hdGNoLCB1cGRhdGUgbmFtZSB0byB0aGUgbmV3IHZhbHVlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZE1hcCA9IG1hcFZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZEkgPSBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvdXRlckxvb3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAvL0NoZWNrIGZvciBhIHN0YXIgbWFwIG1hdGNoLCBidXQganVzdCBob2xkIG9uIHRvIGl0LAogICAgICAgICAgICAgICAgICAgIC8vaWYgdGhlcmUgaXMgYSBzaG9ydGVyIHNlZ21lbnQgbWF0Y2ggbGF0ZXIgaW4gYSBtYXRjaGluZwogICAgICAgICAgICAgICAgICAgIC8vY29uZmlnLCB0aGVuIGZhdm9yIG92ZXIgdGhpcyBzdGFyIG1hcC4KICAgICAgICAgICAgICAgICAgICBpZiAoIWZvdW5kU3Rhck1hcCAmJiBzdGFyTWFwICYmIGdldE93bihzdGFyTWFwLCBuYW1lU2VnbWVudCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRTdGFyTWFwID0gZ2V0T3duKHN0YXJNYXAsIG5hbWVTZWdtZW50KTsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhckkgPSBpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIWZvdW5kTWFwICYmIGZvdW5kU3Rhck1hcCkgewogICAgICAgICAgICAgICAgICAgIGZvdW5kTWFwID0gZm91bmRTdGFyTWFwOwogICAgICAgICAgICAgICAgICAgIGZvdW5kSSA9IHN0YXJJOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChmb3VuZE1hcCkgewogICAgICAgICAgICAgICAgICAgIG5hbWVQYXJ0cy5zcGxpY2UoMCwgZm91bmRJLCBmb3VuZE1hcCk7CiAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG5hbWVQYXJ0cy5qb2luKCcvJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIElmIHRoZSBuYW1lIHBvaW50cyB0byBhIHBhY2thZ2UncyBuYW1lLCB1c2UKICAgICAgICAgICAgLy8gdGhlIHBhY2thZ2UgbWFpbiBpbnN0ZWFkLgogICAgICAgICAgICBwa2dNYWluID0gZ2V0T3duKGNvbmZpZy5wa2dzLCBuYW1lKTsKCiAgICAgICAgICAgIHJldHVybiBwa2dNYWluID8gcGtnTWFpbiA6IG5hbWU7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiByZW1vdmVTY3JpcHQobmFtZSkgewogICAgICAgICAgICBpZiAoaXNCcm93c2VyKSB7CiAgICAgICAgICAgICAgICBlYWNoKHNjcmlwdHMoKSwgZnVuY3Rpb24gKHNjcmlwdE5vZGUpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoc2NyaXB0Tm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZW1vZHVsZScpID09PSBuYW1lICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHROb2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlY29udGV4dCcpID09PSBjb250ZXh0LmNvbnRleHROYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdE5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzY3JpcHROb2RlKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGhhc1BhdGhGYWxsYmFjayhpZCkgewogICAgICAgICAgICB2YXIgcGF0aENvbmZpZyA9IGdldE93bihjb25maWcucGF0aHMsIGlkKTsKICAgICAgICAgICAgaWYgKHBhdGhDb25maWcgJiYgaXNBcnJheShwYXRoQ29uZmlnKSAmJiBwYXRoQ29uZmlnLmxlbmd0aCA+IDEpIHsKICAgICAgICAgICAgICAgIC8vUG9wIG9mZiB0aGUgZmlyc3QgYXJyYXkgdmFsdWUsIHNpbmNlIGl0IGZhaWxlZCwgYW5kCiAgICAgICAgICAgICAgICAvL3JldHJ5CiAgICAgICAgICAgICAgICBwYXRoQ29uZmlnLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICBjb250ZXh0LnJlcXVpcmUudW5kZWYoaWQpOwoKICAgICAgICAgICAgICAgIC8vQ3VzdG9tIHJlcXVpcmUgdGhhdCBkb2VzIG5vdCBkbyBtYXAgdHJhbnNsYXRpb24sIHNpbmNlCiAgICAgICAgICAgICAgICAvL0lEIGlzICJhYnNvbHV0ZSIsIGFscmVhZHkgbWFwcGVkL3Jlc29sdmVkLgogICAgICAgICAgICAgICAgY29udGV4dC5tYWtlUmVxdWlyZShudWxsLCB7CiAgICAgICAgICAgICAgICAgICAgc2tpcE1hcDogdHJ1ZQogICAgICAgICAgICAgICAgfSkoW2lkXSk7CgogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vVHVybnMgYSBwbHVnaW4hcmVzb3VyY2UgdG8gW3BsdWdpbiwgcmVzb3VyY2VdCiAgICAgICAgLy93aXRoIHRoZSBwbHVnaW4gYmVpbmcgdW5kZWZpbmVkIGlmIHRoZSBuYW1lCiAgICAgICAgLy9kaWQgbm90IGhhdmUgYSBwbHVnaW4gcHJlZml4LgogICAgICAgIGZ1bmN0aW9uIHNwbGl0UHJlZml4KG5hbWUpIHsKICAgICAgICAgICAgdmFyIHByZWZpeCwKICAgICAgICAgICAgICAgIGluZGV4ID0gbmFtZSA/IG5hbWUuaW5kZXhPZignIScpIDogLTE7CiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7CiAgICAgICAgICAgICAgICBwcmVmaXggPSBuYW1lLnN1YnN0cmluZygwLCBpbmRleCk7CiAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5zdWJzdHJpbmcoaW5kZXggKyAxLCBuYW1lLmxlbmd0aCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIFtwcmVmaXgsIG5hbWVdOwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogQ3JlYXRlcyBhIG1vZHVsZSBtYXBwaW5nIHRoYXQgaW5jbHVkZXMgcGx1Z2luIHByZWZpeCwgbW9kdWxlCiAgICAgICAgICogbmFtZSwgYW5kIHBhdGguIElmIHBhcmVudE1vZHVsZU1hcCBpcyBwcm92aWRlZCBpdCB3aWxsCiAgICAgICAgICogYWxzbyBub3JtYWxpemUgdGhlIG5hbWUgdmlhIHJlcXVpcmUubm9ybWFsaXplKCkKICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIHRoZSBtb2R1bGUgbmFtZQogICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBbcGFyZW50TW9kdWxlTWFwXSBwYXJlbnQgbW9kdWxlIG1hcAogICAgICAgICAqIGZvciB0aGUgbW9kdWxlIG5hbWUsIHVzZWQgdG8gcmVzb2x2ZSByZWxhdGl2ZSBuYW1lcy4KICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGlzTm9ybWFsaXplZDogaXMgdGhlIElEIGFscmVhZHkgbm9ybWFsaXplZC4KICAgICAgICAgKiBUaGlzIGlzIHRydWUgaWYgdGhpcyBjYWxsIGlzIGRvbmUgZm9yIGEgZGVmaW5lKCkgbW9kdWxlIElELgogICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gYXBwbHlNYXA6IGFwcGx5IHRoZSBtYXAgY29uZmlnIHRvIHRoZSBJRC4KICAgICAgICAgKiBTaG91bGQgb25seSBiZSB0cnVlIGlmIHRoaXMgbWFwIGlzIGZvciBhIGRlcGVuZGVuY3kuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIG1ha2VNb2R1bGVNYXAobmFtZSwgcGFyZW50TW9kdWxlTWFwLCBpc05vcm1hbGl6ZWQsIGFwcGx5TWFwKSB7CiAgICAgICAgICAgIHZhciB1cmwsIHBsdWdpbk1vZHVsZSwgc3VmZml4LCBuYW1lUGFydHMsCiAgICAgICAgICAgICAgICBwcmVmaXggPSBudWxsLAogICAgICAgICAgICAgICAgcGFyZW50TmFtZSA9IHBhcmVudE1vZHVsZU1hcCA/IHBhcmVudE1vZHVsZU1hcC5uYW1lIDogbnVsbCwKICAgICAgICAgICAgICAgIG9yaWdpbmFsTmFtZSA9IG5hbWUsCiAgICAgICAgICAgICAgICBpc0RlZmluZSA9IHRydWUsCiAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSA9ICcnOwoKICAgICAgICAgICAgLy9JZiBubyBuYW1lLCB0aGVuIGl0IG1lYW5zIGl0IGlzIGEgcmVxdWlyZSBjYWxsLCBnZW5lcmF0ZSBhbgogICAgICAgICAgICAvL2ludGVybmFsIG5hbWUuCiAgICAgICAgICAgIGlmICghbmFtZSkgewogICAgICAgICAgICAgICAgaXNEZWZpbmUgPSBmYWxzZTsKICAgICAgICAgICAgICAgIG5hbWUgPSAnX0ByJyArIChyZXF1aXJlQ291bnRlciArPSAxKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbmFtZVBhcnRzID0gc3BsaXRQcmVmaXgobmFtZSk7CiAgICAgICAgICAgIHByZWZpeCA9IG5hbWVQYXJ0c1swXTsKICAgICAgICAgICAgbmFtZSA9IG5hbWVQYXJ0c1sxXTsKCiAgICAgICAgICAgIGlmIChwcmVmaXgpIHsKICAgICAgICAgICAgICAgIHByZWZpeCA9IG5vcm1hbGl6ZShwcmVmaXgsIHBhcmVudE5hbWUsIGFwcGx5TWFwKTsKICAgICAgICAgICAgICAgIHBsdWdpbk1vZHVsZSA9IGdldE93bihkZWZpbmVkLCBwcmVmaXgpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvL0FjY291bnQgZm9yIHJlbGF0aXZlIHBhdGhzIGlmIHRoZXJlIGlzIGEgYmFzZSBuYW1lLgogICAgICAgICAgICBpZiAobmFtZSkgewogICAgICAgICAgICAgICAgaWYgKHByZWZpeCkgewogICAgICAgICAgICAgICAgICAgIGlmIChpc05vcm1hbGl6ZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSBuYW1lOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGx1Z2luTW9kdWxlICYmIHBsdWdpbk1vZHVsZS5ub3JtYWxpemUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9QbHVnaW4gaXMgbG9hZGVkLCB1c2UgaXRzIG5vcm1hbGl6ZSBtZXRob2QuCiAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWROYW1lID0gcGx1Z2luTW9kdWxlLm5vcm1hbGl6ZShuYW1lLCBmdW5jdGlvbiAobmFtZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZShuYW1lLCBwYXJlbnROYW1lLCBhcHBseU1hcCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIG5lc3RlZCBwbHVnaW4gcmVmZXJlbmNlcywgdGhlbiBkbyBub3QgdHJ5IHRvCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vcm1hbGl6ZSwgYXMgaXQgd2lsbCBub3Qgbm9ybWFsaXplIGNvcnJlY3RseS4gVGhpcwogICAgICAgICAgICAgICAgICAgICAgICAvLyBwbGFjZXMgYSByZXN0cmljdGlvbiBvbiByZXNvdXJjZUlkcywgYW5kIHRoZSBsb25nZXIKICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGVybSBzb2x1dGlvbiBpcyBub3QgdG8gbm9ybWFsaXplIHVudGlsIHBsdWdpbnMgYXJlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvYWRlZCBhbmQgYWxsIG5vcm1hbGl6YXRpb25zIHRvIGFsbG93IGZvciBhc3luYwogICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2FkaW5nIG9mIGEgbG9hZGVyIHBsdWdpbi4gQnV0IGZvciBub3csIGZpeGVzIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAvLyBjb21tb24gdXNlcy4gRGV0YWlscyBpbiAjMTEzMQogICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSA9IG5hbWUuaW5kZXhPZignIScpID09PSAtMSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplKG5hbWUsIHBhcmVudE5hbWUsIGFwcGx5TWFwKSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIC8vQSByZWd1bGFyIG1vZHVsZS4KICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSA9IG5vcm1hbGl6ZShuYW1lLCBwYXJlbnROYW1lLCBhcHBseU1hcCk7CgogICAgICAgICAgICAgICAgICAgIC8vTm9ybWFsaXplZCBuYW1lIG1heSBiZSBhIHBsdWdpbiBJRCBkdWUgdG8gbWFwIGNvbmZpZwogICAgICAgICAgICAgICAgICAgIC8vYXBwbGljYXRpb24gaW4gbm9ybWFsaXplLiBUaGUgbWFwIGNvbmZpZyB2YWx1ZXMgbXVzdAogICAgICAgICAgICAgICAgICAgIC8vYWxyZWFkeSBiZSBub3JtYWxpemVkLCBzbyBkbyBub3QgbmVlZCB0byByZWRvIHRoYXQgcGFydC4KICAgICAgICAgICAgICAgICAgICBuYW1lUGFydHMgPSBzcGxpdFByZWZpeChub3JtYWxpemVkTmFtZSk7CiAgICAgICAgICAgICAgICAgICAgcHJlZml4ID0gbmFtZVBhcnRzWzBdOwogICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWROYW1lID0gbmFtZVBhcnRzWzFdOwogICAgICAgICAgICAgICAgICAgIGlzTm9ybWFsaXplZCA9IHRydWU7CgogICAgICAgICAgICAgICAgICAgIHVybCA9IGNvbnRleHQubmFtZVRvVXJsKG5vcm1hbGl6ZWROYW1lKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy9JZiB0aGUgaWQgaXMgYSBwbHVnaW4gaWQgdGhhdCBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBpZiBpdCBuZWVkcwogICAgICAgICAgICAvL25vcm1hbGl6YXRpb24sIHN0YW1wIGl0IHdpdGggYSB1bmlxdWUgSUQgc28gdHdvIG1hdGNoaW5nIHJlbGF0aXZlCiAgICAgICAgICAgIC8vaWRzIHRoYXQgbWF5IGNvbmZsaWN0IGNhbiBiZSBzZXBhcmF0ZS4KICAgICAgICAgICAgc3VmZml4ID0gcHJlZml4ICYmICFwbHVnaW5Nb2R1bGUgJiYgIWlzTm9ybWFsaXplZCA/CiAgICAgICAgICAgICAgICAgICAgICdfdW5ub3JtYWxpemVkJyArICh1bm5vcm1hbGl6ZWRDb3VudGVyICs9IDEpIDoKICAgICAgICAgICAgICAgICAgICAgJyc7CgogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgcHJlZml4OiBwcmVmaXgsCiAgICAgICAgICAgICAgICBuYW1lOiBub3JtYWxpemVkTmFtZSwKICAgICAgICAgICAgICAgIHBhcmVudE1hcDogcGFyZW50TW9kdWxlTWFwLAogICAgICAgICAgICAgICAgdW5ub3JtYWxpemVkOiAhIXN1ZmZpeCwKICAgICAgICAgICAgICAgIHVybDogdXJsLAogICAgICAgICAgICAgICAgb3JpZ2luYWxOYW1lOiBvcmlnaW5hbE5hbWUsCiAgICAgICAgICAgICAgICBpc0RlZmluZTogaXNEZWZpbmUsCiAgICAgICAgICAgICAgICBpZDogKHByZWZpeCA/CiAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCArICchJyArIG5vcm1hbGl6ZWROYW1lIDoKICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUpICsgc3VmZml4CiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBnZXRNb2R1bGUoZGVwTWFwKSB7CiAgICAgICAgICAgIHZhciBpZCA9IGRlcE1hcC5pZCwKICAgICAgICAgICAgICAgIG1vZCA9IGdldE93bihyZWdpc3RyeSwgaWQpOwoKICAgICAgICAgICAgaWYgKCFtb2QpIHsKICAgICAgICAgICAgICAgIG1vZCA9IHJlZ2lzdHJ5W2lkXSA9IG5ldyBjb250ZXh0Lk1vZHVsZShkZXBNYXApOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gbW9kOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gb24oZGVwTWFwLCBuYW1lLCBmbikgewogICAgICAgICAgICB2YXIgaWQgPSBkZXBNYXAuaWQsCiAgICAgICAgICAgICAgICBtb2QgPSBnZXRPd24ocmVnaXN0cnksIGlkKTsKCiAgICAgICAgICAgIGlmIChoYXNQcm9wKGRlZmluZWQsIGlkKSAmJgogICAgICAgICAgICAgICAgICAgICghbW9kIHx8IG1vZC5kZWZpbmVFbWl0Q29tcGxldGUpKSB7CiAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ2RlZmluZWQnKSB7CiAgICAgICAgICAgICAgICAgICAgZm4oZGVmaW5lZFtpZF0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgbW9kID0gZ2V0TW9kdWxlKGRlcE1hcCk7CiAgICAgICAgICAgICAgICBpZiAobW9kLmVycm9yICYmIG5hbWUgPT09ICdlcnJvcicpIHsKICAgICAgICAgICAgICAgICAgICBmbihtb2QuZXJyb3IpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBtb2Qub24obmFtZSwgZm4pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBvbkVycm9yKGVyciwgZXJyYmFjaykgewogICAgICAgICAgICB2YXIgaWRzID0gZXJyLnJlcXVpcmVNb2R1bGVzLAogICAgICAgICAgICAgICAgbm90aWZpZWQgPSBmYWxzZTsKCiAgICAgICAgICAgIGlmIChlcnJiYWNrKSB7CiAgICAgICAgICAgICAgICBlcnJiYWNrKGVycik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBlYWNoKGlkcywgZnVuY3Rpb24gKGlkKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIG1vZCA9IGdldE93bihyZWdpc3RyeSwgaWQpOwogICAgICAgICAgICAgICAgICAgIGlmIChtb2QpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9TZXQgZXJyb3Igb24gbW9kdWxlLCBzbyBpdCBza2lwcyB0aW1lb3V0IGNoZWNrcy4KICAgICAgICAgICAgICAgICAgICAgICAgbW9kLmVycm9yID0gZXJyOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kLmV2ZW50cy5lcnJvcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kLmVtaXQoJ2Vycm9yJywgZXJyKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIGlmICghbm90aWZpZWQpIHsKICAgICAgICAgICAgICAgICAgICByZXEub25FcnJvcihlcnIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBJbnRlcm5hbCBtZXRob2QgdG8gdHJhbnNmZXIgZ2xvYmFsUXVldWUgaXRlbXMgdG8gdGhpcyBjb250ZXh0J3MKICAgICAgICAgKiBkZWZRdWV1ZS4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiB0YWtlR2xvYmFsUXVldWUoKSB7CiAgICAgICAgICAgIC8vUHVzaCBhbGwgdGhlIGdsb2JhbERlZlF1ZXVlIGl0ZW1zIGludG8gdGhlIGNvbnRleHQncyBkZWZRdWV1ZQogICAgICAgICAgICBpZiAoZ2xvYmFsRGVmUXVldWUubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICBlYWNoKGdsb2JhbERlZlF1ZXVlLCBmdW5jdGlvbihxdWV1ZUl0ZW0pIHsKICAgICAgICAgICAgICAgICAgICB2YXIgaWQgPSBxdWV1ZUl0ZW1bMF07CiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpZCA9PT0gJ3N0cmluZycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZWZRdWV1ZU1hcFtpZF0gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBkZWZRdWV1ZS5wdXNoKHF1ZXVlSXRlbSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGdsb2JhbERlZlF1ZXVlID0gW107CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGhhbmRsZXJzID0gewogICAgICAgICAgICAncmVxdWlyZSc6IGZ1bmN0aW9uIChtb2QpIHsKICAgICAgICAgICAgICAgIGlmIChtb2QucmVxdWlyZSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBtb2QucmVxdWlyZTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChtb2QucmVxdWlyZSA9IGNvbnRleHQubWFrZVJlcXVpcmUobW9kLm1hcCkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAnZXhwb3J0cyc6IGZ1bmN0aW9uIChtb2QpIHsKICAgICAgICAgICAgICAgIG1vZC51c2luZ0V4cG9ydHMgPSB0cnVlOwogICAgICAgICAgICAgICAgaWYgKG1vZC5tYXAuaXNEZWZpbmUpIHsKICAgICAgICAgICAgICAgICAgICBpZiAobW9kLmV4cG9ydHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChkZWZpbmVkW21vZC5tYXAuaWRdID0gbW9kLmV4cG9ydHMpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAobW9kLmV4cG9ydHMgPSBkZWZpbmVkW21vZC5tYXAuaWRdID0ge30pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgJ21vZHVsZSc6IGZ1bmN0aW9uIChtb2QpIHsKICAgICAgICAgICAgICAgIGlmIChtb2QubW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vZC5tb2R1bGU7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAobW9kLm1vZHVsZSA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IG1vZC5tYXAuaWQsCiAgICAgICAgICAgICAgICAgICAgICAgIHVyaTogbW9kLm1hcC51cmwsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZzogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldE93bihjb25maWcuY29uZmlnLCBtb2QubWFwLmlkKSB8fCB7fTsKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0czogbW9kLmV4cG9ydHMgfHwgKG1vZC5leHBvcnRzID0ge30pCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICBmdW5jdGlvbiBjbGVhblJlZ2lzdHJ5KGlkKSB7CiAgICAgICAgICAgIC8vQ2xlYW4gdXAgbWFjaGluZXJ5IHVzZWQgZm9yIHdhaXRpbmcgbW9kdWxlcy4KICAgICAgICAgICAgZGVsZXRlIHJlZ2lzdHJ5W2lkXTsKICAgICAgICAgICAgZGVsZXRlIGVuYWJsZWRSZWdpc3RyeVtpZF07CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBicmVha0N5Y2xlKG1vZCwgdHJhY2VkLCBwcm9jZXNzZWQpIHsKICAgICAgICAgICAgdmFyIGlkID0gbW9kLm1hcC5pZDsKCiAgICAgICAgICAgIGlmIChtb2QuZXJyb3IpIHsKICAgICAgICAgICAgICAgIG1vZC5lbWl0KCdlcnJvcicsIG1vZC5lcnJvcik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0cmFjZWRbaWRdID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGVhY2gobW9kLmRlcE1hcHMsIGZ1bmN0aW9uIChkZXBNYXAsIGkpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgZGVwSWQgPSBkZXBNYXAuaWQsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlcCA9IGdldE93bihyZWdpc3RyeSwgZGVwSWQpOwoKICAgICAgICAgICAgICAgICAgICAvL09ubHkgZm9yY2UgdGhpbmdzIHRoYXQgaGF2ZSBub3QgY29tcGxldGVkCiAgICAgICAgICAgICAgICAgICAgLy9iZWluZyBkZWZpbmVkLCBzbyBzdGlsbCBpbiB0aGUgcmVnaXN0cnksCiAgICAgICAgICAgICAgICAgICAgLy9hbmQgb25seSBpZiBpdCBoYXMgbm90IGJlZW4gbWF0Y2hlZCB1cAogICAgICAgICAgICAgICAgICAgIC8vaW4gdGhlIG1vZHVsZSBhbHJlYWR5LgogICAgICAgICAgICAgICAgICAgIGlmIChkZXAgJiYgIW1vZC5kZXBNYXRjaGVkW2ldICYmICFwcm9jZXNzZWRbZGVwSWRdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnZXRPd24odHJhY2VkLCBkZXBJZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZC5kZWZpbmVEZXAoaSwgZGVmaW5lZFtkZXBJZF0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kLmNoZWNrKCk7IC8vcGFzcyBmYWxzZT8KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrQ3ljbGUoZGVwLCB0cmFjZWQsIHByb2Nlc3NlZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIHByb2Nlc3NlZFtpZF0gPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBjaGVja0xvYWRlZCgpIHsKICAgICAgICAgICAgdmFyIGVyciwgdXNpbmdQYXRoRmFsbGJhY2ssCiAgICAgICAgICAgICAgICB3YWl0SW50ZXJ2YWwgPSBjb25maWcud2FpdFNlY29uZHMgKiAxMDAwLAogICAgICAgICAgICAgICAgLy9JdCBpcyBwb3NzaWJsZSB0byBkaXNhYmxlIHRoZSB3YWl0IGludGVydmFsIGJ5IHVzaW5nIHdhaXRTZWNvbmRzIG9mIDAuCiAgICAgICAgICAgICAgICBleHBpcmVkID0gd2FpdEludGVydmFsICYmIChjb250ZXh0LnN0YXJ0VGltZSArIHdhaXRJbnRlcnZhbCkgPCBuZXcgRGF0ZSgpLmdldFRpbWUoKSwKICAgICAgICAgICAgICAgIG5vTG9hZHMgPSBbXSwKICAgICAgICAgICAgICAgIHJlcUNhbGxzID0gW10sCiAgICAgICAgICAgICAgICBzdGlsbExvYWRpbmcgPSBmYWxzZSwKICAgICAgICAgICAgICAgIG5lZWRDeWNsZUNoZWNrID0gdHJ1ZTsKCiAgICAgICAgICAgIC8vRG8gbm90IGJvdGhlciBpZiB0aGlzIGNhbGwgd2FzIGEgcmVzdWx0IG9mIGEgY3ljbGUgYnJlYWsuCiAgICAgICAgICAgIGlmIChpbkNoZWNrTG9hZGVkKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGluQ2hlY2tMb2FkZWQgPSB0cnVlOwoKICAgICAgICAgICAgLy9GaWd1cmUgb3V0IHRoZSBzdGF0ZSBvZiBhbGwgdGhlIG1vZHVsZXMuCiAgICAgICAgICAgIGVhY2hQcm9wKGVuYWJsZWRSZWdpc3RyeSwgZnVuY3Rpb24gKG1vZCkgewogICAgICAgICAgICAgICAgdmFyIG1hcCA9IG1vZC5tYXAsCiAgICAgICAgICAgICAgICAgICAgbW9kSWQgPSBtYXAuaWQ7CgogICAgICAgICAgICAgICAgLy9Ta2lwIHRoaW5ncyB0aGF0IGFyZSBub3QgZW5hYmxlZCBvciBpbiBlcnJvciBzdGF0ZS4KICAgICAgICAgICAgICAgIGlmICghbW9kLmVuYWJsZWQpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCFtYXAuaXNEZWZpbmUpIHsKICAgICAgICAgICAgICAgICAgICByZXFDYWxscy5wdXNoKG1vZCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCFtb2QuZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICAvL0lmIHRoZSBtb2R1bGUgc2hvdWxkIGJlIGV4ZWN1dGVkLCBhbmQgaXQgaGFzIG5vdAogICAgICAgICAgICAgICAgICAgIC8vYmVlbiBpbml0ZWQgYW5kIHRpbWUgaXMgdXAsIHJlbWVtYmVyIGl0LgogICAgICAgICAgICAgICAgICAgIGlmICghbW9kLmluaXRlZCAmJiBleHBpcmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNQYXRoRmFsbGJhY2sobW9kSWQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZ1BhdGhGYWxsYmFjayA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGlsbExvYWRpbmcgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9Mb2Fkcy5wdXNoKG1vZElkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZVNjcmlwdChtb2RJZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFtb2QuaW5pdGVkICYmIG1vZC5mZXRjaGVkICYmIG1hcC5pc0RlZmluZSkgewogICAgICAgICAgICAgICAgICAgICAgICBzdGlsbExvYWRpbmcgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hcC5wcmVmaXgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vTm8gcmVhc29uIHRvIGtlZXAgbG9va2luZyBmb3IgdW5maW5pc2hlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9sb2FkaW5nLiBJZiB0aGUgb25seSBzdGlsbExvYWRpbmcgaXMgYQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9wbHVnaW4gcmVzb3VyY2UgdGhvdWdoLCBrZWVwIGdvaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9iZWNhdXNlIGl0IG1heSBiZSB0aGF0IGEgcGx1Z2luIHJlc291cmNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2lzIHdhaXRpbmcgb24gYSBub24tcGx1Z2luIGN5Y2xlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChuZWVkQ3ljbGVDaGVjayA9IGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICBpZiAoZXhwaXJlZCAmJiBub0xvYWRzLmxlbmd0aCkgewogICAgICAgICAgICAgICAgLy9JZiB3YWl0IHRpbWUgZXhwaXJlZCwgdGhyb3cgZXJyb3Igb2YgdW5sb2FkZWQgbW9kdWxlcy4KICAgICAgICAgICAgICAgIGVyciA9IG1ha2VFcnJvcigndGltZW91dCcsICdMb2FkIHRpbWVvdXQgZm9yIG1vZHVsZXM6ICcgKyBub0xvYWRzLCBudWxsLCBub0xvYWRzKTsKICAgICAgICAgICAgICAgIGVyci5jb250ZXh0TmFtZSA9IGNvbnRleHQuY29udGV4dE5hbWU7CiAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihlcnIpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvL05vdCBleHBpcmVkLCBjaGVjayBmb3IgYSBjeWNsZS4KICAgICAgICAgICAgaWYgKG5lZWRDeWNsZUNoZWNrKSB7CiAgICAgICAgICAgICAgICBlYWNoKHJlcUNhbGxzLCBmdW5jdGlvbiAobW9kKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWtDeWNsZShtb2QsIHt9LCB7fSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy9JZiBzdGlsbCB3YWl0aW5nIG9uIGxvYWRzLCBhbmQgdGhlIHdhaXRpbmcgbG9hZCBpcyBzb21ldGhpbmcKICAgICAgICAgICAgLy9vdGhlciB0aGFuIGEgcGx1Z2luIHJlc291cmNlLCBvciB0aGVyZSBhcmUgc3RpbGwgb3V0c3RhbmRpbmcKICAgICAgICAgICAgLy9zY3JpcHRzLCB0aGVuIGp1c3QgdHJ5IGJhY2sgbGF0ZXIuCiAgICAgICAgICAgIGlmICgoIWV4cGlyZWQgfHwgdXNpbmdQYXRoRmFsbGJhY2spICYmIHN0aWxsTG9hZGluZykgewogICAgICAgICAgICAgICAgLy9Tb21ldGhpbmcgaXMgc3RpbGwgd2FpdGluZyB0byBsb2FkLiBXYWl0IGZvciBpdCwgYnV0IG9ubHkKICAgICAgICAgICAgICAgIC8vaWYgYSB0aW1lb3V0IGlzIG5vdCBhbHJlYWR5IGluIGVmZmVjdC4KICAgICAgICAgICAgICAgIGlmICgoaXNCcm93c2VyIHx8IGlzV2ViV29ya2VyKSAmJiAhY2hlY2tMb2FkZWRUaW1lb3V0SWQpIHsKICAgICAgICAgICAgICAgICAgICBjaGVja0xvYWRlZFRpbWVvdXRJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICBjaGVja0xvYWRlZFRpbWVvdXRJZCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrTG9hZGVkKCk7CiAgICAgICAgICAgICAgICAgICAgfSwgNTApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpbkNoZWNrTG9hZGVkID0gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBNb2R1bGUgPSBmdW5jdGlvbiAobWFwKSB7CiAgICAgICAgICAgIHRoaXMuZXZlbnRzID0gZ2V0T3duKHVuZGVmRXZlbnRzLCBtYXAuaWQpIHx8IHt9OwogICAgICAgICAgICB0aGlzLm1hcCA9IG1hcDsKICAgICAgICAgICAgdGhpcy5zaGltID0gZ2V0T3duKGNvbmZpZy5zaGltLCBtYXAuaWQpOwogICAgICAgICAgICB0aGlzLmRlcEV4cG9ydHMgPSBbXTsKICAgICAgICAgICAgdGhpcy5kZXBNYXBzID0gW107CiAgICAgICAgICAgIHRoaXMuZGVwTWF0Y2hlZCA9IFtdOwogICAgICAgICAgICB0aGlzLnBsdWdpbk1hcHMgPSB7fTsKICAgICAgICAgICAgdGhpcy5kZXBDb3VudCA9IDA7CgogICAgICAgICAgICAvKiB0aGlzLmV4cG9ydHMgdGhpcy5mYWN0b3J5CiAgICAgICAgICAgICAgIHRoaXMuZGVwTWFwcyA9IFtdLAogICAgICAgICAgICAgICB0aGlzLmVuYWJsZWQsIHRoaXMuZmV0Y2hlZAogICAgICAgICAgICAqLwogICAgICAgIH07CgogICAgICAgIE1vZHVsZS5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uIChkZXBNYXBzLCBmYWN0b3J5LCBlcnJiYWNrLCBvcHRpb25zKSB7CiAgICAgICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKCiAgICAgICAgICAgICAgICAvL0RvIG5vdCBkbyBtb3JlIGluaXRzIGlmIGFscmVhZHkgZG9uZS4gQ2FuIGhhcHBlbiBpZiB0aGVyZQogICAgICAgICAgICAgICAgLy9hcmUgbXVsdGlwbGUgZGVmaW5lIGNhbGxzIGZvciB0aGUgc2FtZSBtb2R1bGUuIFRoYXQgaXMgbm90CiAgICAgICAgICAgICAgICAvL2Egbm9ybWFsLCBjb21tb24gY2FzZSwgYnV0IGl0IGlzIGFsc28gbm90IHVuZXhwZWN0ZWQuCiAgICAgICAgICAgICAgICBpZiAodGhpcy5pbml0ZWQpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdGhpcy5mYWN0b3J5ID0gZmFjdG9yeTsKCiAgICAgICAgICAgICAgICBpZiAoZXJyYmFjaykgewogICAgICAgICAgICAgICAgICAgIC8vUmVnaXN0ZXIgZm9yIGVycm9ycyBvbiB0aGlzIG1vZHVsZS4KICAgICAgICAgICAgICAgICAgICB0aGlzLm9uKCdlcnJvcicsIGVycmJhY2spOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmV2ZW50cy5lcnJvcikgewogICAgICAgICAgICAgICAgICAgIC8vSWYgbm8gZXJyYmFjayBhbHJlYWR5LCBidXQgdGhlcmUgYXJlIGVycm9yIGxpc3RlbmVycwogICAgICAgICAgICAgICAgICAgIC8vb24gdGhpcyBtb2R1bGUsIHNldCB1cCBhbiBlcnJiYWNrIHRvIHBhc3MgdG8gdGhlIGRlcHMuCiAgICAgICAgICAgICAgICAgICAgZXJyYmFjayA9IGJpbmQodGhpcywgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvL0RvIGEgY29weSBvZiB0aGUgZGVwZW5kZW5jeSBhcnJheSwgc28gdGhhdAogICAgICAgICAgICAgICAgLy9zb3VyY2UgaW5wdXRzIGFyZSBub3QgbW9kaWZpZWQuIEZvciBleGFtcGxlCiAgICAgICAgICAgICAgICAvLyJzaGltIiBkZXBzIGFyZSBwYXNzZWQgaW4gaGVyZSBkaXJlY3RseSwgYW5kCiAgICAgICAgICAgICAgICAvL2RvaW5nIGEgZGlyZWN0IG1vZGlmaWNhdGlvbiBvZiB0aGUgZGVwTWFwcyBhcnJheQogICAgICAgICAgICAgICAgLy93b3VsZCBhZmZlY3QgdGhhdCBjb25maWcuCiAgICAgICAgICAgICAgICB0aGlzLmRlcE1hcHMgPSBkZXBNYXBzICYmIGRlcE1hcHMuc2xpY2UoMCk7CgogICAgICAgICAgICAgICAgdGhpcy5lcnJiYWNrID0gZXJyYmFjazsKCiAgICAgICAgICAgICAgICAvL0luZGljYXRlIHRoaXMgbW9kdWxlIGhhcyBiZSBpbml0aWFsaXplZAogICAgICAgICAgICAgICAgdGhpcy5pbml0ZWQgPSB0cnVlOwoKICAgICAgICAgICAgICAgIHRoaXMuaWdub3JlID0gb3B0aW9ucy5pZ25vcmU7CgogICAgICAgICAgICAgICAgLy9Db3VsZCBoYXZlIG9wdGlvbiB0byBpbml0IHRoaXMgbW9kdWxlIGluIGVuYWJsZWQgbW9kZSwKICAgICAgICAgICAgICAgIC8vb3IgY291bGQgaGF2ZSBiZWVuIHByZXZpb3VzbHkgbWFya2VkIGFzIGVuYWJsZWQuIEhvd2V2ZXIsCiAgICAgICAgICAgICAgICAvL3RoZSBkZXBlbmRlbmNpZXMgYXJlIG5vdCBrbm93biB1bnRpbCBpbml0IGlzIGNhbGxlZC4gU28KICAgICAgICAgICAgICAgIC8vaWYgZW5hYmxlZCBwcmV2aW91c2x5LCBub3cgdHJpZ2dlciBkZXBlbmRlbmNpZXMgYXMgZW5hYmxlZC4KICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmVuYWJsZWQgfHwgdGhpcy5lbmFibGVkKSB7CiAgICAgICAgICAgICAgICAgICAgLy9FbmFibGUgdGhpcyBtb2R1bGUgYW5kIGRlcGVuZGVuY2llcy4KICAgICAgICAgICAgICAgICAgICAvL1dpbGwgY2FsbCB0aGlzLmNoZWNrKCkKICAgICAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZSgpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBkZWZpbmVEZXA6IGZ1bmN0aW9uIChpLCBkZXBFeHBvcnRzKSB7CiAgICAgICAgICAgICAgICAvL0JlY2F1c2Ugb2YgY3ljbGVzLCBkZWZpbmVkIGNhbGxiYWNrIGZvciBhIGdpdmVuCiAgICAgICAgICAgICAgICAvL2V4cG9ydCBjYW4gYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlLgogICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRlcE1hdGNoZWRbaV0pIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcE1hdGNoZWRbaV0gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwQ291bnQgLT0gMTsKICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcEV4cG9ydHNbaV0gPSBkZXBFeHBvcnRzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgZmV0Y2g6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIGlmICh0aGlzLmZldGNoZWQpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0aGlzLmZldGNoZWQgPSB0cnVlOwoKICAgICAgICAgICAgICAgIGNvbnRleHQuc3RhcnRUaW1lID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTsKCiAgICAgICAgICAgICAgICB2YXIgbWFwID0gdGhpcy5tYXA7CgogICAgICAgICAgICAgICAgLy9JZiB0aGUgbWFuYWdlciBpcyBmb3IgYSBwbHVnaW4gbWFuYWdlZCByZXNvdXJjZSwKICAgICAgICAgICAgICAgIC8vYXNrIHRoZSBwbHVnaW4gdG8gbG9hZCBpdCBub3cuCiAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGltKSB7CiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5tYWtlUmVxdWlyZSh0aGlzLm1hcCwgewogICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVCdWlsZENhbGxiYWNrOiB0cnVlCiAgICAgICAgICAgICAgICAgICAgfSkodGhpcy5zaGltLmRlcHMgfHwgW10sIGJpbmQodGhpcywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFwLnByZWZpeCA/IHRoaXMuY2FsbFBsdWdpbigpIDogdGhpcy5sb2FkKCk7CiAgICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvL1JlZ3VsYXIgZGVwZW5kZW5jeS4KICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFwLnByZWZpeCA/IHRoaXMuY2FsbFBsdWdpbigpIDogdGhpcy5sb2FkKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBsb2FkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICB2YXIgdXJsID0gdGhpcy5tYXAudXJsOwoKICAgICAgICAgICAgICAgIC8vUmVndWxhciBkZXBlbmRlbmN5LgogICAgICAgICAgICAgICAgaWYgKCF1cmxGZXRjaGVkW3VybF0pIHsKICAgICAgICAgICAgICAgICAgICB1cmxGZXRjaGVkW3VybF0gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGNvbnRleHQubG9hZCh0aGlzLm1hcC5pZCwgdXJsKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDaGVja3MgaWYgdGhlIG1vZHVsZSBpcyByZWFkeSB0byBkZWZpbmUgaXRzZWxmLCBhbmQgaWYgc28sCiAgICAgICAgICAgICAqIGRlZmluZSBpdC4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGNoZWNrOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZW5hYmxlZCB8fCB0aGlzLmVuYWJsaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBlcnIsIGNqc01vZHVsZSwKICAgICAgICAgICAgICAgICAgICBpZCA9IHRoaXMubWFwLmlkLAogICAgICAgICAgICAgICAgICAgIGRlcEV4cG9ydHMgPSB0aGlzLmRlcEV4cG9ydHMsCiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cyA9IHRoaXMuZXhwb3J0cywKICAgICAgICAgICAgICAgICAgICBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5OwoKICAgICAgICAgICAgICAgIGlmICghdGhpcy5pbml0ZWQpIHsKICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IGZldGNoIGlmIG5vdCBhbHJlYWR5IGluIHRoZSBkZWZRdWV1ZS4KICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc1Byb3AoY29udGV4dC5kZWZRdWV1ZU1hcCwgaWQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2goKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgdGhpcy5lcnJvcik7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmRlZmluaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgLy9UaGUgZmFjdG9yeSBjb3VsZCB0cmlnZ2VyIGFub3RoZXIgcmVxdWlyZSBjYWxsCiAgICAgICAgICAgICAgICAgICAgLy90aGF0IHdvdWxkIHJlc3VsdCBpbiBjaGVja2luZyB0aGlzIG1vZHVsZSB0bwogICAgICAgICAgICAgICAgICAgIC8vZGVmaW5lIGl0c2VsZiBhZ2Fpbi4gSWYgYWxyZWFkeSBpbiB0aGUgcHJvY2VzcwogICAgICAgICAgICAgICAgICAgIC8vb2YgZG9pbmcgdGhhdCwgc2tpcCB0aGlzIHdvcmsuCiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZpbmluZyA9IHRydWU7CgogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlcENvdW50IDwgMSAmJiAhdGhpcy5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGZhY3RvcnkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0lmIHRoZXJlIGlzIGFuIGVycm9yIGxpc3RlbmVyLCBmYXZvciBwYXNzaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3RvIHRoYXQgaW5zdGVhZCBvZiB0aHJvd2luZyBhbiBlcnJvci4gSG93ZXZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vb25seSBkbyBpdCBmb3IgZGVmaW5lKCknZCAgbW9kdWxlcy4gcmVxdWlyZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9lcnJiYWNrcyBzaG91bGQgbm90IGJlIGNhbGxlZCBmb3IgZmFpbHVyZXMgaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhlaXIgY2FsbGJhY2tzICgjNjk5KS4gSG93ZXZlciBpZiBhIGdsb2JhbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9vbkVycm9yIGlzIHNldCwgdXNlIHRoYXQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHRoaXMuZXZlbnRzLmVycm9yICYmIHRoaXMubWFwLmlzRGVmaW5lKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS5vbkVycm9yICE9PSBkZWZhdWx0T25FcnJvcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHMgPSBjb250ZXh0LmV4ZWNDYihpZCwgZmFjdG9yeSwgZGVwRXhwb3J0cywgZXhwb3J0cyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0cyA9IGNvbnRleHQuZXhlY0NiKGlkLCBmYWN0b3J5LCBkZXBFeHBvcnRzLCBleHBvcnRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGYXZvciByZXR1cm4gdmFsdWUgb3ZlciBleHBvcnRzLiBJZiBub2RlL2NqcyBpbiBwbGF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlbiB3aWxsIG5vdCBoYXZlIGEgcmV0dXJuIHZhbHVlIGFueXdheS4gRmF2b3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1vZHVsZS5leHBvcnRzIGFzc2lnbm1lbnQgb3ZlciBleHBvcnRzIG9iamVjdC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hcC5pc0RlZmluZSAmJiBleHBvcnRzID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjanNNb2R1bGUgPSB0aGlzLm1vZHVsZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2pzTW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHMgPSBjanNNb2R1bGUuZXhwb3J0czsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudXNpbmdFeHBvcnRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vZXhwb3J0cyBhbHJlYWR5IHNldCB0aGUgZGVmaW5lZCB2YWx1ZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0cyA9IHRoaXMuZXhwb3J0czsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyci5yZXF1aXJlTWFwID0gdGhpcy5tYXA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyLnJlcXVpcmVNb2R1bGVzID0gdGhpcy5tYXAuaXNEZWZpbmUgPyBbdGhpcy5tYXAuaWRdIDogbnVsbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIucmVxdWlyZVR5cGUgPSB0aGlzLm1hcC5pc0RlZmluZSA/ICdkZWZpbmUnIDogJ3JlcXVpcmUnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvbkVycm9yKCh0aGlzLmVycm9yID0gZXJyKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9KdXN0IGEgbGl0ZXJhbCB2YWx1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0cyA9IGZhY3Rvcnk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwb3J0cyA9IGV4cG9ydHM7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXAuaXNEZWZpbmUgJiYgIXRoaXMuaWdub3JlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkW2lkXSA9IGV4cG9ydHM7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS5vblJlc291cmNlTG9hZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXNMb2FkTWFwcyA9IFtdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhY2godGhpcy5kZXBNYXBzLCBmdW5jdGlvbiAoZGVwTWFwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc0xvYWRNYXBzLnB1c2goZGVwTWFwLm5vcm1hbGl6ZWRNYXAgfHwgZGVwTWFwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXEub25SZXNvdXJjZUxvYWQoY29udGV4dCwgdGhpcy5tYXAsIHJlc0xvYWRNYXBzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy9DbGVhbiB1cAogICAgICAgICAgICAgICAgICAgICAgICBjbGVhblJlZ2lzdHJ5KGlkKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5lZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAvL0ZpbmlzaGVkIHRoZSBkZWZpbmUgc3RhZ2UuIEFsbG93IGNhbGxpbmcgY2hlY2sgYWdhaW4KICAgICAgICAgICAgICAgICAgICAvL3RvIGFsbG93IGRlZmluZSBub3RpZmljYXRpb25zIGJlbG93IGluIHRoZSBjYXNlIG9mIGEKICAgICAgICAgICAgICAgICAgICAvL2N5Y2xlLgogICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5pbmcgPSBmYWxzZTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVmaW5lZCAmJiAhdGhpcy5kZWZpbmVFbWl0dGVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5lRW1pdHRlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZGVmaW5lZCcsIHRoaXMuZXhwb3J0cyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5lRW1pdENvbXBsZXRlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgY2FsbFBsdWdpbjogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgdmFyIG1hcCA9IHRoaXMubWFwLAogICAgICAgICAgICAgICAgICAgIGlkID0gbWFwLmlkLAogICAgICAgICAgICAgICAgICAgIC8vTWFwIGFscmVhZHkgbm9ybWFsaXplZCB0aGUgcHJlZml4LgogICAgICAgICAgICAgICAgICAgIHBsdWdpbk1hcCA9IG1ha2VNb2R1bGVNYXAobWFwLnByZWZpeCk7CgogICAgICAgICAgICAgICAgLy9NYXJrIHRoaXMgYXMgYSBkZXBlbmRlbmN5IGZvciB0aGlzIHBsdWdpbiwgc28gaXQKICAgICAgICAgICAgICAgIC8vY2FuIGJlIHRyYWNlZCBmb3IgY3ljbGVzLgogICAgICAgICAgICAgICAgdGhpcy5kZXBNYXBzLnB1c2gocGx1Z2luTWFwKTsKCiAgICAgICAgICAgICAgICBvbihwbHVnaW5NYXAsICdkZWZpbmVkJywgYmluZCh0aGlzLCBmdW5jdGlvbiAocGx1Z2luKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGxvYWQsIG5vcm1hbGl6ZWRNYXAsIG5vcm1hbGl6ZWRNb2QsCiAgICAgICAgICAgICAgICAgICAgICAgIGJ1bmRsZUlkID0gZ2V0T3duKGJ1bmRsZXNNYXAsIHRoaXMubWFwLmlkKSwKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHRoaXMubWFwLm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE5hbWUgPSB0aGlzLm1hcC5wYXJlbnRNYXAgPyB0aGlzLm1hcC5wYXJlbnRNYXAubmFtZSA6IG51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsUmVxdWlyZSA9IGNvbnRleHQubWFrZVJlcXVpcmUobWFwLnBhcmVudE1hcCwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlQnVpbGRDYWxsYmFjazogdHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgLy9JZiBjdXJyZW50IG1hcCBpcyBub3Qgbm9ybWFsaXplZCwgd2FpdCBmb3IgdGhhdAogICAgICAgICAgICAgICAgICAgIC8vbm9ybWFsaXplZCBuYW1lIHRvIGxvYWQgaW5zdGVhZCBvZiBjb250aW51aW5nLgogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hcC51bm5vcm1hbGl6ZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9Ob3JtYWxpemUgdGhlIElEIGlmIHRoZSBwbHVnaW4gYWxsb3dzIGl0LgogICAgICAgICAgICAgICAgICAgICAgICBpZiAocGx1Z2luLm5vcm1hbGl6ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHBsdWdpbi5ub3JtYWxpemUobmFtZSwgZnVuY3Rpb24gKG5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplKG5hbWUsIHBhcmVudE5hbWUsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgfHwgJyc7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vcHJlZml4IGFuZCBuYW1lIHNob3VsZCBhbHJlYWR5IGJlIG5vcm1hbGl6ZWQsIG5vIG5lZWQKICAgICAgICAgICAgICAgICAgICAgICAgLy9mb3IgYXBwbHlpbmcgbWFwIGNvbmZpZyBhZ2FpbiBlaXRoZXIuCiAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRNYXAgPSBtYWtlTW9kdWxlTWFwKG1hcC5wcmVmaXggKyAnIScgKyBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcC5wYXJlbnRNYXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICBvbihub3JtYWxpemVkTWFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlZmluZWQnLCBiaW5kKHRoaXMsIGZ1bmN0aW9uICh2YWx1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFwLm5vcm1hbGl6ZWRNYXAgPSBub3JtYWxpemVkTWFwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdChbXSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsdWU7IH0sIG51bGwsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlOiB0cnVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7CgogICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBub3JtYWxpemVkTWFwLmlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRNb2QpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vTWFyayB0aGlzIGFzIGEgZGVwZW5kZW5jeSBmb3IgdGhpcyBwbHVnaW4sIHNvIGl0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2NhbiBiZSB0cmFjZWQgZm9yIGN5Y2xlcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwTWFwcy5wdXNoKG5vcm1hbGl6ZWRNYXApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmV2ZW50cy5lcnJvcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRNb2Qub24oJ2Vycm9yJywgYmluZCh0aGlzLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRNb2QuZW5hYmxlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIC8vSWYgYSBwYXRocyBjb25maWcsIHRoZW4ganVzdCBsb2FkIHRoYXQgZmlsZSBpbnN0ZWFkIHRvCiAgICAgICAgICAgICAgICAgICAgLy9yZXNvbHZlIHRoZSBwbHVnaW4sIGFzIGl0IGlzIGJ1aWx0IGludG8gdGhhdCBwYXRocyBsYXllci4KICAgICAgICAgICAgICAgICAgICBpZiAoYnVuZGxlSWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXAudXJsID0gY29udGV4dC5uYW1lVG9VcmwoYnVuZGxlSWQpOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgbG9hZCA9IGJpbmQodGhpcywgZnVuY3Rpb24gKHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdChbXSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsdWU7IH0sIG51bGwsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgIGxvYWQuZXJyb3IgPSBiaW5kKHRoaXMsIGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gZXJyOwogICAgICAgICAgICAgICAgICAgICAgICBlcnIucmVxdWlyZU1vZHVsZXMgPSBbaWRdOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy9SZW1vdmUgdGVtcCB1bm5vcm1hbGl6ZWQgbW9kdWxlcyBmb3IgdGhpcyBtb2R1bGUsCiAgICAgICAgICAgICAgICAgICAgICAgIC8vc2luY2UgdGhleSB3aWxsIG5ldmVyIGJlIHJlc29sdmVkIG90aGVyd2lzZSBub3cuCiAgICAgICAgICAgICAgICAgICAgICAgIGVhY2hQcm9wKHJlZ2lzdHJ5LCBmdW5jdGlvbiAobW9kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kLm1hcC5pZC5pbmRleE9mKGlkICsgJ191bm5vcm1hbGl6ZWQnKSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFuUmVnaXN0cnkobW9kLm1hcC5pZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICAgICAgb25FcnJvcihlcnIpOwogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICAvL0FsbG93IHBsdWdpbnMgdG8gbG9hZCBvdGhlciBjb2RlIHdpdGhvdXQgaGF2aW5nIHRvIGtub3cgdGhlCiAgICAgICAgICAgICAgICAgICAgLy9jb250ZXh0IG9yIGhvdyB0byAnY29tcGxldGUnIHRoZSBsb2FkLgogICAgICAgICAgICAgICAgICAgIGxvYWQuZnJvbVRleHQgPSBiaW5kKHRoaXMsIGZ1bmN0aW9uICh0ZXh0LCB0ZXh0QWx0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8qanNsaW50IGV2aWw6IHRydWUgKi8KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1vZHVsZU5hbWUgPSBtYXAubmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZU1hcCA9IG1ha2VNb2R1bGVNYXAobW9kdWxlTmFtZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNJbnRlcmFjdGl2ZSA9IHVzZUludGVyYWN0aXZlOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy9BcyBvZiAyLjEuMCwgc3VwcG9ydCBqdXN0IHBhc3NpbmcgdGhlIHRleHQsIHRvIHJlaW5mb3JjZQogICAgICAgICAgICAgICAgICAgICAgICAvL2Zyb21UZXh0IG9ubHkgYmVpbmcgY2FsbGVkIG9uY2UgcGVyIHJlc291cmNlLiBTdGlsbAogICAgICAgICAgICAgICAgICAgICAgICAvL3N1cHBvcnQgb2xkIHN0eWxlIG9mIHBhc3NpbmcgbW9kdWxlTmFtZSBidXQgZGlzY2FyZAogICAgICAgICAgICAgICAgICAgICAgICAvL3RoYXQgbW9kdWxlTmFtZSBpbiBmYXZvciBvZiB0aGUgaW50ZXJuYWwgcmVmLgogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dEFsdCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHRleHRBbHQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vVHVybiBvZmYgaW50ZXJhY3RpdmUgc2NyaXB0IG1hdGNoaW5nIGZvciBJRSBmb3IgYW55IGRlZmluZQogICAgICAgICAgICAgICAgICAgICAgICAvL2NhbGxzIGluIHRoZSB0ZXh0LCB0aGVuIHR1cm4gaXQgYmFjayBvbiBhdCB0aGUgZW5kLgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSW50ZXJhY3RpdmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZUludGVyYWN0aXZlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vUHJpbWUgdGhlIHN5c3RlbSBieSBjcmVhdGluZyBhIG1vZHVsZSBpbnN0YW5jZSBmb3IKICAgICAgICAgICAgICAgICAgICAgICAgLy9pdC4KICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TW9kdWxlKG1vZHVsZU1hcCk7CgogICAgICAgICAgICAgICAgICAgICAgICAvL1RyYW5zZmVyIGFueSBjb25maWcgdG8gdGhpcyBvdGhlciBtb2R1bGUuCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNQcm9wKGNvbmZpZy5jb25maWcsIGlkKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLmNvbmZpZ1ttb2R1bGVOYW1lXSA9IGNvbmZpZy5jb25maWdbaWRdOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxLmV4ZWModGV4dCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvbkVycm9yKG1ha2VFcnJvcignZnJvbXRleHRldmFsJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zyb21UZXh0IGV2YWwgZm9yICcgKyBpZCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBmYWlsZWQ6ICcgKyBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJbnRlcmFjdGl2ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlSW50ZXJhY3RpdmUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvL01hcmsgdGhpcyBhcyBhIGRlcGVuZGVuY3kgZm9yIHRoZSBwbHVnaW4KICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXNvdXJjZQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcE1hcHMucHVzaChtb2R1bGVNYXApOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy9TdXBwb3J0IGFub255bW91cyBtb2R1bGVzLgogICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmNvbXBsZXRlTG9hZChtb2R1bGVOYW1lKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vQmluZCB0aGUgdmFsdWUgb2YgdGhhdCBtb2R1bGUgdG8gdGhlIHZhbHVlIGZvciB0aGlzCiAgICAgICAgICAgICAgICAgICAgICAgIC8vcmVzb3VyY2UgSUQuCiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsUmVxdWlyZShbbW9kdWxlTmFtZV0sIGxvYWQpOwogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICAvL1VzZSBwYXJlbnROYW1lIGhlcmUgc2luY2UgdGhlIHBsdWdpbidzIG5hbWUgaXMgbm90IHJlbGlhYmxlLAogICAgICAgICAgICAgICAgICAgIC8vY291bGQgYmUgc29tZSB3ZWlyZCBzdHJpbmcgd2l0aCBubyBwYXRoIHRoYXQgYWN0dWFsbHkgd2FudHMgdG8KICAgICAgICAgICAgICAgICAgICAvL3JlZmVyZW5jZSB0aGUgcGFyZW50TmFtZSdzIHBhdGguCiAgICAgICAgICAgICAgICAgICAgcGx1Z2luLmxvYWQobWFwLm5hbWUsIGxvY2FsUmVxdWlyZSwgbG9hZCwgY29uZmlnKTsKICAgICAgICAgICAgICAgIH0pKTsKCiAgICAgICAgICAgICAgICBjb250ZXh0LmVuYWJsZShwbHVnaW5NYXAsIHRoaXMpOwogICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5NYXBzW3BsdWdpbk1hcC5pZF0gPSBwbHVnaW5NYXA7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBlbmFibGU6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIGVuYWJsZWRSZWdpc3RyeVt0aGlzLm1hcC5pZF0gPSB0aGlzOwogICAgICAgICAgICAgICAgdGhpcy5lbmFibGVkID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICAvL1NldCBmbGFnIG1lbnRpb25pbmcgdGhhdCB0aGUgbW9kdWxlIGlzIGVuYWJsaW5nLAogICAgICAgICAgICAgICAgLy9zbyB0aGF0IGltbWVkaWF0ZSBjYWxscyB0byB0aGUgZGVmaW5lZCBjYWxsYmFja3MKICAgICAgICAgICAgICAgIC8vZm9yIGRlcGVuZGVuY2llcyBkbyBub3QgdHJpZ2dlciBpbmFkdmVydGVudCBsb2FkCiAgICAgICAgICAgICAgICAvL3dpdGggdGhlIGRlcENvdW50IHN0aWxsIGJlaW5nIHplcm8uCiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsaW5nID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICAvL0VuYWJsZSBlYWNoIGRlcGVuZGVuY3kKICAgICAgICAgICAgICAgIGVhY2godGhpcy5kZXBNYXBzLCBiaW5kKHRoaXMsIGZ1bmN0aW9uIChkZXBNYXAsIGkpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgaWQsIG1vZCwgaGFuZGxlcjsKCiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkZXBNYXAgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vRGVwZW5kZW5jeSBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgdG8gYSBkZXBNYXAKICAgICAgICAgICAgICAgICAgICAgICAgLy9hbmQgd2lyZWQgdXAgdG8gdGhpcyBtb2R1bGUuCiAgICAgICAgICAgICAgICAgICAgICAgIGRlcE1hcCA9IG1ha2VNb2R1bGVNYXAoZGVwTWFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLm1hcC5pc0RlZmluZSA/IHRoaXMubWFwIDogdGhpcy5tYXAucGFyZW50TWFwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5za2lwTWFwKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBNYXBzW2ldID0gZGVwTWFwOwoKICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlciA9IGdldE93bihoYW5kbGVycywgZGVwTWFwLmlkKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcEV4cG9ydHNbaV0gPSBoYW5kbGVyKHRoaXMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcENvdW50ICs9IDE7CgogICAgICAgICAgICAgICAgICAgICAgICBvbihkZXBNYXAsICdkZWZpbmVkJywgYmluZCh0aGlzLCBmdW5jdGlvbiAoZGVwRXhwb3J0cykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudW5kZWZlZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5lRGVwKGksIGRlcEV4cG9ydHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVjaygpOwogICAgICAgICAgICAgICAgICAgICAgICB9KSk7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5lcnJiYWNrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbihkZXBNYXAsICdlcnJvcicsIGJpbmQodGhpcywgdGhpcy5lcnJiYWNrKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5ldmVudHMuZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vIGRpcmVjdCBlcnJiYWNrIG9uIHRoaXMgbW9kdWxlLCBidXQgc29tZXRoaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlbHNlIGlzIGxpc3RlbmluZyBmb3IgZXJyb3JzLCBzbyBiZSBzdXJlIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcm9wYWdhdGUgdGhlIGVycm9yIGNvcnJlY3RseS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uKGRlcE1hcCwgJ2Vycm9yJywgYmluZCh0aGlzLCBmdW5jdGlvbihlcnIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWQgPSBkZXBNYXAuaWQ7CiAgICAgICAgICAgICAgICAgICAgbW9kID0gcmVnaXN0cnlbaWRdOwoKICAgICAgICAgICAgICAgICAgICAvL1NraXAgc3BlY2lhbCBtb2R1bGVzIGxpa2UgJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnCiAgICAgICAgICAgICAgICAgICAgLy9BbHNvLCBkb24ndCBjYWxsIGVuYWJsZSBpZiBpdCBpcyBhbHJlYWR5IGVuYWJsZWQsCiAgICAgICAgICAgICAgICAgICAgLy9pbXBvcnRhbnQgaW4gY2lyY3VsYXIgZGVwZW5kZW5jeSBjYXNlcy4KICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc1Byb3AoaGFuZGxlcnMsIGlkKSAmJiBtb2QgJiYgIW1vZC5lbmFibGVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZW5hYmxlKGRlcE1hcCwgdGhpcyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSkpOwoKICAgICAgICAgICAgICAgIC8vRW5hYmxlIGVhY2ggcGx1Z2luIHRoYXQgaXMgdXNlZCBpbgogICAgICAgICAgICAgICAgLy9hIGRlcGVuZGVuY3kKICAgICAgICAgICAgICAgIGVhY2hQcm9wKHRoaXMucGx1Z2luTWFwcywgYmluZCh0aGlzLCBmdW5jdGlvbiAocGx1Z2luTWFwKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIG1vZCA9IGdldE93bihyZWdpc3RyeSwgcGx1Z2luTWFwLmlkKTsKICAgICAgICAgICAgICAgICAgICBpZiAobW9kICYmICFtb2QuZW5hYmxlZCkgewogICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmVuYWJsZShwbHVnaW5NYXAsIHRoaXMpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pKTsKCiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsaW5nID0gZmFsc2U7CgogICAgICAgICAgICAgICAgdGhpcy5jaGVjaygpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgb246IGZ1bmN0aW9uIChuYW1lLCBjYikgewogICAgICAgICAgICAgICAgdmFyIGNicyA9IHRoaXMuZXZlbnRzW25hbWVdOwogICAgICAgICAgICAgICAgaWYgKCFjYnMpIHsKICAgICAgICAgICAgICAgICAgICBjYnMgPSB0aGlzLmV2ZW50c1tuYW1lXSA9IFtdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY2JzLnB1c2goY2IpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgZW1pdDogZnVuY3Rpb24gKG5hbWUsIGV2dCkgewogICAgICAgICAgICAgICAgZWFjaCh0aGlzLmV2ZW50c1tuYW1lXSwgZnVuY3Rpb24gKGNiKSB7CiAgICAgICAgICAgICAgICAgICAgY2IoZXZ0KTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdlcnJvcicpIHsKICAgICAgICAgICAgICAgICAgICAvL05vdyB0aGF0IHRoZSBlcnJvciBoYW5kbGVyIHdhcyB0cmlnZ2VyZWQsIHJlbW92ZQogICAgICAgICAgICAgICAgICAgIC8vdGhlIGxpc3RlbmVycywgc2luY2UgdGhpcyBicm9rZW4gTW9kdWxlIGluc3RhbmNlCiAgICAgICAgICAgICAgICAgICAgLy9jYW4gc3RheSBhcm91bmQgZm9yIGEgd2hpbGUgaW4gdGhlIHJlZ2lzdHJ5LgogICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmV2ZW50c1tuYW1lXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH07CgogICAgICAgIGZ1bmN0aW9uIGNhbGxHZXRNb2R1bGUoYXJncykgewogICAgICAgICAgICAvL1NraXAgbW9kdWxlcyBhbHJlYWR5IGRlZmluZWQuCiAgICAgICAgICAgIGlmICghaGFzUHJvcChkZWZpbmVkLCBhcmdzWzBdKSkgewogICAgICAgICAgICAgICAgZ2V0TW9kdWxlKG1ha2VNb2R1bGVNYXAoYXJnc1swXSwgbnVsbCwgdHJ1ZSkpLmluaXQoYXJnc1sxXSwgYXJnc1syXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKG5vZGUsIGZ1bmMsIG5hbWUsIGllTmFtZSkgewogICAgICAgICAgICAvL0Zhdm9yIGRldGFjaEV2ZW50IGJlY2F1c2Ugb2YgSUU5CiAgICAgICAgICAgIC8vaXNzdWUsIHNlZSBhdHRhY2hFdmVudC9hZGRFdmVudExpc3RlbmVyIGNvbW1lbnQgZWxzZXdoZXJlCiAgICAgICAgICAgIC8vaW4gdGhpcyBmaWxlLgogICAgICAgICAgICBpZiAobm9kZS5kZXRhY2hFdmVudCAmJiAhaXNPcGVyYSkgewogICAgICAgICAgICAgICAgLy9Qcm9iYWJseSBJRS4gSWYgbm90IGl0IHdpbGwgdGhyb3cgYW4gZXJyb3IsIHdoaWNoIHdpbGwgYmUKICAgICAgICAgICAgICAgIC8vdXNlZnVsIHRvIGtub3cuCiAgICAgICAgICAgICAgICBpZiAoaWVOYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgbm9kZS5kZXRhY2hFdmVudChpZU5hbWUsIGZ1bmMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgbm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUsIGZ1bmMsIGZhbHNlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogR2l2ZW4gYW4gZXZlbnQgZnJvbSBhIHNjcmlwdCBub2RlLCBnZXQgdGhlIHJlcXVpcmVqcyBpbmZvIGZyb20gaXQsCiAgICAgICAgICogYW5kIHRoZW4gcmVtb3ZlcyB0aGUgZXZlbnQgbGlzdGVuZXJzIG9uIHRoZSBub2RlLgogICAgICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2dAogICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9CiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0U2NyaXB0RGF0YShldnQpIHsKICAgICAgICAgICAgLy9Vc2luZyBjdXJyZW50VGFyZ2V0IGluc3RlYWQgb2YgdGFyZ2V0IGZvciBGaXJlZm94IDIuMCdzIHNha2UuIE5vdAogICAgICAgICAgICAvL2FsbCBvbGQgYnJvd3NlcnMgd2lsbCBiZSBzdXBwb3J0ZWQsIGJ1dCB0aGlzIG9uZSB3YXMgZWFzeSBlbm91Z2gKICAgICAgICAgICAgLy90byBzdXBwb3J0IGFuZCBzdGlsbCBtYWtlcyBzZW5zZS4KICAgICAgICAgICAgdmFyIG5vZGUgPSBldnQuY3VycmVudFRhcmdldCB8fCBldnQuc3JjRWxlbWVudDsKCiAgICAgICAgICAgIC8vUmVtb3ZlIHRoZSBsaXN0ZW5lcnMgb25jZSBoZXJlLgogICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihub2RlLCBjb250ZXh0Lm9uU2NyaXB0TG9hZCwgJ2xvYWQnLCAnb25yZWFkeXN0YXRlY2hhbmdlJyk7CiAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKG5vZGUsIGNvbnRleHQub25TY3JpcHRFcnJvciwgJ2Vycm9yJyk7CgogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgbm9kZTogbm9kZSwKICAgICAgICAgICAgICAgIGlkOiBub2RlICYmIG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVtb2R1bGUnKQogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gaW50YWtlRGVmaW5lcygpIHsKICAgICAgICAgICAgdmFyIGFyZ3M7CgogICAgICAgICAgICAvL0FueSBkZWZpbmVkIG1vZHVsZXMgaW4gdGhlIGdsb2JhbCBxdWV1ZSwgaW50YWtlIHRoZW0gbm93LgogICAgICAgICAgICB0YWtlR2xvYmFsUXVldWUoKTsKCiAgICAgICAgICAgIC8vTWFrZSBzdXJlIGFueSByZW1haW5pbmcgZGVmUXVldWUgaXRlbXMgZ2V0IHByb3Blcmx5IHByb2Nlc3NlZC4KICAgICAgICAgICAgd2hpbGUgKGRlZlF1ZXVlLmxlbmd0aCkgewogICAgICAgICAgICAgICAgYXJncyA9IGRlZlF1ZXVlLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICBpZiAoYXJnc1swXSA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBvbkVycm9yKG1ha2VFcnJvcignbWlzbWF0Y2gnLCAnTWlzbWF0Y2hlZCBhbm9ueW1vdXMgZGVmaW5lKCkgbW9kdWxlOiAnICsKICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1thcmdzLmxlbmd0aCAtIDFdKSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIC8vYXJncyBhcmUgaWQsIGRlcHMsIGZhY3RvcnkuIFNob3VsZCBiZSBub3JtYWxpemVkIGJ5IHRoZQogICAgICAgICAgICAgICAgICAgIC8vZGVmaW5lKCkgZnVuY3Rpb24uCiAgICAgICAgICAgICAgICAgICAgY2FsbEdldE1vZHVsZShhcmdzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBjb250ZXh0LmRlZlF1ZXVlTWFwID0ge307CiAgICAgICAgfQoKICAgICAgICBjb250ZXh0ID0gewogICAgICAgICAgICBjb25maWc6IGNvbmZpZywKICAgICAgICAgICAgY29udGV4dE5hbWU6IGNvbnRleHROYW1lLAogICAgICAgICAgICByZWdpc3RyeTogcmVnaXN0cnksCiAgICAgICAgICAgIGRlZmluZWQ6IGRlZmluZWQsCiAgICAgICAgICAgIHVybEZldGNoZWQ6IHVybEZldGNoZWQsCiAgICAgICAgICAgIGRlZlF1ZXVlOiBkZWZRdWV1ZSwKICAgICAgICAgICAgZGVmUXVldWVNYXA6IHt9LAogICAgICAgICAgICBNb2R1bGU6IE1vZHVsZSwKICAgICAgICAgICAgbWFrZU1vZHVsZU1hcDogbWFrZU1vZHVsZU1hcCwKICAgICAgICAgICAgbmV4dFRpY2s6IHJlcS5uZXh0VGljaywKICAgICAgICAgICAgb25FcnJvcjogb25FcnJvciwKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBTZXQgYSBjb25maWd1cmF0aW9uIGZvciB0aGUgY29udGV4dC4KICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyBjb25maWcgb2JqZWN0IHRvIGludGVncmF0ZS4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGNvbmZpZ3VyZTogZnVuY3Rpb24gKGNmZykgewogICAgICAgICAgICAgICAgLy9NYWtlIHN1cmUgdGhlIGJhc2VVcmwgZW5kcyBpbiBhIHNsYXNoLgogICAgICAgICAgICAgICAgaWYgKGNmZy5iYXNlVXJsKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGNmZy5iYXNlVXJsLmNoYXJBdChjZmcuYmFzZVVybC5sZW5ndGggLSAxKSAhPT0gJy8nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNmZy5iYXNlVXJsICs9ICcvJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gQ29udmVydCBvbGQgc3R5bGUgdXJsQXJncyBzdHJpbmcgdG8gYSBmdW5jdGlvbi4KICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2ZnLnVybEFyZ3MgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHVybEFyZ3MgPSBjZmcudXJsQXJnczsKICAgICAgICAgICAgICAgICAgICBjZmcudXJsQXJncyA9IGZ1bmN0aW9uKGlkLCB1cmwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyB1cmxBcmdzOwogICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy9TYXZlIG9mZiB0aGUgcGF0aHMgc2luY2UgdGhleSByZXF1aXJlIHNwZWNpYWwgcHJvY2Vzc2luZywKICAgICAgICAgICAgICAgIC8vdGhleSBhcmUgYWRkaXRpdmUuCiAgICAgICAgICAgICAgICB2YXIgc2hpbSA9IGNvbmZpZy5zaGltLAogICAgICAgICAgICAgICAgICAgIG9ianMgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhzOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICBidW5kbGVzOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICBjb25maWc6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgIG1hcDogdHJ1ZQogICAgICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgZWFjaFByb3AoY2ZnLCBmdW5jdGlvbiAodmFsdWUsIHByb3ApIHsKICAgICAgICAgICAgICAgICAgICBpZiAob2Jqc1twcm9wXSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmZpZ1twcm9wXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnW3Byb3BdID0ge307CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgbWl4aW4oY29uZmlnW3Byb3BdLCB2YWx1ZSwgdHJ1ZSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnW3Byb3BdID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgLy9SZXZlcnNlIG1hcCB0aGUgYnVuZGxlcwogICAgICAgICAgICAgICAgaWYgKGNmZy5idW5kbGVzKSB7CiAgICAgICAgICAgICAgICAgICAgZWFjaFByb3AoY2ZnLmJ1bmRsZXMsIGZ1bmN0aW9uICh2YWx1ZSwgcHJvcCkgewogICAgICAgICAgICAgICAgICAgICAgICBlYWNoKHZhbHVlLCBmdW5jdGlvbiAodikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgIT09IHByb3ApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidW5kbGVzTWFwW3ZdID0gcHJvcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy9NZXJnZSBzaGltCiAgICAgICAgICAgICAgICBpZiAoY2ZnLnNoaW0pIHsKICAgICAgICAgICAgICAgICAgICBlYWNoUHJvcChjZmcuc2hpbSwgZnVuY3Rpb24gKHZhbHVlLCBpZCkgewogICAgICAgICAgICAgICAgICAgICAgICAvL05vcm1hbGl6ZSB0aGUgc3RydWN0dXJlCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwczogdmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh2YWx1ZS5leHBvcnRzIHx8IHZhbHVlLmluaXQpICYmICF2YWx1ZS5leHBvcnRzRm4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLmV4cG9ydHNGbiA9IGNvbnRleHQubWFrZVNoaW1FeHBvcnRzKHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBzaGltW2lkXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zaGltID0gc2hpbTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvL0FkanVzdCBwYWNrYWdlcyBpZiBuZWNlc3NhcnkuCiAgICAgICAgICAgICAgICBpZiAoY2ZnLnBhY2thZ2VzKSB7CiAgICAgICAgICAgICAgICAgICAgZWFjaChjZmcucGFja2FnZXMsIGZ1bmN0aW9uIChwa2dPYmopIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uLCBuYW1lOwoKICAgICAgICAgICAgICAgICAgICAgICAgcGtnT2JqID0gdHlwZW9mIHBrZ09iaiA9PT0gJ3N0cmluZycgPyB7bmFtZTogcGtnT2JqfSA6IHBrZ09iajsKCiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBwa2dPYmoubmFtZTsKICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24gPSBwa2dPYmoubG9jYXRpb247CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLnBhdGhzW25hbWVdID0gcGtnT2JqLmxvY2F0aW9uOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvL1NhdmUgcG9pbnRlciB0byBtYWluIG1vZHVsZSBJRCBmb3IgcGtnIG5hbWUuCiAgICAgICAgICAgICAgICAgICAgICAgIC8vUmVtb3ZlIGxlYWRpbmcgZG90IGluIG1haW4sIHNvIG1haW4gcGF0aHMgYXJlIG5vcm1hbGl6ZWQsCiAgICAgICAgICAgICAgICAgICAgICAgIC8vYW5kIHJlbW92ZSBhbnkgdHJhaWxpbmcgLmpzLCBzaW5jZSBkaWZmZXJlbnQgcGFja2FnZQogICAgICAgICAgICAgICAgICAgICAgICAvL2VudnMgaGF2ZSBkaWZmZXJlbnQgY29udmVudGlvbnM6IHNvbWUgdXNlIGEgbW9kdWxlIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIC8vc29tZSB1c2UgYSBmaWxlIG5hbWUuCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5wa2dzW25hbWVdID0gcGtnT2JqLm5hbWUgKyAnLycgKyAocGtnT2JqLm1haW4gfHwgJ21haW4nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoY3VyckRpclJlZ0V4cCwgJycpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShqc1N1ZmZpeFJlZ0V4cCwgJycpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vSWYgdGhlcmUgYXJlIGFueSAid2FpdGluZyB0byBleGVjdXRlIiBtb2R1bGVzIGluIHRoZSByZWdpc3RyeSwKICAgICAgICAgICAgICAgIC8vdXBkYXRlIHRoZSBtYXBzIGZvciB0aGVtLCBzaW5jZSB0aGVpciBpbmZvLCBsaWtlIFVSTHMgdG8gbG9hZCwKICAgICAgICAgICAgICAgIC8vbWF5IGhhdmUgY2hhbmdlZC4KICAgICAgICAgICAgICAgIGVhY2hQcm9wKHJlZ2lzdHJ5LCBmdW5jdGlvbiAobW9kLCBpZCkgewogICAgICAgICAgICAgICAgICAgIC8vSWYgbW9kdWxlIGFscmVhZHkgaGFzIGluaXQgY2FsbGVkLCBzaW5jZSBpdCBpcyB0b28KICAgICAgICAgICAgICAgICAgICAvL2xhdGUgdG8gbW9kaWZ5IHRoZW0sIGFuZCBpZ25vcmUgdW5ub3JtYWxpemVkIG9uZXMKICAgICAgICAgICAgICAgICAgICAvL3NpbmNlIHRoZXkgYXJlIHRyYW5zaWVudC4KICAgICAgICAgICAgICAgICAgICBpZiAoIW1vZC5pbml0ZWQgJiYgIW1vZC5tYXAudW5ub3JtYWxpemVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG1vZC5tYXAgPSBtYWtlTW9kdWxlTWFwKGlkLCBudWxsLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAvL0lmIGEgZGVwcyBhcnJheSBvciBhIGNvbmZpZyBjYWxsYmFjayBpcyBzcGVjaWZpZWQsIHRoZW4gY2FsbAogICAgICAgICAgICAgICAgLy9yZXF1aXJlIHdpdGggdGhvc2UgYXJncy4gVGhpcyBpcyB1c2VmdWwgd2hlbiByZXF1aXJlIGlzIGRlZmluZWQgYXMgYQogICAgICAgICAgICAgICAgLy9jb25maWcgb2JqZWN0IGJlZm9yZSByZXF1aXJlLmpzIGlzIGxvYWRlZC4KICAgICAgICAgICAgICAgIGlmIChjZmcuZGVwcyB8fCBjZmcuY2FsbGJhY2spIHsKICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcXVpcmUoY2ZnLmRlcHMgfHwgW10sIGNmZy5jYWxsYmFjayk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBtYWtlU2hpbUV4cG9ydHM6IGZ1bmN0aW9uICh2YWx1ZSkgewogICAgICAgICAgICAgICAgZnVuY3Rpb24gZm4oKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHJldDsKICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuaW5pdCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXQgPSB2YWx1ZS5pbml0LmFwcGx5KGdsb2JhbCwgYXJndW1lbnRzKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldCB8fCAodmFsdWUuZXhwb3J0cyAmJiBnZXRHbG9iYWwodmFsdWUuZXhwb3J0cykpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIGZuOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgbWFrZVJlcXVpcmU6IGZ1bmN0aW9uIChyZWxNYXAsIG9wdGlvbnMpIHsKICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwoKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGxvY2FsUmVxdWlyZShkZXBzLCBjYWxsYmFjaywgZXJyYmFjaykgewogICAgICAgICAgICAgICAgICAgIHZhciBpZCwgbWFwLCByZXF1aXJlTW9kOwoKICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5lbmFibGVCdWlsZENhbGxiYWNrICYmIGNhbGxiYWNrICYmIGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLl9fcmVxdWlyZUpzQnVpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkZXBzID09PSAnc3RyaW5nJykgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihjYWxsYmFjaykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSW52YWxpZCBjYWxsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihtYWtlRXJyb3IoJ3JlcXVpcmVhcmdzJywgJ0ludmFsaWQgcmVxdWlyZSBjYWxsJyksIGVycmJhY2spOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvL0lmIHJlcXVpcmV8ZXhwb3J0c3xtb2R1bGUgYXJlIHJlcXVlc3RlZCwgZ2V0IHRoZQogICAgICAgICAgICAgICAgICAgICAgICAvL3ZhbHVlIGZvciB0aGVtIGZyb20gdGhlIHNwZWNpYWwgaGFuZGxlcnMuIENhdmVhdDoKICAgICAgICAgICAgICAgICAgICAgICAgLy90aGlzIG9ubHkgd29ya3Mgd2hpbGUgbW9kdWxlIGlzIGJlaW5nIGRlZmluZWQuCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWxNYXAgJiYgaGFzUHJvcChoYW5kbGVycywgZGVwcykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVyc1tkZXBzXShyZWdpc3RyeVtyZWxNYXAuaWRdKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy9TeW5jaHJvbm91cyBhY2Nlc3MgdG8gb25lIG1vZHVsZS4gSWYgcmVxdWlyZS5nZXQgaXMKICAgICAgICAgICAgICAgICAgICAgICAgLy9hdmFpbGFibGUgKGFzIGluIHRoZSBOb2RlIGFkYXB0ZXIpLCBwcmVmZXIgdGhhdC4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS5nZXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXEuZ2V0KGNvbnRleHQsIGRlcHMsIHJlbE1hcCwgbG9jYWxSZXF1aXJlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy9Ob3JtYWxpemUgbW9kdWxlIG5hbWUsIGlmIGl0IGNvbnRhaW5zIC4gb3IgLi4KICAgICAgICAgICAgICAgICAgICAgICAgbWFwID0gbWFrZU1vZHVsZU1hcChkZXBzLCByZWxNYXAsIGZhbHNlLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSBtYXAuaWQ7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc1Byb3AoZGVmaW5lZCwgaWQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihtYWtlRXJyb3IoJ25vdGxvYWRlZCcsICdNb2R1bGUgbmFtZSAiJyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIiBoYXMgbm90IGJlZW4gbG9hZGVkIHlldCBmb3IgY29udGV4dDogJyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0TmFtZSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVsTWFwID8gJycgOiAnLiBVc2UgcmVxdWlyZShbXSknKSkpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWZpbmVkW2lkXTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIC8vR3JhYiBkZWZpbmVzIHdhaXRpbmcgaW4gdGhlIGdsb2JhbCBxdWV1ZS4KICAgICAgICAgICAgICAgICAgICBpbnRha2VEZWZpbmVzKCk7CgogICAgICAgICAgICAgICAgICAgIC8vTWFyayBhbGwgdGhlIGRlcGVuZGVuY2llcyBhcyBuZWVkaW5nIHRvIGJlIGxvYWRlZC4KICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm5leHRUaWNrKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9Tb21lIGRlZmluZXMgY291bGQgaGF2ZSBiZWVuIGFkZGVkIHNpbmNlIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAvL3JlcXVpcmUgY2FsbCwgY29sbGVjdCB0aGVtLgogICAgICAgICAgICAgICAgICAgICAgICBpbnRha2VEZWZpbmVzKCk7CgogICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlTW9kID0gZ2V0TW9kdWxlKG1ha2VNb2R1bGVNYXAobnVsbCwgcmVsTWFwKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAvL1N0b3JlIGlmIG1hcCBjb25maWcgc2hvdWxkIGJlIGFwcGxpZWQgdG8gdGhpcyByZXF1aXJlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vY2FsbCBmb3IgZGVwZW5kZW5jaWVzLgogICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlTW9kLnNraXBNYXAgPSBvcHRpb25zLnNraXBNYXA7CgogICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlTW9kLmluaXQoZGVwcywgY2FsbGJhY2ssIGVycmJhY2ssIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgICAgICBjaGVja0xvYWRlZCgpOwogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9jYWxSZXF1aXJlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIG1peGluKGxvY2FsUmVxdWlyZSwgewogICAgICAgICAgICAgICAgICAgIGlzQnJvd3NlcjogaXNCcm93c2VyLAoKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBDb252ZXJ0cyBhIG1vZHVsZSBuYW1lICsgLmV4dGVuc2lvbiBpbnRvIGFuIFVSTCBwYXRoLgogICAgICAgICAgICAgICAgICAgICAqICpSZXF1aXJlcyogdGhlIHVzZSBvZiBhIG1vZHVsZSBuYW1lLiBJdCBkb2VzIG5vdCBzdXBwb3J0IHVzaW5nCiAgICAgICAgICAgICAgICAgICAgICogcGxhaW4gVVJMcyBsaWtlIG5hbWVUb1VybC4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICB0b1VybDogZnVuY3Rpb24gKG1vZHVsZU5hbWVQbHVzRXh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IG1vZHVsZU5hbWVQbHVzRXh0Lmxhc3RJbmRleE9mKCcuJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50ID0gbW9kdWxlTmFtZVBsdXNFeHQuc3BsaXQoJy8nKVswXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVsYXRpdmUgPSBzZWdtZW50ID09PSAnLicgfHwgc2VnbWVudCA9PT0gJy4uJzsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vSGF2ZSBhIGZpbGUgZXh0ZW5zaW9uIGFsaWFzLCBhbmQgaXQgaXMgbm90IHRoZQogICAgICAgICAgICAgICAgICAgICAgICAvL2RvdHMgZnJvbSBhIHJlbGF0aXZlIHBhdGguCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEgJiYgKCFpc1JlbGF0aXZlIHx8IGluZGV4ID4gMSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dCA9IG1vZHVsZU5hbWVQbHVzRXh0LnN1YnN0cmluZyhpbmRleCwgbW9kdWxlTmFtZVBsdXNFeHQubGVuZ3RoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZU5hbWVQbHVzRXh0ID0gbW9kdWxlTmFtZVBsdXNFeHQuc3Vic3RyaW5nKDAsIGluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQubmFtZVRvVXJsKG5vcm1hbGl6ZShtb2R1bGVOYW1lUGx1c0V4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsTWFwICYmIHJlbE1hcC5pZCwgdHJ1ZSksIGV4dCwgIHRydWUpOwogICAgICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgICAgIGRlZmluZWQ6IGZ1bmN0aW9uIChpZCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFzUHJvcChkZWZpbmVkLCBtYWtlTW9kdWxlTWFwKGlkLCByZWxNYXAsIGZhbHNlLCB0cnVlKS5pZCk7CiAgICAgICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkOiBmdW5jdGlvbiAoaWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSBtYWtlTW9kdWxlTWFwKGlkLCByZWxNYXAsIGZhbHNlLCB0cnVlKS5pZDsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc1Byb3AoZGVmaW5lZCwgaWQpIHx8IGhhc1Byb3AocmVnaXN0cnksIGlkKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAvL09ubHkgYWxsb3cgdW5kZWYgb24gdG9wIGxldmVsIHJlcXVpcmUgY2FsbHMKICAgICAgICAgICAgICAgIGlmICghcmVsTWFwKSB7CiAgICAgICAgICAgICAgICAgICAgbG9jYWxSZXF1aXJlLnVuZGVmID0gZnVuY3Rpb24gKGlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vQmluZCBhbnkgd2FpdGluZyBkZWZpbmUoKSBjYWxscyB0byB0aGlzIGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgIC8vZml4IGZvciAjNDA4CiAgICAgICAgICAgICAgICAgICAgICAgIHRha2VHbG9iYWxRdWV1ZSgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hcCA9IG1ha2VNb2R1bGVNYXAoaWQsIHJlbE1hcCwgdHJ1ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2QgPSBnZXRPd24ocmVnaXN0cnksIGlkKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIG1vZC51bmRlZmVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlU2NyaXB0KGlkKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBkZWZpbmVkW2lkXTsKICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHVybEZldGNoZWRbbWFwLnVybF07CiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB1bmRlZkV2ZW50c1tpZF07CgogICAgICAgICAgICAgICAgICAgICAgICAvL0NsZWFuIHF1ZXVlZCBkZWZpbmVzIHRvby4gR28gYmFja3dhcmRzCiAgICAgICAgICAgICAgICAgICAgICAgIC8vaW4gYXJyYXkgc28gdGhhdCB0aGUgc3BsaWNlcyBkbyBub3QKICAgICAgICAgICAgICAgICAgICAgICAgLy9tZXNzIHVwIHRoZSBpdGVyYXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgIGVhY2hSZXZlcnNlKGRlZlF1ZXVlLCBmdW5jdGlvbihhcmdzLCBpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJnc1swXSA9PT0gaWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZRdWV1ZS5zcGxpY2UoaSwgMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgY29udGV4dC5kZWZRdWV1ZU1hcFtpZF07CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0hvbGQgb24gdG8gbGlzdGVuZXJzIGluIGNhc2UgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL21vZHVsZSB3aWxsIGJlIGF0dGVtcHRlZCB0byBiZSByZWxvYWRlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy91c2luZyBhIGRpZmZlcmVudCBjb25maWcuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kLmV2ZW50cy5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZFdmVudHNbaWRdID0gbW9kLmV2ZW50czsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhblJlZ2lzdHJ5KGlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsUmVxdWlyZTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDYWxsZWQgdG8gZW5hYmxlIGEgbW9kdWxlIGlmIGl0IGlzIHN0aWxsIGluIHRoZSByZWdpc3RyeQogICAgICAgICAgICAgKiBhd2FpdGluZyBlbmFibGVtZW50LiBBIHNlY29uZCBhcmcsIHBhcmVudCwgdGhlIHBhcmVudCBtb2R1bGUsCiAgICAgICAgICAgICAqIGlzIHBhc3NlZCBpbiBmb3IgY29udGV4dCwgd2hlbiB0aGlzIG1ldGhvZCBpcyBvdmVycmlkZGVuIGJ5CiAgICAgICAgICAgICAqIHRoZSBvcHRpbWl6ZXIuIE5vdCBzaG93biBoZXJlIHRvIGtlZXAgY29kZSBjb21wYWN0LgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZW5hYmxlOiBmdW5jdGlvbiAoZGVwTWFwKSB7CiAgICAgICAgICAgICAgICB2YXIgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBkZXBNYXAuaWQpOwogICAgICAgICAgICAgICAgaWYgKG1vZCkgewogICAgICAgICAgICAgICAgICAgIGdldE1vZHVsZShkZXBNYXApLmVuYWJsZSgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIEludGVybmFsIG1ldGhvZCB1c2VkIGJ5IGVudmlyb25tZW50IGFkYXB0ZXJzIHRvIGNvbXBsZXRlIGEgbG9hZCBldmVudC4KICAgICAgICAgICAgICogQSBsb2FkIGV2ZW50IGNvdWxkIGJlIGEgc2NyaXB0IGxvYWQgb3IganVzdCBhIGxvYWQgcGFzcyBmcm9tIGEgc3luY2hyb25vdXMKICAgICAgICAgICAgICogbG9hZCBjYWxsLgogICAgICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gbW9kdWxlTmFtZSB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRvIHBvdGVudGlhbGx5IGNvbXBsZXRlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgY29tcGxldGVMb2FkOiBmdW5jdGlvbiAobW9kdWxlTmFtZSkgewogICAgICAgICAgICAgICAgdmFyIGZvdW5kLCBhcmdzLCBtb2QsCiAgICAgICAgICAgICAgICAgICAgc2hpbSA9IGdldE93bihjb25maWcuc2hpbSwgbW9kdWxlTmFtZSkgfHwge30sCiAgICAgICAgICAgICAgICAgICAgc2hFeHBvcnRzID0gc2hpbS5leHBvcnRzOwoKICAgICAgICAgICAgICAgIHRha2VHbG9iYWxRdWV1ZSgpOwoKICAgICAgICAgICAgICAgIHdoaWxlIChkZWZRdWV1ZS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICBhcmdzID0gZGVmUXVldWUuc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICBpZiAoYXJnc1swXSA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzBdID0gbW9kdWxlTmFtZTsKICAgICAgICAgICAgICAgICAgICAgICAgLy9JZiBhbHJlYWR5IGZvdW5kIGFuIGFub255bW91cyBtb2R1bGUgYW5kIGJvdW5kIGl0CiAgICAgICAgICAgICAgICAgICAgICAgIC8vdG8gdGhpcyBuYW1lLCB0aGVuIHRoaXMgaXMgc29tZSBvdGhlciBhbm9uIG1vZHVsZQogICAgICAgICAgICAgICAgICAgICAgICAvL3dhaXRpbmcgZm9yIGl0cyBjb21wbGV0ZUxvYWQgdG8gZmlyZS4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhcmdzWzBdID09PSBtb2R1bGVOYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vRm91bmQgbWF0Y2hpbmcgZGVmaW5lIGNhbGwgZm9yIHRoaXMgc2NyaXB0IQogICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBjYWxsR2V0TW9kdWxlKGFyZ3MpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY29udGV4dC5kZWZRdWV1ZU1hcCA9IHt9OwoKICAgICAgICAgICAgICAgIC8vRG8gdGhpcyBhZnRlciB0aGUgY3ljbGUgb2YgY2FsbEdldE1vZHVsZSBpbiBjYXNlIHRoZSByZXN1bHQKICAgICAgICAgICAgICAgIC8vb2YgdGhvc2UgY2FsbHMvaW5pdCBjYWxscyBjaGFuZ2VzIHRoZSByZWdpc3RyeS4KICAgICAgICAgICAgICAgIG1vZCA9IGdldE93bihyZWdpc3RyeSwgbW9kdWxlTmFtZSk7CgogICAgICAgICAgICAgICAgaWYgKCFmb3VuZCAmJiAhaGFzUHJvcChkZWZpbmVkLCBtb2R1bGVOYW1lKSAmJiBtb2QgJiYgIW1vZC5pbml0ZWQpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmVuZm9yY2VEZWZpbmUgJiYgKCFzaEV4cG9ydHMgfHwgIWdldEdsb2JhbChzaEV4cG9ydHMpKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUGF0aEZhbGxiYWNrKG1vZHVsZU5hbWUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihtYWtlRXJyb3IoJ25vZGVmaW5lJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ05vIGRlZmluZSBjYWxsIGZvciAnICsgbW9kdWxlTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21vZHVsZU5hbWVdKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAvL0Egc2NyaXB0IHRoYXQgZG9lcyBub3QgY2FsbCBkZWZpbmUoKSwgc28ganVzdCBzaW11bGF0ZQogICAgICAgICAgICAgICAgICAgICAgICAvL3RoZSBjYWxsIGZvciBpdC4KICAgICAgICAgICAgICAgICAgICAgICAgY2FsbEdldE1vZHVsZShbbW9kdWxlTmFtZSwgKHNoaW0uZGVwcyB8fCBbXSksIHNoaW0uZXhwb3J0c0ZuXSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGNoZWNrTG9hZGVkKCk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29udmVydHMgYSBtb2R1bGUgbmFtZSB0byBhIGZpbGUgcGF0aC4gU3VwcG9ydHMgY2FzZXMgd2hlcmUKICAgICAgICAgICAgICogbW9kdWxlTmFtZSBtYXkgYWN0dWFsbHkgYmUganVzdCBhbiBVUkwuCiAgICAgICAgICAgICAqIE5vdGUgdGhhdCBpdCAqKmRvZXMgbm90KiogY2FsbCBub3JtYWxpemUgb24gdGhlIG1vZHVsZU5hbWUsCiAgICAgICAgICAgICAqIGl0IGlzIGFzc3VtZWQgdG8gaGF2ZSBhbHJlYWR5IGJlZW4gbm9ybWFsaXplZC4gVGhpcyBpcyBhbgogICAgICAgICAgICAgKiBpbnRlcm5hbCBBUEksIG5vdCBhIHB1YmxpYyBvbmUuIFVzZSB0b1VybCBmb3IgdGhlIHB1YmxpYyBBUEkuCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBuYW1lVG9Vcmw6IGZ1bmN0aW9uIChtb2R1bGVOYW1lLCBleHQsIHNraXBFeHQpIHsKICAgICAgICAgICAgICAgIHZhciBwYXRocywgc3ltcywgaSwgcGFyZW50TW9kdWxlLCB1cmwsCiAgICAgICAgICAgICAgICAgICAgcGFyZW50UGF0aCwgYnVuZGxlSWQsCiAgICAgICAgICAgICAgICAgICAgcGtnTWFpbiA9IGdldE93bihjb25maWcucGtncywgbW9kdWxlTmFtZSk7CgogICAgICAgICAgICAgICAgaWYgKHBrZ01haW4pIHsKICAgICAgICAgICAgICAgICAgICBtb2R1bGVOYW1lID0gcGtnTWFpbjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBidW5kbGVJZCA9IGdldE93bihidW5kbGVzTWFwLCBtb2R1bGVOYW1lKTsKCiAgICAgICAgICAgICAgICBpZiAoYnVuZGxlSWQpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5uYW1lVG9VcmwoYnVuZGxlSWQsIGV4dCwgc2tpcEV4dCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy9JZiBhIGNvbG9uIGlzIGluIHRoZSBVUkwsIGl0IGluZGljYXRlcyBhIHByb3RvY29sIGlzIHVzZWQgYW5kIGl0IGlzIGp1c3QKICAgICAgICAgICAgICAgIC8vYW4gVVJMIHRvIGEgZmlsZSwgb3IgaWYgaXQgc3RhcnRzIHdpdGggYSBzbGFzaCwgY29udGFpbnMgYSBxdWVyeSBhcmcgKGkuZS4gPykKICAgICAgICAgICAgICAgIC8vb3IgZW5kcyB3aXRoIC5qcywgdGhlbiBhc3N1bWUgdGhlIHVzZXIgbWVhbnQgdG8gdXNlIGFuIHVybCBhbmQgbm90IGEgbW9kdWxlIGlkLgogICAgICAgICAgICAgICAgLy9UaGUgc2xhc2ggaXMgaW1wb3J0YW50IGZvciBwcm90b2NvbC1sZXNzIFVSTHMgYXMgd2VsbCBhcyBmdWxsIHBhdGhzLgogICAgICAgICAgICAgICAgaWYgKHJlcS5qc0V4dFJlZ0V4cC50ZXN0KG1vZHVsZU5hbWUpKSB7CiAgICAgICAgICAgICAgICAgICAgLy9KdXN0IGEgcGxhaW4gcGF0aCwgbm90IG1vZHVsZSBuYW1lIGxvb2t1cCwgc28ganVzdCByZXR1cm4gaXQuCiAgICAgICAgICAgICAgICAgICAgLy9BZGQgZXh0ZW5zaW9uIGlmIGl0IGlzIGluY2x1ZGVkLiBUaGlzIGlzIGEgYml0IHdvbmt5LCBvbmx5IG5vbi0uanMgdGhpbmdzIHBhc3MKICAgICAgICAgICAgICAgICAgICAvL2FuIGV4dGVuc2lvbiwgdGhpcyBtZXRob2QgcHJvYmFibHkgbmVlZHMgdG8gYmUgcmV3b3JrZWQuCiAgICAgICAgICAgICAgICAgICAgdXJsID0gbW9kdWxlTmFtZSArIChleHQgfHwgJycpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvL0EgbW9kdWxlIHRoYXQgbmVlZHMgdG8gYmUgY29udmVydGVkIHRvIGEgcGF0aC4KICAgICAgICAgICAgICAgICAgICBwYXRocyA9IGNvbmZpZy5wYXRoczsKCiAgICAgICAgICAgICAgICAgICAgc3ltcyA9IG1vZHVsZU5hbWUuc3BsaXQoJy8nKTsKICAgICAgICAgICAgICAgICAgICAvL0ZvciBlYWNoIG1vZHVsZSBuYW1lIHNlZ21lbnQsIHNlZSBpZiB0aGVyZSBpcyBhIHBhdGgKICAgICAgICAgICAgICAgICAgICAvL3JlZ2lzdGVyZWQgZm9yIGl0LiBTdGFydCB3aXRoIG1vc3Qgc3BlY2lmaWMgbmFtZQogICAgICAgICAgICAgICAgICAgIC8vYW5kIHdvcmsgdXAgZnJvbSBpdC4KICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSBzeW1zLmxlbmd0aDsgaSA+IDA7IGkgLT0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRNb2R1bGUgPSBzeW1zLnNsaWNlKDAsIGkpLmpvaW4oJy8nKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFBhdGggPSBnZXRPd24ocGF0aHMsIHBhcmVudE1vZHVsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRQYXRoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0lmIGFuIGFycmF5LCBpdCBtZWFucyB0aGVyZSBhcmUgYSBmZXcgY2hvaWNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vQ2hvb3NlIHRoZSBvbmUgdGhhdCBpcyBkZXNpcmVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNBcnJheShwYXJlbnRQYXRoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFBhdGggPSBwYXJlbnRQYXRoWzBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltcy5zcGxpY2UoMCwgaSwgcGFyZW50UGF0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgLy9Kb2luIHRoZSBwYXRoIHBhcnRzIHRvZ2V0aGVyLCB0aGVuIGZpZ3VyZSBvdXQgaWYgYmFzZVVybCBpcyBuZWVkZWQuCiAgICAgICAgICAgICAgICAgICAgdXJsID0gc3ltcy5qb2luKCcvJyk7CiAgICAgICAgICAgICAgICAgICAgdXJsICs9IChleHQgfHwgKC9eZGF0YVw6fF5ibG9iXDp8XD8vLnRlc3QodXJsKSB8fCBza2lwRXh0ID8gJycgOiAnLmpzJykpOwogICAgICAgICAgICAgICAgICAgIHVybCA9ICh1cmwuY2hhckF0KDApID09PSAnLycgfHwgdXJsLm1hdGNoKC9eW1x3XCtcLlwtXSs6LykgPyAnJyA6IGNvbmZpZy5iYXNlVXJsKSArIHVybDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnLnVybEFyZ3MgJiYgIS9eYmxvYlw6Ly50ZXN0KHVybCkgPwogICAgICAgICAgICAgICAgICAgICAgIHVybCArIGNvbmZpZy51cmxBcmdzKG1vZHVsZU5hbWUsIHVybCkgOiB1cmw7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAvL0RlbGVnYXRlcyB0byByZXEubG9hZC4gQnJva2VuIG91dCBhcyBhIHNlcGFyYXRlIGZ1bmN0aW9uIHRvCiAgICAgICAgICAgIC8vYWxsb3cgb3ZlcnJpZGluZyBpbiB0aGUgb3B0aW1pemVyLgogICAgICAgICAgICBsb2FkOiBmdW5jdGlvbiAoaWQsIHVybCkgewogICAgICAgICAgICAgICAgcmVxLmxvYWQoY29udGV4dCwgaWQsIHVybCk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogRXhlY3V0ZXMgYSBtb2R1bGUgY2FsbGJhY2sgZnVuY3Rpb24uIEJyb2tlbiBvdXQgYXMgYSBzZXBhcmF0ZSBmdW5jdGlvbgogICAgICAgICAgICAgKiBzb2xlbHkgdG8gYWxsb3cgdGhlIGJ1aWxkIHN5c3RlbSB0byBzZXF1ZW5jZSB0aGUgZmlsZXMgaW4gdGhlIGJ1aWx0CiAgICAgICAgICAgICAqIGxheWVyIGluIHRoZSByaWdodCBzZXF1ZW5jZS4KICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHByaXZhdGUKICAgICAgICAgICAgICovCiAgICAgICAgICAgIGV4ZWNDYjogZnVuY3Rpb24gKG5hbWUsIGNhbGxiYWNrLCBhcmdzLCBleHBvcnRzKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkoZXhwb3J0cywgYXJncyk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogY2FsbGJhY2sgZm9yIHNjcmlwdCBsb2FkcywgdXNlZCB0byBjaGVjayBzdGF0dXMgb2YgbG9hZGluZy4KICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtFdmVudH0gZXZ0IHRoZSBldmVudCBmcm9tIHRoZSBicm93c2VyIGZvciB0aGUgc2NyaXB0CiAgICAgICAgICAgICAqIHRoYXQgd2FzIGxvYWRlZC4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIG9uU2NyaXB0TG9hZDogZnVuY3Rpb24gKGV2dCkgewogICAgICAgICAgICAgICAgLy9Vc2luZyBjdXJyZW50VGFyZ2V0IGluc3RlYWQgb2YgdGFyZ2V0IGZvciBGaXJlZm94IDIuMCdzIHNha2UuIE5vdAogICAgICAgICAgICAgICAgLy9hbGwgb2xkIGJyb3dzZXJzIHdpbGwgYmUgc3VwcG9ydGVkLCBidXQgdGhpcyBvbmUgd2FzIGVhc3kgZW5vdWdoCiAgICAgICAgICAgICAgICAvL3RvIHN1cHBvcnQgYW5kIHN0aWxsIG1ha2VzIHNlbnNlLgogICAgICAgICAgICAgICAgaWYgKGV2dC50eXBlID09PSAnbG9hZCcgfHwKICAgICAgICAgICAgICAgICAgICAgICAgKHJlYWR5UmVnRXhwLnRlc3QoKGV2dC5jdXJyZW50VGFyZ2V0IHx8IGV2dC5zcmNFbGVtZW50KS5yZWFkeVN0YXRlKSkpIHsKICAgICAgICAgICAgICAgICAgICAvL1Jlc2V0IGludGVyYWN0aXZlIHNjcmlwdCBzbyBhIHNjcmlwdCBub2RlIGlzIG5vdCBoZWxkIG9udG8gZm9yCiAgICAgICAgICAgICAgICAgICAgLy90byBsb25nLgogICAgICAgICAgICAgICAgICAgIGludGVyYWN0aXZlU2NyaXB0ID0gbnVsbDsKCiAgICAgICAgICAgICAgICAgICAgLy9QdWxsIG91dCB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIGFuZCB0aGUgY29udGV4dC4KICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGdldFNjcmlwdERhdGEoZXZ0KTsKICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmNvbXBsZXRlTG9hZChkYXRhLmlkKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDYWxsYmFjayBmb3Igc2NyaXB0IGVycm9ycy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIG9uU2NyaXB0RXJyb3I6IGZ1bmN0aW9uIChldnQpIHsKICAgICAgICAgICAgICAgIHZhciBkYXRhID0gZ2V0U2NyaXB0RGF0YShldnQpOwogICAgICAgICAgICAgICAgaWYgKCFoYXNQYXRoRmFsbGJhY2soZGF0YS5pZCkpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgcGFyZW50cyA9IFtdOwogICAgICAgICAgICAgICAgICAgIGVhY2hQcm9wKHJlZ2lzdHJ5LCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZignX0ByJykgIT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhY2godmFsdWUuZGVwTWFwcywgZnVuY3Rpb24oZGVwTWFwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlcE1hcC5pZCA9PT0gZGF0YS5pZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRzLnB1c2goa2V5KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihtYWtlRXJyb3IoJ3NjcmlwdGVycm9yJywgJ1NjcmlwdCBlcnJvciBmb3IgIicgKyBkYXRhLmlkICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhcmVudHMubGVuZ3RoID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyIsIG5lZWRlZCBieTogJyArIHBhcmVudHMuam9pbignLCAnKSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICciJyksIGV2dCwgW2RhdGEuaWRdKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICBjb250ZXh0LnJlcXVpcmUgPSBjb250ZXh0Lm1ha2VSZXF1aXJlKCk7CiAgICAgICAgcmV0dXJuIGNvbnRleHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBNYWluIGVudHJ5IHBvaW50LgogICAgICoKICAgICAqIElmIHRoZSBvbmx5IGFyZ3VtZW50IHRvIHJlcXVpcmUgaXMgYSBzdHJpbmcsIHRoZW4gdGhlIG1vZHVsZSB0aGF0CiAgICAgKiBpcyByZXByZXNlbnRlZCBieSB0aGF0IHN0cmluZyBpcyBmZXRjaGVkIGZvciB0aGUgYXBwcm9wcmlhdGUgY29udGV4dC4KICAgICAqCiAgICAgKiBJZiB0aGUgZmlyc3QgYXJndW1lbnQgaXMgYW4gYXJyYXksIHRoZW4gaXQgd2lsbCBiZSB0cmVhdGVkIGFzIGFuIGFycmF5CiAgICAgKiBvZiBkZXBlbmRlbmN5IHN0cmluZyBuYW1lcyB0byBmZXRjaC4gQW4gb3B0aW9uYWwgZnVuY3Rpb24gY2FsbGJhY2sgY2FuCiAgICAgKiBiZSBzcGVjaWZpZWQgdG8gZXhlY3V0ZSB3aGVuIGFsbCBvZiB0aG9zZSBkZXBlbmRlbmNpZXMgYXJlIGF2YWlsYWJsZS4KICAgICAqCiAgICAgKiBNYWtlIGEgbG9jYWwgcmVxIHZhcmlhYmxlIHRvIGhlbHAgQ2FqYSBjb21wbGlhbmNlIChpdCBhc3N1bWVzIHRoaW5ncwogICAgICogb24gYSByZXF1aXJlIHRoYXQgYXJlIG5vdCBzdGFuZGFyZGl6ZWQpLCBhbmQgdG8gZ2l2ZSBhIHNob3J0CiAgICAgKiBuYW1lIGZvciBtaW5pZmljYXRpb24vbG9jYWwgc2NvcGUgdXNlLgogICAgICovCiAgICByZXEgPSByZXF1aXJlanMgPSBmdW5jdGlvbiAoZGVwcywgY2FsbGJhY2ssIGVycmJhY2ssIG9wdGlvbmFsKSB7CgogICAgICAgIC8vRmluZCB0aGUgcmlnaHQgY29udGV4dCwgdXNlIGRlZmF1bHQKICAgICAgICB2YXIgY29udGV4dCwgY29uZmlnLAogICAgICAgICAgICBjb250ZXh0TmFtZSA9IGRlZkNvbnRleHROYW1lOwoKICAgICAgICAvLyBEZXRlcm1pbmUgaWYgaGF2ZSBjb25maWcgb2JqZWN0IGluIHRoZSBjYWxsLgogICAgICAgIGlmICghaXNBcnJheShkZXBzKSAmJiB0eXBlb2YgZGVwcyAhPT0gJ3N0cmluZycpIHsKICAgICAgICAgICAgLy8gZGVwcyBpcyBhIGNvbmZpZyBvYmplY3QKICAgICAgICAgICAgY29uZmlnID0gZGVwczsKICAgICAgICAgICAgaWYgKGlzQXJyYXkoY2FsbGJhY2spKSB7CiAgICAgICAgICAgICAgICAvLyBBZGp1c3QgYXJncyBpZiB0aGVyZSBhcmUgZGVwZW5kZW5jaWVzCiAgICAgICAgICAgICAgICBkZXBzID0gY2FsbGJhY2s7CiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGVycmJhY2s7CiAgICAgICAgICAgICAgICBlcnJiYWNrID0gb3B0aW9uYWw7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBkZXBzID0gW107CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChjb25maWcgJiYgY29uZmlnLmNvbnRleHQpIHsKICAgICAgICAgICAgY29udGV4dE5hbWUgPSBjb25maWcuY29udGV4dDsKICAgICAgICB9CgogICAgICAgIGNvbnRleHQgPSBnZXRPd24oY29udGV4dHMsIGNvbnRleHROYW1lKTsKICAgICAgICBpZiAoIWNvbnRleHQpIHsKICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHRzW2NvbnRleHROYW1lXSA9IHJlcS5zLm5ld0NvbnRleHQoY29udGV4dE5hbWUpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGNvbmZpZykgewogICAgICAgICAgICBjb250ZXh0LmNvbmZpZ3VyZShjb25maWcpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGNvbnRleHQucmVxdWlyZShkZXBzLCBjYWxsYmFjaywgZXJyYmFjayk7CiAgICB9OwoKICAgIC8qKgogICAgICogU3VwcG9ydCByZXF1aXJlLmNvbmZpZygpIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGNvb3BlcmF0ZSB3aXRoIG90aGVyCiAgICAgKiBBTUQgbG9hZGVycyBvbiBnbG9iYWxseSBhZ3JlZWQgbmFtZXMuCiAgICAgKi8KICAgIHJlcS5jb25maWcgPSBmdW5jdGlvbiAoY29uZmlnKSB7CiAgICAgICAgcmV0dXJuIHJlcShjb25maWcpOwogICAgfTsKCiAgICAvKioKICAgICAqIEV4ZWN1dGUgc29tZXRoaW5nIGFmdGVyIHRoZSBjdXJyZW50IHRpY2sKICAgICAqIG9mIHRoZSBldmVudCBsb29wLiBPdmVycmlkZSBmb3Igb3RoZXIgZW52cwogICAgICogdGhhdCBoYXZlIGEgYmV0dGVyIHNvbHV0aW9uIHRoYW4gc2V0VGltZW91dC4KICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBmbiBmdW5jdGlvbiB0byBleGVjdXRlIGxhdGVyLgogICAgICovCiAgICByZXEubmV4dFRpY2sgPSB0eXBlb2Ygc2V0VGltZW91dCAhPT0gJ3VuZGVmaW5lZCcgPyBmdW5jdGlvbiAoZm4pIHsKICAgICAgICBzZXRUaW1lb3V0KGZuLCA0KTsKICAgIH0gOiBmdW5jdGlvbiAoZm4pIHsgZm4oKTsgfTsKCiAgICAvKioKICAgICAqIEV4cG9ydCByZXF1aXJlIGFzIGEgZ2xvYmFsLCBidXQgb25seSBpZiBpdCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LgogICAgICovCiAgICBpZiAoIXJlcXVpcmUpIHsKICAgICAgICByZXF1aXJlID0gcmVxOwogICAgfQoKICAgIHJlcS52ZXJzaW9uID0gdmVyc2lvbjsKCiAgICAvL1VzZWQgdG8gZmlsdGVyIG91dCBkZXBlbmRlbmNpZXMgdGhhdCBhcmUgYWxyZWFkeSBwYXRocy4KICAgIHJlcS5qc0V4dFJlZ0V4cCA9IC9eXC98OnxcP3xcLmpzJC87CiAgICByZXEuaXNCcm93c2VyID0gaXNCcm93c2VyOwogICAgcyA9IHJlcS5zID0gewogICAgICAgIGNvbnRleHRzOiBjb250ZXh0cywKICAgICAgICBuZXdDb250ZXh0OiBuZXdDb250ZXh0CiAgICB9OwoKICAgIC8vQ3JlYXRlIGRlZmF1bHQgY29udGV4dC4KICAgIHJlcSh7fSk7CgogICAgLy9FeHBvcnRzIHNvbWUgY29udGV4dC1zZW5zaXRpdmUgbWV0aG9kcyBvbiBnbG9iYWwgcmVxdWlyZS4KICAgIGVhY2goWwogICAgICAgICd0b1VybCcsCiAgICAgICAgJ3VuZGVmJywKICAgICAgICAnZGVmaW5lZCcsCiAgICAgICAgJ3NwZWNpZmllZCcKICAgIF0sIGZ1bmN0aW9uIChwcm9wKSB7CiAgICAgICAgLy9SZWZlcmVuY2UgZnJvbSBjb250ZXh0cyBpbnN0ZWFkIG9mIGVhcmx5IGJpbmRpbmcgdG8gZGVmYXVsdCBjb250ZXh0LAogICAgICAgIC8vc28gdGhhdCBkdXJpbmcgYnVpbGRzLCB0aGUgbGF0ZXN0IGluc3RhbmNlIG9mIHRoZSBkZWZhdWx0IGNvbnRleHQKICAgICAgICAvL3dpdGggaXRzIGNvbmZpZyBnZXRzIHVzZWQuCiAgICAgICAgcmVxW3Byb3BdID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgY3R4ID0gY29udGV4dHNbZGVmQ29udGV4dE5hbWVdOwogICAgICAgICAgICByZXR1cm4gY3R4LnJlcXVpcmVbcHJvcF0uYXBwbHkoY3R4LCBhcmd1bWVudHMpOwogICAgICAgIH07CiAgICB9KTsKCiAgICBpZiAoaXNCcm93c2VyKSB7CiAgICAgICAgaGVhZCA9IHMuaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07CiAgICAgICAgLy9JZiBCQVNFIHRhZyBpcyBpbiBwbGF5LCB1c2luZyBhcHBlbmRDaGlsZCBpcyBhIHByb2JsZW0gZm9yIElFNi4KICAgICAgICAvL1doZW4gdGhhdCBicm93c2VyIGRpZXMsIHRoaXMgY2FuIGJlIHJlbW92ZWQuIERldGFpbHMgaW4gdGhpcyBqUXVlcnkgYnVnOgogICAgICAgIC8vaHR0cDovL2Rldi5qcXVlcnkuY29tL3RpY2tldC8yNzA5CiAgICAgICAgYmFzZUVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYmFzZScpWzBdOwogICAgICAgIGlmIChiYXNlRWxlbWVudCkgewogICAgICAgICAgICBoZWFkID0gcy5oZWFkID0gYmFzZUVsZW1lbnQucGFyZW50Tm9kZTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBBbnkgZXJyb3JzIHRoYXQgcmVxdWlyZSBleHBsaWNpdGx5IGdlbmVyYXRlcyB3aWxsIGJlIHBhc3NlZCB0byB0aGlzCiAgICAgKiBmdW5jdGlvbi4gSW50ZXJjZXB0L292ZXJyaWRlIGl0IGlmIHlvdSB3YW50IGN1c3RvbSBlcnJvciBoYW5kbGluZy4KICAgICAqIEBwYXJhbSB7RXJyb3J9IGVyciB0aGUgZXJyb3Igb2JqZWN0LgogICAgICovCiAgICByZXEub25FcnJvciA9IGRlZmF1bHRPbkVycm9yOwoKICAgIC8qKgogICAgICogQ3JlYXRlcyB0aGUgbm9kZSBmb3IgdGhlIGxvYWQgY29tbWFuZC4gT25seSB1c2VkIGluIGJyb3dzZXIgZW52cy4KICAgICAqLwogICAgcmVxLmNyZWF0ZU5vZGUgPSBmdW5jdGlvbiAoY29uZmlnLCBtb2R1bGVOYW1lLCB1cmwpIHsKICAgICAgICB2YXIgbm9kZSA9IGNvbmZpZy54aHRtbCA/CiAgICAgICAgICAgICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnLCAnaHRtbDpzY3JpcHQnKSA6CiAgICAgICAgICAgICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKICAgICAgICBub2RlLnR5cGUgPSBjb25maWcuc2NyaXB0VHlwZSB8fCAndGV4dC9qYXZhc2NyaXB0JzsKICAgICAgICBub2RlLmNoYXJzZXQgPSAndXRmLTgnOwogICAgICAgIG5vZGUuYXN5bmMgPSB0cnVlOwogICAgICAgIHJldHVybiBub2RlOwogICAgfTsKCiAgICAvKioKICAgICAqIERvZXMgdGhlIHJlcXVlc3QgdG8gbG9hZCBhIG1vZHVsZSBmb3IgdGhlIGJyb3dzZXIgY2FzZS4KICAgICAqIE1ha2UgdGhpcyBhIHNlcGFyYXRlIGZ1bmN0aW9uIHRvIGFsbG93IG90aGVyIGVudmlyb25tZW50cwogICAgICogdG8gb3ZlcnJpZGUgaXQuCiAgICAgKgogICAgICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHQgdGhlIHJlcXVpcmUgY29udGV4dCB0byBmaW5kIHN0YXRlLgogICAgICogQHBhcmFtIHtTdHJpbmd9IG1vZHVsZU5hbWUgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZS4KICAgICAqIEBwYXJhbSB7T2JqZWN0fSB1cmwgdGhlIFVSTCB0byB0aGUgbW9kdWxlLgogICAgICovCiAgICByZXEubG9hZCA9IGZ1bmN0aW9uIChjb250ZXh0LCBtb2R1bGVOYW1lLCB1cmwpIHsKICAgICAgICB2YXIgY29uZmlnID0gKGNvbnRleHQgJiYgY29udGV4dC5jb25maWcpIHx8IHt9LAogICAgICAgICAgICBub2RlOwogICAgICAgIGlmIChpc0Jyb3dzZXIpIHsKICAgICAgICAgICAgLy9JbiB0aGUgYnJvd3NlciBzbyB1c2UgYSBzY3JpcHQgdGFnCiAgICAgICAgICAgIG5vZGUgPSByZXEuY3JlYXRlTm9kZShjb25maWcsIG1vZHVsZU5hbWUsIHVybCk7CgogICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlY29udGV4dCcsIGNvbnRleHQuY29udGV4dE5hbWUpOwogICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlbW9kdWxlJywgbW9kdWxlTmFtZSk7CgogICAgICAgICAgICAvL1NldCB1cCBsb2FkIGxpc3RlbmVyLiBUZXN0IGF0dGFjaEV2ZW50IGZpcnN0IGJlY2F1c2UgSUU5IGhhcwogICAgICAgICAgICAvL2Egc3VidGxlIGlzc3VlIGluIGl0cyBhZGRFdmVudExpc3RlbmVyIGFuZCBzY3JpcHQgb25sb2FkIGZpcmluZ3MKICAgICAgICAgICAgLy90aGF0IGRvIG5vdCBtYXRjaCB0aGUgYmVoYXZpb3Igb2YgYWxsIG90aGVyIGJyb3dzZXJzIHdpdGgKICAgICAgICAgICAgLy9hZGRFdmVudExpc3RlbmVyIHN1cHBvcnQsIHdoaWNoIGZpcmUgdGhlIG9ubG9hZCBldmVudCBmb3IgYQogICAgICAgICAgICAvL3NjcmlwdCByaWdodCBhZnRlciB0aGUgc2NyaXB0IGV4ZWN1dGlvbi4gU2VlOgogICAgICAgICAgICAvL2h0dHBzOi8vY29ubmVjdC5taWNyb3NvZnQuY29tL0lFL2ZlZWRiYWNrL2RldGFpbHMvNjQ4MDU3L3NjcmlwdC1vbmxvYWQtZXZlbnQtaXMtbm90LWZpcmVkLWltbWVkaWF0ZWx5LWFmdGVyLXNjcmlwdC1leGVjdXRpb24KICAgICAgICAgICAgLy9VTkZPUlRVTkFURUxZIE9wZXJhIGltcGxlbWVudHMgYXR0YWNoRXZlbnQgYnV0IGRvZXMgbm90IGZvbGxvdyB0aGUgc2NyaXB0CiAgICAgICAgICAgIC8vc2NyaXB0IGV4ZWN1dGlvbiBtb2RlLgogICAgICAgICAgICBpZiAobm9kZS5hdHRhY2hFdmVudCAmJgogICAgICAgICAgICAgICAgICAgIC8vQ2hlY2sgaWYgbm9kZS5hdHRhY2hFdmVudCBpcyBhcnRpZmljaWFsbHkgYWRkZWQgYnkgY3VzdG9tIHNjcmlwdCBvcgogICAgICAgICAgICAgICAgICAgIC8vbmF0aXZlbHkgc3VwcG9ydGVkIGJ5IGJyb3dzZXIKICAgICAgICAgICAgICAgICAgICAvL3JlYWQgaHR0cHM6Ly9naXRodWIuY29tL3JlcXVpcmVqcy9yZXF1aXJlanMvaXNzdWVzLzE4NwogICAgICAgICAgICAgICAgICAgIC8vaWYgd2UgY2FuIE5PVCBmaW5kIFtuYXRpdmUgY29kZV0gdGhlbiBpdCBtdXN0IE5PVCBuYXRpdmVseSBzdXBwb3J0ZWQuCiAgICAgICAgICAgICAgICAgICAgLy9pbiBJRTgsIG5vZGUuYXR0YWNoRXZlbnQgZG9lcyBub3QgaGF2ZSB0b1N0cmluZygpCiAgICAgICAgICAgICAgICAgICAgLy9Ob3RlIHRoZSB0ZXN0IGZvciAiW25hdGl2ZSBjb2RlIiB3aXRoIG5vIGNsb3NpbmcgYnJhY2UsIHNlZToKICAgICAgICAgICAgICAgICAgICAvL2h0dHBzOi8vZ2l0aHViLmNvbS9yZXF1aXJlanMvcmVxdWlyZWpzL2lzc3Vlcy8yNzMKICAgICAgICAgICAgICAgICAgICAhKG5vZGUuYXR0YWNoRXZlbnQudG9TdHJpbmcgJiYgbm9kZS5hdHRhY2hFdmVudC50b1N0cmluZygpLmluZGV4T2YoJ1tuYXRpdmUgY29kZScpIDwgMCkgJiYKICAgICAgICAgICAgICAgICAgICAhaXNPcGVyYSkgewogICAgICAgICAgICAgICAgLy9Qcm9iYWJseSBJRS4gSUUgKGF0IGxlYXN0IDYtOCkgZG8gbm90IGZpcmUKICAgICAgICAgICAgICAgIC8vc2NyaXB0IG9ubG9hZCByaWdodCBhZnRlciBleGVjdXRpbmcgdGhlIHNjcmlwdCwgc28KICAgICAgICAgICAgICAgIC8vd2UgY2Fubm90IHRpZSB0aGUgYW5vbnltb3VzIGRlZmluZSBjYWxsIHRvIGEgbmFtZS4KICAgICAgICAgICAgICAgIC8vSG93ZXZlciwgSUUgcmVwb3J0cyB0aGUgc2NyaXB0IGFzIGJlaW5nIGluICdpbnRlcmFjdGl2ZScKICAgICAgICAgICAgICAgIC8vcmVhZHlTdGF0ZSBhdCB0aGUgdGltZSBvZiB0aGUgZGVmaW5lIGNhbGwuCiAgICAgICAgICAgICAgICB1c2VJbnRlcmFjdGl2ZSA9IHRydWU7CgogICAgICAgICAgICAgICAgbm9kZS5hdHRhY2hFdmVudCgnb25yZWFkeXN0YXRlY2hhbmdlJywgY29udGV4dC5vblNjcmlwdExvYWQpOwogICAgICAgICAgICAgICAgLy9JdCB3b3VsZCBiZSBncmVhdCB0byBhZGQgYW4gZXJyb3IgaGFuZGxlciBoZXJlIHRvIGNhdGNoCiAgICAgICAgICAgICAgICAvLzQwNHMgaW4gSUU5Ky4gSG93ZXZlciwgb25yZWFkeXN0YXRlY2hhbmdlIHdpbGwgZmlyZSBiZWZvcmUKICAgICAgICAgICAgICAgIC8vdGhlIGVycm9yIGhhbmRsZXIsIHNvIHRoYXQgZG9lcyBub3QgaGVscC4gSWYgYWRkRXZlbnRMaXN0ZW5lcgogICAgICAgICAgICAgICAgLy9pcyB1c2VkLCB0aGVuIElFIHdpbGwgZmlyZSBlcnJvciBiZWZvcmUgbG9hZCwgYnV0IHdlIGNhbm5vdAogICAgICAgICAgICAgICAgLy91c2UgdGhhdCBwYXRod2F5IGdpdmVuIHRoZSBjb25uZWN0Lm1pY3Jvc29mdC5jb20gaXNzdWUKICAgICAgICAgICAgICAgIC8vbWVudGlvbmVkIGFib3ZlIGFib3V0IG5vdCBkb2luZyB0aGUgJ3NjcmlwdCBleGVjdXRlLAogICAgICAgICAgICAgICAgLy90aGVuIGZpcmUgdGhlIHNjcmlwdCBsb2FkIGV2ZW50IGxpc3RlbmVyIGJlZm9yZSBleGVjdXRlCiAgICAgICAgICAgICAgICAvL25leHQgc2NyaXB0JyB0aGF0IG90aGVyIGJyb3dzZXJzIGRvLgogICAgICAgICAgICAgICAgLy9CZXN0IGhvcGU6IElFMTAgZml4ZXMgdGhlIGlzc3VlcywKICAgICAgICAgICAgICAgIC8vYW5kIHRoZW4gZGVzdHJveXMgYWxsIGluc3RhbGxzIG9mIElFIDYtOS4KICAgICAgICAgICAgICAgIC8vbm9kZS5hdHRhY2hFdmVudCgnb25lcnJvcicsIGNvbnRleHQub25TY3JpcHRFcnJvcik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBjb250ZXh0Lm9uU2NyaXB0TG9hZCwgZmFsc2UpOwogICAgICAgICAgICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGNvbnRleHQub25TY3JpcHRFcnJvciwgZmFsc2UpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG5vZGUuc3JjID0gdXJsOwoKICAgICAgICAgICAgLy9DYWxsaW5nIG9uTm9kZUNyZWF0ZWQgYWZ0ZXIgYWxsIHByb3BlcnRpZXMgb24gdGhlIG5vZGUgaGF2ZSBiZWVuCiAgICAgICAgICAgIC8vc2V0LCBidXQgYmVmb3JlIGl0IGlzIHBsYWNlZCBpbiB0aGUgRE9NLgogICAgICAgICAgICBpZiAoY29uZmlnLm9uTm9kZUNyZWF0ZWQpIHsKICAgICAgICAgICAgICAgIGNvbmZpZy5vbk5vZGVDcmVhdGVkKG5vZGUsIGNvbmZpZywgbW9kdWxlTmFtZSwgdXJsKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy9Gb3Igc29tZSBjYWNoZSBjYXNlcyBpbiBJRSA2LTgsIHRoZSBzY3JpcHQgZXhlY3V0ZXMgYmVmb3JlIHRoZSBlbmQKICAgICAgICAgICAgLy9vZiB0aGUgYXBwZW5kQ2hpbGQgZXhlY3V0aW9uLCBzbyB0byB0aWUgYW4gYW5vbnltb3VzIGRlZmluZQogICAgICAgICAgICAvL2NhbGwgdG8gdGhlIG1vZHVsZSBuYW1lICh3aGljaCBpcyBzdG9yZWQgb24gdGhlIG5vZGUpLCBob2xkIG9uCiAgICAgICAgICAgIC8vdG8gYSByZWZlcmVuY2UgdG8gdGhpcyBub2RlLCBidXQgY2xlYXIgYWZ0ZXIgdGhlIERPTSBpbnNlcnRpb24uCiAgICAgICAgICAgIGN1cnJlbnRseUFkZGluZ1NjcmlwdCA9IG5vZGU7CiAgICAgICAgICAgIGlmIChiYXNlRWxlbWVudCkgewogICAgICAgICAgICAgICAgaGVhZC5pbnNlcnRCZWZvcmUobm9kZSwgYmFzZUVsZW1lbnQpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaGVhZC5hcHBlbmRDaGlsZChub2RlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjdXJyZW50bHlBZGRpbmdTY3JpcHQgPSBudWxsOwoKICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgfSBlbHNlIGlmIChpc1dlYldvcmtlcikgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgLy9JbiBhIHdlYiB3b3JrZXIsIHVzZSBpbXBvcnRTY3JpcHRzLiBUaGlzIGlzIG5vdCBhIHZlcnkKICAgICAgICAgICAgICAgIC8vZWZmaWNpZW50IHVzZSBvZiBpbXBvcnRTY3JpcHRzLCBpbXBvcnRTY3JpcHRzIHdpbGwgYmxvY2sgdW50aWwKICAgICAgICAgICAgICAgIC8vaXRzIHNjcmlwdCBpcyBkb3dubG9hZGVkIGFuZCBldmFsdWF0ZWQuIEhvd2V2ZXIsIGlmIHdlYiB3b3JrZXJzCiAgICAgICAgICAgICAgICAvL2FyZSBpbiBwbGF5LCB0aGUgZXhwZWN0YXRpb24gaXMgdGhhdCBhIGJ1aWxkIGhhcyBiZWVuIGRvbmUgc28KICAgICAgICAgICAgICAgIC8vdGhhdCBvbmx5IG9uZSBzY3JpcHQgbmVlZHMgdG8gYmUgbG9hZGVkIGFueXdheS4gVGhpcyBtYXkgbmVlZAogICAgICAgICAgICAgICAgLy90byBiZSByZWV2YWx1YXRlZCBpZiBvdGhlciB1c2UgY2FzZXMgYmVjb21lIGNvbW1vbi4KCiAgICAgICAgICAgICAgICAvLyBQb3N0IGEgdGFzayB0byB0aGUgZXZlbnQgbG9vcCB0byB3b3JrIGFyb3VuZCBhIGJ1ZyBpbiBXZWJLaXQKICAgICAgICAgICAgICAgIC8vIHdoZXJlIHRoZSB3b3JrZXIgZ2V0cyBnYXJiYWdlLWNvbGxlY3RlZCBhZnRlciBjYWxsaW5nCiAgICAgICAgICAgICAgICAvLyBpbXBvcnRTY3JpcHRzKCk6IGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE1MzMxNwogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHt9LCAwKTsKICAgICAgICAgICAgICAgIGltcG9ydFNjcmlwdHModXJsKTsKCiAgICAgICAgICAgICAgICAvL0FjY291bnQgZm9yIGFub255bW91cyBtb2R1bGVzCiAgICAgICAgICAgICAgICBjb250ZXh0LmNvbXBsZXRlTG9hZChtb2R1bGVOYW1lKTsKICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgY29udGV4dC5vbkVycm9yKG1ha2VFcnJvcignaW1wb3J0c2NyaXB0cycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydFNjcmlwdHMgZmFpbGVkIGZvciAnICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlTmFtZSArICcgYXQgJyArIHVybCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttb2R1bGVOYW1lXSkpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKCiAgICBmdW5jdGlvbiBnZXRJbnRlcmFjdGl2ZVNjcmlwdCgpIHsKICAgICAgICBpZiAoaW50ZXJhY3RpdmVTY3JpcHQgJiYgaW50ZXJhY3RpdmVTY3JpcHQucmVhZHlTdGF0ZSA9PT0gJ2ludGVyYWN0aXZlJykgewogICAgICAgICAgICByZXR1cm4gaW50ZXJhY3RpdmVTY3JpcHQ7CiAgICAgICAgfQoKICAgICAgICBlYWNoUmV2ZXJzZShzY3JpcHRzKCksIGZ1bmN0aW9uIChzY3JpcHQpIHsKICAgICAgICAgICAgaWYgKHNjcmlwdC5yZWFkeVN0YXRlID09PSAnaW50ZXJhY3RpdmUnKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gKGludGVyYWN0aXZlU2NyaXB0ID0gc2NyaXB0KTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIHJldHVybiBpbnRlcmFjdGl2ZVNjcmlwdDsKICAgIH0KCiAgICAvL0xvb2sgZm9yIGEgZGF0YS1tYWluIHNjcmlwdCBhdHRyaWJ1dGUsIHdoaWNoIGNvdWxkIGFsc28gYWRqdXN0IHRoZSBiYXNlVXJsLgogICAgaWYgKGlzQnJvd3NlciAmJiAhY2ZnLnNraXBEYXRhTWFpbikgewogICAgICAgIC8vRmlndXJlIG91dCBiYXNlVXJsLiBHZXQgaXQgZnJvbSB0aGUgc2NyaXB0IHRhZyB3aXRoIHJlcXVpcmUuanMgaW4gaXQuCiAgICAgICAgZWFjaFJldmVyc2Uoc2NyaXB0cygpLCBmdW5jdGlvbiAoc2NyaXB0KSB7CiAgICAgICAgICAgIC8vU2V0IHRoZSAnaGVhZCcgd2hlcmUgd2UgY2FuIGFwcGVuZCBjaGlsZHJlbiBieQogICAgICAgICAgICAvL3VzaW5nIHRoZSBzY3JpcHQncyBwYXJlbnQuCiAgICAgICAgICAgIGlmICghaGVhZCkgewogICAgICAgICAgICAgICAgaGVhZCA9IHNjcmlwdC5wYXJlbnROb2RlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvL0xvb2sgZm9yIGEgZGF0YS1tYWluIGF0dHJpYnV0ZSB0byBzZXQgbWFpbiBzY3JpcHQgZm9yIHRoZSBwYWdlCiAgICAgICAgICAgIC8vdG8gbG9hZC4gSWYgaXQgaXMgdGhlcmUsIHRoZSBwYXRoIHRvIGRhdGEgbWFpbiBiZWNvbWVzIHRoZQogICAgICAgICAgICAvL2Jhc2VVcmwsIGlmIGl0IGlzIG5vdCBhbHJlYWR5IHNldC4KICAgICAgICAgICAgZGF0YU1haW4gPSBzY3JpcHQuZ2V0QXR0cmlidXRlKCdkYXRhLW1haW4nKTsKICAgICAgICAgICAgaWYgKGRhdGFNYWluKSB7CiAgICAgICAgICAgICAgICAvL1ByZXNlcnZlIGRhdGFNYWluIGluIGNhc2UgaXQgaXMgYSBwYXRoIChpLmUuIGNvbnRhaW5zICc/JykKICAgICAgICAgICAgICAgIG1haW5TY3JpcHQgPSBkYXRhTWFpbjsKCiAgICAgICAgICAgICAgICAvL1NldCBmaW5hbCBiYXNlVXJsIGlmIHRoZXJlIGlzIG5vdCBhbHJlYWR5IGFuIGV4cGxpY2l0IG9uZSwKICAgICAgICAgICAgICAgIC8vYnV0IG9ubHkgZG8gc28gaWYgdGhlIGRhdGEtbWFpbiB2YWx1ZSBpcyBub3QgYSBsb2FkZXIgcGx1Z2luCiAgICAgICAgICAgICAgICAvL21vZHVsZSBJRC4KICAgICAgICAgICAgICAgIGlmICghY2ZnLmJhc2VVcmwgJiYgbWFpblNjcmlwdC5pbmRleE9mKCchJykgPT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgLy9QdWxsIG9mZiB0aGUgZGlyZWN0b3J5IG9mIGRhdGEtbWFpbiBmb3IgdXNlIGFzIHRoZQogICAgICAgICAgICAgICAgICAgIC8vYmFzZVVybC4KICAgICAgICAgICAgICAgICAgICBzcmMgPSBtYWluU2NyaXB0LnNwbGl0KCcvJyk7CiAgICAgICAgICAgICAgICAgICAgbWFpblNjcmlwdCA9IHNyYy5wb3AoKTsKICAgICAgICAgICAgICAgICAgICBzdWJQYXRoID0gc3JjLmxlbmd0aCA/IHNyYy5qb2luKCcvJykgICsgJy8nIDogJy4vJzsKCiAgICAgICAgICAgICAgICAgICAgY2ZnLmJhc2VVcmwgPSBzdWJQYXRoOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vU3RyaXAgb2ZmIGFueSB0cmFpbGluZyAuanMgc2luY2UgbWFpblNjcmlwdCBpcyBub3cKICAgICAgICAgICAgICAgIC8vbGlrZSBhIG1vZHVsZSBuYW1lLgogICAgICAgICAgICAgICAgbWFpblNjcmlwdCA9IG1haW5TY3JpcHQucmVwbGFjZShqc1N1ZmZpeFJlZ0V4cCwgJycpOwoKICAgICAgICAgICAgICAgIC8vSWYgbWFpblNjcmlwdCBpcyBzdGlsbCBhIHBhdGgsIGZhbGwgYmFjayB0byBkYXRhTWFpbgogICAgICAgICAgICAgICAgaWYgKHJlcS5qc0V4dFJlZ0V4cC50ZXN0KG1haW5TY3JpcHQpKSB7CiAgICAgICAgICAgICAgICAgICAgbWFpblNjcmlwdCA9IGRhdGFNYWluOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vUHV0IHRoZSBkYXRhLW1haW4gc2NyaXB0IGluIHRoZSBmaWxlcyB0byBsb2FkLgogICAgICAgICAgICAgICAgY2ZnLmRlcHMgPSBjZmcuZGVwcyA/IGNmZy5kZXBzLmNvbmNhdChtYWluU2NyaXB0KSA6IFttYWluU2NyaXB0XTsKCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQoKICAgIC8qKgogICAgICogVGhlIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBkZWZpbml0aW9ucyBvZiBtb2R1bGVzLiBEaWZmZXJzIGZyb20KICAgICAqIHJlcXVpcmUoKSBpbiB0aGF0IGEgc3RyaW5nIGZvciB0aGUgbW9kdWxlIHNob3VsZCBiZSB0aGUgZmlyc3QgYXJndW1lbnQsCiAgICAgKiBhbmQgdGhlIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgYWZ0ZXIgZGVwZW5kZW5jaWVzIGFyZSBsb2FkZWQgc2hvdWxkCiAgICAgKiByZXR1cm4gYSB2YWx1ZSB0byBkZWZpbmUgdGhlIG1vZHVsZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBmaXJzdCBhcmd1bWVudCdzCiAgICAgKiBuYW1lLgogICAgICovCiAgICBkZWZpbmUgPSBmdW5jdGlvbiAobmFtZSwgZGVwcywgY2FsbGJhY2spIHsKICAgICAgICB2YXIgbm9kZSwgY29udGV4dDsKCiAgICAgICAgLy9BbGxvdyBmb3IgYW5vbnltb3VzIG1vZHVsZXMKICAgICAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgIC8vQWRqdXN0IGFyZ3MgYXBwcm9wcmlhdGVseQogICAgICAgICAgICBjYWxsYmFjayA9IGRlcHM7CiAgICAgICAgICAgIGRlcHMgPSBuYW1lOwogICAgICAgICAgICBuYW1lID0gbnVsbDsKICAgICAgICB9CgogICAgICAgIC8vVGhpcyBtb2R1bGUgbWF5IG5vdCBoYXZlIGRlcGVuZGVuY2llcwogICAgICAgIGlmICghaXNBcnJheShkZXBzKSkgewogICAgICAgICAgICBjYWxsYmFjayA9IGRlcHM7CiAgICAgICAgICAgIGRlcHMgPSBudWxsOwogICAgICAgIH0KCiAgICAgICAgLy9JZiBubyBuYW1lLCBhbmQgY2FsbGJhY2sgaXMgYSBmdW5jdGlvbiwgdGhlbiBmaWd1cmUgb3V0IGlmIGl0IGEKICAgICAgICAvL0NvbW1vbkpTIHRoaW5nIHdpdGggZGVwZW5kZW5jaWVzLgogICAgICAgIGlmICghZGVwcyAmJiBpc0Z1bmN0aW9uKGNhbGxiYWNrKSkgewogICAgICAgICAgICBkZXBzID0gW107CiAgICAgICAgICAgIC8vUmVtb3ZlIGNvbW1lbnRzIGZyb20gdGhlIGNhbGxiYWNrIHN0cmluZywKICAgICAgICAgICAgLy9sb29rIGZvciByZXF1aXJlIGNhbGxzLCBhbmQgcHVsbCB0aGVtIGludG8gdGhlIGRlcGVuZGVuY2llcywKICAgICAgICAgICAgLy9idXQgb25seSBpZiB0aGVyZSBhcmUgZnVuY3Rpb24gYXJncy4KICAgICAgICAgICAgaWYgKGNhbGxiYWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgY2FsbGJhY2sKICAgICAgICAgICAgICAgICAgICAudG9TdHJpbmcoKQogICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKGNvbW1lbnRSZWdFeHAsIGNvbW1lbnRSZXBsYWNlKQogICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKGNqc1JlcXVpcmVSZWdFeHAsIGZ1bmN0aW9uIChtYXRjaCwgZGVwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRlcHMucHVzaChkZXApOwogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIC8vTWF5IGJlIGEgQ29tbW9uSlMgdGhpbmcgZXZlbiB3aXRob3V0IHJlcXVpcmUgY2FsbHMsIGJ1dCBzdGlsbAogICAgICAgICAgICAgICAgLy9jb3VsZCB1c2UgZXhwb3J0cywgYW5kIG1vZHVsZS4gQXZvaWQgZG9pbmcgZXhwb3J0cyBhbmQgbW9kdWxlCiAgICAgICAgICAgICAgICAvL3dvcmsgdGhvdWdoIGlmIGl0IGp1c3QgbmVlZHMgcmVxdWlyZS4KICAgICAgICAgICAgICAgIC8vUkVRVUlSRVMgdGhlIGZ1bmN0aW9uIHRvIGV4cGVjdCB0aGUgQ29tbW9uSlMgdmFyaWFibGVzIGluIHRoZQogICAgICAgICAgICAgICAgLy9vcmRlciBsaXN0ZWQgYmVsb3cuCiAgICAgICAgICAgICAgICBkZXBzID0gKGNhbGxiYWNrLmxlbmd0aCA9PT0gMSA/IFsncmVxdWlyZSddIDogWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJ10pLmNvbmNhdChkZXBzKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy9JZiBpbiBJRSA2LTggYW5kIGhpdCBhbiBhbm9ueW1vdXMgZGVmaW5lKCkgY2FsbCwgZG8gdGhlIGludGVyYWN0aXZlCiAgICAgICAgLy93b3JrLgogICAgICAgIGlmICh1c2VJbnRlcmFjdGl2ZSkgewogICAgICAgICAgICBub2RlID0gY3VycmVudGx5QWRkaW5nU2NyaXB0IHx8IGdldEludGVyYWN0aXZlU2NyaXB0KCk7CiAgICAgICAgICAgIGlmIChub2RlKSB7CiAgICAgICAgICAgICAgICBpZiAoIW5hbWUpIHsKICAgICAgICAgICAgICAgICAgICBuYW1lID0gbm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZW1vZHVsZScpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHRzW25vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVjb250ZXh0JyldOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvL0Fsd2F5cyBzYXZlIG9mZiBldmFsdWF0aW5nIHRoZSBkZWYgY2FsbCB1bnRpbCB0aGUgc2NyaXB0IG9ubG9hZCBoYW5kbGVyLgogICAgICAgIC8vVGhpcyBhbGxvd3MgbXVsdGlwbGUgbW9kdWxlcyB0byBiZSBpbiBhIGZpbGUgd2l0aG91dCBwcmVtYXR1cmVseQogICAgICAgIC8vdHJhY2luZyBkZXBlbmRlbmNpZXMsIGFuZCBhbGxvd3MgZm9yIGFub255bW91cyBtb2R1bGUgc3VwcG9ydCwKICAgICAgICAvL3doZXJlIHRoZSBtb2R1bGUgbmFtZSBpcyBub3Qga25vd24gdW50aWwgdGhlIHNjcmlwdCBvbmxvYWQgZXZlbnQKICAgICAgICAvL29jY3Vycy4gSWYgbm8gY29udGV4dCwgdXNlIHRoZSBnbG9iYWwgcXVldWUsIGFuZCBnZXQgaXQgcHJvY2Vzc2VkCiAgICAgICAgLy9pbiB0aGUgb25zY3JpcHQgbG9hZCBjYWxsYmFjay4KICAgICAgICBpZiAoY29udGV4dCkgewogICAgICAgICAgICBjb250ZXh0LmRlZlF1ZXVlLnB1c2goW25hbWUsIGRlcHMsIGNhbGxiYWNrXSk7CiAgICAgICAgICAgIGNvbnRleHQuZGVmUXVldWVNYXBbbmFtZV0gPSB0cnVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGdsb2JhbERlZlF1ZXVlLnB1c2goW25hbWUsIGRlcHMsIGNhbGxiYWNrXSk7CiAgICAgICAgfQogICAgfTsKCiAgICBkZWZpbmUuYW1kID0gewogICAgICAgIGpRdWVyeTogdHJ1ZQogICAgfTsKCiAgICAvKioKICAgICAqIEV4ZWN1dGVzIHRoZSB0ZXh0LiBOb3JtYWxseSBqdXN0IHVzZXMgZXZhbCwgYnV0IGNhbiBiZSBtb2RpZmllZAogICAgICogdG8gdXNlIGEgYmV0dGVyLCBlbnZpcm9ubWVudC1zcGVjaWZpYyBjYWxsLiBPbmx5IHVzZWQgZm9yIHRyYW5zcGlsaW5nCiAgICAgKiBsb2FkZXIgcGx1Z2lucywgbm90IGZvciBwbGFpbiBKUyBtb2R1bGVzLgogICAgICogQHBhcmFtIHtTdHJpbmd9IHRleHQgdGhlIHRleHQgdG8gZXhlY3V0ZS9ldmFsdWF0ZS4KICAgICAqLwogICAgcmVxLmV4ZWMgPSBmdW5jdGlvbiAodGV4dCkgewogICAgICAgIC8qanNsaW50IGV2aWw6IHRydWUgKi8KICAgICAgICByZXR1cm4gZXZhbCh0ZXh0KTsKICAgIH07CgogICAgLy9TZXQgdXAgd2l0aCBjb25maWcgaW5mby4KICAgIHJlcShjZmcpOwp9KHRoaXMsICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBzZXRUaW1lb3V0KSkpOwoK",
+ "headers": [
+ [
+ "content-length",
+ "1874677"
+ ],
+ [
+ "content-type",
+ "text/javascript; charset=utf-8"
+ ]
+ ],
+ "ok": true,
+ "status": 200,
+ "status_text": ""
+ },
+ "https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/timeSeries?requests=%5B%7B%22plugin%22:%22images%22,%22tag%22:%22PR_curve%22,%22sample%22:0,%22run%22:%22exp3%22%7D%5D": {
+ "data": "W3sicGx1Z2luIjogImltYWdlcyIsICJ0YWciOiAiUFJfY3VydmUiLCAicnVuIjogImV4cDMiLCAic2FtcGxlIjogMCwgInJ1blRvU2VyaWVzIjogeyJleHAzIjogW3sic3RlcCI6IDc5LCAid2FsbFRpbWUiOiAxNzI3OTU4OTc5LjA4MDEyOTYsICJpbWFnZUlkIjogIld5SmtaV1poZFd4MFJYaHdaWEpwYldWdWRFbGtJaXdpWlhod015SXNJbEJTWDJOMWNuWmxJaXczT1N3eVhRIn1dfX1d",
+ "ok": true,
+ "headers": [
+ [
+ "content-length",
+ "197"
+ ],
+ [
+ "content-type",
+ "application/json"
+ ]
+ ],
+ "status": 200,
+ "status_text": ""
+ },
+ "https://localhost:6006/data/plugin/timeseries/imageData?imageId=WyJkZWZhdWx0RXhwZXJpbWVudElkIiwiZXhwMyIsIlBSX2N1cnZlIiw3OSwyXQ": {
+ "data": "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fU969923ar0xXVxcvGDB/AUL5r/yyks33XTrFVdcpda1xcXFIf5aq5WX1xjJ1b59h48//mzq1He+/fYbz6E1Hm63e+vWLVu3bvn0048HDhw0fvxDWVltQ32W1Wo1mUyemPDY9+WP5Y2+zGZzMKPGaklLqzEksF+//n429+t3inftiYhC1bhx4+eff+nKKy/zzMp75523zj33fCWIP7SrV68aN+4ez1UGg+GRR54499zzwiggFvz554JDhw551n5Oe2rduk2/fqd4R0Hedde9/mOt5s2b1+oYC0ZRUaHnN1uzZs1rvbR//z7PokePHn7+H/XseVx98ZLnILG0tLRaH09NTfNucDjs3pOQ6lRYWOBd1xk5q6VLl67t23fYtWuniKxduyZyD4plxEuADhiNVfESZy9ViUS8VFIiixfLkCHq3xkA4lxm5dwPKckTe5mYE3HkNAAA+nXPPfZffjH+8Ye/EWHxavBg5913Bx61FAabzfbEE494s6UBAwZeeOElvXv3ad68Ra1Wj3fe+c97770TiRqC4fut/Z43dlX34YdTvdlSq1atLr/8qlNOGdChQ3atto99+/Zedlm975t7DB48ZPDgIdu3b1uyZNHKlSvWrFnlfc9dRAoKjk6Z8tzWrZsfeugxVa5NSqoeq5WRkZERcEy/j2Pf1s/MbHTffeNvv/2uJUsWL1++bPXq1Zs2bfC2jonIokULb7jhmjfffK9Tp8CD+GrJymq7c+cOEfFGdH5494QRZdW6ymg0tWjh72xy3+FpR48eCeNxItKiRcszzxw+e/a3IrJv394tWzYf2zdTy+rVq8aOvcsza05RlAkTHvWTysS+WbNmeNdPP/3k008/GfCSwsKCX36Zd845I1Uvxtsb5Dv9z6OkpDI6rZVB1lLfHyW32+0JqBo3rj2YLisry7NwuVy5ublt2mT5ub/vn4KsrHZ+djZchw7ZnnipoqKiuLjI/y88LhEvATpgrvrS0+5iOF4lvxNQw7dpE/ESAISukc9whoI90qyrdqUAAICQmUwyc2b5q6+a33zTnJeXKFPymjd3jxljv/tuuyky7439/vtvu3fv8qyvvfaGO+64u76dRUXht8g0XGpqmrfxxTduUYvDYf/yy8896+zsju+880F6et1vvwZ/9FTHjp06duzkmUO1a9euhQv/mD37W29nzKxZM88446xBgwY3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mpYIAAAQPQMHnupZuFyuRx996MiRI7U2LF/+15gxNxUXF0do3lpI/vnPh7wH1D/zzFNvv/2f8vLabQcikpeX9+abr3/77dfB37lHj56NGjXyrD/66IOFC/+oteHw4cMPPTT+999/8/Pf4fDhI5deev7TTz+5cuUKt7uON0bsdvuUKc97sx/floWGXOsxfvwEz5FRhYUFt9xy/Q8/fOd9u7yWwsLCH3747pZbbvj66+m+H3/33beuvvqKGTO+Ova3gcfGjRteeWWKZ92yZStPa0ioLrtsVNu2ld/y9fHHH3711X9rbfjyy8+nTfvIs27btu2llzboRKJ77x3n+V9WUVE+duxdvkPwPFauXPHAA2O9/61uu+0Oo9FYa8/f/375f/7z2q5dO+t7Sn5+/qRJE99//13PT41G0x131DHqbePGDffee0dxcXW2dPnlV4X1y4ot+fn53lD2+OP7tGkTbO44bNjZnoxHfAIqFZ155lkmk0lEPv30k1pJTNeu3W69dYxnvWnTxrvvvn3YsCGXXHLesGFDb7zxH3/9tUxRlCuu+Jtnw7RpH11wwTlvvvm6Z57h6NFXPPDAhPoe2rVrN29stmrVyieffMI7BM9j5crlTzzxqGdtNJpuv/2usH+BV199xTvv/Ke+g/EcDsc333x9++23ePPRYcNG9OlzQtiP0zXOXgJ0wFQ1HM/BcLy6dOkiXboEu3njRllX/2GlxEsAEKbMQAfGFuyS2ePl3pXRKAYAAEBrp502pGvXbp6WlJyctVdcccnw4Wd37drdbDbl5eUtWbJo5coVItKqVavBg4dMn/6lttV27NjpkUee+Ne/HnM6HW63e+rUd2bM+PLUU4d06dI1IyOjvLxs375969atWbNmtcvlGjv2/uDvbDQar732Rk92UlFRPm7cPQMGDDz55P6NGjUuLi5avz7n99/ne95ZHjPmzjfeeLW++1RUVMyaNXPWrJlNmzY7/vjeXbt2a9SocXJycklJyfbt2xYsmO895KlHj57nn3+hWteKSLt27Z966tkHHxxXXl5eWFg4ceLjb7zxWv/+Azp37pqRke5wOIuLi/bu3bN586b169d7pn4NGza81k22bt3y3HOTX3zx2e7de/bs2TMrq11GRrrL5c7Ly129euXSpUu8rRj33fdAeImjyWR+6qlnbr/9lrKyMpfL9cILz3733Tenn35m06bNDh069OuvP3tO2BKRlJSUp556toHnxHTt2m3cuH++8MIzInLw4IEbbrjm1FNP69u3X2ZmxtGjR5ctW7J48SJvnjdq1OXeMYO+iouLPvxw6ocfTu3QIbtnz17Z2R0zMjKtVmtZWVlu7sH163OWL//LO0jNYDBMmPBw5851vAH06qsvFRYWVv13MP33v5/+97+fBvwlfPXVN+H92qPm+++/9U5KDHIynkeTJk1OOaW/55ytJUsWHTiw37ePsOEyMxsNH372jz/Ozs09+Omnn9x4482+r1533Y0ul+vdd9/yhIvl5eUHDhzwvJSSkjJ+/IR27dp/8cVn4tMk1KVL11tvvWPo0NP9P3fcuH+uX5+zY8d2Efnhh+//+mvZOeeMzMpqW1JSvHz5XwsX/uH9czR+/IT27TuE/QssKDj63nvvvPfeO507d+nevWd2dnZ6errZbCkuLtq6devixQtzcw96N/fqddwjjzwR9rP0jngJ0AHvcDwH3UsNVv8BkCLESwAQtuMvk5WfBNhzZLsUHZD0VlEpCAAAQEsGg2Hy5OfGjLnZczZJUVHRzJnTa+1p2bLV88+//OuvP2tRYG0jRpyTkZHx2GMPed6mP3r06OzZ36py56uu+vu6dWvmzZsrIm63e9GihYsWLfTdYDQax4y5c9iws/3ES175+Yd+++0X70k8tfTqddyLL77i6atQ8doBAwa+884HEyY84OlmyMvL9Z5gVCeDoXabjofT6czJWZuTs7bOV00m0wMPTGjIaTE9evR65pkXH3vsocLCAhHZsGH9sUfUZGY2evLJp3v06Bn2U7xGj77CZrO98cYrDofD5XItWDC/zvmH11xz3R133O3/Vjt37vA/eLB58+bjxz80dOgZdb7q9PlubIfDsWdP3U0n+uJ2u7/5prLxyGg0+Z53FYxzzhnpiZdcLte338665ZYx6pZ33XU3zp37P6fT8fHH7w8ZMrTWgVg33HDz0KFnfPnl58uWLcnLyzObza1atR48+LRLLhnVunWbtWvXpKSkZGRktGzZ6oQT+g4YMLBfv1OCeWh6evpLL736wANjt27dIiK5uQc//viDWnuMRtPtt995ySWXqfLL3Lp1i+dZ9TnnnJHjx09ISUlR5XF6RLwE6IDZWPl9K3QvNVzAeMntFkWJVjUAEDc6nyU3zZUdv8uxI0eKDsjSdyrXe5dLj/OiXBoAAIAm2rVr/9FHn7788os///xTrXFqqalpZ599zh133JOenh4j8ZKIDBgw6Kuvvvnkkw+//XbWkSN1nFfUokXLs84aHmr+YTAYnnrqmd69+3z44fu1bqsoygknnHjHHff06XOCnwOKmjVr9vDDj//554KVK5d7jw6qpVOnzpdddvmll46qNYGtIdf66tq12+efT//mm6+/+uq/9R011KpV6/79B44YcXat98r/9rermzZtunjxoq1bN9c5WC8pKWno0DNvuumWDh2y6ysgSAMGDPzssy9ff/2Vn3/+qdbUsuTk5DPPHHbnnfc0bdqsgU/x+vvfr+nff8B//vPq4sWLvH02HgaD4aSTTr7pplu8J3sd64EHJixYMH/lyuWHDh2qb0/Xrt1Gjrzg4osvTU1NVatsXVi+fJnviVONGjUO6fLTTz8zKSnJ83vgu+++uemmW9Wdw9mxY6errvr7tGkflZWVjRt3z3vvfdiiRUvfDZ07d5kw4dE6rz3++N4//7ygzpcCat26zQcfTPvgg/e+/nqGJ7z38vyWu/POe8IbL+nryiv/vmTJoo0bN9hstjo3WK3W004bOnr0FX5+eycIpc6po0Dbtm337t2blZUVH4G/3t360bL/5RwUkT5tM7+56zSty9G3d96RW2/1t6GgQDIyolUNACSCimJ5pp24XSIiQ8fLWXX/GwMAgFgQf/8WLi0t3blzp8vldrnczZu3slqTtK4oER0+fHjlyhUHDuy3221NmjRp0aLViSf2tVqtWtdVL7fbvXHjhu3btx45crSiojwlJaVFi5adO3dt3z7QPGS/7Hb72rWrt27dUlRUlJ6e3rRps+OO692iRYuQbrJnz+5du3bu37+/pKTY6XSmpKQ2b96ie/fuWVltI3qtr7y8vLVrVx8+fLioqNBoNKalpbVu3aZjx04tWwZo0y8rK9uyZdPevXuPHDlcVlZusZjT0zOyszt27949KSk5pBoCKisrW7Fi+cGD+wsKCjIzM1u2bN2370nJySo/xaugoGDVqpWHDuUVFhakpqa2aNHyxBP7ZmY2CvLy3NzcHTu279+/r6io0GazJSUlp6WltW7dulu3HpmZmRGqGQ1ks9luvfUGT4dcdnbHF154uW3bdgGvUovL5Vq9etWePbsPH85PSkpu3rx5nz4nqBidiojD4di5c8fevXtyc3NLS0scDmdqakp6ekbHjp26du3awPGSHhUV5Xl5BwwGxWBQOnTooMcuKOIl1C3+vqTWtTum/TV7zQER6dU6Y/a9Q7QuR99mzJBRfk+v3LZNOnaMVjUAkCBeHyh560VEOp8l/1D/aFkAANQSf/8WJl4CAERIbu7B2267af/+fSKSnp7++OP/N2RIgPOTfJWUlHz88QeXXXZ5qDFz3IiDeInheIAOmKraVx0uhuM1lP/heCKSn0+8BABqy+pXGS9t/11eC2qsdlDMyXLyjdLvetVuCAAAAAAITosWLV9//e17771j9+5dRUVF48ffd+qpp9188229eh3n/8LS0tIff5w9derbhw4d+uOP3998871EG34YN4iXAB0wGSvPAnI4aTdsqIDx0sSJkpUV+D5JSdK7t5x5pnTqpEpdABDXsvrKyk9ERFx2ObRJzTt/O1a6ny9pzdW8JwAAAAAgCG3atHnnnfcff/yRJUsWiciffy74888FvXv3GTjw1AEDBnbs2NmbG7nd7gMH9q9atfKvv5bNmze3tLTE83GTyXT06BHiJZ0iXgJ0wGSoipdcxEsNFTBe+u67EO5mschjj8mECWLisykA+NH1bDEliaM88M6QuaVgF/ESAAAAAGiiUaPG//7369Onf/n2228UFhaKyJo1q9esWf3OO2+KiNVqbdSosc1WUVhY6HQ6fS+0WpNuuOGmf/zjeqPRqE3paDDeEAV0wGSsGo7nZDheQwWMl0Jis8ljj4mIPMpB9QDgR6P2cvVXsna6aglTySHZMrdybStV554AAAAAgNApijJ69BUjRpwzffqXM2d+lZeX632poqLi4MEDtfY3btx41KgrRo++olGjxtGtFCojXgJ0wEz3knosFklLk+JiNe85caJccYV066bmPQEg3nQcIh2HqHa3A2uq4yU78RIAAAAAaCwzM/PGG2++4YabVq9etXTp4pycdbt378rPz6+oKE9OTm7cuEnz5i1OOOHEU04Z0KdPH5PJrHW9UAHxEqADRkNV9xLxkhqaNlU5XnI45KefiJcAIIrMKdVrW4l2dQAAAAAAqimKcsIJJ55wwolaF4JoMGhdAIDAzMbK7iU7w/HUoO58PI+//lL/ngCAell8zn2lewkAAAAAgKgjXgJ0wFQVLznpXlLD8cerf8+iIvXvCQCoV43uJeIlAAAAAACijXgJ0IHq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7rvvLmR1AACsxAZDeqUXb04XL9EmrXcvRcQix3iRg0Szn3lTWQz5BAAAWlcG8dIrr7wya9asRCKx00479e/f1sOl+/fvv8suu0TEJ598MnHixEIWCADAijYc0ju9mDR9fkM25zZRsTLGS+bjkYums5fC8UsAAJBPZTAc79VXX00vtttuu6xu3GabbR566KH0E0aOHJn/ygAAWIUNBjd2Ly1e2jDqgv9kNY6qS3XygK2GnfXlTRLGWFWSjPHStddG+i+bDR8eo0fHmmt2QFGUvxbdS45fAgCAvCmDeGnatGnpxfDhw7O6sWn/hx9+mOeaAABo1QbLupciYv6SuuxuXhJ/fPKdL24yeIf1BuW5LEpY62cvRcQ55yxfJ5NxzDHxi19E374FLYryl2zWvdSgewkAAPKmDIbjLVo2ZL17xp84W+rWrVt6sWDBgjzXBABAqzYf1nftgZm6UVr1wpTZ+SqGspCxe6m5hob4wx9i//1jyZKCFUTnoHsJAAAKowy6l/r165dezJgxI6sbm/b37t279Z0AAORXl+rkrcd97t6Xps5dlF3r0h1j35+1oDYiXvtoXmFKo0RlFS+lPfZYXH11nHJK/ouh82gRL+leAgCAvCmDeGnw4MHpxdixY7O6sWn/aqutlueaAADIZFi/7ifuun62d02aPv+h1z6OiNemzS1AUZSuHOKliLj2WvESrdK9BAAAhVEGw/G22WabiEilUv/+978//fTTNt41e/bsf/3rX+n1lltuWZjSAADIs5FDG/vO352xYFGtVoMKklu89Prr4aBVWtPi7CXxEgAA5E0ZxEtrr732+uuvHxFz5879yU9+0sa7fvKTn8ydOzci1lprrY033riA9QEAkD8bD+2TXjSk4q3p5uNVkCFDckyYhg2LL36x8Z//9//i6qtj2eGtoHsJAAAKpQyG40XESSeddOqpp0bEddddN3jw4AsuuKD1/eeee+51110XEYlE4sQTT+yIEgEAyIeNV19+auZxN47t2TW7P6+OHNrnov0369ejS77rouBqauJzn4tHHsnl3kcfXb7+85/jl7+Mm2+Oz30uX6VRzhLNupecvQQAAPmTSKVSxa4hsyVLlmy88cbvvfdeKpVKJBLbbbfd6aef/uUvf7m6usWvG+rq6v75z39edtllzz33XPrfa6211nr99de7detWpMLL2Jprrjl16tRhw4Z98MEHxa4FAKgg9Q2pzc7796Kluf8W+Hu7bXDaHhvmsSQ6zH//G1/4QuTlB5QhQ+Lll2PZKa5UsJdui3tOaFyf9lr0WaOo1VAG/CwMANBG5dG91LVr13vuuWennXZauHBhKpV67rnnvva1r3Xr1m2LLbYYOnRor1695s+fP23atPHjxy9evDgi0tlSr1697rnnHtkSAEAZqUomdttk8H0vT8v5CVNmLshjPXSkXXaJyy6LM87IwxE5H38c558fV12Vj7Ioay3OXtK9BAAAeVMe8VJEbLHFFvfff/8hhxzy0UcfRUQqlVq0aNFzzz3XfE86VUokEhGx+uqr33777VtuuWUxigUAIHcXfGXTDQb3njIru5To8Tc/mTG/NiLmLlpamLroCD/6Uey6a1xySYwbF++9165HPfhgnmqirDl7CQAACqNs4qWI2HnnnV988cUf//jHt912W11d3aq2VVdXH3bYYZdddtlgszAAAMrQwF5dv7/7BtnedfSfn3/sjU8iYu7iVf5BkbKwzTZx110tPnnmmdhhh6yfM2lSLFgQPXvmqy7KU4t4SfcSAADkTTnFSxExZMiQG2644aKLLrrrrrv++9//vvLKKzNnzpw3b17v3r0HDhy4+eab77LLLgceeOCwYcOKXSkAAB2qb/ea9GKO7qVOZ/To6NEjFi7M+sZPPxUvVbwW8VIZHDwMAADloszipbThw4d///vf//73v1/sQgAAKBV9ujXGS4bjdT5du8Y3vhF/+lPWN86eHf7iWaVz9hIAABRGMvMWAAAoeX26N/7FqbmLxUud0E9+EgMHZn3Xp5/mvxLKjLOXAACgMMRLAAB0Bk3dS4uXNiyp06PQ2ay3Xtx/f6y7bnZ3zZ5dmGooI4lm3UvOXgIAgPwpy+F4AACwgj7Lzl6KiHmL67r2qmplM+Vo223jtdfittvihRdi6tSIiKVL4x//aO0W3UvoXgIAgAIpy3jpjTfeePDBB5999tn3339/1qxZCxcuXGeddR5++OGmDalUat68eRGRTCZ79epVvEoBAOggTd1LETF30dJBvboWsRgKpGvXOProOProxsu6uqipaW2/7iUi2SxecvYSAADkT5nFS88///xZZ531yCOPNH2SSqUioqqqxd9Oraur23jjjT/++ONkMjlp0qS11167owsFAKBj9W3WvTR3cV0RK6HDVFdHr14xf/4qN+heQvcSAAAUSDmdvXTRRRfttNNOjzzySDpSSqVSqVQqkUh8dmdNTc1xxx2XSqUaGhpuueWWDq8UAICO1qf78r84NWfR0iJWQkfq37+1b3Uv0fLsJfESAADkTdnESxdeeOG5555bV9f4F1F79uy5yy67HHzwwemo6bMOPfTQ9OKf//xnB5UIAEDxrDAcr4iV0JH69WvtW91L6F4CAIACKY946Zlnnjn//PPTjUprrrnmrbfeOmvWrEcfffQvf/lLRKy0gWmTTTZZd911U6nU2LFjFy5c2NEVAwDQsfq0GI4nXqoUupfIINmse8nZSwAAkD/lES+dfvrp6cWYMWPGjx9/6KGHVldnPjVq6623joi6urpXXnmlsPUBAFBsvbst//Ph3EXOXqoUupfIQPcSAAAURhnESx999NFTTz2VSCS6d+/+t7/9rV/rP0E2s+mmm6YXb775ZqGKAwCgNNRUJXt0aWxT0L1UOXQvkUGLs5d0LwEAQN6UQbz05JNPpg9Y2n///ddaa6223zho0KD0YubMmQWpDACAUtJ0/JKzlyqH7iUy0L0EAACFUQbx0rRp09KLz33uc1nd2KtXr/RiwYIFea4JAIDS03fZ8UtzxEsVQ/cSGSSb/czr7CUAAMifMoiXFi5cmF40xUVtNH/+/NxuBACgHPXp3nj80tzFzl6qFK13L82bF3X+t1DhWnQvpYpXBwAAdDbVmbcUW9OMu+nTp2d145QpU1Z4AgAAnVjTcLzJ0+df9/jkrO5drXfXL202tFtNVeatlJLWu5ciYtttY+DAzM8ZODBGj45DD41spnFTDpy9BAAAhVEG8dLw4cPTiyeffPLHP/5x22984okn0ouRI0fmvywAAEpMn2XD8aZ+uuji+1/P9vZnJs/8+UFb5LsoCqv17qWIePHFtj7q9tvjpz+NX/0qjj22fTVRUpy9BAAAhVEGw/F22mmnLl26pFKpf//73++++24b73r11VefffbZiBgwYMCWW25ZuPIAACgRq/ft1p7bn5o0M1+V0GEydi9lZf78OO64ePDBfD6TIks2615y9hIAAORPGcRLPXr02GOPPSKirq7uiCOOWLo080HNDQ0N3/nOdyIikUgcfPDBBS8RAIAS8M3t1tp49d45317XoLOh/GTsXsrB8cc7o6cT0b0EAACFUQbD8SLiggsuuP/++yPi6aef/sIXvnDTTTetu+66q9o8f/78I4444sknn4yImpqaM844o+MKBQCgeNbs3+Nfp3x+aX12v0G+8B8Tb3p2SkQ0SBTK0IAB+X/mO+/ElCmxzjr5fzJF0CJe0r0EAAB5Ux7x0ujRo0855ZRf/epXiUTi6aef3njjjQ844ID99tuv6VClurq6iRMnfvDBB4888sif/vSnWbNmRUQikbjkkkuajm4CAKAS1FRl16BfXZVIL1I6VsrQGmvEsGExdWqeHzt+vHips9C9BAAAhVEe8VJEXH755R988MGdd96ZSCSWLl1655133nnnnemvUqnUlClTNt9886bLRCIREccdd9ypp55atIoBACgHyURjvKR7qRwlErHPPvGHP+T5sQsX5vmBFE2Ls5fESwAAkDdlcPZSWiKRuP322y+99NLq6uWRWDpJSodJqVSq6S+cVldXX3755ddcc01xagUAoHwkG9OlaNC9VJ5++tPI+8CCRYvy/ECKRvcSAAAURtnES2k//vGPJ02adMoppwwePDgdJqWWSW/o16/fCSec8NZbb5122mlFrRQAgPKwvHtJ+1J5GjIk/v73GDw4n88UL3UeiWbdS85eAgCA/Cmb4XhNhg8ffsUVV1xxxRVvvfXWiy++OGPGjDlz5vTo0WPgwIEjR47caqutEst+QQAAABk1/elR81L52nLL+N//4lvfikceyc8DxUudh+4lAAAojDKIlxYvXjx9+vSISCQSw5uNvdhggw022GCD4tUFAEBnYDhe57DWWvHQQ/Gf/8Rjj8Vbb0V9pjaVf/4zli5d5bfipc6jxdlLupcAACBvyiBeuummm0444YSI2GGHHZ544olilwMAQKeyfDiedKnMJRKx116x115t2rz66vHxx6v8dvHifBVFseleAgCAwiiDs5c++eST9NFK++yzT7FrAQCgs9G9VJm6d2/tW91LnYd4CQAACqMM4qUBAwakF6uvvnpxKwEAoPNx9lJlEi9VCvESAAAURhnES0OHDk0v5s2bV9xKAADofJqG49XLlyqJeKlSND97SbwEAAD5Uwbx0o477lhdXR0RL7zwQrFrAQCgszEcrzJ169bat+KlzqN591JDffHqAACAzqYM4qVBgwbtvvvuqVTq3nvvnTlzZrHLAQCgU0kmlw/HS0mYKkbr3UuLF3dUHRRaQvcSAAAURBnESxHxy1/+snv37nPnzv1//+//1df7G2cAAOTNstl4EY5fqiSG41WKFmcv+VkSAADypjzipU022eRPf/pTly5d7rvvvl133fWll14qdkUAAHQSyWb5kvl4lUO8VCmcvQQAAIVRXewC2uTGG2+MiGOOOeaqq656+umnx4wZs/nmm++0007rr79+nz590iczteLII4/skDIBACg/yWbdSw3SpYohXqoUzfsTnb0EAAD5Ux7x0tFHH51IJCIikUikB+K//PLLEyZMaOPt4iUAAFZF91Jl6tattW+dvdSpJKoax+L5DxwAAPKnPOKl5hLN//ZZJqlUKqv9AABUmuZ/XPTL58qhe6mCJJKN8dJ/L40nftniqy49Y7sTYpcfFaUuAAAoa+Vx9lJEpHJS7KoBACh1LYfj+QNkpRAvVZDksr9V2VAXdYta/LNwRjx6UcyYVNT6AACgLJVH99I777xT7BIAAOicDMerTOKlCrL29jH5kdY2fPxKDFq/o6oBAIBOojzipbXXXrvYJQAA0Dm17F4qXh10LPFSBTnwT/Hy7bFwZosPUw3LB+XNfrfDawIAgLJXHvESAAAUSMuzl+RLlaJbt9a+XbIkUqlwimsn0WNAfO47K/l83A2xcEZExKdTOrgiAADoBEo9XpoyZco//vGPcePGffLJJ1VVVYMHD95+++3322+/1VZbrdilAQDQGVQlmw/HK2IhdKjWu5ciYvHizHsob/3XboyXdC8BAED2SjdeWrJkyWmnnfaHP/yhvr6++ef/93//17179x/96EfnnXdesWoDAKDTaDkcT75UKTJGR4sWiZc6u/7rxNRxERGzdS8BAEDWSjReWrJkyd577/3444+n55OsMLFk4cKFF1544RtvvHHrrbcWr0YAADqD5n/UFC9VjrbES3Ry/ZYd8Tvn/Wioj2RVUasBAIAykyx2ASt33nnn/fe//41lP+2nmkkkEolEIpVK3X777X/4wx+KXSkAAOUt2eJvMhWxEDqUeInov07jor425k0rZiUAAFCGSrF7acaMGb/+9a+bgqWdd975kEMOWW+99erq6l5//fWbbrrp5ZdfTidM55133jHHHJNMlmhIBgBA6TMcrzJ165Zhw+LFHVIHRdR/7eXrjyZEdcv/TVR1iW59OrgiAAAoI6UYL9166621tbURkUgkfvvb3373u99t+urLX/7yD37wgx/+8IdXXHFFRHz88cf/+te/9tlnn6LVCgBAmUu2GI5XxELoULqXWD4cLyJuO3QlGzY9IA76czT7PxEAAECTUuz7efLJJyMikUgcccQRzbOlJpdffvnOO+/cfDMAAOSm+a+OG+RLFUO8RPRdM5Kt/oXLV++OT97oqGoAAKDMlGK89PLLL6cXp5566qr2fO9731thMwAA5MDZS5VJvERU1cSoQzLsWfxpR1QCAABlqBSH482cOTMievToscUWW6xqzw477JBezJgxo4PKAgCgM2o5HE++VCkyxkvOXqoI+/02Nv1azJ3a4sPZ78STv2pc1y/t+KIAAKAslGK8NGfOnEQiMWjQoFb2DB48OL2YO3duhxQFAEDnlGw+HE+8VDG6dcuwQfdSRaiqjg12X/HDqeOWx0sNdR1cEQAAlItSHI5XV1cXETU1Na3sqaqqar4ZAAByk2jRvVTEQuhQhuOxSs0PZGqoL14dAABQ0koxXgIAgA6je6kyiZdYpWSzv+nYYDgeAACsnHgJAICK5uylylRVFa2OSxAvVbAW3UumZQAAwMqJlwAAqGjJZn8ibmgoXh10uNYbmBYv7qg6KDXJquVr8RIAAKxCdeYtRTJr1qwLL7wwL9vOPffcPBUFAEBnk9C9VKm6dYu5c1f5re6lylXVrK+tXrwEAAArV7rx0uzZsy+44ILW96RSqbZsEy8BALAqzYfjSZcqSuvdS+KlymU4HgAAtEHpxksZNf97pquSSqXasg0AgIqVbPanRd1LFaX1eOnll2PmzIiI3r2jS5eOqYjSIF4CAIA2KNGzl1J5Uux/DwAASl3ScLxKtdpqrX370EMxaFAMGhQ9e8aoUXHttY7mqhgt4qWlxasDAABKWil2Lz366KPFLgEAgEqRaNG9VLw66HCjRsUTT2TeVlcXEybECSfEXXfFP/8Z1aX4IxR51SJeqi9eHQAAUNJK8WejXXbZpdglAABQKVqevSRfqiCf/3z8/vdZ7P/Pf+Lcc+PiiwtWECXCcDwAAGiDEh2OBwAAHaMq2Xw4XhELoaN9/vNZ33LVVbHUsLROr6pm+bre/38DAMDKiZcAAKhoyRbD8eRLFWT11WPDDbO7Zc6cePrpwlRD6UhULV/rXgIAgFUQLwEAUNESiebdS+KlypLDWO633ipAHZSUZDISy35SdvYSAACsgngJAICK1vLspSIWQhHsvXfWt7z3XgHqoNQkl83HazAcDwAAVk68BABARTMcr5Ltt1+suWZ2t0yZUphSKCnJ6saF4XgAALAK4iUAACpassVwvCIWQhHU1MTNN0fXrlncIl6qCOIlAADIRLwEAEBFS+heqmy77BIPPRRjxrR1v+F4FaFqWbxUL14CAICVq868BQAAOq+WZy+JlyrRTjvF88/HpEnx2muxaFGce2689dYqN7//fvz9742pZP/+MXJkDBjQYZXSUXQvAQBAJuIlAAAqWovheA1FLIRiSiZjww1jww0jIhYsiGOPXeXOurr46leXXyYS8c1vxqWXxrBhBS+SjiNeAgCATAzHAwCgoiUNx6OltdbKYnMqFTffHLvuGh99VLCC6HjL46WlRa0DAABKl3gJAICKlmjevSRdImLttbO+ZdKkOPXUApRCsSyPl+qLWgcAAJQu8RIAABWtefeSs5eIiOHDc7nrzjvjww/zXQrFYjgeAABkIl4CAKCiJXUv0VL37jF4cNZ31dfHgw8WoBqKoqqmcVFvOB4AAKyceAkAgIrWMl6SLxERsf76udx19NFRp9elc0hWNS50LwEAwCqIlwAAqGjN0iXxEo323jvHG3/4w7zWQbEkl3UvOXsJAABWQbwEAEBFSyZ1L7GiI46I3r1zufE3vzEir1NYfvaS4XgAALBy4iUAACpasnn3UkPx6qCUrLNO3HhjVFdn3vlZt92W72roeMvjJcPxAABg5cRLAABUNGcvsVL77x8vvRRf+lL06pXdjY8+WpiC6EhV4iUAAMggp7+PBwAAnUXzs5ekSzS36aZx//3R0BAffRT1y47g2WyzmDu3tbvefz/q6nLsfKJUNHUv1YuXAABg5XQvAQBQ0XQv0bpkMtZYI4YPb/znlFMy7K+vj6lTO6IwCshwPAAAyES8BABARatqES8VsRDKw4knZt7z7rsFL4PCEi8BAEAm4iUAACqa7iWyMmRI/PGPGfZMmdIhpVA4y+OlpUWtAwAASpd4CQCAipZo9ifilHiJNjjyyAwbJk+Ouroc/2lo6JB/B1q3PF6qb3UfAABULgfO5u6dd94ZO3bshx9+WFtbu8Yaa2y88cZjxowpdlEAAGQnaTgeWaqpibXWivfeW+WGCy+MCy/M8eFdusTmm8e++8YZZ0S3bjk+hPaqqmlcGI4HAACrIF7KxYMPPnjuuec+++yzK3y+3nrrnXLKKSeddFKi2S8p8uvXv/71qaee2nR51FFHXX/99QV6FwBAJUg2+4Ob4Xi00TrrtBYvtUdtbYwbF+PGxe23x4MPxpprFuQtZJCsalzUG44HAAArZzhe1k477bS99trrs9lSREyePPnkk0/ebbfd5syZU4hXT548+ayzzirEkwEAKpbuJXKw9toFf8Xrr8cxx4TEszgMxwMAgEx0L2Xn7LPP/tWvfpVe19TUHHTQQdtuu23Xrl0nTpx4yy23zJ49OyIeffTRAw888IEHHqipqWn1YdlJpVLHHnvswoUL8/hMAACat507e4k2WmedjnjLf/4TyWZ/IbBr1xg5Mg44IH74w+jevSMKqFzJpuF4upcAAGDldC9l4bHHHvvZz36WXq+zzjovvfTSrbfeesopp3znO9+58sor33nnnd122y397cMPP3zxxRfn9+3XXHPNY489FhEjR47M75MBACpZy+4l8RJt0jHx0gqWLIkXX4xzz41Ro2L69CIUUEGWdy85ewkAAFZOvNRWqVTqRz/6UXrdpUuXv//97yvEPH379r333nvXW2+99OXll18+PX8/87333nunn356RPTo0ePKK6/M12MBADAcjxwUJV5qMmlSDBkSF10Ur75azDI6s6azl8RLAACwCobjtdXjjz8+duzY9Pr444/ffPPNP7unZ8+el1122UEHHRQR8+fPv/baa88555y8vP3b3/72vHnzIuKCCy4YMWJEXp4JAEBEJJsNx9O9RBttt1106xaLFxezhnPOiXPOiS22iB/+sMUMvawkk7HBBjFypGl7LVUtG45XL14CAICVEy+11d/+9rem9QknnLCqbV/96ldXX331jz76KH1LXuKlP//5z//+978jYvTo0aeeeur777/f/mcCAJCWaNa9JF2ijXr2jK98Je64o9h1RIwfH0cc0d6H9O8fF10Uxx8fVVWZN1cEw/EAACATw/Ha6r777ksvhg8f3srpR9XV1bvvvnt6PX78+PZHQdOmTTvttNPST/7jH/9Y5Qc+AIB8a2pgajAdjzb73e9i+PBiF5Ens2fHSSfFWWcVu47SIV4CAIBMxEttMnfu3HfeeSe93nHHHVvf3HzD+PHj2/nq73znO59++mlEnHbaaVtttVU7nwYAwGc1Hb8kXaLtVlstHn889tuv2HXkz2WXxX//W+wiSsTyeGmprkYAAFgpw/HaZOLEiU3rDTbYoPXNzTdMnDhx3333zfm9t91227333hsR66233vnnn5/zcwAAaEUykYhIhbOXyNI668Tf/x5vvx3jx8cnn+T+nDlz4sc/zl9Z7XDLLbHLLsUuohQkm/2knGqIhBkSAACwIvFSm7z99ttN67XXXrv1zc03NL8xW5988sn3vve99Praa6/t7rBdAIDCaDp9KSVeInsjRsSIEe19yGabxT775KOa9nnkkWJXUCKax0sNdZEULwEAwIoMx2uTuXPnNq0HDBjQ+ub+/fuv9MZsffe7350xY0ZEfOtb39ptt91yfg4AAK0zHI+i+9KX4tFHY911i1zGlClR57ChiKiqWb6uX1q8OgAAoHTpXmqT+fPnN60zdhH16NGjaT1v3rzc3njPPffccccdETF48ODLL788t4e04oorrrjiiita2TBt2rS8vxQAoDQll3UvGY5HEe26a7zxRkycGC+9FAsWLP/8ggti+vQOqqGuLt57Lw/NWGWvebtSg8ANAABWQrzUJosWLWpad+nSpfXNXbt2XemNbTd79uzvfOc76fVvf/vbjP1SOZg7d+7UqVPz/lgAgHKke4kSUVMTW2wRW2zR4sMTTojTT49f/Srq6zuihsmTxUsrDMfrkP93BwCAciNeapPmHUu1tbWtb16yZMlKb2y7U0455aOPPoqIfffd95BDDsnhCRn16dNn2LBhrWyYNm1aQ0NDIV4NAFBqErqXKGHJZPziF3H00XHvvfGHP8S77xb2dZMnxx57FPYVZSDZbDheg+F4AACwEuKlNunVq1fTOmNDUvMNvXv3zvZdDzzwwI033pi+96qrrsr29jY67bTTTjvttFY2rLnmmtqbAIAKkVw2Ha9B+xKlatNNY9NN48wzY+bMOOuseOSReOutgrzo1FPjrLPatHONNWL06PjRj2KzzQpSSTG16F4yHA8AAFZCvNQmffr0aVrPnj279c2zZs1qWmcbL82dO/f4449Pry+++OLhw4dndTsAADmoMhyP8jFwYFxzTUTEggWxNKe+ms99Lt54Y5XfLl4cixe36TmzZsUrr8SNN0ZE7Lzz8i7Az1p99fjc52L//WPddbOstVicvQQAAJmIl9pkRLPp41OmTGl9c/MN6623XlYvuuCCC95///2I2H777U888cSs7gUAIDeJ5fGSfImy0bNnjjeuv35r8VJunngiw4Y77ojzzos//Sm+/vU8v7ogqpoNx6sXLwEAwEqIl9pk5MiRTeu3Mg2hmDRp0kpvbIvJkyc3vWXDDTdc6Z66uuU/3tx1111PPvlken3ggQdedtllWb0OAICIWDYbL1LiJSpAln8FLm/mzYuDD44HH4zddy9OAVkwHA8AADIRL7VJnz591l133XfeeScinnrqqdY3N+U9ETFq1Kjc3jhjxowZM2Zk3DZv3rx58+al1x9//HFu7wIAqHBJw/GoJMWKl9LOPDN22621SXolQbwEAACZJItdQNnYd99904v33ntv4sSJq9pWV1f38MMPp9ejRo1aa621OqI4AADaoal7yXA8KkFx46X//S/+979iFtAmLeKlnE64AgCAzk681FYHHnhg0/qa9Fm6K3PvvfdOmzbts7e00T333JPKJN1ElXbUUUc1fX799ddn+zoAAKLF2UvFLQQ6wuc+F1VVxSxgu+3ittuKWUBmLeKl+uLVAQAApUu81Faf//znx4wZk15fe+21r7zyymf3LFiw4PTTT0+ve/bsefzxx392z9FHH51YRiAEAFAKksv+UOzsJSrBwIHFP/3osMPihBOidP+DMxwPAAAyES+1VSKR+PnPf55e19bW7rfffq+99lrzDXPmzDnggAMmT56cvvzBD34wZMiQjq4SAIDsNTt7qWR/2w35dPXVMWBAkWu49tq4554i17BKVTXL1/WG4wEAwEqIl7LwxS9+8Ywzzkiv33333S233PKb3/zmb37zm2uuueZ73/veuuuu++CDD6a/3XXXXc8666ziVQoAQBaShuNRYdZdNx5+OLbZpshl/OQnpdrAlGw2PVD3EgAArEx15i00c/HFFy9YsODKK6+MiNra2ltvvfXWW29dYc8uu+xy9913d+nSpRgFAgCQtWXpku4lKsiWW8azz8azz8b48TFjRhY3vvpq3H57fmp4441IJmPzzZd/0q9fbLttHHBA7Lhjfl6RI2cvAQBAJuKl7CQSid/+9rf77rvvOeec8/zzz6/w7YgRI77//e+ffPLJTadDAwBQ+pq6l6RLVJRkMnbYIXbYIesbb7kl7r03/ve/ePvtlf9XU18fd93V1qdNmNDi8okn4oor4swz4/zzo7pYP7Ammw3HazAcDwAAVkK8lIs999xzzz33fPvtt8eOHfvhhx/W1tYOHTp0k0022XrrrTPee/31119//fXtefs666zj0GkAgDxK6l6CbFRVxde+Fl/7Wmt7vvWtyPnnnlQqfvazGDIkTj45xye0V4vuJcPxAABgJcRLuRsxYsSIESOKXQUAAO3l7CXIu7POiptvjrp2RDPnnx+HHx79++evprZz9hIAAGSSLHYBAABQZInl8ZJ8CfJj/fXj/PPb9YRZs2KnnWLWrPzUk52qZsPx6sVLAACwEuIlAAAqXdNwPCOIIY/OOivuvbddT5g4MdZdN+64I08FtZ3heAAAkInheAAAVLrlw/EailsIdDZf+Uo0NERVVeQc3c6dG4ccEoccEjvuGBttFGuvHSNGRLLl35Ps0ydGjYrhw2PZf8rtJl4CAIBMxEsAAFS6pu4lw/Eg7xKJuOKKOPXU9j7nqafiqada27DrrnH11bHxxu19UcQK8dLSfDwRAAA6G8PxAACodM3OXipuIdA5nXhibLhhwd/y2GOx3Xbx1lv5eFaLeKk+H08EAIDORrwEAEClc/YSFFSXLvHUU/GlLxX8RXPnxmGH5eNBhuMBAEAmhuMBAFDplp+9JF6Cwhg0KO67L559Np57Lt54o8VRTNddl88XjR0bb77Z7mapqprl63rD8QAAYCXESwAAVLqk4XhQeMlk7LBD7LDDip8ffnh8/vP5fNFjj7U7XkpULV8vnhPzP/nMhmT0GBDL/k8HAABUIPESAACVLrlsYrTuJeh4O+8cBx4Yf/tb3h74/vvtfkQyGYlkpBoiIp64PJ64fCV7Bm8aR98XPQa0+2UAAFCWnL0EAEClMxwPiuvPf45vfjNvT/vww3w8pbpbhg3TX41nfp+PNwEAQFkSLwEAUOmWx0sNxS0EKlTv3nHTTfHgg/HjH+fhaVOn5uEhseHemfe8/Vg+3gQAAGXJcDwAACpd0/kpupegWBKJ2H332H33OPvsOPzw+Pvfc39UfuKl/a+OzQ+KhTNX8tUbD8Qb90dEfPhCLJ4T3frm430AAFBmxEsAAFS6pu4l6RIUXe/ece+98dxz8d//xttvR0NDLF4cEyfGtGltnXqXn+F4Nd1i4y+v/KteqzfGS6mGmPj3WGfHFt8mktF3reVHugEAQCclXgIAoNIldS9Bidluu9huuxU/nD8/6uoiIq66Ks46a5X3zpoVixZF9+4FK27t7SNZHQ11ERF//+5KNvRbO459KHoNLlgFAABQfP5GFQAAlW752UviJShhvXpFv37Rr1+st16GnflpYFqVrr1j2JjWNnw6JZ75fSErAACA4hMvAQBQ6RLL46XiFgK0yRprZNiw/vpx1lmxeHHBKtj+pAwbJj9SsHcDAEBJMBwPAIBK1zQcL6V7CcrBsGGZ91x8cVx8cYweHSNHxmabxW67xdZb56+CkV+N746Lj15e8fPX/hGv3hUR8dHLsWBG9ByUv1cCAEBpES8BAFDpkrqXoKxk7F5q8sIL8cILjesTTojLL4+ePfNUxKD1Y9D6K37Yc1BjvBQRT/wyVt+85deJGDYmVtswTxUAAEAxiZcAAKh0yWUTo529BGWhW7cYODBmzszurmuuiYaGuPbawtSUNny7qOkRSxdGRDx71Uo2JGvimH9nOLoJAADKgbOXAACodM5egrLTlvl4n3XddfHMM/kupbnqrrHOTq1taFgab/67kBUAAEAHES8BAFDpmobjOXsJysXw4Tne+NBDea3js754dvQc3NqGhVl2XQEAQEkyHA8AgEqXbEyXDMeDsrHLLvHPf+Zy40sv5bmSFQ3dIn7wesyfvuLnN+wXM9+KiFg0u8AVAABAR9C9BABApUsajgfl5mtfiy5dcrlx4cJ8l/JZyaroM3TFf3qutqyCWYWvAAAACk68BABApUvoXoJys9568Zvf5HLj0qX5LqWNuvdvXOheAgCgUxAvAQBQ6ZqdvVTcQoAsHH983H57DB2a3V1Fi5d6iJcAAOhUxEsAAFQ6Zy9BOUok4uCD491346WX4pZb4uqro3fvzHfpXgIAgLwQLwEAUOmanb0kXoIy06VLbLFFHHZYnHBCzJ0bjz+eYX/x4qUBjYslc6O+WEUAAEDeiJcAAKh0iaZ4qaG4hQDttfPOccwxrW0ofvdSRCyeU6QiAAAgb8RLAABUuqplfyhO6V6C8ldT09q3JREvLZxVpCIAACBvxEsAAFS6ZsPxilsIkAclGi/1GLB87fglAADKn3gJAIBK5+wl6ExKNF5q3r20SPcSAABlT7wEAEClW5YuiZegMyiHeEn3EgAAZU+8BABApTMcDzqTUo2XDMcDAKBTES8BAFDpkrqXoBMp0XippntUdW1cLzQcDwCAsideAgCg0i3vXtK+BOWvROOlRCJ6LGtg0r0EAED5qy52AQAAUGSJZfGS5iXoBEo0XoqI7v1j3rSIiKlj45mrWnyVSMTwbWPYmKLUBQAAORAvAQBQ6QzHg86kpOOltGnjY9r4Fb9NJOPo+2Pt7Tu4KAAAyI3heAAAVLrlw/GkS1D+Wo+XGhqioaGjSllB3zVb+zbVEJMe7KhSAACgvcRLAABUOt1L0Jm0Hi9FERuYtj8p+g5vbcP8jzuqFAAAaC/D8QAAqHTOXoLOpC3xUteuHVLKCoZuEadMiLrFK37+533iwxciIuZ/0vFFAQBAbsRLAABUumbD8eRLUPZKt3spIhKJqOm+4oe9V29c6F4CAKB8GI4HAEClMxwPOpOSjpdWqtfgxsX86UWtAwAAsiBeAgCg0iWTTd1LxS0EyIPyi5d6LouXFnwSDQ1FLQUAANpKvAQAQKVbNhsvIiKlgQnKXPnFS03dSw1LY/GnxawEAADaTLwEAEClSzbLlzQwQbkr43gpHL8EAEDZEC8BAFDpks26lxy/BOWuDOOlIcvXjl8CAKBMiJcAAKh0LbuXxEtQ3sowXmrevSReAgCgPIiXAACodIlm8ZJ0Ccpd+cVLPZvFSwvESwAAlAfxEgAAla7KcDzoRMovXuraK2p6Nq6dvQQAQJmoLnYBAABQZMlk8+F4RSwEyIPyi5ciotdqMXtBRMTkR6Pm0pVs6Ds8Rh0SVX6EBwCgVPizKQAAlS7h7CXoRMozXhoSs9+NiPjo5fjo5ZXvmfFm7HFBB9YEAACtMRwPAIBK16x5KVINxasDyIeyjJcGjMi8Z8pTha8DAADaSrwEAEClS+pegk6kLOOlHU+JwSMjWbOSf2LZ/4GqL8G6AQCoXIbjAQBQ6Zp3L4mXoNyVZbw0eOM48ZmVf3Xnt+LVuyIiGuo7siIAAGid7iUAACpd87OX6sVLUObKMl5qRXLZ3wptKK+6AQDo5MRLAABUuubD8aRLUO46b7xUV9Q6AACgBfESAACVznA86Ew6XbxU1bgQLwEAUErESwAAVLrm3UsN0iUoc50tXqpa9u/j7CUAAEqJeAkAgEqXaN69JF+CMtfZ4qWm4Xj15VU3AACdnHgJAIBK5+wl6EwSiaiqam1DucZLhuMBAFBKxEsAAFS6lsPx5EtQ9lpvYCq3eMnZSwAAlCLxEgAAlS7ZfDieeAnKX+eKl5y9BABAKarOvAUAADq1RLPupQv+MbFXtyz+kNyzS9Uh2wwfs/aAAtQF5KhzxUtNw/HKq24AADo58RIAAJWueffSf9/8JNvbH5jw0aM/2nVQr675rAloh04aLxmOBwBACTEcDwCASjesf/f23D5vSd09L07NVzFA+3WueKnZ2UumdwIAUDJ0LwEAUOlGDu1z9pc3+cf4D2vrs/vV7ZSZCxbW1kfE7f97f+QafQpT3UoM799j+IAeHfY6KDudKl6qavYvk2qIRNWqtwIAQMcRLwEAUOkSicSxO484ducR2d74y/+8ceUjkyLirenzD/vDcwUobeUSibjyG1vtO2qNDnsjlJdOFS8lm/3Y3lC3vJkJAACKynA8AADI0YGj1yzKe1OpuGPsB0V5NZSFThsv1ZdX6QAAdGbiJQAAyNE6g3oe/rm1ivLq6XMXF+W9UBY6V7zUrF2poa54dQAAQAuG4wEAQO4u2n/zY3caMWthbce87o9PvH3/hI8iYuaCDnojlKPOFS81H45XX7w6AACgBfESAAC0yzqDeq4TPTvmXRsM7h3xUUTMXlDb0JBKJhMd814oL50rXmr2L6N7CQCAkmE4HgAAlI1BvbqkF3UNqbmLy+t35NBxOle81Lx7qbxKBwCgMxMvAQBA2RjYq2vTesZ88/Fg5TpXvOTsJQAASpF4CQAAysaAnl2a1jPnLyliJVDKOle85OwlAABKkXgJAADKRtNwvIiYtUD3Eqxcp4qXqpy9BABAKRIvAQBA2RjYs9lwPPESrEKnipeady/Vl1fpAAB0ZuIlAAAoG32711QlE+m14XiwKp0rXnL2EgAApUi8BAAAZSOZTPTv0Tgfb+Z83Uuwcp0rXnL2EgAApUi8BAAA5aTp+CVnL8GqdK54ydlLAACUIvESAACUk4HL4qUZhuPBKnSueKl591J5lQ4AQGdWnXkLAABQMgb27JpeTJ+3ZPrcxVnd27Nrdc+ufgSg8+u88ZLuJQAASoWfLQEAoJwM6NnYvfTOjAXbXvxwVvdWJROn7r7Bd7+4QQHqghLSueKlquVr8RIAACVDvAQAAOVktd5dc763viH1+0cnn7jr+slkIo8lQalpPV768MPYY4/GbRtsEPvtF7vv3jF15aSq+dlL9cWrAwAAWnD2EgAAlJMvbjy4S3Xuf4xftLR+0VK/oaaTaz1eWrIkHnooHnooHnggfvvb2GOP+PKXY+HCjiouW82H49WXV+MVAACdme4lAAAoJ5sM7fOv7+/84nufNqRSbb/rf+/OumPsB+n1wtp6JzDRubUeL33W/ffHoYfGvfdGogT7+py9BABASfJTJQAAlJkRq/UasVqvrG7pWlPVFC8tqtW9RCeXbbwUEf/4RzzzTOywQwGqaSdnLwEAUJIMxwMAgM6vZ5flv6FeUOs31HRyOcRLEfGnP+W7jrxIOnsJAIBSpHsJAAA6v+7N4qWFupfo7Lp3z+Wu//u/WLw4vvCFOOqoHAOqgmgxHM/ZSwAAlArdSwAA0Pn16LL8N9QLdS/R2W2xRY433nprHHdcjBoV772X14Law9lLAACUJPESAAB0fj11L1FJxoyJfv1yv/3112PttePII+OeeyKVyltVOXL2EgAAJUm8BAAAnV/L4Xh+Q00n16NH/O537X3ITTfFAQfEvvvGrFn5qClnVc5eAgCgFImXAACg8+vZYjie31DT+R12WPzqVzkewtTc/ffHt79d1B6m5sPx6p29BABAqajOvAUAAChzzbuXFomXqACJRJxySnzlK/H3v8eLL8acOY2f33tv1o/629/ikUdit93yW2CbOXsJAICSJF4CAIDOr2t1siqZqG9IRcSCJeIlKsWIEXHKKS0++dvf4qCDsn7Oo48WL15KNBs6Il4CAKBkGI4HAACdXyKR6FHT2MC0cKnfUFO59t03hgzJ+q6XXy5AKW2USERy2fFLzl4CAKBkiJcAAKAiNM3HW6h7iQrWtWv8/OdZ37VwYQFKabum+XgNzl4CAKBUiJcAAKAi9Oza+Bvqhc5eorIdeWRcfXX06pXFLYsXF6yatlgeL2k9BACgVIiXAACgInRvGo5X6zfUVLoTTojJk+P3v4+TToo118y8f9GiwtfUimTjf7ziJQAASod4CQAAKkLPrk3xku4liMGD48QT43e/i/ffj7vuyrC5yN1LVc5eAgCg5IiXAACgInTv0jQcTwMEtHDAAfH//l9rG4rdvbRsOF69s5cAACgV4iUAAKgIPbvoXoJVGjy4tW9LJV4yHA8AgJIhXgIAgIrQfVm8tEi8BJ/RvXtr3xZ5OJ6zlwAAKD3iJQAAqAg9lw3HW2A4HnxGt26tfVvs7iVnLwEAUHLESwAAUBF6GI4Hq9Z699KSJdHQ0FGlfJbheAAAlB7xEgAAVITuzeKlVCpV3GKg1LQeL0XEkiUdUsdKLY+XlhavCAAAaEG8BAAAFaFpOF59Q6q2voiNGFCKWh+OF8Wdj+fsJQAASo94CQAAKkJT91JELFxiPh60kLF7qajxUlP3kv9yAQAoFeIlAACoCD27NouXlvolNbSQMV5avLhD6lipqprGhe4lAABKhngJAAAqQvea6qb1olq/pIYWSns43rL/eOudvQQAQKmozrwFAAAof827l55/Z/aM+bVtvHFIn27rDupZmKKgVJT2cDxnLwEAUHLESwAAUBF6NDt76cy7J2R177c/P+LMfTbJd0VQQkp6OJ6zlwAAKD2G4wEAQEXo271Lzvde/9S7tXUNeSwGSk1pD8dz9hIAACVHvAQAABVhvdV6brvOgNzura1vmDF/SX7rgZJSJsPxnL0EAECpMBwPAAAqQiKRuPW47d74eN7ipW2dr/XS+3N+et/E9Hr6vCVr9Mv0C3goW2UyHE/3EgAApUK8BAAAlaK6KrnpGn3bvr9bzfLjmqbPLeIv16HgSns4nrOXAAAoOYbjAQAAKze49/LfuE+fZzgenVlJdy9VOXsJAICSI14CAABWbmDPLlXJRHotXqJzq6mJqqrWNpTE2Uv1zl4CAKBUiJcAAICVSyYTq/Xqml5/Ms9wPDq51ufjGY4HAADNiZcAAIBVGtynMV6aPlf3Ep1c6/Pxijkcb3m8ZDgeAAClQrwEAACs0uDey+Ilw/Ho7FqPl4raveTsJQAASo54CQAAWKXVejfOC5tuOB6dXQkPx1t29lKDs5cAACgV4iUAAGCVmrqXZsyvrW9IFbcYKKhyGI7n7CUAAEpFdeYtAABApWo6e6m+ITX+g0/7da9pfX9z3Wqq1ujX6i/soZSU8HA8Zy8BAFByxEsAAMAqDe69fF7Y1656Otvbd95g0A3f2jaZTOS1KCiI0h2OV+XsJQAASo7heAAAwCoN7dvqb9wzeeKtGU9MmpGvYqCgSng43rKzl+qdvQQAQKkQLwEAAKu06Rp9thjerz1PeG3a3DzVAoVVBsPxIhUNDcWrAwAAljMcDwAAWKVEIvHXE7Z/7u1Z8xZn1zZxzr2vzJhfGxFvfjSvMKVBnpXucLxks5/cG+oi2aV4pQAAQCPxEgAA0JqaquROGwzK9q5bn3/vibdmRMSb08VLlIfWu5cmTIjtt29cJxKx7rqx3XZx3HEZ7sqPZM3y9a83i2h5mNngTWKfX8SgDQpfBwAALCdeAgAA8m+jIb3T8dJbH8+vb0hVJRMZb4Hiaj0oWrgwnn12+eUzz8Stt8avfx133BFbb13gyprOXoqI+R+v+O38j+LhC+OQmwpcBAAAtODsJQAAIP82XL13erGkruH9WQuLWwy0RevD8VbqnXdim23iT3+KF1+M2toC1JQ2bHSGDR++WLB3AwDAyuleAgAA8m/DIb2b1hfeN3H1vtn95n7LNft9fes1Ewk9T3ScnMfcHXtsRETXrvGjH8VZZ+USU2UwbEx8828x6aFI1bf4fNr4eP+5iIg5H0RdbVQ7kwkAgI4jXgIAAPJvg8G9mtaPvD4929tvfe69qmTiwDFr5rUoaE07T1FasiQuuiiefDIeeiiqqjLvz84Gu8cGu6/44fjbG+OlSMWc92Pgevl+KwAArJLheAAAQP717Fq96Rp92vOECVPn5KsYaItevTLvyeixx+KXv8zDc9qk/zrL17Pf6ai3AgBAhO4lAACgQC7af7NLHnh96uxFWd01bc6ihlRExNL6hoKUBauw1Vb5ec6NN8aPf5yfR2XQIl56t0NeCQAAjcRLAABAQWy1Vv87jt8+27t2/vkj789aFBF19akCFAWrtM02MWBAzJrV3ue8+mrMnBkDB+ajptb1GhzV3aNuUYR4CQCAjmY4HgAAUEJqko0/pCxt0L1Eh+rWLa69Nj+P+uij/Dwng0RieQOTeAkAgI6lewkAACgh1VWJ9KK+QfcSHe2gg+Laa+OHP4x589r1nNmz81RQRv3XiU9ei4j45I34YNyK33bvFwNGRCLRUdUAAFBBxEsAAEAJqV7WvWQ4HkXx7W/Hl78c998fL70Uc+a0+OqWW9r6kA6Nl9JmvBl//OJKNtT0jOouK7+3a5/Y5cex1eEFKg0AgM5NvAQAAJSQmmXdS0vrDcejOIYNi+OOW8nnN90U3/pW3HBD5id0XLw0cL0MG5YuiKULVv7Votlx/49j1CFRVZP3ugAA6PScvQQAAJSQ6qpl3UuG41FiEon485/jlltik00y7Oy4eGnzg6LXkNxvX7ogaufnrxoAACqI7iUAAKCEVCV1L1G6Eok47LA47LDo2jVqa1e5rePipe7945QJ8cHYaFi64lepVMx6O2a/E6nPJLUfvxpvP9q4bqgveJEAAHRG4iUAAKCENA3Hc/YSpWzo0JgyZZXfdly8FBHVXWOdHVf+1XpfWPnnL97cLF6qK0hVAAB0dobjAQAAJaQ62TQcT/cSpat//9a+7dB4KQfJZn/TVLwEAEBOxEsAAEAJaepeWqp7iRLWieIlw/EAAMiFeAkAACghupcoC63HS7NmdVQduUk0+1WA7iUAAHIiXgIAAEpItbOXKAe6lwAAqHDiJQAAoITUVDV1L4mXKF2dKF7SvQQAQC7ESwAAQAmpTjZ1LxmOR+kSLwEAUOHESwAAQAmpXta9tNRwPEpY6/HSkiWxaFFHlZKDZNXydcpwPAAAciFeAgAASkhN09lLDbqXKF2tx0tR4g1MzeMlZy8BAJAT8RIAAFBCqpYPx9O9ROkq83jJcDwAANpLvAQAAJSQmuXD8XQvUboyxkv77x9LlnRIKTkQLwEA0G7iJQAAoIRUN3UvNeheonRljJcmTYovfzlKdMSjeAkAgHYTLwEAACWkeln3kuF4lLKM8VJEPPxw/OlPhS8lB85eAgCg3cRLAABACalZ1r20tET7PiAiol+/qK7OvO3HPy7JBqaEeAkAgPYSLwEAACWkqXsplYp68/EoVdXVsdVWmbd9+mkcdFDUl1qCYzgeAADtJl4CAABKSE1VomldV4p9H9DoyCPbtO3uu2OHHeLFFwtcTVbESwAAtJt4CQAAKCHVyWbxkuOXKGEnnBCf/3ybdj7/fGy9dZx6asybV+Ca2qj52UupUmutAgCgPIiXAACAEtI0HC/ES5S26ur497/b2sPU0BC//nVsskn87W+RKvr/rlt0L4mXAADIhXgJAAAoIc2H4y01HI/S1q1b3HBDHHVUW/dPnRoHHRQHHljsNqbm3UuG4wEAkBPxEgAAUEKqkrqXKDPXXht9+2ax/+67Y889o66IsY6zlwAAaDfxEgAAUEJadC/V616iDHTtGj/9aXa3PPtsXH11YappC/ESAADtJl4CAABKSHXz7qUG3UuUh+98J/bfP7tb/vKXglTSJi2G4zl7CQCAXIiXAACAElLdrHupTvcSZaK6Ov761zj//OjSpa23/O9/UV+sZKdF95J4CQCAXIiXAACAEtJyOJ7uJcpGVVWcd16MHx9f+EKb9i9dGlOnFrimVUk0714yHA8AgFyIlwAAgBLScjie7iXKzMYbx8MPx003xWqrZd78zjuFL2ilnL0EAEC7iZcAAIAS0mI4nrOXKEOJRBx+eLzxRhx7bIadb7/dIQV9lngJAIB2Ey8BAAAlpKaqWfeS4XiUrf794+qro6qqtT3Fi5eSEcty3JSzlwAAyIV4CQAAKCHVyWbdS/WG41HGqqtj7bVb21C04XjRrIGpQbwEAEAuxEsAAEAJad69tNRwPMrcuuu29m3RupciIrmsr8pwPAAAciJeAgAASkiV7iU6kREjWvt2woR48MGOKmUFy7uXxEsAAORCvAQAAJSQmqrl8dJSZy9R5lqPl+bPjz33jMMOi48+6qiCmizvXjIcDwCAXIiXAACAElKdXP5DSl2D7iXKW+vD8dJuuy023jiuuirqOzLocfYSAADtI14CAABKSHVV8+F4upcob613LzWZMydOOim23z7Gjy9wQU0MxwMAoH3ESwAAQAmpqVr+Q8pSZy9R5jbZJGpq2rr5f/+LHXeMxx4rYD3LJZqG44mXAADIhXgJAAAoIdXJZt1LDbqXKG+9esVuu2Wxf8GC+NKX4q23ClZQE91LAAC0j3gJAAAoIdVVzc9eEi9R9i6/PIsGpohYvDj+8IeCVdMkuax7KeXsJQAAciFeAgAASkhNi7OXDMej7G26afzrX9G/fxa33Hxzwappsrx7SbwEAEAuxEsAAEAJqU42616q171EZ/DFL8arr8ahh7Z1/7Rp8cknhSwoDMcDAKC9xEsAAEAJaX720tIG3Ut0EkOHxm23xb//Heut16b9EycWuKCm4XjiJQAAciJeAgAASkgymWgKmHQv0cnsuWdMmBDnnJP5NCbxEgAAJU68BAAAlJbqqsafU5y9ROfTvXtceGFMmBBdurS2rfDxUtNwPP+VAQCQC/ESAABQWmqWtS8tbdC9ROe00Uax0UatbXjppUgV9H/+zl4CAKB9xEsAAEBp0b1EJdh009a+ffLJ2GOPePPNgr1evAQAQPuIlwAAgNJSU7Wse8nZS3ReI0dm2PDww7H55nH++bF4cQFen1j22wDxEgAAOREvAQAApaU6uax7yakwdF4Z46WIqK2NCy6IzTePBx/M9+ubupdS/isDACAX4iUAAKC0VC/rXqp39hKdV+vD8ZqbNCn23DMOOyw++ih/rzccDwCA9hEvAQAApaVm2dlLhuPRiW20UWy0URb7b7stNtkkHn00T68XLwEA0D7iJQAAoLRUJxu7l+rqje2i00ok4rjjsrvl009jr71i7Nh8vD5Z1bgQLwEAkBPxEgAAUFqqm7qXDMejU/ve9+LrX8/ulqVL45RT8vFu8RIAAO0jXgIAAEqL7iUqRE1N3HprnHZaJLP50fypp2LWrHa/e/lwPP+VAQCQC/ESAABQWqqrmuIl3Ut0ctXV8ctfxvPPx9ZbZ3HXq6+2+8XOXgIAoH3ESwAAQGmpSRqOR2UZMyaefTZ+97vo06dN++fPb/crxUsAALSPeAkAACgtzbqXjO2iUlRVxUknxWuvxSGHZN68eHG73+fsJQAA2ke8BAAAlJbqqsafUwzHo9KssUb85S9x770ZtuUhXko0xUv17X4WAACVSLwEAACUlppkY/fS0gbdS1Si3XbLsGHRona/o2k4Xkq8BABALsRLAABAaWkajlfv7CUqUrduGTbkYzies5cAAGiX6sxbAAAAOlDTcLwZ85bcOfb9rO4d0qfbTusPSi7rf4JyVFUVNTWxdOkqNzh7CQCAohMvAQAApaVpON6Hcxb/6K8vZ3v7UduvfcFXN8t3UdChunXrsHjJcDwAAHIhXgIAAEpL3+417bn9hmemjFyjz+p9u2d1V7/uNaPW7JtIaHuiJHTrFvPmrfLbfJ69JF4CACAn4iUAAKC0fGO7tf454aMZ85fk/ITT/zYhh7t232TwH4/aJueXQh51bzUedfYSAABFJ14CAABKy8ar93nuzN1mZh8vXfqv1+96YWrO733otenvzVy41sAeOT8B8qVbt9a+FS8BAFB04iUAAKDkVCUTg/u0+vv1lTn7yyPHv//p5E8W5Pze92aJlygJrcdL+RiOt+zspVR9pFJhLCQAAFkSLwEAAJ3EgJ5d/n3K5yd/smBpfUPb75q1oPbI/3s+vZ766cLClAbZKfhwvETV8nVDfVT55QAAANnxJ0gAAKDzqK5KbrR676xuqW9IVScTdQ2piPhgdvu7QiAPOm44XkSk6v1yAACAbCWLXQAAAEAxVSUTQ/s1/i5/qniJ0tCh8ZLjlwAAyJ54CQAAqHTD+jVOItO9RInouLOXQrwEAEAuxEsAAEClG9avR3ox9VPxEiWh4Gcvteheqm/34wAAqDjiJQAAoNKt2b/xd/kfzV1cV99Q3GIgOmI4nu4lAADaRbwEAABUumHL4qX6htS0Oe3/zT20V+GH4+leAgCgXaozbwEAAOjU1uy3fBLZt67/X48uVa1sXkEykdhlw9W+v9sGyWSiAKVRoTp2OJ7uJQAAsiZeAgAAKt2a/Xs0rSdNn5/t7S+9/+kWw/t+ceMheS2KimY4HgAAJc5wPAAAoNIN69993UE92/OEtz9ZkK9iIDoiXjIcDwCAdtG9BAAAVLqqZOLqw0ff+MyUmfOXZHXjQ69Nr29IRcTcxfo/yKfWh+Pl4eylRLPupZR4CQCArImXAAAAYuPV+1x8wObZ3jXmpw/OXFAbEXMXLS1AUVSujN1LqVQk2nPal7OXAABoH8PxAAAActSne016MXexeIl8aj1eioja2va9QLwEAED7iJcAAABy1Kdb4+/o5y7yC3ryKWO81N75eMlmw/HESwAAZE+8BAAAkCPdSxRI62cvRcTixe17QYvuJWcvAQCQNfESAABAjvp0a4yX5i3W/0E+Zexeane81Lx7SbwEAEDWqjNvYWXeeeedsWPHfvjhh7W1tWusscbGG288ZsyY/L5iwYIFr7zyyuuvvz5jxozFixf369dv6NCh22yzzfDhw/P7IgAAIDd9ujcNx9O9RD4VPl5y9hIAAO0iXsragw8+eO655z777LMrfL7eeuudcsopJ510UiKRaM/zJ0yY8Ne//vU///nP2LFj6+pW8qf8TTfd9KSTTjruuOOqq/1/HwAAFFNT95LheORXxuF4zl4CAKC4DMfLzmmnnbbXXnt9NluKiMmTJ5988sm77bbbnDlzcn7+2WefPWrUqAsvvPDZZ59dabYUEa+++uqJJ5643XbbTZo0KecXAQAA7dd09tL8JXUNDaniFkNn0rHdS4bjAQCQNe0vWTj77LN/9atfpdc1NTUHHXTQtttu27Vr14kTJ95yyy2zZ8+OiEcfffTAAw984IEHampqcnjF/Pnzm9ZdunTZZpttdthhh2HDhvXp02fGjBlPP/30fffdl46dXnjhhV133fWJJ55Yd9118/EvBwAAZK1Pt8YfqVKpmLekrm/3XH4KgM8yHA8AgBInXmqrxx577Gc/+1l6vc466/zzn/8cOXJk07cXXXTRgQce+PDDD0fEww8/fPHFF5933nk5v2vbbbc99thjDznkkD59+qzw1eTJkw899NCxY8dGxNSpU4899tj0SwEAgI7Xu9vyPGnuoqXiJfIlY7zU3uF4iWbD8T6dEtNfb/FtjwHRa3D7XgAAQCcnXmqTVCr1ox/9KL3u0qXL3//+9+bZUkT07dv33nvv3WKLLSZPnhwRl19++Xe+853Bg7P+4/iWW275wAMP7L333qvasN566z300ENbb711ejLeI4888uSTT+60007ZvggAAGi/Pt2X/0jl+CXyKOPZS/nsXnrgx5/5OhE7fj/2uKB97wAAoDNz9lKbPP744+mGoYg4/vjjN99888/u6dmz52WXXZZez58//9prr83hRUcffXQr2VJa3759L7hg+Z/y//GPf+TwIgAAoP36tOheMmGMvCn4cLya1l+Qiqd/Gwtnte8dAAB0ZuKlNvnb3/7WtD7hhBNWte2rX/3q6quv/tlb8m733XdvWqf7pQAAgI7Xp9k0vHm6l8ifgsdLfYbF8O1a25BqiOkT2/cOAAA6M8Px2uS+++5LL4YPH77CWLzmqqurd99995tvvjkixo8f//777w8fPrwQ9fTu3btpPX/+/EK8AgAAyKhF99Ji3UvkTeHPXkrEkffG+89F7YIWny+ZF3cf37j+eGKsYxI7AAArJ17KbO7cue+88056veOOO7a+eccdd0zHSxExfvz4AsVLb7/9dtO6qV8KAADoYC3OXlqke4m8SSajS5eorV3lhhtuiC98IVb9tx/boKZ7jNh1xQ9TqXjg9Fj8aUTE9Ffb8XQAADo5w/Eymzhx+UCADTbYoPXNzTc0vzG//vrXvzatt99++wK9BQAAaF33mqrqZCK9nms4HnnVegPT//4XW2wRZ54ZCxfm9a2JRAzZtHH9seF4AACsku6lzJq3Cq299tqtb26+ofmNeTRnzpyrr746ve7Spcv+++9fiLcAAAAZJRKJPt1rZi2ojYiP5y6ZMX9Jx7y3V9fqbjVVHfMuiqVbt5g7t7UNdXVxySXxl7/E734X++yTvxcP2TSmPBURMX1iNDRE0l9LBQBgJcRLmc1t9if6AQMGtL65f//+K70xj04++eSPP/44vT7xxBOHDBlSiLcAAABt0btbdTpeuu359257/r2OeWmX6uRPvrTxt3Zct2NeR1EMGBDTp2fe9s478eUvx8EHx5/+FL165ePFg5dN3KudH7/cKBIt46VufeLzP45RX8/HmwAAKGP+FlJm8+fPb1p379699c09evRoWs+bNy/vxVx11VU33XRTej1ixIgLL7ww768AAADarl/3mo5/aW1dwyX3v/7x3MUd/2o6zJZbZrH5jjti991j9ux8vLhpOF5ELJge8z9q8c+MN+O+U6O+Lh9vAgCgjOleymzRokVN6y5durS+uWvXriu9MS/uu+++733ve00vuv3223v37p3bo6644oorrriilQ3Tpk3L7ckAAFBR9tx09fEfzOn499bWN1xy/2t7bbp6x786W+sP7rXBkBx/cqlkxx4bf/lLFvufey4uvjh+8Yt2v3joFtFv7fh0yio31M6L2nnRvf8qNwAAUAHES5k171iqra1tffOSJcuHrWdsdcrKo48+evDBB9fX10dEVVXVLbfcsvXWW+f8tLlz506dOjV/1QEAQIU6cdf1tliz39RPF3bYG697/O3JnyyIiHte+vCelz7ssPe2x4Vf3fTI7dcpdhVlZrfd4thj449/zOKW666Lc8+NXP8W4jLVXeOIu2P8X2Jxy9z0k9fjnf82rnUvAQBUPPFSZr2aja/O2JDUfEPOrUWf9cQTT+y3337phyeTyRtuuOHAAw9szwP79OkzbNiwVjZMmzatoaGhPa8AAIBKkEgkdtpgUEe+saYqedod4zvyje130zNTxEs5uPbaGDYsLroo6uvbtH/u3Hjqqdh773a/eOB68cWzVvzwpduWx0sNS9v9DgAAypuzlzLr06dP03p2plHWs2bNalrnK156+umn99lnnwULFkREMpn8v//7v29+85vtfOZpp532QauGDh2aj9oBAIA8+8oWa+y60WrFriI7U2YtbGhIFbuK8pNMxvnnxwsvxPbbt/WWp58uWDVVzY4ZqxcvAQBUOt1LmY0YMaJpPWXKqsdPf2bDeuut1/63P/3003vvvff8+fMjIpFIXHfddUcddVT7HwsAAJSp6qrk9d/adtqcRYuXlvq8gfsnTPvFv9+IiNq6ho/mLl6jXz7nh1eOUaPiySfjj3+M00+PTz/NsPmppwpWh3gJAIBmxEuZjRw5smn91ltvtb550qRJK70xN88888zee+89b968iEgkEtdcc80xxxzTzmcCAACdwNC+ZRDVbDW8X9P63ZkLxEs5Sybj29+O/fePH/4wbrqptZ1PPRW33BKHHRaJRN6LaBYvGY4HAFDxDMfLrE+fPuuuu256/VSmvwn25JNPNq1HjRrVnvc+88wze+21V1O2dNVVV337299uzwMBAAA60tqDejat35u5sIiVdA6DB8eNN8YZZ7S2Z8mSOPzw2H33eOONfL9e9xIAAM2Il9pk3333TS/ee++9iRMnrmpbXV3dww8/nF6PGjVqrbXWyvmNzz77bFPfUkT87ne/O+GEE3J+GgAAQMcb2qdbl+rGnzrfFS/lyW67Zd7zyCMxalScd14sXpy/F4uXAABoRrzUJgceeGDT+pprrlnVtnvvvXfatGmfvSVbzz///F577TV37tz05e9+97sTTzwx56cBAAAURTKZGN6/cSDee7MWFLeYTmO77SLZhh/la2vjwgtj883jwQfz9GLD8QAAaEa81Caf//znx4wZk15fe+21r7zyymf3LFiw4PTTT0+ve/bsefzxx392z9FHH51Y5vrrr1/pu8aOHbvnnns2ZUtXXnnlSSed1P5/BQAAgI63zsDG+Xhvf7Lg04W1bf+nrr6huJWXrN69Y8st27p50qTYc8848cRYtKjdL9a9BABAM9XFLqA8JBKJn//857vttltE1NbW7rfffvfff/8mm2zStGHOnDlf//rXJ0+enL78wQ9+MGTIkBxe9OKLL+65555z5sxJX1555ZXf/e53210+AABAcaw1sEd68fpH87a8MIs+mv49aq78xuidNhhUmLrK27HHRlYTLq6+Ov7zn7jqqthzz3a8NdnsFwj1te14EAAAnYF4qa2++MUvnnHGGZdeemlEvPvuu1tuueVBBx207bbbdu3adeLEiTfffPPs2bPTO3fdddezzjort7f88Ic/bHpOTU3Nr3/961//+tcZ75o0aVJurwMAACiopu6lbM1euPTcv7/y8Gm7JBKJ/JbUCRx1VPz85/Huu1ncMnly7LVXHHpoXHFFDB2a01uruixfN9Tl9AgAADoP8VIWLr744gULFlx55ZURUVtbe+utt956660r7Nlll13uvvvuLl26rOwBmdXX1zetly5d2tQOBQAAUI722XzoZf96fWFtfeatn/H2JwsmTpu76Rp9815VuevRIx5/PPbYI954I7sb//KXuP/+uPjiOOGEqKrK8q2G4wEA0Ix4KQuJROK3v/3tvvvue8455zz//PMrfDtixIjvf//7J598sr9bBwAAkLZa766P/XDXx978ZGmbz1JauKT+Z/e/ll5f9/jbX9ps9aze2Ltbzdbr9O9anW14UmaGD4/nn49zzonf/S4asjmmau7c+O5344Yb4pprYvTobF7ZfDheg3gJAKDSJVKpVLFrKEtvv/322LFjP/zww9ra2qFDh26yySZbb711sYvKpzXXXHPq1KnDhg374IMPil0LAABQWfa78skJU+fkfPsO6w28+Zjt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",
+ "ok": true,
+ "headers": [
+ [
+ "content-length",
+ "117882"
+ ],
+ [
+ "content-type",
+ "image/png"
+ ]
+ ],
+ "status": 200,
+ "status_text": ""
+ },
+ "https://localhost:6006/data/plugin/timeseries/imageData?imageId=WyJkZWZhdWx0RXhwZXJpbWVudElkIiwiZXhwMyIsIkYxX2N1cnZlIiw3OSwyXQ": {
+ "data": "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p87hw4cPHDhQZbMDAAAAAODBQrwEAADKsXz5cjlrsbe3//777w3twdPT09PTs9xmYWFhFy9eTEhIyM7OdnV1rVOnTrdu3RwcHAyesZbg4OBz584lJCRYWFh4eHh06dKlXr16Femw4tLS0oKCgqKjozMyMpydnZs1a9apUydT0wr9r7KwsLDg4ODExMT09HRnZ2fprXN2dja6w9zc3CNHjly/fj0rK8vJyalevXo9e/a0sbExoquoqKhz584lJiYmJyebm5s7Ozs3atSoVatW+vem0WguX7587do1+bvh5eXVvXt3W1tbI+ZTqv3791+8eFF+uHr1av2zJYmFhcWAAQMqaz6GiomJOX/+fGxsbHJysqOj4zPPPFOnTp1qGLfSv3gAAAAAgIeGBgAAVCUfHx/5r91Dhw5VbueHDh2SO/fx8ancziXZ2dnaPxa/8847lT5EXl7eV199VeryLFNT0759+x49elR3D9rvw7x586QnN27c2KhRo5J9duzYsawOx48fr8//fCr2VsvP9+zZU/c87969+9xzz5mbmxfr0M3N7fPPPy8sLNRoNPPmzdP/C5OZmTl//nxfX9+SkzQxMenVq9eRI0d096D9kiMjIzUaTVpa2vTp00tmP+bm5q+//npiYqLuDrXn9sknn/j7+5f6HlpYWDzxxBObNm0qKCjQ0UlCQsL06dNr165dsgdzc/MhQ4YEBwfrOR/dnn76abnnNm3aVEqfmtLeXh1K/RoXU/LLtmvXrj59+hTbqXLbtm1nz56VH3br1k3PCa9bt06+a8qUKWU1q/gXDwAAAADwsCvnyAQAAPCYO3z4cEpKivzwlVdeqdz+r1692qRJk5kzZ4aHh5e8WlRUdODAge7du0+cOLGwsFDPPgsKCsaOHfvCCy+EhYWVvHr69OlevXpp/4xePQIDA5s2bfr777/LO7DJEhMTP/jgg969e6enp+vf4a5du+rXrz9//vxSj+BSqVRBQUE9evSYNGlSUVGRnn2Ghoa2bNly6dKl2dnZxS4VFBSsXLmyU6dOt2/fLref7du3+/r6fvTRRzdv3iy1QX5+/r59+0aPHn38+PGyOlm7dm39+vWXLl0aFxdX8mpBQcGOHTtat269cOHCcuejW2Zm5r59++SHr776agU7rB4ajeatt94aNGjQwYMH1Wp1savt2rVr0qSJVB8/flzPc9p+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